<?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>201594</bug_id>
          
          <creation_ts>2019-09-08 16:03:53 -0700</creation_ts>
          <short_desc>[FTW] ImageBuffer/ImageBufferData is highly inefficient</short_desc>
          <delta_ts>2019-09-13 10:15:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>fujii</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1569030</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-08 16:03:53 -0700</bug_when>
    <thetext>My initial implementation of ImageBuffer and ImageBufferData for Direct2D involves too much moving of data from GPU to CPU and back. We only need to make a renderable version of the ImageBuffer when ImageBuffer::sinkIntoNativeImage or ImageBuffer::copyNativeImage are called.

Currently, each ImageBuffer putData operation uploads the data to the GPU, and each ImageBuffer getData pulls the data from the GPU.

This patch does the following:

1. It makes the assumption that the ID2D1Bitmap it holds is under its control (i.e., external draw operations do not manipulate the bitmap without marking it dirty).
2. It holds a CPU copy of the data from the ID2D1Bitmap originally used to create it. It uses this data for all manipulations, and uploads to the bitmap only when
   an ID2D1Bitmap is requested for drawing.
3. It does not read back from the ID2D1Bitmap unless it is told that it is dirty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569962</commentid>
    <comment_count>1</comment_count>
      <attachid>378572</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-11 12:53:41 -0700</bug_when>
    <thetext>Created attachment 378572
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570044</commentid>
    <comment_count>2</comment_count>
      <attachid>378572</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-09-11 16:28:26 -0700</bug_when>
    <thetext>Comment on attachment 378572
Patch

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

&gt; Source/WebCore/ChangeLog:25
&gt; +           they are costly, and don&apos;t help in release builds.

I think I am missing something here. The only place that copies the image data from the CPU memory to the GPU memory is ImageBufferData::compatibleBitmap() when imageTruth == ImageTruth::BitmapOutOfDate. The scenario I could not see clearly from this patch is if putData() is called and then any drawing function is called, I would expect to see loadDataToBitmap() called.

Does ImageBufferData::compatibleBitmap() get called before we call beginDraw()?

&gt; Source/WebCore/platform/graphics/win/Direct2DOperations.cpp:410
&gt; +#if !ASSERT_DISABLED
&gt;      context-&gt;SetTags(1, __LINE__);
&gt; +#endif

How about creating a function like this:

void PlatformContextDirect2D::SetTags(D2D1_TAG tag1, D2D1_TAG tag2)
{
#if !ASSERT_DISABLED
    renderTarget()-&gt;SetTags(tag1, tag2);
#else
    UNUSED_PARAM(tag1);
    UNUSED_PARAM(tag2);
#endif
}

And it can be called anywhere without #if !ASSERT_DISABLED.

&gt; Source/WebCore/platform/graphics/win/Direct2DOperations.cpp:1034
&gt; +    platformContext.notifyObserver();

With what we need to notifyObserver()? Can the name be more specific, notifyRenderTargetFlushed() or something similar?

&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:82
&gt; +void ImageBufferData::ensureBackingStore(const IntSize&amp; size) const

I think it is better if this function returns a value, like bool for example, to indicate it succeeds or fails.

&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:111
&gt; +    auto bytesPerRowInData = rect.width() * 4;
&gt; +    Checked&lt;int&gt; height = rect.height();
&gt; +    Checked&lt;int&gt; width = rect.width();

Why do we check the overflow for width and height and we do not check the overflow for rect.width() * 4?

&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:140
&gt; +            IntSize bitmapSize = bitmap-&gt;GetPixelSize();
&gt; +            ensureBackingStore(bitmapSize);

No need for the local variable and I think we should check for the return value and return if it fails:

if (!ensureBackingStore(bitmap-&gt;GetPixelSize()))
    return nullptr;

&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:245
&gt; +    ensureBackingStore(size);
&gt; +
&gt; +    ASSERT(data);

I think we should return if we fail to allocate data.

