<?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>153405</bug_id>
          
          <creation_ts>2016-01-24 02:17:06 -0800</creation_ts>
          <short_desc>[GTK] Implement overlay scrollbars</short_desc>
          <delta_ts>2016-02-01 05:21:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=122859</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=115363</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>153304</dependson>
    
    <dependson>153352</dependson>
    
    <dependson>153398</dependson>
    
    <dependson>153404</dependson>
    
    <dependson>153481</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>bdakin</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>darin</cc>
    
    <cc>gyuyoung</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>ossy</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>yoon</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1158104</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-24 02:17:06 -0800</bug_when>
    <thetext>For consistency with all other GTK+ widgets, but also to make scrollbars work with the threaded compositor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158105</commentid>
    <comment_count>1</comment_count>
      <attachid>269692</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-24 02:45:37 -0800</bug_when>
    <thetext>Created attachment 269692
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158126</commentid>
    <comment_count>2</comment_count>
      <attachid>269692</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-01-24 12:07:19 -0800</bug_when>
    <thetext>Comment on attachment 269692
Patch

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

I have some comments, but I’m not sure enough about everything for either a review+ or a review-.

Generally looks good. I am a bit confused by some of the critical details, though.

&gt; Source/WebCore/platform/ScrollAnimatorNone.cpp:54
&gt; +static const double kFrameRate = 60;
&gt; +static const double kTickTime = 1 / kFrameRate;
&gt; +static const double kMinimumTimerInterval = .001;
&gt; +static const double kOverflowScrollbarsAnimationDuration = 1;
&gt; +static const double kOverflowScrollbarsAnimationHideDelay = 2;

This (existing, not new) use of k prefixes doesn’t seem right for WebKit coding style.

&gt; Source/WebCore/platform/ScrollAnimatorNone.cpp:631
&gt; +    gdouble progress = 1;

All the rest are using double, but this one place uses gdouble. Surprised this compiles at all on non-GTK platforms.

&gt; Source/WebCore/platform/ScrollAnimatorNone.h:53
&gt;      explicit ScrollAnimatorNone(ScrollableArea&amp;);

I don’t understand how ScrollAnimatorNone is still the right name for this class, now that it’s implementing scrollbar appear/disappear animations. Is this the right way to factor this.

&gt; Source/WebCore/platform/ScrollAnimatorNone.h:188
&gt; +    Scrollbar* m_horizontalOverlayScrollbar { nullptr };
&gt; +    Scrollbar* m_verticalOverlayScrollbar { nullptr };
&gt; +    bool m_overlayScrollbarsLocked { false };
&gt; +    Timer m_overlayScrollbarAnimationTimer;
&gt; +    double m_overlayScrollbarAnimationSource { 0 };
&gt; +    double m_overlayScrollbarAnimationTarget { 0 };
&gt; +    double m_overlayScrollbarAnimationCurrent { 0 };
&gt; +    double m_overlayScrollbarAnimationStartTime { 0 };
&gt; +    double m_overlayScrollbarAnimationEndTime { 0 };

That looks like a lot of unconditional overhead for ports that never use this, which currently includes EFL at least, perhaps also Mac and iOS? Or maybe not? Is there a way to make this cost conditional?

In new code we are trying to use std::chrono for time, rather than plain doubles.

&gt; Source/WebCore/platform/Scrollbar.h:134
&gt; +    double opacity() const { return m_opacity; }
&gt; +    void setOpacity(double opacity) { m_opacity = opacity; }

A little strange to use double for this. Don’t we use float for this kind of thing elsewhere?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158187</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-01-24 19:05:09 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; I have some comments, but I’m not sure enough about everything for either a
&gt; review+ or a review-.

Thanks Darin!

I&apos;ll give it a final review later, after actually trying it out. (Haven&apos;t tested it yet.)

&gt; This (existing, not new) use of k prefixes doesn’t seem right for WebKit
&gt; coding style.

Yuck, possibly my least-favorite element of Google&apos;s otherwise nice code style. Carlos can do a follow-up patch to remove the k prefixes. Best to match the existing style in this patch.

&gt; &gt; Source/WebCore/platform/ScrollAnimatorNone.cpp:631
&gt; &gt; +    gdouble progress = 1;
&gt; 
&gt; All the rest are using double, but this one place uses gdouble. Surprised
&gt; this compiles at all on non-GTK platforms.

Good catch. I bet it doesn&apos;t compile on non-GLib platforms (EFL does use GLib), but Mac and IOS have separate ScrollAnimator classes so surely they don&apos;t use this code. I don&apos;t know why it works on Windows, though.

&gt; &gt; Source/WebCore/platform/ScrollAnimatorNone.h:53
&gt; &gt;      explicit ScrollAnimatorNone(ScrollableArea&amp;);
&gt; 
&gt; I don’t understand how ScrollAnimatorNone is still the right name for this
&gt; class, now that it’s implementing scrollbar appear/disappear animations. Is
&gt; this the right way to factor this.

I was going to make the same complaint. Perhaps ScrollAnimatorDefault? Or is there a distinction in that ScrollAnimatorNone somehow does not animate the scroll (whatever that means)? I presume scrollableArea.scrollAnimatorEnabled() is returning false for GTK?

&gt; &gt; Source/WebCore/platform/ScrollAnimatorNone.h:188
&gt; That looks like a lot of unconditional overhead for ports that never use
&gt; this, which currently includes EFL at least, perhaps also Mac and iOS? Or
&gt; maybe not? Is there a way to make this cost conditional?

It might be best the way Carlos has it; it would be nice to avoid platform-specific compilation in this file, and I doubt it can be easily split out without causing lots of code duplication. Carlos, what do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158190</commentid>
    <comment_count>4</comment_count>
      <attachid>269692</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-01-24 19:06:25 -0800</bug_when>
    <thetext>Comment on attachment 269692
Patch

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

&gt; Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp:238
&gt; +    m_usesOverlayScrollbars = g_strcmp0(g_getenv(&quot;GTK_OVERLAY_SCROLLING&quot;), &quot;0&quot;);

Is this really the right test...? It&apos;s not a style property? I assumed this variable was to turn off overlay scrolling for debugging purposes. Are all themes expected to implement overlay scrollbars?

I&apos;m halfway pleased that the technical limitation of threaded compositor necessitates implementing overlay scrollbars, because now we have overlay scrollbars. But it&apos;s disappointing that threaded compositor will prevent us from rendering non-overlay scrollbars. I expect this could cause scrollbars to look quite bad with anything besides Adwaita or Ambiance. Can you or Yoon explain the technical limitation here?

&gt; Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp:432
&gt; +#if GTK_CHECK_VERSION(3, 19, 8)

I don&apos;t understand this version check. 3.19.7 was released last week; I don&apos;t see any scrollbar-related changes since then?

I would just get rid of the check; it&apos;s enough that the code works with GTK+ master, that&apos;s what you and I are going to use, we&apos;re the people testing it so optimize for us. Otherwise I&apos;d have to manually remove the check to test this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158241</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-24 23:53:30 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 269692 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=269692&amp;action=review
&gt; 
&gt; I have some comments, but I’m not sure enough about everything for either a
&gt; review+ or a review-.

Sure, thanks for looking at it!.

&gt; Generally looks good. I am a bit confused by some of the critical details,
&gt; though.
&gt; 
&gt; &gt; Source/WebCore/platform/ScrollAnimatorNone.cpp:54
&gt; &gt; +static const double kFrameRate = 60;
&gt; &gt; +static const double kTickTime = 1 / kFrameRate;
&gt; &gt; +static const double kMinimumTimerInterval = .001;
&gt; &gt; +static const double kOverflowScrollbarsAnimationDuration = 1;
&gt; &gt; +static const double kOverflowScrollbarsAnimationHideDelay = 2;
&gt; 
&gt; This (existing, not new) use of k prefixes doesn’t seem right for WebKit
&gt; coding style.

I agree, I just followed the style.

&gt; &gt; Source/WebCore/platform/ScrollAnimatorNone.cpp:631
&gt; &gt; +    gdouble progress = 1;
&gt; 
&gt; All the rest are using double, but this one place uses gdouble. Surprised
&gt; this compiles at all on non-GTK platforms.

Oops, that was not intentional.

&gt; &gt; Source/WebCore/platform/ScrollAnimatorNone.h:53
&gt; &gt;      explicit ScrollAnimatorNone(ScrollableArea&amp;);
&gt; 
&gt; I don’t understand how ScrollAnimatorNone is still the right name for this
&gt; class, now that it’s implementing scrollbar appear/disappear animations. Is
&gt; this the right way to factor this.

I has always been confusing, even when it only implements smooth scrolling.

&gt; &gt; Source/WebCore/platform/ScrollAnimatorNone.h:188
&gt; &gt; +    Scrollbar* m_horizontalOverlayScrollbar { nullptr };
&gt; &gt; +    Scrollbar* m_verticalOverlayScrollbar { nullptr };
&gt; &gt; +    bool m_overlayScrollbarsLocked { false };
&gt; &gt; +    Timer m_overlayScrollbarAnimationTimer;
&gt; &gt; +    double m_overlayScrollbarAnimationSource { 0 };
&gt; &gt; +    double m_overlayScrollbarAnimationTarget { 0 };
&gt; &gt; +    double m_overlayScrollbarAnimationCurrent { 0 };
&gt; &gt; +    double m_overlayScrollbarAnimationStartTime { 0 };
&gt; &gt; +    double m_overlayScrollbarAnimationEndTime { 0 };
&gt; 
&gt; That looks like a lot of unconditional overhead for ports that never use
&gt; this, which currently includes EFL at least, perhaps also Mac and iOS? Or
&gt; maybe not? Is there a way to make this cost conditional?

My initial idea was to add ScrollAnimationGtk derived from None and add there the scrollbars code, but then I realized that the code is not actually GTK specific, and that EFL port could benefit from it eventually. Since this is only used by EFL and GTK+, I&apos;ll ask the EFL guys.

&gt; In new code we are trying to use std::chrono for time, rather than plain
&gt; doubles.

Yes, here it was very convenient to use doubles, because m_overlayScrollbarAnimationCurrent is used directly as the scrollbar opacity value.

&gt; &gt; Source/WebCore/platform/Scrollbar.h:134
&gt; &gt; +    double opacity() const { return m_opacity; }
&gt; &gt; +    void setOpacity(double opacity) { m_opacity = opacity; }
&gt; 
&gt; A little strange to use double for this. Don’t we use float for this kind of
&gt; thing elsewhere?

You are right, float should be enough and it&apos;s what we use in GraphicsContext for example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158243</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-24 23:56:44 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebCore/platform/ScrollAnimatorNone.h:188
&gt; &gt; +    Scrollbar* m_horizontalOverlayScrollbar { nullptr };
&gt; &gt; +    Scrollbar* m_verticalOverlayScrollbar { nullptr };
&gt; &gt; +    bool m_overlayScrollbarsLocked { false };
&gt; &gt; +    Timer m_overlayScrollbarAnimationTimer;
&gt; &gt; +    double m_overlayScrollbarAnimationSource { 0 };
&gt; &gt; +    double m_overlayScrollbarAnimationTarget { 0 };
&gt; &gt; +    double m_overlayScrollbarAnimationCurrent { 0 };
&gt; &gt; +    double m_overlayScrollbarAnimationStartTime { 0 };
&gt; &gt; +    double m_overlayScrollbarAnimationEndTime { 0 };
&gt; 
&gt; That looks like a lot of unconditional overhead for ports that never use
&gt; this, which currently includes EFL at least, perhaps also Mac and iOS? Or
&gt; maybe not? Is there a way to make this cost conditional?

Ossy, Gyuyoung, what do you think about this? If this is too much overhead for EFL or you don&apos;t plan to reuse this code at all, I&apos;ll add a scroll animator class for GTK to move this there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158244</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-24 23:58:53 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; I have some comments, but I’m not sure enough about everything for either a
&gt; &gt; review+ or a review-.
&gt; 
&gt; Thanks Darin!
&gt; 
&gt; I&apos;ll give it a final review later, after actually trying it out. (Haven&apos;t
&gt; tested it yet.)
&gt; 
&gt; &gt; This (existing, not new) use of k prefixes doesn’t seem right for WebKit
&gt; &gt; coding style.
&gt; 
&gt; Yuck, possibly my least-favorite element of Google&apos;s otherwise nice code
&gt; style. Carlos can do a follow-up patch to remove the k prefixes. Best to
&gt; match the existing style in this patch.
&gt; 
&gt; &gt; &gt; Source/WebCore/platform/ScrollAnimatorNone.cpp:631
&gt; &gt; &gt; +    gdouble progress = 1;
&gt; &gt; 
&gt; &gt; All the rest are using double, but this one place uses gdouble. Surprised
&gt; &gt; this compiles at all on non-GTK platforms.
&gt; 
&gt; Good catch. I bet it doesn&apos;t compile on non-GLib platforms (EFL does use
&gt; GLib), but Mac and IOS have separate ScrollAnimator classes so surely they
&gt; don&apos;t use this code. I don&apos;t know why it works on Windows, though.
&gt; 
&gt; &gt; &gt; Source/WebCore/platform/ScrollAnimatorNone.h:53
&gt; &gt; &gt;      explicit ScrollAnimatorNone(ScrollableArea&amp;);
&gt; &gt; 
&gt; &gt; I don’t understand how ScrollAnimatorNone is still the right name for this
&gt; &gt; class, now that it’s implementing scrollbar appear/disappear animations. Is
&gt; &gt; this the right way to factor this.
&gt; 
&gt; I was going to make the same complaint. Perhaps ScrollAnimatorDefault? Or is
&gt; there a distinction in that ScrollAnimatorNone somehow does not animate the
&gt; scroll (whatever that means)? I presume
&gt; scrollableArea.scrollAnimatorEnabled() is returning false for GTK?
&gt; 
&gt; &gt; &gt; Source/WebCore/platform/ScrollAnimatorNone.h:188
&gt; &gt; That looks like a lot of unconditional overhead for ports that never use
&gt; &gt; this, which currently includes EFL at least, perhaps also Mac and iOS? Or
&gt; &gt; maybe not? Is there a way to make this cost conditional?
&gt; 
&gt; It might be best the way Carlos has it; it would be nice to avoid
&gt; platform-specific compilation in this file, and I doubt it can be easily
&gt; split out without causing lots of code duplication. Carlos, what do you
&gt; think?

ScrollAnimatorNone was thought as an intermediate class to inherit from, that&apos;s why it&apos;s not final and it has protected methods. So, we can just add ScrollAnimatorGtk without adding any news ifdefs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158245</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-25 00:10:46 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 269692 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=269692&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp:238
&gt; &gt; +    m_usesOverlayScrollbars = g_strcmp0(g_getenv(&quot;GTK_OVERLAY_SCROLLING&quot;), &quot;0&quot;);
&gt; 
&gt; Is this really the right test...?

Yes.

&gt; It&apos;s not a style property?

No. It&apos;s GtkScrolledWindow API, gtk_scrolled_window_set_overlay_scrolling(). We could probably add a WebKitSetting.

&gt; I assumed this
&gt; variable was to turn off overlay scrolling for debugging purposes.

Yes, this is probably just for debugging, I&apos;m not sure it&apos;s documented. I added it to match what GTK does, so that if someone runs any GTK+ app containing a WebView with the env var, we will honor it too. And also made my life easier when developing this. 

&gt; Are all
&gt; themes expected to implement overlay scrollbars?

It doesn&apos;t really matter. If a theme doesn&apos;t implement overlay scrollbars, the overlay-indicator class will not have any effect in the rendering, so we will end up rendering the scrollbars following the theme but on top of the contents and hiding/showing them. Same would happen with GtkScrolledWindow, and I would say it&apos;s a theme issue not ours.

&gt; I&apos;m halfway pleased that the technical limitation of threaded compositor
&gt; necessitates implementing overlay scrollbars, because now we have overlay
&gt; scrollbars. But it&apos;s disappointing that threaded compositor will prevent us
&gt; from rendering non-overlay scrollbars. I expect this could cause scrollbars
&gt; to look quite bad with anything besides Adwaita or Ambiance. Can you or Yoon
&gt; explain the technical limitation here?

I have no idea. But I don&apos;t think it&apos;s that problematic, GTK+ is unusable with any other theme than Adwaita nowadays, and new themes will probably implement olverlay-indicator to look good with GtkScrolledwindow.

&gt; &gt; Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp:432
&gt; &gt; +#if GTK_CHECK_VERSION(3, 19, 8)
&gt; 
&gt; I don&apos;t understand this version check. 3.19.7 was released last week; I
&gt; don&apos;t see any scrollbar-related changes since then?

https://git.gnome.org/browse/gtk+/commit/?id=0f7b4dad0f6cef80172638efb019ce094d7eadee

&gt; I would just get rid of the check; it&apos;s enough that the code works with GTK+
&gt; master, that&apos;s what you and I are going to use, we&apos;re the people testing it
&gt; so optimize for us. Otherwise I&apos;d have to manually remove the check to test
&gt; this code.

It will probably crash if someone uses 3.19.7, it&apos;s just temporary, we should change all the ifdefs in this file (and RenderThemeGtk) once 3.20 is released.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158636</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-01-25 17:43:37 -0800</bug_when>
    <thetext>I tried this out today. It is impressive; you will fool most users into thinking it&apos;s a real GtkScrollbar.

The patch would be better with ScrollAnimator tests, but since there&apos;s no infrastructure to test those currently, I don&apos;t want to block on that.

