<?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>163898</bug_id>
          
          <creation_ts>2016-10-24 10:27:36 -0700</creation_ts>
          <short_desc>[Win][Direct2D] Simplify Begin/EndDraw state maintenance based on GraphicsContext object lifetimes.</short_desc>
          <delta_ts>2016-10-30 13:51:52 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>163988</dependson>
    
    <dependson>163994</dependson>
    
    <dependson>164005</dependson>
          <blocked>161817</blocked>
          <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>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pvollan</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1243761</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-24 10:27:36 -0700</bug_when>
    <thetext>Tests (like MotionMark) that use CSS filters and other effects currently fail under Direct2D on Windows because Direct2D expects certain operations (such as clipping) to only occur during drawing calls (i.e., inside a &quot;BeginDraw&quot;, &quot;EndDraw&quot; pair).

This patch does the following:
1. Uses a smart pointer for Direct2D native path types to reduce memory leaks.
2. Adds a &quot;BeginDraw&quot; call in the Filter code at the start of filter drawing.
3. Adds an &quot;EndDraw&quot; call in the Filter code when drawing is finished.
4. Adds a new &quot;temporaryBeginDrawIfNeeded&quot; method to enter a draw operation if needed to execute the drawing commands needed during a filter or canvas drawing operation.
5. Improve performance by creating a single GDI Interop object for the Direct2D device instead of creating one every time a GDI drawing operation is needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243774</commentid>
    <comment_count>1</comment_count>
      <attachid>292626</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-24 10:45:13 -0700</bug_when>
    <thetext>Created attachment 292626
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243811</commentid>
    <comment_count>2</comment_count>
      <attachid>292635</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-24 11:35:41 -0700</bug_when>
    <thetext>Created attachment 292635
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243813</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-24 11:39:36 -0700</bug_when>
    <thetext>Attachment 292635 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:337:  Use the class HWndDC instead of calling GetDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243874</commentid>
    <comment_count>4</comment_count>
      <attachid>292650</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-24 14:09:19 -0700</bug_when>
    <thetext>Created attachment 292650
Patch v2

Revised patch to remove unrelated changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243875</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-24 14:12:14 -0700</bug_when>
    <thetext>Attachment 292650 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:337:  Use the class HWndDC instead of calling GetDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243954</commentid>
    <comment_count>6</comment_count>
      <attachid>292650</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-10-24 16:42:12 -0700</bug_when>
    <thetext>Comment on attachment 292650
Patch v2

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

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:288
&gt; +    HRESULT hr = m_renderTarget-&gt;QueryInterface(__uuidof(ID2D1GdiInteropRenderTarget), (void**)&amp;m_gdiRenderTarget);

Would be nice to have the (void**)&amp;m_gdiRenderTarget wrapped in some kind of Adopt syntax.

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:446
&gt; +    --m_beginDrawCount;

You should assert that m_beginDrawCount doesn&apos;t underflow.

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:943
&gt; -    auto context = platformContext();
&gt; +    bool temporaryDraw = temporaryBeginDrawIfNeeded();

Seems like you could have an RIAA class for this.

&gt; Source/WebCore/rendering/FilterEffectRenderer.cpp:445
&gt; +    filter-&gt;inputContext()-&gt;endDraw();

Is this the same context as sourceGraphicsContext? It&apos;s not clear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243959</commentid>
    <comment_count>7</comment_count>
      <attachid>292650</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-24 16:51:16 -0700</bug_when>
    <thetext>Comment on attachment 292650
Patch v2

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

&gt;&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:446
&gt;&gt; +    --m_beginDrawCount;
&gt; 
&gt; You should assert that m_beginDrawCount doesn&apos;t underflow.

I could make it a CheckedArithmetic object.

&gt;&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:943
&gt;&gt; +    bool temporaryDraw = temporaryBeginDrawIfNeeded();
&gt; 
&gt; Seems like you could have an RIAA class for this.

Good idea.

&gt;&gt; Source/WebCore/rendering/FilterEffectRenderer.cpp:445
&gt;&gt; +    filter-&gt;inputContext()-&gt;endDraw();
&gt; 
&gt; Is this the same context as sourceGraphicsContext? It&apos;s not clear.

Yes. I could make a &quot;sourceGraphicsContext&quot; temporary to make this clearer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244016</commentid>
    <comment_count>8</comment_count>
      <attachid>292650</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-10-24 18:22:10 -0700</bug_when>
    <thetext>Comment on attachment 292650
Patch v2

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

&gt; Source/WebCore/platform/graphics/Path.h:206
&gt; +#if !USE(DIRECT2D)

Could we switch these around and put #if USE(DIRECT2D) instead of its inverse?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244049</commentid>
    <comment_count>9</comment_count>
      <attachid>292650</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-10-24 19:35:51 -0700</bug_when>
    <thetext>Comment on attachment 292650
Patch v2

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

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:448
&gt; +    if (!m_beginDrawCount)
&gt; +        m_didBeginDraw = false;

What is the point of having m_didBeginDraw and m_beginDrawCount? This function can replace m_didBeginDraw:

inline bool GraphicsContextPlatformPrivate::didBeginDraw() { return m_beginDrawCount; }

&gt;&gt;&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:943
&gt;&gt;&gt; +    bool temporaryDraw = temporaryBeginDrawIfNeeded();
&gt;&gt; 
&gt;&gt; Seems like you could have an RIAA class for this.
&gt; 
&gt; Good idea.

What is the purpose of temporaryBeginDraw()? Why do we need to beginDraw() here instead of doing it in the caller side? drawWithShadow() does not beginDraw(), so why drawWithoutShadow() is different from drawWithShadow() in this regard?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244250</commentid>
    <comment_count>10</comment_count>
      <attachid>292650</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-25 10:05:16 -0700</bug_when>
    <thetext>Comment on attachment 292650
Patch v2

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

&gt;&gt; Source/WebCore/platform/graphics/Path.h:206
&gt;&gt; +#if !USE(DIRECT2D)
&gt; 
&gt; Could we switch these around and put #if USE(DIRECT2D) instead of its inverse?

Sure!

&gt;&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:448
&gt;&gt; +        m_didBeginDraw = false;
&gt; 
&gt; What is the point of having m_didBeginDraw and m_beginDrawCount? This function can replace m_didBeginDraw:
&gt; 
&gt; inline bool GraphicsContextPlatformPrivate::didBeginDraw() { return m_beginDrawCount; }

Good point! I&apos;ll switch.

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:943
&gt;&gt;&gt;&gt; +    bool temporaryDraw = temporaryBeginDrawIfNeeded();
&gt;&gt;&gt; 
&gt;&gt;&gt; Seems like you could have an RIAA class for this.
&gt;&gt; 
&gt;&gt; Good idea.
&gt; 
&gt; What is the purpose of temporaryBeginDraw()? Why do we need to beginDraw() here instead of doing it in the caller side? drawWithShadow() does not beginDraw(), so why drawWithoutShadow() is different from drawWithShadow() in this regard?

In many cases, we can call &apos;beginDraw&apos; on the caller side. However, I have found that the code path for Canvas drawing often consists of a set of disparate draw events (e.g., clip a region, clear a rect, draw an arc, fill a path) that need to be done within a begin/end draw pair. It would be invasive and ugly looking to add a bunch of explicit begin/end draw pairs around all of these use cases.

Instead, the &apos;temporaryBeginDraw&apos; checks if we are already in a drawing operation, and calls &apos;beginDraw&apos; if we are not. In the case where we are not already drawing, we want to end the drawing operation here so that we are in the same state when we return from the current method.

I think switching to Simon&apos;s RIAA class will help clean some of this stuff up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244387</commentid>
    <comment_count>11</comment_count>
      <attachid>292806</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-25 13:25:44 -0700</bug_when>
    <thetext>Created attachment 292806
Patch v3

Revised to incorporate Simon, Alex, and Said&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244395</commentid>
    <comment_count>12</comment_count>
      <attachid>292809</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-25 13:33:15 -0700</bug_when>
    <thetext>Created attachment 292809
Patch v4

Revised to address all comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244398</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-25 13:35:10 -0700</bug_when>
    <thetext>Attachment 292809 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:343:  Use the class HWndDC instead of calling GetDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Total errors found: 1 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244480</commentid>
    <comment_count>14</comment_count>
      <attachid>292809</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-10-25 15:19:21 -0700</bug_when>
    <thetext>Comment on attachment 292809
Patch v4

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

&gt; Source/WebCore/platform/graphics/filters/SourceGraphic.cpp:62
&gt; +#if USE(DIRECT2D)
&gt; +    resultImage-&gt;context().temporaryBeginDrawIfNeeded();
&gt; +#endif

How does someone writing cross-platform code know that they have to do this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244552</commentid>
    <comment_count>15</comment_count>
      <attachid>292809</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-10-25 17:03:16 -0700</bug_when>
    <thetext>Comment on attachment 292809
Patch v4

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

&gt; Source/WebCore/platform/graphics/Path.h:211
&gt;  #if USE(DIRECT2D)
&gt; +        COMPtr&lt;ID2D1GeometryGroup&gt; m_path;
&gt;          COMPtr&lt;ID2D1PathGeometry&gt; m_activePathGeometry;
&gt;          COMPtr&lt;ID2D1GeometrySink&gt; m_activePath;
&gt; +#else
&gt; +        PlatformPathPtr m_path { nullptr };

Why don&apos;t we define PlatformPathPtr for DIRECT2D to be:

typedef COMPtr&lt;PlatformPath&gt; PlatformPathPtr;

&gt; Source/WebCore/platform/graphics/filters/SourceGraphic.cpp:68
&gt; +#if USE(DIRECT2D)
&gt; +    resultImage-&gt;context().temporaryBeginDrawIfNeeded();
&gt; +#endif
&gt; +
&gt;      resultImage-&gt;context().drawImageBuffer(*sourceImage, IntPoint());
&gt; +
&gt; +#if USE(DIRECT2D)
&gt; +    resultImage-&gt;context().endDraw();
&gt; +#endif

This code can be replaced by creating an object of type RenderTargetHelper.

#if USE(DIRECT2D)
   RenderTargetHelper helper(resultImage-&gt;context());
#endif

&gt; Source/WebCore/platform/graphics/win/GradientDirect2D.cpp:123
&gt; -    if (!context-&gt;didBeginDraw())
&gt; -        d2dContext-&gt;BeginDraw();
&gt; +    bool temporaryDraw = context-&gt;temporaryBeginDrawIfNeeded();

Ditto.

&gt; Source/WebCore/platform/graphics/win/GradientDirect2D.cpp:131
&gt; +    if (temporaryDraw)
&gt; +        context-&gt;endDraw();

Ditto.

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:118
&gt; +    HBITMAP bitmap = static_cast&lt;HBITMAP&gt;(GetCurrentObject(hdc, OBJ_BITMAP));

What exactly are we getting from GetCurrentObject()? Is there a bitmap already selected in the cdc? Do we need check whether the returned bitmap is NULL?

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:120
&gt; +    DIBPixelData pixelData(bitmap);

Do we need to check whether the pixelData.size().empty()?

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:134
&gt; +

I do not think this new code needs to be part of this function. All it does is creating a render target form an HDC. The rest of the code code is very similar to GraphicsContext::platformInit(ID2D1RenderTarget* renderTarget).

void GraphicsContext::platformInit(HDC hdc, bool hasAlpha)
{
    ID2D1RenderTarget* renderTarget = renderTragetFromHdc(hdc, hasAlpaha);
    platformInit(renderTarget);
}

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:289
&gt; +    HRESULT hr = m_renderTarget-&gt;QueryInterface(__uuidof(ID2D1GdiInteropRenderTarget), reinterpret_cast&lt;void**&gt;(&amp;m_gdiRenderTarget));

Maybe it is a naive question. Is working with the GDI Interop mode temporary? Is there a plan to switch all the drawing function to use the native render target APIs?

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:336
&gt; +HDC GraphicsContextPlatformPrivate::hdcForRenderTarget()

Can&apos;t we have a member called m_hdc? Can&apos;t we call m_hdc = GetDC() in the constructor of the GraphicsContextPlatformPrivate? Is there any chance the hdc of the render target to change after constructing this object?

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:350
&gt; +void GraphicsContextPlatformPrivate::releaseHdcForRenderTarget()

Ditto. Instead of having to call hdcForRenderTarget() and releaseHdcForRenderTarget(), the caller can use a member called hdc() of this class.

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:435
&gt; +    if (didBeginDraw())
&gt; +        return;

I think this should be an ASSERT(!didBeginDraw()).

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:439
&gt; +    ++m_beginDrawCount;

What is the point of having a m_beginDrawCount be counter even though its value will be either 0 or 1? If we allow nested begin-end drawing then it makes sense to have it a counter. But this function disallows nesting the begin-end drawing.

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:444
&gt;      ASSERT(m_renderTarget.get());

Do we need to ASSERT(didBeginDraw());

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:554
&gt; +    if (m_data-&gt;didBeginDraw())
&gt; +        return false;
&gt; +
&gt; +    m_data-&gt;beginDraw();
&gt; +    return true;

I think all the code should be using RenderTargetHelper. And I think the logic, of having to call beginDraw() or not, should be moved to the constructor of RenderTargetHelper.

&gt; Source/WebCore/platform/graphics/win/NativeImageDirect2D.cpp:-89
&gt; -    if (!context.didBeginDraw())
&gt; -        platformContext-&gt;BeginDraw();

This can be replaced by creating an object of class RenderTargetHelper.

&gt; Source/WebCore/platform/graphics/win/NativeImageDirect2D.cpp:95
&gt; +    if (temporaryDraw)
&gt; +        context.endDraw();

Ditto

&gt; Source/WebCore/platform/graphics/win/PathDirect2D.cpp:232
&gt; +    applier-&gt;strokeStyle(&amp;scratchContext);

Since scratchRenderTarget() is a static variable and since we draw on it to get the geometry of s shape, do not we need to clear it before drawing on it?

&gt; Source/WebCore/platform/graphics/win/RenderTargetHelper.h:32
&gt; +class RenderTargetHelper {

I think the name is a little bit vague. I would recommend something like RenderTargetScopedDrawing.

&gt; Source/WebCore/platform/graphics/win/RenderTargetHelper.h:36
&gt; +        : m_context(context)

A flag named &apos;beginAndEnd&apos; should be added to control whether beginDraw() should be called in the constructor or should be delayed; something similar to what we do in GraphicsContextStateSaver.

&gt; Source/WebCore/platform/graphics/win/RenderTargetHelper.h:38
&gt; +        m_drawIsScoped = context.temporaryBeginDrawIfNeeded();

Do we need to check if (!context.didBeginDraw()) before calling beginDraw()?

&gt; Source/WebCore/platform/graphics/win/RenderTargetHelper.h:46
&gt; +    void endDraw()

We should expose beginDraw() also if we add the &apos;beginAndEnd&apos; flag.

&gt; Source/WebCore/platform/graphics/win/RenderTargetHelper.h:49
&gt; +            m_context.endDraw();

We should set m_drawIsScoped to false.

&gt; Source/WebCore/rendering/FilterEffectRenderer.cpp:420
&gt; +#if USE(DIRECT2D)
&gt; +    sourceGraphicsContext-&gt;temporaryBeginDrawIfNeeded();
&gt; +#endif

temporaryBeginDrawIfNeeded() is called here and endDraw() is called in applyFilterEffect().

I would suggest using RenderTargetHelper in the caller of both beginFilterEffect() and applyFilterEffect().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244566</commentid>
    <comment_count>16</comment_count>
      <attachid>292809</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-10-25 17:24:01 -0700</bug_when>
    <thetext>Comment on attachment 292809
Patch v4

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

&gt;&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:134
&gt;&gt; +
&gt; 
&gt; I do not think this new code needs to be part of this function. All it does is creating a render target form an HDC. The rest of the code code is very similar to GraphicsContext::platformInit(ID2D1RenderTarget* renderTarget).
&gt; 
&gt; void GraphicsContext::platformInit(HDC hdc, bool hasAlpha)
&gt; {
&gt;     ID2D1RenderTarget* renderTarget = renderTragetFromHdc(hdc, hasAlpaha);
&gt;     platformInit(renderTarget);
&gt; }

I meant: I do not think this new code DOES NOT need to be...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244638</commentid>
    <comment_count>17</comment_count>
      <attachid>292809</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-25 23:09:33 -0700</bug_when>
    <thetext>Comment on attachment 292809
Patch v4

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

&gt;&gt; Source/WebCore/platform/graphics/Path.h:211
&gt;&gt; +        PlatformPathPtr m_path { nullptr };
&gt; 
&gt; Why don&apos;t we define PlatformPathPtr for DIRECT2D to be:
&gt; 
&gt; typedef COMPtr&lt;PlatformPath&gt; PlatformPathPtr;

The problem is PlatformPathPtr is also a return type, which is expected to be a bare pointer by many callers.

&gt;&gt; Source/WebCore/platform/graphics/filters/SourceGraphic.cpp:68
&gt;&gt; +#endif
&gt; 
&gt; This code can be replaced by creating an object of type RenderTargetHelper.
&gt; 
&gt; #if USE(DIRECT2D)
&gt;    RenderTargetHelper helper(resultImage-&gt;context());
&gt; #endif

Will do -- but I&apos;m reviewing whether I should make this call here and other places. Maybe I can avoid it somehow.

&gt;&gt; Source/WebCore/platform/graphics/win/GradientDirect2D.cpp:123
&gt;&gt; +    bool temporaryDraw = context-&gt;temporaryBeginDrawIfNeeded();
&gt; 
&gt; Ditto.

I spun this off into a separate patch (Bug 164005). Maybe you could review that one, too? :-)

&gt;&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:118
&gt;&gt; +    HBITMAP bitmap = static_cast&lt;HBITMAP&gt;(GetCurrentObject(hdc, OBJ_BITMAP));
&gt; 
&gt; What exactly are we getting from GetCurrentObject()? Is there a bitmap already selected in the cdc? Do we need check whether the returned bitmap is NULL?

Maybe this is wrong. I followed the logic in the path from HDC -&gt; CoreGraphics context. But D2D might be able to just run right from the HDC directly. I&apos;ll revise this.

&gt;&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:120
&gt;&gt; +    DIBPixelData pixelData(bitmap);
&gt; 
&gt; Do we need to check whether the pixelData.size().empty()?

We don&apos;t elsewhere, but it does seem like a reasonable precaution.

&gt;&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:289
&gt;&gt; +    HRESULT hr = m_renderTarget-&gt;QueryInterface(__uuidof(ID2D1GdiInteropRenderTarget), reinterpret_cast&lt;void**&gt;(&amp;m_gdiRenderTarget));
&gt; 
&gt; Maybe it is a naive question. Is working with the GDI Interop mode temporary? Is there a plan to switch all the drawing function to use the native render target APIs?

I am hoping it is temporary, but there don&apos;t seem to be native D2D routines for drawing scrollbars, drop-downs, etc. So we might be stuck with this for the foreseeable future.

I have a separate patch that creates and caches the GDI Interop Render Target for the lifetime of the renderer, which should make things more efficient.

&gt;&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:336
&gt;&gt; +HDC GraphicsContextPlatformPrivate::hdcForRenderTarget()
&gt; 
&gt; Can&apos;t we have a member called m_hdc? Can&apos;t we call m_hdc = GetDC() in the constructor of the GraphicsContextPlatformPrivate? Is there any chance the hdc of the render target to change after constructing this object?

I tried that first, and learned that the HDC exposed by Direct2D only lives between the Begin/End draw operations. So unfortunately I can&apos;t cache it.

Going the other direction (starting from a GDI HDC and creating a render target from that) does work, but only because Direct2D seems to be copying the contents of the HDC into separate memory (and back and forth).

All of this is inefficient, so we want to get rid of as much HDC code as possible, as soon as we determine all of this is working.

&gt;&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:439
&gt;&gt; +    ++m_beginDrawCount;
&gt; 
&gt; What is the point of having a m_beginDrawCount be counter even though its value will be either 0 or 1? If we allow nested begin-end drawing then it makes sense to have it a counter. But this function disallows nesting the begin-end drawing.

Begin-end calls are allowed to be nested, so I wanted to leave that option available for later if I need it.

If we don&apos;t, I can alway switch back to the boolean version.

&gt;&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:554
&gt;&gt; +    return true;
&gt; 
&gt; I think all the code should be using RenderTargetHelper. And I think the logic, of having to call beginDraw() or not, should be moved to the constructor of RenderTargetHelper.

Agreed!

&gt;&gt; Source/WebCore/platform/graphics/win/NativeImageDirect2D.cpp:-89
&gt;&gt; -        platformContext-&gt;BeginDraw();
&gt; 
&gt; This can be replaced by creating an object of class RenderTargetHelper.

Will do.

&gt;&gt; Source/WebCore/platform/graphics/win/PathDirect2D.cpp:232
&gt;&gt; +    applier-&gt;strokeStyle(&amp;scratchContext);
&gt; 
&gt; Since scratchRenderTarget() is a static variable and since we draw on it to get the geometry of s shape, do not we need to clear it before drawing on it?

Oh! Good point. I didn&apos;t notice if we did this in CoreGraphics. I&apos;ll double check and fix that if necessary.

&gt;&gt; Source/WebCore/platform/graphics/win/RenderTargetHelper.h:32
&gt;&gt; +class RenderTargetHelper {
&gt; 
&gt; I think the name is a little bit vague. I would recommend something like RenderTargetScopedDrawing.

Ok. I&apos;ll use that.

&gt;&gt; Source/WebCore/platform/graphics/win/RenderTargetHelper.h:36
&gt;&gt; +        : m_context(context)
&gt; 
&gt; A flag named &apos;beginAndEnd&apos; should be added to control whether beginDraw() should be called in the constructor or should be delayed; something similar to what we do in GraphicsContextStateSaver.

I don&apos;t want to make this change unless I find a case where we want to delay the &apos;beginDraw&apos; operation.

I can&apos;t see any obvious times this would be needed, since it really just marks the render target as &quot;in use&quot;; the real interesting work happens when &apos;endDraw&apos; actually gets called.

&gt;&gt; Source/WebCore/platform/graphics/win/RenderTargetHelper.h:38
&gt;&gt; +        m_drawIsScoped = context.temporaryBeginDrawIfNeeded();
&gt; 
&gt; Do we need to check if (!context.didBeginDraw()) before calling beginDraw()?

No -- it check its internal state before calling beginDraw.

&gt;&gt; Source/WebCore/platform/graphics/win/RenderTargetHelper.h:49
&gt;&gt; +            m_context.endDraw();
&gt; 
&gt; We should set m_drawIsScoped to false.

Whoops!

&gt;&gt; Source/WebCore/rendering/FilterEffectRenderer.cpp:420
&gt;&gt; +#endif
&gt; 
&gt; temporaryBeginDrawIfNeeded() is called here and endDraw() is called in applyFilterEffect().
&gt; 
&gt; I would suggest using RenderTargetHelper in the caller of both beginFilterEffect() and applyFilterEffect().

I agree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245650</commentid>
    <comment_count>18</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-28 10:29:03 -0700</bug_when>
    <thetext>There is some additional work needed to get filters fully working, so I&apos;m retitling this bug to reflect its changed scope (i.e., focusing on the begin/end drawing pair issue).

Much of the code in the original patch has been broken out into smaller patches (see Bug 163988, 163994, and 164005), so what remains is fairly small.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245654</commentid>
    <comment_count>19</comment_count>
      <attachid>293173</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-28 10:42:13 -0700</bug_when>
    <thetext>Created attachment 293173
Rebaselined Patch

Revised patch based on the smaller work involved, and it&apos;s changed scope to simply dealing with Begin/End drawing pair bookkeeping.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245656</commentid>
    <comment_count>20</comment_count>
      <attachid>293173</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-28 10:48:41 -0700</bug_when>
    <thetext>Comment on attachment 293173
Rebaselined Patch

I have a better idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245659</commentid>
    <comment_count>21</comment_count>
      <attachid>293175</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-28 10:52:28 -0700</bug_when>
    <thetext>Created attachment 293175
Patch v5

Rather than maintaining two Booleans, use a single flag to represent both.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245660</commentid>
    <comment_count>22</comment_count>
      <attachid>293176</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-28 10:54:20 -0700</bug_when>
    <thetext>Created attachment 293176
Patch v6

Correct a typo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245673</commentid>
    <comment_count>23</comment_count>
      <attachid>293176</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-28 11:18:40 -0700</bug_when>
    <thetext>Comment on attachment 293176
Patch v6

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

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:408
&gt;      ASSERT(m_renderTarget.get());

ASSERT(reason != DrawReason::NotDrawing);

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:409
&gt;      if (didBeginDraw())

It is really always OK to silently return here? In all four cases?

If m_beginDrawState is Clipping and reason is Normal?
If m_beginDrawState is Normal and reason is Clipping?
If m_beginDrawState is Clipping and reason is Clipping?
If m_beginDrawState is Normal and reason is Normal?

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:426
&gt; +    m_beginDrawState = DrawReason::NotDrawing;

Should this have asserted didBeginDraw() earlier in the function?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245698</commentid>
    <comment_count>24</comment_count>
      <attachid>293176</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-10-28 12:17:44 -0700</bug_when>
    <thetext>Comment on attachment 293176
Patch v6

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        Direct2D does not permit nested Begin/End pairs, so we never want to issue a
&gt; +        second BeginDraw on a context that has already entered this state. Therefore,
&gt; +        I changed this to a flag, rather than a count.

Although Direct2D does not allow nested Begin/End drawing, you can allow it and have a counter to track that safely.

void GraphicsContextPlatformPrivate::beginDraw()
{
    if (!m_beginDrawCount++)
       m_renderTarget.BeginDraw();
}

void GraphicsContextPlatformPrivate::endDraw()
{
    ASSERT(m_beginDrawCount &gt; 0);
    if (!--m_beginDrawCount)
       m_renderTarget.EndDraw();
}
 
The benefit of that, is you can call the begin/end pair whenever you want without having to check whether if beginDraw() is called previously or not. The only thing you have to do it, is to match the begin/end pairs. And you are sure that the the caller at the highest level will be the one which actually does begin/end the drawing.

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:312
&gt; +    if (m_beginDrawState == DrawReason::Clipping)
&gt; +        endDraw();

This statement does not seem to be right. Why do we flush the drawing at the destructor of this object? This means we beginDraw() needlessly. Actually we should assert here that we are not in the middle of begin/draw pairs.

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:351
&gt; -    beginDrawIfNeeded();
&gt; +    beginDrawIfNeeded(DrawReason::Clipping);

Who is going to endDraw() if beginDrawIfNeeded() calls beginDraw() for the first time? What is the guarantee that this is going to happen? This function is at a very low level such that it should not beginDraw() itself.

I would suggest the following if you need to apply the clipping outside the drawing.

1. In GraphicsContextPlatformPrivate::clip() if we are in the middle of the drawing,the clipping is pushed to the render target. Otherwise it is pushed to m_pendingClippingLayers vector.
2. In beginDraw(), you push all the m_pendingClippingLayers to the render target and clear m_pendingClippingLayers.

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:369
&gt; -    beginDrawIfNeeded();
&gt; +    beginDrawIfNeeded(DrawReason::Clipping);

Ditto.

&gt; Source/WebCore/platform/graphics/win/GraphicsContextPlatformPrivateDirect2D.h:51
&gt; +    enum DrawReason { NotDrawing, Normal, Clipping };

Is this enum a reason or a state?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245808</commentid>
    <comment_count>25</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-28 14:48:11 -0700</bug_when>
    <thetext>Simon pointed out that GraphicsContext objects are generally only created at the time we intend to do drawing, so calling &apos;BeginDraw&apos; as part of object construction, and &apos;EndDraw&apos; at time of destruction should be sufficient.

As usual, he was correct.
        
This patch gets rid of unneeded code and greatly simplifies the Direct2D drawing path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245809</commentid>
    <comment_count>26</comment_count>
      <attachid>293223</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-28 14:49:14 -0700</bug_when>
    <thetext>Created attachment 293223
Patch v7</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245810</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-28 14:50:39 -0700</bug_when>
    <thetext>Attachment 293223 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:72:  Use the class HWndDC instead of calling GetDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245947</commentid>
    <comment_count>28</comment_count>
      <attachid>293223</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-28 20:58:58 -0700</bug_when>
    <thetext>Comment on attachment 293223
Patch v7

Rejecting attachment 293223 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 293223, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
file Source/WebCore/platform/graphics/win/ImageBufferDirect2D.cpp
patching file Source/WebCore/platform/graphics/win/NativeImageDirect2D.cpp
patching file Source/WebCore/platform/graphics/win/RenderTargetScopedDrawing.h
rm &apos;Source/WebCore/platform/graphics/win/RenderTargetScopedDrawing.h&apos;
patching file Source/WebCore/svg/graphics/SVGImage.cpp

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;, &apos;--reviewer&apos;, u&apos;Darin Adler&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Full output: http://webkit-queues.webkit.org/results/2397186</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246270</commentid>
    <comment_count>29</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-30 13:51:52 -0700</bug_when>
    <thetext>Committed in r208131 &lt;https://trac.webkit.org/changeset/208131&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292626</attachid>
            <date>2016-10-24 10:45:13 -0700</date>
            <delta_ts>2016-10-24 11:35:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>filter.patch</filename>
            <type>text/plain</type>
            <size>21929</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzc2
MykKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBACisyMDE2LTEw
LTI0ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5d
W0RpcmVjdDJEXSBJbXByb3ZlIHN1cHBvcnQgZm9yIGZpbHRlcnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mzg5OAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyB1bnRpbCBEMkQgYmFj
a2VuZCBpcyB3b3JraW5nLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oOgorICAgICAgICAo
V2ViQ29yZTo6UGF0aDo6cGxhdGZvcm1QYXRoKTogVXNlIGEgc21hcnQgcG9pbnRlciBmb3IgRDJE
IHBhdGggdHlwZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGly
ZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmZpbGwpOiBVc2UgbmV3ICd0
ZW1wb3JhcnlCZWdpbkRyYXdJZk5lZWRlZCcgc28gd2UgaGF2ZQorICAgICAgICBjb25zaXN0ZW50
IEJlZ2luL0VuZCBEcmF3IHBhaXJzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnN5c3RlbUZhY3RvcnkpOiBBY3RpdmF0ZSB1c2VmdWwgRDJEIGxvZ2dpbmcgd2hlbiBi
dWlsZGluZworICAgICAgICBpbiBEZWJ1ZyBtb2RlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUluaXQpOiBXaGVuIGNvbnN0cnVjdGluZyBmcm9tIGEgR0RJIEhE
QywgY3JlYXRlCisgICAgICAgIGEgR0RJLWNvbXBhdGlibGUgRDJEIHJlbmRlciB0YXJnZXQgc28g
YWxsIGRyYXdpbmcgb3BlcmF0aW9ucyBnbyB0byB0aGUgc2FtZSBwbGFjZS4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKTogV2hlbgorICAgICAgICBpbml0aWFsaXppbmcgZnJvbSBhIEQyRCBkZXZp
Y2UsIGNyZWF0ZSBhIHNpbmdsZSBHREkgSW50ZXJvcCBvYmplY3QgdG8gdXNlIGZvciB0aGUKKyAg
ICAgICAgbGlmZXRpbWUgb2YgdGhlIEdyYXBoaWNzQ29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZSk6IEFkZCBhbgorICAgICAgICBhc3NlcnRpb24gdGhhdCB3ZSBhcmUgaW4gYSB2YWxp
ZCBzdGF0ZSB3aGVuIGNsZWFuaW5nIHVwIHRoZSBncmFwaGljcyBjb250ZXh0LgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpoZGNGb3JSZW5kZXJUYXJn
ZXQpOiBDb252ZW5pZW5jZSBtZXRob2QKKyAgICAgICAgZm9yIGdldHRpbmcgYSBHREkgZGV2aWNl
IGNvbnRleHQgZm9yIHRoZSBEMkQgZGV2aWNlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOjpyZWxlYXNlSGRjRm9yUmVuZGVyVGFyZ2V0KTogUmVsZWFz
ZSBtZXRob2QKKyAgICAgICAgZm9yIHRoZSBIREMgaGFuZGxlLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpoZGNGb3JSZW5kZXJUYXJnZXQpOiBFeHBvc2UgaW50ZXJuYWwgbWV0
aG9kIHRvIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBjbGllbnRzLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlSGRjRm9yUmVuZGVyVGFyZ2V0KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNsaXApOiBD
bGlwcGluZyBjYW4gb25seSBoYXBwZW4gaW4gYSBEcmF3IG9wZXJhdGlvbi4KKyAgICAgICAgT3Bl
biBhIG5ldyBCZWdpbkRyYXcgaWYgYXNrZWQgdG8gQ2xpcC4gVGhlIEJlZ2luIG11c3Qgc3RheSBh
Y3RpdmUgd2hlbiB0aGlzIG1ldGhvZCByZXR1cm5zLAorICAgICAgICBhcyB0aGUgQ2xpcCBsYXll
ciBpcyBvbmx5IHZhbGlkIGR1cmluZyBhIERyYXcgb3BlcmF0aW9uLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpiZWdpbkRyYXcpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kRHJhdyk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0ZW1wb3JhcnlCZWdp
bkRyYXdJZk5lZWRlZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjplbmREcmF3KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdXaXRob3V0U2hhZG93KTogUmV2aXNlIHRvIHVzZSBuZXcgbWV0aG9kLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlRGlyZWN0MkQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKTogVXNlIG5l
dyBtZXRob2RzLCBhbmQgY2FjaGVkIEdESSBJbnRlcm9wIG9iamVjdC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpkcmF3TmF0aXZlSW1hZ2UpOiBVc2UgbmV3ICd0ZW1wb3JhcnlCZWdpbkRyYXdJZk5lZWRl
ZCcgbWV0aG9kLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6flBhdGgpOiBSZXZpc2UgZm9yIHNtYXJ0IHBv
aW50ZXIgdXNlLgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6ZW5zdXJlUGxhdGZvcm1QYXRoKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphcHBlbmRHZW9tZXRyeSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UGF0aDo6b3BlcmF0b3I9KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpQYXRoOjppbml0aWFsaXplUGF0aFN0YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpQYXRoOjp0cmFuc2Zvcm0pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZEVs
bGlwc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmNsZWFyKTogRGl0dG8uCisg
ICAgICAgICogcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOjpiZWdpbkZpbHRlckVmZmVjdCk6IENh
bGwgIkJlZ2luRHJhdyIgb24gdGhlCisgICAgICAgIEdyYXBoaWNzQ29udGV4dCBpZiB1c2luZyBE
MkQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcjo6YXBwbHlG
aWx0ZXJFZmZlY3QpOiBDYWxsICJlbmREcmF3IiBvbiB0aGUgc291cmNlCisgICAgICAgIGltYWdl
IEdyYXBoaWNzQ29udGV4dCBpZiB1c2luZyBEMkQgc28gdGhhdCBpdCBpcyBpbiBhICJmaW5pc2hl
ZCIgc3RhdGUgYmVmb3JlIGRyYXdpbmcKKyAgICAgICAgaXRzIGNvbnRlbnRzIHRvIHRoZSBkZXN0
aW5hdGlvbiBncmFwaGljcyBjb250ZXh0LgorCiAyMDE2LTEwLTI0ICBEYXJpbiBBZGxlciAgPGRh
cmluQGFwcGxlLmNvbT4KIAogICAgICAgICBUcnkgdG8gZml4IFdpbmRvd3MgYnVpbGQuCkluZGV4
OiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gMjA3NjgxKQorKysgcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1Miw5
ICs1NTIsMTMgQEAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSUQyRDFGYWN0b3J5KiBzeXN0
ZW1GYWN0b3J5KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIElEMkQxUmVuZGVyVGFyZ2V0
KiBkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7CiAKKyAgICBib29sIHRlbXBvcmFyeUJlZ2luRHJhd0lm
TmVlZGVkKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXREaWRCZWdpbkRyYXcoYm9vbCk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBkaWRCZWdpbkRyYXcoKSBjb25zdDsKICAgICBEMkQx
X0NPTE9SX0YgY29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3QgQ29sb3ImKSBjb25zdDsKKyAgICBI
REMgaGRjRm9yUmVuZGVyVGFyZ2V0KCk7CisgICAgdm9pZCByZWxlYXNlSGRjRm9yUmVuZGVyVGFy
Z2V0KCk7CisgICAgdm9pZCBlbmREcmF3KCk7CiAKICAgICBJRDJEMUJydXNoKiBzb2xpZFN0cm9r
ZUJydXNoKCkgY29uc3Q7CiAgICAgSUQyRDFCcnVzaCogc29saWRGaWxsQnJ1c2goKSBjb25zdDsK
SW5kZXg6IHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9n
cmFwaGljcy9QYXRoLmgJKHJldmlzaW9uIDIwNzY4MCkKKysrIHBsYXRmb3JtL2dyYXBoaWNzL1Bh
dGguaAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDcgKzE2NSwxMSBAQAogCiAgICAgICAgIC8vIFRv
IGtlZXAgUGF0aCgpIGNoZWFwLCBpdCBkb2VzIG5vdCBhbGxvY2F0ZSBhIFBsYXRmb3JtUGF0aCBp
bW1lZGlhdGVseQogICAgICAgICAvLyBtZWFuaW5nIFBhdGg6OnBsYXRmb3JtUGF0aCgpIGNhbiBy
ZXR1cm4gbnVsbC4KKyNpZiBVU0UoRElSRUNUMkQpCisgICAgICAgIFBsYXRmb3JtUGF0aFB0ciBw
bGF0Zm9ybVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGguZ2V0KCk7IH0KKyNlbHNlCiAgICAg
ICAgIFBsYXRmb3JtUGF0aFB0ciBwbGF0Zm9ybVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7
IH0KKyNlbmRpZgogICAgICAgICAvLyBlbnN1cmVQbGF0Zm9ybVBhdGgoKSB3aWxsIGFsbG9jYXRl
IGEgUGxhdGZvcm1QYXRoIGlmIGl0IGhhcyBub3QgeWV0IGJlZW4gYW5kIHdpbGwgbmV2ZXIgcmV0
dXJuIG51bGwuCiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIFBsYXRmb3JtUGF0aFB0ciBlbnN1cmVQ
bGF0Zm9ybVBhdGgoKTsKIApAQCAtMTk5LDggKzIwMywxMCBAQAogI2VuZGlmCiAKICAgICBwcml2
YXRlOgorI2lmICFVU0UoRElSRUNUMkQpCiAgICAgICAgIFBsYXRmb3JtUGF0aFB0ciBtX3BhdGgg
eyBudWxscHRyIH07Ci0jaWYgVVNFKERJUkVDVDJEKQorI2Vsc2UKKyAgICAgICAgQ09NUHRyPElE
MkQxR2VvbWV0cnlHcm91cD4gbV9wYXRoOwogICAgICAgICBDT01QdHI8SUQyRDFQYXRoR2VvbWV0
cnk+IG1fYWN0aXZlUGF0aEdlb21ldHJ5OwogICAgICAgICBDT01QdHI8SUQyRDFHZW9tZXRyeVNp
bms+IG1fYWN0aXZlUGF0aDsKICNlbmRpZgpJbmRleDogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YWRpZW50RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFkaWVudERpcmVjdDJELmNwcAkocmV2aXNpb24gMjA3NjgxKQorKysgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsOCArMTIw
LDcgQEAKICAgICBpZiAoIW1fY2FjaGVkSGFzaCB8fCAhbV9ncmFkaWVudCkKICAgICAgICAgZ2Vu
ZXJhdGVHcmFkaWVudChkMmRDb250ZXh0KTsKIAotICAgIGlmICghY29udGV4dC0+ZGlkQmVnaW5E
cmF3KCkpCi0gICAgICAgIGQyZENvbnRleHQtPkJlZ2luRHJhdygpOworICAgIGJvb2wgdGVtcG9y
YXJ5RHJhdyA9IGNvbnRleHQtPnRlbXBvcmFyeUJlZ2luRHJhd0lmTmVlZGVkKCk7CiAKICAgICBk
MmRDb250ZXh0LT5TZXRUYWdzKEdSQURJRU5UX0RSQVdJTkcsIF9fTElORV9fKTsKIApAQCAtMTI4
LDExICsxMjcsOCBAQAogICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwogICAg
IGQyZENvbnRleHQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIG1fZ3JhZGllbnQpOwogCi0gICAg
aWYgKCFjb250ZXh0LT5kaWRCZWdpbkRyYXcoKSkgewotICAgICAgICBEMkQxX1RBRyBmaXJzdCwg
c2Vjb25kOwotICAgICAgICBIUkVTVUxUIGhyID0gZDJkQ29udGV4dC0+RW5kRHJhdygmZmlyc3Qs
ICZzZWNvbmQpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICB9
CisgICAgaWYgKHRlbXBvcmFyeURyYXcpCisgICAgICAgIGNvbnRleHQtPmVuZERyYXcoKTsKIAog
ICAgIGlmIChuZWVkU2NhbGluZykKICAgICAgICAgY29udGV4dC0+cmVzdG9yZSgpOwpJbmRleDog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3Bw
CShyZXZpc2lvbiAyMDc2ODEpCisrKyBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSwxMyBAQAogewogICAg
IHN0YXRpYyBJRDJEMUZhY3RvcnkqIGRpcmVjdDJERmFjdG9yeSA9IG51bGxwdHI7CiAgICAgaWYg
KCFkaXJlY3QyREZhY3RvcnkpIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIEQyRDFfRkFDVE9S
WV9PUFRJT05TIG9wdGlvbnMgPSB7IH07CisgICAgICAgIG9wdGlvbnMuZGVidWdMZXZlbCA9IEQy
RDFfREVCVUdfTEVWRUxfSU5GT1JNQVRJT047CisgICAgICAgIEhSRVNVTFQgaHIgPSBEMkQxQ3Jl
YXRlRmFjdG9yeShEMkQxX0ZBQ1RPUllfVFlQRV9NVUxUSV9USFJFQURFRCwgb3B0aW9ucywgJmRp
cmVjdDJERmFjdG9yeSk7CisjZWxzZQogICAgICAgICBIUkVTVUxUIGhyID0gRDJEMUNyZWF0ZUZh
Y3RvcnkoRDJEMV9GQUNUT1JZX1RZUEVfTVVMVElfVEhSRUFERUQsICZkaXJlY3QyREZhY3Rvcnkp
OworI2VuZGlmCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwogICAgIH0K
IApAQCAtMTA4LDcgKzExNCwyMyBAQAogICAgIGlmICghaGRjKQogICAgICAgICByZXR1cm47CiAK
LSAgICBDT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IHJlbmRlclRhcmdldDsKKyAgICBIQklUTUFQ
IGJpdG1hcCA9IHN0YXRpY19jYXN0PEhCSVRNQVA+KEdldEN1cnJlbnRPYmplY3QoaGRjLCBPQkpf
QklUTUFQKSk7CisKKyAgICBESUJQaXhlbERhdGEgcGl4ZWxEYXRhKGJpdG1hcCk7CisKKyAgICBh
dXRvIHRhcmdldFByb3BlcnRpZXMgPSBEMkQxOjpSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7Cisg
ICAgdGFyZ2V0UHJvcGVydGllcy5waXhlbEZvcm1hdCA9IEQyRDE6OlBpeGVsRm9ybWF0KERYR0lf
Rk9STUFUX0I4RzhSOEE4X1VOT1JNLCBEMkQxX0FMUEhBX01PREVfSUdOT1JFKTsKKworICAgIENP
TVB0cjxJRDJEMURDUmVuZGVyVGFyZ2V0PiByZW5kZXJUYXJnZXQ7CisgICAgSFJFU1VMVCBociA9
IHN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRENSZW5kZXJUYXJnZXQoJnRhcmdldFByb3BlcnRpZXMs
ICZyZW5kZXJUYXJnZXQpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgUkVDVCBjbGllbnRSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBwaXhlbERhdGEu
c2l6ZSgpKTsKKyAgICBociA9IHJlbmRlclRhcmdldC0+QmluZERDKGhkYywgJmNsaWVudFJlY3Qp
OworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9kYXRh
ID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShyZW5kZXJUYXJnZXQuZ2V0KCkp
OwogICAgIG1fZGF0YS0+bV9oZGMgPSBoZGM7CiAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0
IHN0YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0YXRlLgpAQCAtMjU3LDYgKzI3OSwyNCBAQAogewog
fQogCitHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQorICAgIDogbV9yZW5k
ZXJUYXJnZXQocmVuZGVyVGFyZ2V0KQoreworICAgIGlmICghbV9yZW5kZXJUYXJnZXQpCisgICAg
ICAgIHJldHVybjsKKworICAgIEhSRVNVTFQgaHIgPSBtX3JlbmRlclRhcmdldC0+UXVlcnlJbnRl
cmZhY2UoX191dWlkb2YoSUQyRDFHZGlJbnRlcm9wUmVuZGVyVGFyZ2V0KSwgKHZvaWQqKikmbV9n
ZGlSZW5kZXJUYXJnZXQpOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworfQor
CitHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGUoKQoreworICAgIGlmICghbV9yZW5kZXJUYXJnZXQpCisgICAgICAgIHJldHVybjsK
KworICAgIEFTU0VSVCghbV9iZWdpbkRyYXdDb3VudCk7Cit9CisKIENPTVB0cjxJRDJEMVNvbGlk
Q29sb3JCcnVzaD4gR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpicnVzaFdpdGhDb2xv
cihjb25zdCBEMkQxX0NPTE9SX0YmIGNvbG9yKQogewogICAgIFJHQkEzMiBjb2xvcktleSA9IG1h
a2VSR0JBMzJGcm9tRmxvYXRzKGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEpOwpA
QCAtMjg3LDEyICszMjcsNTEgQEAKICAgICByZXR1cm4gbV9kYXRhLT5icnVzaFdpdGhDb2xvcihj
b2xvcldpdGhHbG9iYWxBbHBoYShjb2xvcikpLmdldCgpOwogfQogCitIREMgR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlOjpoZGNGb3JSZW5kZXJUYXJnZXQoKQoreworICAgIEFTU0VSVCht
X2RpZEJlZ2luRHJhdyk7CisKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dkaVJlbmRlclRhcmdldCk7
CisKKyAgICBIREMgaGRjID0gbnVsbHB0cjsKKyAgICBIUkVTVUxUIGhyID0gbV9nZGlSZW5kZXJU
YXJnZXQtPkdldERDKEQyRDFfRENfSU5JVElBTElaRV9NT0RFX0NPUFksICZoZGMpOworICAgIGlm
ICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4g
aGRjOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cmVsZWFzZUhk
Y0ZvclJlbmRlclRhcmdldCgpCit7CisgICAgQVNTRVJUKG1fZGlkQmVnaW5EcmF3KTsKKworICAg
IFJFTEVBU0VfQVNTRVJUKG1fZ2RpUmVuZGVyVGFyZ2V0KTsKKworICAgIEhSRVNVTFQgaHIgPSBt
X2dkaVJlbmRlclRhcmdldC0+UmVsZWFzZURDKG51bGxwdHIpOworfQorCitIREMgR3JhcGhpY3ND
b250ZXh0OjpoZGNGb3JSZW5kZXJUYXJnZXQoKQoreworICAgIHJldHVybiBtX2RhdGEtPmhkY0Zv
clJlbmRlclRhcmdldCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZUhkY0Zv
clJlbmRlclRhcmdldCgpCit7CisgICAgbV9kYXRhLT5yZWxlYXNlSGRjRm9yUmVuZGVyVGFyZ2V0
KCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjbGlwKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKIHsKKyAgICAvLyBJbiBEMkQsIHdlIGNhbiBvbmx5IGNsaXAgaW4g
dGhlIGNvbnRleHQgb2YgYSAnQmVnaW5EcmF3JywgYW5kIHRoZSBjbGlwIGNhbgorICAgIC8vIG9u
bHkgbGl2ZSBhcyBsb25nIGFzIHRoZSBkcmF3IGlzIGhhcHBlbmluZy4KKyAgICBpZiAoIW1fZGlk
QmVnaW5EcmF3KQorICAgICAgICBiZWdpbkRyYXcoKTsKKwogICAgIGlmIChtX3JlbmRlclN0YXRl
cy5pc0VtcHR5KCkpCiAgICAgICAgIHNhdmUoKTsKIAogICAgIG1fcmVuZGVyVGFyZ2V0LT5QdXNo
QXhpc0FsaWduZWRDbGlwKHJlY3QsIEQyRDFfQU5USUFMSUFTX01PREVfUEVSX1BSSU1JVElWRSk7
CisKICAgICBtX3JlbmRlclN0YXRlcy5sYXN0KCkubV9jbGlwcy5hcHBlbmQoR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlOjpBeGlzQWxpZ25lZENsaXApOwogfQogCkBAIC0zMDMsNiArMzgy
LDExIEBACiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjbGlwKElEMkQx
R2VvbWV0cnkqIHBhdGgpCiB7CisgICAgLy8gSW4gRDJELCB3ZSBjYW4gb25seSBjbGlwIGluIHRo
ZSBjb250ZXh0IG9mIGEgJ0JlZ2luRHJhdycsIGFuZCB0aGUgY2xpcCBjYW4KKyAgICAvLyBvbmx5
IGxpdmUgYXMgbG9uZyBhcyB0aGUgZHJhdyBpcyBoYXBwZW5pbmcuCisgICAgaWYgKCFtX2RpZEJl
Z2luRHJhdykKKyAgICAgICAgYmVnaW5EcmF3KCk7CisKICAgICBBU1NFUlQobV9yZW5kZXJTdGF0
ZXMuc2l6ZSgpKTsKICAgICBpZiAoIW1fcmVuZGVyU3RhdGVzLnNpemUoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMzM4LDYgKzQyMiwxOCBAQAogICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6YmVnaW5EcmF3
KCkKK3sKKyAgICBBU1NFUlQobV9yZW5kZXJUYXJnZXQuZ2V0KCkpOworICAgIGlmIChtX2RpZEJl
Z2luRHJhdykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yZW5kZXJUYXJnZXQtPkJlZ2luRHJh
dygpOworICAgIG1fZGlkQmVnaW5EcmF3ID0gdHJ1ZTsKKworICAgICsrbV9iZWdpbkRyYXdDb3Vu
dDsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmVuZERyYXcoKQog
ewogICAgIEFTU0VSVChtX3JlbmRlclRhcmdldC5nZXQoKSk7CkBAIC0zNDYsNiArNDQyLDEwIEBA
CiAKICAgICBpZiAoIVNVQ0NFRURFRChocikpCiAgICAgICAgIFdURkxvZ0Fsd2F5cygiRmFpbGVk
IGluIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kRHJhdzogaHI9JWxkLCBmaXJz
dD0lbGQsIHNlY29uZD0lbGQiLCBociwgZmlyc3QsIHNlY29uZCk7CisKKyAgICAtLW1fYmVnaW5E
cmF3Q291bnQ7CisgICAgaWYgKCFtX2JlZ2luRHJhd0NvdW50KQorICAgICAgICBtX2RpZEJlZ2lu
RHJhdyA9IGZhbHNlOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6
cmVzdG9yZSgpCkBAIC00NDIsNiArNTQyLDIwIEBACiAgICAgcmV0dXJuIG1fZGF0YS0+bV9wYXR0
ZXJuRmlsbEJydXNoLmdldCgpOwogfQogCitib29sIEdyYXBoaWNzQ29udGV4dDo6dGVtcG9yYXJ5
QmVnaW5EcmF3SWZOZWVkZWQoKQoreworICAgIGlmIChtX2RhdGEtPm1fZGlkQmVnaW5EcmF3KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2RhdGEtPmJlZ2luRHJhdygpOworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kRHJhdygpCit7CisgICAg
bV9kYXRhLT5lbmREcmF3KCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVy
bihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRl
T3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSB8fCAhcGF0dGVyblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKQEAgLTgyMSwxNSAr
OTM1LDEyIEBACiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3V2l0aG91dFNoYWRvdyhjb25z
dCBGbG9hdFJlY3QmIC8qYm91bmRpbmdSZWN0Ki8sIGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChJ
RDJEMVJlbmRlclRhcmdldCopPiYgZHJhd0NvbW1hbmRzKQogewotICAgIGF1dG8gY29udGV4dCA9
IHBsYXRmb3JtQ29udGV4dCgpOworICAgIGJvb2wgdGVtcG9yYXJ5RHJhdyA9IHRlbXBvcmFyeUJl
Z2luRHJhd0lmTmVlZGVkKCk7CiAKLSAgICBpZiAoIWRpZEJlZ2luRHJhdygpKQotICAgICAgICBj
b250ZXh0LT5CZWdpbkRyYXcoKTsKKyAgICBkcmF3Q29tbWFuZHMocGxhdGZvcm1Db250ZXh0KCkp
OwogCi0gICAgZHJhd0NvbW1hbmRzKGNvbnRleHQpOwotCi0gICAgaWYgKCFkaWRCZWdpbkRyYXco
KSkKLSAgICAgICAgbV9kYXRhLT5lbmREcmF3KCk7CisgICAgaWYgKHRlbXBvcmFyeURyYXcpCisg
ICAgICAgIGVuZERyYXcoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdXaXRoU2hh
ZG93KGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdSZWN0LCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4mIGRyYXdDb21tYW5kcykKQEAgLTEwODAsOSArMTE5MSw4
IEBACiAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgfQogCi0gICAgaWYgKCFkaWRCZWdp
bkRyYXcoKSkKLSAgICAgICAgY29udGV4dC0+QmVnaW5EcmF3KCk7Ci0gICAgCisgICAgYm9vbCB0
ZW1wb3JhcnlEcmF3ID0gdGVtcG9yYXJ5QmVnaW5EcmF3SWZOZWVkZWQoKTsKKwogICAgIGNvbnRl
eHQtPlNldFRhZ3MoMSwgX19MSU5FX18pOwogCiAgICAgY29uc3QgRmxvYXRSZWN0JiByID0gcmVj
dC5yZWN0KCk7CkBAIC0xMTAyLDcgKzEyMTIsNyBAQAogICAgICAgICBmaWxsUGF0aChwYXRoKTsK
ICAgICB9CiAKLSAgICBpZiAoIWRpZEJlZ2luRHJhdygpKQorICAgIGlmICh0ZW1wb3JhcnlEcmF3
KQogICAgICAgICBtX2RhdGEtPmVuZERyYXcoKTsKIAogICAgIGlmIChkcmF3T3duU2hhZG93KQpA
QCAtMTEyMSw4ICsxMjMxLDcgQEAKIAogICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4
dCgpOwogCi0gICAgaWYgKCFkaWRCZWdpbkRyYXcoKSkKLSAgICAgICAgY29udGV4dC0+QmVnaW5E
cmF3KCk7CisgICAgYm9vbCB0ZW1wb3JhcnlEcmF3ID0gdGVtcG9yYXJ5QmVnaW5EcmF3SWZOZWVk
ZWQoKTsKIAogICAgIGNvbnRleHQtPlNldFRhZ3MoMSwgX19MSU5FX18pOwogCkBAIC0xMTUyLDcg
KzEyNjEsNyBAQAogCiAgICAgZmlsbFBhdGgocGF0aCk7CiAKLSAgICBpZiAoIWRpZEJlZ2luRHJh
dygpKQorICAgIGlmICh0ZW1wb3JhcnlEcmF3KQogICAgICAgICBtX2RhdGEtPmVuZERyYXcoKTsK
IAogICAgIGlmIChkcmF3T3duU2hhZG93KQpAQCAtMTI0OCwxNCArMTM1NywxMyBAQAogICAgICAg
ICByZXR1cm4gSW50UmVjdCgtMjA0OCwgLTIwNDgsIDQwOTYsIDQwOTYpOyAvLyBGSVhNRTogZGlz
cGxheSBsaXN0cy4KICAgICB9CiAKLSAgICBEMkQxX1JFQ1RfRiBkMmRDbGlwQm91bmRzID0gRDJE
MTo6SW5maW5pdGVSZWN0KCk7Ci0gICAgRmxvYXRSZWN0IGNsaXBCb3VuZHMoZDJkQ2xpcEJvdW5k
cy5sZWZ0LCBkMmRDbGlwQm91bmRzLnRvcCwgZDJkQ2xpcEJvdW5kcy5yaWdodCAtIGQyZENsaXBC
b3VuZHMubGVmdCwgZDJkQ2xpcEJvdW5kcy5ib3R0b20gLSBkMmRDbGlwQm91bmRzLnRvcCk7Cisg
ICAgRDJEMV9TSVpFX0YgY2xpcFNpemU7CisgICAgaWYgKG1fZGF0YS0+Y2xpcExheWVyKCkpCisg
ICAgICAgIGNsaXBTaXplID0gbV9kYXRhLT5jbGlwTGF5ZXIoKS0+R2V0U2l6ZSgpOworICAgIGVs
c2UKKyAgICAgICAgY2xpcFNpemUgPSBwbGF0Zm9ybUNvbnRleHQoKS0+R2V0U2l6ZSgpOwogCi0g
ICAgaWYgKG1fZGF0YS0+Y2xpcExheWVyKCkpIHsKLSAgICAgICAgYXV0byBjbGlwU2l6ZSA9IG1f
ZGF0YS0+Y2xpcExheWVyKCktPkdldFNpemUoKTsKLSAgICAgICAgY2xpcEJvdW5kcy5zZXRXaWR0
aChjbGlwU2l6ZS53aWR0aCk7Ci0gICAgICAgIGNsaXBCb3VuZHMuc2V0SGVpZ2h0KGNsaXBTaXpl
LmhlaWdodCk7Ci0gICAgfQorICAgIEZsb2F0UmVjdCBjbGlwQm91bmRzKEludFBvaW50KCksIGNs
aXBTaXplKTsKIAogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGNsaXBCb3VuZHMpOwogfQpJ
bmRleDogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZURpcmVjdDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgJKHJldmlzaW9uIDIwNzY4MCkKKysrIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEaXJlY3Qy
RC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMCArMzksOCBAQAogY2xhc3MgR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKLSAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoSUQyRDFSZW5kZXJUYXJnZXQq
IHJlbmRlclRhcmdldCkKLSAgICAgICAgOiBtX3JlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpCi0g
ICAgewotICAgIH0KKyAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoSUQyRDFSZW5k
ZXJUYXJnZXQqKTsKKyAgICB+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCk7CiAKICAg
ICBlbnVtIERpcmVjdDJETGF5ZXJUeXBlIHsgQXhpc0FsaWduZWRDbGlwLCBMYXllckNsaXAgfTsK
IApAQCAtNDksNiArNDcsNyBAQAogICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKTsKICAg
ICB2b2lkIGNsaXAoY29uc3QgUGF0aCYpOwogICAgIHZvaWQgY2xpcChJRDJEMUdlb21ldHJ5Kik7
CisgICAgdm9pZCBiZWdpbkRyYXcoKTsKICAgICB2b2lkIGVuZERyYXcoKTsKICAgICB2b2lkIGZs
dXNoKCk7CiAgICAgdm9pZCBzYXZlKCk7CkBAIC03NSw5ICs3NCwxMyBAQAogCiAgICAgQ09NUHRy
PElEMkQxU29saWRDb2xvckJydXNoPiBicnVzaFdpdGhDb2xvcihjb25zdCBEMkQxX0NPTE9SX0Ym
KTsKIAorICAgIEhEQyBoZGNGb3JSZW5kZXJUYXJnZXQoKTsKKyAgICB2b2lkIHJlbGVhc2VIZGNG
b3JSZW5kZXJUYXJnZXQoKTsKKwogICAgIEhEQyBtX2hkYyB7IG51bGxwdHIgfTsKICAgICBEMkQx
X0JMRU5EX01PREUgbV9ibGVuZE1vZGUgeyBEMkQxX0JMRU5EX01PREVfTVVMVElQTFkgfTsKICAg
ICBEMkQxX0NPTVBPU0lURV9NT0RFIG1fY29tcG9zaXRlTW9kZSB7IEQyRDFfQ09NUE9TSVRFX01P
REVfU09VUkNFX09WRVIgfTsKKyAgICB1bnNpZ25lZCBtX2JlZ2luRHJhd0NvdW50IHsgMCB9Owog
ICAgIGJvb2wgbV9zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzIHsgZmFsc2UgfTsKICAgICBib29s
IG1fZGlkQmVnaW5EcmF3IHsgZmFsc2UgfTsKICAgICBib29sIG1fc3Ryb2tlU3lsZUlzRGlydHkg
eyBmYWxzZSB9OwpAQCAtOTEsNiArOTQsNyBAQAogICAgIHZvaWQgcmVjb21wdXRlU3Ryb2tlU3R5
bGUoKTsKIAogICAgIENPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gbV9yZW5kZXJUYXJnZXQ7Cisg
ICAgQ09NUHRyPElEMkQxR2RpSW50ZXJvcFJlbmRlclRhcmdldD4gbV9nZGlSZW5kZXJUYXJnZXQ7
CiAgICAgSGFzaE1hcDxSR0JBMzIsIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4+IG1fc29s
aWRDb2xvcmVkQnJ1c2hDYWNoZTsKICAgICBDT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IG1f
d2hpdGVCcnVzaDsKICAgICBDT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IG1femVyb0JydXNo
OwpJbmRleDogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGly
ZWN0MkQuY3BwCShyZXZpc2lvbiAyMDc2ODApCisrKyBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MywyMyArNjMsMTYg
QEAKICAgICBhdXRvIGJpdG1hcERDID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxl
REMod2luZG93REMpKTsKICAgICBIR0RJT0JKIG9sZEJpdG1hcCA9IDo6U2VsZWN0T2JqZWN0KGJp
dG1hcERDLmdldCgpLCBiaXRtYXAuZ2V0KCkpOwogCi0gICAgSFJFU1VMVCBocjsKKyAgICBib29s
IHRlbXBvcmFyeURyYXcgPSBjb250ZXh0LT50ZW1wb3JhcnlCZWdpbkRyYXdJZk5lZWRlZCgpOwog
Ci0gICAgQ09NUHRyPElEMkQxR2RpSW50ZXJvcFJlbmRlclRhcmdldD4gZ2RpUmVuZGVyVGFyZ2V0
OwotICAgIGhyID0gcGxhdGZvcm1Db250ZXh0LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDJE
MUdkaUludGVyb3BSZW5kZXJUYXJnZXQpLCAodm9pZCoqKSZnZGlSZW5kZXJUYXJnZXQpOwotICAg
IGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBIREMgaGRjID0g
Y29udGV4dC0+aGRjRm9yUmVuZGVyVGFyZ2V0KCk7CiAKLSAgICBwbGF0Zm9ybUNvbnRleHQtPkJl
Z2luRHJhdygpOwotCi0gICAgSERDIGhkYyA9IG51bGxwdHI7Ci0gICAgaHIgPSBnZGlSZW5kZXJU
YXJnZXQtPkdldERDKEQyRDFfRENfSU5JVElBTElaRV9NT0RFX0NPUFksICZoZGMpOwotCiAgICAg
Qk9PTCBvayA9IDo6Qml0Qmx0KGJpdG1hcERDLmdldCgpLCAwLCAwLCByZWN0LndpZHRoKCksIHJl
Y3QuaGVpZ2h0KCksIGhkYywgcmVjdC54KCksIHJlY3QueSgpLCBTUkNDT1BZKTsKIAotICAgIGhy
ID0gZ2RpUmVuZGVyVGFyZ2V0LT5SZWxlYXNlREMobnVsbHB0cik7CisgICAgY29udGV4dC0+cmVs
ZWFzZUhkY0ZvclJlbmRlclRhcmdldCgpOwogCi0gICAgaHIgPSBwbGF0Zm9ybUNvbnRleHQtPkVu
ZERyYXcoKTsKKyAgICBpZiAodGVtcG9yYXJ5RHJhdykKKyAgICAgICAgY29udGV4dC0+ZW5kRHJh
dygpOwogCiAgICAgaWYgKCFvaykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAy
MDc2ODApCisrKyBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg1LDE0ICs4NSwxMyBAQAogCiAgICAgZmxvYXQgb3BhY2l0eSA9
IDEuMGY7CiAKLSAgICBpZiAoIWNvbnRleHQuZGlkQmVnaW5EcmF3KCkpCi0gICAgICAgIHBsYXRm
b3JtQ29udGV4dC0+QmVnaW5EcmF3KCk7CisgICAgYm9vbCB0ZW1wb3JhcnlEcmF3ID0gY29udGV4
dC50ZW1wb3JhcnlCZWdpbkRyYXdJZk5lZWRlZCgpOwogCiAgICAgcGxhdGZvcm1Db250ZXh0LT5E
cmF3Qml0bWFwKGltYWdlLmdldCgpLCBkZXN0UmVjdCwgb3BhY2l0eSwgRDJEMV9CSVRNQVBfSU5U
RVJQT0xBVElPTl9NT0RFX05FQVJFU1RfTkVJR0hCT1IsIGFkanVzdGVkU3JjUmVjdCk7CiAKICAg
ICBIUkVTVUxUIGhyID0gU19PSzsKLSAgICBpZiAoIWNvbnRleHQuZGlkQmVnaW5EcmF3KCkpCi0g
ICAgICAgIGhyID0gcGxhdGZvcm1Db250ZXh0LT5FbmREcmF3KCk7CisgICAgaWYgKHRlbXBvcmFy
eURyYXcpCisgICAgICAgIGNvbnRleHQuZW5kRHJhdygpOwogICAgIGVsc2UKICAgICAgICAgaHIg
PSBwbGF0Zm9ybUNvbnRleHQtPkZsdXNoKCk7CiAKSW5kZXg6IHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9QYXRoRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Q
YXRoRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMDc2ODEpCisrKyBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vUGF0aERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsOCArNzAsNiBAQAogCiBQ
YXRoOjp+UGF0aCgpCiB7Ci0gICAgaWYgKG1fcGF0aCkKLSAgICAgICAgbV9wYXRoLT5SZWxlYXNl
KCk7CiB9CiAKIFBsYXRmb3JtUGF0aFB0ciBQYXRoOjplbnN1cmVQbGF0Zm9ybVBhdGgoKQpAQCAt
ODMsNyArODEsNyBAQAogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAg
cmV0dXJuIG1fcGF0aDsKKyAgICByZXR1cm4gbV9wYXRoLmdldCgpOwogfQogCiB2b2lkIFBhdGg6
OmFwcGVuZEdlb21ldHJ5KElEMkQxR2VvbWV0cnkqIGdlb21ldHJ5KQpAQCAtMTAxLDcgKzk5LDcg
QEAKIAogICAgIGF1dG8gZmlsbE1vZGUgPSBtX3BhdGggPyBtX3BhdGgtPkdldEZpbGxNb2RlKCkg
OiBEMkQxX0ZJTExfTU9ERV9XSU5ESU5HOwogCi0gICAgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91
cD4gcHJvdGVjdGVkUGF0aCA9IGFkb3B0Q09NKG1fcGF0aCk7CisgICAgQ09NUHRyPElEMkQxR2Vv
bWV0cnlHcm91cD4gcHJvdGVjdGVkUGF0aCA9IG1fcGF0aDsKICAgICBtX3BhdGggPSBudWxscHRy
OwogCiAgICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5D
cmVhdGVHZW9tZXRyeUdyb3VwKGZpbGxNb2RlLCBnZW9tZXRyaWVzLmRhdGEoKSwgZ2VvbWV0cmll
cy5zaXplKCksICZtX3BhdGgpOwpAQCAtMTYyLDEzICsxNjAsNyBAQAogCiBQYXRoJiBQYXRoOjpv
cGVyYXRvcj0oY29uc3QgUGF0aCYgb3RoZXIpCiB7Ci0gICAgaWYgKG1fcGF0aCkKLSAgICAgICAg
bV9wYXRoLT5SZWxlYXNlKCk7Ci0KICAgICBtX3BhdGggPSBvdGhlci5tX3BhdGg7Ci0gICAgaWYg
KG1fcGF0aCkKLSAgICAgICAgbV9wYXRoLT5BZGRSZWYoKTsKLQogICAgIG1fYWN0aXZlUGF0aCA9
IG90aGVyLm1fYWN0aXZlUGF0aDsKICAgICBtX2FjdGl2ZVBhdGhHZW9tZXRyeSA9IG90aGVyLm1f
YWN0aXZlUGF0aEdlb21ldHJ5OwogCkBAIC0xNzcsOCArMTY5LDYgQEAKIAogSFJFU1VMVCBQYXRo
Ojppbml0aWFsaXplUGF0aFN0YXRlKCkKIHsKLSAgICBpZiAobV9wYXRoKQotICAgICAgICBtX3Bh
dGgtPlJlbGVhc2UoKTsKICAgICBtX3BhdGggPSBudWxscHRyOwogICAgIG1fYWN0aXZlUGF0aCA9
IG51bGxwdHI7CiAgICAgbV9hY3RpdmVQYXRoR2VvbWV0cnkgPSBudWxscHRyOwpAQCAtMjU3LDcg
KzI0Nyw3IEBACiAKICAgICBjb25zdCBEMkQxX01BVFJJWF8zWDJfRiYgZDJkVHJhbnNmb3JtID0g
c3RhdGljX2Nhc3Q8Y29uc3QgRDJEMV9NQVRSSVhfM1gyX0Y+KHRyYW5zZm9ybSk7CiAgICAgQ09N
UHRyPElEMkQxVHJhbnNmb3JtZWRHZW9tZXRyeT4gdHJhbnNmb3JtZWRQYXRoOwotICAgIGlmICgh
U1VDQ0VFREVEKEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVUcmFuc2Zv
cm1lZEdlb21ldHJ5KG1fcGF0aCwgZDJkVHJhbnNmb3JtLCAmdHJhbnNmb3JtZWRQYXRoKSkpCisg
ICAgaWYgKCFTVUNDRUVERUQoR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0
ZVRyYW5zZm9ybWVkR2VvbWV0cnkobV9wYXRoLmdldCgpLCBkMmRUcmFuc2Zvcm0sICZ0cmFuc2Zv
cm1lZFBhdGgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVmVjdG9yPElEMkQxR2VvbWV0cnkq
PiBnZW9tZXRyaWVzOwpAQCAtMjcxLDcgKzI2MSw2IEBACiAKICAgICBhdXRvIGZpbGxNb2RlID0g
bV9wYXRoLT5HZXRGaWxsTW9kZSgpOwogCi0gICAgbV9wYXRoLT5SZWxlYXNlKCk7CiAgICAgbV9w
YXRoID0gbnVsbHB0cjsKIAogICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3Rl
bUZhY3RvcnkoKS0+Q3JlYXRlR2VvbWV0cnlHcm91cChmaWxsTW9kZSwgZ2VvbWV0cmllcy5kYXRh
KCksIGdlb21ldHJpZXMuc2l6ZSgpLCAmbV9wYXRoKTsKQEAgLTQ3Niw3ICs0NjUsNyBAQAogdm9p
ZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcikKIHsKICAgICBDT01QdHI8SUQy
RDFFbGxpcHNlR2VvbWV0cnk+IGVsbGlwc2U7Ci0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29u
dGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVFbGxpcHNlR2VvbWV0cnkoRDJEMTo6RWxsaXBz
ZShEMkQxOjpQb2ludDJGKHIuY2VudGVyKCkueCgpLCByLmNlbnRlcigpLnkoKSksIHIud2lkdGgo
KSwgci5oZWlnaHQoKSksICZlbGxpcHNlKTsKKyAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250
ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUVsbGlwc2VHZW9tZXRyeShEMkQxOjpFbGxpcHNl
KHIuY2VudGVyKCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSksICZlbGxpcHNlKTsKICAgICBSRUxF
QVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKICAgICBhcHBlbmRHZW9tZXRyeShlbGxpcHNlLmdl
dCgpKTsKIH0KQEAgLTQ5OCw5ICs0ODcsNiBAQAogICAgIGlmIChpc051bGwoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKG1fcGF0aCkKLSAgICAgICAgbV9wYXRoLT5SZWxlYXNlKCk7Ci0K
ICAgICBtX3BhdGggPSBudWxscHRyOwogICAgIG1fYWN0aXZlUGF0aCA9IG51bGxwdHI7CiAgICAg
bV9hY3RpdmVQYXRoR2VvbWV0cnkgPSBudWxscHRyOwpJbmRleDogcmVuZGVyaW5nL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVu
ZGVyZXIuY3BwCShyZXZpc2lvbiAyMDc2ODApCisrKyByZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVu
ZGVyZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTQsNyArNDE0LDExIEBACiAgICAgICAgIG1f
aGF2ZUZpbHRlckVmZmVjdCA9IGZhbHNlOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQot
ICAgIAorCisjaWYgVVNFKERJUkVDVDJEKQorICAgIHNvdXJjZUdyYXBoaWNzQ29udGV4dC0+dGVt
cG9yYXJ5QmVnaW5EcmF3SWZOZWVkZWQoKTsKKyNlbmRpZgorCiAgICAgLy8gVHJhbnNsYXRlIHRo
ZSBjb250ZXh0IHNvIHRoYXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBsYXllciBpcyBjYXB0dXJlZCBp
biB0aGUgb2Zmc2NyZWVuIG1lbW9yeSBidWZmZXIuCiAgICAgc291cmNlR3JhcGhpY3NDb250ZXh0
LT5zYXZlKCk7CiAgICAgc291cmNlR3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoLW1fcGFpbnRP
ZmZzZXQueCgpLCAtbV9wYWludE9mZnNldC55KCkpOwpAQCAtNDM3LDYgKzQ0MSwxMCBAQAogICAg
IExheW91dFJlY3QgZGVzdFJlY3QgPSBmaWx0ZXItPm91dHB1dFJlY3QoKTsKICAgICBkZXN0UmVj
dC5tb3ZlKG1fcGFpbnRPZmZzZXQueCgpLCBtX3BhaW50T2Zmc2V0LnkoKSk7CiAKKyNpZiBVU0Uo
RElSRUNUMkQpCisgICAgZmlsdGVyLT5pbnB1dENvbnRleHQoKS0+ZW5kRHJhdygpOworI2VuZGlm
CisKICAgICBpZiAoSW1hZ2VCdWZmZXIqIG91dHB1dEJ1ZmZlciA9IGZpbHRlci0+b3V0cHV0KCkp
CiAgICAgICAgIGRlc3RpbmF0aW9uQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKm91dHB1dEJ1ZmZl
ciwgc25hcFJlY3RUb0RldmljZVBpeGVscyhkZXN0UmVjdCwgbV9yZW5kZXJMYXllci0+cmVuZGVy
ZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292635</attachid>
            <date>2016-10-24 11:35:41 -0700</date>
            <delta_ts>2016-10-24 14:09:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>filter.patch</filename>
            <type>text/plain</type>
            <size>27979</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzc2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBACisyMDE2LTEwLTI0ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBJ
bXByb3ZlIHN1cHBvcnQgZm9yIGZpbHRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2Mzg5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyB1bnRpbCBEMkQgYmFja2VuZCBpcyB3b3Jr
aW5nLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oOgorICAgICAgICAoV2ViQ29yZTo6UGF0
aDo6cGxhdGZvcm1QYXRoKTogVXNlIGEgc21hcnQgcG9pbnRlciBmb3IgRDJEIHBhdGggdHlwZXMu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmZpbGwpOiBVc2UgbmV3ICd0ZW1wb3JhcnlCZWdp
bkRyYXdJZk5lZWRlZCcgc28gd2UgaGF2ZQorICAgICAgICBjb25zaXN0ZW50IEJlZ2luL0VuZCBE
cmF3IHBhaXJzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHREaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN5c3Rl
bUZhY3RvcnkpOiBBY3RpdmF0ZSB1c2VmdWwgRDJEIGxvZ2dpbmcgd2hlbiBidWlsZGluZworICAg
ICAgICBpbiBEZWJ1ZyBtb2RlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpw
bGF0Zm9ybUluaXQpOiBXaGVuIGNvbnN0cnVjdGluZyBmcm9tIGEgR0RJIEhEQywgY3JlYXRlCisg
ICAgICAgIGEgR0RJLWNvbXBhdGlibGUgRDJEIHJlbmRlciB0YXJnZXQgc28gYWxsIGRyYXdpbmcg
b3BlcmF0aW9ucyBnbyB0byB0aGUgc2FtZSBwbGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KTogV2hlbgorICAgICAgICBpbml0aWFsaXppbmcgZnJvbSBhIEQyRCBkZXZpY2UsIGNyZWF0ZSBh
IHNpbmdsZSBHREkgSW50ZXJvcCBvYmplY3QgdG8gdXNlIGZvciB0aGUKKyAgICAgICAgbGlmZXRp
bWUgb2YgdGhlIEdyYXBoaWNzQ29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSk6IEFk
ZCBhbgorICAgICAgICBhc3NlcnRpb24gdGhhdCB3ZSBhcmUgaW4gYSB2YWxpZCBzdGF0ZSB3aGVu
IGNsZWFuaW5nIHVwIHRoZSBncmFwaGljcyBjb250ZXh0LgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpoZGNGb3JSZW5kZXJUYXJnZXQpOiBDb252ZW5p
ZW5jZSBtZXRob2QKKyAgICAgICAgZm9yIGdldHRpbmcgYSBHREkgZGV2aWNlIGNvbnRleHQgZm9y
IHRoZSBEMkQgZGV2aWNlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlOjpyZWxlYXNlSGRjRm9yUmVuZGVyVGFyZ2V0KTogUmVsZWFzZSBtZXRob2QKKyAg
ICAgICAgZm9yIHRoZSBIREMgaGFuZGxlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpoZGNGb3JSZW5kZXJUYXJnZXQpOiBFeHBvc2UgaW50ZXJuYWwgbWV0aG9kIHRvIEdyYXBo
aWNzQ29udGV4dAorICAgICAgICBjbGllbnRzLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpyZWxlYXNlSGRjRm9yUmVuZGVyVGFyZ2V0KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNsaXApOiBDbGlwcGluZyBjYW4g
b25seSBoYXBwZW4gaW4gYSBEcmF3IG9wZXJhdGlvbi4KKyAgICAgICAgT3BlbiBhIG5ldyBCZWdp
bkRyYXcgaWYgYXNrZWQgdG8gQ2xpcC4gVGhlIEJlZ2luIG11c3Qgc3RheSBhY3RpdmUgd2hlbiB0
aGlzIG1ldGhvZCByZXR1cm5zLAorICAgICAgICBhcyB0aGUgQ2xpcCBsYXllciBpcyBvbmx5IHZh
bGlkIGR1cmluZyBhIERyYXcgb3BlcmF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOjpiZWdpbkRyYXcpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kRHJhdyk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0ZW1wb3JhcnlCZWdpbkRyYXdJZk5lZWRl
ZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjplbmREcmF3KTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdXaXRob3V0U2hh
ZG93KTogUmV2aXNlIHRvIHVzZSBuZXcgbWV0aG9kLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGly
ZWN0MkQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKTogVXNlIG5ldyBtZXRob2RzLCBh
bmQgY2FjaGVkIEdESSBJbnRlcm9wIG9iamVjdC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkcmF3TmF0
aXZlSW1hZ2UpOiBVc2UgbmV3ICd0ZW1wb3JhcnlCZWdpbkRyYXdJZk5lZWRlZCcgbWV0aG9kLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGF0aDo6flBhdGgpOiBSZXZpc2UgZm9yIHNtYXJ0IHBvaW50ZXIgdXNlLgor
ICAgICAgICAoV2ViQ29yZTo6UGF0aDo6ZW5zdXJlUGxhdGZvcm1QYXRoKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpQYXRoOjphcHBlbmRHZW9tZXRyeSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6UGF0aDo6b3BlcmF0b3I9KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpp
bml0aWFsaXplUGF0aFN0YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjp0cmFu
c2Zvcm0pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZEVsbGlwc2UpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmNsZWFyKTogRGl0dG8uCisgICAgICAgICogcmVu
ZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdFJlbmRlcmVySGVscGVyOjpiZWdpbkZpbHRlckVmZmVjdCk6IENhbGwgIkJlZ2luRHJh
dyIgb24gdGhlCisgICAgICAgIEdyYXBoaWNzQ29udGV4dCBpZiB1c2luZyBEMkQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcjo6YXBwbHlGaWx0ZXJFZmZlY3Qp
OiBDYWxsICJlbmREcmF3IiBvbiB0aGUgc291cmNlCisgICAgICAgIGltYWdlIEdyYXBoaWNzQ29u
dGV4dCBpZiB1c2luZyBEMkQgc28gdGhhdCBpdCBpcyBpbiBhICJmaW5pc2hlZCIgc3RhdGUgYmVm
b3JlIGRyYXdpbmcKKyAgICAgICAgaXRzIGNvbnRlbnRzIHRvIHRoZSBkZXN0aW5hdGlvbiBncmFw
aGljcyBjb250ZXh0LgorCiAyMDE2LTEwLTI0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KIAogICAgICAgICBUcnkgdG8gZml4IFdpbmRvd3MgYnVpbGQuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2aXNp
b24gMjA3NjgxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1Miw5ICs1NTIsMTMgQEAKICAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgSUQyRDFGYWN0b3J5KiBzeXN0ZW1GYWN0b3J5KCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIElEMkQxUmVuZGVyVGFyZ2V0KiBkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7
CiAKKyAgICBib29sIHRlbXBvcmFyeUJlZ2luRHJhd0lmTmVlZGVkKCk7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXREaWRCZWdpbkRyYXcoYm9vbCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBkaWRCZWdpbkRyYXcoKSBjb25zdDsKICAgICBEMkQxX0NPTE9SX0YgY29sb3JXaXRoR2xvYmFs
QWxwaGEoY29uc3QgQ29sb3ImKSBjb25zdDsKKyAgICBIREMgaGRjRm9yUmVuZGVyVGFyZ2V0KCk7
CisgICAgdm9pZCByZWxlYXNlSGRjRm9yUmVuZGVyVGFyZ2V0KCk7CisgICAgdm9pZCBlbmREcmF3
KCk7CiAKICAgICBJRDJEMUJydXNoKiBzb2xpZFN0cm9rZUJydXNoKCkgY29uc3Q7CiAgICAgSUQy
RDFCcnVzaCogc29saWRGaWxsQnJ1c2goKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHJldmlzaW9uIDIwNzY4MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDcgKzE2NSwx
MSBAQAogCiAgICAgICAgIC8vIFRvIGtlZXAgUGF0aCgpIGNoZWFwLCBpdCBkb2VzIG5vdCBhbGxv
Y2F0ZSBhIFBsYXRmb3JtUGF0aCBpbW1lZGlhdGVseQogICAgICAgICAvLyBtZWFuaW5nIFBhdGg6
OnBsYXRmb3JtUGF0aCgpIGNhbiByZXR1cm4gbnVsbC4KKyNpZiBVU0UoRElSRUNUMkQpCisgICAg
ICAgIFBsYXRmb3JtUGF0aFB0ciBwbGF0Zm9ybVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGgu
Z2V0KCk7IH0KKyNlbHNlCiAgICAgICAgIFBsYXRmb3JtUGF0aFB0ciBwbGF0Zm9ybVBhdGgoKSBj
b25zdCB7IHJldHVybiBtX3BhdGg7IH0KKyNlbmRpZgogICAgICAgICAvLyBlbnN1cmVQbGF0Zm9y
bVBhdGgoKSB3aWxsIGFsbG9jYXRlIGEgUGxhdGZvcm1QYXRoIGlmIGl0IGhhcyBub3QgeWV0IGJl
ZW4gYW5kIHdpbGwgbmV2ZXIgcmV0dXJuIG51bGwuCiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIFBs
YXRmb3JtUGF0aFB0ciBlbnN1cmVQbGF0Zm9ybVBhdGgoKTsKIApAQCAtMTk5LDggKzIwMywxMCBA
QAogI2VuZGlmCiAKICAgICBwcml2YXRlOgorI2lmICFVU0UoRElSRUNUMkQpCiAgICAgICAgIFBs
YXRmb3JtUGF0aFB0ciBtX3BhdGggeyBudWxscHRyIH07Ci0jaWYgVVNFKERJUkVDVDJEKQorI2Vs
c2UKKyAgICAgICAgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4gbV9wYXRoOwogICAgICAgICBD
T01QdHI8SUQyRDFQYXRoR2VvbWV0cnk+IG1fYWN0aXZlUGF0aEdlb21ldHJ5OwogICAgICAgICBD
T01QdHI8SUQyRDFHZW9tZXRyeVNpbms+IG1fYWN0aXZlUGF0aDsKICNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVu
dERpcmVjdDJELmNwcAkocmV2aXNpb24gMjA3NjgxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjAsOCArMTIwLDcgQEAKICAgICBpZiAoIW1fY2FjaGVkSGFzaCB8fCAhbV9ncmFkaWVudCkKICAg
ICAgICAgZ2VuZXJhdGVHcmFkaWVudChkMmRDb250ZXh0KTsKIAotICAgIGlmICghY29udGV4dC0+
ZGlkQmVnaW5EcmF3KCkpCi0gICAgICAgIGQyZENvbnRleHQtPkJlZ2luRHJhdygpOworICAgIGJv
b2wgdGVtcG9yYXJ5RHJhdyA9IGNvbnRleHQtPnRlbXBvcmFyeUJlZ2luRHJhd0lmTmVlZGVkKCk7
CiAKICAgICBkMmRDb250ZXh0LT5TZXRUYWdzKEdSQURJRU5UX0RSQVdJTkcsIF9fTElORV9fKTsK
IApAQCAtMTI4LDExICsxMjcsOCBAQAogICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSBy
ZWN0OwogICAgIGQyZENvbnRleHQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIG1fZ3JhZGllbnQp
OwogCi0gICAgaWYgKCFjb250ZXh0LT5kaWRCZWdpbkRyYXcoKSkgewotICAgICAgICBEMkQxX1RB
RyBmaXJzdCwgc2Vjb25kOwotICAgICAgICBIUkVTVUxUIGhyID0gZDJkQ29udGV4dC0+RW5kRHJh
dygmZmlyc3QsICZzZWNvbmQpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIp
KTsKLSAgICB9CisgICAgaWYgKHRlbXBvcmFyeURyYXcpCisgICAgICAgIGNvbnRleHQtPmVuZERy
YXcoKTsKIAogICAgIGlmIChuZWVkU2NhbGluZykKICAgICAgICAgY29udGV4dC0+cmVzdG9yZSgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29u
dGV4dERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMDc2ODEp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSwxMyBAQAogewogICAgIHN0
YXRpYyBJRDJEMUZhY3RvcnkqIGRpcmVjdDJERmFjdG9yeSA9IG51bGxwdHI7CiAgICAgaWYgKCFk
aXJlY3QyREZhY3RvcnkpIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIEQyRDFfRkFDVE9SWV9P
UFRJT05TIG9wdGlvbnMgPSB7IH07CisgICAgICAgIG9wdGlvbnMuZGVidWdMZXZlbCA9IEQyRDFf
REVCVUdfTEVWRUxfSU5GT1JNQVRJT047CisgICAgICAgIEhSRVNVTFQgaHIgPSBEMkQxQ3JlYXRl
RmFjdG9yeShEMkQxX0ZBQ1RPUllfVFlQRV9NVUxUSV9USFJFQURFRCwgb3B0aW9ucywgJmRpcmVj
dDJERmFjdG9yeSk7CisjZWxzZQogICAgICAgICBIUkVTVUxUIGhyID0gRDJEMUNyZWF0ZUZhY3Rv
cnkoRDJEMV9GQUNUT1JZX1RZUEVfTVVMVElfVEhSRUFERUQsICZkaXJlY3QyREZhY3RvcnkpOwor
I2VuZGlmCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwogICAgIH0KIApA
QCAtMTA4LDcgKzExNCwyMyBAQAogICAgIGlmICghaGRjKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBDT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IHJlbmRlclRhcmdldDsKKyAgICBIQklUTUFQIGJp
dG1hcCA9IHN0YXRpY19jYXN0PEhCSVRNQVA+KEdldEN1cnJlbnRPYmplY3QoaGRjLCBPQkpfQklU
TUFQKSk7CisKKyAgICBESUJQaXhlbERhdGEgcGl4ZWxEYXRhKGJpdG1hcCk7CisKKyAgICBhdXRv
IHRhcmdldFByb3BlcnRpZXMgPSBEMkQxOjpSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7CisgICAg
dGFyZ2V0UHJvcGVydGllcy5waXhlbEZvcm1hdCA9IEQyRDE6OlBpeGVsRm9ybWF0KERYR0lfRk9S
TUFUX0I4RzhSOEE4X1VOT1JNLCBEMkQxX0FMUEhBX01PREVfSUdOT1JFKTsKKworICAgIENPTVB0
cjxJRDJEMURDUmVuZGVyVGFyZ2V0PiByZW5kZXJUYXJnZXQ7CisgICAgSFJFU1VMVCBociA9IHN5
c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRENSZW5kZXJUYXJnZXQoJnRhcmdldFByb3BlcnRpZXMsICZy
ZW5kZXJUYXJnZXQpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUkVDVCBjbGllbnRSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBwaXhlbERhdGEuc2l6
ZSgpKTsKKyAgICBociA9IHJlbmRlclRhcmdldC0+QmluZERDKGhkYywgJmNsaWVudFJlY3QpOwor
ICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9kYXRhID0g
bmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShyZW5kZXJUYXJnZXQuZ2V0KCkpOwog
ICAgIG1fZGF0YS0+bV9oZGMgPSBoZGM7CiAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0
YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0YXRlLgpAQCAtMjU3LDYgKzI3OSwyNCBAQAogewogfQog
CitHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQorICAgIDogbV9yZW5kZXJU
YXJnZXQocmVuZGVyVGFyZ2V0KQoreworICAgIGlmICghbV9yZW5kZXJUYXJnZXQpCisgICAgICAg
IHJldHVybjsKKworICAgIEhSRVNVTFQgaHIgPSBtX3JlbmRlclRhcmdldC0+UXVlcnlJbnRlcmZh
Y2UoX191dWlkb2YoSUQyRDFHZGlJbnRlcm9wUmVuZGVyVGFyZ2V0KSwgKHZvaWQqKikmbV9nZGlS
ZW5kZXJUYXJnZXQpOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworfQorCitH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGUoKQoreworICAgIGlmICghbV9yZW5kZXJUYXJnZXQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEFTU0VSVCghbV9iZWdpbkRyYXdDb3VudCk7Cit9CisKIENPTVB0cjxJRDJEMVNvbGlkQ29s
b3JCcnVzaD4gR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpicnVzaFdpdGhDb2xvcihj
b25zdCBEMkQxX0NPTE9SX0YmIGNvbG9yKQogewogICAgIFJHQkEzMiBjb2xvcktleSA9IG1ha2VS
R0JBMzJGcm9tRmxvYXRzKGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEpOwpAQCAt
Mjg3LDEyICszMjcsNTEgQEAKICAgICByZXR1cm4gbV9kYXRhLT5icnVzaFdpdGhDb2xvcihjb2xv
cldpdGhHbG9iYWxBbHBoYShjb2xvcikpLmdldCgpOwogfQogCitIREMgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOjpoZGNGb3JSZW5kZXJUYXJnZXQoKQoreworICAgIEFTU0VSVChtX2Rp
ZEJlZ2luRHJhdyk7CisKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dkaVJlbmRlclRhcmdldCk7CisK
KyAgICBIREMgaGRjID0gbnVsbHB0cjsKKyAgICBIUkVTVUxUIGhyID0gbV9nZGlSZW5kZXJUYXJn
ZXQtPkdldERDKEQyRDFfRENfSU5JVElBTElaRV9NT0RFX0NPUFksICZoZGMpOworICAgIGlmICgh
U1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gaGRj
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cmVsZWFzZUhkY0Zv
clJlbmRlclRhcmdldCgpCit7CisgICAgQVNTRVJUKG1fZGlkQmVnaW5EcmF3KTsKKworICAgIFJF
TEVBU0VfQVNTRVJUKG1fZ2RpUmVuZGVyVGFyZ2V0KTsKKworICAgIEhSRVNVTFQgaHIgPSBtX2dk
aVJlbmRlclRhcmdldC0+UmVsZWFzZURDKG51bGxwdHIpOworfQorCitIREMgR3JhcGhpY3NDb250
ZXh0OjpoZGNGb3JSZW5kZXJUYXJnZXQoKQoreworICAgIHJldHVybiBtX2RhdGEtPmhkY0ZvclJl
bmRlclRhcmdldCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZUhkY0ZvclJl
bmRlclRhcmdldCgpCit7CisgICAgbV9kYXRhLT5yZWxlYXNlSGRjRm9yUmVuZGVyVGFyZ2V0KCk7
Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjbGlwKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKIHsKKyAgICAvLyBJbiBEMkQsIHdlIGNhbiBvbmx5IGNsaXAgaW4gdGhl
IGNvbnRleHQgb2YgYSAnQmVnaW5EcmF3JywgYW5kIHRoZSBjbGlwIGNhbgorICAgIC8vIG9ubHkg
bGl2ZSBhcyBsb25nIGFzIHRoZSBkcmF3IGlzIGhhcHBlbmluZy4KKyAgICBpZiAoIW1fZGlkQmVn
aW5EcmF3KQorICAgICAgICBiZWdpbkRyYXcoKTsKKwogICAgIGlmIChtX3JlbmRlclN0YXRlcy5p
c0VtcHR5KCkpCiAgICAgICAgIHNhdmUoKTsKIAogICAgIG1fcmVuZGVyVGFyZ2V0LT5QdXNoQXhp
c0FsaWduZWRDbGlwKHJlY3QsIEQyRDFfQU5USUFMSUFTX01PREVfUEVSX1BSSU1JVElWRSk7CisK
ICAgICBtX3JlbmRlclN0YXRlcy5sYXN0KCkubV9jbGlwcy5hcHBlbmQoR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOjpBeGlzQWxpZ25lZENsaXApOwogfQogCkBAIC0zMDMsNiArMzgyLDEx
IEBACiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjbGlwKElEMkQxR2Vv
bWV0cnkqIHBhdGgpCiB7CisgICAgLy8gSW4gRDJELCB3ZSBjYW4gb25seSBjbGlwIGluIHRoZSBj
b250ZXh0IG9mIGEgJ0JlZ2luRHJhdycsIGFuZCB0aGUgY2xpcCBjYW4KKyAgICAvLyBvbmx5IGxp
dmUgYXMgbG9uZyBhcyB0aGUgZHJhdyBpcyBoYXBwZW5pbmcuCisgICAgaWYgKCFtX2RpZEJlZ2lu
RHJhdykKKyAgICAgICAgYmVnaW5EcmF3KCk7CisKICAgICBBU1NFUlQobV9yZW5kZXJTdGF0ZXMu
c2l6ZSgpKTsKICAgICBpZiAoIW1fcmVuZGVyU3RhdGVzLnNpemUoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMzM4LDYgKzQyMiwxOCBAQAogICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikp
OwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6YmVnaW5EcmF3KCkK
K3sKKyAgICBBU1NFUlQobV9yZW5kZXJUYXJnZXQuZ2V0KCkpOworICAgIGlmIChtX2RpZEJlZ2lu
RHJhdykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yZW5kZXJUYXJnZXQtPkJlZ2luRHJhdygp
OworICAgIG1fZGlkQmVnaW5EcmF3ID0gdHJ1ZTsKKworICAgICsrbV9iZWdpbkRyYXdDb3VudDsK
K30KKwogdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmVuZERyYXcoKQogewog
ICAgIEFTU0VSVChtX3JlbmRlclRhcmdldC5nZXQoKSk7CkBAIC0zNDYsNiArNDQyLDEwIEBACiAK
ICAgICBpZiAoIVNVQ0NFRURFRChocikpCiAgICAgICAgIFdURkxvZ0Fsd2F5cygiRmFpbGVkIGlu
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kRHJhdzogaHI9JWxkLCBmaXJzdD0l
bGQsIHNlY29uZD0lbGQiLCBociwgZmlyc3QsIHNlY29uZCk7CisKKyAgICAtLW1fYmVnaW5EcmF3
Q291bnQ7CisgICAgaWYgKCFtX2JlZ2luRHJhd0NvdW50KQorICAgICAgICBtX2RpZEJlZ2luRHJh
dyA9IGZhbHNlOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cmVz
dG9yZSgpCkBAIC00NDIsNiArNTQyLDIwIEBACiAgICAgcmV0dXJuIG1fZGF0YS0+bV9wYXR0ZXJu
RmlsbEJydXNoLmdldCgpOwogfQogCitib29sIEdyYXBoaWNzQ29udGV4dDo6dGVtcG9yYXJ5QmVn
aW5EcmF3SWZOZWVkZWQoKQoreworICAgIGlmIChtX2RhdGEtPm1fZGlkQmVnaW5EcmF3KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2RhdGEtPmJlZ2luRHJhdygpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kRHJhdygpCit7CisgICAgbV9k
YXRhLT5lbmREcmF3KCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3Bl
cmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSB8fCAhcGF0dGVyblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKQEAgLTgyMSwxNSArOTM1
LDEyIEBACiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3V2l0aG91dFNoYWRvdyhjb25zdCBG
bG9hdFJlY3QmIC8qYm91bmRpbmdSZWN0Ki8sIGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChJRDJE
MVJlbmRlclRhcmdldCopPiYgZHJhd0NvbW1hbmRzKQogewotICAgIGF1dG8gY29udGV4dCA9IHBs
YXRmb3JtQ29udGV4dCgpOworICAgIGJvb2wgdGVtcG9yYXJ5RHJhdyA9IHRlbXBvcmFyeUJlZ2lu
RHJhd0lmTmVlZGVkKCk7CiAKLSAgICBpZiAoIWRpZEJlZ2luRHJhdygpKQotICAgICAgICBjb250
ZXh0LT5CZWdpbkRyYXcoKTsKKyAgICBkcmF3Q29tbWFuZHMocGxhdGZvcm1Db250ZXh0KCkpOwog
Ci0gICAgZHJhd0NvbW1hbmRzKGNvbnRleHQpOwotCi0gICAgaWYgKCFkaWRCZWdpbkRyYXcoKSkK
LSAgICAgICAgbV9kYXRhLT5lbmREcmF3KCk7CisgICAgaWYgKHRlbXBvcmFyeURyYXcpCisgICAg
ICAgIGVuZERyYXcoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdXaXRoU2hhZG93
KGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdSZWN0LCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
SUQyRDFSZW5kZXJUYXJnZXQqKT4mIGRyYXdDb21tYW5kcykKQEAgLTEwODAsOSArMTE5MSw4IEBA
CiAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgfQogCi0gICAgaWYgKCFkaWRCZWdpbkRy
YXcoKSkKLSAgICAgICAgY29udGV4dC0+QmVnaW5EcmF3KCk7Ci0gICAgCisgICAgYm9vbCB0ZW1w
b3JhcnlEcmF3ID0gdGVtcG9yYXJ5QmVnaW5EcmF3SWZOZWVkZWQoKTsKKwogICAgIGNvbnRleHQt
PlNldFRhZ3MoMSwgX19MSU5FX18pOwogCiAgICAgY29uc3QgRmxvYXRSZWN0JiByID0gcmVjdC5y
ZWN0KCk7CkBAIC0xMTAyLDcgKzEyMTIsNyBAQAogICAgICAgICBmaWxsUGF0aChwYXRoKTsKICAg
ICB9CiAKLSAgICBpZiAoIWRpZEJlZ2luRHJhdygpKQorICAgIGlmICh0ZW1wb3JhcnlEcmF3KQog
ICAgICAgICBtX2RhdGEtPmVuZERyYXcoKTsKIAogICAgIGlmIChkcmF3T3duU2hhZG93KQpAQCAt
MTEyMSw4ICsxMjMxLDcgQEAKIAogICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgp
OwogCi0gICAgaWYgKCFkaWRCZWdpbkRyYXcoKSkKLSAgICAgICAgY29udGV4dC0+QmVnaW5EcmF3
KCk7CisgICAgYm9vbCB0ZW1wb3JhcnlEcmF3ID0gdGVtcG9yYXJ5QmVnaW5EcmF3SWZOZWVkZWQo
KTsKIAogICAgIGNvbnRleHQtPlNldFRhZ3MoMSwgX19MSU5FX18pOwogCkBAIC0xMTUyLDcgKzEy
NjEsNyBAQAogCiAgICAgZmlsbFBhdGgocGF0aCk7CiAKLSAgICBpZiAoIWRpZEJlZ2luRHJhdygp
KQorICAgIGlmICh0ZW1wb3JhcnlEcmF3KQogICAgICAgICBtX2RhdGEtPmVuZERyYXcoKTsKIAog
ICAgIGlmIChkcmF3T3duU2hhZG93KQpAQCAtMTI0OCwxNCArMTM1NywxMyBAQAogICAgICAgICBy
ZXR1cm4gSW50UmVjdCgtMjA0OCwgLTIwNDgsIDQwOTYsIDQwOTYpOyAvLyBGSVhNRTogZGlzcGxh
eSBsaXN0cy4KICAgICB9CiAKLSAgICBEMkQxX1JFQ1RfRiBkMmRDbGlwQm91bmRzID0gRDJEMTo6
SW5maW5pdGVSZWN0KCk7Ci0gICAgRmxvYXRSZWN0IGNsaXBCb3VuZHMoZDJkQ2xpcEJvdW5kcy5s
ZWZ0LCBkMmRDbGlwQm91bmRzLnRvcCwgZDJkQ2xpcEJvdW5kcy5yaWdodCAtIGQyZENsaXBCb3Vu
ZHMubGVmdCwgZDJkQ2xpcEJvdW5kcy5ib3R0b20gLSBkMmRDbGlwQm91bmRzLnRvcCk7CisgICAg
RDJEMV9TSVpFX0YgY2xpcFNpemU7CisgICAgaWYgKG1fZGF0YS0+Y2xpcExheWVyKCkpCisgICAg
ICAgIGNsaXBTaXplID0gbV9kYXRhLT5jbGlwTGF5ZXIoKS0+R2V0U2l6ZSgpOworICAgIGVsc2UK
KyAgICAgICAgY2xpcFNpemUgPSBwbGF0Zm9ybUNvbnRleHQoKS0+R2V0U2l6ZSgpOwogCi0gICAg
aWYgKG1fZGF0YS0+Y2xpcExheWVyKCkpIHsKLSAgICAgICAgYXV0byBjbGlwU2l6ZSA9IG1fZGF0
YS0+Y2xpcExheWVyKCktPkdldFNpemUoKTsKLSAgICAgICAgY2xpcEJvdW5kcy5zZXRXaWR0aChj
bGlwU2l6ZS53aWR0aCk7Ci0gICAgICAgIGNsaXBCb3VuZHMuc2V0SGVpZ2h0KGNsaXBTaXplLmhl
aWdodCk7Ci0gICAgfQorICAgIEZsb2F0UmVjdCBjbGlwQm91bmRzKEludFBvaW50KCksIGNsaXBT
aXplKTsKIAogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGNsaXBCb3VuZHMpOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZURpcmVjdDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJE
LmgJKHJldmlzaW9uIDIwNzY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSwxMCArMzksOCBAQAogY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkK
LSAgICAgICAgOiBtX3JlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpCi0gICAgewotICAgIH0KKyAg
ICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoSUQyRDFSZW5kZXJUYXJnZXQqKTsKKyAg
ICB+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCk7CiAKICAgICBlbnVtIERpcmVjdDJE
TGF5ZXJUeXBlIHsgQXhpc0FsaWduZWRDbGlwLCBMYXllckNsaXAgfTsKIApAQCAtNDksNiArNDcs
NyBAQAogICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIGNsaXAoY29u
c3QgUGF0aCYpOwogICAgIHZvaWQgY2xpcChJRDJEMUdlb21ldHJ5Kik7CisgICAgdm9pZCBiZWdp
bkRyYXcoKTsKICAgICB2b2lkIGVuZERyYXcoKTsKICAgICB2b2lkIGZsdXNoKCk7CiAgICAgdm9p
ZCBzYXZlKCk7CkBAIC03NSw5ICs3NCwxMyBAQAogCiAgICAgQ09NUHRyPElEMkQxU29saWRDb2xv
ckJydXNoPiBicnVzaFdpdGhDb2xvcihjb25zdCBEMkQxX0NPTE9SX0YmKTsKIAorICAgIEhEQyBo
ZGNGb3JSZW5kZXJUYXJnZXQoKTsKKyAgICB2b2lkIHJlbGVhc2VIZGNGb3JSZW5kZXJUYXJnZXQo
KTsKKwogICAgIEhEQyBtX2hkYyB7IG51bGxwdHIgfTsKICAgICBEMkQxX0JMRU5EX01PREUgbV9i
bGVuZE1vZGUgeyBEMkQxX0JMRU5EX01PREVfTVVMVElQTFkgfTsKICAgICBEMkQxX0NPTVBPU0lU
RV9NT0RFIG1fY29tcG9zaXRlTW9kZSB7IEQyRDFfQ09NUE9TSVRFX01PREVfU09VUkNFX09WRVIg
fTsKKyAgICB1bnNpZ25lZCBtX2JlZ2luRHJhd0NvdW50IHsgMCB9OwogICAgIGJvb2wgbV9zaG91
bGRJbmNsdWRlQ2hpbGRXaW5kb3dzIHsgZmFsc2UgfTsKICAgICBib29sIG1fZGlkQmVnaW5EcmF3
IHsgZmFsc2UgfTsKICAgICBib29sIG1fc3Ryb2tlU3lsZUlzRGlydHkgeyBmYWxzZSB9OwpAQCAt
OTEsNiArOTQsNyBAQAogICAgIHZvaWQgcmVjb21wdXRlU3Ryb2tlU3R5bGUoKTsKIAogICAgIENP
TVB0cjxJRDJEMVJlbmRlclRhcmdldD4gbV9yZW5kZXJUYXJnZXQ7CisgICAgQ09NUHRyPElEMkQx
R2RpSW50ZXJvcFJlbmRlclRhcmdldD4gbV9nZGlSZW5kZXJUYXJnZXQ7CiAgICAgSGFzaE1hcDxS
R0JBMzIsIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4+IG1fc29saWRDb2xvcmVkQnJ1c2hD
YWNoZTsKICAgICBDT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IG1fd2hpdGVCcnVzaDsKICAg
ICBDT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IG1femVyb0JydXNoOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMDc2ODApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MywyMyArNjMsMTYgQEAKICAgICBhdXRvIGJpdG1hcERDID0gYWRv
cHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMod2luZG93REMpKTsKICAgICBIR0RJT0JK
IG9sZEJpdG1hcCA9IDo6U2VsZWN0T2JqZWN0KGJpdG1hcERDLmdldCgpLCBiaXRtYXAuZ2V0KCkp
OwogCi0gICAgSFJFU1VMVCBocjsKKyAgICBib29sIHRlbXBvcmFyeURyYXcgPSBjb250ZXh0LT50
ZW1wb3JhcnlCZWdpbkRyYXdJZk5lZWRlZCgpOwogCi0gICAgQ09NUHRyPElEMkQxR2RpSW50ZXJv
cFJlbmRlclRhcmdldD4gZ2RpUmVuZGVyVGFyZ2V0OwotICAgIGhyID0gcGxhdGZvcm1Db250ZXh0
LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDJEMUdkaUludGVyb3BSZW5kZXJUYXJnZXQpLCAo
dm9pZCoqKSZnZGlSZW5kZXJUYXJnZXQpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICBIREMgaGRjID0gY29udGV4dC0+aGRjRm9yUmVuZGVyVGFyZ2V0
KCk7CiAKLSAgICBwbGF0Zm9ybUNvbnRleHQtPkJlZ2luRHJhdygpOwotCi0gICAgSERDIGhkYyA9
IG51bGxwdHI7Ci0gICAgaHIgPSBnZGlSZW5kZXJUYXJnZXQtPkdldERDKEQyRDFfRENfSU5JVElB
TElaRV9NT0RFX0NPUFksICZoZGMpOwotCiAgICAgQk9PTCBvayA9IDo6Qml0Qmx0KGJpdG1hcERD
LmdldCgpLCAwLCAwLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksIGhkYywgcmVjdC54KCks
IHJlY3QueSgpLCBTUkNDT1BZKTsKIAotICAgIGhyID0gZ2RpUmVuZGVyVGFyZ2V0LT5SZWxlYXNl
REMobnVsbHB0cik7CisgICAgY29udGV4dC0+cmVsZWFzZUhkY0ZvclJlbmRlclRhcmdldCgpOwog
Ci0gICAgaHIgPSBwbGF0Zm9ybUNvbnRleHQtPkVuZERyYXcoKTsKKyAgICBpZiAodGVtcG9yYXJ5
RHJhdykKKyAgICAgICAgY29udGV4dC0+ZW5kRHJhdygpOwogCiAgICAgaWYgKCFvaykKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3BwCShyZXZpc2lv
biAyMDc2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZl
SW1hZ2VEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDE0ICs4NSwxMyBAQAogCiAg
ICAgZmxvYXQgb3BhY2l0eSA9IDEuMGY7CiAKLSAgICBpZiAoIWNvbnRleHQuZGlkQmVnaW5EcmF3
KCkpCi0gICAgICAgIHBsYXRmb3JtQ29udGV4dC0+QmVnaW5EcmF3KCk7CisgICAgYm9vbCB0ZW1w
b3JhcnlEcmF3ID0gY29udGV4dC50ZW1wb3JhcnlCZWdpbkRyYXdJZk5lZWRlZCgpOwogCiAgICAg
cGxhdGZvcm1Db250ZXh0LT5EcmF3Qml0bWFwKGltYWdlLmdldCgpLCBkZXN0UmVjdCwgb3BhY2l0
eSwgRDJEMV9CSVRNQVBfSU5URVJQT0xBVElPTl9NT0RFX05FQVJFU1RfTkVJR0hCT1IsIGFkanVz
dGVkU3JjUmVjdCk7CiAKICAgICBIUkVTVUxUIGhyID0gU19PSzsKLSAgICBpZiAoIWNvbnRleHQu
ZGlkQmVnaW5EcmF3KCkpCi0gICAgICAgIGhyID0gcGxhdGZvcm1Db250ZXh0LT5FbmREcmF3KCk7
CisgICAgaWYgKHRlbXBvcmFyeURyYXcpCisgICAgICAgIGNvbnRleHQuZW5kRHJhdygpOwogICAg
IGVsc2UKICAgICAgICAgaHIgPSBwbGF0Zm9ybUNvbnRleHQtPkZsdXNoKCk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0
MkQuY3BwCShyZXZpc2lvbiAyMDc2ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vUGF0aERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsOCArNzAsNiBA
QAogCiBQYXRoOjp+UGF0aCgpCiB7Ci0gICAgaWYgKG1fcGF0aCkKLSAgICAgICAgbV9wYXRoLT5S
ZWxlYXNlKCk7CiB9CiAKIFBsYXRmb3JtUGF0aFB0ciBQYXRoOjplbnN1cmVQbGF0Zm9ybVBhdGgo
KQpAQCAtODMsNyArODEsNyBAQAogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
Ci0gICAgcmV0dXJuIG1fcGF0aDsKKyAgICByZXR1cm4gbV9wYXRoLmdldCgpOwogfQogCiB2b2lk
IFBhdGg6OmFwcGVuZEdlb21ldHJ5KElEMkQxR2VvbWV0cnkqIGdlb21ldHJ5KQpAQCAtMTAxLDcg
Kzk5LDcgQEAKIAogICAgIGF1dG8gZmlsbE1vZGUgPSBtX3BhdGggPyBtX3BhdGgtPkdldEZpbGxN
b2RlKCkgOiBEMkQxX0ZJTExfTU9ERV9XSU5ESU5HOwogCi0gICAgQ09NUHRyPElEMkQxR2VvbWV0
cnlHcm91cD4gcHJvdGVjdGVkUGF0aCA9IGFkb3B0Q09NKG1fcGF0aCk7CisgICAgQ09NUHRyPElE
MkQxR2VvbWV0cnlHcm91cD4gcHJvdGVjdGVkUGF0aCA9IG1fcGF0aDsKICAgICBtX3BhdGggPSBu
dWxscHRyOwogCiAgICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9y
eSgpLT5DcmVhdGVHZW9tZXRyeUdyb3VwKGZpbGxNb2RlLCBnZW9tZXRyaWVzLmRhdGEoKSwgZ2Vv
bWV0cmllcy5zaXplKCksICZtX3BhdGgpOwpAQCAtMTYyLDEzICsxNjAsNyBAQAogCiBQYXRoJiBQ
YXRoOjpvcGVyYXRvcj0oY29uc3QgUGF0aCYgb3RoZXIpCiB7Ci0gICAgaWYgKG1fcGF0aCkKLSAg
ICAgICAgbV9wYXRoLT5SZWxlYXNlKCk7Ci0KICAgICBtX3BhdGggPSBvdGhlci5tX3BhdGg7Ci0g
ICAgaWYgKG1fcGF0aCkKLSAgICAgICAgbV9wYXRoLT5BZGRSZWYoKTsKLQogICAgIG1fYWN0aXZl
UGF0aCA9IG90aGVyLm1fYWN0aXZlUGF0aDsKICAgICBtX2FjdGl2ZVBhdGhHZW9tZXRyeSA9IG90
aGVyLm1fYWN0aXZlUGF0aEdlb21ldHJ5OwogCkBAIC0xNzcsOCArMTY5LDYgQEAKIAogSFJFU1VM
VCBQYXRoOjppbml0aWFsaXplUGF0aFN0YXRlKCkKIHsKLSAgICBpZiAobV9wYXRoKQotICAgICAg
ICBtX3BhdGgtPlJlbGVhc2UoKTsKICAgICBtX3BhdGggPSBudWxscHRyOwogICAgIG1fYWN0aXZl
UGF0aCA9IG51bGxwdHI7CiAgICAgbV9hY3RpdmVQYXRoR2VvbWV0cnkgPSBudWxscHRyOwpAQCAt
MjU3LDcgKzI0Nyw3IEBACiAKICAgICBjb25zdCBEMkQxX01BVFJJWF8zWDJfRiYgZDJkVHJhbnNm
b3JtID0gc3RhdGljX2Nhc3Q8Y29uc3QgRDJEMV9NQVRSSVhfM1gyX0Y+KHRyYW5zZm9ybSk7CiAg
ICAgQ09NUHRyPElEMkQxVHJhbnNmb3JtZWRHZW9tZXRyeT4gdHJhbnNmb3JtZWRQYXRoOwotICAg
IGlmICghU1VDQ0VFREVEKEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVU
cmFuc2Zvcm1lZEdlb21ldHJ5KG1fcGF0aCwgZDJkVHJhbnNmb3JtLCAmdHJhbnNmb3JtZWRQYXRo
KSkpCisgICAgaWYgKCFTVUNDRUVERUQoR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCkt
PkNyZWF0ZVRyYW5zZm9ybWVkR2VvbWV0cnkobV9wYXRoLmdldCgpLCBkMmRUcmFuc2Zvcm0sICZ0
cmFuc2Zvcm1lZFBhdGgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVmVjdG9yPElEMkQxR2Vv
bWV0cnkqPiBnZW9tZXRyaWVzOwpAQCAtMjcxLDcgKzI2MSw2IEBACiAKICAgICBhdXRvIGZpbGxN
b2RlID0gbV9wYXRoLT5HZXRGaWxsTW9kZSgpOwogCi0gICAgbV9wYXRoLT5SZWxlYXNlKCk7CiAg
ICAgbV9wYXRoID0gbnVsbHB0cjsKIAogICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6
OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlR2VvbWV0cnlHcm91cChmaWxsTW9kZSwgZ2VvbWV0cmll
cy5kYXRhKCksIGdlb21ldHJpZXMuc2l6ZSgpLCAmbV9wYXRoKTsKQEAgLTQ3Niw3ICs0NjUsNyBA
QAogdm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcikKIHsKICAgICBDT01Q
dHI8SUQyRDFFbGxpcHNlR2VvbWV0cnk+IGVsbGlwc2U7Ci0gICAgSFJFU1VMVCBociA9IEdyYXBo
aWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVFbGxpcHNlR2VvbWV0cnkoRDJEMTo6
RWxsaXBzZShEMkQxOjpQb2ludDJGKHIuY2VudGVyKCkueCgpLCByLmNlbnRlcigpLnkoKSksIHIu
d2lkdGgoKSwgci5oZWlnaHQoKSksICZlbGxpcHNlKTsKKyAgICBIUkVTVUxUIGhyID0gR3JhcGhp
Y3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUVsbGlwc2VHZW9tZXRyeShEMkQxOjpF
bGxpcHNlKHIuY2VudGVyKCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSksICZlbGxpcHNlKTsKICAg
ICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKICAgICBhcHBlbmRHZW9tZXRyeShlbGxp
cHNlLmdldCgpKTsKIH0KQEAgLTQ5OCw5ICs0ODcsNiBAQAogICAgIGlmIChpc051bGwoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fcGF0aCkKLSAgICAgICAgbV9wYXRoLT5SZWxlYXNl
KCk7Ci0KICAgICBtX3BhdGggPSBudWxscHRyOwogICAgIG1fYWN0aXZlUGF0aCA9IG51bGxwdHI7
CiAgICAgbV9hY3RpdmVQYXRoR2VvbWV0cnkgPSBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCShyZXZpc2lvbiAy
MDc2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTQsNyArNDE0LDExIEBACiAgICAgICAgIG1faGF2ZUZp
bHRlckVmZmVjdCA9IGZhbHNlOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAor
CisjaWYgVVNFKERJUkVDVDJEKQorICAgIHNvdXJjZUdyYXBoaWNzQ29udGV4dC0+dGVtcG9yYXJ5
QmVnaW5EcmF3SWZOZWVkZWQoKTsKKyNlbmRpZgorCiAgICAgLy8gVHJhbnNsYXRlIHRoZSBjb250
ZXh0IHNvIHRoYXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBsYXllciBpcyBjYXB0dXJlZCBpbiB0aGUg
b2Zmc2NyZWVuIG1lbW9yeSBidWZmZXIuCiAgICAgc291cmNlR3JhcGhpY3NDb250ZXh0LT5zYXZl
KCk7CiAgICAgc291cmNlR3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoLW1fcGFpbnRPZmZzZXQu
eCgpLCAtbV9wYWludE9mZnNldC55KCkpOwpAQCAtNDM3LDYgKzQ0MSwxMCBAQAogICAgIExheW91
dFJlY3QgZGVzdFJlY3QgPSBmaWx0ZXItPm91dHB1dFJlY3QoKTsKICAgICBkZXN0UmVjdC5tb3Zl
KG1fcGFpbnRPZmZzZXQueCgpLCBtX3BhaW50T2Zmc2V0LnkoKSk7CiAKKyNpZiBVU0UoRElSRUNU
MkQpCisgICAgZmlsdGVyLT5pbnB1dENvbnRleHQoKS0+ZW5kRHJhdygpOworI2VuZGlmCisKICAg
ICBpZiAoSW1hZ2VCdWZmZXIqIG91dHB1dEJ1ZmZlciA9IGZpbHRlci0+b3V0cHV0KCkpCiAgICAg
ICAgIGRlc3RpbmF0aW9uQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKm91dHB1dEJ1ZmZlciwgc25h
cFJlY3RUb0RldmljZVBpeGVscyhkZXN0UmVjdCwgbV9yZW5kZXJMYXllci0+cmVuZGVyZXIoKS5k
b2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpKTsKIApJbmRleDogU291cmNlL1dlYktpdC93
aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5j
cHAJKHJldmlzaW9uIDIwNzY4MCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjQsNiArMTY0LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1dpbmRv
d01lc3NhZ2VCcm9hZGNhc3Rlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2luZG93c1RvdWNoLmg+
CiAjaW5jbHVkZSA8YmluZGluZ3MvU2NyaXB0VmFsdWUuaD4KKyNpbmNsdWRlIDxjb21kZWYuaD4K
ICNpbmNsdWRlIDxkMmQxLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRl
IDx3dGYvUkFNU2l6ZS5oPgpAQCAtMTA2Myw3ICsxMDY0LDcgQEAKICAgICAvLyBDcmVhdGUgYSBE
aXJlY3QyRCByZW5kZXIgdGFyZ2V0LgogICAgIGF1dG8gcmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9
IEQyRDE6OlJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsKICAgICByZW5kZXJUYXJnZXRQcm9wZXJ0
aWVzLnVzYWdlID0gRDJEMV9SRU5ERVJfVEFSR0VUX1VTQUdFX0dESV9DT01QQVRJQkxFOwotICAg
IGF1dG8gaHduZFJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBEMkQxOjpId25kUmVuZGVyVGFyZ2V0
UHJvcGVydGllcyhtX3ZpZXdXaW5kb3csIG5ld1NpemUpOworICAgIGF1dG8gaHduZFJlbmRlclRh
cmdldFByb3BlcnRpZXMgPSBEMkQxOjpId25kUmVuZGVyVGFyZ2V0UHJvcGVydGllcyhtX3ZpZXdX
aW5kb3csIG5ld1NpemUsIEQyRDFfUFJFU0VOVF9PUFRJT05TX0lNTUVESUFURUxZKTsKICAgICBI
UkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUh3bmRS
ZW5kZXJUYXJnZXQoJnJlbmRlclRhcmdldFByb3BlcnRpZXMsICZod25kUmVuZGVyVGFyZ2V0UHJv
cGVydGllcywgJm1fcmVuZGVyVGFyZ2V0KTsKICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAj
ZW5kaWYKQEAgLTEyMzYsNyArMTIzNyw3IEBACiAKICAgICAgICAgYXV0byBwaXhlbFNpemUgPSBE
MkQxOjpTaXplVShjbGllbnRSZWN0LndpZHRoKCksIGNsaWVudFJlY3QuaGVpZ2h0KCkpOwogCi0g
ICAgICAgIGF1dG8gaHduZFJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBEMkQxOjpId25kUmVuZGVy
VGFyZ2V0UHJvcGVydGllcyhtX3ZpZXdXaW5kb3csIHBpeGVsU2l6ZSk7CisgICAgICAgIGF1dG8g
aHduZFJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBEMkQxOjpId25kUmVuZGVyVGFyZ2V0UHJvcGVy
dGllcyhtX3ZpZXdXaW5kb3csIHBpeGVsU2l6ZSwgRDJEMV9QUkVTRU5UX09QVElPTlNfSU1NRURJ
QVRFTFkpOwogICAgICAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0
b3J5KCktPkNyZWF0ZUh3bmRSZW5kZXJUYXJnZXQoJnJlbmRlclRhcmdldFByb3BlcnRpZXMsICZo
d25kUmVuZGVyVGFyZ2V0UHJvcGVydGllcywgJm1fcmVuZGVyVGFyZ2V0KTsKICAgICAgICAgaWYg
KCFTVUNDRUVERUQoaHIpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTI3Myw4ICsxMjc0LDEy
IEBACiAgICAgfQogCiAgICAgSFJFU1VMVCBociA9IG1fcmVuZGVyVGFyZ2V0LT5FbmREcmF3KCk7
Ci0gICAgLy8gRklYTUU6IFJlY29nbml6ZSBhbmQgcmVjb3ZlciBmcm9tIGVycm9yIHN0YXRlOgot
ICAgIFVOVVNFRF9QQVJBTShocik7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKSB7CisgICAgICAg
IF9jb21fZXJyb3IgZXJyb3IoaHIpOworICAgICAgICBPdXRwdXREZWJ1Z1N0cmluZyhMIlJlbmRl
cmluZyBGYWlsdXJlOiAiKTsKKyAgICAgICAgT3V0cHV0RGVidWdTdHJpbmcoZXJyb3IuRXJyb3JN
ZXNzYWdlKCkpOworICAgICAgICBPdXRwdXREZWJ1Z1N0cmluZyhMIlxuIik7CisgICAgfQogCiAg
ICAgOjpWYWxpZGF0ZVJlY3QobV92aWV3V2luZG93LCAmY2xpZW50UmVjdCk7CiAjZWxzZQpAQCAt
MzE1MSw2ICszMTU2LDcgQEAKICAgICBtX3BhZ2UtPnNldERldmljZVNjYWxlRmFjdG9yKGRldmlj
ZVNjYWxlRmFjdG9yKCkpOwogCiAgICAgc2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKFRSVUUp
OworCiAgICAgcmV0dXJuIGhyOwogfQogCkluZGV4OiBTb3VyY2UvY21ha2UvT3B0aW9uc0FwcGxl
V2luLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9jbWFrZS9PcHRpb25zQXBwbGVXaW4uY21h
a2UJKHJldmlzaW9uIDIwNzY4MCkKKysrIFNvdXJjZS9jbWFrZS9PcHRpb25zQXBwbGVXaW4uY21h
a2UJKHdvcmtpbmcgY29weSkKQEAgLTYsNyArNiw3IEBACiBzZXQoVVNFX0lDVV9VTklDT0RFIDEp
CiAKICMgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSB0byB0cnkgdGhlIERpcmVjdDJEIGJh
Y2tlbmQuCi0jIHNldChVU0VfRElSRUNUMkQgMSkKK3NldChVU0VfRElSRUNUMkQgMSkKIAogaWYg
KCR7VVNFX0RJUkVDVDJEfSkKICAgICBhZGRfZGVmaW5pdGlvbnMoLURVU0VfRElSRUNUMkQ9MSkK
SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIwNzY4MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ5IEBACisyMDE2LTEwLTE2ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNv
bnkuY29tPgorCisgICAgICAgIFtDTWFrZV0gQ01ha2UgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZGVw
IGZpbGVzIGZvciBpbXBsaWNpdCBkZXBlbmRlbmN5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE0MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBDcmVhdGVkIGEgUGVybCBzY3JpcHQgdG8gZ2VuZXJhdGUg
YWxsIElETCBiaW5kaW5ncyBmb3IgQ01ha2UuCisgICAgICAgIFRoaXMgc2NyaXB0IGNhbiByZWdl
bmVyYXRlIG91dGRhdGVkIGJpbmRpbmdzIGJ5IGJhc2VkIG9uIHRoZQorICAgICAgICBzdXBwbGVt
ZW50YWwgZGVwZW5kZW5jeSBhbmQgZGVwIGZpbGVzIGNyZWF0ZWQgYnkKKyAgICAgICAgJy0td3Jp
dGUtZGVwZW5kZW5jaWVzJyBzd2l0Y2ggb2YgZ2VuZXJhdGUtYmluZGluZ3MucGwuCisKKyAgICAg
ICAgYWRkX2N1c3RvbV90YXJnZXQgaXMgdXNlZCB0byBpbnZva2UgdGhlIHNjcmlwdCBpbnN0ZWFk
IG9mCisgICAgICAgIGFkZF9jdXN0b21fY29tbWFuZCBiZWNhdXNlIE5pbmphIGRlbGV0ZXMgYWxs
IG91dHB1dCBmaWxlcyBiZWZvcmUKKyAgICAgICAgZXhlY3V0aW5nIHRoZSBjb21tYW5kIGluIGNh
c2Ugb2YgYWRkX2N1c3RvbV9jb21tYW5kLgorCisgICAgICAgIFVTRVNfVEVSTUlOQUwgb3B0aW9u
IG9mIGFkZF9jdXN0b21fdGFyZ2V0IGhhcyB0d28gZWZmZWN0czoKKyAgICAgICAgMSkgTm90IGJ1
ZmZlcmluZyBvdXRwdXQgb2YgdGhlIGNvbW1hbmQKKyAgICAgICAgMikgSW52b2tpbmcgdGhlIGNv
bW1hbmQgaW4gdGhlIHNwZWNpYWwgTmluamEgcG9vbCB3aGljaCBpbmhpYml0cyBwYXJhbGxlbCBi
dWlsZAorICAgICAgICBPbmUgbmVlZHMgdG8gdXNlIENNYWtlIDMuMiBvciBsYXRlciB0byBlbmFi
bGUgdGhpcyBmZWF0dXJlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvQ01ha2VMaXN0cy50
eHQ6IFNwZWNpZmllZCBhIHRhcmdldCBuYW1lIGZvcgorICAgICAgICBHRU5FUkFURV9CSU5ESU5H
Uy4gQWRkZWQgZGVwZW5kZW5jeSBmb3IgdGhlIHRhcmdldC4KKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL0NNYWtlTGlzdHMudHh0OiBEaXR0by4KKworMjAxNi0wOS0xMyAgQnJlbnQgRnVsZ2hh
bSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBbV2luXVtEaXJlY3QyRF0gUHJvdmlk
ZSBEaXJlY3QyRC1iYXNlZCBnZW9tZXRyeSBhbmQgdHJhbnNmb3JtIGNhc3Qgb3BlcmF0aW9ucwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxODE4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNldmVy
YWwgbmV3IHRlc3Qgc3VpdGVzIGZvciB0aGUgdmFyaW91cyBnZW9tZXRyaWMgcHJpbWl0aXZlcyBp
biBXZWJDb3JlLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdpbi5jbWFrZTog
QWRkIG5ldyBmaWxlcyBmb3IgdGVzdCBjYXNlcy4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0FmZmluZVRyYW5zZm9ybS5jcHA6IEFkZGVkLgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9GbG9hdFBvaW50LmNwcDogQWRk
ZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Zsb2F0UmVjdC5jcHA6
IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9GbG9hdFNpemUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSW50UG9p
bnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSW50
UmVjdC5jcHA6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9J
bnRTaXplLmNwcDogQWRkZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcDogQWRkIHNvbWUgbmV3CisgICAgICAgIFdpbmRvd3Mt
Zm9jdXNlZCB0ZXN0IGNhc2VzLgorCiAyMDE2LTEwLTIxICBDc2FiYSBPc3p0cm9nb27DoWMgIDxv
c3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0VGTF0gUkVHUkVTU0lPTihyMjA3NjE2KTogQnVp
bGQgaXMgYnJva2VuIGR1ZSB0byBtaXNzaW5nIGxpYmdlb2NsdWUtZGV2IHBhY2thZ2UKSW5kZXg6
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XaW4uY21ha2UKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdpbi5jbWFrZQkocmV2aXNpb24gMjA3NjgwKQorKysg
VG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdpbi5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsOCBAQAogc2V0KHRlc3Rfd2ViY29yZV9MSUJSQVJJRVMKICAgICBDcnlwdDMyCiAg
ICAgRDJkMQorICAgIER3cml0ZQorICAgIGR4Z3VpZAogICAgIElwaGxwYXBpCiAgICAgUHNhcGkK
ICAgICBTaGx3YXBpCkBAIC0zNSw2ICszNyw3IEBACiAgICAgV2ViQ29yZSR7REVCVUdfU1VGRklY
fQogICAgIFdlYkNvcmVEZXJpdmVkU291cmNlcyR7REVCVUdfU1VGRklYfQogICAgIFdlYktpdCR7
REVCVUdfU1VGRklYfQorICAgIFdpbmRvd3NDb2RlY3MKICAgICBndGVzdAogKQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292650</attachid>
            <date>2016-10-24 14:09:19 -0700</date>
            <delta_ts>2016-10-25 13:25:44 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>filter.patch</filename>
            <type>text/plain</type>
            <size>25024</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzc2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBACisyMDE2LTEwLTI0ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBJ
bXByb3ZlIHN1cHBvcnQgZm9yIGZpbHRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2Mzg5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyB1bnRpbCBEMkQgYmFja2VuZCBpcyB3b3Jr
aW5nLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oOgorICAgICAgICAoV2ViQ29yZTo6UGF0
aDo6cGxhdGZvcm1QYXRoKTogVXNlIGEgc21hcnQgcG9pbnRlciBmb3IgRDJEIHBhdGggdHlwZXMu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmZpbGwpOiBVc2UgbmV3ICd0ZW1wb3JhcnlCZWdp
bkRyYXdJZk5lZWRlZCcgc28gd2UgaGF2ZQorICAgICAgICBjb25zaXN0ZW50IEJlZ2luL0VuZCBE
cmF3IHBhaXJzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHREaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN5c3Rl
bUZhY3RvcnkpOiBBY3RpdmF0ZSB1c2VmdWwgRDJEIGxvZ2dpbmcgd2hlbiBidWlsZGluZworICAg
ICAgICBpbiBEZWJ1ZyBtb2RlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpw
bGF0Zm9ybUluaXQpOiBXaGVuIGNvbnN0cnVjdGluZyBmcm9tIGEgR0RJIEhEQywgY3JlYXRlCisg
ICAgICAgIGEgR0RJLWNvbXBhdGlibGUgRDJEIHJlbmRlciB0YXJnZXQgc28gYWxsIGRyYXdpbmcg
b3BlcmF0aW9ucyBnbyB0byB0aGUgc2FtZSBwbGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KTogV2hlbgorICAgICAgICBpbml0aWFsaXppbmcgZnJvbSBhIEQyRCBkZXZpY2UsIGNyZWF0ZSBh
IHNpbmdsZSBHREkgSW50ZXJvcCBvYmplY3QgdG8gdXNlIGZvciB0aGUKKyAgICAgICAgbGlmZXRp
bWUgb2YgdGhlIEdyYXBoaWNzQ29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSk6IEFk
ZCBhbgorICAgICAgICBhc3NlcnRpb24gdGhhdCB3ZSBhcmUgaW4gYSB2YWxpZCBzdGF0ZSB3aGVu
IGNsZWFuaW5nIHVwIHRoZSBncmFwaGljcyBjb250ZXh0LgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpoZGNGb3JSZW5kZXJUYXJnZXQpOiBDb252ZW5p
ZW5jZSBtZXRob2QKKyAgICAgICAgZm9yIGdldHRpbmcgYSBHREkgZGV2aWNlIGNvbnRleHQgZm9y
IHRoZSBEMkQgZGV2aWNlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlOjpyZWxlYXNlSGRjRm9yUmVuZGVyVGFyZ2V0KTogUmVsZWFzZSBtZXRob2QKKyAg
ICAgICAgZm9yIHRoZSBIREMgaGFuZGxlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpoZGNGb3JSZW5kZXJUYXJnZXQpOiBFeHBvc2UgaW50ZXJuYWwgbWV0aG9kIHRvIEdyYXBo
aWNzQ29udGV4dAorICAgICAgICBjbGllbnRzLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpyZWxlYXNlSGRjRm9yUmVuZGVyVGFyZ2V0KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNsaXApOiBDbGlwcGluZyBjYW4g
b25seSBoYXBwZW4gaW4gYSBEcmF3IG9wZXJhdGlvbi4KKyAgICAgICAgT3BlbiBhIG5ldyBCZWdp
bkRyYXcgaWYgYXNrZWQgdG8gQ2xpcC4gVGhlIEJlZ2luIG11c3Qgc3RheSBhY3RpdmUgd2hlbiB0
aGlzIG1ldGhvZCByZXR1cm5zLAorICAgICAgICBhcyB0aGUgQ2xpcCBsYXllciBpcyBvbmx5IHZh
bGlkIGR1cmluZyBhIERyYXcgb3BlcmF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOjpiZWdpbkRyYXcpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kRHJhdyk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0ZW1wb3JhcnlCZWdpbkRyYXdJZk5lZWRl
ZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjplbmREcmF3KTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdXaXRob3V0U2hh
ZG93KTogUmV2aXNlIHRvIHVzZSBuZXcgbWV0aG9kLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGly
ZWN0MkQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKTogVXNlIG5ldyBtZXRob2RzLCBh
bmQgY2FjaGVkIEdESSBJbnRlcm9wIG9iamVjdC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkcmF3TmF0
aXZlSW1hZ2UpOiBVc2UgbmV3ICd0ZW1wb3JhcnlCZWdpbkRyYXdJZk5lZWRlZCcgbWV0aG9kLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGF0aDo6flBhdGgpOiBSZXZpc2UgZm9yIHNtYXJ0IHBvaW50ZXIgdXNlLgor
ICAgICAgICAoV2ViQ29yZTo6UGF0aDo6ZW5zdXJlUGxhdGZvcm1QYXRoKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpQYXRoOjphcHBlbmRHZW9tZXRyeSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6UGF0aDo6b3BlcmF0b3I9KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpp
bml0aWFsaXplUGF0aFN0YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjp0cmFu
c2Zvcm0pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZEVsbGlwc2UpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmNsZWFyKTogRGl0dG8uCisgICAgICAgICogcmVu
ZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdFJlbmRlcmVySGVscGVyOjpiZWdpbkZpbHRlckVmZmVjdCk6IENhbGwgIkJlZ2luRHJh
dyIgb24gdGhlCisgICAgICAgIEdyYXBoaWNzQ29udGV4dCBpZiB1c2luZyBEMkQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcjo6YXBwbHlGaWx0ZXJFZmZlY3Qp
OiBDYWxsICJlbmREcmF3IiBvbiB0aGUgc291cmNlCisgICAgICAgIGltYWdlIEdyYXBoaWNzQ29u
dGV4dCBpZiB1c2luZyBEMkQgc28gdGhhdCBpdCBpcyBpbiBhICJmaW5pc2hlZCIgc3RhdGUgYmVm
b3JlIGRyYXdpbmcKKyAgICAgICAgaXRzIGNvbnRlbnRzIHRvIHRoZSBkZXN0aW5hdGlvbiBncmFw
aGljcyBjb250ZXh0LgorCiAyMDE2LTEwLTI0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KIAogICAgICAgICBUcnkgdG8gZml4IFdpbmRvd3MgYnVpbGQuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2aXNp
b24gMjA3NjgxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1MiwxNCArNTUyLDE5IEBAIHB1YmxpYzoKICAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSUQyRDFGYWN0b3J5KiBzeXN0ZW1GYWN0b3J5KCk7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIElEMkQxUmVuZGVyVGFyZ2V0KiBkZWZhdWx0UmVuZGVy
VGFyZ2V0KCk7CiAKKyAgICBib29sIHRlbXBvcmFyeUJlZ2luRHJhd0lmTmVlZGVkKCk7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXREaWRCZWdpbkRyYXcoYm9vbCk7CiAgICAgV0VCQ09SRV9F
WFBPUlQgYm9vbCBkaWRCZWdpbkRyYXcoKSBjb25zdDsKICAgICBEMkQxX0NPTE9SX0YgY29sb3JX
aXRoR2xvYmFsQWxwaGEoY29uc3QgQ29sb3ImKSBjb25zdDsKKyAgICBIREMgaGRjRm9yUmVuZGVy
VGFyZ2V0KCk7CisgICAgdm9pZCByZWxlYXNlSGRjRm9yUmVuZGVyVGFyZ2V0KCk7CisgICAgdm9p
ZCBlbmREcmF3KCk7CiAKICAgICBJRDJEMUJydXNoKiBzb2xpZFN0cm9rZUJydXNoKCkgY29uc3Q7
CiAgICAgSUQyRDFCcnVzaCogc29saWRGaWxsQnJ1c2goKSBjb25zdDsKICAgICBJRDJEMUJydXNo
KiBwYXR0ZXJuU3Ryb2tlQnJ1c2goKSBjb25zdDsKICAgICBJRDJEMUJydXNoKiBwYXR0ZXJuRmls
bEJydXNoKCkgY29uc3Q7CisgICAgSUQyRDFTdHJva2VTdHlsZSogcGxhdGZvcm1TdHJva2VTdHls
ZSgpIGNvbnN0OwogCiAgICAgSUQyRDFTb2xpZENvbG9yQnJ1c2gqIGJydXNoV2l0aENvbG9yKGNv
bnN0IENvbG9yJik7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QYXRoLmgJKHJldmlzaW9uIDIwNzY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDcgKzE2NSwxMSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICAgICAgLy8gVG8ga2VlcCBQYXRoKCkgY2hlYXAsIGl0IGRvZXMg
bm90IGFsbG9jYXRlIGEgUGxhdGZvcm1QYXRoIGltbWVkaWF0ZWx5CiAgICAgICAgIC8vIG1lYW5p
bmcgUGF0aDo6cGxhdGZvcm1QYXRoKCkgY2FuIHJldHVybiBudWxsLgorI2lmIFVTRShESVJFQ1Qy
RCkKKyAgICAgICAgUGxhdGZvcm1QYXRoUHRyIHBsYXRmb3JtUGF0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGF0aC5nZXQoKTsgfQorI2Vsc2UKICAgICAgICAgUGxhdGZvcm1QYXRoUHRyIHBsYXRmb3Jt
UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQorI2VuZGlmCiAgICAgICAgIC8vIGVuc3Vy
ZVBsYXRmb3JtUGF0aCgpIHdpbGwgYWxsb2NhdGUgYSBQbGF0Zm9ybVBhdGggaWYgaXQgaGFzIG5v
dCB5ZXQgYmVlbiBhbmQgd2lsbCBuZXZlciByZXR1cm4gbnVsbC4KICAgICAgICAgV0VCQ09SRV9F
WFBPUlQgUGxhdGZvcm1QYXRoUHRyIGVuc3VyZVBsYXRmb3JtUGF0aCgpOwogCkBAIC0xOTksOCAr
MjAzLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAgICAgcHJpdmF0ZToKKyNp
ZiAhVVNFKERJUkVDVDJEKQogICAgICAgICBQbGF0Zm9ybVBhdGhQdHIgbV9wYXRoIHsgbnVsbHB0
ciB9OwotI2lmIFVTRShESVJFQ1QyRCkKKyNlbHNlCisgICAgICAgIENPTVB0cjxJRDJEMUdlb21l
dHJ5R3JvdXA+IG1fcGF0aDsKICAgICAgICAgQ09NUHRyPElEMkQxUGF0aEdlb21ldHJ5PiBtX2Fj
dGl2ZVBhdGhHZW9tZXRyeTsKICAgICAgICAgQ09NUHRyPElEMkQxR2VvbWV0cnlTaW5rPiBtX2Fj
dGl2ZVBhdGg7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDIwNzY4
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVj
dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDE5ICsxMjAsMTUgQEAgdm9pZCBHcmFkaWVu
dDo6ZmlsbChHcmFwaGljc0NvbnRleHQqIGNvbgogICAgIGlmICghbV9jYWNoZWRIYXNoIHx8ICFt
X2dyYWRpZW50KQogICAgICAgICBnZW5lcmF0ZUdyYWRpZW50KGQyZENvbnRleHQpOwogCi0gICAg
aWYgKCFjb250ZXh0LT5kaWRCZWdpbkRyYXcoKSkKLSAgICAgICAgZDJkQ29udGV4dC0+QmVnaW5E
cmF3KCk7CisgICAgYm9vbCB0ZW1wb3JhcnlEcmF3ID0gY29udGV4dC0+dGVtcG9yYXJ5QmVnaW5E
cmF3SWZOZWVkZWQoKTsKIAogICAgIGQyZENvbnRleHQtPlNldFRhZ3MoR1JBRElFTlRfRFJBV0lO
RywgX19MSU5FX18pOwogCiAgICAgY29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7CiAg
ICAgZDJkQ29udGV4dC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgbV9ncmFkaWVudCk7CiAKLSAg
ICBpZiAoIWNvbnRleHQtPmRpZEJlZ2luRHJhdygpKSB7Ci0gICAgICAgIEQyRDFfVEFHIGZpcnN0
LCBzZWNvbmQ7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBkMmRDb250ZXh0LT5FbmREcmF3KCZmaXJz
dCwgJnNlY29uZCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAg
IH0KKyAgICBpZiAodGVtcG9yYXJ5RHJhdykKKyAgICAgICAgY29udGV4dC0+ZW5kRHJhdygpOwog
CiAgICAgaWYgKG5lZWRTY2FsaW5nKQogICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDIwNzY4MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3Qy
RC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDEzIEBAIElEMkQxRmFjdG9yeSogR3Jh
cGhpY3NDb250ZXh0OjpzeXN0ZW1GYWMKIHsKICAgICBzdGF0aWMgSUQyRDFGYWN0b3J5KiBkaXJl
Y3QyREZhY3RvcnkgPSBudWxscHRyOwogICAgIGlmICghZGlyZWN0MkRGYWN0b3J5KSB7CisjaWZu
ZGVmIE5ERUJVRworICAgICAgICBEMkQxX0ZBQ1RPUllfT1BUSU9OUyBvcHRpb25zID0geyB9Owor
ICAgICAgICBvcHRpb25zLmRlYnVnTGV2ZWwgPSBEMkQxX0RFQlVHX0xFVkVMX0lORk9STUFUSU9O
OworICAgICAgICBIUkVTVUxUIGhyID0gRDJEMUNyZWF0ZUZhY3RvcnkoRDJEMV9GQUNUT1JZX1RZ
UEVfTVVMVElfVEhSRUFERUQsIG9wdGlvbnMsICZkaXJlY3QyREZhY3RvcnkpOworI2Vsc2UKICAg
ICAgICAgSFJFU1VMVCBociA9IEQyRDFDcmVhdGVGYWN0b3J5KEQyRDFfRkFDVE9SWV9UWVBFX01V
TFRJX1RIUkVBREVELCAmZGlyZWN0MkRGYWN0b3J5KTsKKyNlbmRpZgogICAgICAgICBSRUxFQVNF
X0FTU0VSVChTVUNDRUVERUQoaHIpKTsKICAgICB9CiAKQEAgLTEwOCw3ICsxMTQsMjMgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChIREMgaAogICAgIGlmICghaGRjKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBDT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IHJlbmRlclRhcmdl
dDsKKyAgICBIQklUTUFQIGJpdG1hcCA9IHN0YXRpY19jYXN0PEhCSVRNQVA+KEdldEN1cnJlbnRP
YmplY3QoaGRjLCBPQkpfQklUTUFQKSk7CisKKyAgICBESUJQaXhlbERhdGEgcGl4ZWxEYXRhKGJp
dG1hcCk7CisKKyAgICBhdXRvIHRhcmdldFByb3BlcnRpZXMgPSBEMkQxOjpSZW5kZXJUYXJnZXRQ
cm9wZXJ0aWVzKCk7CisgICAgdGFyZ2V0UHJvcGVydGllcy5waXhlbEZvcm1hdCA9IEQyRDE6OlBp
eGVsRm9ybWF0KERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNLCBEMkQxX0FMUEhBX01PREVfSUdO
T1JFKTsKKworICAgIENPTVB0cjxJRDJEMURDUmVuZGVyVGFyZ2V0PiByZW5kZXJUYXJnZXQ7Cisg
ICAgSFJFU1VMVCBociA9IHN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRENSZW5kZXJUYXJnZXQoJnRh
cmdldFByb3BlcnRpZXMsICZyZW5kZXJUYXJnZXQpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgUkVDVCBjbGllbnRSZWN0ID0gSW50UmVjdChJbnRQb2lu
dCgpLCBwaXhlbERhdGEuc2l6ZSgpKTsKKyAgICBociA9IHJlbmRlclRhcmdldC0+QmluZERDKGhk
YywgJmNsaWVudFJlY3QpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShyZW5k
ZXJUYXJnZXQuZ2V0KCkpOwogICAgIG1fZGF0YS0+bV9oZGMgPSBoZGM7CiAgICAgLy8gTWFrZSBz
dXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0YXRlLgpAQCAtMjU3LDYg
KzI3OSwyNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JEb2N1bWVuCiB7CiB9
CiAKK0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCisgICAgOiBtX3JlbmRl
clRhcmdldChyZW5kZXJUYXJnZXQpCit7CisgICAgaWYgKCFtX3JlbmRlclRhcmdldCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgSFJFU1VMVCBociA9IG1fcmVuZGVyVGFyZ2V0LT5RdWVyeUludGVy
ZmFjZShfX3V1aWRvZihJRDJEMUdkaUludGVyb3BSZW5kZXJUYXJnZXQpLCAodm9pZCoqKSZtX2dk
aVJlbmRlclRhcmdldCk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Cit9CisK
K0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZSgpCit7CisgICAgaWYgKCFtX3JlbmRlclRhcmdldCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQVNTRVJUKCFtX2JlZ2luRHJhd0NvdW50KTsKK30KKwogQ09NUHRyPElEMkQxU29saWRD
b2xvckJydXNoPiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmJydXNoV2l0aENvbG9y
KGNvbnN0IEQyRDFfQ09MT1JfRiYgY29sb3IpCiB7CiAgICAgUkdCQTMyIGNvbG9yS2V5ID0gbWFr
ZVJHQkEzMkZyb21GbG9hdHMoY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSk7CkBA
IC0yODcsMTIgKzMyNyw1MSBAQCBJRDJEMVNvbGlkQ29sb3JCcnVzaCogR3JhcGhpY3NDb250ZXh0
OjpiCiAgICAgcmV0dXJuIG1fZGF0YS0+YnJ1c2hXaXRoQ29sb3IoY29sb3JXaXRoR2xvYmFsQWxw
aGEoY29sb3IpKS5nZXQoKTsKIH0KIAorSERDIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZTo6aGRjRm9yUmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBBU1NFUlQobV9kaWRCZWdpbkRyYXcpOwor
CisgICAgUkVMRUFTRV9BU1NFUlQobV9nZGlSZW5kZXJUYXJnZXQpOworCisgICAgSERDIGhkYyA9
IG51bGxwdHI7CisgICAgSFJFU1VMVCBociA9IG1fZ2RpUmVuZGVyVGFyZ2V0LT5HZXREQyhEMkQx
X0RDX0lOSVRJQUxJWkVfTU9ERV9DT1BZLCAmaGRjKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGhkYzsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnJlbGVhc2VIZGNGb3JSZW5kZXJUYXJnZXQo
KQoreworICAgIEFTU0VSVChtX2RpZEJlZ2luRHJhdyk7CisKKyAgICBSRUxFQVNFX0FTU0VSVCht
X2dkaVJlbmRlclRhcmdldCk7CisKKyAgICBIUkVTVUxUIGhyID0gbV9nZGlSZW5kZXJUYXJnZXQt
PlJlbGVhc2VEQyhudWxscHRyKTsKK30KKworSERDIEdyYXBoaWNzQ29udGV4dDo6aGRjRm9yUmVu
ZGVyVGFyZ2V0KCkKK3sKKyAgICByZXR1cm4gbV9kYXRhLT5oZGNGb3JSZW5kZXJUYXJnZXQoKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VIZGNGb3JSZW5kZXJUYXJnZXQoKQor
eworICAgIG1fZGF0YS0+cmVsZWFzZUhkY0ZvclJlbmRlclRhcmdldCgpOworfQorCiB2b2lkIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CiB7CisgICAgLy8gSW4gRDJELCB3ZSBjYW4gb25seSBjbGlwIGluIHRoZSBjb250ZXh0IG9mIGEg
J0JlZ2luRHJhdycsIGFuZCB0aGUgY2xpcCBjYW4KKyAgICAvLyBvbmx5IGxpdmUgYXMgbG9uZyBh
cyB0aGUgZHJhdyBpcyBoYXBwZW5pbmcuCisgICAgaWYgKCFtX2RpZEJlZ2luRHJhdykKKyAgICAg
ICAgYmVnaW5EcmF3KCk7CisKICAgICBpZiAobV9yZW5kZXJTdGF0ZXMuaXNFbXB0eSgpKQogICAg
ICAgICBzYXZlKCk7CiAKICAgICBtX3JlbmRlclRhcmdldC0+UHVzaEF4aXNBbGlnbmVkQ2xpcChy
ZWN0LCBEMkQxX0FOVElBTElBU19NT0RFX1BFUl9QUklNSVRJVkUpOworCiAgICAgbV9yZW5kZXJT
dGF0ZXMubGFzdCgpLm1fY2xpcHMuYXBwZW5kKEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZTo6QXhpc0FsaWduZWRDbGlwKTsKIH0KIApAQCAtMzAzLDYgKzM4MiwxMSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y2xpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlOjpjbGlwKElEMkQxR2VvbWV0cnkqIHBhdGgpCiB7CisgICAgLy8gSW4gRDJE
LCB3ZSBjYW4gb25seSBjbGlwIGluIHRoZSBjb250ZXh0IG9mIGEgJ0JlZ2luRHJhdycsIGFuZCB0
aGUgY2xpcCBjYW4KKyAgICAvLyBvbmx5IGxpdmUgYXMgbG9uZyBhcyB0aGUgZHJhdyBpcyBoYXBw
ZW5pbmcuCisgICAgaWYgKCFtX2RpZEJlZ2luRHJhdykKKyAgICAgICAgYmVnaW5EcmF3KCk7CisK
ICAgICBBU1NFUlQobV9yZW5kZXJTdGF0ZXMuc2l6ZSgpKTsKICAgICBpZiAoIW1fcmVuZGVyU3Rh
dGVzLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzM4LDYgKzQyMiwxOCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Zmx1CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VD
Q0VFREVEKGhyKSk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpi
ZWdpbkRyYXcoKQoreworICAgIEFTU0VSVChtX3JlbmRlclRhcmdldC5nZXQoKSk7CisgICAgaWYg
KG1fZGlkQmVnaW5EcmF3KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3JlbmRlclRhcmdldC0+
QmVnaW5EcmF3KCk7CisgICAgbV9kaWRCZWdpbkRyYXcgPSB0cnVlOworCisgICAgKyttX2JlZ2lu
RHJhd0NvdW50OworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5k
RHJhdygpCiB7CiAgICAgQVNTRVJUKG1fcmVuZGVyVGFyZ2V0LmdldCgpKTsKQEAgLTM0Niw2ICs0
NDIsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmVuZAogCiAgICAg
aWYgKCFTVUNDRUVERUQoaHIpKQogICAgICAgICBXVEZMb2dBbHdheXMoIkZhaWxlZCBpbiBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmVuZERyYXc6IGhyPSVsZCwgZmlyc3Q9JWxkLCBz
ZWNvbmQ9JWxkIiwgaHIsIGZpcnN0LCBzZWNvbmQpOworCisgICAgLS1tX2JlZ2luRHJhd0NvdW50
OworICAgIGlmICghbV9iZWdpbkRyYXdDb3VudCkKKyAgICAgICAgbV9kaWRCZWdpbkRyYXcgPSBm
YWxzZTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnJlc3RvcmUo
KQpAQCAtNDQyLDYgKzU0MiwyMCBAQCBJRDJEMUJydXNoKiBHcmFwaGljc0NvbnRleHQ6OnBhdHRl
cm5GaWxsCiAgICAgcmV0dXJuIG1fZGF0YS0+bV9wYXR0ZXJuRmlsbEJydXNoLmdldCgpOwogfQog
Citib29sIEdyYXBoaWNzQ29udGV4dDo6dGVtcG9yYXJ5QmVnaW5EcmF3SWZOZWVkZWQoKQorewor
ICAgIGlmIChtX2RhdGEtPm1fZGlkQmVnaW5EcmF3KQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBtX2RhdGEtPmJlZ2luRHJhdygpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZW5kRHJhdygpCit7CisgICAgbV9kYXRhLT5lbmREcmF3KCk7Cit9CisK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBi
bGVuZE1vZGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhcGF0dGVyblRyYW5z
Zm9ybS5pc0ludmVydGlibGUoKSkKQEAgLTY3MSw2ICs3ODUsMTEgQEAgSUQyRDFTdHJva2VTdHls
ZSogR3JhcGhpY3NDb250ZXh0UGxhdGZvcgogICAgIHJldHVybiBtX2QyZFN0cm9rZVN0eWxlLmdl
dCgpOwogfQogCitJRDJEMVN0cm9rZVN0eWxlKiBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ry
b2tlU3R5bGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGEtPnN0cm9rZVN0eWxlKCk7Cit9
CisKIC8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50MikKIHsKQEAgLTgyMSwxNSArOTQwLDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3UGF0aChjb25zdCBQYXQKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdXaXRob3V0
U2hhZG93KGNvbnN0IEZsb2F0UmVjdCYgLypib3VuZGluZ1JlY3QqLywgY29uc3Qgc3RkOjpmdW5j
dGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+JiBkcmF3Q29tbWFuZHMpCiB7Ci0gICAgYXV0
byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CisgICAgYm9vbCB0ZW1wb3JhcnlEcmF3ID0g
dGVtcG9yYXJ5QmVnaW5EcmF3SWZOZWVkZWQoKTsKIAotICAgIGlmICghZGlkQmVnaW5EcmF3KCkp
Ci0gICAgICAgIGNvbnRleHQtPkJlZ2luRHJhdygpOworICAgIGRyYXdDb21tYW5kcyhwbGF0Zm9y
bUNvbnRleHQoKSk7CiAKLSAgICBkcmF3Q29tbWFuZHMoY29udGV4dCk7Ci0KLSAgICBpZiAoIWRp
ZEJlZ2luRHJhdygpKQotICAgICAgICBtX2RhdGEtPmVuZERyYXcoKTsKKyAgICBpZiAodGVtcG9y
YXJ5RHJhdykKKyAgICAgICAgZW5kRHJhdygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd1dpdGhTaGFkb3coY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ1JlY3QsIGNvbnN0IHN0ZDo6
ZnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCopPiYgZHJhd0NvbW1hbmRzKQpAQCAtMTA4
MCw5ICsxMTk2LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbFJvdW5kZQog
ICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIH0KIAotICAgIGlmICghZGlkQmVnaW5EcmF3
KCkpCi0gICAgICAgIGNvbnRleHQtPkJlZ2luRHJhdygpOwotICAgIAorICAgIGJvb2wgdGVtcG9y
YXJ5RHJhdyA9IHRlbXBvcmFyeUJlZ2luRHJhd0lmTmVlZGVkKCk7CisKICAgICBjb250ZXh0LT5T
ZXRUYWdzKDEsIF9fTElORV9fKTsKIAogICAgIGNvbnN0IEZsb2F0UmVjdCYgciA9IHJlY3QucmVj
dCgpOwpAQCAtMTEwMiw3ICsxMjE3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3Jt
RmlsbFJvdW5kZQogICAgICAgICBmaWxsUGF0aChwYXRoKTsKICAgICB9CiAKLSAgICBpZiAoIWRp
ZEJlZ2luRHJhdygpKQorICAgIGlmICh0ZW1wb3JhcnlEcmF3KQogICAgICAgICBtX2RhdGEtPmVu
ZERyYXcoKTsKIAogICAgIGlmIChkcmF3T3duU2hhZG93KQpAQCAtMTEyMSw4ICsxMjM2LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZQogCiAgICAgYXV0byBjb250
ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAoIWRpZEJlZ2luRHJhdygpKQotICAg
ICAgICBjb250ZXh0LT5CZWdpbkRyYXcoKTsKKyAgICBib29sIHRlbXBvcmFyeURyYXcgPSB0ZW1w
b3JhcnlCZWdpbkRyYXdJZk5lZWRlZCgpOwogCiAgICAgY29udGV4dC0+U2V0VGFncygxLCBfX0xJ
TkVfXyk7CiAKQEAgLTExNTIsNyArMTI2Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
UmVjdFdpdGhSb3VuZGUKIAogICAgIGZpbGxQYXRoKHBhdGgpOwogCi0gICAgaWYgKCFkaWRCZWdp
bkRyYXcoKSkKKyAgICBpZiAodGVtcG9yYXJ5RHJhdykKICAgICAgICAgbV9kYXRhLT5lbmREcmF3
KCk7CiAKICAgICBpZiAoZHJhd093blNoYWRvdykKQEAgLTEyNDgsMTQgKzEzNjIsMTMgQEAgSW50
UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjbwogICAgICAgICByZXR1cm4gSW50
UmVjdCgtMjA0OCwgLTIwNDgsIDQwOTYsIDQwOTYpOyAvLyBGSVhNRTogZGlzcGxheSBsaXN0cy4K
ICAgICB9CiAKLSAgICBEMkQxX1JFQ1RfRiBkMmRDbGlwQm91bmRzID0gRDJEMTo6SW5maW5pdGVS
ZWN0KCk7Ci0gICAgRmxvYXRSZWN0IGNsaXBCb3VuZHMoZDJkQ2xpcEJvdW5kcy5sZWZ0LCBkMmRD
bGlwQm91bmRzLnRvcCwgZDJkQ2xpcEJvdW5kcy5yaWdodCAtIGQyZENsaXBCb3VuZHMubGVmdCwg
ZDJkQ2xpcEJvdW5kcy5ib3R0b20gLSBkMmRDbGlwQm91bmRzLnRvcCk7CisgICAgRDJEMV9TSVpF
X0YgY2xpcFNpemU7CisgICAgaWYgKG1fZGF0YS0+Y2xpcExheWVyKCkpCisgICAgICAgIGNsaXBT
aXplID0gbV9kYXRhLT5jbGlwTGF5ZXIoKS0+R2V0U2l6ZSgpOworICAgIGVsc2UKKyAgICAgICAg
Y2xpcFNpemUgPSBwbGF0Zm9ybUNvbnRleHQoKS0+R2V0U2l6ZSgpOwogCi0gICAgaWYgKG1fZGF0
YS0+Y2xpcExheWVyKCkpIHsKLSAgICAgICAgYXV0byBjbGlwU2l6ZSA9IG1fZGF0YS0+Y2xpcExh
eWVyKCktPkdldFNpemUoKTsKLSAgICAgICAgY2xpcEJvdW5kcy5zZXRXaWR0aChjbGlwU2l6ZS53
aWR0aCk7Ci0gICAgICAgIGNsaXBCb3VuZHMuc2V0SGVpZ2h0KGNsaXBTaXplLmhlaWdodCk7Ci0g
ICAgfQorICAgIEZsb2F0UmVjdCBjbGlwQm91bmRzKEludFBvaW50KCksIGNsaXBTaXplKTsKIAog
ICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGNsaXBCb3VuZHMpOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZURpcmVjdDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgJKHJldmlz
aW9uIDIwNzY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSwxNiArMzksMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
LSAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoSUQyRDFSZW5kZXJUYXJnZXQqIHJl
bmRlclRhcmdldCkKLSAgICAgICAgOiBtX3JlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpCi0gICAg
ewotICAgIH0KKyAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoSUQyRDFSZW5kZXJU
YXJnZXQqKTsKKyAgICB+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCk7CiAKICAgICBl
bnVtIERpcmVjdDJETGF5ZXJUeXBlIHsgQXhpc0FsaWduZWRDbGlwLCBMYXllckNsaXAgfTsKIAog
ICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIGNsaXAoY29uc3QgUGF0
aCYpOwogICAgIHZvaWQgY2xpcChJRDJEMUdlb21ldHJ5Kik7CisgICAgdm9pZCBiZWdpbkRyYXco
KTsKICAgICB2b2lkIGVuZERyYXcoKTsKICAgICB2b2lkIGZsdXNoKCk7CiAgICAgdm9pZCBzYXZl
KCk7CkBAIC03NSw5ICs3NCwxMyBAQCBwdWJsaWM6CiAKICAgICBDT01QdHI8SUQyRDFTb2xpZENv
bG9yQnJ1c2g+IGJydXNoV2l0aENvbG9yKGNvbnN0IEQyRDFfQ09MT1JfRiYpOwogCisgICAgSERD
IGhkY0ZvclJlbmRlclRhcmdldCgpOworICAgIHZvaWQgcmVsZWFzZUhkY0ZvclJlbmRlclRhcmdl
dCgpOworCiAgICAgSERDIG1faGRjIHsgbnVsbHB0ciB9OwogICAgIEQyRDFfQkxFTkRfTU9ERSBt
X2JsZW5kTW9kZSB7IEQyRDFfQkxFTkRfTU9ERV9NVUxUSVBMWSB9OwogICAgIEQyRDFfQ09NUE9T
SVRFX01PREUgbV9jb21wb3NpdGVNb2RlIHsgRDJEMV9DT01QT1NJVEVfTU9ERV9TT1VSQ0VfT1ZF
UiB9OworICAgIHVuc2lnbmVkIG1fYmVnaW5EcmF3Q291bnQgeyAwIH07CiAgICAgYm9vbCBtX3No
b3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9kaWRCZWdpbkRy
YXcgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zdHJva2VTeWxlSXNEaXJ0eSB7IGZhbHNlIH07CkBA
IC05MSw2ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNvbXB1dGVTdHJva2VTdHlsZSgp
OwogCiAgICAgQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiBtX3JlbmRlclRhcmdldDsKKyAgICBD
T01QdHI8SUQyRDFHZGlJbnRlcm9wUmVuZGVyVGFyZ2V0PiBtX2dkaVJlbmRlclRhcmdldDsKICAg
ICBIYXNoTWFwPFJHQkEzMiwgQ09NUHRyPElEMkQxU29saWRDb2xvckJydXNoPj4gbV9zb2xpZENv
bG9yZWRCcnVzaENhY2hlOwogICAgIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4gbV93aGl0
ZUJydXNoOwogICAgIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4gbV96ZXJvQnJ1c2g7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRh
RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDIwNzY4MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJl
Y3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDIzICs2MywxNiBAQCBSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0CiAgICAgYXV0byBiaXRtYXBEQyA9IGFkb3B0R0RJ
T2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKHdpbmRvd0RDKSk7CiAgICAgSEdESU9CSiBvbGRC
aXRtYXAgPSA6OlNlbGVjdE9iamVjdChiaXRtYXBEQy5nZXQoKSwgYml0bWFwLmdldCgpKTsKIAot
ICAgIEhSRVNVTFQgaHI7CisgICAgYm9vbCB0ZW1wb3JhcnlEcmF3ID0gY29udGV4dC0+dGVtcG9y
YXJ5QmVnaW5EcmF3SWZOZWVkZWQoKTsKIAotICAgIENPTVB0cjxJRDJEMUdkaUludGVyb3BSZW5k
ZXJUYXJnZXQ+IGdkaVJlbmRlclRhcmdldDsKLSAgICBociA9IHBsYXRmb3JtQ29udGV4dC0+UXVl
cnlJbnRlcmZhY2UoX191dWlkb2YoSUQyRDFHZGlJbnRlcm9wUmVuZGVyVGFyZ2V0KSwgKHZvaWQq
KikmZ2RpUmVuZGVyVGFyZ2V0KTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQtPkJlZ2luRHJhdygpOwotCi0gICAgSERD
IGhkYyA9IG51bGxwdHI7Ci0gICAgaHIgPSBnZGlSZW5kZXJUYXJnZXQtPkdldERDKEQyRDFfRENf
SU5JVElBTElaRV9NT0RFX0NPUFksICZoZGMpOworICAgIEhEQyBoZGMgPSBjb250ZXh0LT5oZGNG
b3JSZW5kZXJUYXJnZXQoKTsKIAogICAgIEJPT0wgb2sgPSA6OkJpdEJsdChiaXRtYXBEQy5nZXQo
KSwgMCwgMCwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCBoZGMsIHJlY3QueCgpLCByZWN0
LnkoKSwgU1JDQ09QWSk7CiAKLSAgICBociA9IGdkaVJlbmRlclRhcmdldC0+UmVsZWFzZURDKG51
bGxwdHIpOworICAgIGNvbnRleHQtPnJlbGVhc2VIZGNGb3JSZW5kZXJUYXJnZXQoKTsKIAotICAg
IGhyID0gcGxhdGZvcm1Db250ZXh0LT5FbmREcmF3KCk7CisgICAgaWYgKHRlbXBvcmFyeURyYXcp
CisgICAgICAgIGNvbnRleHQtPmVuZERyYXcoKTsKIAogICAgIGlmICghb2spCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L05hdGl2ZUltYWdlRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9OYXRpdmVJbWFnZURpcmVjdDJELmNwcAkocmV2aXNpb24gMjA3
NjgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdl
RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSwxNCArODUsMTMgQEAgdm9pZCBkcmF3
TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdAogCiAgICAgZmxvYXQgb3BhY2l0eSA9IDEu
MGY7CiAKLSAgICBpZiAoIWNvbnRleHQuZGlkQmVnaW5EcmF3KCkpCi0gICAgICAgIHBsYXRmb3Jt
Q29udGV4dC0+QmVnaW5EcmF3KCk7CisgICAgYm9vbCB0ZW1wb3JhcnlEcmF3ID0gY29udGV4dC50
ZW1wb3JhcnlCZWdpbkRyYXdJZk5lZWRlZCgpOwogCiAgICAgcGxhdGZvcm1Db250ZXh0LT5EcmF3
Qml0bWFwKGltYWdlLmdldCgpLCBkZXN0UmVjdCwgb3BhY2l0eSwgRDJEMV9CSVRNQVBfSU5URVJQ
T0xBVElPTl9NT0RFX05FQVJFU1RfTkVJR0hCT1IsIGFkanVzdGVkU3JjUmVjdCk7CiAKICAgICBI
UkVTVUxUIGhyID0gU19PSzsKLSAgICBpZiAoIWNvbnRleHQuZGlkQmVnaW5EcmF3KCkpCi0gICAg
ICAgIGhyID0gcGxhdGZvcm1Db250ZXh0LT5FbmREcmF3KCk7CisgICAgaWYgKHRlbXBvcmFyeURy
YXcpCisgICAgICAgIGNvbnRleHQuZW5kRHJhdygpOwogICAgIGVsc2UKICAgICAgICAgaHIgPSBw
bGF0Zm9ybUNvbnRleHQtPkZsdXNoKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMDc2
ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJE
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitzdGF0aWMgaW5saW5lIElEMkQxUmVuZGVyVGFyZ2V0KiBzY3JhdGNoUmVuZGVyVGFy
Z2V0KCkKK3sKKyAgICBzdGF0aWMgQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiByZW5kZXJUYXJn
ZXQgPSBhZG9wdENPTShHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKSk7Cisg
ICAgcmV0dXJuIHJlbmRlclRhcmdldC5nZXQoKTsKK30KIAogUGF0aCBQYXRoOjpwb2x5Z29uUGF0
aEZyb21Qb2ludHMoY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQ+JiBwb2ludHMpCiB7CkBAIC03MCw4
ICs3NSw2IEBAIFBhdGg6OlBhdGgoKQogCiBQYXRoOjp+UGF0aCgpCiB7Ci0gICAgaWYgKG1fcGF0
aCkKLSAgICAgICAgbV9wYXRoLT5SZWxlYXNlKCk7CiB9CiAKIFBsYXRmb3JtUGF0aFB0ciBQYXRo
OjplbnN1cmVQbGF0Zm9ybVBhdGgoKQpAQCAtODMsNyArODYsNyBAQCBQbGF0Zm9ybVBhdGhQdHIg
UGF0aDo6ZW5zdXJlUGxhdGZvcm1QYXRoCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKLSAgICByZXR1cm4gbV9wYXRoOworICAgIHJldHVybiBtX3BhdGguZ2V0KCk7CiB9CiAK
IHZvaWQgUGF0aDo6YXBwZW5kR2VvbWV0cnkoSUQyRDFHZW9tZXRyeSogZ2VvbWV0cnkpCkBAIC0x
MDEsNyArMTA0LDcgQEAgdm9pZCBQYXRoOjphcHBlbmRHZW9tZXRyeShJRDJEMUdlb21ldHJ5Kgog
CiAgICAgYXV0byBmaWxsTW9kZSA9IG1fcGF0aCA/IG1fcGF0aC0+R2V0RmlsbE1vZGUoKSA6IEQy
RDFfRklMTF9NT0RFX1dJTkRJTkc7CiAKLSAgICBDT01QdHI8SUQyRDFHZW9tZXRyeUdyb3VwPiBw
cm90ZWN0ZWRQYXRoID0gYWRvcHRDT00obV9wYXRoKTsKKyAgICBDT01QdHI8SUQyRDFHZW9tZXRy
eUdyb3VwPiBwcm90ZWN0ZWRQYXRoID0gbV9wYXRoOwogICAgIG1fcGF0aCA9IG51bGxwdHI7CiAK
ICAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0
ZUdlb21ldHJ5R3JvdXAoZmlsbE1vZGUsIGdlb21ldHJpZXMuZGF0YSgpLCBnZW9tZXRyaWVzLnNp
emUoKSwgJm1fcGF0aCk7CkBAIC0xNjIsMTMgKzE2NSw3IEBAIFBhdGg6OlBhdGgoY29uc3QgUGF0
aCYgb3RoZXIpCiAKIFBhdGgmIFBhdGg6Om9wZXJhdG9yPShjb25zdCBQYXRoJiBvdGhlcikKIHsK
LSAgICBpZiAobV9wYXRoKQotICAgICAgICBtX3BhdGgtPlJlbGVhc2UoKTsKLQogICAgIG1fcGF0
aCA9IG90aGVyLm1fcGF0aDsKLSAgICBpZiAobV9wYXRoKQotICAgICAgICBtX3BhdGgtPkFkZFJl
ZigpOwotCiAgICAgbV9hY3RpdmVQYXRoID0gb3RoZXIubV9hY3RpdmVQYXRoOwogICAgIG1fYWN0
aXZlUGF0aEdlb21ldHJ5ID0gb3RoZXIubV9hY3RpdmVQYXRoR2VvbWV0cnk7CiAKQEAgLTE3Nyw4
ICsxNzQsNiBAQCBQYXRoJiBQYXRoOjpvcGVyYXRvcj0oY29uc3QgUGF0aCYgb3RoZXIpCiAKIEhS
RVNVTFQgUGF0aDo6aW5pdGlhbGl6ZVBhdGhTdGF0ZSgpCiB7Ci0gICAgaWYgKG1fcGF0aCkKLSAg
ICAgICAgbV9wYXRoLT5SZWxlYXNlKCk7CiAgICAgbV9wYXRoID0gbnVsbHB0cjsKICAgICBtX2Fj
dGl2ZVBhdGggPSBudWxscHRyOwogICAgIG1fYWN0aXZlUGF0aEdlb21ldHJ5ID0gbnVsbHB0cjsK
QEAgLTIzMSwxMCArMjI2LDE3IEBAIGJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5
bGVBcHAKICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFVO
VVNFRF9QQVJBTShhcHBsaWVyKTsKLSAgICBVTlVTRURfUEFSQU0ocG9pbnQpOwotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChhcHBsaWVyKTsKKwor
ICAgIEdyYXBoaWNzQ29udGV4dCBzY3JhdGNoQ29udGV4dChzY3JhdGNoUmVuZGVyVGFyZ2V0KCkp
OworICAgIGFwcGxpZXItPnN0cm9rZVN0eWxlKCZzY3JhdGNoQ29udGV4dCk7CisKKyAgICBCT09M
IGNvbnRhaW5zUG9pbnQgPSBmYWxzZTsKKyAgICBIUkVTVUxUIGhyID0gbV9wYXRoLT5TdHJva2VD
b250YWluc1BvaW50KHBvaW50LCBzY3JhdGNoQ29udGV4dC5zdHJva2VUaGlja25lc3MoKSwgc2Ny
YXRjaENvbnRleHQucGxhdGZvcm1TdHJva2VTdHlsZSgpLCBudWxscHRyLCAxLjBmLCAmY29udGFp
bnNQb2ludCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gY29udGFpbnNQb2ludDsKIH0KIAogdm9pZCBQYXRoOjp0cmFuc2xhdGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplKQpAQCAtMjU3LDcgKzI1OSw3IEBAIHZvaWQgUGF0aDo6dHJh
bnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm8KIAogICAgIGNvbnN0IEQyRDFfTUFUUklYXzNYMl9G
JiBkMmRUcmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxjb25zdCBEMkQxX01BVFJJWF8zWDJfRj4odHJh
bnNmb3JtKTsKICAgICBDT01QdHI8SUQyRDFUcmFuc2Zvcm1lZEdlb21ldHJ5PiB0cmFuc2Zvcm1l
ZFBhdGg7Ci0gICAgaWYgKCFTVUNDRUVERUQoR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5
KCktPkNyZWF0ZVRyYW5zZm9ybWVkR2VvbWV0cnkobV9wYXRoLCBkMmRUcmFuc2Zvcm0sICZ0cmFu
c2Zvcm1lZFBhdGgpKSkKKyAgICBpZiAoIVNVQ0NFRURFRChHcmFwaGljc0NvbnRleHQ6OnN5c3Rl
bUZhY3RvcnkoKS0+Q3JlYXRlVHJhbnNmb3JtZWRHZW9tZXRyeShtX3BhdGguZ2V0KCksIGQyZFRy
YW5zZm9ybSwgJnRyYW5zZm9ybWVkUGF0aCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0
b3I8SUQyRDFHZW9tZXRyeSo+IGdlb21ldHJpZXM7CkBAIC0yNzEsNyArMjczLDYgQEAgdm9pZCBQ
YXRoOjp0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmbwogCiAgICAgYXV0byBmaWxsTW9kZSA9
IG1fcGF0aC0+R2V0RmlsbE1vZGUoKTsKIAotICAgIG1fcGF0aC0+UmVsZWFzZSgpOwogICAgIG1f
cGF0aCA9IG51bGxwdHI7CiAKICAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0
ZW1GYWN0b3J5KCktPkNyZWF0ZUdlb21ldHJ5R3JvdXAoZmlsbE1vZGUsIGdlb21ldHJpZXMuZGF0
YSgpLCBnZW9tZXRyaWVzLnNpemUoKSwgJm1fcGF0aCk7CkBAIC00NzYsNyArNDc3LDcgQEAgdm9p
ZCBQYXRoOjphZGRFbGxpcHNlKEZsb2F0UG9pbnQgcCwgZmxvYQogdm9pZCBQYXRoOjphZGRFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcikKIHsKICAgICBDT01QdHI8SUQyRDFFbGxpcHNlR2VvbWV0
cnk+IGVsbGlwc2U7Ci0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFj
dG9yeSgpLT5DcmVhdGVFbGxpcHNlR2VvbWV0cnkoRDJEMTo6RWxsaXBzZShEMkQxOjpQb2ludDJG
KHIuY2VudGVyKCkueCgpLCByLmNlbnRlcigpLnkoKSksIHIud2lkdGgoKSwgci5oZWlnaHQoKSks
ICZlbGxpcHNlKTsKKyAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0
b3J5KCktPkNyZWF0ZUVsbGlwc2VHZW9tZXRyeShEMkQxOjpFbGxpcHNlKHIuY2VudGVyKCksIHIu
d2lkdGgoKSwgci5oZWlnaHQoKSksICZlbGxpcHNlKTsKICAgICBSRUxFQVNFX0FTU0VSVChTVUND
RUVERUQoaHIpKTsKICAgICBhcHBlbmRHZW9tZXRyeShlbGxpcHNlLmdldCgpKTsKIH0KQEAgLTQ5
OCw5ICs0OTksNiBAQCB2b2lkIFBhdGg6OmNsZWFyKCkKICAgICBpZiAoaXNOdWxsKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChtX3BhdGgpCi0gICAgICAgIG1fcGF0aC0+UmVsZWFzZSgp
OwotCiAgICAgbV9wYXRoID0gbnVsbHB0cjsKICAgICBtX2FjdGl2ZVBhdGggPSBudWxscHRyOwog
ICAgIG1fYWN0aXZlUGF0aEdlb21ldHJ5ID0gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAkocmV2aXNpb24gMjA3
NjgwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDE0LDcgKzQxNCwxMSBAQCBib29sIEZpbHRlckVmZmVjdFJl
bmRlcmVySGVscGVyOjpiZWdpbkZpCiAgICAgICAgIG1faGF2ZUZpbHRlckVmZmVjdCA9IGZhbHNl
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCisjaWYgVVNFKERJUkVDVDJE
KQorICAgIHNvdXJjZUdyYXBoaWNzQ29udGV4dC0+dGVtcG9yYXJ5QmVnaW5EcmF3SWZOZWVkZWQo
KTsKKyNlbmRpZgorCiAgICAgLy8gVHJhbnNsYXRlIHRoZSBjb250ZXh0IHNvIHRoYXQgdGhlIGNv
bnRlbnRzIG9mIHRoZSBsYXllciBpcyBjYXB0dXJlZCBpbiB0aGUgb2Zmc2NyZWVuIG1lbW9yeSBi
dWZmZXIuCiAgICAgc291cmNlR3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7CiAgICAgc291cmNlR3Jh
cGhpY3NDb250ZXh0LT50cmFuc2xhdGUoLW1fcGFpbnRPZmZzZXQueCgpLCAtbV9wYWludE9mZnNl
dC55KCkpOwpAQCAtNDM3LDYgKzQ0MSwxMCBAQCB2b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVySGVs
cGVyOjphcHBseUZpCiAgICAgTGF5b3V0UmVjdCBkZXN0UmVjdCA9IGZpbHRlci0+b3V0cHV0UmVj
dCgpOwogICAgIGRlc3RSZWN0Lm1vdmUobV9wYWludE9mZnNldC54KCksIG1fcGFpbnRPZmZzZXQu
eSgpKTsKIAorI2lmIFVTRShESVJFQ1QyRCkKKyAgICBmaWx0ZXItPmlucHV0Q29udGV4dCgpLT5l
bmREcmF3KCk7CisjZW5kaWYKKwogICAgIGlmIChJbWFnZUJ1ZmZlciogb3V0cHV0QnVmZmVyID0g
ZmlsdGVyLT5vdXRwdXQoKSkKICAgICAgICAgZGVzdGluYXRpb25Db250ZXh0LmRyYXdJbWFnZUJ1
ZmZlcigqb3V0cHV0QnVmZmVyLCBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGRlc3RSZWN0LCBtX3Jl
bmRlckxheWVyLT5yZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSkpOwog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292806</attachid>
            <date>2016-10-25 13:25:44 -0700</date>
            <delta_ts>2016-10-25 13:33:15 -0700</delta_ts>
            <desc>Patch v3</desc>
            <filename>filter3.patch</filename>
            <type>text/plain</type>
            <size>30248</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzc2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBACisyMDE2LTEwLTI0ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBJ
bXByb3ZlIHN1cHBvcnQgZm9yIGZpbHRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2Mzg5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyB1bnRpbCBEMkQgYmFja2VuZCBpcyB3b3Jr
aW5nLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oOgorICAgICAgICAoV2ViQ29yZTo6UGF0
aDo6cGxhdGZvcm1QYXRoKTogVXNlIGEgc21hcnQgcG9pbnRlciBmb3IgRDJEIHBhdGggdHlwZXMu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmZpbGwpOiBVc2UgbmV3ICd0ZW1wb3JhcnlCZWdp
bkRyYXdJZk5lZWRlZCcgc28gd2UgaGF2ZQorICAgICAgICBjb25zaXN0ZW50IEJlZ2luL0VuZCBE
cmF3IHBhaXJzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHREaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN5c3Rl
bUZhY3RvcnkpOiBBY3RpdmF0ZSB1c2VmdWwgRDJEIGxvZ2dpbmcgd2hlbiBidWlsZGluZworICAg
ICAgICBpbiBEZWJ1ZyBtb2RlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpw
bGF0Zm9ybUluaXQpOiBXaGVuIGNvbnN0cnVjdGluZyBmcm9tIGEgR0RJIEhEQywgY3JlYXRlCisg
ICAgICAgIGEgR0RJLWNvbXBhdGlibGUgRDJEIHJlbmRlciB0YXJnZXQgc28gYWxsIGRyYXdpbmcg
b3BlcmF0aW9ucyBnbyB0byB0aGUgc2FtZSBwbGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KTogV2hlbgorICAgICAgICBpbml0aWFsaXppbmcgZnJvbSBhIEQyRCBkZXZpY2UsIGNyZWF0ZSBh
IHNpbmdsZSBHREkgSW50ZXJvcCBvYmplY3QgdG8gdXNlIGZvciB0aGUKKyAgICAgICAgbGlmZXRp
bWUgb2YgdGhlIEdyYXBoaWNzQ29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSk6IEFk
ZCBhbgorICAgICAgICBhc3NlcnRpb24gdGhhdCB3ZSBhcmUgaW4gYSB2YWxpZCBzdGF0ZSB3aGVu
IGNsZWFuaW5nIHVwIHRoZSBncmFwaGljcyBjb250ZXh0LgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpoZGNGb3JSZW5kZXJUYXJnZXQpOiBDb252ZW5p
ZW5jZSBtZXRob2QKKyAgICAgICAgZm9yIGdldHRpbmcgYSBHREkgZGV2aWNlIGNvbnRleHQgZm9y
IHRoZSBEMkQgZGV2aWNlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlOjpyZWxlYXNlSGRjRm9yUmVuZGVyVGFyZ2V0KTogUmVsZWFzZSBtZXRob2QKKyAg
ICAgICAgZm9yIHRoZSBIREMgaGFuZGxlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpoZGNGb3JSZW5kZXJUYXJnZXQpOiBFeHBvc2UgaW50ZXJuYWwgbWV0aG9kIHRvIEdyYXBo
aWNzQ29udGV4dAorICAgICAgICBjbGllbnRzLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpyZWxlYXNlSGRjRm9yUmVuZGVyVGFyZ2V0KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNsaXApOiBDbGlwcGluZyBjYW4g
b25seSBoYXBwZW4gaW4gYSBEcmF3IG9wZXJhdGlvbi4KKyAgICAgICAgT3BlbiBhIG5ldyBCZWdp
bkRyYXcgaWYgYXNrZWQgdG8gQ2xpcC4gVGhlIEJlZ2luIG11c3Qgc3RheSBhY3RpdmUgd2hlbiB0
aGlzIG1ldGhvZCByZXR1cm5zLAorICAgICAgICBhcyB0aGUgQ2xpcCBsYXllciBpcyBvbmx5IHZh
bGlkIGR1cmluZyBhIERyYXcgb3BlcmF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOjpiZWdpbkRyYXcpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kRHJhdyk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0ZW1wb3JhcnlCZWdpbkRyYXdJZk5lZWRl
ZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjplbmREcmF3KTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdXaXRoU2hhZG93
KTogUmV2aXNlIHRvIHVzZSBuZXcgUmVuZGVyVGFyZ2V0SGVscGVyIGNsYXNzLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3V2l0aG91dFNoYWRvdyk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpj
bGlwQm91bmRzKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmg6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVm
ZmVyRGF0YURpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6
Z2V0RGF0YSk6IFVzZSBuZXcgbWV0aG9kcywgYW5kIGNhY2hlZCBHREkgSW50ZXJvcCBvYmplY3Qu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6ZHJhd05hdGl2ZUltYWdlKTogVXNlIG5ldyAnUmVuZGVyVGFy
Z2V0SGVscGVyJyBjbGFzcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERp
cmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6On5QYXRoKTogUmV2aXNlIGZvciBz
bWFydCBwb2ludGVyIHVzZS4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmVuc3VyZVBsYXRmb3Jt
UGF0aCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YXBwZW5kR2VvbWV0cnkpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6Om9wZXJhdG9yPSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6UGF0aDo6aW5pdGlhbGl6ZVBhdGhTdGF0ZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6UGF0aDo6dHJhbnNmb3JtKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXRo
OjphZGRFbGxpcHNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjbGVhcik6IERp
dHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9SZW5kZXJUYXJnZXRIZWxwZXIu
aDogQWRkZWQuCisgICAgICAgICogcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOjpiZWdpbkZpbHRl
ckVmZmVjdCk6IENhbGwgIkJlZ2luRHJhdyIgb24gdGhlCisgICAgICAgIEdyYXBoaWNzQ29udGV4
dCBpZiB1c2luZyBEMkQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckhl
bHBlcjo6YXBwbHlGaWx0ZXJFZmZlY3QpOiBDYWxsICJlbmREcmF3IiBvbiB0aGUgc291cmNlCisg
ICAgICAgIGltYWdlIEdyYXBoaWNzQ29udGV4dCBpZiB1c2luZyBEMkQgc28gdGhhdCBpdCBpcyBp
biBhICJmaW5pc2hlZCIgc3RhdGUgYmVmb3JlIGRyYXdpbmcKKyAgICAgICAgaXRzIGNvbnRlbnRz
IHRvIHRoZSBkZXN0aW5hdGlvbiBncmFwaGljcyBjb250ZXh0LgorCiAyMDE2LTEwLTI0ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBUcnkgdG8gZml4IFdpbmRvd3Mg
YnVpbGQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gMjA3NjgxKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1Miwx
NCArNTUyLDE5IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSUQyRDFGYWN0
b3J5KiBzeXN0ZW1GYWN0b3J5KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIElEMkQxUmVu
ZGVyVGFyZ2V0KiBkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7CiAKKyAgICBib29sIHRlbXBvcmFyeUJl
Z2luRHJhd0lmTmVlZGVkKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXREaWRCZWdpbkRy
YXcoYm9vbCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBkaWRCZWdpbkRyYXcoKSBjb25zdDsK
ICAgICBEMkQxX0NPTE9SX0YgY29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3QgQ29sb3ImKSBjb25z
dDsKKyAgICBIREMgaGRjRm9yUmVuZGVyVGFyZ2V0KCk7CisgICAgdm9pZCByZWxlYXNlSGRjRm9y
UmVuZGVyVGFyZ2V0KCk7CisgICAgdm9pZCBlbmREcmF3KCk7CiAKICAgICBJRDJEMUJydXNoKiBz
b2xpZFN0cm9rZUJydXNoKCkgY29uc3Q7CiAgICAgSUQyRDFCcnVzaCogc29saWRGaWxsQnJ1c2go
KSBjb25zdDsKICAgICBJRDJEMUJydXNoKiBwYXR0ZXJuU3Ryb2tlQnJ1c2goKSBjb25zdDsKICAg
ICBJRDJEMUJydXNoKiBwYXR0ZXJuRmlsbEJydXNoKCkgY29uc3Q7CisgICAgSUQyRDFTdHJva2VT
dHlsZSogcGxhdGZvcm1TdHJva2VTdHlsZSgpIGNvbnN0OwogCiAgICAgSUQyRDFTb2xpZENvbG9y
QnJ1c2gqIGJydXNoV2l0aENvbG9yKGNvbnN0IENvbG9yJik7CiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHJldmlzaW9uIDIwNzY4MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAkod29ya2luZyBjb3B5KQpAQCAt
MTY1LDcgKzE2NSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgLy8gVG8ga2Vl
cCBQYXRoKCkgY2hlYXAsIGl0IGRvZXMgbm90IGFsbG9jYXRlIGEgUGxhdGZvcm1QYXRoIGltbWVk
aWF0ZWx5CiAgICAgICAgIC8vIG1lYW5pbmcgUGF0aDo6cGxhdGZvcm1QYXRoKCkgY2FuIHJldHVy
biBudWxsLgorI2lmIFVTRShESVJFQ1QyRCkKKyAgICAgICAgUGxhdGZvcm1QYXRoUHRyIHBsYXRm
b3JtUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aC5nZXQoKTsgfQorI2Vsc2UKICAgICAgICAg
UGxhdGZvcm1QYXRoUHRyIHBsYXRmb3JtUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQor
I2VuZGlmCiAgICAgICAgIC8vIGVuc3VyZVBsYXRmb3JtUGF0aCgpIHdpbGwgYWxsb2NhdGUgYSBQ
bGF0Zm9ybVBhdGggaWYgaXQgaGFzIG5vdCB5ZXQgYmVlbiBhbmQgd2lsbCBuZXZlciByZXR1cm4g
bnVsbC4KICAgICAgICAgV0VCQ09SRV9FWFBPUlQgUGxhdGZvcm1QYXRoUHRyIGVuc3VyZVBsYXRm
b3JtUGF0aCgpOwogCkBAIC0xOTksMTAgKzIwMywxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAj
ZW5kaWYKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFBsYXRmb3JtUGF0aFB0ciBtX3BhdGggeyBu
dWxscHRyIH07CiAjaWYgVVNFKERJUkVDVDJEKQorICAgICAgICBDT01QdHI8SUQyRDFHZW9tZXRy
eUdyb3VwPiBtX3BhdGg7CiAgICAgICAgIENPTVB0cjxJRDJEMVBhdGhHZW9tZXRyeT4gbV9hY3Rp
dmVQYXRoR2VvbWV0cnk7CiAgICAgICAgIENPTVB0cjxJRDJEMUdlb21ldHJ5U2luaz4gbV9hY3Rp
dmVQYXRoOworI2Vsc2UKKyAgICAgICAgUGxhdGZvcm1QYXRoUHRyIG1fcGF0aCB7IG51bGxwdHIg
fTsKICNlbmRpZgogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAkocmV2aXNpb24g
MjA3NjgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VHcmFwaGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsMTUgQEAgdm9pZCBTb3Vy
Y2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcgogICAgIGlmICghcmVzdWx0SW1hZ2UgfHwg
IXNvdXJjZUltYWdlKQogICAgICAgICByZXR1cm47CiAKKyNpZiBVU0UoRElSRUNUMkQpCisgICAg
cmVzdWx0SW1hZ2UtPmNvbnRleHQoKS50ZW1wb3JhcnlCZWdpbkRyYXdJZk5lZWRlZCgpOworI2Vu
ZGlmCisKICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291cmNl
SW1hZ2UsIEludFBvaW50KCkpOworCisjaWYgVVNFKERJUkVDVDJEKQorICAgIHJlc3VsdEltYWdl
LT5jb250ZXh0KCkuZW5kRHJhdygpOworI2VuZGlmCiB9CiAKIHZvaWQgU291cmNlR3JhcGhpYzo6
ZHVtcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGll
bnREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMDc2ODEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyMCwxOSArMTIwLDE1IEBAIHZvaWQgR3JhZGllbnQ6OmZpbGwoR3Jh
cGhpY3NDb250ZXh0KiBjb24KICAgICBpZiAoIW1fY2FjaGVkSGFzaCB8fCAhbV9ncmFkaWVudCkK
ICAgICAgICAgZ2VuZXJhdGVHcmFkaWVudChkMmRDb250ZXh0KTsKIAotICAgIGlmICghY29udGV4
dC0+ZGlkQmVnaW5EcmF3KCkpCi0gICAgICAgIGQyZENvbnRleHQtPkJlZ2luRHJhdygpOworICAg
IGJvb2wgdGVtcG9yYXJ5RHJhdyA9IGNvbnRleHQtPnRlbXBvcmFyeUJlZ2luRHJhd0lmTmVlZGVk
KCk7CiAKICAgICBkMmRDb250ZXh0LT5TZXRUYWdzKEdSQURJRU5UX0RSQVdJTkcsIF9fTElORV9f
KTsKIAogICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwogICAgIGQyZENvbnRl
eHQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIG1fZ3JhZGllbnQpOwogCi0gICAgaWYgKCFjb250
ZXh0LT5kaWRCZWdpbkRyYXcoKSkgewotICAgICAgICBEMkQxX1RBRyBmaXJzdCwgc2Vjb25kOwot
ICAgICAgICBIUkVTVUxUIGhyID0gZDJkQ29udGV4dC0+RW5kRHJhdygmZmlyc3QsICZzZWNvbmQp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICB9CisgICAgaWYg
KHRlbXBvcmFyeURyYXcpCisgICAgICAgIGNvbnRleHQtPmVuZERyYXcoKTsKIAogICAgIGlmIChu
ZWVkU2NhbGluZykKICAgICAgICAgY29udGV4dC0+cmVzdG9yZSgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMDc2ODEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRl
ICJSZW5kZXJUYXJnZXRIZWxwZXIuaCIKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlIDxkMmQx
Lmg+CiAjaW5jbHVkZSA8ZDJkMWVmZmVjdHMuaD4KQEAgLTcxLDcgKzcyLDEzIEBAIElEMkQxRmFj
dG9yeSogR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWMKIHsKICAgICBzdGF0aWMgSUQyRDFGYWN0
b3J5KiBkaXJlY3QyREZhY3RvcnkgPSBudWxscHRyOwogICAgIGlmICghZGlyZWN0MkRGYWN0b3J5
KSB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBEMkQxX0ZBQ1RPUllfT1BUSU9OUyBvcHRpb25z
ID0geyB9OworICAgICAgICBvcHRpb25zLmRlYnVnTGV2ZWwgPSBEMkQxX0RFQlVHX0xFVkVMX0lO
Rk9STUFUSU9OOworICAgICAgICBIUkVTVUxUIGhyID0gRDJEMUNyZWF0ZUZhY3RvcnkoRDJEMV9G
QUNUT1JZX1RZUEVfTVVMVElfVEhSRUFERUQsIG9wdGlvbnMsICZkaXJlY3QyREZhY3RvcnkpOwor
I2Vsc2UKICAgICAgICAgSFJFU1VMVCBociA9IEQyRDFDcmVhdGVGYWN0b3J5KEQyRDFfRkFDVE9S
WV9UWVBFX01VTFRJX1RIUkVBREVELCAmZGlyZWN0MkRGYWN0b3J5KTsKKyNlbmRpZgogICAgICAg
ICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKICAgICB9CiAKQEAgLTk1LDEyICsxMDIs
MTIgQEAgSUQyRDFSZW5kZXJUYXJnZXQqIEdyYXBoaWNzQ29udGV4dDo6ZGVmYQogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldERpZEJlZ2luRHJhdyhib29sIGRpZEJlZ2luRHJhdykKIHsKICAgICBS
RUxFQVNFX0FTU0VSVChtX2RhdGEpOwotICAgIG1fZGF0YS0+bV9kaWRCZWdpbkRyYXcgPSBkaWRC
ZWdpbkRyYXc7CisgICAgbV9kYXRhLT5zZXREaWRCZWdpbkRyYXcoZGlkQmVnaW5EcmF3KTsKIH0K
IAogYm9vbCBHcmFwaGljc0NvbnRleHQ6OmRpZEJlZ2luRHJhdygpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fZGF0YS0+bV9kaWRCZWdpbkRyYXc7CisgICAgcmV0dXJuIG1fZGF0YS0+ZGlkQmVnaW5E
cmF3KCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoSERDIGhkYywg
Ym9vbCBoYXNBbHBoYSkKQEAgLTEwOCw3ICsxMTUsMjMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnBsYXRmb3JtSW5pdChIREMgaAogICAgIGlmICghaGRjKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBDT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IHJlbmRlclRhcmdldDsKKyAgICBIQklUTUFQIGJp
dG1hcCA9IHN0YXRpY19jYXN0PEhCSVRNQVA+KEdldEN1cnJlbnRPYmplY3QoaGRjLCBPQkpfQklU
TUFQKSk7CisKKyAgICBESUJQaXhlbERhdGEgcGl4ZWxEYXRhKGJpdG1hcCk7CisKKyAgICBhdXRv
IHRhcmdldFByb3BlcnRpZXMgPSBEMkQxOjpSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7CisgICAg
dGFyZ2V0UHJvcGVydGllcy5waXhlbEZvcm1hdCA9IEQyRDE6OlBpeGVsRm9ybWF0KERYR0lfRk9S
TUFUX0I4RzhSOEE4X1VOT1JNLCBEMkQxX0FMUEhBX01PREVfSUdOT1JFKTsKKworICAgIENPTVB0
cjxJRDJEMURDUmVuZGVyVGFyZ2V0PiByZW5kZXJUYXJnZXQ7CisgICAgSFJFU1VMVCBociA9IHN5
c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRENSZW5kZXJUYXJnZXQoJnRhcmdldFByb3BlcnRpZXMsICZy
ZW5kZXJUYXJnZXQpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUkVDVCBjbGllbnRSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBwaXhlbERhdGEuc2l6
ZSgpKTsKKyAgICBociA9IHJlbmRlclRhcmdldC0+QmluZERDKGhkYywgJmNsaWVudFJlY3QpOwor
ICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9kYXRhID0g
bmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShyZW5kZXJUYXJnZXQuZ2V0KCkpOwog
ICAgIG1fZGF0YS0+bV9oZGMgPSBoZGM7CiAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0
YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0YXRlLgpAQCAtMjU3LDYgKzI4MCwyNCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JEb2N1bWVuCiB7CiB9CiAKK0dyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKElEMkQxUmVu
ZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCisgICAgOiBtX3JlbmRlclRhcmdldChyZW5kZXJUYXJn
ZXQpCit7CisgICAgaWYgKCFtX3JlbmRlclRhcmdldCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
SFJFU1VMVCBociA9IG1fcmVuZGVyVGFyZ2V0LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDJE
MUdkaUludGVyb3BSZW5kZXJUYXJnZXQpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1fZ2Rp
UmVuZGVyVGFyZ2V0KSk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Cit9CisK
K0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZSgpCit7CisgICAgaWYgKCFtX3JlbmRlclRhcmdldCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQVNTRVJUKCFtX2JlZ2luRHJhd0NvdW50LnVuc2FmZUdldCgpKTsKK30KKwogQ09NUHRy
PElEMkQxU29saWRDb2xvckJydXNoPiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmJy
dXNoV2l0aENvbG9yKGNvbnN0IEQyRDFfQ09MT1JfRiYgY29sb3IpCiB7CiAgICAgUkdCQTMyIGNv
bG9yS2V5ID0gbWFrZVJHQkEzMkZyb21GbG9hdHMoY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwg
Y29sb3IuYSk7CkBAIC0yODcsMTIgKzMyOCw1NiBAQCBJRDJEMVNvbGlkQ29sb3JCcnVzaCogR3Jh
cGhpY3NDb250ZXh0OjpiCiAgICAgcmV0dXJuIG1fZGF0YS0+YnJ1c2hXaXRoQ29sb3IoY29sb3JX
aXRoR2xvYmFsQWxwaGEoY29sb3IpKS5nZXQoKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU6OnNldERpZEJlZ2luRHJhdyhib29sIGRpZEJlZ2luRHJhdykKK3sKKyAg
ICArK21fYmVnaW5EcmF3Q291bnQ7Cit9CisKK0hEQyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU6OmhkY0ZvclJlbmRlclRhcmdldCgpCit7CisgICAgQVNTRVJUKGRpZEJlZ2luRHJhdygp
KTsKKworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ2RpUmVuZGVyVGFyZ2V0KTsKKworICAgIEhEQyBo
ZGMgPSBudWxscHRyOworICAgIEhSRVNVTFQgaHIgPSBtX2dkaVJlbmRlclRhcmdldC0+R2V0REMo
RDJEMV9EQ19JTklUSUFMSVpFX01PREVfQ09QWSwgJmhkYyk7CisgICAgaWYgKCFTVUNDRUVERUQo
aHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBoZGM7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpyZWxlYXNlSGRjRm9yUmVuZGVyVGFy
Z2V0KCkKK3sKKyAgICBBU1NFUlQoZGlkQmVnaW5EcmF3KCkpOworCisgICAgUkVMRUFTRV9BU1NF
UlQobV9nZGlSZW5kZXJUYXJnZXQpOworCisgICAgSFJFU1VMVCBociA9IG1fZ2RpUmVuZGVyVGFy
Z2V0LT5SZWxlYXNlREMobnVsbHB0cik7Cit9CisKK0hEQyBHcmFwaGljc0NvbnRleHQ6OmhkY0Zv
clJlbmRlclRhcmdldCgpCit7CisgICAgcmV0dXJuIG1fZGF0YS0+aGRjRm9yUmVuZGVyVGFyZ2V0
KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlSGRjRm9yUmVuZGVyVGFyZ2V0
KCkKK3sKKyAgICBtX2RhdGEtPnJlbGVhc2VIZGNGb3JSZW5kZXJUYXJnZXQoKTsKK30KKwogdm9p
ZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogeworICAgIC8vIEluIEQyRCwgd2UgY2FuIG9ubHkgY2xpcCBpbiB0aGUgY29udGV4dCBv
ZiBhICdCZWdpbkRyYXcnLCBhbmQgdGhlIGNsaXAgY2FuCisgICAgLy8gb25seSBsaXZlIGFzIGxv
bmcgYXMgdGhlIGRyYXcgaXMgaGFwcGVuaW5nLgorICAgIGlmICghZGlkQmVnaW5EcmF3KCkpCisg
ICAgICAgIGJlZ2luRHJhdygpOworCiAgICAgaWYgKG1fcmVuZGVyU3RhdGVzLmlzRW1wdHkoKSkK
ICAgICAgICAgc2F2ZSgpOwogCiAgICAgbV9yZW5kZXJUYXJnZXQtPlB1c2hBeGlzQWxpZ25lZENs
aXAocmVjdCwgRDJEMV9BTlRJQUxJQVNfTU9ERV9QRVJfUFJJTUlUSVZFKTsKKwogICAgIG1fcmVu
ZGVyU3RhdGVzLmxhc3QoKS5tX2NsaXBzLmFwcGVuZChHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU6OkF4aXNBbGlnbmVkQ2xpcCk7CiB9CiAKQEAgLTMwMyw2ICszODgsMTEgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNsaQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZTo6Y2xpcChJRDJEMUdlb21ldHJ5KiBwYXRoKQogeworICAgIC8vIElu
IEQyRCwgd2UgY2FuIG9ubHkgY2xpcCBpbiB0aGUgY29udGV4dCBvZiBhICdCZWdpbkRyYXcnLCBh
bmQgdGhlIGNsaXAgY2FuCisgICAgLy8gb25seSBsaXZlIGFzIGxvbmcgYXMgdGhlIGRyYXcgaXMg
aGFwcGVuaW5nLgorICAgIGlmICghZGlkQmVnaW5EcmF3KCkpCisgICAgICAgIGJlZ2luRHJhdygp
OworCiAgICAgQVNTRVJUKG1fcmVuZGVyU3RhdGVzLnNpemUoKSk7CiAgICAgaWYgKCFtX3JlbmRl
clN0YXRlcy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMzOCw2ICs0MjgsMTcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmZsdQogICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZTo6YmVnaW5EcmF3KCkKK3sKKyAgICBBU1NFUlQobV9yZW5kZXJUYXJnZXQuZ2V0KCkpOworICAg
IGlmIChkaWRCZWdpbkRyYXcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yZW5kZXJUYXJn
ZXQtPkJlZ2luRHJhdygpOworCisgICAgKyttX2JlZ2luRHJhd0NvdW50OworfQorCiB2b2lkIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kRHJhdygpCiB7CiAgICAgQVNTRVJUKG1f
cmVuZGVyVGFyZ2V0LmdldCgpKTsKQEAgLTM0Niw2ICs0NDcsOCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kCiAKICAgICBpZiAoIVNVQ0NFRURFRChocikpCiAgICAg
ICAgIFdURkxvZ0Fsd2F5cygiRmFpbGVkIGluIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZTo6ZW5kRHJhdzogaHI9JWxkLCBmaXJzdD0lbGQsIHNlY29uZD0lbGQiLCBociwgZmlyc3QsIHNl
Y29uZCk7CisKKyAgICAtLW1fYmVnaW5EcmF3Q291bnQ7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlOjpyZXN0b3JlKCkKQEAgLTQ0Miw2ICs1NDUsMjAgQEAgSUQyRDFC
cnVzaCogR3JhcGhpY3NDb250ZXh0OjpwYXR0ZXJuRmlsbAogICAgIHJldHVybiBtX2RhdGEtPm1f
cGF0dGVybkZpbGxCcnVzaC5nZXQoKTsKIH0KIAorYm9vbCBHcmFwaGljc0NvbnRleHQ6OnRlbXBv
cmFyeUJlZ2luRHJhd0lmTmVlZGVkKCkKK3sKKyAgICBpZiAobV9kYXRhLT5kaWRCZWdpbkRyYXco
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9kYXRhLT5iZWdpbkRyYXcoKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZERyYXcoKQorewor
ICAgIG1fZGF0YS0+ZW5kRHJhdygpOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Bh
dHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkgfHwgIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCkBAIC02NzEs
NiArNzg4LDExIEBAIElEMkQxU3Ryb2tlU3R5bGUqIEdyYXBoaWNzQ29udGV4dFBsYXRmb3IKICAg
ICByZXR1cm4gbV9kMmRTdHJva2VTdHlsZS5nZXQoKTsKIH0KIAorSUQyRDFTdHJva2VTdHlsZSog
R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZVN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9kYXRhLT5zdHJva2VTdHlsZSgpOworfQorCiAvLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBk
cmF3IGJvcmRlcnMuCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7CkBAIC04MjEsMTkgKzk0
MywxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3V2l0aG91dFNoYWRvdyhjb25zdCBGbG9hdFJlY3QmIC8qYm91
bmRpbmdSZWN0Ki8sIGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCop
PiYgZHJhd0NvbW1hbmRzKQogewotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgp
OwotCi0gICAgaWYgKCFkaWRCZWdpbkRyYXcoKSkKLSAgICAgICAgY29udGV4dC0+QmVnaW5EcmF3
KCk7Ci0KLSAgICBkcmF3Q29tbWFuZHMoY29udGV4dCk7Ci0KLSAgICBpZiAoIWRpZEJlZ2luRHJh
dygpKQotICAgICAgICBtX2RhdGEtPmVuZERyYXcoKTsKKyAgICBSZW5kZXJUYXJnZXRIZWxwZXIg
aGVscGVyKCp0aGlzKTsKKyAgICBkcmF3Q29tbWFuZHMocGxhdGZvcm1Db250ZXh0KCkpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1dpdGhTaGFkb3coY29uc3QgRmxvYXRSZWN0JiBi
b3VuZGluZ1JlY3QsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCop
PiYgZHJhd0NvbW1hbmRzKQogeworICAgIFJlbmRlclRhcmdldEhlbHBlciBoZWxwZXIoKnRoaXMp
OworCiAgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICAvLyBSZW5k
ZXIgdGhlIGN1cnJlbnQgZ2VvbWV0cnkgdG8gYSBiaXRtYXAgY29udGV4dApAQCAtODg2LDEwICsx
MDAzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdXaXRoU2hhZG93KGNvbgogICAgIGF1
dG8gZmxpcCA9IEQyRDE6Ok1hdHJpeDN4MkY6OlNjYWxlKEQyRDE6OlNpemVGKDEuMGYsIC0xLjBm
KSk7CiAgICAgZGV2aWNlQ29udGV4dC0+U2V0VHJhbnNmb3JtKGN0bSAqIGZsaXAgKiB0cmFuc2xh
dGUpOwogCi0gICAgZGV2aWNlQ29udGV4dC0+QmVnaW5EcmF3KCk7CiAgICAgZGV2aWNlQ29udGV4
dC0+RHJhd0ltYWdlKGNvbXBvc2l0b3IuZ2V0KCksIEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX0xJ
TkVBUik7Ci0gICAgaHIgPSBkZXZpY2VDb250ZXh0LT5FbmREcmF3KCk7Ci0gICAgQVNTRVJUKFNV
Q0NFRURFRChocikpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKQEAgLTEwODAsOSArMTE5NCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpw
bGF0Zm9ybUZpbGxSb3VuZGUKICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICB9CiAKLSAg
ICBpZiAoIWRpZEJlZ2luRHJhdygpKQotICAgICAgICBjb250ZXh0LT5CZWdpbkRyYXcoKTsKLSAg
ICAKKyAgICBSZW5kZXJUYXJnZXRIZWxwZXIgaGVscGVyKCp0aGlzKTsKKwogICAgIGNvbnRleHQt
PlNldFRhZ3MoMSwgX19MSU5FX18pOwogCiAgICAgY29uc3QgRmxvYXRSZWN0JiByID0gcmVjdC5y
ZWN0KCk7CkBAIC0xMTAyLDkgKzEyMTUsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZv
cm1GaWxsUm91bmRlCiAgICAgICAgIGZpbGxQYXRoKHBhdGgpOwogICAgIH0KIAotICAgIGlmICgh
ZGlkQmVnaW5EcmF3KCkpCi0gICAgICAgIG1fZGF0YS0+ZW5kRHJhdygpOwotCiAgICAgaWYgKGRy
YXdPd25TaGFkb3cpCiAgICAgICAgIHN0YXRlU2F2ZXIucmVzdG9yZSgpOwogfQpAQCAtMTEyMSw4
ICsxMjMxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZQogCiAg
ICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAoIWRpZEJlZ2lu
RHJhdygpKQotICAgICAgICBjb250ZXh0LT5CZWdpbkRyYXcoKTsKKyAgICBSZW5kZXJUYXJnZXRI
ZWxwZXIgaGVscGVyKCp0aGlzKTsKIAogICAgIGNvbnRleHQtPlNldFRhZ3MoMSwgX19MSU5FX18p
OwogCkBAIC0xMTUyLDkgKzEyNjEsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RX
aXRoUm91bmRlCiAKICAgICBmaWxsUGF0aChwYXRoKTsKIAotICAgIGlmICghZGlkQmVnaW5EcmF3
KCkpCi0gICAgICAgIG1fZGF0YS0+ZW5kRHJhdygpOwotCiAgICAgaWYgKGRyYXdPd25TaGFkb3cp
CiAgICAgICAgIHN0YXRlU2F2ZXIucmVzdG9yZSgpOwogCkBAIC0xMjQ4LDE0ICsxMzU0LDEzIEBA
IEludFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY28KICAgICAgICAgcmV0dXJu
IEludFJlY3QoLTIwNDgsIC0yMDQ4LCA0MDk2LCA0MDk2KTsgLy8gRklYTUU6IGRpc3BsYXkgbGlz
dHMuCiAgICAgfQogCi0gICAgRDJEMV9SRUNUX0YgZDJkQ2xpcEJvdW5kcyA9IEQyRDE6OkluZmlu
aXRlUmVjdCgpOwotICAgIEZsb2F0UmVjdCBjbGlwQm91bmRzKGQyZENsaXBCb3VuZHMubGVmdCwg
ZDJkQ2xpcEJvdW5kcy50b3AsIGQyZENsaXBCb3VuZHMucmlnaHQgLSBkMmRDbGlwQm91bmRzLmxl
ZnQsIGQyZENsaXBCb3VuZHMuYm90dG9tIC0gZDJkQ2xpcEJvdW5kcy50b3ApOworICAgIEQyRDFf
U0laRV9GIGNsaXBTaXplOworICAgIGlmIChtX2RhdGEtPmNsaXBMYXllcigpKQorICAgICAgICBj
bGlwU2l6ZSA9IG1fZGF0YS0+Y2xpcExheWVyKCktPkdldFNpemUoKTsKKyAgICBlbHNlCisgICAg
ICAgIGNsaXBTaXplID0gcGxhdGZvcm1Db250ZXh0KCktPkdldFNpemUoKTsKIAotICAgIGlmICht
X2RhdGEtPmNsaXBMYXllcigpKSB7Ci0gICAgICAgIGF1dG8gY2xpcFNpemUgPSBtX2RhdGEtPmNs
aXBMYXllcigpLT5HZXRTaXplKCk7Ci0gICAgICAgIGNsaXBCb3VuZHMuc2V0V2lkdGgoY2xpcFNp
emUud2lkdGgpOwotICAgICAgICBjbGlwQm91bmRzLnNldEhlaWdodChjbGlwU2l6ZS5oZWlnaHQp
OwotICAgIH0KKyAgICBGbG9hdFJlY3QgY2xpcEJvdW5kcyhJbnRQb2ludCgpLCBjbGlwU2l6ZSk7
CiAKICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChjbGlwQm91bmRzKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGVEaXJlY3QyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5oCShy
ZXZpc2lvbiAyMDc2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGQyZDFlZmZlY3RzLmg+CiAjaW5jbHVkZSA8ZDJk
MWhlbHBlci5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFy
aXRobWV0aWMuaD4KICNpbmNsdWRlIDx3dGYvVGlueUxSVUNhY2hlLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTM5LDE2ICs0MCwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShJRDJEMVJl
bmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQotICAgICAgICA6IG1fcmVuZGVyVGFyZ2V0KHJlbmRl
clRhcmdldCkKLSAgICB7Ci0gICAgfQorICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZShJRDJEMVJlbmRlclRhcmdldCopOworICAgIH5HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGUoKTsKIAogICAgIGVudW0gRGlyZWN0MkRMYXllclR5cGUgeyBBeGlzQWxpZ25lZENsaXAsIExh
eWVyQ2xpcCB9OwogCiAgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZvaWQg
Y2xpcChjb25zdCBQYXRoJik7CiAgICAgdm9pZCBjbGlwKElEMkQxR2VvbWV0cnkqKTsKKyAgICB2
b2lkIGJlZ2luRHJhdygpOwogICAgIHZvaWQgZW5kRHJhdygpOwogICAgIHZvaWQgZmx1c2goKTsK
ICAgICB2b2lkIHNhdmUoKTsKQEAgLTc1LDExICs3NSwxNyBAQCBwdWJsaWM6CiAKICAgICBDT01Q
dHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IGJydXNoV2l0aENvbG9yKGNvbnN0IEQyRDFfQ09MT1Jf
RiYpOwogCisgICAgSERDIGhkY0ZvclJlbmRlclRhcmdldCgpOworICAgIHZvaWQgcmVsZWFzZUhk
Y0ZvclJlbmRlclRhcmdldCgpOworCisgICAgYm9vbCBkaWRCZWdpbkRyYXcoKSBjb25zdCB7IHJl
dHVybiBtX2JlZ2luRHJhd0NvdW50LnVuc2FmZUdldCgpOyB9CisgICAgdm9pZCBzZXREaWRCZWdp
bkRyYXcoYm9vbCk7CisKICAgICBIREMgbV9oZGMgeyBudWxscHRyIH07CiAgICAgRDJEMV9CTEVO
RF9NT0RFIG1fYmxlbmRNb2RlIHsgRDJEMV9CTEVORF9NT0RFX01VTFRJUExZIH07CiAgICAgRDJE
MV9DT01QT1NJVEVfTU9ERSBtX2NvbXBvc2l0ZU1vZGUgeyBEMkQxX0NPTVBPU0lURV9NT0RFX1NP
VVJDRV9PVkVSIH07CisgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV9iZWdpbkRyYXdDb3VudCB7IDAg
fTsKICAgICBib29sIG1fc2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cyB7IGZhbHNlIH07Ci0gICAg
Ym9vbCBtX2RpZEJlZ2luRHJhdyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3N0cm9rZVN5bGVJc0Rp
cnR5IHsgZmFsc2UgfTsKIAogICAgIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4gbV9zb2xp
ZFN0cm9rZUJydXNoOwpAQCAtOTEsNiArOTcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVjb21w
dXRlU3Ryb2tlU3R5bGUoKTsKIAogICAgIENPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gbV9yZW5k
ZXJUYXJnZXQ7CisgICAgQ09NUHRyPElEMkQxR2RpSW50ZXJvcFJlbmRlclRhcmdldD4gbV9nZGlS
ZW5kZXJUYXJnZXQ7CiAgICAgSGFzaE1hcDxSR0JBMzIsIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JC
cnVzaD4+IG1fc29saWRDb2xvcmVkQnJ1c2hDYWNoZTsKICAgICBDT01QdHI8SUQyRDFTb2xpZENv
bG9yQnJ1c2g+IG1fd2hpdGVCcnVzaDsKICAgICBDT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+
IG1femVyb0JydXNoOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCShyZXZp
c2lvbiAyMDc2ODApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBA
CiAjaW5jbHVkZSAiSFduZERDLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUmVuZGVyVGFyZ2V0SGVscGVyLmgiCiAjaW5jbHVk
ZSA8ZDJkMS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1
bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KQEAgLTYzLDI3ICs2NCwxOSBAQCBSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0CiAgICAgYXV0byBiaXRtYXBEQyA9IGFkb3B0
R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKHdpbmRvd0RDKSk7CiAgICAgSEdESU9CSiBv
bGRCaXRtYXAgPSA6OlNlbGVjdE9iamVjdChiaXRtYXBEQy5nZXQoKSwgYml0bWFwLmdldCgpKTsK
IAotICAgIEhSRVNVTFQgaHI7CisgICAgUmVuZGVyVGFyZ2V0SGVscGVyIGhlbHBlcigqY29udGV4
dCk7CiAKLSAgICBDT01QdHI8SUQyRDFHZGlJbnRlcm9wUmVuZGVyVGFyZ2V0PiBnZGlSZW5kZXJU
YXJnZXQ7Ci0gICAgaHIgPSBwbGF0Zm9ybUNvbnRleHQtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9m
KElEMkQxR2RpSW50ZXJvcFJlbmRlclRhcmdldCksICh2b2lkKiopJmdkaVJlbmRlclRhcmdldCk7
Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcGxh
dGZvcm1Db250ZXh0LT5CZWdpbkRyYXcoKTsKLQotICAgIEhEQyBoZGMgPSBudWxscHRyOwotICAg
IGhyID0gZ2RpUmVuZGVyVGFyZ2V0LT5HZXREQyhEMkQxX0RDX0lOSVRJQUxJWkVfTU9ERV9DT1BZ
LCAmaGRjKTsKKyAgICBIREMgaGRjID0gY29udGV4dC0+aGRjRm9yUmVuZGVyVGFyZ2V0KCk7CiAK
ICAgICBCT09MIG9rID0gOjpCaXRCbHQoYml0bWFwREMuZ2V0KCksIDAsIDAsIHJlY3Qud2lkdGgo
KSwgcmVjdC5oZWlnaHQoKSwgaGRjLCByZWN0LngoKSwgcmVjdC55KCksIFNSQ0NPUFkpOwogCi0g
ICAgaHIgPSBnZGlSZW5kZXJUYXJnZXQtPlJlbGVhc2VEQyhudWxscHRyKTsKLQotICAgIGhyID0g
cGxhdGZvcm1Db250ZXh0LT5FbmREcmF3KCk7CisgICAgY29udGV4dC0+cmVsZWFzZUhkY0ZvclJl
bmRlclRhcmdldCgpOwogCiAgICAgaWYgKCFvaykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
KyAgICBoZWxwZXIuZW5kRHJhdygpOworCiAgICAgbWVtY3B5KHJlc3VsdC0+ZGF0YSgpLCBwaXhl
bHMsIDQgKiByZWN0LmFyZWEoKSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9OYXRpdmVJ
bWFnZURpcmVjdDJELmNwcAkocmV2aXNpb24gMjA3NjgwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUmVu
ZGVyVGFyZ2V0SGVscGVyLmgiCiAjaW5jbHVkZSA8ZDJkMS5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC04NSwxNCArODYsMTMgQEAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZl
SW1hZ2VQdAogCiAgICAgZmxvYXQgb3BhY2l0eSA9IDEuMGY7CiAKLSAgICBpZiAoIWNvbnRleHQu
ZGlkQmVnaW5EcmF3KCkpCi0gICAgICAgIHBsYXRmb3JtQ29udGV4dC0+QmVnaW5EcmF3KCk7Cisg
ICAgYm9vbCB0ZW1wb3JhcnlEcmF3ID0gY29udGV4dC50ZW1wb3JhcnlCZWdpbkRyYXdJZk5lZWRl
ZCgpOwogCiAgICAgcGxhdGZvcm1Db250ZXh0LT5EcmF3Qml0bWFwKGltYWdlLmdldCgpLCBkZXN0
UmVjdCwgb3BhY2l0eSwgRDJEMV9CSVRNQVBfSU5URVJQT0xBVElPTl9NT0RFX05FQVJFU1RfTkVJ
R0hCT1IsIGFkanVzdGVkU3JjUmVjdCk7CiAKICAgICBIUkVTVUxUIGhyID0gU19PSzsKLSAgICBp
ZiAoIWNvbnRleHQuZGlkQmVnaW5EcmF3KCkpCi0gICAgICAgIGhyID0gcGxhdGZvcm1Db250ZXh0
LT5FbmREcmF3KCk7CisgICAgaWYgKHRlbXBvcmFyeURyYXcpCisgICAgICAgIGNvbnRleHQuZW5k
RHJhdygpOwogICAgIGVsc2UKICAgICAgICAgaHIgPSBwbGF0Zm9ybUNvbnRleHQtPkZsdXNoKCk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0
MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9QYXRoRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMDc2ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDIsNiArNDIsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgaW5saW5lIElE
MkQxUmVuZGVyVGFyZ2V0KiBzY3JhdGNoUmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBzdGF0aWMgQ09N
UHRyPElEMkQxUmVuZGVyVGFyZ2V0PiByZW5kZXJUYXJnZXQgPSBhZG9wdENPTShHcmFwaGljc0Nv
bnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKSk7CisgICAgcmV0dXJuIHJlbmRlclRhcmdldC5n
ZXQoKTsKK30KIAogUGF0aCBQYXRoOjpwb2x5Z29uUGF0aEZyb21Qb2ludHMoY29uc3QgVmVjdG9y
PEZsb2F0UG9pbnQ+JiBwb2ludHMpCiB7CkBAIC03MCw4ICs3NSw2IEBAIFBhdGg6OlBhdGgoKQog
CiBQYXRoOjp+UGF0aCgpCiB7Ci0gICAgaWYgKG1fcGF0aCkKLSAgICAgICAgbV9wYXRoLT5SZWxl
YXNlKCk7CiB9CiAKIFBsYXRmb3JtUGF0aFB0ciBQYXRoOjplbnN1cmVQbGF0Zm9ybVBhdGgoKQpA
QCAtODMsNyArODYsNyBAQCBQbGF0Zm9ybVBhdGhQdHIgUGF0aDo6ZW5zdXJlUGxhdGZvcm1QYXRo
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICByZXR1cm4gbV9wYXRo
OworICAgIHJldHVybiBtX3BhdGguZ2V0KCk7CiB9CiAKIHZvaWQgUGF0aDo6YXBwZW5kR2VvbWV0
cnkoSUQyRDFHZW9tZXRyeSogZ2VvbWV0cnkpCkBAIC0xMDEsNyArMTA0LDcgQEAgdm9pZCBQYXRo
OjphcHBlbmRHZW9tZXRyeShJRDJEMUdlb21ldHJ5KgogCiAgICAgYXV0byBmaWxsTW9kZSA9IG1f
cGF0aCA/IG1fcGF0aC0+R2V0RmlsbE1vZGUoKSA6IEQyRDFfRklMTF9NT0RFX1dJTkRJTkc7CiAK
LSAgICBDT01QdHI8SUQyRDFHZW9tZXRyeUdyb3VwPiBwcm90ZWN0ZWRQYXRoID0gYWRvcHRDT00o
bV9wYXRoKTsKKyAgICBDT01QdHI8SUQyRDFHZW9tZXRyeUdyb3VwPiBwcm90ZWN0ZWRQYXRoID0g
bV9wYXRoOwogICAgIG1fcGF0aCA9IG51bGxwdHI7CiAKICAgICBIUkVTVUxUIGhyID0gR3JhcGhp
Y3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUdlb21ldHJ5R3JvdXAoZmlsbE1vZGUs
IGdlb21ldHJpZXMuZGF0YSgpLCBnZW9tZXRyaWVzLnNpemUoKSwgJm1fcGF0aCk7CkBAIC0xNjIs
MTMgKzE2NSw3IEBAIFBhdGg6OlBhdGgoY29uc3QgUGF0aCYgb3RoZXIpCiAKIFBhdGgmIFBhdGg6
Om9wZXJhdG9yPShjb25zdCBQYXRoJiBvdGhlcikKIHsKLSAgICBpZiAobV9wYXRoKQotICAgICAg
ICBtX3BhdGgtPlJlbGVhc2UoKTsKLQogICAgIG1fcGF0aCA9IG90aGVyLm1fcGF0aDsKLSAgICBp
ZiAobV9wYXRoKQotICAgICAgICBtX3BhdGgtPkFkZFJlZigpOwotCiAgICAgbV9hY3RpdmVQYXRo
ID0gb3RoZXIubV9hY3RpdmVQYXRoOwogICAgIG1fYWN0aXZlUGF0aEdlb21ldHJ5ID0gb3RoZXIu
bV9hY3RpdmVQYXRoR2VvbWV0cnk7CiAKQEAgLTE3Nyw4ICsxNzQsNiBAQCBQYXRoJiBQYXRoOjpv
cGVyYXRvcj0oY29uc3QgUGF0aCYgb3RoZXIpCiAKIEhSRVNVTFQgUGF0aDo6aW5pdGlhbGl6ZVBh
dGhTdGF0ZSgpCiB7Ci0gICAgaWYgKG1fcGF0aCkKLSAgICAgICAgbV9wYXRoLT5SZWxlYXNlKCk7
CiAgICAgbV9wYXRoID0gbnVsbHB0cjsKICAgICBtX2FjdGl2ZVBhdGggPSBudWxscHRyOwogICAg
IG1fYWN0aXZlUGF0aEdlb21ldHJ5ID0gbnVsbHB0cjsKQEAgLTIzMSwxMCArMjI2LDE3IEBAIGJv
b2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVBcHAKICAgICBpZiAoaXNOdWxsKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFVOVVNFRF9QQVJBTShhcHBsaWVyKTsKLSAg
ICBVTlVTRURfUEFSQU0ocG9pbnQpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOworICAgIEFTU0VSVChhcHBsaWVyKTsKKworICAgIEdyYXBoaWNzQ29udGV4dCBzY3Jh
dGNoQ29udGV4dChzY3JhdGNoUmVuZGVyVGFyZ2V0KCkpOworICAgIGFwcGxpZXItPnN0cm9rZVN0
eWxlKCZzY3JhdGNoQ29udGV4dCk7CisKKyAgICBCT09MIGNvbnRhaW5zUG9pbnQgPSBmYWxzZTsK
KyAgICBIUkVTVUxUIGhyID0gbV9wYXRoLT5TdHJva2VDb250YWluc1BvaW50KHBvaW50LCBzY3Jh
dGNoQ29udGV4dC5zdHJva2VUaGlja25lc3MoKSwgc2NyYXRjaENvbnRleHQucGxhdGZvcm1TdHJv
a2VTdHlsZSgpLCBudWxscHRyLCAxLjBmLCAmY29udGFpbnNQb2ludCk7CisgICAgaWYgKCFTVUND
RUVERUQoaHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gY29udGFpbnNQ
b2ludDsKIH0KIAogdm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQpA
QCAtMjU3LDcgKzI1OSw3IEBAIHZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5z
Zm8KIAogICAgIGNvbnN0IEQyRDFfTUFUUklYXzNYMl9GJiBkMmRUcmFuc2Zvcm0gPSBzdGF0aWNf
Y2FzdDxjb25zdCBEMkQxX01BVFJJWF8zWDJfRj4odHJhbnNmb3JtKTsKICAgICBDT01QdHI8SUQy
RDFUcmFuc2Zvcm1lZEdlb21ldHJ5PiB0cmFuc2Zvcm1lZFBhdGg7Ci0gICAgaWYgKCFTVUNDRUVE
RUQoR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZVRyYW5zZm9ybWVkR2Vv
bWV0cnkobV9wYXRoLCBkMmRUcmFuc2Zvcm0sICZ0cmFuc2Zvcm1lZFBhdGgpKSkKKyAgICBpZiAo
IVNVQ0NFRURFRChHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlVHJhbnNm
b3JtZWRHZW9tZXRyeShtX3BhdGguZ2V0KCksIGQyZFRyYW5zZm9ybSwgJnRyYW5zZm9ybWVkUGF0
aCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8SUQyRDFHZW9tZXRyeSo+IGdlb21l
dHJpZXM7CkBAIC0yNzEsNyArMjczLDYgQEAgdm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgQWZm
aW5lVHJhbnNmbwogCiAgICAgYXV0byBmaWxsTW9kZSA9IG1fcGF0aC0+R2V0RmlsbE1vZGUoKTsK
IAotICAgIG1fcGF0aC0+UmVsZWFzZSgpOwogICAgIG1fcGF0aCA9IG51bGxwdHI7CiAKICAgICBI
UkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUdlb21l
dHJ5R3JvdXAoZmlsbE1vZGUsIGdlb21ldHJpZXMuZGF0YSgpLCBnZW9tZXRyaWVzLnNpemUoKSwg
Jm1fcGF0aCk7CkBAIC00NzYsNyArNDc3LDcgQEAgdm9pZCBQYXRoOjphZGRFbGxpcHNlKEZsb2F0
UG9pbnQgcCwgZmxvYQogdm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcikK
IHsKICAgICBDT01QdHI8SUQyRDFFbGxpcHNlR2VvbWV0cnk+IGVsbGlwc2U7Ci0gICAgSFJFU1VM
VCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVFbGxpcHNlR2Vv
bWV0cnkoRDJEMTo6RWxsaXBzZShEMkQxOjpQb2ludDJGKHIuY2VudGVyKCkueCgpLCByLmNlbnRl
cigpLnkoKSksIHIud2lkdGgoKSwgci5oZWlnaHQoKSksICZlbGxpcHNlKTsKKyAgICBIUkVTVUxU
IGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUVsbGlwc2VHZW9t
ZXRyeShEMkQxOjpFbGxpcHNlKHIuY2VudGVyKCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSksICZl
bGxpcHNlKTsKICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKICAgICBhcHBlbmRH
ZW9tZXRyeShlbGxpcHNlLmdldCgpKTsKIH0KQEAgLTQ5OCw5ICs0OTksNiBAQCB2b2lkIFBhdGg6
OmNsZWFyKCkKICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICht
X3BhdGgpCi0gICAgICAgIG1fcGF0aC0+UmVsZWFzZSgpOwotCiAgICAgbV9wYXRoID0gbnVsbHB0
cjsKICAgICBtX2FjdGl2ZVBhdGggPSBudWxscHRyOwogICAgIG1fYWN0aXZlUGF0aEdlb21ldHJ5
ID0gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9S
ZW5kZXJUYXJnZXRIZWxwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vUmVuZGVyVGFyZ2V0SGVscGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1JlbmRlclRhcmdldEhlbHBlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlclRhcmdldEhlbHBl
ciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVuZGVyVGFyZ2V0SGVscGVyKTsKK3B1Ymxp
YzoKKyAgICBSZW5kZXJUYXJnZXRIZWxwZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorICAg
ICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgIHsKKyAgICAgICAgbV9kcmF3SXNTY29wZWQg
PSBjb250ZXh0LnRlbXBvcmFyeUJlZ2luRHJhd0lmTmVlZGVkKCk7CisgICAgfQorCisgICAgflJl
bmRlclRhcmdldEhlbHBlcigpCisgICAgeworICAgICAgICBlbmREcmF3KCk7CisgICAgfQorCisg
ICAgdm9pZCBlbmREcmF3KCkKKyAgICB7CisgICAgICAgIGlmIChtX2RyYXdJc1Njb3BlZCkKKyAg
ICAgICAgICAgIG1fY29udGV4dC5lbmREcmF3KCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdy
YXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OworICAgIGJvb2wgbV9kcmF3SXNTY29wZWQ7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUmVuZGVyVGFyZ2V0SGVscGVyLmgKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZm
ZWN0UmVuZGVyZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9G
aWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAJKHJldmlzaW9uIDIwNzY4MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQxNCw3ICs0MTQsMTEgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcjo6YmVnaW5G
aQogICAgICAgICBtX2hhdmVGaWx0ZXJFZmZlY3QgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KLSAgICAKKworI2lmIFVTRShESVJFQ1QyRCkKKyAgICBzb3VyY2VHcmFwaGlj
c0NvbnRleHQtPnRlbXBvcmFyeUJlZ2luRHJhd0lmTmVlZGVkKCk7CisjZW5kaWYKKwogICAgIC8v
IFRyYW5zbGF0ZSB0aGUgY29udGV4dCBzbyB0aGF0IHRoZSBjb250ZW50cyBvZiB0aGUgbGF5ZXIg
aXMgY2FwdHVyZWQgaW4gdGhlIG9mZnNjcmVlbiBtZW1vcnkgYnVmZmVyLgogICAgIHNvdXJjZUdy
YXBoaWNzQ29udGV4dC0+c2F2ZSgpOwogICAgIHNvdXJjZUdyYXBoaWNzQ29udGV4dC0+dHJhbnNs
YXRlKC1tX3BhaW50T2Zmc2V0LngoKSwgLW1fcGFpbnRPZmZzZXQueSgpKTsKQEAgLTQzNyw2ICs0
NDEsMTAgQEAgdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcjo6YXBwbHlGaQogICAgIExh
eW91dFJlY3QgZGVzdFJlY3QgPSBmaWx0ZXItPm91dHB1dFJlY3QoKTsKICAgICBkZXN0UmVjdC5t
b3ZlKG1fcGFpbnRPZmZzZXQueCgpLCBtX3BhaW50T2Zmc2V0LnkoKSk7CiAKKyNpZiBVU0UoRElS
RUNUMkQpCisgICAgZmlsdGVyLT5pbnB1dENvbnRleHQoKS0+ZW5kRHJhdygpOworI2VuZGlmCisK
ICAgICBpZiAoSW1hZ2VCdWZmZXIqIG91dHB1dEJ1ZmZlciA9IGZpbHRlci0+b3V0cHV0KCkpCiAg
ICAgICAgIGRlc3RpbmF0aW9uQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKm91dHB1dEJ1ZmZlciwg
c25hcFJlY3RUb0RldmljZVBpeGVscyhkZXN0UmVjdCwgbV9yZW5kZXJMYXllci0+cmVuZGVyZXIo
KS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292809</attachid>
            <date>2016-10-25 13:33:15 -0700</date>
            <delta_ts>2016-10-28 10:42:13 -0700</delta_ts>
            <desc>Patch v4</desc>
            <filename>filter4.patch</filename>
            <type>text/plain</type>
            <size>30670</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBACisyMDE2LTEwLTI0ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBJ
bXByb3ZlIHN1cHBvcnQgZm9yIGZpbHRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2Mzg5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyB1bnRpbCBEMkQgYmFja2VuZCBpcyB3b3Jr
aW5nLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oOgorICAgICAgICAoV2ViQ29yZTo6UGF0
aDo6cGxhdGZvcm1QYXRoKTogVXNlIGEgc21hcnQgcG9pbnRlciBmb3IgRDJEIHBhdGggdHlwZXMu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmZpbGwpOiBVc2UgbmV3ICd0ZW1wb3JhcnlCZWdp
bkRyYXdJZk5lZWRlZCcgc28gd2UgaGF2ZQorICAgICAgICBjb25zaXN0ZW50IEJlZ2luL0VuZCBE
cmF3IHBhaXJzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHREaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN5c3Rl
bUZhY3RvcnkpOiBBY3RpdmF0ZSB1c2VmdWwgRDJEIGxvZ2dpbmcgd2hlbiBidWlsZGluZworICAg
ICAgICBpbiBEZWJ1ZyBtb2RlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpw
bGF0Zm9ybUluaXQpOiBXaGVuIGNvbnN0cnVjdGluZyBmcm9tIGEgR0RJIEhEQywgY3JlYXRlCisg
ICAgICAgIGEgR0RJLWNvbXBhdGlibGUgRDJEIHJlbmRlciB0YXJnZXQgc28gYWxsIGRyYXdpbmcg
b3BlcmF0aW9ucyBnbyB0byB0aGUgc2FtZSBwbGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KTogV2hlbgorICAgICAgICBpbml0aWFsaXppbmcgZnJvbSBhIEQyRCBkZXZpY2UsIGNyZWF0ZSBh
IHNpbmdsZSBHREkgSW50ZXJvcCBvYmplY3QgdG8gdXNlIGZvciB0aGUKKyAgICAgICAgbGlmZXRp
bWUgb2YgdGhlIEdyYXBoaWNzQ29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSk6IEFk
ZCBhbgorICAgICAgICBhc3NlcnRpb24gdGhhdCB3ZSBhcmUgaW4gYSB2YWxpZCBzdGF0ZSB3aGVu
IGNsZWFuaW5nIHVwIHRoZSBncmFwaGljcyBjb250ZXh0LgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpoZGNGb3JSZW5kZXJUYXJnZXQpOiBDb252ZW5p
ZW5jZSBtZXRob2QKKyAgICAgICAgZm9yIGdldHRpbmcgYSBHREkgZGV2aWNlIGNvbnRleHQgZm9y
IHRoZSBEMkQgZGV2aWNlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlOjpyZWxlYXNlSGRjRm9yUmVuZGVyVGFyZ2V0KTogUmVsZWFzZSBtZXRob2QKKyAg
ICAgICAgZm9yIHRoZSBIREMgaGFuZGxlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpoZGNGb3JSZW5kZXJUYXJnZXQpOiBFeHBvc2UgaW50ZXJuYWwgbWV0aG9kIHRvIEdyYXBo
aWNzQ29udGV4dAorICAgICAgICBjbGllbnRzLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpyZWxlYXNlSGRjRm9yUmVuZGVyVGFyZ2V0KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNsaXApOiBDbGlwcGluZyBjYW4g
b25seSBoYXBwZW4gaW4gYSBEcmF3IG9wZXJhdGlvbi4KKyAgICAgICAgT3BlbiBhIG5ldyBCZWdp
bkRyYXcgaWYgYXNrZWQgdG8gQ2xpcC4gVGhlIEJlZ2luIG11c3Qgc3RheSBhY3RpdmUgd2hlbiB0
aGlzIG1ldGhvZCByZXR1cm5zLAorICAgICAgICBhcyB0aGUgQ2xpcCBsYXllciBpcyBvbmx5IHZh
bGlkIGR1cmluZyBhIERyYXcgb3BlcmF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOjpiZWdpbkRyYXcpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kRHJhdyk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0ZW1wb3JhcnlCZWdpbkRyYXdJZk5lZWRl
ZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjplbmREcmF3KTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdXaXRoU2hhZG93
KTogUmV2aXNlIHRvIHVzZSBuZXcgUmVuZGVyVGFyZ2V0SGVscGVyIGNsYXNzLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3V2l0aG91dFNoYWRvdyk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpj
bGlwQm91bmRzKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmg6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVm
ZmVyRGF0YURpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6
Z2V0RGF0YSk6IFVzZSBuZXcgbWV0aG9kcywgYW5kIGNhY2hlZCBHREkgSW50ZXJvcCBvYmplY3Qu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6ZHJhd05hdGl2ZUltYWdlKTogVXNlIG5ldyAnUmVuZGVyVGFy
Z2V0SGVscGVyJyBjbGFzcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERp
cmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6On5QYXRoKTogUmV2aXNlIGZvciBz
bWFydCBwb2ludGVyIHVzZS4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmVuc3VyZVBsYXRmb3Jt
UGF0aCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YXBwZW5kR2VvbWV0cnkpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6Om9wZXJhdG9yPSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6UGF0aDo6aW5pdGlhbGl6ZVBhdGhTdGF0ZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6UGF0aDo6dHJhbnNmb3JtKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXRo
OjphZGRFbGxpcHNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjbGVhcik6IERp
dHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9SZW5kZXJUYXJnZXRIZWxwZXIu
aDogQWRkZWQuCisgICAgICAgICogcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOjpiZWdpbkZpbHRl
ckVmZmVjdCk6IENhbGwgIkJlZ2luRHJhdyIgb24gdGhlCisgICAgICAgIEdyYXBoaWNzQ29udGV4
dCBpZiB1c2luZyBEMkQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckhl
bHBlcjo6YXBwbHlGaWx0ZXJFZmZlY3QpOiBDYWxsICJlbmREcmF3IiBvbiB0aGUgc291cmNlCisg
ICAgICAgIGltYWdlIEdyYXBoaWNzQ29udGV4dCBpZiB1c2luZyBEMkQgc28gdGhhdCBpdCBpcyBp
biBhICJmaW5pc2hlZCIgc3RhdGUgYmVmb3JlIGRyYXdpbmcKKyAgICAgICAgaXRzIGNvbnRlbnRz
IHRvIHRoZSBkZXN0aW5hdGlvbiBncmFwaGljcyBjb250ZXh0LgorCiAyMDE2LTEwLTI1ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFN1cHBvcnQgSW5w
dXRFdmVudC5kYXRhVHJhbnNmZXIgZm9yIHRoZSBJbnB1dEV2ZW50IHNwZWMKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCShy
ZXZpc2lvbiAyMDc4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTUyLDE0ICs1NTIsMTkgQEAgcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJRDJEMUZhY3RvcnkqIHN5c3RlbUZhY3Rvcnko
KTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSUQyRDFSZW5kZXJUYXJnZXQqIGRlZmF1bHRS
ZW5kZXJUYXJnZXQoKTsKIAorICAgIGJvb2wgdGVtcG9yYXJ5QmVnaW5EcmF3SWZOZWVkZWQoKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldERpZEJlZ2luRHJhdyhib29sKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBib29sIGRpZEJlZ2luRHJhdygpIGNvbnN0OwogICAgIEQyRDFfQ09MT1JfRiBj
b2xvcldpdGhHbG9iYWxBbHBoYShjb25zdCBDb2xvciYpIGNvbnN0OworICAgIEhEQyBoZGNGb3JS
ZW5kZXJUYXJnZXQoKTsKKyAgICB2b2lkIHJlbGVhc2VIZGNGb3JSZW5kZXJUYXJnZXQoKTsKKyAg
ICB2b2lkIGVuZERyYXcoKTsKIAogICAgIElEMkQxQnJ1c2gqIHNvbGlkU3Ryb2tlQnJ1c2goKSBj
b25zdDsKICAgICBJRDJEMUJydXNoKiBzb2xpZEZpbGxCcnVzaCgpIGNvbnN0OwogICAgIElEMkQx
QnJ1c2gqIHBhdHRlcm5TdHJva2VCcnVzaCgpIGNvbnN0OwogICAgIElEMkQxQnJ1c2gqIHBhdHRl
cm5GaWxsQnJ1c2goKSBjb25zdDsKKyAgICBJRDJEMVN0cm9rZVN0eWxlKiBwbGF0Zm9ybVN0cm9r
ZVN0eWxlKCkgY29uc3Q7CiAKICAgICBJRDJEMVNvbGlkQ29sb3JCcnVzaCogYnJ1c2hXaXRoQ29s
b3IoY29uc3QgQ29sb3ImKTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdGguaAkocmV2aXNpb24gMjA3ODQxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDExIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICAvLyBUbyBrZWVwIFBhdGgoKSBjaGVhcCwgaXQg
ZG9lcyBub3QgYWxsb2NhdGUgYSBQbGF0Zm9ybVBhdGggaW1tZWRpYXRlbHkKICAgICAgICAgLy8g
bWVhbmluZyBQYXRoOjpwbGF0Zm9ybVBhdGgoKSBjYW4gcmV0dXJuIG51bGwuCisjaWYgVVNFKERJ
UkVDVDJEKQorICAgICAgICBQbGF0Zm9ybVBhdGhQdHIgcGxhdGZvcm1QYXRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9wYXRoLmdldCgpOyB9CisjZWxzZQogICAgICAgICBQbGF0Zm9ybVBhdGhQdHIgcGxh
dGZvcm1QYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CisjZW5kaWYKICAgICAgICAgLy8g
ZW5zdXJlUGxhdGZvcm1QYXRoKCkgd2lsbCBhbGxvY2F0ZSBhIFBsYXRmb3JtUGF0aCBpZiBpdCBo
YXMgbm90IHlldCBiZWVuIGFuZCB3aWxsIG5ldmVyIHJldHVybiBudWxsLgogICAgICAgICBXRUJD
T1JFX0VYUE9SVCBQbGF0Zm9ybVBhdGhQdHIgZW5zdXJlUGxhdGZvcm1QYXRoKCk7CiAKQEAgLTE5
OSwxMCArMjAzLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgUGxhdGZvcm1QYXRoUHRyIG1fcGF0aCB7IG51bGxwdHIgfTsKICNpZiBVU0Uo
RElSRUNUMkQpCisgICAgICAgIENPTVB0cjxJRDJEMUdlb21ldHJ5R3JvdXA+IG1fcGF0aDsKICAg
ICAgICAgQ09NUHRyPElEMkQxUGF0aEdlb21ldHJ5PiBtX2FjdGl2ZVBhdGhHZW9tZXRyeTsKICAg
ICAgICAgQ09NUHRyPElEMkQxR2VvbWV0cnlTaW5rPiBtX2FjdGl2ZVBhdGg7CisjZWxzZQorICAg
ICAgICBQbGF0Zm9ybVBhdGhQdHIgbV9wYXRoIHsgbnVsbHB0ciB9OwogI2VuZGlmCiAgICAgfTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCShyZXZpc2lvbiAyMDc4NDEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Nyw3ICs1NywxNSBAQCB2b2lkIFNvdXJjZUdyYXBoaWM6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyCiAgICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhc291cmNlSW1hZ2UpCiAgICAg
ICAgIHJldHVybjsKIAorI2lmIFVTRShESVJFQ1QyRCkKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4
dCgpLnRlbXBvcmFyeUJlZ2luRHJhd0lmTmVlZGVkKCk7CisjZW5kaWYKKwogICAgIHJlc3VsdElt
YWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgSW50UG9pbnQoKSk7
CisKKyNpZiBVU0UoRElSRUNUMkQpCisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5lbmREcmF3
KCk7CisjZW5kaWYKIH0KIAogdm9pZCBTb3VyY2VHcmFwaGljOjpkdW1wKCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnRE
aXJlY3QyRC5jcHAJKHJldmlzaW9uIDIwNzg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIw
LDE5ICsxMjAsMTUgQEAgdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQqIGNvbgog
ICAgIGlmICghbV9jYWNoZWRIYXNoIHx8ICFtX2dyYWRpZW50KQogICAgICAgICBnZW5lcmF0ZUdy
YWRpZW50KGQyZENvbnRleHQpOwogCi0gICAgaWYgKCFjb250ZXh0LT5kaWRCZWdpbkRyYXcoKSkK
LSAgICAgICAgZDJkQ29udGV4dC0+QmVnaW5EcmF3KCk7CisgICAgYm9vbCB0ZW1wb3JhcnlEcmF3
ID0gY29udGV4dC0+dGVtcG9yYXJ5QmVnaW5EcmF3SWZOZWVkZWQoKTsKIAogICAgIGQyZENvbnRl
eHQtPlNldFRhZ3MoR1JBRElFTlRfRFJBV0lORywgX19MSU5FX18pOwogCiAgICAgY29uc3QgRDJE
MV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7CiAgICAgZDJkQ29udGV4dC0+RmlsbFJlY3RhbmdsZSgm
ZDJkUmVjdCwgbV9ncmFkaWVudCk7CiAKLSAgICBpZiAoIWNvbnRleHQtPmRpZEJlZ2luRHJhdygp
KSB7Ci0gICAgICAgIEQyRDFfVEFHIGZpcnN0LCBzZWNvbmQ7Ci0gICAgICAgIEhSRVNVTFQgaHIg
PSBkMmRDb250ZXh0LT5FbmREcmF3KCZmaXJzdCwgJnNlY29uZCk7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIH0KKyAgICBpZiAodGVtcG9yYXJ5RHJhdykKKyAg
ICAgICAgY29udGV4dC0+ZW5kRHJhdygpOwogCiAgICAgaWYgKG5lZWRTY2FsaW5nKQogICAgICAg
ICBjb250ZXh0LT5yZXN0b3JlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5j
cHAJKHJldmlzaW9uIDIwNzg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYg
KzM0LDcgQEAKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJlbmRlclRhcmdldEhlbHBl
ci5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPGQyZDEuaD4KICNpbmNsdWRlIDxkMmQx
ZWZmZWN0cy5oPgpAQCAtNzEsNyArNzIsMTMgQEAgSUQyRDFGYWN0b3J5KiBHcmFwaGljc0NvbnRl
eHQ6OnN5c3RlbUZhYwogewogICAgIHN0YXRpYyBJRDJEMUZhY3RvcnkqIGRpcmVjdDJERmFjdG9y
eSA9IG51bGxwdHI7CiAgICAgaWYgKCFkaXJlY3QyREZhY3RvcnkpIHsKKyNpZm5kZWYgTkRFQlVH
CisgICAgICAgIEQyRDFfRkFDVE9SWV9PUFRJT05TIG9wdGlvbnMgPSB7IH07CisgICAgICAgIG9w
dGlvbnMuZGVidWdMZXZlbCA9IEQyRDFfREVCVUdfTEVWRUxfSU5GT1JNQVRJT047CisgICAgICAg
IEhSRVNVTFQgaHIgPSBEMkQxQ3JlYXRlRmFjdG9yeShEMkQxX0ZBQ1RPUllfVFlQRV9NVUxUSV9U
SFJFQURFRCwgb3B0aW9ucywgJmRpcmVjdDJERmFjdG9yeSk7CisjZWxzZQogICAgICAgICBIUkVT
VUxUIGhyID0gRDJEMUNyZWF0ZUZhY3RvcnkoRDJEMV9GQUNUT1JZX1RZUEVfTVVMVElfVEhSRUFE
RUQsICZkaXJlY3QyREZhY3RvcnkpOworI2VuZGlmCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKFNV
Q0NFRURFRChocikpOwogICAgIH0KIApAQCAtOTUsMTIgKzEwMiwxMiBAQCBJRDJEMVJlbmRlclRh
cmdldCogR3JhcGhpY3NDb250ZXh0OjpkZWZhCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RGlk
QmVnaW5EcmF3KGJvb2wgZGlkQmVnaW5EcmF3KQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fZGF0
YSk7Ci0gICAgbV9kYXRhLT5tX2RpZEJlZ2luRHJhdyA9IGRpZEJlZ2luRHJhdzsKKyAgICBtX2Rh
dGEtPnNldERpZEJlZ2luRHJhdyhkaWRCZWdpbkRyYXcpOwogfQogCiBib29sIEdyYXBoaWNzQ29u
dGV4dDo6ZGlkQmVnaW5EcmF3KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kYXRhLT5tX2RpZEJl
Z2luRHJhdzsKKyAgICByZXR1cm4gbV9kYXRhLT5kaWRCZWdpbkRyYXcoKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChIREMgaGRjLCBib29sIGhhc0FscGhhKQpAQCAt
MTA4LDcgKzExNSwyMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KEhEQyBo
CiAgICAgaWYgKCFoZGMpCiAgICAgICAgIHJldHVybjsKIAotICAgIENPTVB0cjxJRDJEMVJlbmRl
clRhcmdldD4gcmVuZGVyVGFyZ2V0OworICAgIEhCSVRNQVAgYml0bWFwID0gc3RhdGljX2Nhc3Q8
SEJJVE1BUD4oR2V0Q3VycmVudE9iamVjdChoZGMsIE9CSl9CSVRNQVApKTsKKworICAgIERJQlBp
eGVsRGF0YSBwaXhlbERhdGEoYml0bWFwKTsKKworICAgIGF1dG8gdGFyZ2V0UHJvcGVydGllcyA9
IEQyRDE6OlJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsKKyAgICB0YXJnZXRQcm9wZXJ0aWVzLnBp
eGVsRm9ybWF0ID0gRDJEMTo6UGl4ZWxGb3JtYXQoRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0s
IEQyRDFfQUxQSEFfTU9ERV9JR05PUkUpOworCisgICAgQ09NUHRyPElEMkQxRENSZW5kZXJUYXJn
ZXQ+IHJlbmRlclRhcmdldDsKKyAgICBIUkVTVUxUIGhyID0gc3lzdGVtRmFjdG9yeSgpLT5DcmVh
dGVEQ1JlbmRlclRhcmdldCgmdGFyZ2V0UHJvcGVydGllcywgJnJlbmRlclRhcmdldCk7CisgICAg
aWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBSRUNUIGNsaWVudFJl
Y3QgPSBJbnRSZWN0KEludFBvaW50KCksIHBpeGVsRGF0YS5zaXplKCkpOworICAgIGhyID0gcmVu
ZGVyVGFyZ2V0LT5CaW5kREMoaGRjLCAmY2xpZW50UmVjdCk7CisgICAgaWYgKCFTVUNDRUVERUQo
aHIpKQorICAgICAgICByZXR1cm47CisKICAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKHJlbmRlclRhcmdldC5nZXQoKSk7CiAgICAgbV9kYXRhLT5tX2hkYyA9
IGhkYzsKICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3RhcnRzIGluIHN5bmMgd2l0aCBv
dXIgc3RhdGUuCkBAIC0yNTcsNiArMjgwLDI0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
TGluZUZvckRvY3VtZW4KIHsKIH0KIAorR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRh
cmdldCkKKyAgICA6IG1fcmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCkKK3sKKyAgICBpZiAoIW1f
cmVuZGVyVGFyZ2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBIUkVTVUxUIGhyID0gbV9yZW5k
ZXJUYXJnZXQtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEMkQxR2RpSW50ZXJvcFJlbmRlclRh
cmdldCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV9nZGlSZW5kZXJUYXJnZXQpKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKK30KKworR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCkKK3sKKyAgICBp
ZiAoIW1fcmVuZGVyVGFyZ2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIW1fYmVn
aW5EcmF3Q291bnQudW5zYWZlR2V0KCkpOworfQorCiBDT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1
c2g+IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6YnJ1c2hXaXRoQ29sb3IoY29uc3Qg
RDJEMV9DT0xPUl9GJiBjb2xvcikKIHsKICAgICBSR0JBMzIgY29sb3JLZXkgPSBtYWtlUkdCQTMy
RnJvbUZsb2F0cyhjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hKTsKQEAgLTI4Nywx
MiArMzI4LDU2IEBAIElEMkQxU29saWRDb2xvckJydXNoKiBHcmFwaGljc0NvbnRleHQ6OmIKICAg
ICByZXR1cm4gbV9kYXRhLT5icnVzaFdpdGhDb2xvcihjb2xvcldpdGhHbG9iYWxBbHBoYShjb2xv
cikpLmdldCgpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0
RGlkQmVnaW5EcmF3KGJvb2wgZGlkQmVnaW5EcmF3KQoreworICAgICsrbV9iZWdpbkRyYXdDb3Vu
dDsKK30KKworSERDIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6aGRjRm9yUmVuZGVy
VGFyZ2V0KCkKK3sKKyAgICBBU1NFUlQoZGlkQmVnaW5EcmF3KCkpOworCisgICAgUkVMRUFTRV9B
U1NFUlQobV9nZGlSZW5kZXJUYXJnZXQpOworCisgICAgSERDIGhkYyA9IG51bGxwdHI7CisgICAg
SFJFU1VMVCBociA9IG1fZ2RpUmVuZGVyVGFyZ2V0LT5HZXREQyhEMkQxX0RDX0lOSVRJQUxJWkVf
TU9ERV9DT1BZLCAmaGRjKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgcmV0dXJuIGhkYzsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU6OnJlbGVhc2VIZGNGb3JSZW5kZXJUYXJnZXQoKQoreworICAgIEFTU0VS
VChkaWRCZWdpbkRyYXcoKSk7CisKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dkaVJlbmRlclRhcmdl
dCk7CisKKyAgICBIUkVTVUxUIGhyID0gbV9nZGlSZW5kZXJUYXJnZXQtPlJlbGVhc2VEQyhudWxs
cHRyKTsKK30KKworSERDIEdyYXBoaWNzQ29udGV4dDo6aGRjRm9yUmVuZGVyVGFyZ2V0KCkKK3sK
KyAgICByZXR1cm4gbV9kYXRhLT5oZGNGb3JSZW5kZXJUYXJnZXQoKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OnJlbGVhc2VIZGNGb3JSZW5kZXJUYXJnZXQoKQoreworICAgIG1fZGF0YS0+
cmVsZWFzZUhkY0ZvclJlbmRlclRhcmdldCgpOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZTo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CisgICAgLy8gSW4g
RDJELCB3ZSBjYW4gb25seSBjbGlwIGluIHRoZSBjb250ZXh0IG9mIGEgJ0JlZ2luRHJhdycsIGFu
ZCB0aGUgY2xpcCBjYW4KKyAgICAvLyBvbmx5IGxpdmUgYXMgbG9uZyBhcyB0aGUgZHJhdyBpcyBo
YXBwZW5pbmcuCisgICAgaWYgKCFkaWRCZWdpbkRyYXcoKSkKKyAgICAgICAgYmVnaW5EcmF3KCk7
CisKICAgICBpZiAobV9yZW5kZXJTdGF0ZXMuaXNFbXB0eSgpKQogICAgICAgICBzYXZlKCk7CiAK
ICAgICBtX3JlbmRlclRhcmdldC0+UHVzaEF4aXNBbGlnbmVkQ2xpcChyZWN0LCBEMkQxX0FOVElB
TElBU19NT0RFX1BFUl9QUklNSVRJVkUpOworCiAgICAgbV9yZW5kZXJTdGF0ZXMubGFzdCgpLm1f
Y2xpcHMuYXBwZW5kKEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6QXhpc0FsaWduZWRD
bGlwKTsKIH0KIApAQCAtMzAzLDYgKzM4OCwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTo6Y2xpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpj
bGlwKElEMkQxR2VvbWV0cnkqIHBhdGgpCiB7CisgICAgLy8gSW4gRDJELCB3ZSBjYW4gb25seSBj
bGlwIGluIHRoZSBjb250ZXh0IG9mIGEgJ0JlZ2luRHJhdycsIGFuZCB0aGUgY2xpcCBjYW4KKyAg
ICAvLyBvbmx5IGxpdmUgYXMgbG9uZyBhcyB0aGUgZHJhdyBpcyBoYXBwZW5pbmcuCisgICAgaWYg
KCFkaWRCZWdpbkRyYXcoKSkKKyAgICAgICAgYmVnaW5EcmF3KCk7CisKICAgICBBU1NFUlQobV9y
ZW5kZXJTdGF0ZXMuc2l6ZSgpKTsKICAgICBpZiAoIW1fcmVuZGVyU3RhdGVzLnNpemUoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMzM4LDYgKzQyOCwxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZTo6Zmx1CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiB9
CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpiZWdpbkRyYXcoKQorewor
ICAgIEFTU0VSVChtX3JlbmRlclRhcmdldC5nZXQoKSk7CisgICAgaWYgKGRpZEJlZ2luRHJhdygp
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3JlbmRlclRhcmdldC0+QmVnaW5EcmF3KCk7CisK
KyAgICArK21fYmVnaW5EcmF3Q291bnQ7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlOjplbmREcmF3KCkKIHsKICAgICBBU1NFUlQobV9yZW5kZXJUYXJnZXQuZ2V0KCkp
OwpAQCAtMzQ2LDYgKzQ0Nyw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
OjplbmQKIAogICAgIGlmICghU1VDQ0VFREVEKGhyKSkKICAgICAgICAgV1RGTG9nQWx3YXlzKCJG
YWlsZWQgaW4gR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjplbmREcmF3OiBocj0lbGQs
IGZpcnN0PSVsZCwgc2Vjb25kPSVsZCIsIGhyLCBmaXJzdCwgc2Vjb25kKTsKKworICAgIC0tbV9i
ZWdpbkRyYXdDb3VudDsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6
OnJlc3RvcmUoKQpAQCAtNDQyLDYgKzU0NSwyMCBAQCBJRDJEMUJydXNoKiBHcmFwaGljc0NvbnRl
eHQ6OnBhdHRlcm5GaWxsCiAgICAgcmV0dXJuIG1fZGF0YS0+bV9wYXR0ZXJuRmlsbEJydXNoLmdl
dCgpOwogfQogCitib29sIEdyYXBoaWNzQ29udGV4dDo6dGVtcG9yYXJ5QmVnaW5EcmF3SWZOZWVk
ZWQoKQoreworICAgIGlmIChtX2RhdGEtPmRpZEJlZ2luRHJhdygpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBtX2RhdGEtPmJlZ2luRHJhdygpOworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kRHJhdygpCit7CisgICAgbV9kYXRhLT5lbmREcmF3
KCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJs
ZW5kTW9kZSBibGVuZE1vZGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhcGF0
dGVyblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKQEAgLTY3MSw2ICs3ODgsMTEgQEAgSUQyRDFT
dHJva2VTdHlsZSogR3JhcGhpY3NDb250ZXh0UGxhdGZvcgogICAgIHJldHVybiBtX2QyZFN0cm9r
ZVN0eWxlLmdldCgpOwogfQogCitJRDJEMVN0cm9rZVN0eWxlKiBHcmFwaGljc0NvbnRleHQ6OnBs
YXRmb3JtU3Ryb2tlU3R5bGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGEtPnN0cm9rZVN0
eWxlKCk7Cit9CisKIC8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKQEAgLTgyMSwxOSArOTQzLDE0IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXQKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdXaXRob3V0U2hhZG93KGNvbnN0IEZsb2F0UmVjdCYgLypib3VuZGluZ1JlY3QqLywgY29uc3Qg
c3RkOjpmdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+JiBkcmF3Q29tbWFuZHMpCiB7
Ci0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBpZiAoIWRpZEJl
Z2luRHJhdygpKQotICAgICAgICBjb250ZXh0LT5CZWdpbkRyYXcoKTsKLQotICAgIGRyYXdDb21t
YW5kcyhjb250ZXh0KTsKLQotICAgIGlmICghZGlkQmVnaW5EcmF3KCkpCi0gICAgICAgIG1fZGF0
YS0+ZW5kRHJhdygpOworICAgIFJlbmRlclRhcmdldEhlbHBlciBoZWxwZXIoKnRoaXMpOworICAg
IGRyYXdDb21tYW5kcyhwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3V2l0aFNoYWRvdyhjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nUmVjdCwgY29uc3Qg
c3RkOjpmdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+JiBkcmF3Q29tbWFuZHMpCiB7
CisgICAgUmVuZGVyVGFyZ2V0SGVscGVyIGhlbHBlcigqdGhpcyk7CisKICAgICBhdXRvIGNvbnRl
eHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIC8vIFJlbmRlciB0aGUgY3VycmVudCBnZW9t
ZXRyeSB0byBhIGJpdG1hcCBjb250ZXh0CkBAIC04ODYsMTAgKzEwMDMsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1dpdGhTaGFkb3coY29uCiAgICAgYXV0byBmbGlwID0gRDJEMTo6TWF0
cml4M3gyRjo6U2NhbGUoRDJEMTo6U2l6ZUYoMS4wZiwgLTEuMGYpKTsKICAgICBkZXZpY2VDb250
ZXh0LT5TZXRUcmFuc2Zvcm0oY3RtICogZmxpcCAqIHRyYW5zbGF0ZSk7CiAKLSAgICBkZXZpY2VD
b250ZXh0LT5CZWdpbkRyYXcoKTsKICAgICBkZXZpY2VDb250ZXh0LT5EcmF3SW1hZ2UoY29tcG9z
aXRvci5nZXQoKSwgRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTElORUFSKTsKLSAgICBociA9IGRl
dmljZUNvbnRleHQtPkVuZERyYXcoKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMTA4
MCw5ICsxMTk0LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbFJvdW5kZQog
ICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIH0KIAotICAgIGlmICghZGlkQmVnaW5EcmF3
KCkpCi0gICAgICAgIGNvbnRleHQtPkJlZ2luRHJhdygpOwotICAgIAorICAgIFJlbmRlclRhcmdl
dEhlbHBlciBoZWxwZXIoKnRoaXMpOworCiAgICAgY29udGV4dC0+U2V0VGFncygxLCBfX0xJTkVf
Xyk7CiAKICAgICBjb25zdCBGbG9hdFJlY3QmIHIgPSByZWN0LnJlY3QoKTsKQEAgLTExMDIsOSAr
MTIxNSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGUKICAgICAg
ICAgZmlsbFBhdGgocGF0aCk7CiAgICAgfQogCi0gICAgaWYgKCFkaWRCZWdpbkRyYXcoKSkKLSAg
ICAgICAgbV9kYXRhLT5lbmREcmF3KCk7Ci0KICAgICBpZiAoZHJhd093blNoYWRvdykKICAgICAg
ICAgc3RhdGVTYXZlci5yZXN0b3JlKCk7CiB9CkBAIC0xMTIxLDggKzEyMzEsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlCiAKICAgICBhdXRvIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlmICghZGlkQmVnaW5EcmF3KCkpCi0gICAgICAgIGNv
bnRleHQtPkJlZ2luRHJhdygpOworICAgIFJlbmRlclRhcmdldEhlbHBlciBoZWxwZXIoKnRoaXMp
OwogCiAgICAgY29udGV4dC0+U2V0VGFncygxLCBfX0xJTkVfXyk7CiAKQEAgLTExNTIsOSArMTI2
MSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGUKIAogICAgIGZp
bGxQYXRoKHBhdGgpOwogCi0gICAgaWYgKCFkaWRCZWdpbkRyYXcoKSkKLSAgICAgICAgbV9kYXRh
LT5lbmREcmF3KCk7Ci0KICAgICBpZiAoZHJhd093blNoYWRvdykKICAgICAgICAgc3RhdGVTYXZl
ci5yZXN0b3JlKCk7CiAKQEAgLTEyNDgsMTQgKzEzNTQsMTMgQEAgSW50UmVjdCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBCb3VuZHMoKSBjbwogICAgICAgICByZXR1cm4gSW50UmVjdCgtMjA0OCwgLTIw
NDgsIDQwOTYsIDQwOTYpOyAvLyBGSVhNRTogZGlzcGxheSBsaXN0cy4KICAgICB9CiAKLSAgICBE
MkQxX1JFQ1RfRiBkMmRDbGlwQm91bmRzID0gRDJEMTo6SW5maW5pdGVSZWN0KCk7Ci0gICAgRmxv
YXRSZWN0IGNsaXBCb3VuZHMoZDJkQ2xpcEJvdW5kcy5sZWZ0LCBkMmRDbGlwQm91bmRzLnRvcCwg
ZDJkQ2xpcEJvdW5kcy5yaWdodCAtIGQyZENsaXBCb3VuZHMubGVmdCwgZDJkQ2xpcEJvdW5kcy5i
b3R0b20gLSBkMmRDbGlwQm91bmRzLnRvcCk7CisgICAgRDJEMV9TSVpFX0YgY2xpcFNpemU7Cisg
ICAgaWYgKG1fZGF0YS0+Y2xpcExheWVyKCkpCisgICAgICAgIGNsaXBTaXplID0gbV9kYXRhLT5j
bGlwTGF5ZXIoKS0+R2V0U2l6ZSgpOworICAgIGVsc2UKKyAgICAgICAgY2xpcFNpemUgPSBwbGF0
Zm9ybUNvbnRleHQoKS0+R2V0U2l6ZSgpOwogCi0gICAgaWYgKG1fZGF0YS0+Y2xpcExheWVyKCkp
IHsKLSAgICAgICAgYXV0byBjbGlwU2l6ZSA9IG1fZGF0YS0+Y2xpcExheWVyKCktPkdldFNpemUo
KTsKLSAgICAgICAgY2xpcEJvdW5kcy5zZXRXaWR0aChjbGlwU2l6ZS53aWR0aCk7Ci0gICAgICAg
IGNsaXBCb3VuZHMuc2V0SGVpZ2h0KGNsaXBTaXplLmhlaWdodCk7Ci0gICAgfQorICAgIEZsb2F0
UmVjdCBjbGlwQm91bmRzKEludFBvaW50KCksIGNsaXBTaXplKTsKIAogICAgIHJldHVybiBlbmNs
b3NpbmdJbnRSZWN0KGNsaXBCb3VuZHMpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgJKHJldmlzaW9uIDIwNzg0MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGVEaXJlY3QyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSA8ZDJkMWVmZmVjdHMuaD4KICNpbmNsdWRlIDxkMmQxaGVscGVyLmg+CiAjaW5jbHVk
ZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1
ZGUgPHd0Zi9UaW55TFJVQ2FjaGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzksMTYg
KzQwLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJU
YXJnZXQpCi0gICAgICAgIDogbV9yZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KQotICAgIHsKLSAg
ICB9CisgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKElEMkQxUmVuZGVyVGFyZ2V0
Kik7CisgICAgfkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpOwogCiAgICAgZW51bSBE
aXJlY3QyRExheWVyVHlwZSB7IEF4aXNBbGlnbmVkQ2xpcCwgTGF5ZXJDbGlwIH07CiAKICAgICB2
b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBjbGlwKGNvbnN0IFBhdGgmKTsK
ICAgICB2b2lkIGNsaXAoSUQyRDFHZW9tZXRyeSopOworICAgIHZvaWQgYmVnaW5EcmF3KCk7CiAg
ICAgdm9pZCBlbmREcmF3KCk7CiAgICAgdm9pZCBmbHVzaCgpOwogICAgIHZvaWQgc2F2ZSgpOwpA
QCAtNzUsMTEgKzc1LDE3IEBAIHB1YmxpYzoKIAogICAgIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JC
cnVzaD4gYnJ1c2hXaXRoQ29sb3IoY29uc3QgRDJEMV9DT0xPUl9GJik7CiAKKyAgICBIREMgaGRj
Rm9yUmVuZGVyVGFyZ2V0KCk7CisgICAgdm9pZCByZWxlYXNlSGRjRm9yUmVuZGVyVGFyZ2V0KCk7
CisKKyAgICBib29sIGRpZEJlZ2luRHJhdygpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW5EcmF3Q291
bnQudW5zYWZlR2V0KCk7IH0KKyAgICB2b2lkIHNldERpZEJlZ2luRHJhdyhib29sKTsKKwogICAg
IEhEQyBtX2hkYyB7IG51bGxwdHIgfTsKICAgICBEMkQxX0JMRU5EX01PREUgbV9ibGVuZE1vZGUg
eyBEMkQxX0JMRU5EX01PREVfTVVMVElQTFkgfTsKICAgICBEMkQxX0NPTVBPU0lURV9NT0RFIG1f
Y29tcG9zaXRlTW9kZSB7IEQyRDFfQ09NUE9TSVRFX01PREVfU09VUkNFX09WRVIgfTsKKyAgICBD
aGVja2VkPHVuc2lnbmVkPiBtX2JlZ2luRHJhd0NvdW50IHsgMCB9OwogICAgIGJvb2wgbV9zaG91
bGRJbmNsdWRlQ2hpbGRXaW5kb3dzIHsgZmFsc2UgfTsKLSAgICBib29sIG1fZGlkQmVnaW5EcmF3
IHsgZmFsc2UgfTsKICAgICBib29sIG1fc3Ryb2tlU3lsZUlzRGlydHkgeyBmYWxzZSB9OwogCiAg
ICAgQ09NUHRyPElEMkQxU29saWRDb2xvckJydXNoPiBtX3NvbGlkU3Ryb2tlQnJ1c2g7CkBAIC05
MSw2ICs5Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNvbXB1dGVTdHJva2VTdHlsZSgpOwog
CiAgICAgQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiBtX3JlbmRlclRhcmdldDsKKyAgICBDT01Q
dHI8SUQyRDFHZGlJbnRlcm9wUmVuZGVyVGFyZ2V0PiBtX2dkaVJlbmRlclRhcmdldDsKICAgICBI
YXNoTWFwPFJHQkEzMiwgQ09NUHRyPElEMkQxU29saWRDb2xvckJydXNoPj4gbV9zb2xpZENvbG9y
ZWRCcnVzaENhY2hlOwogICAgIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4gbV93aGl0ZUJy
dXNoOwogICAgIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4gbV96ZXJvQnJ1c2g7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGly
ZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDIwNzg0MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3Qy
RC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJIV25kREMu
aCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNp
bmNsdWRlICJSZW5kZXJUYXJnZXRIZWxwZXIuaCIKICNpbmNsdWRlIDxkMmQxLmg+CiAjaW5jbHVk
ZSA8cnVudGltZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5s
aW5lcy5oPgpAQCAtNjMsMjcgKzY0LDE5IEBAIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1h
Z2VCdWZmZXJEYXQKICAgICBhdXRvIGJpdG1hcERDID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVD
b21wYXRpYmxlREMod2luZG93REMpKTsKICAgICBIR0RJT0JKIG9sZEJpdG1hcCA9IDo6U2VsZWN0
T2JqZWN0KGJpdG1hcERDLmdldCgpLCBiaXRtYXAuZ2V0KCkpOwogCi0gICAgSFJFU1VMVCBocjsK
KyAgICBSZW5kZXJUYXJnZXRIZWxwZXIgaGVscGVyKCpjb250ZXh0KTsKIAotICAgIENPTVB0cjxJ
RDJEMUdkaUludGVyb3BSZW5kZXJUYXJnZXQ+IGdkaVJlbmRlclRhcmdldDsKLSAgICBociA9IHBs
YXRmb3JtQ29udGV4dC0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSUQyRDFHZGlJbnRlcm9wUmVu
ZGVyVGFyZ2V0KSwgKHZvaWQqKikmZ2RpUmVuZGVyVGFyZ2V0KTsKLSAgICBpZiAoRkFJTEVEKGhy
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQtPkJlZ2lu
RHJhdygpOwotCi0gICAgSERDIGhkYyA9IG51bGxwdHI7Ci0gICAgaHIgPSBnZGlSZW5kZXJUYXJn
ZXQtPkdldERDKEQyRDFfRENfSU5JVElBTElaRV9NT0RFX0NPUFksICZoZGMpOworICAgIEhEQyBo
ZGMgPSBjb250ZXh0LT5oZGNGb3JSZW5kZXJUYXJnZXQoKTsKIAogICAgIEJPT0wgb2sgPSA6OkJp
dEJsdChiaXRtYXBEQy5nZXQoKSwgMCwgMCwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCBo
ZGMsIHJlY3QueCgpLCByZWN0LnkoKSwgU1JDQ09QWSk7CiAKLSAgICBociA9IGdkaVJlbmRlclRh
cmdldC0+UmVsZWFzZURDKG51bGxwdHIpOwotCi0gICAgaHIgPSBwbGF0Zm9ybUNvbnRleHQtPkVu
ZERyYXcoKTsKKyAgICBjb250ZXh0LT5yZWxlYXNlSGRjRm9yUmVuZGVyVGFyZ2V0KCk7CiAKICAg
ICBpZiAoIW9rKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAorICAgIGhlbHBlci5lbmREcmF3
KCk7CisKICAgICBtZW1jcHkocmVzdWx0LT5kYXRhKCksIHBpeGVscywgbnVtQnl0ZXMudW5zYWZl
R2V0KCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9OYXRpdmVJbWFnZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5j
cHAJKHJldmlzaW9uIDIwNzg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9OYXRpdmVJbWFnZURpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJlbmRlclRhcmdldEhlbHBl
ci5oIgogI2luY2x1ZGUgPGQyZDEuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtODUsMTQg
Kzg2LDEzIEBAIHZvaWQgZHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHQKIAogICAg
IGZsb2F0IG9wYWNpdHkgPSAxLjBmOwogCi0gICAgaWYgKCFjb250ZXh0LmRpZEJlZ2luRHJhdygp
KQotICAgICAgICBwbGF0Zm9ybUNvbnRleHQtPkJlZ2luRHJhdygpOworICAgIGJvb2wgdGVtcG9y
YXJ5RHJhdyA9IGNvbnRleHQudGVtcG9yYXJ5QmVnaW5EcmF3SWZOZWVkZWQoKTsKIAogICAgIHBs
YXRmb3JtQ29udGV4dC0+RHJhd0JpdG1hcChpbWFnZS5nZXQoKSwgZGVzdFJlY3QsIG9wYWNpdHks
IEQyRDFfQklUTUFQX0lOVEVSUE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SLCBhZGp1c3Rl
ZFNyY1JlY3QpOwogCiAgICAgSFJFU1VMVCBociA9IFNfT0s7Ci0gICAgaWYgKCFjb250ZXh0LmRp
ZEJlZ2luRHJhdygpKQotICAgICAgICBociA9IHBsYXRmb3JtQ29udGV4dC0+RW5kRHJhdygpOwor
ICAgIGlmICh0ZW1wb3JhcnlEcmF3KQorICAgICAgICBjb250ZXh0LmVuZERyYXcoKTsKICAgICBl
bHNlCiAgICAgICAgIGhyID0gcGxhdGZvcm1Db250ZXh0LT5GbHVzaCgpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJE
LmNwcAkocmV2aXNpb24gMjA3ODQxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDExIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGlubGluZSBJRDJEMVJlbmRlclRhcmdl
dCogc2NyYXRjaFJlbmRlclRhcmdldCgpCit7CisgICAgc3RhdGljIENPTVB0cjxJRDJEMVJlbmRl
clRhcmdldD4gcmVuZGVyVGFyZ2V0ID0gYWRvcHRDT00oR3JhcGhpY3NDb250ZXh0OjpkZWZhdWx0
UmVuZGVyVGFyZ2V0KCkpOworICAgIHJldHVybiByZW5kZXJUYXJnZXQuZ2V0KCk7Cit9CiAKIFBh
dGggUGF0aDo6cG9seWdvblBhdGhGcm9tUG9pbnRzKGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50PiYg
cG9pbnRzKQogewpAQCAtNzAsOCArNzUsNiBAQCBQYXRoOjpQYXRoKCkKIAogUGF0aDo6flBhdGgo
KQogewotICAgIGlmIChtX3BhdGgpCi0gICAgICAgIG1fcGF0aC0+UmVsZWFzZSgpOwogfQogCiBQ
bGF0Zm9ybVBhdGhQdHIgUGF0aDo6ZW5zdXJlUGxhdGZvcm1QYXRoKCkKQEAgLTgzLDcgKzg2LDcg
QEAgUGxhdGZvcm1QYXRoUHRyIFBhdGg6OmVuc3VyZVBsYXRmb3JtUGF0aAogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgcmV0dXJuIG1fcGF0aDsKKyAgICByZXR1cm4g
bV9wYXRoLmdldCgpOwogfQogCiB2b2lkIFBhdGg6OmFwcGVuZEdlb21ldHJ5KElEMkQxR2VvbWV0
cnkqIGdlb21ldHJ5KQpAQCAtMTAxLDcgKzEwNCw3IEBAIHZvaWQgUGF0aDo6YXBwZW5kR2VvbWV0
cnkoSUQyRDFHZW9tZXRyeSoKIAogICAgIGF1dG8gZmlsbE1vZGUgPSBtX3BhdGggPyBtX3BhdGgt
PkdldEZpbGxNb2RlKCkgOiBEMkQxX0ZJTExfTU9ERV9XSU5ESU5HOwogCi0gICAgQ09NUHRyPElE
MkQxR2VvbWV0cnlHcm91cD4gcHJvdGVjdGVkUGF0aCA9IGFkb3B0Q09NKG1fcGF0aCk7CisgICAg
Q09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4gcHJvdGVjdGVkUGF0aCA9IG1fcGF0aDsKICAgICBt
X3BhdGggPSBudWxscHRyOwogCiAgICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lz
dGVtRmFjdG9yeSgpLT5DcmVhdGVHZW9tZXRyeUdyb3VwKGZpbGxNb2RlLCBnZW9tZXRyaWVzLmRh
dGEoKSwgZ2VvbWV0cmllcy5zaXplKCksICZtX3BhdGgpOwpAQCAtMTYyLDEzICsxNjUsNyBAQCBQ
YXRoOjpQYXRoKGNvbnN0IFBhdGgmIG90aGVyKQogCiBQYXRoJiBQYXRoOjpvcGVyYXRvcj0oY29u
c3QgUGF0aCYgb3RoZXIpCiB7Ci0gICAgaWYgKG1fcGF0aCkKLSAgICAgICAgbV9wYXRoLT5SZWxl
YXNlKCk7Ci0KICAgICBtX3BhdGggPSBvdGhlci5tX3BhdGg7Ci0gICAgaWYgKG1fcGF0aCkKLSAg
ICAgICAgbV9wYXRoLT5BZGRSZWYoKTsKLQogICAgIG1fYWN0aXZlUGF0aCA9IG90aGVyLm1fYWN0
aXZlUGF0aDsKICAgICBtX2FjdGl2ZVBhdGhHZW9tZXRyeSA9IG90aGVyLm1fYWN0aXZlUGF0aEdl
b21ldHJ5OwogCkBAIC0xNzcsOCArMTc0LDYgQEAgUGF0aCYgUGF0aDo6b3BlcmF0b3I9KGNvbnN0
IFBhdGgmIG90aGVyKQogCiBIUkVTVUxUIFBhdGg6OmluaXRpYWxpemVQYXRoU3RhdGUoKQogewot
ICAgIGlmIChtX3BhdGgpCi0gICAgICAgIG1fcGF0aC0+UmVsZWFzZSgpOwogICAgIG1fcGF0aCA9
IG51bGxwdHI7CiAgICAgbV9hY3RpdmVQYXRoID0gbnVsbHB0cjsKICAgICBtX2FjdGl2ZVBhdGhH
ZW9tZXRyeSA9IG51bGxwdHI7CkBAIC0yMzEsMTAgKzIyNiwxNyBAQCBib29sIFBhdGg6OnN0cm9r
ZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBwCiAgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBVTlVTRURfUEFSQU0oYXBwbGllcik7Ci0gICAgVU5VU0VEX1BBUkFN
KHBvaW50KTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICBB
U1NFUlQoYXBwbGllcik7CisKKyAgICBHcmFwaGljc0NvbnRleHQgc2NyYXRjaENvbnRleHQoc2Ny
YXRjaFJlbmRlclRhcmdldCgpKTsKKyAgICBhcHBsaWVyLT5zdHJva2VTdHlsZSgmc2NyYXRjaENv
bnRleHQpOworCisgICAgQk9PTCBjb250YWluc1BvaW50ID0gZmFsc2U7CisgICAgSFJFU1VMVCBo
ciA9IG1fcGF0aC0+U3Ryb2tlQ29udGFpbnNQb2ludChwb2ludCwgc2NyYXRjaENvbnRleHQuc3Ry
b2tlVGhpY2tuZXNzKCksIHNjcmF0Y2hDb250ZXh0LnBsYXRmb3JtU3Ryb2tlU3R5bGUoKSwgbnVs
bHB0ciwgMS4wZiwgJmNvbnRhaW5zUG9pbnQpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGNvbnRhaW5zUG9pbnQ7CiB9CiAKIHZv
aWQgUGF0aDo6dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKQEAgLTI1Nyw3ICsyNTks
NyBAQCB2b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2ZvCiAKICAgICBjb25z
dCBEMkQxX01BVFJJWF8zWDJfRiYgZDJkVHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8Y29uc3QgRDJE
MV9NQVRSSVhfM1gyX0Y+KHRyYW5zZm9ybSk7CiAgICAgQ09NUHRyPElEMkQxVHJhbnNmb3JtZWRH
ZW9tZXRyeT4gdHJhbnNmb3JtZWRQYXRoOwotICAgIGlmICghU1VDQ0VFREVEKEdyYXBoaWNzQ29u
dGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVUcmFuc2Zvcm1lZEdlb21ldHJ5KG1fcGF0aCwg
ZDJkVHJhbnNmb3JtLCAmdHJhbnNmb3JtZWRQYXRoKSkpCisgICAgaWYgKCFTVUNDRUVERUQoR3Jh
cGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZVRyYW5zZm9ybWVkR2VvbWV0cnko
bV9wYXRoLmdldCgpLCBkMmRUcmFuc2Zvcm0sICZ0cmFuc2Zvcm1lZFBhdGgpKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgVmVjdG9yPElEMkQxR2VvbWV0cnkqPiBnZW9tZXRyaWVzOwpAQCAtMjcx
LDcgKzI3Myw2IEBAIHZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm8KIAog
ICAgIGF1dG8gZmlsbE1vZGUgPSBtX3BhdGgtPkdldEZpbGxNb2RlKCk7CiAKLSAgICBtX3BhdGgt
PlJlbGVhc2UoKTsKICAgICBtX3BhdGggPSBudWxscHRyOwogCiAgICAgSFJFU1VMVCBociA9IEdy
YXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVHZW9tZXRyeUdyb3VwKGZpbGxN
b2RlLCBnZW9tZXRyaWVzLmRhdGEoKSwgZ2VvbWV0cmllcy5zaXplKCksICZtX3BhdGgpOwpAQCAt
NDc2LDcgKzQ3Nyw3IEBAIHZvaWQgUGF0aDo6YWRkRWxsaXBzZShGbG9hdFBvaW50IHAsIGZsb2EK
IHZvaWQgUGF0aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHIpCiB7CiAgICAgQ09NUHRy
PElEMkQxRWxsaXBzZUdlb21ldHJ5PiBlbGxpcHNlOwotICAgIEhSRVNVTFQgaHIgPSBHcmFwaGlj
c0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRWxsaXBzZUdlb21ldHJ5KEQyRDE6OkVs
bGlwc2UoRDJEMTo6UG9pbnQyRihyLmNlbnRlcigpLngoKSwgci5jZW50ZXIoKS55KCkpLCByLndp
ZHRoKCksIHIuaGVpZ2h0KCkpLCAmZWxsaXBzZSk7CisgICAgSFJFU1VMVCBociA9IEdyYXBoaWNz
Q29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVFbGxpcHNlR2VvbWV0cnkoRDJEMTo6RWxs
aXBzZShyLmNlbnRlcigpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkpLCAmZWxsaXBzZSk7CiAgICAg
UkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAgICAgYXBwZW5kR2VvbWV0cnkoZWxsaXBz
ZS5nZXQoKSk7CiB9CkBAIC00OTgsOSArNDk5LDYgQEAgdm9pZCBQYXRoOjpjbGVhcigpCiAgICAg
aWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9wYXRoKQotICAgICAg
ICBtX3BhdGgtPlJlbGVhc2UoKTsKLQogICAgIG1fcGF0aCA9IG51bGxwdHI7CiAgICAgbV9hY3Rp
dmVQYXRoID0gbnVsbHB0cjsKICAgICBtX2FjdGl2ZVBhdGhHZW9tZXRyeSA9IG51bGxwdHI7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUmVuZGVyVGFyZ2V0SGVs
cGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1JlbmRlclRhcmdldEhlbHBlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9SZW5kZXJUYXJnZXRIZWxwZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJUYXJnZXRIZWxwZXIgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFJlbmRlclRhcmdldEhlbHBlcik7CitwdWJsaWM6CisgICAgUmVuZGVy
VGFyZ2V0SGVscGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKKyAgICAgICAgOiBtX2NvbnRl
eHQoY29udGV4dCkKKyAgICB7CisgICAgICAgIG1fZHJhd0lzU2NvcGVkID0gY29udGV4dC50ZW1w
b3JhcnlCZWdpbkRyYXdJZk5lZWRlZCgpOworICAgIH0KKworICAgIH5SZW5kZXJUYXJnZXRIZWxw
ZXIoKQorICAgIHsKKyAgICAgICAgZW5kRHJhdygpOworICAgIH0KKworICAgIHZvaWQgZW5kRHJh
dygpCisgICAgeworICAgICAgICBpZiAobV9kcmF3SXNTY29wZWQpCisgICAgICAgICAgICBtX2Nv
bnRleHQuZW5kRHJhdygpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQm
IG1fY29udGV4dDsKKyAgICBib29sIG1fZHJhd0lzU2NvcGVkOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1JlbmRlclRhcmdldEhlbHBlci5oCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpl
eGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0
eQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVu
ZGVyZXIuY3BwCShyZXZpc2lvbiAyMDc4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
RmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTQsNyArNDE0LDEx
IEBAIGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXI6OmJlZ2luRmkKICAgICAgICAgbV9o
YXZlRmlsdGVyRWZmZWN0ID0gZmFsc2U7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0g
ICAgCisKKyNpZiBVU0UoRElSRUNUMkQpCisgICAgc291cmNlR3JhcGhpY3NDb250ZXh0LT50ZW1w
b3JhcnlCZWdpbkRyYXdJZk5lZWRlZCgpOworI2VuZGlmCisKICAgICAvLyBUcmFuc2xhdGUgdGhl
IGNvbnRleHQgc28gdGhhdCB0aGUgY29udGVudHMgb2YgdGhlIGxheWVyIGlzIGNhcHR1cmVkIGlu
IHRoZSBvZmZzY3JlZW4gbWVtb3J5IGJ1ZmZlci4KICAgICBzb3VyY2VHcmFwaGljc0NvbnRleHQt
PnNhdmUoKTsKICAgICBzb3VyY2VHcmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtbV9wYWludE9m
ZnNldC54KCksIC1tX3BhaW50T2Zmc2V0LnkoKSk7CkBAIC00MjksNyArNDMzLDggQEAgdm9pZCBG
aWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcjo6YXBwbHlGaQogewogICAgIEFTU0VSVChtX2hhdmVG
aWx0ZXJFZmZlY3QgJiYgbV9yZW5kZXJMYXllci0+ZmlsdGVyUmVuZGVyZXIoKSk7CiAgICAgRmls
dGVyRWZmZWN0UmVuZGVyZXIqIGZpbHRlciA9IG1fcmVuZGVyTGF5ZXItPmZpbHRlclJlbmRlcmVy
KCk7Ci0gICAgZmlsdGVyLT5pbnB1dENvbnRleHQoKS0+cmVzdG9yZSgpOworICAgIEdyYXBoaWNz
Q29udGV4dCogc291cmNlR3JhcGhpY3NDb250ZXh0ID0gZmlsdGVyLT5pbnB1dENvbnRleHQoKTsK
KyAgICBzb3VyY2VHcmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKIAogICAgIGZpbHRlci0+YXBw
bHkoKTsKICAgICAKQEAgLTQzNyw2ICs0NDIsMTAgQEAgdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJl
ckhlbHBlcjo6YXBwbHlGaQogICAgIExheW91dFJlY3QgZGVzdFJlY3QgPSBmaWx0ZXItPm91dHB1
dFJlY3QoKTsKICAgICBkZXN0UmVjdC5tb3ZlKG1fcGFpbnRPZmZzZXQueCgpLCBtX3BhaW50T2Zm
c2V0LnkoKSk7CiAKKyNpZiBVU0UoRElSRUNUMkQpCisgICAgc291cmNlR3JhcGhpY3NDb250ZXh0
LT5lbmREcmF3KCk7CisjZW5kaWYKKwogICAgIGlmIChJbWFnZUJ1ZmZlciogb3V0cHV0QnVmZmVy
ID0gZmlsdGVyLT5vdXRwdXQoKSkKICAgICAgICAgZGVzdGluYXRpb25Db250ZXh0LmRyYXdJbWFn
ZUJ1ZmZlcigqb3V0cHV0QnVmZmVyLCBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGRlc3RSZWN0LCBt
X3JlbmRlckxheWVyLT5yZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSkp
OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293173</attachid>
            <date>2016-10-28 10:42:13 -0700</date>
            <delta_ts>2016-10-28 10:52:28 -0700</delta_ts>
            <desc>Rebaselined Patch</desc>
            <filename>beginEndPaint.patch</filename>
            <type>text/plain</type>
            <size>9408</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODA1MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDE2LTEwLTI4ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBD
b3JyZWN0IGJvb2trZWVwaW5nIGZvciBiZWdpbi9lbmQgZHJhdyBwYWlycworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzODk4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGlyZWN0MkQgZG9lcyBub3QgcGVy
bWl0IG5lc3RlZCBCZWdpbi9FbmQgcGFpcnMsIHNvIHdlIG5ldmVyIHdhbnQgdG8gaXNzdWUgYQor
ICAgICAgICBzZWNvbmQgQmVnaW5EcmF3IG9uIGEgY29udGV4dCB0aGF0IGhhcyBhbHJlYWR5IGVu
dGVyZWQgdGhpcyBzdGF0ZS4gVGhlcmVmb3JlLAorICAgICAgICBJIGNoYW5nZWQgdGhpcyB0byBh
IGJvb2xlYW4gYW5kIGdvdCByaWQgb2YgdGhlIEJlZ2luRHJhdyBjb3VudGVyLgorCisgICAgICAg
IENsaXBwaW5nIGluIERpcmVjdDJEIG5lZWRzIHRvIGJlIGRvbmUgaW5zaWRlIHRoZSBjb250ZXh0
IG9mIGEgQmVnaW5EcmF3L0VuZERyYXcKKyAgICAgICAgcGFpci4gVGhpcyBtZWFucyB0aGF0IHdl
IGhhdmUgdG8gZW50ZXIgYSAiZHJhd2luZyIgc3RhdGUgZWFybGllciB0aGFuIHdlIG1pZ2h0Cisg
ICAgICAgIGZvciBDb3JlR3JhcGhpY3Mgb3IgQ2Fpcm8uCisKKyAgICAgICAgSW4gcHJhY3RpY2Ug
dGhpcyBkb2Vzbid0IGNhdXNlIHRvbyBtYW55IGlzc3VlcywgZXhjZXB0IHdoZW4gZGVhbGxvY2F0
aW5nIGEKKyAgICAgICAgZmlsdGVyIG9yIG90aGVyIHRlbXBvcmFyeSBjb250ZXh0IHdoZXJlIHdl
IHN0YXJ0ZWQgYSAiQmVnaW5EcmF3IiBkdXJpbmcgc2V0dXAKKyAgICAgICAgb2YgdGhlIGNvbnRl
eHQsIGFuZCBoYXZlIG5vdCBlbmRlZCB0aGUgZHJhdyBiZWNhdXNlIG9mIHRoaXMgZGFuZ2xpbmcg
ZW5jbG9zaW5nCisgICAgICAgIHNjb3BlLiBUaGlzIGxlYXZlcyB1cyBvdXQgb2YgYmFsYW5jZSB3
aXRoIGEgbWlzc2luZyAiRW5kRHJhdyIuCisgICAgICAgIAorICAgICAgICBXZSBjYW4gYXZvaWQg
dGhlc2UgcHJvYmxlbXMgYnkgZmx1c2hpbmcgdGhlIHJlbmRlciB0YXJnZXQgd2hlbiB3b3JraW5n
CisgICAgICAgIHdpdGggUmVuZGVyVGFyZ2V0cyB0aGF0IHJlcHJlc2VudCBJbWFnZSB0eXBlcy4g
Tm9ybWFsIGRyYXdpbmcgYmFsYW5jZXMgdGhlCisgICAgICAgIEJlZ2luL0VuZCBkcmF3aW5nIHN0
YXRlcyBwcm9wZXJseS4KKworICAgICAgICBXaGVuIGEgZGFuZ2xpbmcgRW5kRHJhdyBpcyBkZXRl
Y3RlZCwgYW5kIGl0IGlzIGR1ZSB0byB0aGUgb2JqZWN0IGNyZWF0aW5nIGEgY2xpcAorICAgICAg
ICBhcyBpdHMgZmlyc3QgZHJhd2luZyBvcGVyYXRpb24sIHdlIGRvbid0IHRyZWF0IHRoaXMgYXMg
YW4gZXJyb3IgYW5kIHNpbXBseSBlbmQKKyAgICAgICAgdGhlIGRyYXcgc3RhdGUuCisgICAgICAg
IAorICAgICAgICBUZXN0ZWQgYnkgZXhpc3RpbmcgbGF5b3V0IHRlc3RzLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZSk6IElmIHdlCisgICAgICAgIGFyZSBzdGlsbCBpbiBhIGRyYXcgc3RhdGUgdGhh
dCB3YXMgZHVlIHRvIGNsaXBwaW5nLCBlbmQgdGhlIGRyYXcuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNsaXApOiBOb3RlIHRoYXQgYW55IEJlZ2lu
RHJhdyB3ZSBuZWVkCisgICAgICAgIHRvIGlzc3VlIGhlcmUgaXMgZHVlIHRvIGNsaXBwaW5nLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpiZWdpbkRy
YXdJZk5lZWRlZCk6IEFjY2VwdCBhIG5ldyBhcmd1bWVudAorICAgICAgICB0byBpbmRpY2F0ZSB0
aGF0IHdlIGFyZSBlbnRlcmluZyBkcmF3IHN0YXRlIGR1ZSB0byBjbGlwcGluZy4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kRHJhdyk6IFN3aXRj
aCBmcm9tIGEgY291bnRlciB0byBhIGJvb2xlYW4sCisgICAgICAgIGFuZCBjbGVhbiB1cCB0aGUg
J2JlZ2FuIGRyYXdpbmcgZHVlIHRvIGNsaXBwaW5nJyBzdGF0ZS4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6Zmx1c2gpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6IFVzZSB0aGUgbmV3ICdSZW5kZXJUYXJn
ZXRTY29wZWREcmF3aW5nJyBoZWxwZXIgY2xhc3MsCisgICAgICAgIGFuZCBmb3JjZSBhIGZsdXNo
IHRvIHRoZSBkZXN0aW5hdGlvbiBjb250ZXh0IGF0IHRoZSBlbmQgb2YgdGhlIGltYWdlIHBhaW50
LgorCiAyMDE2LTEwLTI4ICBEYXZlIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAg
IFtDU1MgUGFyc2VyXSBNaXNjZWxsYW5lb3VzIGJ1ZyBmaXhlcwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9u
IDIwODAxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NTYsNiArNTU2LDcgQEAgcHVibGljOgogICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgZGlkQmVnaW5EcmF3KCkgY29uc3Q7CiAgICAgRDJEMV9DT0xPUl9G
IGNvbG9yV2l0aEdsb2JhbEFscGhhKGNvbnN0IENvbG9yJikgY29uc3Q7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBlbmREcmF3KCk7CisgICAgdm9pZCBmbHVzaCgpOwogCiAgICAgSUQyRDFCcnVz
aCogc29saWRTdHJva2VCcnVzaCgpIGNvbnN0OwogICAgIElEMkQxQnJ1c2gqIHNvbGlkRmlsbEJy
dXNoKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHJldmlz
aW9uIDIwODAxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw3ICszMDgsMTAg
QEAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpYwogICAgIGlmICghbV9y
ZW5kZXJUYXJnZXQpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVCghbV9iZWdpbkRyYXdD
b3VudC51bnNhZmVHZXQoKSk7CisgICAgaWYgKG1fZGlkQmVnaW5EcmF3RHVlVG9DbGlwKQorICAg
ICAgICBlbmREcmF3KCk7CisKKyAgICBBU1NFUlQoIW1fZGlkQmVnaW5EcmF3KTsKIH0KIAogQ09N
UHRyPElEMkQxU29saWRDb2xvckJydXNoPiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6
OmJydXNoV2l0aENvbG9yKGNvbnN0IEQyRDFfQ09MT1JfRiYgY29sb3IpCkBAIC0zNDUsNyArMzQ4
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNsaQogewogICAgIC8v
IEluIEQyRCwgd2UgY2FuIG9ubHkgY2xpcCBpbiB0aGUgY29udGV4dCBvZiBhICdCZWdpbkRyYXcn
LCBhbmQgdGhlIGNsaXAgY2FuCiAgICAgLy8gb25seSBsaXZlIGFzIGxvbmcgYXMgdGhlIGRyYXcg
aXMgaGFwcGVuaW5nLgotICAgIGJlZ2luRHJhd0lmTmVlZGVkKCk7CisgICAgYmVnaW5EcmF3SWZO
ZWVkZWQoRHJhd1JlYXNvbjo6Q2xpcHBpbmcpOwogCiAgICAgaWYgKG1fcmVuZGVyU3RhdGVzLmlz
RW1wdHkoKSkKICAgICAgICAgc2F2ZSgpOwpAQCAtMzYzLDcgKzM2Niw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjbGkKIHsKICAgICAvLyBJbiBEMkQsIHdlIGNhbiBv
bmx5IGNsaXAgaW4gdGhlIGNvbnRleHQgb2YgYSAnQmVnaW5EcmF3JywgYW5kIHRoZSBjbGlwIGNh
bgogICAgIC8vIG9ubHkgbGl2ZSBhcyBsb25nIGFzIHRoZSBkcmF3IGlzIGhhcHBlbmluZy4KLSAg
ICBiZWdpbkRyYXdJZk5lZWRlZCgpOworICAgIGJlZ2luRHJhd0lmTmVlZGVkKERyYXdSZWFzb246
OkNsaXBwaW5nKTsKIAogICAgIEFTU0VSVChtX3JlbmRlclN0YXRlcy5zaXplKCkpOwogICAgIGlm
ICghbV9yZW5kZXJTdGF0ZXMuc2l6ZSgpKQpAQCAtNDAwLDcgKzQwMyw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpmbHUKICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVE
RUQoaHIpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmJlZ2lu
RHJhd0lmTmVlZGVkKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpiZWdp
bkRyYXdJZk5lZWRlZChEcmF3UmVhc29uIHJlYXNvbikKIHsKICAgICBBU1NFUlQobV9yZW5kZXJU
YXJnZXQuZ2V0KCkpOwogICAgIGlmIChkaWRCZWdpbkRyYXcoKSkKQEAgLTQwOCw3ICs0MTEsMTAg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmJlZwogCiAgICAgbV9yZW5k
ZXJUYXJnZXQtPkJlZ2luRHJhdygpOwogCi0gICAgKyttX2JlZ2luRHJhd0NvdW50OworICAgIGlm
IChyZWFzb24gPT0gRHJhd1JlYXNvbjo6Q2xpcHBpbmcpCisgICAgICAgIG1fZGlkQmVnaW5EcmF3
RHVlVG9DbGlwID0gdHJ1ZTsKKworICAgIG1fZGlkQmVnaW5EcmF3ID0gdHJ1ZTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmVuZERyYXcoKQpAQCAtNDIwLDcgKzQy
Niw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjplbmQKICAgICBpZiAo
IVNVQ0NFRURFRChocikpCiAgICAgICAgIFdURkxvZ0Fsd2F5cygiRmFpbGVkIGluIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kRHJhdzogaHI9JWxkLCBmaXJzdD0lbGQsIHNlY29u
ZD0lbGQiLCBociwgZmlyc3QsIHNlY29uZCk7CiAKLSAgICAtLW1fYmVnaW5EcmF3Q291bnQ7Cisg
ICAgbV9kaWRCZWdpbkRyYXcgPSBmYWxzZTsKKyAgICBtX2RpZEJlZ2luRHJhd0R1ZVRvQ2xpcCA9
IGZhbHNlOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cmVzdG9y
ZSgpCkBAIC01MzAsNiArNTM3LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmREcmF3KCkK
ICAgICBtX2RhdGEtPmVuZERyYXcoKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZsdXNo
KCkKK3sKKyAgICBtX2RhdGEtPmZsdXNoKCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3UGF0dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5z
Zm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywg
Q29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7CiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSB8fCAhcGF0dGVyblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEaXJlY3Qy
RC5oCShyZXZpc2lvbiAyMDgwMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGQyZDFlZmZlY3RzLmg+CiAjaW5jbHVk
ZSA8ZDJkMWhlbHBlci5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDx3dGYvQ2hl
Y2tlZEFyaXRobWV0aWMuaD4KICNpbmNsdWRlIDx3dGYvVGlueUxSVUNhY2hlLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTQ4LDcgKzQ3LDkgQEAgcHVibGljOgogICAgIHZvaWQgY2xpcChj
b25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIGNsaXAoY29uc3QgUGF0aCYpOwogICAgIHZvaWQg
Y2xpcChJRDJEMUdlb21ldHJ5Kik7Ci0gICAgdm9pZCBiZWdpbkRyYXdJZk5lZWRlZCgpOworCisg
ICAgZW51bSBEcmF3UmVhc29uIHsgTm9ybWFsLCBDbGlwcGluZyB9OworICAgIHZvaWQgYmVnaW5E
cmF3SWZOZWVkZWQoRHJhd1JlYXNvbiA9IE5vcm1hbCk7CiAgICAgdm9pZCBlbmREcmF3KCk7CiAg
ICAgdm9pZCBmbHVzaCgpOwogICAgIHZvaWQgc2F2ZSgpOwpAQCAtNzUsMTIgKzc2LDExIEBAIHB1
YmxpYzoKIAogICAgIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4gYnJ1c2hXaXRoQ29sb3Io
Y29uc3QgRDJEMV9DT0xPUl9GJik7CiAKLSAgICBib29sIGRpZEJlZ2luRHJhdygpIGNvbnN0IHsg
cmV0dXJuIG1fYmVnaW5EcmF3Q291bnQudW5zYWZlR2V0KCk7IH0KKyAgICBib29sIGRpZEJlZ2lu
RHJhdygpIGNvbnN0IHsgcmV0dXJuIG1fZGlkQmVnaW5EcmF3OyB9CiAKICAgICBIREMgbV9oZGMg
eyBudWxscHRyIH07CiAgICAgRDJEMV9CTEVORF9NT0RFIG1fYmxlbmRNb2RlIHsgRDJEMV9CTEVO
RF9NT0RFX01VTFRJUExZIH07CiAgICAgRDJEMV9DT01QT1NJVEVfTU9ERSBtX2NvbXBvc2l0ZU1v
ZGUgeyBEMkQxX0NPTVBPU0lURV9NT0RFX1NPVVJDRV9PVkVSIH07Ci0gICAgQ2hlY2tlZDx1bnNp
Z25lZD4gbV9iZWdpbkRyYXdDb3VudCB7IDAgfTsKICAgICBib29sIG1fc2hvdWxkSW5jbHVkZUNo
aWxkV2luZG93cyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3N0cm9rZVN5bGVJc0RpcnR5IHsgZmFs
c2UgfTsKIApAQCAtMTE1LDYgKzExNSw4IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9wYXR0ZXJu
V2lkdGggeyAxLjBmIH07CiAgICAgZmxvYXQgbV9wYXR0ZXJuT2Zmc2V0IHsgMCB9OwogICAgIGZs
b2F0IG1fc3Ryb2tlVGhpY2tuZXNzIHsgMCB9OworICAgIGJvb2wgbV9kaWRCZWdpbkRyYXcgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9kaWRCZWdpbkRyYXdEdWVUb0NsaXAgeyBmYWxzZSB9OwogfTsK
IAogY2xhc3MgRDJEQ29udGV4dFN0YXRlU2F2ZXIgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJE
LmNwcAkocmV2aXNpb24gMjA4MDE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICsz
NSw3IEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJlbmRlclRhcmdldFNj
b3BlZERyYXdpbmcuaCIKICNpbmNsdWRlIDxkMmQxLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC00NCwxMCArNDUsNiBAQAogI2luY2x1ZGUgPHd0
Zi90ZXh0L0Jhc2U2NC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi0jaWYg
UExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgotI2Vu
ZGlmCi0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNzYsNiArMTczLDggQEAgdm9pZCBJ
bWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVuaQogCiB2b2lkIEltYWdlQnVmZmVyOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5k
TW9kZSBibGVuZE1vZGUpCiB7CisgICAgUmVuZGVyVGFyZ2V0U2NvcGVkRHJhd2luZyBzY29wZWRE
cmF3KGRlc3RDb250ZXh0KTsKKwogICAgIGF1dG8gYml0bWFwVGFyZ2V0ID0gcmVpbnRlcnByZXRf
Y2FzdDxJRDJEMUJpdG1hcFJlbmRlclRhcmdldCo+KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQo
KSk7CiAgICAgYXV0byBvdXRwdXRUYXJnZXQgPSBkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQo
KTsKIApAQCAtMjAwLDYgKzE5OSw4IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3ND
b250ZXh0JgogICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSwgbV9y
ZXNvbHV0aW9uU2NhbGUpOwogCiAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdl
LCBpbWFnZS0+R2V0U2l6ZSgpLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcCwgYmxlbmRN
b2RlKTsKKworICAgIGRlc3RDb250ZXh0LmZsdXNoKCk7CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXI6
OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9k
ZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293175</attachid>
            <date>2016-10-28 10:52:28 -0700</date>
            <delta_ts>2016-10-28 10:54:20 -0700</delta_ts>
            <desc>Patch v5</desc>
            <filename>beginEndPaint.patch</filename>
            <type>text/plain</type>
            <size>9404</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODA1MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDE2LTEwLTI4ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBD
b3JyZWN0IGJvb2trZWVwaW5nIGZvciBiZWdpbi9lbmQgZHJhdyBwYWlycworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzODk4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGlyZWN0MkQgZG9lcyBub3QgcGVy
bWl0IG5lc3RlZCBCZWdpbi9FbmQgcGFpcnMsIHNvIHdlIG5ldmVyIHdhbnQgdG8gaXNzdWUgYQor
ICAgICAgICBzZWNvbmQgQmVnaW5EcmF3IG9uIGEgY29udGV4dCB0aGF0IGhhcyBhbHJlYWR5IGVu
dGVyZWQgdGhpcyBzdGF0ZS4gVGhlcmVmb3JlLAorICAgICAgICBJIGNoYW5nZWQgdGhpcyB0byBh
IGZsYWcsIHJhdGhlciB0aGFuIGEgY291bnQuCisKKyAgICAgICAgQ2xpcHBpbmcgaW4gRGlyZWN0
MkQgbmVlZHMgdG8gYmUgZG9uZSBpbnNpZGUgdGhlIGNvbnRleHQgb2YgYSBCZWdpbkRyYXcvRW5k
RHJhdworICAgICAgICBwYWlyLiBUaGlzIG1lYW5zIHRoYXQgd2UgaGF2ZSB0byBlbnRlciBhICJk
cmF3aW5nIiBzdGF0ZSBlYXJsaWVyIHRoYW4gd2UgbWlnaHQKKyAgICAgICAgZm9yIENvcmVHcmFw
aGljcyBvciBDYWlyby4KKworICAgICAgICBJbiBwcmFjdGljZSB0aGlzIGRvZXNuJ3QgY2F1c2Ug
dG9vIG1hbnkgaXNzdWVzLCBleGNlcHQgd2hlbiBkZWFsbG9jYXRpbmcgYQorICAgICAgICBmaWx0
ZXIgb3Igb3RoZXIgdGVtcG9yYXJ5IGNvbnRleHQgd2hlcmUgd2Ugc3RhcnRlZCBhICJCZWdpbkRy
YXciIGR1cmluZyBzZXR1cAorICAgICAgICBvZiB0aGUgY29udGV4dCwgYW5kIGhhdmUgbm90IGVu
ZGVkIHRoZSBkcmF3IGJlY2F1c2Ugb2YgdGhpcyBkYW5nbGluZyBlbmNsb3NpbmcKKyAgICAgICAg
c2NvcGUuIFRoaXMgbGVhdmVzIHVzIG91dCBvZiBiYWxhbmNlIHdpdGggYSBtaXNzaW5nICJFbmRE
cmF3Ii4KKyAgICAgICAgCisgICAgICAgIFdlIGNhbiBhdm9pZCB0aGVzZSBwcm9ibGVtcyBieSBm
bHVzaGluZyB0aGUgcmVuZGVyIHRhcmdldCB3aGVuIHdvcmtpbmcKKyAgICAgICAgd2l0aCBSZW5k
ZXJUYXJnZXRzIHRoYXQgcmVwcmVzZW50IEltYWdlIHR5cGVzLiBOb3JtYWwgZHJhd2luZyBiYWxh
bmNlcyB0aGUKKyAgICAgICAgQmVnaW4vRW5kIGRyYXdpbmcgc3RhdGVzIHByb3Blcmx5LgorCisg
ICAgICAgIFdoZW4gYSBkYW5nbGluZyBFbmREcmF3IGlzIGRldGVjdGVkLCBhbmQgaXQgaXMgZHVl
IHRvIHRoZSBvYmplY3QgY3JlYXRpbmcgYSBjbGlwCisgICAgICAgIGFzIGl0cyBmaXJzdCBkcmF3
aW5nIG9wZXJhdGlvbiwgd2UgZG9uJ3QgdHJlYXQgdGhpcyBhcyBhbiBlcnJvciBhbmQgc2ltcGx5
IGVuZAorICAgICAgICB0aGUgZHJhdyBzdGF0ZS4KKyAgICAgICAgCisgICAgICAgIFRlc3RlZCBi
eSBleGlzdGluZyBsYXlvdXQgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKTogSWYgd2UK
KyAgICAgICAgYXJlIHN0aWxsIGluIGEgZHJhdyBzdGF0ZSB0aGF0IHdhcyBkdWUgdG8gY2xpcHBp
bmcsIGVuZCB0aGUgZHJhdy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTo6Y2xpcCk6IE5vdGUgdGhhdCBhbnkgQmVnaW5EcmF3IHdlIG5lZWQKKyAgICAg
ICAgdG8gaXNzdWUgaGVyZSBpcyBkdWUgdG8gY2xpcHBpbmcuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmJlZ2luRHJhd0lmTmVlZGVkKTogQWNjZXB0
IGEgbmV3IGFyZ3VtZW50CisgICAgICAgIHRvIGluZGljYXRlIHRoYXQgd2UgYXJlIGVudGVyaW5n
IGRyYXcgc3RhdGUgZHVlIHRvIGNsaXBwaW5nLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOjplbmREcmF3KTogU3dpdGNoIGZyb20gYSBjb3VudGVyIHRv
IGEgYm9vbGVhbiwKKyAgICAgICAgYW5kIGNsZWFuIHVwIHRoZSAnYmVnYW4gZHJhd2luZyBkdWUg
dG8gY2xpcHBpbmcnIHN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpm
bHVzaCk6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpkcmF3KTogVXNlIHRoZSBuZXcgJ1JlbmRlclRhcmdldFNjb3BlZERyYXdpbmcnIGhl
bHBlciBjbGFzcywKKyAgICAgICAgYW5kIGZvcmNlIGEgZmx1c2ggdG8gdGhlIGRlc3RpbmF0aW9u
IGNvbnRleHQgYXQgdGhlIGVuZCBvZiB0aGUgaW1hZ2UgcGFpbnQuCisKIDIwMTYtMTAtMjggIERh
dmUgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgW0NTUyBQYXJzZXJdIE1pc2Nl
bGxhbmVvdXMgYnVnIGZpeGVzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gMjA4MDE5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU1Niw2ICs1NTYsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBk
aWRCZWdpbkRyYXcoKSBjb25zdDsKICAgICBEMkQxX0NPTE9SX0YgY29sb3JXaXRoR2xvYmFsQWxw
aGEoY29uc3QgQ29sb3ImKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZERyYXco
KTsKKyAgICB2b2lkIGZsdXNoKCk7CiAKICAgICBJRDJEMUJydXNoKiBzb2xpZFN0cm9rZUJydXNo
KCkgY29uc3Q7CiAgICAgSUQyRDFCcnVzaCogc29saWRGaWxsQnJ1c2goKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJl
Y3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAkocmV2aXNpb24gMjA4MDE5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJE
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA4LDcgKzMwOCwxMCBAQCBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU6On5HcmFwaGljCiAgICAgaWYgKCFtX3JlbmRlclRhcmdldCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKCFtX2JlZ2luRHJhd0NvdW50LnVuc2FmZUdldCgpKTsK
KyAgICBpZiAobV9iZWdpbkRyYXdTdGF0ZSA9PSBEcmF3UmVhc29uOjpDbGlwcGluZykKKyAgICAg
ICAgZW5kRHJhdygpOworCisgICAgQVNTRVJUKCFkaWRCZWdpbkRyYXcoKSk7CiB9CiAKIENPTVB0
cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4gR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpi
cnVzaFdpdGhDb2xvcihjb25zdCBEMkQxX0NPTE9SX0YmIGNvbG9yKQpAQCAtMzQ1LDcgKzM0OCw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjbGkKIHsKICAgICAvLyBJ
biBEMkQsIHdlIGNhbiBvbmx5IGNsaXAgaW4gdGhlIGNvbnRleHQgb2YgYSAnQmVnaW5EcmF3Jywg
YW5kIHRoZSBjbGlwIGNhbgogICAgIC8vIG9ubHkgbGl2ZSBhcyBsb25nIGFzIHRoZSBkcmF3IGlz
IGhhcHBlbmluZy4KLSAgICBiZWdpbkRyYXdJZk5lZWRlZCgpOworICAgIGJlZ2luRHJhd0lmTmVl
ZGVkKERyYXdSZWFzb246OkNsaXBwaW5nKTsKIAogICAgIGlmIChtX3JlbmRlclN0YXRlcy5pc0Vt
cHR5KCkpCiAgICAgICAgIHNhdmUoKTsKQEAgLTM2Myw3ICszNjYsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y2xpCiB7CiAgICAgLy8gSW4gRDJELCB3ZSBjYW4gb25s
eSBjbGlwIGluIHRoZSBjb250ZXh0IG9mIGEgJ0JlZ2luRHJhdycsIGFuZCB0aGUgY2xpcCBjYW4K
ICAgICAvLyBvbmx5IGxpdmUgYXMgbG9uZyBhcyB0aGUgZHJhdyBpcyBoYXBwZW5pbmcuCi0gICAg
YmVnaW5EcmF3SWZOZWVkZWQoKTsKKyAgICBiZWdpbkRyYXdJZk5lZWRlZChEcmF3UmVhc29uOjpD
bGlwcGluZyk7CiAKICAgICBBU1NFUlQobV9yZW5kZXJTdGF0ZXMuc2l6ZSgpKTsKICAgICBpZiAo
IW1fcmVuZGVyU3RhdGVzLnNpemUoKSkKQEAgLTQwMCw3ICs0MDMsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Zmx1CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVE
KGhyKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpiZWdpbkRy
YXdJZk5lZWRlZCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6YmVnaW5E
cmF3SWZOZWVkZWQoRHJhd1JlYXNvbiByZWFzb24pCiB7CiAgICAgQVNTRVJUKG1fcmVuZGVyVGFy
Z2V0LmdldCgpKTsKICAgICBpZiAoZGlkQmVnaW5EcmF3KCkpCkBAIC00MDgsNyArNDExLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmJlZwogCiAgICAgbV9yZW5kZXJU
YXJnZXQtPkJlZ2luRHJhdygpOwogCi0gICAgKyttX2JlZ2luRHJhd0NvdW50OworICAgIG1fYmVn
aW5EcmF3U3RhdGUgPSByZWFzb247CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlOjplbmREcmF3KCkKQEAgLTQyMCw3ICs0MjMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kCiAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQogICAgICAgICBX
VEZMb2dBbHdheXMoIkZhaWxlZCBpbiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmVu
ZERyYXc6IGhyPSVsZCwgZmlyc3Q9JWxkLCBzZWNvbmQ9JWxkIiwgaHIsIGZpcnN0LCBzZWNvbmQp
OwogCi0gICAgLS1tX2JlZ2luRHJhd0NvdW50OworICAgIG1fYmVnaW5EcmF3U3RhdGUgPT0gRHJh
d1JlYXNvbjo6Tm90RHJhd2luZzsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU6OnJlc3RvcmUoKQpAQCAtNTMwLDYgKzUzMywxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZW5kRHJhdygpCiAgICAgbV9kYXRhLT5lbmREcmF3KCk7CiB9CiAKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmbHVzaCgpCit7CisgICAgbV9kYXRhLT5mbHVzaCgpOworfQorCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQog
ewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZl
cnRpYmxlKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlRGlyZWN0MkQuaAkocmV2aXNpb24gMjA4MDE5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJE
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxkMmQxZWZmZWN0
cy5oPgogI2luY2x1ZGUgPGQyZDFoZWxwZXIuaD4KICNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5j
bHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CiAjaW5jbHVkZSA8d3RmL1RpbnlMUlVDYWNo
ZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00OCw3ICs0Nyw5IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBjbGlwKGNvbnN0IFBhdGgm
KTsKICAgICB2b2lkIGNsaXAoSUQyRDFHZW9tZXRyeSopOwotICAgIHZvaWQgYmVnaW5EcmF3SWZO
ZWVkZWQoKTsKKworICAgIGVudW0gRHJhd1JlYXNvbiB7IE5vdERyYXdpbmcsIE5vcm1hbCwgQ2xp
cHBpbmcgfTsKKyAgICB2b2lkIGJlZ2luRHJhd0lmTmVlZGVkKERyYXdSZWFzb24gPSBOb3JtYWwp
OwogICAgIHZvaWQgZW5kRHJhdygpOwogICAgIHZvaWQgZmx1c2goKTsKICAgICB2b2lkIHNhdmUo
KTsKQEAgLTc1LDEyICs3NiwxMSBAQCBwdWJsaWM6CiAKICAgICBDT01QdHI8SUQyRDFTb2xpZENv
bG9yQnJ1c2g+IGJydXNoV2l0aENvbG9yKGNvbnN0IEQyRDFfQ09MT1JfRiYpOwogCi0gICAgYm9v
bCBkaWRCZWdpbkRyYXcoKSBjb25zdCB7IHJldHVybiBtX2JlZ2luRHJhd0NvdW50LnVuc2FmZUdl
dCgpOyB9CisgICAgYm9vbCBkaWRCZWdpbkRyYXcoKSBjb25zdCB7IHJldHVybiBtX2JlZ2luRHJh
d1N0YXRlICE9IERyYXdSZWFzb246Ok5vdERyYXdpbmc7IH0KIAogICAgIEhEQyBtX2hkYyB7IG51
bGxwdHIgfTsKICAgICBEMkQxX0JMRU5EX01PREUgbV9ibGVuZE1vZGUgeyBEMkQxX0JMRU5EX01P
REVfTVVMVElQTFkgfTsKICAgICBEMkQxX0NPTVBPU0lURV9NT0RFIG1fY29tcG9zaXRlTW9kZSB7
IEQyRDFfQ09NUE9TSVRFX01PREVfU09VUkNFX09WRVIgfTsKLSAgICBDaGVja2VkPHVuc2lnbmVk
PiBtX2JlZ2luRHJhd0NvdW50IHsgMCB9OwogICAgIGJvb2wgbV9zaG91bGRJbmNsdWRlQ2hpbGRX
aW5kb3dzIHsgZmFsc2UgfTsKICAgICBib29sIG1fc3Ryb2tlU3lsZUlzRGlydHkgeyBmYWxzZSB9
OwogCkBAIC0xMTAsNiArMTEwLDcgQEAgcHJpdmF0ZToKICAgICBEMkQxX0xJTkVfSk9JTiBtX2xp
bmVKb2luIHsgRDJEMV9MSU5FX0pPSU5fTUlURVIgfTsKICAgICBTdHJva2VTdHlsZSBtX3N0cm9r
ZVN0eWxlIHsgU29saWRTdHJva2UgfTsKICAgICBEYXNoQXJyYXkgbV9kYXNoZXM7CisgICAgRHJh
d1JlYXNvbiBtX2JlZ2luRHJhd1N0YXRlIHsgTm90RHJhd2luZyB9OwogICAgIGZsb2F0IG1fbWl0
ZXJMaW1pdCB7IDEuMGYgfTsKICAgICBmbG9hdCBtX2Rhc2hPZmZzZXQgeyAwIH07CiAgICAgZmxv
YXQgbV9wYXR0ZXJuV2lkdGggeyAxLjBmIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3Bw
CShyZXZpc2lvbiAyMDgwMTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcg
QEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUmVuZGVyVGFyZ2V0U2NvcGVk
RHJhd2luZy5oIgogI2luY2x1ZGUgPGQyZDEuaD4KICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTQ0LDEwICs0NSw2IEBACiAjaW5jbHVkZSA8d3RmL3Rl
eHQvQmFzZTY0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jZW5kaWYK
LQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE3Niw2ICsxNzMsOCBAQCB2b2lkIEltYWdl
QnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pCiAKIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXco
R3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2Rl
IGJsZW5kTW9kZSkKIHsKKyAgICBSZW5kZXJUYXJnZXRTY29wZWREcmF3aW5nIHNjb3BlZERyYXco
ZGVzdENvbnRleHQpOworCiAgICAgYXV0byBiaXRtYXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0
PElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0Kj4oY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsK
ICAgICBhdXRvIG91dHB1dFRhcmdldCA9IGRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwog
CkBAIC0yMDAsNiArMTk5LDggQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQmCiAgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29s
dXRpb25TY2FsZSk7CiAKICAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIGlt
YWdlLT5HZXRTaXplKCksIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wLCBibGVuZE1vZGUp
OworCisgICAgZGVzdENvbnRleHQuZmx1c2goKTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJh
d1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293176</attachid>
            <date>2016-10-28 10:54:20 -0700</date>
            <delta_ts>2016-10-28 14:49:14 -0700</delta_ts>
            <desc>Patch v6</desc>
            <filename>beginEndPaint.patch</filename>
            <type>text/plain</type>
            <size>9403</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODA1MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDE2LTEwLTI4ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBD
b3JyZWN0IGJvb2trZWVwaW5nIGZvciBiZWdpbi9lbmQgZHJhdyBwYWlycworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzODk4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGlyZWN0MkQgZG9lcyBub3QgcGVy
bWl0IG5lc3RlZCBCZWdpbi9FbmQgcGFpcnMsIHNvIHdlIG5ldmVyIHdhbnQgdG8gaXNzdWUgYQor
ICAgICAgICBzZWNvbmQgQmVnaW5EcmF3IG9uIGEgY29udGV4dCB0aGF0IGhhcyBhbHJlYWR5IGVu
dGVyZWQgdGhpcyBzdGF0ZS4gVGhlcmVmb3JlLAorICAgICAgICBJIGNoYW5nZWQgdGhpcyB0byBh
IGZsYWcsIHJhdGhlciB0aGFuIGEgY291bnQuCisKKyAgICAgICAgQ2xpcHBpbmcgaW4gRGlyZWN0
MkQgbmVlZHMgdG8gYmUgZG9uZSBpbnNpZGUgdGhlIGNvbnRleHQgb2YgYSBCZWdpbkRyYXcvRW5k
RHJhdworICAgICAgICBwYWlyLiBUaGlzIG1lYW5zIHRoYXQgd2UgaGF2ZSB0byBlbnRlciBhICJk
cmF3aW5nIiBzdGF0ZSBlYXJsaWVyIHRoYW4gd2UgbWlnaHQKKyAgICAgICAgZm9yIENvcmVHcmFw
aGljcyBvciBDYWlyby4KKworICAgICAgICBJbiBwcmFjdGljZSB0aGlzIGRvZXNuJ3QgY2F1c2Ug
dG9vIG1hbnkgaXNzdWVzLCBleGNlcHQgd2hlbiBkZWFsbG9jYXRpbmcgYQorICAgICAgICBmaWx0
ZXIgb3Igb3RoZXIgdGVtcG9yYXJ5IGNvbnRleHQgd2hlcmUgd2Ugc3RhcnRlZCBhICJCZWdpbkRy
YXciIGR1cmluZyBzZXR1cAorICAgICAgICBvZiB0aGUgY29udGV4dCwgYW5kIGhhdmUgbm90IGVu
ZGVkIHRoZSBkcmF3IGJlY2F1c2Ugb2YgdGhpcyBkYW5nbGluZyBlbmNsb3NpbmcKKyAgICAgICAg
c2NvcGUuIFRoaXMgbGVhdmVzIHVzIG91dCBvZiBiYWxhbmNlIHdpdGggYSBtaXNzaW5nICJFbmRE
cmF3Ii4KKyAgICAgICAgCisgICAgICAgIFdlIGNhbiBhdm9pZCB0aGVzZSBwcm9ibGVtcyBieSBm
bHVzaGluZyB0aGUgcmVuZGVyIHRhcmdldCB3aGVuIHdvcmtpbmcKKyAgICAgICAgd2l0aCBSZW5k
ZXJUYXJnZXRzIHRoYXQgcmVwcmVzZW50IEltYWdlIHR5cGVzLiBOb3JtYWwgZHJhd2luZyBiYWxh
bmNlcyB0aGUKKyAgICAgICAgQmVnaW4vRW5kIGRyYXdpbmcgc3RhdGVzIHByb3Blcmx5LgorCisg
ICAgICAgIFdoZW4gYSBkYW5nbGluZyBFbmREcmF3IGlzIGRldGVjdGVkLCBhbmQgaXQgaXMgZHVl
IHRvIHRoZSBvYmplY3QgY3JlYXRpbmcgYSBjbGlwCisgICAgICAgIGFzIGl0cyBmaXJzdCBkcmF3
aW5nIG9wZXJhdGlvbiwgd2UgZG9uJ3QgdHJlYXQgdGhpcyBhcyBhbiBlcnJvciBhbmQgc2ltcGx5
IGVuZAorICAgICAgICB0aGUgZHJhdyBzdGF0ZS4KKyAgICAgICAgCisgICAgICAgIFRlc3RlZCBi
eSBleGlzdGluZyBsYXlvdXQgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKTogSWYgd2UK
KyAgICAgICAgYXJlIHN0aWxsIGluIGEgZHJhdyBzdGF0ZSB0aGF0IHdhcyBkdWUgdG8gY2xpcHBp
bmcsIGVuZCB0aGUgZHJhdy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTo6Y2xpcCk6IE5vdGUgdGhhdCBhbnkgQmVnaW5EcmF3IHdlIG5lZWQKKyAgICAg
ICAgdG8gaXNzdWUgaGVyZSBpcyBkdWUgdG8gY2xpcHBpbmcuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmJlZ2luRHJhd0lmTmVlZGVkKTogQWNjZXB0
IGEgbmV3IGFyZ3VtZW50CisgICAgICAgIHRvIGluZGljYXRlIHRoYXQgd2UgYXJlIGVudGVyaW5n
IGRyYXcgc3RhdGUgZHVlIHRvIGNsaXBwaW5nLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOjplbmREcmF3KTogU3dpdGNoIGZyb20gYSBjb3VudGVyIHRv
IGEgYm9vbGVhbiwKKyAgICAgICAgYW5kIGNsZWFuIHVwIHRoZSAnYmVnYW4gZHJhd2luZyBkdWUg
dG8gY2xpcHBpbmcnIHN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpm
bHVzaCk6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpkcmF3KTogVXNlIHRoZSBuZXcgJ1JlbmRlclRhcmdldFNjb3BlZERyYXdpbmcnIGhl
bHBlciBjbGFzcywKKyAgICAgICAgYW5kIGZvcmNlIGEgZmx1c2ggdG8gdGhlIGRlc3RpbmF0aW9u
IGNvbnRleHQgYXQgdGhlIGVuZCBvZiB0aGUgaW1hZ2UgcGFpbnQuCisKIDIwMTYtMTAtMjggIERh
dmUgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgW0NTUyBQYXJzZXJdIE1pc2Nl
bGxhbmVvdXMgYnVnIGZpeGVzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gMjA4MDE5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU1Niw2ICs1NTYsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBk
aWRCZWdpbkRyYXcoKSBjb25zdDsKICAgICBEMkQxX0NPTE9SX0YgY29sb3JXaXRoR2xvYmFsQWxw
aGEoY29uc3QgQ29sb3ImKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZERyYXco
KTsKKyAgICB2b2lkIGZsdXNoKCk7CiAKICAgICBJRDJEMUJydXNoKiBzb2xpZFN0cm9rZUJydXNo
KCkgY29uc3Q7CiAgICAgSUQyRDFCcnVzaCogc29saWRGaWxsQnJ1c2goKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJl
Y3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAkocmV2aXNpb24gMjA4MDE5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJE
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA4LDcgKzMwOCwxMCBAQCBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU6On5HcmFwaGljCiAgICAgaWYgKCFtX3JlbmRlclRhcmdldCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKCFtX2JlZ2luRHJhd0NvdW50LnVuc2FmZUdldCgpKTsK
KyAgICBpZiAobV9iZWdpbkRyYXdTdGF0ZSA9PSBEcmF3UmVhc29uOjpDbGlwcGluZykKKyAgICAg
ICAgZW5kRHJhdygpOworCisgICAgQVNTRVJUKCFkaWRCZWdpbkRyYXcoKSk7CiB9CiAKIENPTVB0
cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4gR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpi
cnVzaFdpdGhDb2xvcihjb25zdCBEMkQxX0NPTE9SX0YmIGNvbG9yKQpAQCAtMzQ1LDcgKzM0OCw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjbGkKIHsKICAgICAvLyBJ
biBEMkQsIHdlIGNhbiBvbmx5IGNsaXAgaW4gdGhlIGNvbnRleHQgb2YgYSAnQmVnaW5EcmF3Jywg
YW5kIHRoZSBjbGlwIGNhbgogICAgIC8vIG9ubHkgbGl2ZSBhcyBsb25nIGFzIHRoZSBkcmF3IGlz
IGhhcHBlbmluZy4KLSAgICBiZWdpbkRyYXdJZk5lZWRlZCgpOworICAgIGJlZ2luRHJhd0lmTmVl
ZGVkKERyYXdSZWFzb246OkNsaXBwaW5nKTsKIAogICAgIGlmIChtX3JlbmRlclN0YXRlcy5pc0Vt
cHR5KCkpCiAgICAgICAgIHNhdmUoKTsKQEAgLTM2Myw3ICszNjYsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y2xpCiB7CiAgICAgLy8gSW4gRDJELCB3ZSBjYW4gb25s
eSBjbGlwIGluIHRoZSBjb250ZXh0IG9mIGEgJ0JlZ2luRHJhdycsIGFuZCB0aGUgY2xpcCBjYW4K
ICAgICAvLyBvbmx5IGxpdmUgYXMgbG9uZyBhcyB0aGUgZHJhdyBpcyBoYXBwZW5pbmcuCi0gICAg
YmVnaW5EcmF3SWZOZWVkZWQoKTsKKyAgICBiZWdpbkRyYXdJZk5lZWRlZChEcmF3UmVhc29uOjpD
bGlwcGluZyk7CiAKICAgICBBU1NFUlQobV9yZW5kZXJTdGF0ZXMuc2l6ZSgpKTsKICAgICBpZiAo
IW1fcmVuZGVyU3RhdGVzLnNpemUoKSkKQEAgLTQwMCw3ICs0MDMsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Zmx1CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVE
KGhyKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpiZWdpbkRy
YXdJZk5lZWRlZCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6YmVnaW5E
cmF3SWZOZWVkZWQoRHJhd1JlYXNvbiByZWFzb24pCiB7CiAgICAgQVNTRVJUKG1fcmVuZGVyVGFy
Z2V0LmdldCgpKTsKICAgICBpZiAoZGlkQmVnaW5EcmF3KCkpCkBAIC00MDgsNyArNDExLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmJlZwogCiAgICAgbV9yZW5kZXJU
YXJnZXQtPkJlZ2luRHJhdygpOwogCi0gICAgKyttX2JlZ2luRHJhd0NvdW50OworICAgIG1fYmVn
aW5EcmF3U3RhdGUgPSByZWFzb247CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlOjplbmREcmF3KCkKQEAgLTQyMCw3ICs0MjMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kCiAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQogICAgICAgICBX
VEZMb2dBbHdheXMoIkZhaWxlZCBpbiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmVu
ZERyYXc6IGhyPSVsZCwgZmlyc3Q9JWxkLCBzZWNvbmQ9JWxkIiwgaHIsIGZpcnN0LCBzZWNvbmQp
OwogCi0gICAgLS1tX2JlZ2luRHJhd0NvdW50OworICAgIG1fYmVnaW5EcmF3U3RhdGUgPSBEcmF3
UmVhc29uOjpOb3REcmF3aW5nOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZTo6cmVzdG9yZSgpCkBAIC01MzAsNiArNTMzLDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjplbmREcmF3KCkKICAgICBtX2RhdGEtPmVuZERyYXcoKTsKIH0KIAordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZsdXNoKCkKK3sKKyAgICBtX2RhdGEtPmZsdXNoKCk7Cit9CisKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhcGF0dGVyblRyYW5zZm9ybS5pc0ludmVy
dGlibGUoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGVEaXJlY3QyRC5oCShyZXZpc2lvbiAyMDgwMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGQyZDFlZmZlY3Rz
Lmg+CiAjaW5jbHVkZSA8ZDJkMWhlbHBlci5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNs
dWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KICNpbmNsdWRlIDx3dGYvVGlueUxSVUNhY2hl
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ4LDcgKzQ3LDkgQEAgcHVibGljOgogICAg
IHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIGNsaXAoY29uc3QgUGF0aCYp
OwogICAgIHZvaWQgY2xpcChJRDJEMUdlb21ldHJ5Kik7Ci0gICAgdm9pZCBiZWdpbkRyYXdJZk5l
ZWRlZCgpOworCisgICAgZW51bSBEcmF3UmVhc29uIHsgTm90RHJhd2luZywgTm9ybWFsLCBDbGlw
cGluZyB9OworICAgIHZvaWQgYmVnaW5EcmF3SWZOZWVkZWQoRHJhd1JlYXNvbiA9IE5vcm1hbCk7
CiAgICAgdm9pZCBlbmREcmF3KCk7CiAgICAgdm9pZCBmbHVzaCgpOwogICAgIHZvaWQgc2F2ZSgp
OwpAQCAtNzUsMTIgKzc2LDExIEBAIHB1YmxpYzoKIAogICAgIENPTVB0cjxJRDJEMVNvbGlkQ29s
b3JCcnVzaD4gYnJ1c2hXaXRoQ29sb3IoY29uc3QgRDJEMV9DT0xPUl9GJik7CiAKLSAgICBib29s
IGRpZEJlZ2luRHJhdygpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW5EcmF3Q291bnQudW5zYWZlR2V0
KCk7IH0KKyAgICBib29sIGRpZEJlZ2luRHJhdygpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW5EcmF3
U3RhdGUgIT0gRHJhd1JlYXNvbjo6Tm90RHJhd2luZzsgfQogCiAgICAgSERDIG1faGRjIHsgbnVs
bHB0ciB9OwogICAgIEQyRDFfQkxFTkRfTU9ERSBtX2JsZW5kTW9kZSB7IEQyRDFfQkxFTkRfTU9E
RV9NVUxUSVBMWSB9OwogICAgIEQyRDFfQ09NUE9TSVRFX01PREUgbV9jb21wb3NpdGVNb2RlIHsg
RDJEMV9DT01QT1NJVEVfTU9ERV9TT1VSQ0VfT1ZFUiB9OwotICAgIENoZWNrZWQ8dW5zaWduZWQ+
IG1fYmVnaW5EcmF3Q291bnQgeyAwIH07CiAgICAgYm9vbCBtX3Nob3VsZEluY2x1ZGVDaGlsZFdp
bmRvd3MgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zdHJva2VTeWxlSXNEaXJ0eSB7IGZhbHNlIH07
CiAKQEAgLTExMCw2ICsxMTAsNyBAQCBwcml2YXRlOgogICAgIEQyRDFfTElORV9KT0lOIG1fbGlu
ZUpvaW4geyBEMkQxX0xJTkVfSk9JTl9NSVRFUiB9OwogICAgIFN0cm9rZVN0eWxlIG1fc3Ryb2tl
U3R5bGUgeyBTb2xpZFN0cm9rZSB9OwogICAgIERhc2hBcnJheSBtX2Rhc2hlczsKKyAgICBEcmF3
UmVhc29uIG1fYmVnaW5EcmF3U3RhdGUgeyBOb3REcmF3aW5nIH07CiAgICAgZmxvYXQgbV9taXRl
ckxpbWl0IHsgMS4wZiB9OwogICAgIGZsb2F0IG1fZGFzaE9mZnNldCB7IDAgfTsKICAgICBmbG9h
dCBtX3BhdHRlcm5XaWR0aCB7IDEuMGYgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAJ
KHJldmlzaW9uIDIwODAxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBA
QAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSZW5kZXJUYXJnZXRTY29wZWRE
cmF3aW5nLmgiCiAjaW5jbHVkZSA8ZDJkMS5oPgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtNDQsMTAgKzQ1LDYgQEAKICNpbmNsdWRlIDx3dGYvdGV4
dC9CYXNlNjQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotI2lmIFBMQVRG
T1JNKENPQ09BKQotI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKLSNlbmRpZgot
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTc2LDYgKzE3Myw4IEBAIHZvaWQgSW1hZ2VC
dWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmkKIAogdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhH
cmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUg
YmxlbmRNb2RlKQogeworICAgIFJlbmRlclRhcmdldFNjb3BlZERyYXdpbmcgc2NvcGVkRHJhdyhk
ZXN0Q29udGV4dCk7CisKICAgICBhdXRvIGJpdG1hcFRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqPihjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpOwog
ICAgIGF1dG8gb3V0cHV0VGFyZ2V0ID0gZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CiAK
QEAgLTIwMCw2ICsxOTksOCBAQCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4
dCYKICAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1
dGlvblNjYWxlKTsKIAogICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgaW1h
Z2UtPkdldFNpemUoKSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3AsIGJsZW5kTW9kZSk7
CisKKyAgICBkZXN0Q29udGV4dC5mbHVzaCgpOwogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCg==
</data>
<flag name="review"
          id="316101"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293223</attachid>
            <date>2016-10-28 14:49:14 -0700</date>
            <delta_ts>2016-10-28 20:58:58 -0700</delta_ts>
            <desc>Patch v7</desc>
            <filename>beginEndPaint_v2.patch</filename>
            <type>text/plain</type>
            <size>18775</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODA3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBACisyMDE2LTEwLTI4ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBD
b3JyZWN0IGJvb2trZWVwaW5nIGZvciBiZWdpbi9lbmQgZHJhdyBwYWlycworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzODk4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2ltb24gcG9pbnRlZCBvdXQgdGhh
dCBHcmFwaGljc0NvbnRleHQgb2JqZWN0cyBhcmUgZ2VuZXJhbGx5IG9ubHkgY3JlYXRlZCBhdAor
ICAgICAgICB0aGUgdGltZSB3ZSBpbnRlbmQgdG8gZG8gZHJhd2luZywgc28gY2FsbGluZyAnQmVn
aW5EcmF3JyBhcyBwYXJ0IG9mIG9iamVjdAorICAgICAgICBjb25zdHJ1Y3Rpb24sIGFuZCAnRW5k
RHJhdycgYXQgdGltZSBvZiBkZXN0cnVjdGlvbiBzaG91bGQgYmUgc3VmZmljaWVudC4KKworICAg
ICAgICBBcyB1c3VhbCwgaGUgd2FzIGNvcnJlY3QuCisgICAgICAgIAorICAgICAgICBUaGlzIHBh
dGNoIGdldHMgcmlkIG9mIHVubmVlZGVkIGNvZGUgYW5kIGdyZWF0bHkgc2ltcGxpZmllcyB0aGUg
RGlyZWN0MkQKKyAgICAgICAgZHJhd2luZyBwYXRoLgorICAgICAgICAKKyAgICAgICAgVGVzdGVk
IGJ5IGV4aXN0aW5nIGxheW91dCB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFk
aWVudERpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpmaWxsKTpSZW1v
dmUgdW5uZWVkZWQgdXNlCisgICAgICAgIG9mICdSZW5kZXJUYXJnZXRTY29wZWREcmF3aW5nLmgn
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3Qy
RC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dz
Q29udGV4dCk6IFJlbW92ZSB1bm5lZWRlZCB1c2UKKyAgICAgICAgb2YgUmVuZGVyVGFyZ2V0U2Nv
cGVkRHJhd2luZyBjbGFzcy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKTogRW50ZXIKKyAgICAg
ICAgdGhlICdCZWdpbkRyYXcnIHN0YXRlIGF0IG9iamVjdCBjcmVhdGlvbi4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZSk6IEVuZAorICAgICAgICBkcmF3IHN0YXRlIGF0IG9iamVjdCBkZXN0cnVj
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6
Y2xpcCk6IFJlbW92ZSB1bm5lZWRlZCBjYWxsIHRvICdiZWdpbkRyYXcnLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpiZWdpbkRyYXcpOiBSZW5hbWVk
IGZyb20gJ2JlZ2luRHJhd0lmTmVlZGVkJy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kRHJhdyk6IEdldCByaWQgb2YgZHJhdyBzdGF0ZSBmbGFn
cy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YmVnaW5EcmF3KTogUmVuYW1l
ZCBmcm9tICdiZWdpbkRyYXdJZk5lZWRlZCcuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmZsdXNoKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRyYXdXaXRob3V0U2hhZG93KTogUmVtb3ZlIHVubmVlZGVkIHVzZSBvZgorICAgICAgICBSZW5k
ZXJUYXJnZXRTY29wZWREcmF3aW5nIGNsYXNzLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpkcmF3V2l0aFNoYWRvdyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkaWRCZWdpbkRyYXcpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpiZWdp
bkRyYXdJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luRHJhd0lmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZGlkQmVnaW5EcmF3
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJE
YXRhRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpnZXRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4dCk6IENhbGwgbmV3IEdyYXBo
aWNzQ29udGV4dCAnZmx1c2gnIGNvbW1hbmQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6ZHJhdyk6IFJlbW92ZSB1bm5lZWRlZCB1c2Ugb2YgUmVuZGVyVGFyZ2V0U2NvcGVkRHJhd2lu
ZyBjbGFzcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJl
Y3QyRC5jcHA6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9SZW5kZXJU
YXJnZXRTY29wZWREcmF3aW5nLmg6IFJlbW92ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NW
R0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZSk6IFJl
bW92ZSB1bm5lZWRlZCB1c2Ugb2YgUmVuZGVyVGFyZ2V0U2NvcGVkRHJhd2luZyBjbGFzcy4KKwog
MjAxNi0xMC0yOCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAg
ICAgICBbRE9NSklUXSBJbXBsZW1lbnQgRG9jdW1lbnQ6OmRvY3VtZW50RWxlbWVudApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmgJKHJldmlzaW9uIDIwODAxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NTIsMTAgKzU1MiwxMCBAQCBw
dWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIElEMkQxRmFjdG9yeSogc3lzdGVtRmFj
dG9yeSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJRDJEMVJlbmRlclRhcmdldCogZGVm
YXVsdFJlbmRlclRhcmdldCgpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBiZWdpbkRyYXdJ
Zk5lZWRlZCgpOwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZGlkQmVnaW5EcmF3KCkgY29uc3Q7
CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBiZWdpbkRyYXcoKTsKICAgICBEMkQxX0NPTE9SX0Yg
Y29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3QgQ29sb3ImKSBjb25zdDsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGVuZERyYXcoKTsKKyAgICB2b2lkIGZsdXNoKCk7CiAKICAgICBJRDJEMUJydXNo
KiBzb2xpZFN0cm9rZUJydXNoKCkgY29uc3Q7CiAgICAgSUQyRDFCcnVzaCogc29saWRGaWxsQnJ1
c2goKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFkaWVudERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDIwODAxOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiRmxvYXRQb2lu
dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlclRhcmdl
dFNjb3BlZERyYXdpbmcuaCIKICNpbmNsdWRlIDxkMmQxLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgogCkBAIC0xMjEsOCArMTIwLDYgQEAgdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGlj
c0NvbnRleHQqIGNvbgogICAgIGlmICghbV9jYWNoZWRIYXNoIHx8ICFtX2dyYWRpZW50KQogICAg
ICAgICBnZW5lcmF0ZUdyYWRpZW50KGQyZENvbnRleHQpOwogCi0gICAgUmVuZGVyVGFyZ2V0U2Nv
cGVkRHJhd2luZyBzY29wZWREcmF3KCpjb250ZXh0KTsKLQogICAgIGQyZENvbnRleHQtPlNldFRh
Z3MoR1JBRElFTlRfRFJBV0lORywgX19MSU5FX18pOwogCiAgICAgY29uc3QgRDJEMV9SRUNUX0Yg
ZDJkUmVjdCA9IHJlY3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHJl
dmlzaW9uIDIwODAxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDYg
QEAKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlJlbmRlclRhcmdldFNjb3BlZERyYXdp
bmcuaCIKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlIDxkMmQxLmg+CiAjaW5jbHVkZSA8ZDJk
MWVmZmVjdHMuaD4KQEAgLTk5LDExICs5OCw2IEBAIElEMkQxUmVuZGVyVGFyZ2V0KiBHcmFwaGlj
c0NvbnRleHQ6OmRlZmEKICAgICByZXR1cm4gZGVmYXVsdFJlbmRlclRhcmdldDsKIH0KIAotYm9v
bCBHcmFwaGljc0NvbnRleHQ6OmRpZEJlZ2luRHJhdygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
ZGF0YS0+ZGlkQmVnaW5EcmF3KCk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9y
bUluaXQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKIHsKICAgICBpZiAoIWhkYykKQEAgLTI3Miw3
ICsyNjYsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250CiAgICAg
SFJFU1VMVCBociA9IHBsYXRmb3JtQ29udGV4dCgpLT5DcmVhdGVCaXRtYXAocGl4ZWxEYXRhLnNp
emUoKSwgcGl4ZWxEYXRhLmJ1ZmZlcigpLCBwaXhlbERhdGEuYnl0ZXNQZXJSb3coKSwgJmJpdG1h
cFByb3BlcnRpZXMsICZiaXRtYXApOwogICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKIAotICAg
IFJlbmRlclRhcmdldFNjb3BlZERyYXdpbmcgc2NvcGVkRHJhdygqdGhpcyk7CiAgICAgcGxhdGZv
cm1Db250ZXh0KCktPkRyYXdCaXRtYXAoYml0bWFwLmdldCgpLCBkc3RSZWN0KTsKIAogICAgIDo6
RGVsZXRlREMoaGRjKTsKQEAgLTMwMSw2ICsyOTQsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lRm9yRG9jdW1lbgogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdl
dCkKICAgICA6IG1fcmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCkKIHsKKyAgICBpZiAoIW1fcmVu
ZGVyVGFyZ2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBiZWdpbkRyYXcoKTsKIH0KIAogR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKCkKQEAgLTMwOCw3ICszMDUsNyBAQCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6
On5HcmFwaGljCiAgICAgaWYgKCFtX3JlbmRlclRhcmdldCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgQVNTRVJUKCFtX2JlZ2luRHJhd0NvdW50LnVuc2FmZUdldCgpKTsKKyAgICBlbmREcmF3KCk7
CiB9CiAKIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4gR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlOjpicnVzaFdpdGhDb2xvcihjb25zdCBEMkQxX0NPTE9SX0YmIGNvbG9yKQpAQCAt
MzQzLDEwICszNDAsNiBAQCBJRDJEMVNvbGlkQ29sb3JCcnVzaCogR3JhcGhpY3NDb250ZXh0Ojpi
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjbGlwKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKLSAgICAvLyBJbiBEMkQsIHdlIGNhbiBvbmx5IGNsaXAgaW4gdGhlIGNv
bnRleHQgb2YgYSAnQmVnaW5EcmF3JywgYW5kIHRoZSBjbGlwIGNhbgotICAgIC8vIG9ubHkgbGl2
ZSBhcyBsb25nIGFzIHRoZSBkcmF3IGlzIGhhcHBlbmluZy4KLSAgICBiZWdpbkRyYXdJZk5lZWRl
ZCgpOwotCiAgICAgaWYgKG1fcmVuZGVyU3RhdGVzLmlzRW1wdHkoKSkKICAgICAgICAgc2F2ZSgp
OwogCkBAIC0zNjEsMTAgKzM1NCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlOjpjbGkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNsaXAoSUQy
RDFHZW9tZXRyeSogcGF0aCkKIHsKLSAgICAvLyBJbiBEMkQsIHdlIGNhbiBvbmx5IGNsaXAgaW4g
dGhlIGNvbnRleHQgb2YgYSAnQmVnaW5EcmF3JywgYW5kIHRoZSBjbGlwIGNhbgotICAgIC8vIG9u
bHkgbGl2ZSBhcyBsb25nIGFzIHRoZSBkcmF3IGlzIGhhcHBlbmluZy4KLSAgICBiZWdpbkRyYXdJ
Zk5lZWRlZCgpOwotCiAgICAgQVNTRVJUKG1fcmVuZGVyU3RhdGVzLnNpemUoKSk7CiAgICAgaWYg
KCFtX3JlbmRlclN0YXRlcy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQwMCwxNSArMzg5
LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpmbHUKICAgICBSRUxF
QVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGU6OmJlZ2luRHJhd0lmTmVlZGVkKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlOjpiZWdpbkRyYXcoKQogewogICAgIEFTU0VSVChtX3JlbmRlclRhcmdldC5n
ZXQoKSk7Ci0gICAgaWYgKGRpZEJlZ2luRHJhdygpKQotICAgICAgICByZXR1cm47Ci0KICAgICBt
X3JlbmRlclRhcmdldC0+QmVnaW5EcmF3KCk7Ci0KLSAgICArK21fYmVnaW5EcmF3Q291bnQ7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjplbmREcmF3KCkKQEAgLTQx
OSw4ICs0MDMsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kCiAK
ICAgICBpZiAoIVNVQ0NFRURFRChocikpCiAgICAgICAgIFdURkxvZ0Fsd2F5cygiRmFpbGVkIGlu
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kRHJhdzogaHI9JWxkLCBmaXJzdD0l
bGQsIHNlY29uZD0lbGQiLCBociwgZmlyc3QsIHNlY29uZCk7Ci0KLSAgICAtLW1fYmVnaW5EcmF3
Q291bnQ7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpyZXN0b3Jl
KCkKQEAgLTUxNywxMiArNDk5LDkgQEAgSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0OjpwYXR0
ZXJuRmlsbAogICAgIHJldHVybiBtX2RhdGEtPm1fcGF0dGVybkZpbGxCcnVzaC5nZXQoKTsKIH0K
IAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luRHJhd0lmTmVlZGVkKCkKK2Jvb2wgR3JhcGhp
Y3NDb250ZXh0OjpiZWdpbkRyYXcoKQogewotICAgIGJvb2wgbmVlZGVkVG9CZWdpbkRyYXcgPSAh
bV9kYXRhLT5kaWRCZWdpbkRyYXcoKTsKLQotICAgIG1fZGF0YS0+YmVnaW5EcmF3SWZOZWVkZWQo
KTsKLSAgICByZXR1cm4gbmVlZGVkVG9CZWdpbkRyYXc7CisgICAgbV9kYXRhLT5iZWdpbkRyYXco
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZERyYXcoKQpAQCAtNTMwLDYgKzUwOSwx
MSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kRHJhdygpCiAgICAgbV9kYXRhLT5lbmREcmF3
KCk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmbHVzaCgpCit7CisgICAgbV9kYXRhLT5m
bHVzaCgpOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oSW1hZ2UmIGlt
YWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwg
IXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCkBAIC05MTQsMTQgKzg5OCwxMSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3V2l0aG91dFNoYWRvdyhjb25zdCBGbG9hdFJlY3QmIC8qYm91bmRpbmdSZWN0
Ki8sIGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCopPiYgZHJhd0Nv
bW1hbmRzKQogewotICAgIFJlbmRlclRhcmdldFNjb3BlZERyYXdpbmcgc2NvcGVkRHJhdygqdGhp
cyk7CiAgICAgZHJhd0NvbW1hbmRzKHBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdXaXRoU2hhZG93KGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdSZWN0
LCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4mIGRyYXdDb21t
YW5kcykKIHsKLSAgICBSZW5kZXJUYXJnZXRTY29wZWREcmF3aW5nIHNjb3BlZERyYXcoKnRoaXMp
OwotCiAgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICAvLyBSZW5k
ZXIgdGhlIGN1cnJlbnQgZ2VvbWV0cnkgdG8gYSBiaXRtYXAgY29udGV4dApAQCAtMTE2NSw4ICsx
MTQ2LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbFJvdW5kZQogICAgICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogICAgIH0KIAotICAgIFJlbmRlclRhcmdldFNjb3BlZERyYXdp
bmcgc2NvcGVkRHJhdygqdGhpcyk7Ci0KICAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElORV9f
KTsKIAogICAgIGNvbnN0IEZsb2F0UmVjdCYgciA9IHJlY3QucmVjdCgpOwpAQCAtMTIwMiw4ICsx
MTgxLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZQogCiAgICAg
YXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBSZW5kZXJUYXJnZXRTY29w
ZWREcmF3aW5nIHNjb3BlZERyYXcoKnRoaXMpOwotCiAgICAgY29udGV4dC0+U2V0VGFncygxLCBf
X0xJTkVfXyk7CiAKICAgICBQYXRoIHBhdGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaAkocmV2aXNpb24gMjA4MDE5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZURpcmVjdDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKICNp
bmNsdWRlIDxkMmQxZWZmZWN0cy5oPgogI2luY2x1ZGUgPGQyZDFoZWxwZXIuaD4KICNpbmNsdWRl
IDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CiAjaW5jbHVk
ZSA8d3RmL1RpbnlMUlVDYWNoZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00OCw3ICs0
Nyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9p
ZCBjbGlwKGNvbnN0IFBhdGgmKTsKICAgICB2b2lkIGNsaXAoSUQyRDFHZW9tZXRyeSopOwotICAg
IHZvaWQgYmVnaW5EcmF3SWZOZWVkZWQoKTsKKworICAgIHZvaWQgYmVnaW5EcmF3KCk7CiAgICAg
dm9pZCBlbmREcmF3KCk7CiAgICAgdm9pZCBmbHVzaCgpOwogICAgIHZvaWQgc2F2ZSgpOwpAQCAt
NzUsMTIgKzc1LDkgQEAgcHVibGljOgogCiAgICAgQ09NUHRyPElEMkQxU29saWRDb2xvckJydXNo
PiBicnVzaFdpdGhDb2xvcihjb25zdCBEMkQxX0NPTE9SX0YmKTsKIAotICAgIGJvb2wgZGlkQmVn
aW5EcmF3KCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbkRyYXdDb3VudC51bnNhZmVHZXQoKTsgfQot
CiAgICAgSERDIG1faGRjIHsgbnVsbHB0ciB9OwogICAgIEQyRDFfQkxFTkRfTU9ERSBtX2JsZW5k
TW9kZSB7IEQyRDFfQkxFTkRfTU9ERV9NVUxUSVBMWSB9OwogICAgIEQyRDFfQ09NUE9TSVRFX01P
REUgbV9jb21wb3NpdGVNb2RlIHsgRDJEMV9DT01QT1NJVEVfTU9ERV9TT1VSQ0VfT1ZFUiB9Owot
ICAgIENoZWNrZWQ8dW5zaWduZWQ+IG1fYmVnaW5EcmF3Q291bnQgeyAwIH07CiAgICAgYm9vbCBt
X3Nob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zdHJva2VT
eWxlSXNEaXJ0eSB7IGZhbHNlIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJE
LmNwcAkocmV2aXNpb24gMjA4MDE5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NyArMzMsNiBAQAogI2luY2x1ZGUgIkhXbmREQy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlJlbmRlclRhcmdldFNjb3BlZERy
YXdpbmcuaCIKICNpbmNsdWRlIDxkMmQxLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0NJbmxpbmVz
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgpAQCAtNjQsMjMgKzYz
LDE3IEBAIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXQKICAgICBhdXRv
IGJpdG1hcERDID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMod2luZG93REMp
KTsKICAgICBIR0RJT0JKIG9sZEJpdG1hcCA9IDo6U2VsZWN0T2JqZWN0KGJpdG1hcERDLmdldCgp
LCBiaXRtYXAuZ2V0KCkpOwogCi0gICAgQk9PTCBvayA9IFRSVUU7Ci0KLSAgICB7Ci0gICAgICAg
IFJlbmRlclRhcmdldFNjb3BlZERyYXdpbmcgc2NvcGVkRHJhdygqY29udGV4dCk7Ci0KLSAgICAg
ICAgQ09NUHRyPElEMkQxR2RpSW50ZXJvcFJlbmRlclRhcmdldD4gZ2RpUmVuZGVyVGFyZ2V0Owot
ICAgICAgICBIUkVTVUxUIGhyID0gcGxhdGZvcm1Db250ZXh0LT5RdWVyeUludGVyZmFjZShfX3V1
aWRvZihJRDJEMUdkaUludGVyb3BSZW5kZXJUYXJnZXQpLCAodm9pZCoqKSZnZGlSZW5kZXJUYXJn
ZXQpOwotICAgICAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIENPTVB0cjxJRDJEMUdkaUludGVyb3BSZW5kZXJUYXJnZXQ+IGdkaVJlbmRlclRhcmdl
dDsKKyAgICBIUkVTVUxUIGhyID0gcGxhdGZvcm1Db250ZXh0LT5RdWVyeUludGVyZmFjZShfX3V1
aWRvZihJRDJEMUdkaUludGVyb3BSZW5kZXJUYXJnZXQpLCAodm9pZCoqKSZnZGlSZW5kZXJUYXJn
ZXQpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
ICAgICBIREMgaGRjID0gbnVsbHB0cjsKLSAgICAgICAgaHIgPSBnZGlSZW5kZXJUYXJnZXQtPkdl
dERDKEQyRDFfRENfSU5JVElBTElaRV9NT0RFX0NPUFksICZoZGMpOworICAgIEhEQyBoZGMgPSBu
dWxscHRyOworICAgIGhyID0gZ2RpUmVuZGVyVGFyZ2V0LT5HZXREQyhEMkQxX0RDX0lOSVRJQUxJ
WkVfTU9ERV9DT1BZLCAmaGRjKTsKIAotICAgICAgICBvayA9IDo6Qml0Qmx0KGJpdG1hcERDLmdl
dCgpLCAwLCAwLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksIGhkYywgcmVjdC54KCksIHJl
Y3QueSgpLCBTUkNDT1BZKTsKKyAgICBCT09MIG9rID0gOjpCaXRCbHQoYml0bWFwREMuZ2V0KCks
IDAsIDAsIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgaGRjLCByZWN0LngoKSwgcmVjdC55
KCksIFNSQ0NPUFkpOwogCi0gICAgICAgIGhyID0gZ2RpUmVuZGVyVGFyZ2V0LT5SZWxlYXNlREMo
bnVsbHB0cik7Ci0gICAgfQorICAgIGhyID0gZ2RpUmVuZGVyVGFyZ2V0LT5SZWxlYXNlREMobnVs
bHB0cik7CiAKICAgICBpZiAoIW9rKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTkwLDcg
KzgzLDcgQEAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdAogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKFVpbnQ4Q2xh
bXBlZEFycmF5KiYgLyogc291cmNlICovLCBjb25zdCBJbnRTaXplJiAvKiBzb3VyY2VTaXplICov
LCBjb25zdCBJbnRSZWN0JiAvKiBzb3VyY2VSZWN0ICovLCBjb25zdCBJbnRQb2ludCYgLyogZGVz
dFBvaW50ICovLCBjb25zdCBJbnRTaXplJiAvKiBzaXplICovLCBib29sIC8qIGFjY2VsZXJhdGVS
ZW5kZXJpbmcgKi8sIGJvb2wgLyogdW5tdWx0aXBsaWVkICovLCBmbG9hdCAvKiByZXNvbHV0aW9u
U2NhbGUgKi8pCit2b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YShVaW50OENsYW1wZWRBcnJh
eSomIC8qIHNvdXJjZSAqLywgY29uc3QgSW50U2l6ZSYgLyogc291cmNlU2l6ZSAqLywgY29uc3Qg
SW50UmVjdCYgLyogc291cmNlUmVjdCAqLywgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29u
c3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCAvKiBhY2NlbGVyYXRlUmVuZGVyaW5nICovLCBib29sIC8q
IHVubXVsdGlwbGllZCAqLywgZmxvYXQgLyogcmVzb2x1dGlvblNjYWxlICovKQogewogICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCShyZXZpc2lv
biAyMDgwMTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VC
dWZmZXJEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDEwICs0NCw2IEBACiAjaW5j
bHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNl
LmgiCi0jZW5kaWYKLQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE0MCwxMSArMTM2LDcg
QEAgR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpCiAKIHZvaWQgSW1hZ2VC
dWZmZXI6OmZsdXNoQ29udGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFjb250ZXh0KCkuZGlkQmVn
aW5EcmF3KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhSRVNVTFQgaHIgPSBjb250ZXh0KCku
cGxhdGZvcm1Db250ZXh0KCktPkZsdXNoKCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwor
ICAgIGNvbnRleHQoKS5mbHVzaCgpOwogfQogCiBSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpj
b3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFNjYWxlQmVoYXZpb3Igc2Nh
bGVCZWhhdmlvcikgY29uc3QKQEAgLTIwMCw2ICsxOTIsOCBAQCB2b2lkIEltYWdlQnVmZmVyOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCYKICAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0
aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKTsKIAogICAgIGRlc3RDb250ZXh0LmRyYXdOYXRp
dmVJbWFnZShpbWFnZSwgaW1hZ2UtPkdldFNpemUoKSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVj
dCwgb3AsIGJsZW5kTW9kZSk7CisKKyAgICBkZXN0Q29udGV4dC5mbHVzaCgpOwogfQogCiB2b2lk
IEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5k
TW9kZSBibGVuZE1vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAy
MDgwMTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1h
Z2VEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJSZW5kZXJUYXJnZXRTY29wZWREcmF3aW5nLmgiCiAj
aW5jbHVkZSA8ZDJkMS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUmVuZGVyVGFyZ2V0U2NvcGVkRHJhd2luZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9SZW5kZXJU
YXJnZXRTY29wZWREcmF3aW5nLmgJKHJldmlzaW9uIDIwODAxOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9SZW5kZXJUYXJnZXRTY29wZWREcmF3aW5nLmgJKG5vbmV4
aXN0ZW50KQpAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJUYXJnZXRTY29wZWREcmF3
aW5nIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZW5kZXJUYXJnZXRTY29wZWREcmF3aW5n
KTsKLXB1YmxpYzoKLSAgICBSZW5kZXJUYXJnZXRTY29wZWREcmF3aW5nKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKLSAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICB7Ci0gICAgICAg
IG1fZHJhd0lzU2NvcGVkID0gY29udGV4dC5iZWdpbkRyYXdJZk5lZWRlZCgpOwotICAgIH0KLQot
ICAgIH5SZW5kZXJUYXJnZXRTY29wZWREcmF3aW5nKCkKLSAgICB7Ci0gICAgICAgIGVuZERyYXco
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGVuZERyYXcoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2Ry
YXdJc1Njb3BlZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICBt
X2NvbnRleHQuZW5kRHJhdygpOwotICAgICAgICBtX2RyYXdJc1Njb3BlZCA9IGZhbHNlOwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKLSAgICBib29s
IG1fZHJhd0lzU2NvcGVkOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCShyZXZpc2lvbiAyMDgwMTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Niw3ICs1Niw2IEBACiAKICNpZiBVU0UoRElSRUNUMkQpCiAjaW5jbHVkZSAiQ09NUHRy
LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGFyZ2V0U2NvcGVkRHJhd2luZy5oIgogI2luY2x1ZGUgPGQy
ZDEuaD4KICNlbmRpZgogCkBAIC0yMjcsMTAgKzIyNiw3IEBAIE5hdGl2ZUltYWdlUHRyIFNWR0lt
YWdlOjpuYXRpdmVJbWFnZShjb24KIAogICAgIEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQo
bmF0aXZlSW1hZ2VUYXJnZXQuZ2V0KCkpOwogCi0gICAgewotICAgICAgICBSZW5kZXJUYXJnZXRT
Y29wZWREcmF3aW5nIHNjb3BlZERyYXcobG9jYWxDb250ZXh0KTsKLSAgICAgICAgZHJhdyhsb2Nh
bENvbnRleHQsIHJlY3QoKSwgcmVjdCgpLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBCbGVuZE1vZGVO
b3JtYWwsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbigpKTsKLSAgICB9CisgICAgZHJhdyhs
b2NhbENvbnRleHQsIHJlY3QoKSwgcmVjdCgpLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBCbGVuZE1v
ZGVOb3JtYWwsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbigpKTsKIAogICAgIENPTVB0cjxJ
RDJEMUJpdG1hcD4gbmF0aXZlSW1hZ2U7CiAgICAgaHIgPSBuYXRpdmVJbWFnZVRhcmdldC0+R2V0
Qml0bWFwKCZuYXRpdmVJbWFnZSk7Cg==
</data>
<flag name="review"
          id="316135"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="316179"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>