<?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>78872</bug_id>
          
          <creation_ts>2012-02-16 21:17:46 -0800</creation_ts>
          <short_desc>[chromium] ScrollbarLayerChromium/CCScrollbarLayerImpl for CC-side scrollbar painting</short_desc>
          <delta_ts>2012-03-09 15:04:23 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>78028</dependson>
          <blocked>79137</blocked>
    
    <blocked>79951</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Tien-Ren Chen">trchen</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>pkotwicz</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>558881</commentid>
    <comment_count>0</comment_count>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-02-16 21:17:46 -0800</bug_when>
    <thetext>[chromium] ScrollbarLayerChromium/CCScrollbarLayerImpl for CC-side scrollbar painting</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558882</commentid>
    <comment_count>1</comment_count>
      <attachid>127514</attachid>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-02-16 21:18:42 -0800</bug_when>
    <thetext>Created attachment 127514
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558889</commentid>
    <comment_count>2</comment_count>
      <attachid>127514</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-16 21:28:40 -0800</bug_when>
    <thetext>Comment on attachment 127514
Patch

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

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1839
&gt; +#if PLATFORM(CHROMIUM)
&gt; +            Scrollbar* scrollbar = m_renderView-&gt;frameView()-&gt;horizontalScrollbar();
&gt; +            if (ScrollbarThemeCCScroll* theme = scrollbar-&gt;theme()-&gt;toScrollbarThemeCCScroll())
&gt; +                theme-&gt;attachToGraphicsLayer(scrollbar, m_scrollLayer.get(), m_layerForHorizontalScrollbar.get());
&gt; +#endif

if you look a few lines below here there&apos;s a call to ScrollingCoordinator::frameViewHorizontalScrollbarLayerDidChange().  I think we want to put the ScrollbarLayerChromium creation and hookup inside our implementation of that function, not in here.

I also don&apos;t think that this should have anything at all to do with the ScrollbarTheme.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558992</commentid>
    <comment_count>3</comment_count>
      <attachid>127514</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-17 00:21:55 -0800</bug_when>
    <thetext>Comment on attachment 127514
Patch

Attachment 127514 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11542284

New failing tests:
css1/font_properties/font_size.html
css1/box_properties/border_left_width.html
css1/basic/class_as_selector.html
css1/font_properties/font_family.html
css1/font_properties/font_weight.html
css1/box_properties/border_bottom.html
css1/box_properties/border_bottom_width.html
css1/box_properties/border_right_width.html
css1/basic/id_as_selector.html
css1/basic/inheritance.html
css1/box_properties/border.html
css1/color_and_background/background_position.html
css1/box_properties/border_right_inline.html
css1/box_properties/border_left.html
css1/cascade/cascade_order.html
css1/color_and_background/background.html
css1/conformance/forward_compatible_parsing.html
css1/box_properties/border_top.html
css1/box_properties/border_style.html
css1/basic/containment.html
accessibility/aria-describedby-on-input.html
css1/color_and_background/background_attachment.html
css1/basic/comments.html
css1/pseudo/anchor.html
css1/classification/white_space.html
css1/color_and_background/background_repeat.html
css1/font_properties/font.html
css1/formatting_model/floating_elements.html
css1/classification/display.html
css1/classification/list_style_type.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559022</commentid>
    <comment_count>4</comment_count>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-02-17 01:05:46 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 127514 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=127514&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1839
&gt; &gt; +#if PLATFORM(CHROMIUM)
&gt; &gt; +            Scrollbar* scrollbar = m_renderView-&gt;frameView()-&gt;horizontalScrollbar();
&gt; &gt; +            if (ScrollbarThemeCCScroll* theme = scrollbar-&gt;theme()-&gt;toScrollbarThemeCCScroll())
&gt; &gt; +                theme-&gt;attachToGraphicsLayer(scrollbar, m_scrollLayer.get(), m_layerForHorizontalScrollbar.get());
&gt; &gt; +#endif
&gt; 
&gt; if you look a few lines below here there&apos;s a call to ScrollingCoordinator::frameViewHorizontalScrollbarLayerDidChange().  I think we want to put the ScrollbarLayerChromium creation and hookup inside our implementation of that function, not in here.
&gt; 
&gt; I also don&apos;t think that this should have anything at all to do with the ScrollbarTheme.

Yes I agree with you. It is in the current shape only because we don&apos;t have a ScrollingCoordinatorChromium yet. :)

I talked with Alex this evening. He also gave me some good comments that the ScrollingCoordinator should take the ownership of the scrollbar PlatformLayer.

I&apos;ll take a look at ScrollingCoordinator and see how do we integrate that to our tree synchronization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559268</commentid>
    <comment_count>5</comment_count>
      <attachid>127514</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-02-17 09:49:54 -0800</bug_when>
    <thetext>Comment on attachment 127514
Patch

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

&gt; Source/WebCore/platform/chromium/ScrollbarThemeCCScrollExample.cpp:74
&gt; +    float barBegin = scrollbar-&gt;currentPos() / scrollbar-&gt;totalSize();
&gt; +    float barEnd = (scrollbar-&gt;currentPos() + scrollbar-&gt;visibleSize()) / scrollbar-&gt;totalSize();

I don&apos;t think this will work without pkotwicz&apos;s change in bug 78028.  Scrollbar is an object owned and manipulated on the main thread side.  We don&apos;t want to read values from it directly, as it could be being manipulated by the other thread in ways that aren&apos;t valid for the current frame on the impl side.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1866
&gt; +            if (ScrollbarThemeCCScroll* theme = scrollbar-&gt;theme()-&gt;toScrollbarThemeCCScroll())
&gt; +                theme-&gt;attachToGraphicsLayer(scrollbar, m_scrollLayer.get(), m_layerForVerticalScrollbar.get());

Aren&apos;t we going to want to be able to draw any kind of scrollbar theme on the impl side? I&apos;m not sure I follow what this class is trying to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559409</commentid>
    <comment_count>6</comment_count>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-02-17 12:00:54 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 127514 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=127514&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/chromium/ScrollbarThemeCCScrollExample.cpp:74
&gt; &gt; +    float barBegin = scrollbar-&gt;currentPos() / scrollbar-&gt;totalSize();
&gt; &gt; +    float barEnd = (scrollbar-&gt;currentPos() + scrollbar-&gt;visibleSize()) / scrollbar-&gt;totalSize();
&gt; 
&gt; I don&apos;t think this will work without pkotwicz&apos;s change in bug 78028.  Scrollbar is an object owned and manipulated on the main thread side.  We don&apos;t want to read values from it directly, as it could be being manipulated by the other thread in ways that aren&apos;t valid for the current frame on the impl side.

No, we don&apos;t try to call anything in ScrollbarTheme from the impl side. It won&apos;t work for many reasons. Not only Scrollbar object might be updated unexpectedly, the ScrollbarTheme itself too.

&gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1866
&gt; &gt; +            if (ScrollbarThemeCCScroll* theme = scrollbar-&gt;theme()-&gt;toScrollbarThemeCCScroll())
&gt; &gt; +                theme-&gt;attachToGraphicsLayer(scrollbar, m_scrollLayer.get(), m_layerForVerticalScrollbar.get());
&gt; 
&gt; Aren&apos;t we going to want to be able to draw any kind of scrollbar theme on the impl side? I&apos;m not sure I follow what this class is trying to do.

The whole idea about ScrollbarThemeCCScroll is to provide an interface to create specialized PlatformLayer for scrollbars. (ScrollbarLayerChromium/CCScrollbarLayerImpl) The impl-side painting logic will be handled by the CCScrollbarLayerImpl implementation.

I don&apos;t think it is easy to allow drawing any kind of scrollbar theme on the impl side. It would put too much restriction on the ScrollbarTheme implementation. That means you have to make paint a static function, no access to the ScrollbarTheme during painting.

I think it is necessary to have different painting function for the impl side. Even creating GraphicsContext in the impl side could be a problem (correct me if I&apos;m wrong).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559452</commentid>
    <comment_count>7</comment_count>
      <attachid>127514</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-02-17 12:59:56 -0800</bug_when>
    <thetext>Comment on attachment 127514
Patch

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

&gt;&gt;&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1866
&gt;&gt;&gt; +                theme-&gt;attachToGraphicsLayer(scrollbar, m_scrollLayer.get(), m_layerForVerticalScrollbar.get());
&gt;&gt; 
&gt;&gt; Aren&apos;t we going to want to be able to draw any kind of scrollbar theme on the impl side? I&apos;m not sure I follow what this class is trying to do.
&gt; 
&gt; The whole idea about ScrollbarThemeCCScroll is to provide an interface to create specialized PlatformLayer for scrollbars. (ScrollbarLayerChromium/CCScrollbarLayerImpl) The impl-side painting logic will be handled by the CCScrollbarLayerImpl implementation.
&gt; 
&gt; I don&apos;t think it is easy to allow drawing any kind of scrollbar theme on the impl side. It would put too much restriction on the ScrollbarTheme implementation. That means you have to make paint a static function, no access to the ScrollbarTheme during painting.
&gt; 
&gt; I think it is necessary to have different painting function for the impl side. Even creating GraphicsContext in the impl side could be a problem (correct me if I&apos;m wrong).

If you&apos;re just creating a scrollbar layer, why do you need this factory-style interface to do it? Are you planning to have different types of scrollbar layers? I guess I just don&apos;t follow why the theme has to be replaced here just so we can create platform layers of the right type.

Also, I don&apos;t think it is necessary to have a different painting function for the impl side.  My hope is that we can create a new ScrollbarTheme object of the same type and pass it over to the impl side with all of the scrollbar data, but not an actual scrollbar pointer.  It&apos;s not a static function, but it is an object with no member variables that just uses a vtable to decide what functions to use.  Then we can reuse Ganesh to wrap a GraphicsContext3D in a GraphicsContext and reuse the same paint routines to just draw directly into the backbuffer.  I think it&apos;s do-able and it&apos;ll be the easiest path to get all the other platforms to have impl-side scrollbars without rewriting paint routines for all of them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559509</commentid>
    <comment_count>8</comment_count>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-02-17 13:54:09 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 127514 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=127514&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1866
&gt; &gt;&gt;&gt; +                theme-&gt;attachToGraphicsLayer(scrollbar, m_scrollLayer.get(), m_layerForVerticalScrollbar.get());
&gt; &gt;&gt; 
&gt; &gt;&gt; Aren&apos;t we going to want to be able to draw any kind of scrollbar theme on the impl side? I&apos;m not sure I follow what this class is trying to do.
&gt; &gt; 
&gt; &gt; The whole idea about ScrollbarThemeCCScroll is to provide an interface to create specialized PlatformLayer for scrollbars. (ScrollbarLayerChromium/CCScrollbarLayerImpl) The impl-side painting logic will be handled by the CCScrollbarLayerImpl implementation.
&gt; &gt; 
&gt; &gt; I don&apos;t think it is easy to allow drawing any kind of scrollbar theme on the impl side. It would put too much restriction on the ScrollbarTheme implementation. That means you have to make paint a static function, no access to the ScrollbarTheme during painting.
&gt; &gt; 
&gt; &gt; I think it is necessary to have different painting function for the impl side. Even creating GraphicsContext in the impl side could be a problem (correct me if I&apos;m wrong).
&gt; 
&gt; If you&apos;re just creating a scrollbar layer, why do you need this factory-style interface to do it? Are you planning to have different types of scrollbar layers? I guess I just don&apos;t follow why the theme has to be replaced here just so we can create platform layers of the right type.

Yes, although currently I don&apos;t think any of the platform use more than one scrollbar theme, there is no reason why not to support that.

&gt; Also, I don&apos;t think it is necessary to have a different painting function for the impl side.  My hope is that we can create a new ScrollbarTheme object of the same type and pass it over to the impl side with all of the scrollbar data, but not an actual scrollbar pointer.  It&apos;s not a static function, but it is an object with no member variables that just uses a vtable to decide what functions to use.  Then we can reuse Ganesh to wrap a GraphicsContext3D in a GraphicsContext and reuse the same paint routines to just draw directly into the backbuffer.  I think it&apos;s do-able and it&apos;ll be the easiest path to get all the other platforms to have impl-side scrollbars without rewriting paint routines for all of them.

I see. It actually sounds like a better plan. I&apos;ll try to reuse existing paint function then. This way we probably don&apos;t even have to do much modification with ScrollbarTheme.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559598</commentid>
    <comment_count>9</comment_count>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-02-17 15:34:58 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Also, I don&apos;t think it is necessary to have a different painting function for the impl side.  My hope is that we can create a new ScrollbarTheme object of the same type and pass it over to the impl side with all of the scrollbar data, but not an actual scrollbar pointer.  It&apos;s not a static function, but it is an object with no member variables that just uses a vtable to decide what functions to use.  Then we can reuse Ganesh to wrap a GraphicsContext3D in a GraphicsContext and reuse the same paint routines to just draw directly into the backbuffer.  I think it&apos;s do-able and it&apos;ll be the easiest path to get all the other platforms to have impl-side scrollbars without rewriting paint routines for all of them.

Allow me to ask a dumb question. Does Ganesh wrap a GraphicsContext3D or OpenGL FBO/texture? There is subtle difference here because in Android port we use command buffer to delegate drawing to another process. That is, GraphicsContext3D calls are not backed by libGL.so. I&apos;m afraid Ganesh won&apos;t work with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559600</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-17 15:36:10 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; &gt; Also, I don&apos;t think it is necessary to have a different painting function for the impl side.  My hope is that we can create a new ScrollbarTheme object of the same type and pass it over to the impl side with all of the scrollbar data, but not an actual scrollbar pointer.  It&apos;s not a static function, but it is an object with no member variables that just uses a vtable to decide what functions to use.  Then we can reuse Ganesh to wrap a GraphicsContext3D in a GraphicsContext and reuse the same paint routines to just draw directly into the backbuffer.  I think it&apos;s do-able and it&apos;ll be the easiest path to get all the other platforms to have impl-side scrollbars without rewriting paint routines for all of them.
&gt; 
&gt; Allow me to ask a dumb question. Does Ganesh wrap a GraphicsContext3D or OpenGL FBO/texture? There is subtle difference here because in Android port we use command buffer to delegate drawing to another process. That is, GraphicsContext3D calls are not backed by libGL.so. I&apos;m afraid Ganesh won&apos;t work with it.

Ganesh uses the same command buffer code that other GraphicsContext3D calls, although it hooks in at a slightly lower level.  It works fine in the Android port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559609</commentid>
    <comment_count>11</comment_count>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-02-17 15:50:44 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; Also, I don&apos;t think it is necessary to have a different painting function for the impl side.  My hope is that we can create a new ScrollbarTheme object of the same type and pass it over to the impl side with all of the scrollbar data, but not an actual scrollbar pointer.  It&apos;s not a static function, but it is an object with no member variables that just uses a vtable to decide what functions to use.  Then we can reuse Ganesh to wrap a GraphicsContext3D in a GraphicsContext and reuse the same paint routines to just draw directly into the backbuffer.  I think it&apos;s do-able and it&apos;ll be the easiest path to get all the other platforms to have impl-side scrollbars without rewriting paint routines for all of them.
&gt; &gt; 
&gt; &gt; Allow me to ask a dumb question. Does Ganesh wrap a GraphicsContext3D or OpenGL FBO/texture? There is subtle difference here because in Android port we use command buffer to delegate drawing to another process. That is, GraphicsContext3D calls are not backed by libGL.so. I&apos;m afraid Ganesh won&apos;t work with it.
&gt; 
&gt; Ganesh uses the same command buffer code that other GraphicsContext3D calls, although it hooks in at a slightly lower level.  It works fine in the Android port.

Ok, let me write some code that actually make use of it. Not having to write separate paint function sounds a big big plus to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563768</commentid>
    <comment_count>12</comment_count>
      <attachid>128622</attachid>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-02-23 17:55:02 -0800</bug_when>
    <thetext>Created attachment 128622
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563771</commentid>
    <comment_count>13</comment_count>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-02-23 17:57:01 -0800</bug_when>
    <thetext>Design doc: https://docs.google.com/a/google.com/document/d/1zBIUZ9bqQvJiq32khyDF3Grw-h5eHSXHx64coSSWUXM/edit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568217</commentid>
    <comment_count>14</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-29 18:46:41 -0800</bug_when>
    <thetext>Thanks a lot for producing that doc, it&apos;s been very useful.  I think that for now we should restrict this to only default-themed scrollbars and just call into the theme from the thread to raster to scrollbar from the impl thread.

I&apos;ve applied this patch locally (on top of https://bugs.webkit.org/show_bug.cgi?id=78028 with a lot of fixups for RefPtr/OwnPtr, etc) and have made pretty good progress on getting things hooked up.  Once I solidify things a bit more I&apos;ll provide some more feedback either in terms of a patch or just ideas.  I think we&apos;re really close here!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568270</commentid>
    <comment_count>15</comment_count>
      <attachid>129619</attachid>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-02-29 20:08:22 -0800</bug_when>
    <thetext>Created attachment 129619
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568276</commentid>
    <comment_count>16</comment_count>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-02-29 20:13:25 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Thanks a lot for producing that doc, it&apos;s been very useful.  I think that for now we should restrict this to only default-themed scrollbars and just call into the theme from the thread to raster to scrollbar from the impl thread.
&gt; 
&gt; I&apos;ve applied this patch locally (on top of https://bugs.webkit.org/show_bug.cgi?id=78028 with a lot of fixups for RefPtr/OwnPtr, etc) and have made pretty good progress on getting things hooked up.  Once I solidify things a bit more I&apos;ll provide some more feedback either in terms of a patch or just ideas.  I think we&apos;re really close here!

Thanks for the feedback. I just updated the patch based on latest tree and #78028.

The current CCScrollbar implementation just copies everything from Scrollbar. So far so good it looks.

Now I think I have to add some tests for this thing...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568283</commentid>
    <comment_count>17</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-29 20:27:48 -0800</bug_when>
    <thetext>Please post this patch relative to https://bugs.webkit.org/show_bug.cgi?id=78028 and not including it, it&apos;s really hard to view the diff when it has an extra 120kb of stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568285</commentid>
    <comment_count>18</comment_count>
      <attachid>129622</attachid>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-02-29 20:31:23 -0800</bug_when>
    <thetext>Created attachment 129622
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568328</commentid>
    <comment_count>19</comment_count>
      <attachid>129622</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-29 21:44:44 -0800</bug_when>
    <thetext>Comment on attachment 129622
Patch

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

This is not bad but it could be a whole lot simpler.  Consider the state we already have stored on the scrolling layer itself (scrollable area, current scroll offset, visible bounds) - we don&apos;t need to and don&apos;t want to duplicate any of that state on other objects.  The impl-side implementation of ScrollbarThemeClient should use state that&apos;s already being synced to either the scrolling layer or the scrollbar layer whenever possible.  In fact, I don&apos;t think we even need a separate object to implement the theme client - I&apos;m pretty sure CCScrollbarLayerImpl can implement that interface directly if it has a back (raw) pointer to the CCLayerImpl that scrolls in order to query the current scroll position, etc.

&gt; Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:67
&gt; +static GraphicsLayer* scrollLayerForFrameView(FrameView* frameView)

this function isn&apos;t necessary - we have the scroll layer stored in m_private already. see the other ScrollingCoordinatorChromium functions

&gt; Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:89
&gt; +    else {

this nesting is a little awkward.  i think this would look cleaner if it took care of the early-outs and returned instead of nesting

&gt; Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:92
&gt; +        if (scrollbar-&gt;theme() != ScrollbarTheme::theme() || scrollbar-&gt;isCustomScrollbar())

why both checks? should be able to just check isCustomScrollbar(), no?

&gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h:100
&gt; +    virtual bool hasContentsLayer() const { return m_contentsLayer; }

what&apos;s this change for? i can&apos;t find any callers

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:322
&gt; +    ScrollbarLayerChromium *m_horizontalScrollbarLayer;
&gt; +    ScrollbarLayerChromium *m_verticalScrollbarLayer;

the * belongs with the type, not the variable name

i don&apos;t think we actually need pointers here though - can&apos;t we just store layer IDs for the horizontal / vertical layers instead of pointers?

&gt; Source/WebCore/platform/graphics/chromium/ScrollbarLayerChromium.cpp:58
&gt; +    scrollbar-&gt;pullPropertiesFrom(m_scrollbar.get());

why is a function called pushPropertiesTo() calling another function called pullPropertiesFrom()? feels like a bad tug of war

&gt; Source/WebCore/platform/graphics/chromium/ScrollbarLayerChromium.cpp:59
&gt; +    scrollbar-&gt;setFrameRect(IntRect(IntPoint(), scrollbarLayer-&gt;contentBounds()));

this isn&apos;t necessary. the scrollbar layer knows its bounds, why are we pushing anything redundantly to the scrollbar?

&gt; Source/WebCore/platform/graphics/chromium/ScrollbarLayerChromium.h:48
&gt; +    RefPtr&lt;Scrollbar&gt; m_scrollbar;

this seems very wrong. the layer shouldn&apos;t have any ownership concern with the scrollbar.

&gt; Source/WebCore/platform/graphics/chromium/TreeSynchronizer.cpp:42
&gt; +    HashMap&lt;int, CCLayerImpl*&gt; newLayers;

make a typedef for this type as well. i&apos;d suggest RawPtrCCLayerImplMap and renaming CCLayerImplMap to OwningCCLayerImplMap

&gt; Source/WebCore/platform/graphics/chromium/TreeSynchronizer.cpp:53
&gt; -void TreeSynchronizer::collectExistingCCLayerImplRecursive(CCLayerImplMap&amp; map, PassOwnPtr&lt;CCLayerImpl&gt; popCCLayerImpl)
&gt; +void TreeSynchronizer::collectExistingCCLayerImplRecursive(CCLayerImplMap&amp; oldLayers, PassOwnPtr&lt;CCLayerImpl&gt; popCCLayerImpl)

there&apos;s no reason to change this function

&gt; Source/WebCore/platform/graphics/chromium/TreeSynchronizer.cpp:71
&gt; +PassOwnPtr&lt;CCLayerImpl&gt; TreeSynchronizer::reuseOrCreateCCLayerImpl(HashMap&lt;int, CCLayerImpl*&gt; &amp;newLayers, CCLayerImplMap&amp; oldLayers, LayerChromium* layer)

again the &amp; belongs with the type, not the variable name. the type of the parameter is &quot;reference to a hashmap of ints to CCLayerImpl pointers&quot; and the name of the parameter is &quot;newLayers&quot;

&gt; Source/WebCore/platform/graphics/chromium/TreeSynchronizer.cpp:101
&gt; +void TreeSynchronizer::resolveInterLayerPointersRecursive(const HashMap&lt;int, CCLayerImpl*&gt; &amp;newLayers, LayerChromium* layer)

this function name is pretty vague and non-descriptive. the purpose of this function is to update scrollbar layer pointers, let&apos;s call it something that makes it clear. how about updateScrollbarLayerPointersRecursive() ?

if we want to use this functionality to do other weak-pointerish things in the future we can rename the function as appropriate.

&gt; Source/WebCore/platform/graphics/chromium/TreeSynchronizer.cpp:106
&gt; +    if (layer-&gt;m_horizontalScrollbarLayer) {

just provider a getter for the horizontal scrollbar layer (or ID if that&apos;s all we need) - reaching into other classes m_foo&apos;s looks weird and is harder to refactor

&gt; Source/WebCore/platform/graphics/chromium/TreeSynchronizer.cpp:109
&gt; +        ccLayerImpl-&gt;m_horizontalScrollbar-&gt;setCurrentPos(ccLayerImpl-&gt;scrollPosition().x() + ccLayerImpl-&gt;scrollDelta().width());

this is the wrong place to update properties. i don&apos;t think you should be updating the scrollbar position this way at all (see comments elsewhere)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp:201
&gt; +    if (m_horizontalScrollbar)
&gt; +        m_horizontalScrollbar-&gt;setCurrentPos(m_scrollPosition.x() + m_scrollDelta.width());
&gt; +    if (m_verticalScrollbar)
&gt; +        m_verticalScrollbar-&gt;setCurrentPos(m_scrollPosition.y() + m_scrollDelta.height());

this is backwards. the scroll position should live on the layer and scrollbars should pull it, not the other way &apos;round. the only thing we should be doing here is marking the scrollbar layers (not the scrollbars) as needing a repaint

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbar.cpp:110
&gt; +    m_frameRect = scrollbar-&gt;frameRect();

this is pushing a whole lot of unnecessary state. consider:

*) the scrollbar layer has its bounds set up already, which covers frameRect
*) the scrollable layer itself has its current scroll position, visible bounds, and scrollable bounds
*) we know the orientation of the scrollbar when we set the layer up

additionally many bits of state are only needed for layout and input handling on the scrollbar itself which we aren&apos;t doing on the thread. we don&apos;t need any of these bits of state at all:
*) isScrollableAreaActive()
*) isScrollViewScrollbar()
*) lineStep() / pageStep()
*) scrollbarOverlayStyle()

the only bits that we actually want need to get from the Scrollbar itself are:
*) enabled (so we know whether to draw the scrollbar greyed out or not)
*) hovered / pressed parts (so we know whether to draw that bit of the theme)
*) tickmarks so we can draw those

to be more consistent with other state we should push these bits of state in ScrollbarLayerChromium::pushPropertiesTo

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:57
&gt; +    if (bounds().isEmpty() || contentBounds().isEmpty())

ideally we wouldn&apos;t need to regenerate a texture every frame but only if the scroll position or some scrollbar state updated. we could do that as a follow-up, however

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:89
&gt; +    grContext-&gt;resetContext();

no no, as i said before we can&apos;t use ganesh on the compositor context. just software paint and upload to a texture.  this is really easy if you use PlatformCanvas (in Source/WebCore/platform/graphics/chromium). just be careful about what pixel order you paint and upload in

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:112
&gt; +    ScrollbarTheme* theme = ScrollbarTheme::theme(); // FIXME

FIXME with no elaboration is useless. what does this FIXME mean?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:115
&gt; +    if (theme-&gt;usesOverlayScrollbars())
&gt; +        context-&gt;clearRect(IntRect(IntPoint(), contentBounds()));

i don&apos;t understand this branch

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.h:47
&gt; +    void paint(GraphicsContext*);

why is this public?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.h:52
&gt; +    CCScrollbarLayerImpl(int id);

explicit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568834</commentid>
    <comment_count>20</comment_count>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-03-01 12:48:32 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 129622 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129622&amp;action=review
&gt; 
&gt; This is not bad but it could be a whole lot simpler.  Consider the state we already have stored on the scrolling layer itself (scrollable area, current scroll offset, visible bounds) - we don&apos;t need to and don&apos;t want to duplicate any of that state on other objects.  The impl-side implementation of ScrollbarThemeClient should use state that&apos;s already being synced to either the scrolling layer or the scrollbar layer whenever possible.  In fact, I don&apos;t think we even need a separate object to implement the theme client - I&apos;m pretty sure CCScrollbarLayerImpl can implement that interface directly if it has a back (raw) pointer to the CCLayerImpl that scrolls in order to query the current scroll position, etc.

Unfortunately we can&apos;t, due to namespace problem... Both CCLayerImpl and ScrollbarThemeClient has parent() function.
I would consider write CCScrollbar as a nested class.

&gt; &gt; Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:67
&gt; &gt; +static GraphicsLayer* scrollLayerForFrameView(FrameView* frameView)
&gt; 
&gt; this function isn&apos;t necessary - we have the scroll layer stored in m_private already. see the other ScrollingCoordinatorChromium functions

cool. done

&gt; &gt; Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:89
&gt; &gt; +    else {
&gt; 
&gt; this nesting is a little awkward.  i think this would look cleaner if it took care of the early-outs and returned instead of nesting

done

&gt; &gt; Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:92
&gt; &gt; +        if (scrollbar-&gt;theme() != ScrollbarTheme::theme() || scrollbar-&gt;isCustomScrollbar())
&gt; 
&gt; why both checks? should be able to just check isCustomScrollbar(), no?

should be alright. I just keep imagine there might be more than one theme at the same time...

&gt; &gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h:100
&gt; &gt; +    virtual bool hasContentsLayer() const { return m_contentsLayer; }
&gt; 
&gt; what&apos;s this change for? i can&apos;t find any callers

it is used somewhere in the scrollbar layer positioning logic (existing code). if it finds the scrollbar layer has contents, it will hide the main layer. it is a standard part of GraphlicsLayer, I think we need to implement it anyway.

&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:322
&gt; &gt; +    ScrollbarLayerChromium *m_horizontalScrollbarLayer;
&gt; &gt; +    ScrollbarLayerChromium *m_verticalScrollbarLayer;
&gt; 
&gt; the * belongs with the type, not the variable name

done

&gt; i don&apos;t think we actually need pointers here though - can&apos;t we just store layer IDs for the horizontal / vertical layers instead of pointers?

yes if we always pull scroll offset instead of pushing. I&apos;ll try if we can do that.

&gt; &gt; Source/WebCore/platform/graphics/chromium/ScrollbarLayerChromium.cpp:58
&gt; &gt; +    scrollbar-&gt;pullPropertiesFrom(m_scrollbar.get());
&gt; 
&gt; why is a function called pushPropertiesTo() calling another function called pullPropertiesFrom()? feels like a bad tug of war

ideally I want to add a Scrollbar::pushPropertiesTo, but Scrollbar is not in our control.
The other way is to let CCScrollbar make friend with ScrollbarLayerChromium, the layer will push everything.

&gt; &gt; Source/WebCore/platform/graphics/chromium/ScrollbarLayerChromium.cpp:59
&gt; &gt; +    scrollbar-&gt;setFrameRect(IntRect(IntPoint(), scrollbarLayer-&gt;contentBounds()));
&gt; 
&gt; this isn&apos;t necessary. the scrollbar layer knows its bounds, why are we pushing anything redundantly to the scrollbar?

done. I just copied everything brainlessly. lol

&gt; &gt; Source/WebCore/platform/graphics/chromium/ScrollbarLayerChromium.h:48
&gt; &gt; +    RefPtr&lt;Scrollbar&gt; m_scrollbar;
&gt; 
&gt; this seems very wrong. the layer shouldn&apos;t have any ownership concern with the scrollbar.

the alternative would be copying everything when creating ScrollbarLayerChromium.

&gt; &gt; Source/WebCore/platform/graphics/chromium/TreeSynchronizer.cpp:42
&gt; &gt; +    HashMap&lt;int, CCLayerImpl*&gt; newLayers;
&gt; 
&gt; make a typedef for this type as well. i&apos;d suggest RawPtrCCLayerImplMap and renaming CCLayerImplMap to OwningCCLayerImplMap

sounds good. done

&gt; &gt; Source/WebCore/platform/graphics/chromium/TreeSynchronizer.cpp:53
&gt; &gt; -void TreeSynchronizer::collectExistingCCLayerImplRecursive(CCLayerImplMap&amp; map, PassOwnPtr&lt;CCLayerImpl&gt; popCCLayerImpl)
&gt; &gt; +void TreeSynchronizer::collectExistingCCLayerImplRecursive(CCLayerImplMap&amp; oldLayers, PassOwnPtr&lt;CCLayerImpl&gt; popCCLayerImpl)
&gt; 
&gt; there&apos;s no reason to change this function

just to make the variable name consistent with other functions.

&gt; &gt; Source/WebCore/platform/graphics/chromium/TreeSynchronizer.cpp:71
&gt; &gt; +PassOwnPtr&lt;CCLayerImpl&gt; TreeSynchronizer::reuseOrCreateCCLayerImpl(HashMap&lt;int, CCLayerImpl*&gt; &amp;newLayers, CCLayerImplMap&amp; oldLayers, LayerChromium* layer)
&gt; 
&gt; again the &amp; belongs with the type, not the variable name. the type of the parameter is &quot;reference to a hashmap of ints to CCLayerImpl pointers&quot; and the name of the parameter is &quot;newLayers&quot;

done

&gt; &gt; Source/WebCore/platform/graphics/chromium/TreeSynchronizer.cpp:101
&gt; &gt; +void TreeSynchronizer::resolveInterLayerPointersRecursive(const HashMap&lt;int, CCLayerImpl*&gt; &amp;newLayers, LayerChromium* layer)
&gt; 
&gt; this function name is pretty vague and non-descriptive. the purpose of this function is to update scrollbar layer pointers, let&apos;s call it something that makes it clear. how about updateScrollbarLayerPointersRecursive() ?
&gt; 
&gt; if we want to use this functionality to do other weak-pointerish things in the future we can rename the function as appropriate.

ok, sounds good

&gt; &gt; Source/WebCore/platform/graphics/chromium/TreeSynchronizer.cpp:106
&gt; &gt; +    if (layer-&gt;m_horizontalScrollbarLayer) {
&gt; 
&gt; just provider a getter for the horizontal scrollbar layer (or ID if that&apos;s all we need) - reaching into other classes m_foo&apos;s looks weird and is harder to refactor

done

&gt; &gt; Source/WebCore/platform/graphics/chromium/TreeSynchronizer.cpp:109
&gt; &gt; +        ccLayerImpl-&gt;m_horizontalScrollbar-&gt;setCurrentPos(ccLayerImpl-&gt;scrollPosition().x() + ccLayerImpl-&gt;scrollDelta().width());
&gt; 
&gt; this is the wrong place to update properties. i don&apos;t think you should be updating the scrollbar position this way at all (see comments elsewhere)
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp:201
&gt; &gt; +    if (m_horizontalScrollbar)
&gt; &gt; +        m_horizontalScrollbar-&gt;setCurrentPos(m_scrollPosition.x() + m_scrollDelta.width());
&gt; &gt; +    if (m_verticalScrollbar)
&gt; &gt; +        m_verticalScrollbar-&gt;setCurrentPos(m_scrollPosition.y() + m_scrollDelta.height());
&gt; 
&gt; this is backwards. the scroll position should live on the layer and scrollbars should pull it, not the other way &apos;round. the only thing we should be doing here is marking the scrollbar layers (not the scrollbars) as needing a repaint
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbar.cpp:110
&gt; &gt; +    m_frameRect = scrollbar-&gt;frameRect();
&gt; 
&gt; this is pushing a whole lot of unnecessary state. consider:
&gt; 
&gt; *) the scrollbar layer has its bounds set up already, which covers frameRect
&gt; *) the scrollable layer itself has its current scroll position, visible bounds, and scrollable bounds
&gt; *) we know the orientation of the scrollbar when we set the layer up
&gt; 
&gt; additionally many bits of state are only needed for layout and input handling on the scrollbar itself which we aren&apos;t doing on the thread. we don&apos;t need any of these bits of state at all:
&gt; *) isScrollableAreaActive()
&gt; *) isScrollViewScrollbar()
&gt; *) lineStep() / pageStep()
&gt; *) scrollbarOverlayStyle()

I&apos;m agree with lineStep / pageStep, however a theme might decide to draw differently depending on whether the scrollable area is active or not. Does it make sense?

And scrollbar overlay style is used by Apple to change the color of the overlay scrollbar based on the background color of the scrollable area. We probably don&apos;t used it currently, but I think we should sync it.

&gt; the only bits that we actually want need to get from the Scrollbar itself are:
&gt; *) enabled (so we know whether to draw the scrollbar greyed out or not)
&gt; *) hovered / pressed parts (so we know whether to draw that bit of the theme)
&gt; *) tickmarks so we can draw those
&gt; 
&gt; to be more consistent with other state we should push these bits of state in ScrollbarLayerChromium::pushPropertiesTo
&gt;
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:57
&gt; &gt; +    if (bounds().isEmpty() || contentBounds().isEmpty())
&gt; 
&gt; ideally we wouldn&apos;t need to regenerate a texture every frame but only if the scroll position or some scrollbar state updated. we could do that as a follow-up, however

ok

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:89
&gt; &gt; +    grContext-&gt;resetContext();
&gt; 
&gt; no no, as i said before we can&apos;t use ganesh on the compositor context. just software paint and upload to a texture.  this is really easy if you use PlatformCanvas (in Source/WebCore/platform/graphics/chromium). just be careful about what pixel order you paint and upload in

ok

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:112
&gt; &gt; +    ScrollbarTheme* theme = ScrollbarTheme::theme(); // FIXME
&gt; 
&gt; FIXME with no elaboration is useless. what does this FIXME mean?

We might need to make a clone of the theme. Though none of the platform we support have thread-safety issue currently. I&apos;m thinking when we add android scrollbar animation timer later on, we might need to store data in the theme.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:115
&gt; &gt; +    if (theme-&gt;usesOverlayScrollbars())
&gt; &gt; +        context-&gt;clearRect(IntRect(IntPoint(), contentBounds()));
&gt; 
&gt; i don&apos;t understand this branch

if the scrollbar is opaque, we don&apos;t need to clear canvas. non-overlay scrollbars are always opaque.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.h:47
&gt; &gt; +    void paint(GraphicsContext*);
&gt; 
&gt; why is this public?

a mistake. done

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.h:52
&gt; &gt; +    CCScrollbarLayerImpl(int id);
&gt; 
&gt; explicit

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568846</commentid>
    <comment_count>21</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-01 13:17:33 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; (From update of attachment 129622 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129622&amp;action=review
&gt; &gt; 
&gt; &gt; This is not bad but it could be a whole lot simpler.  Consider the state we already have stored on the scrolling layer itself (scrollable area, current scroll offset, visible bounds) - we don&apos;t need to and don&apos;t want to duplicate any of that state on other objects.  The impl-side implementation of ScrollbarThemeClient should use state that&apos;s already being synced to either the scrolling layer or the scrollbar layer whenever possible.  In fact, I don&apos;t think we even need a separate object to implement the theme client - I&apos;m pretty sure CCScrollbarLayerImpl can implement that interface directly if it has a back (raw) pointer to the CCLayerImpl that scrolls in order to query the current scroll position, etc.
&gt; 
&gt; Unfortunately we can&apos;t, due to namespace problem... Both CCLayerImpl and ScrollbarThemeClient has parent() function.
&gt; I would consider write CCScrollbar as a nested class.

Ouch, that&apos;s unfortunate!  It looks like nobody is using ScrollbarThemeClient::parent() so maybe we can remove that at some point.

For now a nested class sounds good.  The main benefit is that we shouldn&apos;t have to worry about the lifetime of the CCScrollbarLayerImpl and the thing implementing ScrollbarThemeClient separately - they are always 1:1

&gt; &gt; &gt; Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:92
&gt; &gt; &gt; +        if (scrollbar-&gt;theme() != ScrollbarTheme::theme() || scrollbar-&gt;isCustomScrollbar())
&gt; &gt; 
&gt; &gt; why both checks? should be able to just check isCustomScrollbar(), no?
&gt; 
&gt; should be alright. I just keep imagine there might be more than one theme at the same time...
&gt; 

I&apos;m pretty sure the only way to use a theme other than ScrollbarTheme::theme() is by setting isCustomScrollbar()

&gt; 
&gt; I&apos;m agree with lineStep / pageStep, however a theme might decide to draw differently depending on whether the scrollable area is active or not. Does it make sense?
&gt; 
&gt; And scrollbar overlay style is used by Apple to change the color of the overlay scrollbar based on the background color of the scrollable area. We probably don&apos;t used it currently, but I think we should sync it.
&gt; 

Let&apos;s not worry about the Mac theme too much yet.  We want this code to work on Android and ChromeOS (which uses the Linux theme).


&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:112
&gt; &gt; &gt; +    ScrollbarTheme* theme = ScrollbarTheme::theme(); // FIXME
&gt; &gt; 
&gt; &gt; FIXME with no elaboration is useless. what does this FIXME mean?
&gt; 
&gt; We might need to make a clone of the theme. Though none of the platform we support have thread-safety issue currently. I&apos;m thinking when we add android scrollbar animation timer later on, we might need to store data in the theme.

The theme itself shouldn&apos;t have any state, it&apos;s meant to be a pretty much purely functional thing.  That appears to be the case today for the Linux and Android themes at least.  It&apos;s not true for the Mac theme today but let&apos;s worry about that when we get to it (some time out, I think).

It&apos;s OK to have a FIXME here to keep this in mind when expanding to future themes, but the comment needs to say what the concern is.

&gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:115
&gt; &gt; &gt; +    if (theme-&gt;usesOverlayScrollbars())
&gt; &gt; &gt; +        context-&gt;clearRect(IntRect(IntPoint(), contentBounds()));
&gt; &gt; 
&gt; &gt; i don&apos;t understand this branch
&gt; 
&gt; if the scrollbar is opaque, we don&apos;t need to clear canvas. non-overlay scrollbars are always opaque.

That isn&apos;t actually true - non-overlay scrollbars are not always opaque. Non-overlay *root* scrollbars are always opaque. This will be a bit of a landmine when we extend this code in the future, I&apos;m not sure it&apos;s worth the cost of one memset().  If you do want to leave it here leave a FIXME at least so we know to check this again in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569128</commentid>
    <comment_count>22</comment_count>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-03-01 18:08:52 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/ScrollbarLayerChromium.h:48
&gt; &gt; &gt; +    RefPtr&lt;Scrollbar&gt; m_scrollbar;
&gt; &gt; 
&gt; &gt; this seems very wrong. the layer shouldn&apos;t have any ownership concern with the scrollbar.
&gt; 
&gt; the alternative would be copying everything when creating ScrollbarLayerChromium.

I find this won&apos;t work. m_visibleSize and m_totalSize is something very dynamic, we need to update their value on every commits.
I think we might be able to get these information from the layer data, any suggestion?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569142</commentid>
    <comment_count>23</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-01 18:23:30 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #20)
&gt; &gt; (In reply to comment #19)
&gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/ScrollbarLayerChromium.h:48
&gt; &gt; &gt; &gt; +    RefPtr&lt;Scrollbar&gt; m_scrollbar;
&gt; &gt; &gt; 
&gt; &gt; &gt; this seems very wrong. the layer shouldn&apos;t have any ownership concern with the scrollbar.
&gt; &gt; 
&gt; &gt; the alternative would be copying everything when creating ScrollbarLayerChromium.
&gt; 
&gt; I find this won&apos;t work. m_visibleSize and m_totalSize is something very dynamic, we need to update their value on every commits.
&gt; I think we might be able to get these information from the layer data, any suggestion?

These are asking about the visible / total size of the scrollable area, not the scrollbar itself.  I think you should get those from the CCLayerImpl that&apos;s actually scrolling by giving the CCScrollbar (or CCScrollbarLayerImpl) a weak pointer to the CCLayerImpl that scrolls.  For example, totalSize() is some combination of the CCLayerImpl&apos;s maxScrollPosition, bounds, etc.

Keep in mind that these values can change on the thread without us going through a commit - for example, if the page scale changes due to a pinch gesture that changes the max scroll position and thus the totalSize() value. I think the only way to stay sane with these updates is to always query the value from the scrolling layer and not try to proactively sync them to other objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569197</commentid>
    <comment_count>24</comment_count>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-03-01 20:04:48 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #22)
&gt; &gt; (In reply to comment #20)
&gt; &gt; &gt; (In reply to comment #19)
&gt; &gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/ScrollbarLayerChromium.h:48
&gt; &gt; &gt; &gt; &gt; +    RefPtr&lt;Scrollbar&gt; m_scrollbar;
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; this seems very wrong. the layer shouldn&apos;t have any ownership concern with the scrollbar.
&gt; &gt; &gt; 
&gt; &gt; &gt; the alternative would be copying everything when creating ScrollbarLayerChromium.
&gt; &gt; 
&gt; &gt; I find this won&apos;t work. m_visibleSize and m_totalSize is something very dynamic, we need to update their value on every commits.
&gt; &gt; I think we might be able to get these information from the layer data, any suggestion?
&gt; 
&gt; These are asking about the visible / total size of the scrollable area, not the scrollbar itself.  I think you should get those from the CCLayerImpl that&apos;s actually scrolling by giving the CCScrollbar (or CCScrollbarLayerImpl) a weak pointer to the CCLayerImpl that scrolls.  For example, totalSize() is some combination of the CCLayerImpl&apos;s maxScrollPosition, bounds, etc.
&gt; 
&gt; Keep in mind that these values can change on the thread without us going through a commit - for example, if the page scale changes due to a pinch gesture that changes the max scroll position and thus the totalSize() value. I think the only way to stay sane with these updates is to always query the value from the scrolling layer and not try to proactively sync them to other objects.

Ok, I managed to get all the values. (for totalSize again we use m_scrollLayer-&gt;children()[0]-&gt;contentBounds() hack)

However I observed that the scroll maximum is not 100% identical to the main-side. The impl-side scroll maximum is slight smaller than the main-side on http://www.nytimes.com/ This can be easily reproduced using arrow-key scroll (slow) and mouse-wheel scroll (fast).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569204</commentid>
    <comment_count>25</comment_count>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-03-01 20:21:56 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #23)
&gt; &gt; (In reply to comment #22)
&gt; &gt; &gt; (In reply to comment #20)
&gt; &gt; &gt; &gt; (In reply to comment #19)
&gt; &gt; &gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/ScrollbarLayerChromium.h:48
&gt; &gt; &gt; &gt; &gt; &gt; +    RefPtr&lt;Scrollbar&gt; m_scrollbar;
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; this seems very wrong. the layer shouldn&apos;t have any ownership concern with the scrollbar.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; the alternative would be copying everything when creating ScrollbarLayerChromium.
&gt; &gt; &gt; 
&gt; &gt; &gt; I find this won&apos;t work. m_visibleSize and m_totalSize is something very dynamic, we need to update their value on every commits.
&gt; &gt; &gt; I think we might be able to get these information from the layer data, any suggestion?
&gt; &gt; 
&gt; &gt; These are asking about the visible / total size of the scrollable area, not the scrollbar itself.  I think you should get those from the CCLayerImpl that&apos;s actually scrolling by giving the CCScrollbar (or CCScrollbarLayerImpl) a weak pointer to the CCLayerImpl that scrolls.  For example, totalSize() is some combination of the CCLayerImpl&apos;s maxScrollPosition, bounds, etc.
&gt; &gt; 
&gt; &gt; Keep in mind that these values can change on the thread without us going through a commit - for example, if the page scale changes due to a pinch gesture that changes the max scroll position and thus the totalSize() value. I think the only way to stay sane with these updates is to always query the value from the scrolling layer and not try to proactively sync them to other objects.
&gt; 
&gt; Ok, I managed to get all the values. (for totalSize again we use m_scrollLayer-&gt;children()[0]-&gt;contentBounds() hack)
&gt; 
&gt; However I observed that the scroll maximum is not 100% identical to the main-side. The impl-side scroll maximum is slight smaller than the main-side on http://www.nytimes.com/ This can be easily reproduced using arrow-key scroll (slow) and mouse-wheel scroll (fast).

NVM. Can no longer reproduce this after merging to latest tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569206</commentid>
    <comment_count>26</comment_count>
      <attachid>129800</attachid>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-03-01 20:24:30 -0800</bug_when>
    <thetext>Created attachment 129800
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569313</commentid>
    <comment_count>27</comment_count>
      <attachid>129800</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-01 23:16:22 -0800</bug_when>
    <thetext>Comment on attachment 129800
Patch

Attachment 129800 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11766793

New failing tests:
compositing/iframes/scrolling-iframe.html
compositing/geometry/fixed-in-composited.html
compositing/geometry/vertical-scroll-composited.html
compositing/iframes/connect-compositing-iframe-delayed.html
compositing/direct-image-compositing.html
compositing/iframes/connect-compositing-iframe2.html
compositing/geometry/fixed-position.html
http/tests/inspector/inspect-element.html
accessibility/aria-disabled.html
compositing/masks/multiple-masks.html
compositing/iframes/overlapped-iframe.html
compositing/iframes/become-overlapped-iframe.html
compositing/geometry/tall-page-composited.html
compositing/iframes/iframe-resize.html
compositing/masks/simple-composited-mask.html
compositing/culling/filter-occlusion-alpha-large.html
compositing/iframes/connect-compositing-iframe3.html
compositing/scaling/tiled-layer-recursion.html
compositing/iframes/enter-compositing-iframe.html
compositing/geometry/horizontal-scroll-composited.html
compositing/reflections/nested-reflection-opacity.html
compositing/culling/filter-occlusion-blur.html
compositing/iframes/connect-compositing-iframe.html
compositing/iframes/iframe-size-from-zero.html
compositing/iframes/composited-parent-iframe.html
compositing/iframes/invisible-nested-iframe-show.html
compositing/overflow/fixed-position-ancestor-clip.html
compositing/culling/filter-occlusion-blur-large.html
compositing/iframes/resizer.html
compositing/reflections/reflection-ordering.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569824</commentid>
    <comment_count>28</comment_count>
      <attachid>129800</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-02 11:59:35 -0800</bug_when>
    <thetext>Comment on attachment 129800
Patch

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

So close!  I think if we restrict this to only running in threaded mode (so not on by default yet) we can land this (with the inline comments addressed) and then iterate on getting it perfect before we either turn the thread on by default or enable this everywhere.

At a high level I think we have a bit of work to do in order to sync Scrollbar state to the layer properly (example: the tickmarks list). Let&apos;s get this in and then file a new bug to figure out an approach for all that.

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests. (OOPS!)

there&apos;s an SVN presubmit check that will reject this line. please put a description of what this patch does and say which tests (if any) cover the behavior

&gt; Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:69
&gt; +    if (!horizontalScrollbarLayer)

also check coordinatesScrollingForFrameView(frameView) here - it&apos;s not beneficial for us to set up special scrollbar layers for things that we aren&apos;t scrolling on the thread.

I also think we should guard this with CCProxy::hasImplThread() to only enable the scrollbar layers when running in threaded mode, so we don&apos;t turn this on for everyone as soon as it lands. There are some benefits to using this even in the single-thread case but I&apos;d prefer to land the functionality, fix a few of the performance issues, etc, and then turn it on for the rest of the world.

same comments go for the vertical case. We could probably factor a lot of these checks into a helper function

&gt; Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:77
&gt; +    if (scrollbar-&gt;isCustomScrollbar())

i don&apos;t think this is sufficient checking for custom scrollbars.  Consider the case of a scrollbar that goes from being non-custom to custom (say by some external stylesheet loading).  In that case, we&apos;ll first run through this code with isCustomScrollbar() == false and set up a scrollbar layer.  Then, at some point in the future we&apos;ll come through this code again with isCustomScrollbar() == true. We need to tear down the scrollbar layer and revert back to rendering with the normal layer.

&gt; Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:81
&gt; +    horizontalScrollbarLayer-&gt;setContentsToMedia(scrollbarLayer.get());

this will set up the ScrollbarLayerChromium to render, but the scroll layer is still rendering as well. This is wasteful and in the case of a non-opaque scrollbar will render incorrectly. I think you need to call setDrawsContent(false) on the GraphicsLayer to make the contents layer the only thing that renders.

be sure to undo that when undoing the layer if the scrollbar becomes custom

&gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h:100
&gt; +    virtual bool hasContentsLayer() const { return m_contentsLayer; }

don&apos;t make this change in this patch unless it&apos;s necessary for this patch. if you just want to add it because you feel we should have it, file a separate bug and attach a patch with it there

&gt; Source/WebCore/platform/graphics/chromium/ScrollbarLayerChromium.cpp:57
&gt; +    scrollbar-&gt;getTickmarks(m_tickmarks);

how do the tickmarks (or other scrollbar state) get updated after the layer is created?

&gt; Source/WebCore/platform/graphics/chromium/ScrollbarLayerChromium.h:52
&gt; +    LayerChromium* m_scrollLayer;

do we need a layer pointer here, or can we use just an ID?  I think using an ID is a lot safer since we don&apos;t have to worry about this pointer going stale.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:109
&gt; +int CCScrollbarLayerImpl::CCScrollbar::x() const { return frameRect().x(); }

please expand this (and the rest of the functions in here) out. it&apos;s more LOC, yes, but the current code is really dense and hard to read IMO.  we do often write short functions as one-liners in headers but this is a .cpp

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:165
&gt; +    // TODO(aelias): Hardcoding the first child here is weird. Think of

nit: WebKit style is that this should be a FIXME with no (owner)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.h:77
&gt; +        CCScrollbar(CCScrollbarLayerImpl* owner) : m_owner(owner) { }

explicit, please</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569970</commentid>
    <comment_count>29</comment_count>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-03-02 15:02:24 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; (From update of attachment 129800 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129800&amp;action=review
&gt; 
&gt; So close!  I think if we restrict this to only running in threaded mode (so not on by default yet) we can land this (with the inline comments addressed) and then iterate on getting it perfect before we either turn the thread on by default or enable this everywhere.

I want to leave it enabled until the last moment before committing so we can catch more bugs with EWS.

&gt; At a high level I think we have a bit of work to do in order to sync Scrollbar state to the layer properly (example: the tickmarks list). Let&apos;s get this in and then file a new bug to figure out an approach for all that.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        No new tests. (OOPS!)
&gt; 
&gt; there&apos;s an SVN presubmit check that will reject this line. please put a description of what this patch does and say which tests (if any) cover the behavior

I&apos;ll add some test later on. Like making sure scroll layer pointers are properly resolved.

&gt; &gt; Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:69
&gt; &gt; +    if (!horizontalScrollbarLayer)
&gt; 
&gt; also check coordinatesScrollingForFrameView(frameView) here - it&apos;s not beneficial for us to set up special scrollbar layers for things that we aren&apos;t scrolling on the thread.
&gt; 
&gt; I also think we should guard this with CCProxy::hasImplThread() to only enable the scrollbar layers when running in threaded mode, so we don&apos;t turn this on for everyone as soon as it lands. There are some benefits to using this even in the single-thread case but I&apos;d prefer to land the functionality, fix a few of the performance issues, etc, and then turn it on for the rest of the world.
&gt; 
&gt; same comments go for the vertical case. We could probably factor a lot of these checks into a helper function
&gt; 
&gt; &gt; Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:77
&gt; &gt; +    if (scrollbar-&gt;isCustomScrollbar())
&gt; 
&gt; i don&apos;t think this is sufficient checking for custom scrollbars.  Consider the case of a scrollbar that goes from being non-custom to custom (say by some external stylesheet loading).  In that case, we&apos;ll first run through this code with isCustomScrollbar() == false and set up a scrollbar layer.  Then, at some point in the future we&apos;ll come through this code again with isCustomScrollbar() == true. We need to tear down the scrollbar layer and revert back to rendering with the normal layer.

Doesn&apos;t a switch from Scrollbar to RenderScrollbar remove and re-create the graphics layers? Anyway I agree cleaning the layer explicitly is better than let someone cleanup for us. I think setContentsToMedia(0) will do the trick.

&gt; &gt; Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:81
&gt; &gt; +    horizontalScrollbarLayer-&gt;setContentsToMedia(scrollbarLayer.get());
&gt; 
&gt; this will set up the ScrollbarLayerChromium to render, but the scroll layer is still rendering as well. This is wasteful and in the case of a non-opaque scrollbar will render incorrectly. I think you need to call setDrawsContent(false) on the GraphicsLayer to make the contents layer the only thing that renders.
&gt; 
&gt; be sure to undo that when undoing the layer if the scrollbar becomes custom

No need to undo because by default m_drawsContent is false. It is enabled in ScrollView.cpp:positionScrollbarLayer()

I think we have to call setDrawsContent(false) though, in case of this execution path: page load -&gt; custom scrollbar enabled -&gt; setDrawsContent(true) -&gt; custom scrollbar disabled -&gt; scrollbar layer attached but m_drawsContent is still true

However I doubt ScrollCoordinator is the right place. IMO positionScrollbarLayer is a better place since all scrollbar layer visibility code are there.

&gt; &gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h:100
&gt; &gt; +    virtual bool hasContentsLayer() const { return m_contentsLayer; }
&gt; 
&gt; don&apos;t make this change in this patch unless it&apos;s necessary for this patch. if you just want to add it because you feel we should have it, file a separate bug and attach a patch with it there

It is, see ScrollView.cpp:positionScrollbarLayer()

&gt; &gt; Source/WebCore/platform/graphics/chromium/ScrollbarLayerChromium.cpp:57
&gt; &gt; +    scrollbar-&gt;getTickmarks(m_tickmarks);
&gt; 
&gt; how do the tickmarks (or other scrollbar state) get updated after the layer is created?

Argh! I forgot tickmarks is also dynamic. Let&apos;s skip tickmarks for this patch?

&gt; &gt; Source/WebCore/platform/graphics/chromium/ScrollbarLayerChromium.h:52
&gt; &gt; +    LayerChromium* m_scrollLayer;
&gt; 
&gt; do we need a layer pointer here, or can we use just an ID?  I think using an ID is a lot safer since we don&apos;t have to worry about this pointer going stale.

Sounds like a good idea. done

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:109
&gt; &gt; +int CCScrollbarLayerImpl::CCScrollbar::x() const { return frameRect().x(); }
&gt; 
&gt; please expand this (and the rest of the functions in here) out. it&apos;s more LOC, yes, but the current code is really dense and hard to read IMO.  we do often write short functions as one-liners in headers but this is a .cpp

done

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:165
&gt; &gt; +    // TODO(aelias): Hardcoding the first child here is weird. Think of
&gt; 
&gt; nit: WebKit style is that this should be a FIXME with no (owner)

done

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.h:77
&gt; &gt; +        CCScrollbar(CCScrollbarLayerImpl* owner) : m_owner(owner) { }
&gt; 
&gt; explicit, please

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569990</commentid>
    <comment_count>30</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-02 15:28:09 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; (In reply to comment #28)
&gt; &gt; (From update of attachment 129800 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129800&amp;action=review
&gt; &gt; 
&gt; &gt; So close!  I think if we restrict this to only running in threaded mode (so not on by default yet) we can land this (with the inline comments addressed) and then iterate on getting it perfect before we either turn the thread on by default or enable this everywhere.
&gt; 
&gt; I want to leave it enabled until the last moment before committing so we can catch more bugs with EWS.

That&apos;s a sound plan, IMO.  Looks like this patch mispaints some scrollbars somewhere.

&gt; 
&gt; &gt; At a high level I think we have a bit of work to do in order to sync Scrollbar state to the layer properly (example: the tickmarks list). Let&apos;s get this in and then file a new bug to figure out an approach for all that.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; &gt; +        No new tests. (OOPS!)
&gt; &gt; 
&gt; &gt; there&apos;s an SVN presubmit check that will reject this line. please put a description of what this patch does and say which tests (if any) cover the behavior
&gt; 
&gt; I&apos;ll add some test later on. Like making sure scroll layer pointers are properly resolved.

Cool.

&gt; 
&gt; &gt; &gt; Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:69
&gt; &gt; &gt; +    if (!horizontalScrollbarLayer)
&gt; &gt; 
&gt; &gt; also check coordinatesScrollingForFrameView(frameView) here - it&apos;s not beneficial for us to set up special scrollbar layers for things that we aren&apos;t scrolling on the thread.
&gt; &gt; 
&gt; &gt; I also think we should guard this with CCProxy::hasImplThread() to only enable the scrollbar layers when running in threaded mode, so we don&apos;t turn this on for everyone as soon as it lands. There are some benefits to using this even in the single-thread case but I&apos;d prefer to land the functionality, fix a few of the performance issues, etc, and then turn it on for the rest of the world.
&gt; &gt; 
&gt; &gt; same comments go for the vertical case. We could probably factor a lot of these checks into a helper function
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:77
&gt; &gt; &gt; +    if (scrollbar-&gt;isCustomScrollbar())
&gt; &gt; 
&gt; &gt; i don&apos;t think this is sufficient checking for custom scrollbars.  Consider the case of a scrollbar that goes from being non-custom to custom (say by some external stylesheet loading).  In that case, we&apos;ll first run through this code with isCustomScrollbar() == false and set up a scrollbar layer.  Then, at some point in the future we&apos;ll come through this code again with isCustomScrollbar() == true. We need to tear down the scrollbar layer and revert back to rendering with the normal layer.
&gt; 
&gt; Doesn&apos;t a switch from Scrollbar to RenderScrollbar remove and re-create the graphics layers? Anyway I agree cleaning the layer explicitly is better than let someone cleanup for us. I think setContentsToMedia(0) will do the trick.

Looking more closely switching in and out of custom scrollbar mode is just incredibly buggy in general.  Some testcases:

Switching from custom to non-custom: http://software.hixie.ch/utilities/js/live-dom-viewer/saved/1358
Switching from non-custom to custom: http://software.hixie.ch/utilities/js/live-dom-viewer/saved/1359

I have to resize the window to get the style to even show up, and sometimes the scrollbar just vanishes completely :(.

Let&apos;s just do the defensive thing in ScrollingCoordinator, I don&apos;t think we can trust the cross-platform code too much at this point. I think this is rare enough that we can do possibly-redundant cleanup without worry about it.

&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/ScrollbarLayerChromium.cpp:57
&gt; &gt; &gt; +    scrollbar-&gt;getTickmarks(m_tickmarks);
&gt; &gt; 
&gt; &gt; how do the tickmarks (or other scrollbar state) get updated after the layer is created?
&gt; 
&gt; Argh! I forgot tickmarks is also dynamic. Let&apos;s skip tickmarks for this patch?

That&apos;s fine.  We can file a separate bug about tickmarks and just remember to fix it before turning it on for platforms that use them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570896</commentid>
    <comment_count>31</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-05 11:46:43 -0800</bug_when>
    <thetext>*** Bug 79137 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571098</commentid>
    <comment_count>32</comment_count>
      <attachid>130213</attachid>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-03-05 15:27:26 -0800</bug_when>
    <thetext>Created attachment 130213
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571282</commentid>
    <comment_count>33</comment_count>
      <attachid>130213</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-05 17:47:14 -0800</bug_when>
    <thetext>Comment on attachment 130213
Patch

Attachment 130213 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11836073

New failing tests:
compositing/geometry/fixed-position.html
platform/chromium/compositing/layout-width-change.html
compositing/geometry/fixed-in-composited.html
compositing/masks/multiple-masks.html
compositing/iframes/overlapped-nested-iframes.html
compositing/geometry/horizontal-scroll-composited.html
compositing/overflow/fixed-position-ancestor-clip.html
compositing/culling/filter-occlusion-blur-large.html
compositing/direct-image-compositing.html
compositing/geometry/tall-page-composited.html
compositing/geometry/vertical-scroll-composited.html
compositing/masks/simple-composited-mask.html
compositing/culling/filter-occlusion-alpha-large.html
platform/chromium/virtual/gpu/fast/canvas/canvas-text-alignment.html
compositing/iframes/become-composited-nested-iframes.html
platform/chromium/compositing/img-layer-grow.html
compositing/scaling/tiled-layer-recursion.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571368</commentid>
    <comment_count>34</comment_count>
      <attachid>130213</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-05 19:17:26 -0800</bug_when>
    <thetext>Comment on attachment 130213
Patch

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

Some of the rects seem off in various cases.  I tried dumping all properties exposed by ScrollbarThemeClient on the main and impl side for the test compositing/culling/filter-occlusion-alpha-large.html:

erty height is 600
property size().width is 15
property size().height is 600
property location().x is 785
property location().y is 0
property frameRect().x is 785
property frameRect().y is 0
property frameRect().width is 15
property frameRect().height is 600
property value is 0
property visibleSize is 600
property totalSize is 0
property maximum is -600
main thread horizontal scrollbar:
property x is 0
property y is 0
property width is 15
property height is 15
property size().width is 15
property size().height is 15
property location().x is 0
property location().y is 0
property frameRect().x is 0
property frameRect().y is 0
property frameRect().width is 15
property frameRect().height is 15
property value is 0
property visibleSize is 0
property totalSize is 0
property maximum is 0

impl thread vertical scrollbar:
property x is 0
property y is 0
property width is 15
property height is 585
property size().width is 15
property size().height is 585
property location().x is 0
property location().y is 0
property frameRect().x is 0
property frameRect().y is 0
property frameRect().width is 15
property frameRect().height is 585
property value is 0
property visibleSize is 600
property totalSize is 800
property maximum is 200
impl thread horizontal scrollbar:
property x is 0
property y is 0
property width is 785
property height is 15
property size().width is 785
property size().height is 15
property location().x is 0
property location().y is 0
property frameRect().x is 0
property frameRect().y is 0
property frameRect().width is 785
property frameRect().height is 15
property value is 0
property visibleSize is 800
property totalSize is 800
property maximum is 0

printing code here: http://paste.lisp.org/+2QW4, hope this helps

&gt; Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:90
&gt; +    if (scrollbar-&gt;isCustomScrollbar() /* &amp;&amp; CCProxy::hasImplThread() */) { // FIXME: also filter out single thread case when we

looks like this comment trailed off. The idea is to add this check back before landing, right?

this logic is a bit off - i think you want isCustomScrollbar() || !CCProxy::hasImplThread(). if we are a custom scrollbar _or_ if we&apos;re in single threaded mode, disable compositor scrollbar painting

&gt; Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:107
&gt; +    if (!scrollLayer) // workaround calling order problem

Comment seems incomplete.  I think this should be a FIXME, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571377</commentid>
    <comment_count>35</comment_count>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-03-05 19:35:34 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; (From update of attachment 130213 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=130213&amp;action=review
&gt; 
&gt; Some of the rects seem off in various cases.  I tried dumping all properties exposed by ScrollbarThemeClient on the main and impl side for the test compositing/culling/filter-occlusion-alpha-large.html:
&gt; 
&gt; erty height is 600
&gt; property size().width is 15
&gt; property size().height is 600
&gt; property location().x is 785
&gt; property location().y is 0
&gt; property frameRect().x is 785
&gt; property frameRect().y is 0
&gt; property frameRect().width is 15
&gt; property frameRect().height is 600
&gt; property value is 0
&gt; property visibleSize is 600
&gt; property totalSize is 0
&gt; property maximum is -600
&gt; main thread horizontal scrollbar:
&gt; property x is 0
&gt; property y is 0
&gt; property width is 15
&gt; property height is 15
&gt; property size().width is 15
&gt; property size().height is 15
&gt; property location().x is 0
&gt; property location().y is 0
&gt; property frameRect().x is 0
&gt; property frameRect().y is 0
&gt; property frameRect().width is 15
&gt; property frameRect().height is 15
&gt; property value is 0
&gt; property visibleSize is 0
&gt; property totalSize is 0
&gt; property maximum is 0
&gt; 
&gt; impl thread vertical scrollbar:
&gt; property x is 0
&gt; property y is 0
&gt; property width is 15
&gt; property height is 585
&gt; property size().width is 15
&gt; property size().height is 585
&gt; property location().x is 0
&gt; property location().y is 0
&gt; property frameRect().x is 0
&gt; property frameRect().y is 0
&gt; property frameRect().width is 15
&gt; property frameRect().height is 585
&gt; property value is 0
&gt; property visibleSize is 600
&gt; property totalSize is 800
&gt; property maximum is 200
&gt; impl thread horizontal scrollbar:
&gt; property x is 0
&gt; property y is 0
&gt; property width is 785
&gt; property height is 15
&gt; property size().width is 785
&gt; property size().height is 15
&gt; property location().x is 0
&gt; property location().y is 0
&gt; property frameRect().x is 0
&gt; property frameRect().y is 0
&gt; property frameRect().width is 785
&gt; property frameRect().height is 15
&gt; property value is 0
&gt; property visibleSize is 800
&gt; property totalSize is 800
&gt; property maximum is 0
&gt; 
&gt; printing code here: http://paste.lisp.org/+2QW4, hope this helps

The difference in frameRect() is intentional. The frameRect is relative to the GraphicsContext which the scrollbar will be drawn. In impl thread the scrollbar has its exclusive GraphicsContext, so the frameRect should be exactly the bound of the texture.

For the scroll range I feel the values reported from the main thread is weird. Seems like there is a viewport size change, and the new size is propagated to the layers before the Scrollbar. (means the values calculated from impl thread is more up-to-date)

&gt; &gt; Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:90
&gt; &gt; +    if (scrollbar-&gt;isCustomScrollbar() /* &amp;&amp; CCProxy::hasImplThread() */) { // FIXME: also filter out single thread case when we
&gt; 
&gt; looks like this comment trailed off. The idea is to add this check back before landing, right?
&gt; 
&gt; this logic is a bit off - i think you want isCustomScrollbar() || !CCProxy::hasImplThread(). if we are a custom scrollbar _or_ if we&apos;re in single threaded mode, disable compositor scrollbar painting

done. what an embarrassing mistake. lol

&gt; &gt; Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:107
&gt; &gt; +    if (!scrollLayer) // workaround calling order problem
&gt; 
&gt; Comment seems incomplete.  I think this should be a FIXME, right?

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571378</commentid>
    <comment_count>36</comment_count>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-03-05 19:37:36 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; (In reply to comment #34)
&gt; The difference in frameRect() is intentional. The frameRect is relative to the GraphicsContext which the scrollbar will be drawn. In impl thread the scrollbar has its exclusive GraphicsContext, so the frameRect should be exactly the bound of the texture.
&gt; 
&gt; For the scroll range I feel the values reported from the main thread is weird. Seems like there is a viewport size change, and the new size is propagated to the layers before the Scrollbar. (means the values calculated from impl thread is more up-to-date)

CORRECT: viewport size change -&gt; document size change</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571382</commentid>
    <comment_count>37</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-05 19:41:45 -0800</bug_when>
    <thetext>Right - a better comparison would be dumping these values in Scrollbar::paint() when it&apos;s hit on the software path (when this code is disabled) vs the values in the impl side.  Dumping at the frameView..ScrollbarDid() time aren&apos;t going to be necessarily useful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572434</commentid>
    <comment_count>38</comment_count>
      <attachid>130518</attachid>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-03-06 18:53:03 -0800</bug_when>
    <thetext>Created attachment 130518
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572661</commentid>
    <comment_count>39</comment_count>
      <attachid>130518</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-07 00:50:23 -0800</bug_when>
    <thetext>Comment on attachment 130518
Patch

Attachment 130518 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11832862

New failing tests:
compositing/iframes/become-composited-nested-iframes.html
compositing/iframes/overlapped-nested-iframes.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573161</commentid>
    <comment_count>40</comment_count>
      <attachid>130677</attachid>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2012-03-07 13:16:23 -0800</bug_when>
    <thetext>Created attachment 130677
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573659</commentid>
    <comment_count>41</comment_count>
      <attachid>130677</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-07 23:48:23 -0800</bug_when>
    <thetext>Comment on attachment 130677
Patch

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

Nice, and clean EWS to boot. R=me, just need to fix up some comments and put this back behind the thread guard to land.

&gt; Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:90
&gt; +    if (scrollbar-&gt;isCustomScrollbar() /* || !CCProxy::hasImplThread() */) { // FIXME: also filter out single thread case when we

think we need to uncomment this check before landing

&gt; Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:107
&gt; +    if (!scrollLayer) // FIXME: sometimes we get called before setScrollLayer, workaround by finding out ourself

comment isn&apos;t quite right - typo in &quot;ourself&quot; and lacks a period at the end (same goes for the one on line 119)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575277</commentid>
    <comment_count>42</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-09 15:04:23 -0800</bug_when>
    <thetext>Committed r110338: &lt;http://trac.webkit.org/changeset/110338&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127514</attachid>
            <date>2012-02-16 21:18:42 -0800</date>
            <delta_ts>2012-02-23 17:54:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78872-20120216211841.patch</filename>
            <type>text/plain</type>
            <size>39190</size>
            <attacher name="Tien-Ren Chen">trchen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3ODUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmJmMzNjMjRjMjYxYjVh
MTc2YjdmODI5NmUxZjk1ZjJmMGY3NGFkNy4uOTRiNTI2MjkzMDYxNmQ2Mjc2YzEzNzE2ZWQxMDU2
MDg5MzQ0YzBjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBACisyMDEyLTAyLTE2ICBUaWVu
LVJlbiBDaGVuICA8dHJjaGVuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFNj
cm9sbGJhckxheWVyQ2hyb21pdW0vQ0NTY3JvbGxiYXJMYXllckltcGwgZm9yIENDLXNpZGUgc2Ny
b2xsYmFyIHBhaW50aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03ODg3MgorCisJTk9UIFJFQURZIEZPUiBDT01NSVQgWUVULiBVUExPQURFRCBGT1Ig
RElTQ1VTU0lPTiBPTkxZLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogV2ViQ29yZS5neXBp
OgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhclRoZW1lLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFNjcm9sbGJhclRoZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJh
clRoZW1lOjp0b1Njcm9sbGJhclRoZW1lQ0NTY3JvbGwpOgorICAgICAgICAqIHBsYXRmb3JtL2No
cm9taXVtL1Njcm9sbGJhclRoZW1lQ0NTY3JvbGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDQ1Njcm9sbDo6YXR0YWNoVG9H
cmFwaGljc0xheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVt
ZUNDU2Nyb2xsLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTY3JvbGxi
YXJUaGVtZUNDU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ0NTY3Jv
bGw6OnRvU2Nyb2xsYmFyVGhlbWVDQ1Njcm9sbCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21p
dW0vU2Nyb2xsYmFyVGhlbWVDQ1Njcm9sbEV4YW1wbGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKToK
KyAgICAgICAgKENDU2Nyb2xsYmFyRXhhbXBsZUxheWVySW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1Njcm9sbGJhckV4YW1wbGVMYXllckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1Njcm9sbGJhckV4YW1wbGVMYXllckltcGw6OmFwcGVuZFF1YWRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDU2Nyb2xsYmFyRXhhbXBsZUxheWVySW1wbDo6Q0NTY3JvbGxiYXJFeGFtcGxlTGF5
ZXJJbXBsKToKKyAgICAgICAgKFNjcm9sbGJhckV4YW1wbGVMYXllckNocm9taXVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhckV4YW1wbGVMYXllckNocm9taXVtOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyRXhhbXBsZUxheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5
ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ0NTY3JvbGxFeGFtcGxl
OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNDU2Nyb2xsRXhhbXBs
ZTo6Y3JlYXRlU2Nyb2xsYmFyTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Nj
cm9sbGJhclRoZW1lQ0NTY3JvbGxFeGFtcGxlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChTY3JvbGxiYXJUaGVtZUNDU2Nyb2xsRXhhbXBsZSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJUaGVtZUNDU2Nyb2xsRXhhbXBsZTo6c2Nyb2xsYmFyVGhpY2tuZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ0NTY3JvbGxFeGFtcGxlOjp1c2VzT3Zl
cmxheVNjcm9sbGJhcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRo
ZW1lQ2hyb21pdW1MaW51eC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRTY3JvbGxiYXJMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoR3Jh
cGhpY3NMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06Okxh
eWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJD
aHJvbWl1bTo6c2V0SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06Omhvcml6b250YWxTY3JvbGxiYXJMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjpzZXRWZXJ0aWNhbFNjcm9sbGJhckxheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIpOgorICAgICAg
ICAoTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
U2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1
bS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU2Nyb2xsYmFyTGF5ZXJD
aHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNo
cm9uaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU3luY2hyb25pemVyOjpyZXNvbHZl
U2Nyb2xsYmFyTGF5ZXJSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmg6CisgICAgICAgIChU
cmVlU3luY2hyb25pemVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1Njcm9sbGJhckxheWVySW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXJMYXllcklt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6Om9mZnNldERpZENo
YW5nZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxi
YXJMYXllckltcGwuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDU2Ny
b2xsYmFyTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBs
OjpzZXRTY3JvbGxMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1w
bDo6c2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6
OnNldE9yaWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBs
OjpvcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6
Y3VycmVudFBvcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6dmlz
aWJsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OnRvdGFs
U2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZU92ZXJmbG93Q29u
dHJvbHNMYXllcnMpOgorCiAyMDEyLTAyLTE1ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBh
cHBsZS5jb20+CiAKICAgICAgICAgVGhlIFRpbGVDYWNoZSBvYmplY3Qgc2hvdWxkIGJlIGRlYWxs
b2NhdGVkIG9uIHRoZSBtYWluIHRocmVhZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDRlNmEyYzY2NTgx
Zjg1NmFkYjhiMWQ0MzRkZjc5ZWIxZTA2MTVkNmUuLjUyYWM3YTk1NGUxNWIwNzhlNzdiYmJhNjNj
M2QzNjU4MzY2YzY2YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTI5NDAsNiArMjk0MCwxMCBAQAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTGlzdEJveC5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cE1lbnVQcml2YXRlLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2Nocm9taXVtL1NTTEtleUdlbmVyYXRvckNocm9taXVtLmNwcCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDQ1Njcm9sbC5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ0NzY3JvbGwuaCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDQ1Njcm9sbEV4YW1w
bGUuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUND
c2Nyb2xsRXhhbXBsZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxi
YXJUaGVtZUNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Ny
b2xsYmFyVGhlbWVDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9T
Y3JvbGxiYXJUaGVtZUNocm9taXVtQW5kcm9pZC5jcHAnLApAQCAtMzE5OCw2ICszMjAyLDggQEAK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SYXRlTGltaXRlci5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hy
b21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5k
ZXJTdXJmYWNlQ2hyb21pdW0uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUNocm9t
aXVtV2luLmNwcCcsCkBAIC0zMjg5LDYgKzMyOTUsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1bGVyU3RhdGVNYWNoaW5lLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVsZXJTdGF0ZU1h
Y2hpbmUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
Y29wZWRUaHJlYWRQcm94eS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFk
U3RhdGUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
aW5nbGVUaHJlYWRQcm94eS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYmFyVGhlbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRo
ZW1lLmgKaW5kZXggMmE4M2Q1Mzg1ZWFiYmNhY2ZmOGJlNTYzNDliNGQxOWUzMmJiNmZjYy4uNWMz
MWFiYzNhN2M5YzhmYzQ3NjgxMTM5ZDRkYzA1YTAzNTQxN2ZiMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxiYXJUaGVtZS5oCkBAIC00MCw2ICs0MCwxMCBAQCBjbGFzcyBTY3JvbGxW
aWV3OwogY2xhc3MgR3JhcGhpY3NMYXllcjsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ0hST01J
VU0pICYmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK2NsYXNzIFNjcm9sbGJhclRoZW1l
Q0NTY3JvbGw7CisjZW5kaWYKKwogY2xhc3MgU2Nyb2xsYmFyVGhlbWUgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFNjcm9sbGJhclRoZW1lKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CkBAIC0xMDYsNiArMTEwLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGRvdWJsZSBp
bml0aWFsQXV0b3Njcm9sbFRpbWVyRGVsYXkoKSB7IHJldHVybiAwLjI1OyB9CiAgICAgdmlydHVh
bCBkb3VibGUgYXV0b3Njcm9sbFRpbWVyRGVsYXkoKSB7IHJldHVybiAwLjA1OyB9CiAKKyNpZiBQ
TEFURk9STShDSFJPTUlVTSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHZp
cnR1YWwgU2Nyb2xsYmFyVGhlbWVDQ1Njcm9sbCogdG9TY3JvbGxiYXJUaGVtZUNDU2Nyb2xsKCkg
eyByZXR1cm4gMDsgfQorI2VuZGlmCisKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJTY3JvbGxi
YXIoU2Nyb2xsYmFyKikge30KICAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlclNjcm9sbGJhcihT
Y3JvbGxiYXIqKSB7fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9TY3JvbGxiYXJUaGVtZUNDU2Nyb2xsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ0NTY3JvbGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlNDhmYTIy
MGY1MGQxZGQ2YmU1YzhhZTI1ODZlZWZkOTAyNjcyMjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNDU2Nyb2xsLmNwcApA
QCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVt
ZUNDU2Nyb2xsLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2hyb21pdW0uaCIKKyNpbmNs
dWRlICJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJMYXllckNocm9taXVtLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBTY3JvbGxiYXJUaGVtZUNDU2Nyb2xsOjphdHRh
Y2hUb0dyYXBoaWNzTGF5ZXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIEdyYXBoaWNzTGF5ZXIqIHNj
cm9sbExheWVyLCBHcmFwaGljc0xheWVyKiBzY3JvbGxiYXJMYXllcikKK3sKKyAgICBHcmFwaGlj
c0xheWVyQ2hyb21pdW0qIHNjcm9sbExheWVyQ2hyb21pdW0gPSBzdGF0aWNfY2FzdDxHcmFwaGlj
c0xheWVyQ2hyb21pdW0qPihzY3JvbGxMYXllcik7CisKKyAgICBSZWZQdHI8U2Nyb2xsYmFyTGF5
ZXJDaHJvbWl1bT4gbGF5ZXIgPSBjcmVhdGVTY3JvbGxiYXJMYXllcihzY3JvbGxiYXIpOworCisg
ICAgc2Nyb2xsYmFyTGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShsYXllci5nZXQoKSk7IC8vIEZJ
WE1FOiBzY3JvbGxiYXIgaXMgbm90IG1lZGlhCisKKyAgICBzY3JvbGxiYXJMYXllci0+c2V0Q29u
dGVudHNSZWN0KHNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOyAvLyBQcm9iYWJseSBiZXR0ZXIgbW92
ZXMgdG8gU2Nyb2xsVmlldzo6cG9zaXRpb25TY3JvbGxiYXJMYXllcj8KKyAgICBzY3JvbGxiYXJM
YXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKKyAgICBzY3JvbGxiYXJMYXllci0+c2V0Q29u
dGVudHNWaXNpYmxlKHRydWUpOworCisgICAgc2Nyb2xsTGF5ZXJDaHJvbWl1bS0+c2V0U2Nyb2xs
YmFyTGF5ZXIoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpLCBsYXllci5yZWxlYXNlKCkpOworfQor
Cit9CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNDU2Nyb2xs
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNDU2Ny
b2xsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMmUyNmQyZjkzNDg4ZmExOGYzMzk3M2YzZWM0NjQ0ZTk5ZTNiODk2
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Nj
cm9sbGJhclRoZW1lQ0NTY3JvbGwuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFNjcm9sbGJhclRoZW1lQ0NTY3JvbGxfaAorI2RlZmluZSBTY3JvbGxiYXJUaGVtZUND
U2Nyb2xsX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUg
IlNjcm9sbGJhclRoZW1lLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0xheWVyOworY2xhc3MgTGF5ZXJDaHJvbWl1
bTsKK2NsYXNzIFNjcm9sbGJhcjsKK2NsYXNzIFNjcm9sbGJhckxheWVyQ2hyb21pdW07CisKK2Ns
YXNzIFNjcm9sbGJhclRoZW1lQ0NTY3JvbGwgOiBwdWJsaWMgU2Nyb2xsYmFyVGhlbWUgeworcHVi
bGljOgorICAgIHZpcnR1YWwgU2Nyb2xsYmFyVGhlbWVDQ1Njcm9sbCogdG9TY3JvbGxiYXJUaGVt
ZUNDU2Nyb2xsKCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZvaWQgYXR0YWNoVG9HcmFwaGljc0xh
eWVyKFNjcm9sbGJhciosIEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyLCBHcmFwaGljc0xheWVy
KiBzY3JvbGxiYXJMYXllcik7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNj
cm9sbGJhckxheWVyQ2hyb21pdW0+IGNyZWF0ZVNjcm9sbGJhckxheWVyKFNjcm9sbGJhciopID0g
MDsKK307CisKK30KKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xs
YmFyVGhlbWVDQ1Njcm9sbEV4YW1wbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vU2Nyb2xsYmFyVGhlbWVDQ1Njcm9sbEV4YW1wbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMyNTRm
NTBkOGRiMDQ3N2EyZjkxMjAzMDUzZjA1MDUwNTE2MDdlYjcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNDU2Nyb2xsRXhh
bXBsZS5jcHAKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIlNj
cm9sbGJhclRoZW1lQ0NTY3JvbGxFeGFtcGxlLmgiCisKKyNpbmNsdWRlICJTY3JvbGxiYXIuaCIK
KyNpbmNsdWRlICJTY3JvbGxiYXJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NTY3Jv
bGxiYXJMYXllckltcGwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWZuZGVmIE9NR19U
SElTX0lTX0ZPUl9MT0NBTF9URVNUX05FVkVSX0NPTU1JVAorU2Nyb2xsYmFyVGhlbWUqIFNjcm9s
bGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTY3Jv
bGxiYXJUaGVtZUNDU2Nyb2xsRXhhbXBsZSwgdGhlbWUsICgpKTsKKyAgICByZXR1cm4gJnRoZW1l
OworfQorI2VuZGlmCisKK2NsYXNzIENDU2Nyb2xsYmFyRXhhbXBsZUxheWVySW1wbCA6IHB1Ymxp
YyBDQ1Njcm9sbGJhckxheWVySW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxDQ1Nj
cm9sbGJhckV4YW1wbGVMYXllckltcGw+IGNyZWF0ZShpbnQgaWQpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDQ1Njcm9sbGJhckV4YW1wbGVMYXllckltcGwoaWQpKTsgfQorCisgICAgdmlydHVhbCB2
b2lkIGFwcGVuZFF1YWRzKENDUXVhZExpc3QmLCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSopCisg
ICAgeworICAgIH0KKworcHJvdGVjdGVkOgorICAgIENDU2Nyb2xsYmFyRXhhbXBsZUxheWVySW1w
bChpbnQgaWQpCisgICAgICAgIDogQ0NTY3JvbGxiYXJMYXllckltcGwoaWQpCisgICAgeworICAg
IH0KKworfTsKKworY2xhc3MgU2Nyb2xsYmFyRXhhbXBsZUxheWVyQ2hyb21pdW0gOiBwdWJsaWMg
U2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
U2Nyb2xsYmFyRXhhbXBsZUxheWVyQ2hyb21pdW0+IGNyZWF0ZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNjcm9sbGJhckV4YW1wbGVMYXllckNocm9taXVtKCkpOworICAg
IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZUNDTGF5ZXJJbXBs
KCkgeyByZXR1cm4gQ0NTY3JvbGxiYXJFeGFtcGxlTGF5ZXJJbXBsOjpjcmVhdGUoaWQoKSk7IH0K
KworfTsKKworYm9vbCBTY3JvbGxiYXJUaGVtZUNDU2Nyb2xsRXhhbXBsZTo6cGFpbnQoU2Nyb2xs
YmFyKiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYp
Cit7CisgICAgZmxvYXQgYmFyQmVnaW4gPSBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSAvIHNjcm9s
bGJhci0+dG90YWxTaXplKCk7CisgICAgZmxvYXQgYmFyRW5kID0gKHNjcm9sbGJhci0+Y3VycmVu
dFBvcygpICsgc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSAvIHNjcm9sbGJhci0+dG90YWxTaXpl
KCk7CisKKyAgICBGbG9hdFJlY3QgcmVjdCA9IHNjcm9sbGJhci0+ZnJhbWVSZWN0KCk7CisgICAg
aWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Cisg
ICAgICAgIGZsb2F0IGxlZnQgPSByZWN0LngoKSAqICgxIC0gYmFyQmVnaW4pICsgcmVjdC5tYXhY
KCkgKiBiYXJCZWdpbjsKKyAgICAgICAgZmxvYXQgcmlnaHQgPSByZWN0LngoKSAqICgxIC0gYmFy
RW5kKSArIHJlY3QubWF4WCgpICogYmFyRW5kOworICAgICAgICByZWN0LnNldFgobGVmdCk7Cisg
ICAgICAgIHJlY3Quc2V0V2lkdGgocmlnaHQgLSBsZWZ0KTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBmbG9hdCB0b3AgPSByZWN0LnkoKSAqICgxIC0gYmFyQmVnaW4pICsgcmVjdC5tYXhZKCkgKiBi
YXJCZWdpbjsKKyAgICAgICAgZmxvYXQgYm90dG9tID0gcmVjdC55KCkgKiAoMSAtIGJhckVuZCkg
KyByZWN0Lm1heFkoKSAqIGJhckVuZDsKKyAgICAgICAgcmVjdC5zZXRZKHRvcCk7CisgICAgICAg
IHJlY3Quc2V0SGVpZ2h0KGJvdHRvbSAtIHRvcCk7CisgICAgfQorCisgICAgY29udGV4dC0+Zmls
bFJlY3QocmVjdCwgQ29sb3IoMTAyLCAxNTMsIDIwNCwgMTI4KSwgQ29sb3JTcGFjZURldmljZVJH
Qik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUGFzc1JlZlB0cjxTY3JvbGxiYXJMYXllckNo
cm9taXVtPiBTY3JvbGxiYXJUaGVtZUNDU2Nyb2xsRXhhbXBsZTo6Y3JlYXRlU2Nyb2xsYmFyTGF5
ZXIoU2Nyb2xsYmFyKikKK3sKKyAgICByZXR1cm4gU2Nyb2xsYmFyRXhhbXBsZUxheWVyQ2hyb21p
dW06OmNyZWF0ZSgpOworfQorCit9CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3Jv
bGxiYXJUaGVtZUNDU2Nyb2xsRXhhbXBsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vU2Nyb2xsYmFyVGhlbWVDQ1Njcm9sbEV4YW1wbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NTNhNWM0
OTliYjdhNjNlZjY5NmEyZmFiY2VhNWRiMzRmOTk3MGUwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDQ1Njcm9sbEV4YW1w
bGUuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbGJhclRo
ZW1lQ0NTY3JvbGxFeGFtcGxlX2gKKyNkZWZpbmUgU2Nyb2xsYmFyVGhlbWVDQ1Njcm9sbEV4YW1w
bGVfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiU2Ny
b2xsYmFyVGhlbWVDQ1Njcm9sbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNj
cm9sbGJhclRoZW1lQ0NTY3JvbGxFeGFtcGxlIDogcHVibGljIFNjcm9sbGJhclRoZW1lQ0NTY3Jv
bGwgeworcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBwYWludChTY3JvbGxiYXIqLCBHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiAvKmRhbWFnZVJlY3QqLyk7CisKKyAgICB2aXJ0dWFs
IGludCBzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFyU2Ny
b2xsYmFyKSB7IHJldHVybiAxODsgfQorICAgIHZpcnR1YWwgYm9vbCB1c2VzT3ZlcmxheVNjcm9s
bGJhcnMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFNjcm9sbGJhckxheWVyQ2hyb21pdW0+IGNyZWF0ZVNjcm9sbGJhckxheWVyKFNj
cm9sbGJhciopOworfTsKKworfQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcAppbmRleCBlYzY4NDA3
ZTlkOGMzMmUzMGQzMTBkMmU1MDU4YzJkYTdkYmRlY2M2Li4xNzgxNmVmYTM2Njk5MjAwNDkyMTll
M2JmZTkzOGIxZGEwMzE5OGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXguY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5jcHAKQEAg
LTM3LDExICszNywxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZmRlZiBPTUdfVEhJ
U19JU19GT1JfTE9DQUxfVEVTVF9ORVZFUl9DT01NSVQKIFNjcm9sbGJhclRoZW1lKiBTY3JvbGxi
YXJUaGVtZTo6bmF0aXZlVGhlbWUoKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoU2Nyb2xs
YmFyVGhlbWVDaHJvbWl1bUxpbnV4LCB0aGVtZSwgKCkpOwogICAgIHJldHVybiAmdGhlbWU7CiB9
CisjZW5kaWYKIAogaW50IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6c2Nyb2xsYmFyVGhp
Y2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQogewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZWE5MDU1YzMzYTQ4ZmNmYzQ1NTJhZWQzOWUw
NmNhZjMzYTJhZGEzOC4uZTVhYWM3MzczMjA4MzJiODQ2Y2FiZDA0YjI5MzM4YWE0NmY5NmQ5NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3Jh
cGhpY3NMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC01Myw2ICs1Myw3IEBA
CiAjaW5jbHVkZSAiSW1hZ2VMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1
bS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyTGF5
ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKIAogI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgpAQCAtNDA1LDYgKzQwNiwxNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bTo6c2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqIGxheWVyKQogICAgICAgICB1
cGRhdGVDaGlsZExpc3QoKTsKIH0KIAordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldFNj
cm9sbGJhckxheWVyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBQYXNzUmVmUHRy
PFNjcm9sbGJhckxheWVyQ2hyb21pdW0+IGxheWVyKQoreworICAgIGlmIChvcmllbnRhdGlvbiA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhckxh
eWVyID0gbGF5ZXI7CisgICAgICAgIHByaW1hcnlMYXllcigpLT5zZXRIb3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXIobV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkpOworICAgIH0gZWxzZSB7
CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJMYXllciA9IGxheWVyOyAKKyAgICAgICAgcHJp
bWFyeUxheWVyKCktPnNldFZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIobV92ZXJ0aWNhbFNjcm9sbGJh
ckxheWVyLmdldCgpKTsKKyAgICB9Cit9CisKIFBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bTo6aG9zdExheWVyRm9yQ2hpbGRyZW4oKSBjb25zdAogewogICAgIHJldHVybiBtX3Ry
YW5zZm9ybUxheWVyID8gbV90cmFuc2Zvcm1MYXllci5nZXQoKSA6IG1fbGF5ZXIuZ2V0KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFw
aGljc0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGRiZjE1ZTUxZGIxMGI3YmQ2NTE1
NmRlOGU3ZDgwMTkzZmY4N2IwZDMuLjc4ZDUyZmFlMTY4YjQ2YWMxNmJlM2I0MDUwZmNmNmRkZTA2
YTE1MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCkBAIC0zNywxMCArMzcs
MTIgQEAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIlNjcm9sbFR5cGVz
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTGF5ZXJDaHJvbWl1bTsKK2NsYXNz
IFNjcm9sbGJhckxheWVyQ2hyb21pdW07CiAKIGNsYXNzIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSA6
IHB1YmxpYyBHcmFwaGljc0xheWVyLCBwdWJsaWMgQ29udGVudExheWVyRGVsZWdhdGUgewogcHVi
bGljOgpAQCAtOTUsNiArOTcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRl
bnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKik7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRz
VG9DYW52YXMoUGxhdGZvcm1MYXllciopOwogCisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbGJh
ckxheWVyKFNjcm9sbGJhck9yaWVudGF0aW9uLCBQYXNzUmVmUHRyPFNjcm9sbGJhckxheWVyQ2hy
b21pdW0+KTsKKwogICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNv
bnN0OwogCiAgICAgdmlydHVhbCB2b2lkIHNldERlYnVnQmFja2dyb3VuZENvbG9yKGNvbnN0IENv
bG9yJik7CkBAIC0xMzcsNiArMTQxLDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8Q29udGVudExh
eWVyQ2hyb21pdW0+IG1fbGF5ZXI7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fdHJhbnNm
b3JtTGF5ZXI7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fY29udGVudHNMYXllcjsKKyAg
ICBSZWZQdHI8U2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bT4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5
ZXI7CisgICAgUmVmUHRyPFNjcm9sbGJhckxheWVyQ2hyb21pdW0+IG1fdmVydGljYWxTY3JvbGxi
YXJMYXllcjsKIAogICAgIGVudW0gQ29udGVudHNMYXllclB1cnBvc2UgewogICAgICAgICBOb0Nv
bnRlbnRzTGF5ZXIgPSAwLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA0YmNmMjk3ZmY5MjQ2
OGM5ODRmNWI0ZmNjMTJiZmY1M2IyNjZkNjc0Li5kYmE1MDY1Mjk2MjYyYjY1MjIzMzEwMTk5Nzhi
ZjhlNGI1ZjM0NzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtNzUsNiArNzUsOCBAQCBM
YXllckNocm9taXVtOjpMYXllckNocm9taXVtKCkKICAgICAsIG1fcHJlc2VydmVzM0QoZmFsc2Up
CiAgICAgLCBtX2Fsd2F5c1Jlc2VydmVUZXh0dXJlcyhmYWxzZSkKICAgICAsIG1fcmVwbGljYUxh
eWVyKDApCisgICAgLCBtX2hvcml6b250YWxTY3JvbGxiYXJMYXllcigwKQorICAgICwgbV92ZXJ0
aWNhbFNjcm9sbGJhckxheWVyKDApCiAgICAgLCBtX2RyYXdPcGFjaXR5KDApCiAgICAgLCBtX3Rh
cmdldFJlbmRlclN1cmZhY2UoMCkKICAgICAsIG1fY29udGVudHNTY2FsZSgxLjApCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmgKaW5kZXggM2ExZTk2YzVmZGE0OWU4MWI0NWRlN2M2YzQxMTllZDJiMzk4NjNmMS4u
YTY3N2Q2NzE1YmUwZjhjYzFmZGQyMzc3YzFhNmYzZTQzYjdhYzYzMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaApAQCAtNTcsNiArNTcsNyBAQCBjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CiBjbGFzcyBDQ1Rl
eHR1cmVVcGRhdGVyOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBSZWdpb247Citj
bGFzcyBTY3JvbGxiYXJMYXllckNocm9taXVtOwogCiAvLyBCYXNlIGNsYXNzIGZvciBjb21wb3Np
dGVkIGxheWVycy4gU3BlY2lhbCBsYXllciB0eXBlcyBhcmUgZGVyaXZlZCBmcm9tCiAvLyB0aGlz
IGNsYXNzLgpAQCAtMTU2LDYgKzE1NywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSZXBsaWNh
TGF5ZXIoTGF5ZXJDaHJvbWl1bSopOwogICAgIExheWVyQ2hyb21pdW0qIHJlcGxpY2FMYXllcigp
IGNvbnN0IHsgcmV0dXJuIG1fcmVwbGljYUxheWVyLmdldCgpOyB9CiAKKyAgICB2b2lkIHNldEhv
cml6b250YWxTY3JvbGxiYXJMYXllcihTY3JvbGxiYXJMYXllckNocm9taXVtKiBsYXllcikgeyBt
X2hvcml6b250YWxTY3JvbGxiYXJMYXllciA9IGxheWVyOyB9CisgICAgU2Nyb2xsYmFyTGF5ZXJD
aHJvbWl1bSogaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9ob3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXI7IH0KKyAgICB2b2lkIHNldFZlcnRpY2FsU2Nyb2xsYmFyTGF5
ZXIoU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bSogbGF5ZXIpIHsgbV92ZXJ0aWNhbFNjcm9sbGJhckxh
eWVyID0gbGF5ZXI7IH0KKyAgICBTY3JvbGxiYXJMYXllckNocm9taXVtKiB2ZXJ0aWNhbFNjcm9s
bGJhckxheWVyKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyOyB9CisK
ICAgICAvLyBUaGVzZSBtZXRob2RzIHR5cGljYWxseSBuZWVkIHRvIGJlIG92ZXJ3cml0dGVuIGJ5
IGRlcml2ZWQgY2xhc3Nlcy4KICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9pc0RyYXdhYmxlOyB9CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJ
ZkRpcnR5KGNvbnN0IFJlZ2lvbiYgLyogb2NjbHVkZWRTY3JlZW5TcGFjZSAqLykgeyB9CkBAIC0y
ODgsNiArMjk0LDEwIEBAIHByaXZhdGU6CiAgICAgLy8gUmVwbGljYSBsYXllciB1c2VkIGZvciBy
ZWZsZWN0aW9ucy4KICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9yZXBsaWNhTGF5ZXI7CiAK
KyAgICAvLyBSYXcgcG9pbnRlciBoZXJlIGJlY2F1c2UgR3JhcGhpY3NMYXllckNocm9taXVtIGhv
bGRzIHRoZSBvd25lcnNoaXAKKyAgICBTY3JvbGxiYXJMYXllckNocm9taXVtKiBtX2hvcml6b250
YWxTY3JvbGxiYXJMYXllcjsKKyAgICBTY3JvbGxiYXJMYXllckNocm9taXVtKiBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyTGF5ZXI7CisKICAgICAvLyBUcmFuc2llbnQgcHJvcGVydGllcy4KICAgICBPd25Q
dHI8UmVuZGVyU3VyZmFjZUNocm9taXVtPiBtX3JlbmRlclN1cmZhY2U7CiAgICAgZmxvYXQgbV9k
cmF3T3BhY2l0eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMjBlODFlOTkyYjMxOTc5N2I1NTRiYzA2MGQ5NDJlMDUzNjFmZTc4NQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9s
bGJhckxheWVyQ2hyb21pdW0uY3BwCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
CisjaW5jbHVkZSAiU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK30KKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xs
YmFyTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyZmVlNTY1YjRjNjFk
OGQ2NmU2ZjdhNWRkZTc4NGViYjMxMjhiYzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmgK
QEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIFNjcm9sbGJhckxheWVy
Q2hyb21pdW1faAorI2RlZmluZSBTY3JvbGxiYXJMYXllckNocm9taXVtX2gKKworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNp
bmNsdWRlICJTY3JvbGxUeXBlcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNj
cm9sbGJhckxheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpID0g
MDsKKyAgICAKK307CisKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuY3BwCmluZGV4IGQwZmQwY2U1MjNk
NjM4ODRiZTkzMmUxYmQ0MTY1ODJmMjU3NjJlNDAuLjgyODliYWUyYzcwZmRmZTYwZDgwZjQ4Y2I4
MjA2YmEzODMwNGRjMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuY3BwCkBAIC0yOCw3ICsy
OCw5IEBACiAjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXplci5oIgogCiAjaW5jbHVkZSAiTGF5ZXJD
aHJvbWl1bS5oIgorI2luY2x1ZGUgIlNjcm9sbGJhckxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmgi
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03OCw2
ICs4MCwzNyBAQCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBUcmVlU3luY2hyb25pemVyOjpzeW5j
aHJvbml6ZVRyZWVSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bQogICAgIHJldHVybiBjY0xheWVySW1w
bC5yZWxlYXNlKCk7CiB9CiAKK3ZvaWQgVHJlZVN5bmNocm9uaXplcjo6cmVzb2x2ZVNjcm9sbGJh
ckxheWVyUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyLCBDQ0xheWVySW1wbE1hcCYgbWFw
KQoreworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIENDTGF5ZXJJbXBs
KiBjY0xheWVySW1wbCA9IG1hcC5nZXQobGF5ZXItPmlkKCkpLmdldCgpOworICAgIEFTU0VSVChj
Y0xheWVySW1wbCk7CisKKyAgICBpZiAobGF5ZXItPm1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVy
KSB7CisgICAgICAgIGlmIChDQ1Njcm9sbGJhckxheWVySW1wbCogc2Nyb2xsYmFyID0gc3RhdGlj
X2Nhc3Q8Q0NTY3JvbGxiYXJMYXllckltcGwqPihtYXAuZ2V0KGxheWVyLT5tX2hvcml6b250YWxT
Y3JvbGxiYXJMYXllci0+aWQoKSkuZ2V0KCkpKSB7CisgICAgICAgICAgICBzY3JvbGxiYXItPnNl
dFNjcm9sbExheWVyKGNjTGF5ZXJJbXBsKTsKKyAgICAgICAgICAgIHNjcm9sbGJhci0+c2V0T3Jp
ZW50YXRpb24oSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgICAgICAgICBzY3JvbGxiYXItPm9m
ZnNldERpZENoYW5nZSgpOyAvLyBGSVhNRQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGxh
eWVyLT5tX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIpIHsKKyAgICAgICAgaWYgKENDU2Nyb2xsYmFy
TGF5ZXJJbXBsKiBzY3JvbGxiYXIgPSBzdGF0aWNfY2FzdDxDQ1Njcm9sbGJhckxheWVySW1wbCo+
KG1hcC5nZXQobGF5ZXItPm1fdmVydGljYWxTY3JvbGxiYXJMYXllci0+aWQoKSkuZ2V0KCkpKSB7
CisgICAgICAgICAgICBzY3JvbGxiYXItPnNldFNjcm9sbExheWVyKGNjTGF5ZXJJbXBsKTsKKyAg
ICAgICAgICAgIHNjcm9sbGJhci0+c2V0T3JpZW50YXRpb24oVmVydGljYWxTY3JvbGxiYXIpOwor
ICAgICAgICAgICAgc2Nyb2xsYmFyLT5vZmZzZXREaWRDaGFuZ2UoKTsgLy8gRklYTUUKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYg
Y2hpbGRyZW4gPSBsYXllci0+Y2hpbGRyZW4oKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNoaWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICByZXNvbHZlU2Nyb2xsYmFyTGF5ZXJSZWN1
cnNpdmUoY2hpbGRyZW5baV0uZ2V0KCksIG1hcCk7CisgICAgcmVzb2x2ZVNjcm9sbGJhckxheWVy
UmVjdXJzaXZlKGxheWVyLT5tYXNrTGF5ZXIoKSwgbWFwKTsKKyAgICByZXNvbHZlU2Nyb2xsYmFy
TGF5ZXJSZWN1cnNpdmUobGF5ZXItPnJlcGxpY2FMYXllcigpLCBtYXApOworfQorCiBQYXNzUmVm
UHRyPENDTGF5ZXJJbXBsPiBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKExheWVy
Q2hyb21pdW0qIGxheWVyQ2hyb21pdW1Sb290LCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBwcnBP
bGRDQ0xheWVySW1wbFJvb3QpCiB7CiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBvbGRDQ0xheWVy
SW1wbFJvb3QgPSBwcnBPbGRDQ0xheWVySW1wbFJvb3Q7CkBAIC04OSw2ICsxMjIsOCBAQCBQYXNz
UmVmUHRyPENDTGF5ZXJJbXBsPiBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKExh
eWVyQ2hyb21pdW0qIGxheWVyQwogICAgIC8vIFJlY3Vyc2l2ZWx5IGJ1aWxkIHRoZSBuZXcgbGF5
ZXIgdHJlZS4KICAgICBSZWZQdHI8Q0NMYXllckltcGw+IG5ld0NDTGF5ZXJJbXBsUm9vdCA9IHN5
bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShsYXllckNocm9taXVtUm9vdCwgbWFwKTsKIAorICAgIHJl
c29sdmVTY3JvbGxiYXJMYXllclJlY3Vyc2l2ZShsYXllckNocm9taXVtUm9vdCwgbWFwKTsKKwog
ICAgIHJldHVybiBuZXdDQ0xheWVySW1wbFJvb3QucmVsZWFzZSgpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25p
emVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3lu
Y2hyb25pemVyLmgKaW5kZXggYTRlNDk0MjE3Mzk1ZThkMmUxMjk2YmQ2NTY2NjJlMzJiMTE5YWNm
Zi4uMzM1MzQ3YWY4NzQ3NWM1OGQ3NmE0M2RjYWE5YmEzYmE3YjFjYzZjMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXpl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVT
eW5jaHJvbml6ZXIuaApAQCAtNTAsNiArNTAsNyBAQCBwcml2YXRlOgogICAgIC8vIERlY2xhcmVk
IGFzIHN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zIHNvIHRoZXkgY2FuIGFjY2VzcyBmdW5jdGlvbnMg
b24gTGF5ZXJDaHJvbWl1bSBhcyBhIGZyaWVuZCBjbGFzcy4KICAgICBzdGF0aWMgdm9pZCBhZGRD
Q0xheWVySW1wbHNUb01hcFJlY3Vyc2l2ZShDQ0xheWVySW1wbE1hcCYsIENDTGF5ZXJJbXBsKik7
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IHN5bmNocm9uaXplVHJlZVJlY3Vy
c2l2ZShMYXllckNocm9taXVtKiwgQ0NMYXllckltcGxNYXAmKTsKKyAgICBzdGF0aWMgdm9pZCBy
ZXNvbHZlU2Nyb2xsYmFyTGF5ZXJSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSosIENDTGF5ZXJJbXBs
TWFwJik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Nj
cm9sbGJhckxheWVySW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDg4NmJkM2RiODZjYmM3YTYyYTBlMDgw
YTIzYTRiYjIxMDhmZGYxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmNwcApAQCAtMCww
ICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkNDU2Nyb2xsYmFyTGF5ZXJJ
bXBsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0NTY3JvbGxiYXJMYXllckltcGw6OkND
U2Nyb2xsYmFyTGF5ZXJJbXBsKGludCBpZCkKKyAgICA6IENDTGF5ZXJJbXBsKGlkKQorICAgICwg
bV9zY3JvbGxMYXllcigwKQorICAgICwgbV9vcmllbnRhdGlvbihIb3Jpem9udGFsU2Nyb2xsYmFy
KQoreworfQorCit2b2lkIENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpvZmZzZXREaWRDaGFuZ2UoKQor
eworICAgIEFTU0VSVChtX3Njcm9sbExheWVyKTsKKyAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5n
IHJlYWwhISEKKyAgICBtX2N1cnJlbnRQb3MgPSAwLjM7CisgICAgbV92aXNpYmxlU2l6ZSA9IDAu
MjsKKyAgICBtX3RvdGFsU2l6ZSA9IDEuMDsKK30KKworfQorCisjZW5kaWYgLy8gVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41M2I5ZTM1ZDNmZDE2MTEwOTgyM2UzZjcyMTljZjE0Njg3ZTk2MDc5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisKKyNpZm5kZWYgQ0NTY3JvbGxiYXJMYXllckltcGxfaAorI2RlZmluZSBDQ1Njcm9sbGJh
ckxheWVySW1wbF9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNs
dWRlICJDQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NTY3JvbGxiYXJMYXllckltcGwgOiBwdWJsaWMgQ0NMYXll
ckltcGwgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRRdWFkcyhDQ1F1YWRMaXN0
JiwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqKSA9IDA7CisKKyAgICB2b2lkIHNldFNjcm9sbExh
eWVyKENDTGF5ZXJJbXBsKiBzY3JvbGxMYXllcikgeyBtX3Njcm9sbExheWVyID0gc2Nyb2xsTGF5
ZXI7IH0KKyAgICBDQ0xheWVySW1wbCogc2Nyb2xsTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Nj
cm9sbExheWVyOyB9CisgICAgdm9pZCBzZXRPcmllbnRhdGlvbihTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbikgeyBtX29yaWVudGF0aW9uID0gb3JpZW50YXRpb247IH0KKyAgICBTY3Jv
bGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZW50YXRp
b247IH0KKworICAgIHZvaWQgb2Zmc2V0RGlkQ2hhbmdlKCk7CisgICAgZmxvYXQgY3VycmVudFBv
cygpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFBvczsgfQorICAgIGZsb2F0IHZpc2libGVTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlU2l6ZTsgfQorICAgIGZsb2F0IHRvdGFsU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdG90YWxTaXplOyB9CisKK3Byb3RlY3RlZDoKKyAgICBDQ1Njcm9s
bGJhckxheWVySW1wbChpbnQgaWQpOworCitwcml2YXRlOgorICAgIENDTGF5ZXJJbXBsKiBtX3Nj
cm9sbExheWVyOworICAgIFNjcm9sbGJhck9yaWVudGF0aW9uIG1fb3JpZW50YXRpb247CisKKyAg
ICBmbG9hdCBtX2N1cnJlbnRQb3M7CisgICAgZmxvYXQgbV92aXNpYmxlU2l6ZTsKKyAgICBmbG9h
dCBtX3RvdGFsU2l6ZTsKK307CisKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckNvbXBvc2l0b3IuY3BwCmluZGV4IGQ1ZDI1ZDJhM2RiYzc3YjE1NjgwN2YxYzc1YzY0
NDFkYmQxNTNhODkuLmY2NjZmMzc1MGY3ZGMwYzk0ZTA2NGFiMzViZjhjYTczMzUzY2ExYjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3Iu
Y3BwCkBAIC02MSw2ICs2MSwxMCBAQAogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgi
CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1ZGUgIlNjcm9sbGJhclRo
ZW1lQ0NTY3JvbGwuaCIKKyNlbmRpZgorCiAjaWYgUFJPRklMRV9MQVlFUl9SRUJVSUxECiAjaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjZW5kaWYKQEAgLTE4MjgsNiArMTgzMiwxMSBAQCB2
b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycygp
CiAgICAgaWYgKHJlcXVpcmVzSG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKCkpIHsKICAgICAgICAg
aWYgKCFtX2xheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcikgewogICAgICAgICAgICAgbV9sYXll
ckZvckhvcml6b250YWxTY3JvbGxiYXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7Cisj
aWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgICAgICAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9
IG1fcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCktPmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICAg
ICAgICAgIGlmIChTY3JvbGxiYXJUaGVtZUNDU2Nyb2xsKiB0aGVtZSA9IHNjcm9sbGJhci0+dGhl
bWUoKS0+dG9TY3JvbGxiYXJUaGVtZUNDU2Nyb2xsKCkpCisgICAgICAgICAgICAgICAgdGhlbWUt
PmF0dGFjaFRvR3JhcGhpY3NMYXllcihzY3JvbGxiYXIsIG1fc2Nyb2xsTGF5ZXIuZ2V0KCksIG1f
bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyLmdldCgpKTsKKyNlbmRpZgogICAgICNpZm5kZWYg
TkRFQlVHCiAgICAgICAgICAgICBtX2xheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0TmFt
ZSgiaG9yaXpvbnRhbCBzY3JvbGxiYXIiKTsKICAgICAjZW5kaWYKQEAgLTE4NTEsNiArMTg2MCwx
MSBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xh
eWVycygpCiAgICAgaWYgKHJlcXVpcmVzVmVydGljYWxTY3JvbGxiYXJMYXllcigpKSB7CiAgICAg
ICAgIGlmICghbV9sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKSB7CiAgICAgICAgICAgICBtX2xh
eWVyRm9yVmVydGljYWxTY3JvbGxiYXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7Cisj
aWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgICAgICAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9
IG1fcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCktPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgICAg
ICAgICBpZiAoU2Nyb2xsYmFyVGhlbWVDQ1Njcm9sbCogdGhlbWUgPSBzY3JvbGxiYXItPnRoZW1l
KCktPnRvU2Nyb2xsYmFyVGhlbWVDQ1Njcm9sbCgpKQorICAgICAgICAgICAgICAgIHRoZW1lLT5h
dHRhY2hUb0dyYXBoaWNzTGF5ZXIoc2Nyb2xsYmFyLCBtX3Njcm9sbExheWVyLmdldCgpLCBtX2xh
eWVyRm9yVmVydGljYWxTY3JvbGxiYXIuZ2V0KCkpOworI2VuZGlmCiAgICAgI2lmbmRlZiBOREVC
VUcKICAgICAgICAgICAgIG1fbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhci0+c2V0TmFtZSgidmVy
dGljYWwgc2Nyb2xsYmFyIik7CiAgICAgI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128622</attachid>
            <date>2012-02-23 17:55:02 -0800</date>
            <delta_ts>2012-02-29 20:08:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78872-20120223175501.patch</filename>
            <type>text/plain</type>
            <size>168543</size>
            <attacher name="Tien-Ren Chen">trchen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTA1YmZmMzJhNWUzYWRm
OTcwMTQwMGVhOGE2NDljYWRkMmI5MmJkNy4uMmU0ZmFhYTM1ZTJkZjMwYmU1YTlkZTUwZGQ1ZGY0
YWEzNmNmNjlhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1NSBAQAorMjAxMi0wMi0yMyAgVGll
bi1SZW4gQ2hlbiAgPHRyY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBT
Y3JvbGxiYXJMYXllckNocm9taXVtL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsIGZvciBDQy1zaWRlIHNj
cm9sbGJhciBwYWludGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Nzg4NzIKKworICAgICAgICBXSVAgRE8gTk9UIENPTU1JVAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMh
KQorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2No
cm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6c2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OmZyYW1lVmlld0hvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpmcmFtZVZpZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpz
ZXRGcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXI6OmludmFsaWRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c2Ny
b2xsYmFyT3ZlcmxheVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6Z2V0VGlj
a21hcmtzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6aXNTY3JvbGxhYmxlQXJlYUFj
dGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNldEhvdmVyZWRQYXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c2V0UHJlc3NlZFBhcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyOjpzZXRFbmFibGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxi
YXIuaDoKKyAgICAgICAgKFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6
OngpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjp5KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhcjo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpoZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhcjo6bG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpwYXJl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpyb290KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcjo6ZnJhbWVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6
aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1dpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmlzQ3VzdG9tU2Ny
b2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6b3JpZW50YXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjp2YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXI6OmN1cnJlbnRQb3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjp2aXNpYmxl
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnRvdGFsU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXI6Om1heGltdW0pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyOjpjb250cm9sU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmxpbmVTdGVw
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6cGFnZVN0ZXApOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyOjpwcmVzc2VkUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXI6OmhvdmVyZWRQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6ZW5hYmxlZCk6
CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWUuaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWU6OnVwZGF0ZUVuYWJsZWRTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZTo6cGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyVGhlbWU6OmhpdFRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyVGhlbWU6OnVwZGF0ZVNjcm9sbGJhck92ZXJsYXlTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJUaGVtZTo6aW52YWxpZGF0ZVBhcnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhclRoZW1lOjppbnZhbGlkYXRlUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJUaGVtZTo6c2hvdWxkQ2VudGVyT25UaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJUaGVtZTo6c2hvdWxkU25hcEJhY2tUb0RyYWdPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWU6OnNob3VsZERyYWdEb2N1bWVudEluc3RlYWRPZlRodW1iKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lOjp0aHVtYlBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhclRoZW1lOjp0aHVtYkxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJUaGVtZTo6dHJhY2tQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJUaGVtZTo6dHJhY2tMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWU6
OnJlZ2lzdGVyU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lOjp1
bnJlZ2lzdGVyU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNs
aWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU2Nyb2xsYmFyVGhl
bWVDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDbGllbnQ6On5TY3Jv
bGxiYXJUaGVtZUNsaWVudCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21w
b3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OnBh
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjpoaXRUZXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjppbnZhbGlkYXRl
UGFydCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6c3BsaXRU
cmFjayk6CisgICAgICAgIChXZWJDb3JlOjp1c2VkVG90YWxTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjp0aHVtYlBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjp0aHVtYkxlbmd0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6bWluaW11bVRodW1iTGVuZ3RoKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjp0cmFja1Bvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjp0cmFja0xlbmd0aCk6
CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaDoKKyAgICAgICAg
KFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRo
ZW1lQ29tcG9zaXRlOjpwYWludFNjcm9sbGJhckJhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OnBhaW50VHJhY2tCYWNrZ3JvdW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjpwYWludFRyYWNrUGllY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OnBhaW50QnV0dG9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjpwYWludFRodW1iKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjpwYWludFRpY2ttYXJr
cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6Y29uc3RyYWlu
VHJhY2tSZWN0VG9UcmFja1BpZWNlcyk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Ny
b2xsYmFyVGhlbWVDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVt
ZUNocm9taXVtOjpoYXNUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNo
cm9taXVtOjpiYWNrQnV0dG9uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVt
ZUNocm9taXVtOjpmb3J3YXJkQnV0dG9uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJUaGVtZUNocm9taXVtOjp0cmFja1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bTo6cGFpbnRUcmFja0JhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bTo6cGFpbnRUaWNrbWFya3MpOgorICAgICAgICAqIHBsYXRm
b3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhclRoZW1lQ2hyb21pdW06Omhhc0J1dHRvbnMpOgorICAgICAgICAoU2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bUFuZHJvaWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bUFuZHJvaWQ6OnBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtQW5kcm9pZDo6c2hvdWxkQ2VudGVyT25UaHVtYik6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtQW5kcm9pZDo6YnV0dG9u
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtQW5kcm9pZDo6
bWluaW11bVRodW1iTGVuZ3RoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxi
YXJUaGVtZUNocm9taXVtQW5kcm9pZC5oOgorICAgICAgICAoU2Nyb2xsYmFyVGhlbWVDaHJvbWl1
bUFuZHJvaWQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hy
b21pdW1MaW51eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVt
TGludXg6OnBhaW50VHJhY2tQaWVjZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVt
ZUNocm9taXVtTGludXg6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJh
clRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXJUaGVtZUNocm9taXVtTGludXg6OnNob3VsZENlbnRlck9uVGh1bWIpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjpidXR0b25TaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6bWluaW11bVRodW1iTGVu
Z3RoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVt
TGludXguaDoKKyAgICAgICAgKFNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eCk6CisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5oOgorICAgICAg
ICAoU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYyk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21p
dW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9s
bGJhclN0YXRlVG9UaGVtZVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
Q2hyb21pdW1NYWM6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hy
b21pdW1NYWM6OnBhaW50R2l2ZW5UaWNrbWFya3MpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9t
aXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6c2hvdWxkU25hcEJhY2tUb0RyYWdPcmlnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRUcmFja1BpZWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OnBhaW50QnV0
dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OnBhaW50
VGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6Z2V0
VGhlbWVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtV2lu
OjpnZXRUaGVtZUFycm93U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bVdpbjo6Z2V0Q2xhc3NpY1RoZW1lU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6c2hvdWxkQ2VudGVyT25UaHVtYik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpidXR0b25TaXplKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtV2luLmg6CisgICAgICAg
IChTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luKToKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvU2Ny
b2xsYmFyVGhlbWVFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVFZmw6
OnJlZ2lzdGVyU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lRWZs
Ojp1bnJlZ2lzdGVyU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvU2Nyb2xsYmFy
VGhlbWVFZmwuaDoKKyAgICAgICAgKFNjcm9sbGJhclRoZW1lRWZsKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6aGFzQ29udGVudHNMYXllcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldEhvcml6b250YWxTY3Jv
bGxiYXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRWZXJ0aWNh
bFNjcm9sbGJhckxheWVyKToKKyAgICAgICAgKExheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNo
cm9taXVtQW5kcm9pZC5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJMYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJMYXllckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTo6U2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVt
ZUNocm9taXVtQW5kcm9pZC5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTY3JvbGxi
YXJMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
cmVlU3luY2hyb25pemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTeW5jaHJvbml6ZXI6
OnJlc29sdmVJbnRlckxheWVyUG9pbnRlcnNSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmg6
CisgICAgICAgIChUcmVlU3luY2hyb25pemVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoQ0NMYXllckltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2Nyb2xsYmFyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDU2Nyb2xsYmFyOjppc0N1c3RvbVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1Njcm9sbGJhcjo6b3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxi
YXI6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyOjpjdXJyZW50UG9zKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyOjp2aXNpYmxlU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1Njcm9sbGJhcjo6dG90YWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Ny
b2xsYmFyOjptYXhpbXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyOjpjb250cm9s
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhcjo6bGluZVN0ZXApOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXI6OnBhZ2VTdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OkND
U2Nyb2xsYmFyOjpwcmVzc2VkUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhcjo6
aG92ZXJlZFBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXI6OmVuYWJsZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXI6OnNldEVuYWJsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NTY3JvbGxiYXI6OngpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXI6Onkp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXI6OndpZHRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDU2Nyb2xsYmFyOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXI6
OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXI6OmxvY2F0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyOjpwYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NT
Y3JvbGxiYXI6OnJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXI6OnNldEZyYW1l
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhcjo6ZnJhbWVSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDU2Nyb2xsYmFyOjppbnZhbGlkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9s
bGJhcjo6c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xs
YmFyOjpnZXRUaWNrbWFya3MpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXI6OmlzU2Ny
b2xsYWJsZUFyZWFBY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXI6OmNvbnZl
cnRGcm9tQ29udGFpbmluZ1dpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyOjpDQ1Njcm9sbGJhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhcjo6c3luY1Byb3BlcnRpZXMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ1Njcm9sbGJhcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllcklt
cGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NT
Y3JvbGxiYXJMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllcklt
cGw6OndpbGxEcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjph
cHBlbmRRdWFkcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6ZGlk
RHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6cGFpbnQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJ
bXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9s
bGJhclRoZW1lQ2hyb21pdW1BbmRyb2lkLmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KENDU2Nyb2xsYmFyTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5
ZXJJbXBsOjpzZXRTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXll
ckltcGw6OnNjcm9sbGJhcik6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1l
R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
VGhlbWVHdGs6OnJlZ2lzdGVyU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJh
clRoZW1lR3RrOjp1bnJlZ2lzdGVyU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhclRoZW1lR3RrOjp1cGRhdGVTY3JvbGxiYXJzRnJhbWVUaGlja25lc3MpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6Omhhc1RodW1iKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhclRoZW1lR3RrOjpiYWNrQnV0dG9uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJUaGVtZUd0azo6Zm9yd2FyZEJ1dHRvblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWVHdGs6OnRyYWNrUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJUaGVtZUd0azo6dGh1bWJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
R3RrOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6c2hvdWxk
Q2VudGVyT25UaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6YnV0
dG9uU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6bWluaW11bVRo
dW1iTGVuZ3RoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpoYXNCdXR0b25zKToKKyAgICAg
ICAgKFNjcm9sbGJhclRoZW1lR3RrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsYmFy
VGhlbWVHdGsyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldFdpZGdldEZvclNjcm9sbGJhcik6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUcmFja0JhY2tncm91
bmQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50U2Nyb2xsYmFy
QmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRU
aHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRCdXR0b24p
OgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VHJhY2tCYWNrZ3JvdW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpwYWludFNjcm9sbGJhckJhY2tncm91
bmQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VGh1bWIpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50QnV0dG9uKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMuaDoKKyAgICAgICAgKFNjcm9sbGJh
clRoZW1lTWFjKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW06
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lTWFj
OjpyZWdpc3RlclNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1h
Yzo6dW5yZWdpc3RlclNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVt
ZU1hYzo6c2V0TmV3UGFpbnRlckZvclNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXJUaGVtZU1hYzo6cGFpbnRlckZvclNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJUaGVtZU1hYzo6dXBkYXRlU2Nyb2xsYmFyT3ZlcmxheVN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lTWFjOjpoYXNCdXR0b25zKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhclRoZW1lTWFjOjpoYXNUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXJUaGVtZU1hYzo6YmFja0J1dHRvblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyVGhlbWVNYWM6OmZvcndhcmRCdXR0b25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhclRoZW1lTWFjOjp0cmFja1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhl
bWVNYWM6Om1pbmltdW1UaHVtYkxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJU
aGVtZU1hYzo6c2hvdWxkQ2VudGVyT25UaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJUaGVtZU1hYzo6c2hvdWxkRHJhZ0RvY3VtZW50SW5zdGVhZE9mVGh1bWIpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM6OnVwZGF0ZUVuYWJsZWRTdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6cGFpbnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L21vY2svU2Nyb2xsYmFyVGhlbWVNb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJh
clRoZW1lTW9jazo6dHJhY2tSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
TW9jazo6cGFpbnRUcmFja0JhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
VGhlbWVNb2NrOjpwYWludFRodW1iKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL1Njcm9sbGJh
clRoZW1lTW9jay5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNb2NrOjpoYXNC
dXR0b25zKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lTW9jazo6aGFzVGh1bWIp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNb2NrOjpiYWNrQnV0dG9uUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1vY2s6OmZvcndhcmRCdXR0b25SZWN0
KToKKyAgICAgICAgKFNjcm9sbGJhclRoZW1lTW9jayk6CisgICAgICAgICogcGxhdGZvcm0vcXQv
U2Nyb2xsYmFyVGhlbWVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdHlsZU9wdGlvblNsaWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVF0OjpwYWludCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVF0OjpoaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhclRoZW1lUXQ6OnNob3VsZENlbnRlck9uVGh1bWIpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyVGhlbWVRdDo6aW52YWxpZGF0ZVBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWVRdDo6dGh1bWJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXJUaGVtZVF0Ojp0aHVtYkxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJU
aGVtZVF0Ojp0cmFja1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
UXQ6OnRyYWNrTGVuZ3RoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0
Lmg6CisgICAgICAgIChTY3JvbGxiYXJUaGVtZVF0KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4v
U2Nyb2xsYmFyVGhlbWVTYWZhcmkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhl
bWVTYWZhcmk6Omhhc0J1dHRvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVT
YWZhcmk6Omhhc1RodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lU2FmYXJp
OjpiYWNrQnV0dG9uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVNhZmFy
aTo6Zm9yd2FyZEJ1dHRvblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVT
YWZhcmk6OnRyYWNrUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVNhZmFy
aTo6bWluaW11bVRodW1iTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
U2FmYXJpOjpzaG91bGRDZW50ZXJPblRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJh
clRoZW1lU2FmYXJpOjpwYWludFRyYWNrQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJUaGVtZVNhZmFyaTo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyVGhlbWVTYWZhcmk6OnBhaW50VGh1bWIpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9T
Y3JvbGxiYXJUaGVtZVNhZmFyaS5oOgorICAgICAgICAoU2Nyb2xsYmFyVGhlbWVTYWZhcmkpOgor
ICAgICAgICAqIHBsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVdpbjo6aGFzVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWVXaW46OmJhY2tCdXR0b25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhclRoZW1lV2luOjpmb3J3YXJkQnV0dG9uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJUaGVtZVdpbjo6dHJhY2tSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJh
clRoZW1lV2luOjpzaG91bGRDZW50ZXJPblRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhclRoZW1lV2luOjpzaG91bGRTbmFwQmFja1RvRHJhZ09yaWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJUaGVtZVdpbjo6cGFpbnRUcmFja0JhY2tncm91bmQpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVXaW46OnBhaW50VHJhY2tQaWVjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVdpbjo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViQ29y
ZTo6cGFpbnRHcmlwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lV2luOjpw
YWludFRodW1iKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uaDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lV2luOjpoYXNCdXR0b25zKToKKyAgICAg
ICAgKFNjcm9sbGJhclRoZW1lV2luKToKKyAgICAgICAgKiBwbGF0Zm9ybS93eC9TY3JvbGxiYXJU
aGVtZVd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lV3g6Omhhc1RodW1i
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lV3g6Om1pbmltdW1UaHVtYkxlbmd0
aCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVd4OjpidXR0b25TaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lV3g6OnNwbGl0VHJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVXeDo6YmFja0J1dHRvblJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyVGhlbWVXeDo6Zm9yd2FyZEJ1dHRvblJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyVGhlbWVXeDo6dHJhY2tSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhclRoZW1lV3g6OnBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS93eC9TY3JvbGxiYXJU
aGVtZVd4Lmg6CisgICAgICAgIChTY3JvbGxiYXJUaGVtZVd4KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhclRoZW1lV3g6Omhhc0J1dHRvbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJTY3JvbGxiYXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvUmVuZGVyU2Nyb2xsYmFyKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyVGhlbWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU2Nyb2xsYmFyVGhlbWU6OmJ1dHRvblNpemVzQWxvbmdUcmFja0F4aXMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyVGhlbWU6Omhhc0J1dHRvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyVGhlbWU6Omhhc1RodW1iKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNjcm9sbGJhclRoZW1lOjptaW5pbXVtVGh1bWJMZW5ndGgpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyVGhlbWU6OmJhY2tCdXR0b25SZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNjcm9sbGJhclRoZW1lOjpmb3J3YXJkQnV0dG9uUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTY3JvbGxiYXJUaGVtZTo6dHJhY2tSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNjcm9sbGJhclRoZW1lOjpjb25zdHJhaW5UcmFja1JlY3RU
b1RyYWNrUGllY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNjcm9sbGJhclRoZW1lOjpw
YWludFNjcm9sbGJhckJhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xs
YmFyVGhlbWU6OnBhaW50VHJhY2tCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNjcm9sbGJhclRoZW1lOjpwYWludFRyYWNrUGllY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU2Nyb2xsYmFyVGhlbWU6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNjcm9sbGJhclRoZW1lOjpwYWludFRodW1iKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
U2Nyb2xsYmFyVGhlbWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNjcm9sbGJhclRoZW1l
OjpzaG91bGRDZW50ZXJPblRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNjcm9sbGJh
clRoZW1lOjpyZWdpc3RlclNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTY3Jv
bGxiYXJUaGVtZTo6dW5yZWdpc3RlclNjcm9sbGJhcik6CisgICAgICAgIChSZW5kZXJTY3JvbGxi
YXJUaGVtZSk6CisKIDIwMTItMDItMjIgIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQub3Jn
PgogCiAgICAgICAgIEFic3RyYWN0IEltYWdlRXZlbnRTZW5kZXIgaW50byBhIGdlbmVyYWwgcHVy
cG9zZSBFdmVudFNlbmRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDI2OTgxNzk4Njk0ODNiNjJkZjdi
NGYxZjI4NTBhOTM5ODBhYmE2MzkuLjVkMTAxNjExMjkzYjJkNGQ3NDdlZGYxYTNjN2Q4NGZkZjNm
NTJmMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTI5Miw2ICsyOTIsNyBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9s
bGJhci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZS5oJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNsaWVudC5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9TZWFyY2hQb3B1cE1lbnUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vU2hhcmVk
QnVmZmVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1NoYXJlZEJ1ZmZlckNodW5rUmVhZGVy
LmgnLApAQCAtMzE5OSw2ICszMjAwLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtLmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVy
Q2hyb21pdW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9T
Y3JvbGxiYXJMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1NvbGlkQ29sb3JMYXllckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU29saWRDb2xvckxheWVyQ2hyb21pdW0uaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuY3BwJywK
QEAgLTMzMDgsNiArMzMxMSwxMCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU2NoZWR1bGVyU3RhdGVNYWNoaW5lLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmUuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUaHJlYWRQ
cm94eS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Nj
cm9sbGJhci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2Nyb2xsYmFyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0
ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21p
dW0uY3BwCmluZGV4IDg5MGUwOThkYzA0ZmNiNDEzOWMzOGEwNzBhMTdlYjRlNDg2MzA0NjMuLjUy
ZGQwZjMwYmU3OGMyZTdkMjdkNmZhYjI2OWIzNzdhODkwNzdjMDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hy
b21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCkBAIC0yNyw2ICsyNywxMiBAQAogCiAjaW5j
bHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKIAorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhckxheWVyQ2hyb21pdW0u
aCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzUmVmUHRyPFNjcm9sbGluZ0Nvb3JkaW5h
dG9yPiBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y3JlYXRlKFBhZ2UqIHBhZ2UpCkBAIC0zNCwxNCAr
NDAsNDYgQEAgUGFzc1JlZlB0cjxTY3JvbGxpbmdDb29yZGluYXRvcj4gU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OmNyZWF0ZShQYWdlKiBwYWdlKQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2Nyb2xs
aW5nQ29vcmRpbmF0b3IocGFnZSkpOwogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpm
cmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiwgR3Jh
cGhpY3NMYXllciogaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKQorc3RhdGljIEdyYXBoaWNzTGF5
ZXIqIHNjcm9sbExheWVyRm9yRnJhbWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KQogewotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQhCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
ICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lVmlldy0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBmcmFtZS0+
Y29udGVudFJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJWaWV3KQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gcmVuZGVyVmlldy0+Y29tcG9zaXRvcigpLT5zY3JvbGxMYXllcigpOwor
I2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpmcmFtZVZpZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyos
IEdyYXBoaWNzTGF5ZXIqIHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIpCit2b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJh
bWVWaWV3KiBmcmFtZVZpZXcsIEdyYXBoaWNzTGF5ZXIqIGhvcml6b250YWxTY3JvbGxiYXJMYXll
cikKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IQorICAgIEdyYXBoaWNzTGF5ZXIqIHNjcm9s
bExheWVyID0gc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KTsKKyAgICBBU1NFUlQo
c2Nyb2xsTGF5ZXIpOworICAgIGlmICghaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKQorICAgICAg
ICBzY3JvbGxMYXllci0+cGxhdGZvcm1MYXllcigpLT5zZXRIb3Jpem9udGFsU2Nyb2xsYmFyTGF5
ZXIoMCk7CisgICAgZWxzZSB7CisgICAgICAgIFJlZlB0cjxTY3JvbGxiYXJMYXllckNocm9taXVt
PiBzY3JvbGxiYXJMYXllciA9IFNjcm9sbGJhckxheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAg
ICAgICBob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShzY3JvbGxi
YXJMYXllci5nZXQoKSk7CisgICAgICAgIHNjcm9sbExheWVyLT5wbGF0Zm9ybUxheWVyKCktPnNl
dEhvcml6b250YWxTY3JvbGxiYXJMYXllcihzY3JvbGxiYXJMYXllci5nZXQoKSk7CisgICAgfQor
fQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdWZXJ0aWNhbFNjcm9sbGJh
ckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBHcmFwaGljc0xheWVyKiB2ZXJ0
aWNhbFNjcm9sbGJhckxheWVyKQoreworICAgIEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyID0g
c2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KTsKKyAgICBBU1NFUlQoc2Nyb2xsTGF5
ZXIpOworICAgIGlmICghdmVydGljYWxTY3JvbGxiYXJMYXllcikKKyAgICAgICAgc2Nyb2xsTGF5
ZXItPnBsYXRmb3JtTGF5ZXIoKS0+c2V0VmVydGljYWxTY3JvbGxiYXJMYXllcigwKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgUmVmUHRyPFNjcm9sbGJhckxheWVyQ2hyb21pdW0+IHNjcm9sbGJhckxh
eWVyID0gU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgICAgIHZlcnRpY2Fs
U2Nyb2xsYmFyTGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShzY3JvbGxiYXJMYXllci5nZXQoKSk7
CisgICAgICAgIHNjcm9sbExheWVyLT5wbGF0Zm9ybUxheWVyKCktPnNldFZlcnRpY2FsU2Nyb2xs
YmFyTGF5ZXIoc2Nyb2xsYmFyTGF5ZXIuZ2V0KCkpOworICAgIH0KIH0KIAogdm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvcjo6c2V0U2Nyb2xsTGF5ZXIoR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAppbmRleCAzYjljMTk1Y2ZmNTUzOTE2
NTU2MjAzZTJmMmNjNGZlNWQ4ZjlhNTFlLi44YmZiNmFjNTJhYzk4NWQ5ZWZmMGRiNzE1MjkxMGYx
NDZkYzFhYjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKQEAgLTExMiw2
ICsxMTIsOTkgQEAgU2Nyb2xsYmFyOjp+U2Nyb2xsYmFyKCkKICAgICBtX3RoZW1lLT51bnJlZ2lz
dGVyU2Nyb2xsYmFyKHRoaXMpOwogfQogCit2b2lkIFNjcm9sbGJhcjo6c2V0RnJhbWVSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgLy8gR2V0IG91ciB3aW5kb3cgcmVzaXplciByZWN0
IGFuZCBzZWUgaWYgd2Ugb3ZlcmxhcC4gIEFkanVzdCB0byBhdm9pZCB0aGUgb3ZlcmxhcAorICAg
IC8vIGlmIG5lY2Vzc2FyeS4KKyAgICBJbnRSZWN0IGFkanVzdGVkUmVjdChyZWN0KTsKKyAgICBi
b29sIG92ZXJsYXBzUmVzaXplciA9IGZhbHNlOworICAgIFNjcm9sbFZpZXcqIHZpZXcgPSBwYXJl
bnQoKTsKKyAgICBpZiAodmlldyAmJiAhcmVjdC5pc0VtcHR5KCkgJiYgIXZpZXctPndpbmRvd1Jl
c2l6ZXJSZWN0KCkuaXNFbXB0eSgpKSB7CisgICAgICAgIEludFJlY3QgcmVzaXplclJlY3QgPSB2
aWV3LT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3codmlldy0+d2luZG93UmVzaXplclJlY3Qo
KSk7CisgICAgICAgIGlmIChyZWN0LmludGVyc2VjdHMocmVzaXplclJlY3QpKSB7CisgICAgICAg
ICAgICBpZiAob3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAgICAg
ICAgICAgICAgaW50IG92ZXJsYXAgPSByZWN0Lm1heFgoKSAtIHJlc2l6ZXJSZWN0LngoKTsKKyAg
ICAgICAgICAgICAgICBpZiAob3ZlcmxhcCA+IDAgJiYgcmVzaXplclJlY3QubWF4WCgpID49IHJl
Y3QubWF4WCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGFkanVzdGVkUmVjdC5zZXRXaWR0aChy
ZWN0LndpZHRoKCkgLSBvdmVybGFwKTsKKyAgICAgICAgICAgICAgICAgICAgb3ZlcmxhcHNSZXNp
emVyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGludCBvdmVybGFwID0gcmVjdC5tYXhZKCkgLSByZXNpemVyUmVjdC55KCk7
CisgICAgICAgICAgICAgICAgaWYgKG92ZXJsYXAgPiAwICYmIHJlc2l6ZXJSZWN0Lm1heFkoKSA+
PSByZWN0Lm1heFkoKSkgeworICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZFJlY3Quc2V0SGVp
Z2h0KHJlY3QuaGVpZ2h0KCkgLSBvdmVybGFwKTsKKyAgICAgICAgICAgICAgICAgICAgb3Zlcmxh
cHNSZXNpemVyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgaWYgKG92ZXJsYXBzUmVzaXplciAhPSBtX292ZXJsYXBzUmVzaXpl
cikgeworICAgICAgICBtX292ZXJsYXBzUmVzaXplciA9IG92ZXJsYXBzUmVzaXplcjsKKyAgICAg
ICAgaWYgKHZpZXcpCisgICAgICAgICAgICB2aWV3LT5hZGp1c3RTY3JvbGxiYXJzQXZvaWRpbmdS
ZXNpemVyQ291bnQobV9vdmVybGFwc1Jlc2l6ZXIgPyAxIDogLTEpOworICAgIH0KKworICAgIFdp
ZGdldDo6c2V0RnJhbWVSZWN0KGFkanVzdGVkUmVjdCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyOjpp
bnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChzdXBwcmVzc0lu
dmFsaWRhdGlvbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJl
YSkKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+aW52YWxpZGF0ZVNjcm9sbGJhcih0aGlzLCBy
ZWN0KTsKK30KKworU2Nyb2xsYmFyT3ZlcmxheVN0eWxlIFNjcm9sbGJhcjo6c2Nyb2xsYmFyT3Zl
cmxheVN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYSA/IFNjcm9s
bGJhck92ZXJsYXlTdHlsZURlZmF1bHQgOiBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxiYXJPdmVy
bGF5U3R5bGUoKTsKK30KKwordm9pZCBTY3JvbGxiYXI6OmdldFRpY2ttYXJrcyhWZWN0b3I8SW50
UmVjdD4mIHRpY2ttYXJrcykgY29uc3QKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAg
ICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Z2V0VGlja21hcmtzKHRpY2ttYXJrcyk7Cit9CisKK2Jv
b2wgU2Nyb2xsYmFyOjppc1Njcm9sbGFibGVBcmVhQWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFibGVBcmVhLT5pc0FjdGl2ZSgpOworfQor
Cit2b2lkIFNjcm9sbGJhcjo6c2V0SG92ZXJlZFBhcnQoU2Nyb2xsYmFyUGFydCBwYXJ0KQorewor
ICAgIGlmIChwYXJ0ID09IG1faG92ZXJlZFBhcnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICgobV9ob3ZlcmVkUGFydCA9PSBOb1BhcnQgfHwgcGFydCA9PSBOb1BhcnQpICYmIHRoZW1lKCkt
PmludmFsaWRhdGVPbk1vdXNlRW50ZXJFeGl0KCkpCisgICAgICAgIGludmFsaWRhdGUoKTsgIC8v
IEp1c3QgaW52YWxpZGF0ZSB0aGUgd2hvbGUgc2Nyb2xsYmFyLCBzaW5jZSB0aGUgYnV0dG9ucyBh
dCBlaXRoZXIgZW5kIGNoYW5nZSBhbnl3YXkuCisgICAgZWxzZSBpZiAobV9wcmVzc2VkUGFydCA9
PSBOb1BhcnQpIHsgIC8vIFdoZW4gdGhlcmUncyBhIHByZXNzZWQgcGFydCwgd2UgZG9uJ3QgZHJh
dyBhIGhvdmVyZWQgc3RhdGUsIHNvIHRoZXJlJ3Mgbm8gcmVhc29uIHRvIGludmFsaWRhdGUuCisg
ICAgICAgIHRoZW1lKCktPmludmFsaWRhdGVQYXJ0KHRoaXMsIHBhcnQpOworICAgICAgICB0aGVt
ZSgpLT5pbnZhbGlkYXRlUGFydCh0aGlzLCBtX2hvdmVyZWRQYXJ0KTsKKyAgICB9CisgICAgbV9o
b3ZlcmVkUGFydCA9IHBhcnQ7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyOjpzZXRQcmVzc2VkUGFydChT
Y3JvbGxiYXJQYXJ0IHBhcnQpCit7CisgICAgaWYgKG1fcHJlc3NlZFBhcnQgIT0gTm9QYXJ0KQor
ICAgICAgICB0aGVtZSgpLT5pbnZhbGlkYXRlUGFydCh0aGlzLCBtX3ByZXNzZWRQYXJ0KTsKKyAg
ICBtX3ByZXNzZWRQYXJ0ID0gcGFydDsKKyAgICBpZiAobV9wcmVzc2VkUGFydCAhPSBOb1BhcnQp
CisgICAgICAgIHRoZW1lKCktPmludmFsaWRhdGVQYXJ0KHRoaXMsIG1fcHJlc3NlZFBhcnQpOwor
ICAgIGVsc2UgaWYgKG1faG92ZXJlZFBhcnQgIT0gTm9QYXJ0KSAgLy8gV2hlbiB3ZSBubyBsb25n
ZXIgaGF2ZSBhIHByZXNzZWQgcGFydCwgd2UgY2FuIHN0YXJ0IGRyYXdpbmcgYSBob3ZlcmVkIHN0
YXRlIG9uIHRoZSBob3ZlcmVkIHBhcnQuCisgICAgICAgIHRoZW1lKCktPmludmFsaWRhdGVQYXJ0
KHRoaXMsIG1faG92ZXJlZFBhcnQpOworfQorCit2b2lkIFNjcm9sbGJhcjo6c2V0RW5hYmxlZChi
b29sIGUpCit7IAorICAgIGlmIChtX2VuYWJsZWQgPT0gZSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fZW5hYmxlZCA9IGU7CisgICAgdGhlbWUoKS0+dXBkYXRlRW5hYmxlZFN0YXRlKHRoaXMpOwor
ICAgIGludmFsaWRhdGUoKTsKK30KKwogdm9pZCBTY3JvbGxiYXI6Om9mZnNldERpZENoYW5nZSgp
CiB7CiAgICAgQVNTRVJUKG1fc2Nyb2xsYWJsZUFyZWEpOwpAQCAtMzA0LDMxICszOTcsNiBAQCB2
b2lkIFNjcm9sbGJhcjo6bW92ZVRodW1iKGludCBwb3MsIGJvb2wgZHJhZ2dpbmdEb2N1bWVudCkK
ICAgICB9CiB9CiAKLXZvaWQgU2Nyb2xsYmFyOjpzZXRIb3ZlcmVkUGFydChTY3JvbGxiYXJQYXJ0
IHBhcnQpCi17Ci0gICAgaWYgKHBhcnQgPT0gbV9ob3ZlcmVkUGFydCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKChtX2hvdmVyZWRQYXJ0ID09IE5vUGFydCB8fCBwYXJ0ID09IE5vUGFydCkg
JiYgdGhlbWUoKS0+aW52YWxpZGF0ZU9uTW91c2VFbnRlckV4aXQoKSkKLSAgICAgICAgaW52YWxp
ZGF0ZSgpOyAgLy8gSnVzdCBpbnZhbGlkYXRlIHRoZSB3aG9sZSBzY3JvbGxiYXIsIHNpbmNlIHRo
ZSBidXR0b25zIGF0IGVpdGhlciBlbmQgY2hhbmdlIGFueXdheS4KLSAgICBlbHNlIGlmIChtX3By
ZXNzZWRQYXJ0ID09IE5vUGFydCkgeyAgLy8gV2hlbiB0aGVyZSdzIGEgcHJlc3NlZCBwYXJ0LCB3
ZSBkb24ndCBkcmF3IGEgaG92ZXJlZCBzdGF0ZSwgc28gdGhlcmUncyBubyByZWFzb24gdG8gaW52
YWxpZGF0ZS4KLSAgICAgICAgdGhlbWUoKS0+aW52YWxpZGF0ZVBhcnQodGhpcywgcGFydCk7Ci0g
ICAgICAgIHRoZW1lKCktPmludmFsaWRhdGVQYXJ0KHRoaXMsIG1faG92ZXJlZFBhcnQpOwotICAg
IH0KLSAgICBtX2hvdmVyZWRQYXJ0ID0gcGFydDsKLX0KLQotdm9pZCBTY3JvbGxiYXI6OnNldFBy
ZXNzZWRQYXJ0KFNjcm9sbGJhclBhcnQgcGFydCkKLXsKLSAgICBpZiAobV9wcmVzc2VkUGFydCAh
PSBOb1BhcnQpCi0gICAgICAgIHRoZW1lKCktPmludmFsaWRhdGVQYXJ0KHRoaXMsIG1fcHJlc3Nl
ZFBhcnQpOwotICAgIG1fcHJlc3NlZFBhcnQgPSBwYXJ0OwotICAgIGlmIChtX3ByZXNzZWRQYXJ0
ICE9IE5vUGFydCkKLSAgICAgICAgdGhlbWUoKS0+aW52YWxpZGF0ZVBhcnQodGhpcywgbV9wcmVz
c2VkUGFydCk7Ci0gICAgZWxzZSBpZiAobV9ob3ZlcmVkUGFydCAhPSBOb1BhcnQpICAvLyBXaGVu
IHdlIG5vIGxvbmdlciBoYXZlIGEgcHJlc3NlZCBwYXJ0LCB3ZSBjYW4gc3RhcnQgZHJhd2luZyBh
IGhvdmVyZWQgc3RhdGUgb24gdGhlIGhvdmVyZWQgcGFydC4KLSAgICAgICAgdGhlbWUoKS0+aW52
YWxpZGF0ZVBhcnQodGhpcywgbV9ob3ZlcmVkUGFydCk7Ci19Ci0KIGJvb2wgU2Nyb2xsYmFyOjpt
b3VzZU1vdmVkKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQogewogICAgIGlmIChtX3By
ZXNzZWRQYXJ0ID09IFRodW1iUGFydCkgewpAQCAtNDMyLDQwICs1MDAsNiBAQCBib29sIFNjcm9s
bGJhcjo6bW91c2VEb3duKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIFNjcm9sbGJhcjo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QpCi17Ci0gICAgLy8gR2V0IG91ciB3aW5kb3cgcmVzaXplciByZWN0IGFuZCBzZWUgaWYg
d2Ugb3ZlcmxhcC4gIEFkanVzdCB0byBhdm9pZCB0aGUgb3ZlcmxhcAotICAgIC8vIGlmIG5lY2Vz
c2FyeS4KLSAgICBJbnRSZWN0IGFkanVzdGVkUmVjdChyZWN0KTsKLSAgICBib29sIG92ZXJsYXBz
UmVzaXplciA9IGZhbHNlOwotICAgIFNjcm9sbFZpZXcqIHZpZXcgPSBwYXJlbnQoKTsKLSAgICBp
ZiAodmlldyAmJiAhcmVjdC5pc0VtcHR5KCkgJiYgIXZpZXctPndpbmRvd1Jlc2l6ZXJSZWN0KCku
aXNFbXB0eSgpKSB7Ci0gICAgICAgIEludFJlY3QgcmVzaXplclJlY3QgPSB2aWV3LT5jb252ZXJ0
RnJvbUNvbnRhaW5pbmdXaW5kb3codmlldy0+d2luZG93UmVzaXplclJlY3QoKSk7Ci0gICAgICAg
IGlmIChyZWN0LmludGVyc2VjdHMocmVzaXplclJlY3QpKSB7Ci0gICAgICAgICAgICBpZiAob3Jp
ZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgICAgICAgICAgaW50
IG92ZXJsYXAgPSByZWN0Lm1heFgoKSAtIHJlc2l6ZXJSZWN0LngoKTsKLSAgICAgICAgICAgICAg
ICBpZiAob3ZlcmxhcCA+IDAgJiYgcmVzaXplclJlY3QubWF4WCgpID49IHJlY3QubWF4WCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGFkanVzdGVkUmVjdC5zZXRXaWR0aChyZWN0LndpZHRoKCkg
LSBvdmVybGFwKTsKLSAgICAgICAgICAgICAgICAgICAgb3ZlcmxhcHNSZXNpemVyID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGludCBvdmVybGFwID0gcmVjdC5tYXhZKCkgLSByZXNpemVyUmVjdC55KCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKG92ZXJsYXAgPiAwICYmIHJlc2l6ZXJSZWN0Lm1heFkoKSA+PSByZWN0Lm1heFko
KSkgewotICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZFJlY3Quc2V0SGVpZ2h0KHJlY3QuaGVp
Z2h0KCkgLSBvdmVybGFwKTsKLSAgICAgICAgICAgICAgICAgICAgb3ZlcmxhcHNSZXNpemVyID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgaWYgKG92ZXJsYXBzUmVzaXplciAhPSBtX292ZXJsYXBzUmVzaXplcikgewotICAgICAg
ICBtX292ZXJsYXBzUmVzaXplciA9IG92ZXJsYXBzUmVzaXplcjsKLSAgICAgICAgaWYgKHZpZXcp
Ci0gICAgICAgICAgICB2aWV3LT5hZGp1c3RTY3JvbGxiYXJzQXZvaWRpbmdSZXNpemVyQ291bnQo
bV9vdmVybGFwc1Jlc2l6ZXIgPyAxIDogLTEpOwotICAgIH0KLQotICAgIFdpZGdldDo6c2V0RnJh
bWVSZWN0KGFkanVzdGVkUmVjdCk7Ci19Ci0KIHZvaWQgU2Nyb2xsYmFyOjpzZXRQYXJlbnQoU2Ny
b2xsVmlldyogcGFyZW50VmlldykKIHsKICAgICBpZiAoIXBhcmVudFZpZXcgJiYgbV9vdmVybGFw
c1Jlc2l6ZXIgJiYgcGFyZW50KCkpCkBAIC00NzMsMTUgKzUwNyw2IEBAIHZvaWQgU2Nyb2xsYmFy
OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50VmlldykKICAgICBXaWRnZXQ6OnNldFBhcmVu
dChwYXJlbnRWaWV3KTsKIH0KIAotdm9pZCBTY3JvbGxiYXI6OnNldEVuYWJsZWQoYm9vbCBlKQot
eyAKLSAgICBpZiAobV9lbmFibGVkID09IGUpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2VuYWJs
ZWQgPSBlOwotICAgIHRoZW1lKCktPnVwZGF0ZUVuYWJsZWRTdGF0ZSh0aGlzKTsKLSAgICBpbnZh
bGlkYXRlKCk7Ci19Ci0KIGJvb2wgU2Nyb2xsYmFyOjppc092ZXJsYXlTY3JvbGxiYXIoKSBjb25z
dAogewogICAgIHJldHVybiBtX3RoZW1lLT51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKQEAgLTUx
MSwxNSArNTM2LDYgQEAgQVhPYmplY3RDYWNoZSogU2Nyb2xsYmFyOjpheE9iamVjdENhY2hlKCkg
Y29uc3QKICAgICByZXR1cm4gZG9jdW1lbnQtPmF4T2JqZWN0Q2FjaGUoKTsKIH0KIAotdm9pZCBT
Y3JvbGxiYXI6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYg
KHN1cHByZXNzSW52YWxpZGF0aW9uKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3Nj
cm9sbGFibGVBcmVhKQotICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5pbnZhbGlkYXRlU2Nyb2xs
YmFyKHRoaXMsIHJlY3QpOwotfQotCiBJbnRSZWN0IFNjcm9sbGJhcjo6Y29udmVydFRvQ29udGFp
bmluZ1ZpZXcoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdAogewogICAgIGlmIChtX3Nj
cm9sbGFibGVBcmVhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
YmFyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAppbmRleCAzOWFjMjU0
NjVkMTQ1NWE1OTkyY2QyNWMyMjI4ZGQyYjY1MzRhNjNkLi4yYTgxNzIyODJhMTgxMGIyNDVhZGM2
NzE3ODY3NWYxZThhOTFiOTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxiYXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaApAQCAt
MjYsNiArMjYsNyBAQAogI2lmbmRlZiBTY3JvbGxiYXJfaAogI2RlZmluZSBTY3JvbGxiYXJfaAog
CisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVDbGllbnQuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBl
cy5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCkBAIC00MCwxMyAr
NDEsNTkgQEAgY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50OwogY2xhc3MgU2Nyb2xsYWJsZUFyZWE7
CiBjbGFzcyBTY3JvbGxiYXJUaGVtZTsKIAotY2xhc3MgU2Nyb2xsYmFyIDogcHVibGljIFdpZGdl
dCB7CitjbGFzcyBTY3JvbGxiYXIgOiBwdWJsaWMgV2lkZ2V0LAorICAgICAgICAgICAgICAgICAg
cHVibGljIFNjcm9sbGJhclRoZW1lQ2xpZW50IHsKKwogcHVibGljOgogICAgIC8vIE11c3QgYmUg
aW1wbGVtZW50ZWQgYnkgcGxhdGZvcm1zIHRoYXQgY2FuJ3Qgc2ltcGx5IHVzZSB0aGUgU2Nyb2xs
YmFyIGJhc2UgY2xhc3MuICBSaWdodCBub3cgdGhlIG9ubHkgcGxhdGZvcm0gdGhhdCBpcyBub3Qg
dXNpbmcgdGhlIGJhc2UgY2xhc3MgaXMgR1RLLgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjcm9s
bGJhcj4gY3JlYXRlTmF0aXZlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplIHNpemUpOwogCiAgICAg
dmlydHVhbCB+U2Nyb2xsYmFyKCk7CiAKKyAgICAvLyBTY3JvbGxiYXJUaGVtZUNsaWVudCBpbXBs
ZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIGludCB4KCkgY29uc3QgeyByZXR1cm4gV2lkZ2V0Ojp4
KCk7IH0KKyAgICB2aXJ0dWFsIGludCB5KCkgY29uc3QgeyByZXR1cm4gV2lkZ2V0Ojp5KCk7IH0K
KyAgICB2aXJ0dWFsIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIFdpZGdldDo6d2lkdGgoKTsg
fQorICAgIHZpcnR1YWwgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIFdpZGdldDo6aGVpZ2h0
KCk7IH0KKyAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIFdpZGdldDo6
c2l6ZSgpOyB9CisgICAgdmlydHVhbCBJbnRQb2ludCBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IFdpZGdldDo6bG9jYXRpb24oKTsgfQorCisgICAgdmlydHVhbCBTY3JvbGxWaWV3KiBwYXJlbnQo
KSBjb25zdCB7IHJldHVybiBXaWRnZXQ6OnBhcmVudCgpOyB9CisgICAgdmlydHVhbCBTY3JvbGxW
aWV3KiByb290KCkgY29uc3QgeyByZXR1cm4gV2lkZ2V0Ojpyb290KCk7IH0KKworICAgIHZpcnR1
YWwgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgSW50UmVj
dCBmcmFtZVJlY3QoKSBjb25zdCB7IHJldHVybiBXaWRnZXQ6OmZyYW1lUmVjdCgpOyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpIHsgV2lkZ2V0OjppbnZhbGlkYXRlKCk7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYpOworCisgICAgdmly
dHVhbCBTY3JvbGxiYXJPdmVybGF5U3R5bGUgc2Nyb2xsYmFyT3ZlcmxheVN0eWxlKCkgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIGdldFRpY2ttYXJrcyhWZWN0b3I8SW50UmVjdD4mKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSgpIGNvbnN0OworCisgICAg
dmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9p
bnQmIHdpbmRvd1BvaW50KSB7IHJldHVybiBXaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1dp
bmRvdyh3aW5kb3dQb2ludCk7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc0N1c3RvbVNjcm9sbGJh
cigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBTY3JvbGxiYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZW50YXRpb247IH0KKworICAg
IHZpcnR1YWwgaW50IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbHJvdW5kZihtX2N1cnJlbnRQb3Mp
OyB9CisgICAgdmlydHVhbCBmbG9hdCBjdXJyZW50UG9zKCkgY29uc3QgeyByZXR1cm4gbV9jdXJy
ZW50UG9zOyB9CisgICAgdmlydHVhbCBpbnQgdmlzaWJsZVNpemUoKSBjb25zdCB7IHJldHVybiBt
X3Zpc2libGVTaXplOyB9CisgICAgdmlydHVhbCBpbnQgdG90YWxTaXplKCkgY29uc3QgeyByZXR1
cm4gbV90b3RhbFNpemU7IH0KKyAgICB2aXJ0dWFsIGludCBtYXhpbXVtKCkgY29uc3QgeyByZXR1
cm4gbV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXplOyB9CisgICAgdmlydHVhbCBTY3JvbGxiYXJD
b250cm9sU2l6ZSBjb250cm9sU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udHJvbFNpemU7IH0K
KworICAgIHZpcnR1YWwgaW50IGxpbmVTdGVwKCkgY29uc3QgeyByZXR1cm4gbV9saW5lU3RlcDsg
fQorICAgIHZpcnR1YWwgaW50IHBhZ2VTdGVwKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlU3RlcDsg
fQorCisgICAgdmlydHVhbCBTY3JvbGxiYXJQYXJ0IHByZXNzZWRQYXJ0KCkgY29uc3QgeyByZXR1
cm4gbV9wcmVzc2VkUGFydDsgfQorICAgIHZpcnR1YWwgU2Nyb2xsYmFyUGFydCBob3ZlcmVkUGFy
dCgpIGNvbnN0IHsgcmV0dXJuIG1faG92ZXJlZFBhcnQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
SG92ZXJlZFBhcnQoU2Nyb2xsYmFyUGFydCk7CisgICAgdmlydHVhbCB2b2lkIHNldFByZXNzZWRQ
YXJ0KFNjcm9sbGJhclBhcnQpOworCisgICAgdmlydHVhbCBib29sIGVuYWJsZWQoKSBjb25zdCB7
IHJldHVybiBtX2VuYWJsZWQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlZChib29sIGUp
OworCiAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBTY3JvbGxhYmxlQXJlYSB3aGVuIHRoZSBzY3JvbGwg
b2Zmc2V0IGNoYW5nZXMuCiAgICAgdm9pZCBvZmZzZXREaWRDaGFuZ2UoKTsKIApAQCAtNTcsMzQg
KzEwNCwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNjb25uZWN0RnJvbVNjcm9sbGFibGVBcmVh
KCkgeyBtX3Njcm9sbGFibGVBcmVhID0gMDsgfQogICAgIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxh
YmxlQXJlYSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWE7IH0KIAotICAgIHZpcnR1
YWwgYm9vbCBpc0N1c3RvbVNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
U2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBtX29yaWVu
dGF0aW9uOyB9Ci0KLSAgICBpbnQgdmFsdWUoKSBjb25zdCB7IHJldHVybiBscm91bmRmKG1fY3Vy
cmVudFBvcyk7IH0KLSAgICBmbG9hdCBjdXJyZW50UG9zKCkgY29uc3QgeyByZXR1cm4gbV9jdXJy
ZW50UG9zOyB9CiAgICAgaW50IHByZXNzZWRQb3MoKSBjb25zdCB7IHJldHVybiBtX3ByZXNzZWRQ
b3M7IH0KLSAgICBpbnQgdmlzaWJsZVNpemUoKSBjb25zdCB7IHJldHVybiBtX3Zpc2libGVTaXpl
OyB9Ci0gICAgaW50IHRvdGFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxTaXplOyB9Ci0g
ICAgaW50IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX3RvdGFsU2l6ZSAtIG1fdmlzaWJsZVNp
emU7IH0gICAgICAgIAotICAgIFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9jb250cm9sU2l6ZTsgfQogCi0gICAgaW50IGxpbmVTdGVwKCkgY29uc3Qg
eyByZXR1cm4gbV9saW5lU3RlcDsgfQotICAgIGludCBwYWdlU3RlcCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFnZVN0ZXA7IH0KICAgICBmbG9hdCBwaXhlbFN0ZXAoKSBjb25zdCB7IHJldHVybiBtX3Bp
eGVsU3RlcDsgfQogCi0gICAgU2Nyb2xsYmFyUGFydCBwcmVzc2VkUGFydCgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJlc3NlZFBhcnQ7IH0KLSAgICBTY3JvbGxiYXJQYXJ0IGhvdmVyZWRQYXJ0KCkgY29u
c3QgeyByZXR1cm4gbV9ob3ZlcmVkUGFydDsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRIb3ZlcmVk
UGFydChTY3JvbGxiYXJQYXJ0KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlc3NlZFBhcnQoU2Ny
b2xsYmFyUGFydCk7Ci0KICAgICB2b2lkIHNldFN0ZXBzKGludCBsaW5lU3RlcCwgaW50IHBhZ2VT
dGVwLCBpbnQgcGl4ZWxzUGVyU3RlcCA9IDEpOwogICAgIHZvaWQgc2V0UHJvcG9ydGlvbihpbnQg
dmlzaWJsZVNpemUsIGludCB0b3RhbFNpemUpOwogICAgIHZvaWQgc2V0UHJlc3NlZFBvcyhpbnQg
cCkgeyBtX3ByZXNzZWRQb3MgPSBwOyB9Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOwogCi0gICAgYm9vbCBl
bmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9lbmFibGVkOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNl
dEVuYWJsZWQoYm9vbCBlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNPdmVy
bGF5U2Nyb2xsYmFyKCkgY29uc3Q7CiAgICAgYm9vbCBzaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVz
dGluZygpOwpAQCAtOTcsNyArMTI1LDcgQEAgcHVibGljOgogICAgIGJvb2wgbW91c2VNb3ZlZChj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKICAgICB2b2lkIG1vdXNlRW50ZXJlZCgpOwogICAg
IGJvb2wgbW91c2VFeGl0ZWQoKTsKLSAgICAKKwogICAgIC8vIFVzZWQgYnkgc29tZSBwbGF0Zm9y
bSBzY3JvbGxiYXJzIHRvIGtub3cgd2hlbiB0aGV5J3ZlIGJlZW4gcmVsZWFzZWQgZnJvbSBjYXB0
dXJlLgogICAgIGJvb2wgbW91c2VVcChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKIApAQCAt
MTA2LDEwICsxMzQsNyBAQCBwdWJsaWM6CiAgICAgU2Nyb2xsYmFyVGhlbWUqIHRoZW1lKCkgY29u
c3QgeyByZXR1cm4gbV90aGVtZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChTY3Jv
bGxWaWV3Kik7Ci0gICAgdmlydHVhbCB2b2lkIHNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0Jik7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYpOwotICAg
IAogICAgIGJvb2wgc3VwcHJlc3NJbnZhbGlkYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N1cHBy
ZXNzSW52YWxpZGF0aW9uOyB9CiAgICAgdm9pZCBzZXRTdXBwcmVzc0ludmFsaWRhdGlvbihib29s
IHMpIHsgbV9zdXBwcmVzc0ludmFsaWRhdGlvbiA9IHM7IH0KIApAQCAtMTE3LDcgKzE0Miw3IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0VG9Db250YWluaW5nVmlldyhj
b25zdCBJbnRSZWN0JikgY29uc3Q7CiAgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXcoY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIAorCiAgICAgdmlydHVhbCBJ
bnRQb2ludCBjb252ZXJ0VG9Db250YWluaW5nVmlldyhjb25zdCBJbnRQb2ludCYpIGNvbnN0Owog
ICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlldyhjb25zdCBJbnRQ
b2ludCYpIGNvbnN0OwogCkBAIC0xNjAsNyArMTg1LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgVGlt
ZXI8U2Nyb2xsYmFyPiBtX3Njcm9sbFRpbWVyOwogICAgIGJvb2wgbV9vdmVybGFwc1Jlc2l6ZXI7
Ci0gICAgCisKICAgICBib29sIG1fc3VwcHJlc3NJbnZhbGlkYXRpb247CiAKIHByaXZhdGU6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWUuaAppbmRleCAyYTgzZDUzODVlYWJi
Y2FjZmY4YmU1NjM0OWI0ZDE5ZTMyYmI2ZmNjLi4xN2VmNjM4ZTYwM2I0MjE2NTJhNGQwYTliMTFm
OTA3NDdkYTc3MDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxi
YXJUaGVtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lLmgK
QEAgLTMzLDcgKzMzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUGxhdGZvcm1N
b3VzZUV2ZW50OwotY2xhc3MgU2Nyb2xsYmFyOworY2xhc3MgU2Nyb2xsYmFyVGhlbWVDbGllbnQ7
CiBjbGFzcyBTY3JvbGxWaWV3OwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAm
JiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCkBAIC00NiwxMCArNDYsMTAgQEAgcHVibGljOgogICAg
IFNjcm9sbGJhclRoZW1lKCkgeyB9CiAgICAgdmlydHVhbCB+U2Nyb2xsYmFyVGhlbWUoKSB7fTsK
IAotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVFbmFibGVkU3RhdGUoU2Nyb2xsYmFyKikgeyB9Owor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVFbmFibGVkU3RhdGUoU2Nyb2xsYmFyVGhlbWVDbGllbnQq
KSB7IH07CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnQoU2Nyb2xsYmFyKiwgR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgSW50UmVjdCYgLypkYW1hZ2VSZWN0Ki8pIHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdmlydHVhbCBTY3JvbGxiYXJQYXJ0IGhpdFRlc3QoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50JikgeyByZXR1cm4gTm9QYXJ0OyB9CisgICAgdmlydHVhbCBib29sIHBhaW50
KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYg
LypkYW1hZ2VSZWN0Ki8pIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBTY3JvbGxiYXJQ
YXJ0IGhpdFRlc3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZl
bnQmKSB7IHJldHVybiBOb1BhcnQ7IH0KICAgICAKICAgICB2aXJ0dWFsIGludCBzY3JvbGxiYXJU
aGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFyU2Nyb2xsYmFyKSB7IHJldHVy
biAwOyB9CiAKQEAgLTU3LDEzICs1NywxMyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wg
c3VwcG9ydHNDb250cm9sVGludHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1
YWwgYm9vbCB1c2VzT3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQot
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTY3JvbGxiYXJPdmVybGF5U3R5bGUoU2Nyb2xsYmFyKikg
eyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNjcm9sbGJhck92ZXJsYXlTdHlsZShTY3JvbGxi
YXJUaGVtZUNsaWVudCopIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpIHt9
CiAgICAgCiAgICAgdmlydHVhbCBib29sIGludmFsaWRhdGVPbk1vdXNlRW50ZXJFeGl0KCkgeyBy
ZXR1cm4gZmFsc2U7IH0KIAotICAgIHZvaWQgaW52YWxpZGF0ZVBhcnRzKFNjcm9sbGJhciogc2Ny
b2xsYmFyLCBTY3JvbGxiYXJDb250cm9sUGFydE1hc2sgbWFzaykKKyAgICB2b2lkIGludmFsaWRh
dGVQYXJ0cyhTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBTY3JvbGxiYXJDb250cm9s
UGFydE1hc2sgbWFzaykKICAgICB7CiAgICAgICAgIGlmIChtYXNrICYgQmFja0J1dHRvblN0YXJ0
UGFydCkKICAgICAgICAgICAgIGludmFsaWRhdGVQYXJ0KHNjcm9sbGJhciwgQmFja0J1dHRvblN0
YXJ0UGFydCk7CkBAIC04MSw3ICs4MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGludmFsaWRh
dGVQYXJ0KHNjcm9sbGJhciwgRm9yd2FyZEJ1dHRvbkVuZFBhcnQpOwogICAgIH0KIAotICAgIHZp
cnR1YWwgdm9pZCBpbnZhbGlkYXRlUGFydChTY3JvbGxiYXIqLCBTY3JvbGxiYXJQYXJ0KSB7fQor
ICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUGFydChTY3JvbGxiYXJUaGVtZUNsaWVudCosIFNj
cm9sbGJhclBhcnQpIHt9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoU2Ny
b2xsVmlldyosIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29ybmVy
UmVjdCkgeyBkZWZhdWx0UGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgY29ybmVyUmVjdCk7IH0K
ICAgICBzdGF0aWMgdm9pZCBkZWZhdWx0UGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjb3JuZXJSZWN0KSB7IGNvbnRleHQtPmZpbGxSZWN0
KGNvcm5lclJlY3QsIENvbG9yOjp3aGl0ZSwgQ29sb3JTcGFjZURldmljZVJHQik7IH0KQEAgLTkz
LDIxICs5MywyMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFVwQ29udGVudFNoYWRv
d0xheWVyKEdyYXBoaWNzTGF5ZXIqKSB7IH0KICNlbmRpZgogCi0gICAgdmlydHVhbCBib29sIHNo
b3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jikg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU25hcEJhY2tUb0RyYWdP
cmlnaW4oU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JikgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRHJhZ0RvY3VtZW50SW5zdGVhZE9mVGh1bWIo
U2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JikgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICB2aXJ0dWFsIGludCB0aHVtYlBvc2l0aW9uKFNjcm9sbGJhciopIHsgcmV0dXJuIDA7IH0g
Ly8gVGhlIHBvc2l0aW9uIG9mIHRoZSB0aHVtYiByZWxhdGl2ZSB0byB0aGUgdHJhY2suCi0gICAg
dmlydHVhbCBpbnQgdGh1bWJMZW5ndGgoU2Nyb2xsYmFyKikgeyByZXR1cm4gMDsgfSAvLyBUaGUg
bGVuZ3RoIG9mIHRoZSB0aHVtYiBhbG9uZyB0aGUgYXhpcyBvZiB0aGUgc2Nyb2xsYmFyLgotICAg
IHZpcnR1YWwgaW50IHRyYWNrUG9zaXRpb24oU2Nyb2xsYmFyKikgeyByZXR1cm4gMDsgfSAvLyBU
aGUgcG9zaXRpb24gb2YgdGhlIHRyYWNrIHJlbGF0aXZlIHRvIHRoZSBzY3JvbGxiYXIuCi0gICAg
dmlydHVhbCBpbnQgdHJhY2tMZW5ndGgoU2Nyb2xsYmFyKikgeyByZXR1cm4gMDsgfSAvLyBUaGUg
bGVuZ3RoIG9mIHRoZSB0cmFjayBhbG9uZyB0aGUgYXhpcyBvZiB0aGUgc2Nyb2xsYmFyLgorICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50Kiwg
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkU25hcEJhY2tUb0RyYWdPcmlnaW4oU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGREcmFnRG9jdW1lbnRJbnN0ZWFkT2ZUaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVu
dCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBpbnQgdGh1bWJQb3NpdGlvbihTY3JvbGxiYXJUaGVtZUNsaWVudCopIHsgcmV0dXJuIDA7
IH0gLy8gVGhlIHBvc2l0aW9uIG9mIHRoZSB0aHVtYiByZWxhdGl2ZSB0byB0aGUgdHJhY2suCisg
ICAgdmlydHVhbCBpbnQgdGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKSB7IHJldHVy
biAwOyB9IC8vIFRoZSBsZW5ndGggb2YgdGhlIHRodW1iIGFsb25nIHRoZSBheGlzIG9mIHRoZSBz
Y3JvbGxiYXIuCisgICAgdmlydHVhbCBpbnQgdHJhY2tQb3NpdGlvbihTY3JvbGxiYXJUaGVtZUNs
aWVudCopIHsgcmV0dXJuIDA7IH0gLy8gVGhlIHBvc2l0aW9uIG9mIHRoZSB0cmFjayByZWxhdGl2
ZSB0byB0aGUgc2Nyb2xsYmFyLgorICAgIHZpcnR1YWwgaW50IHRyYWNrTGVuZ3RoKFNjcm9sbGJh
clRoZW1lQ2xpZW50KikgeyByZXR1cm4gMDsgfSAvLyBUaGUgbGVuZ3RoIG9mIHRoZSB0cmFjayBh
bG9uZyB0aGUgYXhpcyBvZiB0aGUgc2Nyb2xsYmFyLgogCiAgICAgdmlydHVhbCBpbnQgbWF4T3Zl
cmxhcEJldHdlZW5QYWdlcygpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4
KCk7IH0KIAogICAgIHZpcnR1YWwgZG91YmxlIGluaXRpYWxBdXRvc2Nyb2xsVGltZXJEZWxheSgp
IHsgcmV0dXJuIDAuMjU7IH0KICAgICB2aXJ0dWFsIGRvdWJsZSBhdXRvc2Nyb2xsVGltZXJEZWxh
eSgpIHsgcmV0dXJuIDAuMDU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclNjcm9sbGJh
cihTY3JvbGxiYXIqKSB7fQotICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNj
cm9sbGJhciopIHt9CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJh
clRoZW1lQ2xpZW50Kikge30KKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlclNjcm9sbGJhcihT
Y3JvbGxiYXJUaGVtZUNsaWVudCopIHt9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNNb2NrVGhlbWUo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYmFyVGhlbWVDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40Mzg4MjUyN2U5ZThhOGEzMTBkNTM1
YjY5Y2RmN2NmNGE1N2Y4NTBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYmFyVGhlbWVDbGllbnQuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBTY3JvbGxiYXJUaGVtZUNsaWVudF9oCisjZGVmaW5lIFNjcm9sbGJhclRoZW1lQ2xpZW50
X2gKKworI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1
ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFNjcm9sbFZpZXc7CisKK2NsYXNzIFNjcm9sbGJhclRoZW1lQ2xpZW50IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5TY3JvbGxiYXJUaGVtZUNsaWVudCgpIHsgfQorCisgICAg
dmlydHVhbCBib29sIGlzQ3VzdG9tU2Nyb2xsYmFyKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
U2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0
dWFsIGludCB2YWx1ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0IGN1cnJlbnRQb3Mo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgdmlzaWJsZVNpemUoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBpbnQgdG90YWxTaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IG1h
eGltdW0oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250
cm9sU2l6ZSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgaW50IGxpbmVTdGVwKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgaW50IHBhZ2VTdGVwKCkgY29uc3QgPSAwOworCisgICAgdmlydHVh
bCBTY3JvbGxiYXJQYXJ0IHByZXNzZWRQYXJ0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgU2Ny
b2xsYmFyUGFydCBob3ZlcmVkUGFydCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBl
bmFibGVkKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFibGVkKGJvb2wpID0g
MDsKKworICAgIHZpcnR1YWwgaW50IHgoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgeSgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCB3aWR0aCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIGludCBoZWlnaHQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRQb2ludCBsb2NhdGlvbigpIGNvbnN0ID0gMDsKKwor
ICAgIHZpcnR1YWwgU2Nyb2xsVmlldyogcGFyZW50KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
U2Nyb2xsVmlldyogcm9vdCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFt
ZVJlY3QoY29uc3QgSW50UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIEludFJlY3QgZnJhbWVSZWN0
KCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmKSA9IDA7CisKKyAgICB2
aXJ0dWFsIFNjcm9sbGJhck92ZXJsYXlTdHlsZSBzY3JvbGxiYXJPdmVybGF5U3R5bGUoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldFRpY2ttYXJrcyhWZWN0b3I8SW50UmVjdD4mKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsYWJsZUFyZWFBY3RpdmUoKSBjb25z
dCA9IDA7CisKKyAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRv
dyhjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFNjb2xsYmFyVGhlbWVDbGllbnRfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwCmluZGV4IDYy
ZmQ1ZTVkMmM1MGVmOWIzNWI0MTc1NGQwOWJiYjBlMWU2YmUzOGUuLjlkODMzNzQyZjkyZWViZDcw
ZTBhY2MxNmVlMzc4NGIzYzIzMTU3NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAKQEAgLTMzLDE1ICszMywxNCBAQAogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybU1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXIuaCIKLSNpbmNsdWRlICJT
Y3JvbGxhYmxlQXJlYS5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lQ2xpZW50LmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1ib29sIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjpwYWludChTY3JvbGxiYXIq
IHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJl
Y3QmIGRhbWFnZVJlY3QpCitib29sIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjpwYWludChTY3Jv
bGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29u
dGV4dCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKIHsKICAgICAvLyBDcmVhdGUgdGhlIFNj
cm9sbGJhckNvbnRyb2xQYXJ0TWFzayBiYXNlZCBvbiB0aGUgZGFtYWdlUmVjdAogICAgIFNjcm9s
bGJhckNvbnRyb2xQYXJ0TWFzayBzY3JvbGxNYXNrID0gTm9QYXJ0OwpAQCAtMTE2LDcgKzExNSw3
IEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OnBhaW50KFNjcm9sbGJhciogc2Nyb2xs
YmFyLCBHcmFwaGljc0NvbnRleHQqIGdyYXBoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVNjcm9s
bGJhclBhcnQgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OmhpdFRlc3QoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQorU2Nyb2xsYmFyUGFydCBTY3Jv
bGxiYXJUaGVtZUNvbXBvc2l0ZTo6aGl0VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xs
YmFyLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKIHsKICAgICBTY3JvbGxiYXJQYXJ0
IHJlc3VsdCA9IE5vUGFydDsKICAgICBpZiAoIXNjcm9sbGJhci0+ZW5hYmxlZCgpKQpAQCAtMTU1
LDcgKzE1NCw3IEBAIFNjcm9sbGJhclBhcnQgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OmhpdFRl
c3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IFBsYXRmCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotdm9pZCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6aW52YWxpZGF0ZVBhcnQoU2Nyb2xs
YmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydCkKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVD
b21wb3NpdGU6OmludmFsaWRhdGVQYXJ0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIs
IFNjcm9sbGJhclBhcnQgcGFydCkKIHsKICAgICBpZiAocGFydCA9PSBOb1BhcnQpCiAgICAgICAg
IHJldHVybjsKQEAgLTE5NSw3ICsxOTQsNyBAQCB2b2lkIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRl
OjppbnZhbGlkYXRlUGFydChTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydAogICAg
IHNjcm9sbGJhci0+aW52YWxpZGF0ZVJlY3QocmVzdWx0KTsKIH0KIAotdm9pZCBTY3JvbGxiYXJU
aGVtZUNvbXBvc2l0ZTo6c3BsaXRUcmFjayhTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50
UmVjdCYgdW5jb25zdHJhaW5lZFRyYWNrUmVjdCwgSW50UmVjdCYgYmVmb3JlVGh1bWJSZWN0LCBJ
bnRSZWN0JiB0aHVtYlJlY3QsIEludFJlY3QmIGFmdGVyVGh1bWJSZWN0KQordm9pZCBTY3JvbGxi
YXJUaGVtZUNvbXBvc2l0ZTo6c3BsaXRUcmFjayhTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xs
YmFyLCBjb25zdCBJbnRSZWN0JiB1bmNvbnN0cmFpbmVkVHJhY2tSZWN0LCBJbnRSZWN0JiBiZWZv
cmVUaHVtYlJlY3QsIEludFJlY3QmIHRodW1iUmVjdCwgSW50UmVjdCYgYWZ0ZXJUaHVtYlJlY3Qp
CiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiB3b24ndCBldmVuIGdldCBjYWxsZWQgdW5sZXNzIHdl
J3JlIGJpZyBlbm91Z2ggdG8gaGF2ZSBzb21lIGNvbWJpbmF0aW9uIG9mIHRoZXNlIHRocmVlIHJl
Y3RzIHdoZXJlIGF0IGxlYXN0CiAgICAgLy8gb25lIG9mIHRoZW0gaXMgbm9uLWVtcHR5LgpAQCAt
MjE1LDcgKzIxNCw3IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OnNwbGl0VHJhY2so
U2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHVuCiAKIC8vIFJldHVybnMgdGhl
IHNpemUgcmVwcmVzZW50ZWQgYnkgdHJhY2sgdGFraW5nIGludG8gYWNjb3VudCBzY3JvbGxpbmcg
cGFzdAogLy8gdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQuCi1zdGF0aWMgZmxvYXQgdXNlZFRvdGFs
U2l6ZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3N0YXRpYyBmbG9hdCB1c2VkVG90YWxTaXplKFNj
cm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCiB7CiAgICAgZmxvYXQgb3ZlcmhhbmdBdFN0
YXJ0ID0gLXNjcm9sbGJhci0+Y3VycmVudFBvcygpOwogICAgIGZsb2F0IG92ZXJoYW5nQXRFbmQg
PSBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSArIHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSAtIHNj
cm9sbGJhci0+dG90YWxTaXplKCk7CkBAIC0yMjMsNyArMjIyLDcgQEAgc3RhdGljIGZsb2F0IHVz
ZWRUb3RhbFNpemUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiAgICAgcmV0dXJuIHNjcm9sbGJhci0+
dG90YWxTaXplKCkgKyBvdmVyaGFuZzsKIH0KIAotaW50IFNjcm9sbGJhclRoZW1lQ29tcG9zaXRl
Ojp0aHVtYlBvc2l0aW9uKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoraW50IFNjcm9sbGJhclRoZW1l
Q29tcG9zaXRlOjp0aHVtYlBvc2l0aW9uKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIp
CiB7CiAgICAgaWYgKHNjcm9sbGJhci0+ZW5hYmxlZCgpKSB7CiAgICAgICAgIGZsb2F0IHNpemUg
PSB1c2VkVG90YWxTaXplKHNjcm9sbGJhcikgLSBzY3JvbGxiYXItPnZpc2libGVTaXplKCk7CkBA
IC0yMzYsNyArMjM1LDcgQEAgaW50IFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjp0aHVtYlBvc2l0
aW9uKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogICAgIHJldHVybiAwOwogfQogCi1pbnQgU2Nyb2xs
YmFyVGhlbWVDb21wb3NpdGU6OnRodW1iTGVuZ3RoKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoraW50
IFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjp0aHVtYkxlbmd0aChTY3JvbGxiYXJUaGVtZUNsaWVu
dCogc2Nyb2xsYmFyKQogewogICAgIGlmICghc2Nyb2xsYmFyLT5lbmFibGVkKCkpCiAgICAgICAg
IHJldHVybiAwOwpAQCAtMjUwLDE4ICsyNDksMTggQEAgaW50IFNjcm9sbGJhclRoZW1lQ29tcG9z
aXRlOjp0aHVtYkxlbmd0aChTY3JvbGxiYXIqIHNjcm9sbGJhcikKICAgICByZXR1cm4gbGVuZ3Ro
OwogfQogCi1pbnQgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6Om1pbmltdW1UaHVtYkxlbmd0aChT
Y3JvbGxiYXIqIHNjcm9sbGJhcikKK2ludCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6bWluaW11
bVRodW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCiB7CiAgICAgcmV0
dXJuIHNjcm9sbGJhclRoaWNrbmVzcyhzY3JvbGxiYXItPmNvbnRyb2xTaXplKCkpOwogfQogCi1p
bnQgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OnRyYWNrUG9zaXRpb24oU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIpCitpbnQgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OnRyYWNrUG9zaXRpb24oU2Nyb2xs
YmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKIHsKICAgICBJbnRSZWN0IGNvbnN0cmFpbmVkVHJh
Y2tSZWN0ID0gY29uc3RyYWluVHJhY2tSZWN0VG9UcmFja1BpZWNlcyhzY3JvbGxiYXIsIHRyYWNr
UmVjdChzY3JvbGxiYXIpKTsKICAgICByZXR1cm4gKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IGNvbnN0cmFpbmVkVHJhY2tSZWN0LngoKSAtIHNjcm9s
bGJhci0+eCgpIDogY29uc3RyYWluZWRUcmFja1JlY3QueSgpIC0gc2Nyb2xsYmFyLT55KCk7CiB9
CiAKLWludCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6dHJhY2tMZW5ndGgoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIpCitpbnQgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OnRyYWNrTGVuZ3RoKFNjcm9s
bGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCiB7CiAgICAgSW50UmVjdCBjb25zdHJhaW5lZFRy
YWNrUmVjdCA9IGNvbnN0cmFpblRyYWNrUmVjdFRvVHJhY2tQaWVjZXMoc2Nyb2xsYmFyLCB0cmFj
a1JlY3Qoc2Nyb2xsYmFyKSk7CiAgICAgcmV0dXJuIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkg
PT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyBjb25zdHJhaW5lZFRyYWNrUmVjdC53aWR0aCgpIDog
Y29uc3RyYWluZWRUcmFja1JlY3QuaGVpZ2h0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaAppbmRleCAxMWIzYmQ0NzAwMTg3ZmYxODJi
MDQ1YjQ1MmNkYzI0ZGEzM2U3NTkwLi44ZWRkNGJiYWM5ODA0MGQwM2ZjNGIzMGVlYjIxYWE5OTVl
M2QyZWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVt
ZUNvbXBvc2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1l
Q29tcG9zaXRlLmgKQEAgLTMyLDQwICszMiw0MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlIDogcHVibGljIFNjcm9sbGJhclRoZW1lIHsKIHB1
YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnQoU2Nyb2xsYmFyKiwgR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOwogCi0gICAgdmlydHVhbCBTY3JvbGxiYXJQYXJ0IGhp
dFRlc3QoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CisgICAgdmlydHVh
bCBTY3JvbGxiYXJQYXJ0IGhpdFRlc3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUGFydChTY3Jv
bGxiYXIqLCBTY3JvbGxiYXJQYXJ0KTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVBhcnQo
U2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBTY3JvbGxiYXJQYXJ0KTsKIAotICAgIHZpcnR1YWwgaW50
IHRodW1iUG9zaXRpb24oU2Nyb2xsYmFyKik7Ci0gICAgdmlydHVhbCBpbnQgdGh1bWJMZW5ndGgo
U2Nyb2xsYmFyKik7Ci0gICAgdmlydHVhbCBpbnQgdHJhY2tQb3NpdGlvbihTY3JvbGxiYXIqKTsK
LSAgICB2aXJ0dWFsIGludCB0cmFja0xlbmd0aChTY3JvbGxiYXIqKTsKKyAgICB2aXJ0dWFsIGlu
dCB0aHVtYlBvc2l0aW9uKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CisgICAgdmlydHVhbCBpbnQg
dGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKKyAgICB2aXJ0dWFsIGludCB0cmFj
a1Bvc2l0aW9uKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CisgICAgdmlydHVhbCBpbnQgdHJhY2tM
ZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludFNj
cm9sbENvcm5lcihTY3JvbGxWaWV3KiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYg
Y29ybmVyUmVjdCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50T3ZlcmhhbmdBcmVhcyhTY3JvbGxW
aWV3KiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgaG9yaXpvbnRhbE92ZXJoYW5n
QXJlYSwgY29uc3QgSW50UmVjdCYgdmVydGljYWxPdmVyaGFuZ0FyZWEsIGNvbnN0IEludFJlY3Qm
IGRpcnR5UmVjdCk7CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGJvb2wgaGFzQnV0dG9ucyhT
Y3JvbGxiYXIqKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGhhc1RodW1iKFNjcm9sbGJhciopID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzQnV0dG9ucyhTY3JvbGxiYXJUaGVtZUNsaWVudCopID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKSA9IDA7
CiAKLSAgICB2aXJ0dWFsIEludFJlY3QgYmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyKiwgU2Nyb2xs
YmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKSA9IDA7Ci0gICAgdmlydHVhbCBJbnRSZWN0
IGZvcndhcmRCdXR0b25SZWN0KFNjcm9sbGJhciosIFNjcm9sbGJhclBhcnQsIGJvb2wgcGFpbnRp
bmcgPSBmYWxzZSkgPSAwOwotICAgIHZpcnR1YWwgSW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFy
KiwgYm9vbCBwYWludGluZyA9IGZhbHNlKSA9IDA7CisgICAgdmlydHVhbCBJbnRSZWN0IGJhY2tC
dXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBwYWlu
dGluZyA9IGZhbHNlKSA9IDA7CisgICAgdmlydHVhbCBJbnRSZWN0IGZvcndhcmRCdXR0b25SZWN0
KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZh
bHNlKSA9IDA7CisgICAgdmlydHVhbCBJbnRSZWN0IHRyYWNrUmVjdChTY3JvbGxiYXJUaGVtZUNs
aWVudCosIGJvb2wgcGFpbnRpbmcgPSBmYWxzZSkgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIHNw
bGl0VHJhY2soU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYgdHJhY2ssIEludFJlY3QmIHN0YXJ0
VHJhY2ssIEludFJlY3QmIHRodW1iLCBJbnRSZWN0JiBlbmRUcmFjayk7CisgICAgdmlydHVhbCB2
b2lkIHNwbGl0VHJhY2soU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0JiB0cmFj
aywgSW50UmVjdCYgc3RhcnRUcmFjaywgSW50UmVjdCYgdGh1bWIsIEludFJlY3QmIGVuZFRyYWNr
KTsKICAgICAKLSAgICB2aXJ0dWFsIGludCBtaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyKik7
CisgICAgdmlydHVhbCBpbnQgbWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50
Kik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5kKEdyYXBoaWNz
Q29udGV4dCosIFNjcm9sbGJhciopIHt9Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50VHJhY2tCYWNr
Z3JvdW5kKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSB7fQot
ICAgIHZpcnR1YWwgdm9pZCBwYWludFRyYWNrUGllY2UoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xs
YmFyKiwgY29uc3QgSW50UmVjdCYsIFNjcm9sbGJhclBhcnQpIHt9Ci0gICAgdmlydHVhbCB2b2lk
IHBhaW50QnV0dG9uKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhciosIGNvbnN0IEludFJlY3Qm
LCBTY3JvbGxiYXJQYXJ0KSB7fQotICAgIHZpcnR1YWwgdm9pZCBwYWludFRodW1iKEdyYXBoaWNz
Q29udGV4dCosIFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSB7fQotICAgIHZpcnR1YWwgdm9p
ZCBwYWludFRpY2ttYXJrcyhHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXIqLCBjb25zdCBJbnRS
ZWN0Jikge30KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5kKEdyYXBo
aWNzQ29udGV4dCosIFNjcm9sbGJhclRoZW1lQ2xpZW50Kikge30KKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhlbWVDbGll
bnQqLCBjb25zdCBJbnRSZWN0Jikge30KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUcmFja1BpZWNl
KEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgSW50UmVjdCYs
IFNjcm9sbGJhclBhcnQpIHt9CisgICAgdmlydHVhbCB2b2lkIHBhaW50QnV0dG9uKEdyYXBoaWNz
Q29udGV4dCosIFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgSW50UmVjdCYsIFNjcm9sbGJh
clBhcnQpIHt9CisgICAgdmlydHVhbCB2b2lkIHBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0Kiwg
U2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0Jikge30KKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRUaWNrbWFya3MoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhlbWVDbGllbnQq
LCBjb25zdCBJbnRSZWN0Jikge30KIAotICAgIHZpcnR1YWwgSW50UmVjdCBjb25zdHJhaW5UcmFj
a1JlY3RUb1RyYWNrUGllY2VzKFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmIHJlY3QpIHsgcmV0
dXJuIHJlY3Q7IH0KKyAgICB2aXJ0dWFsIEludFJlY3QgY29uc3RyYWluVHJhY2tSZWN0VG9UcmFj
a1BpZWNlcyhTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3QmIHJlY3QpIHsgcmV0
dXJuIHJlY3Q7IH0KIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5jcHAKaW5kZXggZjhjYjI4MTU0
ODYxZTAxZGE3MTEyNDkyMGM2MGQwNmEzN2U5YTE4My4uNjgyZDgyZDViMzM3OTE4YjI1ZDA5OGJh
NzcxNzM0ZTc5MTUwNWU5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5jcHAKQEAgLTM5LDE0ICszOSwx
NCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1
bTo6aGFzVGh1bWIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCitib29sIFNjcm9sbGJhclRoZW1lQ2hy
b21pdW06Omhhc1RodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCiB7CiAgICAg
Ly8gVGhpcyBtZXRob2QgaXMganVzdCBjYWxsZWQgYXMgYSBwYWludC10aW1lIG9wdGltaXphdGlv
biB0byBzZWUgaWYKICAgICAvLyBwYWludGluZyB0aGUgdGh1bWIgY2FuIGJlIHNraXBwZWQuICBX
ZSBkb24ndCBoYXZlIHRvIGJlIGV4YWN0IGhlcmUuCiAgICAgcmV0dXJuIHRodW1iTGVuZ3RoKHNj
cm9sbGJhcikgPiAwOwogfQogCi1JbnRSZWN0IFNjcm9sbGJhclRoZW1lQ2hyb21pdW06OmJhY2tC
dXR0b25SZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wp
CitJbnRSZWN0IFNjcm9sbGJhclRoZW1lQ2hyb21pdW06OmJhY2tCdXR0b25SZWN0KFNjcm9sbGJh
clRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydCwgYm9vbCkKIHsKICAg
ICAvLyBXaW5kb3dzIGFuZCBMaW51eCBqdXN0IGhhdmUgc2luZ2xlIGFycm93cy4KICAgICBpZiAo
cGFydCA9PSBCYWNrQnV0dG9uRW5kUGFydCkKQEAgLTU2LDcgKzU2LDcgQEAgSW50UmVjdCBTY3Jv
bGxiYXJUaGVtZUNocm9taXVtOjpiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwg
U2Nyb2xsYmFyUGEKICAgICByZXR1cm4gSW50UmVjdChzY3JvbGxiYXItPngoKSwgc2Nyb2xsYmFy
LT55KCksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CiB9CiAKLUludFJlY3QgU2Nyb2xs
YmFyVGhlbWVDaHJvbWl1bTo6Zm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIs
IFNjcm9sbGJhclBhcnQgcGFydCwgYm9vbCkKK0ludFJlY3QgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1
bTo6Zm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgU2Ny
b2xsYmFyUGFydCBwYXJ0LCBib29sKQogewogICAgIC8vIFdpbmRvd3MgYW5kIExpbnV4IGp1c3Qg
aGF2ZSBzaW5nbGUgYXJyb3dzLgogICAgIGlmIChwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBh
cnQpCkBAIC03NCw3ICs3NCw3IEBAIEludFJlY3QgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bTo6Zm9y
d2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJhCiAgICAgcmV0dXJu
IEludFJlY3QoeCwgeSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKIH0KIAotSW50UmVj
dCBTY3JvbGxiYXJUaGVtZUNocm9taXVtOjp0cmFja1JlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIs
IGJvb2wpCitJbnRSZWN0IFNjcm9sbGJhclRoZW1lQ2hyb21pdW06OnRyYWNrUmVjdChTY3JvbGxi
YXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBib29sKQogewogICAgIEludFNpemUgYnMgPSBidXR0
b25TaXplKHNjcm9sbGJhcik7CiAgICAgLy8gVGhlIGJ1dHRvbnMgYXQgdGhlIHRvcCBhbmQgYm90
dG9tIG9mIHRoZSBzY3JvbGxiYXIgYXJlIHNxdWFyZSwgc28gdGhlCkBAIC05MiwxNCArOTIsMTQg
QEAgSW50UmVjdCBTY3JvbGxiYXJUaGVtZUNocm9taXVtOjp0cmFja1JlY3QoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIsIGJvb2wpCiAgICAgcmV0dXJuIEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNjcm9s
bGJhci0+eSgpICsgYnMuaGVpZ2h0KCksIHRoaWNrbmVzcywgc2Nyb2xsYmFyLT5oZWlnaHQoKSAt
IDIgKiBicy5oZWlnaHQoKSk7CiB9CiAKLXZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bTo6cGFp
bnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXIqIHNj
cm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1
bTo6cGFpbnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxi
YXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIC8v
IEp1c3QgYXNzdW1lIGEgZm9yd2FyZCB0cmFjayBwYXJ0LiAgV2Ugb25seSBwYWludCB0aGUgdHJh
Y2sgYXMgYSBzaW5nbGUgcGllY2Ugd2hlbiB0aGVyZSBpcyBubyB0aHVtYi4KICAgICBpZiAoIWhh
c1RodW1iKHNjcm9sbGJhcikpCiAgICAgICAgIHBhaW50VHJhY2tQaWVjZShjb250ZXh0LCBzY3Jv
bGxiYXIsIHJlY3QsIEZvcndhcmRUcmFja1BhcnQpOwogfQogCi12b2lkIFNjcm9sbGJhclRoZW1l
Q2hyb21pdW06OnBhaW50VGlja21hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xs
YmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIFNjcm9sbGJhclRoZW1l
Q2hyb21pdW06OnBhaW50VGlja21hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xs
YmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBp
ZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpICE9IFZlcnRpY2FsU2Nyb2xsYmFyKQogICAgICAg
ICByZXR1cm47CkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVt
OjpwYWludFRpY2ttYXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhcioKIAog
ICAgIC8vIEdldCB0aGUgdGlja21hcmtzIGZvciB0aGUgZnJhbWV2aWV3LgogICAgIFZlY3RvcjxJ
bnRSZWN0PiB0aWNrbWFya3M7Ci0gICAgc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5nZXRU
aWNrbWFya3ModGlja21hcmtzKTsKKyAgICBzY3JvbGxiYXItPmdldFRpY2ttYXJrcyh0aWNrbWFy
a3MpOwogICAgIGlmICghdGlja21hcmtzLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNo
cm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVt
ZUNocm9taXVtLmgKaW5kZXggMTE3ODEyNTY5ZjY5ZjIwMDM3MWJhYzBmOWRhODdhN2MzMmRlNGZh
NS4uY2Y2NzFkZDk4NGMwNzkwOTk1YzY3ZDdkMGYxOGM1YjRhNmY2Y2ZkZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hy
b21pdW0uaApAQCAtNDEsMTcgKzQxLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyBX
aW5kb3dzIGFuZCBMaW51eC4KICAgICBjbGFzcyBTY3JvbGxiYXJUaGVtZUNocm9taXVtIDogcHVi
bGljIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlIHsKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZp
cnR1YWwgYm9vbCBoYXNCdXR0b25zKFNjcm9sbGJhciopIHsgcmV0dXJuIHRydWU7IH0KLSAgICAg
ICAgdmlydHVhbCBib29sIGhhc1RodW1iKFNjcm9sbGJhciopOworICAgICAgICB2aXJ0dWFsIGJv
b2wgaGFzQnV0dG9ucyhTY3JvbGxiYXJUaGVtZUNsaWVudCopIHsgcmV0dXJuIHRydWU7IH0KKyAg
ICAgICAgdmlydHVhbCBib29sIGhhc1RodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CiAKLSAg
ICAgICAgdmlydHVhbCBJbnRSZWN0IGJhY2tCdXR0b25SZWN0KFNjcm9sbGJhciosIFNjcm9sbGJh
clBhcnQsIGJvb2wgcGFpbnRpbmcgPSBmYWxzZSk7Ci0gICAgICAgIHZpcnR1YWwgSW50UmVjdCBm
b3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXIqLCBTY3JvbGxiYXJQYXJ0LCBib29sIHBhaW50aW5n
ID0gZmFsc2UpOwotICAgICAgICB2aXJ0dWFsIEludFJlY3QgdHJhY2tSZWN0KFNjcm9sbGJhcios
IGJvb2wgcGFpbnRpbmcgPSBmYWxzZSk7CisgICAgICAgIHZpcnR1YWwgSW50UmVjdCBiYWNrQnV0
dG9uUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIFNjcm9sbGJhclBhcnQsIGJvb2wgcGFpbnRp
bmcgPSBmYWxzZSk7CisgICAgICAgIHZpcnR1YWwgSW50UmVjdCBmb3J3YXJkQnV0dG9uUmVjdChT
Y3JvbGxiYXJUaGVtZUNsaWVudCosIFNjcm9sbGJhclBhcnQsIGJvb2wgcGFpbnRpbmcgPSBmYWxz
ZSk7CisgICAgICAgIHZpcnR1YWwgSW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVDbGll
bnQqLCBib29sIHBhaW50aW5nID0gZmFsc2UpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwYWlu
dFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXIqLCBjb25zdCBJbnRS
ZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwYWludFRpY2ttYXJrcyhHcmFwaGljc0NvbnRl
eHQqLCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBw
YWludFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVu
dCosIGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50VGlja21hcmtz
KEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgSW50UmVjdCYp
OwogCi0gICAgICAgIHZpcnR1YWwgSW50U2l6ZSBidXR0b25TaXplKFNjcm9sbGJhciopID0gMDsK
KyAgICAgICAgdmlydHVhbCBJbnRTaXplIGJ1dHRvblNpemUoU2Nyb2xsYmFyVGhlbWVDbGllbnQq
KSA9IDA7CiAgICAgfTsKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUFuZHJv
aWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bUFuZHJvaWQuY3BwCmluZGV4IDFkYmVmYTY0OWMwODk3MmViMWMyYjM3Yjc0NzcxYjBk
NjFiZWE1YWQuLmUxZTU1YTFmYzEzZDc5YzBmOWU4ZjQ3MzBiZTg5NzgwOTRjMWY2OTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hy
b21pdW1BbmRyb2lkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9T
Y3JvbGxiYXJUaGVtZUNocm9taXVtQW5kcm9pZC5jcHAKQEAgLTU3LDcgKzU3LDcgQEAgaW50IFNj
cm9sbGJhclRoZW1lQ2hyb21pdW1BbmRyb2lkOjpzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFy
Q29udHJvbFNpemUgY29udHIKICAgICByZXR1cm4gc2Nyb2xsYmFyVGhpY2tuZXNzVmFsdWU7CiB9
CiAKLXZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUFuZHJvaWQ6OnBhaW50U2Nyb2xsYmFyQmFj
a2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhciogc2Nyb2xsYmFyKQor
dm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtQW5kcm9pZDo6cGFpbnRTY3JvbGxiYXJCYWNrZ3Jv
dW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9s
bGJhcikKIHsKICAgICAvLyBQYWludCBibGFjayBiYWNrZ3JvdW5kIGluIER1bXBSZW5kZXJUcmVl
LCBvdGhlcndpc2UgdGhlIHBpeGVscyBpbiB0aGUgc2Nyb2xsYmFyIGFyZWEgZGVwZW5kCiAgICAg
Ly8gb24gdGhlaXIgcHJldmlvdXMgc3RhdGUsIHdoaWNoIG1ha2VzIHRoZSBkdW1wZWQgcmVzdWx0
IHVuZGV0ZXJtaW5lZC4KQEAgLTY1LDEyICs2NSwxMiBAQCB2b2lkIFNjcm9sbGJhclRoZW1lQ2hy
b21pdW1BbmRyb2lkOjpwYWludFNjcm9sbGJhckJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBj
bwogICAgICAgICBjb250ZXh0LT5maWxsUmVjdChzY3JvbGxiYXItPmZyYW1lUmVjdCgpLCBDb2xv
cjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogfQogCi1ib29sIFNjcm9sbGJhclRoZW1l
Q2hyb21pdW1BbmRyb2lkOjpzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYgZXZ0KQorYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtQW5kcm9p
ZDo6c2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRm
b3JtTW91c2VFdmVudCYgZXZ0KQogewogICAgIHJldHVybiB0cnVlOwogfQogCi1JbnRTaXplIFNj
cm9sbGJhclRoZW1lQ2hyb21pdW1BbmRyb2lkOjpidXR0b25TaXplKFNjcm9sbGJhciogc2Nyb2xs
YmFyKQorSW50U2l6ZSBTY3JvbGxiYXJUaGVtZUNocm9taXVtQW5kcm9pZDo6YnV0dG9uU2l6ZShT
Y3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQogewogICAgIGlmIChzY3JvbGxiYXItPm9y
aWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCiAgICAgICAgIHJldHVybiBJbnRTaXpl
KHNjcm9sbGJhclRoaWNrbmVzc1ZhbHVlLCBidXR0b25MZW5ndGgpOwpAQCAtNzgsNyArNzgsNyBA
QCBJbnRTaXplIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1BbmRyb2lkOjpidXR0b25TaXplKFNjcm9s
bGJhciogc2Nyb2xsYmFyKQogICAgIHJldHVybiBJbnRTaXplKGJ1dHRvbkxlbmd0aCwgc2Nyb2xs
YmFyVGhpY2tuZXNzVmFsdWUpOwogfQogCi1pbnQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUFuZHJv
aWQ6Om1pbmltdW1UaHVtYkxlbmd0aChTY3JvbGxiYXIqIHNjcm9sbGJhcikKK2ludCBTY3JvbGxi
YXJUaGVtZUNocm9taXVtQW5kcm9pZDo6bWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1l
Q2xpZW50KiBzY3JvbGxiYXIpCiB7CiAgICAgcmV0dXJuIDIgKiBzY3JvbGxiYXJUaGlja25lc3Mo
c2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1BbmRyb2lkLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtQW5kcm9p
ZC5oCmluZGV4IGYwN2M5MDE2Nzg2Y2IyNGY4OGRmYjk0YWU0ZmMyMTZmZTZlNzBiZmMuLmYzZGI4
MGU1MmZiZjUwYzFkZjY4YTk0MGVhOWQ0NzNmMmRiZjI4NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1BbmRyb2lkLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bUFuZHJvaWQuaApAQCAtMzUsMTAgKzM1LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGlu
dCBzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUpOwogCiBwcm90ZWN0ZWQ6
Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZChHcmFwaGljc0NvbnRl
eHQqLCBTY3JvbGxiYXIqKTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihT
Y3JvbGxiYXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKLSAgICB2aXJ0dWFsIEludFNp
emUgYnV0dG9uU2l6ZShTY3JvbGxiYXIqKTsKLSAgICB2aXJ0dWFsIGludCBtaW5pbXVtVGh1bWJM
ZW5ndGgoU2Nyb2xsYmFyKik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xsYmFyQmFja2dy
b3VuZChHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCopOworICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3Qg
UGxhdGZvcm1Nb3VzZUV2ZW50Jik7CisgICAgdmlydHVhbCBJbnRTaXplIGJ1dHRvblNpemUoU2Ny
b2xsYmFyVGhlbWVDbGllbnQqKTsKKyAgICB2aXJ0dWFsIGludCBtaW5pbXVtVGh1bWJMZW5ndGgo
U2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1l
Q2hyb21pdW1MaW51eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3Jv
bGxiYXJUaGVtZUNocm9taXVtTGludXguY3BwCmluZGV4IGVjNjg0MDdlOWQ4YzMyZTMwZDMxMGQy
ZTUwNThjMmRhN2RiZGVjYzYuLjZiNGRhZmMzNzNmMTBkMGFhMmQ2ZTk2NjJhYmU2M2RkNWRiNjVl
N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJh
clRoZW1lQ2hyb21pdW1MaW51eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcApAQCAtNTAsNyArNTAsNyBAQCBp
bnQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjpzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xs
YmFyQ29udHJvbFNpemUgY29udHJvbAogICAgIHJldHVybiBzY3JvbGxiYXJTaXplLndpZHRoKCk7
CiB9CiAKLXZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFRyYWNrUGllY2Uo
R3JhcGhpY3NDb250ZXh0KiBnYywgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3Qm
IHJlY3QsIFNjcm9sbGJhclBhcnQgcGFydFR5cGUpCit2b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21p
dW1MaW51eDo6cGFpbnRUcmFja1BpZWNlKEdyYXBoaWNzQ29udGV4dCogZ2MsIFNjcm9sbGJhclRo
ZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIFNjcm9sbGJhclBhcnQg
cGFydFR5cGUpCiB7CiAgICAgUGxhdGZvcm1TdXBwb3J0OjpUaGVtZVBhaW50U3RhdGUgc3RhdGUg
PSBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gcGFydFR5cGUgPyBQbGF0Zm9ybVN1cHBvcnQ6
OlN0YXRlSG92ZXIgOiBQbGF0Zm9ybVN1cHBvcnQ6OlN0YXRlTm9ybWFsOwogICAgIEludFJlY3Qg
YWxpZ25SZWN0ID0gdHJhY2tSZWN0KHNjcm9sbGJhciwgZmFsc2UpOwpAQCAtNjcsNyArNjcsNyBA
QCB2b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUcmFja1BpZWNlKEdyYXBo
aWNzQ29udGV4dCogZ2MsIFNjcm9sbGJhcgogICAgICAgICAmZXh0cmFQYXJhbXMpOwogfQogCi12
b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRCdXR0b24oR3JhcGhpY3NDb250
ZXh0KiBnYywgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIFNjcm9s
bGJhclBhcnQgcGFydCkKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludEJ1
dHRvbihHcmFwaGljc0NvbnRleHQqIGdjLCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFy
LCBjb25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxiYXJQYXJ0IHBhcnQpCiB7CiAgICAgUGxhdGZv
cm1TdXBwb3J0OjpUaGVtZVBhcnQgcGFpbnRQYXJ0OwogICAgIFBsYXRmb3JtU3VwcG9ydDo6VGhl
bWVQYWludFN0YXRlIHN0YXRlID0gUGxhdGZvcm1TdXBwb3J0OjpTdGF0ZU5vcm1hbDsKQEAgLTEw
Miw3ICsxMDIsNyBAQCB2b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRCdXR0
b24oR3JhcGhpY3NDb250ZXh0KiBnYywgU2Nyb2xsYmFyKiBzYwogICAgIFBsYXRmb3JtU3VwcG9y
dDo6cGFpbnRUaGVtZVBhcnQoZ2MsIHBhaW50UGFydCwgc3RhdGUsIHJlY3QsIDApOwogfQogCi12
b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRl
eHQqIGdjLCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQg
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCog
Z2MsIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7CiAgICAgUGxhdGZvcm1TdXBwb3J0OjpUaGVtZVBhaW50U3RhdGUgc3RhdGU7CiAKQEAgLTEy
MCwxMiArMTIwLDEyIEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFRo
dW1iKEdyYXBoaWNzQ29udGV4dCogZ2MsIFNjcm9sbGJhciogc2NyCiAgICAgICAgIDApOwogfQog
Ci1ib29sIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6c2hvdWxkQ2VudGVyT25UaHVtYihT
Y3JvbGxiYXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKK2Jvb2wgU2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bUxpbnV4OjpzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhclRoZW1lQ2xp
ZW50KiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQpCiB7CiAgICAgcmV0dXJuIChldnQu
c2hpZnRLZXkoKSAmJiBldnQuYnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgfHwgKGV2dC5idXR0b24o
KSA9PSBNaWRkbGVCdXR0b24pOwogfQogCi1JbnRTaXplIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1M
aW51eDo6YnV0dG9uU2l6ZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKK0ludFNpemUgU2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bUxpbnV4OjpidXR0b25TaXplKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3Jv
bGxiYXIpCiB7CiAgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNj
cm9sbGJhcikgewogICAgICAgICBJbnRTaXplIHNpemUgPSBQbGF0Zm9ybVN1cHBvcnQ6OmdldFRo
ZW1lUGFydFNpemUoUGxhdGZvcm1TdXBwb3J0OjpQYXJ0U2Nyb2xsYmFyVXBBcnJvdyk7CkBAIC0x
MzcsNyArMTM3LDcgQEAgSW50U2l6ZSBTY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXg6OmJ1dHRv
blNpemUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiAgICAgcmV0dXJuIEludFNpemUoc2Nyb2xsYmFy
LT53aWR0aCgpIDwgMiAqIHNpemUud2lkdGgoKSA/IHNjcm9sbGJhci0+d2lkdGgoKSAvIDIgOiBz
aXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogfQogCi1pbnQgU2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bUxpbnV4OjptaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCitpbnQg
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjptaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFy
VGhlbWVDbGllbnQqIHNjcm9sbGJhcikKIHsKICAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlv
bigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKSB7CiAgICAgICAgIEludFNpemUgc2l6ZSA9IFBsYXRm
b3JtU3VwcG9ydDo6Z2V0VGhlbWVQYXJ0U2l6ZShQbGF0Zm9ybVN1cHBvcnQ6OlBhcnRTY3JvbGxi
YXJWZXJ0aWNhbFRodW1iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4LmgKaW5kZXggOGU4MDJl
NzM0MWI3NzViNTk1NWFkMGRlYzBiOGVlZDU2Zjc5NzI3My4uMzMwZDAzZmIwMjMyMTM0ZWMyY2Ey
OTQxOWZkYWIyNzM0OTQ3NTRkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4LmgKQEAgLTM5
LDEyICszOSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgaW50IHNj
cm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSk7CiAKICAgICBwcm90ZWN0ZWQ6
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwYWludFRyYWNrUGllY2UoR3JhcGhpY3NDb250ZXh0Kiwg
U2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYsIFNjcm9sbGJhclBhcnQpOwotICAgICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyKiwgY29uc3Qg
SW50UmVjdCYsIFNjcm9sbGJhclBhcnQpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUaHVt
YihHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRm
b3JtTW91c2VFdmVudCYpOwotICAgICAgICB2aXJ0dWFsIEludFNpemUgYnV0dG9uU2l6ZShTY3Jv
bGxiYXIqKTsKLSAgICAgICAgdmlydHVhbCBpbnQgbWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJh
ciopOworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUcmFja1BpZWNlKEdyYXBoaWNzQ29udGV4
dCosIFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgSW50UmVjdCYsIFNjcm9sbGJhclBhcnQp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiwgU2Ny
b2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0JiwgU2Nyb2xsYmFyUGFydCk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRo
ZW1lQ2xpZW50KiwgY29uc3QgSW50UmVjdCYpOworICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
Q2VudGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYpOworICAgICAgICB2aXJ0dWFsIEludFNpemUgYnV0dG9uU2l6ZShTY3JvbGxiYXJUaGVt
ZUNsaWVudCopOworICAgICAgICB2aXJ0dWFsIGludCBtaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xs
YmFyVGhlbWVDbGllbnQqKTsKICAgICB9OwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNo
cm9taXVtTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJU
aGVtZUNocm9taXVtTWFjLmgKaW5kZXggNDFhMTk4ZTNmODQyMGM4NDg5NDVmYjg0NzQ0ZGRiNzAw
MjRjZDZlNS4uNGQzNDI2YmI2MjA3OTliYTNkOTA4M2I2ZGM4OTQxY2FiNDQyNmVhZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bU1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJh
clRoZW1lQ2hyb21pdW1NYWMuaApAQCAtMzYsMTIgKzM2LDEyIEBAIHB1YmxpYzoKICAgICBTY3Jv
bGxiYXJUaGVtZUNocm9taXVtTWFjKCk7CiAgICAgdmlydHVhbCB+U2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bU1hYygpOwogCi0gICAgdmlydHVhbCBib29sIHBhaW50KFNjcm9sbGJhciosIEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CisgICAgdmlydHVh
bCBib29sIHBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKIAogICAgIHZpcnR1YWwgdm9pZCBwYWlu
dE92ZXJoYW5nQXJlYXMoU2Nyb2xsVmlldyosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJl
Y3QmIGhvcml6b250YWxPdmVyaGFuZ0FyZWEsIGNvbnN0IEludFJlY3QmIHZlcnRpY2FsT3Zlcmhh
bmdBcmVhLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOwogICAgIAogcHJpdmF0ZToKLSAgICB2
b2lkIHBhaW50R2l2ZW5UaWNrbWFya3MoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyKiwgY29u
c3QgSW50UmVjdCYsIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYpOworICAgIHZvaWQgcGFpbnRHaXZl
blRpY2ttYXJrcyhHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0
IEludFJlY3QmLCBjb25zdCBWZWN0b3I8SW50UmVjdD4mKTsKIAogICAgIFJlZlB0cjxQYXR0ZXJu
PiBtX292ZXJoYW5nUGF0dGVybjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5tbQppbmRleCA0
NTlhNThiMDc2ZjcwMDZmMjc3NjViMDI0OTdhMDk5MzVmODIzZmI3Li45ZjdhM2YzMGQ3MWEzZDYz
NzY0MTVkMDNlZWY5MTA1NzFmY2ZiY2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMubW0KQEAg
LTYxLDExICs2MSwxMSBAQCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjp+U2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bU1hYygpCiB7CiB9CiAKLXN0YXRpYyBQbGF0Zm9ybVN1cHBvcnQ6OlRoZW1lUGFp
bnRTdGF0ZSBzY3JvbGxiYXJTdGF0ZVRvVGhlbWVTdGF0ZShTY3JvbGxiYXIqIHNjcm9sbGJhcikK
K3N0YXRpYyBQbGF0Zm9ybVN1cHBvcnQ6OlRoZW1lUGFpbnRTdGF0ZSBzY3JvbGxiYXJTdGF0ZVRv
VGhlbWVTdGF0ZShTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQogewogICAgIGlmICgh
c2Nyb2xsYmFyLT5lbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OlN0
YXRlRGlzYWJsZWQ7Ci0gICAgaWYgKCFzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCktPmlzQWN0
aXZlKCkpCisgICAgaWYgKCFzY3JvbGxiYXItPmlzU2Nyb2xsYWJsZUFyZWFBY3RpdmUoKSkKICAg
ICAgICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6U3RhdGVJbmFjdGl2ZTsKICAgICBpZiAoc2Ny
b2xsYmFyLT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCkKICAgICAgICAgcmV0dXJuIFBsYXRm
b3JtU3VwcG9ydDo6U3RhdGVQcmVzc2VkOwpAQCAtOTQsMTEgKzk0LDExIEBAIHN0YXRpYyB2b2lk
IHNjcm9sbGJhclBhaW50ZXJQYWludFRyYWNrKFNjcm9sbGJhclBhaW50ZXIgc2Nyb2xsYmFyUGFp
bnRlciwgYm9vbCBlCiAvLyAgICAgLSBkcmF3aW5nIHVzaW5nIFBsYXRmb3JtU3VwcG9ydCBmdW5j
dGlvbnMKIC8vICAgICAtIGRyYXdpbmcgdGlja21hcmtzCiAvLyAgICAgLSBTa2lhIHNwZWNpZmlj
IGNoYW5nZXMKLWJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnQoU2Nyb2xsYmFy
KiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGFt
YWdlUmVjdCkKK2Jvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnQoU2Nyb2xsYmFy
VGhlbWVDbGllbnQqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJ
bnRSZWN0JiBkYW1hZ2VSZWN0KQogewogICAgIC8vIEdldCB0aGUgdGlja21hcmtzIGZvciB0aGUg
ZnJhbWV2aWV3LgogICAgIFZlY3RvcjxJbnRSZWN0PiB0aWNrbWFya3M7Ci0gICAgc2Nyb2xsYmFy
LT5zY3JvbGxhYmxlQXJlYSgpLT5nZXRUaWNrbWFya3ModGlja21hcmtzKTsKKyAgICBzY3JvbGxi
YXItPmdldFRpY2ttYXJrcyh0aWNrbWFya3MpOwogCiAgICAgaWYgKGlzU2Nyb2xsYmFyT3Zlcmxh
eUFQSUF2YWlsYWJsZSgpKSB7CiAgICAgICAgIGZsb2F0IHZhbHVlID0gMDsKQEAgLTE4OCw3ICsx
ODgsNyBAQCBib29sIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50KFNjcm9sbGJhciog
c2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQqIGNvbgogICAgIGlmICghc2Nyb2xsYmFyLT5lbmFi
bGVkKCkpCiAgICAgICAgIHRyYWNrSW5mby5lbmFibGVTdGF0ZSA9IGtUaGVtZVRyYWNrRGlzYWJs
ZWQ7CiAgICAgZWxzZQotICAgICAgICB0cmFja0luZm8uZW5hYmxlU3RhdGUgPSBzY3JvbGxiYXIt
PnNjcm9sbGFibGVBcmVhKCktPmlzQWN0aXZlKCkgPyBrVGhlbWVUcmFja0FjdGl2ZSA6IGtUaGVt
ZVRyYWNrSW5hY3RpdmU7CisgICAgICAgIHRyYWNrSW5mby5lbmFibGVTdGF0ZSA9IHNjcm9sbGJh
ci0+aXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSgpID8ga1RoZW1lVHJhY2tBY3RpdmUgOiBrVGhlbWVU
cmFja0luYWN0aXZlOwogCiAgICAgaWYgKCFoYXNCdXR0b25zKHNjcm9sbGJhcikpCiAgICAgICAg
IHRyYWNrSW5mby5lbmFibGVTdGF0ZSA9IGtUaGVtZVRyYWNrTm90aGluZ1RvU2Nyb2xsOwpAQCAt
MjYzLDcgKzI2Myw3IEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnQoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCogY29uCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRHaXZlblRpY2ttYXJr
cyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJ
bnRSZWN0JiByZWN0LCBjb25zdCBWZWN0b3I8SW50UmVjdD4mIHRpY2ttYXJrcykKK3ZvaWQgU2Ny
b2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRHaXZlblRpY2ttYXJrcyhHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJl
Y3QmIHJlY3QsIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgdGlja21hcmtzKQogewogICAgIGlmIChz
Y3JvbGxiYXItPm9yaWVudGF0aW9uKCkgIT0gVmVydGljYWxTY3JvbGxiYXIpCiAgICAgICAgIHJl
dHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9s
bGJhclRoZW1lQ2hyb21pdW1XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbi5jcHAKaW5kZXggZjQzNTgzOWQ4MjE4NTY0Zjgw
MjcyOGQzMjg1MzIwZDFlMGNkYmFjOC4uYTA4MTk4MzQ3NDkxZGNjNWQ4ZjAyMmExMjI4ODkwZDY1
NzdmZTNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Ny
b2xsYmFyVGhlbWVDaHJvbWl1bVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbi5jcHAKQEAgLTczLDcgKzczLDcgQEAg
Ym9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjppbnZhbGlkYXRlT25Nb3VzZUVudGVyRXhp
dCgpCiAgICAgcmV0dXJuIHdpbmRvd3NWZXJzaW9uKCkgPj0gV2luZG93c1Zpc3RhOwogfQogCi1i
b29sIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OnNob3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2lu
KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKK2Jv
b2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6c2hvdWxkU25hcEJhY2tUb0RyYWdPcmlnaW4o
U2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JiBldnQpCiB7CiAgICAgLy8gRmluZCB0aGUgcmVjdCB3aXRoaW4gd2hpY2ggd2Ugc2hvdWxkbid0
IHNuYXAsIGJ5IGV4cGFuZGluZyB0aGUgdHJhY2sgcmVjdAogICAgIC8vIGluIGJvdGggZGltZW5z
aW9ucy4KQEAgLTkxLDcgKzkxLDcgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpz
aG91bGRTbmFwQmFja1RvRHJhZ09yaWdpbihTY3JvbGxiYXIqIHNjcm9sbGJhciwKICAgICByZXR1
cm4gIXJlY3QuY29udGFpbnMobW91c2VQb3NpdGlvbik7CiB9CiAKLXZvaWQgU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bVdpbjo6cGFpbnRUcmFja1BpZWNlKEdyYXBoaWNzQ29udGV4dCogZ2MsIFNjcm9s
bGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxiYXJQYXJ0IHBhcnRU
eXBlKQordm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpwYWludFRyYWNrUGllY2UoR3Jh
cGhpY3NDb250ZXh0KiBnYywgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3Qg
SW50UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0VHlwZSkKIHsKICAgICBib29sIGhvcnog
PSBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcjsKIApAQCAt
MTEzLDcgKzExMyw3IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRUcmFj
a1BpZWNlKEdyYXBoaWNzQ29udGV4dCogZ2MsIFNjcm9sbGJhcioKICAgICAgICAgYWxpZ25SZWN0
KTsKIH0KIAotdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpwYWludEJ1dHRvbihHcmFw
aGljc0NvbnRleHQqIGdjLCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVj
dCwgU2Nyb2xsYmFyUGFydCBwYXJ0KQordm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpw
YWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQqIGdjLCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Ny
b2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxiYXJQYXJ0IHBhcnQpCiB7CiAgICAg
Ym9vbCBob3J6ID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxi
YXI7CiAKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1XaW46
OnBhaW50QnV0dG9uKEdyYXBoaWNzQ29udGV4dCogZ2MsIFNjcm9sbGJhciogc2NybwogICAgICAg
ICByZWN0KTsKIH0KIAotdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpwYWludFRodW1i
KEdyYXBoaWNzQ29udGV4dCogZ2MsIFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0
JiByZWN0KQordm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpwYWludFRodW1iKEdyYXBo
aWNzQ29udGV4dCogZ2MsIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCiB7CiAgICAgYm9vbCBob3J6ID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigp
ID09IEhvcml6b250YWxTY3JvbGxiYXI7CiAKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIFNjcm9s
bGJhclRoZW1lQ2hyb21pdW1XaW46OnBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiBnYywgU2Ny
b2xsYmFyKiBzY3JvbAogICAgICAgICByZWN0KTsKIH0KIAotaW50IFNjcm9sbGJhclRoZW1lQ2hy
b21pdW1XaW46OmdldFRoZW1lU3RhdGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJhclBh
cnQgcGFydCkgY29uc3QKK2ludCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpnZXRUaGVtZVN0
YXRlKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydCkg
Y29uc3QKIHsKICAgICAvLyBXaGVuIGRyYWdnaW5nIHRoZSB0aHVtYiwgZHJhdyB0aHVtYiBwcmVz
c2VkIGFuZCBvdGhlciBzZWdtZW50cyBub3JtYWwKICAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXJl
IHRoZSBjdXJzb3IgYWN0dWFsbHkgaXMuICBTZWUgYWxzbyBmb3VyIHBsYWNlcyBpbgpAQCAtMTcx
LDcgKzE3MSw3IEBAIGludCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpnZXRUaGVtZVN0YXRl
KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0CiAgICAgcmV0dXJuIChzY3JvbGxi
YXItPnByZXNzZWRQYXJ0KCkgPT0gcGFydCkgPyBTQ1JCU19QUkVTU0VEIDogU0NSQlNfTk9STUFM
OwogfQogCi1pbnQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6Z2V0VGhlbWVBcnJvd1N0YXRl
KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQpIGNvbnN0CitpbnQgU2Ny
b2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6Z2V0VGhlbWVBcnJvd1N0YXRlKFNjcm9sbGJhclRoZW1l
Q2xpZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydCkgY29uc3QKIHsKICAgICAvLyBX
ZSBjb3VsZCB0YWtlIGFkdmFudGFnZSBvZiBrbm93aW5nIHRoZSB2YWx1ZXMgaW4gdGhlIHN0YXRl
IGVudW0gdG8gd3JpdGUKICAgICAvLyBzb21lIHNpbXBsZXIgY29kZSwgYnV0IHRyZWF0aW5nIHRo
ZSBzdGF0ZSBlbnVtIGFzIGEgYmxhY2sgYm94IHNlZW1zCkBAIC0yMjEsNyArMjIxLDcgQEAgaW50
IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OmdldFRoZW1lQXJyb3dTdGF0ZShTY3JvbGxiYXIq
IHNjcm9sbGJhciwgU2Nyb2xsYmEKICAgICByZXR1cm4gKHNjcm9sbGJhci0+cHJlc3NlZFBhcnQo
KSA9PSBwYXJ0KSA/IEFCU19ET1dOUFJFU1NFRCA6IEFCU19ET1dOTk9STUFMOwogfQogCi1pbnQg
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6Z2V0Q2xhc3NpY1RoZW1lU3RhdGUoU2Nyb2xsYmFy
KiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydCkgY29uc3QKK2ludCBTY3JvbGxiYXJUaGVt
ZUNocm9taXVtV2luOjpnZXRDbGFzc2ljVGhlbWVTdGF0ZShTY3JvbGxiYXJUaGVtZUNsaWVudCog
c2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQpIGNvbnN0CiB7CiAgICAgLy8gV2hlbiBkcmFn
Z2luZyB0aGUgdGh1bWIsIGRyYXcgdGhlIGJ1dHRvbnMgbm9ybWFsIGV2ZW4gd2hlbiBob3ZlcmVk
LgogICAgIGlmIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0KQpAQCAtMjM1
LDEyICsyMzUsMTIgQEAgaW50IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OmdldENsYXNzaWNU
aGVtZVN0YXRlKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGwKICAgICByZXR1cm4gKHNjcm9s
bGJhci0+cHJlc3NlZFBhcnQoKSA9PSBwYXJ0KSA/IChERkNTX1BVU0hFRCB8IERGQ1NfRkxBVCkg
OiAwOwogfQogCi1ib29sIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OnNob3VsZENlbnRlck9u
VGh1bWIoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQpCitib29sIFNj
cm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OnNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKIHsKICAgICByZXR1cm4g
ZXZ0LnNoaWZ0S2V5KCkgJiYgZXZ0LmJ1dHRvbigpID09IExlZnRCdXR0b247CiB9CiAKLUludFNp
emUgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6YnV0dG9uU2l6ZShTY3JvbGxiYXIqIHNjcm9s
bGJhcikKK0ludFNpemUgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6YnV0dG9uU2l6ZShTY3Jv
bGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQogewogICAgIC8vIE91ciBkZXNpcmVkIHJlY3Qg
aXMgZXNzZW50aWFsbHkgdGhpY2tuZXNzIGJ5IHRoaWNrbmVzcy4KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbi5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1
bVdpbi5oCmluZGV4IDY5Y2ZhMTMxYzVjYjA0ZTliNTIxMGI3NjVjZmI0ODFlOGRkY2IxMzUuLmFj
ODg4MWY5M2I1ZGIxYWZmNDY3OWE2MDYzZTdiYTdlODZmNTUxZmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1XaW4uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9t
aXVtV2luLmgKQEAgLTM4LDE5ICszOCwxOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVi
bGljOgogICAgICAgICB2aXJ0dWFsIGludCBzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29u
dHJvbFNpemUpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgaW52YWxpZGF0ZU9uTW91c2VFbnRlckV4
aXQoKTsKLSAgICAgICAgdmlydHVhbCBib29sIHNob3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2luKFNj
cm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAgICAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkU25hcEJhY2tUb0RyYWdPcmlnaW4oU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgdmlydHVh
bCB2b2lkIHBhaW50VHJhY2tQaWVjZShHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXIqLCBjb25z
dCBJbnRSZWN0JiwgU2Nyb2xsYmFyUGFydCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwYWludEJ1
dHRvbihHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JiwgU2Nyb2xs
YmFyUGFydCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwYWludFRodW1iKEdyYXBoaWNzQ29udGV4
dCosIFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCBib29sIHNo
b3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7
Ci0gICAgICAgIHZpcnR1YWwgSW50U2l6ZSBidXR0b25TaXplKFNjcm9sbGJhciopOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRUcmFja1BpZWNlKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJh
clRoZW1lQ2xpZW50KiwgY29uc3QgSW50UmVjdCYsIFNjcm9sbGJhclBhcnQpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhlbWVD
bGllbnQqLCBjb25zdCBJbnRSZWN0JiwgU2Nyb2xsYmFyUGFydCk7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRoZW1lQ2xpZW50Kiwg
Y29uc3QgSW50UmVjdCYpOworICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVt
YihTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAg
ICAgICB2aXJ0dWFsIEludFNpemUgYnV0dG9uU2l6ZShTY3JvbGxiYXJUaGVtZUNsaWVudCopOwog
CiAgICAgcHJpdmF0ZToKLSAgICAgICAgaW50IGdldFRoZW1lU3RhdGUoU2Nyb2xsYmFyKiwgU2Ny
b2xsYmFyUGFydCkgY29uc3Q7Ci0gICAgICAgIGludCBnZXRUaGVtZUFycm93U3RhdGUoU2Nyb2xs
YmFyKiwgU2Nyb2xsYmFyUGFydCkgY29uc3Q7Ci0gICAgICAgIGludCBnZXRDbGFzc2ljVGhlbWVT
dGF0ZShTY3JvbGxiYXIqLCBTY3JvbGxiYXJQYXJ0KSBjb25zdDsKKyAgICAgICAgaW50IGdldFRo
ZW1lU3RhdGUoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBTY3JvbGxiYXJQYXJ0KSBjb25zdDsKKyAg
ICAgICAgaW50IGdldFRoZW1lQXJyb3dTdGF0ZShTY3JvbGxiYXJUaGVtZUNsaWVudCosIFNjcm9s
bGJhclBhcnQpIGNvbnN0OworICAgICAgICBpbnQgZ2V0Q2xhc3NpY1RoZW1lU3RhdGUoU2Nyb2xs
YmFyVGhlbWVDbGllbnQqLCBTY3JvbGxiYXJQYXJ0KSBjb25zdDsKICAgICB9OwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwv
U2Nyb2xsYmFyVGhlbWVFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9s
bGJhclRoZW1lRWZsLmNwcAppbmRleCA2MmRmMDA1ZDY3NTcxZDE0YWQzOTQzNjBkNTZjNDk4ZTRk
ZjkyYmZiLi4yNDBiNTAxNDc3OWMxODJkMTQzOTBjM2Y4YzM5Mzc3NTc3ZTkzYTgzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2Nyb2xsYmFyVGhlbWVFZmwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxiYXJUaGVtZUVmbC5jcHAKQEAg
LTQ5LDExICs0OSwxMSBAQCBpbnQgU2Nyb2xsYmFyVGhlbWVFZmw6OnNjcm9sbGJhclRoaWNrbmVz
cyhTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKICAgICByZXR1cm4gMDsgLy8gd2Ug
cGFpbnQgb24gdG9wCiB9CiAKLXZvaWQgU2Nyb2xsYmFyVGhlbWVFZmw6OnJlZ2lzdGVyU2Nyb2xs
YmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQordm9pZCBTY3JvbGxiYXJUaGVtZUVmbDo6cmVnaXN0
ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKIHsKIH0KIAotdm9p
ZCBTY3JvbGxiYXJUaGVtZUVmbDo6dW5yZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9s
bGJhcikKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVFZmw6OnVucmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xs
YmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbGJhclRoZW1lRWZsLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9lZmwvU2Nyb2xsYmFyVGhlbWVFZmwuaAppbmRleCAwZmUxNjg4MWUyZTQ1NmU2ZTEy
MzAxYWVlZjg2YzI2NWJkMzMyMzRiLi5mYzcxY2JlZDg5MGExYTY1YTlhMDJhZDhhMDNkMzhmZGM5
OWFkM2MyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2Nyb2xsYmFy
VGhlbWVFZmwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2Nyb2xsYmFyVGhl
bWVFZmwuaApAQCAtMzksOCArMzksOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGludCBzY3Jv
bGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFyU2Nyb2xsYmFyKTsK
IAotICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJh
cik7Ci0gICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIpOworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXJUaGVt
ZUNsaWVudCogc2Nyb2xsYmFyKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlclNjcm9sbGJh
cihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKTsKIH07CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJD
aHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3Jh
cGhpY3NMYXllckNocm9taXVtLmgKaW5kZXggZGJmMTVlNTFkYjEwYjdiZDY1MTU2ZGU4ZTdkODAx
OTNmZjg3YjBkMy4uYThkMmYxYTJkNjA4NDZmYTU5YjU4ZDViMTUxNDczNGNjM2FiMzcyNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhp
Y3NMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKQEAgLTk0LDYgKzk0LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqKTsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKik7CisgICAgdmlydHVhbCBi
b29sIGhhc0NvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzTGF5ZXI7IH0K
IAogICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGRmMjU5OGZmNzFiMDg1OTg2NTY1YWIxNWU2MzNlYjgy
N2M5MjFkOWQuLmRhZjJhNWU5NDMzOTM3Y2VkYzE0YjMxM2U4MDY0NGVjYjNkYzIyNzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uY3BwCkBAIC03NSw2ICs3NSw4IEBAIExheWVyQ2hyb21pdW06OkxheWVy
Q2hyb21pdW0oKQogICAgICwgbV9wcmVzZXJ2ZXMzRChmYWxzZSkKICAgICAsIG1fYWx3YXlzUmVz
ZXJ2ZVRleHR1cmVzKGZhbHNlKQogICAgICwgbV9yZXBsaWNhTGF5ZXIoMCkKKyAgICAsIG1faG9y
aXpvbnRhbFNjcm9sbGJhckxheWVyKDApCisgICAgLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIo
MCkKICAgICAsIG1fZHJhd09wYWNpdHkoMCkKICAgICAsIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSgw
KQogICAgICwgbV9jb250ZW50c1NjYWxlKDEuMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCBmZjJl
N2QyODYyNjIyZmFkMmMwNjkzOGQ2ZjUyNTY5MTQwZjg4M2ZhLi4zZmNmZWJjZGQyM2Q2Yjc5ZTFj
NDZhZGVhNGMwYjRlZmRkZWYyOGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC01Nyw2ICs1Nyw3
IEBAIGNsYXNzIENDTGF5ZXJUcmVlSG9zdDsKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXI7CiBjbGFz
cyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFJlZ2lvbjsKK2NsYXNzIFNjcm9sbGJhckxheWVy
Q2hyb21pdW07CiAKIC8vIEJhc2UgY2xhc3MgZm9yIGNvbXBvc2l0ZWQgbGF5ZXJzLiBTcGVjaWFs
IGxheWVyIHR5cGVzIGFyZSBkZXJpdmVkIGZyb20KIC8vIHRoaXMgY2xhc3MuCkBAIC0yMTUsNiAr
MjE2LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QWx3YXlzUmVzZXJ2ZVRleHR1cmVzKGJvb2wg
YWx3YXlzUmVzZXJ2ZVRleHR1cmVzKSB7IG1fYWx3YXlzUmVzZXJ2ZVRleHR1cmVzID0gYWx3YXlz
UmVzZXJ2ZVRleHR1cmVzOyB9CiAgICAgYm9vbCBhbHdheXNSZXNlcnZlVGV4dHVyZXMoKSBjb25z
dCB7IHJldHVybiBtX2Fsd2F5c1Jlc2VydmVUZXh0dXJlczsgfQogCisgICAgdm9pZCBzZXRIb3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXIoU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bSogbGF5ZXIpIHsgbV9o
b3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgPSBsYXllcjsgfQorICAgIHZvaWQgc2V0VmVydGljYWxT
Y3JvbGxiYXJMYXllcihTY3JvbGxiYXJMYXllckNocm9taXVtKiBsYXllcikgeyBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyTGF5ZXIgPSBsYXllcjsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgTGF5ZXJDaHJvbWl1
bSgpOwogCkBAIC0yODgsNiArMjkyLDkgQEAgcHJpdmF0ZToKICAgICAvLyBSZXBsaWNhIGxheWVy
IHVzZWQgZm9yIHJlZmxlY3Rpb25zLgogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX3JlcGxp
Y2FMYXllcjsKIAorICAgIFNjcm9sbGJhckxheWVyQ2hyb21pdW0gKm1faG9yaXpvbnRhbFNjcm9s
bGJhckxheWVyOworICAgIFNjcm9sbGJhckxheWVyQ2hyb21pdW0gKm1fdmVydGljYWxTY3JvbGxi
YXJMYXllcjsKKwogICAgIC8vIFRyYW5zaWVudCBwcm9wZXJ0aWVzLgogICAgIE93blB0cjxSZW5k
ZXJTdXJmYWNlQ2hyb21pdW0+IG1fcmVuZGVyU3VyZmFjZTsKICAgICBmbG9hdCBtX2RyYXdPcGFj
aXR5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
YWNhYmQ1Mjk0OWVmMWVlNTNkY2FhNjE5YzlkNmY5Y2ViM2UwYjM3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5
ZXJDaHJvbWl1bS5jcHAKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVk
ZSAiU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiY2MvQ0NTY3JvbGxiYXJM
YXllckltcGwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPENDTGF5ZXJJ
bXBsPiBTY3JvbGxiYXJMYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCit7CisgICAg
cmV0dXJuIENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpjcmVhdGUoaWQoKSk7Cit9CisKK1Bhc3NSZWZQ
dHI8U2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bT4gU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNjcm9sbGJhckxheWVyQ2hyb21pdW0pOwor
fQorCitTY3JvbGxiYXJMYXllckNocm9taXVtOjpTY3JvbGxiYXJMYXllckNocm9taXVtKCkKK3sK
K30KKworfQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxh
eWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1Njcm9sbGJhckxheWVyQ2hyb21pdW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kOTA0Y2VlOTVkYmViMjI3NzY2
MDg4YTdmMWVjMzgyYzUyMWVkNTY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5oCkBAIC0w
LDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBTY3JvbGxiYXJMYXllckNocm9t
aXVtX2gKKyNkZWZpbmUgU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bV9oCisKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBM
YXllckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXllcklt
cGw+IGNyZWF0ZUNDTGF5ZXJJbXBsKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2Nyb2xsYmFy
TGF5ZXJDaHJvbWl1bT4gY3JlYXRlKCk7CisKK3Byb3RlY3RlZDoKKyAgICBTY3JvbGxiYXJMYXll
ckNocm9taXVtKCk7Cit9OworCit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAKaW5kZXggZDBmZDBjZTUy
M2Q2Mzg4NGJlOTMyZTFiZDQxNjU4MmYyNTc2MmU0MC4uZjdkZDFhMjcxMGI0MDlmZWE1NWYwOGE4
MTViYTYwNzA0Yjg5YjQwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAKQEAgLTI4LDcg
KzI4LDEwIEBACiAjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXplci5oIgogCiAjaW5jbHVkZSAiTGF5
ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlNjcm9sbGJhckxheWVyQ2hyb21pdW0uaCIKICNpbmNs
dWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDU2Nyb2xsYmFyLmgiCisjaW5j
bHVkZSAiY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc4LDYgKzgxLDM4IEBAIFBhc3NSZWZQdHI8Q0NM
YXllckltcGw+IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShMYXll
ckNocm9taXVtCiAgICAgcmV0dXJuIGNjTGF5ZXJJbXBsLnJlbGVhc2UoKTsKIH0KIAordm9pZCBU
cmVlU3luY2hyb25pemVyOjpyZXNvbHZlSW50ZXJMYXllclBvaW50ZXJzUmVjdXJzaXZlKExheWVy
Q2hyb21pdW0qIGxheWVyLCBDQ0xheWVySW1wbE1hcCYgbWFwKQoreworICAgIENDTGF5ZXJJbXBs
KiBjY0xheWVySW1wbCA9IG1hcC5nZXQobGF5ZXItPmlkKCkpLmdldCgpOworICAgIEFTU0VSVChj
Y0xheWVySW1wbCk7CisKKyAgICBpZiAobGF5ZXItPm1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVy
KSB7CisgICAgICAgIGlmICghY2NMYXllckltcGwtPm1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAg
ICAgICAgICAgIGNjTGF5ZXJJbXBsLT5tX2hvcml6b250YWxTY3JvbGxiYXIgPSBDQ1Njcm9sbGJh
cjo6Y3JlYXRlKEhvcml6b250YWxTY3JvbGxiYXIpOworICAgICAgICBDQ1Njcm9sbGJhciogc2Ny
b2xsYmFyID0gY2NMYXllckltcGwtPm1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQoKTsKKyAgICAg
ICAgQ0NTY3JvbGxiYXJMYXllckltcGwqIHNjcm9sbGJhckxheWVyID0gc3RhdGljX2Nhc3Q8Q0NT
Y3JvbGxiYXJMYXllckltcGwqPihtYXAuZ2V0KGxheWVyLT5tX2hvcml6b250YWxTY3JvbGxiYXJM
YXllci0+aWQoKSkuZ2V0KCkpOworCisgICAgICAgIHNjcm9sbGJhci0+c3luY1Byb3BlcnRpZXMo
Y2NMYXllckltcGwsIHNjcm9sbGJhckxheWVyKTsKKyAgICB9IGVsc2UKKyAgICAgICAgY2NMYXll
ckltcGwtPm1faG9yaXpvbnRhbFNjcm9sbGJhciA9IG51bGxwdHI7CisKKyAgICBpZiAobGF5ZXIt
Pm1fdmVydGljYWxTY3JvbGxiYXJMYXllcikgeworICAgICAgICBpZiAoIWNjTGF5ZXJJbXBsLT5t
X3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICAgICAgY2NMYXllckltcGwtPm1fdmVydGljYWxT
Y3JvbGxiYXIgPSBDQ1Njcm9sbGJhcjo6Y3JlYXRlKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKworICAg
ICAgICBDQ1Njcm9sbGJhciogc2Nyb2xsYmFyID0gY2NMYXllckltcGwtPm1fdmVydGljYWxTY3Jv
bGxiYXIuZ2V0KCk7CisgICAgICAgIENDU2Nyb2xsYmFyTGF5ZXJJbXBsKiBzY3JvbGxiYXJMYXll
ciA9IHN0YXRpY19jYXN0PENDU2Nyb2xsYmFyTGF5ZXJJbXBsKj4obWFwLmdldChsYXllci0+bV92
ZXJ0aWNhbFNjcm9sbGJhckxheWVyLT5pZCgpKS5nZXQoKSk7CisKKyAgICAgICAgc2Nyb2xsYmFy
LT5zeW5jUHJvcGVydGllcyhjY0xheWVySW1wbCwgc2Nyb2xsYmFyTGF5ZXIpOworICAgIH0gZWxz
ZQorICAgICAgICBjY0xheWVySW1wbC0+bV92ZXJ0aWNhbFNjcm9sbGJhciA9IG51bGxwdHI7CisK
KworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgY2hpbGRyZW4gPSBs
YXllci0+Y2hpbGRyZW4oKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuLnNp
emUoKTsgKytpKQorICAgICAgICByZXNvbHZlSW50ZXJMYXllclBvaW50ZXJzUmVjdXJzaXZlKGNo
aWxkcmVuW2ldLmdldCgpLCBtYXApOworfQorCiBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBUcmVl
U3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKExheWVyQ2hyb21pdW0qIGxheWVyQ2hyb21p
dW1Sb290LCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBwcnBPbGRDQ0xheWVySW1wbFJvb3QpCiB7
CiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBvbGRDQ0xheWVySW1wbFJvb3QgPSBwcnBPbGRDQ0xh
eWVySW1wbFJvb3Q7CkBAIC04OSw2ICsxMjQsOCBAQCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBU
cmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKExheWVyQ2hyb21pdW0qIGxheWVyQwog
ICAgIC8vIFJlY3Vyc2l2ZWx5IGJ1aWxkIHRoZSBuZXcgbGF5ZXIgdHJlZS4KICAgICBSZWZQdHI8
Q0NMYXllckltcGw+IG5ld0NDTGF5ZXJJbXBsUm9vdCA9IHN5bmNocm9uaXplVHJlZVJlY3Vyc2l2
ZShsYXllckNocm9taXVtUm9vdCwgbWFwKTsKIAorICAgIHJlc29sdmVJbnRlckxheWVyUG9pbnRl
cnNSZWN1cnNpdmUobGF5ZXJDaHJvbWl1bVJvb3QsIG1hcCk7CisKICAgICByZXR1cm4gbmV3Q0NM
YXllckltcGxSb290LnJlbGVhc2UoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5oCmluZGV4
IGE0ZTQ5NDIxNzM5NWU4ZDJlMTI5NmJkNjU2NjYyZTMyYjExOWFjZmYuLjlhNTdjOWVhMDY5MDQy
ZjRmMDE1ZjAwOGI5MDI3OTM1N2FjMWNkOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmgKQEAg
LTUwLDYgKzUwLDcgQEAgcHJpdmF0ZToKICAgICAvLyBEZWNsYXJlZCBhcyBzdGF0aWMgbWVtYmVy
IGZ1bmN0aW9ucyBzbyB0aGV5IGNhbiBhY2Nlc3MgZnVuY3Rpb25zIG9uIExheWVyQ2hyb21pdW0g
YXMgYSBmcmllbmQgY2xhc3MuCiAgICAgc3RhdGljIHZvaWQgYWRkQ0NMYXllckltcGxzVG9NYXBS
ZWN1cnNpdmUoQ0NMYXllckltcGxNYXAmLCBDQ0xheWVySW1wbCopOwogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENDTGF5ZXJJbXBsPiBzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1
bSosIENDTGF5ZXJJbXBsTWFwJik7CisgICAgc3RhdGljIHZvaWQgcmVzb2x2ZUludGVyTGF5ZXJQ
b2ludGVyc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKiwgQ0NMYXllckltcGxNYXAmKTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCBjZTU0
ZTdlNGI3NDk0Mjg5ZjVhODFkNjM1ZGFkNjgzYmU5NjVjNzMwLi43MjIwOTNiOWI5MzA4NDY2Mjc0
YjY4NjlhNGRiMzY0ODg4MWE1YWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0zNCw2
ICszNCw3IEBACiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAi
Y2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5o
IgorI2luY2x1ZGUgImNjL0NDU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiY2MvQ0NTb2xpZENvbG9y
RHJhd1F1YWQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmgKaW5kZXggOWU2YzU1MDA3ZWU3ZTM4ZDc1ZjYzMTFjOWEwZjhkZWRhNzQ3NmVhYy4u
NzlmYmIwOWJmM2JkNzRjZjM2NTk2OGFmNjQyN2FiODI2NjdlODQ0YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5oCkBAIC00Miw2ICs0Miw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEND
TGF5ZXJTb3J0ZXI7CitjbGFzcyBDQ1Njcm9sbGJhcjsKIGNsYXNzIExheWVyQ2hyb21pdW07CiBj
bGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CiAKQEAgLTI2OSw2ICsyNzAsOSBAQCBwcml2YXRl
OgogICAgIEludFNpemUgbV9tYXhTY3JvbGxQb3NpdGlvbjsKICAgICBmbG9hdCBtX3BhZ2VTY2Fs
ZURlbHRhOwogCisgICAgT3duUHRyPENDU2Nyb2xsYmFyPiBtX2hvcml6b250YWxTY3JvbGxiYXI7
CisgICAgT3duUHRyPENDU2Nyb2xsYmFyPiBtX3ZlcnRpY2FsU2Nyb2xsYmFyOworCiAgICAgLy8g
UHJvcGVydGllcyBvd25lZCBleGNsdXNpdmVseSBieSB0aGlzIENDTGF5ZXJJbXBsLgogICAgIC8v
IERlYnVnZ2luZy4KICNpZm5kZWYgTkRFQlVHCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWJkZWFlNjdiNmQ3MjhlNzFmNTNmZTUxYjc1YTRkZjJkZTA3NTc5YwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2Nyb2xsYmFyLmNwcApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkNDU2Ny
b2xsYmFyLmgiCisKKyNpbmNsdWRlICJDQ1Njcm9sbGJhckxheWVySW1wbC5oIgorI2luY2x1ZGUg
IlNjcm9sbFR5cGVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBDQ1Njcm9sbGJh
cjo6aXNDdXN0b21TY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorU2Nyb2xsYmFy
T3JpZW50YXRpb24gQ0NTY3JvbGxiYXI6Om9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9v
cmllbnRhdGlvbjsgfQorCitpbnQgQ0NTY3JvbGxiYXI6OnZhbHVlKCkgY29uc3QgeyByZXR1cm4g
bV9jdXJyZW50UG9zOyB9CitmbG9hdCBDQ1Njcm9sbGJhcjo6Y3VycmVudFBvcygpIGNvbnN0IHsg
cmV0dXJuIG1fY3VycmVudFBvczsgfQoraW50IENDU2Nyb2xsYmFyOjp2aXNpYmxlU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmlzaWJsZVNpemU7IH0KK2ludCBDQ1Njcm9sbGJhcjo6dG90YWxTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV90b3RhbFNpemU7IH0KK2ludCBDQ1Njcm9sbGJhcjo6bWF4aW11
bSgpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxTaXplIC0gbV92aXNpYmxlU2l6ZTsgfQorU2Nyb2xs
YmFyQ29udHJvbFNpemUgQ0NTY3JvbGxiYXI6OmNvbnRyb2xTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9jb250cm9sU2l6ZTsgfQorCitpbnQgQ0NTY3JvbGxiYXI6OmxpbmVTdGVwKCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQoraW50IENDU2Nyb2xsYmFyOjpwYWdlU3RlcCgpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KKworU2Nyb2xsYmFyUGFydCBDQ1Njcm9sbGJhcjo6cHJlc3NlZFBhcnQoKSBjb25zdCB7IHJl
dHVybiBOb1BhcnQ7IH0KK1Njcm9sbGJhclBhcnQgQ0NTY3JvbGxiYXI6OmhvdmVyZWRQYXJ0KCkg
Y29uc3QgeyByZXR1cm4gTm9QYXJ0OyB9CisKK2Jvb2wgQ0NTY3JvbGxiYXI6OmVuYWJsZWQoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9Cit2b2lkIENDU2Nyb2xsYmFyOjpzZXRFbmFibGVkKGJvb2wp
IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKworaW50IENDU2Nyb2xsYmFyOjp4KCkgY29uc3Qg
eyByZXR1cm4gbV9mcmFtZVJlY3QueCgpOyB9CitpbnQgQ0NTY3JvbGxiYXI6OnkoKSBjb25zdCB7
IHJldHVybiBtX2ZyYW1lUmVjdC55KCk7IH0KK2ludCBDQ1Njcm9sbGJhcjo6d2lkdGgoKSBjb25z
dCB7IHJldHVybiBtX2ZyYW1lUmVjdC53aWR0aCgpOyB9CitpbnQgQ0NTY3JvbGxiYXI6OmhlaWdo
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LmhlaWdodCgpOyB9CitJbnRTaXplIENDU2Ny
b2xsYmFyOjpzaXplKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3Quc2l6ZSgpOyB9CitJbnRQ
b2ludCBDQ1Njcm9sbGJhcjo6bG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC5s
b2NhdGlvbigpOyB9CisKK1Njcm9sbFZpZXcqIENDU2Nyb2xsYmFyOjpwYXJlbnQoKSBjb25zdCB7
IHJldHVybiAwOyB9CitTY3JvbGxWaWV3KiBDQ1Njcm9sbGJhcjo6cm9vdCgpIGNvbnN0IHsgcmV0
dXJuIDA7IH0KKwordm9pZCBDQ1Njcm9sbGJhcjo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3Qm
IGZyYW1lUmVjdCkgeyBtX2ZyYW1lUmVjdCA9IGZyYW1lUmVjdDsgfQorSW50UmVjdCBDQ1Njcm9s
bGJhcjo6ZnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3Q7IH0KKwordm9pZCBD
Q1Njcm9sbGJhcjo6aW52YWxpZGF0ZSgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KK3ZvaWQg
Q0NTY3JvbGxiYXI6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmKSB7IGludmFsaWRhdGUo
KTsgfQorCitTY3JvbGxiYXJPdmVybGF5U3R5bGUgQ0NTY3JvbGxiYXI6OnNjcm9sbGJhck92ZXJs
YXlTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmxheVN0eWxlOyB9Cit2b2lkIENDU2Nyb2xs
YmFyOjpnZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+JikgY29uc3QgeyAvKkFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyovIH0KK2Jvb2wgQ0NTY3JvbGxiYXI6OmlzU2Nyb2xsYWJsZUFyZWFBY3RpdmUo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKK0ludFBvaW50IENDU2Nyb2xsYmFyOjpjb252ZXJ0
RnJvbUNvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KSB7IHJldHVy
biB3aW5kb3dQb2ludDsgfQorCisKK1Bhc3NPd25QdHI8Q0NTY3JvbGxiYXI+IENDU2Nyb2xsYmFy
OjpjcmVhdGUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBDQ1Njcm9sbGJhcihvcmllbnRhdGlvbikpOworfQorCitDQ1Njcm9sbGJh
cjo6Q0NTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCisgICAgOiBt
X29yaWVudGF0aW9uKG9yaWVudGF0aW9uKQorICAgICwgbV9jdXJyZW50UG9zKDApCisgICAgLCBt
X3Zpc2libGVTaXplKDApCisgICAgLCBtX3RvdGFsU2l6ZSgwKQorICAgICwgbV9jb250cm9sU2l6
ZShSZWd1bGFyU2Nyb2xsYmFyKQorICAgICwgbV9vdmVybGF5U3R5bGUoU2Nyb2xsYmFyT3Zlcmxh
eVN0eWxlRGVmYXVsdCkKKyAgICAsIG1fc2Nyb2xsTGF5ZXIoMCkKKyAgICAsIG1fc2Nyb2xsYmFy
TGF5ZXIoMCkKK3sKK30KKwordm9pZCBDQ1Njcm9sbGJhcjo6c3luY1Byb3BlcnRpZXMoQ0NMYXll
ckltcGwqIHNjcm9sbExheWVyLCBDQ1Njcm9sbGJhckxheWVySW1wbCogc2Nyb2xsYmFyTGF5ZXIp
Cit7CisgICAgbV9jb250cm9sU2l6ZSA9IFJlZ3VsYXJTY3JvbGxiYXI7CisgICAgbV9mcmFtZVJl
Y3QgPSBJbnRSZWN0KEludFBvaW50KCksIHNjcm9sbGJhckxheWVyLT5jb250ZW50Qm91bmRzKCkp
OworICAgIG1fb3ZlcmxheVN0eWxlID0gU2Nyb2xsYmFyT3ZlcmxheVN0eWxlRGVmYXVsdDsKKwor
ICAgIGlmIChtX29yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIG1f
Y3VycmVudFBvcyA9IHNjcm9sbExheWVyLT5zY3JvbGxQb3NpdGlvbigpLngoKTsKKyAgICBlbHNl
CisgICAgICAgIG1fY3VycmVudFBvcyA9IHNjcm9sbExheWVyLT5zY3JvbGxQb3NpdGlvbigpLnko
KTsKKworICAgIG1fdmlzaWJsZVNpemUgPSAxMDA7IC8vIEZJWE1FCisgICAgbV90b3RhbFNpemUg
PSAxMDAwOworCisgICAgbV9zY3JvbGxMYXllciA9IHNjcm9sbExheWVyOworICAgIG1fc2Nyb2xs
YmFyTGF5ZXIgPSBzY3JvbGxiYXJMYXllcjsKKworICAgIHNjcm9sbGJhckxheWVyLT5zZXRTY3Jv
bGxiYXIodGhpcyk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42ZjcwZWNiZTdmNmQzZWQ4MWQ5M2IzNWY3NmFiM2I0NjIzZjk3ZmY1Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
Y3JvbGxiYXIuaApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NTY3JvbGxiYXJf
aAorI2RlZmluZSBDQ1Njcm9sbGJhcl9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUNsaWVudC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIENDTGF5ZXJJbXBsOworY2xhc3MgQ0NTY3JvbGxiYXJMYXllckltcGw7
CisKK2NsYXNzIENDU2Nyb2xsYmFyIDogcHVibGljIFNjcm9sbGJhclRoZW1lQ2xpZW50IHsKK3B1
YmxpYzoKKyAgICAvLyBTY3JvbGxiYXJUaGVtZUNsaWVudCBpbXBsZW1lbnRhdGlvbgorICAgIHZp
cnR1YWwgYm9vbCBpc0N1c3RvbVNjcm9sbGJhcigpIGNvbnN0OworICAgIHZpcnR1YWwgU2Nyb2xs
YmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSBjb25zdDsKKworICAgIHZpcnR1YWwgaW50IHZh
bHVlKCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBjdXJyZW50UG9zKCkgY29uc3Q7CisgICAg
dmlydHVhbCBpbnQgdmlzaWJsZVNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCB0b3RhbFNp
emUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBtYXhpbXVtKCkgY29uc3Q7CisgICAgdmlydHVh
bCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSgpIGNvbnN0OworCisgICAgdmlydHVh
bCBpbnQgbGluZVN0ZXAoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBwYWdlU3RlcCgpIGNvbnN0
OworCisgICAgdmlydHVhbCBTY3JvbGxiYXJQYXJ0IHByZXNzZWRQYXJ0KCkgY29uc3Q7CisgICAg
dmlydHVhbCBTY3JvbGxiYXJQYXJ0IGhvdmVyZWRQYXJ0KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFs
IGJvb2wgZW5hYmxlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFibGVkKGJvb2wp
OworCisgICAgdmlydHVhbCBpbnQgeCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHkoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGludCB3aWR0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGhlaWdo
dCgpIGNvbnN0OworICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgdmlydHVh
bCBJbnRQb2ludCBsb2NhdGlvbigpIGNvbnN0OworCisgICAgdmlydHVhbCBTY3JvbGxWaWV3KiBw
YXJlbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFNjcm9sbFZpZXcqIHJvb3QoKSBjb25zdDsKKwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgSW50UmVjdCBmcmFtZVJlY3QoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlk
YXRlKCk7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmKTsK
KworICAgIHZpcnR1YWwgU2Nyb2xsYmFyT3ZlcmxheVN0eWxlIHNjcm9sbGJhck92ZXJsYXlTdHls
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBnZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+
JikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsYWJsZUFyZWFBY3RpdmUoKSBjb25z
dDsKKworICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nV2luZG93KGNv
bnN0IEludFBvaW50JiB3aW5kb3dQb2ludCk7CisKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPEND
U2Nyb2xsYmFyPiBjcmVhdGUoU2Nyb2xsYmFyT3JpZW50YXRpb24pOworcHJpdmF0ZToKKyAgICBm
cmllbmQgY2xhc3MgVHJlZVN5bmNocm9uaXplcjsKKyAgICB2b2lkIHN5bmNQcm9wZXJ0aWVzKEND
TGF5ZXJJbXBsKiwgQ0NTY3JvbGxiYXJMYXllckltcGwqKTsKKworICAgIENDU2Nyb2xsYmFyKFNj
cm9sbGJhck9yaWVudGF0aW9uKTsKKworICAgIFNjcm9sbGJhck9yaWVudGF0aW9uIG1fb3JpZW50
YXRpb247CisKKyAgICBmbG9hdCBtX2N1cnJlbnRQb3M7CisgICAgaW50IG1fdmlzaWJsZVNpemU7
CisgICAgaW50IG1fdG90YWxTaXplOworCisgICAgU2Nyb2xsYmFyQ29udHJvbFNpemUgbV9jb250
cm9sU2l6ZTsKKworICAgIEludFJlY3QgbV9mcmFtZVJlY3Q7CisKKyAgICBTY3JvbGxiYXJPdmVy
bGF5U3R5bGUgbV9vdmVybGF5U3R5bGU7CisKKyAgICBDQ0xheWVySW1wbCogbV9zY3JvbGxMYXll
cjsKKyAgICBDQ1Njcm9sbGJhckxheWVySW1wbCogbV9zY3JvbGxiYXJMYXllcjsKK307CisKK30K
KyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3Jv
bGxiYXJMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYxZDQ2ZDEyZTk3
MjI2YjE1MjgzMTFlNGI2YTFkN2I5OGYzOWY1MzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1w
bC5jcHAKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJDQ1Njcm9sbGJhckxh
eWVySW1wbC5oIgorCisjaW5jbHVkZSAiQ0NTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJDQ1RpbGVE
cmF3UXVhZC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUg
Ik1hbmFnZWRUZXh0dXJlLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKworI2lmIFVT
RShTS0lBKQorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNpbmNsdWRlICJTa0dw
dURldmljZS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxD
Q1Njcm9sbGJhckxheWVySW1wbD4gQ0NTY3JvbGxiYXJMYXllckltcGw6OmNyZWF0ZShpbnQgaWQp
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1Njcm9sbGJhckxheWVySW1wbChpZCkpOwor
fQorCitDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXJMYXllckltcGwoaW50IGlkKQor
ICAgIDogQ0NMYXllckltcGwoaWQpCisgICAgLCBtX3Njcm9sbGJhcigwKQoreworfQorCit2b2lk
IENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjp3aWxsRHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxh
eWVyUmVuZGVyZXIpCit7CisgICAgaWYgKGJvdW5kcygpLmlzRW1wdHkoKSB8fCBjb250ZW50Qm91
bmRzKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdGV4dHVyZSkK
KyAgICAgICAgbV90ZXh0dXJlID0gTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShsYXllclJlbmRlcmVy
LT5yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIoKSk7CisKKyAgICBJbnRTaXplIHRleHR1cmVT
aXplID0gY29udGVudEJvdW5kcygpOworICAgIGlmICghbV90ZXh0dXJlLT5yZXNlcnZlKHRleHR1
cmVTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCisgICAgICAgIHJldHVybjsKKyAgICBt
X3RleHR1cmUtPmFsbG9jYXRlKGxheWVyUmVuZGVyZXItPnJlbmRlclN1cmZhY2VUZXh0dXJlQWxs
b2NhdG9yKCkpOworCisjaWYgVVNFKFNLSUEpCisgICAgR3JQbGF0Zm9ybVRleHR1cmVEZXNjIHRl
eHR1cmVEZXNjOworICAgIHRleHR1cmVEZXNjLmZGbGFncyA9IGtSZW5kZXJUYXJnZXRfR3JQbGF0
Zm9ybVRleHR1cmVGbGFnOworICAgIHRleHR1cmVEZXNjLmZXaWR0aCA9IHRleHR1cmVTaXplLndp
ZHRoKCk7CisgICAgdGV4dHVyZURlc2MuZkhlaWdodCA9IHRleHR1cmVTaXplLmhlaWdodCgpOwor
ICAgIHRleHR1cmVEZXNjLmZDb25maWcgPSBrUkdCQV84ODg4X1BNX0dyUGl4ZWxDb25maWc7Cisg
ICAgdGV4dHVyZURlc2MuZlNhbXBsZUNudCA9IDA7CisgICAgdGV4dHVyZURlc2MuZlRleHR1cmVI
YW5kbGUgPSBtX3RleHR1cmUtPnRleHR1cmVJZCgpOworCisgICAgR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQgPSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7CisgICAgR3JDb250ZXh0KiBnckNv
bnRleHQgPSBjb250ZXh0LT5nckNvbnRleHQoKTsKKyAgICBTa0F1dG9UVW5yZWY8R3JUZXh0dXJl
PiB0YXJnZXQoZ3JDb250ZXh0LT5jcmVhdGVQbGF0Zm9ybVRleHR1cmUodGV4dHVyZURlc2MpKTsK
KyAgICBTa0F1dG9UVW5yZWY8U2tEZXZpY2U+IGRldmljZShuZXcgU2tHcHVEZXZpY2UoZ3JDb250
ZXh0LCB0YXJnZXQuZ2V0KCkpKTsKKyAgICBTa0F1dG9UVW5yZWY8U2tDYW52YXM+IGNhbnZhcyhu
ZXcgU2tDYW52YXMoZGV2aWNlLmdldCgpKSk7CisKKyAgICBjYW52YXMuZ2V0KCktPnRyYW5zbGF0
ZSgwLCB0ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CisgICAgY2FudmFzLmdldCgpLT5zY2FsZSgxLCAt
MSk7CisKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3JtQ29udGV4dChjYW52YXMuZ2V0
KCkpOworICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoJnBsYXRmb3JtQ29udGV4
dCk7CisKKyAgICBnckNvbnRleHQtPnJlc2V0Q29udGV4dCgpOworICAgIHBhaW50KCZncmFwaGlj
c0NvbnRleHQpOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQor
Cit2b2lkIENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyhDQ1F1YWRMaXN0JiBxdWFk
TGlzdCwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSkKK3sKKyAgICBp
ZiAoIW1fdGV4dHVyZS0+aXNSZXNlcnZlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRS
ZWN0IHF1YWRSZWN0KEludFBvaW50KCksIGJvdW5kcygpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQo
Q0NUaWxlRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCBxdWFkUmVj
dCwgbV90ZXh0dXJlLT50ZXh0dXJlSWQoKSwgSW50UG9pbnQoKSwgbV90ZXh0dXJlLT5zaXplKCks
IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVl
KSk7Cit9CisKK3ZvaWQgQ0NTY3JvbGxiYXJMYXllckltcGw6OmRpZERyYXcoKQoreworICAgIG1f
dGV4dHVyZS0+dW5yZXNlcnZlKCk7Cit9CisKK3ZvaWQgQ0NTY3JvbGxiYXJMYXllckltcGw6OnBh
aW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBjb250ZXh0LT5jbGVhclJlY3Qo
SW50UmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91bmRzKCkpKTsKKyAgICBTY3JvbGxiYXJUaGVt
ZTo6dGhlbWUoKS0+cGFpbnQobV9zY3JvbGxiYXIsIGNvbnRleHQsIEludFJlY3QoSW50UG9pbnQo
KSwgY29udGVudEJvdW5kcygpKSk7IC8vIEZJWE1FCit9CisKK30KKyNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wODYzODdhMTYxZGM2YzM2MzUyOGY4OTQwYmRmYjdhZTA2M2NjYWVkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBDQ1Njcm9sbGJhckxheWVySW1wbF9oCisjZGVmaW5lIENDU2Nyb2xsYmFyTGF5ZXJJbXBs
X2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkNDTGF5
ZXJJbXBsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NTY3JvbGxiYXI7Citj
bGFzcyBNYW5hZ2VkVGV4dHVyZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKKworY2xhc3MgQ0NT
Y3JvbGxiYXJMYXllckltcGwgOiBwdWJsaWMgQ0NMYXllckltcGwgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENDU2Nyb2xsYmFyTGF5ZXJJbXBsPiBjcmVhdGUoaW50IGlkKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCB3aWxsRHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKKyAgICB2
aXJ0dWFsIHZvaWQgYXBwZW5kUXVhZHMoQ0NRdWFkTGlzdCYsIGNvbnN0IENDU2hhcmVkUXVhZFN0
YXRlKik7CisgICAgdmlydHVhbCB2b2lkIGRpZERyYXcoKTsKKworICAgIHZvaWQgcGFpbnQoR3Jh
cGhpY3NDb250ZXh0Kik7CisKKyAgICB2b2lkIHNldFNjcm9sbGJhcihDQ1Njcm9sbGJhciogc2Ny
b2xsYmFyKSB7IG1fc2Nyb2xsYmFyID0gc2Nyb2xsYmFyOyB9CisgICAgQ0NTY3JvbGxiYXIqIHNj
cm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYmFyOyB9CisKK3Byb3RlY3RlZDoKKyAg
ICBDQ1Njcm9sbGJhckxheWVySW1wbChpbnQgaWQpOworCitwcml2YXRlOgorICAgIENDU2Nyb2xs
YmFyKiBtX3Njcm9sbGJhcjsKKworICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV90ZXh0dXJl
OworfTsKKworfQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhl
bWVHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3Rr
LmNwcAppbmRleCBlOTkzNjRmMmE3ZmNhZjQ4ODgzMGI0NjhkZTFkMThhZDc1MDRlOTBmLi45NGUz
ZmQ3NmY3ZmZjNTIzMGZjODQ3ZmY5ZmVjYWY0M2RjNDZmYTA1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAKQEAgLTMzLDcgKzMzLDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgSGFzaFNldDxTY3JvbGxiYXIqPiog
Z1Njcm9sbGJhcnM7CitzdGF0aWMgSGFzaFNldDxTY3JvbGxiYXJUaGVtZUNsaWVudCo+KiBnU2Ny
b2xsYmFyczsKIAogU2Nyb2xsYmFyVGhlbWUqIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgp
CiB7CkBAIC00NSwxNCArNDUsMTQgQEAgU2Nyb2xsYmFyVGhlbWVHdGs6On5TY3JvbGxiYXJUaGVt
ZUd0aygpCiB7CiB9CiAKLXZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnJlZ2lzdGVyU2Nyb2xsYmFy
KFNjcm9sbGJhciogc2Nyb2xsYmFyKQordm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cmVnaXN0ZXJT
Y3JvbGxiYXIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKIHsKICAgICBpZiAoIWdT
Y3JvbGxiYXJzKQotICAgICAgICBnU2Nyb2xsYmFycyA9IG5ldyBIYXNoU2V0PFNjcm9sbGJhcio+
OworICAgICAgICBnU2Nyb2xsYmFycyA9IG5ldyBIYXNoU2V0PFNjcm9sbGJhclRoZW1lQ2xpZW50
Kj47CiAgICAgZ1Njcm9sbGJhcnMtPmFkZChzY3JvbGxiYXIpOwogfQogCi12b2lkIFNjcm9sbGJh
clRoZW1lR3RrOjp1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQordm9p
ZCBTY3JvbGxiYXJUaGVtZUd0azo6dW5yZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXJUaGVtZUNs
aWVudCogc2Nyb2xsYmFyKQogewogICAgIGdTY3JvbGxiYXJzLT5yZW1vdmUoc2Nyb2xsYmFyKTsK
ICAgICBpZiAoZ1Njcm9sbGJhcnMtPmlzRW1wdHkoKSkgewpAQCAtNjksOSArNjksOSBAQCB2b2lk
IFNjcm9sbGJhclRoZW1lR3RrOjp1cGRhdGVTY3JvbGxiYXJzRnJhbWVUaGlja25lc3MoKQogICAg
IC8vIFVwZGF0ZSB0aGUgdGhpY2tuZXNzIG9mIGV2ZXJ5IGludGVyaW9yIGZyYW1lIHNjcm9sbGJh
ciB3aWRnZXQuIFRoZQogICAgIC8vIHBsYXRmb3JtLWluZGVwZW5kZW50IHNjcm9sbGJhciB0aGVt
IGNvZGUgaXNuJ3QgeWV0IHNtYXJ0IGVub3VnaCB0byBnZXQKICAgICAvLyB0aGlzIGluZm9ybWF0
aW9uIHdoZW4gaXQgcGFpbnRzLgotICAgIEhhc2hTZXQ8U2Nyb2xsYmFyKj46Oml0ZXJhdG9yIGVu
ZCA9IGdTY3JvbGxiYXJzLT5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8U2Nyb2xsYmFyKj46Oml0
ZXJhdG9yIGl0ID0gZ1Njcm9sbGJhcnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9ICgqaXQpOworICAgIEhhc2hTZXQ8U2Nyb2xsYmFy
VGhlbWVDbGllbnQqPjo6aXRlcmF0b3IgZW5kID0gZ1Njcm9sbGJhcnMtPmVuZCgpOworICAgIGZv
ciAoSGFzaFNldDxTY3JvbGxiYXJUaGVtZUNsaWVudCo+OjppdGVyYXRvciBpdCA9IGdTY3JvbGxi
YXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgU2Nyb2xsYmFyVGhlbWVD
bGllbnQqIHNjcm9sbGJhciA9ICgqaXQpOwogCiAgICAgICAgIC8vIFRvcC1sZXZlbCBzY3JvbGxi
YXIgaS5lLiBzY3JvbGxiYXJzIHdobyBoYXZlIGEgcGFyZW50IFNjcm9sbFZpZXcKICAgICAgICAg
Ly8gd2l0aCBubyBwYXJlbnQgYXJlIG5hdGl2ZSwgYW5kIHRodXMgZG8gbm90IG5lZWQgdG8gYmUg
cmVzaXplZC4KQEAgLTg2LDE0ICs4NiwxNCBAQCB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjp1cGRh
dGVTY3JvbGxiYXJzRnJhbWVUaGlja25lc3MoKQogICAgIH0KIH0KIAotYm9vbCBTY3JvbGxiYXJU
aGVtZUd0azo6aGFzVGh1bWIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCitib29sIFNjcm9sbGJhclRo
ZW1lR3RrOjpoYXNUaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQogewogICAg
IC8vIFRoaXMgbWV0aG9kIGlzIGp1c3QgY2FsbGVkIGFzIGEgcGFpbnQtdGltZSBvcHRpbWl6YXRp
b24gdG8gc2VlIGlmCiAgICAgLy8gcGFpbnRpbmcgdGhlIHRodW1iIGNhbiBiZSBza2lwcGVkLiAg
V2UgZG9uJ3QgaGF2ZSB0byBiZSBleGFjdCBoZXJlLgogICAgIHJldHVybiB0aHVtYkxlbmd0aChz
Y3JvbGxiYXIpID4gMDsKIH0KIAotSW50UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6YmFja0J1dHRv
blJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydCwgYm9vbCkKK0lu
dFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OmJhY2tCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xp
ZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydCwgYm9vbCkKIHsKICAgICBpZiAocGFy
dCA9PSBCYWNrQnV0dG9uRW5kUGFydCAmJiAhbV9oYXNCYWNrQnV0dG9uRW5kUGFydCkKICAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKQEAgLTExNCw3ICsxMTQsNyBAQCBJbnRSZWN0IFNjcm9sbGJh
clRoZW1lR3RrOjpiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFy
UGFydCBwYQogICAgIHJldHVybiBJbnRSZWN0KHgsIHNjcm9sbGJhci0+eSgpICsgc2Nyb2xsYmFy
LT5oZWlnaHQoKSAtIG1fdHJvdWdoQm9yZGVyV2lkdGggLSAoMiAqIHNpemUuaGVpZ2h0KCkpLCBz
aXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogfQogCi1JbnRSZWN0IFNjcm9sbGJhclRoZW1l
R3RrOjpmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFy
dCBwYXJ0LCBib29sKQorSW50UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6Zm9yd2FyZEJ1dHRvblJl
Y3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0LCBi
b29sKQogewogICAgIGlmIChwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQgJiYgIW1faGFz
Rm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKQEAgLTE0
MCw3ICsxNDAsNyBAQCBJbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjpmb3J3YXJkQnV0dG9uUmVj
dChTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydAogICAgIHJldHVybiBJbnRSZWN0
KHgsIHNjcm9sbGJhci0+eSgpICsgbV90cm91Z2hCb3JkZXJXaWR0aCArIHNpemUuaGVpZ2h0KCks
IHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CiB9CiAKLUludFJlY3QgU2Nyb2xsYmFyVGhl
bWVHdGs6OnRyYWNrUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgYm9vbCkKK0ludFJlY3QgU2Ny
b2xsYmFyVGhlbWVHdGs6OnRyYWNrUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFy
LCBib29sKQogewogICAgIC8vIFRoZSBwYWRkaW5nIGFsb25nIHRoZSB0aHVtYiBtb3ZlbWVudCBh
eGlzIGluY2x1ZGVzIHRoZSB0cm91Z2ggYm9yZGVyCiAgICAgLy8gcGx1cyB0aGUgc2l6ZSBvZiBz
dGVwcGVyIHNwYWNpbmcgKHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBzdGVwcGVyIGFuZApAQCAtMTgw
LDcgKzE4MCw3IEBAIEludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OnRyYWNrUmVjdChTY3JvbGxi
YXIqIHNjcm9sbGJhciwgYm9vbCkKICAgICAgICAgICAgICAgICAgICB0aGlja25lc3MsIHNjcm9s
bGJhci0+aGVpZ2h0KCkgLSAoMiAqIG1vdmVtZW50QXhpc1BhZGRpbmcpIC0gYnV0dG9uc1dpZHRo
KTsKIH0KIAotSW50UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6dGh1bWJSZWN0KFNjcm9sbGJhciog
c2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiB1bmNvbnN0cmFpbmVkVHJhY2tSZWN0KQorSW50UmVj
dCBTY3JvbGxiYXJUaGVtZUd0azo6dGh1bWJSZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3Jv
bGxiYXIsIGNvbnN0IEludFJlY3QmIHVuY29uc3RyYWluZWRUcmFja1JlY3QpCiB7CiAgICAgSW50
UmVjdCB0cmFja1JlY3QgPSBjb25zdHJhaW5UcmFja1JlY3RUb1RyYWNrUGllY2VzKHNjcm9sbGJh
ciwgdW5jb25zdHJhaW5lZFRyYWNrUmVjdCk7CiAgICAgaW50IHRodW1iUG9zID0gdGh1bWJQb3Np
dGlvbihzY3JvbGxiYXIpOwpAQCAtMTkxLDcgKzE5MSw3IEBAIEludFJlY3QgU2Nyb2xsYmFyVGhl
bWVHdGs6OnRodW1iUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgdW5j
b25zCiAgICAgcmV0dXJuIEludFJlY3QodHJhY2tSZWN0LngoKSArICh0cmFja1JlY3Qud2lkdGgo
KSAtIG1fdGh1bWJGYXRuZXNzKSAvIDIsIHRyYWNrUmVjdC55KCkgKyB0aHVtYlBvcywgbV90aHVt
YkZhdG5lc3MsIHRodW1iTGVuZ3RoKHNjcm9sbGJhcikpOwogfQogCi1ib29sIFNjcm9sbGJhclRo
ZW1lR3RrOjpwYWludChTY3JvbGxiYXIqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0KiBncmFw
aGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCitib29sIFNjcm9sbGJhclRo
ZW1lR3RrOjpwYWludChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBHcmFwaGljc0Nv
bnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKIHsKICAg
ICBpZiAoZ3JhcGhpY3NDb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTI2MCw3ICsyNjAsNyBAQCBib29sIFNjcm9sbGJhclRoZW1lR3RrOjpwYWlu
dChTY3JvbGxiYXIqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbgogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIFNjcm9sbGJhclRoZW1lR3RrOjpzaG91bGRDZW50ZXJP
blRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCitib29s
IFNjcm9sbGJhclRoZW1lR3RrOjpzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhclRoZW1lQ2xp
ZW50KiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKIHsKICAgICByZXR1cm4gKGV2
ZW50LnNoaWZ0S2V5KCkgJiYgZXZlbnQuYnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgfHwgKGV2ZW50
LmJ1dHRvbigpID09IE1pZGRsZUJ1dHRvbik7CiB9CkBAIC0yNzAsNyArMjcwLDcgQEAgaW50IFNj
cm9sbGJhclRoZW1lR3RrOjpzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUp
CiAgICAgcmV0dXJuIG1fdGh1bWJGYXRuZXNzICsgKG1fdHJvdWdoQm9yZGVyV2lkdGggKiAyKTsK
IH0KIAotSW50U2l6ZSBTY3JvbGxiYXJUaGVtZUd0azo6YnV0dG9uU2l6ZShTY3JvbGxiYXIqIHNj
cm9sbGJhcikKK0ludFNpemUgU2Nyb2xsYmFyVGhlbWVHdGs6OmJ1dHRvblNpemUoU2Nyb2xsYmFy
VGhlbWVDbGllbnQqIHNjcm9sbGJhcikKIHsKICAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlv
bigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQogICAgICAgICByZXR1cm4gSW50U2l6ZShtX3RodW1i
RmF0bmVzcywgbV9zdGVwcGVyU2l6ZSk7CkBAIC0yNzksNyArMjc5LDcgQEAgSW50U2l6ZSBTY3Jv
bGxiYXJUaGVtZUd0azo6YnV0dG9uU2l6ZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKICAgICByZXR1
cm4gSW50U2l6ZShtX3N0ZXBwZXJTaXplLCBtX3RodW1iRmF0bmVzcyk7CiB9CiAKLWludCBTY3Jv
bGxiYXJUaGVtZUd0azo6bWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhciogc2Nyb2xsYmFyKQor
aW50IFNjcm9sbGJhclRoZW1lR3RrOjptaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVD
bGllbnQqIHNjcm9sbGJhcikKIHsKICAgICByZXR1cm4gbV9taW5UaHVtYkxlbmd0aDsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmgKaW5kZXgg
NDVlMDkzYjFlYzk3ZDFhZmFhMjRjNTgzMzE1NjY5MzAyZTg1Y2Q2My4uZTczZGYyODU1MDFiNTgy
NmRjMDU5YjgzYmZjM2Q5YTQxNzBkNGJhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmgKQEAgLTM3LDI5ICszNywyOSBAQCBwdWJsaWM6CiAg
ICAgU2Nyb2xsYmFyVGhlbWVHdGsoKTsKICAgICB2aXJ0dWFsIH5TY3JvbGxiYXJUaGVtZUd0aygp
OwogCi0gICAgdmlydHVhbCBib29sIGhhc0J1dHRvbnMoU2Nyb2xsYmFyKikgeyByZXR1cm4gdHJ1
ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBoYXNUaHVtYihTY3JvbGxiYXIqKTsKLSAgICB2aXJ0dWFs
IEludFJlY3QgYmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyKiwgU2Nyb2xsYmFyUGFydCwgYm9vbCk7
Ci0gICAgdmlydHVhbCBJbnRSZWN0IGZvcndhcmRCdXR0b25SZWN0KFNjcm9sbGJhciosIFNjcm9s
bGJhclBhcnQsIGJvb2wpOwotICAgIHZpcnR1YWwgSW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFy
KiwgYm9vbCk7Ci0gICAgSW50UmVjdCB0aHVtYlJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVj
dCYgdW5jb25zdHJhaW5lZFRyYWNrUmVjdCk7Ci0gICAgYm9vbCBwYWludChTY3JvbGxiYXIqLCBH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKLSAgICB2b2lkIHBh
aW50U2Nyb2xsYmFyQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXIqKTsKLSAg
ICB2b2lkIHBhaW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhcios
IGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lkIHBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0Kiwg
U2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludEJ1dHRv
bihHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JiwgU2Nyb2xsYmFy
UGFydCk7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyKiwg
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CisgICAgdmlydHVhbCBib29sIGhhc0J1dHRvbnMo
U2Nyb2xsYmFyVGhlbWVDbGllbnQqKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29s
IGhhc1RodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CisgICAgdmlydHVhbCBJbnRSZWN0IGJh
Y2tCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCwgYm9vbCk7
CisgICAgdmlydHVhbCBJbnRSZWN0IGZvcndhcmRCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xp
ZW50KiwgU2Nyb2xsYmFyUGFydCwgYm9vbCk7CisgICAgdmlydHVhbCBJbnRSZWN0IHRyYWNrUmVj
dChTY3JvbGxiYXJUaGVtZUNsaWVudCosIGJvb2wpOworICAgIEludFJlY3QgdGh1bWJSZWN0KFNj
cm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgSW50UmVjdCYgdW5jb25zdHJhaW5lZFRyYWNrUmVj
dCk7CisgICAgYm9vbCBwYWludChTY3JvbGxiYXJUaGVtZUNsaWVudCosIEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOworICAgIHZvaWQgcGFpbnRTY3JvbGxiYXJC
YWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CisgICAg
dm9pZCBwYWludFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVt
ZUNsaWVudCosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHBhaW50VGh1bWIoR3JhcGhpY3ND
b250ZXh0KiwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmly
dHVhbCB2b2lkIHBhaW50QnV0dG9uKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRoZW1lQ2xp
ZW50KiwgY29uc3QgSW50UmVjdCYsIFNjcm9sbGJhclBhcnQpOworICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50Jik7CiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJh
ckNvbnRyb2xTaXplKTsKLSAgICB2aXJ0dWFsIEludFNpemUgYnV0dG9uU2l6ZShTY3JvbGxiYXIq
KTsKLSAgICB2aXJ0dWFsIGludCBtaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyKik7CisgICAg
dmlydHVhbCBJbnRTaXplIGJ1dHRvblNpemUoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKKyAgICB2
aXJ0dWFsIGludCBtaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKIAog
ICAgIC8vIFRPRE86IFRoZXNlIGFyZSB0aGUgZGVmYXVsdCBHVEsrIHZhbHVlcy4gQXQgc29tZSBw
b2ludCB3ZSBzaG91bGQgcHVsbCB0aGVzZSBmcm9tIHRoZSB0aGVtZSBpdHNlbGYuCiAgICAgdmly
dHVhbCBkb3VibGUgaW5pdGlhbEF1dG9zY3JvbGxUaW1lckRlbGF5KCkgeyByZXR1cm4gMC4yMDsg
fQogICAgIHZpcnR1YWwgZG91YmxlIGF1dG9zY3JvbGxUaW1lckRlbGF5KCkgeyByZXR1cm4gMC4w
MjsgfQogICAgIHZvaWQgdXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCk7CiAgICAgdm9pZCB1cGRhdGVT
Y3JvbGxiYXJzRnJhbWVUaGlja25lc3MoKTsKLSAgICB2b2lkIHJlZ2lzdGVyU2Nyb2xsYmFyKFNj
cm9sbGJhciopOwotICAgIHZvaWQgdW5yZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqKTsKKyAg
ICB2b2lkIHJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CisgICAgdm9p
ZCB1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CiAKIHByb3RlY3Rl
ZDoKICNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMi5jcHAKaW5kZXggNzI5YmQxMjRkZTJiMjE4NTQ5
OTdiMTk4NzYzMGNkZjg5YmVhOTEwMy4uODY2YmI4YTFkMmY3MWFhODY0ZWE1N2VkMzAzZjEzNjA3
MmMxYzQyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJh
clRoZW1lR3RrMi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJh
clRoZW1lR3RrMi5jcHAKQEAgLTY2LDEzICs2NiwxMyBAQCB2b2lkIFNjcm9sbGJhclRoZW1lR3Rr
Ojp1cGRhdGVUaGVtZVByb3BlcnRpZXMoKQogICAgIHVwZGF0ZVNjcm9sbGJhcnNGcmFtZVRoaWNr
bmVzcygpOwogfQogCi1zdGF0aWMgR3RrV2lkZ2V0KiBnZXRXaWRnZXRGb3JTY3JvbGxiYXIoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIpCitzdGF0aWMgR3RrV2lkZ2V0KiBnZXRXaWRnZXRGb3JTY3JvbGxi
YXIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKIHsKICAgICBSZW5kZXJUaGVtZUd0
ayogdGhlbWUgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZh
dWx0VGhlbWUoKS5nZXQoKSk7CiAgICAgcmV0dXJuIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9
PSBWZXJ0aWNhbFNjcm9sbGJhciA/IHRoZW1lLT5ndGtWU2Nyb2xsYmFyKCkgOiB0aGVtZS0+Z3Rr
SFNjcm9sbGJhcigpOwogfQogCi12b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFRyYWNrQmFj
a2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhciogc2Nyb2xsYmFyLCBj
b25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUcmFja0Jh
Y2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCog
c2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIC8vIFBhaW50IHRoZSB0cmFj
ayBiYWNrZ3JvdW5kLiBJZiB0aGUgdHJvdWdoLXVuZGVyLXN0ZXBwZXJzIHByb3BlcnR5IGlzIHRy
dWUsIHRoaXMKICAgICAvLyBzaG91bGQgYmUgdGhlIGZ1bGwgc2l6ZSBvZiB0aGUgc2Nyb2xsYmFy
LCBidXQgaWYgaXMgZmFsc2UsIGl0IHNob3VsZCBvbmx5IGJlIHRoZQpAQCAtODcsNyArODcsNyBA
QCB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIFNjcm9sbGJhcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R1RLX1NUQVRFX0FDVElWRSwgR1RLX1NIQURPV19JTiwgInRyb3VnaCIpOwogfQogCi12b2lkIFNj
cm9sbGJhclRoZW1lR3RrOjpwYWludFNjcm9sbGJhckJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6
OnBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9s
bGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCiB7CiAgICAgSW50UmVjdCBmdWxsU2Nyb2xsYmFy
UmVjdCA9IEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNjcm9sbGJhci0+eSgpLCBzY3JvbGxiYXIt
PndpZHRoKCksIHNjcm9sbGJhci0+aGVpZ2h0KCkpOwogCkBAIC05Niw3ICs5Niw3IEBAIHZvaWQg
U2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIFNjcm9sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RB
VEVfTk9STUFMLCBHVEtfU0hBRE9XX0lOLCAic2Nyb2xsZWRfd2luZG93Iik7CiB9CiAKLXZvaWQg
U2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBT
Y3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgU2Nyb2xsYmFy
VGhlbWVHdGs6OnBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJU
aGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEd0a1dp
ZGdldCogd2lkZ2V0ID0gZ2V0V2lkZ2V0Rm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiAgICAgZ2Jv
b2xlYW4gYWN0aXZhdGVTbGlkZXI7CkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBTY3JvbGxiYXJU
aGVtZUd0azo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhciog
c2Nyb2xsYmEKICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50U2xpZGVyKHNsaWRlclJlY3QsIHdp
ZGdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAic2xpZGVyIiwgb3JpZW50YXRpb24pOwogfQog
Ci12b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxi
YXJQYXJ0IHBhcnQpCit2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludEJ1dHRvbihHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0
IEludFJlY3QmIHJlY3QsIFNjcm9sbGJhclBhcnQgcGFydCkKIHsKICAgICAvLyBUaGUgYnV0dG9u
cyB3aWxsIGJlIGRpc2FibGVkIGlmIHRoZSB0aHVtYiBpcyBhcyB0aGUgYXBwcm9wcmlhdGUgZXh0
cmVtZS4KICAgICBHdGtTaGFkb3dUeXBlIHNoYWRvd1R5cGUgPSBHVEtfU0hBRE9XX09VVDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMy5jcHAK
aW5kZXggNGMzM2U2NmRiOGZmZWZjM2Y0MjM0NmNhZDBlZWU2N2VlNmNkNDVmZS4uOTc0OWM1NDNm
M2RkZjZiMzE1ZWZmYjk4YTc1OWZmNWIwMDJkNzBjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMy5jcHAKQEAgLTcyLDcgKzcyLDcgQEAg
c3RhdGljIHZvaWQgYXBwbHlTY3JvbGxiYXJTdHlsZUNvbnRleHRDbGFzc2VzKEd0a1N0eWxlQ29u
dGV4dCogY29udGV4dCwgU2Nyb2xsYmEKICAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3Mo
Y29udGV4dCwgb3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIgPyAgR1RLX1NUWUxFX0NM
QVNTX1ZFUlRJQ0FMIDogR1RLX1NUWUxFX0NMQVNTX0hPUklaT05UQUwpOwogfQogCi12b2lkIFNj
cm9sbGJhclRoZW1lR3RrOjpwYWludFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBT
Y3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewogICAgIC8vIFBhaW50IHRoZSB0cmFjayBiYWNrZ3JvdW5kLiBJZiB0aGUgdHJvdWdo
LXVuZGVyLXN0ZXBwZXJzIHByb3BlcnR5IGlzIHRydWUsIHRoaXMKICAgICAvLyBzaG91bGQgYmUg
dGhlIGZ1bGwgc2l6ZSBvZiB0aGUgc2Nyb2xsYmFyLCBidXQgaWYgaXMgZmFsc2UsIGl0IHNob3Vs
ZCBvbmx5IGJlIHRoZQpAQCAtOTQsNyArOTQsNyBAQCB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpw
YWludFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhcgog
ICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUobV9jb250ZXh0KTsKIH0KIAotdm9pZCBTY3Jv
bGxiYXJUaGVtZUd0azo6cGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpw
YWludFNjcm9sbGJhckJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxi
YXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQogewogICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUo
bV9jb250ZXh0KTsKIApAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6
OnBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9s
CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShtX2NvbnRleHQpOwogfQogCi12b2lkIFNj
cm9sbGJhclRoZW1lR3RrOjpwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Ny
b2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIFNjcm9sbGJhclRo
ZW1lR3RrOjpwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyVGhl
bWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBndGtfc3R5
bGVfY29udGV4dF9zYXZlKG1fY29udGV4dCk7CiAKQEAgLTEyNiw3ICsxMjYsNyBAQCB2b2lkIFNj
cm9sbGJhclRoZW1lR3RrOjpwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Ny
b2xsYmFyKiBzY3JvbGxiYQogICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUobV9jb250ZXh0
KTsKIH0KIAotdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRCdXR0b24oR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCwg
U2Nyb2xsYmFyUGFydCBwYXJ0KQordm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRCdXR0b24o
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFy
LCBjb25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxiYXJQYXJ0IHBhcnQpCiB7CiAgICAgZ3RrX3N0
eWxlX2NvbnRleHRfc2F2ZShtX2NvbnRleHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5oCmluZGV4IDEzZDQ0YzIzZDNiMzM2MjM2ZmI2NDA5
OGZhODcwYWVjOGM3YjU2NTguLjk2MjlmNjA3NGY2MmNhYWI2NWE5MzlmNDc1MDcxOGE0MTI0ZGNm
OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVt
ZU1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1h
Yy5oCkBAIC0zOSw0NiArMzksNDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBwcmVmZXJlbmNlc0No
YW5nZWQoKTsKIAotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVFbmFibGVkU3RhdGUoU2Nyb2xsYmFy
Kik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUVuYWJsZWRTdGF0ZShTY3JvbGxiYXJUaGVtZUNs
aWVudCopOwogCiAjaWYgIVBMQVRGT1JNKENIUk9NSVVNKQotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dChTY3JvbGxiYXIqLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRh
bWFnZVJlY3QpOworICAgIHZpcnR1YWwgYm9vbCBwYWludChTY3JvbGxiYXJUaGVtZUNsaWVudCos
IEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CiAj
ZW5kaWYKIAogICAgIHZpcnR1YWwgaW50IHNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250
cm9sU2l6ZSA9IFJlZ3VsYXJTY3JvbGxiYXIpOwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0NvbnRyb2xUaW50cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJv
b2wgdXNlc092ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVNjcm9sbGJhck92ZXJsYXlTdHlsZShTY3JvbGxiYXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlU2Nyb2xsYmFyT3ZlcmxheVN0eWxlKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CiAKICAgICB2
aXJ0dWFsIGRvdWJsZSBpbml0aWFsQXV0b3Njcm9sbFRpbWVyRGVsYXkoKTsKICAgICB2aXJ0dWFs
IGRvdWJsZSBhdXRvc2Nyb2xsVGltZXJEZWxheSgpOwogCiAgICAgdmlydHVhbCBTY3JvbGxiYXJC
dXR0b25zUGxhY2VtZW50IGJ1dHRvbnNQbGFjZW1lbnQoKSBjb25zdDsKIAotICAgIHZpcnR1YWwg
dm9pZCByZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgdW5y
ZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJT
Y3JvbGxiYXIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdp
c3RlclNjcm9sbGJhcihTY3JvbGxiYXJUaGVtZUNsaWVudCopOwogCi0gICAgdm9pZCBzZXROZXdQ
YWludGVyRm9yU2Nyb2xsYmFyKFNjcm9sbGJhciosIFNjcm9sbGJhclBhaW50ZXIpOwotICAgIFNj
cm9sbGJhclBhaW50ZXIgcGFpbnRlckZvclNjcm9sbGJhcihTY3JvbGxiYXIqKTsKKyAgICB2b2lk
IHNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBTY3JvbGxi
YXJQYWludGVyKTsKKyAgICBTY3JvbGxiYXJQYWludGVyIHBhaW50ZXJGb3JTY3JvbGxiYXIoU2Ny
b2xsYmFyVGhlbWVDbGllbnQqKTsKIAogICAgIHN0YXRpYyBib29sIGlzQ3VycmVudGx5RHJhd2lu
Z0ludG9MYXllcigpOwogICAgIHN0YXRpYyB2b2lkIHNldElzQ3VycmVudGx5RHJhd2luZ0ludG9M
YXllcihib29sKTsKIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgYm9vbCBoYXNCdXR0b25zKFNj
cm9sbGJhciopOwotICAgIHZpcnR1YWwgYm9vbCBoYXNUaHVtYihTY3JvbGxiYXIqKTsKKyAgICB2
aXJ0dWFsIGJvb2wgaGFzQnV0dG9ucyhTY3JvbGxiYXJUaGVtZUNsaWVudCopOworICAgIHZpcnR1
YWwgYm9vbCBoYXNUaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCopOwogCi0gICAgdmlydHVhbCBJ
bnRSZWN0IGJhY2tCdXR0b25SZWN0KFNjcm9sbGJhciosIFNjcm9sbGJhclBhcnQsIGJvb2wgcGFp
bnRpbmcgPSBmYWxzZSk7Ci0gICAgdmlydHVhbCBJbnRSZWN0IGZvcndhcmRCdXR0b25SZWN0KFNj
cm9sbGJhciosIFNjcm9sbGJhclBhcnQsIGJvb2wgcGFpbnRpbmcgPSBmYWxzZSk7Ci0gICAgdmly
dHVhbCBJbnRSZWN0IHRyYWNrUmVjdChTY3JvbGxiYXIqLCBib29sIHBhaW50aW5nID0gZmFsc2Up
OworICAgIHZpcnR1YWwgSW50UmVjdCBiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVu
dCosIFNjcm9sbGJhclBhcnQsIGJvb2wgcGFpbnRpbmcgPSBmYWxzZSk7CisgICAgdmlydHVhbCBJ
bnRSZWN0IGZvcndhcmRCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFy
UGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsKKyAgICB2aXJ0dWFsIEludFJlY3QgdHJhY2tS
ZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsKIAogICAg
IHZpcnR1YWwgaW50IG1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSB7IHJldHVybiA0MDsgfQogCi0g
ICAgdmlydHVhbCBpbnQgbWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhciopOworICAgIHZpcnR1
YWwgaW50IG1pbmltdW1UaHVtYkxlbmd0aChTY3JvbGxiYXJUaGVtZUNsaWVudCopOwogICAgIAot
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYpOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGREcmFnRG9jdW1lbnRJ
bnN0ZWFkT2ZUaHVtYihTY3JvbGxiYXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCos
IGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGREcmFn
RG9jdW1lbnRJbnN0ZWFkT2ZUaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRm
b3JtTW91c2VFdmVudCYpOwogICAgIGludCBzY3JvbGxiYXJQYXJ0VG9ISVByZXNzZWRTdGF0ZShT
Y3JvbGxiYXJQYXJ0KTsKIAogI2lmICFQTEFURk9STShDSFJPTUlVTSkgJiYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0KaW5kZXggY2M3NDgyNDU3
Nzg1MjkzZDFkNTc4Yjc4MmQ4MWMyN2ZhYmIyNTkyNC4uM2I5MDIxYWRlYTU1ZGM4YWZjZDY2YmRk
ZjU1NzYxMjQwOWQ5OTdhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1Njcm9sbGJhclRoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9T
Y3JvbGxiYXJUaGVtZU1hYy5tbQpAQCAtNTAsNyArNTAsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIEhhc2hNYXA8U2Nyb2xsYmFy
KiwgUmV0YWluUHRyPFNjcm9sbGJhclBhaW50ZXI+ID4gU2Nyb2xsYmFyUGFpbnRlck1hcDsKK3R5
cGVkZWYgSGFzaE1hcDxTY3JvbGxiYXJUaGVtZUNsaWVudCosIFJldGFpblB0cjxTY3JvbGxiYXJQ
YWludGVyPiA+IFNjcm9sbGJhclBhaW50ZXJNYXA7CiAKIHN0YXRpYyBTY3JvbGxiYXJQYWludGVy
TWFwKiBzY3JvbGxiYXJNYXAoKQogewpAQCAtMTYyLDcgKzE2Miw3IEBAIHN0YXRpYyB2b2lkIHVw
ZGF0ZUFycm93UGxhY2VtZW50KCkKICAgICB9CiB9CiAKLXZvaWQgU2Nyb2xsYmFyVGhlbWVNYWM6
OnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQordm9pZCBTY3JvbGxiYXJU
aGVtZU1hYzo6cmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJh
cikKIHsKICAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKICAgICAg
ICAgYm9vbCBpc0hvcml6b250YWwgPSBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpv
bnRhbFNjcm9sbGJhcjsKQEAgLTE3NSwxOSArMTc1LDE5IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVN
YWM6OnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogICAgIH0KIH0KIAot
dm9pZCBTY3JvbGxiYXJUaGVtZU1hYzo6dW5yZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqIHNj
cm9sbGJhcikKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVNYWM6OnVucmVnaXN0ZXJTY3JvbGxiYXIoU2Ny
b2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKIHsKICAgICBzY3JvbGxiYXJNYXAoKS0+cmVt
b3ZlKHNjcm9sbGJhcik7CiB9CiAKLXZvaWQgU2Nyb2xsYmFyVGhlbWVNYWM6OnNldE5ld1BhaW50
ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhaW50ZXIgbmV3
UGFpbnRlcikKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVNYWM6OnNldE5ld1BhaW50ZXJGb3JTY3JvbGxi
YXIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFpbnRlciBuZXdQ
YWludGVyKQogewogICAgIHNjcm9sbGJhck1hcCgpLT5zZXQoc2Nyb2xsYmFyLCBuZXdQYWludGVy
KTsKICAgICB1cGRhdGVFbmFibGVkU3RhdGUoc2Nyb2xsYmFyKTsKICAgICB1cGRhdGVTY3JvbGxi
YXJPdmVybGF5U3R5bGUoc2Nyb2xsYmFyKTsKIH0KIAotU2Nyb2xsYmFyUGFpbnRlciBTY3JvbGxi
YXJUaGVtZU1hYzo6cGFpbnRlckZvclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK1Nj
cm9sbGJhclBhaW50ZXIgU2Nyb2xsYmFyVGhlbWVNYWM6OnBhaW50ZXJGb3JTY3JvbGxiYXIoU2Ny
b2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKIHsKICAgICByZXR1cm4gc2Nyb2xsYmFyTWFw
KCktPmdldChzY3JvbGxiYXIpLmdldCgpOwogfQpAQCAtMjQ4LDEwICsyNDgsMTAgQEAgYm9vbCBT
Y3JvbGxiYXJUaGVtZU1hYzo6dXNlc092ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3QKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFNjcm9sbGJhclRoZW1lTWFjOjp1cGRhdGVTY3JvbGxi
YXJPdmVybGF5U3R5bGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit2b2lkIFNjcm9sbGJhclRoZW1l
TWFjOjp1cGRhdGVTY3JvbGxiYXJPdmVybGF5U3R5bGUoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNj
cm9sbGJhcikKIHsKICAgICBTY3JvbGxiYXJQYWludGVyIHBhaW50ZXIgPSBwYWludGVyRm9yU2Ny
b2xsYmFyKHNjcm9sbGJhcik7Ci0gICAgc3dpdGNoIChzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVh
KCktPnNjcm9sbGJhck92ZXJsYXlTdHlsZSgpKSB7CisgICAgc3dpdGNoIChzY3JvbGxiYXItPnNj
cm9sbGJhck92ZXJsYXlTdHlsZSgpKSB7CiAgICAgY2FzZSBTY3JvbGxiYXJPdmVybGF5U3R5bGVE
ZWZhdWx0OgogICAgICAgICBbcGFpbnRlciBzZXRLbm9iU3R5bGU6TlNTY3JvbGxlcktub2JTdHls
ZURlZmF1bHRdOwogICAgICAgICBicmVhazsKQEAgLTI3OSw3ICsyNzksNyBAQCBTY3JvbGxiYXJC
dXR0b25zUGxhY2VtZW50IFNjcm9sbGJhclRoZW1lTWFjOjpidXR0b25zUGxhY2VtZW50KCkgY29u
c3QKICAgICByZXR1cm4gZ0J1dHRvblBsYWNlbWVudDsKIH0KIAotYm9vbCBTY3JvbGxiYXJUaGVt
ZU1hYzo6aGFzQnV0dG9ucyhTY3JvbGxiYXIqIHNjcm9sbGJhcikKK2Jvb2wgU2Nyb2xsYmFyVGhl
bWVNYWM6Omhhc0J1dHRvbnMoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKIHsKICAg
ICByZXR1cm4gc2Nyb2xsYmFyLT5lbmFibGVkKCkgJiYgYnV0dG9uc1BsYWNlbWVudCgpICE9IFNj
cm9sbGJhckJ1dHRvbnNOb25lCiAgICAgICAgICAgICAgJiYgKHNjcm9sbGJhci0+b3JpZW50YXRp
b24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyCkBAIC0yODcsNyArMjg3LDcgQEAgYm9vbCBTY3Jv
bGxiYXJUaGVtZU1hYzo6aGFzQnV0dG9ucyhTY3JvbGxiYXIqIHNjcm9sbGJhcikKICAgICAgICAg
ICAgICA6IHNjcm9sbGJhci0+aGVpZ2h0KCkpID49IDIgKiAoY1JlYWxCdXR0b25MZW5ndGhbc2Ny
b2xsYmFyLT5jb250cm9sU2l6ZSgpXSAtIGNCdXR0b25IaXRJbnNldFtzY3JvbGxiYXItPmNvbnRy
b2xTaXplKCldKTsKIH0KIAotYm9vbCBTY3JvbGxiYXJUaGVtZU1hYzo6aGFzVGh1bWIoU2Nyb2xs
YmFyKiBzY3JvbGxiYXIpCitib29sIFNjcm9sbGJhclRoZW1lTWFjOjpoYXNUaHVtYihTY3JvbGxi
YXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQogewogICAgIGludCBtaW5MZW5ndGhGb3JUaHVtYjsK
ICAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKQEAgLTMxOSw3ICsz
MTksNyBAQCBzdGF0aWMgSW50UmVjdCBidXR0b25SZXBhaW50UmVjdChjb25zdCBJbnRSZWN0JiBi
dXR0b25SZWN0LCBTY3JvbGxiYXJPcmllbnRhdGlvbgogICAgIHJldHVybiBwYWludFJlY3Q7CiB9
CiAKLUludFJlY3QgU2Nyb2xsYmFyVGhlbWVNYWM6OmJhY2tCdXR0b25SZWN0KFNjcm9sbGJhciog
c2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wgcGFpbnRpbmcpCitJbnRSZWN0IFNj
cm9sbGJhclRoZW1lTWFjOjpiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Ny
b2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wgcGFpbnRpbmcpCiB7CiAgICAgSW50UmVj
dCByZXN1bHQ7CiAgICAgCkBAIC0zNTMsNyArMzUzLDcgQEAgSW50UmVjdCBTY3JvbGxiYXJUaGVt
ZU1hYzo6YmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQg
cGEKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1JbnRSZWN0IFNjcm9sbGJhclRoZW1lTWFjOjpm
b3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0
LCBib29sIHBhaW50aW5nKQorSW50UmVjdCBTY3JvbGxiYXJUaGVtZU1hYzo6Zm9yd2FyZEJ1dHRv
blJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0
LCBib29sIHBhaW50aW5nKQogewogICAgIEludFJlY3QgcmVzdWx0OwogICAgIApAQCAtMzkzLDcg
KzM5Myw3IEBAIEludFJlY3QgU2Nyb2xsYmFyVGhlbWVNYWM6OmZvcndhcmRCdXR0b25SZWN0KFNj
cm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotSW50UmVjdCBTY3JvbGxiYXJUaGVtZU1hYzo6dHJhY2tSZWN0KFNjcm9sbGJhciogc2Nyb2xs
YmFyLCBib29sIHBhaW50aW5nKQorSW50UmVjdCBTY3JvbGxiYXJUaGVtZU1hYzo6dHJhY2tSZWN0
KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGJvb2wgcGFpbnRpbmcpCiB7CiAgICAg
aWYgKHBhaW50aW5nIHx8ICFoYXNCdXR0b25zKHNjcm9sbGJhcikpCiAgICAgICAgIHJldHVybiBz
Y3JvbGxiYXItPmZyYW1lUmVjdCgpOwpAQCAtNDMwLDcgKzQzMCw3IEBAIEludFJlY3QgU2Nyb2xs
YmFyVGhlbWVNYWM6OnRyYWNrUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgYm9vbCBwYWludGlu
ZykKICAgICByZXR1cm4gSW50UmVjdChzY3JvbGxiYXItPngoKSwgc2Nyb2xsYmFyLT55KCkgKyBz
dGFydFdpZHRoLCB0aGlja25lc3MsIHNjcm9sbGJhci0+aGVpZ2h0KCkgLSB0b3RhbFdpZHRoKTsK
IH0KIAotaW50IFNjcm9sbGJhclRoZW1lTWFjOjptaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFy
KiBzY3JvbGxiYXIpCitpbnQgU2Nyb2xsYmFyVGhlbWVNYWM6Om1pbmltdW1UaHVtYkxlbmd0aChT
Y3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQogewogICAgIGlmIChpc1Njcm9sbGJhck92
ZXJsYXlBUElBdmFpbGFibGUoKSkKICAgICAgICAgcmV0dXJuIFtzY3JvbGxiYXJNYXAoKS0+Z2V0
KHNjcm9sbGJhcikuZ2V0KCkga25vYk1pbkxlbmd0aF07CkBAIC00MzgsNyArNDM4LDcgQEAgaW50
IFNjcm9sbGJhclRoZW1lTWFjOjptaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyKiBzY3JvbGxi
YXIpCiAgICAgICAgIHJldHVybiBjVGh1bWJNaW5MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6
ZSgpXTsKIH0KIAotYm9vbCBTY3JvbGxiYXJUaGVtZU1hYzo6c2hvdWxkQ2VudGVyT25UaHVtYihT
Y3JvbGxiYXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKK2Jvb2wgU2Nyb2xsYmFy
VGhlbWVNYWM6OnNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKIHsKICAgICBpZiAoZXZ0LmJ1dHRvbigpICE9IExl
ZnRCdXR0b24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ0Nyw3ICs0NDcsNyBAQCBib29s
IFNjcm9sbGJhclRoZW1lTWFjOjpzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhciosIGNvbnN0
IFBsYXRmb3JtTW91c2VFdmVudAogICAgIHJldHVybiBldnQuYWx0S2V5KCk7CiB9CiAKLWJvb2wg
U2Nyb2xsYmFyVGhlbWVNYWM6OnNob3VsZERyYWdEb2N1bWVudEluc3RlYWRPZlRodW1iKFNjcm9s
bGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCitib29sIFNjcm9sbGJhclRo
ZW1lTWFjOjpzaG91bGREcmFnRG9jdW1lbnRJbnN0ZWFkT2ZUaHVtYihTY3JvbGxiYXJUaGVtZUNs
aWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCiB7CiAgICAgcmV0dXJuIGV2
ZW50LmFsdEtleSgpOwogfQpAQCAtNDcwLDcgKzQ3MCw3IEBAIGludCBTY3JvbGxiYXJUaGVtZU1h
Yzo6c2Nyb2xsYmFyUGFydFRvSElQcmVzc2VkU3RhdGUoU2Nyb2xsYmFyUGFydCBwYXJ0KQogICAg
IH0KIH0KIAotdm9pZCBTY3JvbGxiYXJUaGVtZU1hYzo6dXBkYXRlRW5hYmxlZFN0YXRlKFNjcm9s
bGJhciogc2Nyb2xsYmFyKQordm9pZCBTY3JvbGxiYXJUaGVtZU1hYzo6dXBkYXRlRW5hYmxlZFN0
YXRlKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCiB7CiAgICAgaWYgKGlzU2Nyb2xs
YmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQogICAgICAgICBbc2Nyb2xsYmFyTWFwKCktPmdldChz
Y3JvbGxiYXIpLmdldCgpIHNldEVuYWJsZWQ6c2Nyb2xsYmFyLT5lbmFibGVkKCldOwpAQCAtNDk5
LDcgKzQ5OSw3IEBAIHN0YXRpYyB2b2lkIHNjcm9sbGJhclBhaW50ZXJQYWludChTY3JvbGxiYXJQ
YWludGVyIHNjcm9sbGJhclBhaW50ZXIsIGJvb2wgZW5hYmxlCiB9CiAKICNpZiAhUExBVEZPUk0o
Q0hST01JVU0pCi1ib29sIFNjcm9sbGJhclRoZW1lTWFjOjpwYWludChTY3JvbGxiYXIqIHNjcm9s
bGJhciwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0
KQorYm9vbCBTY3JvbGxiYXJUaGVtZU1hYzo6cGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNj
cm9sbGJhciwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VS
ZWN0KQogewogICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgewogICAg
ICAgICBmbG9hdCB2YWx1ZSA9IDA7CkBAIC01NzAsNyArNTcwLDcgQEAgYm9vbCBTY3JvbGxiYXJU
aGVtZU1hYzo6cGFpbnQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY28KICAgICBpZiAoIXNjcm9sbGJhci0+ZW5hYmxlZCgpKQogICAgICAgICB0cmFja0lu
Zm8uZW5hYmxlU3RhdGUgPSBrVGhlbWVUcmFja0Rpc2FibGVkOwogICAgIGVsc2UKLSAgICAgICAg
dHJhY2tJbmZvLmVuYWJsZVN0YXRlID0gc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5pc0Fj
dGl2ZSgpID8ga1RoZW1lVHJhY2tBY3RpdmUgOiBrVGhlbWVUcmFja0luYWN0aXZlOworICAgICAg
ICB0cmFja0luZm8uZW5hYmxlU3RhdGUgPSBzY3JvbGxiYXItPmlzU2Nyb2xsYWJsZUFyZWFBY3Rp
dmUoKSA/IGtUaGVtZVRyYWNrQWN0aXZlIDoga1RoZW1lVHJhY2tJbmFjdGl2ZTsKIAogICAgIGlm
IChoYXNUaHVtYihzY3JvbGxiYXIpKQogICAgICAgICB0cmFja0luZm8uYXR0cmlidXRlcyB8PSBr
VGhlbWVUcmFja1Nob3dUaHVtYjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21vY2svU2Nyb2xsYmFyVGhlbWVNb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21v
Y2svU2Nyb2xsYmFyVGhlbWVNb2NrLmNwcAppbmRleCA1ZDJiYzNlYzA4OTc4ZTAzNzM3ZmJhNzM5
NWI4YjhjZTc0NjBkNDY0Li42ZGU5MWNjYjgxOTIxMDQwYzA4NDc4YzFlZTU2NzdkZGU0Mzc0OTVk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbGJhclRoZW1l
TW9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9TY3JvbGxiYXJUaGVt
ZU1vY2suY3BwCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGlj
IGludCBjU2Nyb2xsYmFyVGhpY2tuZXNzW10gPSB7IDE1LCAxMSB9OwogCi1JbnRSZWN0IFNjcm9s
bGJhclRoZW1lTW9jazo6dHJhY2tSZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBib29sKQorSW50
UmVjdCBTY3JvbGxiYXJUaGVtZU1vY2s6OnRyYWNrUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCog
c2Nyb2xsYmFyLCBib29sKQogewogICAgIHJldHVybiBzY3JvbGxiYXItPmZyYW1lUmVjdCgpOwog
fQpAQCAtNDIsMTIgKzQyLDEyIEBAIGludCBTY3JvbGxiYXJUaGVtZU1vY2s6OnNjcm9sbGJhclRo
aWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKICAgICByZXR1cm4gY1Nj
cm9sbGJhclRoaWNrbmVzc1tjb250cm9sU2l6ZV07CiB9CiAKLXZvaWQgU2Nyb2xsYmFyVGhlbWVN
b2NrOjpwYWludFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9s
bGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiB0cmFja1JlY3QpCit2b2lkIFNjcm9sbGJh
clRoZW1lTW9jazo6cGFpbnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiB0cmFja1Jl
Y3QpCiB7CiAgICAgY29udGV4dC0+ZmlsbFJlY3QodHJhY2tSZWN0LCBzY3JvbGxiYXItPmVuYWJs
ZWQoKSA/IENvbG9yOjpsaWdodEdyYXkgOiBDb2xvcigweEZGRTBFMEUwKSwgQ29sb3JTcGFjZURl
dmljZVJHQik7CiB9CiAKLXZvaWQgU2Nyb2xsYmFyVGhlbWVNb2NrOjpwYWludFRodW1iKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3Qm
IHRodW1iUmVjdCkKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVNb2NrOjpwYWludFRodW1iKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3Qg
SW50UmVjdCYgdGh1bWJSZWN0KQogewogICAgIGlmIChzY3JvbGxiYXItPmVuYWJsZWQoKSkKICAg
ICAgICAgY29udGV4dC0+ZmlsbFJlY3QodGh1bWJSZWN0LCBDb2xvcjo6ZGFya0dyYXksIENvbG9y
U3BhY2VEZXZpY2VSR0IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9j
ay9TY3JvbGxiYXJUaGVtZU1vY2suaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Ny
b2xsYmFyVGhlbWVNb2NrLmgKaW5kZXggZTI1NDg0MjJhMjhmNWU3MjNlNDM1M2Y4ZjQ1NzY1MjUz
Y2I2ODViYi4uNjMzMzg0MWFiNzk2YjlkYzIzM2YzZjYzZWI4MDBhYmZhN2IwYmIwNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9TY3JvbGxiYXJUaGVtZU1vY2suaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbGJhclRoZW1lTW9jay5oCkBA
IC0zNiwxNSArMzYsMTUgQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50IHNjcm9sbGJhclRoaWNr
bmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSA9IFJlZ3VsYXJTY3JvbGxiYXIpOwogCiBwcm90ZWN0
ZWQ6Ci0gICAgdmlydHVhbCBib29sIGhhc0J1dHRvbnMoU2Nyb2xsYmFyKikgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFzVGh1bWIoU2Nyb2xsYmFyKikgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBoYXNCdXR0b25zKFNjcm9sbGJhclRoZW1lQ2xpZW50Kikg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFzVGh1bWIoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqKSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIEludFJlY3QgYmFja0J1
dHRvblJlY3QoU2Nyb2xsYmFyKiwgU2Nyb2xsYmFyUGFydCwgYm9vbCAvKnBhaW50aW5nKi8gPSBm
YWxzZSkgeyByZXR1cm4gSW50UmVjdCgpOyB9Ci0gICAgdmlydHVhbCBJbnRSZWN0IGZvcndhcmRC
dXR0b25SZWN0KFNjcm9sbGJhciosIFNjcm9sbGJhclBhcnQsIGJvb2wgLypwYWludGluZyovID0g
ZmFsc2UpIHsgcmV0dXJuIEludFJlY3QoKTsgfQotICAgIHZpcnR1YWwgSW50UmVjdCB0cmFja1Jl
Y3QoU2Nyb2xsYmFyKiwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsKKyAgICB2aXJ0dWFsIEludFJl
Y3QgYmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBTY3JvbGxiYXJQYXJ0LCBi
b29sIC8qcGFpbnRpbmcqLyA9IGZhbHNlKSB7IHJldHVybiBJbnRSZWN0KCk7IH0KKyAgICB2aXJ0
dWFsIEludFJlY3QgZm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBTY3Jv
bGxiYXJQYXJ0LCBib29sIC8qcGFpbnRpbmcqLyA9IGZhbHNlKSB7IHJldHVybiBJbnRSZWN0KCk7
IH0KKyAgICB2aXJ0dWFsIEludFJlY3QgdHJhY2tSZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50Kiwg
Ym9vbCBwYWludGluZyA9IGZhbHNlKTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUcmFj
a0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYp
OwotICAgIHZpcnR1YWwgdm9pZCBwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJh
ciosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUcmFja0JhY2tncm91
bmQoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0
Jik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xs
YmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgCiBwcml2YXRlOgogICAgIHZp
cnR1YWwgYm9vbCBpc01vY2tUaGVtZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5jcHAKaW5kZXggZTMyNDNl
Y2ZhODk3OWI5YTY4MWUxNTliZGVlOWE5YjE1OWM2NzQzYy4uZDRiNThiMWIwZTVhZjE3MGY5NmVm
ODM2NGI2OWI0ODRhMzYyMjI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvU2Nyb2xsYmFyVGhlbWVRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQv
U2Nyb2xsYmFyVGhlbWVRdC5jcHAKQEAgLTExMiw3ICsxMTIsNyBAQCBzdGF0aWMgU2Nyb2xsYmFy
UGFydCBzY3JvbGxiYXJQYXJ0KGNvbnN0IFFTdHlsZTo6U3ViQ29udHJvbCYgc2MpCiAgICAgcmV0
dXJuIE5vUGFydDsKIH0KIAotc3RhdGljIFFTdHlsZU9wdGlvblNsaWRlciogc3R5bGVPcHRpb25T
bGlkZXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFFXaWRnZXQqIHdpZGdldCA9IDApCitzdGF0aWMg
UVN0eWxlT3B0aW9uU2xpZGVyKiBzdHlsZU9wdGlvblNsaWRlcihTY3JvbGxiYXJUaGVtZUNsaWVu
dCogc2Nyb2xsYmFyLCBRV2lkZ2V0KiB3aWRnZXQgPSAwKQogewogICAgIHN0YXRpYyBRU3R5bGVP
cHRpb25TbGlkZXIgb3B0OwogICAgIGlmICh3aWRnZXQpCkBAIC0xNTUsNyArMTU1LDcgQEAgc3Rh
dGljIFFTdHlsZU9wdGlvblNsaWRlciogc3R5bGVPcHRpb25TbGlkZXIoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIsIFFXaWRnZXQqIHdpZGcKICAgICByZXR1cm4gJm9wdDsKIH0KIAotYm9vbCBTY3JvbGxi
YXJUaGVtZVF0OjpwYWludChTY3JvbGxiYXIqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0KiBn
cmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCitib29sIFNjcm9sbGJh
clRoZW1lUXQ6OnBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIEdyYXBoaWNz
Q29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQogewog
ICAgIGlmIChncmFwaGljc0NvbnRleHQtPnVwZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKICAgICAg
ICBzY3JvbGxiYXItPmludmFsaWRhdGVSZWN0KGRhbWFnZVJlY3QpOwpAQCAtMTkzLDcgKzE5Myw3
IEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVRdDo6cGFpbnQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIEdy
YXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVNjcm9s
bGJhclBhcnQgU2Nyb2xsYmFyVGhlbWVRdDo6aGl0VGVzdChTY3JvbGxiYXIqIHNjcm9sbGJhciwg
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQpCitTY3JvbGxiYXJQYXJ0IFNjcm9sbGJhclRo
ZW1lUXQ6OmhpdFRlc3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JiBldnQpCiB7CiAgICAgUVN0eWxlT3B0aW9uU2xpZGVyKiBvcHQgPSBz
dHlsZU9wdGlvblNsaWRlcihzY3JvbGxiYXIpOwogICAgIGNvbnN0IFFQb2ludCBwb3MgPSBzY3Jv
bGxiYXItPmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9zaXRpb24oKSk7CkBAIC0y
MDIsMTMgKzIwMiwxMyBAQCBTY3JvbGxiYXJQYXJ0IFNjcm9sbGJhclRoZW1lUXQ6OmhpdFRlc3Qo
U2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IFBsYXRmb3JtTW91cwogICAgIHJldHVybiBzY3Jv
bGxiYXJQYXJ0KHNjKTsKIH0KIAotYm9vbCBTY3JvbGxiYXJUaGVtZVF0OjpzaG91bGRDZW50ZXJP
blRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQorYm9vbCBT
Y3JvbGxiYXJUaGVtZVF0OjpzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50
KiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQpCiB7CiAgICAgLy8gTWlkZGxlIGNsaWNr
IGNlbnRlcnMgc2xpZGVyIHRodW1iIChpZiBzdXBwb3J0ZWQpLgogICAgIHJldHVybiBzdHlsZSgp
LT5zdHlsZUhpbnQoUVN0eWxlOjpTSF9TY3JvbGxCYXJfTWlkZGxlQ2xpY2tBYnNvbHV0ZVBvc2l0
aW9uKSAmJiBldnQuYnV0dG9uKCkgPT0gTWlkZGxlQnV0dG9uOwogfQogCi12b2lkIFNjcm9sbGJh
clRoZW1lUXQ6OmludmFsaWRhdGVQYXJ0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQ
YXJ0KQordm9pZCBTY3JvbGxiYXJUaGVtZVF0OjppbnZhbGlkYXRlUGFydChTY3JvbGxiYXJUaGVt
ZUNsaWVudCogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0KQogewogICAgIC8vIEZJWE1FOiBEbyBt
b3JlIHByZWNpc2UgaW52YWxpZGF0aW9uLgogICAgIHNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwpA
QCAtMjI0LDcgKzIyNCw3IEBAIGludCBTY3JvbGxiYXJUaGVtZVF0OjpzY3JvbGxiYXJUaGlja25l
c3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUpCiAgICAgcmV0dXJuIHN0eWxlKCkt
PnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fU2Nyb2xsQmFyRXh0ZW50LCAmbywgMCk7CiB9CiAKLWlu
dCBTY3JvbGxiYXJUaGVtZVF0Ojp0aHVtYlBvc2l0aW9uKFNjcm9sbGJhciogc2Nyb2xsYmFyKQor
aW50IFNjcm9sbGJhclRoZW1lUXQ6OnRodW1iUG9zaXRpb24oU2Nyb2xsYmFyVGhlbWVDbGllbnQq
IHNjcm9sbGJhcikKIHsKICAgICBpZiAoc2Nyb2xsYmFyLT5lbmFibGVkKCkpIHsKICAgICAgICAg
ZmxvYXQgcG9zID0gKGZsb2F0KXNjcm9sbGJhci0+Y3VycmVudFBvcygpICogKHRyYWNrTGVuZ3Ro
KHNjcm9sbGJhcikgLSB0aHVtYkxlbmd0aChzY3JvbGxiYXIpKSAvIHNjcm9sbGJhci0+bWF4aW11
bSgpOwpAQCAtMjMzLDIxICsyMzMsMjEgQEAgaW50IFNjcm9sbGJhclRoZW1lUXQ6OnRodW1iUG9z
aXRpb24oU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBTY3Jv
bGxiYXJUaGVtZVF0Ojp0aHVtYkxlbmd0aChTY3JvbGxiYXIqIHNjcm9sbGJhcikKK2ludCBTY3Jv
bGxiYXJUaGVtZVF0Ojp0aHVtYkxlbmd0aChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFy
KQogewogICAgIFFTdHlsZU9wdGlvblNsaWRlciogb3B0ID0gc3R5bGVPcHRpb25TbGlkZXIoc2Ny
b2xsYmFyKTsKICAgICBJbnRSZWN0IHRodW1iID0gc3R5bGUoKS0+c3ViQ29udHJvbFJlY3QoUVN0
eWxlOjpDQ19TY3JvbGxCYXIsIG9wdCwgUVN0eWxlOjpTQ19TY3JvbGxCYXJTbGlkZXIsIDApOwog
ICAgIHJldHVybiBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJh
ciA/IHRodW1iLndpZHRoKCkgOiB0aHVtYi5oZWlnaHQoKTsKIH0KIAotaW50IFNjcm9sbGJhclRo
ZW1lUXQ6OnRyYWNrUG9zaXRpb24oU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCitpbnQgU2Nyb2xsYmFy
VGhlbWVRdDo6dHJhY2tQb3NpdGlvbihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQog
ewogICAgIFFTdHlsZU9wdGlvblNsaWRlciogb3B0ID0gc3R5bGVPcHRpb25TbGlkZXIoc2Nyb2xs
YmFyKTsKICAgICBJbnRSZWN0IHRyYWNrID0gc3R5bGUoKS0+c3ViQ29udHJvbFJlY3QoUVN0eWxl
OjpDQ19TY3JvbGxCYXIsIG9wdCwgUVN0eWxlOjpTQ19TY3JvbGxCYXJHcm9vdmUsIDApOwogICAg
IHJldHVybiBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/
IHRyYWNrLngoKSAtIHNjcm9sbGJhci0+eCgpIDogdHJhY2sueSgpIC0gc2Nyb2xsYmFyLT55KCk7
CiB9CiAKLWludCBTY3JvbGxiYXJUaGVtZVF0Ojp0cmFja0xlbmd0aChTY3JvbGxiYXIqIHNjcm9s
bGJhcikKK2ludCBTY3JvbGxiYXJUaGVtZVF0Ojp0cmFja0xlbmd0aChTY3JvbGxiYXJUaGVtZUNs
aWVudCogc2Nyb2xsYmFyKQogewogICAgIFFTdHlsZU9wdGlvblNsaWRlciogb3B0ID0gc3R5bGVP
cHRpb25TbGlkZXIoc2Nyb2xsYmFyKTsKICAgICBJbnRSZWN0IHRyYWNrID0gc3R5bGUoKS0+c3Vi
Q29udHJvbFJlY3QoUVN0eWxlOjpDQ19TY3JvbGxCYXIsIG9wdCwgUVN0eWxlOjpTQ19TY3JvbGxC
YXJHcm9vdmUsIDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Ny
b2xsYmFyVGhlbWVRdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhl
bWVRdC5oCmluZGV4IGNmNDg4MmRhMjAzYmJmMGZiN2NjNjllN2MzZTFjMWZmZGQ4MWY1ZWIuLjAz
MzdiZjgwY2NmNjQ2ZDE4ZThmMDdjNGZlNWFjYmEzYWE5OTUyMmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmgKQEAgLTQwLDE5ICs0MCwxOSBAQCBj
bGFzcyBTY3JvbGxiYXJUaGVtZVF0IDogcHVibGljIFNjcm9sbGJhclRoZW1lIHsKIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIH5TY3JvbGxiYXJUaGVtZVF0KCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnQoU2Nyb2xsYmFyKiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVj
dCk7CisgICAgdmlydHVhbCBib29sIHBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CiAgICAgdmlydHVhbCB2b2lk
IHBhaW50U2Nyb2xsQ29ybmVyKFNjcm9sbFZpZXcqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJ
bnRSZWN0JiBjb3JuZXJSZWN0KTsKIAotICAgIHZpcnR1YWwgU2Nyb2xsYmFyUGFydCBoaXRUZXN0
KFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAgIHZpcnR1YWwgU2Ny
b2xsYmFyUGFydCBoaXRUZXN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50Jik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihTY3Jv
bGxiYXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYpOwogCi0gICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVQYXJ0KFNjcm9sbGJhcios
IFNjcm9sbGJhclBhcnQpOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUGFydChTY3JvbGxi
YXJUaGVtZUNsaWVudCosIFNjcm9sbGJhclBhcnQpOwogCi0gICAgdmlydHVhbCBpbnQgdGh1bWJQ
b3NpdGlvbihTY3JvbGxiYXIqKTsKLSAgICB2aXJ0dWFsIGludCB0aHVtYkxlbmd0aChTY3JvbGxi
YXIqKTsKLSAgICB2aXJ0dWFsIGludCB0cmFja1Bvc2l0aW9uKFNjcm9sbGJhciopOwotICAgIHZp
cnR1YWwgaW50IHRyYWNrTGVuZ3RoKFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgaW50IHRodW1i
UG9zaXRpb24oU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKKyAgICB2aXJ0dWFsIGludCB0aHVtYkxl
bmd0aChTY3JvbGxiYXJUaGVtZUNsaWVudCopOworICAgIHZpcnR1YWwgaW50IHRyYWNrUG9zaXRp
b24oU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKKyAgICB2aXJ0dWFsIGludCB0cmFja0xlbmd0aChT
Y3JvbGxiYXJUaGVtZUNsaWVudCopOwogCiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsYmFyVGhpY2tu
ZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplID0gUmVndWxhclNjcm9sbGJhcik7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVNhZmFyaS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVTYWZhcmkuY3BwCmlu
ZGV4IDM0M2JiYjI4MGVkNmFmODQ4ZjUxY2MwMGVkOThmMzFmN2UxN2UyNDguLjFjYzUzODVlMTg3
YTIyZWFmMWIwNTVlMzRiZTBmZjY0Mzg5MjliM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVNhZmFyaS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lU2FmYXJpLmNwcApAQCAtMTA0LDE0ICsxMDQs
MTQgQEAgaW50IFNjcm9sbGJhclRoZW1lU2FmYXJpOjpzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xs
YmFyQ29udHJvbFNpemUgY29udHJvbFNpemUpCiAgICAgcmV0dXJuIGNTY3JvbGxiYXJUaGlja25l
c3NbY29udHJvbFNpemVdOwogfQogCi1ib29sIFNjcm9sbGJhclRoZW1lU2FmYXJpOjpoYXNCdXR0
b25zKFNjcm9sbGJhciogc2Nyb2xsYmFyKQorYm9vbCBTY3JvbGxiYXJUaGVtZVNhZmFyaTo6aGFz
QnV0dG9ucyhTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQogewogICAgIHJldHVybiBz
Y3JvbGxiYXItPmVuYWJsZWQoKSAmJiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6
b250YWxTY3JvbGxiYXIgPyAKICAgICAgICAgICAgICBzY3JvbGxiYXItPndpZHRoKCkgOiAKICAg
ICAgICAgICAgICBzY3JvbGxiYXItPmhlaWdodCgpKSA+PSAyICogKGNSZWFsQnV0dG9uTGVuZ3Ro
W3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV0gLSBjQnV0dG9uSGl0SW5zZXRbc2Nyb2xsYmFyLT5j
b250cm9sU2l6ZSgpXSk7CiB9CiAKLWJvb2wgU2Nyb2xsYmFyVGhlbWVTYWZhcmk6Omhhc1RodW1i
KFNjcm9sbGJhciogc2Nyb2xsYmFyKQorYm9vbCBTY3JvbGxiYXJUaGVtZVNhZmFyaTo6aGFzVGh1
bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKIHsKICAgICByZXR1cm4gc2Nyb2xs
YmFyLT5lbmFibGVkKCkgJiYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFs
U2Nyb2xsYmFyID8gCiAgICAgICAgICAgICAgc2Nyb2xsYmFyLT53aWR0aCgpIDogCkBAIC0xMzQs
NyArMTM0LDcgQEAgc3RhdGljIEludFJlY3QgYnV0dG9uUmVwYWludFJlY3QoY29uc3QgSW50UmVj
dCYgYnV0dG9uUmVjdCwgU2Nyb2xsYmFyT3JpZW50YXRpb24KICAgICByZXR1cm4gcGFpbnRSZWN0
OwogfQogCi1JbnRSZWN0IFNjcm9sbGJhclRoZW1lU2FmYXJpOjpiYWNrQnV0dG9uUmVjdChTY3Jv
bGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0LCBib29sIHBhaW50aW5nKQorSW50
UmVjdCBTY3JvbGxiYXJUaGVtZVNhZmFyaTo6YmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVD
bGllbnQqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0LCBib29sIHBhaW50aW5nKQogewog
ICAgIEludFJlY3QgcmVzdWx0OwogCkBAIC0xNTIsNyArMTUyLDcgQEAgSW50UmVjdCBTY3JvbGxi
YXJUaGVtZVNhZmFyaTo6YmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9s
bGJhclBhcnQKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1JbnRSZWN0IFNjcm9sbGJhclRoZW1l
U2FmYXJpOjpmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFy
UGFydCBwYXJ0LCBib29sIHBhaW50aW5nKQorSW50UmVjdCBTY3JvbGxiYXJUaGVtZVNhZmFyaTo6
Zm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgU2Nyb2xs
YmFyUGFydCBwYXJ0LCBib29sIHBhaW50aW5nKQogewogICAgIEludFJlY3QgcmVzdWx0OwogICAg
IApAQCAtMTgxLDcgKzE4MSw3IEBAIHN0YXRpYyBJbnRSZWN0IHRyYWNrUmVwYWludFJlY3QoY29u
c3QgSW50UmVjdCYgdHJhY2tSZWN0LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvCiAgICAgcmV0dXJu
IHBhaW50UmVjdDsKIH0KIAotSW50UmVjdCBTY3JvbGxiYXJUaGVtZVNhZmFyaTo6dHJhY2tSZWN0
KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBib29sIHBhaW50aW5nKQorSW50UmVjdCBTY3JvbGxiYXJU
aGVtZVNhZmFyaTo6dHJhY2tSZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGJv
b2wgcGFpbnRpbmcpCiB7CiAgICAgaWYgKHBhaW50aW5nIHx8ICFoYXNCdXR0b25zKHNjcm9sbGJh
cikpCiAgICAgICAgIHJldHVybiBzY3JvbGxiYXItPmZyYW1lUmVjdCgpOwpAQCAtMTkzLDM2ICsx
OTMsMzYgQEAgSW50UmVjdCBTY3JvbGxiYXJUaGVtZVNhZmFyaTo6dHJhY2tSZWN0KFNjcm9sbGJh
ciogc2Nyb2xsYmFyLCBib29sIHBhaW50aW5nKQogICAgIHJldHVybiBJbnRSZWN0KHNjcm9sbGJh
ci0+eCgpLCBzY3JvbGxiYXItPnkoKSArIGNCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9s
U2l6ZSgpXSwgdGhpY2tuZXNzLCBzY3JvbGxiYXItPmhlaWdodCgpIC0gMiAqIGNCdXR0b25MZW5n
dGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSk7CiB9CiAKLWludCBTY3JvbGxiYXJUaGVtZVNh
ZmFyaTo6bWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoraW50IFNjcm9s
bGJhclRoZW1lU2FmYXJpOjptaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQq
IHNjcm9sbGJhcikKIHsKICAgICByZXR1cm4gY1RodW1iTWluTGVuZ3RoW3Njcm9sbGJhci0+Y29u
dHJvbFNpemUoKV07CiB9CiAKLWJvb2wgU2Nyb2xsYmFyVGhlbWVTYWZhcmk6OnNob3VsZENlbnRl
ck9uVGh1bWIoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQpCitib29s
IFNjcm9sbGJhclRoZW1lU2FmYXJpOjpzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhclRoZW1l
Q2xpZW50KiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQpCiB7CiAgICAgcmV0dXJuIGV2
dC5zaGlmdEtleSgpICYmIGV2dC5idXR0b24oKSA9PSBMZWZ0QnV0dG9uOwogfQogCi12b2lkIFNj
cm9sbGJhclRoZW1lU2FmYXJpOjpwYWludFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQq
IGdyYXBoaWNzQ29udGV4dCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHRy
YWNrUmVjdCkKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVTYWZhcmk6OnBhaW50VHJhY2tCYWNrZ3JvdW5k
KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCog
c2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiB0cmFja1JlY3QpCiB7CiAgICAgaWYgKCFTYWZhcmlU
aGVtZUxpYnJhcnkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIE5TQ29udHJvbFNpemUgc2l6ZSA9
IHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSA9PSBTbWFsbFNjcm9sbGJhciA/IE5TU21hbGxDb250
cm9sU2l6ZSA6IE5TUmVndWxhckNvbnRyb2xTaXplOwogICAgIFRoZW1lQ29udHJvbFN0YXRlIHN0
YXRlID0gMDsKLSAgICBpZiAoc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5pc0FjdGl2ZSgp
KQorICAgIGlmIChzY3JvbGxiYXItPmlzU2Nyb2xsYWJsZUFyZWFBY3RpdmUoKSkKICAgICAgICAg
c3RhdGUgfD0gQWN0aXZlU3RhdGU7CiAgICAgaWYgKGhhc0J1dHRvbnMoc2Nyb2xsYmFyKSkKICAg
ICAgICAgc3RhdGUgfD0gRW5hYmxlZFN0YXRlOwogICAgIHBhaW50VGhlbWVQYXJ0KHNjcm9sbGJh
ci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhciA/IFZTY3JvbGxUcmFja1BhcnQg
OiBIU2Nyb2xsVHJhY2tQYXJ0LCBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCB0
cmFja1JlY3QsIHNpemUsIHN0YXRlKTsgCiB9CiAKLXZvaWQgU2Nyb2xsYmFyVGhlbWVTYWZhcmk6
OnBhaW50QnV0dG9uKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBTY3JvbGxiYXIq
IHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgYnV0dG9uUmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0
KQordm9pZCBTY3JvbGxiYXJUaGVtZVNhZmFyaTo6cGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0
KiBncmFwaGljc0NvbnRleHQsIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0
IEludFJlY3QmIGJ1dHRvblJlY3QsIFNjcm9sbGJhclBhcnQgcGFydCkKIHsKICAgICBpZiAoIVNh
ZmFyaVRoZW1lTGlicmFyeSgpKQogICAgICAgICByZXR1cm47CiAgICAgTlNDb250cm9sU2l6ZSBz
aXplID0gc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpID09IFNtYWxsU2Nyb2xsYmFyID8gTlNTbWFs
bENvbnRyb2xTaXplIDogTlNSZWd1bGFyQ29udHJvbFNpemU7CiAgICAgVGhlbWVDb250cm9sU3Rh
dGUgc3RhdGUgPSAwOwotICAgIGlmIChzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCktPmlzQWN0
aXZlKCkpCisgICAgaWYgKHNjcm9sbGJhci0+aXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSgpKQogICAg
ICAgICBzdGF0ZSB8PSBBY3RpdmVTdGF0ZTsKICAgICBpZiAoaGFzQnV0dG9ucyhzY3JvbGxiYXIp
KQogICAgICAgICBzdGF0ZSB8PSBFbmFibGVkU3RhdGU7CkBAIC0yMzYsMTMgKzIzNiwxMyBAQCB2
b2lkIFNjcm9sbGJhclRoZW1lU2FmYXJpOjpwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQqIGdy
YXBoaWNzQ29udGV4dCwgU2Nyb2xsYgogICAgICAgICAgICAgICAgICAgICAgICBidXR0b25SZWN0
LCBzaXplLCBzdGF0ZSk7CiB9CiAKLXZvaWQgU2Nyb2xsYmFyVGhlbWVTYWZhcmk6OnBhaW50VGh1
bWIoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIFNjcm9sbGJhciogc2Nyb2xsYmFy
LCBjb25zdCBJbnRSZWN0JiB0aHVtYlJlY3QpCit2b2lkIFNjcm9sbGJhclRoZW1lU2FmYXJpOjpw
YWludFRodW1iKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBTY3JvbGxiYXJUaGVt
ZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiB0aHVtYlJlY3QpCiB7CiAgICAgaWYg
KCFTYWZhcmlUaGVtZUxpYnJhcnkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIE5TQ29udHJvbFNp
emUgc2l6ZSA9IHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSA9PSBTbWFsbFNjcm9sbGJhciA/IE5T
U21hbGxDb250cm9sU2l6ZSA6IE5TUmVndWxhckNvbnRyb2xTaXplOwogICAgIFRoZW1lQ29udHJv
bFN0YXRlIHN0YXRlID0gMDsKLSAgICBpZiAoc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5p
c0FjdGl2ZSgpKQorICAgIGlmIChzY3JvbGxiYXItPmlzU2Nyb2xsYWJsZUFyZWFBY3RpdmUoKSkK
ICAgICAgICAgc3RhdGUgfD0gQWN0aXZlU3RhdGU7CiAgICAgaWYgKGhhc1RodW1iKHNjcm9sbGJh
cikpCiAgICAgICAgIHN0YXRlIHw9IEVuYWJsZWRTdGF0ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVNhZmFyaS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lU2FmYXJpLmgKaW5kZXggZjAzOTM3OWVhNDQ3
MDhlOGI1Yjc1Zjk2MDU1MzJmZTExZDYyNjU5Mi4uZjQyN2IxOTBmZDY3NjY1MjE1Njc1NjZjYjZj
YmM0ZGZlNDNkOTkyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Nj
cm9sbGJhclRoZW1lU2FmYXJpLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Nj
cm9sbGJhclRoZW1lU2FmYXJpLmgKQEAgLTQxLDIwICs0MSwyMCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBib29sIHN1cHBvcnRzQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
CiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBib29sIGhhc0J1dHRvbnMoU2Nyb2xsYmFyKik7Ci0g
ICAgdmlydHVhbCBib29sIGhhc1RodW1iKFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgYm9vbCBo
YXNCdXR0b25zKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CisgICAgdmlydHVhbCBib29sIGhhc1Ro
dW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CiAKLSAgICB2aXJ0dWFsIEludFJlY3QgYmFja0J1
dHRvblJlY3QoU2Nyb2xsYmFyKiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNl
KTsKLSAgICB2aXJ0dWFsIEludFJlY3QgZm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyKiwgU2Ny
b2xsYmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIEludFJlY3Qg
dHJhY2tSZWN0KFNjcm9sbGJhciosIGJvb2wgcGFpbnRpbmcgPSBmYWxzZSk7CisgICAgdmlydHVh
bCBJbnRSZWN0IGJhY2tCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFy
UGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsKKyAgICB2aXJ0dWFsIEludFJlY3QgZm9yd2Fy
ZEJ1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBTY3JvbGxiYXJQYXJ0LCBib29sIHBh
aW50aW5nID0gZmFsc2UpOworICAgIHZpcnR1YWwgSW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFy
VGhlbWVDbGllbnQqLCBib29sIHBhaW50aW5nID0gZmFsc2UpOwogCi0gICAgdmlydHVhbCBpbnQg
bWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgaW50IG1pbmltdW1U
aHVtYkxlbmd0aChTY3JvbGxiYXJUaGVtZUNsaWVudCopOwogICAgIAotICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYpOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhclRoZW1l
Q2xpZW50KiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyKiwgY29uc3Qg
SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQq
LCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JiwgU2Nyb2xsYmFyUGFydCk7Ci0gICAgdmlydHVh
bCB2b2lkIHBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyKiwgY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0Nv
bnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhlbWVDbGll
bnQqLCBjb25zdCBJbnRSZWN0JiwgU2Nyb2xsYmFyUGFydCk7CisgICAgdmlydHVhbCB2b2lkIHBh
aW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJ
bnRSZWN0Jik7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vU2Nyb2xsYmFyVGhlbWVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Nj
cm9sbGJhclRoZW1lV2luLmNwcAppbmRleCBkMzYzNDEwNjg0ODdmZjFiNzg2OTc2OGU5ZDVmNmIy
ZjQ4OTgxYWE1Li41NjQ0Mjk3ZDdmMjcwYzUwYzdhMjhlZjNiMWUyNGFjZjFkMTI3OWU1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAK
QEAgLTEzMCwxMiArMTMwLDEyIEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVXaW46OmludmFsaWRhdGVP
bk1vdXNlRW50ZXJFeGl0KCkKICAgICByZXR1cm4gcnVubmluZ1Zpc3RhOwogfQogCi1ib29sIFNj
cm9sbGJhclRoZW1lV2luOjpoYXNUaHVtYihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK2Jvb2wgU2Ny
b2xsYmFyVGhlbWVXaW46Omhhc1RodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIp
CiB7CiAgICAgcmV0dXJuIHRodW1iTGVuZ3RoKHNjcm9sbGJhcikgPiAwOwogfQogCi1JbnRSZWN0
IFNjcm9sbGJhclRoZW1lV2luOjpiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwg
U2Nyb2xsYmFyUGFydCBwYXJ0LCBib29sKQorSW50UmVjdCBTY3JvbGxiYXJUaGVtZVdpbjo6YmFj
a0J1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFy
dCBwYXJ0LCBib29sKQogewogICAgIC8vIFdpbmRvd3MganVzdCBoYXMgc2luZ2xlIGFycm93cy4K
ICAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uRW5kUGFydCkKQEAgLTE1NCw3ICsxNTQsNyBAQCBJ
bnRSZWN0IFNjcm9sbGJhclRoZW1lV2luOjpiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXIqIHNjcm9s
bGJhciwgU2Nyb2xsYmFyUGFydCBwYQogICAgICAgICAgICAgICAgICAgIHRoaWNrbmVzcywgc2Ny
b2xsYmFyLT5oZWlnaHQoKSA8IDIgKiB0aGlja25lc3MgPyBzY3JvbGxiYXItPmhlaWdodCgpIC8g
MiA6IHRoaWNrbmVzcyk7CiB9CiAKLUludFJlY3QgU2Nyb2xsYmFyVGhlbWVXaW46OmZvcndhcmRC
dXR0b25SZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wp
CitJbnRSZWN0IFNjcm9sbGJhclRoZW1lV2luOjpmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXJU
aGVtZUNsaWVudCogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wpCiB7CiAgICAg
Ly8gV2luZG93cyBqdXN0IGhhcyBzaW5nbGUgYXJyb3dzLgogICAgIGlmIChwYXJ0ID09IEZvcndh
cmRCdXR0b25TdGFydFBhcnQpCkBAIC0xNzUsNyArMTc1LDcgQEAgSW50UmVjdCBTY3JvbGxiYXJU
aGVtZVdpbjo6Zm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJh
clBhcnQKICAgICByZXR1cm4gSW50UmVjdChzY3JvbGxiYXItPngoKSwgc2Nyb2xsYmFyLT55KCkg
KyBzY3JvbGxiYXItPmhlaWdodCgpIC0gaCwgdGhpY2tuZXNzLCBoKTsKIH0KIAotSW50UmVjdCBT
Y3JvbGxiYXJUaGVtZVdpbjo6dHJhY2tSZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBib29sKQor
SW50UmVjdCBTY3JvbGxiYXJUaGVtZVdpbjo6dHJhY2tSZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50
KiBzY3JvbGxiYXIsIGJvb2wpCiB7CiAgICAgaW50IHRoaWNrbmVzcyA9IHNjcm9sbGJhclRoaWNr
bmVzcygpOwogICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNj
cm9sbGJhcikgewpAQCAtMTg4LDEyICsxODgsMTIgQEAgSW50UmVjdCBTY3JvbGxiYXJUaGVtZVdp
bjo6dHJhY2tSZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBib29sKQogICAgIHJldHVybiBJbnRS
ZWN0KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXItPnkoKSArIHRoaWNrbmVzcywgdGhpY2tuZXNz
LCBzY3JvbGxiYXItPmhlaWdodCgpIC0gMiAqIHRoaWNrbmVzcyk7CiB9CiAKLWJvb2wgU2Nyb2xs
YmFyVGhlbWVXaW46OnNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50JiBldnQpCitib29sIFNjcm9sbGJhclRoZW1lV2luOjpzaG91bGRDZW50ZXJP
blRodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBl
dnQpCiB7CiAgICAgcmV0dXJuIGV2dC5zaGlmdEtleSgpICYmIGV2dC5idXR0b24oKSA9PSBMZWZ0
QnV0dG9uOwogfQogCi1ib29sIFNjcm9sbGJhclRoZW1lV2luOjpzaG91bGRTbmFwQmFja1RvRHJh
Z09yaWdpbihTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBl
dnQpCitib29sIFNjcm9sbGJhclRoZW1lV2luOjpzaG91bGRTbmFwQmFja1RvRHJhZ09yaWdpbihT
Y3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
IGV2dCkKIHsKICAgICAvLyBGaW5kIHRoZSByZWN0IHdpdGhpbiB3aGljaCB3ZSBzaG91bGRuJ3Qg
c25hcCwgYnkgZXhwYW5kaW5nIHRoZSB0cmFjayByZWN0CiAgICAgLy8gaW4gYm90aCBkaW1lbnNp
b25zLgpAQCAtMjExLDE0ICsyMTEsMTQgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZVdpbjo6c2hvdWxk
U25hcEJhY2tUb0RyYWdPcmlnaW4oU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IFAKICAgICBy
ZXR1cm4gIXJlY3QuY29udGFpbnMobW91c2VQb3NpdGlvbik7CiB9CiAKLXZvaWQgU2Nyb2xsYmFy
VGhlbWVXaW46OnBhaW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
U2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIFNjcm9sbGJh
clRoZW1lV2luOjpwYWludFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
CiAgICAgLy8gSnVzdCBhc3N1bWUgYSBmb3J3YXJkIHRyYWNrIHBhcnQuICBXZSBvbmx5IHBhaW50
IHRoZSB0cmFjayBhcyBhIHNpbmdsZSBwaWVjZSB3aGVuIHRoZXJlIGlzIG5vIHRodW1iLgogICAg
IGlmICghaGFzVGh1bWIoc2Nyb2xsYmFyKSkKICAgICAgICAgcGFpbnRUcmFja1BpZWNlKGNvbnRl
eHQsIHNjcm9sbGJhciwgcmVjdCwgRm9yd2FyZFRyYWNrUGFydCk7CiB9CiAKLXZvaWQgU2Nyb2xs
YmFyVGhlbWVXaW46OnBhaW50VHJhY2tQaWVjZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNj
cm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxiYXJQYXJ0IHBh
cnRUeXBlKQordm9pZCBTY3JvbGxiYXJUaGVtZVdpbjo6cGFpbnRUcmFja1BpZWNlKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3Qg
SW50UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0VHlwZSkKIHsKICAgICBjaGVja0FuZElu
aXRTY3JvbGxiYXJUaGVtZSgpOwogCkBAIC0yNzYsNyArMjc2LDcgQEAgdm9pZCBTY3JvbGxiYXJU
aGVtZVdpbjo6cGFpbnRUcmFja1BpZWNlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xs
YmFyKiBzY3IKICNlbmRpZgogfQogCi12b2lkIFNjcm9sbGJhclRoZW1lV2luOjpwYWludEJ1dHRv
bihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJ
bnRSZWN0JiByZWN0LCBTY3JvbGxiYXJQYXJ0IHBhcnQpCit2b2lkIFNjcm9sbGJhclRoZW1lV2lu
OjpwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhclRoZW1lQ2xp
ZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIFNjcm9sbGJhclBhcnQgcGFydCkK
IHsKICAgICBjaGVja0FuZEluaXRTY3JvbGxiYXJUaGVtZSgpOwogCkBAIC0zMzksNyArMzM5LDcg
QEAgc3RhdGljIEludFJlY3QgZ3JpcHBlclJlY3QoaW50IHRoaWNrbmVzcywgY29uc3QgSW50UmVj
dCYgdGh1bWJSZWN0KQogICAgICAgICAgICAgICAgICAgIGdyaXBwZXJUaGlja25lc3MsIGdyaXBw
ZXJUaGlja25lc3MpOwogfQogCi1zdGF0aWMgdm9pZCBwYWludEdyaXBwZXIoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIsIEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIHJlY3QpCitzdGF0aWMgdm9pZCBwYWlu
dEdyaXBwZXIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgSERDIGhkYywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAoIXNjcm9sbGJhclRoZW1lKQogICAgICAgICByZXR1
cm47ICAvLyBDbGFzc2ljIGxvb2sgaGFzIG5vIGdyaXBwZXIuCkBAIC0zNTgsNyArMzU4LDcgQEAg
c3RhdGljIHZvaWQgcGFpbnRHcmlwcGVyKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBIREMgaGRjLCBj
b25zdCBJbnRSZWN0JiByZWN0KQogICAgIERyYXdUaGVtZUJhY2tncm91bmQoc2Nyb2xsYmFyVGhl
bWUsIGhkYywgc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIg
PyBTUF9HUklQUEVSSE9SIDogU1BfR1JJUFBFUlZFUlQsIHN0YXRlLCAmdGhlbWVSZWN0LCAwKTsK
IH0KIAotdm9pZCBTY3JvbGxiYXJUaGVtZVdpbjo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQordm9p
ZCBTY3JvbGxiYXJUaGVtZVdpbjo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
CiAgICAgY2hlY2tBbmRJbml0U2Nyb2xsYmFyVGhlbWUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lV2luLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uaAppbmRleCBjZDJmMTc2ZGZkYzk3Mzgy
YzM1YmI3NzNmOWIxZThkYWQyMTI3NmI2Li44NzAyNDBjMTY1NThjZjBmNjI1NzQxOTZlZWI2OWFh
YTgwNmE3YTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xs
YmFyVGhlbWVXaW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFy
VGhlbWVXaW4uaApAQCAtNDIsMjAgKzQyLDIwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wg
aW52YWxpZGF0ZU9uTW91c2VFbnRlckV4aXQoKTsKIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwg
Ym9vbCBoYXNCdXR0b25zKFNjcm9sbGJhciopIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgaGFzVGh1bWIoU2Nyb2xsYmFyKik7CisgICAgdmlydHVhbCBib29sIGhhc0J1dHRvbnMo
U2Nyb2xsYmFyVGhlbWVDbGllbnQqKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29s
IGhhc1RodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CiAKLSAgICB2aXJ0dWFsIEludFJlY3Qg
YmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyKiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBwYWludGluZyA9
IGZhbHNlKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgZm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFy
KiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIElu
dFJlY3QgdHJhY2tSZWN0KFNjcm9sbGJhciosIGJvb2wgcGFpbnRpbmcgPSBmYWxzZSk7CisgICAg
dmlydHVhbCBJbnRSZWN0IGJhY2tCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Ny
b2xsYmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsKKyAgICB2aXJ0dWFsIEludFJlY3Qg
Zm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBTY3JvbGxiYXJQYXJ0LCBi
b29sIHBhaW50aW5nID0gZmFsc2UpOworICAgIHZpcnR1YWwgSW50UmVjdCB0cmFja1JlY3QoU2Ny
b2xsYmFyVGhlbWVDbGllbnQqLCBib29sIHBhaW50aW5nID0gZmFsc2UpOwogCi0gICAgdmlydHVh
bCBib29sIHNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50Jik7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2luKFNj
cm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50Jik7CisgICAgdmlydHVhbCBib29sIHNob3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2lu
KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiwgU2Ny
b2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFRyYWNrUGll
Y2UoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYsIFNjcm9sbGJh
clBhcnQpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQqLCBT
Y3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JiwgU2Nyb2xsYmFyUGFydCk7Ci0gICAgdmlydHVhbCB2
b2lkIHBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVj
dCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0NvbnRl
eHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRUcmFja1BpZWNlKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRoZW1lQ2xp
ZW50KiwgY29uc3QgSW50UmVjdCYsIFNjcm9sbGJhclBhcnQpOworICAgIHZpcnR1YWwgdm9pZCBw
YWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0
IEludFJlY3QmLCBTY3JvbGxiYXJQYXJ0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUaHVtYihH
cmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3QmKTsK
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1Njcm9sbGJh
clRoZW1lV3guY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvU2Nyb2xsYmFyVGhlbWVX
eC5jcHAKaW5kZXggYzkyNDk3OGE1MDVhYzMxZjE0MDUxZTMwMTgzMzA2NDI1MTNjNGE1MS4uYmFk
ZjMxNTU0MDVhNmE1MTM2NjIzMjViOTIzNTlkYzgxM2E5NTI0MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd3gvU2Nyb2xsYmFyVGhlbWVXeC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd3gvU2Nyb2xsYmFyVGhlbWVXeC5jcHAKQEAgLTcxLDE5ICs3MSwxOSBA
QCBpbnQgU2Nyb2xsYmFyVGhlbWVXeDo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRy
b2xTaXplIHNpemUpCiAgICAgcmV0dXJuIHRoaWNrbmVzczsKIH0KIAotYm9vbCBTY3JvbGxiYXJU
aGVtZVd4OjpoYXNUaHVtYihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK2Jvb2wgU2Nyb2xsYmFyVGhl
bWVXeDo6aGFzVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKIHsKICAgICAv
LyBUaGlzIG1ldGhvZCBpcyBqdXN0IGNhbGxlZCBhcyBhIHBhaW50LXRpbWUgb3B0aW1pemF0aW9u
IHRvIHNlZSBpZgogICAgIC8vIHBhaW50aW5nIHRoZSB0aHVtYiBjYW4gYmUgc2tpcHBlZC4gIFdl
IGRvbid0IGhhdmUgdG8gYmUgZXhhY3QgaGVyZS4KICAgICByZXR1cm4gdGh1bWJMZW5ndGgoc2Ny
b2xsYmFyKSA+IDA7CiB9CiAKLWludCBTY3JvbGxiYXJUaGVtZVd4OjptaW5pbXVtVGh1bWJMZW5n
dGgoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCitpbnQgU2Nyb2xsYmFyVGhlbWVXeDo6bWluaW11bVRo
dW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCiB7CiAgICAgcmV0dXJu
IDIwOwogfQogCi1JbnRTaXplIFNjcm9sbGJhclRoZW1lV3g6OmJ1dHRvblNpemUoU2Nyb2xsYmFy
KikgCitJbnRTaXplIFNjcm9sbGJhclRoZW1lV3g6OmJ1dHRvblNpemUoU2Nyb2xsYmFyVGhlbWVD
bGllbnQqKSAKIHsKICNpZmRlZiBfX1dYTUFDX18KICAgICByZXR1cm4gSW50U2l6ZSgyMCwyMCk7
CkBAIC05Miw3ICs5Miw3IEBAIEludFNpemUgU2Nyb2xsYmFyVGhlbWVXeDo6YnV0dG9uU2l6ZShT
Y3JvbGxiYXIqKQogI2VuZGlmCiB9CiAKLXZvaWQgU2Nyb2xsYmFyVGhlbWVXeDo6c3BsaXRUcmFj
ayhTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgdW5jb25zdHJhaW5lZFRyYWNr
UmVjdCwgSW50UmVjdCYgYmVmb3JlVGh1bWJSZWN0LCBJbnRSZWN0JiB0aHVtYlJlY3QsIEludFJl
Y3QmIGFmdGVyVGh1bWJSZWN0KQordm9pZCBTY3JvbGxiYXJUaGVtZVd4OjpzcGxpdFRyYWNrKFNj
cm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHVuY29uc3RyYWlu
ZWRUcmFja1JlY3QsIEludFJlY3QmIGJlZm9yZVRodW1iUmVjdCwgSW50UmVjdCYgdGh1bWJSZWN0
LCBJbnRSZWN0JiBhZnRlclRodW1iUmVjdCkKIHsKICAgICBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0
ZTo6c3BsaXRUcmFjayhzY3JvbGxiYXIsIHVuY29uc3RyYWluZWRUcmFja1JlY3QsIGJlZm9yZVRo
dW1iUmVjdCwgdGh1bWJSZWN0LCBhZnRlclRodW1iUmVjdCk7CiAjaWZkZWYgX19XWE1BQ19fCkBA
IC0xMDksNyArMTA5LDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZVd4OjpzcGxpdFRyYWNrKFNjcm9s
bGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiB1bmNvbnN0cmEKICNlbmRpZgogfQogCi1J
bnRSZWN0IFNjcm9sbGJhclRoZW1lV3g6OmJhY2tCdXR0b25SZWN0KFNjcm9sbGJhciogc2Nyb2xs
YmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wpCitJbnRSZWN0IFNjcm9sbGJhclRoZW1lV3g6
OmJhY2tCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJh
clBhcnQgcGFydCwgYm9vbCkKIHsKICAgICAvLyBGSVhNRTogSGFuZGxpbmcgdGhpcyBjYXNlIGlz
IG5lZWRlZCB3aGVuIHRoZXJlIGFyZSB0d28gc2V0cyBvZiBhcnJvdyBidXR0b25zCiAgICAgLy8g
b24gTWFjLCBvbmUgYXQgdGhlIHRvcCBhbmQgb25lIGF0IHRoZSBib3R0b20uCkBAIC0xMzAsNyAr
MTMwLDcgQEAgSW50UmVjdCBTY3JvbGxiYXJUaGVtZVd4OjpiYWNrQnV0dG9uUmVjdChTY3JvbGxi
YXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXIKICAgICByZXR1cm4gSW50UmVjdCh4LCB5
LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogfQogCi1JbnRSZWN0IFNjcm9sbGJhclRo
ZW1lV3g6OmZvcndhcmRCdXR0b25SZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQ
YXJ0IHBhcnQsIGJvb2wpCitJbnRSZWN0IFNjcm9sbGJhclRoZW1lV3g6OmZvcndhcmRCdXR0b25S
ZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydCwg
Ym9vbCkKIHsKICAgICAvLyBGSVhNRTogSGFuZGxpbmcgdGhpcyBjYXNlIGlzIG5lZWRlZCB3aGVu
IHRoZXJlIGFyZSB0d28gc2V0cyBvZiBhcnJvdyBidXR0b25zCiAgICAgLy8gb24gTWFjLCBvbmUg
YXQgdGhlIHRvcCBhbmQgb25lIGF0IHRoZSBib3R0b20uCkBAIC0xNTUsNyArMTU1LDcgQEAgSW50
UmVjdCBTY3JvbGxiYXJUaGVtZVd4Ojpmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXIqIHNjcm9s
bGJhciwgU2Nyb2xsYmFyUGFydAogICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSk7CiB9CiAKLUludFJlY3QgU2Nyb2xsYmFyVGhlbWVXeDo6dHJhY2tS
ZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBib29sKQorSW50UmVjdCBTY3JvbGxiYXJUaGVtZVd4
Ojp0cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgYm9vbCkKIHsKICAg
ICBJbnRTaXplIGJzID0gYnV0dG9uU2l6ZShzY3JvbGxiYXIpOwogICAgIGludCB0cmFja1N0YXJ0
ID0gMDsKQEAgLTE3OSwxMSArMTc5LDExIEBAIEludFJlY3QgU2Nyb2xsYmFyVGhlbWVXeDo6dHJh
Y2tSZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBib29sKQogICAgIHJldHVybiBJbnRSZWN0KHNj
cm9sbGJhci0+eCgpLCBzY3JvbGxiYXItPnkoKSArIHRyYWNrU3RhcnQsIHRoaWNrbmVzcywgc2Ny
b2xsYmFyLT5oZWlnaHQoKSAtIDIgKiBicy5oZWlnaHQoKSk7CiB9CiAKLWJvb2wgU2Nyb2xsYmFy
VGhlbWVXeDo6cGFpbnQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgU2Nyb2xsYmFyVGhlbWVXeDo6cGFpbnQo
U2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHd4T3JpZW50YXRpb24gb3JpZW50YXRpb24g
PSAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpID8gd3hI
T1JJWk9OVEFMIDogd3hWRVJUSUNBTDsKICAgICBpbnQgZmxhZ3MgPSAwOwotICAgIGlmIChzY3Jv
bGxiYXItPnNjcm9sbGFibGVBcmVhKCktPmlzQWN0aXZlKCkpCisgICAgaWYgKHNjcm9sbGJhci0+
aXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSgpKQogICAgICAgICBmbGFncyB8PSB3eENPTlRST0xfRk9D
VVNFRDsKICAgICAKICAgICBpZiAoIXNjcm9sbGJhci0+ZW5hYmxlZCgpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvU2Nyb2xsYmFyVGhlbWVXeC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd3gvU2Nyb2xsYmFyVGhlbWVXeC5oCmluZGV4IDc1YWIxNzVhM2JhNjA0
ZmNkNzk1YWQyZWE0NWVkZmNmNTgzZWU1NTguLjM3MmFhZjk2NjJmNzQ1ZDRlZTA3NDdlZGY1YzEx
ZjlmYzVhZDg5NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1Njcm9s
bGJhclRoZW1lV3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9TY3JvbGxiYXJU
aGVtZVd4LmgKQEAgLTM1LDIxICszNSwyMSBAQCBjbGFzcyBTY3JvbGxiYXJUaGVtZVd4IDogcHVi
bGljIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TY3Jv
bGxiYXJUaGVtZVd4KCk7CiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9s
bGJhckNvbnRyb2xTaXplID0gUmVndWxhclNjcm9sbGJhcik7Ci0gICAgdmlydHVhbCBib29sIHBh
aW50KFNjcm9sbGJhciosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBJbnRSZWN0Jik7CiAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBib29sIGhh
c0J1dHRvbnMoU2Nyb2xsYmFyKikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBo
YXNUaHVtYihTY3JvbGxiYXIqKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzQnV0dG9ucyhTY3JvbGxi
YXJUaGVtZUNsaWVudCopIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFzVGh1
bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKIAotICAgIHZpcnR1YWwgSW50U2l6ZSBidXR0b25T
aXplKFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgSW50U2l6ZSBidXR0b25TaXplKFNjcm9sbGJh
clRoZW1lQ2xpZW50Kik7CiAKLSAgICB2aXJ0dWFsIEludFJlY3QgYmFja0J1dHRvblJlY3QoU2Ny
b2xsYmFyKiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsKLSAgICB2aXJ0
dWFsIEludFJlY3QgZm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyKiwgU2Nyb2xsYmFyUGFydCwg
Ym9vbCBwYWludGluZyA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgdHJhY2tSZWN0KFNj
cm9sbGJhciosIGJvb2wgcGFpbnRpbmcgPSBmYWxzZSk7CisgICAgdmlydHVhbCBJbnRSZWN0IGJh
Y2tCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBw
YWludGluZyA9IGZhbHNlKTsKKyAgICB2aXJ0dWFsIEludFJlY3QgZm9yd2FyZEJ1dHRvblJlY3Qo
U2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBTY3JvbGxiYXJQYXJ0LCBib29sIHBhaW50aW5nID0gZmFs
c2UpOworICAgIHZpcnR1YWwgSW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQq
LCBib29sIHBhaW50aW5nID0gZmFsc2UpOwogCi0gICAgdmlydHVhbCB2b2lkIHNwbGl0VHJhY2so
U2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYgdHJhY2ssIEludFJlY3QmIHN0YXJ0VHJhY2ssIElu
dFJlY3QmIHRodW1iLCBJbnRSZWN0JiBlbmRUcmFjayk7CisgICAgdmlydHVhbCB2b2lkIHNwbGl0
VHJhY2soU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0JiB0cmFjaywgSW50UmVj
dCYgc3RhcnRUcmFjaywgSW50UmVjdCYgdGh1bWIsIEludFJlY3QmIGVuZFRyYWNrKTsKICAgICAK
LSAgICB2aXJ0dWFsIGludCBtaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyKik7CisgICAgdmly
dHVhbCBpbnQgbWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CiB9Owog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFy
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmgKaW5kZXggODEw
Yzk4ZmYzNjY4YWI5MWNkZTljMzU3MThkNmYwNGIyZjc0NjcxYi4uN2ZlMmZhYzhiOGQ0OTc1NGQ4
ZWFiMjNkNDA1YjE2MmJlMzNkYzdiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNjcm9sbGJhci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTY3JvbGxiYXIuaApAQCAtODUsNyArODUsNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8dW5z
aWduZWQsIFJlbmRlclNjcm9sbGJhclBhcnQqPiBtX3BhcnRzOwogfTsKIAotaW5saW5lIFJlbmRl
clNjcm9sbGJhciogdG9SZW5kZXJTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCitpbmxp
bmUgUmVuZGVyU2Nyb2xsYmFyKiB0b1JlbmRlclNjcm9sbGJhcihTY3JvbGxiYXJUaGVtZUNsaWVu
dCogc2Nyb2xsYmFyKQogewogICAgIEFTU0VSVCghc2Nyb2xsYmFyIHx8IHNjcm9sbGJhci0+aXND
dXN0b21TY3JvbGxiYXIoKSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNjcm9sbGJh
cio+KHNjcm9sbGJhcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU2Nyb2xsYmFyVGhlbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNj
cm9sbGJhclRoZW1lLmNwcAppbmRleCA4NzMwOWQ0NGU1YWE0NTI2OTc5YWZlYmU1MTI3OGI0ZTQ2
YTVlOTE3Li40NGUyYWE2MzFkYzI4MTUwMTc0YmMyMjUyMzBlOGI2YWFiN2QwZDM1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyVGhlbWUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5jcHAKQEAg
LTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJTY3Jv
bGxiYXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgorI2luY2x1ZGUgIlNj
cm9sbGJhclRoZW1lQ2xpZW50LmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNiw3ICszNyw3IEBAIFJlbmRlclNjcm9sbGJhclRoZW1l
KiBSZW5kZXJTY3JvbGxiYXJUaGVtZTo6cmVuZGVyU2Nyb2xsYmFyVGhlbWUoKQogICAgIHJldHVy
biAmdGhlbWU7CiB9CiAKLXZvaWQgUmVuZGVyU2Nyb2xsYmFyVGhlbWU6OmJ1dHRvblNpemVzQWxv
bmdUcmFja0F4aXMoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGludCYgYmVmb3JlU2l6ZSwgaW50JiBh
ZnRlclNpemUpCit2b2lkIFJlbmRlclNjcm9sbGJhclRoZW1lOjpidXR0b25TaXplc0Fsb25nVHJh
Y2tBeGlzKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGludCYgYmVmb3JlU2l6ZSwg
aW50JiBhZnRlclNpemUpCiB7CiAgICAgSW50UmVjdCBmaXJzdEJ1dHRvbiA9IGJhY2tCdXR0b25S
ZWN0KHNjcm9sbGJhciwgQmFja0J1dHRvblN0YXJ0UGFydCk7CiAgICAgSW50UmVjdCBzZWNvbmRC
dXR0b24gPSBmb3J3YXJkQnV0dG9uUmVjdChzY3JvbGxiYXIsIEZvcndhcmRCdXR0b25TdGFydFBh
cnQpOwpAQCAtNTEsNyArNTIsNyBAQCB2b2lkIFJlbmRlclNjcm9sbGJhclRoZW1lOjpidXR0b25T
aXplc0Fsb25nVHJhY2tBeGlzKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBpbnQmCiAgICAgfQogfQog
Ci1ib29sIFJlbmRlclNjcm9sbGJhclRoZW1lOjpoYXNCdXR0b25zKFNjcm9sbGJhciogc2Nyb2xs
YmFyKQorYm9vbCBSZW5kZXJTY3JvbGxiYXJUaGVtZTo6aGFzQnV0dG9ucyhTY3JvbGxiYXJUaGVt
ZUNsaWVudCogc2Nyb2xsYmFyKQogewogICAgIGludCBzdGFydFNpemU7CiAgICAgaW50IGVuZFNp
emU7CkBAIC01OSwyNyArNjAsMjcgQEAgYm9vbCBSZW5kZXJTY3JvbGxiYXJUaGVtZTo6aGFzQnV0
dG9ucyhTY3JvbGxiYXIqIHNjcm9sbGJhcikKICAgICByZXR1cm4gKHN0YXJ0U2l6ZSArIGVuZFNp
emUpIDw9IChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/
IHNjcm9sbGJhci0+d2lkdGgoKSA6IHNjcm9sbGJhci0+aGVpZ2h0KCkpOwogfQogCi1ib29sIFJl
bmRlclNjcm9sbGJhclRoZW1lOjpoYXNUaHVtYihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK2Jvb2wg
UmVuZGVyU2Nyb2xsYmFyVGhlbWU6Omhhc1RodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3Jv
bGxiYXIpCiB7CiAgICAgcmV0dXJuIHRyYWNrTGVuZ3RoKHNjcm9sbGJhcikgLSB0aHVtYkxlbmd0
aChzY3JvbGxiYXIpID49IDA7CiB9CiAKLWludCBSZW5kZXJTY3JvbGxiYXJUaGVtZTo6bWluaW11
bVRodW1iTGVuZ3RoKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoraW50IFJlbmRlclNjcm9sbGJhclRo
ZW1lOjptaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikK
IHsKICAgICByZXR1cm4gdG9SZW5kZXJTY3JvbGxiYXIoc2Nyb2xsYmFyKS0+bWluaW11bVRodW1i
TGVuZ3RoKCk7CiB9CiAKLUludFJlY3QgUmVuZGVyU2Nyb2xsYmFyVGhlbWU6OmJhY2tCdXR0b25S
ZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnRUeXBlLCBib29sKQor
SW50UmVjdCBSZW5kZXJTY3JvbGxiYXJUaGVtZTo6YmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0VHlwZSwgYm9vbCkKIHsKICAg
ICByZXR1cm4gdG9SZW5kZXJTY3JvbGxiYXIoc2Nyb2xsYmFyKS0+YnV0dG9uUmVjdChwYXJ0VHlw
ZSk7CiB9CiAKLUludFJlY3QgUmVuZGVyU2Nyb2xsYmFyVGhlbWU6OmZvcndhcmRCdXR0b25SZWN0
KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnRUeXBlLCBib29sKQorSW50
UmVjdCBSZW5kZXJTY3JvbGxiYXJUaGVtZTo6Zm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0VHlwZSwgYm9vbCkKIHsKICAg
ICByZXR1cm4gdG9SZW5kZXJTY3JvbGxiYXIoc2Nyb2xsYmFyKS0+YnV0dG9uUmVjdChwYXJ0VHlw
ZSk7CiB9CiAKLUludFJlY3QgUmVuZGVyU2Nyb2xsYmFyVGhlbWU6OnRyYWNrUmVjdChTY3JvbGxi
YXIqIHNjcm9sbGJhciwgYm9vbCkKK0ludFJlY3QgUmVuZGVyU2Nyb2xsYmFyVGhlbWU6OnRyYWNr
UmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBib29sKQogewogICAgIGlmICgh
aGFzQnV0dG9ucyhzY3JvbGxiYXIpKQogICAgICAgICByZXR1cm4gc2Nyb2xsYmFyLT5mcmFtZVJl
Y3QoKTsKQEAgLTkxLDcgKzkyLDcgQEAgSW50UmVjdCBSZW5kZXJTY3JvbGxiYXJUaGVtZTo6dHJh
Y2tSZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBib29sKQogICAgIHJldHVybiB0b1JlbmRlclNj
cm9sbGJhcihzY3JvbGxiYXIpLT50cmFja1JlY3Qoc3RhcnRMZW5ndGgsIGVuZExlbmd0aCk7CiB9
CiAKLUludFJlY3QgUmVuZGVyU2Nyb2xsYmFyVGhlbWU6OmNvbnN0cmFpblRyYWNrUmVjdFRvVHJh
Y2tQaWVjZXMoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCitJbnRS
ZWN0IFJlbmRlclNjcm9sbGJhclRoZW1lOjpjb25zdHJhaW5UcmFja1JlY3RUb1RyYWNrUGllY2Vz
KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
IAogICAgIEludFJlY3QgYmFja1JlY3QgPSB0b1JlbmRlclNjcm9sbGJhcihzY3JvbGxiYXIpLT50
cmFja1BpZWNlUmVjdFdpdGhNYXJnaW5zKEJhY2tUcmFja1BhcnQsIHJlY3QpOwogICAgIEludFJl
Y3QgZm9yd2FyZFJlY3QgPSB0b1JlbmRlclNjcm9sbGJhcihzY3JvbGxiYXIpLT50cmFja1BpZWNl
UmVjdFdpdGhNYXJnaW5zKEZvcndhcmRUcmFja1BhcnQsIHJlY3QpOwpAQCAtMTEyLDI3ICsxMTMs
MjcgQEAgdm9pZCBSZW5kZXJTY3JvbGxiYXJUaGVtZTo6cGFpbnRTY3JvbGxDb3JuZXIoU2Nyb2xs
VmlldyosIEdyYXBoaWNzQ29udGV4dCogY29udGUKICAgICBjb250ZXh0LT5maWxsUmVjdChjb3Ju
ZXJSZWN0LCBDb2xvcjo6d2hpdGUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogfQogCi12b2lkIFJl
bmRlclNjcm9sbGJhclRoZW1lOjpwYWludFNjcm9sbGJhckJhY2tncm91bmQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3ZvaWQgUmVuZGVyU2Nyb2xsYmFy
VGhlbWU6OnBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCiB7CiAgICAgdG9SZW5kZXJTY3JvbGxi
YXIoc2Nyb2xsYmFyKS0+cGFpbnRQYXJ0KGNvbnRleHQsIFNjcm9sbGJhckJHUGFydCwgc2Nyb2xs
YmFyLT5mcmFtZVJlY3QoKSk7CiB9CiAKLXZvaWQgUmVuZGVyU2Nyb2xsYmFyVGhlbWU6OnBhaW50
VHJhY2tCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIFJlbmRlclNjcm9sbGJhclRoZW1lOjpw
YWludFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhclRo
ZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgdG9SZW5k
ZXJTY3JvbGxiYXIoc2Nyb2xsYmFyKS0+cGFpbnRQYXJ0KGNvbnRleHQsIFRyYWNrQkdQYXJ0LCBy
ZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJTY3JvbGxiYXJUaGVtZTo6cGFpbnRUcmFja1BpZWNlKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJl
Y3QmIHJlY3QsIFNjcm9sbGJhclBhcnQgcGFydCkKK3ZvaWQgUmVuZGVyU2Nyb2xsYmFyVGhlbWU6
OnBhaW50VHJhY2tQaWVjZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhclRoZW1l
Q2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIFNjcm9sbGJhclBhcnQgcGFy
dCkKIHsKICAgICB0b1JlbmRlclNjcm9sbGJhcihzY3JvbGxiYXIpLT5wYWludFBhcnQoY29udGV4
dCwgcGFydCwgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyU2Nyb2xsYmFyVGhlbWU6OnBhaW50QnV0
dG9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0
IEludFJlY3QmIHJlY3QsIFNjcm9sbGJhclBhcnQgcGFydCkKK3ZvaWQgUmVuZGVyU2Nyb2xsYmFy
VGhlbWU6OnBhaW50QnV0dG9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyVGhl
bWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBw
YXJ0KQogewogICAgIHRvUmVuZGVyU2Nyb2xsYmFyKHNjcm9sbGJhciktPnBhaW50UGFydChjb250
ZXh0LCBwYXJ0LCByZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJTY3JvbGxiYXJUaGVtZTo6cGFpbnRU
aHVtYihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25z
dCBJbnRSZWN0JiByZWN0KQordm9pZCBSZW5kZXJTY3JvbGxiYXJUaGVtZTo6cGFpbnRUaHVtYihH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIs
IGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgdG9SZW5kZXJTY3JvbGxiYXIoc2Nyb2xsYmFy
KS0+cGFpbnRQYXJ0KGNvbnRleHQsIFRodW1iUGFydCwgcmVjdCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyVGhlbWUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5oCmluZGV4IDcwYzI0YTVlYTJl
ZDc5YmI5ZjhmYWQwMjEzN2M2MzU2OWQ5OTYzYzQuLmVjOTJiZGM5MzkzYWNjNmYyZGE2YTE3NGY3
N2I5ZjNlYTE0MWZlNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTY3JvbGxiYXJUaGVtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
Y3JvbGxiYXJUaGVtZS5oCkBAIC00NiwzNSArNDYsMzUgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKFNjcm9sbFZpZXcqLCBHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIGNvcm5lclJlY3QpOwogCi0gICAgdmlydHVhbCBib29sIHNo
b3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYgZXZlbnQpIHsgcmV0dXJuIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLT5zaG91bGRD
ZW50ZXJPblRodW1iKHNjcm9sbGJhciwgZXZlbnQpOyB9CisgICAgdmlydHVhbCBib29sIHNob3Vs
ZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JiBldmVudCkgeyByZXR1cm4gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkt
PnNob3VsZENlbnRlck9uVGh1bWIoc2Nyb2xsYmFyLCBldmVudCk7IH0KICAgICAKICAgICB2aXJ0
dWFsIGRvdWJsZSBpbml0aWFsQXV0b3Njcm9sbFRpbWVyRGVsYXkoKSB7IHJldHVybiBTY3JvbGxi
YXJUaGVtZTo6dGhlbWUoKS0+aW5pdGlhbEF1dG9zY3JvbGxUaW1lckRlbGF5KCk7IH0KICAgICB2
aXJ0dWFsIGRvdWJsZSBhdXRvc2Nyb2xsVGltZXJEZWxheSgpIHsgcmV0dXJuIFNjcm9sbGJhclRo
ZW1lOjp0aGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpOyB9CiAKLSAgICB2aXJ0dWFsIHZv
aWQgcmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIHsgcmV0dXJuIFNjcm9s
bGJhclRoZW1lOjp0aGVtZSgpLT5yZWdpc3RlclNjcm9sbGJhcihzY3JvbGxiYXIpOyB9Ci0gICAg
dmlydHVhbCB2b2lkIHVucmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIHsg
cmV0dXJuIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLT51bnJlZ2lzdGVyU2Nyb2xsYmFyKHNjcm9s
bGJhcik7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqIHNjcm9sbGJhcikgeyByZXR1cm4gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCktPnJl
Z2lzdGVyU2Nyb2xsYmFyKHNjcm9sbGJhcik7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3Rl
clNjcm9sbGJhcihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKSB7IHJldHVybiBTY3Jv
bGxiYXJUaGVtZTo6dGhlbWUoKS0+dW5yZWdpc3RlclNjcm9sbGJhcihzY3JvbGxiYXIpOyB9CiAK
LSAgICB2aXJ0dWFsIGludCBtaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyKik7CisgICAgdmly
dHVhbCBpbnQgbWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CiAKLSAg
ICB2b2lkIGJ1dHRvblNpemVzQWxvbmdUcmFja0F4aXMoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGlu
dCYgYmVmb3JlU2l6ZSwgaW50JiBhZnRlclNpemUpOworICAgIHZvaWQgYnV0dG9uU2l6ZXNBbG9u
Z1RyYWNrQXhpcyhTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBpbnQmIGJlZm9yZVNp
emUsIGludCYgYWZ0ZXJTaXplKTsKICAgICAKICAgICBzdGF0aWMgUmVuZGVyU2Nyb2xsYmFyVGhl
bWUqIHJlbmRlclNjcm9sbGJhclRoZW1lKCk7CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGJv
b2wgaGFzQnV0dG9ucyhTY3JvbGxiYXIqKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFzVGh1bWIoU2Ny
b2xsYmFyKik7CisgICAgdmlydHVhbCBib29sIGhhc0J1dHRvbnMoU2Nyb2xsYmFyVGhlbWVDbGll
bnQqKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsK
IAotICAgIHZpcnR1YWwgSW50UmVjdCBiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXIqLCBTY3JvbGxi
YXJQYXJ0LCBib29sIHBhaW50aW5nID0gZmFsc2UpOwotICAgIHZpcnR1YWwgSW50UmVjdCBmb3J3
YXJkQnV0dG9uUmVjdChTY3JvbGxiYXIqLCBTY3JvbGxiYXJQYXJ0LCBib29sIHBhaW50aW5nID0g
ZmFsc2UpOwotICAgIHZpcnR1YWwgSW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFyKiwgYm9vbCBw
YWludGluZyA9IGZhbHNlKTsKKyAgICB2aXJ0dWFsIEludFJlY3QgYmFja0J1dHRvblJlY3QoU2Ny
b2xsYmFyVGhlbWVDbGllbnQqLCBTY3JvbGxiYXJQYXJ0LCBib29sIHBhaW50aW5nID0gZmFsc2Up
OworICAgIHZpcnR1YWwgSW50UmVjdCBmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXJUaGVtZUNs
aWVudCosIFNjcm9sbGJhclBhcnQsIGJvb2wgcGFpbnRpbmcgPSBmYWxzZSk7CisgICAgdmlydHVh
bCBJbnRSZWN0IHRyYWNrUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIGJvb2wgcGFpbnRpbmcg
PSBmYWxzZSk7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xsYmFyQmFja2dyb3Vu
ZChHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXIqKTsgICAgCi0gICAgdmlydHVhbCB2b2lkIHBh
aW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhciosIGNvbnN0IElu
dFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUcmFja1BpZWNlKEdyYXBoaWNzQ29udGV4
dCosIFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmLCBTY3JvbGxiYXJQYXJ0KTsKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyKiwgY29uc3Qg
SW50UmVjdCYsIFNjcm9sbGJhclBhcnQpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFRodW1iKEdy
YXBoaWNzQ29udGV4dCosIFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJh
clRoZW1lQ2xpZW50Kik7ICAgIAorICAgIHZpcnR1YWwgdm9pZCBwYWludFRyYWNrQmFja2dyb3Vu
ZChHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUcmFja1BpZWNlKEdyYXBoaWNzQ29udGV4dCosIFNj
cm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgSW50UmVjdCYsIFNjcm9sbGJhclBhcnQpOworICAg
IHZpcnR1YWwgdm9pZCBwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVt
ZUNsaWVudCosIGNvbnN0IEludFJlY3QmLCBTY3JvbGxiYXJQYXJ0KTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNv
bnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwgSW50UmVjdCBjb25zdHJhaW5UcmFja1JlY3RU
b1RyYWNrUGllY2VzKFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIElu
dFJlY3QgY29uc3RyYWluVHJhY2tSZWN0VG9UcmFja1BpZWNlcyhTY3JvbGxiYXJUaGVtZUNsaWVu
dCosIGNvbnN0IEludFJlY3QmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129619</attachid>
            <date>2012-02-29 20:08:22 -0800</date>
            <delta_ts>2012-02-29 20:31:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78872-20120229200821.patch</filename>
            <type>text/plain</type>
            <size>173785</size>
            <attacher name="Tien-Ren Chen">trchen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5Mjk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGM3MzMyMDcwZDg5N2Mw
YjI2YmIyMmE2MGY3MWFkNjcwOWE3ZmQzZi4uMTgxYjM5ZTRkODE2MWE3OWQxY2UyY2NhNGNmOThk
YTQ3MzcxYWJjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2MCBAQAorMjAxMi0wMi0yOSAgVGll
bi1SZW4gQ2hlbiAgPHRyY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBT
Y3JvbGxiYXJMYXllckNocm9taXVtL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsIGZvciBDQy1zaWRlIHNj
cm9sbGJhciBwYWludGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Nzg4NzIKKworICAgICAgICBXSVAgRE8gTk9UIENPTU1JVAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMh
KQorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3Jv
bGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbExh
eWVyRm9yRnJhbWVWaWV3KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld0hvcml6b250YWxTY3JvbGxiYXJMYXllckRp
ZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVW
aWV3VmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZSk6CisgICAgICAgICogcGxhdGZvcm0v
U2Nyb2xsYmFyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c2Nyb2xsYmFyT3Zl
cmxheVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyOjpnZXRUaWNrbWFya3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjppc1Njcm9s
bGFibGVBcmVhQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6aXNTY3JvbGxW
aWV3U2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c2V0RnJhbWVSZWN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuaDoKKyAgICAgICAgKFNjcm9sbGJhcik6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OngpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyOjp5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6d2lkdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6bG9jYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpwYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyOjpyb290KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6ZnJhbWVSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXI6OmlzQ3VzdG9tU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhcjo6b3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjp2
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmN1cnJlbnRQb3MpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjp2aXNpYmxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXI6OnRvdGFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1heGlt
dW0pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpjb250cm9sU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXI6OmxpbmVTdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhcjo6cGFnZVN0ZXApOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpwcmVzc2VkUGFy
dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmhvdmVyZWRQYXJ0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGJhcjo6c3R5bGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhcjo6ZW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWUuaDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWU6OnVw
ZGF0ZUVuYWJsZWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZTo6cGFp
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWU6OmhpdFRlc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWU6OnVwZGF0ZVNjcm9sbGJhck92ZXJsYXlTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZTo6aW52YWxpZGF0ZVBhcnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lOjppbnZhbGlkYXRlUGFydCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZTo6c2hvdWxkQ2VudGVyT25UaHVtYik6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZTo6c2hvdWxkU25hcEJhY2tUb0RyYWdPcmlnaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWU6OnNob3VsZERyYWdEb2N1bWVudEluc3Rl
YWRPZlRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lOjp0aHVtYlBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lOjp0aHVtYkxlbmd0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZTo6dHJhY2tQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZTo6dHJhY2tMZW5ndGgpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyVGhlbWU6OnJlZ2lzdGVyU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhclRoZW1lOjp1bnJlZ2lzdGVyU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9TY3JvbGxiYXJUaGVtZUNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoU2Nyb2xsYmFyVGhlbWVDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
VGhlbWVDbGllbnQ6On5TY3JvbGxiYXJUaGVtZUNsaWVudCk6CisgICAgICAgICogcGxhdGZvcm0v
U2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
VGhlbWVDb21wb3NpdGU6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
Q29tcG9zaXRlOjpoaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ29t
cG9zaXRlOjppbnZhbGlkYXRlUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVt
ZUNvbXBvc2l0ZTo6c3BsaXRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjp1c2VkVG90YWxTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjp0aHVtYlBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjp0aHVtYkxl
bmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6bWluaW11
bVRodW1iTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ29tcG9zaXRl
Ojp0cmFja1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ29tcG9z
aXRlOjp0cmFja0xlbmd0aCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21w
b3NpdGUuaDoKKyAgICAgICAgKFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjpwYWludFNjcm9sbGJhckJhY2tncm91bmQp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OnBhaW50VHJhY2tC
YWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjpw
YWludFRyYWNrUGllY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDb21wb3Np
dGU6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ29tcG9z
aXRlOjpwYWludFRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ29tcG9z
aXRlOjpwYWludFRpY2ttYXJrcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNv
bXBvc2l0ZTo6Y29uc3RyYWluVHJhY2tSZWN0VG9UcmFja1BpZWNlcyk6CisgICAgICAgICogcGxh
dGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtOjpoYXNUaHVtYik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJUaGVtZUNocm9taXVtOjpiYWNrQnV0dG9uUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtOjpmb3J3YXJkQnV0dG9uUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtOjp0cmFja1JlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bTo6cGFpbnRUcmFja0JhY2tncm91bmQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bTo6cGFpbnRUaWNrbWFya3Mp
OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uaDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW06Omhhc0J1dHRvbnMpOgor
ICAgICAgICAoU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vY2hy
b21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUFuZHJvaWQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUFuZHJvaWQ6OnBhaW50U2Nyb2xsYmFyQmFja2dyb3Vu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtQW5kcm9pZDo6c2hv
dWxkQ2VudGVyT25UaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9t
aXVtQW5kcm9pZDo6YnV0dG9uU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVt
ZUNocm9taXVtQW5kcm9pZDo6bWluaW11bVRodW1iTGVuZ3RoKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtQW5kcm9pZC5oOgorICAgICAgICAoU2Ny
b2xsYmFyVGhlbWVDaHJvbWl1bUFuZHJvaWQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L1Njcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50VHJhY2tQaWVjZSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50QnV0dG9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUaHVtYik6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXg6OnNob3VsZENlbnRlck9u
VGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4Ojpi
dXR0b25TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51
eDo6bWluaW11bVRodW1iTGVuZ3RoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9TY3Jv
bGxiYXJUaGVtZUNocm9taXVtTGludXguaDoKKyAgICAgICAgKFNjcm9sbGJhclRoZW1lQ2hyb21p
dW1MaW51eCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bU1hYy5oOgorICAgICAgICAoU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYyk6CisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OnNjcm9sbGJhclN0YXRlVG9UaGVtZVN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50R2l2ZW5UaWNrbWFya3MpOgorICAgICAg
ICAqIHBsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1XaW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6c2hvdWxkU25hcEJhY2tU
b0RyYWdPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdp
bjo6cGFpbnRUcmFja1BpZWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hy
b21pdW1XaW46OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
Q2hyb21pdW1XaW46OnBhaW50VGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bVdpbjo6Z2V0VGhlbWVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJUaGVtZUNocm9taXVtV2luOjpnZXRUaGVtZUFycm93U3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6Z2V0Q2xhc3NpY1RoZW1lU3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6c2hvdWxkQ2VudGVyT25U
aHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpidXR0
b25TaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9t
aXVtV2luLmg6CisgICAgICAgIChTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9lZmwvU2Nyb2xsYmFyVGhlbWVFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWVFZmw6OnJlZ2lzdGVyU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhclRoZW1lRWZsOjp1bnJlZ2lzdGVyU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9lZmwvU2Nyb2xsYmFyVGhlbWVFZmwuaDoKKyAgICAgICAgKFNjcm9sbGJhclRoZW1lRWZs
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hy
b21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6aGFzQ29u
dGVudHNMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpMYXllckNocm9t
aXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06
OnNldEhvcml6b250YWxTY3JvbGxiYXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNo
cm9taXVtOjpzZXRWZXJ0aWNhbFNjcm9sbGJhckxheWVyKToKKyAgICAgICAgKExheWVyQ2hyb21p
dW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVy
Q2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhckxheWVyQ2hyb21pdW06OlNjcm9sbGJhckxheWVyQ2hyb21pdW0pOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJv
bWl1bS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3Jv
bGxiYXJUaGVtZUNocm9taXVtQW5kcm9pZC5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChTY3JvbGxiYXJMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTeW5j
aHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVN5bmNo
cm9uaXplcjo6Y29sbGVjdEV4aXN0aW5nQ0NMYXllckltcGxSZWN1cnNpdmUpOgorICAgICAgICAo
V2ViQ29yZTo6VHJlZVN5bmNocm9uaXplcjo6cmV1c2VPckNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZVJlY3Vyc2l2
ZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU3luY2hyb25pemVyOjpyZXNvbHZlSW50ZXJMYXll
clBvaW50ZXJzUmVjdXJzaXZlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UcmVlU3luY2hyb25pemVyLmg6CisgICAgICAgIChUcmVlU3luY2hyb25pemVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckltcGw6OnNjcm9sbEJ5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChD
Q0xheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
Y3JvbGxiYXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NTY3JvbGxiYXI6OngpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXI6OnkpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXI6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDU2Nyb2xsYmFyOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXI6OnNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXI6OmxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDU2Nyb2xsYmFyOjpwYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3Jv
bGxiYXI6OnJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXI6OnNldEZyYW1lUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhcjo6ZnJhbWVSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDU2Nyb2xsYmFyOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
U2Nyb2xsYmFyOjppbnZhbGlkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJh
cjo6c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFy
OjpnZXRUaWNrbWFya3MpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXI6OmlzU2Nyb2xs
YWJsZUFyZWFBY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXI6OmlzU2Nyb2xs
Vmlld1Njcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhcjo6Y29udmVydEZy
b21Db250YWluaW5nV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyOjppc0N1
c3RvbVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhcjo6b3JpZW50YXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXI6OnZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDU2Nyb2xsYmFyOjpjdXJyZW50UG9zKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Ny
b2xsYmFyOjp2aXNpYmxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhcjo6dG90
YWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyOjptYXhpbXVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyOjpjb250cm9sU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1Njcm9sbGJhcjo6bGluZVN0ZXApOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXI6
OnBhZ2VTdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyOjpwcmVzc2VkUGFydCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhcjo6aG92ZXJlZFBhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTY3JvbGxiYXI6OnN0eWxlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1Njcm9sbGJhcjo6ZW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhcjo6c2V0
RW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhcjo6c2V0Q3VycmVudFBvcyk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhcjo6Q0NTY3JvbGxiYXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTY3JvbGxiYXI6OnB1bGxQcm9wZXJ0aWVzRnJvbSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXIuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKENDU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9s
bGJhckxheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6
d2lsbERyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OmFwcGVu
ZFF1YWRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpkaWREcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpwYWludCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bUFuZHJvaWQuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ0NT
Y3JvbGxiYXJMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllcklt
cGw6OnNjcm9sbGJhcik6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3Rr
LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhl
bWVHdGs6OnJlZ2lzdGVyU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRo
ZW1lR3RrOjp1bnJlZ2lzdGVyU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJh
clRoZW1lR3RrOjp1cGRhdGVTY3JvbGxiYXJzRnJhbWVUaGlja25lc3MpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6Omhhc1RodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhclRoZW1lR3RrOjpiYWNrQnV0dG9uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXJUaGVtZUd0azo6Zm9yd2FyZEJ1dHRvblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyVGhlbWVHdGs6OnRyYWNrUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJU
aGVtZUd0azo6dGh1bWJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lR3Rr
OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6c2hvdWxkQ2Vu
dGVyT25UaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6YnV0dG9u
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6bWluaW11bVRodW1i
TGVuZ3RoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpoYXNCdXR0b25zKToKKyAgICAgICAg
KFNjcm9sbGJhclRoZW1lR3RrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhl
bWVHdGsyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldFdpZGdldEZvclNjcm9sbGJhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUcmFja0JhY2tncm91bmQp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50U2Nyb2xsYmFyQmFj
a2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUaHVt
Yik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRCdXR0b24pOgor
ICAgICAgICAqIHBsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VHJhY2tCYWNrZ3JvdW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpwYWludFNjcm9sbGJhckJhY2tncm91bmQp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VGh1bWIpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50QnV0dG9uKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMuaDoKKyAgICAgICAgKFNjcm9sbGJhclRo
ZW1lTWFjKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW06Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lTWFjOjpy
ZWdpc3RlclNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6
dW5yZWdpc3RlclNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1h
Yzo6c2V0TmV3UGFpbnRlckZvclNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJUaGVtZU1hYzo6cGFpbnRlckZvclNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXJUaGVtZU1hYzo6dXBkYXRlU2Nyb2xsYmFyT3ZlcmxheVN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhclRoZW1lTWFjOjpoYXNCdXR0b25zKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhclRoZW1lTWFjOjpoYXNUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJUaGVtZU1hYzo6YmFja0J1dHRvblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
VGhlbWVNYWM6OmZvcndhcmRCdXR0b25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJh
clRoZW1lTWFjOjp0cmFja1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVN
YWM6Om1pbmltdW1UaHVtYkxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVt
ZU1hYzo6c2hvdWxkQ2VudGVyT25UaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJU
aGVtZU1hYzo6c2hvdWxkRHJhZ0RvY3VtZW50SW5zdGVhZE9mVGh1bWIpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM6OnVwZGF0ZUVuYWJsZWRTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6cGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL21v
Y2svU2Nyb2xsYmFyVGhlbWVNb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRo
ZW1lTW9jazo6dHJhY2tSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lTW9j
azo6cGFpbnRUcmFja0JhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhl
bWVNb2NrOjpwYWludFRodW1iKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL1Njcm9sbGJhclRo
ZW1lTW9jay5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNb2NrOjpoYXNCdXR0
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lTW9jazo6aGFzVGh1bWIpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNb2NrOjpiYWNrQnV0dG9uUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1vY2s6OmZvcndhcmRCdXR0b25SZWN0KToK
KyAgICAgICAgKFNjcm9sbGJhclRoZW1lTW9jayk6CisgICAgICAgICogcGxhdGZvcm0vcXQvU2Ny
b2xsYmFyVGhlbWVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdHlsZU9wdGlvblNsaWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVF0OjpwYWludCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVF0OjpoaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhclRoZW1lUXQ6OnNob3VsZENlbnRlck9uVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWVRdDo6aW52YWxpZGF0ZVBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyVGhlbWVRdDo6dGh1bWJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJUaGVtZVF0Ojp0aHVtYkxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVt
ZVF0Ojp0cmFja1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lUXQ6
OnRyYWNrTGVuZ3RoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0Lmg6
CisgICAgICAgIChTY3JvbGxiYXJUaGVtZVF0KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2Ny
b2xsYmFyVGhlbWVTYWZhcmkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVT
YWZhcmk6Omhhc0J1dHRvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVTYWZh
cmk6Omhhc1RodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lU2FmYXJpOjpi
YWNrQnV0dG9uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVNhZmFyaTo6
Zm9yd2FyZEJ1dHRvblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVTYWZh
cmk6OnRyYWNrUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVNhZmFyaTo6
bWluaW11bVRodW1iTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lU2Fm
YXJpOjpzaG91bGRDZW50ZXJPblRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRo
ZW1lU2FmYXJpOjpwYWludFRyYWNrQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXJUaGVtZVNhZmFyaTo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyVGhlbWVTYWZhcmk6OnBhaW50VGh1bWIpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9TY3Jv
bGxiYXJUaGVtZVNhZmFyaS5oOgorICAgICAgICAoU2Nyb2xsYmFyVGhlbWVTYWZhcmkpOgorICAg
ICAgICAqIHBsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJUaGVtZVdpbjo6aGFzVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyVGhlbWVXaW46OmJhY2tCdXR0b25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhclRoZW1lV2luOjpmb3J3YXJkQnV0dG9uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXJUaGVtZVdpbjo6dHJhY2tSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRo
ZW1lV2luOjpzaG91bGRDZW50ZXJPblRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJh
clRoZW1lV2luOjpzaG91bGRTbmFwQmFja1RvRHJhZ09yaWdpbik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJUaGVtZVdpbjo6cGFpbnRUcmFja0JhY2tncm91bmQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyVGhlbWVXaW46OnBhaW50VHJhY2tQaWVjZSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJUaGVtZVdpbjo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6
cGFpbnRHcmlwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lV2luOjpwYWlu
dFRodW1iKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lV2luOjpoYXNCdXR0b25zKToKKyAgICAgICAg
KFNjcm9sbGJhclRoZW1lV2luKToKKyAgICAgICAgKiBwbGF0Zm9ybS93eC9TY3JvbGxiYXJUaGVt
ZVd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lV3g6Omhhc1RodW1iKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lV3g6Om1pbmltdW1UaHVtYkxlbmd0aCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVd4OjpidXR0b25TaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lV3g6OnNwbGl0VHJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyVGhlbWVXeDo6YmFja0J1dHRvblJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyVGhlbWVXeDo6Zm9yd2FyZEJ1dHRvblJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyVGhlbWVXeDo6dHJhY2tSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhclRoZW1lV3g6OnBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS93eC9TY3JvbGxiYXJUaGVt
ZVd4Lmg6CisgICAgICAgIChTY3JvbGxiYXJUaGVtZVd4KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhclRoZW1lV3g6Omhhc0J1dHRvbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJT
Y3JvbGxiYXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvUmVuZGVyU2Nyb2xsYmFyKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU2Nyb2xsYmFyVGhlbWU6OmJ1dHRvblNpemVzQWxvbmdUcmFja0F4aXMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyVGhlbWU6Omhhc0J1dHRvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyVGhlbWU6Omhhc1RodW1iKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNjcm9sbGJhclRoZW1lOjptaW5pbXVtVGh1bWJMZW5ndGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyVGhlbWU6OmJhY2tCdXR0b25SZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNjcm9sbGJhclRoZW1lOjpmb3J3YXJkQnV0dG9uUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTY3JvbGxiYXJUaGVtZTo6dHJhY2tSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNjcm9sbGJhclRoZW1lOjpjb25zdHJhaW5UcmFja1JlY3RUb1Ry
YWNrUGllY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNjcm9sbGJhclRoZW1lOjpwYWlu
dFNjcm9sbGJhckJhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFy
VGhlbWU6OnBhaW50VHJhY2tCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNj
cm9sbGJhclRoZW1lOjpwYWludFRyYWNrUGllY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U2Nyb2xsYmFyVGhlbWU6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNj
cm9sbGJhclRoZW1lOjpwYWludFRodW1iKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2Ny
b2xsYmFyVGhlbWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNjcm9sbGJhclRoZW1lOjpz
aG91bGRDZW50ZXJPblRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNjcm9sbGJhclRo
ZW1lOjpyZWdpc3RlclNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTY3JvbGxi
YXJUaGVtZTo6dW5yZWdpc3RlclNjcm9sbGJhcik6CisgICAgICAgIChSZW5kZXJTY3JvbGxiYXJU
aGVtZSk6CisKIDIwMTItMDItMjkgIEFtaSBGaXNjaG1hbiAgPGZpc2NobWFuQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBDb250aW51ZSB0aGUgc2VhcmNoIGZvciBwbGF5YWJsZSBtaW1lIHR5cGVz
IGFtb25nIDxzb3VyY2U+IGNoaWxkcmVuIG9mIDx2aWRlbz4gZXZlbiB3aGVuIHVzaW5nIGRhdGE6
IFVSTHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAwMDQxOTU3OTllZmQ4MmIzM2M3YzY0MzA5NDM1ZjA3
MTJmNWQyZDk5Li4wMmVkMDg4YjM3NmYwOTU2MGFlMDZkYjlhNTc5OThlOTY3NDNkZWViIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCkBAIC0yOTEsNiArMjkxLDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9T
Y3JvbGxhYmxlQXJlYS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxiYXIuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWUuaCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vU2Nyb2xsYmFyVGhlbWVDbGllbnQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vU2Vh
cmNoUG9wdXBNZW51LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9TaGFyZWRCdWZmZXJDaHVua1JlYWRlci5oJywKQEAgLTMy
MzUsNiArMzIzNiw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJUZXh0dXJlU3ViSW1hZ2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9NZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5
ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9T
b2xpZENvbG9yTGF5ZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1NvbGlkQ29sb3JMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFzLmNwcCcsCkBAIC0zMzUwLDYg
KzMzNTMsMTAgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1NjaGVkdWxlclN0YXRlTWFjaGluZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1bGVyU3RhdGVNYWNoaW5lLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGhyZWFkUHJveHkuaCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXIuY3Bw
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJh
ci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9s
bGJhckxheWVySW1wbC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94
eS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IDEzYjZjNDUxZWJlYzVkYWM3ODBlMWZjMjBhZjMyMjZmYzkyNWVlNDQuLjNi
NWMxMTVmNmY0MWUxYTU5MzQ5MzZhY2MxYTg5ZTZlMjljZTUyY2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU2MDYsNiArNTYw
Niw3IEBACiAJCUM1RDRBQTdBMTE2QkFGQjYwMDY5Q0E5MyAvKiBHbHlwaE1ldHJpY3NNYXAuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1RDRBQTc4MTE2
QkFGQjYwMDY5Q0E5MyAvKiBHbHlwaE1ldHJpY3NNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDNUU5QjY3NzEwNjk3RTEzMDBDN0JCMUEgLyog
U3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDNUU5QjY3NjEwNjk3RTEzMDBDN0JCMUEgLyogU3RvcmFnZUV2ZW50
RGlzcGF0Y2hlci5jcHAgKi87IH07CiAJCUM1RUJERDg0MTA1RURERUMwMDU2ODE2RiAvKiBTdG9y
YWdlRXZlbnREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDNUVCREQ4MTEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0
Y2hlci5oICovOyB9OworCQlDNkIzMUIyRTE0Rjg0MUZCMDA4OUYyM0YgLyogU2Nyb2xsYmFyVGhl
bWVDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM2OTE2MTQ3MTRGNkVCQTcwMDQ2Mzc1QyAvKiBTY3JvbGxiYXJUaGVtZUNsaWVudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUM2RDc0QUQ1MDlB
QTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1
MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLzsgfTsKIAkJQzZENzRBRTQwOUFBMjkw
QTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFFMzA5QUEyOTBBMDAwQjBBNTIg
LyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCAqLzsgfTsKIAkJQzZGMDhGQkMxNDMwRkU4
RjAwNjg1ODQ5IC8qIE11dGF0aW9uUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RjA4RkI5MTQzMEZFOEYwMDY4NTg0OSAvKiBNdXRhdGlv
blJlY29yZC5jcHAgKi87IH07CkBAIC0xMjU5Niw2ICsxMjU5Nyw3IEBACiAJCUM1RUJERDgxMTA1
RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQzVGNzY1QjQxNEUxRDQxNDAwNkM4OTlCIC8qIFBhc3RlYm9hcmRT
dHJhdGVneS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXN0ZWJvYXJkU3Ry
YXRlZ3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzVGNzY1QkExNEUxRUNGNDAw
NkM4OTlCIC8qIFBsYXRmb3JtUGFzdGVib2FyZE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFBsYXRmb3JtUGFzdGVib2FyZE1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQzY5MTYxNDcxNEY2RUJBNzAwNDYzNzVDIC8qIFNjcm9sbGJhclRo
ZW1lQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGJhclRo
ZW1lQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUQzMDlBQTI4
MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxl
Y3Rpb25MaXN0TGV2ZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQzZGMDhGQjkxNDMwRkU4RjAwNjg1ODQ5IC8qIE11dGF0aW9uUmVjb3JkLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE11dGF0aW9uUmVjb3JkLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5OTMzLDYgKzE5OTM1LDcgQEAKIAkJCQlCQ0FBOTBD
MjBBN0VCQTYwMDA4QjEyMjkgLyogU2Nyb2xsYmFyLmNwcCAqLywKIAkJCQlCQzdCMkFGODA0NTA4
MjQxMDBBODAwMEYgLyogU2Nyb2xsYmFyLmggKi8sCiAJCQkJMEZFNzE0MTUxNDIxODlGQzAwREIz
M0JBIC8qIFNjcm9sbGJhclRoZW1lLmNwcCAqLywKKwkJCQlDNjkxNjE0NzE0RjZFQkE3MDA0NjM3
NUMgLyogU2Nyb2xsYmFyVGhlbWVDbGllbnQuaCAqLywKIAkJCQlCQzhCODU0QTBFN0M3RjU2MDBB
QjY5ODQgLyogU2Nyb2xsYmFyVGhlbWUuaCAqLywKIAkJCQlCQzE0MDI4ODBFODM2ODA4MDAzMTk3
MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwICovLAogCQkJCUJDMTQwMjg5MEU4MzY4
MDgwMDMxOTcxNyAvKiBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oICovLApAQCAtMjM3MDcsNiAr
MjM3MTAsNyBAQAogCQkJCUNBM0JGNjdFMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBRTFGQTcxMjkzOURCNzAwNENCMDI2IC8qIFNjcm9s
bEFuaW1hdG9yTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTlCODA4MjQ1RTU5MDAxRTlB
QkMgLyogU2Nyb2xsYmFyLmggaW4gSGVhZGVycyAqLywKKwkJCQlDNkIzMUIyRTE0Rjg0MUZCMDA4
OUYyM0YgLyogU2Nyb2xsYmFyVGhlbWVDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEI4
NTRCMEU3QzdGNTYwMEFCNjk4NCAvKiBTY3JvbGxiYXJUaGVtZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxNDAyOEIwRTgzNjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzhCODUzRTBFN0M3RjExMDBBQjY5ODQgLyogU2Nyb2xsYmFy
VGhlbWVNYWMuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRv
ckNocm9taXVtLmNwcAppbmRleCBmZjA1M2RmNjI1MjIxOWM2NjRmNjkzMWRlYzc1YTM0ZThjZjA3
MmMwLi43Zjc0NGJmNDAzYzQzYzZkM2UwY2VmOTY0MTNlNDJkY2Y3MWNmMmIzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGlu
YXRvckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJv
bWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcApAQCAtMjcsOCArMjcsMTQgQEAK
IAogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAKKyNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNp
bmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5o
IgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNTgsMTQgKzY0LDU2IEBAIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp+U2Nyb2xsaW5nQ29vcmRp
bmF0b3IoKQogICAgIGRlbGV0ZSBtX3ByaXZhdGU7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OmZyYW1lVmlld0hvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZp
ZXcqLCBHcmFwaGljc0xheWVyKiBob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIpCitzdGF0aWMgR3Jh
cGhpY3NMYXllciogc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcp
CiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCEKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisgICAgRnJhbWUqIGZyYW1lID0gZnJhbWVWaWV3LT5mcmFtZSgpOworICAgIGlmICgh
ZnJhbWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9
IGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlclZpZXcpCisgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiByZW5kZXJWaWV3LT5jb21wb3NpdG9yKCktPnNjcm9sbExh
eWVyKCk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCiB9CiAKLXZvaWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OmZyYW1lVmlld1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJh
bWVWaWV3KiwgR3JhcGhpY3NMYXllciogdmVydGljYWxTY3JvbGxiYXJMYXllcikKK3ZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld0hvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENo
YW5nZShGcmFtZVZpZXcqIGZyYW1lVmlldywgR3JhcGhpY3NMYXllciogaG9yaXpvbnRhbFNjcm9s
bGJhckxheWVyKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQhCisgICAgR3JhcGhpY3NMYXll
ciogc2Nyb2xsTGF5ZXIgPSBzY3JvbGxMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpOworICAg
IEFTU0VSVChzY3JvbGxMYXllcik7CisgICAgaWYgKCFob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIp
CisgICAgICAgIHNjcm9sbExheWVyLT5wbGF0Zm9ybUxheWVyKCktPnNldEhvcml6b250YWxTY3Jv
bGxiYXJMYXllcigwKTsKKyAgICBlbHNlIHsKKyAgICAgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIg
PSBmcmFtZVZpZXctPmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9s
bGJhcik7CisgICAgICAgIGlmIChzY3JvbGxiYXItPnRoZW1lKCkgIT0gU2Nyb2xsYmFyVGhlbWU6
OnRoZW1lKCkgfHwgc2Nyb2xsYmFyLT5pc0N1c3RvbVNjcm9sbGJhcigpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIFJlZlB0cjxTY3JvbGxiYXJMYXllckNocm9taXVtPiBzY3JvbGxi
YXJMYXllciA9IFNjcm9sbGJhckxheWVyQ2hyb21pdW06OmNyZWF0ZShzY3JvbGxiYXIpOworICAg
ICAgICBob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShzY3JvbGxi
YXJMYXllci5nZXQoKSk7CisgICAgICAgIHNjcm9sbExheWVyLT5wbGF0Zm9ybUxheWVyKCktPnNl
dEhvcml6b250YWxTY3JvbGxiYXJMYXllcihzY3JvbGxiYXJMYXllci5nZXQoKSk7CisgICAgfQor
fQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdWZXJ0aWNhbFNjcm9sbGJh
ckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBHcmFwaGljc0xheWVyKiB2ZXJ0
aWNhbFNjcm9sbGJhckxheWVyKQoreworICAgIEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyID0g
c2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KTsKKyAgICBBU1NFUlQoc2Nyb2xsTGF5
ZXIpOworICAgIGlmICghdmVydGljYWxTY3JvbGxiYXJMYXllcikKKyAgICAgICAgc2Nyb2xsTGF5
ZXItPnBsYXRmb3JtTGF5ZXIoKS0+c2V0VmVydGljYWxTY3JvbGxiYXJMYXllcigwKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBmcmFtZVZpZXctPnZlcnRpY2Fs
U2Nyb2xsYmFyKCk7CisgICAgICAgIEFTU0VSVChzY3JvbGxiYXIpOworICAgICAgICBpZiAoc2Ny
b2xsYmFyLT50aGVtZSgpICE9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpIHx8IHNjcm9sbGJhci0+
aXNDdXN0b21TY3JvbGxiYXIoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZWZQ
dHI8U2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bT4gc2Nyb2xsYmFyTGF5ZXIgPSBTY3JvbGxiYXJMYXll
ckNocm9taXVtOjpjcmVhdGUoc2Nyb2xsYmFyKTsKKyAgICAgICAgdmVydGljYWxTY3JvbGxiYXJM
YXllci0+c2V0Q29udGVudHNUb01lZGlhKHNjcm9sbGJhckxheWVyLmdldCgpKTsKKyAgICAgICAg
c2Nyb2xsTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKS0+c2V0VmVydGljYWxTY3JvbGxiYXJMYXllcihz
Y3JvbGxiYXJMYXllci5nZXQoKSk7CisgICAgfQogfQogCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpzZXRTY3JvbGxMYXllcihHcmFwaGljc0xheWVyKiBzY3JvbGxMYXllcikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCmluZGV4IDNiOWMxOTVjZmY1NTM5MTY1NTYyMDNlMmYy
Y2M0ZmU1ZDhmOWE1MWUuLmRmZDQ2NDk3YTE5ZDZjMjlhODhmN2RmM2IxYzdkOGNkZGNiYTAzYjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcApAQCAtMTEyLDYgKzExMiwyNyBA
QCBTY3JvbGxiYXI6On5TY3JvbGxiYXIoKQogICAgIG1fdGhlbWUtPnVucmVnaXN0ZXJTY3JvbGxi
YXIodGhpcyk7CiB9CiAKK1Njcm9sbGJhck92ZXJsYXlTdHlsZSBTY3JvbGxiYXI6OnNjcm9sbGJh
ck92ZXJsYXlTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEgPyBT
Y3JvbGxiYXJPdmVybGF5U3R5bGVEZWZhdWx0IDogbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsYmFy
T3ZlcmxheVN0eWxlKCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyOjpnZXRUaWNrbWFya3MoVmVjdG9y
PEludFJlY3Q+JiB0aWNrbWFya3MpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEp
CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmdldFRpY2ttYXJrcyh0aWNrbWFya3MpOworfQor
Citib29sIFNjcm9sbGJhcjo6aXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aXNBY3RpdmUoKTsK
K30KKworYm9vbCBTY3JvbGxiYXI6OmlzU2Nyb2xsVmlld1Njcm9sbGJhcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHBhcmVudCgpICYmIHBhcmVudCgpLT5pc0ZyYW1lVmlldygpICYmIHN0YXRpY19j
YXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+aXNTY3JvbGxWaWV3U2Nyb2xsYmFyKHRoaXMpOwor
fQorCiB2b2lkIFNjcm9sbGJhcjo6b2Zmc2V0RGlkQ2hhbmdlKCkKIHsKICAgICBBU1NFUlQobV9z
Y3JvbGxhYmxlQXJlYSk7CkBAIC00MzQsNyArNDU1LDcgQEAgYm9vbCBTY3JvbGxiYXI6Om1vdXNl
RG93bihjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKIAogdm9pZCBTY3JvbGxiYXI6OnNl
dEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIC8vIEdldCBvdXIgd2luZG93
IHJlc2l6ZXIgcmVjdCBhbmQgc2VlIGlmIHdlIG92ZXJsYXAuICBBZGp1c3QgdG8gYXZvaWQgdGhl
IG92ZXJsYXAKKyAgICAvLyBHZXQgb3VyIHdpbmRvdyByZXNpemVyIHJlY3QgYW5kIHNlZSBpZiB3
ZSBvdmVybGFwLiBBZGp1c3QgdG8gYXZvaWQgdGhlIG92ZXJsYXAKICAgICAvLyBpZiBuZWNlc3Nh
cnkuCiAgICAgSW50UmVjdCBhZGp1c3RlZFJlY3QocmVjdCk7CiAgICAgYm9vbCBvdmVybGFwc1Jl
c2l6ZXIgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGJhci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKaW5kZXggMzlhYzI1
NDY1ZDE0NTVhNTk5MmNkMjVjMjIyOGRkMmI2NTM0YTYzZC4uMTcxNDEzYTg1NWM5ZDJiNzBlNTM1
YjJlMTljNTBiZjk1OWM0NmM4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYmFyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKQEAg
LTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgU2Nyb2xsYmFyX2gKICNkZWZpbmUgU2Nyb2xsYmFyX2gK
IAorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lQ2xpZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlw
ZXMuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIldpZGdldC5oIgpAQCAtNDAsMTMg
KzQxLDYwIEBAIGNsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKIGNsYXNzIFNjcm9sbGFibGVBcmVh
OwogY2xhc3MgU2Nyb2xsYmFyVGhlbWU7CiAKLWNsYXNzIFNjcm9sbGJhciA6IHB1YmxpYyBXaWRn
ZXQgeworY2xhc3MgU2Nyb2xsYmFyIDogcHVibGljIFdpZGdldCwKKyAgICAgICAgICAgICAgICAg
IHB1YmxpYyBTY3JvbGxiYXJUaGVtZUNsaWVudCB7CisKIHB1YmxpYzoKICAgICAvLyBNdXN0IGJl
IGltcGxlbWVudGVkIGJ5IHBsYXRmb3JtcyB0aGF0IGNhbid0IHNpbXBseSB1c2UgdGhlIFNjcm9s
bGJhciBiYXNlIGNsYXNzLiAgUmlnaHQgbm93IHRoZSBvbmx5IHBsYXRmb3JtIHRoYXQgaXMgbm90
IHVzaW5nIHRoZSBiYXNlIGNsYXNzIGlzIEdUSy4KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTY3Jv
bGxiYXI+IGNyZWF0ZU5hdGl2ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKTsKIAogICAg
IHZpcnR1YWwgflNjcm9sbGJhcigpOwogCisgICAgLy8gU2Nyb2xsYmFyVGhlbWVDbGllbnQgaW1w
bGVtZW50YXRpb24uCisgICAgdmlydHVhbCBpbnQgeCgpIGNvbnN0IHsgcmV0dXJuIFdpZGdldDo6
eCgpOyB9CisgICAgdmlydHVhbCBpbnQgeSgpIGNvbnN0IHsgcmV0dXJuIFdpZGdldDo6eSgpOyB9
CisgICAgdmlydHVhbCBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBXaWRnZXQ6OndpZHRoKCk7
IH0KKyAgICB2aXJ0dWFsIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBXaWRnZXQ6OmhlaWdo
dCgpOyB9CisgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBXaWRnZXQ6
OnNpemUoKTsgfQorICAgIHZpcnR1YWwgSW50UG9pbnQgbG9jYXRpb24oKSBjb25zdCB7IHJldHVy
biBXaWRnZXQ6OmxvY2F0aW9uKCk7IH0KKworICAgIHZpcnR1YWwgU2Nyb2xsVmlldyogcGFyZW50
KCkgY29uc3QgeyByZXR1cm4gV2lkZ2V0OjpwYXJlbnQoKTsgfQorICAgIHZpcnR1YWwgU2Nyb2xs
Vmlldyogcm9vdCgpIGNvbnN0IHsgcmV0dXJuIFdpZGdldDo6cm9vdCgpOyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIEludFJl
Y3QgZnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gV2lkZ2V0OjpmcmFtZVJlY3QoKTsgfQorCisg
ICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKSB7IFdpZGdldDo6aW52YWxpZGF0ZSgpOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmKTsKKworICAgIHZp
cnR1YWwgU2Nyb2xsYmFyT3ZlcmxheVN0eWxlIHNjcm9sbGJhck92ZXJsYXlTdHlsZSgpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBnZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+JikgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsYWJsZUFyZWFBY3RpdmUoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNTY3JvbGxWaWV3U2Nyb2xsYmFyKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFs
IEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYgd2lu
ZG93UG9pbnQpIHsgcmV0dXJuIFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93KHdp
bmRvd1BvaW50KTsgfQorCisgICAgdmlydHVhbCBib29sIGlzQ3VzdG9tU2Nyb2xsYmFyKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9y
aWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vcmllbnRhdGlvbjsgfQorCisgICAgdmlydHVh
bCBpbnQgdmFsdWUoKSBjb25zdCB7IHJldHVybiBscm91bmRmKG1fY3VycmVudFBvcyk7IH0KKyAg
ICB2aXJ0dWFsIGZsb2F0IGN1cnJlbnRQb3MoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRQb3M7
IH0KKyAgICB2aXJ0dWFsIGludCB2aXNpYmxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaWJs
ZVNpemU7IH0KKyAgICB2aXJ0dWFsIGludCB0b3RhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX3Rv
dGFsU2l6ZTsgfQorICAgIHZpcnR1YWwgaW50IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX3Rv
dGFsU2l6ZSAtIG1fdmlzaWJsZVNpemU7IH0KKyAgICB2aXJ0dWFsIFNjcm9sbGJhckNvbnRyb2xT
aXplIGNvbnRyb2xTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb250cm9sU2l6ZTsgfQorCisgICAg
dmlydHVhbCBpbnQgbGluZVN0ZXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVTdGVwOyB9CisgICAg
dmlydHVhbCBpbnQgcGFnZVN0ZXAoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VTdGVwOyB9CisKKyAg
ICB2aXJ0dWFsIFNjcm9sbGJhclBhcnQgcHJlc3NlZFBhcnQoKSBjb25zdCB7IHJldHVybiBtX3By
ZXNzZWRQYXJ0OyB9CisgICAgdmlydHVhbCBTY3JvbGxiYXJQYXJ0IGhvdmVyZWRQYXJ0KCkgY29u
c3QgeyByZXR1cm4gbV9ob3ZlcmVkUGFydDsgfQorCisgICAgdmlydHVhbCB2b2lkIHN0eWxlQ2hh
bmdlZCgpIHsgfQorCisgICAgdmlydHVhbCBib29sIGVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBt
X2VuYWJsZWQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlZChib29sKTsKKwogICAgIC8v
IENhbGxlZCBieSB0aGUgU2Nyb2xsYWJsZUFyZWEgd2hlbiB0aGUgc2Nyb2xsIG9mZnNldCBjaGFu
Z2VzLgogICAgIHZvaWQgb2Zmc2V0RGlkQ2hhbmdlKCk7CiAKQEAgLTU3LDM0ICsxMDUsMTggQEAg
cHVibGljOgogICAgIHZvaWQgZGlzY29ubmVjdEZyb21TY3JvbGxhYmxlQXJlYSgpIHsgbV9zY3Jv
bGxhYmxlQXJlYSA9IDA7IH0KICAgICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEoKSBj
b25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVBcmVhOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXND
dXN0b21TY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIFNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vcmllbnRhdGlvbjsgfQot
Ci0gICAgaW50IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbHJvdW5kZihtX2N1cnJlbnRQb3MpOyB9
Ci0gICAgZmxvYXQgY3VycmVudFBvcygpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFBvczsgfQog
ICAgIGludCBwcmVzc2VkUG9zKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzc2VkUG9zOyB9Ci0gICAg
aW50IHZpc2libGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlU2l6ZTsgfQotICAgIGlu
dCB0b3RhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX3RvdGFsU2l6ZTsgfQotICAgIGludCBtYXhp
bXVtKCkgY29uc3QgeyByZXR1cm4gbV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXplOyB9ICAgICAg
ICAKLSAgICBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY29udHJvbFNpemU7IH0KIAotICAgIGludCBsaW5lU3RlcCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGluZVN0ZXA7IH0KLSAgICBpbnQgcGFnZVN0ZXAoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VTdGVw
OyB9CiAgICAgZmxvYXQgcGl4ZWxTdGVwKCkgY29uc3QgeyByZXR1cm4gbV9waXhlbFN0ZXA7IH0K
IAotICAgIFNjcm9sbGJhclBhcnQgcHJlc3NlZFBhcnQoKSBjb25zdCB7IHJldHVybiBtX3ByZXNz
ZWRQYXJ0OyB9Ci0gICAgU2Nyb2xsYmFyUGFydCBob3ZlcmVkUGFydCgpIGNvbnN0IHsgcmV0dXJu
IG1faG92ZXJlZFBhcnQ7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0SG92ZXJlZFBhcnQoU2Nyb2xs
YmFyUGFydCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFByZXNzZWRQYXJ0KFNjcm9sbGJhclBhcnQp
OwogCiAgICAgdm9pZCBzZXRTdGVwcyhpbnQgbGluZVN0ZXAsIGludCBwYWdlU3RlcCwgaW50IHBp
eGVsc1BlclN0ZXAgPSAxKTsKICAgICB2b2lkIHNldFByb3BvcnRpb24oaW50IHZpc2libGVTaXpl
LCBpbnQgdG90YWxTaXplKTsKICAgICB2b2lkIHNldFByZXNzZWRQb3MoaW50IHApIHsgbV9wcmVz
c2VkUG9zID0gcDsgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKIAotICAgIGJvb2wgZW5hYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fZW5hYmxlZDsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFibGVkKGJv
b2wgZSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IElu
dFJlY3QmIGRhbWFnZVJlY3QpOwogCiAgICAgdmlydHVhbCBib29sIGlzT3ZlcmxheVNjcm9sbGJh
cigpIGNvbnN0OwogICAgIGJvb2wgc2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKTsKQEAg
LTk3LDcgKzEyOSw3IEBAIHB1YmxpYzoKICAgICBib29sIG1vdXNlTW92ZWQoY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50Jik7CiAgICAgdm9pZCBtb3VzZUVudGVyZWQoKTsKICAgICBib29sIG1vdXNl
RXhpdGVkKCk7Ci0gICAgCisKICAgICAvLyBVc2VkIGJ5IHNvbWUgcGxhdGZvcm0gc2Nyb2xsYmFy
cyB0byBrbm93IHdoZW4gdGhleSd2ZSBiZWVuIHJlbGVhc2VkIGZyb20gY2FwdHVyZS4KICAgICBi
b29sIG1vdXNlVXAoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CiAKQEAgLTEwNiwxOCArMTM4
LDEzIEBAIHB1YmxpYzoKICAgICBTY3JvbGxiYXJUaGVtZSogdGhlbWUoKSBjb25zdCB7IHJldHVy
biBtX3RoZW1lOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0UGFyZW50KFNjcm9sbFZpZXcqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZp
cnR1YWwgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0Jik7Ci0gICAgCiAgICAgYm9v
bCBzdXBwcmVzc0ludmFsaWRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3VwcHJlc3NJbnZhbGlk
YXRpb247IH0KICAgICB2b2lkIHNldFN1cHByZXNzSW52YWxpZGF0aW9uKGJvb2wgcykgeyBtX3N1
cHByZXNzSW52YWxpZGF0aW9uID0gczsgfQogCi0gICAgdmlydHVhbCB2b2lkIHN0eWxlQ2hhbmdl
ZCgpIHsgfQotCiAgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNv
bnN0IEludFJlY3QmKSBjb25zdDsKICAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZyb21Db250
YWluaW5nVmlldyhjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgCisKICAgICB2aXJ0dWFsIElu
dFBvaW50IGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAg
ICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IEludFBv
aW50JikgY29uc3Q7CiAKQEAgLTE2MCw3ICsxODcsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBUaW1l
cjxTY3JvbGxiYXI+IG1fc2Nyb2xsVGltZXI7CiAgICAgYm9vbCBtX292ZXJsYXBzUmVzaXplcjsK
LSAgICAKKwogICAgIGJvb2wgbV9zdXBwcmVzc0ludmFsaWRhdGlvbjsKIAogcHJpdmF0ZToKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZS5oCmluZGV4IDJhODNkNTM4NWVhYmJj
YWNmZjhiZTU2MzQ5YjRkMTllMzJiYjZmY2MuLjVmZTQ1YjFhNDczNjU3MTZiZjJiNzJhNDZkYWJh
ZWI2YWYwYmZmZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJh
clRoZW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWUuaApA
QCAtMzMsNyArMzMsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBQbGF0Zm9ybU1v
dXNlRXZlbnQ7Ci1jbGFzcyBTY3JvbGxiYXI7CitjbGFzcyBTY3JvbGxiYXJUaGVtZUNsaWVudDsK
IGNsYXNzIFNjcm9sbFZpZXc7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYm
IEVOQUJMRShSVUJCRVJfQkFORElORykKQEAgLTQ2LDEwICs0NiwxMCBAQCBwdWJsaWM6CiAgICAg
U2Nyb2xsYmFyVGhlbWUoKSB7IH0KICAgICB2aXJ0dWFsIH5TY3JvbGxiYXJUaGVtZSgpIHt9Owog
Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUVuYWJsZWRTdGF0ZShTY3JvbGxiYXIqKSB7IH07Cisg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUVuYWJsZWRTdGF0ZShTY3JvbGxiYXJUaGVtZUNsaWVudCop
IHsgfTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludChTY3JvbGxiYXIqLCBHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBJbnRSZWN0JiAvKmRhbWFnZVJlY3QqLykgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2aXJ0dWFsIFNjcm9sbGJhclBhcnQgaGl0VGVzdChTY3JvbGxiYXIqLCBjb25zdCBQbGF0Zm9y
bU1vdXNlRXZlbnQmKSB7IHJldHVybiBOb1BhcnQ7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnQo
U2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiAv
KmRhbWFnZVJlY3QqLykgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIFNjcm9sbGJhclBh
cnQgaGl0VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYpIHsgcmV0dXJuIE5vUGFydDsgfQogICAgIAogICAgIHZpcnR1YWwgaW50IHNjcm9sbGJhclRo
aWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSA9IFJlZ3VsYXJTY3JvbGxiYXIpIHsgcmV0dXJu
IDA7IH0KIApAQCAtNTcsMTMgKzU3LDEzIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0NvbnRyb2xUaW50cygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIHVzZXNPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNjcm9sbGJhck92ZXJsYXlTdHlsZShTY3JvbGxiYXIqKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU2Nyb2xsYmFyT3ZlcmxheVN0eWxlKFNjcm9sbGJh
clRoZW1lQ2xpZW50KikgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCkge30K
ICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaW52YWxpZGF0ZU9uTW91c2VFbnRlckV4aXQoKSB7IHJl
dHVybiBmYWxzZTsgfQogCi0gICAgdm9pZCBpbnZhbGlkYXRlUGFydHMoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIsIFNjcm9sbGJhckNvbnRyb2xQYXJ0TWFzayBtYXNrKQorICAgIHZvaWQgaW52YWxpZGF0
ZVBhcnRzKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJhckNvbnRyb2xQ
YXJ0TWFzayBtYXNrKQogICAgIHsKICAgICAgICAgaWYgKG1hc2sgJiBCYWNrQnV0dG9uU3RhcnRQ
YXJ0KQogICAgICAgICAgICAgaW52YWxpZGF0ZVBhcnQoc2Nyb2xsYmFyLCBCYWNrQnV0dG9uU3Rh
cnRQYXJ0KTsKQEAgLTgxLDcgKzgxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgaW52YWxpZGF0
ZVBhcnQoc2Nyb2xsYmFyLCBGb3J3YXJkQnV0dG9uRW5kUGFydCk7CiAgICAgfQogCi0gICAgdmly
dHVhbCB2b2lkIGludmFsaWRhdGVQYXJ0KFNjcm9sbGJhciosIFNjcm9sbGJhclBhcnQpIHt9Cisg
ICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVQYXJ0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Ny
b2xsYmFyUGFydCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoU2Ny
b2xsVmlldyosIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29ybmVy
UmVjdCkgeyBkZWZhdWx0UGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgY29ybmVyUmVjdCk7IH0K
ICAgICBzdGF0aWMgdm9pZCBkZWZhdWx0UGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjb3JuZXJSZWN0KSB7IGNvbnRleHQtPmZpbGxSZWN0
KGNvcm5lclJlY3QsIENvbG9yOjp3aGl0ZSwgQ29sb3JTcGFjZURldmljZVJHQik7IH0KQEAgLTkz
LDIxICs5MywyMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFVwQ29udGVudFNoYWRv
d0xheWVyKEdyYXBoaWNzTGF5ZXIqKSB7IH0KICNlbmRpZgogCi0gICAgdmlydHVhbCBib29sIHNo
b3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jikg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU25hcEJhY2tUb0RyYWdP
cmlnaW4oU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JikgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRHJhZ0RvY3VtZW50SW5zdGVhZE9mVGh1bWIo
U2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JikgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICB2aXJ0dWFsIGludCB0aHVtYlBvc2l0aW9uKFNjcm9sbGJhciopIHsgcmV0dXJuIDA7IH0g
Ly8gVGhlIHBvc2l0aW9uIG9mIHRoZSB0aHVtYiByZWxhdGl2ZSB0byB0aGUgdHJhY2suCi0gICAg
dmlydHVhbCBpbnQgdGh1bWJMZW5ndGgoU2Nyb2xsYmFyKikgeyByZXR1cm4gMDsgfSAvLyBUaGUg
bGVuZ3RoIG9mIHRoZSB0aHVtYiBhbG9uZyB0aGUgYXhpcyBvZiB0aGUgc2Nyb2xsYmFyLgotICAg
IHZpcnR1YWwgaW50IHRyYWNrUG9zaXRpb24oU2Nyb2xsYmFyKikgeyByZXR1cm4gMDsgfSAvLyBU
aGUgcG9zaXRpb24gb2YgdGhlIHRyYWNrIHJlbGF0aXZlIHRvIHRoZSBzY3JvbGxiYXIuCi0gICAg
dmlydHVhbCBpbnQgdHJhY2tMZW5ndGgoU2Nyb2xsYmFyKikgeyByZXR1cm4gMDsgfSAvLyBUaGUg
bGVuZ3RoIG9mIHRoZSB0cmFjayBhbG9uZyB0aGUgYXhpcyBvZiB0aGUgc2Nyb2xsYmFyLgorICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50Kiwg
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkU25hcEJhY2tUb0RyYWdPcmlnaW4oU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGREcmFnRG9jdW1lbnRJbnN0ZWFkT2ZUaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVu
dCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBpbnQgdGh1bWJQb3NpdGlvbihTY3JvbGxiYXJUaGVtZUNsaWVudCopIHsgcmV0dXJuIDA7
IH0gLy8gVGhlIHBvc2l0aW9uIG9mIHRoZSB0aHVtYiByZWxhdGl2ZSB0byB0aGUgdHJhY2suCisg
ICAgdmlydHVhbCBpbnQgdGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKSB7IHJldHVy
biAwOyB9IC8vIFRoZSBsZW5ndGggb2YgdGhlIHRodW1iIGFsb25nIHRoZSBheGlzIG9mIHRoZSBz
Y3JvbGxiYXIuCisgICAgdmlydHVhbCBpbnQgdHJhY2tQb3NpdGlvbihTY3JvbGxiYXJUaGVtZUNs
aWVudCopIHsgcmV0dXJuIDA7IH0gLy8gVGhlIHBvc2l0aW9uIG9mIHRoZSB0cmFjayByZWxhdGl2
ZSB0byB0aGUgc2Nyb2xsYmFyLgorICAgIHZpcnR1YWwgaW50IHRyYWNrTGVuZ3RoKFNjcm9sbGJh
clRoZW1lQ2xpZW50KikgeyByZXR1cm4gMDsgfSAvLyBUaGUgbGVuZ3RoIG9mIHRoZSB0cmFjayBh
bG9uZyB0aGUgYXhpcyBvZiB0aGUgc2Nyb2xsYmFyLgogCiAgICAgdmlydHVhbCBpbnQgbWF4T3Zl
cmxhcEJldHdlZW5QYWdlcygpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4
KCk7IH0KIAogICAgIHZpcnR1YWwgZG91YmxlIGluaXRpYWxBdXRvc2Nyb2xsVGltZXJEZWxheSgp
IHsgcmV0dXJuIDAuMjU7IH0KICAgICB2aXJ0dWFsIGRvdWJsZSBhdXRvc2Nyb2xsVGltZXJEZWxh
eSgpIHsgcmV0dXJuIDAuMDU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclNjcm9sbGJh
cihTY3JvbGxiYXIqKSB7fQotICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNj
cm9sbGJhciopIHt9CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJh
clRoZW1lQ2xpZW50KikgeyB9CisgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJTY3JvbGxiYXIo
U2Nyb2xsYmFyVGhlbWVDbGllbnQqKSB7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc01vY2tUaGVt
ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxiYXJUaGVtZUNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg3MWM1MmU5MGI4OTkwZjg4NmE2
YjdkM2ZkNWZkNGU0ZGJmNjlmMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNsaWVudC5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFNjcm9sbGJhclRoZW1lQ2xpZW50X2gKKyNkZWZpbmUgU2Nyb2xsYmFyVGhlbWVDbGll
bnRfaAorCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5j
bHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgU2Nyb2xsVmlldzsKKworY2xhc3MgU2Nyb2xsYmFyVGhlbWVDbGllbnQg
eworcHVibGljOgorICAgIHZpcnR1YWwgaW50IHgoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBp
bnQgeSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCB3aWR0aCgpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIGludCBoZWlnaHQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIHNp
emUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRQb2ludCBsb2NhdGlvbigpIGNvbnN0ID0g
MDsKKworICAgIHZpcnR1YWwgU2Nyb2xsVmlldyogcGFyZW50KCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgU2Nyb2xsVmlldyogcm9vdCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBz
ZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIEludFJlY3QgZnJh
bWVSZWN0KCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmKSA9IDA7CisK
KyAgICB2aXJ0dWFsIFNjcm9sbGJhck92ZXJsYXlTdHlsZSBzY3JvbGxiYXJPdmVybGF5U3R5bGUo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldFRpY2ttYXJrcyhWZWN0b3I8SW50UmVj
dD4mKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsYWJsZUFyZWFBY3RpdmUo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsVmlld1Njcm9sbGJhcigpIGNv
bnN0ID0gMDsKKworICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nV2lu
ZG93KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkgPSAwOworCisgICAgdmlydHVhbCBib29s
IGlzQ3VzdG9tU2Nyb2xsYmFyKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgU2Nyb2xsYmFyT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24oKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGludCB2YWx1
ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0IGN1cnJlbnRQb3MoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBpbnQgdmlzaWJsZVNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBp
bnQgdG90YWxTaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IG1heGltdW0oKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSgpIGNv
bnN0ID0gMDsKKworICAgIHZpcnR1YWwgaW50IGxpbmVTdGVwKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgaW50IHBhZ2VTdGVwKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBTY3JvbGxiYXJQ
YXJ0IHByZXNzZWRQYXJ0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgU2Nyb2xsYmFyUGFydCBo
b3ZlcmVkUGFydCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzdHlsZUNoYW5nZWQo
KSA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgZW5hYmxlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0RW5hYmxlZChib29sKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IH5TY3JvbGxiYXJUaGVtZUNsaWVudCgpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gU2NvbGxiYXJUaGVtZUNsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAKaW5kZXggNjJmZDVlNWQy
YzUwZWY5YjM1YjQxNzU0ZDA5YmJiMGUxZTZiZTM4ZS4uOWQ4MzM3NDJmOTJlZWJkNzBlMGFjYzE2
ZWUzNzg0YjNjMjMxNTc0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcApAQCAtMzMsMTUgKzMzLDE0IEBACiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
TW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlNjcm9sbGJhci5oIgotI2luY2x1ZGUgIlNjcm9sbGFi
bGVBcmVhLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVDbGllbnQuaCIKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWJvb2wgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OnBhaW50KFNjcm9sbGJhciogc2Nyb2xs
YmFyLCBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGFt
YWdlUmVjdCkKK2Jvb2wgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OnBhaW50KFNjcm9sbGJhclRo
ZW1lQ2xpZW50KiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBj
b25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQogewogICAgIC8vIENyZWF0ZSB0aGUgU2Nyb2xsYmFy
Q29udHJvbFBhcnRNYXNrIGJhc2VkIG9uIHRoZSBkYW1hZ2VSZWN0CiAgICAgU2Nyb2xsYmFyQ29u
dHJvbFBhcnRNYXNrIHNjcm9sbE1hc2sgPSBOb1BhcnQ7CkBAIC0xMTYsNyArMTE1LDcgQEAgYm9v
bCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6cGFpbnQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIEdy
YXBoaWNzQ29udGV4dCogZ3JhcGgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotU2Nyb2xsYmFyUGFy
dCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6aGl0VGVzdChTY3JvbGxiYXIqIHNjcm9sbGJhciwg
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQpCitTY3JvbGxiYXJQYXJ0IFNjcm9sbGJhclRo
ZW1lQ29tcG9zaXRlOjpoaXRUZXN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNv
bnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQogewogICAgIFNjcm9sbGJhclBhcnQgcmVzdWx0
ID0gTm9QYXJ0OwogICAgIGlmICghc2Nyb2xsYmFyLT5lbmFibGVkKCkpCkBAIC0xNTUsNyArMTU0
LDcgQEAgU2Nyb2xsYmFyUGFydCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6aGl0VGVzdChTY3Jv
bGxiYXIqIHNjcm9sbGJhciwgY29uc3QgUGxhdGYKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12
b2lkIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjppbnZhbGlkYXRlUGFydChTY3JvbGxiYXIqIHNj
cm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0KQordm9pZCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0
ZTo6aW52YWxpZGF0ZVBhcnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgU2Nyb2xs
YmFyUGFydCBwYXJ0KQogewogICAgIGlmIChwYXJ0ID09IE5vUGFydCkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTk1LDcgKzE5NCw3IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OmludmFs
aWRhdGVQYXJ0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0CiAgICAgc2Nyb2xs
YmFyLT5pbnZhbGlkYXRlUmVjdChyZXN1bHQpOwogfQogCi12b2lkIFNjcm9sbGJhclRoZW1lQ29t
cG9zaXRlOjpzcGxpdFRyYWNrKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiB1
bmNvbnN0cmFpbmVkVHJhY2tSZWN0LCBJbnRSZWN0JiBiZWZvcmVUaHVtYlJlY3QsIEludFJlY3Qm
IHRodW1iUmVjdCwgSW50UmVjdCYgYWZ0ZXJUaHVtYlJlY3QpCit2b2lkIFNjcm9sbGJhclRoZW1l
Q29tcG9zaXRlOjpzcGxpdFRyYWNrKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNv
bnN0IEludFJlY3QmIHVuY29uc3RyYWluZWRUcmFja1JlY3QsIEludFJlY3QmIGJlZm9yZVRodW1i
UmVjdCwgSW50UmVjdCYgdGh1bWJSZWN0LCBJbnRSZWN0JiBhZnRlclRodW1iUmVjdCkKIHsKICAg
ICAvLyBUaGlzIGZ1bmN0aW9uIHdvbid0IGV2ZW4gZ2V0IGNhbGxlZCB1bmxlc3Mgd2UncmUgYmln
IGVub3VnaCB0byBoYXZlIHNvbWUgY29tYmluYXRpb24gb2YgdGhlc2UgdGhyZWUgcmVjdHMgd2hl
cmUgYXQgbGVhc3QKICAgICAvLyBvbmUgb2YgdGhlbSBpcyBub24tZW1wdHkuCkBAIC0yMTUsNyAr
MjE0LDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6c3BsaXRUcmFjayhTY3JvbGxi
YXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgdW4KIAogLy8gUmV0dXJucyB0aGUgc2l6ZSBy
ZXByZXNlbnRlZCBieSB0cmFjayB0YWtpbmcgaW50byBhY2NvdW50IHNjcm9sbGluZyBwYXN0CiAv
LyB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4KLXN0YXRpYyBmbG9hdCB1c2VkVG90YWxTaXplKFNj
cm9sbGJhciogc2Nyb2xsYmFyKQorc3RhdGljIGZsb2F0IHVzZWRUb3RhbFNpemUoU2Nyb2xsYmFy
VGhlbWVDbGllbnQqIHNjcm9sbGJhcikKIHsKICAgICBmbG9hdCBvdmVyaGFuZ0F0U3RhcnQgPSAt
c2Nyb2xsYmFyLT5jdXJyZW50UG9zKCk7CiAgICAgZmxvYXQgb3ZlcmhhbmdBdEVuZCA9IHNjcm9s
bGJhci0+Y3VycmVudFBvcygpICsgc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpIC0gc2Nyb2xsYmFy
LT50b3RhbFNpemUoKTsKQEAgLTIyMyw3ICsyMjIsNyBAQCBzdGF0aWMgZmxvYXQgdXNlZFRvdGFs
U2l6ZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKICAgICByZXR1cm4gc2Nyb2xsYmFyLT50b3RhbFNp
emUoKSArIG92ZXJoYW5nOwogfQogCi1pbnQgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OnRodW1i
UG9zaXRpb24oU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCitpbnQgU2Nyb2xsYmFyVGhlbWVDb21wb3Np
dGU6OnRodW1iUG9zaXRpb24oU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKIHsKICAg
ICBpZiAoc2Nyb2xsYmFyLT5lbmFibGVkKCkpIHsKICAgICAgICAgZmxvYXQgc2l6ZSA9IHVzZWRU
b3RhbFNpemUoc2Nyb2xsYmFyKSAtIHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKTsKQEAgLTIzNiw3
ICsyMzUsNyBAQCBpbnQgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OnRodW1iUG9zaXRpb24oU2Ny
b2xsYmFyKiBzY3JvbGxiYXIpCiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBTY3JvbGxiYXJUaGVt
ZUNvbXBvc2l0ZTo6dGh1bWJMZW5ndGgoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCitpbnQgU2Nyb2xs
YmFyVGhlbWVDb21wb3NpdGU6OnRodW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3Jv
bGxiYXIpCiB7CiAgICAgaWYgKCFzY3JvbGxiYXItPmVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
IDA7CkBAIC0yNTAsMTggKzI0OSwxOCBAQCBpbnQgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OnRo
dW1iTGVuZ3RoKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogICAgIHJldHVybiBsZW5ndGg7CiB9CiAK
LWludCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6bWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJh
ciogc2Nyb2xsYmFyKQoraW50IFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjptaW5pbXVtVGh1bWJM
ZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKIHsKICAgICByZXR1cm4gc2Ny
b2xsYmFyVGhpY2tuZXNzKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7CiB9CiAKLWludCBTY3Jv
bGxiYXJUaGVtZUNvbXBvc2l0ZTo6dHJhY2tQb3NpdGlvbihTY3JvbGxiYXIqIHNjcm9sbGJhcikK
K2ludCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6dHJhY2tQb3NpdGlvbihTY3JvbGxiYXJUaGVt
ZUNsaWVudCogc2Nyb2xsYmFyKQogewogICAgIEludFJlY3QgY29uc3RyYWluZWRUcmFja1JlY3Qg
PSBjb25zdHJhaW5UcmFja1JlY3RUb1RyYWNrUGllY2VzKHNjcm9sbGJhciwgdHJhY2tSZWN0KHNj
cm9sbGJhcikpOwogICAgIHJldHVybiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6
b250YWxTY3JvbGxiYXIpID8gY29uc3RyYWluZWRUcmFja1JlY3QueCgpIC0gc2Nyb2xsYmFyLT54
KCkgOiBjb25zdHJhaW5lZFRyYWNrUmVjdC55KCkgLSBzY3JvbGxiYXItPnkoKTsKIH0KIAotaW50
IFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjp0cmFja0xlbmd0aChTY3JvbGxiYXIqIHNjcm9sbGJh
cikKK2ludCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6dHJhY2tMZW5ndGgoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqIHNjcm9sbGJhcikKIHsKICAgICBJbnRSZWN0IGNvbnN0cmFpbmVkVHJhY2tSZWN0
ID0gY29uc3RyYWluVHJhY2tSZWN0VG9UcmFja1BpZWNlcyhzY3JvbGxiYXIsIHRyYWNrUmVjdChz
Y3JvbGxiYXIpKTsKICAgICByZXR1cm4gKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jp
em9udGFsU2Nyb2xsYmFyKSA/IGNvbnN0cmFpbmVkVHJhY2tSZWN0LndpZHRoKCkgOiBjb25zdHJh
aW5lZFRyYWNrUmVjdC5oZWlnaHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oCmluZGV4IDExYjNiZDQ3MDAxODdmZjE4MmIwNDViNDUy
Y2RjMjRkYTMzZTc1OTAuLjhmNjI5MTMzZTQzMjgyYzY2ZDNmMTk5ZDEyZDMwM2RlNzJlYzcwZWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9z
aXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3Np
dGUuaApAQCAtMzIsNDAgKzMyLDQwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2Ny
b2xsYmFyVGhlbWVDb21wb3NpdGUgOiBwdWJsaWMgU2Nyb2xsYmFyVGhlbWUgewogcHVibGljOgot
ICAgIHZpcnR1YWwgYm9vbCBwYWludChTY3JvbGxiYXIqLCBHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOworICAgIHZpcnR1YWwgYm9vbCBwYWludChT
Y3JvbGxiYXJUaGVtZUNsaWVudCosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRh
bWFnZVJlY3QpOwogCi0gICAgdmlydHVhbCBTY3JvbGxiYXJQYXJ0IGhpdFRlc3QoU2Nyb2xsYmFy
KiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CisgICAgdmlydHVhbCBTY3JvbGxiYXJQYXJ0
IGhpdFRlc3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUGFydChTY3JvbGxiYXIqLCBTY3JvbGxi
YXJQYXJ0KTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVBhcnQoU2Nyb2xsYmFyVGhlbWVD
bGllbnQqLCBTY3JvbGxiYXJQYXJ0KTsKIAotICAgIHZpcnR1YWwgaW50IHRodW1iUG9zaXRpb24o
U2Nyb2xsYmFyKik7Ci0gICAgdmlydHVhbCBpbnQgdGh1bWJMZW5ndGgoU2Nyb2xsYmFyKik7Ci0g
ICAgdmlydHVhbCBpbnQgdHJhY2tQb3NpdGlvbihTY3JvbGxiYXIqKTsKLSAgICB2aXJ0dWFsIGlu
dCB0cmFja0xlbmd0aChTY3JvbGxiYXIqKTsKKyAgICB2aXJ0dWFsIGludCB0aHVtYlBvc2l0aW9u
KFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CisgICAgdmlydHVhbCBpbnQgdGh1bWJMZW5ndGgoU2Ny
b2xsYmFyVGhlbWVDbGllbnQqKTsKKyAgICB2aXJ0dWFsIGludCB0cmFja1Bvc2l0aW9uKFNjcm9s
bGJhclRoZW1lQ2xpZW50Kik7CisgICAgdmlydHVhbCBpbnQgdHJhY2tMZW5ndGgoU2Nyb2xsYmFy
VGhlbWVDbGllbnQqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludFNjcm9sbENvcm5lcihTY3Jv
bGxWaWV3KiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgY29ybmVyUmVjdCk7CiAg
ICAgdmlydHVhbCB2b2lkIHBhaW50T3ZlcmhhbmdBcmVhcyhTY3JvbGxWaWV3KiwgR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgSW50UmVjdCYgaG9yaXpvbnRhbE92ZXJoYW5nQXJlYSwgY29uc3QgSW50
UmVjdCYgdmVydGljYWxPdmVyaGFuZ0FyZWEsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CiAK
IHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGJvb2wgaGFzQnV0dG9ucyhTY3JvbGxiYXIqKSA9IDA7
Ci0gICAgdmlydHVhbCBib29sIGhhc1RodW1iKFNjcm9sbGJhciopID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgaGFzQnV0dG9ucyhTY3JvbGxiYXJUaGVtZUNsaWVudCopID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgaGFzVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKSA9IDA7CiAKLSAgICB2aXJ0dWFs
IEludFJlY3QgYmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyKiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBw
YWludGluZyA9IGZhbHNlKSA9IDA7Ci0gICAgdmlydHVhbCBJbnRSZWN0IGZvcndhcmRCdXR0b25S
ZWN0KFNjcm9sbGJhciosIFNjcm9sbGJhclBhcnQsIGJvb2wgcGFpbnRpbmcgPSBmYWxzZSkgPSAw
OwotICAgIHZpcnR1YWwgSW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFyKiwgYm9vbCBwYWludGlu
ZyA9IGZhbHNlKSA9IDA7CisgICAgdmlydHVhbCBJbnRSZWN0IGJhY2tCdXR0b25SZWN0KFNjcm9s
bGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKSA9
IDA7CisgICAgdmlydHVhbCBJbnRSZWN0IGZvcndhcmRCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1l
Q2xpZW50KiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKSA9IDA7CisgICAg
dmlydHVhbCBJbnRSZWN0IHRyYWNrUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIGJvb2wgcGFp
bnRpbmcgPSBmYWxzZSkgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIHNwbGl0VHJhY2soU2Nyb2xs
YmFyKiwgY29uc3QgSW50UmVjdCYgdHJhY2ssIEludFJlY3QmIHN0YXJ0VHJhY2ssIEludFJlY3Qm
IHRodW1iLCBJbnRSZWN0JiBlbmRUcmFjayk7CisgICAgdmlydHVhbCB2b2lkIHNwbGl0VHJhY2so
U2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0JiB0cmFjaywgSW50UmVjdCYgc3Rh
cnRUcmFjaywgSW50UmVjdCYgdGh1bWIsIEludFJlY3QmIGVuZFRyYWNrKTsKICAgICAKLSAgICB2
aXJ0dWFsIGludCBtaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyKik7CisgICAgdmlydHVhbCBp
bnQgbWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCosIFNjcm9s
bGJhciopIHt9Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBoaWNz
Q29udGV4dCosIFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSB7fQotICAgIHZpcnR1YWwgdm9p
ZCBwYWludFRyYWNrUGllY2UoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyKiwgY29uc3QgSW50
UmVjdCYsIFNjcm9sbGJhclBhcnQpIHt9Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50QnV0dG9uKEdy
YXBoaWNzQ29udGV4dCosIFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmLCBTY3JvbGxiYXJQYXJ0
KSB7fQotICAgIHZpcnR1YWwgdm9pZCBwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCosIFNjcm9s
bGJhciosIGNvbnN0IEludFJlY3QmKSB7fQotICAgIHZpcnR1YWwgdm9pZCBwYWludFRpY2ttYXJr
cyhHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jikge30KKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCosIFNj
cm9sbGJhclRoZW1lQ2xpZW50KikgeyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50VHJhY2tCYWNr
Z3JvdW5kKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgSW50
UmVjdCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWludFRyYWNrUGllY2UoR3JhcGhpY3NDb250
ZXh0KiwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0JiwgU2Nyb2xsYmFyUGFy
dCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50QnV0dG9uKEdyYXBoaWNzQ29udGV4dCosIFNj
cm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgSW50UmVjdCYsIFNjcm9sbGJhclBhcnQpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRo
ZW1lQ2xpZW50KiwgY29uc3QgSW50UmVjdCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWludFRp
Y2ttYXJrcyhHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IElu
dFJlY3QmKSB7IH0KIAotICAgIHZpcnR1YWwgSW50UmVjdCBjb25zdHJhaW5UcmFja1JlY3RUb1Ry
YWNrUGllY2VzKFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmIHJlY3QpIHsgcmV0dXJuIHJlY3Q7
IH0KKyAgICB2aXJ0dWFsIEludFJlY3QgY29uc3RyYWluVHJhY2tSZWN0VG9UcmFja1BpZWNlcyhT
Y3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3QmIHJlY3QpIHsgcmV0dXJuIHJlY3Q7
IH0KIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5jcHAKaW5kZXggZjhjYjI4MTU0ODYxZTAxZGE3
MTEyNDkyMGM2MGQwNmEzN2U5YTE4My4uNjgyZDgyZDViMzM3OTE4YjI1ZDA5OGJhNzcxNzM0ZTc5
MTUwNWU5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Ny
b2xsYmFyVGhlbWVDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5jcHAKQEAgLTM5LDE0ICszOSwxNCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bTo6aGFzVGh1
bWIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCitib29sIFNjcm9sbGJhclRoZW1lQ2hyb21pdW06Omhh
c1RodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCiB7CiAgICAgLy8gVGhpcyBt
ZXRob2QgaXMganVzdCBjYWxsZWQgYXMgYSBwYWludC10aW1lIG9wdGltaXphdGlvbiB0byBzZWUg
aWYKICAgICAvLyBwYWludGluZyB0aGUgdGh1bWIgY2FuIGJlIHNraXBwZWQuICBXZSBkb24ndCBo
YXZlIHRvIGJlIGV4YWN0IGhlcmUuCiAgICAgcmV0dXJuIHRodW1iTGVuZ3RoKHNjcm9sbGJhcikg
PiAwOwogfQogCi1JbnRSZWN0IFNjcm9sbGJhclRoZW1lQ2hyb21pdW06OmJhY2tCdXR0b25SZWN0
KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wpCitJbnRSZWN0
IFNjcm9sbGJhclRoZW1lQ2hyb21pdW06OmJhY2tCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xp
ZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydCwgYm9vbCkKIHsKICAgICAvLyBXaW5k
b3dzIGFuZCBMaW51eCBqdXN0IGhhdmUgc2luZ2xlIGFycm93cy4KICAgICBpZiAocGFydCA9PSBC
YWNrQnV0dG9uRW5kUGFydCkKQEAgLTU2LDcgKzU2LDcgQEAgSW50UmVjdCBTY3JvbGxiYXJUaGVt
ZUNocm9taXVtOjpiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFy
UGEKICAgICByZXR1cm4gSW50UmVjdChzY3JvbGxiYXItPngoKSwgc2Nyb2xsYmFyLT55KCksIHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CiB9CiAKLUludFJlY3QgU2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bTo6Zm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJh
clBhcnQgcGFydCwgYm9vbCkKK0ludFJlY3QgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bTo6Zm9yd2Fy
ZEJ1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFy
dCBwYXJ0LCBib29sKQogewogICAgIC8vIFdpbmRvd3MgYW5kIExpbnV4IGp1c3QgaGF2ZSBzaW5n
bGUgYXJyb3dzLgogICAgIGlmIChwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQpCkBAIC03
NCw3ICs3NCw3IEBAIEludFJlY3QgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bTo6Zm9yd2FyZEJ1dHRv
blJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJhCiAgICAgcmV0dXJuIEludFJlY3Qo
eCwgeSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKIH0KIAotSW50UmVjdCBTY3JvbGxi
YXJUaGVtZUNocm9taXVtOjp0cmFja1JlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGJvb2wpCitJ
bnRSZWN0IFNjcm9sbGJhclRoZW1lQ2hyb21pdW06OnRyYWNrUmVjdChTY3JvbGxiYXJUaGVtZUNs
aWVudCogc2Nyb2xsYmFyLCBib29sKQogewogICAgIEludFNpemUgYnMgPSBidXR0b25TaXplKHNj
cm9sbGJhcik7CiAgICAgLy8gVGhlIGJ1dHRvbnMgYXQgdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRo
ZSBzY3JvbGxiYXIgYXJlIHNxdWFyZSwgc28gdGhlCkBAIC05MiwxNCArOTIsMTQgQEAgSW50UmVj
dCBTY3JvbGxiYXJUaGVtZUNocm9taXVtOjp0cmFja1JlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIs
IGJvb2wpCiAgICAgcmV0dXJuIEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNjcm9sbGJhci0+eSgp
ICsgYnMuaGVpZ2h0KCksIHRoaWNrbmVzcywgc2Nyb2xsYmFyLT5oZWlnaHQoKSAtIDIgKiBicy5o
ZWlnaHQoKSk7CiB9CiAKLXZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bTo6cGFpbnRUcmFja0Jh
Y2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXIqIHNjcm9sbGJhciwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bTo6cGFpbnRU
cmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNs
aWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIC8vIEp1c3QgYXNz
dW1lIGEgZm9yd2FyZCB0cmFjayBwYXJ0LiAgV2Ugb25seSBwYWludCB0aGUgdHJhY2sgYXMgYSBz
aW5nbGUgcGllY2Ugd2hlbiB0aGVyZSBpcyBubyB0aHVtYi4KICAgICBpZiAoIWhhc1RodW1iKHNj
cm9sbGJhcikpCiAgICAgICAgIHBhaW50VHJhY2tQaWVjZShjb250ZXh0LCBzY3JvbGxiYXIsIHJl
Y3QsIEZvcndhcmRUcmFja1BhcnQpOwogfQogCi12b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW06
OnBhaW50VGlja21hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW06
OnBhaW50VGlja21hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVD
bGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAoc2Nyb2xs
YmFyLT5vcmllbnRhdGlvbigpICE9IFZlcnRpY2FsU2Nyb2xsYmFyKQogICAgICAgICByZXR1cm47
CkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtOjpwYWludFRp
Y2ttYXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhcioKIAogICAgIC8vIEdl
dCB0aGUgdGlja21hcmtzIGZvciB0aGUgZnJhbWV2aWV3LgogICAgIFZlY3RvcjxJbnRSZWN0PiB0
aWNrbWFya3M7Ci0gICAgc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5nZXRUaWNrbWFya3Mo
dGlja21hcmtzKTsKKyAgICBzY3JvbGxiYXItPmdldFRpY2ttYXJrcyh0aWNrbWFya3MpOwogICAg
IGlmICghdGlja21hcmtzLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVt
LmgKaW5kZXggMTE3ODEyNTY5ZjY5ZjIwMDM3MWJhYzBmOWRhODdhN2MzMmRlNGZhNS4uY2Y2NzFk
ZDk4NGMwNzkwOTk1YzY3ZDdkMGYxOGM1YjRhNmY2Y2ZkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uaApA
QCAtNDEsMTcgKzQxLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyBXaW5kb3dzIGFu
ZCBMaW51eC4KICAgICBjbGFzcyBTY3JvbGxiYXJUaGVtZUNocm9taXVtIDogcHVibGljIFNjcm9s
bGJhclRoZW1lQ29tcG9zaXRlIHsKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZpcnR1YWwgYm9v
bCBoYXNCdXR0b25zKFNjcm9sbGJhciopIHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgdmlydHVh
bCBib29sIGhhc1RodW1iKFNjcm9sbGJhciopOworICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzQnV0
dG9ucyhTY3JvbGxiYXJUaGVtZUNsaWVudCopIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgdmly
dHVhbCBib29sIGhhc1RodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CiAKLSAgICAgICAgdmly
dHVhbCBJbnRSZWN0IGJhY2tCdXR0b25SZWN0KFNjcm9sbGJhciosIFNjcm9sbGJhclBhcnQsIGJv
b2wgcGFpbnRpbmcgPSBmYWxzZSk7Ci0gICAgICAgIHZpcnR1YWwgSW50UmVjdCBmb3J3YXJkQnV0
dG9uUmVjdChTY3JvbGxiYXIqLCBTY3JvbGxiYXJQYXJ0LCBib29sIHBhaW50aW5nID0gZmFsc2Up
OwotICAgICAgICB2aXJ0dWFsIEludFJlY3QgdHJhY2tSZWN0KFNjcm9sbGJhciosIGJvb2wgcGFp
bnRpbmcgPSBmYWxzZSk7CisgICAgICAgIHZpcnR1YWwgSW50UmVjdCBiYWNrQnV0dG9uUmVjdChT
Y3JvbGxiYXJUaGVtZUNsaWVudCosIFNjcm9sbGJhclBhcnQsIGJvb2wgcGFpbnRpbmcgPSBmYWxz
ZSk7CisgICAgICAgIHZpcnR1YWwgSW50UmVjdCBmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXJU
aGVtZUNsaWVudCosIFNjcm9sbGJhclBhcnQsIGJvb2wgcGFpbnRpbmcgPSBmYWxzZSk7CisgICAg
ICAgIHZpcnR1YWwgSW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBib29s
IHBhaW50aW5nID0gZmFsc2UpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwYWludFRyYWNrQmFj
a2dyb3VuZChHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBwYWludFRpY2ttYXJrcyhHcmFwaGljc0NvbnRleHQqLCBTY3Jv
bGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludFRyYWNr
QmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0
IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50VGlja21hcmtzKEdyYXBoaWNz
Q29udGV4dCosIFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAg
ICAgIHZpcnR1YWwgSW50U2l6ZSBidXR0b25TaXplKFNjcm9sbGJhciopID0gMDsKKyAgICAgICAg
dmlydHVhbCBJbnRTaXplIGJ1dHRvblNpemUoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKSA9IDA7CiAg
ICAgfTsKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUFuZHJvaWQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUFu
ZHJvaWQuY3BwCmluZGV4IDFkYmVmYTY0OWMwODk3MmViMWMyYjM3Yjc0NzcxYjBkNjFiZWE1YWQu
LmUxZTU1YTFmYzEzZDc5YzBmOWU4ZjQ3MzBiZTg5NzgwOTRjMWY2OTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1BbmRy
b2lkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJU
aGVtZUNocm9taXVtQW5kcm9pZC5jcHAKQEAgLTU3LDcgKzU3LDcgQEAgaW50IFNjcm9sbGJhclRo
ZW1lQ2hyb21pdW1BbmRyb2lkOjpzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNp
emUgY29udHIKICAgICByZXR1cm4gc2Nyb2xsYmFyVGhpY2tuZXNzVmFsdWU7CiB9CiAKLXZvaWQg
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUFuZHJvaWQ6OnBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhciogc2Nyb2xsYmFyKQordm9pZCBTY3Jv
bGxiYXJUaGVtZUNocm9taXVtQW5kcm9pZDo6cGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5kKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKIHsK
ICAgICAvLyBQYWludCBibGFjayBiYWNrZ3JvdW5kIGluIER1bXBSZW5kZXJUcmVlLCBvdGhlcndp
c2UgdGhlIHBpeGVscyBpbiB0aGUgc2Nyb2xsYmFyIGFyZWEgZGVwZW5kCiAgICAgLy8gb24gdGhl
aXIgcHJldmlvdXMgc3RhdGUsIHdoaWNoIG1ha2VzIHRoZSBkdW1wZWQgcmVzdWx0IHVuZGV0ZXJt
aW5lZC4KQEAgLTY1LDEyICs2NSwxMiBAQCB2b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1BbmRy
b2lkOjpwYWludFNjcm9sbGJhckJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjbwogICAgICAg
ICBjb250ZXh0LT5maWxsUmVjdChzY3JvbGxiYXItPmZyYW1lUmVjdCgpLCBDb2xvcjo6YmxhY2ss
IENvbG9yU3BhY2VEZXZpY2VSR0IpOwogfQogCi1ib29sIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1B
bmRyb2lkOjpzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYgZXZ0KQorYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtQW5kcm9pZDo6c2hvdWxk
Q2VudGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYgZXZ0KQogewogICAgIHJldHVybiB0cnVlOwogfQogCi1JbnRTaXplIFNjcm9sbGJhclRo
ZW1lQ2hyb21pdW1BbmRyb2lkOjpidXR0b25TaXplKFNjcm9sbGJhciogc2Nyb2xsYmFyKQorSW50
U2l6ZSBTY3JvbGxiYXJUaGVtZUNocm9taXVtQW5kcm9pZDo6YnV0dG9uU2l6ZShTY3JvbGxiYXJU
aGVtZUNsaWVudCogc2Nyb2xsYmFyKQogewogICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9u
KCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCiAgICAgICAgIHJldHVybiBJbnRTaXplKHNjcm9sbGJh
clRoaWNrbmVzc1ZhbHVlLCBidXR0b25MZW5ndGgpOwpAQCAtNzgsNyArNzgsNyBAQCBJbnRTaXpl
IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1BbmRyb2lkOjpidXR0b25TaXplKFNjcm9sbGJhciogc2Ny
b2xsYmFyKQogICAgIHJldHVybiBJbnRTaXplKGJ1dHRvbkxlbmd0aCwgc2Nyb2xsYmFyVGhpY2tu
ZXNzVmFsdWUpOwogfQogCi1pbnQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUFuZHJvaWQ6Om1pbmlt
dW1UaHVtYkxlbmd0aChTY3JvbGxiYXIqIHNjcm9sbGJhcikKK2ludCBTY3JvbGxiYXJUaGVtZUNo
cm9taXVtQW5kcm9pZDo6bWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBz
Y3JvbGxiYXIpCiB7CiAgICAgcmV0dXJuIDIgKiBzY3JvbGxiYXJUaGlja25lc3Moc2Nyb2xsYmFy
LT5jb250cm9sU2l6ZSgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1BbmRyb2lkLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtQW5kcm9pZC5oCmluZGV4
IGYwN2M5MDE2Nzg2Y2IyNGY4OGRmYjk0YWU0ZmMyMTZmZTZlNzBiZmMuLmYzZGI4MGU1MmZiZjUw
YzFkZjY4YTk0MGVhOWQ0NzNmMmRiZjI4NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1BbmRyb2lkLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUFuZHJv
aWQuaApAQCAtMzUsMTAgKzM1LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBzY3JvbGxi
YXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdmly
dHVhbCB2b2lkIHBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqLCBTY3Jv
bGxiYXIqKTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXIq
LCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKLSAgICB2aXJ0dWFsIEludFNpemUgYnV0dG9u
U2l6ZShTY3JvbGxiYXIqKTsKLSAgICB2aXJ0dWFsIGludCBtaW5pbXVtVGh1bWJMZW5ndGgoU2Ny
b2xsYmFyKik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZChHcmFw
aGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCopOworICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50Jik7CisgICAgdmlydHVhbCBJbnRTaXplIGJ1dHRvblNpemUoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqKTsKKyAgICB2aXJ0dWFsIGludCBtaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFy
VGhlbWVDbGllbnQqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1M
aW51eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVt
ZUNocm9taXVtTGludXguY3BwCmluZGV4IGVjNjg0MDdlOWQ4YzMyZTMwZDMxMGQyZTUwNThjMmRh
N2RiZGVjYzYuLjZiNGRhZmMzNzNmMTBkMGFhMmQ2ZTk2NjJhYmU2M2RkNWRiNjVlN2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hy
b21pdW1MaW51eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Ny
b2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcApAQCAtNTAsNyArNTAsNyBAQCBpbnQgU2Nyb2xs
YmFyVGhlbWVDaHJvbWl1bUxpbnV4OjpzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJv
bFNpemUgY29udHJvbAogICAgIHJldHVybiBzY3JvbGxiYXJTaXplLndpZHRoKCk7CiB9CiAKLXZv
aWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFRyYWNrUGllY2UoR3JhcGhpY3ND
b250ZXh0KiBnYywgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIFNj
cm9sbGJhclBhcnQgcGFydFR5cGUpCit2b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6
cGFpbnRUcmFja1BpZWNlKEdyYXBoaWNzQ29udGV4dCogZ2MsIFNjcm9sbGJhclRoZW1lQ2xpZW50
KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIFNjcm9sbGJhclBhcnQgcGFydFR5cGUp
CiB7CiAgICAgUGxhdGZvcm1TdXBwb3J0OjpUaGVtZVBhaW50U3RhdGUgc3RhdGUgPSBzY3JvbGxi
YXItPmhvdmVyZWRQYXJ0KCkgPT0gcGFydFR5cGUgPyBQbGF0Zm9ybVN1cHBvcnQ6OlN0YXRlSG92
ZXIgOiBQbGF0Zm9ybVN1cHBvcnQ6OlN0YXRlTm9ybWFsOwogICAgIEludFJlY3QgYWxpZ25SZWN0
ID0gdHJhY2tSZWN0KHNjcm9sbGJhciwgZmFsc2UpOwpAQCAtNjcsNyArNjcsNyBAQCB2b2lkIFNj
cm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUcmFja1BpZWNlKEdyYXBoaWNzQ29udGV4
dCogZ2MsIFNjcm9sbGJhcgogICAgICAgICAmZXh0cmFQYXJhbXMpOwogfQogCi12b2lkIFNjcm9s
bGJhclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiBnYywg
U2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIFNjcm9sbGJhclBhcnQg
cGFydCkKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludEJ1dHRvbihHcmFw
aGljc0NvbnRleHQqIGdjLCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJ
bnRSZWN0JiByZWN0LCBTY3JvbGxiYXJQYXJ0IHBhcnQpCiB7CiAgICAgUGxhdGZvcm1TdXBwb3J0
OjpUaGVtZVBhcnQgcGFpbnRQYXJ0OwogICAgIFBsYXRmb3JtU3VwcG9ydDo6VGhlbWVQYWludFN0
YXRlIHN0YXRlID0gUGxhdGZvcm1TdXBwb3J0OjpTdGF0ZU5vcm1hbDsKQEAgLTEwMiw3ICsxMDIs
NyBAQCB2b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRCdXR0b24oR3JhcGhp
Y3NDb250ZXh0KiBnYywgU2Nyb2xsYmFyKiBzYwogICAgIFBsYXRmb3JtU3VwcG9ydDo6cGFpbnRU
aGVtZVBhcnQoZ2MsIHBhaW50UGFydCwgc3RhdGUsIHJlY3QsIDApOwogfQogCi12b2lkIFNjcm9s
bGJhclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQqIGdjLCBT
Y3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgU2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCogZ2MsIFNjcm9s
bGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAg
UGxhdGZvcm1TdXBwb3J0OjpUaGVtZVBhaW50U3RhdGUgc3RhdGU7CiAKQEAgLTEyMCwxMiArMTIw
LDEyIEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFRodW1iKEdyYXBo
aWNzQ29udGV4dCogZ2MsIFNjcm9sbGJhciogc2NyCiAgICAgICAgIDApOwogfQogCi1ib29sIFNj
cm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6c2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXIq
LCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKK2Jvb2wgU2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bUxpbnV4OjpzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29u
c3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQpCiB7CiAgICAgcmV0dXJuIChldnQuc2hpZnRLZXko
KSAmJiBldnQuYnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgfHwgKGV2dC5idXR0b24oKSA9PSBNaWRk
bGVCdXR0b24pOwogfQogCi1JbnRTaXplIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6YnV0
dG9uU2l6ZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKK0ludFNpemUgU2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bUxpbnV4OjpidXR0b25TaXplKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCiB7
CiAgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikg
ewogICAgICAgICBJbnRTaXplIHNpemUgPSBQbGF0Zm9ybVN1cHBvcnQ6OmdldFRoZW1lUGFydFNp
emUoUGxhdGZvcm1TdXBwb3J0OjpQYXJ0U2Nyb2xsYmFyVXBBcnJvdyk7CkBAIC0xMzcsNyArMTM3
LDcgQEAgSW50U2l6ZSBTY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXg6OmJ1dHRvblNpemUoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIpCiAgICAgcmV0dXJuIEludFNpemUoc2Nyb2xsYmFyLT53aWR0aCgp
IDwgMiAqIHNpemUud2lkdGgoKSA/IHNjcm9sbGJhci0+d2lkdGgoKSAvIDIgOiBzaXplLndpZHRo
KCksIHNpemUuaGVpZ2h0KCkpOwogfQogCi1pbnQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4
OjptaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCitpbnQgU2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bUxpbnV4OjptaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGll
bnQqIHNjcm9sbGJhcikKIHsKICAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZl
cnRpY2FsU2Nyb2xsYmFyKSB7CiAgICAgICAgIEludFNpemUgc2l6ZSA9IFBsYXRmb3JtU3VwcG9y
dDo6Z2V0VGhlbWVQYXJ0U2l6ZShQbGF0Zm9ybVN1cHBvcnQ6OlBhcnRTY3JvbGxiYXJWZXJ0aWNh
bFRodW1iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Nj
cm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4LmgKaW5kZXggOGU4MDJlNzM0MWI3NzVi
NTk1NWFkMGRlYzBiOGVlZDU2Zjc5NzI3My4uMzMwZDAzZmIwMjMyMTM0ZWMyY2EyOTQxOWZkYWIy
NzM0OTQ3NTRkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4LmgKQEAgLTM5LDEyICszOSwx
MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgaW50IHNjcm9sbGJhclRo
aWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSk7CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBwYWludFRyYWNrUGllY2UoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFy
KiwgY29uc3QgSW50UmVjdCYsIFNjcm9sbGJhclBhcnQpOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYs
IFNjcm9sbGJhclBhcnQpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUaHVtYihHcmFwaGlj
c0NvbnRleHQqLCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYpOwotICAgICAgICB2aXJ0dWFsIEludFNpemUgYnV0dG9uU2l6ZShTY3JvbGxiYXIqKTsK
LSAgICAgICAgdmlydHVhbCBpbnQgbWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhciopOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUcmFja1BpZWNlKEdyYXBoaWNzQ29udGV4dCosIFNjcm9s
bGJhclRoZW1lQ2xpZW50KiwgY29uc3QgSW50UmVjdCYsIFNjcm9sbGJhclBhcnQpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhl
bWVDbGllbnQqLCBjb25zdCBJbnRSZWN0JiwgU2Nyb2xsYmFyUGFydCk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRoZW1lQ2xpZW50
KiwgY29uc3QgSW50UmVjdCYpOworICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25U
aHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwor
ICAgICAgICB2aXJ0dWFsIEludFNpemUgYnV0dG9uU2l6ZShTY3JvbGxiYXJUaGVtZUNsaWVudCop
OworICAgICAgICB2aXJ0dWFsIGludCBtaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVD
bGllbnQqKTsKICAgICB9OwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFj
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9t
aXVtTWFjLmgKaW5kZXggNDFhMTk4ZTNmODQyMGM4NDg5NDVmYjg0NzQ0ZGRiNzAwMjRjZDZlNS4u
MTkzNDZlNzIzYmFiMjg3Zjk4ZTE3YzgxMmRiNTgzYTFjMjA2NzAyMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hy
b21pdW1NYWMuaApAQCAtMzYsMTIgKzM2LDEyIEBAIHB1YmxpYzoKICAgICBTY3JvbGxiYXJUaGVt
ZUNocm9taXVtTWFjKCk7CiAgICAgdmlydHVhbCB+U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYygp
OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50KFNjcm9sbGJhciosIEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CisgICAgdmlydHVhbCBib29sIHBh
aW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVj
dCYgZGFtYWdlUmVjdCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPdmVyaGFuZ0FyZWFzKFNj
cm9sbFZpZXcqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBob3Jpem9udGFsT3Zl
cmhhbmdBcmVhLCBjb25zdCBJbnRSZWN0JiB2ZXJ0aWNhbE92ZXJoYW5nQXJlYSwgY29uc3QgSW50
UmVjdCYgZGlydHlSZWN0KTsKICAgICAKIHByaXZhdGU6Ci0gICAgdm9pZCBwYWludEdpdmVuVGlj
a21hcmtzKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmLCBjb25z
dCBWZWN0b3I8SW50UmVjdD4mKTsKKyAgICB2b2lkIHBhaW50R2l2ZW5UaWNrbWFya3MoR3JhcGhp
Y3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0JiwgY29uc3Qg
VmVjdG9yPEludFJlY3Q+Jik7CiAKICAgICBSZWZQdHI8UGF0dGVybj4gbV9vdmVyaGFuZ1BhdHRl
cm47CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Ny
b2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMubW0KaW5kZXggNDU5YTU4YjA3NmY3MDA2ZjI3
NzY1YjAyNDk3YTA5OTM1ZjgyM2ZiNy4uZDAyYjQyMTI1NjQ0Yjc4MzBjZTJlMGZhZWIzNjczMzYx
ZjhkYjk0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Ny
b2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLm1tCkBAIC02MSwxMSArNjEsMTEgQEAg
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6flNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMoKQog
ewogfQogCi1zdGF0aWMgUGxhdGZvcm1TdXBwb3J0OjpUaGVtZVBhaW50U3RhdGUgc2Nyb2xsYmFy
U3RhdGVUb1RoZW1lU3RhdGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCitzdGF0aWMgUGxhdGZvcm1T
dXBwb3J0OjpUaGVtZVBhaW50U3RhdGUgc2Nyb2xsYmFyU3RhdGVUb1RoZW1lU3RhdGUoU2Nyb2xs
YmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKIHsKICAgICBpZiAoIXNjcm9sbGJhci0+ZW5hYmxl
ZCgpKQogICAgICAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpTdGF0ZURpc2FibGVkOwotICAg
IGlmICghc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5pc0FjdGl2ZSgpKQorICAgIGlmICgh
c2Nyb2xsYmFyLT5pc1Njcm9sbGFibGVBcmVhQWN0aXZlKCkpCiAgICAgICAgIHJldHVybiBQbGF0
Zm9ybVN1cHBvcnQ6OlN0YXRlSW5hY3RpdmU7CiAgICAgaWYgKHNjcm9sbGJhci0+cHJlc3NlZFBh
cnQoKSA9PSBUaHVtYlBhcnQpCiAgICAgICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OlN0YXRl
UHJlc3NlZDsKQEAgLTk0LDExICs5NCwxMSBAQCBzdGF0aWMgdm9pZCBzY3JvbGxiYXJQYWludGVy
UGFpbnRUcmFjayhTY3JvbGxiYXJQYWludGVyIHNjcm9sbGJhclBhaW50ZXIsIGJvb2wgZQogLy8g
ICAgIC0gZHJhd2luZyB1c2luZyBQbGF0Zm9ybVN1cHBvcnQgZnVuY3Rpb25zCiAvLyAgICAgLSBk
cmF3aW5nIHRpY2ttYXJrcwogLy8gICAgIC0gU2tpYSBzcGVjaWZpYyBjaGFuZ2VzCi1ib29sIFNj
cm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCitib29sIFNj
cm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3Jv
bGxiYXIsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVj
dCkKIHsKICAgICAvLyBHZXQgdGhlIHRpY2ttYXJrcyBmb3IgdGhlIGZyYW1ldmlldy4KICAgICBW
ZWN0b3I8SW50UmVjdD4gdGlja21hcmtzOwotICAgIHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEo
KS0+Z2V0VGlja21hcmtzKHRpY2ttYXJrcyk7CisgICAgc2Nyb2xsYmFyLT5nZXRUaWNrbWFya3Mo
dGlja21hcmtzKTsKIAogICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkg
ewogICAgICAgICBmbG9hdCB2YWx1ZSA9IDA7CkBAIC0xODgsNyArMTg4LDcgQEAgYm9vbCBTY3Jv
bGxiYXJUaGVtZUNocm9taXVtTWFjOjpwYWludChTY3JvbGxiYXIqIHNjcm9sbGJhciwgR3JhcGhp
Y3NDb250ZXh0KiBjb24KICAgICBpZiAoIXNjcm9sbGJhci0+ZW5hYmxlZCgpKQogICAgICAgICB0
cmFja0luZm8uZW5hYmxlU3RhdGUgPSBrVGhlbWVUcmFja0Rpc2FibGVkOwogICAgIGVsc2UKLSAg
ICAgICAgdHJhY2tJbmZvLmVuYWJsZVN0YXRlID0gc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgp
LT5pc0FjdGl2ZSgpID8ga1RoZW1lVHJhY2tBY3RpdmUgOiBrVGhlbWVUcmFja0luYWN0aXZlOwor
ICAgICAgICB0cmFja0luZm8uZW5hYmxlU3RhdGUgPSBzY3JvbGxiYXItPmlzU2Nyb2xsYWJsZUFy
ZWFBY3RpdmUoKSA/IGtUaGVtZVRyYWNrQWN0aXZlIDoga1RoZW1lVHJhY2tJbmFjdGl2ZTsKIAog
ICAgIGlmICghaGFzQnV0dG9ucyhzY3JvbGxiYXIpKQogICAgICAgICB0cmFja0luZm8uZW5hYmxl
U3RhdGUgPSBrVGhlbWVUcmFja05vdGhpbmdUb1Njcm9sbDsKQEAgLTI0Myw3ICsyNDMsNyBAQCBi
b29sIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50KFNjcm9sbGJhciogc2Nyb2xsYmFy
LCBHcmFwaGljc0NvbnRleHQqIGNvbgogICAgIGlmIChoYXNUaHVtYihzY3JvbGxiYXIpKSB7CiAg
ICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6VGhlbWVQYWludFNjcm9sbGJhckluZm8gc2Nyb2xsYmFy
SW5mbzsKICAgICAgICAgc2Nyb2xsYmFySW5mby5vcmllbnRhdGlvbiA9IHNjcm9sbGJhci0+b3Jp
ZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gUGxhdGZvcm1TdXBwb3J0OjpTY3Jv
bGxiYXJPcmllbnRhdGlvbkhvcml6b250YWwgOiBQbGF0Zm9ybVN1cHBvcnQ6OlNjcm9sbGJhck9y
aWVudGF0aW9uVmVydGljYWw7Ci0gICAgICAgIHNjcm9sbGJhckluZm8ucGFyZW50ID0gc2Nyb2xs
YmFyLT5wYXJlbnQoKSAmJiBzY3JvbGxiYXItPnBhcmVudCgpLT5pc0ZyYW1lVmlldygpICYmIHN0
YXRpY19jYXN0PEZyYW1lVmlldyo+KHNjcm9sbGJhci0+cGFyZW50KCkpLT5pc1Njcm9sbFZpZXdT
Y3JvbGxiYXIoc2Nyb2xsYmFyKSA/IFBsYXRmb3JtU3VwcG9ydDo6U2Nyb2xsYmFyUGFyZW50U2Ny
b2xsVmlldyA6IFBsYXRmb3JtU3VwcG9ydDo6U2Nyb2xsYmFyUGFyZW50UmVuZGVyTGF5ZXI7Cisg
ICAgICAgIHNjcm9sbGJhckluZm8ucGFyZW50ID0gc2Nyb2xsYmFyLT5pc1Njcm9sbFZpZXdTY3Jv
bGxiYXIoKSA/IFBsYXRmb3JtU3VwcG9ydDo6U2Nyb2xsYmFyUGFyZW50U2Nyb2xsVmlldyA6IFBs
YXRmb3JtU3VwcG9ydDo6U2Nyb2xsYmFyUGFyZW50UmVuZGVyTGF5ZXI7CiAgICAgICAgIHNjcm9s
bGJhckluZm8ubWF4VmFsdWUgPSBzY3JvbGxiYXItPm1heGltdW0oKTsKICAgICAgICAgc2Nyb2xs
YmFySW5mby5jdXJyZW50VmFsdWUgPSBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKTsKICAgICAgICAg
c2Nyb2xsYmFySW5mby52aXNpYmxlU2l6ZSA9IHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKTsKQEAg
LTI2Myw3ICsyNjMsNyBAQCBib29sIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50KFNj
cm9sbGJhciogc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQqIGNvbgogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50R2l2ZW5UaWNrbWFy
a3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3Qg
SW50UmVjdCYgcmVjdCwgY29uc3QgVmVjdG9yPEludFJlY3Q+JiB0aWNrbWFya3MpCit2b2lkIFNj
cm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50R2l2ZW5UaWNrbWFya3MoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRS
ZWN0JiByZWN0LCBjb25zdCBWZWN0b3I8SW50UmVjdD4mIHRpY2ttYXJrcykKIHsKICAgICBpZiAo
c2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpICE9IFZlcnRpY2FsU2Nyb2xsYmFyKQogICAgICAgICBy
ZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3Jv
bGxiYXJUaGVtZUNocm9taXVtV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1XaW4uY3BwCmluZGV4IGY0MzU4MzlkODIxODU2NGY4
MDI3MjhkMzI4NTMyMGQxZTBjZGJhYzguLmEwODE5ODM0NzQ5MWRjYzVkOGYwMjJhMTIyODg5MGQ2
NTc3ZmUzZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Nj
cm9sbGJhclRoZW1lQ2hyb21pdW1XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1XaW4uY3BwCkBAIC03Myw3ICs3Myw3IEBA
IGJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6aW52YWxpZGF0ZU9uTW91c2VFbnRlckV4
aXQoKQogICAgIHJldHVybiB3aW5kb3dzVmVyc2lvbigpID49IFdpbmRvd3NWaXN0YTsKIH0KIAot
Ym9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpzaG91bGRTbmFwQmFja1RvRHJhZ09yaWdp
bihTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQpCiti
b29sIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OnNob3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2lu
KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYgZXZ0KQogewogICAgIC8vIEZpbmQgdGhlIHJlY3Qgd2l0aGluIHdoaWNoIHdlIHNob3VsZG4n
dCBzbmFwLCBieSBleHBhbmRpbmcgdGhlIHRyYWNrIHJlY3QKICAgICAvLyBpbiBib3RoIGRpbWVu
c2lvbnMuCkBAIC05MSw3ICs5MSw3IEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6
c2hvdWxkU25hcEJhY2tUb0RyYWdPcmlnaW4oU2Nyb2xsYmFyKiBzY3JvbGxiYXIsCiAgICAgcmV0
dXJuICFyZWN0LmNvbnRhaW5zKG1vdXNlUG9zaXRpb24pOwogfQogCi12b2lkIFNjcm9sbGJhclRo
ZW1lQ2hyb21pdW1XaW46OnBhaW50VHJhY2tQaWVjZShHcmFwaGljc0NvbnRleHQqIGdjLCBTY3Jv
bGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0
VHlwZSkKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRUcmFja1BpZWNlKEdy
YXBoaWNzQ29udGV4dCogZ2MsIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0
IEludFJlY3QmIHJlY3QsIFNjcm9sbGJhclBhcnQgcGFydFR5cGUpCiB7CiAgICAgYm9vbCBob3J6
ID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXI7CiAKQEAg
LTExMyw3ICsxMTMsNyBAQCB2b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OnBhaW50VHJh
Y2tQaWVjZShHcmFwaGljc0NvbnRleHQqIGdjLCBTY3JvbGxiYXIqCiAgICAgICAgIGFsaWduUmVj
dCk7CiB9CiAKLXZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRCdXR0b24oR3Jh
cGhpY3NDb250ZXh0KiBnYywgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJl
Y3QsIFNjcm9sbGJhclBhcnQgcGFydCkKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6
cGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiBnYywgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNj
cm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0KQogewogICAg
IGJvb2wgaG9yeiA9IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyOwogCkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2lu
OjpwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQqIGdjLCBTY3JvbGxiYXIqIHNjcm8KICAgICAg
ICAgcmVjdCk7CiB9CiAKLXZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRUaHVt
YihHcmFwaGljc0NvbnRleHQqIGdjLCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVj
dCYgcmVjdCkKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRUaHVtYihHcmFw
aGljc0NvbnRleHQqIGdjLCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogewogICAgIGJvb2wgaG9yeiA9IHNjcm9sbGJhci0+b3JpZW50YXRpb24o
KSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyOwogCkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBTY3Jv
bGxiYXJUaGVtZUNocm9taXVtV2luOjpwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCogZ2MsIFNj
cm9sbGJhciogc2Nyb2wKICAgICAgICAgcmVjdCk7CiB9CiAKLWludCBTY3JvbGxiYXJUaGVtZUNo
cm9taXVtV2luOjpnZXRUaGVtZVN0YXRlKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQ
YXJ0IHBhcnQpIGNvbnN0CitpbnQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6Z2V0VGhlbWVT
dGF0ZShTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQp
IGNvbnN0CiB7CiAgICAgLy8gV2hlbiBkcmFnZ2luZyB0aGUgdGh1bWIsIGRyYXcgdGh1bWIgcHJl
c3NlZCBhbmQgb3RoZXIgc2VnbWVudHMgbm9ybWFsCiAgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGVy
ZSB0aGUgY3Vyc29yIGFjdHVhbGx5IGlzLiAgU2VlIGFsc28gZm91ciBwbGFjZXMgaW4KQEAgLTE3
MSw3ICsxNzEsNyBAQCBpbnQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6Z2V0VGhlbWVTdGF0
ZShTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydAogICAgIHJldHVybiAoc2Nyb2xs
YmFyLT5wcmVzc2VkUGFydCgpID09IHBhcnQpID8gU0NSQlNfUFJFU1NFRCA6IFNDUkJTX05PUk1B
TDsKIH0KIAotaW50IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OmdldFRoZW1lQXJyb3dTdGF0
ZShTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0KSBjb25zdAoraW50IFNj
cm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OmdldFRoZW1lQXJyb3dTdGF0ZShTY3JvbGxiYXJUaGVt
ZUNsaWVudCogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQpIGNvbnN0CiB7CiAgICAgLy8g
V2UgY291bGQgdGFrZSBhZHZhbnRhZ2Ugb2Yga25vd2luZyB0aGUgdmFsdWVzIGluIHRoZSBzdGF0
ZSBlbnVtIHRvIHdyaXRlCiAgICAgLy8gc29tZSBzaW1wbGVyIGNvZGUsIGJ1dCB0cmVhdGluZyB0
aGUgc3RhdGUgZW51bSBhcyBhIGJsYWNrIGJveCBzZWVtcwpAQCAtMjIxLDcgKzIyMSw3IEBAIGlu
dCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpnZXRUaGVtZUFycm93U3RhdGUoU2Nyb2xsYmFy
KiBzY3JvbGxiYXIsIFNjcm9sbGJhCiAgICAgcmV0dXJuIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0
KCkgPT0gcGFydCkgPyBBQlNfRE9XTlBSRVNTRUQgOiBBQlNfRE9XTk5PUk1BTDsKIH0KIAotaW50
IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OmdldENsYXNzaWNUaGVtZVN0YXRlKFNjcm9sbGJh
ciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQpIGNvbnN0CitpbnQgU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bVdpbjo6Z2V0Q2xhc3NpY1RoZW1lU3RhdGUoU2Nyb2xsYmFyVGhlbWVDbGllbnQq
IHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0KSBjb25zdAogewogICAgIC8vIFdoZW4gZHJh
Z2dpbmcgdGhlIHRodW1iLCBkcmF3IHRoZSBidXR0b25zIG5vcm1hbCBldmVuIHdoZW4gaG92ZXJl
ZC4KICAgICBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCkKQEAgLTIz
NSwxMiArMjM1LDEyIEBAIGludCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpnZXRDbGFzc2lj
VGhlbWVTdGF0ZShTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsCiAgICAgcmV0dXJuIChzY3Jv
bGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gcGFydCkgPyAoREZDU19QVVNIRUQgfCBERkNTX0ZMQVQp
IDogMDsKIH0KIAotYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpzaG91bGRDZW50ZXJP
blRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQorYm9vbCBT
Y3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhclRo
ZW1lQ2xpZW50KiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQpCiB7CiAgICAgcmV0dXJu
IGV2dC5zaGlmdEtleSgpICYmIGV2dC5idXR0b24oKSA9PSBMZWZ0QnV0dG9uOwogfQogCi1JbnRT
aXplIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OmJ1dHRvblNpemUoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIpCitJbnRTaXplIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OmJ1dHRvblNpemUoU2Ny
b2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKIHsKICAgICAvLyBPdXIgZGVzaXJlZCByZWN0
IGlzIGVzc2VudGlhbGx5IHRoaWNrbmVzcyBieSB0aGlja25lc3MuCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1XaW4u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21p
dW1XaW4uaAppbmRleCA2OWNmYTEzMWM1Y2IwNGU5YjUyMTBiNzY1Y2ZiNDgxZThkZGNiMTM1Li5h
Yzg4ODFmOTNiNWRiMWFmZjQ2NzlhNjA2M2U3YmE3ZTg2ZjU1MWZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtV2luLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bVdpbi5oCkBAIC0zOCwxOSArMzgsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1
YmxpYzoKICAgICAgICAgdmlydHVhbCBpbnQgc2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNv
bnRyb2xTaXplKTsKICAgICAgICAgdmlydHVhbCBib29sIGludmFsaWRhdGVPbk1vdXNlRW50ZXJF
eGl0KCk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTbmFwQmFja1RvRHJhZ09yaWdpbihT
Y3JvbGxiYXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICAgICAgdmlydHVhbCBi
b29sIHNob3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2luKFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29u
c3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBwYWludFRyYWNrUGllY2UoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyKiwgY29u
c3QgSW50UmVjdCYsIFNjcm9sbGJhclBhcnQpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRC
dXR0b24oR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYsIFNjcm9s
bGJhclBhcnQpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUaHVtYihHcmFwaGljc0NvbnRl
eHQqLCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYp
OwotICAgICAgICB2aXJ0dWFsIEludFNpemUgYnV0dG9uU2l6ZShTY3JvbGxiYXIqKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHBhaW50VHJhY2tQaWVjZShHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxi
YXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3QmLCBTY3JvbGxiYXJQYXJ0KTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHBhaW50QnV0dG9uKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRoZW1l
Q2xpZW50KiwgY29uc3QgSW50UmVjdCYsIFNjcm9sbGJhclBhcnQpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCos
IGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCBib29sIHNob3VsZENlbnRlck9uVGh1
bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAg
ICAgICAgdmlydHVhbCBJbnRTaXplIGJ1dHRvblNpemUoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsK
IAogICAgIHByaXZhdGU6Ci0gICAgICAgIGludCBnZXRUaGVtZVN0YXRlKFNjcm9sbGJhciosIFNj
cm9sbGJhclBhcnQpIGNvbnN0OwotICAgICAgICBpbnQgZ2V0VGhlbWVBcnJvd1N0YXRlKFNjcm9s
bGJhciosIFNjcm9sbGJhclBhcnQpIGNvbnN0OwotICAgICAgICBpbnQgZ2V0Q2xhc3NpY1RoZW1l
U3RhdGUoU2Nyb2xsYmFyKiwgU2Nyb2xsYmFyUGFydCkgY29uc3Q7CisgICAgICAgIGludCBnZXRU
aGVtZVN0YXRlKFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCkgY29uc3Q7Cisg
ICAgICAgIGludCBnZXRUaGVtZUFycm93U3RhdGUoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBTY3Jv
bGxiYXJQYXJ0KSBjb25zdDsKKyAgICAgICAgaW50IGdldENsYXNzaWNUaGVtZVN0YXRlKFNjcm9s
bGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCkgY29uc3Q7CiAgICAgfTsKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZs
L1Njcm9sbGJhclRoZW1lRWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3Jv
bGxiYXJUaGVtZUVmbC5jcHAKaW5kZXggNjJkZjAwNWQ2NzU3MWQxNGFkMzk0MzYwZDU2YzQ5OGU0
ZGY5MmJmYi4uMjQwYjUwMTQ3NzljMTgyZDE0MzkwYzNmOGMzOTM3NzU3N2U5M2E4MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbGJhclRoZW1lRWZsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2Nyb2xsYmFyVGhlbWVFZmwuY3BwCkBA
IC00OSwxMSArNDksMTEgQEAgaW50IFNjcm9sbGJhclRoZW1lRWZsOjpzY3JvbGxiYXJUaGlja25l
c3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUpCiAgICAgcmV0dXJuIDA7IC8vIHdl
IHBhaW50IG9uIHRvcAogfQogCi12b2lkIFNjcm9sbGJhclRoZW1lRWZsOjpyZWdpc3RlclNjcm9s
bGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVFZmw6OnJlZ2lz
dGVyU2Nyb2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCiB7CiB9CiAKLXZv
aWQgU2Nyb2xsYmFyVGhlbWVFZmw6OnVucmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIpCit2b2lkIFNjcm9sbGJhclRoZW1lRWZsOjp1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9s
bGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxiYXJUaGVtZUVmbC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZWZsL1Njcm9sbGJhclRoZW1lRWZsLmgKaW5kZXggMGZlMTY4ODFlMmU0NTZlNmUx
MjMwMWFlZWY4NmMyNjViZDMzMjM0Yi4uMjhjMTYzZWQzODg2MTA5M2FkNzg5NzUxMTJlNTYxYjE4
ZjE2NzAwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbGJh
clRoZW1lRWZsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbGJhclRo
ZW1lRWZsLmgKQEAgLTM5LDggKzM5LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBpbnQgc2Ny
b2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplID0gUmVndWxhclNjcm9sbGJhcik7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxi
YXIpOwotICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Ny
b2xsYmFyKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlclNjcm9sbGJhcihTY3JvbGxi
YXJUaGVtZUNsaWVudCopOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0u
aAppbmRleCBkZjFiZjI2YWE3ZjcxN2E3NzZmN2VjOWNkZjY3NDk5ZDM1MDIwZWMyLi4zNjhhYTQ5
YmJhNGVmYWY1MmQ4OGI5NzVjYTEzNGQ5YTA0YWIyYzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xh
eWVyQ2hyb21pdW0uaApAQCAtOTcsNiArOTcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c1RvTWVkaWEoUGxhdGZvcm1MYXllciopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1Rv
Q2FudmFzKFBsYXRmb3JtTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzQ29udGVudHNMYXll
cigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNMYXllcjsgfQogCiAgICAgdmlydHVhbCBib29s
IGFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUmIGJv
eFNpemUsIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYsIGRvdWJsZSB0aW1lT2Zmc2V0
KTsKICAgICB2aXJ0dWFsIHZvaWQgcGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRp
b25OYW1lLCBkb3VibGUgdGltZU9mZnNldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDky
OWJiYzdlMTkzNmVkNTVjNTUxOGIxOTRjZTJkMjNlMTZmMjQzODAuLjRiZjcxM2Y0MDQwZDljNDE4
NDQ4OTQ2MWFlMmIxYzFiNzIwOWU5ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC04MSw2
ICs4MSw4IEBAIExheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0oKQogICAgICwgbV9wcmVzZXJ2
ZXMzRChmYWxzZSkKICAgICAsIG1fYWx3YXlzUmVzZXJ2ZVRleHR1cmVzKGZhbHNlKQogICAgICwg
bV9yZXBsaWNhTGF5ZXIoMCkKKyAgICAsIG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKDApCisg
ICAgLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIoMCkKICAgICAsIG1fZHJhd09wYWNpdHkoMCkK
ICAgICAsIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSgwKQogICAgICwgbV9jb250ZW50c1NjYWxlKDEu
MCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCBlMzEyM2JmNzk3NjI5NTAyYmFjOTdkYWJmYTI1YzRk
YWQ4OTJkMmZiLi40NTdiMTE3MTI3OTMzYmJjMWJkYzVmYTdlOGI4YzBkNDVhMzkyYTUwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5oCkBAIC02MSw2ICs2MSw3IEBAIGNsYXNzIENDTGF5ZXJJbXBsOwogY2xh
c3MgQ0NMYXllclRyZWVIb3N0OwogY2xhc3MgQ0NUZXh0dXJlVXBkYXRlcjsKIGNsYXNzIEdyYXBo
aWNzQ29udGV4dDNEOworY2xhc3MgU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTsKIAogLy8gQmFzZSBj
bGFzcyBmb3IgY29tcG9zaXRlZCBsYXllcnMuIFNwZWNpYWwgbGF5ZXIgdHlwZXMgYXJlIGRlcml2
ZWQgZnJvbQogLy8gdGhpcyBjbGFzcy4KQEAgLTIzNiw2ICsyMzcsOSBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHNldEFuaW1hdGlvbkV2ZW50KGNvbnN0IENDQW5pbWF0aW9uRXZlbnQmKTsKIAorICAg
IHZvaWQgc2V0SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKFNjcm9sbGJhckxheWVyQ2hyb21pdW0q
IGxheWVyKSB7IG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyID0gbGF5ZXI7IH0KKyAgICB2b2lk
IHNldFZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIoU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bSogbGF5ZXIp
IHsgbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyID0gbGF5ZXI7IH0KKwogcHJvdGVjdGVkOgogICAg
IGZyaWVuZCBjbGFzcyBDQ0xheWVySW1wbDsKICAgICBmcmllbmQgY2xhc3MgTGF5ZXJUaWxlckNo
cm9taXVtOwpAQCAtMzE0LDYgKzMxOCw5IEBAIHByaXZhdGU6CiAgICAgLy8gUmVwbGljYSBsYXll
ciB1c2VkIGZvciByZWZsZWN0aW9ucy4KICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9yZXBs
aWNhTGF5ZXI7CiAKKyAgICBTY3JvbGxiYXJMYXllckNocm9taXVtICptX2hvcml6b250YWxTY3Jv
bGxiYXJMYXllcjsKKyAgICBTY3JvbGxiYXJMYXllckNocm9taXVtICptX3ZlcnRpY2FsU2Nyb2xs
YmFyTGF5ZXI7CisKICAgICAvLyBUcmFuc2llbnQgcHJvcGVydGllcy4KICAgICBPd25QdHI8UmVu
ZGVyU3VyZmFjZUNocm9taXVtPiBtX3JlbmRlclN1cmZhY2U7CiAgICAgZmxvYXQgbV9kcmF3T3Bh
Y2l0eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZDhkMDNiMDdkOTg0MjlhZjVhYjBlODdmZDJkMjJkZGM4MWZiZDFjYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxh
eWVyQ2hyb21pdW0uY3BwCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1
ZGUgIlNjcm9sbGJhckxheWVyQ2hyb21pdW0uaCIKKworI2luY2x1ZGUgIlNjcm9sbGJhci5oIgor
I2luY2x1ZGUgImNjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUGFzc093blB0cjxDQ0xheWVySW1wbD4gU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlQ0NMYXllckltcGwoKQoreworICAgIHJldHVybiBDQ1Njcm9sbGJhckxheWVySW1wbDo6Y3Jl
YXRlKGlkKCkpOworfQorCitQYXNzUmVmUHRyPFNjcm9sbGJhckxheWVyQ2hyb21pdW0+IFNjcm9s
bGJhckxheWVyQ2hyb21pdW06OmNyZWF0ZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNjcm9sbGJhckxheWVyQ2hyb21pdW0oc2Nyb2xsYmFyKSk7Cit9
CisKK1Njcm9sbGJhckxheWVyQ2hyb21pdW06OlNjcm9sbGJhckxheWVyQ2hyb21pdW0oU2Nyb2xs
YmFyKiBzY3JvbGxiYXIpCisgICAgOiBtX3Njcm9sbGJhcihzY3JvbGxiYXIpCit7Cit9CisKK3Zv
aWQgU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCog
bGF5ZXIpCit7CisgICAgTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhsYXllcik7CisK
KyAgICBDQ1Njcm9sbGJhckxheWVySW1wbCogc2Nyb2xsYmFyTGF5ZXIgPSBzdGF0aWNfY2FzdDxD
Q1Njcm9sbGJhckxheWVySW1wbCo+KGxheWVyKTsKKyAgICBDQ1Njcm9sbGJhciogc2Nyb2xsYmFy
ID0gc2Nyb2xsYmFyTGF5ZXItPnNjcm9sbGJhcigpOworCisgICAgc2Nyb2xsYmFyLT5wdWxsUHJv
cGVydGllc0Zyb20obV9zY3JvbGxiYXIuZ2V0KCkpOworICAgIHNjcm9sbGJhci0+c2V0RnJhbWVS
ZWN0KEludFJlY3QoSW50UG9pbnQoKSwgc2Nyb2xsYmFyTGF5ZXItPmNvbnRlbnRCb3VuZHMoKSkp
OworfQorCit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFy
TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiMDdlYjAzMzk5NThjZDli
OGNjYzdiNTkwMDFjZWVkOWU4MDJhMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmgKQEAg
LTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIFNjcm9sbGJhckxheWVyQ2hy
b21pdW1faAorI2RlZmluZSBTY3JvbGxiYXJMYXllckNocm9taXVtX2gKKworI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxiYXI7CisKK2NsYXNzIFNjcm9sbGJhckxh
eWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgdmlydHVh
bCBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFNjcm9sbGJhckxheWVyQ2hyb21pdW0+IGNyZWF0ZShTY3JvbGxiYXIqKTsK
KworICAgIHZpcnR1YWwgdm9pZCBwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKik7CisKK3By
b3RlY3RlZDoKKyAgICBTY3JvbGxiYXJMYXllckNocm9taXVtKFNjcm9sbGJhciopOworCitwcml2
YXRlOgorICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1fc2Nyb2xsYmFyOworfTsKKworfQorI2VuZGlm
IC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5j
aHJvbml6ZXIuY3BwCmluZGV4IGViZDFhYzczMGIxOTQ1NDFjMmI0YzRlZWYxZjZjY2E1OTliNGU1
YzguLmI2YzVhNDZkMTU4YjM0MGQwOTM0ODJiOTE0NTM3OTljMWQ1NDUxMmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Ry
ZWVTeW5jaHJvbml6ZXIuY3BwCkBAIC0yOCwyMCArMjgsMjkgQEAKICNpbmNsdWRlICJUcmVlU3lu
Y2hyb25pemVyLmgiCiAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiU2Ny
b2xsYmFyTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5j
bHVkZSAiY2MvQ0NTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJjYy9DQ1Njcm9sbGJhckxheWVySW1w
bC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQ
YXNzT3duUHRyPENDTGF5ZXJJbXBsPiBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVz
KExheWVyQ2hyb21pdW0qIGxheWVyQ2hyb21pdW1Sb290LCBQYXNzT3duUHRyPENDTGF5ZXJJbXBs
PiBvbGRDQ0xheWVySW1wbFJvb3QpCiB7Ci0gICAgQ0NMYXllckltcGxNYXAgbWFwOwotICAgIGNv
bGxlY3RFeGlzdGluZ0NDTGF5ZXJJbXBsUmVjdXJzaXZlKG1hcCwgb2xkQ0NMYXllckltcGxSb290
KTsKKyAgICBDQ0xheWVySW1wbE1hcCBvbGRMYXllcnM7CisgICAgSGFzaE1hcDxpbnQsIENDTGF5
ZXJJbXBsKj4gbmV3TGF5ZXJzOwogCi0gICAgcmV0dXJuIHN5bmNocm9uaXplVHJlZVJlY3Vyc2l2
ZShtYXAsIGxheWVyQ2hyb21pdW1Sb290KTsKKyAgICBjb2xsZWN0RXhpc3RpbmdDQ0xheWVySW1w
bFJlY3Vyc2l2ZShvbGRMYXllcnMsIG9sZENDTGF5ZXJJbXBsUm9vdCk7CisKKyAgICBPd25QdHI8
Q0NMYXllckltcGw+IG5ld1RyZWUgPSBzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUobmV3TGF5ZXJz
LCBvbGRMYXllcnMsIGxheWVyQ2hyb21pdW1Sb290KTsKKworICAgIHJlc29sdmVJbnRlckxheWVy
UG9pbnRlcnNSZWN1cnNpdmUobmV3TGF5ZXJzLCBsYXllckNocm9taXVtUm9vdCk7CisKKyAgICBy
ZXR1cm4gbmV3VHJlZS5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgVHJlZVN5bmNocm9uaXplcjo6Y29s
bGVjdEV4aXN0aW5nQ0NMYXllckltcGxSZWN1cnNpdmUoQ0NMYXllckltcGxNYXAmIG1hcCwgUGFz
c093blB0cjxDQ0xheWVySW1wbD4gcG9wQ0NMYXllckltcGwpCit2b2lkIFRyZWVTeW5jaHJvbml6
ZXI6OmNvbGxlY3RFeGlzdGluZ0NDTGF5ZXJJbXBsUmVjdXJzaXZlKENDTGF5ZXJJbXBsTWFwJiBv
bGRMYXllcnMsIFBhc3NPd25QdHI8Q0NMYXllckltcGw+IHBvcENDTGF5ZXJJbXBsKQogewogICAg
IE93blB0cjxDQ0xheWVySW1wbD4gY2NMYXllckltcGwgPSBwb3BDQ0xheWVySW1wbDsKIApAQCAt
NTAsNDIgKzU5LDY3IEBAIHZvaWQgVHJlZVN5bmNocm9uaXplcjo6Y29sbGVjdEV4aXN0aW5nQ0NM
YXllckltcGxSZWN1cnNpdmUoQ0NMYXllckltcGxNYXAmIG1hcCwKIAogICAgIFZlY3RvcjxPd25Q
dHI8Q0NMYXllckltcGw+ID4mIGNoaWxkcmVuID0gY2NMYXllckltcGwtPm1fY2hpbGRyZW47CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkKLSAgICAgICAg
Y29sbGVjdEV4aXN0aW5nQ0NMYXllckltcGxSZWN1cnNpdmUobWFwLCBjaGlsZHJlbltpXS5yZWxl
YXNlKCkpOworICAgICAgICBjb2xsZWN0RXhpc3RpbmdDQ0xheWVySW1wbFJlY3Vyc2l2ZShvbGRM
YXllcnMsIGNoaWxkcmVuW2ldLnJlbGVhc2UoKSk7CiAKLSAgICBjb2xsZWN0RXhpc3RpbmdDQ0xh
eWVySW1wbFJlY3Vyc2l2ZShtYXAsIGNjTGF5ZXJJbXBsLT5tX21hc2tMYXllci5yZWxlYXNlKCkp
OwotICAgIGNvbGxlY3RFeGlzdGluZ0NDTGF5ZXJJbXBsUmVjdXJzaXZlKG1hcCwgY2NMYXllcklt
cGwtPm1fcmVwbGljYUxheWVyLnJlbGVhc2UoKSk7CisgICAgY29sbGVjdEV4aXN0aW5nQ0NMYXll
ckltcGxSZWN1cnNpdmUob2xkTGF5ZXJzLCBjY0xheWVySW1wbC0+bV9tYXNrTGF5ZXIucmVsZWFz
ZSgpKTsKKyAgICBjb2xsZWN0RXhpc3RpbmdDQ0xheWVySW1wbFJlY3Vyc2l2ZShvbGRMYXllcnMs
IGNjTGF5ZXJJbXBsLT5tX3JlcGxpY2FMYXllci5yZWxlYXNlKCkpOwogCiAgICAgaW50IGlkID0g
Y2NMYXllckltcGwtPmlkKCk7Ci0gICAgbWFwLnNldChpZCwgY2NMYXllckltcGwucmVsZWFzZSgp
KTsKKyAgICBvbGRMYXllcnMuc2V0KGlkLCBjY0xheWVySW1wbC5yZWxlYXNlKCkpOwogfQogCi1Q
YXNzT3duUHRyPENDTGF5ZXJJbXBsPiBUcmVlU3luY2hyb25pemVyOjpyZXVzZU9yQ3JlYXRlQ0NM
YXllckltcGwoQ0NMYXllckltcGxNYXAmIG1hcCwgTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCitQYXNz
T3duUHRyPENDTGF5ZXJJbXBsPiBUcmVlU3luY2hyb25pemVyOjpyZXVzZU9yQ3JlYXRlQ0NMYXll
ckltcGwoSGFzaE1hcDxpbnQsIENDTGF5ZXJJbXBsKj4gJm5ld0xheWVycywgQ0NMYXllckltcGxN
YXAmIG9sZExheWVycywgTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCiB7Ci0gICAgT3duUHRyPENDTGF5
ZXJJbXBsPiBjY0xheWVySW1wbCA9IG1hcC50YWtlKGxheWVyLT5pZCgpKTsKKyAgICBPd25QdHI8
Q0NMYXllckltcGw+IGNjTGF5ZXJJbXBsID0gb2xkTGF5ZXJzLnRha2UobGF5ZXItPmlkKCkpOwog
CiAgICAgaWYgKCFjY0xheWVySW1wbCkKLSAgICAgICAgcmV0dXJuIGxheWVyLT5jcmVhdGVDQ0xh
eWVySW1wbCgpOworICAgICAgICBjY0xheWVySW1wbCA9IGxheWVyLT5jcmVhdGVDQ0xheWVySW1w
bCgpOwogCisgICAgbmV3TGF5ZXJzLnNldChsYXllci0+aWQoKSwgY2NMYXllckltcGwuZ2V0KCkp
OwogICAgIHJldHVybiBjY0xheWVySW1wbC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NPd25QdHI8Q0NM
YXllckltcGw+IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShDQ0xh
eWVySW1wbE1hcCYgbWFwLCBMYXllckNocm9taXVtKiBsYXllcikKK1Bhc3NPd25QdHI8Q0NMYXll
ckltcGw+IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShIYXNoTWFw
PGludCwgQ0NMYXllckltcGwqPiAmbmV3TGF5ZXJzLCBDQ0xheWVySW1wbE1hcCYgb2xkTGF5ZXJz
LCBMYXllckNocm9taXVtKiBsYXllcikKIHsKICAgICBpZiAoIWxheWVyKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2NMYXllckltcGwgPSByZXVz
ZU9yQ3JlYXRlQ0NMYXllckltcGwobWFwLCBsYXllcik7CisgICAgT3duUHRyPENDTGF5ZXJJbXBs
PiBjY0xheWVySW1wbCA9IHJldXNlT3JDcmVhdGVDQ0xheWVySW1wbChuZXdMYXllcnMsIG9sZExh
eWVycywgbGF5ZXIpOwogCiAgICAgY2NMYXllckltcGwtPmNsZWFyQ2hpbGRMaXN0KCk7CiAgICAg
Y29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBjaGlsZHJlbiA9IGxheWVyLT5j
aGlsZHJlbigpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyAr
K2kpCi0gICAgICAgIGNjTGF5ZXJJbXBsLT5hZGRDaGlsZChzeW5jaHJvbml6ZVRyZWVSZWN1cnNp
dmUobWFwLCBjaGlsZHJlbltpXS5nZXQoKSkpOworICAgICAgICBjY0xheWVySW1wbC0+YWRkQ2hp
bGQoc3luY2hyb25pemVUcmVlUmVjdXJzaXZlKG5ld0xheWVycywgb2xkTGF5ZXJzLCBjaGlsZHJl
bltpXS5nZXQoKSkpOwogCi0gICAgY2NMYXllckltcGwtPnNldE1hc2tMYXllcihzeW5jaHJvbml6
ZVRyZWVSZWN1cnNpdmUobWFwLCBsYXllci0+bWFza0xheWVyKCkpKTsKLSAgICBjY0xheWVySW1w
bC0+c2V0UmVwbGljYUxheWVyKHN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShtYXAsIGxheWVyLT5y
ZXBsaWNhTGF5ZXIoKSkpOworICAgIGNjTGF5ZXJJbXBsLT5zZXRNYXNrTGF5ZXIoc3luY2hyb25p
emVUcmVlUmVjdXJzaXZlKG5ld0xheWVycywgb2xkTGF5ZXJzLCBsYXllci0+bWFza0xheWVyKCkp
KTsKKyAgICBjY0xheWVySW1wbC0+c2V0UmVwbGljYUxheWVyKHN5bmNocm9uaXplVHJlZVJlY3Vy
c2l2ZShuZXdMYXllcnMsIG9sZExheWVycywgbGF5ZXItPnJlcGxpY2FMYXllcigpKSk7CiAKICAg
ICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhjY0xheWVySW1wbC5nZXQoKSk7CiAgICAgcmV0dXJu
IGNjTGF5ZXJJbXBsLnJlbGVhc2UoKTsKIH0KIAordm9pZCBUcmVlU3luY2hyb25pemVyOjpyZXNv
bHZlSW50ZXJMYXllclBvaW50ZXJzUmVjdXJzaXZlKGNvbnN0IEhhc2hNYXA8aW50LCBDQ0xheWVy
SW1wbCo+ICZuZXdMYXllcnMsIExheWVyQ2hyb21pdW0qIGxheWVyKQoreworICAgIENDTGF5ZXJJ
bXBsKiBjY0xheWVySW1wbCA9IG5ld0xheWVycy5nZXQobGF5ZXItPmlkKCkpOworICAgIEFTU0VS
VChjY0xheWVySW1wbCk7CisKKyAgICBpZiAobGF5ZXItPm1faG9yaXpvbnRhbFNjcm9sbGJhckxh
eWVyKSB7CisgICAgICAgIENDU2Nyb2xsYmFyTGF5ZXJJbXBsKiBzY3JvbGxiYXJMYXllciA9IHN0
YXRpY19jYXN0PENDU2Nyb2xsYmFyTGF5ZXJJbXBsKj4obmV3TGF5ZXJzLmdldChsYXllci0+bV9o
b3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXItPmlkKCkpKTsKKyAgICAgICAgY2NMYXllckltcGwtPm1f
aG9yaXpvbnRhbFNjcm9sbGJhciA9IHNjcm9sbGJhckxheWVyLT5zY3JvbGxiYXIoKTsKKyAgICAg
ICAgY2NMYXllckltcGwtPm1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0Q3VycmVudFBvcyhjY0xh
eWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKS54KCkgKyBjY0xheWVySW1wbC0+c2Nyb2xsRGVsdGEo
KS53aWR0aCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgY2NMYXllckltcGwtPm1faG9yaXpvbnRh
bFNjcm9sbGJhciA9IDA7CisKKyAgICBpZiAobGF5ZXItPm1fdmVydGljYWxTY3JvbGxiYXJMYXll
cikgeworICAgICAgICBDQ1Njcm9sbGJhckxheWVySW1wbCogc2Nyb2xsYmFyTGF5ZXIgPSBzdGF0
aWNfY2FzdDxDQ1Njcm9sbGJhckxheWVySW1wbCo+KG5ld0xheWVycy5nZXQobGF5ZXItPm1fdmVy
dGljYWxTY3JvbGxiYXJMYXllci0+aWQoKSkpOworICAgICAgICBjY0xheWVySW1wbC0+bV92ZXJ0
aWNhbFNjcm9sbGJhciA9IHNjcm9sbGJhckxheWVyLT5zY3JvbGxiYXIoKTsKKyAgICAgICAgY2NM
YXllckltcGwtPm1fdmVydGljYWxTY3JvbGxiYXItPnNldEN1cnJlbnRQb3MoY2NMYXllckltcGwt
PnNjcm9sbFBvc2l0aW9uKCkueSgpICsgY2NMYXllckltcGwtPnNjcm9sbERlbHRhKCkuaGVpZ2h0
KCkpOworICAgIH0gZWxzZQorICAgICAgICBjY0xheWVySW1wbC0+bV92ZXJ0aWNhbFNjcm9sbGJh
ciA9IDA7CisKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgY2hp
bGRyZW4gPSBsYXllci0+Y2hpbGRyZW4oKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNo
aWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICByZXNvbHZlSW50ZXJMYXllclBvaW50ZXJzUmVj
dXJzaXZlKG5ld0xheWVycywgY2hpbGRyZW5baV0uZ2V0KCkpOworfQogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVHJlZVN5bmNocm9uaXplci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5oCmluZGV4IDEzNDcwOGNhNDNiZDg5ZWNiZGYy
ZmQyMTU5MmZkMDcyODZkY2MxNzkuLjUxN2JkMGQ5ZjdlMDFhZDA1N2M1YzQ3YWEyYjk0M2RmMmQx
ZTEzYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RyZWVTeW5jaHJvbml6ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmgKQEAgLTQ5LDkgKzQ5LDEwIEBAIHByaXZh
dGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgT3duUHRyPENDTGF5ZXJJbXBsPiA+IENDTGF5
ZXJJbXBsTWFwOwogCiAgICAgLy8gRGVjbGFyZWQgYXMgc3RhdGljIG1lbWJlciBmdW5jdGlvbnMg
c28gdGhleSBjYW4gYWNjZXNzIGZ1bmN0aW9ucyBvbiBMYXllckNocm9taXVtIGFzIGEgZnJpZW5k
IGNsYXNzLgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiByZXVzZU9yQ3JlYXRl
Q0NMYXllckltcGwoQ0NMYXllckltcGxNYXAmLCBMYXllckNocm9taXVtKik7CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8Q0NMYXllckltcGw+IHJldXNlT3JDcmVhdGVDQ0xheWVySW1wbChIYXNoTWFw
PGludCwgQ0NMYXllckltcGwqPiAmbmV3TGF5ZXJzLCBDQ0xheWVySW1wbE1hcCYsIExheWVyQ2hy
b21pdW0qKTsKICAgICBzdGF0aWMgdm9pZCBjb2xsZWN0RXhpc3RpbmdDQ0xheWVySW1wbFJlY3Vy
c2l2ZShDQ0xheWVySW1wbE1hcCYsIFBhc3NPd25QdHI8Q0NMYXllckltcGw+KTsKLSAgICBzdGF0
aWMgUGFzc093blB0cjxDQ0xheWVySW1wbD4gc3luY2hyb25pemVUcmVlUmVjdXJzaXZlKENDTGF5
ZXJJbXBsTWFwJiwgTGF5ZXJDaHJvbWl1bSopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5
ZXJJbXBsPiBzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUoSGFzaE1hcDxpbnQsIENDTGF5ZXJJbXBs
Kj4gJm5ld0xheWVycywgQ0NMYXllckltcGxNYXAmLCBMYXllckNocm9taXVtKik7CisgICAgc3Rh
dGljIHZvaWQgcmVzb2x2ZUludGVyTGF5ZXJQb2ludGVyc1JlY3Vyc2l2ZShjb25zdCBIYXNoTWFw
PGludCwgQ0NMYXllckltcGwqPiAmbmV3TGF5ZXJzLCBMYXllckNocm9taXVtKik7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggMDBjNjAz
MzBkZjExOGU4YmEzYmI5YTlmMDI0MjQzYjM0Mzk4MGQxZi4uNGI0OWExZWRlNGVjZTc5ZTU2MThl
ZjIwZGMyZjE2YjQ1ZDJkNjIwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMzUsNiAr
MzUsNyBAQAogI2luY2x1ZGUgImNjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5oIgogI2luY2x1ZGUg
ImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDTGF5
ZXJTb3J0ZXIuaCIKKyNpbmNsdWRlICJjYy9DQ1Njcm9sbGJhci5oIgogI2luY2x1ZGUgImNjL0ND
U29saWRDb2xvckRyYXdRdWFkLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
QEAgLTYxLDYgKzYyLDggQEAgQ0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKGludCBpZCkKICAgICAs
IG1faXNOb25Db21wb3NpdGVkQ29udGVudChmYWxzZSkKICAgICAsIG1fZHJhd3NDb250ZW50KGZh
bHNlKQogICAgICwgbV9wYWdlU2NhbGVEZWx0YSgxKQorICAgICwgbV9ob3Jpem9udGFsU2Nyb2xs
YmFyKDApCisgICAgLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyKDApCiAgICAgLCBtX3RhcmdldFJlbmRl
clN1cmZhY2UoMCkKICAgICAsIG1fZHJhd0RlcHRoKDApCiAgICAgLCBtX2RyYXdPcGFjaXR5KDAp
CkBAIC0xOTEsNiArMTk0LDEyIEBAIHZvaWQgQ0NMYXllckltcGw6OnNjcm9sbEJ5KGNvbnN0IElu
dFNpemUmIHNjcm9sbCkKICAgICBJbnRTaXplIG1heERlbHRhID0gbV9tYXhTY3JvbGxQb3NpdGlv
biAtIHRvU2l6ZShtX3Njcm9sbFBvc2l0aW9uKTsKICAgICAvLyBDbGFtcCBuZXdEZWx0YSBzbyB0
aGF0IHBvc2l0aW9uICsgZGVsdGEgc3RheXMgd2l0aGluIHNjcm9sbCBib3VuZHMuCiAgICAgbV9z
Y3JvbGxEZWx0YSA9IG5ld0RlbHRhLmV4cGFuZGVkVG8obWluRGVsdGEpLnNocnVua1RvKG1heERl
bHRhKTsKKworICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIG1faG9yaXpv
bnRhbFNjcm9sbGJhci0+c2V0Q3VycmVudFBvcyhtX3Njcm9sbFBvc2l0aW9uLngoKSArIG1fc2Ny
b2xsRGVsdGEud2lkdGgoKSk7CisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAg
IG1fdmVydGljYWxTY3JvbGxiYXItPnNldEN1cnJlbnRQb3MobV9zY3JvbGxQb3NpdGlvbi55KCkg
KyBtX3Njcm9sbERlbHRhLmhlaWdodCgpKTsKKwogICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdl
ZEZvclN1YnRyZWUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggZDZmZDQ4YTE2MTZl
OGY2ZmM3MTVhNGNlNzA1YjkzNjI4NTU2MzVkMi4uNjEyYzI4ODBmMGM0NGVmZTYzYTJiOTIxNjVi
NjFjY2RmZTZjOTYxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC00NCw2ICs0NCw3IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDTGF5ZXJTb3J0ZXI7CitjbGFzcyBDQ1Njcm9s
bGJhcjsKIGNsYXNzIExheWVyQ2hyb21pdW07CiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07
CiAKQEAgLTI4OCw2ICsyODksOSBAQCBwcml2YXRlOgogICAgIEludFNpemUgbV9tYXhTY3JvbGxQ
b3NpdGlvbjsKICAgICBmbG9hdCBtX3BhZ2VTY2FsZURlbHRhOwogCisgICAgQ0NTY3JvbGxiYXIq
IG1faG9yaXpvbnRhbFNjcm9sbGJhcjsKKyAgICBDQ1Njcm9sbGJhciogbV92ZXJ0aWNhbFNjcm9s
bGJhcjsKKwogICAgIC8vIFByb3BlcnRpZXMgb3duZWQgZXhjbHVzaXZlbHkgYnkgdGhpcyBDQ0xh
eWVySW1wbC4KICAgICAvLyBEZWJ1Z2dpbmcuCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3Jv
bGxiYXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlY2RhZmRkMzM2NDE4ODU3ZWMyOWU0M2ZmNzBiYjA1ZTU2
OGFjYmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhci5jcHAKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisK
KyNpbmNsdWRlICJDQ1Njcm9sbGJhci5oIgorCisjaW5jbHVkZSAiQ0NTY3JvbGxiYXJMYXllcklt
cGwuaCIKKyNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2ludCBDQ1Njcm9sbGJhcjo6eCgpIGNvbnN0IHsgcmV0
dXJuIG1fZnJhbWVSZWN0LngoKTsgfQoraW50IENDU2Nyb2xsYmFyOjp5KCkgY29uc3QgeyByZXR1
cm4gbV9mcmFtZVJlY3QueSgpOyB9CitpbnQgQ0NTY3JvbGxiYXI6OndpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZVJlY3Qud2lkdGgoKTsgfQoraW50IENDU2Nyb2xsYmFyOjpoZWlnaHQoKSBj
b25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC5oZWlnaHQoKTsgfQorSW50U2l6ZSBDQ1Njcm9sbGJh
cjo6c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LnNpemUoKTsgfQorSW50UG9pbnQg
Q0NTY3JvbGxiYXI6OmxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3QubG9jYXRp
b24oKTsgfQorCitTY3JvbGxWaWV3KiBDQ1Njcm9sbGJhcjo6cGFyZW50KCkgY29uc3QKK3sKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KK1Njcm9sbFZpZXcqIEND
U2Nyb2xsYmFyOjpyb290KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gMDsKK30KKwordm9pZCBDQ1Njcm9sbGJhcjo6c2V0RnJhbWVSZWN0KGNvbnN0IElu
dFJlY3QmIGZyYW1lUmVjdCkgeyBtX2ZyYW1lUmVjdCA9IGZyYW1lUmVjdDsgfQorSW50UmVjdCBD
Q1Njcm9sbGJhcjo6ZnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3Q7IH0KKwor
dm9pZCBDQ1Njcm9sbGJhcjo6aW52YWxpZGF0ZSgpIHsgaW52YWxpZGF0ZVJlY3QoZnJhbWVSZWN0
KCkpOyB9Cit2b2lkIENDU2Nyb2xsYmFyOjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0Jikg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorCitTY3JvbGxiYXJPdmVybGF5U3R5bGUgQ0NTY3Jv
bGxiYXI6OnNjcm9sbGJhck92ZXJsYXlTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmxheVN0
eWxlOyB9Cit2b2lkIENDU2Nyb2xsYmFyOjpnZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+JiB0
aWNrbWFya3MpIGNvbnN0IHsgdGlja21hcmtzID0gbV90aWNrbWFya3M7IH0KK2Jvb2wgQ0NTY3Jv
bGxiYXI6OmlzU2Nyb2xsYWJsZUFyZWFBY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX2lzU2Nyb2xs
YWJsZUFyZWFBY3RpdmU7IH0KK2Jvb2wgQ0NTY3JvbGxiYXI6OmlzU2Nyb2xsVmlld1Njcm9sbGJh
cigpIGNvbnN0IHsgcmV0dXJuIG1faXNTY3JvbGxWaWV3U2Nyb2xsYmFyOyB9CisKK0ludFBvaW50
IENDU2Nyb2xsYmFyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9pbnQm
IHdpbmRvd1BvaW50KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB3
aW5kb3dQb2ludDsKK30KKworYm9vbCBDQ1Njcm9sbGJhcjo6aXNDdXN0b21TY3JvbGxiYXIoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorU2Nyb2xsYmFyT3JpZW50YXRpb24gQ0NTY3JvbGxiYXI6
Om9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vcmllbnRhdGlvbjsgfQorCitpbnQgQ0NT
Y3JvbGxiYXI6OnZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50UG9zOyB9CitmbG9hdCBD
Q1Njcm9sbGJhcjo6Y3VycmVudFBvcygpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFBvczsgfQor
aW50IENDU2Nyb2xsYmFyOjp2aXNpYmxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaWJsZVNp
emU7IH0KK2ludCBDQ1Njcm9sbGJhcjo6dG90YWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV90b3Rh
bFNpemU7IH0KK2ludCBDQ1Njcm9sbGJhcjo6bWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fdG90
YWxTaXplIC0gbV92aXNpYmxlU2l6ZTsgfQorU2Nyb2xsYmFyQ29udHJvbFNpemUgQ0NTY3JvbGxi
YXI6OmNvbnRyb2xTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb250cm9sU2l6ZTsgfQorCitpbnQg
Q0NTY3JvbGxiYXI6OmxpbmVTdGVwKCkgY29uc3QgeyByZXR1cm4gbV9saW5lU3RlcDsgfQoraW50
IENDU2Nyb2xsYmFyOjpwYWdlU3RlcCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZVN0ZXA7IH0KKwor
U2Nyb2xsYmFyUGFydCBDQ1Njcm9sbGJhcjo6cHJlc3NlZFBhcnQoKSBjb25zdCB7IHJldHVybiBt
X3ByZXNzZWRQYXJ0OyB9CitTY3JvbGxiYXJQYXJ0IENDU2Nyb2xsYmFyOjpob3ZlcmVkUGFydCgp
IGNvbnN0IHsgcmV0dXJuIG1faG92ZXJlZFBhcnQ7IH0KKwordm9pZCBDQ1Njcm9sbGJhcjo6c3R5
bGVDaGFuZ2VkKCkgeyB9CisKK2Jvb2wgQ0NTY3JvbGxiYXI6OmVuYWJsZWQoKSBjb25zdCB7IHJl
dHVybiBtX2VuYWJsZWQ7IH0KK3ZvaWQgQ0NTY3JvbGxiYXI6OnNldEVuYWJsZWQoYm9vbCBlbmFi
bGVkKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIG1fZW5hYmxlZCA9IGVuYWJs
ZWQ7Cit9CisKKwordm9pZCBDQ1Njcm9sbGJhcjo6c2V0Q3VycmVudFBvcyhmbG9hdCBjdXJyZW50
UG9zKQoreworICAgIG1fY3VycmVudFBvcyA9IGN1cnJlbnRQb3M7Cit9CisKK0NDU2Nyb2xsYmFy
OjpDQ1Njcm9sbGJhcigpCit7Cit9CisKK3ZvaWQgQ0NTY3JvbGxiYXI6OnB1bGxQcm9wZXJ0aWVz
RnJvbShTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBtX2ZyYW1lUmVjdCA9IHNjcm9sbGJh
ci0+ZnJhbWVSZWN0KCk7CisKKyAgICBtX292ZXJsYXlTdHlsZSA9IHNjcm9sbGJhci0+c2Nyb2xs
YmFyT3ZlcmxheVN0eWxlKCk7CisgICAgc2Nyb2xsYmFyLT5nZXRUaWNrbWFya3MobV90aWNrbWFy
a3MpOworICAgIG1faXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSA9IHNjcm9sbGJhci0+aXNTY3JvbGxh
YmxlQXJlYUFjdGl2ZSgpOworICAgIG1faXNTY3JvbGxWaWV3U2Nyb2xsYmFyID0gc2Nyb2xsYmFy
LT5pc1Njcm9sbFZpZXdTY3JvbGxiYXIoKTsKKworICAgIG1fb3JpZW50YXRpb24gPSBzY3JvbGxi
YXItPm9yaWVudGF0aW9uKCk7CisgICAgCisgICAgbV9jdXJyZW50UG9zID0gc2Nyb2xsYmFyLT5j
dXJyZW50UG9zKCk7CisgICAgbV92aXNpYmxlU2l6ZSA9IHNjcm9sbGJhci0+dmlzaWJsZVNpemUo
KTsKKyAgICBtX3RvdGFsU2l6ZSA9IHNjcm9sbGJhci0+dG90YWxTaXplKCk7CisgICAgbV9jb250
cm9sU2l6ZSA9IHNjcm9sbGJhci0+Y29udHJvbFNpemUoKTsKKworICAgIG1fbGluZVN0ZXAgPSBz
Y3JvbGxiYXItPmxpbmVTdGVwKCk7CisgICAgbV9wYWdlU3RlcCA9IHNjcm9sbGJhci0+cGFnZVN0
ZXAoKTsKKworICAgIG1fcHJlc3NlZFBhcnQgPSBzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCk7Cisg
ICAgbV9ob3ZlcmVkUGFydCA9IHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKTsKKworICAgIG1fZW5h
YmxlZCA9IHNjcm9sbGJhci0+ZW5hYmxlZCgpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxi
YXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Ny
b2xsYmFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZDU1YzZkNmU5NTQ1NzAwZDliYmMwZjU4NzFiMGFlYWZhYmNk
ZTU2MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyLmgKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIENDU2Nyb2xsYmFyX2gKKyNkZWZpbmUgQ0NTY3JvbGxiYXJfaAorCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVDbGllbnQuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0xheWVySW1wbDsKK2NsYXNzIENDU2Ny
b2xsYmFyTGF5ZXJJbXBsOworY2xhc3MgU2Nyb2xsYmFyOworCitjbGFzcyBDQ1Njcm9sbGJhciA6
IHB1YmxpYyBTY3JvbGxiYXJUaGVtZUNsaWVudCB7CitwdWJsaWM6CisgICAgLy8gU2Nyb2xsYmFy
VGhlbWVDbGllbnQgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIGludCB4KCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBpbnQgeSgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHdpZHRoKCkgY29uc3Q7
CisgICAgdmlydHVhbCBpbnQgaGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBJbnRTaXplIHNp
emUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBvaW50IGxvY2F0aW9uKCkgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIFNjcm9sbFZpZXcqIHBhcmVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgU2Nyb2xs
Vmlldyogcm9vdCgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lUmVjdChjb25z
dCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBJbnRSZWN0IGZyYW1lUmVjdCgpIGNvbnN0OworCisg
ICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0
ZVJlY3QoY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCBTY3JvbGxiYXJPdmVybGF5U3R5
bGUgc2Nyb2xsYmFyT3ZlcmxheVN0eWxlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGdldFRp
Y2ttYXJrcyhWZWN0b3I8SW50UmVjdD4mKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTY3Jv
bGxhYmxlQXJlYUFjdGl2ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbFZpZXdT
Y3JvbGxiYXIoKSBjb25zdDsKKworICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21Db250
YWluaW5nV2luZG93KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCk7CisKKyAgICB2aXJ0dWFs
IGJvb2wgaXNDdXN0b21TY3JvbGxiYXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGludCB2YWx1ZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgY3VycmVudFBvcygpIGNvbnN0OworICAgIHZpcnR1
YWwgaW50IHZpc2libGVTaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgdG90YWxTaXplKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBpbnQgbWF4aW11bSgpIGNvbnN0OworICAgIHZpcnR1YWwgU2Ny
b2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgaW50
IGxpbmVTdGVwKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgcGFnZVN0ZXAoKSBjb25zdDsKKwor
ICAgIHZpcnR1YWwgU2Nyb2xsYmFyUGFydCBwcmVzc2VkUGFydCgpIGNvbnN0OworICAgIHZpcnR1
YWwgU2Nyb2xsYmFyUGFydCBob3ZlcmVkUGFydCgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lk
IHN0eWxlQ2hhbmdlZCgpOworCisgICAgdmlydHVhbCBib29sIGVuYWJsZWQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlZChib29sKTsKKworCisgICAgdm9pZCBzZXRDdXJyZW50
UG9zKGZsb2F0KTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgU2Nyb2xsYmFyTGF5ZXJD
aHJvbWl1bTsKKyAgICBmcmllbmQgY2xhc3MgQ0NTY3JvbGxiYXJMYXllckltcGw7CisKKyAgICBD
Q1Njcm9sbGJhcigpOworICAgIHZvaWQgcHVsbFByb3BlcnRpZXNGcm9tKFNjcm9sbGJhciopOwor
CisgICAgSW50UmVjdCBtX2ZyYW1lUmVjdDsKKworICAgIFNjcm9sbGJhck92ZXJsYXlTdHlsZSBt
X292ZXJsYXlTdHlsZTsKKyAgICBWZWN0b3I8SW50UmVjdD4gbV90aWNrbWFya3M7CisgICAgYm9v
bCBtX2lzU2Nyb2xsYWJsZUFyZWFBY3RpdmU7CisgICAgYm9vbCBtX2lzU2Nyb2xsVmlld1Njcm9s
bGJhcjsKKworICAgIFNjcm9sbGJhck9yaWVudGF0aW9uIG1fb3JpZW50YXRpb247CisKKyAgICBm
bG9hdCBtX2N1cnJlbnRQb3M7CisgICAgaW50IG1fdmlzaWJsZVNpemU7CisgICAgaW50IG1fdG90
YWxTaXplOworICAgIFNjcm9sbGJhckNvbnRyb2xTaXplIG1fY29udHJvbFNpemU7CisKKyAgICBp
bnQgbV9saW5lU3RlcDsKKyAgICBpbnQgbV9wYWdlU3RlcDsKKworICAgIFNjcm9sbGJhclBhcnQg
bV9wcmVzc2VkUGFydDsKKyAgICBTY3JvbGxiYXJQYXJ0IG1faG92ZXJlZFBhcnQ7CisKKyAgICBi
b29sIG1fZW5hYmxlZDsKK307CisKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjA3MDIzMjYwOThkYjNkMDE2ZmE4YWQ1ODQxMGM2YzEyMDBiZDJhNWEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5jcHAKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisK
KyNpbmNsdWRlICJDQ1Njcm9sbGJhckxheWVySW1wbC5oIgorCisjaW5jbHVkZSAiQ0NTY3JvbGxi
YXIuaCIKKyNpbmNsdWRlICJDQ1RpbGVEcmF3UXVhZC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCisjaW5jbHVkZSAiU2Ny
b2xsYmFyVGhlbWUuaCIKKworI2lmIFVTRShTS0lBKQorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4
dFNraWEuaCIKKyNpbmNsdWRlICJTa0dwdURldmljZS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworUGFzc093blB0cjxDQ1Njcm9sbGJhckxheWVySW1wbD4gQ0NTY3JvbGxiYXJM
YXllckltcGw6OmNyZWF0ZShpbnQgaWQpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1Nj
cm9sbGJhckxheWVySW1wbChpZCkpOworfQorCitDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3Jv
bGxiYXJMYXllckltcGwoaW50IGlkKQorICAgIDogQ0NMYXllckltcGwoaWQpCit7Cit9CisKK3Zv
aWQgQ0NTY3JvbGxiYXJMYXllckltcGw6OndpbGxEcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSog
bGF5ZXJSZW5kZXJlcikKK3sKKyAgICBpZiAoYm91bmRzKCkuaXNFbXB0eSgpIHx8IGNvbnRlbnRC
b3VuZHMoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV90ZXh0dXJl
KQorICAgICAgICBtX3RleHR1cmUgPSBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKGxheWVyUmVuZGVy
ZXItPnJlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlcigpKTsKKworICAgIEludFNpemUgdGV4dHVy
ZVNpemUgPSBjb250ZW50Qm91bmRzKCk7CisgICAgaWYgKCFtX3RleHR1cmUtPnJlc2VydmUodGV4
dHVyZVNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fdGV4dHVyZS0+YWxsb2NhdGUobGF5ZXJSZW5kZXJlci0+cmVuZGVyU3VyZmFjZVRleHR1cmVB
bGxvY2F0b3IoKSk7CisKKyNpZiBVU0UoU0tJQSkKKyAgICBHclBsYXRmb3JtVGV4dHVyZURlc2Mg
dGV4dHVyZURlc2M7CisgICAgdGV4dHVyZURlc2MuZkZsYWdzID0ga1JlbmRlclRhcmdldF9HclBs
YXRmb3JtVGV4dHVyZUZsYWc7CisgICAgdGV4dHVyZURlc2MuZldpZHRoID0gdGV4dHVyZVNpemUu
d2lkdGgoKTsKKyAgICB0ZXh0dXJlRGVzYy5mSGVpZ2h0ID0gdGV4dHVyZVNpemUuaGVpZ2h0KCk7
CisgICAgdGV4dHVyZURlc2MuZkNvbmZpZyA9IGtSR0JBXzg4ODhfUE1fR3JQaXhlbENvbmZpZzsK
KyAgICB0ZXh0dXJlRGVzYy5mU2FtcGxlQ250ID0gMDsKKyAgICB0ZXh0dXJlRGVzYy5mVGV4dHVy
ZUhhbmRsZSA9IG1fdGV4dHVyZS0+dGV4dHVyZUlkKCk7CisKKyAgICBHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCA9IGxheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKKyAgICBHckNvbnRleHQqIGdy
Q29udGV4dCA9IGNvbnRleHQtPmdyQ29udGV4dCgpOworICAgIFNrQXV0b1RVbnJlZjxHclRleHR1
cmU+IHRhcmdldChnckNvbnRleHQtPmNyZWF0ZVBsYXRmb3JtVGV4dHVyZSh0ZXh0dXJlRGVzYykp
OworICAgIFNrQXV0b1RVbnJlZjxTa0RldmljZT4gZGV2aWNlKG5ldyBTa0dwdURldmljZShnckNv
bnRleHQsIHRhcmdldC5nZXQoKSkpOworICAgIFNrQXV0b1RVbnJlZjxTa0NhbnZhcz4gY2FudmFz
KG5ldyBTa0NhbnZhcyhkZXZpY2UuZ2V0KCkpKTsKKworICAgIGNhbnZhcy5nZXQoKS0+dHJhbnNs
YXRlKDAsIHRleHR1cmVTaXplLmhlaWdodCgpKTsKKyAgICBjYW52YXMuZ2V0KCktPnNjYWxlKDEs
IC0xKTsKKworICAgIFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1Db250ZXh0KGNhbnZhcy5n
ZXQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dCgmcGxhdGZvcm1Db250
ZXh0KTsKKworICAgIGdyQ29udGV4dC0+cmVzZXRDb250ZXh0KCk7CisgICAgcGFpbnQoJmdyYXBo
aWNzQ29udGV4dCk7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9
CisKK3ZvaWQgQ0NTY3JvbGxiYXJMYXllckltcGw6OmFwcGVuZFF1YWRzKENDUXVhZExpc3QmIHF1
YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlKQoreworICAg
IGlmICghbV90ZXh0dXJlLT5pc1Jlc2VydmVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIElu
dFJlY3QgcXVhZFJlY3QoSW50UG9pbnQoKSwgYm91bmRzKCkpOworICAgIHF1YWRMaXN0LmFwcGVu
ZChDQ1RpbGVEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHF1YWRS
ZWN0LCBtX3RleHR1cmUtPnRleHR1cmVJZCgpLCBJbnRQb2ludCgpLCBtX3RleHR1cmUtPnNpemUo
KSwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUiwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIHRy
dWUpKTsKK30KKwordm9pZCBDQ1Njcm9sbGJhckxheWVySW1wbDo6ZGlkRHJhdygpCit7CisgICAg
bV90ZXh0dXJlLT51bnJlc2VydmUoKTsKK30KKwordm9pZCBDQ1Njcm9sbGJhckxheWVySW1wbDo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIFNjcm9sbGJhclRoZW1lKiB0
aGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpOyAvLyBGSVhNRQorCisgICAgaWYgKHRoZW1l
LT51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKSkKKyAgICAgICAgY29udGV4dC0+Y2xlYXJSZWN0KElu
dFJlY3QoSW50UG9pbnQoKSwgY29udGVudEJvdW5kcygpKSk7CisgICAgdGhlbWUtPnBhaW50KCZt
X3Njcm9sbGJhciwgY29udGV4dCwgSW50UmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91bmRzKCkp
KTsKK30KKworfQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Ny
b2xsYmFyTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdjMWE5NzYyMGFlMTAx
NjIzZGQxZjgyYmM2NTE0YjQ5ZmJiY2Q4M2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5o
CkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDU2Nyb2xsYmFyTGF5ZXJJbXBsX2gK
KyNkZWZpbmUgQ0NTY3JvbGxiYXJMYXllckltcGxfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorCisjaW5jbHVkZSAiQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJDQ1Njcm9s
bGJhci5oIgorI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworCitjbGFzcyBDQ1Njcm9sbGJhckxheWVySW1w
bCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8
Q0NTY3JvbGxiYXJMYXllckltcGw+IGNyZWF0ZShpbnQgaWQpOworCisgICAgdmlydHVhbCB2b2lk
IHdpbGxEcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSopOworICAgIHZpcnR1YWwgdm9pZCBhcHBl
bmRRdWFkcyhDQ1F1YWRMaXN0JiwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkRHJhdygpOworCisgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqKTsK
KworICAgIENDU2Nyb2xsYmFyKiBzY3JvbGxiYXIoKSB7IHJldHVybiAmbV9zY3JvbGxiYXI7IH0K
KworcHJvdGVjdGVkOgorICAgIENDU2Nyb2xsYmFyTGF5ZXJJbXBsKGludCBpZCk7CisKK3ByaXZh
dGU6CisgICAgQ0NTY3JvbGxiYXIgbV9zY3JvbGxiYXI7CisKKyAgICBPd25QdHI8TWFuYWdlZFRl
eHR1cmU+IG1fdGV4dHVyZTsKK307CisKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1Njcm9sbGJhclRoZW1lR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9T
Y3JvbGxiYXJUaGVtZUd0ay5jcHAKaW5kZXggZTk5MzY0ZjJhN2ZjYWY0ODg4MzBiNDY4ZGUxZDE4
YWQ3NTA0ZTkwZi4uOTRlM2ZkNzZmN2ZmYzUyMzBmYzg0N2ZmOWZlY2FmNDNkYzQ2ZmEwNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3Bw
CkBAIC0zMyw3ICszMyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIEhhc2hT
ZXQ8U2Nyb2xsYmFyKj4qIGdTY3JvbGxiYXJzOworc3RhdGljIEhhc2hTZXQ8U2Nyb2xsYmFyVGhl
bWVDbGllbnQqPiogZ1Njcm9sbGJhcnM7CiAKIFNjcm9sbGJhclRoZW1lKiBTY3JvbGxiYXJUaGVt
ZTo6bmF0aXZlVGhlbWUoKQogewpAQCAtNDUsMTQgKzQ1LDE0IEBAIFNjcm9sbGJhclRoZW1lR3Rr
Ojp+U2Nyb2xsYmFyVGhlbWVHdGsoKQogewogfQogCi12b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpy
ZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3ZvaWQgU2Nyb2xsYmFyVGhl
bWVHdGs6OnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIp
CiB7CiAgICAgaWYgKCFnU2Nyb2xsYmFycykKLSAgICAgICAgZ1Njcm9sbGJhcnMgPSBuZXcgSGFz
aFNldDxTY3JvbGxiYXIqPjsKKyAgICAgICAgZ1Njcm9sbGJhcnMgPSBuZXcgSGFzaFNldDxTY3Jv
bGxiYXJUaGVtZUNsaWVudCo+OwogICAgIGdTY3JvbGxiYXJzLT5hZGQoc2Nyb2xsYmFyKTsKIH0K
IAotdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6dW5yZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIq
IHNjcm9sbGJhcikKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnVucmVnaXN0ZXJTY3JvbGxiYXIo
U2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKIHsKICAgICBnU2Nyb2xsYmFycy0+cmVt
b3ZlKHNjcm9sbGJhcik7CiAgICAgaWYgKGdTY3JvbGxiYXJzLT5pc0VtcHR5KCkpIHsKQEAgLTY5
LDkgKzY5LDkgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6dXBkYXRlU2Nyb2xsYmFyc0ZyYW1l
VGhpY2tuZXNzKCkKICAgICAvLyBVcGRhdGUgdGhlIHRoaWNrbmVzcyBvZiBldmVyeSBpbnRlcmlv
ciBmcmFtZSBzY3JvbGxiYXIgd2lkZ2V0LiBUaGUKICAgICAvLyBwbGF0Zm9ybS1pbmRlcGVuZGVu
dCBzY3JvbGxiYXIgdGhlbSBjb2RlIGlzbid0IHlldCBzbWFydCBlbm91Z2ggdG8gZ2V0CiAgICAg
Ly8gdGhpcyBpbmZvcm1hdGlvbiB3aGVuIGl0IHBhaW50cy4KLSAgICBIYXNoU2V0PFNjcm9sbGJh
cio+OjppdGVyYXRvciBlbmQgPSBnU2Nyb2xsYmFycy0+ZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0
PFNjcm9sbGJhcio+OjppdGVyYXRvciBpdCA9IGdTY3JvbGxiYXJzLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSAoKml0KTsKKyAgICBI
YXNoU2V0PFNjcm9sbGJhclRoZW1lQ2xpZW50Kj46Oml0ZXJhdG9yIGVuZCA9IGdTY3JvbGxiYXJz
LT5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8U2Nyb2xsYmFyVGhlbWVDbGllbnQqPjo6aXRlcmF0
b3IgaXQgPSBnU2Nyb2xsYmFycy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIgPSAoKml0KTsKIAogICAgICAgICAvLyBU
b3AtbGV2ZWwgc2Nyb2xsYmFyIGkuZS4gc2Nyb2xsYmFycyB3aG8gaGF2ZSBhIHBhcmVudCBTY3Jv
bGxWaWV3CiAgICAgICAgIC8vIHdpdGggbm8gcGFyZW50IGFyZSBuYXRpdmUsIGFuZCB0aHVzIGRv
IG5vdCBuZWVkIHRvIGJlIHJlc2l6ZWQuCkBAIC04NiwxNCArODYsMTQgQEAgdm9pZCBTY3JvbGxi
YXJUaGVtZUd0azo6dXBkYXRlU2Nyb2xsYmFyc0ZyYW1lVGhpY2tuZXNzKCkKICAgICB9CiB9CiAK
LWJvb2wgU2Nyb2xsYmFyVGhlbWVHdGs6Omhhc1RodW1iKFNjcm9sbGJhciogc2Nyb2xsYmFyKQor
Ym9vbCBTY3JvbGxiYXJUaGVtZUd0azo6aGFzVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNj
cm9sbGJhcikKIHsKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBqdXN0IGNhbGxlZCBhcyBhIHBhaW50
LXRpbWUgb3B0aW1pemF0aW9uIHRvIHNlZSBpZgogICAgIC8vIHBhaW50aW5nIHRoZSB0aHVtYiBj
YW4gYmUgc2tpcHBlZC4gIFdlIGRvbid0IGhhdmUgdG8gYmUgZXhhY3QgaGVyZS4KICAgICByZXR1
cm4gdGh1bWJMZW5ndGgoc2Nyb2xsYmFyKSA+IDA7CiB9CiAKLUludFJlY3QgU2Nyb2xsYmFyVGhl
bWVHdGs6OmJhY2tCdXR0b25SZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0
IHBhcnQsIGJvb2wpCitJbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjpiYWNrQnV0dG9uUmVjdChT
Y3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wp
CiB7CiAgICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvbkVuZFBhcnQgJiYgIW1faGFzQmFja0J1dHRv
bkVuZFBhcnQpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CkBAIC0xMTQsNyArMTE0LDcgQEAg
SW50UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6YmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIsIFNjcm9sbGJhclBhcnQgcGEKICAgICByZXR1cm4gSW50UmVjdCh4LCBzY3JvbGxiYXIt
PnkoKSArIHNjcm9sbGJhci0+aGVpZ2h0KCkgLSBtX3Ryb3VnaEJvcmRlcldpZHRoIC0gKDIgKiBz
aXplLmhlaWdodCgpKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKIH0KIAotSW50UmVj
dCBTY3JvbGxiYXJUaGVtZUd0azo6Zm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxi
YXIsIFNjcm9sbGJhclBhcnQgcGFydCwgYm9vbCkKK0ludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6
OmZvcndhcmRCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIFNjcm9s
bGJhclBhcnQgcGFydCwgYm9vbCkKIHsKICAgICBpZiAocGFydCA9PSBGb3J3YXJkQnV0dG9uU3Rh
cnRQYXJ0ICYmICFtX2hhc0ZvcndhcmRCdXR0b25TdGFydFBhcnQpCiAgICAgICAgIHJldHVybiBJ
bnRSZWN0KCk7CkBAIC0xNDAsNyArMTQwLDcgQEAgSW50UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6
Zm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQKICAg
ICByZXR1cm4gSW50UmVjdCh4LCBzY3JvbGxiYXItPnkoKSArIG1fdHJvdWdoQm9yZGVyV2lkdGgg
KyBzaXplLmhlaWdodCgpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogfQogCi1JbnRS
ZWN0IFNjcm9sbGJhclRoZW1lR3RrOjp0cmFja1JlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGJv
b2wpCitJbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjp0cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVD
bGllbnQqIHNjcm9sbGJhciwgYm9vbCkKIHsKICAgICAvLyBUaGUgcGFkZGluZyBhbG9uZyB0aGUg
dGh1bWIgbW92ZW1lbnQgYXhpcyBpbmNsdWRlcyB0aGUgdHJvdWdoIGJvcmRlcgogICAgIC8vIHBs
dXMgdGhlIHNpemUgb2Ygc3RlcHBlciBzcGFjaW5nICh0aGUgc3BhY2UgYmV0d2VlbiB0aGUgc3Rl
cHBlciBhbmQKQEAgLTE4MCw3ICsxODAsNyBAQCBJbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjp0
cmFja1JlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGJvb2wpCiAgICAgICAgICAgICAgICAgICAg
dGhpY2tuZXNzLCBzY3JvbGxiYXItPmhlaWdodCgpIC0gKDIgKiBtb3ZlbWVudEF4aXNQYWRkaW5n
KSAtIGJ1dHRvbnNXaWR0aCk7CiB9CiAKLUludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OnRodW1i
UmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgdW5jb25zdHJhaW5lZFRy
YWNrUmVjdCkKK0ludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OnRodW1iUmVjdChTY3JvbGxiYXJU
aGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiB1bmNvbnN0cmFpbmVkVHJhY2tS
ZWN0KQogewogICAgIEludFJlY3QgdHJhY2tSZWN0ID0gY29uc3RyYWluVHJhY2tSZWN0VG9UcmFj
a1BpZWNlcyhzY3JvbGxiYXIsIHVuY29uc3RyYWluZWRUcmFja1JlY3QpOwogICAgIGludCB0aHVt
YlBvcyA9IHRodW1iUG9zaXRpb24oc2Nyb2xsYmFyKTsKQEAgLTE5MSw3ICsxOTEsNyBAQCBJbnRS
ZWN0IFNjcm9sbGJhclRoZW1lR3RrOjp0aHVtYlJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNv
bnN0IEludFJlY3QmIHVuY29ucwogICAgIHJldHVybiBJbnRSZWN0KHRyYWNrUmVjdC54KCkgKyAo
dHJhY2tSZWN0LndpZHRoKCkgLSBtX3RodW1iRmF0bmVzcykgLyAyLCB0cmFja1JlY3QueSgpICsg
dGh1bWJQb3MsIG1fdGh1bWJGYXRuZXNzLCB0aHVtYkxlbmd0aChzY3JvbGxiYXIpKTsKIH0KIAot
Ym9vbCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIEdyYXBo
aWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQor
Ym9vbCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9s
bGJhciwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRh
bWFnZVJlY3QpCiB7CiAgICAgaWYgKGdyYXBoaWNzQ29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNjAsNyArMjYwLDcgQEAgYm9vbCBTY3JvbGxi
YXJUaGVtZUd0azo6cGFpbnQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb24KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTY3JvbGxiYXJUaGVtZUd0
azo6c2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZl
bnQmIGV2ZW50KQorYm9vbCBTY3JvbGxiYXJUaGVtZUd0azo6c2hvdWxkQ2VudGVyT25UaHVtYihT
Y3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCiB7
CiAgICAgcmV0dXJuIChldmVudC5zaGlmdEtleSgpICYmIGV2ZW50LmJ1dHRvbigpID09IExlZnRC
dXR0b24pIHx8IChldmVudC5idXR0b24oKSA9PSBNaWRkbGVCdXR0b24pOwogfQpAQCAtMjcwLDcg
KzI3MCw3IEBAIGludCBTY3JvbGxiYXJUaGVtZUd0azo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9s
bGJhckNvbnRyb2xTaXplKQogICAgIHJldHVybiBtX3RodW1iRmF0bmVzcyArIChtX3Ryb3VnaEJv
cmRlcldpZHRoICogMik7CiB9CiAKLUludFNpemUgU2Nyb2xsYmFyVGhlbWVHdGs6OmJ1dHRvblNp
emUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCitJbnRTaXplIFNjcm9sbGJhclRoZW1lR3RrOjpidXR0
b25TaXplKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCiB7CiAgICAgaWYgKHNjcm9s
bGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKICAgICAgICAgcmV0dXJu
IEludFNpemUobV90aHVtYkZhdG5lc3MsIG1fc3RlcHBlclNpemUpOwpAQCAtMjc5LDcgKzI3OSw3
IEBAIEludFNpemUgU2Nyb2xsYmFyVGhlbWVHdGs6OmJ1dHRvblNpemUoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIpCiAgICAgcmV0dXJuIEludFNpemUobV9zdGVwcGVyU2l6ZSwgbV90aHVtYkZhdG5lc3Mp
OwogfQogCi1pbnQgU2Nyb2xsYmFyVGhlbWVHdGs6Om1pbmltdW1UaHVtYkxlbmd0aChTY3JvbGxi
YXIqIHNjcm9sbGJhcikKK2ludCBTY3JvbGxiYXJUaGVtZUd0azo6bWluaW11bVRodW1iTGVuZ3Ro
KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCiB7CiAgICAgcmV0dXJuIG1fbWluVGh1
bWJMZW5ndGg7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Ny
b2xsYmFyVGhlbWVHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJU
aGVtZUd0ay5oCmluZGV4IDQ1ZTA5M2IxZWM5N2QxYWZhYTI0YzU4MzMxNTY2OTMwMmU4NWNkNjMu
LmU3M2RmMjg1NTAxYjU4MjZkYzA1OWI4M2JmYzNkOWE0MTcwZDRiYTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5oCkBAIC0zNywyOSArMzcs
MjkgQEAgcHVibGljOgogICAgIFNjcm9sbGJhclRoZW1lR3RrKCk7CiAgICAgdmlydHVhbCB+U2Ny
b2xsYmFyVGhlbWVHdGsoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBoYXNCdXR0b25zKFNjcm9sbGJh
ciopIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFzVGh1bWIoU2Nyb2xsYmFy
Kik7Ci0gICAgdmlydHVhbCBJbnRSZWN0IGJhY2tCdXR0b25SZWN0KFNjcm9sbGJhciosIFNjcm9s
bGJhclBhcnQsIGJvb2wpOwotICAgIHZpcnR1YWwgSW50UmVjdCBmb3J3YXJkQnV0dG9uUmVjdChT
Y3JvbGxiYXIqLCBTY3JvbGxiYXJQYXJ0LCBib29sKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgdHJh
Y2tSZWN0KFNjcm9sbGJhciosIGJvb2wpOwotICAgIEludFJlY3QgdGh1bWJSZWN0KFNjcm9sbGJh
ciosIGNvbnN0IEludFJlY3QmIHVuY29uc3RyYWluZWRUcmFja1JlY3QpOwotICAgIGJvb2wgcGFp
bnQoU2Nyb2xsYmFyKiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVj
dCk7Ci0gICAgdm9pZCBwYWludFNjcm9sbGJhckJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0Kiwg
U2Nyb2xsYmFyKik7Ci0gICAgdm9pZCBwYWludFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0NvbnRl
eHQqLCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBwYWludFRodW1iKEdy
YXBoaWNzQ29udGV4dCosIFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyKiwgY29uc3QgSW50
UmVjdCYsIFNjcm9sbGJhclBhcnQpOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDZW50ZXJPblRo
dW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAgIHZpcnR1YWwg
Ym9vbCBoYXNCdXR0b25zKFNjcm9sbGJhclRoZW1lQ2xpZW50KikgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBoYXNUaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCopOworICAgIHZp
cnR1YWwgSW50UmVjdCBiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIFNjcm9s
bGJhclBhcnQsIGJvb2wpOworICAgIHZpcnR1YWwgSW50UmVjdCBmb3J3YXJkQnV0dG9uUmVjdChT
Y3JvbGxiYXJUaGVtZUNsaWVudCosIFNjcm9sbGJhclBhcnQsIGJvb2wpOworICAgIHZpcnR1YWwg
SW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBib29sKTsKKyAgICBJbnRS
ZWN0IHRodW1iUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3QmIHVuY29u
c3RyYWluZWRUcmFja1JlY3QpOworICAgIGJvb2wgcGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQq
LCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAgICB2b2lk
IHBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVt
ZUNsaWVudCopOworICAgIHZvaWQgcGFpbnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0
KiwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBwYWlu
dFRodW1iKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQqLCBT
Y3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3QmLCBTY3JvbGxiYXJQYXJ0KTsKKyAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCos
IGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwogICAgIHZpcnR1YWwgaW50IHNjcm9sbGJhclRo
aWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSk7Ci0gICAgdmlydHVhbCBJbnRTaXplIGJ1dHRv
blNpemUoU2Nyb2xsYmFyKik7Ci0gICAgdmlydHVhbCBpbnQgbWluaW11bVRodW1iTGVuZ3RoKFNj
cm9sbGJhciopOworICAgIHZpcnR1YWwgSW50U2l6ZSBidXR0b25TaXplKFNjcm9sbGJhclRoZW1l
Q2xpZW50Kik7CisgICAgdmlydHVhbCBpbnQgbWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhclRo
ZW1lQ2xpZW50Kik7CiAKICAgICAvLyBUT0RPOiBUaGVzZSBhcmUgdGhlIGRlZmF1bHQgR1RLKyB2
YWx1ZXMuIEF0IHNvbWUgcG9pbnQgd2Ugc2hvdWxkIHB1bGwgdGhlc2UgZnJvbSB0aGUgdGhlbWUg
aXRzZWxmLgogICAgIHZpcnR1YWwgZG91YmxlIGluaXRpYWxBdXRvc2Nyb2xsVGltZXJEZWxheSgp
IHsgcmV0dXJuIDAuMjA7IH0KICAgICB2aXJ0dWFsIGRvdWJsZSBhdXRvc2Nyb2xsVGltZXJEZWxh
eSgpIHsgcmV0dXJuIDAuMDI7IH0KICAgICB2b2lkIHVwZGF0ZVRoZW1lUHJvcGVydGllcygpOwog
ICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0ZyYW1lVGhpY2tuZXNzKCk7Ci0gICAgdm9pZCByZWdp
c3RlclNjcm9sbGJhcihTY3JvbGxiYXIqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJTY3JvbGxiYXIo
U2Nyb2xsYmFyKik7CisgICAgdm9pZCByZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXJUaGVtZUNs
aWVudCopOworICAgIHZvaWQgdW5yZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXJUaGVtZUNsaWVu
dCopOwogCiBwcm90ZWN0ZWQ6CiAjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azIuY3BwCmluZGV4IDcy
OWJkMTI0ZGUyYjIxODU0OTk3YjE5ODc2MzBjZGY4OWJlYTkxMDMuLjg2NmJiOGExZDJmNzFhYTg2
NGVhNTdlZDMwM2YxMzYwNzJjMWM0MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azIuY3BwCkBAIC02NiwxMyArNjYsMTMgQEAgdm9pZCBT
Y3JvbGxiYXJUaGVtZUd0azo6dXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCkKICAgICB1cGRhdGVTY3Jv
bGxiYXJzRnJhbWVUaGlja25lc3MoKTsKIH0KIAotc3RhdGljIEd0a1dpZGdldCogZ2V0V2lkZ2V0
Rm9yU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQorc3RhdGljIEd0a1dpZGdldCogZ2V0
V2lkZ2V0Rm9yU2Nyb2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCiB7CiAg
ICAgUmVuZGVyVGhlbWVHdGsqIHRoZW1lID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihS
ZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0KCkpOwogICAgIHJldHVybiBzY3JvbGxiYXIt
Pm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIgPyB0aGVtZS0+Z3RrVlNjcm9sbGJh
cigpIDogdGhlbWUtPmd0a0hTY3JvbGxiYXIoKTsKIH0KIAotdm9pZCBTY3JvbGxiYXJUaGVtZUd0
azo6cGFpbnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxi
YXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVH
dGs6OnBhaW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xs
YmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICAv
LyBQYWludCB0aGUgdHJhY2sgYmFja2dyb3VuZC4gSWYgdGhlIHRyb3VnaC11bmRlci1zdGVwcGVy
cyBwcm9wZXJ0eSBpcyB0cnVlLCB0aGlzCiAgICAgLy8gc2hvdWxkIGJlIHRoZSBmdWxsIHNpemUg
b2YgdGhlIHNjcm9sbGJhciwgYnV0IGlmIGlzIGZhbHNlLCBpdCBzaG91bGQgb25seSBiZSB0aGUK
QEAgLTg3LDcgKzg3LDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUcmFja0JhY2tn
cm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXIKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdUS19TVEFURV9BQ1RJVkUsIEdUS19TSEFET1dfSU4sICJ0cm91Z2gi
KTsKIH0KIAotdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5k
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit2b2lkIFNj
cm9sbGJhclRoZW1lR3RrOjpwYWludFNjcm9sbGJhckJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQogewogICAgIEludFJl
Y3QgZnVsbFNjcm9sbGJhclJlY3QgPSBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXIt
PnkoKSwgc2Nyb2xsYmFyLT53aWR0aCgpLCBzY3JvbGxiYXItPmhlaWdodCgpKTsKIApAQCAtOTYs
NyArOTYsNyBAQCB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFNjcm9sbGJhckJhY2tncm91
bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR1RLX1NUQVRFX05PUk1BTCwgR1RLX1NIQURPV19JTiwgInNjcm9sbGVkX3dpbmRv
dyIpOwogfQogCi12b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFRodW1iKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVj
dCkKIHsKICAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGdldFdpZGdldEZvclNjcm9sbGJhcihzY3Jv
bGxiYXIpOwogICAgIGdib29sZWFuIGFjdGl2YXRlU2xpZGVyOwpAQCAtMTI5LDcgKzEyOSw3IEBA
IHZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBTY3JvbGxiYXIqIHNjcm9sbGJhCiAgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludFNsaWRl
cihzbGlkZXJSZWN0LCB3aWRnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgInNsaWRlciIsIG9y
aWVudGF0aW9uKTsKIH0KIAotdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRCdXR0b24oR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVj
dCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0KQordm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFp
bnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCog
c2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxiYXJQYXJ0IHBhcnQpCiB7CiAg
ICAgLy8gVGhlIGJ1dHRvbnMgd2lsbCBiZSBkaXNhYmxlZCBpZiB0aGUgdGh1bWIgaXMgYXMgdGhl
IGFwcHJvcHJpYXRlIGV4dHJlbWUuCiAgICAgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlID0gR1RL
X1NIQURPV19PVVQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Ny
b2xsYmFyVGhlbWVHdGszLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxi
YXJUaGVtZUd0azMuY3BwCmluZGV4IDRjMzNlNjZkYjhmZmVmYzNmNDIzNDZjYWQwZWVlNjdlZTZj
ZDQ1ZmUuLjk3NDljNTQzZjNkZGY2YjMxNWVmZmI5OGE3NTlmZjViMDAyZDcwY2QgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azMuY3BwCkBA
IC03Miw3ICs3Miw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5U2Nyb2xsYmFyU3R5bGVDb250ZXh0Q2xh
c3NlcyhHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhCiAgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFy
ID8gIEdUS19TVFlMRV9DTEFTU19WRVJUSUNBTCA6IEdUS19TVFlMRV9DTEFTU19IT1JJWk9OVEFM
KTsKIH0KIAotdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUcmFja0JhY2tncm91bmQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVj
dCYgcmVjdCkKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VHJhY2tCYWNrZ3JvdW5kKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICAvLyBQYWludCB0aGUgdHJhY2sgYmFja2dyb3Vu
ZC4gSWYgdGhlIHRyb3VnaC11bmRlci1zdGVwcGVycyBwcm9wZXJ0eSBpcyB0cnVlLCB0aGlzCiAg
ICAgLy8gc2hvdWxkIGJlIHRoZSBmdWxsIHNpemUgb2YgdGhlIHNjcm9sbGJhciwgYnV0IGlmIGlz
IGZhbHNlLCBpdCBzaG91bGQgb25seSBiZSB0aGUKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBTY3Jv
bGxiYXJUaGVtZUd0azo6cGFpbnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBTY3JvbGxiYXIKICAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKG1fY29udGV4dCk7
CiB9CiAKLXZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhciogc2Nyb2xsYmFyKQordm9pZCBTY3Jv
bGxiYXJUaGVtZUd0azo6cGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKIHsKICAgICBndGtfc3R5
bGVfY29udGV4dF9zYXZlKG1fY29udGV4dCk7CiAKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lkIFNj
cm9sbGJhclRoZW1lR3RrOjpwYWludFNjcm9sbGJhckJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBTY3JvbAogICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUobV9jb250ZXh0
KTsKIH0KIAotdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQor
dm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShtX2NvbnRleHQpOwogCkBAIC0xMjYsNyAr
MTI2LDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIFNjcm9sbGJhciogc2Nyb2xsYmEKICAgICBndGtfc3R5bGVfY29udGV4dF9y
ZXN0b3JlKG1fY29udGV4dCk7CiB9CiAKLXZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50QnV0
dG9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0
IEludFJlY3QmIHJlY3QsIFNjcm9sbGJhclBhcnQgcGFydCkKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVH
dGs6OnBhaW50QnV0dG9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVD
bGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0
KQogewogICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUobV9jb250ZXh0KTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMuaAppbmRleCAxM2Q0NGMy
M2QzYjMzNjIzNmZiNjQwOThmYTg3MGFlYzhjN2I1NjU4Li5kMTRkYTZkYjI0YjA3YTYyOTdkMTI3
NmE0MWYzYmJiM2VlMTEyNTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvU2Nyb2xsYmFyVGhlbWVNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
U2Nyb2xsYmFyVGhlbWVNYWMuaApAQCAtMzksNDYgKzM5LDQ2IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgcHJlZmVyZW5jZXNDaGFuZ2VkKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRW5hYmxl
ZFN0YXRlKFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVFbmFibGVkU3RhdGUo
U2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKIAogI2lmICFQTEFURk9STShDSFJPTUlVTSkKLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnQoU2Nyb2xsYmFyKiwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnQoU2Nyb2xs
YmFyVGhlbWVDbGllbnQqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VS
ZWN0KTsKICNlbmRpZgogCiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9s
bGJhckNvbnRyb2xTaXplID0gUmVndWxhclNjcm9sbGJhcik7CiAgICAgCiAgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZp
cnR1YWwgYm9vbCB1c2VzT3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlU2Nyb2xsYmFyT3ZlcmxheVN0eWxlKFNjcm9sbGJhciopOworICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVTY3JvbGxiYXJPdmVybGF5U3R5bGUoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsK
IAogICAgIHZpcnR1YWwgZG91YmxlIGluaXRpYWxBdXRvc2Nyb2xsVGltZXJEZWxheSgpOwogICAg
IHZpcnR1YWwgZG91YmxlIGF1dG9zY3JvbGxUaW1lckRlbGF5KCk7CiAKICAgICB2aXJ0dWFsIFNj
cm9sbGJhckJ1dHRvbnNQbGFjZW1lbnQgYnV0dG9uc1BsYWNlbWVudCgpIGNvbnN0OwogCi0gICAg
dmlydHVhbCB2b2lkIHJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwg
dm9pZCB1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgdm9pZCBy
ZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXJUaGVtZUNsaWVudCopOworICAgIHZpcnR1YWwgdm9p
ZCB1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CiAKLSAgICB2b2lk
IHNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyKiwgU2Nyb2xsYmFyUGFpbnRlcik7
Ci0gICAgU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyRm9yU2Nyb2xsYmFyKFNjcm9sbGJhciopOwor
ICAgIHZvaWQgc2V0TmV3UGFpbnRlckZvclNjcm9sbGJhcihTY3JvbGxiYXJUaGVtZUNsaWVudCos
IFNjcm9sbGJhclBhaW50ZXIpOworICAgIFNjcm9sbGJhclBhaW50ZXIgcGFpbnRlckZvclNjcm9s
bGJhcihTY3JvbGxiYXJUaGVtZUNsaWVudCopOwogCiAgICAgc3RhdGljIGJvb2wgaXNDdXJyZW50
bHlEcmF3aW5nSW50b0xheWVyKCk7CiAgICAgc3RhdGljIHZvaWQgc2V0SXNDdXJyZW50bHlEcmF3
aW5nSW50b0xheWVyKGJvb2wpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBib29sIGhhc0J1
dHRvbnMoU2Nyb2xsYmFyKik7Ci0gICAgdmlydHVhbCBib29sIGhhc1RodW1iKFNjcm9sbGJhciop
OworICAgIHZpcnR1YWwgYm9vbCBoYXNCdXR0b25zKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7Cisg
ICAgdmlydHVhbCBib29sIGhhc1RodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CiAKLSAgICB2
aXJ0dWFsIEludFJlY3QgYmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyKiwgU2Nyb2xsYmFyUGFydCwg
Ym9vbCBwYWludGluZyA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgZm9yd2FyZEJ1dHRv
blJlY3QoU2Nyb2xsYmFyKiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsK
LSAgICB2aXJ0dWFsIEludFJlY3QgdHJhY2tSZWN0KFNjcm9sbGJhciosIGJvb2wgcGFpbnRpbmcg
PSBmYWxzZSk7CisgICAgdmlydHVhbCBJbnRSZWN0IGJhY2tCdXR0b25SZWN0KFNjcm9sbGJhclRo
ZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsKKyAgICB2
aXJ0dWFsIEludFJlY3QgZm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBT
Y3JvbGxiYXJQYXJ0LCBib29sIHBhaW50aW5nID0gZmFsc2UpOworICAgIHZpcnR1YWwgSW50UmVj
dCB0cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBib29sIHBhaW50aW5nID0gZmFsc2Up
OwogCiAgICAgdmlydHVhbCBpbnQgbWF4T3ZlcmxhcEJldHdlZW5QYWdlcygpIHsgcmV0dXJuIDQw
OyB9CiAKLSAgICB2aXJ0dWFsIGludCBtaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyKik7Cisg
ICAgdmlydHVhbCBpbnQgbWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7
CiAgICAgCi0gICAgdmlydHVhbCBib29sIHNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyKiwg
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZERyYWdE
b2N1bWVudEluc3RlYWRPZlRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYpOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhclRoZW1l
Q2xpZW50KiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CisgICAgdmlydHVhbCBib29sIHNo
b3VsZERyYWdEb2N1bWVudEluc3RlYWRPZlRodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29u
c3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CiAgICAgaW50IHNjcm9sbGJhclBhcnRUb0hJUHJlc3Nl
ZFN0YXRlKFNjcm9sbGJhclBhcnQpOwogCiAjaWYgIVBMQVRGT1JNKENIUk9NSVVNKSAmJiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEVOQUJMRShSVUJCRVJfQkFORElORykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbQppbmRleCBl
ZTI4ZmIyODY0YWRlMTc1OTc2ODU3YzU3MWMxOGNiODk0YmE4MjkxLi5lNDc0NjhiZDU2MDM4NjU4
OTJlMmMxNGQ5NGEzMTNkYWEwNzZhMmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCkBAIC01MCw3ICs1MCw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgSGFzaE1hcDxT
Y3JvbGxiYXIqLCBSZXRhaW5QdHI8U2Nyb2xsYmFyUGFpbnRlcj4gPiBTY3JvbGxiYXJQYWludGVy
TWFwOwordHlwZWRlZiBIYXNoTWFwPFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgUmV0YWluUHRyPFNj
cm9sbGJhclBhaW50ZXI+ID4gU2Nyb2xsYmFyUGFpbnRlck1hcDsKIAogc3RhdGljIFNjcm9sbGJh
clBhaW50ZXJNYXAqIHNjcm9sbGJhck1hcCgpCiB7CkBAIC0xNjIsNyArMTYyLDcgQEAgc3RhdGlj
IHZvaWQgdXBkYXRlQXJyb3dQbGFjZW1lbnQoKQogICAgIH0KIH0KIAotdm9pZCBTY3JvbGxiYXJU
aGVtZU1hYzo6cmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit2b2lkIFNj
cm9sbGJhclRoZW1lTWFjOjpyZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXJUaGVtZUNsaWVudCog
c2Nyb2xsYmFyKQogewogICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkg
ewogICAgICAgICBib29sIGlzSG9yaXpvbnRhbCA9IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyOwpAQCAtMTc1LDE5ICsxNzUsMTkgQEAgdm9pZCBTY3JvbGxi
YXJUaGVtZU1hYzo6cmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiAgICAg
fQogfQogCi12b2lkIFNjcm9sbGJhclRoZW1lTWFjOjp1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9s
bGJhciogc2Nyb2xsYmFyKQordm9pZCBTY3JvbGxiYXJUaGVtZU1hYzo6dW5yZWdpc3RlclNjcm9s
bGJhcihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQogewogICAgIHNjcm9sbGJhck1h
cCgpLT5yZW1vdmUoc2Nyb2xsYmFyKTsKIH0KIAotdm9pZCBTY3JvbGxiYXJUaGVtZU1hYzo6c2V0
TmV3UGFpbnRlckZvclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFp
bnRlciBuZXdQYWludGVyKQordm9pZCBTY3JvbGxiYXJUaGVtZU1hYzo6c2V0TmV3UGFpbnRlckZv
clNjcm9sbGJhcihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYWlu
dGVyIG5ld1BhaW50ZXIpCiB7CiAgICAgc2Nyb2xsYmFyTWFwKCktPnNldChzY3JvbGxiYXIsIG5l
d1BhaW50ZXIpOwogICAgIHVwZGF0ZUVuYWJsZWRTdGF0ZShzY3JvbGxiYXIpOwogICAgIHVwZGF0
ZVNjcm9sbGJhck92ZXJsYXlTdHlsZShzY3JvbGxiYXIpOwogfQogCi1TY3JvbGxiYXJQYWludGVy
IFNjcm9sbGJhclRoZW1lTWFjOjpwYWludGVyRm9yU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xs
YmFyKQorU2Nyb2xsYmFyUGFpbnRlciBTY3JvbGxiYXJUaGVtZU1hYzo6cGFpbnRlckZvclNjcm9s
bGJhcihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQogewogICAgIHJldHVybiBzY3Jv
bGxiYXJNYXAoKS0+Z2V0KHNjcm9sbGJhcikuZ2V0KCk7CiB9CkBAIC0yNDgsMTAgKzI0OCwxMCBA
QCBib29sIFNjcm9sbGJhclRoZW1lTWFjOjp1c2VzT3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdAog
ICAgICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgU2Nyb2xsYmFyVGhlbWVNYWM6OnVwZGF0
ZVNjcm9sbGJhck92ZXJsYXlTdHlsZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3ZvaWQgU2Nyb2xs
YmFyVGhlbWVNYWM6OnVwZGF0ZVNjcm9sbGJhck92ZXJsYXlTdHlsZShTY3JvbGxiYXJUaGVtZUNs
aWVudCogc2Nyb2xsYmFyKQogewogICAgIFNjcm9sbGJhclBhaW50ZXIgcGFpbnRlciA9IHBhaW50
ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLSAgICBzd2l0Y2ggKHNjcm9sbGJhci0+c2Nyb2xs
YWJsZUFyZWEoKS0+c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKCkpIHsKKyAgICBzd2l0Y2ggKHNjcm9s
bGJhci0+c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKCkpIHsKICAgICBjYXNlIFNjcm9sbGJhck92ZXJs
YXlTdHlsZURlZmF1bHQ6CiAgICAgICAgIFtwYWludGVyIHNldEtub2JTdHlsZTpOU1Njcm9sbGVy
S25vYlN0eWxlRGVmYXVsdF07CiAgICAgICAgIGJyZWFrOwpAQCAtMjc5LDcgKzI3OSw3IEBAIFNj
cm9sbGJhckJ1dHRvbnNQbGFjZW1lbnQgU2Nyb2xsYmFyVGhlbWVNYWM6OmJ1dHRvbnNQbGFjZW1l
bnQoKSBjb25zdAogICAgIHJldHVybiBnQnV0dG9uUGxhY2VtZW50OwogfQogCi1ib29sIFNjcm9s
bGJhclRoZW1lTWFjOjpoYXNCdXR0b25zKFNjcm9sbGJhciogc2Nyb2xsYmFyKQorYm9vbCBTY3Jv
bGxiYXJUaGVtZU1hYzo6aGFzQnV0dG9ucyhTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFy
KQogewogICAgIHJldHVybiBzY3JvbGxiYXItPmVuYWJsZWQoKSAmJiBidXR0b25zUGxhY2VtZW50
KCkgIT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUKICAgICAgICAgICAgICAmJiAoc2Nyb2xsYmFyLT5v
cmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIKQEAgLTI4Nyw3ICsyODcsNyBAQCBi
b29sIFNjcm9sbGJhclRoZW1lTWFjOjpoYXNCdXR0b25zKFNjcm9sbGJhciogc2Nyb2xsYmFyKQog
ICAgICAgICAgICAgIDogc2Nyb2xsYmFyLT5oZWlnaHQoKSkgPj0gMiAqIChjUmVhbEJ1dHRvbkxl
bmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldIC0gY0J1dHRvbkhpdEluc2V0W3Njcm9sbGJh
ci0+Y29udHJvbFNpemUoKV0pOwogfQogCi1ib29sIFNjcm9sbGJhclRoZW1lTWFjOjpoYXNUaHVt
YihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK2Jvb2wgU2Nyb2xsYmFyVGhlbWVNYWM6Omhhc1RodW1i
KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCiB7CiAgICAgaW50IG1pbkxlbmd0aEZv
clRodW1iOwogICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgewpAQCAt
MzE5LDcgKzMxOSw3IEBAIHN0YXRpYyBJbnRSZWN0IGJ1dHRvblJlcGFpbnRSZWN0KGNvbnN0IElu
dFJlY3QmIGJ1dHRvblJlY3QsIFNjcm9sbGJhck9yaWVudGF0aW9uCiAgICAgcmV0dXJuIHBhaW50
UmVjdDsKIH0KIAotSW50UmVjdCBTY3JvbGxiYXJUaGVtZU1hYzo6YmFja0J1dHRvblJlY3QoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydCwgYm9vbCBwYWludGluZykKK0lu
dFJlY3QgU2Nyb2xsYmFyVGhlbWVNYWM6OmJhY2tCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xp
ZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydCwgYm9vbCBwYWludGluZykKIHsKICAg
ICBJbnRSZWN0IHJlc3VsdDsKICAgICAKQEAgLTM1Myw3ICszNTMsNyBAQCBJbnRSZWN0IFNjcm9s
bGJhclRoZW1lTWFjOjpiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xs
YmFyUGFydCBwYQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUludFJlY3QgU2Nyb2xsYmFyVGhl
bWVNYWM6OmZvcndhcmRCdXR0b25SZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQ
YXJ0IHBhcnQsIGJvb2wgcGFpbnRpbmcpCitJbnRSZWN0IFNjcm9sbGJhclRoZW1lTWFjOjpmb3J3
YXJkQnV0dG9uUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQ
YXJ0IHBhcnQsIGJvb2wgcGFpbnRpbmcpCiB7CiAgICAgSW50UmVjdCByZXN1bHQ7CiAgICAgCkBA
IC0zOTMsNyArMzkzLDcgQEAgSW50UmVjdCBTY3JvbGxiYXJUaGVtZU1hYzo6Zm9yd2FyZEJ1dHRv
blJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1JbnRSZWN0IFNjcm9sbGJhclRoZW1lTWFjOjp0cmFja1JlY3QoU2Nyb2xsYmFy
KiBzY3JvbGxiYXIsIGJvb2wgcGFpbnRpbmcpCitJbnRSZWN0IFNjcm9sbGJhclRoZW1lTWFjOjp0
cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgYm9vbCBwYWludGluZykK
IHsKICAgICBpZiAocGFpbnRpbmcgfHwgIWhhc0J1dHRvbnMoc2Nyb2xsYmFyKSkKICAgICAgICAg
cmV0dXJuIHNjcm9sbGJhci0+ZnJhbWVSZWN0KCk7CkBAIC00MzAsNyArNDMwLDcgQEAgSW50UmVj
dCBTY3JvbGxiYXJUaGVtZU1hYzo6dHJhY2tSZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBib29s
IHBhaW50aW5nKQogICAgIHJldHVybiBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXIt
PnkoKSArIHN0YXJ0V2lkdGgsIHRoaWNrbmVzcywgc2Nyb2xsYmFyLT5oZWlnaHQoKSAtIHRvdGFs
V2lkdGgpOwogfQogCi1pbnQgU2Nyb2xsYmFyVGhlbWVNYWM6Om1pbmltdW1UaHVtYkxlbmd0aChT
Y3JvbGxiYXIqIHNjcm9sbGJhcikKK2ludCBTY3JvbGxiYXJUaGVtZU1hYzo6bWluaW11bVRodW1i
TGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCiB7CiAgICAgaWYgKGlzU2Ny
b2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQogICAgICAgICByZXR1cm4gW3Njcm9sbGJhck1h
cCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKSBrbm9iTWluTGVuZ3RoXTsKQEAgLTQzOCw3ICs0Mzgs
NyBAQCBpbnQgU2Nyb2xsYmFyVGhlbWVNYWM6Om1pbmltdW1UaHVtYkxlbmd0aChTY3JvbGxiYXIq
IHNjcm9sbGJhcikKICAgICAgICAgcmV0dXJuIGNUaHVtYk1pbkxlbmd0aFtzY3JvbGxiYXItPmNv
bnRyb2xTaXplKCldOwogfQogCi1ib29sIFNjcm9sbGJhclRoZW1lTWFjOjpzaG91bGRDZW50ZXJP
blRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQorYm9vbCBT
Y3JvbGxiYXJUaGVtZU1hYzo6c2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVu
dCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQogewogICAgIGlmIChldnQuYnV0dG9u
KCkgIT0gTGVmdEJ1dHRvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDQ3LDcgKzQ0Nyw3
IEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVNYWM6OnNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFy
KiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50CiAgICAgcmV0dXJuIGV2dC5hbHRLZXkoKTsKIH0K
IAotYm9vbCBTY3JvbGxiYXJUaGVtZU1hYzo6c2hvdWxkRHJhZ0RvY3VtZW50SW5zdGVhZE9mVGh1
bWIoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKK2Jvb2wgU2Ny
b2xsYmFyVGhlbWVNYWM6OnNob3VsZERyYWdEb2N1bWVudEluc3RlYWRPZlRodW1iKFNjcm9sbGJh
clRoZW1lQ2xpZW50KiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKIHsKICAgICBy
ZXR1cm4gZXZlbnQuYWx0S2V5KCk7CiB9CkBAIC00NzAsNyArNDcwLDcgQEAgaW50IFNjcm9sbGJh
clRoZW1lTWFjOjpzY3JvbGxiYXJQYXJ0VG9ISVByZXNzZWRTdGF0ZShTY3JvbGxiYXJQYXJ0IHBh
cnQpCiAgICAgfQogfQogCi12b2lkIFNjcm9sbGJhclRoZW1lTWFjOjp1cGRhdGVFbmFibGVkU3Rh
dGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit2b2lkIFNjcm9sbGJhclRoZW1lTWFjOjp1cGRhdGVF
bmFibGVkU3RhdGUoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKIHsKICAgICBpZiAo
aXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCiAgICAgICAgIFtzY3JvbGxiYXJNYXAo
KS0+Z2V0KHNjcm9sbGJhcikuZ2V0KCkgc2V0RW5hYmxlZDpzY3JvbGxiYXItPmVuYWJsZWQoKV07
CkBAIC00OTksNyArNDk5LDcgQEAgc3RhdGljIHZvaWQgc2Nyb2xsYmFyUGFpbnRlclBhaW50KFNj
cm9sbGJhclBhaW50ZXIgc2Nyb2xsYmFyUGFpbnRlciwgYm9vbCBlbmFibGUKIH0KIAogI2lmICFQ
TEFURk9STShDSFJPTUlVTSkKLWJvb2wgU2Nyb2xsYmFyVGhlbWVNYWM6OnBhaW50KFNjcm9sbGJh
ciogc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRh
bWFnZVJlY3QpCitib29sIFNjcm9sbGJhclRoZW1lTWFjOjpwYWludChTY3JvbGxiYXJUaGVtZUNs
aWVudCogc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3Qm
IGRhbWFnZVJlY3QpCiB7CiAgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgp
KSB7CiAgICAgICAgIGZsb2F0IHZhbHVlID0gMDsKQEAgLTU3MCw3ICs1NzAsNyBAQCBib29sIFNj
cm9sbGJhclRoZW1lTWFjOjpwYWludChTY3JvbGxiYXIqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjbwogICAgIGlmICghc2Nyb2xsYmFyLT5lbmFibGVkKCkpCiAgICAgICAg
IHRyYWNrSW5mby5lbmFibGVTdGF0ZSA9IGtUaGVtZVRyYWNrRGlzYWJsZWQ7CiAgICAgZWxzZQot
ICAgICAgICB0cmFja0luZm8uZW5hYmxlU3RhdGUgPSBzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVh
KCktPmlzQWN0aXZlKCkgPyBrVGhlbWVUcmFja0FjdGl2ZSA6IGtUaGVtZVRyYWNrSW5hY3RpdmU7
CisgICAgICAgIHRyYWNrSW5mby5lbmFibGVTdGF0ZSA9IHNjcm9sbGJhci0+aXNTY3JvbGxhYmxl
QXJlYUFjdGl2ZSgpID8ga1RoZW1lVHJhY2tBY3RpdmUgOiBrVGhlbWVUcmFja0luYWN0aXZlOwog
CiAgICAgaWYgKGhhc1RodW1iKHNjcm9sbGJhcikpCiAgICAgICAgIHRyYWNrSW5mby5hdHRyaWJ1
dGVzIHw9IGtUaGVtZVRyYWNrU2hvd1RodW1iOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbW9jay9TY3JvbGxiYXJUaGVtZU1vY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbW9jay9TY3JvbGxiYXJUaGVtZU1vY2suY3BwCmluZGV4IDVkMmJjM2VjMDg5NzhlMDM3
MzdmYmE3Mzk1YjhiOGNlNzQ2MGQ0NjQuLjZkZTkxY2NiODE5MjEwNDBjMDg0NzhjMWVlNTY3N2Rk
ZTQzNzQ5NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Nyb2xs
YmFyVGhlbWVNb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9s
bGJhclRoZW1lTW9jay5jcHAKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBzdGF0aWMgaW50IGNTY3JvbGxiYXJUaGlja25lc3NbXSA9IHsgMTUsIDExIH07CiAKLUludFJl
Y3QgU2Nyb2xsYmFyVGhlbWVNb2NrOjp0cmFja1JlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGJv
b2wpCitJbnRSZWN0IFNjcm9sbGJhclRoZW1lTW9jazo6dHJhY2tSZWN0KFNjcm9sbGJhclRoZW1l
Q2xpZW50KiBzY3JvbGxiYXIsIGJvb2wpCiB7CiAgICAgcmV0dXJuIHNjcm9sbGJhci0+ZnJhbWVS
ZWN0KCk7CiB9CkBAIC00MiwxMiArNDIsMTIgQEAgaW50IFNjcm9sbGJhclRoZW1lTW9jazo6c2Ny
b2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQogICAgIHJl
dHVybiBjU2Nyb2xsYmFyVGhpY2tuZXNzW2NvbnRyb2xTaXplXTsKIH0KIAotdm9pZCBTY3JvbGxi
YXJUaGVtZU1vY2s6OnBhaW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHRyYWNrUmVjdCkKK3ZvaWQg
U2Nyb2xsYmFyVGhlbWVNb2NrOjpwYWludFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3Qm
IHRyYWNrUmVjdCkKIHsKICAgICBjb250ZXh0LT5maWxsUmVjdCh0cmFja1JlY3QsIHNjcm9sbGJh
ci0+ZW5hYmxlZCgpID8gQ29sb3I6OmxpZ2h0R3JheSA6IENvbG9yKDB4RkZFMEUwRTApLCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKIH0KIAotdm9pZCBTY3JvbGxiYXJUaGVtZU1vY2s6OnBhaW50VGh1
bWIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3Qg
SW50UmVjdCYgdGh1bWJSZWN0KQordm9pZCBTY3JvbGxiYXJUaGVtZU1vY2s6OnBhaW50VGh1bWIo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFy
LCBjb25zdCBJbnRSZWN0JiB0aHVtYlJlY3QpCiB7CiAgICAgaWYgKHNjcm9sbGJhci0+ZW5hYmxl
ZCgpKQogICAgICAgICBjb250ZXh0LT5maWxsUmVjdCh0aHVtYlJlY3QsIENvbG9yOjpkYXJrR3Jh
eSwgQ29sb3JTcGFjZURldmljZVJHQik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tb2NrL1Njcm9sbGJhclRoZW1lTW9jay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bW9jay9TY3JvbGxiYXJUaGVtZU1vY2suaAppbmRleCBlMjU0ODQyMmEyOGY1ZTcyM2U0MzUzZjhm
NDU3NjUyNTNjYjY4NWJiLi42MzMzODQxYWI3OTZiOWRjMjMzZjNmNjNlYjgwMGFiZmE3YjBiYjA3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL1Njcm9sbGJhclRoZW1l
TW9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svU2Nyb2xsYmFyVGhlbWVN
b2NrLmgKQEAgLTM2LDE1ICszNiwxNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgc2Nyb2xs
YmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplID0gUmVndWxhclNjcm9sbGJhcik7CiAK
IHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGJvb2wgaGFzQnV0dG9ucyhTY3JvbGxiYXIqKSB7IHJl
dHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBoYXNUaHVtYihTY3JvbGxiYXIqKSB7IHJl
dHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGhhc0J1dHRvbnMoU2Nyb2xsYmFyVGhlbWVD
bGllbnQqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBoYXNUaHVtYihTY3Jv
bGxiYXJUaGVtZUNsaWVudCopIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgSW50UmVj
dCBiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXIqLCBTY3JvbGxiYXJQYXJ0LCBib29sIC8qcGFpbnRp
bmcqLyA9IGZhbHNlKSB7IHJldHVybiBJbnRSZWN0KCk7IH0KLSAgICB2aXJ0dWFsIEludFJlY3Qg
Zm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyKiwgU2Nyb2xsYmFyUGFydCwgYm9vbCAvKnBhaW50
aW5nKi8gPSBmYWxzZSkgeyByZXR1cm4gSW50UmVjdCgpOyB9Ci0gICAgdmlydHVhbCBJbnRSZWN0
IHRyYWNrUmVjdChTY3JvbGxiYXIqLCBib29sIHBhaW50aW5nID0gZmFsc2UpOworICAgIHZpcnR1
YWwgSW50UmVjdCBiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIFNjcm9sbGJh
clBhcnQsIGJvb2wgLypwYWludGluZyovID0gZmFsc2UpIHsgcmV0dXJuIEludFJlY3QoKTsgfQor
ICAgIHZpcnR1YWwgSW50UmVjdCBmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVu
dCosIFNjcm9sbGJhclBhcnQsIGJvb2wgLypwYWludGluZyovID0gZmFsc2UpIHsgcmV0dXJuIElu
dFJlY3QoKTsgfQorICAgIHZpcnR1YWwgSW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVD
bGllbnQqLCBib29sIHBhaW50aW5nID0gZmFsc2UpOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBw
YWludFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXIqLCBjb25zdCBJ
bnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0Kiwg
U2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFRyYWNr
QmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0
IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQq
LCBTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3QmKTsKICAgICAKIHByaXZhdGU6
CiAgICAgdmlydHVhbCBib29sIGlzTW9ja1RoZW1lKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmNwcAppbmRl
eCBlMzI0M2VjZmE4OTc5YjlhNjgxZTE1OWJkZWU5YTliMTU5YzY3NDNjLi5kNGI1OGIxYjBlNWFm
MTcwZjk2ZWY4MzY0YjY5YjQ4NGEzNjIyMjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmNwcApAQCAtMTEyLDcgKzExMiw3IEBAIHN0YXRpYyBT
Y3JvbGxiYXJQYXJ0IHNjcm9sbGJhclBhcnQoY29uc3QgUVN0eWxlOjpTdWJDb250cm9sJiBzYykK
ICAgICByZXR1cm4gTm9QYXJ0OwogfQogCi1zdGF0aWMgUVN0eWxlT3B0aW9uU2xpZGVyKiBzdHls
ZU9wdGlvblNsaWRlcihTY3JvbGxiYXIqIHNjcm9sbGJhciwgUVdpZGdldCogd2lkZ2V0ID0gMCkK
K3N0YXRpYyBRU3R5bGVPcHRpb25TbGlkZXIqIHN0eWxlT3B0aW9uU2xpZGVyKFNjcm9sbGJhclRo
ZW1lQ2xpZW50KiBzY3JvbGxiYXIsIFFXaWRnZXQqIHdpZGdldCA9IDApCiB7CiAgICAgc3RhdGlj
IFFTdHlsZU9wdGlvblNsaWRlciBvcHQ7CiAgICAgaWYgKHdpZGdldCkKQEAgLTE1NSw3ICsxNTUs
NyBAQCBzdGF0aWMgUVN0eWxlT3B0aW9uU2xpZGVyKiBzdHlsZU9wdGlvblNsaWRlcihTY3JvbGxi
YXIqIHNjcm9sbGJhciwgUVdpZGdldCogd2lkZwogICAgIHJldHVybiAmb3B0OwogfQogCi1ib29s
IFNjcm9sbGJhclRoZW1lUXQ6OnBhaW50KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBHcmFwaGljc0Nv
bnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKK2Jvb2wg
U2Nyb2xsYmFyVGhlbWVRdDo6cGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwg
R3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJl
Y3QpCiB7CiAgICAgaWYgKGdyYXBoaWNzQ29udGV4dC0+dXBkYXRpbmdDb250cm9sVGludHMoKSkg
ewogICAgICAgIHNjcm9sbGJhci0+aW52YWxpZGF0ZVJlY3QoZGFtYWdlUmVjdCk7CkBAIC0xOTMs
NyArMTkzLDcgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZVF0OjpwYWludChTY3JvbGxiYXIqIHNjcm9s
bGJhciwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnQKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotU2Nyb2xsYmFyUGFydCBTY3JvbGxiYXJUaGVtZVF0OjpoaXRUZXN0KFNjcm9sbGJhciogc2Ny
b2xsYmFyLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKK1Njcm9sbGJhclBhcnQgU2Ny
b2xsYmFyVGhlbWVRdDo6aGl0VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKIHsKICAgICBRU3R5bGVPcHRpb25TbGlkZXIq
IG9wdCA9IHN0eWxlT3B0aW9uU2xpZGVyKHNjcm9sbGJhcik7CiAgICAgY29uc3QgUVBvaW50IHBv
cyA9IHNjcm9sbGJhci0+Y29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2dC5wb3NpdGlvbigp
KTsKQEAgLTIwMiwxMyArMjAyLDEzIEBAIFNjcm9sbGJhclBhcnQgU2Nyb2xsYmFyVGhlbWVRdDo6
aGl0VGVzdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgUGxhdGZvcm1Nb3VzCiAgICAgcmV0
dXJuIHNjcm9sbGJhclBhcnQoc2MpOwogfQogCi1ib29sIFNjcm9sbGJhclRoZW1lUXQ6OnNob3Vs
ZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQp
Citib29sIFNjcm9sbGJhclRoZW1lUXQ6OnNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKIHsKICAgICAvLyBNaWRk
bGUgY2xpY2sgY2VudGVycyBzbGlkZXIgdGh1bWIgKGlmIHN1cHBvcnRlZCkuCiAgICAgcmV0dXJu
IHN0eWxlKCktPnN0eWxlSGludChRU3R5bGU6OlNIX1Njcm9sbEJhcl9NaWRkbGVDbGlja0Fic29s
dXRlUG9zaXRpb24pICYmIGV2dC5idXR0b24oKSA9PSBNaWRkbGVCdXR0b247CiB9CiAKLXZvaWQg
U2Nyb2xsYmFyVGhlbWVRdDo6aW52YWxpZGF0ZVBhcnQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNj
cm9sbGJhclBhcnQpCit2b2lkIFNjcm9sbGJhclRoZW1lUXQ6OmludmFsaWRhdGVQYXJ0KFNjcm9s
bGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQpCiB7CiAgICAgLy8gRklY
TUU6IERvIG1vcmUgcHJlY2lzZSBpbnZhbGlkYXRpb24uCiAgICAgc2Nyb2xsYmFyLT5pbnZhbGlk
YXRlKCk7CkBAIC0yMjQsNyArMjI0LDcgQEAgaW50IFNjcm9sbGJhclRoZW1lUXQ6OnNjcm9sbGJh
clRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKICAgICByZXR1cm4g
c3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9TY3JvbGxCYXJFeHRlbnQsICZvLCAwKTsK
IH0KIAotaW50IFNjcm9sbGJhclRoZW1lUXQ6OnRodW1iUG9zaXRpb24oU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIpCitpbnQgU2Nyb2xsYmFyVGhlbWVRdDo6dGh1bWJQb3NpdGlvbihTY3JvbGxiYXJUaGVt
ZUNsaWVudCogc2Nyb2xsYmFyKQogewogICAgIGlmIChzY3JvbGxiYXItPmVuYWJsZWQoKSkgewog
ICAgICAgICBmbG9hdCBwb3MgPSAoZmxvYXQpc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgKiAodHJh
Y2tMZW5ndGgoc2Nyb2xsYmFyKSAtIHRodW1iTGVuZ3RoKHNjcm9sbGJhcikpIC8gc2Nyb2xsYmFy
LT5tYXhpbXVtKCk7CkBAIC0yMzMsMjEgKzIzMywyMSBAQCBpbnQgU2Nyb2xsYmFyVGhlbWVRdDo6
dGh1bWJQb3NpdGlvbihTY3JvbGxiYXIqIHNjcm9sbGJhcikKICAgICByZXR1cm4gMDsKIH0KIAot
aW50IFNjcm9sbGJhclRoZW1lUXQ6OnRodW1iTGVuZ3RoKFNjcm9sbGJhciogc2Nyb2xsYmFyKQor
aW50IFNjcm9sbGJhclRoZW1lUXQ6OnRodW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBz
Y3JvbGxiYXIpCiB7CiAgICAgUVN0eWxlT3B0aW9uU2xpZGVyKiBvcHQgPSBzdHlsZU9wdGlvblNs
aWRlcihzY3JvbGxiYXIpOwogICAgIEludFJlY3QgdGh1bWIgPSBzdHlsZSgpLT5zdWJDb250cm9s
UmVjdChRU3R5bGU6OkNDX1Njcm9sbEJhciwgb3B0LCBRU3R5bGU6OlNDX1Njcm9sbEJhclNsaWRl
ciwgMCk7CiAgICAgcmV0dXJuIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFs
U2Nyb2xsYmFyID8gdGh1bWIud2lkdGgoKSA6IHRodW1iLmhlaWdodCgpOwogfQogCi1pbnQgU2Ny
b2xsYmFyVGhlbWVRdDo6dHJhY2tQb3NpdGlvbihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK2ludCBT
Y3JvbGxiYXJUaGVtZVF0Ojp0cmFja1Bvc2l0aW9uKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3Jv
bGxiYXIpCiB7CiAgICAgUVN0eWxlT3B0aW9uU2xpZGVyKiBvcHQgPSBzdHlsZU9wdGlvblNsaWRl
cihzY3JvbGxiYXIpOwogICAgIEludFJlY3QgdHJhY2sgPSBzdHlsZSgpLT5zdWJDb250cm9sUmVj
dChRU3R5bGU6OkNDX1Njcm9sbEJhciwgb3B0LCBRU3R5bGU6OlNDX1Njcm9sbEJhckdyb292ZSwg
MCk7CiAgICAgcmV0dXJuIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyID8gdHJhY2sueCgpIC0gc2Nyb2xsYmFyLT54KCkgOiB0cmFjay55KCkgLSBzY3JvbGxi
YXItPnkoKTsKIH0KIAotaW50IFNjcm9sbGJhclRoZW1lUXQ6OnRyYWNrTGVuZ3RoKFNjcm9sbGJh
ciogc2Nyb2xsYmFyKQoraW50IFNjcm9sbGJhclRoZW1lUXQ6OnRyYWNrTGVuZ3RoKFNjcm9sbGJh
clRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCiB7CiAgICAgUVN0eWxlT3B0aW9uU2xpZGVyKiBvcHQg
PSBzdHlsZU9wdGlvblNsaWRlcihzY3JvbGxiYXIpOwogICAgIEludFJlY3QgdHJhY2sgPSBzdHls
ZSgpLT5zdWJDb250cm9sUmVjdChRU3R5bGU6OkNDX1Njcm9sbEJhciwgb3B0LCBRU3R5bGU6OlND
X1Njcm9sbEJhckdyb292ZSwgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9xdC9TY3JvbGxiYXJUaGVtZVF0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3Jv
bGxiYXJUaGVtZVF0LmgKaW5kZXggY2Y0ODgyZGEyMDNiYmYwZmI3Y2M2OWU3YzNlMWMxZmZkZDgx
ZjVlYi4uMDMzN2JmODBjY2Y2NDZkMThlOGYwN2M0ZmU1YWNiYTNhYTk5NTIyZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuaApAQCAtNDAsMTkgKzQw
LDE5IEBAIGNsYXNzIFNjcm9sbGJhclRoZW1lUXQgOiBwdWJsaWMgU2Nyb2xsYmFyVGhlbWUgewog
cHVibGljOgogICAgIHZpcnR1YWwgflNjcm9sbGJhclRoZW1lUXQoKTsKIAotICAgIHZpcnR1YWwg
Ym9vbCBwYWludChTY3JvbGxiYXIqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBk
YW1hZ2VSZWN0KTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQq
LCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoU2Nyb2xsVmlldyosIEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEludFJlY3QmIGNvcm5lclJlY3QpOwogCi0gICAgdmlydHVhbCBTY3JvbGxiYXJQYXJ0
IGhpdFRlc3QoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CisgICAgdmly
dHVhbCBTY3JvbGxiYXJQYXJ0IGhpdFRlc3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQ
bGF0Zm9ybU1vdXNlRXZlbnQmKTsKIAotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDZW50ZXJPblRo
dW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVBhcnQoU2Ny
b2xsYmFyKiwgU2Nyb2xsYmFyUGFydCk7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVQYXJ0
KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCk7CiAKLSAgICB2aXJ0dWFsIGlu
dCB0aHVtYlBvc2l0aW9uKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgaW50IHRodW1iTGVuZ3Ro
KFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgaW50IHRyYWNrUG9zaXRpb24oU2Nyb2xsYmFyKik7
Ci0gICAgdmlydHVhbCBpbnQgdHJhY2tMZW5ndGgoU2Nyb2xsYmFyKik7CisgICAgdmlydHVhbCBp
bnQgdGh1bWJQb3NpdGlvbihTY3JvbGxiYXJUaGVtZUNsaWVudCopOworICAgIHZpcnR1YWwgaW50
IHRodW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CisgICAgdmlydHVhbCBpbnQgdHJh
Y2tQb3NpdGlvbihTY3JvbGxiYXJUaGVtZUNsaWVudCopOworICAgIHZpcnR1YWwgaW50IHRyYWNr
TGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CiAKICAgICB2aXJ0dWFsIGludCBzY3JvbGxi
YXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFyU2Nyb2xsYmFyKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lU2Fm
YXJpLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVNhZmFy
aS5jcHAKaW5kZXggMzQzYmJiMjgwZWQ2YWY4NDhmNTFjYzAwZWQ5OGYzMWY3ZTE3ZTI0OC4uMWNj
NTM4NWUxODdhMjJlYWYxYjA1NWUzNGJlMGZmNjQzODkyOWIzZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lU2FmYXJpLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVTYWZhcmkuY3BwCkBAIC0xMDQs
MTQgKzEwNCwxNCBAQCBpbnQgU2Nyb2xsYmFyVGhlbWVTYWZhcmk6OnNjcm9sbGJhclRoaWNrbmVz
cyhTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKICAgICByZXR1cm4gY1Njcm9sbGJh
clRoaWNrbmVzc1tjb250cm9sU2l6ZV07CiB9CiAKLWJvb2wgU2Nyb2xsYmFyVGhlbWVTYWZhcmk6
Omhhc0J1dHRvbnMoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCitib29sIFNjcm9sbGJhclRoZW1lU2Fm
YXJpOjpoYXNCdXR0b25zKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCiB7CiAgICAg
cmV0dXJuIHNjcm9sbGJhci0+ZW5hYmxlZCgpICYmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkg
PT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IAogICAgICAgICAgICAgIHNjcm9sbGJhci0+d2lkdGgo
KSA6IAogICAgICAgICAgICAgIHNjcm9sbGJhci0+aGVpZ2h0KCkpID49IDIgKiAoY1JlYWxCdXR0
b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSAtIGNCdXR0b25IaXRJbnNldFtzY3Jv
bGxiYXItPmNvbnRyb2xTaXplKCldKTsKIH0KIAotYm9vbCBTY3JvbGxiYXJUaGVtZVNhZmFyaTo6
aGFzVGh1bWIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCitib29sIFNjcm9sbGJhclRoZW1lU2FmYXJp
OjpoYXNUaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQogewogICAgIHJldHVy
biBzY3JvbGxiYXItPmVuYWJsZWQoKSAmJiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhv
cml6b250YWxTY3JvbGxiYXIgPyAKICAgICAgICAgICAgICBzY3JvbGxiYXItPndpZHRoKCkgOiAK
QEAgLTEzNCw3ICsxMzQsNyBAQCBzdGF0aWMgSW50UmVjdCBidXR0b25SZXBhaW50UmVjdChjb25z
dCBJbnRSZWN0JiBidXR0b25SZWN0LCBTY3JvbGxiYXJPcmllbnRhdGlvbgogICAgIHJldHVybiBw
YWludFJlY3Q7CiB9CiAKLUludFJlY3QgU2Nyb2xsYmFyVGhlbWVTYWZhcmk6OmJhY2tCdXR0b25S
ZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wgcGFpbnRp
bmcpCitJbnRSZWN0IFNjcm9sbGJhclRoZW1lU2FmYXJpOjpiYWNrQnV0dG9uUmVjdChTY3JvbGxi
YXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wgcGFpbnRp
bmcpCiB7CiAgICAgSW50UmVjdCByZXN1bHQ7CiAKQEAgLTE1Miw3ICsxNTIsNyBAQCBJbnRSZWN0
IFNjcm9sbGJhclRoZW1lU2FmYXJpOjpiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJh
ciwgU2Nyb2xsYmFyUGFydAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUludFJlY3QgU2Nyb2xs
YmFyVGhlbWVTYWZhcmk6OmZvcndhcmRCdXR0b25SZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBT
Y3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wgcGFpbnRpbmcpCitJbnRSZWN0IFNjcm9sbGJhclRoZW1l
U2FmYXJpOjpmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFy
LCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wgcGFpbnRpbmcpCiB7CiAgICAgSW50UmVjdCByZXN1
bHQ7CiAgICAgCkBAIC0xODEsNyArMTgxLDcgQEAgc3RhdGljIEludFJlY3QgdHJhY2tSZXBhaW50
UmVjdChjb25zdCBJbnRSZWN0JiB0cmFja1JlY3QsIFNjcm9sbGJhck9yaWVudGF0aW9uIG8KICAg
ICByZXR1cm4gcGFpbnRSZWN0OwogfQogCi1JbnRSZWN0IFNjcm9sbGJhclRoZW1lU2FmYXJpOjp0
cmFja1JlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGJvb2wgcGFpbnRpbmcpCitJbnRSZWN0IFNj
cm9sbGJhclRoZW1lU2FmYXJpOjp0cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9s
bGJhciwgYm9vbCBwYWludGluZykKIHsKICAgICBpZiAocGFpbnRpbmcgfHwgIWhhc0J1dHRvbnMo
c2Nyb2xsYmFyKSkKICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+ZnJhbWVSZWN0KCk7CkBAIC0x
OTMsMzYgKzE5MywzNiBAQCBJbnRSZWN0IFNjcm9sbGJhclRoZW1lU2FmYXJpOjp0cmFja1JlY3Qo
U2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGJvb2wgcGFpbnRpbmcpCiAgICAgcmV0dXJuIEludFJlY3Qo
c2Nyb2xsYmFyLT54KCksIHNjcm9sbGJhci0+eSgpICsgY0J1dHRvbkxlbmd0aFtzY3JvbGxiYXIt
PmNvbnRyb2xTaXplKCldLCB0aGlja25lc3MsIHNjcm9sbGJhci0+aGVpZ2h0KCkgLSAyICogY0J1
dHRvbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldKTsKIH0KIAotaW50IFNjcm9sbGJh
clRoZW1lU2FmYXJpOjptaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCitp
bnQgU2Nyb2xsYmFyVGhlbWVTYWZhcmk6Om1pbmltdW1UaHVtYkxlbmd0aChTY3JvbGxiYXJUaGVt
ZUNsaWVudCogc2Nyb2xsYmFyKQogewogICAgIHJldHVybiBjVGh1bWJNaW5MZW5ndGhbc2Nyb2xs
YmFyLT5jb250cm9sU2l6ZSgpXTsKIH0KIAotYm9vbCBTY3JvbGxiYXJUaGVtZVNhZmFyaTo6c2hv
dWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2
dCkKK2Jvb2wgU2Nyb2xsYmFyVGhlbWVTYWZhcmk6OnNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xs
YmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKIHsKICAgICBy
ZXR1cm4gZXZ0LnNoaWZ0S2V5KCkgJiYgZXZ0LmJ1dHRvbigpID09IExlZnRCdXR0b247CiB9CiAK
LXZvaWQgU2Nyb2xsYmFyVGhlbWVTYWZhcmk6OnBhaW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBoaWNz
Q29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50
UmVjdCYgdHJhY2tSZWN0KQordm9pZCBTY3JvbGxiYXJUaGVtZVNhZmFyaTo6cGFpbnRUcmFja0Jh
Y2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIFNjcm9sbGJhclRoZW1l
Q2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHRyYWNrUmVjdCkKIHsKICAgICBpZiAo
IVNhZmFyaVRoZW1lTGlicmFyeSgpKQogICAgICAgICByZXR1cm47CiAgICAgTlNDb250cm9sU2l6
ZSBzaXplID0gc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpID09IFNtYWxsU2Nyb2xsYmFyID8gTlNT
bWFsbENvbnRyb2xTaXplIDogTlNSZWd1bGFyQ29udHJvbFNpemU7CiAgICAgVGhlbWVDb250cm9s
U3RhdGUgc3RhdGUgPSAwOwotICAgIGlmIChzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCktPmlz
QWN0aXZlKCkpCisgICAgaWYgKHNjcm9sbGJhci0+aXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSgpKQog
ICAgICAgICBzdGF0ZSB8PSBBY3RpdmVTdGF0ZTsKICAgICBpZiAoaGFzQnV0dG9ucyhzY3JvbGxi
YXIpKQogICAgICAgICBzdGF0ZSB8PSBFbmFibGVkU3RhdGU7CiAgICAgcGFpbnRUaGVtZVBhcnQo
c2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyID8gVlNjcm9sbFRy
YWNrUGFydCA6IEhTY3JvbGxUcmFja1BhcnQsIGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCksIHRyYWNrUmVjdCwgc2l6ZSwgc3RhdGUpOyAKIH0KIAotdm9pZCBTY3JvbGxiYXJUaGVt
ZVNhZmFyaTo6cGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIFNj
cm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBidXR0b25SZWN0LCBTY3JvbGxiYXJQ
YXJ0IHBhcnQpCit2b2lkIFNjcm9sbGJhclRoZW1lU2FmYXJpOjpwYWludEJ1dHRvbihHcmFwaGlj
c0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJh
ciwgY29uc3QgSW50UmVjdCYgYnV0dG9uUmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0KQogewogICAg
IGlmICghU2FmYXJpVGhlbWVMaWJyYXJ5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBOU0NvbnRy
b2xTaXplIHNpemUgPSBzY3JvbGxiYXItPmNvbnRyb2xTaXplKCkgPT0gU21hbGxTY3JvbGxiYXIg
PyBOU1NtYWxsQ29udHJvbFNpemUgOiBOU1JlZ3VsYXJDb250cm9sU2l6ZTsKICAgICBUaGVtZUNv
bnRyb2xTdGF0ZSBzdGF0ZSA9IDA7Ci0gICAgaWYgKHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEo
KS0+aXNBY3RpdmUoKSkKKyAgICBpZiAoc2Nyb2xsYmFyLT5pc1Njcm9sbGFibGVBcmVhQWN0aXZl
KCkpCiAgICAgICAgIHN0YXRlIHw9IEFjdGl2ZVN0YXRlOwogICAgIGlmIChoYXNCdXR0b25zKHNj
cm9sbGJhcikpCiAgICAgICAgIHN0YXRlIHw9IEVuYWJsZWRTdGF0ZTsKQEAgLTIzNiwxMyArMjM2
LDEzIEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVTYWZhcmk6OnBhaW50QnV0dG9uKEdyYXBoaWNzQ29u
dGV4dCogZ3JhcGhpY3NDb250ZXh0LCBTY3JvbGxiCiAgICAgICAgICAgICAgICAgICAgICAgIGJ1
dHRvblJlY3QsIHNpemUsIHN0YXRlKTsKIH0KIAotdm9pZCBTY3JvbGxiYXJUaGVtZVNhZmFyaTo6
cGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHRodW1iUmVjdCkKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVT
YWZhcmk6OnBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIFNjcm9s
bGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHRodW1iUmVjdCkKIHsK
ICAgICBpZiAoIVNhZmFyaVRoZW1lTGlicmFyeSgpKQogICAgICAgICByZXR1cm47CiAgICAgTlND
b250cm9sU2l6ZSBzaXplID0gc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpID09IFNtYWxsU2Nyb2xs
YmFyID8gTlNTbWFsbENvbnRyb2xTaXplIDogTlNSZWd1bGFyQ29udHJvbFNpemU7CiAgICAgVGhl
bWVDb250cm9sU3RhdGUgc3RhdGUgPSAwOwotICAgIGlmIChzY3JvbGxiYXItPnNjcm9sbGFibGVB
cmVhKCktPmlzQWN0aXZlKCkpCisgICAgaWYgKHNjcm9sbGJhci0+aXNTY3JvbGxhYmxlQXJlYUFj
dGl2ZSgpKQogICAgICAgICBzdGF0ZSB8PSBBY3RpdmVTdGF0ZTsKICAgICBpZiAoaGFzVGh1bWIo
c2Nyb2xsYmFyKSkKICAgICAgICAgc3RhdGUgfD0gRW5hYmxlZFN0YXRlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lU2FmYXJpLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVTYWZhcmkuaAppbmRleCBmMDM5
Mzc5ZWE0NDcwOGU4YjViNzVmOTYwNTUzMmZlMTFkNjI2NTkyLi5mNDI3YjE5MGZkNjc2NjUyMTU2
NzU2NmNiNmNiYzRkZmU0M2Q5OTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vU2Nyb2xsYmFyVGhlbWVTYWZhcmkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vU2Nyb2xsYmFyVGhlbWVTYWZhcmkuaApAQCAtNDEsMjAgKzQxLDIwIEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250cm9sVGludHMoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGJvb2wgaGFzQnV0dG9ucyhTY3JvbGxi
YXIqKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFzVGh1bWIoU2Nyb2xsYmFyKik7CisgICAgdmlydHVh
bCBib29sIGhhc0J1dHRvbnMoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKKyAgICB2aXJ0dWFsIGJv
b2wgaGFzVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKIAotICAgIHZpcnR1YWwgSW50UmVj
dCBiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXIqLCBTY3JvbGxiYXJQYXJ0LCBib29sIHBhaW50aW5n
ID0gZmFsc2UpOwotICAgIHZpcnR1YWwgSW50UmVjdCBmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxi
YXIqLCBTY3JvbGxiYXJQYXJ0LCBib29sIHBhaW50aW5nID0gZmFsc2UpOwotICAgIHZpcnR1YWwg
SW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFyKiwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsKKyAg
ICB2aXJ0dWFsIEludFJlY3QgYmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBT
Y3JvbGxiYXJQYXJ0LCBib29sIHBhaW50aW5nID0gZmFsc2UpOworICAgIHZpcnR1YWwgSW50UmVj
dCBmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIFNjcm9sbGJhclBhcnQs
IGJvb2wgcGFpbnRpbmcgPSBmYWxzZSk7CisgICAgdmlydHVhbCBJbnRSZWN0IHRyYWNrUmVjdChT
Y3JvbGxiYXJUaGVtZUNsaWVudCosIGJvb2wgcGFpbnRpbmcgPSBmYWxzZSk7CiAKLSAgICB2aXJ0
dWFsIGludCBtaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyKik7CisgICAgdmlydHVhbCBpbnQg
bWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CiAgICAgCi0gICAgdmly
dHVhbCBib29sIHNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50Jik7CisgICAgdmlydHVhbCBib29sIHNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xs
YmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKIAotICAgIHZpcnR1
YWwgdm9pZCBwYWludFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXIq
LCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50QnV0dG9uKEdyYXBoaWNz
Q29udGV4dCosIFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmLCBTY3JvbGxiYXJQYXJ0KTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXIqLCBj
b25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50VHJhY2tCYWNrZ3JvdW5kKEdy
YXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgSW50UmVjdCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJU
aGVtZUNsaWVudCosIGNvbnN0IEludFJlY3QmLCBTY3JvbGxiYXJQYXJ0KTsKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCos
IGNvbnN0IEludFJlY3QmKTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uY3BwCmluZGV4IGQzNjM0MTA2ODQ4N2ZmMWI3ODY5NzY4
ZTlkNWY2YjJmNDg5ODFhYTUuLjU2NDQyOTdkN2YyNzBjNTBjN2EyOGVmM2IxZTI0YWNmMWQxMjc5
ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVt
ZVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1l
V2luLmNwcApAQCAtMTMwLDEyICsxMzAsMTIgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZVdpbjo6aW52
YWxpZGF0ZU9uTW91c2VFbnRlckV4aXQoKQogICAgIHJldHVybiBydW5uaW5nVmlzdGE7CiB9CiAK
LWJvb2wgU2Nyb2xsYmFyVGhlbWVXaW46Omhhc1RodW1iKFNjcm9sbGJhciogc2Nyb2xsYmFyKQor
Ym9vbCBTY3JvbGxiYXJUaGVtZVdpbjo6aGFzVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNj
cm9sbGJhcikKIHsKICAgICByZXR1cm4gdGh1bWJMZW5ndGgoc2Nyb2xsYmFyKSA+IDA7CiB9CiAK
LUludFJlY3QgU2Nyb2xsYmFyVGhlbWVXaW46OmJhY2tCdXR0b25SZWN0KFNjcm9sbGJhciogc2Ny
b2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wpCitJbnRSZWN0IFNjcm9sbGJhclRoZW1l
V2luOjpiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBTY3Jv
bGxiYXJQYXJ0IHBhcnQsIGJvb2wpCiB7CiAgICAgLy8gV2luZG93cyBqdXN0IGhhcyBzaW5nbGUg
YXJyb3dzLgogICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0KQpAQCAtMTU0LDcgKzE1
NCw3IEBAIEludFJlY3QgU2Nyb2xsYmFyVGhlbWVXaW46OmJhY2tCdXR0b25SZWN0KFNjcm9sbGJh
ciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhCiAgICAgICAgICAgICAgICAgICAgdGhpY2tu
ZXNzLCBzY3JvbGxiYXItPmhlaWdodCgpIDwgMiAqIHRoaWNrbmVzcyA/IHNjcm9sbGJhci0+aGVp
Z2h0KCkgLyAyIDogdGhpY2tuZXNzKTsKIH0KIAotSW50UmVjdCBTY3JvbGxiYXJUaGVtZVdpbjo6
Zm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFy
dCwgYm9vbCkKK0ludFJlY3QgU2Nyb2xsYmFyVGhlbWVXaW46OmZvcndhcmRCdXR0b25SZWN0KFNj
cm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydCwgYm9vbCkK
IHsKICAgICAvLyBXaW5kb3dzIGp1c3QgaGFzIHNpbmdsZSBhcnJvd3MuCiAgICAgaWYgKHBhcnQg
PT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkKQEAgLTE3NSw3ICsxNzUsNyBAQCBJbnRSZWN0IFNj
cm9sbGJhclRoZW1lV2luOjpmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwg
U2Nyb2xsYmFyUGFydAogICAgIHJldHVybiBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxi
YXItPnkoKSArIHNjcm9sbGJhci0+aGVpZ2h0KCkgLSBoLCB0aGlja25lc3MsIGgpOwogfQogCi1J
bnRSZWN0IFNjcm9sbGJhclRoZW1lV2luOjp0cmFja1JlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIs
IGJvb2wpCitJbnRSZWN0IFNjcm9sbGJhclRoZW1lV2luOjp0cmFja1JlY3QoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqIHNjcm9sbGJhciwgYm9vbCkKIHsKICAgICBpbnQgdGhpY2tuZXNzID0gc2Nyb2xs
YmFyVGhpY2tuZXNzKCk7CiAgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jp
em9udGFsU2Nyb2xsYmFyKSB7CkBAIC0xODgsMTIgKzE4OCwxMiBAQCBJbnRSZWN0IFNjcm9sbGJh
clRoZW1lV2luOjp0cmFja1JlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGJvb2wpCiAgICAgcmV0
dXJuIEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNjcm9sbGJhci0+eSgpICsgdGhpY2tuZXNzLCB0
aGlja25lc3MsIHNjcm9sbGJhci0+aGVpZ2h0KCkgLSAyICogdGhpY2tuZXNzKTsKIH0KIAotYm9v
bCBTY3JvbGxiYXJUaGVtZVdpbjo6c2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXIqLCBjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKK2Jvb2wgU2Nyb2xsYmFyVGhlbWVXaW46OnNob3Vs
ZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNl
RXZlbnQmIGV2dCkKIHsKICAgICByZXR1cm4gZXZ0LnNoaWZ0S2V5KCkgJiYgZXZ0LmJ1dHRvbigp
ID09IExlZnRCdXR0b247CiB9CiAKLWJvb2wgU2Nyb2xsYmFyVGhlbWVXaW46OnNob3VsZFNuYXBC
YWNrVG9EcmFnT3JpZ2luKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBQbGF0Zm9ybU1vdXNl
RXZlbnQmIGV2dCkKK2Jvb2wgU2Nyb2xsYmFyVGhlbWVXaW46OnNob3VsZFNuYXBCYWNrVG9EcmFn
T3JpZ2luKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYgZXZ0KQogewogICAgIC8vIEZpbmQgdGhlIHJlY3Qgd2l0aGluIHdoaWNoIHdlIHNo
b3VsZG4ndCBzbmFwLCBieSBleHBhbmRpbmcgdGhlIHRyYWNrIHJlY3QKICAgICAvLyBpbiBib3Ro
IGRpbWVuc2lvbnMuCkBAIC0yMTEsMTQgKzIxMSwxNCBAQCBib29sIFNjcm9sbGJhclRoZW1lV2lu
OjpzaG91bGRTbmFwQmFja1RvRHJhZ09yaWdpbihTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3Qg
UAogICAgIHJldHVybiAhcmVjdC5jb250YWlucyhtb3VzZVBvc2l0aW9uKTsKIH0KIAotdm9pZCBT
Y3JvbGxiYXJUaGVtZVdpbjo6cGFpbnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQg
U2Nyb2xsYmFyVGhlbWVXaW46OnBhaW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYg
cmVjdCkKIHsKICAgICAvLyBKdXN0IGFzc3VtZSBhIGZvcndhcmQgdHJhY2sgcGFydC4gIFdlIG9u
bHkgcGFpbnQgdGhlIHRyYWNrIGFzIGEgc2luZ2xlIHBpZWNlIHdoZW4gdGhlcmUgaXMgbm8gdGh1
bWIuCiAgICAgaWYgKCFoYXNUaHVtYihzY3JvbGxiYXIpKQogICAgICAgICBwYWludFRyYWNrUGll
Y2UoY29udGV4dCwgc2Nyb2xsYmFyLCByZWN0LCBGb3J3YXJkVHJhY2tQYXJ0KTsKIH0KIAotdm9p
ZCBTY3JvbGxiYXJUaGVtZVdpbjo6cGFpbnRUcmFja1BpZWNlKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIFNjcm9sbGJh
clBhcnQgcGFydFR5cGUpCit2b2lkIFNjcm9sbGJhclRoZW1lV2luOjpwYWludFRyYWNrUGllY2Uo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFy
LCBjb25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxiYXJQYXJ0IHBhcnRUeXBlKQogewogICAgIGNo
ZWNrQW5kSW5pdFNjcm9sbGJhclRoZW1lKCk7CiAKQEAgLTI3Niw3ICsyNzYsNyBAQCB2b2lkIFNj
cm9sbGJhclRoZW1lV2luOjpwYWludFRyYWNrUGllY2UoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBTY3JvbGxiYXIqIHNjcgogI2VuZGlmCiB9CiAKLXZvaWQgU2Nyb2xsYmFyVGhlbWVXaW46OnBh
aW50QnV0dG9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIs
IGNvbnN0IEludFJlY3QmIHJlY3QsIFNjcm9sbGJhclBhcnQgcGFydCkKK3ZvaWQgU2Nyb2xsYmFy
VGhlbWVXaW46OnBhaW50QnV0dG9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFy
VGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFy
dCBwYXJ0KQogewogICAgIGNoZWNrQW5kSW5pdFNjcm9sbGJhclRoZW1lKCk7CiAKQEAgLTMzOSw3
ICszMzksNyBAQCBzdGF0aWMgSW50UmVjdCBncmlwcGVyUmVjdChpbnQgdGhpY2tuZXNzLCBjb25z
dCBJbnRSZWN0JiB0aHVtYlJlY3QpCiAgICAgICAgICAgICAgICAgICAgZ3JpcHBlclRoaWNrbmVz
cywgZ3JpcHBlclRoaWNrbmVzcyk7CiB9CiAKLXN0YXRpYyB2b2lkIHBhaW50R3JpcHBlcihTY3Jv
bGxiYXIqIHNjcm9sbGJhciwgSERDIGhkYywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3N0YXRpYyB2
b2lkIHBhaW50R3JpcHBlcihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBIREMgaGRj
LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIGlmICghc2Nyb2xsYmFyVGhlbWUpCiAgICAg
ICAgIHJldHVybjsgIC8vIENsYXNzaWMgbG9vayBoYXMgbm8gZ3JpcHBlci4KQEAgLTM1OCw3ICsz
NTgsNyBAQCBzdGF0aWMgdm9pZCBwYWludEdyaXBwZXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIEhE
QyBoZGMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgRHJhd1RoZW1lQmFja2dyb3VuZChzY3Jv
bGxiYXJUaGVtZSwgaGRjLCBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNj
cm9sbGJhciA/IFNQX0dSSVBQRVJIT1IgOiBTUF9HUklQUEVSVkVSVCwgc3RhdGUsICZ0aGVtZVJl
Y3QsIDApOwogfQogCi12b2lkIFNjcm9sbGJhclRoZW1lV2luOjpwYWludFRodW1iKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJl
Y3QpCit2b2lkIFNjcm9sbGJhclRoZW1lV2luOjpwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYg
cmVjdCkKIHsKICAgICBjaGVja0FuZEluaXRTY3JvbGxiYXJUaGVtZSgpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5oCmluZGV4IGNkMmYxNzZk
ZmRjOTczODJjMzViYjc3M2Y5YjFlOGRhZDIxMjc2YjYuLjg3MDI0MGMxNjU1OGNmMGY2MjU3NDE5
NmVlYjY5YWFhODA2YTdhMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9TY3JvbGxiYXJUaGVtZVdpbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9T
Y3JvbGxiYXJUaGVtZVdpbi5oCkBAIC00MiwyMCArNDIsMjAgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBpbnZhbGlkYXRlT25Nb3VzZUVudGVyRXhpdCgpOwogCiBwcm90ZWN0ZWQ6Ci0gICAg
dmlydHVhbCBib29sIGhhc0J1dHRvbnMoU2Nyb2xsYmFyKikgeyByZXR1cm4gdHJ1ZTsgfQotICAg
IHZpcnR1YWwgYm9vbCBoYXNUaHVtYihTY3JvbGxiYXIqKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFz
QnV0dG9ucyhTY3JvbGxiYXJUaGVtZUNsaWVudCopIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaGFzVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKIAotICAgIHZpcnR1YWwg
SW50UmVjdCBiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXIqLCBTY3JvbGxiYXJQYXJ0LCBib29sIHBh
aW50aW5nID0gZmFsc2UpOwotICAgIHZpcnR1YWwgSW50UmVjdCBmb3J3YXJkQnV0dG9uUmVjdChT
Y3JvbGxiYXIqLCBTY3JvbGxiYXJQYXJ0LCBib29sIHBhaW50aW5nID0gZmFsc2UpOwotICAgIHZp
cnR1YWwgSW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFyKiwgYm9vbCBwYWludGluZyA9IGZhbHNl
KTsKKyAgICB2aXJ0dWFsIEludFJlY3QgYmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGll
bnQqLCBTY3JvbGxiYXJQYXJ0LCBib29sIHBhaW50aW5nID0gZmFsc2UpOworICAgIHZpcnR1YWwg
SW50UmVjdCBmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIFNjcm9sbGJh
clBhcnQsIGJvb2wgcGFpbnRpbmcgPSBmYWxzZSk7CisgICAgdmlydHVhbCBJbnRSZWN0IHRyYWNr
UmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIGJvb2wgcGFpbnRpbmcgPSBmYWxzZSk7CiAKLSAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXIqLCBjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU25hcEJhY2tUb0RyYWdP
cmlnaW4oU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CisgICAgdmlydHVh
bCBib29sIHNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQ
bGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU25hcEJhY2tUb0Ry
YWdPcmlnaW4oU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBwYWludFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0NvbnRl
eHQqLCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50
VHJhY2tQaWVjZShHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jiwg
U2Nyb2xsYmFyUGFydCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50QnV0dG9uKEdyYXBoaWNzQ29u
dGV4dCosIFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmLCBTY3JvbGxiYXJQYXJ0KTsKLSAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXIqLCBjb25z
dCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBo
aWNzQ29udGV4dCosIFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgSW50UmVjdCYpOworICAg
IHZpcnR1YWwgdm9pZCBwYWludFRyYWNrUGllY2UoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFy
VGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0JiwgU2Nyb2xsYmFyUGFydCk7CisgICAgdmlydHVh
bCB2b2lkIHBhaW50QnV0dG9uKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRoZW1lQ2xpZW50
KiwgY29uc3QgSW50UmVjdCYsIFNjcm9sbGJhclBhcnQpOworICAgIHZpcnR1YWwgdm9pZCBwYWlu
dFRodW1iKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgSW50
UmVjdCYpOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gv
U2Nyb2xsYmFyVGhlbWVXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9TY3JvbGxi
YXJUaGVtZVd4LmNwcAppbmRleCBjOTI0OTc4YTUwNWFjMzFmMTQwNTFlMzAxODMzMDY0MjUxM2M0
YTUxLi5iYWRmMzE1NTQwNWE2YTUxMzY2MjMyNWI5MjM1OWRjODEzYTk1MjQyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9TY3JvbGxiYXJUaGVtZVd4LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9TY3JvbGxiYXJUaGVtZVd4LmNwcApAQCAtNzEsMTkg
KzcxLDE5IEBAIGludCBTY3JvbGxiYXJUaGVtZVd4OjpzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xs
YmFyQ29udHJvbFNpemUgc2l6ZSkKICAgICByZXR1cm4gdGhpY2tuZXNzOwogfQogCi1ib29sIFNj
cm9sbGJhclRoZW1lV3g6Omhhc1RodW1iKFNjcm9sbGJhciogc2Nyb2xsYmFyKQorYm9vbCBTY3Jv
bGxiYXJUaGVtZVd4OjpoYXNUaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQog
ewogICAgIC8vIFRoaXMgbWV0aG9kIGlzIGp1c3QgY2FsbGVkIGFzIGEgcGFpbnQtdGltZSBvcHRp
bWl6YXRpb24gdG8gc2VlIGlmCiAgICAgLy8gcGFpbnRpbmcgdGhlIHRodW1iIGNhbiBiZSBza2lw
cGVkLiAgV2UgZG9uJ3QgaGF2ZSB0byBiZSBleGFjdCBoZXJlLgogICAgIHJldHVybiB0aHVtYkxl
bmd0aChzY3JvbGxiYXIpID4gMDsKIH0KIAotaW50IFNjcm9sbGJhclRoZW1lV3g6Om1pbmltdW1U
aHVtYkxlbmd0aChTY3JvbGxiYXIqIHNjcm9sbGJhcikKK2ludCBTY3JvbGxiYXJUaGVtZVd4Ojpt
aW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKIHsKICAg
ICByZXR1cm4gMjA7CiB9CiAKLUludFNpemUgU2Nyb2xsYmFyVGhlbWVXeDo6YnV0dG9uU2l6ZShT
Y3JvbGxiYXIqKSAKK0ludFNpemUgU2Nyb2xsYmFyVGhlbWVXeDo6YnV0dG9uU2l6ZShTY3JvbGxi
YXJUaGVtZUNsaWVudCopIAogewogI2lmZGVmIF9fV1hNQUNfXwogICAgIHJldHVybiBJbnRTaXpl
KDIwLDIwKTsKQEAgLTkyLDcgKzkyLDcgQEAgSW50U2l6ZSBTY3JvbGxiYXJUaGVtZVd4OjpidXR0
b25TaXplKFNjcm9sbGJhciopCiAjZW5kaWYKIH0KIAotdm9pZCBTY3JvbGxiYXJUaGVtZVd4Ojpz
cGxpdFRyYWNrKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiB1bmNvbnN0cmFp
bmVkVHJhY2tSZWN0LCBJbnRSZWN0JiBiZWZvcmVUaHVtYlJlY3QsIEludFJlY3QmIHRodW1iUmVj
dCwgSW50UmVjdCYgYWZ0ZXJUaHVtYlJlY3QpCit2b2lkIFNjcm9sbGJhclRoZW1lV3g6OnNwbGl0
VHJhY2soU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgdW5j
b25zdHJhaW5lZFRyYWNrUmVjdCwgSW50UmVjdCYgYmVmb3JlVGh1bWJSZWN0LCBJbnRSZWN0JiB0
aHVtYlJlY3QsIEludFJlY3QmIGFmdGVyVGh1bWJSZWN0KQogewogICAgIFNjcm9sbGJhclRoZW1l
Q29tcG9zaXRlOjpzcGxpdFRyYWNrKHNjcm9sbGJhciwgdW5jb25zdHJhaW5lZFRyYWNrUmVjdCwg
YmVmb3JlVGh1bWJSZWN0LCB0aHVtYlJlY3QsIGFmdGVyVGh1bWJSZWN0KTsKICNpZmRlZiBfX1dY
TUFDX18KQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkIFNjcm9sbGJhclRoZW1lV3g6OnNwbGl0VHJh
Y2soU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHVuY29uc3RyYQogI2VuZGlm
CiB9CiAKLUludFJlY3QgU2Nyb2xsYmFyVGhlbWVXeDo6YmFja0J1dHRvblJlY3QoU2Nyb2xsYmFy
KiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydCwgYm9vbCkKK0ludFJlY3QgU2Nyb2xsYmFy
VGhlbWVXeDo6YmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwg
U2Nyb2xsYmFyUGFydCBwYXJ0LCBib29sKQogewogICAgIC8vIEZJWE1FOiBIYW5kbGluZyB0aGlz
IGNhc2UgaXMgbmVlZGVkIHdoZW4gdGhlcmUgYXJlIHR3byBzZXRzIG9mIGFycm93IGJ1dHRvbnMK
ICAgICAvLyBvbiBNYWMsIG9uZSBhdCB0aGUgdG9wIGFuZCBvbmUgYXQgdGhlIGJvdHRvbS4KQEAg
LTEzMCw3ICsxMzAsNyBAQCBJbnRSZWN0IFNjcm9sbGJhclRoZW1lV3g6OmJhY2tCdXR0b25SZWN0
KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcgogICAgIHJldHVybiBJbnRS
ZWN0KHgsIHksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CiB9CiAKLUludFJlY3QgU2Ny
b2xsYmFyVGhlbWVXeDo6Zm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNj
cm9sbGJhclBhcnQgcGFydCwgYm9vbCkKK0ludFJlY3QgU2Nyb2xsYmFyVGhlbWVXeDo6Zm9yd2Fy
ZEJ1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFy
dCBwYXJ0LCBib29sKQogewogICAgIC8vIEZJWE1FOiBIYW5kbGluZyB0aGlzIGNhc2UgaXMgbmVl
ZGVkIHdoZW4gdGhlcmUgYXJlIHR3byBzZXRzIG9mIGFycm93IGJ1dHRvbnMKICAgICAvLyBvbiBN
YWMsIG9uZSBhdCB0aGUgdG9wIGFuZCBvbmUgYXQgdGhlIGJvdHRvbS4KQEAgLTE1NSw3ICsxNTUs
NyBAQCBJbnRSZWN0IFNjcm9sbGJhclRoZW1lV3g6OmZvcndhcmRCdXR0b25SZWN0KFNjcm9sbGJh
ciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0CiAgICAgcmV0dXJuIEludFJlY3QoeCwgeSwgc2l6
ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKIH0KIAotSW50UmVjdCBTY3JvbGxiYXJUaGVtZVd4
Ojp0cmFja1JlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGJvb2wpCitJbnRSZWN0IFNjcm9sbGJh
clRoZW1lV3g6OnRyYWNrUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBib29s
KQogewogICAgIEludFNpemUgYnMgPSBidXR0b25TaXplKHNjcm9sbGJhcik7CiAgICAgaW50IHRy
YWNrU3RhcnQgPSAwOwpAQCAtMTc5LDExICsxNzksMTEgQEAgSW50UmVjdCBTY3JvbGxiYXJUaGVt
ZVd4Ojp0cmFja1JlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGJvb2wpCiAgICAgcmV0dXJuIElu
dFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNjcm9sbGJhci0+eSgpICsgdHJhY2tTdGFydCwgdGhpY2tu
ZXNzLCBzY3JvbGxiYXItPmhlaWdodCgpIC0gMiAqIGJzLmhlaWdodCgpKTsKIH0KIAotYm9vbCBT
Y3JvbGxiYXJUaGVtZVd4OjpwYWludChTY3JvbGxiYXIqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBTY3JvbGxiYXJUaGVtZVd4
OjpwYWludChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgd3hPcmllbnRhdGlvbiBvcmll
bnRhdGlvbiA9IChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJh
cikgPyB3eEhPUklaT05UQUwgOiB3eFZFUlRJQ0FMOwogICAgIGludCBmbGFncyA9IDA7Ci0gICAg
aWYgKHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+aXNBY3RpdmUoKSkKKyAgICBpZiAoc2Ny
b2xsYmFyLT5pc1Njcm9sbGFibGVBcmVhQWN0aXZlKCkpCiAgICAgICAgIGZsYWdzIHw9IHd4Q09O
VFJPTF9GT0NVU0VEOwogICAgIAogICAgIGlmICghc2Nyb2xsYmFyLT5lbmFibGVkKCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9TY3JvbGxiYXJUaGVtZVd4LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9TY3JvbGxiYXJUaGVtZVd4LmgKaW5kZXggNzVhYjE3
NWEzYmE2MDRmY2Q3OTVhZDJlYTQ1ZWRmY2Y1ODNlZTU1OC4uMzcyYWFmOTY2MmY3NDVkNGVlMDc0
N2VkZjVjMTFmOWZjNWFkODk1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d3gvU2Nyb2xsYmFyVGhlbWVXeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1Nj
cm9sbGJhclRoZW1lV3guaApAQCAtMzUsMjEgKzM1LDIxIEBAIGNsYXNzIFNjcm9sbGJhclRoZW1l
V3ggOiBwdWJsaWMgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUgewogcHVibGljOgogICAgIHZpcnR1
YWwgflNjcm9sbGJhclRoZW1lV3goKTsKICAgICB2aXJ0dWFsIGludCBzY3JvbGxiYXJUaGlja25l
c3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFyU2Nyb2xsYmFyKTsKLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnQoU2Nyb2xsYmFyKiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYp
OworICAgIHZpcnR1YWwgYm9vbCBwYWludChTY3JvbGxiYXJUaGVtZUNsaWVudCosIEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKICAgICAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFs
IGJvb2wgaGFzQnV0dG9ucyhTY3JvbGxiYXIqKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVh
bCBib29sIGhhc1RodW1iKFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgYm9vbCBoYXNCdXR0b25z
KFNjcm9sbGJhclRoZW1lQ2xpZW50KikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBoYXNUaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCopOwogCi0gICAgdmlydHVhbCBJbnRTaXpl
IGJ1dHRvblNpemUoU2Nyb2xsYmFyKik7CisgICAgdmlydHVhbCBJbnRTaXplIGJ1dHRvblNpemUo
U2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKIAotICAgIHZpcnR1YWwgSW50UmVjdCBiYWNrQnV0dG9u
UmVjdChTY3JvbGxiYXIqLCBTY3JvbGxiYXJQYXJ0LCBib29sIHBhaW50aW5nID0gZmFsc2UpOwot
ICAgIHZpcnR1YWwgSW50UmVjdCBmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXIqLCBTY3JvbGxi
YXJQYXJ0LCBib29sIHBhaW50aW5nID0gZmFsc2UpOwotICAgIHZpcnR1YWwgSW50UmVjdCB0cmFj
a1JlY3QoU2Nyb2xsYmFyKiwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsKKyAgICB2aXJ0dWFsIElu
dFJlY3QgYmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBTY3JvbGxiYXJQYXJ0
LCBib29sIHBhaW50aW5nID0gZmFsc2UpOworICAgIHZpcnR1YWwgSW50UmVjdCBmb3J3YXJkQnV0
dG9uUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIFNjcm9sbGJhclBhcnQsIGJvb2wgcGFpbnRp
bmcgPSBmYWxzZSk7CisgICAgdmlydHVhbCBJbnRSZWN0IHRyYWNrUmVjdChTY3JvbGxiYXJUaGVt
ZUNsaWVudCosIGJvb2wgcGFpbnRpbmcgPSBmYWxzZSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc3Bs
aXRUcmFjayhTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JiB0cmFjaywgSW50UmVjdCYgc3RhcnRU
cmFjaywgSW50UmVjdCYgdGh1bWIsIEludFJlY3QmIGVuZFRyYWNrKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc3BsaXRUcmFjayhTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3QmIHRyYWNr
LCBJbnRSZWN0JiBzdGFydFRyYWNrLCBJbnRSZWN0JiB0aHVtYiwgSW50UmVjdCYgZW5kVHJhY2sp
OwogICAgIAotICAgIHZpcnR1YWwgaW50IG1pbmltdW1UaHVtYkxlbmd0aChTY3JvbGxiYXIqKTsK
KyAgICB2aXJ0dWFsIGludCBtaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQq
KTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
Y3JvbGxiYXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuaApp
bmRleCA4MTBjOThmZjM2NjhhYjkxY2RlOWMzNTcxOGQ2ZjA0YjJmNzQ2NzFiLi43ZmUyZmFjOGI4
ZDQ5NzU0ZDhlYWIyM2Q0MDViMTYyYmUzM2RjN2JhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNjcm9sbGJhci5oCkBAIC04NSw3ICs4NSw3IEBAIHByaXZhdGU6CiAgICAgSGFz
aE1hcDx1bnNpZ25lZCwgUmVuZGVyU2Nyb2xsYmFyUGFydCo+IG1fcGFydHM7CiB9OwogCi1pbmxp
bmUgUmVuZGVyU2Nyb2xsYmFyKiB0b1JlbmRlclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJh
cikKK2lubGluZSBSZW5kZXJTY3JvbGxiYXIqIHRvUmVuZGVyU2Nyb2xsYmFyKFNjcm9sbGJhclRo
ZW1lQ2xpZW50KiBzY3JvbGxiYXIpCiB7CiAgICAgQVNTRVJUKCFzY3JvbGxiYXIgfHwgc2Nyb2xs
YmFyLT5pc0N1c3RvbVNjcm9sbGJhcigpKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVy
U2Nyb2xsYmFyKj4oc2Nyb2xsYmFyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU2Nyb2xsYmFyVGhlbWUuY3BwCmluZGV4IDg3MzA5ZDQ0ZTVhYTQ1MjY5NzlhZmViZTUx
Mjc4YjRlNDZhNWU5MTcuLjQ0ZTJhYTYzMWRjMjgxNTAxNzRiYzIyNTIzMGU4YjZhYWI3ZDBkMzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVt
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclRoZW1l
LmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJl
bmRlclNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyLmgiCisjaW5j
bHVkZSAiU2Nyb2xsYmFyVGhlbWVDbGllbnQuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2LDcgKzM3LDcgQEAgUmVuZGVyU2Nyb2xs
YmFyVGhlbWUqIFJlbmRlclNjcm9sbGJhclRoZW1lOjpyZW5kZXJTY3JvbGxiYXJUaGVtZSgpCiAg
ICAgcmV0dXJuICZ0aGVtZTsKIH0KIAotdm9pZCBSZW5kZXJTY3JvbGxiYXJUaGVtZTo6YnV0dG9u
U2l6ZXNBbG9uZ1RyYWNrQXhpcyhTY3JvbGxiYXIqIHNjcm9sbGJhciwgaW50JiBiZWZvcmVTaXpl
LCBpbnQmIGFmdGVyU2l6ZSkKK3ZvaWQgUmVuZGVyU2Nyb2xsYmFyVGhlbWU6OmJ1dHRvblNpemVz
QWxvbmdUcmFja0F4aXMoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgaW50JiBiZWZv
cmVTaXplLCBpbnQmIGFmdGVyU2l6ZSkKIHsKICAgICBJbnRSZWN0IGZpcnN0QnV0dG9uID0gYmFj
a0J1dHRvblJlY3Qoc2Nyb2xsYmFyLCBCYWNrQnV0dG9uU3RhcnRQYXJ0KTsKICAgICBJbnRSZWN0
IHNlY29uZEJ1dHRvbiA9IGZvcndhcmRCdXR0b25SZWN0KHNjcm9sbGJhciwgRm9yd2FyZEJ1dHRv
blN0YXJ0UGFydCk7CkBAIC01MSw3ICs1Miw3IEBAIHZvaWQgUmVuZGVyU2Nyb2xsYmFyVGhlbWU6
OmJ1dHRvblNpemVzQWxvbmdUcmFja0F4aXMoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGludCYKICAg
ICB9CiB9CiAKLWJvb2wgUmVuZGVyU2Nyb2xsYmFyVGhlbWU6Omhhc0J1dHRvbnMoU2Nyb2xsYmFy
KiBzY3JvbGxiYXIpCitib29sIFJlbmRlclNjcm9sbGJhclRoZW1lOjpoYXNCdXR0b25zKFNjcm9s
bGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCiB7CiAgICAgaW50IHN0YXJ0U2l6ZTsKICAgICBp
bnQgZW5kU2l6ZTsKQEAgLTU5LDI3ICs2MCwyNyBAQCBib29sIFJlbmRlclNjcm9sbGJhclRoZW1l
OjpoYXNCdXR0b25zKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogICAgIHJldHVybiAoc3RhcnRTaXpl
ICsgZW5kU2l6ZSkgPD0gKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyID8gc2Nyb2xsYmFyLT53aWR0aCgpIDogc2Nyb2xsYmFyLT5oZWlnaHQoKSk7CiB9CiAK
LWJvb2wgUmVuZGVyU2Nyb2xsYmFyVGhlbWU6Omhhc1RodW1iKFNjcm9sbGJhciogc2Nyb2xsYmFy
KQorYm9vbCBSZW5kZXJTY3JvbGxiYXJUaGVtZTo6aGFzVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGll
bnQqIHNjcm9sbGJhcikKIHsKICAgICByZXR1cm4gdHJhY2tMZW5ndGgoc2Nyb2xsYmFyKSAtIHRo
dW1iTGVuZ3RoKHNjcm9sbGJhcikgPj0gMDsKIH0KIAotaW50IFJlbmRlclNjcm9sbGJhclRoZW1l
OjptaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCitpbnQgUmVuZGVyU2Ny
b2xsYmFyVGhlbWU6Om1pbmltdW1UaHVtYkxlbmd0aChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Ny
b2xsYmFyKQogewogICAgIHJldHVybiB0b1JlbmRlclNjcm9sbGJhcihzY3JvbGxiYXIpLT5taW5p
bXVtVGh1bWJMZW5ndGgoKTsKIH0KIAotSW50UmVjdCBSZW5kZXJTY3JvbGxiYXJUaGVtZTo6YmFj
a0J1dHRvblJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydFR5cGUs
IGJvb2wpCitJbnRSZWN0IFJlbmRlclNjcm9sbGJhclRoZW1lOjpiYWNrQnV0dG9uUmVjdChTY3Jv
bGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnRUeXBlLCBib29s
KQogewogICAgIHJldHVybiB0b1JlbmRlclNjcm9sbGJhcihzY3JvbGxiYXIpLT5idXR0b25SZWN0
KHBhcnRUeXBlKTsKIH0KIAotSW50UmVjdCBSZW5kZXJTY3JvbGxiYXJUaGVtZTo6Zm9yd2FyZEJ1
dHRvblJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydFR5cGUsIGJv
b2wpCitJbnRSZWN0IFJlbmRlclNjcm9sbGJhclRoZW1lOjpmb3J3YXJkQnV0dG9uUmVjdChTY3Jv
bGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnRUeXBlLCBib29s
KQogewogICAgIHJldHVybiB0b1JlbmRlclNjcm9sbGJhcihzY3JvbGxiYXIpLT5idXR0b25SZWN0
KHBhcnRUeXBlKTsKIH0KIAotSW50UmVjdCBSZW5kZXJTY3JvbGxiYXJUaGVtZTo6dHJhY2tSZWN0
KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBib29sKQorSW50UmVjdCBSZW5kZXJTY3JvbGxiYXJUaGVt
ZTo6dHJhY2tSZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGJvb2wpCiB7CiAg
ICAgaWYgKCFoYXNCdXR0b25zKHNjcm9sbGJhcikpCiAgICAgICAgIHJldHVybiBzY3JvbGxiYXIt
PmZyYW1lUmVjdCgpOwpAQCAtOTEsNyArOTIsNyBAQCBJbnRSZWN0IFJlbmRlclNjcm9sbGJhclRo
ZW1lOjp0cmFja1JlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGJvb2wpCiAgICAgcmV0dXJuIHRv
UmVuZGVyU2Nyb2xsYmFyKHNjcm9sbGJhciktPnRyYWNrUmVjdChzdGFydExlbmd0aCwgZW5kTGVu
Z3RoKTsKIH0KIAotSW50UmVjdCBSZW5kZXJTY3JvbGxiYXJUaGVtZTo6Y29uc3RyYWluVHJhY2tS
ZWN0VG9UcmFja1BpZWNlcyhTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVj
dCkKK0ludFJlY3QgUmVuZGVyU2Nyb2xsYmFyVGhlbWU6OmNvbnN0cmFpblRyYWNrUmVjdFRvVHJh
Y2tQaWVjZXMoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYg
cmVjdCkKIHsgCiAgICAgSW50UmVjdCBiYWNrUmVjdCA9IHRvUmVuZGVyU2Nyb2xsYmFyKHNjcm9s
bGJhciktPnRyYWNrUGllY2VSZWN0V2l0aE1hcmdpbnMoQmFja1RyYWNrUGFydCwgcmVjdCk7CiAg
ICAgSW50UmVjdCBmb3J3YXJkUmVjdCA9IHRvUmVuZGVyU2Nyb2xsYmFyKHNjcm9sbGJhciktPnRy
YWNrUGllY2VSZWN0V2l0aE1hcmdpbnMoRm9yd2FyZFRyYWNrUGFydCwgcmVjdCk7CkBAIC0xMTIs
MjcgKzExMywyNyBAQCB2b2lkIFJlbmRlclNjcm9sbGJhclRoZW1lOjpwYWludFNjcm9sbENvcm5l
cihTY3JvbGxWaWV3KiwgR3JhcGhpY3NDb250ZXh0KiBjb250ZQogICAgIGNvbnRleHQtPmZpbGxS
ZWN0KGNvcm5lclJlY3QsIENvbG9yOjp3aGl0ZSwgQ29sb3JTcGFjZURldmljZVJHQik7CiB9CiAK
LXZvaWQgUmVuZGVyU2Nyb2xsYmFyVGhlbWU6OnBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhciogc2Nyb2xsYmFyKQordm9pZCBSZW5kZXJT
Y3JvbGxiYXJUaGVtZTo6cGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKIHsKICAgICB0b1JlbmRl
clNjcm9sbGJhcihzY3JvbGxiYXIpLT5wYWludFBhcnQoY29udGV4dCwgU2Nyb2xsYmFyQkdQYXJ0
LCBzY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKIH0KIAotdm9pZCBSZW5kZXJTY3JvbGxiYXJUaGVt
ZTo6cGFpbnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxi
YXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgUmVuZGVyU2Nyb2xsYmFy
VGhlbWU6OnBhaW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Ny
b2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAg
ICB0b1JlbmRlclNjcm9sbGJhcihzY3JvbGxiYXIpLT5wYWludFBhcnQoY29udGV4dCwgVHJhY2tC
R1BhcnQsIHJlY3QpOwogfQogCi12b2lkIFJlbmRlclNjcm9sbGJhclRoZW1lOjpwYWludFRyYWNr
UGllY2UoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29u
c3QgSW50UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0KQordm9pZCBSZW5kZXJTY3JvbGxi
YXJUaGVtZTo6cGFpbnRUcmFja1BpZWNlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xs
YmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCwgU2Nyb2xsYmFy
UGFydCBwYXJ0KQogewogICAgIHRvUmVuZGVyU2Nyb2xsYmFyKHNjcm9sbGJhciktPnBhaW50UGFy
dChjb250ZXh0LCBwYXJ0LCByZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJTY3JvbGxiYXJUaGVtZTo6
cGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXIqIHNjcm9sbGJh
ciwgY29uc3QgSW50UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0KQordm9pZCBSZW5kZXJT
Y3JvbGxiYXJUaGVtZTo6cGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3Jv
bGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxi
YXJQYXJ0IHBhcnQpCiB7CiAgICAgdG9SZW5kZXJTY3JvbGxiYXIoc2Nyb2xsYmFyKS0+cGFpbnRQ
YXJ0KGNvbnRleHQsIHBhcnQsIHJlY3QpOwogfQogCi12b2lkIFJlbmRlclNjcm9sbGJhclRoZW1l
OjpwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyKiBzY3JvbGxi
YXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIFJlbmRlclNjcm9sbGJhclRoZW1lOjpwYWlu
dFRodW1iKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNj
cm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICB0b1JlbmRlclNjcm9sbGJhcihz
Y3JvbGxiYXIpLT5wYWludFBhcnQoY29udGV4dCwgVGh1bWJQYXJ0LCByZWN0KTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclRoZW1lLmgKaW5kZXggNzBj
MjRhNWVhMmVkNzliYjlmOGZhZDAyMTM3YzYzNTY5ZDk5NjNjNC4uZTdjODE2OTdkNzNhOTQ5MTQ1
MWIyNjdmNDFhYmRkZTdhZTNkZmQ2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNjcm9sbGJhclRoZW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNjcm9sbGJhclRoZW1lLmgKQEAgLTQ2LDM1ICs0NiwzNSBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoU2Nyb2xsVmlldyosIEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29ybmVyUmVjdCk7CiAKLSAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JiBldmVudCkgeyByZXR1cm4gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkt
PnNob3VsZENlbnRlck9uVGh1bWIoc2Nyb2xsYmFyLCBldmVudCk7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KSB7IHJldHVybiBTY3JvbGxiYXJUaGVtZTo6
dGhlbWUoKS0+c2hvdWxkQ2VudGVyT25UaHVtYihzY3JvbGxiYXIsIGV2ZW50KTsgfQogICAgIAog
ICAgIHZpcnR1YWwgZG91YmxlIGluaXRpYWxBdXRvc2Nyb2xsVGltZXJEZWxheSgpIHsgcmV0dXJu
IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLT5pbml0aWFsQXV0b3Njcm9sbFRpbWVyRGVsYXkoKTsg
fQogICAgIHZpcnR1YWwgZG91YmxlIGF1dG9zY3JvbGxUaW1lckRlbGF5KCkgeyByZXR1cm4gU2Ny
b2xsYmFyVGhlbWU6OnRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCk7IH0KIAotICAgIHZp
cnR1YWwgdm9pZCByZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikgeyByZXR1
cm4gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCktPnJlZ2lzdGVyU2Nyb2xsYmFyKHNjcm9sbGJhcik7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9s
bGJhcikgeyByZXR1cm4gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCktPnVucmVnaXN0ZXJTY3JvbGxi
YXIoc2Nyb2xsYmFyKTsgfQorICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclNjcm9sbGJhcihTY3Jv
bGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKSB7IHJldHVybiBTY3JvbGxiYXJUaGVtZTo6dGhl
bWUoKS0+cmVnaXN0ZXJTY3JvbGxiYXIoc2Nyb2xsYmFyKTsgfQorICAgIHZpcnR1YWwgdm9pZCB1
bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpIHsgcmV0
dXJuIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLT51bnJlZ2lzdGVyU2Nyb2xsYmFyKHNjcm9sbGJh
cik7IH0KIAotICAgIHZpcnR1YWwgaW50IG1pbmltdW1UaHVtYkxlbmd0aChTY3JvbGxiYXIqKTsK
KyAgICB2aXJ0dWFsIGludCBtaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQq
KTsKIAotICAgIHZvaWQgYnV0dG9uU2l6ZXNBbG9uZ1RyYWNrQXhpcyhTY3JvbGxiYXIqIHNjcm9s
bGJhciwgaW50JiBiZWZvcmVTaXplLCBpbnQmIGFmdGVyU2l6ZSk7CisgICAgdm9pZCBidXR0b25T
aXplc0Fsb25nVHJhY2tBeGlzKFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgaW50JiBiZWZvcmVTaXpl
LCBpbnQmIGFmdGVyU2l6ZSk7CiAgICAgCiAgICAgc3RhdGljIFJlbmRlclNjcm9sbGJhclRoZW1l
KiByZW5kZXJTY3JvbGxiYXJUaGVtZSgpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBib29s
IGhhc0J1dHRvbnMoU2Nyb2xsYmFyKik7Ci0gICAgdmlydHVhbCBib29sIGhhc1RodW1iKFNjcm9s
bGJhciopOworICAgIHZpcnR1YWwgYm9vbCBoYXNCdXR0b25zKFNjcm9sbGJhclRoZW1lQ2xpZW50
Kik7CisgICAgdmlydHVhbCBib29sIGhhc1RodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CiAK
LSAgICB2aXJ0dWFsIEludFJlY3QgYmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyKiwgU2Nyb2xsYmFy
UGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgZm9yd2Fy
ZEJ1dHRvblJlY3QoU2Nyb2xsYmFyKiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZh
bHNlKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgdHJhY2tSZWN0KFNjcm9sbGJhciosIGJvb2wgcGFp
bnRpbmcgPSBmYWxzZSk7CisgICAgdmlydHVhbCBJbnRSZWN0IGJhY2tCdXR0b25SZWN0KFNjcm9s
bGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsK
KyAgICB2aXJ0dWFsIEludFJlY3QgZm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGll
bnQqLCBTY3JvbGxiYXJQYXJ0LCBib29sIHBhaW50aW5nID0gZmFsc2UpOworICAgIHZpcnR1YWwg
SW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBib29sIHBhaW50aW5nID0g
ZmFsc2UpOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBwYWludFNjcm9sbGJhckJhY2tncm91bmQo
R3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyKik7ICAgIAotICAgIHZpcnR1YWwgdm9pZCBwYWlu
dFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXIqLCBjb25zdCBJbnRS
ZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50VHJhY2tQaWVjZShHcmFwaGljc0NvbnRleHQq
LCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JiwgU2Nyb2xsYmFyUGFydCk7Ci0gICAgdmlydHVh
bCB2b2lkIHBhaW50QnV0dG9uKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhciosIGNvbnN0IElu
dFJlY3QmLCBTY3JvbGxiYXJQYXJ0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUaHVtYihHcmFw
aGljc0NvbnRleHQqLCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2
b2lkIHBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJU
aGVtZUNsaWVudCopOyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUcmFja0JhY2tncm91bmQo
R3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCB2b2lkIHBhaW50VHJhY2tQaWVjZShHcmFwaGljc0NvbnRleHQqLCBTY3Jv
bGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3QmLCBTY3JvbGxiYXJQYXJ0KTsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhlbWVD
bGllbnQqLCBjb25zdCBJbnRSZWN0JiwgU2Nyb2xsYmFyUGFydCk7CisgICAgdmlydHVhbCB2b2lk
IHBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25z
dCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIEludFJlY3QgY29uc3RyYWluVHJhY2tSZWN0VG9U
cmFja1BpZWNlcyhTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBJbnRS
ZWN0IGNvbnN0cmFpblRyYWNrUmVjdFRvVHJhY2tQaWVjZXMoU2Nyb2xsYmFyVGhlbWVDbGllbnQq
LCBjb25zdCBJbnRSZWN0Jik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129622</attachid>
            <date>2012-02-29 20:31:23 -0800</date>
            <delta_ts>2012-03-01 20:24:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78872-20120229203121.patch</filename>
            <type>text/plain</type>
            <size>38483</size>
            <attacher name="Tien-Ren Chen">trchen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5Mjk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMDIwN2FkMjI2
MzU5ZTE1N2ZhNWZhZGEwMTI2M2RhN2NjYmQzNjk3OS4uMDJlZDA4OGIzNzZmMDk1NjBhZTA2ZGI5
YTU3OTk4ZTk2NzQzZGVlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzIzNiw2ICszMjM2LDggQEAK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJ
bWFnZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRl
eHR1cmVVcGRhdGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L01lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uY3BwJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NvbGlkQ29sb3JMYXllckNo
cm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU29s
aWRDb2xvckxheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vUGxhdGZvcm1DYW52YXMuY3BwJywKQEAgLTMzNTEsNiArMzM1MywxMCBAQAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1bGVyU3RhdGVN
YWNoaW5lLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUaHJlYWRQcm94eS5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhci5jcHAnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyLmgnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxi
YXJMYXllckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcCcsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29y
ZGluYXRvckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9t
aXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCmluZGV4IGZmMDUzZGY2MjUyMjE5
YzY2NGY2OTMxZGVjNzVhMzRlOGNmMDcyYzAuLjdmNzQ0YmY0MDNjNDNjNmQzZTBjZWY5NjQxM2U0
MmRjZjcxY2YyYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2No
cm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0u
Y3BwCkBAIC0yNyw4ICsyNywxNCBAQAogCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3Iu
aCIKIAorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVk
ZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgorI2luY2x1ZGUgIlJlbmRl
ckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJT
Y3JvbGxiYXJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01OCwxNCArNjQsNTYgQEAgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6On5TY3JvbGxpbmdDb29yZGluYXRvcigpCiAgICAgZGVsZXRlIG1fcHJpdmF0ZTsKIH0K
IAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3SG9yaXpvbnRhbFNjcm9sbGJh
ckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyosIEdyYXBoaWNzTGF5ZXIqIGhvcml6b250YWxTY3Jv
bGxiYXJMYXllcikKK3N0YXRpYyBHcmFwaGljc0xheWVyKiBzY3JvbGxMYXllckZvckZyYW1lVmll
dyhGcmFtZVZpZXcqIGZyYW1lVmlldykKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IQorI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBGcmFtZSogZnJhbWUgPSBmcmFtZVZp
ZXctPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBS
ZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpOworICAgIGlm
ICghcmVuZGVyVmlldykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHJlbmRlclZpZXct
PmNvbXBvc2l0b3IoKS0+c2Nyb2xsTGF5ZXIoKTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5k
aWYKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3VmVydGljYWxTY3Jv
bGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcqLCBHcmFwaGljc0xheWVyKiB2ZXJ0aWNhbFNj
cm9sbGJhckxheWVyKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3SG9yaXpv
bnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBHcmFwaGlj
c0xheWVyKiBob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxl
bWVudCEKKyAgICBHcmFwaGljc0xheWVyKiBzY3JvbGxMYXllciA9IHNjcm9sbExheWVyRm9yRnJh
bWVWaWV3KGZyYW1lVmlldyk7CisgICAgQVNTRVJUKHNjcm9sbExheWVyKTsKKyAgICBpZiAoIWhv
cml6b250YWxTY3JvbGxiYXJMYXllcikKKyAgICAgICAgc2Nyb2xsTGF5ZXItPnBsYXRmb3JtTGF5
ZXIoKS0+c2V0SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKDApOworICAgIGVsc2UgeworICAgICAg
ICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigp
OworICAgICAgICBBU1NFUlQoc2Nyb2xsYmFyKTsKKyAgICAgICAgaWYgKHNjcm9sbGJhci0+dGhl
bWUoKSAhPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKSB8fCBzY3JvbGxiYXItPmlzQ3VzdG9tU2Ny
b2xsYmFyKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVmUHRyPFNjcm9sbGJh
ckxheWVyQ2hyb21pdW0+IHNjcm9sbGJhckxheWVyID0gU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKHNjcm9sbGJhcik7CisgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXJMYXllci0+c2V0
Q29udGVudHNUb01lZGlhKHNjcm9sbGJhckxheWVyLmdldCgpKTsKKyAgICAgICAgc2Nyb2xsTGF5
ZXItPnBsYXRmb3JtTGF5ZXIoKS0+c2V0SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKHNjcm9sbGJh
ckxheWVyLmdldCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZy
YW1lVmlld1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZp
ZXcsIEdyYXBoaWNzTGF5ZXIqIHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIpCit7CisgICAgR3JhcGhp
Y3NMYXllciogc2Nyb2xsTGF5ZXIgPSBzY3JvbGxMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcp
OworICAgIEFTU0VSVChzY3JvbGxMYXllcik7CisgICAgaWYgKCF2ZXJ0aWNhbFNjcm9sbGJhckxh
eWVyKQorICAgICAgICBzY3JvbGxMYXllci0+cGxhdGZvcm1MYXllcigpLT5zZXRWZXJ0aWNhbFNj
cm9sbGJhckxheWVyKDApOworICAgIGVsc2UgeworICAgICAgICBTY3JvbGxiYXIqIHNjcm9sbGJh
ciA9IGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9s
bGJhcik7CisgICAgICAgIGlmIChzY3JvbGxiYXItPnRoZW1lKCkgIT0gU2Nyb2xsYmFyVGhlbWU6
OnRoZW1lKCkgfHwgc2Nyb2xsYmFyLT5pc0N1c3RvbVNjcm9sbGJhcigpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIFJlZlB0cjxTY3JvbGxiYXJMYXllckNocm9taXVtPiBzY3JvbGxi
YXJMYXllciA9IFNjcm9sbGJhckxheWVyQ2hyb21pdW06OmNyZWF0ZShzY3JvbGxiYXIpOworICAg
ICAgICB2ZXJ0aWNhbFNjcm9sbGJhckxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoc2Nyb2xsYmFy
TGF5ZXIuZ2V0KCkpOworICAgICAgICBzY3JvbGxMYXllci0+cGxhdGZvcm1MYXllcigpLT5zZXRW
ZXJ0aWNhbFNjcm9sbGJhckxheWVyKHNjcm9sbGJhckxheWVyLmdldCgpKTsKKyAgICB9CiB9CiAK
IHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbExheWVyKEdyYXBoaWNzTGF5ZXIq
IHNjcm9sbExheWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAppbmRleCBkZjFi
ZjI2YWE3ZjcxN2E3NzZmN2VjOWNkZjY3NDk5ZDM1MDIwZWMyLi4zNjhhYTQ5YmJhNGVmYWY1MmQ4
OGI5NzVjYTEzNGQ5YTA0YWIyYzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0u
aApAQCAtOTcsNiArOTcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRz
VG9JbWFnZShJbWFnZSopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvTWVkaWEoUGxh
dGZvcm1MYXllciopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRm
b3JtTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzQ29udGVudHNMYXllcigpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGVudHNMYXllcjsgfQogCiAgICAgdmlydHVhbCBib29sIGFkZEFuaW1hdGlv
bihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0
IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKICAgICB2aXJ0
dWFsIHZvaWQgcGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3Vi
bGUgdGltZU9mZnNldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDkyOWJiYzdlMTkzNmVk
NTVjNTUxOGIxOTRjZTJkMjNlMTZmMjQzODAuLjRiZjcxM2Y0MDQwZDljNDE4NDQ4OTQ2MWFlMmIx
YzFiNzIwOWU5ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC04MSw2ICs4MSw4IEBAIExh
eWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0oKQogICAgICwgbV9wcmVzZXJ2ZXMzRChmYWxzZSkK
ICAgICAsIG1fYWx3YXlzUmVzZXJ2ZVRleHR1cmVzKGZhbHNlKQogICAgICwgbV9yZXBsaWNhTGF5
ZXIoMCkKKyAgICAsIG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKDApCisgICAgLCBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyTGF5ZXIoMCkKICAgICAsIG1fZHJhd09wYWNpdHkoMCkKICAgICAsIG1fdGFy
Z2V0UmVuZGVyU3VyZmFjZSgwKQogICAgICwgbV9jb250ZW50c1NjYWxlKDEuMCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uaAppbmRleCBlMzEyM2JmNzk3NjI5NTAyYmFjOTdkYWJmYTI1YzRkYWQ4OTJkMmZiLi40
NTdiMTE3MTI3OTMzYmJjMWJkYzVmYTdlOGI4YzBkNDVhMzkyYTUwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oCkBAIC02MSw2ICs2MSw3IEBAIGNsYXNzIENDTGF5ZXJJbXBsOwogY2xhc3MgQ0NMYXllclRy
ZWVIb3N0OwogY2xhc3MgQ0NUZXh0dXJlVXBkYXRlcjsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNE
OworY2xhc3MgU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTsKIAogLy8gQmFzZSBjbGFzcyBmb3IgY29t
cG9zaXRlZCBsYXllcnMuIFNwZWNpYWwgbGF5ZXIgdHlwZXMgYXJlIGRlcml2ZWQgZnJvbQogLy8g
dGhpcyBjbGFzcy4KQEAgLTIzNiw2ICsyMzcsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEFu
aW1hdGlvbkV2ZW50KGNvbnN0IENDQW5pbWF0aW9uRXZlbnQmKTsKIAorICAgIHZvaWQgc2V0SG9y
aXpvbnRhbFNjcm9sbGJhckxheWVyKFNjcm9sbGJhckxheWVyQ2hyb21pdW0qIGxheWVyKSB7IG1f
aG9yaXpvbnRhbFNjcm9sbGJhckxheWVyID0gbGF5ZXI7IH0KKyAgICB2b2lkIHNldFZlcnRpY2Fs
U2Nyb2xsYmFyTGF5ZXIoU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bSogbGF5ZXIpIHsgbV92ZXJ0aWNh
bFNjcm9sbGJhckxheWVyID0gbGF5ZXI7IH0KKwogcHJvdGVjdGVkOgogICAgIGZyaWVuZCBjbGFz
cyBDQ0xheWVySW1wbDsKICAgICBmcmllbmQgY2xhc3MgTGF5ZXJUaWxlckNocm9taXVtOwpAQCAt
MzE0LDYgKzMxOCw5IEBAIHByaXZhdGU6CiAgICAgLy8gUmVwbGljYSBsYXllciB1c2VkIGZvciBy
ZWZsZWN0aW9ucy4KICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9yZXBsaWNhTGF5ZXI7CiAK
KyAgICBTY3JvbGxiYXJMYXllckNocm9taXVtICptX2hvcml6b250YWxTY3JvbGxiYXJMYXllcjsK
KyAgICBTY3JvbGxiYXJMYXllckNocm9taXVtICptX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXI7CisK
ICAgICAvLyBUcmFuc2llbnQgcHJvcGVydGllcy4KICAgICBPd25QdHI8UmVuZGVyU3VyZmFjZUNo
cm9taXVtPiBtX3JlbmRlclN1cmZhY2U7CiAgICAgZmxvYXQgbV9kcmF3T3BhY2l0eTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJh
ckxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDhkMDNiMDdkOTg0
MjlhZjVhYjBlODdmZDJkMjJkZGM4MWZiZDFjYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0u
Y3BwCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIlNjcm9sbGJh
ckxheWVyQ2hyb21pdW0uaCIKKworI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorI2luY2x1ZGUgImNj
L0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093
blB0cjxDQ0xheWVySW1wbD4gU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllcklt
cGwoKQoreworICAgIHJldHVybiBDQ1Njcm9sbGJhckxheWVySW1wbDo6Y3JlYXRlKGlkKCkpOwor
fQorCitQYXNzUmVmUHRyPFNjcm9sbGJhckxheWVyQ2hyb21pdW0+IFNjcm9sbGJhckxheWVyQ2hy
b21pdW06OmNyZWF0ZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNjcm9sbGJhckxheWVyQ2hyb21pdW0oc2Nyb2xsYmFyKSk7Cit9CisKK1Njcm9sbGJh
ckxheWVyQ2hyb21pdW06OlNjcm9sbGJhckxheWVyQ2hyb21pdW0oU2Nyb2xsYmFyKiBzY3JvbGxi
YXIpCisgICAgOiBtX3Njcm9sbGJhcihzY3JvbGxiYXIpCit7Cit9CisKK3ZvaWQgU2Nyb2xsYmFy
TGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCit7Cisg
ICAgTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhsYXllcik7CisKKyAgICBDQ1Njcm9s
bGJhckxheWVySW1wbCogc2Nyb2xsYmFyTGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ1Njcm9sbGJhckxh
eWVySW1wbCo+KGxheWVyKTsKKyAgICBDQ1Njcm9sbGJhciogc2Nyb2xsYmFyID0gc2Nyb2xsYmFy
TGF5ZXItPnNjcm9sbGJhcigpOworCisgICAgc2Nyb2xsYmFyLT5wdWxsUHJvcGVydGllc0Zyb20o
bV9zY3JvbGxiYXIuZ2V0KCkpOworICAgIHNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KEludFJlY3Qo
SW50UG9pbnQoKSwgc2Nyb2xsYmFyTGF5ZXItPmNvbnRlbnRCb3VuZHMoKSkpOworfQorCit9Cisj
ZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFy
TGF5ZXJDaHJvbWl1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiMDdlYjAzMzk5NThjZDliOGNjYzdiNTkwMDFj
ZWVkOWU4MDJhMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmgKQEAgLTAsMCArMSw1NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIFNjcm9sbGJhckxheWVyQ2hyb21pdW1faAorI2Rl
ZmluZSBTY3JvbGxiYXJMYXllckNocm9taXVtX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBTY3JvbGxiYXI7CisKK2NsYXNzIFNjcm9sbGJhckxheWVyQ2hyb21pdW0g
OiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgdmlydHVhbCBQYXNzT3duUHRy
PENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNjcm9sbGJhckxheWVyQ2hyb21pdW0+IGNyZWF0ZShTY3JvbGxiYXIqKTsKKworICAgIHZpcnR1
YWwgdm9pZCBwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKik7CisKK3Byb3RlY3RlZDoKKyAg
ICBTY3JvbGxiYXJMYXllckNocm9taXVtKFNjcm9sbGJhciopOworCitwcml2YXRlOgorICAgIFJl
ZlB0cjxTY3JvbGxiYXI+IG1fc2Nyb2xsYmFyOworfTsKKworfQorI2VuZGlmIC8vIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuY3Bw
CmluZGV4IGViZDFhYzczMGIxOTQ1NDFjMmI0YzRlZWYxZjZjY2E1OTliNGU1YzguLmI2YzVhNDZk
MTU4YjM0MGQwOTM0ODJiOTE0NTM3OTljMWQ1NDUxMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6
ZXIuY3BwCkBAIC0yOCwyMCArMjgsMjkgQEAKICNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgi
CiAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyTGF5ZXJD
aHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NT
Y3JvbGxiYXIuaCIKKyNpbmNsdWRlICJjYy9DQ1Njcm9sbGJhckxheWVySW1wbC5oIgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzT3duUHRyPEND
TGF5ZXJJbXBsPiBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKExheWVyQ2hyb21p
dW0qIGxheWVyQ2hyb21pdW1Sb290LCBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBvbGRDQ0xheWVy
SW1wbFJvb3QpCiB7Ci0gICAgQ0NMYXllckltcGxNYXAgbWFwOwotICAgIGNvbGxlY3RFeGlzdGlu
Z0NDTGF5ZXJJbXBsUmVjdXJzaXZlKG1hcCwgb2xkQ0NMYXllckltcGxSb290KTsKKyAgICBDQ0xh
eWVySW1wbE1hcCBvbGRMYXllcnM7CisgICAgSGFzaE1hcDxpbnQsIENDTGF5ZXJJbXBsKj4gbmV3
TGF5ZXJzOwogCi0gICAgcmV0dXJuIHN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShtYXAsIGxheWVy
Q2hyb21pdW1Sb290KTsKKyAgICBjb2xsZWN0RXhpc3RpbmdDQ0xheWVySW1wbFJlY3Vyc2l2ZShv
bGRMYXllcnMsIG9sZENDTGF5ZXJJbXBsUm9vdCk7CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+
IG5ld1RyZWUgPSBzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUobmV3TGF5ZXJzLCBvbGRMYXllcnMs
IGxheWVyQ2hyb21pdW1Sb290KTsKKworICAgIHJlc29sdmVJbnRlckxheWVyUG9pbnRlcnNSZWN1
cnNpdmUobmV3TGF5ZXJzLCBsYXllckNocm9taXVtUm9vdCk7CisKKyAgICByZXR1cm4gbmV3VHJl
ZS5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgVHJlZVN5bmNocm9uaXplcjo6Y29sbGVjdEV4aXN0aW5n
Q0NMYXllckltcGxSZWN1cnNpdmUoQ0NMYXllckltcGxNYXAmIG1hcCwgUGFzc093blB0cjxDQ0xh
eWVySW1wbD4gcG9wQ0NMYXllckltcGwpCit2b2lkIFRyZWVTeW5jaHJvbml6ZXI6OmNvbGxlY3RF
eGlzdGluZ0NDTGF5ZXJJbXBsUmVjdXJzaXZlKENDTGF5ZXJJbXBsTWFwJiBvbGRMYXllcnMsIFBh
c3NPd25QdHI8Q0NMYXllckltcGw+IHBvcENDTGF5ZXJJbXBsKQogewogICAgIE93blB0cjxDQ0xh
eWVySW1wbD4gY2NMYXllckltcGwgPSBwb3BDQ0xheWVySW1wbDsKIApAQCAtNTAsNDIgKzU5LDY3
IEBAIHZvaWQgVHJlZVN5bmNocm9uaXplcjo6Y29sbGVjdEV4aXN0aW5nQ0NMYXllckltcGxSZWN1
cnNpdmUoQ0NMYXllckltcGxNYXAmIG1hcCwKIAogICAgIFZlY3RvcjxPd25QdHI8Q0NMYXllcklt
cGw+ID4mIGNoaWxkcmVuID0gY2NMYXllckltcGwtPm1fY2hpbGRyZW47CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkKLSAgICAgICAgY29sbGVjdEV4aXN0
aW5nQ0NMYXllckltcGxSZWN1cnNpdmUobWFwLCBjaGlsZHJlbltpXS5yZWxlYXNlKCkpOworICAg
ICAgICBjb2xsZWN0RXhpc3RpbmdDQ0xheWVySW1wbFJlY3Vyc2l2ZShvbGRMYXllcnMsIGNoaWxk
cmVuW2ldLnJlbGVhc2UoKSk7CiAKLSAgICBjb2xsZWN0RXhpc3RpbmdDQ0xheWVySW1wbFJlY3Vy
c2l2ZShtYXAsIGNjTGF5ZXJJbXBsLT5tX21hc2tMYXllci5yZWxlYXNlKCkpOwotICAgIGNvbGxl
Y3RFeGlzdGluZ0NDTGF5ZXJJbXBsUmVjdXJzaXZlKG1hcCwgY2NMYXllckltcGwtPm1fcmVwbGlj
YUxheWVyLnJlbGVhc2UoKSk7CisgICAgY29sbGVjdEV4aXN0aW5nQ0NMYXllckltcGxSZWN1cnNp
dmUob2xkTGF5ZXJzLCBjY0xheWVySW1wbC0+bV9tYXNrTGF5ZXIucmVsZWFzZSgpKTsKKyAgICBj
b2xsZWN0RXhpc3RpbmdDQ0xheWVySW1wbFJlY3Vyc2l2ZShvbGRMYXllcnMsIGNjTGF5ZXJJbXBs
LT5tX3JlcGxpY2FMYXllci5yZWxlYXNlKCkpOwogCiAgICAgaW50IGlkID0gY2NMYXllckltcGwt
PmlkKCk7Ci0gICAgbWFwLnNldChpZCwgY2NMYXllckltcGwucmVsZWFzZSgpKTsKKyAgICBvbGRM
YXllcnMuc2V0KGlkLCBjY0xheWVySW1wbC5yZWxlYXNlKCkpOwogfQogCi1QYXNzT3duUHRyPEND
TGF5ZXJJbXBsPiBUcmVlU3luY2hyb25pemVyOjpyZXVzZU9yQ3JlYXRlQ0NMYXllckltcGwoQ0NM
YXllckltcGxNYXAmIG1hcCwgTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCitQYXNzT3duUHRyPENDTGF5
ZXJJbXBsPiBUcmVlU3luY2hyb25pemVyOjpyZXVzZU9yQ3JlYXRlQ0NMYXllckltcGwoSGFzaE1h
cDxpbnQsIENDTGF5ZXJJbXBsKj4gJm5ld0xheWVycywgQ0NMYXllckltcGxNYXAmIG9sZExheWVy
cywgTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCiB7Ci0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjY0xh
eWVySW1wbCA9IG1hcC50YWtlKGxheWVyLT5pZCgpKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+
IGNjTGF5ZXJJbXBsID0gb2xkTGF5ZXJzLnRha2UobGF5ZXItPmlkKCkpOwogCiAgICAgaWYgKCFj
Y0xheWVySW1wbCkKLSAgICAgICAgcmV0dXJuIGxheWVyLT5jcmVhdGVDQ0xheWVySW1wbCgpOwor
ICAgICAgICBjY0xheWVySW1wbCA9IGxheWVyLT5jcmVhdGVDQ0xheWVySW1wbCgpOwogCisgICAg
bmV3TGF5ZXJzLnNldChsYXllci0+aWQoKSwgY2NMYXllckltcGwuZ2V0KCkpOwogICAgIHJldHVy
biBjY0xheWVySW1wbC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NPd25QdHI8Q0NMYXllckltcGw+IFRy
ZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShDQ0xheWVySW1wbE1hcCYg
bWFwLCBMYXllckNocm9taXVtKiBsYXllcikKK1Bhc3NPd25QdHI8Q0NMYXllckltcGw+IFRyZWVT
eW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShIYXNoTWFwPGludCwgQ0NMYXll
ckltcGwqPiAmbmV3TGF5ZXJzLCBDQ0xheWVySW1wbE1hcCYgb2xkTGF5ZXJzLCBMYXllckNocm9t
aXVtKiBsYXllcikKIHsKICAgICBpZiAoIWxheWVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2NMYXllckltcGwgPSByZXVzZU9yQ3JlYXRlQ0NM
YXllckltcGwobWFwLCBsYXllcik7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVySW1w
bCA9IHJldXNlT3JDcmVhdGVDQ0xheWVySW1wbChuZXdMYXllcnMsIG9sZExheWVycywgbGF5ZXIp
OwogCiAgICAgY2NMYXllckltcGwtPmNsZWFyQ2hpbGRMaXN0KCk7CiAgICAgY29uc3QgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBjaGlsZHJlbiA9IGxheWVyLT5jaGlsZHJlbigpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyArK2kpCi0gICAgICAg
IGNjTGF5ZXJJbXBsLT5hZGRDaGlsZChzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUobWFwLCBjaGls
ZHJlbltpXS5nZXQoKSkpOworICAgICAgICBjY0xheWVySW1wbC0+YWRkQ2hpbGQoc3luY2hyb25p
emVUcmVlUmVjdXJzaXZlKG5ld0xheWVycywgb2xkTGF5ZXJzLCBjaGlsZHJlbltpXS5nZXQoKSkp
OwogCi0gICAgY2NMYXllckltcGwtPnNldE1hc2tMYXllcihzeW5jaHJvbml6ZVRyZWVSZWN1cnNp
dmUobWFwLCBsYXllci0+bWFza0xheWVyKCkpKTsKLSAgICBjY0xheWVySW1wbC0+c2V0UmVwbGlj
YUxheWVyKHN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShtYXAsIGxheWVyLT5yZXBsaWNhTGF5ZXIo
KSkpOworICAgIGNjTGF5ZXJJbXBsLT5zZXRNYXNrTGF5ZXIoc3luY2hyb25pemVUcmVlUmVjdXJz
aXZlKG5ld0xheWVycywgb2xkTGF5ZXJzLCBsYXllci0+bWFza0xheWVyKCkpKTsKKyAgICBjY0xh
eWVySW1wbC0+c2V0UmVwbGljYUxheWVyKHN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShuZXdMYXll
cnMsIG9sZExheWVycywgbGF5ZXItPnJlcGxpY2FMYXllcigpKSk7CiAKICAgICBsYXllci0+cHVz
aFByb3BlcnRpZXNUbyhjY0xheWVySW1wbC5nZXQoKSk7CiAgICAgcmV0dXJuIGNjTGF5ZXJJbXBs
LnJlbGVhc2UoKTsKIH0KIAordm9pZCBUcmVlU3luY2hyb25pemVyOjpyZXNvbHZlSW50ZXJMYXll
clBvaW50ZXJzUmVjdXJzaXZlKGNvbnN0IEhhc2hNYXA8aW50LCBDQ0xheWVySW1wbCo+ICZuZXdM
YXllcnMsIExheWVyQ2hyb21pdW0qIGxheWVyKQoreworICAgIENDTGF5ZXJJbXBsKiBjY0xheWVy
SW1wbCA9IG5ld0xheWVycy5nZXQobGF5ZXItPmlkKCkpOworICAgIEFTU0VSVChjY0xheWVySW1w
bCk7CisKKyAgICBpZiAobGF5ZXItPm1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKSB7CisgICAg
ICAgIENDU2Nyb2xsYmFyTGF5ZXJJbXBsKiBzY3JvbGxiYXJMYXllciA9IHN0YXRpY19jYXN0PEND
U2Nyb2xsYmFyTGF5ZXJJbXBsKj4obmV3TGF5ZXJzLmdldChsYXllci0+bV9ob3Jpem9udGFsU2Ny
b2xsYmFyTGF5ZXItPmlkKCkpKTsKKyAgICAgICAgY2NMYXllckltcGwtPm1faG9yaXpvbnRhbFNj
cm9sbGJhciA9IHNjcm9sbGJhckxheWVyLT5zY3JvbGxiYXIoKTsKKyAgICAgICAgY2NMYXllcklt
cGwtPm1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0Q3VycmVudFBvcyhjY0xheWVySW1wbC0+c2Ny
b2xsUG9zaXRpb24oKS54KCkgKyBjY0xheWVySW1wbC0+c2Nyb2xsRGVsdGEoKS53aWR0aCgpKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgY2NMYXllckltcGwtPm1faG9yaXpvbnRhbFNjcm9sbGJhciA9
IDA7CisKKyAgICBpZiAobGF5ZXItPm1fdmVydGljYWxTY3JvbGxiYXJMYXllcikgeworICAgICAg
ICBDQ1Njcm9sbGJhckxheWVySW1wbCogc2Nyb2xsYmFyTGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ1Nj
cm9sbGJhckxheWVySW1wbCo+KG5ld0xheWVycy5nZXQobGF5ZXItPm1fdmVydGljYWxTY3JvbGxi
YXJMYXllci0+aWQoKSkpOworICAgICAgICBjY0xheWVySW1wbC0+bV92ZXJ0aWNhbFNjcm9sbGJh
ciA9IHNjcm9sbGJhckxheWVyLT5zY3JvbGxiYXIoKTsKKyAgICAgICAgY2NMYXllckltcGwtPm1f
dmVydGljYWxTY3JvbGxiYXItPnNldEN1cnJlbnRQb3MoY2NMYXllckltcGwtPnNjcm9sbFBvc2l0
aW9uKCkueSgpICsgY2NMYXllckltcGwtPnNjcm9sbERlbHRhKCkuaGVpZ2h0KCkpOworICAgIH0g
ZWxzZQorICAgICAgICBjY0xheWVySW1wbC0+bV92ZXJ0aWNhbFNjcm9sbGJhciA9IDA7CisKKwor
ICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgY2hpbGRyZW4gPSBsYXll
ci0+Y2hpbGRyZW4oKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUo
KTsgKytpKQorICAgICAgICByZXNvbHZlSW50ZXJMYXllclBvaW50ZXJzUmVjdXJzaXZlKG5ld0xh
eWVycywgY2hpbGRyZW5baV0uZ2V0KCkpOworfQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5
bmNocm9uaXplci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VHJlZVN5bmNocm9uaXplci5oCmluZGV4IDEzNDcwOGNhNDNiZDg5ZWNiZGYyZmQyMTU5MmZkMDcy
ODZkY2MxNzkuLjUxN2JkMGQ5ZjdlMDFhZDA1N2M1YzQ3YWEyYjk0M2RmMmQxZTEzYTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5j
aHJvbml6ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UcmVlU3luY2hyb25pemVyLmgKQEAgLTQ5LDkgKzQ5LDEwIEBAIHByaXZhdGU6CiAgICAgdHlw
ZWRlZiBIYXNoTWFwPGludCwgT3duUHRyPENDTGF5ZXJJbXBsPiA+IENDTGF5ZXJJbXBsTWFwOwog
CiAgICAgLy8gRGVjbGFyZWQgYXMgc3RhdGljIG1lbWJlciBmdW5jdGlvbnMgc28gdGhleSBjYW4g
YWNjZXNzIGZ1bmN0aW9ucyBvbiBMYXllckNocm9taXVtIGFzIGEgZnJpZW5kIGNsYXNzLgotICAg
IHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiByZXVzZU9yQ3JlYXRlQ0NMYXllckltcGwo
Q0NMYXllckltcGxNYXAmLCBMYXllckNocm9taXVtKik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8
Q0NMYXllckltcGw+IHJldXNlT3JDcmVhdGVDQ0xheWVySW1wbChIYXNoTWFwPGludCwgQ0NMYXll
ckltcGwqPiAmbmV3TGF5ZXJzLCBDQ0xheWVySW1wbE1hcCYsIExheWVyQ2hyb21pdW0qKTsKICAg
ICBzdGF0aWMgdm9pZCBjb2xsZWN0RXhpc3RpbmdDQ0xheWVySW1wbFJlY3Vyc2l2ZShDQ0xheWVy
SW1wbE1hcCYsIFBhc3NPd25QdHI8Q0NMYXllckltcGw+KTsKLSAgICBzdGF0aWMgUGFzc093blB0
cjxDQ0xheWVySW1wbD4gc3luY2hyb25pemVUcmVlUmVjdXJzaXZlKENDTGF5ZXJJbXBsTWFwJiwg
TGF5ZXJDaHJvbWl1bSopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBzeW5j
aHJvbml6ZVRyZWVSZWN1cnNpdmUoSGFzaE1hcDxpbnQsIENDTGF5ZXJJbXBsKj4gJm5ld0xheWVy
cywgQ0NMYXllckltcGxNYXAmLCBMYXllckNocm9taXVtKik7CisgICAgc3RhdGljIHZvaWQgcmVz
b2x2ZUludGVyTGF5ZXJQb2ludGVyc1JlY3Vyc2l2ZShjb25zdCBIYXNoTWFwPGludCwgQ0NMYXll
ckltcGwqPiAmbmV3TGF5ZXJzLCBMYXllckNocm9taXVtKik7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggMDBjNjAzMzBkZjExOGU4YmEz
YmI5YTlmMDI0MjQzYjM0Mzk4MGQxZi4uNGI0OWExZWRlNGVjZTc5ZTU2MThlZjIwZGMyZjE2YjQ1
ZDJkNjIwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2lu
Y2x1ZGUgImNjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIK
KyNpbmNsdWRlICJjYy9DQ1Njcm9sbGJhci5oIgogI2luY2x1ZGUgImNjL0NDU29saWRDb2xvckRy
YXdRdWFkLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTYxLDYgKzYy
LDggQEAgQ0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKGludCBpZCkKICAgICAsIG1faXNOb25Db21w
b3NpdGVkQ29udGVudChmYWxzZSkKICAgICAsIG1fZHJhd3NDb250ZW50KGZhbHNlKQogICAgICwg
bV9wYWdlU2NhbGVEZWx0YSgxKQorICAgICwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyKDApCisgICAg
LCBtX3ZlcnRpY2FsU2Nyb2xsYmFyKDApCiAgICAgLCBtX3RhcmdldFJlbmRlclN1cmZhY2UoMCkK
ICAgICAsIG1fZHJhd0RlcHRoKDApCiAgICAgLCBtX2RyYXdPcGFjaXR5KDApCkBAIC0xOTEsNiAr
MTk0LDEyIEBAIHZvaWQgQ0NMYXllckltcGw6OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHNjcm9s
bCkKICAgICBJbnRTaXplIG1heERlbHRhID0gbV9tYXhTY3JvbGxQb3NpdGlvbiAtIHRvU2l6ZSht
X3Njcm9sbFBvc2l0aW9uKTsKICAgICAvLyBDbGFtcCBuZXdEZWx0YSBzbyB0aGF0IHBvc2l0aW9u
ICsgZGVsdGEgc3RheXMgd2l0aGluIHNjcm9sbCBib3VuZHMuCiAgICAgbV9zY3JvbGxEZWx0YSA9
IG5ld0RlbHRhLmV4cGFuZGVkVG8obWluRGVsdGEpLnNocnVua1RvKG1heERlbHRhKTsKKworICAg
IGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJh
ci0+c2V0Q3VycmVudFBvcyhtX3Njcm9sbFBvc2l0aW9uLngoKSArIG1fc2Nyb2xsRGVsdGEud2lk
dGgoKSk7CisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIG1fdmVydGljYWxT
Y3JvbGxiYXItPnNldEN1cnJlbnRQb3MobV9zY3JvbGxQb3NpdGlvbi55KCkgKyBtX3Njcm9sbERl
bHRhLmhlaWdodCgpKTsKKwogICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZEZvclN1YnRyZWUo
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggZDZmZDQ4YTE2MTZlOGY2ZmM3MTVhNGNl
NzA1YjkzNjI4NTU2MzVkMi4uNjEyYzI4ODBmMGM0NGVmZTYzYTJiOTIxNjViNjFjY2RmZTZjOTYx
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC00NCw2ICs0NCw3IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIENDTGF5ZXJTb3J0ZXI7CitjbGFzcyBDQ1Njcm9sbGJhcjsKIGNsYXNz
IExheWVyQ2hyb21pdW07CiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CiAKQEAgLTI4OCw2
ICsyODksOSBAQCBwcml2YXRlOgogICAgIEludFNpemUgbV9tYXhTY3JvbGxQb3NpdGlvbjsKICAg
ICBmbG9hdCBtX3BhZ2VTY2FsZURlbHRhOwogCisgICAgQ0NTY3JvbGxiYXIqIG1faG9yaXpvbnRh
bFNjcm9sbGJhcjsKKyAgICBDQ1Njcm9sbGJhciogbV92ZXJ0aWNhbFNjcm9sbGJhcjsKKwogICAg
IC8vIFByb3BlcnRpZXMgb3duZWQgZXhjbHVzaXZlbHkgYnkgdGhpcyBDQ0xheWVySW1wbC4KICAg
ICAvLyBEZWJ1Z2dpbmcuCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjRlY2RhZmRkMzM2NDE4ODU3ZWMyOWU0M2ZmNzBiYjA1ZTU2OGFjYmIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1Njcm9sbGJhci5jcHAKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJD
Q1Njcm9sbGJhci5oIgorCisjaW5jbHVkZSAiQ0NTY3JvbGxiYXJMYXllckltcGwuaCIKKyNpbmNs
dWRlICJTY3JvbGxUeXBlcy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2ludCBDQ1Njcm9sbGJhcjo6eCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVS
ZWN0LngoKTsgfQoraW50IENDU2Nyb2xsYmFyOjp5KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJl
Y3QueSgpOyB9CitpbnQgQ0NTY3JvbGxiYXI6OndpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9mcmFt
ZVJlY3Qud2lkdGgoKTsgfQoraW50IENDU2Nyb2xsYmFyOjpoZWlnaHQoKSBjb25zdCB7IHJldHVy
biBtX2ZyYW1lUmVjdC5oZWlnaHQoKTsgfQorSW50U2l6ZSBDQ1Njcm9sbGJhcjo6c2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LnNpemUoKTsgfQorSW50UG9pbnQgQ0NTY3JvbGxiYXI6
OmxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3QubG9jYXRpb24oKTsgfQorCitT
Y3JvbGxWaWV3KiBDQ1Njcm9sbGJhcjo6cGFyZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KK1Njcm9sbFZpZXcqIENDU2Nyb2xsYmFyOjpy
b290KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsK
K30KKwordm9pZCBDQ1Njcm9sbGJhcjo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIGZyYW1l
UmVjdCkgeyBtX2ZyYW1lUmVjdCA9IGZyYW1lUmVjdDsgfQorSW50UmVjdCBDQ1Njcm9sbGJhcjo6
ZnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3Q7IH0KKwordm9pZCBDQ1Njcm9s
bGJhcjo6aW52YWxpZGF0ZSgpIHsgaW52YWxpZGF0ZVJlY3QoZnJhbWVSZWN0KCkpOyB9Cit2b2lk
IENDU2Nyb2xsYmFyOjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JikgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQorCitTY3JvbGxiYXJPdmVybGF5U3R5bGUgQ0NTY3JvbGxiYXI6OnNjcm9s
bGJhck92ZXJsYXlTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmxheVN0eWxlOyB9Cit2b2lk
IENDU2Nyb2xsYmFyOjpnZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+JiB0aWNrbWFya3MpIGNv
bnN0IHsgdGlja21hcmtzID0gbV90aWNrbWFya3M7IH0KK2Jvb2wgQ0NTY3JvbGxiYXI6OmlzU2Ny
b2xsYWJsZUFyZWFBY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX2lzU2Nyb2xsYWJsZUFyZWFBY3Rp
dmU7IH0KK2Jvb2wgQ0NTY3JvbGxiYXI6OmlzU2Nyb2xsVmlld1Njcm9sbGJhcigpIGNvbnN0IHsg
cmV0dXJuIG1faXNTY3JvbGxWaWV3U2Nyb2xsYmFyOyB9CisKK0ludFBvaW50IENDU2Nyb2xsYmFy
Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50
KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB3aW5kb3dQb2ludDsK
K30KKworYm9vbCBDQ1Njcm9sbGJhcjo6aXNDdXN0b21TY3JvbGxiYXIoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorU2Nyb2xsYmFyT3JpZW50YXRpb24gQ0NTY3JvbGxiYXI6Om9yaWVudGF0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9vcmllbnRhdGlvbjsgfQorCitpbnQgQ0NTY3JvbGxiYXI6OnZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50UG9zOyB9CitmbG9hdCBDQ1Njcm9sbGJhcjo6
Y3VycmVudFBvcygpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFBvczsgfQoraW50IENDU2Nyb2xs
YmFyOjp2aXNpYmxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaWJsZVNpemU7IH0KK2ludCBD
Q1Njcm9sbGJhcjo6dG90YWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV90b3RhbFNpemU7IH0KK2lu
dCBDQ1Njcm9sbGJhcjo6bWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxTaXplIC0gbV92
aXNpYmxlU2l6ZTsgfQorU2Nyb2xsYmFyQ29udHJvbFNpemUgQ0NTY3JvbGxiYXI6OmNvbnRyb2xT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9jb250cm9sU2l6ZTsgfQorCitpbnQgQ0NTY3JvbGxiYXI6
OmxpbmVTdGVwKCkgY29uc3QgeyByZXR1cm4gbV9saW5lU3RlcDsgfQoraW50IENDU2Nyb2xsYmFy
OjpwYWdlU3RlcCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZVN0ZXA7IH0KKworU2Nyb2xsYmFyUGFy
dCBDQ1Njcm9sbGJhcjo6cHJlc3NlZFBhcnQoKSBjb25zdCB7IHJldHVybiBtX3ByZXNzZWRQYXJ0
OyB9CitTY3JvbGxiYXJQYXJ0IENDU2Nyb2xsYmFyOjpob3ZlcmVkUGFydCgpIGNvbnN0IHsgcmV0
dXJuIG1faG92ZXJlZFBhcnQ7IH0KKwordm9pZCBDQ1Njcm9sbGJhcjo6c3R5bGVDaGFuZ2VkKCkg
eyB9CisKK2Jvb2wgQ0NTY3JvbGxiYXI6OmVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2VuYWJs
ZWQ7IH0KK3ZvaWQgQ0NTY3JvbGxiYXI6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIG1fZW5hYmxlZCA9IGVuYWJsZWQ7Cit9CisKKwor
dm9pZCBDQ1Njcm9sbGJhcjo6c2V0Q3VycmVudFBvcyhmbG9hdCBjdXJyZW50UG9zKQoreworICAg
IG1fY3VycmVudFBvcyA9IGN1cnJlbnRQb3M7Cit9CisKK0NDU2Nyb2xsYmFyOjpDQ1Njcm9sbGJh
cigpCit7Cit9CisKK3ZvaWQgQ0NTY3JvbGxiYXI6OnB1bGxQcm9wZXJ0aWVzRnJvbShTY3JvbGxi
YXIqIHNjcm9sbGJhcikKK3sKKyAgICBtX2ZyYW1lUmVjdCA9IHNjcm9sbGJhci0+ZnJhbWVSZWN0
KCk7CisKKyAgICBtX292ZXJsYXlTdHlsZSA9IHNjcm9sbGJhci0+c2Nyb2xsYmFyT3ZlcmxheVN0
eWxlKCk7CisgICAgc2Nyb2xsYmFyLT5nZXRUaWNrbWFya3MobV90aWNrbWFya3MpOworICAgIG1f
aXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSA9IHNjcm9sbGJhci0+aXNTY3JvbGxhYmxlQXJlYUFjdGl2
ZSgpOworICAgIG1faXNTY3JvbGxWaWV3U2Nyb2xsYmFyID0gc2Nyb2xsYmFyLT5pc1Njcm9sbFZp
ZXdTY3JvbGxiYXIoKTsKKworICAgIG1fb3JpZW50YXRpb24gPSBzY3JvbGxiYXItPm9yaWVudGF0
aW9uKCk7CisgICAgCisgICAgbV9jdXJyZW50UG9zID0gc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCk7
CisgICAgbV92aXNpYmxlU2l6ZSA9IHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKTsKKyAgICBtX3Rv
dGFsU2l6ZSA9IHNjcm9sbGJhci0+dG90YWxTaXplKCk7CisgICAgbV9jb250cm9sU2l6ZSA9IHNj
cm9sbGJhci0+Y29udHJvbFNpemUoKTsKKworICAgIG1fbGluZVN0ZXAgPSBzY3JvbGxiYXItPmxp
bmVTdGVwKCk7CisgICAgbV9wYWdlU3RlcCA9IHNjcm9sbGJhci0+cGFnZVN0ZXAoKTsKKworICAg
IG1fcHJlc3NlZFBhcnQgPSBzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCk7CisgICAgbV9ob3ZlcmVk
UGFydCA9IHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKTsKKworICAgIG1fZW5hYmxlZCA9IHNjcm9s
bGJhci0+ZW5hYmxlZCgpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZDU1YzZkNmU5NTQ1NzAwZDliYmMwZjU4NzFiMGFlYWZhYmNkZTU2MgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2Nyb2xsYmFyLmgKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDU2Nyb2xs
YmFyX2gKKyNkZWZpbmUgQ0NTY3JvbGxiYXJfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVDbGllbnQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBDQ0xheWVySW1wbDsKK2NsYXNzIENDU2Nyb2xsYmFyTGF5ZXJJ
bXBsOworY2xhc3MgU2Nyb2xsYmFyOworCitjbGFzcyBDQ1Njcm9sbGJhciA6IHB1YmxpYyBTY3Jv
bGxiYXJUaGVtZUNsaWVudCB7CitwdWJsaWM6CisgICAgLy8gU2Nyb2xsYmFyVGhlbWVDbGllbnQg
aW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIGludCB4KCkgY29uc3Q7CisgICAgdmlydHVhbCBp
bnQgeSgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHdpZHRoKCkgY29uc3Q7CisgICAgdmlydHVh
bCBpbnQgaGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIEludFBvaW50IGxvY2F0aW9uKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIFNj
cm9sbFZpZXcqIHBhcmVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgU2Nyb2xsVmlldyogcm9vdCgp
IGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCBJbnRSZWN0IGZyYW1lUmVjdCgpIGNvbnN0OworCisgICAgdmlydHVhbCB2
b2lkIGludmFsaWRhdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3Qg
SW50UmVjdCYpOworCisgICAgdmlydHVhbCBTY3JvbGxiYXJPdmVybGF5U3R5bGUgc2Nyb2xsYmFy
T3ZlcmxheVN0eWxlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGdldFRpY2ttYXJrcyhWZWN0
b3I8SW50UmVjdD4mKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxhYmxlQXJlYUFj
dGl2ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbFZpZXdTY3JvbGxiYXIoKSBj
b25zdDsKKworICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nV2luZG93
KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDdXN0
b21TY3JvbGxiYXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9y
aWVudGF0aW9uKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGludCB2YWx1ZSgpIGNvbnN0OworICAg
IHZpcnR1YWwgZmxvYXQgY3VycmVudFBvcygpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHZpc2li
bGVTaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgdG90YWxTaXplKCkgY29uc3Q7CisgICAg
dmlydHVhbCBpbnQgbWF4aW11bSgpIGNvbnN0OworICAgIHZpcnR1YWwgU2Nyb2xsYmFyQ29udHJv
bFNpemUgY29udHJvbFNpemUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgaW50IGxpbmVTdGVwKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBpbnQgcGFnZVN0ZXAoKSBjb25zdDsKKworICAgIHZpcnR1YWwg
U2Nyb2xsYmFyUGFydCBwcmVzc2VkUGFydCgpIGNvbnN0OworICAgIHZpcnR1YWwgU2Nyb2xsYmFy
UGFydCBob3ZlcmVkUGFydCgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIHN0eWxlQ2hhbmdl
ZCgpOworCisgICAgdmlydHVhbCBib29sIGVuYWJsZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0RW5hYmxlZChib29sKTsKKworCisgICAgdm9pZCBzZXRDdXJyZW50UG9zKGZsb2F0KTsK
KworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTsKKyAg
ICBmcmllbmQgY2xhc3MgQ0NTY3JvbGxiYXJMYXllckltcGw7CisKKyAgICBDQ1Njcm9sbGJhcigp
OworICAgIHZvaWQgcHVsbFByb3BlcnRpZXNGcm9tKFNjcm9sbGJhciopOworCisgICAgSW50UmVj
dCBtX2ZyYW1lUmVjdDsKKworICAgIFNjcm9sbGJhck92ZXJsYXlTdHlsZSBtX292ZXJsYXlTdHls
ZTsKKyAgICBWZWN0b3I8SW50UmVjdD4gbV90aWNrbWFya3M7CisgICAgYm9vbCBtX2lzU2Nyb2xs
YWJsZUFyZWFBY3RpdmU7CisgICAgYm9vbCBtX2lzU2Nyb2xsVmlld1Njcm9sbGJhcjsKKworICAg
IFNjcm9sbGJhck9yaWVudGF0aW9uIG1fb3JpZW50YXRpb247CisKKyAgICBmbG9hdCBtX2N1cnJl
bnRQb3M7CisgICAgaW50IG1fdmlzaWJsZVNpemU7CisgICAgaW50IG1fdG90YWxTaXplOworICAg
IFNjcm9sbGJhckNvbnRyb2xTaXplIG1fY29udHJvbFNpemU7CisKKyAgICBpbnQgbV9saW5lU3Rl
cDsKKyAgICBpbnQgbV9wYWdlU3RlcDsKKworICAgIFNjcm9sbGJhclBhcnQgbV9wcmVzc2VkUGFy
dDsKKyAgICBTY3JvbGxiYXJQYXJ0IG1faG92ZXJlZFBhcnQ7CisKKyAgICBib29sIG1fZW5hYmxl
ZDsKK307CisKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjA3MDIzMjYwOThkYjNkMDE2ZmE4YWQ1ODQxMGM2YzEyMDBiZDJhNWEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9s
bGJhckxheWVySW1wbC5jcHAKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJD
Q1Njcm9sbGJhckxheWVySW1wbC5oIgorCisjaW5jbHVkZSAiQ0NTY3JvbGxiYXIuaCIKKyNpbmNs
dWRlICJDQ1RpbGVEcmF3UXVhZC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5o
IgorI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUu
aCIKKworI2lmIFVTRShTS0lBKQorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNp
bmNsdWRlICJTa0dwdURldmljZS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UGFzc093blB0cjxDQ1Njcm9sbGJhckxheWVySW1wbD4gQ0NTY3JvbGxiYXJMYXllckltcGw6OmNy
ZWF0ZShpbnQgaWQpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1Njcm9sbGJhckxheWVy
SW1wbChpZCkpOworfQorCitDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXJMYXllcklt
cGwoaW50IGlkKQorICAgIDogQ0NMYXllckltcGwoaWQpCit7Cit9CisKK3ZvaWQgQ0NTY3JvbGxi
YXJMYXllckltcGw6OndpbGxEcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJl
cikKK3sKKyAgICBpZiAoYm91bmRzKCkuaXNFbXB0eSgpIHx8IGNvbnRlbnRCb3VuZHMoKS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV90ZXh0dXJlKQorICAgICAgICBt
X3RleHR1cmUgPSBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKGxheWVyUmVuZGVyZXItPnJlbmRlclN1
cmZhY2VUZXh0dXJlTWFuYWdlcigpKTsKKworICAgIEludFNpemUgdGV4dHVyZVNpemUgPSBjb250
ZW50Qm91bmRzKCk7CisgICAgaWYgKCFtX3RleHR1cmUtPnJlc2VydmUodGV4dHVyZVNpemUsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fdGV4dHVyZS0+
YWxsb2NhdGUobGF5ZXJSZW5kZXJlci0+cmVuZGVyU3VyZmFjZVRleHR1cmVBbGxvY2F0b3IoKSk7
CisKKyNpZiBVU0UoU0tJQSkKKyAgICBHclBsYXRmb3JtVGV4dHVyZURlc2MgdGV4dHVyZURlc2M7
CisgICAgdGV4dHVyZURlc2MuZkZsYWdzID0ga1JlbmRlclRhcmdldF9HclBsYXRmb3JtVGV4dHVy
ZUZsYWc7CisgICAgdGV4dHVyZURlc2MuZldpZHRoID0gdGV4dHVyZVNpemUud2lkdGgoKTsKKyAg
ICB0ZXh0dXJlRGVzYy5mSGVpZ2h0ID0gdGV4dHVyZVNpemUuaGVpZ2h0KCk7CisgICAgdGV4dHVy
ZURlc2MuZkNvbmZpZyA9IGtSR0JBXzg4ODhfUE1fR3JQaXhlbENvbmZpZzsKKyAgICB0ZXh0dXJl
RGVzYy5mU2FtcGxlQ250ID0gMDsKKyAgICB0ZXh0dXJlRGVzYy5mVGV4dHVyZUhhbmRsZSA9IG1f
dGV4dHVyZS0+dGV4dHVyZUlkKCk7CisKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9
IGxheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKKyAgICBHckNvbnRleHQqIGdyQ29udGV4dCA9IGNv
bnRleHQtPmdyQ29udGV4dCgpOworICAgIFNrQXV0b1RVbnJlZjxHclRleHR1cmU+IHRhcmdldChn
ckNvbnRleHQtPmNyZWF0ZVBsYXRmb3JtVGV4dHVyZSh0ZXh0dXJlRGVzYykpOworICAgIFNrQXV0
b1RVbnJlZjxTa0RldmljZT4gZGV2aWNlKG5ldyBTa0dwdURldmljZShnckNvbnRleHQsIHRhcmdl
dC5nZXQoKSkpOworICAgIFNrQXV0b1RVbnJlZjxTa0NhbnZhcz4gY2FudmFzKG5ldyBTa0NhbnZh
cyhkZXZpY2UuZ2V0KCkpKTsKKworICAgIGNhbnZhcy5nZXQoKS0+dHJhbnNsYXRlKDAsIHRleHR1
cmVTaXplLmhlaWdodCgpKTsKKyAgICBjYW52YXMuZ2V0KCktPnNjYWxlKDEsIC0xKTsKKworICAg
IFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1Db250ZXh0KGNhbnZhcy5nZXQoKSk7CisgICAg
R3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKKworICAg
IGdyQ29udGV4dC0+cmVzZXRDb250ZXh0KCk7CisgICAgcGFpbnQoJmdyYXBoaWNzQ29udGV4dCk7
CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKK3ZvaWQgQ0NT
Y3JvbGxiYXJMYXllckltcGw6OmFwcGVuZFF1YWRzKENDUXVhZExpc3QmIHF1YWRMaXN0LCBjb25z
dCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlKQoreworICAgIGlmICghbV90ZXh0
dXJlLT5pc1Jlc2VydmVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEludFJlY3QgcXVhZFJl
Y3QoSW50UG9pbnQoKSwgYm91bmRzKCkpOworICAgIHF1YWRMaXN0LmFwcGVuZChDQ1RpbGVEcmF3
UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHF1YWRSZWN0LCBtX3RleHR1
cmUtPnRleHR1cmVJZCgpLCBJbnRQb2ludCgpLCBtX3RleHR1cmUtPnNpemUoKSwgR3JhcGhpY3ND
b250ZXh0M0Q6OkxJTkVBUiwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIHRydWUpKTsKK30KKwor
dm9pZCBDQ1Njcm9sbGJhckxheWVySW1wbDo6ZGlkRHJhdygpCit7CisgICAgbV90ZXh0dXJlLT51
bnJlc2VydmUoKTsKK30KKwordm9pZCBDQ1Njcm9sbGJhckxheWVySW1wbDo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIFNjcm9sbGJhclRoZW1lKiB0aGVtZSA9IFNjcm9s
bGJhclRoZW1lOjp0aGVtZSgpOyAvLyBGSVhNRQorCisgICAgaWYgKHRoZW1lLT51c2VzT3Zlcmxh
eVNjcm9sbGJhcnMoKSkKKyAgICAgICAgY29udGV4dC0+Y2xlYXJSZWN0KEludFJlY3QoSW50UG9p
bnQoKSwgY29udGVudEJvdW5kcygpKSk7CisgICAgdGhlbWUtPnBhaW50KCZtX3Njcm9sbGJhciwg
Y29udGV4dCwgSW50UmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91bmRzKCkpKTsKK30KKworfQor
I2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJ
bXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Nj
cm9sbGJhckxheWVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdjMWE5NzYyMGFlMTAxNjIzZGQxZjgyYmM2
NTE0YjQ5ZmJiY2Q4M2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5oCkBAIC0wLDAgKzEs
NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIENDU2Nyb2xsYmFyTGF5ZXJJbXBsX2gKKyNkZWZpbmUgQ0NT
Y3JvbGxiYXJMYXllckltcGxfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
CisjaW5jbHVkZSAiQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJDQ1Njcm9sbGJhci5oIgorI2lu
Y2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
R3JhcGhpY3NDb250ZXh0OworCitjbGFzcyBDQ1Njcm9sbGJhckxheWVySW1wbCA6IHB1YmxpYyBD
Q0xheWVySW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NTY3JvbGxiYXJM
YXllckltcGw+IGNyZWF0ZShpbnQgaWQpOworCisgICAgdmlydHVhbCB2b2lkIHdpbGxEcmF3KExh
eWVyUmVuZGVyZXJDaHJvbWl1bSopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRRdWFkcyhDQ1F1
YWRMaXN0JiwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
RHJhdygpOworCisgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqKTsKKworICAgIENDU2Ny
b2xsYmFyKiBzY3JvbGxiYXIoKSB7IHJldHVybiAmbV9zY3JvbGxiYXI7IH0KKworcHJvdGVjdGVk
OgorICAgIENDU2Nyb2xsYmFyTGF5ZXJJbXBsKGludCBpZCk7CisKK3ByaXZhdGU6CisgICAgQ0NT
Y3JvbGxiYXIgbV9zY3JvbGxiYXI7CisKKyAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IG1fdGV4
dHVyZTsKK307CisKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisK
KyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129800</attachid>
            <date>2012-03-01 20:24:30 -0800</date>
            <delta_ts>2012-03-05 15:27:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78872-20120301202429.patch</filename>
            <type>text/plain</type>
            <size>39264</size>
            <attacher name="Tien-Ren Chen">trchen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5NDkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWVhMDVhNWVjNDcxNmZm
OGNjNmFkN2YzNThkMzk5ZGRlMGI3Y2EzOC4uMTIxNzkzYTBkNzYzYWJiYjNkNThlZjk4OGNiZmE0
NDBiYmFmMTRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMCBAQAorMjAxMi0wMy0wMSAgVGll
bi1SZW4gQ2hlbiAgPHRyY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBT
Y3JvbGxiYXJMYXllckNocm9taXVtL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsIGZvciBDQy1zaWRlIHNj
cm9sbGJhciBwYWludGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Nzg4NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToK
KyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFt
ZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJE
aWRDaGFuZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNz
TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVt
OjpoYXNDb250ZW50c0xheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnRvU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChMYXll
ckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3JvbGxi
YXJMYXllckNocm9taXVtLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGJhckxheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckxheWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJMYXllckNocm9taXVtOjpTY3JvbGxiYXJMYXllckNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0
aWVzVG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxh
eWVyQ2hyb21pdW0uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNjcm9s
bGJhckxheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyTGF5ZXJDaHJv
bWl1bTo6c2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyTGF5ZXJDaHJv
bWl1bTo6dG9TY3JvbGxiYXJMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRy
ZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMpOgorICAgICAgICAoV2ViQ29yZTo6VHJl
ZVN5bmNocm9uaXplcjo6Y29sbGVjdEV4aXN0aW5nQ0NMYXllckltcGxSZWN1cnNpdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6VHJlZVN5bmNocm9uaXplcjo6cmV1c2VPckNyZWF0ZUNDTGF5ZXJJbXBs
KToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZVJl
Y3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU3luY2hyb25pemVyOjp1cGRhdGVTY3Jv
bGxiYXJMYXllclBvaW50ZXJzUmVjdXJzaXZlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuaDoKKyAgICAg
ICAgKFRyZWVTeW5jaHJvbml6ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpz
Y3JvbGxCeSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3Jv
bGxiYXJMYXllckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXJMYXllckltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OndpbGxEcmF3KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1Njcm9sbGJhckxheWVySW1wbDo6ZGlkRHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Nj
cm9sbGJhckxheWVySW1wbDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJM
YXllckltcGw6OkNDU2Nyb2xsYmFyOjp4KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFy
TGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJh
ckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Ny
b2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6aGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6c2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OmxvY2F0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6cGFyZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6cm9v
dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6
OnNldEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6
Q0NTY3JvbGxiYXI6OmZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxh
eWVySW1wbDo6Q0NTY3JvbGxiYXI6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NT
Y3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjppbnZhbGlkYXRlUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OnNjcm9sbGJhck92
ZXJsYXlTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NT
Y3JvbGxiYXI6OmdldFRpY2ttYXJrcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxh
eWVySW1wbDo6Q0NTY3JvbGxiYXI6OmlzU2Nyb2xsYWJsZUFyZWFBY3RpdmUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjppc1Njcm9sbFZpZXdT
Y3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Ny
b2xsYmFyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjppc0N1c3RvbVNjcm9sbGJhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6Om9yaWVu
dGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9s
bGJhcjo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OkND
U2Nyb2xsYmFyOjpjdXJyZW50UG9zKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5
ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6dmlzaWJsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NT
Y3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjp0b3RhbFNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjptYXhpbXVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6Y29udHJvbFNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFy
OjpsaW5lU3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NT
Y3JvbGxiYXI6OnBhZ2VTdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJ
bXBsOjpDQ1Njcm9sbGJhcjo6cHJlc3NlZFBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3Jv
bGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpob3ZlcmVkUGFydCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OnN0eWxlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OmVuYWJs
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFy
OjpzZXRFbmFibGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1Njcm9sbGJhckxheWVySW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoQ0NTY3JvbGxiYXJMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJM
YXllckltcGw6OnNldFNjcm9sbGJhck92ZXJsYXlTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1Njcm9sbGJhckxheWVySW1wbDo6c2V0VGlja21hcmtzKToKKyAgICAgICAgKFdlYkNvcmU6OkND
U2Nyb2xsYmFyTGF5ZXJJbXBsOjpzZXRJc1Njcm9sbGFibGVBcmVhQWN0aXZlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpzZXRJc1Njcm9sbFZpZXdTY3JvbGxiYXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OnNldE9yaWVudGF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpzZXRDb250cm9sU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6c2V0UHJlc3NlZFBh
cnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OnNldEhvdmVyZWRQ
YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpzZXRFbmFibGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpzZXRTY3JvbGxMYXll
cik6CisgICAgICAgIChDQ1Njcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJh
ckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OkNDU2Nyb2xsYmFyKToKKwogMjAxMi0wMy0wMSAgTHVr
ZSBNYWNwaGVyc29uICAgPG1hY3BoZXJzb25AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEhhbmRs
ZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckZpdCBpbiBDU1NTdHlsZUFwcGx5UHJvcGVydHkuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggOTk4OGVmZTc3ZmZjM2U1Y2E0NGIwN2JkMzVkNmM1OTllMDI1OWNj
MS4uODk2ZTQ3YzhjY2Q2ZGVmYjk3NTA3OGNhODQ0NjE3OGQ4ODdkZmNjYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtMzIzOCw2ICszMjM4LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtLmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVy
Q2hyb21pdW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9T
Y3JvbGxiYXJMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1NvbGlkQ29sb3JMYXllckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU29saWRDb2xvckxheWVyQ2hyb21pdW0uaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuY3BwJywK
QEAgLTMzNTMsNiArMzM1NSw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmUuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxlclN0YXRlTWFjaGluZS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRocmVhZFBy
b3h5LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Ny
b2xsYmFyTGF5ZXJJbXBsLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFBy
b3h5LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJv
bWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCmlu
ZGV4IGZmMDUzZGY2MjUyMjE5YzY2NGY2OTMxZGVjNzVhMzRlOGNmMDcyYzAuLjMxMzYwOGY1ZDRm
ZmY3Nzg4YjhhZDMxNTcwZmYxZGExNDkzYjIzMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nv
b3JkaW5hdG9yQ2hyb21pdW0uY3BwCkBAIC0yNyw4ICsyNywxNCBAQAogCiAjaW5jbHVkZSAiU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuaCIKIAorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlJlZ2lvbi5o
IgorI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJlbmRlclZp
ZXcuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiU2Ny
b2xsYmFyVGhlbWUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01OCwxNCArNjQsMzgg
QEAgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6On5TY3JvbGxpbmdDb29yZGluYXRvcigpCiAgICAgZGVs
ZXRlIG1fcHJpdmF0ZTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3
SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyosIEdyYXBoaWNzTGF5
ZXIqIGhvcml6b250YWxTY3JvbGxiYXJMYXllcikKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OmZyYW1lVmlld0hvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcqIGZy
YW1lVmlldywgR3JhcGhpY3NMYXllciogaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKQogewotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQhCisgICAgaWYgKCFob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIExheWVyQ2hyb21pdW0qIHNjcm9sbExheWVyID0gbV9w
cml2YXRlLT5zY3JvbGxMYXllcigpOworICAgIEFTU0VSVChzY3JvbGxMYXllcik7CisKKyAgICBT
Y3JvbGxiYXIqIHNjcm9sbGJhciA9IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOwor
ICAgIEFTU0VSVChzY3JvbGxiYXIpOworICAgIGlmIChzY3JvbGxiYXItPmlzQ3VzdG9tU2Nyb2xs
YmFyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxTY3JvbGxiYXJMYXllckNocm9t
aXVtPiBzY3JvbGxiYXJMYXllciA9IFNjcm9sbGJhckxheWVyQ2hyb21pdW06OmNyZWF0ZShzY3Jv
bGxiYXIsIHNjcm9sbExheWVyKTsKKyAgICBob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXItPnNldENv
bnRlbnRzVG9NZWRpYShzY3JvbGxiYXJMYXllci5nZXQoKSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OmZyYW1lVmlld1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJh
bWVWaWV3KiwgR3JhcGhpY3NMYXllciogdmVydGljYWxTY3JvbGxiYXJMYXllcikKK3ZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFu
Z2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIEdyYXBoaWNzTGF5ZXIqIHZlcnRpY2FsU2Nyb2xsYmFy
TGF5ZXIpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCEKKyAgICBpZiAoIXZlcnRpY2FsU2Ny
b2xsYmFyTGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIExheWVyQ2hyb21pdW0qIHNjcm9s
bExheWVyID0gbV9wcml2YXRlLT5zY3JvbGxMYXllcigpOworICAgIEFTU0VSVChzY3JvbGxMYXll
cik7CisKKyAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IGZyYW1lVmlldy0+dmVydGljYWxTY3Jv
bGxiYXIoKTsKKyAgICBBU1NFUlQoc2Nyb2xsYmFyKTsKKyAgICBpZiAoc2Nyb2xsYmFyLT5pc0N1
c3RvbVNjcm9sbGJhcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8U2Nyb2xsYmFy
TGF5ZXJDaHJvbWl1bT4gc2Nyb2xsYmFyTGF5ZXIgPSBTY3JvbGxiYXJMYXllckNocm9taXVtOjpj
cmVhdGUoc2Nyb2xsYmFyLCBzY3JvbGxMYXllcik7CisgICAgdmVydGljYWxTY3JvbGxiYXJMYXll
ci0+c2V0Q29udGVudHNUb01lZGlhKHNjcm9sbGJhckxheWVyLmdldCgpKTsKIH0KIAogdm9pZCBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xsTGF5ZXIoR3JhcGhpY3NMYXllciogc2Nyb2xs
TGF5ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGFkY2U4Yjk1NDQ4
MmY1M2U1NDllZWRkZDliZjZiMDlmZTQyM2U2NzUuLjRjY2E4MmE4ODdiZTI4NTk5YWYxNDc0MTdl
Y2FiYzc4NzE5NDlmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCkBAIC05
Nyw2ICs5Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdl
KEltYWdlKik7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxh
eWVyKik7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXll
ciopOworICAgIHZpcnR1YWwgYm9vbCBoYXNDb250ZW50c0xheWVyKCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZW50c0xheWVyOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0
IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0
aW9uKiwgY29uc3QgU3RyaW5nJiwgZG91YmxlIHRpbWVPZmZzZXQpOwogICAgIHZpcnR1YWwgdm9p
ZCBwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1l
T2Zmc2V0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCBhNTA4YzllNjgzMmY0MTcwYjAwY2U1MWI2
NTJjZGM4NDY5NjBmNmI4Li5kYzdkZDQ2N2I3NzZhNTMyMTg0OGM5N2MyYTU1NTgxZmM3ZDAwNDkz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC02MSw2ICs2MSw3IEBAIGNsYXNzIENDTGF5ZXJJbXBs
OwogY2xhc3MgQ0NMYXllclRyZWVIb3N0OwogY2xhc3MgQ0NUZXh0dXJlVXBkYXRlcjsKIGNsYXNz
IEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTsKIAogLy8g
QmFzZSBjbGFzcyBmb3IgY29tcG9zaXRlZCBsYXllcnMuIFNwZWNpYWwgbGF5ZXIgdHlwZXMgYXJl
IGRlcml2ZWQgZnJvbQogLy8gdGhpcyBjbGFzcy4KQEAgLTIzMiw2ICsyMzMsOCBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIHNldEFuaW1hdGlvbkV2ZW50KGNvbnN0IENDQW5pbWF0aW9uRXZlbnQmKTsK
IAorICAgIHZpcnR1YWwgU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bSogdG9TY3JvbGxiYXJMYXllckNo
cm9taXVtKCkgeyByZXR1cm4gMDsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIEND
TGF5ZXJJbXBsOwogICAgIGZyaWVuZCBjbGFzcyBMYXllclRpbGVyQ2hyb21pdW07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3JvbGxiYXJM
YXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIwYzY0ZWQwZTU5ZjVm
ZmM4MGYxYjljMTcyYWU2NjNiYjYzNWVjYTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmNw
cApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJTY3JvbGxiYXJM
YXllckNocm9taXVtLmgiCisKKyNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJjYy9D
Q1Njcm9sbGJhckxheWVySW1wbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25Q
dHI8Q0NMYXllckltcGw+IFNjcm9sbGJhckxheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBs
KCkKK3sKKyAgICByZXR1cm4gQ0NTY3JvbGxiYXJMYXllckltcGw6OmNyZWF0ZShpZCgpKTsKK30K
KworUGFzc1JlZlB0cjxTY3JvbGxiYXJMYXllckNocm9taXVtPiBTY3JvbGxiYXJMYXllckNocm9t
aXVtOjpjcmVhdGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIExheWVyQ2hyb21pdW0qIHNjcm9sbExh
eWVyKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bShz
Y3JvbGxiYXIsIHNjcm9sbExheWVyKSk7Cit9CisKK1Njcm9sbGJhckxheWVyQ2hyb21pdW06OlNj
cm9sbGJhckxheWVyQ2hyb21pdW0oU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIExheWVyQ2hyb21pdW0q
IHNjcm9sbExheWVyKQorICAgIDogbV9zY3JvbGxMYXllcihzY3JvbGxMYXllcikKKyAgICAsIG1f
c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKHNjcm9sbGJhci0+c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKCkp
CisgICAgLCBtX2lzU2Nyb2xsYWJsZUFyZWFBY3RpdmUoc2Nyb2xsYmFyLT5pc1Njcm9sbGFibGVB
cmVhQWN0aXZlKCkpCisgICAgLCBtX2lzU2Nyb2xsVmlld1Njcm9sbGJhcihzY3JvbGxiYXItPmlz
U2Nyb2xsVmlld1Njcm9sbGJhcigpKQorICAgICwgbV9vcmllbnRhdGlvbihzY3JvbGxiYXItPm9y
aWVudGF0aW9uKCkpCisgICAgLCBtX2NvbnRyb2xTaXplKHNjcm9sbGJhci0+Y29udHJvbFNpemUo
KSkKKyAgICAsIG1fcHJlc3NlZFBhcnQoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpKQorICAgICwg
bV9ob3ZlcmVkUGFydChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkpCisgICAgLCBtX2VuYWJsZWQo
c2Nyb2xsYmFyLT5lbmFibGVkKCkpCit7CisgICAgc2Nyb2xsYmFyLT5nZXRUaWNrbWFya3MobV90
aWNrbWFya3MpOworfQorCit2b2lkIFNjcm9sbGJhckxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0
aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQoreworICAgIExheWVyQ2hyb21pdW06OnB1c2hQcm9w
ZXJ0aWVzVG8obGF5ZXIpOworCisgICAgQ0NTY3JvbGxiYXJMYXllckltcGwqIHNjcm9sbGJhckxh
eWVyID0gc3RhdGljX2Nhc3Q8Q0NTY3JvbGxiYXJMYXllckltcGwqPihsYXllcik7CisKKyAgICBz
Y3JvbGxiYXJMYXllci0+c2V0U2Nyb2xsYmFyT3ZlcmxheVN0eWxlKG1fc2Nyb2xsYmFyT3Zlcmxh
eVN0eWxlKTsKKyAgICBzY3JvbGxiYXJMYXllci0+c2V0VGlja21hcmtzKG1fdGlja21hcmtzKTsK
KyAgICBzY3JvbGxiYXJMYXllci0+c2V0SXNTY3JvbGxhYmxlQXJlYUFjdGl2ZShtX2lzU2Nyb2xs
YWJsZUFyZWFBY3RpdmUpOworICAgIHNjcm9sbGJhckxheWVyLT5zZXRJc1Njcm9sbFZpZXdTY3Jv
bGxiYXIobV9pc1Njcm9sbFZpZXdTY3JvbGxiYXIpOworCisgICAgc2Nyb2xsYmFyTGF5ZXItPnNl
dE9yaWVudGF0aW9uKG1fb3JpZW50YXRpb24pOworCisgICAgc2Nyb2xsYmFyTGF5ZXItPnNldENv
bnRyb2xTaXplKG1fY29udHJvbFNpemUpOworCisgICAgc2Nyb2xsYmFyTGF5ZXItPnNldFByZXNz
ZWRQYXJ0KG1fcHJlc3NlZFBhcnQpOworICAgIHNjcm9sbGJhckxheWVyLT5zZXRIb3ZlcmVkUGFy
dChtX2hvdmVyZWRQYXJ0KTsKKworICAgIHNjcm9sbGJhckxheWVyLT5zZXRFbmFibGVkKG1fZW5h
YmxlZCk7Cit9CisKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3Jv
bGxiYXJMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjMwZWM5ZWUzZWQ0
YzRjM2RiMjE2ZTQzOTg5NzdiODYxZmFmOTIzZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0u
aApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgU2Nyb2xsYmFyTGF5
ZXJDaHJvbWl1bV9oCisjZGVmaW5lIFNjcm9sbGJhckxheWVyQ2hyb21pdW1faAorCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgor
I2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
U2Nyb2xsYmFyOworCitjbGFzcyBTY3JvbGxiYXJMYXllckNocm9taXVtIDogcHVibGljIExheWVy
Q2hyb21pdW0geworcHVibGljOgorICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVySW1wbD4g
Y3JlYXRlQ0NMYXllckltcGwoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTY3JvbGxiYXJMYXll
ckNocm9taXVtPiBjcmVhdGUoU2Nyb2xsYmFyKiwgTGF5ZXJDaHJvbWl1bSogc2Nyb2xsTGF5ZXIp
OworCisgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqKTsKKwor
ICAgIExheWVyQ2hyb21pdW0qIHNjcm9sbExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxM
YXllcjsgfQorICAgIHZpcnR1YWwgU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bSogdG9TY3JvbGxiYXJM
YXllckNocm9taXVtKCkgeyByZXR1cm4gdGhpczsgfQorCitwcm90ZWN0ZWQ6CisgICAgU2Nyb2xs
YmFyTGF5ZXJDaHJvbWl1bShTY3JvbGxiYXIqLCBMYXllckNocm9taXVtKiBzY3JvbGxMYXllcik7
CisKK3ByaXZhdGU6CisgICAgTGF5ZXJDaHJvbWl1bSogbV9zY3JvbGxMYXllcjsKKworICAgIFNj
cm9sbGJhck92ZXJsYXlTdHlsZSBtX3Njcm9sbGJhck92ZXJsYXlTdHlsZTsKKyAgICBWZWN0b3I8
SW50UmVjdD4gbV90aWNrbWFya3M7CisgICAgYm9vbCBtX2lzU2Nyb2xsYWJsZUFyZWFBY3RpdmU7
CisgICAgYm9vbCBtX2lzU2Nyb2xsVmlld1Njcm9sbGJhcjsKKworICAgIFNjcm9sbGJhck9yaWVu
dGF0aW9uIG1fb3JpZW50YXRpb247CisKKyAgICBTY3JvbGxiYXJDb250cm9sU2l6ZSBtX2NvbnRy
b2xTaXplOworCisgICAgU2Nyb2xsYmFyUGFydCBtX3ByZXNzZWRQYXJ0OworICAgIFNjcm9sbGJh
clBhcnQgbV9ob3ZlcmVkUGFydDsKKworICAgIGJvb2wgbV9lbmFibGVkOworfTsKKworfQorI2Vu
ZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25p
emVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVT
eW5jaHJvbml6ZXIuY3BwCmluZGV4IGViZDFhYzczMGIxOTQ1NDFjMmI0YzRlZWYxZjZjY2E1OTli
NGU1YzguLjI0MTliMzY0MGI5ZTRlNjU0NmJjZTliNjRhZGE2ZmRlN2Q5MzA5MjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJv
bml6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RyZWVTeW5jaHJvbml6ZXIuY3BwCkBAIC0yOCwyMCArMjgsMjggQEAKICNpbmNsdWRlICJUcmVl
U3luY2hyb25pemVyLmgiCiAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAi
U2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisj
aW5jbHVkZSAiY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGFzc093blB0cjxDQ0xheWVySW1wbD4gVHJl
ZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhMYXllckNocm9taXVtKiBsYXllckNocm9t
aXVtUm9vdCwgUGFzc093blB0cjxDQ0xheWVySW1wbD4gb2xkQ0NMYXllckltcGxSb290KQogewot
ICAgIENDTGF5ZXJJbXBsTWFwIG1hcDsKLSAgICBjb2xsZWN0RXhpc3RpbmdDQ0xheWVySW1wbFJl
Y3Vyc2l2ZShtYXAsIG9sZENDTGF5ZXJJbXBsUm9vdCk7CisgICAgT3duUHRyQ0NMYXllckltcGxN
YXAgb2xkTGF5ZXJzOworICAgIFJhd1B0ckNDTGF5ZXJJbXBsTWFwIG5ld0xheWVyczsKIAotICAg
IHJldHVybiBzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUobWFwLCBsYXllckNocm9taXVtUm9vdCk7
CisgICAgY29sbGVjdEV4aXN0aW5nQ0NMYXllckltcGxSZWN1cnNpdmUob2xkTGF5ZXJzLCBvbGRD
Q0xheWVySW1wbFJvb3QpOworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBuZXdUcmVlID0gc3lu
Y2hyb25pemVUcmVlUmVjdXJzaXZlKG5ld0xheWVycywgb2xkTGF5ZXJzLCBsYXllckNocm9taXVt
Um9vdCk7CisKKyAgICB1cGRhdGVTY3JvbGxiYXJMYXllclBvaW50ZXJzUmVjdXJzaXZlKG5ld0xh
eWVycywgbGF5ZXJDaHJvbWl1bVJvb3QpOworCisgICAgcmV0dXJuIG5ld1RyZWUucmVsZWFzZSgp
OwogfQogCi12b2lkIFRyZWVTeW5jaHJvbml6ZXI6OmNvbGxlY3RFeGlzdGluZ0NDTGF5ZXJJbXBs
UmVjdXJzaXZlKENDTGF5ZXJJbXBsTWFwJiBtYXAsIFBhc3NPd25QdHI8Q0NMYXllckltcGw+IHBv
cENDTGF5ZXJJbXBsKQordm9pZCBUcmVlU3luY2hyb25pemVyOjpjb2xsZWN0RXhpc3RpbmdDQ0xh
eWVySW1wbFJlY3Vyc2l2ZShPd25QdHJDQ0xheWVySW1wbE1hcCYgb2xkTGF5ZXJzLCBQYXNzT3du
UHRyPENDTGF5ZXJJbXBsPiBwb3BDQ0xheWVySW1wbCkKIHsKICAgICBPd25QdHI8Q0NMYXllcklt
cGw+IGNjTGF5ZXJJbXBsID0gcG9wQ0NMYXllckltcGw7CiAKQEAgLTUwLDQyICs1OCw1OCBAQCB2
b2lkIFRyZWVTeW5jaHJvbml6ZXI6OmNvbGxlY3RFeGlzdGluZ0NDTGF5ZXJJbXBsUmVjdXJzaXZl
KENDTGF5ZXJJbXBsTWFwJiBtYXAsCiAKICAgICBWZWN0b3I8T3duUHRyPENDTGF5ZXJJbXBsPiA+
JiBjaGlsZHJlbiA9IGNjTGF5ZXJJbXBsLT5tX2NoaWxkcmVuOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyArK2kpCi0gICAgICAgIGNvbGxlY3RFeGlzdGluZ0ND
TGF5ZXJJbXBsUmVjdXJzaXZlKG1hcCwgY2hpbGRyZW5baV0ucmVsZWFzZSgpKTsKKyAgICAgICAg
Y29sbGVjdEV4aXN0aW5nQ0NMYXllckltcGxSZWN1cnNpdmUob2xkTGF5ZXJzLCBjaGlsZHJlbltp
XS5yZWxlYXNlKCkpOwogCi0gICAgY29sbGVjdEV4aXN0aW5nQ0NMYXllckltcGxSZWN1cnNpdmUo
bWFwLCBjY0xheWVySW1wbC0+bV9tYXNrTGF5ZXIucmVsZWFzZSgpKTsKLSAgICBjb2xsZWN0RXhp
c3RpbmdDQ0xheWVySW1wbFJlY3Vyc2l2ZShtYXAsIGNjTGF5ZXJJbXBsLT5tX3JlcGxpY2FMYXll
ci5yZWxlYXNlKCkpOworICAgIGNvbGxlY3RFeGlzdGluZ0NDTGF5ZXJJbXBsUmVjdXJzaXZlKG9s
ZExheWVycywgY2NMYXllckltcGwtPm1fbWFza0xheWVyLnJlbGVhc2UoKSk7CisgICAgY29sbGVj
dEV4aXN0aW5nQ0NMYXllckltcGxSZWN1cnNpdmUob2xkTGF5ZXJzLCBjY0xheWVySW1wbC0+bV9y
ZXBsaWNhTGF5ZXIucmVsZWFzZSgpKTsKIAogICAgIGludCBpZCA9IGNjTGF5ZXJJbXBsLT5pZCgp
OwotICAgIG1hcC5zZXQoaWQsIGNjTGF5ZXJJbXBsLnJlbGVhc2UoKSk7CisgICAgb2xkTGF5ZXJz
LnNldChpZCwgY2NMYXllckltcGwucmVsZWFzZSgpKTsKIH0KIAotUGFzc093blB0cjxDQ0xheWVy
SW1wbD4gVHJlZVN5bmNocm9uaXplcjo6cmV1c2VPckNyZWF0ZUNDTGF5ZXJJbXBsKENDTGF5ZXJJ
bXBsTWFwJiBtYXAsIExheWVyQ2hyb21pdW0qIGxheWVyKQorUGFzc093blB0cjxDQ0xheWVySW1w
bD4gVHJlZVN5bmNocm9uaXplcjo6cmV1c2VPckNyZWF0ZUNDTGF5ZXJJbXBsKFJhd1B0ckNDTGF5
ZXJJbXBsTWFwJiBuZXdMYXllcnMsIE93blB0ckNDTGF5ZXJJbXBsTWFwJiBvbGRMYXllcnMsIExh
eWVyQ2hyb21pdW0qIGxheWVyKQogewotICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2NMYXllcklt
cGwgPSBtYXAudGFrZShsYXllci0+aWQoKSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjY0xh
eWVySW1wbCA9IG9sZExheWVycy50YWtlKGxheWVyLT5pZCgpKTsKIAogICAgIGlmICghY2NMYXll
ckltcGwpCi0gICAgICAgIHJldHVybiBsYXllci0+Y3JlYXRlQ0NMYXllckltcGwoKTsKKyAgICAg
ICAgY2NMYXllckltcGwgPSBsYXllci0+Y3JlYXRlQ0NMYXllckltcGwoKTsKIAorICAgIG5ld0xh
eWVycy5zZXQobGF5ZXItPmlkKCksIGNjTGF5ZXJJbXBsLmdldCgpKTsKICAgICByZXR1cm4gY2NM
YXllckltcGwucmVsZWFzZSgpOwogfQogCi1QYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBUcmVlU3lu
Y2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUoQ0NMYXllckltcGxNYXAmIG1hcCwg
TGF5ZXJDaHJvbWl1bSogbGF5ZXIpCitQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBUcmVlU3luY2hy
b25pemVyOjpzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUoUmF3UHRyQ0NMYXllckltcGxNYXAmIG5l
d0xheWVycywgT3duUHRyQ0NMYXllckltcGxNYXAmIG9sZExheWVycywgTGF5ZXJDaHJvbWl1bSog
bGF5ZXIpCiB7CiAgICAgaWYgKCFsYXllcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICBPd25QdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJJbXBsID0gcmV1c2VPckNyZWF0ZUNDTGF5ZXJJ
bXBsKG1hcCwgbGF5ZXIpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2NMYXllckltcGwgPSBy
ZXVzZU9yQ3JlYXRlQ0NMYXllckltcGwobmV3TGF5ZXJzLCBvbGRMYXllcnMsIGxheWVyKTsKIAog
ICAgIGNjTGF5ZXJJbXBsLT5jbGVhckNoaWxkTGlzdCgpOwogICAgIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPiYgY2hpbGRyZW4gPSBsYXllci0+Y2hpbGRyZW4oKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKQotICAgICAgICBjY0xh
eWVySW1wbC0+YWRkQ2hpbGQoc3luY2hyb25pemVUcmVlUmVjdXJzaXZlKG1hcCwgY2hpbGRyZW5b
aV0uZ2V0KCkpKTsKKyAgICAgICAgY2NMYXllckltcGwtPmFkZENoaWxkKHN5bmNocm9uaXplVHJl
ZVJlY3Vyc2l2ZShuZXdMYXllcnMsIG9sZExheWVycywgY2hpbGRyZW5baV0uZ2V0KCkpKTsKIAot
ICAgIGNjTGF5ZXJJbXBsLT5zZXRNYXNrTGF5ZXIoc3luY2hyb25pemVUcmVlUmVjdXJzaXZlKG1h
cCwgbGF5ZXItPm1hc2tMYXllcigpKSk7Ci0gICAgY2NMYXllckltcGwtPnNldFJlcGxpY2FMYXll
cihzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUobWFwLCBsYXllci0+cmVwbGljYUxheWVyKCkpKTsK
KyAgICBjY0xheWVySW1wbC0+c2V0TWFza0xheWVyKHN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShu
ZXdMYXllcnMsIG9sZExheWVycywgbGF5ZXItPm1hc2tMYXllcigpKSk7CisgICAgY2NMYXllcklt
cGwtPnNldFJlcGxpY2FMYXllcihzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUobmV3TGF5ZXJzLCBv
bGRMYXllcnMsIGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkpOwogCiAgICAgbGF5ZXItPnB1c2hQcm9w
ZXJ0aWVzVG8oY2NMYXllckltcGwuZ2V0KCkpOwogICAgIHJldHVybiBjY0xheWVySW1wbC5yZWxl
YXNlKCk7CiB9CiAKK3ZvaWQgVHJlZVN5bmNocm9uaXplcjo6dXBkYXRlU2Nyb2xsYmFyTGF5ZXJQ
b2ludGVyc1JlY3Vyc2l2ZShjb25zdCBSYXdQdHJDQ0xheWVySW1wbE1hcCYgbmV3TGF5ZXJzLCBM
YXllckNocm9taXVtKiBsYXllcikKK3sKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hy
b21pdW0+ID4mIGNoaWxkcmVuID0gbGF5ZXItPmNoaWxkcmVuKCk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkKKyAgICAgICAgdXBkYXRlU2Nyb2xsYmFy
TGF5ZXJQb2ludGVyc1JlY3Vyc2l2ZShuZXdMYXllcnMsIGNoaWxkcmVuW2ldLmdldCgpKTsKKwor
ICAgIFNjcm9sbGJhckxheWVyQ2hyb21pdW0qIHNjcm9sbGJhckxheWVyID0gbGF5ZXItPnRvU2Ny
b2xsYmFyTGF5ZXJDaHJvbWl1bSgpOworICAgIGlmICghc2Nyb2xsYmFyTGF5ZXIgfHwgIXNjcm9s
bGJhckxheWVyLT5zY3JvbGxMYXllcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBDQ1Njcm9s
bGJhckxheWVySW1wbCogY2NTY3JvbGxiYXJMYXllckltcGwgPSBzdGF0aWNfY2FzdDxDQ1Njcm9s
bGJhckxheWVySW1wbCo+KG5ld0xheWVycy5nZXQoc2Nyb2xsYmFyTGF5ZXItPmlkKCkpKTsKKyAg
ICBBU1NFUlQoY2NTY3JvbGxiYXJMYXllckltcGwpOworICAgIGNjU2Nyb2xsYmFyTGF5ZXJJbXBs
LT5zZXRTY3JvbGxMYXllcihuZXdMYXllcnMuZ2V0KHNjcm9sbGJhckxheWVyLT5zY3JvbGxMYXll
cigpLT5pZCgpKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJv
bml6ZXIuaAppbmRleCAxMzQ3MDhjYTQzYmQ4OWVjYmRmMmZkMjE1OTJmZDA3Mjg2ZGNjMTc5Li4x
ZGJlYjhiZWRjYWExMTEzYzA2YWI2NWI4YzcyMzZjNTFkZDFjZWEzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNo
cm9uaXplci5oCkBAIC00NiwxMiArNDYsMTQgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBUcmVl
U3luY2hyb25pemVyKCk7IC8vIE5vdCBpbnN0YW50aWFibGUuCiAKLSAgICB0eXBlZGVmIEhhc2hN
YXA8aW50LCBPd25QdHI8Q0NMYXllckltcGw+ID4gQ0NMYXllckltcGxNYXA7CisgICAgdHlwZWRl
ZiBIYXNoTWFwPGludCwgT3duUHRyPENDTGF5ZXJJbXBsPiA+IE93blB0ckNDTGF5ZXJJbXBsTWFw
OworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIENDTGF5ZXJJbXBsKj4gUmF3UHRyQ0NMYXllcklt
cGxNYXA7CiAKICAgICAvLyBEZWNsYXJlZCBhcyBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyBzbyB0
aGV5IGNhbiBhY2Nlc3MgZnVuY3Rpb25zIG9uIExheWVyQ2hyb21pdW0gYXMgYSBmcmllbmQgY2xh
c3MuCi0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NMYXllckltcGw+IHJldXNlT3JDcmVhdGVDQ0xh
eWVySW1wbChDQ0xheWVySW1wbE1hcCYsIExheWVyQ2hyb21pdW0qKTsKLSAgICBzdGF0aWMgdm9p
ZCBjb2xsZWN0RXhpc3RpbmdDQ0xheWVySW1wbFJlY3Vyc2l2ZShDQ0xheWVySW1wbE1hcCYsIFBh
c3NPd25QdHI8Q0NMYXllckltcGw+KTsKLSAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVySW1w
bD4gc3luY2hyb25pemVUcmVlUmVjdXJzaXZlKENDTGF5ZXJJbXBsTWFwJiwgTGF5ZXJDaHJvbWl1
bSopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiByZXVzZU9yQ3JlYXRlQ0NM
YXllckltcGwoUmF3UHRyQ0NMYXllckltcGxNYXAmIG5ld0xheWVycywgT3duUHRyQ0NMYXllcklt
cGxNYXAmIG9sZExheWVycywgTGF5ZXJDaHJvbWl1bSopOworICAgIHN0YXRpYyB2b2lkIGNvbGxl
Y3RFeGlzdGluZ0NDTGF5ZXJJbXBsUmVjdXJzaXZlKE93blB0ckNDTGF5ZXJJbXBsTWFwJiBvbGRM
YXllcnMsIFBhc3NPd25QdHI8Q0NMYXllckltcGw+KTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxD
Q0xheWVySW1wbD4gc3luY2hyb25pemVUcmVlUmVjdXJzaXZlKFJhd1B0ckNDTGF5ZXJJbXBsTWFw
JiBuZXdMYXllcnMsIE93blB0ckNDTGF5ZXJJbXBsTWFwJiBvbGRMYXllcnMsIExheWVyQ2hyb21p
dW0qKTsKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVTY3JvbGxiYXJMYXllclBvaW50ZXJzUmVjdXJz
aXZlKGNvbnN0IFJhd1B0ckNDTGF5ZXJJbXBsTWFwJiBuZXdMYXllcnMsIExheWVyQ2hyb21pdW0q
KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApp
bmRleCBjMDMwNjRhOTJkOTU3YTBjYzcwYzhiZTg4NmI1YjQxNmQ1YTFhYWRiLi42NWFmN2U1NGJk
NmE1NmM0NmJmYmJjM2ViMGE1YjdiY2RjMDNkN2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3Bw
CkBAIC0xOTEsNiArMTkxLDcgQEAgdm9pZCBDQ0xheWVySW1wbDo6c2Nyb2xsQnkoY29uc3QgSW50
U2l6ZSYgc2Nyb2xsKQogICAgIEludFNpemUgbWF4RGVsdGEgPSBtX21heFNjcm9sbFBvc2l0aW9u
IC0gdG9TaXplKG1fc2Nyb2xsUG9zaXRpb24pOwogICAgIC8vIENsYW1wIG5ld0RlbHRhIHNvIHRo
YXQgcG9zaXRpb24gKyBkZWx0YSBzdGF5cyB3aXRoaW4gc2Nyb2xsIGJvdW5kcy4KICAgICBtX3Nj
cm9sbERlbHRhID0gbmV3RGVsdGEuZXhwYW5kZWRUbyhtaW5EZWx0YSkuc2hydW5rVG8obWF4RGVs
dGEpOworCiAgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkRm9yU3VidHJlZSgpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1Njcm9sbGJhckxheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWIxOGZj
MDkyMDc0ODA0N2NjYzNhYWYxNWVhNjY1MzQ2ZDBhNzJkNAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5
ZXJJbXBsLmNwcApAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkNDU2Nyb2xs
YmFyTGF5ZXJJbXBsLmgiCisKKyNpbmNsdWRlICJDQ1RpbGVEcmF3UXVhZC5oIgorI2luY2x1ZGUg
IkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1DYW52YXMuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgor
CisjaWYgVVNFKFNLSUEpCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorI2luY2x1
ZGUgIlNrR3B1RGV2aWNlLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNz
T3duUHRyPENDU2Nyb2xsYmFyTGF5ZXJJbXBsPiBDQ1Njcm9sbGJhckxheWVySW1wbDo6Y3JlYXRl
KGludCBpZCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDU2Nyb2xsYmFyTGF5ZXJJbXBs
KGlkKSk7Cit9CisKK0NDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhckxheWVySW1wbChp
bnQgaWQpCisgICAgOiBDQ0xheWVySW1wbChpZCkKKyAgICAsIG1fc2Nyb2xsTGF5ZXIoMCkKKyAg
ICAsIG1fc2Nyb2xsYmFyKHRoaXMpCit7Cit9CisKK3ZvaWQgQ0NTY3JvbGxiYXJMYXllckltcGw6
OndpbGxEcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKK3sKKyAgICBp
ZiAoYm91bmRzKCkuaXNFbXB0eSgpIHx8IGNvbnRlbnRCb3VuZHMoKS5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghbV90ZXh0dXJlKQorICAgICAgICBtX3RleHR1cmUgPSBN
YW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKGxheWVyUmVuZGVyZXItPnJlbmRlclN1cmZhY2VUZXh0dXJl
TWFuYWdlcigpKTsKKworICAgIEludFNpemUgdGV4dHVyZVNpemUgPSBjb250ZW50Qm91bmRzKCk7
CisgICAgaWYgKCFtX3RleHR1cmUtPnJlc2VydmUodGV4dHVyZVNpemUsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGxhdGZvcm1DYW52YXMgY2FudmFz
OworICAgIGNhbnZhcy5yZXNpemUodGV4dHVyZVNpemUpOworICAgIHsKKyAgICAgICAgUGxhdGZv
cm1DYW52YXM6OlBhaW50ZXIgcGFpbnRlcigmY2FudmFzLCBQbGF0Zm9ybUNhbnZhczo6UGFpbnRl
cjo6R3JheXNjYWxlVGV4dCk7CisgICAgICAgIHBhaW50KHBhaW50ZXIuY29udGV4dCgpKTsKKyAg
ICB9CisKKyAgICB7CisgICAgICAgIFBsYXRmb3JtQ2FudmFzOjpBdXRvTG9ja2VyIGxvY2tlcigm
Y2FudmFzKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRl
cmVyLT5jb250ZXh0KCk7CisgICAgICAgIG1fdGV4dHVyZS0+YmluZFRleHR1cmUoY29udGV4dCwg
bGF5ZXJSZW5kZXJlci0+cmVuZGVyU3VyZmFjZVRleHR1cmVBbGxvY2F0b3IoKSk7CisKKyAgICAg
ICAgLy8gRklYTUU6IFNraWEgdXNlcyBCR1JBIGFjdHVhbGx5LCB3ZSBjb3JyZWN0IHRoYXQgd2l0
aCB0aGUgc3dpenpsZSBwaXhlbCBzaGFkZXIuCisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBtX3RleHR1cmUt
PmZvcm1hdCgpLCBjYW52YXMuc2l6ZSgpLndpZHRoKCksIGNhbnZhcy5zaXplKCkuaGVpZ2h0KCks
IDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSwgbG9ja2VyLnBpeGVscygpKSk7CisgICAgfQorfQorCit2b2lkIENDU2Nyb2xsYmFyTGF5
ZXJJbXBsOjphcHBlbmRRdWFkcyhDQ1F1YWRMaXN0JiBxdWFkTGlzdCwgY29uc3QgQ0NTaGFyZWRR
dWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSkKK3sKKyAgICBpZiAoIW1fdGV4dHVyZS0+aXNSZXNl
cnZlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRSZWN0IHF1YWRSZWN0KEludFBvaW50
KCksIGJvdW5kcygpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoQ0NUaWxlRHJhd1F1YWQ6OmNyZWF0
ZShzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCBxdWFkUmVjdCwgbV90ZXh0dXJlLT50ZXh0dXJl
SWQoKSwgSW50UG9pbnQoKSwgbV90ZXh0dXJlLT5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpM
SU5FQVIsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUpKTsKK30KKwordm9pZCBDQ1Njcm9s
bGJhckxheWVySW1wbDo6ZGlkRHJhdygpCit7CisgICAgbV90ZXh0dXJlLT51bnJlc2VydmUoKTsK
K30KKwordm9pZCBDQ1Njcm9sbGJhckxheWVySW1wbDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0KQoreworICAgIFNjcm9sbGJhclRoZW1lKiB0aGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0
aGVtZSgpOyAvLyBGSVhNRTogc2hvdWxkIG1ha2UgaW1wbC1zaWRlIGNsb25lIGlmIG5lZWRlZAor
CisgICAgY29udGV4dC0+Y2xlYXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29udGVudEJvdW5k
cygpKSk7CisgICAgdGhlbWUtPnBhaW50KCZtX3Njcm9sbGJhciwgY29udGV4dCwgSW50UmVjdChJ
bnRQb2ludCgpLCBjb250ZW50Qm91bmRzKCkpKTsKK30KKworCitpbnQgQ0NTY3JvbGxiYXJMYXll
ckltcGw6OkNDU2Nyb2xsYmFyOjp4KCkgY29uc3QgeyByZXR1cm4gZnJhbWVSZWN0KCkueCgpOyB9
CitpbnQgQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjp5KCkgY29uc3QgeyByZXR1
cm4gZnJhbWVSZWN0KCkueSgpOyB9CitpbnQgQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xs
YmFyOjp3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIGZyYW1lUmVjdCgpLndpZHRoKCk7IH0KK2ludCBD
Q1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OmhlaWdodCgpIGNvbnN0IHsgcmV0dXJu
IGZyYW1lUmVjdCgpLmhlaWdodCgpOyB9CitJbnRTaXplIENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpD
Q1Njcm9sbGJhcjo6c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZyYW1lUmVjdCgpLnNpemUoKTsgfQor
SW50UG9pbnQgQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpsb2NhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIGZyYW1lUmVjdCgpLmxvY2F0aW9uKCk7IH0KKworU2Nyb2xsVmlldyogQ0NT
Y3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpwYXJlbnQoKSBjb25zdAoreworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitTY3JvbGxWaWV3KiBDQ1Nj
cm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OnJvb3QoKSBjb25zdAoreworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIENDU2Nyb2xsYmFyTGF5
ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmKSB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9CitJbnRSZWN0IENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9s
bGJhcjo6ZnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBtX293
bmVyLT5jb250ZW50Qm91bmRzKCkpOyB9CisKK3ZvaWQgQ0NTY3JvbGxiYXJMYXllckltcGw6OkND
U2Nyb2xsYmFyOjppbnZhbGlkYXRlKCkgeyBpbnZhbGlkYXRlUmVjdChmcmFtZVJlY3QoKSk7IH0K
K3ZvaWQgQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjppbnZhbGlkYXRlUmVjdChj
b25zdCBJbnRSZWN0JikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorCitTY3JvbGxiYXJPdmVy
bGF5U3R5bGUgQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpzY3JvbGxiYXJPdmVy
bGF5U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX293bmVyLT5tX3Njcm9sbGJhck92ZXJsYXlTdHls
ZTsgfQordm9pZCBDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OmdldFRpY2ttYXJr
cyhWZWN0b3I8SW50UmVjdD4mIHRpY2ttYXJrcykgY29uc3QgeyB0aWNrbWFya3MgPSBtX293bmVy
LT5tX3RpY2ttYXJrczsgfQorYm9vbCBDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6
OmlzU2Nyb2xsYWJsZUFyZWFBY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX293bmVyLT5tX2lzU2Ny
b2xsYWJsZUFyZWFBY3RpdmU7IH0KK2Jvb2wgQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xs
YmFyOjppc1Njcm9sbFZpZXdTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBtX293bmVyLT5tX2lz
U2Nyb2xsVmlld1Njcm9sbGJhcjsgfQorCitJbnRQb2ludCBDQ1Njcm9sbGJhckxheWVySW1wbDo6
Q0NTY3JvbGxiYXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYg
d2luZG93UG9pbnQpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHdp
bmRvd1BvaW50OworfQorCitib29sIENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6
aXNDdXN0b21TY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorU2Nyb2xsYmFyT3Jp
ZW50YXRpb24gQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpvcmllbnRhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fb3duZXItPm1fb3JpZW50YXRpb247IH0KKworaW50IENDU2Nyb2xs
YmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6dmFsdWUoKSBjb25zdAoreworICAgIGlmIChvcmll
bnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBtX293bmVy
LT5tX3Njcm9sbExheWVyLT5zY3JvbGxQb3NpdGlvbigpLngoKSArIG1fb3duZXItPm1fc2Nyb2xs
TGF5ZXItPnNjcm9sbERlbHRhKCkud2lkdGgoKTsKKyAgICByZXR1cm4gbV9vd25lci0+bV9zY3Jv
bGxMYXllci0+c2Nyb2xsUG9zaXRpb24oKS55KCkgKyBtX293bmVyLT5tX3Njcm9sbExheWVyLT5z
Y3JvbGxEZWx0YSgpLmhlaWdodCgpOworfQorCitmbG9hdCBDQ1Njcm9sbGJhckxheWVySW1wbDo6
Q0NTY3JvbGxiYXI6OmN1cnJlbnRQb3MoKSBjb25zdCB7IHJldHVybiB2YWx1ZSgpOyB9CisKK2lu
dCBDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OnZpc2libGVTaXplKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gdG90YWxTaXplKCkgLSBtYXhpbXVtKCk7Cit9CisKK2ludCBDQ1Njcm9s
bGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OnRvdGFsU2l6ZSgpIGNvbnN0Cit7CisgICAgLy8g
Q29weSAmIHBhc3RlIGZyb20gQ0NMYXllclRyZWVIb3N0SW1wbC4uLgorICAgIC8vIFRPRE8oYWVs
aWFzKTogSGFyZGNvZGluZyB0aGUgZmlyc3QgY2hpbGQgaGVyZSBpcyB3ZWlyZC4gVGhpbmsgb2YK
KyAgICAvLyBhIGNsZWFuZXIgd2F5IHRvIGdldCB0aGUgY29udGVudEJvdW5kcyBvbiB0aGUgSW1w
bCBzaWRlLgorICAgIGlmIChvcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCisg
ICAgICAgIHJldHVybiBtX293bmVyLT5tX3Njcm9sbExheWVyLT5jaGlsZHJlbigpWzBdLT5jb250
ZW50Qm91bmRzKCkud2lkdGgoKTsKKyAgICByZXR1cm4gbV9vd25lci0+bV9zY3JvbGxMYXllci0+
Y2hpbGRyZW4oKVswXS0+Y29udGVudEJvdW5kcygpLmhlaWdodCgpOworfQorCitpbnQgQ0NTY3Jv
bGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjptYXhpbXVtKCkgY29uc3QKK3sKKyAgICBpZiAo
b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gbV9v
d25lci0+bV9zY3JvbGxMYXllci0+bWF4U2Nyb2xsUG9zaXRpb24oKS53aWR0aCgpOworICAgIHJl
dHVybiBtX293bmVyLT5tX3Njcm9sbExheWVyLT5tYXhTY3JvbGxQb3NpdGlvbigpLmhlaWdodCgp
OworfQorCitTY3JvbGxiYXJDb250cm9sU2l6ZSBDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3Jv
bGxiYXI6OmNvbnRyb2xTaXplKCkgY29uc3QgeyByZXR1cm4gbV9vd25lci0+bV9jb250cm9sU2l6
ZTsgfQorCitpbnQgQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpsaW5lU3RlcCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K2ludCBDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OnBhZ2VTdGVwKCkgY29uc3QK
K3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworU2Nyb2xs
YmFyUGFydCBDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OnByZXNzZWRQYXJ0KCkg
Y29uc3QgeyByZXR1cm4gbV9vd25lci0+bV9wcmVzc2VkUGFydDsgfQorU2Nyb2xsYmFyUGFydCBD
Q1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OmhvdmVyZWRQYXJ0KCkgY29uc3QgeyBy
ZXR1cm4gbV9vd25lci0+bV9ob3ZlcmVkUGFydDsgfQorCit2b2lkIENDU2Nyb2xsYmFyTGF5ZXJJ
bXBsOjpDQ1Njcm9sbGJhcjo6c3R5bGVDaGFuZ2VkKCkgeyB9CisKK2Jvb2wgQ0NTY3JvbGxiYXJM
YXllckltcGw6OkNDU2Nyb2xsYmFyOjplbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9vd25lci0+
bV9lbmFibGVkOyB9Cit2b2lkIENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6c2V0
RW5hYmxlZChib29sKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisKK30KKyNlbmRpZiAvLyBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJMYXll
ckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40MzgxYWUzNDhmMzI0ZmRkYmY3Y2Q3MjM4NDMwNWVlZDA0ZWIw
ZTBlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuaApAQCAtMCwwICsxLDE0OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQ0NTY3JvbGxiYXJMYXllckltcGxfaAorI2RlZmluZSBDQ1Njcm9sbGJhckxh
eWVySW1wbF9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRl
ICJDQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCisjaW5jbHVkZSAi
U2Nyb2xsYmFyVGhlbWVDbGllbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBH
cmFwaGljc0NvbnRleHQ7CitjbGFzcyBTY3JvbGxWaWV3OworCitjbGFzcyBDQ1Njcm9sbGJhckxh
eWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NP
d25QdHI8Q0NTY3JvbGxiYXJMYXllckltcGw+IGNyZWF0ZShpbnQgaWQpOworCisgICAgdm9pZCBz
ZXRTY3JvbGxiYXJPdmVybGF5U3R5bGUoU2Nyb2xsYmFyT3ZlcmxheVN0eWxlIHNjcm9sbGJhck92
ZXJsYXlTdHlsZSkgeyBtX3Njcm9sbGJhck92ZXJsYXlTdHlsZSA9IHNjcm9sbGJhck92ZXJsYXlT
dHlsZTsgfQorICAgIHZvaWQgc2V0VGlja21hcmtzKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgdGlj
a21hcmtzKSB7IG1fdGlja21hcmtzID0gdGlja21hcmtzOyB9CisgICAgdm9pZCBzZXRJc1Njcm9s
bGFibGVBcmVhQWN0aXZlKGJvb2wgaXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSkgeyBtX2lzU2Nyb2xs
YWJsZUFyZWFBY3RpdmUgPSBpc1Njcm9sbGFibGVBcmVhQWN0aXZlOyB9CisgICAgdm9pZCBzZXRJ
c1Njcm9sbFZpZXdTY3JvbGxiYXIoYm9vbCBpc1Njcm9sbFZpZXdTY3JvbGxiYXIpIHsgbV9pc1Nj
cm9sbFZpZXdTY3JvbGxiYXIgPSBpc1Njcm9sbFZpZXdTY3JvbGxiYXI7IH0KKworICAgIHZvaWQg
c2V0T3JpZW50YXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIHsgbV9vcmll
bnRhdGlvbiA9IG9yaWVudGF0aW9uOyB9CisKKyAgICB2b2lkIHNldENvbnRyb2xTaXplKFNjcm9s
bGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKSB7IG1fY29udHJvbFNpemUgPSBjb250cm9sU2l6
ZTsgfQorCisgICAgdm9pZCBzZXRQcmVzc2VkUGFydChTY3JvbGxiYXJQYXJ0IHByZXNzZWRQYXJ0
KSB7IG1fcHJlc3NlZFBhcnQgPSBwcmVzc2VkUGFydDsgfQorICAgIHZvaWQgc2V0SG92ZXJlZFBh
cnQoU2Nyb2xsYmFyUGFydCBob3ZlcmVkUGFydCkgeyBtX2hvdmVyZWRQYXJ0ID0gaG92ZXJlZFBh
cnQ7IH0KKworICAgIHZvaWQgc2V0RW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9lbmFibGVkID0g
ZW5hYmxlZDsgfQorCisKKyAgICB2b2lkIHNldFNjcm9sbExheWVyKENDTGF5ZXJJbXBsKiBzY3Jv
bGxMYXllcikgeyBtX3Njcm9sbExheWVyID0gc2Nyb2xsTGF5ZXI7IH0KKworICAgIHZpcnR1YWwg
dm9pZCB3aWxsRHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKKyAgICB2aXJ0dWFsIHZvaWQg
YXBwZW5kUXVhZHMoQ0NRdWFkTGlzdCYsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKik7CisgICAg
dmlydHVhbCB2b2lkIGRpZERyYXcoKTsKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IENDU2Ny
b2xsYmFyTGF5ZXJJbXBsKGludCBpZCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBwYWludChHcmFw
aGljc0NvbnRleHQqKTsKKworICAgIENDTGF5ZXJJbXBsKiBtX3Njcm9sbExheWVyOworICAgIE93
blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV90ZXh0dXJlOworCisgICAgLy8gbmVzdGVkIGNsYXNzIG9u
bHkgdG8gYXZvaWQgbmFtZXNwYWNlIHByb2JsZW0KKyAgICBjbGFzcyBDQ1Njcm9sbGJhciA6IHB1
YmxpYyBTY3JvbGxiYXJUaGVtZUNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICBDQ1Njcm9s
bGJhcihDQ1Njcm9sbGJhckxheWVySW1wbCogb3duZXIpIDogbV9vd25lcihvd25lcikgeyB9CisK
KyAgICAgICAgLy8gU2Nyb2xsYmFyVGhlbWVDbGllbnQgaW1wbGVtZW50YXRpb24KKyAgICAgICAg
dmlydHVhbCBpbnQgeCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGludCB5KCkgY29uc3Q7Cisg
ICAgICAgIHZpcnR1YWwgaW50IHdpZHRoKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgaW50IGhl
aWdodCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0OworICAg
ICAgICB2aXJ0dWFsIEludFBvaW50IGxvY2F0aW9uKCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVh
bCBTY3JvbGxWaWV3KiBwYXJlbnQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTY3JvbGxWaWV3
KiByb290KCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lUmVjdChjb25z
dCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgSW50UmVjdCBmcmFtZVJlY3QoKSBjb25zdDsK
KworICAgICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYpOworCisgICAgICAgIHZpcnR1YWwgU2Ny
b2xsYmFyT3ZlcmxheVN0eWxlIHNjcm9sbGJhck92ZXJsYXlTdHlsZSgpIGNvbnN0OworICAgICAg
ICB2aXJ0dWFsIHZvaWQgZ2V0VGlja21hcmtzKFZlY3RvcjxJbnRSZWN0PiYpIGNvbnN0OworICAg
ICAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSgpIGNvbnN0OworICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxWaWV3U2Nyb2xsYmFyKCkgY29uc3Q7CisKKyAgICAgICAg
dmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9p
bnQmIHdpbmRvd1BvaW50KTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDdXN0b21TY3JvbGxi
YXIoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRh
dGlvbigpIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgaW50IHZhbHVlKCkgY29uc3Q7CisgICAg
ICAgIHZpcnR1YWwgZmxvYXQgY3VycmVudFBvcygpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGlu
dCB2aXNpYmxlU2l6ZSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGludCB0b3RhbFNpemUoKSBj
b25zdDsKKyAgICAgICAgdmlydHVhbCBpbnQgbWF4aW11bSgpIGNvbnN0OworICAgICAgICB2aXJ0
dWFsIFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKCkgY29uc3Q7CisKKyAgICAgICAg
dmlydHVhbCBpbnQgbGluZVN0ZXAoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBpbnQgcGFnZVN0
ZXAoKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIFNjcm9sbGJhclBhcnQgcHJlc3NlZFBhcnQo
KSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTY3JvbGxiYXJQYXJ0IGhvdmVyZWRQYXJ0KCkgY29u
c3Q7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHN0eWxlQ2hhbmdlZCgpOworCisgICAgICAgIHZp
cnR1YWwgYm9vbCBlbmFibGVkKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFi
bGVkKGJvb2wpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ0NTY3JvbGxiYXJMYXllckltcGwq
IG1fb3duZXI7CisKKyAgICB9OworICAgIENDU2Nyb2xsYmFyIG1fc2Nyb2xsYmFyOworCisgICAg
U2Nyb2xsYmFyT3ZlcmxheVN0eWxlIG1fc2Nyb2xsYmFyT3ZlcmxheVN0eWxlOworICAgIFZlY3Rv
cjxJbnRSZWN0PiBtX3RpY2ttYXJrczsKKyAgICBib29sIG1faXNTY3JvbGxhYmxlQXJlYUFjdGl2
ZTsKKyAgICBib29sIG1faXNTY3JvbGxWaWV3U2Nyb2xsYmFyOworCisgICAgU2Nyb2xsYmFyT3Jp
ZW50YXRpb24gbV9vcmllbnRhdGlvbjsKKworICAgIFNjcm9sbGJhckNvbnRyb2xTaXplIG1fY29u
dHJvbFNpemU7CisKKyAgICBTY3JvbGxiYXJQYXJ0IG1fcHJlc3NlZFBhcnQ7CisgICAgU2Nyb2xs
YmFyUGFydCBtX2hvdmVyZWRQYXJ0OworCisgICAgYm9vbCBtX2VuYWJsZWQ7Cit9OworCit9Cisj
ZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130213</attachid>
            <date>2012-03-05 15:27:26 -0800</date>
            <delta_ts>2012-03-06 18:52:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78872-20120305152725.patch</filename>
            <type>text/plain</type>
            <size>48316</size>
            <attacher name="Tien-Ren Chen">trchen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5ODAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGM0N2U0MmUzNjg5NTUx
ZmRiMDY2MjZlNzExYmUwNGQ3MTYwOTJmMC4uNTVmNjhiZmU1OTZjZDBjZWJjNTlmNTcwM2RiNGFk
MzkyZGZjMmYzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMiBAQAorMjAxMi0wMy0wNSAgVGll
bi1SZW4gQ2hlbiAgPHRyY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBT
Y3JvbGxiYXJMYXllckNocm9taXVtL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsIGZvciBDQy1zaWRlIHNj
cm9sbGJhciBwYWludGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Nzg4NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUZXN0OiBTY3JvbGxiYXJMYXllckNocm9taXVtVGVzdC5yZXNvbHZlU2Nyb2xsTGF5
ZXJQb2ludGVyCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGFnZS9zY3Jv
bGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpzY3JvbGxMYXllckZvckZyYW1lVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpz
Y3JvbGxiYXJMYXllckRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFy
TGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OmZyYW1lVmlld1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpoYXNDb250ZW50c0xheWVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnRvU2Nyb2xs
YmFyTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChMYXllckNocm9taXVtKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckxheWVy
Q2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJh
ckxheWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJMYXll
ckNocm9taXVtOjpTY3JvbGxiYXJMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhckxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNjcm9sbGJhckxheWVyQ2hyb21pdW0pOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTo6c2Nyb2xsTGF5ZXJJZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJMYXllckNocm9taXVtOjp0b1Njcm9sbGJhckxheWVy
Q2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5j
aHJvbml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVN5bmNocm9uaXplcjo6c3luY2hy
b25pemVUcmVlcyk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU3luY2hyb25pemVyOjpjb2xsZWN0
RXhpc3RpbmdDQ0xheWVySW1wbFJlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU3lu
Y2hyb25pemVyOjpyZXVzZU9yQ3JlYXRlQ0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6
VHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlUmVjdXJzaXZlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRyZWVTeW5jaHJvbml6ZXI6OnVwZGF0ZVNjcm9sbGJhckxheWVyUG9pbnRlcnNSZWN1
cnNpdmUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5oOgorICAgICAgICAoVHJlZVN5bmNocm9uaXplcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJMYXll
ckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTY3JvbGxiYXJMYXllckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9s
bGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXJMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTY3JvbGxiYXJMYXllckltcGw6OndpbGxEcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Ny
b2xsYmFyTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9s
bGJhckxheWVySW1wbDo6ZGlkRHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxh
eWVySW1wbDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6
OkNDU2Nyb2xsYmFyOjp4KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBs
OjpDQ1Njcm9sbGJhcjo6eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1w
bDo6Q0NTY3JvbGxiYXI6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5
ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6aGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xs
YmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Nj
cm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OmxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6cGFyZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6cm9vdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OnNldEZyYW1l
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxi
YXI6OmZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6
Q0NTY3JvbGxiYXI6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJM
YXllckltcGw6OkNDU2Nyb2xsYmFyOjppbnZhbGlkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OnNjcm9sbGJhck92ZXJsYXlTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6
OmdldFRpY2ttYXJrcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6
Q0NTY3JvbGxiYXI6OmlzU2Nyb2xsYWJsZUFyZWFBY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjppc1Njcm9sbFZpZXdTY3JvbGxiYXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpj
b252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxi
YXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjppc0N1c3RvbVNjcm9sbGJhcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6Om9yaWVudGF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6dmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFy
OjpjdXJyZW50UG9zKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpD
Q1Njcm9sbGJhcjo6dmlzaWJsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJM
YXllckltcGw6OkNDU2Nyb2xsYmFyOjp0b3RhbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NT
Y3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjptYXhpbXVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6Y29udHJvbFNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpsaW5lU3Rl
cCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6
OnBhZ2VTdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Nj
cm9sbGJhcjo6cHJlc3NlZFBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXll
ckltcGw6OkNDU2Nyb2xsYmFyOjpob3ZlcmVkUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Nj
cm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OnN0eWxlQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OmVuYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpzZXRFbmFi
bGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJh
ckxheWVySW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ0NTY3Jv
bGxiYXJMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6
OnNldFNjcm9sbGJhck92ZXJsYXlTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJh
ckxheWVySW1wbDo6c2V0VGlja21hcmtzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFy
TGF5ZXJJbXBsOjpzZXRJc1Njcm9sbGFibGVBcmVhQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpzZXRJc1Njcm9sbFZpZXdTY3JvbGxiYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OnNldE9yaWVudGF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpzZXRDb250cm9sU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6c2V0UHJlc3NlZFBhcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OnNldEhvdmVyZWRQYXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpzZXRFbmFibGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpzY3JvbGxMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6c2V0U2Nyb2xsTGF5ZXIpOgorICAgICAg
ICAoQ0NTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6
OkNDU2Nyb2xsYmFyOjpDQ1Njcm9sbGJhcik6CisKIDIwMTItMDMtMDUgIEFuZGVycyBDYXJsc3Nv
biAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBBbHdheXMgdXBkYXRlIHRoZSBzY3Jv
bGwgbGF5ZXIgcG9zaXRpb24gb24gdGhlIG1haW4gdGhyZWFkIHdoZW4gd2UgaGF2ZSBhbiBvdmVy
bGF5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGVjZjE2NTM0NDZiYTRiYzM0ZDMyMjJh
NTNmMGUyNjA0MjVlMDQxYzkuLmZkY2RiMWY3ZjA3MTFjMDkzMjY4ZTY5MTNjMDkwMDdlY2IzNzE3
NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTItMDMt
MDUgIFRpZW4tUmVuIENoZW4gIDx0cmNoZW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS9DQ1Njcm9sbGJhckxheWVySW1wbCBmb3IgQ0Mt
c2lkZSBzY3JvbGxiYXIgcGFpbnRpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc4ODcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9TY3JvbGxiYXJM
YXllckNocm9taXVtVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChNb2NrU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tTY3JvbGxiYXI6OngpOgor
ICAgICAgICAoV2ViQ29yZTo6TW9ja1Njcm9sbGJhcjo6eSk6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrU2Nyb2xsYmFyOjp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrU2Nyb2xsYmFyOjpo
ZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1Njcm9sbGJhcjo6c2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpNb2NrU2Nyb2xsYmFyOjpsb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrU2Nyb2xsYmFyOjpwYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1Njcm9sbGJhcjo6
cm9vdCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrU2Nyb2xsYmFyOjpzZXRGcmFtZVJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TW9ja1Njcm9sbGJhcjo6ZnJhbWVSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1vY2tTY3JvbGxiYXI6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TW9j
a1Njcm9sbGJhcjo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1Njcm9s
bGJhcjo6c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tTY3Jv
bGxiYXI6OmdldFRpY2ttYXJrcyk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrU2Nyb2xsYmFyOjpp
c1Njcm9sbGFibGVBcmVhQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tTY3JvbGxiYXI6
OmlzU2Nyb2xsVmlld1Njcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpNb2NrU2Nyb2xsYmFy
Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1Nj
cm9sbGJhcjo6aXNDdXN0b21TY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1Njcm9s
bGJhcjo6b3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1Njcm9sbGJhcjo6dmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1Njcm9sbGJhcjo6Y3VycmVudFBvcyk6CisgICAg
ICAgIChXZWJDb3JlOjpNb2NrU2Nyb2xsYmFyOjp2aXNpYmxlU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpNb2NrU2Nyb2xsYmFyOjp0b3RhbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1Nj
cm9sbGJhcjo6bWF4aW11bSk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrU2Nyb2xsYmFyOjpjb250
cm9sU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrU2Nyb2xsYmFyOjpsaW5lU3RlcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNb2NrU2Nyb2xsYmFyOjpwYWdlU3RlcCk6CisgICAgICAgIChXZWJD
b3JlOjpNb2NrU2Nyb2xsYmFyOjpwcmVzc2VkUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpNb2Nr
U2Nyb2xsYmFyOjpob3ZlcmVkUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrU2Nyb2xsYmFy
OjpzdHlsZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1Njcm9sbGJhcjo6ZW5hYmxl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrU2Nyb2xsYmFyOjpzZXRFbmFibGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1vY2tTY3JvbGxiYXI6On5Nb2NrU2Nyb2xsYmFyKToKKyAgICAgICAgKFdl
YkNvcmU6OlRFU1QpOgorCiAyMDEyLTAzLTA1ICBDaGFybGllIFJlaXMgIDxjcmVpc0BjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBQYXNzIFdlYk5hdmlnYXRpb25Qb2xpY3kgdG8g
V2ViVmlld0NsaWVudDo6Y3JlYXRlVmlldwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDU4MWVmMmYwNmY0
NjIxZDZhMjI3ZTRkMTNkY2E1MjAyMDhkMDdlY2QuLmY5NzBlN2FjNjBlM2EyYTdiNzcyODRlODIw
MmNjMjE5YTY5YjJhYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTMzMDksNiArMzMwOSw4IEBACiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1h
Z2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0
dXJlVXBkYXRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9N
ZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Tb2xpZENvbG9yTGF5ZXJDaHJv
bWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NvbGlk
Q29sb3JMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1BsYXRmb3JtQ2FudmFzLmNwcCcsCkBAIC0zNDI0LDYgKzM0MjYsOCBAQAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1bGVyU3RhdGVNYWNo
aW5lLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
Y2hlZHVsZXJTdGF0ZU1hY2hpbmUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTY29wZWRUaHJlYWRQcm94eS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBs
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVk
UXVhZFN0YXRlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxp
bmdDb29yZGluYXRvckNocm9taXVtLmNwcAppbmRleCBmZjA1M2RmNjI1MjIxOWM2NjRmNjkzMWRl
Yzc1YTM0ZThjZjA3MmMwLi40YjgyZjQxZDkzMDIwODFkNmI3OGE4NWU4MGM0NjhmMDVmMzc2OThm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3Jv
bGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcApAQCAtMjcs
OCArMjcsMTUgQEAKIAogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAKKyNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkxheWVyQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBv
c2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyTGF5
ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisjaW5jbHVkZSAiY2Mv
Q0NQcm94eS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU4LDE0ICs2NSw2MSBAQCBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6flNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkKICAgICBkZWxldGUg
bV9wcml2YXRlOwogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdIb3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiwgR3JhcGhpY3NMYXllciog
aG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKQorc3RhdGljIEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExh
eWVyRm9yRnJhbWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KQogewotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQhCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIEZyYW1lKiBm
cmFtZSA9IGZyYW1lVmlldy0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBmcmFtZS0+Y29udGVudFJlbmRl
cmVyKCk7CisgICAgaWYgKCFyZW5kZXJWaWV3KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gcmVuZGVyVmlldy0+Y29tcG9zaXRvcigpLT5zY3JvbGxMYXllcigpOworI2Vsc2UKKyAgICBy
ZXR1cm4gMDsKKyNlbmRpZgogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZp
ZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyosIEdyYXBoaWNzTGF5
ZXIqIHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIpCitzdGF0aWMgdm9pZCBzY3JvbGxiYXJMYXllckRp
ZENoYW5nZShTY3JvbGxiYXIqIHNjcm9sbGJhciwgTGF5ZXJDaHJvbWl1bSogc2Nyb2xsTGF5ZXIs
IEdyYXBoaWNzTGF5ZXIqIHNjcm9sbGJhckdyYXBoaWNzTGF5ZXIpCiB7Ci0gICAgLy8gRklYTUU6
IEltcGxlbWVudCEKKyAgICBBU1NFUlQoc2Nyb2xsYmFyKTsKKyAgICBBU1NFUlQoc2Nyb2xsTGF5
ZXIpOworICAgIEFTU0VSVChzY3JvbGxiYXJHcmFwaGljc0xheWVyKTsKKworICAgIGlmIChzY3Jv
bGxiYXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkgLyogJiYgQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgp
ICovKSB7IC8vIEZJWE1FOiBhbHNvIGZpbHRlciBvdXQgc2luZ2xlIHRocmVhZCBjYXNlIHdoZW4g
d2UKKyAgICAgICAgc2Nyb2xsYmFyR3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNUb01lZGlhKDAp
OworICAgICAgICBzY3JvbGxiYXJHcmFwaGljc0xheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8U2Nyb2xsYmFyTGF5ZXJDaHJv
bWl1bT4gc2Nyb2xsYmFyTGF5ZXIgPSBTY3JvbGxiYXJMYXllckNocm9taXVtOjpjcmVhdGUoc2Ny
b2xsYmFyLCBzY3JvbGxMYXllci0+aWQoKSk7CisgICAgc2Nyb2xsYmFyR3JhcGhpY3NMYXllci0+
c2V0Q29udGVudHNUb01lZGlhKHNjcm9sbGJhckxheWVyLmdldCgpKTsKKyAgICBzY3JvbGxiYXJH
cmFwaGljc0xheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworfQorCit2b2lkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2Uo
RnJhbWVWaWV3KiBmcmFtZVZpZXcsIEdyYXBoaWNzTGF5ZXIqIGhvcml6b250YWxTY3JvbGxiYXJM
YXllcikKK3sKKyAgICBpZiAoIWhvcml6b250YWxTY3JvbGxiYXJMYXllciB8fCAhY29vcmRpbmF0
ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgTGF5ZXJDaHJvbWl1bSogc2Nyb2xsTGF5ZXIgPSBtX3ByaXZhdGUtPnNjcm9sbExheWVyKCk7
CisgICAgaWYgKCFzY3JvbGxMYXllcikgLy8gd29ya2Fyb3VuZCBjYWxsaW5nIG9yZGVyIHByb2Js
ZW0KKyAgICAgICAgc2Nyb2xsTGF5ZXIgPSBzY3JvbGxMYXllckZvckZyYW1lVmlldyhmcmFtZVZp
ZXcpLT5wbGF0Zm9ybUxheWVyKCk7CisKKyAgICBzY3JvbGxiYXJMYXllckRpZENoYW5nZShmcmFt
ZVZpZXctPmhvcml6b250YWxTY3JvbGxiYXIoKSwgc2Nyb2xsTGF5ZXIsIGhvcml6b250YWxTY3Jv
bGxiYXJMYXllcik7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1Zl
cnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIEdyYXBo
aWNzTGF5ZXIqIHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIpCit7CisgICAgaWYgKCF2ZXJ0aWNhbFNj
cm9sbGJhckxheWVyIHx8ICFjb29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyhmcmFtZVZp
ZXcpKQorICAgICAgICByZXR1cm47CisKKyAgICBMYXllckNocm9taXVtKiBzY3JvbGxMYXllciA9
IG1fcHJpdmF0ZS0+c2Nyb2xsTGF5ZXIoKTsKKyAgICBpZiAoIXNjcm9sbExheWVyKSAvLyB3b3Jr
YXJvdW5kIGNhbGxpbmcgb3JkZXIgcHJvYmxlbQorICAgICAgICBzY3JvbGxMYXllciA9IHNjcm9s
bExheWVyRm9yRnJhbWVWaWV3KGZyYW1lVmlldyktPnBsYXRmb3JtTGF5ZXIoKTsKKworICAgIHNj
cm9sbGJhckxheWVyRGlkQ2hhbmdlKGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXIoKSwgc2Ny
b2xsTGF5ZXIsIHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIpOwogfQogCiB2b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpzZXRTY3JvbGxMYXllcihHcmFwaGljc0xheWVyKiBzY3JvbGxMYXllcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBo
aWNzTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKaW5kZXggYWRjZThiOTU0NDgyZjUzZTU0OWVl
ZGRkOWJmNmIwOWZlNDIzZTY3NS4uNGNjYTgyYTg4N2JlMjg1OTlhZjE0NzQxN2VjYWJjNzg3MTk0
OWY5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKQEAgLTk3LDYgKzk3LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKik7CisgICAg
dmlydHVhbCBib29sIGhhc0NvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRz
TGF5ZXI7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVW
YWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBjb25z
dCBTdHJpbmcmLCBkb3VibGUgdGltZU9mZnNldCk7CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlQW5p
bWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5oCmluZGV4IGE1MDhjOWU2ODMyZjQxNzBiMDBjZTUxYjY1MmNkYzg0Njk2
MGY2YjguLmRjN2RkNDY3Yjc3NmE1MzIxODQ4Yzk3YzJhNTU1ODFmYzdkMDA0OTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmgKQEAgLTYxLDYgKzYxLDcgQEAgY2xhc3MgQ0NMYXllckltcGw7CiBjbGFzcyBD
Q0xheWVyVHJlZUhvc3Q7CiBjbGFzcyBDQ1RleHR1cmVVcGRhdGVyOwogY2xhc3MgR3JhcGhpY3ND
b250ZXh0M0Q7CitjbGFzcyBTY3JvbGxiYXJMYXllckNocm9taXVtOwogCiAvLyBCYXNlIGNsYXNz
IGZvciBjb21wb3NpdGVkIGxheWVycy4gU3BlY2lhbCBsYXllciB0eXBlcyBhcmUgZGVyaXZlZCBm
cm9tCiAvLyB0aGlzIGNsYXNzLgpAQCAtMjMyLDYgKzIzMyw4IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgc2V0QW5pbWF0aW9uRXZlbnQoY29uc3QgQ0NBbmltYXRpb25FdmVudCYpOwogCisgICAgdmly
dHVhbCBTY3JvbGxiYXJMYXllckNocm9taXVtKiB0b1Njcm9sbGJhckxheWVyQ2hyb21pdW0oKSB7
IHJldHVybiAwOyB9CisKIHByb3RlY3RlZDoKICAgICBmcmllbmQgY2xhc3MgQ0NMYXllckltcGw7
CiAgICAgZnJpZW5kIGNsYXNzIExheWVyVGlsZXJDaHJvbWl1bTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xs
YmFyTGF5ZXJDaHJvbWl1bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGUxMWMyODMzYjM1MjczYzNkOGI1MWJm
YTljYTk0OTM5MWRhOTU4ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uY3BwCkBAIC0wLDAg
KzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIlNjcm9sbGJhckxheWVyQ2hyb21p
dW0uaCIKKworI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorI2luY2x1ZGUgImNjL0NDU2Nyb2xsYmFy
TGF5ZXJJbXBsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxDQ0xheWVy
SW1wbD4gU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwoKQoreworICAg
IHJldHVybiBDQ1Njcm9sbGJhckxheWVySW1wbDo6Y3JlYXRlKGlkKCkpOworfQorCitQYXNzUmVm
UHRyPFNjcm9sbGJhckxheWVyQ2hyb21pdW0+IFNjcm9sbGJhckxheWVyQ2hyb21pdW06OmNyZWF0
ZShTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBpbnQgc2Nyb2xsTGF5ZXJJZCkKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNjcm9sbGJhckxheWVyQ2hyb21pdW0oc2Nyb2xsYmFy
LCBzY3JvbGxMYXllcklkKSk7Cit9CisKK1Njcm9sbGJhckxheWVyQ2hyb21pdW06OlNjcm9sbGJh
ckxheWVyQ2hyb21pdW0oU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgaW50IHNjcm9s
bExheWVySWQpCisgICAgOiBtX3Njcm9sbExheWVySWQoc2Nyb2xsTGF5ZXJJZCkKKyAgICAsIG1f
c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKHNjcm9sbGJhci0+c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKCkp
CisgICAgLCBtX2lzU2Nyb2xsYWJsZUFyZWFBY3RpdmUoc2Nyb2xsYmFyLT5pc1Njcm9sbGFibGVB
cmVhQWN0aXZlKCkpCisgICAgLCBtX2lzU2Nyb2xsVmlld1Njcm9sbGJhcihzY3JvbGxiYXItPmlz
U2Nyb2xsVmlld1Njcm9sbGJhcigpKQorICAgICwgbV9vcmllbnRhdGlvbihzY3JvbGxiYXItPm9y
aWVudGF0aW9uKCkpCisgICAgLCBtX2NvbnRyb2xTaXplKHNjcm9sbGJhci0+Y29udHJvbFNpemUo
KSkKKyAgICAsIG1fcHJlc3NlZFBhcnQoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpKQorICAgICwg
bV9ob3ZlcmVkUGFydChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkpCisgICAgLCBtX2VuYWJsZWQo
c2Nyb2xsYmFyLT5lbmFibGVkKCkpCit7CisgICAgc2Nyb2xsYmFyLT5nZXRUaWNrbWFya3MobV90
aWNrbWFya3MpOworfQorCit2b2lkIFNjcm9sbGJhckxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0
aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQoreworICAgIExheWVyQ2hyb21pdW06OnB1c2hQcm9w
ZXJ0aWVzVG8obGF5ZXIpOworCisgICAgQ0NTY3JvbGxiYXJMYXllckltcGwqIHNjcm9sbGJhckxh
eWVyID0gc3RhdGljX2Nhc3Q8Q0NTY3JvbGxiYXJMYXllckltcGwqPihsYXllcik7CisKKyAgICBz
Y3JvbGxiYXJMYXllci0+c2V0U2Nyb2xsYmFyT3ZlcmxheVN0eWxlKG1fc2Nyb2xsYmFyT3Zlcmxh
eVN0eWxlKTsKKyAgICBzY3JvbGxiYXJMYXllci0+c2V0VGlja21hcmtzKG1fdGlja21hcmtzKTsK
KyAgICBzY3JvbGxiYXJMYXllci0+c2V0SXNTY3JvbGxhYmxlQXJlYUFjdGl2ZShtX2lzU2Nyb2xs
YWJsZUFyZWFBY3RpdmUpOworICAgIHNjcm9sbGJhckxheWVyLT5zZXRJc1Njcm9sbFZpZXdTY3Jv
bGxiYXIobV9pc1Njcm9sbFZpZXdTY3JvbGxiYXIpOworCisgICAgc2Nyb2xsYmFyTGF5ZXItPnNl
dE9yaWVudGF0aW9uKG1fb3JpZW50YXRpb24pOworCisgICAgc2Nyb2xsYmFyTGF5ZXItPnNldENv
bnRyb2xTaXplKG1fY29udHJvbFNpemUpOworCisgICAgc2Nyb2xsYmFyTGF5ZXItPnNldFByZXNz
ZWRQYXJ0KG1fcHJlc3NlZFBhcnQpOworICAgIHNjcm9sbGJhckxheWVyLT5zZXRIb3ZlcmVkUGFy
dChtX2hvdmVyZWRQYXJ0KTsKKworICAgIHNjcm9sbGJhckxheWVyLT5zZXRFbmFibGVkKG1fZW5h
YmxlZCk7Cit9CisKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3Jv
bGxiYXJMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTI2MGIwOTU2Y2E5
MjQxZDg3NDIyMzA3MjA5Y2RkYzY2YjgwZTZjZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0u
aApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgU2Nyb2xsYmFyTGF5
ZXJDaHJvbWl1bV9oCisjZGVmaW5lIFNjcm9sbGJhckxheWVyQ2hyb21pdW1faAorCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgor
I2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
U2Nyb2xsYmFyVGhlbWVDbGllbnQ7CisKK2NsYXNzIFNjcm9sbGJhckxheWVyQ2hyb21pdW0gOiBw
dWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgdmlydHVhbCBQYXNzT3duUHRyPEND
TGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNj
cm9sbGJhckxheWVyQ2hyb21pdW0+IGNyZWF0ZShTY3JvbGxiYXJUaGVtZUNsaWVudCosIGludCBz
Y3JvbGxMYXllcklkKTsKKworICAgIHZpcnR1YWwgdm9pZCBwdXNoUHJvcGVydGllc1RvKENDTGF5
ZXJJbXBsKik7CisKKyAgICBpbnQgc2Nyb2xsTGF5ZXJJZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
b2xsTGF5ZXJJZDsgfQorICAgIHZpcnR1YWwgU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bSogdG9TY3Jv
bGxiYXJMYXllckNocm9taXVtKCkgeyByZXR1cm4gdGhpczsgfQorCitwcm90ZWN0ZWQ6CisgICAg
U2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bShTY3JvbGxiYXJUaGVtZUNsaWVudCosIGludCBzY3JvbGxM
YXllcklkKTsKKworcHJpdmF0ZToKKyAgICBpbnQgbV9zY3JvbGxMYXllcklkOworCisgICAgU2Ny
b2xsYmFyT3ZlcmxheVN0eWxlIG1fc2Nyb2xsYmFyT3ZlcmxheVN0eWxlOworICAgIFZlY3RvcjxJ
bnRSZWN0PiBtX3RpY2ttYXJrczsKKyAgICBib29sIG1faXNTY3JvbGxhYmxlQXJlYUFjdGl2ZTsK
KyAgICBib29sIG1faXNTY3JvbGxWaWV3U2Nyb2xsYmFyOworCisgICAgU2Nyb2xsYmFyT3JpZW50
YXRpb24gbV9vcmllbnRhdGlvbjsKKworICAgIFNjcm9sbGJhckNvbnRyb2xTaXplIG1fY29udHJv
bFNpemU7CisKKyAgICBTY3JvbGxiYXJQYXJ0IG1fcHJlc3NlZFBhcnQ7CisgICAgU2Nyb2xsYmFy
UGFydCBtX2hvdmVyZWRQYXJ0OworCisgICAgYm9vbCBtX2VuYWJsZWQ7Cit9OworCit9CisjZW5k
aWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5
bmNocm9uaXplci5jcHAKaW5kZXggZWJkMWFjNzMwYjE5NDU0MWMyYjRjNGVlZjFmNmNjYTU5OWI0
ZTVjOC4uMDdmMDRiMzcyYTQ2OTA4MGYzMGI2YTFkMDgzNWQ3M2MyYzUwYmJjZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9u
aXplci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VHJlZVN5bmNocm9uaXplci5jcHAKQEAgLTI4LDIwICsyOCwyOCBAQAogI2luY2x1ZGUgIlRyZWVT
eW5jaHJvbml6ZXIuaCIKIAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJT
Y3JvbGxiYXJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNp
bmNsdWRlICJjYy9DQ1Njcm9sbGJhckxheWVySW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBUcmVl
U3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKExheWVyQ2hyb21pdW0qIGxheWVyQ2hyb21p
dW1Sb290LCBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBvbGRDQ0xheWVySW1wbFJvb3QpCiB7Ci0g
ICAgQ0NMYXllckltcGxNYXAgbWFwOwotICAgIGNvbGxlY3RFeGlzdGluZ0NDTGF5ZXJJbXBsUmVj
dXJzaXZlKG1hcCwgb2xkQ0NMYXllckltcGxSb290KTsKKyAgICBPd25QdHJDQ0xheWVySW1wbE1h
cCBvbGRMYXllcnM7CisgICAgUmF3UHRyQ0NMYXllckltcGxNYXAgbmV3TGF5ZXJzOwogCi0gICAg
cmV0dXJuIHN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShtYXAsIGxheWVyQ2hyb21pdW1Sb290KTsK
KyAgICBjb2xsZWN0RXhpc3RpbmdDQ0xheWVySW1wbFJlY3Vyc2l2ZShvbGRMYXllcnMsIG9sZEND
TGF5ZXJJbXBsUm9vdCk7CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IG5ld1RyZWUgPSBzeW5j
aHJvbml6ZVRyZWVSZWN1cnNpdmUobmV3TGF5ZXJzLCBvbGRMYXllcnMsIGxheWVyQ2hyb21pdW1S
b290KTsKKworICAgIHVwZGF0ZVNjcm9sbGJhckxheWVyUG9pbnRlcnNSZWN1cnNpdmUobmV3TGF5
ZXJzLCBsYXllckNocm9taXVtUm9vdCk7CisKKyAgICByZXR1cm4gbmV3VHJlZS5yZWxlYXNlKCk7
CiB9CiAKLXZvaWQgVHJlZVN5bmNocm9uaXplcjo6Y29sbGVjdEV4aXN0aW5nQ0NMYXllckltcGxS
ZWN1cnNpdmUoQ0NMYXllckltcGxNYXAmIG1hcCwgUGFzc093blB0cjxDQ0xheWVySW1wbD4gcG9w
Q0NMYXllckltcGwpCit2b2lkIFRyZWVTeW5jaHJvbml6ZXI6OmNvbGxlY3RFeGlzdGluZ0NDTGF5
ZXJJbXBsUmVjdXJzaXZlKE93blB0ckNDTGF5ZXJJbXBsTWFwJiBvbGRMYXllcnMsIFBhc3NPd25Q
dHI8Q0NMYXllckltcGw+IHBvcENDTGF5ZXJJbXBsKQogewogICAgIE93blB0cjxDQ0xheWVySW1w
bD4gY2NMYXllckltcGwgPSBwb3BDQ0xheWVySW1wbDsKIApAQCAtNTAsNDIgKzU4LDU4IEBAIHZv
aWQgVHJlZVN5bmNocm9uaXplcjo6Y29sbGVjdEV4aXN0aW5nQ0NMYXllckltcGxSZWN1cnNpdmUo
Q0NMYXllckltcGxNYXAmIG1hcCwKIAogICAgIFZlY3RvcjxPd25QdHI8Q0NMYXllckltcGw+ID4m
IGNoaWxkcmVuID0gY2NMYXllckltcGwtPm1fY2hpbGRyZW47CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkKLSAgICAgICAgY29sbGVjdEV4aXN0aW5nQ0NM
YXllckltcGxSZWN1cnNpdmUobWFwLCBjaGlsZHJlbltpXS5yZWxlYXNlKCkpOworICAgICAgICBj
b2xsZWN0RXhpc3RpbmdDQ0xheWVySW1wbFJlY3Vyc2l2ZShvbGRMYXllcnMsIGNoaWxkcmVuW2ld
LnJlbGVhc2UoKSk7CiAKLSAgICBjb2xsZWN0RXhpc3RpbmdDQ0xheWVySW1wbFJlY3Vyc2l2ZSht
YXAsIGNjTGF5ZXJJbXBsLT5tX21hc2tMYXllci5yZWxlYXNlKCkpOwotICAgIGNvbGxlY3RFeGlz
dGluZ0NDTGF5ZXJJbXBsUmVjdXJzaXZlKG1hcCwgY2NMYXllckltcGwtPm1fcmVwbGljYUxheWVy
LnJlbGVhc2UoKSk7CisgICAgY29sbGVjdEV4aXN0aW5nQ0NMYXllckltcGxSZWN1cnNpdmUob2xk
TGF5ZXJzLCBjY0xheWVySW1wbC0+bV9tYXNrTGF5ZXIucmVsZWFzZSgpKTsKKyAgICBjb2xsZWN0
RXhpc3RpbmdDQ0xheWVySW1wbFJlY3Vyc2l2ZShvbGRMYXllcnMsIGNjTGF5ZXJJbXBsLT5tX3Jl
cGxpY2FMYXllci5yZWxlYXNlKCkpOwogCiAgICAgaW50IGlkID0gY2NMYXllckltcGwtPmlkKCk7
Ci0gICAgbWFwLnNldChpZCwgY2NMYXllckltcGwucmVsZWFzZSgpKTsKKyAgICBvbGRMYXllcnMu
c2V0KGlkLCBjY0xheWVySW1wbC5yZWxlYXNlKCkpOwogfQogCi1QYXNzT3duUHRyPENDTGF5ZXJJ
bXBsPiBUcmVlU3luY2hyb25pemVyOjpyZXVzZU9yQ3JlYXRlQ0NMYXllckltcGwoQ0NMYXllcklt
cGxNYXAmIG1hcCwgTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCitQYXNzT3duUHRyPENDTGF5ZXJJbXBs
PiBUcmVlU3luY2hyb25pemVyOjpyZXVzZU9yQ3JlYXRlQ0NMYXllckltcGwoUmF3UHRyQ0NMYXll
ckltcGxNYXAmIG5ld0xheWVycywgT3duUHRyQ0NMYXllckltcGxNYXAmIG9sZExheWVycywgTGF5
ZXJDaHJvbWl1bSogbGF5ZXIpCiB7Ci0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVySW1w
bCA9IG1hcC50YWtlKGxheWVyLT5pZCgpKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNjTGF5
ZXJJbXBsID0gb2xkTGF5ZXJzLnRha2UobGF5ZXItPmlkKCkpOwogCiAgICAgaWYgKCFjY0xheWVy
SW1wbCkKLSAgICAgICAgcmV0dXJuIGxheWVyLT5jcmVhdGVDQ0xheWVySW1wbCgpOworICAgICAg
ICBjY0xheWVySW1wbCA9IGxheWVyLT5jcmVhdGVDQ0xheWVySW1wbCgpOwogCisgICAgbmV3TGF5
ZXJzLnNldChsYXllci0+aWQoKSwgY2NMYXllckltcGwuZ2V0KCkpOwogICAgIHJldHVybiBjY0xh
eWVySW1wbC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NPd25QdHI8Q0NMYXllckltcGw+IFRyZWVTeW5j
aHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShDQ0xheWVySW1wbE1hcCYgbWFwLCBM
YXllckNocm9taXVtKiBsYXllcikKK1Bhc3NPd25QdHI8Q0NMYXllckltcGw+IFRyZWVTeW5jaHJv
bml6ZXI6OnN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShSYXdQdHJDQ0xheWVySW1wbE1hcCYgbmV3
TGF5ZXJzLCBPd25QdHJDQ0xheWVySW1wbE1hcCYgb2xkTGF5ZXJzLCBMYXllckNocm9taXVtKiBs
YXllcikKIHsKICAgICBpZiAoIWxheWVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IE93blB0cjxDQ0xheWVySW1wbD4gY2NMYXllckltcGwgPSByZXVzZU9yQ3JlYXRlQ0NMYXllcklt
cGwobWFwLCBsYXllcik7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVySW1wbCA9IHJl
dXNlT3JDcmVhdGVDQ0xheWVySW1wbChuZXdMYXllcnMsIG9sZExheWVycywgbGF5ZXIpOwogCiAg
ICAgY2NMYXllckltcGwtPmNsZWFyQ2hpbGRMaXN0KCk7CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+JiBjaGlsZHJlbiA9IGxheWVyLT5jaGlsZHJlbigpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyArK2kpCi0gICAgICAgIGNjTGF5
ZXJJbXBsLT5hZGRDaGlsZChzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUobWFwLCBjaGlsZHJlbltp
XS5nZXQoKSkpOworICAgICAgICBjY0xheWVySW1wbC0+YWRkQ2hpbGQoc3luY2hyb25pemVUcmVl
UmVjdXJzaXZlKG5ld0xheWVycywgb2xkTGF5ZXJzLCBjaGlsZHJlbltpXS5nZXQoKSkpOwogCi0g
ICAgY2NMYXllckltcGwtPnNldE1hc2tMYXllcihzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUobWFw
LCBsYXllci0+bWFza0xheWVyKCkpKTsKLSAgICBjY0xheWVySW1wbC0+c2V0UmVwbGljYUxheWVy
KHN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShtYXAsIGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkpOwor
ICAgIGNjTGF5ZXJJbXBsLT5zZXRNYXNrTGF5ZXIoc3luY2hyb25pemVUcmVlUmVjdXJzaXZlKG5l
d0xheWVycywgb2xkTGF5ZXJzLCBsYXllci0+bWFza0xheWVyKCkpKTsKKyAgICBjY0xheWVySW1w
bC0+c2V0UmVwbGljYUxheWVyKHN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShuZXdMYXllcnMsIG9s
ZExheWVycywgbGF5ZXItPnJlcGxpY2FMYXllcigpKSk7CiAKICAgICBsYXllci0+cHVzaFByb3Bl
cnRpZXNUbyhjY0xheWVySW1wbC5nZXQoKSk7CiAgICAgcmV0dXJuIGNjTGF5ZXJJbXBsLnJlbGVh
c2UoKTsKIH0KIAordm9pZCBUcmVlU3luY2hyb25pemVyOjp1cGRhdGVTY3JvbGxiYXJMYXllclBv
aW50ZXJzUmVjdXJzaXZlKGNvbnN0IFJhd1B0ckNDTGF5ZXJJbXBsTWFwJiBuZXdMYXllcnMsIExh
eWVyQ2hyb21pdW0qIGxheWVyKQoreworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiYgY2hpbGRyZW4gPSBsYXllci0+Y2hpbGRyZW4oKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICB1cGRhdGVTY3JvbGxiYXJM
YXllclBvaW50ZXJzUmVjdXJzaXZlKG5ld0xheWVycywgY2hpbGRyZW5baV0uZ2V0KCkpOworCisg
ICAgU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bSogc2Nyb2xsYmFyTGF5ZXIgPSBsYXllci0+dG9TY3Jv
bGxiYXJMYXllckNocm9taXVtKCk7CisgICAgaWYgKCFzY3JvbGxiYXJMYXllcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgQ0NTY3JvbGxiYXJMYXllckltcGwqIGNjU2Nyb2xsYmFyTGF5ZXJJbXBs
ID0gc3RhdGljX2Nhc3Q8Q0NTY3JvbGxiYXJMYXllckltcGwqPihuZXdMYXllcnMuZ2V0KHNjcm9s
bGJhckxheWVyLT5pZCgpKSk7CisgICAgQVNTRVJUKGNjU2Nyb2xsYmFyTGF5ZXJJbXBsKTsKKyAg
ICBjY1Njcm9sbGJhckxheWVySW1wbC0+c2V0U2Nyb2xsTGF5ZXIobmV3TGF5ZXJzLmdldChzY3Jv
bGxiYXJMYXllci0+c2Nyb2xsTGF5ZXJJZCgpKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RyZWVTeW5jaHJvbml6ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuaAppbmRleCAxMzQ3MDhjYTQzYmQ4OWVjYmRmMmZkMjE1
OTJmZDA3Mjg2ZGNjMTc5Li4xZGJlYjhiZWRjYWExMTEzYzA2YWI2NWI4YzcyMzZjNTFkZDFjZWEz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
cmVlU3luY2hyb25pemVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5oCkBAIC00NiwxMiArNDYsMTQgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBUcmVlU3luY2hyb25pemVyKCk7IC8vIE5vdCBpbnN0YW50aWFibGUuCiAK
LSAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBPd25QdHI8Q0NMYXllckltcGw+ID4gQ0NMYXllcklt
cGxNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgT3duUHRyPENDTGF5ZXJJbXBsPiA+IE93
blB0ckNDTGF5ZXJJbXBsTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIENDTGF5ZXJJbXBs
Kj4gUmF3UHRyQ0NMYXllckltcGxNYXA7CiAKICAgICAvLyBEZWNsYXJlZCBhcyBzdGF0aWMgbWVt
YmVyIGZ1bmN0aW9ucyBzbyB0aGV5IGNhbiBhY2Nlc3MgZnVuY3Rpb25zIG9uIExheWVyQ2hyb21p
dW0gYXMgYSBmcmllbmQgY2xhc3MuCi0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NMYXllckltcGw+
IHJldXNlT3JDcmVhdGVDQ0xheWVySW1wbChDQ0xheWVySW1wbE1hcCYsIExheWVyQ2hyb21pdW0q
KTsKLSAgICBzdGF0aWMgdm9pZCBjb2xsZWN0RXhpc3RpbmdDQ0xheWVySW1wbFJlY3Vyc2l2ZShD
Q0xheWVySW1wbE1hcCYsIFBhc3NPd25QdHI8Q0NMYXllckltcGw+KTsKLSAgICBzdGF0aWMgUGFz
c093blB0cjxDQ0xheWVySW1wbD4gc3luY2hyb25pemVUcmVlUmVjdXJzaXZlKENDTGF5ZXJJbXBs
TWFwJiwgTGF5ZXJDaHJvbWl1bSopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJJbXBs
PiByZXVzZU9yQ3JlYXRlQ0NMYXllckltcGwoUmF3UHRyQ0NMYXllckltcGxNYXAmIG5ld0xheWVy
cywgT3duUHRyQ0NMYXllckltcGxNYXAmIG9sZExheWVycywgTGF5ZXJDaHJvbWl1bSopOworICAg
IHN0YXRpYyB2b2lkIGNvbGxlY3RFeGlzdGluZ0NDTGF5ZXJJbXBsUmVjdXJzaXZlKE93blB0ckND
TGF5ZXJJbXBsTWFwJiBvbGRMYXllcnMsIFBhc3NPd25QdHI8Q0NMYXllckltcGw+KTsKKyAgICBz
dGF0aWMgUGFzc093blB0cjxDQ0xheWVySW1wbD4gc3luY2hyb25pemVUcmVlUmVjdXJzaXZlKFJh
d1B0ckNDTGF5ZXJJbXBsTWFwJiBuZXdMYXllcnMsIE93blB0ckNDTGF5ZXJJbXBsTWFwJiBvbGRM
YXllcnMsIExheWVyQ2hyb21pdW0qKTsKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVTY3JvbGxiYXJM
YXllclBvaW50ZXJzUmVjdXJzaXZlKGNvbnN0IFJhd1B0ckNDTGF5ZXJJbXBsTWFwJiBuZXdMYXll
cnMsIExheWVyQ2hyb21pdW0qKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Ny
b2xsYmFyTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YmQ1NDFhZDZm
Zjk3YzY5YmUwOWU5ZGRhNjE4Yjc1MzVkNzRiZjczCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJMYXllcklt
cGwuY3BwCkBAIC0wLDAgKzEsMjc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiQ0NTY3JvbGxiYXJM
YXllckltcGwuaCIKKworI2luY2x1ZGUgIkNDVGlsZURyYXdRdWFkLmgiCisjaW5jbHVkZSAiTGF5
ZXJSZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybUNhbnZhcy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxDQ1Njcm9sbGJhckxheWVySW1wbD4gQ0NT
Y3JvbGxiYXJMYXllckltcGw6OmNyZWF0ZShpbnQgaWQpCit7CisgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBDQ1Njcm9sbGJhckxheWVySW1wbChpZCkpOworfQorCitDQ1Njcm9sbGJhckxheWVySW1w
bDo6Q0NTY3JvbGxiYXJMYXllckltcGwoaW50IGlkKQorICAgIDogQ0NMYXllckltcGwoaWQpCisg
ICAgLCBtX3Njcm9sbExheWVyKDApCisgICAgLCBtX3Njcm9sbGJhcih0aGlzKQoreworfQorCit2
b2lkIENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjp3aWxsRHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0q
IGxheWVyUmVuZGVyZXIpCit7CisgICAgaWYgKGJvdW5kcygpLmlzRW1wdHkoKSB8fCBjb250ZW50
Qm91bmRzKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdGV4dHVy
ZSkKKyAgICAgICAgbV90ZXh0dXJlID0gTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShsYXllclJlbmRl
cmVyLT5yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIoKSk7CisKKyAgICBJbnRTaXplIHRleHR1
cmVTaXplID0gY29udGVudEJvdW5kcygpOworICAgIGlmICghbV90ZXh0dXJlLT5yZXNlcnZlKHRl
eHR1cmVTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFBsYXRmb3JtQ2FudmFzIGNhbnZhczsKKyAgICBjYW52YXMucmVzaXplKHRleHR1cmVTaXpl
KTsKKyAgICB7CisgICAgICAgIFBsYXRmb3JtQ2FudmFzOjpQYWludGVyIHBhaW50ZXIoJmNhbnZh
cywgUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OkdyYXlzY2FsZVRleHQpOworICAgICAgICBwYWlu
dChwYWludGVyLmNvbnRleHQoKSk7CisgICAgfQorCisgICAgeworICAgICAgICBQbGF0Zm9ybUNh
bnZhczo6QXV0b0xvY2tlciBsb2NrZXIoJmNhbnZhcyk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOworICAgICAgICBtX3RleHR1
cmUtPmJpbmRUZXh0dXJlKGNvbnRleHQsIGxheWVyUmVuZGVyZXItPnJlbmRlclN1cmZhY2VUZXh0
dXJlQWxsb2NhdG9yKCkpOworCisgICAgICAgIC8vIEZJWE1FOiBTa2lhIHVzZXMgQkdSQSBhY3R1
YWxseSwgd2UgY29ycmVjdCB0aGF0IHdpdGggdGhlIHN3aXp6bGUgcGl4ZWwgc2hhZGVyLgorICAg
ICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgMCwgbV90ZXh0dXJlLT5mb3JtYXQoKSwgY2FudmFzLnNpemUoKS53aWR0aCgp
LCBjYW52YXMuc2l6ZSgpLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGxvY2tlci5waXhlbHMoKSkpOworICAgIH0K
K30KKwordm9pZCBDQ1Njcm9sbGJhckxheWVySW1wbDo6YXBwZW5kUXVhZHMoQ0NRdWFkTGlzdCYg
cXVhZExpc3QsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUpCit7Cisg
ICAgaWYgKCFtX3RleHR1cmUtPmlzUmVzZXJ2ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
SW50UmVjdCBxdWFkUmVjdChJbnRQb2ludCgpLCBib3VuZHMoKSk7CisgICAgcXVhZExpc3QuYXBw
ZW5kKENDVGlsZURyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgcXVh
ZFJlY3QsIG1fdGV4dHVyZS0+dGV4dHVyZUlkKCksIEludFBvaW50KCksIG1fdGV4dHVyZS0+c2l6
ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0
cnVlKSk7Cit9CisKK3ZvaWQgQ0NTY3JvbGxiYXJMYXllckltcGw6OmRpZERyYXcoKQoreworICAg
IG1fdGV4dHVyZS0+dW5yZXNlcnZlKCk7Cit9CisKK3ZvaWQgQ0NTY3JvbGxiYXJMYXllckltcGw6
OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBTY3JvbGxiYXJUaGVtZSog
dGhlbWUgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKTsgLy8gRklYTUU6IHNob3VsZCBtYWtlIGlt
cGwtc2lkZSBjbG9uZSBpZiBuZWVkZWQKKworICAgIGNvbnRleHQtPmNsZWFyUmVjdChJbnRSZWN0
KEludFBvaW50KCksIGNvbnRlbnRCb3VuZHMoKSkpOworICAgIHRoZW1lLT5wYWludCgmbV9zY3Jv
bGxiYXIsIGNvbnRleHQsIEludFJlY3QoSW50UG9pbnQoKSwgY29udGVudEJvdW5kcygpKSk7Cit9
CisKKworaW50IENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6eCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGZyYW1lUmVjdCgpLngoKTsKK30KKworaW50IENDU2Nyb2xsYmFyTGF5ZXJJ
bXBsOjpDQ1Njcm9sbGJhcjo6eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZyYW1lUmVjdCgpLnko
KTsKK30KKworaW50IENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6d2lkdGgoKSBj
b25zdAoreworICAgIHJldHVybiBmcmFtZVJlY3QoKS53aWR0aCgpOworfQorCitpbnQgQ0NTY3Jv
bGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpoZWlnaHQoKSBjb25zdAoreworICAgIHJldHVy
biBmcmFtZVJlY3QoKS5oZWlnaHQoKTsKK30KKworSW50U2l6ZSBDQ1Njcm9sbGJhckxheWVySW1w
bDo6Q0NTY3JvbGxiYXI6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBmcmFtZVJlY3QoKS5z
aXplKCk7Cit9CisKK0ludFBvaW50IENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6
bG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBmcmFtZVJlY3QoKS5sb2NhdGlvbigpOwor
fQorCitTY3JvbGxWaWV3KiBDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OnBhcmVu
dCgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK1Njcm9sbFZpZXcqIENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6cm9vdCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K3ZvaWQgQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpzZXRGcmFtZVJlY3QoY29u
c3QgSW50UmVjdCYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0ludFJlY3Qg
Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpmcmFtZVJlY3QoKSBjb25zdAorewor
ICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIG1fb3duZXItPmNvbnRlbnRCb3VuZHMoKSk7
Cit9CisKK3ZvaWQgQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjppbnZhbGlkYXRl
KCkKK3sKKyAgICBpbnZhbGlkYXRlUmVjdChmcmFtZVJlY3QoKSk7Cit9CisKK3ZvaWQgQ0NTY3Jv
bGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0
JikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworU2Nyb2xsYmFyT3ZlcmxheVN0
eWxlIENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6c2Nyb2xsYmFyT3ZlcmxheVN0
eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9vd25lci0+bV9zY3JvbGxiYXJPdmVybGF5U3R5
bGU7Cit9CisKK3ZvaWQgQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpnZXRUaWNr
bWFya3MoVmVjdG9yPEludFJlY3Q+JiB0aWNrbWFya3MpIGNvbnN0Cit7CisgICAgdGlja21hcmtz
ID0gbV9vd25lci0+bV90aWNrbWFya3M7Cit9CisKK2Jvb2wgQ0NTY3JvbGxiYXJMYXllckltcGw6
OkNDU2Nyb2xsYmFyOjppc1Njcm9sbGFibGVBcmVhQWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9vd25lci0+bV9pc1Njcm9sbGFibGVBcmVhQWN0aXZlOworfQorCitib29sIENDU2Nyb2xs
YmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6aXNTY3JvbGxWaWV3U2Nyb2xsYmFyKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9vd25lci0+bV9pc1Njcm9sbFZpZXdTY3JvbGxiYXI7Cit9CisKK0lu
dFBvaW50IENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6Y29udmVydEZyb21Db250
YWluaW5nV2luZG93KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkKK3sKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gd2luZG93UG9pbnQ7Cit9CisKK2Jvb2wgQ0NTY3Jv
bGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjppc0N1c3RvbVNjcm9sbGJhcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTY3JvbGxiYXJPcmllbnRhdGlvbiBDQ1Njcm9sbGJh
ckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6Om9yaWVudGF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9vd25lci0+bV9vcmllbnRhdGlvbjsKK30KKworaW50IENDU2Nyb2xsYmFyTGF5ZXJJbXBs
OjpDQ1Njcm9sbGJhcjo6dmFsdWUoKSBjb25zdAoreworICAgIGlmIChvcmllbnRhdGlvbigpID09
IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBtX293bmVyLT5tX3Njcm9sbExh
eWVyLT5zY3JvbGxQb3NpdGlvbigpLngoKSArIG1fb3duZXItPm1fc2Nyb2xsTGF5ZXItPnNjcm9s
bERlbHRhKCkud2lkdGgoKTsKKyAgICByZXR1cm4gbV9vd25lci0+bV9zY3JvbGxMYXllci0+c2Ny
b2xsUG9zaXRpb24oKS55KCkgKyBtX293bmVyLT5tX3Njcm9sbExheWVyLT5zY3JvbGxEZWx0YSgp
LmhlaWdodCgpOworfQorCitmbG9hdCBDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6
OmN1cnJlbnRQb3MoKSBjb25zdAoreworICAgIHJldHVybiB2YWx1ZSgpOworfQorCitpbnQgQ0NT
Y3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjp2aXNpYmxlU2l6ZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHRvdGFsU2l6ZSgpIC0gbWF4aW11bSgpOworfQorCitpbnQgQ0NTY3JvbGxiYXJM
YXllckltcGw6OkNDU2Nyb2xsYmFyOjp0b3RhbFNpemUoKSBjb25zdAoreworICAgIC8vIENvcHkg
JiBwYXN0ZSBmcm9tIENDTGF5ZXJUcmVlSG9zdEltcGwuLi4KKyAgICAvLyBGSVhNRTogSGFyZGNv
ZGluZyB0aGUgZmlyc3QgY2hpbGQgaGVyZSBpcyB3ZWlyZC4gVGhpbmsgb2YKKyAgICAvLyBhIGNs
ZWFuZXIgd2F5IHRvIGdldCB0aGUgY29udGVudEJvdW5kcyBvbiB0aGUgSW1wbCBzaWRlLgorICAg
IGlmIChvcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIHJldHVy
biBtX293bmVyLT5tX3Njcm9sbExheWVyLT5jaGlsZHJlbigpWzBdLT5jb250ZW50Qm91bmRzKCku
d2lkdGgoKTsKKyAgICByZXR1cm4gbV9vd25lci0+bV9zY3JvbGxMYXllci0+Y2hpbGRyZW4oKVsw
XS0+Y29udGVudEJvdW5kcygpLmhlaWdodCgpOworfQorCitpbnQgQ0NTY3JvbGxiYXJMYXllcklt
cGw6OkNDU2Nyb2xsYmFyOjptYXhpbXVtKCkgY29uc3QKK3sKKyAgICBpZiAob3JpZW50YXRpb24o
KSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gbV9vd25lci0+bV9zY3Jv
bGxMYXllci0+bWF4U2Nyb2xsUG9zaXRpb24oKS53aWR0aCgpOworICAgIHJldHVybiBtX293bmVy
LT5tX3Njcm9sbExheWVyLT5tYXhTY3JvbGxQb3NpdGlvbigpLmhlaWdodCgpOworfQorCitTY3Jv
bGxiYXJDb250cm9sU2l6ZSBDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OmNvbnRy
b2xTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9vd25lci0+bV9jb250cm9sU2l6ZTsKK30K
KworaW50IENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6bGluZVN0ZXAoKSBjb25z
dAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitpbnQg
Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpwYWdlU3RlcCgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1Njcm9sbGJhclBh
cnQgQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpwcmVzc2VkUGFydCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fb3duZXItPm1fcHJlc3NlZFBhcnQ7Cit9CisKK1Njcm9sbGJhclBh
cnQgQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpob3ZlcmVkUGFydCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fb3duZXItPm1faG92ZXJlZFBhcnQ7Cit9CisKK3ZvaWQgQ0NTY3Jv
bGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpzdHlsZUNoYW5nZWQoKQoreworfQorCitib29s
IENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6ZW5hYmxlZCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fb3duZXItPm1fZW5hYmxlZDsKK30KKwordm9pZCBDQ1Njcm9sbGJhckxheWVy
SW1wbDo6Q0NTY3JvbGxiYXI6OnNldEVuYWJsZWQoYm9vbCkKK3sKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKworfQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2ZjAwNTM2
MDk1OWNiNDRhYWJhNDQ4NmQ1NTExMDE4MmYwZThjN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVy
SW1wbC5oCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1Njcm9sbGJhckxheWVy
SW1wbF9oCisjZGVmaW5lIENDU2Nyb2xsYmFyTGF5ZXJJbXBsX2gKKworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkNDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAi
TWFuYWdlZFRleHR1cmUuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUNsaWVudC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIFNjcm9s
bFZpZXc7CisKK2NsYXNzIENDU2Nyb2xsYmFyTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBs
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1Njcm9sbGJhckxheWVySW1wbD4g
Y3JlYXRlKGludCBpZCk7CisKKyAgICB2b2lkIHNldFNjcm9sbGJhck92ZXJsYXlTdHlsZShTY3Jv
bGxiYXJPdmVybGF5U3R5bGUgc2Nyb2xsYmFyT3ZlcmxheVN0eWxlKSB7IG1fc2Nyb2xsYmFyT3Zl
cmxheVN0eWxlID0gc2Nyb2xsYmFyT3ZlcmxheVN0eWxlOyB9CisgICAgdm9pZCBzZXRUaWNrbWFy
a3MoY29uc3QgVmVjdG9yPEludFJlY3Q+JiB0aWNrbWFya3MpIHsgbV90aWNrbWFya3MgPSB0aWNr
bWFya3M7IH0KKyAgICB2b2lkIHNldElzU2Nyb2xsYWJsZUFyZWFBY3RpdmUoYm9vbCBpc1Njcm9s
bGFibGVBcmVhQWN0aXZlKSB7IG1faXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSA9IGlzU2Nyb2xsYWJs
ZUFyZWFBY3RpdmU7IH0KKyAgICB2b2lkIHNldElzU2Nyb2xsVmlld1Njcm9sbGJhcihib29sIGlz
U2Nyb2xsVmlld1Njcm9sbGJhcikgeyBtX2lzU2Nyb2xsVmlld1Njcm9sbGJhciA9IGlzU2Nyb2xs
Vmlld1Njcm9sbGJhcjsgfQorCisgICAgdm9pZCBzZXRPcmllbnRhdGlvbihTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdGlvbikgeyBtX29yaWVudGF0aW9uID0gb3JpZW50YXRpb247IH0KKwor
ICAgIHZvaWQgc2V0Q29udHJvbFNpemUoU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUp
IHsgbV9jb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplOyB9CisKKyAgICB2b2lkIHNldFByZXNzZWRQ
YXJ0KFNjcm9sbGJhclBhcnQgcHJlc3NlZFBhcnQpIHsgbV9wcmVzc2VkUGFydCA9IHByZXNzZWRQ
YXJ0OyB9CisgICAgdm9pZCBzZXRIb3ZlcmVkUGFydChTY3JvbGxiYXJQYXJ0IGhvdmVyZWRQYXJ0
KSB7IG1faG92ZXJlZFBhcnQgPSBob3ZlcmVkUGFydDsgfQorCisgICAgdm9pZCBzZXRFbmFibGVk
KGJvb2wgZW5hYmxlZCkgeyBtX2VuYWJsZWQgPSBlbmFibGVkOyB9CisKKworICAgIENDTGF5ZXJJ
bXBsKiBzY3JvbGxMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsTGF5ZXI7IH0KKyAgICB2
b2lkIHNldFNjcm9sbExheWVyKENDTGF5ZXJJbXBsKiBzY3JvbGxMYXllcikgeyBtX3Njcm9sbExh
eWVyID0gc2Nyb2xsTGF5ZXI7IH0KKworICAgIHZpcnR1YWwgdm9pZCB3aWxsRHJhdyhMYXllclJl
bmRlcmVyQ2hyb21pdW0qKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kUXVhZHMoQ0NRdWFkTGlz
dCYsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKik7CisgICAgdmlydHVhbCB2b2lkIGRpZERyYXco
KTsKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IENDU2Nyb2xsYmFyTGF5ZXJJbXBsKGludCBp
ZCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqKTsKKworICAg
IENDTGF5ZXJJbXBsKiBtX3Njcm9sbExheWVyOworICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4g
bV90ZXh0dXJlOworCisgICAgLy8gbmVzdGVkIGNsYXNzIG9ubHkgdG8gYXZvaWQgbmFtZXNwYWNl
IHByb2JsZW0KKyAgICBjbGFzcyBDQ1Njcm9sbGJhciA6IHB1YmxpYyBTY3JvbGxiYXJUaGVtZUNs
aWVudCB7CisgICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBDQ1Njcm9sbGJhcihDQ1Njcm9s
bGJhckxheWVySW1wbCogb3duZXIpIDogbV9vd25lcihvd25lcikgeyB9CisKKyAgICAgICAgLy8g
U2Nyb2xsYmFyVGhlbWVDbGllbnQgaW1wbGVtZW50YXRpb24KKyAgICAgICAgdmlydHVhbCBpbnQg
eCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGludCB5KCkgY29uc3Q7CisgICAgICAgIHZpcnR1
YWwgaW50IHdpZHRoKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgaW50IGhlaWdodCgpIGNvbnN0
OworICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFs
IEludFBvaW50IGxvY2F0aW9uKCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBTY3JvbGxWaWV3
KiBwYXJlbnQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTY3JvbGxWaWV3KiByb290KCkgY29u
c3Q7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0Jik7
CisgICAgICAgIHZpcnR1YWwgSW50UmVjdCBmcmFtZVJlY3QoKSBjb25zdDsKKworICAgICAgICB2
aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0
ZVJlY3QoY29uc3QgSW50UmVjdCYpOworCisgICAgICAgIHZpcnR1YWwgU2Nyb2xsYmFyT3Zlcmxh
eVN0eWxlIHNjcm9sbGJhck92ZXJsYXlTdHlsZSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZv
aWQgZ2V0VGlja21hcmtzKFZlY3RvcjxJbnRSZWN0PiYpIGNvbnN0OworICAgICAgICB2aXJ0dWFs
IGJvb2wgaXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNTY3JvbGxWaWV3U2Nyb2xsYmFyKCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBJbnRQ
b2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9pbnQmIHdpbmRvd1Bv
aW50KTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDdXN0b21TY3JvbGxiYXIoKSBjb25zdDsK
KyAgICAgICAgdmlydHVhbCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0
OworCisgICAgICAgIHZpcnR1YWwgaW50IHZhbHVlKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwg
ZmxvYXQgY3VycmVudFBvcygpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGludCB2aXNpYmxlU2l6
ZSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGludCB0b3RhbFNpemUoKSBjb25zdDsKKyAgICAg
ICAgdmlydHVhbCBpbnQgbWF4aW11bSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFNjcm9sbGJh
ckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBpbnQg
bGluZVN0ZXAoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBpbnQgcGFnZVN0ZXAoKSBjb25zdDsK
KworICAgICAgICB2aXJ0dWFsIFNjcm9sbGJhclBhcnQgcHJlc3NlZFBhcnQoKSBjb25zdDsKKyAg
ICAgICAgdmlydHVhbCBTY3JvbGxiYXJQYXJ0IGhvdmVyZWRQYXJ0KCkgY29uc3Q7CisKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHN0eWxlQ2hhbmdlZCgpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBl
bmFibGVkKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFibGVkKGJvb2wpOwor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgQ0NTY3JvbGxiYXJMYXllckltcGwqIG1fb3duZXI7CisK
KyAgICB9OworICAgIENDU2Nyb2xsYmFyIG1fc2Nyb2xsYmFyOworCisgICAgU2Nyb2xsYmFyT3Zl
cmxheVN0eWxlIG1fc2Nyb2xsYmFyT3ZlcmxheVN0eWxlOworICAgIFZlY3RvcjxJbnRSZWN0PiBt
X3RpY2ttYXJrczsKKyAgICBib29sIG1faXNTY3JvbGxhYmxlQXJlYUFjdGl2ZTsKKyAgICBib29s
IG1faXNTY3JvbGxWaWV3U2Nyb2xsYmFyOworCisgICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gbV9v
cmllbnRhdGlvbjsKKworICAgIFNjcm9sbGJhckNvbnRyb2xTaXplIG1fY29udHJvbFNpemU7CisK
KyAgICBTY3JvbGxiYXJQYXJ0IG1fcHJlc3NlZFBhcnQ7CisgICAgU2Nyb2xsYmFyUGFydCBtX2hv
dmVyZWRQYXJ0OworCisgICAgYm9vbCBtX2VuYWJsZWQ7Cit9OworCit9CisjZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXBpCmluZGV4IGU5MWUzMzZkYmRiM2VjYmRjOTRhOTRhYTBiMDI0NTljNzQ5OGQ0OWIuLmZl
YWU4Y2UxYzAyOTkyMGIxY2IyNDcwMzJjYWI5NGU5ZDVmMTVkZjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQpAQCAtMTEwLDYgKzExMCw3IEBACiAgICAgICAgICAgICAndGVzdHMvUE9E
SW50ZXJ2YWxUcmVlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1BPRFJlZEJsYWNrVHJl
ZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9SZW5kZXJUYWJsZUNlbGxUZXN0LmNwcCcs
CisgICAgICAgICAgICAndGVzdHMvU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bVRlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9UZXh0dXJlTWFuYWdlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvVGls
aW5nRGF0YVRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9TY3JvbGxiYXJMYXllckNocm9taXVtVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTYxMjk3
NTgyZjEzY2MyZDIyYjJiNjFhOTNhMGJiNWZhZWRmOGU4NgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bVRlc3QuY3Bw
CkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJTY3JvbGxiYXJMYXllckNocm9taXVtLmgiCisKKyNpbmNsdWRlICJTY3JvbGxi
YXJUaGVtZUNsaWVudC5oIgorI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKKyNpbmNsdWRl
ICJjYy9DQ1Njcm9sbGJhckxheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFk
UHJveHkuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgTW9ja1Njcm9sbGJhciA6IHB1YmxpYyBTY3Jv
bGxiYXJUaGVtZUNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCBpbnQgeCgpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGludCB5KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAg
IHZpcnR1YWwgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50
IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIEludFNpemUoKTsgfQorICAgIHZpcnR1YWwgSW50UG9pbnQgbG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiBJbnRQb2ludCgpOyB9CisKKyAgICB2aXJ0dWFsIFNjcm9sbFZp
ZXcqIHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFNjcm9sbFZpZXcq
IHJvb3QoKSBjb25zdCB7IHJldHVybiAwOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVS
ZWN0KGNvbnN0IEludFJlY3QmKSB7IH0KKyAgICB2aXJ0dWFsIEludFJlY3QgZnJhbWVSZWN0KCkg
Y29uc3QgeyByZXR1cm4gSW50UmVjdCgpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0
ZSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0Jikg
eyB9CisKKyAgICB2aXJ0dWFsIFNjcm9sbGJhck92ZXJsYXlTdHlsZSBzY3JvbGxiYXJPdmVybGF5
U3R5bGUoKSBjb25zdCB7IHJldHVybiBTY3JvbGxiYXJPdmVybGF5U3R5bGVEZWZhdWx0OyB9Cisg
ICAgdmlydHVhbCB2b2lkIGdldFRpY2ttYXJrcyhWZWN0b3I8SW50UmVjdD4mKSBjb25zdCB7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsVmlld1Njcm9sbGJhcigpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tQ29u
dGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpIHsgcmV0dXJuIEludFBv
aW50KCk7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc0N1c3RvbVNjcm9sbGJhcigpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIEhvcml6b250YWxTY3JvbGxiYXI7IH0KKworICAgIHZpcnR1
YWwgaW50IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgZmxvYXQgY3Vy
cmVudFBvcygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGludCB2aXNpYmxlU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKyAgICB2aXJ0dWFsIGludCB0b3RhbFNpemUoKSBjb25z
dCB7IHJldHVybiAxOyB9CisgICAgdmlydHVhbCBpbnQgbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJu
IDA7IH0KKyAgICB2aXJ0dWFsIFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKCkgY29u
c3QgeyByZXR1cm4gUmVndWxhclNjcm9sbGJhcjsgfQorCisgICAgdmlydHVhbCBpbnQgbGluZVN0
ZXAoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBpbnQgcGFnZVN0ZXAoKSBjb25z
dCB7IHJldHVybiAwOyB9CisKKyAgICB2aXJ0dWFsIFNjcm9sbGJhclBhcnQgcHJlc3NlZFBhcnQo
KSBjb25zdCB7IHJldHVybiBOb1BhcnQ7IH0KKyAgICB2aXJ0dWFsIFNjcm9sbGJhclBhcnQgaG92
ZXJlZFBhcnQoKSBjb25zdCB7IHJldHVybiBOb1BhcnQ7IH0KKworICAgIHZpcnR1YWwgdm9pZCBz
dHlsZUNoYW5nZWQoKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBlbmFibGVkKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlZChib29sKSB7IH0KKwor
ICAgIHZpcnR1YWwgfk1vY2tTY3JvbGxiYXIoKSB7IH0KK307CisKK1RFU1QoU2Nyb2xsYmFyTGF5
ZXJDaHJvbWl1bVRlc3QsIHJlc29sdmVTY3JvbGxMYXllclBvaW50ZXIpCit7CisgICAgRGVidWdT
Y29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisKKyAgICB7CisgICAgICAgIE1vY2tTY3JvbGxiYXIg
c2Nyb2xsYmFyOworICAgICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
Y2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBjaGlsZDIgPSBTY3JvbGxiYXJMYXllckNocm9taXVtOjpjcmVhdGUoJnNjcm9sbGJh
ciwgY2hpbGQxLT5pZCgpKTsKKyAgICAgICAgbGF5ZXJUcmVlUm9vdC0+YWRkQ2hpbGQoY2hpbGQx
KTsKKyAgICAgICAgbGF5ZXJUcmVlUm9vdC0+YWRkQ2hpbGQoY2hpbGQyKTsKKworICAgICAgICBP
d25QdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5
bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgbnVsbHB0cik7CisKKyAgICAgICAg
Q0NMYXllckltcGwqIGNjQ2hpbGQxID0gY2NMYXllclRyZWVSb290LT5jaGlsZHJlbigpWzBdLmdl
dCgpOworICAgICAgICBDQ1Njcm9sbGJhckxheWVySW1wbCogY2NDaGlsZDIgPSBzdGF0aWNfY2Fz
dDxDQ1Njcm9sbGJhckxheWVySW1wbCo+KGNjTGF5ZXJUcmVlUm9vdC0+Y2hpbGRyZW4oKVsxXS5n
ZXQoKSk7CisKKyAgICAgICAgRVhQRUNUX0VRKGNjQ2hpbGQxLCBjY0NoaWxkMi0+c2Nyb2xsTGF5
ZXIoKSk7CisgICAgfQorCisgICAgeyAvLyBhbm90aGVyIHRyYXZlcnNlIG9yZGVyCisgICAgICAg
IE1vY2tTY3JvbGxiYXIgc2Nyb2xsYmFyOworICAgICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
bGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgICAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gY2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDEgPSBTY3JvbGxiYXJMYXllckNocm9taXVtOjpj
cmVhdGUoJnNjcm9sbGJhciwgY2hpbGQyLT5pZCgpKTsKKyAgICAgICAgbGF5ZXJUcmVlUm9vdC0+
YWRkQ2hpbGQoY2hpbGQxKTsKKyAgICAgICAgbGF5ZXJUcmVlUm9vdC0+YWRkQ2hpbGQoY2hpbGQy
KTsKKworICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVT
eW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgbnVsbHB0
cik7CisKKyAgICAgICAgQ0NTY3JvbGxiYXJMYXllckltcGwqIGNjQ2hpbGQxID0gc3RhdGljX2Nh
c3Q8Q0NTY3JvbGxiYXJMYXllckltcGwqPihjY0xheWVyVHJlZVJvb3QtPmNoaWxkcmVuKClbMF0u
Z2V0KCkpOworICAgICAgICBDQ0xheWVySW1wbCogY2NDaGlsZDIgPSBjY0xheWVyVHJlZVJvb3Qt
PmNoaWxkcmVuKClbMV0uZ2V0KCk7CisKKyAgICAgICAgRVhQRUNUX0VRKGNjQ2hpbGQxLT5zY3Jv
bGxMYXllcigpLCBjY0NoaWxkMik7CisgICAgfQorfQorCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130518</attachid>
            <date>2012-03-06 18:53:03 -0800</date>
            <delta_ts>2012-03-07 13:16:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78872-20120306185302.patch</filename>
            <type>text/plain</type>
            <size>50438</size>
            <attacher name="Tien-Ren Chen">trchen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5OTk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTg1NjViZTA3NWE1MWU0
YmUzNGIzNWVjN2I5OGI5ZmQ0ZDE1MDE1MS4uOWZhNTkwNTVlYmRiYmY5YzQzMjhlZjcxN2Q2MWM3
MjUxMjIyZTIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNiBAQAorMjAxMi0wMy0wNiAgVGll
bi1SZW4gQ2hlbiAgPHRyY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBT
Y3JvbGxiYXJMYXllckNocm9taXVtL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsIGZvciBDQy1zaWRlIHNj
cm9sbGJhciBwYWludGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Nzg4NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBOZXcgdGVzdCBTY3JvbGxiYXJMYXllckNocm9taXVtVGVzdC5yZXNvbHZlU2Nyb2xs
TGF5ZXJQb2ludGVyCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGFnZS9z
Y3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpzY3JvbGxMYXllckZvckZyYW1lVmlldyk6CisgICAgICAgIChXZWJDb3Jl
OjpzY3JvbGxiYXJMYXllckRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmZyYW1lVmlld1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAq
IHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFi
bGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJDaHJvbWl1bTo6aGFzQ29udGVudHNMYXllcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjp0b1Njcm9sbGJhckxheWVyQ2hyb21p
dW0pOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJMYXllckNocm9taXVtOjpjcmVh
dGVDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJMYXllckNocm9taXVt
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTo6U2Ny
b2xsYmFyTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJMYXllckNo
cm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChTY3JvbGxiYXJMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhckxheWVyQ2hyb21pdW06OnNjcm9sbExheWVySWQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTo6dG9TY3JvbGxiYXJMYXllckNocm9taXVtKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6VHJlZVN5bmNocm9uaXplcjo6Y29sbGVjdEV4aXN0aW5nQ0NMYXll
ckltcGxSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVN5bmNocm9uaXplcjo6cmV1
c2VPckNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTeW5jaHJvbml6
ZXI6OnN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU3lu
Y2hyb25pemVyOjp1cGRhdGVTY3JvbGxiYXJMYXllclBvaW50ZXJzUmVjdXJzaXZlKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVT
eW5jaHJvbml6ZXIuaDoKKyAgICAgICAgKFRyZWVTeW5jaHJvbml6ZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6dXBkYXRlTWF4U2Nyb2xsUG9zaXRp
b24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFy
TGF5ZXJJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NT
Y3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjp3aWxsRHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1Njcm9sbGJhckxheWVySW1wbDo6YXBwZW5kUXVhZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NT
Y3JvbGxiYXJMYXllckltcGw6OmRpZERyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxi
YXJMYXllckltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJ
bXBsOjpDQ1Njcm9sbGJhcjo6eCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVy
SW1wbDo6Q0NTY3JvbGxiYXI6OnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXll
ckltcGw6OkNDU2Nyb2xsYmFyOjp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJh
ckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OmhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Nj
cm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpsb2NhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OnBhcmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OnJvb3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpzZXRG
cmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Ny
b2xsYmFyOjpmcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllcklt
cGw6OkNDU2Nyb2xsYmFyOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xs
YmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpzY3JvbGxiYXJPdmVybGF5
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xs
YmFyOjpnZXRUaWNrbWFya3MpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllcklt
cGw6OkNDU2Nyb2xsYmFyOjppc1Njcm9sbGFibGVBcmVhQWN0aXZlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6aXNTY3JvbGxWaWV3U2Nyb2xs
YmFyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJh
cjo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Ny
b2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6aXNDdXN0b21TY3JvbGxiYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpvcmllbnRhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6
OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9s
bGJhcjo6Y3VycmVudFBvcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1w
bDo6Q0NTY3JvbGxiYXI6OnZpc2libGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xs
YmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6dG90YWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6bWF4aW11bSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OmNvbnRyb2xTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6bGlu
ZVN0ZXApOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xs
YmFyOjpwYWdlU3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6
Q0NTY3JvbGxiYXI6OnByZXNzZWRQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFy
TGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6aG92ZXJlZFBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpzdHlsZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjplbmFibGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6c2V0
RW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3Jv
bGxiYXJMYXllckltcGwuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEND
U2Nyb2xsYmFyTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJ
bXBsOjpzZXRTY3JvbGxiYXJPdmVybGF5U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3Jv
bGxiYXJMYXllckltcGw6OnNldFRpY2ttYXJrcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9s
bGJhckxheWVySW1wbDo6c2V0SXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6c2V0SXNTY3JvbGxWaWV3U2Nyb2xsYmFyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpzZXRPcmllbnRhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6c2V0Q29udHJvbFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OnNldFByZXNzZWRQYXJ0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpzZXRIb3ZlcmVkUGFydCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6c2V0RW5hYmxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6c2Nyb2xsTGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OnNldFNjcm9sbExheWVyKToKKyAg
ICAgICAgKENDU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJ
bXBsOjpDQ1Njcm9sbGJhcjo6Q0NTY3JvbGxiYXIpOgorCiAyMDEyLTAzLTA2ICBKYW1lcyBSb2Jp
bnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBGaXggdGhy
ZWFkZWQgY29tcG9zaXRpbmcgaXNzdWVzIGluIFdlYkdMTGF5ZXJDaHJvbWl1bSAoZXhjZXB0IGZv
ciBwcmludGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNGY0NGQ3MmZhNTk4MzFl
MDMwY2VjMWM3MjEzZDMzMDNmYTYyMzIyMy4uYmZkMTJiNzZmMWQ2YTJhNzI4OGI1ZGVkNjA3OTJj
ZjY4MGZmYjc1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAor
MjAxMi0wMy0wNiAgVGllbi1SZW4gQ2hlbiAgPHRyY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgW2Nocm9taXVtXSBTY3JvbGxiYXJMYXllckNocm9taXVtL0NDU2Nyb2xsYmFyTGF5ZXJJbXBs
IGZvciBDQy1zaWRlIHNjcm9sbGJhciBwYWludGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg4NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL1Nj
cm9sbGJhckxheWVyQ2hyb21pdW1UZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKE1vY2tTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1Njcm9sbGJh
cjo6eCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrU2Nyb2xsYmFyOjp5KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1vY2tTY3JvbGxiYXI6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tTY3Jv
bGxiYXI6OmhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrU2Nyb2xsYmFyOjpzaXplKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1vY2tTY3JvbGxiYXI6OmxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1vY2tTY3JvbGxiYXI6OnBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrU2Ny
b2xsYmFyOjpyb290KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tTY3JvbGxiYXI6OnNldEZyYW1l
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrU2Nyb2xsYmFyOjpmcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TW9ja1Njcm9sbGJhcjo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpNb2NrU2Nyb2xsYmFyOjppbnZhbGlkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrU2Nyb2xsYmFyOjpzY3JvbGxiYXJPdmVybGF5U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
TW9ja1Njcm9sbGJhcjo6Z2V0VGlja21hcmtzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tTY3Jv
bGxiYXI6OmlzU2Nyb2xsYWJsZUFyZWFBY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1Nj
cm9sbGJhcjo6aXNTY3JvbGxWaWV3U2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tT
Y3JvbGxiYXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpNb2NrU2Nyb2xsYmFyOjppc0N1c3RvbVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrU2Nyb2xsYmFyOjpvcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNb2NrU2Nyb2xs
YmFyOjp2YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrU2Nyb2xsYmFyOjpjdXJyZW50UG9z
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tTY3JvbGxiYXI6OnZpc2libGVTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1vY2tTY3JvbGxiYXI6OnRvdGFsU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNb2NrU2Nyb2xsYmFyOjptYXhpbXVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tTY3JvbGxi
YXI6OmNvbnRyb2xTaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tTY3JvbGxiYXI6OmxpbmVT
dGVwKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tTY3JvbGxiYXI6OnBhZ2VTdGVwKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1vY2tTY3JvbGxiYXI6OnByZXNzZWRQYXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1vY2tTY3JvbGxiYXI6OmhvdmVyZWRQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tT
Y3JvbGxiYXI6OnN0eWxlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrU2Nyb2xsYmFy
OjplbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tTY3JvbGxiYXI6OnNldEVuYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6TW9ja1Njcm9sbGJhcjo6TW9ja1Njcm9sbGJhcik6CisgICAg
ICAgIChXZWJDb3JlOjpNb2NrU2Nyb2xsYmFyOjp+TW9ja1Njcm9sbGJhcik6CisgICAgICAgIChX
ZWJDb3JlOjpURVNUKToKKwogMjAxMi0wMy0wNiAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gTnVsbC1jaGVjayBtX2xheWVyUmVuZGVy
ZXIgaW4gQ0NMYXllclRyZWVIb3N0SW1wbDo6ZmluaXNoQWxsUmVuZGVyaW5nKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQppbmRleCBkZjc4Y2U5ODRkYWY1Yjc2ZDcyNzJmYzhkOGI2ZWUxY2MxNjVmODUyLi41MjBi
MWZhZDczZDY3ZGJjYzM1MGFlNjJjOWY1ZDMzYjIxMmE2YWZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBA
IC0zMzU5LDYgKzMzNTksOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uaCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1
bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJh
ckxheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vU29saWRDb2xvckxheWVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Tb2xpZENvbG9yTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5jcHAnLApAQCAtMzQ3
NCw2ICszNDc2LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NjaGVkdWxlclN0YXRlTWFjaGluZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1bGVyU3RhdGVNYWNoaW5lLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGhyZWFkUHJveHkuaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJM
YXllckltcGwuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1Njcm9sbGJhckxheWVySW1wbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3Bw
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAKaW5kZXggZmYw
NTNkZjYyNTIyMTljNjY0ZjY5MzFkZWM3NWEzNGU4Y2YwNzJjMC4uOWVlOTUwMGE2ZDE2MzQ1YzQz
NTU1MjZlZTM0M2RmNGM4N2E2NmY0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0
b3JDaHJvbWl1bS5jcHAKQEAgLTI3LDggKzI3LDE1IEBACiAKICNpbmNsdWRlICJTY3JvbGxpbmdD
b29yZGluYXRvci5oIgogCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiUmVnaW9uLmgiCisjaW5j
bHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgor
I2luY2x1ZGUgIlNjcm9sbGJhckxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJU
aGVtZS5oIgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC01OCwxNCArNjUsNjEgQEAgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6On5TY3JvbGxpbmdDb29y
ZGluYXRvcigpCiAgICAgZGVsZXRlIG1fcHJpdmF0ZTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29y
ZGluYXRvcjo6ZnJhbWVWaWV3SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1l
VmlldyosIEdyYXBoaWNzTGF5ZXIqIGhvcml6b250YWxTY3JvbGxiYXJMYXllcikKK3N0YXRpYyBH
cmFwaGljc0xheWVyKiBzY3JvbGxMYXllckZvckZyYW1lVmlldyhGcmFtZVZpZXcqIGZyYW1lVmll
dykKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKyAgICBGcmFtZSogZnJhbWUgPSBmcmFtZVZpZXctPmZyYW1lKCk7CisgICAgaWYg
KCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3
ID0gZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyVmlldykKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHJlbmRlclZpZXctPmNvbXBvc2l0b3IoKS0+c2Nyb2xs
TGF5ZXIoKTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKIH0KIAotdm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3VmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShG
cmFtZVZpZXcqLCBHcmFwaGljc0xheWVyKiB2ZXJ0aWNhbFNjcm9sbGJhckxheWVyKQorc3RhdGlj
IHZvaWQgc2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIExheWVy
Q2hyb21pdW0qIHNjcm9sbExheWVyLCBHcmFwaGljc0xheWVyKiBzY3JvbGxiYXJHcmFwaGljc0xh
eWVyKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQhCisgICAgQVNTRVJUKHNjcm9sbGJhcik7
CisgICAgQVNTRVJUKHNjcm9sbExheWVyKTsKKyAgICBBU1NFUlQoc2Nyb2xsYmFyR3JhcGhpY3NM
YXllcik7CisKKyAgICBpZiAoc2Nyb2xsYmFyLT5pc0N1c3RvbVNjcm9sbGJhcigpIC8qIHx8ICFD
Q1Byb3h5OjpoYXNJbXBsVGhyZWFkKCkgKi8pIHsgLy8gRklYTUU6IGFsc28gZmlsdGVyIG91dCBz
aW5nbGUgdGhyZWFkIGNhc2Ugd2hlbiB3ZQorICAgICAgICBzY3JvbGxiYXJHcmFwaGljc0xheWVy
LT5zZXRDb250ZW50c1RvTWVkaWEoMCk7CisgICAgICAgIHNjcm9sbGJhckdyYXBoaWNzTGF5ZXIt
PnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJl
ZlB0cjxTY3JvbGxiYXJMYXllckNocm9taXVtPiBzY3JvbGxiYXJMYXllciA9IFNjcm9sbGJhckxh
eWVyQ2hyb21pdW06OmNyZWF0ZShzY3JvbGxiYXIsIHNjcm9sbExheWVyLT5pZCgpKTsKKyAgICBz
Y3JvbGxiYXJHcmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoc2Nyb2xsYmFyTGF5ZXIu
Z2V0KCkpOworICAgIHNjcm9sbGJhckdyYXBoaWNzTGF5ZXItPnNldERyYXdzQ29udGVudChmYWxz
ZSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld0hvcml6b250YWxT
Y3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcqIGZyYW1lVmlldywgR3JhcGhpY3NMYXll
ciogaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKQoreworICAgIGlmICghaG9yaXpvbnRhbFNjcm9s
bGJhckxheWVyIHx8ICFjb29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyhmcmFtZVZpZXcp
KQorICAgICAgICByZXR1cm47CisKKyAgICBMYXllckNocm9taXVtKiBzY3JvbGxMYXllciA9IG1f
cHJpdmF0ZS0+c2Nyb2xsTGF5ZXIoKTsKKyAgICBpZiAoIXNjcm9sbExheWVyKSAvLyBGSVhNRTog
c29tZXRpbWVzIHdlIGdldCBjYWxsZWQgYmVmb3JlIHNldFNjcm9sbExheWVyLCB3b3JrYXJvdW5k
IGJ5IGZpbmRpbmcgb3V0IG91cnNlbGYKKyAgICAgICAgc2Nyb2xsTGF5ZXIgPSBzY3JvbGxMYXll
ckZvckZyYW1lVmlldyhmcmFtZVZpZXcpLT5wbGF0Zm9ybUxheWVyKCk7CisKKyAgICBzY3JvbGxi
YXJMYXllckRpZENoYW5nZShmcmFtZVZpZXctPmhvcml6b250YWxTY3JvbGxiYXIoKSwgc2Nyb2xs
TGF5ZXIsIGhvcml6b250YWxTY3JvbGxiYXJMYXllcik7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OmZyYW1lVmlld1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVW
aWV3KiBmcmFtZVZpZXcsIEdyYXBoaWNzTGF5ZXIqIHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIpCit7
CisgICAgaWYgKCF2ZXJ0aWNhbFNjcm9sbGJhckxheWVyIHx8ICFjb29yZGluYXRlc1Njcm9sbGlu
Z0ZvckZyYW1lVmlldyhmcmFtZVZpZXcpKQorICAgICAgICByZXR1cm47CisKKyAgICBMYXllckNo
cm9taXVtKiBzY3JvbGxMYXllciA9IG1fcHJpdmF0ZS0+c2Nyb2xsTGF5ZXIoKTsKKyAgICBpZiAo
IXNjcm9sbExheWVyKSAvLyBGSVhNRTogc29tZXRpbWVzIHdlIGdldCBjYWxsZWQgYmVmb3JlIHNl
dFNjcm9sbExheWVyLCB3b3JrYXJvdW5kIGJ5IGZpbmRpbmcgb3V0IG91cnNlbGYKKyAgICAgICAg
c2Nyb2xsTGF5ZXIgPSBzY3JvbGxMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpLT5wbGF0Zm9y
bUxheWVyKCk7CisKKyAgICBzY3JvbGxiYXJMYXllckRpZENoYW5nZShmcmFtZVZpZXctPnZlcnRp
Y2FsU2Nyb2xsYmFyKCksIHNjcm9sbExheWVyLCB2ZXJ0aWNhbFNjcm9sbGJhckxheWVyKTsKIH0K
IAogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xsTGF5ZXIoR3JhcGhpY3NMYXll
ciogc2Nyb2xsTGF5ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxhYmxlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5j
cHAKaW5kZXggNjZmNzI5MmIyZjIxZDM4ZTBjYjgxZWUwMTUzOTJmMTI4ZWU0N2I5MS4uMzZhMzJh
OTdiNzYxNzEyMmEyYjA2MGE3MGQ0ZjEwZTVhOTFhYmI2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcApAQCAtMjkyLDExICsyOTIsMTMgQEAgdm9pZCBTY3Jv
bGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29u
c3QgSW50UmVjdCYgcmUKICAgICBpZiAoc2Nyb2xsYmFyID09IGhvcml6b250YWxTY3JvbGxiYXIo
KSkgewogICAgICAgICBpZiAoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciA9IGxheWVyRm9y
SG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7CiAgICAgICAgICAgICBncmFwaGljc0xheWVyLT5zZXRO
ZWVkc0Rpc3BsYXkoKTsKKyAgICAgICAgICAgIGdyYXBoaWNzTGF5ZXItPnNldENvbnRlbnRzTmVl
ZHNEaXNwbGF5KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2Ug
aWYgKHNjcm9sbGJhciA9PSB2ZXJ0aWNhbFNjcm9sbGJhcigpKSB7CiAgICAgICAgIGlmIChHcmFw
aGljc0xheWVyKiBncmFwaGljc0xheWVyID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7
CiAgICAgICAgICAgICBncmFwaGljc0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICAgICAg
ICAgIGdyYXBoaWNzTGF5ZXItPnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5oCmluZGV4IGFkY2U4Yjk1NDQ4MmY1M2U1NDllZWRkZDliZjZiMDlmZTQyM2U2NzUuLjRjY2E4
MmE4ODdiZTI4NTk5YWYxNDc0MTdlY2FiYzc4NzE5NDlmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNz
TGF5ZXJDaHJvbWl1bS5oCkBAIC05Nyw2ICs5Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRl
bnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKik7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRz
VG9DYW52YXMoUGxhdGZvcm1MYXllciopOworICAgIHZpcnR1YWwgYm9vbCBoYXNDb250ZW50c0xh
eWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c0xheWVyOyB9CiAKICAgICB2aXJ0dWFsIGJv
b2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYg
Ym94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiwgZG91YmxlIHRpbWVPZmZz
ZXQpOwogICAgIHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1h
dGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCBhNTA4
YzllNjgzMmY0MTcwYjAwY2U1MWI2NTJjZGM4NDY5NjBmNmI4Li5kYzdkZDQ2N2I3NzZhNTMyMTg0
OGM5N2MyYTU1NTgxZmM3ZDAwNDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC02MSw2ICs2MSw3
IEBAIGNsYXNzIENDTGF5ZXJJbXBsOwogY2xhc3MgQ0NMYXllclRyZWVIb3N0OwogY2xhc3MgQ0NU
ZXh0dXJlVXBkYXRlcjsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgU2Nyb2xsYmFy
TGF5ZXJDaHJvbWl1bTsKIAogLy8gQmFzZSBjbGFzcyBmb3IgY29tcG9zaXRlZCBsYXllcnMuIFNw
ZWNpYWwgbGF5ZXIgdHlwZXMgYXJlIGRlcml2ZWQgZnJvbQogLy8gdGhpcyBjbGFzcy4KQEAgLTIz
Miw2ICsyMzMsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEFuaW1hdGlvbkV2ZW50KGNvbnN0
IENDQW5pbWF0aW9uRXZlbnQmKTsKIAorICAgIHZpcnR1YWwgU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1
bSogdG9TY3JvbGxiYXJMYXllckNocm9taXVtKCkgeyByZXR1cm4gMDsgfQorCiBwcm90ZWN0ZWQ6
CiAgICAgZnJpZW5kIGNsYXNzIENDTGF5ZXJJbXBsOwogICAgIGZyaWVuZCBjbGFzcyBMYXllclRp
bGVyQ2hyb21pdW07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjRmN2VmOTMyMDJhYTQxMDExN2IzZmZhMDczMTI4YzRkZWRhMWQ1YWUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3Jv
bGxiYXJMYXllckNocm9taXVtLmNwcApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisK
KyNpbmNsdWRlICJTY3JvbGxiYXJMYXllckNocm9taXVtLmgiCisKKyNpbmNsdWRlICJTY3JvbGxi
YXIuaCIKKyNpbmNsdWRlICJjYy9DQ1Njcm9sbGJhckxheWVySW1wbC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8Q0NMYXllckltcGw+IFNjcm9sbGJhckxheWVyQ2hyb21p
dW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkKK3sKKyAgICByZXR1cm4gQ0NTY3JvbGxiYXJMYXllcklt
cGw6OmNyZWF0ZShpZCgpKTsKK30KKworUGFzc1JlZlB0cjxTY3JvbGxiYXJMYXllckNocm9taXVt
PiBTY3JvbGxiYXJMYXllckNocm9taXVtOjpjcmVhdGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGlu
dCBzY3JvbGxMYXllcklkKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2Nyb2xsYmFyTGF5
ZXJDaHJvbWl1bShzY3JvbGxiYXIsIHNjcm9sbExheWVySWQpKTsKK30KKworU2Nyb2xsYmFyTGF5
ZXJDaHJvbWl1bTo6U2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bShTY3JvbGxiYXIqIHNjcm9sbGJhciwg
aW50IHNjcm9sbExheWVySWQpCisgICAgOiBtX3Njcm9sbGJhcihzY3JvbGxiYXIpCisgICAgLCBt
X3Njcm9sbExheWVySWQoc2Nyb2xsTGF5ZXJJZCkKKyAgICAsIG1fc2Nyb2xsYmFyT3ZlcmxheVN0
eWxlKHNjcm9sbGJhci0+c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKCkpCisgICAgLCBtX2lzU2Nyb2xs
YWJsZUFyZWFBY3RpdmUoc2Nyb2xsYmFyLT5pc1Njcm9sbGFibGVBcmVhQWN0aXZlKCkpCisgICAg
LCBtX2lzU2Nyb2xsVmlld1Njcm9sbGJhcihzY3JvbGxiYXItPmlzU2Nyb2xsVmlld1Njcm9sbGJh
cigpKQorICAgICwgbV9vcmllbnRhdGlvbihzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkpCisgICAg
LCBtX2NvbnRyb2xTaXplKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSkKK3sKK30KKwordm9pZCBT
Y3JvbGxiYXJMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXll
cikKK3sKKyAgICBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKGxheWVyKTsKKworICAg
IENDU2Nyb2xsYmFyTGF5ZXJJbXBsKiBzY3JvbGxiYXJMYXllciA9IHN0YXRpY19jYXN0PENDU2Ny
b2xsYmFyTGF5ZXJJbXBsKj4obGF5ZXIpOworCisgICAgc2Nyb2xsYmFyTGF5ZXItPnNldFNjcm9s
bGJhck92ZXJsYXlTdHlsZShtX3Njcm9sbGJhck92ZXJsYXlTdHlsZSk7CisKKyAgICBWZWN0b3I8
SW50UmVjdD4gdGlja21hcmtzOworICAgIG1fc2Nyb2xsYmFyLT5nZXRUaWNrbWFya3ModGlja21h
cmtzKTsKKyAgICBzY3JvbGxiYXJMYXllci0+c2V0VGlja21hcmtzKHRpY2ttYXJrcyk7CisKKyAg
ICBzY3JvbGxiYXJMYXllci0+c2V0SXNTY3JvbGxhYmxlQXJlYUFjdGl2ZShtX2lzU2Nyb2xsYWJs
ZUFyZWFBY3RpdmUpOworICAgIHNjcm9sbGJhckxheWVyLT5zZXRJc1Njcm9sbFZpZXdTY3JvbGxi
YXIobV9pc1Njcm9sbFZpZXdTY3JvbGxiYXIpOworCisgICAgc2Nyb2xsYmFyTGF5ZXItPnNldE9y
aWVudGF0aW9uKG1fb3JpZW50YXRpb24pOworCisgICAgc2Nyb2xsYmFyTGF5ZXItPnNldENvbnRy
b2xTaXplKG1fY29udHJvbFNpemUpOworCisgICAgc2Nyb2xsYmFyTGF5ZXItPnNldFByZXNzZWRQ
YXJ0KG1fc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpKTsKKyAgICBzY3JvbGxiYXJMYXllci0+c2V0
SG92ZXJlZFBhcnQobV9zY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkpOworCisgICAgc2Nyb2xsYmFy
TGF5ZXItPnNldEVuYWJsZWQobV9zY3JvbGxiYXItPmVuYWJsZWQoKSk7Cit9CisKK30KKyNlbmRp
ZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3JvbGxiYXJMYXll
ckNocm9taXVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWQyNTM5ZTI1ZTY0OGVlMmMzOWJiMjVjNGViYjQzOWZl
NDE5Njc2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uaApAQCAtMCwwICsxLDY3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisKKyNpZm5kZWYgU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bV9oCisjZGVmaW5l
IFNjcm9sbGJhckxheWVyQ2hyb21pdW1faAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorCisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlNjcm9sbFR5cGVz
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsYmFyOworCitjbGFzcyBT
Y3JvbGxiYXJMYXllckNocm9taXVtIDogcHVibGljIExheWVyQ2hyb21pdW0geworcHVibGljOgor
ICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVySW1wbD4gY3JlYXRlQ0NMYXllckltcGwoKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTY3JvbGxiYXJMYXllckNocm9taXVtPiBjcmVhdGUoU2Ny
b2xsYmFyKiwgaW50IHNjcm9sbExheWVySWQpOworCisgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9w
ZXJ0aWVzVG8oQ0NMYXllckltcGwqKTsKKworICAgIGludCBzY3JvbGxMYXllcklkKCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JvbGxMYXllcklkOyB9CisgICAgdmlydHVhbCBTY3JvbGxiYXJMYXllckNo
cm9taXVtKiB0b1Njcm9sbGJhckxheWVyQ2hyb21pdW0oKSB7IHJldHVybiB0aGlzOyB9CisKK3By
b3RlY3RlZDoKKyAgICBTY3JvbGxiYXJMYXllckNocm9taXVtKFNjcm9sbGJhciosIGludCBzY3Jv
bGxMYXllcklkKTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3Njcm9sbGJh
cjsKKyAgICBpbnQgbV9zY3JvbGxMYXllcklkOworCisgICAgU2Nyb2xsYmFyT3ZlcmxheVN0eWxl
IG1fc2Nyb2xsYmFyT3ZlcmxheVN0eWxlOworICAgIGJvb2wgbV9pc1Njcm9sbGFibGVBcmVhQWN0
aXZlOworICAgIGJvb2wgbV9pc1Njcm9sbFZpZXdTY3JvbGxiYXI7CisKKyAgICBTY3JvbGxiYXJP
cmllbnRhdGlvbiBtX29yaWVudGF0aW9uOworCisgICAgU2Nyb2xsYmFyQ29udHJvbFNpemUgbV9j
b250cm9sU2l6ZTsKK307CisKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcAppbmRleCBlYmQxYWM3MzBi
MTk0NTQxYzJiNGM0ZWVmMWY2Y2NhNTk5YjRlNWM4Li4wN2YwNGIzNzJhNDY5MDgwZjMwYjZhMWQw
ODM1ZDczYzJjNTBiYmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcApAQCAtMjgsMjAg
KzI4LDI4IEBACiAjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXplci5oIgogCiAjaW5jbHVkZSAiTGF5
ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlNjcm9sbGJhckxheWVyQ2hyb21pdW0uaCIKICNpbmNs
dWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBs
LmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBh
c3NPd25QdHI8Q0NMYXllckltcGw+IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMo
TGF5ZXJDaHJvbWl1bSogbGF5ZXJDaHJvbWl1bVJvb3QsIFBhc3NPd25QdHI8Q0NMYXllckltcGw+
IG9sZENDTGF5ZXJJbXBsUm9vdCkKIHsKLSAgICBDQ0xheWVySW1wbE1hcCBtYXA7Ci0gICAgY29s
bGVjdEV4aXN0aW5nQ0NMYXllckltcGxSZWN1cnNpdmUobWFwLCBvbGRDQ0xheWVySW1wbFJvb3Qp
OworICAgIE93blB0ckNDTGF5ZXJJbXBsTWFwIG9sZExheWVyczsKKyAgICBSYXdQdHJDQ0xheWVy
SW1wbE1hcCBuZXdMYXllcnM7CiAKLSAgICByZXR1cm4gc3luY2hyb25pemVUcmVlUmVjdXJzaXZl
KG1hcCwgbGF5ZXJDaHJvbWl1bVJvb3QpOworICAgIGNvbGxlY3RFeGlzdGluZ0NDTGF5ZXJJbXBs
UmVjdXJzaXZlKG9sZExheWVycywgb2xkQ0NMYXllckltcGxSb290KTsKKworICAgIE93blB0cjxD
Q0xheWVySW1wbD4gbmV3VHJlZSA9IHN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShuZXdMYXllcnMs
IG9sZExheWVycywgbGF5ZXJDaHJvbWl1bVJvb3QpOworCisgICAgdXBkYXRlU2Nyb2xsYmFyTGF5
ZXJQb2ludGVyc1JlY3Vyc2l2ZShuZXdMYXllcnMsIGxheWVyQ2hyb21pdW1Sb290KTsKKworICAg
IHJldHVybiBuZXdUcmVlLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBUcmVlU3luY2hyb25pemVyOjpj
b2xsZWN0RXhpc3RpbmdDQ0xheWVySW1wbFJlY3Vyc2l2ZShDQ0xheWVySW1wbE1hcCYgbWFwLCBQ
YXNzT3duUHRyPENDTGF5ZXJJbXBsPiBwb3BDQ0xheWVySW1wbCkKK3ZvaWQgVHJlZVN5bmNocm9u
aXplcjo6Y29sbGVjdEV4aXN0aW5nQ0NMYXllckltcGxSZWN1cnNpdmUoT3duUHRyQ0NMYXllcklt
cGxNYXAmIG9sZExheWVycywgUGFzc093blB0cjxDQ0xheWVySW1wbD4gcG9wQ0NMYXllckltcGwp
CiB7CiAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVySW1wbCA9IHBvcENDTGF5ZXJJbXBs
OwogCkBAIC01MCw0MiArNTgsNTggQEAgdm9pZCBUcmVlU3luY2hyb25pemVyOjpjb2xsZWN0RXhp
c3RpbmdDQ0xheWVySW1wbFJlY3Vyc2l2ZShDQ0xheWVySW1wbE1hcCYgbWFwLAogCiAgICAgVmVj
dG9yPE93blB0cjxDQ0xheWVySW1wbD4gPiYgY2hpbGRyZW4gPSBjY0xheWVySW1wbC0+bV9jaGls
ZHJlbjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKQot
ICAgICAgICBjb2xsZWN0RXhpc3RpbmdDQ0xheWVySW1wbFJlY3Vyc2l2ZShtYXAsIGNoaWxkcmVu
W2ldLnJlbGVhc2UoKSk7CisgICAgICAgIGNvbGxlY3RFeGlzdGluZ0NDTGF5ZXJJbXBsUmVjdXJz
aXZlKG9sZExheWVycywgY2hpbGRyZW5baV0ucmVsZWFzZSgpKTsKIAotICAgIGNvbGxlY3RFeGlz
dGluZ0NDTGF5ZXJJbXBsUmVjdXJzaXZlKG1hcCwgY2NMYXllckltcGwtPm1fbWFza0xheWVyLnJl
bGVhc2UoKSk7Ci0gICAgY29sbGVjdEV4aXN0aW5nQ0NMYXllckltcGxSZWN1cnNpdmUobWFwLCBj
Y0xheWVySW1wbC0+bV9yZXBsaWNhTGF5ZXIucmVsZWFzZSgpKTsKKyAgICBjb2xsZWN0RXhpc3Rp
bmdDQ0xheWVySW1wbFJlY3Vyc2l2ZShvbGRMYXllcnMsIGNjTGF5ZXJJbXBsLT5tX21hc2tMYXll
ci5yZWxlYXNlKCkpOworICAgIGNvbGxlY3RFeGlzdGluZ0NDTGF5ZXJJbXBsUmVjdXJzaXZlKG9s
ZExheWVycywgY2NMYXllckltcGwtPm1fcmVwbGljYUxheWVyLnJlbGVhc2UoKSk7CiAKICAgICBp
bnQgaWQgPSBjY0xheWVySW1wbC0+aWQoKTsKLSAgICBtYXAuc2V0KGlkLCBjY0xheWVySW1wbC5y
ZWxlYXNlKCkpOworICAgIG9sZExheWVycy5zZXQoaWQsIGNjTGF5ZXJJbXBsLnJlbGVhc2UoKSk7
CiB9CiAKLVBhc3NPd25QdHI8Q0NMYXllckltcGw+IFRyZWVTeW5jaHJvbml6ZXI6OnJldXNlT3JD
cmVhdGVDQ0xheWVySW1wbChDQ0xheWVySW1wbE1hcCYgbWFwLCBMYXllckNocm9taXVtKiBsYXll
cikKK1Bhc3NPd25QdHI8Q0NMYXllckltcGw+IFRyZWVTeW5jaHJvbml6ZXI6OnJldXNlT3JDcmVh
dGVDQ0xheWVySW1wbChSYXdQdHJDQ0xheWVySW1wbE1hcCYgbmV3TGF5ZXJzLCBPd25QdHJDQ0xh
eWVySW1wbE1hcCYgb2xkTGF5ZXJzLCBMYXllckNocm9taXVtKiBsYXllcikKIHsKLSAgICBPd25Q
dHI8Q0NMYXllckltcGw+IGNjTGF5ZXJJbXBsID0gbWFwLnRha2UobGF5ZXItPmlkKCkpOworICAg
IE93blB0cjxDQ0xheWVySW1wbD4gY2NMYXllckltcGwgPSBvbGRMYXllcnMudGFrZShsYXllci0+
aWQoKSk7CiAKICAgICBpZiAoIWNjTGF5ZXJJbXBsKQotICAgICAgICByZXR1cm4gbGF5ZXItPmNy
ZWF0ZUNDTGF5ZXJJbXBsKCk7CisgICAgICAgIGNjTGF5ZXJJbXBsID0gbGF5ZXItPmNyZWF0ZUND
TGF5ZXJJbXBsKCk7CiAKKyAgICBuZXdMYXllcnMuc2V0KGxheWVyLT5pZCgpLCBjY0xheWVySW1w
bC5nZXQoKSk7CiAgICAgcmV0dXJuIGNjTGF5ZXJJbXBsLnJlbGVhc2UoKTsKIH0KIAotUGFzc093
blB0cjxDQ0xheWVySW1wbD4gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlUmVjdXJz
aXZlKENDTGF5ZXJJbXBsTWFwJiBtYXAsIExheWVyQ2hyb21pdW0qIGxheWVyKQorUGFzc093blB0
cjxDQ0xheWVySW1wbD4gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlUmVjdXJzaXZl
KFJhd1B0ckNDTGF5ZXJJbXBsTWFwJiBuZXdMYXllcnMsIE93blB0ckNDTGF5ZXJJbXBsTWFwJiBv
bGRMYXllcnMsIExheWVyQ2hyb21pdW0qIGxheWVyKQogewogICAgIGlmICghbGF5ZXIpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVySW1w
bCA9IHJldXNlT3JDcmVhdGVDQ0xheWVySW1wbChtYXAsIGxheWVyKTsKKyAgICBPd25QdHI8Q0NM
YXllckltcGw+IGNjTGF5ZXJJbXBsID0gcmV1c2VPckNyZWF0ZUNDTGF5ZXJJbXBsKG5ld0xheWVy
cywgb2xkTGF5ZXJzLCBsYXllcik7CiAKICAgICBjY0xheWVySW1wbC0+Y2xlYXJDaGlsZExpc3Qo
KTsKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGNoaWxkcmVuID0g
bGF5ZXItPmNoaWxkcmVuKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbi5z
aXplKCk7ICsraSkKLSAgICAgICAgY2NMYXllckltcGwtPmFkZENoaWxkKHN5bmNocm9uaXplVHJl
ZVJlY3Vyc2l2ZShtYXAsIGNoaWxkcmVuW2ldLmdldCgpKSk7CisgICAgICAgIGNjTGF5ZXJJbXBs
LT5hZGRDaGlsZChzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUobmV3TGF5ZXJzLCBvbGRMYXllcnMs
IGNoaWxkcmVuW2ldLmdldCgpKSk7CiAKLSAgICBjY0xheWVySW1wbC0+c2V0TWFza0xheWVyKHN5
bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShtYXAsIGxheWVyLT5tYXNrTGF5ZXIoKSkpOwotICAgIGNj
TGF5ZXJJbXBsLT5zZXRSZXBsaWNhTGF5ZXIoc3luY2hyb25pemVUcmVlUmVjdXJzaXZlKG1hcCwg
bGF5ZXItPnJlcGxpY2FMYXllcigpKSk7CisgICAgY2NMYXllckltcGwtPnNldE1hc2tMYXllcihz
eW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUobmV3TGF5ZXJzLCBvbGRMYXllcnMsIGxheWVyLT5tYXNr
TGF5ZXIoKSkpOworICAgIGNjTGF5ZXJJbXBsLT5zZXRSZXBsaWNhTGF5ZXIoc3luY2hyb25pemVU
cmVlUmVjdXJzaXZlKG5ld0xheWVycywgb2xkTGF5ZXJzLCBsYXllci0+cmVwbGljYUxheWVyKCkp
KTsKIAogICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGNjTGF5ZXJJbXBsLmdldCgpKTsKICAg
ICByZXR1cm4gY2NMYXllckltcGwucmVsZWFzZSgpOwogfQogCit2b2lkIFRyZWVTeW5jaHJvbml6
ZXI6OnVwZGF0ZVNjcm9sbGJhckxheWVyUG9pbnRlcnNSZWN1cnNpdmUoY29uc3QgUmF3UHRyQ0NM
YXllckltcGxNYXAmIG5ld0xheWVycywgTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCit7CisgICAgY29u
c3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBjaGlsZHJlbiA9IGxheWVyLT5jaGls
ZHJlbigpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyArK2kp
CisgICAgICAgIHVwZGF0ZVNjcm9sbGJhckxheWVyUG9pbnRlcnNSZWN1cnNpdmUobmV3TGF5ZXJz
LCBjaGlsZHJlbltpXS5nZXQoKSk7CisKKyAgICBTY3JvbGxiYXJMYXllckNocm9taXVtKiBzY3Jv
bGxiYXJMYXllciA9IGxheWVyLT50b1Njcm9sbGJhckxheWVyQ2hyb21pdW0oKTsKKyAgICBpZiAo
IXNjcm9sbGJhckxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBDQ1Njcm9sbGJhckxheWVy
SW1wbCogY2NTY3JvbGxiYXJMYXllckltcGwgPSBzdGF0aWNfY2FzdDxDQ1Njcm9sbGJhckxheWVy
SW1wbCo+KG5ld0xheWVycy5nZXQoc2Nyb2xsYmFyTGF5ZXItPmlkKCkpKTsKKyAgICBBU1NFUlQo
Y2NTY3JvbGxiYXJMYXllckltcGwpOworICAgIGNjU2Nyb2xsYmFyTGF5ZXJJbXBsLT5zZXRTY3Jv
bGxMYXllcihuZXdMYXllcnMuZ2V0KHNjcm9sbGJhckxheWVyLT5zY3JvbGxMYXllcklkKCkpKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5oCmluZGV4
IDEzNDcwOGNhNDNiZDg5ZWNiZGYyZmQyMTU5MmZkMDcyODZkY2MxNzkuLjFkYmViOGJlZGNhYTEx
MTNjMDZhYjY1YjhjNzIzNmM1MWRkMWNlYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmgKQEAg
LTQ2LDEyICs0NiwxNCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFRyZWVTeW5jaHJvbml6ZXIo
KTsgLy8gTm90IGluc3RhbnRpYWJsZS4KIAotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIE93blB0
cjxDQ0xheWVySW1wbD4gPiBDQ0xheWVySW1wbE1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50
LCBPd25QdHI8Q0NMYXllckltcGw+ID4gT3duUHRyQ0NMYXllckltcGxNYXA7CisgICAgdHlwZWRl
ZiBIYXNoTWFwPGludCwgQ0NMYXllckltcGwqPiBSYXdQdHJDQ0xheWVySW1wbE1hcDsKIAogICAg
IC8vIERlY2xhcmVkIGFzIHN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zIHNvIHRoZXkgY2FuIGFjY2Vz
cyBmdW5jdGlvbnMgb24gTGF5ZXJDaHJvbWl1bSBhcyBhIGZyaWVuZCBjbGFzcy4KLSAgICBzdGF0
aWMgUGFzc093blB0cjxDQ0xheWVySW1wbD4gcmV1c2VPckNyZWF0ZUNDTGF5ZXJJbXBsKENDTGF5
ZXJJbXBsTWFwJiwgTGF5ZXJDaHJvbWl1bSopOwotICAgIHN0YXRpYyB2b2lkIGNvbGxlY3RFeGlz
dGluZ0NDTGF5ZXJJbXBsUmVjdXJzaXZlKENDTGF5ZXJJbXBsTWFwJiwgUGFzc093blB0cjxDQ0xh
eWVySW1wbD4pOwotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBzeW5jaHJvbml6
ZVRyZWVSZWN1cnNpdmUoQ0NMYXllckltcGxNYXAmLCBMYXllckNocm9taXVtKik7CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8Q0NMYXllckltcGw+IHJldXNlT3JDcmVhdGVDQ0xheWVySW1wbChSYXdQ
dHJDQ0xheWVySW1wbE1hcCYgbmV3TGF5ZXJzLCBPd25QdHJDQ0xheWVySW1wbE1hcCYgb2xkTGF5
ZXJzLCBMYXllckNocm9taXVtKik7CisgICAgc3RhdGljIHZvaWQgY29sbGVjdEV4aXN0aW5nQ0NM
YXllckltcGxSZWN1cnNpdmUoT3duUHRyQ0NMYXllckltcGxNYXAmIG9sZExheWVycywgUGFzc093
blB0cjxDQ0xheWVySW1wbD4pOworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBz
eW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUoUmF3UHRyQ0NMYXllckltcGxNYXAmIG5ld0xheWVycywg
T3duUHRyQ0NMYXllckltcGxNYXAmIG9sZExheWVycywgTGF5ZXJDaHJvbWl1bSopOworICAgIHN0
YXRpYyB2b2lkIHVwZGF0ZVNjcm9sbGJhckxheWVyUG9pbnRlcnNSZWN1cnNpdmUoY29uc3QgUmF3
UHRyQ0NMYXllckltcGxNYXAmIG5ld0xheWVycywgTGF5ZXJDaHJvbWl1bSopOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNw
cAppbmRleCAxYzVmMjNhOTEwMjU5MDlmNWM4MTY3OTM4YTYyYWE3MmExNjEyMThhLi41Yzg5YmQ2
YTdiMDZkYjdlZGY3ZTg2Y2U2MzlmOTk0MDZhN2M1NDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtNDc5LDYgKzQ3OSwxMCBAQCB2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OnVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgRmxvYXRTaXplIHZpZXdCb3VuZHMgPSBtX3ZpZXdwb3J0U2l6ZTsKKyAgICBpZiAoQ0NMYXll
ckltcGwqIGNsaXBMYXllciA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5wYXJlbnQoKSkgeworICAgICAg
ICBpZiAoY2xpcExheWVyLT5tYXNrc1RvQm91bmRzKCkpCisgICAgICAgICAgICB2aWV3Qm91bmRz
ID0gY2xpcExheWVyLT5ib3VuZHMoKTsKKyAgICB9CiAgICAgdmlld0JvdW5kcy5zY2FsZSgxIC8g
bV9wYWdlU2NhbGVEZWx0YSk7CiAKICAgICBJbnRTaXplIG1heFNjcm9sbCA9IGNvbnRlbnRTaXpl
KCkgLSBleHBhbmRlZEludFNpemUodmlld0JvdW5kcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9s
bGJhckxheWVySW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGI4NWRiODRlMDZlNjQ0Yjg5MzdjNGIyODMw
NzYwYmQxMDdlNWI4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmNwcApAQCAtMCwwICsx
LDI3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkNDU2Nyb2xsYmFyTGF5ZXJJbXBsLmgiCisKKyNp
bmNsdWRlICJDQ1RpbGVEcmF3UXVhZC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1
bS5oIgorI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1DYW52
YXMuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1Bhc3NPd25QdHI8Q0NTY3JvbGxiYXJMYXllckltcGw+IENDU2Nyb2xsYmFyTGF5ZXJJbXBs
OjpjcmVhdGUoaW50IGlkKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NTY3JvbGxiYXJM
YXllckltcGwoaWQpKTsKK30KKworQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyTGF5
ZXJJbXBsKGludCBpZCkKKyAgICA6IENDTGF5ZXJJbXBsKGlkKQorICAgICwgbV9zY3JvbGxMYXll
cigwKQorICAgICwgbV9zY3JvbGxiYXIodGhpcykKK3sKK30KKwordm9pZCBDQ1Njcm9sbGJhckxh
eWVySW1wbDo6d2lsbERyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQor
eworICAgIGlmIChib3VuZHMoKS5pc0VtcHR5KCkgfHwgY29udGVudEJvdW5kcygpLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3RleHR1cmUpCisgICAgICAgIG1fdGV4
dHVyZSA9IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobGF5ZXJSZW5kZXJlci0+cmVuZGVyU3VyZmFj
ZVRleHR1cmVNYW5hZ2VyKCkpOworCisgICAgSW50U2l6ZSB0ZXh0dXJlU2l6ZSA9IGNvbnRlbnRC
b3VuZHMoKTsKKyAgICBpZiAoIW1fdGV4dHVyZS0+cmVzZXJ2ZSh0ZXh0dXJlU2l6ZSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEpKQorICAgICAgICByZXR1cm47CisKKyAgICBQbGF0Zm9ybUNhbnZh
cyBjYW52YXM7CisgICAgY2FudmFzLnJlc2l6ZSh0ZXh0dXJlU2l6ZSk7CisgICAgeworICAgICAg
ICBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlciBwYWludGVyKCZjYW52YXMsIFBsYXRmb3JtQ2FudmFz
OjpQYWludGVyOjpHcmF5c2NhbGVUZXh0KTsKKyAgICAgICAgcGFpbnQocGFpbnRlci5jb250ZXh0
KCkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgUGxhdGZvcm1DYW52YXM6OkF1dG9Mb2NrZXIg
bG9ja2VyKCZjYW52YXMpOworICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxh
eWVyUmVuZGVyZXItPmNvbnRleHQoKTsKKyAgICAgICAgbV90ZXh0dXJlLT5iaW5kVGV4dHVyZShj
b250ZXh0LCBsYXllclJlbmRlcmVyLT5yZW5kZXJTdXJmYWNlVGV4dHVyZUFsbG9jYXRvcigpKTsK
KworICAgICAgICAvLyBGSVhNRTogU2tpYSB1c2VzIEJHUkEgYWN0dWFsbHksIHdlIGNvcnJlY3Qg
dGhhdCB3aXRoIHRoZSBzd2l6emxlIHBpeGVsIHNoYWRlci4KKyAgICAgICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIG1f
dGV4dHVyZS0+Zm9ybWF0KCksIGNhbnZhcy5zaXplKCkud2lkdGgoKSwgY2FudmFzLnNpemUoKS5o
ZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFLCBsb2NrZXIucGl4ZWxzKCkpKTsKKyAgICB9Cit9CisKK3ZvaWQgQ0NTY3Jv
bGxiYXJMYXllckltcGw6OmFwcGVuZFF1YWRzKENDUXVhZExpc3QmIHF1YWRMaXN0LCBjb25zdCBD
Q1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlKQoreworICAgIGlmICghbV90ZXh0dXJl
LT5pc1Jlc2VydmVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEludFJlY3QgcXVhZFJlY3Qo
SW50UG9pbnQoKSwgYm91bmRzKCkpOworICAgIHF1YWRMaXN0LmFwcGVuZChDQ1RpbGVEcmF3UXVh
ZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHF1YWRSZWN0LCBtX3RleHR1cmUt
PnRleHR1cmVJZCgpLCBJbnRQb2ludCgpLCBtX3RleHR1cmUtPnNpemUoKSwgR3JhcGhpY3NDb250
ZXh0M0Q6Ok5FQVJFU1QsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUpKTsKK30KKwordm9p
ZCBDQ1Njcm9sbGJhckxheWVySW1wbDo6ZGlkRHJhdygpCit7CisgICAgbV90ZXh0dXJlLT51bnJl
c2VydmUoKTsKK30KKwordm9pZCBDQ1Njcm9sbGJhckxheWVySW1wbDo6cGFpbnQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0KQoreworICAgIFNjcm9sbGJhclRoZW1lKiB0aGVtZSA9IFNjcm9sbGJh
clRoZW1lOjp0aGVtZSgpOyAvLyBGSVhNRTogc2hvdWxkIG1ha2UgaW1wbC1zaWRlIGNsb25lIGlm
IG5lZWRlZAorCisgICAgY29udGV4dC0+Y2xlYXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29u
dGVudEJvdW5kcygpKSk7CisgICAgdGhlbWUtPnBhaW50KCZtX3Njcm9sbGJhciwgY29udGV4dCwg
SW50UmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91bmRzKCkpKTsKK30KKworCitpbnQgQ0NTY3Jv
bGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjp4KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZnJh
bWVSZWN0KCkueCgpOworfQorCitpbnQgQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFy
Ojp5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZnJhbWVSZWN0KCkueSgpOworfQorCitpbnQgQ0NT
Y3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjp3aWR0aCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGZyYW1lUmVjdCgpLndpZHRoKCk7Cit9CisKK2ludCBDQ1Njcm9sbGJhckxheWVySW1wbDo6
Q0NTY3JvbGxiYXI6OmhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZyYW1lUmVjdCgpLmhl
aWdodCgpOworfQorCitJbnRTaXplIENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6
c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZyYW1lUmVjdCgpLnNpemUoKTsKK30KKworSW50
UG9pbnQgQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpsb2NhdGlvbigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGZyYW1lUmVjdCgpLmxvY2F0aW9uKCk7Cit9CisKK1Njcm9sbFZpZXcq
IENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6cGFyZW50KCkgY29uc3QKK3sKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworU2Nyb2xsVmlldyog
Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpyb290KCkgY29uc3QKK3sKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBDQ1Njcm9sbGJh
ckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JikKK3sK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworSW50UmVjdCBDQ1Njcm9sbGJhckxheWVy
SW1wbDo6Q0NTY3JvbGxiYXI6OmZyYW1lUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFJl
Y3QoSW50UG9pbnQoKSwgbV9vd25lci0+Y29udGVudEJvdW5kcygpKTsKK30KKwordm9pZCBDQ1Nj
cm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OmludmFsaWRhdGUoKQoreworICAgIGludmFs
aWRhdGVSZWN0KGZyYW1lUmVjdCgpKTsKK30KKwordm9pZCBDQ1Njcm9sbGJhckxheWVySW1wbDo6
Q0NTY3JvbGxiYXI6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmKQoreworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCitTY3JvbGxiYXJPdmVybGF5U3R5bGUgQ0NTY3JvbGxiYXJM
YXllckltcGw6OkNDU2Nyb2xsYmFyOjpzY3JvbGxiYXJPdmVybGF5U3R5bGUoKSBjb25zdAorewor
ICAgIHJldHVybiBtX293bmVyLT5tX3Njcm9sbGJhck92ZXJsYXlTdHlsZTsKK30KKwordm9pZCBD
Q1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OmdldFRpY2ttYXJrcyhWZWN0b3I8SW50
UmVjdD4mIHRpY2ttYXJrcykgY29uc3QKK3sKKyAgICB0aWNrbWFya3MgPSBtX293bmVyLT5tX3Rp
Y2ttYXJrczsKK30KKworYm9vbCBDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6Omlz
U2Nyb2xsYWJsZUFyZWFBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX293bmVyLT5tX2lz
U2Nyb2xsYWJsZUFyZWFBY3RpdmU7Cit9CisKK2Jvb2wgQ0NTY3JvbGxiYXJMYXllckltcGw6OkND
U2Nyb2xsYmFyOjppc1Njcm9sbFZpZXdTY3JvbGxiYXIoKSBjb25zdAoreworICAgIHJldHVybiBt
X293bmVyLT5tX2lzU2Nyb2xsVmlld1Njcm9sbGJhcjsKK30KKworSW50UG9pbnQgQ0NTY3JvbGxi
YXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coY29u
c3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiB3aW5kb3dQb2ludDsKK30KKworYm9vbCBDQ1Njcm9sbGJhckxheWVySW1wbDo6
Q0NTY3JvbGxiYXI6OmlzQ3VzdG9tU2Nyb2xsYmFyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK1Njcm9sbGJhck9yaWVudGF0aW9uIENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Nj
cm9sbGJhcjo6b3JpZW50YXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX293bmVyLT5tX29y
aWVudGF0aW9uOworfQorCitpbnQgQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjp2
YWx1ZSgpIGNvbnN0Cit7CisgICAgaWYgKG9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9s
bGJhcikKKyAgICAgICAgcmV0dXJuIG1fb3duZXItPm1fc2Nyb2xsTGF5ZXItPnNjcm9sbFBvc2l0
aW9uKCkueCgpICsgbV9vd25lci0+bV9zY3JvbGxMYXllci0+c2Nyb2xsRGVsdGEoKS53aWR0aCgp
OworICAgIHJldHVybiBtX293bmVyLT5tX3Njcm9sbExheWVyLT5zY3JvbGxQb3NpdGlvbigpLnko
KSArIG1fb3duZXItPm1fc2Nyb2xsTGF5ZXItPnNjcm9sbERlbHRhKCkuaGVpZ2h0KCk7Cit9CisK
K2Zsb2F0IENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6Y3VycmVudFBvcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHZhbHVlKCk7Cit9CisKK2ludCBDQ1Njcm9sbGJhckxheWVySW1w
bDo6Q0NTY3JvbGxiYXI6OnZpc2libGVTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdG90YWxT
aXplKCkgLSBtYXhpbXVtKCk7Cit9CisKK2ludCBDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3Jv
bGxiYXI6OnRvdGFsU2l6ZSgpIGNvbnN0Cit7CisgICAgLy8gQ29weSAmIHBhc3RlIGZyb20gQ0NM
YXllclRyZWVIb3N0SW1wbC4uLgorICAgIC8vIEZJWE1FOiBIYXJkY29kaW5nIHRoZSBmaXJzdCBj
aGlsZCBoZXJlIGlzIHdlaXJkLiBUaGluayBvZgorICAgIC8vIGEgY2xlYW5lciB3YXkgdG8gZ2V0
IHRoZSBjb250ZW50Qm91bmRzIG9uIHRoZSBJbXBsIHNpZGUuCisgICAgaWYgKG9yaWVudGF0aW9u
KCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIG1fb3duZXItPm1fc2Ny
b2xsTGF5ZXItPmNoaWxkcmVuKClbMF0tPmNvbnRlbnRCb3VuZHMoKS53aWR0aCgpOworICAgIHJl
dHVybiBtX293bmVyLT5tX3Njcm9sbExheWVyLT5jaGlsZHJlbigpWzBdLT5jb250ZW50Qm91bmRz
KCkuaGVpZ2h0KCk7Cit9CisKK2ludCBDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6
Om1heGltdW0oKSBjb25zdAoreworICAgIGlmIChvcmllbnRhdGlvbigpID09IEhvcml6b250YWxT
Y3JvbGxiYXIpCisgICAgICAgIHJldHVybiBtX293bmVyLT5tX3Njcm9sbExheWVyLT5tYXhTY3Jv
bGxQb3NpdGlvbigpLndpZHRoKCk7CisgICAgcmV0dXJuIG1fb3duZXItPm1fc2Nyb2xsTGF5ZXIt
Pm1heFNjcm9sbFBvc2l0aW9uKCkuaGVpZ2h0KCk7Cit9CisKK1Njcm9sbGJhckNvbnRyb2xTaXpl
IENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6Y29udHJvbFNpemUoKSBjb25zdAor
eworICAgIHJldHVybiBtX293bmVyLT5tX2NvbnRyb2xTaXplOworfQorCitpbnQgQ0NTY3JvbGxi
YXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpsaW5lU3RlcCgpIGNvbnN0Cit7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBDQ1Njcm9sbGJhckxheWVy
SW1wbDo6Q0NTY3JvbGxiYXI6OnBhZ2VTdGVwKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworU2Nyb2xsYmFyUGFydCBDQ1Njcm9sbGJhckxh
eWVySW1wbDo6Q0NTY3JvbGxiYXI6OnByZXNzZWRQYXJ0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9vd25lci0+bV9wcmVzc2VkUGFydDsKK30KKworU2Nyb2xsYmFyUGFydCBDQ1Njcm9sbGJhckxh
eWVySW1wbDo6Q0NTY3JvbGxiYXI6OmhvdmVyZWRQYXJ0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9vd25lci0+bV9ob3ZlcmVkUGFydDsKK30KKwordm9pZCBDQ1Njcm9sbGJhckxheWVySW1wbDo6
Q0NTY3JvbGxiYXI6OnN0eWxlQ2hhbmdlZCgpCit7Cit9CisKK2Jvb2wgQ0NTY3JvbGxiYXJMYXll
ckltcGw6OkNDU2Nyb2xsYmFyOjplbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9vd25l
ci0+bV9lbmFibGVkOworfQorCit2b2lkIENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJh
cjo6c2V0RW5hYmxlZChib29sKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9
CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJMYXll
ckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2Nyb2xsYmFyTGF5ZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjZmMDA1MzYwOTU5Y2I0NGFhYmE0NDg2
ZDU1MTEwMTgyZjBlOGM3YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmgKQEAgLTAsMCAr
MSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDU2Nyb2xsYmFyTGF5ZXJJbXBsX2gKKyNkZWZpbmUg
Q0NTY3JvbGxiYXJMYXllckltcGxfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorCisjaW5jbHVkZSAiQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5o
IgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lQ2xpZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgU2Nyb2xsVmlldzsKKworY2xhc3Mg
Q0NTY3JvbGxiYXJMYXllckltcGwgOiBwdWJsaWMgQ0NMYXllckltcGwgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzT3duUHRyPENDU2Nyb2xsYmFyTGF5ZXJJbXBsPiBjcmVhdGUoaW50IGlkKTsK
KworICAgIHZvaWQgc2V0U2Nyb2xsYmFyT3ZlcmxheVN0eWxlKFNjcm9sbGJhck92ZXJsYXlTdHls
ZSBzY3JvbGxiYXJPdmVybGF5U3R5bGUpIHsgbV9zY3JvbGxiYXJPdmVybGF5U3R5bGUgPSBzY3Jv
bGxiYXJPdmVybGF5U3R5bGU7IH0KKyAgICB2b2lkIHNldFRpY2ttYXJrcyhjb25zdCBWZWN0b3I8
SW50UmVjdD4mIHRpY2ttYXJrcykgeyBtX3RpY2ttYXJrcyA9IHRpY2ttYXJrczsgfQorICAgIHZv
aWQgc2V0SXNTY3JvbGxhYmxlQXJlYUFjdGl2ZShib29sIGlzU2Nyb2xsYWJsZUFyZWFBY3RpdmUp
IHsgbV9pc1Njcm9sbGFibGVBcmVhQWN0aXZlID0gaXNTY3JvbGxhYmxlQXJlYUFjdGl2ZTsgfQor
ICAgIHZvaWQgc2V0SXNTY3JvbGxWaWV3U2Nyb2xsYmFyKGJvb2wgaXNTY3JvbGxWaWV3U2Nyb2xs
YmFyKSB7IG1faXNTY3JvbGxWaWV3U2Nyb2xsYmFyID0gaXNTY3JvbGxWaWV3U2Nyb2xsYmFyOyB9
CisKKyAgICB2b2lkIHNldE9yaWVudGF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKSB7IG1fb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsgfQorCisgICAgdm9pZCBzZXRDb250
cm9sU2l6ZShTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkgeyBtX2NvbnRyb2xTaXpl
ID0gY29udHJvbFNpemU7IH0KKworICAgIHZvaWQgc2V0UHJlc3NlZFBhcnQoU2Nyb2xsYmFyUGFy
dCBwcmVzc2VkUGFydCkgeyBtX3ByZXNzZWRQYXJ0ID0gcHJlc3NlZFBhcnQ7IH0KKyAgICB2b2lk
IHNldEhvdmVyZWRQYXJ0KFNjcm9sbGJhclBhcnQgaG92ZXJlZFBhcnQpIHsgbV9ob3ZlcmVkUGFy
dCA9IGhvdmVyZWRQYXJ0OyB9CisKKyAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCBlbmFibGVkKSB7
IG1fZW5hYmxlZCA9IGVuYWJsZWQ7IH0KKworCisgICAgQ0NMYXllckltcGwqIHNjcm9sbExheWVy
KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxMYXllcjsgfQorICAgIHZvaWQgc2V0U2Nyb2xsTGF5
ZXIoQ0NMYXllckltcGwqIHNjcm9sbExheWVyKSB7IG1fc2Nyb2xsTGF5ZXIgPSBzY3JvbGxMYXll
cjsgfQorCisgICAgdmlydHVhbCB2b2lkIHdpbGxEcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSop
OworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRRdWFkcyhDQ1F1YWRMaXN0JiwgY29uc3QgQ0NTaGFy
ZWRRdWFkU3RhdGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRHJhdygpOworCitwcm90ZWN0ZWQ6
CisgICAgZXhwbGljaXQgQ0NTY3JvbGxiYXJMYXllckltcGwoaW50IGlkKTsKKworcHJpdmF0ZToK
KyAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCopOworCisgICAgQ0NMYXllckltcGwqIG1f
c2Nyb2xsTGF5ZXI7CisgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBtX3RleHR1cmU7CisKKyAg
ICAvLyBuZXN0ZWQgY2xhc3Mgb25seSB0byBhdm9pZCBuYW1lc3BhY2UgcHJvYmxlbQorICAgIGNs
YXNzIENDU2Nyb2xsYmFyIDogcHVibGljIFNjcm9sbGJhclRoZW1lQ2xpZW50IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIGV4cGxpY2l0IENDU2Nyb2xsYmFyKENDU2Nyb2xsYmFyTGF5ZXJJbXBsKiBv
d25lcikgOiBtX293bmVyKG93bmVyKSB7IH0KKworICAgICAgICAvLyBTY3JvbGxiYXJUaGVtZUNs
aWVudCBpbXBsZW1lbnRhdGlvbgorICAgICAgICB2aXJ0dWFsIGludCB4KCkgY29uc3Q7CisgICAg
ICAgIHZpcnR1YWwgaW50IHkoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBpbnQgd2lkdGgoKSBj
b25zdDsKKyAgICAgICAgdmlydHVhbCBpbnQgaGVpZ2h0KCkgY29uc3Q7CisgICAgICAgIHZpcnR1
YWwgSW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgSW50UG9pbnQgbG9jYXRp
b24oKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIFNjcm9sbFZpZXcqIHBhcmVudCgpIGNvbnN0
OworICAgICAgICB2aXJ0dWFsIFNjcm9sbFZpZXcqIHJvb3QoKSBjb25zdDsKKworICAgICAgICB2
aXJ0dWFsIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVh
bCBJbnRSZWN0IGZyYW1lUmVjdCgpIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgdm9pZCBpbnZh
bGlkYXRlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRS
ZWN0Jik7CisKKyAgICAgICAgdmlydHVhbCBTY3JvbGxiYXJPdmVybGF5U3R5bGUgc2Nyb2xsYmFy
T3ZlcmxheVN0eWxlKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBnZXRUaWNrbWFya3Mo
VmVjdG9yPEludFJlY3Q+JikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbGFi
bGVBcmVhQWN0aXZlKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbFZpZXdT
Y3JvbGxiYXIoKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9t
Q29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpOworCisgICAgICAg
IHZpcnR1YWwgYm9vbCBpc0N1c3RvbVNjcm9sbGJhcigpIGNvbnN0OworICAgICAgICB2aXJ0dWFs
IFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3Q7CisKKyAgICAgICAgdmly
dHVhbCBpbnQgdmFsdWUoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBmbG9hdCBjdXJyZW50UG9z
KCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgaW50IHZpc2libGVTaXplKCkgY29uc3Q7CisgICAg
ICAgIHZpcnR1YWwgaW50IHRvdGFsU2l6ZSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGludCBt
YXhpbXVtKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29u
dHJvbFNpemUoKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIGludCBsaW5lU3RlcCgpIGNvbnN0
OworICAgICAgICB2aXJ0dWFsIGludCBwYWdlU3RlcCgpIGNvbnN0OworCisgICAgICAgIHZpcnR1
YWwgU2Nyb2xsYmFyUGFydCBwcmVzc2VkUGFydCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFNj
cm9sbGJhclBhcnQgaG92ZXJlZFBhcnQoKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQg
c3R5bGVDaGFuZ2VkKCk7CisKKyAgICAgICAgdmlydHVhbCBib29sIGVuYWJsZWQoKSBjb25zdDsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHNldEVuYWJsZWQoYm9vbCk7CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBDQ1Njcm9sbGJhckxheWVySW1wbCogbV9vd25lcjsKKworICAgIH07CisgICAgQ0NT
Y3JvbGxiYXIgbV9zY3JvbGxiYXI7CisKKyAgICBTY3JvbGxiYXJPdmVybGF5U3R5bGUgbV9zY3Jv
bGxiYXJPdmVybGF5U3R5bGU7CisgICAgVmVjdG9yPEludFJlY3Q+IG1fdGlja21hcmtzOworICAg
IGJvb2wgbV9pc1Njcm9sbGFibGVBcmVhQWN0aXZlOworICAgIGJvb2wgbV9pc1Njcm9sbFZpZXdT
Y3JvbGxiYXI7CisKKyAgICBTY3JvbGxiYXJPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uOworCisg
ICAgU2Nyb2xsYmFyQ29udHJvbFNpemUgbV9jb250cm9sU2l6ZTsKKworICAgIFNjcm9sbGJhclBh
cnQgbV9wcmVzc2VkUGFydDsKKyAgICBTY3JvbGxiYXJQYXJ0IG1faG92ZXJlZFBhcnQ7CisKKyAg
ICBib29sIG1fZW5hYmxlZDsKK307CisKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggYjUy
NzQxNjg2MzY5YjQ5MGNjOTBiZDNhMmM1NDhjNDA3YTIxM2JkMS4uZWE0MTljODFmNmZkOTk5ODk2
YTFiMmQ5OWQ1Y2VhNjBmNjFhNGE4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBA
IC0xMTEsNiArMTExLDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9QT0RJbnRlcnZhbFRyZWVUZXN0
LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvUE9EUmVkQmxhY2tUcmVlVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL1JlbmRlclRhYmxlQ2VsbFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0
ZXN0cy9TY3JvbGxiYXJMYXllckNocm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3Rz
L1RleHR1cmVNYW5hZ2VyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1RpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9UaWxpbmdEYXRhVGVzdC5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9TY3JvbGxiYXJMYXll
ckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1Njcm9sbGJh
ckxheWVyQ2hyb21pdW1UZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OGI5NmI0OTVmYzAxYzUwYjJkM2E5
MDk5ZTlkMGRiZmUwMmFlZDRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9TY3JvbGxiYXJMYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTAsMCArMSwxMjYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlNjcm9s
bGJhckxheWVyQ2hyb21pdW0uaCIKKworI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorI2luY2x1ZGUg
IlRyZWVTeW5jaHJvbml6ZXIuaCIKKyNpbmNsdWRlICJjYy9DQ1Njcm9sbGJhckxheWVySW1wbC5o
IgorI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKKyNpbmNsdWRlIDxndGVzdC9n
dGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworY2xh
c3MgTW9ja1Njcm9sbGJhciA6IHB1YmxpYyBTY3JvbGxiYXIgeworcHVibGljOgorICAgIHZpcnR1
YWwgaW50IHgoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBpbnQgeSgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KKyAgICB2aXJ0dWFsIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmly
dHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKCk7IH0KKyAgICB2aXJ0
dWFsIEludFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gSW50UG9pbnQoKTsgfQorCisg
ICAgdmlydHVhbCBTY3JvbGxWaWV3KiBwYXJlbnQoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAg
dmlydHVhbCBTY3JvbGxWaWV3KiByb290KCkgY29uc3QgeyByZXR1cm4gMDsgfQorCisgICAgdmly
dHVhbCB2b2lkIHNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JikgeyB9CisgICAgdmlydHVhbCBJ
bnRSZWN0IGZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoKTsgfQorCisgICAgdmly
dHVhbCB2b2lkIGludmFsaWRhdGUoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVJl
Y3QoY29uc3QgSW50UmVjdCYpIHsgfQorCisgICAgdmlydHVhbCBTY3JvbGxiYXJPdmVybGF5U3R5
bGUgc2Nyb2xsYmFyT3ZlcmxheVN0eWxlKCkgY29uc3QgeyByZXR1cm4gU2Nyb2xsYmFyT3Zlcmxh
eVN0eWxlRGVmYXVsdDsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRUaWNrbWFya3MoVmVjdG9yPElu
dFJlY3Q+JikgY29uc3QgeyB9CisgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsYWJsZUFyZWFBY3Rp
dmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbFZp
ZXdTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCBJbnRQ
b2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9pbnQmIHdpbmRvd1Bv
aW50KSB7IHJldHVybiBJbnRQb2ludCgpOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDdXN0b21T
Y3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBIb3Jpem9udGFsU2Nyb2xs
YmFyOyB9CisKKyAgICB2aXJ0dWFsIGludCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAg
ICB2aXJ0dWFsIGZsb2F0IGN1cnJlbnRQb3MoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmly
dHVhbCBpbnQgdmlzaWJsZVNpemUoKSBjb25zdCB7IHJldHVybiAxOyB9CisgICAgdmlydHVhbCBp
bnQgdG90YWxTaXplKCkgY29uc3QgeyByZXR1cm4gMTsgfQorICAgIHZpcnR1YWwgaW50IG1heGlt
dW0oKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBTY3JvbGxiYXJDb250cm9sU2l6
ZSBjb250cm9sU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIFJlZ3VsYXJTY3JvbGxiYXI7IH0KKworICAg
IHZpcnR1YWwgaW50IGxpbmVTdGVwKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwg
aW50IHBhZ2VTdGVwKCkgY29uc3QgeyByZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCBTY3JvbGxi
YXJQYXJ0IHByZXNzZWRQYXJ0KCkgY29uc3QgeyByZXR1cm4gTm9QYXJ0OyB9CisgICAgdmlydHVh
bCBTY3JvbGxiYXJQYXJ0IGhvdmVyZWRQYXJ0KCkgY29uc3QgeyByZXR1cm4gTm9QYXJ0OyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgc3R5bGVDaGFuZ2VkKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wg
ZW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEVu
YWJsZWQoYm9vbCkgeyB9CisKKyAgICBNb2NrU2Nyb2xsYmFyKCkgOiBTY3JvbGxiYXIoMCwgSG9y
aXpvbnRhbFNjcm9sbGJhciwgUmVndWxhclNjcm9sbGJhcikgeyB9CisgICAgdmlydHVhbCB+TW9j
a1Njcm9sbGJhcigpIHsgfQorfTsKKworVEVTVChTY3JvbGxiYXJMYXllckNocm9taXVtVGVzdCwg
cmVzb2x2ZVNjcm9sbExheWVyUG9pbnRlcikKK3sKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJl
YWQgaW1wbDsKKworICAgIHsKKyAgICAgICAgUmVmUHRyPE1vY2tTY3JvbGxiYXI+IHNjcm9sbGJh
ciA9IGFkb3B0UmVmKG5ldyBNb2NrU2Nyb2xsYmFyKTsKKyAgICAgICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICAgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwor
ICAgICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQyID0gU2Nyb2xsYmFyTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKHNjcm9sbGJhci5nZXQoKSwgY2hpbGQxLT5pZCgpKTsKKyAgICAgICAgbGF5
ZXJUcmVlUm9vdC0+YWRkQ2hpbGQoY2hpbGQxKTsKKyAgICAgICAgbGF5ZXJUcmVlUm9vdC0+YWRk
Q2hpbGQoY2hpbGQyKTsKKworICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVl
Um9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5n
ZXQoKSwgbnVsbHB0cik7CisKKyAgICAgICAgQ0NMYXllckltcGwqIGNjQ2hpbGQxID0gY2NMYXll
clRyZWVSb290LT5jaGlsZHJlbigpWzBdLmdldCgpOworICAgICAgICBDQ1Njcm9sbGJhckxheWVy
SW1wbCogY2NDaGlsZDIgPSBzdGF0aWNfY2FzdDxDQ1Njcm9sbGJhckxheWVySW1wbCo+KGNjTGF5
ZXJUcmVlUm9vdC0+Y2hpbGRyZW4oKVsxXS5nZXQoKSk7CisKKyAgICAgICAgRVhQRUNUX0VRKGNj
Q2hpbGQxLCBjY0NoaWxkMi0+c2Nyb2xsTGF5ZXIoKSk7CisgICAgfQorCisgICAgeyAvLyBhbm90
aGVyIHRyYXZlcnNlIG9yZGVyCisgICAgICAgIFJlZlB0cjxNb2NrU2Nyb2xsYmFyPiBzY3JvbGxi
YXIgPSBhZG9wdFJlZihuZXcgTW9ja1Njcm9sbGJhcik7CisgICAgICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBsYXllclRyZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
KyAgICAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkMSA9IFNjcm9sbGJhckxheWVyQ2hy
b21pdW06OmNyZWF0ZShzY3JvbGxiYXIuZ2V0KCksIGNoaWxkMi0+aWQoKSk7CisgICAgICAgIGxh
eWVyVHJlZVJvb3QtPmFkZENoaWxkKGNoaWxkMSk7CisgICAgICAgIGxheWVyVHJlZVJvb3QtPmFk
ZENoaWxkKGNoaWxkMik7CisKKyAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVyVHJl
ZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3Qu
Z2V0KCksIG51bGxwdHIpOworCisgICAgICAgIENDU2Nyb2xsYmFyTGF5ZXJJbXBsKiBjY0NoaWxk
MSA9IHN0YXRpY19jYXN0PENDU2Nyb2xsYmFyTGF5ZXJJbXBsKj4oY2NMYXllclRyZWVSb290LT5j
aGlsZHJlbigpWzBdLmdldCgpKTsKKyAgICAgICAgQ0NMYXllckltcGwqIGNjQ2hpbGQyID0gY2NM
YXllclRyZWVSb290LT5jaGlsZHJlbigpWzFdLmdldCgpOworCisgICAgICAgIEVYUEVDVF9FUShj
Y0NoaWxkMS0+c2Nyb2xsTGF5ZXIoKSwgY2NDaGlsZDIpOworICAgIH0KK30KKworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130677</attachid>
            <date>2012-03-07 13:16:23 -0800</date>
            <delta_ts>2012-03-07 23:48:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78872-20120307131622.patch</filename>
            <type>text/plain</type>
            <size>50643</size>
            <attacher name="Tien-Ren Chen">trchen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5OTk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTg1NjViZTA3NWE1MWU0
YmUzNGIzNWVjN2I5OGI5ZmQ0ZDE1MDE1MS4uOWZhNTkwNTVlYmRiYmY5YzQzMjhlZjcxN2Q2MWM3
MjUxMjIyZTIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNiBAQAorMjAxMi0wMy0wNiAgVGll
bi1SZW4gQ2hlbiAgPHRyY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBT
Y3JvbGxiYXJMYXllckNocm9taXVtL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsIGZvciBDQy1zaWRlIHNj
cm9sbGJhciBwYWludGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Nzg4NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBOZXcgdGVzdCBTY3JvbGxiYXJMYXllckNocm9taXVtVGVzdC5yZXNvbHZlU2Nyb2xs
TGF5ZXJQb2ludGVyCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGFnZS9z
Y3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpzY3JvbGxMYXllckZvckZyYW1lVmlldyk6CisgICAgICAgIChXZWJDb3Jl
OjpzY3JvbGxiYXJMYXllckRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmZyYW1lVmlld1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAq
IHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFi
bGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJDaHJvbWl1bTo6aGFzQ29udGVudHNMYXllcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjp0b1Njcm9sbGJhckxheWVyQ2hyb21p
dW0pOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJMYXllckNocm9taXVtOjpjcmVh
dGVDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJMYXllckNocm9taXVt
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTo6U2Ny
b2xsYmFyTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJMYXllckNo
cm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChTY3JvbGxiYXJMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhckxheWVyQ2hyb21pdW06OnNjcm9sbExheWVySWQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTo6dG9TY3JvbGxiYXJMYXllckNocm9taXVtKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6VHJlZVN5bmNocm9uaXplcjo6Y29sbGVjdEV4aXN0aW5nQ0NMYXll
ckltcGxSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVN5bmNocm9uaXplcjo6cmV1
c2VPckNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTeW5jaHJvbml6
ZXI6OnN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU3lu
Y2hyb25pemVyOjp1cGRhdGVTY3JvbGxiYXJMYXllclBvaW50ZXJzUmVjdXJzaXZlKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVT
eW5jaHJvbml6ZXIuaDoKKyAgICAgICAgKFRyZWVTeW5jaHJvbml6ZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6dXBkYXRlTWF4U2Nyb2xsUG9zaXRp
b24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFy
TGF5ZXJJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NT
Y3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjp3aWxsRHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1Njcm9sbGJhckxheWVySW1wbDo6YXBwZW5kUXVhZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NT
Y3JvbGxiYXJMYXllckltcGw6OmRpZERyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxi
YXJMYXllckltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJ
bXBsOjpDQ1Njcm9sbGJhcjo6eCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVy
SW1wbDo6Q0NTY3JvbGxiYXI6OnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXll
ckltcGw6OkNDU2Nyb2xsYmFyOjp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJh
ckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OmhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Nj
cm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpsb2NhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OnBhcmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OnJvb3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpzZXRG
cmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Ny
b2xsYmFyOjpmcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllcklt
cGw6OkNDU2Nyb2xsYmFyOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xs
YmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpzY3JvbGxiYXJPdmVybGF5
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xs
YmFyOjpnZXRUaWNrbWFya3MpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllcklt
cGw6OkNDU2Nyb2xsYmFyOjppc1Njcm9sbGFibGVBcmVhQWN0aXZlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6aXNTY3JvbGxWaWV3U2Nyb2xs
YmFyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJh
cjo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Ny
b2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6aXNDdXN0b21TY3JvbGxiYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpvcmllbnRhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6
OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9s
bGJhcjo6Y3VycmVudFBvcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1w
bDo6Q0NTY3JvbGxiYXI6OnZpc2libGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xs
YmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6dG90YWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6bWF4aW11bSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OmNvbnRyb2xTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6bGlu
ZVN0ZXApOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xs
YmFyOjpwYWdlU3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6
Q0NTY3JvbGxiYXI6OnByZXNzZWRQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFy
TGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6aG92ZXJlZFBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpzdHlsZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjplbmFibGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6c2V0
RW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3Jv
bGxiYXJMYXllckltcGwuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEND
U2Nyb2xsYmFyTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJ
bXBsOjpzZXRTY3JvbGxiYXJPdmVybGF5U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3Jv
bGxiYXJMYXllckltcGw6OnNldFRpY2ttYXJrcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9s
bGJhckxheWVySW1wbDo6c2V0SXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6c2V0SXNTY3JvbGxWaWV3U2Nyb2xsYmFyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpzZXRPcmllbnRhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6c2V0Q29udHJvbFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OnNldFByZXNzZWRQYXJ0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpzZXRIb3ZlcmVkUGFydCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6c2V0RW5hYmxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxheWVySW1wbDo6c2Nyb2xsTGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OnNldFNjcm9sbExheWVyKToKKyAg
ICAgICAgKENDU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJ
bXBsOjpDQ1Njcm9sbGJhcjo6Q0NTY3JvbGxiYXIpOgorCiAyMDEyLTAzLTA2ICBKYW1lcyBSb2Jp
bnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBGaXggdGhy
ZWFkZWQgY29tcG9zaXRpbmcgaXNzdWVzIGluIFdlYkdMTGF5ZXJDaHJvbWl1bSAoZXhjZXB0IGZv
ciBwcmludGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNGY0NGQ3MmZhNTk4MzFl
MDMwY2VjMWM3MjEzZDMzMDNmYTYyMzIyMy4uYmZkMTJiNzZmMWQ2YTJhNzI4OGI1ZGVkNjA3OTJj
ZjY4MGZmYjc1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAor
MjAxMi0wMy0wNiAgVGllbi1SZW4gQ2hlbiAgPHRyY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgW2Nocm9taXVtXSBTY3JvbGxiYXJMYXllckNocm9taXVtL0NDU2Nyb2xsYmFyTGF5ZXJJbXBs
IGZvciBDQy1zaWRlIHNjcm9sbGJhciBwYWludGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg4NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL1Nj
cm9sbGJhckxheWVyQ2hyb21pdW1UZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKE1vY2tTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1Njcm9sbGJh
cjo6eCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrU2Nyb2xsYmFyOjp5KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1vY2tTY3JvbGxiYXI6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tTY3Jv
bGxiYXI6OmhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrU2Nyb2xsYmFyOjpzaXplKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1vY2tTY3JvbGxiYXI6OmxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1vY2tTY3JvbGxiYXI6OnBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrU2Ny
b2xsYmFyOjpyb290KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tTY3JvbGxiYXI6OnNldEZyYW1l
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrU2Nyb2xsYmFyOjpmcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TW9ja1Njcm9sbGJhcjo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpNb2NrU2Nyb2xsYmFyOjppbnZhbGlkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrU2Nyb2xsYmFyOjpzY3JvbGxiYXJPdmVybGF5U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
TW9ja1Njcm9sbGJhcjo6Z2V0VGlja21hcmtzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tTY3Jv
bGxiYXI6OmlzU2Nyb2xsYWJsZUFyZWFBY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1Nj
cm9sbGJhcjo6aXNTY3JvbGxWaWV3U2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tT
Y3JvbGxiYXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpNb2NrU2Nyb2xsYmFyOjppc0N1c3RvbVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrU2Nyb2xsYmFyOjpvcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNb2NrU2Nyb2xs
YmFyOjp2YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrU2Nyb2xsYmFyOjpjdXJyZW50UG9z
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tTY3JvbGxiYXI6OnZpc2libGVTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1vY2tTY3JvbGxiYXI6OnRvdGFsU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNb2NrU2Nyb2xsYmFyOjptYXhpbXVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tTY3JvbGxi
YXI6OmNvbnRyb2xTaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tTY3JvbGxiYXI6OmxpbmVT
dGVwKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tTY3JvbGxiYXI6OnBhZ2VTdGVwKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1vY2tTY3JvbGxiYXI6OnByZXNzZWRQYXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1vY2tTY3JvbGxiYXI6OmhvdmVyZWRQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tT
Y3JvbGxiYXI6OnN0eWxlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrU2Nyb2xsYmFy
OjplbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tTY3JvbGxiYXI6OnNldEVuYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6TW9ja1Njcm9sbGJhcjo6TW9ja1Njcm9sbGJhcik6CisgICAg
ICAgIChXZWJDb3JlOjpNb2NrU2Nyb2xsYmFyOjp+TW9ja1Njcm9sbGJhcik6CisgICAgICAgIChX
ZWJDb3JlOjpURVNUKToKKwogMjAxMi0wMy0wNiAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gTnVsbC1jaGVjayBtX2xheWVyUmVuZGVy
ZXIgaW4gQ0NMYXllclRyZWVIb3N0SW1wbDo6ZmluaXNoQWxsUmVuZGVyaW5nKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQppbmRleCBkZjc4Y2U5ODRkYWY1Yjc2ZDcyNzJmYzhkOGI2ZWUxY2MxNjVmODUyLi41MjBi
MWZhZDczZDY3ZGJjYzM1MGFlNjJjOWY1ZDMzYjIxMmE2YWZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBA
IC0zMzU5LDYgKzMzNTksOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uaCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1
bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJh
ckxheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vU29saWRDb2xvckxheWVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Tb2xpZENvbG9yTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5jcHAnLApAQCAtMzQ3
NCw2ICszNDc2LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NjaGVkdWxlclN0YXRlTWFjaGluZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1bGVyU3RhdGVNYWNoaW5lLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGhyZWFkUHJveHkuaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJM
YXllckltcGwuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1Njcm9sbGJhckxheWVySW1wbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3Bw
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAKaW5kZXggZmYw
NTNkZjYyNTIyMTljNjY0ZjY5MzFkZWM3NWEzNGU4Y2YwNzJjMC4uOWVlOTUwMGE2ZDE2MzQ1YzQz
NTU1MjZlZTM0M2RmNGM4N2E2NmY0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0
b3JDaHJvbWl1bS5jcHAKQEAgLTI3LDggKzI3LDE1IEBACiAKICNpbmNsdWRlICJTY3JvbGxpbmdD
b29yZGluYXRvci5oIgogCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiUmVnaW9uLmgiCisjaW5j
bHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgor
I2luY2x1ZGUgIlNjcm9sbGJhckxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJU
aGVtZS5oIgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC01OCwxNCArNjUsNjEgQEAgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6On5TY3JvbGxpbmdDb29y
ZGluYXRvcigpCiAgICAgZGVsZXRlIG1fcHJpdmF0ZTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29y
ZGluYXRvcjo6ZnJhbWVWaWV3SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1l
VmlldyosIEdyYXBoaWNzTGF5ZXIqIGhvcml6b250YWxTY3JvbGxiYXJMYXllcikKK3N0YXRpYyBH
cmFwaGljc0xheWVyKiBzY3JvbGxMYXllckZvckZyYW1lVmlldyhGcmFtZVZpZXcqIGZyYW1lVmll
dykKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKyAgICBGcmFtZSogZnJhbWUgPSBmcmFtZVZpZXctPmZyYW1lKCk7CisgICAgaWYg
KCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3
ID0gZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyVmlldykKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHJlbmRlclZpZXctPmNvbXBvc2l0b3IoKS0+c2Nyb2xs
TGF5ZXIoKTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKIH0KIAotdm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3VmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShG
cmFtZVZpZXcqLCBHcmFwaGljc0xheWVyKiB2ZXJ0aWNhbFNjcm9sbGJhckxheWVyKQorc3RhdGlj
IHZvaWQgc2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIExheWVy
Q2hyb21pdW0qIHNjcm9sbExheWVyLCBHcmFwaGljc0xheWVyKiBzY3JvbGxiYXJHcmFwaGljc0xh
eWVyKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQhCisgICAgQVNTRVJUKHNjcm9sbGJhcik7
CisgICAgQVNTRVJUKHNjcm9sbExheWVyKTsKKyAgICBBU1NFUlQoc2Nyb2xsYmFyR3JhcGhpY3NM
YXllcik7CisKKyAgICBpZiAoc2Nyb2xsYmFyLT5pc0N1c3RvbVNjcm9sbGJhcigpIC8qIHx8ICFD
Q1Byb3h5OjpoYXNJbXBsVGhyZWFkKCkgKi8pIHsgLy8gRklYTUU6IGFsc28gZmlsdGVyIG91dCBz
aW5nbGUgdGhyZWFkIGNhc2Ugd2hlbiB3ZQorICAgICAgICBzY3JvbGxiYXJHcmFwaGljc0xheWVy
LT5zZXRDb250ZW50c1RvTWVkaWEoMCk7CisgICAgICAgIHNjcm9sbGJhckdyYXBoaWNzTGF5ZXIt
PnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJl
ZlB0cjxTY3JvbGxiYXJMYXllckNocm9taXVtPiBzY3JvbGxiYXJMYXllciA9IFNjcm9sbGJhckxh
eWVyQ2hyb21pdW06OmNyZWF0ZShzY3JvbGxiYXIsIHNjcm9sbExheWVyLT5pZCgpKTsKKyAgICBz
Y3JvbGxiYXJHcmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoc2Nyb2xsYmFyTGF5ZXIu
Z2V0KCkpOworICAgIHNjcm9sbGJhckdyYXBoaWNzTGF5ZXItPnNldERyYXdzQ29udGVudChmYWxz
ZSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld0hvcml6b250YWxT
Y3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcqIGZyYW1lVmlldywgR3JhcGhpY3NMYXll
ciogaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKQoreworICAgIGlmICghaG9yaXpvbnRhbFNjcm9s
bGJhckxheWVyIHx8ICFjb29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyhmcmFtZVZpZXcp
KQorICAgICAgICByZXR1cm47CisKKyAgICBMYXllckNocm9taXVtKiBzY3JvbGxMYXllciA9IG1f
cHJpdmF0ZS0+c2Nyb2xsTGF5ZXIoKTsKKyAgICBpZiAoIXNjcm9sbExheWVyKSAvLyBGSVhNRTog
c29tZXRpbWVzIHdlIGdldCBjYWxsZWQgYmVmb3JlIHNldFNjcm9sbExheWVyLCB3b3JrYXJvdW5k
IGJ5IGZpbmRpbmcgb3V0IG91cnNlbGYKKyAgICAgICAgc2Nyb2xsTGF5ZXIgPSBzY3JvbGxMYXll
ckZvckZyYW1lVmlldyhmcmFtZVZpZXcpLT5wbGF0Zm9ybUxheWVyKCk7CisKKyAgICBzY3JvbGxi
YXJMYXllckRpZENoYW5nZShmcmFtZVZpZXctPmhvcml6b250YWxTY3JvbGxiYXIoKSwgc2Nyb2xs
TGF5ZXIsIGhvcml6b250YWxTY3JvbGxiYXJMYXllcik7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OmZyYW1lVmlld1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVW
aWV3KiBmcmFtZVZpZXcsIEdyYXBoaWNzTGF5ZXIqIHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIpCit7
CisgICAgaWYgKCF2ZXJ0aWNhbFNjcm9sbGJhckxheWVyIHx8ICFjb29yZGluYXRlc1Njcm9sbGlu
Z0ZvckZyYW1lVmlldyhmcmFtZVZpZXcpKQorICAgICAgICByZXR1cm47CisKKyAgICBMYXllckNo
cm9taXVtKiBzY3JvbGxMYXllciA9IG1fcHJpdmF0ZS0+c2Nyb2xsTGF5ZXIoKTsKKyAgICBpZiAo
IXNjcm9sbExheWVyKSAvLyBGSVhNRTogc29tZXRpbWVzIHdlIGdldCBjYWxsZWQgYmVmb3JlIHNl
dFNjcm9sbExheWVyLCB3b3JrYXJvdW5kIGJ5IGZpbmRpbmcgb3V0IG91cnNlbGYKKyAgICAgICAg
c2Nyb2xsTGF5ZXIgPSBzY3JvbGxMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpLT5wbGF0Zm9y
bUxheWVyKCk7CisKKyAgICBzY3JvbGxiYXJMYXllckRpZENoYW5nZShmcmFtZVZpZXctPnZlcnRp
Y2FsU2Nyb2xsYmFyKCksIHNjcm9sbExheWVyLCB2ZXJ0aWNhbFNjcm9sbGJhckxheWVyKTsKIH0K
IAogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xsTGF5ZXIoR3JhcGhpY3NMYXll
ciogc2Nyb2xsTGF5ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxhYmxlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5j
cHAKaW5kZXggNjZmNzI5MmIyZjIxZDM4ZTBjYjgxZWUwMTUzOTJmMTI4ZWU0N2I5MS4uMzZhMzJh
OTdiNzYxNzEyMmEyYjA2MGE3MGQ0ZjEwZTVhOTFhYmI2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcApAQCAtMjkyLDExICsyOTIsMTMgQEAgdm9pZCBTY3Jv
bGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29u
c3QgSW50UmVjdCYgcmUKICAgICBpZiAoc2Nyb2xsYmFyID09IGhvcml6b250YWxTY3JvbGxiYXIo
KSkgewogICAgICAgICBpZiAoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciA9IGxheWVyRm9y
SG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7CiAgICAgICAgICAgICBncmFwaGljc0xheWVyLT5zZXRO
ZWVkc0Rpc3BsYXkoKTsKKyAgICAgICAgICAgIGdyYXBoaWNzTGF5ZXItPnNldENvbnRlbnRzTmVl
ZHNEaXNwbGF5KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2Ug
aWYgKHNjcm9sbGJhciA9PSB2ZXJ0aWNhbFNjcm9sbGJhcigpKSB7CiAgICAgICAgIGlmIChHcmFw
aGljc0xheWVyKiBncmFwaGljc0xheWVyID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7
CiAgICAgICAgICAgICBncmFwaGljc0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICAgICAg
ICAgIGdyYXBoaWNzTGF5ZXItPnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5oCmluZGV4IGFkY2U4Yjk1NDQ4MmY1M2U1NDllZWRkZDliZjZiMDlmZTQyM2U2NzUuLjRjY2E4
MmE4ODdiZTI4NTk5YWYxNDc0MTdlY2FiYzc4NzE5NDlmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNz
TGF5ZXJDaHJvbWl1bS5oCkBAIC05Nyw2ICs5Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRl
bnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKik7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRz
VG9DYW52YXMoUGxhdGZvcm1MYXllciopOworICAgIHZpcnR1YWwgYm9vbCBoYXNDb250ZW50c0xh
eWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c0xheWVyOyB9CiAKICAgICB2aXJ0dWFsIGJv
b2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYg
Ym94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiwgZG91YmxlIHRpbWVPZmZz
ZXQpOwogICAgIHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1h
dGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCBhNTA4
YzllNjgzMmY0MTcwYjAwY2U1MWI2NTJjZGM4NDY5NjBmNmI4Li5kYzdkZDQ2N2I3NzZhNTMyMTg0
OGM5N2MyYTU1NTgxZmM3ZDAwNDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC02MSw2ICs2MSw3
IEBAIGNsYXNzIENDTGF5ZXJJbXBsOwogY2xhc3MgQ0NMYXllclRyZWVIb3N0OwogY2xhc3MgQ0NU
ZXh0dXJlVXBkYXRlcjsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgU2Nyb2xsYmFy
TGF5ZXJDaHJvbWl1bTsKIAogLy8gQmFzZSBjbGFzcyBmb3IgY29tcG9zaXRlZCBsYXllcnMuIFNw
ZWNpYWwgbGF5ZXIgdHlwZXMgYXJlIGRlcml2ZWQgZnJvbQogLy8gdGhpcyBjbGFzcy4KQEAgLTIz
Miw2ICsyMzMsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEFuaW1hdGlvbkV2ZW50KGNvbnN0
IENDQW5pbWF0aW9uRXZlbnQmKTsKIAorICAgIHZpcnR1YWwgU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1
bSogdG9TY3JvbGxiYXJMYXllckNocm9taXVtKCkgeyByZXR1cm4gMDsgfQorCiBwcm90ZWN0ZWQ6
CiAgICAgZnJpZW5kIGNsYXNzIENDTGF5ZXJJbXBsOwogICAgIGZyaWVuZCBjbGFzcyBMYXllclRp
bGVyQ2hyb21pdW07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjRmN2VmOTMyMDJhYTQxMDExN2IzZmZhMDczMTI4YzRkZWRhMWQ1YWUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3Jv
bGxiYXJMYXllckNocm9taXVtLmNwcApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisK
KyNpbmNsdWRlICJTY3JvbGxiYXJMYXllckNocm9taXVtLmgiCisKKyNpbmNsdWRlICJTY3JvbGxi
YXIuaCIKKyNpbmNsdWRlICJjYy9DQ1Njcm9sbGJhckxheWVySW1wbC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8Q0NMYXllckltcGw+IFNjcm9sbGJhckxheWVyQ2hyb21p
dW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkKK3sKKyAgICByZXR1cm4gQ0NTY3JvbGxiYXJMYXllcklt
cGw6OmNyZWF0ZShpZCgpKTsKK30KKworUGFzc1JlZlB0cjxTY3JvbGxiYXJMYXllckNocm9taXVt
PiBTY3JvbGxiYXJMYXllckNocm9taXVtOjpjcmVhdGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGlu
dCBzY3JvbGxMYXllcklkKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2Nyb2xsYmFyTGF5
ZXJDaHJvbWl1bShzY3JvbGxiYXIsIHNjcm9sbExheWVySWQpKTsKK30KKworU2Nyb2xsYmFyTGF5
ZXJDaHJvbWl1bTo6U2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bShTY3JvbGxiYXIqIHNjcm9sbGJhciwg
aW50IHNjcm9sbExheWVySWQpCisgICAgOiBtX3Njcm9sbGJhcihzY3JvbGxiYXIpCisgICAgLCBt
X3Njcm9sbExheWVySWQoc2Nyb2xsTGF5ZXJJZCkKKyAgICAsIG1fc2Nyb2xsYmFyT3ZlcmxheVN0
eWxlKHNjcm9sbGJhci0+c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKCkpCisgICAgLCBtX2lzU2Nyb2xs
YWJsZUFyZWFBY3RpdmUoc2Nyb2xsYmFyLT5pc1Njcm9sbGFibGVBcmVhQWN0aXZlKCkpCisgICAg
LCBtX2lzU2Nyb2xsVmlld1Njcm9sbGJhcihzY3JvbGxiYXItPmlzU2Nyb2xsVmlld1Njcm9sbGJh
cigpKQorICAgICwgbV9vcmllbnRhdGlvbihzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkpCisgICAg
LCBtX2NvbnRyb2xTaXplKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSkKK3sKK30KKwordm9pZCBT
Y3JvbGxiYXJMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXll
cikKK3sKKyAgICBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKGxheWVyKTsKKworICAg
IENDU2Nyb2xsYmFyTGF5ZXJJbXBsKiBzY3JvbGxiYXJMYXllciA9IHN0YXRpY19jYXN0PENDU2Ny
b2xsYmFyTGF5ZXJJbXBsKj4obGF5ZXIpOworCisgICAgc2Nyb2xsYmFyTGF5ZXItPnNldFNjcm9s
bGJhck92ZXJsYXlTdHlsZShtX3Njcm9sbGJhck92ZXJsYXlTdHlsZSk7CisKKyAgICBWZWN0b3I8
SW50UmVjdD4gdGlja21hcmtzOworICAgIG1fc2Nyb2xsYmFyLT5nZXRUaWNrbWFya3ModGlja21h
cmtzKTsKKyAgICBzY3JvbGxiYXJMYXllci0+c2V0VGlja21hcmtzKHRpY2ttYXJrcyk7CisKKyAg
ICBzY3JvbGxiYXJMYXllci0+c2V0SXNTY3JvbGxhYmxlQXJlYUFjdGl2ZShtX2lzU2Nyb2xsYWJs
ZUFyZWFBY3RpdmUpOworICAgIHNjcm9sbGJhckxheWVyLT5zZXRJc1Njcm9sbFZpZXdTY3JvbGxi
YXIobV9pc1Njcm9sbFZpZXdTY3JvbGxiYXIpOworCisgICAgc2Nyb2xsYmFyTGF5ZXItPnNldE9y
aWVudGF0aW9uKG1fb3JpZW50YXRpb24pOworCisgICAgc2Nyb2xsYmFyTGF5ZXItPnNldENvbnRy
b2xTaXplKG1fY29udHJvbFNpemUpOworCisgICAgc2Nyb2xsYmFyTGF5ZXItPnNldFByZXNzZWRQ
YXJ0KG1fc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpKTsKKyAgICBzY3JvbGxiYXJMYXllci0+c2V0
SG92ZXJlZFBhcnQobV9zY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkpOworCisgICAgc2Nyb2xsYmFy
TGF5ZXItPnNldEVuYWJsZWQobV9zY3JvbGxiYXItPmVuYWJsZWQoKSk7Cit9CisKK30KKyNlbmRp
ZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3JvbGxiYXJMYXll
ckNocm9taXVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWQyNTM5ZTI1ZTY0OGVlMmMzOWJiMjVjNGViYjQzOWZl
NDE5Njc2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uaApAQCAtMCwwICsxLDY3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisKKyNpZm5kZWYgU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bV9oCisjZGVmaW5l
IFNjcm9sbGJhckxheWVyQ2hyb21pdW1faAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorCisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlNjcm9sbFR5cGVz
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsYmFyOworCitjbGFzcyBT
Y3JvbGxiYXJMYXllckNocm9taXVtIDogcHVibGljIExheWVyQ2hyb21pdW0geworcHVibGljOgor
ICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVySW1wbD4gY3JlYXRlQ0NMYXllckltcGwoKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTY3JvbGxiYXJMYXllckNocm9taXVtPiBjcmVhdGUoU2Ny
b2xsYmFyKiwgaW50IHNjcm9sbExheWVySWQpOworCisgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9w
ZXJ0aWVzVG8oQ0NMYXllckltcGwqKTsKKworICAgIGludCBzY3JvbGxMYXllcklkKCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JvbGxMYXllcklkOyB9CisgICAgdmlydHVhbCBTY3JvbGxiYXJMYXllckNo
cm9taXVtKiB0b1Njcm9sbGJhckxheWVyQ2hyb21pdW0oKSB7IHJldHVybiB0aGlzOyB9CisKK3By
b3RlY3RlZDoKKyAgICBTY3JvbGxiYXJMYXllckNocm9taXVtKFNjcm9sbGJhciosIGludCBzY3Jv
bGxMYXllcklkKTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3Njcm9sbGJh
cjsKKyAgICBpbnQgbV9zY3JvbGxMYXllcklkOworCisgICAgU2Nyb2xsYmFyT3ZlcmxheVN0eWxl
IG1fc2Nyb2xsYmFyT3ZlcmxheVN0eWxlOworICAgIGJvb2wgbV9pc1Njcm9sbGFibGVBcmVhQWN0
aXZlOworICAgIGJvb2wgbV9pc1Njcm9sbFZpZXdTY3JvbGxiYXI7CisKKyAgICBTY3JvbGxiYXJP
cmllbnRhdGlvbiBtX29yaWVudGF0aW9uOworCisgICAgU2Nyb2xsYmFyQ29udHJvbFNpemUgbV9j
b250cm9sU2l6ZTsKK307CisKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcAppbmRleCBlYmQxYWM3MzBi
MTk0NTQxYzJiNGM0ZWVmMWY2Y2NhNTk5YjRlNWM4Li4wN2YwNGIzNzJhNDY5MDgwZjMwYjZhMWQw
ODM1ZDczYzJjNTBiYmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcApAQCAtMjgsMjAg
KzI4LDI4IEBACiAjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXplci5oIgogCiAjaW5jbHVkZSAiTGF5
ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlNjcm9sbGJhckxheWVyQ2hyb21pdW0uaCIKICNpbmNs
dWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBs
LmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBh
c3NPd25QdHI8Q0NMYXllckltcGw+IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMo
TGF5ZXJDaHJvbWl1bSogbGF5ZXJDaHJvbWl1bVJvb3QsIFBhc3NPd25QdHI8Q0NMYXllckltcGw+
IG9sZENDTGF5ZXJJbXBsUm9vdCkKIHsKLSAgICBDQ0xheWVySW1wbE1hcCBtYXA7Ci0gICAgY29s
bGVjdEV4aXN0aW5nQ0NMYXllckltcGxSZWN1cnNpdmUobWFwLCBvbGRDQ0xheWVySW1wbFJvb3Qp
OworICAgIE93blB0ckNDTGF5ZXJJbXBsTWFwIG9sZExheWVyczsKKyAgICBSYXdQdHJDQ0xheWVy
SW1wbE1hcCBuZXdMYXllcnM7CiAKLSAgICByZXR1cm4gc3luY2hyb25pemVUcmVlUmVjdXJzaXZl
KG1hcCwgbGF5ZXJDaHJvbWl1bVJvb3QpOworICAgIGNvbGxlY3RFeGlzdGluZ0NDTGF5ZXJJbXBs
UmVjdXJzaXZlKG9sZExheWVycywgb2xkQ0NMYXllckltcGxSb290KTsKKworICAgIE93blB0cjxD
Q0xheWVySW1wbD4gbmV3VHJlZSA9IHN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShuZXdMYXllcnMs
IG9sZExheWVycywgbGF5ZXJDaHJvbWl1bVJvb3QpOworCisgICAgdXBkYXRlU2Nyb2xsYmFyTGF5
ZXJQb2ludGVyc1JlY3Vyc2l2ZShuZXdMYXllcnMsIGxheWVyQ2hyb21pdW1Sb290KTsKKworICAg
IHJldHVybiBuZXdUcmVlLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBUcmVlU3luY2hyb25pemVyOjpj
b2xsZWN0RXhpc3RpbmdDQ0xheWVySW1wbFJlY3Vyc2l2ZShDQ0xheWVySW1wbE1hcCYgbWFwLCBQ
YXNzT3duUHRyPENDTGF5ZXJJbXBsPiBwb3BDQ0xheWVySW1wbCkKK3ZvaWQgVHJlZVN5bmNocm9u
aXplcjo6Y29sbGVjdEV4aXN0aW5nQ0NMYXllckltcGxSZWN1cnNpdmUoT3duUHRyQ0NMYXllcklt
cGxNYXAmIG9sZExheWVycywgUGFzc093blB0cjxDQ0xheWVySW1wbD4gcG9wQ0NMYXllckltcGwp
CiB7CiAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVySW1wbCA9IHBvcENDTGF5ZXJJbXBs
OwogCkBAIC01MCw0MiArNTgsNTggQEAgdm9pZCBUcmVlU3luY2hyb25pemVyOjpjb2xsZWN0RXhp
c3RpbmdDQ0xheWVySW1wbFJlY3Vyc2l2ZShDQ0xheWVySW1wbE1hcCYgbWFwLAogCiAgICAgVmVj
dG9yPE93blB0cjxDQ0xheWVySW1wbD4gPiYgY2hpbGRyZW4gPSBjY0xheWVySW1wbC0+bV9jaGls
ZHJlbjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKQot
ICAgICAgICBjb2xsZWN0RXhpc3RpbmdDQ0xheWVySW1wbFJlY3Vyc2l2ZShtYXAsIGNoaWxkcmVu
W2ldLnJlbGVhc2UoKSk7CisgICAgICAgIGNvbGxlY3RFeGlzdGluZ0NDTGF5ZXJJbXBsUmVjdXJz
aXZlKG9sZExheWVycywgY2hpbGRyZW5baV0ucmVsZWFzZSgpKTsKIAotICAgIGNvbGxlY3RFeGlz
dGluZ0NDTGF5ZXJJbXBsUmVjdXJzaXZlKG1hcCwgY2NMYXllckltcGwtPm1fbWFza0xheWVyLnJl
bGVhc2UoKSk7Ci0gICAgY29sbGVjdEV4aXN0aW5nQ0NMYXllckltcGxSZWN1cnNpdmUobWFwLCBj
Y0xheWVySW1wbC0+bV9yZXBsaWNhTGF5ZXIucmVsZWFzZSgpKTsKKyAgICBjb2xsZWN0RXhpc3Rp
bmdDQ0xheWVySW1wbFJlY3Vyc2l2ZShvbGRMYXllcnMsIGNjTGF5ZXJJbXBsLT5tX21hc2tMYXll
ci5yZWxlYXNlKCkpOworICAgIGNvbGxlY3RFeGlzdGluZ0NDTGF5ZXJJbXBsUmVjdXJzaXZlKG9s
ZExheWVycywgY2NMYXllckltcGwtPm1fcmVwbGljYUxheWVyLnJlbGVhc2UoKSk7CiAKICAgICBp
bnQgaWQgPSBjY0xheWVySW1wbC0+aWQoKTsKLSAgICBtYXAuc2V0KGlkLCBjY0xheWVySW1wbC5y
ZWxlYXNlKCkpOworICAgIG9sZExheWVycy5zZXQoaWQsIGNjTGF5ZXJJbXBsLnJlbGVhc2UoKSk7
CiB9CiAKLVBhc3NPd25QdHI8Q0NMYXllckltcGw+IFRyZWVTeW5jaHJvbml6ZXI6OnJldXNlT3JD
cmVhdGVDQ0xheWVySW1wbChDQ0xheWVySW1wbE1hcCYgbWFwLCBMYXllckNocm9taXVtKiBsYXll
cikKK1Bhc3NPd25QdHI8Q0NMYXllckltcGw+IFRyZWVTeW5jaHJvbml6ZXI6OnJldXNlT3JDcmVh
dGVDQ0xheWVySW1wbChSYXdQdHJDQ0xheWVySW1wbE1hcCYgbmV3TGF5ZXJzLCBPd25QdHJDQ0xh
eWVySW1wbE1hcCYgb2xkTGF5ZXJzLCBMYXllckNocm9taXVtKiBsYXllcikKIHsKLSAgICBPd25Q
dHI8Q0NMYXllckltcGw+IGNjTGF5ZXJJbXBsID0gbWFwLnRha2UobGF5ZXItPmlkKCkpOworICAg
IE93blB0cjxDQ0xheWVySW1wbD4gY2NMYXllckltcGwgPSBvbGRMYXllcnMudGFrZShsYXllci0+
aWQoKSk7CiAKICAgICBpZiAoIWNjTGF5ZXJJbXBsKQotICAgICAgICByZXR1cm4gbGF5ZXItPmNy
ZWF0ZUNDTGF5ZXJJbXBsKCk7CisgICAgICAgIGNjTGF5ZXJJbXBsID0gbGF5ZXItPmNyZWF0ZUND
TGF5ZXJJbXBsKCk7CiAKKyAgICBuZXdMYXllcnMuc2V0KGxheWVyLT5pZCgpLCBjY0xheWVySW1w
bC5nZXQoKSk7CiAgICAgcmV0dXJuIGNjTGF5ZXJJbXBsLnJlbGVhc2UoKTsKIH0KIAotUGFzc093
blB0cjxDQ0xheWVySW1wbD4gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlUmVjdXJz
aXZlKENDTGF5ZXJJbXBsTWFwJiBtYXAsIExheWVyQ2hyb21pdW0qIGxheWVyKQorUGFzc093blB0
cjxDQ0xheWVySW1wbD4gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlUmVjdXJzaXZl
KFJhd1B0ckNDTGF5ZXJJbXBsTWFwJiBuZXdMYXllcnMsIE93blB0ckNDTGF5ZXJJbXBsTWFwJiBv
bGRMYXllcnMsIExheWVyQ2hyb21pdW0qIGxheWVyKQogewogICAgIGlmICghbGF5ZXIpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVySW1w
bCA9IHJldXNlT3JDcmVhdGVDQ0xheWVySW1wbChtYXAsIGxheWVyKTsKKyAgICBPd25QdHI8Q0NM
YXllckltcGw+IGNjTGF5ZXJJbXBsID0gcmV1c2VPckNyZWF0ZUNDTGF5ZXJJbXBsKG5ld0xheWVy
cywgb2xkTGF5ZXJzLCBsYXllcik7CiAKICAgICBjY0xheWVySW1wbC0+Y2xlYXJDaGlsZExpc3Qo
KTsKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGNoaWxkcmVuID0g
bGF5ZXItPmNoaWxkcmVuKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbi5z
aXplKCk7ICsraSkKLSAgICAgICAgY2NMYXllckltcGwtPmFkZENoaWxkKHN5bmNocm9uaXplVHJl
ZVJlY3Vyc2l2ZShtYXAsIGNoaWxkcmVuW2ldLmdldCgpKSk7CisgICAgICAgIGNjTGF5ZXJJbXBs
LT5hZGRDaGlsZChzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUobmV3TGF5ZXJzLCBvbGRMYXllcnMs
IGNoaWxkcmVuW2ldLmdldCgpKSk7CiAKLSAgICBjY0xheWVySW1wbC0+c2V0TWFza0xheWVyKHN5
bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShtYXAsIGxheWVyLT5tYXNrTGF5ZXIoKSkpOwotICAgIGNj
TGF5ZXJJbXBsLT5zZXRSZXBsaWNhTGF5ZXIoc3luY2hyb25pemVUcmVlUmVjdXJzaXZlKG1hcCwg
bGF5ZXItPnJlcGxpY2FMYXllcigpKSk7CisgICAgY2NMYXllckltcGwtPnNldE1hc2tMYXllcihz
eW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUobmV3TGF5ZXJzLCBvbGRMYXllcnMsIGxheWVyLT5tYXNr
TGF5ZXIoKSkpOworICAgIGNjTGF5ZXJJbXBsLT5zZXRSZXBsaWNhTGF5ZXIoc3luY2hyb25pemVU
cmVlUmVjdXJzaXZlKG5ld0xheWVycywgb2xkTGF5ZXJzLCBsYXllci0+cmVwbGljYUxheWVyKCkp
KTsKIAogICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGNjTGF5ZXJJbXBsLmdldCgpKTsKICAg
ICByZXR1cm4gY2NMYXllckltcGwucmVsZWFzZSgpOwogfQogCit2b2lkIFRyZWVTeW5jaHJvbml6
ZXI6OnVwZGF0ZVNjcm9sbGJhckxheWVyUG9pbnRlcnNSZWN1cnNpdmUoY29uc3QgUmF3UHRyQ0NM
YXllckltcGxNYXAmIG5ld0xheWVycywgTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCit7CisgICAgY29u
c3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBjaGlsZHJlbiA9IGxheWVyLT5jaGls
ZHJlbigpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyArK2kp
CisgICAgICAgIHVwZGF0ZVNjcm9sbGJhckxheWVyUG9pbnRlcnNSZWN1cnNpdmUobmV3TGF5ZXJz
LCBjaGlsZHJlbltpXS5nZXQoKSk7CisKKyAgICBTY3JvbGxiYXJMYXllckNocm9taXVtKiBzY3Jv
bGxiYXJMYXllciA9IGxheWVyLT50b1Njcm9sbGJhckxheWVyQ2hyb21pdW0oKTsKKyAgICBpZiAo
IXNjcm9sbGJhckxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBDQ1Njcm9sbGJhckxheWVy
SW1wbCogY2NTY3JvbGxiYXJMYXllckltcGwgPSBzdGF0aWNfY2FzdDxDQ1Njcm9sbGJhckxheWVy
SW1wbCo+KG5ld0xheWVycy5nZXQoc2Nyb2xsYmFyTGF5ZXItPmlkKCkpKTsKKyAgICBBU1NFUlQo
Y2NTY3JvbGxiYXJMYXllckltcGwpOworICAgIGNjU2Nyb2xsYmFyTGF5ZXJJbXBsLT5zZXRTY3Jv
bGxMYXllcihuZXdMYXllcnMuZ2V0KHNjcm9sbGJhckxheWVyLT5zY3JvbGxMYXllcklkKCkpKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5oCmluZGV4
IDEzNDcwOGNhNDNiZDg5ZWNiZGYyZmQyMTU5MmZkMDcyODZkY2MxNzkuLjFkYmViOGJlZGNhYTEx
MTNjMDZhYjY1YjhjNzIzNmM1MWRkMWNlYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmgKQEAg
LTQ2LDEyICs0NiwxNCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFRyZWVTeW5jaHJvbml6ZXIo
KTsgLy8gTm90IGluc3RhbnRpYWJsZS4KIAotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIE93blB0
cjxDQ0xheWVySW1wbD4gPiBDQ0xheWVySW1wbE1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50
LCBPd25QdHI8Q0NMYXllckltcGw+ID4gT3duUHRyQ0NMYXllckltcGxNYXA7CisgICAgdHlwZWRl
ZiBIYXNoTWFwPGludCwgQ0NMYXllckltcGwqPiBSYXdQdHJDQ0xheWVySW1wbE1hcDsKIAogICAg
IC8vIERlY2xhcmVkIGFzIHN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zIHNvIHRoZXkgY2FuIGFjY2Vz
cyBmdW5jdGlvbnMgb24gTGF5ZXJDaHJvbWl1bSBhcyBhIGZyaWVuZCBjbGFzcy4KLSAgICBzdGF0
aWMgUGFzc093blB0cjxDQ0xheWVySW1wbD4gcmV1c2VPckNyZWF0ZUNDTGF5ZXJJbXBsKENDTGF5
ZXJJbXBsTWFwJiwgTGF5ZXJDaHJvbWl1bSopOwotICAgIHN0YXRpYyB2b2lkIGNvbGxlY3RFeGlz
dGluZ0NDTGF5ZXJJbXBsUmVjdXJzaXZlKENDTGF5ZXJJbXBsTWFwJiwgUGFzc093blB0cjxDQ0xh
eWVySW1wbD4pOwotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBzeW5jaHJvbml6
ZVRyZWVSZWN1cnNpdmUoQ0NMYXllckltcGxNYXAmLCBMYXllckNocm9taXVtKik7CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8Q0NMYXllckltcGw+IHJldXNlT3JDcmVhdGVDQ0xheWVySW1wbChSYXdQ
dHJDQ0xheWVySW1wbE1hcCYgbmV3TGF5ZXJzLCBPd25QdHJDQ0xheWVySW1wbE1hcCYgb2xkTGF5
ZXJzLCBMYXllckNocm9taXVtKik7CisgICAgc3RhdGljIHZvaWQgY29sbGVjdEV4aXN0aW5nQ0NM
YXllckltcGxSZWN1cnNpdmUoT3duUHRyQ0NMYXllckltcGxNYXAmIG9sZExheWVycywgUGFzc093
blB0cjxDQ0xheWVySW1wbD4pOworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBz
eW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUoUmF3UHRyQ0NMYXllckltcGxNYXAmIG5ld0xheWVycywg
T3duUHRyQ0NMYXllckltcGxNYXAmIG9sZExheWVycywgTGF5ZXJDaHJvbWl1bSopOworICAgIHN0
YXRpYyB2b2lkIHVwZGF0ZVNjcm9sbGJhckxheWVyUG9pbnRlcnNSZWN1cnNpdmUoY29uc3QgUmF3
UHRyQ0NMYXllckltcGxNYXAmIG5ld0xheWVycywgTGF5ZXJDaHJvbWl1bSopOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNw
cAppbmRleCAxYzVmMjNhOTEwMjU5MDlmNWM4MTY3OTM4YTYyYWE3MmExNjEyMThhLi41Yzg5YmQ2
YTdiMDZkYjdlZGY3ZTg2Y2U2MzlmOTk0MDZhN2M1NDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtNDc5LDYgKzQ3OSwxMCBAQCB2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OnVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgRmxvYXRTaXplIHZpZXdCb3VuZHMgPSBtX3ZpZXdwb3J0U2l6ZTsKKyAgICBpZiAoQ0NMYXll
ckltcGwqIGNsaXBMYXllciA9IG1fc2Nyb2xsTGF5ZXJJbXBsLT5wYXJlbnQoKSkgeworICAgICAg
ICBpZiAoY2xpcExheWVyLT5tYXNrc1RvQm91bmRzKCkpCisgICAgICAgICAgICB2aWV3Qm91bmRz
ID0gY2xpcExheWVyLT5ib3VuZHMoKTsKKyAgICB9CiAgICAgdmlld0JvdW5kcy5zY2FsZSgxIC8g
bV9wYWdlU2NhbGVEZWx0YSk7CiAKICAgICBJbnRTaXplIG1heFNjcm9sbCA9IGNvbnRlbnRTaXpl
KCkgLSBleHBhbmRlZEludFNpemUodmlld0JvdW5kcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9s
bGJhckxheWVySW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODcyYTM1ODMyNjU2MTdmMjJkZjdkYmU0MWI2
NmI0OTBiYzZlZDhmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmNwcApAQCAtMCwwICsx
LDI4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkNDU2Nyb2xsYmFyTGF5ZXJJbXBsLmgiCisKKyNp
bmNsdWRlICJDQ1RpbGVEcmF3UXVhZC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1
bS5oIgorI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1DYW52
YXMuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1Bhc3NPd25QdHI8Q0NTY3JvbGxiYXJMYXllckltcGw+IENDU2Nyb2xsYmFyTGF5ZXJJbXBs
OjpjcmVhdGUoaW50IGlkKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NTY3JvbGxiYXJM
YXllckltcGwoaWQpKTsKK30KKworQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyTGF5
ZXJJbXBsKGludCBpZCkKKyAgICA6IENDTGF5ZXJJbXBsKGlkKQorICAgICwgbV9zY3JvbGxMYXll
cigwKQorICAgICwgbV9zY3JvbGxiYXIodGhpcykKK3sKK30KKwordm9pZCBDQ1Njcm9sbGJhckxh
eWVySW1wbDo6d2lsbERyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQor
eworICAgIGlmIChib3VuZHMoKS5pc0VtcHR5KCkgfHwgY29udGVudEJvdW5kcygpLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3RleHR1cmUpCisgICAgICAgIG1fdGV4
dHVyZSA9IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobGF5ZXJSZW5kZXJlci0+cmVuZGVyU3VyZmFj
ZVRleHR1cmVNYW5hZ2VyKCkpOworCisgICAgSW50U2l6ZSB0ZXh0dXJlU2l6ZSA9IGNvbnRlbnRC
b3VuZHMoKTsKKyAgICBpZiAoIW1fdGV4dHVyZS0+cmVzZXJ2ZSh0ZXh0dXJlU2l6ZSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEpKQorICAgICAgICByZXR1cm47CisKKyAgICBQbGF0Zm9ybUNhbnZh
cyBjYW52YXM7CisgICAgY2FudmFzLnJlc2l6ZSh0ZXh0dXJlU2l6ZSk7CisgICAgeworICAgICAg
ICBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlciBwYWludGVyKCZjYW52YXMsIFBsYXRmb3JtQ2FudmFz
OjpQYWludGVyOjpHcmF5c2NhbGVUZXh0KTsKKyAgICAgICAgcGFpbnQocGFpbnRlci5jb250ZXh0
KCkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgUGxhdGZvcm1DYW52YXM6OkF1dG9Mb2NrZXIg
bG9ja2VyKCZjYW52YXMpOworICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxh
eWVyUmVuZGVyZXItPmNvbnRleHQoKTsKKyAgICAgICAgbV90ZXh0dXJlLT5iaW5kVGV4dHVyZShj
b250ZXh0LCBsYXllclJlbmRlcmVyLT5yZW5kZXJTdXJmYWNlVGV4dHVyZUFsbG9jYXRvcigpKTsK
KworICAgICAgICAvLyBGSVhNRTogU2tpYSB1c2VzIEJHUkEgYWN0dWFsbHksIHdlIGNvcnJlY3Qg
dGhhdCB3aXRoIHRoZSBzd2l6emxlIHBpeGVsIHNoYWRlci4KKyAgICAgICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIG1f
dGV4dHVyZS0+Zm9ybWF0KCksIGNhbnZhcy5zaXplKCkud2lkdGgoKSwgY2FudmFzLnNpemUoKS5o
ZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFLCBsb2NrZXIucGl4ZWxzKCkpKTsKKyAgICB9Cit9CisKK3ZvaWQgQ0NTY3Jv
bGxiYXJMYXllckltcGw6OmFwcGVuZFF1YWRzKENDUXVhZExpc3QmIHF1YWRMaXN0LCBjb25zdCBD
Q1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlKQoreworICAgIGlmICghbV90ZXh0dXJl
LT5pc1Jlc2VydmVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEludFJlY3QgcXVhZFJlY3Qo
SW50UG9pbnQoKSwgYm91bmRzKCkpOworICAgIHF1YWRMaXN0LmFwcGVuZChDQ1RpbGVEcmF3UXVh
ZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHF1YWRSZWN0LCBtX3RleHR1cmUt
PnRleHR1cmVJZCgpLCBJbnRQb2ludCgpLCBtX3RleHR1cmUtPnNpemUoKSwgR3JhcGhpY3NDb250
ZXh0M0Q6Ok5FQVJFU1QsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUpKTsKK30KKwordm9p
ZCBDQ1Njcm9sbGJhckxheWVySW1wbDo6ZGlkRHJhdygpCit7CisgICAgbV90ZXh0dXJlLT51bnJl
c2VydmUoKTsKK30KKwordm9pZCBDQ1Njcm9sbGJhckxheWVySW1wbDo6cGFpbnQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0KQoreworICAgIFNjcm9sbGJhclRoZW1lKiB0aGVtZSA9IFNjcm9sbGJh
clRoZW1lOjp0aGVtZSgpOyAvLyBGSVhNRTogc2hvdWxkIG1ha2UgaW1wbC1zaWRlIGNsb25lIGlm
IG5lZWRlZAorCisgICAgY29udGV4dC0+Y2xlYXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29u
dGVudEJvdW5kcygpKSk7CisgICAgdGhlbWUtPnBhaW50KCZtX3Njcm9sbGJhciwgY29udGV4dCwg
SW50UmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91bmRzKCkpKTsKK30KKworCitpbnQgQ0NTY3Jv
bGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjp4KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZnJh
bWVSZWN0KCkueCgpOworfQorCitpbnQgQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFy
Ojp5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZnJhbWVSZWN0KCkueSgpOworfQorCitpbnQgQ0NT
Y3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjp3aWR0aCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGZyYW1lUmVjdCgpLndpZHRoKCk7Cit9CisKK2ludCBDQ1Njcm9sbGJhckxheWVySW1wbDo6
Q0NTY3JvbGxiYXI6OmhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZyYW1lUmVjdCgpLmhl
aWdodCgpOworfQorCitJbnRTaXplIENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6
c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZyYW1lUmVjdCgpLnNpemUoKTsKK30KKworSW50
UG9pbnQgQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpsb2NhdGlvbigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGZyYW1lUmVjdCgpLmxvY2F0aW9uKCk7Cit9CisKK1Njcm9sbFZpZXcq
IENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6cGFyZW50KCkgY29uc3QKK3sKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworU2Nyb2xsVmlldyog
Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpyb290KCkgY29uc3QKK3sKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBDQ1Njcm9sbGJh
ckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JikKK3sK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworSW50UmVjdCBDQ1Njcm9sbGJhckxheWVy
SW1wbDo6Q0NTY3JvbGxiYXI6OmZyYW1lUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFJl
Y3QoSW50UG9pbnQoKSwgbV9vd25lci0+Y29udGVudEJvdW5kcygpKTsKK30KKwordm9pZCBDQ1Nj
cm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OmludmFsaWRhdGUoKQoreworICAgIGludmFs
aWRhdGVSZWN0KGZyYW1lUmVjdCgpKTsKK30KKwordm9pZCBDQ1Njcm9sbGJhckxheWVySW1wbDo6
Q0NTY3JvbGxiYXI6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmKQoreworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCitTY3JvbGxiYXJPdmVybGF5U3R5bGUgQ0NTY3JvbGxiYXJM
YXllckltcGw6OkNDU2Nyb2xsYmFyOjpzY3JvbGxiYXJPdmVybGF5U3R5bGUoKSBjb25zdAorewor
ICAgIHJldHVybiBtX293bmVyLT5tX3Njcm9sbGJhck92ZXJsYXlTdHlsZTsKK30KKwordm9pZCBD
Q1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OmdldFRpY2ttYXJrcyhWZWN0b3I8SW50
UmVjdD4mIHRpY2ttYXJrcykgY29uc3QKK3sKKyAgICB0aWNrbWFya3MgPSBtX293bmVyLT5tX3Rp
Y2ttYXJrczsKK30KKworYm9vbCBDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6Omlz
U2Nyb2xsYWJsZUFyZWFBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX293bmVyLT5tX2lz
U2Nyb2xsYWJsZUFyZWFBY3RpdmU7Cit9CisKK2Jvb2wgQ0NTY3JvbGxiYXJMYXllckltcGw6OkND
U2Nyb2xsYmFyOjppc1Njcm9sbFZpZXdTY3JvbGxiYXIoKSBjb25zdAoreworICAgIHJldHVybiBt
X293bmVyLT5tX2lzU2Nyb2xsVmlld1Njcm9sbGJhcjsKK30KKworSW50UG9pbnQgQ0NTY3JvbGxi
YXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coY29u
c3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiB3aW5kb3dQb2ludDsKK30KKworYm9vbCBDQ1Njcm9sbGJhckxheWVySW1wbDo6
Q0NTY3JvbGxiYXI6OmlzQ3VzdG9tU2Nyb2xsYmFyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK1Njcm9sbGJhck9yaWVudGF0aW9uIENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Nj
cm9sbGJhcjo6b3JpZW50YXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX293bmVyLT5tX29y
aWVudGF0aW9uOworfQorCitpbnQgQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjp2
YWx1ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX293bmVyLT5tX3Njcm9sbExheWVyKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBpZiAob3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFy
KQorICAgICAgICByZXR1cm4gbV9vd25lci0+bV9zY3JvbGxMYXllci0+c2Nyb2xsUG9zaXRpb24o
KS54KCkgKyBtX293bmVyLT5tX3Njcm9sbExheWVyLT5zY3JvbGxEZWx0YSgpLndpZHRoKCk7Cisg
ICAgcmV0dXJuIG1fb3duZXItPm1fc2Nyb2xsTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCkueSgpICsg
bV9vd25lci0+bV9zY3JvbGxMYXllci0+c2Nyb2xsRGVsdGEoKS5oZWlnaHQoKTsKK30KKworZmxv
YXQgQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpjdXJyZW50UG9zKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gdmFsdWUoKTsKK30KKworaW50IENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpD
Q1Njcm9sbGJhcjo6dmlzaWJsZVNpemUoKSBjb25zdAoreworICAgIHJldHVybiB0b3RhbFNpemUo
KSAtIG1heGltdW0oKTsKK30KKworaW50IENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJh
cjo6dG90YWxTaXplKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fb3duZXItPm1fc2Nyb2xsTGF5ZXIg
fHwgIW1fb3duZXItPm1fc2Nyb2xsTGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICAvLyBDb3B5ICYgcGFzdGUgZnJvbSBDQ0xheWVyVHJlZUhvc3RJbXBsLi4u
CisgICAgLy8gRklYTUU6IEhhcmRjb2RpbmcgdGhlIGZpcnN0IGNoaWxkIGhlcmUgaXMgd2VpcmQu
IFRoaW5rIG9mCisgICAgLy8gYSBjbGVhbmVyIHdheSB0byBnZXQgdGhlIGNvbnRlbnRCb3VuZHMg
b24gdGhlIEltcGwgc2lkZS4KKyAgICBpZiAob3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyKQorICAgICAgICByZXR1cm4gbV9vd25lci0+bV9zY3JvbGxMYXllci0+Y2hpbGRyZW4o
KVswXS0+Y29udGVudEJvdW5kcygpLndpZHRoKCk7CisgICAgcmV0dXJuIG1fb3duZXItPm1fc2Ny
b2xsTGF5ZXItPmNoaWxkcmVuKClbMF0tPmNvbnRlbnRCb3VuZHMoKS5oZWlnaHQoKTsKK30KKwor
aW50IENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6bWF4aW11bSgpIGNvbnN0Cit7
CisgICAgaWYgKCFtX293bmVyLT5tX3Njcm9sbExheWVyKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICBpZiAob3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICByZXR1
cm4gbV9vd25lci0+bV9zY3JvbGxMYXllci0+bWF4U2Nyb2xsUG9zaXRpb24oKS53aWR0aCgpOwor
ICAgIHJldHVybiBtX293bmVyLT5tX3Njcm9sbExheWVyLT5tYXhTY3JvbGxQb3NpdGlvbigpLmhl
aWdodCgpOworfQorCitTY3JvbGxiYXJDb250cm9sU2l6ZSBDQ1Njcm9sbGJhckxheWVySW1wbDo6
Q0NTY3JvbGxiYXI6OmNvbnRyb2xTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9vd25lci0+
bV9jb250cm9sU2l6ZTsKK30KKworaW50IENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJh
cjo6bGluZVN0ZXAoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiAwOworfQorCitpbnQgQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpwYWdl
U3RlcCgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK1Njcm9sbGJhclBhcnQgQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpw
cmVzc2VkUGFydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fb3duZXItPm1fcHJlc3NlZFBhcnQ7
Cit9CisKK1Njcm9sbGJhclBhcnQgQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpo
b3ZlcmVkUGFydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fb3duZXItPm1faG92ZXJlZFBhcnQ7
Cit9CisKK3ZvaWQgQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjpzdHlsZUNoYW5n
ZWQoKQoreworfQorCitib29sIENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhcjo6ZW5h
YmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fb3duZXItPm1fZW5hYmxlZDsKK30KKwordm9p
ZCBDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXI6OnNldEVuYWJsZWQoYm9vbCkKK3sK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfQorI2VuZGlmIC8vIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmY2ZjAwNTM2MDk1OWNiNDRhYWJhNDQ4NmQ1NTExMDE4MmYwZThjN2IKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1Njcm9sbGJhckxheWVySW1wbC5oCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBDQ1Njcm9sbGJhckxheWVySW1wbF9oCisjZGVmaW5lIENDU2Nyb2xsYmFyTGF5ZXJJbXBsX2gK
KworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkNDTGF5ZXJJ
bXBsLmgiCisjaW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJU
aGVtZUNsaWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29u
dGV4dDsKK2NsYXNzIFNjcm9sbFZpZXc7CisKK2NsYXNzIENDU2Nyb2xsYmFyTGF5ZXJJbXBsIDog
cHVibGljIENDTGF5ZXJJbXBsIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1Nj
cm9sbGJhckxheWVySW1wbD4gY3JlYXRlKGludCBpZCk7CisKKyAgICB2b2lkIHNldFNjcm9sbGJh
ck92ZXJsYXlTdHlsZShTY3JvbGxiYXJPdmVybGF5U3R5bGUgc2Nyb2xsYmFyT3ZlcmxheVN0eWxl
KSB7IG1fc2Nyb2xsYmFyT3ZlcmxheVN0eWxlID0gc2Nyb2xsYmFyT3ZlcmxheVN0eWxlOyB9Cisg
ICAgdm9pZCBzZXRUaWNrbWFya3MoY29uc3QgVmVjdG9yPEludFJlY3Q+JiB0aWNrbWFya3MpIHsg
bV90aWNrbWFya3MgPSB0aWNrbWFya3M7IH0KKyAgICB2b2lkIHNldElzU2Nyb2xsYWJsZUFyZWFB
Y3RpdmUoYm9vbCBpc1Njcm9sbGFibGVBcmVhQWN0aXZlKSB7IG1faXNTY3JvbGxhYmxlQXJlYUFj
dGl2ZSA9IGlzU2Nyb2xsYWJsZUFyZWFBY3RpdmU7IH0KKyAgICB2b2lkIHNldElzU2Nyb2xsVmll
d1Njcm9sbGJhcihib29sIGlzU2Nyb2xsVmlld1Njcm9sbGJhcikgeyBtX2lzU2Nyb2xsVmlld1Nj
cm9sbGJhciA9IGlzU2Nyb2xsVmlld1Njcm9sbGJhcjsgfQorCisgICAgdm9pZCBzZXRPcmllbnRh
dGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgeyBtX29yaWVudGF0aW9uID0g
b3JpZW50YXRpb247IH0KKworICAgIHZvaWQgc2V0Q29udHJvbFNpemUoU2Nyb2xsYmFyQ29udHJv
bFNpemUgY29udHJvbFNpemUpIHsgbV9jb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplOyB9CisKKyAg
ICB2b2lkIHNldFByZXNzZWRQYXJ0KFNjcm9sbGJhclBhcnQgcHJlc3NlZFBhcnQpIHsgbV9wcmVz
c2VkUGFydCA9IHByZXNzZWRQYXJ0OyB9CisgICAgdm9pZCBzZXRIb3ZlcmVkUGFydChTY3JvbGxi
YXJQYXJ0IGhvdmVyZWRQYXJ0KSB7IG1faG92ZXJlZFBhcnQgPSBob3ZlcmVkUGFydDsgfQorCisg
ICAgdm9pZCBzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2VuYWJsZWQgPSBlbmFibGVkOyB9
CisKKworICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
b2xsTGF5ZXI7IH0KKyAgICB2b2lkIHNldFNjcm9sbExheWVyKENDTGF5ZXJJbXBsKiBzY3JvbGxM
YXllcikgeyBtX3Njcm9sbExheWVyID0gc2Nyb2xsTGF5ZXI7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCB3aWxsRHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBw
ZW5kUXVhZHMoQ0NRdWFkTGlzdCYsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKik7CisgICAgdmly
dHVhbCB2b2lkIGRpZERyYXcoKTsKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IENDU2Nyb2xs
YmFyTGF5ZXJJbXBsKGludCBpZCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBwYWludChHcmFwaGlj
c0NvbnRleHQqKTsKKworICAgIENDTGF5ZXJJbXBsKiBtX3Njcm9sbExheWVyOworICAgIE93blB0
cjxNYW5hZ2VkVGV4dHVyZT4gbV90ZXh0dXJlOworCisgICAgLy8gbmVzdGVkIGNsYXNzIG9ubHkg
dG8gYXZvaWQgbmFtZXNwYWNlIHByb2JsZW0KKyAgICBjbGFzcyBDQ1Njcm9sbGJhciA6IHB1Ymxp
YyBTY3JvbGxiYXJUaGVtZUNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBD
Q1Njcm9sbGJhcihDQ1Njcm9sbGJhckxheWVySW1wbCogb3duZXIpIDogbV9vd25lcihvd25lcikg
eyB9CisKKyAgICAgICAgLy8gU2Nyb2xsYmFyVGhlbWVDbGllbnQgaW1wbGVtZW50YXRpb24KKyAg
ICAgICAgdmlydHVhbCBpbnQgeCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGludCB5KCkgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgaW50IHdpZHRoKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwg
aW50IGhlaWdodCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0
OworICAgICAgICB2aXJ0dWFsIEludFBvaW50IGxvY2F0aW9uKCkgY29uc3Q7CisKKyAgICAgICAg
dmlydHVhbCBTY3JvbGxWaWV3KiBwYXJlbnQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTY3Jv
bGxWaWV3KiByb290KCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lUmVj
dChjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgSW50UmVjdCBmcmFtZVJlY3QoKSBj
b25zdDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYpOworCisgICAgICAgIHZpcnR1
YWwgU2Nyb2xsYmFyT3ZlcmxheVN0eWxlIHNjcm9sbGJhck92ZXJsYXlTdHlsZSgpIGNvbnN0Owor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0VGlja21hcmtzKFZlY3RvcjxJbnRSZWN0PiYpIGNvbnN0
OworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSgpIGNvbnN0Owor
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxWaWV3U2Nyb2xsYmFyKCkgY29uc3Q7CisKKyAg
ICAgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coY29uc3Qg
SW50UG9pbnQmIHdpbmRvd1BvaW50KTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDdXN0b21T
Y3JvbGxiYXIoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTY3JvbGxiYXJPcmllbnRhdGlvbiBv
cmllbnRhdGlvbigpIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgaW50IHZhbHVlKCkgY29uc3Q7
CisgICAgICAgIHZpcnR1YWwgZmxvYXQgY3VycmVudFBvcygpIGNvbnN0OworICAgICAgICB2aXJ0
dWFsIGludCB2aXNpYmxlU2l6ZSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGludCB0b3RhbFNp
emUoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBpbnQgbWF4aW11bSgpIGNvbnN0OworICAgICAg
ICB2aXJ0dWFsIFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKCkgY29uc3Q7CisKKyAg
ICAgICAgdmlydHVhbCBpbnQgbGluZVN0ZXAoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBpbnQg
cGFnZVN0ZXAoKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIFNjcm9sbGJhclBhcnQgcHJlc3Nl
ZFBhcnQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTY3JvbGxiYXJQYXJ0IGhvdmVyZWRQYXJ0
KCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHN0eWxlQ2hhbmdlZCgpOworCisgICAg
ICAgIHZpcnR1YWwgYm9vbCBlbmFibGVkKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBz
ZXRFbmFibGVkKGJvb2wpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ0NTY3JvbGxiYXJMYXll
ckltcGwqIG1fb3duZXI7CisKKyAgICB9OworICAgIENDU2Nyb2xsYmFyIG1fc2Nyb2xsYmFyOwor
CisgICAgU2Nyb2xsYmFyT3ZlcmxheVN0eWxlIG1fc2Nyb2xsYmFyT3ZlcmxheVN0eWxlOworICAg
IFZlY3RvcjxJbnRSZWN0PiBtX3RpY2ttYXJrczsKKyAgICBib29sIG1faXNTY3JvbGxhYmxlQXJl
YUFjdGl2ZTsKKyAgICBib29sIG1faXNTY3JvbGxWaWV3U2Nyb2xsYmFyOworCisgICAgU2Nyb2xs
YmFyT3JpZW50YXRpb24gbV9vcmllbnRhdGlvbjsKKworICAgIFNjcm9sbGJhckNvbnRyb2xTaXpl
IG1fY29udHJvbFNpemU7CisKKyAgICBTY3JvbGxiYXJQYXJ0IG1fcHJlc3NlZFBhcnQ7CisgICAg
U2Nyb2xsYmFyUGFydCBtX2hvdmVyZWRQYXJ0OworCisgICAgYm9vbCBtX2VuYWJsZWQ7Cit9Owor
Cit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IGI1Mjc0MTY4NjM2OWI0OTBjYzkwYmQzYTJj
NTQ4YzQwN2EyMTNiZDEuLmVhNDE5YzgxZjZmZDk5OTg5NmExYjJkOTlkNWNlYTYwZjYxYTRhOGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtMTExLDYgKzExMSw3IEBACiAgICAg
ICAgICAgICAndGVzdHMvUE9ESW50ZXJ2YWxUcmVlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rl
c3RzL1BPRFJlZEJsYWNrVHJlZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9SZW5kZXJU
YWJsZUNlbGxUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvU2Nyb2xsYmFyTGF5ZXJDaHJv
bWl1bVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9UZXh0dXJlTWFuYWdlclRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcCcsCiAgICAg
ICAgICAgICAndGVzdHMvVGlsaW5nRGF0YVRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9TY3JvbGxiYXJMYXllckNocm9taXVtVGVzdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNzhiOTZiNDk1ZmMwMWM1MGIyZDNhOTA5OWU5ZDBkYmZlMDJhZWQ0ZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvU2Nyb2xsYmFyTGF5
ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJTY3JvbGxiYXJMYXllckNocm9taXVtLmgiCisK
KyNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCisj
aW5jbHVkZSAiY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIE1vY2tTY3JvbGxiYXIgOiBwdWJs
aWMgU2Nyb2xsYmFyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGludCB4KCkgY29uc3QgeyByZXR1
cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHkoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmly
dHVhbCBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBpbnQgaGVp
Z2h0KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29u
c3QgeyByZXR1cm4gSW50U2l6ZSgpOyB9CisgICAgdmlydHVhbCBJbnRQb2ludCBsb2NhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIEludFBvaW50KCk7IH0KKworICAgIHZpcnR1YWwgU2Nyb2xsVmlldyog
cGFyZW50KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgU2Nyb2xsVmlldyogcm9v
dCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFtZVJlY3Qo
Y29uc3QgSW50UmVjdCYpIHsgfQorICAgIHZpcnR1YWwgSW50UmVjdCBmcmFtZVJlY3QoKSBjb25z
dCB7IHJldHVybiBJbnRSZWN0KCk7IH0KKworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCkg
eyB9CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmKSB7IH0K
KworICAgIHZpcnR1YWwgU2Nyb2xsYmFyT3ZlcmxheVN0eWxlIHNjcm9sbGJhck92ZXJsYXlTdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIFNjcm9sbGJhck92ZXJsYXlTdHlsZURlZmF1bHQ7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0VGlja21hcmtzKFZlY3RvcjxJbnRSZWN0PiYpIGNvbnN0IHsgfQorICAg
IHZpcnR1YWwgYm9vbCBpc1Njcm9sbGFibGVBcmVhQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxWaWV3U2Nyb2xsYmFyKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21Db250YWlu
aW5nV2luZG93KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkgeyByZXR1cm4gSW50UG9pbnQo
KTsgfQorCisgICAgdmlydHVhbCBib29sIGlzQ3VzdG9tU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KCkgY29uc3QgeyByZXR1cm4gSG9yaXpvbnRhbFNjcm9sbGJhcjsgfQorCisgICAgdmlydHVhbCBp
bnQgdmFsdWUoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBmbG9hdCBjdXJyZW50
UG9zKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHZpc2libGVTaXplKCkg
Y29uc3QgeyByZXR1cm4gMTsgfQorICAgIHZpcnR1YWwgaW50IHRvdGFsU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIDE7IH0KKyAgICB2aXJ0dWFsIGludCBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gMDsg
fQorICAgIHZpcnR1YWwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUoKSBjb25zdCB7
IHJldHVybiBSZWd1bGFyU2Nyb2xsYmFyOyB9CisKKyAgICB2aXJ0dWFsIGludCBsaW5lU3RlcCgp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGludCBwYWdlU3RlcCgpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KKworICAgIHZpcnR1YWwgU2Nyb2xsYmFyUGFydCBwcmVzc2VkUGFydCgpIGNv
bnN0IHsgcmV0dXJuIE5vUGFydDsgfQorICAgIHZpcnR1YWwgU2Nyb2xsYmFyUGFydCBob3ZlcmVk
UGFydCgpIGNvbnN0IHsgcmV0dXJuIE5vUGFydDsgfQorCisgICAgdmlydHVhbCB2b2lkIHN0eWxl
Q2hhbmdlZCgpIHsgfQorCisgICAgdmlydHVhbCBib29sIGVuYWJsZWQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFibGVkKGJvb2wpIHsgfQorCisgICAg
TW9ja1Njcm9sbGJhcigpIDogU2Nyb2xsYmFyKDAsIEhvcml6b250YWxTY3JvbGxiYXIsIFJlZ3Vs
YXJTY3JvbGxiYXIpIHsgfQorICAgIHZpcnR1YWwgfk1vY2tTY3JvbGxiYXIoKSB7IH0KK307CisK
K1RFU1QoU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bVRlc3QsIHJlc29sdmVTY3JvbGxMYXllclBvaW50
ZXIpCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisKKyAgICB7CisgICAg
ICAgIFJlZlB0cjxNb2NrU2Nyb2xsYmFyPiBzY3JvbGxiYXIgPSBhZG9wdFJlZihuZXcgTW9ja1Nj
cm9sbGJhcik7CisgICAgICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRyZWVSb290ID0g
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBj
aGlsZDEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICAgICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+IGNoaWxkMiA9IFNjcm9sbGJhckxheWVyQ2hyb21pdW06OmNyZWF0ZShzY3JvbGxiYXIu
Z2V0KCksIGNoaWxkMS0+aWQoKSk7CisgICAgICAgIGxheWVyVHJlZVJvb3QtPmFkZENoaWxkKGNo
aWxkMSk7CisgICAgICAgIGxheWVyVHJlZVJvb3QtPmFkZENoaWxkKGNoaWxkMik7CisKKyAgICAg
ICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVy
OjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIG51bGxwdHIpOworCisgICAg
ICAgIENDTGF5ZXJJbXBsKiBjY0NoaWxkMSA9IGNjTGF5ZXJUcmVlUm9vdC0+Y2hpbGRyZW4oKVsw
XS5nZXQoKTsKKyAgICAgICAgQ0NTY3JvbGxiYXJMYXllckltcGwqIGNjQ2hpbGQyID0gc3RhdGlj
X2Nhc3Q8Q0NTY3JvbGxiYXJMYXllckltcGwqPihjY0xheWVyVHJlZVJvb3QtPmNoaWxkcmVuKClb
MV0uZ2V0KCkpOworCisgICAgICAgIEVYUEVDVF9FUShjY0NoaWxkMSwgY2NDaGlsZDItPnNjcm9s
bExheWVyKCkpOworICAgIH0KKworICAgIHsgLy8gYW5vdGhlciB0cmF2ZXJzZSBvcmRlcgorICAg
ICAgICBSZWZQdHI8TW9ja1Njcm9sbGJhcj4gc2Nyb2xsYmFyID0gYWRvcHRSZWYobmV3IE1vY2tT
Y3JvbGxiYXIpOworICAgICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
Y2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBjaGlsZDEgPSBTY3JvbGxiYXJMYXllckNocm9taXVtOjpjcmVhdGUoc2Nyb2xsYmFy
LmdldCgpLCBjaGlsZDItPmlkKCkpOworICAgICAgICBsYXllclRyZWVSb290LT5hZGRDaGlsZChj
aGlsZDEpOworICAgICAgICBsYXllclRyZWVSb290LT5hZGRDaGlsZChjaGlsZDIpOworCisgICAg
ICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXpl
cjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBudWxscHRyKTsKKworICAg
ICAgICBDQ1Njcm9sbGJhckxheWVySW1wbCogY2NDaGlsZDEgPSBzdGF0aWNfY2FzdDxDQ1Njcm9s
bGJhckxheWVySW1wbCo+KGNjTGF5ZXJUcmVlUm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKSk7Cisg
ICAgICAgIENDTGF5ZXJJbXBsKiBjY0NoaWxkMiA9IGNjTGF5ZXJUcmVlUm9vdC0+Y2hpbGRyZW4o
KVsxXS5nZXQoKTsKKworICAgICAgICBFWFBFQ1RfRVEoY2NDaGlsZDEtPnNjcm9sbExheWVyKCks
IGNjQ2hpbGQyKTsKKyAgICB9Cit9CisKK30K
</data>
<flag name="review"
          id="133756"
          type_id="1"
          status="+"
          setter="jamesr"
    />
    <flag name="commit-queue"
          id="133885"
          type_id="3"
          status="-"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>