&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.h:43
&gt; +class ImageBufferData : public PlatformContextDirect2DObserver {

This now looks a weird class. All its members and methods are public but the destructor of the base is protected while the constructor of the base is private. Can&apos;t we fix the encapsulation of this class?

&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.h:46
&gt; +    virtual ~ImageBufferData() = default;

I think you do not need to define this destructor as long as you defined in the base class,

&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.h:52
&gt; -    Vector&lt;char&gt; data;
&gt; +    mutable RefPtr&lt;JSC::Uint8ClampedArray&gt; data;

What is the reason for switching from Vector to Uint8ClampedArray?

&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.h:59
&gt; +    enum class ImageTruth { InSync, BitmapOutOfDate, BufferOutOfDate };
&gt; +    mutable ImageTruth imageTruth { ImageTruth::BufferOutOfDate };

I think these can be made private.

Also can&apos;t we use symmetric names, for example:

    enum class BitmapBufferSync { InSync, BitmapOutOfSync, BufferOutOfSync };

&gt; Source/WebCore/platform/graphics/win/ImageBufferDirect2D.cpp:229
&gt; -    if (copyBehavior == CopyBackingStore &amp;&amp; m_data.data.isEmpty())
&gt; +    if (copyBehavior == CopyBackingStore &amp;&amp; !m_data.data-&gt;length())
&gt;          copyBehavior = DontCopyBackingStore;

Why do we have DontCopyBackingStore here? It looks like we always return a null image for this copy behavior.

&gt; Source/WebCore/platform/graphics/win/PlatformContextDirect2D.h:40
&gt; +class ImageBufferData;

This forward declaration is not needed.

&gt; Source/WebCore/platform/graphics/win/PlatformContextDirect2D.h:55
&gt; +// Interface for notification about changes to a Bitmap rendering context (drawing)
&gt; +class PlatformContextDirect2DObserver : public CanMakeWeakPtr&lt;PlatformContextDirect2DObserver&gt; {
&gt; +protected:
&gt; +    virtual ~PlatformContextDirect2DObserver() = default;
&gt; +public:
&gt; +    virtual void backingContextDidChange() = 0;
&gt; +};

This class and the changes in ImageBufferData seem too much for just passing a callback. Do we plan to extend this interface for other uses? Otherwise I would suggest passing just a callback to this class instead:

class PlatformContextDirect2D {
public:
    PlatformContextDirect2D(ID2D1RenderTarget*, const WTF::Function&lt;void()&gt;&amp; observer = []() { })
        : m_observer(observer)
    {
    }

private:
    const WTF::Function&lt;void()&gt;&amp; observer  m_observer;
};

The observer callback can look like this:

ImageBuffer::ImageBuffer()
{
    m_data.platformContext = makeUnique&lt;PlatformContextDirect2D&gt;(bitmapContext.get(), ()[] {
        m_data.imageTruth = ImageTruth::BufferOutOfDate;
    });
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570146</commentid>
    <comment_count>3</comment_count>
      <attachid>378572</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-11 22:11:14 -0700</bug_when>
    <thetext>Comment on attachment 378572
Patch

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

Thanks for those great review comments. I&apos;ll work on a revised version.

&gt;&gt; Source/WebCore/ChangeLog:25
&gt;&gt; +           they are costly, and don&apos;t help in release builds.
&gt; 
&gt; I think I am missing something here. The only place that copies the image data from the CPU memory to the GPU memory is ImageBufferData::compatibleBitmap() when imageTruth == ImageTruth::BitmapOutOfDate. The scenario I could not see clearly from this patch is if putData() is called and then any drawing function is called, I would expect to see loadDataToBitmap() called.
&gt; 
&gt; Does ImageBufferData::compatibleBitmap() get called before we call beginDraw()?

That&apos;s a good point, and probably a flaw in this patch. I may need to have PlatformGraphicsContext check its state before beginning drawing operations to trigger a load from CPU memory.

&gt;&gt; Source/WebCore/platform/graphics/win/Direct2DOperations.cpp:410
&gt;&gt; +#endif
&gt; 
&gt; How about creating a function like this:
&gt; 
&gt; void PlatformContextDirect2D::SetTags(D2D1_TAG tag1, D2D1_TAG tag2)
&gt; {
&gt; #if !ASSERT_DISABLED
&gt;     renderTarget()-&gt;SetTags(tag1, tag2);
&gt; #else
&gt;     UNUSED_PARAM(tag1);
&gt;     UNUSED_PARAM(tag2);
&gt; #endif
&gt; }
&gt; 
&gt; And it can be called anywhere without #if !ASSERT_DISABLED.

Good idea!

&gt;&gt; Source/WebCore/platform/graphics/win/Direct2DOperations.cpp:1034
&gt;&gt; +    platformContext.notifyObserver();
&gt; 
&gt; With what we need to notifyObserver()? Can the name be more specific, notifyRenderTargetFlushed() or something similar?

I think your idea about a lambda is much better. I&apos;ll do that.

&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:82
&gt;&gt; +void ImageBufferData::ensureBackingStore(const IntSize&amp; size) const
&gt; 
&gt; I think it is better if this function returns a value, like bool for example, to indicate it succeeds or fails.

Okay.

&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:111
&gt;&gt; +    Checked&lt;int&gt; width = rect.width();
&gt; 
&gt; Why do we check the overflow for width and height and we do not check the overflow for rect.width() * 4?

Good point. I&apos;ll fix that.

&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:140
&gt;&gt; +            ensureBackingStore(bitmapSize);
&gt; 
&gt; No need for the local variable and I think we should check for the return value and return if it fails:
&gt; 
&gt; if (!ensureBackingStore(bitmap-&gt;GetPixelSize()))
&gt;     return nullptr;

Will do.

&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:245
&gt;&gt; +    ASSERT(data);
&gt; 
&gt; I think we should return if we fail to allocate data.

Will do.

&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.h:52
&gt;&gt; +    mutable RefPtr&lt;JSC::Uint8ClampedArray&gt; data;
&gt; 
&gt; What is the reason for switching from Vector to Uint8ClampedArray?

I thought it might be easier to copy to/from the JS clamped array passed as an argument, but it&apos;s not clear there&apos;s any benefit. I&apos;ll try the vector again and make a new measurement.

&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.h:59
&gt;&gt; +    mutable ImageTruth imageTruth { ImageTruth::BufferOutOfDate };
&gt; 
&gt; I think these can be made private.
&gt; 
&gt; Also can&apos;t we use symmetric names, for example:
&gt; 
&gt;     enum class BitmapBufferSync { InSync, BitmapOutOfSync, BufferOutOfSync };

Good idea!

&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDirect2D.cpp:229
&gt;&gt;          copyBehavior = DontCopyBackingStore;
&gt; 
&gt; Why do we have DontCopyBackingStore here? It looks like we always return a null image for this copy behavior.

Yeah -- this is all messed up right now. I need to make sure this code is doing the right thing. I just haven&apos;t hit this in a valid case yet to see what the right behavior is.

&gt;&gt; Source/WebCore/platform/graphics/win/PlatformContextDirect2D.h:40
&gt;&gt; +class ImageBufferData;
&gt; 
&gt; This forward declaration is not needed.

Will fix.

&gt;&gt; Source/WebCore/platform/graphics/win/PlatformContextDirect2D.h:55
&gt;&gt; +};
&gt; 
&gt; This class and the changes in ImageBufferData seem too much for just passing a callback. Do we plan to extend this interface for other uses? Otherwise I would suggest passing just a callback to this class instead:
&gt; 
&gt; class PlatformContextDirect2D {
&gt; public:
&gt;     PlatformContextDirect2D(ID2D1RenderTarget*, const WTF::Function&lt;void()&gt;&amp; observer = []() { })
&gt;         : m_observer(observer)
&gt;     {
&gt;     }
&gt; 
&gt; private:
&gt;     const WTF::Function&lt;void()&gt;&amp; observer  m_observer;
&gt; };
&gt; 
&gt; The observer callback can look like this:
&gt; 
&gt; ImageBuffer::ImageBuffer()
&gt; {
&gt;     m_data.platformContext = makeUnique&lt;PlatformContextDirect2D&gt;(bitmapContext.get(), ()[] {
&gt;         m_data.imageTruth = ImageTruth::BufferOutOfDate;
&gt;     });
&gt; }

Yeah, that&apos;s a great idea. I&apos;ll follow that model.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570170</commentid>
    <comment_count>4</comment_count>
      <attachid>378572</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-11 23:10:33 -0700</bug_when>
    <thetext>Comment on attachment 378572
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.h:43
&gt;&gt; +class ImageBufferData : public PlatformContextDirect2DObserver {
&gt; 
&gt; This now looks a weird class. All its members and methods are public but the destructor of the base is protected while the constructor of the base is private. Can&apos;t we fix the encapsulation of this class?

I&apos;ll revise as you suggest.

&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.h:46
&gt;&gt; +    virtual ~ImageBufferData() = default;
&gt; 
&gt; I think you do not need to define this destructor as long as you defined in the base class,

Okay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570217</commentid>
    <comment_count>5</comment_count>
      <attachid>378572</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-09-12 03:03:24 -0700</bug_when>
    <thetext>Comment on attachment 378572
Patch

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

&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:118
&gt; +        ASSERT(SUCCEEDED(hr));

You can use COMPtr&apos;s method instead of calling QueryInterface explicitly.

COMPtr&lt;ID2D1DeviceContext&gt; d2dDeviceContext(Query, platformContext-&gt;renderTarget());
ASSERT(!!d2dDeviceContext);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570432</commentid>
    <comment_count>6</comment_count>
      <attachid>378690</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-12 17:07:59 -0700</bug_when>
    <thetext>Created attachment 378690
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570503</commentid>
    <comment_count>7</comment_count>
      <attachid>378690</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-09-12 21:49:11 -0700</bug_when>
    <thetext>Comment on attachment 378690
Patch

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

&gt; Source/WebCore/ChangeLog:22
&gt; +           an ID2D1Bitmap is requested for drawing.

... and before a drawing operation is performed on the associated ImageBuffer context (i.e. the other calls to notifyPreDrawObserver).

&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:285
&gt; +    if (bitmapBufferSync == BitmapBufferSync::BitmapOutOfSync &amp;&amp; !data.isEmpty())

Should this if-statement be moved to loadDataToBitmap()?

&gt; Source/WebCore/platform/graphics/win/ImageBufferDirect2D.cpp:119
&gt; +        if (m_data.bitmapBufferSync == ImageBufferData::BitmapBufferSync::BitmapOutOfSync &amp;&amp; !m_data.data.isEmpty())

Ditto.

&gt; Source/WebCore/platform/graphics/win/ImageBufferDirect2D.cpp:122
&gt; +        m_data.bitmapBufferSync = ImageBufferData::BitmapBufferSync::BufferOutOfSync;

Should this be moved to a function in ImageBufferData for better reading, markBufferOutOfSync() for example?

&gt; Source/WebCore/platform/graphics/win/PlatformContextDirect2D.cpp:278
&gt; +    if (m_preDrawHandler)
&gt; +        m_preDrawHandler();

What is the meaning of this if statement? m_preDrawHandler is not a pointer and it does not return a value. I am wondering what the complier translates it to. But I think you just need to call m_preDrawHandler() without the if statement.

&gt; Source/WebCore/platform/graphics/win/PlatformContextDirect2D.cpp:284
&gt; +    if (m_postDrawHandler)
&gt; +        m_postDrawHandler();

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570611</commentid>
    <comment_count>8</comment_count>
      <attachid>378690</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-13 09:27:24 -0700</bug_when>
    <thetext>Comment on attachment 378690
Patch

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

Thank you for reviewing, Said!

&gt;&gt; Source/WebCore/ChangeLog:22
&gt;&gt; +           an ID2D1Bitmap is requested for drawing.
&gt; 
&gt; ... and before a drawing operation is performed on the associated ImageBuffer context (i.e. the other calls to notifyPreDrawObserver).

Good point!

&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:285
&gt;&gt; +    if (bitmapBufferSync == BitmapBufferSync::BitmapOutOfSync &amp;&amp; !data.isEmpty())
&gt; 
&gt; Should this if-statement be moved to loadDataToBitmap()?

Yes -- I think so, and I should change the method name to &quot;loadDataToBitmapIfNeeded()&quot;

&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDirect2D.cpp:122
&gt;&gt; +        m_data.bitmapBufferSync = ImageBufferData::BitmapBufferSync::BufferOutOfSync;
&gt; 
&gt; Should this be moved to a function in ImageBufferData for better reading, markBufferOutOfSync() for example?

Okay.

&gt;&gt; Source/WebCore/platform/graphics/win/PlatformContextDirect2D.cpp:278
&gt;&gt; +        m_preDrawHandler();
&gt; 
&gt; What is the meaning of this if statement? m_preDrawHandler is not a pointer and it does not return a value. I am wondering what the complier translates it to. But I think you just need to call m_preDrawHandler() without the if statement.

Oh, right. We pass an empty lambda, not a nullptr. I&apos;ll fix that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570612</commentid>
    <comment_count>9</comment_count>
      <attachid>378734</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-13 09:29:27 -0700</bug_when>
    <thetext>Created attachment 378734
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570621</commentid>
    <comment_count>10</comment_count>
      <attachid>378734</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-13 10:14:30 -0700</bug_when>
    <thetext>Comment on attachment 378734
Patch for landing

Clearing flags on attachment: 378734

Committed r249839: &lt;https://trac.webkit.org/changeset/249839&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570622</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-13 10:14:32 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570623</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-13 10:15:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/55343175&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378572</attachid>
            <date>2019-09-11 12:53:41 -0700</date>
            <delta_ts>2019-09-12 17:07:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201594-20190911125338.patch</filename>
            <type>text/plain</type>
            <size>29092</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTc3MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcxIEBACisyMDE5LTA5LTExICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIEltYWdlQnVmZmVy
L0ltYWdlQnVmZmVyRGF0YSBpcyBoaWdobHkgaW5lZmZpY2llbnQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTU5NAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE15IGluaXRpYWwgaW1wbGVtZW50YXRpb24g
b2YgSW1hZ2VCdWZmZXIgYW5kIEltYWdlQnVmZmVyRGF0YSBmb3IgRGlyZWN0MkQgaW52b2x2ZXMg
dG9vCisgICAgICAgIG11Y2ggbW92aW5nIG9mIGRhdGEgZnJvbSBHUFUgdG8gQ1BVIGFuZCBiYWNr
LiBXZSBvbmx5IG5lZWQgdG8gbWFrZSBhIHJlbmRlcmFibGUgdmVyc2lvbgorICAgICAgICBvZiB0
aGUgSW1hZ2VCdWZmZXIgd2hlbiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZSBvciBJ
bWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdlCisgICAgICAgIGFyZSBjYWxsZWQuCisKKyAgICAg
ICAgQ3VycmVudGx5LCBlYWNoIEltYWdlQnVmZmVyIHB1dERhdGEgb3BlcmF0aW9uIHVwbG9hZHMg
dGhlIGRhdGEgdG8gdGhlIEdQVSwgYW5kIGVhY2gKKyAgICAgICAgSW1hZ2VCdWZmZXIgZ2V0RGF0
YSBwdWxscyB0aGUgZGF0YSBmcm9tIHRoZSBHUFUuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2Vz
IHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgMS4gSXQgbWFrZXMgdGhlIGFzc3VtcHRpb24gdGhh
dCB0aGUgSUQyRDFCaXRtYXAgaXQgaG9sZHMgaXMgdW5kZXIgaXRzIGNvbnRyb2wgKGkuZS4sCisg
ICAgICAgICAgIGV4dGVybmFsIGRyYXcgb3BlcmF0aW9ucyBkbyBub3QgbWFuaXB1bGF0ZSB0aGUg
Yml0bWFwIHdpdGhvdXQgbWFya2luZyBpdCBkaXJ0eSkuCisgICAgICAgIDIuIEl0IGhvbGRzIGEg
Q1BVIGNvcHkgb2YgdGhlIGRhdGEgZnJvbSB0aGUgSUQyRDFCaXRtYXAgb3JpZ2luYWxseSB1c2Vk
IHRvIGNyZWF0ZSBpdC4KKyAgICAgICAgICAgSXQgdXNlcyB0aGlzIGRhdGEgZm9yIGFsbCBtYW5p
cHVsYXRpb25zLCBhbmQgdXBsb2FkcyB0byB0aGUgYml0bWFwIG9ubHkgd2hlbgorICAgICAgICAg
ICBhbiBJRDJEMUJpdG1hcCBpcyByZXF1ZXN0ZWQgZm9yIGRyYXdpbmcuCisgICAgICAgIDMuIEl0
IGRvZXMgbm90IHJlYWQgYmFjayBmcm9tIHRoZSBJRDJEMUJpdG1hcCB1bmxlc3MgaXQgaXMgdG9s
ZCB0aGF0IGl0IGlzIGRpcnR5LgorICAgICAgICA0LiBJdCBkb2VzIG5vdCBjYWxsICdJRDJEMVJl
bmRlclRhcmdldDo6U2V0VGFncycgaWYgQVNTRVJUUyBhcmUgZGlzYWJsZWQgYmVjYXVzZQorICAg
ICAgICAgICB0aGV5IGFyZSBjb3N0bHksIGFuZCBkb24ndCBoZWxwIGluIHJlbGVhc2UgYnVpbGRz
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6ZmlsbFJlY3QpOiBPbmx5IHVzZSAnU2V0
VGFncycgaWYgQVNTRVJUUyBhcmUgZW5hYmxlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJE
OjpmaWxsUm91bmRlZFJlY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0
MkQ6OmZpbGxSZWN0V2l0aEdyYWRpZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEaXJl
Y3QyRDo6ZmlsbFBhdGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpzdHJv
a2VSZWN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6c3Ryb2tlUGF0aCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OmRyYXdQYXRoKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6ZHJhd1dpdGhTaGFkb3cpOiBOb3RpZnkgb2JzZXJ2
ZXJzIHdlIGRyZXcuCisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6ZHJhd1dpdGhvdXRTaGFk
b3cpOiAgT25seSB1c2UgJ1NldFRhZ3MnIGlmIEFTU0VSVFMgYXJlIGVuYWJsZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXJlY3QyRDo6Y2xlYXJSZWN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpEaXJlY3QyRDo6ZHJhd0dseXBocyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0
MkQ6OmRyYXdOYXRpdmVJbWFnZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6
OmRyYXdSZWN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6ZHJhd0xpbmUp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpmaWxsRWxsaXBzZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OmRyYXdFbGxpcHNlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6Zmx1c2gpOiBOb3RpZnkgb2JzZXJ2ZXJzIHdlIGRyZXcu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmZpbGwpOiBPbmx5IHVzZSAnU2V0VGFncycgaWYg
QVNTRVJUUyBhcmUgZW5hYmxlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJE
YXRhOjplbnN1cmVCYWNraW5nU3RvcmUgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YSBjb25zdCk6IE9ubHkgcmVhZCBkYXRhIGlmIHRoZSBi
dWZmZXIgaXMgb3V0CisgICAgICAgIG9mIGRhdGUuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckRhdGE6OnB1dERhdGEpOiBNYXJrIGJpdG1hcCBhcyBkaXJ0eSwgYnV0IGRvbid0IHVwbG9h
ZCB0byBHUFUuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OmxvYWREYXRhVG9C
aXRtYXApOiBVcGxvYWQgZGF0YSB0byBHUFUuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckRhdGE6OmNvbXBhdGlibGVCaXRtYXApOiBPbmx5IHVwbG9hZCBkYXRhIGlmIHRoZSByZWxldmFu
dAorICAgICAgICBiaXRtYXAgaXMgb3V0IG9mIGRhdGUuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckRhdGE6OmJhY2tpbmdDb250ZXh0RGlkQ2hhbmdlKTogT2JzZXJ2ZXIgbWV0aG9kIGNh
bGxlZCB3aGVuIHRoZQorICAgICAgICBncmFwaGljcyBjb250ZXh0IHdhcyBtb2RpZmllZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOiBVcGRhdGUgY29u
c3RydWN0b3IgdG8gcmVnaXN0ZXIgdGhlIEltYWdlQnVmZmVyRGF0YQorICAgICAgICBvYmplY3Qg
YXMgYW4gb2JzZXJ2ZXIgZm9yIGRyYXcgb3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3QpOiBVcGRhdGUgZm9yIG5ldyBzdG9yYWdl
IHR5cGUgdXNlZCBpbgorICAgICAgICBJbWFnZUJ1ZmZlckRhdGEuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCk6
IFJlZ2lzdGVyIG9ic2VydmVyLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQ6Om5vdGlmeU9ic2VydmVyKTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmg6CisKIDIwMTktMDktMTEgIEFudHRpIEtv
aXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKDI0NTAwNik6
IGNhbid0IHNjcm9sbCBpbiAicmVhZCBtb3JlIiB2aWV3IGluIEV2ZW50YnJpdGUgYXBwCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
RGlyZWN0MkRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjQ5NjI5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwNSw3ICs0MDUsOSBAQCB2b2lkIGZpbGxSZWN0KFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEJiBwCiB7CiAgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRh
cmdldCgpOwogCisjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIGNvbnRleHQtPlNldFRhZ3MoMSwg
X19MSU5FX18pOworI2VuZGlmCiAgICAgRnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCop
PiBkcmF3RnVuY3Rpb24gPSBbJnBsYXRmb3JtQ29udGV4dCwgcmVjdCwgJmZpbGxTb3VyY2VdKElE
MkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKICAgICAgICAgY29uc3QgRDJEMV9SRUNU
X0YgZDJkUmVjdCA9IHJlY3Q7CiAgICAgICAgIHJlbmRlclRhcmdldC0+RmlsbFJlY3RhbmdsZSgm
ZDJkUmVjdCwgZmlsbFNvdXJjZS5icnVzaC5nZXQoKSk7CkBAIC00MjEsNyArNDIzLDkgQEAgdm9p
ZCBmaWxsUmVjdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcAogewogICAgIGF1dG8gY29udGV4
dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKIAorI2lmICFBU1NFUlRfRElTQUJM
RUQKICAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKKyNlbmRpZgogICAgIEZ1bmN0
aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4gZHJhd0Z1bmN0aW9uID0gWyZwbGF0Zm9ybUNv
bnRleHQsIGNvbG9yLCByZWN0XShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CiAg
ICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwogICAgICAgICByZW5kZXJU
YXJnZXQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhD
b2xvcihjb2xvcikuZ2V0KCkpOwpAQCAtNDM2LDcgKzQ0MCwxMCBAQCB2b2lkIGZpbGxSZWN0KFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJiBwCiB2b2lkIGZpbGxSb3VuZGVkUmVjdChQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkK
IHsKICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7CisK
KyNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgY29udGV4dC0+U2V0VGFncygxLCBfX0xJTkVfXyk7
CisjZW5kaWYKIAogICAgIGNvbnN0IEZsb2F0UmVjdCYgciA9IHJlY3QucmVjdCgpOwogICAgIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSA9IHJlY3QucmFkaWkoKTsKQEAgLTQ2
NCw3ICs0NzEsOSBAQCB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKFBsYXRmb3JtQ29uCiB7
CiAgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwogCisj
aWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIGNvbnRleHQtPlNldFRhZ3MoMSwgX19MSU5FX18pOwor
I2VuZGlmCiAKICAgICBQYXRoIHBhdGg7CiAgICAgcGF0aC5hZGRSZWN0KHJlY3QpOwpAQCAtNDg0
LDcgKzQ5MywxMCBAQCB2b2lkIGZpbGxSZWN0V2l0aEdyYWRpZW50KFBsYXRmb3JtQ29udGV4CiB7
CiAgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwogCisj
aWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIGNvbnRleHQtPlNldFRhZ3MoMSwgX19MSU5FX18pOwor
I2VuZGlmCisKICAgICBGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+IGRyYXdGdW5j
dGlvbiA9IFsmcGxhdGZvcm1Db250ZXh0LCByZWN0LCAmZ3JhZGllbnRdKElEMkQxUmVuZGVyVGFy
Z2V0KiByZW5kZXJUYXJnZXQpIHsKICAgICAgICAgY29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9
IHJlY3Q7CiAgICAgICAgIHJlbmRlclRhcmdldC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgZ3Jh
ZGllbnQpOwpAQCAtNDk5LDcgKzUxMSw5IEBAIHZvaWQgZmlsbFBhdGgoUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQmIHAKIAogICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJU
YXJnZXQoKTsKIAorI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBjb250ZXh0LT5TZXRUYWdzKDEs
IF9fTElORV9fKTsKKyNlbmRpZgogCiAgICAgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4gcGF0
aFRvRmlsbDsKICAgICBwYXRoLmNyZWF0ZUdlb21ldHJ5V2l0aEZpbGxNb2RlKGZpbGxTb3VyY2Uu
ZmlsbFJ1bGUsIHBhdGhUb0ZpbGwpOwpAQCAtNTIzLDEyICs1MzcsMTYgQEAgdm9pZCBmaWxsUGF0
aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcAogewogICAgIGF1dG8gY29udGV4dCA9IHBsYXRm
b3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKIAorI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBj
b250ZXh0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKKyNlbmRpZgogCiAgICAgQ09NUHRyPElEMkQx
R2VvbWV0cnlHcm91cD4gcGF0aFRvRmlsbDsKICAgICBwYXRoLmNyZWF0ZUdlb21ldHJ5V2l0aEZp
bGxNb2RlKFdpbmRSdWxlOjpFdmVuT2RkLCBwYXRoVG9GaWxsKTsKIAorI2lmICFBU1NFUlRfRElT
QUJMRUQKICAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKKyNlbmRpZgogCiAgICAg
RnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCopPiBkcmF3RnVuY3Rpb24gPSBbJnBsYXRm
b3JtQ29udGV4dCwgJnBhdGhUb0ZpbGwsIGNvbG9yXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVy
VGFyZ2V0KSB7CiAgICAgICAgIHJlbmRlclRhcmdldC0+RmlsbEdlb21ldHJ5KHBhdGhUb0ZpbGwu
Z2V0KCksIHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihjb2xvcikuZ2V0KCkpOwpAQCAt
NTQ2LDcgKzU2NCw5IEBAIHZvaWQgZmlsbFBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHAK
IHZvaWQgc3Ryb2tlUmVjdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCwgY29uc3QgU3Ryb2tlU291
cmNlJiBzdHJva2VTb3VyY2UsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKIHsKICAg
ICBGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+IGRyYXdGdW5jdGlvbiA9IFsmcGxh
dGZvcm1Db250ZXh0LCAmc3Ryb2tlU291cmNlLCByZWN0LCBsaW5lV2lkdGhdKElEMkQxUmVuZGVy
VGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIHJl
bmRlclRhcmdldC0+U2V0VGFncygxLCBfX0xJTkVfXyk7CisjZW5kaWYKICAgICAgICAgY29uc3Qg
RDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7CiAgICAgICAgIHJlbmRlclRhcmdldC0+RHJhd1Jl
Y3RhbmdsZSgmZDJkUmVjdCwgc3Ryb2tlU291cmNlLmJydXNoLmdldCgpLCBsaW5lV2lkdGgsIHBs
YXRmb3JtQ29udGV4dC5zdHJva2VTdHlsZSgpKTsKICAgICB9OwpAQCAtNTYxLDcgKzU4MSw5IEBA
IHZvaWQgc3Ryb2tlUGF0aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYKIHsKICAgICBhdXRvIGNv
bnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7CiAgICAgCisjaWYgIUFTU0VS
VF9ESVNBQkxFRAogICAgIGNvbnRleHQtPlNldFRhZ3MoMSwgX19MSU5FX18pOworI2VuZGlmCiAK
ICAgICBhdXRvIGJvdW5kaW5nUmVjdCA9IHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpOwogICAgIEZ1
bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4gZHJhd0Z1bmN0aW9uID0gWyZwbGF0Zm9y
bUNvbnRleHQsICZwYXRoLCAmc3Ryb2tlU291cmNlXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVy
VGFyZ2V0KSB7CkBAIC01ODAsNyArNjAyLDkgQEAgdm9pZCBkcmF3UGF0aChQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRCYgcAogCiAgICAgcGF0aC5jbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQyRDFfRklH
VVJFX0VORF9PUEVOKTsKIAorI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBjb250ZXh0LT5TZXRU
YWdzKDEsIF9fTElORV9fKTsKKyNlbmRpZgogCiAgICAgYXV0byByZWN0ID0gcGF0aC5mYXN0Qm91
bmRpbmdSZWN0KCk7CiAgICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCByZWN0
LCBbJnBsYXRmb3JtQ29udGV4dCwgJnN0cm9rZVNvdXJjZSwgJnBhdGhdKElEMkQxUmVuZGVyVGFy
Z2V0KiByZW5kZXJUYXJnZXQpIHsKQEAgLTY0MSwxMSArNjY1LDEzIEBAIHZvaWQgZHJhd1dpdGhT
aGFkb3coUGxhdGZvcm1Db250ZXh0RGlyZWMKICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQo
aHIpKTsKIAogICAgIGRyYXdXaXRoU2hhZG93SGVscGVyKGNvbnRleHQsIGJpdG1hcC5nZXQoKSwg
c2hhZG93U3RhdGUuY29sb3IsIHNoYWRvd1N0YXRlLm9mZnNldCwgc2hhZG93U3RhdGUuYmx1cik7
CisgICAgcGxhdGZvcm1Db250ZXh0Lm5vdGlmeU9ic2VydmVyKCk7CiB9CiAKIHZvaWQgZHJhd1dp
dGhvdXRTaGFkb3coUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiAvKmJvdW5kaW5nUmVjdCovLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQo
SUQyRDFSZW5kZXJUYXJnZXQqKT4mIGRyYXdDb21tYW5kcykKIHsKICAgICBkcmF3Q29tbWFuZHMo
cGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQubm90
aWZ5T2JzZXJ2ZXIoKTsKIH0KIAogdm9pZCBjbGVhclJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtNjU1LDcgKzY4
MSw5IEBAIHZvaWQgY2xlYXJSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJgogICAgICAgICBG
bG9hdFJlY3QgcmVjdFRvQ2xlYXIocmVjdCk7CiAKICAgICAgICAgaWYgKHJlY3RUb0NsZWFyLmNv
bnRhaW5zKHJlbmRlclRhcmdldFJlY3QpKSB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAg
ICAgICAgcmVuZGVyVGFyZ2V0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKKyNlbmRpZgogICAgICAg
ICAgICAgcmVuZGVyVGFyZ2V0LT5DbGVhcihEMkQxOjpDb2xvckYoMCwgMCwgMCwgMCkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC02NjMsNyArNjkxLDkgQEAgdm9pZCBjbGVh
clJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmCiAgICAgICAgIGlmICghcmVjdFRvQ2xlYXIu
aW50ZXJzZWN0cyhyZW5kZXJUYXJnZXRSZWN0KSkKICAgICAgICAgICAgIHJldHVybjsKIAorI2lm
ICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgcmVuZGVyVGFyZ2V0LT5TZXRUYWdzKDEsIF9fTElO
RV9fKTsKKyNlbmRpZgogICAgICAgICByZWN0VG9DbGVhci5pbnRlcnNlY3QocmVuZGVyVGFyZ2V0
UmVjdCk7CiAgICAgICAgIHJlbmRlclRhcmdldC0+RmlsbFJlY3RhbmdsZShyZWN0VG9DbGVhciwg
cGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKENvbG9yKEQyRDE6OkNvbG9yRigwLCAwLCAw
LCAwKSkpLmdldCgpKTsKICAgICB9KTsKQEAgLTczNCw2ICs3NjQsNyBAQCB2b2lkIGRyYXdHbHlw
aHMoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmCiAgICAgLy8gICAgIGdyYXBoaWNzQ29udGV4dC5z
ZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7CiAKICAgICBw
bGF0Zm9ybUNvbnRleHQucmVzdG9yZSgpOworICAgIHBsYXRmb3JtQ29udGV4dC5ub3RpZnlPYnNl
cnZlcigpOwogfQogCiAKQEAgLTc5Nyw3ICs4MjgsOSBAQCB2b2lkIGRyYXdOYXRpdmVJbWFnZShQ
bGF0Zm9ybUNvbnRleHREaXJlCiAgICAgICAgIH0KICAgICB9CiAKKyNpZiAhQVNTRVJUX0RJU0FC
TEVECiAgICAgY29udGV4dC0+U2V0VGFncygxLCBfX0xJTkVfXyk7CisjZW5kaWYKIAogICAgIEZ1
bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4gZHJhd0Z1bmN0aW9uID0gW2ltYWdlLCBh
ZGp1c3RlZERlc3RSZWN0LCBnbG9iYWxBbHBoYSwgc3JjUmVjdF0oSUQyRDFSZW5kZXJUYXJnZXQq
IHJlbmRlclRhcmdldCkgewogICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdCaXRtYXAoaW1hZ2Us
IGFkanVzdGVkRGVzdFJlY3QsIGdsb2JhbEFscGhhLCBEMkQxX0JJVE1BUF9JTlRFUlBPTEFUSU9O
X01PREVfTElORUFSLCBzcmNSZWN0KTsKQEAgLTg2OSw3ICs5MDIsOSBAQCB2b2lkIGRyYXdSZWN0
KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwCiAKICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9y
bUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7CiAKKyNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgY29u
dGV4dC0+U2V0VGFncygxLCBfX0xJTkVfXyk7CisjZW5kaWYKIAogICAgIGRyYXdXaXRob3V0U2hh
ZG93KHBsYXRmb3JtQ29udGV4dCwgcmVjdCwgWyZwbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGZpbGxD
b2xvciwgc3Ryb2tlQ29sb3IsIHN0cm9rZVN0eWxlXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVy
VGFyZ2V0KSB7CiAgICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwpAQCAt
OTIxLDcgKzk1Niw5IEBAIHZvaWQgZHJhd0xpbmUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHAK
ICAgICBhdXRvIHAxID0gY2VudGVyZWRQb2ludHNbMF07CiAgICAgYXV0byBwMiA9IGNlbnRlcmVk
UG9pbnRzWzFdOwogCisjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIGNvbnRleHQtPlNldFRhZ3Mo
MSwgX19MSU5FX18pOworI2VuZGlmCiAKICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0KHAxLCBw
Mik7CiAKQEAgLTk0Niw3ICs5ODMsOSBAQCB2b2lkIGZpbGxFbGxpcHNlKFBsYXRmb3JtQ29udGV4
dERpcmVjdDJECiAKICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFy
Z2V0KCk7CiAKKyNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgY29udGV4dC0+U2V0VGFncygxLCBf
X0xJTkVfXyk7CisjZW5kaWYKIAogICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4
dCwgcmVjdCwgWyZwbGF0Zm9ybUNvbnRleHQsIGVsbGlwc2UsIGZpbGxDb2xvciwgc3Ryb2tlU3R5
bGUsIHN0cm9rZUNvbG9yLCBzdHJva2VUaGlja25lc3NdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5k
ZXJUYXJnZXQpIHsKICAgICAgICAgYXV0byBmaWxsQnJ1c2ggPSBwbGF0Zm9ybUNvbnRleHQuYnJ1
c2hXaXRoQ29sb3IoZmlsbENvbG9yKTsKQEAgLTk2Nyw3ICsxMDA2LDkgQEAgdm9pZCBkcmF3RWxs
aXBzZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRAogCiAgICAgYXV0byBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwogCisjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIGNv
bnRleHQtPlNldFRhZ3MoMSwgX19MSU5FX18pOworI2VuZGlmCiAKICAgICBkcmF3V2l0aG91dFNo
YWRvdyhwbGF0Zm9ybUNvbnRleHQsIHJlY3QsIFsmcGxhdGZvcm1Db250ZXh0LCBlbGxpcHNlLCBz
dHJva2VDb2xvciwgc3Ryb2tlVGhpY2tuZXNzXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFy
Z2V0KSB7CiAgICAgICAgIGF1dG8gc3Ryb2tlQnJ1c2ggPSBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hX
aXRoQ29sb3Ioc3Ryb2tlQ29sb3IpOwpAQCAtOTkwLDYgKzEwMzEsNyBAQCB2b2lkIGZsdXNoKFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0CiAgICAgQVNTRVJUKHBsYXRmb3JtQ29udGV4dC5y
ZW5kZXJUYXJnZXQoKSk7CiAgICAgRDJEMV9UQUcgZmlyc3QsIHNlY29uZDsKICAgICBIUkVTVUxU
IGhyID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5GbHVzaCgmZmlyc3QsICZzZWNv
bmQpOworICAgIHBsYXRmb3JtQ29udGV4dC5ub3RpZnlPYnNlcnZlcigpOwogCiAgICAgUkVMRUFT
RV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCShyZXZp
c2lvbiAyNDk2MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
ZGllbnREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsOSBAQCB2b2lk
IEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCYgY29uCiAgICAgICAgICAgICBpZiAoIW1f
Y2FjaGVkSGFzaCB8fCAhbV9ncmFkaWVudCkKICAgICAgICAgICAgICAgICBnZW5lcmF0ZUdyYWRp
ZW50KGQyZENvbnRleHQpOwogCisjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICAgICAgZDJk
Q29udGV4dC0+U2V0VGFncyhHUkFESUVOVF9EUkFXSU5HLCBfX0xJTkVfXyk7CisjZW5kaWYKIAog
ICAgICAgICAgICAgY29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7CiAgICAgICAgICAg
ICBkMmRDb250ZXh0LT5GaWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBtX2dyYWRpZW50KTsKQEAgLTE0
NSw3ICsxNDcsOSBAQCB2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCYgY29uCiAg
ICAgICAgICAgICBpZiAoIW1fY2FjaGVkSGFzaCB8fCAhbV9ncmFkaWVudCkKICAgICAgICAgICAg
ICAgICBnZW5lcmF0ZUdyYWRpZW50KGQyZENvbnRleHQpOwogCisjaWYgIUFTU0VSVF9ESVNBQkxF
RAogICAgICAgICAgICAgZDJkQ29udGV4dC0+U2V0VGFncyhHUkFESUVOVF9EUkFXSU5HLCBfX0xJ
TkVfXyk7CisjZW5kaWYKIAogICAgICAgICAgICAgY29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9
IHJlY3Q7CiAgICAgICAgICAgICBkMmRDb250ZXh0LT5GaWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBt
X2dyYWRpZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAkocmV2aXNp
b24gMjQ5NjI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
QnVmZmVyRGF0YURpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksMjAgQEAg
dm9pZCBzd2l6emxlQW5kUHJlbXVsdGlwbHkoY29uc3QgdWludDhfdAogICAgIH0KIH0KIAordm9p
ZCBJbWFnZUJ1ZmZlckRhdGE6OmVuc3VyZUJhY2tpbmdTdG9yZShjb25zdCBJbnRTaXplJiBzaXpl
KSBjb25zdAoreworICAgIGlmIChzaXplID09IGJhY2tpbmdTdG9yZVNpemUgJiYgZGF0YSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYXV0byBudW1CeXRlcyA9IHNpemUuYXJlYTxSZWNvcmRPdmVy
Zmxvdz4oKSAqIDQ7CisgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgYmFja2luZ1N0b3JlU2l6ZSA9IHNpemU7CisgICAgZGF0YSA9IFVpbnQ4
Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKG51bUJ5dGVzLnVuc2FmZUdldCgp
KTsKKyAgICBBU1NFUlQoZGF0YSk7Cit9CisKIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1h
Z2VCdWZmZXJEYXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1h
dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCAvKiBhY2Nl
bGVyYXRlUmVuZGVyaW5nICovLCBmbG9hdCAvKiByZXNvbHV0aW9uU2NhbGUgKi8pIGNvbnN0CiB7
CiAgICAgYXV0byBudW1CeXRlcyA9IHJlY3QuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7CkBA
IC04Niw1MSArMTAwLDY2IEBAIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJE
YXQKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRvIHJlc3VsdCA9IFVpbnQ4Q2xh
bXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKG51bUJ5dGVzLnVuc2FmZUdldCgpKTsK
LSAgICB1bnNpZ25lZCBjaGFyKiByZXN1bHREYXRhID0gcmVzdWx0ID8gcmVzdWx0LT5kYXRhKCkg
OiBudWxscHRyOwotICAgIGlmICghcmVzdWx0RGF0YSkKKyAgICBpZiAoIXJlc3VsdCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIWJpdG1hcCkKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKIAotICAgIGNvbnRleHQtPmVuZERyYXcoKTsKLQotICAgIENPTVB0cjxJRDJEMURldmlj
ZUNvbnRleHQ+IGQyZERldmljZUNvbnRleHQ7Ci0gICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29u
dGV4dC0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEMkQxRGV2aWNl
Q29udGV4dCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmZDJkRGV2aWNlQ29udGV4dCkpOwot
ICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICBhdXRvIGJ5dGVzUGVyUm93SW5EYXRhID0g
cmVjdC53aWR0aCgpICogNDsKKyAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0gcmVjdC5oZWlnaHQo
KTsKKyAgICBDaGVja2VkPGludD4gd2lkdGggPSByZWN0LndpZHRoKCk7CiAKLSAgICBhdXRvIGJ5
dGVzUGVyUm93SW5EYXRhID0gc2l6ZS53aWR0aCgpICogNDsKKyAgICBpZiAoaW1hZ2VUcnV0aCA9
PSBJbWFnZVRydXRoOjpCdWZmZXJPdXRPZkRhdGUgfHwgIWRhdGEpIHsKKyAgICAgICAgY29udGV4
dC0+ZW5kRHJhdygpOwogCi0gICAgQ09NUHRyPElEMkQxQml0bWFwMT4gY3B1Qml0bWFwOwotICAg
IEQyRDFfQklUTUFQX1BST1BFUlRJRVMxIGJpdG1hcFByb3BlcnRpZXMyID0gRDJEMTo6Qml0bWFw
UHJvcGVydGllczEoRDJEMV9CSVRNQVBfT1BUSU9OU19DUFVfUkVBRCB8IEQyRDFfQklUTUFQX09Q
VElPTlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJEOjpwaXhlbEZvcm1hdCgpKTsKLSAgICBociA9IGQy
ZERldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChzaXplLCBudWxscHRyLCBieXRlc1BlclJvd0lu
RGF0YSwgYml0bWFwUHJvcGVydGllczIsICZjcHVCaXRtYXApOwotICAgIGlmICghU1VDQ0VFREVE
KGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIENPTVB0cjxJRDJEMURldmlj
ZUNvbnRleHQ+IGQyZERldmljZUNvbnRleHQ7CisgICAgICAgIEhSRVNVTFQgaHIgPSBwbGF0Zm9y
bUNvbnRleHQtPnJlbmRlclRhcmdldCgpLT5RdWVyeUludGVyZmFjZSgmZDJkRGV2aWNlQ29udGV4
dCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgICAgICAvLyBDb3B5IEdQ
VSBkYXRhIGZyb20gdGhlIElEMkQxQml0bWFwIHRvIGEgQ1BVLWJhY2tlZCBJRDJEMUJpdG1hcDEK
KyAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwMT4gY3B1Qml0bWFwOworICAgICAgICBEMkQxX0JJ
VE1BUF9QUk9QRVJUSUVTMSBiaXRtYXBQcm9wZXJ0aWVzMiA9IEQyRDE6OkJpdG1hcFByb3BlcnRp
ZXMxKEQyRDFfQklUTUFQX09QVElPTlNfQ1BVX1JFQUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NB
Tk5PVF9EUkFXLCBEaXJlY3QyRDo6cGl4ZWxGb3JtYXQoKSk7CisgICAgICAgIGhyID0gZDJkRGV2
aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKHNpemUsIG51bGxwdHIsIGJ5dGVzUGVyUm93SW5EYXRh
LCBiaXRtYXBQcm9wZXJ0aWVzMiwgJmNwdUJpdG1hcCk7CisgICAgICAgIGlmICghU1VDQ0VFREVE
KGhyKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGF1dG8gdGFyZ2V0
UG9zID0gRDJEMTo6UG9pbnQyVSgpOworICAgICAgICBEMkQxX1JFQ1RfVSBkYXRhUmVjdCA9IHJl
Y3Q7CisgICAgICAgIGhyID0gY3B1Qml0bWFwLT5Db3B5RnJvbUJpdG1hcCgmdGFyZ2V0UG9zLCBi
aXRtYXAuZ2V0KCksICZkYXRhUmVjdCk7CisgICAgICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIEQyRDFfTUFQUEVEX1JFQ1QgbWFw
cGVkRGF0YTsKKyAgICAgICAgaHIgPSBjcHVCaXRtYXAtPk1hcChEMkQxX01BUF9PUFRJT05TX1JF
QUQsICZtYXBwZWREYXRhKTsKKyAgICAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaWYgKG1hcHBlZERhdGEuYml0cykgeworICAg
ICAgICAgICAgSW50U2l6ZSBiaXRtYXBTaXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKKyAg
ICAgICAgICAgIGVuc3VyZUJhY2tpbmdTdG9yZShiaXRtYXBTaXplKTsKKworICAgICAgICAgICAg
QVNTRVJUKGRhdGEpOworCisgICAgICAgICAgICAvLyBTb2Z0d2FyZSBmaWx0ZXJzIGV4cGVjdCBS
R0JBIGJ5dGVzLiBXZSBuZWVkIHRvIHN3aXp6bGUgZnJvbSBEaXJlY3QyRCdzIEJHUkEgdG8gYmUg
Y29tcGF0aWJsZS4KKyAgICAgICAgICAgIGlmIChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKKyAgICAgICAgICAgICAgICBzd2l6emxlQW5k
UHJlbXVsdGlwbHk8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihtYXBw
ZWREYXRhLmJpdHMsIGhlaWdodC51bnNhZmVHZXQoKSwgd2lkdGgudW5zYWZlR2V0KCksIG1hcHBl
ZERhdGEucGl0Y2gsIGJ5dGVzUGVyUm93SW5EYXRhLCBkYXRhLT5kYXRhKCkpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHN3aXp6bGVBbmRQcmVtdWx0aXBseTxBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihtYXBwZWREYXRhLmJpdHMsIGhlaWdodC51bnNh
ZmVHZXQoKSwgd2lkdGgudW5zYWZlR2V0KCksIG1hcHBlZERhdGEucGl0Y2gsIGJ5dGVzUGVyUm93
SW5EYXRhLCBkYXRhLT5kYXRhKCkpOwogCi0gICAgRDJEMV9QT0lOVF8yVSB0YXJnZXRQb3MgPSBE
MkQxOjpQb2ludDJVKCk7Ci0gICAgRDJEMV9SRUNUX1UgZGF0YVJlY3QgPSByZWN0OwotICAgIGhy
ID0gY3B1Qml0bWFwLT5Db3B5RnJvbUJpdG1hcCgmdGFyZ2V0UG9zLCBiaXRtYXAuZ2V0KCksICZk
YXRhUmVjdCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgICAgIGJ5dGVGb3JtYXQgPSBkZXNpcmVkRm9ybWF0OwogCi0gICAgRDJEMV9N
QVBQRURfUkVDVCBtYXBwZWREYXRhOwotICAgIGhyID0gY3B1Qml0bWFwLT5NYXAoRDJEMV9NQVBf
T1BUSU9OU19SRUFELCAmbWFwcGVkRGF0YSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIGltYWdlVHJ1dGggPSBJbWFnZVRydXRo
OjpJblN5bmM7CisgICAgICAgIH0KIAotICAgIC8vIFNvZnR3YXJlIGZpbHRlcnMgZXhwZWN0IFJH
QkEgYnl0ZXMuIFdlIG5lZWQgdG8gc3dpenpsZSBmcm9tIERpcmVjdDJEJ3MgQkdSQSB0byBiZSBj
b21wYXRpYmxlLgotICAgIENoZWNrZWQ8aW50PiBoZWlnaHQgPSByZWN0LmhlaWdodCgpOwotICAg
IENoZWNrZWQ8aW50PiB3aWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICAgICAgaHIgPSBjcHVCaXRt
YXAtPlVubWFwKCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKIAotICAgIGlmIChk
ZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkK
LSAgICAgICAgc3dpenpsZUFuZFByZW11bHRpcGx5PEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZD4obWFwcGVkRGF0YS5iaXRzLCBoZWlnaHQudW5zYWZlR2V0KCksIHdpZHRo
LnVuc2FmZUdldCgpLCBtYXBwZWREYXRhLnBpdGNoLCBieXRlc1BlclJvd0luRGF0YSwgcmVzdWx0
RGF0YSk7Ci0gICAgZWxzZQotICAgICAgICBzd2l6emxlQW5kUHJlbXVsdGlwbHk8QWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4obWFwcGVkRGF0YS5iaXRzLCBoZWlnaHQudW5z
YWZlR2V0KCksIHdpZHRoLnVuc2FmZUdldCgpLCBtYXBwZWREYXRhLnBpdGNoLCBieXRlc1BlclJv
d0luRGF0YSwgcmVzdWx0RGF0YSk7CisgICAgICAgIGNvbnRleHQtPmJlZ2luRHJhdygpOworICAg
IH0KIAotICAgIGhyID0gY3B1Qml0bWFwLT5Vbm1hcCgpOwotICAgIEFTU0VSVChTVUNDRUVERUQo
aHIpKTsKLQotICAgIGNvbnRleHQtPmJlZ2luRHJhdygpOworICAgIGlmIChkYXRhKQorICAgICAg
ICByZXN1bHQtPnNldFJhbmdlKGRhdGEtPmRhdGEoKSwgZGF0YS0+bGVuZ3RoKCksIDApOwogCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTIwMywxMyArMjMyLDMzIEBAIHZvaWQgSW1hZ2VCdWZm
ZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQKICAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQg
PD0gMCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29udGV4dC0+ZW5kRHJhdygpOwotCisjaWYg
IUFTU0VSVF9ESVNBQkxFRAogICAgIGF1dG8gcGl4ZWxTaXplID0gYml0bWFwLT5HZXRQaXhlbFNp
emUoKTsKICAgICBBU1NFUlQocGl4ZWxTaXplLndpZHRoID49IHNvdXJjZVNpemUud2lkdGgoKSk7
CiAgICAgQVNTRVJUKHBpeGVsU2l6ZS53aWR0aCA+PSBzaXplLndpZHRoKCkpOwogICAgIEFTU0VS
VChwaXhlbFNpemUuaGVpZ2h0ID49IHNvdXJjZVNpemUuaGVpZ2h0KCkpOwogICAgIEFTU0VSVChw
aXhlbFNpemUuaGVpZ2h0ID49IHNpemUuaGVpZ2h0KCkpOworI2VuZGlmCisKKyAgICBlbnN1cmVC
YWNraW5nU3RvcmUoc2l6ZSk7CisKKyAgICBBU1NFUlQoZGF0YSk7CisKKyAgICBkYXRhLT5zZXRS
YW5nZShzb3VyY2UuZGF0YSgpLCBzb3VyY2UubGVuZ3RoKCksIDApOworCisgICAgYnl0ZUZvcm1h
dCA9IHNvdXJjZUZvcm1hdDsKKyAgICBpbWFnZVRydXRoID0gSW1hZ2VUcnV0aDo6Qml0bWFwT3V0
T2ZEYXRlOworfQorCit2b2lkIEltYWdlQnVmZmVyRGF0YTo6bG9hZERhdGFUb0JpdG1hcChjb25z
dCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJj
ZUZvcm1hdCkKK3sKKyAgICBhdXRvIHBpeGVsU2l6ZSA9IGJpdG1hcC0+R2V0UGl4ZWxTaXplKCk7
CisgICAgQVNTRVJUKHBpeGVsU2l6ZS53aWR0aCA+PSBiYWNraW5nU3RvcmVTaXplLndpZHRoKCkp
OworICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0ID49IGJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0
KCkpOworCisgICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0g
cGl4ZWxTaXplLndpZHRoICogcGl4ZWxTaXplLmhlaWdodCAqIDQ7CisgICAgaWYgKG51bUJ5dGVz
Lmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gU29mdHdhcmUgZ2Vu
ZXJhdGVkIGJpdG1hcCBkYXRhIGlzIGluIFJHQkEuIFdlIG5lZWQgdG8gc3dpenpsZSB0byBwcmVt
dWx0aXBsaWVkIEJHUkEgdG8gYmUgY29tcGF0aWJsZQogICAgIC8vIHdpdGggdGhlIEhXTkQvSERD
IHJlbmRlciBiYWNraW5nIHdlIHVzZS4KQEAgLTIxOCwyOCArMjY3LDI5IEBAIHZvaWQgSW1hZ2VC
dWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQKICAgICBlbHNlCiAgICAgICAgIGluUGxhY2VT
d2l6emxlPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ+KHNvdXJjZS5kYXRh
KCksIHNvdXJjZS5sZW5ndGgoKSk7IC8vIFBSR0JBIC0+IFBCR1JBCiAKKyAgICAvLyBDb3B5IHRo
ZSBiaXRzIGZyb20gY3VycmVudCByZW5kZXJUYXJnZXQgdG8gdGhlIG91dHB1dCB0YXJnZXQuCisg
ICAgLy8gV2UgY2Fubm90IGFjY2VzcyB0aGUgZGF0YSBiYWNraW5nIGFuIElXSUNCaXRtYXAgb3Ig
SUQyRDFCaXRtYXAgd2hpbGUgYW4gYWN0aXZlIGRyYXcgc2Vzc2lvbiBpcyBvcGVuLgorICAgIGNv
bnRleHQtPmVuZERyYXcoKTsKKwogICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4g
Yml0bWFwUmVuZGVyVGFyZ2V0OwotICAgIEhSRVNVTFQgaHIgPSBwbGF0Zm9ybUNvbnRleHQtPnJl
bmRlclRhcmdldCgpLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDJEMUJpdG1hcFJlbmRlclRh
cmdldCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYml0bWFwUmVuZGVyVGFyZ2V0KSk7Cisg
ICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5SW50
ZXJmYWNlKCZiaXRtYXBSZW5kZXJUYXJnZXQpOwogICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsK
IAotICAgIGF1dG8gYnl0ZXNQZXJSb3dJbkRhdGEgPSBzb3VyY2VSZWN0LndpZHRoKCkgKiA0Owot
Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBzd2l6emxlZEJpdG1hcDsKLSAgICBEMkQxX0JJVE1B
UF9QUk9QRVJUSUVTIGJpdG1hcFByb3BlcnRpZXMgPSBEMkQxOjpCaXRtYXBQcm9wZXJ0aWVzKERp
cmVjdDJEOjpwaXhlbEZvcm1hdCgpKTsKLSAgICBociA9IGJpdG1hcFJlbmRlclRhcmdldC0+Q3Jl
YXRlQml0bWFwKHNvdXJjZVNpemUsIHNvdXJjZS5kYXRhKCksIGJ5dGVzUGVyUm93SW5EYXRhLCBi
aXRtYXBQcm9wZXJ0aWVzLCAmc3dpenpsZWRCaXRtYXApOwotICAgIGlmICghU1VDQ0VFREVEKGhy
KSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gYnl0ZXNQZXJSb3dJbkRhdGEgPSBiYWNraW5n
U3RvcmVTaXplLndpZHRoKCkgKiA0OwogCi0gICAgRDJEMV9QT0lOVF8yVSBkZXN0UG9pbnREMkQg
PSBkZXN0UG9pbnQ7Ci0gICAgRDJEMV9SRUNUX1Ugc3JjUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAg
aHIgPSBiaXRtYXAtPkNvcHlGcm9tTWVtb3J5KCZzcmNSZWN0LCBzb3VyY2UuZGF0YSgpLCBieXRl
c1BlclJvd0luRGF0YSk7CisgICAgaHIgPSBiaXRtYXAtPkNvcHlGcm9tTWVtb3J5KG51bGxwdHIs
IHNvdXJjZS5kYXRhKCksIGJ5dGVzUGVyUm93SW5EYXRhKTsKICAgICBBU1NFUlQoU1VDQ0VFREVE
KGhyKSk7CiAKICAgICBjb250ZXh0LT5iZWdpbkRyYXcoKTsKKworICAgIGltYWdlVHJ1dGggPSBJ
bWFnZVRydXRoOjpJblN5bmM7CiB9CiAKIENPTVB0cjxJRDJEMUJpdG1hcD4gSW1hZ2VCdWZmZXJE
YXRhOjpjb21wYXRpYmxlQml0bWFwKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCiB7
CisgICAgaWYgKGRhdGEgJiYgaW1hZ2VUcnV0aCA9PSBJbWFnZVRydXRoOjpCaXRtYXBPdXRPZkRh
dGUpCisgICAgICAgIGxvYWREYXRhVG9CaXRtYXAoKmRhdGEsIGJ5dGVGb3JtYXQpOworCiAgICAg
aWYgKCFyZW5kZXJUYXJnZXQpCiAgICAgICAgIHJldHVybiBiaXRtYXA7CiAKQEAgLTI4Miw3ICsz
MzIsNyBAQCBDT01QdHI8SUQyRDFCaXRtYXA+IEltYWdlQnVmZmVyRGF0YTo6Y29tCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gdGFyZ2V0
RGV2aWNlQ29udGV4dDsKLSAgICBociA9IHJlbmRlclRhcmdldC0+UXVlcnlJbnRlcmZhY2UoX191
dWlkb2YoSUQyRDFEZXZpY2VDb250ZXh0KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ0YXJn
ZXREZXZpY2VDb250ZXh0KSk7CisgICAgaHIgPSByZW5kZXJUYXJnZXQtPlF1ZXJ5SW50ZXJmYWNl
KCZ0YXJnZXREZXZpY2VDb250ZXh0KTsKICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAKICAg
ICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvbXBhdGlibGVCaXRtYXA7CkBAIC0yOTgsNiArMzQ4LDEx
IEBAIENPTVB0cjxJRDJEMUJpdG1hcD4gSW1hZ2VCdWZmZXJEYXRhOjpjb20KICAgICByZXR1cm4g
Y29tcGF0aWJsZUJpdG1hcDsKIH0KIAordm9pZCBJbWFnZUJ1ZmZlckRhdGE6OmJhY2tpbmdDb250
ZXh0RGlkQ2hhbmdlKCkKK3sKKyAgICBpbWFnZVRydXRoID0gSW1hZ2VUcnV0aDo6QnVmZmVyT3V0
T2ZEYXRlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJE
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlQnVmZmVyRGF0YURpcmVjdDJELmgJKHJldmlzaW9uIDI0OTYyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1
ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3Rm
L0NoZWNrZWRBcml0aG1ldGljLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtMzksMjAg
KzQwLDMzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQ7CiAKLXN0cnVjdCBJbWFnZUJ1ZmZlckRhdGEgewotICAgIEludFNpemUgYmFja2luZ1N0
b3JlU2l6ZTsKK2NsYXNzIEltYWdlQnVmZmVyRGF0YSA6IHB1YmxpYyBQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRE9ic2VydmVyIHsKK3B1YmxpYzoKKyAgICBJbWFnZUJ1ZmZlckRhdGEoKSA9IGRlZmF1
bHQ7CisgICAgdmlydHVhbCB+SW1hZ2VCdWZmZXJEYXRhKCkgPSBkZWZhdWx0OworCisgICAgbXV0
YWJsZSBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemU7CiAgICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVj
b3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93OwogCiAgICAgLy8gT25seSBmb3Igc29mdHdhcmUgSW1h
Z2VCdWZmZXJzLgotICAgIFZlY3RvcjxjaGFyPiBkYXRhOworICAgIG11dGFibGUgUmVmUHRyPEpT
Qzo6VWludDhDbGFtcGVkQXJyYXk+IGRhdGE7CisgICAgbXV0YWJsZSBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGJ5dGVGb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+IHBsYXRm
b3JtQ29udGV4dDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0
OwogICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gYml0bWFwOwogCisgICAgZW51bSBjbGFzcyBJbWFn
ZVRydXRoIHsgSW5TeW5jLCBCaXRtYXBPdXRPZkRhdGUsIEJ1ZmZlck91dE9mRGF0ZSB9OworICAg
IG11dGFibGUgSW1hZ2VUcnV0aCBpbWFnZVRydXRoIHsgSW1hZ2VUcnV0aDo6QnVmZmVyT3V0T2ZE
YXRlIH07CisKICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldERhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2Vs
ZXJhdGVSZW5kZXJpbmcsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkgY29uc3Q7CiAgICAgdm9pZCBw
dXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXpl
JiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpOwogCiAg
ICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb21wYXRpYmxlQml0bWFwKElEMkQxUmVuZGVyVGFyZ2V0
Kik7CisKKyAgICB2b2lkIGJhY2tpbmdDb250ZXh0RGlkQ2hhbmdlKCkgb3ZlcnJpZGU7CisgICAg
dm9pZCBlbnN1cmVCYWNraW5nU3RvcmUoY29uc3QgSW50U2l6ZSYpIGNvbnN0OworICAgIHZvaWQg
bG9hZERhdGFUb0JpdG1hcChjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCk7CisKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1
ZmZlckRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI0OTYyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJE
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIEltYWdlQnVmZmVyOjpJbWFn
ZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUKICAgICBpZiAoIVNVQ0NFRURFRChocikpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fZGF0YS5wbGF0Zm9ybUNvbnRleHQgPSBtYWtlVW5pcXVlPFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEPihiaXRtYXBDb250ZXh0LmdldCgpKTsKKyAgICBtX2RhdGEucGxh
dGZvcm1Db250ZXh0ID0gbWFrZVVuaXF1ZTxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4oYml0bWFw
Q29udGV4dC5nZXQoKSwgbWFrZVdlYWtQdHIobV9kYXRhKSk7CiAgICAgbV9kYXRhLmNvbnRleHQg
PSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4obV9kYXRhLnBsYXRmb3JtQ29udGV4dC5nZXQo
KSwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5
KTsKIAogICAgIHN1Y2Nlc3MgPSB0cnVlOwpAQCAtMjI1LDcgKzIyNSw3IEBAIENPTVB0cjxJRDJE
MUJpdG1hcD4gSW1hZ2VCdWZmZXI6OmNvcHlOYXQKICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7
CiAKICAgICAvLyBGSVhNRTogbV9kYXRhLmRhdGEgaXMgbnVsbHB0ciBldmVuIHdoZW4gYXNraW5n
IHRvIGNvcHkgYmFja2luZyBzdG9yZSBsZWFkaW5nIHRvIHRlc3QgZmFpbHVyZXMuCi0gICAgaWYg
KGNvcHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlICYmIG1fZGF0YS5kYXRhLmlzRW1wdHko
KSkKKyAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUgJiYgIW1fZGF0YS5k
YXRhLT5sZW5ndGgoKSkKICAgICAgICAgY29weUJlaGF2aW9yID0gRG9udENvcHlCYWNraW5nU3Rv
cmU7CiAKICAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hl
Y2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhl
aWdodCgpKSAqIG1fZGF0YS5ieXRlc1BlclJvdzsKQEAgLTIzOCw3ICsyMzgsNyBAQCBDT01QdHI8
SUQyRDFCaXRtYXA+IEltYWdlQnVmZmVyOjpjb3B5TmF0CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOgogICAgICAgICAgICAgRDJEMV9SRUNUX1UgYmFj
a2luZ1N0b3JlRGltZW5zdGlvbnMgPSBJbnRSZWN0KEludFBvaW50KCksIG1fZGF0YS5iYWNraW5n
U3RvcmVTaXplKTsKLSAgICAgICAgICAgIGltYWdlLT5Db3B5RnJvbU1lbW9yeSgmYmFja2luZ1N0
b3JlRGltZW5zdGlvbnMsIG1fZGF0YS5kYXRhLmRhdGEoKSwgMzIpOworICAgICAgICAgICAgaW1h
Z2UtPkNvcHlGcm9tTWVtb3J5KCZiYWNraW5nU3RvcmVEaW1lbnN0aW9ucywgbV9kYXRhLmRhdGEt
PmRhdGEoKSwgMzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERp
cmVjdDJELmNwcAkocmV2aXNpb24gMjQ5NjI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAsOCArNDAsOSBAQCBwdWJsaWM6CiAgICAgU3RhdGUoKSA9IGRlZmF1bHQ7CiB9OwogCi1Q
bGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQoSUQyRDFSZW5k
ZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKK1BsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0LCBXZWFrUHRy
PFBsYXRmb3JtQ29udGV4dERpcmVjdDJET2JzZXJ2ZXI+IG9ic2VydmVyKQogICAgIDogbV9yZW5k
ZXJUYXJnZXQocmVuZGVyVGFyZ2V0KQorICAgICwgbV9vYnNlcnZlcihvYnNlcnZlcikKIHsKICAg
ICBtX3N0YXRlU3RhY2suYXBwZW5kKFN0YXRlKCkpOwogICAgIG1fc3RhdGUgPSAmbV9zdGF0ZVN0
YWNrLmxhc3QoKTsKQEAgLTI2MCw2ICsyNjEsMTIgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRDo6ZW5kRHJhdygpCiAgICAgLS1iZWdpbkRyYXdDb3VudDsKIH0KIAordm9pZCBQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRDo6bm90aWZ5T2JzZXJ2ZXIoKQoreworICAgIGlmIChtX29ic2VydmVy
KQorICAgICAgICBtX29ic2VydmVyLT5iYWNraW5nQ29udGV4dERpZENoYW5nZSgpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaAkocmV2aXNpb24gMjQ5NjI5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkNPTVB0ci5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgPFdURi9XZWFrUHRyLmg+CiAjaW5j
bHVkZSA8ZDJkMS5oPgogI2luY2x1ZGUgPGQyZDFfMS5oPgogI2luY2x1ZGUgPGQyZDFlZmZlY3Rz
Lmg+CkBAIC0zNiw2ICszNyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKK2NsYXNzIEltYWdlQnVmZmVyRGF0YTsKIHN0cnVj
dCBHcmFwaGljc0NvbnRleHRTdGF0ZTsKIAogbmFtZXNwYWNlIERpcmVjdDJEIHsKQEAgLTQ0LDEx
ICs0NiwxOSBAQCBzdHJ1Y3QgU3Ryb2tlU291cmNlOwogc3RydWN0IFNoYWRvd1N0YXRlOwogfQog
CisvLyBJbnRlcmZhY2UgZm9yIG5vdGlmaWNhdGlvbiBhYm91dCBjaGFuZ2VzIHRvIGEgQml0bWFw
IHJlbmRlcmluZyBjb250ZXh0IChkcmF3aW5nKQorY2xhc3MgUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkRPYnNlcnZlciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RE9ic2VydmVyPiB7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+UGxhdGZvcm1Db250ZXh0RGly
ZWN0MkRPYnNlcnZlcigpID0gZGVmYXVsdDsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgYmFj
a2luZ0NvbnRleHREaWRDaGFuZ2UoKSA9IDA7Cit9OworCiBjbGFzcyBQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQpOwogcHVibGljOgotICAgIFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEKElEMkQxUmVuZGVyVGFyZ2V0Kik7CisgICAgUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQoSUQyRDFSZW5kZXJUYXJnZXQqLCBXZWFrUHRyPFBsYXRmb3JtQ29udGV4dERpcmVj
dDJET2JzZXJ2ZXI+ID0gbnVsbHB0cik7CiAgICAgflBsYXRmb3JtQ29udGV4dERpcmVjdDJEKCk7
CiAKICAgICBJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KCkgeyByZXR1cm4gbV9yZW5k
ZXJUYXJnZXQuZ2V0KCk7IH0KQEAgLTEwOSw2ICsxMTksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRCbGVuZE1vZGUoRDJEMV9CTEVORF9NT0RFIG1vZGUpIHsgbV9ibGVuZE1vZGUgPSBtb2RlOyB9
CiAgICAgdm9pZCBzZXRDb21wb3NpdGVNb2RlKEQyRDFfQ09NUE9TSVRFX01PREUgbW9kZSkgeyBt
X2NvbXBvc2l0ZU1vZGUgPSBtb2RlOyB9CiAKKyAgICB2b2lkIG5vdGlmeU9ic2VydmVyKCk7CisK
IHByaXZhdGU6CiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2dyYXBoaWNz
Q29udGV4dFByaXZhdGUgeyBudWxscHRyIH07CiAKQEAgLTEyMyw2ICsxMzUsOCBAQCBwcml2YXRl
OgogICAgIENPTVB0cjxJRDJEMUJpdG1hcEJydXNoPiBtX3BhdHRlcm5TdHJva2VCcnVzaDsKICAg
ICBDT01QdHI8SUQyRDFCaXRtYXBCcnVzaD4gbV9wYXR0ZXJuRmlsbEJydXNoOwogCisgICAgV2Vh
a1B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRE9ic2VydmVyPiBtX29ic2VydmVyOworCiAgICAg
Y2xhc3MgU3RhdGU7CiAgICAgU3RhdGUqIG1fc3RhdGUgeyBudWxscHRyIH07CiAgICAgVmVjdG9y
PFN0YXRlPiBtX3N0YXRlU3RhY2s7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378690</attachid>
            <date>2019-09-12 17:07:59 -0700</date>
            <delta_ts>2019-09-13 09:29:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201594-20190912170755.patch</filename>
            <type>text/plain</type>
            <size>29680</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTgxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBACisyMDE5LTA5LTEyICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIEltYWdlQnVmZmVy
L0ltYWdlQnVmZmVyRGF0YSBpcyBoaWdobHkgaW5lZmZpY2llbnQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTU5NAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE15IGluaXRpYWwgaW1wbGVtZW50YXRpb24g
b2YgSW1hZ2VCdWZmZXIgYW5kIEltYWdlQnVmZmVyRGF0YSBmb3IgRGlyZWN0MkQgaW52b2x2ZXMg
dG9vCisgICAgICAgIG11Y2ggbW92aW5nIG9mIGRhdGEgZnJvbSBHUFUgdG8gQ1BVIGFuZCBiYWNr
LiBXZSBvbmx5IG5lZWQgdG8gbWFrZSBhIHJlbmRlcmFibGUgdmVyc2lvbgorICAgICAgICBvZiB0
aGUgSW1hZ2VCdWZmZXIgd2hlbiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZSBvciBJ
bWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdlCisgICAgICAgIGFyZSBjYWxsZWQuCisKKyAgICAg
ICAgQ3VycmVudGx5LCBlYWNoIEltYWdlQnVmZmVyIHB1dERhdGEgb3BlcmF0aW9uIHVwbG9hZHMg
dGhlIGRhdGEgdG8gdGhlIEdQVSwgYW5kIGVhY2gKKyAgICAgICAgSW1hZ2VCdWZmZXIgZ2V0RGF0
YSBwdWxscyB0aGUgZGF0YSBmcm9tIHRoZSBHUFUuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2Vz
IHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgMS4gSXQgbWFrZXMgdGhlIGFzc3VtcHRpb24gdGhh
dCB0aGUgSUQyRDFCaXRtYXAgaXQgaG9sZHMgaXMgdW5kZXIgaXRzIGNvbnRyb2wgKGkuZS4sCisg
ICAgICAgICAgIGV4dGVybmFsIGRyYXcgb3BlcmF0aW9ucyBkbyBub3QgbWFuaXB1bGF0ZSB0aGUg
Yml0bWFwIHdpdGhvdXQgbWFya2luZyBpdCBkaXJ0eSkuCisgICAgICAgIDIuIEl0IGhvbGRzIGEg
Q1BVIGNvcHkgb2YgdGhlIGRhdGEgZnJvbSB0aGUgSUQyRDFCaXRtYXAgb3JpZ2luYWxseSB1c2Vk
IHRvIGNyZWF0ZSBpdC4KKyAgICAgICAgICAgSXQgdXNlcyB0aGlzIGRhdGEgZm9yIGFsbCBtYW5p
cHVsYXRpb25zLCBhbmQgdXBsb2FkcyB0byB0aGUgYml0bWFwIG9ubHkgd2hlbgorICAgICAgICAg
ICBhbiBJRDJEMUJpdG1hcCBpcyByZXF1ZXN0ZWQgZm9yIGRyYXdpbmcuCisgICAgICAgIDMuIEl0
IGRvZXMgbm90IHJlYWQgYmFjayBmcm9tIHRoZSBJRDJEMUJpdG1hcCB1bmxlc3MgaXQgaXMgdG9s
ZCB0aGF0IGl0IGlzIGRpcnR5LgorICAgICAgICA0LiBJdCBkb2VzIG5vdCBjYWxsICdJRDJEMVJl
bmRlclRhcmdldDo6U2V0VGFncycgaWYgQVNTRVJUUyBhcmUgZGlzYWJsZWQgYmVjYXVzZQorICAg
ICAgICAgICB0aGV5IGFyZSBjb3N0bHksIGFuZCBkb24ndCBoZWxwIGluIHJlbGVhc2UgYnVpbGRz
LgorIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OmZpbGxSZWN0KTogVXNlIG5ldyAnc2V0
VGFncycgbWV0aG9kLgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OmZpbGxSb3VuZGVkUmVj
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6ZmlsbFJlY3RXaXRo
R3JhZGllbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpmaWxsUGF0aCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OnN0cm9rZVJlY3QpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpzdHJva2VQYXRoKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpEaXJlY3QyRDo6ZHJhd1BhdGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkRpcmVjdDJEOjpkcmF3V2l0aFNoYWRvdyk6IE5vdGlmeSBvYnNlcnZlcnMgYmVmb3JlIGFuZCBh
ZnRlciB3ZSBkcmV3LgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OmRyYXdXaXRob3V0U2hh
ZG93KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6Y2xlYXJSZWN0KTogVXNl
IG5ldyAnc2V0VGFncycgbWV0aG9kLgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OmRyYXdH
bHlwaHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpkcmF3TmF0aXZlSW1h
Z2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpkcmF3UmVjdCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OmRyYXdMaW5lKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpEaXJlY3QyRDo6ZmlsbEVsbGlwc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkRpcmVjdDJEOjpkcmF3RWxsaXBzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGly
ZWN0MkQ6OmZsdXNoKTogTm90aWZ5IG9ic2VydmVyIGFmdGVyIHdlIGRyZXcuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhZGllbnQ6OmZpbGwpOiBEb24ndCBjYWxsIFNldFRhZ3MgaW4gbm9uLUFTU0VSVCBi
dWlsZHMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURp
cmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6ZW5zdXJlQmFj
a2luZ1N0b3JlIGNvbnN0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRh
dGE6OmdldERhdGEgY29uc3QpOiBPbmx5IHJlYWQgZnJvbSB0aGUgR1BVIGlmIHRoZSBpbi1tZW1v
cnkKKyAgICAgICAgc3RvcmUgaXMgZW1wdHkgb3Igb3V0LW9mLXN5bmMuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEpOiBNYXJrIHRoZSBiaXRtYXAgYXMgb3V0LW9m
LXN5bmMsIGJ1dCBkb24ndAorICAgICAgICB1cGxvYWQgdGhlIGRhdGEgeWV0LgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpsb2FkRGF0YVRvQml0bWFwKTogSGVscGVyIGZ1bmN0
aW9uIHRvIHVwbG9hZCBkYXRhIHRvIHRoZSBHUFUuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckRhdGE6OmNvbXBhdGlibGVCaXRtYXApOiBPbmx5IHVwbG9hZCBkYXRhIGlmIHRoZSByZWxl
dmFudAorICAgICAgICBiaXRtYXAgaXMgb3V0IG9mIGRhdGUuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKTogVXBkYXRlIGNvbnN0cnVjdG9yIHRvIHJlZ2lz
dGVyIHRoZSBJbWFnZUJ1ZmZlckRhdGEKKyAgICAgICAgbGFtYmRhcyBhcyBvYnNlcnZlciBmb3Ig
ZHJhdyBvcGVyYXRpb25zLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9y
bUNvbnRleHREaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRDo6UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQpOiBVcGRhdGUgY29uc3RydWN0b3IgdG8g
YWNjZXB0CisgICAgICAgIGxhbWJkYXMgdG8gcnVuIGJlZm9yZSBhbmQgYWZ0ZXIgZHJhdyBvcGVy
YXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldFRh
Z3MpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpu
b3RpZnlQcmVEcmF3T2JzZXJ2ZXIpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEOjpub3RpZnlQb3N0RHJhd09ic2VydmVyKTogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmg6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6UGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQpOgorCiAyMDE5LTA5LTEyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAK
ICAgICAgICAgW1dLVFJdIERyb3AgVGVzdFJ1bm5lci5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVk
X0RFUFJFQ0FURUQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0RpcmVjdDJET3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI0OTgw
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSAiRGly
ZWN0MkRVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5oIgogI2luY2x1ZGUgIkltYWdl
LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKQEAgLTQwNSw3ICs0MDQsNyBAQCB2b2lkIGZp
bGxSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwCiB7CiAgICAgYXV0byBjb250ZXh0ID0g
cGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwogCi0gICAgY29udGV4dC0+U2V0VGFncygx
LCBfX0xJTkVfXyk7CisgICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwog
ICAgIEZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4gZHJhd0Z1bmN0aW9uID0gWyZw
bGF0Zm9ybUNvbnRleHQsIHJlY3QsICZmaWxsU291cmNlXShJRDJEMVJlbmRlclRhcmdldCogcmVu
ZGVyVGFyZ2V0KSB7CiAgICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0Owog
ICAgICAgICByZW5kZXJUYXJnZXQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIGZpbGxTb3VyY2Uu
YnJ1c2guZ2V0KCkpOwpAQCAtNDIxLDcgKzQyMCw3IEBAIHZvaWQgZmlsbFJlY3QoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmIHAKIHsKICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQu
cmVuZGVyVGFyZ2V0KCk7CiAKLSAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKKyAg
ICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7CiAgICAgRnVuY3Rpb248dm9p
ZChJRDJEMVJlbmRlclRhcmdldCopPiBkcmF3RnVuY3Rpb24gPSBbJnBsYXRmb3JtQ29udGV4dCwg
Y29sb3IsIHJlY3RdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKICAgICAgICAg
Y29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7CiAgICAgICAgIHJlbmRlclRhcmdldC0+
RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKGNv
bG9yKS5nZXQoKSk7CkBAIC00MzYsNyArNDM1LDggQEAgdm9pZCBmaWxsUmVjdChQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYgcAogdm9pZCBmaWxsUm91bmRlZFJlY3QoUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCiB7CiAgICAg
YXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotICAgIGNvbnRl
eHQtPlNldFRhZ3MoMSwgX19MSU5FX18pOworCisgICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3Mo
MSwgX19MSU5FX18pOwogCiAgICAgY29uc3QgRmxvYXRSZWN0JiByID0gcmVjdC5yZWN0KCk7CiAg
ICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpID0gcmVjdC5yYWRpaSgpOwpA
QCAtNDY0LDcgKzQ2NCw3IEBAIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoUGxhdGZvcm1D
b24KIHsKICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7
CiAKLSAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKKyAgICBwbGF0Zm9ybUNvbnRl
eHQuc2V0VGFncygxLCBfX0xJTkVfXyk7CiAKICAgICBQYXRoIHBhdGg7CiAgICAgcGF0aC5hZGRS
ZWN0KHJlY3QpOwpAQCAtNDg0LDcgKzQ4NCw3IEBAIHZvaWQgZmlsbFJlY3RXaXRoR3JhZGllbnQo
UGxhdGZvcm1Db250ZXgKIHsKICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVu
ZGVyVGFyZ2V0KCk7CiAKLSAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKKyAgICBw
bGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7CiAgICAgRnVuY3Rpb248dm9pZChJ
RDJEMVJlbmRlclRhcmdldCopPiBkcmF3RnVuY3Rpb24gPSBbJnBsYXRmb3JtQ29udGV4dCwgcmVj
dCwgJmdyYWRpZW50XShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CiAgICAgICAg
IGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwogICAgICAgICByZW5kZXJUYXJnZXQt
PkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIGdyYWRpZW50KTsKQEAgLTQ5OSwxMyArNDk5LDEyIEBA
IHZvaWQgZmlsbFBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHAKIAogICAgIGF1dG8gY29u
dGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKIAotICAgIGNvbnRleHQtPlNl
dFRhZ3MoMSwgX19MSU5FX18pOworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElO
RV9fKTsKIAogICAgIENPTVB0cjxJRDJEMUdlb21ldHJ5R3JvdXA+IHBhdGhUb0ZpbGw7CiAgICAg
cGF0aC5jcmVhdGVHZW9tZXRyeVdpdGhGaWxsTW9kZShmaWxsU291cmNlLmZpbGxSdWxlLCBwYXRo
VG9GaWxsKTsKIAotICAgIGNvbnRleHQtPlNldFRhZ3MoMSwgX19MSU5FX18pOwotCisgICAgcGxh
dGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwogICAgIEZ1bmN0aW9uPHZvaWQoSUQy
RDFSZW5kZXJUYXJnZXQqKT4gZHJhd0Z1bmN0aW9uID0gWyZwbGF0Zm9ybUNvbnRleHQsICZwYXRo
VG9GaWxsLCAmZmlsbFNvdXJjZV0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewog
ICAgICAgICByZW5kZXJUYXJnZXQtPkZpbGxHZW9tZXRyeShwYXRoVG9GaWxsLmdldCgpLCBmaWxs
U291cmNlLmJydXNoLmdldCgpKTsKICAgICB9OwpAQCAtNTIzLDEyICs1MjIsMTIgQEAgdm9pZCBm
aWxsUGF0aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcAogewogICAgIGF1dG8gY29udGV4dCA9
IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKIAotICAgIGNvbnRleHQtPlNldFRhZ3Mo
MSwgX19MSU5FX18pOworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsK
IAogICAgIENPTVB0cjxJRDJEMUdlb21ldHJ5R3JvdXA+IHBhdGhUb0ZpbGw7CiAgICAgcGF0aC5j
cmVhdGVHZW9tZXRyeVdpdGhGaWxsTW9kZShXaW5kUnVsZTo6RXZlbk9kZCwgcGF0aFRvRmlsbCk7
CiAKLSAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKKyAgICBwbGF0Zm9ybUNvbnRl
eHQuc2V0VGFncygxLCBfX0xJTkVfXyk7CiAKICAgICBGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVy
VGFyZ2V0Kik+IGRyYXdGdW5jdGlvbiA9IFsmcGxhdGZvcm1Db250ZXh0LCAmcGF0aFRvRmlsbCwg
Y29sb3JdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKICAgICAgICAgcmVuZGVy
VGFyZ2V0LT5GaWxsR2VvbWV0cnkocGF0aFRvRmlsbC5nZXQoKSwgcGxhdGZvcm1Db250ZXh0LmJy
dXNoV2l0aENvbG9yKGNvbG9yKS5nZXQoKSk7CkBAIC01NDYsNyArNTQ1LDcgQEAgdm9pZCBmaWxs
UGF0aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcAogdm9pZCBzdHJva2VSZWN0KFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
ZmxvYXQgbGluZVdpZHRoLCBjb25zdCBTdHJva2VTb3VyY2UmIHN0cm9rZVNvdXJjZSwgY29uc3Qg
U2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQogewogICAgIEZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5k
ZXJUYXJnZXQqKT4gZHJhd0Z1bmN0aW9uID0gWyZwbGF0Zm9ybUNvbnRleHQsICZzdHJva2VTb3Vy
Y2UsIHJlY3QsIGxpbmVXaWR0aF0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewot
ICAgICAgICByZW5kZXJUYXJnZXQtPlNldFRhZ3MoMSwgX19MSU5FX18pOworICAgICAgICBwbGF0
Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7CiAgICAgICAgIGNvbnN0IEQyRDFfUkVD
VF9GIGQyZFJlY3QgPSByZWN0OwogICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdSZWN0YW5nbGUo
JmQyZFJlY3QsIHN0cm9rZVNvdXJjZS5icnVzaC5nZXQoKSwgbGluZVdpZHRoLCBwbGF0Zm9ybUNv
bnRleHQuc3Ryb2tlU3R5bGUoKSk7CiAgICAgfTsKQEAgLTU2MSw3ICs1NjAsNyBAQCB2b2lkIHN0
cm9rZVBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmCiB7CiAgICAgYXV0byBjb250ZXh0ID0g
cGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwogICAgIAotICAgIGNvbnRleHQtPlNldFRh
Z3MoMSwgX19MSU5FX18pOworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9f
KTsKIAogICAgIGF1dG8gYm91bmRpbmdSZWN0ID0gcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7CiAg
ICAgRnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCopPiBkcmF3RnVuY3Rpb24gPSBbJnBs
YXRmb3JtQ29udGV4dCwgJnBhdGgsICZzdHJva2VTb3VyY2VdKElEMkQxUmVuZGVyVGFyZ2V0KiBy
ZW5kZXJUYXJnZXQpIHsKQEAgLTU4MCw3ICs1NzksNyBAQCB2b2lkIGRyYXdQYXRoKFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEJiBwCiAKICAgICBwYXRoLmNsb3NlQW55T3Blbkdlb21ldHJpZXMoRDJE
MV9GSUdVUkVfRU5EX09QRU4pOwogCi0gICAgY29udGV4dC0+U2V0VGFncygxLCBfX0xJTkVfXyk7
CisgICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwogCiAgICAgYXV0byBy
ZWN0ID0gcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7CiAgICAgZHJhd1dpdGhvdXRTaGFkb3cocGxh
dGZvcm1Db250ZXh0LCByZWN0LCBbJnBsYXRmb3JtQ29udGV4dCwgJnN0cm9rZVNvdXJjZSwgJnBh
dGhdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKQEAgLTYyNiw2ICs2MjUsOCBA
QCB2b2lkIGRyYXdXaXRoU2hhZG93SGVscGVyKElEMkQxUmVuZGVyVGFyCiAKIHZvaWQgZHJhd1dp
dGhTaGFkb3coUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBib3VuZGluZ1JlY3QsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSwg
Y29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+JiBkcmF3Q29tbWFu
ZHMpCiB7CisgICAgcGxhdGZvcm1Db250ZXh0Lm5vdGlmeVByZURyYXdPYnNlcnZlcigpOworCiAg
ICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwogCiAgICAg
Ly8gUmVuZGVyIHRoZSBjdXJyZW50IGdlb21ldHJ5IHRvIGEgYml0bWFwIGNvbnRleHQKQEAgLTY0
MSwxMSArNjQyLDE0IEBAIHZvaWQgZHJhd1dpdGhTaGFkb3coUGxhdGZvcm1Db250ZXh0RGlyZWMK
ICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKIAogICAgIGRyYXdXaXRoU2hhZG93
SGVscGVyKGNvbnRleHQsIGJpdG1hcC5nZXQoKSwgc2hhZG93U3RhdGUuY29sb3IsIHNoYWRvd1N0
YXRlLm9mZnNldCwgc2hhZG93U3RhdGUuYmx1cik7CisgICAgcGxhdGZvcm1Db250ZXh0Lm5vdGlm
eVBvc3REcmF3T2JzZXJ2ZXIoKTsKIH0KIAogdm9pZCBkcmF3V2l0aG91dFNoYWRvdyhQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIC8qYm91
bmRpbmdSZWN0Ki8sIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCop
PiYgZHJhd0NvbW1hbmRzKQogeworICAgIHBsYXRmb3JtQ29udGV4dC5ub3RpZnlQcmVEcmF3T2Jz
ZXJ2ZXIoKTsKICAgICBkcmF3Q29tbWFuZHMocGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgp
KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQubm90aWZ5UG9zdERyYXdPYnNlcnZlcigpOwogfQogCiB2
b2lkIGNsZWFyUmVjdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC02NTUsNyArNjU5LDcgQEAgdm9pZCBjbGVhclJlY3Qo
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmCiAgICAgICAgIEZsb2F0UmVjdCByZWN0VG9DbGVhcihy
ZWN0KTsKIAogICAgICAgICBpZiAocmVjdFRvQ2xlYXIuY29udGFpbnMocmVuZGVyVGFyZ2V0UmVj
dCkpIHsKLSAgICAgICAgICAgIHJlbmRlclRhcmdldC0+U2V0VGFncygxLCBfX0xJTkVfXyk7Cisg
ICAgICAgICAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7CiAgICAgICAg
ICAgICByZW5kZXJUYXJnZXQtPkNsZWFyKEQyRDE6OkNvbG9yRigwLCAwLCAwLCAwKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTY2Myw3ICs2NjcsNyBAQCB2b2lkIGNsZWFy
UmVjdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYKICAgICAgICAgaWYgKCFyZWN0VG9DbGVhci5p
bnRlcnNlY3RzKHJlbmRlclRhcmdldFJlY3QpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgIHJlbmRlclRhcmdldC0+U2V0VGFncygxLCBfX0xJTkVfXyk7CisgICAgICAgIHBsYXRmb3Jt
Q29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKICAgICAgICAgcmVjdFRvQ2xlYXIuaW50ZXJz
ZWN0KHJlbmRlclRhcmdldFJlY3QpOwogICAgICAgICByZW5kZXJUYXJnZXQtPkZpbGxSZWN0YW5n
bGUocmVjdFRvQ2xlYXIsIHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihDb2xvcihEMkQx
OjpDb2xvckYoMCwgMCwgMCwgMCkpKS5nZXQoKSk7CiAgICAgfSk7CkBAIC03MzQsNiArNzM4LDcg
QEAgdm9pZCBkcmF3R2x5cGhzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJgogICAgIC8vICAgICBn
cmFwaGljc0NvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93
Q29sb3IpOwogCiAgICAgcGxhdGZvcm1Db250ZXh0LnJlc3RvcmUoKTsKKyAgICBwbGF0Zm9ybUNv
bnRleHQubm90aWZ5UG9zdERyYXdPYnNlcnZlcigpOwogfQogCiAKQEAgLTc5Nyw4ICs4MDIsNyBA
QCB2b2lkIGRyYXdOYXRpdmVJbWFnZShQbGF0Zm9ybUNvbnRleHREaXJlCiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKLQorICAgIHBsYXRmb3Jt
Q29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKICAgICBGdW5jdGlvbjx2b2lkKElEMkQxUmVu
ZGVyVGFyZ2V0Kik+IGRyYXdGdW5jdGlvbiA9IFtpbWFnZSwgYWRqdXN0ZWREZXN0UmVjdCwgZ2xv
YmFsQWxwaGEsIHNyY1JlY3RdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKICAg
ICAgICAgcmVuZGVyVGFyZ2V0LT5EcmF3Qml0bWFwKGltYWdlLCBhZGp1c3RlZERlc3RSZWN0LCBn
bG9iYWxBbHBoYSwgRDJEMV9CSVRNQVBfSU5URVJQT0xBVElPTl9NT0RFX0xJTkVBUiwgc3JjUmVj
dCk7CiAgICAgfTsKQEAgLTg2OSw4ICs4NzMsNyBAQCB2b2lkIGRyYXdSZWN0KFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEJiBwCiAKICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVu
ZGVyVGFyZ2V0KCk7CiAKLSAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKLQorICAg
IHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKICAgICBkcmF3V2l0aG91dFNo
YWRvdyhwbGF0Zm9ybUNvbnRleHQsIHJlY3QsIFsmcGxhdGZvcm1Db250ZXh0LCByZWN0LCBmaWxs
Q29sb3IsIHN0cm9rZUNvbG9yLCBzdHJva2VTdHlsZV0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRl
clRhcmdldCkgewogICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKICAg
ICAgICAgYXV0byBmaWxsQnJ1c2ggPSBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3IoZmls
bENvbG9yKTsKQEAgLTkyMSw3ICs5MjQsNyBAQCB2b2lkIGRyYXdMaW5lKFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJiBwCiAgICAgYXV0byBwMSA9IGNlbnRlcmVkUG9pbnRzWzBdOwogICAgIGF1dG8g
cDIgPSBjZW50ZXJlZFBvaW50c1sxXTsKIAotICAgIGNvbnRleHQtPlNldFRhZ3MoMSwgX19MSU5F
X18pOworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKIAogICAgIEZs
b2F0UmVjdCBib3VuZGluZ1JlY3QocDEsIHAyKTsKIApAQCAtOTQ2LDggKzk0OSw3IEBAIHZvaWQg
ZmlsbEVsbGlwc2UoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQKIAogICAgIGF1dG8gY29udGV4dCA9
IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKIAotICAgIGNvbnRleHQtPlNldFRhZ3Mo
MSwgX19MSU5FX18pOwotCisgICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18p
OwogICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgcmVjdCwgWyZwbGF0Zm9y
bUNvbnRleHQsIGVsbGlwc2UsIGZpbGxDb2xvciwgc3Ryb2tlU3R5bGUsIHN0cm9rZUNvbG9yLCBz
dHJva2VUaGlja25lc3NdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKICAgICAg
ICAgYXV0byBmaWxsQnJ1c2ggPSBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3IoZmlsbENv
bG9yKTsKICAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsRWxsaXBzZSgmZWxsaXBzZSwgZmlsbEJy
dXNoLmdldCgpKTsKQEAgLTk2Nyw4ICs5NjksNyBAQCB2b2lkIGRyYXdFbGxpcHNlKFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJECiAKICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVu
ZGVyVGFyZ2V0KCk7CiAKLSAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKLQorICAg
IHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKICAgICBkcmF3V2l0aG91dFNo
YWRvdyhwbGF0Zm9ybUNvbnRleHQsIHJlY3QsIFsmcGxhdGZvcm1Db250ZXh0LCBlbGxpcHNlLCBz
dHJva2VDb2xvciwgc3Ryb2tlVGhpY2tuZXNzXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFy
Z2V0KSB7CiAgICAgICAgIGF1dG8gc3Ryb2tlQnJ1c2ggPSBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hX
aXRoQ29sb3Ioc3Ryb2tlQ29sb3IpOwogICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdFbGxpcHNl
KCZlbGxpcHNlLCBzdHJva2VCcnVzaC5nZXQoKSwgc3Ryb2tlVGhpY2tuZXNzLCBwbGF0Zm9ybUNv
bnRleHQuc3Ryb2tlU3R5bGUoKSk7CkBAIC05OTAsNiArOTkxLDcgQEAgdm9pZCBmbHVzaChQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdAogICAgIEFTU0VSVChwbGF0Zm9ybUNvbnRleHQucmVu
ZGVyVGFyZ2V0KCkpOwogICAgIEQyRDFfVEFHIGZpcnN0LCBzZWNvbmQ7CiAgICAgSFJFU1VMVCBo
ciA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+Rmx1c2goJmZpcnN0LCAmc2Vjb25k
KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQubm90aWZ5UG9zdERyYXdPYnNlcnZlcigpOwogCiAgICAg
UkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3Bw
CShyZXZpc2lvbiAyNDk4MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsOSBA
QCB2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCYgY29uCiAgICAgICAgICAgICBp
ZiAoIW1fY2FjaGVkSGFzaCB8fCAhbV9ncmFkaWVudCkKICAgICAgICAgICAgICAgICBnZW5lcmF0
ZUdyYWRpZW50KGQyZENvbnRleHQpOwogCisjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICAg
ICAgZDJkQ29udGV4dC0+U2V0VGFncyhHUkFESUVOVF9EUkFXSU5HLCBfX0xJTkVfXyk7CisjZW5k
aWYKIAogICAgICAgICAgICAgY29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7CiAgICAg
ICAgICAgICBkMmRDb250ZXh0LT5GaWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBtX2dyYWRpZW50KTsK
QEAgLTE0NSw3ICsxNDcsOSBAQCB2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCYg
Y29uCiAgICAgICAgICAgICBpZiAoIW1fY2FjaGVkSGFzaCB8fCAhbV9ncmFkaWVudCkKICAgICAg
ICAgICAgICAgICBnZW5lcmF0ZUdyYWRpZW50KGQyZENvbnRleHQpOwogCisjaWYgIUFTU0VSVF9E
SVNBQkxFRAogICAgICAgICAgICAgZDJkQ29udGV4dC0+U2V0VGFncyhHUkFESUVOVF9EUkFXSU5H
LCBfX0xJTkVfXyk7CisjZW5kaWYKIAogICAgICAgICAgICAgY29uc3QgRDJEMV9SRUNUX0YgZDJk
UmVjdCA9IHJlY3Q7CiAgICAgICAgICAgICBkMmRDb250ZXh0LT5GaWxsUmVjdGFuZ2xlKCZkMmRS
ZWN0LCBtX2dyYWRpZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAko
cmV2aXNpb24gMjQ5ODA2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzks
MjAgQEAgdm9pZCBzd2l6emxlQW5kUHJlbXVsdGlwbHkoY29uc3QgdWludDhfdAogICAgIH0KIH0K
IAorYm9vbCBJbWFnZUJ1ZmZlckRhdGE6OmVuc3VyZUJhY2tpbmdTdG9yZShjb25zdCBJbnRTaXpl
JiBzaXplKSBjb25zdAoreworICAgIGlmIChzaXplID09IGJhY2tpbmdTdG9yZVNpemUgJiYgIWRh
dGEuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGF1dG8gbnVtQnl0ZXMg
PSBzaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OworICAgIGlmIChudW1CeXRlcy5oYXNP
dmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJhY2tpbmdTdG9yZVNp
emUgPSBzaXplOworICAgIGRhdGEucmVzaXplVG9GaXQobnVtQnl0ZXMudW5zYWZlR2V0KCkpOwor
ICAgIHJldHVybiBkYXRhLmNhcGFjaXR5KCkgPT0gbnVtQnl0ZXMudW5zYWZlR2V0KCk7Cit9CisK
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29u
c3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCAvKiBhY2NlbGVyYXRlUmVuZGVyaW5nICovLCBmbG9hdCAv
KiByZXNvbHV0aW9uU2NhbGUgKi8pIGNvbnN0CiB7CiAgICAgYXV0byBudW1CeXRlcyA9IHJlY3Qu
YXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7CkBAIC04Niw1MSArMTAwLDYyIEBAIFJlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXQKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICBhdXRvIHJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRp
YWxpemVkKG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKLSAgICB1bnNpZ25lZCBjaGFyKiByZXN1bHRE
YXRhID0gcmVzdWx0ID8gcmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlmICghcmVzdWx0
RGF0YSkKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBp
ZiAoIWJpdG1hcCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIGNvbnRleHQtPmVuZERy
YXcoKTsKLQotICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IGQyZERldmljZUNvbnRleHQ7
Ci0gICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5
SW50ZXJmYWNlKF9fdXVpZG9mKElEMkQxRGV2aWNlQ29udGV4dCksIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCoqPigmZDJkRGV2aWNlQ29udGV4dCkpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsK
LQotICAgIGF1dG8gYnl0ZXNQZXJSb3dJbkRhdGEgPSBzaXplLndpZHRoKCkgKiA0OwotCi0gICAg
Q09NUHRyPElEMkQxQml0bWFwMT4gY3B1Qml0bWFwOwotICAgIEQyRDFfQklUTUFQX1BST1BFUlRJ
RVMxIGJpdG1hcFByb3BlcnRpZXMyID0gRDJEMTo6Qml0bWFwUHJvcGVydGllczEoRDJEMV9CSVRN
QVBfT1BUSU9OU19DUFVfUkVBRCB8IEQyRDFfQklUTUFQX09QVElPTlNfQ0FOTk9UX0RSQVcsIERp
cmVjdDJEOjpwaXhlbEZvcm1hdCgpKTsKLSAgICBociA9IGQyZERldmljZUNvbnRleHQtPkNyZWF0
ZUJpdG1hcChzaXplLCBudWxscHRyLCBieXRlc1BlclJvd0luRGF0YSwgYml0bWFwUHJvcGVydGll
czIsICZjcHVCaXRtYXApOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgYXV0byBieXRlc1BlclJvd0luRGF0YSA9IHJlY3Qud2lkdGgoKSAqIDQ7
CisgICAgYXV0byBoZWlnaHQgPSByZWN0LmhlaWdodCgpOworICAgIGF1dG8gd2lkdGggPSByZWN0
LndpZHRoKCk7CisKKyAgICBpZiAoYml0bWFwQnVmZmVyU3luYyA9PSBCaXRtYXBCdWZmZXJTeW5j
OjpCdWZmZXJPdXRPZlN5bmMgfHwgZGF0YS5zaXplKCkgIT0gbnVtQnl0ZXMudW5zYWZlR2V0KCkp
IHsKKyAgICAgICAgY29udGV4dC0+ZW5kRHJhdygpOworCisgICAgICAgIENPTVB0cjxJRDJEMURl
dmljZUNvbnRleHQ+IGQyZERldmljZUNvbnRleHQoUXVlcnksIHBsYXRmb3JtQ29udGV4dC0+cmVu
ZGVyVGFyZ2V0KCkpOworICAgICAgICBBU1NFUlQoISFkMmREZXZpY2VDb250ZXh0KTsKKworICAg
ICAgICAvLyBDb3B5IEdQVSBkYXRhIGZyb20gdGhlIElEMkQxQml0bWFwIHRvIGEgQ1BVLWJhY2tl
ZCBJRDJEMUJpdG1hcDEKKyAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwMT4gY3B1Qml0bWFwOwor
ICAgICAgICBEMkQxX0JJVE1BUF9QUk9QRVJUSUVTMSBiaXRtYXBQcm9wZXJ0aWVzMiA9IEQyRDE6
OkJpdG1hcFByb3BlcnRpZXMxKEQyRDFfQklUTUFQX09QVElPTlNfQ1BVX1JFQUQgfCBEMkQxX0JJ
VE1BUF9PUFRJT05TX0NBTk5PVF9EUkFXLCBEaXJlY3QyRDo6cGl4ZWxGb3JtYXQoKSk7CisgICAg
ICAgIEhSRVNVTFQgaHIgPSBkMmREZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRtYXAoc2l6ZSwgbnVs
bHB0ciwgYnl0ZXNQZXJSb3dJbkRhdGEsIGJpdG1hcFByb3BlcnRpZXMyLCAmY3B1Qml0bWFwKTsK
KyAgICAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICAgICAgYXV0byB0YXJnZXRQb3MgPSBEMkQxOjpQb2ludDJVKCk7CisgICAgICAgIEQy
RDFfUkVDVF9VIGRhdGFSZWN0ID0gcmVjdDsKKyAgICAgICAgaHIgPSBjcHVCaXRtYXAtPkNvcHlG
cm9tQml0bWFwKCZ0YXJnZXRQb3MsIGJpdG1hcC5nZXQoKSwgJmRhdGFSZWN0KTsKKyAgICAgICAg
aWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAg
ICAgRDJEMV9NQVBQRURfUkVDVCBtYXBwZWREYXRhOworICAgICAgICBociA9IGNwdUJpdG1hcC0+
TWFwKEQyRDFfTUFQX09QVElPTlNfUkVBRCwgJm1hcHBlZERhdGEpOworICAgICAgICBpZiAoIVNV
Q0NFRURFRChocikpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpZiAo
bWFwcGVkRGF0YS5iaXRzKSB7CisgICAgICAgICAgICBpZiAoIWVuc3VyZUJhY2tpbmdTdG9yZShi
aXRtYXAtPkdldFBpeGVsU2l6ZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgICAgICAgICAgLy8gU29mdHdhcmUgZmlsdGVycyBleHBlY3QgUkdCQSBieXRlcy4gV2Ug
bmVlZCB0byBzd2l6emxlIGZyb20gRGlyZWN0MkQncyBCR1JBIHRvIGJlIGNvbXBhdGlibGUuCisg
ICAgICAgICAgICBpZiAoZGVzaXJlZEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQpCisgICAgICAgICAgICAgICAgc3dpenpsZUFuZFByZW11bHRpcGx5PEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4obWFwcGVkRGF0YS5iaXRzLCBo
ZWlnaHQsIHdpZHRoLCBtYXBwZWREYXRhLnBpdGNoLCBieXRlc1BlclJvd0luRGF0YSwgZGF0YS5k
YXRhKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN3aXp6bGVBbmRQcmVt
dWx0aXBseTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihtYXBwZWREYXRh
LmJpdHMsIGhlaWdodCwgd2lkdGgsIG1hcHBlZERhdGEucGl0Y2gsIGJ5dGVzUGVyUm93SW5EYXRh
LCBkYXRhLmRhdGEoKSk7CiAKLSAgICBEMkQxX1BPSU5UXzJVIHRhcmdldFBvcyA9IEQyRDE6OlBv
aW50MlUoKTsKLSAgICBEMkQxX1JFQ1RfVSBkYXRhUmVjdCA9IHJlY3Q7Ci0gICAgaHIgPSBjcHVC
aXRtYXAtPkNvcHlGcm9tQml0bWFwKCZ0YXJnZXRQb3MsIGJpdG1hcC5nZXQoKSwgJmRhdGFSZWN0
KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICAgICAgYnl0ZUZvcm1hdCA9IGRlc2lyZWRGb3JtYXQ7CiAKLSAgICBEMkQxX01BUFBFRF9S
RUNUIG1hcHBlZERhdGE7Ci0gICAgaHIgPSBjcHVCaXRtYXAtPk1hcChEMkQxX01BUF9PUFRJT05T
X1JFQUQsICZtYXBwZWREYXRhKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgLy8gU29mdHdhcmUgZmlsdGVycyBleHBlY3QgUkdCQSBieXRl
cy4gV2UgbmVlZCB0byBzd2l6emxlIGZyb20gRGlyZWN0MkQncyBCR1JBIHRvIGJlIGNvbXBhdGli
bGUuCi0gICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgQ2hlY2tl
ZDxpbnQ+IHdpZHRoID0gcmVjdC53aWR0aCgpOworICAgICAgICAgICAgYml0bWFwQnVmZmVyU3lu
YyA9IEJpdG1hcEJ1ZmZlclN5bmM6OkluU3luYzsKKyAgICAgICAgfQogCi0gICAgaWYgKGRlc2ly
ZWRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQotICAg
ICAgICBzd2l6emxlQW5kUHJlbXVsdGlwbHk8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkPihtYXBwZWREYXRhLmJpdHMsIGhlaWdodC51bnNhZmVHZXQoKSwgd2lkdGgudW5z
YWZlR2V0KCksIG1hcHBlZERhdGEucGl0Y2gsIGJ5dGVzUGVyUm93SW5EYXRhLCByZXN1bHREYXRh
KTsKLSAgICBlbHNlCi0gICAgICAgIHN3aXp6bGVBbmRQcmVtdWx0aXBseTxBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihtYXBwZWREYXRhLmJpdHMsIGhlaWdodC51bnNhZmVH
ZXQoKSwgd2lkdGgudW5zYWZlR2V0KCksIG1hcHBlZERhdGEucGl0Y2gsIGJ5dGVzUGVyUm93SW5E
YXRhLCByZXN1bHREYXRhKTsKKyAgICAgICAgaHIgPSBjcHVCaXRtYXAtPlVubWFwKCk7CisgICAg
ICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKIAotICAgIGhyID0gY3B1Qml0bWFwLT5Vbm1hcCgp
OwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICAgICAgY29udGV4dC0+YmVnaW5EcmF3
KCk7CisgICAgfQogCi0gICAgY29udGV4dC0+YmVnaW5EcmF3KCk7CisgICAgcmVzdWx0LT5zZXRS
YW5nZShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksIDApOwogCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KQEAgLTIwMyw0MyArMjI4LDYzIEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNv
bnN0IFVpbnQKICAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgY29udGV4dC0+ZW5kRHJhdygpOwotCisjaWYgIUFTU0VSVF9ESVNBQkxFRAog
ICAgIGF1dG8gcGl4ZWxTaXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKICAgICBBU1NFUlQo
cGl4ZWxTaXplLndpZHRoID49IHNvdXJjZVNpemUud2lkdGgoKSk7CiAgICAgQVNTRVJUKHBpeGVs
U2l6ZS53aWR0aCA+PSBzaXplLndpZHRoKCkpOwogICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0
ID49IHNvdXJjZVNpemUuaGVpZ2h0KCkpOwogICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0ID49
IHNpemUuaGVpZ2h0KCkpOworI2VuZGlmCisKKyAgICBpZiAoIWVuc3VyZUJhY2tpbmdTdG9yZShz
aXplKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBzb3VyY2Uu
ZGF0YSgpLCBzb3VyY2UubGVuZ3RoKCkpOworCisgICAgYnl0ZUZvcm1hdCA9IHNvdXJjZUZvcm1h
dDsKKyAgICBiaXRtYXBCdWZmZXJTeW5jID0gQml0bWFwQnVmZmVyU3luYzo6Qml0bWFwT3V0T2ZT
eW5jOworfQorCit2b2lkIEltYWdlQnVmZmVyRGF0YTo6bG9hZERhdGFUb0JpdG1hcCgpCit7Cisg
ICAgYXV0byBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOworICAgIEFTU0VSVChw
aXhlbFNpemUud2lkdGggPj0gYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKKyAgICBBU1NFUlQo
cGl4ZWxTaXplLmhlaWdodCA+PSBiYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsKKworICAgIENo
ZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IHBpeGVsU2l6ZS53aWR0
aCAqIHBpeGVsU2l6ZS5oZWlnaHQgKiA0OworICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2Vk
KCkpCisgICAgICAgIHJldHVybjsKIAogICAgIC8vIFNvZnR3YXJlIGdlbmVyYXRlZCBiaXRtYXAg
ZGF0YSBpcyBpbiBSR0JBLiBXZSBuZWVkIHRvIHN3aXp6bGUgdG8gcHJlbXVsdGlwbGllZCBCR1JB
IHRvIGJlIGNvbXBhdGlibGUKICAgICAvLyB3aXRoIHRoZSBIV05EL0hEQyByZW5kZXIgYmFja2lu
ZyB3ZSB1c2UuCi0gICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgIGluUGxhY2VTd2l6emxlPEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZD4oc291cmNlLmRhdGEoKSwgc291cmNlLmxlbmd0aCgp
KTsgLy8gUkdCQSAtPiBQQkdSQQorICAgIGlmIChieXRlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKKyAgICAgICAgaW5QbGFjZVN3aXp6bGU8QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihkYXRhLmRhdGEoKSwgZGF0YS5zaXpl
KCkpOyAvLyBSR0JBIC0+IFBCR1JBCiAgICAgZWxzZQotICAgICAgICBpblBsYWNlU3dpenpsZTxB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihzb3VyY2UuZGF0YSgpLCBzb3Vy
Y2UubGVuZ3RoKCkpOyAvLyBQUkdCQSAtPiBQQkdSQQorICAgICAgICBpblBsYWNlU3dpenpsZTxB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihkYXRhLmRhdGEoKSwgZGF0YS5z
aXplKCkpOyAvLyBQUkdCQSAtPiBQQkdSQQorCisgICAgLy8gQ29weSB0aGUgYml0cyBmcm9tIGN1
cnJlbnQgcmVuZGVyVGFyZ2V0IHRvIHRoZSBvdXRwdXQgdGFyZ2V0LgorICAgIC8vIFdlIGNhbm5v
dCBhY2Nlc3MgdGhlIGRhdGEgYmFja2luZyBhbiBJV0lDQml0bWFwIG9yIElEMkQxQml0bWFwIHdo
aWxlIGFuIGFjdGl2ZSBkcmF3IHNlc3Npb24gaXMgb3Blbi4KKyAgICBjb250ZXh0LT5lbmREcmF3
KCk7CiAKICAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFJlbmRlclRh
cmdldDsKLSAgICBIUkVTVUxUIGhyID0gcGxhdGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKS0+
UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQpLCByZWludGVy
cHJldF9jYXN0PHZvaWQqKj4oJmJpdG1hcFJlbmRlclRhcmdldCkpOworICAgIEhSRVNVTFQgaHIg
PSBwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpLT5RdWVyeUludGVyZmFjZSgmYml0bWFw
UmVuZGVyVGFyZ2V0KTsKICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAKLSAgICBhdXRvIGJ5
dGVzUGVyUm93SW5EYXRhID0gc291cmNlUmVjdC53aWR0aCgpICogNDsKKyAgICBhdXRvIGJ5dGVz
UGVyUm93SW5EYXRhID0gYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpICogNDsKIAotICAgIENPTVB0
cjxJRDJEMUJpdG1hcD4gc3dpenpsZWRCaXRtYXA7Ci0gICAgRDJEMV9CSVRNQVBfUFJPUEVSVElF
UyBiaXRtYXBQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwUHJvcGVydGllcyhEaXJlY3QyRDo6cGl4
ZWxGb3JtYXQoKSk7Ci0gICAgaHIgPSBiaXRtYXBSZW5kZXJUYXJnZXQtPkNyZWF0ZUJpdG1hcChz
b3VyY2VTaXplLCBzb3VyY2UuZGF0YSgpLCBieXRlc1BlclJvd0luRGF0YSwgYml0bWFwUHJvcGVy
dGllcywgJnN3aXp6bGVkQml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEQyRDFfUE9JTlRfMlUgZGVzdFBvaW50RDJEID0gZGVzdFBvaW50Owot
ICAgIEQyRDFfUkVDVF9VIHNyY1JlY3QgPSBzb3VyY2VSZWN0OwotICAgIGhyID0gYml0bWFwLT5D
b3B5RnJvbU1lbW9yeSgmc3JjUmVjdCwgc291cmNlLmRhdGEoKSwgYnl0ZXNQZXJSb3dJbkRhdGEp
OworICAgIGhyID0gYml0bWFwLT5Db3B5RnJvbU1lbW9yeShudWxscHRyLCBkYXRhLmRhdGEoKSwg
Ynl0ZXNQZXJSb3dJbkRhdGEpOwogICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKIAogICAgIGNv
bnRleHQtPmJlZ2luRHJhdygpOworCisgICAgYml0bWFwQnVmZmVyU3luYyA9IEJpdG1hcEJ1ZmZl
clN5bmM6OkluU3luYzsKIH0KIAogQ09NUHRyPElEMkQxQml0bWFwPiBJbWFnZUJ1ZmZlckRhdGE6
OmNvbXBhdGlibGVCaXRtYXAoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKIHsKKyAg
ICBpZiAoYml0bWFwQnVmZmVyU3luYyA9PSBCaXRtYXBCdWZmZXJTeW5jOjpCaXRtYXBPdXRPZlN5
bmMgJiYgIWRhdGEuaXNFbXB0eSgpKQorICAgICAgICBsb2FkRGF0YVRvQml0bWFwKCk7CisKICAg
ICBpZiAoIXJlbmRlclRhcmdldCkKICAgICAgICAgcmV0dXJuIGJpdG1hcDsKIApAQCAtMjgyLDcg
KzMyNyw3IEBAIENPTVB0cjxJRDJEMUJpdG1hcD4gSW1hZ2VCdWZmZXJEYXRhOjpjb20KICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiB0YXJn
ZXREZXZpY2VDb250ZXh0OwotICAgIGhyID0gcmVuZGVyVGFyZ2V0LT5RdWVyeUludGVyZmFjZShf
X3V1aWRvZihJRDJEMURldmljZUNvbnRleHQpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJnRh
cmdldERldmljZUNvbnRleHQpKTsKKyAgICBociA9IHJlbmRlclRhcmdldC0+UXVlcnlJbnRlcmZh
Y2UoJnRhcmdldERldmljZUNvbnRleHQpOwogICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKIAog
ICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29tcGF0aWJsZUJpdG1hcDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1
ZmZlckRhdGFEaXJlY3QyRC5oCShyZXZpc2lvbiAyNDk4MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJ
bnRTaXplLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9DaGVj
a2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTQwLDE5ICs0MSwy
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDsK
IAogc3RydWN0IEltYWdlQnVmZmVyRGF0YSB7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXpl
OworICAgIG11dGFibGUgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplOwogICAgIENoZWNrZWQ8dW5z
aWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1BlclJvdzsKIAogICAgIC8vIE9ubHkgZm9yIHNv
ZnR3YXJlIEltYWdlQnVmZmVycy4KLSAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICBtdXRhYmxl
IFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAgIG11dGFibGUgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBieXRlRm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkIH07
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiBwbGF0Zm9ybUNv
bnRleHQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4dDsKICAg
ICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKIAorICAgIGVudW0gY2xhc3MgQml0bWFwQnVm
ZmVyU3luYyB7IEluU3luYywgQml0bWFwT3V0T2ZTeW5jLCBCdWZmZXJPdXRPZlN5bmMgfTsKKyAg
ICBtdXRhYmxlIEJpdG1hcEJ1ZmZlclN5bmMgYml0bWFwQnVmZmVyU3luYyB7IEJpdG1hcEJ1ZmZl
clN5bmM6OkJ1ZmZlck91dE9mU3luYyB9OworCiAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiBnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBjb25zdCBJ
bnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUp
IGNvbnN0OwogICAgIHZvaWQgcHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNl
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291
cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgZmxvYXQgcmVz
b2x1dGlvblNjYWxlKTsKIAogICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29tcGF0aWJsZUJpdG1h
cChJRDJEMVJlbmRlclRhcmdldCopOworCisgICAgYm9vbCBlbnN1cmVCYWNraW5nU3RvcmUoY29u
c3QgSW50U2l6ZSYpIGNvbnN0OworICAgIHZvaWQgbG9hZERhdGFUb0JpdG1hcCgpOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAkocmV2
aXNpb24gMjQ5ODA2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlQnVmZmVyRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1LDEyIEBA
IEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUKICAgICBpZiAoIVNVQ0NF
RURFRChocikpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS5wbGF0Zm9ybUNvbnRleHQg
PSBtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPihiaXRtYXBDb250ZXh0LmdldCgp
KTsKKyAgICBtX2RhdGEucGxhdGZvcm1Db250ZXh0ID0gbWFrZVVuaXF1ZTxQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRD4oYml0bWFwQ29udGV4dC5nZXQoKSwgW3RoaXNdKCkgeworICAgICAgICBpZiAo
bV9kYXRhLmJpdG1hcEJ1ZmZlclN5bmMgPT0gSW1hZ2VCdWZmZXJEYXRhOjpCaXRtYXBCdWZmZXJT
eW5jOjpCaXRtYXBPdXRPZlN5bmMgJiYgIW1fZGF0YS5kYXRhLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIG1fZGF0YS5sb2FkRGF0YVRvQml0bWFwKCk7CisgICAgfSwgW3RoaXNdKCkgeworICAgICAg
ICBtX2RhdGEuYml0bWFwQnVmZmVyU3luYyA9IEltYWdlQnVmZmVyRGF0YTo6Qml0bWFwQnVmZmVy
U3luYzo6QnVmZmVyT3V0T2ZTeW5jOworICAgIH0pOwogICAgIG1fZGF0YS5jb250ZXh0ID0gbWFr
ZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KG1fZGF0YS5wbGF0Zm9ybUNvbnRleHQuZ2V0KCksIEdy
YXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CiAK
ICAgICBzdWNjZXNzID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNw
cAkocmV2aXNpb24gMjQ5ODA2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsOCAr
NDAsMTAgQEAgcHVibGljOgogICAgIFN0YXRlKCkgPSBkZWZhdWx0OwogfTsKIAotUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQ6OlBsYXRmb3JtQ29udGV4dERpcmVjdDJEKElEMkQxUmVuZGVyVGFyZ2V0
KiByZW5kZXJUYXJnZXQpCitQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6UGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCwgV1RGOjpGdW5jdGlvbjx2
b2lkKCk+JiYgcHJlRHJhd0hhbmRsZXIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIHBvc3REcmF3
SGFuZGxlcikKICAgICA6IG1fcmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCkKKyAgICAsIG1fcHJl
RHJhd0hhbmRsZXIoV1RGTW92ZShwcmVEcmF3SGFuZGxlcikpCisgICAgLCBtX3Bvc3REcmF3SGFu
ZGxlcihXVEZNb3ZlKHBvc3REcmF3SGFuZGxlcikpCiB7CiAgICAgbV9zdGF0ZVN0YWNrLmFwcGVu
ZChTdGF0ZSgpKTsKICAgICBtX3N0YXRlID0gJm1fc3RhdGVTdGFjay5sYXN0KCk7CkBAIC0yNjAs
NiArMjYyLDI4IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmVuZERyYXcoKQogICAg
IC0tYmVnaW5EcmF3Q291bnQ7CiB9CiAKK3ZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNl
dFRhZ3MoRDJEMV9UQUcgdGFnMSwgRDJEMV9UQUcgdGFnMikKK3sKKyNpZiAhQVNTRVJUX0RJU0FC
TEVECisgICAgbV9yZW5kZXJUYXJnZXQtPlNldFRhZ3ModGFnMSwgdGFnMik7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTSh0YWcxKTsKKyAgICBVTlVTRURfUEFSQU0odGFnMik7CisjZW5kaWYKK30K
Kwordm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6bm90aWZ5UHJlRHJhd09ic2VydmVyKCkK
K3sKKyAgICBpZiAobV9wcmVEcmF3SGFuZGxlcikKKyAgICAgICAgbV9wcmVEcmF3SGFuZGxlcigp
OworfQorCit2b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpub3RpZnlQb3N0RHJhd09ic2Vy
dmVyKCkKK3sKKyAgICBpZiAobV9wb3N0RHJhd0hhbmRsZXIpCisgICAgICAgIG1fcG9zdERyYXdI
YW5kbGVyKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFVTRShE
SVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0
Zm9ybUNvbnRleHREaXJlY3QyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oCShyZXZpc2lvbiAyNDk4
MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQpOwogcHVibGljOgot
ICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKElEMkQxUmVuZGVyVGFyZ2V0Kik7CisgICAgUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQoSUQyRDFSZW5kZXJUYXJnZXQqLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4mJiBwcmVEcmF3SGFuZGxlciA9IFtdKCkgeyB9LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4m
JiBwb3N0RHJhd0hhbmRsZXIgPSBbXSgpIHsgfSk7CiAgICAgflBsYXRmb3JtQ29udGV4dERpcmVj
dDJEKCk7CiAKICAgICBJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KCkgeyByZXR1cm4g
bV9yZW5kZXJUYXJnZXQuZ2V0KCk7IH0KQEAgLTEwOSw2ICsxMDksMTAgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0QmxlbmRNb2RlKEQyRDFfQkxFTkRfTU9ERSBtb2RlKSB7IG1fYmxlbmRNb2RlID0g
bW9kZTsgfQogICAgIHZvaWQgc2V0Q29tcG9zaXRlTW9kZShEMkQxX0NPTVBPU0lURV9NT0RFIG1v
ZGUpIHsgbV9jb21wb3NpdGVNb2RlID0gbW9kZTsgfQogCisgICAgdm9pZCBzZXRUYWdzKEQyRDFf
VEFHIHRhZzEsIEQyRDFfVEFHIHRhZzIpOworICAgIHZvaWQgbm90aWZ5UHJlRHJhd09ic2VydmVy
KCk7CisgICAgdm9pZCBub3RpZnlQb3N0RHJhd09ic2VydmVyKCk7CisKIHByaXZhdGU6CiAgICAg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2dyYXBoaWNzQ29udGV4dFByaXZhdGUg
eyBudWxscHRyIH07CiAKQEAgLTEyMyw2ICsxMjcsOSBAQCBwcml2YXRlOgogICAgIENPTVB0cjxJ
RDJEMUJpdG1hcEJydXNoPiBtX3BhdHRlcm5TdHJva2VCcnVzaDsKICAgICBDT01QdHI8SUQyRDFC
aXRtYXBCcnVzaD4gbV9wYXR0ZXJuRmlsbEJydXNoOwogCisgICAgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IG1fcHJlRHJhd0hhbmRsZXI7CisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1fcG9zdERy
YXdIYW5kbGVyOworCiAgICAgY2xhc3MgU3RhdGU7CiAgICAgU3RhdGUqIG1fc3RhdGUgeyBudWxs
cHRyIH07CiAgICAgVmVjdG9yPFN0YXRlPiBtX3N0YXRlU3RhY2s7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378734</attachid>
            <date>2019-09-13 09:29:27 -0700</date>
            <delta_ts>2019-09-13 10:14:30 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-201594-20190913092926.patch</filename>
            <type>text/plain</type>
            <size>29689</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTgxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBACisyMDE5LTA5LTEyICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIEltYWdlQnVmZmVy
L0ltYWdlQnVmZmVyRGF0YSBpcyBoaWdobHkgaW5lZmZpY2llbnQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTU5NAorCisgICAgICAgIFJldmlld2Vk
IGJ5IFNhaWQgQWJvdS1IYWxsYXdhLgorCisgICAgICAgIE15IGluaXRpYWwgaW1wbGVtZW50YXRp
b24gb2YgSW1hZ2VCdWZmZXIgYW5kIEltYWdlQnVmZmVyRGF0YSBmb3IgRGlyZWN0MkQgaW52b2x2
ZXMgdG9vCisgICAgICAgIG11Y2ggbW92aW5nIG9mIGRhdGEgZnJvbSBHUFUgdG8gQ1BVIGFuZCBi
YWNrLiBXZSBvbmx5IG5lZWQgdG8gbWFrZSBhIHJlbmRlcmFibGUgdmVyc2lvbgorICAgICAgICBv
ZiB0aGUgSW1hZ2VCdWZmZXIgd2hlbiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZSBv
ciBJbWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdlCisgICAgICAgIGFyZSBjYWxsZWQuCisKKyAg
ICAgICAgQ3VycmVudGx5LCBlYWNoIEltYWdlQnVmZmVyIHB1dERhdGEgb3BlcmF0aW9uIHVwbG9h
ZHMgdGhlIGRhdGEgdG8gdGhlIEdQVSwgYW5kIGVhY2gKKyAgICAgICAgSW1hZ2VCdWZmZXIgZ2V0
RGF0YSBwdWxscyB0aGUgZGF0YSBmcm9tIHRoZSBHUFUuCisKKyAgICAgICAgVGhpcyBwYXRjaCBk
b2VzIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgMS4gSXQgbWFrZXMgdGhlIGFzc3VtcHRpb24g
dGhhdCB0aGUgSUQyRDFCaXRtYXAgaXQgaG9sZHMgaXMgdW5kZXIgaXRzIGNvbnRyb2wgKGkuZS4s
CisgICAgICAgICAgIGV4dGVybmFsIGRyYXcgb3BlcmF0aW9ucyBkbyBub3QgbWFuaXB1bGF0ZSB0
aGUgYml0bWFwIHdpdGhvdXQgbWFya2luZyBpdCBkaXJ0eSkuCisgICAgICAgIDIuIEl0IGhvbGRz
IGEgQ1BVIGNvcHkgb2YgdGhlIGRhdGEgZnJvbSB0aGUgSUQyRDFCaXRtYXAgb3JpZ2luYWxseSB1
c2VkIHRvIGNyZWF0ZSBpdC4KKyAgICAgICAgICAgSXQgdXNlcyB0aGlzIGRhdGEgZm9yIGFsbCBt
YW5pcHVsYXRpb25zLCBhbmQgdXBsb2FkcyB0byB0aGUgYml0bWFwIG9ubHkgd2hlbgorICAgICAg
ICAgICBhbiBJRDJEMUJpdG1hcCBpcyByZXF1ZXN0ZWQgZm9yIGRyYXdpbmcsIGFuZCBiZWZvcmUg
YSBkcmF3aW5nIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQKKyAgICAgICAgICAgb24gdGhlIGFzc29j
aWF0ZWQgSW1hZ2VCdWZmZXIgY29udGV4dC4KKyAgICAgICAgMy4gSXQgZG9lcyBub3QgcmVhZCBi
YWNrIGZyb20gdGhlIElEMkQxQml0bWFwIHVubGVzcyBpdCBpcyB0b2xkIHRoYXQgaXQgaXMgZGly
dHkuCisgICAgICAgIDQuIEl0IGRvZXMgbm90IGNhbGwgJ0lEMkQxUmVuZGVyVGFyZ2V0OjpTZXRU
YWdzJyBpZiBBU1NFUlRTIGFyZSBkaXNhYmxlZCBiZWNhdXNlCisgICAgICAgICAgIHRoZXkgYXJl
IGNvc3RseSwgYW5kIGRvbid0IGhlbHAgaW4gcmVsZWFzZSBidWlsZHMuCisgCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEaXJlY3QyRDo6ZmlsbFJlY3QpOiBVc2UgbmV3ICdzZXRUYWdzJyBtZXRob2QuCisg
ICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6ZmlsbFJvdW5kZWRSZWN0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpmaWxsUmVjdFdpdGhHcmFkaWVudCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OmZpbGxQYXRoKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpEaXJlY3QyRDo6c3Ryb2tlUmVjdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6RGlyZWN0MkQ6OnN0cm9rZVBhdGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVj
dDJEOjpkcmF3UGF0aCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OmRyYXdX
aXRoU2hhZG93KTogTm90aWZ5IG9ic2VydmVycyBiZWZvcmUgYW5kIGFmdGVyIHdlIGRyZXcuCisg
ICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6ZHJhd1dpdGhvdXRTaGFkb3cpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpjbGVhclJlY3QpOiBVc2UgbmV3ICdzZXRUYWdzJyBt
ZXRob2QuCisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6ZHJhd0dseXBocyk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OmRyYXdSZWN0KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpEaXJlY3QyRDo6ZHJhd0xpbmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVj
dDJEOjpmaWxsRWxsaXBzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OmRy
YXdFbGxpcHNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6Zmx1c2gpOiBO
b3RpZnkgb2JzZXJ2ZXIgYWZ0ZXIgd2UgZHJldy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6
ZmlsbCk6IERvbid0IGNhbGwgU2V0VGFncyBpbiBub24tQVNTRVJUIGJ1aWxkcy4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjplbnN1cmVCYWNraW5nU3RvcmUgY29uc3Qp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YSBjb25z
dCk6IE9ubHkgcmVhZCBmcm9tIHRoZSBHUFUgaWYgdGhlIGluLW1lbW9yeQorICAgICAgICBzdG9y
ZSBpcyBlbXB0eSBvciBvdXQtb2Ytc3luYy4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
RGF0YTo6cHV0RGF0YSk6IE1hcmsgdGhlIGJpdG1hcCBhcyBvdXQtb2Ytc3luYywgYnV0IGRvbid0
CisgICAgICAgIHVwbG9hZCB0aGUgZGF0YSB5ZXQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckRhdGE6OmxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCk6IEhlbHBlciBmdW5jdGlvbiB0byB1
cGxvYWQgZGF0YSB0byB0aGUgR1BVLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRh
Ojpjb21wYXRpYmxlQml0bWFwKTogT25seSB1cGxvYWQgZGF0YSBpZiB0aGUgcmVsZXZhbnQKKyAg
ICAgICAgYml0bWFwIGlzIG91dCBvZiBkYXRlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpJbWFnZUJ1ZmZlcik6IFVwZGF0ZSBjb25zdHJ1Y3RvciB0byByZWdpc3RlciB0aGUg
SW1hZ2VCdWZmZXJEYXRhCisgICAgICAgIGxhbWJkYXMgYXMgb2JzZXJ2ZXIgZm9yIGRyYXcgb3Bl
cmF0aW9ucy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6
OlBsYXRmb3JtQ29udGV4dERpcmVjdDJEKTogVXBkYXRlIGNvbnN0cnVjdG9yIHRvIGFjY2VwdAor
ICAgICAgICBsYW1iZGFzIHRvIHJ1biBiZWZvcmUgYW5kIGFmdGVyIGRyYXcgb3BlcmF0aW9ucy4K
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpzZXRUYWdzKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6bm90aWZ5UHJl
RHJhd09ic2VydmVyKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRDo6bm90aWZ5UG9zdERyYXdPYnNlcnZlcik6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OlBsYXRmb3JtQ29udGV4dERpcmVjdDJEKToK
KwogMjAxOS0wOS0xMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IFtXS1RSXSBEcm9wIFRlc3RSdW5uZXIuc2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZF9ERVBSRUNB
VEVEKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3Qy
RE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNDk4MDYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgIkRpcmVjdDJEVXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCkBAIC00MDUsNyArNDA0LDcgQEAgdm9pZCBmaWxsUmVjdChQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcAogewogICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3Jt
Q29udGV4dC5yZW5kZXJUYXJnZXQoKTsKIAotICAgIGNvbnRleHQtPlNldFRhZ3MoMSwgX19MSU5F
X18pOworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKICAgICBGdW5j
dGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+IGRyYXdGdW5jdGlvbiA9IFsmcGxhdGZvcm1D
b250ZXh0LCByZWN0LCAmZmlsbFNvdXJjZV0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdl
dCkgewogICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKICAgICAgICAg
cmVuZGVyVGFyZ2V0LT5GaWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBmaWxsU291cmNlLmJydXNoLmdl
dCgpKTsKQEAgLTQyMSw3ICs0MjAsNyBAQCB2b2lkIGZpbGxSZWN0KFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEJiBwCiB7CiAgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRh
cmdldCgpOwogCi0gICAgY29udGV4dC0+U2V0VGFncygxLCBfX0xJTkVfXyk7CisgICAgcGxhdGZv
cm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwogICAgIEZ1bmN0aW9uPHZvaWQoSUQyRDFS
ZW5kZXJUYXJnZXQqKT4gZHJhd0Z1bmN0aW9uID0gWyZwbGF0Zm9ybUNvbnRleHQsIGNvbG9yLCBy
ZWN0XShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CiAgICAgICAgIGNvbnN0IEQy
RDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwogICAgICAgICByZW5kZXJUYXJnZXQtPkZpbGxSZWN0
YW5nbGUoJmQyZFJlY3QsIHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihjb2xvcikuZ2V0
KCkpOwpAQCAtNDM2LDcgKzQzNSw4IEBAIHZvaWQgZmlsbFJlY3QoUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmIHAKIHZvaWQgZmlsbFJvdW5kZWRSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBw
bGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvciwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQogewogICAgIGF1dG8gY29u
dGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLSAgICBjb250ZXh0LT5TZXRU
YWdzKDEsIF9fTElORV9fKTsKKworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElO
RV9fKTsKIAogICAgIGNvbnN0IEZsb2F0UmVjdCYgciA9IHJlY3QucmVjdCgpOwogICAgIGNvbnN0
IEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSA9IHJlY3QucmFkaWkoKTsKQEAgLTQ2NCw3
ICs0NjQsNyBAQCB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKFBsYXRmb3JtQ29uCiB7CiAg
ICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwogCi0gICAg
Y29udGV4dC0+U2V0VGFncygxLCBfX0xJTkVfXyk7CisgICAgcGxhdGZvcm1Db250ZXh0LnNldFRh
Z3MoMSwgX19MSU5FX18pOwogCiAgICAgUGF0aCBwYXRoOwogICAgIHBhdGguYWRkUmVjdChyZWN0
KTsKQEAgLTQ4NCw3ICs0ODQsNyBAQCB2b2lkIGZpbGxSZWN0V2l0aEdyYWRpZW50KFBsYXRmb3Jt
Q29udGV4CiB7CiAgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdl
dCgpOwogCi0gICAgY29udGV4dC0+U2V0VGFncygxLCBfX0xJTkVfXyk7CisgICAgcGxhdGZvcm1D
b250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwogICAgIEZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5k
ZXJUYXJnZXQqKT4gZHJhd0Z1bmN0aW9uID0gWyZwbGF0Zm9ybUNvbnRleHQsIHJlY3QsICZncmFk
aWVudF0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewogICAgICAgICBjb25zdCBE
MkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKICAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsUmVj
dGFuZ2xlKCZkMmRSZWN0LCBncmFkaWVudCk7CkBAIC00OTksMTMgKzQ5OSwxMiBAQCB2b2lkIGZp
bGxQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwCiAKICAgICBhdXRvIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7CiAKLSAgICBjb250ZXh0LT5TZXRUYWdzKDEs
IF9fTElORV9fKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7CiAK
ICAgICBDT01QdHI8SUQyRDFHZW9tZXRyeUdyb3VwPiBwYXRoVG9GaWxsOwogICAgIHBhdGguY3Jl
YXRlR2VvbWV0cnlXaXRoRmlsbE1vZGUoZmlsbFNvdXJjZS5maWxsUnVsZSwgcGF0aFRvRmlsbCk7
CiAKLSAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKLQorICAgIHBsYXRmb3JtQ29u
dGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKICAgICBGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVy
VGFyZ2V0Kik+IGRyYXdGdW5jdGlvbiA9IFsmcGxhdGZvcm1Db250ZXh0LCAmcGF0aFRvRmlsbCwg
JmZpbGxTb3VyY2VdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKICAgICAgICAg
cmVuZGVyVGFyZ2V0LT5GaWxsR2VvbWV0cnkocGF0aFRvRmlsbC5nZXQoKSwgZmlsbFNvdXJjZS5i
cnVzaC5nZXQoKSk7CiAgICAgfTsKQEAgLTUyMywxMiArNTIyLDEyIEBAIHZvaWQgZmlsbFBhdGgo
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHAKIHsKICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9y
bUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7CiAKLSAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElO
RV9fKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7CiAKICAgICBD
T01QdHI8SUQyRDFHZW9tZXRyeUdyb3VwPiBwYXRoVG9GaWxsOwogICAgIHBhdGguY3JlYXRlR2Vv
bWV0cnlXaXRoRmlsbE1vZGUoV2luZFJ1bGU6OkV2ZW5PZGQsIHBhdGhUb0ZpbGwpOwogCi0gICAg
Y29udGV4dC0+U2V0VGFncygxLCBfX0xJTkVfXyk7CisgICAgcGxhdGZvcm1Db250ZXh0LnNldFRh
Z3MoMSwgX19MSU5FX18pOwogCiAgICAgRnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCop
PiBkcmF3RnVuY3Rpb24gPSBbJnBsYXRmb3JtQ29udGV4dCwgJnBhdGhUb0ZpbGwsIGNvbG9yXShJ
RDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CiAgICAgICAgIHJlbmRlclRhcmdldC0+
RmlsbEdlb21ldHJ5KHBhdGhUb0ZpbGwuZ2V0KCksIHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhD
b2xvcihjb2xvcikuZ2V0KCkpOwpAQCAtNTQ2LDcgKzU0NSw3IEBAIHZvaWQgZmlsbFBhdGgoUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmIHAKIHZvaWQgc3Ryb2tlUmVjdChQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxp
bmVXaWR0aCwgY29uc3QgU3Ryb2tlU291cmNlJiBzdHJva2VTb3VyY2UsIGNvbnN0IFNoYWRvd1N0
YXRlJiBzaGFkb3dTdGF0ZSkKIHsKICAgICBGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0
Kik+IGRyYXdGdW5jdGlvbiA9IFsmcGxhdGZvcm1Db250ZXh0LCAmc3Ryb2tlU291cmNlLCByZWN0
LCBsaW5lV2lkdGhdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAg
cmVuZGVyVGFyZ2V0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKKyAgICAgICAgcGxhdGZvcm1Db250
ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwogICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRS
ZWN0ID0gcmVjdDsKICAgICAgICAgcmVuZGVyVGFyZ2V0LT5EcmF3UmVjdGFuZ2xlKCZkMmRSZWN0
LCBzdHJva2VTb3VyY2UuYnJ1c2guZ2V0KCksIGxpbmVXaWR0aCwgcGxhdGZvcm1Db250ZXh0LnN0
cm9rZVN0eWxlKCkpOwogICAgIH07CkBAIC01NjEsNyArNTYwLDcgQEAgdm9pZCBzdHJva2VQYXRo
KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJgogewogICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3Jt
Q29udGV4dC5yZW5kZXJUYXJnZXQoKTsKICAgICAKLSAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9f
TElORV9fKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7CiAKICAg
ICBhdXRvIGJvdW5kaW5nUmVjdCA9IHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpOwogICAgIEZ1bmN0
aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4gZHJhd0Z1bmN0aW9uID0gWyZwbGF0Zm9ybUNv
bnRleHQsICZwYXRoLCAmc3Ryb2tlU291cmNlXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFy
Z2V0KSB7CkBAIC01ODAsNyArNTc5LDcgQEAgdm9pZCBkcmF3UGF0aChQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRCYgcAogCiAgICAgcGF0aC5jbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQyRDFfRklHVVJF
X0VORF9PUEVOKTsKIAotICAgIGNvbnRleHQtPlNldFRhZ3MoMSwgX19MSU5FX18pOworICAgIHBs
YXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKIAogICAgIGF1dG8gcmVjdCA9IHBh
dGguZmFzdEJvdW5kaW5nUmVjdCgpOwogICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29u
dGV4dCwgcmVjdCwgWyZwbGF0Zm9ybUNvbnRleHQsICZzdHJva2VTb3VyY2UsICZwYXRoXShJRDJE
MVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CkBAIC02MjYsNiArNjI1LDggQEAgdm9pZCBk
cmF3V2l0aFNoYWRvd0hlbHBlcihJRDJEMVJlbmRlclRhcgogCiB2b2lkIGRyYXdXaXRoU2hhZG93
KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgYm91bmRpbmdSZWN0LCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUsIGNvbnN0IFdU
Rjo6RnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCopPiYgZHJhd0NvbW1hbmRzKQogewor
ICAgIHBsYXRmb3JtQ29udGV4dC5ub3RpZnlQcmVEcmF3T2JzZXJ2ZXIoKTsKKwogICAgIGF1dG8g
Y29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKIAogICAgIC8vIFJlbmRl
ciB0aGUgY3VycmVudCBnZW9tZXRyeSB0byBhIGJpdG1hcCBjb250ZXh0CkBAIC02NDEsMTEgKzY0
MiwxNCBAQCB2b2lkIGRyYXdXaXRoU2hhZG93KFBsYXRmb3JtQ29udGV4dERpcmVjCiAgICAgUkVM
RUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAKICAgICBkcmF3V2l0aFNoYWRvd0hlbHBlcihj
b250ZXh0LCBiaXRtYXAuZ2V0KCksIHNoYWRvd1N0YXRlLmNvbG9yLCBzaGFkb3dTdGF0ZS5vZmZz
ZXQsIHNoYWRvd1N0YXRlLmJsdXIpOworICAgIHBsYXRmb3JtQ29udGV4dC5ub3RpZnlQb3N0RHJh
d09ic2VydmVyKCk7CiB9CiAKIHZvaWQgZHJhd1dpdGhvdXRTaGFkb3coUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiAvKmJvdW5kaW5nUmVj
dCovLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4mIGRyYXdD
b21tYW5kcykKIHsKKyAgICBwbGF0Zm9ybUNvbnRleHQubm90aWZ5UHJlRHJhd09ic2VydmVyKCk7
CiAgICAgZHJhd0NvbW1hbmRzKHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7CisgICAg
cGxhdGZvcm1Db250ZXh0Lm5vdGlmeVBvc3REcmF3T2JzZXJ2ZXIoKTsKIH0KIAogdm9pZCBjbGVh
clJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiByZWN0KQpAQCAtNjU1LDcgKzY1OSw3IEBAIHZvaWQgY2xlYXJSZWN0KFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEJgogICAgICAgICBGbG9hdFJlY3QgcmVjdFRvQ2xlYXIocmVjdCk7CiAK
ICAgICAgICAgaWYgKHJlY3RUb0NsZWFyLmNvbnRhaW5zKHJlbmRlclRhcmdldFJlY3QpKSB7Ci0g
ICAgICAgICAgICByZW5kZXJUYXJnZXQtPlNldFRhZ3MoMSwgX19MSU5FX18pOworICAgICAgICAg
ICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwogICAgICAgICAgICAgcmVu
ZGVyVGFyZ2V0LT5DbGVhcihEMkQxOjpDb2xvckYoMCwgMCwgMCwgMCkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CkBAIC02NjMsNyArNjY3LDcgQEAgdm9pZCBjbGVhclJlY3QoUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmCiAgICAgICAgIGlmICghcmVjdFRvQ2xlYXIuaW50ZXJzZWN0
cyhyZW5kZXJUYXJnZXRSZWN0KSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICByZW5k
ZXJUYXJnZXQtPlNldFRhZ3MoMSwgX19MSU5FX18pOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQu
c2V0VGFncygxLCBfX0xJTkVfXyk7CiAgICAgICAgIHJlY3RUb0NsZWFyLmludGVyc2VjdChyZW5k
ZXJUYXJnZXRSZWN0KTsKICAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsUmVjdGFuZ2xlKHJlY3RU
b0NsZWFyLCBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3IoQ29sb3IoRDJEMTo6Q29sb3JG
KDAsIDAsIDAsIDApKSkuZ2V0KCkpOwogICAgIH0pOwpAQCAtNzM0LDYgKzczOCw3IEBAIHZvaWQg
ZHJhd0dseXBocyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYKICAgICAvLyAgICAgZ3JhcGhpY3ND
b250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsK
IAogICAgIHBsYXRmb3JtQ29udGV4dC5yZXN0b3JlKCk7CisgICAgcGxhdGZvcm1Db250ZXh0Lm5v
dGlmeVBvc3REcmF3T2JzZXJ2ZXIoKTsKIH0KIAogCkBAIC03OTcsOCArODAyLDcgQEAgdm9pZCBk
cmF3TmF0aXZlSW1hZ2UoUGxhdGZvcm1Db250ZXh0RGlyZQogICAgICAgICB9CiAgICAgfQogCi0g
ICAgY29udGV4dC0+U2V0VGFncygxLCBfX0xJTkVfXyk7Ci0KKyAgICBwbGF0Zm9ybUNvbnRleHQu
c2V0VGFncygxLCBfX0xJTkVfXyk7CiAgICAgRnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdl
dCopPiBkcmF3RnVuY3Rpb24gPSBbaW1hZ2UsIGFkanVzdGVkRGVzdFJlY3QsIGdsb2JhbEFscGhh
LCBzcmNSZWN0XShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CiAgICAgICAgIHJl
bmRlclRhcmdldC0+RHJhd0JpdG1hcChpbWFnZSwgYWRqdXN0ZWREZXN0UmVjdCwgZ2xvYmFsQWxw
aGEsIEQyRDFfQklUTUFQX0lOVEVSUE9MQVRJT05fTU9ERV9MSU5FQVIsIHNyY1JlY3QpOwogICAg
IH07CkBAIC04NjksOCArODczLDcgQEAgdm9pZCBkcmF3UmVjdChQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYgcAogCiAgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdl
dCgpOwogCi0gICAgY29udGV4dC0+U2V0VGFncygxLCBfX0xJTkVfXyk7Ci0KKyAgICBwbGF0Zm9y
bUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7CiAgICAgZHJhd1dpdGhvdXRTaGFkb3cocGxh
dGZvcm1Db250ZXh0LCByZWN0LCBbJnBsYXRmb3JtQ29udGV4dCwgcmVjdCwgZmlsbENvbG9yLCBz
dHJva2VDb2xvciwgc3Ryb2tlU3R5bGVdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQp
IHsKICAgICAgICAgY29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7CiAgICAgICAgIGF1
dG8gZmlsbEJydXNoID0gcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKGZpbGxDb2xvcik7
CkBAIC05MjEsNyArOTI0LDcgQEAgdm9pZCBkcmF3TGluZShQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCYgcAogICAgIGF1dG8gcDEgPSBjZW50ZXJlZFBvaW50c1swXTsKICAgICBhdXRvIHAyID0gY2Vu
dGVyZWRQb2ludHNbMV07CiAKLSAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKKyAg
ICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7CiAKICAgICBGbG9hdFJlY3Qg
Ym91bmRpbmdSZWN0KHAxLCBwMik7CiAKQEAgLTk0Niw4ICs5NDksNyBAQCB2b2lkIGZpbGxFbGxp
cHNlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJECiAKICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9y
bUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7CiAKLSAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElO
RV9fKTsKLQorICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKICAgICBk
cmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIHJlY3QsIFsmcGxhdGZvcm1Db250ZXh0
LCBlbGxpcHNlLCBmaWxsQ29sb3IsIHN0cm9rZVN0eWxlLCBzdHJva2VDb2xvciwgc3Ryb2tlVGhp
Y2tuZXNzXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CiAgICAgICAgIGF1dG8g
ZmlsbEJydXNoID0gcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKGZpbGxDb2xvcik7CiAg
ICAgICAgIHJlbmRlclRhcmdldC0+RmlsbEVsbGlwc2UoJmVsbGlwc2UsIGZpbGxCcnVzaC5nZXQo
KSk7CkBAIC05NjcsOCArOTY5LDcgQEAgdm9pZCBkcmF3RWxsaXBzZShQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRAogCiAgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdl
dCgpOwogCi0gICAgY29udGV4dC0+U2V0VGFncygxLCBfX0xJTkVfXyk7Ci0KKyAgICBwbGF0Zm9y
bUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7CiAgICAgZHJhd1dpdGhvdXRTaGFkb3cocGxh
dGZvcm1Db250ZXh0LCByZWN0LCBbJnBsYXRmb3JtQ29udGV4dCwgZWxsaXBzZSwgc3Ryb2tlQ29s
b3IsIHN0cm9rZVRoaWNrbmVzc10oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewog
ICAgICAgICBhdXRvIHN0cm9rZUJydXNoID0gcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9y
KHN0cm9rZUNvbG9yKTsKICAgICAgICAgcmVuZGVyVGFyZ2V0LT5EcmF3RWxsaXBzZSgmZWxsaXBz
ZSwgc3Ryb2tlQnJ1c2guZ2V0KCksIHN0cm9rZVRoaWNrbmVzcywgcGxhdGZvcm1Db250ZXh0LnN0
cm9rZVN0eWxlKCkpOwpAQCAtOTkwLDYgKzk5MSw3IEBAIHZvaWQgZmx1c2goUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQmIHBsYXQKICAgICBBU1NFUlQocGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdl
dCgpKTsKICAgICBEMkQxX1RBRyBmaXJzdCwgc2Vjb25kOwogICAgIEhSRVNVTFQgaHIgPSBwbGF0
Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPkZsdXNoKCZmaXJzdCwgJnNlY29uZCk7CisgICAg
cGxhdGZvcm1Db250ZXh0Lm5vdGlmeVBvc3REcmF3T2JzZXJ2ZXIoKTsKIAogICAgIFJFTEVBU0Vf
QVNTRVJUKFNVQ0NFRURFRChocikpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAkocmV2aXNp
b24gMjQ5ODA2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRp
ZW50RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDkgQEAgdm9pZCBH
cmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQmIGNvbgogICAgICAgICAgICAgaWYgKCFtX2Nh
Y2hlZEhhc2ggfHwgIW1fZ3JhZGllbnQpCiAgICAgICAgICAgICAgICAgZ2VuZXJhdGVHcmFkaWVu
dChkMmRDb250ZXh0KTsKIAorI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgICAgIGQyZENv
bnRleHQtPlNldFRhZ3MoR1JBRElFTlRfRFJBV0lORywgX19MSU5FX18pOworI2VuZGlmCiAKICAg
ICAgICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwogICAgICAgICAgICAg
ZDJkQ29udGV4dC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgbV9ncmFkaWVudCk7CkBAIC0xNDUs
NyArMTQ3LDkgQEAgdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQmIGNvbgogICAg
ICAgICAgICAgaWYgKCFtX2NhY2hlZEhhc2ggfHwgIW1fZ3JhZGllbnQpCiAgICAgICAgICAgICAg
ICAgZ2VuZXJhdGVHcmFkaWVudChkMmRDb250ZXh0KTsKIAorI2lmICFBU1NFUlRfRElTQUJMRUQK
ICAgICAgICAgICAgIGQyZENvbnRleHQtPlNldFRhZ3MoR1JBRElFTlRfRFJBV0lORywgX19MSU5F
X18pOworI2VuZGlmCiAKICAgICAgICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSBy
ZWN0OwogICAgICAgICAgICAgZDJkQ29udGV4dC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgbV9n
cmFkaWVudCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAJKHJldmlzaW9u
IDI0OTgwNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1
ZmZlckRhdGFEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDIwIEBAIHZv
aWQgc3dpenpsZUFuZFByZW11bHRpcGx5KGNvbnN0IHVpbnQ4X3QKICAgICB9CiB9CiAKK2Jvb2wg
SW1hZ2VCdWZmZXJEYXRhOjplbnN1cmVCYWNraW5nU3RvcmUoY29uc3QgSW50U2l6ZSYgc2l6ZSkg
Y29uc3QKK3sKKyAgICBpZiAoc2l6ZSA9PSBiYWNraW5nU3RvcmVTaXplICYmICFkYXRhLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBhdXRvIG51bUJ5dGVzID0gc2l6ZS5h
cmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKKyAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dl
ZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBiYWNraW5nU3RvcmVTaXplID0gc2l6
ZTsKKyAgICBkYXRhLnJlc2l6ZVRvRml0KG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKKyAgICByZXR1
cm4gZGF0YS5jYXBhY2l0eSgpID09IG51bUJ5dGVzLnVuc2FmZUdldCgpOworfQorCiBSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNp
emUmIHNpemUsIGJvb2wgLyogYWNjZWxlcmF0ZVJlbmRlcmluZyAqLywgZmxvYXQgLyogcmVzb2x1
dGlvblNjYWxlICovKSBjb25zdAogewogICAgIGF1dG8gbnVtQnl0ZXMgPSByZWN0LmFyZWE8UmVj
b3JkT3ZlcmZsb3c+KCkgKiA0OwpAQCAtODYsNTEgKzEwMCw2MiBAQCBSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
YXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChu
dW1CeXRlcy51bnNhZmVHZXQoKSk7Ci0gICAgdW5zaWduZWQgY2hhciogcmVzdWx0RGF0YSA9IHJl
c3VsdCA/IHJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIXJlc3VsdERhdGEpCisg
ICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKCFiaXRt
YXApCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBjb250ZXh0LT5lbmREcmF3KCk7Ci0K
LSAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBkMmREZXZpY2VDb250ZXh0OwotICAgIEhS
RVNVTFQgaHIgPSBwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpLT5RdWVyeUludGVyZmFj
ZShfX3V1aWRvZihJRDJEMURldmljZUNvbnRleHQpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4o
JmQyZERldmljZUNvbnRleHQpKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgYXV0
byBieXRlc1BlclJvd0luRGF0YSA9IHJlY3Qud2lkdGgoKSAqIDQ7CisgICAgYXV0byBoZWlnaHQg
PSByZWN0LmhlaWdodCgpOworICAgIGF1dG8gd2lkdGggPSByZWN0LndpZHRoKCk7CisKKyAgICBp
ZiAoYml0bWFwQnVmZmVyU3luYyA9PSBCaXRtYXBCdWZmZXJTeW5jOjpCdWZmZXJPdXRPZlN5bmMg
fHwgZGF0YS5zaXplKCkgIT0gbnVtQnl0ZXMudW5zYWZlR2V0KCkpIHsKKyAgICAgICAgY29udGV4
dC0+ZW5kRHJhdygpOworCisgICAgICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IGQyZERl
dmljZUNvbnRleHQoUXVlcnksIHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCkpOworICAg
ICAgICBBU1NFUlQoISFkMmREZXZpY2VDb250ZXh0KTsKKworICAgICAgICAvLyBDb3B5IEdQVSBk
YXRhIGZyb20gdGhlIElEMkQxQml0bWFwIHRvIGEgQ1BVLWJhY2tlZCBJRDJEMUJpdG1hcDEKKyAg
ICAgICAgQ09NUHRyPElEMkQxQml0bWFwMT4gY3B1Qml0bWFwOworICAgICAgICBEMkQxX0JJVE1B
UF9QUk9QRVJUSUVTMSBiaXRtYXBQcm9wZXJ0aWVzMiA9IEQyRDE6OkJpdG1hcFByb3BlcnRpZXMx
KEQyRDFfQklUTUFQX09QVElPTlNfQ1BVX1JFQUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NBTk5P
VF9EUkFXLCBEaXJlY3QyRDo6cGl4ZWxGb3JtYXQoKSk7CisgICAgICAgIEhSRVNVTFQgaHIgPSBk
MmREZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRtYXAoc2l6ZSwgbnVsbHB0ciwgYnl0ZXNQZXJSb3dJ
bkRhdGEsIGJpdG1hcFByb3BlcnRpZXMyLCAmY3B1Qml0bWFwKTsKKyAgICAgICAgaWYgKCFTVUND
RUVERUQoaHIpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgYXV0byB0
YXJnZXRQb3MgPSBEMkQxOjpQb2ludDJVKCk7CisgICAgICAgIEQyRDFfUkVDVF9VIGRhdGFSZWN0
ID0gcmVjdDsKKyAgICAgICAgaHIgPSBjcHVCaXRtYXAtPkNvcHlGcm9tQml0bWFwKCZ0YXJnZXRQ
b3MsIGJpdG1hcC5nZXQoKSwgJmRhdGFSZWN0KTsKKyAgICAgICAgaWYgKCFTVUNDRUVERUQoaHIp
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgRDJEMV9NQVBQRURfUkVD
VCBtYXBwZWREYXRhOworICAgICAgICBociA9IGNwdUJpdG1hcC0+TWFwKEQyRDFfTUFQX09QVElP
TlNfUkVBRCwgJm1hcHBlZERhdGEpOworICAgICAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpZiAobWFwcGVkRGF0YS5iaXRzKSB7
CisgICAgICAgICAgICBpZiAoIWVuc3VyZUJhY2tpbmdTdG9yZShiaXRtYXAtPkdldFBpeGVsU2l6
ZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAgICAgLy8g
U29mdHdhcmUgZmlsdGVycyBleHBlY3QgUkdCQSBieXRlcy4gV2UgbmVlZCB0byBzd2l6emxlIGZy
b20gRGlyZWN0MkQncyBCR1JBIHRvIGJlIGNvbXBhdGlibGUuCisgICAgICAgICAgICBpZiAoZGVz
aXJlZEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCisg
ICAgICAgICAgICAgICAgc3dpenpsZUFuZFByZW11bHRpcGx5PEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZD4obWFwcGVkRGF0YS5iaXRzLCBoZWlnaHQsIHdpZHRoLCBtYXBw
ZWREYXRhLnBpdGNoLCBieXRlc1BlclJvd0luRGF0YSwgZGF0YS5kYXRhKCkpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHN3aXp6bGVBbmRQcmVtdWx0aXBseTxBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihtYXBwZWREYXRhLmJpdHMsIGhlaWdodCwgd2lk
dGgsIG1hcHBlZERhdGEucGl0Y2gsIGJ5dGVzUGVyUm93SW5EYXRhLCBkYXRhLmRhdGEoKSk7CiAK
LSAgICBhdXRvIGJ5dGVzUGVyUm93SW5EYXRhID0gc2l6ZS53aWR0aCgpICogNDsKLQotICAgIENP
TVB0cjxJRDJEMUJpdG1hcDE+IGNwdUJpdG1hcDsKLSAgICBEMkQxX0JJVE1BUF9QUk9QRVJUSUVT
MSBiaXRtYXBQcm9wZXJ0aWVzMiA9IEQyRDE6OkJpdG1hcFByb3BlcnRpZXMxKEQyRDFfQklUTUFQ
X09QVElPTlNfQ1BVX1JFQUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NBTk5PVF9EUkFXLCBEaXJl
Y3QyRDo6cGl4ZWxGb3JtYXQoKSk7Ci0gICAgaHIgPSBkMmREZXZpY2VDb250ZXh0LT5DcmVhdGVC
aXRtYXAoc2l6ZSwgbnVsbHB0ciwgYnl0ZXNQZXJSb3dJbkRhdGEsIGJpdG1hcFByb3BlcnRpZXMy
LCAmY3B1Qml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICAgICAgYnl0ZUZvcm1hdCA9IGRlc2lyZWRGb3JtYXQ7CiAKLSAgICBE
MkQxX1BPSU5UXzJVIHRhcmdldFBvcyA9IEQyRDE6OlBvaW50MlUoKTsKLSAgICBEMkQxX1JFQ1Rf
VSBkYXRhUmVjdCA9IHJlY3Q7Ci0gICAgaHIgPSBjcHVCaXRtYXAtPkNvcHlGcm9tQml0bWFwKCZ0
YXJnZXRQb3MsIGJpdG1hcC5nZXQoKSwgJmRhdGFSZWN0KTsKLSAgICBpZiAoIVNVQ0NFRURFRCho
cikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRDJEMV9NQVBQRURfUkVDVCBtYXBw
ZWREYXRhOwotICAgIGhyID0gY3B1Qml0bWFwLT5NYXAoRDJEMV9NQVBfT1BUSU9OU19SRUFELCAm
bWFwcGVkRGF0YSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIC8vIFNvZnR3YXJlIGZpbHRlcnMgZXhwZWN0IFJHQkEgYnl0ZXMuIFdlIG5l
ZWQgdG8gc3dpenpsZSBmcm9tIERpcmVjdDJEJ3MgQkdSQSB0byBiZSBjb21wYXRpYmxlLgotICAg
IENoZWNrZWQ8aW50PiBoZWlnaHQgPSByZWN0LmhlaWdodCgpOwotICAgIENoZWNrZWQ8aW50PiB3
aWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICAgICAgICAgIGJpdG1hcEJ1ZmZlclN5bmMgPSBCaXRt
YXBCdWZmZXJTeW5jOjpJblN5bmM7CisgICAgICAgIH0KIAotICAgIGlmIChkZXNpcmVkRm9ybWF0
ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAgc3dp
enpsZUFuZFByZW11bHRpcGx5PEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZD4obWFwcGVkRGF0YS5iaXRzLCBoZWlnaHQudW5zYWZlR2V0KCksIHdpZHRoLnVuc2FmZUdldCgp
LCBtYXBwZWREYXRhLnBpdGNoLCBieXRlc1BlclJvd0luRGF0YSwgcmVzdWx0RGF0YSk7Ci0gICAg
ZWxzZQotICAgICAgICBzd2l6emxlQW5kUHJlbXVsdGlwbHk8QWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZD4obWFwcGVkRGF0YS5iaXRzLCBoZWlnaHQudW5zYWZlR2V0KCksIHdp
ZHRoLnVuc2FmZUdldCgpLCBtYXBwZWREYXRhLnBpdGNoLCBieXRlc1BlclJvd0luRGF0YSwgcmVz
dWx0RGF0YSk7CisgICAgICAgIGhyID0gY3B1Qml0bWFwLT5Vbm1hcCgpOworICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKGhyKSk7CiAKLSAgICBociA9IGNwdUJpdG1hcC0+VW5tYXAoKTsKLSAgICBB
U1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgICAgIGNvbnRleHQtPmJlZ2luRHJhdygpOworICAg
IH0KIAotICAgIGNvbnRleHQtPmJlZ2luRHJhdygpOworICAgIHJlc3VsdC0+c2V0UmFuZ2UoZGF0
YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAwKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0y
MDMsNDMgKzIyOCw2NSBAQCB2b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YShjb25zdCBVaW50
CiAgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGNvbnRleHQtPmVuZERyYXcoKTsKLQorI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBhdXRv
IHBpeGVsU2l6ZSA9IGJpdG1hcC0+R2V0UGl4ZWxTaXplKCk7CiAgICAgQVNTRVJUKHBpeGVsU2l6
ZS53aWR0aCA+PSBzb3VyY2VTaXplLndpZHRoKCkpOwogICAgIEFTU0VSVChwaXhlbFNpemUud2lk
dGggPj0gc2l6ZS53aWR0aCgpKTsKICAgICBBU1NFUlQocGl4ZWxTaXplLmhlaWdodCA+PSBzb3Vy
Y2VTaXplLmhlaWdodCgpKTsKICAgICBBU1NFUlQocGl4ZWxTaXplLmhlaWdodCA+PSBzaXplLmhl
aWdodCgpKTsKKyNlbmRpZgorCisgICAgaWYgKCFlbnN1cmVCYWNraW5nU3RvcmUoc2l6ZSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1lbWNweShkYXRhLmRhdGEoKSwgc291cmNlLmRhdGEoKSwg
c291cmNlLmxlbmd0aCgpKTsKKworICAgIGJ5dGVGb3JtYXQgPSBzb3VyY2VGb3JtYXQ7CisgICAg
Yml0bWFwQnVmZmVyU3luYyA9IEJpdG1hcEJ1ZmZlclN5bmM6OkJpdG1hcE91dE9mU3luYzsKK30K
Kwordm9pZCBJbWFnZUJ1ZmZlckRhdGE6OmxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCgpCit7Cisg
ICAgaWYgKGJpdG1hcEJ1ZmZlclN5bmMgIT0gQml0bWFwQnVmZmVyU3luYzo6Qml0bWFwT3V0T2ZT
eW5jIHx8IGRhdGEuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHBpeGVs
U2l6ZSA9IGJpdG1hcC0+R2V0UGl4ZWxTaXplKCk7CisgICAgQVNTRVJUKHBpeGVsU2l6ZS53aWR0
aCA+PSBiYWNraW5nU3RvcmVTaXplLndpZHRoKCkpOworICAgIEFTU0VSVChwaXhlbFNpemUuaGVp
Z2h0ID49IGJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpOworCisgICAgQ2hlY2tlZDx1bnNpZ25l
ZCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gcGl4ZWxTaXplLndpZHRoICogcGl4ZWxTaXpl
LmhlaWdodCAqIDQ7CisgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gU29mdHdhcmUgZ2VuZXJhdGVkIGJpdG1hcCBkYXRhIGlzIGluIFJH
QkEuIFdlIG5lZWQgdG8gc3dpenpsZSB0byBwcmVtdWx0aXBsaWVkIEJHUkEgdG8gYmUgY29tcGF0
aWJsZQogICAgIC8vIHdpdGggdGhlIEhXTkQvSERDIHJlbmRlciBiYWNraW5nIHdlIHVzZS4KLSAg
ICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCkKLSAgICAgICAgaW5QbGFjZVN3aXp6bGU8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkPihzb3VyY2UuZGF0YSgpLCBzb3VyY2UubGVuZ3RoKCkpOyAvLyBSR0JBIC0+
IFBCR1JBCisgICAgaWYgKGJ5dGVGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkKQorICAgICAgICBpblBsYWNlU3dpenpsZTxBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQ+KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7IC8vIFJHQkEg
LT4gUEJHUkEKICAgICBlbHNlCi0gICAgICAgIGluUGxhY2VTd2l6emxlPEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQ+KHNvdXJjZS5kYXRhKCksIHNvdXJjZS5sZW5ndGgoKSk7
IC8vIFBSR0JBIC0+IFBCR1JBCisgICAgICAgIGluUGxhY2VTd2l6emxlPEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQ+KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7IC8vIFBS
R0JBIC0+IFBCR1JBCisKKyAgICAvLyBDb3B5IHRoZSBiaXRzIGZyb20gY3VycmVudCByZW5kZXJU
YXJnZXQgdG8gdGhlIG91dHB1dCB0YXJnZXQuCisgICAgLy8gV2UgY2Fubm90IGFjY2VzcyB0aGUg
ZGF0YSBiYWNraW5nIGFuIElXSUNCaXRtYXAgb3IgSUQyRDFCaXRtYXAgd2hpbGUgYW4gYWN0aXZl
IGRyYXcgc2Vzc2lvbiBpcyBvcGVuLgorICAgIGNvbnRleHQtPmVuZERyYXcoKTsKIAogICAgIENP
TVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwUmVuZGVyVGFyZ2V0OwotICAgIEhS
RVNVTFQgaHIgPSBwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpLT5RdWVyeUludGVyZmFj
ZShfX3V1aWRvZihJRDJEMUJpdG1hcFJlbmRlclRhcmdldCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCoqPigmYml0bWFwUmVuZGVyVGFyZ2V0KSk7CisgICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29u
dGV4dC0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5SW50ZXJmYWNlKCZiaXRtYXBSZW5kZXJUYXJnZXQp
OwogICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKIAotICAgIGF1dG8gYnl0ZXNQZXJSb3dJbkRh
dGEgPSBzb3VyY2VSZWN0LndpZHRoKCkgKiA0OworICAgIGF1dG8gYnl0ZXNQZXJSb3dJbkRhdGEg
PSBiYWNraW5nU3RvcmVTaXplLndpZHRoKCkgKiA0OwogCi0gICAgQ09NUHRyPElEMkQxQml0bWFw
PiBzd2l6emxlZEJpdG1hcDsKLSAgICBEMkQxX0JJVE1BUF9QUk9QRVJUSUVTIGJpdG1hcFByb3Bl
cnRpZXMgPSBEMkQxOjpCaXRtYXBQcm9wZXJ0aWVzKERpcmVjdDJEOjpwaXhlbEZvcm1hdCgpKTsK
LSAgICBociA9IGJpdG1hcFJlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFwKHNvdXJjZVNpemUsIHNv
dXJjZS5kYXRhKCksIGJ5dGVzUGVyUm93SW5EYXRhLCBiaXRtYXBQcm9wZXJ0aWVzLCAmc3dpenps
ZWRCaXRtYXApOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgRDJEMV9QT0lOVF8yVSBkZXN0UG9pbnREMkQgPSBkZXN0UG9pbnQ7Ci0gICAgRDJEMV9SRUNU
X1Ugc3JjUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgaHIgPSBiaXRtYXAtPkNvcHlGcm9tTWVtb3J5
KCZzcmNSZWN0LCBzb3VyY2UuZGF0YSgpLCBieXRlc1BlclJvd0luRGF0YSk7CisgICAgaHIgPSBi
aXRtYXAtPkNvcHlGcm9tTWVtb3J5KG51bGxwdHIsIGRhdGEuZGF0YSgpLCBieXRlc1BlclJvd0lu
RGF0YSk7CiAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwogCiAgICAgY29udGV4dC0+YmVnaW5E
cmF3KCk7CisKKyAgICBiaXRtYXBCdWZmZXJTeW5jID0gQml0bWFwQnVmZmVyU3luYzo6SW5TeW5j
OwogfQogCiBDT01QdHI8SUQyRDFCaXRtYXA+IEltYWdlQnVmZmVyRGF0YTo6Y29tcGF0aWJsZUJp
dG1hcChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQogeworICAgIGxvYWREYXRhVG9C
aXRtYXBJZk5lZWRlZCgpOworCiAgICAgaWYgKCFyZW5kZXJUYXJnZXQpCiAgICAgICAgIHJldHVy
biBiaXRtYXA7CiAKQEAgLTI4Miw3ICszMjksNyBAQCBDT01QdHI8SUQyRDFCaXRtYXA+IEltYWdl
QnVmZmVyRGF0YTo6Y29tCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgQ09NUHRyPElE
MkQxRGV2aWNlQ29udGV4dD4gdGFyZ2V0RGV2aWNlQ29udGV4dDsKLSAgICBociA9IHJlbmRlclRh
cmdldC0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSUQyRDFEZXZpY2VDb250ZXh0KSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKio+KCZ0YXJnZXREZXZpY2VDb250ZXh0KSk7CisgICAgaHIgPSByZW5k
ZXJUYXJnZXQtPlF1ZXJ5SW50ZXJmYWNlKCZ0YXJnZXREZXZpY2VDb250ZXh0KTsKICAgICBBU1NF
UlQoU1VDQ0VFREVEKGhyKSk7CiAKICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvbXBhdGlibGVC
aXRtYXA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VC
dWZmZXJEYXRhRGlyZWN0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaAkocmV2aXNpb24gMjQ5ODA2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0
YURpcmVjdDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUg
IkltYWdlLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4
dERpcmVjdDJELmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXku
aD4KICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CkBAIC00MCwxOSArNDEsMjcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQ7CiAKIHN0cnVjdCBJbWFnZUJ1ZmZlckRhdGEgewotICAgIElu
dFNpemUgYmFja2luZ1N0b3JlU2l6ZTsKKyAgICBtdXRhYmxlIEludFNpemUgYmFja2luZ1N0b3Jl
U2l6ZTsKICAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYnl0ZXNQZXJSb3c7
CiAKICAgICAvLyBPbmx5IGZvciBzb2Z0d2FyZSBJbWFnZUJ1ZmZlcnMuCi0gICAgVmVjdG9yPGNo
YXI+IGRhdGE7CisgICAgbXV0YWJsZSBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBtdXRhYmxl
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gYnl0ZUZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRD4gcGxhdGZvcm1Db250ZXh0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGlj
c0NvbnRleHQ+IGNvbnRleHQ7CiAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7CiAKKyAg
ICBlbnVtIGNsYXNzIEJpdG1hcEJ1ZmZlclN5bmMgeyBJblN5bmMsIEJpdG1hcE91dE9mU3luYywg
QnVmZmVyT3V0T2ZTeW5jIH07CisgICAgbXV0YWJsZSBCaXRtYXBCdWZmZXJTeW5jIGJpdG1hcEJ1
ZmZlclN5bmMgeyBCaXRtYXBCdWZmZXJTeW5jOjpCdWZmZXJPdXRPZlN5bmMgfTsKKwogICAgIFJl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBj
b25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlKSBjb25zdDsKICAgICB2b2lkIHB1dERhdGEoY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3Jt
YXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJh
dGVSZW5kZXJpbmcsIGZsb2F0IHJlc29sdXRpb25TY2FsZSk7CiAKICAgICBDT01QdHI8SUQyRDFC
aXRtYXA+IGNvbXBhdGlibGVCaXRtYXAoSUQyRDFSZW5kZXJUYXJnZXQqKTsKKworICAgIGJvb2wg
ZW5zdXJlQmFja2luZ1N0b3JlKGNvbnN0IEludFNpemUmKSBjb25zdDsKKyAgICB2b2lkIGxvYWRE
YXRhVG9CaXRtYXBJZk5lZWRlZCgpOworICAgIHZvaWQgbWFya0J1ZmZlck91dE9mU3luYygpIHsg
Yml0bWFwQnVmZmVyU3luYyA9IEJpdG1hcEJ1ZmZlclN5bmM6OkJ1ZmZlck91dE9mU3luYzsgfQog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNw
cAkocmV2aXNpb24gMjQ5ODA2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1
LDExIEBAIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUKICAgICBpZiAo
IVNVQ0NFRURFRChocikpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS5wbGF0Zm9ybUNv
bnRleHQgPSBtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPihiaXRtYXBDb250ZXh0
LmdldCgpKTsKKyAgICBtX2RhdGEucGxhdGZvcm1Db250ZXh0ID0gbWFrZVVuaXF1ZTxQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRD4oYml0bWFwQ29udGV4dC5nZXQoKSwgW3RoaXNdKCkgeworICAgICAg
ICBtX2RhdGEubG9hZERhdGFUb0JpdG1hcElmTmVlZGVkKCk7CisgICAgfSwgW3RoaXNdKCkgewor
ICAgICAgICBtX2RhdGEubWFya0J1ZmZlck91dE9mU3luYygpOworICAgIH0pOwogICAgIG1fZGF0
YS5jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KG1fZGF0YS5wbGF0Zm9ybUNv
bnRleHQuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6
OkdQVU1lbW9yeSk7CiAKICAgICBzdWNjZXNzID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29u
dGV4dERpcmVjdDJELmNwcAkocmV2aXNpb24gMjQ5ODA2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDAsOCArNDAsMTAgQEAgcHVibGljOgogICAgIFN0YXRlKCkgPSBkZWZhdWx0Owog
fTsKIAotUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OlBsYXRmb3JtQ29udGV4dERpcmVjdDJEKElE
MkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCitQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCwg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgcHJlRHJhd0hhbmRsZXIsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiYmIHBvc3REcmF3SGFuZGxlcikKICAgICA6IG1fcmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdl
dCkKKyAgICAsIG1fcHJlRHJhd0hhbmRsZXIoV1RGTW92ZShwcmVEcmF3SGFuZGxlcikpCisgICAg
LCBtX3Bvc3REcmF3SGFuZGxlcihXVEZNb3ZlKHBvc3REcmF3SGFuZGxlcikpCiB7CiAgICAgbV9z
dGF0ZVN0YWNrLmFwcGVuZChTdGF0ZSgpKTsKICAgICBtX3N0YXRlID0gJm1fc3RhdGVTdGFjay5s
YXN0KCk7CkBAIC0yNjAsNiArMjYyLDI2IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6
OmVuZERyYXcoKQogICAgIC0tYmVnaW5EcmF3Q291bnQ7CiB9CiAKK3ZvaWQgUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQ6OnNldFRhZ3MoRDJEMV9UQUcgdGFnMSwgRDJEMV9UQUcgdGFnMikKK3sKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECisgICAgbV9yZW5kZXJUYXJnZXQtPlNldFRhZ3ModGFnMSwgdGFn
Mik7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YWcxKTsKKyAgICBVTlVTRURfUEFSQU0odGFn
Mik7CisjZW5kaWYKK30KKwordm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6bm90aWZ5UHJl
RHJhd09ic2VydmVyKCkKK3sKKyAgICBtX3ByZURyYXdIYW5kbGVyKCk7Cit9CisKK3ZvaWQgUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQ6Om5vdGlmeVBvc3REcmF3T2JzZXJ2ZXIoKQoreworICAgIG1f
cG9zdERyYXdIYW5kbGVyKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oCShyZXZp
c2lvbiAyNDk4MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBj
bGFzcyBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQpOwog
cHVibGljOgotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKElEMkQxUmVuZGVyVGFyZ2V0Kik7
CisgICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQoSUQyRDFSZW5kZXJUYXJnZXQqLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4mJiBwcmVEcmF3SGFuZGxlciA9IFtdKCkgeyB9LCBXVEY6OkZ1bmN0aW9u
PHZvaWQoKT4mJiBwb3N0RHJhd0hhbmRsZXIgPSBbXSgpIHsgfSk7CiAgICAgflBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEKCk7CiAKICAgICBJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KCkg
eyByZXR1cm4gbV9yZW5kZXJUYXJnZXQuZ2V0KCk7IH0KQEAgLTEwOSw2ICsxMDksMTAgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0QmxlbmRNb2RlKEQyRDFfQkxFTkRfTU9ERSBtb2RlKSB7IG1fYmxl
bmRNb2RlID0gbW9kZTsgfQogICAgIHZvaWQgc2V0Q29tcG9zaXRlTW9kZShEMkQxX0NPTVBPU0lU
RV9NT0RFIG1vZGUpIHsgbV9jb21wb3NpdGVNb2RlID0gbW9kZTsgfQogCisgICAgdm9pZCBzZXRU
YWdzKEQyRDFfVEFHIHRhZzEsIEQyRDFfVEFHIHRhZzIpOworICAgIHZvaWQgbm90aWZ5UHJlRHJh
d09ic2VydmVyKCk7CisgICAgdm9pZCBub3RpZnlQb3N0RHJhd09ic2VydmVyKCk7CisKIHByaXZh
dGU6CiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2dyYXBoaWNzQ29udGV4
dFByaXZhdGUgeyBudWxscHRyIH07CiAKQEAgLTEyMyw2ICsxMjcsOSBAQCBwcml2YXRlOgogICAg
IENPTVB0cjxJRDJEMUJpdG1hcEJydXNoPiBtX3BhdHRlcm5TdHJva2VCcnVzaDsKICAgICBDT01Q
dHI8SUQyRDFCaXRtYXBCcnVzaD4gbV9wYXR0ZXJuRmlsbEJydXNoOwogCisgICAgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IG1fcHJlRHJhd0hhbmRsZXI7CisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+
IG1fcG9zdERyYXdIYW5kbGVyOworCiAgICAgY2xhc3MgU3RhdGU7CiAgICAgU3RhdGUqIG1fc3Rh
dGUgeyBudWxscHRyIH07CiAgICAgVmVjdG9yPFN0YXRlPiBtX3N0YXRlU3RhY2s7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>