<?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>71388</bug_id>
          
          <creation_ts>2011-11-02 13:00:16 -0700</creation_ts>
          <short_desc>[Chromium] Add support for painting into an SkPicture and then rasterizing into tile-sized chunks.</short_desc>
          <delta_ts>2011-11-30 21:17:27 -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>WebCore Misc.</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>72630</dependson>
          <blocked>72192</blocked>
    
    <blocked>72752</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="David Reveman">reveman</reporter>
          <assigned_to name="David Reveman">reveman</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>fischman</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>piman</cc>
    
    <cc>sky</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>494829</commentid>
    <comment_count>0</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-02 13:00:16 -0700</bug_when>
    <thetext>Add UpdatableTexture class, which allows texture updater to allocate tile specific resources and paint tiles separately. Add LayerTextureUpdaterBitmap class that implements texture updates by recording drawing commands to a SkPicture and playing them back to each tile individually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494854</commentid>
    <comment_count>1</comment_count>
      <attachid>113362</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-02 13:26:11 -0700</bug_when>
    <thetext>Created attachment 113362
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494988</commentid>
    <comment_count>2</comment_count>
      <attachid>113389</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-02 15:44:01 -0700</bug_when>
    <thetext>Created attachment 113389
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496003</commentid>
    <comment_count>3</comment_count>
      <attachid>113389</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-11-03 19:18:05 -0700</bug_when>
    <thetext>Comment on attachment 113389
Patch

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

Neat work! I have a ton of questions... mainly, I&apos;m trying to educate myself here rather than push you in a particular direction, so I hope they&apos;re not too annoying....

The UpdatableTexture class feels somewhat similar to the LayerPainter class, except that the LayerPainter gets called multiple times per layer and doesn&apos;t know about the overall layer damage. If we told a LayerPainter up-front the union of rects that we were about to call paint on, would we be able to just build on LayerPainter for painting layers into SkPictures?

Did you give any thought into making this two patches? patch 1, a no-features-added refactoring that introduces the changes necessary to allow the feature [e.g. the UpdatableTexture or whatever you settle on] and patch 2, the paint-&gt;skpicture;skpicture-&gt;texture patch? It might help us see the shape of things more-easily that way as well as deal with regressions.... I&apos;m not insisting, really, just thinking out loud.

Can we take this opportunity to move some of these updater classes into files that match their class name? One class per file is our general convention except for things like Foo/FooClient.

Is the idea here that &quot;update&quot; is the word for going from an SkPicture to a texture? Can we call that rasterization? Or tile-filling? Tile Rasterization? TilePainting versus Layer Painting? Just throwing out ideas... whatever word we settle on, lets make sure we normalize the codebase to that terminology and put comments liberally on the new code to explain the word.

Any thoughts on how to test this stuff without having to instantiate large portions of webkit and/or skia? Not in the short term, per se, but overall. We don&apos;t have a test strategy for this stuff and I think we should.

&gt; Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp:49
&gt; +class ImageTexture : public UpdatableTexture {

ImageUpdatableTexture? I personally think its good to be able to tell the ancestery of a class by its name.

&gt; Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp:66
&gt; +};

Personally, I think you can put the implementations inline since this is in the cpp. Ping jamesr on chat if you want to verify that...

&gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdater.h:44
&gt; +class UpdatableTexture : public RefCounted&lt;UpdatableTexture&gt; {

Standalone file?

Comment on the overall class explaining its &quot;role&quot; and purpose?

&gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdater.h:49
&gt; +    virtual void prepareRect(const IntRect&amp; sourceRect) = 0;

Comments on these functions?

&gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp:45
&gt; +#include &quot;skia/ext/platform_canvas.h&quot;

Is this the right way to do skia includes? I&apos;m not saying its wrong, it just sorta looks odd to my eyes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496004</commentid>
    <comment_count>4</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-11-03 19:21:23 -0700</bug_when>
    <thetext>&gt; Did you give any thought into making this two patches? ...
I just realized that this is a split-out portion of a previous patch. Apologies if this feels like cruel and unusual punishment. :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496276</commentid>
    <comment_count>5</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-04 10:35:34 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 113389 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=113389&amp;action=review
&gt; 
&gt; Neat work! I have a ton of questions... mainly, I&apos;m trying to educate myself here rather than push you in a particular direction, so I hope they&apos;re not too annoying....
&gt; 
&gt; The UpdatableTexture class feels somewhat similar to the LayerPainter class, except that the LayerPainter gets called multiple times per layer and doesn&apos;t know about the overall layer damage. If we told a LayerPainter up-front the union of rects that we were about to call paint on, would we be able to just build on LayerPainter for painting layers into SkPictures?

The main purpose of the UpdatableTexture class is to allow the texture updater to create per-tile resources. E.g. per-tile raster buffers for LayerTextureUpdaterBitmap or mapped shared memory buffers for LayerTextureUpdaterSharedMemory.

I think this belongs to the LayerTextureUpdater class and not the LayerPainter class. LayerPainter is currently not involved in graphics context creation, which is how skpicture redirection is accomplished.

&gt; 
&gt; Did you give any thought into making this two patches? patch 1, a no-features-added refactoring that introduces the changes necessary to allow the feature [e.g. the UpdatableTexture or whatever you settle on] and patch 2, the paint-&gt;skpicture;skpicture-&gt;texture patch? It might help us see the shape of things more-easily that way as well as deal with regressions.... I&apos;m not insisting, really, just thinking out loud.

I&apos;d prefer that too. I&apos;m generally in favor for making patches as small as possible even when that means a bit more overhead in the review process.

&gt; 
&gt; Can we take this opportunity to move some of these updater classes into files that match their class name? One class per file is our general convention except for things like Foo/FooClient.

The UpdatableTexture classes are so tightly coupled with corresponding LayerTextureUpdater classes that I don&apos;t think it makes sense to split them up into different files. Moving the different LayerTextureUpdater classes into separate files is a great idea though.

&gt; 
&gt; Is the idea here that &quot;update&quot; is the word for going from an SkPicture to a texture? Can we call that rasterization? Or tile-filling? Tile Rasterization? TilePainting versus Layer Painting? Just throwing out ideas... whatever word we settle on, lets make sure we normalize the codebase to that terminology and put comments liberally on the new code to explain the word.

&quot;Update&quot; is still the same as before, going from rasterized contents to texture. It&apos;s the texture upload. &quot;Prepare&quot; is still where all rasterization happens. So this patch doesn&apos;t introduce any changes in the terminology here. The follow up patch that adds support for drawing directly to mapped shared memory will need an &quot;Allocate&quot; step and it might makes sense to change these terms and document them properly at that point. I&apos;m intentionally avoiding that in this patch.

&gt; 
&gt; Any thoughts on how to test this stuff without having to instantiate large portions of webkit and/or skia? Not in the short term, per se, but overall. We don&apos;t have a test strategy for this stuff and I think we should.

I agree but I haven&apos;t thought much about it.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp:49
&gt; &gt; +class ImageTexture : public UpdatableTexture {
&gt; 
&gt; ImageUpdatableTexture? I personally think its good to be able to tell the ancestery of a class by its name.

Yes, ImageUpdatableTexture would follow the convention used for LayerTextureUpdater naming better.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp:66
&gt; &gt; +};
&gt; 
&gt; Personally, I think you can put the implementations inline since this is in the cpp. Ping jamesr on chat if you want to verify that...

ImageUpdatableTexture::updateRect requires the full declaration of ImageLayerTextureUpdater and ImageLayerTextureUpdater::createTexture requires the full declaration of ImageUpdatableTexture so one of those functions can&apos;t be inlined. I arbitrarily picked ImageUpdatableTexture::updateRect in this case.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdater.h:44
&gt; &gt; +class UpdatableTexture : public RefCounted&lt;UpdatableTexture&gt; {
&gt; 
&gt; Standalone file?

As mentioned above. I think UpdatableTexture classes are so closely coupled with LayerTextureUpdater classes that we&apos;re better off keeping these in the same file.

&gt; 
&gt; Comment on the overall class explaining its &quot;role&quot; and purpose?

Sure.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdater.h:49
&gt; &gt; +    virtual void prepareRect(const IntRect&amp; sourceRect) = 0;
&gt; 
&gt; Comments on these functions?

This is just LayerTextureUpdater::updateTextureRect moved to the UpdatableTexture class. I intentionally didn&apos;t add any comments for functions that don&apos;t already have comments. I can add some comments here if you think that would be useful?

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp:45
&gt; &gt; +#include &quot;skia/ext/platform_canvas.h&quot;
&gt; 
&gt; Is this the right way to do skia includes? I&apos;m not saying its wrong, it just sorta looks odd to my eyes.

This is the way Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp does it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496363</commentid>
    <comment_count>6</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-04 11:51:11 -0700</bug_when>
    <thetext>Re: patch direction.

I see where you&apos;re going with UpdatableTexture.  I think that&apos;s a great way to store per-tile data, since we already have a custom tile type on the TiledLayerChromium.  Two minor quibbles: 

(1) I don&apos;t want to keep around per-tile pixel buffers.  You should probably clean them up during upload.  I could imagine you&apos;d probably have to do something analogous for the shared memory hand-off case.

(2) It should probably be documented somewhere that createTextureUpdater() should always return the same kind of texture updater and a texture updater should always return the same kind of tile class.  Otherwise, you&apos;d probably need to clear all tiles when changing layer tree hosts and creating a new updater? It just seems a little bit sloppy, and maybe some documentation might be the answer here.

Re: cleanup.

I think there are a couple of cleanup issues that have been in the back of our heads for a while in this part of the code.  Sorry that you&apos;ve sort of stepped in them, but that&apos;s how it goes.  I&apos;ll try to call them explicitly out here, and we can decide what to do or where we&apos;re going.

* Unclear class naming (PlatformCanvas vs Canvas vs Bitmap vs SkPicture).  I couldn&apos;t tell you what the difference between a canvas and bitmap was without looking at the code.  The fact that we have all these derived updaters and derived texture classes here doesn&apos;t make this any easier to keep it all in your head.  Also, minor nit for me is that class names are suffixed instead of prefixed (BitmapLayerUpdater vs. LayerUpdaterBitmap).

* Texture updaters aren&apos;t in separate files.  This is pretty trivial to fix, but maybe should wait until we discuss the class naming?

* Unclear function naming (prepare/update vs. paint/raster/allocate/upload).  I agree this could wait for another patch if you&apos;re adding an allocate step in there.

I realize that naming discussions can end up being a bikeshed problem, but I find this code non-obvious every time I look at it.  It&apos;d be nice to have some names that give better hints as to what&apos;s going on.  I&apos;m open to any suggestions.  :)

&gt; &gt; Any thoughts on how to test this stuff without having to instantiate large portions of webkit and/or skia? Not in the short term, per se, but overall. We don&apos;t have a test strategy for this stuff and I think we should.
&gt; 
&gt; I agree but I haven&apos;t thought much about it.

My thought on this is that we need to break testing into two different parts.  We could mock out our own LayerTextureUpdater and make sure that the right calls are being made from TiledLayerChromium.  Then, we could test individual texture updaters and make sure that when calls are made on them, the right pixels get put into buffers.  For the WebKit paint path, we could mock out a GraphicsContext or LayerPainterChromium.  I don&apos;t see any way around the Skia dependency though.

&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp:49
&gt; &gt; &gt; +class ImageTexture : public UpdatableTexture {
&gt; &gt; 
&gt; &gt; ImageUpdatableTexture? I personally think its good to be able to tell the ancestery of a class by its name.
&gt; 
&gt; Yes, ImageUpdatableTexture would follow the convention used for LayerTextureUpdater naming better.

How UpdatableTexture is being used looks a little strange to me.  In some cases you store the updater on it.  In some cases you don&apos;t (where it could be used by multiple updaters). Also, don&apos;t PlatformCanvasUpdatableTexture, CanvasUpdatableTexture, and ImageUpdatableTexture just thunk through? It really doesn&apos;t do anything other than just be a ManagedTexture wrapper.

One suggestion might be to invert the flow here and encapsulate the update logic a little bit more in the texture updater itself.  Rather than having TiledLayerChromium interact with the UpdatableTexture via tile-&gt;texture()-&gt;prepareRect(), maybe it should call through the updater, like we&apos;re already doing on a per-tile basis for upload.  This would eliminate some of these UpdatableTexture-derived classes which only exist to hold a ManagedTexture with a different updater, and the updaters could just use ManagedTexture directly rather than a derived class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496402</commentid>
    <comment_count>7</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-04 13:14:07 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Re: patch direction.
&gt; 
&gt; I see where you&apos;re going with UpdatableTexture.  I think that&apos;s a great way to store per-tile data, since we already have a custom tile type on the TiledLayerChromium.  Two minor quibbles: 
&gt; 
&gt; (1) I don&apos;t want to keep around per-tile pixel buffers.  You should probably clean them up during upload.  I could imagine you&apos;d probably have to do something analogous for the shared memory hand-off case.

This is a simple change. The benefit of the current code is that the per-tile buffer is only reallocated when the size has changed but the performance improvement from that might not be significant.

&gt; 
&gt; (2) It should probably be documented somewhere that createTextureUpdater() should always return the same kind of texture updater and a texture updater should always return the same kind of tile class.  Otherwise, you&apos;d probably need to clear all tiles when changing layer tree hosts and creating a new updater? It just seems a little bit sloppy, and maybe some documentation might be the answer here.

Each layer could potentially use a different texture updater. There&apos;s nothing in the design that prevents that afaik. Also nothing that prevents a texture updater from returning different tile classes if it would ever make sense to that. You&apos;re right that we have to clear all tiles when changing texture updater but the current code seems to do that properly afaik. Some documentation here would definitely not hurt.

&gt; 
&gt; Re: cleanup.
&gt; 
&gt; I think there are a couple of cleanup issues that have been in the back of our heads for a while in this part of the code.  Sorry that you&apos;ve sort of stepped in them, but that&apos;s how it goes.  I&apos;ll try to call them explicitly out here, and we can decide what to do or where we&apos;re going.
&gt; 
&gt; * Unclear class naming (PlatformCanvas vs Canvas vs Bitmap vs SkPicture).  I couldn&apos;t tell you what the difference between a canvas and bitmap was without looking at the code.  The fact that we have all these derived updaters and derived texture classes here doesn&apos;t make this any easier to keep it all in your head.  Also, minor nit for me is that class names are suffixed instead of prefixed (BitmapLayerUpdater vs. LayerUpdaterBitmap).
&gt; 
&gt; * Texture updaters aren&apos;t in separate files.  This is pretty trivial to fix, but maybe should wait until we discuss the class naming?

Yes, the naming here could definitely be improved and I&apos;d prefer to wait with moving the updaters to separate files until we agree on the naming.

&gt; 
&gt; * Unclear function naming (prepare/update vs. paint/raster/allocate/upload).  I agree this could wait for another patch if you&apos;re adding an allocate step in there.
&gt; 
&gt; I realize that naming discussions can end up being a bikeshed problem, but I find this code non-obvious every time I look at it.  It&apos;d be nice to have some names that give better hints as to what&apos;s going on.  I&apos;m open to any suggestions.  :)
&gt; 
&gt; &gt; &gt; Any thoughts on how to test this stuff without having to instantiate large portions of webkit and/or skia? Not in the short term, per se, but overall. We don&apos;t have a test strategy for this stuff and I think we should.
&gt; &gt; 
&gt; &gt; I agree but I haven&apos;t thought much about it.
&gt; 
&gt; My thought on this is that we need to break testing into two different parts.  We could mock out our own LayerTextureUpdater and make sure that the right calls are being made from TiledLayerChromium.  Then, we could test individual texture updaters and make sure that when calls are made on them, the right pixels get put into buffers.  For the WebKit paint path, we could mock out a GraphicsContext or LayerPainterChromium.  I don&apos;t see any way around the Skia dependency though.

ok, sounds good to me.

&gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp:49
&gt; &gt; &gt; &gt; +class ImageTexture : public UpdatableTexture {
&gt; &gt; &gt; 
&gt; &gt; &gt; ImageUpdatableTexture? I personally think its good to be able to tell the ancestery of a class by its name.
&gt; &gt; 
&gt; &gt; Yes, ImageUpdatableTexture would follow the convention used for LayerTextureUpdater naming better.
&gt; 
&gt; How UpdatableTexture is being used looks a little strange to me.  In some cases you store the updater on it.  In some cases you don&apos;t (where it could be used by multiple updaters). Also, don&apos;t PlatformCanvasUpdatableTexture, CanvasUpdatableTexture, and ImageUpdatableTexture just thunk through? It really doesn&apos;t do anything other than just be a ManagedTexture wrapper.
&gt; 
&gt; One suggestion might be to invert the flow here and encapsulate the update logic a little bit more in the texture updater itself.  Rather than having TiledLayerChromium interact with the UpdatableTexture via tile-&gt;texture()-&gt;prepareRect(), maybe it should call through the updater, like we&apos;re already doing on a per-tile basis for upload.  This would eliminate some of these UpdatableTexture-derived classes which only exist to hold a ManagedTexture with a different updater, and the updaters could just use ManagedTexture directly rather than a derived class.

I considered this before implementing the current patch. I decided to add the UpdatableTexture class and have the texture updater create a derived class based on it instead of ManagedTexture to avoid casts from ManagedTexture to derived class in texture updater. E.g if we kept the current LayerTextureUpdater::updateTextureRect instead of adding UpdatableTexture::updateRect. LayerTextureUpdaterBitmap::updateTextureRect would look something like this:

void LayerTextureUpdaterBitmap::updateTextureRect(GraphicsContext3D* context, TextureAllocator* allocator, ManagedTexture* texture, const IntRect&amp; sourceRect, const IntRect&amp; destRect)
{
    BitmapManagedTexture* bitmapManagedTexture = static_cast&lt;BitmapManagedTexture*&gt; (texture);
    texture-&gt;bindTexture(context, allocator); 
    m_texSubImage.upload(bitmapManagedTexture-&gt;pixels(), destRect, destRect, destRect, texture-&gt;format(), context);
}

which I think is bad not just because it looks ugly. If you know of a cleaner way to do this please let me know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496444</commentid>
    <comment_count>8</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-04 13:50:48 -0700</bug_when>
    <thetext>How does this sounds as a way to move forward with this patch?

- Change name of ImageTexture and such to ImageUpdatableTexture.
- Add some comments explaining the purpose of UpdatableTexture class.
- Agree on names for texture updater classes.

The shared memory texture updater is moved to a follow up patch.

Related to the texture updater naming:

I used LayerTextureUpdaterPlatformCanvas as class name because that&apos;s the only updater that makes use of the PlatformCanvas class. Maybe it&apos;s better to include the fact that this updater is rasterizing to a large buffer and copying out of it to update each tile texture. LayerTextureUpdaterSubImage?

LayerTextureUpdaterBitmap is I guess not the best name. It was used as we already had a texture updater with this name and it&apos;s neither using shared memory, a platform canvas or a frame buffer object. Maybe LayerTextureUpdaterSkiaBitmap and LayerTextureUpdaterSkPicture -&gt; LayerTextureUpdaterSkia, LayerTextureUpdaterSharedMemory -&gt; LayerTextureUpdaterSkiaSharedMemory, LayerTextureUpdaterFrameBuffer -&gt; LayerTextureUpdaterSkiaFrameBufferObject

We would end up with something like this:
LayerTextureUpdaterPlatformCanvas (or LayerTextureUpdaterSubImage)
LayerTextureUpdaterSkia
LayerTextureUpdaterSkiaBitmap
LayerTextureUpdaterSkiaSharedMemory
LayerTextureUpdaterSkiaFrameBufferObject

is that better?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496534</commentid>
    <comment_count>9</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-04 16:20:58 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; How UpdatableTexture is being used looks a little strange to me.  In some cases you store the updater on it.  In some cases you don&apos;t (where it could be used by multiple updaters). Also, don&apos;t PlatformCanvasUpdatableTexture, CanvasUpdatableTexture, and ImageUpdatableTexture just thunk through? It really doesn&apos;t do anything other than just be a ManagedTexture wrapper.
&gt; &gt; 
&gt; &gt; One suggestion might be to invert the flow here and encapsulate the update logic a little bit more in the texture updater itself.  Rather than having TiledLayerChromium interact with the UpdatableTexture via tile-&gt;texture()-&gt;prepareRect(), maybe it should call through the updater, like we&apos;re already doing on a per-tile basis for upload.  This would eliminate some of these UpdatableTexture-derived classes which only exist to hold a ManagedTexture with a different updater, and the updaters could just use ManagedTexture directly rather than a derived class.
&gt; 
&gt; I considered this before implementing the current patch. I decided to add the UpdatableTexture class and have the texture updater create a derived class based on it instead of ManagedTexture to avoid casts from ManagedTexture to derived class in texture updater. E.g if we kept the current LayerTextureUpdater::updateTextureRect instead of adding UpdatableTexture::updateRect. LayerTextureUpdaterBitmap::updateTextureRect would look something like this:
&gt; 
&gt; void LayerTextureUpdaterBitmap::updateTextureRect(GraphicsContext3D* context, TextureAllocator* allocator, ManagedTexture* texture, const IntRect&amp; sourceRect, const IntRect&amp; destRect)
&gt; {
&gt;     BitmapManagedTexture* bitmapManagedTexture = static_cast&lt;BitmapManagedTexture*&gt; (texture);
&gt;     texture-&gt;bindTexture(context, allocator); 
&gt;     m_texSubImage.upload(bitmapManagedTexture-&gt;pixels(), destRect, destRect, destRect, texture-&gt;format(), context);
&gt; }
&gt; 
&gt; which I think is bad not just because it looks ugly. If you know of a cleaner way to do this please let me know.

I think this approach would probably be ok in practice, but I absolutely agree that the static_cast there just seems like a bad idea.  On the other hand, the current approach has raw pointers to texture updaters that could be stale.  Those seem about equivalently bad to me.

I think I&apos;m just balking at this idea that we&apos;ve got one class hierarchy to handle painting and uploading and that we somehow need a second parallel hierarchy to store per-tile data when handling that.  And, on top of that, we&apos;re going to be using at most like two pieces of each hierarchy during any given run, and texture types and updater types are never mixed and matched.  It just seems like there should be a better way to do this.   I think it just seems like a lot of code to write just to add virtualized per-tile data and a few function calls.

Thinking out loud here:

Option 1) Store per-tile data externally.

There&apos;s only one updater that needs this, and on average it&apos;ll probably have no more than a screenfull of tiles.  A vector or hashmap of per-tile data could be cleaner than all of this extra scaffolding for every updater type.

Option 2) Texture updaters could own the tiler and explicitly manage tile lifetimes.

This is somewhat of a crazy suggestion, but it would mean that they could be assured that every tile was of the type that they intended it to be, rather than requiring the derived UpdatableTile types.  In some ways, the updaters are already responsible for creating tiles, so this isn&apos;t that weird.  This would also fix up any explicit issues where the updater got recreated but the tiles were using the old updater (or were of a type created by an old updater type).  There&apos;d still be a static_cast, (due to CCLayerTilingData not being templatized), but I&apos;d be ok because we&apos;d know that there&apos;d be a single owner responsible for what types are being stored.

Do either of those sound more palatable to you? Were there other options you considered?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496689</commentid>
    <comment_count>10</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-11-05 12:09:09 -0700</bug_when>
    <thetext>Its Enne&apos;s call on the overall issues, but one question I have:
  CCProxy
  CCThreadProxy
  LayerChromium
  CanvasLayerChromium

Subclass name goes on front.

Why does LTU hierarchy reverse this?

&gt; We would end up with something like this:
&gt; LayerTextureUpdaterPlatformCanvas (or LayerTextureUpdaterSubImage)
&gt; LayerTextureUpdaterSkia
&gt; LayerTextureUpdaterSkiaBitmap
&gt; LayerTextureUpdaterSkiaSharedMemory
&gt; LayerTextureUpdaterSkiaFrameBufferObject
&gt; 
&gt; is that better?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497399</commentid>
    <comment_count>11</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-07 12:58:01 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; How UpdatableTexture is being used looks a little strange to me.  In some cases you store the updater on it.  In some cases you don&apos;t (where it could be used by multiple updaters). Also, don&apos;t PlatformCanvasUpdatableTexture, CanvasUpdatableTexture, and ImageUpdatableTexture just thunk through? It really doesn&apos;t do anything other than just be a ManagedTexture wrapper.
&gt; &gt; &gt; 
&gt; &gt; &gt; One suggestion might be to invert the flow here and encapsulate the update logic a little bit more in the texture updater itself.  Rather than having TiledLayerChromium interact with the UpdatableTexture via tile-&gt;texture()-&gt;prepareRect(), maybe it should call through the updater, like we&apos;re already doing on a per-tile basis for upload.  This would eliminate some of these UpdatableTexture-derived classes which only exist to hold a ManagedTexture with a different updater, and the updaters could just use ManagedTexture directly rather than a derived class.
&gt; &gt; 
&gt; &gt; I considered this before implementing the current patch. I decided to add the UpdatableTexture class and have the texture updater create a derived class based on it instead of ManagedTexture to avoid casts from ManagedTexture to derived class in texture updater. E.g if we kept the current LayerTextureUpdater::updateTextureRect instead of adding UpdatableTexture::updateRect. LayerTextureUpdaterBitmap::updateTextureRect would look something like this:
&gt; &gt; 
&gt; &gt; void LayerTextureUpdaterBitmap::updateTextureRect(GraphicsContext3D* context, TextureAllocator* allocator, ManagedTexture* texture, const IntRect&amp; sourceRect, const IntRect&amp; destRect)
&gt; &gt; {
&gt; &gt;     BitmapManagedTexture* bitmapManagedTexture = static_cast&lt;BitmapManagedTexture*&gt; (texture);
&gt; &gt;     texture-&gt;bindTexture(context, allocator); 
&gt; &gt;     m_texSubImage.upload(bitmapManagedTexture-&gt;pixels(), destRect, destRect, destRect, texture-&gt;format(), context);
&gt; &gt; }
&gt; &gt; 
&gt; &gt; which I think is bad not just because it looks ugly. If you know of a cleaner way to do this please let me know.
&gt; 
&gt; I think this approach would probably be ok in practice, but I absolutely agree that the static_cast there just seems like a bad idea.  On the other hand, the current approach has raw pointers to texture updaters that could be stale.  Those seem about equivalently bad to me.
&gt; 
&gt; I think I&apos;m just balking at this idea that we&apos;ve got one class hierarchy to handle painting and uploading and that we somehow need a second parallel hierarchy to store per-tile data when handling that.  And, on top of that, we&apos;re going to be using at most like two pieces of each hierarchy during any given run, and texture types and updater types are never mixed and matched.  It just seems like there should be a better way to do this.   I think it just seems like a lot of code to write just to add virtualized per-tile data and a few function calls.

I agree that having the texture updater not be the owner of per-tile data is a problem right now.

&gt; 
&gt; Thinking out loud here:
&gt; 
&gt; Option 1) Store per-tile data externally.
&gt; 
&gt; There&apos;s only one updater that needs this, and on average it&apos;ll probably have no more than a screenfull of tiles.  A vector or hashmap of per-tile data could be cleaner than all of this extra scaffolding for every updater type.

I considered this. I&apos;m not sure it would be much cleaner after adding the necessary API for releasing these updater specific resources. And I don&apos;t like adding an additional data-structure where none is needed.

&gt; 
&gt; Option 2) Texture updaters could own the tiler and explicitly manage tile lifetimes.
&gt; 
&gt; This is somewhat of a crazy suggestion, but it would mean that they could be assured that every tile was of the type that they intended it to be, rather than requiring the derived UpdatableTile types.  In some ways, the updaters are already responsible for creating tiles, so this isn&apos;t that weird.  This would also fix up any explicit issues where the updater got recreated but the tiles were using the old updater (or were of a type created by an old updater type).  There&apos;d still be a static_cast, (due to CCLayerTilingData not being templatized), but I&apos;d be ok because we&apos;d know that there&apos;d be a single owner responsible for what types are being stored.

The idea of making the updater own the tiler is worth considering. I haven&apos;t thought of that before. Think I prefer having virtualized per-tile functions over using static_cast though.

&gt; 
&gt; Do either of those sound more palatable to you? Were there other options you considered?

I think the best solution might be to have CCTextureUpdater own the per-tile specific data. Makes it harder to retain resources between updates but we should probably use something similar to the TextureManager for tracking those resources anyhow. This requires the &quot;allocate&quot; step that I&apos;ve talked about before so I&apos;d prefer to land something like the current patch first and then improve it in the follow up patch that adds the &quot;allocate&quot; step.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497407</commentid>
    <comment_count>12</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-07 13:07:52 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Its Enne&apos;s call on the overall issues, but one question I have:
&gt;   CCProxy
&gt;   CCThreadProxy
&gt;   LayerChromium
&gt;   CanvasLayerChromium
&gt; 
&gt; Subclass name goes on front.
&gt; 
&gt; Why does LTU hierarchy reverse this?

Yea, I just happen to use the existing class names as reference here. I&apos;m happy to change the position of the subclass name at the same time. Though I&apos;m more interested in feedback on what subclass names to use at this point. The structure of them is easy to decide.

PlatformCanvasLayerTextureUpdater (or SubImageLayerTextureUpdater)
SkiaLayerTextureUpdater
BitmapSkiaLayerTextureUpdater
SharedMemorySkiaLayerTextureUpdater
FrameBufferObjectSkiaLayerTextureUpdater

?

&gt; 
&gt; &gt; We would end up with something like this:
&gt; &gt; LayerTextureUpdaterPlatformCanvas (or LayerTextureUpdaterSubImage)
&gt; &gt; LayerTextureUpdaterSkia
&gt; &gt; LayerTextureUpdaterSkiaBitmap
&gt; &gt; LayerTextureUpdaterSkiaSharedMemory
&gt; &gt; LayerTextureUpdaterSkiaFrameBufferObject
&gt; &gt; 
&gt; &gt; is that better?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497507</commentid>
    <comment_count>13</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-07 15:04:56 -0800</bug_when>
    <thetext>(In reply to comment #12)

&gt; PlatformCanvasLayerTextureUpdater (or SubImageLayerTextureUpdater)
&gt; SkiaLayerTextureUpdater
&gt; BitmapSkiaLayerTextureUpdater
&gt; SharedMemorySkiaLayerTextureUpdater
&gt; FrameBufferObjectSkiaLayerTextureUpdater

Maybe PlatformCanvasLayerTextureUpdater =&gt; BitmapLayerTextureUpdater? Then the difference between BitmapSkiaLayerTextureUpdater and BitmapLayerTextureUpdater would be whether you cached an SkPicture.

Other than that, that above list sounds good to me.


Re: other comments.  I think I&apos;m ok with the patch&apos;s direction of using derived tile classes after thinking about alternatives and not really liking any of them much better.  Thanks for letting me take the time to pick through alternatives.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498128</commentid>
    <comment_count>14</comment_count>
      <attachid>114089</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-08 09:14:57 -0800</bug_when>
    <thetext>Created attachment 114089
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498194</commentid>
    <comment_count>15</comment_count>
      <attachid>114106</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-08 10:11:08 -0800</bug_when>
    <thetext>Created attachment 114106
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498228</commentid>
    <comment_count>16</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-08 10:31:20 -0800</bug_when>
    <thetext>Latest patch uses these names and moves them into separate files:

CanvasLayerTextureUpdater : public LayerTextureUpdater
BitmapLayerTextureUpdater : public CanvasLayerTextureUpdater
SkiaLayerTextureUpdater : public CanvasLayerTextureUpdater
FrameBufferObjectSkiaLayerTextureUpdater : public SkiaLayerTextureUpdater

the texture updaters derived from CanvasLayerTextureUpdater don&apos;t currently inherit the Canvas name. We should probably change that for consistency.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498263</commentid>
    <comment_count>17</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-08 11:04:56 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Latest patch uses these names and moves them into separate files:
&gt; 
&gt; CanvasLayerTextureUpdater : public LayerTextureUpdater
&gt; BitmapLayerTextureUpdater : public CanvasLayerTextureUpdater
&gt; SkiaLayerTextureUpdater : public CanvasLayerTextureUpdater
&gt; FrameBufferObjectSkiaLayerTextureUpdater : public SkiaLayerTextureUpdater

Awesome.  Thanks for all of that.  I find this to be much more clear.  This patch looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498266</commentid>
    <comment_count>18</comment_count>
      <attachid>114120</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-08 11:05:19 -0800</bug_when>
    <thetext>Created attachment 114120
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498270</commentid>
    <comment_count>19</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-08 11:11:37 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; Latest patch uses these names and moves them into separate files:
&gt; &gt; 
&gt; &gt; CanvasLayerTextureUpdater : public LayerTextureUpdater
&gt; &gt; BitmapLayerTextureUpdater : public CanvasLayerTextureUpdater
&gt; &gt; SkiaLayerTextureUpdater : public CanvasLayerTextureUpdater
&gt; &gt; FrameBufferObjectSkiaLayerTextureUpdater : public SkiaLayerTextureUpdater
&gt; 
&gt; Awesome.  Thanks for all of that.  I find this to be much more clear.  This patch looks good to me.

Great! I went ahead and added the Canvas name to all related classes in the latest patch as I didn&apos;t see any good reason for not ding that. Btw, each derived UpdatableTexture class is now a subclass of the texture updater class. I think that cleaned up things a bit and allowed me to inline all the texture updater code in ImageLayerChromium.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498609</commentid>
    <comment_count>20</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-11-08 19:22:24 -0800</bug_when>
    <thetext>Loooks amazing! Thanks David!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498649</commentid>
    <comment_count>21</comment_count>
      <attachid>114120</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-08 22:11:28 -0800</bug_when>
    <thetext>Comment on attachment 114120
Patch

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

Lots of feedback of the nitpicky variety - no big changes requested. Overall this looks great.

&gt; Source/WebCore/platform/graphics/chromium/BitmapCanvasLayerTextureUpdater.h:47
&gt; +        virtual void prepareRect(const IntRect&amp; sourceRect) { }

i&apos;m not sure why here and in other files you declare an empty override - should this function just not be declare pure virtual in the base class if some significant portion of subclasses will just override it with an empty implementation.

if you really do want to provide this override, either omit the parameter name or comment it out with /* */ so we don&apos;t get unused variable warnings

&gt; Source/WebCore/platform/graphics/chromium/BitmapCanvasLayerTextureUpdater.h:56
&gt; +    static PassRefPtr&lt;BitmapCanvasLayerTextureUpdater&gt; create(PassOwnPtr&lt;LayerPainterChromium&gt;, bool useMapTexSubImage);

you also should declare a virtual d&apos;tor for this class and put its definition in the .cpp. Since this class is virtual and its base class has a virtual d&apos;tor, this classes d&apos;tor is virtual whether you declare it or not and if you do not declare it c++ will happily define a d&apos;tor in the header. This sucks because the d&apos;tor is large (since it has to invoke the d&apos;tor for members and the base d&apos;tor) and since it&apos;s virtual it is cannot be inlined, so it just bloats up the object size of every translation unit including this header and makes the linker do more work and use more memory dealing with lots of duplicate symbols.

&gt; Source/WebCore/platform/graphics/chromium/CanvasLayerTextureUpdater.h:42
&gt; +    explicit CanvasLayerTextureUpdater(PassOwnPtr&lt;LayerPainterChromium&gt;);

declare d&apos;tor here in the header, define in the .cpp please.

&gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdater.h:73
&gt; +    virtual Texture* createTexture(TextureManager*) = 0;

it appears that all callers of this function stuff the return value into a RefPtr&lt;&gt;. If that is the case then it would be better for this function to return a PassRefPtr&lt;&gt; to reduce the odds of some caller forgetting to put the pointer in the correct wrapper.

in general any function in WebKit that returns a pointer and is transferring some notion of ownership should return a PassOwnPtr or PassRefPtr - raw pointer return types are reserved for when ownership isn&apos;t being transferred (for example returning a pointer to a member that is owned exclusively by the object)

&gt; Source/WebCore/platform/graphics/chromium/SkiaCanvasLayerTextureUpdater.h:42
&gt; +class SkiaCanvasLayerTextureUpdater : public CanvasLayerTextureUpdater {

i think this would be better called SkPictureCanvasLayerTextureUpdater since other layer types also use skia in different ways

&gt; Source/WebCore/platform/graphics/chromium/SkiaCanvasLayerTextureUpdater.h:44
&gt; +    explicit SkiaCanvasLayerTextureUpdater(PassOwnPtr&lt;LayerPainterChromium&gt;);

a public raw c&apos;tor is weird - normally we only do this if we want to instantiate instances of this class on the stack or as member variables of other classes, otherwise we use a static create() of the correct smart pointer type. It seems other CanvasLayerTextureUpdater subclasses expose a create() so I&apos;m not sure why this one is different.

please declare a virtual d&apos;tor here and define it in the .cpp

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:54
&gt; +    explicit UpdatableTile(PassRefPtr&lt;LayerTextureUpdater::Texture&gt; tex) : m_tex(tex) { }

nit: this isn&apos;t your fault, but we don&apos;t typically abbreviate words like &apos;texture&apos; to &apos;tex&apos; even in one-liners like this. can you fix this since you&apos;re already here?

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:64
&gt; +    // Page-space rectangle that needs to be updated.

&quot;page&quot; is an ambiguous word to use here - what page? the page the layer is in? Do you mean content space?

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:67
&gt; +    RefPtr&lt;LayerTextureUpdater::Texture&gt; m_tex;

similarly this should be m_texture, not m_tex</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499232</commentid>
    <comment_count>22</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-09 12:10:49 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 114120 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=114120&amp;action=review
&gt; 
&gt; Lots of feedback of the nitpicky variety - no big changes requested. Overall this looks great.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/BitmapCanvasLayerTextureUpdater.h:47
&gt; &gt; +        virtual void prepareRect(const IntRect&amp; sourceRect) { }
&gt; 
&gt; i&apos;m not sure why here and in other files you declare an empty override - should this function just not be declare pure virtual in the base class if some significant portion of subclasses will just override it with an empty implementation.

This was done to be consistent with LayerTextureUpdater::prepareToUpdate. Making both LayerTextureUpdater::prepareToUpdate and LayerTextureUpdater::Texture::prepareRect not declared pure virtual.

&gt; 
&gt; if you really do want to provide this override, either omit the parameter name or comment it out with /* */ so we don&apos;t get unused variable warnings

Adding /* */ to a few unused parameters in latest patch.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/BitmapCanvasLayerTextureUpdater.h:56
&gt; &gt; +    static PassRefPtr&lt;BitmapCanvasLayerTextureUpdater&gt; create(PassOwnPtr&lt;LayerPainterChromium&gt;, bool useMapTexSubImage);
&gt; 
&gt; you also should declare a virtual d&apos;tor for this class and put its definition in the .cpp. Since this class is virtual and its base class has a virtual d&apos;tor, this classes d&apos;tor is virtual whether you declare it or not and if you do not declare it c++ will happily define a d&apos;tor in the header. This sucks because the d&apos;tor is large (since it has to invoke the d&apos;tor for members and the base d&apos;tor) and since it&apos;s virtual it is cannot be inlined, so it just bloats up the object size of every translation unit including this header and makes the linker do more work and use more memory dealing with lots of duplicate symbols.

Understand, thanks for the explanation. Fixing.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/CanvasLayerTextureUpdater.h:42
&gt; &gt; +    explicit CanvasLayerTextureUpdater(PassOwnPtr&lt;LayerPainterChromium&gt;);
&gt; 
&gt; declare d&apos;tor here in the header, define in the .cpp please.

Fixing.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdater.h:73
&gt; &gt; +    virtual Texture* createTexture(TextureManager*) = 0;
&gt; 
&gt; it appears that all callers of this function stuff the return value into a RefPtr&lt;&gt;. If that is the case then it would be better for this function to return a PassRefPtr&lt;&gt; to reduce the odds of some caller forgetting to put the pointer in the correct wrapper.
&gt; 
&gt; in general any function in WebKit that returns a pointer and is transferring some notion of ownership should return a PassOwnPtr or PassRefPtr - raw pointer return types are reserved for when ownership isn&apos;t being transferred (for example returning a pointer to a member that is owned exclusively by the object)

Yea, I think I did this to avoid adding an adoptRef in each createTexture but that&apos;s obviously a bad idea. Fixing.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/SkiaCanvasLayerTextureUpdater.h:42
&gt; &gt; +class SkiaCanvasLayerTextureUpdater : public CanvasLayerTextureUpdater {
&gt; 
&gt; i think this would be better called SkPictureCanvasLayerTextureUpdater since other layer types also use skia in different ways

Sure.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/SkiaCanvasLayerTextureUpdater.h:44
&gt; &gt; +    explicit SkiaCanvasLayerTextureUpdater(PassOwnPtr&lt;LayerPainterChromium&gt;);
&gt; 
&gt; a public raw c&apos;tor is weird - normally we only do this if we want to instantiate instances of this class on the stack or as member variables of other classes, otherwise we use a static create() of the correct smart pointer type. It seems other CanvasLayerTextureUpdater subclasses expose a create() so I&apos;m not sure why this one is different.

That c&apos;tor should have been protected. My mistake. It doesn&apos;t have a static create method the class is not instantiated on it&apos;s own. It needs to be derived. 

&gt; 
&gt; please declare a virtual d&apos;tor here and define it in the .cpp
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:54
&gt; &gt; +    explicit UpdatableTile(PassRefPtr&lt;LayerTextureUpdater::Texture&gt; tex) : m_tex(tex) { }
&gt; 
&gt; nit: this isn&apos;t your fault, but we don&apos;t typically abbreviate words like &apos;texture&apos; to &apos;tex&apos; even in one-liners like this. can you fix this since you&apos;re already here?

Sure, no prob.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:64
&gt; &gt; +    // Page-space rectangle that needs to be updated.
&gt; 
&gt; &quot;page&quot; is an ambiguous word to use here - what page? the page the layer is in? Do you mean content space?

I used &quot;page&quot; to be consistent with the &quot;Calculate page-space rectangle to copy from&quot; comment in prepareToUpdate. Changing to content-space in both places.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:67
&gt; &gt; +    RefPtr&lt;LayerTextureUpdater::Texture&gt; m_tex;
&gt; 
&gt; similarly this should be m_texture, not m_tex

np.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499235</commentid>
    <comment_count>23</comment_count>
      <attachid>114338</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-09 12:12:12 -0800</bug_when>
    <thetext>Created attachment 114338
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499320</commentid>
    <comment_count>24</comment_count>
      <attachid>114338</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-09 13:47:17 -0800</bug_when>
    <thetext>Comment on attachment 114338
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/BitmapLayerTextureUpdater.cpp:63
&gt; +LayerTextureUpdater::Texture* BitmapCanvasLayerTextureUpdater::createTexture(TextureManager* manager)
&gt; +{
&gt; +    return new Texture(this, ManagedTexture::create(manager));
&gt; +}

this signature doesn&apos;t match the .h - how does this compile?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499340</commentid>
    <comment_count>25</comment_count>
      <attachid>114365</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-09 14:08:31 -0800</bug_when>
    <thetext>Created attachment 114365
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499346</commentid>
    <comment_count>26</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-09 14:14:04 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 114338 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=114338&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/BitmapLayerTextureUpdater.cpp:63
&gt; &gt; +LayerTextureUpdater::Texture* BitmapCanvasLayerTextureUpdater::createTexture(TextureManager* manager)
&gt; &gt; +{
&gt; &gt; +    return new Texture(this, ManagedTexture::create(manager));
&gt; &gt; +}
&gt; 
&gt; this signature doesn&apos;t match the .h - how does this compile?

Oops, that&apos;s an old file that shouldn&apos;t be part of this patch. Fixed in latest patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499553</commentid>
    <comment_count>27</comment_count>
      <attachid>114365</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-09 18:02:07 -0800</bug_when>
    <thetext>Comment on attachment 114365
Patch

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

Very very close! Just two more nits.

&gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdater.h:52
&gt; +        virtual void prepareRect(const IntRect&amp; sourceRect) { };

you don&apos;t need a semicolon at the end of this line

this will have the unused parameter issue - don&apos;t name the parameter or put the parameter name in comments like so:

virtual void prepareRect(const IntRect&amp; /* sourceRect */) { }

or just make it pure virtual (that might make most sense, this class isn&apos;t instantiable anyway)

&gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdater.h:81
&gt; +    virtual void prepareToUpdate(const IntRect&amp; contentRect, const IntSize&amp; tileSize, int borderTexels) { };

no semicolon at end of line</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499590</commentid>
    <comment_count>28</comment_count>
      <attachid>114419</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-09 19:01:38 -0800</bug_when>
    <thetext>Created attachment 114419
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499636</commentid>
    <comment_count>29</comment_count>
      <attachid>114419</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-09 21:45:41 -0800</bug_when>
    <thetext>Comment on attachment 114419
Patch

Clearing flags on attachment: 114419

Committed r99813: &lt;http://trac.webkit.org/changeset/99813&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499637</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-09 21:45:47 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501227</commentid>
    <comment_count>31</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2011-11-11 16:51:53 -0800</bug_when>
    <thetext>FYI r99813 added 
+            const IntPoint anchor = sourceRect.location();
to TiledLayerChromium.cpp, but that variable is then unused, triggering a build error on gcc 4.6.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501268</commentid>
    <comment_count>32</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-11 17:38:57 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; FYI r99813 added 
&gt; +            const IntPoint anchor = sourceRect.location();
&gt; to TiledLayerChromium.cpp, but that variable is then unused, triggering a build error on gcc 4.6.

Sorry about that. Here&apos;s a fix: https://bugs.webkit.org/show_bug.cgi?id=72199</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503506</commentid>
    <comment_count>33</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-15 19:01:34 -0800</bug_when>
    <thetext>Reverted in http://trac.webkit.org/changeset/100392 due to http://code.google.com/p/chromium/issues/detail?id=104014</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505069</commentid>
    <comment_count>34</comment_count>
      <attachid>115648</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-17 12:05:34 -0800</bug_when>
    <thetext>Created attachment 115648
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505344</commentid>
    <comment_count>35</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-17 16:31:08 -0800</bug_when>
    <thetext>*** Bug 72333 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506592</commentid>
    <comment_count>36</comment_count>
      <attachid>116000</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-20 14:46:10 -0800</bug_when>
    <thetext>Created attachment 116000
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507268</commentid>
    <comment_count>37</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-21 15:18:26 -0800</bug_when>
    <thetext>Attachment 114419 landed before but was reverted because of this issue: https://bugs.webkit.org/show_bug.cgi?id=72630

the changes in the new patch compared to the patch that landed before are mostly from rebaseing onto trunk. Here are the interesting parts of the diff between the patches:

diff --git a/Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp b/Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp
@@ -1348,9 +1375,19 @@
  };
  
  TiledLayerChromium::TiledLayerChromium(CCLayerDelegate* delegate)
-@@ -167,17 +170,12 @@ void TiledLayerChromium::updateCompositorResources(GraphicsContext3D* context, C
-             else if (!tile-&gt;dirty())
-                 continue;
+@@ -173,22 +176,19 @@ void TiledLayerChromium::updateCompositorResources(GraphicsContext3D* context, C
+     for (int j = top; j &lt;= bottom; ++j) {
+         for (int i = left; i &lt;= right; ++i) {
+             UpdatableTile* tile = tileAt(i, j);
++
++            // Required tiles are created in prepareToUpdate(). A tile should
++            // never be removed between the call to prepareToUpdate() and the
++            // call to updateCompositorResources().
+             if (!tile)
+-                tile = createTile(i, j);
+-            else if (!tile-&gt;dirty())
+-                continue;
++                CRASH();
  
 -            // Calculate page-space rectangle to copy from.
 -            IntRect sourceRect = m_tiler-&gt;tileContentRect(tile);

We should never have to create tiles here and even if we would, things would break.

@@ -1381,11 +1418,12 @@
              GLC(context, context-&gt;texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MAG_FILTER, filter));
  
 -            updater.append(tile-&gt;texture(), textureUpdater(), sourceRect, destRect);
+-            tile-&gt;clearDirty();
 +            updater.append(tile-&gt;texture(), sourceRect, destRect);
-             tile-&gt;clearDirty();
          }
      }

prepareToUpdate is a better place to call clear dirty.


@@ -1420,7 +1458,20 @@
          }
      }
  }
-@@ -346,10 +344,10 @@ void TiledLayerChromium::prepareToUpdate(const IntRect&amp; contentRect)
+@@ -334,6 +333,12 @@ void TiledLayerChromium::prepareToUpdate(const IntRect&amp; contentRect)
+ 
+     m_skipsDraw = false;
+ 
++    // Reset m_updateRect for all tiles.
++    for (CCLayerTilingData::TileMap::const_iterator iter = m_tiler-&gt;tiles().begin(); iter != m_tiler-&gt;tiles().end(); ++iter) {
++        UpdatableTile* tile = static_cast&lt;UpdatableTile*&gt;(iter-&gt;second.get());
++        tile-&gt;m_updateRect = IntRect();
++    }
++
+     if (contentRect.isEmpty()) {
+         m_requestedUpdateRect = IntRect();
+         return;
+@@ -357,10 +362,10 @@ void TiledLayerChromium::prepareToUpdate(const IntRect&amp; contentRect)
              if (!tile)
                  tile = createTile(i, j);
  
Reset m_updateRect before starting a new update.


@@ -1433,28 +1484,33 @@
                  m_skipsDraw = true;
                  cleanupResources();
                  return;
-@@ -374,6 +372,31 @@ void TiledLayerChromium::prepareToUpdate(const IntRect&amp; contentRect)
+@@ -385,6 +390,36 @@ void TiledLayerChromium::prepareToUpdate(const IntRect&amp; contentRect)
      // so we grab a local reference here to hold the updater alive until the paint completes.
      RefPtr&lt;LayerTextureUpdater&gt; protector(textureUpdater());
-     textureUpdater()-&gt;prepareToUpdate(m_paintRect, m_tiler-&gt;tileSize(), m_tiler-&gt;hasBorderTexels());
-+
+     textureUpdater()-&gt;prepareToUpdate(m_paintRect, m_tiler-&gt;tileSize(), m_tiler-&gt;hasBorderTexels(), contentsScale());
 +    m_tiler-&gt;contentRectToTileIndices(m_requestedUpdateRect, left, top, right, bottom);
 +    for (int j = top; j &lt;= bottom; ++j) {
 +        for (int i = left; i &lt;= right; ++i) {
 +            UpdatableTile* tile = tileAt(i, j);
++
++            // Tiles are created before prepareToUpdate() is called.
 +            if (!tile)
-+                tile = createTile(i, j);
-+            else if (!tile-&gt;dirty())
++                CRASH();
++
++            if (!tile-&gt;dirty())
 +                continue;
 +
 +            // Calculate content-space rectangle to copy from.
 +            IntRect sourceRect = m_tiler-&gt;tileContentRect(tile);
-+            const IntPoint anchor = sourceRect.location();
 +            sourceRect.intersect(m_tiler-&gt;layerRectToContentRect(tile-&gt;m_dirtyLayerRect));
 +            // Paint rect not guaranteed to line up on tile boundaries, so
 +            // make sure that sourceRect doesn&apos;t extend outside of it.
 +            sourceRect.intersect(m_paintRect);
 +
++            // updateCompositorResources() uses m_updateRect to determine
++            // the tiles to update so we can clear the dirty rectangle here.
++            tile-&gt;clearDirty();
++
 +            tile-&gt;m_updateRect = sourceRect;
 +            if (sourceRect.isEmpty())
 +                continue;

All required tiles are created before prepareToUpdate is called. Remove unused anchor variable (https://bugs.webkit.org/show_bug.cgi?id=72199). Clear dirty rectangle here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507864</commentid>
    <comment_count>38</comment_count>
      <attachid>116291</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-22 16:45:54 -0800</bug_when>
    <thetext>Created attachment 116291
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507865</commentid>
    <comment_count>39</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-22 16:48:02 -0800</bug_when>
    <thetext>Latest patch just removes unused ref counting support from the LayerTextureUpdater::Texture class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510973</commentid>
    <comment_count>40</comment_count>
      <attachid>117014</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-29 11:59:31 -0800</bug_when>
    <thetext>Created attachment 117014
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511427</commentid>
    <comment_count>41</comment_count>
      <attachid>117014</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-29 23:35:06 -0800</bug_when>
    <thetext>Comment on attachment 117014
Patch

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

New failing tests:
svg/transforms/text-with-pattern-with-svg-transform.svg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512340</commentid>
    <comment_count>42</comment_count>
      <attachid>117014</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-30 18:59:49 -0800</bug_when>
    <thetext>Comment on attachment 117014
Patch

This looks great - R=me.  I&apos;m sorry this took so long to get to, I&apos;ve been swamped.  Flip cq? whenever you&apos;re ready to land this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512420</commentid>
    <comment_count>43</comment_count>
      <attachid>117014</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-30 21:17:20 -0800</bug_when>
    <thetext>Comment on attachment 117014
Patch

Clearing flags on attachment: 117014

Committed r101600: &lt;http://trac.webkit.org/changeset/101600&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512421</commentid>
    <comment_count>44</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-30 21:17:27 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113362</attachid>
            <date>2011-11-02 13:26:11 -0700</date>
            <delta_ts>2011-11-02 15:43:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71388-20111102162609.patch</filename>
            <type>text/plain</type>
            <size>36310</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg3MjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzNGM0ODQ0MDExNWZiNTFk
MWNhZDM1YmQwODYyY2ExYTQxMzFlMTZhLi42Yzc1MzI0OGMxNTZjYzY3MDE0YjRhNmE2OGMxYzI1
YTllNjczYTEwIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAKKzIwMTEtMTEtMDIgIERhdmlk
IFJldmVtYW4gIDxyZXZlbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEFk
ZCBzdXBwb3J0IGZvciBwYWludGluZyBpbnRvIGFuIFNrUGljdHVyZSBhbmQgdGhlbiByYXN0ZXJp
emluZyBpbnRvIHRpbGUtc2l6ZWQgY2h1bmtzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEzODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgVXBkYXRhYmxlVGV4dHVyZSBjbGFzcywgd2hpY2ggYWxs
b3dzIHRleHR1cmUgdXBkYXRlciB0bworICAgICAgICBhbGxvY2F0ZSB0aWxlIHNwZWNpZmljIHJl
c291cmNlcyBhbmQgcGFpbnQgdGlsZXMgc2VwYXJhdGVseS4KKyAgICAgICAgQWRkIExheWVyVGV4
dHVyZVVwZGF0ZXJCaXRtYXAgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRleHR1cmUKKyAgICAgICAg
dXBkYXRlcyBieSByZWNvcmRpbmcgZHJhd2luZyBjb21tYW5kcyB0byBhIFNrUGljdHVyZSBhbmQK
KyAgICAgICAgcGxheWluZyB0aGVtIGJhY2sgdG8gZWFjaCB0aWxlIGluZGl2aWR1YWxseS4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMuIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVw
ZGF0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVRleHR1cmU6OkltYWdlVGV4dHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVRleHR1cmU6OnRleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VUZXh0dXJlOjpwcmVwYXJlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZVRleHR1cmU6OnRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVRleHR1cmU6OnVwZGF0ZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0YWJsZVRl
eHR1cmU6On5VcGRhdGFibGVUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1RleHR1cmU6OkNhbnZhc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
ZXh0dXJlVXBkYXRlclBsYXRmb3JtQ2FudmFzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJUZXh0dXJlVXBkYXRlclBsYXRmb3JtQ2FudmFzOjpMYXllclRleHR1cmVVcGRhdGVyUGxh
dGZvcm1DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlclBsYXRm
b3JtQ2FudmFzOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVy
ZVVwZGF0ZXJQbGF0Zm9ybUNhbnZhczo6c2FtcGxlZFRleGVsRm9ybWF0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJQbGF0Zm9ybUNhbnZhczo6cHJlcGFyZVRvVXBkYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJQbGF0Zm9ybUNhbnZhczo6
dXBkYXRlVGV4dHVyZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DYW52YXNUZXh0
dXJlOjpQbGF0Zm9ybUNhbnZhc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1D
YW52YXNUZXh0dXJlOjp1cGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVy
ZVVwZGF0ZXJTa1BpY3R1cmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6ZHJhd1BpY3R1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OkxheWVyVGV4dHVyZVVw
ZGF0ZXJCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1h
cDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVy
Qml0bWFwOjpzYW1wbGVkVGV4ZWxGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0
dXJlVXBkYXRlckJpdG1hcDo6cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnByZXBhcmVUZXh0dXJlUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjp1cGRhdGVUZXh0dXJlUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjpCaXRtYXBUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcFRleHR1cmU6OnByZXBhcmVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFRleHR1cmU6OnVwZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0
dXJlVXBkYXRlckZyYW1lQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
ZXh0dXJlVXBkYXRlckZyYW1lQnVmZmVyOjpMYXllclRleHR1cmVVcGRhdGVyRnJhbWVCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlckZyYW1lQnVmZmVyOjp+TGF5
ZXJUZXh0dXJlVXBkYXRlckZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4
dHVyZVVwZGF0ZXJGcmFtZUJ1ZmZlcjo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRleHR1cmVVcGRhdGVyRnJhbWVCdWZmZXI6OnNhbXBsZWRUZXhlbEZvcm1hdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyRnJhbWVCdWZmZXI6OnVwZGF0ZVRl
eHR1cmVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyVGV4dHVyZTo6RnJhbWVC
dWZmZXJUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyVGV4dHVyZTo6dXBk
YXRlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0
dXJlVXBkYXRlckNhbnZhcy5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzVGV4dHVyZTo6dGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNhbnZhc1RleHR1cmU6OnByZXBhcmVS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2FudmFzVGV4dHVyZTo6dGV4dHVyZVVw
ZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6b3Jp
ZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6dGV4dHVyZVVwZGF0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlckZyYW1lQnVmZmVyOjpv
cmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyRnJhbWVC
dWZmZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclRl
eHR1cmU6OnByZXBhcmVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyVGV4dHVy
ZTo6dGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVcGRhdGFibGVUaWxl
OjpVcGRhdGFibGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0YWJsZVRpbGU6OnRleHR1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRhYmxlVGlsZTo6bWFuYWdlZFRleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3Bl
cnRpZXNUbyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZVRp
bGUpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VGlsZVRl
eHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRv
VXBkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1
cmVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXI6OmFwcGVu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaDoKKwog
MjAxMS0xMC0yOCAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5jb20+CiAKICAgICAg
ICAgUmVzZXQgbGluZSBudW1iZXJzIGZvciBzY3JpcHRzIGdlbmVyYXRlZCB3aXRoIGRvY3VtZW50
LndyaXRlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4IGNhOGIzYmQ3
NjFmMDgxNWU0N2I2Y2ZiMDQ5MWExZDk3Mjg3OWYwNGMuLmQ4MGIxNmVmMzhmMTI5MzI0ZmNkNTVk
Y2I4N2RlMjJkZTMxYTQxYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAK
QEAgLTEyMiwxMiArMTIyLDEyIEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZVRl
eHR1cmVVcGRhdGVyKGNvbnN0IENDTGF5ZXJUcmVlSG9zdCogaG9zdCkKIHsKICNpZiBVU0UoU0tJ
QSkKICAgICBpZiAoaG9zdC0+c2V0dGluZ3MoKS5hY2NlbGVyYXRlUGFpbnRpbmcpIHsKLSAgICAg
ICAgbV90ZXh0dXJlVXBkYXRlciA9IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OmNyZWF0
ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUobV9kZWxlZ2F0ZSkpOworICAgICAgICBtX3Rl
eHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlckZyYW1lQnVmZmVyOjpjcmVhdGUoQ29u
dGVudExheWVyUGFpbnRlcjo6Y3JlYXRlKG1fZGVsZWdhdGUpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICNlbmRpZiAvLyBVU0UoU0tJQSkKIAotICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBMYXll
clRleHR1cmVVcGRhdGVyQml0bWFwOjpjcmVhdGUoQ29udGVudExheWVyUGFpbnRlcjo6Y3JlYXRl
KG1fZGVsZWdhdGUpLCBob3N0LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdNYXBT
dWIpOworICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBMYXllclRleHR1cmVVcGRhdGVyUGxhdGZvcm1D
YW52YXM6OmNyZWF0ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUobV9kZWxlZ2F0ZSksIGhv
c3QtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ01hcFN1Yik7CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDM2MzM2Mjk2N2FjY2RlYmMyNTU5ZTI5
YzI0ZDQzYzFjODg4ODAzMTcuLjJiZWYxZWFkZGVkMzYzMmI0MGExZDY5MmQzMzFlMTZiZDVjZjU5
ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAtNDQsNiArNDQsMjcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI7
CisKK2NsYXNzIEltYWdlVGV4dHVyZSA6IHB1YmxpYyBVcGRhdGFibGVUZXh0dXJlIHsKK3B1Ymxp
YzoKKyAgICBJbWFnZVRleHR1cmUoSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBk
YXRlciwgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4dHVyZSkKKyAgICAgICAgOiBtX3Rl
eHR1cmUodGV4dHVyZSkKKyAgICAgICAgLCBtX3RleHR1cmVVcGRhdGVyKHRleHR1cmVVcGRhdGVy
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlKCkg
eyByZXR1cm4gbV90ZXh0dXJlLmdldCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVSZWN0
KGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVS
ZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKworcHJpdmF0ZToKKyAgICBJ
bWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgeyByZXR1cm4gbV90ZXh0
dXJlVXBkYXRlcjsgfQorCisgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBtX3RleHR1cmU7Cisg
ICAgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKiBtX3RleHR1cmVVcGRhdGVyOworfTsKKwogY2xh
c3MgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXIg
ewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRl
cj4gY3JlYXRlKGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpCkBAIC01Myw2ICs3NCwxMSBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIH5JbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIoKSB7IH0KIAorICAg
IHZpcnR1YWwgVXBkYXRhYmxlVGV4dHVyZSogY3JlYXRlVGV4dHVyZShUZXh0dXJlTWFuYWdlciog
bWFuYWdlcikKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgSW1hZ2VUZXh0dXJlKHRoaXMsIE1h
bmFnZWRUZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpOworICAgIH0KKwogICAgIHZpcnR1YWwgT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24oKSB7IHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpCb3R0
b21VcE9yaWVudGF0aW9uOyB9CiAKICAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1w
bGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkKQEAgLTEwNyw2ICsxMzMsMTEg
QEAgcHJpdmF0ZToKICAgICBMYXllclRleHR1cmVTdWJJbWFnZSBtX3RleFN1YkltYWdlOwogfTsK
IAordm9pZCBJbWFnZVRleHR1cmU6OnVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit7CisgICAgdGV4dHVyZVVwZGF0ZXIoKS0+dXBk
YXRlVGV4dHVyZVJlY3QoY29udGV4dCwgYWxsb2NhdG9yLCB0ZXh0dXJlKCksIHNvdXJjZVJlY3Qs
IGRlc3RSZWN0KTsKK30KKwogUGFzc1JlZlB0cjxJbWFnZUxheWVyQ2hyb21pdW0+IEltYWdlTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUpCiB7CiAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUxheWVyQ2hyb21pdW0oZGVsZWdhdGUpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVy
ZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyVGV4dHVyZVVwZGF0ZXIuaAppbmRleCAzZDg1OTdlMzllODVkNGNiZjAxNTZkNWNjMTE3OTQ2
Nzk1MzcxMjRmLi4zNmU3ZjQ2NjI2N2RmMzUxNmQ3YWU0ZDU4YjQ0MmY1MjVmZmMxNDU1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRl
eHR1cmVVcGRhdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBAIC0zOSw2ICszOSwxNiBAQCBjbGFzcyBJbnRS
ZWN0OwogY2xhc3MgSW50U2l6ZTsKIGNsYXNzIE1hbmFnZWRUZXh0dXJlOwogY2xhc3MgVGV4dHVy
ZUFsbG9jYXRvcjsKK2NsYXNzIFRleHR1cmVNYW5hZ2VyOworCitjbGFzcyBVcGRhdGFibGVUZXh0
dXJlIDogcHVibGljIFJlZkNvdW50ZWQ8VXBkYXRhYmxlVGV4dHVyZT4geworcHVibGljOgorICAg
IHZpcnR1YWwgflVwZGF0YWJsZVRleHR1cmUoKSB7IH0KKworICAgIHZpcnR1YWwgTWFuYWdlZFRl
eHR1cmUqIHRleHR1cmUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVSZWN0KGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVjdChH
cmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkgPSAwOworfTsKIAogY2xhc3MgTGF5ZXJU
ZXh0dXJlVXBkYXRlciA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVyVGV4dHVyZVVwZGF0ZXI+IHsK
IHB1YmxpYzoKQEAgLTU0LDYgKzY0LDcgQEAgcHVibGljOgogICAgICAgICBTYW1wbGVkVGV4ZWxG
b3JtYXRCR1JBLAogICAgICAgICBTYW1wbGVkVGV4ZWxGb3JtYXRJbnZhbGlkLAogICAgIH07Cisg
ICAgdmlydHVhbCBVcGRhdGFibGVUZXh0dXJlKiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2Vy
KikgPSAwOwogICAgIC8vIFJldHVybnMgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSB0ZXh0dXJlIHVw
bG9hZGVkIGJ5IHRoaXMgaW50ZXJmYWNlLgogICAgIHZpcnR1YWwgT3JpZW50YXRpb24gb3JpZW50
YXRpb24oKSA9IDA7CiAgICAgLy8gUmV0dXJucyB0aGUgZm9ybWF0IG9mIHRoZSB0ZXhlbCB1cGxv
YWRlZCBieSB0aGlzIGludGVyZmFjZS4KQEAgLTYyLDcgKzczLDYgQEAgcHVibGljOgogICAgIC8v
IElmIHRoZSBmb3JtYXQgaXMgVGV4ZWxGb3JtYXRCR1JBLCB2ZWM0LnggaXMgYmx1ZSBhbmQgdmVj
NC56IGlzIHJlZC4KICAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxG
b3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwcmVw
YXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRp
bGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRl
eHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIE1hbmFnZWRU
ZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJl
Y3QpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJD
YW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5jcHAKaW5kZXggYWNiMmNkM2U0NmIzMDEzNGVhZjg4MDVi
NDUzZTVjYWI4ZDU0NWMxYi4uMmE3MWU1MTlhZWQ3ZWI5ZjhhZWY0NzQ3ZWY4NWNkN2U3ZjlmOTJj
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5jcHAKQEAgLTQy
LDYgKzQyLDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVkZSAi
U2tDYW52YXMuaCIKICNpbmNsdWRlICJTa0dwdURldmljZS5oIgorI2luY2x1ZGUgInNraWEvZXh0
L3BsYXRmb3JtX2NhbnZhcy5oIgogI2VuZGlmIC8vIFVTRShTS0lBKQogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC0xMjEsMjUgKzEyMiwzNSBAQCB2b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52
YXM6OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbgogICAg
IG1fY29udGVudFJlY3QgPSBjb250ZW50UmVjdDsKIH0KIAotUGFzc1JlZlB0cjxMYXllclRleHR1
cmVVcGRhdGVyQml0bWFwPiBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpjcmVhdGUoUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlciwgYm9vbCB1c2VNYXBUZXhTdWJJbWFn
ZSkKK0NhbnZhc1RleHR1cmU6OkNhbnZhc1RleHR1cmUoUGFzc093blB0cjxNYW5hZ2VkVGV4dHVy
ZT4gdGV4dHVyZSkKKyAgICA6IG1fdGV4dHVyZSh0ZXh0dXJlKQogewotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcChwYWludGVyLCB1c2VNYXBUZXhTdWJJ
bWFnZSkpOwogfQogCi1MYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpMYXllclRleHR1cmVVcGRh
dGVyQml0bWFwKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIsIGJvb2wg
dXNlTWFwVGV4U3ViSW1hZ2UpCitQYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXJQbGF0Zm9y
bUNhbnZhcz4gTGF5ZXJUZXh0dXJlVXBkYXRlclBsYXRmb3JtQ2FudmFzOjpjcmVhdGUoUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlciwgYm9vbCB1c2VNYXBUZXhTdWJJbWFn
ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVyVGV4dHVyZVVwZGF0ZXJQbGF0Zm9y
bUNhbnZhcyhwYWludGVyLCB1c2VNYXBUZXhTdWJJbWFnZSkpOworfQorCitMYXllclRleHR1cmVV
cGRhdGVyUGxhdGZvcm1DYW52YXM6OkxheWVyVGV4dHVyZVVwZGF0ZXJQbGF0Zm9ybUNhbnZhcyhQ
YXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyLCBib29sIHVzZU1hcFRleFN1
YkltYWdlKQogICAgIDogTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyhwYWludGVyKQogICAgICwg
bV90ZXhTdWJJbWFnZSh1c2VNYXBUZXhTdWJJbWFnZSkKIHsKIH0KIAotTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnNhbXBs
ZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KQorVXBkYXRhYmxlVGV4dHVyZSog
TGF5ZXJUZXh0dXJlVXBkYXRlclBsYXRmb3JtQ2FudmFzOjpjcmVhdGVUZXh0dXJlKFRleHR1cmVN
YW5hZ2VyKiBtYW5hZ2VyKQoreworICAgIHJldHVybiBuZXcgUGxhdGZvcm1DYW52YXNUZXh0dXJl
KHRoaXMsIE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpOworfQorCitMYXllclRleHR1
cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXQgTGF5ZXJUZXh0dXJlVXBkYXRlclBsYXRmb3Jt
Q2FudmFzOjpzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkKIHsKICAg
ICAvLyBUaGUgY29tcG9uZW50IG9yZGVyIG1heSBiZSBiZ3JhIGlmIHdlIHVwbG9hZGVkIGJncmEg
cGl4ZWxzIHRvIHJnYmEgdGV4dHVyZXMuCiAgICAgcmV0dXJuIFBsYXRmb3JtQ29sb3I6OnNhbWVD
b21wb25lbnRPcmRlcih0ZXh0dXJlRm9ybWF0KSA/CiAgICAgICAgICAgICBMYXllclRleHR1cmVV
cGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBIDogTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2Ft
cGxlZFRleGVsRm9ybWF0QkdSQTsKIH0KIAotdm9pZCBMYXllclRleHR1cmVVcGRhdGVyQml0bWFw
OjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNp
emUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKQordm9pZCBMYXllclRleHR1cmVVcGRhdGVy
UGxhdGZvcm1DYW52YXM6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpCiB7CiAgICAgbV90
ZXhTdWJJbWFnZS5zZXRTdWJJbWFnZVNpemUodGlsZVNpemUpOwogCkBAIC0xNTMsNyArMTY0LDcg
QEAgdm9pZCBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpwcmVwYXJlVG9VcGRhdGUoY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QsIGNvbnMKICAgICBwYWludENvbnRlbnRzKCpjYW52YXNQYWlu
dGVyLmNvbnRleHQoKSwgY29udGVudFJlY3QpOwogfQogCi12b2lkIExheWVyVGV4dHVyZVVwZGF0
ZXJCaXRtYXA6OnVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBU
ZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgTGF5
ZXJUZXh0dXJlVXBkYXRlclBsYXRmb3JtQ2FudmFzOjp1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBNYW5hZ2Vk
VGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVj
dCYgZGVzdFJlY3QpCiB7CiAgICAgUGxhdGZvcm1DYW52YXM6OkF1dG9Mb2NrZXIgbG9ja2VyKCZt
X2NhbnZhcyk7CiAKQEAgLTE2MSwyNSArMTcyLDIxIEBAIHZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRl
ckJpdG1hcDo6dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRl
CiAgICAgbV90ZXhTdWJJbWFnZS51cGxvYWQobG9ja2VyLnBpeGVscygpLCBjb250ZW50UmVjdCgp
LCBzb3VyY2VSZWN0LCBkZXN0UmVjdCwgdGV4dHVyZS0+Zm9ybWF0KCksIGNvbnRleHQpOwogfQog
Ci0jaWYgVVNFKFNLSUEpCi1QYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU+
IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OmNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFp
bnRlckNocm9taXVtPiBwYWludGVyKQorUGxhdGZvcm1DYW52YXNUZXh0dXJlOjpQbGF0Zm9ybUNh
bnZhc1RleHR1cmUoTGF5ZXJUZXh0dXJlVXBkYXRlclBsYXRmb3JtQ2FudmFzKiB0ZXh0dXJlVXBk
YXRlciwgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4dHVyZSkKKyAgICA6IENhbnZhc1Rl
eHR1cmUodGV4dHVyZSkKKyAgICAsIG1fdGV4dHVyZVVwZGF0ZXIodGV4dHVyZVVwZGF0ZXIpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKHBh
aW50ZXIpKTsKIH0KIAotTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6TGF5ZXJUZXh0dXJl
VXBkYXRlclNrUGljdHVyZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVy
KQotICAgIDogTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyhwYWludGVyKQotewotfQotCi1MYXll
clRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjp+TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZSgp
Cit2b2lkIFBsYXRmb3JtQ2FudmFzVGV4dHVyZTo6dXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKIHsKKyAgICB0ZXh0dXJlVXBkYXRl
cigpLT51cGRhdGVUZXh0dXJlUmVjdChjb250ZXh0LCBhbGxvY2F0b3IsIHRleHR1cmUoKSwgc291
cmNlUmVjdCwgZGVzdFJlY3QpOwogfQogCi1MYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4
ZWxGb3JtYXQgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6c2FtcGxlZFRleGVsRm9ybWF0
KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpCisjaWYgVVNFKFNLSUEpCitMYXllclRleHR1cmVVcGRh
dGVyU2tQaWN0dXJlOjpMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKFBhc3NPd25QdHI8TGF5
ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIpCisgICAgOiBMYXllclRleHR1cmVVcGRhdGVyQ2Fu
dmFzKHBhaW50ZXIpCiB7Ci0gICAgLy8gSGVyZSB3ZSBkaXJlY3RseSByZW5kZXIgdG8gdGhlIHRl
eHR1cmUsIHNvIHRoZSBjb21wb25lbnQgb3JkZXIgaXMgYWx3YXlzIGNvcnJlY3QuCi0gICAgcmV0
dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdFJHQkE7CiB9CiAKIHZv
aWQgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRl
eGVscykKQEAgLTE5MSw3ICsxOTgsMTAzIEBAIHZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGlj
dHVyZTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjCiAgICAg
bV9waWN0dXJlLmVuZFJlY29yZGluZygpOwogfQogCi12b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJT
a1BpY3R1cmU6OnVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBU
ZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgTGF5
ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6ZHJhd1BpY3R1cmUoU2tDYW52YXMqIGNhbnZhcykK
K3sKKyAgICBUUkFDRV9FVkVOVCgiTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6ZHJhd1Bp
Y3R1cmUiLCB0aGlzLCAwKTsKKyAgICBjYW52YXMtPmRyYXdQaWN0dXJlKG1fcGljdHVyZSk7Cit9
CisKK1Bhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcD4gTGF5ZXJUZXh0dXJlVXBk
YXRlckJpdG1hcDo6Y3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50
ZXIsIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBM
YXllclRleHR1cmVVcGRhdGVyQml0bWFwKHBhaW50ZXIsIHVzZU1hcFRleFN1YkltYWdlKSk7Cit9
CisKK0xheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OkxheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXAo
UGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlciwgYm9vbCB1c2VNYXBUZXhT
dWJJbWFnZSkKKyAgICA6IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUocGFpbnRlcikKKyAg
ICAsIG1fdGV4U3ViSW1hZ2UodXNlTWFwVGV4U3ViSW1hZ2UpCit7Cit9CisKK1VwZGF0YWJsZVRl
eHR1cmUqIExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNyZWF0ZVRleHR1cmUoVGV4dHVyZU1h
bmFnZXIqIG1hbmFnZXIpCit7CisgICAgcmV0dXJuIG5ldyBCaXRtYXBUZXh0dXJlKHRoaXMsIE1h
bmFnZWRUZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpOworfQorCitMYXllclRleHR1cmVVcGRhdGVy
OjpTYW1wbGVkVGV4ZWxGb3JtYXQgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6c2FtcGxlZFRl
eGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpCit7CisgICAgLy8gVGhlIGNvbXBvbmVu
dCBvcmRlciBtYXkgYmUgYmdyYSBpZiB3ZSB1cGxvYWRlZCBiZ3JhIHBpeGVscyB0byByZ2JhIHRl
eHR1cmVzLgorICAgIHJldHVybiBQbGF0Zm9ybUNvbG9yOjpzYW1lQ29tcG9uZW50T3JkZXIodGV4
dHVyZUZvcm1hdCkgPworICAgICAgICAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRl
eGVsRm9ybWF0UkdCQSA6IExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdEJH
UkE7Cit9CisKK3ZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6cHJlcGFyZVRvVXBkYXRl
KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50
IGJvcmRlclRleGVscykKK3sKKyAgICBtX3RleFN1YkltYWdlLnNldFN1YkltYWdlU2l6ZSh0aWxl
U2l6ZSk7CisgICAgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6cHJlcGFyZVRvVXBkYXRl
KGNvbnRlbnRSZWN0LCB0aWxlU2l6ZSwgYm9yZGVyVGV4ZWxzKTsKK30KKwordm9pZCBMYXllclRl
eHR1cmVVcGRhdGVyQml0bWFwOjpwcmVwYXJlVGV4dHVyZVJlY3QoU2tDYW52YXMqIGNhbnZhcywg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkKK3sKKyAgICAvLyBUcmFuc2xhdGUgdGhlIG9yaWdp
biBvZiBjb250ZW50UmVjdCB0byB0aGF0IG9mIHNvdXJjZVJlY3QuCisgICAgY2FudmFzLT50cmFu
c2xhdGUoY29udGVudFJlY3QoKS54KCkgLSBzb3VyY2VSZWN0LngoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICBjb250ZW50UmVjdCgpLnkoKSAtIHNvdXJjZVJlY3QueSgpKTsKKyAgICBkcmF3UGlj
dHVyZShjYW52YXMpOworfQorCit2b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnVwZGF0
ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9y
KiBhbGxvY2F0b3IsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCwgY29uc3QgdWludDhfdCogcGl4ZWxzKQor
eworICAgIHRleHR1cmUtPmJpbmRUZXh0dXJlKGNvbnRleHQsIGFsbG9jYXRvcik7CisgICAgbV90
ZXhTdWJJbWFnZS51cGxvYWQocGl4ZWxzLCBkZXN0UmVjdCwgZGVzdFJlY3QsIGRlc3RSZWN0LCB0
ZXh0dXJlLT5mb3JtYXQoKSwgY29udGV4dCk7Cit9CisKK0JpdG1hcFRleHR1cmU6OkJpdG1hcFRl
eHR1cmUoTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcCogdGV4dHVyZVVwZGF0ZXIsIFBhc3NPd25Q
dHI8TWFuYWdlZFRleHR1cmU+IHRleHR1cmUpCisgICAgOiBDYW52YXNUZXh0dXJlKHRleHR1cmUp
CisgICAgLCBtX2J1ZmZlclNpemUoMCkKKyAgICAsIG1fdGV4dHVyZVVwZGF0ZXIodGV4dHVyZVVw
ZGF0ZXIpCit7Cit9CisKK3ZvaWQgQml0bWFwVGV4dHVyZTo6cHJlcGFyZVJlY3QoY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCkKK3sKKyAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IHNvdXJjZVJlY3Qu
d2lkdGgoKSAqIHNvdXJjZVJlY3QuaGVpZ2h0KCkgKiA0OworICAgIGlmIChtX2J1ZmZlclNpemUg
IT0gYnVmZmVyU2l6ZSkKKyAgICAgICAgbV9waXhlbERhdGEgPSBhZG9wdEFycmF5UHRyKG5ldyB1
aW50OF90W2J1ZmZlclNpemVdKTsKKworICAgIE93blB0cjxTa0NhbnZhcz4gY2FudmFzID0gYWRv
cHRQdHIobmV3IHNraWE6OlBsYXRmb3JtQ2FudmFzKHNvdXJjZVJlY3Qud2lkdGgoKSwgc291cmNl
UmVjdC5oZWlnaHQoKSwgZmFsc2UsIG1fcGl4ZWxEYXRhLmdldCgpKSk7CisgICAgdGV4dHVyZVVw
ZGF0ZXIoKS0+cHJlcGFyZVRleHR1cmVSZWN0KGNhbnZhcy5nZXQoKSwgc291cmNlUmVjdCk7Cit9
CisKK3ZvaWQgQml0bWFwVGV4dHVyZTo6dXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3sKKyAgICB0ZXh0dXJlVXBkYXRlcigpLT51
cGRhdGVUZXh0dXJlUmVjdChjb250ZXh0LCBhbGxvY2F0b3IsIHRleHR1cmUoKSwgc291cmNlUmVj
dCwgZGVzdFJlY3QsIG1fcGl4ZWxEYXRhLmdldCgpKTsKK30KKworUGFzc1JlZlB0cjxMYXllclRl
eHR1cmVVcGRhdGVyRnJhbWVCdWZmZXI+IExheWVyVGV4dHVyZVVwZGF0ZXJGcmFtZUJ1ZmZlcjo6
Y3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBMYXllclRleHR1cmVVcGRhdGVyRnJhbWVCdWZmZXIocGFpbnRl
cikpOworfQorCitMYXllclRleHR1cmVVcGRhdGVyRnJhbWVCdWZmZXI6OkxheWVyVGV4dHVyZVVw
ZGF0ZXJGcmFtZUJ1ZmZlcihQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVy
KQorICAgIDogTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZShwYWludGVyKQoreworfQorCitM
YXllclRleHR1cmVVcGRhdGVyRnJhbWVCdWZmZXI6On5MYXllclRleHR1cmVVcGRhdGVyRnJhbWVC
dWZmZXIoKQoreworfQorCitVcGRhdGFibGVUZXh0dXJlKiBMYXllclRleHR1cmVVcGRhdGVyRnJh
bWVCdWZmZXI6OmNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpCit7CisgICAg
cmV0dXJuIG5ldyBGcmFtZUJ1ZmZlclRleHR1cmUodGhpcywgTWFuYWdlZFRleHR1cmU6OmNyZWF0
ZShtYW5hZ2VyKSk7Cit9CisKK0xheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1h
dCBMYXllclRleHR1cmVVcGRhdGVyRnJhbWVCdWZmZXI6OnNhbXBsZWRUZXhlbEZvcm1hdChHQzNE
ZW51bSB0ZXh0dXJlRm9ybWF0KQoreworICAgIC8vIEhlcmUgd2UgZGlyZWN0bHkgcmVuZGVyIHRv
IHRoZSB0ZXh0dXJlLCBzbyB0aGUgY29tcG9uZW50IG9yZGVyIGlzIGFsd2F5cyBjb3JyZWN0Lgor
ICAgIHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBOwor
fQorCit2b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJGcmFtZUJ1ZmZlcjo6dXBkYXRlVGV4dHVyZVJl
Y3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRv
ciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFJlY3QmIGRlc3RSZWN0KQogewogICAgIC8vIE1ha2Ugc3VyZSBTS0lBIHVzZXMgdGhl
IGNvcnJlY3QgR0wgY29udGV4dC4KICAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
QEAgLTIxMiw2ICszMTUsMTcgQEAgdm9pZCBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjp1
cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwKICAgICAvLyBGbHVz
aCBTS0lBIGNvbnRleHQgc28gdGhhdCBhbGwgdGhlIHJlbmRlcmVkIHN0dWZmIGFwcGVhcnMgb24g
dGhlIHRleHR1cmUuCiAgICAgY29udGV4dC0+Z3JDb250ZXh0KCktPmZsdXNoKCk7CiB9CisKK0Zy
YW1lQnVmZmVyVGV4dHVyZTo6RnJhbWVCdWZmZXJUZXh0dXJlKExheWVyVGV4dHVyZVVwZGF0ZXJG
cmFtZUJ1ZmZlciogdGV4dHVyZVVwZGF0ZXIsIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IHRl
eHR1cmUpCisgICAgOiBDYW52YXNUZXh0dXJlKHRleHR1cmUpCisgICAgLCBtX3RleHR1cmVVcGRh
dGVyKHRleHR1cmVVcGRhdGVyKQoreworfQorCit2b2lkIEZyYW1lQnVmZmVyVGV4dHVyZTo6dXBk
YXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxs
b2NhdG9yLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVj
dCkKK3sKKyAgICB0ZXh0dXJlVXBkYXRlcigpLT51cGRhdGVUZXh0dXJlUmVjdChjb250ZXh0LCBh
bGxvY2F0b3IsIHRleHR1cmUoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QpOworfQogI2VuZGlmIC8v
IFVTRShTS0lBKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2Fu
dmFzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRl
eHR1cmVVcGRhdGVyQ2FudmFzLmgKaW5kZXggZmZjNzFjNjhmZjdjN2RjOTgyMWNlOWFjOGExYjQw
ODhhYTU4ODM4OS4uODMyMmMxMWI4YTZmODViOTM1ZGY0NjlmZmI5ZjhmMWYyNTU5ZmViYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJU
ZXh0dXJlVXBkYXRlckNhbnZhcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaApAQCAtNjMsMzggKzYzLDEy
MCBAQCBwcml2YXRlOgogICAgIE93blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gbV9wYWludGVy
OwogfTsKIAotLy8gQSBMYXllclRleHR1cmVVcGRhdGVyIHdpdGggYW4gaW50ZXJuYWwgYml0bWFw
IGNhbnZhcy4KLWNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXAgOiBwdWJsaWMgTGF5ZXJU
ZXh0dXJlVXBkYXRlckNhbnZhcyB7CitjbGFzcyBDYW52YXNUZXh0dXJlIDogcHVibGljIFVwZGF0
YWJsZVRleHR1cmUgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyVGV4dHVy
ZVVwZGF0ZXJCaXRtYXA+IGNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiwg
Ym9vbCB1c2VNYXBUZXhTdWJJbWFnZSk7CisgICAgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUoKSB7
IHJldHVybiBtX3RleHR1cmUuZ2V0KCk7IH0KKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IENh
bnZhc1RleHR1cmUoUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4pOworCitwcml2YXRlOgorICAg
IE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV90ZXh0dXJlOworfTsKKworLy8gQSBMYXllclRleHR1
cmVVcGRhdGVyIHdpdGggYW4gaW50ZXJuYWwgcGxhdGZvcm0gY2FudmFzLgorY2xhc3MgTGF5ZXJU
ZXh0dXJlVXBkYXRlclBsYXRmb3JtQ2FudmFzIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXJD
YW52YXMgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0
ZXJQbGF0Zm9ybUNhbnZhcz4gY3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+
LCBib29sIHVzZU1hcFRleFN1YkltYWdlKTsKIAorICAgIHZpcnR1YWwgVXBkYXRhYmxlVGV4dHVy
ZSogY3JlYXRlVGV4dHVyZShUZXh0dXJlTWFuYWdlciopOwogICAgIHZpcnR1YWwgT3JpZW50YXRp
b24gb3JpZW50YXRpb24oKSB7IHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpCb3R0b21VcE9y
aWVudGF0aW9uOyB9CiAgICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVs
Rm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpOwogICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJl
VG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVT
aXplLCBpbnQgYm9yZGVyVGV4ZWxzKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZVJl
Y3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1cmUq
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7Cisg
ICAgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxv
Y2F0b3IqLCBNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0
IEludFJlY3QmIGRlc3RSZWN0KTsKIAogcHJpdmF0ZToKLSAgICBMYXllclRleHR1cmVVcGRhdGVy
Qml0bWFwKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+LCBib29sIHVzZU1hcFRleFN1
YkltYWdlKTsKKyAgICBMYXllclRleHR1cmVVcGRhdGVyUGxhdGZvcm1DYW52YXMoUGFzc093blB0
cjxMYXllclBhaW50ZXJDaHJvbWl1bT4sIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpOworCiAgICAg
UGxhdGZvcm1DYW52YXMgbV9jYW52YXM7CiAgICAgTGF5ZXJUZXh0dXJlU3ViSW1hZ2UgbV90ZXhT
dWJJbWFnZTsKIH07CiAKK2NsYXNzIFBsYXRmb3JtQ2FudmFzVGV4dHVyZSA6IHB1YmxpYyBDYW52
YXNUZXh0dXJlIHsKK3B1YmxpYzoKKyAgICBQbGF0Zm9ybUNhbnZhc1RleHR1cmUoTGF5ZXJUZXh0
dXJlVXBkYXRlclBsYXRmb3JtQ2FudmFzKiwgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4pOwor
CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVSZWN0KGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4
dHVyZUFsbG9jYXRvciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3Qm
IGRlc3RSZWN0KTsgCisKK3ByaXZhdGU6CisgICAgTGF5ZXJUZXh0dXJlVXBkYXRlclBsYXRmb3Jt
Q2FudmFzKiB0ZXh0dXJlVXBkYXRlcigpIHsgcmV0dXJuIG1fdGV4dHVyZVVwZGF0ZXI7IH0KKwor
ICAgIExheWVyVGV4dHVyZVVwZGF0ZXJQbGF0Zm9ybUNhbnZhcyogbV90ZXh0dXJlVXBkYXRlcjsK
K307CisKICNpZiBVU0UoU0tJQSkKIGNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUg
OiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZT4gY3JlYXRlKFBhc3NPd25Q
dHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+KTsKLSAgICB2aXJ0dWFsIH5MYXllclRleHR1cmVVcGRh
dGVyU2tQaWN0dXJlKCk7CisgICAgZXhwbGljaXQgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVy
ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPik7CiAKLSAgICB2aXJ0dWFsIE9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VG9wRG93
bk9yaWVudGF0aW9uOyB9CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJU
ZXhlbHMpOworICAgIHZvaWQgZHJhd1BpY3R1cmUoU2tDYW52YXMqKTsKKworcHJvdGVjdGVkOgor
ICAgIFNrUGljdHVyZSBtX3BpY3R1cmU7IC8vIFJlY29yZGluZyBjYW52YXMuCit9OworCitjbGFz
cyBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXJT
a1BpY3R1cmUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyVGV4dHVyZVVw
ZGF0ZXJCaXRtYXA+IGNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiwgYm9v
bCB1c2VNYXBUZXhTdWJJbWFnZSk7CisKKyAgICB2aXJ0dWFsIFVwZGF0YWJsZVRleHR1cmUqIGNy
ZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKTsKKyAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9y
aWVudGF0aW9uKCkgeyByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Qm90dG9tVXBPcmllbnRh
dGlvbjsgfQogICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1h
dChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBk
YXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwg
aW50IGJvcmRlclRleGVscyk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdy
YXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIE1hbmFnZWRUZXh0dXJlKiwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgIHZv
aWQgcHJlcGFyZVRleHR1cmVSZWN0KFNrQ2FudmFzKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCk7CisgICAgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1
cmVBbGxvY2F0b3IqLCBNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGRlc3RSZWN0LCBjb25zdCB1aW50OF90KiBwaXhlbHMpOwogCiBwcml2
YXRlOgotICAgIGV4cGxpY2l0IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUoUGFzc093blB0
cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOwotICAKLSAgICBTa1BpY3R1cmUgbV9waWN0dXJlOyAv
LyBSZWNvcmRpbmcgY2FudmFzLgorICAgIExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXAoUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4sIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpOworCisg
ICAgTGF5ZXJUZXh0dXJlU3ViSW1hZ2UgbV90ZXhTdWJJbWFnZTsKK307CisKK2NsYXNzIEJpdG1h
cFRleHR1cmUgOiBwdWJsaWMgQ2FudmFzVGV4dHVyZSB7CitwdWJsaWM6CisgICAgQml0bWFwVGV4
dHVyZShMYXllclRleHR1cmVVcGRhdGVyQml0bWFwKiwgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVy
ZT4pOworCisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVSZWN0KGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwg
VGV4dHVyZUFsbG9jYXRvciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJl
Y3QmIGRlc3RSZWN0KTsKKworcHJpdmF0ZToKKyAgICBMYXllclRleHR1cmVVcGRhdGVyQml0bWFw
KiB0ZXh0dXJlVXBkYXRlcigpIHsgcmV0dXJuIG1fdGV4dHVyZVVwZGF0ZXI7IH0KKworICAgIHNp
emVfdCBtX2J1ZmZlclNpemU7CisgICAgT3duQXJyYXlQdHI8dWludDhfdD4gbV9waXhlbERhdGE7
CisgICAgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcCogbV90ZXh0dXJlVXBkYXRlcjsKK307CisK
K2NsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXJGcmFtZUJ1ZmZlciA6IHB1YmxpYyBMYXllclRleHR1
cmVVcGRhdGVyU2tQaWN0dXJlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXll
clRleHR1cmVVcGRhdGVyRnJhbWVCdWZmZXI+IGNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFpbnRl
ckNocm9taXVtPik7CisgICAgdmlydHVhbCB+TGF5ZXJUZXh0dXJlVXBkYXRlckZyYW1lQnVmZmVy
KCk7CisKKyAgICB2aXJ0dWFsIFVwZGF0YWJsZVRleHR1cmUqIGNyZWF0ZVRleHR1cmUoVGV4dHVy
ZU1hbmFnZXIqKTsKKyAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1
cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VG9wRG93bk9yaWVudGF0aW9uOyB9CisgICAgdmlydHVh
bCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVG
b3JtYXQpOworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYg
Y29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKSB7
IH0KKyAgICB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVy
ZUFsbG9jYXRvciosIE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IExheWVy
VGV4dHVyZVVwZGF0ZXJGcmFtZUJ1ZmZlcihQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVt
Pik7Cit9OworCitjbGFzcyBGcmFtZUJ1ZmZlclRleHR1cmUgOiBwdWJsaWMgQ2FudmFzVGV4dHVy
ZSB7CitwdWJsaWM6CisgICAgRnJhbWVCdWZmZXJUZXh0dXJlKExheWVyVGV4dHVyZVVwZGF0ZXJG
cmFtZUJ1ZmZlciosIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+KTsKKworICAgIHZpcnR1YWwg
dm9pZCBwcmVwYXJlUmVjdChjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3Iq
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CisK
K3ByaXZhdGU6CisgICAgTGF5ZXJUZXh0dXJlVXBkYXRlckZyYW1lQnVmZmVyKiB0ZXh0dXJlVXBk
YXRlcigpIHsgcmV0dXJuIG1fdGV4dHVyZVVwZGF0ZXI7IH0KKworICAgIExheWVyVGV4dHVyZVVw
ZGF0ZXJGcmFtZUJ1ZmZlciogbV90ZXh0dXJlVXBkYXRlcjsKIH07CisKICNlbmRpZiAvLyBVU0Uo
U0tJQSkKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1
bS5jcHAKaW5kZXggZmNjNDZkOTkzZDU0MGE0MjE5ZDdmMjcwMTAwMTg3MzhlZjdiOGZmZS4uNmM4
NzI5MWFiMTI2NTM2YzRkM2UwMTAyNmUwMGRmM2UyNDU2NDI2NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExh
eWVyQ2hyb21pdW0uY3BwCkBAIC01MSwxNyArNTEsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgVXBkYXRhYmxlVGlsZSA6IHB1YmxpYyBDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZSB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVXBkYXRhYmxlVGlsZSk7CiBwdWJsaWM6Ci0gICAgZXhw
bGljaXQgVXBkYXRhYmxlVGlsZShQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiB0ZXgpIDogbV90
ZXgodGV4KSB7IH0KKyAgICBleHBsaWNpdCBVcGRhdGFibGVUaWxlKFBhc3NSZWZQdHI8VXBkYXRh
YmxlVGV4dHVyZT4gdGV4KSA6IG1fdGV4KHRleCkgeyB9CiAKLSAgICBNYW5hZ2VkVGV4dHVyZSog
dGV4dHVyZSgpIHsgcmV0dXJuIG1fdGV4LmdldCgpOyB9CisgICAgVXBkYXRhYmxlVGV4dHVyZSog
dGV4dHVyZSgpIHsgcmV0dXJuIG1fdGV4LmdldCgpOyB9CisgICAgTWFuYWdlZFRleHR1cmUqIG1h
bmFnZWRUZXh0dXJlKCkgeyByZXR1cm4gbV90ZXgtPnRleHR1cmUoKTsgfQogCiAgICAgYm9vbCBk
aXJ0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2RpcnR5TGF5ZXJSZWN0LmlzRW1wdHkoKTsgfQogICAg
IHZvaWQgY2xlYXJEaXJ0eSgpIHsgbV9kaXJ0eUxheWVyUmVjdCA9IEludFJlY3QoKTsgfQogCiAg
ICAgLy8gTGF5ZXItc3BhY2UgZGlydHkgcmVjdGFuZ2xlIHRoYXQgbmVlZHMgdG8gYmUgcmVwYWlu
dGVkLgogICAgIEludFJlY3QgbV9kaXJ0eUxheWVyUmVjdDsKKyAgICAvLyBQYWdlLXNwYWNlIHJl
Y3RhbmdsZSB0aGF0IG5lZWRzIHRvIGJlIHVwZGF0ZWQuCisgICAgSW50UmVjdCBtX3VwZGF0ZVJl
Y3Q7CiBwcml2YXRlOgotICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV90ZXg7CisgICAgUmVm
UHRyPFVwZGF0YWJsZVRleHR1cmU+IG1fdGV4OwogfTsKIAogVGlsZWRMYXllckNocm9taXVtOjpU
aWxlZExheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkKQEAgLTE2NywxNyAr
MTcwLDEyIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3Vy
Y2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBDCiAgICAgICAgICAgICBlbHNlIGlmICgh
dGlsZS0+ZGlydHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAg
Ly8gQ2FsY3VsYXRlIHBhZ2Utc3BhY2UgcmVjdGFuZ2xlIHRvIGNvcHkgZnJvbS4KLSAgICAgICAg
ICAgIEludFJlY3Qgc291cmNlUmVjdCA9IG1fdGlsZXItPnRpbGVDb250ZW50UmVjdCh0aWxlKTsK
LSAgICAgICAgICAgIGNvbnN0IEludFBvaW50IGFuY2hvciA9IHNvdXJjZVJlY3QubG9jYXRpb24o
KTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KG1fdGlsZXItPmxheWVyUmVjdFRv
Q29udGVudFJlY3QodGlsZS0+bV9kaXJ0eUxheWVyUmVjdCkpOwotICAgICAgICAgICAgLy8gUGFp
bnQgcmVjdCBub3QgZ3VhcmFudGVlZCB0byBsaW5lIHVwIG9uIHRpbGUgYm91bmRhcmllcywgc28K
LSAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHNvdXJjZVJlY3QgZG9lc24ndCBleHRlbmQg
b3V0c2lkZSBvZiBpdC4KLSAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KG1fcGFpbnRS
ZWN0KTsKLSAgICAgICAgICAgIGlmIChzb3VyY2VSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IEludFJlY3Qgc291cmNlUmVjdCA9IHRpbGUtPm1fdXBkYXRlUmVjdDsKKyAgICAgICAgICAgIGlm
ICh0aWxlLT5tX3VwZGF0ZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgICAgICBBU1NFUlQodGlsZS0+dGV4dHVyZSgpLT5pc1Jlc2VydmVkKCkpOwor
ICAgICAgICAgICAgQVNTRVJUKHRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPmlzUmVzZXJ2ZWQoKSk7
CisgICAgICAgICAgICBjb25zdCBJbnRQb2ludCBhbmNob3IgPSBtX3RpbGVyLT50aWxlQ29udGVu
dFJlY3QodGlsZSkubG9jYXRpb24oKTsKIAogICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRpbGUt
c3BhY2UgcmVjdGFuZ2xlIHRvIHVwbG9hZCBpbnRvLgogICAgICAgICAgICAgSW50UmVjdCBkZXN0
UmVjdChJbnRQb2ludChzb3VyY2VSZWN0LngoKSAtIGFuY2hvci54KCksIHNvdXJjZVJlY3QueSgp
IC0gYW5jaG9yLnkoKSksIHNvdXJjZVJlY3Quc2l6ZSgpKTsKQEAgLTE5NywxMiArMTk1LDEyIEBA
IHZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0LCBDCiAgICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueSgp
ICsgZGVzdFJlY3QuaGVpZ2h0KCkgPiBtX3BhaW50UmVjdC5oZWlnaHQoKSkKICAgICAgICAgICAg
ICAgICBDUkFTSCgpOwogCi0gICAgICAgICAgICB0aWxlLT50ZXh0dXJlKCktPmJpbmRUZXh0dXJl
KGNvbnRleHQsIHVwZGF0ZXIuYWxsb2NhdG9yKCkpOworICAgICAgICAgICAgdGlsZS0+bWFuYWdl
ZFRleHR1cmUoKS0+YmluZFRleHR1cmUoY29udGV4dCwgdXBkYXRlci5hbGxvY2F0b3IoKSk7CiAg
ICAgICAgICAgICBjb25zdCBHQzNEaW50IGZpbHRlciA9IG1fdGlsZXItPmhhc0JvcmRlclRleGVs
cygpID8gR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUiA6IEdyYXBoaWNzQ29udGV4dDNEOjpORUFS
RVNUOwogICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01J
Tl9GSUxURVIsIGZpbHRlcikpOwogICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRl
eFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX01BR19GSUxURVIsIGZpbHRlcikpOwogCi0gICAgICAgICAgICB1cGRhdGVy
LmFwcGVuZCh0aWxlLT50ZXh0dXJlKCksIHRleHR1cmVVcGRhdGVyKCksIHNvdXJjZVJlY3QsIGRl
c3RSZWN0KTsKKyAgICAgICAgICAgIHVwZGF0ZXIuYXBwZW5kKHRpbGUtPnRleHR1cmUoKSwgc291
cmNlUmVjdCwgZGVzdFJlY3QpOwogICAgICAgICAgICAgdGlsZS0+Y2xlYXJEaXJ0eSgpOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMjQwLDEwICsyMzgsMTAgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21p
dW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogICAgICAgICBpbnQgaSA9
IGl0ZXItPmZpcnN0LmZpcnN0OwogICAgICAgICBpbnQgaiA9IGl0ZXItPmZpcnN0LnNlY29uZDsK
ICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUq
PihpdGVyLT5zZWNvbmQuZ2V0KCkpOwotICAgICAgICBpZiAoIXRpbGUtPnRleHR1cmUoKS0+aXNW
YWxpZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKQorICAgICAgICBpZiAo
IXRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPmlzVmFsaWQobV90aWxlci0+dGlsZVNpemUoKSwgbV90
ZXh0dXJlRm9ybWF0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHRpbGVkTGF5
ZXItPnN5bmNUZXh0dXJlSWQoaSwgaiwgdGlsZS0+dGV4dHVyZSgpLT50ZXh0dXJlSWQoKSk7Cisg
ICAgICAgIHRpbGVkTGF5ZXItPnN5bmNUZXh0dXJlSWQoaSwgaiwgdGlsZS0+bWFuYWdlZFRleHR1
cmUoKS0+dGV4dHVyZUlkKCkpOwogICAgIH0KIH0KIApAQCAtMjYxLDcgKzI1OSw3IEBAIFVwZGF0
YWJsZVRpbGUqIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dGlsZUF0KGludCBpLCBpbnQgaikgY29uc3QK
IAogVXBkYXRhYmxlVGlsZSogVGlsZWRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlKGludCBpLCBp
bnQgaikKIHsKLSAgICBSZWZQdHI8VXBkYXRhYmxlVGlsZT4gdGlsZSA9IGFkb3B0UmVmKG5ldyBV
cGRhdGFibGVUaWxlKE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUodGV4dHVyZU1hbmFnZXIoKSkpKTsK
KyAgICBSZWZQdHI8VXBkYXRhYmxlVGlsZT4gdGlsZSA9IGFkb3B0UmVmKG5ldyBVcGRhdGFibGVU
aWxlKGFkb3B0UmVmKHRleHR1cmVVcGRhdGVyKCktPmNyZWF0ZVRleHR1cmUodGV4dHVyZU1hbmFn
ZXIoKSkpKSk7CiAgICAgbV90aWxlci0+YWRkVGlsZSh0aWxlLCBpLCBqKTsKICAgICB0aWxlLT5t
X2RpcnR5TGF5ZXJSZWN0ID0gbV90aWxlci0+dGlsZUxheWVyUmVjdCh0aWxlLmdldCgpKTsKIApA
QCAtMzA5LDEwICszMDcsMTAgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByb3RlY3RUaWxl
VGV4dHVyZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgZm9yIChpbnQgaiA9IHRv
cDsgaiA8PSBib3R0b207ICsraikgewogICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSBy
aWdodDsgKytpKSB7CiAgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGks
IGopOwotICAgICAgICAgICAgaWYgKCF0aWxlIHx8ICF0aWxlLT50ZXh0dXJlKCktPmlzVmFsaWQo
bV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkKKyAgICAgICAgICAgIGlmICgh
dGlsZSB8fCAhdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+aXNWYWxpZChtX3RpbGVyLT50aWxlU2l6
ZSgpLCBtX3RleHR1cmVGb3JtYXQpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgICAgICB0aWxlLT50ZXh0dXJlKCktPnJlc2VydmUobV90aWxlci0+dGlsZVNpemUoKSwgbV90
ZXh0dXJlRm9ybWF0KTsKKyAgICAgICAgICAgIHRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPnJlc2Vy
dmUobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KTsKICAgICAgICAgfQogICAg
IH0KIH0KQEAgLTM0NiwxMCArMzQ0LDEwIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVw
YXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgICAgICAgICBpZiAo
IXRpbGUpCiAgICAgICAgICAgICAgICAgdGlsZSA9IGNyZWF0ZVRpbGUoaSwgaik7CiAKLSAgICAg
ICAgICAgIGlmICghdGlsZS0+dGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVTaXplKCks
IG1fdGV4dHVyZUZvcm1hdCkpCisgICAgICAgICAgICBpZiAoIXRpbGUtPm1hbmFnZWRUZXh0dXJl
KCktPmlzVmFsaWQobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkKICAgICAg
ICAgICAgICAgICB0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0ID0gbV90aWxlci0+dGlsZUxheWVyUmVj
dCh0aWxlKTsKIAotICAgICAgICAgICAgaWYgKCF0aWxlLT50ZXh0dXJlKCktPnJlc2VydmUobV90
aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkgeworICAgICAgICAgICAgaWYgKCF0
aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5yZXNlcnZlKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4
dHVyZUZvcm1hdCkpIHsKICAgICAgICAgICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgY2xlYW51cFJlc291cmNlcygpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
QEAgLTM3NCw2ICszNzIsMzEgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1Vw
ZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICAvLyBzbyB3ZSBncmFiIGEgbG9j
YWwgcmVmZXJlbmNlIGhlcmUgdG8gaG9sZCB0aGUgdXBkYXRlciBhbGl2ZSB1bnRpbCB0aGUgcGFp
bnQgY29tcGxldGVzLgogICAgIFJlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBwcm90ZWN0b3Io
dGV4dHVyZVVwZGF0ZXIoKSk7CiAgICAgdGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVRvVXBkYXRl
KG1fcGFpbnRSZWN0LCBtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RpbGVyLT5oYXNCb3JkZXJUZXhl
bHMoKSk7CisKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMobV9yZXF1ZXN0
ZWRVcGRhdGVSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGZvciAoaW50IGog
PSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkg
PD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVB
dChpLCBqKTsKKyAgICAgICAgICAgIGlmICghdGlsZSkKKyAgICAgICAgICAgICAgICB0aWxlID0g
Y3JlYXRlVGlsZShpLCBqKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCF0aWxlLT5kaXJ0eSgpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgcGFn
ZS1zcGFjZSByZWN0YW5nbGUgdG8gY29weSBmcm9tLgorICAgICAgICAgICAgSW50UmVjdCBzb3Vy
Y2VSZWN0ID0gbV90aWxlci0+dGlsZUNvbnRlbnRSZWN0KHRpbGUpOworICAgICAgICAgICAgY29u
c3QgSW50UG9pbnQgYW5jaG9yID0gc291cmNlUmVjdC5sb2NhdGlvbigpOworICAgICAgICAgICAg
c291cmNlUmVjdC5pbnRlcnNlY3QobV90aWxlci0+bGF5ZXJSZWN0VG9Db250ZW50UmVjdCh0aWxl
LT5tX2RpcnR5TGF5ZXJSZWN0KSk7CisgICAgICAgICAgICAvLyBQYWludCByZWN0IG5vdCBndWFy
YW50ZWVkIHRvIGxpbmUgdXAgb24gdGlsZSBib3VuZGFyaWVzLCBzbworICAgICAgICAgICAgLy8g
bWFrZSBzdXJlIHRoYXQgc291cmNlUmVjdCBkb2Vzbid0IGV4dGVuZCBvdXRzaWRlIG9mIGl0Lgor
ICAgICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QobV9wYWludFJlY3QpOworCisgICAgICAg
ICAgICB0aWxlLT5tX3VwZGF0ZVJlY3QgPSBzb3VyY2VSZWN0OworICAgICAgICAgICAgaWYgKHNv
dXJjZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICB0aWxlLT50ZXh0dXJlKCktPnByZXBhcmVSZWN0KHNvdXJjZVJlY3QpOworICAgICAgICB9
CisgICAgfQogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwCmluZGV4IDQw
ODRkZWVhZjBmYmM3MGIwODU0YmFlNjBkOGVhMjdhNzQzN2JhMjMuLjNmN2MzMmJiMDE1OTY2OTg2
Yzk2OGVjMDhmOGYwMzVkY2QwMDE2MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIu
Y3BwCkBAIC00OCwxNCArNDgsMTIgQEAgQ0NUZXh0dXJlVXBkYXRlcjo6fkNDVGV4dHVyZVVwZGF0
ZXIoKQogewogfQogCi12b2lkIENDVGV4dHVyZVVwZGF0ZXI6OmFwcGVuZChNYW5hZ2VkVGV4dHVy
ZSogdGV4dHVyZSwgTGF5ZXJUZXh0dXJlVXBkYXRlciogdXBkYXRlciwgY29uc3QgSW50UmVjdCYg
c291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit2b2lkIENDVGV4dHVyZVVwZGF0
ZXI6OmFwcGVuZChVcGRhdGFibGVUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKIHsKICAgICBBU1NFUlQodGV4dHVyZSk7
Ci0gICAgQVNTRVJUKHVwZGF0ZXIpOwogCiAgICAgVXBkYXRlRW50cnkgZW50cnk7CiAgICAgZW50
cnkubV90ZXh0dXJlID0gdGV4dHVyZTsKLSAgICBlbnRyeS5tX3VwZGF0ZXIgPSB1cGRhdGVyOwog
ICAgIGVudHJ5Lm1fc291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7CiAgICAgZW50cnkubV9kZXN0UmVj
dCA9IGRlc3RSZWN0OwogICAgIG1fZW50cmllcy5hcHBlbmQoZW50cnkpOwpAQCAtNjYsNyArNjQs
NyBAQCBib29sIENDVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZShHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCwgc2l6ZV90IGNvdW50KQogICAgIHNpemVfdCBtYXhJbmRleCA9IG1pbihtX2VudHJ5SW5k
ZXggKyBjb3VudCwgbV9lbnRyaWVzLnNpemUoKSk7CiAgICAgZm9yICg7IG1fZW50cnlJbmRleCA8
IG1heEluZGV4OyArK21fZW50cnlJbmRleCkgewogICAgICAgICBVcGRhdGVFbnRyeSYgZW50cnkg
PSBtX2VudHJpZXNbbV9lbnRyeUluZGV4XTsKLSAgICAgICAgZW50cnkubV91cGRhdGVyLT51cGRh
dGVUZXh0dXJlUmVjdChjb250ZXh0LCBtX2FsbG9jYXRvciwgZW50cnkubV90ZXh0dXJlLCBlbnRy
eS5tX3NvdXJjZVJlY3QsIGVudHJ5Lm1fZGVzdFJlY3QpOworICAgICAgICBlbnRyeS5tX3RleHR1
cmUtPnVwZGF0ZVJlY3QoY29udGV4dCwgbV9hbGxvY2F0b3IsIGVudHJ5Lm1fc291cmNlUmVjdCwg
ZW50cnkubV9kZXN0UmVjdCk7CiAgICAgfQogCiAgICAgaWYgKG1heEluZGV4IDwgbV9lbnRyaWVz
LnNpemUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaAppbmRleCAzMDMxYzM5ZTYwZDgw
MmFmZmUxNmFjZGViNzg4YmFiMjAyMTliMmFjLi5mNDMzY2YyN2Q5OGZmM2JjOWRjMWVjNDIwZDZj
YTg3OGVmOTIwODczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oCkBAIC0zMyw3ICsz
Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBj
bGFzcyBMYXllclRleHR1cmVVcGRhdGVyOwotY2xhc3MgTWFuYWdlZFRleHR1cmU7CitjbGFzcyBV
cGRhdGFibGVUZXh0dXJlOwogY2xhc3MgVGV4dHVyZUFsbG9jYXRvcjsKIAogY2xhc3MgQ0NUZXh0
dXJlVXBkYXRlciB7CkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBDQ1RleHR1cmVVcGRh
dGVyKFRleHR1cmVBbGxvY2F0b3IqKTsKICAgICB+Q0NUZXh0dXJlVXBkYXRlcigpOwogCi0gICAg
dm9pZCBhcHBlbmQoTWFuYWdlZFRleHR1cmUqLCBMYXllclRleHR1cmVVcGRhdGVyKiwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgIHZvaWQg
YXBwZW5kKFVwZGF0YWJsZVRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRSZWN0JiBkZXN0UmVjdCk7CiAKICAgICAvLyBVcGRhdGUgc29tZSB0ZXh0dXJlcy4gUmV0
dXJucyB0cnVlIGlmIG1vcmUgdGV4dHVyZXMgbGVmdCB0byBwcm9jZXNzLgogICAgIGJvb2wgdXBk
YXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgc2l6ZV90IGNvdW50KTsKQEAgLTUyLDggKzUyLDcgQEAg
cHVibGljOgogCiBwcml2YXRlOgogICAgIHN0cnVjdCBVcGRhdGVFbnRyeSB7Ci0gICAgICAgIE1h
bmFnZWRUZXh0dXJlKiBtX3RleHR1cmU7Ci0gICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXIqIG1f
dXBkYXRlcjsKKyAgICAgICAgVXBkYXRhYmxlVGV4dHVyZSogbV90ZXh0dXJlOwogICAgICAgICBJ
bnRSZWN0IG1fc291cmNlUmVjdDsKICAgICAgICAgSW50UmVjdCBtX2Rlc3RSZWN0OwogICAgIH07
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113389</attachid>
            <date>2011-11-02 15:44:01 -0700</date>
            <delta_ts>2011-11-08 09:14:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71388-20111102184357.patch</filename>
            <type>text/plain</type>
            <size>36248</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTkwOTIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3MmY2MjZiN2EzYjQ0OWVl
Mjc0YTU1Mzg3YTc4MGVkMzMyMzI1YmI0Li5lMzEwMGZiNWNkNDQ5NTRkNDZlZjdhYTVlYzUzNjk5
YzkyNDBhOTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAKKzIwMTEtMTEtMDIgIERhdmlk
IFJldmVtYW4gIDxyZXZlbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEFk
ZCBzdXBwb3J0IGZvciBwYWludGluZyBpbnRvIGFuIFNrUGljdHVyZSBhbmQgdGhlbiByYXN0ZXJp
emluZyBpbnRvIHRpbGUtc2l6ZWQgY2h1bmtzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEzODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgVXBkYXRhYmxlVGV4dHVyZSBjbGFzcywgd2hpY2ggYWxs
b3dzIHRleHR1cmUgdXBkYXRlciB0bworICAgICAgICBhbGxvY2F0ZSB0aWxlIHNwZWNpZmljIHJl
c291cmNlcyBhbmQgcGFpbnQgdGlsZXMgc2VwYXJhdGVseS4KKyAgICAgICAgQWRkIExheWVyVGV4
dHVyZVVwZGF0ZXJCaXRtYXAgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRleHR1cmUKKyAgICAgICAg
dXBkYXRlcyBieSByZWNvcmRpbmcgZHJhd2luZyBjb21tYW5kcyB0byBhIFNrUGljdHVyZSBhbmQK
KyAgICAgICAgcGxheWluZyB0aGVtIGJhY2sgdG8gZWFjaCB0aWxlIGluZGl2aWR1YWxseS4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMuIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVw
ZGF0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVRleHR1cmU6OkltYWdlVGV4dHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVRleHR1cmU6OnRleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VUZXh0dXJlOjpwcmVwYXJlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZVRleHR1cmU6OnRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVRleHR1cmU6OnVwZGF0ZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0YWJsZVRl
eHR1cmU6On5VcGRhdGFibGVUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1RleHR1cmU6OkNhbnZhc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
ZXh0dXJlVXBkYXRlclBsYXRmb3JtQ2FudmFzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJUZXh0dXJlVXBkYXRlclBsYXRmb3JtQ2FudmFzOjpMYXllclRleHR1cmVVcGRhdGVyUGxh
dGZvcm1DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlclBsYXRm
b3JtQ2FudmFzOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVy
ZVVwZGF0ZXJQbGF0Zm9ybUNhbnZhczo6c2FtcGxlZFRleGVsRm9ybWF0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJQbGF0Zm9ybUNhbnZhczo6cHJlcGFyZVRvVXBkYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJQbGF0Zm9ybUNhbnZhczo6
dXBkYXRlVGV4dHVyZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DYW52YXNUZXh0
dXJlOjpQbGF0Zm9ybUNhbnZhc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1D
YW52YXNUZXh0dXJlOjp1cGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVy
ZVVwZGF0ZXJTa1BpY3R1cmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6ZHJhd1BpY3R1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OkxheWVyVGV4dHVyZVVw
ZGF0ZXJCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1h
cDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVy
Qml0bWFwOjpzYW1wbGVkVGV4ZWxGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0
dXJlVXBkYXRlckJpdG1hcDo6cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnByZXBhcmVUZXh0dXJlUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjp1cGRhdGVUZXh0dXJlUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjpCaXRtYXBUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcFRleHR1cmU6OnByZXBhcmVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFRleHR1cmU6OnVwZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0
dXJlVXBkYXRlckZyYW1lQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
ZXh0dXJlVXBkYXRlckZyYW1lQnVmZmVyOjpMYXllclRleHR1cmVVcGRhdGVyRnJhbWVCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlckZyYW1lQnVmZmVyOjp+TGF5
ZXJUZXh0dXJlVXBkYXRlckZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4
dHVyZVVwZGF0ZXJGcmFtZUJ1ZmZlcjo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRleHR1cmVVcGRhdGVyRnJhbWVCdWZmZXI6OnNhbXBsZWRUZXhlbEZvcm1hdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyRnJhbWVCdWZmZXI6OnVwZGF0ZVRl
eHR1cmVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyVGV4dHVyZTo6RnJhbWVC
dWZmZXJUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyVGV4dHVyZTo6dXBk
YXRlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0
dXJlVXBkYXRlckNhbnZhcy5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzVGV4dHVyZTo6dGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNhbnZhc1RleHR1cmU6OnByZXBhcmVS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2FudmFzVGV4dHVyZTo6dGV4dHVyZVVw
ZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6b3Jp
ZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6dGV4dHVyZVVwZGF0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlckZyYW1lQnVmZmVyOjpv
cmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyRnJhbWVC
dWZmZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclRl
eHR1cmU6OnByZXBhcmVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyVGV4dHVy
ZTo6dGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVcGRhdGFibGVUaWxl
OjpVcGRhdGFibGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0YWJsZVRpbGU6OnRleHR1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRhYmxlVGlsZTo6bWFuYWdlZFRleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3Bl
cnRpZXNUbyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZVRp
bGUpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VGlsZVRl
eHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRv
VXBkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1
cmVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXI6OmFwcGVu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaDoKKwog
MjAxMS0xMS0wMiAgVG9tbXkgV2lkZW5mbHljaHQgIDx0b21teXdAZ29vZ2xlLmNvbT4KIAogICAg
ICAgICBNZWRpYVN0cmVhbVJlZ2lzdHJ5IHNob3VsZCBob2xkIHJlZmVyZW5jZXMgdG8gTWVkaWFT
dHJlYW1EZXNjcmlwdG9yIHJhdGhlciB0aGFuIE1lZGlhU3RyZWFtCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggY2E4YjNiZDc2MWYwODE1ZTQ3YjZjZmIwNDkxYTFkOTcy
ODc5ZjA0Yy4uZDgwYjE2ZWYzOGYxMjkzMjRmY2Q1NWRjYjg3ZGUyMmRlMzFhNDFiMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExh
eWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMTIyLDEyICsxMjIsMTIgQEAgdm9p
ZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIoY29uc3QgQ0NMYXll
clRyZWVIb3N0KiBob3N0KQogewogI2lmIFVTRShTS0lBKQogICAgIGlmIChob3N0LT5zZXR0aW5n
cygpLmFjY2VsZXJhdGVQYWludGluZykgewotICAgICAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5
ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6Y3JlYXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNy
ZWF0ZShtX2RlbGVnYXRlKSk7CisgICAgICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBMYXllclRleHR1
cmVVcGRhdGVyRnJhbWVCdWZmZXI6OmNyZWF0ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUo
bV9kZWxlZ2F0ZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIFVTRShTS0lB
KQogCi0gICAgbV90ZXh0dXJlVXBkYXRlciA9IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNy
ZWF0ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUobV9kZWxlZ2F0ZSksIGhvc3QtPmxheWVy
UmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ01hcFN1Yik7CisgICAgbV90ZXh0dXJlVXBkYXRl
ciA9IExheWVyVGV4dHVyZVVwZGF0ZXJQbGF0Zm9ybUNhbnZhczo6Y3JlYXRlKENvbnRlbnRMYXll
clBhaW50ZXI6OmNyZWF0ZShtX2RlbGVnYXRlKSwgaG9zdC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxp
dGllcygpLnVzaW5nTWFwU3ViKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5j
cHAKaW5kZXggMzYzMzYyOTY3YWNjZGViYzI1NTllMjljMjRkNDNjMWM4ODg4MDMxNy4uMmJlZjFl
YWRkZWQzNjMyYjQwYTFkNjkyZDMzMWUxNmJkNWNmNTlkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uY3BwCkBAIC00NCw2ICs0NCwyNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2NsYXNzIEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjsKKworY2xhc3MgSW1hZ2VUZXh0dXJlIDog
cHVibGljIFVwZGF0YWJsZVRleHR1cmUgeworcHVibGljOgorICAgIEltYWdlVGV4dHVyZShJbWFn
ZUxheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyLCBQYXNzT3duUHRyPE1hbmFnZWRU
ZXh0dXJlPiB0ZXh0dXJlKQorICAgICAgICA6IG1fdGV4dHVyZSh0ZXh0dXJlKQorICAgICAgICAs
IG1fdGV4dHVyZVVwZGF0ZXIodGV4dHVyZVVwZGF0ZXIpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleHR1cmUuZ2V0KCk7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVJlY3QoY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBU
ZXh0dXJlQWxsb2NhdG9yKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVj
dCYgZGVzdFJlY3QpOworCitwcml2YXRlOgorICAgIEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlciog
dGV4dHVyZVVwZGF0ZXIoKSB7IHJldHVybiBtX3RleHR1cmVVcGRhdGVyOyB9CisKKyAgICBPd25Q
dHI8TWFuYWdlZFRleHR1cmU+IG1fdGV4dHVyZTsKKyAgICBJbWFnZUxheWVyVGV4dHVyZVVwZGF0
ZXIqIG1fdGV4dHVyZVVwZGF0ZXI7Cit9OworCiBjbGFzcyBJbWFnZUxheWVyVGV4dHVyZVVwZGF0
ZXIgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyPiBjcmVhdGUoYm9vbCB1c2VNYXBUZXhT
dWJJbWFnZSkKQEAgLTUzLDYgKzc0LDExIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfkltYWdl
TGF5ZXJUZXh0dXJlVXBkYXRlcigpIHsgfQogCisgICAgdmlydHVhbCBVcGRhdGFibGVUZXh0dXJl
KiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5ldyBJbWFnZVRleHR1cmUodGhpcywgTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShtYW5h
Z2VyKSk7CisgICAgfQorCiAgICAgdmlydHVhbCBPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIHsg
cmV0dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6OkJvdHRvbVVwT3JpZW50YXRpb247IH0KIAogICAg
IHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0
ZXh0dXJlRm9ybWF0KQpAQCAtMTA3LDYgKzEzMywxMSBAQCBwcml2YXRlOgogICAgIExheWVyVGV4
dHVyZVN1YkltYWdlIG1fdGV4U3ViSW1hZ2U7CiB9OwogCit2b2lkIEltYWdlVGV4dHVyZTo6dXBk
YXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxs
b2NhdG9yLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVj
dCkKK3sKKyAgICB0ZXh0dXJlVXBkYXRlcigpLT51cGRhdGVUZXh0dXJlUmVjdChjb250ZXh0LCBh
bGxvY2F0b3IsIHRleHR1cmUoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QpOworfQorCiBQYXNzUmVm
UHRyPEltYWdlTGF5ZXJDaHJvbWl1bT4gSW1hZ2VMYXllckNocm9taXVtOjpjcmVhdGUoQ0NMYXll
ckRlbGVnYXRlKiBkZWxlZ2F0ZSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlTGF5
ZXJDaHJvbWl1bShkZWxlZ2F0ZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCmluZGV4
IDNkODU5N2UzOWU4NWQ0Y2JmMDE1NmQ1Y2MxMTc5NDY3OTUzNzEyNGYuLjM2ZTdmNDY2MjY3ZGYz
NTE2ZDdhZTRkNThiNDQyZjUyNWZmYzE0NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVy
LmgKQEAgLTM5LDYgKzM5LDE2IEBAIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBJbnRTaXplOwogY2xh
c3MgTWFuYWdlZFRleHR1cmU7CiBjbGFzcyBUZXh0dXJlQWxsb2NhdG9yOworY2xhc3MgVGV4dHVy
ZU1hbmFnZXI7CisKK2NsYXNzIFVwZGF0YWJsZVRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRlZDxV
cGRhdGFibGVUZXh0dXJlPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+VXBkYXRhYmxlVGV4dHVy
ZSgpIHsgfQorCisgICAgdmlydHVhbCBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSgpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVJlY3QoY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVy
ZUFsbG9jYXRvciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRl
c3RSZWN0KSA9IDA7Cit9OwogCiBjbGFzcyBMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGljIFJl
ZkNvdW50ZWQ8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gewogcHVibGljOgpAQCAtNTQsNiArNjQsNyBA
QCBwdWJsaWM6CiAgICAgICAgIFNhbXBsZWRUZXhlbEZvcm1hdEJHUkEsCiAgICAgICAgIFNhbXBs
ZWRUZXhlbEZvcm1hdEludmFsaWQsCiAgICAgfTsKKyAgICB2aXJ0dWFsIFVwZGF0YWJsZVRleHR1
cmUqIGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKSA9IDA7CiAgICAgLy8gUmV0dXJucyB0
aGUgb3JpZW50YXRpb24gb2YgdGhlIHRleHR1cmUgdXBsb2FkZWQgYnkgdGhpcyBpbnRlcmZhY2Uu
CiAgICAgdmlydHVhbCBPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpID0gMDsKICAgICAvLyBSZXR1
cm5zIHRoZSBmb3JtYXQgb2YgdGhlIHRleGVsIHVwbG9hZGVkIGJ5IHRoaXMgaW50ZXJmYWNlLgpA
QCAtNjIsNyArNzMsNiBAQCBwdWJsaWM6CiAgICAgLy8gSWYgdGhlIGZvcm1hdCBpcyBUZXhlbEZv
cm1hdEJHUkEsIHZlYzQueCBpcyBibHVlIGFuZCB2ZWM0LnogaXMgcmVkLgogICAgIHZpcnR1YWwg
U2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9y
bWF0KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0
M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkgPSAwOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNw
cAppbmRleCBhY2IyY2QzZTQ2YjMwMTM0ZWFmODgwNWI0NTNlNWNhYjhkNTQ1YzFiLi4yYTcxZTUx
OWFlZDdlYjlmOGFlZjQ3NDdlZjg1Y2Q3ZTdmOWY5MmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIlBs
YXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJTa0NhbnZhcy5oIgogI2luY2x1ZGUgIlNr
R3B1RGV2aWNlLmgiCisjaW5jbHVkZSAic2tpYS9leHQvcGxhdGZvcm1fY2FudmFzLmgiCiAjZW5k
aWYgLy8gVVNFKFNLSUEpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEyMSwyNSArMTIyLDM1
IEBAIHZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhczo6cGFpbnRDb250ZW50cyhHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEluCiAgICAgbV9jb250ZW50UmVjdCA9IGNvbnRlbnRS
ZWN0OwogfQogCi1QYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA+IExheWVyVGV4
dHVyZVVwZGF0ZXJCaXRtYXA6OmNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVt
PiBwYWludGVyLCBib29sIHVzZU1hcFRleFN1YkltYWdlKQorQ2FudmFzVGV4dHVyZTo6Q2FudmFz
VGV4dHVyZShQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiB0ZXh0dXJlKQorICAgIDogbV90ZXh0
dXJlKHRleHR1cmUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMYXllclRleHR1cmVVcGRh
dGVyQml0bWFwKHBhaW50ZXIsIHVzZU1hcFRleFN1YkltYWdlKSk7CiB9CiAKLUxheWVyVGV4dHVy
ZVVwZGF0ZXJCaXRtYXA6OkxheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXAoUGFzc093blB0cjxMYXll
clBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlciwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSkKK1Bhc3NS
ZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlclBsYXRmb3JtQ2FudmFzPiBMYXllclRleHR1cmVVcGRh
dGVyUGxhdGZvcm1DYW52YXM6OmNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVt
PiBwYWludGVyLCBib29sIHVzZU1hcFRleFN1YkltYWdlKQoreworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgTGF5ZXJUZXh0dXJlVXBkYXRlclBsYXRmb3JtQ2FudmFzKHBhaW50ZXIsIHVzZU1hcFRl
eFN1YkltYWdlKSk7Cit9CisKK0xheWVyVGV4dHVyZVVwZGF0ZXJQbGF0Zm9ybUNhbnZhczo6TGF5
ZXJUZXh0dXJlVXBkYXRlclBsYXRmb3JtQ2FudmFzKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hy
b21pdW0+IHBhaW50ZXIsIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpCiAgICAgOiBMYXllclRleHR1
cmVVcGRhdGVyQ2FudmFzKHBhaW50ZXIpCiAgICAgLCBtX3RleFN1YkltYWdlKHVzZU1hcFRleFN1
YkltYWdlKQogewogfQogCi1MYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXQg
TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6c2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRl
eHR1cmVGb3JtYXQpCitVcGRhdGFibGVUZXh0dXJlKiBMYXllclRleHR1cmVVcGRhdGVyUGxhdGZv
cm1DYW52YXM6OmNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpCit7CisgICAg
cmV0dXJuIG5ldyBQbGF0Zm9ybUNhbnZhc1RleHR1cmUodGhpcywgTWFuYWdlZFRleHR1cmU6OmNy
ZWF0ZShtYW5hZ2VyKSk7Cit9CisKK0xheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZv
cm1hdCBMYXllclRleHR1cmVVcGRhdGVyUGxhdGZvcm1DYW52YXM6OnNhbXBsZWRUZXhlbEZvcm1h
dChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KQogewogICAgIC8vIFRoZSBjb21wb25lbnQgb3JkZXIg
bWF5IGJlIGJncmEgaWYgd2UgdXBsb2FkZWQgYmdyYSBwaXhlbHMgdG8gcmdiYSB0ZXh0dXJlcy4K
ICAgICByZXR1cm4gUGxhdGZvcm1Db2xvcjo6c2FtZUNvbXBvbmVudE9yZGVyKHRleHR1cmVGb3Jt
YXQpID8KICAgICAgICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1h
dFJHQkEgOiBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRCR1JBOwogfQog
Ci12b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJU
ZXhlbHMpCit2b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJQbGF0Zm9ybUNhbnZhczo6cHJlcGFyZVRv
VXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6
ZSwgaW50IGJvcmRlclRleGVscykKIHsKICAgICBtX3RleFN1YkltYWdlLnNldFN1YkltYWdlU2l6
ZSh0aWxlU2l6ZSk7CiAKQEAgLTE1Myw3ICsxNjQsNyBAQCB2b2lkIExheWVyVGV4dHVyZVVwZGF0
ZXJCaXRtYXA6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29u
cwogICAgIHBhaW50Q29udGVudHMoKmNhbnZhc1BhaW50ZXIuY29udGV4dCgpLCBjb250ZW50UmVj
dCk7CiB9CiAKLXZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6dXBkYXRlVGV4dHVyZVJl
Y3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRv
ciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFJlY3QmIGRlc3RSZWN0KQordm9pZCBMYXllclRleHR1cmVVcGRhdGVyUGxhdGZvcm1D
YW52YXM6OnVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0
dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKIHsKICAgICBQbGF0
Zm9ybUNhbnZhczo6QXV0b0xvY2tlciBsb2NrZXIoJm1fY2FudmFzKTsKIApAQCAtMTYxLDI1ICsx
NzIsMjEgQEAgdm9pZCBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjp1cGRhdGVUZXh0dXJlUmVj
dChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGUKICAgICBtX3RleFN1YkltYWdlLnVwbG9h
ZChsb2NrZXIucGl4ZWxzKCksIGNvbnRlbnRSZWN0KCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0LCB0
ZXh0dXJlLT5mb3JtYXQoKSwgY29udGV4dCk7CiB9CiAKLSNpZiBVU0UoU0tJQSkKLVBhc3NSZWZQ
dHI8TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZT4gTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGlj
dHVyZTo6Y3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIpCitQ
bGF0Zm9ybUNhbnZhc1RleHR1cmU6OlBsYXRmb3JtQ2FudmFzVGV4dHVyZShMYXllclRleHR1cmVV
cGRhdGVyUGxhdGZvcm1DYW52YXMqIHRleHR1cmVVcGRhdGVyLCBQYXNzT3duUHRyPE1hbmFnZWRU
ZXh0dXJlPiB0ZXh0dXJlKQorICAgIDogQ2FudmFzVGV4dHVyZSh0ZXh0dXJlKQorICAgICwgbV90
ZXh0dXJlVXBkYXRlcih0ZXh0dXJlVXBkYXRlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUocGFpbnRlcikpOwogfQogCi1MYXllclRleHR1
cmVVcGRhdGVyU2tQaWN0dXJlOjpMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKFBhc3NPd25Q
dHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIpCi0gICAgOiBMYXllclRleHR1cmVVcGRh
dGVyQ2FudmFzKHBhaW50ZXIpCi17Ci19Ci0KLUxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6
On5MYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKCkKK3ZvaWQgUGxhdGZvcm1DYW52YXNUZXh0
dXJlOjp1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2Nh
dG9yKiBhbGxvY2F0b3IsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3Qm
IGRlc3RSZWN0KQogeworICAgIHRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZVRleHR1cmVSZWN0KGNv
bnRleHQsIGFsbG9jYXRvciwgdGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CiB9CiAK
LUxheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBMYXllclRleHR1cmVVcGRh
dGVyU2tQaWN0dXJlOjpzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkK
KyNpZiBVU0UoU0tJQSkKK0xheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OkxheWVyVGV4dHVy
ZVVwZGF0ZXJTa1BpY3R1cmUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRl
cikKKyAgICA6IExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMocGFpbnRlcikKIHsKLSAgICAvLyBI
ZXJlIHdlIGRpcmVjdGx5IHJlbmRlciB0byB0aGUgdGV4dHVyZSwgc28gdGhlIGNvbXBvbmVudCBv
cmRlciBpcyBhbHdheXMgY29ycmVjdC4KLSAgICByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
U2FtcGxlZFRleGVsRm9ybWF0UkdCQTsKIH0KIAogdm9pZCBMYXllclRleHR1cmVVcGRhdGVyU2tQ
aWN0dXJlOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0
IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKQpAQCAtMTkxLDcgKzE5OCwxMDMg
QEAgdm9pZCBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpwcmVwYXJlVG9VcGRhdGUoY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QsIGMKICAgICBtX3BpY3R1cmUuZW5kUmVjb3JkaW5nKCk7
CiB9CiAKLXZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6dXBkYXRlVGV4dHVyZVJl
Y3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRv
ciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFJlY3QmIGRlc3RSZWN0KQordm9pZCBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJl
OjpkcmF3UGljdHVyZShTa0NhbnZhcyogY2FudmFzKQoreworICAgIFRSQUNFX0VWRU5UKCJMYXll
clRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpkcmF3UGljdHVyZSIsIHRoaXMsIDApOworICAgIGNh
bnZhcy0+ZHJhd1BpY3R1cmUobV9waWN0dXJlKTsKK30KKworUGFzc1JlZlB0cjxMYXllclRleHR1
cmVVcGRhdGVyQml0bWFwPiBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpjcmVhdGUoUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlciwgYm9vbCB1c2VNYXBUZXhTdWJJbWFn
ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXAo
cGFpbnRlciwgdXNlTWFwVGV4U3ViSW1hZ2UpKTsKK30KKworTGF5ZXJUZXh0dXJlVXBkYXRlckJp
dG1hcDo6TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcChQYXNzT3duUHRyPExheWVyUGFpbnRlckNo
cm9taXVtPiBwYWludGVyLCBib29sIHVzZU1hcFRleFN1YkltYWdlKQorICAgIDogTGF5ZXJUZXh0
dXJlVXBkYXRlclNrUGljdHVyZShwYWludGVyKQorICAgICwgbV90ZXhTdWJJbWFnZSh1c2VNYXBU
ZXhTdWJJbWFnZSkKK3sKK30KKworVXBkYXRhYmxlVGV4dHVyZSogTGF5ZXJUZXh0dXJlVXBkYXRl
ckJpdG1hcDo6Y3JlYXRlVGV4dHVyZShUZXh0dXJlTWFuYWdlciogbWFuYWdlcikKK3sKKyAgICBy
ZXR1cm4gbmV3IEJpdG1hcFRleHR1cmUodGhpcywgTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShtYW5h
Z2VyKSk7Cit9CisKK0xheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBMYXll
clRleHR1cmVVcGRhdGVyQml0bWFwOjpzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVy
ZUZvcm1hdCkKK3sKKyAgICAvLyBUaGUgY29tcG9uZW50IG9yZGVyIG1heSBiZSBiZ3JhIGlmIHdl
IHVwbG9hZGVkIGJncmEgcGl4ZWxzIHRvIHJnYmEgdGV4dHVyZXMuCisgICAgcmV0dXJuIFBsYXRm
b3JtQ29sb3I6OnNhbWVDb21wb25lbnRPcmRlcih0ZXh0dXJlRm9ybWF0KSA/CisgICAgICAgICAg
ICBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBIDogTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0QkdSQTsKK30KKwordm9pZCBMYXllclRleHR1
cmVVcGRhdGVyQml0bWFwOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKQoreworICAgIG1f
dGV4U3ViSW1hZ2Uuc2V0U3ViSW1hZ2VTaXplKHRpbGVTaXplKTsKKyAgICBMYXllclRleHR1cmVV
cGRhdGVyU2tQaWN0dXJlOjpwcmVwYXJlVG9VcGRhdGUoY29udGVudFJlY3QsIHRpbGVTaXplLCBi
b3JkZXJUZXhlbHMpOworfQorCit2b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnByZXBh
cmVUZXh0dXJlUmVjdChTa0NhbnZhcyogY2FudmFzLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
KQoreworICAgIC8vIFRyYW5zbGF0ZSB0aGUgb3JpZ2luIG9mIGNvbnRlbnRSZWN0IHRvIHRoYXQg
b2Ygc291cmNlUmVjdC4KKyAgICBjYW52YXMtPnRyYW5zbGF0ZShjb250ZW50UmVjdCgpLngoKSAt
IHNvdXJjZVJlY3QueCgpLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRSZWN0KCkueSgp
IC0gc291cmNlUmVjdC55KCkpOworICAgIGRyYXdQaWN0dXJlKGNhbnZhcyk7Cit9CisKK3ZvaWQg
TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgTWFuYWdlZFRleHR1
cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRl
c3RSZWN0LCBjb25zdCB1aW50OF90KiBwaXhlbHMpCit7CisgICAgdGV4dHVyZS0+YmluZFRleHR1
cmUoY29udGV4dCwgYWxsb2NhdG9yKTsKKyAgICBtX3RleFN1YkltYWdlLnVwbG9hZChwaXhlbHMs
IGRlc3RSZWN0LCBkZXN0UmVjdCwgZGVzdFJlY3QsIHRleHR1cmUtPmZvcm1hdCgpLCBjb250ZXh0
KTsKK30KKworQml0bWFwVGV4dHVyZTo6Qml0bWFwVGV4dHVyZShMYXllclRleHR1cmVVcGRhdGVy
Qml0bWFwKiB0ZXh0dXJlVXBkYXRlciwgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4dHVy
ZSkKKyAgICA6IENhbnZhc1RleHR1cmUodGV4dHVyZSkKKyAgICAsIG1fYnVmZmVyU2l6ZSgwKQor
ICAgICwgbV90ZXh0dXJlVXBkYXRlcih0ZXh0dXJlVXBkYXRlcikKK3sKK30KKwordm9pZCBCaXRt
YXBUZXh0dXJlOjpwcmVwYXJlUmVjdChjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KQoreworICAg
IHNpemVfdCBidWZmZXJTaXplID0gc291cmNlUmVjdC53aWR0aCgpICogc291cmNlUmVjdC5oZWln
aHQoKSAqIDQ7CisgICAgaWYgKG1fYnVmZmVyU2l6ZSAhPSBidWZmZXJTaXplKQorICAgICAgICBt
X3BpeGVsRGF0YSA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQ4X3RbYnVmZmVyU2l6ZV0pOworCisg
ICAgT3duUHRyPFNrQ2FudmFzPiBjYW52YXMgPSBhZG9wdFB0cihuZXcgc2tpYTo6UGxhdGZvcm1D
YW52YXMoc291cmNlUmVjdC53aWR0aCgpLCBzb3VyY2VSZWN0LmhlaWdodCgpLCBmYWxzZSwgbV9w
aXhlbERhdGEuZ2V0KCkpKTsKKyAgICB0ZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlVGV4dHVyZVJl
Y3QoY2FudmFzLmdldCgpLCBzb3VyY2VSZWN0KTsKK30KKwordm9pZCBCaXRtYXBUZXh0dXJlOjp1
cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBh
bGxvY2F0b3IsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RS
ZWN0KQoreworICAgIHRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZVRleHR1cmVSZWN0KGNvbnRleHQs
IGFsbG9jYXRvciwgdGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCwgbV9waXhlbERhdGEu
Z2V0KCkpOworfQorCitQYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXJGcmFtZUJ1ZmZlcj4g
TGF5ZXJUZXh0dXJlVXBkYXRlckZyYW1lQnVmZmVyOjpjcmVhdGUoUGFzc093blB0cjxMYXllclBh
aW50ZXJDaHJvbWl1bT4gcGFpbnRlcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVy
VGV4dHVyZVVwZGF0ZXJGcmFtZUJ1ZmZlcihwYWludGVyKSk7Cit9CisKK0xheWVyVGV4dHVyZVVw
ZGF0ZXJGcmFtZUJ1ZmZlcjo6TGF5ZXJUZXh0dXJlVXBkYXRlckZyYW1lQnVmZmVyKFBhc3NPd25Q
dHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIpCisgICAgOiBMYXllclRleHR1cmVVcGRh
dGVyU2tQaWN0dXJlKHBhaW50ZXIpCit7Cit9CisKK0xheWVyVGV4dHVyZVVwZGF0ZXJGcmFtZUJ1
ZmZlcjo6fkxheWVyVGV4dHVyZVVwZGF0ZXJGcmFtZUJ1ZmZlcigpCit7Cit9CisKK1VwZGF0YWJs
ZVRleHR1cmUqIExheWVyVGV4dHVyZVVwZGF0ZXJGcmFtZUJ1ZmZlcjo6Y3JlYXRlVGV4dHVyZShU
ZXh0dXJlTWFuYWdlciogbWFuYWdlcikKK3sKKyAgICByZXR1cm4gbmV3IEZyYW1lQnVmZmVyVGV4
dHVyZSh0aGlzLCBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKTsKK30KKworTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IExheWVyVGV4dHVyZVVwZGF0ZXJGcmFt
ZUJ1ZmZlcjo6c2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpCit7Cisg
ICAgLy8gSGVyZSB3ZSBkaXJlY3RseSByZW5kZXIgdG8gdGhlIHRleHR1cmUsIHNvIHRoZSBjb21w
b25lbnQgb3JkZXIgaXMgYWx3YXlzIGNvcnJlY3QuCisgICAgcmV0dXJuIExheWVyVGV4dHVyZVVw
ZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdFJHQkE7Cit9CisKK3ZvaWQgTGF5ZXJUZXh0dXJlVXBk
YXRlckZyYW1lQnVmZmVyOjp1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBNYW5hZ2VkVGV4dHVyZSogdGV4dHVy
ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCiB7
CiAgICAgLy8gTWFrZSBzdXJlIFNLSUEgdXNlcyB0aGUgY29ycmVjdCBHTCBjb250ZXh0LgogICAg
IGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwpAQCAtMjEyLDYgKzMxNSwxNyBAQCB2b2lk
IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OnVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0LAogICAgIC8vIEZsdXNoIFNLSUEgY29udGV4dCBzbyB0aGF0IGFs
bCB0aGUgcmVuZGVyZWQgc3R1ZmYgYXBwZWFycyBvbiB0aGUgdGV4dHVyZS4KICAgICBjb250ZXh0
LT5nckNvbnRleHQoKS0+Zmx1c2goKTsKIH0KKworRnJhbWVCdWZmZXJUZXh0dXJlOjpGcmFtZUJ1
ZmZlclRleHR1cmUoTGF5ZXJUZXh0dXJlVXBkYXRlckZyYW1lQnVmZmVyKiB0ZXh0dXJlVXBkYXRl
ciwgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4dHVyZSkKKyAgICA6IENhbnZhc1RleHR1
cmUodGV4dHVyZSkKKyAgICAsIG1fdGV4dHVyZVVwZGF0ZXIodGV4dHVyZVVwZGF0ZXIpCit7Cit9
CisKK3ZvaWQgRnJhbWVCdWZmZXJUZXh0dXJlOjp1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQoreworICAgIHRleHR1cmVVcGRhdGVy
KCktPnVwZGF0ZVRleHR1cmVSZWN0KGNvbnRleHQsIGFsbG9jYXRvciwgdGV4dHVyZSgpLCBzb3Vy
Y2VSZWN0LCBkZXN0UmVjdCk7Cit9CiAjZW5kaWYgLy8gVVNFKFNLSUEpCiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaAppbmRl
eCBmZmM3MWM2OGZmN2M3ZGM5ODIxY2U5YWM4YTFiNDA4OGFhNTg4Mzg5Li41MTRjYzY4ODgxZDJh
NjcxOGE5YzQxOWE0OWFiNzIyNzc3MTRjNjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJl
VXBkYXRlckNhbnZhcy5oCkBAIC02MywzOCArNjMsMTIwIEBAIHByaXZhdGU6CiAgICAgT3duUHRy
PExheWVyUGFpbnRlckNocm9taXVtPiBtX3BhaW50ZXI7CiB9OwogCi0vLyBBIExheWVyVGV4dHVy
ZVVwZGF0ZXIgd2l0aCBhbiBpbnRlcm5hbCBiaXRtYXAgY2FudmFzLgotY2xhc3MgTGF5ZXJUZXh0
dXJlVXBkYXRlckJpdG1hcCA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzIHsKK2Ns
YXNzIENhbnZhc1RleHR1cmUgOiBwdWJsaWMgVXBkYXRhYmxlVGV4dHVyZSB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcD4gY3JlYXRlKFBh
c3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+LCBib29sIHVzZU1hcFRleFN1YkltYWdlKTsK
KyAgICBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSgpIHsgcmV0dXJuIG1fdGV4dHVyZS5nZXQoKTsg
fQorCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgQ2FudmFzVGV4dHVyZShQYXNzT3duUHRyPE1h
bmFnZWRUZXh0dXJlPik7CisKK3ByaXZhdGU6CisgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBt
X3RleHR1cmU7Cit9OworCisvLyBBIExheWVyVGV4dHVyZVVwZGF0ZXIgd2l0aCBhbiBpbnRlcm5h
bCBwbGF0Zm9ybSBjYW52YXMuCitjbGFzcyBMYXllclRleHR1cmVVcGRhdGVyUGxhdGZvcm1DYW52
YXMgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlclBsYXRmb3JtQ2FudmFzPiBjcmVhdGUo
UGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4sIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2Up
OwogCisgICAgdmlydHVhbCBVcGRhdGFibGVUZXh0dXJlKiBjcmVhdGVUZXh0dXJlKFRleHR1cmVN
YW5hZ2VyKik7CiAgICAgdmlydHVhbCBPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIHsgcmV0dXJu
IExheWVyVGV4dHVyZVVwZGF0ZXI6OkJvdHRvbVVwT3JpZW50YXRpb247IH0KICAgICB2aXJ0dWFs
IFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZv
cm1hdCk7CiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpOwot
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRl
eHR1cmVBbGxvY2F0b3IqLCBNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0
KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIE1hbmFnZWRUZXh0dXJlKiwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOwogCiBw
cml2YXRlOgotICAgIExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXAoUGFzc093blB0cjxMYXllclBh
aW50ZXJDaHJvbWl1bT4sIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpOworICAgIExheWVyVGV4dHVy
ZVVwZGF0ZXJQbGF0Zm9ybUNhbnZhcyhQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiwg
Ym9vbCB1c2VNYXBUZXhTdWJJbWFnZSk7CisKICAgICBQbGF0Zm9ybUNhbnZhcyBtX2NhbnZhczsK
ICAgICBMYXllclRleHR1cmVTdWJJbWFnZSBtX3RleFN1YkltYWdlOwogfTsKIAorY2xhc3MgUGxh
dGZvcm1DYW52YXNUZXh0dXJlIDogcHVibGljIENhbnZhc1RleHR1cmUgeworcHVibGljOgorICAg
IFBsYXRmb3JtQ2FudmFzVGV4dHVyZShMYXllclRleHR1cmVVcGRhdGVyUGxhdGZvcm1DYW52YXMq
LCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPik7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFy
ZVJlY3QoY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworCitwcml2YXRlOgor
ICAgIExheWVyVGV4dHVyZVVwZGF0ZXJQbGF0Zm9ybUNhbnZhcyogdGV4dHVyZVVwZGF0ZXIoKSB7
IHJldHVybiBtX3RleHR1cmVVcGRhdGVyOyB9CisKKyAgICBMYXllclRleHR1cmVVcGRhdGVyUGxh
dGZvcm1DYW52YXMqIG1fdGV4dHVyZVVwZGF0ZXI7Cit9OworCiAjaWYgVVNFKFNLSUEpCiBjbGFz
cyBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0
ZXJDYW52YXMgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyVGV4dHVyZVVw
ZGF0ZXJTa1BpY3R1cmU+IGNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPik7
Ci0gICAgdmlydHVhbCB+TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZSgpOworICAgIGV4cGxp
Y2l0IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUoUGFzc093blB0cjxMYXllclBhaW50ZXJD
aHJvbWl1bT4pOwogCi0gICAgdmlydHVhbCBPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIHsgcmV0
dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRvcERvd25PcmllbnRhdGlvbjsgfQorICAgIHZpcnR1
YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0
IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKTsKKyAgICB2b2lkIGRyYXdQaWN0
dXJlKFNrQ2FudmFzKik7CisKK3Byb3RlY3RlZDoKKyAgICBTa1BpY3R1cmUgbV9waWN0dXJlOyAv
LyBSZWNvcmRpbmcgY2FudmFzLgorfTsKKworY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1h
cCA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyQml0bWFwPiBjcmVhdGUoUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4sIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpOworCisg
ICAgdmlydHVhbCBVcGRhdGFibGVUZXh0dXJlKiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2Vy
Kik7CisgICAgdmlydHVhbCBPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIHsgcmV0dXJuIExheWVy
VGV4dHVyZVVwZGF0ZXI6OkJvdHRvbVVwT3JpZW50YXRpb247IH0KICAgICB2aXJ0dWFsIFNhbXBs
ZWRUZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCk7
CiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50
UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpOwotICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVB
bGxvY2F0b3IqLCBNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICB2b2lkIHByZXBhcmVUZXh0dXJlUmVjdChTa0Nh
bnZhcyosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QpOworICAgIHZvaWQgdXBkYXRlVGV4dHVy
ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1
cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgdWludDhfdCogcGl4ZWxzKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBMYXllclRl
eHR1cmVVcGRhdGVyU2tQaWN0dXJlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+KTsK
LSAgCi0gICAgU2tQaWN0dXJlIG1fcGljdHVyZTsgLy8gUmVjb3JkaW5nIGNhbnZhcy4KKyAgICBM
YXllclRleHR1cmVVcGRhdGVyQml0bWFwKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+
LCBib29sIHVzZU1hcFRleFN1YkltYWdlKTsKKworICAgIExheWVyVGV4dHVyZVN1YkltYWdlIG1f
dGV4U3ViSW1hZ2U7Cit9OworCitjbGFzcyBCaXRtYXBUZXh0dXJlIDogcHVibGljIENhbnZhc1Rl
eHR1cmUgeworcHVibGljOgorICAgIEJpdG1hcFRleHR1cmUoTGF5ZXJUZXh0dXJlVXBkYXRlckJp
dG1hcCosIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+KTsKKworICAgIHZpcnR1YWwgdm9pZCBw
cmVwYXJlUmVjdChjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CisKK3ByaXZhdGU6
CisgICAgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcCogdGV4dHVyZVVwZGF0ZXIoKSB7IHJldHVy
biBtX3RleHR1cmVVcGRhdGVyOyB9CisKKyAgICBzaXplX3QgbV9idWZmZXJTaXplOworICAgIE93
bkFycmF5UHRyPHVpbnQ4X3Q+IG1fcGl4ZWxEYXRhOworICAgIExheWVyVGV4dHVyZVVwZGF0ZXJC
aXRtYXAqIG1fdGV4dHVyZVVwZGF0ZXI7Cit9OworCitjbGFzcyBMYXllclRleHR1cmVVcGRhdGVy
RnJhbWVCdWZmZXIgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZSB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlckZyYW1lQnVmZmVy
PiBjcmVhdGUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOworICAgIHZpcnR1YWwg
fkxheWVyVGV4dHVyZVVwZGF0ZXJGcmFtZUJ1ZmZlcigpOworCisgICAgdmlydHVhbCBVcGRhdGFi
bGVUZXh0dXJlKiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKik7CisgICAgdmlydHVhbCBP
cmllbnRhdGlvbiBvcmllbnRhdGlvbigpIHsgcmV0dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRv
cERvd25PcmllbnRhdGlvbjsgfQorICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBs
ZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKKyAgICB2aXJ0dWFsIHZvaWQg
cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXpl
JiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscykgeyB9CisgICAgdm9pZCB1cGRhdGVUZXh0dXJl
UmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBNYW5hZ2VkVGV4dHVy
ZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsK
KworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBMYXllclRleHR1cmVVcGRhdGVyRnJhbWVCdWZmZXIo
UGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOworfTsKKworY2xhc3MgRnJhbWVCdWZm
ZXJUZXh0dXJlIDogcHVibGljIENhbnZhc1RleHR1cmUgeworcHVibGljOgorICAgIEZyYW1lQnVm
ZmVyVGV4dHVyZShMYXllclRleHR1cmVVcGRhdGVyRnJhbWVCdWZmZXIqLCBQYXNzT3duUHRyPE1h
bmFnZWRUZXh0dXJlPik7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVJlY3QoY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJlY3QoR3JhcGhp
Y3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworCitwcml2YXRlOgorICAgIExheWVyVGV4dHVy
ZVVwZGF0ZXJGcmFtZUJ1ZmZlciogdGV4dHVyZVVwZGF0ZXIoKSB7IHJldHVybiBtX3RleHR1cmVV
cGRhdGVyOyB9CisKKyAgICBMYXllclRleHR1cmVVcGRhdGVyRnJhbWVCdWZmZXIqIG1fdGV4dHVy
ZVVwZGF0ZXI7CiB9OworCiAjZW5kaWYgLy8gVVNFKFNLSUEpCiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCmluZGV4IGZjYzQ2ZDk5M2Q1NDBh
NDIxOWQ3ZjI3MDEwMDE4NzM4ZWY3YjhmZmUuLjZjODcyOTFhYjEyNjUzNmM0ZDNlMDEwMjZlMDBk
ZjNlMjQ1NjQyNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcApAQCAtNTEsMTcg
KzUxLDIwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFVwZGF0YWJsZVRpbGUgOiBwdWJs
aWMgQ0NMYXllclRpbGluZ0RhdGE6OlRpbGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFVw
ZGF0YWJsZVRpbGUpOwogcHVibGljOgotICAgIGV4cGxpY2l0IFVwZGF0YWJsZVRpbGUoUGFzc093
blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4KSA6IG1fdGV4KHRleCkgeyB9CisgICAgZXhwbGljaXQg
VXBkYXRhYmxlVGlsZShQYXNzUmVmUHRyPFVwZGF0YWJsZVRleHR1cmU+IHRleCkgOiBtX3RleCh0
ZXgpIHsgfQogCi0gICAgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleC5n
ZXQoKTsgfQorICAgIFVwZGF0YWJsZVRleHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleC5n
ZXQoKTsgfQorICAgIE1hbmFnZWRUZXh0dXJlKiBtYW5hZ2VkVGV4dHVyZSgpIHsgcmV0dXJuIG1f
dGV4LT50ZXh0dXJlKCk7IH0KIAogICAgIGJvb2wgZGlydHkoKSBjb25zdCB7IHJldHVybiAhbV9k
aXJ0eUxheWVyUmVjdC5pc0VtcHR5KCk7IH0KICAgICB2b2lkIGNsZWFyRGlydHkoKSB7IG1fZGly
dHlMYXllclJlY3QgPSBJbnRSZWN0KCk7IH0KIAogICAgIC8vIExheWVyLXNwYWNlIGRpcnR5IHJl
Y3RhbmdsZSB0aGF0IG5lZWRzIHRvIGJlIHJlcGFpbnRlZC4KICAgICBJbnRSZWN0IG1fZGlydHlM
YXllclJlY3Q7CisgICAgLy8gUGFnZS1zcGFjZSByZWN0YW5nbGUgdGhhdCBuZWVkcyB0byBiZSB1
cGRhdGVkLgorICAgIEludFJlY3QgbV91cGRhdGVSZWN0OwogcHJpdmF0ZToKLSAgICBPd25QdHI8
TWFuYWdlZFRleHR1cmU+IG1fdGV4OworICAgIFJlZlB0cjxVcGRhdGFibGVUZXh0dXJlPiBtX3Rl
eDsKIH07CiAKIFRpbGVkTGF5ZXJDaHJvbWl1bTo6VGlsZWRMYXllckNocm9taXVtKENDTGF5ZXJE
ZWxlZ2F0ZSogZGVsZWdhdGUpCkBAIC0xNjcsMTcgKzE3MCwxMiBAQCB2b2lkIFRpbGVkTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCwgQwogICAgICAgICAgICAgZWxzZSBpZiAoIXRpbGUtPmRpcnR5KCkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBwYWdlLXNwYWNlIHJl
Y3RhbmdsZSB0byBjb3B5IGZyb20uCi0gICAgICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSBt
X3RpbGVyLT50aWxlQ29udGVudFJlY3QodGlsZSk7Ci0gICAgICAgICAgICBjb25zdCBJbnRQb2lu
dCBhbmNob3IgPSBzb3VyY2VSZWN0LmxvY2F0aW9uKCk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0
LmludGVyc2VjdChtX3RpbGVyLT5sYXllclJlY3RUb0NvbnRlbnRSZWN0KHRpbGUtPm1fZGlydHlM
YXllclJlY3QpKTsKLSAgICAgICAgICAgIC8vIFBhaW50IHJlY3Qgbm90IGd1YXJhbnRlZWQgdG8g
bGluZSB1cCBvbiB0aWxlIGJvdW5kYXJpZXMsIHNvCi0gICAgICAgICAgICAvLyBtYWtlIHN1cmUg
dGhhdCBzb3VyY2VSZWN0IGRvZXNuJ3QgZXh0ZW5kIG91dHNpZGUgb2YgaXQuCi0gICAgICAgICAg
ICBzb3VyY2VSZWN0LmludGVyc2VjdChtX3BhaW50UmVjdCk7Ci0gICAgICAgICAgICBpZiAoc291
cmNlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB0aWxl
LT5tX3VwZGF0ZVJlY3Q7CisgICAgICAgICAgICBpZiAodGlsZS0+bV91cGRhdGVSZWN0LmlzRW1w
dHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgQVNTRVJUKHRp
bGUtPnRleHR1cmUoKS0+aXNSZXNlcnZlZCgpKTsKKyAgICAgICAgICAgIEFTU0VSVCh0aWxlLT5t
YW5hZ2VkVGV4dHVyZSgpLT5pc1Jlc2VydmVkKCkpOworICAgICAgICAgICAgY29uc3QgSW50UG9p
bnQgYW5jaG9yID0gbV90aWxlci0+dGlsZUNvbnRlbnRSZWN0KHRpbGUpLmxvY2F0aW9uKCk7CiAK
ICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aWxlLXNwYWNlIHJlY3RhbmdsZSB0byB1cGxvYWQg
aW50by4KICAgICAgICAgICAgIEludFJlY3QgZGVzdFJlY3QoSW50UG9pbnQoc291cmNlUmVjdC54
KCkgLSBhbmNob3IueCgpLCBzb3VyY2VSZWN0LnkoKSAtIGFuY2hvci55KCkpLCBzb3VyY2VSZWN0
LnNpemUoKSk7CkBAIC0xOTcsMTIgKzE5NSwxMiBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgQwog
ICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LnkoKSArIGRlc3RSZWN0LmhlaWdodCgpID4gbV9w
YWludFJlY3QuaGVpZ2h0KCkpCiAgICAgICAgICAgICAgICAgQ1JBU0goKTsKIAotICAgICAgICAg
ICAgdGlsZS0+dGV4dHVyZSgpLT5iaW5kVGV4dHVyZShjb250ZXh0LCB1cGRhdGVyLmFsbG9jYXRv
cigpKTsKKyAgICAgICAgICAgIHRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPmJpbmRUZXh0dXJlKGNv
bnRleHQsIHVwZGF0ZXIuYWxsb2NhdG9yKCkpOwogICAgICAgICAgICAgY29uc3QgR0MzRGludCBm
aWx0ZXIgPSBtX3RpbGVyLT5oYXNCb3JkZXJUZXhlbHMoKSA/IEdyYXBoaWNzQ29udGV4dDNEOjpM
SU5FQVIgOiBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVDsKICAgICAgICAgICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBmaWx0ZXIpKTsKICAgICAg
ICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBm
aWx0ZXIpKTsKIAotICAgICAgICAgICAgdXBkYXRlci5hcHBlbmQodGlsZS0+dGV4dHVyZSgpLCB0
ZXh0dXJlVXBkYXRlcigpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CisgICAgICAgICAgICB1cGRh
dGVyLmFwcGVuZCh0aWxlLT50ZXh0dXJlKCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0KTsKICAgICAg
ICAgICAgIHRpbGUtPmNsZWFyRGlydHkoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI0MCwxMCAr
MjM4LDEwIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5
ZXJJbXBsKiBsYXllcikKICAgICAgICAgaW50IGkgPSBpdGVyLT5maXJzdC5maXJzdDsKICAgICAg
ICAgaW50IGogPSBpdGVyLT5maXJzdC5zZWNvbmQ7CiAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRp
bGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+c2Vjb25kLmdldCgpKTsKLSAg
ICAgICAgaWYgKCF0aWxlLT50ZXh0dXJlKCktPmlzVmFsaWQobV90aWxlci0+dGlsZVNpemUoKSwg
bV90ZXh0dXJlRm9ybWF0KSkKKyAgICAgICAgaWYgKCF0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5p
c1ZhbGlkKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICB0aWxlZExheWVyLT5zeW5jVGV4dHVyZUlkKGksIGosIHRp
bGUtPnRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOworICAgICAgICB0aWxlZExheWVyLT5zeW5jVGV4
dHVyZUlkKGksIGosIHRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPnRleHR1cmVJZCgpKTsKICAgICB9
CiB9CiAKQEAgLTI2MSw3ICsyNTksNyBAQCBVcGRhdGFibGVUaWxlKiBUaWxlZExheWVyQ2hyb21p
dW06OnRpbGVBdChpbnQgaSwgaW50IGopIGNvbnN0CiAKIFVwZGF0YWJsZVRpbGUqIFRpbGVkTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlVGlsZShpbnQgaSwgaW50IGopCiB7Ci0gICAgUmVmUHRyPFVwZGF0
YWJsZVRpbGU+IHRpbGUgPSBhZG9wdFJlZihuZXcgVXBkYXRhYmxlVGlsZShNYW5hZ2VkVGV4dHVy
ZTo6Y3JlYXRlKHRleHR1cmVNYW5hZ2VyKCkpKSk7CisgICAgUmVmUHRyPFVwZGF0YWJsZVRpbGU+
IHRpbGUgPSBhZG9wdFJlZihuZXcgVXBkYXRhYmxlVGlsZShhZG9wdFJlZih0ZXh0dXJlVXBkYXRl
cigpLT5jcmVhdGVUZXh0dXJlKHRleHR1cmVNYW5hZ2VyKCkpKSkpOwogICAgIG1fdGlsZXItPmFk
ZFRpbGUodGlsZSwgaSwgaik7CiAgICAgdGlsZS0+bV9kaXJ0eUxheWVyUmVjdCA9IG1fdGlsZXIt
PnRpbGVMYXllclJlY3QodGlsZS5nZXQoKSk7CiAKQEAgLTMwOSwxMCArMzA3LDEwIEBAIHZvaWQg
VGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VGlsZVRleHR1cmVzKGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0KQogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKICAg
ICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewogICAgICAgICAgICAg
VXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKLSAgICAgICAgICAgIGlmICghdGls
ZSB8fCAhdGlsZS0+dGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4
dHVyZUZvcm1hdCkpCisgICAgICAgICAgICBpZiAoIXRpbGUgfHwgIXRpbGUtPm1hbmFnZWRUZXh0
dXJlKCktPmlzVmFsaWQobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5y
ZXNlcnZlKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCk7CisgICAgICAgICAg
ICB0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5yZXNlcnZlKG1fdGlsZXItPnRpbGVTaXplKCksIG1f
dGV4dHVyZUZvcm1hdCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zNDYsMTAgKzM0NCwxMCBA
QCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0KQogICAgICAgICAgICAgaWYgKCF0aWxlKQogICAgICAgICAgICAgICAgIHRp
bGUgPSBjcmVhdGVUaWxlKGksIGopOwogCi0gICAgICAgICAgICBpZiAoIXRpbGUtPnRleHR1cmUo
KS0+aXNWYWxpZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKQorICAgICAg
ICAgICAgaWYgKCF0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVT
aXplKCksIG1fdGV4dHVyZUZvcm1hdCkpCiAgICAgICAgICAgICAgICAgdGlsZS0+bV9kaXJ0eUxh
eWVyUmVjdCA9IG1fdGlsZXItPnRpbGVMYXllclJlY3QodGlsZSk7CiAKLSAgICAgICAgICAgIGlm
ICghdGlsZS0+dGV4dHVyZSgpLT5yZXNlcnZlKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVy
ZUZvcm1hdCkpIHsKKyAgICAgICAgICAgIGlmICghdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+cmVz
ZXJ2ZShtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKSB7CiAgICAgICAgICAg
ICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOwogICAgICAgICAgICAgICAgIGNsZWFudXBSZXNvdXJj
ZXMoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0zNzQsNiArMzcyLDMxIEBAIHZvaWQg
VGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QpCiAgICAgLy8gc28gd2UgZ3JhYiBhIGxvY2FsIHJlZmVyZW5jZSBoZXJlIHRvIGhvbGQg
dGhlIHVwZGF0ZXIgYWxpdmUgdW50aWwgdGhlIHBhaW50IGNvbXBsZXRlcy4KICAgICBSZWZQdHI8
TGF5ZXJUZXh0dXJlVXBkYXRlcj4gcHJvdGVjdG9yKHRleHR1cmVVcGRhdGVyKCkpOwogICAgIHRl
eHR1cmVVcGRhdGVyKCktPnByZXBhcmVUb1VwZGF0ZShtX3BhaW50UmVjdCwgbV90aWxlci0+dGls
ZVNpemUoKSwgbV90aWxlci0+aGFzQm9yZGVyVGV4ZWxzKCkpOworCisgICAgbV90aWxlci0+Y29u
dGVudFJlY3RUb1RpbGVJbmRpY2VzKG1fcmVxdWVzdGVkVXBkYXRlUmVjdCwgbGVmdCwgdG9wLCBy
aWdodCwgYm90dG9tKTsKKyAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7
CisgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKKyAgICAgICAg
ICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CisgICAgICAgICAgICBpZiAo
IXRpbGUpCisgICAgICAgICAgICAgICAgdGlsZSA9IGNyZWF0ZVRpbGUoaSwgaik7CisgICAgICAg
ICAgICBlbHNlIGlmICghdGlsZS0+ZGlydHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHBhZ2Utc3BhY2UgcmVjdGFuZ2xlIHRvIGNvcHkg
ZnJvbS4KKyAgICAgICAgICAgIEludFJlY3Qgc291cmNlUmVjdCA9IG1fdGlsZXItPnRpbGVDb250
ZW50UmVjdCh0aWxlKTsKKyAgICAgICAgICAgIGNvbnN0IEludFBvaW50IGFuY2hvciA9IHNvdXJj
ZVJlY3QubG9jYXRpb24oKTsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KG1fdGls
ZXItPmxheWVyUmVjdFRvQ29udGVudFJlY3QodGlsZS0+bV9kaXJ0eUxheWVyUmVjdCkpOworICAg
ICAgICAgICAgLy8gUGFpbnQgcmVjdCBub3QgZ3VhcmFudGVlZCB0byBsaW5lIHVwIG9uIHRpbGUg
Ym91bmRhcmllcywgc28KKyAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHNvdXJjZVJlY3Qg
ZG9lc24ndCBleHRlbmQgb3V0c2lkZSBvZiBpdC4KKyAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50
ZXJzZWN0KG1fcGFpbnRSZWN0KTsKKworICAgICAgICAgICAgdGlsZS0+bV91cGRhdGVSZWN0ID0g
c291cmNlUmVjdDsKKyAgICAgICAgICAgIGlmIChzb3VyY2VSZWN0LmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5wcmVw
YXJlUmVjdChzb3VyY2VSZWN0KTsKKyAgICAgICAgfQorICAgIH0KIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJl
VXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RleHR1cmVVcGRhdGVyLmNwcAppbmRleCA5ODQzNzBlZGE5NWM1MjNmNTllZTU1Yzg3YWM4
Mjg3MWUwMmE3M2JiLi45NjZkY2E4MTk5NWQwNGJhMmNhYjYzZDI3NTU0NzFlZWU5ODA3MzE5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcApAQCAtNDgsMTQgKzQ4LDEyIEBAIEND
VGV4dHVyZVVwZGF0ZXI6On5DQ1RleHR1cmVVcGRhdGVyKCkKIHsKIH0KIAotdm9pZCBDQ1RleHR1
cmVVcGRhdGVyOjphcHBlbmQoTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIExheWVyVGV4dHVyZVVw
ZGF0ZXIqIHVwZGF0ZXIsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3Qm
IGRlc3RSZWN0KQordm9pZCBDQ1RleHR1cmVVcGRhdGVyOjphcHBlbmQoVXBkYXRhYmxlVGV4dHVy
ZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVz
dFJlY3QpCiB7CiAgICAgQVNTRVJUKHRleHR1cmUpOwotICAgIEFTU0VSVCh1cGRhdGVyKTsKIAog
ICAgIFVwZGF0ZUVudHJ5IGVudHJ5OwogICAgIGVudHJ5Lm1fdGV4dHVyZSA9IHRleHR1cmU7Ci0g
ICAgZW50cnkubV91cGRhdGVyID0gdXBkYXRlcjsKICAgICBlbnRyeS5tX3NvdXJjZVJlY3QgPSBz
b3VyY2VSZWN0OwogICAgIGVudHJ5Lm1fZGVzdFJlY3QgPSBkZXN0UmVjdDsKICAgICBtX2VudHJp
ZXMuYXBwZW5kKGVudHJ5KTsKQEAgLTcxLDcgKzY5LDcgQEAgYm9vbCBDQ1RleHR1cmVVcGRhdGVy
Ojp1cGRhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHNpemVfdCBjb3VudCkKICAgICBz
aXplX3QgbWF4SW5kZXggPSBtaW4obV9lbnRyeUluZGV4ICsgY291bnQsIG1fZW50cmllcy5zaXpl
KCkpOwogICAgIGZvciAoOyBtX2VudHJ5SW5kZXggPCBtYXhJbmRleDsgKyttX2VudHJ5SW5kZXgp
IHsKICAgICAgICAgVXBkYXRlRW50cnkmIGVudHJ5ID0gbV9lbnRyaWVzW21fZW50cnlJbmRleF07
Ci0gICAgICAgIGVudHJ5Lm1fdXBkYXRlci0+dXBkYXRlVGV4dHVyZVJlY3QoY29udGV4dCwgbV9h
bGxvY2F0b3IsIGVudHJ5Lm1fdGV4dHVyZSwgZW50cnkubV9zb3VyY2VSZWN0LCBlbnRyeS5tX2Rl
c3RSZWN0KTsKKyAgICAgICAgZW50cnkubV90ZXh0dXJlLT51cGRhdGVSZWN0KGNvbnRleHQsIG1f
YWxsb2NhdG9yLCBlbnRyeS5tX3NvdXJjZVJlY3QsIGVudHJ5Lm1fZGVzdFJlY3QpOwogICAgIH0K
IAogICAgIGlmIChtYXhJbmRleCA8IG1fZW50cmllcy5zaXplKCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1
cmVVcGRhdGVyLmgKaW5kZXggMTdiOGFhZmEwNmNlN2E2ZDIwYTBlNWZiNGM5MTRlNzJmYzkzOTRh
MS4uNDMzZmY0MDk2ZDc4YzYxMTM5YzcxNjk1OWJmMWM5Njc1ODZkZmRjOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBk
YXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGV4dHVyZVVwZGF0ZXIuaApAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlcjsK
LWNsYXNzIE1hbmFnZWRUZXh0dXJlOworY2xhc3MgVXBkYXRhYmxlVGV4dHVyZTsKIGNsYXNzIFRl
eHR1cmVBbGxvY2F0b3I7CiAKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXIgewpAQCAtNDEsNyArNDEs
NyBAQCBwdWJsaWM6CiAgICAgQ0NUZXh0dXJlVXBkYXRlcihUZXh0dXJlQWxsb2NhdG9yKik7CiAg
ICAgfkNDVGV4dHVyZVVwZGF0ZXIoKTsKIAotICAgIHZvaWQgYXBwZW5kKE1hbmFnZWRUZXh0dXJl
KiwgTGF5ZXJUZXh0dXJlVXBkYXRlciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0
IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICB2b2lkIGFwcGVuZChVcGRhdGFibGVUZXh0dXJlKiwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOwogCiAg
ICAgYm9vbCBoYXNNb3JlVXBkYXRlcygpIGNvbnN0OwogCkBAIC01NCw4ICs1NCw3IEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgVXBkYXRlRW50cnkgewotICAgICAgICBNYW5hZ2Vk
VGV4dHVyZSogbV90ZXh0dXJlOwotICAgICAgICBMYXllclRleHR1cmVVcGRhdGVyKiBtX3VwZGF0
ZXI7CisgICAgICAgIFVwZGF0YWJsZVRleHR1cmUqIG1fdGV4dHVyZTsKICAgICAgICAgSW50UmVj
dCBtX3NvdXJjZVJlY3Q7CiAgICAgICAgIEludFJlY3QgbV9kZXN0UmVjdDsKICAgICB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114089</attachid>
            <date>2011-11-08 09:14:57 -0800</date>
            <delta_ts>2011-11-08 10:11:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71388-20111108121456.patch</filename>
            <type>text/plain</type>
            <size>67981</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTkwOTIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3MmY2MjZiN2EzYjQ0OWVl
Mjc0YTU1Mzg3YTc4MGVkMzMyMzI1YmI0Li4yZDdjYzU4NWE5MmQzN2ZiNWVlN2UzNDJmNjc1MWU4
NWU5YzgxMjczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA2IEBACisyMDExLTExLTA4ICBEYXZp
ZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBB
ZGQgc3VwcG9ydCBmb3IgcGFpbnRpbmcgaW50byBhbiBTa1BpY3R1cmUgYW5kIHRoZW4gcmFzdGVy
aXppbmcgaW50byB0aWxlLXNpemVkIGNodW5rcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMzg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIFVwZGF0YWJsZVRleHR1cmUgY2xhc3MsIHdoaWNoIGFs
bG93cyB0ZXh0dXJlIHVwZGF0ZXIgdG8KKyAgICAgICAgYWxsb2NhdGUgdGlsZSBzcGVjaWZpYyBy
ZXNvdXJjZXMgYW5kIHBhaW50IHRpbGVzIHNlcGFyYXRlbHkuCisgICAgICAgIFJlbmFtZSB0ZXh0
dXJlIHVwbG9hZGVyIGNsYXNzZXMgYW5kIG1vdmUgdG8gc2VwYXJhdGUgZmlsZXMuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLiBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICog
V2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1h
cExheWVyVGV4dHVyZVVwZGF0ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OlRleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6dXBkYXRlUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Qml0bWFwTGF5ZXJUZXh0dXJl
VXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBMYXllclRleHR1cmVVcGRhdGVyOjpj
cmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcExheWVyVGV4dHVyZVVwZGF0
ZXI6OnNhbXBsZWRUZXhlbEZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBMYXllclRl
eHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBkYXRlVGV4dHVyZVJlY3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcExheWVyVGV4dHVyZVVwZGF0ZXIuaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4
dHVyZVVwZGF0ZXJDYW52YXMuaC4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcExheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmU6OnByZXBhcmVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnRleHR1cmVVcGRhdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcExheWVyVGV4dHVyZVVwZGF0ZXI6Om9yaWVudGF0aW9uKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVy
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwYWludENvbnRlbnRzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGV4dHVyZVVwZGF0ZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OmNvbnRlbnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXIuY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVm
ZmVyOjpGcmFtZUJ1ZmZlcjo6RnJhbWVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVC
dWZmZXI6OkZyYW1lQnVmZmVyOjp+RnJhbWVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVCdWZmZXI6OkZyYW1lQnVmZmVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OlRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVy
ZTo6dXBkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNraWFMYXllclRl
eHR1cmVVcGRhdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVCdWZmZXJTa2lh
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6RnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlcik6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNraWFMYXllclRleHR1cmVVcGRhdGVyOjp+
RnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUJ1ZmZlclNraWFMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGVUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXI6OnNhbXBsZWRU
ZXhlbEZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNraWFMYXllclRleHR1
cmVVcGRhdGVyOjp1cGRhdGVUZXh0dXJlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlci5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1
cmVVcGRhdGVyLmguCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNraWFMYXllclRleHR1
cmVVcGRhdGVyOjpUZXh0dXJlOjpwcmVwYXJlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZUJ1ZmZlclNraWFMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjp0ZXh0dXJlVXBkYXRlcik6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNraWFMYXllclRleHR1cmVVcGRhdGVyOjpv
cmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNraWFMYXllclRleHR1
cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUxheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OlRleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpwcmVwYXJlUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnVwZGF0ZVJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJl
Ojp0ZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVyZVVw
ZGF0ZXI6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6flRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6dGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OkNhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBMYXllclRleHR1cmVV
cGRhdGVyOjpUZXh0dXJlOjpUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcExheWVy
VGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnVwZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcExheWVyVGV4dHVyZVVwZGF0ZXI6OkJpdG1hcExheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBMYXllclRleHR1cmVVcGRhdGVyOjpzYW1wbGVkVGV4
ZWxGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcExheWVyVGV4dHVyZVVw
ZGF0ZXI6OnVwZGF0ZVRleHR1cmVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNraWFMYXllclRl
eHR1cmVVcGRhdGVyOjpTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNraWFMYXllclRleHR1cmVVcGRhdGVyOjpkcmF3UGljdHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUJ1ZmZlclNraWFMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0
ZXI6OlRleHR1cmU6OnVwZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVCdWZmZXJT
a2lhTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
QnVmZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXI6OkZyYW1lQnVmZmVyU2tpYUxheWVyVGV4dHVy
ZVVwZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6fkZyYW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlVGV4dHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNraWFMYXllclRleHR1cmVVcGRhdGVy
OjpzYW1wbGVkVGV4ZWxGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVCdWZmZXJTa2lh
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBkYXRlVGV4dHVyZVJlY3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1NraWFMYXllclRleHR1cmVVcGRhdGVyLmNwcDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0
dXJlVXBkYXRlci5oLgorICAgICAgICAoV2ViQ29yZTo6U2tpYUxheWVyVGV4dHVyZVVwZGF0ZXI6
OlNraWFMYXllclRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNraWFMYXllclRl
eHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2tpYUxh
eWVyVGV4dHVyZVVwZGF0ZXI6OmRyYXdQaWN0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Ta2lhTGF5ZXJUZXh0dXJlVXBkYXRlci5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVy
LmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0YWJsZVRpbGU6OlVwZGF0YWJsZVRpbGUp
OgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRhYmxlVGlsZTo6dGV4dHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpVcGRhdGFibGVUaWxlOjptYW5hZ2VkVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByb3RlY3RUaWxlVGV4dHVyZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlVXBkYXRlcjo6YXBwZW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oOgorCiAyMDExLTExLTAyICBUb21t
eSBXaWRlbmZseWNodCAgPHRvbW15d0Bnb29nbGUuY29tPgogCiAgICAgICAgIE1lZGlhU3RyZWFt
UmVnaXN0cnkgc2hvdWxkIGhvbGQgcmVmZXJlbmNlcyB0byBNZWRpYVN0cmVhbURlc2NyaXB0b3Ig
cmF0aGVyIHRoYW4gTWVkaWFTdHJlYW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA0YmI2MjQ3MDAxMzMz
MmM3ZGVmNTE4YWY4NGM4YjFlZTg1ZjdjNTk2Li5iZmNlOTE1Mzk3ZmYyMzg1Y2VhMTM5OWJiZjRh
ZjVlODdjMGI1Y2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNDM4LDEwICszNDM4LDE0IEBACiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcExheWVyVGV4dHVyZVVwZGF0ZXIu
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBMYXll
clRleHR1cmVVcGRhdGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5o
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxp
bnV4LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmNwcCcsCkBAIC0zNDYyLDYgKzM0NjYsOCBAQAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRSZW5kZXJTdHlsZS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9taXVt
V2luLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVm
ZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNraWFMYXllclRleHR1cmVVcGRhdGVyLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dlb21ldHJ5QmluZGluZy5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dlb21ldHJ5Qmlu
ZGluZy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HbHlwaFBh
Z2VUcmVlTm9kZUNocm9taXVtV2luLmNwcCcsCkBAIC0zNDg1LDggKzM0OTEsNiBAQAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJl
U3ViSW1hZ2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJUZXh0dXJlVXBkYXRlci5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ob25Db21wb3NpdGVkQ29udGVudEhv
c3QuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ob25Db21w
b3NpdGVkQ29udGVudEhvc3QuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uaCcsCkBAIC0zNTA4LDYgKzM1MTIsOCBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVt
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnRE
YXRhQ2hyb21pdW1XaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9TaW1wbGVGb250RGF0YUxpbnV4LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXIuY3BwJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta2lhTGF5ZXJUZXh0dXJlVXBkYXRlci5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVB
bGxvY2F0b3IuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
cmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcExheWVyVGV4dHVyZVVwZGF0ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwTGF5
ZXJUZXh0dXJlVXBkYXRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGJkM2ViNmY2MTRlMjAzZTVjZGI5ZTA2
MDcxZWI0OGU2MjMzYTVhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcExheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCkBAIC0w
LDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkJpdG1hcExheWVyVGV4dHVyZVVwZGF0
ZXIuaCIKKworI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1Db2xvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0JpdG1hcExheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmU6OlRleHR1cmUoQml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4
dHVyZVVwZGF0ZXIsIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IHRleHR1cmUpCisgICAgOiBM
YXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKHRleHR1cmUpCisgICAgLCBtX3RleHR1cmVVcGRh
dGVyKHRleHR1cmVVcGRhdGVyKQoreworfQorCit2b2lkIEJpdG1hcExheWVyVGV4dHVyZVVwZGF0
ZXI6OlRleHR1cmU6OnVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1
cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3Qg
SW50UmVjdCYgZGVzdFJlY3QpCit7CisgICAgdGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlVGV4dHVy
ZVJlY3QoY29udGV4dCwgYWxsb2NhdG9yLCB0ZXh0dXJlKCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0
KTsKK30KKworUGFzc1JlZlB0cjxCaXRtYXBMYXllclRleHR1cmVVcGRhdGVyPiBCaXRtYXBMYXll
clRleHR1cmVVcGRhdGVyOjpjcmVhdGUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4g
cGFpbnRlciwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEJpdG1hcExheWVyVGV4dHVyZVVwZGF0ZXIocGFpbnRlciwgdXNlTWFwVGV4U3ViSW1hZ2Up
KTsKK30KKworQml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Qml0bWFwTGF5ZXJUZXh0dXJlVXBk
YXRlcihQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyLCBib29sIHVzZU1h
cFRleFN1YkltYWdlKQorICAgIDogQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihwYWludGVyKQor
ICAgICwgbV90ZXhTdWJJbWFnZSh1c2VNYXBUZXhTdWJJbWFnZSkKK3sKK30KKworTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6VGV4dHVyZSogQml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlVGV4
dHVyZShUZXh0dXJlTWFuYWdlciogbWFuYWdlcikKK3sKKyAgICByZXR1cm4gbmV3IFRleHR1cmUo
dGhpcywgTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShtYW5hZ2VyKSk7Cit9CisKK0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBCaXRtYXBMYXllclRleHR1cmVVcGRhdGVyOjpz
YW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkKK3sKKyAgICAvLyBUaGUg
Y29tcG9uZW50IG9yZGVyIG1heSBiZSBiZ3JhIGlmIHdlIHVwbG9hZGVkIGJncmEgcGl4ZWxzIHRv
IHJnYmEgdGV4dHVyZXMuCisgICAgcmV0dXJuIFBsYXRmb3JtQ29sb3I6OnNhbWVDb21wb25lbnRP
cmRlcih0ZXh0dXJlRm9ybWF0KSA/CisgICAgICAgICAgICBMYXllclRleHR1cmVVcGRhdGVyOjpT
YW1wbGVkVGV4ZWxGb3JtYXRSR0JBIDogTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVs
Rm9ybWF0QkdSQTsKK30KKwordm9pZCBCaXRtYXBMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJl
VG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVT
aXplLCBpbnQgYm9yZGVyVGV4ZWxzKQoreworICAgIG1fdGV4U3ViSW1hZ2Uuc2V0U3ViSW1hZ2VT
aXplKHRpbGVTaXplKTsKKworICAgIG1fY2FudmFzLnJlc2l6ZShjb250ZW50UmVjdC5zaXplKCkp
OworICAgIC8vIEFzc3VtcHRpb246IGlmIGEgdGlsZXIgaXMgdXNpbmcgYm9yZGVyIHRleGVscywg
dGhlbiBpdCBpcyBiZWNhdXNlIHRoZQorICAgIC8vIGxheWVyIGlzIGxpa2VseSB0byBiZSBmaWx0
ZXJlZCBvciB0cmFuc2Zvcm1lZC4gQmVjYXVzZSBvZiBpdCBtaWdodCBiZQorICAgIC8vIHRyYW5z
Zm9ybWVkLCBkcmF3IHRoZSB0ZXh0IGluIGdyYXlzY2FsZSBpbnN0ZWFkIG9mIHN1YnBpeGVsIGFu
dGlhbGlhc2luZy4KKyAgICBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6VGV4dE9wdGlvbiB0ZXh0
T3B0aW9uID0KKyAgICAgICAgYm9yZGVyVGV4ZWxzID8gUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6
OkdyYXlzY2FsZVRleHQgOiBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6U3VicGl4ZWxUZXh0Owor
ICAgIFBsYXRmb3JtQ2FudmFzOjpQYWludGVyIGNhbnZhc1BhaW50ZXIoJm1fY2FudmFzLCB0ZXh0
T3B0aW9uKTsKKyAgICBwYWludENvbnRlbnRzKCpjYW52YXNQYWludGVyLmNvbnRleHQoKSwgY29u
dGVudFJlY3QpOworfQorCit2b2lkIEJpdG1hcExheWVyVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZVRl
eHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBh
bGxvY2F0b3IsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3sKKyAgICBQbGF0Zm9ybUNhbnZhczo6QXV0
b0xvY2tlciBsb2NrZXIoJm1fY2FudmFzKTsKKworICAgIHRleHR1cmUtPmJpbmRUZXh0dXJlKGNv
bnRleHQsIGFsbG9jYXRvcik7CisgICAgbV90ZXhTdWJJbWFnZS51cGxvYWQobG9ja2VyLnBpeGVs
cygpLCBjb250ZW50UmVjdCgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCwgdGV4dHVyZS0+Zm9ybWF0
KCksIGNvbnRleHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwTGF5ZXJUZXh0dXJl
VXBkYXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg3NGM1Y2M5YmM1N2YxNjg2YzE2YjVhM2FlYzVmODNiZGFi
ODBiODMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9CaXRtYXBMYXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTAsMCArMSw3MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKworI2lmbmRlZiBCaXRtYXBMYXllclRleHR1cmVVcGRhdGVyX2gKKyNkZWZpbmUgQml0
bWFwTGF5ZXJUZXh0dXJlVXBkYXRlcl9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisKKyNpbmNsdWRlICJDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCisjaW5jbHVkZSAi
TGF5ZXJUZXh0dXJlU3ViSW1hZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNhbnZhcy5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExheWVyUGFpbnRlckNocm9taXVtOworCisvLyBB
IExheWVyVGV4dHVyZVVwZGF0ZXIgd2l0aCBhbiBpbnRlcm5hbCBiaXRtYXAuCitjbGFzcyBCaXRt
YXBMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGljIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIg
eworcHVibGljOgorICAgIGNsYXNzIFRleHR1cmUgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6VGV4dHVyZSB7CisgICAgcHVibGljOgorICAgICAgICBUZXh0dXJlKEJpdG1hcExheWVyVGV4
dHVyZVVwZGF0ZXIqLCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPik7CisKKyAgICAgICAgdmly
dHVhbCB2b2lkIHByZXBhcmVSZWN0KGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QpIHsgfQorICAg
ICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVB
bGxvY2F0b3IqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0
UmVjdCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBCaXRtYXBMYXllclRleHR1cmVVcGRhdGVy
KiB0ZXh0dXJlVXBkYXRlcigpIHsgcmV0dXJuIG1fdGV4dHVyZVVwZGF0ZXI7IH0KKworICAgICAg
ICBCaXRtYXBMYXllclRleHR1cmVVcGRhdGVyKiBtX3RleHR1cmVVcGRhdGVyOworICAgIH07CisK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCaXRtYXBMYXllclRleHR1cmVVcGRhdGVyPiBjcmVhdGUo
UGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4sIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2Up
OworCisgICAgdmlydHVhbCBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiBjcmVhdGVUZXh0
dXJlKFRleHR1cmVNYW5hZ2VyKik7CisgICAgdmlydHVhbCBPcmllbnRhdGlvbiBvcmllbnRhdGlv
bigpIHsgcmV0dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6OkJvdHRvbVVwT3JpZW50YXRpb247IH0K
KyAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVu
dW0gdGV4dHVyZUZvcm1hdCk7CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3Jk
ZXJUZXhlbHMpOworICAgIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0Qq
LCBUZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CisKK3ByaXZhdGU6CisgICAgQml0bWFw
TGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiwgYm9v
bCB1c2VNYXBUZXhTdWJJbWFnZSk7CisKKyAgICBQbGF0Zm9ybUNhbnZhcyBtX2NhbnZhczsKKyAg
ICBMYXllclRleHR1cmVTdWJJbWFnZSBtX3RleFN1YkltYWdlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNlbmRp
ZiAvLyBCaXRtYXBMYXllclRleHR1cmVVcGRhdGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2M0NWVhZWU1NjUyNTRjYTJjMzRkM2Zi
MWU2NjE2NWYwNWM1NmRlZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCkBAIC0w
LDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkxheWVyUGFp
bnRlckNocm9taXVtLmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OkNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcikKKyAgICA6IG1f
cGFpbnRlcihwYWludGVyKQoreworfQorCit2b2lkIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6
OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCkKK3sKKyAgICBjb250ZXh0LnRyYW5zbGF0ZSgtY29udGVudFJlY3QueCgpLCAt
Y29udGVudFJlY3QueSgpKTsKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyOjpwYWludCIsIHRoaXMsIDApOworICAgICAgICBtX3BhaW50ZXItPnBh
aW50KGNvbnRleHQsIGNvbnRlbnRSZWN0KTsKKyAgICB9CisgICAgbV9jb250ZW50UmVjdCA9IGNv
bnRlbnRSZWN0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjQwY2RkOTMzNGZkOGRlNjc1MDRmNDRmYTBkYzBjOTc0ODcwNTZj
MzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTAsMCArMSw1NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKworI2lmbmRlZiBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyX2gKKyNkZWZpbmUgQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlcl9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisKKyNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBMYXllclBhaW50ZXJDaHJvbWl1
bTsKKworLy8gQSBMYXllclRleHR1cmVVcGRhdGVyIHdpdGggYW4gaW50ZXJuYWwgY2FudmFzLgor
Y2xhc3MgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRh
dGVyIHsKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
KFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+KTsKKworICAgIHZvaWQgcGFpbnRDb250
ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisgICAg
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRSZWN0
OyB9CisKK3ByaXZhdGU6CisKKyAgICBJbnRSZWN0IG1fY29udGVudFJlY3Q7CisgICAgT3duUHRy
PExheWVyUGFpbnRlckNocm9taXVtPiBtX3BhaW50ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2VuZGlmIC8v
IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uY3BwCmluZGV4IGNhOGIzYmQ3NjFmMDgxNWU0N2I2Y2ZiMDQ5MWExZDk3Mjg3OWYwNGMuLmZh
OWM5ODcyMThmOGI3MDMwMDczOGQ4NGFiMWMyZDFkMGMyNGE0ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250
ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTM0LDkgKzM0LDEwIEBACiAKICNpbmNsdWRlICJDb250
ZW50TGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiQml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRl
ci5oIgorI2luY2x1ZGUgIkZyYW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKICNp
bmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJD
aHJvbWl1bS5oIgotI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIK
ICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KQEAgLTEyMiwxMiArMTIzLDEyIEBAIHZvaWQg
Q29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVyKGNvbnN0IENDTGF5ZXJU
cmVlSG9zdCogaG9zdCkKIHsKICNpZiBVU0UoU0tJQSkKICAgICBpZiAoaG9zdC0+c2V0dGluZ3Mo
KS5hY2NlbGVyYXRlUGFpbnRpbmcpIHsKLSAgICAgICAgbV90ZXh0dXJlVXBkYXRlciA9IExheWVy
VGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OmNyZWF0ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVh
dGUobV9kZWxlZ2F0ZSkpOworICAgICAgICBtX3RleHR1cmVVcGRhdGVyID0gRnJhbWVCdWZmZXJT
a2lhTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0
ZShtX2RlbGVnYXRlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gVVNFKFNL
SUEpCiAKLSAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6
Y3JlYXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX2RlbGVnYXRlKSwgaG9zdC0+bGF5
ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nTWFwU3ViKTsKKyAgICBtX3RleHR1cmVVcGRh
dGVyID0gQml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKENvbnRlbnRMYXllclBhaW50
ZXI6OmNyZWF0ZShtX2RlbGVnYXRlKSwgaG9zdC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygp
LnVzaW5nTWFwU3ViKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZl
clNraWFMYXllclRleHR1cmVVcGRhdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDZiZDhmOWE3OTFhYzhm
ZTdjZTJjNDYzZDFmMWQ4NzAwMWRmNzYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJl
VXBkYXRlci5jcHAKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoU0tJQSkKKwor
I2luY2x1ZGUgIkZyYW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKworI2luY2x1
ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCisjaW5jbHVkZSAiU2tDYW52YXMuaCIKKyNpbmNs
dWRlICJTa0dwdURldmljZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSB7
CisKK2NsYXNzIEZyYW1lQnVmZmVyIHsKK3B1YmxpYzoKKyAgICBGcmFtZUJ1ZmZlcigpOworICAg
IH5GcmFtZUJ1ZmZlcigpOworCisgICAgU2tDYW52YXMqIGluaXRpYWxpemUoR3JhcGhpY3NDb250
ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1cmUqKTsKKworcHJpdmF0ZToK
KyAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OworICAgIFBsYXRmb3JtM0RPYmplY3Qg
bV9mYm87CisgICAgT3duUHRyPFNrQ2FudmFzPiBtX2NhbnZhczsKK307CisKK0ZyYW1lQnVmZmVy
OjpGcmFtZUJ1ZmZlcigpCisgICAgOiBtX2NvbnRleHQoMCkKKyAgICAsIG1fZmJvKDApCit7Cit9
CisKK0ZyYW1lQnVmZmVyOjp+RnJhbWVCdWZmZXIoKQoreworICAgIG1fY2FudmFzLmNsZWFyKCk7
CisKKyAgICBpZiAobV9mYm8pCisgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIo
bV9mYm8pOworfQorCitTa0NhbnZhcyogRnJhbWVCdWZmZXI6OmluaXRpYWxpemUoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgTWFuYWdlZFRl
eHR1cmUqIHRleHR1cmUpCit7CisgICAgbV9jb250ZXh0ID0gY29udGV4dDsKKyAgICBtX2ZibyA9
IG1fY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICB0ZXh0
dXJlLT5mcmFtZWJ1ZmZlclRleHR1cmUyRChtX2NvbnRleHQsIGFsbG9jYXRvcik7CisKKyAgICAv
LyBDcmVhdGUgYSBza2lhIGdwdSBjYW52YXMuCisgICAgR3JDb250ZXh0KiBnckNvbnRleHQgPSBt
X2NvbnRleHQtPmdyQ29udGV4dCgpOworICAgIEludFNpemUgY2FudmFzU2l6ZSA9IHRleHR1cmUt
PnNpemUoKTsKKyAgICBHclBsYXRmb3JtU3VyZmFjZURlc2MgdGFyZ2V0RGVzYzsKKyAgICB0YXJn
ZXREZXNjLnJlc2V0KCk7CisgICAgdGFyZ2V0RGVzYy5mU3VyZmFjZVR5cGUgPSBrVGV4dHVyZVJl
bmRlclRhcmdldF9HclBsYXRmb3JtU3VyZmFjZVR5cGU7CisgICAgdGFyZ2V0RGVzYy5mUmVuZGVy
VGFyZ2V0RmxhZ3MgPSBrTm9uZV9HclBsYXRmb3JtUmVuZGVyVGFyZ2V0RmxhZ0JpdDsKKyAgICB0
YXJnZXREZXNjLmZXaWR0aCA9IGNhbnZhc1NpemUud2lkdGgoKTsKKyAgICB0YXJnZXREZXNjLmZI
ZWlnaHQgPSBjYW52YXNTaXplLmhlaWdodCgpOworICAgIHRhcmdldERlc2MuZkNvbmZpZyA9IGtS
R0JBXzg4ODhfR3JQaXhlbENvbmZpZzsKKyAgICB0YXJnZXREZXNjLmZTdGVuY2lsQml0cyA9IDg7
CisgICAgdGFyZ2V0RGVzYy5mUGxhdGZvcm1UZXh0dXJlID0gdGV4dHVyZS0+dGV4dHVyZUlkKCk7
CisgICAgdGFyZ2V0RGVzYy5mUGxhdGZvcm1SZW5kZXJUYXJnZXQgPSBtX2ZibzsKKyAgICBTa0F1
dG9UVW5yZWY8R3JUZXh0dXJlPiB0YXJnZXQoc3RhdGljX2Nhc3Q8R3JUZXh0dXJlKj4oZ3JDb250
ZXh0LT5jcmVhdGVQbGF0Zm9ybVN1cmZhY2UodGFyZ2V0RGVzYykpKTsKKyAgICBTa0F1dG9UVW5y
ZWY8U2tEZXZpY2U+IGRldmljZShuZXcgU2tHcHVEZXZpY2UoZ3JDb250ZXh0LCB0YXJnZXQuZ2V0
KCkpKTsKKyAgICBtX2NhbnZhcyA9IGFkb3B0UHRyKG5ldyBTa0NhbnZhcyhkZXZpY2UuZ2V0KCkp
KTsKKworICAgIHJldHVybiBtX2NhbnZhcy5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UKKwor
RnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVyZShGcmFt
ZUJ1ZmZlclNraWFMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlciwgUGFzc093blB0
cjxNYW5hZ2VkVGV4dHVyZT4gdGV4dHVyZSkKKyAgICA6IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmUodGV4dHVyZSkKKyAgICAsIG1fdGV4dHVyZVVwZGF0ZXIodGV4dHVyZVVwZGF0ZXIpCit7
Cit9CisKK3ZvaWQgRnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6
dXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciog
YWxsb2NhdG9yLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0
UmVjdCkKK3sKKyAgICB0ZXh0dXJlVXBkYXRlcigpLT51cGRhdGVUZXh0dXJlUmVjdChjb250ZXh0
LCBhbGxvY2F0b3IsIHRleHR1cmUoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QpOworfQorCitQYXNz
UmVmUHRyPEZyYW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXI+IEZyYW1lQnVmZmVyU2tp
YUxheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9t
aXVtPiBwYWludGVyKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRnJhbWVCdWZmZXJTa2lh
TGF5ZXJUZXh0dXJlVXBkYXRlcihwYWludGVyKSk7Cit9CisKK0ZyYW1lQnVmZmVyU2tpYUxheWVy
VGV4dHVyZVVwZGF0ZXI6OkZyYW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXIoUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcikKKyAgICA6IFNraWFMYXllclRleHR1
cmVVcGRhdGVyKHBhaW50ZXIpCit7Cit9CisKK0ZyYW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVw
ZGF0ZXI6On5GcmFtZUJ1ZmZlclNraWFMYXllclRleHR1cmVVcGRhdGVyKCkKK3sKK30KKworTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSogRnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6Y3JlYXRlVGV4dHVyZShUZXh0dXJlTWFuYWdlciogbWFuYWdlcikKK3sKKyAgICByZXR1
cm4gbmV3IFRleHR1cmUodGhpcywgTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShtYW5hZ2VyKSk7Cit9
CisKK0xheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBGcmFtZUJ1ZmZlclNr
aWFMYXllclRleHR1cmVVcGRhdGVyOjpzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVy
ZUZvcm1hdCkKK3sKKyAgICAvLyBIZXJlIHdlIGRpcmVjdGx5IHJlbmRlciB0byB0aGUgdGV4dHVy
ZSwgc28gdGhlIGNvbXBvbmVudCBvcmRlciBpcyBhbHdheXMgY29ycmVjdC4KKyAgICByZXR1cm4g
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0UkdCQTsKK30KKwordm9pZCBG
cmFtZUJ1ZmZlclNraWFMYXllclRleHR1cmVVcGRhdGVyOjp1cGRhdGVUZXh0dXJlUmVjdChHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBNYW5h
Z2VkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UmVjdCYgZGVzdFJlY3QpCit7CisgICAgLy8gTWFrZSBzdXJlIFNLSUEgdXNlcyB0aGUgY29ycmVj
dCBHTCBjb250ZXh0LgorICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIC8v
IE5vdGlmeSBTS0lBIHRvIHN5bmMgaXRzIGludGVybmFsIEdMIHN0YXRlLgorICAgIGNvbnRleHQt
PmdyQ29udGV4dCgpLT5yZXNldENvbnRleHQoKTsKKworICAgIC8vIENyZWF0ZSBhbiBhY2NlbGVy
YXRlZCBjYW52YXMgdG8gZHJhdyBvbi4KKyAgICBGcmFtZUJ1ZmZlciBidWZmZXI7CisgICAgU2tD
YW52YXMqIGNhbnZhcyA9IGJ1ZmZlci5pbml0aWFsaXplKGNvbnRleHQsIGFsbG9jYXRvciwgdGV4
dHVyZSk7CisKKyAgICBjYW52YXMtPmNsaXBSZWN0KFNrUmVjdChkZXN0UmVjdCkpOworICAgIC8v
IFRyYW5zbGF0ZSB0aGUgb3JpZ2luIG9mIGNvbnRlbnRSZWN0IHRvIHRoYXQgb2YgZGVzdFJlY3Qu
CisgICAgLy8gTm90ZSB0aGF0IGRlc3RSZWN0IGlzIGRlZmluZWQgcmVsYXRpdmUgdG8gc291cmNl
UmVjdC4KKyAgICBjYW52YXMtPnRyYW5zbGF0ZShjb250ZW50UmVjdCgpLngoKSAtIHNvdXJjZVJl
Y3QueCgpICsgZGVzdFJlY3QueCgpLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRSZWN0
KCkueSgpIC0gc291cmNlUmVjdC55KCkgKyBkZXN0UmVjdC55KCkpOworICAgIGNhbnZhcy0+ZHJh
d1BpY3R1cmUobV9waWN0dXJlKTsKKworICAgIC8vIEZsdXNoIFNLSUEgY29udGV4dCBzbyB0aGF0
IGFsbCB0aGUgcmVuZGVyZWQgc3R1ZmYgYXBwZWFycyBvbiB0aGUgdGV4dHVyZS4KKyAgICBjb250
ZXh0LT5nckNvbnRleHQoKS0+Zmx1c2goKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
I2VuZGlmIC8vIFVTRShTS0lBKQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ZyYW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zMGYwZjY1MDVmZDMxNmVmYWI2MTZhZDJiZmI1M2Q5MzkxMjUxNDNh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBAIC0wLDAgKzEsNjcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisKKyNpZm5kZWYgRnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlcl9o
CisjZGVmaW5lIEZyYW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXJfaAorCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIFVTRShTS0lBKQorCisjaW5jbHVkZSAiU2tp
YUxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBG
cmFtZUJ1ZmZlclNraWFMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGljIFNraWFMYXllclRleHR1
cmVVcGRhdGVyIHsKK3B1YmxpYzoKKyAgICBjbGFzcyBUZXh0dXJlIDogcHVibGljIExheWVyVGV4
dHVyZVVwZGF0ZXI6OlRleHR1cmUgeworICAgIHB1YmxpYzoKKyAgICAgICAgVGV4dHVyZShGcmFt
ZUJ1ZmZlclNraWFMYXllclRleHR1cmVVcGRhdGVyKiwgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVy
ZT4pOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlUmVjdChjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0KSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJlY3QoR3JhcGhpY3ND
b250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgRnJhbWVC
dWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSB7IHJldHVybiBt
X3RleHR1cmVVcGRhdGVyOyB9CisKKyAgICAgICAgRnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJl
VXBkYXRlciogbV90ZXh0dXJlVXBkYXRlcjsKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlcj4gY3JlYXRlKFBhc3NPd25QdHI8
TGF5ZXJQYWludGVyQ2hyb21pdW0+KTsKKyAgICB2aXJ0dWFsIH5GcmFtZUJ1ZmZlclNraWFMYXll
clRleHR1cmVVcGRhdGVyKCk7CisKKyAgICB2aXJ0dWFsIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmUqIGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKTsKKyAgICB2aXJ0dWFsIE9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VG9wRG93
bk9yaWVudGF0aW9uOyB9CisgICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRl
eGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpOworICAgIHZpcnR1YWwgdm9pZCBwcmVw
YXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRp
bGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKSB7IH0KKyAgICB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0
KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIE1hbmFnZWRUZXh0dXJlKiwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworCitw
cml2YXRlOgorICAgIGV4cGxpY2l0IEZyYW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXIo
UGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOworfTsKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKyNlbmRpZiAvLyBVU0UoU0tJQSkKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisjZW5kaWYgLy8gRnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlcl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAppbmRleCAzNjMzNjI5NjdhY2NkZWJjMjU1
OWUyOWMyNGQ0M2MxYzg4ODgwMzE3Li5jNTViYzQyMTY2YTk4OTkwM2I0ODMyMWE1NjhhOTJhN2Mx
MDg1MmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTQ2LDYgKzQ2LDI2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVy
IDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXIgewogcHVibGljOgorICAgIGNsYXNzIFRleHR1
cmUgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSB7CisgICAgcHVibGljOgor
ICAgICAgICBUZXh0dXJlKEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIs
IFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IHRleHR1cmUpCisgICAgICAgICAgICA6IExheWVy
VGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUodGV4dHVyZSkKKyAgICAgICAgICAgICwgbV90ZXh0dXJl
VXBkYXRlcih0ZXh0dXJlVXBkYXRlcikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
dmlydHVhbCB2b2lkIHByZXBhcmVSZWN0KGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QpIHsgfQor
ICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKKyAgICAgICAgeworICAgICAgICAgICAgdGV4dHVy
ZVVwZGF0ZXIoKS0+dXBkYXRlVGV4dHVyZVJlY3QoY29udGV4dCwgYWxsb2NhdG9yLCB0ZXh0dXJl
KCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0KTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIHsgcmV0dXJu
IG1fdGV4dHVyZVVwZGF0ZXI7IH0KKworICAgICAgICBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIq
IG1fdGV4dHVyZVVwZGF0ZXI7CisgICAgfTsKKwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdl
TGF5ZXJUZXh0dXJlVXBkYXRlcj4gY3JlYXRlKGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpCiAgICAg
ewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcih1
c2VNYXBUZXhTdWJJbWFnZSkpOwpAQCAtNTMsNiArNzMsMTEgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCB+SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKCkgeyB9CiAKKyAgICB2aXJ0dWFsIExheWVy
VGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1h
bmFnZXIpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFRleHR1cmUodGhpcywgTWFuYWdlZFRl
eHR1cmU6OmNyZWF0ZShtYW5hZ2VyKSk7CisgICAgfQorCiAgICAgdmlydHVhbCBPcmllbnRhdGlv
biBvcmllbnRhdGlvbigpIHsgcmV0dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6OkJvdHRvbVVwT3Jp
ZW50YXRpb247IH0KIAogICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhl
bEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHAKaW5kZXggYmVlMjZlNmM5MTFiNDkxNWRhY2MxNjZiN2UyMGM3OWM4MGQwMzZj
OC4uMmY1ZTRhNTkyNGM1OWE5MzlkMGZmOTllOGJiNjExNzVlNDA3ODk0NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC0zNSwxMyArMzUsMTMgQEAKICNpbmNsdWRl
ICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKIAogI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJv
bWl1bS5oIgorI2luY2x1ZGUgIkNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCIKICNpbmNsdWRl
ICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1
ZGUgIkdlb21ldHJ5QmluZGluZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAj
aW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVt
LmgiCi0jaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oIgogI2luY2x1ZGUgIk1h
bmFnZWRUZXh0dXJlLmgiCiAjaW5jbHVkZSAiTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaApp
bmRleCAzZDg1OTdlMzllODVkNGNiZjAxNTZkNWNjMTE3OTQ2Nzk1MzcxMjRmLi4xZGJiNDM0YTM2
YjMxNTk5ZGE0MWFmZmVmYmNiNTkyODA1ZTFiY2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBk
YXRlci5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAKKyNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlw
ZXMzRC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKQEAgLTM3LDExICszOCwyNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIElu
dFJlY3Q7CiBjbGFzcyBJbnRTaXplOwotY2xhc3MgTWFuYWdlZFRleHR1cmU7CiBjbGFzcyBUZXh0
dXJlQWxsb2NhdG9yOworY2xhc3MgVGV4dHVyZU1hbmFnZXI7CiAKIGNsYXNzIExheWVyVGV4dHVy
ZVVwZGF0ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxMYXllclRleHR1cmVVcGRhdGVyPiB7CiBwdWJs
aWM6CisgICAgLy8gQWxsb3dzIHRleHR1cmUgdXBsb2FkZXJzIHRvIHN0b3JlIHBlci10aWxlIHJl
c291cmNlcy4KKyAgICBjbGFzcyBUZXh0dXJlIDogcHVibGljIFJlZkNvdW50ZWQ8VGV4dHVyZT4g
eworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+VGV4dHVyZSgpIHsgfQorCisgICAgICAg
IE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlKCkgeyByZXR1cm4gbV90ZXh0dXJlLmdldCgpOyB9Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlUmVjdChjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNE
KiwgVGV4dHVyZUFsbG9jYXRvciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFJlY3QmIGRlc3RSZWN0KSA9IDA7CisgICAgcHJvdGVjdGVkOgorICAgICAgICBleHBsaWNpdCBU
ZXh0dXJlKFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IHRleHR1cmUpIDogbV90ZXh0dXJlKHRl
eHR1cmUpIHsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJl
PiBtX3RleHR1cmU7CisgICAgfTsKKwogICAgIHZpcnR1YWwgfkxheWVyVGV4dHVyZVVwZGF0ZXIo
KSB7IH0KIAogICAgIGVudW0gT3JpZW50YXRpb24gewpAQCAtNTQsNiArNzAsNyBAQCBwdWJsaWM6
CiAgICAgICAgIFNhbXBsZWRUZXhlbEZvcm1hdEJHUkEsCiAgICAgICAgIFNhbXBsZWRUZXhlbEZv
cm1hdEludmFsaWQsCiAgICAgfTsKKyAgICB2aXJ0dWFsIFRleHR1cmUqIGNyZWF0ZVRleHR1cmUo
VGV4dHVyZU1hbmFnZXIqKSA9IDA7CiAgICAgLy8gUmV0dXJucyB0aGUgb3JpZW50YXRpb24gb2Yg
dGhlIHRleHR1cmUgdXBsb2FkZWQgYnkgdGhpcyBpbnRlcmZhY2UuCiAgICAgdmlydHVhbCBPcmll
bnRhdGlvbiBvcmllbnRhdGlvbigpID0gMDsKICAgICAvLyBSZXR1cm5zIHRoZSBmb3JtYXQgb2Yg
dGhlIHRleGVsIHVwbG9hZGVkIGJ5IHRoaXMgaW50ZXJmYWNlLgpAQCAtNjIsNyArNzksNiBAQCBw
dWJsaWM6CiAgICAgLy8gSWYgdGhlIGZvcm1hdCBpcyBUZXhlbEZvcm1hdEJHUkEsIHZlYzQueCBp
cyBibHVlIGFuZCB2ZWM0LnogaXMgcmVkLgogICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0
IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29u
c3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2Nh
dG9yKiwgTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJ
bnRSZWN0JiBkZXN0UmVjdCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJU
ZXh0dXJlVXBkYXRlckNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYWNiMmNkM2U0NmIzMDEzNGVhZjg4MDViNDUzZTVjYWI4ZDU0NWMxYi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFz
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIxOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRl
ICJMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgiCi0KLSNpbmNsdWRlICJFeHRlbnNpb25zM0Qu
aCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJMYXllclBhaW50ZXJD
aHJvbWl1bS5oIgotI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm1Db2xvci5oIgotI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKLQotI2lmIFVTRShTS0lBKQotI2lu
Y2x1ZGUgIkdyQ29udGV4dC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKLSNp
bmNsdWRlICJTa0NhbnZhcy5oIgotI2luY2x1ZGUgIlNrR3B1RGV2aWNlLmgiCi0jZW5kaWYgLy8g
VVNFKFNLSUEpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIFVTRShTS0lBKQotbmFtZXNw
YWNlIHsKLQotY2xhc3MgRnJhbWVCdWZmZXIgewotcHVibGljOgotICAgIEZyYW1lQnVmZmVyKCk7
Ci0gICAgfkZyYW1lQnVmZmVyKCk7Ci0KLSAgICBTa0NhbnZhcyogaW5pdGlhbGl6ZShHcmFwaGlj
c0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBNYW5hZ2VkVGV4dHVyZSopOwotCi1wcml2
YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7Ci0gICAgUGxhdGZvcm0zRE9i
amVjdCBtX2ZibzsKLSAgICBPd25QdHI8U2tDYW52YXM+IG1fY2FudmFzOwotfTsKLQotRnJhbWVC
dWZmZXI6OkZyYW1lQnVmZmVyKCkKLSAgICA6IG1fY29udGV4dCgwKQotICAgICwgbV9mYm8oMCkK
LXsKLX0KLQotRnJhbWVCdWZmZXI6On5GcmFtZUJ1ZmZlcigpCi17Ci0gICAgbV9jYW52YXMuY2xl
YXIoKTsKLQotICAgIGlmIChtX2ZibykKLSAgICAgICAgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1
ZmZlcihtX2Zibyk7Ci19Ci0KLVNrQ2FudmFzKiBGcmFtZUJ1ZmZlcjo6aW5pdGlhbGl6ZShHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBNYW5h
Z2VkVGV4dHVyZSogdGV4dHVyZSkKLXsKLSAgICBtX2NvbnRleHQgPSBjb250ZXh0OwotICAgIG1f
ZmJvID0gbV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOwotICAgIG1fY29udGV4dC0+Ymlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAg
IHRleHR1cmUtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKG1fY29udGV4dCwgYWxsb2NhdG9yKTsKLQot
ICAgIC8vIENyZWF0ZSBhIHNraWEgZ3B1IGNhbnZhcy4KLSAgICBHckNvbnRleHQqIGdyQ29udGV4
dCA9IG1fY29udGV4dC0+Z3JDb250ZXh0KCk7Ci0gICAgSW50U2l6ZSBjYW52YXNTaXplID0gdGV4
dHVyZS0+c2l6ZSgpOwotICAgIEdyUGxhdGZvcm1TdXJmYWNlRGVzYyB0YXJnZXREZXNjOwotICAg
IHRhcmdldERlc2MucmVzZXQoKTsKLSAgICB0YXJnZXREZXNjLmZTdXJmYWNlVHlwZSA9IGtUZXh0
dXJlUmVuZGVyVGFyZ2V0X0dyUGxhdGZvcm1TdXJmYWNlVHlwZTsKLSAgICB0YXJnZXREZXNjLmZS
ZW5kZXJUYXJnZXRGbGFncyA9IGtOb25lX0dyUGxhdGZvcm1SZW5kZXJUYXJnZXRGbGFnQml0Owot
ICAgIHRhcmdldERlc2MuZldpZHRoID0gY2FudmFzU2l6ZS53aWR0aCgpOwotICAgIHRhcmdldERl
c2MuZkhlaWdodCA9IGNhbnZhc1NpemUuaGVpZ2h0KCk7Ci0gICAgdGFyZ2V0RGVzYy5mQ29uZmln
ID0ga1JHQkFfODg4OF9HclBpeGVsQ29uZmlnOwotICAgIHRhcmdldERlc2MuZlN0ZW5jaWxCaXRz
ID0gODsKLSAgICB0YXJnZXREZXNjLmZQbGF0Zm9ybVRleHR1cmUgPSB0ZXh0dXJlLT50ZXh0dXJl
SWQoKTsKLSAgICB0YXJnZXREZXNjLmZQbGF0Zm9ybVJlbmRlclRhcmdldCA9IG1fZmJvOwotICAg
IFNrQXV0b1RVbnJlZjxHclRleHR1cmU+IHRhcmdldChzdGF0aWNfY2FzdDxHclRleHR1cmUqPihn
ckNvbnRleHQtPmNyZWF0ZVBsYXRmb3JtU3VyZmFjZSh0YXJnZXREZXNjKSkpOwotICAgIFNrQXV0
b1RVbnJlZjxTa0RldmljZT4gZGV2aWNlKG5ldyBTa0dwdURldmljZShnckNvbnRleHQsIHRhcmdl
dC5nZXQoKSkpOwotICAgIG1fY2FudmFzID0gYWRvcHRQdHIobmV3IFNrQ2FudmFzKGRldmljZS5n
ZXQoKSkpOwotCi0gICAgcmV0dXJuIG1fY2FudmFzLmdldCgpOwotfQotCi19IC8vIG5hbWVzcGFj
ZQotI2VuZGlmIC8vIFVTRShTS0lBKQotCi1MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzOjpMYXll
clRleHR1cmVVcGRhdGVyQ2FudmFzKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBh
aW50ZXIpCi0gICAgOiBtX3BhaW50ZXIocGFpbnRlcikKLXsKLX0KLQotdm9pZCBMYXllclRleHR1
cmVVcGRhdGVyQ2FudmFzOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCi17Ci0gICAgY29udGV4dC50cmFuc2xhdGUoLWNv
bnRlbnRSZWN0LngoKSwgLWNvbnRlbnRSZWN0LnkoKSk7Ci0gICAgewotICAgICAgICBUUkFDRV9F
VkVOVCgiTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhczo6cGFpbnQiLCB0aGlzLCAwKTsKLSAgICAg
ICAgbV9wYWludGVyLT5wYWludChjb250ZXh0LCBjb250ZW50UmVjdCk7Ci0gICAgfQotICAgIG1f
Y29udGVudFJlY3QgPSBjb250ZW50UmVjdDsKLX0KLQotUGFzc1JlZlB0cjxMYXllclRleHR1cmVV
cGRhdGVyQml0bWFwPiBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpjcmVhdGUoUGFzc093blB0
cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlciwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSkK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXAocGFp
bnRlciwgdXNlTWFwVGV4U3ViSW1hZ2UpKTsKLX0KLQotTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1h
cDo6TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcChQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9t
aXVtPiBwYWludGVyLCBib29sIHVzZU1hcFRleFN1YkltYWdlKQotICAgIDogTGF5ZXJUZXh0dXJl
VXBkYXRlckNhbnZhcyhwYWludGVyKQotICAgICwgbV90ZXhTdWJJbWFnZSh1c2VNYXBUZXhTdWJJ
bWFnZSkKLXsKLX0KLQotTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IExh
eWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0
dXJlRm9ybWF0KQotewotICAgIC8vIFRoZSBjb21wb25lbnQgb3JkZXIgbWF5IGJlIGJncmEgaWYg
d2UgdXBsb2FkZWQgYmdyYSBwaXhlbHMgdG8gcmdiYSB0ZXh0dXJlcy4KLSAgICByZXR1cm4gUGxh
dGZvcm1Db2xvcjo6c2FtZUNvbXBvbmVudE9yZGVyKHRleHR1cmVGb3JtYXQpID8KLSAgICAgICAg
ICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdFJHQkEgOiBMYXllclRl
eHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRCR1JBOwotfQotCi12b2lkIExheWVyVGV4
dHVyZVVwZGF0ZXJCaXRtYXA6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50
UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpCi17Ci0gICAg
bV90ZXhTdWJJbWFnZS5zZXRTdWJJbWFnZVNpemUodGlsZVNpemUpOwotCi0gICAgbV9jYW52YXMu
cmVzaXplKGNvbnRlbnRSZWN0LnNpemUoKSk7Ci0gICAgLy8gQXNzdW1wdGlvbjogaWYgYSB0aWxl
ciBpcyB1c2luZyBib3JkZXIgdGV4ZWxzLCB0aGVuIGl0IGlzIGJlY2F1c2UgdGhlCi0gICAgLy8g
bGF5ZXIgaXMgbGlrZWx5IHRvIGJlIGZpbHRlcmVkIG9yIHRyYW5zZm9ybWVkLiBCZWNhdXNlIG9m
IGl0IG1pZ2h0IGJlCi0gICAgLy8gdHJhbnNmb3JtZWQsIGRyYXcgdGhlIHRleHQgaW4gZ3JheXNj
YWxlIGluc3RlYWQgb2Ygc3VicGl4ZWwgYW50aWFsaWFzaW5nLgotICAgIFBsYXRmb3JtQ2FudmFz
OjpQYWludGVyOjpUZXh0T3B0aW9uIHRleHRPcHRpb24gPQotICAgICAgICBib3JkZXJUZXhlbHMg
PyBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6R3JheXNjYWxlVGV4dCA6IFBsYXRmb3JtQ2FudmFz
OjpQYWludGVyOjpTdWJwaXhlbFRleHQ7Ci0gICAgUGxhdGZvcm1DYW52YXM6OlBhaW50ZXIgY2Fu
dmFzUGFpbnRlcigmbV9jYW52YXMsIHRleHRPcHRpb24pOwotICAgIHBhaW50Q29udGVudHMoKmNh
bnZhc1BhaW50ZXIuY29udGV4dCgpLCBjb250ZW50UmVjdCk7Ci19Ci0KLXZvaWQgTGF5ZXJUZXh0
dXJlVXBkYXRlckJpdG1hcDo6dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1
cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQot
ewotICAgIFBsYXRmb3JtQ2FudmFzOjpBdXRvTG9ja2VyIGxvY2tlcigmbV9jYW52YXMpOwotCi0g
ICAgdGV4dHVyZS0+YmluZFRleHR1cmUoY29udGV4dCwgYWxsb2NhdG9yKTsKLSAgICBtX3RleFN1
YkltYWdlLnVwbG9hZChsb2NrZXIucGl4ZWxzKCksIGNvbnRlbnRSZWN0KCksIHNvdXJjZVJlY3Qs
IGRlc3RSZWN0LCB0ZXh0dXJlLT5mb3JtYXQoKSwgY29udGV4dCk7Ci19Ci0KLSNpZiBVU0UoU0tJ
QSkKLVBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZT4gTGF5ZXJUZXh0dXJl
VXBkYXRlclNrUGljdHVyZTo6Y3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+
IHBhaW50ZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMYXllclRleHR1cmVVcGRhdGVy
U2tQaWN0dXJlKHBhaW50ZXIpKTsKLX0KLQotTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6
TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9t
aXVtPiBwYWludGVyKQotICAgIDogTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyhwYWludGVyKQot
ewotfQotCi1MYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjp+TGF5ZXJUZXh0dXJlVXBkYXRl
clNrUGljdHVyZSgpCi17Ci19Ci0KLUxheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZv
cm1hdCBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpzYW1wbGVkVGV4ZWxGb3JtYXQoR0Mz
RGVudW0gdGV4dHVyZUZvcm1hdCkKLXsKLSAgICAvLyBIZXJlIHdlIGRpcmVjdGx5IHJlbmRlciB0
byB0aGUgdGV4dHVyZSwgc28gdGhlIGNvbXBvbmVudCBvcmRlciBpcyBhbHdheXMgY29ycmVjdC4K
LSAgICByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0UkdCQTsK
LX0KLQotdm9pZCBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpwcmVwYXJlVG9VcGRhdGUo
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQg
Ym9yZGVyVGV4ZWxzKQotewotICAgIFNrQ2FudmFzKiBjYW52YXMgPSBtX3BpY3R1cmUuYmVnaW5S
ZWNvcmRpbmcoY29udGVudFJlY3Qud2lkdGgoKSwgY29udGVudFJlY3QuaGVpZ2h0KCkpOwotICAg
IFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1Db250ZXh0KGNhbnZhcyk7Ci0gICAgR3JhcGhp
Y3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKLSAgICBwYWludENv
bnRlbnRzKGdyYXBoaWNzQ29udGV4dCwgY29udGVudFJlY3QpOwotICAgIG1fcGljdHVyZS5lbmRS
ZWNvcmRpbmcoKTsKLX0KLQotdm9pZCBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjp1cGRh
dGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRv
ciogYWxsb2NhdG9yLCBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgLy8gTWFrZSBzdXJlIFNL
SUEgdXNlcyB0aGUgY29ycmVjdCBHTCBjb250ZXh0LgotICAgIGNvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIC8vIE5vdGlmeSBTS0lBIHRvIHN5bmMgaXRzIGludGVybmFsIEdMIHN0
YXRlLgotICAgIGNvbnRleHQtPmdyQ29udGV4dCgpLT5yZXNldENvbnRleHQoKTsKLQotICAgIC8v
IENyZWF0ZSBhbiBhY2NlbGVyYXRlZCBjYW52YXMgdG8gZHJhdyBvbi4KLSAgICBGcmFtZUJ1ZmZl
ciBidWZmZXI7Ci0gICAgU2tDYW52YXMqIGNhbnZhcyA9IGJ1ZmZlci5pbml0aWFsaXplKGNvbnRl
eHQsIGFsbG9jYXRvciwgdGV4dHVyZSk7Ci0KLSAgICBjYW52YXMtPmNsaXBSZWN0KFNrUmVjdChk
ZXN0UmVjdCkpOwotICAgIC8vIFRyYW5zbGF0ZSB0aGUgb3JpZ2luIG9mIGNvbnRlbnRSZWN0IHRv
IHRoYXQgb2YgZGVzdFJlY3QuCi0gICAgLy8gTm90ZSB0aGF0IGRlc3RSZWN0IGlzIGRlZmluZWQg
cmVsYXRpdmUgdG8gc291cmNlUmVjdC4KLSAgICBjYW52YXMtPnRyYW5zbGF0ZShjb250ZW50UmVj
dCgpLngoKSAtIHNvdXJjZVJlY3QueCgpICsgZGVzdFJlY3QueCgpLAotICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRlbnRSZWN0KCkueSgpIC0gc291cmNlUmVjdC55KCkgKyBkZXN0UmVjdC55KCkp
OwotICAgIGNhbnZhcy0+ZHJhd1BpY3R1cmUobV9waWN0dXJlKTsKLQotICAgIC8vIEZsdXNoIFNL
SUEgY29udGV4dCBzbyB0aGF0IGFsbCB0aGUgcmVuZGVyZWQgc3R1ZmYgYXBwZWFycyBvbiB0aGUg
dGV4dHVyZS4KLSAgICBjb250ZXh0LT5nckNvbnRleHQoKS0+Zmx1c2goKTsKLX0KLSNlbmRpZiAv
LyBVU0UoU0tJQSkKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotI2VuZGlmIC8vIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52
YXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZjNzFjNjhmZjdjN2RjOTgyMWNl
OWFjOGExYjQwODhhYTU4ODM4OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVVcGRhdGVyQ2FudmFzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLQotI2lmbmRlZiBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzX2gKLSNkZWZpbmUgTGF5
ZXJUZXh0dXJlVXBkYXRlckNhbnZhc19oCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCi0KLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKLSNpbmNsdWRlICJMYXllclRleHR1
cmVTdWJJbWFnZS5oIgotI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKLSNpbmNsdWRl
ICJQbGF0Zm9ybUNhbnZhcy5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLQotI2lmIFVTRShTS0lBKQotI2luY2x1ZGUgIlNrUGljdHVy
ZS5oIgotCi1jbGFzcyBHckNvbnRleHQ7Ci1jbGFzcyBTa0NhbnZhczsKLWNsYXNzIFNrUGljdHVy
ZTsKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4
dDNEOwotY2xhc3MgTGF5ZXJQYWludGVyQ2hyb21pdW07Ci0KLS8vIEEgTGF5ZXJUZXh0dXJlVXBk
YXRlciB3aXRoIGFuIGludGVybmFsIGNhbnZhcy4KLWNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXJD
YW52YXMgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlciB7Ci1wcm90ZWN0ZWQ6Ci0gICAgZXhw
bGljaXQgTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyhQYXNzT3duUHRyPExheWVyUGFpbnRlckNo
cm9taXVtPik7Ci0KLSAgICB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QpOwotICAgIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50UmVjdDsgfQotCi1wcml2YXRlOgotCi0gICAgSW50
UmVjdCBtX2NvbnRlbnRSZWN0OwotICAgIE93blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gbV9w
YWludGVyOwotfTsKLQotLy8gQSBMYXllclRleHR1cmVVcGRhdGVyIHdpdGggYW4gaW50ZXJuYWwg
Yml0bWFwIGNhbnZhcy4KLWNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXAgOiBwdWJsaWMg
TGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcD4gY3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWlu
dGVyQ2hyb21pdW0+LCBib29sIHVzZU1hcFRleFN1YkltYWdlKTsKLQotICAgIHZpcnR1YWwgT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24oKSB7IHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpCb3R0
b21VcE9yaWVudGF0aW9uOyB9Ci0gICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxl
ZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpOwotICAgIHZpcnR1YWwgdm9pZCBw
cmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUm
IHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4
dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRl
eHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVj
dCk7Ci0KLXByaXZhdGU6Ci0gICAgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcChQYXNzT3duUHRy
PExheWVyUGFpbnRlckNocm9taXVtPiwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSk7Ci0gICAgUGxh
dGZvcm1DYW52YXMgbV9jYW52YXM7Ci0gICAgTGF5ZXJUZXh0dXJlU3ViSW1hZ2UgbV90ZXhTdWJJ
bWFnZTsKLX07Ci0KLSNpZiBVU0UoU0tJQSkKLWNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXJTa1Bp
Y3R1cmUgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZT4gY3JlYXRlKFBh
c3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+KTsKLSAgICB2aXJ0dWFsIH5MYXllclRleHR1
cmVVcGRhdGVyU2tQaWN0dXJlKCk7Ci0KLSAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKCkgeyByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VG9wRG93bk9yaWVudGF0aW9uOyB9
Ci0gICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0Rl
bnVtIHRleHR1cmVGb3JtYXQpOwotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9y
ZGVyVGV4ZWxzKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3ND
b250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7Ci0KLXByaXZhdGU6Ci0g
ICAgZXhwbGljaXQgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZShQYXNzT3duUHRyPExheWVy
UGFpbnRlckNocm9taXVtPik7Ci0gIAotICAgIFNrUGljdHVyZSBtX3BpY3R1cmU7IC8vIFJlY29y
ZGluZyBjYW52YXMuCi19OwotI2VuZGlmIC8vIFVTRShTS0lBKQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotI2VuZGlmIC8v
IExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tpYUxheWVyVGV4dHVy
ZVVwZGF0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYwZDUyMTRhNzI0YzMxZTlmM2M2YTM0NDk1YWVjYzBh
OGU4NGQ3NGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Ta2lhTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKQEAgLTAsMCArMSw2NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorI2lmIFVTRShTS0lBKQorCisjaW5jbHVkZSAiU2tpYUxheWVyVGV4dHVyZVVw
ZGF0ZXIuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkxheWVy
UGFpbnRlckNocm9taXVtLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorI2lu
Y2x1ZGUgIlNrQ2FudmFzLmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1NraWFMYXllclRleHR1cmVVcGRhdGVyOjpTa2lhTGF5ZXJUZXh0dXJlVXBk
YXRlcihQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyKQorICAgIDogQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihwYWludGVyKQoreworfQorCit2b2lkIFNraWFMYXllclRl
eHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qs
IGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKQoreworICAgIFNrQ2Fu
dmFzKiBjYW52YXMgPSBtX3BpY3R1cmUuYmVnaW5SZWNvcmRpbmcoY29udGVudFJlY3Qud2lkdGgo
KSwgY29udGVudFJlY3QuaGVpZ2h0KCkpOworICAgIFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZv
cm1Db250ZXh0KGNhbnZhcyk7CisgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dCgm
cGxhdGZvcm1Db250ZXh0KTsKKyAgICBwYWludENvbnRlbnRzKGdyYXBoaWNzQ29udGV4dCwgY29u
dGVudFJlY3QpOworICAgIG1fcGljdHVyZS5lbmRSZWNvcmRpbmcoKTsKK30KKwordm9pZCBTa2lh
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6ZHJhd1BpY3R1cmUoU2tDYW52YXMqIGNhbnZhcykKK3sKKyAg
ICBUUkFDRV9FVkVOVCgiU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXI6OmRyYXdQaWN0dXJlIiwgdGhp
cywgMCk7CisgICAgY2FudmFzLT5kcmF3UGljdHVyZShtX3BpY3R1cmUpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKFNLSUEpCisjZW5kaWYgLy8gVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NraWFMYXllclRleHR1cmVVcGRhdGVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYTVmYzYxYjU0Y2E0NWQyMWRkY2Y2OWYyYThjZTc2OTA3ZjI3OTMwMAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1NraWFMYXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lm
bmRlZiBTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlcl9oCisjZGVmaW5lIFNraWFMYXllclRleHR1cmVV
cGRhdGVyX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoU0tJ
QSkKKworI2luY2x1ZGUgIkNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJT
a1BpY3R1cmUuaCIKKworY2xhc3MgU2tDYW52YXM7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgTGF5ZXJQYWludGVyQ2hyb21pdW07CisKK2NsYXNzIFNraWFMYXllclRleHR1cmVVcGRh
dGVyIDogcHVibGljIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIgeworcHVibGljOgorICAgIGV4
cGxpY2l0IFNraWFMYXllclRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hy
b21pdW0+KTsKKworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxz
KTsKKyAgICB2b2lkIGRyYXdQaWN0dXJlKFNrQ2FudmFzKik7CisKK3Byb3RlY3RlZDoKKyAgICBT
a1BpY3R1cmUgbV9waWN0dXJlOyAvLyBSZWNvcmRpbmcgY2FudmFzLgorfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShTS0lBKQorI2VuZGlmIC8vIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKyNlbmRpZiAvLyBTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlcl9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxl
ZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAppbmRleCBmY2M0NmQ5OTNkNTQwYTQyMTlkN2Yy
NzAxMDAxODczOGVmN2I4ZmZlLi42MWExZTRhMDg0NDgzMTkzNjViNzg2NDZmYWRhOTRkODEzYzY1
NDZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTUxLDE3ICs1MSwyMCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBVcGRhdGFibGVUaWxlIDogcHVibGljIENDTGF5
ZXJUaWxpbmdEYXRhOjpUaWxlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShVcGRhdGFibGVU
aWxlKTsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBVcGRhdGFibGVUaWxlKFBhc3NPd25QdHI8TWFu
YWdlZFRleHR1cmU+IHRleCkgOiBtX3RleCh0ZXgpIHsgfQorICAgIGV4cGxpY2l0IFVwZGF0YWJs
ZVRpbGUoUGFzc1JlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiB0ZXgpIDogbV90
ZXgodGV4KSB7IH0KIAotICAgIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlKCkgeyByZXR1cm4gbV90
ZXguZ2V0KCk7IH0KKyAgICBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiB0ZXh0dXJlKCkg
eyByZXR1cm4gbV90ZXguZ2V0KCk7IH0KKyAgICBNYW5hZ2VkVGV4dHVyZSogbWFuYWdlZFRleHR1
cmUoKSB7IHJldHVybiBtX3RleC0+dGV4dHVyZSgpOyB9CiAKICAgICBib29sIGRpcnR5KCkgY29u
c3QgeyByZXR1cm4gIW1fZGlydHlMYXllclJlY3QuaXNFbXB0eSgpOyB9CiAgICAgdm9pZCBjbGVh
ckRpcnR5KCkgeyBtX2RpcnR5TGF5ZXJSZWN0ID0gSW50UmVjdCgpOyB9CiAKICAgICAvLyBMYXll
ci1zcGFjZSBkaXJ0eSByZWN0YW5nbGUgdGhhdCBuZWVkcyB0byBiZSByZXBhaW50ZWQuCiAgICAg
SW50UmVjdCBtX2RpcnR5TGF5ZXJSZWN0OworICAgIC8vIFBhZ2Utc3BhY2UgcmVjdGFuZ2xlIHRo
YXQgbmVlZHMgdG8gYmUgdXBkYXRlZC4KKyAgICBJbnRSZWN0IG1fdXBkYXRlUmVjdDsKIHByaXZh
dGU6Ci0gICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBtX3RleDsKKyAgICBSZWZQdHI8TGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gbV90ZXg7CiB9OwogCiBUaWxlZExheWVyQ2hyb21pdW06
OlRpbGVkTGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQpAQCAtMTY3LDE3
ICsxNzAsMTIgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEMKICAgICAgICAgICAgIGVsc2UgaWYg
KCF0aWxlLT5kaXJ0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAg
ICAvLyBDYWxjdWxhdGUgcGFnZS1zcGFjZSByZWN0YW5nbGUgdG8gY29weSBmcm9tLgotICAgICAg
ICAgICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gbV90aWxlci0+dGlsZUNvbnRlbnRSZWN0KHRpbGUp
OwotICAgICAgICAgICAgY29uc3QgSW50UG9pbnQgYW5jaG9yID0gc291cmNlUmVjdC5sb2NhdGlv
bigpOwotICAgICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QobV90aWxlci0+bGF5ZXJSZWN0
VG9Db250ZW50UmVjdCh0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0KSk7Ci0gICAgICAgICAgICAvLyBQ
YWludCByZWN0IG5vdCBndWFyYW50ZWVkIHRvIGxpbmUgdXAgb24gdGlsZSBib3VuZGFyaWVzLCBz
bwotICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgc291cmNlUmVjdCBkb2Vzbid0IGV4dGVu
ZCBvdXRzaWRlIG9mIGl0LgotICAgICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QobV9wYWlu
dFJlY3QpOwotICAgICAgICAgICAgaWYgKHNvdXJjZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gdGlsZS0+bV91cGRhdGVSZWN0OworICAgICAgICAgICAg
aWYgKHRpbGUtPm1fdXBkYXRlUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAKLSAgICAgICAgICAgIEFTU0VSVCh0aWxlLT50ZXh0dXJlKCktPmlzUmVzZXJ2ZWQoKSk7
CisgICAgICAgICAgICBBU1NFUlQodGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+aXNSZXNlcnZlZCgp
KTsKKyAgICAgICAgICAgIGNvbnN0IEludFBvaW50IGFuY2hvciA9IG1fdGlsZXItPnRpbGVDb250
ZW50UmVjdCh0aWxlKS5sb2NhdGlvbigpOwogCiAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGls
ZS1zcGFjZSByZWN0YW5nbGUgdG8gdXBsb2FkIGludG8uCiAgICAgICAgICAgICBJbnRSZWN0IGRl
c3RSZWN0KEludFBvaW50KHNvdXJjZVJlY3QueCgpIC0gYW5jaG9yLngoKSwgc291cmNlUmVjdC55
KCkgLSBhbmNob3IueSgpKSwgc291cmNlUmVjdC5zaXplKCkpOwpAQCAtMTk3LDEyICsxOTUsMTIg
QEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEMKICAgICAgICAgICAgIGlmIChwYWludE9mZnNldC55
KCkgKyBkZXN0UmVjdC5oZWlnaHQoKSA+IG1fcGFpbnRSZWN0LmhlaWdodCgpKQogICAgICAgICAg
ICAgICAgIENSQVNIKCk7CiAKLSAgICAgICAgICAgIHRpbGUtPnRleHR1cmUoKS0+YmluZFRleHR1
cmUoY29udGV4dCwgdXBkYXRlci5hbGxvY2F0b3IoKSk7CisgICAgICAgICAgICB0aWxlLT5tYW5h
Z2VkVGV4dHVyZSgpLT5iaW5kVGV4dHVyZShjb250ZXh0LCB1cGRhdGVyLmFsbG9jYXRvcigpKTsK
ICAgICAgICAgICAgIGNvbnN0IEdDM0RpbnQgZmlsdGVyID0gbV90aWxlci0+aGFzQm9yZGVyVGV4
ZWxzKCkgPyBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSIDogR3JhcGhpY3NDb250ZXh0M0Q6Ok5F
QVJFU1Q7CiAgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
TUlOX0ZJTFRFUiwgZmlsdGVyKSk7CiAgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgZmlsdGVyKSk7CiAKLSAgICAgICAgICAgIHVwZGF0
ZXIuYXBwZW5kKHRpbGUtPnRleHR1cmUoKSwgdGV4dHVyZVVwZGF0ZXIoKSwgc291cmNlUmVjdCwg
ZGVzdFJlY3QpOworICAgICAgICAgICAgdXBkYXRlci5hcHBlbmQodGlsZS0+dGV4dHVyZSgpLCBz
b3VyY2VSZWN0LCBkZXN0UmVjdCk7CiAgICAgICAgICAgICB0aWxlLT5jbGVhckRpcnR5KCk7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0yNDAsMTAgKzIzOCwxMCBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgICAgIGludCBp
ID0gaXRlci0+Zmlyc3QuZmlyc3Q7CiAgICAgICAgIGludCBqID0gaXRlci0+Zmlyc3Quc2Vjb25k
OwogICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGls
ZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7Ci0gICAgICAgIGlmICghdGlsZS0+dGV4dHVyZSgpLT5p
c1ZhbGlkKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkpCisgICAgICAgIGlm
ICghdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+aXNWYWxpZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBt
X3RleHR1cmVGb3JtYXQpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgdGlsZWRM
YXllci0+c3luY1RleHR1cmVJZChpLCBqLCB0aWxlLT50ZXh0dXJlKCktPnRleHR1cmVJZCgpKTsK
KyAgICAgICAgdGlsZWRMYXllci0+c3luY1RleHR1cmVJZChpLCBqLCB0aWxlLT5tYW5hZ2VkVGV4
dHVyZSgpLT50ZXh0dXJlSWQoKSk7CiAgICAgfQogfQogCkBAIC0yNjEsNyArMjU5LDcgQEAgVXBk
YXRhYmxlVGlsZSogVGlsZWRMYXllckNocm9taXVtOjp0aWxlQXQoaW50IGksIGludCBqKSBjb25z
dAogCiBVcGRhdGFibGVUaWxlKiBUaWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZVRpbGUoaW50IGks
IGludCBqKQogewotICAgIFJlZlB0cjxVcGRhdGFibGVUaWxlPiB0aWxlID0gYWRvcHRSZWYobmV3
IFVwZGF0YWJsZVRpbGUoTWFuYWdlZFRleHR1cmU6OmNyZWF0ZSh0ZXh0dXJlTWFuYWdlcigpKSkp
OworICAgIFJlZlB0cjxVcGRhdGFibGVUaWxlPiB0aWxlID0gYWRvcHRSZWYobmV3IFVwZGF0YWJs
ZVRpbGUoYWRvcHRSZWYodGV4dHVyZVVwZGF0ZXIoKS0+Y3JlYXRlVGV4dHVyZSh0ZXh0dXJlTWFu
YWdlcigpKSkpKTsKICAgICBtX3RpbGVyLT5hZGRUaWxlKHRpbGUsIGksIGopOwogICAgIHRpbGUt
Pm1fZGlydHlMYXllclJlY3QgPSBtX3RpbGVyLT50aWxlTGF5ZXJSZWN0KHRpbGUuZ2V0KCkpOwog
CkBAIC0zMDksMTAgKzMwNywxMCBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJvdGVjdFRp
bGVUZXh0dXJlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICBmb3IgKGludCBqID0g
dG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9
IHJpZ2h0OyArK2kpIHsKICAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQo
aSwgaik7Ci0gICAgICAgICAgICBpZiAoIXRpbGUgfHwgIXRpbGUtPnRleHR1cmUoKS0+aXNWYWxp
ZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKQorICAgICAgICAgICAgaWYg
KCF0aWxlIHx8ICF0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVT
aXplKCksIG1fdGV4dHVyZUZvcm1hdCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAg
ICAgICAgICAgIHRpbGUtPnRleHR1cmUoKS0+cmVzZXJ2ZShtX3RpbGVyLT50aWxlU2l6ZSgpLCBt
X3RleHR1cmVGb3JtYXQpOworICAgICAgICAgICAgdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+cmVz
ZXJ2ZShtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpOwogICAgICAgICB9CiAg
ICAgfQogfQpAQCAtMzQ2LDEwICszNDQsMTAgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnBy
ZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICAgICAgICAgIGlm
ICghdGlsZSkKICAgICAgICAgICAgICAgICB0aWxlID0gY3JlYXRlVGlsZShpLCBqKTsKIAotICAg
ICAgICAgICAgaWYgKCF0aWxlLT50ZXh0dXJlKCktPmlzVmFsaWQobV90aWxlci0+dGlsZVNpemUo
KSwgbV90ZXh0dXJlRm9ybWF0KSkKKyAgICAgICAgICAgIGlmICghdGlsZS0+bWFuYWdlZFRleHR1
cmUoKS0+aXNWYWxpZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKQogICAg
ICAgICAgICAgICAgIHRpbGUtPm1fZGlydHlMYXllclJlY3QgPSBtX3RpbGVyLT50aWxlTGF5ZXJS
ZWN0KHRpbGUpOwogCi0gICAgICAgICAgICBpZiAoIXRpbGUtPnRleHR1cmUoKS0+cmVzZXJ2ZSht
X3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKSB7CisgICAgICAgICAgICBpZiAo
IXRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPnJlc2VydmUobV90aWxlci0+dGlsZVNpemUoKSwgbV90
ZXh0dXJlRm9ybWF0KSkgewogICAgICAgICAgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICBjbGVhbnVwUmVzb3VyY2VzKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMzc0LDYgKzM3MiwzMSBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRv
VXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAgIC8vIHNvIHdlIGdyYWIgYSBs
b2NhbCByZWZlcmVuY2UgaGVyZSB0byBob2xkIHRoZSB1cGRhdGVyIGFsaXZlIHVudGlsIHRoZSBw
YWludCBjb21wbGV0ZXMuCiAgICAgUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+IHByb3RlY3Rv
cih0ZXh0dXJlVXBkYXRlcigpKTsKICAgICB0ZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlVG9VcGRh
dGUobV9wYWludFJlY3QsIG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGlsZXItPmhhc0JvcmRlclRl
eGVscygpKTsKKworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhtX3JlcXVl
c3RlZFVwZGF0ZVJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgZm9yIChpbnQg
aiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgeworICAgICAgICBmb3IgKGludCBpID0gbGVmdDsg
aSA8PSByaWdodDsgKytpKSB7CisgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGls
ZUF0KGksIGopOworICAgICAgICAgICAgaWYgKCF0aWxlKQorICAgICAgICAgICAgICAgIHRpbGUg
PSBjcmVhdGVUaWxlKGksIGopOworICAgICAgICAgICAgZWxzZSBpZiAoIXRpbGUtPmRpcnR5KCkp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBw
YWdlLXNwYWNlIHJlY3RhbmdsZSB0byBjb3B5IGZyb20uCisgICAgICAgICAgICBJbnRSZWN0IHNv
dXJjZVJlY3QgPSBtX3RpbGVyLT50aWxlQ29udGVudFJlY3QodGlsZSk7CisgICAgICAgICAgICBj
b25zdCBJbnRQb2ludCBhbmNob3IgPSBzb3VyY2VSZWN0LmxvY2F0aW9uKCk7CisgICAgICAgICAg
ICBzb3VyY2VSZWN0LmludGVyc2VjdChtX3RpbGVyLT5sYXllclJlY3RUb0NvbnRlbnRSZWN0KHRp
bGUtPm1fZGlydHlMYXllclJlY3QpKTsKKyAgICAgICAgICAgIC8vIFBhaW50IHJlY3Qgbm90IGd1
YXJhbnRlZWQgdG8gbGluZSB1cCBvbiB0aWxlIGJvdW5kYXJpZXMsIHNvCisgICAgICAgICAgICAv
LyBtYWtlIHN1cmUgdGhhdCBzb3VyY2VSZWN0IGRvZXNuJ3QgZXh0ZW5kIG91dHNpZGUgb2YgaXQu
CisgICAgICAgICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChtX3BhaW50UmVjdCk7CisKKyAgICAg
ICAgICAgIHRpbGUtPm1fdXBkYXRlUmVjdCA9IHNvdXJjZVJlY3Q7CisgICAgICAgICAgICBpZiAo
c291cmNlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgIHRpbGUtPnRleHR1cmUoKS0+cHJlcGFyZVJlY3Qoc291cmNlUmVjdCk7CisgICAgICAg
IH0KKyAgICB9CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAKaW5kZXgg
OTg0MzcwZWRhOTVjNTIzZjU5ZWU1NWM4N2FjODI4NzFlMDJhNzNiYi4uODc0NWM0ZWEwYTcxMGJk
ZTE4ZWRlMTgyMGYzMTRmZGI4Y2M4NzJhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRl
ci5jcHAKQEAgLTQ4LDE0ICs0OCwxMiBAQCBDQ1RleHR1cmVVcGRhdGVyOjp+Q0NUZXh0dXJlVXBk
YXRlcigpCiB7CiB9CiAKLXZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6YXBwZW5kKE1hbmFnZWRUZXh0
dXJlKiB0ZXh0dXJlLCBMYXllclRleHR1cmVVcGRhdGVyKiB1cGRhdGVyLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgQ0NUZXh0dXJlVXBk
YXRlcjo6YXBwZW5kKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIHRleHR1cmUsIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQogewogICAgIEFT
U0VSVCh0ZXh0dXJlKTsKLSAgICBBU1NFUlQodXBkYXRlcik7CiAKICAgICBVcGRhdGVFbnRyeSBl
bnRyeTsKICAgICBlbnRyeS5tX3RleHR1cmUgPSB0ZXh0dXJlOwotICAgIGVudHJ5Lm1fdXBkYXRl
ciA9IHVwZGF0ZXI7CiAgICAgZW50cnkubV9zb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKICAgICBl
bnRyeS5tX2Rlc3RSZWN0ID0gZGVzdFJlY3Q7CiAgICAgbV9lbnRyaWVzLmFwcGVuZChlbnRyeSk7
CkBAIC03MSw3ICs2OSw3IEBAIGJvb2wgQ0NUZXh0dXJlVXBkYXRlcjo6dXBkYXRlKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0LCBzaXplX3QgY291bnQpCiAgICAgc2l6ZV90IG1heEluZGV4ID0g
bWluKG1fZW50cnlJbmRleCArIGNvdW50LCBtX2VudHJpZXMuc2l6ZSgpKTsKICAgICBmb3IgKDsg
bV9lbnRyeUluZGV4IDwgbWF4SW5kZXg7ICsrbV9lbnRyeUluZGV4KSB7CiAgICAgICAgIFVwZGF0
ZUVudHJ5JiBlbnRyeSA9IG1fZW50cmllc1ttX2VudHJ5SW5kZXhdOwotICAgICAgICBlbnRyeS5t
X3VwZGF0ZXItPnVwZGF0ZVRleHR1cmVSZWN0KGNvbnRleHQsIG1fYWxsb2NhdG9yLCBlbnRyeS5t
X3RleHR1cmUsIGVudHJ5Lm1fc291cmNlUmVjdCwgZW50cnkubV9kZXN0UmVjdCk7CisgICAgICAg
IGVudHJ5Lm1fdGV4dHVyZS0+dXBkYXRlUmVjdChjb250ZXh0LCBtX2FsbG9jYXRvciwgZW50cnku
bV9zb3VyY2VSZWN0LCBlbnRyeS5tX2Rlc3RSZWN0KTsKICAgICB9CiAKICAgICBpZiAobWF4SW5k
ZXggPCBtX2VudHJpZXMuc2l6ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oCmluZGV4
IDE3YjhhYWZhMDZjZTdhNmQyMGEwZTVmYjRjOTE0ZTcyZmM5Mzk0YTEuLmJmNzlhYzljMmUyMmVm
YzVlZGE5YTY0ODI5ZTJlZmNjZWMxNWJiMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVy
LmgKQEAgLTI3LDEzICsyNywxMiBAQAogI2RlZmluZSBDQ1RleHR1cmVVcGRhdGVyX2gKIAogI2lu
Y2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBo
aWNzQ29udGV4dDNEOwotY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlcjsKLWNsYXNzIE1hbmFnZWRU
ZXh0dXJlOwogY2xhc3MgVGV4dHVyZUFsbG9jYXRvcjsKIAogY2xhc3MgQ0NUZXh0dXJlVXBkYXRl
ciB7CkBAIC00MSw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICBDQ1RleHR1cmVVcGRhdGVyKFRleHR1
cmVBbGxvY2F0b3IqKTsKICAgICB+Q0NUZXh0dXJlVXBkYXRlcigpOwogCi0gICAgdm9pZCBhcHBl
bmQoTWFuYWdlZFRleHR1cmUqLCBMYXllclRleHR1cmVVcGRhdGVyKiwgY29uc3QgSW50UmVjdCYg
c291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgIHZvaWQgYXBwZW5kKExh
eWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBj
b25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CiAKICAgICBib29sIGhhc01vcmVVcGRhdGVzKCkgY29u
c3Q7CiAKQEAgLTU0LDggKzUzLDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHN0cnVjdCBV
cGRhdGVFbnRyeSB7Ci0gICAgICAgIE1hbmFnZWRUZXh0dXJlKiBtX3RleHR1cmU7Ci0gICAgICAg
IExheWVyVGV4dHVyZVVwZGF0ZXIqIG1fdXBkYXRlcjsKKyAgICAgICAgTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZSogbV90ZXh0dXJlOwogICAgICAgICBJbnRSZWN0IG1fc291cmNlUmVjdDsK
ICAgICAgICAgSW50UmVjdCBtX2Rlc3RSZWN0OwogICAgIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114106</attachid>
            <date>2011-11-08 10:11:08 -0800</date>
            <delta_ts>2011-11-08 11:05:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71388-20111108101107.patch</filename>
            <type>text/plain</type>
            <size>67983</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk1NzYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlMmZmYzIwYjIxOWIyYjU1
NDczZWYzMmVhNWQyYWUxNzk0ZTIxN2MzLi5iMzU0NzBmNmRiMTlhYWYwODA0MzJmYTVkOTgwYjFm
YWU5ZTcwZGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA2IEBACisyMDExLTExLTA4ICBEYXZp
ZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBB
ZGQgc3VwcG9ydCBmb3IgcGFpbnRpbmcgaW50byBhbiBTa1BpY3R1cmUgYW5kIHRoZW4gcmFzdGVy
aXppbmcgaW50byB0aWxlLXNpemVkIGNodW5rcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMzg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIFVwZGF0YWJsZVRleHR1cmUgY2xhc3MsIHdoaWNoIGFs
bG93cyB0ZXh0dXJlIHVwZGF0ZXIgdG8KKyAgICAgICAgYWxsb2NhdGUgdGlsZSBzcGVjaWZpYyBy
ZXNvdXJjZXMgYW5kIHBhaW50IHRpbGVzIHNlcGFyYXRlbHkuCisgICAgICAgIFJlbmFtZSB0ZXh0
dXJlIHVwbG9hZGVyIGNsYXNzZXMgYW5kIG1vdmUgdGhlbSB0byBzZXBhcmF0ZSBmaWxlcy4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMuIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Qml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjp1cGRhdGVSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcExheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBMYXllclRleHR1cmVVcGRhdGVyOjpCaXRtYXBMYXllclRl
eHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcExheWVyVGV4dHVyZVVwZGF0
ZXI6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6c2FtcGxlZFRleGVsRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcExh
eWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBMYXllclRleHR1cmVVcGRhdGVyOjp1cGRhdGVUZXh0dXJlUmVjdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRlci5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oLgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6cHJlcGFyZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6dGV4dHVyZVVwZGF0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRlcjo6b3JpZW50YXRpb24pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmguCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyOjpDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnBhaW50Q29udGVudHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6Y29udGVudFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRl
ci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuY3BwLgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVCdWZmZXI6OkZyYW1lQnVmZmVyOjpGcmFtZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUJ1ZmZlcjo6RnJhbWVCdWZmZXI6On5GcmFtZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUJ1ZmZlcjo6RnJhbWVCdWZmZXI6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNraWFMYXllclRleHR1cmVVcGRhdGVyOjpU
ZXh0dXJlOjp1cGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tpYUxh
eWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZl
clNraWFMYXllclRleHR1cmVVcGRhdGVyOjpGcmFtZUJ1ZmZlclNraWFMYXllclRleHR1cmVVcGRh
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0
ZXI6On5GcmFtZUJ1ZmZlclNraWFMYXllclRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZVRleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlcjo6c2Ft
cGxlZFRleGVsRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tpYUxheWVy
VGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZVRleHR1cmVSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNraWFMYXllclRleHR1cmVVcGRhdGVyLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
VGV4dHVyZVVwZGF0ZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tpYUxheWVy
VGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnByZXBhcmVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnRleHR1cmVVcGRh
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0
ZXI6Om9yaWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tpYUxheWVy
VGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnByZXBhcmVSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6dXBk
YXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmU6OnRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjp+VGV4dHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjp0ZXh0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OlRleHR1cmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Q2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcExheWVyVGV4
dHVyZVVwZGF0ZXI6OlRleHR1cmU6OlRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6dXBkYXRlUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Qml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRlcik6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGVUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcExheWVyVGV4dHVyZVVwZGF0ZXI6OnNhbXBs
ZWRUZXhlbEZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBMYXllclRleHR1cmVVcGRh
dGVyOjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6dXBkYXRlVGV4dHVyZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2tpYUxh
eWVyVGV4dHVyZVVwZGF0ZXI6OlNraWFMYXllclRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNraWFMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2tpYUxheWVyVGV4dHVyZVVwZGF0ZXI6OmRyYXdQaWN0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6
OlRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6VGV4dHVyZTo6dXBkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1
ZmZlclNraWFMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlcjo6RnJhbWVCdWZmZXJTa2lhTGF5ZXJU
ZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNraWFMYXllclRl
eHR1cmVVcGRhdGVyOjp+RnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNraWFMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGVU
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVw
ZGF0ZXI6OnNhbXBsZWRUZXhlbEZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZl
clNraWFMYXllclRleHR1cmVVcGRhdGVyOjp1cGRhdGVUZXh0dXJlUmVjdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXIuY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RleHR1cmVVcGRhdGVyLmguCisgICAgICAgIChXZWJDb3JlOjpTa2lhTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6U2tpYUxheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2tpYUxh
eWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
a2lhTGF5ZXJUZXh0dXJlVXBkYXRlcjo6ZHJhd1BpY3R1cmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1NraWFMYXllclRleHR1cmVVcGRhdGVyLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVw
ZGF0ZXIuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRhYmxlVGlsZTo6VXBkYXRhYmxl
VGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpVcGRhdGFibGVUaWxlOjp0ZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlVwZGF0YWJsZVRpbGU6Om1hbmFnZWRUZXh0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgor
ICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJvdGVjdFRpbGVUZXh0dXJlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVVcGRhdGVyOjphcHBlbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUZXh0dXJlVXBkYXRlcjo6dXBkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmg6CisKIDIwMTEtMTEtMDgg
IEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5z
cGVjdG9yOiBbRXh0ZW5zaW9uIEFQSV1bQ2hyb21pdW1dIGluamVjdGVkIGV4dGVuc2lvbiBBUEkg
bmVlZHMgdG8gcmV0dXJuIGFuIG9iamVjdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDU5M2VkNTlhYjIy
NTkxZjg4ODBkNjcxZTFiN2FhOGJiYWE5ODcxNjIuLjc1MmU3Nzg5MGJmZDY0OGQzMjY1YmViMmVk
OTdmMjQzOGNhYjU5MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM0NDksMTAgKzM0NDksMTQgQEAK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRl
ci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcExh
eWVyVGV4dHVyZVVwZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVt
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVy
TGludXguaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVu
dExheWVyQ2hyb21pdW0uY3BwJywKQEAgLTM0NzMsNiArMzQ3Nyw4IEBACiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFJlbmRlclN0eWxlLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9taXVtV2luLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFV0aWxzQ2hyb21p
dW1XaW4uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVC
dWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXIuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5kaW5n
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2VvbWV0cnlC
aW5kaW5nLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBo
UGFnZVRyZWVOb2RlQ2hyb21pdW1XaW4uY3BwJywKQEAgLTM0OTYsOCArMzUwMiw2IEBACiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2Uu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1
cmVTdWJJbWFnZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclRleHR1cmVVcGRhdGVyLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuY3BwJywKLSAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL05vbkNvbXBvc2l0ZWRDb250ZW50
SG9zdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL05vbkNv
bXBvc2l0ZWRDb250ZW50SG9zdC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9NZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oJywKQEAgLTM1MTksNiArMzUyMyw4
IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21p
dW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9u
dERhdGFDaHJvbWl1bVdpbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1NpbXBsZUZvbnREYXRhTGludXguY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Ta2lhTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NraWFMYXllclRleHR1cmVVcGRhdGVyLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYWNraW5nVGV4dHVy
ZUFsbG9jYXRvci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RyYWNraW5nVGV4dHVyZUFsbG9jYXRvci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBM
YXllclRleHR1cmVVcGRhdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYmQzZWI2ZjYxNGUyMDNlNWNkYjll
MDYwNzFlYjQ4ZTYyMzNhNWFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKQEAg
LTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiQml0bWFwTGF5ZXJUZXh0dXJlVXBk
YXRlci5oIgorCisjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybUNvbG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQml0bWFwTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVyZShCaXRtYXBMYXllclRleHR1cmVVcGRhdGVyKiB0
ZXh0dXJlVXBkYXRlciwgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4dHVyZSkKKyAgICA6
IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUodGV4dHVyZSkKKyAgICAsIG1fdGV4dHVyZVVw
ZGF0ZXIodGV4dHVyZVVwZGF0ZXIpCit7Cit9CisKK3ZvaWQgQml0bWFwTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZTo6dXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4
dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRSZWN0JiBkZXN0UmVjdCkKK3sKKyAgICB0ZXh0dXJlVXBkYXRlcigpLT51cGRhdGVUZXh0
dXJlUmVjdChjb250ZXh0LCBhbGxvY2F0b3IsIHRleHR1cmUoKSwgc291cmNlUmVjdCwgZGVzdFJl
Y3QpOworfQorCitQYXNzUmVmUHRyPEJpdG1hcExheWVyVGV4dHVyZVVwZGF0ZXI+IEJpdG1hcExh
eWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVt
PiBwYWludGVyLCBib29sIHVzZU1hcFRleFN1YkltYWdlKQoreworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRlcihwYWludGVyLCB1c2VNYXBUZXhTdWJJbWFn
ZSkpOworfQorCitCaXRtYXBMYXllclRleHR1cmVVcGRhdGVyOjpCaXRtYXBMYXllclRleHR1cmVV
cGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIsIGJvb2wgdXNl
TWFwVGV4U3ViSW1hZ2UpCisgICAgOiBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKHBhaW50ZXIp
CisgICAgLCBtX3RleFN1YkltYWdlKHVzZU1hcFRleFN1YkltYWdlKQoreworfQorCitMYXllclRl
eHR1cmVVcGRhdGVyOjpUZXh0dXJlKiBCaXRtYXBMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGVU
ZXh0dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKQoreworICAgIHJldHVybiBuZXcgVGV4dHVy
ZSh0aGlzLCBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKTsKK30KKworTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IEJpdG1hcExheWVyVGV4dHVyZVVwZGF0ZXI6
OnNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KQoreworICAgIC8vIFRo
ZSBjb21wb25lbnQgb3JkZXIgbWF5IGJlIGJncmEgaWYgd2UgdXBsb2FkZWQgYmdyYSBwaXhlbHMg
dG8gcmdiYSB0ZXh0dXJlcy4KKyAgICByZXR1cm4gUGxhdGZvcm1Db2xvcjo6c2FtZUNvbXBvbmVu
dE9yZGVyKHRleHR1cmVGb3JtYXQpID8KKyAgICAgICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6
OlNhbXBsZWRUZXhlbEZvcm1hdFJHQkEgOiBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4
ZWxGb3JtYXRCR1JBOworfQorCit2b2lkIEJpdG1hcExheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBh
cmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGls
ZVNpemUsIGludCBib3JkZXJUZXhlbHMpCit7CisgICAgbV90ZXhTdWJJbWFnZS5zZXRTdWJJbWFn
ZVNpemUodGlsZVNpemUpOworCisgICAgbV9jYW52YXMucmVzaXplKGNvbnRlbnRSZWN0LnNpemUo
KSk7CisgICAgLy8gQXNzdW1wdGlvbjogaWYgYSB0aWxlciBpcyB1c2luZyBib3JkZXIgdGV4ZWxz
LCB0aGVuIGl0IGlzIGJlY2F1c2UgdGhlCisgICAgLy8gbGF5ZXIgaXMgbGlrZWx5IHRvIGJlIGZp
bHRlcmVkIG9yIHRyYW5zZm9ybWVkLiBCZWNhdXNlIG9mIGl0IG1pZ2h0IGJlCisgICAgLy8gdHJh
bnNmb3JtZWQsIGRyYXcgdGhlIHRleHQgaW4gZ3JheXNjYWxlIGluc3RlYWQgb2Ygc3VicGl4ZWwg
YW50aWFsaWFzaW5nLgorICAgIFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpUZXh0T3B0aW9uIHRl
eHRPcHRpb24gPQorICAgICAgICBib3JkZXJUZXhlbHMgPyBQbGF0Zm9ybUNhbnZhczo6UGFpbnRl
cjo6R3JheXNjYWxlVGV4dCA6IFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpTdWJwaXhlbFRleHQ7
CisgICAgUGxhdGZvcm1DYW52YXM6OlBhaW50ZXIgY2FudmFzUGFpbnRlcigmbV9jYW52YXMsIHRl
eHRPcHRpb24pOworICAgIHBhaW50Q29udGVudHMoKmNhbnZhc1BhaW50ZXIuY29udGV4dCgpLCBj
b250ZW50UmVjdCk7Cit9CisKK3ZvaWQgQml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBkYXRl
VGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3Iq
IGFsbG9jYXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQoreworICAgIFBsYXRmb3JtQ2FudmFzOjpB
dXRvTG9ja2VyIGxvY2tlcigmbV9jYW52YXMpOworCisgICAgdGV4dHVyZS0+YmluZFRleHR1cmUo
Y29udGV4dCwgYWxsb2NhdG9yKTsKKyAgICBtX3RleFN1YkltYWdlLnVwbG9hZChsb2NrZXIucGl4
ZWxzKCksIGNvbnRlbnRSZWN0KCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0LCB0ZXh0dXJlLT5mb3Jt
YXQoKSwgY29udGV4dCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBMYXllclRleHR1cmVVcGRhdGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBMYXllclRleHR1
cmVVcGRhdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODc0YzVjYzliYzU3ZjE2ODZjMTZiNWEzYWVjNWY4M2Jk
YWI4MGI4MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0JpdG1hcExheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAtMCwwICsxLDczIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworCisjaWZuZGVmIEJpdG1hcExheWVyVGV4dHVyZVVwZGF0ZXJfaAorI2RlZmluZSBC
aXRtYXBMYXllclRleHR1cmVVcGRhdGVyX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKworI2luY2x1ZGUgIkNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRl
ICJMYXllclRleHR1cmVTdWJJbWFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ2FudmFzLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGF5ZXJQYWludGVyQ2hyb21pdW07CisKKy8v
IEEgTGF5ZXJUZXh0dXJlVXBkYXRlciB3aXRoIGFuIGludGVybmFsIGJpdG1hcC4KK2NsYXNzIEJp
dG1hcExheWVyVGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
ciB7CitwdWJsaWM6CisgICAgY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRh
dGVyOjpUZXh0dXJlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRleHR1cmUoQml0bWFwTGF5ZXJU
ZXh0dXJlVXBkYXRlciosIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+KTsKKworICAgICAgICB2
aXJ0dWFsIHZvaWQgcHJlcGFyZVJlY3QoY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkgeyB9Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVy
ZUFsbG9jYXRvciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRl
c3RSZWN0KTsKKworICAgIHByaXZhdGU6CisgICAgICAgIEJpdG1hcExheWVyVGV4dHVyZVVwZGF0
ZXIqIHRleHR1cmVVcGRhdGVyKCkgeyByZXR1cm4gbV90ZXh0dXJlVXBkYXRlcjsgfQorCisgICAg
ICAgIEJpdG1hcExheWVyVGV4dHVyZVVwZGF0ZXIqIG1fdGV4dHVyZVVwZGF0ZXI7CisgICAgfTsK
KworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJpdG1hcExheWVyVGV4dHVyZVVwZGF0ZXI+IGNyZWF0
ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiwgYm9vbCB1c2VNYXBUZXhTdWJJbWFn
ZSk7CisKKyAgICB2aXJ0dWFsIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIGNyZWF0ZVRl
eHR1cmUoVGV4dHVyZU1hbmFnZXIqKTsKKyAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKCkgeyByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Qm90dG9tVXBPcmllbnRhdGlvbjsg
fQorICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNE
ZW51bSB0ZXh0dXJlRm9ybWF0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNv
bnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJv
cmRlclRleGVscyk7CisgICAgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQz
RCosIFRleHR1cmVBbGxvY2F0b3IqLCBNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKworcHJpdmF0ZToKKyAgICBCaXRt
YXBMYXllclRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+LCBi
b29sIHVzZU1hcFRleFN1YkltYWdlKTsKKworICAgIFBsYXRmb3JtQ2FudmFzIG1fY2FudmFzOwor
ICAgIExheWVyVGV4dHVyZVN1YkltYWdlIG1fdGV4U3ViSW1hZ2U7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2Vu
ZGlmIC8vIEJpdG1hcExheWVyVGV4dHVyZVVwZGF0ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNM
YXllclRleHR1cmVVcGRhdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YzQ1ZWFlZTU2NTI1NGNhMmMzNGQz
ZmIxZTY2MTY1ZjA1YzU2ZGVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKQEAg
LTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlci5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5ZXJQ
YWludGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Q2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcihQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyKQorICAgIDog
bV9wYWludGVyKHBhaW50ZXIpCit7Cit9CisKK3ZvaWQgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0KQoreworICAgIGNvbnRleHQudHJhbnNsYXRlKC1jb250ZW50UmVjdC54KCks
IC1jb250ZW50UmVjdC55KCkpOworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkNhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXI6OnBhaW50IiwgdGhpcywgMCk7CisgICAgICAgIG1fcGFpbnRlci0+
cGFpbnQoY29udGV4dCwgY29udGVudFJlY3QpOworICAgIH0KKyAgICBtX2NvbnRlbnRSZWN0ID0g
Y29udGVudFJlY3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVV
cGRhdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNDBjZGQ5MzM0ZmQ4ZGU2NzUwNGY0NGZhMGRjMGM5NzQ4NzA1
NmMzMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAtMCwwICsxLDU1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworCisjaWZuZGVmIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXJfaAorI2RlZmluZSBDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKKworI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIExheWVyUGFpbnRlckNocm9t
aXVtOworCisvLyBBIExheWVyVGV4dHVyZVVwZGF0ZXIgd2l0aCBhbiBpbnRlcm5hbCBjYW52YXMu
CitjbGFzcyBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGljIExheWVyVGV4dHVyZVVw
ZGF0ZXIgeworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOworCisgICAgdm9pZCBwYWludENv
bnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKyAg
ICBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudFJl
Y3Q7IH0KKworcHJpdmF0ZToKKworICAgIEludFJlY3QgbV9jb250ZW50UmVjdDsKKyAgICBPd25Q
dHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IG1fcGFpbnRlcjsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjZW5kaWYg
Ly8gQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggY2E4YjNiZDc2MWYwODE1ZTQ3YjZjZmIwNDkxYTFkOTcyODc5ZjA0Yy4u
ZmE5Yzk4NzIxOGY4YjcwMzAwNzM4ZDg0YWIxYzJkMWQwYzI0YTRlZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nv
bnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMzQsOSArMzQsMTAgQEAKIAogI2luY2x1ZGUgIkNv
bnRlbnRMYXllckNocm9taXVtLmgiCiAKKyNpbmNsdWRlICJCaXRtYXBMYXllclRleHR1cmVVcGRh
dGVyLmgiCisjaW5jbHVkZSAiRnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgog
I2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgiCi0jaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5o
IgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpAQCAtMTIyLDEyICsxMjMsMTIgQEAgdm9p
ZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIoY29uc3QgQ0NMYXll
clRyZWVIb3N0KiBob3N0KQogewogI2lmIFVTRShTS0lBKQogICAgIGlmIChob3N0LT5zZXR0aW5n
cygpLmFjY2VsZXJhdGVQYWludGluZykgewotICAgICAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5
ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6Y3JlYXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNy
ZWF0ZShtX2RlbGVnYXRlKSk7CisgICAgICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBGcmFtZUJ1ZmZl
clNraWFMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUoQ29udGVudExheWVyUGFpbnRlcjo6Y3Jl
YXRlKG1fZGVsZWdhdGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBVU0Uo
U0tJQSkKIAotICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBMYXllclRleHR1cmVVcGRhdGVyQml0bWFw
OjpjcmVhdGUoQ29udGVudExheWVyUGFpbnRlcjo6Y3JlYXRlKG1fZGVsZWdhdGUpLCBob3N0LT5s
YXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdNYXBTdWIpOworICAgIG1fdGV4dHVyZVVw
ZGF0ZXIgPSBCaXRtYXBMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUoQ29udGVudExheWVyUGFp
bnRlcjo6Y3JlYXRlKG1fZGVsZWdhdGUpLCBob3N0LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVz
KCkudXNpbmdNYXBTdWIpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNraWFMYXllclRleHR1cmVVcGRhdGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVm
ZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkNmJkOGY5YTc5MWFj
OGZlN2NlMmM0NjNkMWYxZDg3MDAxZGY3NjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNraWFMYXllclRleHR1
cmVVcGRhdGVyLmNwcApAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIFVTRShTS0lBKQor
CisjaW5jbHVkZSAiRnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorCisjaW5j
bHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJTa0NhbnZhcy5oIgorI2lu
Y2x1ZGUgIlNrR3B1RGV2aWNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNl
IHsKKworY2xhc3MgRnJhbWVCdWZmZXIgeworcHVibGljOgorICAgIEZyYW1lQnVmZmVyKCk7Cisg
ICAgfkZyYW1lQnVmZmVyKCk7CisKKyAgICBTa0NhbnZhcyogaW5pdGlhbGl6ZShHcmFwaGljc0Nv
bnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBNYW5hZ2VkVGV4dHVyZSopOworCitwcml2YXRl
OgorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CisgICAgUGxhdGZvcm0zRE9iamVj
dCBtX2ZibzsKKyAgICBPd25QdHI8U2tDYW52YXM+IG1fY2FudmFzOworfTsKKworRnJhbWVCdWZm
ZXI6OkZyYW1lQnVmZmVyKCkKKyAgICA6IG1fY29udGV4dCgwKQorICAgICwgbV9mYm8oMCkKK3sK
K30KKworRnJhbWVCdWZmZXI6On5GcmFtZUJ1ZmZlcigpCit7CisgICAgbV9jYW52YXMuY2xlYXIo
KTsKKworICAgIGlmIChtX2ZibykKKyAgICAgICAgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZl
cihtX2Zibyk7Cit9CisKK1NrQ2FudmFzKiBGcmFtZUJ1ZmZlcjo6aW5pdGlhbGl6ZShHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBNYW5hZ2Vk
VGV4dHVyZSogdGV4dHVyZSkKK3sKKyAgICBtX2NvbnRleHQgPSBjb250ZXh0OworICAgIG1fZmJv
ID0gbV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIG1fY29udGV4dC0+YmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIHRl
eHR1cmUtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKG1fY29udGV4dCwgYWxsb2NhdG9yKTsKKworICAg
IC8vIENyZWF0ZSBhIHNraWEgZ3B1IGNhbnZhcy4KKyAgICBHckNvbnRleHQqIGdyQ29udGV4dCA9
IG1fY29udGV4dC0+Z3JDb250ZXh0KCk7CisgICAgSW50U2l6ZSBjYW52YXNTaXplID0gdGV4dHVy
ZS0+c2l6ZSgpOworICAgIEdyUGxhdGZvcm1TdXJmYWNlRGVzYyB0YXJnZXREZXNjOworICAgIHRh
cmdldERlc2MucmVzZXQoKTsKKyAgICB0YXJnZXREZXNjLmZTdXJmYWNlVHlwZSA9IGtUZXh0dXJl
UmVuZGVyVGFyZ2V0X0dyUGxhdGZvcm1TdXJmYWNlVHlwZTsKKyAgICB0YXJnZXREZXNjLmZSZW5k
ZXJUYXJnZXRGbGFncyA9IGtOb25lX0dyUGxhdGZvcm1SZW5kZXJUYXJnZXRGbGFnQml0OworICAg
IHRhcmdldERlc2MuZldpZHRoID0gY2FudmFzU2l6ZS53aWR0aCgpOworICAgIHRhcmdldERlc2Mu
ZkhlaWdodCA9IGNhbnZhc1NpemUuaGVpZ2h0KCk7CisgICAgdGFyZ2V0RGVzYy5mQ29uZmlnID0g
a1JHQkFfODg4OF9HclBpeGVsQ29uZmlnOworICAgIHRhcmdldERlc2MuZlN0ZW5jaWxCaXRzID0g
ODsKKyAgICB0YXJnZXREZXNjLmZQbGF0Zm9ybVRleHR1cmUgPSB0ZXh0dXJlLT50ZXh0dXJlSWQo
KTsKKyAgICB0YXJnZXREZXNjLmZQbGF0Zm9ybVJlbmRlclRhcmdldCA9IG1fZmJvOworICAgIFNr
QXV0b1RVbnJlZjxHclRleHR1cmU+IHRhcmdldChzdGF0aWNfY2FzdDxHclRleHR1cmUqPihnckNv
bnRleHQtPmNyZWF0ZVBsYXRmb3JtU3VyZmFjZSh0YXJnZXREZXNjKSkpOworICAgIFNrQXV0b1RV
bnJlZjxTa0RldmljZT4gZGV2aWNlKG5ldyBTa0dwdURldmljZShnckNvbnRleHQsIHRhcmdldC5n
ZXQoKSkpOworICAgIG1fY2FudmFzID0gYWRvcHRQdHIobmV3IFNrQ2FudmFzKGRldmljZS5nZXQo
KSkpOworCisgICAgcmV0dXJuIG1fY2FudmFzLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZQor
CitGcmFtZUJ1ZmZlclNraWFMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpUZXh0dXJlKEZy
YW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyLCBQYXNzT3du
UHRyPE1hbmFnZWRUZXh0dXJlPiB0ZXh0dXJlKQorICAgIDogTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
VGV4dHVyZSh0ZXh0dXJlKQorICAgICwgbV90ZXh0dXJlVXBkYXRlcih0ZXh0dXJlVXBkYXRlcikK
K3sKK30KKwordm9pZCBGcmFtZUJ1ZmZlclNraWFMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJl
Ojp1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9y
KiBhbGxvY2F0b3IsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRl
c3RSZWN0KQoreworICAgIHRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZVRleHR1cmVSZWN0KGNvbnRl
eHQsIGFsbG9jYXRvciwgdGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7Cit9CisKK1Bh
c3NSZWZQdHI8RnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlcj4gRnJhbWVCdWZmZXJT
a2lhTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hy
b21pdW0+IHBhaW50ZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGcmFtZUJ1ZmZlclNr
aWFMYXllclRleHR1cmVVcGRhdGVyKHBhaW50ZXIpKTsKK30KKworRnJhbWVCdWZmZXJTa2lhTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6RnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNz
T3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyKQorICAgIDogU2tpYUxheWVyVGV4
dHVyZVVwZGF0ZXIocGFpbnRlcikKK3sKK30KKworRnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6fkZyYW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXIoKQoreworfQorCitM
YXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiBGcmFtZUJ1ZmZlclNraWFMYXllclRleHR1cmVV
cGRhdGVyOjpjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKQoreworICAgIHJl
dHVybiBuZXcgVGV4dHVyZSh0aGlzLCBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKTsK
K30KKworTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IEZyYW1lQnVmZmVy
U2tpYUxheWVyVGV4dHVyZVVwZGF0ZXI6OnNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0
dXJlRm9ybWF0KQoreworICAgIC8vIEhlcmUgd2UgZGlyZWN0bHkgcmVuZGVyIHRvIHRoZSB0ZXh0
dXJlLCBzbyB0aGUgY29tcG9uZW50IG9yZGVyIGlzIGFsd2F5cyBjb3JyZWN0LgorICAgIHJldHVy
biBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBOworfQorCit2b2lk
IEZyYW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZVRleHR1cmVSZWN0KEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIE1h
bmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJ
bnRSZWN0JiBkZXN0UmVjdCkKK3sKKyAgICAvLyBNYWtlIHN1cmUgU0tJQSB1c2VzIHRoZSBjb3Jy
ZWN0IEdMIGNvbnRleHQuCisgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
Ly8gTm90aWZ5IFNLSUEgdG8gc3luYyBpdHMgaW50ZXJuYWwgR0wgc3RhdGUuCisgICAgY29udGV4
dC0+Z3JDb250ZXh0KCktPnJlc2V0Q29udGV4dCgpOworCisgICAgLy8gQ3JlYXRlIGFuIGFjY2Vs
ZXJhdGVkIGNhbnZhcyB0byBkcmF3IG9uLgorICAgIEZyYW1lQnVmZmVyIGJ1ZmZlcjsKKyAgICBT
a0NhbnZhcyogY2FudmFzID0gYnVmZmVyLmluaXRpYWxpemUoY29udGV4dCwgYWxsb2NhdG9yLCB0
ZXh0dXJlKTsKKworICAgIGNhbnZhcy0+Y2xpcFJlY3QoU2tSZWN0KGRlc3RSZWN0KSk7CisgICAg
Ly8gVHJhbnNsYXRlIHRoZSBvcmlnaW4gb2YgY29udGVudFJlY3QgdG8gdGhhdCBvZiBkZXN0UmVj
dC4KKyAgICAvLyBOb3RlIHRoYXQgZGVzdFJlY3QgaXMgZGVmaW5lZCByZWxhdGl2ZSB0byBzb3Vy
Y2VSZWN0LgorICAgIGNhbnZhcy0+dHJhbnNsYXRlKGNvbnRlbnRSZWN0KCkueCgpIC0gc291cmNl
UmVjdC54KCkgKyBkZXN0UmVjdC54KCksCisgICAgICAgICAgICAgICAgICAgICAgY29udGVudFJl
Y3QoKS55KCkgLSBzb3VyY2VSZWN0LnkoKSArIGRlc3RSZWN0LnkoKSk7CisgICAgY2FudmFzLT5k
cmF3UGljdHVyZShtX3BpY3R1cmUpOworCisgICAgLy8gRmx1c2ggU0tJQSBjb250ZXh0IHNvIHRo
YXQgYWxsIHRoZSByZW5kZXJlZCBzdHVmZiBhcHBlYXJzIG9uIHRoZSB0ZXh0dXJlLgorICAgIGNv
bnRleHQtPmdyQ29udGV4dCgpLT5mbHVzaCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisjZW5kaWYgLy8gVVNFKFNLSUEpCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBk
YXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjMwZjBmNjUwNWZkMzE2ZWZhYjYxNmFkMmJmYjUzZDkzOTEyNTE0
M2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9GcmFtZUJ1ZmZlclNraWFMYXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTAsMCArMSw2
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKworI2lmbmRlZiBGcmFtZUJ1ZmZlclNraWFMYXllclRleHR1cmVVcGRhdGVy
X2gKKyNkZWZpbmUgRnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlcl9oCisKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaWYgVVNFKFNLSUEpCisKKyNpbmNsdWRlICJT
a2lhTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEZyYW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMgU2tpYUxheWVyVGV4
dHVyZVVwZGF0ZXIgeworcHVibGljOgorICAgIGNsYXNzIFRleHR1cmUgOiBwdWJsaWMgTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSB7CisgICAgcHVibGljOgorICAgICAgICBUZXh0dXJlKEZy
YW1lQnVmZmVyU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXIqLCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0
dXJlPik7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVSZWN0KGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVjdChHcmFwaGlj
c0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBGcmFt
ZUJ1ZmZlclNraWFMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIHsgcmV0dXJu
IG1fdGV4dHVyZVVwZGF0ZXI7IH0KKworICAgICAgICBGcmFtZUJ1ZmZlclNraWFMYXllclRleHR1
cmVVcGRhdGVyKiBtX3RleHR1cmVVcGRhdGVyOworICAgIH07CisKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxGcmFtZUJ1ZmZlclNraWFMYXllclRleHR1cmVVcGRhdGVyPiBjcmVhdGUoUGFzc093blB0
cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOworICAgIHZpcnR1YWwgfkZyYW1lQnVmZmVyU2tpYUxh
eWVyVGV4dHVyZVVwZGF0ZXIoKTsKKworICAgIHZpcnR1YWwgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
VGV4dHVyZSogY3JlYXRlVGV4dHVyZShUZXh0dXJlTWFuYWdlciopOworICAgIHZpcnR1YWwgT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24oKSB7IHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpUb3BE
b3duT3JpZW50YXRpb247IH0KKyAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVk
VGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCk7CisgICAgdmlydHVhbCB2b2lkIHBy
ZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYg
dGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpIHsgfQorICAgIHZvaWQgdXBkYXRlVGV4dHVyZVJl
Y3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1cmUq
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CisK
K3ByaXZhdGU6CisgICAgZXhwbGljaXQgRnJhbWVCdWZmZXJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRl
cihQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPik7Cit9OworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorI2VuZGlmIC8vIFVTRShTS0lBKQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyNlbmRpZiAvLyBGcmFtZUJ1ZmZlclNraWFMYXllclRleHR1cmVVcGRhdGVy
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDM2MzM2Mjk2N2FjY2RlYmMy
NTU5ZTI5YzI0ZDQzYzFjODg4ODAzMTcuLmM1NWJjNDIxNjZhOTg5OTAzYjQ4MzIxYTU2OGE5MmE3
YzEwODUyZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAtNDYsNiArNDYs
MjYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbWFnZUxheWVyVGV4dHVyZVVwZGF0
ZXIgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlciB7CiBwdWJsaWM6CisgICAgY2xhc3MgVGV4
dHVyZSA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIFRleHR1cmUoSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRl
ciwgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4dHVyZSkKKyAgICAgICAgICAgIDogTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSh0ZXh0dXJlKQorICAgICAgICAgICAgLCBtX3RleHR1
cmVVcGRhdGVyKHRleHR1cmVVcGRhdGVyKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVJlY3QoY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkgeyB9
CisgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQorICAgICAgICB7CisgICAgICAgICAgICB0ZXh0
dXJlVXBkYXRlcigpLT51cGRhdGVUZXh0dXJlUmVjdChjb250ZXh0LCBhbGxvY2F0b3IsIHRleHR1
cmUoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgeyByZXR1
cm4gbV90ZXh0dXJlVXBkYXRlcjsgfQorCisgICAgICAgIEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRl
ciogbV90ZXh0dXJlVXBkYXRlcjsKKyAgICB9OworCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1h
Z2VMYXllclRleHR1cmVVcGRhdGVyPiBjcmVhdGUoYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSkKICAg
ICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVy
KHVzZU1hcFRleFN1YkltYWdlKSk7CkBAIC01Myw2ICs3MywxMSBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIH5JbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIoKSB7IH0KIAorICAgIHZpcnR1YWwgTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSogY3JlYXRlVGV4dHVyZShUZXh0dXJlTWFuYWdlciog
bWFuYWdlcikKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgVGV4dHVyZSh0aGlzLCBNYW5hZ2Vk
VGV4dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKTsKKyAgICB9CisKICAgICB2aXJ0dWFsIE9yaWVudGF0
aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Qm90dG9tVXBP
cmllbnRhdGlvbjsgfQogCiAgICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRl
eGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcAppbmRleCBkZjI1NDM1NmJkYmQ2MWY4MmQ5MjFlOGU5YzBkY2VlYzlhYTVl
OGEyLi5kODY4OTZlOTExN2IzMjQwZmFlMWNiMzc5ZDQ5M2ZkOWY1ZTM2NmQyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTM1LDEzICszNSwxMyBAQAogI2luY2x1
ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogCiAjaW5jbHVkZSAiQ2FudmFzMkRMYXllckNo
cm9taXVtLmgiCisjaW5jbHVkZSAiQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1
ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5j
bHVkZSAiR2VvbWV0cnlCaW5kaW5nLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
ICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21p
dW0uaCIKLSNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgiCiAjaW5jbHVkZSAi
TWFuYWdlZFRleHR1cmUuaCIKICNpbmNsdWRlICJOb25Db21wb3NpdGVkQ29udGVudEhvc3QuaCIK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5o
CmluZGV4IDNkODU5N2UzOWU4NWQ0Y2JmMDE1NmQ1Y2MxMTc5NDY3OTUzNzEyNGYuLjFkYmI0MzRh
MzZiMzE1OTlkYTQxYWZmZWZiY2I1OTI4MDVlMWJjZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVV
cGRhdGVyLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKIAorI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NU
eXBlczNELmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIApAQCAtMzcsMTEgKzM4LDI2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3Mg
SW50UmVjdDsKIGNsYXNzIEludFNpemU7Ci1jbGFzcyBNYW5hZ2VkVGV4dHVyZTsKIGNsYXNzIFRl
eHR1cmVBbGxvY2F0b3I7CitjbGFzcyBUZXh0dXJlTWFuYWdlcjsKIAogY2xhc3MgTGF5ZXJUZXh0
dXJlVXBkYXRlciA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVyVGV4dHVyZVVwZGF0ZXI+IHsKIHB1
YmxpYzoKKyAgICAvLyBBbGxvd3MgdGV4dHVyZSB1cGxvYWRlcnMgdG8gc3RvcmUgcGVyLXRpbGUg
cmVzb3VyY2VzLgorICAgIGNsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0dXJl
PiB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5UZXh0dXJlKCkgeyB9CisKKyAgICAg
ICAgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleHR1cmUuZ2V0KCk7IH0K
KyAgICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVSZWN0KGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0
M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3Qg
SW50UmVjdCYgZGVzdFJlY3QpID0gMDsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIGV4cGxpY2l0
IFRleHR1cmUoUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4dHVyZSkgOiBtX3RleHR1cmUo
dGV4dHVyZSkgeyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBPd25QdHI8TWFuYWdlZFRleHR1
cmU+IG1fdGV4dHVyZTsKKyAgICB9OworCiAgICAgdmlydHVhbCB+TGF5ZXJUZXh0dXJlVXBkYXRl
cigpIHsgfQogCiAgICAgZW51bSBPcmllbnRhdGlvbiB7CkBAIC01NCw2ICs3MCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgU2FtcGxlZFRleGVsRm9ybWF0QkdSQSwKICAgICAgICAgU2FtcGxlZFRleGVs
Rm9ybWF0SW52YWxpZCwKICAgICB9OworICAgIHZpcnR1YWwgVGV4dHVyZSogY3JlYXRlVGV4dHVy
ZShUZXh0dXJlTWFuYWdlciopID0gMDsKICAgICAvLyBSZXR1cm5zIHRoZSBvcmllbnRhdGlvbiBv
ZiB0aGUgdGV4dHVyZSB1cGxvYWRlZCBieSB0aGlzIGludGVyZmFjZS4KICAgICB2aXJ0dWFsIE9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKCkgPSAwOwogICAgIC8vIFJldHVybnMgdGhlIGZvcm1hdCBv
ZiB0aGUgdGV4ZWwgdXBsb2FkZWQgYnkgdGhpcyBpbnRlcmZhY2UuCkBAIC02Miw3ICs3OSw2IEBA
IHB1YmxpYzoKICAgICAvLyBJZiB0aGUgZm9ybWF0IGlzIFRleGVsRm9ybWF0QkdSQSwgdmVjNC54
IGlzIGJsdWUgYW5kIHZlYzQueiBpcyByZWQuCiAgICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3Jt
YXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBj
b25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscykgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxv
Y2F0b3IqLCBNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0
IEludFJlY3QmIGRlc3RSZWN0KSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhY2IyY2QzZTQ2YjMwMTM0ZWFmODgwNWI0NTNlNWNhYjhkNTQ1YzFi
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52
YXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjE4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1
ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaCIKLQotI2luY2x1ZGUgIkV4dGVuc2lvbnMz
RC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkxheWVyUGFpbnRl
ckNocm9taXVtLmgiCi0jaW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybUNvbG9yLmgiCi0jaW5jbHVkZSAiVHJhY2VFdmVudC5oIgotCi0jaWYgVVNFKFNLSUEpCi0j
aW5jbHVkZSAiR3JDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgot
I2luY2x1ZGUgIlNrQ2FudmFzLmgiCi0jaW5jbHVkZSAiU2tHcHVEZXZpY2UuaCIKLSNlbmRpZiAv
LyBVU0UoU0tJQSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgVVNFKFNLSUEpCi1uYW1l
c3BhY2UgewotCi1jbGFzcyBGcmFtZUJ1ZmZlciB7Ci1wdWJsaWM6Ci0gICAgRnJhbWVCdWZmZXIo
KTsKLSAgICB+RnJhbWVCdWZmZXIoKTsKLQotICAgIFNrQ2FudmFzKiBpbml0aWFsaXplKEdyYXBo
aWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIE1hbmFnZWRUZXh0dXJlKik7Ci0KLXBy
aXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKLSAgICBQbGF0Zm9ybTNE
T2JqZWN0IG1fZmJvOwotICAgIE93blB0cjxTa0NhbnZhcz4gbV9jYW52YXM7Ci19OwotCi1GcmFt
ZUJ1ZmZlcjo6RnJhbWVCdWZmZXIoKQotICAgIDogbV9jb250ZXh0KDApCi0gICAgLCBtX2Zibygw
KQotewotfQotCi1GcmFtZUJ1ZmZlcjo6fkZyYW1lQnVmZmVyKCkKLXsKLSAgICBtX2NhbnZhcy5j
bGVhcigpOwotCi0gICAgaWYgKG1fZmJvKQotICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZUZyYW1l
YnVmZmVyKG1fZmJvKTsKLX0KLQotU2tDYW52YXMqIEZyYW1lQnVmZmVyOjppbml0aWFsaXplKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIE1h
bmFnZWRUZXh0dXJlKiB0ZXh0dXJlKQotewotICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Ci0gICAg
bV9mYm8gPSBtX2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAgbV9jb250ZXh0LT5i
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0g
ICAgdGV4dHVyZS0+ZnJhbWVidWZmZXJUZXh0dXJlMkQobV9jb250ZXh0LCBhbGxvY2F0b3IpOwot
Ci0gICAgLy8gQ3JlYXRlIGEgc2tpYSBncHUgY2FudmFzLgotICAgIEdyQ29udGV4dCogZ3JDb250
ZXh0ID0gbV9jb250ZXh0LT5nckNvbnRleHQoKTsKLSAgICBJbnRTaXplIGNhbnZhc1NpemUgPSB0
ZXh0dXJlLT5zaXplKCk7Ci0gICAgR3JQbGF0Zm9ybVN1cmZhY2VEZXNjIHRhcmdldERlc2M7Ci0g
ICAgdGFyZ2V0RGVzYy5yZXNldCgpOwotICAgIHRhcmdldERlc2MuZlN1cmZhY2VUeXBlID0ga1Rl
eHR1cmVSZW5kZXJUYXJnZXRfR3JQbGF0Zm9ybVN1cmZhY2VUeXBlOwotICAgIHRhcmdldERlc2Mu
ZlJlbmRlclRhcmdldEZsYWdzID0ga05vbmVfR3JQbGF0Zm9ybVJlbmRlclRhcmdldEZsYWdCaXQ7
Ci0gICAgdGFyZ2V0RGVzYy5mV2lkdGggPSBjYW52YXNTaXplLndpZHRoKCk7Ci0gICAgdGFyZ2V0
RGVzYy5mSGVpZ2h0ID0gY2FudmFzU2l6ZS5oZWlnaHQoKTsKLSAgICB0YXJnZXREZXNjLmZDb25m
aWcgPSBrUkdCQV84ODg4X0dyUGl4ZWxDb25maWc7Ci0gICAgdGFyZ2V0RGVzYy5mU3RlbmNpbEJp
dHMgPSA4OwotICAgIHRhcmdldERlc2MuZlBsYXRmb3JtVGV4dHVyZSA9IHRleHR1cmUtPnRleHR1
cmVJZCgpOwotICAgIHRhcmdldERlc2MuZlBsYXRmb3JtUmVuZGVyVGFyZ2V0ID0gbV9mYm87Ci0g
ICAgU2tBdXRvVFVucmVmPEdyVGV4dHVyZT4gdGFyZ2V0KHN0YXRpY19jYXN0PEdyVGV4dHVyZSo+
KGdyQ29udGV4dC0+Y3JlYXRlUGxhdGZvcm1TdXJmYWNlKHRhcmdldERlc2MpKSk7Ci0gICAgU2tB
dXRvVFVucmVmPFNrRGV2aWNlPiBkZXZpY2UobmV3IFNrR3B1RGV2aWNlKGdyQ29udGV4dCwgdGFy
Z2V0LmdldCgpKSk7Ci0gICAgbV9jYW52YXMgPSBhZG9wdFB0cihuZXcgU2tDYW52YXMoZGV2aWNl
LmdldCgpKSk7Ci0KLSAgICByZXR1cm4gbV9jYW52YXMuZ2V0KCk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlCi0jZW5kaWYgLy8gVVNFKFNLSUEpCi0KLUxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6Okxh
eWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4g
cGFpbnRlcikKLSAgICA6IG1fcGFpbnRlcihwYWludGVyKQotewotfQotCi12b2lkIExheWVyVGV4
dHVyZVVwZGF0ZXJDYW52YXM6OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKLXsKLSAgICBjb250ZXh0LnRyYW5zbGF0ZSgt
Y29udGVudFJlY3QueCgpLCAtY29udGVudFJlY3QueSgpKTsKLSAgICB7Ci0gICAgICAgIFRSQUNF
X0VWRU5UKCJMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzOjpwYWludCIsIHRoaXMsIDApOwotICAg
ICAgICBtX3BhaW50ZXItPnBhaW50KGNvbnRleHQsIGNvbnRlbnRSZWN0KTsKLSAgICB9Ci0gICAg
bV9jb250ZW50UmVjdCA9IGNvbnRlbnRSZWN0OwotfQotCi1QYXNzUmVmUHRyPExheWVyVGV4dHVy
ZVVwZGF0ZXJCaXRtYXA+IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNyZWF0ZShQYXNzT3du
UHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyLCBib29sIHVzZU1hcFRleFN1YkltYWdl
KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcChw
YWludGVyLCB1c2VNYXBUZXhTdWJJbWFnZSkpOwotfQotCi1MYXllclRleHR1cmVVcGRhdGVyQml0
bWFwOjpMYXllclRleHR1cmVVcGRhdGVyQml0bWFwKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hy
b21pdW0+IHBhaW50ZXIsIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpCi0gICAgOiBMYXllclRleHR1
cmVVcGRhdGVyQ2FudmFzKHBhaW50ZXIpCi0gICAgLCBtX3RleFN1YkltYWdlKHVzZU1hcFRleFN1
YkltYWdlKQotewotfQotCi1MYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXQg
TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6c2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRl
eHR1cmVGb3JtYXQpCi17Ci0gICAgLy8gVGhlIGNvbXBvbmVudCBvcmRlciBtYXkgYmUgYmdyYSBp
ZiB3ZSB1cGxvYWRlZCBiZ3JhIHBpeGVscyB0byByZ2JhIHRleHR1cmVzLgotICAgIHJldHVybiBQ
bGF0Zm9ybUNvbG9yOjpzYW1lQ29tcG9uZW50T3JkZXIodGV4dHVyZUZvcm1hdCkgPwotICAgICAg
ICAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0UkdCQSA6IExheWVy
VGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdEJHUkE7Ci19Ci0KLXZvaWQgTGF5ZXJU
ZXh0dXJlVXBkYXRlckJpdG1hcDo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscykKLXsKLSAg
ICBtX3RleFN1YkltYWdlLnNldFN1YkltYWdlU2l6ZSh0aWxlU2l6ZSk7Ci0KLSAgICBtX2NhbnZh
cy5yZXNpemUoY29udGVudFJlY3Quc2l6ZSgpKTsKLSAgICAvLyBBc3N1bXB0aW9uOiBpZiBhIHRp
bGVyIGlzIHVzaW5nIGJvcmRlciB0ZXhlbHMsIHRoZW4gaXQgaXMgYmVjYXVzZSB0aGUKLSAgICAv
LyBsYXllciBpcyBsaWtlbHkgdG8gYmUgZmlsdGVyZWQgb3IgdHJhbnNmb3JtZWQuIEJlY2F1c2Ug
b2YgaXQgbWlnaHQgYmUKLSAgICAvLyB0cmFuc2Zvcm1lZCwgZHJhdyB0aGUgdGV4dCBpbiBncmF5
c2NhbGUgaW5zdGVhZCBvZiBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCi0gICAgUGxhdGZvcm1DYW52
YXM6OlBhaW50ZXI6OlRleHRPcHRpb24gdGV4dE9wdGlvbiA9Ci0gICAgICAgIGJvcmRlclRleGVs
cyA/IFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpHcmF5c2NhbGVUZXh0IDogUGxhdGZvcm1DYW52
YXM6OlBhaW50ZXI6OlN1YnBpeGVsVGV4dDsKLSAgICBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlciBj
YW52YXNQYWludGVyKCZtX2NhbnZhcywgdGV4dE9wdGlvbik7Ci0gICAgcGFpbnRDb250ZW50cygq
Y2FudmFzUGFpbnRlci5jb250ZXh0KCksIGNvbnRlbnRSZWN0KTsKLX0KLQotdm9pZCBMYXllclRl
eHR1cmVVcGRhdGVyQml0bWFwOjp1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBNYW5hZ2VkVGV4dHVyZSogdGV4
dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3Qp
Ci17Ci0gICAgUGxhdGZvcm1DYW52YXM6OkF1dG9Mb2NrZXIgbG9ja2VyKCZtX2NhbnZhcyk7Ci0K
LSAgICB0ZXh0dXJlLT5iaW5kVGV4dHVyZShjb250ZXh0LCBhbGxvY2F0b3IpOwotICAgIG1fdGV4
U3ViSW1hZ2UudXBsb2FkKGxvY2tlci5waXhlbHMoKSwgY29udGVudFJlY3QoKSwgc291cmNlUmVj
dCwgZGVzdFJlY3QsIHRleHR1cmUtPmZvcm1hdCgpLCBjb250ZXh0KTsKLX0KLQotI2lmIFVTRShT
S0lBKQotUGFzc1JlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlPiBMYXllclRleHR1
cmVVcGRhdGVyU2tQaWN0dXJlOjpjcmVhdGUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1
bT4gcGFpbnRlcikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVyVGV4dHVyZVVwZGF0
ZXJTa1BpY3R1cmUocGFpbnRlcikpOwotfQotCi1MYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJl
OjpMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hy
b21pdW0+IHBhaW50ZXIpCi0gICAgOiBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzKHBhaW50ZXIp
Ci17Ci19Ci0KLUxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6On5MYXllclRleHR1cmVVcGRh
dGVyU2tQaWN0dXJlKCkKLXsKLX0KLQotTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVs
Rm9ybWF0IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OnNhbXBsZWRUZXhlbEZvcm1hdChH
QzNEZW51bSB0ZXh0dXJlRm9ybWF0KQotewotICAgIC8vIEhlcmUgd2UgZGlyZWN0bHkgcmVuZGVy
IHRvIHRoZSB0ZXh0dXJlLCBzbyB0aGUgY29tcG9uZW50IG9yZGVyIGlzIGFsd2F5cyBjb3JyZWN0
LgotICAgIHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JB
OwotfQotCi12b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OnByZXBhcmVUb1VwZGF0
ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGlu
dCBib3JkZXJUZXhlbHMpCi17Ci0gICAgU2tDYW52YXMqIGNhbnZhcyA9IG1fcGljdHVyZS5iZWdp
blJlY29yZGluZyhjb250ZW50UmVjdC53aWR0aCgpLCBjb250ZW50UmVjdC5oZWlnaHQoKSk7Ci0g
ICAgUGxhdGZvcm1Db250ZXh0U2tpYSBwbGF0Zm9ybUNvbnRleHQoY2FudmFzKTsKLSAgICBHcmFw
aGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KCZwbGF0Zm9ybUNvbnRleHQpOwotICAgIHBhaW50
Q29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBjb250ZW50UmVjdCk7Ci0gICAgbV9waWN0dXJlLmVu
ZFJlY29yZGluZygpOwotfQotCi12b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OnVw
ZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2Nh
dG9yKiBhbGxvY2F0b3IsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICAvLyBNYWtlIHN1cmUg
U0tJQSB1c2VzIHRoZSBjb3JyZWN0IEdMIGNvbnRleHQuCi0gICAgY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgLy8gTm90aWZ5IFNLSUEgdG8gc3luYyBpdHMgaW50ZXJuYWwgR0wg
c3RhdGUuCi0gICAgY29udGV4dC0+Z3JDb250ZXh0KCktPnJlc2V0Q29udGV4dCgpOwotCi0gICAg
Ly8gQ3JlYXRlIGFuIGFjY2VsZXJhdGVkIGNhbnZhcyB0byBkcmF3IG9uLgotICAgIEZyYW1lQnVm
ZmVyIGJ1ZmZlcjsKLSAgICBTa0NhbnZhcyogY2FudmFzID0gYnVmZmVyLmluaXRpYWxpemUoY29u
dGV4dCwgYWxsb2NhdG9yLCB0ZXh0dXJlKTsKLQotICAgIGNhbnZhcy0+Y2xpcFJlY3QoU2tSZWN0
KGRlc3RSZWN0KSk7Ci0gICAgLy8gVHJhbnNsYXRlIHRoZSBvcmlnaW4gb2YgY29udGVudFJlY3Qg
dG8gdGhhdCBvZiBkZXN0UmVjdC4KLSAgICAvLyBOb3RlIHRoYXQgZGVzdFJlY3QgaXMgZGVmaW5l
ZCByZWxhdGl2ZSB0byBzb3VyY2VSZWN0LgotICAgIGNhbnZhcy0+dHJhbnNsYXRlKGNvbnRlbnRS
ZWN0KCkueCgpIC0gc291cmNlUmVjdC54KCkgKyBkZXN0UmVjdC54KCksCi0gICAgICAgICAgICAg
ICAgICAgICAgY29udGVudFJlY3QoKS55KCkgLSBzb3VyY2VSZWN0LnkoKSArIGRlc3RSZWN0Lnko
KSk7Ci0gICAgY2FudmFzLT5kcmF3UGljdHVyZShtX3BpY3R1cmUpOwotCi0gICAgLy8gRmx1c2gg
U0tJQSBjb250ZXh0IHNvIHRoYXQgYWxsIHRoZSByZW5kZXJlZCBzdHVmZiBhcHBlYXJzIG9uIHRo
ZSB0ZXh0dXJlLgotICAgIGNvbnRleHQtPmdyQ29udGV4dCgpLT5mbHVzaCgpOwotfQotI2VuZGlm
IC8vIFVTRShTS0lBKQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0jZW5kaWYgLy8gVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNh
bnZhcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmM3MWM2OGZmN2M3ZGM5ODIx
Y2U5YWM4YTFiNDA4OGFhNTg4Mzg5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotCi0jaWZuZGVmIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXNfaAotI2RlZmluZSBM
YXllclRleHR1cmVVcGRhdGVyQ2FudmFzX2gKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKLQotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgotI2luY2x1ZGUgIkxheWVyVGV4
dHVyZVN1YkltYWdlLmgiCi0jaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgotI2luY2x1
ZGUgIlBsYXRmb3JtQ2FudmFzLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi0jaWYgVVNFKFNLSUEpCi0jaW5jbHVkZSAiU2tQaWN0
dXJlLmgiCi0KLWNsYXNzIEdyQ29udGV4dDsKLWNsYXNzIFNrQ2FudmFzOwotY2xhc3MgU2tQaWN0
dXJlOwotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR3JhcGhpY3NDb250
ZXh0M0Q7Ci1jbGFzcyBMYXllclBhaW50ZXJDaHJvbWl1bTsKLQotLy8gQSBMYXllclRleHR1cmVV
cGRhdGVyIHdpdGggYW4gaW50ZXJuYWwgY2FudmFzLgotY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRl
ckNhbnZhcyA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyIHsKLXByb3RlY3RlZDoKLSAgICBl
eHBsaWNpdCBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzKFBhc3NPd25QdHI8TGF5ZXJQYWludGVy
Q2hyb21pdW0+KTsKLQotICAgIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7Ci0gICAgY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRSZWN0OyB9Ci0KLXByaXZhdGU6Ci0KLSAgICBJ
bnRSZWN0IG1fY29udGVudFJlY3Q7Ci0gICAgT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBt
X3BhaW50ZXI7Ci19OwotCi0vLyBBIExheWVyVGV4dHVyZVVwZGF0ZXIgd2l0aCBhbiBpbnRlcm5h
bCBiaXRtYXAgY2FudmFzLgotY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcCA6IHB1Ymxp
YyBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxMYXllclRleHR1cmVVcGRhdGVyQml0bWFwPiBjcmVhdGUoUGFzc093blB0cjxMYXllclBh
aW50ZXJDaHJvbWl1bT4sIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpOwotCi0gICAgdmlydHVhbCBP
cmllbnRhdGlvbiBvcmllbnRhdGlvbigpIHsgcmV0dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6OkJv
dHRvbVVwT3JpZW50YXRpb247IH0KLSAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1w
bGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCk7Ci0gICAgdmlydHVhbCB2b2lk
IHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6
ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVU
ZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBNYW5hZ2Vk
VGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RS
ZWN0KTsKLQotcHJpdmF0ZToKLSAgICBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwKFBhc3NPd25Q
dHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+LCBib29sIHVzZU1hcFRleFN1YkltYWdlKTsKLSAgICBQ
bGF0Zm9ybUNhbnZhcyBtX2NhbnZhczsKLSAgICBMYXllclRleHR1cmVTdWJJbWFnZSBtX3RleFN1
YkltYWdlOwotfTsKLQotI2lmIFVTRShTS0lBKQotY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlclNr
UGljdHVyZSA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlPiBjcmVhdGUo
UGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOwotICAgIHZpcnR1YWwgfkxheWVyVGV4
dHVyZVVwZGF0ZXJTa1BpY3R1cmUoKTsKLQotICAgIHZpcnR1YWwgT3JpZW50YXRpb24gb3JpZW50
YXRpb24oKSB7IHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpUb3BEb3duT3JpZW50YXRpb247
IH0KLSAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0Mz
RGVudW0gdGV4dHVyZUZvcm1hdCk7Ci0gICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBi
b3JkZXJUZXhlbHMpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGlj
c0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKLQotcHJpdmF0ZToK
LSAgICBleHBsaWNpdCBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKFBhc3NPd25QdHI8TGF5
ZXJQYWludGVyQ2hyb21pdW0+KTsKLSAgCi0gICAgU2tQaWN0dXJlIG1fcGljdHVyZTsgLy8gUmVj
b3JkaW5nIGNhbnZhcy4KLX07Ci0jZW5kaWYgLy8gVVNFKFNLSUEpCi0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0jZW5kaWYg
Ly8gTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta2lhTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta2lhTGF5ZXJUZXh0
dXJlVXBkYXRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjBkNTIxNGE3MjRjMzFlOWYzYzZhMzQ0OTVhZWNj
MGE4ZTg0ZDc0YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1NraWFMYXllclRleHR1cmVVcGRhdGVyLmNwcApAQCAtMCwwICsxLDY0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisjaWYgVVNFKFNLSUEpCisKKyNpbmNsdWRlICJTa2lhTGF5ZXJUZXh0dXJl
VXBkYXRlci5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5
ZXJQYWludGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisj
aW5jbHVkZSAiU2tDYW52YXMuaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXI6OlNraWFMYXllclRleHR1cmVV
cGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIpCisgICAgOiBD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyKHBhaW50ZXIpCit7Cit9CisKK3ZvaWQgU2tpYUxheWVy
VGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpCit7CisgICAgU2tD
YW52YXMqIGNhbnZhcyA9IG1fcGljdHVyZS5iZWdpblJlY29yZGluZyhjb250ZW50UmVjdC53aWR0
aCgpLCBjb250ZW50UmVjdC5oZWlnaHQoKSk7CisgICAgUGxhdGZvcm1Db250ZXh0U2tpYSBwbGF0
Zm9ybUNvbnRleHQoY2FudmFzKTsKKyAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0
KCZwbGF0Zm9ybUNvbnRleHQpOworICAgIHBhaW50Q29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBj
b250ZW50UmVjdCk7CisgICAgbV9waWN0dXJlLmVuZFJlY29yZGluZygpOworfQorCit2b2lkIFNr
aWFMYXllclRleHR1cmVVcGRhdGVyOjpkcmF3UGljdHVyZShTa0NhbnZhcyogY2FudmFzKQorewor
ICAgIFRSQUNFX0VWRU5UKCJTa2lhTGF5ZXJUZXh0dXJlVXBkYXRlcjo6ZHJhd1BpY3R1cmUiLCB0
aGlzLCAwKTsKKyAgICBjYW52YXMtPmRyYXdQaWN0dXJlKG1fcGljdHVyZSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoU0tJQSkKKyNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Ta2lhTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hNWZjNjFiNTRjYTQ1ZDIxZGRjZjY5ZjJhOGNlNzY5MDdmMjc5MzAwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisj
aWZuZGVmIFNraWFMYXllclRleHR1cmVVcGRhdGVyX2gKKyNkZWZpbmUgU2tpYUxheWVyVGV4dHVy
ZVVwZGF0ZXJfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIFVTRShT
S0lBKQorCisjaW5jbHVkZSAiQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorI2luY2x1ZGUg
IlNrUGljdHVyZS5oIgorCitjbGFzcyBTa0NhbnZhczsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBMYXllclBhaW50ZXJDaHJvbWl1bTsKKworY2xhc3MgU2tpYUxheWVyVGV4dHVyZVVw
ZGF0ZXIgOiBwdWJsaWMgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciB7CitwdWJsaWM6CisgICAg
ZXhwbGljaXQgU2tpYUxheWVyVGV4dHVyZVVwZGF0ZXIoUGFzc093blB0cjxMYXllclBhaW50ZXJD
aHJvbWl1bT4pOworCisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhl
bHMpOworICAgIHZvaWQgZHJhd1BpY3R1cmUoU2tDYW52YXMqKTsKKworcHJvdGVjdGVkOgorICAg
IFNrUGljdHVyZSBtX3BpY3R1cmU7IC8vIFJlY29yZGluZyBjYW52YXMuCit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKFNLSUEpCisjZW5kaWYgLy8gVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorI2VuZGlmIC8vIFNraWFMYXllclRleHR1cmVVcGRhdGVyX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rp
bGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCmluZGV4IGZjYzQ2ZDk5M2Q1NDBhNDIxOWQ3
ZjI3MDEwMDE4NzM4ZWY3YjhmZmUuLjYxYTFlNGEwODQ0ODMxOTM2NWI3ODY0NmZhZGE5NGQ4MTNj
NjU0NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcApAQCAtNTEsMTcgKzUxLDIw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFVwZGF0YWJsZVRpbGUgOiBwdWJsaWMgQ0NM
YXllclRpbGluZ0RhdGE6OlRpbGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFVwZGF0YWJs
ZVRpbGUpOwogcHVibGljOgotICAgIGV4cGxpY2l0IFVwZGF0YWJsZVRpbGUoUGFzc093blB0cjxN
YW5hZ2VkVGV4dHVyZT4gdGV4KSA6IG1fdGV4KHRleCkgeyB9CisgICAgZXhwbGljaXQgVXBkYXRh
YmxlVGlsZShQYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IHRleCkgOiBt
X3RleCh0ZXgpIHsgfQogCi0gICAgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBt
X3RleC5nZXQoKTsgfQorICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIHRleHR1cmUo
KSB7IHJldHVybiBtX3RleC5nZXQoKTsgfQorICAgIE1hbmFnZWRUZXh0dXJlKiBtYW5hZ2VkVGV4
dHVyZSgpIHsgcmV0dXJuIG1fdGV4LT50ZXh0dXJlKCk7IH0KIAogICAgIGJvb2wgZGlydHkoKSBj
b25zdCB7IHJldHVybiAhbV9kaXJ0eUxheWVyUmVjdC5pc0VtcHR5KCk7IH0KICAgICB2b2lkIGNs
ZWFyRGlydHkoKSB7IG1fZGlydHlMYXllclJlY3QgPSBJbnRSZWN0KCk7IH0KIAogICAgIC8vIExh
eWVyLXNwYWNlIGRpcnR5IHJlY3RhbmdsZSB0aGF0IG5lZWRzIHRvIGJlIHJlcGFpbnRlZC4KICAg
ICBJbnRSZWN0IG1fZGlydHlMYXllclJlY3Q7CisgICAgLy8gUGFnZS1zcGFjZSByZWN0YW5nbGUg
dGhhdCBuZWVkcyB0byBiZSB1cGRhdGVkLgorICAgIEludFJlY3QgbV91cGRhdGVSZWN0OwogcHJp
dmF0ZToKLSAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IG1fdGV4OworICAgIFJlZlB0cjxMYXll
clRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBtX3RleDsKIH07CiAKIFRpbGVkTGF5ZXJDaHJvbWl1
bTo6VGlsZWRMYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUpCkBAIC0xNjcs
MTcgKzE3MCwxMiBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJl
c291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgQwogICAgICAgICAgICAgZWxzZSBp
ZiAoIXRpbGUtPmRpcnR5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAg
ICAgIC8vIENhbGN1bGF0ZSBwYWdlLXNwYWNlIHJlY3RhbmdsZSB0byBjb3B5IGZyb20uCi0gICAg
ICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSBtX3RpbGVyLT50aWxlQ29udGVudFJlY3QodGls
ZSk7Ci0gICAgICAgICAgICBjb25zdCBJbnRQb2ludCBhbmNob3IgPSBzb3VyY2VSZWN0LmxvY2F0
aW9uKCk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChtX3RpbGVyLT5sYXllclJl
Y3RUb0NvbnRlbnRSZWN0KHRpbGUtPm1fZGlydHlMYXllclJlY3QpKTsKLSAgICAgICAgICAgIC8v
IFBhaW50IHJlY3Qgbm90IGd1YXJhbnRlZWQgdG8gbGluZSB1cCBvbiB0aWxlIGJvdW5kYXJpZXMs
IHNvCi0gICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCBzb3VyY2VSZWN0IGRvZXNuJ3QgZXh0
ZW5kIG91dHNpZGUgb2YgaXQuCi0gICAgICAgICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChtX3Bh
aW50UmVjdCk7Ci0gICAgICAgICAgICBpZiAoc291cmNlUmVjdC5pc0VtcHR5KCkpCisgICAgICAg
ICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB0aWxlLT5tX3VwZGF0ZVJlY3Q7CisgICAgICAgICAg
ICBpZiAodGlsZS0+bV91cGRhdGVSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICAgICAgQVNTRVJUKHRpbGUtPnRleHR1cmUoKS0+aXNSZXNlcnZlZCgp
KTsKKyAgICAgICAgICAgIEFTU0VSVCh0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5pc1Jlc2VydmVk
KCkpOworICAgICAgICAgICAgY29uc3QgSW50UG9pbnQgYW5jaG9yID0gbV90aWxlci0+dGlsZUNv
bnRlbnRSZWN0KHRpbGUpLmxvY2F0aW9uKCk7CiAKICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0
aWxlLXNwYWNlIHJlY3RhbmdsZSB0byB1cGxvYWQgaW50by4KICAgICAgICAgICAgIEludFJlY3Qg
ZGVzdFJlY3QoSW50UG9pbnQoc291cmNlUmVjdC54KCkgLSBhbmNob3IueCgpLCBzb3VyY2VSZWN0
LnkoKSAtIGFuY2hvci55KCkpLCBzb3VyY2VSZWN0LnNpemUoKSk7CkBAIC0xOTcsMTIgKzE5NSwx
MiBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgQwogICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0
LnkoKSArIGRlc3RSZWN0LmhlaWdodCgpID4gbV9wYWludFJlY3QuaGVpZ2h0KCkpCiAgICAgICAg
ICAgICAgICAgQ1JBU0goKTsKIAotICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5iaW5kVGV4
dHVyZShjb250ZXh0LCB1cGRhdGVyLmFsbG9jYXRvcigpKTsKKyAgICAgICAgICAgIHRpbGUtPm1h
bmFnZWRUZXh0dXJlKCktPmJpbmRUZXh0dXJlKGNvbnRleHQsIHVwZGF0ZXIuYWxsb2NhdG9yKCkp
OwogICAgICAgICAgICAgY29uc3QgR0MzRGludCBmaWx0ZXIgPSBtX3RpbGVyLT5oYXNCb3JkZXJU
ZXhlbHMoKSA/IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIgOiBHcmFwaGljc0NvbnRleHQzRDo6
TkVBUkVTVDsKICAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJp
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9NSU5fRklMVEVSLCBmaWx0ZXIpKTsKICAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBmaWx0ZXIpKTsKIAotICAgICAgICAgICAgdXBk
YXRlci5hcHBlbmQodGlsZS0+dGV4dHVyZSgpLCB0ZXh0dXJlVXBkYXRlcigpLCBzb3VyY2VSZWN0
LCBkZXN0UmVjdCk7CisgICAgICAgICAgICB1cGRhdGVyLmFwcGVuZCh0aWxlLT50ZXh0dXJlKCks
IHNvdXJjZVJlY3QsIGRlc3RSZWN0KTsKICAgICAgICAgICAgIHRpbGUtPmNsZWFyRGlydHkoKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTI0MCwxMCArMjM4LDEwIEBAIHZvaWQgVGlsZWRMYXllckNo
cm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICAgICAgaW50
IGkgPSBpdGVyLT5maXJzdC5maXJzdDsKICAgICAgICAgaW50IGogPSBpdGVyLT5maXJzdC5zZWNv
bmQ7CiAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVU
aWxlKj4oaXRlci0+c2Vjb25kLmdldCgpKTsKLSAgICAgICAgaWYgKCF0aWxlLT50ZXh0dXJlKCkt
PmlzVmFsaWQobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkKKyAgICAgICAg
aWYgKCF0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVTaXplKCks
IG1fdGV4dHVyZUZvcm1hdCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICB0aWxl
ZExheWVyLT5zeW5jVGV4dHVyZUlkKGksIGosIHRpbGUtPnRleHR1cmUoKS0+dGV4dHVyZUlkKCkp
OworICAgICAgICB0aWxlZExheWVyLT5zeW5jVGV4dHVyZUlkKGksIGosIHRpbGUtPm1hbmFnZWRU
ZXh0dXJlKCktPnRleHR1cmVJZCgpKTsKICAgICB9CiB9CiAKQEAgLTI2MSw3ICsyNTksNyBAQCBV
cGRhdGFibGVUaWxlKiBUaWxlZExheWVyQ2hyb21pdW06OnRpbGVBdChpbnQgaSwgaW50IGopIGNv
bnN0CiAKIFVwZGF0YWJsZVRpbGUqIFRpbGVkTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGlsZShpbnQg
aSwgaW50IGopCiB7Ci0gICAgUmVmUHRyPFVwZGF0YWJsZVRpbGU+IHRpbGUgPSBhZG9wdFJlZihu
ZXcgVXBkYXRhYmxlVGlsZShNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKHRleHR1cmVNYW5hZ2VyKCkp
KSk7CisgICAgUmVmUHRyPFVwZGF0YWJsZVRpbGU+IHRpbGUgPSBhZG9wdFJlZihuZXcgVXBkYXRh
YmxlVGlsZShhZG9wdFJlZih0ZXh0dXJlVXBkYXRlcigpLT5jcmVhdGVUZXh0dXJlKHRleHR1cmVN
YW5hZ2VyKCkpKSkpOwogICAgIG1fdGlsZXItPmFkZFRpbGUodGlsZSwgaSwgaik7CiAgICAgdGls
ZS0+bV9kaXJ0eUxheWVyUmVjdCA9IG1fdGlsZXItPnRpbGVMYXllclJlY3QodGlsZS5nZXQoKSk7
CiAKQEAgLTMwOSwxMCArMzA3LDEwIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0
VGlsZVRleHR1cmVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAgIGZvciAoaW50IGog
PSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkg
PD0gcmlnaHQ7ICsraSkgewogICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVB
dChpLCBqKTsKLSAgICAgICAgICAgIGlmICghdGlsZSB8fCAhdGlsZS0+dGV4dHVyZSgpLT5pc1Zh
bGlkKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkpCisgICAgICAgICAgICBp
ZiAoIXRpbGUgfHwgIXRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPmlzVmFsaWQobV90aWxlci0+dGls
ZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5yZXNlcnZlKG1fdGlsZXItPnRpbGVTaXplKCks
IG1fdGV4dHVyZUZvcm1hdCk7CisgICAgICAgICAgICB0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5y
ZXNlcnZlKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCk7CiAgICAgICAgIH0K
ICAgICB9CiB9CkBAIC0zNDYsMTAgKzM0NCwxMCBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6
cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAgICAgICAgICAg
aWYgKCF0aWxlKQogICAgICAgICAgICAgICAgIHRpbGUgPSBjcmVhdGVUaWxlKGksIGopOwogCi0g
ICAgICAgICAgICBpZiAoIXRpbGUtPnRleHR1cmUoKS0+aXNWYWxpZChtX3RpbGVyLT50aWxlU2l6
ZSgpLCBtX3RleHR1cmVGb3JtYXQpKQorICAgICAgICAgICAgaWYgKCF0aWxlLT5tYW5hZ2VkVGV4
dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkpCiAg
ICAgICAgICAgICAgICAgdGlsZS0+bV9kaXJ0eUxheWVyUmVjdCA9IG1fdGlsZXItPnRpbGVMYXll
clJlY3QodGlsZSk7CiAKLSAgICAgICAgICAgIGlmICghdGlsZS0+dGV4dHVyZSgpLT5yZXNlcnZl
KG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkpIHsKKyAgICAgICAgICAgIGlm
ICghdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+cmVzZXJ2ZShtX3RpbGVyLT50aWxlU2l6ZSgpLCBt
X3RleHR1cmVGb3JtYXQpKSB7CiAgICAgICAgICAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIGNsZWFudXBSZXNvdXJjZXMoKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CkBAIC0zNzQsNiArMzcyLDMxIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJl
VG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgLy8gc28gd2UgZ3JhYiBh
IGxvY2FsIHJlZmVyZW5jZSBoZXJlIHRvIGhvbGQgdGhlIHVwZGF0ZXIgYWxpdmUgdW50aWwgdGhl
IHBhaW50IGNvbXBsZXRlcy4KICAgICBSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gcHJvdGVj
dG9yKHRleHR1cmVVcGRhdGVyKCkpOwogICAgIHRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVUb1Vw
ZGF0ZShtX3BhaW50UmVjdCwgbV90aWxlci0+dGlsZVNpemUoKSwgbV90aWxlci0+aGFzQm9yZGVy
VGV4ZWxzKCkpOworCisgICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKG1fcmVx
dWVzdGVkVXBkYXRlUmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBmb3IgKGlu
dCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0
OyBpIDw9IHJpZ2h0OyArK2kpIHsKKyAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0
aWxlQXQoaSwgaik7CisgICAgICAgICAgICBpZiAoIXRpbGUpCisgICAgICAgICAgICAgICAgdGls
ZSA9IGNyZWF0ZVRpbGUoaSwgaik7CisgICAgICAgICAgICBlbHNlIGlmICghdGlsZS0+ZGlydHko
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLy8gQ2FsY3VsYXRl
IHBhZ2Utc3BhY2UgcmVjdGFuZ2xlIHRvIGNvcHkgZnJvbS4KKyAgICAgICAgICAgIEludFJlY3Qg
c291cmNlUmVjdCA9IG1fdGlsZXItPnRpbGVDb250ZW50UmVjdCh0aWxlKTsKKyAgICAgICAgICAg
IGNvbnN0IEludFBvaW50IGFuY2hvciA9IHNvdXJjZVJlY3QubG9jYXRpb24oKTsKKyAgICAgICAg
ICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KG1fdGlsZXItPmxheWVyUmVjdFRvQ29udGVudFJlY3Qo
dGlsZS0+bV9kaXJ0eUxheWVyUmVjdCkpOworICAgICAgICAgICAgLy8gUGFpbnQgcmVjdCBub3Qg
Z3VhcmFudGVlZCB0byBsaW5lIHVwIG9uIHRpbGUgYm91bmRhcmllcywgc28KKyAgICAgICAgICAg
IC8vIG1ha2Ugc3VyZSB0aGF0IHNvdXJjZVJlY3QgZG9lc24ndCBleHRlbmQgb3V0c2lkZSBvZiBp
dC4KKyAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KG1fcGFpbnRSZWN0KTsKKworICAg
ICAgICAgICAgdGlsZS0+bV91cGRhdGVSZWN0ID0gc291cmNlUmVjdDsKKyAgICAgICAgICAgIGlm
IChzb3VyY2VSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5wcmVwYXJlUmVjdChzb3VyY2VSZWN0KTsKKyAgICAg
ICAgfQorICAgIH0KIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcAppbmRl
eCA5ODQzNzBlZGE5NWM1MjNmNTllZTU1Yzg3YWM4Mjg3MWUwMmE3M2JiLi44NzQ1YzRlYTBhNzEw
YmRlMThlZGUxODIwZjMxNGZkYjhjYzg3MmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRh
dGVyLmNwcApAQCAtNDgsMTQgKzQ4LDEyIEBAIENDVGV4dHVyZVVwZGF0ZXI6On5DQ1RleHR1cmVV
cGRhdGVyKCkKIHsKIH0KIAotdm9pZCBDQ1RleHR1cmVVcGRhdGVyOjphcHBlbmQoTWFuYWdlZFRl
eHR1cmUqIHRleHR1cmUsIExheWVyVGV4dHVyZVVwZGF0ZXIqIHVwZGF0ZXIsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQordm9pZCBDQ1RleHR1cmVV
cGRhdGVyOjphcHBlbmQoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSogdGV4dHVyZSwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAg
QVNTRVJUKHRleHR1cmUpOwotICAgIEFTU0VSVCh1cGRhdGVyKTsKIAogICAgIFVwZGF0ZUVudHJ5
IGVudHJ5OwogICAgIGVudHJ5Lm1fdGV4dHVyZSA9IHRleHR1cmU7Ci0gICAgZW50cnkubV91cGRh
dGVyID0gdXBkYXRlcjsKICAgICBlbnRyeS5tX3NvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OwogICAg
IGVudHJ5Lm1fZGVzdFJlY3QgPSBkZXN0UmVjdDsKICAgICBtX2VudHJpZXMuYXBwZW5kKGVudHJ5
KTsKQEAgLTcxLDcgKzY5LDcgQEAgYm9vbCBDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQsIHNpemVfdCBjb3VudCkKICAgICBzaXplX3QgbWF4SW5kZXgg
PSBtaW4obV9lbnRyeUluZGV4ICsgY291bnQsIG1fZW50cmllcy5zaXplKCkpOwogICAgIGZvciAo
OyBtX2VudHJ5SW5kZXggPCBtYXhJbmRleDsgKyttX2VudHJ5SW5kZXgpIHsKICAgICAgICAgVXBk
YXRlRW50cnkmIGVudHJ5ID0gbV9lbnRyaWVzW21fZW50cnlJbmRleF07Ci0gICAgICAgIGVudHJ5
Lm1fdXBkYXRlci0+dXBkYXRlVGV4dHVyZVJlY3QoY29udGV4dCwgbV9hbGxvY2F0b3IsIGVudHJ5
Lm1fdGV4dHVyZSwgZW50cnkubV9zb3VyY2VSZWN0LCBlbnRyeS5tX2Rlc3RSZWN0KTsKKyAgICAg
ICAgZW50cnkubV90ZXh0dXJlLT51cGRhdGVSZWN0KGNvbnRleHQsIG1fYWxsb2NhdG9yLCBlbnRy
eS5tX3NvdXJjZVJlY3QsIGVudHJ5Lm1fZGVzdFJlY3QpOwogICAgIH0KIAogICAgIGlmIChtYXhJ
bmRleCA8IG1fZW50cmllcy5zaXplKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgKaW5k
ZXggMTdiOGFhZmEwNmNlN2E2ZDIwYTBlNWZiNGM5MTRlNzJmYzkzOTRhMS4uYmY3OWFjOWMyZTIy
ZWZjNWVkYTlhNjQ4MjllMmVmY2NlYzE1YmIzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0
ZXIuaApAQCAtMjcsMTMgKzI3LDEyIEBACiAjZGVmaW5lIENDVGV4dHVyZVVwZGF0ZXJfaAogCiAj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0Q7Ci1jbGFzcyBMYXllclRleHR1cmVVcGRhdGVyOwotY2xhc3MgTWFuYWdl
ZFRleHR1cmU7CiBjbGFzcyBUZXh0dXJlQWxsb2NhdG9yOwogCiBjbGFzcyBDQ1RleHR1cmVVcGRh
dGVyIHsKQEAgLTQxLDcgKzQwLDcgQEAgcHVibGljOgogICAgIENDVGV4dHVyZVVwZGF0ZXIoVGV4
dHVyZUFsbG9jYXRvciopOwogICAgIH5DQ1RleHR1cmVVcGRhdGVyKCk7CiAKLSAgICB2b2lkIGFw
cGVuZChNYW5hZ2VkVGV4dHVyZSosIExheWVyVGV4dHVyZVVwZGF0ZXIqLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CisgICAgdm9pZCBhcHBlbmQo
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKIAogICAgIGJvb2wgaGFzTW9yZVVwZGF0ZXMoKSBj
b25zdDsKIApAQCAtNTQsOCArNTMsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgc3RydWN0
IFVwZGF0ZUVudHJ5IHsKLSAgICAgICAgTWFuYWdlZFRleHR1cmUqIG1fdGV4dHVyZTsKLSAgICAg
ICAgTGF5ZXJUZXh0dXJlVXBkYXRlciogbV91cGRhdGVyOworICAgICAgICBMYXllclRleHR1cmVV
cGRhdGVyOjpUZXh0dXJlKiBtX3RleHR1cmU7CiAgICAgICAgIEludFJlY3QgbV9zb3VyY2VSZWN0
OwogICAgICAgICBJbnRSZWN0IG1fZGVzdFJlY3Q7CiAgICAgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114120</attachid>
            <date>2011-11-08 11:05:19 -0800</date>
            <delta_ts>2011-11-09 12:12:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71388-20111108110518.patch</filename>
            <type>text/plain</type>
            <size>73559</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk1NzYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlMmZmYzIwYjIxOWIyYjU1
NDczZWYzMmVhNWQyYWUxNzk0ZTIxN2MzLi4wZDE4YmQzODRkMWEzYzVkYzNlYWUwYzc3YTEzN2E1
MmEyMDMxODMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA2IEBACisyMDExLTExLTA4ICBEYXZp
ZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBB
ZGQgc3VwcG9ydCBmb3IgcGFpbnRpbmcgaW50byBhbiBTa1BpY3R1cmUgYW5kIHRoZW4gcmFzdGVy
aXppbmcgaW50byB0aWxlLXNpemVkIGNodW5rcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMzg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIFVwZGF0YWJsZVRleHR1cmUgY2xhc3MsIHdoaWNoIGFs
bG93cyB0ZXh0dXJlIHVwZGF0ZXIgdG8KKyAgICAgICAgYWxsb2NhdGUgdGlsZSBzcGVjaWZpYyBy
ZXNvdXJjZXMgYW5kIHBhaW50IHRpbGVzIHNlcGFyYXRlbHkuCisgICAgICAgIFJlbmFtZSB0ZXh0
dXJlIHVwbG9hZGVyIGNsYXNzZXMgYW5kIG1vdmUgdGhlbSB0byBzZXBhcmF0ZSBmaWxlcy4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMuIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0
dXJlOjp1cGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZVRleHR1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
c2FtcGxlZFRleGVsRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjp1cGRhdGVUZXh0dXJlUmVjdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oLgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6cHJlcGFyZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6
dGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6b3JpZW50YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgu
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXI6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oLgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y29udGVudFJlY3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0
dXJlVXBkYXRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVC
dWZmZXJTa2lhQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJD
YW52YXMuY3BwLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVCdWZmZXI6OkZyYW1lQnVmZmVyOjpG
cmFtZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlcjo6RnJhbWVCdWZmZXI6
On5GcmFtZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlcjo6RnJhbWVCdWZm
ZXI6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVCdWZmZXJTa2lhQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUJ1ZmZlclNraWFDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjp1cGRh
dGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tpYUNhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNraWFD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpGcmFtZUJ1ZmZlclNraWFDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tpYUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXI6On5GcmFtZUJ1ZmZlclNraWFDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tpYUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXI6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVCdWZmZXJTa2lh
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6c2FtcGxlZFRleGVsRm9ybWF0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tpYUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnVwZGF0
ZVRleHR1cmVSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFt
ZUJ1ZmZlclNraWFDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIu
aC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tpYUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXI6OlRleHR1cmU6OnByZXBhcmVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVm
ZmVyU2tpYUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnRleHR1cmVVcGRhdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tpYUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXI6Om9yaWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tpYUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnByZXBh
cmVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4
dHVyZTo6dXBkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVyZVVw
ZGF0ZXI6OlRleHR1cmU6OnRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjp+VGV4dHVyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjp0ZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OlRleHR1cmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJD
YW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OlRleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6dXBkYXRl
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGVUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnNhbXBsZWRUZXhl
bEZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6dXBkYXRlVGV4dHVyZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
U2tpYUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlNraWFDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNraWFDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpw
cmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2tpYUNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OmRyYXdQaWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tp
YUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OlRleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVCdWZmZXJTa2lhQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVy
ZTo6dXBkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNraWFDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVCdWZm
ZXJTa2lhQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6RnJhbWVCdWZmZXJTa2lhQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNraWFDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyOjp+RnJhbWVCdWZmZXJTa2lhQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNraWFDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVm
ZmVyU2tpYUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnNhbXBsZWRUZXhlbEZvcm1hdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNraWFDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
Ojp1cGRhdGVUZXh0dXJlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vU2tpYUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgu
CisgICAgICAgIChXZWJDb3JlOjpTa2lhQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2tpYUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2tpYUNhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
a2lhQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6ZHJhd1BpY3R1cmUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NraWFDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGV4dHVyZVVwZGF0ZXIuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRhYmxlVGls
ZTo6VXBkYXRhYmxlVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpVcGRhdGFibGVUaWxlOjp0ZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0YWJsZVRpbGU6Om1hbmFnZWRUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJl
c291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnB1c2hQcm9w
ZXJ0aWVzVG8pOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpjcmVhdGVU
aWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJvdGVjdFRpbGVU
ZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVU
b1VwZGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0
dXJlVXBkYXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVVcGRhdGVyOjphcHBl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlVXBkYXRlcjo6dXBkYXRlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmg6CisK
IDIwMTEtMTEtMDggIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBbRXh0ZW5zaW9uIEFQSV1bQ2hyb21pdW1dIGluamVjdGVkIGV4
dGVuc2lvbiBBUEkgbmVlZHMgdG8gcmV0dXJuIGFuIG9iamVjdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4
IDU5M2VkNTlhYjIyNTkxZjg4ODBkNjcxZTFiN2FhOGJiYWE5ODcxNjIuLmZiNzhlMDdiNWQ0MjM1
OTQ1ZDIzMzdkOTMxMWU5ODZkZDJjZDEzYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM0NDksMTAg
KzM0NDksMTQgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNo
cm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
c0xheWVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9DYW52YXNMYXllckNocm9taXVtLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29u
dHJvbGxlckxpbnV4LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXguaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwJywKQEAgLTM0NzMsNiAr
MzQ3Nyw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFJl
bmRlclN0eWxlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Zv
bnRVdGlsc0Nocm9taXVtV2luLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa2lhQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
ci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVm
ZmVyU2tpYUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5kaW5nLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5kaW5nLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2RlQ2hyb21pdW1X
aW4uY3BwJywKQEAgLTM0OTYsOCArMzUwMiw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgn
LAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVw
ZGF0ZXJDYW52YXMuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NZWRpYVBsYXllclBy
aXZhdGVDaHJvbWl1bS5oJywKQEAgLTM1MTksNiArMzUyMyw4IEBACiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFDaHJvbWl1bVdpbi5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRh
TGludXguY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta2lh
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1NraWFDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYWNraW5nVGV4dHVyZUFsbG9jYXRv
ci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYWNraW5n
VGV4dHVyZUFsbG9jYXRvci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UZXh0dXJlTWFuYWdlci5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NjVjZjljMjRiZmVjNDkwYTVh
ZTQ3YzMxNzNjZGJkOTY5NjExNWE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
ci5jcHAKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiQml0bWFwQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorCisjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0u
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVyZShCaXRtYXBD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlciwgUGFzc093blB0cjxNYW5h
Z2VkVGV4dHVyZT4gdGV4dHVyZSkKKyAgICA6IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUo
dGV4dHVyZSkKKyAgICAsIG1fdGV4dHVyZVVwZGF0ZXIodGV4dHVyZVVwZGF0ZXIpCit7Cit9CisK
K3ZvaWQgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6dXBkYXRlUmVj
dChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9y
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3sK
KyAgICB0ZXh0dXJlVXBkYXRlcigpLT51cGRhdGVUZXh0dXJlUmVjdChjb250ZXh0LCBhbGxvY2F0
b3IsIHRleHR1cmUoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QpOworfQorCitQYXNzUmVmUHRyPEJp
dG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI+IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXI6OmNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyLCBi
b29sIHVzZU1hcFRleFN1YkltYWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQml0bWFw
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihwYWludGVyLCB1c2VNYXBUZXhTdWJJbWFnZSkpOwor
fQorCitCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpCaXRtYXBDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIsIGJv
b2wgdXNlTWFwVGV4U3ViSW1hZ2UpCisgICAgOiBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKHBh
aW50ZXIpCisgICAgLCBtX3RleFN1YkltYWdlKHVzZU1hcFRleFN1YkltYWdlKQoreworfQorCitM
YXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjpjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKQoreworICAgIHJldHVy
biBuZXcgVGV4dHVyZSh0aGlzLCBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKTsKK30K
KworTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IEJpdG1hcENhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXI6OnNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9y
bWF0KQoreworICAgIC8vIFRoZSBjb21wb25lbnQgb3JkZXIgbWF5IGJlIGJncmEgaWYgd2UgdXBs
b2FkZWQgYmdyYSBwaXhlbHMgdG8gcmdiYSB0ZXh0dXJlcy4KKyAgICByZXR1cm4gUGxhdGZvcm1D
b2xvcjo6c2FtZUNvbXBvbmVudE9yZGVyKHRleHR1cmVGb3JtYXQpID8KKyAgICAgICAgICAgIExh
eWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdFJHQkEgOiBMYXllclRleHR1cmVV
cGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRCR1JBOworfQorCit2b2lkIEJpdG1hcENhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50
UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpCit7CisgICAg
bV90ZXhTdWJJbWFnZS5zZXRTdWJJbWFnZVNpemUodGlsZVNpemUpOworCisgICAgbV9jYW52YXMu
cmVzaXplKGNvbnRlbnRSZWN0LnNpemUoKSk7CisgICAgLy8gQXNzdW1wdGlvbjogaWYgYSB0aWxl
ciBpcyB1c2luZyBib3JkZXIgdGV4ZWxzLCB0aGVuIGl0IGlzIGJlY2F1c2UgdGhlCisgICAgLy8g
bGF5ZXIgaXMgbGlrZWx5IHRvIGJlIGZpbHRlcmVkIG9yIHRyYW5zZm9ybWVkLiBCZWNhdXNlIG9m
IGl0IG1pZ2h0IGJlCisgICAgLy8gdHJhbnNmb3JtZWQsIGRyYXcgdGhlIHRleHQgaW4gZ3JheXNj
YWxlIGluc3RlYWQgb2Ygc3VicGl4ZWwgYW50aWFsaWFzaW5nLgorICAgIFBsYXRmb3JtQ2FudmFz
OjpQYWludGVyOjpUZXh0T3B0aW9uIHRleHRPcHRpb24gPQorICAgICAgICBib3JkZXJUZXhlbHMg
PyBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6R3JheXNjYWxlVGV4dCA6IFBsYXRmb3JtQ2FudmFz
OjpQYWludGVyOjpTdWJwaXhlbFRleHQ7CisgICAgUGxhdGZvcm1DYW52YXM6OlBhaW50ZXIgY2Fu
dmFzUGFpbnRlcigmbV9jYW52YXMsIHRleHRPcHRpb24pOworICAgIHBhaW50Q29udGVudHMoKmNh
bnZhc1BhaW50ZXIuY29udGV4dCgpLCBjb250ZW50UmVjdCk7Cit9CisKK3ZvaWQgQml0bWFwQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgTWFuYWdlZFRleHR1cmUq
IHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RS
ZWN0KQoreworICAgIFBsYXRmb3JtQ2FudmFzOjpBdXRvTG9ja2VyIGxvY2tlcigmbV9jYW52YXMp
OworCisgICAgdGV4dHVyZS0+YmluZFRleHR1cmUoY29udGV4dCwgYWxsb2NhdG9yKTsKKyAgICBt
X3RleFN1YkltYWdlLnVwbG9hZChsb2NrZXIucGl4ZWxzKCksIGNvbnRlbnRSZWN0KCksIHNvdXJj
ZVJlY3QsIGRlc3RSZWN0LCB0ZXh0dXJlLT5mb3JtYXQoKSwgY29udGV4dCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9C
aXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOGU5NWJmZDM1MTIxZmFlMDlhZWMyNmQ5MDk5MTMzZTE0N2FkMWMwYwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Jp
dG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAtMCwwICsxLDczIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
CisjaWZuZGVmIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXJfaAorI2RlZmluZSBCaXRt
YXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKworI2luY2x1ZGUgIkNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNs
dWRlICJMYXllclRleHR1cmVTdWJJbWFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ2FudmFzLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGF5ZXJQYWludGVyQ2hyb21pdW07CisK
Ky8vIEEgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciB3aXRoIGFuIGludGVybmFsIGJpdG1hcC4K
K2NsYXNzIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMgQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlciB7CitwdWJsaWM6CisgICAgY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBM
YXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRleHR1
cmUoQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciosIFBhc3NPd25QdHI8TWFuYWdlZFRl
eHR1cmU+KTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVJlY3QoY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBo
aWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKworICAgIHByaXZhdGU6CisgICAgICAgIEJp
dG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgeyByZXR1cm4g
bV90ZXh0dXJlVXBkYXRlcjsgfQorCisgICAgICAgIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIqIG1fdGV4dHVyZVVwZGF0ZXI7CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI+IGNyZWF0ZShQYXNzT3duUHRyPExheWVy
UGFpbnRlckNocm9taXVtPiwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSk7CisKKyAgICB2aXJ0dWFs
IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFn
ZXIqKTsKKyAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4gTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6Qm90dG9tVXBPcmllbnRhdGlvbjsgfQorICAgIHZpcnR1YWwgU2Ft
cGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscyk7CisgICAg
dm9pZCB1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0
b3IqLCBNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFJlY3QmIGRlc3RSZWN0KTsKKworcHJpdmF0ZToKKyAgICBCaXRtYXBDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+LCBib29sIHVzZU1hcFRl
eFN1YkltYWdlKTsKKworICAgIFBsYXRmb3JtQ2FudmFzIG1fY2FudmFzOworICAgIExheWVyVGV4
dHVyZVN1YkltYWdlIG1fdGV4U3ViSW1hZ2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2VuZGlmIC8vIEJpdG1h
cENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBMYXllclRl
eHR1cmVVcGRhdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NjVjZjljMjRiZmVjNDkwYTVhZTQ3YzMxNzNj
ZGJkOTY5NjExNWE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKQEAgLTAsMCAr
MSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlci5oIgorCisjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybUNvbG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQml0bWFwQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVyZShCaXRtYXBDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlciwgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4
dHVyZSkKKyAgICA6IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUodGV4dHVyZSkKKyAgICAs
IG1fdGV4dHVyZVVwZGF0ZXIodGV4dHVyZVVwZGF0ZXIpCit7Cit9CisKK3ZvaWQgQml0bWFwQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6dXBkYXRlUmVjdChHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3sKKyAgICB0ZXh0dXJlVXBk
YXRlcigpLT51cGRhdGVUZXh0dXJlUmVjdChjb250ZXh0LCBhbGxvY2F0b3IsIHRleHR1cmUoKSwg
c291cmNlUmVjdCwgZGVzdFJlY3QpOworfQorCitQYXNzUmVmUHRyPEJpdG1hcENhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXI+IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShQ
YXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyLCBib29sIHVzZU1hcFRleFN1
YkltYWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQml0bWFwQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlcihwYWludGVyLCB1c2VNYXBUZXhTdWJJbWFnZSkpOworfQorCitCaXRtYXBDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBh
c3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIsIGJvb2wgdXNlTWFwVGV4U3Vi
SW1hZ2UpCisgICAgOiBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKHBhaW50ZXIpCisgICAgLCBt
X3RleFN1YkltYWdlKHVzZU1hcFRleFN1YkltYWdlKQoreworfQorCitMYXllclRleHR1cmVVcGRh
dGVyOjpUZXh0dXJlKiBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGVUZXh0
dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKQoreworICAgIHJldHVybiBuZXcgVGV4dHVyZSh0
aGlzLCBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKTsKK30KKworTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXI6OnNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KQoreworICAgIC8v
IFRoZSBjb21wb25lbnQgb3JkZXIgbWF5IGJlIGJncmEgaWYgd2UgdXBsb2FkZWQgYmdyYSBwaXhl
bHMgdG8gcmdiYSB0ZXh0dXJlcy4KKyAgICByZXR1cm4gUGxhdGZvcm1Db2xvcjo6c2FtZUNvbXBv
bmVudE9yZGVyKHRleHR1cmVGb3JtYXQpID8KKyAgICAgICAgICAgIExheWVyVGV4dHVyZVVwZGF0
ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdFJHQkEgOiBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVk
VGV4ZWxGb3JtYXRCR1JBOworfQorCit2b2lkIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXI6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50
U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpCit7CisgICAgbV90ZXhTdWJJbWFnZS5z
ZXRTdWJJbWFnZVNpemUodGlsZVNpemUpOworCisgICAgbV9jYW52YXMucmVzaXplKGNvbnRlbnRS
ZWN0LnNpemUoKSk7CisgICAgLy8gQXNzdW1wdGlvbjogaWYgYSB0aWxlciBpcyB1c2luZyBib3Jk
ZXIgdGV4ZWxzLCB0aGVuIGl0IGlzIGJlY2F1c2UgdGhlCisgICAgLy8gbGF5ZXIgaXMgbGlrZWx5
IHRvIGJlIGZpbHRlcmVkIG9yIHRyYW5zZm9ybWVkLiBCZWNhdXNlIG9mIGl0IG1pZ2h0IGJlCisg
ICAgLy8gdHJhbnNmb3JtZWQsIGRyYXcgdGhlIHRleHQgaW4gZ3JheXNjYWxlIGluc3RlYWQgb2Yg
c3VicGl4ZWwgYW50aWFsaWFzaW5nLgorICAgIFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpUZXh0
T3B0aW9uIHRleHRPcHRpb24gPQorICAgICAgICBib3JkZXJUZXhlbHMgPyBQbGF0Zm9ybUNhbnZh
czo6UGFpbnRlcjo6R3JheXNjYWxlVGV4dCA6IFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpTdWJw
aXhlbFRleHQ7CisgICAgUGxhdGZvcm1DYW52YXM6OlBhaW50ZXIgY2FudmFzUGFpbnRlcigmbV9j
YW52YXMsIHRleHRPcHRpb24pOworICAgIHBhaW50Q29udGVudHMoKmNhbnZhc1BhaW50ZXIuY29u
dGV4dCgpLCBjb250ZW50UmVjdCk7Cit9CisKK3ZvaWQgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRl
eHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQoreworICAgIFBs
YXRmb3JtQ2FudmFzOjpBdXRvTG9ja2VyIGxvY2tlcigmbV9jYW52YXMpOworCisgICAgdGV4dHVy
ZS0+YmluZFRleHR1cmUoY29udGV4dCwgYWxsb2NhdG9yKTsKKyAgICBtX3RleFN1YkltYWdlLnVw
bG9hZChsb2NrZXIucGl4ZWxzKCksIGNvbnRlbnRSZWN0KCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0
LCB0ZXh0dXJlLT5mb3JtYXQoKSwgY29udGV4dCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1
cmVVcGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdjNDVlYWVlNTY1MjU0
Y2EyYzM0ZDNmYjFlNjYxNjVmMDVjNTZkZWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVy
LmNwcApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIp
CisgICAgOiBtX3BhaW50ZXIocGFpbnRlcikKK3sKK30KKwordm9pZCBDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgY29udGV4dC50cmFuc2xhdGUoLWNvbnRlbnRS
ZWN0LngoKSwgLWNvbnRlbnRSZWN0LnkoKSk7CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgi
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cGFpbnQiLCB0aGlzLCAwKTsKKyAgICAgICAgbV9w
YWludGVyLT5wYWludChjb250ZXh0LCBjb250ZW50UmVjdCk7CisgICAgfQorICAgIG1fY29udGVu
dFJlY3QgPSBjb250ZW50UmVjdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlm
IC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MGNkZDkzMzRmZDhkZTY3NTA0ZjQ0ZmEwZGMw
Yzk3NDg3MDU2YzMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBAIC0wLDAgKzEs
NTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisKKyNpZm5kZWYgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcl9oCisjZGVm
aW5lIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXJfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorCisjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgTGF5ZXJQYWlu
dGVyQ2hyb21pdW07CisKKy8vIEEgTGF5ZXJUZXh0dXJlVXBkYXRlciB3aXRoIGFuIGludGVybmFs
IGNhbnZhcy4KK2NsYXNzIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMgTGF5ZXJU
ZXh0dXJlVXBkYXRlciB7Citwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlcihQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPik7CisKKyAgICB2b2lk
IHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QpOworICAgIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9j
b250ZW50UmVjdDsgfQorCitwcml2YXRlOgorCisgICAgSW50UmVjdCBtX2NvbnRlbnRSZWN0Owor
ICAgIE93blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gbV9wYWludGVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
KyNlbmRpZiAvLyBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmNwcAppbmRleCBjYThiM2JkNzYxZjA4MTVlNDdiNmNmYjA0OTFhMWQ5NzI4
NzlmMDRjLi4yZGZhMzJmYWI5NmI0YTk0ODM4ZjcwYmYzNzFlOGQ0ZGJlZmQ1MmJmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCkBAIC0zNCw5ICszNCwxMCBAQAogCiAjaW5j
bHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkJpdG1hcENhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJGcmFtZUJ1ZmZlclNraWFDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKICNp
bmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJMYXllclRleHR1cmVV
cGRhdGVyQ2FudmFzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAi
Y2MvQ0NMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkBAIC0x
MjIsMTIgKzEyMywxMiBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJl
VXBkYXRlcihjb25zdCBDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiB7CiAjaWYgVVNFKFNLSUEpCiAg
ICAgaWYgKGhvc3QtPnNldHRpbmdzKCkuYWNjZWxlcmF0ZVBhaW50aW5nKSB7Ci0gICAgICAgIG1f
dGV4dHVyZVVwZGF0ZXIgPSBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpjcmVhdGUoQ29u
dGVudExheWVyUGFpbnRlcjo6Y3JlYXRlKG1fZGVsZWdhdGUpKTsKKyAgICAgICAgbV90ZXh0dXJl
VXBkYXRlciA9IEZyYW1lQnVmZmVyU2tpYUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0
ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUobV9kZWxlZ2F0ZSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmIC8vIFVTRShTS0lBKQogCi0gICAgbV90ZXh0dXJlVXBkYXRlciA9
IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNyZWF0ZShDb250ZW50TGF5ZXJQYWludGVyOjpj
cmVhdGUobV9kZWxlZ2F0ZSksIGhvc3QtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2lu
Z01hcFN1Yik7CisgICAgbV90ZXh0dXJlVXBkYXRlciA9IEJpdG1hcENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OmNyZWF0ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUobV9kZWxlZ2F0ZSks
IGhvc3QtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ01hcFN1Yik7CiB9CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Zy
YW1lQnVmZmVyU2tpYUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa2lhQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTRlNTRhZmJiNzNkNzIyNTBmZmM0Y2NjYmZk
N2I2MDU5NTBjNmMwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tpYUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIuY3BwCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaWYgVVNFKFNLSUEpCisKKyNpbmNs
dWRlICJGcmFtZUJ1ZmZlclNraWFDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCisKKyNpbmNs
dWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlNrQ2FudmFzLmgiCisjaW5j
bHVkZSAiU2tHcHVEZXZpY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ug
eworCitjbGFzcyBGcmFtZUJ1ZmZlciB7CitwdWJsaWM6CisgICAgRnJhbWVCdWZmZXIoKTsKKyAg
ICB+RnJhbWVCdWZmZXIoKTsKKworICAgIFNrQ2FudmFzKiBpbml0aWFsaXplKEdyYXBoaWNzQ29u
dGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIE1hbmFnZWRUZXh0dXJlKik7CisKK3ByaXZhdGU6
CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0
IG1fZmJvOworICAgIE93blB0cjxTa0NhbnZhcz4gbV9jYW52YXM7Cit9OworCitGcmFtZUJ1ZmZl
cjo6RnJhbWVCdWZmZXIoKQorICAgIDogbV9jb250ZXh0KDApCisgICAgLCBtX2ZibygwKQorewor
fQorCitGcmFtZUJ1ZmZlcjo6fkZyYW1lQnVmZmVyKCkKK3sKKyAgICBtX2NhbnZhcy5jbGVhcigp
OworCisgICAgaWYgKG1fZmJvKQorICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZUZyYW1lYnVmZmVy
KG1fZmJvKTsKK30KKworU2tDYW52YXMqIEZyYW1lQnVmZmVyOjppbml0aWFsaXplKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIE1hbmFnZWRU
ZXh0dXJlKiB0ZXh0dXJlKQoreworICAgIG1fY29udGV4dCA9IGNvbnRleHQ7CisgICAgbV9mYm8g
PSBtX2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgbV9jb250ZXh0LT5iaW5kRnJh
bWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgdGV4
dHVyZS0+ZnJhbWVidWZmZXJUZXh0dXJlMkQobV9jb250ZXh0LCBhbGxvY2F0b3IpOworCisgICAg
Ly8gQ3JlYXRlIGEgc2tpYSBncHUgY2FudmFzLgorICAgIEdyQ29udGV4dCogZ3JDb250ZXh0ID0g
bV9jb250ZXh0LT5nckNvbnRleHQoKTsKKyAgICBJbnRTaXplIGNhbnZhc1NpemUgPSB0ZXh0dXJl
LT5zaXplKCk7CisgICAgR3JQbGF0Zm9ybVN1cmZhY2VEZXNjIHRhcmdldERlc2M7CisgICAgdGFy
Z2V0RGVzYy5yZXNldCgpOworICAgIHRhcmdldERlc2MuZlN1cmZhY2VUeXBlID0ga1RleHR1cmVS
ZW5kZXJUYXJnZXRfR3JQbGF0Zm9ybVN1cmZhY2VUeXBlOworICAgIHRhcmdldERlc2MuZlJlbmRl
clRhcmdldEZsYWdzID0ga05vbmVfR3JQbGF0Zm9ybVJlbmRlclRhcmdldEZsYWdCaXQ7CisgICAg
dGFyZ2V0RGVzYy5mV2lkdGggPSBjYW52YXNTaXplLndpZHRoKCk7CisgICAgdGFyZ2V0RGVzYy5m
SGVpZ2h0ID0gY2FudmFzU2l6ZS5oZWlnaHQoKTsKKyAgICB0YXJnZXREZXNjLmZDb25maWcgPSBr
UkdCQV84ODg4X0dyUGl4ZWxDb25maWc7CisgICAgdGFyZ2V0RGVzYy5mU3RlbmNpbEJpdHMgPSA4
OworICAgIHRhcmdldERlc2MuZlBsYXRmb3JtVGV4dHVyZSA9IHRleHR1cmUtPnRleHR1cmVJZCgp
OworICAgIHRhcmdldERlc2MuZlBsYXRmb3JtUmVuZGVyVGFyZ2V0ID0gbV9mYm87CisgICAgU2tB
dXRvVFVucmVmPEdyVGV4dHVyZT4gdGFyZ2V0KHN0YXRpY19jYXN0PEdyVGV4dHVyZSo+KGdyQ29u
dGV4dC0+Y3JlYXRlUGxhdGZvcm1TdXJmYWNlKHRhcmdldERlc2MpKSk7CisgICAgU2tBdXRvVFVu
cmVmPFNrRGV2aWNlPiBkZXZpY2UobmV3IFNrR3B1RGV2aWNlKGdyQ29udGV4dCwgdGFyZ2V0Lmdl
dCgpKSk7CisgICAgbV9jYW52YXMgPSBhZG9wdFB0cihuZXcgU2tDYW52YXMoZGV2aWNlLmdldCgp
KSk7CisKKyAgICByZXR1cm4gbV9jYW52YXMuZ2V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlCisK
K0ZyYW1lQnVmZmVyU2tpYUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OlRleHR1
cmUoRnJhbWVCdWZmZXJTa2lhQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0
ZXIsIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IHRleHR1cmUpCisgICAgOiBMYXllclRleHR1
cmVVcGRhdGVyOjpUZXh0dXJlKHRleHR1cmUpCisgICAgLCBtX3RleHR1cmVVcGRhdGVyKHRleHR1
cmVVcGRhdGVyKQoreworfQorCit2b2lkIEZyYW1lQnVmZmVyU2tpYUNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmU6OnVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQs
IFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit7CisgICAgdGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRl
VGV4dHVyZVJlY3QoY29udGV4dCwgYWxsb2NhdG9yLCB0ZXh0dXJlKCksIHNvdXJjZVJlY3QsIGRl
c3RSZWN0KTsKK30KKworUGFzc1JlZlB0cjxGcmFtZUJ1ZmZlclNraWFDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyPiBGcmFtZUJ1ZmZlclNraWFDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVh
dGUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcikKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEZyYW1lQnVmZmVyU2tpYUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIo
cGFpbnRlcikpOworfQorCitGcmFtZUJ1ZmZlclNraWFDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
OjpGcmFtZUJ1ZmZlclNraWFDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5
ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIpCisgICAgOiBTa2lhQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcihwYWludGVyKQoreworfQorCitGcmFtZUJ1ZmZlclNraWFDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyOjp+RnJhbWVCdWZmZXJTa2lhQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcigpCit7
Cit9CisKK0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIEZyYW1lQnVmZmVyU2tpYUNhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFn
ZXIpCit7CisgICAgcmV0dXJuIG5ldyBUZXh0dXJlKHRoaXMsIE1hbmFnZWRUZXh0dXJlOjpjcmVh
dGUobWFuYWdlcikpOworfQorCitMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3Jt
YXQgRnJhbWVCdWZmZXJTa2lhQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6c2FtcGxlZFRleGVs
Rm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpCit7CisgICAgLy8gSGVyZSB3ZSBkaXJlY3Rs
eSByZW5kZXIgdG8gdGhlIHRleHR1cmUsIHNvIHRoZSBjb21wb25lbnQgb3JkZXIgaXMgYWx3YXlz
IGNvcnJlY3QuCisgICAgcmV0dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZv
cm1hdFJHQkE7Cit9CisKK3ZvaWQgRnJhbWVCdWZmZXJTa2lhQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1
cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQoreworICAgIC8vIE1h
a2Ugc3VyZSBTS0lBIHVzZXMgdGhlIGNvcnJlY3QgR0wgY29udGV4dC4KKyAgICBjb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAvLyBOb3RpZnkgU0tJQSB0byBzeW5jIGl0cyBpbnRl
cm5hbCBHTCBzdGF0ZS4KKyAgICBjb250ZXh0LT5nckNvbnRleHQoKS0+cmVzZXRDb250ZXh0KCk7
CisKKyAgICAvLyBDcmVhdGUgYW4gYWNjZWxlcmF0ZWQgY2FudmFzIHRvIGRyYXcgb24uCisgICAg
RnJhbWVCdWZmZXIgYnVmZmVyOworICAgIFNrQ2FudmFzKiBjYW52YXMgPSBidWZmZXIuaW5pdGlh
bGl6ZShjb250ZXh0LCBhbGxvY2F0b3IsIHRleHR1cmUpOworCisgICAgY2FudmFzLT5jbGlwUmVj
dChTa1JlY3QoZGVzdFJlY3QpKTsKKyAgICAvLyBUcmFuc2xhdGUgdGhlIG9yaWdpbiBvZiBjb250
ZW50UmVjdCB0byB0aGF0IG9mIGRlc3RSZWN0LgorICAgIC8vIE5vdGUgdGhhdCBkZXN0UmVjdCBp
cyBkZWZpbmVkIHJlbGF0aXZlIHRvIHNvdXJjZVJlY3QuCisgICAgY2FudmFzLT50cmFuc2xhdGUo
Y29udGVudFJlY3QoKS54KCkgLSBzb3VyY2VSZWN0LngoKSArIGRlc3RSZWN0LngoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICBjb250ZW50UmVjdCgpLnkoKSAtIHNvdXJjZVJlY3QueSgpICsgZGVz
dFJlY3QueSgpKTsKKyAgICBjYW52YXMtPmRyYXdQaWN0dXJlKG1fcGljdHVyZSk7CisKKyAgICAv
LyBGbHVzaCBTS0lBIGNvbnRleHQgc28gdGhhdCBhbGwgdGhlIHJlbmRlcmVkIHN0dWZmIGFwcGVh
cnMgb24gdGhlIHRleHR1cmUuCisgICAgY29udGV4dC0+Z3JDb250ZXh0KCktPmZsdXNoKCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoU0tJQSkKKyNlbmRpZiAv
LyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNraWFDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9GcmFtZUJ1ZmZlclNraWFDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YjQxMDIzMWM3NGFmNjdlMTZiODFkNDIxNWZmNWUyMDllM2UyNTRiOQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVy
U2tpYUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAtMCwwICsxLDY3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
CisjaWZuZGVmIEZyYW1lQnVmZmVyU2tpYUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXJfaAorI2Rl
ZmluZSBGcmFtZUJ1ZmZlclNraWFDYW52YXNMYXllclRleHR1cmVVcGRhdGVyX2gKKworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoU0tJQSkKKworI2luY2x1ZGUgIlNr
aWFDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRnJhbWVCdWZmZXJTa2lhQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciA6IHB1YmxpYyBT
a2lhQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciB7CitwdWJsaWM6CisgICAgY2xhc3MgVGV4dHVy
ZSA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFRleHR1cmUoRnJhbWVCdWZmZXJTa2lhQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcios
IFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+KTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgcHJl
cGFyZVJlY3QoY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkgeyB9CisgICAgICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKworICAg
IHByaXZhdGU6CisgICAgICAgIEZyYW1lQnVmZmVyU2tpYUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIqIHRleHR1cmVVcGRhdGVyKCkgeyByZXR1cm4gbV90ZXh0dXJlVXBkYXRlcjsgfQorCisgICAg
ICAgIEZyYW1lQnVmZmVyU2tpYUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIG1fdGV4dHVyZVVw
ZGF0ZXI7CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZyYW1lQnVmZmVyU2tpYUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI+IGNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNo
cm9taXVtPik7CisgICAgdmlydHVhbCB+RnJhbWVCdWZmZXJTa2lhQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcigpOworCisgICAgdmlydHVhbCBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiBj
cmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKik7CisgICAgdmlydHVhbCBPcmllbnRhdGlvbiBv
cmllbnRhdGlvbigpIHsgcmV0dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRvcERvd25PcmllbnRh
dGlvbjsgfQorICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1h
dChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBk
YXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwg
aW50IGJvcmRlclRleGVscykgeyB9CisgICAgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGlj
c0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKworcHJpdmF0ZToK
KyAgICBleHBsaWNpdCBGcmFtZUJ1ZmZlclNraWFDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBh
c3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+KTsKK307Cit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisjZW5kaWYgLy8gVVNFKFNLSUEpCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorI2VuZGlmIC8vIEZyYW1lQnVmZmVyU2tpYUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMzYzMzYyOTY3YWNjZGVi
YzI1NTllMjljMjRkNDNjMWM4ODg4MDMxNy4uYzU1YmM0MjE2NmE5ODk5MDNiNDgzMjFhNTY4YTky
YTdjMTA4NTJmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCkBAIC00Niw2ICs0
NiwyNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEltYWdlTGF5ZXJUZXh0dXJlVXBk
YXRlciA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyIHsKIHB1YmxpYzoKKyAgICBjbGFzcyBU
ZXh0dXJlIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgVGV4dHVyZShJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRh
dGVyLCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiB0ZXh0dXJlKQorICAgICAgICAgICAgOiBM
YXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKHRleHR1cmUpCisgICAgICAgICAgICAsIG1fdGV4
dHVyZVVwZGF0ZXIodGV4dHVyZVVwZGF0ZXIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlUmVjdChjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KSB7
IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRl
eHR1cmVVcGRhdGVyKCktPnVwZGF0ZVRleHR1cmVSZWN0KGNvbnRleHQsIGFsbG9jYXRvciwgdGV4
dHVyZSgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6
CisgICAgICAgIEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSB7IHJl
dHVybiBtX3RleHR1cmVVcGRhdGVyOyB9CisKKyAgICAgICAgSW1hZ2VMYXllclRleHR1cmVVcGRh
dGVyKiBtX3RleHR1cmVVcGRhdGVyOworICAgIH07CisKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
bWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI+IGNyZWF0ZShib29sIHVzZU1hcFRleFN1YkltYWdlKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUxheWVyVGV4dHVyZVVwZGF0
ZXIodXNlTWFwVGV4U3ViSW1hZ2UpKTsKQEAgLTUzLDYgKzczLDExIEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgfkltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcigpIHsgfQogCisgICAgdmlydHVhbCBM
YXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2Vy
KiBtYW5hZ2VyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBUZXh0dXJlKHRoaXMsIE1hbmFn
ZWRUZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpOworICAgIH0KKwogICAgIHZpcnR1YWwgT3JpZW50
YXRpb24gb3JpZW50YXRpb24oKSB7IHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpCb3R0b21V
cE9yaWVudGF0aW9uOyB9CiAKICAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVk
VGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwCmluZGV4IGRmMjU0MzU2YmRiZDYxZjgyZDkyMWU4ZTljMGRjZWVjOWFh
NWU4YTIuLmQ4Njg5NmU5MTE3YjMyNDBmYWUxY2IzNzlkNDkzZmQ5ZjVlMzY2ZDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtMzUsMTMgKzM1LDEzIEBACiAjaW5j
bHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAKICNpbmNsdWRlICJDYW52YXMyRExheWVy
Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCiAjaW5j
bHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNp
bmNsdWRlICJHZW9tZXRyeUJpbmRpbmcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJv
bWl1bS5oIgotI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaCIKICNpbmNsdWRl
ICJNYW5hZ2VkVGV4dHVyZS5oIgogI2luY2x1ZGUgIk5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5o
IgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVy
LmgKaW5kZXggM2Q4NTk3ZTM5ZTg1ZDRjYmYwMTU2ZDVjYzExNzk0Njc5NTM3MTI0Zi4uMWRiYjQz
NGEzNmIzMTU5OWRhNDFhZmZlZmJjYjU5MjgwNWUxYmNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVy
ZVVwZGF0ZXIuaApAQCAtMjksNiArMjksNyBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogCisjaW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKICNpbmNsdWRlICJHcmFwaGlj
c1R5cGVzM0QuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC0zNywxMSArMzgs
MjYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFz
cyBJbnRSZWN0OwogY2xhc3MgSW50U2l6ZTsKLWNsYXNzIE1hbmFnZWRUZXh0dXJlOwogY2xhc3Mg
VGV4dHVyZUFsbG9jYXRvcjsKK2NsYXNzIFRleHR1cmVNYW5hZ2VyOwogCiBjbGFzcyBMYXllclRl
eHR1cmVVcGRhdGVyIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gewog
cHVibGljOgorICAgIC8vIEFsbG93cyB0ZXh0dXJlIHVwbG9hZGVycyB0byBzdG9yZSBwZXItdGls
ZSByZXNvdXJjZXMuCisgICAgY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1
cmU+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgflRleHR1cmUoKSB7IH0KKworICAg
ICAgICBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSgpIHsgcmV0dXJuIG1fdGV4dHVyZS5nZXQoKTsg
fQorICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVJlY3QoY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVjdChHcmFwaGljc0NvbnRl
eHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRSZWN0JiBkZXN0UmVjdCkgPSAwOworICAgIHByb3RlY3RlZDoKKyAgICAgICAgZXhwbGlj
aXQgVGV4dHVyZShQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiB0ZXh0dXJlKSA6IG1fdGV4dHVy
ZSh0ZXh0dXJlKSB7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIE93blB0cjxNYW5hZ2VkVGV4
dHVyZT4gbV90ZXh0dXJlOworICAgIH07CisKICAgICB2aXJ0dWFsIH5MYXllclRleHR1cmVVcGRh
dGVyKCkgeyB9CiAKICAgICBlbnVtIE9yaWVudGF0aW9uIHsKQEAgLTU0LDYgKzcwLDcgQEAgcHVi
bGljOgogICAgICAgICBTYW1wbGVkVGV4ZWxGb3JtYXRCR1JBLAogICAgICAgICBTYW1wbGVkVGV4
ZWxGb3JtYXRJbnZhbGlkLAogICAgIH07CisgICAgdmlydHVhbCBUZXh0dXJlKiBjcmVhdGVUZXh0
dXJlKFRleHR1cmVNYW5hZ2VyKikgPSAwOwogICAgIC8vIFJldHVybnMgdGhlIG9yaWVudGF0aW9u
IG9mIHRoZSB0ZXh0dXJlIHVwbG9hZGVkIGJ5IHRoaXMgaW50ZXJmYWNlLgogICAgIHZpcnR1YWwg
T3JpZW50YXRpb24gb3JpZW50YXRpb24oKSA9IDA7CiAgICAgLy8gUmV0dXJucyB0aGUgZm9ybWF0
IG9mIHRoZSB0ZXhlbCB1cGxvYWRlZCBieSB0aGlzIGludGVyZmFjZS4KQEAgLTYyLDcgKzc5LDYg
QEAgcHVibGljOgogICAgIC8vIElmIHRoZSBmb3JtYXQgaXMgVGV4ZWxGb3JtYXRCR1JBLCB2ZWM0
LnggaXMgYmx1ZSBhbmQgdmVjNC56IGlzIHJlZC4KICAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZv
cm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qs
IGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFs
bG9jYXRvciosIE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgSW50UmVjdCYgZGVzdFJlY3QpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGFjYjJjZDNlNDZiMzAxMzRlYWY4ODA1YjQ1M2U1Y2FiOGQ1NDVj
MWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNh
bnZhcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jaW5j
bHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oIgotCi0jaW5jbHVkZSAiRXh0ZW5zaW9u
czNELmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5ZXJQYWlu
dGVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgotI2luY2x1ZGUgIlBs
YXRmb3JtQ29sb3IuaCIKLSNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCi0KLSNpZiBVU0UoU0tJQSkK
LSNpbmNsdWRlICJHckNvbnRleHQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgi
Ci0jaW5jbHVkZSAiU2tDYW52YXMuaCIKLSNpbmNsdWRlICJTa0dwdURldmljZS5oIgotI2VuZGlm
IC8vIFVTRShTS0lBKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBVU0UoU0tJQSkKLW5h
bWVzcGFjZSB7Ci0KLWNsYXNzIEZyYW1lQnVmZmVyIHsKLXB1YmxpYzoKLSAgICBGcmFtZUJ1ZmZl
cigpOwotICAgIH5GcmFtZUJ1ZmZlcigpOwotCi0gICAgU2tDYW52YXMqIGluaXRpYWxpemUoR3Jh
cGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1cmUqKTsKLQot
cHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwotICAgIFBsYXRmb3Jt
M0RPYmplY3QgbV9mYm87Ci0gICAgT3duUHRyPFNrQ2FudmFzPiBtX2NhbnZhczsKLX07Ci0KLUZy
YW1lQnVmZmVyOjpGcmFtZUJ1ZmZlcigpCi0gICAgOiBtX2NvbnRleHQoMCkKLSAgICAsIG1fZmJv
KDApCi17Ci19Ci0KLUZyYW1lQnVmZmVyOjp+RnJhbWVCdWZmZXIoKQotewotICAgIG1fY2FudmFz
LmNsZWFyKCk7Ci0KLSAgICBpZiAobV9mYm8pCi0gICAgICAgIG1fY29udGV4dC0+ZGVsZXRlRnJh
bWVidWZmZXIobV9mYm8pOwotfQotCi1Ta0NhbnZhcyogRnJhbWVCdWZmZXI6OmluaXRpYWxpemUo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwg
TWFuYWdlZFRleHR1cmUqIHRleHR1cmUpCi17Ci0gICAgbV9jb250ZXh0ID0gY29udGV4dDsKLSAg
ICBtX2ZibyA9IG1fY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKLSAgICBtX2NvbnRleHQt
PmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsK
LSAgICB0ZXh0dXJlLT5mcmFtZWJ1ZmZlclRleHR1cmUyRChtX2NvbnRleHQsIGFsbG9jYXRvcik7
Ci0KLSAgICAvLyBDcmVhdGUgYSBza2lhIGdwdSBjYW52YXMuCi0gICAgR3JDb250ZXh0KiBnckNv
bnRleHQgPSBtX2NvbnRleHQtPmdyQ29udGV4dCgpOwotICAgIEludFNpemUgY2FudmFzU2l6ZSA9
IHRleHR1cmUtPnNpemUoKTsKLSAgICBHclBsYXRmb3JtU3VyZmFjZURlc2MgdGFyZ2V0RGVzYzsK
LSAgICB0YXJnZXREZXNjLnJlc2V0KCk7Ci0gICAgdGFyZ2V0RGVzYy5mU3VyZmFjZVR5cGUgPSBr
VGV4dHVyZVJlbmRlclRhcmdldF9HclBsYXRmb3JtU3VyZmFjZVR5cGU7Ci0gICAgdGFyZ2V0RGVz
Yy5mUmVuZGVyVGFyZ2V0RmxhZ3MgPSBrTm9uZV9HclBsYXRmb3JtUmVuZGVyVGFyZ2V0RmxhZ0Jp
dDsKLSAgICB0YXJnZXREZXNjLmZXaWR0aCA9IGNhbnZhc1NpemUud2lkdGgoKTsKLSAgICB0YXJn
ZXREZXNjLmZIZWlnaHQgPSBjYW52YXNTaXplLmhlaWdodCgpOwotICAgIHRhcmdldERlc2MuZkNv
bmZpZyA9IGtSR0JBXzg4ODhfR3JQaXhlbENvbmZpZzsKLSAgICB0YXJnZXREZXNjLmZTdGVuY2ls
Qml0cyA9IDg7Ci0gICAgdGFyZ2V0RGVzYy5mUGxhdGZvcm1UZXh0dXJlID0gdGV4dHVyZS0+dGV4
dHVyZUlkKCk7Ci0gICAgdGFyZ2V0RGVzYy5mUGxhdGZvcm1SZW5kZXJUYXJnZXQgPSBtX2ZibzsK
LSAgICBTa0F1dG9UVW5yZWY8R3JUZXh0dXJlPiB0YXJnZXQoc3RhdGljX2Nhc3Q8R3JUZXh0dXJl
Kj4oZ3JDb250ZXh0LT5jcmVhdGVQbGF0Zm9ybVN1cmZhY2UodGFyZ2V0RGVzYykpKTsKLSAgICBT
a0F1dG9UVW5yZWY8U2tEZXZpY2U+IGRldmljZShuZXcgU2tHcHVEZXZpY2UoZ3JDb250ZXh0LCB0
YXJnZXQuZ2V0KCkpKTsKLSAgICBtX2NhbnZhcyA9IGFkb3B0UHRyKG5ldyBTa0NhbnZhcyhkZXZp
Y2UuZ2V0KCkpKTsKLQotICAgIHJldHVybiBtX2NhbnZhcy5nZXQoKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UKLSNlbmRpZiAvLyBVU0UoU0tJQSkKLQotTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhczo6
TGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyhQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVt
PiBwYWludGVyKQotICAgIDogbV9wYWludGVyKHBhaW50ZXIpCi17Ci19Ci0KLXZvaWQgTGF5ZXJU
ZXh0dXJlVXBkYXRlckNhbnZhczo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQotewotICAgIGNvbnRleHQudHJhbnNsYXRl
KC1jb250ZW50UmVjdC54KCksIC1jb250ZW50UmVjdC55KCkpOwotICAgIHsKLSAgICAgICAgVFJB
Q0VfRVZFTlQoIkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6OnBhaW50IiwgdGhpcywgMCk7Ci0g
ICAgICAgIG1fcGFpbnRlci0+cGFpbnQoY29udGV4dCwgY29udGVudFJlY3QpOwotICAgIH0KLSAg
ICBtX2NvbnRlbnRSZWN0ID0gY29udGVudFJlY3Q7Ci19Ci0KLVBhc3NSZWZQdHI8TGF5ZXJUZXh0
dXJlVXBkYXRlckJpdG1hcD4gTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6Y3JlYXRlKFBhc3NP
d25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIsIGJvb2wgdXNlTWFwVGV4U3ViSW1h
Z2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMYXllclRleHR1cmVVcGRhdGVyQml0bWFw
KHBhaW50ZXIsIHVzZU1hcFRleFN1YkltYWdlKSk7Ci19Ci0KLUxheWVyVGV4dHVyZVVwZGF0ZXJC
aXRtYXA6OkxheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXAoUGFzc093blB0cjxMYXllclBhaW50ZXJD
aHJvbWl1bT4gcGFpbnRlciwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSkKLSAgICA6IExheWVyVGV4
dHVyZVVwZGF0ZXJDYW52YXMocGFpbnRlcikKLSAgICAsIG1fdGV4U3ViSW1hZ2UodXNlTWFwVGV4
U3ViSW1hZ2UpCi17Ci19Ci0KLUxheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1h
dCBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0g
dGV4dHVyZUZvcm1hdCkKLXsKLSAgICAvLyBUaGUgY29tcG9uZW50IG9yZGVyIG1heSBiZSBiZ3Jh
IGlmIHdlIHVwbG9hZGVkIGJncmEgcGl4ZWxzIHRvIHJnYmEgdGV4dHVyZXMuCi0gICAgcmV0dXJu
IFBsYXRmb3JtQ29sb3I6OnNhbWVDb21wb25lbnRPcmRlcih0ZXh0dXJlRm9ybWF0KSA/Ci0gICAg
ICAgICAgICBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBIDogTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0QkdSQTsKLX0KLQotdm9pZCBMYXll
clRleHR1cmVVcGRhdGVyQml0bWFwOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKQotewot
ICAgIG1fdGV4U3ViSW1hZ2Uuc2V0U3ViSW1hZ2VTaXplKHRpbGVTaXplKTsKLQotICAgIG1fY2Fu
dmFzLnJlc2l6ZShjb250ZW50UmVjdC5zaXplKCkpOwotICAgIC8vIEFzc3VtcHRpb246IGlmIGEg
dGlsZXIgaXMgdXNpbmcgYm9yZGVyIHRleGVscywgdGhlbiBpdCBpcyBiZWNhdXNlIHRoZQotICAg
IC8vIGxheWVyIGlzIGxpa2VseSB0byBiZSBmaWx0ZXJlZCBvciB0cmFuc2Zvcm1lZC4gQmVjYXVz
ZSBvZiBpdCBtaWdodCBiZQotICAgIC8vIHRyYW5zZm9ybWVkLCBkcmF3IHRoZSB0ZXh0IGluIGdy
YXlzY2FsZSBpbnN0ZWFkIG9mIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KLSAgICBQbGF0Zm9ybUNh
bnZhczo6UGFpbnRlcjo6VGV4dE9wdGlvbiB0ZXh0T3B0aW9uID0KLSAgICAgICAgYm9yZGVyVGV4
ZWxzID8gUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OkdyYXlzY2FsZVRleHQgOiBQbGF0Zm9ybUNh
bnZhczo6UGFpbnRlcjo6U3VicGl4ZWxUZXh0OwotICAgIFBsYXRmb3JtQ2FudmFzOjpQYWludGVy
IGNhbnZhc1BhaW50ZXIoJm1fY2FudmFzLCB0ZXh0T3B0aW9uKTsKLSAgICBwYWludENvbnRlbnRz
KCpjYW52YXNQYWludGVyLmNvbnRleHQoKSwgY29udGVudFJlY3QpOwotfQotCi12b2lkIExheWVy
VGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIE1hbmFnZWRUZXh0dXJlKiB0
ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVj
dCkKLXsKLSAgICBQbGF0Zm9ybUNhbnZhczo6QXV0b0xvY2tlciBsb2NrZXIoJm1fY2FudmFzKTsK
LQotICAgIHRleHR1cmUtPmJpbmRUZXh0dXJlKGNvbnRleHQsIGFsbG9jYXRvcik7Ci0gICAgbV90
ZXhTdWJJbWFnZS51cGxvYWQobG9ja2VyLnBpeGVscygpLCBjb250ZW50UmVjdCgpLCBzb3VyY2VS
ZWN0LCBkZXN0UmVjdCwgdGV4dHVyZS0+Zm9ybWF0KCksIGNvbnRleHQpOwotfQotCi0jaWYgVVNF
KFNLSUEpCi1QYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU+IExheWVyVGV4
dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OmNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9t
aXVtPiBwYWludGVyKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJUZXh0dXJlVXBk
YXRlclNrUGljdHVyZShwYWludGVyKSk7Ci19Ci0KLUxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1
cmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUoUGFzc093blB0cjxMYXllclBhaW50ZXJD
aHJvbWl1bT4gcGFpbnRlcikKLSAgICA6IExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMocGFpbnRl
cikKLXsKLX0KLQotTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6fkxheWVyVGV4dHVyZVVw
ZGF0ZXJTa1BpY3R1cmUoKQotewotfQotCi1MYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4
ZWxGb3JtYXQgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6c2FtcGxlZFRleGVsRm9ybWF0
KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpCi17Ci0gICAgLy8gSGVyZSB3ZSBkaXJlY3RseSByZW5k
ZXIgdG8gdGhlIHRleHR1cmUsIHNvIHRoZSBjb21wb25lbnQgb3JkZXIgaXMgYWx3YXlzIGNvcnJl
Y3QuCi0gICAgcmV0dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdFJH
QkE7Ci19Ci0KLXZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6cHJlcGFyZVRvVXBk
YXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwg
aW50IGJvcmRlclRleGVscykKLXsKLSAgICBTa0NhbnZhcyogY2FudmFzID0gbV9waWN0dXJlLmJl
Z2luUmVjb3JkaW5nKGNvbnRlbnRSZWN0LndpZHRoKCksIGNvbnRlbnRSZWN0LmhlaWdodCgpKTsK
LSAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3JtQ29udGV4dChjYW52YXMpOwotICAgIEdy
YXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoJnBsYXRmb3JtQ29udGV4dCk7Ci0gICAgcGFp
bnRDb250ZW50cyhncmFwaGljc0NvbnRleHQsIGNvbnRlbnRSZWN0KTsKLSAgICBtX3BpY3R1cmUu
ZW5kUmVjb3JkaW5nKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6
dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxv
Y2F0b3IqIGFsbG9jYXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQotewotICAgIC8vIE1ha2Ugc3Vy
ZSBTS0lBIHVzZXMgdGhlIGNvcnJlY3QgR0wgY29udGV4dC4KLSAgICBjb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICAvLyBOb3RpZnkgU0tJQSB0byBzeW5jIGl0cyBpbnRlcm5hbCBH
TCBzdGF0ZS4KLSAgICBjb250ZXh0LT5nckNvbnRleHQoKS0+cmVzZXRDb250ZXh0KCk7Ci0KLSAg
ICAvLyBDcmVhdGUgYW4gYWNjZWxlcmF0ZWQgY2FudmFzIHRvIGRyYXcgb24uCi0gICAgRnJhbWVC
dWZmZXIgYnVmZmVyOwotICAgIFNrQ2FudmFzKiBjYW52YXMgPSBidWZmZXIuaW5pdGlhbGl6ZShj
b250ZXh0LCBhbGxvY2F0b3IsIHRleHR1cmUpOwotCi0gICAgY2FudmFzLT5jbGlwUmVjdChTa1Jl
Y3QoZGVzdFJlY3QpKTsKLSAgICAvLyBUcmFuc2xhdGUgdGhlIG9yaWdpbiBvZiBjb250ZW50UmVj
dCB0byB0aGF0IG9mIGRlc3RSZWN0LgotICAgIC8vIE5vdGUgdGhhdCBkZXN0UmVjdCBpcyBkZWZp
bmVkIHJlbGF0aXZlIHRvIHNvdXJjZVJlY3QuCi0gICAgY2FudmFzLT50cmFuc2xhdGUoY29udGVu
dFJlY3QoKS54KCkgLSBzb3VyY2VSZWN0LngoKSArIGRlc3RSZWN0LngoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICBjb250ZW50UmVjdCgpLnkoKSAtIHNvdXJjZVJlY3QueSgpICsgZGVzdFJlY3Qu
eSgpKTsKLSAgICBjYW52YXMtPmRyYXdQaWN0dXJlKG1fcGljdHVyZSk7Ci0KLSAgICAvLyBGbHVz
aCBTS0lBIGNvbnRleHQgc28gdGhhdCBhbGwgdGhlIHJlbmRlcmVkIHN0dWZmIGFwcGVhcnMgb24g
dGhlIHRleHR1cmUuCi0gICAgY29udGV4dC0+Z3JDb250ZXh0KCktPmZsdXNoKCk7Ci19Ci0jZW5k
aWYgLy8gVVNFKFNLSUEpCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSNlbmRpZiAvLyBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVy
Q2FudmFzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmYzcxYzY4ZmY3YzdkYzk4
MjFjZTlhYzhhMWI0MDg4YWE1ODgzODkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0KLSNpZm5kZWYgTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhc19oCi0jZGVmaW5l
IExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXNfaAotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCi0jaW5jbHVkZSAiTGF5ZXJU
ZXh0dXJlU3ViSW1hZ2UuaCIKLSNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm1DYW52YXMuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0KLSNpZiBVU0UoU0tJQSkKLSNpbmNsdWRlICJTa1Bp
Y3R1cmUuaCIKLQotY2xhc3MgR3JDb250ZXh0OwotY2xhc3MgU2tDYW52YXM7Ci1jbGFzcyBTa1Bp
Y3R1cmU7Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHcmFwaGljc0Nv
bnRleHQzRDsKLWNsYXNzIExheWVyUGFpbnRlckNocm9taXVtOwotCi0vLyBBIExheWVyVGV4dHVy
ZVVwZGF0ZXIgd2l0aCBhbiBpbnRlcm5hbCBjYW52YXMuCi1jbGFzcyBMYXllclRleHR1cmVVcGRh
dGVyQ2FudmFzIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXIgewotcHJvdGVjdGVkOgotICAg
IGV4cGxpY2l0IExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMoUGFzc093blB0cjxMYXllclBhaW50
ZXJDaHJvbWl1bT4pOwotCi0gICAgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKLSAgICBjb25zdCBJbnRSZWN0JiBjb250ZW50
UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudFJlY3Q7IH0KLQotcHJpdmF0ZToKLQotICAg
IEludFJlY3QgbV9jb250ZW50UmVjdDsKLSAgICBPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+
IG1fcGFpbnRlcjsKLX07Ci0KLS8vIEEgTGF5ZXJUZXh0dXJlVXBkYXRlciB3aXRoIGFuIGludGVy
bmFsIGJpdG1hcCBjYW52YXMuCi1jbGFzcyBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwIDogcHVi
bGljIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA+IGNyZWF0ZShQYXNzT3duUHRyPExheWVy
UGFpbnRlckNocm9taXVtPiwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSk7Ci0KLSAgICB2aXJ0dWFs
IE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
Qm90dG9tVXBPcmllbnRhdGlvbjsgfQotICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNh
bXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKLSAgICB2aXJ0dWFsIHZv
aWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRT
aXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscyk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIE1hbmFn
ZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVz
dFJlY3QpOwotCi1wcml2YXRlOgotICAgIExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXAoUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4sIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpOwotICAg
IFBsYXRmb3JtQ2FudmFzIG1fY2FudmFzOwotICAgIExheWVyVGV4dHVyZVN1YkltYWdlIG1fdGV4
U3ViSW1hZ2U7Ci19OwotCi0jaWYgVVNFKFNLSUEpCi1jbGFzcyBMYXllclRleHR1cmVVcGRhdGVy
U2tQaWN0dXJlIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMgewotcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU+IGNyZWF0
ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPik7Ci0gICAgdmlydHVhbCB+TGF5ZXJU
ZXh0dXJlVXBkYXRlclNrUGljdHVyZSgpOwotCi0gICAgdmlydHVhbCBPcmllbnRhdGlvbiBvcmll
bnRhdGlvbigpIHsgcmV0dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRvcERvd25PcmllbnRhdGlv
bjsgfQotICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChH
QzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRl
KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50
IGJvcmRlclRleGVscyk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdyYXBo
aWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIE1hbmFnZWRUZXh0dXJlKiwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOwotCi1wcml2YXRl
OgotICAgIGV4cGxpY2l0IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUoUGFzc093blB0cjxM
YXllclBhaW50ZXJDaHJvbWl1bT4pOwotICAKLSAgICBTa1BpY3R1cmUgbV9waWN0dXJlOyAvLyBS
ZWNvcmRpbmcgY2FudmFzLgotfTsKLSNlbmRpZiAvLyBVU0UoU0tJQSkKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSNlbmRp
ZiAvLyBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NraWFDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NraWFD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYTgzZWY1ZTE5YTkxMTFj
MzIzMDliNmJkZmNiZWRkMjExOTE1MzUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tpYUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIuY3BwCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoU0tJQSkKKworI2luY2x1
ZGUgIlNraWFDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCisKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNpbmNsdWRlICJTa0NhbnZhcy5oIgorI2luY2x1ZGUg
IlRyYWNlRXZlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTa2lhQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6U2tpYUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoUGFzc093blB0cjxM
YXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcikKKyAgICA6IENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIocGFpbnRlcikKK3sKK30KKwordm9pZCBTa2lhQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRT
aXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscykKK3sKKyAgICBTa0NhbnZhcyogY2FudmFz
ID0gbV9waWN0dXJlLmJlZ2luUmVjb3JkaW5nKGNvbnRlbnRSZWN0LndpZHRoKCksIGNvbnRlbnRS
ZWN0LmhlaWdodCgpKTsKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3JtQ29udGV4dChj
YW52YXMpOworICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoJnBsYXRmb3JtQ29u
dGV4dCk7CisgICAgcGFpbnRDb250ZW50cyhncmFwaGljc0NvbnRleHQsIGNvbnRlbnRSZWN0KTsK
KyAgICBtX3BpY3R1cmUuZW5kUmVjb3JkaW5nKCk7Cit9CisKK3ZvaWQgU2tpYUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXI6OmRyYXdQaWN0dXJlKFNrQ2FudmFzKiBjYW52YXMpCit7CisgICAgVFJB
Q0VfRVZFTlQoIlNraWFDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpkcmF3UGljdHVyZSIsIHRo
aXMsIDApOworICAgIGNhbnZhcy0+ZHJhd1BpY3R1cmUobV9waWN0dXJlKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShTS0lBKQorI2VuZGlmIC8vIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1NraWFDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta2lhQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5OGNkMTk5ZjVkMWQ1NTA0OWRkYzc2YjA0N2NhMGJl
N2I1NjhiMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Ta2lhQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBAIC0wLDAgKzEs
NTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisKKyNpZm5kZWYgU2tpYUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXJfaAor
I2RlZmluZSBTa2lhQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcl9oCisKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisjaWYgVVNFKFNLSUEpCisKKyNpbmNsdWRlICJDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyLmgiCisjaW5jbHVkZSAiU2tQaWN0dXJlLmgiCisKK2NsYXNzIFNrQ2Fu
dmFzOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExheWVyUGFpbnRlckNocm9taXVt
OworCitjbGFzcyBTa2lhQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciA6IHB1YmxpYyBDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBTa2lhQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPik7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscyk7CisgICAgdm9pZCBk
cmF3UGljdHVyZShTa0NhbnZhcyopOworCitwcm90ZWN0ZWQ6CisgICAgU2tQaWN0dXJlIG1fcGlj
dHVyZTsgLy8gUmVjb3JkaW5nIGNhbnZhcy4KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KyNlbmRpZiAvLyBVU0UoU0tJQSkKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisjZW5kaWYgLy8gU2tpYUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXJfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rp
bGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZmNjNDZkOTkzZDU0MGE0MjE5ZDdmMjcwMTAwMTg3
MzhlZjdiOGZmZS4uNjFhMWU0YTA4NDQ4MzE5MzY1Yjc4NjQ2ZmFkYTk0ZDgxM2M2NTQ2ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRM
YXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC01MSwxNyArNTEsMjAgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgVXBkYXRhYmxlVGlsZSA6IHB1YmxpYyBDQ0xheWVyVGlsaW5n
RGF0YTo6VGlsZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVXBkYXRhYmxlVGlsZSk7CiBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgVXBkYXRhYmxlVGlsZShQYXNzT3duUHRyPE1hbmFnZWRUZXh0
dXJlPiB0ZXgpIDogbV90ZXgodGV4KSB7IH0KKyAgICBleHBsaWNpdCBVcGRhdGFibGVUaWxlKFBh
c3NSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gdGV4KSA6IG1fdGV4KHRleCkg
eyB9CiAKLSAgICBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSgpIHsgcmV0dXJuIG1fdGV4LmdldCgp
OyB9CisgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSogdGV4dHVyZSgpIHsgcmV0dXJu
IG1fdGV4LmdldCgpOyB9CisgICAgTWFuYWdlZFRleHR1cmUqIG1hbmFnZWRUZXh0dXJlKCkgeyBy
ZXR1cm4gbV90ZXgtPnRleHR1cmUoKTsgfQogCiAgICAgYm9vbCBkaXJ0eSgpIGNvbnN0IHsgcmV0
dXJuICFtX2RpcnR5TGF5ZXJSZWN0LmlzRW1wdHkoKTsgfQogICAgIHZvaWQgY2xlYXJEaXJ0eSgp
IHsgbV9kaXJ0eUxheWVyUmVjdCA9IEludFJlY3QoKTsgfQogCiAgICAgLy8gTGF5ZXItc3BhY2Ug
ZGlydHkgcmVjdGFuZ2xlIHRoYXQgbmVlZHMgdG8gYmUgcmVwYWludGVkLgogICAgIEludFJlY3Qg
bV9kaXJ0eUxheWVyUmVjdDsKKyAgICAvLyBQYWdlLXNwYWNlIHJlY3RhbmdsZSB0aGF0IG5lZWRz
IHRvIGJlIHVwZGF0ZWQuCisgICAgSW50UmVjdCBtX3VwZGF0ZVJlY3Q7CiBwcml2YXRlOgotICAg
IE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV90ZXg7CisgICAgUmVmUHRyPExheWVyVGV4dHVyZVVw
ZGF0ZXI6OlRleHR1cmU+IG1fdGV4OwogfTsKIAogVGlsZWRMYXllckNocm9taXVtOjpUaWxlZExh
eWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkKQEAgLTE2NywxNyArMTcwLDEy
IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBDCiAgICAgICAgICAgICBlbHNlIGlmICghdGlsZS0+
ZGlydHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgLy8gQ2Fs
Y3VsYXRlIHBhZ2Utc3BhY2UgcmVjdGFuZ2xlIHRvIGNvcHkgZnJvbS4KLSAgICAgICAgICAgIElu
dFJlY3Qgc291cmNlUmVjdCA9IG1fdGlsZXItPnRpbGVDb250ZW50UmVjdCh0aWxlKTsKLSAgICAg
ICAgICAgIGNvbnN0IEludFBvaW50IGFuY2hvciA9IHNvdXJjZVJlY3QubG9jYXRpb24oKTsKLSAg
ICAgICAgICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KG1fdGlsZXItPmxheWVyUmVjdFRvQ29udGVu
dFJlY3QodGlsZS0+bV9kaXJ0eUxheWVyUmVjdCkpOwotICAgICAgICAgICAgLy8gUGFpbnQgcmVj
dCBub3QgZ3VhcmFudGVlZCB0byBsaW5lIHVwIG9uIHRpbGUgYm91bmRhcmllcywgc28KLSAgICAg
ICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHNvdXJjZVJlY3QgZG9lc24ndCBleHRlbmQgb3V0c2lk
ZSBvZiBpdC4KLSAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KG1fcGFpbnRSZWN0KTsK
LSAgICAgICAgICAgIGlmIChzb3VyY2VSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIEludFJl
Y3Qgc291cmNlUmVjdCA9IHRpbGUtPm1fdXBkYXRlUmVjdDsKKyAgICAgICAgICAgIGlmICh0aWxl
LT5tX3VwZGF0ZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgICAgICBBU1NFUlQodGlsZS0+dGV4dHVyZSgpLT5pc1Jlc2VydmVkKCkpOworICAgICAg
ICAgICAgQVNTRVJUKHRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPmlzUmVzZXJ2ZWQoKSk7CisgICAg
ICAgICAgICBjb25zdCBJbnRQb2ludCBhbmNob3IgPSBtX3RpbGVyLT50aWxlQ29udGVudFJlY3Qo
dGlsZSkubG9jYXRpb24oKTsKIAogICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRpbGUtc3BhY2Ug
cmVjdGFuZ2xlIHRvIHVwbG9hZCBpbnRvLgogICAgICAgICAgICAgSW50UmVjdCBkZXN0UmVjdChJ
bnRQb2ludChzb3VyY2VSZWN0LngoKSAtIGFuY2hvci54KCksIHNvdXJjZVJlY3QueSgpIC0gYW5j
aG9yLnkoKSksIHNvdXJjZVJlY3Quc2l6ZSgpKTsKQEAgLTE5NywxMiArMTk1LDEyIEBAIHZvaWQg
VGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0LCBDCiAgICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueSgpICsgZGVz
dFJlY3QuaGVpZ2h0KCkgPiBtX3BhaW50UmVjdC5oZWlnaHQoKSkKICAgICAgICAgICAgICAgICBD
UkFTSCgpOwogCi0gICAgICAgICAgICB0aWxlLT50ZXh0dXJlKCktPmJpbmRUZXh0dXJlKGNvbnRl
eHQsIHVwZGF0ZXIuYWxsb2NhdG9yKCkpOworICAgICAgICAgICAgdGlsZS0+bWFuYWdlZFRleHR1
cmUoKS0+YmluZFRleHR1cmUoY29udGV4dCwgdXBkYXRlci5hbGxvY2F0b3IoKSk7CiAgICAgICAg
ICAgICBjb25zdCBHQzNEaW50IGZpbHRlciA9IG1fdGlsZXItPmhhc0JvcmRlclRleGVscygpID8g
R3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUiA6IEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUOwog
ICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxU
RVIsIGZpbHRlcikpOwogICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFt
ZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX01BR19GSUxURVIsIGZpbHRlcikpOwogCi0gICAgICAgICAgICB1cGRhdGVyLmFwcGVu
ZCh0aWxlLT50ZXh0dXJlKCksIHRleHR1cmVVcGRhdGVyKCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0
KTsKKyAgICAgICAgICAgIHVwZGF0ZXIuYXBwZW5kKHRpbGUtPnRleHR1cmUoKSwgc291cmNlUmVj
dCwgZGVzdFJlY3QpOwogICAgICAgICAgICAgdGlsZS0+Y2xlYXJEaXJ0eSgpOwogICAgICAgICB9
CiAgICAgfQpAQCAtMjQwLDEwICsyMzgsMTAgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnB1
c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogICAgICAgICBpbnQgaSA9IGl0ZXIt
PmZpcnN0LmZpcnN0OwogICAgICAgICBpbnQgaiA9IGl0ZXItPmZpcnN0LnNlY29uZDsKICAgICAg
ICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVy
LT5zZWNvbmQuZ2V0KCkpOwotICAgICAgICBpZiAoIXRpbGUtPnRleHR1cmUoKS0+aXNWYWxpZCht
X3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKQorICAgICAgICBpZiAoIXRpbGUt
Pm1hbmFnZWRUZXh0dXJlKCktPmlzVmFsaWQobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJl
Rm9ybWF0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHRpbGVkTGF5ZXItPnN5
bmNUZXh0dXJlSWQoaSwgaiwgdGlsZS0+dGV4dHVyZSgpLT50ZXh0dXJlSWQoKSk7CisgICAgICAg
IHRpbGVkTGF5ZXItPnN5bmNUZXh0dXJlSWQoaSwgaiwgdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+
dGV4dHVyZUlkKCkpOwogICAgIH0KIH0KIApAQCAtMjYxLDcgKzI1OSw3IEBAIFVwZGF0YWJsZVRp
bGUqIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dGlsZUF0KGludCBpLCBpbnQgaikgY29uc3QKIAogVXBk
YXRhYmxlVGlsZSogVGlsZWRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlKGludCBpLCBpbnQgaikK
IHsKLSAgICBSZWZQdHI8VXBkYXRhYmxlVGlsZT4gdGlsZSA9IGFkb3B0UmVmKG5ldyBVcGRhdGFi
bGVUaWxlKE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUodGV4dHVyZU1hbmFnZXIoKSkpKTsKKyAgICBS
ZWZQdHI8VXBkYXRhYmxlVGlsZT4gdGlsZSA9IGFkb3B0UmVmKG5ldyBVcGRhdGFibGVUaWxlKGFk
b3B0UmVmKHRleHR1cmVVcGRhdGVyKCktPmNyZWF0ZVRleHR1cmUodGV4dHVyZU1hbmFnZXIoKSkp
KSk7CiAgICAgbV90aWxlci0+YWRkVGlsZSh0aWxlLCBpLCBqKTsKICAgICB0aWxlLT5tX2RpcnR5
TGF5ZXJSZWN0ID0gbV90aWxlci0+dGlsZUxheWVyUmVjdCh0aWxlLmdldCgpKTsKIApAQCAtMzA5
LDEwICszMDcsMTAgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByb3RlY3RUaWxlVGV4dHVy
ZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8
PSBib3R0b207ICsraikgewogICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsg
KytpKSB7CiAgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOwot
ICAgICAgICAgICAgaWYgKCF0aWxlIHx8ICF0aWxlLT50ZXh0dXJlKCktPmlzVmFsaWQobV90aWxl
ci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkKKyAgICAgICAgICAgIGlmICghdGlsZSB8
fCAhdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+aXNWYWxpZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBt
X3RleHR1cmVGb3JtYXQpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAg
ICB0aWxlLT50ZXh0dXJlKCktPnJlc2VydmUobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJl
Rm9ybWF0KTsKKyAgICAgICAgICAgIHRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPnJlc2VydmUobV90
aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KTsKICAgICAgICAgfQogICAgIH0KIH0K
QEAgLTM0NiwxMCArMzQ0LDEwIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9V
cGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgICAgICAgICBpZiAoIXRpbGUp
CiAgICAgICAgICAgICAgICAgdGlsZSA9IGNyZWF0ZVRpbGUoaSwgaik7CiAKLSAgICAgICAgICAg
IGlmICghdGlsZS0+dGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4
dHVyZUZvcm1hdCkpCisgICAgICAgICAgICBpZiAoIXRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPmlz
VmFsaWQobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkKICAgICAgICAgICAg
ICAgICB0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0ID0gbV90aWxlci0+dGlsZUxheWVyUmVjdCh0aWxl
KTsKIAotICAgICAgICAgICAgaWYgKCF0aWxlLT50ZXh0dXJlKCktPnJlc2VydmUobV90aWxlci0+
dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkgeworICAgICAgICAgICAgaWYgKCF0aWxlLT5t
YW5hZ2VkVGV4dHVyZSgpLT5yZXNlcnZlKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZv
cm1hdCkpIHsKICAgICAgICAgICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgY2xlYW51cFJlc291cmNlcygpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTM3
NCw2ICszNzIsMzEgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICAvLyBzbyB3ZSBncmFiIGEgbG9jYWwgcmVm
ZXJlbmNlIGhlcmUgdG8gaG9sZCB0aGUgdXBkYXRlciBhbGl2ZSB1bnRpbCB0aGUgcGFpbnQgY29t
cGxldGVzLgogICAgIFJlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBwcm90ZWN0b3IodGV4dHVy
ZVVwZGF0ZXIoKSk7CiAgICAgdGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVRvVXBkYXRlKG1fcGFp
bnRSZWN0LCBtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RpbGVyLT5oYXNCb3JkZXJUZXhlbHMoKSk7
CisKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMobV9yZXF1ZXN0ZWRVcGRh
dGVSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGZvciAoaW50IGogPSB0b3A7
IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmln
aHQ7ICsraSkgeworICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBq
KTsKKyAgICAgICAgICAgIGlmICghdGlsZSkKKyAgICAgICAgICAgICAgICB0aWxlID0gY3JlYXRl
VGlsZShpLCBqKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCF0aWxlLT5kaXJ0eSgpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgcGFnZS1zcGFj
ZSByZWN0YW5nbGUgdG8gY29weSBmcm9tLgorICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0
ID0gbV90aWxlci0+dGlsZUNvbnRlbnRSZWN0KHRpbGUpOworICAgICAgICAgICAgY29uc3QgSW50
UG9pbnQgYW5jaG9yID0gc291cmNlUmVjdC5sb2NhdGlvbigpOworICAgICAgICAgICAgc291cmNl
UmVjdC5pbnRlcnNlY3QobV90aWxlci0+bGF5ZXJSZWN0VG9Db250ZW50UmVjdCh0aWxlLT5tX2Rp
cnR5TGF5ZXJSZWN0KSk7CisgICAgICAgICAgICAvLyBQYWludCByZWN0IG5vdCBndWFyYW50ZWVk
IHRvIGxpbmUgdXAgb24gdGlsZSBib3VuZGFyaWVzLCBzbworICAgICAgICAgICAgLy8gbWFrZSBz
dXJlIHRoYXQgc291cmNlUmVjdCBkb2Vzbid0IGV4dGVuZCBvdXRzaWRlIG9mIGl0LgorICAgICAg
ICAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QobV9wYWludFJlY3QpOworCisgICAgICAgICAgICB0
aWxlLT5tX3VwZGF0ZVJlY3QgPSBzb3VyY2VSZWN0OworICAgICAgICAgICAgaWYgKHNvdXJjZVJl
Y3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICB0
aWxlLT50ZXh0dXJlKCktPnByZXBhcmVSZWN0KHNvdXJjZVJlY3QpOworICAgICAgICB9CisgICAg
fQogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwCmluZGV4IDk4NDM3MGVk
YTk1YzUyM2Y1OWVlNTVjODdhYzgyODcxZTAyYTczYmIuLjg3NDVjNGVhMGE3MTBiZGUxOGVkZTE4
MjBmMzE0ZmRiOGNjODcyYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwCkBA
IC00OCwxNCArNDgsMTIgQEAgQ0NUZXh0dXJlVXBkYXRlcjo6fkNDVGV4dHVyZVVwZGF0ZXIoKQog
ewogfQogCi12b2lkIENDVGV4dHVyZVVwZGF0ZXI6OmFwcGVuZChNYW5hZ2VkVGV4dHVyZSogdGV4
dHVyZSwgTGF5ZXJUZXh0dXJlVXBkYXRlciogdXBkYXRlciwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit2b2lkIENDVGV4dHVyZVVwZGF0ZXI6OmFw
cGVuZChMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKIHsKICAgICBBU1NFUlQodGV4
dHVyZSk7Ci0gICAgQVNTRVJUKHVwZGF0ZXIpOwogCiAgICAgVXBkYXRlRW50cnkgZW50cnk7CiAg
ICAgZW50cnkubV90ZXh0dXJlID0gdGV4dHVyZTsKLSAgICBlbnRyeS5tX3VwZGF0ZXIgPSB1cGRh
dGVyOwogICAgIGVudHJ5Lm1fc291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7CiAgICAgZW50cnkubV9k
ZXN0UmVjdCA9IGRlc3RSZWN0OwogICAgIG1fZW50cmllcy5hcHBlbmQoZW50cnkpOwpAQCAtNzEs
NyArNjksNyBAQCBib29sIENDVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZShHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgc2l6ZV90IGNvdW50KQogICAgIHNpemVfdCBtYXhJbmRleCA9IG1pbihtX2Vu
dHJ5SW5kZXggKyBjb3VudCwgbV9lbnRyaWVzLnNpemUoKSk7CiAgICAgZm9yICg7IG1fZW50cnlJ
bmRleCA8IG1heEluZGV4OyArK21fZW50cnlJbmRleCkgewogICAgICAgICBVcGRhdGVFbnRyeSYg
ZW50cnkgPSBtX2VudHJpZXNbbV9lbnRyeUluZGV4XTsKLSAgICAgICAgZW50cnkubV91cGRhdGVy
LT51cGRhdGVUZXh0dXJlUmVjdChjb250ZXh0LCBtX2FsbG9jYXRvciwgZW50cnkubV90ZXh0dXJl
LCBlbnRyeS5tX3NvdXJjZVJlY3QsIGVudHJ5Lm1fZGVzdFJlY3QpOworICAgICAgICBlbnRyeS5t
X3RleHR1cmUtPnVwZGF0ZVJlY3QoY29udGV4dCwgbV9hbGxvY2F0b3IsIGVudHJ5Lm1fc291cmNl
UmVjdCwgZW50cnkubV9kZXN0UmVjdCk7CiAgICAgfQogCiAgICAgaWYgKG1heEluZGV4IDwgbV9l
bnRyaWVzLnNpemUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaAppbmRleCAxN2I4YWFm
YTA2Y2U3YTZkMjBhMGU1ZmI0YzkxNGU3MmZjOTM5NGExLi5iZjc5YWM5YzJlMjJlZmM1ZWRhOWE2
NDgyOWUyZWZjY2VjMTViYjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oCkBAIC0y
NywxMyArMjcsMTIgQEAKICNkZWZpbmUgQ0NUZXh0dXJlVXBkYXRlcl9oCiAKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCisjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHcmFwaGljc0NvbnRl
eHQzRDsKLWNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXI7Ci1jbGFzcyBNYW5hZ2VkVGV4dHVyZTsK
IGNsYXNzIFRleHR1cmVBbGxvY2F0b3I7CiAKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXIgewpAQCAt
NDEsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgQ0NUZXh0dXJlVXBkYXRlcihUZXh0dXJlQWxsb2Nh
dG9yKik7CiAgICAgfkNDVGV4dHVyZVVwZGF0ZXIoKTsKIAotICAgIHZvaWQgYXBwZW5kKE1hbmFn
ZWRUZXh0dXJlKiwgTGF5ZXJUZXh0dXJlVXBkYXRlciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICB2b2lkIGFwcGVuZChMYXllclRleHR1
cmVVcGRhdGVyOjpUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UmVjdCYgZGVzdFJlY3QpOwogCiAgICAgYm9vbCBoYXNNb3JlVXBkYXRlcygpIGNvbnN0OwogCkBA
IC01NCw4ICs1Myw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgVXBkYXRlRW50
cnkgewotICAgICAgICBNYW5hZ2VkVGV4dHVyZSogbV90ZXh0dXJlOwotICAgICAgICBMYXllclRl
eHR1cmVVcGRhdGVyKiBtX3VwZGF0ZXI7CisgICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmUqIG1fdGV4dHVyZTsKICAgICAgICAgSW50UmVjdCBtX3NvdXJjZVJlY3Q7CiAgICAgICAg
IEludFJlY3QgbV9kZXN0UmVjdDsKICAgICB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114338</attachid>
            <date>2011-11-09 12:12:12 -0800</date>
            <delta_ts>2011-11-09 14:08:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71388-20111109121206.patch</filename>
            <type>text/plain</type>
            <size>73040</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk3NDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxZjY5NmMwZjliMTk3MjQ5
NzU3ZmRjYmQ4NjA0NGFmOGQ2ZjBhMjA1Li41MDRmNzNkMzJiM2RmODk0OTE4M2Y2ZDk5ZjE3NTIw
YjM3NzJlNzZjIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAKKzIwMTEtMTEtMDkgIERhdmlk
IFJldmVtYW4gIDxyZXZlbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEFk
ZCBzdXBwb3J0IGZvciBwYWludGluZyBpbnRvIGFuIFNrUGljdHVyZSBhbmQgdGhlbiByYXN0ZXJp
emluZyBpbnRvIHRpbGUtc2l6ZWQgY2h1bmtzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEzODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgVXBkYXRhYmxlVGV4dHVyZSBjbGFzcywgd2hpY2ggYWxs
b3dzIHRleHR1cmUgdXBkYXRlciB0bworICAgICAgICBhbGxvY2F0ZSB0aWxlIHNwZWNpZmljIHJl
c291cmNlcyBhbmQgcGFpbnQgdGlsZXMgc2VwYXJhdGVseS4KKyAgICAgICAgUmVuYW1lIHRleHR1
cmUgdXBsb2FkZXIgY2xhc3NlcyBhbmQgbW92ZSB0aGVtIHRvIHNlcGFyYXRlIGZpbGVzLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cy4gQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAg
ICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9C
aXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmU6On5UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmU6OnVwZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6fkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpzYW1wbGVkVGV4ZWxG
b3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZVRleHR1cmVSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4
dHVyZVVwZGF0ZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmU6OnRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6Om9yaWVudGF0aW9uKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFz
LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyOjpGcmFtZUJ1ZmZlcjo6RnJhbWVC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVCdWZmZXI6OkZyYW1lQnVmZmVyOjp+RnJh
bWVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVCdWZmZXI6OkZyYW1lQnVmZmVyOjpp
bml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6
On5UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6dXBkYXRlUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI6OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI6On5GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVm
ZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6c2FtcGxlZFRleGVsRm9ybWF0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6dXBkYXRlVGV4dHVyZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclRleHR1cmVVcGRhdGVyLmguCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnRleHR1cmVVcGRhdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6b3JpZW50YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxh
eWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OlRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjp1cGRhdGVSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6dGV4dHVyZVVwZGF0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGVU
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJl
cGFyZVRvVXBkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmU6On5UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4
dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6cHJlcGFyZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oLgorICAgICAgICAoV2Vi
Q29yZTo6U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpTa1BpY3R1cmVDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyOjp+U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcik6
CisgICAgICAgIChXZWJDb3JlOjpTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpw
cmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2tQaWN0dXJlQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6ZHJhd1BpY3R1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJl
VXBkYXRlci5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVcGRhdGFibGVUaWxlOjpVcGRhdGFi
bGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0YWJsZVRpbGU6OnRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6VXBkYXRhYmxlVGlsZTo6bWFuYWdlZFRleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToK
KyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6
CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZVRpbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VGlsZVRleHR1cmVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXI6OmFwcGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaDoKKwogMjAxMS0xMS0w
OSAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBj
cmFzaCB3aGVuIGFjY2Vzc2luZyBzZWxlY3RlZFRhYiBpbiBhIHRhYiBsaXN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggNDgyNmM1YTU4ODRkZGQ5MWE5ZDZiZDQ5YWRjMTEyZTg0NThhNTE1Mi4uYWZmN2Ji
NjhkMTYzNDI0YzE5OThlN2RlZDBlY2ZjYzgyMGQ1NDdkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAt
MzQ1MiwxMCArMzQ1MiwxNCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL1Bh
dGhDRy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL1RyYW5zZm9ybWF0aW9uTWF0
cml4Q0cuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRt
YXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21p
dW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMy
RExheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcGxl
eFRleHRDb250cm9sbGVyTGludXguY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAnLApAQCAt
MzQ3Niw2ICszNDgwLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250UmVuZGVyU3R5bGUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5oJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5kaW5nLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5k
aW5nLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFn
ZVRyZWVOb2RlQ2hyb21pdW1XaW4uY3BwJywKQEAgLTM0OTksOCArMzUwNSw2IEBACiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVT
dWJJbWFnZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVVcGRhdGVyLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL05vbkNvbXBvc2l0ZWRDb250ZW50SG9z
dC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL05vbkNvbXBv
c2l0ZWRDb250ZW50SG9zdC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9NZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oJywKQEAgLTM1MjIsNiArMzUyNiw4IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0u
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERh
dGFDaHJvbWl1bVdpbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1NpbXBsZUZvbnREYXRhTGludXguY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1h
cENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMDcxZGU2NDg0MzhhZDMyYzBjNGU2ZWM4OWMzOGY2NWFhODEzNTQ5NQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Jp
dG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisKKyNpbmNsdWRlICJCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCisKKyNp
bmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29sb3Iu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjpUZXh0dXJlOjpUZXh0dXJlKEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIHRl
eHR1cmVVcGRhdGVyLCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiB0ZXh0dXJlKQorICAgIDog
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSh0ZXh0dXJlKQorICAgICwgbV90ZXh0dXJlVXBk
YXRlcih0ZXh0dXJlVXBkYXRlcikKK3sKK30KKworQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZTo6flRleHR1cmUoKQoreworfQorCit2b2lkIEJpdG1hcENhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit7CisgICAgdGV4dHVyZVVwZGF0ZXIoKS0+
dXBkYXRlVGV4dHVyZVJlY3QoY29udGV4dCwgYWxsb2NhdG9yLCB0ZXh0dXJlKCksIHNvdXJjZVJl
Y3QsIGRlc3RSZWN0KTsKK30KKworUGFzc1JlZlB0cjxCaXRtYXBDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyPiBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUoUGFzc093blB0
cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlciwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIocGFpbnRlciwgdXNlTWFwVGV4U3ViSW1hZ2UpKTsKK30KKworQml0bWFwQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3duUHRy
PExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyLCBib29sIHVzZU1hcFRleFN1YkltYWdlKQor
ICAgIDogQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihwYWludGVyKQorICAgICwgbV90ZXhTdWJJ
bWFnZSh1c2VNYXBUZXhTdWJJbWFnZSkKK3sKK30KKworQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6fkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoKQoreworfQorCitQYXNz
UmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IEJpdG1hcENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI6OmNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlKHRoaXMsIE1hbmFnZWRUZXh0dXJlOjpjcmVh
dGUobWFuYWdlcikpKTsKK30KKworTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9y
bWF0IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnNhbXBsZWRUZXhlbEZvcm1hdChH
QzNEZW51bSB0ZXh0dXJlRm9ybWF0KQoreworICAgIC8vIFRoZSBjb21wb25lbnQgb3JkZXIgbWF5
IGJlIGJncmEgaWYgd2UgdXBsb2FkZWQgYmdyYSBwaXhlbHMgdG8gcmdiYSB0ZXh0dXJlcy4KKyAg
ICByZXR1cm4gUGxhdGZvcm1Db2xvcjo6c2FtZUNvbXBvbmVudE9yZGVyKHRleHR1cmVGb3JtYXQp
ID8KKyAgICAgICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdFJH
QkEgOiBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRCR1JBOworfQorCit2
b2lkIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZShjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3Jk
ZXJUZXhlbHMpCit7CisgICAgbV90ZXhTdWJJbWFnZS5zZXRTdWJJbWFnZVNpemUodGlsZVNpemUp
OworCisgICAgbV9jYW52YXMucmVzaXplKGNvbnRlbnRSZWN0LnNpemUoKSk7CisgICAgLy8gQXNz
dW1wdGlvbjogaWYgYSB0aWxlciBpcyB1c2luZyBib3JkZXIgdGV4ZWxzLCB0aGVuIGl0IGlzIGJl
Y2F1c2UgdGhlCisgICAgLy8gbGF5ZXIgaXMgbGlrZWx5IHRvIGJlIGZpbHRlcmVkIG9yIHRyYW5z
Zm9ybWVkLiBCZWNhdXNlIG9mIGl0IG1pZ2h0IGJlCisgICAgLy8gdHJhbnNmb3JtZWQsIGRyYXcg
dGhlIHRleHQgaW4gZ3JheXNjYWxlIGluc3RlYWQgb2Ygc3VicGl4ZWwgYW50aWFsaWFzaW5nLgor
ICAgIFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpUZXh0T3B0aW9uIHRleHRPcHRpb24gPQorICAg
ICAgICBib3JkZXJUZXhlbHMgPyBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6R3JheXNjYWxlVGV4
dCA6IFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpTdWJwaXhlbFRleHQ7CisgICAgUGxhdGZvcm1D
YW52YXM6OlBhaW50ZXIgY2FudmFzUGFpbnRlcigmbV9jYW52YXMsIHRleHRPcHRpb24pOworICAg
IHBhaW50Q29udGVudHMoKmNhbnZhc1BhaW50ZXIuY29udGV4dCgpLCBjb250ZW50UmVjdCk7Cit9
CisKK3ZvaWQgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBkYXRlVGV4dHVyZVJl
Y3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRv
ciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFJlY3QmIGRlc3RSZWN0KQoreworICAgIFBsYXRmb3JtQ2FudmFzOjpBdXRvTG9ja2Vy
IGxvY2tlcigmbV9jYW52YXMpOworCisgICAgdGV4dHVyZS0+YmluZFRleHR1cmUoY29udGV4dCwg
YWxsb2NhdG9yKTsKKyAgICBtX3RleFN1YkltYWdlLnVwbG9hZChsb2NrZXIucGl4ZWxzKCksIGNv
bnRlbnRSZWN0KCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0LCB0ZXh0dXJlLT5mb3JtYXQoKSwgY29u
dGV4dCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjc1ZGRkZDViNDliMjFjMGY3NWI4ZmE0MjI4OWNj
MmYxMGU1NGE0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAtMCww
ICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXJfaAorI2RlZmluZSBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyX2gKKworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJMYXllclRleHR1cmVTdWJJbWFnZS5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtQ2FudmFzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGF5ZXJQ
YWludGVyQ2hyb21pdW07CisKKy8vIEEgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciB3aXRoIGFu
IGludGVybmFsIGJpdG1hcC4KK2NsYXNzIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIg
OiBwdWJsaWMgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciB7CitwdWJsaWM6CisgICAgY2xhc3Mg
VGV4dHVyZSA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFRleHR1cmUoQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciosIFBh
c3NPd25QdHI8TWFuYWdlZFRleHR1cmU+KTsKKyAgICAgICAgdmlydHVhbCB+VGV4dHVyZSgpOwor
CisgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4
dHVyZUFsbG9jYXRvciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3Qm
IGRlc3RSZWN0KTsKKworICAgIHByaXZhdGU6CisgICAgICAgIEJpdG1hcENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgeyByZXR1cm4gbV90ZXh0dXJlVXBkYXRlcjsg
fQorCisgICAgICAgIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIG1fdGV4dHVyZVVw
ZGF0ZXI7CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJpdG1hcENhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXI+IGNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiwg
Ym9vbCB1c2VNYXBUZXhTdWJJbWFnZSk7CisgICAgdmlydHVhbCB+Qml0bWFwQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcigpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPExheWVyVGV4dHVyZVVw
ZGF0ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKTsKKyAgICB2aXJ0
dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6Qm90dG9tVXBPcmllbnRhdGlvbjsgfQorICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0
IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKKyAgICB2aXJ0dWFs
IHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJ
bnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscyk7CisgICAgdm9pZCB1cGRhdGVUZXh0
dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBNYW5hZ2VkVGV4
dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0
KTsKKworcHJpdmF0ZToKKyAgICBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBhc3NP
d25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+LCBib29sIHVzZU1hcFRleFN1YkltYWdlKTsKKwor
ICAgIFBsYXRmb3JtQ2FudmFzIG1fY2FudmFzOworICAgIExheWVyVGV4dHVyZVN1YkltYWdlIG1f
dGV4U3ViSW1hZ2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2VuZGlmIC8vIEJpdG1hcENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBMYXllclRleHR1cmVVcGRhdGVyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xNWQyODc3NDE3NGIwYTI2YzEwMGJlZTVmNDM2ZTk5ZWMyMmMxM2YyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQml0bWFwTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorCisjaW5jbHVkZSAiQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorCisjaW5j
bHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbG9yLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6VGV4dHVyZTo6VGV4dHVyZShCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0
dXJlVXBkYXRlciwgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4dHVyZSkKKyAgICA6IExh
eWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUodGV4dHVyZSkKKyAgICAsIG1fdGV4dHVyZVVwZGF0
ZXIodGV4dHVyZVVwZGF0ZXIpCit7Cit9CisKK3ZvaWQgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6VGV4dHVyZTo6dXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwg
VGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBj
b25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3sKKyAgICB0ZXh0dXJlVXBkYXRlcigpLT51cGRhdGVU
ZXh0dXJlUmVjdChjb250ZXh0LCBhbGxvY2F0b3IsIHRleHR1cmUoKSwgc291cmNlUmVjdCwgZGVz
dFJlY3QpOworfQorCitQYXNzT3duUHRyPEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI+
IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShQYXNzT3duUHRyPExheWVy
UGFpbnRlckNocm9taXVtPiBwYWludGVyLCBib29sIHVzZU1hcFRleFN1YkltYWdlKQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihwYWlu
dGVyLCB1c2VNYXBUZXhTdWJJbWFnZSkpOworfQorCitCaXRtYXBDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQ
YWludGVyQ2hyb21pdW0+IHBhaW50ZXIsIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpCisgICAgOiBD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyKHBhaW50ZXIpCisgICAgLCBtX3RleFN1YkltYWdlKHVz
ZU1hcFRleFN1YkltYWdlKQoreworfQorCitMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiBC
aXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5h
Z2VyKiBtYW5hZ2VyKQoreworICAgIHJldHVybiBuZXcgVGV4dHVyZSh0aGlzLCBNYW5hZ2VkVGV4
dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKTsKK30KKworTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxl
ZFRleGVsRm9ybWF0IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnNhbXBsZWRUZXhl
bEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KQoreworICAgIC8vIFRoZSBjb21wb25lbnQg
b3JkZXIgbWF5IGJlIGJncmEgaWYgd2UgdXBsb2FkZWQgYmdyYSBwaXhlbHMgdG8gcmdiYSB0ZXh0
dXJlcy4KKyAgICByZXR1cm4gUGxhdGZvcm1Db2xvcjo6c2FtZUNvbXBvbmVudE9yZGVyKHRleHR1
cmVGb3JtYXQpID8KKyAgICAgICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhl
bEZvcm1hdFJHQkEgOiBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRCR1JB
OworfQorCit2b2lkIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1Vw
ZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUs
IGludCBib3JkZXJUZXhlbHMpCit7CisgICAgbV90ZXhTdWJJbWFnZS5zZXRTdWJJbWFnZVNpemUo
dGlsZVNpemUpOworCisgICAgbV9jYW52YXMucmVzaXplKGNvbnRlbnRSZWN0LnNpemUoKSk7Cisg
ICAgLy8gQXNzdW1wdGlvbjogaWYgYSB0aWxlciBpcyB1c2luZyBib3JkZXIgdGV4ZWxzLCB0aGVu
IGl0IGlzIGJlY2F1c2UgdGhlCisgICAgLy8gbGF5ZXIgaXMgbGlrZWx5IHRvIGJlIGZpbHRlcmVk
IG9yIHRyYW5zZm9ybWVkLiBCZWNhdXNlIG9mIGl0IG1pZ2h0IGJlCisgICAgLy8gdHJhbnNmb3Jt
ZWQsIGRyYXcgdGhlIHRleHQgaW4gZ3JheXNjYWxlIGluc3RlYWQgb2Ygc3VicGl4ZWwgYW50aWFs
aWFzaW5nLgorICAgIFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpUZXh0T3B0aW9uIHRleHRPcHRp
b24gPQorICAgICAgICBib3JkZXJUZXhlbHMgPyBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6R3Jh
eXNjYWxlVGV4dCA6IFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpTdWJwaXhlbFRleHQ7CisgICAg
UGxhdGZvcm1DYW52YXM6OlBhaW50ZXIgY2FudmFzUGFpbnRlcigmbV9jYW52YXMsIHRleHRPcHRp
b24pOworICAgIHBhaW50Q29udGVudHMoKmNhbnZhc1BhaW50ZXIuY29udGV4dCgpLCBjb250ZW50
UmVjdCk7Cit9CisKK3ZvaWQgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBkYXRl
VGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3Iq
IGFsbG9jYXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQoreworICAgIFBsYXRmb3JtQ2FudmFzOjpB
dXRvTG9ja2VyIGxvY2tlcigmbV9jYW52YXMpOworCisgICAgdGV4dHVyZS0+YmluZFRleHR1cmUo
Y29udGV4dCwgYWxsb2NhdG9yKTsKKyAgICBtX3RleFN1YkltYWdlLnVwbG9hZChsb2NrZXIucGl4
ZWxzKCksIGNvbnRlbnRSZWN0KCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0LCB0ZXh0dXJlLT5mb3Jt
YXQoKSwgY29udGV4dCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEzZThmN2I3YmYzZDYwMDhkZWIwYzYzOGFhMzcx
MTVmOTdhMmE2YmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcApAQCAtMCwwICsx
LDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgi
CisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJMYXllclBhaW50ZXJD
aHJvbWl1bS5oIgorI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
KFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIpCisgICAgOiBtX3BhaW50
ZXIocGFpbnRlcikKK3sKK30KKworQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6fkNhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXIoKQoreworfQorCit2b2lkIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXI6OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCkKK3sKKyAgICBjb250ZXh0LnRyYW5zbGF0ZSgtY29udGVudFJlY3QueCgp
LCAtY29udGVudFJlY3QueSgpKTsKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyOjpwYWludCIsIHRoaXMsIDApOworICAgICAgICBtX3BhaW50ZXIt
PnBhaW50KGNvbnRleHQsIGNvbnRlbnRSZWN0KTsKKyAgICB9CisgICAgbV9jb250ZW50UmVjdCA9
IGNvbnRlbnRSZWN0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZkNzlhMDRkMGEzNmQ3OTZhNGU3ZjMzNDMzMTcyYTgyMDRi
YzE0OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTAsMCArMSw1NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKworI2lmbmRlZiBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyX2gKKyNkZWZpbmUgQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlcl9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisKKyNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBMYXllclBhaW50ZXJDaHJv
bWl1bTsKKworLy8gQSBMYXllclRleHR1cmVVcGRhdGVyIHdpdGggYW4gaW50ZXJuYWwgY2FudmFz
LgorY2xhc3MgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciA6IHB1YmxpYyBMYXllclRleHR1cmVV
cGRhdGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DYW52YXNMYXllclRleHR1cmVVcGRhdGVy
KCk7CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
KFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+KTsKKworICAgIHZvaWQgcGFpbnRDb250
ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisgICAg
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRSZWN0
OyB9CisKK3ByaXZhdGU6CisgICAgSW50UmVjdCBtX2NvbnRlbnRSZWN0OworICAgIE93blB0cjxM
YXllclBhaW50ZXJDaHJvbWl1bT4gbV9wYWludGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNlbmRpZiAvLyBD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmNwcAppbmRleCBjYThiM2JkNzYxZjA4MTVlNDdiNmNmYjA0OTFhMWQ5NzI4NzlmMDRjLi5kYjBh
ZTQ2OTllNzg5NjkyZjUxYzQwYjhjZGU3NjQ4NGZkMWM0YWE4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVu
dExheWVyQ2hyb21pdW0uY3BwCkBAIC0zNCw5ICszNCwxMCBAQAogCiAjaW5jbHVkZSAiQ29udGVu
dExheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIuaCIKKyNpbmNsdWRlICJGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIuaCIKICNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXJD
YW52YXMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJjYy9DQ0xh
eWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KQEAgLTEyMiwxMiAr
MTIzLDEyIEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVy
KGNvbnN0IENDTGF5ZXJUcmVlSG9zdCogaG9zdCkKIHsKICNpZiBVU0UoU0tJQSkKICAgICBpZiAo
aG9zdC0+c2V0dGluZ3MoKS5hY2NlbGVyYXRlUGFpbnRpbmcpIHsKLSAgICAgICAgbV90ZXh0dXJl
VXBkYXRlciA9IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OmNyZWF0ZShDb250ZW50TGF5
ZXJQYWludGVyOjpjcmVhdGUobV9kZWxlZ2F0ZSkpOworICAgICAgICBtX3RleHR1cmVVcGRhdGVy
ID0gRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUo
Q29udGVudExheWVyUGFpbnRlcjo6Y3JlYXRlKG1fZGVsZWdhdGUpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICNlbmRpZiAvLyBVU0UoU0tJQSkKIAotICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBM
YXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpjcmVhdGUoQ29udGVudExheWVyUGFpbnRlcjo6Y3Jl
YXRlKG1fZGVsZWdhdGUpLCBob3N0LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdN
YXBTdWIpOworICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBCaXRtYXBDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyOjpjcmVhdGUoQ29udGVudExheWVyUGFpbnRlcjo6Y3JlYXRlKG1fZGVsZWdhdGUpLCBo
b3N0LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdNYXBTdWIpOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFt
ZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOTQ1ZTA2NDljYzBkYzI2YjYy
NWZiM2U0ZjU3YWZlOTgwZDdiNmU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyLmNwcApAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIFVTRShT
S0lBKQorCisjaW5jbHVkZSAiRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyLmgiCisKKyNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUg
IlNrQ2FudmFzLmgiCisjaW5jbHVkZSAiU2tHcHVEZXZpY2UuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgeworCitjbGFzcyBGcmFtZUJ1ZmZlciB7CitwdWJsaWM6CisgICAg
RnJhbWVCdWZmZXIoKTsKKyAgICB+RnJhbWVCdWZmZXIoKTsKKworICAgIFNrQ2FudmFzKiBpbml0
aWFsaXplKEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIE1hbmFnZWRUZXh0
dXJlKik7CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAg
ICBQbGF0Zm9ybTNET2JqZWN0IG1fZmJvOworICAgIE93blB0cjxTa0NhbnZhcz4gbV9jYW52YXM7
Cit9OworCitGcmFtZUJ1ZmZlcjo6RnJhbWVCdWZmZXIoKQorICAgIDogbV9jb250ZXh0KDApCisg
ICAgLCBtX2ZibygwKQoreworfQorCitGcmFtZUJ1ZmZlcjo6fkZyYW1lQnVmZmVyKCkKK3sKKyAg
ICBtX2NhbnZhcy5jbGVhcigpOworCisgICAgaWYgKG1fZmJvKQorICAgICAgICBtX2NvbnRleHQt
PmRlbGV0ZUZyYW1lYnVmZmVyKG1fZmJvKTsKK30KKworU2tDYW52YXMqIEZyYW1lQnVmZmVyOjpp
bml0aWFsaXplKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBh
bGxvY2F0b3IsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlKQoreworICAgIG1fY29udGV4dCA9IGNv
bnRleHQ7CisgICAgbV9mYm8gPSBtX2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAg
bV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBtX2Zibyk7CisgICAgdGV4dHVyZS0+ZnJhbWVidWZmZXJUZXh0dXJlMkQobV9jb250ZXh0LCBh
bGxvY2F0b3IpOworCisgICAgLy8gQ3JlYXRlIGEgc2tpYSBncHUgY2FudmFzLgorICAgIEdyQ29u
dGV4dCogZ3JDb250ZXh0ID0gbV9jb250ZXh0LT5nckNvbnRleHQoKTsKKyAgICBJbnRTaXplIGNh
bnZhc1NpemUgPSB0ZXh0dXJlLT5zaXplKCk7CisgICAgR3JQbGF0Zm9ybVN1cmZhY2VEZXNjIHRh
cmdldERlc2M7CisgICAgdGFyZ2V0RGVzYy5yZXNldCgpOworICAgIHRhcmdldERlc2MuZlN1cmZh
Y2VUeXBlID0ga1RleHR1cmVSZW5kZXJUYXJnZXRfR3JQbGF0Zm9ybVN1cmZhY2VUeXBlOworICAg
IHRhcmdldERlc2MuZlJlbmRlclRhcmdldEZsYWdzID0ga05vbmVfR3JQbGF0Zm9ybVJlbmRlclRh
cmdldEZsYWdCaXQ7CisgICAgdGFyZ2V0RGVzYy5mV2lkdGggPSBjYW52YXNTaXplLndpZHRoKCk7
CisgICAgdGFyZ2V0RGVzYy5mSGVpZ2h0ID0gY2FudmFzU2l6ZS5oZWlnaHQoKTsKKyAgICB0YXJn
ZXREZXNjLmZDb25maWcgPSBrUkdCQV84ODg4X0dyUGl4ZWxDb25maWc7CisgICAgdGFyZ2V0RGVz
Yy5mU3RlbmNpbEJpdHMgPSA4OworICAgIHRhcmdldERlc2MuZlBsYXRmb3JtVGV4dHVyZSA9IHRl
eHR1cmUtPnRleHR1cmVJZCgpOworICAgIHRhcmdldERlc2MuZlBsYXRmb3JtUmVuZGVyVGFyZ2V0
ID0gbV9mYm87CisgICAgU2tBdXRvVFVucmVmPEdyVGV4dHVyZT4gdGFyZ2V0KHN0YXRpY19jYXN0
PEdyVGV4dHVyZSo+KGdyQ29udGV4dC0+Y3JlYXRlUGxhdGZvcm1TdXJmYWNlKHRhcmdldERlc2Mp
KSk7CisgICAgU2tBdXRvVFVucmVmPFNrRGV2aWNlPiBkZXZpY2UobmV3IFNrR3B1RGV2aWNlKGdy
Q29udGV4dCwgdGFyZ2V0LmdldCgpKSk7CisgICAgbV9jYW52YXMgPSBhZG9wdFB0cihuZXcgU2tD
YW52YXMoZGV2aWNlLmdldCgpKSk7CisKKyAgICByZXR1cm4gbV9jYW52YXMuZ2V0KCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlCisKK0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVyZShGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyLCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJl
PiB0ZXh0dXJlKQorICAgIDogTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSh0ZXh0dXJlKQor
ICAgICwgbV90ZXh0dXJlVXBkYXRlcih0ZXh0dXJlVXBkYXRlcikKK3sKK30KKworRnJhbWVCdWZm
ZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjp+VGV4dHVyZSgp
Cit7Cit9CisKK3ZvaWQgRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjpUZXh0dXJlOjp1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0
dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0
IEludFJlY3QmIGRlc3RSZWN0KQoreworICAgIHRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZVRleHR1
cmVSZWN0KGNvbnRleHQsIGFsbG9jYXRvciwgdGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBkZXN0UmVj
dCk7Cit9CisKK1Bhc3NSZWZQdHI8RnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyPiBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6
OmNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyKQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyKHBhaW50ZXIpKTsKK30KKworRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyOjpGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcikKKyAgICA6IFNr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIocGFpbnRlcikKK3sKK30KKworRnJhbWVC
dWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjp+RnJhbWVCdWZmZXJTa1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKCkKK3sKK30KKworUGFzc1JlZlB0cjxMYXll
clRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlKHRoaXMsIE1hbmFnZWRUZXh0dXJlOjpj
cmVhdGUobWFuYWdlcikpKTsKK30KKworTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVs
Rm9ybWF0IEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6c2Ft
cGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpCit7CisgICAgLy8gSGVyZSB3
ZSBkaXJlY3RseSByZW5kZXIgdG8gdGhlIHRleHR1cmUsIHNvIHRoZSBjb21wb25lbnQgb3JkZXIg
aXMgYWx3YXlzIGNvcnJlY3QuCisgICAgcmV0dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBs
ZWRUZXhlbEZvcm1hdFJHQkE7Cit9CisKK3ZvaWQgRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyOjp1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBNYW5hZ2VkVGV4dHVyZSogdGV4
dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3Qp
Cit7CisgICAgLy8gTWFrZSBzdXJlIFNLSUEgdXNlcyB0aGUgY29ycmVjdCBHTCBjb250ZXh0Lgor
ICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIC8vIE5vdGlmeSBTS0lBIHRv
IHN5bmMgaXRzIGludGVybmFsIEdMIHN0YXRlLgorICAgIGNvbnRleHQtPmdyQ29udGV4dCgpLT5y
ZXNldENvbnRleHQoKTsKKworICAgIC8vIENyZWF0ZSBhbiBhY2NlbGVyYXRlZCBjYW52YXMgdG8g
ZHJhdyBvbi4KKyAgICBGcmFtZUJ1ZmZlciBidWZmZXI7CisgICAgU2tDYW52YXMqIGNhbnZhcyA9
IGJ1ZmZlci5pbml0aWFsaXplKGNvbnRleHQsIGFsbG9jYXRvciwgdGV4dHVyZSk7CisKKyAgICBj
YW52YXMtPmNsaXBSZWN0KFNrUmVjdChkZXN0UmVjdCkpOworICAgIC8vIFRyYW5zbGF0ZSB0aGUg
b3JpZ2luIG9mIGNvbnRlbnRSZWN0IHRvIHRoYXQgb2YgZGVzdFJlY3QuCisgICAgLy8gTm90ZSB0
aGF0IGRlc3RSZWN0IGlzIGRlZmluZWQgcmVsYXRpdmUgdG8gc291cmNlUmVjdC4KKyAgICBjYW52
YXMtPnRyYW5zbGF0ZShjb250ZW50UmVjdCgpLngoKSAtIHNvdXJjZVJlY3QueCgpICsgZGVzdFJl
Y3QueCgpLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRSZWN0KCkueSgpIC0gc291cmNl
UmVjdC55KCkgKyBkZXN0UmVjdC55KCkpOworICAgIGRyYXdQaWN0dXJlKGNhbnZhcyk7CisKKyAg
ICAvLyBGbHVzaCBTS0lBIGNvbnRleHQgc28gdGhhdCBhbGwgdGhlIHJlbmRlcmVkIHN0dWZmIGFw
cGVhcnMgb24gdGhlIHRleHR1cmUuCisgICAgY29udGV4dC0+Z3JDb250ZXh0KCktPmZsdXNoKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoU0tJQSkKKyNlbmRp
ZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjlkMzc2OGNlZDE4ODM4NDdjMmNjZDA4YzUxZDBkMDQyYjk5YjNlMTYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAtMCww
ICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcl9oCisjZGVmaW5lIEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcl9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisj
aWYgVVNFKFNLSUEpCisKKyNpbmNsdWRlICJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnJhbWVCdWZmZXJTa1BpY3R1
cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGljIFNrUGljdHVyZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIgeworcHVibGljOgorICAgIGNsYXNzIFRleHR1cmUgOiBwdWJsaWMgTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSB7CisgICAgcHVibGljOgorICAgICAgICBUZXh0dXJl
KEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciosIFBhc3NPd25Q
dHI8TWFuYWdlZFRleHR1cmU+KTsKKyAgICAgICAgdmlydHVhbCB+VGV4dHVyZSgpOworCisgICAg
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFs
bG9jYXRvciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RS
ZWN0KTsKKworICAgIHByaXZhdGU6CisgICAgICAgIEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSB7IHJldHVybiBtX3RleHR1cmVV
cGRhdGVyOyB9CisKKyAgICAgICAgRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyKiBtX3RleHR1cmVVcGRhdGVyOworICAgIH07CisKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI+IGNyZWF0
ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPik7CisgICAgdmlydHVhbCB+RnJhbWVC
dWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKCk7CisKKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gY3JlYXRlVGV4dHVyZShU
ZXh0dXJlTWFuYWdlciopOworICAgIHZpcnR1YWwgT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSB7
IHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpUb3BEb3duT3JpZW50YXRpb247IH0KKyAgICB2
aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4
dHVyZUZvcm1hdCk7CisgICAgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQz
RCosIFRleHR1cmVBbGxvY2F0b3IqLCBNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKworcHJpdmF0ZToKKyAgICBleHBs
aWNpdCBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOworfTsKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KyNlbmRpZiAvLyBVU0UoU0tJQSkKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisjZW5kaWYgLy8gRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDM2MzM2Mjk2N2FjY2Rl
YmMyNTU5ZTI5YzI0ZDQzYzFjODg4ODAzMTcuLjBiZDgyYWUxYTE4YTI1MzBmODc0MjBlNDgxZDBk
NWNhMjMwYjkwMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAtNDYsNiAr
NDYsMjUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbWFnZUxheWVyVGV4dHVyZVVw
ZGF0ZXIgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlciB7CiBwdWJsaWM6CisgICAgY2xhc3Mg
VGV4dHVyZSA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFRleHR1cmUoSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBk
YXRlciwgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4dHVyZSkKKyAgICAgICAgICAgIDog
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSh0ZXh0dXJlKQorICAgICAgICAgICAgLCBtX3Rl
eHR1cmVVcGRhdGVyKHRleHR1cmVVcGRhdGVyKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwg
VGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBj
b25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKKyAgICAgICAgeworICAgICAgICAgICAgdGV4dHVyZVVw
ZGF0ZXIoKS0+dXBkYXRlVGV4dHVyZVJlY3QoY29udGV4dCwgYWxsb2NhdG9yLCB0ZXh0dXJlKCks
IHNvdXJjZVJlY3QsIGRlc3RSZWN0KTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIHsgcmV0dXJuIG1f
dGV4dHVyZVVwZGF0ZXI7IH0KKworICAgICAgICBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIqIG1f
dGV4dHVyZVVwZGF0ZXI7CisgICAgfTsKKwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlTGF5
ZXJUZXh0dXJlVXBkYXRlcj4gY3JlYXRlKGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpCiAgICAgewog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcih1c2VN
YXBUZXhTdWJJbWFnZSkpOwpAQCAtNTMsNiArNzIsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCB+SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKCkgeyB9CiAKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gY3JlYXRlVGV4dHVyZShUZXh0dXJlTWFu
YWdlciogbWFuYWdlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVy
ZSh0aGlzLCBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKSk7CisgICAgfQorCiAgICAg
dmlydHVhbCBPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIHsgcmV0dXJuIExheWVyVGV4dHVyZVVw
ZGF0ZXI6OkJvdHRvbVVwT3JpZW50YXRpb247IH0KIAogICAgIHZpcnR1YWwgU2FtcGxlZFRleGVs
Rm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KQpAQCAtNjEs
NyArODUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
U2FtcGxlZFRleGVsRm9ybWF0UkdCQSA6IExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhl
bEZvcm1hdEJHUkE7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCAv
KiBib3JkZXJUZXhlbHMgKi8pCisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25z
dCBJbnRSZWN0JiAvKiBjb250ZW50UmVjdCAqLywgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGlu
dCAvKiBib3JkZXJUZXhlbHMgKi8pCiAgICAgewogICAgICAgICBtX3RleFN1YkltYWdlLnNldFN1
YkltYWdlU2l6ZSh0aWxlU2l6ZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAKaW5kZXggZGYyNTQzNTZiZGJkNjFmODJkOTIxZThlOWMwZGNlZWM5YWE1ZThhMi4u
ZDg2ODk2ZTkxMTdiMzI0MGZhZTFjYjM3OWQ0OTNmZDlmNWUzNjZkMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC0zNSwxMyArMzUsMTMgQEAKICNpbmNsdWRlICJM
YXllclJlbmRlcmVyQ2hyb21pdW0uaCIKIAogI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1
bS5oIgorI2luY2x1ZGUgIkNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCIKICNpbmNsdWRlICJF
eHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUg
Ikdlb21ldHJ5QmluZGluZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5j
bHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgi
Ci0jaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oIgogI2luY2x1ZGUgIk1hbmFn
ZWRUZXh0dXJlLmgiCiAjaW5jbHVkZSAiTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmgiCiAjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaAppbmRl
eCAzZDg1OTdlMzllODVkNGNiZjAxNTZkNWNjMTE3OTQ2Nzk1MzcxMjRmLi45NDI5ODE4MzAwYmQw
ZmFhMDEyNjkxNGFmODg0ODllZjk4YmNiNjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRl
ci5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAKKyNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMz
RC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKQEAgLTM3LDExICszOCwyNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIEludFJl
Y3Q7CiBjbGFzcyBJbnRTaXplOwotY2xhc3MgTWFuYWdlZFRleHR1cmU7CiBjbGFzcyBUZXh0dXJl
QWxsb2NhdG9yOworY2xhc3MgVGV4dHVyZU1hbmFnZXI7CiAKIGNsYXNzIExheWVyVGV4dHVyZVVw
ZGF0ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxMYXllclRleHR1cmVVcGRhdGVyPiB7CiBwdWJsaWM6
CisgICAgLy8gQWxsb3dzIHRleHR1cmUgdXBsb2FkZXJzIHRvIHN0b3JlIHBlci10aWxlIHJlc291
cmNlcy4KKyAgICBjbGFzcyBUZXh0dXJlIDogcHVibGljIFJlZkNvdW50ZWQ8VGV4dHVyZT4gewor
ICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+VGV4dHVyZSgpIHsgfQorCisgICAgICAgIE1h
bmFnZWRUZXh0dXJlKiB0ZXh0dXJlKCkgeyByZXR1cm4gbV90ZXh0dXJlLmdldCgpOyB9CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlUmVjdChjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KSB7
IH07CisgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwg
VGV4dHVyZUFsbG9jYXRvciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJl
Y3QmIGRlc3RSZWN0KSA9IDA7CisgICAgcHJvdGVjdGVkOgorICAgICAgICBleHBsaWNpdCBUZXh0
dXJlKFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IHRleHR1cmUpIDogbV90ZXh0dXJlKHRleHR1
cmUpIHsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBt
X3RleHR1cmU7CisgICAgfTsKKwogICAgIHZpcnR1YWwgfkxheWVyVGV4dHVyZVVwZGF0ZXIoKSB7
IH0KIAogICAgIGVudW0gT3JpZW50YXRpb24gewpAQCAtNTQsNiArNzAsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIFNhbXBsZWRUZXhlbEZvcm1hdEJHUkEsCiAgICAgICAgIFNhbXBsZWRUZXhlbEZvcm1h
dEludmFsaWQsCiAgICAgfTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VGV4dHVyZT4gY3JlYXRl
VGV4dHVyZShUZXh0dXJlTWFuYWdlciopID0gMDsKICAgICAvLyBSZXR1cm5zIHRoZSBvcmllbnRh
dGlvbiBvZiB0aGUgdGV4dHVyZSB1cGxvYWRlZCBieSB0aGlzIGludGVyZmFjZS4KICAgICB2aXJ0
dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgPSAwOwogICAgIC8vIFJldHVybnMgdGhlIGZv
cm1hdCBvZiB0aGUgdGV4ZWwgdXBsb2FkZWQgYnkgdGhpcyBpbnRlcmZhY2UuCkBAIC02MSw4ICs3
OCw3IEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIGZvcm1hdCBzcGVjaWZpZXMgdGhlIGNvbXBvbmVu
dCBvcmRlciBpbiB0aGUgc2FtcGxlZCB0ZXhlbC4KICAgICAvLyBJZiB0aGUgZm9ybWF0IGlzIFRl
eGVsRm9ybWF0QkdSQSwgdmVjNC54IGlzIGJsdWUgYW5kIHZlYzQueiBpcyByZWQuCiAgICAgdmly
dHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1
cmVGb3JtYXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRl
eGVscykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0Nv
bnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3Qg
SW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpIHsgfTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjYjJjZDNlNDZiMzAxMzRlYWY4ODA1
YjQ1M2U1Y2FiOGQ1NDVjMWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJU
ZXh0dXJlVXBkYXRlckNhbnZhcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMTggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQotCi0jaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oIgotCi0jaW5j
bHVkZSAiRXh0ZW5zaW9uczNELmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5o
IgotI2luY2x1ZGUgIlBsYXRmb3JtQ29sb3IuaCIKLSNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCi0K
LSNpZiBVU0UoU0tJQSkKLSNpbmNsdWRlICJHckNvbnRleHQuaCIKLSNpbmNsdWRlICJQbGF0Zm9y
bUNvbnRleHRTa2lhLmgiCi0jaW5jbHVkZSAiU2tDYW52YXMuaCIKLSNpbmNsdWRlICJTa0dwdURl
dmljZS5oIgotI2VuZGlmIC8vIFVTRShTS0lBKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNp
ZiBVU0UoU0tJQSkKLW5hbWVzcGFjZSB7Ci0KLWNsYXNzIEZyYW1lQnVmZmVyIHsKLXB1YmxpYzoK
LSAgICBGcmFtZUJ1ZmZlcigpOwotICAgIH5GcmFtZUJ1ZmZlcigpOwotCi0gICAgU2tDYW52YXMq
IGluaXRpYWxpemUoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdl
ZFRleHR1cmUqKTsKLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0
OwotICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mYm87Ci0gICAgT3duUHRyPFNrQ2FudmFzPiBtX2Nh
bnZhczsKLX07Ci0KLUZyYW1lQnVmZmVyOjpGcmFtZUJ1ZmZlcigpCi0gICAgOiBtX2NvbnRleHQo
MCkKLSAgICAsIG1fZmJvKDApCi17Ci19Ci0KLUZyYW1lQnVmZmVyOjp+RnJhbWVCdWZmZXIoKQot
ewotICAgIG1fY2FudmFzLmNsZWFyKCk7Ci0KLSAgICBpZiAobV9mYm8pCi0gICAgICAgIG1fY29u
dGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9mYm8pOwotfQotCi1Ta0NhbnZhcyogRnJhbWVCdWZm
ZXI6OmluaXRpYWxpemUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0
b3IqIGFsbG9jYXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUpCi17Ci0gICAgbV9jb250ZXh0
ID0gY29udGV4dDsKLSAgICBtX2ZibyA9IG1fY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsK
LSAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIG1fZmJvKTsKLSAgICB0ZXh0dXJlLT5mcmFtZWJ1ZmZlclRleHR1cmUyRChtX2NvbnRl
eHQsIGFsbG9jYXRvcik7Ci0KLSAgICAvLyBDcmVhdGUgYSBza2lhIGdwdSBjYW52YXMuCi0gICAg
R3JDb250ZXh0KiBnckNvbnRleHQgPSBtX2NvbnRleHQtPmdyQ29udGV4dCgpOwotICAgIEludFNp
emUgY2FudmFzU2l6ZSA9IHRleHR1cmUtPnNpemUoKTsKLSAgICBHclBsYXRmb3JtU3VyZmFjZURl
c2MgdGFyZ2V0RGVzYzsKLSAgICB0YXJnZXREZXNjLnJlc2V0KCk7Ci0gICAgdGFyZ2V0RGVzYy5m
U3VyZmFjZVR5cGUgPSBrVGV4dHVyZVJlbmRlclRhcmdldF9HclBsYXRmb3JtU3VyZmFjZVR5cGU7
Ci0gICAgdGFyZ2V0RGVzYy5mUmVuZGVyVGFyZ2V0RmxhZ3MgPSBrTm9uZV9HclBsYXRmb3JtUmVu
ZGVyVGFyZ2V0RmxhZ0JpdDsKLSAgICB0YXJnZXREZXNjLmZXaWR0aCA9IGNhbnZhc1NpemUud2lk
dGgoKTsKLSAgICB0YXJnZXREZXNjLmZIZWlnaHQgPSBjYW52YXNTaXplLmhlaWdodCgpOwotICAg
IHRhcmdldERlc2MuZkNvbmZpZyA9IGtSR0JBXzg4ODhfR3JQaXhlbENvbmZpZzsKLSAgICB0YXJn
ZXREZXNjLmZTdGVuY2lsQml0cyA9IDg7Ci0gICAgdGFyZ2V0RGVzYy5mUGxhdGZvcm1UZXh0dXJl
ID0gdGV4dHVyZS0+dGV4dHVyZUlkKCk7Ci0gICAgdGFyZ2V0RGVzYy5mUGxhdGZvcm1SZW5kZXJU
YXJnZXQgPSBtX2ZibzsKLSAgICBTa0F1dG9UVW5yZWY8R3JUZXh0dXJlPiB0YXJnZXQoc3RhdGlj
X2Nhc3Q8R3JUZXh0dXJlKj4oZ3JDb250ZXh0LT5jcmVhdGVQbGF0Zm9ybVN1cmZhY2UodGFyZ2V0
RGVzYykpKTsKLSAgICBTa0F1dG9UVW5yZWY8U2tEZXZpY2U+IGRldmljZShuZXcgU2tHcHVEZXZp
Y2UoZ3JDb250ZXh0LCB0YXJnZXQuZ2V0KCkpKTsKLSAgICBtX2NhbnZhcyA9IGFkb3B0UHRyKG5l
dyBTa0NhbnZhcyhkZXZpY2UuZ2V0KCkpKTsKLQotICAgIHJldHVybiBtX2NhbnZhcy5nZXQoKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UKLSNlbmRpZiAvLyBVU0UoU0tJQSkKLQotTGF5ZXJUZXh0dXJl
VXBkYXRlckNhbnZhczo6TGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyhQYXNzT3duUHRyPExheWVy
UGFpbnRlckNocm9taXVtPiBwYWludGVyKQotICAgIDogbV9wYWludGVyKHBhaW50ZXIpCi17Ci19
Ci0KLXZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhczo6cGFpbnRDb250ZW50cyhHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQotewotICAgIGNv
bnRleHQudHJhbnNsYXRlKC1jb250ZW50UmVjdC54KCksIC1jb250ZW50UmVjdC55KCkpOwotICAg
IHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6OnBhaW50
IiwgdGhpcywgMCk7Ci0gICAgICAgIG1fcGFpbnRlci0+cGFpbnQoY29udGV4dCwgY29udGVudFJl
Y3QpOwotICAgIH0KLSAgICBtX2NvbnRlbnRSZWN0ID0gY29udGVudFJlY3Q7Ci19Ci0KLVBhc3NS
ZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcD4gTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1h
cDo6Y3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIsIGJvb2wg
dXNlTWFwVGV4U3ViSW1hZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMYXllclRleHR1
cmVVcGRhdGVyQml0bWFwKHBhaW50ZXIsIHVzZU1hcFRleFN1YkltYWdlKSk7Ci19Ci0KLUxheWVy
VGV4dHVyZVVwZGF0ZXJCaXRtYXA6OkxheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXAoUGFzc093blB0
cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlciwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSkK
LSAgICA6IExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMocGFpbnRlcikKLSAgICAsIG1fdGV4U3Vi
SW1hZ2UodXNlTWFwVGV4U3ViSW1hZ2UpCi17Ci19Ci0KLUxheWVyVGV4dHVyZVVwZGF0ZXI6OlNh
bXBsZWRUZXhlbEZvcm1hdCBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpzYW1wbGVkVGV4ZWxG
b3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkKLXsKLSAgICAvLyBUaGUgY29tcG9uZW50IG9y
ZGVyIG1heSBiZSBiZ3JhIGlmIHdlIHVwbG9hZGVkIGJncmEgcGl4ZWxzIHRvIHJnYmEgdGV4dHVy
ZXMuCi0gICAgcmV0dXJuIFBsYXRmb3JtQ29sb3I6OnNhbWVDb21wb25lbnRPcmRlcih0ZXh0dXJl
Rm9ybWF0KSA/Ci0gICAgICAgICAgICBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxG
b3JtYXRSR0JBIDogTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0QkdSQTsK
LX0KLQotdm9pZCBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpwcmVwYXJlVG9VcGRhdGUoY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9y
ZGVyVGV4ZWxzKQotewotICAgIG1fdGV4U3ViSW1hZ2Uuc2V0U3ViSW1hZ2VTaXplKHRpbGVTaXpl
KTsKLQotICAgIG1fY2FudmFzLnJlc2l6ZShjb250ZW50UmVjdC5zaXplKCkpOwotICAgIC8vIEFz
c3VtcHRpb246IGlmIGEgdGlsZXIgaXMgdXNpbmcgYm9yZGVyIHRleGVscywgdGhlbiBpdCBpcyBi
ZWNhdXNlIHRoZQotICAgIC8vIGxheWVyIGlzIGxpa2VseSB0byBiZSBmaWx0ZXJlZCBvciB0cmFu
c2Zvcm1lZC4gQmVjYXVzZSBvZiBpdCBtaWdodCBiZQotICAgIC8vIHRyYW5zZm9ybWVkLCBkcmF3
IHRoZSB0ZXh0IGluIGdyYXlzY2FsZSBpbnN0ZWFkIG9mIHN1YnBpeGVsIGFudGlhbGlhc2luZy4K
LSAgICBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6VGV4dE9wdGlvbiB0ZXh0T3B0aW9uID0KLSAg
ICAgICAgYm9yZGVyVGV4ZWxzID8gUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OkdyYXlzY2FsZVRl
eHQgOiBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6U3VicGl4ZWxUZXh0OwotICAgIFBsYXRmb3Jt
Q2FudmFzOjpQYWludGVyIGNhbnZhc1BhaW50ZXIoJm1fY2FudmFzLCB0ZXh0T3B0aW9uKTsKLSAg
ICBwYWludENvbnRlbnRzKCpjYW52YXNQYWludGVyLmNvbnRleHQoKSwgY29udGVudFJlY3QpOwot
fQotCi12b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnVwZGF0ZVRleHR1cmVSZWN0KEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIE1h
bmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJ
bnRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICBQbGF0Zm9ybUNhbnZhczo6QXV0b0xvY2tlciBsb2Nr
ZXIoJm1fY2FudmFzKTsKLQotICAgIHRleHR1cmUtPmJpbmRUZXh0dXJlKGNvbnRleHQsIGFsbG9j
YXRvcik7Ci0gICAgbV90ZXhTdWJJbWFnZS51cGxvYWQobG9ja2VyLnBpeGVscygpLCBjb250ZW50
UmVjdCgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCwgdGV4dHVyZS0+Zm9ybWF0KCksIGNvbnRleHQp
OwotfQotCi0jaWYgVVNFKFNLSUEpCi1QYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXJTa1Bp
Y3R1cmU+IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OmNyZWF0ZShQYXNzT3duUHRyPExh
eWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZShwYWludGVyKSk7Ci19Ci0KLUxheWVyVGV4dHVy
ZVVwZGF0ZXJTa1BpY3R1cmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUoUGFzc093blB0
cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcikKLSAgICA6IExheWVyVGV4dHVyZVVwZGF0
ZXJDYW52YXMocGFpbnRlcikKLXsKLX0KLQotTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6
fkxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUoKQotewotfQotCi1MYXllclRleHR1cmVVcGRh
dGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXQgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6c2Ft
cGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpCi17Ci0gICAgLy8gSGVyZSB3
ZSBkaXJlY3RseSByZW5kZXIgdG8gdGhlIHRleHR1cmUsIHNvIHRoZSBjb21wb25lbnQgb3JkZXIg
aXMgYWx3YXlzIGNvcnJlY3QuCi0gICAgcmV0dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBs
ZWRUZXhlbEZvcm1hdFJHQkE7Ci19Ci0KLXZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVy
ZTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRT
aXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscykKLXsKLSAgICBTa0NhbnZhcyogY2FudmFz
ID0gbV9waWN0dXJlLmJlZ2luUmVjb3JkaW5nKGNvbnRlbnRSZWN0LndpZHRoKCksIGNvbnRlbnRS
ZWN0LmhlaWdodCgpKTsKLSAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3JtQ29udGV4dChj
YW52YXMpOwotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoJnBsYXRmb3JtQ29u
dGV4dCk7Ci0gICAgcGFpbnRDb250ZW50cyhncmFwaGljc0NvbnRleHQsIGNvbnRlbnRSZWN0KTsK
LSAgICBtX3BpY3R1cmUuZW5kUmVjb3JkaW5nKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUZXh0dXJlVXBk
YXRlclNrUGljdHVyZTo6dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQotewot
ICAgIC8vIE1ha2Ugc3VyZSBTS0lBIHVzZXMgdGhlIGNvcnJlY3QgR0wgY29udGV4dC4KLSAgICBj
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICAvLyBOb3RpZnkgU0tJQSB0byBzeW5j
IGl0cyBpbnRlcm5hbCBHTCBzdGF0ZS4KLSAgICBjb250ZXh0LT5nckNvbnRleHQoKS0+cmVzZXRD
b250ZXh0KCk7Ci0KLSAgICAvLyBDcmVhdGUgYW4gYWNjZWxlcmF0ZWQgY2FudmFzIHRvIGRyYXcg
b24uCi0gICAgRnJhbWVCdWZmZXIgYnVmZmVyOwotICAgIFNrQ2FudmFzKiBjYW52YXMgPSBidWZm
ZXIuaW5pdGlhbGl6ZShjb250ZXh0LCBhbGxvY2F0b3IsIHRleHR1cmUpOwotCi0gICAgY2FudmFz
LT5jbGlwUmVjdChTa1JlY3QoZGVzdFJlY3QpKTsKLSAgICAvLyBUcmFuc2xhdGUgdGhlIG9yaWdp
biBvZiBjb250ZW50UmVjdCB0byB0aGF0IG9mIGRlc3RSZWN0LgotICAgIC8vIE5vdGUgdGhhdCBk
ZXN0UmVjdCBpcyBkZWZpbmVkIHJlbGF0aXZlIHRvIHNvdXJjZVJlY3QuCi0gICAgY2FudmFzLT50
cmFuc2xhdGUoY29udGVudFJlY3QoKS54KCkgLSBzb3VyY2VSZWN0LngoKSArIGRlc3RSZWN0Lngo
KSwKLSAgICAgICAgICAgICAgICAgICAgICBjb250ZW50UmVjdCgpLnkoKSAtIHNvdXJjZVJlY3Qu
eSgpICsgZGVzdFJlY3QueSgpKTsKLSAgICBjYW52YXMtPmRyYXdQaWN0dXJlKG1fcGljdHVyZSk7
Ci0KLSAgICAvLyBGbHVzaCBTS0lBIGNvbnRleHQgc28gdGhhdCBhbGwgdGhlIHJlbmRlcmVkIHN0
dWZmIGFwcGVhcnMgb24gdGhlIHRleHR1cmUuCi0gICAgY29udGV4dC0+Z3JDb250ZXh0KCktPmZs
dXNoKCk7Ci19Ci0jZW5kaWYgLy8gVVNFKFNLSUEpCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVy
Q2FudmFzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVVcGRhdGVyQ2FudmFzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZm
YzcxYzY4ZmY3YzdkYzk4MjFjZTlhYzhhMWI0MDg4YWE1ODgzODkuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpZm5kZWYgTGF5ZXJUZXh0dXJlVXBkYXRlckNh
bnZhc19oCi0jZGVmaW5lIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXNfaAotCi0jaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCi0j
aW5jbHVkZSAiTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuaCIKLSNpbmNsdWRlICJMYXllclRleHR1cmVV
cGRhdGVyLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1DYW52YXMuaCIKLSNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0KLSNpZiBVU0UoU0tJQSkK
LSNpbmNsdWRlICJTa1BpY3R1cmUuaCIKLQotY2xhc3MgR3JDb250ZXh0OwotY2xhc3MgU2tDYW52
YXM7Ci1jbGFzcyBTa1BpY3R1cmU7Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBHcmFwaGljc0NvbnRleHQzRDsKLWNsYXNzIExheWVyUGFpbnRlckNocm9taXVtOwotCi0v
LyBBIExheWVyVGV4dHVyZVVwZGF0ZXIgd2l0aCBhbiBpbnRlcm5hbCBjYW52YXMuCi1jbGFzcyBM
YXllclRleHR1cmVVcGRhdGVyQ2FudmFzIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXIgewot
cHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMoUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOwotCi0gICAgdm9pZCBwYWludENvbnRlbnRzKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKLSAgICBjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudFJlY3Q7IH0KLQot
cHJpdmF0ZToKLQotICAgIEludFJlY3QgbV9jb250ZW50UmVjdDsKLSAgICBPd25QdHI8TGF5ZXJQ
YWludGVyQ2hyb21pdW0+IG1fcGFpbnRlcjsKLX07Ci0KLS8vIEEgTGF5ZXJUZXh0dXJlVXBkYXRl
ciB3aXRoIGFuIGludGVybmFsIGJpdG1hcCBjYW52YXMuCi1jbGFzcyBMYXllclRleHR1cmVVcGRh
dGVyQml0bWFwIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMgewotcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA+IGNyZWF0ZShQ
YXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSk7
Ci0KLSAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4gTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6Qm90dG9tVXBPcmllbnRhdGlvbjsgfQotICAgIHZpcnR1YWwgU2FtcGxl
ZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsK
LSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscyk7Ci0gICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFs
bG9jYXRvciosIE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgSW50UmVjdCYgZGVzdFJlY3QpOwotCi1wcml2YXRlOgotICAgIExheWVyVGV4dHVyZVVwZGF0
ZXJCaXRtYXAoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4sIGJvb2wgdXNlTWFwVGV4
U3ViSW1hZ2UpOwotICAgIFBsYXRmb3JtQ2FudmFzIG1fY2FudmFzOwotICAgIExheWVyVGV4dHVy
ZVN1YkltYWdlIG1fdGV4U3ViSW1hZ2U7Ci19OwotCi0jaWYgVVNFKFNLSUEpCi1jbGFzcyBMYXll
clRleHR1cmVVcGRhdGVyU2tQaWN0dXJlIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52
YXMgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXJT
a1BpY3R1cmU+IGNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPik7Ci0gICAg
dmlydHVhbCB+TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZSgpOwotCi0gICAgdmlydHVhbCBP
cmllbnRhdGlvbiBvcmllbnRhdGlvbigpIHsgcmV0dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRv
cERvd25PcmllbnRhdGlvbjsgfQotICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBs
ZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKLSAgICB2aXJ0dWFsIHZvaWQg
cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXpl
JiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscyk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRl
eHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIE1hbmFnZWRU
ZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJl
Y3QpOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1
cmUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOwotICAKLSAgICBTa1BpY3R1cmUg
bV9waWN0dXJlOyAvLyBSZWNvcmRpbmcgY2FudmFzLgotfTsKLSNlbmRpZiAvLyBVU0UoU0tJQSkK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLSNlbmRpZiAvLyBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZGNmZDYzZTcxOTM0MmFlNzUwYmRmZWFhOGNhYjMyZjFjZmZjODJjMgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Nr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCkBAIC0wLDAgKzEsNjggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKyNpZiBVU0UoU0tJQSkKKworI2luY2x1ZGUgIlNrUGljdHVyZUNhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXIuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IkxheWVyUGFpbnRlckNocm9taXVtLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5o
IgorI2luY2x1ZGUgIlNrQ2FudmFzLmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlNr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoUGFzc093blB0cjxMYXllclBhaW50ZXJD
aHJvbWl1bT4gcGFpbnRlcikKKyAgICA6IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIocGFpbnRl
cikKK3sKK30KKworU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6flNrUGljdHVy
ZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoKQoreworfQorCit2b2lkIFNrUGljdHVyZUNhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250
ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgLyogdGlsZVNpemUgKi8sIGludCAvKiBib3JkZXJUZXhl
bHMgKi8pCit7CisgICAgU2tDYW52YXMqIGNhbnZhcyA9IG1fcGljdHVyZS5iZWdpblJlY29yZGlu
Zyhjb250ZW50UmVjdC53aWR0aCgpLCBjb250ZW50UmVjdC5oZWlnaHQoKSk7CisgICAgUGxhdGZv
cm1Db250ZXh0U2tpYSBwbGF0Zm9ybUNvbnRleHQoY2FudmFzKTsKKyAgICBHcmFwaGljc0NvbnRl
eHQgZ3JhcGhpY3NDb250ZXh0KCZwbGF0Zm9ybUNvbnRleHQpOworICAgIHBhaW50Q29udGVudHMo
Z3JhcGhpY3NDb250ZXh0LCBjb250ZW50UmVjdCk7CisgICAgbV9waWN0dXJlLmVuZFJlY29yZGlu
ZygpOworfQorCit2b2lkIFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmRyYXdQ
aWN0dXJlKFNrQ2FudmFzKiBjYW52YXMpCit7CisgICAgVFJBQ0VfRVZFTlQoIlNrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmRyYXdQaWN0dXJlIiwgdGhpcywgMCk7CisgICAgY2Fu
dmFzLT5kcmF3UGljdHVyZShtX3BpY3R1cmUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisjZW5kaWYgLy8gVVNFKFNLSUEpCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjg5MWE2ZDNjOWYxMjIwMWNhNGIxODE3NDBiZjBmYmE0N2UwMWRi
NTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTAsMCArMSw1
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKworI2lmbmRlZiBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
X2gKKyNkZWZpbmUgU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcl9oCisKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaWYgVVNFKFNLSUEpCisKKyNpbmNsdWRlICJD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCisjaW5jbHVkZSAiU2tQaWN0dXJlLmgiCisKK2Ns
YXNzIFNrQ2FudmFzOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExheWVyUGFpbnRl
ckNocm9taXVtOworCitjbGFzcyBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyIDog
cHVibGljIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwg
flNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoKTsKKworcHJvdGVjdGVkOgorICAg
IGV4cGxpY2l0IFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoUGFzc093blB0cjxM
YXllclBhaW50ZXJDaHJvbWl1bT4pOworCisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0
ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGlu
dCBib3JkZXJUZXhlbHMpOworICAgIHZvaWQgZHJhd1BpY3R1cmUoU2tDYW52YXMqKTsKKworcHJp
dmF0ZToKKyAgICBTa1BpY3R1cmUgbV9waWN0dXJlOyAvLyBSZWNvcmRpbmcgY2FudmFzLgorfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShTS0lBKQorI2VuZGlmIC8v
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNlbmRpZiAvLyBTa1BpY3R1cmVDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCmluZGV4
IGZjYzQ2ZDk5M2Q1NDBhNDIxOWQ3ZjI3MDEwMDE4NzM4ZWY3YjhmZmUuLmJkMWYzNjY3NzE3M2Qy
ZGM5ZWQ0ZDc5YjAzNmRiN2I3ODRhNjIxMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmNwcApAQCAtNTEsMTcgKzUxLDIwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFVwZGF0
YWJsZVRpbGUgOiBwdWJsaWMgQ0NMYXllclRpbGluZ0RhdGE6OlRpbGUgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFVwZGF0YWJsZVRpbGUpOwogcHVibGljOgotICAgIGV4cGxpY2l0IFVwZGF0
YWJsZVRpbGUoUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4KSA6IG1fdGV4KHRleCkgeyB9
CisgICAgZXhwbGljaXQgVXBkYXRhYmxlVGlsZShQYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0
ZXI6OlRleHR1cmU+IHRleHR1cmUpIDogbV90ZXh0dXJlKHRleHR1cmUpIHsgfQogCi0gICAgTWFu
YWdlZFRleHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleC5nZXQoKTsgfQorICAgIExheWVy
VGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleHR1cmUuZ2V0
KCk7IH0KKyAgICBNYW5hZ2VkVGV4dHVyZSogbWFuYWdlZFRleHR1cmUoKSB7IHJldHVybiBtX3Rl
eHR1cmUtPnRleHR1cmUoKTsgfQogCiAgICAgYm9vbCBkaXJ0eSgpIGNvbnN0IHsgcmV0dXJuICFt
X2RpcnR5TGF5ZXJSZWN0LmlzRW1wdHkoKTsgfQogICAgIHZvaWQgY2xlYXJEaXJ0eSgpIHsgbV9k
aXJ0eUxheWVyUmVjdCA9IEludFJlY3QoKTsgfQogCiAgICAgLy8gTGF5ZXItc3BhY2UgZGlydHkg
cmVjdGFuZ2xlIHRoYXQgbmVlZHMgdG8gYmUgcmVwYWludGVkLgogICAgIEludFJlY3QgbV9kaXJ0
eUxheWVyUmVjdDsKKyAgICAvLyBDb250ZW50LXNwYWNlIHJlY3RhbmdsZSB0aGF0IG5lZWRzIHRv
IGJlIHVwZGF0ZWQuCisgICAgSW50UmVjdCBtX3VwZGF0ZVJlY3Q7CiBwcml2YXRlOgotICAgIE93
blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV90ZXg7CisgICAgUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0
ZXI6OlRleHR1cmU+IG1fdGV4dHVyZTsKIH07CiAKIFRpbGVkTGF5ZXJDaHJvbWl1bTo6VGlsZWRM
YXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUpCkBAIC0xNjcsMTcgKzE3MCwx
MiBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgQwogICAgICAgICAgICAgZWxzZSBpZiAoIXRpbGUt
PmRpcnR5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIC8vIENh
bGN1bGF0ZSBwYWdlLXNwYWNlIHJlY3RhbmdsZSB0byBjb3B5IGZyb20uCi0gICAgICAgICAgICBJ
bnRSZWN0IHNvdXJjZVJlY3QgPSBtX3RpbGVyLT50aWxlQ29udGVudFJlY3QodGlsZSk7Ci0gICAg
ICAgICAgICBjb25zdCBJbnRQb2ludCBhbmNob3IgPSBzb3VyY2VSZWN0LmxvY2F0aW9uKCk7Ci0g
ICAgICAgICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChtX3RpbGVyLT5sYXllclJlY3RUb0NvbnRl
bnRSZWN0KHRpbGUtPm1fZGlydHlMYXllclJlY3QpKTsKLSAgICAgICAgICAgIC8vIFBhaW50IHJl
Y3Qgbm90IGd1YXJhbnRlZWQgdG8gbGluZSB1cCBvbiB0aWxlIGJvdW5kYXJpZXMsIHNvCi0gICAg
ICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCBzb3VyY2VSZWN0IGRvZXNuJ3QgZXh0ZW5kIG91dHNp
ZGUgb2YgaXQuCi0gICAgICAgICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChtX3BhaW50UmVjdCk7
Ci0gICAgICAgICAgICBpZiAoc291cmNlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBJbnRS
ZWN0IHNvdXJjZVJlY3QgPSB0aWxlLT5tX3VwZGF0ZVJlY3Q7CisgICAgICAgICAgICBpZiAodGls
ZS0+bV91cGRhdGVSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICAgICAgQVNTRVJUKHRpbGUtPnRleHR1cmUoKS0+aXNSZXNlcnZlZCgpKTsKKyAgICAg
ICAgICAgIEFTU0VSVCh0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5pc1Jlc2VydmVkKCkpOworICAg
ICAgICAgICAgY29uc3QgSW50UG9pbnQgYW5jaG9yID0gbV90aWxlci0+dGlsZUNvbnRlbnRSZWN0
KHRpbGUpLmxvY2F0aW9uKCk7CiAKICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aWxlLXNwYWNl
IHJlY3RhbmdsZSB0byB1cGxvYWQgaW50by4KICAgICAgICAgICAgIEludFJlY3QgZGVzdFJlY3Qo
SW50UG9pbnQoc291cmNlUmVjdC54KCkgLSBhbmNob3IueCgpLCBzb3VyY2VSZWN0LnkoKSAtIGFu
Y2hvci55KCkpLCBzb3VyY2VSZWN0LnNpemUoKSk7CkBAIC0xOTcsMTIgKzE5NSwxMiBAQCB2b2lk
IFRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCwgQwogICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LnkoKSArIGRl
c3RSZWN0LmhlaWdodCgpID4gbV9wYWludFJlY3QuaGVpZ2h0KCkpCiAgICAgICAgICAgICAgICAg
Q1JBU0goKTsKIAotICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5iaW5kVGV4dHVyZShjb250
ZXh0LCB1cGRhdGVyLmFsbG9jYXRvcigpKTsKKyAgICAgICAgICAgIHRpbGUtPm1hbmFnZWRUZXh0
dXJlKCktPmJpbmRUZXh0dXJlKGNvbnRleHQsIHVwZGF0ZXIuYWxsb2NhdG9yKCkpOwogICAgICAg
ICAgICAgY29uc3QgR0MzRGludCBmaWx0ZXIgPSBtX3RpbGVyLT5oYXNCb3JkZXJUZXhlbHMoKSA/
IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIgOiBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVDsK
ICAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklM
VEVSLCBmaWx0ZXIpKTsKICAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJh
bWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9NQUdfRklMVEVSLCBmaWx0ZXIpKTsKIAotICAgICAgICAgICAgdXBkYXRlci5hcHBl
bmQodGlsZS0+dGV4dHVyZSgpLCB0ZXh0dXJlVXBkYXRlcigpLCBzb3VyY2VSZWN0LCBkZXN0UmVj
dCk7CisgICAgICAgICAgICB1cGRhdGVyLmFwcGVuZCh0aWxlLT50ZXh0dXJlKCksIHNvdXJjZVJl
Y3QsIGRlc3RSZWN0KTsKICAgICAgICAgICAgIHRpbGUtPmNsZWFyRGlydHkoKTsKICAgICAgICAg
fQogICAgIH0KQEAgLTI0MCwxMCArMjM4LDEwIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpw
dXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICAgICAgaW50IGkgPSBpdGVy
LT5maXJzdC5maXJzdDsKICAgICAgICAgaW50IGogPSBpdGVyLT5maXJzdC5zZWNvbmQ7CiAgICAg
ICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRl
ci0+c2Vjb25kLmdldCgpKTsKLSAgICAgICAgaWYgKCF0aWxlLT50ZXh0dXJlKCktPmlzVmFsaWQo
bV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkKKyAgICAgICAgaWYgKCF0aWxl
LT5tYW5hZ2VkVGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVy
ZUZvcm1hdCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICB0aWxlZExheWVyLT5z
eW5jVGV4dHVyZUlkKGksIGosIHRpbGUtPnRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOworICAgICAg
ICB0aWxlZExheWVyLT5zeW5jVGV4dHVyZUlkKGksIGosIHRpbGUtPm1hbmFnZWRUZXh0dXJlKCkt
PnRleHR1cmVJZCgpKTsKICAgICB9CiB9CiAKQEAgLTI2MSw3ICsyNTksNyBAQCBVcGRhdGFibGVU
aWxlKiBUaWxlZExheWVyQ2hyb21pdW06OnRpbGVBdChpbnQgaSwgaW50IGopIGNvbnN0CiAKIFVw
ZGF0YWJsZVRpbGUqIFRpbGVkTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGlsZShpbnQgaSwgaW50IGop
CiB7Ci0gICAgUmVmUHRyPFVwZGF0YWJsZVRpbGU+IHRpbGUgPSBhZG9wdFJlZihuZXcgVXBkYXRh
YmxlVGlsZShNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKHRleHR1cmVNYW5hZ2VyKCkpKSk7CisgICAg
UmVmUHRyPFVwZGF0YWJsZVRpbGU+IHRpbGUgPSBhZG9wdFJlZihuZXcgVXBkYXRhYmxlVGlsZSh0
ZXh0dXJlVXBkYXRlcigpLT5jcmVhdGVUZXh0dXJlKHRleHR1cmVNYW5hZ2VyKCkpKSk7CiAgICAg
bV90aWxlci0+YWRkVGlsZSh0aWxlLCBpLCBqKTsKICAgICB0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0
ID0gbV90aWxlci0+dGlsZUxheWVyUmVjdCh0aWxlLmdldCgpKTsKIApAQCAtMzA5LDEwICszMDcs
MTAgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByb3RlY3RUaWxlVGV4dHVyZXMoY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207
ICsraikgewogICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CiAg
ICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOwotICAgICAgICAg
ICAgaWYgKCF0aWxlIHx8ICF0aWxlLT50ZXh0dXJlKCktPmlzVmFsaWQobV90aWxlci0+dGlsZVNp
emUoKSwgbV90ZXh0dXJlRm9ybWF0KSkKKyAgICAgICAgICAgIGlmICghdGlsZSB8fCAhdGlsZS0+
bWFuYWdlZFRleHR1cmUoKS0+aXNWYWxpZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVG
b3JtYXQpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICB0aWxlLT50
ZXh0dXJlKCktPnJlc2VydmUobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KTsK
KyAgICAgICAgICAgIHRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPnJlc2VydmUobV90aWxlci0+dGls
ZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTM0Niwx
MCArMzQ0LDEwIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgICAgICAgICBpZiAoIXRpbGUpCiAgICAgICAg
ICAgICAgICAgdGlsZSA9IGNyZWF0ZVRpbGUoaSwgaik7CiAKLSAgICAgICAgICAgIGlmICghdGls
ZS0+dGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1h
dCkpCisgICAgICAgICAgICBpZiAoIXRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPmlzVmFsaWQobV90
aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkKICAgICAgICAgICAgICAgICB0aWxl
LT5tX2RpcnR5TGF5ZXJSZWN0ID0gbV90aWxlci0+dGlsZUxheWVyUmVjdCh0aWxlKTsKIAotICAg
ICAgICAgICAgaWYgKCF0aWxlLT50ZXh0dXJlKCktPnJlc2VydmUobV90aWxlci0+dGlsZVNpemUo
KSwgbV90ZXh0dXJlRm9ybWF0KSkgeworICAgICAgICAgICAgaWYgKCF0aWxlLT5tYW5hZ2VkVGV4
dHVyZSgpLT5yZXNlcnZlKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkpIHsK
ICAgICAgICAgICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7CiAgICAgICAgICAgICAgICAgY2xl
YW51cFJlc291cmNlcygpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTM3NCw2ICszNzIs
MzEgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCkKICAgICAvLyBzbyB3ZSBncmFiIGEgbG9jYWwgcmVmZXJlbmNlIGhl
cmUgdG8gaG9sZCB0aGUgdXBkYXRlciBhbGl2ZSB1bnRpbCB0aGUgcGFpbnQgY29tcGxldGVzLgog
ICAgIFJlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBwcm90ZWN0b3IodGV4dHVyZVVwZGF0ZXIo
KSk7CiAgICAgdGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVRvVXBkYXRlKG1fcGFpbnRSZWN0LCBt
X3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RpbGVyLT5oYXNCb3JkZXJUZXhlbHMoKSk7CisKKyAgICBt
X3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMobV9yZXF1ZXN0ZWRVcGRhdGVSZWN0LCBs
ZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90
dG9tOyArK2opIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkg
eworICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKKyAgICAg
ICAgICAgIGlmICghdGlsZSkKKyAgICAgICAgICAgICAgICB0aWxlID0gY3JlYXRlVGlsZShpLCBq
KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCF0aWxlLT5kaXJ0eSgpKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgY29udGVudC1zcGFjZSByZWN0
YW5nbGUgdG8gY29weSBmcm9tLgorICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gbV90
aWxlci0+dGlsZUNvbnRlbnRSZWN0KHRpbGUpOworICAgICAgICAgICAgY29uc3QgSW50UG9pbnQg
YW5jaG9yID0gc291cmNlUmVjdC5sb2NhdGlvbigpOworICAgICAgICAgICAgc291cmNlUmVjdC5p
bnRlcnNlY3QobV90aWxlci0+bGF5ZXJSZWN0VG9Db250ZW50UmVjdCh0aWxlLT5tX2RpcnR5TGF5
ZXJSZWN0KSk7CisgICAgICAgICAgICAvLyBQYWludCByZWN0IG5vdCBndWFyYW50ZWVkIHRvIGxp
bmUgdXAgb24gdGlsZSBib3VuZGFyaWVzLCBzbworICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRo
YXQgc291cmNlUmVjdCBkb2Vzbid0IGV4dGVuZCBvdXRzaWRlIG9mIGl0LgorICAgICAgICAgICAg
c291cmNlUmVjdC5pbnRlcnNlY3QobV9wYWludFJlY3QpOworCisgICAgICAgICAgICB0aWxlLT5t
X3VwZGF0ZVJlY3QgPSBzb3VyY2VSZWN0OworICAgICAgICAgICAgaWYgKHNvdXJjZVJlY3QuaXNF
bXB0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICB0aWxlLT50
ZXh0dXJlKCktPnByZXBhcmVSZWN0KHNvdXJjZVJlY3QpOworICAgICAgICB9CisgICAgfQogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwCmluZGV4IDk4NDM3MGVkYTk1YzUy
M2Y1OWVlNTVjODdhYzgyODcxZTAyYTczYmIuLjg3NDVjNGVhMGE3MTBiZGUxOGVkZTE4MjBmMzE0
ZmRiOGNjODcyYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwCkBAIC00OCwx
NCArNDgsMTIgQEAgQ0NUZXh0dXJlVXBkYXRlcjo6fkNDVGV4dHVyZVVwZGF0ZXIoKQogewogfQog
Ci12b2lkIENDVGV4dHVyZVVwZGF0ZXI6OmFwcGVuZChNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSwg
TGF5ZXJUZXh0dXJlVXBkYXRlciogdXBkYXRlciwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit2b2lkIENDVGV4dHVyZVVwZGF0ZXI6OmFwcGVuZChM
YXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKIHsKICAgICBBU1NFUlQodGV4dHVyZSk7
Ci0gICAgQVNTRVJUKHVwZGF0ZXIpOwogCiAgICAgVXBkYXRlRW50cnkgZW50cnk7CiAgICAgZW50
cnkubV90ZXh0dXJlID0gdGV4dHVyZTsKLSAgICBlbnRyeS5tX3VwZGF0ZXIgPSB1cGRhdGVyOwog
ICAgIGVudHJ5Lm1fc291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7CiAgICAgZW50cnkubV9kZXN0UmVj
dCA9IGRlc3RSZWN0OwogICAgIG1fZW50cmllcy5hcHBlbmQoZW50cnkpOwpAQCAtNzEsNyArNjks
NyBAQCBib29sIENDVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZShHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCwgc2l6ZV90IGNvdW50KQogICAgIHNpemVfdCBtYXhJbmRleCA9IG1pbihtX2VudHJ5SW5k
ZXggKyBjb3VudCwgbV9lbnRyaWVzLnNpemUoKSk7CiAgICAgZm9yICg7IG1fZW50cnlJbmRleCA8
IG1heEluZGV4OyArK21fZW50cnlJbmRleCkgewogICAgICAgICBVcGRhdGVFbnRyeSYgZW50cnkg
PSBtX2VudHJpZXNbbV9lbnRyeUluZGV4XTsKLSAgICAgICAgZW50cnkubV91cGRhdGVyLT51cGRh
dGVUZXh0dXJlUmVjdChjb250ZXh0LCBtX2FsbG9jYXRvciwgZW50cnkubV90ZXh0dXJlLCBlbnRy
eS5tX3NvdXJjZVJlY3QsIGVudHJ5Lm1fZGVzdFJlY3QpOworICAgICAgICBlbnRyeS5tX3RleHR1
cmUtPnVwZGF0ZVJlY3QoY29udGV4dCwgbV9hbGxvY2F0b3IsIGVudHJ5Lm1fc291cmNlUmVjdCwg
ZW50cnkubV9kZXN0UmVjdCk7CiAgICAgfQogCiAgICAgaWYgKG1heEluZGV4IDwgbV9lbnRyaWVz
LnNpemUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaAppbmRleCAxN2I4YWFmYTA2Y2U3
YTZkMjBhMGU1ZmI0YzkxNGU3MmZjOTM5NGExLi5iZjc5YWM5YzJlMjJlZmM1ZWRhOWE2NDgyOWUy
ZWZjY2VjMTViYjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oCkBAIC0yNywxMyAr
MjcsMTIgQEAKICNkZWZpbmUgQ0NUZXh0dXJlVXBkYXRlcl9oCiAKICNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsK
LWNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXI7Ci1jbGFzcyBNYW5hZ2VkVGV4dHVyZTsKIGNsYXNz
IFRleHR1cmVBbGxvY2F0b3I7CiAKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXIgewpAQCAtNDEsNyAr
NDAsNyBAQCBwdWJsaWM6CiAgICAgQ0NUZXh0dXJlVXBkYXRlcihUZXh0dXJlQWxsb2NhdG9yKik7
CiAgICAgfkNDVGV4dHVyZVVwZGF0ZXIoKTsKIAotICAgIHZvaWQgYXBwZW5kKE1hbmFnZWRUZXh0
dXJlKiwgTGF5ZXJUZXh0dXJlVXBkYXRlciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICB2b2lkIGFwcGVuZChMYXllclRleHR1cmVVcGRh
dGVyOjpUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYg
ZGVzdFJlY3QpOwogCiAgICAgYm9vbCBoYXNNb3JlVXBkYXRlcygpIGNvbnN0OwogCkBAIC01NCw4
ICs1Myw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgVXBkYXRlRW50cnkgewot
ICAgICAgICBNYW5hZ2VkVGV4dHVyZSogbV90ZXh0dXJlOwotICAgICAgICBMYXllclRleHR1cmVV
cGRhdGVyKiBtX3VwZGF0ZXI7CisgICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUq
IG1fdGV4dHVyZTsKICAgICAgICAgSW50UmVjdCBtX3NvdXJjZVJlY3Q7CiAgICAgICAgIEludFJl
Y3QgbV9kZXN0UmVjdDsKICAgICB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114365</attachid>
            <date>2011-11-09 14:08:31 -0800</date>
            <delta_ts>2011-11-09 19:01:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71388-20111109140830.patch</filename>
            <type>text/plain</type>
            <size>68352</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk3NDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxZjY5NmMwZjliMTk3MjQ5
NzU3ZmRjYmQ4NjA0NGFmOGQ2ZjBhMjA1Li41MDRmNzNkMzJiM2RmODk0OTE4M2Y2ZDk5ZjE3NTIw
YjM3NzJlNzZjIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAKKzIwMTEtMTEtMDkgIERhdmlk
IFJldmVtYW4gIDxyZXZlbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEFk
ZCBzdXBwb3J0IGZvciBwYWludGluZyBpbnRvIGFuIFNrUGljdHVyZSBhbmQgdGhlbiByYXN0ZXJp
emluZyBpbnRvIHRpbGUtc2l6ZWQgY2h1bmtzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEzODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgVXBkYXRhYmxlVGV4dHVyZSBjbGFzcywgd2hpY2ggYWxs
b3dzIHRleHR1cmUgdXBkYXRlciB0bworICAgICAgICBhbGxvY2F0ZSB0aWxlIHNwZWNpZmljIHJl
c291cmNlcyBhbmQgcGFpbnQgdGlsZXMgc2VwYXJhdGVseS4KKyAgICAgICAgUmVuYW1lIHRleHR1
cmUgdXBsb2FkZXIgY2xhc3NlcyBhbmQgbW92ZSB0aGVtIHRvIHNlcGFyYXRlIGZpbGVzLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cy4gQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAg
ICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9C
aXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmU6On5UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmU6OnVwZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6fkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpzYW1wbGVkVGV4ZWxG
b3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZVRleHR1cmVSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4
dHVyZVVwZGF0ZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmU6OnRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6Om9yaWVudGF0aW9uKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFz
LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyOjpGcmFtZUJ1ZmZlcjo6RnJhbWVC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVCdWZmZXI6OkZyYW1lQnVmZmVyOjp+RnJh
bWVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVCdWZmZXI6OkZyYW1lQnVmZmVyOjpp
bml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6
On5UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6dXBkYXRlUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI6OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI6On5GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVm
ZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6c2FtcGxlZFRleGVsRm9ybWF0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6dXBkYXRlVGV4dHVyZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclRleHR1cmVVcGRhdGVyLmguCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnRleHR1cmVVcGRhdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6b3JpZW50YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxh
eWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OlRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjp1cGRhdGVSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6dGV4dHVyZVVwZGF0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGVU
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJl
cGFyZVRvVXBkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmU6On5UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4
dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6cHJlcGFyZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oLgorICAgICAgICAoV2Vi
Q29yZTo6U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpTa1BpY3R1cmVDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyOjp+U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcik6
CisgICAgICAgIChXZWJDb3JlOjpTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpw
cmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2tQaWN0dXJlQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6ZHJhd1BpY3R1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJl
VXBkYXRlci5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVcGRhdGFibGVUaWxlOjpVcGRhdGFi
bGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0YWJsZVRpbGU6OnRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6VXBkYXRhYmxlVGlsZTo6bWFuYWdlZFRleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToK
KyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6
CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZVRpbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VGlsZVRleHR1cmVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXI6OmFwcGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaDoKKwogMjAxMS0xMS0w
OSAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBj
cmFzaCB3aGVuIGFjY2Vzc2luZyBzZWxlY3RlZFRhYiBpbiBhIHRhYiBsaXN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggNDgyNmM1YTU4ODRkZGQ5MWE5ZDZiZDQ5YWRjMTEyZTg0NThhNTE1Mi4uYWZmN2Ji
NjhkMTYzNDI0YzE5OThlN2RlZDBlY2ZjYzgyMGQ1NDdkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAt
MzQ1MiwxMCArMzQ1MiwxNCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL1Bh
dGhDRy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL1RyYW5zZm9ybWF0aW9uTWF0
cml4Q0cuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRt
YXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21p
dW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMy
RExheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcGxl
eFRleHRDb250cm9sbGVyTGludXguY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAnLApAQCAt
MzQ3Niw2ICszNDgwLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250UmVuZGVyU3R5bGUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5oJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5kaW5nLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5k
aW5nLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFn
ZVRyZWVOb2RlQ2hyb21pdW1XaW4uY3BwJywKQEAgLTM0OTksOCArMzUwNSw2IEBACiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVT
dWJJbWFnZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVVcGRhdGVyLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL05vbkNvbXBvc2l0ZWRDb250ZW50SG9z
dC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL05vbkNvbXBv
c2l0ZWRDb250ZW50SG9zdC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9NZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oJywKQEAgLTM1MjIsNiArMzUyNiw4IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0u
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERh
dGFDaHJvbWl1bVdpbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1NpbXBsZUZvbnREYXRhTGludXguY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1h
cENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMDcxZGU2NDg0MzhhZDMyYzBjNGU2ZWM4OWMzOGY2NWFhODEzNTQ5NQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Jp
dG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisKKyNpbmNsdWRlICJCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCisKKyNp
bmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29sb3Iu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjpUZXh0dXJlOjpUZXh0dXJlKEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIHRl
eHR1cmVVcGRhdGVyLCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiB0ZXh0dXJlKQorICAgIDog
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSh0ZXh0dXJlKQorICAgICwgbV90ZXh0dXJlVXBk
YXRlcih0ZXh0dXJlVXBkYXRlcikKK3sKK30KKworQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZTo6flRleHR1cmUoKQoreworfQorCit2b2lkIEJpdG1hcENhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit7CisgICAgdGV4dHVyZVVwZGF0ZXIoKS0+
dXBkYXRlVGV4dHVyZVJlY3QoY29udGV4dCwgYWxsb2NhdG9yLCB0ZXh0dXJlKCksIHNvdXJjZVJl
Y3QsIGRlc3RSZWN0KTsKK30KKworUGFzc1JlZlB0cjxCaXRtYXBDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyPiBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUoUGFzc093blB0
cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlciwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIocGFpbnRlciwgdXNlTWFwVGV4U3ViSW1hZ2UpKTsKK30KKworQml0bWFwQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3duUHRy
PExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyLCBib29sIHVzZU1hcFRleFN1YkltYWdlKQor
ICAgIDogQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihwYWludGVyKQorICAgICwgbV90ZXhTdWJJ
bWFnZSh1c2VNYXBUZXhTdWJJbWFnZSkKK3sKK30KKworQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6fkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoKQoreworfQorCitQYXNz
UmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IEJpdG1hcENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI6OmNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlKHRoaXMsIE1hbmFnZWRUZXh0dXJlOjpjcmVh
dGUobWFuYWdlcikpKTsKK30KKworTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9y
bWF0IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnNhbXBsZWRUZXhlbEZvcm1hdChH
QzNEZW51bSB0ZXh0dXJlRm9ybWF0KQoreworICAgIC8vIFRoZSBjb21wb25lbnQgb3JkZXIgbWF5
IGJlIGJncmEgaWYgd2UgdXBsb2FkZWQgYmdyYSBwaXhlbHMgdG8gcmdiYSB0ZXh0dXJlcy4KKyAg
ICByZXR1cm4gUGxhdGZvcm1Db2xvcjo6c2FtZUNvbXBvbmVudE9yZGVyKHRleHR1cmVGb3JtYXQp
ID8KKyAgICAgICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdFJH
QkEgOiBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRCR1JBOworfQorCit2
b2lkIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZShjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3Jk
ZXJUZXhlbHMpCit7CisgICAgbV90ZXhTdWJJbWFnZS5zZXRTdWJJbWFnZVNpemUodGlsZVNpemUp
OworCisgICAgbV9jYW52YXMucmVzaXplKGNvbnRlbnRSZWN0LnNpemUoKSk7CisgICAgLy8gQXNz
dW1wdGlvbjogaWYgYSB0aWxlciBpcyB1c2luZyBib3JkZXIgdGV4ZWxzLCB0aGVuIGl0IGlzIGJl
Y2F1c2UgdGhlCisgICAgLy8gbGF5ZXIgaXMgbGlrZWx5IHRvIGJlIGZpbHRlcmVkIG9yIHRyYW5z
Zm9ybWVkLiBCZWNhdXNlIG9mIGl0IG1pZ2h0IGJlCisgICAgLy8gdHJhbnNmb3JtZWQsIGRyYXcg
dGhlIHRleHQgaW4gZ3JheXNjYWxlIGluc3RlYWQgb2Ygc3VicGl4ZWwgYW50aWFsaWFzaW5nLgor
ICAgIFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpUZXh0T3B0aW9uIHRleHRPcHRpb24gPQorICAg
ICAgICBib3JkZXJUZXhlbHMgPyBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6R3JheXNjYWxlVGV4
dCA6IFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpTdWJwaXhlbFRleHQ7CisgICAgUGxhdGZvcm1D
YW52YXM6OlBhaW50ZXIgY2FudmFzUGFpbnRlcigmbV9jYW52YXMsIHRleHRPcHRpb24pOworICAg
IHBhaW50Q29udGVudHMoKmNhbnZhc1BhaW50ZXIuY29udGV4dCgpLCBjb250ZW50UmVjdCk7Cit9
CisKK3ZvaWQgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBkYXRlVGV4dHVyZVJl
Y3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRv
ciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFJlY3QmIGRlc3RSZWN0KQoreworICAgIFBsYXRmb3JtQ2FudmFzOjpBdXRvTG9ja2Vy
IGxvY2tlcigmbV9jYW52YXMpOworCisgICAgdGV4dHVyZS0+YmluZFRleHR1cmUoY29udGV4dCwg
YWxsb2NhdG9yKTsKKyAgICBtX3RleFN1YkltYWdlLnVwbG9hZChsb2NrZXIucGl4ZWxzKCksIGNv
bnRlbnRSZWN0KCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0LCB0ZXh0dXJlLT5mb3JtYXQoKSwgY29u
dGV4dCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjc1ZGRkZDViNDliMjFjMGY3NWI4ZmE0MjI4OWNj
MmYxMGU1NGE0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAtMCww
ICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXJfaAorI2RlZmluZSBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyX2gKKworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJMYXllclRleHR1cmVTdWJJbWFnZS5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtQ2FudmFzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGF5ZXJQ
YWludGVyQ2hyb21pdW07CisKKy8vIEEgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciB3aXRoIGFu
IGludGVybmFsIGJpdG1hcC4KK2NsYXNzIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIg
OiBwdWJsaWMgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciB7CitwdWJsaWM6CisgICAgY2xhc3Mg
VGV4dHVyZSA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFRleHR1cmUoQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciosIFBh
c3NPd25QdHI8TWFuYWdlZFRleHR1cmU+KTsKKyAgICAgICAgdmlydHVhbCB+VGV4dHVyZSgpOwor
CisgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4
dHVyZUFsbG9jYXRvciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3Qm
IGRlc3RSZWN0KTsKKworICAgIHByaXZhdGU6CisgICAgICAgIEJpdG1hcENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgeyByZXR1cm4gbV90ZXh0dXJlVXBkYXRlcjsg
fQorCisgICAgICAgIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIG1fdGV4dHVyZVVw
ZGF0ZXI7CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJpdG1hcENhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXI+IGNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiwg
Ym9vbCB1c2VNYXBUZXhTdWJJbWFnZSk7CisgICAgdmlydHVhbCB+Qml0bWFwQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcigpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPExheWVyVGV4dHVyZVVw
ZGF0ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKTsKKyAgICB2aXJ0
dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6Qm90dG9tVXBPcmllbnRhdGlvbjsgfQorICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0
IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKKyAgICB2aXJ0dWFs
IHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJ
bnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscyk7CisgICAgdm9pZCB1cGRhdGVUZXh0
dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBNYW5hZ2VkVGV4
dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0
KTsKKworcHJpdmF0ZToKKyAgICBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBhc3NP
d25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+LCBib29sIHVzZU1hcFRleFN1YkltYWdlKTsKKwor
ICAgIFBsYXRmb3JtQ2FudmFzIG1fY2FudmFzOworICAgIExheWVyVGV4dHVyZVN1YkltYWdlIG1f
dGV4U3ViSW1hZ2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2VuZGlmIC8vIEJpdG1hcENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hM2U4ZjdiN2JmM2Q2MDA4ZGViMGM2MzhhYTM3MTE1Zjk3YTJhNmJhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorCisjaW5jbHVkZSAiQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKKyNp
bmNsdWRlICJUcmFjZUV2ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3duUHRyPExh
eWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyKQorICAgIDogbV9wYWludGVyKHBhaW50ZXIpCit7
Cit9CisKK0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6On5DYW52YXNMYXllclRleHR1cmVVcGRh
dGVyKCkKK3sKK30KKwordm9pZCBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwYWludENvbnRl
bnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qp
Cit7CisgICAgY29udGV4dC50cmFuc2xhdGUoLWNvbnRlbnRSZWN0LngoKSwgLWNvbnRlbnRSZWN0
LnkoKSk7CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6cGFpbnQiLCB0aGlzLCAwKTsKKyAgICAgICAgbV9wYWludGVyLT5wYWludChjb250ZXh0
LCBjb250ZW50UmVjdCk7CisgICAgfQorICAgIG1fY29udGVudFJlY3QgPSBjb250ZW50UmVjdDsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mZDc5YTA0ZDBhMzZkNzk2YTRlN2YzMzQzMzE3MmE4MjA0YmMxNDllCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5k
ZWYgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcl9oCisjZGVmaW5lIENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXJfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVk
ZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgTGF5ZXJQYWludGVyQ2hyb21pdW07CisKKy8vIEEg
TGF5ZXJUZXh0dXJlVXBkYXRlciB3aXRoIGFuIGludGVybmFsIGNhbnZhcy4KK2NsYXNzIENhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlciB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB+Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcigpOworCitwcm90ZWN0
ZWQ6CisgICAgZXhwbGljaXQgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3duUHRyPExh
eWVyUGFpbnRlckNocm9taXVtPik7CisKKyAgICB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworICAgIGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50UmVjdDsgfQorCitwcml2YXRl
OgorICAgIEludFJlY3QgbV9jb250ZW50UmVjdDsKKyAgICBPd25QdHI8TGF5ZXJQYWludGVyQ2hy
b21pdW0+IG1fcGFpbnRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAv
LyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjZW5kaWYgLy8gQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggY2E4
YjNiZDc2MWYwODE1ZTQ3YjZjZmIwNDkxYTFkOTcyODc5ZjA0Yy4uZGIwYWU0Njk5ZTc4OTY5MmY1
MWM0MGI4Y2RlNzY0ODRmZDFjNGFhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmNwcApAQCAtMzQsOSArMzQsMTAgQEAKIAogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVt
LmgiCiAKKyNpbmNsdWRlICJCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCisjaW5j
bHVkZSAiRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCiAj
aW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVy
Q2hyb21pdW0uaCIKLSNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Lmgi
CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkBAIC0xMjIsMTIgKzEyMywxMiBAQCB2b2lk
IENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVy
VHJlZUhvc3QqIGhvc3QpCiB7CiAjaWYgVVNFKFNLSUEpCiAgICAgaWYgKGhvc3QtPnNldHRpbmdz
KCkuYWNjZWxlcmF0ZVBhaW50aW5nKSB7Ci0gICAgICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBMYXll
clRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpjcmVhdGUoQ29udGVudExheWVyUGFpbnRlcjo6Y3Jl
YXRlKG1fZGVsZWdhdGUpKTsKKyAgICAgICAgbV90ZXh0dXJlVXBkYXRlciA9IEZyYW1lQnVmZmVy
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKENvbnRlbnRMYXllclBh
aW50ZXI6OmNyZWF0ZShtX2RlbGVnYXRlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5k
aWYgLy8gVVNFKFNLSUEpCiAKLSAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBk
YXRlckJpdG1hcDo6Y3JlYXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX2RlbGVnYXRl
KSwgaG9zdC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nTWFwU3ViKTsKKyAgICBt
X3RleHR1cmVVcGRhdGVyID0gQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRl
KENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX2RlbGVnYXRlKSwgaG9zdC0+bGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcygpLnVzaW5nTWFwU3ViKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1
cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTk0NWUwNjQ5Y2MwZGMyNmI2MjVmYjNlNGY1N2FmZTk4
MGQ3YjZlOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
ci5jcHAKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoU0tJQSkKKworI2luY2x1
ZGUgIkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorCisj
aW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJTa0NhbnZhcy5oIgor
I2luY2x1ZGUgIlNrR3B1RGV2aWNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNw
YWNlIHsKKworY2xhc3MgRnJhbWVCdWZmZXIgeworcHVibGljOgorICAgIEZyYW1lQnVmZmVyKCk7
CisgICAgfkZyYW1lQnVmZmVyKCk7CisKKyAgICBTa0NhbnZhcyogaW5pdGlhbGl6ZShHcmFwaGlj
c0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBNYW5hZ2VkVGV4dHVyZSopOworCitwcml2
YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CisgICAgUGxhdGZvcm0zRE9i
amVjdCBtX2ZibzsKKyAgICBPd25QdHI8U2tDYW52YXM+IG1fY2FudmFzOworfTsKKworRnJhbWVC
dWZmZXI6OkZyYW1lQnVmZmVyKCkKKyAgICA6IG1fY29udGV4dCgwKQorICAgICwgbV9mYm8oMCkK
K3sKK30KKworRnJhbWVCdWZmZXI6On5GcmFtZUJ1ZmZlcigpCit7CisgICAgbV9jYW52YXMuY2xl
YXIoKTsKKworICAgIGlmIChtX2ZibykKKyAgICAgICAgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1
ZmZlcihtX2Zibyk7Cit9CisKK1NrQ2FudmFzKiBGcmFtZUJ1ZmZlcjo6aW5pdGlhbGl6ZShHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBNYW5h
Z2VkVGV4dHVyZSogdGV4dHVyZSkKK3sKKyAgICBtX2NvbnRleHQgPSBjb250ZXh0OworICAgIG1f
ZmJvID0gbV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIG1fY29udGV4dC0+Ymlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAg
IHRleHR1cmUtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKG1fY29udGV4dCwgYWxsb2NhdG9yKTsKKwor
ICAgIC8vIENyZWF0ZSBhIHNraWEgZ3B1IGNhbnZhcy4KKyAgICBHckNvbnRleHQqIGdyQ29udGV4
dCA9IG1fY29udGV4dC0+Z3JDb250ZXh0KCk7CisgICAgSW50U2l6ZSBjYW52YXNTaXplID0gdGV4
dHVyZS0+c2l6ZSgpOworICAgIEdyUGxhdGZvcm1TdXJmYWNlRGVzYyB0YXJnZXREZXNjOworICAg
IHRhcmdldERlc2MucmVzZXQoKTsKKyAgICB0YXJnZXREZXNjLmZTdXJmYWNlVHlwZSA9IGtUZXh0
dXJlUmVuZGVyVGFyZ2V0X0dyUGxhdGZvcm1TdXJmYWNlVHlwZTsKKyAgICB0YXJnZXREZXNjLmZS
ZW5kZXJUYXJnZXRGbGFncyA9IGtOb25lX0dyUGxhdGZvcm1SZW5kZXJUYXJnZXRGbGFnQml0Owor
ICAgIHRhcmdldERlc2MuZldpZHRoID0gY2FudmFzU2l6ZS53aWR0aCgpOworICAgIHRhcmdldERl
c2MuZkhlaWdodCA9IGNhbnZhc1NpemUuaGVpZ2h0KCk7CisgICAgdGFyZ2V0RGVzYy5mQ29uZmln
ID0ga1JHQkFfODg4OF9HclBpeGVsQ29uZmlnOworICAgIHRhcmdldERlc2MuZlN0ZW5jaWxCaXRz
ID0gODsKKyAgICB0YXJnZXREZXNjLmZQbGF0Zm9ybVRleHR1cmUgPSB0ZXh0dXJlLT50ZXh0dXJl
SWQoKTsKKyAgICB0YXJnZXREZXNjLmZQbGF0Zm9ybVJlbmRlclRhcmdldCA9IG1fZmJvOworICAg
IFNrQXV0b1RVbnJlZjxHclRleHR1cmU+IHRhcmdldChzdGF0aWNfY2FzdDxHclRleHR1cmUqPihn
ckNvbnRleHQtPmNyZWF0ZVBsYXRmb3JtU3VyZmFjZSh0YXJnZXREZXNjKSkpOworICAgIFNrQXV0
b1RVbnJlZjxTa0RldmljZT4gZGV2aWNlKG5ldyBTa0dwdURldmljZShnckNvbnRleHQsIHRhcmdl
dC5nZXQoKSkpOworICAgIG1fY2FudmFzID0gYWRvcHRQdHIobmV3IFNrQ2FudmFzKGRldmljZS5n
ZXQoKSkpOworCisgICAgcmV0dXJuIG1fY2FudmFzLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZQorCitGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmU6OlRleHR1cmUoRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
KiB0ZXh0dXJlVXBkYXRlciwgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4dHVyZSkKKyAg
ICA6IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUodGV4dHVyZSkKKyAgICAsIG1fdGV4dHVy
ZVVwZGF0ZXIodGV4dHVyZVVwZGF0ZXIpCit7Cit9CisKK0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6flRleHR1cmUoKQoreworfQorCit2b2lk
IEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6
dXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciog
YWxsb2NhdG9yLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0
UmVjdCkKK3sKKyAgICB0ZXh0dXJlVXBkYXRlcigpLT51cGRhdGVUZXh0dXJlUmVjdChjb250ZXh0
LCBhbGxvY2F0b3IsIHRleHR1cmUoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QpOworfQorCitQYXNz
UmVmUHRyPEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcj4gRnJh
bWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUoUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcikKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihwYWlu
dGVyKSk7Cit9CisKK0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6RnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBhc3NPd25Q
dHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIpCisgICAgOiBTa1BpY3R1cmVDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyKHBhaW50ZXIpCit7Cit9CisKK0ZyYW1lQnVmZmVyU2tQaWN0dXJl
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6fkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcigpCit7Cit9CisKK1Bhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRl
cjo6VGV4dHVyZT4gRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
OjpjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKQoreworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgVGV4dHVyZSh0aGlzLCBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1hbmFnZXIp
KSk7Cit9CisKK0xheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBGcmFtZUJ1
ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnNhbXBsZWRUZXhlbEZvcm1h
dChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KQoreworICAgIC8vIEhlcmUgd2UgZGlyZWN0bHkgcmVu
ZGVyIHRvIHRoZSB0ZXh0dXJlLCBzbyB0aGUgY29tcG9uZW50IG9yZGVyIGlzIGFsd2F5cyBjb3Jy
ZWN0LgorICAgIHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRS
R0JBOworfQorCit2b2lkIEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1
cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQoreworICAgIC8vIE1h
a2Ugc3VyZSBTS0lBIHVzZXMgdGhlIGNvcnJlY3QgR0wgY29udGV4dC4KKyAgICBjb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAvLyBOb3RpZnkgU0tJQSB0byBzeW5jIGl0cyBpbnRl
cm5hbCBHTCBzdGF0ZS4KKyAgICBjb250ZXh0LT5nckNvbnRleHQoKS0+cmVzZXRDb250ZXh0KCk7
CisKKyAgICAvLyBDcmVhdGUgYW4gYWNjZWxlcmF0ZWQgY2FudmFzIHRvIGRyYXcgb24uCisgICAg
RnJhbWVCdWZmZXIgYnVmZmVyOworICAgIFNrQ2FudmFzKiBjYW52YXMgPSBidWZmZXIuaW5pdGlh
bGl6ZShjb250ZXh0LCBhbGxvY2F0b3IsIHRleHR1cmUpOworCisgICAgY2FudmFzLT5jbGlwUmVj
dChTa1JlY3QoZGVzdFJlY3QpKTsKKyAgICAvLyBUcmFuc2xhdGUgdGhlIG9yaWdpbiBvZiBjb250
ZW50UmVjdCB0byB0aGF0IG9mIGRlc3RSZWN0LgorICAgIC8vIE5vdGUgdGhhdCBkZXN0UmVjdCBp
cyBkZWZpbmVkIHJlbGF0aXZlIHRvIHNvdXJjZVJlY3QuCisgICAgY2FudmFzLT50cmFuc2xhdGUo
Y29udGVudFJlY3QoKS54KCkgLSBzb3VyY2VSZWN0LngoKSArIGRlc3RSZWN0LngoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICBjb250ZW50UmVjdCgpLnkoKSAtIHNvdXJjZVJlY3QueSgpICsgZGVz
dFJlY3QueSgpKTsKKyAgICBkcmF3UGljdHVyZShjYW52YXMpOworCisgICAgLy8gRmx1c2ggU0tJ
QSBjb250ZXh0IHNvIHRoYXQgYWxsIHRoZSByZW5kZXJlZCBzdHVmZiBhcHBlYXJzIG9uIHRoZSB0
ZXh0dXJlLgorICAgIGNvbnRleHQtPmdyQ29udGV4dCgpLT5mbHVzaCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKFNLSUEpCisjZW5kaWYgLy8gVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFt
ZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
ZDM3NjhjZWQxODgzODQ3YzJjY2QwOGM1MWQwZDA0MmI5OWIzZTE2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJT
a1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTAsMCArMSw2NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKworI2lmbmRlZiBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXJfaAorI2RlZmluZSBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXJfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIFVTRShTS0lBKQor
CisjaW5jbHVkZSAiU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlciA6IHB1YmxpYyBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
IHsKK3B1YmxpYzoKKyAgICBjbGFzcyBUZXh0dXJlIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0
ZXI6OlRleHR1cmUgeworICAgIHB1YmxpYzoKKyAgICAgICAgVGV4dHVyZShGcmFtZUJ1ZmZlclNr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqLCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0
dXJlPik7CisgICAgICAgIHZpcnR1YWwgflRleHR1cmUoKTsKKworICAgICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CisKKyAgICBw
cml2YXRlOgorICAgICAgICBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgeyByZXR1cm4gbV90ZXh0dXJlVXBkYXRlcjsgfQorCisg
ICAgICAgIEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciogbV90
ZXh0dXJlVXBkYXRlcjsKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RnJhbWVCdWZm
ZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyPiBjcmVhdGUoUGFzc093blB0cjxM
YXllclBhaW50ZXJDaHJvbWl1bT4pOworICAgIHZpcnR1YWwgfkZyYW1lQnVmZmVyU2tQaWN0dXJl
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcigpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPExh
eWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIq
KTsKKyAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4gTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6VG9wRG93bk9yaWVudGF0aW9uOyB9CisgICAgdmlydHVhbCBTYW1wbGVk
VGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpOwor
ICAgIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxs
b2NhdG9yKiwgTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRSZWN0JiBkZXN0UmVjdCk7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgRnJhbWVCdWZm
ZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWlu
dGVyQ2hyb21pdW0+KTsKK307Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNF
KFNLSUEpCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2VuZGlmIC8v
IEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcl9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VMYXllckNocm9taXVtLmNwcAppbmRleCAzNjMzNjI5NjdhY2NkZWJjMjU1OWUyOWMyNGQ0
M2MxYzg4ODgwMzE3Li4wYmQ4MmFlMWExOGEyNTMwZjg3NDIwZTQ4MWQwZDVjYTIzMGI5MDEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTQ2LDYgKzQ2LDI1IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGlj
IExheWVyVGV4dHVyZVVwZGF0ZXIgewogcHVibGljOgorICAgIGNsYXNzIFRleHR1cmUgOiBwdWJs
aWMgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSB7CisgICAgcHVibGljOgorICAgICAgICBU
ZXh0dXJlKEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIsIFBhc3NPd25Q
dHI8TWFuYWdlZFRleHR1cmU+IHRleHR1cmUpCisgICAgICAgICAgICA6IExheWVyVGV4dHVyZVVw
ZGF0ZXI6OlRleHR1cmUodGV4dHVyZSkKKyAgICAgICAgICAgICwgbV90ZXh0dXJlVXBkYXRlcih0
ZXh0dXJlVXBkYXRlcikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0
b3IqIGFsbG9jYXRvciwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYg
ZGVzdFJlY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRleHR1cmVVcGRhdGVyKCktPnVwZGF0
ZVRleHR1cmVSZWN0KGNvbnRleHQsIGFsbG9jYXRvciwgdGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBk
ZXN0UmVjdCk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEltYWdlTGF5ZXJU
ZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSB7IHJldHVybiBtX3RleHR1cmVVcGRhdGVy
OyB9CisKKyAgICAgICAgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKiBtX3RleHR1cmVVcGRhdGVy
OworICAgIH07CisKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZUxheWVyVGV4dHVyZVVwZGF0
ZXI+IGNyZWF0ZShib29sIHVzZU1hcFRleFN1YkltYWdlKQogICAgIHsKICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIodXNlTWFwVGV4U3ViSW1hZ2Up
KTsKQEAgLTUzLDYgKzcyLDExIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfkltYWdlTGF5ZXJU
ZXh0dXJlVXBkYXRlcigpIHsgfQogCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPExheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmUodGhpcywgTWFuYWdl
ZFRleHR1cmU6OmNyZWF0ZShtYW5hZ2VyKSkpOworICAgIH0KKwogICAgIHZpcnR1YWwgT3JpZW50
YXRpb24gb3JpZW50YXRpb24oKSB7IHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpCb3R0b21V
cE9yaWVudGF0aW9uOyB9CiAKICAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVk
VGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkKQEAgLTYxLDcgKzg1LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZv
cm1hdFJHQkEgOiBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRCR1JBOwog
ICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYg
Y29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgLyogYm9yZGVyVGV4ZWxz
ICovKQorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgLyog
Y29udGVudFJlY3QgKi8sIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgLyogYm9yZGVyVGV4
ZWxzICovKQogICAgIHsKICAgICAgICAgbV90ZXhTdWJJbWFnZS5zZXRTdWJJbWFnZVNpemUodGls
ZVNpemUpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4
IGRmMjU0MzU2YmRiZDYxZjgyZDkyMWU4ZTljMGRjZWVjOWFhNWU4YTIuLmQ4Njg5NmU5MTE3YjMy
NDBmYWUxY2IzNzlkNDkzZmQ5ZjVlMzY2ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcApAQCAtMzUsMTMgKzM1LDEzIEBACiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmgiCiAKICNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRl
ICJDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJHZW9tZXRyeUJpbmRp
bmcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkxh
eWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaCIKICNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgog
I2luY2x1ZGUgIk5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKaW5kZXggM2Q4NTk3ZTM5ZTg1
ZDRjYmYwMTU2ZDVjYzExNzk0Njc5NTM3MTI0Zi4uOTQyOTgxODMwMGJkMGZhYTAxMjY5MTRhZjg4
NDg5ZWY5OGJjYjY3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAtMjksNiAr
MjksNyBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCisjaW5jbHVkZSAi
TWFuYWdlZFRleHR1cmUuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC0zNywxMSArMzgsMjYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgSW50
U2l6ZTsKLWNsYXNzIE1hbmFnZWRUZXh0dXJlOwogY2xhc3MgVGV4dHVyZUFsbG9jYXRvcjsKK2Ns
YXNzIFRleHR1cmVNYW5hZ2VyOwogCiBjbGFzcyBMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGlj
IFJlZkNvdW50ZWQ8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gewogcHVibGljOgorICAgIC8vIEFsbG93
cyB0ZXh0dXJlIHVwbG9hZGVycyB0byBzdG9yZSBwZXItdGlsZSByZXNvdXJjZXMuCisgICAgY2xh
c3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmU+IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHZpcnR1YWwgflRleHR1cmUoKSB7IH0KKworICAgICAgICBNYW5hZ2VkVGV4dHVyZSog
dGV4dHVyZSgpIHsgcmV0dXJuIG1fdGV4dHVyZS5nZXQoKTsgfQorICAgICAgICB2aXJ0dWFsIHZv
aWQgcHJlcGFyZVJlY3QoY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkgeyB9OworICAgICAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0
b3IqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkg
PSAwOworICAgIHByb3RlY3RlZDoKKyAgICAgICAgZXhwbGljaXQgVGV4dHVyZShQYXNzT3duUHRy
PE1hbmFnZWRUZXh0dXJlPiB0ZXh0dXJlKSA6IG1fdGV4dHVyZSh0ZXh0dXJlKSB7IH0KKworICAg
IHByaXZhdGU6CisgICAgICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV90ZXh0dXJlOworICAg
IH07CisKICAgICB2aXJ0dWFsIH5MYXllclRleHR1cmVVcGRhdGVyKCkgeyB9CiAKICAgICBlbnVt
IE9yaWVudGF0aW9uIHsKQEAgLTU0LDYgKzcwLDcgQEAgcHVibGljOgogICAgICAgICBTYW1wbGVk
VGV4ZWxGb3JtYXRCR1JBLAogICAgICAgICBTYW1wbGVkVGV4ZWxGb3JtYXRJbnZhbGlkLAogICAg
IH07CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVy
ZU1hbmFnZXIqKSA9IDA7CiAgICAgLy8gUmV0dXJucyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIHRl
eHR1cmUgdXBsb2FkZWQgYnkgdGhpcyBpbnRlcmZhY2UuCiAgICAgdmlydHVhbCBPcmllbnRhdGlv
biBvcmllbnRhdGlvbigpID0gMDsKICAgICAvLyBSZXR1cm5zIHRoZSBmb3JtYXQgb2YgdGhlIHRl
eGVsIHVwbG9hZGVkIGJ5IHRoaXMgaW50ZXJmYWNlLgpAQCAtNjEsOCArNzgsNyBAQCBwdWJsaWM6
CiAgICAgLy8gVGhpcyBmb3JtYXQgc3BlY2lmaWVzIHRoZSBjb21wb25lbnQgb3JkZXIgaW4gdGhl
IHNhbXBsZWQgdGV4ZWwuCiAgICAgLy8gSWYgdGhlIGZvcm1hdCBpcyBUZXhlbEZvcm1hdEJHUkEs
IHZlYzQueCBpcyBibHVlIGFuZCB2ZWM0LnogaXMgcmVkLgogICAgIHZpcnR1YWwgU2FtcGxlZFRl
eGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50
UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0
dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJl
VG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVT
aXplLCBpbnQgYm9yZGVyVGV4ZWxzKSB7IH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBhY2IyY2QzZTQ2YjMwMTM0ZWFmODgwNWI0NTNlNWNhYjhkNTQ1
YzFiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJD
YW52YXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjE4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2lu
Y2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaCIKLQotI2luY2x1ZGUgIkV4dGVuc2lv
bnMzRC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkxheWVyUGFp
bnRlckNocm9taXVtLmgiCi0jaW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKLSNpbmNsdWRlICJQ
bGF0Zm9ybUNvbG9yLmgiCi0jaW5jbHVkZSAiVHJhY2VFdmVudC5oIgotCi0jaWYgVVNFKFNLSUEp
Ci0jaW5jbHVkZSAiR3JDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5o
IgotI2luY2x1ZGUgIlNrQ2FudmFzLmgiCi0jaW5jbHVkZSAiU2tHcHVEZXZpY2UuaCIKLSNlbmRp
ZiAvLyBVU0UoU0tJQSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgVVNFKFNLSUEpCi1u
YW1lc3BhY2UgewotCi1jbGFzcyBGcmFtZUJ1ZmZlciB7Ci1wdWJsaWM6Ci0gICAgRnJhbWVCdWZm
ZXIoKTsKLSAgICB+RnJhbWVCdWZmZXIoKTsKLQotICAgIFNrQ2FudmFzKiBpbml0aWFsaXplKEdy
YXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIE1hbmFnZWRUZXh0dXJlKik7Ci0K
LXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKLSAgICBQbGF0Zm9y
bTNET2JqZWN0IG1fZmJvOwotICAgIE93blB0cjxTa0NhbnZhcz4gbV9jYW52YXM7Ci19OwotCi1G
cmFtZUJ1ZmZlcjo6RnJhbWVCdWZmZXIoKQotICAgIDogbV9jb250ZXh0KDApCi0gICAgLCBtX2Zi
bygwKQotewotfQotCi1GcmFtZUJ1ZmZlcjo6fkZyYW1lQnVmZmVyKCkKLXsKLSAgICBtX2NhbnZh
cy5jbGVhcigpOwotCi0gICAgaWYgKG1fZmJvKQotICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZUZy
YW1lYnVmZmVyKG1fZmJvKTsKLX0KLQotU2tDYW52YXMqIEZyYW1lQnVmZmVyOjppbml0aWFsaXpl
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3Is
IE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlKQotewotICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Ci0g
ICAgbV9mYm8gPSBtX2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAgbV9jb250ZXh0
LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7
Ci0gICAgdGV4dHVyZS0+ZnJhbWVidWZmZXJUZXh0dXJlMkQobV9jb250ZXh0LCBhbGxvY2F0b3Ip
OwotCi0gICAgLy8gQ3JlYXRlIGEgc2tpYSBncHUgY2FudmFzLgotICAgIEdyQ29udGV4dCogZ3JD
b250ZXh0ID0gbV9jb250ZXh0LT5nckNvbnRleHQoKTsKLSAgICBJbnRTaXplIGNhbnZhc1NpemUg
PSB0ZXh0dXJlLT5zaXplKCk7Ci0gICAgR3JQbGF0Zm9ybVN1cmZhY2VEZXNjIHRhcmdldERlc2M7
Ci0gICAgdGFyZ2V0RGVzYy5yZXNldCgpOwotICAgIHRhcmdldERlc2MuZlN1cmZhY2VUeXBlID0g
a1RleHR1cmVSZW5kZXJUYXJnZXRfR3JQbGF0Zm9ybVN1cmZhY2VUeXBlOwotICAgIHRhcmdldERl
c2MuZlJlbmRlclRhcmdldEZsYWdzID0ga05vbmVfR3JQbGF0Zm9ybVJlbmRlclRhcmdldEZsYWdC
aXQ7Ci0gICAgdGFyZ2V0RGVzYy5mV2lkdGggPSBjYW52YXNTaXplLndpZHRoKCk7Ci0gICAgdGFy
Z2V0RGVzYy5mSGVpZ2h0ID0gY2FudmFzU2l6ZS5oZWlnaHQoKTsKLSAgICB0YXJnZXREZXNjLmZD
b25maWcgPSBrUkdCQV84ODg4X0dyUGl4ZWxDb25maWc7Ci0gICAgdGFyZ2V0RGVzYy5mU3RlbmNp
bEJpdHMgPSA4OwotICAgIHRhcmdldERlc2MuZlBsYXRmb3JtVGV4dHVyZSA9IHRleHR1cmUtPnRl
eHR1cmVJZCgpOwotICAgIHRhcmdldERlc2MuZlBsYXRmb3JtUmVuZGVyVGFyZ2V0ID0gbV9mYm87
Ci0gICAgU2tBdXRvVFVucmVmPEdyVGV4dHVyZT4gdGFyZ2V0KHN0YXRpY19jYXN0PEdyVGV4dHVy
ZSo+KGdyQ29udGV4dC0+Y3JlYXRlUGxhdGZvcm1TdXJmYWNlKHRhcmdldERlc2MpKSk7Ci0gICAg
U2tBdXRvVFVucmVmPFNrRGV2aWNlPiBkZXZpY2UobmV3IFNrR3B1RGV2aWNlKGdyQ29udGV4dCwg
dGFyZ2V0LmdldCgpKSk7Ci0gICAgbV9jYW52YXMgPSBhZG9wdFB0cihuZXcgU2tDYW52YXMoZGV2
aWNlLmdldCgpKSk7Ci0KLSAgICByZXR1cm4gbV9jYW52YXMuZ2V0KCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlCi0jZW5kaWYgLy8gVVNFKFNLSUEpCi0KLUxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6
OkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1
bT4gcGFpbnRlcikKLSAgICA6IG1fcGFpbnRlcihwYWludGVyKQotewotfQotCi12b2lkIExheWVy
VGV4dHVyZVVwZGF0ZXJDYW52YXM6OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKLXsKLSAgICBjb250ZXh0LnRyYW5zbGF0
ZSgtY29udGVudFJlY3QueCgpLCAtY29udGVudFJlY3QueSgpKTsKLSAgICB7Ci0gICAgICAgIFRS
QUNFX0VWRU5UKCJMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzOjpwYWludCIsIHRoaXMsIDApOwot
ICAgICAgICBtX3BhaW50ZXItPnBhaW50KGNvbnRleHQsIGNvbnRlbnRSZWN0KTsKLSAgICB9Ci0g
ICAgbV9jb250ZW50UmVjdCA9IGNvbnRlbnRSZWN0OwotfQotCi1QYXNzUmVmUHRyPExheWVyVGV4
dHVyZVVwZGF0ZXJCaXRtYXA+IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNyZWF0ZShQYXNz
T3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyLCBib29sIHVzZU1hcFRleFN1Yklt
YWdlKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1h
cChwYWludGVyLCB1c2VNYXBUZXhTdWJJbWFnZSkpOwotfQotCi1MYXllclRleHR1cmVVcGRhdGVy
Qml0bWFwOjpMYXllclRleHR1cmVVcGRhdGVyQml0bWFwKFBhc3NPd25QdHI8TGF5ZXJQYWludGVy
Q2hyb21pdW0+IHBhaW50ZXIsIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpCi0gICAgOiBMYXllclRl
eHR1cmVVcGRhdGVyQ2FudmFzKHBhaW50ZXIpCi0gICAgLCBtX3RleFN1YkltYWdlKHVzZU1hcFRl
eFN1YkltYWdlKQotewotfQotCi1MYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3Jt
YXQgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6c2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVt
IHRleHR1cmVGb3JtYXQpCi17Ci0gICAgLy8gVGhlIGNvbXBvbmVudCBvcmRlciBtYXkgYmUgYmdy
YSBpZiB3ZSB1cGxvYWRlZCBiZ3JhIHBpeGVscyB0byByZ2JhIHRleHR1cmVzLgotICAgIHJldHVy
biBQbGF0Zm9ybUNvbG9yOjpzYW1lQ29tcG9uZW50T3JkZXIodGV4dHVyZUZvcm1hdCkgPwotICAg
ICAgICAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0UkdCQSA6IExh
eWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdEJHUkE7Ci19Ci0KLXZvaWQgTGF5
ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscykKLXsK
LSAgICBtX3RleFN1YkltYWdlLnNldFN1YkltYWdlU2l6ZSh0aWxlU2l6ZSk7Ci0KLSAgICBtX2Nh
bnZhcy5yZXNpemUoY29udGVudFJlY3Quc2l6ZSgpKTsKLSAgICAvLyBBc3N1bXB0aW9uOiBpZiBh
IHRpbGVyIGlzIHVzaW5nIGJvcmRlciB0ZXhlbHMsIHRoZW4gaXQgaXMgYmVjYXVzZSB0aGUKLSAg
ICAvLyBsYXllciBpcyBsaWtlbHkgdG8gYmUgZmlsdGVyZWQgb3IgdHJhbnNmb3JtZWQuIEJlY2F1
c2Ugb2YgaXQgbWlnaHQgYmUKLSAgICAvLyB0cmFuc2Zvcm1lZCwgZHJhdyB0aGUgdGV4dCBpbiBn
cmF5c2NhbGUgaW5zdGVhZCBvZiBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCi0gICAgUGxhdGZvcm1D
YW52YXM6OlBhaW50ZXI6OlRleHRPcHRpb24gdGV4dE9wdGlvbiA9Ci0gICAgICAgIGJvcmRlclRl
eGVscyA/IFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpHcmF5c2NhbGVUZXh0IDogUGxhdGZvcm1D
YW52YXM6OlBhaW50ZXI6OlN1YnBpeGVsVGV4dDsKLSAgICBQbGF0Zm9ybUNhbnZhczo6UGFpbnRl
ciBjYW52YXNQYWludGVyKCZtX2NhbnZhcywgdGV4dE9wdGlvbik7Ci0gICAgcGFpbnRDb250ZW50
cygqY2FudmFzUGFpbnRlci5jb250ZXh0KCksIGNvbnRlbnRSZWN0KTsKLX0KLQotdm9pZCBMYXll
clRleHR1cmVVcGRhdGVyQml0bWFwOjp1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBNYW5hZ2VkVGV4dHVyZSog
dGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJl
Y3QpCi17Ci0gICAgUGxhdGZvcm1DYW52YXM6OkF1dG9Mb2NrZXIgbG9ja2VyKCZtX2NhbnZhcyk7
Ci0KLSAgICB0ZXh0dXJlLT5iaW5kVGV4dHVyZShjb250ZXh0LCBhbGxvY2F0b3IpOwotICAgIG1f
dGV4U3ViSW1hZ2UudXBsb2FkKGxvY2tlci5waXhlbHMoKSwgY29udGVudFJlY3QoKSwgc291cmNl
UmVjdCwgZGVzdFJlY3QsIHRleHR1cmUtPmZvcm1hdCgpLCBjb250ZXh0KTsKLX0KLQotI2lmIFVT
RShTS0lBKQotUGFzc1JlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlPiBMYXllclRl
eHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpjcmVhdGUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJv
bWl1bT4gcGFpbnRlcikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVyVGV4dHVyZVVw
ZGF0ZXJTa1BpY3R1cmUocGFpbnRlcikpOwotfQotCi1MYXllclRleHR1cmVVcGRhdGVyU2tQaWN0
dXJlOjpMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVy
Q2hyb21pdW0+IHBhaW50ZXIpCi0gICAgOiBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzKHBhaW50
ZXIpCi17Ci19Ci0KLUxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6On5MYXllclRleHR1cmVV
cGRhdGVyU2tQaWN0dXJlKCkKLXsKLX0KLQotTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRl
eGVsRm9ybWF0IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OnNhbXBsZWRUZXhlbEZvcm1h
dChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KQotewotICAgIC8vIEhlcmUgd2UgZGlyZWN0bHkgcmVu
ZGVyIHRvIHRoZSB0ZXh0dXJlLCBzbyB0aGUgY29tcG9uZW50IG9yZGVyIGlzIGFsd2F5cyBjb3Jy
ZWN0LgotICAgIHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRS
R0JBOwotfQotCi12b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OnByZXBhcmVUb1Vw
ZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUs
IGludCBib3JkZXJUZXhlbHMpCi17Ci0gICAgU2tDYW52YXMqIGNhbnZhcyA9IG1fcGljdHVyZS5i
ZWdpblJlY29yZGluZyhjb250ZW50UmVjdC53aWR0aCgpLCBjb250ZW50UmVjdC5oZWlnaHQoKSk7
Ci0gICAgUGxhdGZvcm1Db250ZXh0U2tpYSBwbGF0Zm9ybUNvbnRleHQoY2FudmFzKTsKLSAgICBH
cmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KCZwbGF0Zm9ybUNvbnRleHQpOwotICAgIHBh
aW50Q29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBjb250ZW50UmVjdCk7Ci0gICAgbV9waWN0dXJl
LmVuZFJlY29yZGluZygpOwotfQotCi12b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6
OnVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxs
b2NhdG9yKiBhbGxvY2F0b3IsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICAvLyBNYWtlIHN1
cmUgU0tJQSB1c2VzIHRoZSBjb3JyZWN0IEdMIGNvbnRleHQuCi0gICAgY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgLy8gTm90aWZ5IFNLSUEgdG8gc3luYyBpdHMgaW50ZXJuYWwg
R0wgc3RhdGUuCi0gICAgY29udGV4dC0+Z3JDb250ZXh0KCktPnJlc2V0Q29udGV4dCgpOwotCi0g
ICAgLy8gQ3JlYXRlIGFuIGFjY2VsZXJhdGVkIGNhbnZhcyB0byBkcmF3IG9uLgotICAgIEZyYW1l
QnVmZmVyIGJ1ZmZlcjsKLSAgICBTa0NhbnZhcyogY2FudmFzID0gYnVmZmVyLmluaXRpYWxpemUo
Y29udGV4dCwgYWxsb2NhdG9yLCB0ZXh0dXJlKTsKLQotICAgIGNhbnZhcy0+Y2xpcFJlY3QoU2tS
ZWN0KGRlc3RSZWN0KSk7Ci0gICAgLy8gVHJhbnNsYXRlIHRoZSBvcmlnaW4gb2YgY29udGVudFJl
Y3QgdG8gdGhhdCBvZiBkZXN0UmVjdC4KLSAgICAvLyBOb3RlIHRoYXQgZGVzdFJlY3QgaXMgZGVm
aW5lZCByZWxhdGl2ZSB0byBzb3VyY2VSZWN0LgotICAgIGNhbnZhcy0+dHJhbnNsYXRlKGNvbnRl
bnRSZWN0KCkueCgpIC0gc291cmNlUmVjdC54KCkgKyBkZXN0UmVjdC54KCksCi0gICAgICAgICAg
ICAgICAgICAgICAgY29udGVudFJlY3QoKS55KCkgLSBzb3VyY2VSZWN0LnkoKSArIGRlc3RSZWN0
LnkoKSk7Ci0gICAgY2FudmFzLT5kcmF3UGljdHVyZShtX3BpY3R1cmUpOwotCi0gICAgLy8gRmx1
c2ggU0tJQSBjb250ZXh0IHNvIHRoYXQgYWxsIHRoZSByZW5kZXJlZCBzdHVmZiBhcHBlYXJzIG9u
IHRoZSB0ZXh0dXJlLgotICAgIGNvbnRleHQtPmdyQ29udGV4dCgpLT5mbHVzaCgpOwotfQotI2Vu
ZGlmIC8vIFVTRShTS0lBKQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0jZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRl
ckNhbnZhcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmM3MWM2OGZmN2M3ZGM5
ODIxY2U5YWM4YTFiNDA4OGFhNTg4Mzg5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotCi0jaWZuZGVmIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXNfaAotI2RlZmlu
ZSBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzX2gKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLQotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgotI2luY2x1ZGUgIkxheWVy
VGV4dHVyZVN1YkltYWdlLmgiCi0jaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtQ2FudmFzLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi0jaWYgVVNFKFNLSUEpCi0jaW5jbHVkZSAiU2tQ
aWN0dXJlLmgiCi0KLWNsYXNzIEdyQ29udGV4dDsKLWNsYXNzIFNrQ2FudmFzOwotY2xhc3MgU2tQ
aWN0dXJlOwotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR3JhcGhpY3ND
b250ZXh0M0Q7Ci1jbGFzcyBMYXllclBhaW50ZXJDaHJvbWl1bTsKLQotLy8gQSBMYXllclRleHR1
cmVVcGRhdGVyIHdpdGggYW4gaW50ZXJuYWwgY2FudmFzLgotY2xhc3MgTGF5ZXJUZXh0dXJlVXBk
YXRlckNhbnZhcyA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyIHsKLXByb3RlY3RlZDoKLSAg
ICBleHBsaWNpdCBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzKFBhc3NPd25QdHI8TGF5ZXJQYWlu
dGVyQ2hyb21pdW0+KTsKLQotICAgIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7Ci0gICAgY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRSZWN0OyB9Ci0KLXByaXZhdGU6Ci0KLSAg
ICBJbnRSZWN0IG1fY29udGVudFJlY3Q7Ci0gICAgT3duUHRyPExheWVyUGFpbnRlckNocm9taXVt
PiBtX3BhaW50ZXI7Ci19OwotCi0vLyBBIExheWVyVGV4dHVyZVVwZGF0ZXIgd2l0aCBhbiBpbnRl
cm5hbCBiaXRtYXAgY2FudmFzLgotY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcCA6IHB1
YmxpYyBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyQml0bWFwPiBjcmVhdGUoUGFzc093blB0cjxMYXll
clBhaW50ZXJDaHJvbWl1bT4sIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpOwotCi0gICAgdmlydHVh
bCBPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIHsgcmV0dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6
OkJvdHRvbVVwT3JpZW50YXRpb247IH0KLSAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBz
YW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCk7Ci0gICAgdmlydHVhbCB2
b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50
U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBNYW5h
Z2VkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRl
c3RSZWN0KTsKLQotcHJpdmF0ZToKLSAgICBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwKFBhc3NP
d25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+LCBib29sIHVzZU1hcFRleFN1YkltYWdlKTsKLSAg
ICBQbGF0Zm9ybUNhbnZhcyBtX2NhbnZhczsKLSAgICBMYXllclRleHR1cmVTdWJJbWFnZSBtX3Rl
eFN1YkltYWdlOwotfTsKLQotI2lmIFVTRShTS0lBKQotY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRl
clNrUGljdHVyZSA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlPiBjcmVh
dGUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOwotICAgIHZpcnR1YWwgfkxheWVy
VGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUoKTsKLQotICAgIHZpcnR1YWwgT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24oKSB7IHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpUb3BEb3duT3JpZW50YXRp
b247IH0KLSAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQo
R0MzRGVudW0gdGV4dHVyZUZvcm1hdCk7Ci0gICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0
ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGlu
dCBib3JkZXJUZXhlbHMpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChHcmFw
aGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBNYW5hZ2VkVGV4dHVyZSosIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKLQotcHJpdmF0
ZToKLSAgICBleHBsaWNpdCBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKFBhc3NPd25QdHI8
TGF5ZXJQYWludGVyQ2hyb21pdW0+KTsKLSAgCi0gICAgU2tQaWN0dXJlIG1fcGljdHVyZTsgLy8g
UmVjb3JkaW5nIGNhbnZhcy4KLX07Ci0jZW5kaWYgLy8gVVNFKFNLSUEpCi0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0jZW5k
aWYgLy8gTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjZmQ2
M2U3MTkzNDJhZTc1MGJkZmVhYThjYWIzMmYxY2ZmYzgyYzIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyLmNwcApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaWYgVVNF
KFNLSUEpCisKKyNpbmNsdWRlICJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgi
CisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJMYXllclBhaW50ZXJD
aHJvbWl1bS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNpbmNsdWRlICJT
a0NhbnZhcy5oIgorI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpTa1BpY3R1cmVDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50
ZXIpCisgICAgOiBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKHBhaW50ZXIpCit7Cit9CisKK1Nr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6On5Ta1BpY3R1cmVDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyKCkKK3sKK30KKwordm9pZCBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0
IEludFNpemUmIC8qIHRpbGVTaXplICovLCBpbnQgLyogYm9yZGVyVGV4ZWxzICovKQoreworICAg
IFNrQ2FudmFzKiBjYW52YXMgPSBtX3BpY3R1cmUuYmVnaW5SZWNvcmRpbmcoY29udGVudFJlY3Qu
d2lkdGgoKSwgY29udGVudFJlY3QuaGVpZ2h0KCkpOworICAgIFBsYXRmb3JtQ29udGV4dFNraWEg
cGxhdGZvcm1Db250ZXh0KGNhbnZhcyk7CisgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29u
dGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKKyAgICBwYWludENvbnRlbnRzKGdyYXBoaWNzQ29udGV4
dCwgY29udGVudFJlY3QpOworICAgIG1fcGljdHVyZS5lbmRSZWNvcmRpbmcoKTsKK30KKwordm9p
ZCBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpkcmF3UGljdHVyZShTa0NhbnZh
cyogY2FudmFzKQoreworICAgIFRSQUNFX0VWRU5UKCJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyOjpkcmF3UGljdHVyZSIsIHRoaXMsIDApOworICAgIGNhbnZhcy0+ZHJhd1BpY3R1
cmUobV9waWN0dXJlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVT
RShTS0lBKQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44OTFhNmQzYzlmMTIyMDFjYTRiMTgxNzQwYmYwZmJhNDdlMDFkYjU0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisK
KyNpZm5kZWYgU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcl9oCisjZGVmaW5lIFNr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXJfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorI2lmIFVTRShTS0lBKQorCisjaW5jbHVkZSAiQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlci5oIgorI2luY2x1ZGUgIlNrUGljdHVyZS5oIgorCitjbGFzcyBTa0NhbnZhczsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBMYXllclBhaW50ZXJDaHJvbWl1bTsKKwor
Y2xhc3MgU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciA6IHB1YmxpYyBDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5Ta1BpY3R1cmVDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyKCk7CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBTa1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hy
b21pdW0+KTsKKworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxz
KTsKKyAgICB2b2lkIGRyYXdQaWN0dXJlKFNrQ2FudmFzKik7CisKK3ByaXZhdGU6CisgICAgU2tQ
aWN0dXJlIG1fcGljdHVyZTsgLy8gUmVjb3JkaW5nIGNhbnZhcy4KK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoU0tJQSkKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisjZW5kaWYgLy8gU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAppbmRleCBmY2M0NmQ5OTNkNTQw
YTQyMTlkN2YyNzAxMDAxODczOGVmN2I4ZmZlLi5iZDFmMzY2NzcxNzNkMmRjOWVkNGQ3OWIwMzZk
YjdiNzg0YTYyMTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTUxLDE3
ICs1MSwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBVcGRhdGFibGVUaWxlIDogcHVi
bGljIENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShV
cGRhdGFibGVUaWxlKTsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBVcGRhdGFibGVUaWxlKFBhc3NP
d25QdHI8TWFuYWdlZFRleHR1cmU+IHRleCkgOiBtX3RleCh0ZXgpIHsgfQorICAgIGV4cGxpY2l0
IFVwZGF0YWJsZVRpbGUoUGFzc1JlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiB0
ZXh0dXJlKSA6IG1fdGV4dHVyZSh0ZXh0dXJlKSB7IH0KIAotICAgIE1hbmFnZWRUZXh0dXJlKiB0
ZXh0dXJlKCkgeyByZXR1cm4gbV90ZXguZ2V0KCk7IH0KKyAgICBMYXllclRleHR1cmVVcGRhdGVy
OjpUZXh0dXJlKiB0ZXh0dXJlKCkgeyByZXR1cm4gbV90ZXh0dXJlLmdldCgpOyB9CisgICAgTWFu
YWdlZFRleHR1cmUqIG1hbmFnZWRUZXh0dXJlKCkgeyByZXR1cm4gbV90ZXh0dXJlLT50ZXh0dXJl
KCk7IH0KIAogICAgIGJvb2wgZGlydHkoKSBjb25zdCB7IHJldHVybiAhbV9kaXJ0eUxheWVyUmVj
dC5pc0VtcHR5KCk7IH0KICAgICB2b2lkIGNsZWFyRGlydHkoKSB7IG1fZGlydHlMYXllclJlY3Qg
PSBJbnRSZWN0KCk7IH0KIAogICAgIC8vIExheWVyLXNwYWNlIGRpcnR5IHJlY3RhbmdsZSB0aGF0
IG5lZWRzIHRvIGJlIHJlcGFpbnRlZC4KICAgICBJbnRSZWN0IG1fZGlydHlMYXllclJlY3Q7Cisg
ICAgLy8gQ29udGVudC1zcGFjZSByZWN0YW5nbGUgdGhhdCBuZWVkcyB0byBiZSB1cGRhdGVkLgor
ICAgIEludFJlY3QgbV91cGRhdGVSZWN0OwogcHJpdmF0ZToKLSAgICBPd25QdHI8TWFuYWdlZFRl
eHR1cmU+IG1fdGV4OworICAgIFJlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBt
X3RleHR1cmU7CiB9OwogCiBUaWxlZExheWVyQ2hyb21pdW06OlRpbGVkTGF5ZXJDaHJvbWl1bShD
Q0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQpAQCAtMTY3LDE3ICsxNzAsMTIgQEAgdm9pZCBUaWxl
ZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIEMKICAgICAgICAgICAgIGVsc2UgaWYgKCF0aWxlLT5kaXJ0eSgpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAvLyBDYWxjdWxhdGUgcGFnZS1z
cGFjZSByZWN0YW5nbGUgdG8gY29weSBmcm9tLgotICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VS
ZWN0ID0gbV90aWxlci0+dGlsZUNvbnRlbnRSZWN0KHRpbGUpOwotICAgICAgICAgICAgY29uc3Qg
SW50UG9pbnQgYW5jaG9yID0gc291cmNlUmVjdC5sb2NhdGlvbigpOwotICAgICAgICAgICAgc291
cmNlUmVjdC5pbnRlcnNlY3QobV90aWxlci0+bGF5ZXJSZWN0VG9Db250ZW50UmVjdCh0aWxlLT5t
X2RpcnR5TGF5ZXJSZWN0KSk7Ci0gICAgICAgICAgICAvLyBQYWludCByZWN0IG5vdCBndWFyYW50
ZWVkIHRvIGxpbmUgdXAgb24gdGlsZSBib3VuZGFyaWVzLCBzbwotICAgICAgICAgICAgLy8gbWFr
ZSBzdXJlIHRoYXQgc291cmNlUmVjdCBkb2Vzbid0IGV4dGVuZCBvdXRzaWRlIG9mIGl0LgotICAg
ICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QobV9wYWludFJlY3QpOwotICAgICAgICAgICAg
aWYgKHNvdXJjZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0
ID0gdGlsZS0+bV91cGRhdGVSZWN0OworICAgICAgICAgICAgaWYgKHRpbGUtPm1fdXBkYXRlUmVj
dC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIEFT
U0VSVCh0aWxlLT50ZXh0dXJlKCktPmlzUmVzZXJ2ZWQoKSk7CisgICAgICAgICAgICBBU1NFUlQo
dGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+aXNSZXNlcnZlZCgpKTsKKyAgICAgICAgICAgIGNvbnN0
IEludFBvaW50IGFuY2hvciA9IG1fdGlsZXItPnRpbGVDb250ZW50UmVjdCh0aWxlKS5sb2NhdGlv
bigpOwogCiAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGlsZS1zcGFjZSByZWN0YW5nbGUgdG8g
dXBsb2FkIGludG8uCiAgICAgICAgICAgICBJbnRSZWN0IGRlc3RSZWN0KEludFBvaW50KHNvdXJj
ZVJlY3QueCgpIC0gYW5jaG9yLngoKSwgc291cmNlUmVjdC55KCkgLSBhbmNob3IueSgpKSwgc291
cmNlUmVjdC5zaXplKCkpOwpAQCAtMTk3LDEyICsxOTUsMTIgQEAgdm9pZCBUaWxlZExheWVyQ2hy
b21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQsIEMKICAgICAgICAgICAgIGlmIChwYWludE9mZnNldC55KCkgKyBkZXN0UmVjdC5oZWlnaHQo
KSA+IG1fcGFpbnRSZWN0LmhlaWdodCgpKQogICAgICAgICAgICAgICAgIENSQVNIKCk7CiAKLSAg
ICAgICAgICAgIHRpbGUtPnRleHR1cmUoKS0+YmluZFRleHR1cmUoY29udGV4dCwgdXBkYXRlci5h
bGxvY2F0b3IoKSk7CisgICAgICAgICAgICB0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5iaW5kVGV4
dHVyZShjb250ZXh0LCB1cGRhdGVyLmFsbG9jYXRvcigpKTsKICAgICAgICAgICAgIGNvbnN0IEdD
M0RpbnQgZmlsdGVyID0gbV90aWxlci0+aGFzQm9yZGVyVGV4ZWxzKCkgPyBHcmFwaGljc0NvbnRl
eHQzRDo6TElORUFSIDogR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1Q7CiAgICAgICAgICAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgZmlsdGVyKSk7
CiAgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJ
TFRFUiwgZmlsdGVyKSk7CiAKLSAgICAgICAgICAgIHVwZGF0ZXIuYXBwZW5kKHRpbGUtPnRleHR1
cmUoKSwgdGV4dHVyZVVwZGF0ZXIoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QpOworICAgICAgICAg
ICAgdXBkYXRlci5hcHBlbmQodGlsZS0+dGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7
CiAgICAgICAgICAgICB0aWxlLT5jbGVhckRpcnR5KCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0y
NDAsMTAgKzIzOCwxMCBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNU
byhDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgICAgIGludCBpID0gaXRlci0+Zmlyc3QuZmlyc3Q7
CiAgICAgICAgIGludCBqID0gaXRlci0+Zmlyc3Quc2Vjb25kOwogICAgICAgICBVcGRhdGFibGVU
aWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQo
KSk7Ci0gICAgICAgIGlmICghdGlsZS0+dGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVT
aXplKCksIG1fdGV4dHVyZUZvcm1hdCkpCisgICAgICAgIGlmICghdGlsZS0+bWFuYWdlZFRleHR1
cmUoKS0+aXNWYWxpZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKQogICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgdGlsZWRMYXllci0+c3luY1RleHR1cmVJZChp
LCBqLCB0aWxlLT50ZXh0dXJlKCktPnRleHR1cmVJZCgpKTsKKyAgICAgICAgdGlsZWRMYXllci0+
c3luY1RleHR1cmVJZChpLCBqLCB0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT50ZXh0dXJlSWQoKSk7
CiAgICAgfQogfQogCkBAIC0yNjEsNyArMjU5LDcgQEAgVXBkYXRhYmxlVGlsZSogVGlsZWRMYXll
ckNocm9taXVtOjp0aWxlQXQoaW50IGksIGludCBqKSBjb25zdAogCiBVcGRhdGFibGVUaWxlKiBU
aWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZVRpbGUoaW50IGksIGludCBqKQogewotICAgIFJlZlB0
cjxVcGRhdGFibGVUaWxlPiB0aWxlID0gYWRvcHRSZWYobmV3IFVwZGF0YWJsZVRpbGUoTWFuYWdl
ZFRleHR1cmU6OmNyZWF0ZSh0ZXh0dXJlTWFuYWdlcigpKSkpOworICAgIFJlZlB0cjxVcGRhdGFi
bGVUaWxlPiB0aWxlID0gYWRvcHRSZWYobmV3IFVwZGF0YWJsZVRpbGUodGV4dHVyZVVwZGF0ZXIo
KS0+Y3JlYXRlVGV4dHVyZSh0ZXh0dXJlTWFuYWdlcigpKSkpOwogICAgIG1fdGlsZXItPmFkZFRp
bGUodGlsZSwgaSwgaik7CiAgICAgdGlsZS0+bV9kaXJ0eUxheWVyUmVjdCA9IG1fdGlsZXItPnRp
bGVMYXllclJlY3QodGlsZS5nZXQoKSk7CiAKQEAgLTMwOSwxMCArMzA3LDEwIEBAIHZvaWQgVGls
ZWRMYXllckNocm9taXVtOjpwcm90ZWN0VGlsZVRleHR1cmVzKGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0KQogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKICAgICAg
ICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewogICAgICAgICAgICAgVXBk
YXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKLSAgICAgICAgICAgIGlmICghdGlsZSB8
fCAhdGlsZS0+dGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVy
ZUZvcm1hdCkpCisgICAgICAgICAgICBpZiAoIXRpbGUgfHwgIXRpbGUtPm1hbmFnZWRUZXh0dXJl
KCktPmlzVmFsaWQobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5yZXNl
cnZlKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCk7CisgICAgICAgICAgICB0
aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5yZXNlcnZlKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4
dHVyZUZvcm1hdCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zNDYsMTAgKzM0NCwxMCBAQCB2
b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0KQogICAgICAgICAgICAgaWYgKCF0aWxlKQogICAgICAgICAgICAgICAgIHRpbGUg
PSBjcmVhdGVUaWxlKGksIGopOwogCi0gICAgICAgICAgICBpZiAoIXRpbGUtPnRleHR1cmUoKS0+
aXNWYWxpZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKQorICAgICAgICAg
ICAgaWYgKCF0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVTaXpl
KCksIG1fdGV4dHVyZUZvcm1hdCkpCiAgICAgICAgICAgICAgICAgdGlsZS0+bV9kaXJ0eUxheWVy
UmVjdCA9IG1fdGlsZXItPnRpbGVMYXllclJlY3QodGlsZSk7CiAKLSAgICAgICAgICAgIGlmICgh
dGlsZS0+dGV4dHVyZSgpLT5yZXNlcnZlKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZv
cm1hdCkpIHsKKyAgICAgICAgICAgIGlmICghdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+cmVzZXJ2
ZShtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKSB7CiAgICAgICAgICAgICAg
ICAgbV9za2lwc0RyYXcgPSB0cnVlOwogICAgICAgICAgICAgICAgIGNsZWFudXBSZXNvdXJjZXMo
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0zNzQsNiArMzcyLDMxIEBAIHZvaWQgVGls
ZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QpCiAgICAgLy8gc28gd2UgZ3JhYiBhIGxvY2FsIHJlZmVyZW5jZSBoZXJlIHRvIGhvbGQgdGhl
IHVwZGF0ZXIgYWxpdmUgdW50aWwgdGhlIHBhaW50IGNvbXBsZXRlcy4KICAgICBSZWZQdHI8TGF5
ZXJUZXh0dXJlVXBkYXRlcj4gcHJvdGVjdG9yKHRleHR1cmVVcGRhdGVyKCkpOwogICAgIHRleHR1
cmVVcGRhdGVyKCktPnByZXBhcmVUb1VwZGF0ZShtX3BhaW50UmVjdCwgbV90aWxlci0+dGlsZVNp
emUoKSwgbV90aWxlci0+aGFzQm9yZGVyVGV4ZWxzKCkpOworCisgICAgbV90aWxlci0+Y29udGVu
dFJlY3RUb1RpbGVJbmRpY2VzKG1fcmVxdWVzdGVkVXBkYXRlUmVjdCwgbGVmdCwgdG9wLCByaWdo
dCwgYm90dG9tKTsKKyAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7Cisg
ICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKKyAgICAgICAgICAg
IFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CisgICAgICAgICAgICBpZiAoIXRp
bGUpCisgICAgICAgICAgICAgICAgdGlsZSA9IGNyZWF0ZVRpbGUoaSwgaik7CisgICAgICAgICAg
ICBlbHNlIGlmICghdGlsZS0+ZGlydHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGNvbnRlbnQtc3BhY2UgcmVjdGFuZ2xlIHRvIGNvcHkg
ZnJvbS4KKyAgICAgICAgICAgIEludFJlY3Qgc291cmNlUmVjdCA9IG1fdGlsZXItPnRpbGVDb250
ZW50UmVjdCh0aWxlKTsKKyAgICAgICAgICAgIGNvbnN0IEludFBvaW50IGFuY2hvciA9IHNvdXJj
ZVJlY3QubG9jYXRpb24oKTsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KG1fdGls
ZXItPmxheWVyUmVjdFRvQ29udGVudFJlY3QodGlsZS0+bV9kaXJ0eUxheWVyUmVjdCkpOworICAg
ICAgICAgICAgLy8gUGFpbnQgcmVjdCBub3QgZ3VhcmFudGVlZCB0byBsaW5lIHVwIG9uIHRpbGUg
Ym91bmRhcmllcywgc28KKyAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHNvdXJjZVJlY3Qg
ZG9lc24ndCBleHRlbmQgb3V0c2lkZSBvZiBpdC4KKyAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50
ZXJzZWN0KG1fcGFpbnRSZWN0KTsKKworICAgICAgICAgICAgdGlsZS0+bV91cGRhdGVSZWN0ID0g
c291cmNlUmVjdDsKKyAgICAgICAgICAgIGlmIChzb3VyY2VSZWN0LmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5wcmVw
YXJlUmVjdChzb3VyY2VSZWN0KTsKKyAgICAgICAgfQorICAgIH0KIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJl
VXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RleHR1cmVVcGRhdGVyLmNwcAppbmRleCA5ODQzNzBlZGE5NWM1MjNmNTllZTU1Yzg3YWM4
Mjg3MWUwMmE3M2JiLi44NzQ1YzRlYTBhNzEwYmRlMThlZGUxODIwZjMxNGZkYjhjYzg3MmFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcApAQCAtNDgsMTQgKzQ4LDEyIEBAIEND
VGV4dHVyZVVwZGF0ZXI6On5DQ1RleHR1cmVVcGRhdGVyKCkKIHsKIH0KIAotdm9pZCBDQ1RleHR1
cmVVcGRhdGVyOjphcHBlbmQoTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIExheWVyVGV4dHVyZVVw
ZGF0ZXIqIHVwZGF0ZXIsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3Qm
IGRlc3RSZWN0KQordm9pZCBDQ1RleHR1cmVVcGRhdGVyOjphcHBlbmQoTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3Qg
SW50UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgQVNTRVJUKHRleHR1cmUpOwotICAgIEFTU0VSVCh1
cGRhdGVyKTsKIAogICAgIFVwZGF0ZUVudHJ5IGVudHJ5OwogICAgIGVudHJ5Lm1fdGV4dHVyZSA9
IHRleHR1cmU7Ci0gICAgZW50cnkubV91cGRhdGVyID0gdXBkYXRlcjsKICAgICBlbnRyeS5tX3Nv
dXJjZVJlY3QgPSBzb3VyY2VSZWN0OwogICAgIGVudHJ5Lm1fZGVzdFJlY3QgPSBkZXN0UmVjdDsK
ICAgICBtX2VudHJpZXMuYXBwZW5kKGVudHJ5KTsKQEAgLTcxLDcgKzY5LDcgQEAgYm9vbCBDQ1Rl
eHR1cmVVcGRhdGVyOjp1cGRhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHNpemVfdCBj
b3VudCkKICAgICBzaXplX3QgbWF4SW5kZXggPSBtaW4obV9lbnRyeUluZGV4ICsgY291bnQsIG1f
ZW50cmllcy5zaXplKCkpOwogICAgIGZvciAoOyBtX2VudHJ5SW5kZXggPCBtYXhJbmRleDsgKytt
X2VudHJ5SW5kZXgpIHsKICAgICAgICAgVXBkYXRlRW50cnkmIGVudHJ5ID0gbV9lbnRyaWVzW21f
ZW50cnlJbmRleF07Ci0gICAgICAgIGVudHJ5Lm1fdXBkYXRlci0+dXBkYXRlVGV4dHVyZVJlY3Qo
Y29udGV4dCwgbV9hbGxvY2F0b3IsIGVudHJ5Lm1fdGV4dHVyZSwgZW50cnkubV9zb3VyY2VSZWN0
LCBlbnRyeS5tX2Rlc3RSZWN0KTsKKyAgICAgICAgZW50cnkubV90ZXh0dXJlLT51cGRhdGVSZWN0
KGNvbnRleHQsIG1fYWxsb2NhdG9yLCBlbnRyeS5tX3NvdXJjZVJlY3QsIGVudHJ5Lm1fZGVzdFJl
Y3QpOwogICAgIH0KIAogICAgIGlmIChtYXhJbmRleCA8IG1fZW50cmllcy5zaXplKCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Rl
eHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgKaW5kZXggMTdiOGFhZmEwNmNlN2E2ZDIwYTBlNWZiNGM5
MTRlNzJmYzkzOTRhMS4uYmY3OWFjOWMyZTIyZWZjNWVkYTlhNjQ4MjllMmVmY2NlYzE1YmIzMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUZXh0dXJlVXBkYXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaApAQCAtMjcsMTMgKzI3LDEyIEBACiAjZGVm
aW5lIENDVGV4dHVyZVVwZGF0ZXJfaAogCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUg
IkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7Ci1jbGFzcyBMYXllclRl
eHR1cmVVcGRhdGVyOwotY2xhc3MgTWFuYWdlZFRleHR1cmU7CiBjbGFzcyBUZXh0dXJlQWxsb2Nh
dG9yOwogCiBjbGFzcyBDQ1RleHR1cmVVcGRhdGVyIHsKQEAgLTQxLDcgKzQwLDcgQEAgcHVibGlj
OgogICAgIENDVGV4dHVyZVVwZGF0ZXIoVGV4dHVyZUFsbG9jYXRvciopOwogICAgIH5DQ1RleHR1
cmVVcGRhdGVyKCk7CiAKLSAgICB2b2lkIGFwcGVuZChNYW5hZ2VkVGV4dHVyZSosIExheWVyVGV4
dHVyZVVwZGF0ZXIqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBk
ZXN0UmVjdCk7CisgICAgdm9pZCBhcHBlbmQoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSos
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKIAog
ICAgIGJvb2wgaGFzTW9yZVVwZGF0ZXMoKSBjb25zdDsKIApAQCAtNTQsOCArNTMsNyBAQCBwdWJs
aWM6CiAKIHByaXZhdGU6CiAgICAgc3RydWN0IFVwZGF0ZUVudHJ5IHsKLSAgICAgICAgTWFuYWdl
ZFRleHR1cmUqIG1fdGV4dHVyZTsKLSAgICAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlciogbV91cGRh
dGVyOworICAgICAgICBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiBtX3RleHR1cmU7CiAg
ICAgICAgIEludFJlY3QgbV9zb3VyY2VSZWN0OwogICAgICAgICBJbnRSZWN0IG1fZGVzdFJlY3Q7
CiAgICAgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114419</attachid>
            <date>2011-11-09 19:01:38 -0800</date>
            <delta_ts>2011-11-17 12:05:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71388-20111109190137.patch</filename>
            <type>text/plain</type>
            <size>68374</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk3NDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxZjY5NmMwZjliMTk3MjQ5
NzU3ZmRjYmQ4NjA0NGFmOGQ2ZjBhMjA1Li41MDRmNzNkMzJiM2RmODk0OTE4M2Y2ZDk5ZjE3NTIw
YjM3NzJlNzZjIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAKKzIwMTEtMTEtMDkgIERhdmlk
IFJldmVtYW4gIDxyZXZlbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEFk
ZCBzdXBwb3J0IGZvciBwYWludGluZyBpbnRvIGFuIFNrUGljdHVyZSBhbmQgdGhlbiByYXN0ZXJp
emluZyBpbnRvIHRpbGUtc2l6ZWQgY2h1bmtzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEzODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgVXBkYXRhYmxlVGV4dHVyZSBjbGFzcywgd2hpY2ggYWxs
b3dzIHRleHR1cmUgdXBkYXRlciB0bworICAgICAgICBhbGxvY2F0ZSB0aWxlIHNwZWNpZmljIHJl
c291cmNlcyBhbmQgcGFpbnQgdGlsZXMgc2VwYXJhdGVseS4KKyAgICAgICAgUmVuYW1lIHRleHR1
cmUgdXBsb2FkZXIgY2xhc3NlcyBhbmQgbW92ZSB0aGVtIHRvIHNlcGFyYXRlIGZpbGVzLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cy4gQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAg
ICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9C
aXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmU6On5UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmU6OnVwZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6fkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpzYW1wbGVkVGV4ZWxG
b3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZVRleHR1cmVSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4
dHVyZVVwZGF0ZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmU6OnRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6Om9yaWVudGF0aW9uKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFz
LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyOjpGcmFtZUJ1ZmZlcjo6RnJhbWVC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVCdWZmZXI6OkZyYW1lQnVmZmVyOjp+RnJh
bWVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVCdWZmZXI6OkZyYW1lQnVmZmVyOjpp
bml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6
On5UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6dXBkYXRlUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI6OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI6On5GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVm
ZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6c2FtcGxlZFRleGVsRm9ybWF0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6dXBkYXRlVGV4dHVyZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclRleHR1cmVVcGRhdGVyLmguCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnRleHR1cmVVcGRhdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6b3JpZW50YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxh
eWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OlRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjp1cGRhdGVSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6dGV4dHVyZVVwZGF0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGVU
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJl
cGFyZVRvVXBkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmU6On5UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4
dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6cHJlcGFyZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oLgorICAgICAgICAoV2Vi
Q29yZTo6U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpTa1BpY3R1cmVDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyOjp+U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcik6
CisgICAgICAgIChXZWJDb3JlOjpTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpw
cmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2tQaWN0dXJlQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6ZHJhd1BpY3R1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJl
VXBkYXRlci5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVcGRhdGFibGVUaWxlOjpVcGRhdGFi
bGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0YWJsZVRpbGU6OnRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6VXBkYXRhYmxlVGlsZTo6bWFuYWdlZFRleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToK
KyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6
CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZVRpbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VGlsZVRleHR1cmVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXI6OmFwcGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaDoKKwogMjAxMS0xMS0w
OSAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBj
cmFzaCB3aGVuIGFjY2Vzc2luZyBzZWxlY3RlZFRhYiBpbiBhIHRhYiBsaXN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggNDgyNmM1YTU4ODRkZGQ5MWE5ZDZiZDQ5YWRjMTEyZTg0NThhNTE1Mi4uYWZmN2Ji
NjhkMTYzNDI0YzE5OThlN2RlZDBlY2ZjYzgyMGQ1NDdkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAt
MzQ1MiwxMCArMzQ1MiwxNCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL1Bh
dGhDRy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL1RyYW5zZm9ybWF0aW9uTWF0
cml4Q0cuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRt
YXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21p
dW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMy
RExheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcGxl
eFRleHRDb250cm9sbGVyTGludXguY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAnLApAQCAt
MzQ3Niw2ICszNDgwLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250UmVuZGVyU3R5bGUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5oJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5kaW5nLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5k
aW5nLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFn
ZVRyZWVOb2RlQ2hyb21pdW1XaW4uY3BwJywKQEAgLTM0OTksOCArMzUwNSw2IEBACiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVT
dWJJbWFnZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVVcGRhdGVyLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL05vbkNvbXBvc2l0ZWRDb250ZW50SG9z
dC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL05vbkNvbXBv
c2l0ZWRDb250ZW50SG9zdC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9NZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oJywKQEAgLTM1MjIsNiArMzUyNiw4IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0u
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERh
dGFDaHJvbWl1bVdpbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1NpbXBsZUZvbnREYXRhTGludXguY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1h
cENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMDcxZGU2NDg0MzhhZDMyYzBjNGU2ZWM4OWMzOGY2NWFhODEzNTQ5NQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Jp
dG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisKKyNpbmNsdWRlICJCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCisKKyNp
bmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29sb3Iu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjpUZXh0dXJlOjpUZXh0dXJlKEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIHRl
eHR1cmVVcGRhdGVyLCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiB0ZXh0dXJlKQorICAgIDog
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSh0ZXh0dXJlKQorICAgICwgbV90ZXh0dXJlVXBk
YXRlcih0ZXh0dXJlVXBkYXRlcikKK3sKK30KKworQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZTo6flRleHR1cmUoKQoreworfQorCit2b2lkIEJpdG1hcENhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit7CisgICAgdGV4dHVyZVVwZGF0ZXIoKS0+
dXBkYXRlVGV4dHVyZVJlY3QoY29udGV4dCwgYWxsb2NhdG9yLCB0ZXh0dXJlKCksIHNvdXJjZVJl
Y3QsIGRlc3RSZWN0KTsKK30KKworUGFzc1JlZlB0cjxCaXRtYXBDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyPiBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUoUGFzc093blB0
cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlciwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIocGFpbnRlciwgdXNlTWFwVGV4U3ViSW1hZ2UpKTsKK30KKworQml0bWFwQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3duUHRy
PExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyLCBib29sIHVzZU1hcFRleFN1YkltYWdlKQor
ICAgIDogQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihwYWludGVyKQorICAgICwgbV90ZXhTdWJJ
bWFnZSh1c2VNYXBUZXhTdWJJbWFnZSkKK3sKK30KKworQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6fkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoKQoreworfQorCitQYXNz
UmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IEJpdG1hcENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI6OmNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlKHRoaXMsIE1hbmFnZWRUZXh0dXJlOjpjcmVh
dGUobWFuYWdlcikpKTsKK30KKworTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9y
bWF0IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnNhbXBsZWRUZXhlbEZvcm1hdChH
QzNEZW51bSB0ZXh0dXJlRm9ybWF0KQoreworICAgIC8vIFRoZSBjb21wb25lbnQgb3JkZXIgbWF5
IGJlIGJncmEgaWYgd2UgdXBsb2FkZWQgYmdyYSBwaXhlbHMgdG8gcmdiYSB0ZXh0dXJlcy4KKyAg
ICByZXR1cm4gUGxhdGZvcm1Db2xvcjo6c2FtZUNvbXBvbmVudE9yZGVyKHRleHR1cmVGb3JtYXQp
ID8KKyAgICAgICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdFJH
QkEgOiBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRCR1JBOworfQorCit2
b2lkIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZShjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3Jk
ZXJUZXhlbHMpCit7CisgICAgbV90ZXhTdWJJbWFnZS5zZXRTdWJJbWFnZVNpemUodGlsZVNpemUp
OworCisgICAgbV9jYW52YXMucmVzaXplKGNvbnRlbnRSZWN0LnNpemUoKSk7CisgICAgLy8gQXNz
dW1wdGlvbjogaWYgYSB0aWxlciBpcyB1c2luZyBib3JkZXIgdGV4ZWxzLCB0aGVuIGl0IGlzIGJl
Y2F1c2UgdGhlCisgICAgLy8gbGF5ZXIgaXMgbGlrZWx5IHRvIGJlIGZpbHRlcmVkIG9yIHRyYW5z
Zm9ybWVkLiBCZWNhdXNlIG9mIGl0IG1pZ2h0IGJlCisgICAgLy8gdHJhbnNmb3JtZWQsIGRyYXcg
dGhlIHRleHQgaW4gZ3JheXNjYWxlIGluc3RlYWQgb2Ygc3VicGl4ZWwgYW50aWFsaWFzaW5nLgor
ICAgIFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpUZXh0T3B0aW9uIHRleHRPcHRpb24gPQorICAg
ICAgICBib3JkZXJUZXhlbHMgPyBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6R3JheXNjYWxlVGV4
dCA6IFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpTdWJwaXhlbFRleHQ7CisgICAgUGxhdGZvcm1D
YW52YXM6OlBhaW50ZXIgY2FudmFzUGFpbnRlcigmbV9jYW52YXMsIHRleHRPcHRpb24pOworICAg
IHBhaW50Q29udGVudHMoKmNhbnZhc1BhaW50ZXIuY29udGV4dCgpLCBjb250ZW50UmVjdCk7Cit9
CisKK3ZvaWQgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBkYXRlVGV4dHVyZVJl
Y3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRv
ciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFJlY3QmIGRlc3RSZWN0KQoreworICAgIFBsYXRmb3JtQ2FudmFzOjpBdXRvTG9ja2Vy
IGxvY2tlcigmbV9jYW52YXMpOworCisgICAgdGV4dHVyZS0+YmluZFRleHR1cmUoY29udGV4dCwg
YWxsb2NhdG9yKTsKKyAgICBtX3RleFN1YkltYWdlLnVwbG9hZChsb2NrZXIucGl4ZWxzKCksIGNv
bnRlbnRSZWN0KCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0LCB0ZXh0dXJlLT5mb3JtYXQoKSwgY29u
dGV4dCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjc1ZGRkZDViNDliMjFjMGY3NWI4ZmE0MjI4OWNj
MmYxMGU1NGE0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAtMCww
ICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXJfaAorI2RlZmluZSBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyX2gKKworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJMYXllclRleHR1cmVTdWJJbWFnZS5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtQ2FudmFzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGF5ZXJQ
YWludGVyQ2hyb21pdW07CisKKy8vIEEgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciB3aXRoIGFu
IGludGVybmFsIGJpdG1hcC4KK2NsYXNzIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIg
OiBwdWJsaWMgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciB7CitwdWJsaWM6CisgICAgY2xhc3Mg
VGV4dHVyZSA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFRleHR1cmUoQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciosIFBh
c3NPd25QdHI8TWFuYWdlZFRleHR1cmU+KTsKKyAgICAgICAgdmlydHVhbCB+VGV4dHVyZSgpOwor
CisgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4
dHVyZUFsbG9jYXRvciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3Qm
IGRlc3RSZWN0KTsKKworICAgIHByaXZhdGU6CisgICAgICAgIEJpdG1hcENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgeyByZXR1cm4gbV90ZXh0dXJlVXBkYXRlcjsg
fQorCisgICAgICAgIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIG1fdGV4dHVyZVVw
ZGF0ZXI7CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJpdG1hcENhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXI+IGNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiwg
Ym9vbCB1c2VNYXBUZXhTdWJJbWFnZSk7CisgICAgdmlydHVhbCB+Qml0bWFwQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcigpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPExheWVyVGV4dHVyZVVw
ZGF0ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKTsKKyAgICB2aXJ0
dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6Qm90dG9tVXBPcmllbnRhdGlvbjsgfQorICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0
IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKKyAgICB2aXJ0dWFs
IHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJ
bnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscyk7CisgICAgdm9pZCB1cGRhdGVUZXh0
dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBNYW5hZ2VkVGV4
dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0
KTsKKworcHJpdmF0ZToKKyAgICBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBhc3NP
d25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+LCBib29sIHVzZU1hcFRleFN1YkltYWdlKTsKKwor
ICAgIFBsYXRmb3JtQ2FudmFzIG1fY2FudmFzOworICAgIExheWVyVGV4dHVyZVN1YkltYWdlIG1f
dGV4U3ViSW1hZ2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2VuZGlmIC8vIEJpdG1hcENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hM2U4ZjdiN2JmM2Q2MDA4ZGViMGM2MzhhYTM3MTE1Zjk3YTJhNmJhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorCisjaW5jbHVkZSAiQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKKyNp
bmNsdWRlICJUcmFjZUV2ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3duUHRyPExh
eWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyKQorICAgIDogbV9wYWludGVyKHBhaW50ZXIpCit7
Cit9CisKK0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6On5DYW52YXNMYXllclRleHR1cmVVcGRh
dGVyKCkKK3sKK30KKwordm9pZCBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwYWludENvbnRl
bnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qp
Cit7CisgICAgY29udGV4dC50cmFuc2xhdGUoLWNvbnRlbnRSZWN0LngoKSwgLWNvbnRlbnRSZWN0
LnkoKSk7CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6cGFpbnQiLCB0aGlzLCAwKTsKKyAgICAgICAgbV9wYWludGVyLT5wYWludChjb250ZXh0
LCBjb250ZW50UmVjdCk7CisgICAgfQorICAgIG1fY29udGVudFJlY3QgPSBjb250ZW50UmVjdDsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mZDc5YTA0ZDBhMzZkNzk2YTRlN2YzMzQzMzE3MmE4MjA0YmMxNDllCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5k
ZWYgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcl9oCisjZGVmaW5lIENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXJfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVk
ZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgTGF5ZXJQYWludGVyQ2hyb21pdW07CisKKy8vIEEg
TGF5ZXJUZXh0dXJlVXBkYXRlciB3aXRoIGFuIGludGVybmFsIGNhbnZhcy4KK2NsYXNzIENhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlciB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB+Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcigpOworCitwcm90ZWN0
ZWQ6CisgICAgZXhwbGljaXQgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3duUHRyPExh
eWVyUGFpbnRlckNocm9taXVtPik7CisKKyAgICB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworICAgIGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50UmVjdDsgfQorCitwcml2YXRl
OgorICAgIEludFJlY3QgbV9jb250ZW50UmVjdDsKKyAgICBPd25QdHI8TGF5ZXJQYWludGVyQ2hy
b21pdW0+IG1fcGFpbnRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAv
LyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjZW5kaWYgLy8gQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggY2E4
YjNiZDc2MWYwODE1ZTQ3YjZjZmIwNDkxYTFkOTcyODc5ZjA0Yy4uZGIwYWU0Njk5ZTc4OTY5MmY1
MWM0MGI4Y2RlNzY0ODRmZDFjNGFhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmNwcApAQCAtMzQsOSArMzQsMTAgQEAKIAogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVt
LmgiCiAKKyNpbmNsdWRlICJCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCisjaW5j
bHVkZSAiRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCiAj
aW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVy
Q2hyb21pdW0uaCIKLSNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Lmgi
CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkBAIC0xMjIsMTIgKzEyMywxMiBAQCB2b2lk
IENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVy
VHJlZUhvc3QqIGhvc3QpCiB7CiAjaWYgVVNFKFNLSUEpCiAgICAgaWYgKGhvc3QtPnNldHRpbmdz
KCkuYWNjZWxlcmF0ZVBhaW50aW5nKSB7Ci0gICAgICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBMYXll
clRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpjcmVhdGUoQ29udGVudExheWVyUGFpbnRlcjo6Y3Jl
YXRlKG1fZGVsZWdhdGUpKTsKKyAgICAgICAgbV90ZXh0dXJlVXBkYXRlciA9IEZyYW1lQnVmZmVy
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKENvbnRlbnRMYXllclBh
aW50ZXI6OmNyZWF0ZShtX2RlbGVnYXRlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5k
aWYgLy8gVVNFKFNLSUEpCiAKLSAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBk
YXRlckJpdG1hcDo6Y3JlYXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX2RlbGVnYXRl
KSwgaG9zdC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nTWFwU3ViKTsKKyAgICBt
X3RleHR1cmVVcGRhdGVyID0gQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRl
KENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX2RlbGVnYXRlKSwgaG9zdC0+bGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcygpLnVzaW5nTWFwU3ViKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1
cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTk0NWUwNjQ5Y2MwZGMyNmI2MjVmYjNlNGY1N2FmZTk4
MGQ3YjZlOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
ci5jcHAKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoU0tJQSkKKworI2luY2x1
ZGUgIkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorCisj
aW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJTa0NhbnZhcy5oIgor
I2luY2x1ZGUgIlNrR3B1RGV2aWNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNw
YWNlIHsKKworY2xhc3MgRnJhbWVCdWZmZXIgeworcHVibGljOgorICAgIEZyYW1lQnVmZmVyKCk7
CisgICAgfkZyYW1lQnVmZmVyKCk7CisKKyAgICBTa0NhbnZhcyogaW5pdGlhbGl6ZShHcmFwaGlj
c0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBNYW5hZ2VkVGV4dHVyZSopOworCitwcml2
YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CisgICAgUGxhdGZvcm0zRE9i
amVjdCBtX2ZibzsKKyAgICBPd25QdHI8U2tDYW52YXM+IG1fY2FudmFzOworfTsKKworRnJhbWVC
dWZmZXI6OkZyYW1lQnVmZmVyKCkKKyAgICA6IG1fY29udGV4dCgwKQorICAgICwgbV9mYm8oMCkK
K3sKK30KKworRnJhbWVCdWZmZXI6On5GcmFtZUJ1ZmZlcigpCit7CisgICAgbV9jYW52YXMuY2xl
YXIoKTsKKworICAgIGlmIChtX2ZibykKKyAgICAgICAgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1
ZmZlcihtX2Zibyk7Cit9CisKK1NrQ2FudmFzKiBGcmFtZUJ1ZmZlcjo6aW5pdGlhbGl6ZShHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBNYW5h
Z2VkVGV4dHVyZSogdGV4dHVyZSkKK3sKKyAgICBtX2NvbnRleHQgPSBjb250ZXh0OworICAgIG1f
ZmJvID0gbV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIG1fY29udGV4dC0+Ymlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAg
IHRleHR1cmUtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKG1fY29udGV4dCwgYWxsb2NhdG9yKTsKKwor
ICAgIC8vIENyZWF0ZSBhIHNraWEgZ3B1IGNhbnZhcy4KKyAgICBHckNvbnRleHQqIGdyQ29udGV4
dCA9IG1fY29udGV4dC0+Z3JDb250ZXh0KCk7CisgICAgSW50U2l6ZSBjYW52YXNTaXplID0gdGV4
dHVyZS0+c2l6ZSgpOworICAgIEdyUGxhdGZvcm1TdXJmYWNlRGVzYyB0YXJnZXREZXNjOworICAg
IHRhcmdldERlc2MucmVzZXQoKTsKKyAgICB0YXJnZXREZXNjLmZTdXJmYWNlVHlwZSA9IGtUZXh0
dXJlUmVuZGVyVGFyZ2V0X0dyUGxhdGZvcm1TdXJmYWNlVHlwZTsKKyAgICB0YXJnZXREZXNjLmZS
ZW5kZXJUYXJnZXRGbGFncyA9IGtOb25lX0dyUGxhdGZvcm1SZW5kZXJUYXJnZXRGbGFnQml0Owor
ICAgIHRhcmdldERlc2MuZldpZHRoID0gY2FudmFzU2l6ZS53aWR0aCgpOworICAgIHRhcmdldERl
c2MuZkhlaWdodCA9IGNhbnZhc1NpemUuaGVpZ2h0KCk7CisgICAgdGFyZ2V0RGVzYy5mQ29uZmln
ID0ga1JHQkFfODg4OF9HclBpeGVsQ29uZmlnOworICAgIHRhcmdldERlc2MuZlN0ZW5jaWxCaXRz
ID0gODsKKyAgICB0YXJnZXREZXNjLmZQbGF0Zm9ybVRleHR1cmUgPSB0ZXh0dXJlLT50ZXh0dXJl
SWQoKTsKKyAgICB0YXJnZXREZXNjLmZQbGF0Zm9ybVJlbmRlclRhcmdldCA9IG1fZmJvOworICAg
IFNrQXV0b1RVbnJlZjxHclRleHR1cmU+IHRhcmdldChzdGF0aWNfY2FzdDxHclRleHR1cmUqPihn
ckNvbnRleHQtPmNyZWF0ZVBsYXRmb3JtU3VyZmFjZSh0YXJnZXREZXNjKSkpOworICAgIFNrQXV0
b1RVbnJlZjxTa0RldmljZT4gZGV2aWNlKG5ldyBTa0dwdURldmljZShnckNvbnRleHQsIHRhcmdl
dC5nZXQoKSkpOworICAgIG1fY2FudmFzID0gYWRvcHRQdHIobmV3IFNrQ2FudmFzKGRldmljZS5n
ZXQoKSkpOworCisgICAgcmV0dXJuIG1fY2FudmFzLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZQorCitGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmU6OlRleHR1cmUoRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
KiB0ZXh0dXJlVXBkYXRlciwgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4dHVyZSkKKyAg
ICA6IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUodGV4dHVyZSkKKyAgICAsIG1fdGV4dHVy
ZVVwZGF0ZXIodGV4dHVyZVVwZGF0ZXIpCit7Cit9CisKK0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6flRleHR1cmUoKQoreworfQorCit2b2lk
IEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6
dXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciog
YWxsb2NhdG9yLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0
UmVjdCkKK3sKKyAgICB0ZXh0dXJlVXBkYXRlcigpLT51cGRhdGVUZXh0dXJlUmVjdChjb250ZXh0
LCBhbGxvY2F0b3IsIHRleHR1cmUoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QpOworfQorCitQYXNz
UmVmUHRyPEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcj4gRnJh
bWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUoUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcikKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihwYWlu
dGVyKSk7Cit9CisKK0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6RnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBhc3NPd25Q
dHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIpCisgICAgOiBTa1BpY3R1cmVDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyKHBhaW50ZXIpCit7Cit9CisKK0ZyYW1lQnVmZmVyU2tQaWN0dXJl
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6fkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcigpCit7Cit9CisKK1Bhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRl
cjo6VGV4dHVyZT4gRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
OjpjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKQoreworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgVGV4dHVyZSh0aGlzLCBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1hbmFnZXIp
KSk7Cit9CisKK0xheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBGcmFtZUJ1
ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnNhbXBsZWRUZXhlbEZvcm1h
dChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KQoreworICAgIC8vIEhlcmUgd2UgZGlyZWN0bHkgcmVu
ZGVyIHRvIHRoZSB0ZXh0dXJlLCBzbyB0aGUgY29tcG9uZW50IG9yZGVyIGlzIGFsd2F5cyBjb3Jy
ZWN0LgorICAgIHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRS
R0JBOworfQorCit2b2lkIEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1
cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQoreworICAgIC8vIE1h
a2Ugc3VyZSBTS0lBIHVzZXMgdGhlIGNvcnJlY3QgR0wgY29udGV4dC4KKyAgICBjb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAvLyBOb3RpZnkgU0tJQSB0byBzeW5jIGl0cyBpbnRl
cm5hbCBHTCBzdGF0ZS4KKyAgICBjb250ZXh0LT5nckNvbnRleHQoKS0+cmVzZXRDb250ZXh0KCk7
CisKKyAgICAvLyBDcmVhdGUgYW4gYWNjZWxlcmF0ZWQgY2FudmFzIHRvIGRyYXcgb24uCisgICAg
RnJhbWVCdWZmZXIgYnVmZmVyOworICAgIFNrQ2FudmFzKiBjYW52YXMgPSBidWZmZXIuaW5pdGlh
bGl6ZShjb250ZXh0LCBhbGxvY2F0b3IsIHRleHR1cmUpOworCisgICAgY2FudmFzLT5jbGlwUmVj
dChTa1JlY3QoZGVzdFJlY3QpKTsKKyAgICAvLyBUcmFuc2xhdGUgdGhlIG9yaWdpbiBvZiBjb250
ZW50UmVjdCB0byB0aGF0IG9mIGRlc3RSZWN0LgorICAgIC8vIE5vdGUgdGhhdCBkZXN0UmVjdCBp
cyBkZWZpbmVkIHJlbGF0aXZlIHRvIHNvdXJjZVJlY3QuCisgICAgY2FudmFzLT50cmFuc2xhdGUo
Y29udGVudFJlY3QoKS54KCkgLSBzb3VyY2VSZWN0LngoKSArIGRlc3RSZWN0LngoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICBjb250ZW50UmVjdCgpLnkoKSAtIHNvdXJjZVJlY3QueSgpICsgZGVz
dFJlY3QueSgpKTsKKyAgICBkcmF3UGljdHVyZShjYW52YXMpOworCisgICAgLy8gRmx1c2ggU0tJ
QSBjb250ZXh0IHNvIHRoYXQgYWxsIHRoZSByZW5kZXJlZCBzdHVmZiBhcHBlYXJzIG9uIHRoZSB0
ZXh0dXJlLgorICAgIGNvbnRleHQtPmdyQ29udGV4dCgpLT5mbHVzaCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKFNLSUEpCisjZW5kaWYgLy8gVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFt
ZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
ZDM3NjhjZWQxODgzODQ3YzJjY2QwOGM1MWQwZDA0MmI5OWIzZTE2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJT
a1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTAsMCArMSw2NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKworI2lmbmRlZiBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXJfaAorI2RlZmluZSBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXJfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIFVTRShTS0lBKQor
CisjaW5jbHVkZSAiU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlciA6IHB1YmxpYyBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
IHsKK3B1YmxpYzoKKyAgICBjbGFzcyBUZXh0dXJlIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0
ZXI6OlRleHR1cmUgeworICAgIHB1YmxpYzoKKyAgICAgICAgVGV4dHVyZShGcmFtZUJ1ZmZlclNr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqLCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0
dXJlPik7CisgICAgICAgIHZpcnR1YWwgflRleHR1cmUoKTsKKworICAgICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CisKKyAgICBw
cml2YXRlOgorICAgICAgICBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgeyByZXR1cm4gbV90ZXh0dXJlVXBkYXRlcjsgfQorCisg
ICAgICAgIEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciogbV90
ZXh0dXJlVXBkYXRlcjsKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RnJhbWVCdWZm
ZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyPiBjcmVhdGUoUGFzc093blB0cjxM
YXllclBhaW50ZXJDaHJvbWl1bT4pOworICAgIHZpcnR1YWwgfkZyYW1lQnVmZmVyU2tQaWN0dXJl
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcigpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPExh
eWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIq
KTsKKyAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4gTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6VG9wRG93bk9yaWVudGF0aW9uOyB9CisgICAgdmlydHVhbCBTYW1wbGVk
VGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpOwor
ICAgIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxs
b2NhdG9yKiwgTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRSZWN0JiBkZXN0UmVjdCk7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgRnJhbWVCdWZm
ZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWlu
dGVyQ2hyb21pdW0+KTsKK307Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNF
KFNLSUEpCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2VuZGlmIC8v
IEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcl9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VMYXllckNocm9taXVtLmNwcAppbmRleCAzNjMzNjI5NjdhY2NkZWJjMjU1OWUyOWMyNGQ0
M2MxYzg4ODgwMzE3Li4wYmQ4MmFlMWExOGEyNTMwZjg3NDIwZTQ4MWQwZDVjYTIzMGI5MDEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTQ2LDYgKzQ2LDI1IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGlj
IExheWVyVGV4dHVyZVVwZGF0ZXIgewogcHVibGljOgorICAgIGNsYXNzIFRleHR1cmUgOiBwdWJs
aWMgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSB7CisgICAgcHVibGljOgorICAgICAgICBU
ZXh0dXJlKEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIsIFBhc3NPd25Q
dHI8TWFuYWdlZFRleHR1cmU+IHRleHR1cmUpCisgICAgICAgICAgICA6IExheWVyVGV4dHVyZVVw
ZGF0ZXI6OlRleHR1cmUodGV4dHVyZSkKKyAgICAgICAgICAgICwgbV90ZXh0dXJlVXBkYXRlcih0
ZXh0dXJlVXBkYXRlcikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0
b3IqIGFsbG9jYXRvciwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYg
ZGVzdFJlY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRleHR1cmVVcGRhdGVyKCktPnVwZGF0
ZVRleHR1cmVSZWN0KGNvbnRleHQsIGFsbG9jYXRvciwgdGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBk
ZXN0UmVjdCk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEltYWdlTGF5ZXJU
ZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSB7IHJldHVybiBtX3RleHR1cmVVcGRhdGVy
OyB9CisKKyAgICAgICAgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKiBtX3RleHR1cmVVcGRhdGVy
OworICAgIH07CisKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZUxheWVyVGV4dHVyZVVwZGF0
ZXI+IGNyZWF0ZShib29sIHVzZU1hcFRleFN1YkltYWdlKQogICAgIHsKICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIodXNlTWFwVGV4U3ViSW1hZ2Up
KTsKQEAgLTUzLDYgKzcyLDExIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfkltYWdlTGF5ZXJU
ZXh0dXJlVXBkYXRlcigpIHsgfQogCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPExheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmUodGhpcywgTWFuYWdl
ZFRleHR1cmU6OmNyZWF0ZShtYW5hZ2VyKSkpOworICAgIH0KKwogICAgIHZpcnR1YWwgT3JpZW50
YXRpb24gb3JpZW50YXRpb24oKSB7IHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpCb3R0b21V
cE9yaWVudGF0aW9uOyB9CiAKICAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVk
VGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkKQEAgLTYxLDcgKzg1LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZv
cm1hdFJHQkEgOiBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRCR1JBOwog
ICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYg
Y29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgLyogYm9yZGVyVGV4ZWxz
ICovKQorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgLyog
Y29udGVudFJlY3QgKi8sIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgLyogYm9yZGVyVGV4
ZWxzICovKQogICAgIHsKICAgICAgICAgbV90ZXhTdWJJbWFnZS5zZXRTdWJJbWFnZVNpemUodGls
ZVNpemUpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4
IGRmMjU0MzU2YmRiZDYxZjgyZDkyMWU4ZTljMGRjZWVjOWFhNWU4YTIuLmQ4Njg5NmU5MTE3YjMy
NDBmYWUxY2IzNzlkNDkzZmQ5ZjVlMzY2ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcApAQCAtMzUsMTMgKzM1LDEzIEBACiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmgiCiAKICNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRl
ICJDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJHZW9tZXRyeUJpbmRp
bmcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkxh
eWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaCIKICNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgog
I2luY2x1ZGUgIk5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKaW5kZXggM2Q4NTk3ZTM5ZTg1
ZDRjYmYwMTU2ZDVjYzExNzk0Njc5NTM3MTI0Zi4uNDUyNWNlN2ViMTFjOWM1NmVlMWQyNzg1MmYw
NzJmMzk1NWM4MTFlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAtMjksNiAr
MjksNyBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCisjaW5jbHVkZSAi
TWFuYWdlZFRleHR1cmUuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC0zNywxMSArMzgsMjYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgSW50
U2l6ZTsKLWNsYXNzIE1hbmFnZWRUZXh0dXJlOwogY2xhc3MgVGV4dHVyZUFsbG9jYXRvcjsKK2Ns
YXNzIFRleHR1cmVNYW5hZ2VyOwogCiBjbGFzcyBMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGlj
IFJlZkNvdW50ZWQ8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gewogcHVibGljOgorICAgIC8vIEFsbG93
cyB0ZXh0dXJlIHVwbG9hZGVycyB0byBzdG9yZSBwZXItdGlsZSByZXNvdXJjZXMuCisgICAgY2xh
c3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmU+IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHZpcnR1YWwgflRleHR1cmUoKSB7IH0KKworICAgICAgICBNYW5hZ2VkVGV4dHVyZSog
dGV4dHVyZSgpIHsgcmV0dXJuIG1fdGV4dHVyZS5nZXQoKTsgfQorICAgICAgICB2aXJ0dWFsIHZv
aWQgcHJlcGFyZVJlY3QoY29uc3QgSW50UmVjdCYgLyogc291cmNlUmVjdCAqLykgeyB9CisgICAg
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFs
bG9jYXRvciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RS
ZWN0KSA9IDA7CisgICAgcHJvdGVjdGVkOgorICAgICAgICBleHBsaWNpdCBUZXh0dXJlKFBhc3NP
d25QdHI8TWFuYWdlZFRleHR1cmU+IHRleHR1cmUpIDogbV90ZXh0dXJlKHRleHR1cmUpIHsgfQor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBtX3RleHR1cmU7
CisgICAgfTsKKwogICAgIHZpcnR1YWwgfkxheWVyVGV4dHVyZVVwZGF0ZXIoKSB7IH0KIAogICAg
IGVudW0gT3JpZW50YXRpb24gewpAQCAtNTQsNiArNzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIFNh
bXBsZWRUZXhlbEZvcm1hdEJHUkEsCiAgICAgICAgIFNhbXBsZWRUZXhlbEZvcm1hdEludmFsaWQs
CiAgICAgfTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VGV4dHVyZT4gY3JlYXRlVGV4dHVyZShU
ZXh0dXJlTWFuYWdlciopID0gMDsKICAgICAvLyBSZXR1cm5zIHRoZSBvcmllbnRhdGlvbiBvZiB0
aGUgdGV4dHVyZSB1cGxvYWRlZCBieSB0aGlzIGludGVyZmFjZS4KICAgICB2aXJ0dWFsIE9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKCkgPSAwOwogICAgIC8vIFJldHVybnMgdGhlIGZvcm1hdCBvZiB0
aGUgdGV4ZWwgdXBsb2FkZWQgYnkgdGhpcyBpbnRlcmZhY2UuCkBAIC02MSw4ICs3OCw3IEBAIHB1
YmxpYzoKICAgICAvLyBUaGlzIGZvcm1hdCBzcGVjaWZpZXMgdGhlIGNvbXBvbmVudCBvcmRlciBp
biB0aGUgc2FtcGxlZCB0ZXhlbC4KICAgICAvLyBJZiB0aGUgZm9ybWF0IGlzIFRleGVsRm9ybWF0
QkdSQSwgdmVjNC54IGlzIGJsdWUgYW5kIHZlYzQueiBpcyByZWQuCiAgICAgdmlydHVhbCBTYW1w
bGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscykgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCos
IFRleHR1cmVBbGxvY2F0b3IqLCBNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBy
ZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiAvKiBjb250ZW50UmVjdCAqLywgY29uc3QgSW50
U2l6ZSYgLyogdGlsZVNpemUgKi8sIGludCAvKiBib3JkZXJUZXhlbHMgKi8pIHsgfQogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVy
Q2FudmFzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNiMmNkM2U0NmIzMDEz
NGVhZjg4MDViNDUzZTVjYWI4ZDU0NWMxYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIxOCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgi
Ci0KLSNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKLSNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIk1hbmFnZWRU
ZXh0dXJlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db2xvci5oIgotI2luY2x1ZGUgIlRyYWNlRXZl
bnQuaCIKLQotI2lmIFVTRShTS0lBKQotI2luY2x1ZGUgIkdyQ29udGV4dC5oIgotI2luY2x1ZGUg
IlBsYXRmb3JtQ29udGV4dFNraWEuaCIKLSNpbmNsdWRlICJTa0NhbnZhcy5oIgotI2luY2x1ZGUg
IlNrR3B1RGV2aWNlLmgiCi0jZW5kaWYgLy8gVVNFKFNLSUEpCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotI2lmIFVTRShTS0lBKQotbmFtZXNwYWNlIHsKLQotY2xhc3MgRnJhbWVCdWZmZXIgewot
cHVibGljOgotICAgIEZyYW1lQnVmZmVyKCk7Ci0gICAgfkZyYW1lQnVmZmVyKCk7Ci0KLSAgICBT
a0NhbnZhcyogaW5pdGlhbGl6ZShHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3Iq
LCBNYW5hZ2VkVGV4dHVyZSopOwotCi1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBt
X2NvbnRleHQ7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZibzsKLSAgICBPd25QdHI8U2tDYW52
YXM+IG1fY2FudmFzOwotfTsKLQotRnJhbWVCdWZmZXI6OkZyYW1lQnVmZmVyKCkKLSAgICA6IG1f
Y29udGV4dCgwKQotICAgICwgbV9mYm8oMCkKLXsKLX0KLQotRnJhbWVCdWZmZXI6On5GcmFtZUJ1
ZmZlcigpCi17Ci0gICAgbV9jYW52YXMuY2xlYXIoKTsKLQotICAgIGlmIChtX2ZibykKLSAgICAg
ICAgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihtX2Zibyk7Ci19Ci0KLVNrQ2FudmFzKiBG
cmFtZUJ1ZmZlcjo6aW5pdGlhbGl6ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVy
ZUFsbG9jYXRvciogYWxsb2NhdG9yLCBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSkKLXsKLSAgICBt
X2NvbnRleHQgPSBjb250ZXh0OwotICAgIG1fZmJvID0gbV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1
ZmZlcigpOwotICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIHRleHR1cmUtPmZyYW1lYnVmZmVyVGV4dHVyZTJE
KG1fY29udGV4dCwgYWxsb2NhdG9yKTsKLQotICAgIC8vIENyZWF0ZSBhIHNraWEgZ3B1IGNhbnZh
cy4KLSAgICBHckNvbnRleHQqIGdyQ29udGV4dCA9IG1fY29udGV4dC0+Z3JDb250ZXh0KCk7Ci0g
ICAgSW50U2l6ZSBjYW52YXNTaXplID0gdGV4dHVyZS0+c2l6ZSgpOwotICAgIEdyUGxhdGZvcm1T
dXJmYWNlRGVzYyB0YXJnZXREZXNjOwotICAgIHRhcmdldERlc2MucmVzZXQoKTsKLSAgICB0YXJn
ZXREZXNjLmZTdXJmYWNlVHlwZSA9IGtUZXh0dXJlUmVuZGVyVGFyZ2V0X0dyUGxhdGZvcm1TdXJm
YWNlVHlwZTsKLSAgICB0YXJnZXREZXNjLmZSZW5kZXJUYXJnZXRGbGFncyA9IGtOb25lX0dyUGxh
dGZvcm1SZW5kZXJUYXJnZXRGbGFnQml0OwotICAgIHRhcmdldERlc2MuZldpZHRoID0gY2FudmFz
U2l6ZS53aWR0aCgpOwotICAgIHRhcmdldERlc2MuZkhlaWdodCA9IGNhbnZhc1NpemUuaGVpZ2h0
KCk7Ci0gICAgdGFyZ2V0RGVzYy5mQ29uZmlnID0ga1JHQkFfODg4OF9HclBpeGVsQ29uZmlnOwot
ICAgIHRhcmdldERlc2MuZlN0ZW5jaWxCaXRzID0gODsKLSAgICB0YXJnZXREZXNjLmZQbGF0Zm9y
bVRleHR1cmUgPSB0ZXh0dXJlLT50ZXh0dXJlSWQoKTsKLSAgICB0YXJnZXREZXNjLmZQbGF0Zm9y
bVJlbmRlclRhcmdldCA9IG1fZmJvOwotICAgIFNrQXV0b1RVbnJlZjxHclRleHR1cmU+IHRhcmdl
dChzdGF0aWNfY2FzdDxHclRleHR1cmUqPihnckNvbnRleHQtPmNyZWF0ZVBsYXRmb3JtU3VyZmFj
ZSh0YXJnZXREZXNjKSkpOwotICAgIFNrQXV0b1RVbnJlZjxTa0RldmljZT4gZGV2aWNlKG5ldyBT
a0dwdURldmljZShnckNvbnRleHQsIHRhcmdldC5nZXQoKSkpOwotICAgIG1fY2FudmFzID0gYWRv
cHRQdHIobmV3IFNrQ2FudmFzKGRldmljZS5nZXQoKSkpOwotCi0gICAgcmV0dXJuIG1fY2FudmFz
LmdldCgpOwotfQotCi19IC8vIG5hbWVzcGFjZQotI2VuZGlmIC8vIFVTRShTS0lBKQotCi1MYXll
clRleHR1cmVVcGRhdGVyQ2FudmFzOjpMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzKFBhc3NPd25Q
dHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIpCi0gICAgOiBtX3BhaW50ZXIocGFpbnRl
cikKLXsKLX0KLQotdm9pZCBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzOjpwYWludENvbnRlbnRz
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCi17
Ci0gICAgY29udGV4dC50cmFuc2xhdGUoLWNvbnRlbnRSZWN0LngoKSwgLWNvbnRlbnRSZWN0Lnko
KSk7Ci0gICAgewotICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZh
czo6cGFpbnQiLCB0aGlzLCAwKTsKLSAgICAgICAgbV9wYWludGVyLT5wYWludChjb250ZXh0LCBj
b250ZW50UmVjdCk7Ci0gICAgfQotICAgIG1fY29udGVudFJlY3QgPSBjb250ZW50UmVjdDsKLX0K
LQotUGFzc1JlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyQml0bWFwPiBMYXllclRleHR1cmVVcGRh
dGVyQml0bWFwOjpjcmVhdGUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRl
ciwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IExh
eWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXAocGFpbnRlciwgdXNlTWFwVGV4U3ViSW1hZ2UpKTsKLX0K
LQotTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcChQ
YXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyLCBib29sIHVzZU1hcFRleFN1
YkltYWdlKQotICAgIDogTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyhwYWludGVyKQotICAgICwg
bV90ZXhTdWJJbWFnZSh1c2VNYXBUZXhTdWJJbWFnZSkKLXsKLX0KLQotTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnNhbXBs
ZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KQotewotICAgIC8vIFRoZSBjb21w
b25lbnQgb3JkZXIgbWF5IGJlIGJncmEgaWYgd2UgdXBsb2FkZWQgYmdyYSBwaXhlbHMgdG8gcmdi
YSB0ZXh0dXJlcy4KLSAgICByZXR1cm4gUGxhdGZvcm1Db2xvcjo6c2FtZUNvbXBvbmVudE9yZGVy
KHRleHR1cmVGb3JtYXQpID8KLSAgICAgICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBs
ZWRUZXhlbEZvcm1hdFJHQkEgOiBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3Jt
YXRCR1JBOwotfQotCi12b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnByZXBhcmVUb1Vw
ZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUs
IGludCBib3JkZXJUZXhlbHMpCi17Ci0gICAgbV90ZXhTdWJJbWFnZS5zZXRTdWJJbWFnZVNpemUo
dGlsZVNpemUpOwotCi0gICAgbV9jYW52YXMucmVzaXplKGNvbnRlbnRSZWN0LnNpemUoKSk7Ci0g
ICAgLy8gQXNzdW1wdGlvbjogaWYgYSB0aWxlciBpcyB1c2luZyBib3JkZXIgdGV4ZWxzLCB0aGVu
IGl0IGlzIGJlY2F1c2UgdGhlCi0gICAgLy8gbGF5ZXIgaXMgbGlrZWx5IHRvIGJlIGZpbHRlcmVk
IG9yIHRyYW5zZm9ybWVkLiBCZWNhdXNlIG9mIGl0IG1pZ2h0IGJlCi0gICAgLy8gdHJhbnNmb3Jt
ZWQsIGRyYXcgdGhlIHRleHQgaW4gZ3JheXNjYWxlIGluc3RlYWQgb2Ygc3VicGl4ZWwgYW50aWFs
aWFzaW5nLgotICAgIFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpUZXh0T3B0aW9uIHRleHRPcHRp
b24gPQotICAgICAgICBib3JkZXJUZXhlbHMgPyBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6R3Jh
eXNjYWxlVGV4dCA6IFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpTdWJwaXhlbFRleHQ7Ci0gICAg
UGxhdGZvcm1DYW52YXM6OlBhaW50ZXIgY2FudmFzUGFpbnRlcigmbV9jYW52YXMsIHRleHRPcHRp
b24pOwotICAgIHBhaW50Q29udGVudHMoKmNhbnZhc1BhaW50ZXIuY29udGV4dCgpLCBjb250ZW50
UmVjdCk7Ci19Ci0KLXZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6dXBkYXRlVGV4dHVy
ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9j
YXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQotewotICAgIFBsYXRmb3JtQ2FudmFzOjpBdXRvTG9j
a2VyIGxvY2tlcigmbV9jYW52YXMpOwotCi0gICAgdGV4dHVyZS0+YmluZFRleHR1cmUoY29udGV4
dCwgYWxsb2NhdG9yKTsKLSAgICBtX3RleFN1YkltYWdlLnVwbG9hZChsb2NrZXIucGl4ZWxzKCks
IGNvbnRlbnRSZWN0KCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0LCB0ZXh0dXJlLT5mb3JtYXQoKSwg
Y29udGV4dCk7Ci19Ci0KLSNpZiBVU0UoU0tJQSkKLVBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlVXBk
YXRlclNrUGljdHVyZT4gTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6Y3JlYXRlKFBhc3NP
d25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKHBhaW50ZXIpKTsKLX0KLQotTGF5
ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZShQ
YXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyKQotICAgIDogTGF5ZXJUZXh0
dXJlVXBkYXRlckNhbnZhcyhwYWludGVyKQotewotfQotCi1MYXllclRleHR1cmVVcGRhdGVyU2tQ
aWN0dXJlOjp+TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZSgpCi17Ci19Ci0KLUxheWVyVGV4
dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0
dXJlOjpzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkKLXsKLSAgICAv
LyBIZXJlIHdlIGRpcmVjdGx5IHJlbmRlciB0byB0aGUgdGV4dHVyZSwgc28gdGhlIGNvbXBvbmVu
dCBvcmRlciBpcyBhbHdheXMgY29ycmVjdC4KLSAgICByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6U2FtcGxlZFRleGVsRm9ybWF0UkdCQTsKLX0KLQotdm9pZCBMYXllclRleHR1cmVVcGRhdGVy
U2tQaWN0dXJlOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNv
bnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKQotewotICAgIFNrQ2FudmFz
KiBjYW52YXMgPSBtX3BpY3R1cmUuYmVnaW5SZWNvcmRpbmcoY29udGVudFJlY3Qud2lkdGgoKSwg
Y29udGVudFJlY3QuaGVpZ2h0KCkpOwotICAgIFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1D
b250ZXh0KGNhbnZhcyk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dCgmcGxh
dGZvcm1Db250ZXh0KTsKLSAgICBwYWludENvbnRlbnRzKGdyYXBoaWNzQ29udGV4dCwgY29udGVu
dFJlY3QpOwotICAgIG1fcGljdHVyZS5lbmRSZWNvcmRpbmcoKTsKLX0KLQotdm9pZCBMYXllclRl
eHR1cmVVcGRhdGVyU2tQaWN0dXJlOjp1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBNYW5hZ2VkVGV4dHVyZSog
dGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJl
Y3QpCi17Ci0gICAgLy8gTWFrZSBzdXJlIFNLSUEgdXNlcyB0aGUgY29ycmVjdCBHTCBjb250ZXh0
LgotICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIC8vIE5vdGlmeSBTS0lB
IHRvIHN5bmMgaXRzIGludGVybmFsIEdMIHN0YXRlLgotICAgIGNvbnRleHQtPmdyQ29udGV4dCgp
LT5yZXNldENvbnRleHQoKTsKLQotICAgIC8vIENyZWF0ZSBhbiBhY2NlbGVyYXRlZCBjYW52YXMg
dG8gZHJhdyBvbi4KLSAgICBGcmFtZUJ1ZmZlciBidWZmZXI7Ci0gICAgU2tDYW52YXMqIGNhbnZh
cyA9IGJ1ZmZlci5pbml0aWFsaXplKGNvbnRleHQsIGFsbG9jYXRvciwgdGV4dHVyZSk7Ci0KLSAg
ICBjYW52YXMtPmNsaXBSZWN0KFNrUmVjdChkZXN0UmVjdCkpOwotICAgIC8vIFRyYW5zbGF0ZSB0
aGUgb3JpZ2luIG9mIGNvbnRlbnRSZWN0IHRvIHRoYXQgb2YgZGVzdFJlY3QuCi0gICAgLy8gTm90
ZSB0aGF0IGRlc3RSZWN0IGlzIGRlZmluZWQgcmVsYXRpdmUgdG8gc291cmNlUmVjdC4KLSAgICBj
YW52YXMtPnRyYW5zbGF0ZShjb250ZW50UmVjdCgpLngoKSAtIHNvdXJjZVJlY3QueCgpICsgZGVz
dFJlY3QueCgpLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRSZWN0KCkueSgpIC0gc291
cmNlUmVjdC55KCkgKyBkZXN0UmVjdC55KCkpOwotICAgIGNhbnZhcy0+ZHJhd1BpY3R1cmUobV9w
aWN0dXJlKTsKLQotICAgIC8vIEZsdXNoIFNLSUEgY29udGV4dCBzbyB0aGF0IGFsbCB0aGUgcmVu
ZGVyZWQgc3R1ZmYgYXBwZWFycyBvbiB0aGUgdGV4dHVyZS4KLSAgICBjb250ZXh0LT5nckNvbnRl
eHQoKS0+Zmx1c2goKTsKLX0KLSNlbmRpZiAvLyBVU0UoU0tJQSkKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVy
ZVVwZGF0ZXJDYW52YXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZmZjNzFjNjhmZjdjN2RjOTgyMWNlOWFjOGExYjQwODhhYTU4ODM4OS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2lmbmRlZiBMYXllclRleHR1cmVV
cGRhdGVyQ2FudmFzX2gKLSNkZWZpbmUgTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhc19oCi0KLSNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRlICJHcmFwaGljc1R5cGVz
M0QuaCIKLSNpbmNsdWRlICJMYXllclRleHR1cmVTdWJJbWFnZS5oIgotI2luY2x1ZGUgIkxheWVy
VGV4dHVyZVVwZGF0ZXIuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNhbnZhcy5oIgotI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLQotI2lmIFVT
RShTS0lBKQotI2luY2x1ZGUgIlNrUGljdHVyZS5oIgotCi1jbGFzcyBHckNvbnRleHQ7Ci1jbGFz
cyBTa0NhbnZhczsKLWNsYXNzIFNrUGljdHVyZTsKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwotY2xhc3MgTGF5ZXJQYWludGVyQ2hyb21p
dW07Ci0KLS8vIEEgTGF5ZXJUZXh0dXJlVXBkYXRlciB3aXRoIGFuIGludGVybmFsIGNhbnZhcy4K
LWNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBk
YXRlciB7Ci1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZh
cyhQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPik7Ci0KLSAgICB2b2lkIHBhaW50Q29u
dGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwotICAg
IGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50UmVj
dDsgfQotCi1wcml2YXRlOgotCi0gICAgSW50UmVjdCBtX2NvbnRlbnRSZWN0OwotICAgIE93blB0
cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gbV9wYWludGVyOwotfTsKLQotLy8gQSBMYXllclRleHR1
cmVVcGRhdGVyIHdpdGggYW4gaW50ZXJuYWwgYml0bWFwIGNhbnZhcy4KLWNsYXNzIExheWVyVGV4
dHVyZVVwZGF0ZXJCaXRtYXAgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcD4g
Y3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+LCBib29sIHVzZU1hcFRleFN1
YkltYWdlKTsKLQotICAgIHZpcnR1YWwgT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSB7IHJldHVy
biBMYXllclRleHR1cmVVcGRhdGVyOjpCb3R0b21VcE9yaWVudGF0aW9uOyB9Ci0gICAgdmlydHVh
bCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVG
b3JtYXQpOwotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYg
Y29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKTsK
LSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBU
ZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7Ci0KLXByaXZhdGU6Ci0gICAgTGF5ZXJUZXh0
dXJlVXBkYXRlckJpdG1hcChQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiwgYm9vbCB1
c2VNYXBUZXhTdWJJbWFnZSk7Ci0gICAgUGxhdGZvcm1DYW52YXMgbV9jYW52YXM7Ci0gICAgTGF5
ZXJUZXh0dXJlU3ViSW1hZ2UgbV90ZXhTdWJJbWFnZTsKLX07Ci0KLSNpZiBVU0UoU0tJQSkKLWNs
YXNzIExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBk
YXRlckNhbnZhcyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJl
VXBkYXRlclNrUGljdHVyZT4gY3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+
KTsKLSAgICB2aXJ0dWFsIH5MYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKCk7Ci0KLSAgICB2
aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4gTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VG9wRG93bk9yaWVudGF0aW9uOyB9Ci0gICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3Jt
YXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpOwotICAgIHZpcnR1
YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0
IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKTsKLSAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwg
TWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0
JiBkZXN0UmVjdCk7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTGF5ZXJUZXh0dXJlVXBkYXRl
clNrUGljdHVyZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPik7Ci0gIAotICAgIFNr
UGljdHVyZSBtX3BpY3R1cmU7IC8vIFJlY29yZGluZyBjYW52YXMuCi19OwotI2VuZGlmIC8vIFVT
RShTS0lBKQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQotI2VuZGlmIC8vIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXNfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQ
aWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kY2ZkNjNlNzE5MzQyYWU3NTBiZGZlYWE4Y2FiMzJmMWNmZmM4MmMy
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKQEAgLTAsMCArMSw2
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorI2lmIFVTRShTS0lBKQorCisjaW5jbHVkZSAiU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRl
eHRTa2lhLmgiCisjaW5jbHVkZSAiU2tDYW52YXMuaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3duUHRyPExheWVy
UGFpbnRlckNocm9taXVtPiBwYWludGVyKQorICAgIDogQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cihwYWludGVyKQoreworfQorCitTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjp+
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcigpCit7Cit9CisKK3ZvaWQgU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiAvKiB0aWxlU2l6ZSAqLywgaW50IC8qIGJv
cmRlclRleGVscyAqLykKK3sKKyAgICBTa0NhbnZhcyogY2FudmFzID0gbV9waWN0dXJlLmJlZ2lu
UmVjb3JkaW5nKGNvbnRlbnRSZWN0LndpZHRoKCksIGNvbnRlbnRSZWN0LmhlaWdodCgpKTsKKyAg
ICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3JtQ29udGV4dChjYW52YXMpOworICAgIEdyYXBo
aWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoJnBsYXRmb3JtQ29udGV4dCk7CisgICAgcGFpbnRD
b250ZW50cyhncmFwaGljc0NvbnRleHQsIGNvbnRlbnRSZWN0KTsKKyAgICBtX3BpY3R1cmUuZW5k
UmVjb3JkaW5nKCk7Cit9CisKK3ZvaWQgU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6ZHJhd1BpY3R1cmUoU2tDYW52YXMqIGNhbnZhcykKK3sKKyAgICBUUkFDRV9FVkVOVCgiU2tQ
aWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6ZHJhd1BpY3R1cmUiLCB0aGlzLCAwKTsK
KyAgICBjYW52YXMtPmRyYXdQaWN0dXJlKG1fcGljdHVyZSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoU0tJQSkKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODkxYTZkM2M5ZjEyMjAxY2E0YjE4MTc0MGJmMGZi
YTQ3ZTAxZGI1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAt
MCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXJfaAorI2RlZmluZSBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyX2gK
KworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoU0tJQSkKKworI2lu
Y2x1ZGUgIkNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJTa1BpY3R1cmUu
aCIKKworY2xhc3MgU2tDYW52YXM7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGF5
ZXJQYWludGVyQ2hyb21pdW07CisKK2NsYXNzIFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIgOiBwdWJsaWMgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciB7CitwdWJsaWM6CisgICAg
dmlydHVhbCB+U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcigpOworCitwcm90ZWN0
ZWQ6CisgICAgZXhwbGljaXQgU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNz
T3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPik7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFy
ZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxl
U2l6ZSwgaW50IGJvcmRlclRleGVscyk7CisgICAgdm9pZCBkcmF3UGljdHVyZShTa0NhbnZhcyop
OworCitwcml2YXRlOgorICAgIFNrUGljdHVyZSBtX3BpY3R1cmU7IC8vIFJlY29yZGluZyBjYW52
YXMuCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKFNLSUEpCisj
ZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2VuZGlmIC8vIFNrUGljdHVy
ZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5j
cHAKaW5kZXggZmNjNDZkOTkzZDU0MGE0MjE5ZDdmMjcwMTAwMTg3MzhlZjdiOGZmZS4uYmQxZjM2
Njc3MTczZDJkYzllZDRkNzliMDM2ZGI3Yjc4NGE2MjEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uY3BwCkBAIC01MSwxNyArNTEsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgVXBkYXRhYmxlVGlsZSA6IHB1YmxpYyBDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZSB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoVXBkYXRhYmxlVGlsZSk7CiBwdWJsaWM6Ci0gICAgZXhwbGlj
aXQgVXBkYXRhYmxlVGlsZShQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiB0ZXgpIDogbV90ZXgo
dGV4KSB7IH0KKyAgICBleHBsaWNpdCBVcGRhdGFibGVUaWxlKFBhc3NSZWZQdHI8TGF5ZXJUZXh0
dXJlVXBkYXRlcjo6VGV4dHVyZT4gdGV4dHVyZSkgOiBtX3RleHR1cmUodGV4dHVyZSkgeyB9CiAK
LSAgICBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSgpIHsgcmV0dXJuIG1fdGV4LmdldCgpOyB9Cisg
ICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSogdGV4dHVyZSgpIHsgcmV0dXJuIG1fdGV4
dHVyZS5nZXQoKTsgfQorICAgIE1hbmFnZWRUZXh0dXJlKiBtYW5hZ2VkVGV4dHVyZSgpIHsgcmV0
dXJuIG1fdGV4dHVyZS0+dGV4dHVyZSgpOyB9CiAKICAgICBib29sIGRpcnR5KCkgY29uc3QgeyBy
ZXR1cm4gIW1fZGlydHlMYXllclJlY3QuaXNFbXB0eSgpOyB9CiAgICAgdm9pZCBjbGVhckRpcnR5
KCkgeyBtX2RpcnR5TGF5ZXJSZWN0ID0gSW50UmVjdCgpOyB9CiAKICAgICAvLyBMYXllci1zcGFj
ZSBkaXJ0eSByZWN0YW5nbGUgdGhhdCBuZWVkcyB0byBiZSByZXBhaW50ZWQuCiAgICAgSW50UmVj
dCBtX2RpcnR5TGF5ZXJSZWN0OworICAgIC8vIENvbnRlbnQtc3BhY2UgcmVjdGFuZ2xlIHRoYXQg
bmVlZHMgdG8gYmUgdXBkYXRlZC4KKyAgICBJbnRSZWN0IG1fdXBkYXRlUmVjdDsKIHByaXZhdGU6
Ci0gICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBtX3RleDsKKyAgICBSZWZQdHI8TGF5ZXJUZXh0
dXJlVXBkYXRlcjo6VGV4dHVyZT4gbV90ZXh0dXJlOwogfTsKIAogVGlsZWRMYXllckNocm9taXVt
OjpUaWxlZExheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkKQEAgLTE2Nywx
NyArMTcwLDEyIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBDCiAgICAgICAgICAgICBlbHNlIGlm
ICghdGlsZS0+ZGlydHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAg
ICAgLy8gQ2FsY3VsYXRlIHBhZ2Utc3BhY2UgcmVjdGFuZ2xlIHRvIGNvcHkgZnJvbS4KLSAgICAg
ICAgICAgIEludFJlY3Qgc291cmNlUmVjdCA9IG1fdGlsZXItPnRpbGVDb250ZW50UmVjdCh0aWxl
KTsKLSAgICAgICAgICAgIGNvbnN0IEludFBvaW50IGFuY2hvciA9IHNvdXJjZVJlY3QubG9jYXRp
b24oKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KG1fdGlsZXItPmxheWVyUmVj
dFRvQ29udGVudFJlY3QodGlsZS0+bV9kaXJ0eUxheWVyUmVjdCkpOwotICAgICAgICAgICAgLy8g
UGFpbnQgcmVjdCBub3QgZ3VhcmFudGVlZCB0byBsaW5lIHVwIG9uIHRpbGUgYm91bmRhcmllcywg
c28KLSAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHNvdXJjZVJlY3QgZG9lc24ndCBleHRl
bmQgb3V0c2lkZSBvZiBpdC4KLSAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KG1fcGFp
bnRSZWN0KTsKLSAgICAgICAgICAgIGlmIChzb3VyY2VSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIEludFJlY3Qgc291cmNlUmVjdCA9IHRpbGUtPm1fdXBkYXRlUmVjdDsKKyAgICAgICAgICAg
IGlmICh0aWxlLT5tX3VwZGF0ZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgICAgICBBU1NFUlQodGlsZS0+dGV4dHVyZSgpLT5pc1Jlc2VydmVkKCkp
OworICAgICAgICAgICAgQVNTRVJUKHRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPmlzUmVzZXJ2ZWQo
KSk7CisgICAgICAgICAgICBjb25zdCBJbnRQb2ludCBhbmNob3IgPSBtX3RpbGVyLT50aWxlQ29u
dGVudFJlY3QodGlsZSkubG9jYXRpb24oKTsKIAogICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRp
bGUtc3BhY2UgcmVjdGFuZ2xlIHRvIHVwbG9hZCBpbnRvLgogICAgICAgICAgICAgSW50UmVjdCBk
ZXN0UmVjdChJbnRQb2ludChzb3VyY2VSZWN0LngoKSAtIGFuY2hvci54KCksIHNvdXJjZVJlY3Qu
eSgpIC0gYW5jaG9yLnkoKSksIHNvdXJjZVJlY3Quc2l6ZSgpKTsKQEAgLTE5NywxMiArMTk1LDEy
IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBDCiAgICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQu
eSgpICsgZGVzdFJlY3QuaGVpZ2h0KCkgPiBtX3BhaW50UmVjdC5oZWlnaHQoKSkKICAgICAgICAg
ICAgICAgICBDUkFTSCgpOwogCi0gICAgICAgICAgICB0aWxlLT50ZXh0dXJlKCktPmJpbmRUZXh0
dXJlKGNvbnRleHQsIHVwZGF0ZXIuYWxsb2NhdG9yKCkpOworICAgICAgICAgICAgdGlsZS0+bWFu
YWdlZFRleHR1cmUoKS0+YmluZFRleHR1cmUoY29udGV4dCwgdXBkYXRlci5hbGxvY2F0b3IoKSk7
CiAgICAgICAgICAgICBjb25zdCBHQzNEaW50IGZpbHRlciA9IG1fdGlsZXItPmhhc0JvcmRlclRl
eGVscygpID8gR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUiA6IEdyYXBoaWNzQ29udGV4dDNEOjpO
RUFSRVNUOwogICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmko
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X01JTl9GSUxURVIsIGZpbHRlcikpOwogICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIGZpbHRlcikpOwogCi0gICAgICAgICAgICB1cGRh
dGVyLmFwcGVuZCh0aWxlLT50ZXh0dXJlKCksIHRleHR1cmVVcGRhdGVyKCksIHNvdXJjZVJlY3Qs
IGRlc3RSZWN0KTsKKyAgICAgICAgICAgIHVwZGF0ZXIuYXBwZW5kKHRpbGUtPnRleHR1cmUoKSwg
c291cmNlUmVjdCwgZGVzdFJlY3QpOwogICAgICAgICAgICAgdGlsZS0+Y2xlYXJEaXJ0eSgpOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMjQwLDEwICsyMzgsMTAgQEAgdm9pZCBUaWxlZExheWVyQ2hy
b21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogICAgICAgICBpbnQg
aSA9IGl0ZXItPmZpcnN0LmZpcnN0OwogICAgICAgICBpbnQgaiA9IGl0ZXItPmZpcnN0LnNlY29u
ZDsKICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRp
bGUqPihpdGVyLT5zZWNvbmQuZ2V0KCkpOwotICAgICAgICBpZiAoIXRpbGUtPnRleHR1cmUoKS0+
aXNWYWxpZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKQorICAgICAgICBp
ZiAoIXRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPmlzVmFsaWQobV90aWxlci0+dGlsZVNpemUoKSwg
bV90ZXh0dXJlRm9ybWF0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHRpbGVk
TGF5ZXItPnN5bmNUZXh0dXJlSWQoaSwgaiwgdGlsZS0+dGV4dHVyZSgpLT50ZXh0dXJlSWQoKSk7
CisgICAgICAgIHRpbGVkTGF5ZXItPnN5bmNUZXh0dXJlSWQoaSwgaiwgdGlsZS0+bWFuYWdlZFRl
eHR1cmUoKS0+dGV4dHVyZUlkKCkpOwogICAgIH0KIH0KIApAQCAtMjYxLDcgKzI1OSw3IEBAIFVw
ZGF0YWJsZVRpbGUqIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dGlsZUF0KGludCBpLCBpbnQgaikgY29u
c3QKIAogVXBkYXRhYmxlVGlsZSogVGlsZWRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlKGludCBp
LCBpbnQgaikKIHsKLSAgICBSZWZQdHI8VXBkYXRhYmxlVGlsZT4gdGlsZSA9IGFkb3B0UmVmKG5l
dyBVcGRhdGFibGVUaWxlKE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUodGV4dHVyZU1hbmFnZXIoKSkp
KTsKKyAgICBSZWZQdHI8VXBkYXRhYmxlVGlsZT4gdGlsZSA9IGFkb3B0UmVmKG5ldyBVcGRhdGFi
bGVUaWxlKHRleHR1cmVVcGRhdGVyKCktPmNyZWF0ZVRleHR1cmUodGV4dHVyZU1hbmFnZXIoKSkp
KTsKICAgICBtX3RpbGVyLT5hZGRUaWxlKHRpbGUsIGksIGopOwogICAgIHRpbGUtPm1fZGlydHlM
YXllclJlY3QgPSBtX3RpbGVyLT50aWxlTGF5ZXJSZWN0KHRpbGUuZ2V0KCkpOwogCkBAIC0zMDks
MTAgKzMwNywxMCBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJvdGVjdFRpbGVUZXh0dXJl
cyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9
IGJvdHRvbTsgKytqKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyAr
K2kpIHsKICAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7Ci0g
ICAgICAgICAgICBpZiAoIXRpbGUgfHwgIXRpbGUtPnRleHR1cmUoKS0+aXNWYWxpZChtX3RpbGVy
LT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKQorICAgICAgICAgICAgaWYgKCF0aWxlIHx8
ICF0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVTaXplKCksIG1f
dGV4dHVyZUZvcm1hdCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAg
IHRpbGUtPnRleHR1cmUoKS0+cmVzZXJ2ZShtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVG
b3JtYXQpOworICAgICAgICAgICAgdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+cmVzZXJ2ZShtX3Rp
bGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpOwogICAgICAgICB9CiAgICAgfQogfQpA
QCAtMzQ2LDEwICszNDQsMTAgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1Vw
ZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICAgICAgICAgIGlmICghdGlsZSkK
ICAgICAgICAgICAgICAgICB0aWxlID0gY3JlYXRlVGlsZShpLCBqKTsKIAotICAgICAgICAgICAg
aWYgKCF0aWxlLT50ZXh0dXJlKCktPmlzVmFsaWQobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0
dXJlRm9ybWF0KSkKKyAgICAgICAgICAgIGlmICghdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+aXNW
YWxpZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKQogICAgICAgICAgICAg
ICAgIHRpbGUtPm1fZGlydHlMYXllclJlY3QgPSBtX3RpbGVyLT50aWxlTGF5ZXJSZWN0KHRpbGUp
OwogCi0gICAgICAgICAgICBpZiAoIXRpbGUtPnRleHR1cmUoKS0+cmVzZXJ2ZShtX3RpbGVyLT50
aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKSB7CisgICAgICAgICAgICBpZiAoIXRpbGUtPm1h
bmFnZWRUZXh0dXJlKCktPnJlc2VydmUobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9y
bWF0KSkgewogICAgICAgICAgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICBjbGVhbnVwUmVzb3VyY2VzKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzc0
LDYgKzM3MiwzMSBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNv
bnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAgIC8vIHNvIHdlIGdyYWIgYSBsb2NhbCByZWZl
cmVuY2UgaGVyZSB0byBob2xkIHRoZSB1cGRhdGVyIGFsaXZlIHVudGlsIHRoZSBwYWludCBjb21w
bGV0ZXMuCiAgICAgUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+IHByb3RlY3Rvcih0ZXh0dXJl
VXBkYXRlcigpKTsKICAgICB0ZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlVG9VcGRhdGUobV9wYWlu
dFJlY3QsIG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGlsZXItPmhhc0JvcmRlclRleGVscygpKTsK
KworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhtX3JlcXVlc3RlZFVwZGF0
ZVJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgZm9yIChpbnQgaiA9IHRvcDsg
aiA8PSBib3R0b207ICsraikgeworICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdo
dDsgKytpKSB7CisgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGop
OworICAgICAgICAgICAgaWYgKCF0aWxlKQorICAgICAgICAgICAgICAgIHRpbGUgPSBjcmVhdGVU
aWxlKGksIGopOworICAgICAgICAgICAgZWxzZSBpZiAoIXRpbGUtPmRpcnR5KCkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBjb250ZW50LXNw
YWNlIHJlY3RhbmdsZSB0byBjb3B5IGZyb20uCisgICAgICAgICAgICBJbnRSZWN0IHNvdXJjZVJl
Y3QgPSBtX3RpbGVyLT50aWxlQ29udGVudFJlY3QodGlsZSk7CisgICAgICAgICAgICBjb25zdCBJ
bnRQb2ludCBhbmNob3IgPSBzb3VyY2VSZWN0LmxvY2F0aW9uKCk7CisgICAgICAgICAgICBzb3Vy
Y2VSZWN0LmludGVyc2VjdChtX3RpbGVyLT5sYXllclJlY3RUb0NvbnRlbnRSZWN0KHRpbGUtPm1f
ZGlydHlMYXllclJlY3QpKTsKKyAgICAgICAgICAgIC8vIFBhaW50IHJlY3Qgbm90IGd1YXJhbnRl
ZWQgdG8gbGluZSB1cCBvbiB0aWxlIGJvdW5kYXJpZXMsIHNvCisgICAgICAgICAgICAvLyBtYWtl
IHN1cmUgdGhhdCBzb3VyY2VSZWN0IGRvZXNuJ3QgZXh0ZW5kIG91dHNpZGUgb2YgaXQuCisgICAg
ICAgICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChtX3BhaW50UmVjdCk7CisKKyAgICAgICAgICAg
IHRpbGUtPm1fdXBkYXRlUmVjdCA9IHNvdXJjZVJlY3Q7CisgICAgICAgICAgICBpZiAoc291cmNl
UmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAg
IHRpbGUtPnRleHR1cmUoKS0+cHJlcGFyZVJlY3Qoc291cmNlUmVjdCk7CisgICAgICAgIH0KKyAg
ICB9CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAKaW5kZXggOTg0Mzcw
ZWRhOTVjNTIzZjU5ZWU1NWM4N2FjODI4NzFlMDJhNzNiYi4uODc0NWM0ZWEwYTcxMGJkZTE4ZWRl
MTgyMGYzMTRmZGI4Y2M4NzJhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAK
QEAgLTQ4LDE0ICs0OCwxMiBAQCBDQ1RleHR1cmVVcGRhdGVyOjp+Q0NUZXh0dXJlVXBkYXRlcigp
CiB7CiB9CiAKLXZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6YXBwZW5kKE1hbmFnZWRUZXh0dXJlKiB0
ZXh0dXJlLCBMYXllclRleHR1cmVVcGRhdGVyKiB1cGRhdGVyLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6
YXBwZW5kKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQogewogICAgIEFTU0VSVCh0
ZXh0dXJlKTsKLSAgICBBU1NFUlQodXBkYXRlcik7CiAKICAgICBVcGRhdGVFbnRyeSBlbnRyeTsK
ICAgICBlbnRyeS5tX3RleHR1cmUgPSB0ZXh0dXJlOwotICAgIGVudHJ5Lm1fdXBkYXRlciA9IHVw
ZGF0ZXI7CiAgICAgZW50cnkubV9zb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKICAgICBlbnRyeS5t
X2Rlc3RSZWN0ID0gZGVzdFJlY3Q7CiAgICAgbV9lbnRyaWVzLmFwcGVuZChlbnRyeSk7CkBAIC03
MSw3ICs2OSw3IEBAIGJvb2wgQ0NUZXh0dXJlVXBkYXRlcjo6dXBkYXRlKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0LCBzaXplX3QgY291bnQpCiAgICAgc2l6ZV90IG1heEluZGV4ID0gbWluKG1f
ZW50cnlJbmRleCArIGNvdW50LCBtX2VudHJpZXMuc2l6ZSgpKTsKICAgICBmb3IgKDsgbV9lbnRy
eUluZGV4IDwgbWF4SW5kZXg7ICsrbV9lbnRyeUluZGV4KSB7CiAgICAgICAgIFVwZGF0ZUVudHJ5
JiBlbnRyeSA9IG1fZW50cmllc1ttX2VudHJ5SW5kZXhdOwotICAgICAgICBlbnRyeS5tX3VwZGF0
ZXItPnVwZGF0ZVRleHR1cmVSZWN0KGNvbnRleHQsIG1fYWxsb2NhdG9yLCBlbnRyeS5tX3RleHR1
cmUsIGVudHJ5Lm1fc291cmNlUmVjdCwgZW50cnkubV9kZXN0UmVjdCk7CisgICAgICAgIGVudHJ5
Lm1fdGV4dHVyZS0+dXBkYXRlUmVjdChjb250ZXh0LCBtX2FsbG9jYXRvciwgZW50cnkubV9zb3Vy
Y2VSZWN0LCBlbnRyeS5tX2Rlc3RSZWN0KTsKICAgICB9CiAKICAgICBpZiAobWF4SW5kZXggPCBt
X2VudHJpZXMuc2l6ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oCmluZGV4IDE3Yjhh
YWZhMDZjZTdhNmQyMGEwZTVmYjRjOTE0ZTcyZmM5Mzk0YTEuLmJmNzlhYzljMmUyMmVmYzVlZGE5
YTY0ODI5ZTJlZmNjZWMxNWJiMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgKQEAg
LTI3LDEzICsyNywxMiBAQAogI2RlZmluZSBDQ1RleHR1cmVVcGRhdGVyX2gKIAogI2luY2x1ZGUg
IkludFJlY3QuaCIKKyNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDNEOwotY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlcjsKLWNsYXNzIE1hbmFnZWRUZXh0dXJl
OwogY2xhc3MgVGV4dHVyZUFsbG9jYXRvcjsKIAogY2xhc3MgQ0NUZXh0dXJlVXBkYXRlciB7CkBA
IC00MSw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICBDQ1RleHR1cmVVcGRhdGVyKFRleHR1cmVBbGxv
Y2F0b3IqKTsKICAgICB+Q0NUZXh0dXJlVXBkYXRlcigpOwogCi0gICAgdm9pZCBhcHBlbmQoTWFu
YWdlZFRleHR1cmUqLCBMYXllclRleHR1cmVVcGRhdGVyKiwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgIHZvaWQgYXBwZW5kKExheWVyVGV4
dHVyZVVwZGF0ZXI6OlRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJ
bnRSZWN0JiBkZXN0UmVjdCk7CiAKICAgICBib29sIGhhc01vcmVVcGRhdGVzKCkgY29uc3Q7CiAK
QEAgLTU0LDggKzUzLDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHN0cnVjdCBVcGRhdGVF
bnRyeSB7Ci0gICAgICAgIE1hbmFnZWRUZXh0dXJlKiBtX3RleHR1cmU7Ci0gICAgICAgIExheWVy
VGV4dHVyZVVwZGF0ZXIqIG1fdXBkYXRlcjsKKyAgICAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
VGV4dHVyZSogbV90ZXh0dXJlOwogICAgICAgICBJbnRSZWN0IG1fc291cmNlUmVjdDsKICAgICAg
ICAgSW50UmVjdCBtX2Rlc3RSZWN0OwogICAgIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115648</attachid>
            <date>2011-11-17 12:05:34 -0800</date>
            <delta_ts>2011-11-20 14:46:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71388-20111117120532.patch</filename>
            <type>text/plain</type>
            <size>70174</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwNjQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWMxNjk3NzM2N2ExNThj
MDYwNTI0MWM2ZWE0NmY0YjE2MTMxNDQ4My4uZmJhOGIyN2IyOTY0YmUxZDZlN2JjNzY1ZjRjM2Nh
OWZhZWFlY2M1YSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg5IEBACisyMDExLTExLTE3ICBEYXZp
ZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBB
ZGQgc3VwcG9ydCBmb3IgcGFpbnRpbmcgaW50byBhbiBTa1BpY3R1cmUgYW5kIHRoZW4gcmFzdGVy
aXppbmcgaW50byB0aWxlLXNpemVkIGNodW5rcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEzODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgVXBkYXRhYmxlVGV4dHVyZSBjbGFzcywgd2hpY2ggYWxs
b3dzIHRleHR1cmUgdXBkYXRlciB0bworICAgICAgICBhbGxvY2F0ZSB0aWxlIHNwZWNpZmljIHJl
c291cmNlcyBhbmQgcGFpbnQgdGlsZXMgc2VwYXJhdGVseS4KKyAgICAgICAgUmVuYW1lIHRleHR1
cmUgdXBsb2FkZXIgY2xhc3NlcyBhbmQgbW92ZSB0aGVtIHRvIHNlcGFyYXRlIGZpbGVzLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cy4gQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAg
ICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9C
aXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmU6On5UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmU6OnVwZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6fkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpzYW1wbGVkVGV4ZWxG
b3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZVRleHR1cmVSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4
dHVyZVVwZGF0ZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmU6OnRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6Om9yaWVudGF0aW9uKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUZXh0dXJlVXBkYXRlci5oLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyOjp+Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwYWludENvbnRlbnRz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1
cmVVcGRhdGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNvbnRlbnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyOjpGcmFtZUJ1ZmZlcjo6RnJhbWVCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVCdWZmZXI6OkZyYW1lQnVmZmVyOjp+RnJhbWVCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVCdWZmZXI6OkZyYW1lQnVmZmVyOjppbml0aWFsaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1
ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6On5UZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6VGV4dHVyZTo6dXBkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXI6OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXI6On5GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6c2FtcGxlZFRleGVsRm9ybWF0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6dXBkYXRlVGV4dHVyZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRl
eHR1cmVVcGRhdGVyLmguCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnRleHR1cmVVcGRhdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6b3JpZW50YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmU6OlRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXll
clRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjp1cGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6dGV4dHVyZVVwZGF0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGVUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJlcGFyZVRvVXBk
YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
VGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXI6
OlRleHR1cmU6On5UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0
ZXI6OlRleHR1cmU6OnRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZTo6cHJlcGFyZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0
dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRl
eHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oLgorICAgICAgICAoV2ViQ29yZTo6U2tQ
aWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpTa1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyOjp+U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAg
IChXZWJDb3JlOjpTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9V
cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6ZHJhd1BpY3R1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5o
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVcGRhdGFibGVUaWxlOjpVcGRhdGFibGVUaWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlVwZGF0YWJsZVRpbGU6OnRleHR1cmUpOgorICAgICAgICAoV2Vi
Q29yZTo6VXBkYXRhYmxlVGlsZTo6bWFuYWdlZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
VGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAg
IChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZVRpbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VGlsZVRleHR1cmVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXI6OmFwcGVuZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaDoKKwogMjAxMS0xMS0xNyAgU2VyZ2lv
IFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBwbHVn
aW5zL2dldC11cmwtbm90aWZ5LXdpdGgtdXJsLXRoYXQtZmFpbHMtdG8tbG9hZC5odG1sIG9uIGJv
dHMgYWZ0ZXIgcjEwMDQ2NgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGZhNDMzYTkyNzcyOWQzMzc5YTI0
YTQ0NWIxMzY1NjQyMjkyZDVhZGUuLjRjMzExZDYwZTBhNWVkZWIwZmFhMjZlODYwYTQ3Yjc1MDEw
OGUwNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM0NTIsMTAgKzM0NTIsMTQgQEAKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5j
cHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9t
aXVtLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcGxleFRleHRDb250cm9s
bGVyTGludXguaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29u
dGVudExheWVyQ2hyb21pdW0uY3BwJywKQEAgLTM0NzYsNiArMzQ4MCw4IEBACiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFJlbmRlclN0eWxlLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9taXVtV2luLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFV0aWxzQ2hy
b21pdW1XaW4uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJh
bWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dlb21ldHJ5QmluZGluZy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dlb21ldHJ5QmluZGluZy5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HbHlwaFBhZ2VUcmVlTm9kZUNocm9taXVtV2luLmNwcCcsCkBA
IC0zNDk5LDggKzM1MDUsNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oJywKLSAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFz
LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0
dXJlVXBkYXRlckNhbnZhcy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21p
dW0uaCcsCkBAIC0zNTIyLDYgKzM1MjYsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUxpbnV4LmNwcCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9y
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhY2tpbmdU
ZXh0dXJlQWxsb2NhdG9yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RleHR1cmVNYW5hZ2VyLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3MWRlNjQ4NDM4YWQzMmMwYzRl
NmVjODljMzhmNjVhYTgxMzU0OTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
LmNwcApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiQml0bWFwQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorCisjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0u
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVyZShCaXRtYXBD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlciwgUGFzc093blB0cjxNYW5h
Z2VkVGV4dHVyZT4gdGV4dHVyZSkKKyAgICA6IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUo
dGV4dHVyZSkKKyAgICAsIG1fdGV4dHVyZVVwZGF0ZXIodGV4dHVyZVVwZGF0ZXIpCit7Cit9CisK
K0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6On5UZXh0dXJlKCkKK3sK
K30KKwordm9pZCBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjp1cGRh
dGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxv
Y2F0b3IsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0
KQoreworICAgIHRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZVRleHR1cmVSZWN0KGNvbnRleHQsIGFs
bG9jYXRvciwgdGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7Cit9CisKK1Bhc3NSZWZQ
dHI8Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcj4gQml0bWFwQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6Y3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50
ZXIsIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBC
aXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKHBhaW50ZXIsIHVzZU1hcFRleFN1YkltYWdl
KSk7Cit9CisKK0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OkJpdG1hcENhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXIoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRl
ciwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSkKKyAgICA6IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIocGFpbnRlcikKKyAgICAsIG1fdGV4U3ViSW1hZ2UodXNlTWFwVGV4U3ViSW1hZ2UpCit7Cit9
CisKK0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6On5CaXRtYXBDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyKCkKK3sKK30KKworUGFzc1JlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpU
ZXh0dXJlPiBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGVUZXh0dXJlKFRl
eHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVy
ZSh0aGlzLCBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKSk7Cit9CisKK0xheWVyVGV4
dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBCaXRtYXBDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyOjpzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkKK3sKKyAg
ICAvLyBUaGUgY29tcG9uZW50IG9yZGVyIG1heSBiZSBiZ3JhIGlmIHdlIHVwbG9hZGVkIGJncmEg
cGl4ZWxzIHRvIHJnYmEgdGV4dHVyZXMuCisgICAgcmV0dXJuIFBsYXRmb3JtQ29sb3I6OnNhbWVD
b21wb25lbnRPcmRlcih0ZXh0dXJlRm9ybWF0KSA/CisgICAgICAgICAgICBMYXllclRleHR1cmVV
cGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBIDogTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2Ft
cGxlZFRleGVsRm9ybWF0QkdSQTsKK30KKwordm9pZCBCaXRtYXBDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0
IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKQoreworICAgIG1fdGV4U3ViSW1h
Z2Uuc2V0U3ViSW1hZ2VTaXplKHRpbGVTaXplKTsKKworICAgIG1fY2FudmFzLnJlc2l6ZShjb250
ZW50UmVjdC5zaXplKCkpOworICAgIC8vIEFzc3VtcHRpb246IGlmIGEgdGlsZXIgaXMgdXNpbmcg
Ym9yZGVyIHRleGVscywgdGhlbiBpdCBpcyBiZWNhdXNlIHRoZQorICAgIC8vIGxheWVyIGlzIGxp
a2VseSB0byBiZSBmaWx0ZXJlZCBvciB0cmFuc2Zvcm1lZC4gQmVjYXVzZSBvZiBpdCBtaWdodCBi
ZQorICAgIC8vIHRyYW5zZm9ybWVkLCBkcmF3IHRoZSB0ZXh0IGluIGdyYXlzY2FsZSBpbnN0ZWFk
IG9mIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KKyAgICBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6
VGV4dE9wdGlvbiB0ZXh0T3B0aW9uID0KKyAgICAgICAgYm9yZGVyVGV4ZWxzID8gUGxhdGZvcm1D
YW52YXM6OlBhaW50ZXI6OkdyYXlzY2FsZVRleHQgOiBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6
U3VicGl4ZWxUZXh0OworICAgIFBsYXRmb3JtQ2FudmFzOjpQYWludGVyIGNhbnZhc1BhaW50ZXIo
Jm1fY2FudmFzLCB0ZXh0T3B0aW9uKTsKKyAgICBwYWludENvbnRlbnRzKCpjYW52YXNQYWludGVy
LmNvbnRleHQoKSwgY29udGVudFJlY3QpOworfQorCit2b2lkIEJpdG1hcENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI6OnVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3sKKyAg
ICBQbGF0Zm9ybUNhbnZhczo6QXV0b0xvY2tlciBsb2NrZXIoJm1fY2FudmFzKTsKKworICAgIHRl
eHR1cmUtPmJpbmRUZXh0dXJlKGNvbnRleHQsIGFsbG9jYXRvcik7CisgICAgbV90ZXhTdWJJbWFn
ZS51cGxvYWQobG9ja2VyLnBpeGVscygpLCBjb250ZW50UmVjdCgpLCBzb3VyY2VSZWN0LCBkZXN0
UmVjdCwgdGV4dHVyZS0+Zm9ybWF0KCksIGNvbnRleHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3
NWRkZGQ1YjQ5YjIxYzBmNzViOGZhNDIyODljYzJmMTBlNTRhNDQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBC
aXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyX2gKKyNkZWZpbmUgQml0bWFwQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcl9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisK
KyNpbmNsdWRlICJDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCisjaW5jbHVkZSAiTGF5ZXJU
ZXh0dXJlU3ViSW1hZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNhbnZhcy5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIExheWVyUGFpbnRlckNocm9taXVtOworCisvLyBBIENhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXIgd2l0aCBhbiBpbnRlcm5hbCBiaXRtYXAuCitjbGFzcyBCaXRt
YXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGljIENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIgeworcHVibGljOgorICAgIGNsYXNzIFRleHR1cmUgOiBwdWJsaWMgTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6VGV4dHVyZSB7CisgICAgcHVibGljOgorICAgICAgICBUZXh0dXJlKEJpdG1hcENh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqLCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPik7Cisg
ICAgICAgIHZpcnR1YWwgflRleHR1cmUoKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
UmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigp
IHsgcmV0dXJuIG1fdGV4dHVyZVVwZGF0ZXI7IH0KKworICAgICAgICBCaXRtYXBDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyKiBtX3RleHR1cmVVcGRhdGVyOworICAgIH07CisKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyPiBjcmVhdGUoUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4sIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpOworICAg
IHZpcnR1YWwgfkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoKTsKKworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBjcmVhdGVUZXh0dXJl
KFRleHR1cmVNYW5hZ2VyKik7CisgICAgdmlydHVhbCBPcmllbnRhdGlvbiBvcmllbnRhdGlvbigp
IHsgcmV0dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6OkJvdHRvbVVwT3JpZW50YXRpb247IH0KKyAg
ICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0g
dGV4dHVyZUZvcm1hdCk7CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJU
ZXhlbHMpOworICAgIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBU
ZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CisKK3ByaXZhdGU6CisgICAgQml0bWFwQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiwg
Ym9vbCB1c2VNYXBUZXhTdWJJbWFnZSk7CisKKyAgICBQbGF0Zm9ybUNhbnZhcyBtX2NhbnZhczsK
KyAgICBMYXllclRleHR1cmVTdWJJbWFnZSBtX3RleFN1YkltYWdlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNl
bmRpZiAvLyBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTNlOGY3YjdiZjNkNjAw
OGRlYjBjNjM4YWEzNzExNWY5N2EyYTZiYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIu
Y3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkNhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXIuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IkxheWVyUGFpbnRlckNocm9taXVtLmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OkNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcikK
KyAgICA6IG1fcGFpbnRlcihwYWludGVyKQoreworfQorCitDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjp+Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcigpCit7Cit9CisKK3ZvaWQgQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAgIGNvbnRleHQudHJhbnNsYXRlKC1j
b250ZW50UmVjdC54KCksIC1jb250ZW50UmVjdC55KCkpOworICAgIHsKKyAgICAgICAgVFJBQ0Vf
RVZFTlQoIkNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnBhaW50IiwgdGhpcywgMCk7CisgICAg
ICAgIG1fcGFpbnRlci0+cGFpbnQoY29udGV4dCwgY29udGVudFJlY3QpOworICAgIH0KKyAgICBt
X2NvbnRlbnRSZWN0ID0gY29udGVudFJlY3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVV
cGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52
YXNMYXllclRleHR1cmVVcGRhdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmQ3OWEwNGQwYTM2ZDc5NmE0ZTdm
MzM0MzMxNzJhODIwNGJjMTQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAt
MCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXJf
aAorI2RlZmluZSBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyX2gKKworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIExh
eWVyUGFpbnRlckNocm9taXVtOworCisvLyBBIExheWVyVGV4dHVyZVVwZGF0ZXIgd2l0aCBhbiBp
bnRlcm5hbCBjYW52YXMuCitjbGFzcyBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGlj
IExheWVyVGV4dHVyZVVwZGF0ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIoKTsKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IENhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOworCisgICAg
dm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0KTsKKyAgICBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGVudFJlY3Q7IH0KKworcHJpdmF0ZToKKyAgICBJbnRSZWN0IG1fY29udGVudFJlY3Q7
CisgICAgT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBtX3BhaW50ZXI7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorI2VuZGlmIC8vIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXJfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVu
dExheWVyQ2hyb21pdW0uY3BwCmluZGV4IGNhOGIzYmQ3NjFmMDgxNWU0N2I2Y2ZiMDQ5MWExZDk3
Mjg3OWYwNGMuLmRiMGFlNDY5OWU3ODk2OTJmNTFjNDBiOGNkZTc2NDg0ZmQxYzRhYTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTM0LDkgKzM0LDEwIEBACiAKICNp
bmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiQml0bWFwQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorI2luY2x1ZGUgIkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVt
LmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCi0jaW5jbHVkZSAiTGF5ZXJU
ZXh0dXJlVXBkYXRlckNhbnZhcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgogI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5o
PgpAQCAtMTIyLDEyICsxMjMsMTIgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
VGV4dHVyZVVwZGF0ZXIoY29uc3QgQ0NMYXllclRyZWVIb3N0KiBob3N0KQogewogI2lmIFVTRShT
S0lBKQogICAgIGlmIChob3N0LT5zZXR0aW5ncygpLmFjY2VsZXJhdGVQYWludGluZykgewotICAg
ICAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6Y3Jl
YXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX2RlbGVnYXRlKSk7CisgICAgICAgIG1f
dGV4dHVyZVVwZGF0ZXIgPSBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXI6OmNyZWF0ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUobV9kZWxlZ2F0ZSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIFVTRShTS0lBKQogCi0gICAgbV90ZXh0
dXJlVXBkYXRlciA9IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNyZWF0ZShDb250ZW50TGF5
ZXJQYWludGVyOjpjcmVhdGUobV9kZWxlZ2F0ZSksIGhvc3QtPmxheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXMoKS51c2luZ01hcFN1Yik7CisgICAgbV90ZXh0dXJlVXBkYXRlciA9IEJpdG1hcENhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUo
bV9kZWxlZ2F0ZSksIGhvc3QtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ01hcFN1
Yik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZl
clNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5NDVl
MDY0OWNjMGRjMjZiNjI1ZmIzZTRmNTdhZmU5ODBkN2I2ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNrUGlj
dHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCkBAIC0wLDAgKzEsMTYyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisjaWYgVVNFKFNLSUEpCisKKyNpbmNsdWRlICJGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKworI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVt
LmgiCisjaW5jbHVkZSAiU2tDYW52YXMuaCIKKyNpbmNsdWRlICJTa0dwdURldmljZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIEZyYW1lQnVmZmVyIHsK
K3B1YmxpYzoKKyAgICBGcmFtZUJ1ZmZlcigpOworICAgIH5GcmFtZUJ1ZmZlcigpOworCisgICAg
U2tDYW52YXMqIGluaXRpYWxpemUoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9y
KiwgTWFuYWdlZFRleHR1cmUqKTsKKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQzRCog
bV9jb250ZXh0OworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mYm87CisgICAgT3duUHRyPFNrQ2Fu
dmFzPiBtX2NhbnZhczsKK307CisKK0ZyYW1lQnVmZmVyOjpGcmFtZUJ1ZmZlcigpCisgICAgOiBt
X2NvbnRleHQoMCkKKyAgICAsIG1fZmJvKDApCit7Cit9CisKK0ZyYW1lQnVmZmVyOjp+RnJhbWVC
dWZmZXIoKQoreworICAgIG1fY2FudmFzLmNsZWFyKCk7CisKKyAgICBpZiAobV9mYm8pCisgICAg
ICAgIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9mYm8pOworfQorCitTa0NhbnZhcyog
RnJhbWVCdWZmZXI6OmluaXRpYWxpemUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1
cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUpCit7CisgICAg
bV9jb250ZXh0ID0gY29udGV4dDsKKyAgICBtX2ZibyA9IG1fY29udGV4dC0+Y3JlYXRlRnJhbWVi
dWZmZXIoKTsKKyAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICB0ZXh0dXJlLT5mcmFtZWJ1ZmZlclRleHR1cmUy
RChtX2NvbnRleHQsIGFsbG9jYXRvcik7CisKKyAgICAvLyBDcmVhdGUgYSBza2lhIGdwdSBjYW52
YXMuCisgICAgR3JDb250ZXh0KiBnckNvbnRleHQgPSBtX2NvbnRleHQtPmdyQ29udGV4dCgpOwor
ICAgIEludFNpemUgY2FudmFzU2l6ZSA9IHRleHR1cmUtPnNpemUoKTsKKyAgICBHclBsYXRmb3Jt
U3VyZmFjZURlc2MgdGFyZ2V0RGVzYzsKKyAgICB0YXJnZXREZXNjLnJlc2V0KCk7CisgICAgdGFy
Z2V0RGVzYy5mU3VyZmFjZVR5cGUgPSBrVGV4dHVyZVJlbmRlclRhcmdldF9HclBsYXRmb3JtU3Vy
ZmFjZVR5cGU7CisgICAgdGFyZ2V0RGVzYy5mUmVuZGVyVGFyZ2V0RmxhZ3MgPSBrTm9uZV9HclBs
YXRmb3JtUmVuZGVyVGFyZ2V0RmxhZ0JpdDsKKyAgICB0YXJnZXREZXNjLmZXaWR0aCA9IGNhbnZh
c1NpemUud2lkdGgoKTsKKyAgICB0YXJnZXREZXNjLmZIZWlnaHQgPSBjYW52YXNTaXplLmhlaWdo
dCgpOworICAgIHRhcmdldERlc2MuZkNvbmZpZyA9IGtSR0JBXzg4ODhfR3JQaXhlbENvbmZpZzsK
KyAgICB0YXJnZXREZXNjLmZTdGVuY2lsQml0cyA9IDg7CisgICAgdGFyZ2V0RGVzYy5mUGxhdGZv
cm1UZXh0dXJlID0gdGV4dHVyZS0+dGV4dHVyZUlkKCk7CisgICAgdGFyZ2V0RGVzYy5mUGxhdGZv
cm1SZW5kZXJUYXJnZXQgPSBtX2ZibzsKKyAgICBTa0F1dG9UVW5yZWY8R3JUZXh0dXJlPiB0YXJn
ZXQoc3RhdGljX2Nhc3Q8R3JUZXh0dXJlKj4oZ3JDb250ZXh0LT5jcmVhdGVQbGF0Zm9ybVN1cmZh
Y2UodGFyZ2V0RGVzYykpKTsKKyAgICBTa0F1dG9UVW5yZWY8U2tEZXZpY2U+IGRldmljZShuZXcg
U2tHcHVEZXZpY2UoZ3JDb250ZXh0LCB0YXJnZXQuZ2V0KCkpKTsKKyAgICBtX2NhbnZhcyA9IGFk
b3B0UHRyKG5ldyBTa0NhbnZhcyhkZXZpY2UuZ2V0KCkpKTsKKworICAgIHJldHVybiBtX2NhbnZh
cy5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UKKworRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpUZXh0dXJlKEZyYW1lQnVmZmVyU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIsIFBhc3NPd25QdHI8
TWFuYWdlZFRleHR1cmU+IHRleHR1cmUpCisgICAgOiBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0
dXJlKHRleHR1cmUpCisgICAgLCBtX3RleHR1cmVVcGRhdGVyKHRleHR1cmVVcGRhdGVyKQorewor
fQorCitGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmU6On5UZXh0dXJlKCkKK3sKK30KKwordm9pZCBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit7CisgICAgdGV4dHVyZVVwZGF0ZXIo
KS0+dXBkYXRlVGV4dHVyZVJlY3QoY29udGV4dCwgYWxsb2NhdG9yLCB0ZXh0dXJlKCksIHNvdXJj
ZVJlY3QsIGRlc3RSZWN0KTsKK30KKworUGFzc1JlZlB0cjxGcmFtZUJ1ZmZlclNrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI+IEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBh
aW50ZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGcmFtZUJ1ZmZlclNrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIocGFpbnRlcikpOworfQorCitGcmFtZUJ1ZmZlclNrUGlj
dHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWlu
dGVyKQorICAgIDogU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihwYWludGVyKQor
eworfQorCitGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6On5G
cmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoKQoreworfQorCitQ
YXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IEZyYW1lQnVmZmVyU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlVGV4dHVyZShUZXh0dXJlTWFuYWdl
ciogbWFuYWdlcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmUodGhpcywgTWFu
YWdlZFRleHR1cmU6OmNyZWF0ZShtYW5hZ2VyKSkpOworfQorCitMYXllclRleHR1cmVVcGRhdGVy
OjpTYW1wbGVkVGV4ZWxGb3JtYXQgRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyOjpzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkKK3sK
KyAgICAvLyBIZXJlIHdlIGRpcmVjdGx5IHJlbmRlciB0byB0aGUgdGV4dHVyZSwgc28gdGhlIGNv
bXBvbmVudCBvcmRlciBpcyBhbHdheXMgY29ycmVjdC4KKyAgICByZXR1cm4gTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0UkdCQTsKK30KKwordm9pZCBGcmFtZUJ1ZmZlclNr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZVRleHR1cmVSZWN0KEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIE1hbmFn
ZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRS
ZWN0JiBkZXN0UmVjdCkKK3sKKyAgICAvLyBNYWtlIHN1cmUgU0tJQSB1c2VzIHRoZSBjb3JyZWN0
IEdMIGNvbnRleHQuCisgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgLy8g
Tm90aWZ5IFNLSUEgdG8gc3luYyBpdHMgaW50ZXJuYWwgR0wgc3RhdGUuCisgICAgY29udGV4dC0+
Z3JDb250ZXh0KCktPnJlc2V0Q29udGV4dCgpOworCisgICAgLy8gQ3JlYXRlIGFuIGFjY2VsZXJh
dGVkIGNhbnZhcyB0byBkcmF3IG9uLgorICAgIEZyYW1lQnVmZmVyIGJ1ZmZlcjsKKyAgICBTa0Nh
bnZhcyogY2FudmFzID0gYnVmZmVyLmluaXRpYWxpemUoY29udGV4dCwgYWxsb2NhdG9yLCB0ZXh0
dXJlKTsKKworICAgIGNhbnZhcy0+Y2xpcFJlY3QoU2tSZWN0KGRlc3RSZWN0KSk7CisgICAgLy8g
VHJhbnNsYXRlIHRoZSBvcmlnaW4gb2YgY29udGVudFJlY3QgdG8gdGhhdCBvZiBkZXN0UmVjdC4K
KyAgICAvLyBOb3RlIHRoYXQgZGVzdFJlY3QgaXMgZGVmaW5lZCByZWxhdGl2ZSB0byBzb3VyY2VS
ZWN0LgorICAgIGNhbnZhcy0+dHJhbnNsYXRlKGNvbnRlbnRSZWN0KCkueCgpIC0gc291cmNlUmVj
dC54KCkgKyBkZXN0UmVjdC54KCksCisgICAgICAgICAgICAgICAgICAgICAgY29udGVudFJlY3Qo
KS55KCkgLSBzb3VyY2VSZWN0LnkoKSArIGRlc3RSZWN0LnkoKSk7CisgICAgZHJhd1BpY3R1cmUo
Y2FudmFzKTsKKworICAgIC8vIEZsdXNoIFNLSUEgY29udGV4dCBzbyB0aGF0IGFsbCB0aGUgcmVu
ZGVyZWQgc3R1ZmYgYXBwZWFycyBvbiB0aGUgdGV4dHVyZS4KKyAgICBjb250ZXh0LT5nckNvbnRl
eHQoKS0+Zmx1c2goKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVT
RShTS0lBKQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVy
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWQzNzY4Y2VkMTg4Mzg0N2MyY2NkMDhjNTFkMGQw
NDJiOTliM2UxNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlci5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgRnJhbWVCdWZmZXJTa1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyX2gKKyNkZWZpbmUgRnJhbWVCdWZmZXJTa1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyNpZiBVU0UoU0tJQSkKKworI2luY2x1ZGUgIlNrUGljdHVyZUNhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGcmFt
ZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMgU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciB7CitwdWJsaWM6CisgICAgY2xhc3MgVGV4dHVy
ZSA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFRleHR1cmUoRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyKiwgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4pOworICAgICAgICB2aXJ0dWFsIH5UZXh0
dXJlKCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0
M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3Qg
SW50UmVjdCYgZGVzdFJlY3QpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgRnJhbWVCdWZmZXJT
a1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIHsgcmV0
dXJuIG1fdGV4dHVyZVVwZGF0ZXI7IH0KKworICAgICAgICBGcmFtZUJ1ZmZlclNrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIG1fdGV4dHVyZVVwZGF0ZXI7CisgICAgfTsKKworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcj4gY3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+KTsKKyAgICB2
aXJ0dWFsIH5GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoKTsK
KworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBj
cmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKik7CisgICAgdmlydHVhbCBPcmllbnRhdGlvbiBv
cmllbnRhdGlvbigpIHsgcmV0dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRvcERvd25PcmllbnRh
dGlvbjsgfQorICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1h
dChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKKyAgICB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdy
YXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIE1hbmFnZWRUZXh0dXJlKiwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworCitwcml2
YXRlOgorICAgIGV4cGxpY2l0IEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcihQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPik7Cit9OworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShTS0lBKQorI2VuZGlmIC8vIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKyNlbmRpZiAvLyBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXgg
MzYzMzYyOTY3YWNjZGViYzI1NTllMjljMjRkNDNjMWM4ODg4MDMxNy4uMGJkODJhZTFhMThhMjUz
MGY4NzQyMGU0ODFkMGQ1Y2EyMzBiOTAxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0u
Y3BwCkBAIC00Niw2ICs0NiwyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEltYWdl
TGF5ZXJUZXh0dXJlVXBkYXRlciA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyIHsKIHB1Ymxp
YzoKKyAgICBjbGFzcyBUZXh0dXJlIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmUgeworICAgIHB1YmxpYzoKKyAgICAgICAgVGV4dHVyZShJbWFnZUxheWVyVGV4dHVyZVVwZGF0
ZXIqIHRleHR1cmVVcGRhdGVyLCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiB0ZXh0dXJlKQor
ICAgICAgICAgICAgOiBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKHRleHR1cmUpCisgICAg
ICAgICAgICAsIG1fdGV4dHVyZVVwZGF0ZXIodGV4dHVyZVVwZGF0ZXIpCisgICAgICAgIHsKKyAg
ICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQorICAgICAgICB7CisgICAgICAg
ICAgICB0ZXh0dXJlVXBkYXRlcigpLT51cGRhdGVUZXh0dXJlUmVjdChjb250ZXh0LCBhbGxvY2F0
b3IsIHRleHR1cmUoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QpOworICAgICAgICB9CisKKyAgICBw
cml2YXRlOgorICAgICAgICBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVy
KCkgeyByZXR1cm4gbV90ZXh0dXJlVXBkYXRlcjsgfQorCisgICAgICAgIEltYWdlTGF5ZXJUZXh0
dXJlVXBkYXRlciogbV90ZXh0dXJlVXBkYXRlcjsKKyAgICB9OworCiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyPiBjcmVhdGUoYm9vbCB1c2VNYXBUZXhTdWJJ
bWFnZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VMYXllclRleHR1
cmVVcGRhdGVyKHVzZU1hcFRleFN1YkltYWdlKSk7CkBAIC01Myw2ICs3MiwxMSBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIH5JbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIoKSB7IH0KIAorICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBjcmVhdGVUZXh0
dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBUZXh0dXJlKHRoaXMsIE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpKTsK
KyAgICB9CisKICAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4g
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6Qm90dG9tVXBPcmllbnRhdGlvbjsgfQogCiAgICAgdmlydHVh
bCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVG
b3JtYXQpCkBAIC02MSw3ICs4NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBMYXllclRl
eHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBIDogTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6U2FtcGxlZFRleGVsRm9ybWF0QkdSQTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcHJl
cGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0
aWxlU2l6ZSwgaW50IC8qIGJvcmRlclRleGVscyAqLykKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFy
ZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIC8qIGNvbnRlbnRSZWN0ICovLCBjb25zdCBJbnRTaXpl
JiB0aWxlU2l6ZSwgaW50IC8qIGJvcmRlclRleGVscyAqLykKICAgICB7CiAgICAgICAgIG1fdGV4
U3ViSW1hZ2Uuc2V0U3ViSW1hZ2VTaXplKHRpbGVTaXplKTsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCBmNmM2MmVlOTE2OWVhYWRlMzFjZWE1NjE5YWNh
OGMwYTJjMGI4YjczLi5kMTQ4MmY2ZmYwMmM4MTZhMTk3OTI3NTE5YWZhZGY5MzE4ZjM5NDVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTM1LDEzICszNSwxMyBA
QAogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogCiAjaW5jbHVkZSAiQ2FudmFz
MkRMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5o
IgogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFk
LmgiCiAjaW5jbHVkZSAiR2VvbWV0cnlCaW5kaW5nLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJQYWlu
dGVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgiCiAj
aW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKICNpbmNsdWRlICJOb25Db21wb3NpdGVkQ29udGVu
dEhvc3QuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJl
VXBkYXRlci5oCmluZGV4IDNkODU5N2UzOWU4NWQ0Y2JmMDE1NmQ1Y2MxMTc5NDY3OTUzNzEyNGYu
LjQ1MjVjZTdlYjExYzljNTZlZTFkMjc4NTJmMDcyZjM5NTVjODExZWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVVcGRhdGVyLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKIAorI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NUeXBlczNELmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIApAQCAtMzcs
MTEgKzM4LDI2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNE
OwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEludFNpemU7Ci1jbGFzcyBNYW5hZ2VkVGV4dHVyZTsK
IGNsYXNzIFRleHR1cmVBbGxvY2F0b3I7CitjbGFzcyBUZXh0dXJlTWFuYWdlcjsKIAogY2xhc3Mg
TGF5ZXJUZXh0dXJlVXBkYXRlciA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVyVGV4dHVyZVVwZGF0
ZXI+IHsKIHB1YmxpYzoKKyAgICAvLyBBbGxvd3MgdGV4dHVyZSB1cGxvYWRlcnMgdG8gc3RvcmUg
cGVyLXRpbGUgcmVzb3VyY2VzLgorICAgIGNsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRl
ZDxUZXh0dXJlPiB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5UZXh0dXJlKCkgeyB9
CisKKyAgICAgICAgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleHR1cmUu
Z2V0KCk7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVSZWN0KGNvbnN0IEludFJlY3Qm
IC8qIHNvdXJjZVJlY3QgKi8pIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVjdChH
cmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkgPSAwOworICAgIHByb3RlY3RlZDoKKyAg
ICAgICAgZXhwbGljaXQgVGV4dHVyZShQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiB0ZXh0dXJl
KSA6IG1fdGV4dHVyZSh0ZXh0dXJlKSB7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIE93blB0
cjxNYW5hZ2VkVGV4dHVyZT4gbV90ZXh0dXJlOworICAgIH07CisKICAgICB2aXJ0dWFsIH5MYXll
clRleHR1cmVVcGRhdGVyKCkgeyB9CiAKICAgICBlbnVtIE9yaWVudGF0aW9uIHsKQEAgLTU0LDYg
KzcwLDcgQEAgcHVibGljOgogICAgICAgICBTYW1wbGVkVGV4ZWxGb3JtYXRCR1JBLAogICAgICAg
ICBTYW1wbGVkVGV4ZWxGb3JtYXRJbnZhbGlkLAogICAgIH07CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKSA9IDA7CiAgICAgLy8g
UmV0dXJucyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIHRleHR1cmUgdXBsb2FkZWQgYnkgdGhpcyBp
bnRlcmZhY2UuCiAgICAgdmlydHVhbCBPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpID0gMDsKICAg
ICAvLyBSZXR1cm5zIHRoZSBmb3JtYXQgb2YgdGhlIHRleGVsIHVwbG9hZGVkIGJ5IHRoaXMgaW50
ZXJmYWNlLgpAQCAtNjEsOCArNzgsNyBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBmb3JtYXQgc3Bl
Y2lmaWVzIHRoZSBjb21wb25lbnQgb3JkZXIgaW4gdGhlIHNhbXBsZWQgdGV4ZWwuCiAgICAgLy8g
SWYgdGhlIGZvcm1hdCBpcyBUZXhlbEZvcm1hdEJHUkEsIHZlYzQueCBpcyBibHVlIGFuZCB2ZWM0
LnogaXMgcmVkLgogICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZv
cm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHByZXBh
cmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGls
ZVNpemUsIGludCBib3JkZXJUZXhlbHMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4
dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRl
eHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVj
dCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYg
LyogY29udGVudFJlY3QgKi8sIGNvbnN0IEludFNpemUmIC8qIHRpbGVTaXplICovLCBpbnQgLyog
Ym9yZGVyVGV4ZWxzICovKSB7IH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4
dHVyZVVwZGF0ZXJDYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGFjYjJjZDNlNDZiMzAxMzRlYWY4ODA1YjQ1M2U1Y2FiOGQ1NDVjMWIuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVkZSAi
TGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oIgotCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hy
b21pdW0uaCIKLSNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
Q29sb3IuaCIKLSNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCi0KLSNpZiBVU0UoU0tJQSkKLSNpbmNs
dWRlICJHckNvbnRleHQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCi0jaW5j
bHVkZSAiU2tDYW52YXMuaCIKLSNpbmNsdWRlICJTa0dwdURldmljZS5oIgotI2VuZGlmIC8vIFVT
RShTS0lBKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBVU0UoU0tJQSkKLW5hbWVzcGFj
ZSB7Ci0KLWNsYXNzIEZyYW1lQnVmZmVyIHsKLXB1YmxpYzoKLSAgICBGcmFtZUJ1ZmZlcigpOwot
ICAgIH5GcmFtZUJ1ZmZlcigpOwotCi0gICAgU2tDYW52YXMqIGluaXRpYWxpemUoR3JhcGhpY3ND
b250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1cmUqKTsKLQotcHJpdmF0
ZToKLSAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwotICAgIFBsYXRmb3JtM0RPYmpl
Y3QgbV9mYm87Ci0gICAgT3duUHRyPFNrQ2FudmFzPiBtX2NhbnZhczsKLX07Ci0KLUZyYW1lQnVm
ZmVyOjpGcmFtZUJ1ZmZlcigpCi0gICAgOiBtX2NvbnRleHQoMCkKLSAgICAsIG1fZmJvKDApCi17
Ci19Ci0KLUZyYW1lQnVmZmVyOjp+RnJhbWVCdWZmZXIoKQotewotICAgIG1fY2FudmFzLmNsZWFy
KCk7Ci0KLSAgICBpZiAobV9mYm8pCi0gICAgICAgIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZm
ZXIobV9mYm8pOwotfQotCi1Ta0NhbnZhcyogRnJhbWVCdWZmZXI6OmluaXRpYWxpemUoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgTWFuYWdl
ZFRleHR1cmUqIHRleHR1cmUpCi17Ci0gICAgbV9jb250ZXh0ID0gY29udGV4dDsKLSAgICBtX2Zi
byA9IG1fY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKLSAgICBtX2NvbnRleHQtPmJpbmRG
cmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICB0
ZXh0dXJlLT5mcmFtZWJ1ZmZlclRleHR1cmUyRChtX2NvbnRleHQsIGFsbG9jYXRvcik7Ci0KLSAg
ICAvLyBDcmVhdGUgYSBza2lhIGdwdSBjYW52YXMuCi0gICAgR3JDb250ZXh0KiBnckNvbnRleHQg
PSBtX2NvbnRleHQtPmdyQ29udGV4dCgpOwotICAgIEludFNpemUgY2FudmFzU2l6ZSA9IHRleHR1
cmUtPnNpemUoKTsKLSAgICBHclBsYXRmb3JtU3VyZmFjZURlc2MgdGFyZ2V0RGVzYzsKLSAgICB0
YXJnZXREZXNjLnJlc2V0KCk7Ci0gICAgdGFyZ2V0RGVzYy5mU3VyZmFjZVR5cGUgPSBrVGV4dHVy
ZVJlbmRlclRhcmdldF9HclBsYXRmb3JtU3VyZmFjZVR5cGU7Ci0gICAgdGFyZ2V0RGVzYy5mUmVu
ZGVyVGFyZ2V0RmxhZ3MgPSBrTm9uZV9HclBsYXRmb3JtUmVuZGVyVGFyZ2V0RmxhZ0JpdDsKLSAg
ICB0YXJnZXREZXNjLmZXaWR0aCA9IGNhbnZhc1NpemUud2lkdGgoKTsKLSAgICB0YXJnZXREZXNj
LmZIZWlnaHQgPSBjYW52YXNTaXplLmhlaWdodCgpOwotICAgIHRhcmdldERlc2MuZkNvbmZpZyA9
IGtSR0JBXzg4ODhfR3JQaXhlbENvbmZpZzsKLSAgICB0YXJnZXREZXNjLmZTdGVuY2lsQml0cyA9
IDg7Ci0gICAgdGFyZ2V0RGVzYy5mUGxhdGZvcm1UZXh0dXJlID0gdGV4dHVyZS0+dGV4dHVyZUlk
KCk7Ci0gICAgdGFyZ2V0RGVzYy5mUGxhdGZvcm1SZW5kZXJUYXJnZXQgPSBtX2ZibzsKLSAgICBT
a0F1dG9UVW5yZWY8R3JUZXh0dXJlPiB0YXJnZXQoc3RhdGljX2Nhc3Q8R3JUZXh0dXJlKj4oZ3JD
b250ZXh0LT5jcmVhdGVQbGF0Zm9ybVN1cmZhY2UodGFyZ2V0RGVzYykpKTsKLSAgICBTa0F1dG9U
VW5yZWY8U2tEZXZpY2U+IGRldmljZShuZXcgU2tHcHVEZXZpY2UoZ3JDb250ZXh0LCB0YXJnZXQu
Z2V0KCkpKTsKLSAgICBtX2NhbnZhcyA9IGFkb3B0UHRyKG5ldyBTa0NhbnZhcyhkZXZpY2UuZ2V0
KCkpKTsKLQotICAgIHJldHVybiBtX2NhbnZhcy5nZXQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UK
LSNlbmRpZiAvLyBVU0UoU0tJQSkKLQotTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhczo6TGF5ZXJU
ZXh0dXJlVXBkYXRlckNhbnZhcyhQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWlu
dGVyKQotICAgIDogbV9wYWludGVyKHBhaW50ZXIpCi17Ci19Ci0KLXZvaWQgTGF5ZXJUZXh0dXJl
VXBkYXRlckNhbnZhczo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQotewotICAgIGNvbnRleHQudHJhbnNsYXRlKC1jb250
ZW50UmVjdC54KCksIC1jb250ZW50UmVjdC55KCkpOwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZF
TlQoIkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6OnBhaW50IiwgdGhpcywgMCk7Ci0gICAgICAg
IG1fcGFpbnRlci0+cGFpbnQoY29udGV4dCwgY29udGVudFJlY3QpOwotICAgIH0KLSAgICBtX2Nv
bnRlbnRSZWN0ID0gY29udGVudFJlY3Q7Ci19Ci0KLVBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlVXBk
YXRlckJpdG1hcD4gTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6Y3JlYXRlKFBhc3NPd25QdHI8
TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIsIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwKHBhaW50
ZXIsIHVzZU1hcFRleFN1YkltYWdlKSk7Ci19Ci0KLUxheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6
OkxheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXAoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1
bT4gcGFpbnRlciwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSkKLSAgICA6IExheWVyVGV4dHVyZVVw
ZGF0ZXJDYW52YXMocGFpbnRlcikKLSAgICAsIG1fdGV4U3ViSW1hZ2UodXNlTWFwVGV4U3ViSW1h
Z2UpCi17Ci19Ci0KLUxheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBMYXll
clRleHR1cmVVcGRhdGVyQml0bWFwOjpzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVy
ZUZvcm1hdCkKLXsKLSAgICAvLyBUaGUgY29tcG9uZW50IG9yZGVyIG1heSBiZSBiZ3JhIGlmIHdl
IHVwbG9hZGVkIGJncmEgcGl4ZWxzIHRvIHJnYmEgdGV4dHVyZXMuCi0gICAgcmV0dXJuIFBsYXRm
b3JtQ29sb3I6OnNhbWVDb21wb25lbnRPcmRlcih0ZXh0dXJlRm9ybWF0KSA/Ci0gICAgICAgICAg
ICBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBIDogTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0QkdSQTsKLX0KLQotdm9pZCBMYXllclRleHR1
cmVVcGRhdGVyQml0bWFwOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKQotewotICAgIG1f
dGV4U3ViSW1hZ2Uuc2V0U3ViSW1hZ2VTaXplKHRpbGVTaXplKTsKLQotICAgIG1fY2FudmFzLnJl
c2l6ZShjb250ZW50UmVjdC5zaXplKCkpOwotICAgIC8vIEFzc3VtcHRpb246IGlmIGEgdGlsZXIg
aXMgdXNpbmcgYm9yZGVyIHRleGVscywgdGhlbiBpdCBpcyBiZWNhdXNlIHRoZQotICAgIC8vIGxh
eWVyIGlzIGxpa2VseSB0byBiZSBmaWx0ZXJlZCBvciB0cmFuc2Zvcm1lZC4gQmVjYXVzZSBvZiBp
dCBtaWdodCBiZQotICAgIC8vIHRyYW5zZm9ybWVkLCBkcmF3IHRoZSB0ZXh0IGluIGdyYXlzY2Fs
ZSBpbnN0ZWFkIG9mIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KLSAgICBQbGF0Zm9ybUNhbnZhczo6
UGFpbnRlcjo6VGV4dE9wdGlvbiB0ZXh0T3B0aW9uID0KLSAgICAgICAgYm9yZGVyVGV4ZWxzID8g
UGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OkdyYXlzY2FsZVRleHQgOiBQbGF0Zm9ybUNhbnZhczo6
UGFpbnRlcjo6U3VicGl4ZWxUZXh0OwotICAgIFBsYXRmb3JtQ2FudmFzOjpQYWludGVyIGNhbnZh
c1BhaW50ZXIoJm1fY2FudmFzLCB0ZXh0T3B0aW9uKTsKLSAgICBwYWludENvbnRlbnRzKCpjYW52
YXNQYWludGVyLmNvbnRleHQoKSwgY29udGVudFJlY3QpOwotfQotCi12b2lkIExheWVyVGV4dHVy
ZVVwZGF0ZXJCaXRtYXA6OnVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJl
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKLXsK
LSAgICBQbGF0Zm9ybUNhbnZhczo6QXV0b0xvY2tlciBsb2NrZXIoJm1fY2FudmFzKTsKLQotICAg
IHRleHR1cmUtPmJpbmRUZXh0dXJlKGNvbnRleHQsIGFsbG9jYXRvcik7Ci0gICAgbV90ZXhTdWJJ
bWFnZS51cGxvYWQobG9ja2VyLnBpeGVscygpLCBjb250ZW50UmVjdCgpLCBzb3VyY2VSZWN0LCBk
ZXN0UmVjdCwgdGV4dHVyZS0+Zm9ybWF0KCksIGNvbnRleHQpOwotfQotCi0jaWYgVVNFKFNLSUEp
Ci1QYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU+IExheWVyVGV4dHVyZVVw
ZGF0ZXJTa1BpY3R1cmU6OmNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBw
YWludGVyKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJUZXh0dXJlVXBkYXRlclNr
UGljdHVyZShwYWludGVyKSk7Ci19Ci0KLUxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6Okxh
eWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1
bT4gcGFpbnRlcikKLSAgICA6IExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMocGFpbnRlcikKLXsK
LX0KLQotTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6fkxheWVyVGV4dHVyZVVwZGF0ZXJT
a1BpY3R1cmUoKQotewotfQotCi1MYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3Jt
YXQgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6c2FtcGxlZFRleGVsRm9ybWF0KEdDM0Rl
bnVtIHRleHR1cmVGb3JtYXQpCi17Ci0gICAgLy8gSGVyZSB3ZSBkaXJlY3RseSByZW5kZXIgdG8g
dGhlIHRleHR1cmUsIHNvIHRoZSBjb21wb25lbnQgb3JkZXIgaXMgYWx3YXlzIGNvcnJlY3QuCi0g
ICAgcmV0dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdFJHQkE7Ci19
Ci0KLXZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6cHJlcGFyZVRvVXBkYXRlKGNv
bnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJv
cmRlclRleGVscykKLXsKLSAgICBTa0NhbnZhcyogY2FudmFzID0gbV9waWN0dXJlLmJlZ2luUmVj
b3JkaW5nKGNvbnRlbnRSZWN0LndpZHRoKCksIGNvbnRlbnRSZWN0LmhlaWdodCgpKTsKLSAgICBQ
bGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3JtQ29udGV4dChjYW52YXMpOwotICAgIEdyYXBoaWNz
Q29udGV4dCBncmFwaGljc0NvbnRleHQoJnBsYXRmb3JtQ29udGV4dCk7Ci0gICAgcGFpbnRDb250
ZW50cyhncmFwaGljc0NvbnRleHQsIGNvbnRlbnRSZWN0KTsKLSAgICBtX3BpY3R1cmUuZW5kUmVj
b3JkaW5nKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6dXBkYXRl
VGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3Iq
IGFsbG9jYXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQotewotICAgIC8vIE1ha2Ugc3VyZSBTS0lB
IHVzZXMgdGhlIGNvcnJlY3QgR0wgY29udGV4dC4KLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICAvLyBOb3RpZnkgU0tJQSB0byBzeW5jIGl0cyBpbnRlcm5hbCBHTCBzdGF0
ZS4KLSAgICBjb250ZXh0LT5nckNvbnRleHQoKS0+cmVzZXRDb250ZXh0KCk7Ci0KLSAgICAvLyBD
cmVhdGUgYW4gYWNjZWxlcmF0ZWQgY2FudmFzIHRvIGRyYXcgb24uCi0gICAgRnJhbWVCdWZmZXIg
YnVmZmVyOwotICAgIFNrQ2FudmFzKiBjYW52YXMgPSBidWZmZXIuaW5pdGlhbGl6ZShjb250ZXh0
LCBhbGxvY2F0b3IsIHRleHR1cmUpOwotCi0gICAgY2FudmFzLT5jbGlwUmVjdChTa1JlY3QoZGVz
dFJlY3QpKTsKLSAgICAvLyBUcmFuc2xhdGUgdGhlIG9yaWdpbiBvZiBjb250ZW50UmVjdCB0byB0
aGF0IG9mIGRlc3RSZWN0LgotICAgIC8vIE5vdGUgdGhhdCBkZXN0UmVjdCBpcyBkZWZpbmVkIHJl
bGF0aXZlIHRvIHNvdXJjZVJlY3QuCi0gICAgY2FudmFzLT50cmFuc2xhdGUoY29udGVudFJlY3Qo
KS54KCkgLSBzb3VyY2VSZWN0LngoKSArIGRlc3RSZWN0LngoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICBjb250ZW50UmVjdCgpLnkoKSAtIHNvdXJjZVJlY3QueSgpICsgZGVzdFJlY3QueSgpKTsK
LSAgICBjYW52YXMtPmRyYXdQaWN0dXJlKG1fcGljdHVyZSk7Ci0KLSAgICAvLyBGbHVzaCBTS0lB
IGNvbnRleHQgc28gdGhhdCBhbGwgdGhlIHJlbmRlcmVkIHN0dWZmIGFwcGVhcnMgb24gdGhlIHRl
eHR1cmUuCi0gICAgY29udGV4dC0+Z3JDb250ZXh0KCktPmZsdXNoKCk7Ci19Ci0jZW5kaWYgLy8g
VVNFKFNLSUEpCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSNlbmRpZiAvLyBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFz
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmYzcxYzY4ZmY3YzdkYzk4MjFjZTlh
YzhhMWI0MDg4YWE1ODgzODkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJU
ZXh0dXJlVXBkYXRlckNhbnZhcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0KLSNpZm5kZWYgTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhc19oCi0jZGVmaW5lIExheWVy
VGV4dHVyZVVwZGF0ZXJDYW52YXNfaAotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQotCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCi0jaW5jbHVkZSAiTGF5ZXJUZXh0dXJl
U3ViSW1hZ2UuaCIKLSNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCi0jaW5jbHVkZSAi
UGxhdGZvcm1DYW52YXMuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+Ci0KLSNpZiBVU0UoU0tJQSkKLSNpbmNsdWRlICJTa1BpY3R1cmUu
aCIKLQotY2xhc3MgR3JDb250ZXh0OwotY2xhc3MgU2tDYW52YXM7Ci1jbGFzcyBTa1BpY3R1cmU7
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHcmFwaGljc0NvbnRleHQz
RDsKLWNsYXNzIExheWVyUGFpbnRlckNocm9taXVtOwotCi0vLyBBIExheWVyVGV4dHVyZVVwZGF0
ZXIgd2l0aCBhbiBpbnRlcm5hbCBjYW52YXMuCi1jbGFzcyBMYXllclRleHR1cmVVcGRhdGVyQ2Fu
dmFzIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXIgewotcHJvdGVjdGVkOgotICAgIGV4cGxp
Y2l0IExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJv
bWl1bT4pOwotCi0gICAgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKLSAgICBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGVudFJlY3Q7IH0KLQotcHJpdmF0ZToKLQotICAgIEludFJl
Y3QgbV9jb250ZW50UmVjdDsKLSAgICBPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IG1fcGFp
bnRlcjsKLX07Ci0KLS8vIEEgTGF5ZXJUZXh0dXJlVXBkYXRlciB3aXRoIGFuIGludGVybmFsIGJp
dG1hcCBjYW52YXMuCi1jbGFzcyBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwIDogcHVibGljIExh
eWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA+IGNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFpbnRl
ckNocm9taXVtPiwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSk7Ci0KLSAgICB2aXJ0dWFsIE9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Qm90dG9t
VXBPcmllbnRhdGlvbjsgfQotICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRU
ZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJl
cGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0
aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscyk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1
cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIE1hbmFnZWRUZXh0
dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3Qp
OwotCi1wcml2YXRlOgotICAgIExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXAoUGFzc093blB0cjxM
YXllclBhaW50ZXJDaHJvbWl1bT4sIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpOwotICAgIFBsYXRm
b3JtQ2FudmFzIG1fY2FudmFzOwotICAgIExheWVyVGV4dHVyZVN1YkltYWdlIG1fdGV4U3ViSW1h
Z2U7Ci19OwotCi0jaWYgVVNFKFNLSUEpCi1jbGFzcyBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0
dXJlIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMgewotcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU+IGNyZWF0ZShQYXNz
T3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPik7Ci0gICAgdmlydHVhbCB+TGF5ZXJUZXh0dXJl
VXBkYXRlclNrUGljdHVyZSgpOwotCi0gICAgdmlydHVhbCBPcmllbnRhdGlvbiBvcmllbnRhdGlv
bigpIHsgcmV0dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRvcERvd25PcmllbnRhdGlvbjsgfQot
ICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51
bSB0ZXh0dXJlRm9ybWF0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRl
clRleGVscyk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29u
dGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOwotCi1wcml2YXRlOgotICAg
IGV4cGxpY2l0IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUoUGFzc093blB0cjxMYXllclBh
aW50ZXJDaHJvbWl1bT4pOwotICAKLSAgICBTa1BpY3R1cmUgbV9waWN0dXJlOyAvLyBSZWNvcmRp
bmcgY2FudmFzLgotfTsKLSNlbmRpZiAvLyBVU0UoU0tJQSkKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSNlbmRpZiAvLyBM
YXllclRleHR1cmVVcGRhdGVyQ2FudmFzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGNmZDYzZTcxOTM0
MmFlNzUwYmRmZWFhOGNhYjMyZjFjZmZjODJjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXIuY3BwCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoU0tJQSkK
KworI2luY2x1ZGUgIlNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKworI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVt
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorI2luY2x1ZGUgIlNrQ2FudmFz
LmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Nr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlNrUGljdHVyZUNhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXIoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcikKKyAg
ICA6IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIocGFpbnRlcikKK3sKK30KKworU2tQaWN0dXJl
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6flNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIoKQoreworfQorCit2b2lkIFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6
OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6
ZSYgLyogdGlsZVNpemUgKi8sIGludCAvKiBib3JkZXJUZXhlbHMgKi8pCit7CisgICAgU2tDYW52
YXMqIGNhbnZhcyA9IG1fcGljdHVyZS5iZWdpblJlY29yZGluZyhjb250ZW50UmVjdC53aWR0aCgp
LCBjb250ZW50UmVjdC5oZWlnaHQoKSk7CisgICAgUGxhdGZvcm1Db250ZXh0U2tpYSBwbGF0Zm9y
bUNvbnRleHQoY2FudmFzKTsKKyAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KCZw
bGF0Zm9ybUNvbnRleHQpOworICAgIHBhaW50Q29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBjb250
ZW50UmVjdCk7CisgICAgbV9waWN0dXJlLmVuZFJlY29yZGluZygpOworfQorCit2b2lkIFNrUGlj
dHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmRyYXdQaWN0dXJlKFNrQ2FudmFzKiBjYW52
YXMpCit7CisgICAgVFJBQ0VfRVZFTlQoIlNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXI6OmRyYXdQaWN0dXJlIiwgdGhpcywgMCk7CisgICAgY2FudmFzLT5kcmF3UGljdHVyZShtX3Bp
Y3R1cmUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKFNLSUEp
CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg5
MWE2ZDNjOWYxMjIwMWNhNGIxODE3NDBiZjBmYmE0N2UwMWRiNTQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRl
ZiBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyX2gKKyNkZWZpbmUgU2tQaWN0dXJl
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcl9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisjaWYgVVNFKFNLSUEpCisKKyNpbmNsdWRlICJDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyLmgiCisjaW5jbHVkZSAiU2tQaWN0dXJlLmgiCisKK2NsYXNzIFNrQ2FudmFzOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExheWVyUGFpbnRlckNocm9taXVtOworCitjbGFzcyBT
a1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGljIENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgflNrUGljdHVyZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIoKTsKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IFNrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4p
OworCisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250
ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpOworICAg
IHZvaWQgZHJhd1BpY3R1cmUoU2tDYW52YXMqKTsKKworcHJpdmF0ZToKKyAgICBTa1BpY3R1cmUg
bV9waWN0dXJlOyAvLyBSZWNvcmRpbmcgY2FudmFzLgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorI2VuZGlmIC8vIFVTRShTS0lBKQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKyNlbmRpZiAvLyBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rp
bGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCmluZGV4IGZjYzQ2ZDk5M2Q1NDBhNDIxOWQ3
ZjI3MDEwMDE4NzM4ZWY3YjhmZmUuLjZlMGYzY2JlMTU1ZGRkMGMyN2ViYjA1ZWVmMTE0M2NhMTI4
MGIzZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcApAQCAtNTEsMTcgKzUxLDIw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFVwZGF0YWJsZVRpbGUgOiBwdWJsaWMgQ0NM
YXllclRpbGluZ0RhdGE6OlRpbGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFVwZGF0YWJs
ZVRpbGUpOwogcHVibGljOgotICAgIGV4cGxpY2l0IFVwZGF0YWJsZVRpbGUoUGFzc093blB0cjxN
YW5hZ2VkVGV4dHVyZT4gdGV4KSA6IG1fdGV4KHRleCkgeyB9CisgICAgZXhwbGljaXQgVXBkYXRh
YmxlVGlsZShQYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IHRleHR1cmUp
IDogbV90ZXh0dXJlKHRleHR1cmUpIHsgfQogCi0gICAgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUo
KSB7IHJldHVybiBtX3RleC5nZXQoKTsgfQorICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleHR1cmUuZ2V0KCk7IH0KKyAgICBNYW5hZ2VkVGV4
dHVyZSogbWFuYWdlZFRleHR1cmUoKSB7IHJldHVybiBtX3RleHR1cmUtPnRleHR1cmUoKTsgfQog
CiAgICAgYm9vbCBkaXJ0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2RpcnR5TGF5ZXJSZWN0LmlzRW1w
dHkoKTsgfQogICAgIHZvaWQgY2xlYXJEaXJ0eSgpIHsgbV9kaXJ0eUxheWVyUmVjdCA9IEludFJl
Y3QoKTsgfQogCiAgICAgLy8gTGF5ZXItc3BhY2UgZGlydHkgcmVjdGFuZ2xlIHRoYXQgbmVlZHMg
dG8gYmUgcmVwYWludGVkLgogICAgIEludFJlY3QgbV9kaXJ0eUxheWVyUmVjdDsKKyAgICAvLyBD
b250ZW50LXNwYWNlIHJlY3RhbmdsZSB0aGF0IG5lZWRzIHRvIGJlIHVwZGF0ZWQuCisgICAgSW50
UmVjdCBtX3VwZGF0ZVJlY3Q7CiBwcml2YXRlOgotICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4g
bV90ZXg7CisgICAgUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IG1fdGV4dHVy
ZTsKIH07CiAKIFRpbGVkTGF5ZXJDaHJvbWl1bTo6VGlsZWRMYXllckNocm9taXVtKENDTGF5ZXJE
ZWxlZ2F0ZSogZGVsZWdhdGUpCkBAIC0xNjIsMjIgKzE2NSwxOSBAQCB2b2lkIFRpbGVkTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCwgQwogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKICAgICAg
ICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewogICAgICAgICAgICAgVXBk
YXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKKworICAgICAgICAgICAgLy8gUmVxdWly
ZWQgdGlsZXMgYXJlIGNyZWF0ZWQgaW4gcHJlcGFyZVRvVXBkYXRlKCkuIEEgdGlsZSBzaG91bGQK
KyAgICAgICAgICAgIC8vIG5ldmVyIGJlIHJlbW92ZWQgYmV0d2VlbiB0aGUgY2FsbCB0byBwcmVw
YXJlVG9VcGRhdGUoKSBhbmQgdGhlCisgICAgICAgICAgICAvLyBjYWxsIHRvIHVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMoKS4KICAgICAgICAgICAgIGlmICghdGlsZSkKLSAgICAgICAgICAgICAg
ICB0aWxlID0gY3JlYXRlVGlsZShpLCBqKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCF0aWxlLT5k
aXJ0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIENSQVNI
KCk7CiAKLSAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBwYWdlLXNwYWNlIHJlY3RhbmdsZSB0byBj
b3B5IGZyb20uCi0gICAgICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSBtX3RpbGVyLT50aWxl
Q29udGVudFJlY3QodGlsZSk7Ci0gICAgICAgICAgICBjb25zdCBJbnRQb2ludCBhbmNob3IgPSBz
b3VyY2VSZWN0LmxvY2F0aW9uKCk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmludGVyc2VjdCht
X3RpbGVyLT5sYXllclJlY3RUb0NvbnRlbnRSZWN0KHRpbGUtPm1fZGlydHlMYXllclJlY3QpKTsK
LSAgICAgICAgICAgIC8vIFBhaW50IHJlY3Qgbm90IGd1YXJhbnRlZWQgdG8gbGluZSB1cCBvbiB0
aWxlIGJvdW5kYXJpZXMsIHNvCi0gICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCBzb3VyY2VS
ZWN0IGRvZXNuJ3QgZXh0ZW5kIG91dHNpZGUgb2YgaXQuCi0gICAgICAgICAgICBzb3VyY2VSZWN0
LmludGVyc2VjdChtX3BhaW50UmVjdCk7Ci0gICAgICAgICAgICBpZiAoc291cmNlUmVjdC5pc0Vt
cHR5KCkpCisgICAgICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB0aWxlLT5tX3VwZGF0ZVJl
Y3Q7CisgICAgICAgICAgICBpZiAodGlsZS0+bV91cGRhdGVSZWN0LmlzRW1wdHkoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgQVNTRVJUKHRpbGUtPnRleHR1cmUo
KS0+aXNSZXNlcnZlZCgpKTsKKyAgICAgICAgICAgIEFTU0VSVCh0aWxlLT5tYW5hZ2VkVGV4dHVy
ZSgpLT5pc1Jlc2VydmVkKCkpOworICAgICAgICAgICAgY29uc3QgSW50UG9pbnQgYW5jaG9yID0g
bV90aWxlci0+dGlsZUNvbnRlbnRSZWN0KHRpbGUpLmxvY2F0aW9uKCk7CiAKICAgICAgICAgICAg
IC8vIENhbGN1bGF0ZSB0aWxlLXNwYWNlIHJlY3RhbmdsZSB0byB1cGxvYWQgaW50by4KICAgICAg
ICAgICAgIEludFJlY3QgZGVzdFJlY3QoSW50UG9pbnQoc291cmNlUmVjdC54KCkgLSBhbmNob3Iu
eCgpLCBzb3VyY2VSZWN0LnkoKSAtIGFuY2hvci55KCkpLCBzb3VyY2VSZWN0LnNpemUoKSk7CkBA
IC0xOTcsMTMgKzE5NywxMiBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9z
aXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgQwogICAgICAgICAgICAg
aWYgKHBhaW50T2Zmc2V0LnkoKSArIGRlc3RSZWN0LmhlaWdodCgpID4gbV9wYWludFJlY3QuaGVp
Z2h0KCkpCiAgICAgICAgICAgICAgICAgQ1JBU0goKTsKIAotICAgICAgICAgICAgdGlsZS0+dGV4
dHVyZSgpLT5iaW5kVGV4dHVyZShjb250ZXh0LCB1cGRhdGVyLmFsbG9jYXRvcigpKTsKKyAgICAg
ICAgICAgIHRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPmJpbmRUZXh0dXJlKGNvbnRleHQsIHVwZGF0
ZXIuYWxsb2NhdG9yKCkpOwogICAgICAgICAgICAgY29uc3QgR0MzRGludCBmaWx0ZXIgPSBtX3Rp
bGVyLT5oYXNCb3JkZXJUZXhlbHMoKSA/IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIgOiBHcmFw
aGljc0NvbnRleHQzRDo6TkVBUkVTVDsKICAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBmaWx0ZXIpKTsKICAgICAgICAgICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBmaWx0ZXIpKTsKIAot
ICAgICAgICAgICAgdXBkYXRlci5hcHBlbmQodGlsZS0+dGV4dHVyZSgpLCB0ZXh0dXJlVXBkYXRl
cigpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7Ci0gICAgICAgICAgICB0aWxlLT5jbGVhckRpcnR5
KCk7CisgICAgICAgICAgICB1cGRhdGVyLmFwcGVuZCh0aWxlLT50ZXh0dXJlKCksIHNvdXJjZVJl
Y3QsIGRlc3RSZWN0KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjQwLDEwICsyMzksMTAgQEAg
dm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxh
eWVyKQogICAgICAgICBpbnQgaSA9IGl0ZXItPmZpcnN0LmZpcnN0OwogICAgICAgICBpbnQgaiA9
IGl0ZXItPmZpcnN0LnNlY29uZDsKICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRp
Y19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT5zZWNvbmQuZ2V0KCkpOwotICAgICAgICBpZiAo
IXRpbGUtPnRleHR1cmUoKS0+aXNWYWxpZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVG
b3JtYXQpKQorICAgICAgICBpZiAoIXRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPmlzVmFsaWQobV90
aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIHRpbGVkTGF5ZXItPnN5bmNUZXh0dXJlSWQoaSwgaiwgdGlsZS0+dGV4dHVy
ZSgpLT50ZXh0dXJlSWQoKSk7CisgICAgICAgIHRpbGVkTGF5ZXItPnN5bmNUZXh0dXJlSWQoaSwg
aiwgdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOwogICAgIH0KIH0KIApAQCAt
MjYxLDcgKzI2MCw3IEBAIFVwZGF0YWJsZVRpbGUqIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dGlsZUF0
KGludCBpLCBpbnQgaikgY29uc3QKIAogVXBkYXRhYmxlVGlsZSogVGlsZWRMYXllckNocm9taXVt
OjpjcmVhdGVUaWxlKGludCBpLCBpbnQgaikKIHsKLSAgICBSZWZQdHI8VXBkYXRhYmxlVGlsZT4g
dGlsZSA9IGFkb3B0UmVmKG5ldyBVcGRhdGFibGVUaWxlKE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUo
dGV4dHVyZU1hbmFnZXIoKSkpKTsKKyAgICBSZWZQdHI8VXBkYXRhYmxlVGlsZT4gdGlsZSA9IGFk
b3B0UmVmKG5ldyBVcGRhdGFibGVUaWxlKHRleHR1cmVVcGRhdGVyKCktPmNyZWF0ZVRleHR1cmUo
dGV4dHVyZU1hbmFnZXIoKSkpKTsKICAgICBtX3RpbGVyLT5hZGRUaWxlKHRpbGUsIGksIGopOwog
ICAgIHRpbGUtPm1fZGlydHlMYXllclJlY3QgPSBtX3RpbGVyLT50aWxlTGF5ZXJSZWN0KHRpbGUu
Z2V0KCkpOwogCkBAIC0zMDksMTAgKzMwOCwxMCBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6
cHJvdGVjdFRpbGVUZXh0dXJlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICBmb3Ig
KGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBs
ZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKICAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUg
PSB0aWxlQXQoaSwgaik7Ci0gICAgICAgICAgICBpZiAoIXRpbGUgfHwgIXRpbGUtPnRleHR1cmUo
KS0+aXNWYWxpZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKQorICAgICAg
ICAgICAgaWYgKCF0aWxlIHx8ICF0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGls
ZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAKLSAgICAgICAgICAgIHRpbGUtPnRleHR1cmUoKS0+cmVzZXJ2ZShtX3RpbGVyLT50aWxl
U2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpOworICAgICAgICAgICAgdGlsZS0+bWFuYWdlZFRleHR1
cmUoKS0+cmVzZXJ2ZShtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpOwogICAg
ICAgICB9CiAgICAgfQogfQpAQCAtMzIzLDYgKzMyMiwxMiBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogCiAgICAg
bV9za2lwc0RyYXcgPSBmYWxzZTsKIAorICAgIC8vIFJlc2V0IG1fdXBkYXRlUmVjdCBmb3IgYWxs
IHRpbGVzLgorICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+dGls
ZXMoKS5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0
aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgdGls
ZS0+bV91cGRhdGVSZWN0ID0gSW50UmVjdCgpOworICAgIH0KKwogICAgIGlmIChjb250ZW50UmVj
dC5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0ID0gSW50UmVjdCgp
OwogICAgICAgICByZXR1cm47CkBAIC0zNDYsMTAgKzM1MSwxMCBAQCB2b2lkIFRpbGVkTGF5ZXJD
aHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAg
ICAgICAgICAgaWYgKCF0aWxlKQogICAgICAgICAgICAgICAgIHRpbGUgPSBjcmVhdGVUaWxlKGks
IGopOwogCi0gICAgICAgICAgICBpZiAoIXRpbGUtPnRleHR1cmUoKS0+aXNWYWxpZChtX3RpbGVy
LT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKQorICAgICAgICAgICAgaWYgKCF0aWxlLT5t
YW5hZ2VkVGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZv
cm1hdCkpCiAgICAgICAgICAgICAgICAgdGlsZS0+bV9kaXJ0eUxheWVyUmVjdCA9IG1fdGlsZXIt
PnRpbGVMYXllclJlY3QodGlsZSk7CiAKLSAgICAgICAgICAgIGlmICghdGlsZS0+dGV4dHVyZSgp
LT5yZXNlcnZlKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkpIHsKKyAgICAg
ICAgICAgIGlmICghdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+cmVzZXJ2ZShtX3RpbGVyLT50aWxl
U2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKSB7CiAgICAgICAgICAgICAgICAgbV9za2lwc0RyYXcg
PSB0cnVlOwogICAgICAgICAgICAgICAgIGNsZWFudXBSZXNvdXJjZXMoKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CkBAIC0zNzQsNiArMzc5LDM4IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVt
OjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgLy8gc28g
d2UgZ3JhYiBhIGxvY2FsIHJlZmVyZW5jZSBoZXJlIHRvIGhvbGQgdGhlIHVwZGF0ZXIgYWxpdmUg
dW50aWwgdGhlIHBhaW50IGNvbXBsZXRlcy4KICAgICBSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRl
cj4gcHJvdGVjdG9yKHRleHR1cmVVcGRhdGVyKCkpOwogICAgIHRleHR1cmVVcGRhdGVyKCktPnBy
ZXBhcmVUb1VwZGF0ZShtX3BhaW50UmVjdCwgbV90aWxlci0+dGlsZVNpemUoKSwgbV90aWxlci0+
aGFzQm9yZGVyVGV4ZWxzKCkpOworCisgICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRp
Y2VzKG1fcmVxdWVzdGVkVXBkYXRlUmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAg
ICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CisgICAgICAgIGZvciAoaW50
IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKKyAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUq
IHRpbGUgPSB0aWxlQXQoaSwgaik7CisKKyAgICAgICAgICAgIC8vIFRpbGVzIGFyZSBjcmVhdGVk
IGJlZm9yZSBwcmVwYXJlVG9VcGRhdGUoKSBpcyBjYWxsZWQuCisgICAgICAgICAgICBpZiAoIXRp
bGUpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKworICAgICAgICAgICAgaWYgKCF0aWxlLT5k
aXJ0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvLyBDYWxj
dWxhdGUgY29udGVudC1zcGFjZSByZWN0YW5nbGUgdG8gY29weSBmcm9tLgorICAgICAgICAgICAg
SW50UmVjdCBzb3VyY2VSZWN0ID0gbV90aWxlci0+dGlsZUNvbnRlbnRSZWN0KHRpbGUpOworICAg
ICAgICAgICAgY29uc3QgSW50UG9pbnQgYW5jaG9yID0gc291cmNlUmVjdC5sb2NhdGlvbigpOwor
ICAgICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QobV90aWxlci0+bGF5ZXJSZWN0VG9Db250
ZW50UmVjdCh0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0KSk7CisgICAgICAgICAgICAvLyBQYWludCBy
ZWN0IG5vdCBndWFyYW50ZWVkIHRvIGxpbmUgdXAgb24gdGlsZSBib3VuZGFyaWVzLCBzbworICAg
ICAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgc291cmNlUmVjdCBkb2Vzbid0IGV4dGVuZCBvdXRz
aWRlIG9mIGl0LgorICAgICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QobV9wYWludFJlY3Qp
OworCisgICAgICAgICAgICAvLyB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkgdXNlcyBtX3Vw
ZGF0ZVJlY3QgdG8gZGV0ZXJtaW5lCisgICAgICAgICAgICAvLyB0aGUgdGlsZXMgdG8gdXBkYXRl
IHNvIHdlIGNhbiBjbGVhciB0aGUgZGlydHkgcmVjdGFuZ2xlIGhlcmUuCisgICAgICAgICAgICB0
aWxlLT5jbGVhckRpcnR5KCk7CisKKyAgICAgICAgICAgIHRpbGUtPm1fdXBkYXRlUmVjdCA9IHNv
dXJjZVJlY3Q7CisgICAgICAgICAgICBpZiAoc291cmNlUmVjdC5pc0VtcHR5KCkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHRpbGUtPnRleHR1cmUoKS0+cHJlcGFy
ZVJlY3Qoc291cmNlUmVjdCk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVw
ZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUZXh0dXJlVXBkYXRlci5jcHAKaW5kZXggOTg0MzcwZWRhOTVjNTIzZjU5ZWU1NWM4N2FjODI4
NzFlMDJhNzNiYi4uODc0NWM0ZWEwYTcxMGJkZTE4ZWRlMTgyMGYzMTRmZGI4Y2M4NzJhYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
ZXh0dXJlVXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAKQEAgLTQ4LDE0ICs0OCwxMiBAQCBDQ1Rl
eHR1cmVVcGRhdGVyOjp+Q0NUZXh0dXJlVXBkYXRlcigpCiB7CiB9CiAKLXZvaWQgQ0NUZXh0dXJl
VXBkYXRlcjo6YXBwZW5kKE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBMYXllclRleHR1cmVVcGRh
dGVyKiB1cGRhdGVyLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBk
ZXN0UmVjdCkKK3ZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6YXBwZW5kKExheWVyVGV4dHVyZVVwZGF0
ZXI6OlRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFJlY3QmIGRlc3RSZWN0KQogewogICAgIEFTU0VSVCh0ZXh0dXJlKTsKLSAgICBBU1NFUlQodXBk
YXRlcik7CiAKICAgICBVcGRhdGVFbnRyeSBlbnRyeTsKICAgICBlbnRyeS5tX3RleHR1cmUgPSB0
ZXh0dXJlOwotICAgIGVudHJ5Lm1fdXBkYXRlciA9IHVwZGF0ZXI7CiAgICAgZW50cnkubV9zb3Vy
Y2VSZWN0ID0gc291cmNlUmVjdDsKICAgICBlbnRyeS5tX2Rlc3RSZWN0ID0gZGVzdFJlY3Q7CiAg
ICAgbV9lbnRyaWVzLmFwcGVuZChlbnRyeSk7CkBAIC03MSw3ICs2OSw3IEBAIGJvb2wgQ0NUZXh0
dXJlVXBkYXRlcjo6dXBkYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBzaXplX3QgY291
bnQpCiAgICAgc2l6ZV90IG1heEluZGV4ID0gbWluKG1fZW50cnlJbmRleCArIGNvdW50LCBtX2Vu
dHJpZXMuc2l6ZSgpKTsKICAgICBmb3IgKDsgbV9lbnRyeUluZGV4IDwgbWF4SW5kZXg7ICsrbV9l
bnRyeUluZGV4KSB7CiAgICAgICAgIFVwZGF0ZUVudHJ5JiBlbnRyeSA9IG1fZW50cmllc1ttX2Vu
dHJ5SW5kZXhdOwotICAgICAgICBlbnRyeS5tX3VwZGF0ZXItPnVwZGF0ZVRleHR1cmVSZWN0KGNv
bnRleHQsIG1fYWxsb2NhdG9yLCBlbnRyeS5tX3RleHR1cmUsIGVudHJ5Lm1fc291cmNlUmVjdCwg
ZW50cnkubV9kZXN0UmVjdCk7CisgICAgICAgIGVudHJ5Lm1fdGV4dHVyZS0+dXBkYXRlUmVjdChj
b250ZXh0LCBtX2FsbG9jYXRvciwgZW50cnkubV9zb3VyY2VSZWN0LCBlbnRyeS5tX2Rlc3RSZWN0
KTsKICAgICB9CiAKICAgICBpZiAobWF4SW5kZXggPCBtX2VudHJpZXMuc2l6ZSgpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0
dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUZXh0dXJlVXBkYXRlci5oCmluZGV4IDE3YjhhYWZhMDZjZTdhNmQyMGEwZTVmYjRjOTE0
ZTcyZmM5Mzk0YTEuLmJmNzlhYzljMmUyMmVmYzVlZGE5YTY0ODI5ZTJlZmNjZWMxNWJiMzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgKQEAgLTI3LDEzICsyNywxMiBAQAogI2RlZmlu
ZSBDQ1RleHR1cmVVcGRhdGVyX2gKIAogI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJM
YXllclRleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwotY2xhc3MgTGF5ZXJUZXh0
dXJlVXBkYXRlcjsKLWNsYXNzIE1hbmFnZWRUZXh0dXJlOwogY2xhc3MgVGV4dHVyZUFsbG9jYXRv
cjsKIAogY2xhc3MgQ0NUZXh0dXJlVXBkYXRlciB7CkBAIC00MSw3ICs0MCw3IEBAIHB1YmxpYzoK
ICAgICBDQ1RleHR1cmVVcGRhdGVyKFRleHR1cmVBbGxvY2F0b3IqKTsKICAgICB+Q0NUZXh0dXJl
VXBkYXRlcigpOwogCi0gICAgdm9pZCBhcHBlbmQoTWFuYWdlZFRleHR1cmUqLCBMYXllclRleHR1
cmVVcGRhdGVyKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVz
dFJlY3QpOworICAgIHZvaWQgYXBwZW5kKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqLCBj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CiAKICAg
ICBib29sIGhhc01vcmVVcGRhdGVzKCkgY29uc3Q7CiAKQEAgLTU0LDggKzUzLDcgQEAgcHVibGlj
OgogCiBwcml2YXRlOgogICAgIHN0cnVjdCBVcGRhdGVFbnRyeSB7Ci0gICAgICAgIE1hbmFnZWRU
ZXh0dXJlKiBtX3RleHR1cmU7Ci0gICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXIqIG1fdXBkYXRl
cjsKKyAgICAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSogbV90ZXh0dXJlOwogICAg
ICAgICBJbnRSZWN0IG1fc291cmNlUmVjdDsKICAgICAgICAgSW50UmVjdCBtX2Rlc3RSZWN0Owog
ICAgIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116000</attachid>
            <date>2011-11-20 14:46:10 -0800</date>
            <delta_ts>2011-11-22 16:45:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71388-20111120144609.patch</filename>
            <type>text/plain</type>
            <size>70815</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwODcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODYyNTM4MzM0YjUyNTU3
NmVlNGM2MWRmY2Q0ZDI5NjY0NmQ1NWNhMS4uM2U3YmUyYTA5MDg1Yjk0NzU1OGUwYTQ5YzAwYWQy
ODg1OGVjNTYzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg5IEBACisyMDExLTExLTIwICBEYXZp
ZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBB
ZGQgc3VwcG9ydCBmb3IgcGFpbnRpbmcgaW50byBhbiBTa1BpY3R1cmUgYW5kIHRoZW4gcmFzdGVy
aXppbmcgaW50byB0aWxlLXNpemVkIGNodW5rcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMzg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIFVwZGF0YWJsZVRleHR1cmUgY2xhc3MsIHdoaWNoIGFs
bG93cyB0ZXh0dXJlIHVwZGF0ZXIgdG8KKyAgICAgICAgYWxsb2NhdGUgdGlsZSBzcGVjaWZpYyBy
ZXNvdXJjZXMgYW5kIHBhaW50IHRpbGVzIHNlcGFyYXRlbHkuCisgICAgICAgIFJlbmFtZSB0ZXh0
dXJlIHVwbG9hZGVyIGNsYXNzZXMgYW5kIG1vdmUgdGhlbSB0byBzZXBhcmF0ZSBmaWxlcy4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMuIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0
dXJlOjp+VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyOjpUZXh0dXJlOjp1cGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXI6On5CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZVRleHR1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6c2FtcGxlZFRleGVs
Rm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyOjp1cGRhdGVUZXh0dXJlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRl
eHR1cmVVcGRhdGVyLmguCisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyOjpUZXh0dXJlOjp0ZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpvcmllbnRhdGlvbik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGV4dHVyZVVwZGF0ZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OkNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6fkNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cGFpbnRDb250ZW50
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmguCisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyOjpjb250ZW50UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
QnVmZmVyOjpGcmFtZUJ1ZmZlcjo6RnJhbWVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVCdWZmZXI6OkZyYW1lQnVmZmVyOjp+RnJhbWVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVCdWZmZXI6OkZyYW1lQnVmZmVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6On5UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6
dXBkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1
ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OkZyYW1lQnVmZmVyU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1
ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6On5GcmFtZUJ1ZmZlclNrUGlj
dHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVC
dWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGVUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6c2FtcGxlZFRleGVsRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVm
ZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBkYXRlVGV4dHVyZVJlY3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmguCisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXI6OlRleHR1cmU6OnRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVm
ZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6b3JpZW50YXRpb24pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OlRl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0
dXJlOjp1cGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZTo6dGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VM
YXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6On5UZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6cHJlcGFyZVJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRh
dGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVw
ZGF0ZXJDYW52YXMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oLgorICAgICAgICAoV2ViQ29yZTo6U2tQaWN0dXJl
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcik6CisgICAgICAgIChXZWJDb3JlOjpTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjp+U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJD
b3JlOjpTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
ZHJhd1BpY3R1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGlj
dHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpVcGRhdGFibGVUaWxlOjpVcGRhdGFibGVUaWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlVwZGF0YWJsZVRpbGU6OnRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
VXBkYXRhYmxlVGlsZTo6bWFuYWdlZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRM
YXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6
VGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VGlsZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXI6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RleHR1cmVVcGRhdGVyOjp1cGRhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaDoKKwogMjAxMS0xMS0xOSAgS2V2aW4gT2xsaXZp
ZXIgIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4KIAogICAgICAgICBbd3hdIEMrKyBiaW5kaW5n
cyBidWlsZCBmaXggZm9yIG1vdmUgb2YgYXJyYXkgY2xhc3NlcyB0byBXVEYuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggY2Q1ZjI1NjUxNTM3ZWE4M2QxZmMzMDY1OWM4ODVmMDcxYzg3OTFjOC4uZWYxOTYy
ZDA3ZWMxNjFjMTRjYTkyODNiMjk2YTE2MGNkNmUwYjQ0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAt
MzQ1OCwxMCArMzQ1OCwxNCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL1Bh
dGhDRy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL1RyYW5zZm9ybWF0aW9uTWF0
cml4Q0cuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRt
YXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21p
dW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMy
RExheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcGxl
eFRleHRDb250cm9sbGVyTGludXguY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAnLApAQCAt
MzQ4Miw2ICszNDg2LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250UmVuZGVyU3R5bGUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5oJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5kaW5nLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5k
aW5nLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFn
ZVRyZWVOb2RlQ2hyb21pdW1XaW4uY3BwJywKQEAgLTM1MDUsOCArMzUxMSw2IEBACiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVT
dWJJbWFnZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVVcGRhdGVyLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL05vbkNvbXBvc2l0ZWRDb250ZW50SG9z
dC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL05vbkNvbXBv
c2l0ZWRDb250ZW50SG9zdC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9NZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oJywKQEAgLTM1MjgsNiArMzUzMiw4IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0u
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERh
dGFDaHJvbWl1bVdpbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1NpbXBsZUZvbnREYXRhTGludXguY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1h
cENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMDAzODYyOWFmMzlkN2RkYTA5ZWYyYWJjOGNhZDZhZDc4N2Q5OTg5MQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Jp
dG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisKKyNpbmNsdWRlICJCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCisKKyNp
bmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29sb3Iu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjpUZXh0dXJlOjpUZXh0dXJlKEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIHRl
eHR1cmVVcGRhdGVyLCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiB0ZXh0dXJlKQorICAgIDog
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSh0ZXh0dXJlKQorICAgICwgbV90ZXh0dXJlVXBk
YXRlcih0ZXh0dXJlVXBkYXRlcikKK3sKK30KKworQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZTo6flRleHR1cmUoKQoreworfQorCit2b2lkIEJpdG1hcENhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit7CisgICAgdGV4dHVyZVVwZGF0ZXIoKS0+
dXBkYXRlVGV4dHVyZVJlY3QoY29udGV4dCwgYWxsb2NhdG9yLCB0ZXh0dXJlKCksIHNvdXJjZVJl
Y3QsIGRlc3RSZWN0KTsKK30KKworUGFzc1JlZlB0cjxCaXRtYXBDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyPiBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUoUGFzc093blB0
cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlciwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIocGFpbnRlciwgdXNlTWFwVGV4U3ViSW1hZ2UpKTsKK30KKworQml0bWFwQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3duUHRy
PExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyLCBib29sIHVzZU1hcFRleFN1YkltYWdlKQor
ICAgIDogQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihwYWludGVyKQorICAgICwgbV90ZXhTdWJJ
bWFnZSh1c2VNYXBUZXhTdWJJbWFnZSkKK3sKK30KKworQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6fkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoKQoreworfQorCitQYXNz
UmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IEJpdG1hcENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI6OmNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlKHRoaXMsIE1hbmFnZWRUZXh0dXJlOjpjcmVh
dGUobWFuYWdlcikpKTsKK30KKworTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9y
bWF0IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnNhbXBsZWRUZXhlbEZvcm1hdChH
QzNEZW51bSB0ZXh0dXJlRm9ybWF0KQoreworICAgIC8vIFRoZSBjb21wb25lbnQgb3JkZXIgbWF5
IGJlIGJncmEgaWYgd2UgdXBsb2FkZWQgYmdyYSBwaXhlbHMgdG8gcmdiYSB0ZXh0dXJlcy4KKyAg
ICByZXR1cm4gUGxhdGZvcm1Db2xvcjo6c2FtZUNvbXBvbmVudE9yZGVyKHRleHR1cmVGb3JtYXQp
ID8KKyAgICAgICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdFJH
QkEgOiBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRCR1JBOworfQorCit2
b2lkIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZShjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3Jk
ZXJUZXhlbHMsIGZsb2F0IGNvbnRlbnRzU2NhbGUpCit7CisgICAgbV90ZXhTdWJJbWFnZS5zZXRT
dWJJbWFnZVNpemUodGlsZVNpemUpOworCisgICAgbV9jYW52YXMucmVzaXplKGNvbnRlbnRSZWN0
LnNpemUoKSk7CisgICAgLy8gQXNzdW1wdGlvbjogaWYgYSB0aWxlciBpcyB1c2luZyBib3JkZXIg
dGV4ZWxzLCB0aGVuIGl0IGlzIGJlY2F1c2UgdGhlCisgICAgLy8gbGF5ZXIgaXMgbGlrZWx5IHRv
IGJlIGZpbHRlcmVkIG9yIHRyYW5zZm9ybWVkLiBCZWNhdXNlIG9mIGl0IG1pZ2h0IGJlCisgICAg
Ly8gdHJhbnNmb3JtZWQsIGRyYXcgdGhlIHRleHQgaW4gZ3JheXNjYWxlIGluc3RlYWQgb2Ygc3Vi
cGl4ZWwgYW50aWFsaWFzaW5nLgorICAgIFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpUZXh0T3B0
aW9uIHRleHRPcHRpb24gPQorICAgICAgICBib3JkZXJUZXhlbHMgPyBQbGF0Zm9ybUNhbnZhczo6
UGFpbnRlcjo6R3JheXNjYWxlVGV4dCA6IFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpTdWJwaXhl
bFRleHQ7CisgICAgUGxhdGZvcm1DYW52YXM6OlBhaW50ZXIgY2FudmFzUGFpbnRlcigmbV9jYW52
YXMsIHRleHRPcHRpb24pOworICAgIHBhaW50Q29udGVudHMoKmNhbnZhc1BhaW50ZXIuY29udGV4
dCgpLCBjb250ZW50UmVjdCwgY29udGVudHNTY2FsZSk7Cit9CisKK3ZvaWQgQml0bWFwQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgTWFuYWdlZFRleHR1cmUqIHRl
eHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0
KQoreworICAgIFBsYXRmb3JtQ2FudmFzOjpBdXRvTG9ja2VyIGxvY2tlcigmbV9jYW52YXMpOwor
CisgICAgdGV4dHVyZS0+YmluZFRleHR1cmUoY29udGV4dCwgYWxsb2NhdG9yKTsKKyAgICBtX3Rl
eFN1YkltYWdlLnVwbG9hZChsb2NrZXIucGl4ZWxzKCksIGNvbnRlbnRSZWN0KCksIHNvdXJjZVJl
Y3QsIGRlc3RSZWN0LCB0ZXh0dXJlLT5mb3JtYXQoKSwgY29udGV4dCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRt
YXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzhlNmUwMmRhMmZjNjU3YmQ2OWQ3MzQzYzdiMzkwMmI5NTM1YTMwNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1h
cENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisj
aWZuZGVmIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXJfaAorI2RlZmluZSBCaXRtYXBD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKworI2luY2x1ZGUgIkNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRl
ICJMYXllclRleHR1cmVTdWJJbWFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ2FudmFzLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGF5ZXJQYWludGVyQ2hyb21pdW07CisKKy8v
IEEgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciB3aXRoIGFuIGludGVybmFsIGJpdG1hcC4KK2Ns
YXNzIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMgQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlciB7CitwdWJsaWM6CisgICAgY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBMYXll
clRleHR1cmVVcGRhdGVyOjpUZXh0dXJlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRleHR1cmUo
Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciosIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1
cmU+KTsKKyAgICAgICAgdmlydHVhbCB+VGV4dHVyZSgpOworCisgICAgICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKworICAgIHBy
aXZhdGU6CisgICAgICAgIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVV
cGRhdGVyKCkgeyByZXR1cm4gbV90ZXh0dXJlVXBkYXRlcjsgfQorCisgICAgICAgIEJpdG1hcENh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIG1fdGV4dHVyZVVwZGF0ZXI7CisgICAgfTsKKworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI+IGNyZWF0
ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiwgYm9vbCB1c2VNYXBUZXhTdWJJbWFn
ZSk7CisgICAgdmlydHVhbCB+Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcigpOworCisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IGNyZWF0
ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKTsKKyAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKCkgeyByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Qm90dG9tVXBPcmllbnRhdGlv
bjsgfQorICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChH
QzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRl
KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50
IGJvcmRlclRleGVscywgZmxvYXQgY29udGVudHNTY2FsZSk7CisgICAgdm9pZCB1cGRhdGVUZXh0
dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBNYW5hZ2VkVGV4
dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0
KTsKKworcHJpdmF0ZToKKyAgICBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBhc3NP
d25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+LCBib29sIHVzZU1hcFRleFN1YkltYWdlKTsKKwor
ICAgIFBsYXRmb3JtQ2FudmFzIG1fY2FudmFzOworICAgIExheWVyVGV4dHVyZVN1YkltYWdlIG1f
dGV4U3ViSW1hZ2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2VuZGlmIC8vIEJpdG1hcENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41ZmE2Nzg1NGM2YmQ3ZjUzODJiNTJiMGVlZmJhMTAzMTY2ZmMwOGZlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorCisjaW5jbHVkZSAiQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKKyNp
bmNsdWRlICJUcmFjZUV2ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3duUHRyPExh
eWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyKQorICAgIDogbV9wYWludGVyKHBhaW50ZXIpCit7
Cit9CisKK0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6On5DYW52YXNMYXllclRleHR1cmVVcGRh
dGVyKCkKK3sKK30KKwordm9pZCBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwYWludENvbnRl
bnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qs
IGZsb2F0IGNvbnRlbnRzU2NhbGUpCit7CisgICAgY29udGV4dC50cmFuc2xhdGUoLWNvbnRlbnRS
ZWN0LngoKSwgLWNvbnRlbnRSZWN0LnkoKSk7CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgi
TGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhczo6cGFpbnQiLCB0aGlzLCAwKTsKKworICAgICAgICBJ
bnRSZWN0IHNjYWxlZENvbnRlbnRSZWN0ID0gY29udGVudFJlY3Q7CisKKyAgICAgICAgaWYgKGNv
bnRlbnRzU2NhbGUgIT0gMS4wKSB7CisgICAgICAgICAgICBjb250ZXh0LnNhdmUoKTsKKyAgICAg
ICAgICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKGNvbnRlbnRzU2NhbGUsIGNvbnRlbnRzU2Nh
bGUpKTsKKworICAgICAgICAgICAgRmxvYXRSZWN0IHJlY3QgPSBjb250ZW50UmVjdDsKKyAgICAg
ICAgICAgIHJlY3Quc2NhbGUoMSAvIGNvbnRlbnRzU2NhbGUpOworICAgICAgICAgICAgc2NhbGVk
Q29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpOworICAgICAgICB9CisKKyAgICAg
ICAgbV9wYWludGVyLT5wYWludChjb250ZXh0LCBzY2FsZWRDb250ZW50UmVjdCk7CisKKyAgICAg
ICAgaWYgKGNvbnRlbnRzU2NhbGUgIT0gMS4wKQorICAgICAgICAgICAgY29udGV4dC5yZXN0b3Jl
KCk7CisgICAgfQorICAgIG1fY29udGVudFJlY3QgPSBjb250ZW50UmVjdDsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOGZl
ZmYzNDIyYjFiODUzMGI4ZjY4OWZmMmM1NjY3NjYwYmVkNWNmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlci5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcl9oCisjZGVmaW5lIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXJfaAor
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiTGF5ZXJUZXh0
dXJlVXBkYXRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29u
dGV4dDNEOworY2xhc3MgTGF5ZXJQYWludGVyQ2hyb21pdW07CisKKy8vIEEgTGF5ZXJUZXh0dXJl
VXBkYXRlciB3aXRoIGFuIGludGVybmFsIGNhbnZhcy4KK2NsYXNzIENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlciB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB+Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcigpOworCitwcm90ZWN0ZWQ6CisgICAgZXhw
bGljaXQgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3duUHRyPExheWVyUGFpbnRlckNo
cm9taXVtPik7CisKKyAgICB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QsIGZsb2F0IGNvbnRlbnRzU2NhbGUpOworICAgIGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50UmVjdDsgfQor
Citwcml2YXRlOgorICAgIEludFJlY3QgbV9jb250ZW50UmVjdDsKKyAgICBPd25QdHI8TGF5ZXJQ
YWludGVyQ2hyb21pdW0+IG1fcGFpbnRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjZW5kaWYgLy8gQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAK
aW5kZXggOWViMWQ3OTlmNmQ5MWVjZWM2Nzk4MTA2ZWM2MDI3YmI0MWU1MjUyMC4uZWMzNmEyZDQx
MWYzY2YwZGY5ZDQ0ZTdiZjE3YjgwNmJhNTdiYzE5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmNwcApAQCAtMzQsOSArMzQsMTAgQEAKIAogI2luY2x1ZGUgIkNvbnRlbnRMYXll
ckNocm9taXVtLmgiCiAKKyNpbmNsdWRlICJCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
LmgiCisjaW5jbHVkZSAiRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXll
clJlbmRlcmVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyQ2FudmFz
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRy
ZWVIb3N0LmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkBAIC0xMjAsMTIgKzEyMSwx
MiBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcihjb25z
dCBDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiB7CiAjaWYgVVNFKFNLSUEpCiAgICAgaWYgKGhvc3Qt
PnNldHRpbmdzKCkuYWNjZWxlcmF0ZVBhaW50aW5nKSB7Ci0gICAgICAgIG1fdGV4dHVyZVVwZGF0
ZXIgPSBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpjcmVhdGUoQ29udGVudExheWVyUGFp
bnRlcjo6Y3JlYXRlKG1fZGVsZWdhdGUpKTsKKyAgICAgICAgbV90ZXh0dXJlVXBkYXRlciA9IEZy
YW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKENvbnRl
bnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX2RlbGVnYXRlKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAjZW5kaWYgLy8gVVNFKFNLSUEpCiAKLSAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJU
ZXh0dXJlVXBkYXRlckJpdG1hcDo6Y3JlYXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZSht
X2RlbGVnYXRlKSwgaG9zdC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nTWFwU3Vi
KTsKKyAgICBtX3RleHR1cmVVcGRhdGVyID0gQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6Y3JlYXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX2RlbGVnYXRlKSwgaG9zdC0+
bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nTWFwU3ViKTsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZm
ZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTk0NWUwNjQ5Y2MwZGMyNmI2MjVmYjNl
NGY1N2FmZTk4MGQ3YjZlOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlci5jcHAKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoU0tJQSkK
KworI2luY2x1ZGUgIkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
ci5oIgorCisjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJTa0Nh
bnZhcy5oIgorI2luY2x1ZGUgIlNrR3B1RGV2aWNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworbmFtZXNwYWNlIHsKKworY2xhc3MgRnJhbWVCdWZmZXIgeworcHVibGljOgorICAgIEZyYW1l
QnVmZmVyKCk7CisgICAgfkZyYW1lQnVmZmVyKCk7CisKKyAgICBTa0NhbnZhcyogaW5pdGlhbGl6
ZShHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBNYW5hZ2VkVGV4dHVyZSop
OworCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CisgICAgUGxh
dGZvcm0zRE9iamVjdCBtX2ZibzsKKyAgICBPd25QdHI8U2tDYW52YXM+IG1fY2FudmFzOworfTsK
KworRnJhbWVCdWZmZXI6OkZyYW1lQnVmZmVyKCkKKyAgICA6IG1fY29udGV4dCgwKQorICAgICwg
bV9mYm8oMCkKK3sKK30KKworRnJhbWVCdWZmZXI6On5GcmFtZUJ1ZmZlcigpCit7CisgICAgbV9j
YW52YXMuY2xlYXIoKTsKKworICAgIGlmIChtX2ZibykKKyAgICAgICAgbV9jb250ZXh0LT5kZWxl
dGVGcmFtZWJ1ZmZlcihtX2Zibyk7Cit9CisKK1NrQ2FudmFzKiBGcmFtZUJ1ZmZlcjo6aW5pdGlh
bGl6ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2Nh
dG9yLCBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSkKK3sKKyAgICBtX2NvbnRleHQgPSBjb250ZXh0
OworICAgIG1fZmJvID0gbV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIG1fY29u
dGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9m
Ym8pOworICAgIHRleHR1cmUtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKG1fY29udGV4dCwgYWxsb2Nh
dG9yKTsKKworICAgIC8vIENyZWF0ZSBhIHNraWEgZ3B1IGNhbnZhcy4KKyAgICBHckNvbnRleHQq
IGdyQ29udGV4dCA9IG1fY29udGV4dC0+Z3JDb250ZXh0KCk7CisgICAgSW50U2l6ZSBjYW52YXNT
aXplID0gdGV4dHVyZS0+c2l6ZSgpOworICAgIEdyUGxhdGZvcm1TdXJmYWNlRGVzYyB0YXJnZXRE
ZXNjOworICAgIHRhcmdldERlc2MucmVzZXQoKTsKKyAgICB0YXJnZXREZXNjLmZTdXJmYWNlVHlw
ZSA9IGtUZXh0dXJlUmVuZGVyVGFyZ2V0X0dyUGxhdGZvcm1TdXJmYWNlVHlwZTsKKyAgICB0YXJn
ZXREZXNjLmZSZW5kZXJUYXJnZXRGbGFncyA9IGtOb25lX0dyUGxhdGZvcm1SZW5kZXJUYXJnZXRG
bGFnQml0OworICAgIHRhcmdldERlc2MuZldpZHRoID0gY2FudmFzU2l6ZS53aWR0aCgpOworICAg
IHRhcmdldERlc2MuZkhlaWdodCA9IGNhbnZhc1NpemUuaGVpZ2h0KCk7CisgICAgdGFyZ2V0RGVz
Yy5mQ29uZmlnID0ga1JHQkFfODg4OF9HclBpeGVsQ29uZmlnOworICAgIHRhcmdldERlc2MuZlN0
ZW5jaWxCaXRzID0gODsKKyAgICB0YXJnZXREZXNjLmZQbGF0Zm9ybVRleHR1cmUgPSB0ZXh0dXJl
LT50ZXh0dXJlSWQoKTsKKyAgICB0YXJnZXREZXNjLmZQbGF0Zm9ybVJlbmRlclRhcmdldCA9IG1f
ZmJvOworICAgIFNrQXV0b1RVbnJlZjxHclRleHR1cmU+IHRhcmdldChzdGF0aWNfY2FzdDxHclRl
eHR1cmUqPihnckNvbnRleHQtPmNyZWF0ZVBsYXRmb3JtU3VyZmFjZSh0YXJnZXREZXNjKSkpOwor
ICAgIFNrQXV0b1RVbnJlZjxTa0RldmljZT4gZGV2aWNlKG5ldyBTa0dwdURldmljZShnckNvbnRl
eHQsIHRhcmdldC5nZXQoKSkpOworICAgIG1fY2FudmFzID0gYWRvcHRQdHIobmV3IFNrQ2FudmFz
KGRldmljZS5nZXQoKSkpOworCisgICAgcmV0dXJuIG1fY2FudmFzLmdldCgpOworfQorCit9IC8v
IG5hbWVzcGFjZQorCitGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXI6OlRleHR1cmU6OlRleHR1cmUoRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlciwgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4
dHVyZSkKKyAgICA6IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUodGV4dHVyZSkKKyAgICAs
IG1fdGV4dHVyZVVwZGF0ZXIodGV4dHVyZVVwZGF0ZXIpCit7Cit9CisKK0ZyYW1lQnVmZmVyU2tQ
aWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6flRleHR1cmUoKQorewor
fQorCit2b2lkIEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
VGV4dHVyZTo6dXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFs
bG9jYXRvciogYWxsb2NhdG9yLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRS
ZWN0JiBkZXN0UmVjdCkKK3sKKyAgICB0ZXh0dXJlVXBkYXRlcigpLT51cGRhdGVUZXh0dXJlUmVj
dChjb250ZXh0LCBhbGxvY2F0b3IsIHRleHR1cmUoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QpOwor
fQorCitQYXNzUmVmUHRyPEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcj4gRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVh
dGUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcikKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcihwYWludGVyKSk7Cit9CisKK0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6RnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
KFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIpCisgICAgOiBTa1BpY3R1
cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKHBhaW50ZXIpCit7Cit9CisKK0ZyYW1lQnVmZmVy
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6fkZyYW1lQnVmZmVyU2tQaWN0dXJl
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcigpCit7Cit9CisKK1Bhc3NSZWZQdHI8TGF5ZXJUZXh0
dXJlVXBkYXRlcjo6VGV4dHVyZT4gRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyOjpjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZSh0aGlzLCBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRl
KG1hbmFnZXIpKSk7Cit9CisKK0xheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1h
dCBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnNhbXBsZWRU
ZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KQoreworICAgIC8vIEhlcmUgd2UgZGly
ZWN0bHkgcmVuZGVyIHRvIHRoZSB0ZXh0dXJlLCBzbyB0aGUgY29tcG9uZW50IG9yZGVyIGlzIGFs
d2F5cyBjb3JyZWN0LgorICAgIHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4
ZWxGb3JtYXRSR0JBOworfQorCit2b2lkIEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQorewor
ICAgIC8vIE1ha2Ugc3VyZSBTS0lBIHVzZXMgdGhlIGNvcnJlY3QgR0wgY29udGV4dC4KKyAgICBj
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAvLyBOb3RpZnkgU0tJQSB0byBzeW5j
IGl0cyBpbnRlcm5hbCBHTCBzdGF0ZS4KKyAgICBjb250ZXh0LT5nckNvbnRleHQoKS0+cmVzZXRD
b250ZXh0KCk7CisKKyAgICAvLyBDcmVhdGUgYW4gYWNjZWxlcmF0ZWQgY2FudmFzIHRvIGRyYXcg
b24uCisgICAgRnJhbWVCdWZmZXIgYnVmZmVyOworICAgIFNrQ2FudmFzKiBjYW52YXMgPSBidWZm
ZXIuaW5pdGlhbGl6ZShjb250ZXh0LCBhbGxvY2F0b3IsIHRleHR1cmUpOworCisgICAgY2FudmFz
LT5jbGlwUmVjdChTa1JlY3QoZGVzdFJlY3QpKTsKKyAgICAvLyBUcmFuc2xhdGUgdGhlIG9yaWdp
biBvZiBjb250ZW50UmVjdCB0byB0aGF0IG9mIGRlc3RSZWN0LgorICAgIC8vIE5vdGUgdGhhdCBk
ZXN0UmVjdCBpcyBkZWZpbmVkIHJlbGF0aXZlIHRvIHNvdXJjZVJlY3QuCisgICAgY2FudmFzLT50
cmFuc2xhdGUoY29udGVudFJlY3QoKS54KCkgLSBzb3VyY2VSZWN0LngoKSArIGRlc3RSZWN0Lngo
KSwKKyAgICAgICAgICAgICAgICAgICAgICBjb250ZW50UmVjdCgpLnkoKSAtIHNvdXJjZVJlY3Qu
eSgpICsgZGVzdFJlY3QueSgpKTsKKyAgICBkcmF3UGljdHVyZShjYW52YXMpOworCisgICAgLy8g
Rmx1c2ggU0tJQSBjb250ZXh0IHNvIHRoYXQgYWxsIHRoZSByZW5kZXJlZCBzdHVmZiBhcHBlYXJz
IG9uIHRoZSB0ZXh0dXJlLgorICAgIGNvbnRleHQtPmdyQ29udGV4dCgpLT5mbHVzaCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKFNLSUEpCisjZW5kaWYgLy8g
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45ZDM3NjhjZWQxODgzODQ3YzJjY2QwOGM1MWQwZDA0MmI5OWIzZTE2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJh
bWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTAsMCArMSw2
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKworI2lmbmRlZiBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXJfaAorI2RlZmluZSBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXJfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIFVT
RShTS0lBKQorCisjaW5jbHVkZSAiU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlciA6IHB1YmxpYyBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyIHsKK3B1YmxpYzoKKyAgICBjbGFzcyBUZXh0dXJlIDogcHVibGljIExheWVyVGV4
dHVyZVVwZGF0ZXI6OlRleHR1cmUgeworICAgIHB1YmxpYzoKKyAgICAgICAgVGV4dHVyZShGcmFt
ZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqLCBQYXNzT3duUHRyPE1h
bmFnZWRUZXh0dXJlPik7CisgICAgICAgIHZpcnR1YWwgflRleHR1cmUoKTsKKworICAgICAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0
b3IqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7
CisKKyAgICBwcml2YXRlOgorICAgICAgICBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgeyByZXR1cm4gbV90ZXh0dXJlVXBkYXRl
cjsgfQorCisgICAgICAgIEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlciogbV90ZXh0dXJlVXBkYXRlcjsKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
RnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyPiBjcmVhdGUoUGFz
c093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOworICAgIHZpcnR1YWwgfkZyYW1lQnVmZmVy
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcigpOworCisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVy
ZU1hbmFnZXIqKTsKKyAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1
cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VG9wRG93bk9yaWVudGF0aW9uOyB9CisgICAgdmlydHVh
bCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVG
b3JtYXQpOworICAgIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBU
ZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQg
RnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8
TGF5ZXJQYWludGVyQ2hyb21pdW0+KTsKK307Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5k
aWYgLy8gVVNFKFNLSUEpCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
I2VuZGlmIC8vIEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAppbmRleCA5ZDNlOWYzYTFlNzBkZWU1ZjE5
ZTNjZjBiMjQ4Yjk0M2FmYTEwMmMwLi5iOTUzMzBiOTc5NDY5NTIzZDM4ZGMyMTQ5ZTA5MmM4MjE0
NzhmMjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTQ2LDYgKzQ2LDI1
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVy
IDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXIgewogcHVibGljOgorICAgIGNsYXNzIFRleHR1
cmUgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSB7CisgICAgcHVibGljOgor
ICAgICAgICBUZXh0dXJlKEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIs
IFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IHRleHR1cmUpCisgICAgICAgICAgICA6IExheWVy
VGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUodGV4dHVyZSkKKyAgICAgICAgICAgICwgbV90ZXh0dXJl
VXBkYXRlcih0ZXh0dXJlVXBkYXRlcikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1
cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3Qg
SW50UmVjdCYgZGVzdFJlY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRleHR1cmVVcGRhdGVy
KCktPnVwZGF0ZVRleHR1cmVSZWN0KGNvbnRleHQsIGFsbG9jYXRvciwgdGV4dHVyZSgpLCBzb3Vy
Y2VSZWN0LCBkZXN0UmVjdCk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIElt
YWdlTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSB7IHJldHVybiBtX3RleHR1
cmVVcGRhdGVyOyB9CisKKyAgICAgICAgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKiBtX3RleHR1
cmVVcGRhdGVyOworICAgIH07CisKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZUxheWVyVGV4
dHVyZVVwZGF0ZXI+IGNyZWF0ZShib29sIHVzZU1hcFRleFN1YkltYWdlKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIodXNlTWFwVGV4
U3ViSW1hZ2UpKTsKQEAgLTUzLDYgKzcyLDExIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfklt
YWdlTGF5ZXJUZXh0dXJlVXBkYXRlcigpIHsgfQogCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPExh
eWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIq
IG1hbmFnZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmUodGhp
cywgTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShtYW5hZ2VyKSkpOworICAgIH0KKwogICAgIHZpcnR1
YWwgT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSB7IHJldHVybiBMYXllclRleHR1cmVVcGRhdGVy
OjpCb3R0b21VcE9yaWVudGF0aW9uOyB9CiAKICAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1h
dCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDBiZDZkYmMzODk2YWU0YTA3NzE5YTRlYTRh
M2NjZTczNTkyNzNlMDQuLmNiMDYyM2Q2OTIzOTIzYTI5M2I3N2IxNGVjNWMxYTJjNTRkOWUxMGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtMzUsMTMgKzM1LDEz
IEBACiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAKICNpbmNsdWRlICJDYW52
YXMyRExheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
LmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJGbG9hdFF1
YWQuaCIKICNpbmNsdWRlICJHZW9tZXRyeUJpbmRpbmcuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclBh
aW50ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaCIK
ICNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgogI2luY2x1ZGUgIk5vbkNvbXBvc2l0ZWRDb250
ZW50SG9zdC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1
cmVVcGRhdGVyLmgKaW5kZXggODVlMTM3OWMyZGQ2MjlmOThlOThhYzMyZDA0YmQ0YzFhNmEwZGMx
Mi4uOTA4ODRjZmQ1YmUwZmNlMTg0NzI3YWNhMjgwNDZhMjY0N2JjMmM2ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBk
YXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAtMjksNiArMjksNyBAQAogCiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQogCisjaW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKICNpbmNsdWRl
ICJHcmFwaGljc1R5cGVzM0QuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC0z
NywxMSArMzgsMjYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR3JhcGhpY3NDb250ZXh0
M0Q7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgSW50U2l6ZTsKLWNsYXNzIE1hbmFnZWRUZXh0dXJl
OwogY2xhc3MgVGV4dHVyZUFsbG9jYXRvcjsKK2NsYXNzIFRleHR1cmVNYW5hZ2VyOwogCiBjbGFz
cyBMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJUZXh0dXJlVXBk
YXRlcj4gewogcHVibGljOgorICAgIC8vIEFsbG93cyB0ZXh0dXJlIHVwbG9hZGVycyB0byBzdG9y
ZSBwZXItdGlsZSByZXNvdXJjZXMuCisgICAgY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFRleHR1cmU+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgflRleHR1cmUoKSB7
IH0KKworICAgICAgICBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSgpIHsgcmV0dXJuIG1fdGV4dHVy
ZS5nZXQoKTsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVJlY3QoY29uc3QgSW50UmVj
dCYgLyogc291cmNlUmVjdCAqLykgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0
KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KSA9IDA7CisgICAgcHJvdGVjdGVkOgor
ICAgICAgICBleHBsaWNpdCBUZXh0dXJlKFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IHRleHR1
cmUpIDogbV90ZXh0dXJlKHRleHR1cmUpIHsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgT3du
UHRyPE1hbmFnZWRUZXh0dXJlPiBtX3RleHR1cmU7CisgICAgfTsKKwogICAgIHZpcnR1YWwgfkxh
eWVyVGV4dHVyZVVwZGF0ZXIoKSB7IH0KIAogICAgIGVudW0gT3JpZW50YXRpb24gewpAQCAtNTQs
NiArNzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIFNhbXBsZWRUZXhlbEZvcm1hdEJHUkEsCiAgICAg
ICAgIFNhbXBsZWRUZXhlbEZvcm1hdEludmFsaWQsCiAgICAgfTsKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8VGV4dHVyZT4gY3JlYXRlVGV4dHVyZShUZXh0dXJlTWFuYWdlciopID0gMDsKICAgICAv
LyBSZXR1cm5zIHRoZSBvcmllbnRhdGlvbiBvZiB0aGUgdGV4dHVyZSB1cGxvYWRlZCBieSB0aGlz
IGludGVyZmFjZS4KICAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgPSAwOwog
ICAgIC8vIFJldHVybnMgdGhlIGZvcm1hdCBvZiB0aGUgdGV4ZWwgdXBsb2FkZWQgYnkgdGhpcyBp
bnRlcmZhY2UuCkBAIC02MSw4ICs3OCw3IEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIGZvcm1hdCBz
cGVjaWZpZXMgdGhlIGNvbXBvbmVudCBvcmRlciBpbiB0aGUgc2FtcGxlZCB0ZXhlbC4KICAgICAv
LyBJZiB0aGUgZm9ybWF0IGlzIFRleGVsRm9ybWF0QkdSQSwgdmVjNC54IGlzIGJsdWUgYW5kIHZl
YzQueiBpcyByZWQuCiAgICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVs
Rm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcHJl
cGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0
aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscywgZmxvYXQgY29udGVudHNTY2FsZSkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1
cmVBbGxvY2F0b3IqLCBNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVU
b1VwZGF0ZShjb25zdCBJbnRSZWN0JiAvKiBjb250ZW50UmVjdCAqLywgY29uc3QgSW50U2l6ZSYg
LyogdGlsZVNpemUgKi8sIGludCAvKiBib3JkZXJUZXhlbHMgKi8sIGZsb2F0IC8qIGNvbnRlbnRz
U2NhbGUgKi8pIHsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBk
YXRlckNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOGY4ZWZjNjcxM2UyZWM4YTgxOTI5MGZjNzBlNjgwZDUyZTZkNGQ0NC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDIzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRlICJMYXllclRl
eHR1cmVVcGRhdGVyQ2FudmFzLmgiCi0KLSNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5o
IgotI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db2xvci5o
IgotI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKLQotI2lmIFVTRShTS0lBKQotI2luY2x1ZGUgIkdy
Q29udGV4dC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKLSNpbmNsdWRlICJT
a0NhbnZhcy5oIgotI2luY2x1ZGUgIlNrR3B1RGV2aWNlLmgiCi0jZW5kaWYgLy8gVVNFKFNLSUEp
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIFVTRShTS0lBKQotbmFtZXNwYWNlIHsKLQot
Y2xhc3MgRnJhbWVCdWZmZXIgewotcHVibGljOgotICAgIEZyYW1lQnVmZmVyKCk7Ci0gICAgfkZy
YW1lQnVmZmVyKCk7Ci0KLSAgICBTa0NhbnZhcyogaW5pdGlhbGl6ZShHcmFwaGljc0NvbnRleHQz
RCosIFRleHR1cmVBbGxvY2F0b3IqLCBNYW5hZ2VkVGV4dHVyZSopOwotCi1wcml2YXRlOgotICAg
IEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2Zi
bzsKLSAgICBPd25QdHI8U2tDYW52YXM+IG1fY2FudmFzOwotfTsKLQotRnJhbWVCdWZmZXI6OkZy
YW1lQnVmZmVyKCkKLSAgICA6IG1fY29udGV4dCgwKQotICAgICwgbV9mYm8oMCkKLXsKLX0KLQot
RnJhbWVCdWZmZXI6On5GcmFtZUJ1ZmZlcigpCi17Ci0gICAgbV9jYW52YXMuY2xlYXIoKTsKLQot
ICAgIGlmIChtX2ZibykKLSAgICAgICAgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihtX2Zi
byk7Ci19Ci0KLVNrQ2FudmFzKiBGcmFtZUJ1ZmZlcjo6aW5pdGlhbGl6ZShHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBNYW5hZ2VkVGV4dHVy
ZSogdGV4dHVyZSkKLXsKLSAgICBtX2NvbnRleHQgPSBjb250ZXh0OwotICAgIG1fZmJvID0gbV9j
b250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOwotICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIHRleHR1cmUt
PmZyYW1lYnVmZmVyVGV4dHVyZTJEKG1fY29udGV4dCwgYWxsb2NhdG9yKTsKLQotICAgIC8vIENy
ZWF0ZSBhIHNraWEgZ3B1IGNhbnZhcy4KLSAgICBHckNvbnRleHQqIGdyQ29udGV4dCA9IG1fY29u
dGV4dC0+Z3JDb250ZXh0KCk7Ci0gICAgSW50U2l6ZSBjYW52YXNTaXplID0gdGV4dHVyZS0+c2l6
ZSgpOwotICAgIEdyUGxhdGZvcm1TdXJmYWNlRGVzYyB0YXJnZXREZXNjOwotICAgIHRhcmdldERl
c2MucmVzZXQoKTsKLSAgICB0YXJnZXREZXNjLmZTdXJmYWNlVHlwZSA9IGtUZXh0dXJlUmVuZGVy
VGFyZ2V0X0dyUGxhdGZvcm1TdXJmYWNlVHlwZTsKLSAgICB0YXJnZXREZXNjLmZSZW5kZXJUYXJn
ZXRGbGFncyA9IGtOb25lX0dyUGxhdGZvcm1SZW5kZXJUYXJnZXRGbGFnQml0OwotICAgIHRhcmdl
dERlc2MuZldpZHRoID0gY2FudmFzU2l6ZS53aWR0aCgpOwotICAgIHRhcmdldERlc2MuZkhlaWdo
dCA9IGNhbnZhc1NpemUuaGVpZ2h0KCk7Ci0gICAgdGFyZ2V0RGVzYy5mQ29uZmlnID0ga1JHQkFf
ODg4OF9HclBpeGVsQ29uZmlnOwotICAgIHRhcmdldERlc2MuZlN0ZW5jaWxCaXRzID0gODsKLSAg
ICB0YXJnZXREZXNjLmZQbGF0Zm9ybVRleHR1cmUgPSB0ZXh0dXJlLT50ZXh0dXJlSWQoKTsKLSAg
ICB0YXJnZXREZXNjLmZQbGF0Zm9ybVJlbmRlclRhcmdldCA9IG1fZmJvOwotICAgIFNrQXV0b1RV
bnJlZjxHclRleHR1cmU+IHRhcmdldChzdGF0aWNfY2FzdDxHclRleHR1cmUqPihnckNvbnRleHQt
PmNyZWF0ZVBsYXRmb3JtU3VyZmFjZSh0YXJnZXREZXNjKSkpOwotICAgIFNrQXV0b1RVbnJlZjxT
a0RldmljZT4gZGV2aWNlKG5ldyBTa0dwdURldmljZShnckNvbnRleHQsIHRhcmdldC5nZXQoKSkp
OwotICAgIG1fY2FudmFzID0gYWRvcHRQdHIobmV3IFNrQ2FudmFzKGRldmljZS5nZXQoKSkpOwot
Ci0gICAgcmV0dXJuIG1fY2FudmFzLmdldCgpOwotfQotCi19IC8vIG5hbWVzcGFjZQotI2VuZGlm
IC8vIFVTRShTS0lBKQotCi1MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzOjpMYXllclRleHR1cmVV
cGRhdGVyQ2FudmFzKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIpCi0g
ICAgOiBtX3BhaW50ZXIocGFpbnRlcikKLXsKLX0KLQotdm9pZCBMYXllclRleHR1cmVVcGRhdGVy
Q2FudmFzOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QsIGZsb2F0IGNvbnRlbnRzU2NhbGUpCi17Ci0gICAgY29udGV4dC50
cmFuc2xhdGUoLWNvbnRlbnRSZWN0LngoKSwgLWNvbnRlbnRSZWN0LnkoKSk7Ci0gICAgewotICAg
ICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhczo6cGFpbnQiLCB0aGlz
LCAwKTsKLQotICAgICAgICBJbnRSZWN0IHNjYWxlZENvbnRlbnRSZWN0ID0gY29udGVudFJlY3Q7
Ci0KLSAgICAgICAgaWYgKGNvbnRlbnRzU2NhbGUgIT0gMS4wKSB7Ci0gICAgICAgICAgICBjb250
ZXh0LnNhdmUoKTsKLSAgICAgICAgICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKGNvbnRlbnRz
U2NhbGUsIGNvbnRlbnRzU2NhbGUpKTsKLQotICAgICAgICAgICAgRmxvYXRSZWN0IHJlY3QgPSBj
b250ZW50UmVjdDsKLSAgICAgICAgICAgIHJlY3Quc2NhbGUoMSAvIGNvbnRlbnRzU2NhbGUpOwot
ICAgICAgICAgICAgc2NhbGVkQ29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgbV9wYWludGVyLT5wYWludChjb250ZXh0LCBzY2FsZWRDb250
ZW50UmVjdCk7Ci0KLSAgICAgICAgaWYgKGNvbnRlbnRzU2NhbGUgIT0gMS4wKQotICAgICAgICAg
ICAgY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgfQotICAgIG1fY29udGVudFJlY3QgPSBjb250ZW50
UmVjdDsKLX0KLQotUGFzc1JlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyQml0bWFwPiBMYXllclRl
eHR1cmVVcGRhdGVyQml0bWFwOjpjcmVhdGUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1
bT4gcGFpbnRlciwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSkKLXsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXAocGFpbnRlciwgdXNlTWFwVGV4U3ViSW1h
Z2UpKTsKLX0KLQotTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6TGF5ZXJUZXh0dXJlVXBkYXRl
ckJpdG1hcChQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyLCBib29sIHVz
ZU1hcFRleFN1YkltYWdlKQotICAgIDogTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyhwYWludGVy
KQotICAgICwgbV90ZXhTdWJJbWFnZSh1c2VNYXBUZXhTdWJJbWFnZSkKLXsKLX0KLQotTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRt
YXA6OnNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KQotewotICAgIC8v
IFRoZSBjb21wb25lbnQgb3JkZXIgbWF5IGJlIGJncmEgaWYgd2UgdXBsb2FkZWQgYmdyYSBwaXhl
bHMgdG8gcmdiYSB0ZXh0dXJlcy4KLSAgICByZXR1cm4gUGxhdGZvcm1Db2xvcjo6c2FtZUNvbXBv
bmVudE9yZGVyKHRleHR1cmVGb3JtYXQpID8KLSAgICAgICAgICAgIExheWVyVGV4dHVyZVVwZGF0
ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdFJHQkEgOiBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVk
VGV4ZWxGb3JtYXRCR1JBOwotfQotCi12b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnBy
ZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYg
dGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMsIGZsb2F0IGNvbnRlbnRzU2NhbGUpCi17Ci0gICAg
bV90ZXhTdWJJbWFnZS5zZXRTdWJJbWFnZVNpemUodGlsZVNpemUpOwotCi0gICAgbV9jYW52YXMu
cmVzaXplKGNvbnRlbnRSZWN0LnNpemUoKSk7Ci0gICAgLy8gQXNzdW1wdGlvbjogaWYgYSB0aWxl
ciBpcyB1c2luZyBib3JkZXIgdGV4ZWxzLCB0aGVuIGl0IGlzIGJlY2F1c2UgdGhlCi0gICAgLy8g
bGF5ZXIgaXMgbGlrZWx5IHRvIGJlIGZpbHRlcmVkIG9yIHRyYW5zZm9ybWVkLiBCZWNhdXNlIG9m
IGl0IG1pZ2h0IGJlCi0gICAgLy8gdHJhbnNmb3JtZWQsIGRyYXcgdGhlIHRleHQgaW4gZ3JheXNj
YWxlIGluc3RlYWQgb2Ygc3VicGl4ZWwgYW50aWFsaWFzaW5nLgotICAgIFBsYXRmb3JtQ2FudmFz
OjpQYWludGVyOjpUZXh0T3B0aW9uIHRleHRPcHRpb24gPQotICAgICAgICBib3JkZXJUZXhlbHMg
PyBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6R3JheXNjYWxlVGV4dCA6IFBsYXRmb3JtQ2FudmFz
OjpQYWludGVyOjpTdWJwaXhlbFRleHQ7Ci0gICAgUGxhdGZvcm1DYW52YXM6OlBhaW50ZXIgY2Fu
dmFzUGFpbnRlcigmbV9jYW52YXMsIHRleHRPcHRpb24pOwotICAgIHBhaW50Q29udGVudHMoKmNh
bnZhc1BhaW50ZXIuY29udGV4dCgpLCBjb250ZW50UmVjdCwgY29udGVudHNTY2FsZSk7Ci19Ci0K
LXZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgTWFuYWdl
ZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJl
Y3QmIGRlc3RSZWN0KQotewotICAgIFBsYXRmb3JtQ2FudmFzOjpBdXRvTG9ja2VyIGxvY2tlcigm
bV9jYW52YXMpOwotCi0gICAgdGV4dHVyZS0+YmluZFRleHR1cmUoY29udGV4dCwgYWxsb2NhdG9y
KTsKLSAgICBtX3RleFN1YkltYWdlLnVwbG9hZChsb2NrZXIucGl4ZWxzKCksIGNvbnRlbnRSZWN0
KCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0LCB0ZXh0dXJlLT5mb3JtYXQoKSwgY29udGV4dCk7Ci19
Ci0KLSNpZiBVU0UoU0tJQSkKLVBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVy
ZT4gTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6Y3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQ
YWludGVyQ2hyb21pdW0+IHBhaW50ZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMYXll
clRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKHBhaW50ZXIpKTsKLX0KLQotTGF5ZXJUZXh0dXJlVXBk
YXRlclNrUGljdHVyZTo6TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZShQYXNzT3duUHRyPExh
eWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyKQotICAgIDogTGF5ZXJUZXh0dXJlVXBkYXRlckNh
bnZhcyhwYWludGVyKQotewotfQotCi1MYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjp+TGF5
ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZSgpCi17Ci19Ci0KLUxheWVyVGV4dHVyZVVwZGF0ZXI6
OlNhbXBsZWRUZXhlbEZvcm1hdCBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpzYW1wbGVk
VGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkKLXsKLSAgICAvLyBIZXJlIHdlIGRp
cmVjdGx5IHJlbmRlciB0byB0aGUgdGV4dHVyZSwgc28gdGhlIGNvbXBvbmVudCBvcmRlciBpcyBh
bHdheXMgY29ycmVjdC4KLSAgICByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRl
eGVsRm9ybWF0UkdCQTsKLX0KLQotdm9pZCBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpw
cmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUm
IHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzLCBmbG9hdCBjb250ZW50c1NjYWxlKQotewotICAg
IFNrQ2FudmFzKiBjYW52YXMgPSBtX3BpY3R1cmUuYmVnaW5SZWNvcmRpbmcoY29udGVudFJlY3Qu
d2lkdGgoKSwgY29udGVudFJlY3QuaGVpZ2h0KCkpOwotICAgIFBsYXRmb3JtQ29udGV4dFNraWEg
cGxhdGZvcm1Db250ZXh0KGNhbnZhcyk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29u
dGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKLSAgICBwYWludENvbnRlbnRzKGdyYXBoaWNzQ29udGV4
dCwgY29udGVudFJlY3QsIGNvbnRlbnRzU2NhbGUpOwotICAgIG1fcGljdHVyZS5lbmRSZWNvcmRp
bmcoKTsKLX0KLQotdm9pZCBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjp1cGRhdGVUZXh0
dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxs
b2NhdG9yLCBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgLy8gTWFrZSBzdXJlIFNLSUEgdXNl
cyB0aGUgY29ycmVjdCBHTCBjb250ZXh0LgotICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIC8vIE5vdGlmeSBTS0lBIHRvIHN5bmMgaXRzIGludGVybmFsIEdMIHN0YXRlLgot
ICAgIGNvbnRleHQtPmdyQ29udGV4dCgpLT5yZXNldENvbnRleHQoKTsKLQotICAgIC8vIENyZWF0
ZSBhbiBhY2NlbGVyYXRlZCBjYW52YXMgdG8gZHJhdyBvbi4KLSAgICBGcmFtZUJ1ZmZlciBidWZm
ZXI7Ci0gICAgU2tDYW52YXMqIGNhbnZhcyA9IGJ1ZmZlci5pbml0aWFsaXplKGNvbnRleHQsIGFs
bG9jYXRvciwgdGV4dHVyZSk7Ci0KLSAgICBjYW52YXMtPmNsaXBSZWN0KFNrUmVjdChkZXN0UmVj
dCkpOwotICAgIC8vIFRyYW5zbGF0ZSB0aGUgb3JpZ2luIG9mIGNvbnRlbnRSZWN0IHRvIHRoYXQg
b2YgZGVzdFJlY3QuCi0gICAgLy8gTm90ZSB0aGF0IGRlc3RSZWN0IGlzIGRlZmluZWQgcmVsYXRp
dmUgdG8gc291cmNlUmVjdC4KLSAgICBjYW52YXMtPnRyYW5zbGF0ZShjb250ZW50UmVjdCgpLngo
KSAtIHNvdXJjZVJlY3QueCgpICsgZGVzdFJlY3QueCgpLAotICAgICAgICAgICAgICAgICAgICAg
IGNvbnRlbnRSZWN0KCkueSgpIC0gc291cmNlUmVjdC55KCkgKyBkZXN0UmVjdC55KCkpOwotICAg
IGNhbnZhcy0+ZHJhd1BpY3R1cmUobV9waWN0dXJlKTsKLQotICAgIC8vIEZsdXNoIFNLSUEgY29u
dGV4dCBzbyB0aGF0IGFsbCB0aGUgcmVuZGVyZWQgc3R1ZmYgYXBwZWFycyBvbiB0aGUgdGV4dHVy
ZS4KLSAgICBjb250ZXh0LT5nckNvbnRleHQoKS0+Zmx1c2goKTsKLX0KLSNlbmRpZiAvLyBVU0Uo
U0tJQSkKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZkOWMyNmY4NDYxMDVkNjgzMmJkZjk1Nzdi
NzQwMjdmNDRiZWQ0My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1
cmVVcGRhdGVyQ2FudmFzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LQotI2lmbmRlZiBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzX2gKLSNkZWZpbmUgTGF5ZXJUZXh0
dXJlVXBkYXRlckNhbnZhc19oCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0K
LSNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKLSNpbmNsdWRlICJMYXllclRleHR1cmVTdWJJ
bWFnZS5oIgotI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybUNhbnZhcy5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KLQotI2lmIFVTRShTS0lBKQotI2luY2x1ZGUgIlNrUGljdHVyZS5oIgot
Ci1jbGFzcyBHckNvbnRleHQ7Ci1jbGFzcyBTa0NhbnZhczsKLWNsYXNzIFNrUGljdHVyZTsKLSNl
bmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwot
Y2xhc3MgTGF5ZXJQYWludGVyQ2hyb21pdW07Ci0KLS8vIEEgTGF5ZXJUZXh0dXJlVXBkYXRlciB3
aXRoIGFuIGludGVybmFsIGNhbnZhcy4KLWNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMg
OiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlciB7Ci1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQg
TGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyhQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVt
Pik7Ci0KLSAgICB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QsIGZsb2F0IGNvbnRlbnRzU2NhbGUpOwotICAgIGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50UmVjdDsgfQotCi1wcml2
YXRlOgotCi0gICAgSW50UmVjdCBtX2NvbnRlbnRSZWN0OwotICAgIE93blB0cjxMYXllclBhaW50
ZXJDaHJvbWl1bT4gbV9wYWludGVyOwotfTsKLQotLy8gQSBMYXllclRleHR1cmVVcGRhdGVyIHdp
dGggYW4gaW50ZXJuYWwgYml0bWFwIGNhbnZhcy4KLWNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXJC
aXRtYXAgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcD4gY3JlYXRlKFBhc3NP
d25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+LCBib29sIHVzZU1hcFRleFN1YkltYWdlKTsKLQot
ICAgIHZpcnR1YWwgT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSB7IHJldHVybiBMYXllclRleHR1
cmVVcGRhdGVyOjpCb3R0b21VcE9yaWVudGF0aW9uOyB9Ci0gICAgdmlydHVhbCBTYW1wbGVkVGV4
ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpOwotICAg
IHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qs
IGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzLCBmbG9hdCBjb250ZW50
c1NjYWxlKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250
ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7Ci0KLXByaXZhdGU6Ci0gICAg
TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcChQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVt
PiwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSk7Ci0gICAgUGxhdGZvcm1DYW52YXMgbV9jYW52YXM7
Ci0gICAgTGF5ZXJUZXh0dXJlU3ViSW1hZ2UgbV90ZXhTdWJJbWFnZTsKLX07Ci0KLSNpZiBVU0Uo
U0tJQSkKLWNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUgOiBwdWJsaWMgTGF5ZXJU
ZXh0dXJlVXBkYXRlckNhbnZhcyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5
ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZT4gY3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVy
Q2hyb21pdW0+KTsKLSAgICB2aXJ0dWFsIH5MYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKCk7
Ci0KLSAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4gTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6VG9wRG93bk9yaWVudGF0aW9uOyB9Ci0gICAgdmlydHVhbCBTYW1wbGVk
VGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpOwot
ICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzLCBmbG9hdCBjb250
ZW50c1NjYWxlKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3ND
b250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7Ci0KLXByaXZhdGU6Ci0g
ICAgZXhwbGljaXQgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZShQYXNzT3duUHRyPExheWVy
UGFpbnRlckNocm9taXVtPik7Ci0gIAotICAgIFNrUGljdHVyZSBtX3BpY3R1cmU7IC8vIFJlY29y
ZGluZyBjYW52YXMuCi19OwotI2VuZGlmIC8vIFVTRShTS0lBKQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotI2VuZGlmIC8v
IExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNzUxNWJmZDEw
YjU0MGQ2NGFiNmFhOWU3ODVlZWRhYTQxYjhlNzVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlci5jcHAKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIFVTRShTS0lB
KQorCisjaW5jbHVkZSAiU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21p
dW0uaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisjaW5jbHVkZSAiU2tDYW52
YXMuaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2tQaWN0dXJlQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcihQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyKQor
ICAgIDogQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihwYWludGVyKQoreworfQorCitTa1BpY3R1
cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjp+U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcigpCit7Cit9CisKK3ZvaWQgU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRT
aXplJiAvKiB0aWxlU2l6ZSAqLywgaW50IC8qIGJvcmRlclRleGVscyAqLywgZmxvYXQgY29udGVu
dHNTY2FsZSkKK3sKKyAgICBTa0NhbnZhcyogY2FudmFzID0gbV9waWN0dXJlLmJlZ2luUmVjb3Jk
aW5nKGNvbnRlbnRSZWN0LndpZHRoKCksIGNvbnRlbnRSZWN0LmhlaWdodCgpKTsKKyAgICBQbGF0
Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3JtQ29udGV4dChjYW52YXMpOworICAgIEdyYXBoaWNzQ29u
dGV4dCBncmFwaGljc0NvbnRleHQoJnBsYXRmb3JtQ29udGV4dCk7CisgICAgcGFpbnRDb250ZW50
cyhncmFwaGljc0NvbnRleHQsIGNvbnRlbnRSZWN0LCBjb250ZW50c1NjYWxlKTsKKyAgICBtX3Bp
Y3R1cmUuZW5kUmVjb3JkaW5nKCk7Cit9CisKK3ZvaWQgU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6ZHJhd1BpY3R1cmUoU2tDYW52YXMqIGNhbnZhcykKK3sKKyAgICBUUkFDRV9F
VkVOVCgiU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6ZHJhd1BpY3R1cmUiLCB0
aGlzLCAwKTsKKyAgICBjYW52YXMtPmRyYXdQaWN0dXJlKG1fcGljdHVyZSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoU0tJQSkKKyNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDQwZjhiMDNlYTRmMjczOWE5NzU0
Mzg2N2FjN2ViMTU0MDMwZDBjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIFNrUGljdHVyZUNhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXJfaAorI2RlZmluZSBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoU0tJ
QSkKKworI2luY2x1ZGUgIkNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJT
a1BpY3R1cmUuaCIKKworY2xhc3MgU2tDYW52YXM7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgTGF5ZXJQYWludGVyQ2hyb21pdW07CisKK2NsYXNzIFNrUGljdHVyZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB+U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcigpOwor
Citwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcihQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPik7CisKKyAgICB2aXJ0dWFsIHZv
aWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRT
aXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscywgZmxvYXQgY29udGVudHNTY2FsZSk7Cisg
ICAgdm9pZCBkcmF3UGljdHVyZShTa0NhbnZhcyopOworCitwcml2YXRlOgorICAgIFNrUGljdHVy
ZSBtX3BpY3R1cmU7IC8vIFJlY29yZGluZyBjYW52YXMuCit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisjZW5kaWYgLy8gVVNFKFNLSUEpCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorI2VuZGlmIC8vIFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXJf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggODdkZWMwYjk4YWM2ZGFlODE5
OThiZjU4NTQ5ODY0NDYwMDExNThlMi4uNzFiNmY1ZGYyODlmOTJjMzM3NGEzZDc5NDFmZGQ1MGRh
ZTJlMDI2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC01MiwxNyArNTIs
MjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgVXBkYXRhYmxlVGlsZSA6IHB1YmxpYyBD
Q0xheWVyVGlsaW5nRGF0YTo6VGlsZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVXBkYXRh
YmxlVGlsZSk7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVXBkYXRhYmxlVGlsZShQYXNzT3duUHRy
PE1hbmFnZWRUZXh0dXJlPiB0ZXgpIDogbV90ZXgodGV4KSB7IH0KKyAgICBleHBsaWNpdCBVcGRh
dGFibGVUaWxlKFBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gdGV4dHVy
ZSkgOiBtX3RleHR1cmUodGV4dHVyZSkgeyB9CiAKLSAgICBNYW5hZ2VkVGV4dHVyZSogdGV4dHVy
ZSgpIHsgcmV0dXJuIG1fdGV4LmdldCgpOyB9CisgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4
dHVyZSogdGV4dHVyZSgpIHsgcmV0dXJuIG1fdGV4dHVyZS5nZXQoKTsgfQorICAgIE1hbmFnZWRU
ZXh0dXJlKiBtYW5hZ2VkVGV4dHVyZSgpIHsgcmV0dXJuIG1fdGV4dHVyZS0+dGV4dHVyZSgpOyB9
CiAKICAgICBib29sIGRpcnR5KCkgY29uc3QgeyByZXR1cm4gIW1fZGlydHlMYXllclJlY3QuaXNF
bXB0eSgpOyB9CiAgICAgdm9pZCBjbGVhckRpcnR5KCkgeyBtX2RpcnR5TGF5ZXJSZWN0ID0gSW50
UmVjdCgpOyB9CiAKICAgICAvLyBMYXllci1zcGFjZSBkaXJ0eSByZWN0YW5nbGUgdGhhdCBuZWVk
cyB0byBiZSByZXBhaW50ZWQuCiAgICAgSW50UmVjdCBtX2RpcnR5TGF5ZXJSZWN0OworICAgIC8v
IENvbnRlbnQtc3BhY2UgcmVjdGFuZ2xlIHRoYXQgbmVlZHMgdG8gYmUgdXBkYXRlZC4KKyAgICBJ
bnRSZWN0IG1fdXBkYXRlUmVjdDsKIHByaXZhdGU6Ci0gICAgT3duUHRyPE1hbmFnZWRUZXh0dXJl
PiBtX3RleDsKKyAgICBSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gbV90ZXh0
dXJlOwogfTsKIAogVGlsZWRMYXllckNocm9taXVtOjpUaWxlZExheWVyQ2hyb21pdW0oQ0NMYXll
ckRlbGVnYXRlKiBkZWxlZ2F0ZSkKQEAgLTE3MywyMiArMTc2LDE5IEBAIHZvaWQgVGlsZWRMYXll
ckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBDCiAgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewogICAg
ICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CiAgICAgICAgICAgICBV
cGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworCisgICAgICAgICAgICAvLyBSZXF1
aXJlZCB0aWxlcyBhcmUgY3JlYXRlZCBpbiBwcmVwYXJlVG9VcGRhdGUoKS4gQSB0aWxlIHNob3Vs
ZAorICAgICAgICAgICAgLy8gbmV2ZXIgYmUgcmVtb3ZlZCBiZXR3ZWVuIHRoZSBjYWxsIHRvIHBy
ZXBhcmVUb1VwZGF0ZSgpIGFuZCB0aGUKKyAgICAgICAgICAgIC8vIGNhbGwgdG8gdXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcygpLgogICAgICAgICAgICAgaWYgKCF0aWxlKQotICAgICAgICAgICAg
ICAgIHRpbGUgPSBjcmVhdGVUaWxlKGksIGopOwotICAgICAgICAgICAgZWxzZSBpZiAoIXRpbGUt
PmRpcnR5KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgQ1JB
U0goKTsKIAotICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHBhZ2Utc3BhY2UgcmVjdGFuZ2xlIHRv
IGNvcHkgZnJvbS4KLSAgICAgICAgICAgIEludFJlY3Qgc291cmNlUmVjdCA9IG1fdGlsZXItPnRp
bGVDb250ZW50UmVjdCh0aWxlKTsKLSAgICAgICAgICAgIGNvbnN0IEludFBvaW50IGFuY2hvciA9
IHNvdXJjZVJlY3QubG9jYXRpb24oKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0
KG1fdGlsZXItPmxheWVyUmVjdFRvQ29udGVudFJlY3QodGlsZS0+bV9kaXJ0eUxheWVyUmVjdCkp
OwotICAgICAgICAgICAgLy8gUGFpbnQgcmVjdCBub3QgZ3VhcmFudGVlZCB0byBsaW5lIHVwIG9u
IHRpbGUgYm91bmRhcmllcywgc28KLSAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHNvdXJj
ZVJlY3QgZG9lc24ndCBleHRlbmQgb3V0c2lkZSBvZiBpdC4KLSAgICAgICAgICAgIHNvdXJjZVJl
Y3QuaW50ZXJzZWN0KG1fcGFpbnRSZWN0KTsKLSAgICAgICAgICAgIGlmIChzb3VyY2VSZWN0Lmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIEludFJlY3Qgc291cmNlUmVjdCA9IHRpbGUtPm1fdXBkYXRl
UmVjdDsKKyAgICAgICAgICAgIGlmICh0aWxlLT5tX3VwZGF0ZVJlY3QuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBBU1NFUlQodGlsZS0+dGV4dHVy
ZSgpLT5pc1Jlc2VydmVkKCkpOworICAgICAgICAgICAgQVNTRVJUKHRpbGUtPm1hbmFnZWRUZXh0
dXJlKCktPmlzUmVzZXJ2ZWQoKSk7CisgICAgICAgICAgICBjb25zdCBJbnRQb2ludCBhbmNob3Ig
PSBtX3RpbGVyLT50aWxlQ29udGVudFJlY3QodGlsZSkubG9jYXRpb24oKTsKIAogICAgICAgICAg
ICAgLy8gQ2FsY3VsYXRlIHRpbGUtc3BhY2UgcmVjdGFuZ2xlIHRvIHVwbG9hZCBpbnRvLgogICAg
ICAgICAgICAgSW50UmVjdCBkZXN0UmVjdChJbnRQb2ludChzb3VyY2VSZWN0LngoKSAtIGFuY2hv
ci54KCksIHNvdXJjZVJlY3QueSgpIC0gYW5jaG9yLnkoKSksIHNvdXJjZVJlY3Quc2l6ZSgpKTsK
QEAgLTIwOCwxMyArMjA4LDEyIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21w
b3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBDCiAgICAgICAgICAg
ICBpZiAocGFpbnRPZmZzZXQueSgpICsgZGVzdFJlY3QuaGVpZ2h0KCkgPiBtX3BhaW50UmVjdC5o
ZWlnaHQoKSkKICAgICAgICAgICAgICAgICBDUkFTSCgpOwogCi0gICAgICAgICAgICB0aWxlLT50
ZXh0dXJlKCktPmJpbmRUZXh0dXJlKGNvbnRleHQsIHVwZGF0ZXIuYWxsb2NhdG9yKCkpOworICAg
ICAgICAgICAgdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+YmluZFRleHR1cmUoY29udGV4dCwgdXBk
YXRlci5hbGxvY2F0b3IoKSk7CiAgICAgICAgICAgICBjb25zdCBHQzNEaW50IGZpbHRlciA9IG1f
dGlsZXItPmhhc0JvcmRlclRleGVscygpID8gR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUiA6IEdy
YXBoaWNzQ29udGV4dDNEOjpORUFSRVNUOwogICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIGZpbHRlcikpOwogICAgICAgICAgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIGZpbHRlcikpOwog
Ci0gICAgICAgICAgICB1cGRhdGVyLmFwcGVuZCh0aWxlLT50ZXh0dXJlKCksIHRleHR1cmVVcGRh
dGVyKCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0KTsKLSAgICAgICAgICAgIHRpbGUtPmNsZWFyRGly
dHkoKTsKKyAgICAgICAgICAgIHVwZGF0ZXIuYXBwZW5kKHRpbGUtPnRleHR1cmUoKSwgc291cmNl
UmVjdCwgZGVzdFJlY3QpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yNTEsMTAgKzI1MCwxMCBA
QCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCog
bGF5ZXIpCiAgICAgICAgIGludCBpID0gaXRlci0+Zmlyc3QuZmlyc3Q7CiAgICAgICAgIGludCBq
ID0gaXRlci0+Zmlyc3Quc2Vjb25kOwogICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3Rh
dGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7Ci0gICAgICAgIGlm
ICghdGlsZS0+dGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVy
ZUZvcm1hdCkpCisgICAgICAgIGlmICghdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+aXNWYWxpZCht
X3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKLSAgICAgICAgdGlsZWRMYXllci0+c3luY1RleHR1cmVJZChpLCBqLCB0aWxlLT50ZXh0
dXJlKCktPnRleHR1cmVJZCgpKTsKKyAgICAgICAgdGlsZWRMYXllci0+c3luY1RleHR1cmVJZChp
LCBqLCB0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT50ZXh0dXJlSWQoKSk7CiAgICAgfQogfQogCkBA
IC0yNzIsNyArMjcxLDcgQEAgVXBkYXRhYmxlVGlsZSogVGlsZWRMYXllckNocm9taXVtOjp0aWxl
QXQoaW50IGksIGludCBqKSBjb25zdAogCiBVcGRhdGFibGVUaWxlKiBUaWxlZExheWVyQ2hyb21p
dW06OmNyZWF0ZVRpbGUoaW50IGksIGludCBqKQogewotICAgIFJlZlB0cjxVcGRhdGFibGVUaWxl
PiB0aWxlID0gYWRvcHRSZWYobmV3IFVwZGF0YWJsZVRpbGUoTWFuYWdlZFRleHR1cmU6OmNyZWF0
ZSh0ZXh0dXJlTWFuYWdlcigpKSkpOworICAgIFJlZlB0cjxVcGRhdGFibGVUaWxlPiB0aWxlID0g
YWRvcHRSZWYobmV3IFVwZGF0YWJsZVRpbGUodGV4dHVyZVVwZGF0ZXIoKS0+Y3JlYXRlVGV4dHVy
ZSh0ZXh0dXJlTWFuYWdlcigpKSkpOwogICAgIG1fdGlsZXItPmFkZFRpbGUodGlsZSwgaSwgaik7
CiAgICAgdGlsZS0+bV9kaXJ0eUxheWVyUmVjdCA9IG1fdGlsZXItPnRpbGVMYXllclJlY3QodGls
ZS5nZXQoKSk7CiAKQEAgLTMyMCwxMCArMzE5LDEwIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVt
Ojpwcm90ZWN0VGlsZVRleHR1cmVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAgIGZv
ciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKICAgICAgICAgZm9yIChpbnQgaSA9
IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewogICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGls
ZSA9IHRpbGVBdChpLCBqKTsKLSAgICAgICAgICAgIGlmICghdGlsZSB8fCAhdGlsZS0+dGV4dHVy
ZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkpCisgICAg
ICAgICAgICBpZiAoIXRpbGUgfHwgIXRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPmlzVmFsaWQobV90
aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5yZXNlcnZlKG1fdGlsZXItPnRp
bGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCk7CisgICAgICAgICAgICB0aWxlLT5tYW5hZ2VkVGV4
dHVyZSgpLT5yZXNlcnZlKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCk7CiAg
ICAgICAgIH0KICAgICB9CiB9CkBAIC0zMzQsNiArMzMzLDEyIEBAIHZvaWQgVGlsZWRMYXllckNo
cm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAKICAg
ICBtX3NraXBzRHJhdyA9IGZhbHNlOwogCisgICAgLy8gUmVzZXQgbV91cGRhdGVSZWN0IGZvciBh
bGwgdGlsZXMuCisgICAgZm9yIChDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IG1fdGlsZXItPnRpbGVzKCkuYmVnaW4oKTsgaXRlciAhPSBtX3RpbGVyLT50
aWxlcygpLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0
YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT5zZWNvbmQuZ2V0KCkpOworICAgICAgICB0
aWxlLT5tX3VwZGF0ZVJlY3QgPSBJbnRSZWN0KCk7CisgICAgfQorCiAgICAgaWYgKGNvbnRlbnRS
ZWN0LmlzRW1wdHkoKSkgewogICAgICAgICBtX3JlcXVlc3RlZFVwZGF0ZVJlY3QgPSBJbnRSZWN0
KCk7CiAgICAgICAgIHJldHVybjsKQEAgLTM1NywxMCArMzYyLDEwIEBAIHZvaWQgVGlsZWRMYXll
ckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAg
ICAgICAgICAgICBpZiAoIXRpbGUpCiAgICAgICAgICAgICAgICAgdGlsZSA9IGNyZWF0ZVRpbGUo
aSwgaik7CiAKLSAgICAgICAgICAgIGlmICghdGlsZS0+dGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGls
ZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkpCisgICAgICAgICAgICBpZiAoIXRpbGUt
Pm1hbmFnZWRUZXh0dXJlKCktPmlzVmFsaWQobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJl
Rm9ybWF0KSkKICAgICAgICAgICAgICAgICB0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0ID0gbV90aWxl
ci0+dGlsZUxheWVyUmVjdCh0aWxlKTsKIAotICAgICAgICAgICAgaWYgKCF0aWxlLT50ZXh0dXJl
KCktPnJlc2VydmUobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkgeworICAg
ICAgICAgICAgaWYgKCF0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5yZXNlcnZlKG1fdGlsZXItPnRp
bGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkpIHsKICAgICAgICAgICAgICAgICBtX3NraXBzRHJh
dyA9IHRydWU7CiAgICAgICAgICAgICAgICAgY2xlYW51cFJlc291cmNlcygpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTM4NSw2ICszOTAsMzYgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21p
dW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICAvLyBz
byB3ZSBncmFiIGEgbG9jYWwgcmVmZXJlbmNlIGhlcmUgdG8gaG9sZCB0aGUgdXBkYXRlciBhbGl2
ZSB1bnRpbCB0aGUgcGFpbnQgY29tcGxldGVzLgogICAgIFJlZlB0cjxMYXllclRleHR1cmVVcGRh
dGVyPiBwcm90ZWN0b3IodGV4dHVyZVVwZGF0ZXIoKSk7CiAgICAgdGV4dHVyZVVwZGF0ZXIoKS0+
cHJlcGFyZVRvVXBkYXRlKG1fcGFpbnRSZWN0LCBtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RpbGVy
LT5oYXNCb3JkZXJUZXhlbHMoKSwgY29udGVudHNTY2FsZSgpKTsKKyAgICBtX3RpbGVyLT5jb250
ZW50UmVjdFRvVGlsZUluZGljZXMobV9yZXF1ZXN0ZWRVcGRhdGVSZWN0LCBsZWZ0LCB0b3AsIHJp
Z2h0LCBib3R0b20pOworICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsK
KyAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAg
ICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKKworICAgICAgICAgICAgLy8g
VGlsZXMgYXJlIGNyZWF0ZWQgYmVmb3JlIHByZXBhcmVUb1VwZGF0ZSgpIGlzIGNhbGxlZC4KKyAg
ICAgICAgICAgIGlmICghdGlsZSkKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworCisgICAgICAg
ICAgICBpZiAoIXRpbGUtPmRpcnR5KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgIC8vIENhbGN1bGF0ZSBjb250ZW50LXNwYWNlIHJlY3RhbmdsZSB0byBjb3B5IGZy
b20uCisgICAgICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSBtX3RpbGVyLT50aWxlQ29udGVu
dFJlY3QodGlsZSk7CisgICAgICAgICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChtX3RpbGVyLT5s
YXllclJlY3RUb0NvbnRlbnRSZWN0KHRpbGUtPm1fZGlydHlMYXllclJlY3QpKTsKKyAgICAgICAg
ICAgIC8vIFBhaW50IHJlY3Qgbm90IGd1YXJhbnRlZWQgdG8gbGluZSB1cCBvbiB0aWxlIGJvdW5k
YXJpZXMsIHNvCisgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCBzb3VyY2VSZWN0IGRvZXNu
J3QgZXh0ZW5kIG91dHNpZGUgb2YgaXQuCisgICAgICAgICAgICBzb3VyY2VSZWN0LmludGVyc2Vj
dChtX3BhaW50UmVjdCk7CisKKyAgICAgICAgICAgIC8vIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMoKSB1c2VzIG1fdXBkYXRlUmVjdCB0byBkZXRlcm1pbmUKKyAgICAgICAgICAgIC8vIHRoZSB0
aWxlcyB0byB1cGRhdGUgc28gd2UgY2FuIGNsZWFyIHRoZSBkaXJ0eSByZWN0YW5nbGUgaGVyZS4K
KyAgICAgICAgICAgIHRpbGUtPmNsZWFyRGlydHkoKTsKKworICAgICAgICAgICAgdGlsZS0+bV91
cGRhdGVSZWN0ID0gc291cmNlUmVjdDsKKyAgICAgICAgICAgIGlmIChzb3VyY2VSZWN0LmlzRW1w
dHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgdGlsZS0+dGV4
dHVyZSgpLT5wcmVwYXJlUmVjdChzb3VyY2VSZWN0KTsKKyAgICAgICAgfQorICAgIH0KIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcAppbmRleCA5ODQzNzBlZGE5NWM1MjNm
NTllZTU1Yzg3YWM4Mjg3MWUwMmE3M2JiLi44NzQ1YzRlYTBhNzEwYmRlMThlZGUxODIwZjMxNGZk
YjhjYzg3MmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcApAQCAtNDgsMTQg
KzQ4LDEyIEBAIENDVGV4dHVyZVVwZGF0ZXI6On5DQ1RleHR1cmVVcGRhdGVyKCkKIHsKIH0KIAot
dm9pZCBDQ1RleHR1cmVVcGRhdGVyOjphcHBlbmQoTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIExh
eWVyVGV4dHVyZVVwZGF0ZXIqIHVwZGF0ZXIsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFJlY3QmIGRlc3RSZWN0KQordm9pZCBDQ1RleHR1cmVVcGRhdGVyOjphcHBlbmQoTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgQVNTRVJUKHRleHR1cmUpOwot
ICAgIEFTU0VSVCh1cGRhdGVyKTsKIAogICAgIFVwZGF0ZUVudHJ5IGVudHJ5OwogICAgIGVudHJ5
Lm1fdGV4dHVyZSA9IHRleHR1cmU7Ci0gICAgZW50cnkubV91cGRhdGVyID0gdXBkYXRlcjsKICAg
ICBlbnRyeS5tX3NvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OwogICAgIGVudHJ5Lm1fZGVzdFJlY3Qg
PSBkZXN0UmVjdDsKICAgICBtX2VudHJpZXMuYXBwZW5kKGVudHJ5KTsKQEAgLTcxLDcgKzY5LDcg
QEAgYm9vbCBDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQsIHNpemVfdCBjb3VudCkKICAgICBzaXplX3QgbWF4SW5kZXggPSBtaW4obV9lbnRyeUluZGV4
ICsgY291bnQsIG1fZW50cmllcy5zaXplKCkpOwogICAgIGZvciAoOyBtX2VudHJ5SW5kZXggPCBt
YXhJbmRleDsgKyttX2VudHJ5SW5kZXgpIHsKICAgICAgICAgVXBkYXRlRW50cnkmIGVudHJ5ID0g
bV9lbnRyaWVzW21fZW50cnlJbmRleF07Ci0gICAgICAgIGVudHJ5Lm1fdXBkYXRlci0+dXBkYXRl
VGV4dHVyZVJlY3QoY29udGV4dCwgbV9hbGxvY2F0b3IsIGVudHJ5Lm1fdGV4dHVyZSwgZW50cnku
bV9zb3VyY2VSZWN0LCBlbnRyeS5tX2Rlc3RSZWN0KTsKKyAgICAgICAgZW50cnkubV90ZXh0dXJl
LT51cGRhdGVSZWN0KGNvbnRleHQsIG1fYWxsb2NhdG9yLCBlbnRyeS5tX3NvdXJjZVJlY3QsIGVu
dHJ5Lm1fZGVzdFJlY3QpOwogICAgIH0KIAogICAgIGlmIChtYXhJbmRleCA8IG1fZW50cmllcy5z
aXplKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgKaW5kZXggMTdiOGFhZmEwNmNlN2E2
ZDIwYTBlNWZiNGM5MTRlNzJmYzkzOTRhMS4uYmY3OWFjOWMyZTIyZWZjNWVkYTlhNjQ4MjllMmVm
Y2NlYzE1YmIzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaApAQCAtMjcsMTMgKzI3
LDEyIEBACiAjZGVmaW5lIENDVGV4dHVyZVVwZGF0ZXJfaAogCiAjaW5jbHVkZSAiSW50UmVjdC5o
IgorI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7Ci1j
bGFzcyBMYXllclRleHR1cmVVcGRhdGVyOwotY2xhc3MgTWFuYWdlZFRleHR1cmU7CiBjbGFzcyBU
ZXh0dXJlQWxsb2NhdG9yOwogCiBjbGFzcyBDQ1RleHR1cmVVcGRhdGVyIHsKQEAgLTQxLDcgKzQw
LDcgQEAgcHVibGljOgogICAgIENDVGV4dHVyZVVwZGF0ZXIoVGV4dHVyZUFsbG9jYXRvciopOwog
ICAgIH5DQ1RleHR1cmVVcGRhdGVyKCk7CiAKLSAgICB2b2lkIGFwcGVuZChNYW5hZ2VkVGV4dHVy
ZSosIExheWVyVGV4dHVyZVVwZGF0ZXIqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRSZWN0JiBkZXN0UmVjdCk7CisgICAgdm9pZCBhcHBlbmQoTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6VGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRl
c3RSZWN0KTsKIAogICAgIGJvb2wgaGFzTW9yZVVwZGF0ZXMoKSBjb25zdDsKIApAQCAtNTQsOCAr
NTMsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgc3RydWN0IFVwZGF0ZUVudHJ5IHsKLSAg
ICAgICAgTWFuYWdlZFRleHR1cmUqIG1fdGV4dHVyZTsKLSAgICAgICAgTGF5ZXJUZXh0dXJlVXBk
YXRlciogbV91cGRhdGVyOworICAgICAgICBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiBt
X3RleHR1cmU7CiAgICAgICAgIEludFJlY3QgbV9zb3VyY2VSZWN0OwogICAgICAgICBJbnRSZWN0
IG1fZGVzdFJlY3Q7CiAgICAgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116291</attachid>
            <date>2011-11-22 16:45:54 -0800</date>
            <delta_ts>2011-11-29 11:59:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71388-20111122194552.patch</filename>
            <type>text/plain</type>
            <size>70816</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwOTA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjIzN2E1ZWI0YTE1YWQ1
MGI3NmUxYzVhZGEzNjc0MTZkOGRjMTljNy4uN2M2YmMyOGU1OTFmYjYwZWY0NDBjODNkMjk0MTMy
ZDk4M2M2NDdjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg5IEBACisyMDExLTExLTIyICBEYXZp
ZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBB
ZGQgc3VwcG9ydCBmb3IgcGFpbnRpbmcgaW50byBhbiBTa1BpY3R1cmUgYW5kIHRoZW4gcmFzdGVy
aXppbmcgaW50byB0aWxlLXNpemVkIGNodW5rcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMzg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIFVwZGF0YWJsZVRleHR1cmUgY2xhc3MsIHdoaWNoIGFs
bG93cyB0ZXh0dXJlIHVwZGF0ZXIgdG8KKyAgICAgICAgYWxsb2NhdGUgdGlsZSBzcGVjaWZpYyBy
ZXNvdXJjZXMgYW5kIHBhaW50IHRpbGVzIHNlcGFyYXRlbHkuCisgICAgICAgIFJlbmFtZSB0ZXh0
dXJlIHVwbG9hZGVyIGNsYXNzZXMgYW5kIG1vdmUgdGhlbSB0byBzZXBhcmF0ZSBmaWxlcy4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMuIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0
dXJlOjp+VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyOjpUZXh0dXJlOjp1cGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXI6On5CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZVRleHR1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6c2FtcGxlZFRleGVs
Rm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyOjp1cGRhdGVUZXh0dXJlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRl
eHR1cmVVcGRhdGVyLmguCisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyOjpUZXh0dXJlOjp0ZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpvcmllbnRhdGlvbik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGV4dHVyZVVwZGF0ZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OkNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6fkNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cGFpbnRDb250ZW50
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmguCisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyOjpjb250ZW50UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
QnVmZmVyOjpGcmFtZUJ1ZmZlcjo6RnJhbWVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVCdWZmZXI6OkZyYW1lQnVmZmVyOjp+RnJhbWVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVCdWZmZXI6OkZyYW1lQnVmZmVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6On5UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6
dXBkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1
ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OkZyYW1lQnVmZmVyU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1
ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6On5GcmFtZUJ1ZmZlclNrUGlj
dHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVC
dWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGVUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6c2FtcGxlZFRleGVsRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVm
ZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBkYXRlVGV4dHVyZVJlY3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmguCisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXI6OlRleHR1cmU6OnRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVm
ZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6b3JpZW50YXRpb24pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OlRl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0
dXJlOjp1cGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZTo6dGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VM
YXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6On5UZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6cHJlcGFyZVJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRh
dGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVw
ZGF0ZXJDYW52YXMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oLgorICAgICAgICAoV2ViQ29yZTo6U2tQaWN0dXJl
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcik6CisgICAgICAgIChXZWJDb3JlOjpTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjp+U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJD
b3JlOjpTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
ZHJhd1BpY3R1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGlj
dHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpVcGRhdGFibGVUaWxlOjpVcGRhdGFibGVUaWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlVwZGF0YWJsZVRpbGU6OnRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
VXBkYXRhYmxlVGlsZTo6bWFuYWdlZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRM
YXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6
VGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VGlsZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXI6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RleHR1cmVVcGRhdGVyOjp1cGRhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaDoKKwogMjAxMS0wNi0yMCAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBpbnRy
b2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRBUEkgZm9yIGFjdGlvbnMgaW5pdGlhdGVkIGZyb20gdGhl
IGFwcGxpY2F0aW9uIG1lbnUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggM2Q0NTZmZGU0NGVlZjU4ZTVj
ZjFiZDNmYzJhODY5NDZmMjFiYmU1Ni4uNDkzMTAxY2JkMjJlZjYzMzUxODY3YTM5ZTlkMjNiNzM1
OThiOTRlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzQ1OCwxMCArMzQ1OCwxNCBAQAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hy
b21pdW0uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXguY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRy
b2xsZXJMaW51eC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5jcHAnLApAQCAtMzQ4Miw2ICszNDg2LDggQEAKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UmVuZGVyU3R5bGUuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFV0aWxzQ2hyb21pdW1XaW4u
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHND
aHJvbWl1bVdpbi5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9G
cmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR2VvbWV0cnlCaW5kaW5nLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5kaW5nLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2RlQ2hyb21pdW1XaW4uY3BwJywK
QEAgLTM1MDUsOCArMzUxMSw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgnLAotICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52
YXMuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRl
eHR1cmVVcGRhdGVyQ2FudmFzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NZWRpYVBsYXllclByaXZhdGVDaHJv
bWl1bS5oJywKQEAgLTM1MjgsNiArMzUzMiw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFDaHJvbWl1bVdpbi5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhTGludXguY3Bw
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0
b3IuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFja2lu
Z1RleHR1cmVBbGxvY2F0b3IuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGQ5MzE5MTNmNzA5Nzc2MjYz
NWZlNjQxOWQzODc1MWFmZjg2MTc5ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJCaXRtYXBDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCisKKyNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1
bS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29sb3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpUZXh0dXJlKEJpdG1h
cENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyLCBQYXNzT3duUHRyPE1h
bmFnZWRUZXh0dXJlPiB0ZXh0dXJlKQorICAgIDogTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVy
ZSh0ZXh0dXJlKQorICAgICwgbV90ZXh0dXJlVXBkYXRlcih0ZXh0dXJlVXBkYXRlcikKK3sKK30K
KworQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6flRleHR1cmUoKQor
eworfQorCit2b2lkIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnVw
ZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFs
bG9jYXRvciwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJl
Y3QpCit7CisgICAgdGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlVGV4dHVyZVJlY3QoY29udGV4dCwg
YWxsb2NhdG9yLCB0ZXh0dXJlKCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0KTsKK30KKworUGFzc1Jl
ZlB0cjxCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyPiBCaXRtYXBDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyOjpjcmVhdGUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFp
bnRlciwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIocGFpbnRlciwgdXNlTWFwVGV4U3ViSW1h
Z2UpKTsKK30KKworQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Qml0bWFwQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWlu
dGVyLCBib29sIHVzZU1hcFRleFN1YkltYWdlKQorICAgIDogQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcihwYWludGVyKQorICAgICwgbV90ZXhTdWJJbWFnZSh1c2VNYXBUZXhTdWJJbWFnZSkKK3sK
K30KKworQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6fkJpdG1hcENhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIoKQoreworfQorCitQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6
OlRleHR1cmU+IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZVRleHR1cmUo
VGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0
dXJlKHRoaXMsIE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpKTsKK30KKworTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IEJpdG1hcENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OnNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KQorewor
ICAgIC8vIFRoZSBjb21wb25lbnQgb3JkZXIgbWF5IGJlIGJncmEgaWYgd2UgdXBsb2FkZWQgYmdy
YSBwaXhlbHMgdG8gcmdiYSB0ZXh0dXJlcy4KKyAgICByZXR1cm4gUGxhdGZvcm1Db2xvcjo6c2Ft
ZUNvbXBvbmVudE9yZGVyKHRleHR1cmVGb3JtYXQpID8KKyAgICAgICAgICAgIExheWVyVGV4dHVy
ZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdFJHQkEgOiBMYXllclRleHR1cmVVcGRhdGVyOjpT
YW1wbGVkVGV4ZWxGb3JtYXRCR1JBOworfQorCit2b2lkIEJpdG1hcENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29u
c3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMsIGZsb2F0IGNvbnRlbnRzU2Nh
bGUpCit7CisgICAgbV90ZXhTdWJJbWFnZS5zZXRTdWJJbWFnZVNpemUodGlsZVNpemUpOworCisg
ICAgbV9jYW52YXMucmVzaXplKGNvbnRlbnRSZWN0LnNpemUoKSk7CisgICAgLy8gQXNzdW1wdGlv
bjogaWYgYSB0aWxlciBpcyB1c2luZyBib3JkZXIgdGV4ZWxzLCB0aGVuIGl0IGlzIGJlY2F1c2Ug
dGhlCisgICAgLy8gbGF5ZXIgaXMgbGlrZWx5IHRvIGJlIGZpbHRlcmVkIG9yIHRyYW5zZm9ybWVk
LiBCZWNhdXNlIG9mIGl0IG1pZ2h0IGJlCisgICAgLy8gdHJhbnNmb3JtZWQsIGRyYXcgdGhlIHRl
eHQgaW4gZ3JheXNjYWxlIGluc3RlYWQgb2Ygc3VicGl4ZWwgYW50aWFsaWFzaW5nLgorICAgIFBs
YXRmb3JtQ2FudmFzOjpQYWludGVyOjpUZXh0T3B0aW9uIHRleHRPcHRpb24gPQorICAgICAgICBi
b3JkZXJUZXhlbHMgPyBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6R3JheXNjYWxlVGV4dCA6IFBs
YXRmb3JtQ2FudmFzOjpQYWludGVyOjpTdWJwaXhlbFRleHQ7CisgICAgUGxhdGZvcm1DYW52YXM6
OlBhaW50ZXIgY2FudmFzUGFpbnRlcigmbV9jYW52YXMsIHRleHRPcHRpb24pOworICAgIHBhaW50
Q29udGVudHMoKmNhbnZhc1BhaW50ZXIuY29udGV4dCgpLCBjb250ZW50UmVjdCwgY29udGVudHNT
Y2FsZSk7Cit9CisKK3ZvaWQgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBkYXRl
VGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3Iq
IGFsbG9jYXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQoreworICAgIFBsYXRmb3JtQ2FudmFzOjpB
dXRvTG9ja2VyIGxvY2tlcigmbV9jYW52YXMpOworCisgICAgdGV4dHVyZS0+YmluZFRleHR1cmUo
Y29udGV4dCwgYWxsb2NhdG9yKTsKKyAgICBtX3RleFN1YkltYWdlLnVwbG9hZChsb2NrZXIucGl4
ZWxzKCksIGNvbnRlbnRSZWN0KCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0LCB0ZXh0dXJlLT5mb3Jt
YXQoKSwgY29udGV4dCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTc1NTIyY2JhYWEzNDE0NzU4NTZk
YjZjYmVkYTMxMmMxNDlkODdiYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIu
aApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIEJpdG1hcENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXJfaAorI2RlZmluZSBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyX2gK
KworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkNhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJMYXllclRleHR1cmVTdWJJbWFnZS5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtQ2FudmFzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgTGF5ZXJQYWludGVyQ2hyb21pdW07CisKKy8vIEEgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
ciB3aXRoIGFuIGludGVybmFsIGJpdG1hcC4KK2NsYXNzIEJpdG1hcENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIgOiBwdWJsaWMgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciB7CitwdWJsaWM6Cisg
ICAgY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIFRleHR1cmUoQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlciosIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+KTsKKyAgICAgICAgdmlydHVhbCB+VGV4
dHVyZSgpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4
dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0
IEludFJlY3QmIGRlc3RSZWN0KTsKKworICAgIHByaXZhdGU6CisgICAgICAgIEJpdG1hcENhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgeyByZXR1cm4gbV90ZXh0dXJl
VXBkYXRlcjsgfQorCisgICAgICAgIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIG1f
dGV4dHVyZVVwZGF0ZXI7CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJpdG1hcENh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI+IGNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNo
cm9taXVtPiwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSk7CisgICAgdmlydHVhbCB+Qml0bWFwQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlcigpOworCisgICAgdmlydHVhbCBQYXNzT3duUHRyPExheWVy
VGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKTsK
KyAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4gTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6Qm90dG9tVXBPcmllbnRhdGlvbjsgfQorICAgIHZpcnR1YWwgU2FtcGxlZFRl
eGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscywgZmxvYXQgY29udGVu
dHNTY2FsZSk7CisgICAgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCos
IFRleHR1cmVBbGxvY2F0b3IqLCBNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKworcHJpdmF0ZToKKyAgICBCaXRtYXBD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+
LCBib29sIHVzZU1hcFRleFN1YkltYWdlKTsKKworICAgIFBsYXRmb3JtQ2FudmFzIG1fY2FudmFz
OworICAgIExheWVyVGV4dHVyZVN1YkltYWdlIG1fdGV4U3ViSW1hZ2U7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
I2VuZGlmIC8vIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXJfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZmE2Nzg1NGM2YmQ3
ZjUzODJiNTJiMGVlZmJhMTAzMTY2ZmMwOGZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
ci5jcHAKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlci5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVk
ZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Q2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVy
KQorICAgIDogbV9wYWludGVyKHBhaW50ZXIpCit7Cit9CisKK0NhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXI6On5DYW52YXNMYXllclRleHR1cmVVcGRhdGVyKCkKK3sKK30KKwordm9pZCBDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGZsb2F0IGNvbnRlbnRzU2NhbGUpCit7Cisg
ICAgY29udGV4dC50cmFuc2xhdGUoLWNvbnRlbnRSZWN0LngoKSwgLWNvbnRlbnRSZWN0LnkoKSk7
CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhczo6
cGFpbnQiLCB0aGlzLCAwKTsKKworICAgICAgICBJbnRSZWN0IHNjYWxlZENvbnRlbnRSZWN0ID0g
Y29udGVudFJlY3Q7CisKKyAgICAgICAgaWYgKGNvbnRlbnRzU2NhbGUgIT0gMS4wKSB7CisgICAg
ICAgICAgICBjb250ZXh0LnNhdmUoKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2NhbGUoRmxvYXRT
aXplKGNvbnRlbnRzU2NhbGUsIGNvbnRlbnRzU2NhbGUpKTsKKworICAgICAgICAgICAgRmxvYXRS
ZWN0IHJlY3QgPSBjb250ZW50UmVjdDsKKyAgICAgICAgICAgIHJlY3Quc2NhbGUoMSAvIGNvbnRl
bnRzU2NhbGUpOworICAgICAgICAgICAgc2NhbGVkQ29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRS
ZWN0KHJlY3QpOworICAgICAgICB9CisKKyAgICAgICAgbV9wYWludGVyLT5wYWludChjb250ZXh0
LCBzY2FsZWRDb250ZW50UmVjdCk7CisKKyAgICAgICAgaWYgKGNvbnRlbnRzU2NhbGUgIT0gMS4w
KQorICAgICAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7CisgICAgfQorICAgIG1fY29udGVudFJl
Y3QgPSBjb250ZW50UmVjdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8v
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOGZlZmYzNDIyYjFiODUzMGI4ZjY4OWZmMmM1NjY3
NjYwYmVkNWNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBAIC0wLDAgKzEsNTcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisKKyNpZm5kZWYgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcl9oCisjZGVmaW5l
IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXJfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorCisjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgTGF5ZXJQYWludGVy
Q2hyb21pdW07CisKKy8vIEEgTGF5ZXJUZXh0dXJlVXBkYXRlciB3aXRoIGFuIGludGVybmFsIGNh
bnZhcy4KK2NsYXNzIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMgTGF5ZXJUZXh0
dXJlVXBkYXRlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcigpOworCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcihQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPik7CisKKyAgICB2b2lkIHBhaW50
Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGZs
b2F0IGNvbnRlbnRzU2NhbGUpOworICAgIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9jb250ZW50UmVjdDsgfQorCitwcml2YXRlOgorICAgIEludFJlY3QgbV9j
b250ZW50UmVjdDsKKyAgICBPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IG1fcGFpbnRlcjsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisjZW5kaWYgLy8gQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggOWViMWQ3OTlmNmQ5MWVjZWM2Nzk4
MTA2ZWM2MDI3YmI0MWU1MjUyMC4uZWMzNmEyZDQxMWYzY2YwZGY5ZDQ0ZTdiZjE3YjgwNmJhNTdi
YzE5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMzQsOSArMzQs
MTAgQEAKIAogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAKKyNpbmNsdWRlICJC
aXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCisjaW5jbHVkZSAiRnJhbWVCdWZmZXJT
a1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJQYWlu
dGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKLSNpbmNs
dWRlICJMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdXBw
b3J0LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSA8d3RmL0N1
cnJlbnRUaW1lLmg+CkBAIC0xMjAsMTIgKzEyMSwxMiBAQCB2b2lkIENvbnRlbnRMYXllckNocm9t
aXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiB7
CiAjaWYgVVNFKFNLSUEpCiAgICAgaWYgKGhvc3QtPnNldHRpbmdzKCkuYWNjZWxlcmF0ZVBhaW50
aW5nKSB7Ci0gICAgICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBMYXllclRleHR1cmVVcGRhdGVyU2tQ
aWN0dXJlOjpjcmVhdGUoQ29udGVudExheWVyUGFpbnRlcjo6Y3JlYXRlKG1fZGVsZWdhdGUpKTsK
KyAgICAgICAgbV90ZXh0dXJlVXBkYXRlciA9IEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX2Rl
bGVnYXRlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gVVNFKFNLSUEpCiAK
LSAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6Y3JlYXRl
KENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX2RlbGVnYXRlKSwgaG9zdC0+bGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcygpLnVzaW5nTWFwU3ViKTsKKyAgICBtX3RleHR1cmVVcGRhdGVyID0g
Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKENvbnRlbnRMYXllclBhaW50
ZXI6OmNyZWF0ZShtX2RlbGVnYXRlKSwgaG9zdC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygp
LnVzaW5nTWFwU3ViKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZjJkN2UyZGRkYWE2ZmQ5OWZiZTYwM2MzYjhlMzczZTk5OGEzMzgzNQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1l
QnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKQEAgLTAsMCArMSwx
NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyNpZiBVU0UoU0tJQSkKKworI2luY2x1ZGUgIkZyYW1lQnVmZmVyU2tQ
aWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorCisjaW5jbHVkZSAiTGF5ZXJQYWlu
dGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJTa0NhbnZhcy5oIgorI2luY2x1ZGUgIlNrR3B1RGV2
aWNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgRnJh
bWVCdWZmZXIgeworcHVibGljOgorICAgIEZyYW1lQnVmZmVyKCk7CisgICAgfkZyYW1lQnVmZmVy
KCk7CisKKyAgICBTa0NhbnZhcyogaW5pdGlhbGl6ZShHcmFwaGljc0NvbnRleHQzRCosIFRleHR1
cmVBbGxvY2F0b3IqLCBNYW5hZ2VkVGV4dHVyZSopOworCitwcml2YXRlOgorICAgIEdyYXBoaWNz
Q29udGV4dDNEKiBtX2NvbnRleHQ7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZibzsKKyAgICBP
d25QdHI8U2tDYW52YXM+IG1fY2FudmFzOworfTsKKworRnJhbWVCdWZmZXI6OkZyYW1lQnVmZmVy
KCkKKyAgICA6IG1fY29udGV4dCgwKQorICAgICwgbV9mYm8oMCkKK3sKK30KKworRnJhbWVCdWZm
ZXI6On5GcmFtZUJ1ZmZlcigpCit7CisgICAgbV9jYW52YXMuY2xlYXIoKTsKKworICAgIGlmICht
X2ZibykKKyAgICAgICAgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihtX2Zibyk7Cit9CisK
K1NrQ2FudmFzKiBGcmFtZUJ1ZmZlcjo6aW5pdGlhbGl6ZShHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBNYW5hZ2VkVGV4dHVyZSogdGV4dHVy
ZSkKK3sKKyAgICBtX2NvbnRleHQgPSBjb250ZXh0OworICAgIG1fZmJvID0gbV9jb250ZXh0LT5j
cmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIHRleHR1cmUtPmZyYW1lYnVm
ZmVyVGV4dHVyZTJEKG1fY29udGV4dCwgYWxsb2NhdG9yKTsKKworICAgIC8vIENyZWF0ZSBhIHNr
aWEgZ3B1IGNhbnZhcy4KKyAgICBHckNvbnRleHQqIGdyQ29udGV4dCA9IG1fY29udGV4dC0+Z3JD
b250ZXh0KCk7CisgICAgSW50U2l6ZSBjYW52YXNTaXplID0gdGV4dHVyZS0+c2l6ZSgpOworICAg
IEdyUGxhdGZvcm1TdXJmYWNlRGVzYyB0YXJnZXREZXNjOworICAgIHRhcmdldERlc2MucmVzZXQo
KTsKKyAgICB0YXJnZXREZXNjLmZTdXJmYWNlVHlwZSA9IGtUZXh0dXJlUmVuZGVyVGFyZ2V0X0dy
UGxhdGZvcm1TdXJmYWNlVHlwZTsKKyAgICB0YXJnZXREZXNjLmZSZW5kZXJUYXJnZXRGbGFncyA9
IGtOb25lX0dyUGxhdGZvcm1SZW5kZXJUYXJnZXRGbGFnQml0OworICAgIHRhcmdldERlc2MuZldp
ZHRoID0gY2FudmFzU2l6ZS53aWR0aCgpOworICAgIHRhcmdldERlc2MuZkhlaWdodCA9IGNhbnZh
c1NpemUuaGVpZ2h0KCk7CisgICAgdGFyZ2V0RGVzYy5mQ29uZmlnID0ga1JHQkFfODg4OF9HclBp
eGVsQ29uZmlnOworICAgIHRhcmdldERlc2MuZlN0ZW5jaWxCaXRzID0gODsKKyAgICB0YXJnZXRE
ZXNjLmZQbGF0Zm9ybVRleHR1cmUgPSB0ZXh0dXJlLT50ZXh0dXJlSWQoKTsKKyAgICB0YXJnZXRE
ZXNjLmZQbGF0Zm9ybVJlbmRlclRhcmdldCA9IG1fZmJvOworICAgIFNrQXV0b1RVbnJlZjxHclRl
eHR1cmU+IHRhcmdldChzdGF0aWNfY2FzdDxHclRleHR1cmUqPihnckNvbnRleHQtPmNyZWF0ZVBs
YXRmb3JtU3VyZmFjZSh0YXJnZXREZXNjKSkpOworICAgIFNrQXV0b1RVbnJlZjxTa0RldmljZT4g
ZGV2aWNlKG5ldyBTa0dwdURldmljZShnckNvbnRleHQsIHRhcmdldC5nZXQoKSkpOworICAgIG1f
Y2FudmFzID0gYWRvcHRQdHIobmV3IFNrQ2FudmFzKGRldmljZS5nZXQoKSkpOworCisgICAgcmV0
dXJuIG1fY2FudmFzLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZQorCitGcmFtZUJ1ZmZlclNr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OlRleHR1cmUoRnJhbWVC
dWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlciwg
UGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4dHVyZSkKKyAgICA6IExheWVyVGV4dHVyZVVw
ZGF0ZXI6OlRleHR1cmUodGV4dHVyZSkKKyAgICAsIG1fdGV4dHVyZVVwZGF0ZXIodGV4dHVyZVVw
ZGF0ZXIpCit7Cit9CisKK0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZTo6flRleHR1cmUoKQoreworfQorCit2b2lkIEZyYW1lQnVmZmVyU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6dXBkYXRlUmVjdChHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3sKKyAgICB0ZXh0
dXJlVXBkYXRlcigpLT51cGRhdGVUZXh0dXJlUmVjdChjb250ZXh0LCBhbGxvY2F0b3IsIHRleHR1
cmUoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QpOworfQorCitQYXNzUmVmUHRyPEZyYW1lQnVmZmVy
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcj4gRnJhbWVCdWZmZXJTa1BpY3R1cmVD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUoUGFzc093blB0cjxMYXllclBhaW50ZXJD
aHJvbWl1bT4gcGFpbnRlcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZyYW1lQnVmZmVy
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihwYWludGVyKSk7Cit9CisKK0ZyYW1l
QnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6RnJhbWVCdWZmZXJTa1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hy
b21pdW0+IHBhaW50ZXIpCisgICAgOiBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
KHBhaW50ZXIpCit7Cit9CisKK0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6fkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcigp
Cit7Cit9CisKK1Bhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gRnJhbWVC
dWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGVUZXh0dXJlKFRl
eHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVy
ZSh0aGlzLCBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKSk7Cit9CisKK0xheWVyVGV4
dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXI6OnNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJl
Rm9ybWF0KQoreworICAgIC8vIEhlcmUgd2UgZGlyZWN0bHkgcmVuZGVyIHRvIHRoZSB0ZXh0dXJl
LCBzbyB0aGUgY29tcG9uZW50IG9yZGVyIGlzIGFsd2F5cyBjb3JyZWN0LgorICAgIHJldHVybiBM
YXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBOworfQorCit2b2lkIEZy
YW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBkYXRlVGV4dHVy
ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9j
YXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQoreworICAgIC8vIE1ha2Ugc3VyZSBTS0lBIHVzZXMg
dGhlIGNvcnJlY3QgR0wgY29udGV4dC4KKyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICAvLyBOb3RpZnkgU0tJQSB0byBzeW5jIGl0cyBpbnRlcm5hbCBHTCBzdGF0ZS4KKyAg
ICBjb250ZXh0LT5nckNvbnRleHQoKS0+cmVzZXRDb250ZXh0KCk7CisKKyAgICAvLyBDcmVhdGUg
YW4gYWNjZWxlcmF0ZWQgY2FudmFzIHRvIGRyYXcgb24uCisgICAgRnJhbWVCdWZmZXIgYnVmZmVy
OworICAgIFNrQ2FudmFzKiBjYW52YXMgPSBidWZmZXIuaW5pdGlhbGl6ZShjb250ZXh0LCBhbGxv
Y2F0b3IsIHRleHR1cmUpOworCisgICAgY2FudmFzLT5jbGlwUmVjdChTa1JlY3QoZGVzdFJlY3Qp
KTsKKyAgICAvLyBUcmFuc2xhdGUgdGhlIG9yaWdpbiBvZiBjb250ZW50UmVjdCB0byB0aGF0IG9m
IGRlc3RSZWN0LgorICAgIC8vIE5vdGUgdGhhdCBkZXN0UmVjdCBpcyBkZWZpbmVkIHJlbGF0aXZl
IHRvIHNvdXJjZVJlY3QuCisgICAgY2FudmFzLT50cmFuc2xhdGUoY29udGVudFJlY3QoKS54KCkg
LSBzb3VyY2VSZWN0LngoKSArIGRlc3RSZWN0LngoKSwKKyAgICAgICAgICAgICAgICAgICAgICBj
b250ZW50UmVjdCgpLnkoKSAtIHNvdXJjZVJlY3QueSgpICsgZGVzdFJlY3QueSgpKTsKKyAgICBk
cmF3UGljdHVyZShjYW52YXMpOworCisgICAgLy8gRmx1c2ggU0tJQSBjb250ZXh0IHNvIHRoYXQg
YWxsIHRoZSByZW5kZXJlZCBzdHVmZiBhcHBlYXJzIG9uIHRoZSB0ZXh0dXJlLgorICAgIGNvbnRl
eHQtPmdyQ29udGV4dCgpLT5mbHVzaCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisj
ZW5kaWYgLy8gVVNFKFNLSUEpCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
RnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNmI2MmQxOTk5YjU2MjM1MDQx
Y2MwZGJiMjIyNDkxMDUxZjk1OWViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBGcmFt
ZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXJfaAorI2RlZmluZSBGcmFt
ZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXJfaAorCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIFVTRShTS0lBKQorCisjaW5jbHVkZSAiU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciA6IHB1
YmxpYyBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyIHsKK3B1YmxpYzoKKyAgICBj
bGFzcyBUZXh0dXJlIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUgeworICAg
IHB1YmxpYzoKKyAgICAgICAgVGV4dHVyZShGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIqLCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPik7CisgICAgICAgIHZp
cnR1YWwgflRleHR1cmUoKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVjdChHcmFw
aGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBG
cmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRh
dGVyKCkgeyByZXR1cm4gbV90ZXh0dXJlVXBkYXRlcjsgfQorCisgICAgICAgIEZyYW1lQnVmZmVy
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciogbV90ZXh0dXJlVXBkYXRlcjsKKyAg
ICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyPiBjcmVhdGUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1
bT4pOworICAgIHZpcnR1YWwgfkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcigpOworCisgICAgdmlydHVhbCBQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6
OlRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKTsKKyAgICB2aXJ0dWFsIE9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VG9w
RG93bk9yaWVudGF0aW9uOyB9CisgICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxl
ZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpOworICAgIHZvaWQgdXBkYXRlVGV4
dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRl
eHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVj
dCk7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+KTsKK307
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKFNLSUEpCisjZW5kaWYgLy8g
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2VuZGlmIC8vIEZyYW1lQnVmZmVyU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVt
LmNwcAppbmRleCA5ZDNlOWYzYTFlNzBkZWU1ZjE5ZTNjZjBiMjQ4Yjk0M2FmYTEwMmMwLi5kYTE4
MzhiOTU4MTAwNjNkMTc4NzlhMTU3MGNlNjQwZjFkZmU4MWMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5
ZXJDaHJvbWl1bS5jcHAKQEAgLTQ2LDYgKzQ2LDI1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0
ZXIgewogcHVibGljOgorICAgIGNsYXNzIFRleHR1cmUgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZSB7CisgICAgcHVibGljOgorICAgICAgICBUZXh0dXJlKEltYWdlTGF5ZXJU
ZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIsIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+
IHRleHR1cmUpCisgICAgICAgICAgICA6IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUodGV4
dHVyZSkKKyAgICAgICAgICAgICwgbV90ZXh0dXJlVXBkYXRlcih0ZXh0dXJlVXBkYXRlcikKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJlY3QoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZVRleHR1cmVSZWN0KGNvbnRl
eHQsIGFsbG9jYXRvciwgdGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CisgICAgICAg
IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4
dHVyZVVwZGF0ZXIoKSB7IHJldHVybiBtX3RleHR1cmVVcGRhdGVyOyB9CisKKyAgICAgICAgSW1h
Z2VMYXllclRleHR1cmVVcGRhdGVyKiBtX3RleHR1cmVVcGRhdGVyOworICAgIH07CisKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI+IGNyZWF0ZShib29sIHVz
ZU1hcFRleFN1YkltYWdlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFn
ZUxheWVyVGV4dHVyZVVwZGF0ZXIodXNlTWFwVGV4U3ViSW1hZ2UpKTsKQEAgLTUzLDYgKzcyLDEx
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfkltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcigpIHsg
fQogCisgICAgdmlydHVhbCBQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+
IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmUodGhpcywgTWFuYWdlZFRleHR1cmU6OmNyZWF0ZSht
YW5hZ2VyKSkpOworICAgIH0KKwogICAgIHZpcnR1YWwgT3JpZW50YXRpb24gb3JpZW50YXRpb24o
KSB7IHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpCb3R0b21VcE9yaWVudGF0aW9uOyB9CiAK
ICAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVu
dW0gdGV4dHVyZUZvcm1hdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmlu
ZGV4IDBiZDZkYmMzODk2YWU0YTA3NzE5YTRlYTRhM2NjZTczNTkyNzNlMDQuLmNiMDYyM2Q2OTIz
OTIzYTI5M2I3N2IxNGVjNWMxYTJjNTRkOWUxMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcApAQCAtMzUsMTMgKzM1LDEzIEBACiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgiCiAKICNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIKKyNpbmNs
dWRlICJDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNE
Q2hyb21pdW0uaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJHZW9tZXRyeUJp
bmRpbmcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVy
Q2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUg
IkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaCIKICNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5o
IgogI2luY2x1ZGUgIk5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oIgogI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKaW5kZXggODVlMTM3OWMy
ZGQ2MjlmOThlOThhYzMyZDA0YmQ0YzFhNmEwZGMxMi4uYmY3NWNmMjlhODllMzg5ZTI3Njc3YjEx
OTIwNmVmMjlhNGUzMDE0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAtMjks
NiArMjksNyBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCisjaW5jbHVk
ZSAiTWFuYWdlZFRleHR1cmUuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC0zNywxMSArMzgsMjYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3Mg
SW50U2l6ZTsKLWNsYXNzIE1hbmFnZWRUZXh0dXJlOwogY2xhc3MgVGV4dHVyZUFsbG9jYXRvcjsK
K2NsYXNzIFRleHR1cmVNYW5hZ2VyOwogCiBjbGFzcyBMYXllclRleHR1cmVVcGRhdGVyIDogcHVi
bGljIFJlZkNvdW50ZWQ8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gewogcHVibGljOgorICAgIC8vIEFs
bG93cyB0ZXh0dXJlIHVwbG9hZGVycyB0byBzdG9yZSBwZXItdGlsZSByZXNvdXJjZXMuCisgICAg
Y2xhc3MgVGV4dHVyZSB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5UZXh0dXJlKCkg
eyB9CisKKyAgICAgICAgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleHR1
cmUuZ2V0KCk7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVSZWN0KGNvbnN0IEludFJl
Y3QmIC8qIHNvdXJjZVJlY3QgKi8pIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVj
dChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkgPSAwOworICAgIHByb3RlY3RlZDoK
KyAgICAgICAgZXhwbGljaXQgVGV4dHVyZShQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiB0ZXh0
dXJlKSA6IG1fdGV4dHVyZSh0ZXh0dXJlKSB7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIE93
blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV90ZXh0dXJlOworICAgIH07CisKICAgICB2aXJ0dWFsIH5M
YXllclRleHR1cmVVcGRhdGVyKCkgeyB9CiAKICAgICBlbnVtIE9yaWVudGF0aW9uIHsKQEAgLTU0
LDYgKzcwLDcgQEAgcHVibGljOgogICAgICAgICBTYW1wbGVkVGV4ZWxGb3JtYXRCR1JBLAogICAg
ICAgICBTYW1wbGVkVGV4ZWxGb3JtYXRJbnZhbGlkLAogICAgIH07CisgICAgdmlydHVhbCBQYXNz
T3duUHRyPFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKSA9IDA7CiAgICAg
Ly8gUmV0dXJucyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIHRleHR1cmUgdXBsb2FkZWQgYnkgdGhp
cyBpbnRlcmZhY2UuCiAgICAgdmlydHVhbCBPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpID0gMDsK
ICAgICAvLyBSZXR1cm5zIHRoZSBmb3JtYXQgb2YgdGhlIHRleGVsIHVwbG9hZGVkIGJ5IHRoaXMg
aW50ZXJmYWNlLgpAQCAtNjEsOCArNzgsNyBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBmb3JtYXQg
c3BlY2lmaWVzIHRoZSBjb21wb25lbnQgb3JkZXIgaW4gdGhlIHNhbXBsZWQgdGV4ZWwuCiAgICAg
Ly8gSWYgdGhlIGZvcm1hdCBpcyBUZXhlbEZvcm1hdEJHUkEsIHZlYzQueCBpcyBibHVlIGFuZCB2
ZWM0LnogaXMgcmVkLgogICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhl
bEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBy
ZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYg
dGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMsIGZsb2F0IGNvbnRlbnRzU2NhbGUpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0
dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJl
VG9VcGRhdGUoY29uc3QgSW50UmVjdCYgLyogY29udGVudFJlY3QgKi8sIGNvbnN0IEludFNpemUm
IC8qIHRpbGVTaXplICovLCBpbnQgLyogYm9yZGVyVGV4ZWxzICovLCBmbG9hdCAvKiBjb250ZW50
c1NjYWxlICovKSB7IH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVw
ZGF0ZXJDYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDhmOGVmYzY3MTNlMmVjOGE4MTkyOTBmYzcwZTY4MGQ1MmU2ZDRkNDQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwyMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVkZSAiTGF5ZXJU
ZXh0dXJlVXBkYXRlckNhbnZhcy5oIgotCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0u
aCIKLSNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29sb3Iu
aCIKLSNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCi0KLSNpZiBVU0UoU0tJQSkKLSNpbmNsdWRlICJH
ckNvbnRleHQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCi0jaW5jbHVkZSAi
U2tDYW52YXMuaCIKLSNpbmNsdWRlICJTa0dwdURldmljZS5oIgotI2VuZGlmIC8vIFVTRShTS0lB
KQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBVU0UoU0tJQSkKLW5hbWVzcGFjZSB7Ci0K
LWNsYXNzIEZyYW1lQnVmZmVyIHsKLXB1YmxpYzoKLSAgICBGcmFtZUJ1ZmZlcigpOwotICAgIH5G
cmFtZUJ1ZmZlcigpOwotCi0gICAgU2tDYW52YXMqIGluaXRpYWxpemUoR3JhcGhpY3NDb250ZXh0
M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1cmUqKTsKLQotcHJpdmF0ZToKLSAg
ICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwotICAgIFBsYXRmb3JtM0RPYmplY3QgbV9m
Ym87Ci0gICAgT3duUHRyPFNrQ2FudmFzPiBtX2NhbnZhczsKLX07Ci0KLUZyYW1lQnVmZmVyOjpG
cmFtZUJ1ZmZlcigpCi0gICAgOiBtX2NvbnRleHQoMCkKLSAgICAsIG1fZmJvKDApCi17Ci19Ci0K
LUZyYW1lQnVmZmVyOjp+RnJhbWVCdWZmZXIoKQotewotICAgIG1fY2FudmFzLmNsZWFyKCk7Ci0K
LSAgICBpZiAobV9mYm8pCi0gICAgICAgIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9m
Ym8pOwotfQotCi1Ta0NhbnZhcyogRnJhbWVCdWZmZXI6OmluaXRpYWxpemUoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgTWFuYWdlZFRleHR1
cmUqIHRleHR1cmUpCi17Ci0gICAgbV9jb250ZXh0ID0gY29udGV4dDsKLSAgICBtX2ZibyA9IG1f
Y29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKLSAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICB0ZXh0dXJl
LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChtX2NvbnRleHQsIGFsbG9jYXRvcik7Ci0KLSAgICAvLyBD
cmVhdGUgYSBza2lhIGdwdSBjYW52YXMuCi0gICAgR3JDb250ZXh0KiBnckNvbnRleHQgPSBtX2Nv
bnRleHQtPmdyQ29udGV4dCgpOwotICAgIEludFNpemUgY2FudmFzU2l6ZSA9IHRleHR1cmUtPnNp
emUoKTsKLSAgICBHclBsYXRmb3JtU3VyZmFjZURlc2MgdGFyZ2V0RGVzYzsKLSAgICB0YXJnZXRE
ZXNjLnJlc2V0KCk7Ci0gICAgdGFyZ2V0RGVzYy5mU3VyZmFjZVR5cGUgPSBrVGV4dHVyZVJlbmRl
clRhcmdldF9HclBsYXRmb3JtU3VyZmFjZVR5cGU7Ci0gICAgdGFyZ2V0RGVzYy5mUmVuZGVyVGFy
Z2V0RmxhZ3MgPSBrTm9uZV9HclBsYXRmb3JtUmVuZGVyVGFyZ2V0RmxhZ0JpdDsKLSAgICB0YXJn
ZXREZXNjLmZXaWR0aCA9IGNhbnZhc1NpemUud2lkdGgoKTsKLSAgICB0YXJnZXREZXNjLmZIZWln
aHQgPSBjYW52YXNTaXplLmhlaWdodCgpOwotICAgIHRhcmdldERlc2MuZkNvbmZpZyA9IGtSR0JB
Xzg4ODhfR3JQaXhlbENvbmZpZzsKLSAgICB0YXJnZXREZXNjLmZTdGVuY2lsQml0cyA9IDg7Ci0g
ICAgdGFyZ2V0RGVzYy5mUGxhdGZvcm1UZXh0dXJlID0gdGV4dHVyZS0+dGV4dHVyZUlkKCk7Ci0g
ICAgdGFyZ2V0RGVzYy5mUGxhdGZvcm1SZW5kZXJUYXJnZXQgPSBtX2ZibzsKLSAgICBTa0F1dG9U
VW5yZWY8R3JUZXh0dXJlPiB0YXJnZXQoc3RhdGljX2Nhc3Q8R3JUZXh0dXJlKj4oZ3JDb250ZXh0
LT5jcmVhdGVQbGF0Zm9ybVN1cmZhY2UodGFyZ2V0RGVzYykpKTsKLSAgICBTa0F1dG9UVW5yZWY8
U2tEZXZpY2U+IGRldmljZShuZXcgU2tHcHVEZXZpY2UoZ3JDb250ZXh0LCB0YXJnZXQuZ2V0KCkp
KTsKLSAgICBtX2NhbnZhcyA9IGFkb3B0UHRyKG5ldyBTa0NhbnZhcyhkZXZpY2UuZ2V0KCkpKTsK
LQotICAgIHJldHVybiBtX2NhbnZhcy5nZXQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UKLSNlbmRp
ZiAvLyBVU0UoU0tJQSkKLQotTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhczo6TGF5ZXJUZXh0dXJl
VXBkYXRlckNhbnZhcyhQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyKQot
ICAgIDogbV9wYWludGVyKHBhaW50ZXIpCi17Ci19Ci0KLXZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRl
ckNhbnZhczo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0LCBmbG9hdCBjb250ZW50c1NjYWxlKQotewotICAgIGNvbnRleHQu
dHJhbnNsYXRlKC1jb250ZW50UmVjdC54KCksIC1jb250ZW50UmVjdC55KCkpOwotICAgIHsKLSAg
ICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6OnBhaW50IiwgdGhp
cywgMCk7Ci0KLSAgICAgICAgSW50UmVjdCBzY2FsZWRDb250ZW50UmVjdCA9IGNvbnRlbnRSZWN0
OwotCi0gICAgICAgIGlmIChjb250ZW50c1NjYWxlICE9IDEuMCkgewotICAgICAgICAgICAgY29u
dGV4dC5zYXZlKCk7Ci0gICAgICAgICAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZShjb250ZW50
c1NjYWxlLCBjb250ZW50c1NjYWxlKSk7Ci0KLSAgICAgICAgICAgIEZsb2F0UmVjdCByZWN0ID0g
Y29udGVudFJlY3Q7Ci0gICAgICAgICAgICByZWN0LnNjYWxlKDEgLyBjb250ZW50c1NjYWxlKTsK
LSAgICAgICAgICAgIHNjYWxlZENvbnRlbnRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChyZWN0KTsK
LSAgICAgICAgfQotCi0gICAgICAgIG1fcGFpbnRlci0+cGFpbnQoY29udGV4dCwgc2NhbGVkQ29u
dGVudFJlY3QpOwotCi0gICAgICAgIGlmIChjb250ZW50c1NjYWxlICE9IDEuMCkKLSAgICAgICAg
ICAgIGNvbnRleHQucmVzdG9yZSgpOwotICAgIH0KLSAgICBtX2NvbnRlbnRSZWN0ID0gY29udGVu
dFJlY3Q7Ci19Ci0KLVBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcD4gTGF5ZXJU
ZXh0dXJlVXBkYXRlckJpdG1hcDo6Y3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21p
dW0+IHBhaW50ZXIsIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwKHBhaW50ZXIsIHVzZU1hcFRleFN1Yklt
YWdlKSk7Ci19Ci0KLUxheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OkxheWVyVGV4dHVyZVVwZGF0
ZXJCaXRtYXAoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlciwgYm9vbCB1
c2VNYXBUZXhTdWJJbWFnZSkKLSAgICA6IExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMocGFpbnRl
cikKLSAgICAsIG1fdGV4U3ViSW1hZ2UodXNlTWFwVGV4U3ViSW1hZ2UpCi17Ci19Ci0KLUxheWVy
VGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBMYXllclRleHR1cmVVcGRhdGVyQml0
bWFwOjpzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkKLXsKLSAgICAv
LyBUaGUgY29tcG9uZW50IG9yZGVyIG1heSBiZSBiZ3JhIGlmIHdlIHVwbG9hZGVkIGJncmEgcGl4
ZWxzIHRvIHJnYmEgdGV4dHVyZXMuCi0gICAgcmV0dXJuIFBsYXRmb3JtQ29sb3I6OnNhbWVDb21w
b25lbnRPcmRlcih0ZXh0dXJlRm9ybWF0KSA/Ci0gICAgICAgICAgICBMYXllclRleHR1cmVVcGRh
dGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBIDogTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxl
ZFRleGVsRm9ybWF0QkdSQTsKLX0KLQotdm9pZCBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpw
cmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUm
IHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzLCBmbG9hdCBjb250ZW50c1NjYWxlKQotewotICAg
IG1fdGV4U3ViSW1hZ2Uuc2V0U3ViSW1hZ2VTaXplKHRpbGVTaXplKTsKLQotICAgIG1fY2FudmFz
LnJlc2l6ZShjb250ZW50UmVjdC5zaXplKCkpOwotICAgIC8vIEFzc3VtcHRpb246IGlmIGEgdGls
ZXIgaXMgdXNpbmcgYm9yZGVyIHRleGVscywgdGhlbiBpdCBpcyBiZWNhdXNlIHRoZQotICAgIC8v
IGxheWVyIGlzIGxpa2VseSB0byBiZSBmaWx0ZXJlZCBvciB0cmFuc2Zvcm1lZC4gQmVjYXVzZSBv
ZiBpdCBtaWdodCBiZQotICAgIC8vIHRyYW5zZm9ybWVkLCBkcmF3IHRoZSB0ZXh0IGluIGdyYXlz
Y2FsZSBpbnN0ZWFkIG9mIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KLSAgICBQbGF0Zm9ybUNhbnZh
czo6UGFpbnRlcjo6VGV4dE9wdGlvbiB0ZXh0T3B0aW9uID0KLSAgICAgICAgYm9yZGVyVGV4ZWxz
ID8gUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OkdyYXlzY2FsZVRleHQgOiBQbGF0Zm9ybUNhbnZh
czo6UGFpbnRlcjo6U3VicGl4ZWxUZXh0OwotICAgIFBsYXRmb3JtQ2FudmFzOjpQYWludGVyIGNh
bnZhc1BhaW50ZXIoJm1fY2FudmFzLCB0ZXh0T3B0aW9uKTsKLSAgICBwYWludENvbnRlbnRzKCpj
YW52YXNQYWludGVyLmNvbnRleHQoKSwgY29udGVudFJlY3QsIGNvbnRlbnRzU2NhbGUpOwotfQot
Ci12b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnVwZGF0ZVRleHR1cmVSZWN0KEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIE1hbmFn
ZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRS
ZWN0JiBkZXN0UmVjdCkKLXsKLSAgICBQbGF0Zm9ybUNhbnZhczo6QXV0b0xvY2tlciBsb2NrZXIo
Jm1fY2FudmFzKTsKLQotICAgIHRleHR1cmUtPmJpbmRUZXh0dXJlKGNvbnRleHQsIGFsbG9jYXRv
cik7Ci0gICAgbV90ZXhTdWJJbWFnZS51cGxvYWQobG9ja2VyLnBpeGVscygpLCBjb250ZW50UmVj
dCgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCwgdGV4dHVyZS0+Zm9ybWF0KCksIGNvbnRleHQpOwot
fQotCi0jaWYgVVNFKFNLSUEpCi1QYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1
cmU+IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OmNyZWF0ZShQYXNzT3duUHRyPExheWVy
UGFpbnRlckNocm9taXVtPiBwYWludGVyKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5
ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZShwYWludGVyKSk7Ci19Ci0KLUxheWVyVGV4dHVyZVVw
ZGF0ZXJTa1BpY3R1cmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUoUGFzc093blB0cjxM
YXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcikKLSAgICA6IExheWVyVGV4dHVyZVVwZGF0ZXJD
YW52YXMocGFpbnRlcikKLXsKLX0KLQotTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6fkxh
eWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUoKQotewotfQotCi1MYXllclRleHR1cmVVcGRhdGVy
OjpTYW1wbGVkVGV4ZWxGb3JtYXQgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6c2FtcGxl
ZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpCi17Ci0gICAgLy8gSGVyZSB3ZSBk
aXJlY3RseSByZW5kZXIgdG8gdGhlIHRleHR1cmUsIHNvIHRoZSBjb21wb25lbnQgb3JkZXIgaXMg
YWx3YXlzIGNvcnJlY3QuCi0gICAgcmV0dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRU
ZXhlbEZvcm1hdFJHQkE7Ci19Ci0KLXZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6
cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXpl
JiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscywgZmxvYXQgY29udGVudHNTY2FsZSkKLXsKLSAg
ICBTa0NhbnZhcyogY2FudmFzID0gbV9waWN0dXJlLmJlZ2luUmVjb3JkaW5nKGNvbnRlbnRSZWN0
LndpZHRoKCksIGNvbnRlbnRSZWN0LmhlaWdodCgpKTsKLSAgICBQbGF0Zm9ybUNvbnRleHRTa2lh
IHBsYXRmb3JtQ29udGV4dChjYW52YXMpOwotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0Nv
bnRleHQoJnBsYXRmb3JtQ29udGV4dCk7Ci0gICAgcGFpbnRDb250ZW50cyhncmFwaGljc0NvbnRl
eHQsIGNvbnRlbnRSZWN0LCBjb250ZW50c1NjYWxlKTsKLSAgICBtX3BpY3R1cmUuZW5kUmVjb3Jk
aW5nKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6dXBkYXRlVGV4
dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFs
bG9jYXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQotewotICAgIC8vIE1ha2Ugc3VyZSBTS0lBIHVz
ZXMgdGhlIGNvcnJlY3QgR0wgY29udGV4dC4KLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICAvLyBOb3RpZnkgU0tJQSB0byBzeW5jIGl0cyBpbnRlcm5hbCBHTCBzdGF0ZS4K
LSAgICBjb250ZXh0LT5nckNvbnRleHQoKS0+cmVzZXRDb250ZXh0KCk7Ci0KLSAgICAvLyBDcmVh
dGUgYW4gYWNjZWxlcmF0ZWQgY2FudmFzIHRvIGRyYXcgb24uCi0gICAgRnJhbWVCdWZmZXIgYnVm
ZmVyOwotICAgIFNrQ2FudmFzKiBjYW52YXMgPSBidWZmZXIuaW5pdGlhbGl6ZShjb250ZXh0LCBh
bGxvY2F0b3IsIHRleHR1cmUpOwotCi0gICAgY2FudmFzLT5jbGlwUmVjdChTa1JlY3QoZGVzdFJl
Y3QpKTsKLSAgICAvLyBUcmFuc2xhdGUgdGhlIG9yaWdpbiBvZiBjb250ZW50UmVjdCB0byB0aGF0
IG9mIGRlc3RSZWN0LgotICAgIC8vIE5vdGUgdGhhdCBkZXN0UmVjdCBpcyBkZWZpbmVkIHJlbGF0
aXZlIHRvIHNvdXJjZVJlY3QuCi0gICAgY2FudmFzLT50cmFuc2xhdGUoY29udGVudFJlY3QoKS54
KCkgLSBzb3VyY2VSZWN0LngoKSArIGRlc3RSZWN0LngoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICBjb250ZW50UmVjdCgpLnkoKSAtIHNvdXJjZVJlY3QueSgpICsgZGVzdFJlY3QueSgpKTsKLSAg
ICBjYW52YXMtPmRyYXdQaWN0dXJlKG1fcGljdHVyZSk7Ci0KLSAgICAvLyBGbHVzaCBTS0lBIGNv
bnRleHQgc28gdGhhdCBhbGwgdGhlIHJlbmRlcmVkIHN0dWZmIGFwcGVhcnMgb24gdGhlIHRleHR1
cmUuCi0gICAgY29udGV4dC0+Z3JDb250ZXh0KCktPmZsdXNoKCk7Ci19Ci0jZW5kaWYgLy8gVVNF
KFNLSUEpCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ZDljMjZmODQ2MTA1ZDY4MzJiZGY5NTc3
Yjc0MDI3ZjQ0YmVkNDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0
dXJlVXBkYXRlckNhbnZhcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0KLSNpZm5kZWYgTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhc19oCi0jZGVmaW5lIExheWVyVGV4
dHVyZVVwZGF0ZXJDYW52YXNfaAotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQot
Ci0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCi0jaW5jbHVkZSAiTGF5ZXJUZXh0dXJlU3Vi
SW1hZ2UuaCIKLSNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCi0jaW5jbHVkZSAiUGxh
dGZvcm1DYW52YXMuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+Ci0KLSNpZiBVU0UoU0tJQSkKLSNpbmNsdWRlICJTa1BpY3R1cmUuaCIK
LQotY2xhc3MgR3JDb250ZXh0OwotY2xhc3MgU2tDYW52YXM7Ci1jbGFzcyBTa1BpY3R1cmU7Ci0j
ZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzRDsK
LWNsYXNzIExheWVyUGFpbnRlckNocm9taXVtOwotCi0vLyBBIExheWVyVGV4dHVyZVVwZGF0ZXIg
d2l0aCBhbiBpbnRlcm5hbCBjYW52YXMuCi1jbGFzcyBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFz
IDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXIgewotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0
IExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1
bT4pOwotCi0gICAgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0LCBmbG9hdCBjb250ZW50c1NjYWxlKTsKLSAgICBjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudFJlY3Q7IH0KLQotcHJp
dmF0ZToKLQotICAgIEludFJlY3QgbV9jb250ZW50UmVjdDsKLSAgICBPd25QdHI8TGF5ZXJQYWlu
dGVyQ2hyb21pdW0+IG1fcGFpbnRlcjsKLX07Ci0KLS8vIEEgTGF5ZXJUZXh0dXJlVXBkYXRlciB3
aXRoIGFuIGludGVybmFsIGJpdG1hcCBjYW52YXMuCi1jbGFzcyBMYXllclRleHR1cmVVcGRhdGVy
Qml0bWFwIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMgewotcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA+IGNyZWF0ZShQYXNz
T3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSk7Ci0K
LSAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4gTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6Qm90dG9tVXBPcmllbnRhdGlvbjsgfQotICAgIHZpcnR1YWwgU2FtcGxlZFRl
eGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscywgZmxvYXQgY29udGVu
dHNTY2FsZSk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29u
dGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOwotCi1wcml2YXRlOgotICAg
IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXAoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1
bT4sIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpOwotICAgIFBsYXRmb3JtQ2FudmFzIG1fY2FudmFz
OwotICAgIExheWVyVGV4dHVyZVN1YkltYWdlIG1fdGV4U3ViSW1hZ2U7Ci19OwotCi0jaWYgVVNF
KFNLSUEpCi1jbGFzcyBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlIDogcHVibGljIExheWVy
VGV4dHVyZVVwZGF0ZXJDYW52YXMgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExh
eWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU+IGNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFpbnRl
ckNocm9taXVtPik7Ci0gICAgdmlydHVhbCB+TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZSgp
OwotCi0gICAgdmlydHVhbCBPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIHsgcmV0dXJuIExheWVy
VGV4dHVyZVVwZGF0ZXI6OlRvcERvd25PcmllbnRhdGlvbjsgfQotICAgIHZpcnR1YWwgU2FtcGxl
ZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsK
LSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscywgZmxvYXQgY29u
dGVudHNTY2FsZSk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNz
Q29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOwotCi1wcml2YXRlOgot
ICAgIGV4cGxpY2l0IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUoUGFzc093blB0cjxMYXll
clBhaW50ZXJDaHJvbWl1bT4pOwotICAKLSAgICBTa1BpY3R1cmUgbV9waWN0dXJlOyAvLyBSZWNv
cmRpbmcgY2FudmFzLgotfTsKLSNlbmRpZiAvLyBVU0UoU0tJQSkKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSNlbmRpZiAv
LyBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQ
aWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjc1MTViZmQx
MGI1NDBkNjRhYjZhYTllNzg1ZWVkYWE0MWI4ZTc1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIuY3BwCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoU0tJ
QSkKKworI2luY2x1ZGUgIlNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKwor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9t
aXVtLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorI2luY2x1ZGUgIlNrQ2Fu
dmFzLmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlNrUGljdHVyZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcikK
KyAgICA6IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIocGFpbnRlcikKK3sKK30KKworU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6flNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIoKQoreworfQorCit2b2lkIFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXI6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50
U2l6ZSYgLyogdGlsZVNpemUgKi8sIGludCAvKiBib3JkZXJUZXhlbHMgKi8sIGZsb2F0IGNvbnRl
bnRzU2NhbGUpCit7CisgICAgU2tDYW52YXMqIGNhbnZhcyA9IG1fcGljdHVyZS5iZWdpblJlY29y
ZGluZyhjb250ZW50UmVjdC53aWR0aCgpLCBjb250ZW50UmVjdC5oZWlnaHQoKSk7CisgICAgUGxh
dGZvcm1Db250ZXh0U2tpYSBwbGF0Zm9ybUNvbnRleHQoY2FudmFzKTsKKyAgICBHcmFwaGljc0Nv
bnRleHQgZ3JhcGhpY3NDb250ZXh0KCZwbGF0Zm9ybUNvbnRleHQpOworICAgIHBhaW50Q29udGVu
dHMoZ3JhcGhpY3NDb250ZXh0LCBjb250ZW50UmVjdCwgY29udGVudHNTY2FsZSk7CisgICAgbV9w
aWN0dXJlLmVuZFJlY29yZGluZygpOworfQorCit2b2lkIFNrUGljdHVyZUNhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXI6OmRyYXdQaWN0dXJlKFNrQ2FudmFzKiBjYW52YXMpCit7CisgICAgVFJBQ0Vf
RVZFTlQoIlNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmRyYXdQaWN0dXJlIiwg
dGhpcywgMCk7CisgICAgY2FudmFzLT5kcmF3UGljdHVyZShtX3BpY3R1cmUpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKFNLSUEpCisjZW5kaWYgLy8gVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0MGY4YjAzZWE0ZjI3MzlhOTc1
NDM4NjdhYzdlYjE1NDAzMGQwYzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBTa1BpY3R1cmVDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyX2gKKyNkZWZpbmUgU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcl9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaWYgVVNFKFNL
SUEpCisKKyNpbmNsdWRlICJDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCisjaW5jbHVkZSAi
U2tQaWN0dXJlLmgiCisKK2NsYXNzIFNrQ2FudmFzOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIExheWVyUGFpbnRlckNocm9taXVtOworCitjbGFzcyBTa1BpY3R1cmVDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyIDogcHVibGljIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIgeworcHVi
bGljOgorICAgIHZpcnR1YWwgflNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoKTsK
KworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOworCisgICAgdmlydHVhbCB2
b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50
U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMsIGZsb2F0IGNvbnRlbnRzU2NhbGUpOwor
ICAgIHZvaWQgZHJhd1BpY3R1cmUoU2tDYW52YXMqKTsKKworcHJpdmF0ZToKKyAgICBTa1BpY3R1
cmUgbV9waWN0dXJlOyAvLyBSZWNvcmRpbmcgY2FudmFzLgorfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorI2VuZGlmIC8vIFVTRShTS0lBKQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyNlbmRpZiAvLyBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDg3ZGVjMGI5OGFjNmRhZTgx
OTk4YmY1ODU0OTg2NDQ2MDAxMTU4ZTIuLjQ3NDVjZjNmZmRjNzZlNzhjOTUyMjY4ZTNhMWExZjJm
MzI1N2ViZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcApAQCAtNTIsMTcgKzUy
LDIwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFVwZGF0YWJsZVRpbGUgOiBwdWJsaWMg
Q0NMYXllclRpbGluZ0RhdGE6OlRpbGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFVwZGF0
YWJsZVRpbGUpOwogcHVibGljOgotICAgIGV4cGxpY2l0IFVwZGF0YWJsZVRpbGUoUGFzc093blB0
cjxNYW5hZ2VkVGV4dHVyZT4gdGV4KSA6IG1fdGV4KHRleCkgeyB9CisgICAgZXhwbGljaXQgVXBk
YXRhYmxlVGlsZShQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IHRleHR1
cmUpIDogbV90ZXh0dXJlKHRleHR1cmUpIHsgfQogCi0gICAgTWFuYWdlZFRleHR1cmUqIHRleHR1
cmUoKSB7IHJldHVybiBtX3RleC5nZXQoKTsgfQorICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleHR1cmUuZ2V0KCk7IH0KKyAgICBNYW5hZ2Vk
VGV4dHVyZSogbWFuYWdlZFRleHR1cmUoKSB7IHJldHVybiBtX3RleHR1cmUtPnRleHR1cmUoKTsg
fQogCiAgICAgYm9vbCBkaXJ0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2RpcnR5TGF5ZXJSZWN0Lmlz
RW1wdHkoKTsgfQogICAgIHZvaWQgY2xlYXJEaXJ0eSgpIHsgbV9kaXJ0eUxheWVyUmVjdCA9IElu
dFJlY3QoKTsgfQogCiAgICAgLy8gTGF5ZXItc3BhY2UgZGlydHkgcmVjdGFuZ2xlIHRoYXQgbmVl
ZHMgdG8gYmUgcmVwYWludGVkLgogICAgIEludFJlY3QgbV9kaXJ0eUxheWVyUmVjdDsKKyAgICAv
LyBDb250ZW50LXNwYWNlIHJlY3RhbmdsZSB0aGF0IG5lZWRzIHRvIGJlIHVwZGF0ZWQuCisgICAg
SW50UmVjdCBtX3VwZGF0ZVJlY3Q7CiBwcml2YXRlOgotICAgIE93blB0cjxNYW5hZ2VkVGV4dHVy
ZT4gbV90ZXg7CisgICAgT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IG1fdGV4
dHVyZTsKIH07CiAKIFRpbGVkTGF5ZXJDaHJvbWl1bTo6VGlsZWRMYXllckNocm9taXVtKENDTGF5
ZXJEZWxlZ2F0ZSogZGVsZWdhdGUpCkBAIC0xNzMsMjIgKzE3NiwxOSBAQCB2b2lkIFRpbGVkTGF5
ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCwgQwogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKICAg
ICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewogICAgICAgICAgICAg
VXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKKworICAgICAgICAgICAgLy8gUmVx
dWlyZWQgdGlsZXMgYXJlIGNyZWF0ZWQgaW4gcHJlcGFyZVRvVXBkYXRlKCkuIEEgdGlsZSBzaG91
bGQKKyAgICAgICAgICAgIC8vIG5ldmVyIGJlIHJlbW92ZWQgYmV0d2VlbiB0aGUgY2FsbCB0byBw
cmVwYXJlVG9VcGRhdGUoKSBhbmQgdGhlCisgICAgICAgICAgICAvLyBjYWxsIHRvIHVwZGF0ZUNv
bXBvc2l0b3JSZXNvdXJjZXMoKS4KICAgICAgICAgICAgIGlmICghdGlsZSkKLSAgICAgICAgICAg
ICAgICB0aWxlID0gY3JlYXRlVGlsZShpLCBqKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCF0aWxl
LT5kaXJ0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIENS
QVNIKCk7CiAKLSAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBwYWdlLXNwYWNlIHJlY3RhbmdsZSB0
byBjb3B5IGZyb20uCi0gICAgICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSBtX3RpbGVyLT50
aWxlQ29udGVudFJlY3QodGlsZSk7Ci0gICAgICAgICAgICBjb25zdCBJbnRQb2ludCBhbmNob3Ig
PSBzb3VyY2VSZWN0LmxvY2F0aW9uKCk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmludGVyc2Vj
dChtX3RpbGVyLT5sYXllclJlY3RUb0NvbnRlbnRSZWN0KHRpbGUtPm1fZGlydHlMYXllclJlY3Qp
KTsKLSAgICAgICAgICAgIC8vIFBhaW50IHJlY3Qgbm90IGd1YXJhbnRlZWQgdG8gbGluZSB1cCBv
biB0aWxlIGJvdW5kYXJpZXMsIHNvCi0gICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCBzb3Vy
Y2VSZWN0IGRvZXNuJ3QgZXh0ZW5kIG91dHNpZGUgb2YgaXQuCi0gICAgICAgICAgICBzb3VyY2VS
ZWN0LmludGVyc2VjdChtX3BhaW50UmVjdCk7Ci0gICAgICAgICAgICBpZiAoc291cmNlUmVjdC5p
c0VtcHR5KCkpCisgICAgICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB0aWxlLT5tX3VwZGF0
ZVJlY3Q7CisgICAgICAgICAgICBpZiAodGlsZS0+bV91cGRhdGVSZWN0LmlzRW1wdHkoKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgQVNTRVJUKHRpbGUtPnRleHR1
cmUoKS0+aXNSZXNlcnZlZCgpKTsKKyAgICAgICAgICAgIEFTU0VSVCh0aWxlLT5tYW5hZ2VkVGV4
dHVyZSgpLT5pc1Jlc2VydmVkKCkpOworICAgICAgICAgICAgY29uc3QgSW50UG9pbnQgYW5jaG9y
ID0gbV90aWxlci0+dGlsZUNvbnRlbnRSZWN0KHRpbGUpLmxvY2F0aW9uKCk7CiAKICAgICAgICAg
ICAgIC8vIENhbGN1bGF0ZSB0aWxlLXNwYWNlIHJlY3RhbmdsZSB0byB1cGxvYWQgaW50by4KICAg
ICAgICAgICAgIEludFJlY3QgZGVzdFJlY3QoSW50UG9pbnQoc291cmNlUmVjdC54KCkgLSBhbmNo
b3IueCgpLCBzb3VyY2VSZWN0LnkoKSAtIGFuY2hvci55KCkpLCBzb3VyY2VSZWN0LnNpemUoKSk7
CkBAIC0yMDgsMTMgKzIwOCwxMiBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgQwogICAgICAgICAg
ICAgaWYgKHBhaW50T2Zmc2V0LnkoKSArIGRlc3RSZWN0LmhlaWdodCgpID4gbV9wYWludFJlY3Qu
aGVpZ2h0KCkpCiAgICAgICAgICAgICAgICAgQ1JBU0goKTsKIAotICAgICAgICAgICAgdGlsZS0+
dGV4dHVyZSgpLT5iaW5kVGV4dHVyZShjb250ZXh0LCB1cGRhdGVyLmFsbG9jYXRvcigpKTsKKyAg
ICAgICAgICAgIHRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPmJpbmRUZXh0dXJlKGNvbnRleHQsIHVw
ZGF0ZXIuYWxsb2NhdG9yKCkpOwogICAgICAgICAgICAgY29uc3QgR0MzRGludCBmaWx0ZXIgPSBt
X3RpbGVyLT5oYXNCb3JkZXJUZXhlbHMoKSA/IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIgOiBH
cmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVDsKICAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBmaWx0ZXIpKTsKICAgICAgICAgICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBmaWx0ZXIpKTsK
IAotICAgICAgICAgICAgdXBkYXRlci5hcHBlbmQodGlsZS0+dGV4dHVyZSgpLCB0ZXh0dXJlVXBk
YXRlcigpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7Ci0gICAgICAgICAgICB0aWxlLT5jbGVhckRp
cnR5KCk7CisgICAgICAgICAgICB1cGRhdGVyLmFwcGVuZCh0aWxlLT50ZXh0dXJlKCksIHNvdXJj
ZVJlY3QsIGRlc3RSZWN0KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjUxLDEwICsyNTAsMTAg
QEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwq
IGxheWVyKQogICAgICAgICBpbnQgaSA9IGl0ZXItPmZpcnN0LmZpcnN0OwogICAgICAgICBpbnQg
aiA9IGl0ZXItPmZpcnN0LnNlY29uZDsKICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0
YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT5zZWNvbmQuZ2V0KCkpOwotICAgICAgICBp
ZiAoIXRpbGUtPnRleHR1cmUoKS0+aXNWYWxpZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1
cmVGb3JtYXQpKQorICAgICAgICBpZiAoIXRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPmlzVmFsaWQo
bV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgIHRpbGVkTGF5ZXItPnN5bmNUZXh0dXJlSWQoaSwgaiwgdGlsZS0+dGV4
dHVyZSgpLT50ZXh0dXJlSWQoKSk7CisgICAgICAgIHRpbGVkTGF5ZXItPnN5bmNUZXh0dXJlSWQo
aSwgaiwgdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOwogICAgIH0KIH0KIApA
QCAtMjcyLDcgKzI3MSw3IEBAIFVwZGF0YWJsZVRpbGUqIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dGls
ZUF0KGludCBpLCBpbnQgaikgY29uc3QKIAogVXBkYXRhYmxlVGlsZSogVGlsZWRMYXllckNocm9t
aXVtOjpjcmVhdGVUaWxlKGludCBpLCBpbnQgaikKIHsKLSAgICBSZWZQdHI8VXBkYXRhYmxlVGls
ZT4gdGlsZSA9IGFkb3B0UmVmKG5ldyBVcGRhdGFibGVUaWxlKE1hbmFnZWRUZXh0dXJlOjpjcmVh
dGUodGV4dHVyZU1hbmFnZXIoKSkpKTsKKyAgICBSZWZQdHI8VXBkYXRhYmxlVGlsZT4gdGlsZSA9
IGFkb3B0UmVmKG5ldyBVcGRhdGFibGVUaWxlKHRleHR1cmVVcGRhdGVyKCktPmNyZWF0ZVRleHR1
cmUodGV4dHVyZU1hbmFnZXIoKSkpKTsKICAgICBtX3RpbGVyLT5hZGRUaWxlKHRpbGUsIGksIGop
OwogICAgIHRpbGUtPm1fZGlydHlMYXllclJlY3QgPSBtX3RpbGVyLT50aWxlTGF5ZXJSZWN0KHRp
bGUuZ2V0KCkpOwogCkBAIC0zMjAsMTAgKzMxOSwxMCBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1
bTo6cHJvdGVjdFRpbGVUZXh0dXJlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICBm
b3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CiAgICAgICAgIGZvciAoaW50IGkg
PSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKICAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRp
bGUgPSB0aWxlQXQoaSwgaik7Ci0gICAgICAgICAgICBpZiAoIXRpbGUgfHwgIXRpbGUtPnRleHR1
cmUoKS0+aXNWYWxpZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKQorICAg
ICAgICAgICAgaWYgKCF0aWxlIHx8ICF0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5pc1ZhbGlkKG1f
dGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgICAgIHRpbGUtPnRleHR1cmUoKS0+cmVzZXJ2ZShtX3RpbGVyLT50
aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpOworICAgICAgICAgICAgdGlsZS0+bWFuYWdlZFRl
eHR1cmUoKS0+cmVzZXJ2ZShtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpOwog
ICAgICAgICB9CiAgICAgfQogfQpAQCAtMzM0LDYgKzMzMywxMiBAQCB2b2lkIFRpbGVkTGF5ZXJD
aHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogCiAg
ICAgbV9za2lwc0RyYXcgPSBmYWxzZTsKIAorICAgIC8vIFJlc2V0IG1fdXBkYXRlUmVjdCBmb3Ig
YWxsIHRpbGVzLgorICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+
dGlsZXMoKS5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBz
dGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAg
dGlsZS0+bV91cGRhdGVSZWN0ID0gSW50UmVjdCgpOworICAgIH0KKwogICAgIGlmIChjb250ZW50
UmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0ID0gSW50UmVj
dCgpOwogICAgICAgICByZXR1cm47CkBAIC0zNTcsMTAgKzM2MiwxMCBAQCB2b2lkIFRpbGVkTGF5
ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQog
ICAgICAgICAgICAgaWYgKCF0aWxlKQogICAgICAgICAgICAgICAgIHRpbGUgPSBjcmVhdGVUaWxl
KGksIGopOwogCi0gICAgICAgICAgICBpZiAoIXRpbGUtPnRleHR1cmUoKS0+aXNWYWxpZChtX3Rp
bGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKQorICAgICAgICAgICAgaWYgKCF0aWxl
LT5tYW5hZ2VkVGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVy
ZUZvcm1hdCkpCiAgICAgICAgICAgICAgICAgdGlsZS0+bV9kaXJ0eUxheWVyUmVjdCA9IG1fdGls
ZXItPnRpbGVMYXllclJlY3QodGlsZSk7CiAKLSAgICAgICAgICAgIGlmICghdGlsZS0+dGV4dHVy
ZSgpLT5yZXNlcnZlKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkpIHsKKyAg
ICAgICAgICAgIGlmICghdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+cmVzZXJ2ZShtX3RpbGVyLT50
aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKSB7CiAgICAgICAgICAgICAgICAgbV9za2lwc0Ry
YXcgPSB0cnVlOwogICAgICAgICAgICAgICAgIGNsZWFudXBSZXNvdXJjZXMoKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CkBAIC0zODUsNiArMzkwLDM2IEBAIHZvaWQgVGlsZWRMYXllckNocm9t
aXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgLy8g
c28gd2UgZ3JhYiBhIGxvY2FsIHJlZmVyZW5jZSBoZXJlIHRvIGhvbGQgdGhlIHVwZGF0ZXIgYWxp
dmUgdW50aWwgdGhlIHBhaW50IGNvbXBsZXRlcy4KICAgICBSZWZQdHI8TGF5ZXJUZXh0dXJlVXBk
YXRlcj4gcHJvdGVjdG9yKHRleHR1cmVVcGRhdGVyKCkpOwogICAgIHRleHR1cmVVcGRhdGVyKCkt
PnByZXBhcmVUb1VwZGF0ZShtX3BhaW50UmVjdCwgbV90aWxlci0+dGlsZVNpemUoKSwgbV90aWxl
ci0+aGFzQm9yZGVyVGV4ZWxzKCksIGNvbnRlbnRzU2NhbGUoKSk7CisgICAgbV90aWxlci0+Y29u
dGVudFJlY3RUb1RpbGVJbmRpY2VzKG1fcmVxdWVzdGVkVXBkYXRlUmVjdCwgbGVmdCwgdG9wLCBy
aWdodCwgYm90dG9tKTsKKyAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7
CisgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKKyAgICAgICAg
ICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CisKKyAgICAgICAgICAgIC8v
IFRpbGVzIGFyZSBjcmVhdGVkIGJlZm9yZSBwcmVwYXJlVG9VcGRhdGUoKSBpcyBjYWxsZWQuCisg
ICAgICAgICAgICBpZiAoIXRpbGUpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKworICAgICAg
ICAgICAgaWYgKCF0aWxlLT5kaXJ0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICAvLyBDYWxjdWxhdGUgY29udGVudC1zcGFjZSByZWN0YW5nbGUgdG8gY29weSBm
cm9tLgorICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gbV90aWxlci0+dGlsZUNvbnRl
bnRSZWN0KHRpbGUpOworICAgICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QobV90aWxlci0+
bGF5ZXJSZWN0VG9Db250ZW50UmVjdCh0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0KSk7CisgICAgICAg
ICAgICAvLyBQYWludCByZWN0IG5vdCBndWFyYW50ZWVkIHRvIGxpbmUgdXAgb24gdGlsZSBib3Vu
ZGFyaWVzLCBzbworICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgc291cmNlUmVjdCBkb2Vz
bid0IGV4dGVuZCBvdXRzaWRlIG9mIGl0LgorICAgICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNl
Y3QobV9wYWludFJlY3QpOworCisgICAgICAgICAgICAvLyB1cGRhdGVDb21wb3NpdG9yUmVzb3Vy
Y2VzKCkgdXNlcyBtX3VwZGF0ZVJlY3QgdG8gZGV0ZXJtaW5lCisgICAgICAgICAgICAvLyB0aGUg
dGlsZXMgdG8gdXBkYXRlIHNvIHdlIGNhbiBjbGVhciB0aGUgZGlydHkgcmVjdGFuZ2xlIGhlcmUu
CisgICAgICAgICAgICB0aWxlLT5jbGVhckRpcnR5KCk7CisKKyAgICAgICAgICAgIHRpbGUtPm1f
dXBkYXRlUmVjdCA9IHNvdXJjZVJlY3Q7CisgICAgICAgICAgICBpZiAoc291cmNlUmVjdC5pc0Vt
cHR5KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHRpbGUtPnRl
eHR1cmUoKS0+cHJlcGFyZVJlY3Qoc291cmNlUmVjdCk7CisgICAgICAgIH0KKyAgICB9CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAKaW5kZXggOTg0MzcwZWRhOTVjNTIz
ZjU5ZWU1NWM4N2FjODI4NzFlMDJhNzNiYi4uODc0NWM0ZWEwYTcxMGJkZTE4ZWRlMTgyMGYzMTRm
ZGI4Y2M4NzJhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAKQEAgLTQ4LDE0
ICs0OCwxMiBAQCBDQ1RleHR1cmVVcGRhdGVyOjp+Q0NUZXh0dXJlVXBkYXRlcigpCiB7CiB9CiAK
LXZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6YXBwZW5kKE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBM
YXllclRleHR1cmVVcGRhdGVyKiB1cGRhdGVyLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBj
b25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6YXBwZW5kKExh
eWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQogewogICAgIEFTU0VSVCh0ZXh0dXJlKTsK
LSAgICBBU1NFUlQodXBkYXRlcik7CiAKICAgICBVcGRhdGVFbnRyeSBlbnRyeTsKICAgICBlbnRy
eS5tX3RleHR1cmUgPSB0ZXh0dXJlOwotICAgIGVudHJ5Lm1fdXBkYXRlciA9IHVwZGF0ZXI7CiAg
ICAgZW50cnkubV9zb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKICAgICBlbnRyeS5tX2Rlc3RSZWN0
ID0gZGVzdFJlY3Q7CiAgICAgbV9lbnRyaWVzLmFwcGVuZChlbnRyeSk7CkBAIC03MSw3ICs2OSw3
IEBAIGJvb2wgQ0NUZXh0dXJlVXBkYXRlcjo6dXBkYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBzaXplX3QgY291bnQpCiAgICAgc2l6ZV90IG1heEluZGV4ID0gbWluKG1fZW50cnlJbmRl
eCArIGNvdW50LCBtX2VudHJpZXMuc2l6ZSgpKTsKICAgICBmb3IgKDsgbV9lbnRyeUluZGV4IDwg
bWF4SW5kZXg7ICsrbV9lbnRyeUluZGV4KSB7CiAgICAgICAgIFVwZGF0ZUVudHJ5JiBlbnRyeSA9
IG1fZW50cmllc1ttX2VudHJ5SW5kZXhdOwotICAgICAgICBlbnRyeS5tX3VwZGF0ZXItPnVwZGF0
ZVRleHR1cmVSZWN0KGNvbnRleHQsIG1fYWxsb2NhdG9yLCBlbnRyeS5tX3RleHR1cmUsIGVudHJ5
Lm1fc291cmNlUmVjdCwgZW50cnkubV9kZXN0UmVjdCk7CisgICAgICAgIGVudHJ5Lm1fdGV4dHVy
ZS0+dXBkYXRlUmVjdChjb250ZXh0LCBtX2FsbG9jYXRvciwgZW50cnkubV9zb3VyY2VSZWN0LCBl
bnRyeS5tX2Rlc3RSZWN0KTsKICAgICB9CiAKICAgICBpZiAobWF4SW5kZXggPCBtX2VudHJpZXMu
c2l6ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oCmluZGV4IDE3YjhhYWZhMDZjZTdh
NmQyMGEwZTVmYjRjOTE0ZTcyZmM5Mzk0YTEuLmJmNzlhYzljMmUyMmVmYzVlZGE5YTY0ODI5ZTJl
ZmNjZWMxNWJiMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgKQEAgLTI3LDEzICsy
NywxMiBAQAogI2RlZmluZSBDQ1RleHR1cmVVcGRhdGVyX2gKIAogI2luY2x1ZGUgIkludFJlY3Qu
aCIKKyNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwot
Y2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlcjsKLWNsYXNzIE1hbmFnZWRUZXh0dXJlOwogY2xhc3Mg
VGV4dHVyZUFsbG9jYXRvcjsKIAogY2xhc3MgQ0NUZXh0dXJlVXBkYXRlciB7CkBAIC00MSw3ICs0
MCw3IEBAIHB1YmxpYzoKICAgICBDQ1RleHR1cmVVcGRhdGVyKFRleHR1cmVBbGxvY2F0b3IqKTsK
ICAgICB+Q0NUZXh0dXJlVXBkYXRlcigpOwogCi0gICAgdm9pZCBhcHBlbmQoTWFuYWdlZFRleHR1
cmUqLCBMYXllclRleHR1cmVVcGRhdGVyKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgIHZvaWQgYXBwZW5kKExheWVyVGV4dHVyZVVwZGF0
ZXI6OlRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBk
ZXN0UmVjdCk7CiAKICAgICBib29sIGhhc01vcmVVcGRhdGVzKCkgY29uc3Q7CiAKQEAgLTU0LDgg
KzUzLDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHN0cnVjdCBVcGRhdGVFbnRyeSB7Ci0g
ICAgICAgIE1hbmFnZWRUZXh0dXJlKiBtX3RleHR1cmU7Ci0gICAgICAgIExheWVyVGV4dHVyZVVw
ZGF0ZXIqIG1fdXBkYXRlcjsKKyAgICAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSog
bV90ZXh0dXJlOwogICAgICAgICBJbnRSZWN0IG1fc291cmNlUmVjdDsKICAgICAgICAgSW50UmVj
dCBtX2Rlc3RSZWN0OwogICAgIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117014</attachid>
            <date>2011-11-29 11:59:31 -0800</date>
            <delta_ts>2011-11-30 21:17:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71388-20111129145929.patch</filename>
            <type>text/plain</type>
            <size>72826</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNDAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTdjMjNkMzNkMTU4MWY0
MDJlMTEwNjEyMjk4YWQ4Y2M2ZTA2OTAyNy4uMDkwOThlNWY2YzUzOWViNTM5NmU0N2Y3ZjFkYmU2
MjUwMDVlMWMxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg5IEBACisyMDExLTExLTI5ICBEYXZp
ZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBB
ZGQgc3VwcG9ydCBmb3IgcGFpbnRpbmcgaW50byBhbiBTa1BpY3R1cmUgYW5kIHRoZW4gcmFzdGVy
aXppbmcgaW50byB0aWxlLXNpemVkIGNodW5rcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMzg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIFVwZGF0YWJsZVRleHR1cmUgY2xhc3MsIHdoaWNoIGFs
bG93cyB0ZXh0dXJlIHVwZGF0ZXIgdG8KKyAgICAgICAgYWxsb2NhdGUgdGlsZSBzcGVjaWZpYyBy
ZXNvdXJjZXMgYW5kIHBhaW50IHRpbGVzIHNlcGFyYXRlbHkuCisgICAgICAgIFJlbmFtZSB0ZXh0
dXJlIHVwbG9hZGVyIGNsYXNzZXMgYW5kIG1vdmUgdGhlbSB0byBzZXBhcmF0ZSBmaWxlcy4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMuIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0
dXJlOjp+VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyOjpUZXh0dXJlOjp1cGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpCaXRtYXBDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXI6On5CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZVRleHR1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6c2FtcGxlZFRleGVs
Rm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyOjp1cGRhdGVUZXh0dXJlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRl
eHR1cmVVcGRhdGVyLmguCisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyOjpUZXh0dXJlOjp0ZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpvcmllbnRhdGlvbik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGV4dHVyZVVwZGF0ZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXI6OkNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6fkNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cGFpbnRDb250ZW50
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmguCisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyOjpjb250ZW50UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
QnVmZmVyOjpGcmFtZUJ1ZmZlcjo6RnJhbWVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVCdWZmZXI6OkZyYW1lQnVmZmVyOjp+RnJhbWVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVCdWZmZXI6OkZyYW1lQnVmZmVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6On5UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6
dXBkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1
ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OkZyYW1lQnVmZmVyU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUJ1
ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6On5GcmFtZUJ1ZmZlclNrUGlj
dHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVC
dWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGVUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6c2FtcGxlZFRleGVsRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVm
ZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBkYXRlVGV4dHVyZVJlY3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmguCisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXI6OlRleHR1cmU6OnRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lQnVm
ZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6b3JpZW50YXRpb24pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OlRl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0
dXJlOjp1cGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZTo6dGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VM
YXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6On5UZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6cHJlcGFyZVJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRh
dGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVw
ZGF0ZXJDYW52YXMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oLgorICAgICAgICAoV2ViQ29yZTo6U2tQaWN0dXJl
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcik6CisgICAgICAgIChXZWJDb3JlOjpTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyOjp+U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJD
b3JlOjpTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
ZHJhd1BpY3R1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGlj
dHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpVcGRhdGFibGVUaWxlOjpVcGRhdGFibGVUaWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlVwZGF0YWJsZVRpbGU6OnRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
VXBkYXRhYmxlVGlsZTo6bWFuYWdlZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRM
YXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6
VGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VGlsZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXI6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RleHR1cmVVcGRhdGVyOjp1cGRhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaDoKKwogMjAxMS0xMS0yOSAgT2xpdmVyIEh1bnQg
IDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmVydCB0aGF0IGxhc3QgY2hhbmdlLCBh
cHBhcmVudGx5IGl0IGRlc3Ryb3lzIGV2ZXJ5dGhpbmcgaW4gdGhlIHdvcmxkLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwppbmRleCAwODkyOWM0MGY3MWE2ZDQ1YjkyNzUxODU1MTJjMTg2Y2ZjMjUw
YmJhLi42YTQ2ZDJhODhiMzAwYTI1ODMxYTNlODMwNWYxM2QxYWUxN2JlMGRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDExLTExLTI5ICBEYXZpZCBSZXZl
bWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBBZGQgc3Vw
cG9ydCBmb3IgcGFpbnRpbmcgaW50byBhbiBTa1BpY3R1cmUgYW5kIHRoZW4gcmFzdGVyaXppbmcg
aW50byB0aWxlLXNpemVkIGNodW5rcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTcxMzg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVHJhY2sgY2hhbmdlcyB0byB0ZXh0dXJlIHVwZGF0ZXIuCisKKyAgICAg
ICAgKiB0ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcDoKKyAgICAgICAgKFdURjo6RmFr
ZUxheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OlRleHR1cmUpOgorICAgICAgICAoV1RGOjpG
YWtlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6flRleHR1cmUpOgorICAgICAgICAoV1RG
OjpGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6dXBkYXRlUmVjdCk6CisgICAgICAg
IChXVEY6OkZha2VMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGVUZXh0dXJlKToKKwogMjAxMS0x
MS0yOSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5jb20+CiAKICAgICAgICAgV2Vi
IEluc3BlY3Rvcjogc3BsaXQgUHJlZmVyZW5jZXMgaW50byBQcmVmZXJlbmNlcyBhbmQgQ2FwYWJp
bGl0aWVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGM5MDBkYzUzOGIwZjI4ODZkNTgzMjA1ZTY4MDIy
YWUwYzNmMmFiMjQuLjdjMjZiOWJjZjllN2YyZjk3ZmM4YzdhN2JmZjJjZWYwNGFiMWRiZDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKQEAgLTM0ODMsMTAgKzM0ODMsMTQgQEAKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXR0ZXJuQ0cuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q2FudmFzMkRMYXllckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXgu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVy
Q2hyb21pdW0uY3BwJywKQEAgLTM1MDcsNiArMzUxMSw4IEBACiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFJlbmRlclN0eWxlLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9taXVtV2luLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFV0aWxzQ2hyb21pdW1XaW4u
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJT
a1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dlb21ldHJ5QmluZGluZy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dlb21ldHJ5QmluZGluZy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HbHlwaFBhZ2VUcmVlTm9kZUNocm9taXVtV2luLmNwcCcsCkBAIC0zNTMwLDgg
KzM1MzYsNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
VGV4dHVyZVN1YkltYWdlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oJywKLSAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcCcsCi0g
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRl
ckNhbnZhcy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ob25D
b21wb3NpdGVkQ29udGVudEhvc3QuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uaCcsCkBA
IC0zNTUzLDYgKzM1NTcsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1NoYWRlckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUxpbnV4LmNwcCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhY2tpbmdUZXh0dXJlQWxs
b2NhdG9yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1
cmVNYW5hZ2VyLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRkOTMxOTEzZjcwOTc3NjI2MzVmZTY0MTlkMzg3
NTFhZmY4NjE3OWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcApAQCAt
MCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiQml0bWFwQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlci5oIgorCisjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybUNvbG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQml0bWFwQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6VGV4dHVyZShCaXRtYXBDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlciwgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVy
ZT4gdGV4dHVyZSkKKyAgICA6IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUodGV4dHVyZSkK
KyAgICAsIG1fdGV4dHVyZVVwZGF0ZXIodGV4dHVyZVVwZGF0ZXIpCit7Cit9CisKK0JpdG1hcENh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6On5UZXh0dXJlKCkKK3sKK30KKwordm9p
ZCBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjp1cGRhdGVSZWN0KEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQoreworICAg
IHRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZVRleHR1cmVSZWN0KGNvbnRleHQsIGFsbG9jYXRvciwg
dGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7Cit9CisKK1Bhc3NSZWZQdHI8Qml0bWFw
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcj4gQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6Y3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIsIGJvb2wg
dXNlTWFwVGV4U3ViSW1hZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCaXRtYXBDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyKHBhaW50ZXIsIHVzZU1hcFRleFN1YkltYWdlKSk7Cit9CisK
K0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlciwgYm9vbCB1
c2VNYXBUZXhTdWJJbWFnZSkKKyAgICA6IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIocGFpbnRl
cikKKyAgICAsIG1fdGV4U3ViSW1hZ2UodXNlTWFwVGV4U3ViSW1hZ2UpCit7Cit9CisKK0JpdG1h
cENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6On5CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyKCkKK3sKK30KKworUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBC
aXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5h
Z2VyKiBtYW5hZ2VyKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZSh0aGlzLCBN
YW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKSk7Cit9CisKK0xheWVyVGV4dHVyZVVwZGF0
ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpz
YW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkKK3sKKyAgICAvLyBUaGUg
Y29tcG9uZW50IG9yZGVyIG1heSBiZSBiZ3JhIGlmIHdlIHVwbG9hZGVkIGJncmEgcGl4ZWxzIHRv
IHJnYmEgdGV4dHVyZXMuCisgICAgcmV0dXJuIFBsYXRmb3JtQ29sb3I6OnNhbWVDb21wb25lbnRP
cmRlcih0ZXh0dXJlRm9ybWF0KSA/CisgICAgICAgICAgICBMYXllclRleHR1cmVVcGRhdGVyOjpT
YW1wbGVkVGV4ZWxGb3JtYXRSR0JBIDogTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVs
Rm9ybWF0QkdSQTsKK30KKwordm9pZCBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpw
cmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUm
IHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzLCBmbG9hdCBjb250ZW50c1NjYWxlKQoreworICAg
IG1fdGV4U3ViSW1hZ2Uuc2V0U3ViSW1hZ2VTaXplKHRpbGVTaXplKTsKKworICAgIG1fY2FudmFz
LnJlc2l6ZShjb250ZW50UmVjdC5zaXplKCkpOworICAgIC8vIEFzc3VtcHRpb246IGlmIGEgdGls
ZXIgaXMgdXNpbmcgYm9yZGVyIHRleGVscywgdGhlbiBpdCBpcyBiZWNhdXNlIHRoZQorICAgIC8v
IGxheWVyIGlzIGxpa2VseSB0byBiZSBmaWx0ZXJlZCBvciB0cmFuc2Zvcm1lZC4gQmVjYXVzZSBv
ZiBpdCBtaWdodCBiZQorICAgIC8vIHRyYW5zZm9ybWVkLCBkcmF3IHRoZSB0ZXh0IGluIGdyYXlz
Y2FsZSBpbnN0ZWFkIG9mIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KKyAgICBQbGF0Zm9ybUNhbnZh
czo6UGFpbnRlcjo6VGV4dE9wdGlvbiB0ZXh0T3B0aW9uID0KKyAgICAgICAgYm9yZGVyVGV4ZWxz
ID8gUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OkdyYXlzY2FsZVRleHQgOiBQbGF0Zm9ybUNhbnZh
czo6UGFpbnRlcjo6U3VicGl4ZWxUZXh0OworICAgIFBsYXRmb3JtQ2FudmFzOjpQYWludGVyIGNh
bnZhc1BhaW50ZXIoJm1fY2FudmFzLCB0ZXh0T3B0aW9uKTsKKyAgICBwYWludENvbnRlbnRzKCpj
YW52YXNQYWludGVyLmNvbnRleHQoKSwgY29udGVudFJlY3QsIGNvbnRlbnRzU2NhbGUpOworfQor
Cit2b2lkIEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZVRleHR1cmVSZWN0
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3Is
IE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRSZWN0JiBkZXN0UmVjdCkKK3sKKyAgICBQbGF0Zm9ybUNhbnZhczo6QXV0b0xvY2tlciBs
b2NrZXIoJm1fY2FudmFzKTsKKworICAgIHRleHR1cmUtPmJpbmRUZXh0dXJlKGNvbnRleHQsIGFs
bG9jYXRvcik7CisgICAgbV90ZXhTdWJJbWFnZS51cGxvYWQobG9ja2VyLnBpeGVscygpLCBjb250
ZW50UmVjdCgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCwgdGV4dHVyZS0+Zm9ybWF0KCksIGNvbnRl
eHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3NTUyMmNiYWFhMzQxNDc1ODU2ZGI2Y2JlZGEzMTJj
MTQ5ZDg3YmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTAsMCAr
MSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKworI2lmbmRlZiBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
X2gKKyNkZWZpbmUgQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcl9oCisKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyLmgiCisjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybUNhbnZhcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExheWVyUGFp
bnRlckNocm9taXVtOworCisvLyBBIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIgd2l0aCBhbiBp
bnRlcm5hbCBiaXRtYXAuCitjbGFzcyBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyIDog
cHVibGljIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIgeworcHVibGljOgorICAgIGNsYXNzIFRl
eHR1cmUgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSB7CisgICAgcHVibGlj
OgorICAgICAgICBUZXh0dXJlKEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqLCBQYXNz
T3duUHRyPE1hbmFnZWRUZXh0dXJlPik7CisgICAgICAgIHZpcnR1YWwgflRleHR1cmUoKTsKKwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1
cmVBbGxvY2F0b3IqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBk
ZXN0UmVjdCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBCaXRtYXBDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIHsgcmV0dXJuIG1fdGV4dHVyZVVwZGF0ZXI7IH0K
KworICAgICAgICBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKiBtX3RleHR1cmVVcGRh
dGVyOworICAgIH07CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCaXRtYXBDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyPiBjcmVhdGUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4sIGJv
b2wgdXNlTWFwVGV4U3ViSW1hZ2UpOworICAgIHZpcnR1YWwgfkJpdG1hcENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXIoKTsKKworICAgIHZpcnR1YWwgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRh
dGVyOjpUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKik7CisgICAgdmlydHVh
bCBPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIHsgcmV0dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6
OkJvdHRvbVVwT3JpZW50YXRpb247IH0KKyAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBz
YW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCk7CisgICAgdmlydHVhbCB2
b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50
U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMsIGZsb2F0IGNvbnRlbnRzU2NhbGUpOwor
ICAgIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxs
b2NhdG9yKiwgTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRSZWN0JiBkZXN0UmVjdCk7CisKK3ByaXZhdGU6CisgICAgQml0bWFwQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcihQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiwgYm9vbCB1c2VN
YXBUZXhTdWJJbWFnZSk7CisKKyAgICBQbGF0Zm9ybUNhbnZhcyBtX2NhbnZhczsKKyAgICBMYXll
clRleHR1cmVTdWJJbWFnZSBtX3RleFN1YkltYWdlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNlbmRpZiAvLyBC
aXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWZhNjc4NTRjNmJkN2Y1MzgyYjUyYjBl
ZWZiYTEwMzE2NmZjMDhmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCkBAIC0w
LDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkxheWVyUGFp
bnRlckNocm9taXVtLmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OkNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcikKKyAgICA6IG1f
cGFpbnRlcihwYWludGVyKQoreworfQorCitDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjp+Q2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlcigpCit7Cit9CisKK3ZvaWQgQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0LCBmbG9hdCBjb250ZW50c1NjYWxlKQoreworICAgIGNvbnRleHQu
dHJhbnNsYXRlKC1jb250ZW50UmVjdC54KCksIC1jb250ZW50UmVjdC55KCkpOworICAgIHsKKyAg
ICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6OnBhaW50IiwgdGhp
cywgMCk7CisKKyAgICAgICAgSW50UmVjdCBzY2FsZWRDb250ZW50UmVjdCA9IGNvbnRlbnRSZWN0
OworCisgICAgICAgIGlmIChjb250ZW50c1NjYWxlICE9IDEuMCkgeworICAgICAgICAgICAgY29u
dGV4dC5zYXZlKCk7CisgICAgICAgICAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZShjb250ZW50
c1NjYWxlLCBjb250ZW50c1NjYWxlKSk7CisKKyAgICAgICAgICAgIEZsb2F0UmVjdCByZWN0ID0g
Y29udGVudFJlY3Q7CisgICAgICAgICAgICByZWN0LnNjYWxlKDEgLyBjb250ZW50c1NjYWxlKTsK
KyAgICAgICAgICAgIHNjYWxlZENvbnRlbnRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChyZWN0KTsK
KyAgICAgICAgfQorCisgICAgICAgIG1fcGFpbnRlci0+cGFpbnQoY29udGV4dCwgc2NhbGVkQ29u
dGVudFJlY3QpOworCisgICAgICAgIGlmIChjb250ZW50c1NjYWxlICE9IDEuMCkKKyAgICAgICAg
ICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgIH0KKyAgICBtX2NvbnRlbnRSZWN0ID0gY29udGVu
dFJlY3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYThmZWZmMzQyMmIxYjg1MzBiOGY2ODlmZjJjNTY2NzY2MGJlZDVjZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAtMCwwICsxLDU3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
CisjaWZuZGVmIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXJfaAorI2RlZmluZSBDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwor
I2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIExheWVyUGFpbnRlckNocm9taXVtOwor
CisvLyBBIExheWVyVGV4dHVyZVVwZGF0ZXIgd2l0aCBhbiBpbnRlcm5hbCBjYW52YXMuCitjbGFz
cyBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXIg
eworcHVibGljOgorICAgIHZpcnR1YWwgfkNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoKTsKKwor
cHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOworCisgICAgdm9pZCBwYWludENvbnRlbnRzKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBmbG9hdCBjb250ZW50
c1NjYWxlKTsKKyAgICBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGVudFJlY3Q7IH0KKworcHJpdmF0ZToKKyAgICBJbnRSZWN0IG1fY29udGVudFJlY3Q7
CisgICAgT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBtX3BhaW50ZXI7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorI2VuZGlmIC8vIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXJfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVu
dExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDllYjFkNzk5ZjZkOTFlY2VjNjc5ODEwNmVjNjAyN2Ji
NDFlNTI1MjAuLmVjMzZhMmQ0MTFmM2NmMGRmOWQ0NGU3YmYxN2I4MDZiYTU3YmMxOWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTM0LDkgKzM0LDEwIEBACiAKICNp
bmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiQml0bWFwQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorI2luY2x1ZGUgIkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVt
LmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCi0jaW5jbHVkZSAiTGF5ZXJU
ZXh0dXJlVXBkYXRlckNhbnZhcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgogI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5o
PgpAQCAtMTIwLDEyICsxMjEsMTIgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
VGV4dHVyZVVwZGF0ZXIoY29uc3QgQ0NMYXllclRyZWVIb3N0KiBob3N0KQogewogI2lmIFVTRShT
S0lBKQogICAgIGlmIChob3N0LT5zZXR0aW5ncygpLmFjY2VsZXJhdGVQYWludGluZykgewotICAg
ICAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6Y3Jl
YXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX2RlbGVnYXRlKSk7CisgICAgICAgIG1f
dGV4dHVyZVVwZGF0ZXIgPSBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXI6OmNyZWF0ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUobV9kZWxlZ2F0ZSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIFVTRShTS0lBKQogCi0gICAgbV90ZXh0
dXJlVXBkYXRlciA9IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNyZWF0ZShDb250ZW50TGF5
ZXJQYWludGVyOjpjcmVhdGUobV9kZWxlZ2F0ZSksIGhvc3QtPmxheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXMoKS51c2luZ01hcFN1Yik7CisgICAgbV90ZXh0dXJlVXBkYXRlciA9IEJpdG1hcENhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUo
bV9kZWxlZ2F0ZSksIGhvc3QtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ01hcFN1
Yik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZl
clNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYyZDdl
MmRkZGFhNmZkOTlmYmU2MDNjM2I4ZTM3M2U5OThhMzM4MzUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9GcmFtZUJ1ZmZlclNrUGlj
dHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCkBAIC0wLDAgKzEsMTYyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisjaWYgVVNFKFNLSUEpCisKKyNpbmNsdWRlICJGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKworI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVt
LmgiCisjaW5jbHVkZSAiU2tDYW52YXMuaCIKKyNpbmNsdWRlICJTa0dwdURldmljZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIEZyYW1lQnVmZmVyIHsK
K3B1YmxpYzoKKyAgICBGcmFtZUJ1ZmZlcigpOworICAgIH5GcmFtZUJ1ZmZlcigpOworCisgICAg
U2tDYW52YXMqIGluaXRpYWxpemUoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9y
KiwgTWFuYWdlZFRleHR1cmUqKTsKKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQzRCog
bV9jb250ZXh0OworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mYm87CisgICAgT3duUHRyPFNrQ2Fu
dmFzPiBtX2NhbnZhczsKK307CisKK0ZyYW1lQnVmZmVyOjpGcmFtZUJ1ZmZlcigpCisgICAgOiBt
X2NvbnRleHQoMCkKKyAgICAsIG1fZmJvKDApCit7Cit9CisKK0ZyYW1lQnVmZmVyOjp+RnJhbWVC
dWZmZXIoKQoreworICAgIG1fY2FudmFzLmNsZWFyKCk7CisKKyAgICBpZiAobV9mYm8pCisgICAg
ICAgIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9mYm8pOworfQorCitTa0NhbnZhcyog
RnJhbWVCdWZmZXI6OmluaXRpYWxpemUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1
cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUpCit7CisgICAg
bV9jb250ZXh0ID0gY29udGV4dDsKKyAgICBtX2ZibyA9IG1fY29udGV4dC0+Y3JlYXRlRnJhbWVi
dWZmZXIoKTsKKyAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICB0ZXh0dXJlLT5mcmFtZWJ1ZmZlclRleHR1cmUy
RChtX2NvbnRleHQsIGFsbG9jYXRvcik7CisKKyAgICAvLyBDcmVhdGUgYSBza2lhIGdwdSBjYW52
YXMuCisgICAgR3JDb250ZXh0KiBnckNvbnRleHQgPSBtX2NvbnRleHQtPmdyQ29udGV4dCgpOwor
ICAgIEludFNpemUgY2FudmFzU2l6ZSA9IHRleHR1cmUtPnNpemUoKTsKKyAgICBHclBsYXRmb3Jt
U3VyZmFjZURlc2MgdGFyZ2V0RGVzYzsKKyAgICB0YXJnZXREZXNjLnJlc2V0KCk7CisgICAgdGFy
Z2V0RGVzYy5mU3VyZmFjZVR5cGUgPSBrVGV4dHVyZVJlbmRlclRhcmdldF9HclBsYXRmb3JtU3Vy
ZmFjZVR5cGU7CisgICAgdGFyZ2V0RGVzYy5mUmVuZGVyVGFyZ2V0RmxhZ3MgPSBrTm9uZV9HclBs
YXRmb3JtUmVuZGVyVGFyZ2V0RmxhZ0JpdDsKKyAgICB0YXJnZXREZXNjLmZXaWR0aCA9IGNhbnZh
c1NpemUud2lkdGgoKTsKKyAgICB0YXJnZXREZXNjLmZIZWlnaHQgPSBjYW52YXNTaXplLmhlaWdo
dCgpOworICAgIHRhcmdldERlc2MuZkNvbmZpZyA9IGtSR0JBXzg4ODhfR3JQaXhlbENvbmZpZzsK
KyAgICB0YXJnZXREZXNjLmZTdGVuY2lsQml0cyA9IDg7CisgICAgdGFyZ2V0RGVzYy5mUGxhdGZv
cm1UZXh0dXJlID0gdGV4dHVyZS0+dGV4dHVyZUlkKCk7CisgICAgdGFyZ2V0RGVzYy5mUGxhdGZv
cm1SZW5kZXJUYXJnZXQgPSBtX2ZibzsKKyAgICBTa0F1dG9UVW5yZWY8R3JUZXh0dXJlPiB0YXJn
ZXQoc3RhdGljX2Nhc3Q8R3JUZXh0dXJlKj4oZ3JDb250ZXh0LT5jcmVhdGVQbGF0Zm9ybVN1cmZh
Y2UodGFyZ2V0RGVzYykpKTsKKyAgICBTa0F1dG9UVW5yZWY8U2tEZXZpY2U+IGRldmljZShuZXcg
U2tHcHVEZXZpY2UoZ3JDb250ZXh0LCB0YXJnZXQuZ2V0KCkpKTsKKyAgICBtX2NhbnZhcyA9IGFk
b3B0UHRyKG5ldyBTa0NhbnZhcyhkZXZpY2UuZ2V0KCkpKTsKKworICAgIHJldHVybiBtX2NhbnZh
cy5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UKKworRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpUZXh0dXJlKEZyYW1lQnVmZmVyU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIsIFBhc3NPd25QdHI8
TWFuYWdlZFRleHR1cmU+IHRleHR1cmUpCisgICAgOiBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0
dXJlKHRleHR1cmUpCisgICAgLCBtX3RleHR1cmVVcGRhdGVyKHRleHR1cmVVcGRhdGVyKQorewor
fQorCitGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmU6On5UZXh0dXJlKCkKK3sKK30KKwordm9pZCBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit7CisgICAgdGV4dHVyZVVwZGF0ZXIo
KS0+dXBkYXRlVGV4dHVyZVJlY3QoY29udGV4dCwgYWxsb2NhdG9yLCB0ZXh0dXJlKCksIHNvdXJj
ZVJlY3QsIGRlc3RSZWN0KTsKK30KKworUGFzc1JlZlB0cjxGcmFtZUJ1ZmZlclNrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI+IEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBh
aW50ZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGcmFtZUJ1ZmZlclNrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIocGFpbnRlcikpOworfQorCitGcmFtZUJ1ZmZlclNrUGlj
dHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OkZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWlu
dGVyKQorICAgIDogU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihwYWludGVyKQor
eworfQorCitGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6On5G
cmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoKQoreworfQorCitQ
YXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IEZyYW1lQnVmZmVyU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlVGV4dHVyZShUZXh0dXJlTWFuYWdl
ciogbWFuYWdlcikKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmUodGhpcywgTWFu
YWdlZFRleHR1cmU6OmNyZWF0ZShtYW5hZ2VyKSkpOworfQorCitMYXllclRleHR1cmVVcGRhdGVy
OjpTYW1wbGVkVGV4ZWxGb3JtYXQgRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyOjpzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkKK3sK
KyAgICAvLyBIZXJlIHdlIGRpcmVjdGx5IHJlbmRlciB0byB0aGUgdGV4dHVyZSwgc28gdGhlIGNv
bXBvbmVudCBvcmRlciBpcyBhbHdheXMgY29ycmVjdC4KKyAgICByZXR1cm4gTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0UkdCQTsKK30KKwordm9pZCBGcmFtZUJ1ZmZlclNr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZVRleHR1cmVSZWN0KEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIE1hbmFn
ZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRS
ZWN0JiBkZXN0UmVjdCkKK3sKKyAgICAvLyBNYWtlIHN1cmUgU0tJQSB1c2VzIHRoZSBjb3JyZWN0
IEdMIGNvbnRleHQuCisgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgLy8g
Tm90aWZ5IFNLSUEgdG8gc3luYyBpdHMgaW50ZXJuYWwgR0wgc3RhdGUuCisgICAgY29udGV4dC0+
Z3JDb250ZXh0KCktPnJlc2V0Q29udGV4dCgpOworCisgICAgLy8gQ3JlYXRlIGFuIGFjY2VsZXJh
dGVkIGNhbnZhcyB0byBkcmF3IG9uLgorICAgIEZyYW1lQnVmZmVyIGJ1ZmZlcjsKKyAgICBTa0Nh
bnZhcyogY2FudmFzID0gYnVmZmVyLmluaXRpYWxpemUoY29udGV4dCwgYWxsb2NhdG9yLCB0ZXh0
dXJlKTsKKworICAgIGNhbnZhcy0+Y2xpcFJlY3QoU2tSZWN0KGRlc3RSZWN0KSk7CisgICAgLy8g
VHJhbnNsYXRlIHRoZSBvcmlnaW4gb2YgY29udGVudFJlY3QgdG8gdGhhdCBvZiBkZXN0UmVjdC4K
KyAgICAvLyBOb3RlIHRoYXQgZGVzdFJlY3QgaXMgZGVmaW5lZCByZWxhdGl2ZSB0byBzb3VyY2VS
ZWN0LgorICAgIGNhbnZhcy0+dHJhbnNsYXRlKGNvbnRlbnRSZWN0KCkueCgpIC0gc291cmNlUmVj
dC54KCkgKyBkZXN0UmVjdC54KCksCisgICAgICAgICAgICAgICAgICAgICAgY29udGVudFJlY3Qo
KS55KCkgLSBzb3VyY2VSZWN0LnkoKSArIGRlc3RSZWN0LnkoKSk7CisgICAgZHJhd1BpY3R1cmUo
Y2FudmFzKTsKKworICAgIC8vIEZsdXNoIFNLSUEgY29udGV4dCBzbyB0aGF0IGFsbCB0aGUgcmVu
ZGVyZWQgc3R1ZmYgYXBwZWFycyBvbiB0aGUgdGV4dHVyZS4KKyAgICBjb250ZXh0LT5nckNvbnRl
eHQoKS0+Zmx1c2goKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVT
RShTS0lBKQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVy
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDZiNjJkMTk5OWI1NjIzNTA0MWNjMGRiYjIyMjQ5
MTA1MWY5NTllYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlci5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgRnJhbWVCdWZmZXJTa1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyX2gKKyNkZWZpbmUgRnJhbWVCdWZmZXJTa1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyNpZiBVU0UoU0tJQSkKKworI2luY2x1ZGUgIlNrUGljdHVyZUNhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGcmFt
ZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMgU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlciB7CitwdWJsaWM6CisgICAgY2xhc3MgVGV4dHVy
ZSA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFRleHR1cmUoRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyKiwgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4pOworICAgICAgICB2aXJ0dWFsIH5UZXh0
dXJlKCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0
M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3Qg
SW50UmVjdCYgZGVzdFJlY3QpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgRnJhbWVCdWZmZXJT
a1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIHsgcmV0
dXJuIG1fdGV4dHVyZVVwZGF0ZXI7IH0KKworICAgICAgICBGcmFtZUJ1ZmZlclNrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIqIG1fdGV4dHVyZVVwZGF0ZXI7CisgICAgfTsKKworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcj4gY3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+KTsKKyAgICB2
aXJ0dWFsIH5GcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIoKTsK
KworICAgIHZpcnR1YWwgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBj
cmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKik7CisgICAgdmlydHVhbCBPcmllbnRhdGlvbiBv
cmllbnRhdGlvbigpIHsgcmV0dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRvcERvd25PcmllbnRh
dGlvbjsgfQorICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1h
dChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKKyAgICB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdy
YXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIE1hbmFnZWRUZXh0dXJlKiwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworCitwcml2
YXRlOgorICAgIGV4cGxpY2l0IEZyYW1lQnVmZmVyU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcihQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPik7Cit9OworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShTS0lBKQorI2VuZGlmIC8vIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKyNlbmRpZiAvLyBGcmFtZUJ1ZmZlclNrUGljdHVyZUNhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXgg
OWQzZTlmM2ExZTcwZGVlNWYxOWUzY2YwYjI0OGI5NDNhZmExMDJjMC4uZGExODM4Yjk1ODEwMDYz
ZDE3ODc5YTE1NzBjZTY0MGYxZGZlODFjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0u
Y3BwCkBAIC00Niw2ICs0NiwyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEltYWdl
TGF5ZXJUZXh0dXJlVXBkYXRlciA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyIHsKIHB1Ymxp
YzoKKyAgICBjbGFzcyBUZXh0dXJlIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmUgeworICAgIHB1YmxpYzoKKyAgICAgICAgVGV4dHVyZShJbWFnZUxheWVyVGV4dHVyZVVwZGF0
ZXIqIHRleHR1cmVVcGRhdGVyLCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiB0ZXh0dXJlKQor
ICAgICAgICAgICAgOiBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKHRleHR1cmUpCisgICAg
ICAgICAgICAsIG1fdGV4dHVyZVVwZGF0ZXIodGV4dHVyZVVwZGF0ZXIpCisgICAgICAgIHsKKyAg
ICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQorICAgICAgICB7CisgICAgICAg
ICAgICB0ZXh0dXJlVXBkYXRlcigpLT51cGRhdGVUZXh0dXJlUmVjdChjb250ZXh0LCBhbGxvY2F0
b3IsIHRleHR1cmUoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QpOworICAgICAgICB9CisKKyAgICBw
cml2YXRlOgorICAgICAgICBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVy
KCkgeyByZXR1cm4gbV90ZXh0dXJlVXBkYXRlcjsgfQorCisgICAgICAgIEltYWdlTGF5ZXJUZXh0
dXJlVXBkYXRlciogbV90ZXh0dXJlVXBkYXRlcjsKKyAgICB9OworCiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyPiBjcmVhdGUoYm9vbCB1c2VNYXBUZXhTdWJJ
bWFnZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VMYXllclRleHR1
cmVVcGRhdGVyKHVzZU1hcFRleFN1YkltYWdlKSk7CkBAIC01Myw2ICs3MiwxMSBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIH5JbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIoKSB7IH0KIAorICAgIHZp
cnR1YWwgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBjcmVhdGVUZXh0
dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBUZXh0dXJlKHRoaXMsIE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpKTsK
KyAgICB9CisKICAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4g
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6Qm90dG9tVXBPcmllbnRhdGlvbjsgfQogCiAgICAgdmlydHVh
bCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVG
b3JtYXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCAwNzc4ZTVk
ZmZmMTk4ODAxMWVmMmY2YzBmYzYyZWJiYmU3ODI2NWVkLi42ZmIwNjU5NGE3NDE2ZjAxNTA3Y2Jk
ODY3NDhmNGY1YTU3ZmJhZTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKQEAgLTM1LDEzICszNSwxMyBAQAogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5o
IgogCiAjaW5jbHVkZSAiQ2FudmFzMkRMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgi
CiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiR2VvbWV0cnlCaW5kaW5nLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgi
CiAjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJMYXllclRleHR1
cmVVcGRhdGVyQ2FudmFzLmgiCiAjaW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKICNpbmNsdWRl
ICJOb25Db21wb3NpdGVkQ29udGVudEhvc3QuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCmluZGV4IDg1ZTEzNzljMmRkNjI5Zjk4ZTk4
YWMzMmQwNGJkNGMxYTZhMGRjMTIuLmJmNzVjZjI5YTg5ZTM4OWUyNzY3N2IxMTkyMDZlZjI5YTRl
MzAxNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTI5LDYgKzI5LDcgQEAK
IAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAorI2luY2x1ZGUgIk1hbmFnZWRU
ZXh0dXJlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCiAjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KIApAQCAtMzcsMTEgKzM4LDI2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEludFNpemU7Ci1j
bGFzcyBNYW5hZ2VkVGV4dHVyZTsKIGNsYXNzIFRleHR1cmVBbGxvY2F0b3I7CitjbGFzcyBUZXh0
dXJlTWFuYWdlcjsKIAogY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPExheWVyVGV4dHVyZVVwZGF0ZXI+IHsKIHB1YmxpYzoKKyAgICAvLyBBbGxvd3MgdGV4dHVy
ZSB1cGxvYWRlcnMgdG8gc3RvcmUgcGVyLXRpbGUgcmVzb3VyY2VzLgorICAgIGNsYXNzIFRleHR1
cmUgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+VGV4dHVyZSgpIHsgfQorCisgICAg
ICAgIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlKCkgeyByZXR1cm4gbV90ZXh0dXJlLmdldCgpOyB9
CisgICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlUmVjdChjb25zdCBJbnRSZWN0JiAvKiBzb3Vy
Y2VSZWN0ICovKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJlY3QoR3JhcGhpY3ND
b250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UmVjdCYgZGVzdFJlY3QpID0gMDsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIGV4
cGxpY2l0IFRleHR1cmUoUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4dHVyZSkgOiBtX3Rl
eHR1cmUodGV4dHVyZSkgeyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBPd25QdHI8TWFuYWdl
ZFRleHR1cmU+IG1fdGV4dHVyZTsKKyAgICB9OworCiAgICAgdmlydHVhbCB+TGF5ZXJUZXh0dXJl
VXBkYXRlcigpIHsgfQogCiAgICAgZW51bSBPcmllbnRhdGlvbiB7CkBAIC01NCw2ICs3MCw3IEBA
IHB1YmxpYzoKICAgICAgICAgU2FtcGxlZFRleGVsRm9ybWF0QkdSQSwKICAgICAgICAgU2FtcGxl
ZFRleGVsRm9ybWF0SW52YWxpZCwKICAgICB9OworICAgIHZpcnR1YWwgUGFzc093blB0cjxUZXh0
dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKikgPSAwOwogICAgIC8vIFJldHVybnMg
dGhlIG9yaWVudGF0aW9uIG9mIHRoZSB0ZXh0dXJlIHVwbG9hZGVkIGJ5IHRoaXMgaW50ZXJmYWNl
LgogICAgIHZpcnR1YWwgT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSA9IDA7CiAgICAgLy8gUmV0
dXJucyB0aGUgZm9ybWF0IG9mIHRoZSB0ZXhlbCB1cGxvYWRlZCBieSB0aGlzIGludGVyZmFjZS4K
QEAgLTYxLDggKzc4LDcgQEAgcHVibGljOgogICAgIC8vIFRoaXMgZm9ybWF0IHNwZWNpZmllcyB0
aGUgY29tcG9uZW50IG9yZGVyIGluIHRoZSBzYW1wbGVkIHRleGVsLgogICAgIC8vIElmIHRoZSBm
b3JtYXQgaXMgVGV4ZWxGb3JtYXRCR1JBLCB2ZWM0LnggaXMgYmx1ZSBhbmQgdmVjNC56IGlzIHJl
ZC4KICAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0Mz
RGVudW0gdGV4dHVyZUZvcm1hdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRh
dGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBp
bnQgYm9yZGVyVGV4ZWxzLCBmbG9hdCBjb250ZW50c1NjYWxlKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRv
ciosIE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UmVjdCYgZGVzdFJlY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNv
bnN0IEludFJlY3QmIC8qIGNvbnRlbnRSZWN0ICovLCBjb25zdCBJbnRTaXplJiAvKiB0aWxlU2l6
ZSAqLywgaW50IC8qIGJvcmRlclRleGVscyAqLywgZmxvYXQgLyogY29udGVudHNTY2FsZSAqLykg
eyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4
dHVyZVVwZGF0ZXJDYW52YXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2Ew
ZDI4OTk1Mzk4MmVjZDkyZTliMzRjZTViNDNmZWI2OTgyMTJmLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMjM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0
ZXJDYW52YXMuaCIKLQotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCi0jaW5jbHVk
ZSAiTWFuYWdlZFRleHR1cmUuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbG9yLmgiCi0jaW5jbHVk
ZSAiVHJhY2VFdmVudC5oIgotCi0jaWYgVVNFKFNLSUEpCi0jaW5jbHVkZSAiR3JDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgotI2luY2x1ZGUgIlNrQ2FudmFzLmgi
Ci0jaW5jbHVkZSAiU2tHcHVEZXZpY2UuaCIKLSNlbmRpZiAvLyBVU0UoU0tJQSkKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi0jaWYgVVNFKFNLSUEpCi1uYW1lc3BhY2UgewotCi1jbGFzcyBGcmFt
ZUJ1ZmZlciB7Ci1wdWJsaWM6Ci0gICAgRnJhbWVCdWZmZXIoKTsKLSAgICB+RnJhbWVCdWZmZXIo
KTsKLQotICAgIFNrQ2FudmFzKiBpbml0aWFsaXplKEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVy
ZUFsbG9jYXRvciosIE1hbmFnZWRUZXh0dXJlKik7Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3ND
b250ZXh0M0QqIG1fY29udGV4dDsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZmJvOwotICAgIE93
blB0cjxTa0NhbnZhcz4gbV9jYW52YXM7Ci19OwotCi1GcmFtZUJ1ZmZlcjo6RnJhbWVCdWZmZXIo
KQotICAgIDogbV9jb250ZXh0KDApCi0gICAgLCBtX2ZibygwKQotewotfQotCi1GcmFtZUJ1ZmZl
cjo6fkZyYW1lQnVmZmVyKCkKLXsKLSAgICBtX2NhbnZhcy5jbGVhcigpOwotCi0gICAgaWYgKG1f
ZmJvKQotICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZUZyYW1lYnVmZmVyKG1fZmJvKTsKLX0KLQot
U2tDYW52YXMqIEZyYW1lQnVmZmVyOjppbml0aWFsaXplKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJl
KQotewotICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgbV9mYm8gPSBtX2NvbnRleHQtPmNy
ZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgdGV4dHVyZS0+ZnJhbWVidWZm
ZXJUZXh0dXJlMkQobV9jb250ZXh0LCBhbGxvY2F0b3IpOwotCi0gICAgLy8gQ3JlYXRlIGEgc2tp
YSBncHUgY2FudmFzLgotICAgIEdyQ29udGV4dCogZ3JDb250ZXh0ID0gbV9jb250ZXh0LT5nckNv
bnRleHQoKTsKLSAgICBJbnRTaXplIGNhbnZhc1NpemUgPSB0ZXh0dXJlLT5zaXplKCk7Ci0gICAg
R3JQbGF0Zm9ybVN1cmZhY2VEZXNjIHRhcmdldERlc2M7Ci0gICAgdGFyZ2V0RGVzYy5yZXNldCgp
OwotICAgIHRhcmdldERlc2MuZlN1cmZhY2VUeXBlID0ga1RleHR1cmVSZW5kZXJUYXJnZXRfR3JQ
bGF0Zm9ybVN1cmZhY2VUeXBlOwotICAgIHRhcmdldERlc2MuZlJlbmRlclRhcmdldEZsYWdzID0g
a05vbmVfR3JQbGF0Zm9ybVJlbmRlclRhcmdldEZsYWdCaXQ7Ci0gICAgdGFyZ2V0RGVzYy5mV2lk
dGggPSBjYW52YXNTaXplLndpZHRoKCk7Ci0gICAgdGFyZ2V0RGVzYy5mSGVpZ2h0ID0gY2FudmFz
U2l6ZS5oZWlnaHQoKTsKLSAgICB0YXJnZXREZXNjLmZDb25maWcgPSBrUkdCQV84ODg4X0dyUGl4
ZWxDb25maWc7Ci0gICAgdGFyZ2V0RGVzYy5mU3RlbmNpbEJpdHMgPSA4OwotICAgIHRhcmdldERl
c2MuZlBsYXRmb3JtVGV4dHVyZSA9IHRleHR1cmUtPnRleHR1cmVJZCgpOwotICAgIHRhcmdldERl
c2MuZlBsYXRmb3JtUmVuZGVyVGFyZ2V0ID0gbV9mYm87Ci0gICAgU2tBdXRvVFVucmVmPEdyVGV4
dHVyZT4gdGFyZ2V0KHN0YXRpY19jYXN0PEdyVGV4dHVyZSo+KGdyQ29udGV4dC0+Y3JlYXRlUGxh
dGZvcm1TdXJmYWNlKHRhcmdldERlc2MpKSk7Ci0gICAgU2tBdXRvVFVucmVmPFNrRGV2aWNlPiBk
ZXZpY2UobmV3IFNrR3B1RGV2aWNlKGdyQ29udGV4dCwgdGFyZ2V0LmdldCgpKSk7Ci0gICAgbV9j
YW52YXMgPSBhZG9wdFB0cihuZXcgU2tDYW52YXMoZGV2aWNlLmdldCgpKSk7Ci0KLSAgICByZXR1
cm4gbV9jYW52YXMuZ2V0KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlCi0jZW5kaWYgLy8gVVNFKFNL
SUEpCi0KLUxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6OkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52
YXMoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcikKLSAgICA6IG1fcGFp
bnRlcihwYWludGVyKQotewotfQotCi12b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6OnBh
aW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjb250
ZW50UmVjdCwgZmxvYXQgY29udGVudHNTY2FsZSkKLXsKLSAgICBjb250ZXh0LnRyYW5zbGF0ZSgt
Y29udGVudFJlY3QueCgpLCAtY29udGVudFJlY3QueSgpKTsKLSAgICB7Ci0gICAgICAgIFRSQUNF
X0VWRU5UKCJMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzOjpwYWludCIsIHRoaXMsIDApOwotCi0g
ICAgICAgIEludFJlY3Qgc2NhbGVkQ29udGVudFJlY3QgPSBjb250ZW50UmVjdDsKLQotICAgICAg
ICBpZiAoY29udGVudHNTY2FsZSAhPSAxLjApIHsKLSAgICAgICAgICAgIGNvbnRleHQuc2F2ZSgp
OwotICAgICAgICAgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoY29udGVudHNTY2FsZSwgY29u
dGVudHNTY2FsZSkpOwotCi0gICAgICAgICAgICBGbG9hdFJlY3QgcmVjdCA9IGNvbnRlbnRSZWN0
OwotICAgICAgICAgICAgcmVjdC5zY2FsZSgxIC8gY29udGVudHNTY2FsZSk7Ci0gICAgICAgICAg
ICBzY2FsZWRDb250ZW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QocmVjdCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBtX3BhaW50ZXItPnBhaW50KGNvbnRleHQsIHNjYWxlZENvbnRlbnRSZWN0KTsK
LQotICAgICAgICBpZiAoY29udGVudHNTY2FsZSAhPSAxLjApCi0gICAgICAgICAgICBjb250ZXh0
LnJlc3RvcmUoKTsKLSAgICB9Ci0gICAgbV9jb250ZW50UmVjdCA9IGNvbnRlbnRSZWN0OwotfQot
Ci1QYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA+IExheWVyVGV4dHVyZVVwZGF0
ZXJCaXRtYXA6OmNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVy
LCBib29sIHVzZU1hcFRleFN1YkltYWdlKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5
ZXJUZXh0dXJlVXBkYXRlckJpdG1hcChwYWludGVyLCB1c2VNYXBUZXhTdWJJbWFnZSkpOwotfQot
Ci1MYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpMYXllclRleHR1cmVVcGRhdGVyQml0bWFwKFBh
c3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIsIGJvb2wgdXNlTWFwVGV4U3Vi
SW1hZ2UpCi0gICAgOiBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzKHBhaW50ZXIpCi0gICAgLCBt
X3RleFN1YkltYWdlKHVzZU1hcFRleFN1YkltYWdlKQotewotfQotCi1MYXllclRleHR1cmVVcGRh
dGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXQgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6c2FtcGxl
ZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpCi17Ci0gICAgLy8gVGhlIGNvbXBv
bmVudCBvcmRlciBtYXkgYmUgYmdyYSBpZiB3ZSB1cGxvYWRlZCBiZ3JhIHBpeGVscyB0byByZ2Jh
IHRleHR1cmVzLgotICAgIHJldHVybiBQbGF0Zm9ybUNvbG9yOjpzYW1lQ29tcG9uZW50T3JkZXIo
dGV4dHVyZUZvcm1hdCkgPwotICAgICAgICAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxl
ZFRleGVsRm9ybWF0UkdCQSA6IExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1h
dEJHUkE7Ci19Ci0KLXZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6cHJlcGFyZVRvVXBk
YXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwg
aW50IGJvcmRlclRleGVscywgZmxvYXQgY29udGVudHNTY2FsZSkKLXsKLSAgICBtX3RleFN1Yklt
YWdlLnNldFN1YkltYWdlU2l6ZSh0aWxlU2l6ZSk7Ci0KLSAgICBtX2NhbnZhcy5yZXNpemUoY29u
dGVudFJlY3Quc2l6ZSgpKTsKLSAgICAvLyBBc3N1bXB0aW9uOiBpZiBhIHRpbGVyIGlzIHVzaW5n
IGJvcmRlciB0ZXhlbHMsIHRoZW4gaXQgaXMgYmVjYXVzZSB0aGUKLSAgICAvLyBsYXllciBpcyBs
aWtlbHkgdG8gYmUgZmlsdGVyZWQgb3IgdHJhbnNmb3JtZWQuIEJlY2F1c2Ugb2YgaXQgbWlnaHQg
YmUKLSAgICAvLyB0cmFuc2Zvcm1lZCwgZHJhdyB0aGUgdGV4dCBpbiBncmF5c2NhbGUgaW5zdGVh
ZCBvZiBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCi0gICAgUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6
OlRleHRPcHRpb24gdGV4dE9wdGlvbiA9Ci0gICAgICAgIGJvcmRlclRleGVscyA/IFBsYXRmb3Jt
Q2FudmFzOjpQYWludGVyOjpHcmF5c2NhbGVUZXh0IDogUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6
OlN1YnBpeGVsVGV4dDsKLSAgICBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlciBjYW52YXNQYWludGVy
KCZtX2NhbnZhcywgdGV4dE9wdGlvbik7Ci0gICAgcGFpbnRDb250ZW50cygqY2FudmFzUGFpbnRl
ci5jb250ZXh0KCksIGNvbnRlbnRSZWN0LCBjb250ZW50c1NjYWxlKTsKLX0KLQotdm9pZCBMYXll
clRleHR1cmVVcGRhdGVyQml0bWFwOjp1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBNYW5hZ2VkVGV4dHVyZSog
dGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJl
Y3QpCi17Ci0gICAgUGxhdGZvcm1DYW52YXM6OkF1dG9Mb2NrZXIgbG9ja2VyKCZtX2NhbnZhcyk7
Ci0KLSAgICB0ZXh0dXJlLT5iaW5kVGV4dHVyZShjb250ZXh0LCBhbGxvY2F0b3IpOwotICAgIG1f
dGV4U3ViSW1hZ2UudXBsb2FkKGxvY2tlci5waXhlbHMoKSwgY29udGVudFJlY3QoKSwgc291cmNl
UmVjdCwgZGVzdFJlY3QsIHRleHR1cmUtPmZvcm1hdCgpLCBjb250ZXh0KTsKLX0KLQotI2lmIFVT
RShTS0lBKQotUGFzc1JlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlPiBMYXllclRl
eHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpjcmVhdGUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJv
bWl1bT4gcGFpbnRlcikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVyVGV4dHVyZVVw
ZGF0ZXJTa1BpY3R1cmUocGFpbnRlcikpOwotfQotCi1MYXllclRleHR1cmVVcGRhdGVyU2tQaWN0
dXJlOjpMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVy
Q2hyb21pdW0+IHBhaW50ZXIpCi0gICAgOiBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzKHBhaW50
ZXIpCi17Ci19Ci0KLUxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6On5MYXllclRleHR1cmVV
cGRhdGVyU2tQaWN0dXJlKCkKLXsKLX0KLQotTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRl
eGVsRm9ybWF0IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OnNhbXBsZWRUZXhlbEZvcm1h
dChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KQotewotICAgIC8vIEhlcmUgd2UgZGlyZWN0bHkgcmVu
ZGVyIHRvIHRoZSB0ZXh0dXJlLCBzbyB0aGUgY29tcG9uZW50IG9yZGVyIGlzIGFsd2F5cyBjb3Jy
ZWN0LgotICAgIHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRS
R0JBOwotfQotCi12b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OnByZXBhcmVUb1Vw
ZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUs
IGludCBib3JkZXJUZXhlbHMsIGZsb2F0IGNvbnRlbnRzU2NhbGUpCi17Ci0gICAgU2tDYW52YXMq
IGNhbnZhcyA9IG1fcGljdHVyZS5iZWdpblJlY29yZGluZyhjb250ZW50UmVjdC53aWR0aCgpLCBj
b250ZW50UmVjdC5oZWlnaHQoKSk7Ci0gICAgUGxhdGZvcm1Db250ZXh0U2tpYSBwbGF0Zm9ybUNv
bnRleHQoY2FudmFzKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0RGVmZXJyZWQodHJ1ZSk7Ci0g
ICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKLSAg
ICBwYWludENvbnRlbnRzKGdyYXBoaWNzQ29udGV4dCwgY29udGVudFJlY3QsIGNvbnRlbnRzU2Nh
bGUpOwotICAgIG1fcGljdHVyZS5lbmRSZWNvcmRpbmcoKTsKLX0KLQotdm9pZCBMYXllclRleHR1
cmVVcGRhdGVyU2tQaWN0dXJlOjp1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBNYW5hZ2VkVGV4dHVyZSogdGV4
dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3Qp
Ci17Ci0gICAgLy8gTWFrZSBzdXJlIFNLSUEgdXNlcyB0aGUgY29ycmVjdCBHTCBjb250ZXh0Lgot
ICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIC8vIE5vdGlmeSBTS0lBIHRv
IHN5bmMgaXRzIGludGVybmFsIEdMIHN0YXRlLgotICAgIGNvbnRleHQtPmdyQ29udGV4dCgpLT5y
ZXNldENvbnRleHQoKTsKLQotICAgIC8vIENyZWF0ZSBhbiBhY2NlbGVyYXRlZCBjYW52YXMgdG8g
ZHJhdyBvbi4KLSAgICBGcmFtZUJ1ZmZlciBidWZmZXI7Ci0gICAgU2tDYW52YXMqIGNhbnZhcyA9
IGJ1ZmZlci5pbml0aWFsaXplKGNvbnRleHQsIGFsbG9jYXRvciwgdGV4dHVyZSk7Ci0KLSAgICBj
YW52YXMtPmNsaXBSZWN0KFNrUmVjdChkZXN0UmVjdCkpOwotICAgIC8vIFRyYW5zbGF0ZSB0aGUg
b3JpZ2luIG9mIGNvbnRlbnRSZWN0IHRvIHRoYXQgb2YgZGVzdFJlY3QuCi0gICAgLy8gTm90ZSB0
aGF0IGRlc3RSZWN0IGlzIGRlZmluZWQgcmVsYXRpdmUgdG8gc291cmNlUmVjdC4KLSAgICBjYW52
YXMtPnRyYW5zbGF0ZShjb250ZW50UmVjdCgpLngoKSAtIHNvdXJjZVJlY3QueCgpICsgZGVzdFJl
Y3QueCgpLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRSZWN0KCkueSgpIC0gc291cmNl
UmVjdC55KCkgKyBkZXN0UmVjdC55KCkpOwotICAgIGNhbnZhcy0+ZHJhd1BpY3R1cmUobV9waWN0
dXJlKTsKLQotICAgIC8vIEZsdXNoIFNLSUEgY29udGV4dCBzbyB0aGF0IGFsbCB0aGUgcmVuZGVy
ZWQgc3R1ZmYgYXBwZWFycyBvbiB0aGUgdGV4dHVyZS4KLSAgICBjb250ZXh0LT5nckNvbnRleHQo
KS0+Zmx1c2goKTsKLX0KLSNlbmRpZiAvLyBVU0UoU0tJQSkKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVw
ZGF0ZXJDYW52YXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNDZkOWMyNmY4NDYxMDVkNjgzMmJkZjk1NzdiNzQwMjdmNDRiZWQ0My4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2lmbmRlZiBMYXllclRleHR1cmVVcGRh
dGVyQ2FudmFzX2gKLSNkZWZpbmUgTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhc19oCi0KLSNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0Qu
aCIKLSNpbmNsdWRlICJMYXllclRleHR1cmVTdWJJbWFnZS5oIgotI2luY2x1ZGUgIkxheWVyVGV4
dHVyZVVwZGF0ZXIuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNhbnZhcy5oIgotI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLQotI2lmIFVTRShT
S0lBKQotI2luY2x1ZGUgIlNrUGljdHVyZS5oIgotCi1jbGFzcyBHckNvbnRleHQ7Ci1jbGFzcyBT
a0NhbnZhczsKLWNsYXNzIFNrUGljdHVyZTsKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwotY2xhc3MgTGF5ZXJQYWludGVyQ2hyb21pdW07
Ci0KLS8vIEEgTGF5ZXJUZXh0dXJlVXBkYXRlciB3aXRoIGFuIGludGVybmFsIGNhbnZhcy4KLWNs
YXNzIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRl
ciB7Ci1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyhQ
YXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPik7Ci0KLSAgICB2b2lkIHBhaW50Q29udGVu
dHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGZsb2F0IGNv
bnRlbnRzU2NhbGUpOwotICAgIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZW50UmVjdDsgfQotCi1wcml2YXRlOgotCi0gICAgSW50UmVjdCBtX2NvbnRl
bnRSZWN0OwotICAgIE93blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gbV9wYWludGVyOwotfTsK
LQotLy8gQSBMYXllclRleHR1cmVVcGRhdGVyIHdpdGggYW4gaW50ZXJuYWwgYml0bWFwIGNhbnZh
cy4KLWNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXAgOiBwdWJsaWMgTGF5ZXJUZXh0dXJl
VXBkYXRlckNhbnZhcyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJUZXh0
dXJlVXBkYXRlckJpdG1hcD4gY3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+
LCBib29sIHVzZU1hcFRleFN1YkltYWdlKTsKLQotICAgIHZpcnR1YWwgT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24oKSB7IHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpCb3R0b21VcE9yaWVudGF0
aW9uOyB9Ci0gICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0
KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpOwotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRh
dGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBp
bnQgYm9yZGVyVGV4ZWxzLCBmbG9hdCBjb250ZW50c1NjYWxlKTsKLSAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwg
TWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0
JiBkZXN0UmVjdCk7Ci0KLXByaXZhdGU6Ci0gICAgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcChQ
YXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSk7
Ci0gICAgUGxhdGZvcm1DYW52YXMgbV9jYW52YXM7Ci0gICAgTGF5ZXJUZXh0dXJlU3ViSW1hZ2Ug
bV90ZXhTdWJJbWFnZTsKLX07Ci0KLSNpZiBVU0UoU0tJQSkKLWNsYXNzIExheWVyVGV4dHVyZVVw
ZGF0ZXJTa1BpY3R1cmUgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZT4g
Y3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+KTsKLSAgICB2aXJ0dWFsIH5M
YXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKCk7Ci0KLSAgICB2aXJ0dWFsIE9yaWVudGF0aW9u
IG9yaWVudGF0aW9uKCkgeyByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VG9wRG93bk9yaWVu
dGF0aW9uOyB9Ci0gICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9y
bWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpOwotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9V
cGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXpl
LCBpbnQgYm9yZGVyVGV4ZWxzLCBmbG9hdCBjb250ZW50c1NjYWxlKTsKLSAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9y
KiwgTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRS
ZWN0JiBkZXN0UmVjdCk7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTGF5ZXJUZXh0dXJlVXBk
YXRlclNrUGljdHVyZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPik7Ci0gIAotICAg
IFNrUGljdHVyZSBtX3BpY3R1cmU7IC8vIFJlY29yZGluZyBjYW52YXMuCi19OwotI2VuZGlmIC8v
IFVTRShTS0lBKQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0jZW5kaWYgLy8gVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQotI2VuZGlmIC8vIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXNf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRh
dGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41MzdlMTM3ZThkOGVjNTE4YjkzNGFhNWNkMmQ3MDBjNzRiMTlm
ZTRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKQEAgLTAsMCAr
MSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorI2lmIFVTRShTS0lBKQorCisjaW5jbHVkZSAiU2tQaWN0dXJlQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNv
bnRleHRTa2lhLmgiCisjaW5jbHVkZSAiU2tDYW52YXMuaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3duUHRyPExh
eWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyKQorICAgIDogQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlcihwYWludGVyKQoreworfQorCitTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
Ojp+U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcigpCit7Cit9CisKK3ZvaWQgU2tQ
aWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiAvKiB0aWxlU2l6ZSAqLywgaW50IC8q
IGJvcmRlclRleGVscyAqLywgZmxvYXQgY29udGVudHNTY2FsZSkKK3sKKyAgICBTa0NhbnZhcyog
Y2FudmFzID0gbV9waWN0dXJlLmJlZ2luUmVjb3JkaW5nKGNvbnRlbnRSZWN0LndpZHRoKCksIGNv
bnRlbnRSZWN0LmhlaWdodCgpKTsKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3JtQ29u
dGV4dChjYW52YXMpOworICAgIHBsYXRmb3JtQ29udGV4dC5zZXREZWZlcnJlZCh0cnVlKTsKKyAg
ICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KCZwbGF0Zm9ybUNvbnRleHQpOworICAg
IHBhaW50Q29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBjb250ZW50UmVjdCwgY29udGVudHNTY2Fs
ZSk7CisgICAgbV9waWN0dXJlLmVuZFJlY29yZGluZygpOworfQorCit2b2lkIFNrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmRyYXdQaWN0dXJlKFNrQ2FudmFzKiBjYW52YXMpCit7
CisgICAgVFJBQ0VfRVZFTlQoIlNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmRy
YXdQaWN0dXJlIiwgdGhpcywgMCk7CisgICAgY2FudmFzLT5kcmF3UGljdHVyZShtX3BpY3R1cmUp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKFNLSUEpCisjZW5k
aWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0MGY4YjAz
ZWE0ZjI3MzlhOTc1NDM4NjdhYzdlYjE1NDAzMGQwYzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBTa1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyX2gKKyNkZWZpbmUgU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlcl9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisjaWYgVVNFKFNLSUEpCisKKyNpbmNsdWRlICJDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgi
CisjaW5jbHVkZSAiU2tQaWN0dXJlLmgiCisKK2NsYXNzIFNrQ2FudmFzOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIExheWVyUGFpbnRlckNocm9taXVtOworCitjbGFzcyBTa1BpY3R1
cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGljIENhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgflNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIoKTsKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IFNrUGljdHVyZUNhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXIoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOworCisg
ICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMsIGZsb2F0IGNvbnRl
bnRzU2NhbGUpOworICAgIHZvaWQgZHJhd1BpY3R1cmUoU2tDYW52YXMqKTsKKworcHJpdmF0ZToK
KyAgICBTa1BpY3R1cmUgbV9waWN0dXJlOyAvLyBSZWNvcmRpbmcgY2FudmFzLgorfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShTS0lBKQorI2VuZGlmIC8vIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNlbmRpZiAvLyBTa1BpY3R1cmVDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCmluZGV4IGZmYWQy
ZjViMTc1Yzk2NjVkNjY1NzViYWZjYzM5YmZjZWUwZTFlNmEuLjhiMjA2MzgxNjNhODVmNmE3NWZh
MThmYzg4NDM4NzM4MzJjMjYzNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcApA
QCAtNTIsMTcgKzUyLDIwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFVwZGF0YWJsZVRp
bGUgOiBwdWJsaWMgQ0NMYXllclRpbGluZ0RhdGE6OlRpbGUgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFVwZGF0YWJsZVRpbGUpOwogcHVibGljOgotICAgIGV4cGxpY2l0IFVwZGF0YWJsZVRp
bGUoUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4KSA6IG1fdGV4KHRleCkgeyB9CisgICAg
ZXhwbGljaXQgVXBkYXRhYmxlVGlsZShQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmU+IHRleHR1cmUpIDogbV90ZXh0dXJlKHRleHR1cmUpIHsgfQogCi0gICAgTWFuYWdlZFRl
eHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleC5nZXQoKTsgfQorICAgIExheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleHR1cmUuZ2V0KCk7IH0K
KyAgICBNYW5hZ2VkVGV4dHVyZSogbWFuYWdlZFRleHR1cmUoKSB7IHJldHVybiBtX3RleHR1cmUt
PnRleHR1cmUoKTsgfQogCiAgICAgYm9vbCBpc0RpcnR5KCkgY29uc3QgeyByZXR1cm4gIW1fZGly
dHlMYXllclJlY3QuaXNFbXB0eSgpOyB9CiAgICAgdm9pZCBjbGVhckRpcnR5KCkgeyBtX2RpcnR5
TGF5ZXJSZWN0ID0gSW50UmVjdCgpOyB9CiAKICAgICAvLyBMYXllci1zcGFjZSBkaXJ0eSByZWN0
YW5nbGUgdGhhdCBuZWVkcyB0byBiZSByZXBhaW50ZWQuCiAgICAgSW50UmVjdCBtX2RpcnR5TGF5
ZXJSZWN0OworICAgIC8vIENvbnRlbnQtc3BhY2UgcmVjdGFuZ2xlIHRoYXQgbmVlZHMgdG8gYmUg
dXBkYXRlZC4KKyAgICBJbnRSZWN0IG1fdXBkYXRlUmVjdDsKIHByaXZhdGU6Ci0gICAgT3duUHRy
PE1hbmFnZWRUZXh0dXJlPiBtX3RleDsKKyAgICBPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6
VGV4dHVyZT4gbV90ZXh0dXJlOwogfTsKIAogVGlsZWRMYXllckNocm9taXVtOjpUaWxlZExheWVy
Q2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkKQEAgLTE4MCwyMiArMTgzLDE5IEBA
IHZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBo
aWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlCiAgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0
b207ICsraikgewogICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7
CiAgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworCisgICAg
ICAgICAgICAvLyBSZXF1aXJlZCB0aWxlcyBhcmUgY3JlYXRlZCBpbiBwcmVwYXJlVG9VcGRhdGUo
KS4gQSB0aWxlIHNob3VsZAorICAgICAgICAgICAgLy8gbmV2ZXIgYmUgcmVtb3ZlZCBiZXR3ZWVu
IHRoZSBjYWxsIHRvIHByZXBhcmVUb1VwZGF0ZSgpIGFuZCB0aGUKKyAgICAgICAgICAgIC8vIGNh
bGwgdG8gdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpLgogICAgICAgICAgICAgaWYgKCF0aWxl
KQotICAgICAgICAgICAgICAgIHRpbGUgPSBjcmVhdGVUaWxlKGksIGopOwotICAgICAgICAgICAg
ZWxzZSBpZiAoIXRpbGUtPmlzRGlydHkoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICBDUkFTSCgpOwogCi0gICAgICAgICAgICAvLyBDYWxjdWxhdGUgcGFnZS1z
cGFjZSByZWN0YW5nbGUgdG8gY29weSBmcm9tLgotICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VS
ZWN0ID0gbV90aWxlci0+dGlsZUNvbnRlbnRSZWN0KHRpbGUpOwotICAgICAgICAgICAgY29uc3Qg
SW50UG9pbnQgYW5jaG9yID0gc291cmNlUmVjdC5sb2NhdGlvbigpOwotICAgICAgICAgICAgc291
cmNlUmVjdC5pbnRlcnNlY3QobV90aWxlci0+bGF5ZXJSZWN0VG9Db250ZW50UmVjdCh0aWxlLT5t
X2RpcnR5TGF5ZXJSZWN0KSk7Ci0gICAgICAgICAgICAvLyBQYWludCByZWN0IG5vdCBndWFyYW50
ZWVkIHRvIGxpbmUgdXAgb24gdGlsZSBib3VuZGFyaWVzLCBzbwotICAgICAgICAgICAgLy8gbWFr
ZSBzdXJlIHRoYXQgc291cmNlUmVjdCBkb2Vzbid0IGV4dGVuZCBvdXRzaWRlIG9mIGl0LgotICAg
ICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QobV9wYWludFJlY3QpOwotICAgICAgICAgICAg
aWYgKHNvdXJjZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0
ID0gdGlsZS0+bV91cGRhdGVSZWN0OworICAgICAgICAgICAgaWYgKHRpbGUtPm1fdXBkYXRlUmVj
dC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIEFT
U0VSVCh0aWxlLT50ZXh0dXJlKCktPmlzUmVzZXJ2ZWQoKSk7CisgICAgICAgICAgICBBU1NFUlQo
dGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+aXNSZXNlcnZlZCgpKTsKKyAgICAgICAgICAgIGNvbnN0
IEludFBvaW50IGFuY2hvciA9IG1fdGlsZXItPnRpbGVDb250ZW50UmVjdCh0aWxlKS5sb2NhdGlv
bigpOwogCiAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGlsZS1zcGFjZSByZWN0YW5nbGUgdG8g
dXBsb2FkIGludG8uCiAgICAgICAgICAgICBJbnRSZWN0IGRlc3RSZWN0KEludFBvaW50KHNvdXJj
ZVJlY3QueCgpIC0gYW5jaG9yLngoKSwgc291cmNlUmVjdC55KCkgLSBhbmNob3IueSgpKSwgc291
cmNlUmVjdC5zaXplKCkpOwpAQCAtMjE1LDggKzIxNSw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9t
aXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NUZXh0
dXJlCiAgICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueSgpICsgZGVzdFJlY3QuaGVpZ2h0KCkg
PiBtX3BhaW50UmVjdC5oZWlnaHQoKSkKICAgICAgICAgICAgICAgICBDUkFTSCgpOwogCi0gICAg
ICAgICAgICB1cGRhdGVyLmFwcGVuZCh0aWxlLT50ZXh0dXJlKCksIHRleHR1cmVVcGRhdGVyKCks
IHNvdXJjZVJlY3QsIGRlc3RSZWN0KTsKLSAgICAgICAgICAgIHRpbGUtPmNsZWFyRGlydHkoKTsK
KyAgICAgICAgICAgIHVwZGF0ZXIuYXBwZW5kKHRpbGUtPnRleHR1cmUoKSwgc291cmNlUmVjdCwg
ZGVzdFJlY3QpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yNTUsMTIgKzI1NCwxMiBAQCB2b2lk
IFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIp
CiAgICAgICAgIGludCBpID0gaXRlci0+Zmlyc3QuZmlyc3Q7CiAgICAgICAgIGludCBqID0gaXRl
ci0+Zmlyc3Quc2Vjb25kOwogICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nh
c3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7Ci0gICAgICAgIGlmICghdGls
ZS0+dGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1h
dCkpCisgICAgICAgIGlmICghdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+aXNWYWxpZChtX3RpbGVy
LT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIGlmICh0aWxlLT5pc0RpcnR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICB0aWxlZExheWVyLT5zeW5jVGV4dHVyZUlkKGksIGosIHRpbGUtPnRleHR1cmUoKS0+dGV4
dHVyZUlkKCkpOworICAgICAgICB0aWxlZExheWVyLT5zeW5jVGV4dHVyZUlkKGksIGosIHRpbGUt
Pm1hbmFnZWRUZXh0dXJlKCktPnRleHR1cmVJZCgpKTsKICAgICB9CiB9CiAKQEAgLTI3OCw3ICsy
NzcsNyBAQCBVcGRhdGFibGVUaWxlKiBUaWxlZExheWVyQ2hyb21pdW06OnRpbGVBdChpbnQgaSwg
aW50IGopIGNvbnN0CiAKIFVwZGF0YWJsZVRpbGUqIFRpbGVkTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
VGlsZShpbnQgaSwgaW50IGopCiB7Ci0gICAgUmVmUHRyPFVwZGF0YWJsZVRpbGU+IHRpbGUgPSBh
ZG9wdFJlZihuZXcgVXBkYXRhYmxlVGlsZShNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKHRleHR1cmVN
YW5hZ2VyKCkpKSk7CisgICAgUmVmUHRyPFVwZGF0YWJsZVRpbGU+IHRpbGUgPSBhZG9wdFJlZihu
ZXcgVXBkYXRhYmxlVGlsZSh0ZXh0dXJlVXBkYXRlcigpLT5jcmVhdGVUZXh0dXJlKHRleHR1cmVN
YW5hZ2VyKCkpKSk7CiAgICAgbV90aWxlci0+YWRkVGlsZSh0aWxlLCBpLCBqKTsKICAgICB0aWxl
LT5tX2RpcnR5TGF5ZXJSZWN0ID0gbV90aWxlci0+dGlsZUxheWVyUmVjdCh0aWxlLmdldCgpKTsK
IApAQCAtMzI2LDEwICszMjUsMTAgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByb3RlY3RU
aWxlVGV4dHVyZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgZm9yIChpbnQgaiA9
IHRvcDsgaiA8PSBib3R0b207ICsraikgewogICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8
PSByaWdodDsgKytpKSB7CiAgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0
KGksIGopOwotICAgICAgICAgICAgaWYgKCF0aWxlIHx8ICF0aWxlLT50ZXh0dXJlKCktPmlzVmFs
aWQobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkKKyAgICAgICAgICAgIGlm
ICghdGlsZSB8fCAhdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+aXNWYWxpZChtX3RpbGVyLT50aWxl
U2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgICAgICB0aWxlLT50ZXh0dXJlKCktPnJlc2VydmUobV90aWxlci0+dGlsZVNpemUoKSwg
bV90ZXh0dXJlRm9ybWF0KTsKKyAgICAgICAgICAgIHRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPnJl
c2VydmUobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KTsKICAgICAgICAgfQog
ICAgIH0KIH0KQEAgLTM0Myw2ICszNDIsMTIgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnBy
ZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKIAogICAgIG1fc2tpcHNE
cmF3ID0gZmFsc2U7CiAKKyAgICAvLyBSZXNldCBtX3VwZGF0ZVJlY3QgZm9yIGFsbCB0aWxlcy4K
KyAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdGVy
ID0gbV90aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IG1fdGlsZXItPnRpbGVzKCkuZW5k
KCk7ICsraXRlcikgeworICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8
VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7CisgICAgICAgIHRpbGUtPm1fdXBk
YXRlUmVjdCA9IEludFJlY3QoKTsKKyAgICB9CisKICAgICBpZiAoY29udGVudFJlY3QuaXNFbXB0
eSgpKSB7CiAgICAgICAgIG1fcmVxdWVzdGVkVXBkYXRlUmVjdCA9IEludFJlY3QoKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMzY2LDEwICszNzEsMTAgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06
OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICAgICAgICAg
IGlmICghdGlsZSkKICAgICAgICAgICAgICAgICB0aWxlID0gY3JlYXRlVGlsZShpLCBqKTsKIAot
ICAgICAgICAgICAgaWYgKCF0aWxlLT50ZXh0dXJlKCktPmlzVmFsaWQobV90aWxlci0+dGlsZVNp
emUoKSwgbV90ZXh0dXJlRm9ybWF0KSkKKyAgICAgICAgICAgIGlmICghdGlsZS0+bWFuYWdlZFRl
eHR1cmUoKS0+aXNWYWxpZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKQog
ICAgICAgICAgICAgICAgIHRpbGUtPm1fZGlydHlMYXllclJlY3QgPSBtX3RpbGVyLT50aWxlTGF5
ZXJSZWN0KHRpbGUpOwogCi0gICAgICAgICAgICBpZiAoIXRpbGUtPnRleHR1cmUoKS0+cmVzZXJ2
ZShtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKSB7CisgICAgICAgICAgICBp
ZiAoIXRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPnJlc2VydmUobV90aWxlci0+dGlsZVNpemUoKSwg
bV90ZXh0dXJlRm9ybWF0KSkgewogICAgICAgICAgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICBjbGVhbnVwUmVzb3VyY2VzKCk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwpAQCAtMzk0LDYgKzM5OSwzNiBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFy
ZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAgIC8vIHNvIHdlIGdyYWIg
YSBsb2NhbCByZWZlcmVuY2UgaGVyZSB0byBob2xkIHRoZSB1cGRhdGVyIGFsaXZlIHVudGlsIHRo
ZSBwYWludCBjb21wbGV0ZXMuCiAgICAgUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+IHByb3Rl
Y3Rvcih0ZXh0dXJlVXBkYXRlcigpKTsKICAgICB0ZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlVG9V
cGRhdGUobV9wYWludFJlY3QsIG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGlsZXItPmhhc0JvcmRl
clRleGVscygpLCBjb250ZW50c1NjYWxlKCkpOworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9U
aWxlSW5kaWNlcyhtX3JlcXVlc3RlZFVwZGF0ZVJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRv
bSk7CisgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgeworICAgICAgICBm
b3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CisgICAgICAgICAgICBVcGRhdGFi
bGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworCisgICAgICAgICAgICAvLyBUaWxlcyBhcmUg
Y3JlYXRlZCBiZWZvcmUgcHJlcGFyZVRvVXBkYXRlKCkgaXMgY2FsbGVkLgorICAgICAgICAgICAg
aWYgKCF0aWxlKQorICAgICAgICAgICAgICAgIENSQVNIKCk7CisKKyAgICAgICAgICAgIGlmICgh
dGlsZS0+aXNEaXJ0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAg
ICAvLyBDYWxjdWxhdGUgY29udGVudC1zcGFjZSByZWN0YW5nbGUgdG8gY29weSBmcm9tLgorICAg
ICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gbV90aWxlci0+dGlsZUNvbnRlbnRSZWN0KHRp
bGUpOworICAgICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QobV90aWxlci0+bGF5ZXJSZWN0
VG9Db250ZW50UmVjdCh0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0KSk7CisgICAgICAgICAgICAvLyBQ
YWludCByZWN0IG5vdCBndWFyYW50ZWVkIHRvIGxpbmUgdXAgb24gdGlsZSBib3VuZGFyaWVzLCBz
bworICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgc291cmNlUmVjdCBkb2Vzbid0IGV4dGVu
ZCBvdXRzaWRlIG9mIGl0LgorICAgICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QobV9wYWlu
dFJlY3QpOworCisgICAgICAgICAgICAvLyB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkgdXNl
cyBtX3VwZGF0ZVJlY3QgdG8gZGV0ZXJtaW5lCisgICAgICAgICAgICAvLyB0aGUgdGlsZXMgdG8g
dXBkYXRlIHNvIHdlIGNhbiBjbGVhciB0aGUgZGlydHkgcmVjdGFuZ2xlIGhlcmUuCisgICAgICAg
ICAgICB0aWxlLT5jbGVhckRpcnR5KCk7CisKKyAgICAgICAgICAgIHRpbGUtPm1fdXBkYXRlUmVj
dCA9IHNvdXJjZVJlY3Q7CisgICAgICAgICAgICBpZiAoc291cmNlUmVjdC5pc0VtcHR5KCkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHRpbGUtPnRleHR1cmUoKS0+
cHJlcGFyZVJlY3Qoc291cmNlUmVjdCk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4
dHVyZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAKaW5kZXggOTg0MzcwZWRhOTVjNTIzZjU5ZWU1NWM4
N2FjODI4NzFlMDJhNzNiYi4uODc0NWM0ZWEwYTcxMGJkZTE4ZWRlMTgyMGYzMTRmZGI4Y2M4NzJh
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAKQEAgLTQ4LDE0ICs0OCwxMiBA
QCBDQ1RleHR1cmVVcGRhdGVyOjp+Q0NUZXh0dXJlVXBkYXRlcigpCiB7CiB9CiAKLXZvaWQgQ0NU
ZXh0dXJlVXBkYXRlcjo6YXBwZW5kKE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBMYXllclRleHR1
cmVVcGRhdGVyKiB1cGRhdGVyLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRS
ZWN0JiBkZXN0UmVjdCkKK3ZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6YXBwZW5kKExheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFJlY3QmIGRlc3RSZWN0KQogewogICAgIEFTU0VSVCh0ZXh0dXJlKTsKLSAgICBBU1NF
UlQodXBkYXRlcik7CiAKICAgICBVcGRhdGVFbnRyeSBlbnRyeTsKICAgICBlbnRyeS5tX3RleHR1
cmUgPSB0ZXh0dXJlOwotICAgIGVudHJ5Lm1fdXBkYXRlciA9IHVwZGF0ZXI7CiAgICAgZW50cnku
bV9zb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKICAgICBlbnRyeS5tX2Rlc3RSZWN0ID0gZGVzdFJl
Y3Q7CiAgICAgbV9lbnRyaWVzLmFwcGVuZChlbnRyeSk7CkBAIC03MSw3ICs2OSw3IEBAIGJvb2wg
Q0NUZXh0dXJlVXBkYXRlcjo6dXBkYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBzaXpl
X3QgY291bnQpCiAgICAgc2l6ZV90IG1heEluZGV4ID0gbWluKG1fZW50cnlJbmRleCArIGNvdW50
LCBtX2VudHJpZXMuc2l6ZSgpKTsKICAgICBmb3IgKDsgbV9lbnRyeUluZGV4IDwgbWF4SW5kZXg7
ICsrbV9lbnRyeUluZGV4KSB7CiAgICAgICAgIFVwZGF0ZUVudHJ5JiBlbnRyeSA9IG1fZW50cmll
c1ttX2VudHJ5SW5kZXhdOwotICAgICAgICBlbnRyeS5tX3VwZGF0ZXItPnVwZGF0ZVRleHR1cmVS
ZWN0KGNvbnRleHQsIG1fYWxsb2NhdG9yLCBlbnRyeS5tX3RleHR1cmUsIGVudHJ5Lm1fc291cmNl
UmVjdCwgZW50cnkubV9kZXN0UmVjdCk7CisgICAgICAgIGVudHJ5Lm1fdGV4dHVyZS0+dXBkYXRl
UmVjdChjb250ZXh0LCBtX2FsbG9jYXRvciwgZW50cnkubV9zb3VyY2VSZWN0LCBlbnRyeS5tX2Rl
c3RSZWN0KTsKICAgICB9CiAKICAgICBpZiAobWF4SW5kZXggPCBtX2VudHJpZXMuc2l6ZSgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oCmluZGV4IDE3YjhhYWZhMDZjZTdhNmQyMGEwZTVm
YjRjOTE0ZTcyZmM5Mzk0YTEuLmJmNzlhYzljMmUyMmVmYzVlZGE5YTY0ODI5ZTJlZmNjZWMxNWJi
MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgKQEAgLTI3LDEzICsyNywxMiBAQAog
I2RlZmluZSBDQ1RleHR1cmVVcGRhdGVyX2gKIAogI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNs
dWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwotY2xhc3MgTGF5
ZXJUZXh0dXJlVXBkYXRlcjsKLWNsYXNzIE1hbmFnZWRUZXh0dXJlOwogY2xhc3MgVGV4dHVyZUFs
bG9jYXRvcjsKIAogY2xhc3MgQ0NUZXh0dXJlVXBkYXRlciB7CkBAIC00MSw3ICs0MCw3IEBAIHB1
YmxpYzoKICAgICBDQ1RleHR1cmVVcGRhdGVyKFRleHR1cmVBbGxvY2F0b3IqKTsKICAgICB+Q0NU
ZXh0dXJlVXBkYXRlcigpOwogCi0gICAgdm9pZCBhcHBlbmQoTWFuYWdlZFRleHR1cmUqLCBMYXll
clRleHR1cmVVcGRhdGVyKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVj
dCYgZGVzdFJlY3QpOworICAgIHZvaWQgYXBwZW5kKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7
CiAKICAgICBib29sIGhhc01vcmVVcGRhdGVzKCkgY29uc3Q7CiAKQEAgLTU0LDggKzUzLDcgQEAg
cHVibGljOgogCiBwcml2YXRlOgogICAgIHN0cnVjdCBVcGRhdGVFbnRyeSB7Ci0gICAgICAgIE1h
bmFnZWRUZXh0dXJlKiBtX3RleHR1cmU7Ci0gICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXIqIG1f
dXBkYXRlcjsKKyAgICAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSogbV90ZXh0dXJl
OwogICAgICAgICBJbnRSZWN0IG1fc291cmNlUmVjdDsKICAgICAgICAgSW50UmVjdCBtX2Rlc3RS
ZWN0OwogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1Rp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9U
aWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCAyODNlYWNlNWFkYjdkYmVmYTBhZTY1MDM1
M2YwZTBjZjQ4YmYwZDY3Li5hOTE4ZjdkNTdmNGI4ODU1NGZlNmM5NzdhMjgyMmRiZDI1YWRhYmM4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXll
ckNocm9taXVtVGVzdC5jcHAKQEAgLTQ2LDEzICs0NiwyMSBAQCBwdWJsaWM6CiAKIGNsYXNzIEZh
a2VMYXllclRleHR1cmVVcGRhdGVyIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXIgewogcHVi
bGljOgorICAgIGNsYXNzIFRleHR1cmUgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4
dHVyZSB7CisgICAgcHVibGljOgorICAgICAgICBUZXh0dXJlKFBhc3NPd25QdHI8TWFuYWdlZFRl
eHR1cmU+IHRleHR1cmUpIDogTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSh0ZXh0dXJlKSB7
IH0KKyAgICAgICAgdmlydHVhbCB+VGV4dHVyZSgpIHsgfQorCisgICAgICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIGNvbnN0
IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JikgeyB9CisgICAgfTsKKwogICAgIEZha2VMYXllclRl
eHR1cmVVcGRhdGVyKCkgeyB9CiAgICAgdmlydHVhbCB+RmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIo
KSB7IH0KIAorICAgIHZpcnR1YWwgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0
dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKSB7IHJldHVybiBhZG9w
dFB0cihuZXcgVGV4dHVyZShNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKSk7IH0KICAg
ICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4gQm90dG9tVXBPcmll
bnRhdGlvbjsgfQogICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZv
cm1hdChHQzNEZW51bSkgeyByZXR1cm4gU2FtcGxlZFRleGVsRm9ybWF0UkdCQTsgfQogICAgIHZp
cnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUm
LCBpbnQsIGZsb2F0KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3Jh
cGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1cmUqLCBjb25z
dCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpIHsgfQogfTsKIAogY2xhc3MgRmFrZUNDVGlsZWRM
YXllckltcGwgOiBwdWJsaWMgQ0NUaWxlZExheWVySW1wbCB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>