There is just one issue I see that I think needs fixed. If you mouse over the scrollbar, then move your mouse outside the window to the right, the scrollbar track stays visible forever. It should instead disappear as soon as the mouse is moved outside the window. (Could it be related to bug #116691?)

See also: bug #122859 and bug #115363.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158637</commentid>
    <comment_count>10</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-01-25 17:44:33 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (Could it be related to bug #116691?)

Probably not, as in this case the window is active, the mouse is just outside of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158702</commentid>
    <comment_count>11</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-01-25 21:51:25 -0800</bug_when>
    <thetext>I do want to strongly encourage you to consider making tests. Don&apos;t make the same mistake I did!! I assure you that our experience on Mac has been that these behaviors can be subtle enough that we have introduced regressions that took a long time to notice -- I imagine that this will be true for you too. Especially if you support both &quot;legacy&quot; and &quot;overlay&quot; scrollbars (more things to get wrong). Since we have already experienced a number of regressions over the years it feels inevitable to me we will  accidentally break each other&apos;s code at some point. All of that will be less painful with tests.

I regret not figuring this out a long time ago, and it still nags at me even though I have a ton of other things to work on. Simon and I were talking today. Maybe there is a way to add tests that just turn on overlay scrollbar logging, and then the scrollbars log something every time they appear or disappear? Or add some way to query current overlay scrollbar state (visible or not, hover-appearance or not, etc)? If you take the lead on fleshing this out, I can implement the Mac support.

Besides this strong encouragement, I also have to insist that you change the name of ScrollAnimatorNone. It seems much more like the presence of scroll animations than the absence! I appreciate the desire to make it more cross-platform-friendly, but I think that ScrollAnimatorGTK would be a much better name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158742</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-25 23:33:17 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; I tried this out today. It is impressive; you will fool most users into
&gt; thinking it&apos;s a real GtkScrollbar.

Until a new GTK+ version breaks it :-D

&gt; The patch would be better with ScrollAnimator tests, but since there&apos;s no
&gt; infrastructure to test those currently, I don&apos;t want to block on that.

That&apos;s fine as long as we actually add test for this soon.

&gt; There is just one issue I see that I think needs fixed. If you mouse over
&gt; the scrollbar, then move your mouse outside the window to the right, the
&gt; scrollbar track stays visible forever. It should instead disappear as soon
&gt; as the mouse is moved outside the window. (Could it be related to bug
&gt; #116691?)
&gt; 
&gt; See also: bug #122859 and bug #115363.

I noticed that problem too, but didn&apos;t fixed it in this patch because I think the problem is a more general issue with the web view focus handling, so fixing it in this patch would actually hide the actual bug. I&apos;ll look at it in more detail, since that&apos;s not a blocker at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158744</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-25 23:37:28 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; I do want to strongly encourage you to consider making tests. Don&apos;t make the
&gt; same mistake I did!! I assure you that our experience on Mac has been that
&gt; these behaviors can be subtle enough that we have introduced regressions
&gt; that took a long time to notice -- I imagine that this will be true for you
&gt; too. Especially if you support both &quot;legacy&quot; and &quot;overlay&quot; scrollbars (more
&gt; things to get wrong). Since we have already experienced a number of
&gt; regressions over the years it feels inevitable to me we will  accidentally
&gt; break each other&apos;s code at some point. All of that will be less painful with
&gt; tests.

I agree.

&gt; I regret not figuring this out a long time ago, and it still nags at me even
&gt; though I have a ton of other things to work on. Simon and I were talking
&gt; today. Maybe there is a way to add tests that just turn on overlay scrollbar
&gt; logging, and then the scrollbars log something every time they appear or
&gt; disappear? Or add some way to query current overlay scrollbar state (visible
&gt; or not, hover-appearance or not, etc)? If you take the lead on fleshing this
&gt; out, I can implement the Mac support.

I also thought about it. I think we could add a mock scroll animator that logs all the events somehow (mouse entered/exited scrollable area, mouse entered/existed scrollbar, etc.). That behavior should be common to all ports, no matter if overlay scrollbars are used or not.

&gt; Besides this strong encouragement, I also have to insist that you change the
&gt; name of ScrollAnimatorNone. It seems much more like the presence of scroll
&gt; animations than the absence! I appreciate the desire to make it more
&gt; cross-platform-friendly, but I think that ScrollAnimatorGTK would be a much
&gt; better name.

Ok, I&apos;ll add ScrollAnimatorGtk then, if EFL eventually wants to use our overlay scrollbars implementation we will find the way to share the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158804</commentid>
    <comment_count>14</comment_count>
      <attachid>269881</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-26 07:06:36 -0800</bug_when>
    <thetext>Created attachment 269881
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159259</commentid>
    <comment_count>15</comment_count>
      <attachid>269994</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-27 02:38:22 -0800</bug_when>
    <thetext>Created attachment 269994
Rebased patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159381</commentid>
    <comment_count>16</comment_count>
      <attachid>269994</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-01-27 12:48:47 -0800</bug_when>
    <thetext>Comment on attachment 269994
Rebased patch

I reviewed the &quot;updated patch&quot; from yesterday and just let it sit a day to see if anyone else would comment; I presume there aren&apos;t many changes in &quot;rebased patch.&quot;

You addressed most of my comments already. The one thing I would add is that ENABLE_SMOOTH_SCROLLING is not a public option for our port, so I would remove the include guards for it. If you want to allow disabling smooth scrolling, we should make it a public option.

I&apos;m looking forward to the scroll animator tests requested by Simon/Darin/Beth. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159669</commentid>
    <comment_count>17</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-28 00:54:14 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Comment on attachment 269994 [details]
&gt; Rebased patch
&gt; 
&gt; I reviewed the &quot;updated patch&quot; from yesterday and just let it sit a day to
&gt; see if anyone else would comment; I presume there aren&apos;t many changes in
&gt; &quot;rebased patch.&quot;

No changes, I submitted it again rebased just to make sure it passed EWS.

&gt; You addressed most of my comments already. The one thing I would add is that
&gt; ENABLE_SMOOTH_SCROLLING is not a public option for our port, so I would
&gt; remove the include guards for it. If you want to allow disabling smooth
&gt; scrolling, we should make it a public option.

In that case we should just remove the option from GTK cmake files, and enable it unconditionally in Platform.h, and then remove the ifdefs from GTK files. Not something I would do as part of this patch.

&gt; I&apos;m looking forward to the scroll animator tests requested by
&gt; Simon/Darin/Beth. :)

The major blocker of this patch is bug #153404, so I&apos;ll wait a bit to land it, or I could land it disabled by default (inverting the logic of the env variable) until bug #153404 is fixed. Meanwhile I will work on the tests and some other minor issues related to scrollbars that we still have pending.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159798</commentid>
    <comment_count>18</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-01-28 11:08:28 -0800</bug_when>
    <thetext>By the way, did you see my comment about the scrollbar getting stuck on if you move your mouse out the right-hand side of the window? It happens with legacy scrollbars too (they get stuck on prelight).

&gt; In that case we should just remove the option from GTK cmake files, and
&gt; enable it unconditionally in Platform.h, and then remove the ifdefs from GTK
&gt; files. Not something I would do as part of this patch.

I don&apos;t agree. OptionsGTK.cmake is the right place to override the value of any WebKit feature declared in WebKitFeatures.cmake.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160072</commentid>
    <comment_count>19</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-29 02:30:32 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; By the way, did you see my comment about the scrollbar getting stuck on if
&gt; you move your mouse out the right-hand side of the window? It happens with
&gt; legacy scrollbars too (they get stuck on prelight).

Replied in comment #12.

&gt; &gt; In that case we should just remove the option from GTK cmake files, and
&gt; &gt; enable it unconditionally in Platform.h, and then remove the ifdefs from GTK
&gt; &gt; files. Not something I would do as part of this patch.
&gt; 
&gt; I don&apos;t agree. OptionsGTK.cmake is the right place to override the value of
&gt; any WebKit feature declared in WebKitFeatures.cmake.

If we support a feature unconditionally there&apos;s no reason to mess up makefiles with options we don&apos;t really support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160074</commentid>
    <comment_count>20</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-29 02:58:36 -0800</bug_when>
    <thetext>Committed r195810: &lt;http://trac.webkit.org/changeset/195810&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160075</commentid>
    <comment_count>21</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-29 02:59:25 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; Committed r195810: &lt;http://trac.webkit.org/changeset/195810&gt;

Disabled by default until bug #153404 is fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160111</commentid>
    <comment_count>22</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-01-29 07:07:07 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; If we support a feature unconditionally there&apos;s no reason to mess up
&gt; makefiles with options we don&apos;t really support.

I much prefer to keep all build options organized nicely in WebKitFeatures.cmake and OptionsGTK.cmake rather than in Platform.h, which is very cluttered. Since we only have two build systems now, we can probably drastically simplify Platform.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160826</commentid>
    <comment_count>23</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-01 05:21:19 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #9)
&gt; &gt; I tried this out today. It is impressive; you will fool most users into
&gt; &gt; thinking it&apos;s a real GtkScrollbar.
&gt; 
&gt; Until a new GTK+ version breaks it :-D
&gt; 
&gt; &gt; The patch would be better with ScrollAnimator tests, but since there&apos;s no
&gt; &gt; infrastructure to test those currently, I don&apos;t want to block on that.
&gt; 
&gt; That&apos;s fine as long as we actually add test for this soon.
&gt; 
&gt; &gt; There is just one issue I see that I think needs fixed. If you mouse over
&gt; &gt; the scrollbar, then move your mouse outside the window to the right, the
&gt; &gt; scrollbar track stays visible forever. It should instead disappear as soon
&gt; &gt; as the mouse is moved outside the window. (Could it be related to bug
&gt; &gt; #116691?)
&gt; &gt; 
&gt; &gt; See also: bug #122859 and bug #115363.
&gt; 
&gt; I noticed that problem too, but didn&apos;t fixed it in this patch because I
&gt; think the problem is a more general issue with the web view focus handling,
&gt; so fixing it in this patch would actually hide the actual bug. I&apos;ll look at
&gt; it in more detail, since that&apos;s not a blocker at all.

https://bugs.webkit.org/show_bug.cgi?id=153740</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269692</attachid>
            <date>2016-01-24 02:45:37 -0800</date>
            <delta_ts>2016-01-26 07:06:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-gtk-overlay-scrollbars.diff</filename>
            <type>text/plain</type>
            <size>38177</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxZDg4MjA0Li44MmFiZWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA4
IEBACisyMDE2LTAxLTI0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KKworICAgICAgICBbR1RLXSBJbXBsZW1lbnQgb3ZlcmxheSBzY3JvbGxiYXJzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTM0MDUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3Ig
b3ZlcmxheSBzY3JvbGxiYXJzIHRvIEdUSysgcGxhdGZvcm0gZm9sbG93aW5nIHRoZQorICAgICAg
ICBzYW1lIHN0eWxlIGFuZCBiZWhhdmlvciB0aGFuIEd0a1Njcm9sbGVkV2luZG93LiBUaGV5IGFy
ZSBvbmx5CisgICAgICAgIGF2YWlsYWJsZSBmb3IgR1RLKyA+PSAzLjE5LCBidXQgaG9ub3Jpbmcg
dGhlIEdUS19PVkVSTEFZX1NDUk9MTElORworICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSwg
c28gdGhleSBjb3VsZCBiZSBkaXNhYmxlIGF0IHJ1biB0aW1lLCBleGNlcHQKKyAgICAgICAgd2hl
biB0aHJlYWRlZCBjb21wb3NpdG9yIGlzIGVuYWJsZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OlNjcm9s
bEFuaW1hdG9yOjptb3VzZUVudGVyZWRDb250ZW50QXJlYSk6CisgICAgICAgIFJlbW92ZSBjb25z
dCB0byBhbGxvdyB0aGUgU2Nyb2xsQW5pbWF0b3IgdG8gYmUgdXBkYXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpTY3JvbGxBbmltYXRvcjo6bW91c2VFeGl0ZWRDb250ZW50
QXJlYSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OlNjcm9sbEFu
aW1hdG9yOjptb3VzZU1vdmVkSW5Db250ZW50QXJlYSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3I6OlNjcm9sbEFuaW1hdG9yOjpjb250ZW50QXJlYURpZFNob3cpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpTY3JvbGxBbmltYXRvcjo6
Y29udGVudEFyZWFEaWRIaWRlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3JOb25lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpjcmVhdGUp
OiBVc2UgYWxzbyB0aGUgU2Nyb2xsQW5pbWF0b3JOb25lCisgICAgICAgIHdoZW4gb3ZlcmxheSBz
Y3JvbGxiYXJzIGFyZSBlbmFibGVkLiBXZSBzdGlsbCBjaGVjayBhZ2FpbiB0aGF0IHRoZQorICAg
ICAgICBzY3JvbGwgYW5pbWF0b3IgaXMgZW5hYmxlZCB3aGVuIHNjcm9sbGluZywgc28gdGhpcyB3
b24ndCBlbmFibGUKKyAgICAgICAgc21vb3RoIHNjcm9sbGluZy4KKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yTm9uZTo6U2Nyb2xsQW5pbWF0b3JOb25lKTogSW5pdGlhbGl6ZSB0aGUK
KyAgICAgICAgb3ZlcmxheSBzY3JvbGxiYXJzIGFuaW1hdGlvbiB0aW1lci4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yTm9uZTo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIpOiBSZWdp
c3RlcgorICAgICAgICB0aGUgc2Nyb2xsYmFyIGlmIGl0J3MgYW4gb3ZlcmxheSBzY3JvbGxiYXIg
YW5kIG1ha2UgaXQgdmlzaWJsZQorICAgICAgICB3aXRob3V0IGFuaW1hdGluZyBpdC4gU3RhcnQg
dGhlIGhpZGUgYW5pbWF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JOb25l
OjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvck5vbmU6OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAg
IFVucmVnaXN0ZXIgdGhlIHNjcm9sbGJhciBpZiBpdCB3YXMgcmVnaXN0ZXJlZCBhbmQgcmVzcnQg
dGhlCisgICAgICAgIGFuaW1hdGlvbiBzdGF0ZSBpZiBpdCB3YXMgdGhlIG9ubHkgc2Nyb2xsYmFy
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JOb25lOjp3aWxsUmVtb3ZlSG9yaXpv
bnRhbFNjcm9sbGJhcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JO
b25lOjp1cGRhdGVPdmVybGF5U2Nyb2xsYmFyc09wYWNpdHkpOiBVcGRhdGUKKyAgICAgICAgdGhl
IHNjcm9sbGJhcnMgb3BhY2l0eSBhbmQgaW52YWxpZGF0ZSB0aGUgaW5kaWNhdG9yLgorICAgICAg
ICAoV2ViQ29yZTo6ZWFzZU91dEN1YmljKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yTm9uZTo6b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyRmlyZWQpOgorICAgICAgICBV
cGRhdGUgdGhlIHNjcm9sbGJhcnMgb3BhY2l0eSBhbmQgc2NoZWR1bGUgYSBuZXh0IGZyYW1lIGlm
IHRoZQorICAgICAgICBhbmltYXRpb24gZGlkbid0IGZpbmlzaCBvciBzdGFydCB0aGUgaGlkZSBh
bmltYXRpb24gb3RoZXJ3aGlzZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTm9u
ZTo6c2hvd092ZXJsYXlTY3JvbGxiYXJzKTogU3RhcnQgdGhlCisgICAgICAgIGZhZGUgYW5pbWF0
aW9uIHRvIHNob3cgdGhlIHNjcm9sbGJhcnMgaWYgbmVlZGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3JOb25lOjpoaWRlT3ZlcmxheVNjcm9sbGJhcnMpOiBTdGFydCB0aGUKKyAg
ICAgICAgZGFmZSBhbmltYXRpb24gdG8gaGlkZSB0aGUgc2Nyb2xsYmFycyBpZiBuZWVkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck5vbmU6Om1vdXNlRW50ZXJlZENvbnRlbnRB
cmVhKTogQ2FsbAorICAgICAgICBzaG93T3ZlcmxheVNjcm9sbGJhcnMoKS4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yTm9uZTo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSk6IENhbGwK
KyAgICAgICAgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCkuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvck5vbmU6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKTogQ2FsbAorICAgICAgICBz
aG93T3ZlcmxheVNjcm9sbGJhcnMoKS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
Tm9uZTo6Y29udGVudEFyZWFEaWRTaG93KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvck5vbmU6OmNvbnRlbnRBcmVhRGlkSGlkZSk6IEhpZGUgdGhlCisgICAgICAgIHNj
cm9sbGJhcnMgd2l0aG91dCBhbmltYXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JOb25lOjpub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKTogQ2FsbAorICAgICAgICBzaG93
T3ZlcmxheVNjcm9sbGJhcnMoKS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTm9u
ZTo6bG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKToKKyAgICAgICAgVXBkYXRlIHRo
ZSBsb2NrIHN0YXRlIGFuZCBoaWRlIG9yIHNob3cgdGhlIHNjcm9sbGJhcnMgd2hlbiBsb2NrZWQK
KyAgICAgICAgb3IgdW5sb2NrZWQuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JO
b25lLmg6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXI6Om9wYWNpdHkpOiBHZXQgc2Nyb2xsYmFyIG9wYWNpdHkuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXI6OnNldE9wYWNpdHkpOiBTZXQgc2Nyb2xsYmFyIG9wYWNpdHkuCisg
ICAgICAgICogcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpiYWNrQnV0dG9uUmVjdCk6IFBhc3MKKyAgICAgICAg
U3R5bGVDb250ZXh0TW9kZSB0byBnZXRPckNyZWF0ZVN0eWxlQ29udGV4dCBkZXBlbmRpbmcgb24g
dGhlCisgICAgICAgIHBhaW50aW5nIHBhcmFtZXRlci4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhclRoZW1lR3RrOjpmb3J3YXJkQnV0dG9uUmVjdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnRyYWNrUmVjdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OmdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KTogQWRkCisgICAg
ICAgIFN0eWxlQ29udGV4dE1vZGUgcGFyYW1ldGVyIHRvIGFkZCB0aGUgaG92ZXJpbmcgY2xhc3MK
KyAgICAgICAgdW5jb25kaXRpb25hbGx5IHdoZW4gdXNpbmcgb3ZlcmxheSBzY3JvbGxiYXJzIGlu
IGxheW91dCBtb2RlLiBJbgorICAgICAgICBwYWludCBtb2RlIHdlIGFkZCB0aGUgaG92ZXJpbmcg
Y2xhcyBvbmx5IHdoZW4gdGhlIHNjcm9sbGJhciBpcworICAgICAgICBob3ZlcmVkLiBUaGlzIHdh
eSB3ZSBhbHdheXMgY2xhaW0gdGhlIHNpemUgb2YgdGhlIHNjcm9sbGJhciB3aGVuCisgICAgICAg
IGhvdmVyZWQgdG8gYmUgYWJsZSB0byBzaG93IHRoZSBmdWxsIHNjcm9sbGJhciB3aGVuIHRoZSBt
b3VzZSBpcworICAgICAgICBjbG9zZSBlbm91Z2ggdG8gdGhlIGluZGljYXRvci4KKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpTY3JvbGxiYXJUaGVtZUd0ayk6IEluaXRpYWxp
emUKKyAgICAgICAgbV91c2VzT3ZlcmxheVNjcm9sbGJhcnMuCisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJUaGVtZUd0azo6dGh1bWJSZWN0KTogUGFzcyB0aGUgc2Nyb2xsYmFyIHRvCisgICAg
ICAgIGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KCkuCisgICAgICAgIChXZWJDb3JlOjphZGp1c3RS
ZWN0QWNjb3JkaW5nVG9NYXJnaW4pOiBGaXggdGhlIHRvcCBtYXJnaW4uCisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUcmFja0JhY2tncm91bmQpOiBQYXNzIHRoZQor
ICAgICAgICBzY3JvbGxiYXIgYW5kIHBhaW50IG1vZGUgdG8gZ2V0T3JDcmVhdGVTdHlsZUNvbnRl
eHQoKS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpwYWludFNjcm9sbGJh
ckJhY2tncm91bmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lR3Rr
OjpwYWludFRodW1iKTogQWRqdXN0IHRoZSB0aHVtYgorICAgICAgICByZWN0YW5nbGUgd2hlbiBv
dmVybGF5IHNjcm9sbGJhciBpcyBub3QgaG92ZXJlZCB0byBpdHMgY3VycmVudAorICAgICAgICBz
aXplLCBzaW5jZSB3ZSBhbHdheXMgY2xhaW0gdGhlIHNpemUgb2YgdGhlIHNjcm9sbGJhciBpbiBo
b3ZlcmVkCisgICAgICAgIG1vZGUuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0
azo6cGFpbnRCdXR0b24pOiBQYXNzIHRoZSBzY3JvbGxiYXIgYW5kCisgICAgICAgIHBhaW50IG1v
ZGUgdG8gZ2V0T3JDcmVhdGVTdHlsZUNvbnRleHQoKS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhclRoZW1lR3RrOjpwYWludCk6IFRha2UgdGhlIHNjcm9sbGJhciBvcGFjaXR5CisgICAgICAg
IGludG8gYWNjb3VudCB3aGVuIHJlbmRlcmluZyBvdmVybGF5IHNjcm9sbGJhcnMgYXMgaW5kaWNh
dG9ycy4gQWxzbworICAgICAgICBnZXQgdGhlIHNjcm9sbGJhciBvcGFjaXR5IGZyb20gdGhlIEdU
SysgdGhlbWUgYW5kIHVzZSBhCisgICAgICAgIHRyYW5zcGFyZW5jeSBncm91cCB3aGVuIHRoZSBn
bG9iYWwgb3BhY2l0eSBpcyBub3QgZnVsbCBvcGFxdWUuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXJUaGVtZUd0azo6YnV0dG9uU2l6ZSk6IFBhc3MgdGhlIHNjcm9sbGJhciB0bworICAgICAg
ICBnZXRPckNyZWF0ZVN0eWxlQ29udGV4dCgpLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9TY3Jv
bGxiYXJUaGVtZUd0ay5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1h
Yy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZUVudGVyZWRDb250ZW50QXJlYSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6bW91c2VFeGl0ZWRDb250ZW50
QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6bW91c2VNb3ZlZElu
Q29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRl
bnRBcmVhRGlkU2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y29u
dGVudEFyZWFEaWRIaWRlKToKKwogMjAxNi0wMS0yMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxj
Z2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgU2Nyb2xsQW5pbWF0b3IgaXMgbm90IG5vdGlm
aWVkIHdoZW4gbW91c2UgZW50ZXJlZCwgbW92ZWQgb3IgZXhpdGVkIGEgUmVuZGVyTGlzdEJveApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKaW5kZXggYzQ0ZWM0My4uYjMw
ODk4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCkBAIC05MSwx
NyArOTEsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXJ2aWNlU2Nyb2xsQW5pbWF0
aW9ucygpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29u
c3QgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgY29uc3Qg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlRXhpdGVkQ29udGVudEFyZWEoKSBjb25zdCB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgbW91c2VNb3ZlZEluQ29udGVudEFyZWEoKSBjb25zdCB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgbW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgbW91c2VFeGl0ZWRDb250ZW50QXJlYSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBtb3Vz
ZU1vdmVkSW5Db250ZW50QXJlYSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBtb3VzZUVudGVyZWRT
Y3JvbGxiYXIoU2Nyb2xsYmFyKikgY29uc3QgeyB9CiAgICAgdmlydHVhbCB2b2lkIG1vdXNlRXhp
dGVkU2Nyb2xsYmFyKFNjcm9sbGJhciopIGNvbnN0IHsgfQogICAgIHZpcnR1YWwgdm9pZCBtb3Vz
ZUlzRG93bkluU2Nyb2xsYmFyKFNjcm9sbGJhciosIGJvb2wpIGNvbnN0IHsgfQogICAgIHZpcnR1
YWwgdm9pZCB3aWxsU3RhcnRMaXZlUmVzaXplKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGNvbnRl
bnRzUmVzaXplZCgpIGNvbnN0IHsgfQogICAgIHZpcnR1YWwgdm9pZCB3aWxsRW5kTGl2ZVJlc2l6
ZSgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjb250ZW50QXJlYURpZFNob3coKSBjb25zdCB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFEaWRIaWRlKCkgY29uc3QgeyB9CisgICAgdmly
dHVhbCB2b2lkIGNvbnRlbnRBcmVhRGlkU2hvdygpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb250
ZW50QXJlYURpZEhpZGUoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBsb2NrT3ZlcmxheVNjcm9s
bGJhclN0YXRlVG9IaWRkZW4oYm9vbCkgeyB9CiAgICAgdmlydHVhbCBib29sIHNjcm9sbGJhcnND
YW5CZUFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCmluZGV4IDg3YzNhM2QuLjVhN2Q5YzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcApAQCAt
MSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNDYsMTMgKzQ3LDE1IEBAIHVzaW5nIG5h
bWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgZG91YmxlIGtGcmFt
ZVJhdGUgPSA2MDsKLWNvbnN0IGRvdWJsZSBrVGlja1RpbWUgPSAxIC8ga0ZyYW1lUmF0ZTsKLWNv
bnN0IGRvdWJsZSBrTWluaW11bVRpbWVySW50ZXJ2YWwgPSAuMDAxOworc3RhdGljIGNvbnN0IGRv
dWJsZSBrRnJhbWVSYXRlID0gNjA7CitzdGF0aWMgY29uc3QgZG91YmxlIGtUaWNrVGltZSA9IDEg
LyBrRnJhbWVSYXRlOworc3RhdGljIGNvbnN0IGRvdWJsZSBrTWluaW11bVRpbWVySW50ZXJ2YWwg
PSAuMDAxOworc3RhdGljIGNvbnN0IGRvdWJsZSBrT3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0aW9u
RHVyYXRpb24gPSAxOworc3RhdGljIGNvbnN0IGRvdWJsZSBrT3ZlcmZsb3dTY3JvbGxiYXJzQW5p
bWF0aW9uSGlkZURlbGF5ID0gMjsKIAogc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdG9yPiBT
Y3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKIHsK
LSAgICBpZiAoc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3JFbmFibGVkKCkpCisgICAgaWYg
KHNjcm9sbGFibGVBcmVhLnNjcm9sbEFuaW1hdG9yRW5hYmxlZCgpIHx8IFNjcm9sbGJhclRoZW1l
Ojp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFycygpKQogICAgICAgICByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxTY3JvbGxBbmltYXRvck5vbmU+KHNjcm9sbGFibGVBcmVhKTsKICAgICByZXR1
cm4gc3RkOjptYWtlX3VuaXF1ZTxTY3JvbGxBbmltYXRvcj4oc2Nyb2xsYWJsZUFyZWEpOwogfQpA
QCAtMzc2LDYgKzM3OSw3IEBAIFNjcm9sbEFuaW1hdG9yTm9uZTo6U2Nyb2xsQW5pbWF0b3JOb25l
KFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKICNlbHNlCiAgICAgLCBtX2FuaW1hdGlv
bkFjdGl2ZShmYWxzZSkKICNlbmRpZgorICAgICwgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9u
VGltZXIoKnRoaXMsICZTY3JvbGxBbmltYXRvck5vbmU6Om92ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25UaW1lckZpcmVkKQogewogfQogCkBAIC00ODEsMTQgKzQ4NSw0NiBAQCB2b2lkIFNjcm9sbEFu
aW1hdG9yTm9uZTo6d2lsbEVuZExpdmVSZXNpemUoKQogICAgIHVwZGF0ZVZpc2libGVMZW5ndGhz
KCk7CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3JOb25lOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJh
cihTY3JvbGxiYXIqKQordm9pZCBTY3JvbGxBbmltYXRvck5vbmU6OmRpZEFkZFZlcnRpY2FsU2Ny
b2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewogICAgIHVwZGF0ZVZpc2libGVMZW5ndGhz
KCk7CisgICAgaWYgKCFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKQorICAgICAgICBy
ZXR1cm47CisgICAgbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgPSBzY3JvbGxiYXI7CisgICAg
aWYgKCFtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyKQorICAgICAgICBtX292ZXJsYXlTY3Jv
bGxiYXJBbmltYXRpb25DdXJyZW50ID0gMTsKKyAgICBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJh
ci0+c2V0T3BhY2l0eShtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsKKyAgICBo
aWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsKIH0KIAotdm9pZCBTY3JvbGxBbmltYXRvck5vbmU6OmRp
ZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JO
b25lOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewog
ICAgIHVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CisgICAgaWYgKCFzY3JvbGxiYXItPmlzT3Zlcmxh
eVNjcm9sbGJhcigpKQorICAgICAgICByZXR1cm47CisgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNj
cm9sbGJhciA9IHNjcm9sbGJhcjsKKyAgICBpZiAoIW1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFy
KQorICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0gMTsKKyAgICBt
X2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyLT5zZXRPcGFjaXR5KG1fb3ZlcmxheVNjcm9sbGJh
ckFuaW1hdGlvbkN1cnJlbnQpOworICAgIGhpZGVPdmVybGF5U2Nyb2xsYmFycygpOworfQorCit2
b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9s
bGJhciogc2Nyb2xsYmFyKQoreworICAgIGlmIChtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhciAh
PSBzY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9s
bGJhciA9IG51bGxwdHI7CisgICAgaWYgKCFtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyKQor
ICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0gMDsKK30KKwordm9p
ZCBTY3JvbGxBbmltYXRvck5vbmU6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9s
bGJhciogc2Nyb2xsYmFyKQoreworICAgIGlmIChtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFy
ICE9IHNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworICAgIG1faG9yaXpvbnRhbE92ZXJsYXlT
Y3JvbGxiYXIgPSBudWxscHRyOworICAgIGlmICghbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIp
CisgICAgICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgPSAwOwogfQogCiB2
b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6dXBkYXRlVmlzaWJsZUxlbmd0aHMoKQpAQCAtNTYzLDYg
KzU5OSwxNTEgQEAgdm9pZCBTY3JvbGxBbmltYXRvck5vbmU6OnN0b3BBbmltYXRpb25UaW1lcklm
TmVlZGVkKCkKICNlbmRpZgogfQogCit2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6dXBkYXRlT3Zl
cmxheVNjcm9sbGJhcnNPcGFjaXR5KCkKK3sKKyAgICBpZiAobV92ZXJ0aWNhbE92ZXJsYXlTY3Jv
bGxiYXIgJiYgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCAhPSBtX3ZlcnRpY2Fs
T3ZlcmxheVNjcm9sbGJhci0+b3BhY2l0eSgpKSB7CisgICAgICAgIG1fdmVydGljYWxPdmVybGF5
U2Nyb2xsYmFyLT5zZXRPcGFjaXR5KG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQp
OworICAgICAgICBpZiAobV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkg
PT0gTm9QYXJ0KQorICAgICAgICAgICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkuaW52YWxpZGF0
ZVBhcnQoKm1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyLCBUaHVtYlBhcnQpOworICAgIH0KKwor
ICAgIGlmIChtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyICYmIG1fb3ZlcmxheVNjcm9sbGJh
ckFuaW1hdGlvbkN1cnJlbnQgIT0gbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+b3BhY2l0
eSgpKSB7CisgICAgICAgIG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXItPnNldE9wYWNpdHko
bV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCk7CisgICAgICAgIGlmIChtX2hvcml6
b250YWxPdmVybGF5U2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IE5vUGFydCkKKyAgICAgICAg
ICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLmludmFsaWRhdGVQYXJ0KCptX2hvcml6b250YWxP
dmVybGF5U2Nyb2xsYmFyLCBUaHVtYlBhcnQpOworICAgIH0KK30KKworc3RhdGljIGlubGluZSBk
b3VibGUgZWFzZU91dEN1YmljKGRvdWJsZSB0KQoreworICAgIGRvdWJsZSBwID0gdCAtIDE7Cisg
ICAgcmV0dXJuIHAgKiBwICogcCArIDE7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JOb25lOjpv
dmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXJGaXJlZCgpCit7CisgICAgaWYgKCFtX2hvcml6
b250YWxPdmVybGF5U2Nyb2xsYmFyICYmICFtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJzTG9ja2VkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBkb3VibGUgY3VycmVudFRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVh
c2luZ1RpbWUoKTsKKyAgICBnZG91YmxlIHByb2dyZXNzID0gMTsKKyAgICBpZiAoY3VycmVudFRp
bWUgPCBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25FbmRUaW1lKQorICAgICAgICBwcm9ncmVz
cyA9IChjdXJyZW50VGltZSAtIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblN0YXJ0VGltZSkg
LyAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uRW5kVGltZSAtIG1fb3ZlcmxheVNjcm9sbGJh
ckFuaW1hdGlvblN0YXJ0VGltZSk7CisgICAgcHJvZ3Jlc3MgPSBtX292ZXJsYXlTY3JvbGxiYXJB
bmltYXRpb25Tb3VyY2UgKyAoZWFzZU91dEN1YmljKHByb2dyZXNzKSAqIChtX292ZXJsYXlTY3Jv
bGxiYXJBbmltYXRpb25UYXJnZXQgLSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25Tb3VyY2Up
KTsKKyAgICBpZiAocHJvZ3Jlc3MgIT0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVu
dCkgeworICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0gcHJvZ3Jl
c3M7CisgICAgICAgIHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgpOworICAgIH0KKwor
ICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ICE9IG1fb3ZlcmxheVNj
cm9sbGJhckFuaW1hdGlvblRhcmdldCkgeworICAgICAgICBkb3VibGUgZGVsdGFUb05leHRGcmFt
ZSA9IHN0ZDo6bWF4KGtUaWNrVGltZSAtIChtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAt
IGN1cnJlbnRUaW1lKSwga01pbmltdW1UaW1lckludGVydmFsKTsKKyAgICAgICAgbV9vdmVybGF5
U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KGRlbHRhVG9OZXh0RnJhbWUpOwor
ICAgIH0gZWxzZQorICAgICAgICBoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsKK30KKwordm9pZCBT
Y3JvbGxBbmltYXRvck5vbmU6OnNob3dPdmVybGF5U2Nyb2xsYmFycygpCit7CisgICAgaWYgKG1f
b3ZlcmxheVNjcm9sbGJhcnNMb2NrZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX292
ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpICYmIG1fb3ZlcmxheVNjcm9s
bGJhckFuaW1hdGlvblRhcmdldCA9PSAxKQorICAgICAgICByZXR1cm47CisgICAgbV9vdmVybGF5
U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuc3RvcCgpOworCisgICAgaWYgKCFtX2hvcml6b250YWxP
dmVybGF5U2Nyb2xsYmFyICYmICFtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlID0gbV9vdmVy
bGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudDsKKyAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmlt
YXRpb25UYXJnZXQgPSAxOworICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJn
ZXQgIT0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCkgeworICAgICAgICBtX292
ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25TdGFydFRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2lu
Z1RpbWUoKTsKKyAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uRW5kVGltZSA9IG1f
b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblN0YXJ0VGltZSArIGtPdmVyZmxvd1Njcm9sbGJhcnNB
bmltYXRpb25EdXJhdGlvbjsKKyAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGlt
ZXIuc3RhcnRPbmVTaG90KDApOworICAgIH0gZWxzZQorICAgICAgICBoaWRlT3ZlcmxheVNjcm9s
bGJhcnMoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvck5vbmU6OmhpZGVPdmVybGF5U2Nyb2xs
YmFycygpCit7CisgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyLmlzQWN0
aXZlKCkgJiYgIW1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyLnN0b3AoKTsKKworICAg
IGlmICghbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhciAmJiAhbV92ZXJ0aWNhbE92ZXJsYXlT
Y3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1h
dGlvblNvdXJjZSA9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQ7CisgICAgbV9v
dmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGFyZ2V0ID0gMDsKKyAgICBpZiAobV9vdmVybGF5U2Ny
b2xsYmFyQW5pbWF0aW9uVGFyZ2V0ID09IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJl
bnQpCisgICAgICAgIHJldHVybjsKKyAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25TdGFy
dFRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSArIGtPdmVyZmxvd1Njcm9sbGJh
cnNBbmltYXRpb25IaWRlRGVsYXk7CisgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uRW5k
VGltZSA9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblN0YXJ0VGltZSArIGtPdmVyZmxvd1Nj
cm9sbGJhcnNBbmltYXRpb25EdXJhdGlvbiArIGtPdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25I
aWRlRGVsYXk7CisgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuc3RhcnRPbmVT
aG90KGtPdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25IaWRlRGVsYXkpOworfQorCit2b2lkIFNj
cm9sbEFuaW1hdG9yTm9uZTo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKQoreworICAgIHNob3dP
dmVybGF5U2Nyb2xsYmFycygpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6bW91c2VF
eGl0ZWRDb250ZW50QXJlYSgpCit7CisgICAgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisK
K3ZvaWQgU2Nyb2xsQW5pbWF0b3JOb25lOjptb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpCit7Cisg
ICAgc2hvd092ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JOb25l
Ojpjb250ZW50QXJlYURpZFNob3coKQoreworICAgIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOwor
fQorCit2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6Y29udGVudEFyZWFEaWRIaWRlKCkKK3sKKyAg
ICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyLnN0b3AoKTsKKyAgICBpZiAobV9vdmVybGF5
U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCkgeworICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJB
bmltYXRpb25DdXJyZW50ID0gMDsKKyAgICAgICAgdXBkYXRlT3ZlcmxheVNjcm9sbGJhcnNPcGFj
aXR5KCk7CisgICAgfQorfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6bm90aWZ5Q29udGVu
dEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmKQoreworICAgIHNob3dPdmVybGF5U2Nyb2xs
YmFycygpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6bG9ja092ZXJsYXlTY3JvbGxi
YXJTdGF0ZVRvSGlkZGVuKGJvb2wgc2hvdWxkTG9ja1N0YXRlKQoreworICAgIGlmIChtX292ZXJs
YXlTY3JvbGxiYXJzTG9ja2VkID09IHNob3VsZExvY2tTdGF0ZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fb3ZlcmxheVNjcm9sbGJhcnNMb2NrZWQgPSBzaG91bGRMb2NrU3RhdGU7CisKKyAgICBp
ZiAoIW1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgJiYgIW1fdmVydGljYWxPdmVybGF5U2Ny
b2xsYmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyc0xv
Y2tlZCkgeworICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5zdG9wKCk7
CisgICAgICAgIGlmIChtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyKQorICAgICAgICAgICAg
bV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0eSgwKTsKKyAgICAgICAgaWYg
KG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQorICAgICAgICAgICAgbV92ZXJ0aWNhbE92ZXJs
YXlTY3JvbGxiYXItPnNldE9wYWNpdHkoMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1f
b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgPT0gMSkKKyAgICAgICAgICAgIHVwZGF0
ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBz
aG93T3ZlcmxheVNjcm9sbGJhcnMoKTsKKyAgICB9CisKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCmluZGV4IGMxMzJmYTguLjNiMzE3YzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCkBAIC00
Miw4ICs0Miw2IEBACiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKICNpbmNsdWRlICJUaW1l
ci5oIgogCi1jbGFzcyBTY3JvbGxBbmltYXRvck5vbmVUZXN0OwotCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEludFBvaW50OwpAQCAtNTUsMTcgKzUzLDI4IEBAIHB1YmxpYzoKICAgICBl
eHBsaWNpdCBTY3JvbGxBbmltYXRvck5vbmUoU2Nyb2xsYWJsZUFyZWEmKTsKICAgICB2aXJ0dWFs
IH5TY3JvbGxBbmltYXRvck5vbmUoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xs
YmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0
aXBsaWVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9u
KGNvbnN0IEZsb2F0UG9pbnQmKTsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xs
KFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxv
YXQgbXVsdGlwbGllcikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbFRvT2Zmc2V0
V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7CiAKICNpZiAhVVNF
KFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKQotICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxB
bmltYXRpb25zKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNlcnZpY2VTY3JvbGxBbmltYXRpb25zKCk7
CisgICAgdmlydHVhbCB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2VydmljZVNjcm9sbEFuaW1hdGlvbnMoKSBvdmVycmlkZTsKICNlbmRpZgogCi0g
ICAgdmlydHVhbCB2b2lkIHdpbGxFbmRMaXZlUmVzaXplKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgdm9pZCBkaWRB
ZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgdm9pZCB3aWxs
RW5kTGl2ZVJlc2l6ZSgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRWZXJ0aWNh
bFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQWRk
SG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgd2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBv
dmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBtb3VzZUVudGVyZWRDb250ZW50QXJlYSgpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBtb3VzZUV4aXRlZENvbnRlbnRBcmVhKCkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhRGlkU2hvdygpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBjb250ZW50QXJlYURpZEhpZGUoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgbm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVu
KGJvb2wpIG92ZXJyaWRlOwogCiAgICAgZW51bSBDdXJ2ZSB7CiAgICAgICAgIExpbmVhciwKQEAg
LTk2LDE0ICsxMDUsMTEgQEAgcHVibGljOgogICAgICAgICBkb3VibGUgbV9tYXhpbXVtQ29hc3RU
aW1lOwogICAgIH07CiAKLXByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uV2ls
bFN0YXJ0KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkRpZEZpbmlzaCgpIHsgfQog
CiAgICAgUGFyYW1ldGVycyBwYXJhbWV0ZXJzRm9yU2Nyb2xsR3JhbnVsYXJpdHkoU2Nyb2xsR3Jh
bnVsYXJpdHkpIGNvbnN0OwogCi0gICAgZnJpZW5kIGNsYXNzIDo6U2Nyb2xsQW5pbWF0b3JOb25l
VGVzdDsKLQogICAgIHN0cnVjdCBQZXJBeGlzRGF0YSB7CiAgICAgICAgIFBlckF4aXNEYXRhKFNj
cm9sbEFuaW1hdG9yTm9uZSogcGFyZW50LCBmbG9hdCogY3VycmVudFBvcywgaW50IHZpc2libGVM
ZW5ndGgpOwogICAgICAgICB2b2lkIHJlc2V0KCk7CkBAIC0xNDQsNiArMTUwLDExIEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgaW50IG1fdmlzaWJsZUxlbmd0aDsKICAgICB9OwogCisgICAgdm9pZCBv
dmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXJGaXJlZCgpOworICAgIHZvaWQgc2hvd092ZXJs
YXlTY3JvbGxiYXJzKCk7CisgICAgdm9pZCBoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsKKyAgICB2
b2lkIHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgpOworCiAjaWYgVVNFKFJFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FX1RJTUVSKQogICAgIHZvaWQgcmVxdWVzdEFuaW1hdGlvblRpbWVyRmly
ZWQoKTsKICAgICB2b2lkIHN0YXJ0TmV4dFRpbWVyKGRvdWJsZSBkZWxheSk7CkBAIC0xNjUsNiAr
MTc2LDE2IEBAIHByb3RlY3RlZDoKICNlbHNlCiAgICAgYm9vbCBtX2FuaW1hdGlvbkFjdGl2ZTsK
ICNlbmRpZgorCisgICAgU2Nyb2xsYmFyKiBtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyIHsg
bnVsbHB0ciB9OworICAgIFNjcm9sbGJhciogbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgeyBu
dWxscHRyIH07CisgICAgYm9vbCBtX292ZXJsYXlTY3JvbGxiYXJzTG9ja2VkIHsgZmFsc2UgfTsK
KyAgICBUaW1lciBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lcjsKKyAgICBkb3VibGUg
bV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlIHsgMCB9OworICAgIGRvdWJsZSBtX292
ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQgeyAwIH07CisgICAgZG91YmxlIG1fb3Zlcmxh
eVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgeyAwIH07CisgICAgZG91YmxlIG1fb3ZlcmxheVNj
cm9sbGJhckFuaW1hdGlvblN0YXJ0VGltZSB7IDAgfTsKKyAgICBkb3VibGUgbV9vdmVybGF5U2Ny
b2xsYmFyQW5pbWF0aW9uRW5kVGltZSB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKaW5kZXggODI0MjUxMC4uZjJhMjVkOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKQEAgLTEzMCw2ICsxMzAsOSBAQCBwdWJs
aWM6CiAgICAgYm9vbCBpc0FscGhhTG9ja2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc0FscGhhTG9j
a2VkOyB9CiAgICAgdm9pZCBzZXRJc0FscGhhTG9ja2VkKGJvb2wgZmxhZykgeyBtX2lzQWxwaGFM
b2NrZWQgPSBmbGFnOyB9CiAKKyAgICBkb3VibGUgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
b3BhY2l0eTsgfQorICAgIHZvaWQgc2V0T3BhY2l0eShkb3VibGUgb3BhY2l0eSkgeyBtX29wYWNp
dHkgPSBvcGFjaXR5OyB9CisKICAgICBib29sIHN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlUaHJl
YWQoKSBjb25zdDsKIAogICAgIFdlYWtQdHI8U2Nyb2xsYmFyPiBjcmVhdGVXZWFrUHRyKCkgeyBy
ZXR1cm4gbV93ZWFrUHRyRmFjdG9yeS5jcmVhdGVXZWFrUHRyKCk7IH0KQEAgLTE3OCw2ICsxODEs
OCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBib29sIG1faXNDdXN0b21TY3JvbGxiYXI7CiAKKyAgICBk
b3VibGUgbV9vcGFjaXR5IHsgMSB9OworCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1Nj
cm9sbGJhcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAKaW5kZXggMzM2OTc2
Mi4uMTlmYjU4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9s
bGJhclRoZW1lR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xs
YmFyVGhlbWVHdGsuY3BwCkBAIC01OSw3ICs1OSw3IEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVHdGs6
Omhhc1RodW1iKFNjcm9sbGJhciYgc2Nyb2xsYmFyKQogI2VuZGlmCiB9CiAKLUludFJlY3QgU2Ny
b2xsYmFyVGhlbWVHdGs6OmJhY2tCdXR0b25SZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBTY3Jv
bGxiYXJQYXJ0IHBhcnQsIGJvb2wpCitJbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjpiYWNrQnV0
dG9uUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0LCBib29sIHBh
aW50aW5nKQogewogI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgogICAgIGlmIChwYXJ0ID09IEJh
Y2tCdXR0b25FbmRQYXJ0ICYmICFtX2hhc0JhY2tCdXR0b25FbmRQYXJ0KQpAQCAtNjcsNyArNjcs
NyBAQCBJbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjpiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXIm
IHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYQogICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25T
dGFydFBhcnQgJiYgIW1faGFzQmFja0J1dHRvblN0YXJ0UGFydCkKICAgICAgICAgcmV0dXJuIElu
dFJlY3QoKTsKIAotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBzdHlsZUNvbnRleHQgPSBn
ZXRPckNyZWF0ZVN0eWxlQ29udGV4dCgpOworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBz
dHlsZUNvbnRleHQgPSBnZXRPckNyZWF0ZVN0eWxlQ29udGV4dCgmc2Nyb2xsYmFyLCBwYWludGlu
ZyA/IFN0eWxlQ29udGV4dE1vZGU6OlBhaW50IDogU3R5bGVDb250ZXh0TW9kZTo6TGF5b3V0KTsK
ICAgICBpbnQgeCA9IHNjcm9sbGJhci54KCkgKyBtX2NhY2hlZFByb3BlcnRpZXMudHJvdWdoQm9y
ZGVyV2lkdGg7CiAgICAgaW50IHkgPSBzY3JvbGxiYXIueSgpICsgbV9jYWNoZWRQcm9wZXJ0aWVz
LnRyb3VnaEJvcmRlcldpZHRoOwogICAgIEludFNpemUgc2l6ZSA9IGJ1dHRvblNpemUoc2Nyb2xs
YmFyKTsKQEAgLTgzLDExICs4MywxMiBAQCBJbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjpiYWNr
QnV0dG9uUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYQogI2Vsc2UK
ICAgICBVTlVTRURfUEFSQU0oc2Nyb2xsYmFyKTsKICAgICBVTlVTRURfUEFSQU0ocGFydCk7Cisg
ICAgVU5VU0VEX1BBUkFNKHBhaW50aW5nKTsKICAgICByZXR1cm4gSW50UmVjdCgpOwogI2VuZGlm
CiB9CiAKLUludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OmZvcndhcmRCdXR0b25SZWN0KFNjcm9s
bGJhciYgc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wpCitJbnRSZWN0IFNjcm9s
bGJhclRoZW1lR3RrOjpmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwgU2Ny
b2xsYmFyUGFydCBwYXJ0LCBib29sIHBhaW50aW5nKQogewogI2lmbmRlZiBHVEtfQVBJX1ZFUlNJ
T05fMgogICAgIGlmIChwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQgJiYgIW1faGFzRm9y
d2FyZEJ1dHRvblN0YXJ0UGFydCkKQEAgLTk1LDcgKzk2LDcgQEAgSW50UmVjdCBTY3JvbGxiYXJU
aGVtZUd0azo6Zm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIFNjcm9sbGJh
clBhcnQKICAgICBpZiAocGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCAmJiAhbV9oYXNGb3J3
YXJkQnV0dG9uRW5kUGFydCkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAotICAgIEdSZWZQ
dHI8R3RrU3R5bGVDb250ZXh0PiBzdHlsZUNvbnRleHQgPSBnZXRPckNyZWF0ZVN0eWxlQ29udGV4
dCgpOworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBzdHlsZUNvbnRleHQgPSBnZXRPckNy
ZWF0ZVN0eWxlQ29udGV4dCgmc2Nyb2xsYmFyLCBwYWludGluZyA/IFN0eWxlQ29udGV4dE1vZGU6
OlBhaW50IDogU3R5bGVDb250ZXh0TW9kZTo6TGF5b3V0KTsKICAgICBJbnRTaXplIHNpemUgPSBi
dXR0b25TaXplKHNjcm9sbGJhcik7CiAgICAgaWYgKHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09
IEhvcml6b250YWxTY3JvbGxiYXIpIHsKICAgICAgICAgaW50IHkgPSBzY3JvbGxiYXIueSgpICsg
bV9jYWNoZWRQcm9wZXJ0aWVzLnRyb3VnaEJvcmRlcldpZHRoOwpAQCAtMTE2LDE0ICsxMTcsMTUg
QEAgSW50UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6Zm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFy
JiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNjcm9s
bGJhcik7CiAgICAgVU5VU0VEX1BBUkFNKHBhcnQpOworICAgIFVOVVNFRF9QQVJBTShwYWludGlu
Zyk7CiAgICAgcmV0dXJuIEludFJlY3QoKTsKICNlbmRpZgogfQogCi1JbnRSZWN0IFNjcm9sbGJh
clRoZW1lR3RrOjp0cmFja1JlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGJvb2wpCitJbnRSZWN0
IFNjcm9sbGJhclRoZW1lR3RrOjp0cmFja1JlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGJvb2wg
cGFpbnRpbmcpCiB7CiAjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgR1JlZlB0cjxHdGtT
dHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4dCA9IGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KCk7Cisg
ICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4dCA9IGdldE9yQ3JlYXRlU3R5
bGVDb250ZXh0KCZzY3JvbGxiYXIsIHBhaW50aW5nID8gU3R5bGVDb250ZXh0TW9kZTo6UGFpbnQg
OiBTdHlsZUNvbnRleHRNb2RlOjpMYXlvdXQpOwogICAgIC8vIFRoZSBwYWRkaW5nIGFsb25nIHRo
ZSB0aHVtYiBtb3ZlbWVudCBheGlzIGluY2x1ZGVzIHRoZSB0cm91Z2ggYm9yZGVyCiAgICAgLy8g
cGx1cyB0aGUgc2l6ZSBvZiBzdGVwcGVyIHNwYWNpbmcgKHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBz
dGVwcGVyIGFuZAogICAgIC8vIHRoZSBwbGFjZSB3aGVyZSB0aGUgdGh1bWIgc3RvcHMpLiBUaGVy
ZSBpcyBvZnRlbiBubyBzdGVwcGVyIHNwYWNpbmcuCkBAIC0xNjIsNiArMTY0LDcgQEAgSW50UmVj
dCBTY3JvbGxiYXJUaGVtZUd0azo6dHJhY2tSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBib29s
KQogICAgICAgICAgICAgICAgICAgIHRoaWNrbmVzcywgc2Nyb2xsYmFyLmhlaWdodCgpIC0gKDIg
KiBtb3ZlbWVudEF4aXNQYWRkaW5nKSAtIGJ1dHRvbnNXaWR0aCk7CiAjZWxzZQogICAgIFVOVVNF
RF9QQVJBTShzY3JvbGxiYXIpOworICAgIFVOVVNFRF9QQVJBTShwYWludGluZyk7CiAgICAgcmV0
dXJuIEludFJlY3QoKTsKICNlbmRpZgogfQpAQCAtMTc1LDggKzE3OCw5IEBAIHN0YXRpYyBpbmxp
bmUgY29uc3QgY2hhciogb3JpZW50YXRpb25TdHlsZUNsYXNzKFNjcm9sbGJhck9yaWVudGF0aW9u
IG9yaWVudGF0aW9uCiAvLyBUaGUgR3RrU3R5bGVDb250ZXh0IHJldHVybmVkIGJ5IHRoaXMgZnVu
Y3Rpb24gaXMgY2FjaGVkIGJ5IFNjcm9sbGJhclRoZW1lR3RrOjpwYWludCBmb3IgdGhlCiAvLyBk
dXJhdGlvbiBvZiBpdHMgc2NvcGUsIHNvIGEgZGlmZmVyZW50IEd0a1N0eWxlQ29udGV4dCB3aXRo
IHVwZGF0ZWQgdGhlbWUgcHJvcGVydGllcyB3aWxsIGJlCiAvLyB1c2VkIGZvciBlYWNoIGNhbGwg
dG8gcGFpbnQuCi1HUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gU2Nyb2xsYmFyVGhlbWVHdGs6Omdl
dE9yQ3JlYXRlU3R5bGVDb250ZXh0KFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQor
R1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IFNjcm9sbGJhclRoZW1lR3RrOjpnZXRPckNyZWF0ZVN0
eWxlQ29udGV4dChTY3JvbGxiYXIqIHNjcm9sbGJhciwgU3R5bGVDb250ZXh0TW9kZSBtb2RlKQog
eworICAgIEFTU0VSVChzY3JvbGxiYXIgfHwgbW9kZSA9PSBTdHlsZUNvbnRleHRNb2RlOjpMYXlv
dXQpOwogICAgIGlmIChtX2NhY2hlZFN0eWxlQ29udGV4dCkKICAgICAgICAgcmV0dXJuIG1fY2Fj
aGVkU3R5bGVDb250ZXh0OwogCkBAIC0xODUsMTAgKzE4OSwxNSBAQCBHUmVmUHRyPEd0a1N0eWxl
Q29udGV4dD4gU2Nyb2xsYmFyVGhlbWVHdGs6OmdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KFNjcm9s
bGJhck9yaQogICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtf
VFlQRV9TQ1JPTExCQVIpOwogI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDE5LCAyKQogICAgIGd0
a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShwYXRoLmdldCgpLCAtMSwgInNjcm9s
bGJhciIpOworICAgIGlmIChtX3VzZXNPdmVybGF5U2Nyb2xsYmFycykgeworICAgICAgICBndGtf
d2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsICJvdmVybGF5LWluZGlj
YXRvciIpOworICAgICAgICBpZiAobW9kZSA9PSBTdHlsZUNvbnRleHRNb2RlOjpMYXlvdXQgfHwg
c2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpICE9IE5vUGFydCkKKyAgICAgICAgICAgIGd0a193aWRn
ZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLmdldCgpLCAtMSwgImhvdmVyaW5nIik7CisgICAg
fQogI2Vsc2UKICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwg
LTEsICJzY3JvbGxiYXIiKTsKICNlbmRpZgotICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9j
bGFzcyhwYXRoLmdldCgpLCAtMSwgb3JpZW50YXRpb25TdHlsZUNsYXNzKG9yaWVudGF0aW9uKSk7
CisgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGguZ2V0KCksIC0xLCBvcmll
bnRhdGlvblN0eWxlQ2xhc3Moc2Nyb2xsYmFyID8gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpIDog
VmVydGljYWxTY3JvbGxiYXIpKTsKICAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfcGF0aChzdHls
ZUNvbnRleHQuZ2V0KCksIHBhdGguZ2V0KCkpOwogCiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0
X3N0eWxlKApAQCAtMjIyLDYgKzIzMSwxMyBAQCBzdGF0aWMgR1JlZlB0cjxHdGtTdHlsZUNvbnRl
eHQ+IGNyZWF0ZUNoaWxkU3R5bGVDb250ZXh0KEd0a1N0eWxlQ29udGV4dCogcGFyZW50LAogCiBT
Y3JvbGxiYXJUaGVtZUd0azo6U2Nyb2xsYmFyVGhlbWVHdGsoKQogeworI2lmIEdUS19DSEVDS19W
RVJTSU9OKDMsIDE5LCAyKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkK
KyAgICBtX3VzZXNPdmVybGF5U2Nyb2xsYmFycyA9IHRydWU7CisjZWxzZQorICAgIG1fdXNlc092
ZXJsYXlTY3JvbGxiYXJzID0gZ19zdHJjbXAwKGdfZ2V0ZW52KCJHVEtfT1ZFUkxBWV9TQ1JPTExJ
TkciKSwgIjAiKTsKKyNlbmRpZgorI2VuZGlmCiAgICAgdXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCk7
CiB9CiAKQEAgLTI0NSw3ICsyNjEsNyBAQCB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjp1cGRhdGVU
aGVtZVByb3BlcnRpZXMoKQogCiBJbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjp0aHVtYlJlY3Qo
U2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHVuY29uc3RyYWluZWRUcmFja1Jl
Y3QpCiB7Ci0gICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4dCA9IGdldE9y
Q3JlYXRlU3R5bGVDb250ZXh0KHNjcm9sbGJhci5vcmllbnRhdGlvbigpKTsKKyAgICBHUmVmUHRy
PEd0a1N0eWxlQ29udGV4dD4gc3R5bGVDb250ZXh0ID0gZ2V0T3JDcmVhdGVTdHlsZUNvbnRleHQo
JnNjcm9sbGJhcik7CiAgICAgSW50UmVjdCB0cmFja1JlY3QgPSBjb25zdHJhaW5UcmFja1JlY3RU
b1RyYWNrUGllY2VzKHNjcm9sbGJhciwgdW5jb25zdHJhaW5lZFRyYWNrUmVjdCk7CiAgICAgaW50
IHRodW1iUG9zID0gdGh1bWJQb3NpdGlvbihzY3JvbGxiYXIpOwogICAgIGlmIChzY3JvbGxiYXIu
b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQpAQCAtMjU5LDEzICsyNzUsMTMg
QEAgc3RhdGljIHZvaWQgYWRqdXN0UmVjdEFjY29yZGluZ1RvTWFyZ2luKEd0a1N0eWxlQ29udGV4
dCogY29udGV4dCwgSW50UmVjdCYgcmVjdCkKIHsKICAgICBHdGtCb3JkZXIgbWFyZ2luOwogICAg
IGd0a19zdHlsZV9jb250ZXh0X2dldF9tYXJnaW4oY29udGV4dCwgZ3RrX3N0eWxlX2NvbnRleHRf
Z2V0X3N0YXRlKGNvbnRleHQpLCAmbWFyZ2luKTsKLSAgICByZWN0Lm1vdmUobWFyZ2luLmxlZnQs
IG1hcmdpbi5yaWdodCk7CisgICAgcmVjdC5tb3ZlKG1hcmdpbi5sZWZ0LCBtYXJnaW4udG9wKTsK
ICAgICByZWN0LmNvbnRyYWN0KG1hcmdpbi5sZWZ0ICsgbWFyZ2luLnJpZ2h0LCBtYXJnaW4udG9w
ICsgbWFyZ2luLmJvdHRvbSk7CiB9CiAKIHZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VHJh
Y2tCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgU2Nyb2xsYmFyJiBzY3JvbGxi
YXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+
IHBhcmVudFN0eWxlQ29udGV4dCA9IGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KHNjcm9sbGJhci5v
cmllbnRhdGlvbigpKTsKKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gcGFyZW50U3R5bGVD
b250ZXh0ID0gZ2V0T3JDcmVhdGVTdHlsZUNvbnRleHQoJnNjcm9sbGJhciwgU3R5bGVDb250ZXh0
TW9kZTo6UGFpbnQpOwogICAgIC8vIFBhaW50IHRoZSB0cmFjayBiYWNrZ3JvdW5kLiBJZiB0aGUg
dHJvdWdoLXVuZGVyLXN0ZXBwZXJzIHByb3BlcnR5IGlzIHRydWUsIHRoaXMKICAgICAvLyBzaG91
bGQgYmUgdGhlIGZ1bGwgc2l6ZSBvZiB0aGUgc2Nyb2xsYmFyLCBidXQgaWYgaXMgZmFsc2UsIGl0
IHNob3VsZCBvbmx5IGJlIHRoZQogICAgIC8vIHRyYWNrIHJlY3QuCkBAIC0yODEsMTQgKzI5Nywx
NCBAQCB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFRyYWNrQmFja2dyb3VuZChHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIFNjcm9sbGJhcgogCiB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpw
YWludFNjcm9sbGJhckJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBTY3JvbGxi
YXImIHNjcm9sbGJhcikKIHsKLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gc3R5bGVDb250
ZXh0ID0gZ2V0T3JDcmVhdGVTdHlsZUNvbnRleHQoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkpOwor
ICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBzdHlsZUNvbnRleHQgPSBnZXRPckNyZWF0ZVN0
eWxlQ29udGV4dCgmc2Nyb2xsYmFyLCBTdHlsZUNvbnRleHRNb2RlOjpQYWludCk7CiAgICAgZ3Rr
X3JlbmRlcl9mcmFtZShzdHlsZUNvbnRleHQuZ2V0KCksIGNvbnRleHQucGxhdGZvcm1Db250ZXh0
KCktPmNyKCksIHNjcm9sbGJhci54KCksIHNjcm9sbGJhci55KCksIHNjcm9sbGJhci53aWR0aCgp
LCBzY3JvbGxiYXIuaGVpZ2h0KCkpOwogfQogCiB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWlu
dFRodW1iKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNv
bnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRp
b24gPSBzY3JvbGxiYXIub3JpZW50YXRpb24oKTsKLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4
dD4gcGFyZW50U3R5bGVDb250ZXh0ID0gZ2V0T3JDcmVhdGVTdHlsZUNvbnRleHQob3JpZW50YXRp
b24pOworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBwYXJlbnRTdHlsZUNvbnRleHQgPSBn
ZXRPckNyZWF0ZVN0eWxlQ29udGV4dCgmc2Nyb2xsYmFyLCBTdHlsZUNvbnRleHRNb2RlOjpQYWlu
dCk7CiAgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHRyb3VnaFN0eWxlQ29udGV4dCA9IGNy
ZWF0ZUNoaWxkU3R5bGVDb250ZXh0KHBhcmVudFN0eWxlQ29udGV4dC5nZXQoKSwgInRyb3VnaCIp
OwogICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBzdHlsZUNvbnRleHQgPSBjcmVhdGVDaGls
ZFN0eWxlQ29udGV4dCh0cm91Z2hTdHlsZUNvbnRleHQuZ2V0KCksICJzbGlkZXIiKTsKIApAQCAt
MzAwLDYgKzMxNiwxNCBAQCB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFRodW1iKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgU2Nyb2xsYmFyJiBzY3JvbGxiYQogICAgIGd0a19zdHlsZV9j
b250ZXh0X3NldF9zdGF0ZShzdHlsZUNvbnRleHQuZ2V0KCksIHN0YXRpY19jYXN0PEd0a1N0YXRl
RmxhZ3M+KGZsYWdzKSk7CiAKICAgICBJbnRSZWN0IHRodW1iUmVjdChyZWN0KTsKKyAgICBpZiAo
bV91c2VzT3ZlcmxheVNjcm9sbGJhcnMgJiYgc2Nyb2xsYmFyLmhvdmVyZWRQYXJ0KCkgPT0gTm9Q
YXJ0KSB7CisgICAgICAgIC8vIFdoZW4gdXNpbmcgb3ZlcmxheSBzY3JvbGxiYXJzIHdlIGFsd2F5
cyBjbGFpbSB0aGUgc2l6ZSBvZiB0aGUgc2Nyb2xsYmFyIHdoZW4gaG92ZXJlZCwgc28gd2hlbgor
ICAgICAgICAvLyBkcmF3aW5nIHRoZSBpbmRpY2F0b3Igd2UgbmVlZCB0byBhZGp1c3QgdGhlIHJl
Y3RhbmdsZSB0byBpdHMgYWN0dWFsIHNpemUgaW4gaW5kaWNhdG9yIG1vZGUuCisgICAgICAgIGlm
IChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIHRodW1iUmVj
dC5tb3ZlKHNjcm9sbGJhci53aWR0aCgpIC0gbV9jYWNoZWRQcm9wZXJ0aWVzLnRodW1iRmF0bmVz
cywgMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRodW1iUmVjdC5tb3ZlKDAsIHNjcm9s
bGJhci5oZWlnaHQoKSAtIG1fY2FjaGVkUHJvcGVydGllcy50aHVtYkZhdG5lc3MpOworICAgIH0K
ICAgICBhZGp1c3RSZWN0QWNjb3JkaW5nVG9NYXJnaW4oc3R5bGVDb250ZXh0LmdldCgpLCB0aHVt
YlJlY3QpOwogICAgIGd0a19yZW5kZXJfc2xpZGVyKHN0eWxlQ29udGV4dC5nZXQoKSwgY29udGV4
dC5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgdGh1bWJSZWN0LngoKSwgdGh1bWJSZWN0LnkoKSwg
dGh1bWJSZWN0LndpZHRoKCksIHRodW1iUmVjdC5oZWlnaHQoKSwKICAgICAgICAgb3JpZW50YXRp
b24gPT0gVmVydGljYWxTY3JvbGxiYXIgPyBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwgOiBHVEtf
T1JJRU5UQVRJT05fSE9SSVpPTlRBTCk7CkBAIC0zMDgsNyArMzMyLDcgQEAgdm9pZCBTY3JvbGxi
YXJUaGVtZUd0azo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFNjcm9sbGJh
ciYgc2Nyb2xsYmEKIHZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50QnV0dG9uKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJl
Y3QsIFNjcm9sbGJhclBhcnQgcGFydCkKIHsKICAgICBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmll
bnRhdGlvbiA9IHNjcm9sbGJhci5vcmllbnRhdGlvbigpOwotICAgIEdSZWZQdHI8R3RrU3R5bGVD
b250ZXh0PiBwYXJlbnRTdHlsZUNvbnRleHQgPSBnZXRPckNyZWF0ZVN0eWxlQ29udGV4dChvcmll
bnRhdGlvbik7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHBhcmVudFN0eWxlQ29udGV4
dCA9IGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KCZzY3JvbGxiYXIsIFN0eWxlQ29udGV4dE1vZGU6
OlBhaW50KTsKICAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gc3R5bGVDb250ZXh0ID0gY3Jl
YXRlQ2hpbGRTdHlsZUNvbnRleHQocGFyZW50U3R5bGVDb250ZXh0LmdldCgpLCAiYnV0dG9uIik7
CiAKICAgICB1bnNpZ25lZCBmbGFncyA9IDA7CkBAIC0zNTUsOCArMzc5LDEyIEBAIGJvb2wgU2Ny
b2xsYmFyVGhlbWVHdGs6OnBhaW50KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRl
eHQmIGdyYXBoaWNzQ29uCiAgICAgaWYgKGdyYXBoaWNzQ29udGV4dC5wYWludGluZ0Rpc2FibGVk
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGRvdWJsZSBvcGFjaXR5ID0gc2Nyb2xs
YmFyLmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0ID8gc2Nyb2xsYmFyLm9wYWNpdHkoKSA6IDE7Cisg
ICAgaWYgKCFvcGFjaXR5KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgIC8vIENhY2hlIGEg
bmV3IEd0a1N0eWxlQ29udGV4dCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoaXMgc2NvcGUuCi0gICAg
VGVtcG9yYXJ5Q2hhbmdlPEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0Pj4gdGVtcFN0eWxlQ29udGV4
dChtX2NhY2hlZFN0eWxlQ29udGV4dCwgZ2V0T3JDcmVhdGVTdHlsZUNvbnRleHQoc2Nyb2xsYmFy
Lm9yaWVudGF0aW9uKCkpKTsKKyAgICBUZW1wb3JhcnlDaGFuZ2U8R1JlZlB0cjxHdGtTdHlsZUNv
bnRleHQ+PiB0ZW1wU3R5bGVDb250ZXh0KG1fY2FjaGVkU3R5bGVDb250ZXh0LCBnZXRPckNyZWF0
ZVN0eWxlQ29udGV4dCgmc2Nyb2xsYmFyLCBTdHlsZUNvbnRleHRNb2RlOjpQYWludCkpOwogCiAg
ICAgLy8gQ3JlYXRlIHRoZSBTY3JvbGxiYXJDb250cm9sUGFydE1hc2sgYmFzZWQgb24gdGhlIGRh
bWFnZVJlY3QKICAgICBTY3JvbGxiYXJDb250cm9sUGFydE1hc2sgc2Nyb2xsTWFzayA9IE5vUGFy
dDsKQEAgLTM5OSw2ICs0MjcsMzEgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnQoU2Ny
b2xsYmFyJiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb24KICAgICAgICAg
ICAgIHNjcm9sbE1hc2sgfD0gVGh1bWJQYXJ0OwogICAgIH0KIAorICAgIGlmIChtX3VzZXNPdmVy
bGF5U2Nyb2xsYmFycykgeworICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgY2hlY2sgb25j
ZSAzLjIwIGlzIHJlbGVhc2VkLgorI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDE5LCA4KQorICAg
ICAgICB1bnNpZ25lZCBmbGFncyA9IDA7CisgICAgICAgIGlmIChzY3JvbGxiYXIuaG92ZXJlZFBh
cnQoKSAhPSBOb1BhcnQpCisgICAgICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVM
SUdIVDsKKyAgICAgICAgaWYgKHNjcm9sbGJhci5wcmVzc2VkUGFydCgpICE9IE5vUGFydCkKKyAg
ICAgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0FDVElWRTsKKyAgICAgICAgZG91Ymxl
IHN0eWxlT3BhY2l0eTsKKyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKG1fY2Fj
aGVkU3R5bGVDb250ZXh0LmdldCgpLCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykp
OworICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXQobV9jYWNoZWRTdHlsZUNvbnRleHQuZ2V0
KCksIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShtX2NhY2hlZFN0eWxlQ29udGV4dC5nZXQo
KSksICJvcGFjaXR5IiwgJnN0eWxlT3BhY2l0eSwgbnVsbHB0cik7CisgICAgICAgIG9wYWNpdHkg
Kj0gc3R5bGVPcGFjaXR5OworI2Vsc2UKKyAgICAgICAgb3BhY2l0eSAqPSBzY3JvbGxiYXIuaG92
ZXJlZFBhcnQoKSA9PSBOb1BhcnQgPyAwLjQgOiAwLjc7CisjZW5kaWYKKyAgICB9CisgICAgaWYg
KCFvcGFjaXR5KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChvcGFjaXR5ICE9IDEp
IHsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNhdmUoKTsKKyAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LmNsaXAoZGFtYWdlUmVjdCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5iZWdpblRyYW5z
cGFyZW5jeUxheWVyKG9wYWNpdHkpOworICAgIH0KKwogICAgIFNjcm9sbGJhckNvbnRyb2xQYXJ0
TWFzayBhbGxCdXR0b25zID0gQmFja0J1dHRvblN0YXJ0UGFydCB8IEJhY2tCdXR0b25FbmRQYXJ0
IHwgRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCB8IEZvcndhcmRCdXR0b25FbmRQYXJ0OwogICAgIGlm
IChzY3JvbGxNYXNrICYgVHJhY2tCR1BhcnQgfHwgc2Nyb2xsTWFzayAmIFRodW1iUGFydCB8fCBz
Y3JvbGxNYXNrICYgYWxsQnV0dG9ucykKICAgICAgICAgcGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5k
KGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyKTsKQEAgLTQxOCw2ICs0NzEsMTEgQEAgYm9vbCBT
Y3JvbGxiYXJUaGVtZUd0azo6cGFpbnQoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29u
dGV4dCYgZ3JhcGhpY3NDb24KICAgICBpZiAoc2Nyb2xsTWFzayAmIFRodW1iUGFydCkKICAgICAg
ICAgcGFpbnRUaHVtYihncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhciwgY3VycmVudFRodW1iUmVj
dCk7CiAKKyAgICBpZiAob3BhY2l0eSAhPSAxKSB7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5l
bmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgICAgICBncmFwaGljc0NvbnRleHQucmVzdG9yZSgp
OworICAgIH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC00MzQsNyArNDkyLDcgQEAgaW50
IFNjcm9sbGJhclRoZW1lR3RrOjpzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNp
emUpCiAKIEludFNpemUgU2Nyb2xsYmFyVGhlbWVHdGs6OmJ1dHRvblNpemUoU2Nyb2xsYmFyJiBz
Y3JvbGxiYXIpCiB7Ci0gICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4dCA9
IGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KHNjcm9sbGJhci5vcmllbnRhdGlvbigpKTsKKyAgICBH
UmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gc3R5bGVDb250ZXh0ID0gZ2V0T3JDcmVhdGVTdHlsZUNv
bnRleHQoJnNjcm9sbGJhcik7CiAgICAgaWYgKHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IFZl
cnRpY2FsU2Nyb2xsYmFyKQogICAgICAgICByZXR1cm4gSW50U2l6ZShtX2NhY2hlZFByb3BlcnRp
ZXMudGh1bWJGYXRuZXNzLCBtX2NhY2hlZFByb3BlcnRpZXMuc3RlcHBlclNpemUpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5oCmluZGV4IDFi
YzVjMDQuLjhiN2I2NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9T
Y3JvbGxiYXJUaGVtZUd0ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3Jv
bGxiYXJUaGVtZUd0ay5oCkBAIC02MSwxMCArNjEsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
ZG91YmxlIGluaXRpYWxBdXRvc2Nyb2xsVGltZXJEZWxheSgpIG92ZXJyaWRlIHsgcmV0dXJuIDAu
MjA7IH0KICAgICB2aXJ0dWFsIGRvdWJsZSBhdXRvc2Nyb2xsVGltZXJEZWxheSgpIG92ZXJyaWRl
IHsgcmV0dXJuIDAuMDI7IH0KICAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBib29sIHVzZXNPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fdXNlc092ZXJsYXlTY3JvbGxiYXJzOyB9CisgICAgLy8gV2hlbiB1c2lu
ZyBvdmVybGF5IHNjcm9sbGJhcnMsIGFsd2F5cyBpbnZhbGlkYXRlIHRoZSB3aG9sZSBzY3JvbGxi
YXIgd2hlbiBlbnRlcmluZy9sZWF2aW5nLgorICAgIHZpcnR1YWwgYm9vbCBpbnZhbGlkYXRlT25N
b3VzZUVudGVyRXhpdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdXNlc092ZXJsYXlTY3JvbGxiYXJz
OyB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVUaGVtZVByb3BlcnRpZXMoKTsKLSAgICBH
UmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gZ2V0T3JDcmVhdGVTdHlsZUNvbnRleHQoU2Nyb2xsYmFy
T3JpZW50YXRpb24gPSBWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgZW51bSBjbGFzcyBTdHlsZUNv
bnRleHRNb2RlIHsgTGF5b3V0LCBQYWludCB9OworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0
PiBnZXRPckNyZWF0ZVN0eWxlQ29udGV4dChTY3JvbGxiYXIqID0gbnVsbHB0ciwgU3R5bGVDb250
ZXh0TW9kZSA9IFN0eWxlQ29udGV4dE1vZGU6OkxheW91dCk7CiAKICAgICBJbnRTaXplIGJ1dHRv
blNpemUoU2Nyb2xsYmFyJik7CiAKQEAgLTgzLDYgKzg3LDcgQEAgcHJpdmF0ZToKICAgICBnYm9v
bGVhbiBtX2hhc0ZvcndhcmRCdXR0b25FbmRQYXJ0OwogICAgIGdib29sZWFuIG1faGFzQmFja0J1
dHRvblN0YXJ0UGFydDsKICAgICBnYm9vbGVhbiBtX2hhc0JhY2tCdXR0b25FbmRQYXJ0OworICAg
IGJvb2wgbV91c2VzT3ZlcmxheVNjcm9sbGJhcnMgeyBmYWxzZSB9OwogI2VuZGlmIC8vIEdUS19B
UElfVkVSU0lPTl8yCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvU2Nyb2xsQW5pbWF0b3JNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3Jv
bGxBbmltYXRvck1hYy5oCmluZGV4IDVlM2VhYzguLjc5NGIxN2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCkBAIC05NSwxNyArOTUsMTcg
QEAgcHJpdmF0ZToKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5UG9zaXRpb25DaGFuZ2Vk
KGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBjb250
ZW50QXJlYVdpbGxQYWludCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBtb3Vz
ZUVudGVyZWRDb250ZW50QXJlYSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBt
b3VzZUV4aXRlZENvbnRlbnRBcmVhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IG1vdXNlRXhpdGVkQ29udGVudEFyZWEoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbW91
c2VNb3ZlZEluQ29udGVudEFyZWEoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgbW91c2VF
bnRlcmVkU2Nyb2xsYmFyKFNjcm9sbGJhciopIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
dm9pZCBtb3VzZUV4aXRlZFNjcm9sbGJhcihTY3JvbGxiYXIqKSBjb25zdCBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgbW91c2VJc0Rvd25JblNjcm9sbGJhcihTY3JvbGxiYXIqLCBib29sKSBj
b25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpIG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1Jlc2l6ZWQoKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbEVuZExpdmVSZXNpemUoKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgY29udGVudEFyZWFEaWRTaG93KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIGNvbnRlbnRBcmVhRGlkSGlkZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBjb250ZW50QXJlYURpZFNob3coKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
Y29udGVudEFyZWFEaWRIaWRlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRCZWdpblNjcm9sbEdl
c3R1cmUoKSBjb25zdDsKICAgICB2b2lkIGRpZEVuZFNjcm9sbEdlc3R1cmUoKSBjb25zdDsKICAg
ICB2b2lkIG1heUJlZ2luU2Nyb2xsR2VzdHVyZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCmluZGV4IGQ5ODgxN2YuLmE3YWRm
MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRv
ck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JN
YWMubW0KQEAgLTgwNiw3ICs4MDYsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50
QXJlYVdpbGxQYWludCgpIGNvbnN0CiAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIg
Y29udGVudEFyZWFXaWxsRHJhd107CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNl
RW50ZXJlZENvbnRlbnRBcmVhKCkgY29uc3QKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNl
RW50ZXJlZENvbnRlbnRBcmVhKCkKIHsKICAgICBpZiAoW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCiAgICAgICAgIHJldHVybjsKQEAg
LTgxNCw3ICs4MTQsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZUVudGVyZWRDb250
ZW50QXJlYSgpIGNvbnN0CiAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgbW91c2VF
bnRlcmVkQ29udGVudEFyZWFdOwogfQogCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZUV4
aXRlZENvbnRlbnRBcmVhKCkgY29uc3QKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRXhp
dGVkQ29udGVudEFyZWEoKQogewogICAgIGlmIChbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxl
ciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKICAgICAgICAgcmV0dXJuOwpAQCAtODIy
LDcgKzgyMiw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRXhpdGVkQ29udGVudEFy
ZWEoKSBjb25zdAogICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIG1vdXNlRXhpdGVk
Q29udGVudEFyZWFdOwogfQogCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZU1vdmVkSW5D
b250ZW50QXJlYSgpIGNvbnN0Cit2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZU1vdmVkSW5D
b250ZW50QXJlYSgpCiB7CiAgICAgaWYgKFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIG92
ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQogICAgICAgICByZXR1cm47CkBAIC04OTgsNyAr
ODk4LDcgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6d2lsbEVuZExpdmVSZXNpemUoKQogICAg
IFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIGVuZExpdmVSZXNpemVdOwogfQogCi12b2lk
IFNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50QXJlYURpZFNob3coKSBjb25zdAordm9pZCBTY3Jv
bGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRTaG93KCkKIHsKICAgICBpZiAoW21fc2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tlZF0pCiAgICAg
ICAgIHJldHVybjsKQEAgLTkwNiw3ICs5MDYsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpj
b250ZW50QXJlYURpZFNob3coKSBjb25zdAogICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyIHdpbmRvd09yZGVyZWRJbl07CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRl
bnRBcmVhRGlkSGlkZSgpIGNvbnN0Cit2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50QXJl
YURpZEhpZGUoKQogewogICAgIGlmIChbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciBvdmVy
bGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKICAgICAgICAgcmV0dXJuOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269881</attachid>
            <date>2016-01-26 07:06:36 -0800</date>
            <delta_ts>2016-01-27 02:38:22 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>wcore-gtk-overlay-scrollbars.diff</filename>
            <type>text/plain</type>
            <size>42487</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkNzczZWY1Li40Y2E5NDVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTE4
IEBACiAyMDE2LTAxLTI2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KIAorICAgICAgICBbR1RLXSBJbXBsZW1lbnQgb3ZlcmxheSBzY3JvbGxiYXJzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTM0MDUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3Ig
b3ZlcmxheSBzY3JvbGxiYXJzIHRvIEdUSysgcGxhdGZvcm0gZm9sbG93aW5nIHRoZQorICAgICAg
ICBzYW1lIHN0eWxlIGFuZCBiZWhhdmlvciB0aGFuIEd0a1Njcm9sbGVkV2luZG93LiBUaGV5IGFy
ZSBvbmx5CisgICAgICAgIGF2YWlsYWJsZSBmb3IgR1RLKyA+PSAzLjE5LCBidXQgaG9ub3Jpbmcg
dGhlIEdUS19PVkVSTEFZX1NDUk9MTElORworICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSwg
c28gdGhleSBjb3VsZCBiZSBkaXNhYmxlIGF0IHJ1biB0aW1lLCBleGNlcHQKKyAgICAgICAgd2hl
biB0aHJlYWRlZCBjb21wb3NpdG9yIGlzIGVuYWJsZWQuIEEgbmV3IFNjcm9sbEFuaW1hdG9yIGNs
YXNzCisgICAgICAgIGhhcyBiZWVuIGFkZGVkIGZvciBHVEsrIHRvIGltcGxlbWVudCBvdmVybGF5
IHNjcm9sbGJhcnMgYW5kIHN0aWxsCisgICAgICAgIGFsbG93IHNtb290aCBzY3JvbGxpbmcgd2hl
biBhdmFpbGFibGUuCisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZTogQWRkIFNjcm9sbEFu
aW1hdG9yR3RrIGFuZCBzdG9wIGJ1aWxkaW5nIFNjcm9sbEFuaW1hdG9yU21vb3RoLgorICAgICAg
ICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvcjo6U2Nyb2xsQW5pbWF0b3I6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKToKKyAgICAg
ICAgUmVtb3ZlIGNvbnN0IHRvIGFsbG93IHRoZSBTY3JvbGxBbmltYXRvciB0byBiZSB1cGRhdGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OlNjcm9sbEFuaW1hdG9yOjptb3Vz
ZUV4aXRlZENvbnRlbnRBcmVhKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvcjo6U2Nyb2xsQW5pbWF0b3I6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6U2Nyb2xsQW5pbWF0b3I6OmNvbnRlbnRB
cmVhRGlkU2hvdyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OlNj
cm9sbEFuaW1hdG9yOjpjb250ZW50QXJlYURpZEhpZGUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxiYXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6b3BhY2l0eSk6
IEdldCBzY3JvbGxiYXIgb3BhY2l0eS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c2V0
T3BhY2l0eSk6IFNldCBzY3JvbGxiYXIgb3BhY2l0eS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsv
U2Nyb2xsQW5pbWF0b3JHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yOjpjcmVhdGUpOiBDcmVhdGUgYSBTY3JvbGxBbmltYXRvckd0ay4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjpTY3JvbGxBbmltYXRvckd0ayk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6flNjcm9sbEFuaW1hdG9yR3RrKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjplbnN1cmVTbW9vdGhTY3JvbGxpbmdBbmltYXRp
b24pOgorICAgICAgICBJbml0aWFsaXplIHRoZSBTY3JvbGxBbmltYXRpb25TbW9vdGggaWYgaXQg
ZG9lc24ndCBleGlzdC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjpzY3Jv
bGwpOiBFbnN1cmUgd2UgaGF2ZSBhCisgICAgICAgIFNjcm9sbEFuaW1hdGlvblNtb290aCBpZiBz
bW9vdGggc2Nyb2xsaW5nIGlzIGVuYWJsZWQuIFRoaXMgYWxzbworICAgICAgICBmaXhlcyB0aGUg
cHJvYmxlbSBvZiBoYXZpbmcgdG8gcmVsb2FkIHRoZSBwYWdlIGFmdGVyIGNoYW5naW5nIHRoZQor
ICAgICAgICBzbW9vdGggc2Nyb2xsaW5nIHNldHRpbmcuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvckd0azo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjp3aWxsRW5kTGl2ZVJlc2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIpOiBS
ZWdpc3RlcgorICAgICAgICB0aGUgc2Nyb2xsYmFyIGlmIGl0J3MgYW4gb3ZlcmxheSBzY3JvbGxi
YXIgYW5kIG1ha2UgaXQgdmlzaWJsZQorICAgICAgICB3aXRob3V0IGFuaW1hdGluZyBpdC4gU3Rh
cnQgdGhlIGhpZGUgYW5pbWF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JH
dGs6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yR3RrOjp3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAg
ICBVbnJlZ2lzdGVyIHRoZSBzY3JvbGxiYXIgaWYgaXQgd2FzIHJlZ2lzdGVyZWQgYW5kIHJlc3J0
IHRoZQorICAgICAgICBhbmltYXRpb24gc3RhdGUgaWYgaXQgd2FzIHRoZSBvbmx5IHNjcm9sbGJh
ci4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjp3aWxsUmVtb3ZlSG9yaXpv
bnRhbFNjcm9sbGJhcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JH
dGs6OnVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSk6IFVwZGF0ZQorICAgICAgICB0aGUg
c2Nyb2xsYmFycyBvcGFjaXR5IGFuZCBpbnZhbGlkYXRlIHRoZSBpbmRpY2F0b3IuCisgICAgICAg
IChXZWJDb3JlOjplYXNlT3V0Q3ViaWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JHdGs6Om92ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgVXBk
YXRlIHRoZSBzY3JvbGxiYXJzIG9wYWNpdHkgYW5kIHNjaGVkdWxlIGEgbmV4dCBmcmFtZSBpZiB0
aGUKKyAgICAgICAgYW5pbWF0aW9uIGRpZG4ndCBmaW5pc2ggb3Igc3RhcnQgdGhlIGhpZGUgYW5p
bWF0aW9uIG90aGVyd2hpc2UuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6
c2hvd092ZXJsYXlTY3JvbGxiYXJzKTogU3RhcnQgdGhlCisgICAgICAgIGZhZGUgYW5pbWF0aW9u
IHRvIHNob3cgdGhlIHNjcm9sbGJhcnMgaWYgbmVlZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JHdGs6OmhpZGVPdmVybGF5U2Nyb2xsYmFycyk6IFN0YXJ0IHRoZQorICAgICAg
ICBkYWZlIGFuaW1hdGlvbiB0byBoaWRlIHRoZSBzY3JvbGxiYXJzIGlmIG5lZWRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjptb3VzZUVudGVyZWRDb250ZW50QXJlYSk6
IENhbGwKKyAgICAgICAgc2hvd092ZXJsYXlTY3JvbGxiYXJzKCkuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvckd0azo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSk6IENhbGwKKyAgICAg
ICAgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCkuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvckd0azo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEpOiBDYWxsCisgICAgICAgIHNob3dPdmVy
bGF5U2Nyb2xsYmFycygpLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHdGs6OmNv
bnRlbnRBcmVhRGlkU2hvdyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JHdGs6OmNvbnRlbnRBcmVhRGlkSGlkZSk6IEhpZGUgdGhlCisgICAgICAgIHNjcm9sbGJhcnMg
d2l0aG91dCBhbmltYXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHdGs6
Om5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQpOiBDYWxsCisgICAgICAgIHNob3dPdmVybGF5U2Ny
b2xsYmFycygpLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHdGs6OmxvY2tPdmVy
bGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbik6CisgICAgICAgIFVwZGF0ZSB0aGUgbG9jayBzdGF0
ZSBhbmQgaGlkZSBvciBzaG93IHRoZSBzY3JvbGxiYXJzIHdoZW4gbG9ja2VkCisgICAgICAgIG9y
IHVubG9ja2VkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5oOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OmJhY2tCdXR0b25SZWN0KTogUGFzcwor
ICAgICAgICBTdHlsZUNvbnRleHRNb2RlIHRvIGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0IGRlcGVu
ZGluZyBvbiB0aGUKKyAgICAgICAgcGFpbnRpbmcgcGFyYW1ldGVyLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OmZvcndhcmRCdXR0b25SZWN0KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6dHJhY2tSZWN0KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6Z2V0T3JDcmVhdGVTdHlsZUNvbnRleHQpOiBB
ZGQKKyAgICAgICAgU3R5bGVDb250ZXh0TW9kZSBwYXJhbWV0ZXIgdG8gYWRkIHRoZSBob3Zlcmlu
ZyBjbGFzcworICAgICAgICB1bmNvbmRpdGlvbmFsbHkgd2hlbiB1c2luZyBvdmVybGF5IHNjcm9s
bGJhcnMgaW4gbGF5b3V0IG1vZGUuIEluCisgICAgICAgIHBhaW50IG1vZGUgd2UgYWRkIHRoZSBo
b3ZlcmluZyBjbGFzIG9ubHkgd2hlbiB0aGUgc2Nyb2xsYmFyIGlzCisgICAgICAgIGhvdmVyZWQu
IFRoaXMgd2F5IHdlIGFsd2F5cyBjbGFpbSB0aGUgc2l6ZSBvZiB0aGUgc2Nyb2xsYmFyIHdoZW4K
KyAgICAgICAgaG92ZXJlZCB0byBiZSBhYmxlIHRvIHNob3cgdGhlIGZ1bGwgc2Nyb2xsYmFyIHdo
ZW4gdGhlIG1vdXNlIGlzCisgICAgICAgIGNsb3NlIGVub3VnaCB0byB0aGUgaW5kaWNhdG9yLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OlNjcm9sbGJhclRoZW1lR3RrKTog
SW5pdGlhbGl6ZQorICAgICAgICBtX3VzZXNPdmVybGF5U2Nyb2xsYmFycy4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjp0aHVtYlJlY3QpOiBQYXNzIHRoZSBzY3JvbGxiYXIg
dG8KKyAgICAgICAgZ2V0T3JDcmVhdGVTdHlsZUNvbnRleHQoKS4KKyAgICAgICAgKFdlYkNvcmU6
OmFkanVzdFJlY3RBY2NvcmRpbmdUb01hcmdpbik6IEZpeCB0aGUgdG9wIG1hcmdpbi4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpwYWludFRyYWNrQmFja2dyb3VuZCk6IFBh
c3MgdGhlCisgICAgICAgIHNjcm9sbGJhciBhbmQgcGFpbnQgbW9kZSB0byBnZXRPckNyZWF0ZVN0
eWxlQ29udGV4dCgpLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50
U2Nyb2xsYmFyQmFja2dyb3VuZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
VGhlbWVHdGs6OnBhaW50VGh1bWIpOiBBZGp1c3QgdGhlIHRodW1iCisgICAgICAgIHJlY3Rhbmds
ZSB3aGVuIG92ZXJsYXkgc2Nyb2xsYmFyIGlzIG5vdCBob3ZlcmVkIHRvIGl0cyBjdXJyZW50Cisg
ICAgICAgIHNpemUsIHNpbmNlIHdlIGFsd2F5cyBjbGFpbSB0aGUgc2l6ZSBvZiB0aGUgc2Nyb2xs
YmFyIGluIGhvdmVyZWQKKyAgICAgICAgbW9kZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJh
clRoZW1lR3RrOjpwYWludEJ1dHRvbik6IFBhc3MgdGhlIHNjcm9sbGJhciBhbmQKKyAgICAgICAg
cGFpbnQgbW9kZSB0byBnZXRPckNyZWF0ZVN0eWxlQ29udGV4dCgpLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50KTogVGFrZSB0aGUgc2Nyb2xsYmFyIG9wYWNpdHkK
KyAgICAgICAgaW50byBhY2NvdW50IHdoZW4gcmVuZGVyaW5nIG92ZXJsYXkgc2Nyb2xsYmFycyBh
cyBpbmRpY2F0b3JzLiBBbHNvCisgICAgICAgIGdldCB0aGUgc2Nyb2xsYmFyIG9wYWNpdHkgZnJv
bSB0aGUgR1RLKyB0aGVtZSBhbmQgdXNlIGEKKyAgICAgICAgdHJhbnNwYXJlbmN5IGdyb3VwIHdo
ZW4gdGhlIGdsb2JhbCBvcGFjaXR5IGlzIG5vdCBmdWxsIG9wYXF1ZS4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhclRoZW1lR3RrOjpidXR0b25TaXplKTogUGFzcyB0aGUgc2Nyb2xsYmFyIHRv
CisgICAgICAgIGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KCkuCisgICAgICAgICogcGxhdGZvcm0v
Z3RrL1Njcm9sbGJhclRoZW1lR3RrLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFu
aW1hdG9yTWFjLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRW50ZXJlZENvbnRl
bnRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZUV4aXRl
ZENvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjptb3Vz
ZU1vdmVkSW5Db250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1h
Yzo6Y29udGVudEFyZWFEaWRTaG93KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
TWFjOjpjb250ZW50QXJlYURpZEhpZGUpOgorCisyMDE2LTAxLTI2ICBDYXJsb3MgR2FyY2lhIENh
bXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKwogICAgICAgICBbR1RLXVtFRkxdIFJlbmFtZSBT
Y3JvbGxBbmltYXRpb25Ob25lIGFzIFNjcm9sbEFuaW1hdGlvblNtb290aAogICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNDgxCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1HVEsuY21ha2UKaW5kZXggNGY0NzExZi4uMzRjY2Q1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsu
Y21ha2UKQEAgLTE2Myw2ICsxNjMsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAg
ICBwbGF0Zm9ybS9ndGsvTGFuZ3VhZ2VHdGsuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL0xvZ2dpbmdH
dGsuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL01JTUVUeXBlUmVnaXN0cnlHdGsuY3BwCisgICAgcGxh
dGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmNwcAogICAgIHBsYXRmb3JtL2d0ay9TaGFyZWRC
dWZmZXJHdGsuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKICAg
ICBwbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmNwcApAQCAtOTM2LDcgKzkzNyw2IEBAIHNldChH
T2JqZWN0RE9NQmluZGluZ3NfR0lSX0hFQURFUlMgJHtHT2JqZWN0RE9NQmluZGluZ3NfR0lSX0hF
QURFUlN9IFBBUkVOVF9TQ09QCiBpZiAoRU5BQkxFX1NNT09USF9TQ1JPTExJTkcpCiAgICAgbGlz
dChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgICAgIHBsYXRmb3JtL1Njcm9sbEFuaW1hdGlv
blNtb290aC5jcHAKLSAgICAgICAgcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JTbW9vdGguY3BwCiAg
ICAgKQogZW5kaWYgKCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgK
aW5kZXggZTYyNmI5MC4uZGQwZjNhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRvci5oCkBAIC05MSwxNyArOTEsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBz
ZXJ2aWNlU2Nyb2xsQW5pbWF0aW9ucygpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRB
cmVhV2lsbFBhaW50KCkgY29uc3QgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlRW50ZXJlZENv
bnRlbnRBcmVhKCkgY29uc3QgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlRXhpdGVkQ29udGVu
dEFyZWEoKSBjb25zdCB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VNb3ZlZEluQ29udGVudEFy
ZWEoKSBjb25zdCB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VFbnRlcmVkQ29udGVudEFyZWEo
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VFeGl0ZWRDb250ZW50QXJlYSgpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBtb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpIHsgfQogICAgIHZpcnR1YWwg
dm9pZCBtb3VzZUVudGVyZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKikgY29uc3QgeyB9CiAgICAgdmly
dHVhbCB2b2lkIG1vdXNlRXhpdGVkU2Nyb2xsYmFyKFNjcm9sbGJhciopIGNvbnN0IHsgfQogICAg
IHZpcnR1YWwgdm9pZCBtb3VzZUlzRG93bkluU2Nyb2xsYmFyKFNjcm9sbGJhciosIGJvb2wpIGNv
bnN0IHsgfQogICAgIHZpcnR1YWwgdm9pZCB3aWxsU3RhcnRMaXZlUmVzaXplKCkgeyB9CiAgICAg
dmlydHVhbCB2b2lkIGNvbnRlbnRzUmVzaXplZCgpIGNvbnN0IHsgfQogICAgIHZpcnR1YWwgdm9p
ZCB3aWxsRW5kTGl2ZVJlc2l6ZSgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjb250ZW50QXJlYURp
ZFNob3coKSBjb25zdCB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFEaWRIaWRlKCkg
Y29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhRGlkU2hvdygpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBjb250ZW50QXJlYURpZEhpZGUoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9p
ZCBsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4oYm9vbCkgeyB9CiAgICAgdmlydHVh
bCBib29sIHNjcm9sbGJhcnNDYW5CZUFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKaW5kZXggODI0MjUxMC4uMjQ5MWI5YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKQEAgLTEzMCw2ICsxMzAsOSBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBpc0FscGhhTG9ja2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc0FscGhhTG9ja2VkOyB9
CiAgICAgdm9pZCBzZXRJc0FscGhhTG9ja2VkKGJvb2wgZmxhZykgeyBtX2lzQWxwaGFMb2NrZWQg
PSBmbGFnOyB9CiAKKyAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5
OyB9CisgICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9vcGFjaXR5ID0gb3Bh
Y2l0eTsgfQorCiAgICAgYm9vbCBzdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKCkgY29u
c3Q7CiAKICAgICBXZWFrUHRyPFNjcm9sbGJhcj4gY3JlYXRlV2Vha1B0cigpIHsgcmV0dXJuIG1f
d2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigpOyB9CkBAIC0xNzgsNiArMTgxLDggQEAgcHJv
dGVjdGVkOgogCiAgICAgYm9vbCBtX2lzQ3VzdG9tU2Nyb2xsYmFyOwogCisgICAgZmxvYXQgbV9v
cGFjaXR5IHsgMSB9OworCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbGJhcigp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZjBkNzIxNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5jcHAKQEAgLTAsMCArMSwzMDAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKGMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU2Nyb2xsQW5pbWF0b3JHdGsuaCIKKworI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvblNt
b290aC5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFy
VGhlbWUuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGF0aWMgY29uc3QgZG91YmxlIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1
cmF0aW9uID0gMTsKK3N0YXRpYyBjb25zdCBkb3VibGUgb3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0
aW9uSGlkZURlbGF5ID0gMjsKKworc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdG9yPiBTY3Jv
bGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKK3sKKyAg
ICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxTY3JvbGxBbmltYXRvckd0az4oc2Nyb2xsYWJsZUFy
ZWEpOworfQorCitTY3JvbGxBbmltYXRvckd0azo6U2Nyb2xsQW5pbWF0b3JHdGsoU2Nyb2xsYWJs
ZUFyZWEmIHNjcm9sbGFibGVBcmVhKQorICAgIDogU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJsZUFy
ZWEpCisgICAgLCBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lcigqdGhpcywgJlNjcm9s
bEFuaW1hdG9yR3RrOjpvdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXJGaXJlZCkKK3sKKyNp
ZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKyAgICBpZiAoc2Nyb2xsYWJsZUFyZWEuc2Nyb2xs
QW5pbWF0b3JFbmFibGVkKCkpCisgICAgICAgIGVuc3VyZVNtb290aFNjcm9sbGluZ0FuaW1hdGlv
bigpOworI2VuZGlmCit9CisKK1Njcm9sbEFuaW1hdG9yR3RrOjp+U2Nyb2xsQW5pbWF0b3JHdGso
KQoreworfQorCisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCit2b2lkIFNjcm9sbEFuaW1h
dG9yR3RrOjplbnN1cmVTbW9vdGhTY3JvbGxpbmdBbmltYXRpb24oKQoreworICAgIGlmIChtX2Fu
aW1hdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9hbmltYXRpb24gPSBzdGQ6Om1ha2Vf
dW5pcXVlPFNjcm9sbEFuaW1hdGlvblNtb290aD4obV9zY3JvbGxhYmxlQXJlYSwgW3RoaXNdKEZs
b2F0UG9pbnQmJiBwb3NpdGlvbikgeworICAgICAgICBGbG9hdFNpemUgZGVsdGEgPSBwb3NpdGlv
biAtIG1fY3VycmVudFBvc2l0aW9uOworICAgICAgICBtX2N1cnJlbnRQb3NpdGlvbiA9IFdURk1v
dmUocG9zaXRpb24pOworICAgICAgICBub3RpZnlQb3NpdGlvbkNoYW5nZWQoZGVsdGEpOworICAg
IH0pOworICAgIG1fYW5pbWF0aW9uLT5zZXRDdXJyZW50UG9zaXRpb24obV9jdXJyZW50UG9zaXRp
b24pOworfQorCitib29sIFNjcm9sbEFuaW1hdG9yR3RrOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50
YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBz
dGVwLCBmbG9hdCBtdWx0aXBsaWVyKQoreworICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYS5zY3Jv
bGxBbmltYXRvckVuYWJsZWQoKSB8fCBncmFudWxhcml0eSA9PSBTY3JvbGxCeVByZWNpc2VQaXhl
bCkKKyAgICAgICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwob3JpZW50YXRpb24sIGdy
YW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKKworICAgIGVuc3VyZVNtb290aFNjcm9sbGlu
Z0FuaW1hdGlvbigpOworICAgIHJldHVybiBtX2FuaW1hdGlvbi0+c2Nyb2xsKG9yaWVudGF0aW9u
LCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0
b3JHdGs6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBv
ZmZzZXQpCit7CisgICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IFNjcm9sbGFibGVBcmVhOjpzY3Jv
bGxQb3NpdGlvbkZyb21PZmZzZXQob2Zmc2V0LCB0b0Zsb2F0U2l6ZShtX3Njcm9sbGFibGVBcmVh
LnNjcm9sbE9yaWdpbigpKSk7CisgICAgaWYgKG1fYW5pbWF0aW9uKQorICAgICAgICBtX2FuaW1h
dGlvbi0+c2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0aW9uKTsKKworICAgIEZsb2F0U2l6ZSBkZWx0
YSA9IHBvc2l0aW9uIC0gbV9jdXJyZW50UG9zaXRpb247CisgICAgbV9jdXJyZW50UG9zaXRpb24g
PSBwb3NpdGlvbjsKKyAgICBub3RpZnlQb3NpdGlvbkNoYW5nZWQoZGVsdGEpOworfQorCit2b2lk
IFNjcm9sbEFuaW1hdG9yR3RrOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCit7CisgICAgaWYgKG1fYW5p
bWF0aW9uKQorICAgICAgICBtX2FuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKK30K
KyNlbmRpZgorCit2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJh
cihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykK
KyAgICBpZiAobV9hbmltYXRpb24pCisgICAgICAgIG1fYW5pbWF0aW9uLT51cGRhdGVWaXNpYmxl
TGVuZ3RocygpOworI2VuZGlmCisgICAgaWYgKCFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJh
cigpKQorICAgICAgICByZXR1cm47CisgICAgbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgPSBz
Y3JvbGxiYXI7CisgICAgaWYgKCFtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyKQorICAgICAg
ICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0gMTsKKyAgICBtX3ZlcnRpY2Fs
T3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0eShtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25D
dXJyZW50KTsKKyAgICBoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsKK30KKwordm9pZCBTY3JvbGxB
bmltYXRvckd0azo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJh
cikKK3sKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKyAgICBpZiAobV9hbmltYXRpb24p
CisgICAgICAgIG1fYW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOworI2VuZGlmCisg
ICAgaWYgKCFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKQorICAgICAgICByZXR1cm47
CisgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhciA9IHNjcm9sbGJhcjsKKyAgICBpZiAo
IW1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQorICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJB
bmltYXRpb25DdXJyZW50ID0gMTsKKyAgICBtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyLT5z
ZXRPcGFjaXR5KG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQpOworICAgIGhpZGVP
dmVybGF5U2Nyb2xsYmFycygpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjp3aWxsUmVt
b3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAgaWYgKG1f
dmVydGljYWxPdmVybGF5U2Nyb2xsYmFyICE9IHNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyID0gbnVsbHB0cjsKKyAgICBpZiAoIW1faG9y
aXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIpCisgICAgICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1h
dGlvbkN1cnJlbnQgPSAwOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjp3aWxsUmVtb3Zl
SG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBpZiAobV9o
b3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhciAhPSBzY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyID0gbnVsbHB0cjsKKyAgICBpZiAoIW1f
dmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQorICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmlt
YXRpb25DdXJyZW50ID0gMDsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckd0azo6dXBkYXRlT3Zl
cmxheVNjcm9sbGJhcnNPcGFjaXR5KCkKK3sKKyAgICBpZiAobV92ZXJ0aWNhbE92ZXJsYXlTY3Jv
bGxiYXIgJiYgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCAhPSBtX3ZlcnRpY2Fs
T3ZlcmxheVNjcm9sbGJhci0+b3BhY2l0eSgpKSB7CisgICAgICAgIG1fdmVydGljYWxPdmVybGF5
U2Nyb2xsYmFyLT5zZXRPcGFjaXR5KG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQp
OworICAgICAgICBpZiAobV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkg
PT0gTm9QYXJ0KQorICAgICAgICAgICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkuaW52YWxpZGF0
ZVBhcnQoKm1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyLCBUaHVtYlBhcnQpOworICAgIH0KKwor
ICAgIGlmIChtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyICYmIG1fb3ZlcmxheVNjcm9sbGJh
ckFuaW1hdGlvbkN1cnJlbnQgIT0gbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+b3BhY2l0
eSgpKSB7CisgICAgICAgIG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXItPnNldE9wYWNpdHko
bV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCk7CisgICAgICAgIGlmIChtX2hvcml6
b250YWxPdmVybGF5U2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IE5vUGFydCkKKyAgICAgICAg
ICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLmludmFsaWRhdGVQYXJ0KCptX2hvcml6b250YWxP
dmVybGF5U2Nyb2xsYmFyLCBUaHVtYlBhcnQpOworICAgIH0KK30KKworc3RhdGljIGlubGluZSBk
b3VibGUgZWFzZU91dEN1YmljKGRvdWJsZSB0KQoreworICAgIGRvdWJsZSBwID0gdCAtIDE7Cisg
ICAgcmV0dXJuIHAgKiBwICogcCArIDE7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6Om92
ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lckZpcmVkKCkKK3sKKyAgICBpZiAoIW1faG9yaXpv
bnRhbE92ZXJsYXlTY3JvbGxiYXIgJiYgIW1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhcnNMb2NrZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIGRvdWJsZSBjdXJyZW50VGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFz
aW5nVGltZSgpOworICAgIGRvdWJsZSBwcm9ncmVzcyA9IDE7CisgICAgaWYgKGN1cnJlbnRUaW1l
IDwgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uRW5kVGltZSkKKyAgICAgICAgcHJvZ3Jlc3Mg
PSAoY3VycmVudFRpbWUgLSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25TdGFydFRpbWUpIC8g
KG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkVuZFRpbWUgLSBtX292ZXJsYXlTY3JvbGxiYXJB
bmltYXRpb25TdGFydFRpbWUpOworICAgIHByb2dyZXNzID0gbV9vdmVybGF5U2Nyb2xsYmFyQW5p
bWF0aW9uU291cmNlICsgKGVhc2VPdXRDdWJpYyhwcm9ncmVzcykgKiAobV9vdmVybGF5U2Nyb2xs
YmFyQW5pbWF0aW9uVGFyZ2V0IC0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlKSk7
CisgICAgaWYgKHByb2dyZXNzICE9IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQp
IHsKKyAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9IHByb2dyZXNz
OworICAgICAgICB1cGRhdGVPdmVybGF5U2Nyb2xsYmFyc09wYWNpdHkoKTsKKyAgICB9CisKKyAg
ICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCAhPSBtX292ZXJsYXlTY3Jv
bGxiYXJBbmltYXRpb25UYXJnZXQpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBmcmFt
ZVJhdGUgPSA2MDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSB0aWNrVGltZSA9IDEgLyBm
cmFtZVJhdGU7CisgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgbWluaW11bVRpbWVySW50ZXJ2
YWwgPSAuMDAxOworICAgICAgICBkb3VibGUgZGVsdGFUb05leHRGcmFtZSA9IHN0ZDo6bWF4KHRp
Y2tUaW1lIC0gKG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gY3VycmVudFRpbWUpLCBt
aW5pbXVtVGltZXJJbnRlcnZhbCk7CisgICAgICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlv
blRpbWVyLnN0YXJ0T25lU2hvdChkZWx0YVRvTmV4dEZyYW1lKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6
OnNob3dPdmVybGF5U2Nyb2xsYmFycygpCit7CisgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhcnNM
b2NrZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJBbmlt
YXRpb25UaW1lci5pc0FjdGl2ZSgpICYmIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdl
dCA9PSAxKQorICAgICAgICByZXR1cm47CisgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9u
VGltZXIuc3RvcCgpOworCisgICAgaWYgKCFtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyICYm
ICFtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9v
dmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU291cmNlID0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uQ3VycmVudDsKKyAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQgPSAxOwor
ICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UYXJnZXQgIT0gbV9vdmVybGF5U2Ny
b2xsYmFyQW5pbWF0aW9uQ3VycmVudCkgeworICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmlt
YXRpb25TdGFydFRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICAgICAg
bV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uRW5kVGltZSA9IG1fb3ZlcmxheVNjcm9sbGJhckFu
aW1hdGlvblN0YXJ0VGltZSArIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1cmF0aW9uOwor
ICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5zdGFydE9uZVNob3QoMCk7
CisgICAgfSBlbHNlCisgICAgICAgIGhpZGVPdmVybGF5U2Nyb2xsYmFycygpOworfQorCit2b2lk
IFNjcm9sbEFuaW1hdG9yR3RrOjpoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKQoreworICAgIGlmICht
X292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpICYmICFtX292ZXJsYXlT
Y3JvbGxiYXJBbmltYXRpb25UYXJnZXQpCisgICAgICAgIHJldHVybjsKKyAgICBtX292ZXJsYXlT
Y3JvbGxiYXJBbmltYXRpb25UaW1lci5zdG9wKCk7CisKKyAgICBpZiAoIW1faG9yaXpvbnRhbE92
ZXJsYXlTY3JvbGxiYXIgJiYgIW1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25Tb3VyY2UgPSBtX292ZXJs
YXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50OworICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1h
dGlvblRhcmdldCA9IDA7CisgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdl
dCA9PSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KQorICAgICAgICByZXR1cm47
CisgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU3RhcnRUaW1lID0gbW9ub3RvbmljYWxs
eUluY3JlYXNpbmdUaW1lKCkgKyBvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25IaWRlRGVsYXk7
CisgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uRW5kVGltZSA9IG1fb3ZlcmxheVNjcm9s
bGJhckFuaW1hdGlvblN0YXJ0VGltZSArIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1cmF0
aW9uICsgb3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0aW9uSGlkZURlbGF5OworICAgIG1fb3Zlcmxh
eVNjcm9sbGJhckFuaW1hdGlvblRpbWVyLnN0YXJ0T25lU2hvdChvdmVyZmxvd1Njcm9sbGJhcnNB
bmltYXRpb25IaWRlRGVsYXkpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjptb3VzZUVu
dGVyZWRDb250ZW50QXJlYSgpCit7CisgICAgc2hvd092ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisK
K3ZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEoKQoreworICAg
IGhpZGVPdmVybGF5U2Nyb2xsYmFycygpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjpt
b3VzZU1vdmVkSW5Db250ZW50QXJlYSgpCit7CisgICAgc2hvd092ZXJsYXlTY3JvbGxiYXJzKCk7
Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OmNvbnRlbnRBcmVhRGlkU2hvdygpCit7Cisg
ICAgc2hvd092ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6
OmNvbnRlbnRBcmVhRGlkSGlkZSgpCit7CisgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhcnNMb2Nr
ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1l
ci5zdG9wKCk7CisgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQpIHsK
KyAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCA9IDA7CisgICAgICAg
IHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgpOworICAgIH0KK30KKwordm9pZCBTY3Jv
bGxBbmltYXRvckd0azo6bm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUm
KQoreworICAgIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOworfQorCit2b2lkIFNjcm9sbEFuaW1h
dG9yR3RrOjpsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4oYm9vbCBzaG91bGRMb2Nr
U3RhdGUpCit7CisgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhcnNMb2NrZWQgPT0gc2hvdWxkTG9j
a1N0YXRlKQorICAgICAgICByZXR1cm47CisgICAgbV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCA9
IHNob3VsZExvY2tTdGF0ZTsKKworICAgIGlmICghbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJh
ciAmJiAhbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChtX292ZXJsYXlTY3JvbGxiYXJzTG9ja2VkKSB7CisgICAgICAgIG1fb3ZlcmxheVNjcm9s
bGJhckFuaW1hdGlvblRpbWVyLnN0b3AoKTsKKyAgICAgICAgaWYgKG1faG9yaXpvbnRhbE92ZXJs
YXlTY3JvbGxiYXIpCisgICAgICAgICAgICBtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyLT5z
ZXRPcGFjaXR5KDApOworICAgICAgICBpZiAobV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIpCisg
ICAgICAgICAgICBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0eSgwKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVu
dCA9PSAxKQorICAgICAgICAgICAgdXBkYXRlT3ZlcmxheVNjcm9sbGJhcnNPcGFjaXR5KCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOworICAgIH0K
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmFhMzE1MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJp
Z2h0IChjKSAyMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxBbmltYXRvckd0a19oCisjZGVmaW5l
IFNjcm9sbEFuaW1hdG9yR3RrX2gKKworI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisjaW5j
bHVkZSAiVGltZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxBbmlt
YXRpb247CisKK2NsYXNzIFNjcm9sbEFuaW1hdG9yR3RrIGZpbmFsIDogcHVibGljIFNjcm9sbEFu
aW1hdG9yIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBTY3JvbGxBbmltYXRvckd0ayhTY3JvbGxh
YmxlQXJlYSYpOworICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yR3RrKCk7CisKK3ByaXZhdGU6
CisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisgICAgdmlydHVhbCBib29sIHNjcm9sbChT
Y3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0
IG11bHRpcGxpZXIpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxUb09mZnNldFdp
dGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCB3aWxsRW5kTGl2ZVJlc2l6ZSgpIG92ZXJyaWRlOworI2VuZGlmCisKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIHdpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxi
YXIqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZUhvcml6b250YWxTY3Jv
bGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VFbnRl
cmVkQ29udGVudEFyZWEoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VFeGl0ZWRD
b250ZW50QXJlYSgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBtb3VzZU1vdmVkSW5Db250
ZW50QXJlYSgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBjb250ZW50QXJlYURpZFNob3co
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFEaWRIaWRlKCkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxv
YXRTaXplJiBkZWx0YSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGxvY2tPdmVybGF5U2Ny
b2xsYmFyU3RhdGVUb0hpZGRlbihib29sKSBvdmVycmlkZTsKKworICAgIHZvaWQgb3ZlcmxheVNj
cm9sbGJhckFuaW1hdGlvblRpbWVyRmlyZWQoKTsKKyAgICB2b2lkIHNob3dPdmVybGF5U2Nyb2xs
YmFycygpOworICAgIHZvaWQgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7CisgICAgdm9pZCB1cGRh
dGVPdmVybGF5U2Nyb2xsYmFyc09wYWNpdHkoKTsKKworI2lmIEVOQUJMRShTTU9PVEhfU0NST0xM
SU5HKQorICAgIHZvaWQgZW5zdXJlU21vb3RoU2Nyb2xsaW5nQW5pbWF0aW9uKCk7CisKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uPiBtX2FuaW1hdGlvbjsKKyNlbmRpZgorICAg
IFNjcm9sbGJhciogbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhciB7IG51bGxwdHIgfTsKKyAg
ICBTY3JvbGxiYXIqIG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyIHsgbnVsbHB0ciB9OworICAg
IGJvb2wgbV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCB7IGZhbHNlIH07CisgICAgVGltZXIgbV9v
dmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXI7CisgICAgZG91YmxlIG1fb3ZlcmxheVNjcm9s
bGJhckFuaW1hdGlvblNvdXJjZSB7IDAgfTsKKyAgICBkb3VibGUgbV9vdmVybGF5U2Nyb2xsYmFy
QW5pbWF0aW9uVGFyZ2V0IHsgMCB9OworICAgIGRvdWJsZSBtX292ZXJsYXlTY3JvbGxiYXJBbmlt
YXRpb25DdXJyZW50IHsgMCB9OworICAgIGRvdWJsZSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25TdGFydFRpbWUgeyAwIH07CisgICAgZG91YmxlIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlv
bkVuZFRpbWUgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBTY3JvbGxBbmltYXRvckd0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1Njcm9sbGJhclRoZW1lR3RrLmNwcAppbmRleCAzMzY5NzYyLi4xOWZiNTgxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAKQEAgLTU5
LDcgKzU5LDcgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZUd0azo6aGFzVGh1bWIoU2Nyb2xsYmFyJiBz
Y3JvbGxiYXIpCiAjZW5kaWYKIH0KIAotSW50UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6YmFja0J1
dHRvblJlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydCwgYm9vbCkK
K0ludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OmJhY2tCdXR0b25SZWN0KFNjcm9sbGJhciYgc2Ny
b2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wgcGFpbnRpbmcpCiB7CiAjaWZuZGVmIEdU
S19BUElfVkVSU0lPTl8yCiAgICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvbkVuZFBhcnQgJiYgIW1f
aGFzQmFja0J1dHRvbkVuZFBhcnQpCkBAIC02Nyw3ICs2Nyw3IEBAIEludFJlY3QgU2Nyb2xsYmFy
VGhlbWVHdGs6OmJhY2tCdXR0b25SZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBTY3JvbGxiYXJQ
YXJ0IHBhCiAgICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCAmJiAhbV9oYXNCYWNr
QnV0dG9uU3RhcnRQYXJ0KQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgR1JlZlB0
cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4dCA9IGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0
KCk7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4dCA9IGdldE9yQ3Jl
YXRlU3R5bGVDb250ZXh0KCZzY3JvbGxiYXIsIHBhaW50aW5nID8gU3R5bGVDb250ZXh0TW9kZTo6
UGFpbnQgOiBTdHlsZUNvbnRleHRNb2RlOjpMYXlvdXQpOwogICAgIGludCB4ID0gc2Nyb2xsYmFy
LngoKSArIG1fY2FjaGVkUHJvcGVydGllcy50cm91Z2hCb3JkZXJXaWR0aDsKICAgICBpbnQgeSA9
IHNjcm9sbGJhci55KCkgKyBtX2NhY2hlZFByb3BlcnRpZXMudHJvdWdoQm9yZGVyV2lkdGg7CiAg
ICAgSW50U2l6ZSBzaXplID0gYnV0dG9uU2l6ZShzY3JvbGxiYXIpOwpAQCAtODMsMTEgKzgzLDEy
IEBAIEludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OmJhY2tCdXR0b25SZWN0KFNjcm9sbGJhciYg
c2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhCiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzY3Jv
bGxiYXIpOwogICAgIFVOVVNFRF9QQVJBTShwYXJ0KTsKKyAgICBVTlVTRURfUEFSQU0ocGFpbnRp
bmcpOwogICAgIHJldHVybiBJbnRSZWN0KCk7CiAjZW5kaWYKIH0KIAotSW50UmVjdCBTY3JvbGxi
YXJUaGVtZUd0azo6Zm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIFNjcm9s
bGJhclBhcnQgcGFydCwgYm9vbCkKK0ludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OmZvcndhcmRC
dXR0b25SZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wg
cGFpbnRpbmcpCiB7CiAjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCiAgICAgaWYgKHBhcnQgPT0g
Rm9yd2FyZEJ1dHRvblN0YXJ0UGFydCAmJiAhbV9oYXNGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0KQpA
QCAtOTUsNyArOTYsNyBAQCBJbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjpmb3J3YXJkQnV0dG9u
UmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydAogICAgIGlmIChwYXJ0ID09
IEZvcndhcmRCdXR0b25FbmRQYXJ0ICYmICFtX2hhc0ZvcndhcmRCdXR0b25FbmRQYXJ0KQogICAg
ICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHN0
eWxlQ29udGV4dCA9IGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KCk7CisgICAgR1JlZlB0cjxHdGtT
dHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4dCA9IGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KCZzY3Jv
bGxiYXIsIHBhaW50aW5nID8gU3R5bGVDb250ZXh0TW9kZTo6UGFpbnQgOiBTdHlsZUNvbnRleHRN
b2RlOjpMYXlvdXQpOwogICAgIEludFNpemUgc2l6ZSA9IGJ1dHRvblNpemUoc2Nyb2xsYmFyKTsK
ICAgICBpZiAoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikg
ewogICAgICAgICBpbnQgeSA9IHNjcm9sbGJhci55KCkgKyBtX2NhY2hlZFByb3BlcnRpZXMudHJv
dWdoQm9yZGVyV2lkdGg7CkBAIC0xMTYsMTQgKzExNywxNSBAQCBJbnRSZWN0IFNjcm9sbGJhclRo
ZW1lR3RrOjpmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwgU2Nyb2xsYmFy
UGFydAogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2Nyb2xsYmFyKTsKICAgICBVTlVTRURfUEFS
QU0ocGFydCk7CisgICAgVU5VU0VEX1BBUkFNKHBhaW50aW5nKTsKICAgICByZXR1cm4gSW50UmVj
dCgpOwogI2VuZGlmCiB9CiAKLUludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OnRyYWNrUmVjdChT
Y3JvbGxiYXImIHNjcm9sbGJhciwgYm9vbCkKK0ludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OnRy
YWNrUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwgYm9vbCBwYWludGluZykKIHsKICNpZm5kZWYg
R1RLX0FQSV9WRVJTSU9OXzIKLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gc3R5bGVDb250
ZXh0ID0gZ2V0T3JDcmVhdGVTdHlsZUNvbnRleHQoKTsKKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29u
dGV4dD4gc3R5bGVDb250ZXh0ID0gZ2V0T3JDcmVhdGVTdHlsZUNvbnRleHQoJnNjcm9sbGJhciwg
cGFpbnRpbmcgPyBTdHlsZUNvbnRleHRNb2RlOjpQYWludCA6IFN0eWxlQ29udGV4dE1vZGU6Okxh
eW91dCk7CiAgICAgLy8gVGhlIHBhZGRpbmcgYWxvbmcgdGhlIHRodW1iIG1vdmVtZW50IGF4aXMg
aW5jbHVkZXMgdGhlIHRyb3VnaCBib3JkZXIKICAgICAvLyBwbHVzIHRoZSBzaXplIG9mIHN0ZXBw
ZXIgc3BhY2luZyAodGhlIHNwYWNlIGJldHdlZW4gdGhlIHN0ZXBwZXIgYW5kCiAgICAgLy8gdGhl
IHBsYWNlIHdoZXJlIHRoZSB0aHVtYiBzdG9wcykuIFRoZXJlIGlzIG9mdGVuIG5vIHN0ZXBwZXIg
c3BhY2luZy4KQEAgLTE2Miw2ICsxNjQsNyBAQCBJbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjp0
cmFja1JlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGJvb2wpCiAgICAgICAgICAgICAgICAgICAg
dGhpY2tuZXNzLCBzY3JvbGxiYXIuaGVpZ2h0KCkgLSAoMiAqIG1vdmVtZW50QXhpc1BhZGRpbmcp
IC0gYnV0dG9uc1dpZHRoKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGJhcik7Cisg
ICAgVU5VU0VEX1BBUkFNKHBhaW50aW5nKTsKICAgICByZXR1cm4gSW50UmVjdCgpOwogI2VuZGlm
CiB9CkBAIC0xNzUsOCArMTc4LDkgQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBvcmllbnRh
dGlvblN0eWxlQ2xhc3MoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24KIC8vIFRoZSBH
dGtTdHlsZUNvbnRleHQgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBpcyBjYWNoZWQgYnkgU2Ny
b2xsYmFyVGhlbWVHdGs6OnBhaW50IGZvciB0aGUKIC8vIGR1cmF0aW9uIG9mIGl0cyBzY29wZSwg
c28gYSBkaWZmZXJlbnQgR3RrU3R5bGVDb250ZXh0IHdpdGggdXBkYXRlZCB0aGVtZSBwcm9wZXJ0
aWVzIHdpbGwgYmUKIC8vIHVzZWQgZm9yIGVhY2ggY2FsbCB0byBwYWludC4KLUdSZWZQdHI8R3Rr
U3R5bGVDb250ZXh0PiBTY3JvbGxiYXJUaGVtZUd0azo6Z2V0T3JDcmVhdGVTdHlsZUNvbnRleHQo
U2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCitHUmVmUHRyPEd0a1N0eWxlQ29udGV4
dD4gU2Nyb2xsYmFyVGhlbWVHdGs6OmdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KFNjcm9sbGJhciog
c2Nyb2xsYmFyLCBTdHlsZUNvbnRleHRNb2RlIG1vZGUpCiB7CisgICAgQVNTRVJUKHNjcm9sbGJh
ciB8fCBtb2RlID09IFN0eWxlQ29udGV4dE1vZGU6OkxheW91dCk7CiAgICAgaWYgKG1fY2FjaGVk
U3R5bGVDb250ZXh0KQogICAgICAgICByZXR1cm4gbV9jYWNoZWRTdHlsZUNvbnRleHQ7CiAKQEAg
LTE4NSwxMCArMTg5LDE1IEBAIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBTY3JvbGxiYXJUaGVt
ZUd0azo6Z2V0T3JDcmVhdGVTdHlsZUNvbnRleHQoU2Nyb2xsYmFyT3JpCiAgICAgZ3RrX3dpZGdl
dF9wYXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0KCksIEdUS19UWVBFX1NDUk9MTEJBUik7CiAjaWYg
R1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDIpCiAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfc2V0
X29iamVjdF9uYW1lKHBhdGguZ2V0KCksIC0xLCAic2Nyb2xsYmFyIik7CisgICAgaWYgKG1fdXNl
c092ZXJsYXlTY3JvbGxiYXJzKSB7CisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9j
bGFzcyhwYXRoLmdldCgpLCAtMSwgIm92ZXJsYXktaW5kaWNhdG9yIik7CisgICAgICAgIGlmICht
b2RlID09IFN0eWxlQ29udGV4dE1vZGU6OkxheW91dCB8fCBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0
KCkgIT0gTm9QYXJ0KQorICAgICAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNz
KHBhdGguZ2V0KCksIC0xLCAiaG92ZXJpbmciKTsKKyAgICB9CiAjZWxzZQogICAgIGd0a193aWRn
ZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLmdldCgpLCAtMSwgInNjcm9sbGJhciIpOwogI2Vu
ZGlmCi0gICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGguZ2V0KCksIC0xLCBv
cmllbnRhdGlvblN0eWxlQ2xhc3Mob3JpZW50YXRpb24pKTsKKyAgICBndGtfd2lkZ2V0X3BhdGhf
aXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsIG9yaWVudGF0aW9uU3R5bGVDbGFzcyhzY3Jv
bGxiYXIgPyBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgOiBWZXJ0aWNhbFNjcm9sbGJhcikpOwog
ICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9wYXRoKHN0eWxlQ29udGV4dC5nZXQoKSwgcGF0aC5n
ZXQoKSk7CiAKICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoCkBAIC0yMjIsNiArMjMx
LDEzIEBAIHN0YXRpYyBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gY3JlYXRlQ2hpbGRTdHlsZUNv
bnRleHQoR3RrU3R5bGVDb250ZXh0KiBwYXJlbnQsCiAKIFNjcm9sbGJhclRoZW1lR3RrOjpTY3Jv
bGxiYXJUaGVtZUd0aygpCiB7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDIpCisjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQorICAgIG1fdXNlc092ZXJsYXlTY3Jv
bGxiYXJzID0gdHJ1ZTsKKyNlbHNlCisgICAgbV91c2VzT3ZlcmxheVNjcm9sbGJhcnMgPSBnX3N0
cmNtcDAoZ19nZXRlbnYoIkdUS19PVkVSTEFZX1NDUk9MTElORyIpLCAiMCIpOworI2VuZGlmCisj
ZW5kaWYKICAgICB1cGRhdGVUaGVtZVByb3BlcnRpZXMoKTsKIH0KIApAQCAtMjQ1LDcgKzI2MSw3
IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnVwZGF0ZVRoZW1lUHJvcGVydGllcygpCiAKIElu
dFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OnRodW1iUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwg
Y29uc3QgSW50UmVjdCYgdW5jb25zdHJhaW5lZFRyYWNrUmVjdCkKIHsKLSAgICBHUmVmUHRyPEd0
a1N0eWxlQ29udGV4dD4gc3R5bGVDb250ZXh0ID0gZ2V0T3JDcmVhdGVTdHlsZUNvbnRleHQoc2Ny
b2xsYmFyLm9yaWVudGF0aW9uKCkpOworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBzdHls
ZUNvbnRleHQgPSBnZXRPckNyZWF0ZVN0eWxlQ29udGV4dCgmc2Nyb2xsYmFyKTsKICAgICBJbnRS
ZWN0IHRyYWNrUmVjdCA9IGNvbnN0cmFpblRyYWNrUmVjdFRvVHJhY2tQaWVjZXMoc2Nyb2xsYmFy
LCB1bmNvbnN0cmFpbmVkVHJhY2tSZWN0KTsKICAgICBpbnQgdGh1bWJQb3MgPSB0aHVtYlBvc2l0
aW9uKHNjcm9sbGJhcik7CiAgICAgaWYgKHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IEhvcml6
b250YWxTY3JvbGxiYXIpCkBAIC0yNTksMTMgKzI3NSwxMyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RS
ZWN0QWNjb3JkaW5nVG9NYXJnaW4oR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBJbnRSZWN0JiBy
ZWN0KQogewogICAgIEd0a0JvcmRlciBtYXJnaW47CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0
X21hcmdpbihjb250ZXh0LCBndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUoY29udGV4dCksICZt
YXJnaW4pOwotICAgIHJlY3QubW92ZShtYXJnaW4ubGVmdCwgbWFyZ2luLnJpZ2h0KTsKKyAgICBy
ZWN0Lm1vdmUobWFyZ2luLmxlZnQsIG1hcmdpbi50b3ApOwogICAgIHJlY3QuY29udHJhY3QobWFy
Z2luLmxlZnQgKyBtYXJnaW4ucmlnaHQsIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tKTsKIH0K
IAogdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVj
dCkKIHsKLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gcGFyZW50U3R5bGVDb250ZXh0ID0g
Z2V0T3JDcmVhdGVTdHlsZUNvbnRleHQoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkpOworICAgIEdS
ZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBwYXJlbnRTdHlsZUNvbnRleHQgPSBnZXRPckNyZWF0ZVN0
eWxlQ29udGV4dCgmc2Nyb2xsYmFyLCBTdHlsZUNvbnRleHRNb2RlOjpQYWludCk7CiAgICAgLy8g
UGFpbnQgdGhlIHRyYWNrIGJhY2tncm91bmQuIElmIHRoZSB0cm91Z2gtdW5kZXItc3RlcHBlcnMg
cHJvcGVydHkgaXMgdHJ1ZSwgdGhpcwogICAgIC8vIHNob3VsZCBiZSB0aGUgZnVsbCBzaXplIG9m
IHRoZSBzY3JvbGxiYXIsIGJ1dCBpZiBpcyBmYWxzZSwgaXQgc2hvdWxkIG9ubHkgYmUgdGhlCiAg
ICAgLy8gdHJhY2sgcmVjdC4KQEAgLTI4MSwxNCArMjk3LDE0IEBAIHZvaWQgU2Nyb2xsYmFyVGhl
bWVHdGs6OnBhaW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgU2Ny
b2xsYmFyCiAKIHZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50U2Nyb2xsYmFyQmFja2dyb3Vu
ZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFNjcm9sbGJhciYgc2Nyb2xsYmFyKQogewotICAg
IEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBzdHlsZUNvbnRleHQgPSBnZXRPckNyZWF0ZVN0eWxl
Q29udGV4dChzY3JvbGxiYXIub3JpZW50YXRpb24oKSk7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNv
bnRleHQ+IHN0eWxlQ29udGV4dCA9IGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KCZzY3JvbGxiYXIs
IFN0eWxlQ29udGV4dE1vZGU6OlBhaW50KTsKICAgICBndGtfcmVuZGVyX2ZyYW1lKHN0eWxlQ29u
dGV4dC5nZXQoKSwgY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgc2Nyb2xsYmFyLngo
KSwgc2Nyb2xsYmFyLnkoKSwgc2Nyb2xsYmFyLndpZHRoKCksIHNjcm9sbGJhci5oZWlnaHQoKSk7
CiB9CiAKIHZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
ICAgICBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiA9IHNjcm9sbGJhci5vcmllbnRh
dGlvbigpOwotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBwYXJlbnRTdHlsZUNvbnRleHQg
PSBnZXRPckNyZWF0ZVN0eWxlQ29udGV4dChvcmllbnRhdGlvbik7CisgICAgR1JlZlB0cjxHdGtT
dHlsZUNvbnRleHQ+IHBhcmVudFN0eWxlQ29udGV4dCA9IGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0
KCZzY3JvbGxiYXIsIFN0eWxlQ29udGV4dE1vZGU6OlBhaW50KTsKICAgICBHUmVmUHRyPEd0a1N0
eWxlQ29udGV4dD4gdHJvdWdoU3R5bGVDb250ZXh0ID0gY3JlYXRlQ2hpbGRTdHlsZUNvbnRleHQo
cGFyZW50U3R5bGVDb250ZXh0LmdldCgpLCAidHJvdWdoIik7CiAgICAgR1JlZlB0cjxHdGtTdHls
ZUNvbnRleHQ+IHN0eWxlQ29udGV4dCA9IGNyZWF0ZUNoaWxkU3R5bGVDb250ZXh0KHRyb3VnaFN0
eWxlQ29udGV4dC5nZXQoKSwgInNsaWRlciIpOwogCkBAIC0zMDAsNiArMzE2LDE0IEBAIHZvaWQg
U2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBT
Y3JvbGxiYXImIHNjcm9sbGJhCiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKHN0eWxl
Q29udGV4dC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKIAogICAg
IEludFJlY3QgdGh1bWJSZWN0KHJlY3QpOworICAgIGlmIChtX3VzZXNPdmVybGF5U2Nyb2xsYmFy
cyAmJiBzY3JvbGxiYXIuaG92ZXJlZFBhcnQoKSA9PSBOb1BhcnQpIHsKKyAgICAgICAgLy8gV2hl
biB1c2luZyBvdmVybGF5IHNjcm9sbGJhcnMgd2UgYWx3YXlzIGNsYWltIHRoZSBzaXplIG9mIHRo
ZSBzY3JvbGxiYXIgd2hlbiBob3ZlcmVkLCBzbyB3aGVuCisgICAgICAgIC8vIGRyYXdpbmcgdGhl
IGluZGljYXRvciB3ZSBuZWVkIHRvIGFkanVzdCB0aGUgcmVjdGFuZ2xlIHRvIGl0cyBhY3R1YWwg
c2l6ZSBpbiBpbmRpY2F0b3IgbW9kZS4KKyAgICAgICAgaWYgKG9yaWVudGF0aW9uID09IFZlcnRp
Y2FsU2Nyb2xsYmFyKQorICAgICAgICAgICAgdGh1bWJSZWN0Lm1vdmUoc2Nyb2xsYmFyLndpZHRo
KCkgLSBtX2NhY2hlZFByb3BlcnRpZXMudGh1bWJGYXRuZXNzLCAwKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgdGh1bWJSZWN0Lm1vdmUoMCwgc2Nyb2xsYmFyLmhlaWdodCgpIC0gbV9jYWNo
ZWRQcm9wZXJ0aWVzLnRodW1iRmF0bmVzcyk7CisgICAgfQogICAgIGFkanVzdFJlY3RBY2NvcmRp
bmdUb01hcmdpbihzdHlsZUNvbnRleHQuZ2V0KCksIHRodW1iUmVjdCk7CiAgICAgZ3RrX3JlbmRl
cl9zbGlkZXIoc3R5bGVDb250ZXh0LmdldCgpLCBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5j
cigpLCB0aHVtYlJlY3QueCgpLCB0aHVtYlJlY3QueSgpLCB0aHVtYlJlY3Qud2lkdGgoKSwgdGh1
bWJSZWN0LmhlaWdodCgpLAogICAgICAgICBvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJh
ciA/IEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCA6IEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFM
KTsKQEAgLTMwOCw3ICszMzIsNyBAQCB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFRodW1i
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgU2Nyb2xsYmFyJiBzY3JvbGxiYQogdm9pZCBTY3Jv
bGxiYXJUaGVtZUd0azo6cGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBTY3Jv
bGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0
KQogewogICAgIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gc2Nyb2xsYmFyLm9y
aWVudGF0aW9uKCk7Ci0gICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHBhcmVudFN0eWxlQ29u
dGV4dCA9IGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KG9yaWVudGF0aW9uKTsKKyAgICBHUmVmUHRy
PEd0a1N0eWxlQ29udGV4dD4gcGFyZW50U3R5bGVDb250ZXh0ID0gZ2V0T3JDcmVhdGVTdHlsZUNv
bnRleHQoJnNjcm9sbGJhciwgU3R5bGVDb250ZXh0TW9kZTo6UGFpbnQpOwogICAgIEdSZWZQdHI8
R3RrU3R5bGVDb250ZXh0PiBzdHlsZUNvbnRleHQgPSBjcmVhdGVDaGlsZFN0eWxlQ29udGV4dChw
YXJlbnRTdHlsZUNvbnRleHQuZ2V0KCksICJidXR0b24iKTsKIAogICAgIHVuc2lnbmVkIGZsYWdz
ID0gMDsKQEAgLTM1NSw4ICszNzksMTIgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnQo
U2Nyb2xsYmFyJiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb24KICAgICBp
ZiAoZ3JhcGhpY3NDb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCisgICAgZG91YmxlIG9wYWNpdHkgPSBzY3JvbGxiYXIuaG92ZXJlZFBhcnQoKSA9PSBO
b1BhcnQgPyBzY3JvbGxiYXIub3BhY2l0eSgpIDogMTsKKyAgICBpZiAoIW9wYWNpdHkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCiAgICAgLy8gQ2FjaGUgYSBuZXcgR3RrU3R5bGVDb250ZXh0IGZv
ciB0aGUgZHVyYXRpb24gb2YgdGhpcyBzY29wZS4KLSAgICBUZW1wb3JhcnlDaGFuZ2U8R1JlZlB0
cjxHdGtTdHlsZUNvbnRleHQ+PiB0ZW1wU3R5bGVDb250ZXh0KG1fY2FjaGVkU3R5bGVDb250ZXh0
LCBnZXRPckNyZWF0ZVN0eWxlQ29udGV4dChzY3JvbGxiYXIub3JpZW50YXRpb24oKSkpOworICAg
IFRlbXBvcmFyeUNoYW5nZTxHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4+IHRlbXBTdHlsZUNvbnRl
eHQobV9jYWNoZWRTdHlsZUNvbnRleHQsIGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KCZzY3JvbGxi
YXIsIFN0eWxlQ29udGV4dE1vZGU6OlBhaW50KSk7CiAKICAgICAvLyBDcmVhdGUgdGhlIFNjcm9s
bGJhckNvbnRyb2xQYXJ0TWFzayBiYXNlZCBvbiB0aGUgZGFtYWdlUmVjdAogICAgIFNjcm9sbGJh
ckNvbnRyb2xQYXJ0TWFzayBzY3JvbGxNYXNrID0gTm9QYXJ0OwpAQCAtMzk5LDYgKzQyNywzMSBA
QCBib29sIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludChTY3JvbGxiYXImIHNjcm9sbGJhciwgR3Jh
cGhpY3NDb250ZXh0JiBncmFwaGljc0NvbgogICAgICAgICAgICAgc2Nyb2xsTWFzayB8PSBUaHVt
YlBhcnQ7CiAgICAgfQogCisgICAgaWYgKG1fdXNlc092ZXJsYXlTY3JvbGxiYXJzKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBjaGVjayBvbmNlIDMuMjAgaXMgcmVsZWFzZWQuCisj
aWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDgpCisgICAgICAgIHVuc2lnbmVkIGZsYWdzID0g
MDsKKyAgICAgICAgaWYgKHNjcm9sbGJhci5ob3ZlcmVkUGFydCgpICE9IE5vUGFydCkKKyAgICAg
ICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1BSRUxJR0hUOworICAgICAgICBpZiAoc2Ny
b2xsYmFyLnByZXNzZWRQYXJ0KCkgIT0gTm9QYXJ0KQorICAgICAgICAgICAgZmxhZ3MgfD0gR1RL
X1NUQVRFX0ZMQUdfQUNUSVZFOworICAgICAgICBkb3VibGUgc3R5bGVPcGFjaXR5OworICAgICAg
ICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUobV9jYWNoZWRTdHlsZUNvbnRleHQuZ2V0KCks
IHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7CisgICAgICAgIGd0a19zdHlsZV9j
b250ZXh0X2dldChtX2NhY2hlZFN0eWxlQ29udGV4dC5nZXQoKSwgZ3RrX3N0eWxlX2NvbnRleHRf
Z2V0X3N0YXRlKG1fY2FjaGVkU3R5bGVDb250ZXh0LmdldCgpKSwgIm9wYWNpdHkiLCAmc3R5bGVP
cGFjaXR5LCBudWxscHRyKTsKKyAgICAgICAgb3BhY2l0eSAqPSBzdHlsZU9wYWNpdHk7CisjZWxz
ZQorICAgICAgICBvcGFjaXR5ICo9IHNjcm9sbGJhci5ob3ZlcmVkUGFydCgpID09IE5vUGFydCA/
IDAuNCA6IDAuNzsKKyNlbmRpZgorICAgIH0KKyAgICBpZiAoIW9wYWNpdHkpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgaWYgKG9wYWNpdHkgIT0gMSkgeworICAgICAgICBncmFwaGljc0Nv
bnRleHQuc2F2ZSgpOworICAgICAgICBncmFwaGljc0NvbnRleHQuY2xpcChkYW1hZ2VSZWN0KTsK
KyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7
CisgICAgfQorCiAgICAgU2Nyb2xsYmFyQ29udHJvbFBhcnRNYXNrIGFsbEJ1dHRvbnMgPSBCYWNr
QnV0dG9uU3RhcnRQYXJ0IHwgQmFja0J1dHRvbkVuZFBhcnQgfCBGb3J3YXJkQnV0dG9uU3RhcnRQ
YXJ0IHwgRm9yd2FyZEJ1dHRvbkVuZFBhcnQ7CiAgICAgaWYgKHNjcm9sbE1hc2sgJiBUcmFja0JH
UGFydCB8fCBzY3JvbGxNYXNrICYgVGh1bWJQYXJ0IHx8IHNjcm9sbE1hc2sgJiBhbGxCdXR0b25z
KQogICAgICAgICBwYWludFNjcm9sbGJhckJhY2tncm91bmQoZ3JhcGhpY3NDb250ZXh0LCBzY3Jv
bGxiYXIpOwpAQCAtNDE4LDYgKzQ3MSwxMSBAQCBib29sIFNjcm9sbGJhclRoZW1lR3RrOjpwYWlu
dChTY3JvbGxiYXImIHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbgogICAg
IGlmIChzY3JvbGxNYXNrICYgVGh1bWJQYXJ0KQogICAgICAgICBwYWludFRodW1iKGdyYXBoaWNz
Q29udGV4dCwgc2Nyb2xsYmFyLCBjdXJyZW50VGh1bWJSZWN0KTsKIAorICAgIGlmIChvcGFjaXR5
ICE9IDEpIHsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7
CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5yZXN0b3JlKCk7CisgICAgfQorCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTQzNCw3ICs0OTIsNyBAQCBpbnQgU2Nyb2xsYmFyVGhlbWVHdGs6OnNj
cm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSkKIAogSW50U2l6ZSBTY3JvbGxi
YXJUaGVtZUd0azo6YnV0dG9uU2l6ZShTY3JvbGxiYXImIHNjcm9sbGJhcikKIHsKLSAgICBHUmVm
UHRyPEd0a1N0eWxlQ29udGV4dD4gc3R5bGVDb250ZXh0ID0gZ2V0T3JDcmVhdGVTdHlsZUNvbnRl
eHQoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkpOworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0
PiBzdHlsZUNvbnRleHQgPSBnZXRPckNyZWF0ZVN0eWxlQ29udGV4dCgmc2Nyb2xsYmFyKTsKICAg
ICBpZiAoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCiAgICAg
ICAgIHJldHVybiBJbnRTaXplKG1fY2FjaGVkUHJvcGVydGllcy50aHVtYkZhdG5lc3MsIG1fY2Fj
aGVkUHJvcGVydGllcy5zdGVwcGVyU2l6ZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmgKaW5kZXggMWJjNWMwNC4uOGI3YjY0YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmgKQEAgLTYx
LDEwICs2MSwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBkb3VibGUgaW5pdGlhbEF1dG9zY3Jv
bGxUaW1lckRlbGF5KCkgb3ZlcnJpZGUgeyByZXR1cm4gMC4yMDsgfQogICAgIHZpcnR1YWwgZG91
YmxlIGF1dG9zY3JvbGxUaW1lckRlbGF5KCkgb3ZlcnJpZGUgeyByZXR1cm4gMC4wMjsgfQogICAg
IHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5nZWQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wg
dXNlc092ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV91c2VzT3Zl
cmxheVNjcm9sbGJhcnM7IH0KKyAgICAvLyBXaGVuIHVzaW5nIG92ZXJsYXkgc2Nyb2xsYmFycywg
YWx3YXlzIGludmFsaWRhdGUgdGhlIHdob2xlIHNjcm9sbGJhciB3aGVuIGVudGVyaW5nL2xlYXZp
bmcuCisgICAgdmlydHVhbCBib29sIGludmFsaWRhdGVPbk1vdXNlRW50ZXJFeGl0KCkgb3ZlcnJp
ZGUgeyByZXR1cm4gbV91c2VzT3ZlcmxheVNjcm9sbGJhcnM7IH0KIAogcHJpdmF0ZToKICAgICB2
b2lkIHVwZGF0ZVRoZW1lUHJvcGVydGllcygpOwotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0
PiBnZXRPckNyZWF0ZVN0eWxlQ29udGV4dChTY3JvbGxiYXJPcmllbnRhdGlvbiA9IFZlcnRpY2Fs
U2Nyb2xsYmFyKTsKKyAgICBlbnVtIGNsYXNzIFN0eWxlQ29udGV4dE1vZGUgeyBMYXlvdXQsIFBh
aW50IH07CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGdldE9yQ3JlYXRlU3R5bGVDb250
ZXh0KFNjcm9sbGJhciogPSBudWxscHRyLCBTdHlsZUNvbnRleHRNb2RlID0gU3R5bGVDb250ZXh0
TW9kZTo6TGF5b3V0KTsKIAogICAgIEludFNpemUgYnV0dG9uU2l6ZShTY3JvbGxiYXImKTsKIApA
QCAtODMsNiArODcsNyBAQCBwcml2YXRlOgogICAgIGdib29sZWFuIG1faGFzRm9yd2FyZEJ1dHRv
bkVuZFBhcnQ7CiAgICAgZ2Jvb2xlYW4gbV9oYXNCYWNrQnV0dG9uU3RhcnRQYXJ0OwogICAgIGdi
b29sZWFuIG1faGFzQmFja0J1dHRvbkVuZFBhcnQ7CisgICAgYm9vbCBtX3VzZXNPdmVybGF5U2Ny
b2xsYmFycyB7IGZhbHNlIH07CiAjZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgKaW5kZXgg
NWUzZWFjOC4uNzk0YjE3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1Njcm9sbEFuaW1hdG9yTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Nj
cm9sbEFuaW1hdG9yTWFjLmgKQEAgLTk1LDE3ICs5NSwxNyBAQCBwcml2YXRlOgogICAgIAogICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlQb3NpdGlvbkNoYW5nZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0
YSkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlRXhpdGVkQ29udGVudEFyZWEo
KSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VNb3ZlZEluQ29udGVudEFy
ZWEoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VFbnRlcmVkQ29udGVu
dEFyZWEoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VFeGl0ZWRDb250ZW50QXJl
YSgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBtb3VzZU1vdmVkSW5Db250ZW50QXJlYSgp
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBtb3VzZUVudGVyZWRTY3JvbGxiYXIoU2Nyb2xs
YmFyKikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIG1vdXNlRXhpdGVkU2Nyb2xs
YmFyKFNjcm9sbGJhciopIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBtb3VzZUlz
RG93bkluU2Nyb2xsYmFyKFNjcm9sbGJhciosIGJvb2wpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgdm9pZCB3aWxsU3RhcnRMaXZlUmVzaXplKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2
b2lkIGNvbnRlbnRzUmVzaXplZCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB3
aWxsRW5kTGl2ZVJlc2l6ZSgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjb250ZW50QXJl
YURpZFNob3coKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFE
aWRIaWRlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhRGlk
U2hvdygpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBjb250ZW50QXJlYURpZEhpZGUoKSBv
dmVycmlkZTsKICAgICB2b2lkIGRpZEJlZ2luU2Nyb2xsR2VzdHVyZSgpIGNvbnN0OwogICAgIHZv
aWQgZGlkRW5kU2Nyb2xsR2VzdHVyZSgpIGNvbnN0OwogICAgIHZvaWQgbWF5QmVnaW5TY3JvbGxH
ZXN0dXJlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
U2Nyb2xsQW5pbWF0b3JNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xs
QW5pbWF0b3JNYWMubW0KaW5kZXggZjI3NDcxNy4uMzEyODgxYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQpAQCAtODA2LDcgKzgwNiw3
IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3QK
ICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciBjb250ZW50QXJlYVdpbGxEcmF3XTsK
IH0KIAotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSBj
b25zdAordm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKQog
ewogICAgIGlmIChbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciBvdmVybGF5U2Nyb2xsZXJT
dGF0ZUlzTG9ja2VkXSkKICAgICAgICAgcmV0dXJuOwpAQCAtODE0LDcgKzgxNCw3IEBAIHZvaWQg
U2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgY29uc3QKICAgICBb
bV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciBtb3VzZUVudGVyZWRDb250ZW50QXJlYV07CiB9
CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEoKSBjb25z
dAordm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpCiB7CiAg
ICAgaWYgKFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIG92ZXJsYXlTY3JvbGxlclN0YXRl
SXNMb2NrZWRdKQogICAgICAgICByZXR1cm47CkBAIC04MjIsNyArODIyLDcgQEAgdm9pZCBTY3Jv
bGxBbmltYXRvck1hYzo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpIGNvbnN0CiAgICAgW21fc2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgbW91c2VFeGl0ZWRDb250ZW50QXJlYV07CiB9CiAKLXZv
aWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkgY29uc3QKK3Zv
aWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkKIHsKICAgICBp
ZiAoW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xv
Y2tlZF0pCiAgICAgICAgIHJldHVybjsKQEAgLTg5OCw3ICs4OTgsNyBAQCB2b2lkIFNjcm9sbEFu
aW1hdG9yTWFjOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCiAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXIgZW5kTGl2ZVJlc2l6ZV07CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmNv
bnRlbnRBcmVhRGlkU2hvdygpIGNvbnN0Cit2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50
QXJlYURpZFNob3coKQogewogICAgIGlmIChbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciBv
dmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9ja2VkXSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTA2LDcg
KzkwNiw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRlbnRBcmVhRGlkU2hvdygpIGNv
bnN0CiAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgd2luZG93T3JkZXJlZEluXTsK
IH0KIAotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRIaWRlKCkgY29uc3QK
K3ZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRlbnRBcmVhRGlkSGlkZSgpCiB7CiAgICAgaWYg
KFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIG92ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2Nr
ZWRdKQogICAgICAgICByZXR1cm47Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269994</attachid>
            <date>2016-01-27 02:38:22 -0800</date>
            <delta_ts>2016-01-27 12:48:47 -0800</delta_ts>
            <desc>Rebased patch</desc>
            <filename>wcore-gtk-overlay-scrollbars.diff</filename>
            <type>text/plain</type>
            <size>42429</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyNmQ2ODFjLi4wNGQxZWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTE2
IEBACisyMDE2LTAxLTI2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KKworICAgICAgICBbR1RLXSBJbXBsZW1lbnQgb3ZlcmxheSBzY3JvbGxiYXJzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTM0MDUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3Ig
b3ZlcmxheSBzY3JvbGxiYXJzIHRvIEdUSysgcGxhdGZvcm0gZm9sbG93aW5nIHRoZQorICAgICAg
ICBzYW1lIHN0eWxlIGFuZCBiZWhhdmlvciB0aGFuIEd0a1Njcm9sbGVkV2luZG93LiBUaGV5IGFy
ZSBvbmx5CisgICAgICAgIGF2YWlsYWJsZSBmb3IgR1RLKyA+PSAzLjE5LCBidXQgaG9ub3Jpbmcg
dGhlIEdUS19PVkVSTEFZX1NDUk9MTElORworICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSwg
c28gdGhleSBjb3VsZCBiZSBkaXNhYmxlIGF0IHJ1biB0aW1lLCBleGNlcHQKKyAgICAgICAgd2hl
biB0aHJlYWRlZCBjb21wb3NpdG9yIGlzIGVuYWJsZWQuIEEgbmV3IFNjcm9sbEFuaW1hdG9yIGNs
YXNzCisgICAgICAgIGhhcyBiZWVuIGFkZGVkIGZvciBHVEsrIHRvIGltcGxlbWVudCBvdmVybGF5
IHNjcm9sbGJhcnMgYW5kIHN0aWxsCisgICAgICAgIGFsbG93IHNtb290aCBzY3JvbGxpbmcgd2hl
biBhdmFpbGFibGUuCisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZTogQWRkIFNjcm9sbEFu
aW1hdG9yR3RrIGFuZCBzdG9wIGJ1aWxkaW5nIFNjcm9sbEFuaW1hdG9yU21vb3RoLgorICAgICAg
ICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvcjo6U2Nyb2xsQW5pbWF0b3I6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKToKKyAgICAg
ICAgUmVtb3ZlIGNvbnN0IHRvIGFsbG93IHRoZSBTY3JvbGxBbmltYXRvciB0byBiZSB1cGRhdGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OlNjcm9sbEFuaW1hdG9yOjptb3Vz
ZUV4aXRlZENvbnRlbnRBcmVhKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvcjo6U2Nyb2xsQW5pbWF0b3I6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6U2Nyb2xsQW5pbWF0b3I6OmNvbnRlbnRB
cmVhRGlkU2hvdyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OlNj
cm9sbEFuaW1hdG9yOjpjb250ZW50QXJlYURpZEhpZGUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxiYXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6b3BhY2l0eSk6
IEdldCBzY3JvbGxiYXIgb3BhY2l0eS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c2V0
T3BhY2l0eSk6IFNldCBzY3JvbGxiYXIgb3BhY2l0eS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsv
U2Nyb2xsQW5pbWF0b3JHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yOjpjcmVhdGUpOiBDcmVhdGUgYSBTY3JvbGxBbmltYXRvckd0ay4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjpTY3JvbGxBbmltYXRvckd0ayk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6flNjcm9sbEFuaW1hdG9yR3RrKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjplbnN1cmVTbW9vdGhTY3JvbGxpbmdBbmltYXRp
b24pOgorICAgICAgICBJbml0aWFsaXplIHRoZSBTY3JvbGxBbmltYXRpb25TbW9vdGggaWYgaXQg
ZG9lc24ndCBleGlzdC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjpzY3Jv
bGwpOiBFbnN1cmUgd2UgaGF2ZSBhCisgICAgICAgIFNjcm9sbEFuaW1hdGlvblNtb290aCBpZiBz
bW9vdGggc2Nyb2xsaW5nIGlzIGVuYWJsZWQuIFRoaXMgYWxzbworICAgICAgICBmaXhlcyB0aGUg
cHJvYmxlbSBvZiBoYXZpbmcgdG8gcmVsb2FkIHRoZSBwYWdlIGFmdGVyIGNoYW5naW5nIHRoZQor
ICAgICAgICBzbW9vdGggc2Nyb2xsaW5nIHNldHRpbmcuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvckd0azo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjp3aWxsRW5kTGl2ZVJlc2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIpOiBS
ZWdpc3RlcgorICAgICAgICB0aGUgc2Nyb2xsYmFyIGlmIGl0J3MgYW4gb3ZlcmxheSBzY3JvbGxi
YXIgYW5kIG1ha2UgaXQgdmlzaWJsZQorICAgICAgICB3aXRob3V0IGFuaW1hdGluZyBpdC4gU3Rh
cnQgdGhlIGhpZGUgYW5pbWF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JH
dGs6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yR3RrOjp3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAg
ICBVbnJlZ2lzdGVyIHRoZSBzY3JvbGxiYXIgaWYgaXQgd2FzIHJlZ2lzdGVyZWQgYW5kIHJlc3J0
IHRoZQorICAgICAgICBhbmltYXRpb24gc3RhdGUgaWYgaXQgd2FzIHRoZSBvbmx5IHNjcm9sbGJh
ci4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjp3aWxsUmVtb3ZlSG9yaXpv
bnRhbFNjcm9sbGJhcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JH
dGs6OnVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSk6IFVwZGF0ZQorICAgICAgICB0aGUg
c2Nyb2xsYmFycyBvcGFjaXR5IGFuZCBpbnZhbGlkYXRlIHRoZSBpbmRpY2F0b3IuCisgICAgICAg
IChXZWJDb3JlOjplYXNlT3V0Q3ViaWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JHdGs6Om92ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgVXBk
YXRlIHRoZSBzY3JvbGxiYXJzIG9wYWNpdHkgYW5kIHNjaGVkdWxlIGEgbmV4dCBmcmFtZSBpZiB0
aGUKKyAgICAgICAgYW5pbWF0aW9uIGRpZG4ndCBmaW5pc2ggb3Igc3RhcnQgdGhlIGhpZGUgYW5p
bWF0aW9uIG90aGVyd2hpc2UuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6
c2hvd092ZXJsYXlTY3JvbGxiYXJzKTogU3RhcnQgdGhlCisgICAgICAgIGZhZGUgYW5pbWF0aW9u
IHRvIHNob3cgdGhlIHNjcm9sbGJhcnMgaWYgbmVlZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JHdGs6OmhpZGVPdmVybGF5U2Nyb2xsYmFycyk6IFN0YXJ0IHRoZQorICAgICAg
ICBkYWZlIGFuaW1hdGlvbiB0byBoaWRlIHRoZSBzY3JvbGxiYXJzIGlmIG5lZWRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjptb3VzZUVudGVyZWRDb250ZW50QXJlYSk6
IENhbGwKKyAgICAgICAgc2hvd092ZXJsYXlTY3JvbGxiYXJzKCkuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvckd0azo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSk6IENhbGwKKyAgICAg
ICAgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCkuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvckd0azo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEpOiBDYWxsCisgICAgICAgIHNob3dPdmVy
bGF5U2Nyb2xsYmFycygpLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHdGs6OmNv
bnRlbnRBcmVhRGlkU2hvdyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JHdGs6OmNvbnRlbnRBcmVhRGlkSGlkZSk6IEhpZGUgdGhlCisgICAgICAgIHNjcm9sbGJhcnMg
d2l0aG91dCBhbmltYXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHdGs6
Om5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQpOiBDYWxsCisgICAgICAgIHNob3dPdmVybGF5U2Ny
b2xsYmFycygpLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHdGs6OmxvY2tPdmVy
bGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbik6CisgICAgICAgIFVwZGF0ZSB0aGUgbG9jayBzdGF0
ZSBhbmQgaGlkZSBvciBzaG93IHRoZSBzY3JvbGxiYXJzIHdoZW4gbG9ja2VkCisgICAgICAgIG9y
IHVubG9ja2VkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5oOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OmJhY2tCdXR0b25SZWN0KTogUGFzcwor
ICAgICAgICBTdHlsZUNvbnRleHRNb2RlIHRvIGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0IGRlcGVu
ZGluZyBvbiB0aGUKKyAgICAgICAgcGFpbnRpbmcgcGFyYW1ldGVyLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OmZvcndhcmRCdXR0b25SZWN0KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6dHJhY2tSZWN0KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6Z2V0T3JDcmVhdGVTdHlsZUNvbnRleHQpOiBB
ZGQKKyAgICAgICAgU3R5bGVDb250ZXh0TW9kZSBwYXJhbWV0ZXIgdG8gYWRkIHRoZSBob3Zlcmlu
ZyBjbGFzcworICAgICAgICB1bmNvbmRpdGlvbmFsbHkgd2hlbiB1c2luZyBvdmVybGF5IHNjcm9s
bGJhcnMgaW4gbGF5b3V0IG1vZGUuIEluCisgICAgICAgIHBhaW50IG1vZGUgd2UgYWRkIHRoZSBo
b3ZlcmluZyBjbGFzIG9ubHkgd2hlbiB0aGUgc2Nyb2xsYmFyIGlzCisgICAgICAgIGhvdmVyZWQu
IFRoaXMgd2F5IHdlIGFsd2F5cyBjbGFpbSB0aGUgc2l6ZSBvZiB0aGUgc2Nyb2xsYmFyIHdoZW4K
KyAgICAgICAgaG92ZXJlZCB0byBiZSBhYmxlIHRvIHNob3cgdGhlIGZ1bGwgc2Nyb2xsYmFyIHdo
ZW4gdGhlIG1vdXNlIGlzCisgICAgICAgIGNsb3NlIGVub3VnaCB0byB0aGUgaW5kaWNhdG9yLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OlNjcm9sbGJhclRoZW1lR3RrKTog
SW5pdGlhbGl6ZQorICAgICAgICBtX3VzZXNPdmVybGF5U2Nyb2xsYmFycy4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjp0aHVtYlJlY3QpOiBQYXNzIHRoZSBzY3JvbGxiYXIg
dG8KKyAgICAgICAgZ2V0T3JDcmVhdGVTdHlsZUNvbnRleHQoKS4KKyAgICAgICAgKFdlYkNvcmU6
OmFkanVzdFJlY3RBY2NvcmRpbmdUb01hcmdpbik6IEZpeCB0aGUgdG9wIG1hcmdpbi4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpwYWludFRyYWNrQmFja2dyb3VuZCk6IFBh
c3MgdGhlCisgICAgICAgIHNjcm9sbGJhciBhbmQgcGFpbnQgbW9kZSB0byBnZXRPckNyZWF0ZVN0
eWxlQ29udGV4dCgpLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50
U2Nyb2xsYmFyQmFja2dyb3VuZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
VGhlbWVHdGs6OnBhaW50VGh1bWIpOiBBZGp1c3QgdGhlIHRodW1iCisgICAgICAgIHJlY3Rhbmds
ZSB3aGVuIG92ZXJsYXkgc2Nyb2xsYmFyIGlzIG5vdCBob3ZlcmVkIHRvIGl0cyBjdXJyZW50Cisg
ICAgICAgIHNpemUsIHNpbmNlIHdlIGFsd2F5cyBjbGFpbSB0aGUgc2l6ZSBvZiB0aGUgc2Nyb2xs
YmFyIGluIGhvdmVyZWQKKyAgICAgICAgbW9kZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJh
clRoZW1lR3RrOjpwYWludEJ1dHRvbik6IFBhc3MgdGhlIHNjcm9sbGJhciBhbmQKKyAgICAgICAg
cGFpbnQgbW9kZSB0byBnZXRPckNyZWF0ZVN0eWxlQ29udGV4dCgpLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50KTogVGFrZSB0aGUgc2Nyb2xsYmFyIG9wYWNpdHkK
KyAgICAgICAgaW50byBhY2NvdW50IHdoZW4gcmVuZGVyaW5nIG92ZXJsYXkgc2Nyb2xsYmFycyBh
cyBpbmRpY2F0b3JzLiBBbHNvCisgICAgICAgIGdldCB0aGUgc2Nyb2xsYmFyIG9wYWNpdHkgZnJv
bSB0aGUgR1RLKyB0aGVtZSBhbmQgdXNlIGEKKyAgICAgICAgdHJhbnNwYXJlbmN5IGdyb3VwIHdo
ZW4gdGhlIGdsb2JhbCBvcGFjaXR5IGlzIG5vdCBmdWxsIG9wYXF1ZS4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhclRoZW1lR3RrOjpidXR0b25TaXplKTogUGFzcyB0aGUgc2Nyb2xsYmFyIHRv
CisgICAgICAgIGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KCkuCisgICAgICAgICogcGxhdGZvcm0v
Z3RrL1Njcm9sbGJhclRoZW1lR3RrLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFu
aW1hdG9yTWFjLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRW50ZXJlZENvbnRl
bnRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZUV4aXRl
ZENvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjptb3Vz
ZU1vdmVkSW5Db250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1h
Yzo6Y29udGVudEFyZWFEaWRTaG93KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
TWFjOjpjb250ZW50QXJlYURpZEhpZGUpOgorCiAyMDE2LTAxLTI3ICBDYXJsb3MgR2FyY2lhIENh
bXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtFRkxdIFJlbmFtZSBT
Y3JvbGxBbmltYXRpb25Ob25lIGFzIFNjcm9sbEFuaW1hdGlvblNtb290aApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUdUSy5jbWFrZQppbmRleCA0ZjQ3MTFmLi4zNGNjZDUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5j
bWFrZQpAQCAtMTYzLDYgKzE2Myw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAg
IHBsYXRmb3JtL2d0ay9MYW5ndWFnZUd0ay5jcHAKICAgICBwbGF0Zm9ybS9ndGsvTG9nZ2luZ0d0
ay5jcHAKICAgICBwbGF0Zm9ybS9ndGsvTUlNRVR5cGVSZWdpc3RyeUd0ay5jcHAKKyAgICBwbGF0
Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL1NoYXJlZEJ1
ZmZlckd0ay5jcHAKICAgICBwbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAogICAg
IHBsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3BwCkBAIC05MzYsNyArOTM3LDYgQEAgc2V0KEdP
YmplY3RET01CaW5kaW5nc19HSVJfSEVBREVSUyAke0dPYmplY3RET01CaW5kaW5nc19HSVJfSEVB
REVSU30gUEFSRU5UX1NDT1AKIGlmIChFTkFCTEVfU01PT1RIX1NDUk9MTElORykKICAgICBsaXN0
KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICAgICAgcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9u
U21vb3RoLmNwcAotICAgICAgICBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvclNtb290aC5jcHAKICAg
ICApCiBlbmRpZiAoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaApp
bmRleCBlNjI2YjkwLi5kZDBmM2E0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yLmgKQEAgLTkxLDE3ICs5MSwxNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNl
cnZpY2VTY3JvbGxBbmltYXRpb25zKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFy
ZWFXaWxsUGFpbnQoKSBjb25zdCB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VFbnRlcmVkQ29u
dGVudEFyZWEoKSBjb25zdCB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VFeGl0ZWRDb250ZW50
QXJlYSgpIGNvbnN0IHsgfQotICAgIHZpcnR1YWwgdm9pZCBtb3VzZU1vdmVkSW5Db250ZW50QXJl
YSgpIGNvbnN0IHsgfQorICAgIHZpcnR1YWwgdm9pZCBtb3VzZUVudGVyZWRDb250ZW50QXJlYSgp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBtb3VzZUV4aXRlZENvbnRlbnRBcmVhKCkgeyB9CisgICAg
dmlydHVhbCB2b2lkIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkgeyB9CiAgICAgdmlydHVhbCB2
b2lkIG1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxiYXIqKSBjb25zdCB7IH0KICAgICB2aXJ0
dWFsIHZvaWQgbW91c2VFeGl0ZWRTY3JvbGxiYXIoU2Nyb2xsYmFyKikgY29uc3QgeyB9CiAgICAg
dmlydHVhbCB2b2lkIG1vdXNlSXNEb3duSW5TY3JvbGxiYXIoU2Nyb2xsYmFyKiwgYm9vbCkgY29u
c3QgeyB9CiAgICAgdmlydHVhbCB2b2lkIHdpbGxTdGFydExpdmVSZXNpemUoKSB7IH0KICAgICB2
aXJ0dWFsIHZvaWQgY29udGVudHNSZXNpemVkKCkgY29uc3QgeyB9CiAgICAgdmlydHVhbCB2b2lk
IHdpbGxFbmRMaXZlUmVzaXplKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhRGlk
U2hvdygpIGNvbnN0IHsgfQotICAgIHZpcnR1YWwgdm9pZCBjb250ZW50QXJlYURpZEhpZGUoKSBj
b25zdCB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFEaWRTaG93KCkgeyB9CisgICAg
dmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhRGlkSGlkZSgpIHsgfQogCiAgICAgdmlydHVhbCB2b2lk
IGxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihib29sKSB7IH0KICAgICB2aXJ0dWFs
IGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAppbmRleCA4MjQyNTEwLi4yNDkxYjljIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaApAQCAtMTMwLDYgKzEzMCw5IEBAIHB1YmxpYzoKICAg
ICBib29sIGlzQWxwaGFMb2NrZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQWxwaGFMb2NrZWQ7IH0K
ICAgICB2b2lkIHNldElzQWxwaGFMb2NrZWQoYm9vbCBmbGFnKSB7IG1faXNBbHBoYUxvY2tlZCA9
IGZsYWc7IH0KIAorICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7
IH0KKyAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX29wYWNpdHkgPSBvcGFj
aXR5OyB9CisKICAgICBib29sIHN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlUaHJlYWQoKSBjb25z
dDsKIAogICAgIFdlYWtQdHI8U2Nyb2xsYmFyPiBjcmVhdGVXZWFrUHRyKCkgeyByZXR1cm4gbV93
ZWFrUHRyRmFjdG9yeS5jcmVhdGVXZWFrUHRyKCk7IH0KQEAgLTE3OCw2ICsxODEsOCBAQCBwcm90
ZWN0ZWQ6CiAKICAgICBib29sIG1faXNDdXN0b21TY3JvbGxiYXI7CiAKKyAgICBmbG9hdCBtX29w
YWNpdHkgeyAxIH07CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsYmFyKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5mMGQ3MjE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmNwcApAQCAtMCwwICsxLDMwMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAxNiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJTY3JvbGxBbmltYXRvckd0ay5oIgorCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0aW9uU21v
b3RoLmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJU
aGVtZS5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0YXRpYyBjb25zdCBkb3VibGUgb3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0aW9uRHVy
YXRpb24gPSAxOworc3RhdGljIGNvbnN0IGRvdWJsZSBvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRp
b25IaWRlRGVsYXkgPSAyOworCitzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9s
bEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQoreworICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFNjcm9sbEFuaW1hdG9yR3RrPihzY3JvbGxhYmxlQXJl
YSk7Cit9CisKK1Njcm9sbEFuaW1hdG9yR3RrOjpTY3JvbGxBbmltYXRvckd0ayhTY3JvbGxhYmxl
QXJlYSYgc2Nyb2xsYWJsZUFyZWEpCisgICAgOiBTY3JvbGxBbmltYXRvcihzY3JvbGxhYmxlQXJl
YSkKKyAgICAsIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyKCp0aGlzLCAmU2Nyb2xs
QW5pbWF0b3JHdGs6Om92ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lckZpcmVkKQoreworI2lm
IEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorICAgIGlmIChzY3JvbGxhYmxlQXJlYS5zY3JvbGxB
bmltYXRvckVuYWJsZWQoKSkKKyAgICAgICAgZW5zdXJlU21vb3RoU2Nyb2xsaW5nQW5pbWF0aW9u
KCk7CisjZW5kaWYKK30KKworU2Nyb2xsQW5pbWF0b3JHdGs6On5TY3JvbGxBbmltYXRvckd0aygp
Cit7Cit9CisKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKK3ZvaWQgU2Nyb2xsQW5pbWF0
b3JHdGs6OmVuc3VyZVNtb290aFNjcm9sbGluZ0FuaW1hdGlvbigpCit7CisgICAgaWYgKG1fYW5p
bWF0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2FuaW1hdGlvbiA9IHN0ZDo6bWFrZV91
bmlxdWU8U2Nyb2xsQW5pbWF0aW9uU21vb3RoPihtX3Njcm9sbGFibGVBcmVhLCBbdGhpc10oRmxv
YXRQb2ludCYmIHBvc2l0aW9uKSB7CisgICAgICAgIEZsb2F0U2l6ZSBkZWx0YSA9IHBvc2l0aW9u
IC0gbV9jdXJyZW50UG9zaXRpb247CisgICAgICAgIG1fY3VycmVudFBvc2l0aW9uID0gV1RGTW92
ZShwb3NpdGlvbik7CisgICAgICAgIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChkZWx0YSk7CisgICAg
fSk7CisgICAgbV9hbmltYXRpb24tPnNldEN1cnJlbnRQb3NpdGlvbihtX2N1cnJlbnRQb3NpdGlv
bik7Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JHdGs6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IHN0
ZXAsIGZsb2F0IG11bHRpcGxpZXIpCit7CisgICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhLnNjcm9s
bEFuaW1hdG9yRW5hYmxlZCgpIHx8IGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5UHJlY2lzZVBpeGVs
KQorICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChvcmllbnRhdGlvbiwgZ3Jh
bnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOworCisgICAgZW5zdXJlU21vb3RoU2Nyb2xsaW5n
QW5pbWF0aW9uKCk7CisgICAgcmV0dXJuIG1fYW5pbWF0aW9uLT5zY3JvbGwob3JpZW50YXRpb24s
IGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRv
ckd0azo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9m
ZnNldCkKK3sKKyAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQsIHRvRmxvYXRTaXplKG1fc2Nyb2xsYWJsZUFyZWEu
c2Nyb2xsT3JpZ2luKCkpKTsKKyAgICBpZiAobV9hbmltYXRpb24pCisgICAgICAgIG1fYW5pbWF0
aW9uLT5zZXRDdXJyZW50UG9zaXRpb24ocG9zaXRpb24pOworCisgICAgRmxvYXRTaXplIGRlbHRh
ID0gcG9zaXRpb24gLSBtX2N1cnJlbnRQb3NpdGlvbjsKKyAgICBtX2N1cnJlbnRQb3NpdGlvbiA9
IHBvc2l0aW9uOworICAgIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChkZWx0YSk7Cit9CisKK3ZvaWQg
U2Nyb2xsQW5pbWF0b3JHdGs6OndpbGxFbmRMaXZlUmVzaXplKCkKK3sKKyAgICBpZiAobV9hbmlt
YXRpb24pCisgICAgICAgIG1fYW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOworfQor
I2VuZGlmCisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFy
KFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQor
ICAgIGlmIChtX2FuaW1hdGlvbikKKyAgICAgICAgbV9hbmltYXRpb24tPnVwZGF0ZVZpc2libGVM
ZW5ndGhzKCk7CisjZW5kaWYKKyAgICBpZiAoIXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFy
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhciA9IHNj
cm9sbGJhcjsKKyAgICBpZiAoIW1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIpCisgICAgICAg
IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQgPSAxOworICAgIG1fdmVydGljYWxP
dmVybGF5U2Nyb2xsYmFyLT5zZXRPcGFjaXR5KG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1
cnJlbnQpOworICAgIGhpZGVPdmVybGF5U2Nyb2xsYmFycygpOworfQorCit2b2lkIFNjcm9sbEFu
aW1hdG9yR3RrOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFy
KQoreworI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorICAgIGlmIChtX2FuaW1hdGlvbikK
KyAgICAgICAgbV9hbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CisjZW5kaWYKKyAg
ICBpZiAoIXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyID0gc2Nyb2xsYmFyOworICAgIGlmICgh
bV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIpCisgICAgICAgIG1fb3ZlcmxheVNjcm9sbGJhckFu
aW1hdGlvbkN1cnJlbnQgPSAxOworICAgIG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXItPnNl
dE9wYWNpdHkobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCk7CisgICAgaGlkZU92
ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OndpbGxSZW1v
dmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBpZiAobV92
ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgIT0gc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47Cisg
ICAgbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgPSBudWxscHRyOworICAgIGlmICghbV9ob3Jp
em9udGFsT3ZlcmxheVNjcm9sbGJhcikKKyAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uQ3VycmVudCA9IDA7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OndpbGxSZW1vdmVI
b3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIGlmIChtX2hv
cml6b250YWxPdmVybGF5U2Nyb2xsYmFyICE9IHNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgPSBudWxscHRyOworICAgIGlmICghbV92
ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIpCisgICAgICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1h
dGlvbkN1cnJlbnQgPSAwOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjp1cGRhdGVPdmVy
bGF5U2Nyb2xsYmFyc09wYWNpdHkoKQoreworICAgIGlmIChtX3ZlcnRpY2FsT3ZlcmxheVNjcm9s
bGJhciAmJiBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ICE9IG1fdmVydGljYWxP
dmVybGF5U2Nyb2xsYmFyLT5vcGFjaXR5KCkpIHsKKyAgICAgICAgbV92ZXJ0aWNhbE92ZXJsYXlT
Y3JvbGxiYXItPnNldE9wYWNpdHkobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCk7
CisgICAgICAgIGlmIChtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9
PSBOb1BhcnQpCisgICAgICAgICAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5pbnZhbGlkYXRl
UGFydCgqbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIsIFRodW1iUGFydCk7CisgICAgfQorCisg
ICAgaWYgKG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgJiYgbV9vdmVybGF5U2Nyb2xsYmFy
QW5pbWF0aW9uQ3VycmVudCAhPSBtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyLT5vcGFjaXR5
KCkpIHsKKyAgICAgICAgbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhci0+c2V0T3BhY2l0eSht
X292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50KTsKKyAgICAgICAgaWYgKG1faG9yaXpv
bnRhbE92ZXJsYXlTY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KQorICAgICAgICAg
ICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkuaW52YWxpZGF0ZVBhcnQoKm1faG9yaXpvbnRhbE92
ZXJsYXlTY3JvbGxiYXIsIFRodW1iUGFydCk7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIGRv
dWJsZSBlYXNlT3V0Q3ViaWMoZG91YmxlIHQpCit7CisgICAgZG91YmxlIHAgPSB0IC0gMTsKKyAg
ICByZXR1cm4gcCAqIHAgKiBwICsgMTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckd0azo6b3Zl
cmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyRmlyZWQoKQoreworICAgIGlmICghbV9ob3Jpem9u
dGFsT3ZlcmxheVNjcm9sbGJhciAmJiAhbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIpCisgICAg
ICAgIHJldHVybjsKKyAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZG91YmxlIGN1cnJlbnRUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNp
bmdUaW1lKCk7CisgICAgZG91YmxlIHByb2dyZXNzID0gMTsKKyAgICBpZiAoY3VycmVudFRpbWUg
PCBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25FbmRUaW1lKQorICAgICAgICBwcm9ncmVzcyA9
IChjdXJyZW50VGltZSAtIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblN0YXJ0VGltZSkgLyAo
bV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uRW5kVGltZSAtIG1fb3ZlcmxheVNjcm9sbGJhckFu
aW1hdGlvblN0YXJ0VGltZSk7CisgICAgcHJvZ3Jlc3MgPSBtX292ZXJsYXlTY3JvbGxiYXJBbmlt
YXRpb25Tb3VyY2UgKyAoZWFzZU91dEN1YmljKHByb2dyZXNzKSAqIChtX292ZXJsYXlTY3JvbGxi
YXJBbmltYXRpb25UYXJnZXQgLSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25Tb3VyY2UpKTsK
KyAgICBpZiAocHJvZ3Jlc3MgIT0gbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCkg
eworICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0gcHJvZ3Jlc3M7
CisgICAgICAgIHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgpOworICAgIH0KKworICAg
IGlmIChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ICE9IG1fb3ZlcmxheVNjcm9s
bGJhckFuaW1hdGlvblRhcmdldCkgeworICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIGZyYW1l
UmF0ZSA9IDYwOworICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIHRpY2tUaW1lID0gMSAvIGZy
YW1lUmF0ZTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBtaW5pbXVtVGltZXJJbnRlcnZh
bCA9IC4wMDE7CisgICAgICAgIGRvdWJsZSBkZWx0YVRvTmV4dEZyYW1lID0gc3RkOjptYXgodGlj
a1RpbWUgLSAobW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBjdXJyZW50VGltZSksIG1p
bmltdW1UaW1lckludGVydmFsKTsKKyAgICAgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9u
VGltZXIuc3RhcnRPbmVTaG90KGRlbHRhVG9OZXh0RnJhbWUpOworICAgIH0gZWxzZQorICAgICAg
ICBoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckd0azo6
c2hvd092ZXJsYXlTY3JvbGxiYXJzKCkKK3sKKyAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyc0xv
Y2tlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1h
dGlvblRpbWVyLmlzQWN0aXZlKCkgJiYgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGFyZ2V0
ID09IDEpCisgICAgICAgIHJldHVybjsKKyAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25U
aW1lci5zdG9wKCk7CisKKyAgICBpZiAoIW1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgJiYg
IW1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX292
ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25Tb3VyY2UgPSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25DdXJyZW50OworICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCA9IDE7Cisg
ICAgaWYgKG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRhcmdldCAhPSBtX292ZXJsYXlTY3Jv
bGxiYXJBbmltYXRpb25DdXJyZW50KSB7CisgICAgICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1h
dGlvblN0YXJ0VGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworICAgICAgICBt
X292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25FbmRUaW1lID0gbV9vdmVybGF5U2Nyb2xsYmFyQW5p
bWF0aW9uU3RhcnRUaW1lICsgb3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0aW9uRHVyYXRpb247Cisg
ICAgICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyLnN0YXJ0T25lU2hvdCgwKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQg
U2Nyb2xsQW5pbWF0b3JHdGs6OmhpZGVPdmVybGF5U2Nyb2xsYmFycygpCit7CisgICAgaWYgKG1f
b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkgJiYgIW1fb3ZlcmxheVNj
cm9sbGJhckFuaW1hdGlvblRhcmdldCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fb3ZlcmxheVNj
cm9sbGJhckFuaW1hdGlvblRpbWVyLnN0b3AoKTsKKworICAgIGlmICghbV9ob3Jpem9udGFsT3Zl
cmxheVNjcm9sbGJhciAmJiAhbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblNvdXJjZSA9IG1fb3Zlcmxh
eVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQ7CisgICAgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uVGFyZ2V0ID0gMDsKKyAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGFyZ2V0
ID09IG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvbkN1cnJlbnQpCisgICAgICAgIHJldHVybjsK
KyAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25TdGFydFRpbWUgPSBtb25vdG9uaWNhbGx5
SW5jcmVhc2luZ1RpbWUoKSArIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkhpZGVEZWxheTsK
KyAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25FbmRUaW1lID0gbV9vdmVybGF5U2Nyb2xs
YmFyQW5pbWF0aW9uU3RhcnRUaW1lICsgb3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0aW9uRHVyYXRp
b24gKyBvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25IaWRlRGVsYXk7CisgICAgbV9vdmVybGF5
U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KG92ZXJmbG93U2Nyb2xsYmFyc0Fu
aW1hdGlvbkhpZGVEZWxheSk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6Om1vdXNlRW50
ZXJlZENvbnRlbnRBcmVhKCkKK3sKKyAgICBzaG93T3ZlcmxheVNjcm9sbGJhcnMoKTsKK30KKwor
dm9pZCBTY3JvbGxBbmltYXRvckd0azo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpCit7CisgICAg
aGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6Om1v
dXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkKK3sKKyAgICBzaG93T3ZlcmxheVNjcm9sbGJhcnMoKTsK
K30KKwordm9pZCBTY3JvbGxBbmltYXRvckd0azo6Y29udGVudEFyZWFEaWRTaG93KCkKK3sKKyAg
ICBzaG93T3ZlcmxheVNjcm9sbGJhcnMoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckd0azo6
Y29udGVudEFyZWFEaWRIaWRlKCkKK3sKKyAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tl
ZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVy
LnN0b3AoKTsKKyAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCkgewor
ICAgICAgICBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50ID0gMDsKKyAgICAgICAg
dXBkYXRlT3ZlcmxheVNjcm9sbGJhcnNPcGFjaXR5KCk7CisgICAgfQorfQorCit2b2lkIFNjcm9s
bEFuaW1hdG9yR3RrOjpub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKGNvbnN0IEZsb2F0U2l6ZSYp
Cit7CisgICAgc2hvd092ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0
b3JHdGs6OmxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihib29sIHNob3VsZExvY2tT
dGF0ZSkKK3sKKyAgICBpZiAobV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCA9PSBzaG91bGRMb2Nr
U3RhdGUpCisgICAgICAgIHJldHVybjsKKyAgICBtX292ZXJsYXlTY3JvbGxiYXJzTG9ja2VkID0g
c2hvdWxkTG9ja1N0YXRlOworCisgICAgaWYgKCFtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFy
ICYmICFtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKG1fb3ZlcmxheVNjcm9sbGJhcnNMb2NrZWQpIHsKKyAgICAgICAgbV9vdmVybGF5U2Nyb2xs
YmFyQW5pbWF0aW9uVGltZXIuc3RvcCgpOworICAgICAgICBpZiAobV9ob3Jpem9udGFsT3Zlcmxh
eVNjcm9sbGJhcikKKyAgICAgICAgICAgIG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXItPnNl
dE9wYWNpdHkoMCk7CisgICAgICAgIGlmIChtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhcikKKyAg
ICAgICAgICAgIG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyLT5zZXRPcGFjaXR5KDApOworICAg
IH0gZWxzZSB7CisgICAgICAgIGlmIChtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50
ID09IDEpCisgICAgICAgICAgICB1cGRhdGVPdmVybGF5U2Nyb2xsYmFyc09wYWNpdHkoKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgc2hvd092ZXJsYXlTY3JvbGxiYXJzKCk7CisgICAgfQor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYWEzMTUwNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9TY3JvbGxBbmltYXRvckd0ay5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKGMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbEFuaW1hdG9yR3RrX2gKKyNkZWZpbmUg
U2Nyb2xsQW5pbWF0b3JHdGtfaAorCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKKyNpbmNs
dWRlICJUaW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbEFuaW1h
dGlvbjsKKworY2xhc3MgU2Nyb2xsQW5pbWF0b3JHdGsgZmluYWwgOiBwdWJsaWMgU2Nyb2xsQW5p
bWF0b3IgeworcHVibGljOgorICAgIGV4cGxpY2l0IFNjcm9sbEFuaW1hdG9yR3RrKFNjcm9sbGFi
bGVBcmVhJik7CisgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JHdGsoKTsKKworcHJpdmF0ZToK
KyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNj
cm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQg
bXVsdGlwbGllcikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0
aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIHdpbGxFbmRMaXZlUmVzaXplKCkgb3ZlcnJpZGU7CisjZW5kaWYKKworICAgIHZpcnR1YWwg
dm9pZCBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJh
ciopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9s
bGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBtb3VzZUVudGVy
ZWRDb250ZW50QXJlYSgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBtb3VzZUV4aXRlZENv
bnRlbnRBcmVhKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIG1vdXNlTW92ZWRJbkNvbnRl
bnRBcmVhKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhRGlkU2hvdygp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBjb250ZW50QXJlYURpZEhpZGUoKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9h
dFNpemUmIGRlbHRhKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9ja092ZXJsYXlTY3Jv
bGxiYXJTdGF0ZVRvSGlkZGVuKGJvb2wpIG92ZXJyaWRlOworCisgICAgdm9pZCBvdmVybGF5U2Ny
b2xsYmFyQW5pbWF0aW9uVGltZXJGaXJlZCgpOworICAgIHZvaWQgc2hvd092ZXJsYXlTY3JvbGxi
YXJzKCk7CisgICAgdm9pZCBoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsKKyAgICB2b2lkIHVwZGF0
ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgpOworCisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJ
TkcpCisgICAgdm9pZCBlbnN1cmVTbW9vdGhTY3JvbGxpbmdBbmltYXRpb24oKTsKKworICAgIHN0
ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRpb24+IG1fYW5pbWF0aW9uOworI2VuZGlmCisgICAg
U2Nyb2xsYmFyKiBtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyIHsgbnVsbHB0ciB9OworICAg
IFNjcm9sbGJhciogbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgeyBudWxscHRyIH07CisgICAg
Ym9vbCBtX292ZXJsYXlTY3JvbGxiYXJzTG9ja2VkIHsgZmFsc2UgfTsKKyAgICBUaW1lciBtX292
ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lcjsKKyAgICBkb3VibGUgbV9vdmVybGF5U2Nyb2xs
YmFyQW5pbWF0aW9uU291cmNlIHsgMCB9OworICAgIGRvdWJsZSBtX292ZXJsYXlTY3JvbGxiYXJB
bmltYXRpb25UYXJnZXQgeyAwIH07CisgICAgZG91YmxlIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1h
dGlvbkN1cnJlbnQgeyAwIH07CisgICAgZG91YmxlIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlv
blN0YXJ0VGltZSB7IDAgfTsKKyAgICBkb3VibGUgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9u
RW5kVGltZSB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFNjcm9sbEFuaW1hdG9yR3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
U2Nyb2xsYmFyVGhlbWVHdGsuY3BwCmluZGV4IDMzNjk3NjIuLjE5ZmI1ODEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmNwcApAQCAtNTks
NyArNTksNyBAQCBib29sIFNjcm9sbGJhclRoZW1lR3RrOjpoYXNUaHVtYihTY3JvbGxiYXImIHNj
cm9sbGJhcikKICNlbmRpZgogfQogCi1JbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjpiYWNrQnV0
dG9uUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0LCBib29sKQor
SW50UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6YmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyJiBzY3Jv
bGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydCwgYm9vbCBwYWludGluZykKIHsKICNpZm5kZWYgR1RL
X0FQSV9WRVJTSU9OXzIKICAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uRW5kUGFydCAmJiAhbV9o
YXNCYWNrQnV0dG9uRW5kUGFydCkKQEAgLTY3LDcgKzY3LDcgQEAgSW50UmVjdCBTY3JvbGxiYXJU
aGVtZUd0azo6YmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIFNjcm9sbGJhclBh
cnQgcGEKICAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0ICYmICFtX2hhc0JhY2tC
dXR0b25TdGFydFBhcnQpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKLSAgICBHUmVmUHRy
PEd0a1N0eWxlQ29udGV4dD4gc3R5bGVDb250ZXh0ID0gZ2V0T3JDcmVhdGVTdHlsZUNvbnRleHQo
KTsKKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gc3R5bGVDb250ZXh0ID0gZ2V0T3JDcmVh
dGVTdHlsZUNvbnRleHQoJnNjcm9sbGJhciwgcGFpbnRpbmcgPyBTdHlsZUNvbnRleHRNb2RlOjpQ
YWludCA6IFN0eWxlQ29udGV4dE1vZGU6OkxheW91dCk7CiAgICAgaW50IHggPSBzY3JvbGxiYXIu
eCgpICsgbV9jYWNoZWRQcm9wZXJ0aWVzLnRyb3VnaEJvcmRlcldpZHRoOwogICAgIGludCB5ID0g
c2Nyb2xsYmFyLnkoKSArIG1fY2FjaGVkUHJvcGVydGllcy50cm91Z2hCb3JkZXJXaWR0aDsKICAg
ICBJbnRTaXplIHNpemUgPSBidXR0b25TaXplKHNjcm9sbGJhcik7CkBAIC04MywxMSArODMsMTIg
QEAgSW50UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6YmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyJiBz
Y3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGEKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNjcm9s
bGJhcik7CiAgICAgVU5VU0VEX1BBUkFNKHBhcnQpOworICAgIFVOVVNFRF9QQVJBTShwYWludGlu
Zyk7CiAgICAgcmV0dXJuIEludFJlY3QoKTsKICNlbmRpZgogfQogCi1JbnRSZWN0IFNjcm9sbGJh
clRoZW1lR3RrOjpmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwgU2Nyb2xs
YmFyUGFydCBwYXJ0LCBib29sKQorSW50UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6Zm9yd2FyZEJ1
dHRvblJlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydCwgYm9vbCBw
YWludGluZykKIHsKICNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKICAgICBpZiAocGFydCA9PSBG
b3J3YXJkQnV0dG9uU3RhcnRQYXJ0ICYmICFtX2hhc0ZvcndhcmRCdXR0b25TdGFydFBhcnQpCkBA
IC05NSw3ICs5Niw3IEBAIEludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OmZvcndhcmRCdXR0b25S
ZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0CiAgICAgaWYgKHBhcnQgPT0g
Rm9yd2FyZEJ1dHRvbkVuZFBhcnQgJiYgIW1faGFzRm9yd2FyZEJ1dHRvbkVuZFBhcnQpCiAgICAg
ICAgIHJldHVybiBJbnRSZWN0KCk7CiAKLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gc3R5
bGVDb250ZXh0ID0gZ2V0T3JDcmVhdGVTdHlsZUNvbnRleHQoKTsKKyAgICBHUmVmUHRyPEd0a1N0
eWxlQ29udGV4dD4gc3R5bGVDb250ZXh0ID0gZ2V0T3JDcmVhdGVTdHlsZUNvbnRleHQoJnNjcm9s
bGJhciwgcGFpbnRpbmcgPyBTdHlsZUNvbnRleHRNb2RlOjpQYWludCA6IFN0eWxlQ29udGV4dE1v
ZGU6OkxheW91dCk7CiAgICAgSW50U2l6ZSBzaXplID0gYnV0dG9uU2l6ZShzY3JvbGxiYXIpOwog
ICAgIGlmIChzY3JvbGxiYXIub3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7
CiAgICAgICAgIGludCB5ID0gc2Nyb2xsYmFyLnkoKSArIG1fY2FjaGVkUHJvcGVydGllcy50cm91
Z2hCb3JkZXJXaWR0aDsKQEAgLTExNiwxNCArMTE3LDE1IEBAIEludFJlY3QgU2Nyb2xsYmFyVGhl
bWVHdGs6OmZvcndhcmRCdXR0b25SZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBTY3JvbGxiYXJQ
YXJ0CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzY3JvbGxiYXIpOwogICAgIFVOVVNFRF9QQVJB
TShwYXJ0KTsKKyAgICBVTlVTRURfUEFSQU0ocGFpbnRpbmcpOwogICAgIHJldHVybiBJbnRSZWN0
KCk7CiAjZW5kaWYKIH0KIAotSW50UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6dHJhY2tSZWN0KFNj
cm9sbGJhciYgc2Nyb2xsYmFyLCBib29sKQorSW50UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6dHJh
Y2tSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBib29sIHBhaW50aW5nKQogewogI2lmbmRlZiBH
VEtfQVBJX1ZFUlNJT05fMgotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBzdHlsZUNvbnRl
eHQgPSBnZXRPckNyZWF0ZVN0eWxlQ29udGV4dCgpOworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250
ZXh0PiBzdHlsZUNvbnRleHQgPSBnZXRPckNyZWF0ZVN0eWxlQ29udGV4dCgmc2Nyb2xsYmFyLCBw
YWludGluZyA/IFN0eWxlQ29udGV4dE1vZGU6OlBhaW50IDogU3R5bGVDb250ZXh0TW9kZTo6TGF5
b3V0KTsKICAgICAvLyBUaGUgcGFkZGluZyBhbG9uZyB0aGUgdGh1bWIgbW92ZW1lbnQgYXhpcyBp
bmNsdWRlcyB0aGUgdHJvdWdoIGJvcmRlcgogICAgIC8vIHBsdXMgdGhlIHNpemUgb2Ygc3RlcHBl
ciBzcGFjaW5nICh0aGUgc3BhY2UgYmV0d2VlbiB0aGUgc3RlcHBlciBhbmQKICAgICAvLyB0aGUg
cGxhY2Ugd2hlcmUgdGhlIHRodW1iIHN0b3BzKS4gVGhlcmUgaXMgb2Z0ZW4gbm8gc3RlcHBlciBz
cGFjaW5nLgpAQCAtMTYyLDYgKzE2NCw3IEBAIEludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OnRy
YWNrUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwgYm9vbCkKICAgICAgICAgICAgICAgICAgICB0
aGlja25lc3MsIHNjcm9sbGJhci5oZWlnaHQoKSAtICgyICogbW92ZW1lbnRBeGlzUGFkZGluZykg
LSBidXR0b25zV2lkdGgpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2Nyb2xsYmFyKTsKKyAg
ICBVTlVTRURfUEFSQU0ocGFpbnRpbmcpOwogICAgIHJldHVybiBJbnRSZWN0KCk7CiAjZW5kaWYK
IH0KQEAgLTE3NSw4ICsxNzgsOSBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIG9yaWVudGF0
aW9uU3R5bGVDbGFzcyhTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbgogLy8gVGhlIEd0
a1N0eWxlQ29udGV4dCByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIGlzIGNhY2hlZCBieSBTY3Jv
bGxiYXJUaGVtZUd0azo6cGFpbnQgZm9yIHRoZQogLy8gZHVyYXRpb24gb2YgaXRzIHNjb3BlLCBz
byBhIGRpZmZlcmVudCBHdGtTdHlsZUNvbnRleHQgd2l0aCB1cGRhdGVkIHRoZW1lIHByb3BlcnRp
ZXMgd2lsbCBiZQogLy8gdXNlZCBmb3IgZWFjaCBjYWxsIHRvIHBhaW50LgotR1JlZlB0cjxHdGtT
dHlsZUNvbnRleHQ+IFNjcm9sbGJhclRoZW1lR3RrOjpnZXRPckNyZWF0ZVN0eWxlQ29udGV4dChT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK0dSZWZQdHI8R3RrU3R5bGVDb250ZXh0
PiBTY3JvbGxiYXJUaGVtZUd0azo6Z2V0T3JDcmVhdGVTdHlsZUNvbnRleHQoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIsIFN0eWxlQ29udGV4dE1vZGUgbW9kZSkKIHsKKyAgICBBU1NFUlQoc2Nyb2xsYmFy
IHx8IG1vZGUgPT0gU3R5bGVDb250ZXh0TW9kZTo6TGF5b3V0KTsKICAgICBpZiAobV9jYWNoZWRT
dHlsZUNvbnRleHQpCiAgICAgICAgIHJldHVybiBtX2NhY2hlZFN0eWxlQ29udGV4dDsKIApAQCAt
MTg1LDEwICsxODksMTUgQEAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IFNjcm9sbGJhclRoZW1l
R3RrOjpnZXRPckNyZWF0ZVN0eWxlQ29udGV4dChTY3JvbGxiYXJPcmkKICAgICBndGtfd2lkZ2V0
X3BhdGhfYXBwZW5kX3R5cGUocGF0aC5nZXQoKSwgR1RLX1RZUEVfU0NST0xMQkFSKTsKICNpZiBH
VEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgMikKICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9zZXRf
b2JqZWN0X25hbWUocGF0aC5nZXQoKSwgLTEsICJzY3JvbGxiYXIiKTsKKyAgICBpZiAobV91c2Vz
T3ZlcmxheVNjcm9sbGJhcnMpIHsKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2Ns
YXNzKHBhdGguZ2V0KCksIC0xLCAib3ZlcmxheS1pbmRpY2F0b3IiKTsKKyAgICAgICAgaWYgKG1v
ZGUgPT0gU3R5bGVDb250ZXh0TW9kZTo6TGF5b3V0IHx8IHNjcm9sbGJhci0+aG92ZXJlZFBhcnQo
KSAhPSBOb1BhcnQpCisgICAgICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3Mo
cGF0aC5nZXQoKSwgLTEsICJob3ZlcmluZyIpOworICAgIH0KICNlbHNlCiAgICAgZ3RrX3dpZGdl
dF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGguZ2V0KCksIC0xLCAic2Nyb2xsYmFyIik7CiAjZW5k
aWYKLSAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsIG9y
aWVudGF0aW9uU3R5bGVDbGFzcyhvcmllbnRhdGlvbikpOworICAgIGd0a193aWRnZXRfcGF0aF9p
dGVyX2FkZF9jbGFzcyhwYXRoLmdldCgpLCAtMSwgb3JpZW50YXRpb25TdHlsZUNsYXNzKHNjcm9s
bGJhciA/IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA6IFZlcnRpY2FsU2Nyb2xsYmFyKSk7CiAg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3BhdGgoc3R5bGVDb250ZXh0LmdldCgpLCBwYXRoLmdl
dCgpKTsKIAogICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZSgKQEAgLTIyMiw2ICsyMzEs
MTMgQEAgc3RhdGljIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjcmVhdGVDaGlsZFN0eWxlQ29u
dGV4dChHdGtTdHlsZUNvbnRleHQqIHBhcmVudCwKIAogU2Nyb2xsYmFyVGhlbWVHdGs6OlNjcm9s
bGJhclRoZW1lR3RrKCkKIHsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgMikKKyNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCisgICAgbV91c2VzT3ZlcmxheVNjcm9s
bGJhcnMgPSB0cnVlOworI2Vsc2UKKyAgICBtX3VzZXNPdmVybGF5U2Nyb2xsYmFycyA9IGdfc3Ry
Y21wMChnX2dldGVudigiR1RLX09WRVJMQVlfU0NST0xMSU5HIiksICIwIik7CisjZW5kaWYKKyNl
bmRpZgogICAgIHVwZGF0ZVRoZW1lUHJvcGVydGllcygpOwogfQogCkBAIC0yNDUsNyArMjYxLDcg
QEAgdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6dXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCkKIAogSW50
UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6dGh1bWJSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBj
b25zdCBJbnRSZWN0JiB1bmNvbnN0cmFpbmVkVHJhY2tSZWN0KQogewotICAgIEdSZWZQdHI8R3Rr
U3R5bGVDb250ZXh0PiBzdHlsZUNvbnRleHQgPSBnZXRPckNyZWF0ZVN0eWxlQ29udGV4dChzY3Jv
bGxiYXIub3JpZW50YXRpb24oKSk7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxl
Q29udGV4dCA9IGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KCZzY3JvbGxiYXIpOwogICAgIEludFJl
Y3QgdHJhY2tSZWN0ID0gY29uc3RyYWluVHJhY2tSZWN0VG9UcmFja1BpZWNlcyhzY3JvbGxiYXIs
IHVuY29uc3RyYWluZWRUcmFja1JlY3QpOwogICAgIGludCB0aHVtYlBvcyA9IHRodW1iUG9zaXRp
b24oc2Nyb2xsYmFyKTsKICAgICBpZiAoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpv
bnRhbFNjcm9sbGJhcikKQEAgLTI1OSwxMyArMjc1LDEzIEBAIHN0YXRpYyB2b2lkIGFkanVzdFJl
Y3RBY2NvcmRpbmdUb01hcmdpbihHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIEludFJlY3QmIHJl
Y3QpCiB7CiAgICAgR3RrQm9yZGVyIG1hcmdpbjsKICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRf
bWFyZ2luKGNvbnRleHQsIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShjb250ZXh0KSwgJm1h
cmdpbik7Ci0gICAgcmVjdC5tb3ZlKG1hcmdpbi5sZWZ0LCBtYXJnaW4ucmlnaHQpOworICAgIHJl
Y3QubW92ZShtYXJnaW4ubGVmdCwgbWFyZ2luLnRvcCk7CiAgICAgcmVjdC5jb250cmFjdChtYXJn
aW4ubGVmdCArIG1hcmdpbi5yaWdodCwgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20pOwogfQog
CiB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0
KQogewotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBwYXJlbnRTdHlsZUNvbnRleHQgPSBn
ZXRPckNyZWF0ZVN0eWxlQ29udGV4dChzY3JvbGxiYXIub3JpZW50YXRpb24oKSk7CisgICAgR1Jl
ZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHBhcmVudFN0eWxlQ29udGV4dCA9IGdldE9yQ3JlYXRlU3R5
bGVDb250ZXh0KCZzY3JvbGxiYXIsIFN0eWxlQ29udGV4dE1vZGU6OlBhaW50KTsKICAgICAvLyBQ
YWludCB0aGUgdHJhY2sgYmFja2dyb3VuZC4gSWYgdGhlIHRyb3VnaC11bmRlci1zdGVwcGVycyBw
cm9wZXJ0eSBpcyB0cnVlLCB0aGlzCiAgICAgLy8gc2hvdWxkIGJlIHRoZSBmdWxsIHNpemUgb2Yg
dGhlIHNjcm9sbGJhciwgYnV0IGlmIGlzIGZhbHNlLCBpdCBzaG91bGQgb25seSBiZSB0aGUKICAg
ICAvLyB0cmFjayByZWN0LgpAQCAtMjgxLDE0ICsyOTcsMTQgQEAgdm9pZCBTY3JvbGxiYXJUaGVt
ZUd0azo6cGFpbnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBTY3Jv
bGxiYXIKIAogdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5k
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgU2Nyb2xsYmFyJiBzY3JvbGxiYXIpCiB7Ci0gICAg
R1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4dCA9IGdldE9yQ3JlYXRlU3R5bGVD
b250ZXh0KHNjcm9sbGJhci5vcmllbnRhdGlvbigpKTsKKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29u
dGV4dD4gc3R5bGVDb250ZXh0ID0gZ2V0T3JDcmVhdGVTdHlsZUNvbnRleHQoJnNjcm9sbGJhciwg
U3R5bGVDb250ZXh0TW9kZTo6UGFpbnQpOwogICAgIGd0a19yZW5kZXJfZnJhbWUoc3R5bGVDb250
ZXh0LmdldCgpLCBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBzY3JvbGxiYXIueCgp
LCBzY3JvbGxiYXIueSgpLCBzY3JvbGxiYXIud2lkdGgoKSwgc2Nyb2xsYmFyLmhlaWdodCgpKTsK
IH0KIAogdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewog
ICAgIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gc2Nyb2xsYmFyLm9yaWVudGF0
aW9uKCk7Ci0gICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHBhcmVudFN0eWxlQ29udGV4dCA9
IGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KG9yaWVudGF0aW9uKTsKKyAgICBHUmVmUHRyPEd0a1N0
eWxlQ29udGV4dD4gcGFyZW50U3R5bGVDb250ZXh0ID0gZ2V0T3JDcmVhdGVTdHlsZUNvbnRleHQo
JnNjcm9sbGJhciwgU3R5bGVDb250ZXh0TW9kZTo6UGFpbnQpOwogICAgIEdSZWZQdHI8R3RrU3R5
bGVDb250ZXh0PiB0cm91Z2hTdHlsZUNvbnRleHQgPSBjcmVhdGVDaGlsZFN0eWxlQ29udGV4dChw
YXJlbnRTdHlsZUNvbnRleHQuZ2V0KCksICJ0cm91Z2giKTsKICAgICBHUmVmUHRyPEd0a1N0eWxl
Q29udGV4dD4gc3R5bGVDb250ZXh0ID0gY3JlYXRlQ2hpbGRTdHlsZUNvbnRleHQodHJvdWdoU3R5
bGVDb250ZXh0LmdldCgpLCAic2xpZGVyIik7CiAKQEAgLTMwMCw2ICszMTYsMTQgQEAgdm9pZCBT
Y3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFNj
cm9sbGJhciYgc2Nyb2xsYmEKICAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoc3R5bGVD
b250ZXh0LmdldCgpLCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOwogCiAgICAg
SW50UmVjdCB0aHVtYlJlY3QocmVjdCk7CisgICAgaWYgKG1fdXNlc092ZXJsYXlTY3JvbGxiYXJz
ICYmIHNjcm9sbGJhci5ob3ZlcmVkUGFydCgpID09IE5vUGFydCkgeworICAgICAgICAvLyBXaGVu
IHVzaW5nIG92ZXJsYXkgc2Nyb2xsYmFycyB3ZSBhbHdheXMgY2xhaW0gdGhlIHNpemUgb2YgdGhl
IHNjcm9sbGJhciB3aGVuIGhvdmVyZWQsIHNvIHdoZW4KKyAgICAgICAgLy8gZHJhd2luZyB0aGUg
aW5kaWNhdG9yIHdlIG5lZWQgdG8gYWRqdXN0IHRoZSByZWN0YW5nbGUgdG8gaXRzIGFjdHVhbCBz
aXplIGluIGluZGljYXRvciBtb2RlLgorICAgICAgICBpZiAob3JpZW50YXRpb24gPT0gVmVydGlj
YWxTY3JvbGxiYXIpCisgICAgICAgICAgICB0aHVtYlJlY3QubW92ZShzY3JvbGxiYXIud2lkdGgo
KSAtIG1fY2FjaGVkUHJvcGVydGllcy50aHVtYkZhdG5lc3MsIDApOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICB0aHVtYlJlY3QubW92ZSgwLCBzY3JvbGxiYXIuaGVpZ2h0KCkgLSBtX2NhY2hl
ZFByb3BlcnRpZXMudGh1bWJGYXRuZXNzKTsKKyAgICB9CiAgICAgYWRqdXN0UmVjdEFjY29yZGlu
Z1RvTWFyZ2luKHN0eWxlQ29udGV4dC5nZXQoKSwgdGh1bWJSZWN0KTsKICAgICBndGtfcmVuZGVy
X3NsaWRlcihzdHlsZUNvbnRleHQuZ2V0KCksIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNy
KCksIHRodW1iUmVjdC54KCksIHRodW1iUmVjdC55KCksIHRodW1iUmVjdC53aWR0aCgpLCB0aHVt
YlJlY3QuaGVpZ2h0KCksCiAgICAgICAgIG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFy
ID8gR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMIDogR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwp
OwpAQCAtMzA4LDcgKzMzMiw3IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VGh1bWIo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBTY3JvbGxiYXImIHNjcm9sbGJhCiB2b2lkIFNjcm9s
bGJhclRoZW1lR3RrOjpwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFNjcm9s
bGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxiYXJQYXJ0IHBhcnQp
CiB7CiAgICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBzY3JvbGxiYXIub3Jp
ZW50YXRpb24oKTsKLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gcGFyZW50U3R5bGVDb250
ZXh0ID0gZ2V0T3JDcmVhdGVTdHlsZUNvbnRleHQob3JpZW50YXRpb24pOworICAgIEdSZWZQdHI8
R3RrU3R5bGVDb250ZXh0PiBwYXJlbnRTdHlsZUNvbnRleHQgPSBnZXRPckNyZWF0ZVN0eWxlQ29u
dGV4dCgmc2Nyb2xsYmFyLCBTdHlsZUNvbnRleHRNb2RlOjpQYWludCk7CiAgICAgR1JlZlB0cjxH
dGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4dCA9IGNyZWF0ZUNoaWxkU3R5bGVDb250ZXh0KHBh
cmVudFN0eWxlQ29udGV4dC5nZXQoKSwgImJ1dHRvbiIpOwogCiAgICAgdW5zaWduZWQgZmxhZ3Mg
PSAwOwpAQCAtMzU1LDggKzM3OSwxMiBAQCBib29sIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludChT
Y3JvbGxiYXImIHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbgogICAgIGlm
IChncmFwaGljc0NvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKKyAgICBkb3VibGUgb3BhY2l0eSA9IHNjcm9sbGJhci5ob3ZlcmVkUGFydCgpID09IE5v
UGFydCA/IHNjcm9sbGJhci5vcGFjaXR5KCkgOiAxOworICAgIGlmICghb3BhY2l0eSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKICAgICAvLyBDYWNoZSBhIG5ldyBHdGtTdHlsZUNvbnRleHQgZm9y
IHRoZSBkdXJhdGlvbiBvZiB0aGlzIHNjb3BlLgotICAgIFRlbXBvcmFyeUNoYW5nZTxHUmVmUHRy
PEd0a1N0eWxlQ29udGV4dD4+IHRlbXBTdHlsZUNvbnRleHQobV9jYWNoZWRTdHlsZUNvbnRleHQs
IGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KHNjcm9sbGJhci5vcmllbnRhdGlvbigpKSk7CisgICAg
VGVtcG9yYXJ5Q2hhbmdlPEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0Pj4gdGVtcFN0eWxlQ29udGV4
dChtX2NhY2hlZFN0eWxlQ29udGV4dCwgZ2V0T3JDcmVhdGVTdHlsZUNvbnRleHQoJnNjcm9sbGJh
ciwgU3R5bGVDb250ZXh0TW9kZTo6UGFpbnQpKTsKIAogICAgIC8vIENyZWF0ZSB0aGUgU2Nyb2xs
YmFyQ29udHJvbFBhcnRNYXNrIGJhc2VkIG9uIHRoZSBkYW1hZ2VSZWN0CiAgICAgU2Nyb2xsYmFy
Q29udHJvbFBhcnRNYXNrIHNjcm9sbE1hc2sgPSBOb1BhcnQ7CkBAIC0zOTksNiArNDI3LDMxIEBA
IGJvb2wgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBHcmFw
aGljc0NvbnRleHQmIGdyYXBoaWNzQ29uCiAgICAgICAgICAgICBzY3JvbGxNYXNrIHw9IFRodW1i
UGFydDsKICAgICB9CiAKKyAgICBpZiAobV91c2VzT3ZlcmxheVNjcm9sbGJhcnMpIHsKKyAgICAg
ICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGNoZWNrIG9uY2UgMy4yMCBpcyByZWxlYXNlZC4KKyNp
ZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgOCkKKyAgICAgICAgdW5zaWduZWQgZmxhZ3MgPSAw
OworICAgICAgICBpZiAoc2Nyb2xsYmFyLmhvdmVyZWRQYXJ0KCkgIT0gTm9QYXJ0KQorICAgICAg
ICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQ7CisgICAgICAgIGlmIChzY3Jv
bGxiYXIucHJlc3NlZFBhcnQoKSAhPSBOb1BhcnQpCisgICAgICAgICAgICBmbGFncyB8PSBHVEtf
U1RBVEVfRkxBR19BQ1RJVkU7CisgICAgICAgIGRvdWJsZSBzdHlsZU9wYWNpdHk7CisgICAgICAg
IGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShtX2NhY2hlZFN0eWxlQ29udGV4dC5nZXQoKSwg
c3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKKyAgICAgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfZ2V0KG1fY2FjaGVkU3R5bGVDb250ZXh0LmdldCgpLCBndGtfc3R5bGVfY29udGV4dF9n
ZXRfc3RhdGUobV9jYWNoZWRTdHlsZUNvbnRleHQuZ2V0KCkpLCAib3BhY2l0eSIsICZzdHlsZU9w
YWNpdHksIG51bGxwdHIpOworICAgICAgICBvcGFjaXR5ICo9IHN0eWxlT3BhY2l0eTsKKyNlbHNl
CisgICAgICAgIG9wYWNpdHkgKj0gc2Nyb2xsYmFyLmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0ID8g
MC40IDogMC43OworI2VuZGlmCisgICAgfQorICAgIGlmICghb3BhY2l0eSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBpZiAob3BhY2l0eSAhPSAxKSB7CisgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC5zYXZlKCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGlwKGRhbWFnZVJlY3QpOwor
ICAgICAgICBncmFwaGljc0NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsK
KyAgICB9CisKICAgICBTY3JvbGxiYXJDb250cm9sUGFydE1hc2sgYWxsQnV0dG9ucyA9IEJhY2tC
dXR0b25TdGFydFBhcnQgfCBCYWNrQnV0dG9uRW5kUGFydCB8IEZvcndhcmRCdXR0b25TdGFydFBh
cnQgfCBGb3J3YXJkQnV0dG9uRW5kUGFydDsKICAgICBpZiAoc2Nyb2xsTWFzayAmIFRyYWNrQkdQ
YXJ0IHx8IHNjcm9sbE1hc2sgJiBUaHVtYlBhcnQgfHwgc2Nyb2xsTWFzayAmIGFsbEJ1dHRvbnMp
CiAgICAgICAgIHBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZChncmFwaGljc0NvbnRleHQsIHNjcm9s
bGJhcik7CkBAIC00MTgsNiArNDcxLDExIEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50
KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29uCiAgICAg
aWYgKHNjcm9sbE1hc2sgJiBUaHVtYlBhcnQpCiAgICAgICAgIHBhaW50VGh1bWIoZ3JhcGhpY3ND
b250ZXh0LCBzY3JvbGxiYXIsIGN1cnJlbnRUaHVtYlJlY3QpOwogCisgICAgaWYgKG9wYWNpdHkg
IT0gMSkgeworICAgICAgICBncmFwaGljc0NvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsK
KyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnJlc3RvcmUoKTsKKyAgICB9CisKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtNDM0LDcgKzQ5Miw3IEBAIGludCBTY3JvbGxiYXJUaGVtZUd0azo6c2Ny
b2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplKQogCiBJbnRTaXplIFNjcm9sbGJh
clRoZW1lR3RrOjpidXR0b25TaXplKFNjcm9sbGJhciYgc2Nyb2xsYmFyKQogewotICAgIEdSZWZQ
dHI8R3RrU3R5bGVDb250ZXh0PiBzdHlsZUNvbnRleHQgPSBnZXRPckNyZWF0ZVN0eWxlQ29udGV4
dChzY3JvbGxiYXIub3JpZW50YXRpb24oKSk7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+
IHN0eWxlQ29udGV4dCA9IGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KCZzY3JvbGxiYXIpOwogICAg
IGlmIChzY3JvbGxiYXIub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKICAgICAg
ICAgcmV0dXJuIEludFNpemUobV9jYWNoZWRQcm9wZXJ0aWVzLnRodW1iRmF0bmVzcywgbV9jYWNo
ZWRQcm9wZXJ0aWVzLnN0ZXBwZXJTaXplKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuaAppbmRleCAxYmM1YzA0Li44YjdiNjRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuaApAQCAtNjEs
MTAgKzYxLDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGRvdWJsZSBpbml0aWFsQXV0b3Njcm9s
bFRpbWVyRGVsYXkoKSBvdmVycmlkZSB7IHJldHVybiAwLjIwOyB9CiAgICAgdmlydHVhbCBkb3Vi
bGUgYXV0b3Njcm9sbFRpbWVyRGVsYXkoKSBvdmVycmlkZSB7IHJldHVybiAwLjAyOyB9CiAgICAg
dmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCB1
c2VzT3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3VzZXNPdmVy
bGF5U2Nyb2xsYmFyczsgfQorICAgIC8vIFdoZW4gdXNpbmcgb3ZlcmxheSBzY3JvbGxiYXJzLCBh
bHdheXMgaW52YWxpZGF0ZSB0aGUgd2hvbGUgc2Nyb2xsYmFyIHdoZW4gZW50ZXJpbmcvbGVhdmlu
Zy4KKyAgICB2aXJ0dWFsIGJvb2wgaW52YWxpZGF0ZU9uTW91c2VFbnRlckV4aXQoKSBvdmVycmlk
ZSB7IHJldHVybiBtX3VzZXNPdmVybGF5U2Nyb2xsYmFyczsgfQogCiBwcml2YXRlOgogICAgIHZv
aWQgdXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCk7Ci0gICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+
IGdldE9yQ3JlYXRlU3R5bGVDb250ZXh0KFNjcm9sbGJhck9yaWVudGF0aW9uID0gVmVydGljYWxT
Y3JvbGxiYXIpOworICAgIGVudW0gY2xhc3MgU3R5bGVDb250ZXh0TW9kZSB7IExheW91dCwgUGFp
bnQgfTsKKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gZ2V0T3JDcmVhdGVTdHlsZUNvbnRl
eHQoU2Nyb2xsYmFyKiA9IG51bGxwdHIsIFN0eWxlQ29udGV4dE1vZGUgPSBTdHlsZUNvbnRleHRN
b2RlOjpMYXlvdXQpOwogCiAgICAgSW50U2l6ZSBidXR0b25TaXplKFNjcm9sbGJhciYpOwogCkBA
IC04Myw2ICs4Nyw3IEBAIHByaXZhdGU6CiAgICAgZ2Jvb2xlYW4gbV9oYXNGb3J3YXJkQnV0dG9u
RW5kUGFydDsKICAgICBnYm9vbGVhbiBtX2hhc0JhY2tCdXR0b25TdGFydFBhcnQ7CiAgICAgZ2Jv
b2xlYW4gbV9oYXNCYWNrQnV0dG9uRW5kUGFydDsKKyAgICBib29sIG1fdXNlc092ZXJsYXlTY3Jv
bGxiYXJzIHsgZmFsc2UgfTsKICNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAppbmRleCA1
ZTNlYWM4Li43OTRiMTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
U2Nyb2xsQW5pbWF0b3JNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Ny
b2xsQW5pbWF0b3JNYWMuaApAQCAtOTUsMTcgKzk1LDE3IEBAIHByaXZhdGU6CiAgICAgCiAgICAg
dmlydHVhbCB2b2lkIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIGRlbHRh
KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25z
dCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSBj
b25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VFeGl0ZWRDb250ZW50QXJlYSgp
IGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBtb3VzZU1vdmVkSW5Db250ZW50QXJl
YSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBtb3VzZUVudGVyZWRDb250ZW50
QXJlYSgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBtb3VzZUV4aXRlZENvbnRlbnRBcmVh
KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIG1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxi
YXIqKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgbW91c2VFeGl0ZWRTY3JvbGxi
YXIoU2Nyb2xsYmFyKikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIG1vdXNlSXNE
b3duSW5TY3JvbGxiYXIoU2Nyb2xsYmFyKiwgYm9vbCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCB2b2lkIHdpbGxTdGFydExpdmVSZXNpemUoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZv
aWQgY29udGVudHNSZXNpemVkKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHdp
bGxFbmRMaXZlUmVzaXplKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVh
RGlkU2hvdygpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjb250ZW50QXJlYURp
ZEhpZGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFEaWRT
aG93KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhRGlkSGlkZSgpIG92
ZXJyaWRlOwogICAgIHZvaWQgZGlkQmVnaW5TY3JvbGxHZXN0dXJlKCkgY29uc3Q7CiAgICAgdm9p
ZCBkaWRFbmRTY3JvbGxHZXN0dXJlKCkgY29uc3Q7CiAgICAgdm9pZCBtYXlCZWdpblNjcm9sbEdl
c3R1cmUoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9T
Y3JvbGxBbmltYXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxB
bmltYXRvck1hYy5tbQppbmRleCBmMjc0NzE3Li4zMTI4ODFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCkBAIC04MDYsNyArODA2LDcg
QEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25zdAog
ICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIGNvbnRlbnRBcmVhV2lsbERyYXddOwog
fQogCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZUVudGVyZWRDb250ZW50QXJlYSgpIGNv
bnN0Cit2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZUVudGVyZWRDb250ZW50QXJlYSgpCiB7
CiAgICAgaWYgKFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIG92ZXJsYXlTY3JvbGxlclN0
YXRlSXNMb2NrZWRdKQogICAgICAgICByZXR1cm47CkBAIC04MTQsNyArODE0LDcgQEAgdm9pZCBT
Y3JvbGxBbmltYXRvck1hYzo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSBjb25zdAogICAgIFtt
X3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhXTsKIH0K
IAotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpIGNvbnN0
Cit2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZUV4aXRlZENvbnRlbnRBcmVhKCkKIHsKICAg
ICBpZiAoW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJ
c0xvY2tlZF0pCiAgICAgICAgIHJldHVybjsKQEAgLTgyMiw3ICs4MjIsNyBAQCB2b2lkIFNjcm9s
bEFuaW1hdG9yTWFjOjptb3VzZUV4aXRlZENvbnRlbnRBcmVhKCkgY29uc3QKICAgICBbbV9zY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlciBtb3VzZUV4aXRlZENvbnRlbnRBcmVhXTsKIH0KIAotdm9p
ZCBTY3JvbGxBbmltYXRvck1hYzo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEoKSBjb25zdAordm9p
ZCBTY3JvbGxBbmltYXRvck1hYzo6bW91c2VNb3ZlZEluQ29udGVudEFyZWEoKQogewogICAgIGlm
IChbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciBvdmVybGF5U2Nyb2xsZXJTdGF0ZUlzTG9j
a2VkXSkKICAgICAgICAgcmV0dXJuOwpAQCAtODk4LDcgKzg5OCw3IEBAIHZvaWQgU2Nyb2xsQW5p
bWF0b3JNYWM6OndpbGxFbmRMaXZlUmVzaXplKCkKICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlciBlbmRMaXZlUmVzaXplXTsKIH0KIAotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6Y29u
dGVudEFyZWFEaWRTaG93KCkgY29uc3QKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRlbnRB
cmVhRGlkU2hvdygpCiB7CiAgICAgaWYgKFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIG92
ZXJsYXlTY3JvbGxlclN0YXRlSXNMb2NrZWRdKQogICAgICAgICByZXR1cm47CkBAIC05MDYsNyAr
OTA2LDcgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRTaG93KCkgY29u
c3QKICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciB3aW5kb3dPcmRlcmVkSW5dOwog
fQogCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50QXJlYURpZEhpZGUoKSBjb25zdAor
dm9pZCBTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRIaWRlKCkKIHsKICAgICBpZiAo
W21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xvY2tl
ZF0pCiAgICAgICAgIHJldHVybjsK
</data>
<flag name="review"
          id="294853"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>