<?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>163349</bug_id>
          
          <creation_ts>2016-10-12 11:58:52 -0700</creation_ts>
          <short_desc>[Win][Direct2D] Implement basic SVG support</short_desc>
          <delta_ts>2016-10-14 15:44:58 -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>PC</rep_platform>
          <op_sys>Windows 10</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>
          
          <blocked>162953</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>pvollan</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1239406</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-12 11:58:52 -0700</bug_when>
    <thetext>This patch adds missing drawing primitives and SVGImage support to allow more of the SVG test cases to run.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239508</commentid>
    <comment_count>1</comment_count>
      <attachid>291396</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-12 14:40:50 -0700</bug_when>
    <thetext>Created attachment 291396
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239617</commentid>
    <comment_count>2</comment_count>
      <attachid>291396</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-10-12 18:35:19 -0700</bug_when>
    <thetext>Comment on attachment 291396
Patch

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

&gt; Source/WebCore/platform/graphics/Image.cpp:98
&gt; +#if USE(DIRECT2D)
&gt; +    setRenderTarget(ctxt.platformContext());
&gt; +#endif

I don&apos;t like these here in cross-platform code. Why are they necessary?

&gt; Source/WebCore/platform/graphics/Image.cpp:215
&gt; +#if USE(DIRECT2D)
&gt; +    setRenderTarget(ctxt.platformContext());
&gt; +#endif

Ditto.

&gt; Source/WebCore/platform/graphics/ImageBuffer.h:89
&gt; +        std::unique_ptr&lt;ImageBuffer&gt; buffer(new ImageBuffer(size, resolutionScale, colorSpace, renderingMode, renderTarget, success));

We don&apos;t use bare &quot;new&quot;. This should go through a create function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239655</commentid>
    <comment_count>3</comment_count>
      <attachid>291396</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-12 20:00:23 -0700</bug_when>
    <thetext>Comment on attachment 291396
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.h:89
&gt;&gt; +        std::unique_ptr&lt;ImageBuffer&gt; buffer(new ImageBuffer(size, resolutionScale, colorSpace, renderingMode, renderTarget, success));
&gt; 
&gt; We don&apos;t use bare &quot;new&quot;. This should go through a create function.

This *is* the create function! I can move it (and the original) to the implementation file, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239657</commentid>
    <comment_count>4</comment_count>
      <attachid>291396</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-10-12 20:10:22 -0700</bug_when>
    <thetext>Comment on attachment 291396
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.h:89
&gt;&gt;&gt; +        std::unique_ptr&lt;ImageBuffer&gt; buffer(new ImageBuffer(size, resolutionScale, colorSpace, renderingMode, renderTarget, success));
&gt;&gt; 
&gt;&gt; We don&apos;t use bare &quot;new&quot;. This should go through a create function.
&gt; 
&gt; This *is* the create function! I can move it (and the original) to the implementation file, though.

Oh right, sorry!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239660</commentid>
    <comment_count>5</comment_count>
      <attachid>291396</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-12 20:20:59 -0700</bug_when>
    <thetext>Comment on attachment 291396
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/Image.cpp:98
&gt;&gt; +#endif
&gt; 
&gt; I don&apos;t like these here in cross-platform code. Why are they necessary?

At the point we actually do a draw, I need access to the underlying Direct2D render target backing the drawing context passed into the method. We often create the Image well before the draw operation happens, so I can&apos;t reliably set it at construction time.

I could duplicate all of the GraphicsContext::draw methods related to image, and set the render target to the image there, but this seemed simpler and required less duplication.

I could make a generic &quot;platformSetRenderTarget&quot; that just takes the graphics context and defaults to a no-op for all non-D2D platforms, if you think that would be preferable. It would at least get rid of the #if/def in these two locations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239680</commentid>
    <comment_count>6</comment_count>
      <attachid>291452</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-12 21:20:17 -0700</bug_when>
    <thetext>Created attachment 291452
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239834</commentid>
    <comment_count>7</comment_count>
      <attachid>291493</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-13 10:49:45 -0700</bug_when>
    <thetext>Created attachment 291493
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239877</commentid>
    <comment_count>8</comment_count>
      <attachid>291493</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-10-13 11:56:02 -0700</bug_when>
    <thetext>Comment on attachment 291493
Patch

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

&gt; Source/WebCore/platform/graphics/Image.cpp:96
&gt; +    setPlatformRenderTarget(ctxt);

Not sure this really helps. How does someone writing generic GraphicsContext code know if they have to call this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239924</commentid>
    <comment_count>9</comment_count>
      <attachid>291493</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-13 13:03:55 -0700</bug_when>
    <thetext>Comment on attachment 291493
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/Image.cpp:96
&gt;&gt; +    setPlatformRenderTarget(ctxt);
&gt; 
&gt; Not sure this really helps. How does someone writing generic GraphicsContext code know if they have to call this?

This is more about the nuances of image drawing in Direct2D. The D2D image decode API requires the render target to which we are drawing. The &quot;setPlatformRenderTarget&quot; only exists to thread this value down to the image decoder.

I need this the first time we call &quot;frameImageAtIndex&quot; so that the decode is done properly.

&quot;singlePixelSolidColor&quot; calls this function behind the scenes, so I need a way to get this knowledge passed to the decoder.

AN API like BitmapImage::setRenderTargetForDecoder() might make this more clear. Would that be better?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240089</commentid>
    <comment_count>10</comment_count>
      <attachid>291561</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-13 20:29:20 -0700</bug_when>
    <thetext>Created attachment 291561
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240322</commentid>
    <comment_count>11</comment_count>
      <attachid>291642</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-14 10:16:23 -0700</bug_when>
    <thetext>Created attachment 291642
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240332</commentid>
    <comment_count>12</comment_count>
      <attachid>291646</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-14 10:34:44 -0700</bug_when>
    <thetext>Created attachment 291646
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240341</commentid>
    <comment_count>13</comment_count>
      <attachid>291650</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-14 10:53:38 -0700</bug_when>
    <thetext>Created attachment 291650
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240376</commentid>
    <comment_count>14</comment_count>
      <attachid>291650</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-10-14 11:45:55 -0700</bug_when>
    <thetext>Comment on attachment 291650
Patch

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

&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:43
&gt; +    std::unique_ptr&lt;ImageBuffer&gt; buffer(new ImageBuffer(size, resolutionScale, colorSpace, renderingMode, success));

Why no std::make_unique?

&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:53
&gt; +    std::unique_ptr&lt;ImageBuffer&gt; buffer(new ImageBuffer(size, resolutionScale, colorSpace, renderingMode, graphicsContext, success));

ditto

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:342
&gt; +        WTFLogAlways(&quot;Crashed in EndDraw: hr=%ld, first=%ld, second=%ld&quot;, hr, first, second);

Crashed -&gt; Failed?
Or we should actually crash.
EndDraw -&gt; endDraw

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:1364
&gt; +            renderTarget-&gt;SetTags(1, __LINE__);

Should we assert renderTarget? Should these SetTags calls be debug-only?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240377</commentid>
    <comment_count>15</comment_count>
      <attachid>291650</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-10-14 11:48:11 -0700</bug_when>
    <thetext>Comment on attachment 291650
Patch

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

&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:50
&gt; +std::unique_ptr&lt;ImageBuffer&gt; ImageBuffer::create(const FloatSize&amp; size, RenderingMode renderingMode, const GraphicsContext* graphicsContext, float resolutionScale, ColorSpace colorSpace)

Can you rename graphicsContext to targetContext.

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:740
&gt; -    auto ellipse = D2D1::Ellipse(D2D1::Point2F(rect.x(), rect.y()), rect.width(), rect.height());
&gt; +    auto ellipse = D2D1::Ellipse(rect.center(), 0.5 * rect.width(), 0.5 * rect.height());

Is this a bug fix?

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:1334
&gt; +        FloatRect renderTargetSize(FloatPoint(), renderTarget-&gt;GetSize());

This is a rect, not a &quot;Size&quot;.

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:1337
&gt; +        if (visibleRect.contains(renderTargetSize)) {

I don&apos;t understand the geometry here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240379</commentid>
    <comment_count>16</comment_count>
      <attachid>291650</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-10-14 11:54:04 -0700</bug_when>
    <thetext>Comment on attachment 291650
Patch

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

Please I would urge you to pass the targetContext all the way from the BitmapImage to the ImageDecoder. It looks really ugly to call setRenderTarget() instead of passing the GraphicsContext to frameImageAtIndex().

&gt; Source/WebCore/platform/graphics/BitmapImage.cpp:83
&gt; -NativeImagePtr BitmapImage::frameImageAtIndex(size_t index, SubsamplingLevel subsamplingLevel)
&gt; +NativeImagePtr BitmapImage::frameImageAtIndex(size_t index, const GraphicsContext* targetContext, SubsamplingLevel subsamplingLevel)

Please move the targetContext to the end of the argument list.

&gt; Source/WebCore/platform/graphics/BitmapImage.cpp:93
&gt; +    if (targetContext)
&gt; +        m_source.setDecoderTargetContext(*targetContext);
&gt; +
&gt;      return m_source.frameImageAtIndex(index, subsamplingLevel);

Why do not you pass the targetContext instead:

    return m_source.frameImageAtIndex(index, subsamplingLevel, targetContext);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240404</commentid>
    <comment_count>17</comment_count>
      <attachid>291666</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-14 14:22:28 -0700</bug_when>
    <thetext>Created attachment 291666
Patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240420</commentid>
    <comment_count>18</comment_count>
      <attachid>291666</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-14 14:46:54 -0700</bug_when>
    <thetext>Comment on attachment 291666
Patch for landing.

Rejecting attachment 291666 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-03&apos;, &apos;build&apos;, &apos;--no-clean&apos;, &apos;--no-update&apos;, &apos;--build-style=release&apos;, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
eCommand.dia -c /Volumes/Data/EWS/WebKit/Source/WebCore/editing/BreakBlockquoteCommand.cpp -o /Volumes/Data/EWS/WebKit/WebKitBuild/WebCore.build/Release/WebCore.build/Objects-normal/x86_64/BreakBlockquoteCommand.o

** BUILD FAILED **


The following build commands failed:
	CompileC /Volumes/Data/EWS/WebKit/WebKitBuild/WebCore.build/Release/WebCore.build/Objects-normal/x86_64/BitmapImage.o platform/graphics/BitmapImage.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler
(1 failure)

Full output: http://webkit-queues.webkit.org/results/2286532</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240423</commentid>
    <comment_count>19</comment_count>
      <attachid>291670</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-14 14:58:20 -0700</bug_when>
    <thetext>Created attachment 291670
Patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240428</commentid>
    <comment_count>20</comment_count>
      <attachid>291671</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-14 15:14:01 -0700</bug_when>
    <thetext>Created attachment 291671
Patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240440</commentid>
    <comment_count>21</comment_count>
      <attachid>291671</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-14 15:44:53 -0700</bug_when>
    <thetext>Comment on attachment 291671
Patch for landing.

Clearing flags on attachment: 291671

Committed r207357: &lt;http://trac.webkit.org/changeset/207357&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240441</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-14 15:44:58 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291396</attachid>
            <date>2016-10-12 14:40:50 -0700</date>
            <delta_ts>2016-10-12 21:20:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163349-20161012143726.patch</filename>
            <type>text/plain</type>
            <size>16486</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzIyOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDE2LTEwLTEyICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBJ
bXBsZW1lbnQgYmFzaWMgU1ZHIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MzM0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCBpbXBsZW1lbnRhdGlvbnMgZm9yIGEgbnVtYmVyIG9mIGRy
YXdpbmcgcHJpbWl0aXZlcyB1c2VkIGluIHRoZSBTVkcKKyAgICAgICAgdGVzdCBjYXNlcy4gQ29y
cmVjdCBzb21lIGRpZmZlcmVuY2VzIGJldHdlZW4gQ0cgYW5kIERpcmVjdDJEIGZvciBkcmF3aW5n
CisgICAgICAgIGRpZmZlcmVudCBwcmltaXRpdmVzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
VGVzdGVkIGJ5IGV4aXN0aW5nICdzdmcnIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRy
YXcpOiBSZXZpc2UgZm9yIG5ldyAnc2V0UmVuZGVyVGFyZ2V0JyB0eXBlLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdUaWxlZCk6IE1ha2Ug
c3VyZSB0aGUgaW1hZ2UgaGFzIGFjY2VzcyB0byB0aGUgcmVuZGVyCisgICAgICAgIHRhcmdldCBz
byB3ZSBjYW4gdXNlIGRldmljZSBtZW1vcnkuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6IEFkZCBjcmVhdGUgZnVuY3Rpb24g
dGhhdCB0YWtlcyBhbiBJRDJEMVJlbmRlclRhcmdldAorICAgICAgICBhcmd1bWVudC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2FjaGUuY3BwOiBBZGQgbWlzc2luZyBp
bmNsdWRlIG5lZWRlZCB0byBidWlsZAorICAgICAgICB1bmRlciBEaXJlY3QyRC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZVNvdXJjZTo6c2V0UmVuZGVyVGFyZ2V0KTogQ2hhbmdlIHRvIHVzZSBJRDJEMVJlbmRlclRh
cmdldCBkaXJlY3RseS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3Qy
RC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKTog
RWxsaXBzZXMgYXJlIGRlZmluZWQgaW4gRDJEIGFzIGEgY2VudGVyLCBhbgorICAgICAgICBYLXJh
ZGl1cywgYW5kIGEgWS1yYWRpdXMuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0KTogQWRkIHNvbWUgZGVidWdnaW5nIGluZm9ybWF0aW9uLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOiBVc2UgJ0NsZWFyJyBmdW5jdGlvbiBp
ZiBwb3NzaWJsZS4gRG9uJ3QgY2xlYXIKKyAgICAgICAgYW55dGhpbmcgaWYgdGhlIGNsZWFyIHJl
Y3QgaXMgb3V0c2lkZSB0aGUgZHJhd2luZyBhcmVhLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VSZWN0KTogUHJvdmlkZSBpbXBsZW1lbnRhdGlvbiAobmVlZGVkIGJ5
IFNWRykuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbEVs
bGlwc2UpOiBFbGxpcHNlcyBhcmUgZGVmaW5lZCBpbiBEMkQgYXMKKyAgICAgICAgYSBjZW50ZXIs
IGFuIFgtcmFkaXVzLCBhbmQgYSBZLXJhZGl1cy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6cGxhdGZvcm1TdHJva2VFbGxpcHNlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwSW1hZ2U6OnNldFJlbmRlclRhcmdldCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2U6OnNldFJlbmRlclRhcmdldCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OnJl
bmRlclRhcmdldCk6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0
ZXJuRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0dGVybjo6Y3JlYXRlUGxhdGZv
cm1QYXR0ZXJuKToKKwogMjAxNi0xMC0xMiAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxl
LmNvbT4KIAogICAgICAgICBbV2ViR0xdIFJldmlzZSB2ZXJ0ZXggYXJyYXkgYXR0cmlidXRlIGNo
ZWNrcyB0byBhY2NvdW50IGZvciBsYXp5IG1lbW9yeSBhbGxvY2F0aW9uLgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkocmV2aXNp
b24gMjA3MjI2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBCaXRtYXBJbWFn
ZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIAogICAgICAgICByZXR1cm47CiAKICNpZiBVU0UoRElS
RUNUMkQpCi0gICAgc2V0UmVuZGVyVGFyZ2V0KGNvbnRleHQpOworICAgIHNldFJlbmRlclRhcmdl
dChjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9T
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5oCShyZXZpc2lvbiAyMDcyMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKLSAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAxMyBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYsIDIwMTMsIDIwMTYgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5
IFRvcmNoIE1vYmlsZSwgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTIzLDkgKzEyMyw2IEBA
IHB1YmxpYzoKICAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRT
aXplJikgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBmcmFtZXNOYXRpdmVJ
bWFnZXMoKSBvdmVycmlkZTsKICNlbmRpZgotI2lmIFVTRShESVJFQ1QyRCkKLSAgICB2b2lkIHNl
dFJlbmRlclRhcmdldChHcmFwaGljc0NvbnRleHQmKTsKLSNlbmRpZgogCiBwcm90ZWN0ZWQ6CiAg
ICAgV0VCQ09SRV9FWFBPUlQgQml0bWFwSW1hZ2UoTmF0aXZlSW1hZ2VQdHImJiwgSW1hZ2VPYnNl
cnZlciogPSBudWxscHRyKTsKQEAgLTE4OSw2ICsxODYsMTAgQEAgcHJpdmF0ZToKICAgICBib29s
IGlzQml0bWFwSW1hZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKIAorI2lmIFVTRShESVJFQ1QyRCkK
KyAgICB2b2lkIHNldFJlbmRlclRhcmdldChJRDJEMVJlbmRlclRhcmdldCopIG92ZXJyaWRlOwor
I2VuZGlmCisKICAgICBtdXRhYmxlIEltYWdlU291cmNlIG1fc291cmNlOwogCiAgICAgc2l6ZV90
IG1fY3VycmVudEZyYW1lIHsgMCB9OyAvLyBUaGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgZnJhbWUg
b2YgYW5pbWF0aW9uLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlLmNwcAkocmV2aXNpb24gMjA3MjI2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5MywxMCBAQCB2b2lkIElt
YWdlOjpmaWxsV2l0aFNvbGlkQ29sb3IoR3JhcGhpY3NDCiAKIHZvaWQgSW1hZ2U6OmRyYXdUaWxl
ZChHcmFwaGljc0NvbnRleHQmIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UG9pbnQmIHNyY1BvaW50LCBjb25zdCBGbG9hdFNpemUmIHNjYWxlZFRpbGVTaXplLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUg
YmxlbmRNb2RlKQogeworI2lmIFVTRShESVJFQ1QyRCkKKyAgICBzZXRSZW5kZXJUYXJnZXQoY3R4
dC5wbGF0Zm9ybUNvbnRleHQoKSk7CisjZW5kaWYKKwogICAgIENvbG9yIGNvbG9yID0gc2luZ2xl
UGl4ZWxTb2xpZENvbG9yKCk7CiAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewogICAgICAgICBm
aWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZGVzdFJlY3QsIGNvbG9yLCBvcCk7CkBAIC0yMDYsNiAr
MjEwLDEwIEBAIHZvaWQgSW1hZ2U6OmRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQmIGMKIHZvaWQg
SW1hZ2U6OmRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQmIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LAogICAgIGNvbnN0IEZsb2F0U2l6ZSYg
dGlsZVNjYWxlRmFjdG9yLCBUaWxlUnVsZSBoUnVsZSwgVGlsZVJ1bGUgdlJ1bGUsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wKQogeyAgICAKKyNpZiBVU0UoRElSRUNUMkQpCisgICAgc2V0UmVuZGVyVGFy
Z2V0KGN0eHQucGxhdGZvcm1Db250ZXh0KCkpOworI2VuZGlmCisKICAgICBDb2xvciBjb2xvciA9
IHNpbmdsZVBpeGVsU29saWRDb2xvcigpOwogICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHsKICAg
ICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRzdFJlY3QsIGNvbG9yLCBvcCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgJKHJldmlzaW9uIDIwNzIy
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU5LDYgKzU5LDExIEBAIHR5cGVkZWYgc3RydWN0IEhCSVRNQVBfXyAqSEJJVE1B
UDsKIHR5cGVkZWYgc3RydWN0IF9HZGtQaXhidWYgR2RrUGl4YnVmOwogI2VuZGlmCiAKKyNpZiBV
U0UoRElSRUNUMkQpCitpbnRlcmZhY2UgSUQyRDFSZW5kZXJUYXJnZXQ7CisjaW5jbHVkZSAiQ09N
UHRyLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFu
c2Zvcm07CkBAIC0xNTksNiArMTY0LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZ2V0
SEJJVE1BUE9mU2l6ZShIQklUTUFQLCBjb25zdCBJbnRTaXplKikgeyByZXR1cm4gZmFsc2U7IH0K
ICNlbmRpZgogCisjaWYgVVNFKERJUkVDVDJEKQorICAgIHZpcnR1YWwgdm9pZCBzZXRSZW5kZXJU
YXJnZXQoSUQyRDFSZW5kZXJUYXJnZXQqKTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oR1RLKQog
ICAgIHZpcnR1YWwgR2RrUGl4YnVmKiBnZXRHZGtQaXhidWYoKSB7IHJldHVybiBudWxscHRyOyB9
CiAjZW5kaWYKQEAgLTE5NSw5ICsyMDQsMTYgQEAgcHJvdGVjdGVkOgogICAgIC8vIFN1cHBvcnRp
bmcgdGlsZWQgZHJhd2luZwogICAgIHZpcnR1YWwgQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9y
KCkgY29uc3QgeyByZXR1cm4gQ29sb3IoKTsgfQogCisjaWYgVVNFKERJUkVDVDJEKQorICAgIElE
MkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQoKSBjb25zdDsKKyNlbmRpZgorCiBwcml2YXRl
OgogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZW5jb2RlZEltYWdlRGF0YTsKICAgICBJbWFn
ZU9ic2VydmVyKiBtX2ltYWdlT2JzZXJ2ZXI7CisjaWYgVVNFKERJUkVDVDJEKQorICAgIENPTVB0
cjxJRDJEMVJlbmRlclRhcmdldD4gbV9yZW5kZXJUYXJnZXQ7CisjZW5kaWYKIH07CiAKIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEltYWdlJik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9u
IDIwNzIyNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gYnVmZmVyOwogICAgIH0KKyNpZiBVU0Uo
RElSRUNUMkQpCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBJRDJE
MVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlU1JHQikKKyAgICB7CisgICAgICAgIGJv
b2wgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNl
LCByZW5kZXJpbmdNb2RlLCByZW5kZXJUYXJnZXQsIHN1Y2Nlc3MpKTsKKyAgICAgICAgaWYgKCFz
dWNjZXNzKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBidWZm
ZXI7CisgICAgfQorI2VuZGlmCiAKICAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBh
dGlibGUgd2l0aCB0aGUgY29udGV4dCwgd2l0aCBzdWl0YWJsZSByZXNvbHV0aW9uIGZvciBkcmF3
aW5nIGludG8gdGhlIGJ1ZmZlciBhbmQgdGhlbiBpbnRvIHRoaXMgY29udGV4dC4KICAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNv
bnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2FjaGUuY3BwCShy
ZXZpc2lvbiAyMDcyMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUZyYW1lQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw5IEBACiAKICNpZiBV
U0UoQ0cpCiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyQ0cuaCIKKyNlbGlmIFVTRShESVJFQ1QyRCkK
KyNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgorI2luY2x1ZGUgPFdpbkNvZGVjLmg+
CiAjZWxzZQogI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCShyZXZpc2lv
biAyMDcyMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJj
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKICNpZiBVU0UoQ0cpCiAjaW5j
bHVkZSAiSW1hZ2VEZWNvZGVyQ0cuaCIKICNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgogI2lu
Y2x1ZGUgPFdpbkNvZGVjLmg+CiAjZWxzZQpAQCAtMTE2LDEyICsxMTUsMTIgQEAgYm9vbCBJbWFn
ZVNvdXJjZTo6ZW5zdXJlRGVjb2RlckF2YWlsYWJsZQogfQogCiAjaWYgVVNFKERJUkVDVDJEKQot
dm9pZCBJbWFnZVNvdXJjZTo6c2V0UmVuZGVyVGFyZ2V0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkKK3ZvaWQgSW1hZ2VTb3VyY2U6OnNldFJlbmRlclRhcmdldChJRDJEMVJlbmRlclRhcmdldCog
cmVuZGVyVGFyZ2V0KQogewogICAgIGlmICghaXNEZWNvZGVyQXZhaWxhYmxlKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fZGVjb2Rlci0+c2V0UmVuZGVyVGFyZ2V0KGNvbnRleHQucGxhdGZv
cm1Db250ZXh0KCkpOworICAgIG1fZGVjb2Rlci0+c2V0UmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdl
dCk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5oCShyZXZpc2lvbiAyMDcyMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICsz
NiwxMCBAQAogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgogCisjaWYgVVNFKERJUkVDVDJEKQoraW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0
OworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0
OwpAQCAtNjAsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0RlY29kZXJBdmFpbGFibGUo
KSBjb25zdCB7IHJldHVybiBtX2RlY29kZXIuZ2V0KCk7IH0KIAogI2lmIFVTRShESVJFQ1QyRCkK
LSAgICB2b2lkIHNldFJlbmRlclRhcmdldChHcmFwaGljc0NvbnRleHQmKTsKKyAgICB2b2lkIHNl
dFJlbmRlclRhcmdldChJRDJEMVJlbmRlclRhcmdldCopOwogI2VuZGlmCiAKICAgICB2b2lkIHNl
dERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDIwNzIyNikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTczNiw3ICs3MzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0VsbGlwc2UoY29uc3QgCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRv
IGVsbGlwc2UgPSBEMkQxOjpFbGxpcHNlKEQyRDE6OlBvaW50MkYocmVjdC54KCksIHJlY3QueSgp
KSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBhdXRvIGVsbGlwc2UgPSBEMkQx
OjpFbGxpcHNlKHJlY3QuY2VudGVyKCksIDAuNSAqIHJlY3Qud2lkdGgoKSwgMC41ICogcmVjdC5o
ZWlnaHQoKSk7CiAKICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIApAQCAt
MTA0NiwxMCArMTA0Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBG
bG8KICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICB9CiAKLSAgICBjb250ZXh0LT5TZXRU
YWdzKDEsIF9fTElORV9fKTsKLQogICAgIGRyYXdXaXRob3V0U2hhZG93KHJlY3QsIFt0aGlzLCBy
ZWN0LCBjb2xvcl0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewogICAgICAgICBj
b25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKKyAgICAgICAgcmVuZGVyVGFyZ2V0LT5T
ZXRUYWdzKDEsIF9fTElORV9fKTsKICAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsUmVjdGFuZ2xl
KCZkMmRSZWN0LCBtX2RhdGEtPmJydXNoV2l0aENvbG9yKGNvbG9yV2l0aEdsb2JhbEFscGhhKGNv
bG9yKSkuZ2V0KCkpOwogICAgIH0pOwogfQpAQCAtMTMyOSwyNCArMTMyOCw1OCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLQotICAgIGNvbnRleHQt
PlNldFRhZ3MoMSwgX19MSU5FX18pOwotCiAgICAgZHJhd1dpdGhvdXRTaGFkb3cocmVjdCwgW3Ro
aXMsIHJlY3RdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgRmxv
YXRTaXplIHJlbmRlclRhcmdldFNpemUgPSByZW5kZXJUYXJnZXQtPkdldFNpemUoKTsKLSAgICAg
ICAgaWYgKHJlY3Quc2l6ZSgpID09IHJlbmRlclRhcmdldFNpemUpCisgICAgICAgIEZsb2F0UmVj
dCByZW5kZXJUYXJnZXRTaXplKEZsb2F0UG9pbnQoKSwgcmVuZGVyVGFyZ2V0LT5HZXRTaXplKCkp
OworICAgICAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QocmVjdCk7CisKKyAgICAgICAgaWYgKHZp
c2libGVSZWN0LmNvbnRhaW5zKHJlbmRlclRhcmdldFNpemUpKSB7CisgICAgICAgICAgICByZW5k
ZXJUYXJnZXQtPlNldFRhZ3MoMSwgX19MSU5FX18pOwogICAgICAgICAgICAgcmVuZGVyVGFyZ2V0
LT5DbGVhcigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZW5kZXJUYXJnZXQtPkZpbGxS
ZWN0YW5nbGUocmVjdCwgbV9kYXRhLT5icnVzaFdpdGhDb2xvcihjb2xvcldpdGhHbG9iYWxBbHBo
YShmaWxsQ29sb3IoKSkpLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICghdmlzaWJsZVJlY3QuaW50ZXJzZWN0cyhyZW5kZXJUYXJnZXRTaXplKSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICByZW5kZXJUYXJnZXQtPlNldFRhZ3MoMSwg
X19MSU5FX18pOworICAgICAgICB2aXNpYmxlUmVjdC5pbnRlcnNlY3QocmVuZGVyVGFyZ2V0U2l6
ZSk7CisgICAgICAgIHJlbmRlclRhcmdldC0+RmlsbFJlY3RhbmdsZSh2aXNpYmxlUmVjdCwgbV9k
YXRhLT5icnVzaFdpdGhDb2xvcihjb2xvcldpdGhHbG9iYWxBbHBoYShmaWxsQ29sb3IoKSkpLmdl
dCgpKTsKICAgICB9KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiB7Ci0gICAgKHZvaWQpcmVjdDsK
LSAgICAodm9pZClsaW5lV2lkdGg7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaXNSZWNvcmRpbmco
KSkgeworICAgICAgICBtX2Rpc3BsYXlMaXN0UmVjb3JkZXItPnN0cm9rZVJlY3QocmVjdCwgbGlu
ZVdpZHRoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3N0YXRlLnN0cm9r
ZUdyYWRpZW50KSB7CisgICAgICAgIGF1dG8gZHJhd0Z1bmN0aW9uID0gW3RoaXMsIHJlY3QsIGxp
bmVXaWR0aF0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgeworICAgICAgICAgICAg
cmVuZGVyVGFyZ2V0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKKyAgICAgICAgICAgIGNvbnN0IEQy
RDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OworICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5EcmF3
UmVjdGFuZ2xlKCZkMmRSZWN0LCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5jcmVhdGVQbGF0Zm9y
bUdyYWRpZW50SWZOZWNlc3NhcnkocmVuZGVyVGFyZ2V0KSwgbGluZVdpZHRoLCBtX2RhdGEtPnN0
cm9rZVN0eWxlKCkpOworICAgICAgICB9OworCisgICAgICAgIGlmIChoYXNTaGFkb3coKSkKKyAg
ICAgICAgICAgIGRyYXdXaXRoU2hhZG93KHJlY3QsIGRyYXdGdW5jdGlvbik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGRyYXdXaXRob3V0U2hhZG93KHJlY3QsIGRyYXdGdW5jdGlvbik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9zdGF0ZS5zdHJva2VQYXR0ZXJuKQor
ICAgICAgICBhcHBseVN0cm9rZVBhdHRlcm4oKTsKKworICAgIGRyYXdXaXRob3V0U2hhZG93KHJl
Y3QsIFt0aGlzLCByZWN0LCBsaW5lV2lkdGhdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJn
ZXQpIHsKKyAgICAgICAgcmVuZGVyVGFyZ2V0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKKyAgICAg
ICAgY29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7CisgICAgICAgIGF1dG8gYnJ1c2gg
PSBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPyBwYXR0ZXJuU3Ryb2tlQnJ1c2goKSA6IHNvbGlkU3Ry
b2tlQnJ1c2goKTsKKyAgICAgICAgcmVuZGVyVGFyZ2V0LT5EcmF3UmVjdGFuZ2xlKCZkMmRSZWN0
LCBicnVzaCwgbGluZVdpZHRoLCBtX2RhdGEtPnN0cm9rZVN0eWxlKCkpOworICAgIH0pOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKQEAgLTE4MTMs
NyArMTg0Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHMKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gZDJkRWxsaXBzZSA9IEQyRDE6OkVsbGlw
c2UoRDJEMTo6UG9pbnQyRihlbGxpcHNlLngoKSwgZWxsaXBzZS55KCkpLCBlbGxpcHNlLndpZHRo
KCksIGVsbGlwc2UuaGVpZ2h0KCkpOworICAgIGF1dG8gZDJkRWxsaXBzZSA9IEQyRDE6OkVsbGlw
c2UoZWxsaXBzZS5jZW50ZXIoKSwgMC41ICogZWxsaXBzZS53aWR0aCgpLCAwLjUgKiBlbGxpcHNl
LmhlaWdodCgpKTsKIAogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5TZXRUYWdzKDEsIF9fTElORV9f
KTsKIApAQCAtMTgzNSw3ICsxODY4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3Jt
U3Ryb2tlRWxsaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBkMmRFbGxpcHNl
ID0gRDJEMTo6RWxsaXBzZShEMkQxOjpQb2ludDJGKGVsbGlwc2UueCgpLCBlbGxpcHNlLnkoKSks
IGVsbGlwc2Uud2lkdGgoKSwgZWxsaXBzZS5oZWlnaHQoKSk7CisgICAgYXV0byBkMmRFbGxpcHNl
ID0gRDJEMTo6RWxsaXBzZShlbGxpcHNlLmNlbnRlcigpLCAwLjUgKiBlbGxpcHNlLndpZHRoKCks
IDAuNSAqIGVsbGlwc2UuaGVpZ2h0KCkpOwogCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPlNldFRh
Z3MoMSwgX19MSU5FX18pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMDcyMjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkyLDkgKzkyLDIwIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXdG
cmFtZU1hdGNoaW5nU291cmMKICAgICBkcmF3KGN0eHQsIGRzdFJlY3QsIEZsb2F0UmVjdCgwLjBm
LCAwLjBmLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgY29tcG9zaXRl
T3AsIEJsZW5kTW9kZU5vcm1hbCwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKCkpOwogfQog
Ci12b2lkIEJpdG1hcEltYWdlOjpzZXRSZW5kZXJUYXJnZXQoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KQordm9pZCBCaXRtYXBJbWFnZTo6c2V0UmVuZGVyVGFyZ2V0KElEMkQxUmVuZGVyVGFyZ2V0
KiByZW5kZXJUYXJnZXQpCiB7Ci0gICAgbV9zb3VyY2Uuc2V0UmVuZGVyVGFyZ2V0KGNvbnRleHQp
OworICAgIEltYWdlOjpzZXRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTsKKyAgICBtX3NvdXJj
ZS5zZXRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTsKK30KKwordm9pZCBJbWFnZTo6c2V0UmVu
ZGVyVGFyZ2V0KElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCit7CisgICAgbV9yZW5k
ZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7Cit9CisKK0lEMkQxUmVuZGVyVGFyZ2V0KiBJbWFnZTo6
cmVuZGVyVGFyZ2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJUYXJnZXQuZ2V0KCk7
CiB9CiAKIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgY3R4dCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdHRlcm5EaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdHRlcm5EaXJlY3QyRC5jcHAJ
KHJldmlzaW9uIDIwNzIyNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9QYXR0ZXJuRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4ICs0MSw2IEBAIElE
MkQxQml0bWFwQnJ1c2gqIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3IKIHsKICAgICBSRUxFQVNFX0FT
U0VSVChyZW5kZXJUYXJnZXQpOwogCi0gICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gdGlsZUltYWdl
KCktPnJlY3QoKTsKLQogICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtID0gdXNl
clNwYWNlVHJhbnNmb3JtYXRpb24gKiBtX3BhdHRlcm5TcGFjZVRyYW5zZm9ybWF0aW9uOwogICAg
IGF1dG8gYml0bWFwQnJ1c2hQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwQnJ1c2hQcm9wZXJ0aWVz
KCk7CiAgICAgYml0bWFwQnJ1c2hQcm9wZXJ0aWVzLmV4dGVuZE1vZGVYID0gbV9yZXBlYXRYID8g
RDJEMV9FWFRFTkRfTU9ERV9XUkFQIDogRDJEMV9FWFRFTkRfTU9ERV9DTEFNUDsKQEAgLTUyLDkg
KzUwLDEyIEBAIElEMkQxQml0bWFwQnJ1c2gqIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3IKICAgICBi
cnVzaFByb3BlcnRpZXMudHJhbnNmb3JtID0gcGF0dGVyblRyYW5zZm9ybTsKICAgICBicnVzaFBy
b3BlcnRpZXMub3BhY2l0eSA9IGFscGhhOwogCisgICAgYXV0byBwYXR0ZXJuSW1hZ2UgPSB0aWxl
SW1hZ2UoKTsKKyAgICBwYXR0ZXJuSW1hZ2UtPnNldFJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQp
OworCiAgICAgSUQyRDFCaXRtYXBCcnVzaCogcGF0dGVybkJydXNoID0gbnVsbHB0cjsKLSAgICBI
UkVTVUxUIGhyID0gcmVuZGVyVGFyZ2V0LT5DcmVhdGVCaXRtYXBCcnVzaCh0aWxlSW1hZ2UoKS0+
bmF0aXZlSW1hZ2UoKS5nZXQoKSwgJmJpdG1hcEJydXNoUHJvcGVydGllcywgJmJydXNoUHJvcGVy
dGllcywgJnBhdHRlcm5CcnVzaCk7Ci0gICAgQVNTRVJUKGhyKTsKKyAgICBIUkVTVUxUIGhyID0g
cmVuZGVyVGFyZ2V0LT5DcmVhdGVCaXRtYXBCcnVzaChwYXR0ZXJuSW1hZ2UtPm5hdGl2ZUltYWdl
KCkuZ2V0KCksICZiaXRtYXBCcnVzaFByb3BlcnRpZXMsICZicnVzaFByb3BlcnRpZXMsICZwYXR0
ZXJuQnJ1c2gpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKICAgICByZXR1cm4gcGF0dGVy
bkJydXNoOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291452</attachid>
            <date>2016-10-12 21:20:17 -0700</date>
            <delta_ts>2016-10-13 10:49:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163349-20161012211652.patch</filename>
            <type>text/plain</type>
            <size>34271</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDE2LTEwLTEyICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBJ
bXBsZW1lbnQgYmFzaWMgU1ZHIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MzM0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCBpbXBsZW1lbnRhdGlvbnMgZm9yIGEgbnVtYmVyIG9mIGRy
YXdpbmcgcHJpbWl0aXZlcyB1c2VkIGluIHRoZSBTVkcKKyAgICAgICAgdGVzdCBjYXNlcy4gQ29y
cmVjdCBzb21lIGRpZmZlcmVuY2VzIGJldHdlZW4gQ0cgYW5kIERpcmVjdDJEIGZvciBkcmF3aW5n
CisgICAgICAgIGRpZmZlcmVudCBwcmltaXRpdmVzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
VGVzdGVkIGJ5IGV4aXN0aW5nICdzdmcnIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRy
YXcpOiBSZXZpc2UgZm9yIG5ldyAnc2V0UmVuZGVyVGFyZ2V0JyB0eXBlLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdUaWxlZCk6IE1ha2Ug
c3VyZSB0aGUgaW1hZ2UgaGFzIGFjY2VzcyB0byB0aGUgcmVuZGVyCisgICAgICAgIHRhcmdldCBz
byB3ZSBjYW4gdXNlIGRldmljZSBtZW1vcnkuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6IEFkZCBjcmVhdGUgZnVuY3Rpb24g
dGhhdCB0YWtlcyBhbiBJRDJEMVJlbmRlclRhcmdldAorICAgICAgICBhcmd1bWVudC4KKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlOjpzZXRQbGF0Zm9ybVJlbmRlclRhcmdldCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlKTog
TW92ZWQgZnJvbSBoZWFkZXIuIEFkZGVkIERpcmVjdDJEIHZlcnNpb24uCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcDogQWRkIG1pc3NpbmcgaW5jbHVkZSBu
ZWVkZWQgdG8gYnVpbGQKKyAgICAgICAgdW5kZXIgRGlyZWN0MkQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2FjaGUuY3Bw
OiBBZGQgbWlzc2luZyBpbmNsdWRlcyBuZWVkZWQgZm9yIEQyRCBidWlsZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpzZXRSZW5kZXJUYXJnZXQpOiBDaGFuZ2UgdG8gdXNlIElEMkQx
UmVuZGVyVGFyZ2V0IGRpcmVjdGx5LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKTogRWxsaXBzZXMg
YXJlIGRlZmluZWQgaW4gRDJEIGFzIGEgY2VudGVyLCBhbgorICAgICAgICBYLXJhZGl1cywgYW5k
IGEgWS1yYWRpdXMuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU6OmVuZERyYXcpOiBMb2cgZXJyb3Igc3RhdGUgaW5zdGVhZCBvZiBjcmFzaGluZworICAg
ICAgICBlYWNoIHRpbWUuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5
U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5
RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVj
dCk6IEFkZCBzb21lIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KTogVXNlICdDbGVhcicgZnVuY3Rpb24gaWYgcG9zc2li
bGUuIERvbid0IGNsZWFyCisgICAgICAgIGFueXRoaW5nIGlmIHRoZSBjbGVhciByZWN0IGlzIG91
dHNpZGUgdGhlIGRyYXdpbmcgYXJlYS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlUmVjdCk6IFByb3ZpZGUgaW1wbGVtZW50YXRpb24gKG5lZWRlZCBieSBTVkcpLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKTog
RWxsaXBzZXMgYXJlIGRlZmluZWQgaW4gRDJEIGFzCisgICAgICAgIGEgY2VudGVyLCBhbiBYLXJh
ZGl1cywgYW5kIGEgWS1yYWRpdXMuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZURpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpzZXRQbGF0Zm9ybVJlbmRlclRhcmdldCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2U6OnNldFBsYXRmb3JtUmVuZGVyVGFyZ2V0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZTo6cmVuZGVyVGFyZ2V0KTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1BhdHRlcm5EaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpjcmVh
dGVQbGF0Zm9ybVBhdHRlcm4pOgorICAgICAgICAqIHJlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5k
ZXJlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6YWxsb2Nh
dGVCYWNraW5nU3RvcmVJZk5lZWRlZCk6IFBhc3MgcmVuZGVyIHRhcmdldAorICAgICAgICB0byBJ
bWFnZUJ1ZmZlciBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJl
bmRlcmVySGVscGVyOjpzZXRQbGF0Zm9ybVJlbmRlclRhcmdldCk6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXI6OnNldFBsYXRmb3JtUmVuZGVyVGFyZ2V0KTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcjo6YmVn
aW5GaWx0ZXJFZmZlY3QpOiBQYXNzIHN0b3JlZCByZW5kZXIgdGFyZ2V0CisgICAgICAgIHRvIGFj
dHVhbCBGaWx0ZXJFZmZlY3RSZW5kZXJlci4KKyAgICAgICAgKiByZW5kZXJpbmcvRmlsdGVyRWZm
ZWN0UmVuZGVyZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldHVwRmlsdGVycyk6IFBhc3MgcmVuZGVyIHRh
cmdldCB0byBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcgorICAgICAgICBzbyBpdCBjYW4gcGFz
cyBpdCB0byB0aGUgRmlsdGVyRWZmZWN0UmVuZGVyZXIuCisgICAgICAgICogc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZSk6
CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmg6CisKIDIwMTYtMTAtMTIgIFphbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5kZXJSdWJ5UnVuIHNob3Vs
ZCBub3QgbWFyayBjaGlsZCByZW5kZXJlcnMgZGlydHkgYXQgdGhlIGVuZCBvZiBsYXlvdXQuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
Y3BwCShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw5ICsxNDEsNyBAQCB2b2lk
IEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgCiAgICAgaWYgKGRlc3RSZWN0Lmlz
RW1wdHkoKSB8fCBzcmNSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgVVNF
KERJUkVDVDJEKQotICAgIHNldFJlbmRlclRhcmdldChjb250ZXh0KTsKLSNlbmRpZgorICAgIHNl
dFBsYXRmb3JtUmVuZGVyVGFyZ2V0KGNvbnRleHQpOwogCiAjaWYgUExBVEZPUk0oSU9TKQogICAg
IHN0YXJ0QW5pbWF0aW9uKERvTm90Q2F0Y2hVcCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWlu
aWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDEzIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQtMjAwNiwgMjAxMywgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CkBAIC0xMjMsOSArMTIzLDYgQEAgcHVibGljOgogICAgIE5hdGl2ZUltYWdlUHRy
IG5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICBWZWN0b3I8
TmF0aXZlSW1hZ2VQdHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIG92ZXJyaWRlOwogI2VuZGlmCi0j
aWYgVVNFKERJUkVDVDJEKQotICAgIHZvaWQgc2V0UmVuZGVyVGFyZ2V0KEdyYXBoaWNzQ29udGV4
dCYpOwotI2VuZGlmCiAKIHByb3RlY3RlZDoKICAgICBXRUJDT1JFX0VYUE9SVCBCaXRtYXBJbWFn
ZShOYXRpdmVJbWFnZVB0ciYmLCBJbWFnZU9ic2VydmVyKiA9IG51bGxwdHIpOwpAQCAtMTg5LDYg
KzE4NiwxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNCaXRtYXBJbWFnZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHRydWU7IH0KICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0IG92
ZXJyaWRlOwogCisjaWYgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgc2V0UGxhdGZvcm1SZW5kZXJU
YXJnZXQoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikgb3ZlcnJpZGU7CisjZW5kaWYKKwogICAgIG11
dGFibGUgSW1hZ2VTb3VyY2UgbV9zb3VyY2U7CiAKICAgICBzaXplX3QgbV9jdXJyZW50RnJhbWUg
eyAwIH07IC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBmcmFtZSBvZiBhbmltYXRpb24uCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCShyZXZpc2lv
biAyMDcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDggQEAgdm9pZCBJbWFnZTo6ZmlsbFdpdGhTb2xp
ZENvbG9yKEdyYXBoaWNzQwogCiB2b2lkIEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0
JiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFBvaW50JiBzcmNQ
b2ludCwgY29uc3QgRmxvYXRTaXplJiBzY2FsZWRUaWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKKyAg
ICBzZXRQbGF0Zm9ybVJlbmRlclRhcmdldChjdHh0KTsKKwogICAgIENvbG9yIGNvbG9yID0gc2lu
Z2xlUGl4ZWxTb2xpZENvbG9yKCk7CiAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewogICAgICAg
ICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZGVzdFJlY3QsIGNvbG9yLCBvcCk7CkBAIC0yMDYs
NiArMjA4LDggQEAgdm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCYgYwogdm9p
ZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCYgY3R4dCwgY29uc3QgRmxvYXRSZWN0
JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsCiAgICAgY29uc3QgRmxvYXRTaXpl
JiB0aWxlU2NhbGVGYWN0b3IsIFRpbGVSdWxlIGhSdWxlLCBUaWxlUnVsZSB2UnVsZSwgQ29tcG9z
aXRlT3BlcmF0b3Igb3ApCiB7ICAgIAorICAgIHNldFBsYXRmb3JtUmVuZGVyVGFyZ2V0KGN0eHQu
cGxhdGZvcm1Db250ZXh0KCkpOworCiAgICAgQ29sb3IgY29sb3IgPSBzaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKTsKICAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7CiAgICAgICAgIGZpbGxXaXRoU29s
aWRDb2xvcihjdHh0LCBkc3RSZWN0LCBjb2xvciwgb3ApOwpAQCAtMzQ3LDQgKzM1MSwxMSBAQCBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjCiAgICAgcmV0dXJuIHRzOwog
fQogCisjaWYgIVVTRShESVJFQ1QyRCkKK3ZvaWQgSW1hZ2U6OnNldFBsYXRmb3JtUmVuZGVyVGFy
Z2V0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpCit7CisgICAgLy8gTm8tb3Agb24gdGhpcyBwbGF0
Zm9ybQorfQorI2VuZGlmCisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2UuaAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksMTEgQEAgdHlwZWRl
ZiBzdHJ1Y3QgSEJJVE1BUF9fICpIQklUTUFQOwogdHlwZWRlZiBzdHJ1Y3QgX0dka1BpeGJ1ZiBH
ZGtQaXhidWY7CiAjZW5kaWYKIAorI2lmIFVTRShESVJFQ1QyRCkKK2ludGVyZmFjZSBJRDJEMVJl
bmRlclRhcmdldDsKKyNpbmNsdWRlICJDT01QdHIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKQEAgLTE1OSw2ICsxNjQsOCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIGdldEhCSVRNQVBPZlNpemUoSEJJVE1BUCwgY29uc3QgSW50
U2l6ZSopIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgdm9pZCBzZXRQ
bGF0Zm9ybVJlbmRlclRhcmdldChjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKwogI2lmIFBMQVRG
T1JNKEdUSykKICAgICB2aXJ0dWFsIEdka1BpeGJ1ZiogZ2V0R2RrUGl4YnVmKCkgeyByZXR1cm4g
bnVsbHB0cjsgfQogI2VuZGlmCkBAIC0xOTUsOSArMjAyLDE2IEBAIHByb3RlY3RlZDoKICAgICAv
LyBTdXBwb3J0aW5nIHRpbGVkIGRyYXdpbmcKICAgICB2aXJ0dWFsIENvbG9yIHNpbmdsZVBpeGVs
U29saWRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIENvbG9yKCk7IH0KIAorI2lmIFVTRShESVJFQ1Qy
RCkKKyAgICBJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KCkgY29uc3Q7CisjZW5kaWYK
KwogcHJpdmF0ZToKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2VuY29kZWRJbWFnZURhdGE7
CiAgICAgSW1hZ2VPYnNlcnZlciogbV9pbWFnZU9ic2VydmVyOworI2lmIFVTRShESVJFQ1QyRCkK
KyAgICBDT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IG1fcmVuZGVyVGFyZ2V0OworI2VuZGlmCiB9
OwogCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBJbWFnZSYpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNywyNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZExlbmd0aCA9IDQw
OTY7CiBzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZEFyZWEgPSBNYXhDbGFtcGVkTGVuZ3Ro
ICogTWF4Q2xhbXBlZExlbmd0aDsKIAorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkK
K3sKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlLCByZW5kZXJpbmdNb2RlLCBzdWNjZXNzKSk7CisgICAgaWYgKCFzdWNjZXNzKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gYnVmZmVyOworfQorCisjaWYgVVNFKERJ
UkVDVDJEKQorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBJRDJE
MVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCByZW5kZXJUYXJnZXQsIHN1
Y2Nlc3MpKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IHJldHVybiBidWZmZXI7Cit9CisjZW5kaWYKKwogYm9vbCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRz
Q2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewogICAgIGlmIChzaXplLmlzRW1wdHko
KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuaAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsMTQgKzc0LDEwIEBAIGNsYXNz
IEltYWdlQnVmZmVyIHsKICAgICBmcmllbmQgY2xhc3MgSU9TdXJmYWNlOwogcHVibGljOgogICAg
IC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KLSAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSA9IDEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IENvbG9yU3BhY2VTUkdCKQotICAgIHsK
LSAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUs
IGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIHN1Y2Nlc3MpKTsKLSAgICAgICAgaWYgKCFzdWNj
ZXNzKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBidWZmZXI7
Ci0gICAgfQorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShj
b25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAx
LCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZVNSR0IpOworI2lmIFVTRShESVJFQ1QyRCkKKyAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXpl
JiwgUmVuZGVyaW5nTW9kZSwgSUQyRDFSZW5kZXJUYXJnZXQqLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZVNSR0IpOworI2VuZGlmCiAKICAgICAvLyBD
cmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dCwgd2l0aCBz
dWl0YWJsZSByZXNvbHV0aW9uIGZvciBkcmF3aW5nIGludG8gdGhlIGJ1ZmZlciBhbmQgdGhlbiBp
bnRvIHRoaXMgY29udGV4dC4KICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VG
cmFtZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUZyYW1lQ2FjaGUuY3BwCShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSw5IEBACiAKICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVy
Q0cuaCIKKyNlbGlmIFVTRShESVJFQ1QyRCkKKyNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3Qy
RC5oIgorI2luY2x1ZGUgPFdpbkNvZGVjLmg+CiAjZWxzZQogI2luY2x1ZGUgIkltYWdlRGVjb2Rl
ci5oIgogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuY3BwCShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcg
KzMyLDYgQEAKICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyQ0cuaCIKICNlbGlm
IFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJ
bWFnZURlY29kZXJEaXJlY3QyRC5oIgogI2luY2x1ZGUgPFdpbkNvZGVjLmg+CiAjZWxzZQpAQCAt
MTE1LDE2ICsxMTQsNiBAQCBib29sIEltYWdlU291cmNlOjplbnN1cmVEZWNvZGVyQXZhaWxhYmxl
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi12b2lkIEltYWdlU291
cmNlOjpzZXRSZW5kZXJUYXJnZXQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlm
ICghaXNEZWNvZGVyQXZhaWxhYmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGVjb2Rl
ci0+c2V0UmVuZGVyVGFyZ2V0KGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpOwotfQotI2VuZGlm
Ci0KIHZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFs
bERhdGFSZWNlaXZlZCkKIHsKICAgICBpZiAoIWRhdGEgfHwgIWVuc3VyZURlY29kZXJBdmFpbGFi
bGUoZGF0YSkpCkBAIC0yMDksNiArMTk4LDE0IEBAIE5hdGl2ZUltYWdlUHRyIEltYWdlU291cmNl
OjpjcmVhdGVGcmFtZUkKICAgICByZXR1cm4gaXNEZWNvZGVyQXZhaWxhYmxlKCkgPyBtX2RlY29k
ZXItPmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKSA6IG51
bGxwdHI7CiB9CiAKKyNpZiBVU0UoRElSRUNUMkQpCit2b2lkIEltYWdlU291cmNlOjpzZXRSZW5k
ZXJUYXJnZXQoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKK3sKKyAgICBpZiAobV9k
ZWNvZGVyKQorICAgICAgICBtX2RlY29kZXItPnNldFJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQp
OworfQorI2VuZGlmCisKIHZvaWQgSW1hZ2VTb3VyY2U6OmR1bXAoVGV4dFN0cmVhbSYgdHMpCiB7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJ0eXBlIiwgZmlsZW5hbWVFeHRlbnNpb24oKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgJKHJl
dmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDEwIEBACiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKKyNpZiBVU0UoRElS
RUNUMkQpCitpbnRlcmZhY2UgSUQyRDFSZW5kZXJUYXJnZXQ7CisjZW5kaWYKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CkBAIC01OSwxMCArNjMsNiBAQCBw
dWJsaWM6CiAgICAgYm9vbCBlbnN1cmVEZWNvZGVyQXZhaWxhYmxlKFNoYXJlZEJ1ZmZlciopOwog
ICAgIGJvb2wgaXNEZWNvZGVyQXZhaWxhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9kZWNvZGVyLmdl
dCgpOyB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgdm9pZCBzZXRSZW5kZXJUYXJnZXQoR3Jh
cGhpY3NDb250ZXh0Jik7Ci0jZW5kaWYKLQogICAgIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIq
IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKICAgICBib29sIGRhdGFDaGFuZ2VkKFNoYXJl
ZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwogCkBAIC0xMDAsNiArMTAwLDEw
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFsbG93U3Vic2FtcGxpbmcoYm9vbCBhbGxvd1N1YnNh
bXBsaW5nKSB7IG1fYWxsb3dTdWJzYW1wbGluZyA9IGFsbG93U3Vic2FtcGxpbmc7IH0KICAgICBO
YXRpdmVJbWFnZVB0ciBjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5n
TGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKIAorI2lmIFVTRShESVJFQ1QyRCkK
KyAgICB2b2lkIHNldFJlbmRlclRhcmdldChJRDJEMVJlbmRlclRhcmdldCopOworI2VuZGlmCisK
IHByaXZhdGU6CiAgICAgdm9pZCBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90KTsKICAgICB2
b2lkIGNsZWFyKGJvb2wgZGVzdHJveUFsbCwgc2l6ZV90IGNvdW50LCBTaGFyZWRCdWZmZXIqIGRh
dGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAko
cmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
dGVybi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBAIHR5cGVkZWYgc3RydWN0IENH
UGF0dGVybiogQ0dQYXR0ZXJuUmVmOwogdHlwZWRlZiBDR1BhdHRlcm5SZWYgUGxhdGZvcm1QYXR0
ZXJuUHRyOwogI2VsaWYgVVNFKERJUkVDVDJEKQogaW50ZXJmYWNlIElEMkQxQml0bWFwQnJ1c2g7
Ci1pbnRlcmZhY2UgSUQyRDFSZW5kZXJUYXJnZXQ7CiB0eXBlZGVmIElEMkQxQml0bWFwQnJ1c2gq
IFBsYXRmb3JtUGF0dGVyblB0cjsKICNlbGlmIFVTRShDQUlSTykKICNpbmNsdWRlIDxjYWlyby5o
PgpAQCAtNTEsNiArNTAsNyBAQCB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtUGF0dGVyblB0cjsKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOworY2xhc3MgR3JhcGhp
Y3NDb250ZXh0OwogY2xhc3MgSW1hZ2U7CiAKIGNsYXNzIFBhdHRlcm4gZmluYWwgOiBwdWJsaWMg
UmVmQ291bnRlZDxQYXR0ZXJuPiB7CkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICNpZiAhVVNF
KERJUkVDVDJEKQogICAgIFBsYXRmb3JtUGF0dGVyblB0ciBjcmVhdGVQbGF0Zm9ybVBhdHRlcm4o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB1c2VyU3BhY2VUcmFuc2Zvcm1hdGlvbikgY29uc3Q7CiAj
ZWxzZQotICAgIFBsYXRmb3JtUGF0dGVyblB0ciBjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oSUQyRDFS
ZW5kZXJUYXJnZXQqLCBmbG9hdCBhbHBoYSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB1c2VyU3Bh
Y2VUcmFuc2Zvcm1hdGlvbikgY29uc3Q7CisgICAgUGxhdGZvcm1QYXR0ZXJuUHRyIGNyZWF0ZVBs
YXRmb3JtUGF0dGVybihjb25zdCBHcmFwaGljc0NvbnRleHQmLCBmbG9hdCBhbHBoYSwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB1c2VyU3BhY2VUcmFuc2Zvcm1hdGlvbikgY29uc3Q7CiAjZW5kaWYK
ICAgICB2b2lkIHNldFBhdHRlcm5TcGFjZVRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5TcGFjZVRyYW5zZm9ybWF0aW9uKTsKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGdldFBhdHRlcm5TcGFjZVRyYW5zZm9ybSgpIHsgcmV0dXJuIG1fcGF0dGVyblNwYWNlVHJhbnNm
b3JtYXRpb247IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lv
biAyMDcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1
c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDc0IEBAIEZv
bnRDdXN0b21QbGF0Zm9ybURhdGE6On5Gb250Q3VzdG9tUGxhdGYKICAgICAgICAgUmVtb3ZlRm9u
dE1lbVJlc291cmNlRXgobV9mb250UmVmZXJlbmNlKTsKIH0KIAorc3RhdGljIEhSRVNVTFQgY3Jl
YXRlRmFsbGJhY2tGb250KGNvbnN0IExPR0ZPTlQmIGxvZ0ZvbnQsIElEV3JpdGVGb250KiogZHdG
b250KQoreworICAgIGlmICghZHdGb250KQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisg
ICAgQ09NUHRyPElEV3JpdGVGb250Q29sbGVjdGlvbj4gZm9udENvbGxlY3Rpb247CisgICAgSFJF
U1VMVCBociA9IEZvbnQ6OnN5c3RlbURXcml0ZUZhY3RvcnkoKS0+R2V0U3lzdGVtRm9udENvbGxl
Y3Rpb24oJmZvbnRDb2xsZWN0aW9uKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0
dXJuIGhyOworCisgICAgd2NoYXJfdCBsb2NhbGVOYW1lW0xPQ0FMRV9OQU1FX01BWF9MRU5HVEhd
OworICAgIGludCBsb2NhbGVMZW5ndGggPSBHZXRVc2VyRGVmYXVsdExvY2FsZU5hbWUobG9jYWxl
TmFtZSwgTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7CisKKyAgICBDT01QdHI8SURXcml0ZUZvbnRG
YW1pbHk+IGZvbnRGYW1pbHk7CisKKyAgICB1bnNpZ25lZCBmb250RmFtaWx5Q291bnQgPSBmb250
Q29sbGVjdGlvbi0+R2V0Rm9udEZhbWlseUNvdW50KCk7CisgICAgZm9yICh1bnNpZ25lZCBmb250
SW5kZXggPSAwOyBmb250SW5kZXggPCBmb250RmFtaWx5Q291bnQ7ICsrZm9udEluZGV4KSB7Cisg
ICAgICAgIGhyID0gZm9udENvbGxlY3Rpb24tPkdldEZvbnRGYW1pbHkoZm9udEluZGV4LCAmZm9u
dEZhbWlseSk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICAgICAgcmV0dXJuIGhy
OworCisgICAgICAgIENPTVB0cjxJRFdyaXRlTG9jYWxpemVkU3RyaW5ncz4gZmFtaWx5TmFtZXM7
CisgICAgICAgIGhyID0gZm9udEZhbWlseS0+R2V0RmFtaWx5TmFtZXMoJmZhbWlseU5hbWVzKTsK
KyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICByZXR1cm4gaHI7CisKKyAgICAg
ICAgQk9PTCBleGlzdHMgPSBmYWxzZTsKKyAgICAgICAgdW5zaWduZWQgbG9jYWxlSW5kZXggPSAw
OworICAgICAgICBpZiAobG9jYWxlTGVuZ3RoKQorICAgICAgICAgICAgaHIgPSBmYW1pbHlOYW1l
cy0+RmluZExvY2FsZU5hbWUobG9jYWxlTmFtZSwgJmxvY2FsZUluZGV4LCAmZXhpc3RzKTsKKwor
ICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSAmJiAhZXhpc3RzKQorICAgICAgICAgICAgaHIgPSBm
YW1pbHlOYW1lcy0+RmluZExvY2FsZU5hbWUoTCJlbi11cyIsICZsb2NhbGVJbmRleCwgJmV4aXN0
cyk7CisKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICByZXR1cm4gaHI7CisK
KyAgICAgICAgdW5zaWduZWQgZmFtaWx5TmFtZUxlbmd0aCA9IDA7CisgICAgICAgIGhyID0gZmFt
aWx5TmFtZXMtPkdldFN0cmluZ0xlbmd0aChsb2NhbGVJbmRleCwgJmZhbWlseU5hbWVMZW5ndGgp
OworICAgICAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgICAgICByZXR1cm4gaHI7CisK
KyAgICAgICAgVmVjdG9yPHdjaGFyX3Q+IGZhbWlseU5hbWUoZmFtaWx5TmFtZUxlbmd0aCArIDEp
OworICAgICAgICBociA9IGZhbWlseU5hbWVzLT5HZXRTdHJpbmcobG9jYWxlSW5kZXgsIGZhbWls
eU5hbWUuZGF0YSgpLCBmYW1pbHlOYW1lLnNpemUoKSk7CisgICAgICAgIGlmICghU1VDQ0VFREVE
KGhyKSkKKyAgICAgICAgICAgIHJldHVybiBocjsKKworICAgICAgICBpZiAoIXdjc2NtcChsb2dG
b250LmxmRmFjZU5hbWUsIGZhbWlseU5hbWUuZGF0YSgpKSkKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGZvbnRGYW1pbHkgPSBudWxscHRyOworICAgIH0KKworICAgIGlmICghZm9udEZh
bWlseSkgeworICAgICAgICBociA9IGZvbnRDb2xsZWN0aW9uLT5HZXRGb250RmFtaWx5KDAsICZm
b250RmFtaWx5KTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICByZXR1cm4g
aHI7CisgICAgfQorCisgICAgRFdSSVRFX0ZPTlRfV0VJR0hUIHdlaWdodCA9IHN0YXRpY19jYXN0
PERXUklURV9GT05UX1dFSUdIVD4obG9nRm9udC5sZldlaWdodCk7CisgICAgRFdSSVRFX0ZPTlRf
U1RSRVRDSCBzdHJldGNoID0gc3RhdGljX2Nhc3Q8RFdSSVRFX0ZPTlRfU1RSRVRDSD4obG9nRm9u
dC5sZlF1YWxpdHkpOworICAgIERXUklURV9GT05UX1NUWUxFIHN0eWxlID0gbG9nRm9udC5sZkl0
YWxpYyA/IERXUklURV9GT05UX1NUWUxFX0lUQUxJQyA6IERXUklURV9GT05UX1NUWUxFX05PUk1B
TDsKKworICAgIGhyID0gZm9udEZhbWlseS0+R2V0Rmlyc3RNYXRjaGluZ0ZvbnQod2VpZ2h0LCBz
dHJldGNoLCBzdHlsZSwgZHdGb250KTsKKworICAgIHJldHVybiBocjsKK30KKwogRm9udFBsYXRm
b3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKQog
ewogICAgIGludCBzaXplID0gZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCk7CkBA
IC04MCw2ICsxNDgsOCBAQCBGb250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6
CiAjZWxzZQogICAgIENPTVB0cjxJRFdyaXRlRm9udD4gZHdGb250OwogICAgIEhSRVNVTFQgaHIg
PSBGb250OjpzeXN0ZW1EV3JpdGVHZGlJbnRlcm9wKCktPkNyZWF0ZUZvbnRGcm9tTE9HRk9OVCgm
bG9nRm9udCwgJmR3Rm9udCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIGhyID0gY3Jl
YXRlRmFsbGJhY2tGb250KGxvZ0ZvbnQsICZkd0ZvbnQpOwogICAgIFJFTEVBU0VfQVNTRVJUKFNV
Q0NFRURFRChocikpOwogICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKFdURk1vdmUoaGZvbnQp
LCBkd0ZvbnQuZ2V0KCksIHNpemUsIGJvbGQsIGl0YWxpYywgcmVuZGVyaW5nTW9kZSA9PSBGb250
UmVuZGVyaW5nTW9kZTo6QWx0ZXJuYXRlKTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMzgsNyArMzM4LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGU6OmVuZAogICAgIEQyRDFfVEFHIGZpcnN0LCBzZWNvbmQ7CiAgICAgSFJFU1VMVCBociA9IG1f
cmVuZGVyVGFyZ2V0LT5FbmREcmF3KCZmaXJzdCwgJnNlY29uZCk7CiAKLSAgICBSRUxFQVNFX0FT
U0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIFdU
RkxvZ0Fsd2F5cygiQ3Jhc2hlZCBpbiBFbmREcmF3OiBocj0lbGQsIGZpcnN0PSVsZCwgc2Vjb25k
PSVsZCIsIGhyLCBmaXJzdCwgc2Vjb25kKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGU6OnJlc3RvcmUoKQpAQCAtNzM2LDcgKzczNyw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGF1dG8gZWxsaXBzZSA9IEQyRDE6OkVsbGlwc2UoRDJEMTo6UG9pbnQyRihyZWN0LngoKSwgcmVj
dC55KCkpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIGF1dG8gZWxsaXBzZSA9
IEQyRDE6OkVsbGlwc2UocmVjdC5jZW50ZXIoKSwgMC41ICogcmVjdC53aWR0aCgpLCAwLjUgKiBy
ZWN0LmhlaWdodCgpKTsKIAogICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwog
CkBAIC03NTgsNyArNzU5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0
dGVybgogICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNOyAvLyBGSVhNRTogVGhpcyBp
c24ndCByZWFsbHkgbmVlZGVkIG9uIFdpbmRvd3MKIAogICAgIGNvbnN0IGZsb2F0IHBhdHRlcm5B
bHBoYSA9IDE7Ci0gICAgbV9kYXRhLT5tX3BhdHRlcm5TdHJva2VCcnVzaCA9IGFkb3B0Q09NKG1f
c3RhdGUuc3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnRleHQsIHBhdHRl
cm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOworICAgIG1fZGF0YS0+bV9wYXR0ZXJuU3Ryb2tlQnJ1
c2ggPSBhZG9wdENPTShtX3N0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVy
bigqdGhpcywgcGF0dGVybkFscGhhLCB1c2VyVG9CYXNlQ1RNKSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKCkKQEAgLTc3MCw3ICs3NzEsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVybigpCiAgICAgQWZmaW5lVHJhbnNmb3JtIHVz
ZXJUb0Jhc2VDVE07IC8vIEZJWE1FOiBUaGlzIGlzbid0IHJlYWxseSBuZWVkZWQgb24gV2luZG93
cwogCiAgICAgY29uc3QgZmxvYXQgcGF0dGVybkFscGhhID0gMTsKLSAgICBtX2RhdGEtPm1fcGF0
dGVybkZpbGxCcnVzaCA9IGFkb3B0Q09NKG1fc3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRm
b3JtUGF0dGVybihjb250ZXh0LCBwYXR0ZXJuQWxwaGEsIHVzZXJUb0Jhc2VDVE0pKTsKKyAgICBt
X2RhdGEtPm1fcGF0dGVybkZpbGxCcnVzaCA9IGFkb3B0Q09NKG1fc3RhdGUuZmlsbFBhdHRlcm4t
PmNyZWF0ZVBsYXRmb3JtUGF0dGVybigqdGhpcywgcGF0dGVybkFscGhhLCB1c2VyVG9CYXNlQ1RN
KSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRo
KQpAQCAtMTA1MCw3ICsxMDUxLDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBGbG8KIAogICAgIGRyYXdXaXRob3V0U2hhZG93KHJlY3QsIFt0aGlzLCByZWN0LCBjb2xv
cl0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewogICAgICAgICBjb25zdCBEMkQx
X1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsUmVjdGFu
Z2xlKCZkMmRSZWN0LCBtX2RhdGEtPmJydXNoV2l0aENvbG9yKGNvbG9yV2l0aEdsb2JhbEFscGhh
KGNvbG9yKSkuZ2V0KCkpOworICAgICAgICBGbG9hdFJlY3QgcmVuZGVyVGFyZ2V0U2l6ZShGbG9h
dFBvaW50KCksIHJlbmRlclRhcmdldC0+R2V0U2l6ZSgpKTsKKyAgICAgICAgRmxvYXRSZWN0IHZp
c2libGVSZWN0KHJlY3QpOworCisgICAgICAgIGlmICghdmlzaWJsZVJlY3QuaW50ZXJzZWN0cyhy
ZW5kZXJUYXJnZXRTaXplKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICByZW5kZXJU
YXJnZXQtPlNldFRhZ3MoMSwgX19MSU5FX18pOworICAgICAgICB2aXNpYmxlUmVjdC5pbnRlcnNl
Y3QocmVuZGVyVGFyZ2V0U2l6ZSk7CisgICAgICAgIHJlbmRlclRhcmdldC0+RmlsbFJlY3Rhbmds
ZSh2aXNpYmxlUmVjdCwgbV9kYXRhLT5icnVzaFdpdGhDb2xvcihjb2xvcldpdGhHbG9iYWxBbHBo
YShjb2xvcikpLmdldCgpKTsKICAgICB9KTsKIH0KIApAQCAtMTMyOSwyNCArMTMzOCw1OCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLQotICAgIGNv
bnRleHQtPlNldFRhZ3MoMSwgX19MSU5FX18pOwotCiAgICAgZHJhd1dpdGhvdXRTaGFkb3cocmVj
dCwgW3RoaXMsIHJlY3RdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAg
ICAgRmxvYXRTaXplIHJlbmRlclRhcmdldFNpemUgPSByZW5kZXJUYXJnZXQtPkdldFNpemUoKTsK
LSAgICAgICAgaWYgKHJlY3Quc2l6ZSgpID09IHJlbmRlclRhcmdldFNpemUpCisgICAgICAgIEZs
b2F0UmVjdCByZW5kZXJUYXJnZXRTaXplKEZsb2F0UG9pbnQoKSwgcmVuZGVyVGFyZ2V0LT5HZXRT
aXplKCkpOworICAgICAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QocmVjdCk7CisKKyAgICAgICAg
aWYgKHZpc2libGVSZWN0LmNvbnRhaW5zKHJlbmRlclRhcmdldFNpemUpKSB7CisgICAgICAgICAg
ICByZW5kZXJUYXJnZXQtPlNldFRhZ3MoMSwgX19MSU5FX18pOwogICAgICAgICAgICAgcmVuZGVy
VGFyZ2V0LT5DbGVhcigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZW5kZXJUYXJnZXQt
PkZpbGxSZWN0YW5nbGUocmVjdCwgbV9kYXRhLT5icnVzaFdpdGhDb2xvcihjb2xvcldpdGhHbG9i
YWxBbHBoYShmaWxsQ29sb3IoKSkpLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICghdmlzaWJsZVJlY3QuaW50ZXJzZWN0cyhyZW5kZXJUYXJnZXRT
aXplKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICByZW5kZXJUYXJnZXQtPlNldFRh
Z3MoMSwgX19MSU5FX18pOworICAgICAgICB2aXNpYmxlUmVjdC5pbnRlcnNlY3QocmVuZGVyVGFy
Z2V0U2l6ZSk7CisgICAgICAgIHJlbmRlclRhcmdldC0+RmlsbFJlY3RhbmdsZSh2aXNpYmxlUmVj
dCwgbV9kYXRhLT5icnVzaFdpdGhDb2xvcihjb2xvcldpdGhHbG9iYWxBbHBoYShmaWxsQ29sb3Io
KSkpLmdldCgpKTsKICAgICB9KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiB7Ci0gICAgKHZvaWQp
cmVjdDsKLSAgICAodm9pZClsaW5lV2lkdGg7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaXNSZWNv
cmRpbmcoKSkgeworICAgICAgICBtX2Rpc3BsYXlMaXN0UmVjb3JkZXItPnN0cm9rZVJlY3QocmVj
dCwgbGluZVdpZHRoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3N0YXRl
LnN0cm9rZUdyYWRpZW50KSB7CisgICAgICAgIGF1dG8gZHJhd0Z1bmN0aW9uID0gW3RoaXMsIHJl
Y3QsIGxpbmVXaWR0aF0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgeworICAgICAg
ICAgICAgcmVuZGVyVGFyZ2V0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKKyAgICAgICAgICAgIGNv
bnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OworICAgICAgICAgICAgcmVuZGVyVGFyZ2V0
LT5EcmF3UmVjdGFuZ2xlKCZkMmRSZWN0LCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5jcmVhdGVQ
bGF0Zm9ybUdyYWRpZW50SWZOZWNlc3NhcnkocmVuZGVyVGFyZ2V0KSwgbGluZVdpZHRoLCBtX2Rh
dGEtPnN0cm9rZVN0eWxlKCkpOworICAgICAgICB9OworCisgICAgICAgIGlmIChoYXNTaGFkb3co
KSkKKyAgICAgICAgICAgIGRyYXdXaXRoU2hhZG93KHJlY3QsIGRyYXdGdW5jdGlvbik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGRyYXdXaXRob3V0U2hhZG93KHJlY3QsIGRyYXdGdW5jdGlv
bik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9zdGF0ZS5zdHJva2VQYXR0
ZXJuKQorICAgICAgICBhcHBseVN0cm9rZVBhdHRlcm4oKTsKKworICAgIGRyYXdXaXRob3V0U2hh
ZG93KHJlY3QsIFt0aGlzLCByZWN0LCBsaW5lV2lkdGhdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5k
ZXJUYXJnZXQpIHsKKyAgICAgICAgcmVuZGVyVGFyZ2V0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsK
KyAgICAgICAgY29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7CisgICAgICAgIGF1dG8g
YnJ1c2ggPSBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPyBwYXR0ZXJuU3Ryb2tlQnJ1c2goKSA6IHNv
bGlkU3Ryb2tlQnJ1c2goKTsKKyAgICAgICAgcmVuZGVyVGFyZ2V0LT5EcmF3UmVjdGFuZ2xlKCZk
MmRSZWN0LCBicnVzaCwgbGluZVdpZHRoLCBtX2RhdGEtPnN0cm9rZVN0eWxlKCkpOworICAgIH0p
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKQEAg
LTE4MTMsNyArMTg1Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxp
cHMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gZDJkRWxsaXBzZSA9IEQyRDE6
OkVsbGlwc2UoRDJEMTo6UG9pbnQyRihlbGxpcHNlLngoKSwgZWxsaXBzZS55KCkpLCBlbGxpcHNl
LndpZHRoKCksIGVsbGlwc2UuaGVpZ2h0KCkpOworICAgIGF1dG8gZDJkRWxsaXBzZSA9IEQyRDE6
OkVsbGlwc2UoZWxsaXBzZS5jZW50ZXIoKSwgMC41ICogZWxsaXBzZS53aWR0aCgpLCAwLjUgKiBl
bGxpcHNlLmhlaWdodCgpKTsKIAogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5TZXRUYWdzKDEsIF9f
TElORV9fKTsKIApAQCAtMTgzNSw3ICsxODc4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBs
YXRmb3JtU3Ryb2tlRWxsaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBkMmRF
bGxpcHNlID0gRDJEMTo6RWxsaXBzZShEMkQxOjpQb2ludDJGKGVsbGlwc2UueCgpLCBlbGxpcHNl
LnkoKSksIGVsbGlwc2Uud2lkdGgoKSwgZWxsaXBzZS5oZWlnaHQoKSk7CisgICAgYXV0byBkMmRF
bGxpcHNlID0gRDJEMTo6RWxsaXBzZShlbGxpcHNlLmNlbnRlcigpLCAwLjUgKiBlbGxpcHNlLndp
ZHRoKCksIDAuNSAqIGVsbGlwc2UuaGVpZ2h0KCkpOwogCiAgICAgcGxhdGZvcm1Db250ZXh0KCkt
PlNldFRhZ3MoMSwgX19MSU5FX18pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMDcy
NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3Qy
RC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDkgKzkyLDIwIEBAIHZvaWQgQml0bWFwSW1hZ2U6
OmRyYXdGcmFtZU1hdGNoaW5nU291cmMKICAgICBkcmF3KGN0eHQsIGRzdFJlY3QsIEZsb2F0UmVj
dCgwLjBmLCAwLjBmLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgY29t
cG9zaXRlT3AsIEJsZW5kTW9kZU5vcm1hbCwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKCkp
OwogfQogCi12b2lkIEJpdG1hcEltYWdlOjpzZXRSZW5kZXJUYXJnZXQoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KQordm9pZCBCaXRtYXBJbWFnZTo6c2V0UGxhdGZvcm1SZW5kZXJUYXJnZXQoY29u
c3QgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQpCiB7Ci0gICAgbV9zb3VyY2Uuc2V0
UmVuZGVyVGFyZ2V0KGNvbnRleHQpOworICAgIEltYWdlOjpzZXRQbGF0Zm9ybVJlbmRlclRhcmdl
dChncmFwaGljc0NvbnRleHQpOworICAgIG1fc291cmNlLnNldFJlbmRlclRhcmdldChncmFwaGlj
c0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpOworfQorCit2b2lkIEltYWdlOjpzZXRQbGF0Zm9y
bVJlbmRlclRhcmdldChjb25zdCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCkKK3sK
KyAgICBtX3JlbmRlclRhcmdldCA9IGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsK
K30KKworSUQyRDFSZW5kZXJUYXJnZXQqIEltYWdlOjpyZW5kZXJUYXJnZXQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3JlbmRlclRhcmdldC5nZXQoKTsKIH0KIAogdm9pZCBJbWFnZTo6ZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0JiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0
dGVybkRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vUGF0dGVybkRpcmVjdDJELmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdHRlcm5EaXJlY3QyRC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDEyICszNyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
SUQyRDFCaXRtYXBCcnVzaCogUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKElEMkQxUmVu
ZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQsIGZsb2F0IGFscGhhLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9uKSBjb25zdAorSUQyRDFCaXRtYXBCcnVzaCogUGF0
dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgZmxvYXQgYWxwaGEsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbnNmb3Jt
YXRpb24pIGNvbnN0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVuZGVyVGFyZ2V0KTsKLQotICAg
IEZsb2F0UmVjdCB0aWxlUmVjdCA9IHRpbGVJbWFnZSgpLT5yZWN0KCk7Ci0KICAgICBBZmZpbmVU
cmFuc2Zvcm0gcGF0dGVyblRyYW5zZm9ybSA9IHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9uICogbV9w
YXR0ZXJuU3BhY2VUcmFuc2Zvcm1hdGlvbjsKICAgICBhdXRvIGJpdG1hcEJydXNoUHJvcGVydGll
cyA9IEQyRDE6OkJpdG1hcEJydXNoUHJvcGVydGllcygpOwogICAgIGJpdG1hcEJydXNoUHJvcGVy
dGllcy5leHRlbmRNb2RlWCA9IG1fcmVwZWF0WCA/IEQyRDFfRVhURU5EX01PREVfV1JBUCA6IEQy
RDFfRVhURU5EX01PREVfQ0xBTVA7CkBAIC01Miw5ICs0OCwxNSBAQCBJRDJEMUJpdG1hcEJydXNo
KiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9yCiAgICAgYnJ1c2hQcm9wZXJ0aWVzLnRyYW5zZm9ybSA9
IHBhdHRlcm5UcmFuc2Zvcm07CiAgICAgYnJ1c2hQcm9wZXJ0aWVzLm9wYWNpdHkgPSBhbHBoYTsK
IAorICAgIGF1dG8gcGF0dGVybkltYWdlID0gdGlsZUltYWdlKCk7CisgICAgcGF0dGVybkltYWdl
LT5zZXRQbGF0Zm9ybVJlbmRlclRhcmdldChjb250ZXh0KTsKKworICAgIGF1dG8gcGxhdGZvcm1D
b250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChw
bGF0Zm9ybUNvbnRleHQpOworCiAgICAgSUQyRDFCaXRtYXBCcnVzaCogcGF0dGVybkJydXNoID0g
bnVsbHB0cjsKLSAgICBIUkVTVUxUIGhyID0gcmVuZGVyVGFyZ2V0LT5DcmVhdGVCaXRtYXBCcnVz
aCh0aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKS5nZXQoKSwgJmJpdG1hcEJydXNoUHJvcGVydGll
cywgJmJydXNoUHJvcGVydGllcywgJnBhdHRlcm5CcnVzaCk7Ci0gICAgQVNTRVJUKGhyKTsKKyAg
ICBIUkVTVUxUIGhyID0gcGxhdGZvcm1Db250ZXh0LT5DcmVhdGVCaXRtYXBCcnVzaChwYXR0ZXJu
SW1hZ2UtPm5hdGl2ZUltYWdlKCkuZ2V0KCksICZiaXRtYXBCcnVzaFByb3BlcnRpZXMsICZicnVz
aFByb3BlcnRpZXMsICZwYXR0ZXJuQnJ1c2gpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsK
ICAgICByZXR1cm4gcGF0dGVybkJydXNoOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAJKHJldmlzaW9uIDIwNzI3NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDEwIEBACiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKKyNpZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSA8
ZDJkMS5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGlubGluZSB2
b2lkIGVuZE1hdHJpeFJvdyhWZWN0b3I8ZmxvYXQ+JiBwYXJhbWV0ZXJzKQpAQCAtMzIwLDggKzMy
NCwxMyBAQCB2b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyOjphbGxvY2F0ZUJhY2tpCiAgICAgLy8g
YnVmZmVyIGlmIHdlIGhhdmUgbm90IHlldCBkb25lIHNvLgogICAgIGlmICghbV9ncmFwaGljc0J1
ZmZlckF0dGFjaGVkKSB7CiAgICAgICAgIEludFNpemUgbG9naWNhbFNpemUobV9zb3VyY2VEcmF3
aW5nUmVnaW9uLndpZHRoKCksIG1fc291cmNlRHJhd2luZ1JlZ2lvbi5oZWlnaHQoKSk7Ci0gICAg
ICAgIGlmICghc291cmNlSW1hZ2UoKSB8fCBzb3VyY2VJbWFnZSgpLT5sb2dpY2FsU2l6ZSgpICE9
IGxvZ2ljYWxTaXplKQorICAgICAgICBpZiAoIXNvdXJjZUltYWdlKCkgfHwgc291cmNlSW1hZ2Uo
KS0+bG9naWNhbFNpemUoKSAhPSBsb2dpY2FsU2l6ZSkgeworI2lmIFVTRShESVJFQ1QyRCkKKyAg
ICAgICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUs
IHJlbmRlcmluZ01vZGUoKSwgbV9wbGF0Zm9ybVJlbmRlclRhcmdldC5nZXQoKSwgZmlsdGVyU2Nh
bGUoKSkpOworI2Vsc2UKICAgICAgICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpj
cmVhdGUobG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUoKSwgZmlsdGVyU2NhbGUoKSkpOworI2Vu
ZGlmCisgICAgICAgIH0KICAgICAgICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0gdHJ1ZTsK
ICAgICB9CiB9CkBAIC0zOTEsMTEgKzQwMCwyNyBAQCBHcmFwaGljc0NvbnRleHQqIEZpbHRlckVm
ZmVjdFJlbmRlcmVySGVsCiAgICAgcmV0dXJuIGZpbHRlci0+aW5wdXRDb250ZXh0KCk7CiB9CiAK
KyNpZiBVU0UoRElSRUNUMkQpCit2b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOjpzZXRQ
bGF0Zm9ybVJlbmRlclRhcmdldChJRDJEMVJlbmRlclRhcmdldCogdGFyZ2V0KQoreworICAgIG1f
cGxhdGZvcm1SZW5kZXJUYXJnZXQgPSB0YXJnZXQ7Cit9CisKK3ZvaWQgRmlsdGVyRWZmZWN0UmVu
ZGVyZXI6OnNldFBsYXRmb3JtUmVuZGVyVGFyZ2V0KElEMkQxUmVuZGVyVGFyZ2V0KiB0YXJnZXQp
Cit7CisgICAgbV9wbGF0Zm9ybVJlbmRlclRhcmdldCA9IHRhcmdldDsKK30KKworI2VuZGlmCisK
IGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXI6OmJlZ2luRmlsdGVyRWZmZWN0KCkKIHsK
ICAgICBBU1NFUlQobV9yZW5kZXJMYXllcik7CiAgICAgCiAgICAgRmlsdGVyRWZmZWN0UmVuZGVy
ZXIqIGZpbHRlciA9IG1fcmVuZGVyTGF5ZXItPmZpbHRlclJlbmRlcmVyKCk7CisjaWYgVVNFKERJ
UkVDVDJEKQorICAgIGZpbHRlci0+c2V0UGxhdGZvcm1SZW5kZXJUYXJnZXQobV9wbGF0Zm9ybVJl
bmRlclRhcmdldC5nZXQoKSk7CisjZW5kaWYKICAgICBmaWx0ZXItPmFsbG9jYXRlQmFja2luZ1N0
b3JlSWZOZWVkZWQoKTsKICAgICAvLyBQYWludCBpbnRvIHRoZSBjb250ZXh0IHRoYXQgcmVwcmVz
ZW50cyB0aGUgU291cmNlR3JhcGhpYyBvZiB0aGUgZmlsdGVyLgogICAgIEdyYXBoaWNzQ29udGV4
dCogc291cmNlR3JhcGhpY3NDb250ZXh0ID0gZmlsdGVyLT5pbnB1dENvbnRleHQoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oCShy
ZXZpc2lvbiAyMDcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0
UmVuZGVyZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsMTEgQEAKICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAorI2lmIFVTRShESVJF
Q1QyRCkKK2ludGVyZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKKyNpbmNsdWRlICJDT01QdHIuaCIK
KyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50OwpAQCAtNzMs
MTIgKzc4LDE5IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IExheW91dFJlY3QmIHJlcGFpbnRSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50UmVjdDsgfQogCisjaWYgVVNFKERJUkVDVDJEKQor
ICAgIHZvaWQgc2V0UGxhdGZvcm1SZW5kZXJUYXJnZXQoSUQyRDFSZW5kZXJUYXJnZXQqKTsKKyNl
bmRpZgorCiBwcml2YXRlOgogICAgIFJlbmRlckxheWVyKiBtX3JlbmRlckxheWVyIHsgbnVsbHB0
ciB9OyAvLyBGSVhNRTogdGhpcyBpcyBtYWlubHkgdXNlZCB0byBnZXQgdGhlIEZpbHRlckVmZmVj
dFJlbmRlcmVyLiBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlciBzaG91bGQgYmUgd2VhbmVkIG9m
ZiBpdC4KICAgICBMYXlvdXRQb2ludCBtX3BhaW50T2Zmc2V0OwogICAgIExheW91dFJlY3QgbV9y
ZXBhaW50UmVjdDsKICAgICBib29sIG1faGF2ZUZpbHRlckVmZmVjdCB7IGZhbHNlIH07CiAgICAg
Ym9vbCBtX3N0YXJ0ZWRGaWx0ZXJFZmZlY3QgeyBmYWxzZSB9OworI2lmIFVTRShESVJFQ1QyRCkK
KyAgICBDT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IG1fcGxhdGZvcm1SZW5kZXJUYXJnZXQ7Cisj
ZW5kaWYKIH07CiAKIGNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVyIGZpbmFsIDogcHVibGljIEZp
bHRlciB7CkBAIC0xMTYsNiArMTI4LDEwIEBAIHB1YmxpYzoKICAgICBib29sIGhhc0ZpbHRlclRo
YXRNb3Zlc1BpeGVscygpIGNvbnN0IHsgcmV0dXJuIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxz
OyB9CiAgICAgTGF5b3V0UmVjdCBjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNv
bnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVj
dCk7CiAKKyNpZiBVU0UoRElSRUNUMkQpCisgICAgdm9pZCBzZXRQbGF0Zm9ybVJlbmRlclRhcmdl
dChJRDJEMVJlbmRlclRhcmdldCopOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRN
YXhFZmZlY3RSZWN0cyhjb25zdCBGbG9hdFJlY3QmIGVmZmVjdFJlY3QpCiAgICAgewpAQCAtMTQz
LDYgKzE1OSwxMCBAQCBwcml2YXRlOgogICAgIAogICAgIEludFJlY3RFeHRlbnQgbV9vdXRzZXRz
OwogCisjaWYgVVNFKERJUkVDVDJEKQorICAgIENPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gbV9w
bGF0Zm9ybVJlbmRlclRhcmdldDsKKyNlbmRpZgorCiAgICAgYm9vbCBtX2dyYXBoaWNzQnVmZmVy
QXR0YWNoZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMg
eyBmYWxzZSB9OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE4Myw2ICs0MTgzLDkgQEAgc3RkOjp1bmlx
dWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVySGVscAogICAgIEZpbHRlckluZm8qIGZpbHRlcklu
Zm8gPSBGaWx0ZXJJbmZvOjpnZXRJZkV4aXN0cygqdGhpcyk7CiAgICAgYm9vbCBoYXNQYWludGVk
RmlsdGVyID0gZmlsdGVySW5mbyAmJiBmaWx0ZXJJbmZvLT5yZW5kZXJlcigpICYmIHBhaW50c1dp
dGhGaWx0ZXJzKCk7CiAgICAgYXV0byBmaWx0ZXJQYWludGVyID0gc3RkOjptYWtlX3VuaXF1ZTxG
aWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcj4oaGFzUGFpbnRlZEZpbHRlcik7CisjaWYgVVNFKERJ
UkVDVDJEKQorICAgIGZpbHRlclBhaW50ZXItPnNldFBsYXRmb3JtUmVuZGVyVGFyZ2V0KGNvbnRl
eHQucGxhdGZvcm1Db250ZXh0KCkpOworI2VuZGlmCiAKICAgICBMYXlvdXRSZWN0IGZpbHRlclJl
cGFpbnRSZWN0ID0gZmlsdGVySW5mby0+ZGlydHlTb3VyY2VSZWN0KCk7CiAgICAgZmlsdGVyUmVw
YWludFJlY3QubW92ZShvZmZzZXRGcm9tUm9vdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9TVkdJbWFnZS5jcHAJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDEx
IEBACiAjaW5jbHVkZSA8cnVudGltZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9K
U0xvY2suaD4KIAorI2lmIFVTRShESVJFQ1QyRCkKKyNpbmNsdWRlICJDT01QdHIuaCIKKyNpbmNs
dWRlIDxkMmQxLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTVkdJbWFnZTo6
U1ZHSW1hZ2UoSW1hZ2VPYnNlcnZlciYgb2JzZXJ2ZXIsIGNvbnN0IFVSTCYgdXJsKQpAQCAtMjA0
LDYgKzIwOSwzOSBAQCBOYXRpdmVJbWFnZVB0ciBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDCiB9
CiAjZW5kaWYKIAorI2lmIFVTRShESVJFQ1QyRCkKK05hdGl2ZUltYWdlUHRyIFNWR0ltYWdlOjpu
YXRpdmVJbWFnZSgpCit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgYXV0byByZW5kZXJUYXJnZXQgPSB0aGlzLT5yZW5kZXJUYXJnZXQoKTsKKyAgICBB
U1NFUlQocmVuZGVyVGFyZ2V0KTsKKyAgICBpZiAoIXJlbmRlclRhcmdldCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICAvLyBEcmF3IHRoZSBTVkcgaW50byBhIGJpdG1hcC4KKyAgICBD
T01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IG5hdGl2ZUltYWdlVGFyZ2V0OworICAgIEhS
RVNVTFQgaHIgPSByZW5kZXJUYXJnZXQtPkNyZWF0ZUNvbXBhdGlibGVSZW5kZXJUYXJnZXQoSW50
U2l6ZShyZWN0KCkuc2l6ZSgpKSwgJm5hdGl2ZUltYWdlVGFyZ2V0KTsKKyAgICBBU1NFUlQoU1VD
Q0VFREVEKGhyKSk7CisKKyAgICBuYXRpdmVJbWFnZVRhcmdldC0+QmVnaW5EcmF3KCk7CisgICAg
R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChuYXRpdmVJbWFnZVRhcmdldC5nZXQoKSk7Cisg
ICAgbG9jYWxDb250ZXh0LnNldERpZEJlZ2luRHJhdyh0cnVlKTsKKworICAgIGRyYXcobG9jYWxD
b250ZXh0LCByZWN0KCksIHJlY3QoKSwgQ29tcG9zaXRlU291cmNlT3ZlciwgQmxlbmRNb2RlTm9y
bWFsLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oKSk7CisKKyAgICBociA9IG5hdGl2ZUlt
YWdlVGFyZ2V0LT5GbHVzaCgpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIENP
TVB0cjxJRDJEMUJpdG1hcD4gbmF0aXZlSW1hZ2U7CisgICAgaHIgPSBuYXRpdmVJbWFnZVRhcmdl
dC0+R2V0Qml0bWFwKCZuYXRpdmVJbWFnZSk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwor
CisgICAgcmV0dXJuIG5hdGl2ZUltYWdlOworfQorI2VuZGlmCisKIHZvaWQgU1ZHSW1hZ2U6OmRy
YXdQYXR0ZXJuRm9yQ29udGFpbmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxv
YXRTaXplJiBjb250YWluZXJTaXplLCBmbG9hdCB6b29tLCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsCiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBDb21wb3NpdGVPcGVy
YXRvciBjb21wb3NpdGVPcCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBCbGVuZE1vZGUgYmxl
bmRNb2RlKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJKHJl
dmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw5IEBAIHB1YmxpYzoKICNpZiBVU0UoQ0FJUk8p
CiAgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSBmaW5hbDsK
ICNlbmRpZgorI2lmIFVTRShESVJFQ1QyRCkKKyAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFn
ZSgpIGZpbmFsOworI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFNWR0ltYWdl
Q2hyb21lQ2xpZW50Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291493</attachid>
            <date>2016-10-13 10:49:45 -0700</date>
            <delta_ts>2016-10-13 17:31:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163349-20161013104621.patch</filename>
            <type>text/plain</type>
            <size>30973</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDE2LTEwLTEyICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBJ
bXBsZW1lbnQgYmFzaWMgU1ZHIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MzM0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCBpbXBsZW1lbnRhdGlvbnMgZm9yIGEgbnVtYmVyIG9mIGRy
YXdpbmcgcHJpbWl0aXZlcyB1c2VkIGluIHRoZSBTVkcKKyAgICAgICAgdGVzdCBjYXNlcy4gQ29y
cmVjdCBzb21lIGRpZmZlcmVuY2VzIGJldHdlZW4gQ0cgYW5kIERpcmVjdDJEIGZvciBkcmF3aW5n
CisgICAgICAgIGRpZmZlcmVudCBwcmltaXRpdmVzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
VGVzdGVkIGJ5IGV4aXN0aW5nICdzdmcnIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRy
YXcpOiBSZXZpc2UgZm9yIG5ldyAnc2V0UmVuZGVyVGFyZ2V0JyB0eXBlLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdUaWxlZCk6IE1ha2Ug
c3VyZSB0aGUgaW1hZ2UgaGFzIGFjY2VzcyB0byB0aGUgcmVuZGVyCisgICAgICAgIHRhcmdldCBz
byB3ZSBjYW4gdXNlIGRldmljZSBtZW1vcnkuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6IEFkZCBjcmVhdGUgZnVuY3Rpb24g
dGhhdCB0YWtlcyBhbiBJRDJEMVJlbmRlclRhcmdldAorICAgICAgICBhcmd1bWVudC4KKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlOjpzZXRQbGF0Zm9ybVJlbmRlclRhcmdldCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlKTog
TW92ZWQgZnJvbSBoZWFkZXIuIEFkZGVkIERpcmVjdDJEIHZlcnNpb24uCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcDogQWRkIG1pc3NpbmcgaW5jbHVkZSBu
ZWVkZWQgdG8gYnVpbGQKKyAgICAgICAgdW5kZXIgRGlyZWN0MkQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2FjaGUuY3Bw
OiBBZGQgbWlzc2luZyBpbmNsdWRlcyBuZWVkZWQgZm9yIEQyRCBidWlsZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpzZXRSZW5kZXJUYXJnZXQpOiBDaGFuZ2UgdG8gdXNlIElEMkQx
UmVuZGVyVGFyZ2V0IGRpcmVjdGx5LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKTogRWxsaXBzZXMg
YXJlIGRlZmluZWQgaW4gRDJEIGFzIGEgY2VudGVyLCBhbgorICAgICAgICBYLXJhZGl1cywgYW5k
IGEgWS1yYWRpdXMuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU6OmVuZERyYXcpOiBMb2cgZXJyb3Igc3RhdGUgaW5zdGVhZCBvZiBjcmFzaGluZworICAg
ICAgICBlYWNoIHRpbWUuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5
U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5
RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVj
dCk6IEFkZCBzb21lIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KTogVXNlICdDbGVhcicgZnVuY3Rpb24gaWYgcG9zc2li
bGUuIERvbid0IGNsZWFyCisgICAgICAgIGFueXRoaW5nIGlmIHRoZSBjbGVhciByZWN0IGlzIG91
dHNpZGUgdGhlIGRyYXdpbmcgYXJlYS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlUmVjdCk6IFByb3ZpZGUgaW1wbGVtZW50YXRpb24gKG5lZWRlZCBieSBTVkcpLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKTog
RWxsaXBzZXMgYXJlIGRlZmluZWQgaW4gRDJEIGFzCisgICAgICAgIGEgY2VudGVyLCBhbiBYLXJh
ZGl1cywgYW5kIGEgWS1yYWRpdXMuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZURpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpzZXRQbGF0Zm9ybVJlbmRlclRhcmdldCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2U6OnNldFBsYXRmb3JtUmVuZGVyVGFyZ2V0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZTo6cmVuZGVyVGFyZ2V0KTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1BhdHRlcm5EaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpjcmVh
dGVQbGF0Zm9ybVBhdHRlcm4pOgorICAgICAgICAqIHJlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5k
ZXJlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6YWxsb2Nh
dGVCYWNraW5nU3RvcmVJZk5lZWRlZCk6IFBhc3MgcmVuZGVyIHRhcmdldAorICAgICAgICB0byBJ
bWFnZUJ1ZmZlciBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJl
bmRlcmVySGVscGVyOjpzZXRQbGF0Zm9ybVJlbmRlclRhcmdldCk6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXI6OnNldFBsYXRmb3JtUmVuZGVyVGFyZ2V0KTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcjo6YmVn
aW5GaWx0ZXJFZmZlY3QpOiBQYXNzIHN0b3JlZCByZW5kZXIgdGFyZ2V0CisgICAgICAgIHRvIGFj
dHVhbCBGaWx0ZXJFZmZlY3RSZW5kZXJlci4KKyAgICAgICAgKiByZW5kZXJpbmcvRmlsdGVyRWZm
ZWN0UmVuZGVyZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldHVwRmlsdGVycyk6IFBhc3MgcmVuZGVyIHRh
cmdldCB0byBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcgorICAgICAgICBzbyBpdCBjYW4gcGFz
cyBpdCB0byB0aGUgRmlsdGVyRWZmZWN0UmVuZGVyZXIuCisgICAgICAgICogc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZSk6
CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmg6CisKIDIwMTYtMTAtMTIgIFphbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5kZXJSdWJ5UnVuIHNob3Vs
ZCBub3QgbWFyayBjaGlsZCByZW5kZXJlcnMgZGlydHkgYXQgdGhlIGVuZCBvZiBsYXlvdXQuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
Y3BwCShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw5ICsxNDEsNyBAQCB2b2lk
IEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgCiAgICAgaWYgKGRlc3RSZWN0Lmlz
RW1wdHkoKSB8fCBzcmNSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgVVNF
KERJUkVDVDJEKQotICAgIHNldFJlbmRlclRhcmdldChjb250ZXh0KTsKLSNlbmRpZgorICAgIHNl
dFBsYXRmb3JtUmVuZGVyVGFyZ2V0KGNvbnRleHQpOwogCiAjaWYgUExBVEZPUk0oSU9TKQogICAg
IHN0YXJ0QW5pbWF0aW9uKERvTm90Q2F0Y2hVcCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWlu
aWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDEzIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQtMjAwNiwgMjAxMywgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CkBAIC0xMjMsOSArMTIzLDYgQEAgcHVibGljOgogICAgIE5hdGl2ZUltYWdlUHRy
IG5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICBWZWN0b3I8
TmF0aXZlSW1hZ2VQdHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIG92ZXJyaWRlOwogI2VuZGlmCi0j
aWYgVVNFKERJUkVDVDJEKQotICAgIHZvaWQgc2V0UmVuZGVyVGFyZ2V0KEdyYXBoaWNzQ29udGV4
dCYpOwotI2VuZGlmCiAKIHByb3RlY3RlZDoKICAgICBXRUJDT1JFX0VYUE9SVCBCaXRtYXBJbWFn
ZShOYXRpdmVJbWFnZVB0ciYmLCBJbWFnZU9ic2VydmVyKiA9IG51bGxwdHIpOwpAQCAtMTg5LDYg
KzE4NiwxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNCaXRtYXBJbWFnZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHRydWU7IH0KICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0IG92
ZXJyaWRlOwogCisjaWYgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgc2V0UGxhdGZvcm1SZW5kZXJU
YXJnZXQoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikgb3ZlcnJpZGU7CisjZW5kaWYKKwogICAgIG11
dGFibGUgSW1hZ2VTb3VyY2UgbV9zb3VyY2U7CiAKICAgICBzaXplX3QgbV9jdXJyZW50RnJhbWUg
eyAwIH07IC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBmcmFtZSBvZiBhbmltYXRpb24uCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCShyZXZpc2lv
biAyMDcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDggQEAgdm9pZCBJbWFnZTo6ZmlsbFdpdGhTb2xp
ZENvbG9yKEdyYXBoaWNzQwogCiB2b2lkIEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0
JiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFBvaW50JiBzcmNQ
b2ludCwgY29uc3QgRmxvYXRTaXplJiBzY2FsZWRUaWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKKyAg
ICBzZXRQbGF0Zm9ybVJlbmRlclRhcmdldChjdHh0KTsKKwogICAgIENvbG9yIGNvbG9yID0gc2lu
Z2xlUGl4ZWxTb2xpZENvbG9yKCk7CiAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewogICAgICAg
ICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZGVzdFJlY3QsIGNvbG9yLCBvcCk7CkBAIC0yMDYs
NiArMjA4LDggQEAgdm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCYgYwogdm9p
ZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCYgY3R4dCwgY29uc3QgRmxvYXRSZWN0
JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsCiAgICAgY29uc3QgRmxvYXRTaXpl
JiB0aWxlU2NhbGVGYWN0b3IsIFRpbGVSdWxlIGhSdWxlLCBUaWxlUnVsZSB2UnVsZSwgQ29tcG9z
aXRlT3BlcmF0b3Igb3ApCiB7ICAgIAorICAgIHNldFBsYXRmb3JtUmVuZGVyVGFyZ2V0KGN0eHQu
cGxhdGZvcm1Db250ZXh0KCkpOworCiAgICAgQ29sb3IgY29sb3IgPSBzaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKTsKICAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7CiAgICAgICAgIGZpbGxXaXRoU29s
aWRDb2xvcihjdHh0LCBkc3RSZWN0LCBjb2xvciwgb3ApOwpAQCAtMzQ3LDQgKzM1MSwxMSBAQCBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjCiAgICAgcmV0dXJuIHRzOwog
fQogCisjaWYgIVVTRShESVJFQ1QyRCkKK3ZvaWQgSW1hZ2U6OnNldFBsYXRmb3JtUmVuZGVyVGFy
Z2V0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpCit7CisgICAgLy8gTm8tb3Agb24gdGhpcyBwbGF0
Zm9ybQorfQorI2VuZGlmCisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2UuaAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksMTEgQEAgdHlwZWRl
ZiBzdHJ1Y3QgSEJJVE1BUF9fICpIQklUTUFQOwogdHlwZWRlZiBzdHJ1Y3QgX0dka1BpeGJ1ZiBH
ZGtQaXhidWY7CiAjZW5kaWYKIAorI2lmIFVTRShESVJFQ1QyRCkKK2ludGVyZmFjZSBJRDJEMVJl
bmRlclRhcmdldDsKKyNpbmNsdWRlICJDT01QdHIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKQEAgLTE1OSw2ICsxNjQsOCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIGdldEhCSVRNQVBPZlNpemUoSEJJVE1BUCwgY29uc3QgSW50
U2l6ZSopIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgdm9pZCBzZXRQ
bGF0Zm9ybVJlbmRlclRhcmdldChjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKwogI2lmIFBMQVRG
T1JNKEdUSykKICAgICB2aXJ0dWFsIEdka1BpeGJ1ZiogZ2V0R2RrUGl4YnVmKCkgeyByZXR1cm4g
bnVsbHB0cjsgfQogI2VuZGlmCkBAIC0xOTUsOSArMjAyLDE2IEBAIHByb3RlY3RlZDoKICAgICAv
LyBTdXBwb3J0aW5nIHRpbGVkIGRyYXdpbmcKICAgICB2aXJ0dWFsIENvbG9yIHNpbmdsZVBpeGVs
U29saWRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIENvbG9yKCk7IH0KIAorI2lmIFVTRShESVJFQ1Qy
RCkKKyAgICBJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KCkgY29uc3Q7CisjZW5kaWYK
KwogcHJpdmF0ZToKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2VuY29kZWRJbWFnZURhdGE7
CiAgICAgSW1hZ2VPYnNlcnZlciogbV9pbWFnZU9ic2VydmVyOworI2lmIFVTRShESVJFQ1QyRCkK
KyAgICBDT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IG1fcmVuZGVyVGFyZ2V0OworI2VuZGlmCiB9
OwogCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBJbWFnZSYpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNywyNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZExlbmd0aCA9IDQw
OTY7CiBzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZEFyZWEgPSBNYXhDbGFtcGVkTGVuZ3Ro
ICogTWF4Q2xhbXBlZExlbmd0aDsKIAorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkK
K3sKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlLCByZW5kZXJpbmdNb2RlLCBzdWNjZXNzKSk7CisgICAgaWYgKCFzdWNjZXNzKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gYnVmZmVyOworfQorCisjaWYgVVNFKERJ
UkVDVDJEKQorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBJRDJE
MVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCByZW5kZXJUYXJnZXQsIHN1
Y2Nlc3MpKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IHJldHVybiBidWZmZXI7Cit9CisjZW5kaWYKKwogYm9vbCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRz
Q2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewogICAgIGlmIChzaXplLmlzRW1wdHko
KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuaAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsMTQgKzc0LDEwIEBAIGNsYXNz
IEltYWdlQnVmZmVyIHsKICAgICBmcmllbmQgY2xhc3MgSU9TdXJmYWNlOwogcHVibGljOgogICAg
IC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KLSAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSA9IDEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IENvbG9yU3BhY2VTUkdCKQotICAgIHsK
LSAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUs
IGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIHN1Y2Nlc3MpKTsKLSAgICAgICAgaWYgKCFzdWNj
ZXNzKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBidWZmZXI7
Ci0gICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZVNSR0IpOworI2lmIFVTRShE
SVJFQ1QyRCkKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgSUQyRDFSZW5k
ZXJUYXJnZXQqLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JT
cGFjZVNSR0IpOworI2VuZGlmCiAKICAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBh
dGlibGUgd2l0aCB0aGUgY29udGV4dCwgd2l0aCBzdWl0YWJsZSByZXNvbHV0aW9uIGZvciBkcmF3
aW5nIGludG8gdGhlIGJ1ZmZlciBhbmQgdGhlbiBpbnRvIHRoaXMgY29udGV4dC4KICAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNv
bnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2FjaGUuY3BwCShy
ZXZpc2lvbiAyMDcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUZyYW1lQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw5IEBACiAKICNpZiBV
U0UoQ0cpCiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyQ0cuaCIKKyNlbGlmIFVTRShESVJFQ1QyRCkK
KyNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgorI2luY2x1ZGUgPFdpbkNvZGVjLmg+
CiAjZWxzZQogI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCShyZXZpc2lv
biAyMDcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJj
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKICNpZiBVU0UoQ0cpCiAjaW5j
bHVkZSAiSW1hZ2VEZWNvZGVyQ0cuaCIKICNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgogI2lu
Y2x1ZGUgPFdpbkNvZGVjLmg+CiAjZWxzZQpAQCAtMTE1LDE2ICsxMTQsNiBAQCBib29sIEltYWdl
U291cmNlOjplbnN1cmVEZWNvZGVyQXZhaWxhYmxlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLSNp
ZiBVU0UoRElSRUNUMkQpCi12b2lkIEltYWdlU291cmNlOjpzZXRSZW5kZXJUYXJnZXQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmICghaXNEZWNvZGVyQXZhaWxhYmxlKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fZGVjb2Rlci0+c2V0UmVuZGVyVGFyZ2V0KGNvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCkpOwotfQotI2VuZGlmCi0KIHZvaWQgSW1hZ2VTb3VyY2U6OnNldERh
dGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKIHsKICAgICBpZiAo
IWRhdGEgfHwgIWVuc3VyZURlY29kZXJBdmFpbGFibGUoZGF0YSkpCkBAIC0yMDksNiArMTk4LDE0
IEBAIE5hdGl2ZUltYWdlUHRyIEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUkKICAgICByZXR1cm4g
aXNEZWNvZGVyQXZhaWxhYmxlKCkgPyBtX2RlY29kZXItPmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4
KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKSA6IG51bGxwdHI7CiB9CiAKKyNpZiBVU0UoRElSRUNU
MkQpCit2b2lkIEltYWdlU291cmNlOjpzZXRSZW5kZXJUYXJnZXQoSUQyRDFSZW5kZXJUYXJnZXQq
IHJlbmRlclRhcmdldCkKK3sKKyAgICBpZiAobV9kZWNvZGVyKQorICAgICAgICBtX2RlY29kZXIt
PnNldFJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpOworfQorI2VuZGlmCisKIHZvaWQgSW1hZ2VT
b3VyY2U6OmR1bXAoVGV4dFN0cmVhbSYgdHMpCiB7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJ0eXBl
IiwgZmlsZW5hbWVFeHRlbnNpb24oKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDYgKzM2LDEwIEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CiAKKyNpZiBVU0UoRElSRUNUMkQpCitpbnRlcmZhY2UgSUQyRDFSZW5k
ZXJUYXJnZXQ7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHcmFwaGlj
c0NvbnRleHQ7CkBAIC01OSwxMCArNjMsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBlbnN1cmVEZWNv
ZGVyQXZhaWxhYmxlKFNoYXJlZEJ1ZmZlciopOwogICAgIGJvb2wgaXNEZWNvZGVyQXZhaWxhYmxl
KCkgY29uc3QgeyByZXR1cm4gbV9kZWNvZGVyLmdldCgpOyB9CiAKLSNpZiBVU0UoRElSRUNUMkQp
Ci0gICAgdm9pZCBzZXRSZW5kZXJUYXJnZXQoR3JhcGhpY3NDb250ZXh0Jik7Ci0jZW5kaWYKLQog
ICAgIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVk
KTsKICAgICBib29sIGRhdGFDaGFuZ2VkKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRh
UmVjZWl2ZWQpOwogCkBAIC0xMDAsNiArMTAwLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFs
bG93U3Vic2FtcGxpbmcoYm9vbCBhbGxvd1N1YnNhbXBsaW5nKSB7IG1fYWxsb3dTdWJzYW1wbGlu
ZyA9IGFsbG93U3Vic2FtcGxpbmc7IH0KICAgICBOYXRpdmVJbWFnZVB0ciBjcmVhdGVGcmFtZUlt
YWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpE
ZWZhdWx0KTsKIAorI2lmIFVTRShESVJFQ1QyRCkKKyAgICB2b2lkIHNldFJlbmRlclRhcmdldChJ
RDJEMVJlbmRlclRhcmdldCopOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhckZy
YW1lQnVmZmVyQ2FjaGUoc2l6ZV90KTsKICAgICB2b2lkIGNsZWFyKGJvb2wgZGVzdHJveUFsbCwg
c2l6ZV90IGNvdW50LCBTaGFyZWRCdWZmZXIqIGRhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw3ICszOSw2IEBAIHR5cGVkZWYgc3RydWN0IENHUGF0dGVybiogQ0dQYXR0ZXJuUmVmOwogdHlw
ZWRlZiBDR1BhdHRlcm5SZWYgUGxhdGZvcm1QYXR0ZXJuUHRyOwogI2VsaWYgVVNFKERJUkVDVDJE
KQogaW50ZXJmYWNlIElEMkQxQml0bWFwQnJ1c2g7Ci1pbnRlcmZhY2UgSUQyRDFSZW5kZXJUYXJn
ZXQ7CiB0eXBlZGVmIElEMkQxQml0bWFwQnJ1c2gqIFBsYXRmb3JtUGF0dGVyblB0cjsKICNlbGlm
IFVTRShDQUlSTykKICNpbmNsdWRlIDxjYWlyby5oPgpAQCAtNTEsNiArNTAsNyBAQCB0eXBlZGVm
IHZvaWQqIFBsYXRmb3JtUGF0dGVyblB0cjsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
QWZmaW5lVHJhbnNmb3JtOworY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgSW1hZ2U7CiAK
IGNsYXNzIFBhdHRlcm4gZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxQYXR0ZXJuPiB7CkBAIC02
Niw3ICs2Niw3IEBAIHB1YmxpYzoKICNpZiAhVVNFKERJUkVDVDJEKQogICAgIFBsYXRmb3JtUGF0
dGVyblB0ciBjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB1c2Vy
U3BhY2VUcmFuc2Zvcm1hdGlvbikgY29uc3Q7CiAjZWxzZQotICAgIFBsYXRmb3JtUGF0dGVyblB0
ciBjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oSUQyRDFSZW5kZXJUYXJnZXQqLCBmbG9hdCBhbHBoYSwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB1c2VyU3BhY2VUcmFuc2Zvcm1hdGlvbikgY29uc3Q7Cisg
ICAgUGxhdGZvcm1QYXR0ZXJuUHRyIGNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBHcmFwaGlj
c0NvbnRleHQmLCBmbG9hdCBhbHBoYSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB1c2VyU3BhY2VU
cmFuc2Zvcm1hdGlvbikgY29uc3Q7CiAjZW5kaWYKICAgICB2b2lkIHNldFBhdHRlcm5TcGFjZVRy
YW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5TcGFjZVRyYW5zZm9ybWF0aW9u
KTsKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdldFBhdHRlcm5TcGFjZVRyYW5zZm9ybSgp
IHsgcmV0dXJuIG1fcGF0dGVyblNwYWNlVHJhbnNmb3JtYXRpb247IH07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzOCw3ICszMzgsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTo6ZW5kCiAgICAgRDJEMV9UQUcgZmlyc3QsIHNlY29uZDsKICAgICBIUkVTVUxU
IGhyID0gbV9yZW5kZXJUYXJnZXQtPkVuZERyYXcoJmZpcnN0LCAmc2Vjb25kKTsKIAotICAgIFJF
TEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAg
ICAgICAgV1RGTG9nQWx3YXlzKCJDcmFzaGVkIGluIEVuZERyYXc6IGhyPSVsZCwgZmlyc3Q9JWxk
LCBzZWNvbmQ9JWxkIiwgaHIsIGZpcnN0LCBzZWNvbmQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZTo6cmVzdG9yZSgpCkBAIC03MzYsNyArNzM3LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IAogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgYXV0byBlbGxpcHNlID0gRDJEMTo6RWxsaXBzZShEMkQxOjpQb2ludDJGKHJlY3Qu
eCgpLCByZWN0LnkoKSksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgYXV0byBl
bGxpcHNlID0gRDJEMTo6RWxsaXBzZShyZWN0LmNlbnRlcigpLCAwLjUgKiByZWN0LndpZHRoKCks
IDAuNSAqIHJlY3QuaGVpZ2h0KCkpOwogCiAgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250
ZXh0KCk7CiAKQEAgLTc1OCw3ICs3NTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlT
dHJva2VQYXR0ZXJuCiAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE07IC8vIEZJWE1F
OiBUaGlzIGlzbid0IHJlYWxseSBuZWVkZWQgb24gV2luZG93cwogCiAgICAgY29uc3QgZmxvYXQg
cGF0dGVybkFscGhhID0gMTsKLSAgICBtX2RhdGEtPm1fcGF0dGVyblN0cm9rZUJydXNoID0gYWRv
cHRDT00obV9zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29udGV4
dCwgcGF0dGVybkFscGhhLCB1c2VyVG9CYXNlQ1RNKSk7CisgICAgbV9kYXRhLT5tX3BhdHRlcm5T
dHJva2VCcnVzaCA9IGFkb3B0Q09NKG1fc3RhdGUuc3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZv
cm1QYXR0ZXJuKCp0aGlzLCBwYXR0ZXJuQWxwaGEsIHVzZXJUb0Jhc2VDVE0pKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oKQpAQCAtNzcwLDcgKzc3MSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKCkKICAgICBBZmZpbmVUcmFu
c2Zvcm0gdXNlclRvQmFzZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRlZCBv
biBXaW5kb3dzCiAKICAgICBjb25zdCBmbG9hdCBwYXR0ZXJuQWxwaGEgPSAxOwotICAgIG1fZGF0
YS0+bV9wYXR0ZXJuRmlsbEJydXNoID0gYWRvcHRDT00obV9zdGF0ZS5maWxsUGF0dGVybi0+Y3Jl
YXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnRleHQsIHBhdHRlcm5BbHBoYSwgdXNlclRvQmFzZUNUTSkp
OworICAgIG1fZGF0YS0+bV9wYXR0ZXJuRmlsbEJydXNoID0gYWRvcHRDT00obV9zdGF0ZS5maWxs
UGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKCp0aGlzLCBwYXR0ZXJuQWxwaGEsIHVzZXJU
b0Jhc2VDVE0pKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBh
dGgmIHBhdGgpCkBAIC0xMDUwLDcgKzEwNTEsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KGNvbnN0IEZsbwogCiAgICAgZHJhd1dpdGhvdXRTaGFkb3cocmVjdCwgW3RoaXMsIHJl
Y3QsIGNvbG9yXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CiAgICAgICAgIGNv
bnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwotICAgICAgICByZW5kZXJUYXJnZXQtPkZp
bGxSZWN0YW5nbGUoJmQyZFJlY3QsIG1fZGF0YS0+YnJ1c2hXaXRoQ29sb3IoY29sb3JXaXRoR2xv
YmFsQWxwaGEoY29sb3IpKS5nZXQoKSk7CisgICAgICAgIEZsb2F0UmVjdCByZW5kZXJUYXJnZXRT
aXplKEZsb2F0UG9pbnQoKSwgcmVuZGVyVGFyZ2V0LT5HZXRTaXplKCkpOworICAgICAgICBGbG9h
dFJlY3QgdmlzaWJsZVJlY3QocmVjdCk7CisKKyAgICAgICAgaWYgKCF2aXNpYmxlUmVjdC5pbnRl
cnNlY3RzKHJlbmRlclRhcmdldFNpemUpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IHJlbmRlclRhcmdldC0+U2V0VGFncygxLCBfX0xJTkVfXyk7CisgICAgICAgIHZpc2libGVSZWN0
LmludGVyc2VjdChyZW5kZXJUYXJnZXRTaXplKTsKKyAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxs
UmVjdGFuZ2xlKHZpc2libGVSZWN0LCBtX2RhdGEtPmJydXNoV2l0aENvbG9yKGNvbG9yV2l0aEds
b2JhbEFscGhhKGNvbG9yKSkuZ2V0KCkpOwogICAgIH0pOwogfQogCkBAIC0xMzI5LDI0ICsxMzM4
LDU4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmwKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwot
Ci0gICAgY29udGV4dC0+U2V0VGFncygxLCBfX0xJTkVfXyk7Ci0KICAgICBkcmF3V2l0aG91dFNo
YWRvdyhyZWN0LCBbdGhpcywgcmVjdF0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkg
ewotICAgICAgICBGbG9hdFNpemUgcmVuZGVyVGFyZ2V0U2l6ZSA9IHJlbmRlclRhcmdldC0+R2V0
U2l6ZSgpOwotICAgICAgICBpZiAocmVjdC5zaXplKCkgPT0gcmVuZGVyVGFyZ2V0U2l6ZSkKKyAg
ICAgICAgRmxvYXRSZWN0IHJlbmRlclRhcmdldFNpemUoRmxvYXRQb2ludCgpLCByZW5kZXJUYXJn
ZXQtPkdldFNpemUoKSk7CisgICAgICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdChyZWN0KTsKKwor
ICAgICAgICBpZiAodmlzaWJsZVJlY3QuY29udGFpbnMocmVuZGVyVGFyZ2V0U2l6ZSkpIHsKKyAg
ICAgICAgICAgIHJlbmRlclRhcmdldC0+U2V0VGFncygxLCBfX0xJTkVfXyk7CiAgICAgICAgICAg
ICByZW5kZXJUYXJnZXQtPkNsZWFyKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlbmRl
clRhcmdldC0+RmlsbFJlY3RhbmdsZShyZWN0LCBtX2RhdGEtPmJydXNoV2l0aENvbG9yKGNvbG9y
V2l0aEdsb2JhbEFscGhhKGZpbGxDb2xvcigpKSkuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF2aXNpYmxlUmVjdC5pbnRlcnNlY3RzKHJlbmRl
clRhcmdldFNpemUpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHJlbmRlclRhcmdl
dC0+U2V0VGFncygxLCBfX0xJTkVfXyk7CisgICAgICAgIHZpc2libGVSZWN0LmludGVyc2VjdChy
ZW5kZXJUYXJnZXRTaXplKTsKKyAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsUmVjdGFuZ2xlKHZp
c2libGVSZWN0LCBtX2RhdGEtPmJydXNoV2l0aENvbG9yKGNvbG9yV2l0aEdsb2JhbEFscGhhKGZp
bGxDb2xvcigpKSkuZ2V0KCkpOwogICAgIH0pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKIHsKLSAg
ICAodm9pZClyZWN0OwotICAgICh2b2lkKWxpbmVXaWR0aDsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1fZGlzcGxheUxpc3RSZWNvcmRlci0+c3Ryb2tl
UmVjdChyZWN0LCBsaW5lV2lkdGgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsKKyAgICAgICAgYXV0byBkcmF3RnVuY3Rpb24gPSBb
dGhpcywgcmVjdCwgbGluZVdpZHRoXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7
CisgICAgICAgICAgICByZW5kZXJUYXJnZXQtPlNldFRhZ3MoMSwgX19MSU5FX18pOworICAgICAg
ICAgICAgY29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7CisgICAgICAgICAgICByZW5k
ZXJUYXJnZXQtPkRyYXdSZWN0YW5nbGUoJmQyZFJlY3QsIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQt
PmNyZWF0ZVBsYXRmb3JtR3JhZGllbnRJZk5lY2Vzc2FyeShyZW5kZXJUYXJnZXQpLCBsaW5lV2lk
dGgsIG1fZGF0YS0+c3Ryb2tlU3R5bGUoKSk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGhh
c1NoYWRvdygpKQorICAgICAgICAgICAgZHJhd1dpdGhTaGFkb3cocmVjdCwgZHJhd0Z1bmN0aW9u
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZHJhd1dpdGhvdXRTaGFkb3cocmVjdCwgZHJh
d0Z1bmN0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3N0YXRlLnN0
cm9rZVBhdHRlcm4pCisgICAgICAgIGFwcGx5U3Ryb2tlUGF0dGVybigpOworCisgICAgZHJhd1dp
dGhvdXRTaGFkb3cocmVjdCwgW3RoaXMsIHJlY3QsIGxpbmVXaWR0aF0oSUQyRDFSZW5kZXJUYXJn
ZXQqIHJlbmRlclRhcmdldCkgeworICAgICAgICByZW5kZXJUYXJnZXQtPlNldFRhZ3MoMSwgX19M
SU5FX18pOworICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKKyAgICAg
ICAgYXV0byBicnVzaCA9IG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA/IHBhdHRlcm5TdHJva2VCcnVz
aCgpIDogc29saWRTdHJva2VCcnVzaCgpOworICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdSZWN0
YW5nbGUoJmQyZFJlY3QsIGJydXNoLCBsaW5lV2lkdGgsIG1fZGF0YS0+c3Ryb2tlU3R5bGUoKSk7
CisgICAgfSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAg
Y2FwKQpAQCAtMTgxMyw3ICsxODU2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3Jt
RmlsbEVsbGlwcwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBkMmRFbGxpcHNl
ID0gRDJEMTo6RWxsaXBzZShEMkQxOjpQb2ludDJGKGVsbGlwc2UueCgpLCBlbGxpcHNlLnkoKSks
IGVsbGlwc2Uud2lkdGgoKSwgZWxsaXBzZS5oZWlnaHQoKSk7CisgICAgYXV0byBkMmRFbGxpcHNl
ID0gRDJEMTo6RWxsaXBzZShlbGxpcHNlLmNlbnRlcigpLCAwLjUgKiBlbGxpcHNlLndpZHRoKCks
IDAuNSAqIGVsbGlwc2UuaGVpZ2h0KCkpOwogCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPlNldFRh
Z3MoMSwgX19MSU5FX18pOwogCkBAIC0xODM1LDcgKzE4NzgsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6cGxhdGZvcm1TdHJva2VFbGxpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBh
dXRvIGQyZEVsbGlwc2UgPSBEMkQxOjpFbGxpcHNlKEQyRDE6OlBvaW50MkYoZWxsaXBzZS54KCks
IGVsbGlwc2UueSgpKSwgZWxsaXBzZS53aWR0aCgpLCBlbGxpcHNlLmhlaWdodCgpKTsKKyAgICBh
dXRvIGQyZEVsbGlwc2UgPSBEMkQxOjpFbGxpcHNlKGVsbGlwc2UuY2VudGVyKCksIDAuNSAqIGVs
bGlwc2Uud2lkdGgoKSwgMC41ICogZWxsaXBzZS5oZWlnaHQoKSk7CiAKICAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+U2V0VGFncygxLCBfX0xJTkVfXyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAJKHJldmlz
aW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFn
ZURpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsOSArOTIsMjAgQEAgdm9pZCBCaXRt
YXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyYwogICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwg
RmxvYXRSZWN0KDAuMGYsIDAuMGYsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0
KCkpLCBjb21wb3NpdGVPcCwgQmxlbmRNb2RlTm9ybWFsLCBJbWFnZU9yaWVudGF0aW9uRGVzY3Jp
cHRpb24oKSk7CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6OnNldFJlbmRlclRhcmdldChHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpCit2b2lkIEJpdG1hcEltYWdlOjpzZXRQbGF0Zm9ybVJlbmRlclRh
cmdldChjb25zdCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCkKIHsKLSAgICBtX3Nv
dXJjZS5zZXRSZW5kZXJUYXJnZXQoY29udGV4dCk7CisgICAgSW1hZ2U6OnNldFBsYXRmb3JtUmVu
ZGVyVGFyZ2V0KGdyYXBoaWNzQ29udGV4dCk7CisgICAgbV9zb3VyY2Uuc2V0UmVuZGVyVGFyZ2V0
KGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSk7Cit9CisKK3ZvaWQgSW1hZ2U6OnNl
dFBsYXRmb3JtUmVuZGVyVGFyZ2V0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250
ZXh0KQoreworICAgIG1fcmVuZGVyVGFyZ2V0ID0gZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29u
dGV4dCgpOworfQorCitJRDJEMVJlbmRlclRhcmdldCogSW1hZ2U6OnJlbmRlclRhcmdldCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyVGFyZ2V0LmdldCgpOwogfQogCiB2b2lkIEltYWdl
OjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9QYXR0ZXJuRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMDcyNzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0dGVybkRpcmVjdDJE
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTIgKzM3LDggQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1JRDJEMUJpdG1hcEJydXNoKiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4o
SUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCwgZmxvYXQgYWxwaGEsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbnNmb3JtYXRpb24pIGNvbnN0CitJRDJEMUJpdG1hcEJy
dXNoKiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBmbG9hdCBhbHBoYSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB1c2VyU3BhY2VU
cmFuc2Zvcm1hdGlvbikgY29uc3QKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChyZW5kZXJUYXJnZXQp
OwotCi0gICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gdGlsZUltYWdlKCktPnJlY3QoKTsKLQogICAg
IEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtID0gdXNlclNwYWNlVHJhbnNmb3JtYXRp
b24gKiBtX3BhdHRlcm5TcGFjZVRyYW5zZm9ybWF0aW9uOwogICAgIGF1dG8gYml0bWFwQnJ1c2hQ
cm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwQnJ1c2hQcm9wZXJ0aWVzKCk7CiAgICAgYml0bWFwQnJ1
c2hQcm9wZXJ0aWVzLmV4dGVuZE1vZGVYID0gbV9yZXBlYXRYID8gRDJEMV9FWFRFTkRfTU9ERV9X
UkFQIDogRDJEMV9FWFRFTkRfTU9ERV9DTEFNUDsKQEAgLTUyLDkgKzQ4LDE1IEBAIElEMkQxQml0
bWFwQnJ1c2gqIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3IKICAgICBicnVzaFByb3BlcnRpZXMudHJh
bnNmb3JtID0gcGF0dGVyblRyYW5zZm9ybTsKICAgICBicnVzaFByb3BlcnRpZXMub3BhY2l0eSA9
IGFscGhhOwogCisgICAgYXV0byBwYXR0ZXJuSW1hZ2UgPSB0aWxlSW1hZ2UoKTsKKyAgICBwYXR0
ZXJuSW1hZ2UtPnNldFBsYXRmb3JtUmVuZGVyVGFyZ2V0KGNvbnRleHQpOworCisgICAgYXV0byBw
bGF0Zm9ybUNvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworICAgIFJFTEVBU0Vf
QVNTRVJUKHBsYXRmb3JtQ29udGV4dCk7CisKICAgICBJRDJEMUJpdG1hcEJydXNoKiBwYXR0ZXJu
QnJ1c2ggPSBudWxscHRyOwotICAgIEhSRVNVTFQgaHIgPSByZW5kZXJUYXJnZXQtPkNyZWF0ZUJp
dG1hcEJydXNoKHRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpLCAmYml0bWFwQnJ1c2hQ
cm9wZXJ0aWVzLCAmYnJ1c2hQcm9wZXJ0aWVzLCAmcGF0dGVybkJydXNoKTsKLSAgICBBU1NFUlQo
aHIpOworICAgIEhSRVNVTFQgaHIgPSBwbGF0Zm9ybUNvbnRleHQtPkNyZWF0ZUJpdG1hcEJydXNo
KHBhdHRlcm5JbWFnZS0+bmF0aXZlSW1hZ2UoKS5nZXQoKSwgJmJpdG1hcEJydXNoUHJvcGVydGll
cywgJmJydXNoUHJvcGVydGllcywgJnBhdHRlcm5CcnVzaCk7CisgICAgQVNTRVJUKFNVQ0NFRURF
RChocikpOwogICAgIHJldHVybiBwYXR0ZXJuQnJ1c2g7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAkocmV2aXNpb24g
MjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsMTAgQEAKICNpbmNsdWRlIDxhbGdvcml0
aG0+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAorI2lmIFVTRShESVJFQ1QyRCkKKyNp
bmNsdWRlIDxkMmQxLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMg
aW5saW5lIHZvaWQgZW5kTWF0cml4Um93KFZlY3RvcjxmbG9hdD4mIHBhcmFtZXRlcnMpCkBAIC0z
MjAsOCArMzI0LDEzIEBAIHZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXI6OmFsbG9jYXRlQmFja2kK
ICAgICAvLyBidWZmZXIgaWYgd2UgaGF2ZSBub3QgeWV0IGRvbmUgc28uCiAgICAgaWYgKCFtX2dy
YXBoaWNzQnVmZmVyQXR0YWNoZWQpIHsKICAgICAgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZShtX3Nv
dXJjZURyYXdpbmdSZWdpb24ud2lkdGgoKSwgbV9zb3VyY2VEcmF3aW5nUmVnaW9uLmhlaWdodCgp
KTsKLSAgICAgICAgaWYgKCFzb3VyY2VJbWFnZSgpIHx8IHNvdXJjZUltYWdlKCktPmxvZ2ljYWxT
aXplKCkgIT0gbG9naWNhbFNpemUpCisgICAgICAgIGlmICghc291cmNlSW1hZ2UoKSB8fCBzb3Vy
Y2VJbWFnZSgpLT5sb2dpY2FsU2l6ZSgpICE9IGxvZ2ljYWxTaXplKSB7CisjaWYgVVNFKERJUkVD
VDJEKQorICAgICAgICAgICAgc2V0U291cmNlSW1hZ2UoSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dp
Y2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSgpLCBtX3BsYXRmb3JtUmVuZGVyVGFyZ2V0LmdldCgpLCBm
aWx0ZXJTY2FsZSgpKSk7CisjZWxzZQogICAgICAgICAgICAgc2V0U291cmNlSW1hZ2UoSW1hZ2VC
dWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSgpLCBmaWx0ZXJTY2FsZSgp
KSk7CisjZW5kaWYKKyAgICAgICAgfQogICAgICAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQg
PSB0cnVlOwogICAgIH0KIH0KQEAgLTM5MSwxMSArNDAwLDI3IEBAIEdyYXBoaWNzQ29udGV4dCog
RmlsdGVyRWZmZWN0UmVuZGVyZXJIZWwKICAgICByZXR1cm4gZmlsdGVyLT5pbnB1dENvbnRleHQo
KTsKIH0KIAorI2lmIFVTRShESVJFQ1QyRCkKK3ZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxw
ZXI6OnNldFBsYXRmb3JtUmVuZGVyVGFyZ2V0KElEMkQxUmVuZGVyVGFyZ2V0KiB0YXJnZXQpCit7
CisgICAgbV9wbGF0Zm9ybVJlbmRlclRhcmdldCA9IHRhcmdldDsKK30KKwordm9pZCBGaWx0ZXJF
ZmZlY3RSZW5kZXJlcjo6c2V0UGxhdGZvcm1SZW5kZXJUYXJnZXQoSUQyRDFSZW5kZXJUYXJnZXQq
IHRhcmdldCkKK3sKKyAgICBtX3BsYXRmb3JtUmVuZGVyVGFyZ2V0ID0gdGFyZ2V0OworfQorCisj
ZW5kaWYKKwogYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcjo6YmVnaW5GaWx0ZXJFZmZl
Y3QoKQogewogICAgIEFTU0VSVChtX3JlbmRlckxheWVyKTsKICAgICAKICAgICBGaWx0ZXJFZmZl
Y3RSZW5kZXJlciogZmlsdGVyID0gbV9yZW5kZXJMYXllci0+ZmlsdGVyUmVuZGVyZXIoKTsKKyNp
ZiBVU0UoRElSRUNUMkQpCisgICAgZmlsdGVyLT5zZXRQbGF0Zm9ybVJlbmRlclRhcmdldChtX3Bs
YXRmb3JtUmVuZGVyVGFyZ2V0LmdldCgpKTsKKyNlbmRpZgogICAgIGZpbHRlci0+YWxsb2NhdGVC
YWNraW5nU3RvcmVJZk5lZWRlZCgpOwogICAgIC8vIFBhaW50IGludG8gdGhlIGNvbnRleHQgdGhh
dCByZXByZXNlbnRzIHRoZSBTb3VyY2VHcmFwaGljIG9mIHRoZSBmaWx0ZXIuCiAgICAgR3JhcGhp
Y3NDb250ZXh0KiBzb3VyY2VHcmFwaGljc0NvbnRleHQgPSBmaWx0ZXItPmlucHV0Q29udGV4dCgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRl
cmVyLmgJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCwxMSBAQAogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCisjaWYg
VVNFKERJUkVDVDJEKQoraW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0OworI2luY2x1ZGUgIkNP
TVB0ci5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9jdW1lbnQ7
CkBAIC03MywxMiArNzgsMTkgQEAgcHVibGljOgogCiAgICAgY29uc3QgTGF5b3V0UmVjdCYgcmVw
YWludFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRSZWN0OyB9CiAKKyNpZiBVU0UoRElS
RUNUMkQpCisgICAgdm9pZCBzZXRQbGF0Zm9ybVJlbmRlclRhcmdldChJRDJEMVJlbmRlclRhcmdl
dCopOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgUmVuZGVyTGF5ZXIqIG1fcmVuZGVyTGF5ZXIg
eyBudWxscHRyIH07IC8vIEZJWE1FOiB0aGlzIGlzIG1haW5seSB1c2VkIHRvIGdldCB0aGUgRmls
dGVyRWZmZWN0UmVuZGVyZXIuIEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyIHNob3VsZCBiZSB3
ZWFuZWQgb2ZmIGl0LgogICAgIExheW91dFBvaW50IG1fcGFpbnRPZmZzZXQ7CiAgICAgTGF5b3V0
UmVjdCBtX3JlcGFpbnRSZWN0OwogICAgIGJvb2wgbV9oYXZlRmlsdGVyRWZmZWN0IHsgZmFsc2Ug
fTsKICAgICBib29sIG1fc3RhcnRlZEZpbHRlckVmZmVjdCB7IGZhbHNlIH07CisjaWYgVVNFKERJ
UkVDVDJEKQorICAgIENPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gbV9wbGF0Zm9ybVJlbmRlclRh
cmdldDsKKyNlbmRpZgogfTsKIAogY2xhc3MgRmlsdGVyRWZmZWN0UmVuZGVyZXIgZmluYWwgOiBw
dWJsaWMgRmlsdGVyIHsKQEAgLTExNiw2ICsxMjgsMTAgQEAgcHVibGljOgogICAgIGJvb2wgaGFz
RmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGaWx0ZXJUaGF0TW92
ZXNQaXhlbHM7IH0KICAgICBMYXlvdXRSZWN0IGNvbXB1dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0
eVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYg
ZGlydHlSZWN0KTsKIAorI2lmIFVTRShESVJFQ1QyRCkKKyAgICB2b2lkIHNldFBsYXRmb3JtUmVu
ZGVyVGFyZ2V0KElEMkQxUmVuZGVyVGFyZ2V0Kik7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICB2
b2lkIHNldE1heEVmZmVjdFJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0UmVjdCkKICAgICB7
CkBAIC0xNDMsNiArMTU5LDEwIEBAIHByaXZhdGU6CiAgICAgCiAgICAgSW50UmVjdEV4dGVudCBt
X291dHNldHM7CiAKKyNpZiBVU0UoRElSRUNUMkQpCisgICAgQ09NUHRyPElEMkQxUmVuZGVyVGFy
Z2V0PiBtX3BsYXRmb3JtUmVuZGVyVGFyZ2V0OworI2VuZGlmCisKICAgICBib29sIG1fZ3JhcGhp
Y3NCdWZmZXJBdHRhY2hlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hhc0ZpbHRlclRoYXRNb3Zl
c1BpeGVscyB7IGZhbHNlIH07CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTgzLDYgKzQxODMsOSBAQCBz
dGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwCiAgICAgRmlsdGVySW5mbyog
ZmlsdGVySW5mbyA9IEZpbHRlckluZm86OmdldElmRXhpc3RzKCp0aGlzKTsKICAgICBib29sIGhh
c1BhaW50ZWRGaWx0ZXIgPSBmaWx0ZXJJbmZvICYmIGZpbHRlckluZm8tPnJlbmRlcmVyKCkgJiYg
cGFpbnRzV2l0aEZpbHRlcnMoKTsKICAgICBhdXRvIGZpbHRlclBhaW50ZXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyPihoYXNQYWludGVkRmlsdGVyKTsKKyNp
ZiBVU0UoRElSRUNUMkQpCisgICAgZmlsdGVyUGFpbnRlci0+c2V0UGxhdGZvcm1SZW5kZXJUYXJn
ZXQoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSk7CisjZW5kaWYKIAogICAgIExheW91dFJlY3Qg
ZmlsdGVyUmVwYWludFJlY3QgPSBmaWx0ZXJJbmZvLT5kaXJ0eVNvdXJjZVJlY3QoKTsKICAgICBm
aWx0ZXJSZXBhaW50UmVjdC5tb3ZlKG9mZnNldEZyb21Sb290KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQs
NiArNTQsMTEgQEAKICNpbmNsdWRlIDxydW50aW1lL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxy
dW50aW1lL0pTTG9jay5oPgogCisjaWYgVVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIkNPTVB0ci5o
IgorI2luY2x1ZGUgPGQyZDEuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNW
R0ltYWdlOjpTVkdJbWFnZShJbWFnZU9ic2VydmVyJiBvYnNlcnZlciwgY29uc3QgVVJMJiB1cmwp
CkBAIC0yMDQsNiArMjA5LDM5IEBAIE5hdGl2ZUltYWdlUHRyIFNWR0ltYWdlOjpuYXRpdmVJbWFn
ZUZvckMKIH0KICNlbmRpZgogCisjaWYgVVNFKERJUkVDVDJEKQorTmF0aXZlSW1hZ2VQdHIgU1ZH
SW1hZ2U6Om5hdGl2ZUltYWdlKCkKK3sKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBhdXRvIHJlbmRlclRhcmdldCA9IHRoaXMtPnJlbmRlclRhcmdldCgp
OworICAgIEFTU0VSVChyZW5kZXJUYXJnZXQpOworICAgIGlmICghcmVuZGVyVGFyZ2V0KQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIERyYXcgdGhlIFNWRyBpbnRvIGEgYml0bWFw
LgorICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gbmF0aXZlSW1hZ2VUYXJnZXQ7
CisgICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlQ29tcGF0aWJsZVJlbmRlclRh
cmdldChJbnRTaXplKHJlY3QoKS5zaXplKCkpLCAmbmF0aXZlSW1hZ2VUYXJnZXQpOworICAgIEFT
U0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIG5hdGl2ZUltYWdlVGFyZ2V0LT5CZWdpbkRyYXco
KTsKKyAgICBHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KG5hdGl2ZUltYWdlVGFyZ2V0Lmdl
dCgpKTsKKyAgICBsb2NhbENvbnRleHQuc2V0RGlkQmVnaW5EcmF3KHRydWUpOworCisgICAgZHJh
dyhsb2NhbENvbnRleHQsIHJlY3QoKSwgcmVjdCgpLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBCbGVu
ZE1vZGVOb3JtYWwsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbigpKTsKKworICAgIGhyID0g
bmF0aXZlSW1hZ2VUYXJnZXQtPkZsdXNoKCk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwor
CisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBuYXRpdmVJbWFnZTsKKyAgICBociA9IG5hdGl2ZUlt
YWdlVGFyZ2V0LT5HZXRCaXRtYXAoJm5hdGl2ZUltYWdlKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVE
KGhyKSk7CisKKyAgICByZXR1cm4gbmF0aXZlSW1hZ2U7Cit9CisjZW5kaWYKKwogdm9pZCBTVkdJ
bWFnZTo6ZHJhd1BhdHRlcm5Gb3JDb250YWluZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hdFNpemUmIGNvbnRhaW5lclNpemUsIGZsb2F0IHpvb20sIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIEJsZW5k
TW9kZSBibGVuZE1vZGUpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZH
SW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1h
Z2UuaAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDkgQEAgcHVibGljOgogI2lmIFVT
RShDQUlSTykKICAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
IGZpbmFsOwogI2VuZGlmCisjaWYgVVNFKERJUkVDVDJEKQorICAgIE5hdGl2ZUltYWdlUHRyIG5h
dGl2ZUltYWdlKCkgZmluYWw7CisjZW5kaWYKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
U1ZHSW1hZ2VDaHJvbWVDbGllbnQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291561</attachid>
            <date>2016-10-13 20:29:20 -0700</date>
            <delta_ts>2016-10-14 10:16:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163349-20161013202553.patch</filename>
            <type>text/plain</type>
            <size>36472</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzMxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg0IEBACisyMDE2LTEwLTEzICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBJ
bXBsZW1lbnQgYmFzaWMgU1ZHIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MzM0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIERpcmVjdDJEIG5lZWRzIGFjY2VzcyB0byB0aGUgdGFyZ2V0IGdy
YXBoaWNzIGNvbnRleHQgd2hlbiBnZW5lcmF0aW5nIGJpdG1hcAorICAgICAgICBpbWFnZXMgc28g
dGhhdCBpdCBjYW4gcHJvcGVybHkgbWF0Y2ggcGl4ZWwgZm9ybWF0IGFuZCBvdGhlciBzZXR0aW5n
cy4KKworICAgICAgICBBZGQgaW1wbGVtZW50YXRpb25zIGZvciBhIG51bWJlciBvZiBkcmF3aW5n
IHByaW1pdGl2ZXMgdXNlZCBpbiB0aGUgU1ZHCisgICAgICAgIHRlc3QgY2FzZXMuIENvcnJlY3Qg
c29tZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIENHIGFuZCBEaXJlY3QyRCBmb3IgZHJhd2luZworICAg
ICAgICBkaWZmZXJlbnQgcHJpbWl0aXZlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRlc3Rl
ZCBieSBleGlzdGluZyAnc3ZnJyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFt
ZUltYWdlQXRJbmRleCk6IFRha2Ugb3B0aW9uYWwgdGFyZ2V0IGdyYXBoaWNzCisgICAgICAgICAg
IGNvbnRleHQuIEFsc28gcGFzcyB0aGUgZ3JhcGhpY3MgY29udGV4dCB0byB0aGUgaW1hZ2UgZGVj
b2Rlci4KKyAgICAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSk6IEFj
Y2VwdCBhbiBvcHRpb25hbCB0YXJnZXQgY29udGV4dC4KKyAgICAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6IERpdHRvLgorICAgICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOiBQYXNzIHRhcmdldCBncmFwaGljcyBjb250
ZXh0IHRvIHRoZQorICAgICAgICAgICAnZnJhbWVJbWFnZUF0SW5kZXgnIG1ldGhvZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6IE1vdmVkIGZy
b20gaGVhZGVyLiBBZGQgY3JlYXRlIGZ1bmN0aW9uIHRoYXQKKyAgICAgICAgdGFrZXMgYW4gb3B0
aW9uYWwgR3JhcGhpY3NDb250ZXh0IGFyZ3VtZW50LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFt
ZUNhY2hlLmNwcDogQWRkIG1pc3NpbmcgaW5jbHVkZSBuZWVkZWQgdG8gYnVpbGQKKyAgICAgICAg
dW5kZXIgRGlyZWN0MkQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldERlY29kZXJUYXJnZXRDb250
ZXh0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0UmVuZGVyVGFy
Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjplbmREcmF3KTogTG9nIGVy
cm9yIHN0YXRlIGluc3RlYWQgb2YgY3Jhc2hpbmcKKyAgICAgICAgZWFjaCB0aW1lLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZSk6IEVsbGlwc2VzIGFyZSBk
ZWZpbmVkIGluIEQyRCBhcyBhIGNlbnRlciwgYW4KKyAgICAgICAgWC1yYWRpdXMsIGFuZCBhIFkt
cmFkaXVzLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBh
dHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0
ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KTogVXNl
ICdDbGVhcicgZnVuY3Rpb24gaWYgcG9zc2libGUuIERvbid0IGNsZWFyCisgICAgICAgIGFueXRo
aW5nIGlmIHRoZSBjbGVhciByZWN0IGlzIG91dHNpZGUgdGhlIGRyYXdpbmcgYXJlYS4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6IFByb3ZpZGUgaW1wbGVt
ZW50YXRpb24gKG5lZWRlZCBieSBTVkcpLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKTogRWxsaXBzZXMgYXJlIGRlZmluZWQgaW4gRDJEIGFz
CisgICAgICAgIGEgY2VudGVyLCBhbiBYLXJhZGl1cywgYW5kIGEgWS1yYWRpdXMuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZSk6IERpdHRv
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KTogQWNjZXB0IG9wdGlvbmFsIEdyYXBoaWNzQ29udGV4dCBhcmd1bWVudC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcik6IERpdHRvLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kZXI6OnNldFRhcmdldENvbnRleHQpOiBSZW5hbWVkIGZyb20gJ3NldFJl
bmRlclRhcmdldCcuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmNyZWF0ZUZyYW1l
SW1hZ2VBdEluZGV4KTogVGFrZSBvcHRpb25hbCBHcmFwaGljc0NvbnRleHQgYXJndW1lbnQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNldFJlbmRlclRhcmdldCk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGlyZWN0MkQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnNldFJlbmRlclRhcmdldCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3BwOiBB
ZGQgbWlzc2luZyBpbmNsdWRlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0
ZXJuRGlyZWN0MkQuY3BwOiAKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRm
b3JtUGF0dGVybik6IFJldmlzZSBmb3IgbmV3IHNpZ25hdHVyZS4KKyAgICAgICAgKiByZW5kZXJp
bmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0UmVuZGVyZXI6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQpOiBQYXNzIEdyYXBoaWNz
Q29udGV4dAorICAgICAgICB0byBJbWFnZUJ1ZmZlciBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOjpiZWdpbkZpbHRlckVmZmVjdCk6IFBh
c3MgdGFyZ2V0IGNvbnRleHQgdG8KKyAgICAgICAgZmlsdGVyIHdoZW4gYWxsb2NhdGluZyBiYWNr
aW5nIHN0b3JlLgorICAgICAgICAqIHJlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oOiBB
ZGQgR3JhcGhpY3NDb250ZXh0IGFzIGFyZ3VtZW50IHRvIGNvbnN0cnVjdG9yLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6aGFzRmlsdGVyVGhhdElzUGFpbnRpbmcpOiBTdXBwbHkgR3JhcGhpY3NDb250ZXh0IGFyZ3Vt
ZW50IHdoZW4KKyAgICAgICAgYnVpbGRpbmcgbmV3IEZpbHRlckVmZmVjdFJlbmRlcmVyIGFuZCBo
ZWxwZXIuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0dXBGaWx0ZXJzKTogRGl0
dG8uCisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6IFJldmlzZSB0byB0YWtl
IG9wdGlvbmFsIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBhcmd1bWVudC4KKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZSk6IERpdHRvLgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9TVkdJbWFnZS5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRh
aW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUZvckNvbnRhaW5lcjo6bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUpOiBEaXR0by4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZH
SW1hZ2VGb3JDb250YWluZXIuaDoKKwogMjAxNi0xMC0xMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgogCiAgICAgICAgIFtXZWIgSURMXSBBZGQgc3VwcG9ydCBmb3IgW1NhbWVPYmpl
Y3RdIGV4dGVuZGVkIGF0dHJpYnV0ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MCwyNCArODAsMjcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBh
bGxEYQogICAgIHJldHVybiBtX3NvdXJjZS5kYXRhQ2hhbmdlZChkYXRhKCksIGFsbERhdGFSZWNl
aXZlZCk7CiB9CiAKLU5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRl
eChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkKK05hdGl2
ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJz
YW1wbGluZ0xldmVsKQogewogICAgIGlmIChmcmFtZUhhc0ludmFsaWROYXRpdmVJbWFnZUF0SW5k
ZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpKSB7CiAgICAgICAgIExPRyhJbWFnZXMsICJCaXRt
YXBJbWFnZSAlcCBmcmFtZUltYWdlQXRJbmRleCAtIHN1YnNhbXBsaW5nTGV2ZWwgd2FzICVkLCBy
ZXNhbXBsaW5nIiwgdGhpcywgc3RhdGljX2Nhc3Q8aW50PihmcmFtZVN1YnNhbXBsaW5nTGV2ZWxB
dEluZGV4KGluZGV4KSkpOwogICAgICAgICBpbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7CiAgICAg
fQogCisgICAgaWYgKHRhcmdldENvbnRleHQpCisgICAgICAgIG1fc291cmNlLnNldERlY29kZXJU
YXJnZXRDb250ZXh0KCp0YXJnZXRDb250ZXh0KTsKKwogICAgIHJldHVybiBtX3NvdXJjZS5mcmFt
ZUltYWdlQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7CiB9CiAKLU5hdGl2ZUltYWdl
UHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSgpCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFn
ZTo6bmF0aXZlSW1hZ2UoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0KQogewot
ICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0
SW5kZXgoMCwgdGFyZ2V0Q29udGV4dCk7CiB9CiAKLU5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdl
OjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFn
ZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJn
ZXRDb250ZXh0KQogewotICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFt
ZSk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lLCB0YXJnZXRD
b250ZXh0KTsKIH0KIAogI2lmIFVTRShDRykKQEAgLTE0MSwxMCArMTQ0LDYgQEAgdm9pZCBCaXRt
YXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIAogICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5
KCkgfHwgc3JjUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotI2lmIFVTRShESVJF
Q1QyRCkKLSAgICBzZXRSZW5kZXJUYXJnZXQoY29udGV4dCk7Ci0jZW5kaWYKLQogI2lmIFBMQVRG
T1JNKElPUykKICAgICBzdGFydEFuaW1hdGlvbihEb05vdENhdGNoVXApOwogI2Vsc2UKQEAgLTE2
MSw3ICsxNjAsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgCiAg
ICAgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsID0gbV9zb3VyY2Uuc3Vic2FtcGxp
bmdMZXZlbEZvclNjYWxlKHNjYWxlKTsKICAgICBMT0coSW1hZ2VzLCAiQml0bWFwSW1hZ2UgJXAg
ZHJhdyAtIHN1YnNhbXBsaW5nTGV2ZWwgJWQgYXQgc2NhbGUgJS40ZiIsIHRoaXMsIHN0YXRpY19j
YXN0PGludD4oc3Vic2FtcGxpbmdMZXZlbCksIHNjYWxlKTsKIAotICAgIGF1dG8gaW1hZ2UgPSBm
cmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFtZSwgc3Vic2FtcGxpbmdMZXZlbCk7CisgICAg
YXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lLCAmY29udGV4dCwg
c3Vic2FtcGxpbmdMZXZlbCk7CiAgICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkg
d2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCShyZXZpc2lv
biAyMDcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsMjEgKzExNywxOCBAQCBwdWJsaWM6CiAgICAgRXZh
c19PYmplY3QqIGdldEV2YXNPYmplY3QoRXZhcyopIG92ZXJyaWRlOwogI2VuZGlmCiAKLSAgICBX
RUJDT1JFX0VYUE9SVCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgpIG92ZXJyaWRlOwotICAg
IE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgb3ZlcnJpZGU7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoY29uc3QgR3JhcGhp
Y3NDb250ZXh0KiA9IG51bGxwdHIpIG92ZXJyaWRlOworICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSBv
dmVycmlkZTsKICNpZiBVU0UoQ0cpCiAgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VPZlNp
emUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogICAgIFZlY3RvcjxOYXRpdmVJbWFnZVB0cj4g
ZnJhbWVzTmF0aXZlSW1hZ2VzKCkgb3ZlcnJpZGU7CiAjZW5kaWYKLSNpZiBVU0UoRElSRUNUMkQp
Ci0gICAgdm9pZCBzZXRSZW5kZXJUYXJnZXQoR3JhcGhpY3NDb250ZXh0Jik7Ci0jZW5kaWYKIAog
cHJvdGVjdGVkOgogICAgIFdFQkNPUkVfRVhQT1JUIEJpdG1hcEltYWdlKE5hdGl2ZUltYWdlUHRy
JiYsIEltYWdlT2JzZXJ2ZXIqID0gbnVsbHB0cik7CiAgICAgV0VCQ09SRV9FWFBPUlQgQml0bWFw
SW1hZ2UoSW1hZ2VPYnNlcnZlciogPSBudWxscHRyKTsKIAotICAgIE5hdGl2ZUltYWdlUHRyIGZy
YW1lSW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNhbXBsaW5nTGV2
ZWw6OkRlZmF1bHQpOworICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1lSW1hZ2VBdEluZGV4KHNpemVf
dCwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIsIFN1YnNhbXBsaW5nTGV2ZWwgPSBT
dWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKIAogICAgIC8vIENhbGxlZCB0byBpbnZhbGlkYXRl
IGNhY2hlZCBkYXRhLiBXaGVuIHxkZXN0cm95QWxsfCBpcyB0cnVlLCB3ZSB3aXBlIG91dAogICAg
IC8vIHRoZSBlbnRpcmUgZnJhbWUgYnVmZmVyIGNhY2hlIGFuZCB0ZWxsIHRoZSBpbWFnZSBzb3Vy
Y2UgdG8gZGVzdHJveQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZS5oCShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsOSArMTM3LDkgQEAgcHVibGljOgogCiAg
ICAgZW51bSBUaWxlUnVsZSB7IFN0cmV0Y2hUaWxlLCBSb3VuZFRpbGUsIFNwYWNlVGlsZSwgUmVw
ZWF0VGlsZSB9OwogCi0gICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgpIHsg
cmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdl
T2ZTaXplKGNvbnN0IEludFNpemUmKSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgdmlydHVhbCBO
YXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIG51bGxw
dHI7IH0KKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCogPSBudWxscHRyKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBO
YXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJiwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0KiA9IG51bGxwdHIpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFs
IE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCogPSBudWxscHRyKSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVhbCBJbWFn
ZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uRm9yQ3VycmVudEZyYW1lKCkgY29uc3QgeyByZXR1cm4g
SW1hZ2VPcmllbnRhdGlvbigpOyB9CiAgICAgdmlydHVhbCBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+
IGZyYW1lc05hdGl2ZUltYWdlcygpIHsgcmV0dXJuIHsgfTsgfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCShyZXZpc2lvbiAy
MDcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDI2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IHN0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkTGVuZ3RoID0gNDA5NjsKIHN0YXRpYyBjb25z
dCBmbG9hdCBNYXhDbGFtcGVkQXJlYSA9IE1heENsYW1wZWRMZW5ndGggKiBNYXhDbGFtcGVkTGVu
Z3RoOwogCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIGJvb2wgc3Vj
Y2VzcyA9IGZhbHNlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5l
dyBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmlu
Z01vZGUsIHN1Y2Nlc3MpKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIHJldHVybiBidWZmZXI7Cit9CisKKyNpZiBVU0UoRElSRUNUMkQpCitzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCogZ3JhcGhpY3NDb250ZXh0LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBncmFwaGljc0NvbnRleHQsIHN1Y2Nlc3Mp
KTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVy
biBidWZmZXI7Cit9CisjZW5kaWYKKwogYm9vbCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBp
bmcoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewogICAgIGlmIChzaXplLmlzRW1wdHkoKSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAko
cmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsMTQgKzc0LDEwIEBAIGNsYXNzIEltYWdl
QnVmZmVyIHsKICAgICBmcmllbmQgY2xhc3MgSU9TdXJmYWNlOwogcHVibGljOgogICAgIC8vIFdp
bGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KLSAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBz
aXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9
IDEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IENvbG9yU3BhY2VTUkdCKQotICAgIHsKLSAgICAg
ICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIHJlbmRlcmluZ01vZGUsIHN1Y2Nlc3MpKTsKLSAgICAgICAgaWYgKCFzdWNjZXNzKQot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBidWZmZXI7Ci0gICAg
fQorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZVNSR0IpOworI2lmIFVTRShESVJFQ1Qy
RCkKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhpY3ND
b250ZXh0KiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENvbG9yU3Bh
Y2VTUkdCKTsKKyNlbmRpZgogCiAgICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRp
YmxlIHdpdGggdGhlIGNvbnRleHQsIHdpdGggc3VpdGFibGUgcmVzb2x1dGlvbiBmb3IgZHJhd2lu
ZyBpbnRvIHRoZSBidWZmZXIgYW5kIHRoZW4gaW50byB0aGlzIGNvbnRleHQuCiAgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKQEAgLTE4Miw3ICsxNzgsNyBA
QCBwcml2YXRlOgogI2lmIFVTRShDRykKICAgICBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENHQ29sb3JTcGFjZVJlZiwgUmVuZGVyaW5nTW9kZSwg
Ym9vbCYgc3VjY2Vzcyk7CiAjZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgSW1hZ2VCdWZmZXIoY29u
c3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJp
bmdNb2RlLCBJRDJEMVJlbmRlclRhcmdldCosIGJvb2wmIHN1Y2Nlc3MpOworICAgIEltYWdlQnVm
ZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwg
UmVuZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiwgYm9vbCYgc3VjY2Vzcyk7CiAj
ZW5kaWYKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
RnJhbWVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNiArMzEsOSBAQAogCiAjaWYgVVNFKENHKQogI2luY2x1ZGUgIkltYWdlRGVjb2Rl
ckNHLmgiCisjZWxpZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyRGlyZWN0
MkQuaCIKKyNpbmNsdWRlIDxXaW5Db2RlYy5oPgogI2Vsc2UKICNpbmNsdWRlICJJbWFnZURlY29k
ZXIuaCIKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlU291cmNlLmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUs
MTUgKzExNSwxNSBAQCBib29sIEltYWdlU291cmNlOjplbnN1cmVEZWNvZGVyQXZhaWxhYmxlCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi12b2lkIEltYWdlU291cmNl
OjpzZXRSZW5kZXJUYXJnZXQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQordm9pZCBJbWFnZVNv
dXJjZTo6c2V0RGVjb2RlclRhcmdldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KQogeworI2lmIFVTRShESVJFQ1QyRCkKICAgICBpZiAoIWlzRGVjb2RlckF2YWlsYWJsZSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RlY29kZXItPnNldFJlbmRlclRhcmdldChjb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpKTsKLX0KKyAgICBtX2RlY29kZXItPnNldFRhcmdldENvbnRl
eHQoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSk7CiAjZW5kaWYKK30KIAogdm9pZCBJbWFnZVNv
dXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQog
ewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJj
ZS5oCShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw3IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgZW5zdXJlRGVjb2RlckF2YWlsYWJsZShTaGFyZWRCdWZmZXIqKTsKICAgICBi
b29sIGlzRGVjb2RlckF2YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2Rlci5nZXQoKTsg
fQorICAgIHZvaWQgc2V0RGVjb2RlclRhcmdldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0
Jik7CiAKICNpZiBVU0UoRElSRUNUMkQpCiAgICAgdm9pZCBzZXRSZW5kZXJUYXJnZXQoR3JhcGhp
Y3NDb250ZXh0Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0
ZXJuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
dGVybi5oCShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9QYXR0ZXJuLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDYgQEAgdHlwZWRlZiBz
dHJ1Y3QgQ0dQYXR0ZXJuKiBDR1BhdHRlcm5SZWY7CiB0eXBlZGVmIENHUGF0dGVyblJlZiBQbGF0
Zm9ybVBhdHRlcm5QdHI7CiAjZWxpZiBVU0UoRElSRUNUMkQpCiBpbnRlcmZhY2UgSUQyRDFCaXRt
YXBCcnVzaDsKLWludGVyZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKIHR5cGVkZWYgSUQyRDFCaXRt
YXBCcnVzaCogUGxhdGZvcm1QYXR0ZXJuUHRyOwogI2VsaWYgVVNFKENBSVJPKQogI2luY2x1ZGUg
PGNhaXJvLmg+CkBAIC01MSw2ICs1MCw3IEBAIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1QYXR0ZXJu
UHRyOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CitjbGFz
cyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBJbWFnZTsKIAogY2xhc3MgUGF0dGVybiBmaW5hbCA6
IHB1YmxpYyBSZWZDb3VudGVkPFBhdHRlcm4+IHsKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgog
I2lmICFVU0UoRElSRUNUMkQpCiAgICAgUGxhdGZvcm1QYXR0ZXJuUHRyIGNyZWF0ZVBsYXRmb3Jt
UGF0dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9uKSBj
b25zdDsKICNlbHNlCi0gICAgUGxhdGZvcm1QYXR0ZXJuUHRyIGNyZWF0ZVBsYXRmb3JtUGF0dGVy
bihJRDJEMVJlbmRlclRhcmdldCosIGZsb2F0IGFscGhhLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9uKSBjb25zdDsKKyAgICBQbGF0Zm9ybVBhdHRlcm5QdHIg
Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYsIGZsb2F0IGFscGhh
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9uKSBjb25zdDsK
ICNlbmRpZgogICAgIHZvaWQgc2V0UGF0dGVyblNwYWNlVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblNwYWNlVHJhbnNmb3JtYXRpb24pOwogICAgIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgZ2V0UGF0dGVyblNwYWNlVHJhbnNmb3JtKCkgeyByZXR1cm4gbV9wYXR0ZXJuU3Bh
Y2VUcmFuc2Zvcm1hdGlvbjsgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNw
cAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM4LDcg
KzMzOCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjplbmQKICAgICBE
MkQxX1RBRyBmaXJzdCwgc2Vjb25kOwogICAgIEhSRVNVTFQgaHIgPSBtX3JlbmRlclRhcmdldC0+
RW5kRHJhdygmZmlyc3QsICZzZWNvbmQpOwogCi0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVE
KGhyKSk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICBXVEZMb2dBbHdheXMoIkNy
YXNoZWQgaW4gRW5kRHJhdzogaHI9JWxkLCBmaXJzdD0lbGQsIHNlY29uZD0lbGQiLCBociwgZmly
c3QsIHNlY29uZCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpy
ZXN0b3JlKCkKQEAgLTczNiw3ICs3MzcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Vs
bGlwc2UoY29uc3QgCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGVsbGlwc2Ug
PSBEMkQxOjpFbGxpcHNlKEQyRDE6OlBvaW50MkYocmVjdC54KCksIHJlY3QueSgpKSwgcmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBhdXRvIGVsbGlwc2UgPSBEMkQxOjpFbGxpcHNl
KHJlY3QuY2VudGVyKCksIDAuNSAqIHJlY3Qud2lkdGgoKSwgMC41ICogcmVjdC5oZWlnaHQoKSk7
CiAKICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIApAQCAtNzU4LDcgKzc1
OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4KICAgICBBZmZp
bmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5l
ZWRlZCBvbiBXaW5kb3dzCiAKICAgICBjb25zdCBmbG9hdCBwYXR0ZXJuQWxwaGEgPSAxOwotICAg
IG1fZGF0YS0+bV9wYXR0ZXJuU3Ryb2tlQnJ1c2ggPSBhZG9wdENPTShtX3N0YXRlLnN0cm9rZVBh
dHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb250ZXh0LCBwYXR0ZXJuQWxwaGEsIHVzZXJU
b0Jhc2VDVE0pKTsKKyAgICBtX2RhdGEtPm1fcGF0dGVyblN0cm9rZUJydXNoID0gYWRvcHRDT00o
bV9zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oKnRoaXMsIHBhdHRl
cm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBw
bHlGaWxsUGF0dGVybigpCkBAIC03NzAsNyArNzcxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmFwcGx5RmlsbFBhdHRlcm4oKQogICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNOyAv
LyBGSVhNRTogVGhpcyBpc24ndCByZWFsbHkgbmVlZGVkIG9uIFdpbmRvd3MKIAogICAgIGNvbnN0
IGZsb2F0IHBhdHRlcm5BbHBoYSA9IDE7Ci0gICAgbV9kYXRhLT5tX3BhdHRlcm5GaWxsQnJ1c2gg
PSBhZG9wdENPTShtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29u
dGV4dCwgcGF0dGVybkFscGhhLCB1c2VyVG9CYXNlQ1RNKSk7CisgICAgbV9kYXRhLT5tX3BhdHRl
cm5GaWxsQnJ1c2ggPSBhZG9wdENPTShtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9y
bVBhdHRlcm4oKnRoaXMsIHBhdHRlcm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTEzMjksMjQg
KzEzMzAsNTggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbAogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7Ci0KLSAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKLQogICAgIGRyYXdXaXRo
b3V0U2hhZG93KHJlY3QsIFt0aGlzLCByZWN0XShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFy
Z2V0KSB7Ci0gICAgICAgIEZsb2F0U2l6ZSByZW5kZXJUYXJnZXRTaXplID0gcmVuZGVyVGFyZ2V0
LT5HZXRTaXplKCk7Ci0gICAgICAgIGlmIChyZWN0LnNpemUoKSA9PSByZW5kZXJUYXJnZXRTaXpl
KQorICAgICAgICBGbG9hdFJlY3QgcmVuZGVyVGFyZ2V0U2l6ZShGbG9hdFBvaW50KCksIHJlbmRl
clRhcmdldC0+R2V0U2l6ZSgpKTsKKyAgICAgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0KHJlY3Qp
OworCisgICAgICAgIGlmICh2aXNpYmxlUmVjdC5jb250YWlucyhyZW5kZXJUYXJnZXRTaXplKSkg
eworICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKICAgICAg
ICAgICAgIHJlbmRlclRhcmdldC0+Q2xlYXIoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
cmVuZGVyVGFyZ2V0LT5GaWxsUmVjdGFuZ2xlKHJlY3QsIG1fZGF0YS0+YnJ1c2hXaXRoQ29sb3Io
Y29sb3JXaXRoR2xvYmFsQWxwaGEoZmlsbENvbG9yKCkpKS5nZXQoKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXZpc2libGVSZWN0LmludGVyc2VjdHMo
cmVuZGVyVGFyZ2V0U2l6ZSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgcmVuZGVy
VGFyZ2V0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKKyAgICAgICAgdmlzaWJsZVJlY3QuaW50ZXJz
ZWN0KHJlbmRlclRhcmdldFNpemUpOworICAgICAgICByZW5kZXJUYXJnZXQtPkZpbGxSZWN0YW5n
bGUodmlzaWJsZVJlY3QsIG1fZGF0YS0+YnJ1c2hXaXRoQ29sb3IoY29sb3JXaXRoR2xvYmFsQWxw
aGEoZmlsbENvbG9yKCkpKS5nZXQoKSk7CiAgICAgfSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQog
ewotICAgICh2b2lkKXJlY3Q7Ci0gICAgKHZvaWQpbGluZVdpZHRoOwotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5z
dHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCkgeworICAgICAgICBhdXRvIGRyYXdGdW5jdGlv
biA9IFt0aGlzLCByZWN0LCBsaW5lV2lkdGhdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJn
ZXQpIHsKKyAgICAgICAgICAgIHJlbmRlclRhcmdldC0+U2V0VGFncygxLCBfX0xJTkVfXyk7Cisg
ICAgICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKKyAgICAgICAgICAg
IHJlbmRlclRhcmdldC0+RHJhd1JlY3RhbmdsZSgmZDJkUmVjdCwgbV9zdGF0ZS5zdHJva2VHcmFk
aWVudC0+Y3JlYXRlUGxhdGZvcm1HcmFkaWVudElmTmVjZXNzYXJ5KHJlbmRlclRhcmdldCksIGxp
bmVXaWR0aCwgbV9kYXRhLT5zdHJva2VTdHlsZSgpKTsKKyAgICAgICAgfTsKKworICAgICAgICBp
ZiAoaGFzU2hhZG93KCkpCisgICAgICAgICAgICBkcmF3V2l0aFNoYWRvdyhyZWN0LCBkcmF3RnVu
Y3Rpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkcmF3V2l0aG91dFNoYWRvdyhyZWN0
LCBkcmF3RnVuY3Rpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fc3Rh
dGUuc3Ryb2tlUGF0dGVybikKKyAgICAgICAgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CisKKyAgICBk
cmF3V2l0aG91dFNoYWRvdyhyZWN0LCBbdGhpcywgcmVjdCwgbGluZVdpZHRoXShJRDJEMVJlbmRl
clRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CisgICAgICAgIHJlbmRlclRhcmdldC0+U2V0VGFncygx
LCBfX0xJTkVfXyk7CisgICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0Owor
ICAgICAgICBhdXRvIGJydXNoID0gbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID8gcGF0dGVyblN0cm9r
ZUJydXNoKCkgOiBzb2xpZFN0cm9rZUJydXNoKCk7CisgICAgICAgIHJlbmRlclRhcmdldC0+RHJh
d1JlY3RhbmdsZSgmZDJkUmVjdCwgYnJ1c2gsIGxpbmVXaWR0aCwgbV9kYXRhLT5zdHJva2VTdHls
ZSgpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGlu
ZUNhcCBjYXApCkBAIC0xODEzLDcgKzE4NDgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1GaWxsRWxsaXBzCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGQyZEVs
bGlwc2UgPSBEMkQxOjpFbGxpcHNlKEQyRDE6OlBvaW50MkYoZWxsaXBzZS54KCksIGVsbGlwc2Uu
eSgpKSwgZWxsaXBzZS53aWR0aCgpLCBlbGxpcHNlLmhlaWdodCgpKTsKKyAgICBhdXRvIGQyZEVs
bGlwc2UgPSBEMkQxOjpFbGxpcHNlKGVsbGlwc2UuY2VudGVyKCksIDAuNSAqIGVsbGlwc2Uud2lk
dGgoKSwgMC41ICogZWxsaXBzZS5oZWlnaHQoKSk7CiAKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
U2V0VGFncygxLCBfX0xJTkVfXyk7CiAKQEAgLTE4MzUsNyArMTg3MCw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGF1dG8gZDJkRWxsaXBzZSA9IEQyRDE6OkVsbGlwc2UoRDJEMTo6UG9pbnQyRihlbGxpcHNl
LngoKSwgZWxsaXBzZS55KCkpLCBlbGxpcHNlLndpZHRoKCksIGVsbGlwc2UuaGVpZ2h0KCkpOwor
ICAgIGF1dG8gZDJkRWxsaXBzZSA9IEQyRDE6OkVsbGlwc2UoZWxsaXBzZS5jZW50ZXIoKSwgMC41
ICogZWxsaXBzZS53aWR0aCgpLCAwLjUgKiBlbGxpcHNlLmhlaWdodCgpKTsKIAogICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5TZXRUYWdzKDEsIF9fTElORV9fKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRp
cmVjdDJELmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Niw3ICs2Niw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXIKICAg
ICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBjb250ZXh0LnJlbmRlcmluZ01vZGUoKTsK
ICAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNp
emUoc2l6ZSwgY29udGV4dCk7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNjYWxlZFNpemUs
IDEsIENvbG9yU3BhY2VTUkdCLCByZW5kZXJpbmdNb2RlLCBjb250ZXh0LnBsYXRmb3JtQ29udGV4
dCgpLCBzdWNjZXNzKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIo
bmV3IEltYWdlQnVmZmVyKHNjYWxlZFNpemUsIDEsIENvbG9yU3BhY2VTUkdCLCByZW5kZXJpbmdN
b2RlLCAmY29udGV4dCwgc3VjY2VzcykpOwogCiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTc2LDcgKzc2LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBJbWFnZUJ1ZmZlcgogICAgIHJldHVybiBidWZmZXI7CiB9CiAKLUltYWdlQnVmZmVyOjpJ
bWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSAvKmNvbG9yU3BhY2UqLywgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBJ
RDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0LCBib29sJiBzdWNjZXNzKQorSW1hZ2VCdWZm
ZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlIC8qY29sb3JTcGFjZSovLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwgYm9vbCYgc3VjY2VzcykK
ICAgICA6IG1fbG9naWNhbFNpemUoc2l6ZSkKICAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29s
dXRpb25TY2FsZSkKIHsKQEAgLTEwMSw2ICsxMDEsNyBAQCBJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRTaXplCiAgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKICAg
ICAgICAgcmV0dXJuOwogCisgICAgYXV0byByZW5kZXJUYXJnZXQgPSB0YXJnZXRDb250ZXh0ID8g
dGFyZ2V0Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiBudWxscHRyOwogICAgIGlmICghcmVu
ZGVyVGFyZ2V0KQogICAgICAgICByZW5kZXJUYXJnZXQgPSBHcmFwaGljc0NvbnRleHQ6OmRlZmF1
bHRSZW5kZXJUYXJnZXQoKTsKICAgICBSRUxFQVNFX0FTU0VSVChyZW5kZXJUYXJnZXQpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVj
dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODcsMTQgKzE4NywxNCBAQCB1bnNpZ25lZCBJbWFnZURlY29kZXI6
OmZyYW1lQnl0ZXNBdEluZGV4CiAgICAgcmV0dXJuIHdpZHRoICogaGVpZ2h0ICogNDsKIH0KIAot
dm9pZCBJbWFnZURlY29kZXI6OnNldFJlbmRlclRhcmdldChJRDJEMVJlbmRlclRhcmdldCogcmVu
ZGVyVGFyZ2V0KQordm9pZCBJbWFnZURlY29kZXI6OnNldFRhcmdldENvbnRleHQoSUQyRDFSZW5k
ZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKIHsKICAgICBtX3JlbmRlclRhcmdldCA9IHJlbmRlclRh
cmdldDsKIH0KIAogTmF0aXZlSW1hZ2VQdHIgSW1hZ2VEZWNvZGVyOjpjcmVhdGVGcmFtZUltYWdl
QXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwg
RGVjb2RpbmdNb2RlKSBjb25zdAogewotICAgIGlmICghbV9uYXRpdmVEZWNvZGVyKQorICAgIGlm
ICghbV9uYXRpdmVEZWNvZGVyIHx8ICFtX3JlbmRlclRhcmdldCkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKICAgICBDT01QdHI8SVdJQ0JpdG1hcEZyYW1lRGVjb2RlPiBmcmFtZTsKQEAgLTIx
MSwxMCArMjExLDYgQEAgTmF0aXZlSW1hZ2VQdHIgSW1hZ2VEZWNvZGVyOjpjcmVhdGVGcmFtZQog
ICAgIGlmICghU1VDQ0VFREVEKGhyKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBB
U1NFUlQobV9yZW5kZXJUYXJnZXQpOwotICAgIGlmICghbV9yZW5kZXJUYXJnZXQpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCiAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7CiAgICAg
aHIgPSBtX3JlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFwRnJvbVdpY0JpdG1hcChjb252ZXJ0ZXIu
Z2V0KCksIG51bGxwdHIsICZiaXRtYXApOwogICAgIGlmICghU1VDQ0VFREVEKGhyKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3Qy
RC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZURlY29kZXJEaXJlY3QyRC5oCShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaAkod29ya2luZyBj
b3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0FsbERhdGFSZWNlaXZl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNBbGxEYXRhUmVjZWl2ZWQ7IH0KICAgICB2b2lkIGNsZWFy
RnJhbWVCdWZmZXJDYWNoZShzaXplX3QpIHsgfQogCi0gICAgdm9pZCBzZXRSZW5kZXJUYXJnZXQo
SUQyRDFSZW5kZXJUYXJnZXQqKTsKKyAgICB2b2lkIHNldFRhcmdldENvbnRleHQoSUQyRDFSZW5k
ZXJUYXJnZXQqKTsKIAogICAgIHN0YXRpYyBJV0lDSW1hZ2luZ0ZhY3RvcnkqIHN5c3RlbUltYWdp
bmdGYWN0b3J5KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVjdDJELmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTIsMTEgKzkyLDYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1l
TWF0Y2hpbmdTb3VyYwogICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KDAuMGYsIDAu
MGYsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBjb21wb3NpdGVPcCwg
QmxlbmRNb2RlTm9ybWFsLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oKSk7CiB9CiAKLXZv
aWQgQml0bWFwSW1hZ2U6OnNldFJlbmRlclRhcmdldChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
Ci17Ci0gICAgbV9zb3VyY2Uuc2V0UmVuZGVyVGFyZ2V0KGNvbnRleHQpOwotfQotCiB2b2lkIElt
YWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5k
TW9kZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9OYXRp
dmVJbWFnZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDIwNzI3NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9OYXRpdmVJbWFnZURpcmVj
dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgPGQyZDEuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0dGVybkRpcmVjdDJELmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0
dGVybkRpcmVjdDJELmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1BhdHRlcm5EaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDEyICszNyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSUQyRDFCaXRtYXBCcnVz
aCogUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5k
ZXJUYXJnZXQsIGZsb2F0IGFscGhhLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRy
YW5zZm9ybWF0aW9uKSBjb25zdAorSUQyRDFCaXRtYXBCcnVzaCogUGF0dGVybjo6Y3JlYXRlUGxh
dGZvcm1QYXR0ZXJuKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgZmxvYXQgYWxwaGEs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbnNmb3JtYXRpb24pIGNvbnN0CiB7
Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVuZGVyVGFyZ2V0KTsKLQotICAgIEZsb2F0UmVjdCB0aWxl
UmVjdCA9IHRpbGVJbWFnZSgpLT5yZWN0KCk7Ci0KICAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVy
blRyYW5zZm9ybSA9IHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9uICogbV9wYXR0ZXJuU3BhY2VUcmFu
c2Zvcm1hdGlvbjsKICAgICBhdXRvIGJpdG1hcEJydXNoUHJvcGVydGllcyA9IEQyRDE6OkJpdG1h
cEJydXNoUHJvcGVydGllcygpOwogICAgIGJpdG1hcEJydXNoUHJvcGVydGllcy5leHRlbmRNb2Rl
WCA9IG1fcmVwZWF0WCA/IEQyRDFfRVhURU5EX01PREVfV1JBUCA6IEQyRDFfRVhURU5EX01PREVf
Q0xBTVA7CkBAIC01Miw5ICs0OCwxNCBAQCBJRDJEMUJpdG1hcEJydXNoKiBQYXR0ZXJuOjpjcmVh
dGVQbGF0Zm9yCiAgICAgYnJ1c2hQcm9wZXJ0aWVzLnRyYW5zZm9ybSA9IHBhdHRlcm5UcmFuc2Zv
cm07CiAgICAgYnJ1c2hQcm9wZXJ0aWVzLm9wYWNpdHkgPSBhbHBoYTsKIAorICAgIGF1dG8gcGF0
dGVybkltYWdlID0gdGlsZUltYWdlKCk7CisKKyAgICBhdXRvIHBsYXRmb3JtQ29udGV4dCA9IGNv
bnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAgUkVMRUFTRV9BU1NFUlQocGxhdGZvcm1Db250
ZXh0KTsKKwogICAgIElEMkQxQml0bWFwQnJ1c2gqIHBhdHRlcm5CcnVzaCA9IG51bGxwdHI7Ci0g
ICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFwQnJ1c2godGlsZUltYWdl
KCktPm5hdGl2ZUltYWdlKCkuZ2V0KCksICZiaXRtYXBCcnVzaFByb3BlcnRpZXMsICZicnVzaFBy
b3BlcnRpZXMsICZwYXR0ZXJuQnJ1c2gpOwotICAgIEFTU0VSVChocik7CisgICAgSFJFU1VMVCBo
ciA9IHBsYXRmb3JtQ29udGV4dC0+Q3JlYXRlQml0bWFwQnJ1c2gocGF0dGVybkltYWdlLT5uYXRp
dmVJbWFnZSgmY29udGV4dCkuZ2V0KCksICZiaXRtYXBCcnVzaFByb3BlcnRpZXMsICZicnVzaFBy
b3BlcnRpZXMsICZwYXR0ZXJuQnJ1c2gpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKICAg
ICByZXR1cm4gcGF0dGVybkJydXNoOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAJKHJldmlzaW9uIDIwNzI3NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDYgKzQ4LDEwIEBACiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKKyNpZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSA8ZDJk
MS5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGlubGluZSB2b2lk
IGVuZE1hdHJpeFJvdyhWZWN0b3I8ZmxvYXQ+JiBwYXJhbWV0ZXJzKQpAQCAtMzEzLDE1ICszMTcs
MjAgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6dXBkYXRlQmFja2luZwogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyOjphbGxvY2F0ZUJhY2tpbmdT
dG9yZUlmTmVlZGVkKCkKK3ZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXI6OmFsbG9jYXRlQmFja2lu
Z1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRDb250ZXh0KQogewog
ICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIGVmZmVjdCBjaGFpbiBoYXMgYmVlbiBidWlsdCwgYW5k
IHRoZQogICAgIC8vIHNvdXJjZSBpbWFnZSBzaXplcyBzZXQuIFdlIGp1c3QgbmVlZCB0byBhdHRh
Y2ggdGhlIGdyYXBoaWMKICAgICAvLyBidWZmZXIgaWYgd2UgaGF2ZSBub3QgeWV0IGRvbmUgc28u
CiAgICAgaWYgKCFtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQpIHsKICAgICAgICAgSW50U2l6ZSBs
b2dpY2FsU2l6ZShtX3NvdXJjZURyYXdpbmdSZWdpb24ud2lkdGgoKSwgbV9zb3VyY2VEcmF3aW5n
UmVnaW9uLmhlaWdodCgpKTsKLSAgICAgICAgaWYgKCFzb3VyY2VJbWFnZSgpIHx8IHNvdXJjZUlt
YWdlKCktPmxvZ2ljYWxTaXplKCkgIT0gbG9naWNhbFNpemUpCisgICAgICAgIGlmICghc291cmNl
SW1hZ2UoKSB8fCBzb3VyY2VJbWFnZSgpLT5sb2dpY2FsU2l6ZSgpICE9IGxvZ2ljYWxTaXplKSB7
CisjaWYgVVNFKERJUkVDVDJEKQorICAgICAgICAgICAgc2V0U291cmNlSW1hZ2UoSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSgpLCAmdGFyZ2V0Q29udGV4dCwg
ZmlsdGVyU2NhbGUoKSkpOworI2Vsc2UKICAgICAgICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdl
QnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUoKSwgZmlsdGVyU2NhbGUo
KSkpOworI2VuZGlmCisgICAgICAgIH0KICAgICAgICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVk
ID0gdHJ1ZTsKICAgICB9CiB9CkBAIC0zOTYsNyArNDA1LDcgQEAgYm9vbCBGaWx0ZXJFZmZlY3RS
ZW5kZXJlckhlbHBlcjo6YmVnaW5GaQogICAgIEFTU0VSVChtX3JlbmRlckxheWVyKTsKICAgICAK
ICAgICBGaWx0ZXJFZmZlY3RSZW5kZXJlciogZmlsdGVyID0gbV9yZW5kZXJMYXllci0+ZmlsdGVy
UmVuZGVyZXIoKTsKLSAgICBmaWx0ZXItPmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoKTsK
KyAgICBmaWx0ZXItPmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQobV90YXJnZXRDb250ZXh0
KTsKICAgICAvLyBQYWludCBpbnRvIHRoZSBjb250ZXh0IHRoYXQgcmVwcmVzZW50cyB0aGUgU291
cmNlR3JhcGhpYyBvZiB0aGUgZmlsdGVyLgogICAgIEdyYXBoaWNzQ29udGV4dCogc291cmNlR3Jh
cGhpY3NDb250ZXh0ID0gZmlsdGVyLT5pbnB1dENvbnRleHQoKTsKICAgICBpZiAoIXNvdXJjZUdy
YXBoaWNzQ29udGV4dCB8fCBmaWx0ZXItPmZpbHRlclJlZ2lvbigpLmlzRW1wdHkoKSB8fCBJbWFn
ZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZmlsdGVyLT5maWx0ZXJSZWdpb24oKS5zaXplKCkp
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVu
ZGVyZXIuaAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zp
bHRlckVmZmVjdFJlbmRlcmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50OwpAQCAtNTcsOCArNTgsOSBAQCBl
bnVtIEZpbHRlckNvbnN1bWVyIHsKIGNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyIHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBGaWx0ZXJFZmZlY3RS
ZW5kZXJlckhlbHBlcihib29sIGhhdmVGaWx0ZXJFZmZlY3QpCisgICAgRmlsdGVyRWZmZWN0UmVu
ZGVyZXJIZWxwZXIoYm9vbCBoYXZlRmlsdGVyRWZmZWN0LCBHcmFwaGljc0NvbnRleHQmIHRhcmdl
dENvbnRleHQpCiAgICAgICAgIDogbV9oYXZlRmlsdGVyRWZmZWN0KGhhdmVGaWx0ZXJFZmZlY3Qp
CisgICAgICAgICwgbV90YXJnZXRDb250ZXh0KHRhcmdldENvbnRleHQpCiAgICAgewogICAgIH0K
ICAgICAKQEAgLTc3LDYgKzc5LDcgQEAgcHJpdmF0ZToKICAgICBSZW5kZXJMYXllciogbV9yZW5k
ZXJMYXllciB7IG51bGxwdHIgfTsgLy8gRklYTUU6IHRoaXMgaXMgbWFpbmx5IHVzZWQgdG8gZ2V0
IHRoZSBGaWx0ZXJFZmZlY3RSZW5kZXJlci4gRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXIgc2hv
dWxkIGJlIHdlYW5lZCBvZmYgaXQuCiAgICAgTGF5b3V0UG9pbnQgbV9wYWludE9mZnNldDsKICAg
ICBMYXlvdXRSZWN0IG1fcmVwYWludFJlY3Q7CisgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBt
X3RhcmdldENvbnRleHQ7CiAgICAgYm9vbCBtX2hhdmVGaWx0ZXJFZmZlY3QgeyBmYWxzZSB9Owog
ICAgIGJvb2wgbV9zdGFydGVkRmlsdGVyRWZmZWN0IHsgZmFsc2UgfTsKIH07CkBAIC0xMDcsNyAr
MTEwLDcgQEAgcHVibGljOgogICAgIGJvb2wgYnVpbGQoUmVuZGVyRWxlbWVudCosIGNvbnN0IEZp
bHRlck9wZXJhdGlvbnMmLCBGaWx0ZXJDb25zdW1lcik7CiAgICAgUGFzc1JlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IGJ1aWxkUmVmZXJlbmNlRmlsdGVyKFJlbmRlckVsZW1lbnQqLCBQYXNzUmVmUHRyPEZp
bHRlckVmZmVjdD4gcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiopOwog
ICAgIGJvb2wgdXBkYXRlQmFja2luZ1N0b3JlUmVjdChjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJl
Y3QpOwotICAgIHZvaWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCgpOworICAgIHZvaWQg
YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAg
ICB2b2lkIGNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwogICAgIHZvaWQgYXBwbHkoKTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNp
b24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDE2OCw3ICs0MTY4LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGFz
RmlsdGVyVGhhdElzUGFpbnRpbgogICAgIGlmICghaGFzUGFpbnRlZEZpbHRlcikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBmaWx0ZXJQYWludGVyID0gc3RkOjptYWtlX3VuaXF1
ZTxGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcj4oaGFzUGFpbnRlZEZpbHRlcik7CisgICAgYXV0
byBmaWx0ZXJQYWludGVyID0gc3RkOjptYWtlX3VuaXF1ZTxGaWx0ZXJFZmZlY3RSZW5kZXJlckhl
bHBlcj4oaGFzUGFpbnRlZEZpbHRlciwgY29udGV4dCk7CiAgICAgaWYgKCFmaWx0ZXJQYWludGVy
LT5oYXZlRmlsdGVyRWZmZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDE4Miw3
ICs0MTgyLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVySGVscAogCiAg
ICAgRmlsdGVySW5mbyogZmlsdGVySW5mbyA9IEZpbHRlckluZm86OmdldElmRXhpc3RzKCp0aGlz
KTsKICAgICBib29sIGhhc1BhaW50ZWRGaWx0ZXIgPSBmaWx0ZXJJbmZvICYmIGZpbHRlckluZm8t
PnJlbmRlcmVyKCkgJiYgcGFpbnRzV2l0aEZpbHRlcnMoKTsKLSAgICBhdXRvIGZpbHRlclBhaW50
ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyPihoYXNQYWlu
dGVkRmlsdGVyKTsKKyAgICBhdXRvIGZpbHRlclBhaW50ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEZp
bHRlckVmZmVjdFJlbmRlcmVySGVscGVyPihoYXNQYWludGVkRmlsdGVyLCBjb250ZXh0KTsKIAog
ICAgIExheW91dFJlY3QgZmlsdGVyUmVwYWludFJlY3QgPSBmaWx0ZXJJbmZvLT5kaXJ0eVNvdXJj
ZVJlY3QoKTsKICAgICBmaWx0ZXJSZXBhaW50UmVjdC5tb3ZlKG9mZnNldEZyb21Sb290KTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkocmV2aXNpb24gMjA3
Mjc1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQsNiArNTQsMTEgQEAKICNpbmNsdWRlIDxydW50aW1lL0pTQ0lubGluZXMu
aD4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogCisjaWYgVVNFKERJUkVDVDJEKQorI2lu
Y2x1ZGUgIkNPTVB0ci5oIgorI2luY2x1ZGUgPGQyZDEuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIFNWR0ltYWdlOjpTVkdJbWFnZShJbWFnZU9ic2VydmVyJiBvYnNlcnZlciwg
Y29uc3QgVVJMJiB1cmwpCkBAIC0xODcsNyArMTkyLDcgQEAgdm9pZCBTVkdJbWFnZTo6ZHJhd0Zv
ckNvbnRhaW5lcihHcmFwaGljcwogI2lmIFVTRShDQUlSTykKIC8vIFBhc3NlcyBvd25lcnNoaXAg
b2YgdGhlIG5hdGl2ZSBpbWFnZSB0byB0aGUgY2FsbGVyIHNvIE5hdGl2ZUltYWdlUHRyIG5lZWRz
CiAvLyB0byBiZSBhIHNtYXJ0IHBvaW50ZXIgdHlwZS4KLU5hdGl2ZUltYWdlUHRyIFNWR0ltYWdl
OjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCitOYXRpdmVJbWFnZVB0ciBTVkdJbWFnZTo6
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KikKIHsKICAg
ICBpZiAoIW1fcGFnZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMDQsNiArMjA5LDM4
IEBAIE5hdGl2ZUltYWdlUHRyIFNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckMKIH0KICNlbmRpZgog
CisjaWYgVVNFKERJUkVDVDJEKQorTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdl
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCkKK3sKKyAgICBBU1NFUlQodGFy
Z2V0Q29udGV4dCk7CisgICAgaWYgKCFtX3BhZ2UgfHwgIXRhcmdldENvbnRleHQpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgYXV0byBwbGF0Zm9ybUNvbnRleHQgPSB0YXJnZXRDb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBBU1NFUlQocGxhdGZvcm1Db250ZXh0KTsKKwor
ICAgIC8vIERyYXcgdGhlIFNWRyBpbnRvIGEgYml0bWFwLgorICAgIENPTVB0cjxJRDJEMUJpdG1h
cFJlbmRlclRhcmdldD4gbmF0aXZlSW1hZ2VUYXJnZXQ7CisgICAgSFJFU1VMVCBociA9IHBsYXRm
b3JtQ29udGV4dC0+Q3JlYXRlQ29tcGF0aWJsZVJlbmRlclRhcmdldChJbnRTaXplKHJlY3QoKS5z
aXplKCkpLCAmbmF0aXZlSW1hZ2VUYXJnZXQpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsK
KworICAgIG5hdGl2ZUltYWdlVGFyZ2V0LT5CZWdpbkRyYXcoKTsKKyAgICBHcmFwaGljc0NvbnRl
eHQgbG9jYWxDb250ZXh0KG5hdGl2ZUltYWdlVGFyZ2V0LmdldCgpKTsKKyAgICBsb2NhbENvbnRl
eHQuc2V0RGlkQmVnaW5EcmF3KHRydWUpOworCisgICAgZHJhdyhsb2NhbENvbnRleHQsIHJlY3Qo
KSwgcmVjdCgpLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBCbGVuZE1vZGVOb3JtYWwsIEltYWdlT3Jp
ZW50YXRpb25EZXNjcmlwdGlvbigpKTsKKworICAgIGhyID0gbmF0aXZlSW1hZ2VUYXJnZXQtPkZs
dXNoKCk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgQ09NUHRyPElEMkQxQml0
bWFwPiBuYXRpdmVJbWFnZTsKKyAgICBociA9IG5hdGl2ZUltYWdlVGFyZ2V0LT5HZXRCaXRtYXAo
Jm5hdGl2ZUltYWdlKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICByZXR1cm4g
bmF0aXZlSW1hZ2U7Cit9CisjZW5kaWYKKwogdm9pZCBTVkdJbWFnZTo6ZHJhd1BhdHRlcm5Gb3JD
b250YWluZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFNpemUmIGNvbnRh
aW5lclNpemUsIGZsb2F0IHpvb20sIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKICAgICBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkocmV2aXNpb24gMjA3Mjc1
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY2LDcgKzY2LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0QW5pbWF0aW9uKCkg
ZmluYWw7CiAKICNpZiBVU0UoQ0FJUk8pCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKSBmaW5hbDsKKyAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgZmluYWw7Cisj
ZW5kaWYKKyNpZiBVU0UoRElSRUNUMkQpCisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2Uo
Y29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpIGZpbmFsOwogI2VuZGlmCiAKIHByaXZh
dGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWlu
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFn
ZUZvckNvbnRhaW5lci5jcHAJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDkgKzQ2LDkgQEAgdm9pZCBTVkdJbWFnZUZvckNvbnRhaW5lcjo6ZHJhd1BhdHRlcm4oRwogICAg
IG1faW1hZ2UtPmRyYXdQYXR0ZXJuRm9yQ29udGFpbmVyKGNvbnRleHQsIG1fY29udGFpbmVyU2l6
ZSwgbV96b29tLCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgY29t
cG9zaXRlT3AsIGRzdFJlY3QsIGJsZW5kTW9kZSk7CiB9CiAKLU5hdGl2ZUltYWdlUHRyIFNWR0lt
YWdlRm9yQ29udGFpbmVyOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCitOYXRpdmVJbWFn
ZVB0ciBTVkdJbWFnZUZvckNvbnRhaW5lcjo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29u
c3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0KQogewotICAgIHJldHVybiBtX2ltYWdl
LT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIHJldHVybiBtX2ltYWdlLT5uYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSh0YXJnZXRDb250ZXh0KTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9y
Q29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R0ltYWdlRm9yQ29udGFpbmVyLmgJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC02
Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgdG8gYmUg
bGVzcyBjb25zZXJ2YXRpdmUuCiAgICAgYm9vbCBjdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSBmaW5hbDsKKyAgICBOYXRpdmVJbWFnZVB0ciBuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikg
ZmluYWw7CiAKIHByaXZhdGU6CiAgICAgU1ZHSW1hZ2VGb3JDb250YWluZXIoU1ZHSW1hZ2UqIGlt
YWdlLCBjb25zdCBGbG9hdFNpemUmIGNvbnRhaW5lclNpemUsIGZsb2F0IHpvb20pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291642</attachid>
            <date>2016-10-14 10:16:23 -0700</date>
            <delta_ts>2016-10-14 10:34:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163349-20161014101256.patch</filename>
            <type>text/plain</type>
            <size>37286</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzMxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg0IEBACisyMDE2LTEwLTEzICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBJ
bXBsZW1lbnQgYmFzaWMgU1ZHIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MzM0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIERpcmVjdDJEIG5lZWRzIGFjY2VzcyB0byB0aGUgdGFyZ2V0IGdy
YXBoaWNzIGNvbnRleHQgd2hlbiBnZW5lcmF0aW5nIGJpdG1hcAorICAgICAgICBpbWFnZXMgc28g
dGhhdCBpdCBjYW4gcHJvcGVybHkgbWF0Y2ggcGl4ZWwgZm9ybWF0IGFuZCBvdGhlciBzZXR0aW5n
cy4KKworICAgICAgICBBZGQgaW1wbGVtZW50YXRpb25zIGZvciBhIG51bWJlciBvZiBkcmF3aW5n
IHByaW1pdGl2ZXMgdXNlZCBpbiB0aGUgU1ZHCisgICAgICAgIHRlc3QgY2FzZXMuIENvcnJlY3Qg
c29tZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIENHIGFuZCBEaXJlY3QyRCBmb3IgZHJhd2luZworICAg
ICAgICBkaWZmZXJlbnQgcHJpbWl0aXZlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRlc3Rl
ZCBieSBleGlzdGluZyAnc3ZnJyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFt
ZUltYWdlQXRJbmRleCk6IFRha2Ugb3B0aW9uYWwgdGFyZ2V0IGdyYXBoaWNzCisgICAgICAgICAg
IGNvbnRleHQuIEFsc28gcGFzcyB0aGUgZ3JhcGhpY3MgY29udGV4dCB0byB0aGUgaW1hZ2UgZGVj
b2Rlci4KKyAgICAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSk6IEFj
Y2VwdCBhbiBvcHRpb25hbCB0YXJnZXQgY29udGV4dC4KKyAgICAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6IERpdHRvLgorICAgICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOiBQYXNzIHRhcmdldCBncmFwaGljcyBjb250
ZXh0IHRvIHRoZQorICAgICAgICAgICAnZnJhbWVJbWFnZUF0SW5kZXgnIG1ldGhvZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6IE1vdmVkIGZy
b20gaGVhZGVyLiBBZGQgY3JlYXRlIGZ1bmN0aW9uIHRoYXQKKyAgICAgICAgdGFrZXMgYW4gb3B0
aW9uYWwgR3JhcGhpY3NDb250ZXh0IGFyZ3VtZW50LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFt
ZUNhY2hlLmNwcDogQWRkIG1pc3NpbmcgaW5jbHVkZSBuZWVkZWQgdG8gYnVpbGQKKyAgICAgICAg
dW5kZXIgRGlyZWN0MkQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldERlY29kZXJUYXJnZXRDb250
ZXh0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0UmVuZGVyVGFy
Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjplbmREcmF3KTogTG9nIGVy
cm9yIHN0YXRlIGluc3RlYWQgb2YgY3Jhc2hpbmcKKyAgICAgICAgZWFjaCB0aW1lLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZSk6IEVsbGlwc2VzIGFyZSBk
ZWZpbmVkIGluIEQyRCBhcyBhIGNlbnRlciwgYW4KKyAgICAgICAgWC1yYWRpdXMsIGFuZCBhIFkt
cmFkaXVzLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBh
dHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0
ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KTogVXNl
ICdDbGVhcicgZnVuY3Rpb24gaWYgcG9zc2libGUuIERvbid0IGNsZWFyCisgICAgICAgIGFueXRo
aW5nIGlmIHRoZSBjbGVhciByZWN0IGlzIG91dHNpZGUgdGhlIGRyYXdpbmcgYXJlYS4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6IFByb3ZpZGUgaW1wbGVt
ZW50YXRpb24gKG5lZWRlZCBieSBTVkcpLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKTogRWxsaXBzZXMgYXJlIGRlZmluZWQgaW4gRDJEIGFz
CisgICAgICAgIGEgY2VudGVyLCBhbiBYLXJhZGl1cywgYW5kIGEgWS1yYWRpdXMuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZSk6IERpdHRv
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KTogQWNjZXB0IG9wdGlvbmFsIEdyYXBoaWNzQ29udGV4dCBhcmd1bWVudC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcik6IERpdHRvLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kZXI6OnNldFRhcmdldENvbnRleHQpOiBSZW5hbWVkIGZyb20gJ3NldFJl
bmRlclRhcmdldCcuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmNyZWF0ZUZyYW1l
SW1hZ2VBdEluZGV4KTogVGFrZSBvcHRpb25hbCBHcmFwaGljc0NvbnRleHQgYXJndW1lbnQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNldFJlbmRlclRhcmdldCk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGlyZWN0MkQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnNldFJlbmRlclRhcmdldCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3BwOiBB
ZGQgbWlzc2luZyBpbmNsdWRlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0
ZXJuRGlyZWN0MkQuY3BwOiAKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRm
b3JtUGF0dGVybik6IFJldmlzZSBmb3IgbmV3IHNpZ25hdHVyZS4KKyAgICAgICAgKiByZW5kZXJp
bmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0UmVuZGVyZXI6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQpOiBQYXNzIEdyYXBoaWNz
Q29udGV4dAorICAgICAgICB0byBJbWFnZUJ1ZmZlciBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOjpiZWdpbkZpbHRlckVmZmVjdCk6IFBh
c3MgdGFyZ2V0IGNvbnRleHQgdG8KKyAgICAgICAgZmlsdGVyIHdoZW4gYWxsb2NhdGluZyBiYWNr
aW5nIHN0b3JlLgorICAgICAgICAqIHJlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oOiBB
ZGQgR3JhcGhpY3NDb250ZXh0IGFzIGFyZ3VtZW50IHRvIGNvbnN0cnVjdG9yLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6aGFzRmlsdGVyVGhhdElzUGFpbnRpbmcpOiBTdXBwbHkgR3JhcGhpY3NDb250ZXh0IGFyZ3Vt
ZW50IHdoZW4KKyAgICAgICAgYnVpbGRpbmcgbmV3IEZpbHRlckVmZmVjdFJlbmRlcmVyIGFuZCBo
ZWxwZXIuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0dXBGaWx0ZXJzKTogRGl0
dG8uCisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6IFJldmlzZSB0byB0YWtl
IG9wdGlvbmFsIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBhcmd1bWVudC4KKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZSk6IERpdHRvLgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9TVkdJbWFnZS5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRh
aW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUZvckNvbnRhaW5lcjo6bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUpOiBEaXR0by4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZH
SW1hZ2VGb3JDb250YWluZXIuaDoKKwogMjAxNi0xMC0xMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgogCiAgICAgICAgIFtXZWIgSURMXSBBZGQgc3VwcG9ydCBmb3IgW1NhbWVPYmpl
Y3RdIGV4dGVuZGVkIGF0dHJpYnV0ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MCwzOSArODAsNDIgQEAgYm9vbCBCaXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBh
bGxEYQogICAgIHJldHVybiBtX3NvdXJjZS5kYXRhQ2hhbmdlZChkYXRhKCksIGFsbERhdGFSZWNl
aXZlZCk7CiB9CiAKLU5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRl
eChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkKK05hdGl2
ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJz
YW1wbGluZ0xldmVsKQogewogICAgIGlmIChmcmFtZUhhc0ludmFsaWROYXRpdmVJbWFnZUF0SW5k
ZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpKSB7CiAgICAgICAgIExPRyhJbWFnZXMsICJCaXRt
YXBJbWFnZSAlcCBmcmFtZUltYWdlQXRJbmRleCAtIHN1YnNhbXBsaW5nTGV2ZWwgd2FzICVkLCBy
ZXNhbXBsaW5nIiwgdGhpcywgc3RhdGljX2Nhc3Q8aW50PihmcmFtZVN1YnNhbXBsaW5nTGV2ZWxB
dEluZGV4KGluZGV4KSkpOwogICAgICAgICBpbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7CiAgICAg
fQogCisgICAgaWYgKHRhcmdldENvbnRleHQpCisgICAgICAgIG1fc291cmNlLnNldERlY29kZXJU
YXJnZXRDb250ZXh0KCp0YXJnZXRDb250ZXh0KTsKKwogICAgIHJldHVybiBtX3NvdXJjZS5mcmFt
ZUltYWdlQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7CiB9CiAKLU5hdGl2ZUltYWdl
UHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSgpCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFn
ZTo6bmF0aXZlSW1hZ2UoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0KQogewot
ICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0
SW5kZXgoMCwgdGFyZ2V0Q29udGV4dCk7CiB9CiAKLU5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdl
OjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFn
ZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJn
ZXRDb250ZXh0KQogewotICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFt
ZSk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lLCB0YXJnZXRD
b250ZXh0KTsKIH0KIAogI2lmIFVTRShDRykKLU5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpu
YXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQorTmF0aXZlSW1hZ2VQdHIgQml0
bWFwSW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCkKIHsKICAgICBzaXplX3QgY291bnQgPSBmcmFt
ZUNvdW50KCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAg
ICAgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpOworICAgICAgICBhdXRvIGlt
YWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSwgdGFyZ2V0Q29udGV4dCk7CiAgICAgICAgIGlmIChp
bWFnZSAmJiBuYXRpdmVJbWFnZVNpemUoaW1hZ2UpID09IHNpemUpCiAgICAgICAgICAgICByZXR1
cm4gaW1hZ2U7CiAgICAgfQogCiAgICAgLy8gRmFsbGJhY2sgdG8gdGhlIGZpcnN0IGZyYW1lIGlt
YWdlIGlmIHdlIGNhbid0IGZpbmQgdGhlIHJpZ2h0IHNpemUKLSAgICByZXR1cm4gZnJhbWVJbWFn
ZUF0SW5kZXgoMCk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KDAsIHRhcmdldENvbnRl
eHQpOwogfQogCiBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IEJpdG1hcEltYWdlOjpmcmFtZXNOYXRp
dmVJbWFnZXMoKQpAQCAtMTQxLDEwICsxNDQsNiBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCYgCiAgICAgaWYgKGRlc3RSZWN0LmlzRW1wdHkoKSB8fCBzcmNSZWN0Lmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIHNldFJl
bmRlclRhcmdldChjb250ZXh0KTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIHN0
YXJ0QW5pbWF0aW9uKERvTm90Q2F0Y2hVcCk7CiAjZWxzZQpAQCAtMTYxLDcgKzE2MCw3IEBAIHZv
aWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiAKICAgICBTdWJzYW1wbGluZ0xl
dmVsIHN1YnNhbXBsaW5nTGV2ZWwgPSBtX3NvdXJjZS5zdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUo
c2NhbGUpOwogICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZSAlcCBkcmF3IC0gc3Vic2FtcGxp
bmdMZXZlbCAlZCBhdCBzY2FsZSAlLjRmIiwgdGhpcywgc3RhdGljX2Nhc3Q8aW50PihzdWJzYW1w
bGluZ0xldmVsKSwgc2NhbGUpOwogCi0gICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4
KG1fY3VycmVudEZyYW1lLCBzdWJzYW1wbGluZ0xldmVsKTsKKyAgICBhdXRvIGltYWdlID0gZnJh
bWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsICZjb250ZXh0LCBzdWJzYW1wbGluZ0xldmVs
KTsKICAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFu
IGltYWdlIHlldC4KICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExNywyMSArMTE3LDE4IEBAIHB1YmxpYzoKICAgICBFdmFzX09iamVjdCogZ2V0RXZh
c09iamVjdChFdmFzKikgb3ZlcnJpZGU7CiAjZW5kaWYKIAotICAgIFdFQkNPUkVfRVhQT1JUIE5h
dGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgb3ZlcnJpZGU7Ci0gICAgTmF0aXZlSW1hZ2VQdHIg
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVs
bHB0cikgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpIG92ZXJyaWRlOwogI2lmIFVT
RShDRykKLSAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXpl
Jikgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VPZlNpemUoY29uc3Qg
SW50U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSBvdmVycmlkZTsKICAg
ICBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIG92ZXJyaWRlOwog
I2VuZGlmCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIHZvaWQgc2V0UmVuZGVyVGFyZ2V0KEdyYXBo
aWNzQ29udGV4dCYpOwotI2VuZGlmCiAKIHByb3RlY3RlZDoKICAgICBXRUJDT1JFX0VYUE9SVCBC
aXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0ciYmLCBJbWFnZU9ic2VydmVyKiA9IG51bGxwdHIpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIEJpdG1hcEltYWdlKEltYWdlT2JzZXJ2ZXIqID0gbnVsbHB0cik7
CiAKLSAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBs
aW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKKyAgICBOYXRpdmVJbWFnZVB0
ciBmcmFtZUltYWdlQXRJbmRleChzaXplX3QsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxs
cHRyLCBTdWJzYW1wbGluZ0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCk7CiAKICAg
ICAvLyBDYWxsZWQgdG8gaW52YWxpZGF0ZSBjYWNoZWQgZGF0YS4gV2hlbiB8ZGVzdHJveUFsbHwg
aXMgdHJ1ZSwgd2Ugd2lwZSBvdXQKICAgICAvLyB0aGUgZW50aXJlIGZyYW1lIGJ1ZmZlciBjYWNo
ZSBhbmQgdGVsbCB0aGUgaW1hZ2Ugc291cmNlIHRvIGRlc3Ryb3kKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3
LDkgKzEzNyw5IEBAIHB1YmxpYzoKIAogICAgIGVudW0gVGlsZVJ1bGUgeyBTdHJldGNoVGlsZSwg
Um91bmRUaWxlLCBTcGFjZVRpbGUsIFJlcGVhdFRpbGUgfTsKIAotICAgIHZpcnR1YWwgTmF0aXZl
SW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgdmlydHVhbCBO
YXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4g
bnVsbHB0cjsgfQotICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0
ciBuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgeyByZXR1cm4g
bnVsbHB0cjsgfQorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VPZlNpemUo
Y29uc3QgSW50U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSB7IHJldHVy
biBudWxscHRyOyB9CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgeyByZXR1cm4gbnVs
bHB0cjsgfQogICAgIHZpcnR1YWwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkZvckN1cnJl
bnRGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsgfQogICAgIHZpcnR1
YWwgVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBmcmFtZXNOYXRpdmVJbWFnZXMoKSB7IHJldHVybiB7
IH07IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyLmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNywy
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZExl
bmd0aCA9IDQwOTY7CiBzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZEFyZWEgPSBNYXhDbGFt
cGVkTGVuZ3RoICogTWF4Q2xhbXBlZExlbmd0aDsKIAorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBzdWNjZXNzKSk7CisgICAgaWYgKCFzdWNj
ZXNzKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gYnVmZmVyOworfQorCisj
aWYgVVNFKERJUkVDVDJEKQorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgYm9vbCBzdWNjZXNzID0g
ZmFsc2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdl
QnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwg
Z3JhcGhpY3NDb250ZXh0LCBzdWNjZXNzKSk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gYnVmZmVyOworfQorI2VuZGlmCisKIGJvb2wgSW1h
Z2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKICAg
ICBpZiAoc2l6ZS5pc0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0
LDE0ICs3NCwxMCBAQCBjbGFzcyBJbWFnZUJ1ZmZlciB7CiAgICAgZnJpZW5kIGNsYXNzIElPU3Vy
ZmFjZTsKIHB1YmxpYzoKICAgICAvLyBXaWxsIHJldHVybiBhIG51bGwgcG9pbnRlciBvbiBhbGxv
Y2F0aW9uIGZhaWx1cmUuCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBDb2xv
clNwYWNlU1JHQikKLSAgICB7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBzdWNjZXNzKSk7
Ci0gICAgICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICByZXR1cm4gYnVmZmVyOwotICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENvbG9yU3Bh
Y2VTUkdCKTsKKyNpZiBVU0UoRElSRUNUMkQpCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRl
cmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCosIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9
IDEsIENvbG9yU3BhY2UgPSBDb2xvclNwYWNlU1JHQik7CisjZW5kaWYKIAogICAgIC8vIENyZWF0
ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0LCB3aXRoIHN1aXRh
YmxlIHJlc29sdXRpb24gZm9yIGRyYXdpbmcgaW50byB0aGUgYnVmZmVyIGFuZCB0aGVuIGludG8g
dGhpcyBjb250ZXh0LgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNy
ZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250
ZXh0Jik7CkBAIC0xODIsNyArMTc4LDcgQEAgcHJpdmF0ZToKICNpZiBVU0UoQ0cpCiAgICAgSW1h
Z2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDR0NvbG9y
U3BhY2VSZWYsIFJlbmRlcmluZ01vZGUsIGJvb2wmIHN1Y2Nlc3MpOwogI2VsaWYgVVNFKERJUkVD
VDJEKQotICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgSUQyRDFSZW5kZXJUYXJnZXQqLCBib29s
JiBzdWNjZXNzKTsKKyAgICBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCosIGJvb2wmIHN1Y2Nlc3MpOwogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5jcHAJKHJldmlz
aW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJh
bWVDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDkgQEAKIAogI2lmIFVTRShD
RykKICNpbmNsdWRlICJJbWFnZURlY29kZXJDRy5oIgorI2VsaWYgVVNFKERJUkVDVDJEKQorI2lu
Y2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgiCisjaW5jbHVkZSA8V2luQ29kZWMuaD4KICNl
bHNlCiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAJKHJldmlzaW9uIDIw
NzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDE1ICsxMTUsMTUgQEAgYm9vbCBJbWFnZVNvdXJjZTo6
ZW5zdXJlRGVjb2RlckF2YWlsYWJsZQogICAgIHJldHVybiB0cnVlOwogfQogCi0jaWYgVVNFKERJ
UkVDVDJEKQotdm9pZCBJbWFnZVNvdXJjZTo6c2V0UmVuZGVyVGFyZ2V0KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKK3ZvaWQgSW1hZ2VTb3VyY2U6OnNldERlY29kZXJUYXJnZXRDb250ZXh0KGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKKyNpZiBVU0UoRElSRUNUMkQpCiAgICAg
aWYgKCFpc0RlY29kZXJBdmFpbGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kZWNv
ZGVyLT5zZXRSZW5kZXJUYXJnZXQoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSk7Ci19CisgICAg
bV9kZWNvZGVyLT5zZXRUYXJnZXRDb250ZXh0KGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpOwog
I2VuZGlmCit9CiAKIHZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRh
LCBib29sIGFsbERhdGFSZWNlaXZlZCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNTgsNiArNTgsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGVuc3VyZURlY29kZXJBdmFpbGFi
bGUoU2hhcmVkQnVmZmVyKik7CiAgICAgYm9vbCBpc0RlY29kZXJBdmFpbGFibGUoKSBjb25zdCB7
IHJldHVybiBtX2RlY29kZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldERlY29kZXJUYXJnZXRDb250
ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCiAjaWYgVVNFKERJUkVDVDJEKQogICAgIHZv
aWQgc2V0UmVuZGVyVGFyZ2V0KEdyYXBoaWNzQ29udGV4dCYpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw3ICszOSw2IEBAIHR5cGVkZWYgc3RydWN0IENHUGF0dGVybiogQ0dQYXR0ZXJuUmVmOwog
dHlwZWRlZiBDR1BhdHRlcm5SZWYgUGxhdGZvcm1QYXR0ZXJuUHRyOwogI2VsaWYgVVNFKERJUkVD
VDJEKQogaW50ZXJmYWNlIElEMkQxQml0bWFwQnJ1c2g7Ci1pbnRlcmZhY2UgSUQyRDFSZW5kZXJU
YXJnZXQ7CiB0eXBlZGVmIElEMkQxQml0bWFwQnJ1c2gqIFBsYXRmb3JtUGF0dGVyblB0cjsKICNl
bGlmIFVTRShDQUlSTykKICNpbmNsdWRlIDxjYWlyby5oPgpAQCAtNTEsNiArNTAsNyBAQCB0eXBl
ZGVmIHZvaWQqIFBsYXRmb3JtUGF0dGVyblB0cjsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgQWZmaW5lVHJhbnNmb3JtOworY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgSW1hZ2U7
CiAKIGNsYXNzIFBhdHRlcm4gZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxQYXR0ZXJuPiB7CkBA
IC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICNpZiAhVVNFKERJUkVDVDJEKQogICAgIFBsYXRmb3Jt
UGF0dGVyblB0ciBjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB1
c2VyU3BhY2VUcmFuc2Zvcm1hdGlvbikgY29uc3Q7CiAjZWxzZQotICAgIFBsYXRmb3JtUGF0dGVy
blB0ciBjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oSUQyRDFSZW5kZXJUYXJnZXQqLCBmbG9hdCBhbHBo
YSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB1c2VyU3BhY2VUcmFuc2Zvcm1hdGlvbikgY29uc3Q7
CisgICAgUGxhdGZvcm1QYXR0ZXJuUHRyIGNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBHcmFw
aGljc0NvbnRleHQmLCBmbG9hdCBhbHBoYSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB1c2VyU3Bh
Y2VUcmFuc2Zvcm1hdGlvbikgY29uc3Q7CiAjZW5kaWYKICAgICB2b2lkIHNldFBhdHRlcm5TcGFj
ZVRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5TcGFjZVRyYW5zZm9ybWF0
aW9uKTsKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdldFBhdHRlcm5TcGFjZVRyYW5zZm9y
bSgpIHsgcmV0dXJuIG1fcGF0dGVyblNwYWNlVHJhbnNmb3JtYXRpb247IH07CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzOCw3ICszMzgsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZTo6ZW5kCiAgICAgRDJEMV9UQUcgZmlyc3QsIHNlY29uZDsKICAgICBIUkVT
VUxUIGhyID0gbV9yZW5kZXJUYXJnZXQtPkVuZERyYXcoJmZpcnN0LCAmc2Vjb25kKTsKIAotICAg
IFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkK
KyAgICAgICAgV1RGTG9nQWx3YXlzKCJDcmFzaGVkIGluIEVuZERyYXc6IGhyPSVsZCwgZmlyc3Q9
JWxkLCBzZWNvbmQ9JWxkIiwgaHIsIGZpcnN0LCBzZWNvbmQpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cmVzdG9yZSgpCkBAIC03MzYsNyArNzM3LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IAogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgYXV0byBlbGxpcHNlID0gRDJEMTo6RWxsaXBzZShEMkQxOjpQb2ludDJGKHJl
Y3QueCgpLCByZWN0LnkoKSksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgYXV0
byBlbGxpcHNlID0gRDJEMTo6RWxsaXBzZShyZWN0LmNlbnRlcigpLCAwLjUgKiByZWN0LndpZHRo
KCksIDAuNSAqIHJlY3QuaGVpZ2h0KCkpOwogCiAgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1D
b250ZXh0KCk7CiAKQEAgLTc1OCw3ICs3NTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBw
bHlTdHJva2VQYXR0ZXJuCiAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE07IC8vIEZJ
WE1FOiBUaGlzIGlzbid0IHJlYWxseSBuZWVkZWQgb24gV2luZG93cwogCiAgICAgY29uc3QgZmxv
YXQgcGF0dGVybkFscGhhID0gMTsKLSAgICBtX2RhdGEtPm1fcGF0dGVyblN0cm9rZUJydXNoID0g
YWRvcHRDT00obV9zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29u
dGV4dCwgcGF0dGVybkFscGhhLCB1c2VyVG9CYXNlQ1RNKSk7CisgICAgbV9kYXRhLT5tX3BhdHRl
cm5TdHJva2VCcnVzaCA9IGFkb3B0Q09NKG1fc3RhdGUuc3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxh
dGZvcm1QYXR0ZXJuKCp0aGlzLCBwYXR0ZXJuQWxwaGEsIHVzZXJUb0Jhc2VDVE0pKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oKQpAQCAtNzcwLDcgKzc3MSw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKCkKICAgICBBZmZpbmVU
cmFuc2Zvcm0gdXNlclRvQmFzZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRl
ZCBvbiBXaW5kb3dzCiAKICAgICBjb25zdCBmbG9hdCBwYXR0ZXJuQWxwaGEgPSAxOwotICAgIG1f
ZGF0YS0+bV9wYXR0ZXJuRmlsbEJydXNoID0gYWRvcHRDT00obV9zdGF0ZS5maWxsUGF0dGVybi0+
Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnRleHQsIHBhdHRlcm5BbHBoYSwgdXNlclRvQmFzZUNU
TSkpOworICAgIG1fZGF0YS0+bV9wYXR0ZXJuRmlsbEJydXNoID0gYWRvcHRDT00obV9zdGF0ZS5m
aWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKCp0aGlzLCBwYXR0ZXJuQWxwaGEsIHVz
ZXJUb0Jhc2VDVE0pKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCkBAIC0xMzI5LDI0ICsxMzMwLDU4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGVhclJlY3QoY29uc3QgRmwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8g
Y29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgY29udGV4dC0+U2V0VGFncygxLCBf
X0xJTkVfXyk7Ci0KICAgICBkcmF3V2l0aG91dFNoYWRvdyhyZWN0LCBbdGhpcywgcmVjdF0oSUQy
RDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICBGbG9hdFNpemUgcmVuZGVy
VGFyZ2V0U2l6ZSA9IHJlbmRlclRhcmdldC0+R2V0U2l6ZSgpOwotICAgICAgICBpZiAocmVjdC5z
aXplKCkgPT0gcmVuZGVyVGFyZ2V0U2l6ZSkKKyAgICAgICAgRmxvYXRSZWN0IHJlbmRlclRhcmdl
dFNpemUoRmxvYXRQb2ludCgpLCByZW5kZXJUYXJnZXQtPkdldFNpemUoKSk7CisgICAgICAgIEZs
b2F0UmVjdCB2aXNpYmxlUmVjdChyZWN0KTsKKworICAgICAgICBpZiAodmlzaWJsZVJlY3QuY29u
dGFpbnMocmVuZGVyVGFyZ2V0U2l6ZSkpIHsKKyAgICAgICAgICAgIHJlbmRlclRhcmdldC0+U2V0
VGFncygxLCBfX0xJTkVfXyk7CiAgICAgICAgICAgICByZW5kZXJUYXJnZXQtPkNsZWFyKCk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlbmRlclRhcmdldC0+RmlsbFJlY3RhbmdsZShyZWN0
LCBtX2RhdGEtPmJydXNoV2l0aENvbG9yKGNvbG9yV2l0aEdsb2JhbEFscGhhKGZpbGxDb2xvcigp
KSkuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCF2aXNpYmxlUmVjdC5pbnRlcnNlY3RzKHJlbmRlclRhcmdldFNpemUpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIHJlbmRlclRhcmdldC0+U2V0VGFncygxLCBfX0xJTkVfXyk7Cisg
ICAgICAgIHZpc2libGVSZWN0LmludGVyc2VjdChyZW5kZXJUYXJnZXRTaXplKTsKKyAgICAgICAg
cmVuZGVyVGFyZ2V0LT5GaWxsUmVjdGFuZ2xlKHZpc2libGVSZWN0LCBtX2RhdGEtPmJydXNoV2l0
aENvbG9yKGNvbG9yV2l0aEdsb2JhbEFscGhhKGZpbGxDb2xvcigpKSkuZ2V0KCkpOwogICAgIH0p
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKIHsKLSAgICAodm9pZClyZWN0OwotICAgICh2b2lkKWxp
bmVXaWR0aDsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAg
IG1fZGlzcGxheUxpc3RSZWNvcmRlci0+c3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsK
KyAgICAgICAgYXV0byBkcmF3RnVuY3Rpb24gPSBbdGhpcywgcmVjdCwgbGluZVdpZHRoXShJRDJE
MVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CisgICAgICAgICAgICByZW5kZXJUYXJnZXQt
PlNldFRhZ3MoMSwgX19MSU5FX18pOworICAgICAgICAgICAgY29uc3QgRDJEMV9SRUNUX0YgZDJk
UmVjdCA9IHJlY3Q7CisgICAgICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdSZWN0YW5nbGUoJmQy
ZFJlY3QsIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmNyZWF0ZVBsYXRmb3JtR3JhZGllbnRJZk5l
Y2Vzc2FyeShyZW5kZXJUYXJnZXQpLCBsaW5lV2lkdGgsIG1fZGF0YS0+c3Ryb2tlU3R5bGUoKSk7
CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGhhc1NoYWRvdygpKQorICAgICAgICAgICAgZHJh
d1dpdGhTaGFkb3cocmVjdCwgZHJhd0Z1bmN0aW9uKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZHJhd1dpdGhvdXRTaGFkb3cocmVjdCwgZHJhd0Z1bmN0aW9uKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChtX3N0YXRlLnN0cm9rZVBhdHRlcm4pCisgICAgICAgIGFwcGx5
U3Ryb2tlUGF0dGVybigpOworCisgICAgZHJhd1dpdGhvdXRTaGFkb3cocmVjdCwgW3RoaXMsIHJl
Y3QsIGxpbmVXaWR0aF0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgeworICAgICAg
ICByZW5kZXJUYXJnZXQtPlNldFRhZ3MoMSwgX19MSU5FX18pOworICAgICAgICBjb25zdCBEMkQx
X1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKKyAgICAgICAgYXV0byBicnVzaCA9IG1fc3RhdGUuc3Ry
b2tlUGF0dGVybiA/IHBhdHRlcm5TdHJva2VCcnVzaCgpIDogc29saWRTdHJva2VCcnVzaCgpOwor
ICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdSZWN0YW5nbGUoJmQyZFJlY3QsIGJydXNoLCBsaW5l
V2lkdGgsIG1fZGF0YS0+c3Ryb2tlU3R5bGUoKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQpAQCAtMTgxMyw3ICsxODQ4LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbEVsbGlwcwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgYXV0byBkMmRFbGxpcHNlID0gRDJEMTo6RWxsaXBzZShEMkQxOjpQb2lu
dDJGKGVsbGlwc2UueCgpLCBlbGxpcHNlLnkoKSksIGVsbGlwc2Uud2lkdGgoKSwgZWxsaXBzZS5o
ZWlnaHQoKSk7CisgICAgYXV0byBkMmRFbGxpcHNlID0gRDJEMTo6RWxsaXBzZShlbGxpcHNlLmNl
bnRlcigpLCAwLjUgKiBlbGxpcHNlLndpZHRoKCksIDAuNSAqIGVsbGlwc2UuaGVpZ2h0KCkpOwog
CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPlNldFRhZ3MoMSwgX19MSU5FX18pOwogCkBAIC0xODM1
LDcgKzE4NzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJva2VFbGxpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGQyZEVsbGlwc2UgPSBEMkQxOjpFbGxp
cHNlKEQyRDE6OlBvaW50MkYoZWxsaXBzZS54KCksIGVsbGlwc2UueSgpKSwgZWxsaXBzZS53aWR0
aCgpLCBlbGxpcHNlLmhlaWdodCgpKTsKKyAgICBhdXRvIGQyZEVsbGlwc2UgPSBEMkQxOjpFbGxp
cHNlKGVsbGlwc2UuY2VudGVyKCksIDAuNSAqIGVsbGlwc2Uud2lkdGgoKSwgMC41ICogZWxsaXBz
ZS5oZWlnaHQoKSk7CiAKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+U2V0VGFncygxLCBfX0xJTkVf
Xyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1
ZmZlckRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDIwNzI3NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJE
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IEltYWdlQnVmZmVyCiAgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0g
Y29udGV4dC5yZW5kZXJpbmdNb2RlKCk7CiAgICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VC
dWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwogICAgIGJvb2wgc3Vj
Y2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5l
dyBJbWFnZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBDb2xvclNwYWNlU1JHQiwgcmVuZGVyaW5nTW9k
ZSwgY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgc3VjY2VzcykpOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBD
b2xvclNwYWNlU1JHQiwgcmVuZGVyaW5nTW9kZSwgJmNvbnRleHQsIHN1Y2Nlc3MpKTsKIAogICAg
IGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC03Niw3ICs3Niw3IEBA
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXIKICAgICByZXR1cm4gYnVm
ZmVyOwogfQogCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgLypjb2xvclNwYWNlKi8sIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCwg
Ym9vbCYgc3VjY2VzcykKK0ltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
IHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSAvKmNvbG9yU3BhY2UqLywg
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdl
dENvbnRleHQsIGJvb2wmIHN1Y2Nlc3MpCiAgICAgOiBtX2xvZ2ljYWxTaXplKHNpemUpCiAgICAg
LCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCiB7CkBAIC0xMDEsNiArMTAxLDcg
QEAgSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZQogICAgIGlmIChudW1C
eXRlcy5oYXNPdmVyZmxvd2VkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8gcmVuZGVy
VGFyZ2V0ID0gdGFyZ2V0Q29udGV4dCA/IHRhcmdldENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
IDogbnVsbHB0cjsKICAgICBpZiAoIXJlbmRlclRhcmdldCkKICAgICAgICAgcmVuZGVyVGFyZ2V0
ID0gR3JhcGhpY3NDb250ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7CiAgICAgUkVMRUFTRV9B
U1NFUlQocmVuZGVyVGFyZ2V0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmNwcAkocmV2
aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlRGVjb2RlckRpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDE0ICsxODcsMTQg
QEAgdW5zaWduZWQgSW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVzQXRJbmRleAogICAgIHJldHVybiB3
aWR0aCAqIGhlaWdodCAqIDQ7CiB9CiAKLXZvaWQgSW1hZ2VEZWNvZGVyOjpzZXRSZW5kZXJUYXJn
ZXQoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKK3ZvaWQgSW1hZ2VEZWNvZGVyOjpz
ZXRUYXJnZXRDb250ZXh0KElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCiB7CiAgICAg
bV9yZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7CiB9CiAKIE5hdGl2ZUltYWdlUHRyIEltYWdl
RGVjb2Rlcjo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGlu
Z0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIERlY29kaW5nTW9kZSkgY29uc3QKIHsKLSAgICBpZiAo
IW1fbmF0aXZlRGVjb2RlcikKKyAgICBpZiAoIW1fbmF0aXZlRGVjb2RlciB8fCAhbV9yZW5kZXJU
YXJnZXQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgQ09NUHRyPElXSUNCaXRtYXBG
cmFtZURlY29kZT4gZnJhbWU7CkBAIC0yMTEsMTAgKzIxMSw2IEBAIE5hdGl2ZUltYWdlUHRyIElt
YWdlRGVjb2Rlcjo6Y3JlYXRlRnJhbWUKICAgICBpZiAoIVNVQ0NFRURFRChocikpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgQVNTRVJUKG1fcmVuZGVyVGFyZ2V0KTsKLSAgICBpZiAo
IW1fcmVuZGVyVGFyZ2V0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQogICAgIENPTVB0cjxJ
RDJEMUJpdG1hcD4gYml0bWFwOwogICAgIGhyID0gbV9yZW5kZXJUYXJnZXQtPkNyZWF0ZUJpdG1h
cEZyb21XaWNCaXRtYXAoY29udmVydGVyLmdldCgpLCBudWxscHRyLCAmYml0bWFwKTsKICAgICBp
ZiAoIVNVQ0NFRURFRChocikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaAkocmV2aXNpb24g
MjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVj
b2RlckRpcmVjdDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgog
ICAgIGJvb2wgaXNBbGxEYXRhUmVjZWl2ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQWxsRGF0YVJl
Y2VpdmVkOyB9CiAgICAgdm9pZCBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90KSB7IH0KIAot
ICAgIHZvaWQgc2V0UmVuZGVyVGFyZ2V0KElEMkQxUmVuZGVyVGFyZ2V0Kik7CisgICAgdm9pZCBz
ZXRUYXJnZXRDb250ZXh0KElEMkQxUmVuZGVyVGFyZ2V0Kik7CiAKICAgICBzdGF0aWMgSVdJQ0lt
YWdpbmdGYWN0b3J5KiBzeXN0ZW1JbWFnaW5nRmFjdG9yeSgpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGlyZWN0MkQuY3Bw
CShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDExICs5Miw2IEBAIHZv
aWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5nU291cmMKICAgICBkcmF3KGN0eHQsIGRz
dFJlY3QsIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXpl
LmhlaWdodCgpKSwgY29tcG9zaXRlT3AsIEJsZW5kTW9kZU5vcm1hbCwgSW1hZ2VPcmllbnRhdGlv
bkRlc2NyaXB0aW9uKCkpOwogfQogCi12b2lkIEJpdG1hcEltYWdlOjpzZXRSZW5kZXJUYXJnZXQo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIG1fc291cmNlLnNldFJlbmRlclRhcmdl
dChjb250ZXh0KTsKLX0KLQogdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0
JiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCiAgICAgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3Bl
cmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0
MkQuY3BwCShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRTaXpl
LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlIDxkMmQxLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1BhdHRlcm5EaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdHRlcm5EaXJlY3QyRC5jcHAJKHJldmlzaW9uIDIwNzI3
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGlyZWN0
MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMiArMzcsOCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUlEMkQxQml0bWFwQnJ1c2gqIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVy
bihJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0LCBmbG9hdCBhbHBoYSwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB1c2VyU3BhY2VUcmFuc2Zvcm1hdGlvbikgY29uc3QKK0lEMkQxQml0bWFw
QnJ1c2gqIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGZsb2F0IGFscGhhLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFj
ZVRyYW5zZm9ybWF0aW9uKSBjb25zdAogewotICAgIFJFTEVBU0VfQVNTRVJUKHJlbmRlclRhcmdl
dCk7Ci0KLSAgICBGbG9hdFJlY3QgdGlsZVJlY3QgPSB0aWxlSW1hZ2UoKS0+cmVjdCgpOwotCiAg
ICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm0gPSB1c2VyU3BhY2VUcmFuc2Zvcm1h
dGlvbiAqIG1fcGF0dGVyblNwYWNlVHJhbnNmb3JtYXRpb247CiAgICAgYXV0byBiaXRtYXBCcnVz
aFByb3BlcnRpZXMgPSBEMkQxOjpCaXRtYXBCcnVzaFByb3BlcnRpZXMoKTsKICAgICBiaXRtYXBC
cnVzaFByb3BlcnRpZXMuZXh0ZW5kTW9kZVggPSBtX3JlcGVhdFggPyBEMkQxX0VYVEVORF9NT0RF
X1dSQVAgOiBEMkQxX0VYVEVORF9NT0RFX0NMQU1QOwpAQCAtNTIsOSArNDgsMTQgQEAgSUQyRDFC
aXRtYXBCcnVzaCogUGF0dGVybjo6Y3JlYXRlUGxhdGZvcgogICAgIGJydXNoUHJvcGVydGllcy50
cmFuc2Zvcm0gPSBwYXR0ZXJuVHJhbnNmb3JtOwogICAgIGJydXNoUHJvcGVydGllcy5vcGFjaXR5
ID0gYWxwaGE7CiAKKyAgICBhdXRvIHBhdHRlcm5JbWFnZSA9IHRpbGVJbWFnZSgpOworCisgICAg
YXV0byBwbGF0Zm9ybUNvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworICAgIFJF
TEVBU0VfQVNTRVJUKHBsYXRmb3JtQ29udGV4dCk7CisKICAgICBJRDJEMUJpdG1hcEJydXNoKiBw
YXR0ZXJuQnJ1c2ggPSBudWxscHRyOwotICAgIEhSRVNVTFQgaHIgPSByZW5kZXJUYXJnZXQtPkNy
ZWF0ZUJpdG1hcEJydXNoKHRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpLCAmYml0bWFw
QnJ1c2hQcm9wZXJ0aWVzLCAmYnJ1c2hQcm9wZXJ0aWVzLCAmcGF0dGVybkJydXNoKTsKLSAgICBB
U1NFUlQoaHIpOworICAgIEhSRVNVTFQgaHIgPSBwbGF0Zm9ybUNvbnRleHQtPkNyZWF0ZUJpdG1h
cEJydXNoKHBhdHRlcm5JbWFnZS0+bmF0aXZlSW1hZ2UoJmNvbnRleHQpLmdldCgpLCAmYml0bWFw
QnJ1c2hQcm9wZXJ0aWVzLCAmYnJ1c2hQcm9wZXJ0aWVzLCAmcGF0dGVybkJydXNoKTsKKyAgICBB
U1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAgICAgcmV0dXJuIHBhdHRlcm5CcnVzaDsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIu
Y3BwCShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVy
RWZmZWN0UmVuZGVyZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCwxMCBAQAogI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCisjaWYgVVNF
KERJUkVDVDJEKQorI2luY2x1ZGUgPGQyZDEuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlbmRNYXRyaXhSb3coVmVjdG9yPGZsb2F0PiYgcGFy
YW1ldGVycykKQEAgLTMxMywxNSArMzE3LDIwIEBAIGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVyZXI6
OnVwZGF0ZUJhY2tpbmcKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZlY3RS
ZW5kZXJlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCgpCit2b2lkIEZpbHRlckVmZmVj
dFJlbmRlcmVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgdGFyZ2V0Q29udGV4dCkKIHsKICAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBlZmZlY3Qg
Y2hhaW4gaGFzIGJlZW4gYnVpbHQsIGFuZCB0aGUKICAgICAvLyBzb3VyY2UgaW1hZ2Ugc2l6ZXMg
c2V0LiBXZSBqdXN0IG5lZWQgdG8gYXR0YWNoIHRoZSBncmFwaGljCiAgICAgLy8gYnVmZmVyIGlm
IHdlIGhhdmUgbm90IHlldCBkb25lIHNvLgogICAgIGlmICghbV9ncmFwaGljc0J1ZmZlckF0dGFj
aGVkKSB7CiAgICAgICAgIEludFNpemUgbG9naWNhbFNpemUobV9zb3VyY2VEcmF3aW5nUmVnaW9u
LndpZHRoKCksIG1fc291cmNlRHJhd2luZ1JlZ2lvbi5oZWlnaHQoKSk7Ci0gICAgICAgIGlmICgh
c291cmNlSW1hZ2UoKSB8fCBzb3VyY2VJbWFnZSgpLT5sb2dpY2FsU2l6ZSgpICE9IGxvZ2ljYWxT
aXplKQorICAgICAgICBpZiAoIXNvdXJjZUltYWdlKCkgfHwgc291cmNlSW1hZ2UoKS0+bG9naWNh
bFNpemUoKSAhPSBsb2dpY2FsU2l6ZSkgeworI2lmIFVTRShESVJFQ1QyRCkKKyAgICAgICAgICAg
IHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIHJlbmRlcmlu
Z01vZGUoKSwgJnRhcmdldENvbnRleHQsIGZpbHRlclNjYWxlKCkpKTsKKyNlbHNlCiAgICAgICAg
ICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZW5k
ZXJpbmdNb2RlKCksIGZpbHRlclNjYWxlKCkpKTsKKyNlbmRpZgorICAgICAgICB9CiAgICAgICAg
IG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCA9IHRydWU7CiAgICAgfQogfQpAQCAtMzk2LDcgKzQw
NSw3IEBAIGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXI6OmJlZ2luRmkKICAgICBBU1NF
UlQobV9yZW5kZXJMYXllcik7CiAgICAgCiAgICAgRmlsdGVyRWZmZWN0UmVuZGVyZXIqIGZpbHRl
ciA9IG1fcmVuZGVyTGF5ZXItPmZpbHRlclJlbmRlcmVyKCk7Ci0gICAgZmlsdGVyLT5hbGxvY2F0
ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKCk7CisgICAgZmlsdGVyLT5hbGxvY2F0ZUJhY2tpbmdTdG9y
ZUlmTmVlZGVkKG1fdGFyZ2V0Q29udGV4dCk7CiAgICAgLy8gUGFpbnQgaW50byB0aGUgY29udGV4
dCB0aGF0IHJlcHJlc2VudHMgdGhlIFNvdXJjZUdyYXBoaWMgb2YgdGhlIGZpbHRlci4KICAgICBH
cmFwaGljc0NvbnRleHQqIHNvdXJjZUdyYXBoaWNzQ29udGV4dCA9IGZpbHRlci0+aW5wdXRDb250
ZXh0KCk7CiAgICAgaWYgKCFzb3VyY2VHcmFwaGljc0NvbnRleHQgfHwgZmlsdGVyLT5maWx0ZXJS
ZWdpb24oKS5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGZpbHRl
ci0+ZmlsdGVyUmVnaW9uKCkuc2l6ZSgpKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1
bWVudDsKQEAgLTU3LDggKzU4LDkgQEAgZW51bSBGaWx0ZXJDb25zdW1lciB7CiBjbGFzcyBGaWx0
ZXJFZmZlY3RSZW5kZXJlckhlbHBlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6Ci0gICAgRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXIoYm9vbCBoYXZlRmlsdGVyRWZm
ZWN0KQotICAgICAgICA6IG1faGF2ZUZpbHRlckVmZmVjdChoYXZlRmlsdGVyRWZmZWN0KQorICAg
IEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyKGJvb2wgaGF2ZUZpbHRlckVmZmVjdCwgR3JhcGhp
Y3NDb250ZXh0JiB0YXJnZXRDb250ZXh0KQorICAgICAgICA6IG1fdGFyZ2V0Q29udGV4dCh0YXJn
ZXRDb250ZXh0KQorICAgICAgICAsIG1faGF2ZUZpbHRlckVmZmVjdChoYXZlRmlsdGVyRWZmZWN0
KQogICAgIHsKICAgICB9CiAgICAgCkBAIC03Nyw2ICs3OSw3IEBAIHByaXZhdGU6CiAgICAgUmVu
ZGVyTGF5ZXIqIG1fcmVuZGVyTGF5ZXIgeyBudWxscHRyIH07IC8vIEZJWE1FOiB0aGlzIGlzIG1h
aW5seSB1c2VkIHRvIGdldCB0aGUgRmlsdGVyRWZmZWN0UmVuZGVyZXIuIEZpbHRlckVmZmVjdFJl
bmRlcmVySGVscGVyIHNob3VsZCBiZSB3ZWFuZWQgb2ZmIGl0LgogICAgIExheW91dFBvaW50IG1f
cGFpbnRPZmZzZXQ7CiAgICAgTGF5b3V0UmVjdCBtX3JlcGFpbnRSZWN0OworICAgIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYgbV90YXJnZXRDb250ZXh0OwogICAgIGJvb2wgbV9oYXZlRmlsdGVyRWZm
ZWN0IHsgZmFsc2UgfTsKICAgICBib29sIG1fc3RhcnRlZEZpbHRlckVmZmVjdCB7IGZhbHNlIH07
CiB9OwpAQCAtMTA3LDcgKzExMCw3IEBAIHB1YmxpYzoKICAgICBib29sIGJ1aWxkKFJlbmRlckVs
ZW1lbnQqLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiwgRmlsdGVyQ29uc3VtZXIpOwogICAgIFBh
c3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50
KiwgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IHByZXZpb3VzRWZmZWN0LCBSZWZlcmVuY2VGaWx0
ZXJPcGVyYXRpb24qKTsKICAgICBib29sIHVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QoY29uc3QgRmxv
YXRSZWN0JiBmaWx0ZXJSZWN0KTsKLSAgICB2b2lkIGFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVk
ZWQoKTsKKyAgICB2b2lkIGFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhp
Y3NDb250ZXh0Jik7CiAgICAgdm9pZCBjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKICAgICB2
b2lkIGFwcGx5KCk7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxNjgsNyArNDE2OCw3IEBAIGJvb2wg
UmVuZGVyTGF5ZXI6Omhhc0ZpbHRlclRoYXRJc1BhaW50aW4KICAgICBpZiAoIWhhc1BhaW50ZWRG
aWx0ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gZmlsdGVyUGFpbnRlciA9
IHN0ZDo6bWFrZV91bmlxdWU8RmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXI+KGhhc1BhaW50ZWRG
aWx0ZXIpOworICAgIGF1dG8gZmlsdGVyUGFpbnRlciA9IHN0ZDo6bWFrZV91bmlxdWU8RmlsdGVy
RWZmZWN0UmVuZGVyZXJIZWxwZXI+KGhhc1BhaW50ZWRGaWx0ZXIsIGNvbnRleHQpOwogICAgIGlm
ICghZmlsdGVyUGFpbnRlci0+aGF2ZUZpbHRlckVmZmVjdCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKQEAgLTQxODIsNyArNDE4Miw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RS
ZW5kZXJlckhlbHAKIAogICAgIEZpbHRlckluZm8qIGZpbHRlckluZm8gPSBGaWx0ZXJJbmZvOjpn
ZXRJZkV4aXN0cygqdGhpcyk7CiAgICAgYm9vbCBoYXNQYWludGVkRmlsdGVyID0gZmlsdGVySW5m
byAmJiBmaWx0ZXJJbmZvLT5yZW5kZXJlcigpICYmIHBhaW50c1dpdGhGaWx0ZXJzKCk7Ci0gICAg
YXV0byBmaWx0ZXJQYWludGVyID0gc3RkOjptYWtlX3VuaXF1ZTxGaWx0ZXJFZmZlY3RSZW5kZXJl
ckhlbHBlcj4oaGFzUGFpbnRlZEZpbHRlcik7CisgICAgYXV0byBmaWx0ZXJQYWludGVyID0gc3Rk
OjptYWtlX3VuaXF1ZTxGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcj4oaGFzUGFpbnRlZEZpbHRl
ciwgY29udGV4dCk7CiAKICAgICBMYXlvdXRSZWN0IGZpbHRlclJlcGFpbnRSZWN0ID0gZmlsdGVy
SW5mby0+ZGlydHlTb3VyY2VSZWN0KCk7CiAgICAgZmlsdGVyUmVwYWludFJlY3QubW92ZShvZmZz
ZXRGcm9tUm9vdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5j
cHAJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJ
bWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDExIEBACiAjaW5jbHVkZSA8cnVu
dGltZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KIAorI2lmIFVT
RShESVJFQ1QyRCkKKyNpbmNsdWRlICJDT01QdHIuaCIKKyNpbmNsdWRlIDxkMmQxLmg+CisjZW5k
aWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTVkdJbWFnZTo6U1ZHSW1hZ2UoSW1hZ2VPYnNl
cnZlciYgb2JzZXJ2ZXIsIGNvbnN0IFVSTCYgdXJsKQpAQCAtMTg3LDcgKzE5Miw3IEBAIHZvaWQg
U1ZHSW1hZ2U6OmRyYXdGb3JDb250YWluZXIoR3JhcGhpY3MKICNpZiBVU0UoQ0FJUk8pCiAvLyBQ
YXNzZXMgb3duZXJzaGlwIG9mIHRoZSBuYXRpdmUgaW1hZ2UgdG8gdGhlIGNhbGxlciBzbyBOYXRp
dmVJbWFnZVB0ciBuZWVkcwogLy8gdG8gYmUgYSBzbWFydCBwb2ludGVyIHR5cGUuCi1OYXRpdmVJ
bWFnZVB0ciBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKQorTmF0aXZlSW1h
Z2VQdHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCopCiB7CiAgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpA
QCAtMjA0LDYgKzIwOSwzOCBAQCBOYXRpdmVJbWFnZVB0ciBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VG
b3JDCiB9CiAjZW5kaWYKIAorI2lmIFVTRShESVJFQ1QyRCkKK05hdGl2ZUltYWdlUHRyIFNWR0lt
YWdlOjpuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQpCit7
CisgICAgQVNTRVJUKHRhcmdldENvbnRleHQpOworICAgIGlmICghbV9wYWdlIHx8ICF0YXJnZXRD
b250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gcGxhdGZvcm1Db250
ZXh0ID0gdGFyZ2V0Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgQVNTRVJUKHBsYXRm
b3JtQ29udGV4dCk7CisKKyAgICAvLyBEcmF3IHRoZSBTVkcgaW50byBhIGJpdG1hcC4KKyAgICBD
T01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IG5hdGl2ZUltYWdlVGFyZ2V0OworICAgIEhS
RVNVTFQgaHIgPSBwbGF0Zm9ybUNvbnRleHQtPkNyZWF0ZUNvbXBhdGlibGVSZW5kZXJUYXJnZXQo
SW50U2l6ZShyZWN0KCkuc2l6ZSgpKSwgJm5hdGl2ZUltYWdlVGFyZ2V0KTsKKyAgICBBU1NFUlQo
U1VDQ0VFREVEKGhyKSk7CisKKyAgICBuYXRpdmVJbWFnZVRhcmdldC0+QmVnaW5EcmF3KCk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChuYXRpdmVJbWFnZVRhcmdldC5nZXQoKSk7
CisgICAgbG9jYWxDb250ZXh0LnNldERpZEJlZ2luRHJhdyh0cnVlKTsKKworICAgIGRyYXcobG9j
YWxDb250ZXh0LCByZWN0KCksIHJlY3QoKSwgQ29tcG9zaXRlU291cmNlT3ZlciwgQmxlbmRNb2Rl
Tm9ybWFsLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oKSk7CisKKyAgICBociA9IG5hdGl2
ZUltYWdlVGFyZ2V0LT5GbHVzaCgpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAg
IENPTVB0cjxJRDJEMUJpdG1hcD4gbmF0aXZlSW1hZ2U7CisgICAgaHIgPSBuYXRpdmVJbWFnZVRh
cmdldC0+R2V0Qml0bWFwKCZuYXRpdmVJbWFnZSk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikp
OworCisgICAgcmV0dXJuIG5hdGl2ZUltYWdlOworfQorI2VuZGlmCisKIHZvaWQgU1ZHSW1hZ2U6
OmRyYXdQYXR0ZXJuRm9yQ29udGFpbmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRTaXplJiBjb250YWluZXJTaXplLCBmbG9hdCB6b29tLCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsCiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBDb21wb3NpdGVP
cGVyYXRvciBjb21wb3NpdGVPcCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBCbGVuZE1vZGUg
YmxlbmRNb2RlKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJ
KHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2NiwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBy
ZXNldEFuaW1hdGlvbigpIGZpbmFsOwogCiAjaWYgVVNFKENBSVJPKQotICAgIE5hdGl2ZUltYWdl
UHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgZmluYWw7CisgICAgTmF0aXZlSW1hZ2VQ
dHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51
bGxwdHIpIGZpbmFsOworI2VuZGlmCisjaWYgVVNFKERJUkVDVDJEKQorICAgIE5hdGl2ZUltYWdl
UHRyIG5hdGl2ZUltYWdlKGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSBmaW5hbDsK
ICNlbmRpZgogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R0ltYWdlRm9yQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuY3BwCShyZXZpc2lvbiAyMDcyNzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw5ICs0Niw5IEBAIHZvaWQgU1ZHSW1hZ2VGb3JDb250YWluZXI6OmRy
YXdQYXR0ZXJuKEcKICAgICBtX2ltYWdlLT5kcmF3UGF0dGVybkZvckNvbnRhaW5lcihjb250ZXh0
LCBtX2NvbnRhaW5lclNpemUsIG1fem9vbSwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhh
c2UsIHNwYWNpbmcsIGNvbXBvc2l0ZU9wLCBkc3RSZWN0LCBibGVuZE1vZGUpOwogfQogCi1OYXRp
dmVJbWFnZVB0ciBTVkdJbWFnZUZvckNvbnRhaW5lcjo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKQorTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2VGb3JDb250YWluZXI6Om5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCkKIHsKLSAg
ICByZXR1cm4gbV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICByZXR1
cm4gbV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUodGFyZ2V0Q29udGV4dCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5oCShyZXZpc2lvbiAyMDcyNzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IEltcGxl
bWVudCB0aGlzIHRvIGJlIGxlc3MgY29uc2VydmF0aXZlLgogICAgIGJvb2wgY3VycmVudEZyYW1l
S25vd25Ub0JlT3BhcXVlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIE5h
dGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgZmluYWw7CisgICAgTmF0
aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3NDb250
ZXh0KiA9IG51bGxwdHIpIGZpbmFsOwogCiBwcml2YXRlOgogICAgIFNWR0ltYWdlRm9yQ29udGFp
bmVyKFNWR0ltYWdlKiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBjb250YWluZXJTaXplLCBmbG9h
dCB6b29tKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291646</attachid>
            <date>2016-10-14 10:34:44 -0700</date>
            <delta_ts>2016-10-14 10:53:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163349-20161014103116.patch</filename>
            <type>text/plain</type>
            <size>37321</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzMxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg0IEBACisyMDE2LTEwLTEzICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBJ
bXBsZW1lbnQgYmFzaWMgU1ZHIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MzM0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIERpcmVjdDJEIG5lZWRzIGFjY2VzcyB0byB0aGUgdGFyZ2V0IGdy
YXBoaWNzIGNvbnRleHQgd2hlbiBnZW5lcmF0aW5nIGJpdG1hcAorICAgICAgICBpbWFnZXMgc28g
dGhhdCBpdCBjYW4gcHJvcGVybHkgbWF0Y2ggcGl4ZWwgZm9ybWF0IGFuZCBvdGhlciBzZXR0aW5n
cy4KKworICAgICAgICBBZGQgaW1wbGVtZW50YXRpb25zIGZvciBhIG51bWJlciBvZiBkcmF3aW5n
IHByaW1pdGl2ZXMgdXNlZCBpbiB0aGUgU1ZHCisgICAgICAgIHRlc3QgY2FzZXMuIENvcnJlY3Qg
c29tZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIENHIGFuZCBEaXJlY3QyRCBmb3IgZHJhd2luZworICAg
ICAgICBkaWZmZXJlbnQgcHJpbWl0aXZlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRlc3Rl
ZCBieSBleGlzdGluZyAnc3ZnJyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFt
ZUltYWdlQXRJbmRleCk6IFRha2Ugb3B0aW9uYWwgdGFyZ2V0IGdyYXBoaWNzCisgICAgICAgICAg
IGNvbnRleHQuIEFsc28gcGFzcyB0aGUgZ3JhcGhpY3MgY29udGV4dCB0byB0aGUgaW1hZ2UgZGVj
b2Rlci4KKyAgICAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSk6IEFj
Y2VwdCBhbiBvcHRpb25hbCB0YXJnZXQgY29udGV4dC4KKyAgICAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6IERpdHRvLgorICAgICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOiBQYXNzIHRhcmdldCBncmFwaGljcyBjb250
ZXh0IHRvIHRoZQorICAgICAgICAgICAnZnJhbWVJbWFnZUF0SW5kZXgnIG1ldGhvZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6IE1vdmVkIGZy
b20gaGVhZGVyLiBBZGQgY3JlYXRlIGZ1bmN0aW9uIHRoYXQKKyAgICAgICAgdGFrZXMgYW4gb3B0
aW9uYWwgR3JhcGhpY3NDb250ZXh0IGFyZ3VtZW50LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFt
ZUNhY2hlLmNwcDogQWRkIG1pc3NpbmcgaW5jbHVkZSBuZWVkZWQgdG8gYnVpbGQKKyAgICAgICAg
dW5kZXIgRGlyZWN0MkQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldERlY29kZXJUYXJnZXRDb250
ZXh0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0UmVuZGVyVGFy
Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjplbmREcmF3KTogTG9nIGVy
cm9yIHN0YXRlIGluc3RlYWQgb2YgY3Jhc2hpbmcKKyAgICAgICAgZWFjaCB0aW1lLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZSk6IEVsbGlwc2VzIGFyZSBk
ZWZpbmVkIGluIEQyRCBhcyBhIGNlbnRlciwgYW4KKyAgICAgICAgWC1yYWRpdXMsIGFuZCBhIFkt
cmFkaXVzLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBh
dHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0
ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KTogVXNl
ICdDbGVhcicgZnVuY3Rpb24gaWYgcG9zc2libGUuIERvbid0IGNsZWFyCisgICAgICAgIGFueXRo
aW5nIGlmIHRoZSBjbGVhciByZWN0IGlzIG91dHNpZGUgdGhlIGRyYXdpbmcgYXJlYS4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6IFByb3ZpZGUgaW1wbGVt
ZW50YXRpb24gKG5lZWRlZCBieSBTVkcpLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKTogRWxsaXBzZXMgYXJlIGRlZmluZWQgaW4gRDJEIGFz
CisgICAgICAgIGEgY2VudGVyLCBhbiBYLXJhZGl1cywgYW5kIGEgWS1yYWRpdXMuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZSk6IERpdHRv
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KTogQWNjZXB0IG9wdGlvbmFsIEdyYXBoaWNzQ29udGV4dCBhcmd1bWVudC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcik6IERpdHRvLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kZXI6OnNldFRhcmdldENvbnRleHQpOiBSZW5hbWVkIGZyb20gJ3NldFJl
bmRlclRhcmdldCcuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmNyZWF0ZUZyYW1l
SW1hZ2VBdEluZGV4KTogVGFrZSBvcHRpb25hbCBHcmFwaGljc0NvbnRleHQgYXJndW1lbnQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNldFJlbmRlclRhcmdldCk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGlyZWN0MkQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnNldFJlbmRlclRhcmdldCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3BwOiBB
ZGQgbWlzc2luZyBpbmNsdWRlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0
ZXJuRGlyZWN0MkQuY3BwOiAKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRm
b3JtUGF0dGVybik6IFJldmlzZSBmb3IgbmV3IHNpZ25hdHVyZS4KKyAgICAgICAgKiByZW5kZXJp
bmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0UmVuZGVyZXI6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQpOiBQYXNzIEdyYXBoaWNz
Q29udGV4dAorICAgICAgICB0byBJbWFnZUJ1ZmZlciBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOjpiZWdpbkZpbHRlckVmZmVjdCk6IFBh
c3MgdGFyZ2V0IGNvbnRleHQgdG8KKyAgICAgICAgZmlsdGVyIHdoZW4gYWxsb2NhdGluZyBiYWNr
aW5nIHN0b3JlLgorICAgICAgICAqIHJlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oOiBB
ZGQgR3JhcGhpY3NDb250ZXh0IGFzIGFyZ3VtZW50IHRvIGNvbnN0cnVjdG9yLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6aGFzRmlsdGVyVGhhdElzUGFpbnRpbmcpOiBTdXBwbHkgR3JhcGhpY3NDb250ZXh0IGFyZ3Vt
ZW50IHdoZW4KKyAgICAgICAgYnVpbGRpbmcgbmV3IEZpbHRlckVmZmVjdFJlbmRlcmVyIGFuZCBo
ZWxwZXIuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0dXBGaWx0ZXJzKTogRGl0
dG8uCisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6IFJldmlzZSB0byB0YWtl
IG9wdGlvbmFsIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBhcmd1bWVudC4KKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZSk6IERpdHRvLgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9TVkdJbWFnZS5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRh
aW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUZvckNvbnRhaW5lcjo6bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUpOiBEaXR0by4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZH
SW1hZ2VGb3JDb250YWluZXIuaDoKKwogMjAxNi0xMC0xMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgogCiAgICAgICAgIFtXZWIgSURMXSBBZGQgc3VwcG9ydCBmb3IgW1NhbWVPYmpl
Y3RdIGV4dGVuZGVkIGF0dHJpYnV0ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MCwzOSArODAsNDIgQEAgYm9vbCBCaXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBh
bGxEYQogICAgIHJldHVybiBtX3NvdXJjZS5kYXRhQ2hhbmdlZChkYXRhKCksIGFsbERhdGFSZWNl
aXZlZCk7CiB9CiAKLU5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRl
eChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkKK05hdGl2
ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJz
YW1wbGluZ0xldmVsKQogewogICAgIGlmIChmcmFtZUhhc0ludmFsaWROYXRpdmVJbWFnZUF0SW5k
ZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpKSB7CiAgICAgICAgIExPRyhJbWFnZXMsICJCaXRt
YXBJbWFnZSAlcCBmcmFtZUltYWdlQXRJbmRleCAtIHN1YnNhbXBsaW5nTGV2ZWwgd2FzICVkLCBy
ZXNhbXBsaW5nIiwgdGhpcywgc3RhdGljX2Nhc3Q8aW50PihmcmFtZVN1YnNhbXBsaW5nTGV2ZWxB
dEluZGV4KGluZGV4KSkpOwogICAgICAgICBpbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7CiAgICAg
fQogCisgICAgaWYgKHRhcmdldENvbnRleHQpCisgICAgICAgIG1fc291cmNlLnNldERlY29kZXJU
YXJnZXRDb250ZXh0KCp0YXJnZXRDb250ZXh0KTsKKwogICAgIHJldHVybiBtX3NvdXJjZS5mcmFt
ZUltYWdlQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7CiB9CiAKLU5hdGl2ZUltYWdl
UHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSgpCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFn
ZTo6bmF0aXZlSW1hZ2UoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0KQogewot
ICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0
SW5kZXgoMCwgdGFyZ2V0Q29udGV4dCk7CiB9CiAKLU5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdl
OjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFn
ZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJn
ZXRDb250ZXh0KQogewotICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFt
ZSk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lLCB0YXJnZXRD
b250ZXh0KTsKIH0KIAogI2lmIFVTRShDRykKLU5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpu
YXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQorTmF0aXZlSW1hZ2VQdHIgQml0
bWFwSW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCkKIHsKICAgICBzaXplX3QgY291bnQgPSBmcmFt
ZUNvdW50KCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAg
ICAgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpOworICAgICAgICBhdXRvIGlt
YWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSwgdGFyZ2V0Q29udGV4dCk7CiAgICAgICAgIGlmIChp
bWFnZSAmJiBuYXRpdmVJbWFnZVNpemUoaW1hZ2UpID09IHNpemUpCiAgICAgICAgICAgICByZXR1
cm4gaW1hZ2U7CiAgICAgfQogCiAgICAgLy8gRmFsbGJhY2sgdG8gdGhlIGZpcnN0IGZyYW1lIGlt
YWdlIGlmIHdlIGNhbid0IGZpbmQgdGhlIHJpZ2h0IHNpemUKLSAgICByZXR1cm4gZnJhbWVJbWFn
ZUF0SW5kZXgoMCk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KDAsIHRhcmdldENvbnRl
eHQpOwogfQogCiBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IEJpdG1hcEltYWdlOjpmcmFtZXNOYXRp
dmVJbWFnZXMoKQpAQCAtMTQxLDEwICsxNDQsNiBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCYgCiAgICAgaWYgKGRlc3RSZWN0LmlzRW1wdHkoKSB8fCBzcmNSZWN0Lmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIHNldFJl
bmRlclRhcmdldChjb250ZXh0KTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIHN0
YXJ0QW5pbWF0aW9uKERvTm90Q2F0Y2hVcCk7CiAjZWxzZQpAQCAtMTYxLDcgKzE2MCw3IEBAIHZv
aWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiAKICAgICBTdWJzYW1wbGluZ0xl
dmVsIHN1YnNhbXBsaW5nTGV2ZWwgPSBtX3NvdXJjZS5zdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUo
c2NhbGUpOwogICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZSAlcCBkcmF3IC0gc3Vic2FtcGxp
bmdMZXZlbCAlZCBhdCBzY2FsZSAlLjRmIiwgdGhpcywgc3RhdGljX2Nhc3Q8aW50PihzdWJzYW1w
bGluZ0xldmVsKSwgc2NhbGUpOwogCi0gICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4
KG1fY3VycmVudEZyYW1lLCBzdWJzYW1wbGluZ0xldmVsKTsKKyAgICBhdXRvIGltYWdlID0gZnJh
bWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsICZjb250ZXh0LCBzdWJzYW1wbGluZ0xldmVs
KTsKICAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFu
IGltYWdlIHlldC4KICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExNywyMSArMTE3LDE4IEBAIHB1YmxpYzoKICAgICBFdmFzX09iamVjdCogZ2V0RXZh
c09iamVjdChFdmFzKikgb3ZlcnJpZGU7CiAjZW5kaWYKIAotICAgIFdFQkNPUkVfRVhQT1JUIE5h
dGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgb3ZlcnJpZGU7Ci0gICAgTmF0aXZlSW1hZ2VQdHIg
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVs
bHB0cikgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpIG92ZXJyaWRlOwogI2lmIFVT
RShDRykKLSAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXpl
Jikgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VPZlNpemUoY29uc3Qg
SW50U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSBvdmVycmlkZTsKICAg
ICBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIG92ZXJyaWRlOwog
I2VuZGlmCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIHZvaWQgc2V0UmVuZGVyVGFyZ2V0KEdyYXBo
aWNzQ29udGV4dCYpOwotI2VuZGlmCiAKIHByb3RlY3RlZDoKICAgICBXRUJDT1JFX0VYUE9SVCBC
aXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0ciYmLCBJbWFnZU9ic2VydmVyKiA9IG51bGxwdHIpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIEJpdG1hcEltYWdlKEltYWdlT2JzZXJ2ZXIqID0gbnVsbHB0cik7
CiAKLSAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBs
aW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKKyAgICBOYXRpdmVJbWFnZVB0
ciBmcmFtZUltYWdlQXRJbmRleChzaXplX3QsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxs
cHRyLCBTdWJzYW1wbGluZ0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCk7CiAKICAg
ICAvLyBDYWxsZWQgdG8gaW52YWxpZGF0ZSBjYWNoZWQgZGF0YS4gV2hlbiB8ZGVzdHJveUFsbHwg
aXMgdHJ1ZSwgd2Ugd2lwZSBvdXQKICAgICAvLyB0aGUgZW50aXJlIGZyYW1lIGJ1ZmZlciBjYWNo
ZSBhbmQgdGVsbCB0aGUgaW1hZ2Ugc291cmNlIHRvIGRlc3Ryb3kKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3
LDkgKzEzNyw5IEBAIHB1YmxpYzoKIAogICAgIGVudW0gVGlsZVJ1bGUgeyBTdHJldGNoVGlsZSwg
Um91bmRUaWxlLCBTcGFjZVRpbGUsIFJlcGVhdFRpbGUgfTsKIAotICAgIHZpcnR1YWwgTmF0aXZl
SW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgdmlydHVhbCBO
YXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4g
bnVsbHB0cjsgfQotICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0
ciBuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgeyByZXR1cm4g
bnVsbHB0cjsgfQorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VPZlNpemUo
Y29uc3QgSW50U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSB7IHJldHVy
biBudWxscHRyOyB9CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgeyByZXR1cm4gbnVs
bHB0cjsgfQogICAgIHZpcnR1YWwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkZvckN1cnJl
bnRGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsgfQogICAgIHZpcnR1
YWwgVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBmcmFtZXNOYXRpdmVJbWFnZXMoKSB7IHJldHVybiB7
IH07IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyLmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNywy
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZExl
bmd0aCA9IDQwOTY7CiBzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZEFyZWEgPSBNYXhDbGFt
cGVkTGVuZ3RoICogTWF4Q2xhbXBlZExlbmd0aDsKIAorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBzdWNjZXNzKSk7CisgICAgaWYgKCFzdWNj
ZXNzKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gYnVmZmVyOworfQorCisj
aWYgVVNFKERJUkVDVDJEKQorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgYm9vbCBzdWNjZXNzID0g
ZmFsc2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdl
QnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwg
Z3JhcGhpY3NDb250ZXh0LCBzdWNjZXNzKSk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gYnVmZmVyOworfQorI2VuZGlmCisKIGJvb2wgSW1h
Z2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKICAg
ICBpZiAoc2l6ZS5pc0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0
LDE0ICs3NCwxMCBAQCBjbGFzcyBJbWFnZUJ1ZmZlciB7CiAgICAgZnJpZW5kIGNsYXNzIElPU3Vy
ZmFjZTsKIHB1YmxpYzoKICAgICAvLyBXaWxsIHJldHVybiBhIG51bGwgcG9pbnRlciBvbiBhbGxv
Y2F0aW9uIGZhaWx1cmUuCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBDb2xv
clNwYWNlU1JHQikKLSAgICB7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBzdWNjZXNzKSk7
Ci0gICAgICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICByZXR1cm4gYnVmZmVyOwotICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENvbG9yU3Bh
Y2VTUkdCKTsKKyNpZiBVU0UoRElSRUNUMkQpCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRl
cmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCosIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9
IDEsIENvbG9yU3BhY2UgPSBDb2xvclNwYWNlU1JHQik7CisjZW5kaWYKIAogICAgIC8vIENyZWF0
ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0LCB3aXRoIHN1aXRh
YmxlIHJlc29sdXRpb24gZm9yIGRyYXdpbmcgaW50byB0aGUgYnVmZmVyIGFuZCB0aGVuIGludG8g
dGhpcyBjb250ZXh0LgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNy
ZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250
ZXh0Jik7CkBAIC0xODIsNyArMTc4LDcgQEAgcHJpdmF0ZToKICNpZiBVU0UoQ0cpCiAgICAgSW1h
Z2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDR0NvbG9y
U3BhY2VSZWYsIFJlbmRlcmluZ01vZGUsIGJvb2wmIHN1Y2Nlc3MpOwogI2VsaWYgVVNFKERJUkVD
VDJEKQotICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgSUQyRDFSZW5kZXJUYXJnZXQqLCBib29s
JiBzdWNjZXNzKTsKKyAgICBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCosIGJvb2wmIHN1Y2Nlc3MpOwogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5jcHAJKHJldmlz
aW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJh
bWVDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDkgQEAKIAogI2lmIFVTRShD
RykKICNpbmNsdWRlICJJbWFnZURlY29kZXJDRy5oIgorI2VsaWYgVVNFKERJUkVDVDJEKQorI2lu
Y2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgiCisjaW5jbHVkZSA8V2luQ29kZWMuaD4KICNl
bHNlCiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAJKHJldmlzaW9uIDIw
NzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDE1ICsxMTUsMTcgQEAgYm9vbCBJbWFnZVNvdXJjZTo6
ZW5zdXJlRGVjb2RlckF2YWlsYWJsZQogICAgIHJldHVybiB0cnVlOwogfQogCi0jaWYgVVNFKERJ
UkVDVDJEKQotdm9pZCBJbWFnZVNvdXJjZTo6c2V0UmVuZGVyVGFyZ2V0KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKK3ZvaWQgSW1hZ2VTb3VyY2U6OnNldERlY29kZXJUYXJnZXRDb250ZXh0KGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKKyNpZiBVU0UoRElSRUNUMkQpCiAgICAg
aWYgKCFpc0RlY29kZXJBdmFpbGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kZWNv
ZGVyLT5zZXRSZW5kZXJUYXJnZXQoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSk7Ci19CisgICAg
bV9kZWNvZGVyLT5zZXRUYXJnZXRDb250ZXh0KGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CiAjZW5kaWYKK30KIAogdm9pZCBJbWFn
ZVNvdXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVk
KQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNv
dXJjZS5oCShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw3IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgZW5zdXJlRGVjb2RlckF2YWlsYWJsZShTaGFyZWRCdWZmZXIqKTsKICAg
ICBib29sIGlzRGVjb2RlckF2YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2Rlci5nZXQo
KTsgfQorICAgIHZvaWQgc2V0RGVjb2RlclRhcmdldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250
ZXh0Jik7CiAKICNpZiBVU0UoRElSRUNUMkQpCiAgICAgdm9pZCBzZXRSZW5kZXJUYXJnZXQoR3Jh
cGhpY3NDb250ZXh0Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
YXR0ZXJuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0dGVybi5oCShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QYXR0ZXJuLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDYgQEAgdHlwZWRl
ZiBzdHJ1Y3QgQ0dQYXR0ZXJuKiBDR1BhdHRlcm5SZWY7CiB0eXBlZGVmIENHUGF0dGVyblJlZiBQ
bGF0Zm9ybVBhdHRlcm5QdHI7CiAjZWxpZiBVU0UoRElSRUNUMkQpCiBpbnRlcmZhY2UgSUQyRDFC
aXRtYXBCcnVzaDsKLWludGVyZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKIHR5cGVkZWYgSUQyRDFC
aXRtYXBCcnVzaCogUGxhdGZvcm1QYXR0ZXJuUHRyOwogI2VsaWYgVVNFKENBSVJPKQogI2luY2x1
ZGUgPGNhaXJvLmg+CkBAIC01MSw2ICs1MCw3IEBAIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1QYXR0
ZXJuUHRyOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07Citj
bGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBJbWFnZTsKIAogY2xhc3MgUGF0dGVybiBmaW5h
bCA6IHB1YmxpYyBSZWZDb3VudGVkPFBhdHRlcm4+IHsKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGlj
OgogI2lmICFVU0UoRElSRUNUMkQpCiAgICAgUGxhdGZvcm1QYXR0ZXJuUHRyIGNyZWF0ZVBsYXRm
b3JtUGF0dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9u
KSBjb25zdDsKICNlbHNlCi0gICAgUGxhdGZvcm1QYXR0ZXJuUHRyIGNyZWF0ZVBsYXRmb3JtUGF0
dGVybihJRDJEMVJlbmRlclRhcmdldCosIGZsb2F0IGFscGhhLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9uKSBjb25zdDsKKyAgICBQbGF0Zm9ybVBhdHRlcm5Q
dHIgY3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYsIGZsb2F0IGFs
cGhhLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9uKSBjb25z
dDsKICNlbmRpZgogICAgIHZvaWQgc2V0UGF0dGVyblNwYWNlVHJhbnNmb3JtKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblNwYWNlVHJhbnNmb3JtYXRpb24pOwogICAgIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgZ2V0UGF0dGVyblNwYWNlVHJhbnNmb3JtKCkgeyByZXR1cm4gbV9wYXR0ZXJu
U3BhY2VUcmFuc2Zvcm1hdGlvbjsgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJE
LmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM4
LDcgKzMzOCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjplbmQKICAg
ICBEMkQxX1RBRyBmaXJzdCwgc2Vjb25kOwogICAgIEhSRVNVTFQgaHIgPSBtX3JlbmRlclRhcmdl
dC0+RW5kRHJhdygmZmlyc3QsICZzZWNvbmQpOwogCi0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VF
REVEKGhyKSk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICBXVEZMb2dBbHdheXMo
IkNyYXNoZWQgaW4gRW5kRHJhdzogaHI9JWxkLCBmaXJzdD0lbGQsIHNlY29uZD0lbGQiLCBociwg
Zmlyc3QsIHNlY29uZCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
OjpyZXN0b3JlKCkKQEAgLTczNiw3ICs3MzcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0VsbGlwc2UoY29uc3QgCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGVsbGlw
c2UgPSBEMkQxOjpFbGxpcHNlKEQyRDE6OlBvaW50MkYocmVjdC54KCksIHJlY3QueSgpKSwgcmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBhdXRvIGVsbGlwc2UgPSBEMkQxOjpFbGxp
cHNlKHJlY3QuY2VudGVyKCksIDAuNSAqIHJlY3Qud2lkdGgoKSwgMC41ICogcmVjdC5oZWlnaHQo
KSk7CiAKICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIApAQCAtNzU4LDcg
Kzc1OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4KICAgICBB
ZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5
IG5lZWRlZCBvbiBXaW5kb3dzCiAKICAgICBjb25zdCBmbG9hdCBwYXR0ZXJuQWxwaGEgPSAxOwot
ICAgIG1fZGF0YS0+bV9wYXR0ZXJuU3Ryb2tlQnJ1c2ggPSBhZG9wdENPTShtX3N0YXRlLnN0cm9r
ZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb250ZXh0LCBwYXR0ZXJuQWxwaGEsIHVz
ZXJUb0Jhc2VDVE0pKTsKKyAgICBtX2RhdGEtPm1fcGF0dGVyblN0cm9rZUJydXNoID0gYWRvcHRD
T00obV9zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oKnRoaXMsIHBh
dHRlcm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
YXBwbHlGaWxsUGF0dGVybigpCkBAIC03NzAsNyArNzcxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmFwcGx5RmlsbFBhdHRlcm4oKQogICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RN
OyAvLyBGSVhNRTogVGhpcyBpc24ndCByZWFsbHkgbmVlZGVkIG9uIFdpbmRvd3MKIAogICAgIGNv
bnN0IGZsb2F0IHBhdHRlcm5BbHBoYSA9IDE7Ci0gICAgbV9kYXRhLT5tX3BhdHRlcm5GaWxsQnJ1
c2ggPSBhZG9wdENPTShtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4o
Y29udGV4dCwgcGF0dGVybkFscGhhLCB1c2VyVG9CYXNlQ1RNKSk7CisgICAgbV9kYXRhLT5tX3Bh
dHRlcm5GaWxsQnJ1c2ggPSBhZG9wdENPTShtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0
Zm9ybVBhdHRlcm4oKnRoaXMsIHBhdHRlcm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTEzMjks
MjQgKzEzMzAsNTggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbAog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250
ZXh0KCk7Ci0KLSAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKLQogICAgIGRyYXdX
aXRob3V0U2hhZG93KHJlY3QsIFt0aGlzLCByZWN0XShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVy
VGFyZ2V0KSB7Ci0gICAgICAgIEZsb2F0U2l6ZSByZW5kZXJUYXJnZXRTaXplID0gcmVuZGVyVGFy
Z2V0LT5HZXRTaXplKCk7Ci0gICAgICAgIGlmIChyZWN0LnNpemUoKSA9PSByZW5kZXJUYXJnZXRT
aXplKQorICAgICAgICBGbG9hdFJlY3QgcmVuZGVyVGFyZ2V0U2l6ZShGbG9hdFBvaW50KCksIHJl
bmRlclRhcmdldC0+R2V0U2l6ZSgpKTsKKyAgICAgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0KHJl
Y3QpOworCisgICAgICAgIGlmICh2aXNpYmxlUmVjdC5jb250YWlucyhyZW5kZXJUYXJnZXRTaXpl
KSkgeworICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKICAg
ICAgICAgICAgIHJlbmRlclRhcmdldC0+Q2xlYXIoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgcmVuZGVyVGFyZ2V0LT5GaWxsUmVjdGFuZ2xlKHJlY3QsIG1fZGF0YS0+YnJ1c2hXaXRoQ29s
b3IoY29sb3JXaXRoR2xvYmFsQWxwaGEoZmlsbENvbG9yKCkpKS5nZXQoKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXZpc2libGVSZWN0LmludGVyc2Vj
dHMocmVuZGVyVGFyZ2V0U2l6ZSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgcmVu
ZGVyVGFyZ2V0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKKyAgICAgICAgdmlzaWJsZVJlY3QuaW50
ZXJzZWN0KHJlbmRlclRhcmdldFNpemUpOworICAgICAgICByZW5kZXJUYXJnZXQtPkZpbGxSZWN0
YW5nbGUodmlzaWJsZVJlY3QsIG1fZGF0YS0+YnJ1c2hXaXRoQ29sb3IoY29sb3JXaXRoR2xvYmFs
QWxwaGEoZmlsbENvbG9yKCkpKS5nZXQoKSk7CiAgICAgfSk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRo
KQogewotICAgICh2b2lkKXJlY3Q7Ci0gICAgKHZvaWQpbGluZVdpZHRoOwotICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVy
LT5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCkgeworICAgICAgICBhdXRvIGRyYXdGdW5j
dGlvbiA9IFt0aGlzLCByZWN0LCBsaW5lV2lkdGhdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJU
YXJnZXQpIHsKKyAgICAgICAgICAgIHJlbmRlclRhcmdldC0+U2V0VGFncygxLCBfX0xJTkVfXyk7
CisgICAgICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKKyAgICAgICAg
ICAgIHJlbmRlclRhcmdldC0+RHJhd1JlY3RhbmdsZSgmZDJkUmVjdCwgbV9zdGF0ZS5zdHJva2VH
cmFkaWVudC0+Y3JlYXRlUGxhdGZvcm1HcmFkaWVudElmTmVjZXNzYXJ5KHJlbmRlclRhcmdldCks
IGxpbmVXaWR0aCwgbV9kYXRhLT5zdHJva2VTdHlsZSgpKTsKKyAgICAgICAgfTsKKworICAgICAg
ICBpZiAoaGFzU2hhZG93KCkpCisgICAgICAgICAgICBkcmF3V2l0aFNoYWRvdyhyZWN0LCBkcmF3
RnVuY3Rpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkcmF3V2l0aG91dFNoYWRvdyhy
ZWN0LCBkcmF3RnVuY3Rpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1f
c3RhdGUuc3Ryb2tlUGF0dGVybikKKyAgICAgICAgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CisKKyAg
ICBkcmF3V2l0aG91dFNoYWRvdyhyZWN0LCBbdGhpcywgcmVjdCwgbGluZVdpZHRoXShJRDJEMVJl
bmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CisgICAgICAgIHJlbmRlclRhcmdldC0+U2V0VGFn
cygxLCBfX0xJTkVfXyk7CisgICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0
OworICAgICAgICBhdXRvIGJydXNoID0gbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID8gcGF0dGVyblN0
cm9rZUJydXNoKCkgOiBzb2xpZFN0cm9rZUJydXNoKCk7CisgICAgICAgIHJlbmRlclRhcmdldC0+
RHJhd1JlY3RhbmdsZSgmZDJkUmVjdCwgYnJ1c2gsIGxpbmVXaWR0aCwgbV9kYXRhLT5zdHJva2VT
dHlsZSgpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAo
TGluZUNhcCBjYXApCkBAIC0xODEzLDcgKzE4NDgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
cGxhdGZvcm1GaWxsRWxsaXBzCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGQy
ZEVsbGlwc2UgPSBEMkQxOjpFbGxpcHNlKEQyRDE6OlBvaW50MkYoZWxsaXBzZS54KCksIGVsbGlw
c2UueSgpKSwgZWxsaXBzZS53aWR0aCgpLCBlbGxpcHNlLmhlaWdodCgpKTsKKyAgICBhdXRvIGQy
ZEVsbGlwc2UgPSBEMkQxOjpFbGxpcHNlKGVsbGlwc2UuY2VudGVyKCksIDAuNSAqIGVsbGlwc2Uu
d2lkdGgoKSwgMC41ICogZWxsaXBzZS5oZWlnaHQoKSk7CiAKICAgICBwbGF0Zm9ybUNvbnRleHQo
KS0+U2V0VGFncygxLCBfX0xJTkVfXyk7CiAKQEAgLTE4MzUsNyArMTg3MCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGkKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGF1dG8gZDJkRWxsaXBzZSA9IEQyRDE6OkVsbGlwc2UoRDJEMTo6UG9pbnQyRihlbGxp
cHNlLngoKSwgZWxsaXBzZS55KCkpLCBlbGxpcHNlLndpZHRoKCksIGVsbGlwc2UuaGVpZ2h0KCkp
OworICAgIGF1dG8gZDJkRWxsaXBzZSA9IEQyRDE6OkVsbGlwc2UoZWxsaXBzZS5jZW50ZXIoKSwg
MC41ICogZWxsaXBzZS53aWR0aCgpLCAwLjUgKiBlbGxpcHNlLmhlaWdodCgpKTsKIAogICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5TZXRUYWdzKDEsIF9fTElORV9fKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZl
ckRpcmVjdDJELmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Niw3ICs2Niw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXIK
ICAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBjb250ZXh0LnJlbmRlcmluZ01vZGUo
KTsKICAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZl
clNpemUoc2l6ZSwgY29udGV4dCk7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNjYWxlZFNp
emUsIDEsIENvbG9yU3BhY2VTUkdCLCByZW5kZXJpbmdNb2RlLCBjb250ZXh0LnBsYXRmb3JtQ29u
dGV4dCgpLCBzdWNjZXNzKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZm
ZXIobmV3IEltYWdlQnVmZmVyKHNjYWxlZFNpemUsIDEsIENvbG9yU3BhY2VTUkdCLCByZW5kZXJp
bmdNb2RlLCAmY29udGV4dCwgc3VjY2VzcykpOwogCiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTc2LDcgKzc2LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBJbWFnZUJ1ZmZlcgogICAgIHJldHVybiBidWZmZXI7CiB9CiAKLUltYWdlQnVmZmVy
OjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSAvKmNvbG9yU3BhY2UqLywgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
LCBJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0LCBib29sJiBzdWNjZXNzKQorSW1hZ2VC
dWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlIC8qY29sb3JTcGFjZSovLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwgYm9vbCYgc3VjY2Vz
cykKICAgICA6IG1fbG9naWNhbFNpemUoc2l6ZSkKICAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJl
c29sdXRpb25TY2FsZSkKIHsKQEAgLTEwMSw2ICsxMDEsNyBAQCBJbWFnZUJ1ZmZlcjo6SW1hZ2VC
dWZmZXIoY29uc3QgRmxvYXRTaXplCiAgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byByZW5kZXJUYXJnZXQgPSB0YXJnZXRDb250ZXh0
ID8gdGFyZ2V0Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiBudWxscHRyOwogICAgIGlmICgh
cmVuZGVyVGFyZ2V0KQogICAgICAgICByZW5kZXJUYXJnZXQgPSBHcmFwaGljc0NvbnRleHQ6OmRl
ZmF1bHRSZW5kZXJUYXJnZXQoKTsKICAgICBSRUxFQVNFX0FTU0VSVChyZW5kZXJUYXJnZXQpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRp
cmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODcsMTQgKzE4NywxNCBAQCB1bnNpZ25lZCBJbWFnZURlY29k
ZXI6OmZyYW1lQnl0ZXNBdEluZGV4CiAgICAgcmV0dXJuIHdpZHRoICogaGVpZ2h0ICogNDsKIH0K
IAotdm9pZCBJbWFnZURlY29kZXI6OnNldFJlbmRlclRhcmdldChJRDJEMVJlbmRlclRhcmdldCog
cmVuZGVyVGFyZ2V0KQordm9pZCBJbWFnZURlY29kZXI6OnNldFRhcmdldENvbnRleHQoSUQyRDFS
ZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKIHsKICAgICBtX3JlbmRlclRhcmdldCA9IHJlbmRl
clRhcmdldDsKIH0KIAogTmF0aXZlSW1hZ2VQdHIgSW1hZ2VEZWNvZGVyOjpjcmVhdGVGcmFtZUlt
YWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZl
bCwgRGVjb2RpbmdNb2RlKSBjb25zdAogewotICAgIGlmICghbV9uYXRpdmVEZWNvZGVyKQorICAg
IGlmICghbV9uYXRpdmVEZWNvZGVyIHx8ICFtX3JlbmRlclRhcmdldCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKICAgICBDT01QdHI8SVdJQ0JpdG1hcEZyYW1lRGVjb2RlPiBmcmFtZTsKQEAg
LTIxMSwxMCArMjExLDYgQEAgTmF0aXZlSW1hZ2VQdHIgSW1hZ2VEZWNvZGVyOjpjcmVhdGVGcmFt
ZQogICAgIGlmICghU1VDQ0VFREVEKGhyKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICBBU1NFUlQobV9yZW5kZXJUYXJnZXQpOwotICAgIGlmICghbV9yZW5kZXJUYXJnZXQpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCiAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7CiAg
ICAgaHIgPSBtX3JlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFwRnJvbVdpY0JpdG1hcChjb252ZXJ0
ZXIuZ2V0KCksIG51bGxwdHIsICZiaXRtYXApOwogICAgIGlmICghU1VDQ0VFREVEKGhyKSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJl
Y3QyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZURlY29kZXJEaXJlY3QyRC5oCShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0FsbERhdGFSZWNl
aXZlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNBbGxEYXRhUmVjZWl2ZWQ7IH0KICAgICB2b2lkIGNs
ZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpIHsgfQogCi0gICAgdm9pZCBzZXRSZW5kZXJUYXJn
ZXQoSUQyRDFSZW5kZXJUYXJnZXQqKTsKKyAgICB2b2lkIHNldFRhcmdldENvbnRleHQoSUQyRDFS
ZW5kZXJUYXJnZXQqKTsKIAogICAgIHN0YXRpYyBJV0lDSW1hZ2luZ0ZhY3RvcnkqIHN5c3RlbUlt
YWdpbmdGYWN0b3J5KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDIwNzI3NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVjdDJELmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTIsMTEgKzkyLDYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0Zy
YW1lTWF0Y2hpbmdTb3VyYwogICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KDAuMGYs
IDAuMGYsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBjb21wb3NpdGVP
cCwgQmxlbmRNb2RlTm9ybWFsLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oKSk7CiB9CiAK
LXZvaWQgQml0bWFwSW1hZ2U6OnNldFJlbmRlclRhcmdldChHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCi17Ci0gICAgbV9zb3VyY2Uuc2V0UmVuZGVyVGFyZ2V0KGNvbnRleHQpOwotfQotCiB2b2lk
IEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGN0eHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9O
YXRpdmVJbWFnZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDIwNzI3
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9OYXRpdmVJbWFnZURp
cmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorI2luY2x1ZGUgPGQyZDEuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0dGVybkRpcmVjdDJE
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
UGF0dGVybkRpcmVjdDJELmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdHRlcm5EaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDEyICszNyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSUQyRDFCaXRtYXBC
cnVzaCogUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKElEMkQxUmVuZGVyVGFyZ2V0KiBy
ZW5kZXJUYXJnZXQsIGZsb2F0IGFscGhhLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFj
ZVRyYW5zZm9ybWF0aW9uKSBjb25zdAorSUQyRDFCaXRtYXBCcnVzaCogUGF0dGVybjo6Y3JlYXRl
UGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgZmxvYXQgYWxw
aGEsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbnNmb3JtYXRpb24pIGNvbnN0
CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVuZGVyVGFyZ2V0KTsKLQotICAgIEZsb2F0UmVjdCB0
aWxlUmVjdCA9IHRpbGVJbWFnZSgpLT5yZWN0KCk7Ci0KICAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0
dGVyblRyYW5zZm9ybSA9IHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9uICogbV9wYXR0ZXJuU3BhY2VU
cmFuc2Zvcm1hdGlvbjsKICAgICBhdXRvIGJpdG1hcEJydXNoUHJvcGVydGllcyA9IEQyRDE6OkJp
dG1hcEJydXNoUHJvcGVydGllcygpOwogICAgIGJpdG1hcEJydXNoUHJvcGVydGllcy5leHRlbmRN
b2RlWCA9IG1fcmVwZWF0WCA/IEQyRDFfRVhURU5EX01PREVfV1JBUCA6IEQyRDFfRVhURU5EX01P
REVfQ0xBTVA7CkBAIC01Miw5ICs0OCwxNCBAQCBJRDJEMUJpdG1hcEJydXNoKiBQYXR0ZXJuOjpj
cmVhdGVQbGF0Zm9yCiAgICAgYnJ1c2hQcm9wZXJ0aWVzLnRyYW5zZm9ybSA9IHBhdHRlcm5UcmFu
c2Zvcm07CiAgICAgYnJ1c2hQcm9wZXJ0aWVzLm9wYWNpdHkgPSBhbHBoYTsKIAorICAgIGF1dG8g
cGF0dGVybkltYWdlID0gdGlsZUltYWdlKCk7CisKKyAgICBhdXRvIHBsYXRmb3JtQ29udGV4dCA9
IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAgUkVMRUFTRV9BU1NFUlQocGxhdGZvcm1D
b250ZXh0KTsKKwogICAgIElEMkQxQml0bWFwQnJ1c2gqIHBhdHRlcm5CcnVzaCA9IG51bGxwdHI7
Ci0gICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFwQnJ1c2godGlsZUlt
YWdlKCktPm5hdGl2ZUltYWdlKCkuZ2V0KCksICZiaXRtYXBCcnVzaFByb3BlcnRpZXMsICZicnVz
aFByb3BlcnRpZXMsICZwYXR0ZXJuQnJ1c2gpOwotICAgIEFTU0VSVChocik7CisgICAgSFJFU1VM
VCBociA9IHBsYXRmb3JtQ29udGV4dC0+Q3JlYXRlQml0bWFwQnJ1c2gocGF0dGVybkltYWdlLT5u
YXRpdmVJbWFnZSgmY29udGV4dCkuZ2V0KCksICZiaXRtYXBCcnVzaFByb3BlcnRpZXMsICZicnVz
aFByb3BlcnRpZXMsICZwYXR0ZXJuQnJ1c2gpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsK
ICAgICByZXR1cm4gcGF0dGVybkJydXNoOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAJKHJldmlzaW9uIDIwNzI3NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDEwIEBACiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKKyNpZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSA8
ZDJkMS5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGlubGluZSB2
b2lkIGVuZE1hdHJpeFJvdyhWZWN0b3I8ZmxvYXQ+JiBwYXJhbWV0ZXJzKQpAQCAtMzEzLDE1ICsz
MTcsMjAgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6dXBkYXRlQmFja2luZwogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyOjphbGxvY2F0ZUJhY2tp
bmdTdG9yZUlmTmVlZGVkKCkKK3ZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXI6OmFsbG9jYXRlQmFj
a2luZ1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRDb250ZXh0KQog
ewogICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIGVmZmVjdCBjaGFpbiBoYXMgYmVlbiBidWlsdCwg
YW5kIHRoZQogICAgIC8vIHNvdXJjZSBpbWFnZSBzaXplcyBzZXQuIFdlIGp1c3QgbmVlZCB0byBh
dHRhY2ggdGhlIGdyYXBoaWMKICAgICAvLyBidWZmZXIgaWYgd2UgaGF2ZSBub3QgeWV0IGRvbmUg
c28uCiAgICAgaWYgKCFtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQpIHsKICAgICAgICAgSW50U2l6
ZSBsb2dpY2FsU2l6ZShtX3NvdXJjZURyYXdpbmdSZWdpb24ud2lkdGgoKSwgbV9zb3VyY2VEcmF3
aW5nUmVnaW9uLmhlaWdodCgpKTsKLSAgICAgICAgaWYgKCFzb3VyY2VJbWFnZSgpIHx8IHNvdXJj
ZUltYWdlKCktPmxvZ2ljYWxTaXplKCkgIT0gbG9naWNhbFNpemUpCisgICAgICAgIGlmICghc291
cmNlSW1hZ2UoKSB8fCBzb3VyY2VJbWFnZSgpLT5sb2dpY2FsU2l6ZSgpICE9IGxvZ2ljYWxTaXpl
KSB7CisjaWYgVVNFKERJUkVDVDJEKQorICAgICAgICAgICAgc2V0U291cmNlSW1hZ2UoSW1hZ2VC
dWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSgpLCAmdGFyZ2V0Q29udGV4
dCwgZmlsdGVyU2NhbGUoKSkpOworI2Vsc2UKICAgICAgICAgICAgIHNldFNvdXJjZUltYWdlKElt
YWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUoKSwgZmlsdGVyU2Nh
bGUoKSkpOworI2VuZGlmCisgICAgICAgIH0KICAgICAgICAgbV9ncmFwaGljc0J1ZmZlckF0dGFj
aGVkID0gdHJ1ZTsKICAgICB9CiB9CkBAIC0zOTYsNyArNDA1LDcgQEAgYm9vbCBGaWx0ZXJFZmZl
Y3RSZW5kZXJlckhlbHBlcjo6YmVnaW5GaQogICAgIEFTU0VSVChtX3JlbmRlckxheWVyKTsKICAg
ICAKICAgICBGaWx0ZXJFZmZlY3RSZW5kZXJlciogZmlsdGVyID0gbV9yZW5kZXJMYXllci0+Zmls
dGVyUmVuZGVyZXIoKTsKLSAgICBmaWx0ZXItPmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQo
KTsKKyAgICBmaWx0ZXItPmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQobV90YXJnZXRDb250
ZXh0KTsKICAgICAvLyBQYWludCBpbnRvIHRoZSBjb250ZXh0IHRoYXQgcmVwcmVzZW50cyB0aGUg
U291cmNlR3JhcGhpYyBvZiB0aGUgZmlsdGVyLgogICAgIEdyYXBoaWNzQ29udGV4dCogc291cmNl
R3JhcGhpY3NDb250ZXh0ID0gZmlsdGVyLT5pbnB1dENvbnRleHQoKTsKICAgICBpZiAoIXNvdXJj
ZUdyYXBoaWNzQ29udGV4dCB8fCBmaWx0ZXItPmZpbHRlclJlZ2lvbigpLmlzRW1wdHkoKSB8fCBJ
bWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZmlsdGVyLT5maWx0ZXJSZWdpb24oKS5zaXpl
KCkpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVy
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0
UmVuZGVyZXIuaAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAK
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50OwpAQCAtNTcsOCArNTgsOSBA
QCBlbnVtIEZpbHRlckNvbnN1bWVyIHsKIGNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVy
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBGaWx0ZXJFZmZl
Y3RSZW5kZXJlckhlbHBlcihib29sIGhhdmVGaWx0ZXJFZmZlY3QpCi0gICAgICAgIDogbV9oYXZl
RmlsdGVyRWZmZWN0KGhhdmVGaWx0ZXJFZmZlY3QpCisgICAgRmlsdGVyRWZmZWN0UmVuZGVyZXJI
ZWxwZXIoYm9vbCBoYXZlRmlsdGVyRWZmZWN0LCBHcmFwaGljc0NvbnRleHQmIHRhcmdldENvbnRl
eHQpCisgICAgICAgIDogbV90YXJnZXRDb250ZXh0KHRhcmdldENvbnRleHQpCisgICAgICAgICwg
bV9oYXZlRmlsdGVyRWZmZWN0KGhhdmVGaWx0ZXJFZmZlY3QpCiAgICAgewogICAgIH0KICAgICAK
QEAgLTc3LDYgKzc5LDcgQEAgcHJpdmF0ZToKICAgICBSZW5kZXJMYXllciogbV9yZW5kZXJMYXll
ciB7IG51bGxwdHIgfTsgLy8gRklYTUU6IHRoaXMgaXMgbWFpbmx5IHVzZWQgdG8gZ2V0IHRoZSBG
aWx0ZXJFZmZlY3RSZW5kZXJlci4gRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXIgc2hvdWxkIGJl
IHdlYW5lZCBvZmYgaXQuCiAgICAgTGF5b3V0UG9pbnQgbV9wYWludE9mZnNldDsKICAgICBMYXlv
dXRSZWN0IG1fcmVwYWludFJlY3Q7CisgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBtX3Rhcmdl
dENvbnRleHQ7CiAgICAgYm9vbCBtX2hhdmVGaWx0ZXJFZmZlY3QgeyBmYWxzZSB9OwogICAgIGJv
b2wgbV9zdGFydGVkRmlsdGVyRWZmZWN0IHsgZmFsc2UgfTsKIH07CkBAIC0xMDcsNyArMTEwLDcg
QEAgcHVibGljOgogICAgIGJvb2wgYnVpbGQoUmVuZGVyRWxlbWVudCosIGNvbnN0IEZpbHRlck9w
ZXJhdGlvbnMmLCBGaWx0ZXJDb25zdW1lcik7CiAgICAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGJ1aWxkUmVmZXJlbmNlRmlsdGVyKFJlbmRlckVsZW1lbnQqLCBQYXNzUmVmUHRyPEZpbHRlckVm
ZmVjdD4gcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiopOwogICAgIGJv
b2wgdXBkYXRlQmFja2luZ1N0b3JlUmVjdChjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlY3QpOwot
ICAgIHZvaWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCgpOworICAgIHZvaWQgYWxsb2Nh
dGVCYWNraW5nU3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAgICB2b2lk
IGNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwogICAgIHZvaWQgYXBwbHkoKTsKICAgICAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMjA3
Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDE2OCw3ICs0MTY4LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGFzRmlsdGVy
VGhhdElzUGFpbnRpbgogICAgIGlmICghaGFzUGFpbnRlZEZpbHRlcikKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgYXV0byBmaWx0ZXJQYWludGVyID0gc3RkOjptYWtlX3VuaXF1ZTxGaWx0
ZXJFZmZlY3RSZW5kZXJlckhlbHBlcj4oaGFzUGFpbnRlZEZpbHRlcik7CisgICAgYXV0byBmaWx0
ZXJQYWludGVyID0gc3RkOjptYWtlX3VuaXF1ZTxGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcj4o
aGFzUGFpbnRlZEZpbHRlciwgY29udGV4dCk7CiAgICAgaWYgKCFmaWx0ZXJQYWludGVyLT5oYXZl
RmlsdGVyRWZmZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDE4Miw3ICs0MTgy
LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVySGVscAogCiAgICAgRmls
dGVySW5mbyogZmlsdGVySW5mbyA9IEZpbHRlckluZm86OmdldElmRXhpc3RzKCp0aGlzKTsKICAg
ICBib29sIGhhc1BhaW50ZWRGaWx0ZXIgPSBmaWx0ZXJJbmZvICYmIGZpbHRlckluZm8tPnJlbmRl
cmVyKCkgJiYgcGFpbnRzV2l0aEZpbHRlcnMoKTsKLSAgICBhdXRvIGZpbHRlclBhaW50ZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyPihoYXNQYWludGVkRmls
dGVyKTsKKyAgICBhdXRvIGZpbHRlclBhaW50ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEZpbHRlckVm
ZmVjdFJlbmRlcmVySGVscGVyPihoYXNQYWludGVkRmlsdGVyLCBjb250ZXh0KTsKIAogICAgIExh
eW91dFJlY3QgZmlsdGVyUmVwYWludFJlY3QgPSBmaWx0ZXJJbmZvLT5kaXJ0eVNvdXJjZVJlY3Qo
KTsKICAgICBmaWx0ZXJSZXBhaW50UmVjdC5tb3ZlKG9mZnNldEZyb21Sb290KTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkocmV2aXNpb24gMjA3Mjc1KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTQsNiArNTQsMTEgQEAKICNpbmNsdWRlIDxydW50aW1lL0pTQ0lubGluZXMuaD4KICNp
bmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogCisjaWYgVVNFKERJUkVDVDJEKQorI2luY2x1ZGUg
IkNPTVB0ci5oIgorI2luY2x1ZGUgPGQyZDEuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIFNWR0ltYWdlOjpTVkdJbWFnZShJbWFnZU9ic2VydmVyJiBvYnNlcnZlciwgY29uc3Qg
VVJMJiB1cmwpCkBAIC0xODcsNyArMTkyLDcgQEAgdm9pZCBTVkdJbWFnZTo6ZHJhd0ZvckNvbnRh
aW5lcihHcmFwaGljcwogI2lmIFVTRShDQUlSTykKIC8vIFBhc3NlcyBvd25lcnNoaXAgb2YgdGhl
IG5hdGl2ZSBpbWFnZSB0byB0aGUgY2FsbGVyIHNvIE5hdGl2ZUltYWdlUHRyIG5lZWRzCiAvLyB0
byBiZSBhIHNtYXJ0IHBvaW50ZXIgdHlwZS4KLU5hdGl2ZUltYWdlUHRyIFNWR0ltYWdlOjpuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCitOYXRpdmVJbWFnZVB0ciBTVkdJbWFnZTo6bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KikKIHsKICAgICBpZiAo
IW1fcGFnZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMDQsNiArMjA5LDM4IEBAIE5h
dGl2ZUltYWdlUHRyIFNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckMKIH0KICNlbmRpZgogCisjaWYg
VVNFKERJUkVDVDJEKQorTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCkKK3sKKyAgICBBU1NFUlQodGFyZ2V0Q29u
dGV4dCk7CisgICAgaWYgKCFtX3BhZ2UgfHwgIXRhcmdldENvbnRleHQpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgYXV0byBwbGF0Zm9ybUNvbnRleHQgPSB0YXJnZXRDb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKTsKKyAgICBBU1NFUlQocGxhdGZvcm1Db250ZXh0KTsKKworICAgIC8v
IERyYXcgdGhlIFNWRyBpbnRvIGEgYml0bWFwLgorICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRl
clRhcmdldD4gbmF0aXZlSW1hZ2VUYXJnZXQ7CisgICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29u
dGV4dC0+Q3JlYXRlQ29tcGF0aWJsZVJlbmRlclRhcmdldChJbnRTaXplKHJlY3QoKS5zaXplKCkp
LCAmbmF0aXZlSW1hZ2VUYXJnZXQpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAg
IG5hdGl2ZUltYWdlVGFyZ2V0LT5CZWdpbkRyYXcoKTsKKyAgICBHcmFwaGljc0NvbnRleHQgbG9j
YWxDb250ZXh0KG5hdGl2ZUltYWdlVGFyZ2V0LmdldCgpKTsKKyAgICBsb2NhbENvbnRleHQuc2V0
RGlkQmVnaW5EcmF3KHRydWUpOworCisgICAgZHJhdyhsb2NhbENvbnRleHQsIHJlY3QoKSwgcmVj
dCgpLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBCbGVuZE1vZGVOb3JtYWwsIEltYWdlT3JpZW50YXRp
b25EZXNjcmlwdGlvbigpKTsKKworICAgIGhyID0gbmF0aXZlSW1hZ2VUYXJnZXQtPkZsdXNoKCk7
CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBu
YXRpdmVJbWFnZTsKKyAgICBociA9IG5hdGl2ZUltYWdlVGFyZ2V0LT5HZXRCaXRtYXAoJm5hdGl2
ZUltYWdlKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICByZXR1cm4gbmF0aXZl
SW1hZ2U7Cit9CisjZW5kaWYKKwogdm9pZCBTVkdJbWFnZTo6ZHJhd1BhdHRlcm5Gb3JDb250YWlu
ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFNpemUmIGNvbnRhaW5lclNp
emUsIGZsb2F0IHpvb20sIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKICAgICBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBj
b25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkocmV2aXNpb24gMjA3Mjc1KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDcgKzY2LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0QW5pbWF0aW9uKCkgZmluYWw7
CiAKICNpZiBVU0UoQ0FJUk8pCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKSBmaW5hbDsKKyAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgZmluYWw7CisjZW5kaWYK
KyNpZiBVU0UoRElSRUNUMkQpCisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoY29uc3Qg
R3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpIGZpbmFsOwogI2VuZGlmCiAKIHByaXZhdGU6Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNv
bnRhaW5lci5jcHAJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2
LDkgQEAgdm9pZCBTVkdJbWFnZUZvckNvbnRhaW5lcjo6ZHJhd1BhdHRlcm4oRwogICAgIG1faW1h
Z2UtPmRyYXdQYXR0ZXJuRm9yQ29udGFpbmVyKGNvbnRleHQsIG1fY29udGFpbmVyU2l6ZSwgbV96
b29tLCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgY29tcG9zaXRl
T3AsIGRzdFJlY3QsIGJsZW5kTW9kZSk7CiB9CiAKLU5hdGl2ZUltYWdlUHRyIFNWR0ltYWdlRm9y
Q29udGFpbmVyOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCitOYXRpdmVJbWFnZVB0ciBT
VkdJbWFnZUZvckNvbnRhaW5lcjo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0KQogewotICAgIHJldHVybiBtX2ltYWdlLT5uYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIHJldHVybiBtX2ltYWdlLT5uYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSh0YXJnZXRDb250ZXh0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9yQ29udGFp
bmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
Rm9yQ29udGFpbmVyLmgJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2
Myw3IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgdG8gYmUgbGVzcyBj
b25zZXJ2YXRpdmUuCiAgICAgYm9vbCBjdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoKSBmaW5hbDsKKyAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgZmluYWw7
CiAKIHByaXZhdGU6CiAgICAgU1ZHSW1hZ2VGb3JDb250YWluZXIoU1ZHSW1hZ2UqIGltYWdlLCBj
b25zdCBGbG9hdFNpemUmIGNvbnRhaW5lclNpemUsIGZsb2F0IHpvb20pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291650</attachid>
            <date>2016-10-14 10:53:38 -0700</date>
            <delta_ts>2016-10-14 14:22:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163349-20161014105010.patch</filename>
            <type>text/plain</type>
            <size>37363</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzMxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg0IEBACisyMDE2LTEwLTEzICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBJ
bXBsZW1lbnQgYmFzaWMgU1ZHIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MzM0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIERpcmVjdDJEIG5lZWRzIGFjY2VzcyB0byB0aGUgdGFyZ2V0IGdy
YXBoaWNzIGNvbnRleHQgd2hlbiBnZW5lcmF0aW5nIGJpdG1hcAorICAgICAgICBpbWFnZXMgc28g
dGhhdCBpdCBjYW4gcHJvcGVybHkgbWF0Y2ggcGl4ZWwgZm9ybWF0IGFuZCBvdGhlciBzZXR0aW5n
cy4KKworICAgICAgICBBZGQgaW1wbGVtZW50YXRpb25zIGZvciBhIG51bWJlciBvZiBkcmF3aW5n
IHByaW1pdGl2ZXMgdXNlZCBpbiB0aGUgU1ZHCisgICAgICAgIHRlc3QgY2FzZXMuIENvcnJlY3Qg
c29tZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIENHIGFuZCBEaXJlY3QyRCBmb3IgZHJhd2luZworICAg
ICAgICBkaWZmZXJlbnQgcHJpbWl0aXZlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRlc3Rl
ZCBieSBleGlzdGluZyAnc3ZnJyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFt
ZUltYWdlQXRJbmRleCk6IFRha2Ugb3B0aW9uYWwgdGFyZ2V0IGdyYXBoaWNzCisgICAgICAgICAg
IGNvbnRleHQuIEFsc28gcGFzcyB0aGUgZ3JhcGhpY3MgY29udGV4dCB0byB0aGUgaW1hZ2UgZGVj
b2Rlci4KKyAgICAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSk6IEFj
Y2VwdCBhbiBvcHRpb25hbCB0YXJnZXQgY29udGV4dC4KKyAgICAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6IERpdHRvLgorICAgICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOiBQYXNzIHRhcmdldCBncmFwaGljcyBjb250
ZXh0IHRvIHRoZQorICAgICAgICAgICAnZnJhbWVJbWFnZUF0SW5kZXgnIG1ldGhvZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6IE1vdmVkIGZy
b20gaGVhZGVyLiBBZGQgY3JlYXRlIGZ1bmN0aW9uIHRoYXQKKyAgICAgICAgdGFrZXMgYW4gb3B0
aW9uYWwgR3JhcGhpY3NDb250ZXh0IGFyZ3VtZW50LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFt
ZUNhY2hlLmNwcDogQWRkIG1pc3NpbmcgaW5jbHVkZSBuZWVkZWQgdG8gYnVpbGQKKyAgICAgICAg
dW5kZXIgRGlyZWN0MkQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldERlY29kZXJUYXJnZXRDb250
ZXh0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0UmVuZGVyVGFy
Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjplbmREcmF3KTogTG9nIGVy
cm9yIHN0YXRlIGluc3RlYWQgb2YgY3Jhc2hpbmcKKyAgICAgICAgZWFjaCB0aW1lLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZSk6IEVsbGlwc2VzIGFyZSBk
ZWZpbmVkIGluIEQyRCBhcyBhIGNlbnRlciwgYW4KKyAgICAgICAgWC1yYWRpdXMsIGFuZCBhIFkt
cmFkaXVzLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBh
dHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0
ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KTogVXNl
ICdDbGVhcicgZnVuY3Rpb24gaWYgcG9zc2libGUuIERvbid0IGNsZWFyCisgICAgICAgIGFueXRo
aW5nIGlmIHRoZSBjbGVhciByZWN0IGlzIG91dHNpZGUgdGhlIGRyYXdpbmcgYXJlYS4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6IFByb3ZpZGUgaW1wbGVt
ZW50YXRpb24gKG5lZWRlZCBieSBTVkcpLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKTogRWxsaXBzZXMgYXJlIGRlZmluZWQgaW4gRDJEIGFz
CisgICAgICAgIGEgY2VudGVyLCBhbiBYLXJhZGl1cywgYW5kIGEgWS1yYWRpdXMuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZSk6IERpdHRv
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KTogQWNjZXB0IG9wdGlvbmFsIEdyYXBoaWNzQ29udGV4dCBhcmd1bWVudC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcik6IERpdHRvLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kZXI6OnNldFRhcmdldENvbnRleHQpOiBSZW5hbWVkIGZyb20gJ3NldFJl
bmRlclRhcmdldCcuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmNyZWF0ZUZyYW1l
SW1hZ2VBdEluZGV4KTogVGFrZSBvcHRpb25hbCBHcmFwaGljc0NvbnRleHQgYXJndW1lbnQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNldFJlbmRlclRhcmdldCk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGlyZWN0MkQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnNldFJlbmRlclRhcmdldCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3BwOiBB
ZGQgbWlzc2luZyBpbmNsdWRlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0
ZXJuRGlyZWN0MkQuY3BwOiAKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRm
b3JtUGF0dGVybik6IFJldmlzZSBmb3IgbmV3IHNpZ25hdHVyZS4KKyAgICAgICAgKiByZW5kZXJp
bmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0UmVuZGVyZXI6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQpOiBQYXNzIEdyYXBoaWNz
Q29udGV4dAorICAgICAgICB0byBJbWFnZUJ1ZmZlciBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOjpiZWdpbkZpbHRlckVmZmVjdCk6IFBh
c3MgdGFyZ2V0IGNvbnRleHQgdG8KKyAgICAgICAgZmlsdGVyIHdoZW4gYWxsb2NhdGluZyBiYWNr
aW5nIHN0b3JlLgorICAgICAgICAqIHJlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oOiBB
ZGQgR3JhcGhpY3NDb250ZXh0IGFzIGFyZ3VtZW50IHRvIGNvbnN0cnVjdG9yLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6aGFzRmlsdGVyVGhhdElzUGFpbnRpbmcpOiBTdXBwbHkgR3JhcGhpY3NDb250ZXh0IGFyZ3Vt
ZW50IHdoZW4KKyAgICAgICAgYnVpbGRpbmcgbmV3IEZpbHRlckVmZmVjdFJlbmRlcmVyIGFuZCBo
ZWxwZXIuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0dXBGaWx0ZXJzKTogRGl0
dG8uCisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6IFJldmlzZSB0byB0YWtl
IG9wdGlvbmFsIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBhcmd1bWVudC4KKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZSk6IERpdHRvLgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9TVkdJbWFnZS5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRh
aW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUZvckNvbnRhaW5lcjo6bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUpOiBEaXR0by4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZH
SW1hZ2VGb3JDb250YWluZXIuaDoKKwogMjAxNi0xMC0xMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgogCiAgICAgICAgIFtXZWIgSURMXSBBZGQgc3VwcG9ydCBmb3IgW1NhbWVPYmpl
Y3RdIGV4dGVuZGVkIGF0dHJpYnV0ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MCwzOSArODAsNDIgQEAgYm9vbCBCaXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBh
bGxEYQogICAgIHJldHVybiBtX3NvdXJjZS5kYXRhQ2hhbmdlZChkYXRhKCksIGFsbERhdGFSZWNl
aXZlZCk7CiB9CiAKLU5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRl
eChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkKK05hdGl2
ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJz
YW1wbGluZ0xldmVsKQogewogICAgIGlmIChmcmFtZUhhc0ludmFsaWROYXRpdmVJbWFnZUF0SW5k
ZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpKSB7CiAgICAgICAgIExPRyhJbWFnZXMsICJCaXRt
YXBJbWFnZSAlcCBmcmFtZUltYWdlQXRJbmRleCAtIHN1YnNhbXBsaW5nTGV2ZWwgd2FzICVkLCBy
ZXNhbXBsaW5nIiwgdGhpcywgc3RhdGljX2Nhc3Q8aW50PihmcmFtZVN1YnNhbXBsaW5nTGV2ZWxB
dEluZGV4KGluZGV4KSkpOwogICAgICAgICBpbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7CiAgICAg
fQogCisgICAgaWYgKHRhcmdldENvbnRleHQpCisgICAgICAgIG1fc291cmNlLnNldERlY29kZXJU
YXJnZXRDb250ZXh0KCp0YXJnZXRDb250ZXh0KTsKKwogICAgIHJldHVybiBtX3NvdXJjZS5mcmFt
ZUltYWdlQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7CiB9CiAKLU5hdGl2ZUltYWdl
UHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSgpCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFn
ZTo6bmF0aXZlSW1hZ2UoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0KQogewot
ICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0
SW5kZXgoMCwgdGFyZ2V0Q29udGV4dCk7CiB9CiAKLU5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdl
OjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFn
ZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJn
ZXRDb250ZXh0KQogewotICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFt
ZSk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lLCB0YXJnZXRD
b250ZXh0KTsKIH0KIAogI2lmIFVTRShDRykKLU5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpu
YXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQorTmF0aXZlSW1hZ2VQdHIgQml0
bWFwSW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCkKIHsKICAgICBzaXplX3QgY291bnQgPSBmcmFt
ZUNvdW50KCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAg
ICAgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpOworICAgICAgICBhdXRvIGlt
YWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSwgdGFyZ2V0Q29udGV4dCk7CiAgICAgICAgIGlmIChp
bWFnZSAmJiBuYXRpdmVJbWFnZVNpemUoaW1hZ2UpID09IHNpemUpCiAgICAgICAgICAgICByZXR1
cm4gaW1hZ2U7CiAgICAgfQogCiAgICAgLy8gRmFsbGJhY2sgdG8gdGhlIGZpcnN0IGZyYW1lIGlt
YWdlIGlmIHdlIGNhbid0IGZpbmQgdGhlIHJpZ2h0IHNpemUKLSAgICByZXR1cm4gZnJhbWVJbWFn
ZUF0SW5kZXgoMCk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KDAsIHRhcmdldENvbnRl
eHQpOwogfQogCiBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IEJpdG1hcEltYWdlOjpmcmFtZXNOYXRp
dmVJbWFnZXMoKQpAQCAtMTQxLDEwICsxNDQsNiBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCYgCiAgICAgaWYgKGRlc3RSZWN0LmlzRW1wdHkoKSB8fCBzcmNSZWN0Lmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIHNldFJl
bmRlclRhcmdldChjb250ZXh0KTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIHN0
YXJ0QW5pbWF0aW9uKERvTm90Q2F0Y2hVcCk7CiAjZWxzZQpAQCAtMTYxLDcgKzE2MCw3IEBAIHZv
aWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiAKICAgICBTdWJzYW1wbGluZ0xl
dmVsIHN1YnNhbXBsaW5nTGV2ZWwgPSBtX3NvdXJjZS5zdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUo
c2NhbGUpOwogICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZSAlcCBkcmF3IC0gc3Vic2FtcGxp
bmdMZXZlbCAlZCBhdCBzY2FsZSAlLjRmIiwgdGhpcywgc3RhdGljX2Nhc3Q8aW50PihzdWJzYW1w
bGluZ0xldmVsKSwgc2NhbGUpOwogCi0gICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4
KG1fY3VycmVudEZyYW1lLCBzdWJzYW1wbGluZ0xldmVsKTsKKyAgICBhdXRvIGltYWdlID0gZnJh
bWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsICZjb250ZXh0LCBzdWJzYW1wbGluZ0xldmVs
KTsKICAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFu
IGltYWdlIHlldC4KICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExNywyMSArMTE3LDE4IEBAIHB1YmxpYzoKICAgICBFdmFzX09iamVjdCogZ2V0RXZh
c09iamVjdChFdmFzKikgb3ZlcnJpZGU7CiAjZW5kaWYKIAotICAgIFdFQkNPUkVfRVhQT1JUIE5h
dGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgb3ZlcnJpZGU7Ci0gICAgTmF0aXZlSW1hZ2VQdHIg
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVs
bHB0cikgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpIG92ZXJyaWRlOwogI2lmIFVT
RShDRykKLSAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXpl
Jikgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VPZlNpemUoY29uc3Qg
SW50U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSBvdmVycmlkZTsKICAg
ICBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIG92ZXJyaWRlOwog
I2VuZGlmCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIHZvaWQgc2V0UmVuZGVyVGFyZ2V0KEdyYXBo
aWNzQ29udGV4dCYpOwotI2VuZGlmCiAKIHByb3RlY3RlZDoKICAgICBXRUJDT1JFX0VYUE9SVCBC
aXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0ciYmLCBJbWFnZU9ic2VydmVyKiA9IG51bGxwdHIpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIEJpdG1hcEltYWdlKEltYWdlT2JzZXJ2ZXIqID0gbnVsbHB0cik7
CiAKLSAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBs
aW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKKyAgICBOYXRpdmVJbWFnZVB0
ciBmcmFtZUltYWdlQXRJbmRleChzaXplX3QsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxs
cHRyLCBTdWJzYW1wbGluZ0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCk7CiAKICAg
ICAvLyBDYWxsZWQgdG8gaW52YWxpZGF0ZSBjYWNoZWQgZGF0YS4gV2hlbiB8ZGVzdHJveUFsbHwg
aXMgdHJ1ZSwgd2Ugd2lwZSBvdXQKICAgICAvLyB0aGUgZW50aXJlIGZyYW1lIGJ1ZmZlciBjYWNo
ZSBhbmQgdGVsbCB0aGUgaW1hZ2Ugc291cmNlIHRvIGRlc3Ryb3kKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3
LDkgKzEzNyw5IEBAIHB1YmxpYzoKIAogICAgIGVudW0gVGlsZVJ1bGUgeyBTdHJldGNoVGlsZSwg
Um91bmRUaWxlLCBTcGFjZVRpbGUsIFJlcGVhdFRpbGUgfTsKIAotICAgIHZpcnR1YWwgTmF0aXZl
SW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgdmlydHVhbCBO
YXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4g
bnVsbHB0cjsgfQotICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0
ciBuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgeyByZXR1cm4g
bnVsbHB0cjsgfQorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VPZlNpemUo
Y29uc3QgSW50U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSB7IHJldHVy
biBudWxscHRyOyB9CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgeyByZXR1cm4gbnVs
bHB0cjsgfQogICAgIHZpcnR1YWwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkZvckN1cnJl
bnRGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsgfQogICAgIHZpcnR1
YWwgVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBmcmFtZXNOYXRpdmVJbWFnZXMoKSB7IHJldHVybiB7
IH07IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyLmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNywy
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZExl
bmd0aCA9IDQwOTY7CiBzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZEFyZWEgPSBNYXhDbGFt
cGVkTGVuZ3RoICogTWF4Q2xhbXBlZExlbmd0aDsKIAorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBzdWNjZXNzKSk7CisgICAgaWYgKCFzdWNj
ZXNzKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gYnVmZmVyOworfQorCisj
aWYgVVNFKERJUkVDVDJEKQorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgYm9vbCBzdWNjZXNzID0g
ZmFsc2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdl
QnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwg
Z3JhcGhpY3NDb250ZXh0LCBzdWNjZXNzKSk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gYnVmZmVyOworfQorI2VuZGlmCisKIGJvb2wgSW1h
Z2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKICAg
ICBpZiAoc2l6ZS5pc0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0
LDE0ICs3NCwxMCBAQCBjbGFzcyBJbWFnZUJ1ZmZlciB7CiAgICAgZnJpZW5kIGNsYXNzIElPU3Vy
ZmFjZTsKIHB1YmxpYzoKICAgICAvLyBXaWxsIHJldHVybiBhIG51bGwgcG9pbnRlciBvbiBhbGxv
Y2F0aW9uIGZhaWx1cmUuCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBDb2xv
clNwYWNlU1JHQikKLSAgICB7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBzdWNjZXNzKSk7
Ci0gICAgICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICByZXR1cm4gYnVmZmVyOwotICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENvbG9yU3Bh
Y2VTUkdCKTsKKyNpZiBVU0UoRElSRUNUMkQpCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRl
cmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCosIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9
IDEsIENvbG9yU3BhY2UgPSBDb2xvclNwYWNlU1JHQik7CisjZW5kaWYKIAogICAgIC8vIENyZWF0
ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0LCB3aXRoIHN1aXRh
YmxlIHJlc29sdXRpb24gZm9yIGRyYXdpbmcgaW50byB0aGUgYnVmZmVyIGFuZCB0aGVuIGludG8g
dGhpcyBjb250ZXh0LgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNy
ZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250
ZXh0Jik7CkBAIC0xODIsNyArMTc4LDcgQEAgcHJpdmF0ZToKICNpZiBVU0UoQ0cpCiAgICAgSW1h
Z2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDR0NvbG9y
U3BhY2VSZWYsIFJlbmRlcmluZ01vZGUsIGJvb2wmIHN1Y2Nlc3MpOwogI2VsaWYgVVNFKERJUkVD
VDJEKQotICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgSUQyRDFSZW5kZXJUYXJnZXQqLCBib29s
JiBzdWNjZXNzKTsKKyAgICBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCosIGJvb2wmIHN1Y2Nlc3MpOwogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5jcHAJKHJldmlz
aW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJh
bWVDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDkgQEAKIAogI2lmIFVTRShD
RykKICNpbmNsdWRlICJJbWFnZURlY29kZXJDRy5oIgorI2VsaWYgVVNFKERJUkVDVDJEKQorI2lu
Y2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgiCisjaW5jbHVkZSA8V2luQ29kZWMuaD4KICNl
bHNlCiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAJKHJldmlzaW9uIDIw
NzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDE1ICsxMTUsMTcgQEAgYm9vbCBJbWFnZVNvdXJjZTo6
ZW5zdXJlRGVjb2RlckF2YWlsYWJsZQogICAgIHJldHVybiB0cnVlOwogfQogCi0jaWYgVVNFKERJ
UkVDVDJEKQotdm9pZCBJbWFnZVNvdXJjZTo6c2V0UmVuZGVyVGFyZ2V0KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKK3ZvaWQgSW1hZ2VTb3VyY2U6OnNldERlY29kZXJUYXJnZXRDb250ZXh0KGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKKyNpZiBVU0UoRElSRUNUMkQpCiAgICAg
aWYgKCFpc0RlY29kZXJBdmFpbGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kZWNv
ZGVyLT5zZXRSZW5kZXJUYXJnZXQoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSk7Ci19CisgICAg
bV9kZWNvZGVyLT5zZXRUYXJnZXRDb250ZXh0KGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CiAjZW5kaWYKK30KIAogdm9pZCBJbWFn
ZVNvdXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVk
KQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNv
dXJjZS5oCShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw3IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgZW5zdXJlRGVjb2RlckF2YWlsYWJsZShTaGFyZWRCdWZmZXIqKTsKICAg
ICBib29sIGlzRGVjb2RlckF2YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2Rlci5nZXQo
KTsgfQorICAgIHZvaWQgc2V0RGVjb2RlclRhcmdldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250
ZXh0Jik7CiAKICNpZiBVU0UoRElSRUNUMkQpCiAgICAgdm9pZCBzZXRSZW5kZXJUYXJnZXQoR3Jh
cGhpY3NDb250ZXh0Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
YXR0ZXJuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0dGVybi5oCShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QYXR0ZXJuLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDYgQEAgdHlwZWRl
ZiBzdHJ1Y3QgQ0dQYXR0ZXJuKiBDR1BhdHRlcm5SZWY7CiB0eXBlZGVmIENHUGF0dGVyblJlZiBQ
bGF0Zm9ybVBhdHRlcm5QdHI7CiAjZWxpZiBVU0UoRElSRUNUMkQpCiBpbnRlcmZhY2UgSUQyRDFC
aXRtYXBCcnVzaDsKLWludGVyZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKIHR5cGVkZWYgSUQyRDFC
aXRtYXBCcnVzaCogUGxhdGZvcm1QYXR0ZXJuUHRyOwogI2VsaWYgVVNFKENBSVJPKQogI2luY2x1
ZGUgPGNhaXJvLmg+CkBAIC01MSw2ICs1MCw3IEBAIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1QYXR0
ZXJuUHRyOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07Citj
bGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBJbWFnZTsKIAogY2xhc3MgUGF0dGVybiBmaW5h
bCA6IHB1YmxpYyBSZWZDb3VudGVkPFBhdHRlcm4+IHsKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGlj
OgogI2lmICFVU0UoRElSRUNUMkQpCiAgICAgUGxhdGZvcm1QYXR0ZXJuUHRyIGNyZWF0ZVBsYXRm
b3JtUGF0dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9u
KSBjb25zdDsKICNlbHNlCi0gICAgUGxhdGZvcm1QYXR0ZXJuUHRyIGNyZWF0ZVBsYXRmb3JtUGF0
dGVybihJRDJEMVJlbmRlclRhcmdldCosIGZsb2F0IGFscGhhLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9uKSBjb25zdDsKKyAgICBQbGF0Zm9ybVBhdHRlcm5Q
dHIgY3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYsIGZsb2F0IGFs
cGhhLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9uKSBjb25z
dDsKICNlbmRpZgogICAgIHZvaWQgc2V0UGF0dGVyblNwYWNlVHJhbnNmb3JtKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblNwYWNlVHJhbnNmb3JtYXRpb24pOwogICAgIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgZ2V0UGF0dGVyblNwYWNlVHJhbnNmb3JtKCkgeyByZXR1cm4gbV9wYXR0ZXJu
U3BhY2VUcmFuc2Zvcm1hdGlvbjsgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJE
LmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM4
LDcgKzMzOCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjplbmQKICAg
ICBEMkQxX1RBRyBmaXJzdCwgc2Vjb25kOwogICAgIEhSRVNVTFQgaHIgPSBtX3JlbmRlclRhcmdl
dC0+RW5kRHJhdygmZmlyc3QsICZzZWNvbmQpOwogCi0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VF
REVEKGhyKSk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICBXVEZMb2dBbHdheXMo
IkNyYXNoZWQgaW4gRW5kRHJhdzogaHI9JWxkLCBmaXJzdD0lbGQsIHNlY29uZD0lbGQiLCBociwg
Zmlyc3QsIHNlY29uZCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
OjpyZXN0b3JlKCkKQEAgLTczNiw3ICs3MzcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0VsbGlwc2UoY29uc3QgCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGVsbGlw
c2UgPSBEMkQxOjpFbGxpcHNlKEQyRDE6OlBvaW50MkYocmVjdC54KCksIHJlY3QueSgpKSwgcmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBhdXRvIGVsbGlwc2UgPSBEMkQxOjpFbGxp
cHNlKHJlY3QuY2VudGVyKCksIDAuNSAqIHJlY3Qud2lkdGgoKSwgMC41ICogcmVjdC5oZWlnaHQo
KSk7CiAKICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIApAQCAtNzU4LDcg
Kzc1OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4KICAgICBB
ZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5
IG5lZWRlZCBvbiBXaW5kb3dzCiAKICAgICBjb25zdCBmbG9hdCBwYXR0ZXJuQWxwaGEgPSAxOwot
ICAgIG1fZGF0YS0+bV9wYXR0ZXJuU3Ryb2tlQnJ1c2ggPSBhZG9wdENPTShtX3N0YXRlLnN0cm9r
ZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb250ZXh0LCBwYXR0ZXJuQWxwaGEsIHVz
ZXJUb0Jhc2VDVE0pKTsKKyAgICBtX2RhdGEtPm1fcGF0dGVyblN0cm9rZUJydXNoID0gYWRvcHRD
T00obV9zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oKnRoaXMsIHBh
dHRlcm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
YXBwbHlGaWxsUGF0dGVybigpCkBAIC03NzAsNyArNzcxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmFwcGx5RmlsbFBhdHRlcm4oKQogICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RN
OyAvLyBGSVhNRTogVGhpcyBpc24ndCByZWFsbHkgbmVlZGVkIG9uIFdpbmRvd3MKIAogICAgIGNv
bnN0IGZsb2F0IHBhdHRlcm5BbHBoYSA9IDE7Ci0gICAgbV9kYXRhLT5tX3BhdHRlcm5GaWxsQnJ1
c2ggPSBhZG9wdENPTShtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4o
Y29udGV4dCwgcGF0dGVybkFscGhhLCB1c2VyVG9CYXNlQ1RNKSk7CisgICAgbV9kYXRhLT5tX3Bh
dHRlcm5GaWxsQnJ1c2ggPSBhZG9wdENPTShtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0
Zm9ybVBhdHRlcm4oKnRoaXMsIHBhdHRlcm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTEzMjks
MjQgKzEzMzAsNTggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbAog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250
ZXh0KCk7Ci0KLSAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKLQogICAgIGRyYXdX
aXRob3V0U2hhZG93KHJlY3QsIFt0aGlzLCByZWN0XShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVy
VGFyZ2V0KSB7Ci0gICAgICAgIEZsb2F0U2l6ZSByZW5kZXJUYXJnZXRTaXplID0gcmVuZGVyVGFy
Z2V0LT5HZXRTaXplKCk7Ci0gICAgICAgIGlmIChyZWN0LnNpemUoKSA9PSByZW5kZXJUYXJnZXRT
aXplKQorICAgICAgICBGbG9hdFJlY3QgcmVuZGVyVGFyZ2V0U2l6ZShGbG9hdFBvaW50KCksIHJl
bmRlclRhcmdldC0+R2V0U2l6ZSgpKTsKKyAgICAgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0KHJl
Y3QpOworCisgICAgICAgIGlmICh2aXNpYmxlUmVjdC5jb250YWlucyhyZW5kZXJUYXJnZXRTaXpl
KSkgeworICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKICAg
ICAgICAgICAgIHJlbmRlclRhcmdldC0+Q2xlYXIoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgcmVuZGVyVGFyZ2V0LT5GaWxsUmVjdGFuZ2xlKHJlY3QsIG1fZGF0YS0+YnJ1c2hXaXRoQ29s
b3IoY29sb3JXaXRoR2xvYmFsQWxwaGEoZmlsbENvbG9yKCkpKS5nZXQoKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXZpc2libGVSZWN0LmludGVyc2Vj
dHMocmVuZGVyVGFyZ2V0U2l6ZSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgcmVu
ZGVyVGFyZ2V0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKKyAgICAgICAgdmlzaWJsZVJlY3QuaW50
ZXJzZWN0KHJlbmRlclRhcmdldFNpemUpOworICAgICAgICByZW5kZXJUYXJnZXQtPkZpbGxSZWN0
YW5nbGUodmlzaWJsZVJlY3QsIG1fZGF0YS0+YnJ1c2hXaXRoQ29sb3IoY29sb3JXaXRoR2xvYmFs
QWxwaGEoZmlsbENvbG9yKCkpKS5nZXQoKSk7CiAgICAgfSk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRo
KQogewotICAgICh2b2lkKXJlY3Q7Ci0gICAgKHZvaWQpbGluZVdpZHRoOwotICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVy
LT5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCkgeworICAgICAgICBhdXRvIGRyYXdGdW5j
dGlvbiA9IFt0aGlzLCByZWN0LCBsaW5lV2lkdGhdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJU
YXJnZXQpIHsKKyAgICAgICAgICAgIHJlbmRlclRhcmdldC0+U2V0VGFncygxLCBfX0xJTkVfXyk7
CisgICAgICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKKyAgICAgICAg
ICAgIHJlbmRlclRhcmdldC0+RHJhd1JlY3RhbmdsZSgmZDJkUmVjdCwgbV9zdGF0ZS5zdHJva2VH
cmFkaWVudC0+Y3JlYXRlUGxhdGZvcm1HcmFkaWVudElmTmVjZXNzYXJ5KHJlbmRlclRhcmdldCks
IGxpbmVXaWR0aCwgbV9kYXRhLT5zdHJva2VTdHlsZSgpKTsKKyAgICAgICAgfTsKKworICAgICAg
ICBpZiAoaGFzU2hhZG93KCkpCisgICAgICAgICAgICBkcmF3V2l0aFNoYWRvdyhyZWN0LCBkcmF3
RnVuY3Rpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkcmF3V2l0aG91dFNoYWRvdyhy
ZWN0LCBkcmF3RnVuY3Rpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1f
c3RhdGUuc3Ryb2tlUGF0dGVybikKKyAgICAgICAgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CisKKyAg
ICBkcmF3V2l0aG91dFNoYWRvdyhyZWN0LCBbdGhpcywgcmVjdCwgbGluZVdpZHRoXShJRDJEMVJl
bmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CisgICAgICAgIHJlbmRlclRhcmdldC0+U2V0VGFn
cygxLCBfX0xJTkVfXyk7CisgICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0
OworICAgICAgICBhdXRvIGJydXNoID0gbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID8gcGF0dGVyblN0
cm9rZUJydXNoKCkgOiBzb2xpZFN0cm9rZUJydXNoKCk7CisgICAgICAgIHJlbmRlclRhcmdldC0+
RHJhd1JlY3RhbmdsZSgmZDJkUmVjdCwgYnJ1c2gsIGxpbmVXaWR0aCwgbV9kYXRhLT5zdHJva2VT
dHlsZSgpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAo
TGluZUNhcCBjYXApCkBAIC0xODEzLDcgKzE4NDgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
cGxhdGZvcm1GaWxsRWxsaXBzCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGQy
ZEVsbGlwc2UgPSBEMkQxOjpFbGxpcHNlKEQyRDE6OlBvaW50MkYoZWxsaXBzZS54KCksIGVsbGlw
c2UueSgpKSwgZWxsaXBzZS53aWR0aCgpLCBlbGxpcHNlLmhlaWdodCgpKTsKKyAgICBhdXRvIGQy
ZEVsbGlwc2UgPSBEMkQxOjpFbGxpcHNlKGVsbGlwc2UuY2VudGVyKCksIDAuNSAqIGVsbGlwc2Uu
d2lkdGgoKSwgMC41ICogZWxsaXBzZS5oZWlnaHQoKSk7CiAKICAgICBwbGF0Zm9ybUNvbnRleHQo
KS0+U2V0VGFncygxLCBfX0xJTkVfXyk7CiAKQEAgLTE4MzUsNyArMTg3MCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGkKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGF1dG8gZDJkRWxsaXBzZSA9IEQyRDE6OkVsbGlwc2UoRDJEMTo6UG9pbnQyRihlbGxp
cHNlLngoKSwgZWxsaXBzZS55KCkpLCBlbGxpcHNlLndpZHRoKCksIGVsbGlwc2UuaGVpZ2h0KCkp
OworICAgIGF1dG8gZDJkRWxsaXBzZSA9IEQyRDE6OkVsbGlwc2UoZWxsaXBzZS5jZW50ZXIoKSwg
MC41ICogZWxsaXBzZS53aWR0aCgpLCAwLjUgKiBlbGxpcHNlLmhlaWdodCgpKTsKIAogICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5TZXRUYWdzKDEsIF9fTElORV9fKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZl
ckRpcmVjdDJELmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Niw3ICs2Niw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXIK
ICAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBjb250ZXh0LnJlbmRlcmluZ01vZGUo
KTsKICAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZl
clNpemUoc2l6ZSwgY29udGV4dCk7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNjYWxlZFNp
emUsIDEsIENvbG9yU3BhY2VTUkdCLCByZW5kZXJpbmdNb2RlLCBjb250ZXh0LnBsYXRmb3JtQ29u
dGV4dCgpLCBzdWNjZXNzKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZm
ZXIobmV3IEltYWdlQnVmZmVyKHNjYWxlZFNpemUsIDEsIENvbG9yU3BhY2VTUkdCLCByZW5kZXJp
bmdNb2RlLCAmY29udGV4dCwgc3VjY2VzcykpOwogCiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTc2LDcgKzc2LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBJbWFnZUJ1ZmZlcgogICAgIHJldHVybiBidWZmZXI7CiB9CiAKLUltYWdlQnVmZmVy
OjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSAvKmNvbG9yU3BhY2UqLywgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
LCBJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0LCBib29sJiBzdWNjZXNzKQorSW1hZ2VC
dWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlIC8qY29sb3JTcGFjZSovLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwgYm9vbCYgc3VjY2Vz
cykKICAgICA6IG1fbG9naWNhbFNpemUoc2l6ZSkKICAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJl
c29sdXRpb25TY2FsZSkKIHsKQEAgLTEwMSw2ICsxMDEsNyBAQCBJbWFnZUJ1ZmZlcjo6SW1hZ2VC
dWZmZXIoY29uc3QgRmxvYXRTaXplCiAgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byByZW5kZXJUYXJnZXQgPSB0YXJnZXRDb250ZXh0
ID8gdGFyZ2V0Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiBudWxscHRyOwogICAgIGlmICgh
cmVuZGVyVGFyZ2V0KQogICAgICAgICByZW5kZXJUYXJnZXQgPSBHcmFwaGljc0NvbnRleHQ6OmRl
ZmF1bHRSZW5kZXJUYXJnZXQoKTsKICAgICBSRUxFQVNFX0FTU0VSVChyZW5kZXJUYXJnZXQpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRp
cmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODcsMTQgKzE4NywxNCBAQCB1bnNpZ25lZCBJbWFnZURlY29k
ZXI6OmZyYW1lQnl0ZXNBdEluZGV4CiAgICAgcmV0dXJuIHdpZHRoICogaGVpZ2h0ICogNDsKIH0K
IAotdm9pZCBJbWFnZURlY29kZXI6OnNldFJlbmRlclRhcmdldChJRDJEMVJlbmRlclRhcmdldCog
cmVuZGVyVGFyZ2V0KQordm9pZCBJbWFnZURlY29kZXI6OnNldFRhcmdldENvbnRleHQoSUQyRDFS
ZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKIHsKICAgICBtX3JlbmRlclRhcmdldCA9IHJlbmRl
clRhcmdldDsKIH0KIAogTmF0aXZlSW1hZ2VQdHIgSW1hZ2VEZWNvZGVyOjpjcmVhdGVGcmFtZUlt
YWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZl
bCwgRGVjb2RpbmdNb2RlKSBjb25zdAogewotICAgIGlmICghbV9uYXRpdmVEZWNvZGVyKQorICAg
IGlmICghbV9uYXRpdmVEZWNvZGVyIHx8ICFtX3JlbmRlclRhcmdldCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKICAgICBDT01QdHI8SVdJQ0JpdG1hcEZyYW1lRGVjb2RlPiBmcmFtZTsKQEAg
LTIxMSwxMCArMjExLDYgQEAgTmF0aXZlSW1hZ2VQdHIgSW1hZ2VEZWNvZGVyOjpjcmVhdGVGcmFt
ZQogICAgIGlmICghU1VDQ0VFREVEKGhyKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICBBU1NFUlQobV9yZW5kZXJUYXJnZXQpOwotICAgIGlmICghbV9yZW5kZXJUYXJnZXQpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCiAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7CiAg
ICAgaHIgPSBtX3JlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFwRnJvbVdpY0JpdG1hcChjb252ZXJ0
ZXIuZ2V0KCksIG51bGxwdHIsICZiaXRtYXApOwogICAgIGlmICghU1VDQ0VFREVEKGhyKSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJl
Y3QyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZURlY29kZXJEaXJlY3QyRC5oCShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0FsbERhdGFSZWNl
aXZlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNBbGxEYXRhUmVjZWl2ZWQ7IH0KICAgICB2b2lkIGNs
ZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpIHsgfQogCi0gICAgdm9pZCBzZXRSZW5kZXJUYXJn
ZXQoSUQyRDFSZW5kZXJUYXJnZXQqKTsKKyAgICB2b2lkIHNldFRhcmdldENvbnRleHQoSUQyRDFS
ZW5kZXJUYXJnZXQqKTsKIAogICAgIHN0YXRpYyBJV0lDSW1hZ2luZ0ZhY3RvcnkqIHN5c3RlbUlt
YWdpbmdGYWN0b3J5KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDIwNzI3NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVjdDJELmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTIsMTEgKzkyLDYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0Zy
YW1lTWF0Y2hpbmdTb3VyYwogICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KDAuMGYs
IDAuMGYsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBjb21wb3NpdGVP
cCwgQmxlbmRNb2RlTm9ybWFsLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oKSk7CiB9CiAK
LXZvaWQgQml0bWFwSW1hZ2U6OnNldFJlbmRlclRhcmdldChHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCi17Ci0gICAgbV9zb3VyY2Uuc2V0UmVuZGVyVGFyZ2V0KGNvbnRleHQpOwotfQotCiB2b2lk
IEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGN0eHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9O
YXRpdmVJbWFnZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDIwNzI3
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9OYXRpdmVJbWFnZURp
cmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorI2luY2x1ZGUgPGQyZDEuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0dGVybkRpcmVjdDJE
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
UGF0dGVybkRpcmVjdDJELmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdHRlcm5EaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDEyICszNyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSUQyRDFCaXRtYXBC
cnVzaCogUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKElEMkQxUmVuZGVyVGFyZ2V0KiBy
ZW5kZXJUYXJnZXQsIGZsb2F0IGFscGhhLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFj
ZVRyYW5zZm9ybWF0aW9uKSBjb25zdAorSUQyRDFCaXRtYXBCcnVzaCogUGF0dGVybjo6Y3JlYXRl
UGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgZmxvYXQgYWxw
aGEsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbnNmb3JtYXRpb24pIGNvbnN0
CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVuZGVyVGFyZ2V0KTsKLQotICAgIEZsb2F0UmVjdCB0
aWxlUmVjdCA9IHRpbGVJbWFnZSgpLT5yZWN0KCk7Ci0KICAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0
dGVyblRyYW5zZm9ybSA9IHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9uICogbV9wYXR0ZXJuU3BhY2VU
cmFuc2Zvcm1hdGlvbjsKICAgICBhdXRvIGJpdG1hcEJydXNoUHJvcGVydGllcyA9IEQyRDE6OkJp
dG1hcEJydXNoUHJvcGVydGllcygpOwogICAgIGJpdG1hcEJydXNoUHJvcGVydGllcy5leHRlbmRN
b2RlWCA9IG1fcmVwZWF0WCA/IEQyRDFfRVhURU5EX01PREVfV1JBUCA6IEQyRDFfRVhURU5EX01P
REVfQ0xBTVA7CkBAIC01Miw5ICs0OCwxNCBAQCBJRDJEMUJpdG1hcEJydXNoKiBQYXR0ZXJuOjpj
cmVhdGVQbGF0Zm9yCiAgICAgYnJ1c2hQcm9wZXJ0aWVzLnRyYW5zZm9ybSA9IHBhdHRlcm5UcmFu
c2Zvcm07CiAgICAgYnJ1c2hQcm9wZXJ0aWVzLm9wYWNpdHkgPSBhbHBoYTsKIAorICAgIGF1dG8g
cGF0dGVybkltYWdlID0gdGlsZUltYWdlKCk7CisKKyAgICBhdXRvIHBsYXRmb3JtQ29udGV4dCA9
IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAgUkVMRUFTRV9BU1NFUlQocGxhdGZvcm1D
b250ZXh0KTsKKwogICAgIElEMkQxQml0bWFwQnJ1c2gqIHBhdHRlcm5CcnVzaCA9IG51bGxwdHI7
Ci0gICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFwQnJ1c2godGlsZUlt
YWdlKCktPm5hdGl2ZUltYWdlKCkuZ2V0KCksICZiaXRtYXBCcnVzaFByb3BlcnRpZXMsICZicnVz
aFByb3BlcnRpZXMsICZwYXR0ZXJuQnJ1c2gpOwotICAgIEFTU0VSVChocik7CisgICAgSFJFU1VM
VCBociA9IHBsYXRmb3JtQ29udGV4dC0+Q3JlYXRlQml0bWFwQnJ1c2gocGF0dGVybkltYWdlLT5u
YXRpdmVJbWFnZSgmY29udGV4dCkuZ2V0KCksICZiaXRtYXBCcnVzaFByb3BlcnRpZXMsICZicnVz
aFByb3BlcnRpZXMsICZwYXR0ZXJuQnJ1c2gpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsK
ICAgICByZXR1cm4gcGF0dGVybkJydXNoOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAJKHJldmlzaW9uIDIwNzI3NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDEwIEBACiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKKyNpZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSA8
ZDJkMS5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGlubGluZSB2
b2lkIGVuZE1hdHJpeFJvdyhWZWN0b3I8ZmxvYXQ+JiBwYXJhbWV0ZXJzKQpAQCAtMzEzLDE1ICsz
MTcsMjEgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6dXBkYXRlQmFja2luZwogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyOjphbGxvY2F0ZUJhY2tp
bmdTdG9yZUlmTmVlZGVkKCkKK3ZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXI6OmFsbG9jYXRlQmFj
a2luZ1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRDb250ZXh0KQog
ewogICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIGVmZmVjdCBjaGFpbiBoYXMgYmVlbiBidWlsdCwg
YW5kIHRoZQogICAgIC8vIHNvdXJjZSBpbWFnZSBzaXplcyBzZXQuIFdlIGp1c3QgbmVlZCB0byBh
dHRhY2ggdGhlIGdyYXBoaWMKICAgICAvLyBidWZmZXIgaWYgd2UgaGF2ZSBub3QgeWV0IGRvbmUg
c28uCiAgICAgaWYgKCFtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQpIHsKICAgICAgICAgSW50U2l6
ZSBsb2dpY2FsU2l6ZShtX3NvdXJjZURyYXdpbmdSZWdpb24ud2lkdGgoKSwgbV9zb3VyY2VEcmF3
aW5nUmVnaW9uLmhlaWdodCgpKTsKLSAgICAgICAgaWYgKCFzb3VyY2VJbWFnZSgpIHx8IHNvdXJj
ZUltYWdlKCktPmxvZ2ljYWxTaXplKCkgIT0gbG9naWNhbFNpemUpCisgICAgICAgIGlmICghc291
cmNlSW1hZ2UoKSB8fCBzb3VyY2VJbWFnZSgpLT5sb2dpY2FsU2l6ZSgpICE9IGxvZ2ljYWxTaXpl
KSB7CisjaWYgVVNFKERJUkVDVDJEKQorICAgICAgICAgICAgc2V0U291cmNlSW1hZ2UoSW1hZ2VC
dWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSgpLCAmdGFyZ2V0Q29udGV4
dCwgZmlsdGVyU2NhbGUoKSkpOworI2Vsc2UKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTSh0YXJn
ZXRDb250ZXh0KTsKICAgICAgICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVh
dGUobG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUoKSwgZmlsdGVyU2NhbGUoKSkpOworI2VuZGlm
CisgICAgICAgIH0KICAgICAgICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0gdHJ1ZTsKICAg
ICB9CiB9CkBAIC0zOTYsNyArNDA2LDcgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBl
cjo6YmVnaW5GaQogICAgIEFTU0VSVChtX3JlbmRlckxheWVyKTsKICAgICAKICAgICBGaWx0ZXJF
ZmZlY3RSZW5kZXJlciogZmlsdGVyID0gbV9yZW5kZXJMYXllci0+ZmlsdGVyUmVuZGVyZXIoKTsK
LSAgICBmaWx0ZXItPmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoKTsKKyAgICBmaWx0ZXIt
PmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQobV90YXJnZXRDb250ZXh0KTsKICAgICAvLyBQ
YWludCBpbnRvIHRoZSBjb250ZXh0IHRoYXQgcmVwcmVzZW50cyB0aGUgU291cmNlR3JhcGhpYyBv
ZiB0aGUgZmlsdGVyLgogICAgIEdyYXBoaWNzQ29udGV4dCogc291cmNlR3JhcGhpY3NDb250ZXh0
ID0gZmlsdGVyLT5pbnB1dENvbnRleHQoKTsKICAgICBpZiAoIXNvdXJjZUdyYXBoaWNzQ29udGV4
dCB8fCBmaWx0ZXItPmZpbHRlclJlZ2lvbigpLmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6
ZU5lZWRzQ2xhbXBpbmcoZmlsdGVyLT5maWx0ZXJSZWdpb24oKS5zaXplKCkpKSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaAkocmV2
aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJl
bmRlcmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIERvY3VtZW50OwpAQCAtNTcsOCArNTgsOSBAQCBlbnVtIEZpbHRlckNv
bnN1bWVyIHsKIGNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyIHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBl
cihib29sIGhhdmVGaWx0ZXJFZmZlY3QpCi0gICAgICAgIDogbV9oYXZlRmlsdGVyRWZmZWN0KGhh
dmVGaWx0ZXJFZmZlY3QpCisgICAgRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXIoYm9vbCBoYXZl
RmlsdGVyRWZmZWN0LCBHcmFwaGljc0NvbnRleHQmIHRhcmdldENvbnRleHQpCisgICAgICAgIDog
bV90YXJnZXRDb250ZXh0KHRhcmdldENvbnRleHQpCisgICAgICAgICwgbV9oYXZlRmlsdGVyRWZm
ZWN0KGhhdmVGaWx0ZXJFZmZlY3QpCiAgICAgewogICAgIH0KICAgICAKQEAgLTc3LDYgKzc5LDcg
QEAgcHJpdmF0ZToKICAgICBSZW5kZXJMYXllciogbV9yZW5kZXJMYXllciB7IG51bGxwdHIgfTsg
Ly8gRklYTUU6IHRoaXMgaXMgbWFpbmx5IHVzZWQgdG8gZ2V0IHRoZSBGaWx0ZXJFZmZlY3RSZW5k
ZXJlci4gRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXIgc2hvdWxkIGJlIHdlYW5lZCBvZmYgaXQu
CiAgICAgTGF5b3V0UG9pbnQgbV9wYWludE9mZnNldDsKICAgICBMYXlvdXRSZWN0IG1fcmVwYWlu
dFJlY3Q7CisgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBtX3RhcmdldENvbnRleHQ7CiAgICAg
Ym9vbCBtX2hhdmVGaWx0ZXJFZmZlY3QgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zdGFydGVkRmls
dGVyRWZmZWN0IHsgZmFsc2UgfTsKIH07CkBAIC0xMDcsNyArMTEwLDcgQEAgcHVibGljOgogICAg
IGJvb2wgYnVpbGQoUmVuZGVyRWxlbWVudCosIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmLCBGaWx0
ZXJDb25zdW1lcik7CiAgICAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkUmVmZXJlbmNl
RmlsdGVyKFJlbmRlckVsZW1lbnQqLCBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gcHJldmlvdXNF
ZmZlY3QsIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiopOwogICAgIGJvb2wgdXBkYXRlQmFja2lu
Z1N0b3JlUmVjdChjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlY3QpOwotICAgIHZvaWQgYWxsb2Nh
dGVCYWNraW5nU3RvcmVJZk5lZWRlZCgpOworICAgIHZvaWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJ
Zk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAgICB2b2lkIGNsZWFySW50ZXJtZWRp
YXRlUmVzdWx0cygpOwogICAgIHZvaWQgYXBwbHkoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE2
OCw3ICs0MTY4LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGFzRmlsdGVyVGhhdElzUGFpbnRpbgog
ICAgIGlmICghaGFzUGFpbnRlZEZpbHRlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
YXV0byBmaWx0ZXJQYWludGVyID0gc3RkOjptYWtlX3VuaXF1ZTxGaWx0ZXJFZmZlY3RSZW5kZXJl
ckhlbHBlcj4oaGFzUGFpbnRlZEZpbHRlcik7CisgICAgYXV0byBmaWx0ZXJQYWludGVyID0gc3Rk
OjptYWtlX3VuaXF1ZTxGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcj4oaGFzUGFpbnRlZEZpbHRl
ciwgY29udGV4dCk7CiAgICAgaWYgKCFmaWx0ZXJQYWludGVyLT5oYXZlRmlsdGVyRWZmZWN0KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDE4Miw3ICs0MTgyLDcgQEAgc3RkOjp1bmlx
dWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVySGVscAogCiAgICAgRmlsdGVySW5mbyogZmlsdGVy
SW5mbyA9IEZpbHRlckluZm86OmdldElmRXhpc3RzKCp0aGlzKTsKICAgICBib29sIGhhc1BhaW50
ZWRGaWx0ZXIgPSBmaWx0ZXJJbmZvICYmIGZpbHRlckluZm8tPnJlbmRlcmVyKCkgJiYgcGFpbnRz
V2l0aEZpbHRlcnMoKTsKLSAgICBhdXRvIGZpbHRlclBhaW50ZXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyPihoYXNQYWludGVkRmlsdGVyKTsKKyAgICBhdXRv
IGZpbHRlclBhaW50ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEZpbHRlckVmZmVjdFJlbmRlcmVySGVs
cGVyPihoYXNQYWludGVkRmlsdGVyLCBjb250ZXh0KTsKIAogICAgIExheW91dFJlY3QgZmlsdGVy
UmVwYWludFJlY3QgPSBmaWx0ZXJJbmZvLT5kaXJ0eVNvdXJjZVJlY3QoKTsKICAgICBmaWx0ZXJS
ZXBhaW50UmVjdC5tb3ZlKG9mZnNldEZyb21Sb290KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQs
MTEgQEAKICNpbmNsdWRlIDxydW50aW1lL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1l
L0pTTG9jay5oPgogCisjaWYgVVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIkNPTVB0ci5oIgorI2lu
Y2x1ZGUgPGQyZDEuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR0ltYWdl
OjpTVkdJbWFnZShJbWFnZU9ic2VydmVyJiBvYnNlcnZlciwgY29uc3QgVVJMJiB1cmwpCkBAIC0x
ODcsNyArMTkyLDcgQEAgdm9pZCBTVkdJbWFnZTo6ZHJhd0ZvckNvbnRhaW5lcihHcmFwaGljcwog
I2lmIFVTRShDQUlSTykKIC8vIFBhc3NlcyBvd25lcnNoaXAgb2YgdGhlIG5hdGl2ZSBpbWFnZSB0
byB0aGUgY2FsbGVyIHNvIE5hdGl2ZUltYWdlUHRyIG5lZWRzCiAvLyB0byBiZSBhIHNtYXJ0IHBv
aW50ZXIgdHlwZS4KLU5hdGl2ZUltYWdlUHRyIFNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpCitOYXRpdmVJbWFnZVB0ciBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KikKIHsKICAgICBpZiAoIW1fcGFnZSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMDQsNiArMjA5LDM4IEBAIE5hdGl2ZUltYWdlUHRyIFNW
R0ltYWdlOjpuYXRpdmVJbWFnZUZvckMKIH0KICNlbmRpZgogCisjaWYgVVNFKERJUkVDVDJEKQor
TmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCogdGFyZ2V0Q29udGV4dCkKK3sKKyAgICBBU1NFUlQodGFyZ2V0Q29udGV4dCk7CisgICAgaWYg
KCFtX3BhZ2UgfHwgIXRhcmdldENvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgYXV0byBwbGF0Zm9ybUNvbnRleHQgPSB0YXJnZXRDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KTsKKyAgICBBU1NFUlQocGxhdGZvcm1Db250ZXh0KTsKKworICAgIC8vIERyYXcgdGhlIFNWRyBp
bnRvIGEgYml0bWFwLgorICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gbmF0aXZl
SW1hZ2VUYXJnZXQ7CisgICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29udGV4dC0+Q3JlYXRlQ29t
cGF0aWJsZVJlbmRlclRhcmdldChJbnRTaXplKHJlY3QoKS5zaXplKCkpLCAmbmF0aXZlSW1hZ2VU
YXJnZXQpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIG5hdGl2ZUltYWdlVGFy
Z2V0LT5CZWdpbkRyYXcoKTsKKyAgICBHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KG5hdGl2
ZUltYWdlVGFyZ2V0LmdldCgpKTsKKyAgICBsb2NhbENvbnRleHQuc2V0RGlkQmVnaW5EcmF3KHRy
dWUpOworCisgICAgZHJhdyhsb2NhbENvbnRleHQsIHJlY3QoKSwgcmVjdCgpLCBDb21wb3NpdGVT
b3VyY2VPdmVyLCBCbGVuZE1vZGVOb3JtYWwsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbigp
KTsKKworICAgIGhyID0gbmF0aXZlSW1hZ2VUYXJnZXQtPkZsdXNoKCk7CisgICAgQVNTRVJUKFNV
Q0NFRURFRChocikpOworCisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBuYXRpdmVJbWFnZTsKKyAg
ICBociA9IG5hdGl2ZUltYWdlVGFyZ2V0LT5HZXRCaXRtYXAoJm5hdGl2ZUltYWdlKTsKKyAgICBB
U1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICByZXR1cm4gbmF0aXZlSW1hZ2U7Cit9CisjZW5k
aWYKKwogdm9pZCBTVkdJbWFnZTo6ZHJhd1BhdHRlcm5Gb3JDb250YWluZXIoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFNpemUmIGNvbnRhaW5lclNpemUsIGZsb2F0IHpvb20s
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBjb25zdCBGbG9hdFJlY3Qm
IGRzdFJlY3QsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2UuaAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDEwIEBA
IHB1YmxpYzoKICAgICB2b2lkIHJlc2V0QW5pbWF0aW9uKCkgZmluYWw7CiAKICNpZiBVU0UoQ0FJ
Uk8pCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSBmaW5h
bDsKKyAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb25zdCBH
cmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgZmluYWw7CisjZW5kaWYKKyNpZiBVU0UoRElSRUNU
MkQpCisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoY29uc3QgR3JhcGhpY3NDb250ZXh0
KiA9IG51bGxwdHIpIGZpbmFsOwogI2VuZGlmCiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHAJKHJl
dmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZv
ckNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2LDkgQEAgdm9pZCBTVkdJ
bWFnZUZvckNvbnRhaW5lcjo6ZHJhd1BhdHRlcm4oRwogICAgIG1faW1hZ2UtPmRyYXdQYXR0ZXJu
Rm9yQ29udGFpbmVyKGNvbnRleHQsIG1fY29udGFpbmVyU2l6ZSwgbV96b29tLCBzcmNSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgY29tcG9zaXRlT3AsIGRzdFJlY3QsIGJs
ZW5kTW9kZSk7CiB9CiAKLU5hdGl2ZUltYWdlUHRyIFNWR0ltYWdlRm9yQ29udGFpbmVyOjpuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCitOYXRpdmVJbWFnZVB0ciBTVkdJbWFnZUZvckNvbnRh
aW5lcjo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0
YXJnZXRDb250ZXh0KQogewotICAgIHJldHVybiBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOworICAgIHJldHVybiBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSh0YXJnZXRDb250ZXh0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9yQ29udGFpbmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9yQ29udGFpbmVyLmgJ
KHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFn
ZUZvckNvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoK
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgdG8gYmUgbGVzcyBjb25zZXJ2YXRpdmUuCiAg
ICAgYm9vbCBjdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBmYWxzZTsgfQogCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKSBmaW5hbDsKKyAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgZmluYWw7CiAKIHByaXZhdGU6CiAg
ICAgU1ZHSW1hZ2VGb3JDb250YWluZXIoU1ZHSW1hZ2UqIGltYWdlLCBjb25zdCBGbG9hdFNpemUm
IGNvbnRhaW5lclNpemUsIGZsb2F0IHpvb20pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291666</attachid>
            <date>2016-10-14 14:22:28 -0700</date>
            <delta_ts>2016-10-14 14:58:15 -0700</delta_ts>
            <desc>Patch for landing.</desc>
            <filename>bug-163349-20161014141900.patch</filename>
            <type>text/plain</type>
            <size>40222</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzM1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg0IEBACisyMDE2LTEwLTE0ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBJ
bXBsZW1lbnQgYmFzaWMgU1ZHIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MzM0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIERpcmVjdDJEIG5lZWRzIGFjY2VzcyB0byB0aGUgdGFyZ2V0IGdy
YXBoaWNzIGNvbnRleHQgd2hlbiBnZW5lcmF0aW5nIGJpdG1hcAorICAgICAgICBpbWFnZXMgc28g
dGhhdCBpdCBjYW4gcHJvcGVybHkgbWF0Y2ggcGl4ZWwgZm9ybWF0IGFuZCBvdGhlciBzZXR0aW5n
cy4KKworICAgICAgICBBZGQgaW1wbGVtZW50YXRpb25zIGZvciBhIG51bWJlciBvZiBkcmF3aW5n
IHByaW1pdGl2ZXMgdXNlZCBpbiB0aGUgU1ZHCisgICAgICAgIHRlc3QgY2FzZXMuIENvcnJlY3Qg
c29tZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIENHIGFuZCBEaXJlY3QyRCBmb3IgZHJhd2luZworICAg
ICAgICBkaWZmZXJlbnQgcHJpbWl0aXZlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRlc3Rl
ZCBieSBleGlzdGluZyAnc3ZnJyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSW1h
Z2VBdEluZGV4KTogVGFrZSBvcHRpb25hbCB0YXJnZXQgZ3JhcGhpY3MKKyAgICAgICBjb250ZXh0
LiBBbHNvIHBhc3MgdGhlIGdyYXBoaWNzIGNvbnRleHQgdG8gdGhlIGltYWdlIGRlY29kZXIuCisg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSk6IEFjY2VwdCBhbiBvcHRp
b25hbCB0YXJnZXQgY29udGV4dC4KKyAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKTogRGl0dG8uCisgICAgICAgKFdlYkNvcmU6OkJpdG1hcElt
YWdlOjpkcmF3KTogUGFzcyB0YXJnZXQgZ3JhcGhpY3MgY29udGV4dCB0byB0aGUKKyAgICAgICAn
ZnJhbWVJbWFnZUF0SW5kZXgnIG1ldGhvZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6IE1vdmVkIGZyb20gaGVhZGVyLiBBZGQgY3JlYXRlIGZ1
bmN0aW9uIHRoYXQKKyAgICAgICAgdGFrZXMgYW4gb3B0aW9uYWwgR3JhcGhpY3NDb250ZXh0IGFy
Z3VtZW50LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcDogQWRkIG1pc3Npbmcg
aW5jbHVkZSBuZWVkZWQgdG8gYnVpbGQKKyAgICAgICAgdW5kZXIgRGlyZWN0MkQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VTb3VyY2U6OnNldERlY29kZXJUYXJnZXRDb250ZXh0KTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0UmVuZGVyVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL1BhdHRlcm4uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOjplbmREcmF3KTogTG9nIGVycm9yIHN0YXRlIGluc3RlYWQgb2YgY3Jh
c2hpbmcKKyAgICAgICAgZWFjaCB0aW1lLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkcmF3RWxsaXBzZSk6IEVsbGlwc2VzIGFyZSBkZWZpbmVkIGluIEQyRCBhcyBhIGNlbnRl
ciwgYW4KKyAgICAgICAgWC1yYWRpdXMsIGFuZCBhIFktcmFkaXVzLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KTogVXNlICdDbGVhcicgZnVuY3Rpb24gaWYgcG9z
c2libGUuIERvbid0IGNsZWFyCisgICAgICAgIGFueXRoaW5nIGlmIHRoZSBjbGVhciByZWN0IGlz
IG91dHNpZGUgdGhlIGRyYXdpbmcgYXJlYS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUmVjdCk6IFByb3ZpZGUgaW1wbGVtZW50YXRpb24gKG5lZWRlZCBieSBTVkcp
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNl
KTogRWxsaXBzZXMgYXJlIGRlZmluZWQgaW4gRDJEIGFzCisgICAgICAgIGEgY2VudGVyLCBhbiBY
LXJhZGl1cywgYW5kIGEgWS1yYWRpdXMuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKTogQWNjZXB0IG9wdGlvbmFsIEdyYXBo
aWNzQ29udGV4dCBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpJbWFn
ZUJ1ZmZlcik6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURl
Y29kZXJEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNldFRh
cmdldENvbnRleHQpOiBSZW5hbWVkIGZyb20gJ3NldFJlbmRlclRhcmdldCcuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kZXI6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KTogVGFrZSBvcHRp
b25hbCBHcmFwaGljc0NvbnRleHQgYXJndW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kZXI6OnNldFJlbmRlclRhcmdldCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OnNldFJlbmRlclRhcmdldCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3BwOiBBZGQgbWlzc2luZyBpbmNsdWRlLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGlyZWN0MkQuY3BwOiAKKyAgICAg
ICAgKFdlYkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybik6IFJldmlzZSBmb3Ig
bmV3IHNpZ25hdHVyZS4KKyAgICAgICAgKiByZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXI6OmFsbG9jYXRlQmFj
a2luZ1N0b3JlSWZOZWVkZWQpOiBQYXNzIEdyYXBoaWNzQ29udGV4dAorICAgICAgICB0byBJbWFn
ZUJ1ZmZlciBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRl
cmVySGVscGVyOjpiZWdpbkZpbHRlckVmZmVjdCk6IFBhc3MgdGFyZ2V0IGNvbnRleHQgdG8KKyAg
ICAgICAgZmlsdGVyIHdoZW4gYWxsb2NhdGluZyBiYWNraW5nIHN0b3JlLgorICAgICAgICAqIHJl
bmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oOiBBZGQgR3JhcGhpY3NDb250ZXh0IGFzIGFy
Z3VtZW50IHRvIGNvbnN0cnVjdG9yLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzRmlsdGVyVGhhdElzUGFpbnRp
bmcpOiBTdXBwbHkgR3JhcGhpY3NDb250ZXh0IGFyZ3VtZW50IHdoZW4KKyAgICAgICAgYnVpbGRp
bmcgbmV3IEZpbHRlckVmZmVjdFJlbmRlcmVyIGFuZCBoZWxwZXIuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6c2V0dXBGaWx0ZXJzKTogRGl0dG8uCisgICAgICAgICogc3ZnL2dyYXBo
aWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSk6IFJldmlzZSB0byB0YWtlIG9wdGlvbmFsIEdyYXBoaWNzQ29udGV4
dAorICAgICAgICBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJ
bWFnZSk6IERpdHRvLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5oOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJbWFnZUZvckNvbnRhaW5lcjo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOiBE
aXR0by4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuaDoKKwog
MjAxNi0xMC0xNCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAg
ICAgIENsZWFuIHVwIEJhY2tGb3J3YXJkQ2xpZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCShyZXZpc2lvbiAyMDcyNzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgwLDM5ICs4MCwzOSBAQCBib29sIEJpdG1hcEltYWdlOjpkYXRhQ2hhbmdl
ZChib29sIGFsbERhCiAgICAgcmV0dXJuIG1fc291cmNlLmRhdGFDaGFuZ2VkKGRhdGEoKSwgYWxs
RGF0YVJlY2VpdmVkKTsKIH0KIAotTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1h
Z2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVs
KQorTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBp
bmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBjb25zdCBHcmFwaGljc0Nv
bnRleHQqIHRhcmdldENvbnRleHQpCiB7CiAgICAgaWYgKGZyYW1lSGFzSW52YWxpZE5hdGl2ZUlt
YWdlQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCkpIHsKICAgICAgICAgTE9HKEltYWdl
cywgIkJpdG1hcEltYWdlICVwIGZyYW1lSW1hZ2VBdEluZGV4IC0gc3Vic2FtcGxpbmdMZXZlbCB3
YXMgJWQsIHJlc2FtcGxpbmciLCB0aGlzLCBzdGF0aWNfY2FzdDxpbnQ+KGZyYW1lU3Vic2FtcGxp
bmdMZXZlbEF0SW5kZXgoaW5kZXgpKSk7CiAgICAgICAgIGludmFsaWRhdGVQbGF0Zm9ybURhdGEo
KTsKICAgICB9CiAKLSAgICByZXR1cm4gbV9zb3VyY2UuZnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgs
IHN1YnNhbXBsaW5nTGV2ZWwpOworICAgIHJldHVybiBtX3NvdXJjZS5mcmFtZUltYWdlQXRJbmRl
eChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgdGFyZ2V0Q29udGV4dCk7CiB9CiAKLU5hdGl2ZUlt
YWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSgpCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJ
bWFnZTo6bmF0aXZlSW1hZ2UoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0KQog
ewotICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKKyAgICByZXR1cm4gZnJhbWVJbWFn
ZUF0SW5kZXgoMCwgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgdGFyZ2V0Q29udGV4dCk7CiB9
CiAKLU5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0KQogewotICAgIHJldHVybiBm
cmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VB
dEluZGV4KG1fY3VycmVudEZyYW1lLCBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0LCB0YXJnZXRD
b250ZXh0KTsKIH0KIAogI2lmIFVTRShDRykKLU5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpu
YXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQorTmF0aXZlSW1hZ2VQdHIgQml0
bWFwSW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCkKIHsKICAgICBzaXplX3QgY291bnQgPSBmcmFt
ZUNvdW50KCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAg
ICAgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpOworICAgICAgICBhdXRvIGlt
YWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSwgdGFyZ2V0Q29udGV4dCk7CiAgICAgICAgIGlmIChp
bWFnZSAmJiBuYXRpdmVJbWFnZVNpemUoaW1hZ2UpID09IHNpemUpCiAgICAgICAgICAgICByZXR1
cm4gaW1hZ2U7CiAgICAgfQogCiAgICAgLy8gRmFsbGJhY2sgdG8gdGhlIGZpcnN0IGZyYW1lIGlt
YWdlIGlmIHdlIGNhbid0IGZpbmQgdGhlIHJpZ2h0IHNpemUKLSAgICByZXR1cm4gZnJhbWVJbWFn
ZUF0SW5kZXgoMCk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KDAsIHRhcmdldENvbnRl
eHQpOwogfQogCiBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IEJpdG1hcEltYWdlOjpmcmFtZXNOYXRp
dmVJbWFnZXMoKQpAQCAtMTQxLDEwICsxNDEsNiBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCYgCiAgICAgaWYgKGRlc3RSZWN0LmlzRW1wdHkoKSB8fCBzcmNSZWN0Lmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIHNldFJl
bmRlclRhcmdldChjb250ZXh0KTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIHN0
YXJ0QW5pbWF0aW9uKERvTm90Q2F0Y2hVcCk7CiAjZWxzZQpAQCAtMTYxLDcgKzE1Nyw3IEBAIHZv
aWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiAKICAgICBTdWJzYW1wbGluZ0xl
dmVsIHN1YnNhbXBsaW5nTGV2ZWwgPSBtX3NvdXJjZS5zdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUo
c2NhbGUpOwogICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZSAlcCBkcmF3IC0gc3Vic2FtcGxp
bmdMZXZlbCAlZCBhdCBzY2FsZSAlLjRmIiwgdGhpcywgc3RhdGljX2Nhc3Q8aW50PihzdWJzYW1w
bGluZ0xldmVsKSwgc2NhbGUpOwogCi0gICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4
KG1fY3VycmVudEZyYW1lLCBzdWJzYW1wbGluZ0xldmVsKTsKKyAgICBhdXRvIGltYWdlID0gZnJh
bWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsIHN1YnNhbXBsaW5nTGV2ZWwsICZjb250ZXh0
KTsKICAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFu
IGltYWdlIHlldC4KICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExNywyMSArMTE3LDE4IEBAIHB1YmxpYzoKICAgICBFdmFzX09iamVjdCogZ2V0RXZh
c09iamVjdChFdmFzKikgb3ZlcnJpZGU7CiAjZW5kaWYKIAotICAgIFdFQkNPUkVfRVhQT1JUIE5h
dGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgb3ZlcnJpZGU7Ci0gICAgTmF0aXZlSW1hZ2VQdHIg
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVs
bHB0cikgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpIG92ZXJyaWRlOwogI2lmIFVT
RShDRykKLSAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXpl
Jikgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VPZlNpemUoY29uc3Qg
SW50U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSBvdmVycmlkZTsKICAg
ICBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIG92ZXJyaWRlOwog
I2VuZGlmCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIHZvaWQgc2V0UmVuZGVyVGFyZ2V0KEdyYXBo
aWNzQ29udGV4dCYpOwotI2VuZGlmCiAKIHByb3RlY3RlZDoKICAgICBXRUJDT1JFX0VYUE9SVCBC
aXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0ciYmLCBJbWFnZU9ic2VydmVyKiA9IG51bGxwdHIpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIEJpdG1hcEltYWdlKEltYWdlT2JzZXJ2ZXIqID0gbnVsbHB0cik7
CiAKLSAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBs
aW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKKyAgICBOYXRpdmVJbWFnZVB0
ciBmcmFtZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGlu
Z0xldmVsOjpEZWZhdWx0LCBjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cik7CiAKICAg
ICAvLyBDYWxsZWQgdG8gaW52YWxpZGF0ZSBjYWNoZWQgZGF0YS4gV2hlbiB8ZGVzdHJveUFsbHwg
aXMgdHJ1ZSwgd2Ugd2lwZSBvdXQKICAgICAvLyB0aGUgZW50aXJlIGZyYW1lIGJ1ZmZlciBjYWNo
ZSBhbmQgdGVsbCB0aGUgaW1hZ2Ugc291cmNlIHRvIGRlc3Ryb3kKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3
LDkgKzEzNyw5IEBAIHB1YmxpYzoKIAogICAgIGVudW0gVGlsZVJ1bGUgeyBTdHJldGNoVGlsZSwg
Um91bmRUaWxlLCBTcGFjZVRpbGUsIFJlcGVhdFRpbGUgfTsKIAotICAgIHZpcnR1YWwgTmF0aXZl
SW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgdmlydHVhbCBO
YXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4g
bnVsbHB0cjsgfQotICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0
ciBuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgeyByZXR1cm4g
bnVsbHB0cjsgfQorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VPZlNpemUo
Y29uc3QgSW50U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSB7IHJldHVy
biBudWxscHRyOyB9CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgeyByZXR1cm4gbnVs
bHB0cjsgfQogICAgIHZpcnR1YWwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkZvckN1cnJl
bnRGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsgfQogICAgIHZpcnR1
YWwgVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBmcmFtZXNOYXRpdmVJbWFnZXMoKSB7IHJldHVybiB7
IH07IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyLmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDYg
KzM4LDI2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFt
cGVkTGVuZ3RoID0gNDA5NjsKIHN0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkQXJlYSA9IE1h
eENsYW1wZWRMZW5ndGggKiBNYXhDbGFtcGVkTGVuZ3RoOwogCitzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlKQoreworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIHN1Y2Nlc3MpKTsKKyAgICBpZiAo
IXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBidWZmZXI7Cit9
CisKKyNpZiBVU0UoRElSRUNUMkQpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdl
QnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgYm9vbCBzdWNjZXNz
ID0gZmFsc2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IElt
YWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9k
ZSwgdGFyZ2V0Q29udGV4dCwgc3VjY2VzcykpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKyNlbmRpZgorCiBib29sIElt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7CiAg
ICAgaWYgKHNpemUuaXNFbXB0eSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSwxNSArMzUsMTIgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJEYXRhLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgPG1lbW9yeT4K
ICNpbmNsdWRlIDxydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCi0jaWYgUExBVEZPUk0oV0lOKQotaW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0OwotI2Vu
ZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvYXRSZWN0OwpAQCAtNzQsMTQg
KzcxLDEwIEBAIGNsYXNzIEltYWdlQnVmZmVyIHsKICAgICBmcmllbmQgY2xhc3MgSU9TdXJmYWNl
OwogcHVibGljOgogICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRp
b24gZmFpbHVyZS4KLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVh
dGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IENvbG9yU3Bh
Y2VTUkdCKQotICAgIHsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCBy
ZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIHN1Y2Nlc3MpKTsKLSAg
ICAgICAgaWYgKCFzdWNjZXNzKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IHJldHVybiBidWZmZXI7Ci0gICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdN
b2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZVNS
R0IpOworI2lmIFVTRShESVJFQ1QyRCkKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5n
TW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwg
Q29sb3JTcGFjZSA9IENvbG9yU3BhY2VTUkdCKTsKKyNlbmRpZgogCiAgICAgLy8gQ3JlYXRlIGFu
IGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRleHQsIHdpdGggc3VpdGFibGUg
cmVzb2x1dGlvbiBmb3IgZHJhd2luZyBpbnRvIHRoZSBidWZmZXIgYW5kIHRoZW4gaW50byB0aGlz
IGNvbnRleHQuCiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQm
KTsKQEAgLTE4Miw3ICsxNzUsNyBAQCBwcml2YXRlOgogI2lmIFVTRShDRykKICAgICBJbWFnZUJ1
ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENHQ29sb3JTcGFj
ZVJlZiwgUmVuZGVyaW5nTW9kZSwgYm9vbCYgc3VjY2Vzcyk7CiAjZWxpZiBVU0UoRElSRUNUMkQp
Ci0gICAgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBJRDJEMVJlbmRlclRhcmdldCosIGJvb2wmIHN1
Y2Nlc3MpOworICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0
KiwgYm9vbCYgc3VjY2Vzcyk7CiAjZW5kaWYKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcAkocmV2aXNpb24g
MjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNh
Y2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOSBAQAogCiAjaWYgVVNFKENHKQog
I2luY2x1ZGUgIkltYWdlRGVjb2RlckNHLmgiCisjZWxpZiBVU0UoRElSRUNUMkQpCisjaW5jbHVk
ZSAiSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaCIKKyNpbmNsdWRlIDxXaW5Db2RlYy5oPgogI2Vsc2UK
ICNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAkocmV2aXNpb24gMjA3Mjc1
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTUsMTUgKzExNSwxOCBAQCBib29sIEltYWdlU291cmNlOjplbnN1
cmVEZWNvZGVyQXZhaWxhYmxlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLSNpZiBVU0UoRElSRUNU
MkQpCi12b2lkIEltYWdlU291cmNlOjpzZXRSZW5kZXJUYXJnZXQoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KQordm9pZCBJbWFnZVNvdXJjZTo6c2V0RGVjb2RlclRhcmdldENvbnRleHQoY29uc3Qg
R3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0KQogeworI2lmIFVTRShESVJFQ1QyRCkKICAg
ICBpZiAoIWlzRGVjb2RlckF2YWlsYWJsZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2Rl
Y29kZXItPnNldFJlbmRlclRhcmdldChjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKTsKLX0KKyAg
ICBpZiAodGFyZ2V0Q29udGV4dCkKKyAgICAgICAgbV9kZWNvZGVyLT5zZXRUYXJnZXRDb250ZXh0
KHRhcmdldENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKGNvbnRleHQpOwogI2VuZGlmCit9CiAKIHZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEoU2hh
cmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKIHsKQEAgLTIwOSw2ICsyMTIs
MTMgQEAgTmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSQogICAgIHJldHVy
biBpc0RlY29kZXJBdmFpbGFibGUoKSA/IG1fZGVjb2Rlci0+Y3JlYXRlRnJhbWVJbWFnZUF0SW5k
ZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpIDogbnVsbHB0cjsKIH0KIAorTmF0aXZlSW1hZ2VQ
dHIgSW1hZ2VTb3VyY2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxp
bmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENv
bnRleHQpCit7CisgICAgc2V0RGVjb2RlclRhcmdldENvbnRleHQodGFyZ2V0Q29udGV4dCk7CisK
KyAgICByZXR1cm4gbV9mcmFtZUNhY2hlLmZyYW1lSW1hZ2VBdEluZGV4KGluZGV4LCBzdWJzYW1w
bGluZ0xldmVsKTsKK30KKwogdm9pZCBJbWFnZVNvdXJjZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykK
IHsKICAgICB0cy5kdW1wUHJvcGVydHkoInR5cGUiLCBmaWxlbmFtZUV4dGVuc2lvbigpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAko
cmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTAsIDIwMTIsIDIwMTQsIDIw
MTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NC0yMDA4LCAyMDEwLCAyMDEyLCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUb3JjaCBNb2JpbGUsIEluYy4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKQEAgLTU5LDEwICs1OSw2IEBAIHB1YmxpYzoKICAgICBib29sIGVuc3Vy
ZURlY29kZXJBdmFpbGFibGUoU2hhcmVkQnVmZmVyKik7CiAgICAgYm9vbCBpc0RlY29kZXJBdmFp
bGFibGUoKSBjb25zdCB7IHJldHVybiBtX2RlY29kZXIuZ2V0KCk7IH0KIAotI2lmIFVTRShESVJF
Q1QyRCkKLSAgICB2b2lkIHNldFJlbmRlclRhcmdldChHcmFwaGljc0NvbnRleHQmKTsKLSNlbmRp
ZgotCiAgICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVj
ZWl2ZWQpOwogICAgIGJvb2wgZGF0YUNoYW5nZWQoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFs
bERhdGFSZWNlaXZlZCk7CiAKQEAgLTkzLDcgKzg5LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVk
IGZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1w
bGluZ0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCkgeyByZXR1cm4gbV9mcmFtZUNh
Y2hlLmZyYW1lQnl0ZXNBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsgfQogICAgIGZs
b2F0IGZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9mcmFtZUNh
Y2hlLmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsgfQogICAgIEltYWdlT3JpZW50YXRpb24g
ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2ZyYW1lQ2Fj
aGUuZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOyB9Ci0gICAgTmF0aXZlSW1hZ2VQdHIg
ZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBs
aW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KSB7IHJldHVybiBtX2ZyYW1lQ2Fj
aGUuZnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOyB9CisgICAgTmF0
aXZlSW1hZ2VQdHIgZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xl
dmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0
YXJnZXRDb250ZXh0ID0gbnVsbHB0cik7CiAKICAgICBTdWJzYW1wbGluZ0xldmVsIG1heGltdW1T
dWJzYW1wbGluZ0xldmVsKCk7CiAgICAgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVs
Rm9yU2NhbGUoZmxvYXQpOwpAQCAtMTA0LDcgKzEwMCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBj
bGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90KTsKICAgICB2b2lkIGNsZWFyKGJvb2wgZGVzdHJv
eUFsbCwgc2l6ZV90IGNvdW50LCBTaGFyZWRCdWZmZXIqIGRhdGEpOwogICAgIHZvaWQgZHVtcChU
ZXh0U3RyZWFtJik7Ci0gICAgCisKKyAgICB2b2lkIHNldERlY29kZXJUYXJnZXRDb250ZXh0KGNv
bnN0IEdyYXBoaWNzQ29udGV4dCopOworCiAgICAgSW1hZ2VGcmFtZUNhY2hlIG1fZnJhbWVDYWNo
ZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VEZWNvZGVyPiBtX2RlY29kZXI7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgJKHJldmlzaW9uIDIw
NzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAkod29y
a2luZyBjb3B5KQpAQCAtMzksNyArMzksNiBAQCB0eXBlZGVmIHN0cnVjdCBDR1BhdHRlcm4qIENH
UGF0dGVyblJlZjsKIHR5cGVkZWYgQ0dQYXR0ZXJuUmVmIFBsYXRmb3JtUGF0dGVyblB0cjsKICNl
bGlmIFVTRShESVJFQ1QyRCkKIGludGVyZmFjZSBJRDJEMUJpdG1hcEJydXNoOwotaW50ZXJmYWNl
IElEMkQxUmVuZGVyVGFyZ2V0OwogdHlwZWRlZiBJRDJEMUJpdG1hcEJydXNoKiBQbGF0Zm9ybVBh
dHRlcm5QdHI7CiAjZWxpZiBVU0UoQ0FJUk8pCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KQEAgLTUxLDYg
KzUwLDcgQEAgdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybVBhdHRlcm5QdHI7CiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsK
IGNsYXNzIEltYWdlOwogCiBjbGFzcyBQYXR0ZXJuIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8
UGF0dGVybj4gewpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAjaWYgIVVTRShESVJFQ1QyRCkK
ICAgICBQbGF0Zm9ybVBhdHRlcm5QdHIgY3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbnNmb3JtYXRpb24pIGNvbnN0OwogI2Vsc2UKLSAgICBQ
bGF0Zm9ybVBhdHRlcm5QdHIgY3JlYXRlUGxhdGZvcm1QYXR0ZXJuKElEMkQxUmVuZGVyVGFyZ2V0
KiwgZmxvYXQgYWxwaGEsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbnNmb3Jt
YXRpb24pIGNvbnN0OworICAgIFBsYXRmb3JtUGF0dGVyblB0ciBjcmVhdGVQbGF0Zm9ybVBhdHRl
cm4oY29uc3QgR3JhcGhpY3NDb250ZXh0JiwgZmxvYXQgYWxwaGEsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdXNlclNwYWNlVHJhbnNmb3JtYXRpb24pIGNvbnN0OwogI2VuZGlmCiAgICAgdm9pZCBz
ZXRQYXR0ZXJuU3BhY2VUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuU3Bh
Y2VUcmFuc2Zvcm1hdGlvbik7CiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBnZXRQYXR0ZXJu
U3BhY2VUcmFuc2Zvcm0oKSB7IHJldHVybiBtX3BhdHRlcm5TcGFjZVRyYW5zZm9ybWF0aW9uOyB9
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29u
dGV4dERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMDcyNzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzgsNyArMzM4LDggQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmVuZAogICAgIEQyRDFfVEFHIGZpcnN0LCBzZWNv
bmQ7CiAgICAgSFJFU1VMVCBociA9IG1fcmVuZGVyVGFyZ2V0LT5FbmREcmF3KCZmaXJzdCwgJnNl
Y29uZCk7CiAKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICBpZiAoIVNV
Q0NFRURFRChocikpCisgICAgICAgIFdURkxvZ0Fsd2F5cygiRmFpbGVkIGluIEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kRHJhdzogaHI9JWxkLCBmaXJzdD0lbGQsIHNlY29uZD0l
bGQiLCBociwgZmlyc3QsIHNlY29uZCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlOjpyZXN0b3JlKCkKQEAgLTczNiw3ICs3MzcsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBh
dXRvIGVsbGlwc2UgPSBEMkQxOjpFbGxpcHNlKEQyRDE6OlBvaW50MkYocmVjdC54KCksIHJlY3Qu
eSgpKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBhdXRvIGVsbGlwc2UgPSBE
MkQxOjpFbGxpcHNlKHJlY3QuY2VudGVyKCksIDAuNSAqIHJlY3Qud2lkdGgoKSwgMC41ICogcmVj
dC5oZWlnaHQoKSk7CiAKICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIApA
QCAtNzU4LDcgKzc1OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRl
cm4KICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNu
J3QgcmVhbGx5IG5lZWRlZCBvbiBXaW5kb3dzCiAKICAgICBjb25zdCBmbG9hdCBwYXR0ZXJuQWxw
aGEgPSAxOwotICAgIG1fZGF0YS0+bV9wYXR0ZXJuU3Ryb2tlQnJ1c2ggPSBhZG9wdENPTShtX3N0
YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb250ZXh0LCBwYXR0ZXJu
QWxwaGEsIHVzZXJUb0Jhc2VDVE0pKTsKKyAgICBtX2RhdGEtPm1fcGF0dGVyblN0cm9rZUJydXNo
ID0gYWRvcHRDT00obV9zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4o
KnRoaXMsIHBhdHRlcm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6YXBwbHlGaWxsUGF0dGVybigpCkBAIC03NzAsNyArNzcxLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oKQogICAgIEFmZmluZVRyYW5zZm9ybSB1c2Vy
VG9CYXNlQ1RNOyAvLyBGSVhNRTogVGhpcyBpc24ndCByZWFsbHkgbmVlZGVkIG9uIFdpbmRvd3MK
IAogICAgIGNvbnN0IGZsb2F0IHBhdHRlcm5BbHBoYSA9IDE7Ci0gICAgbV9kYXRhLT5tX3BhdHRl
cm5GaWxsQnJ1c2ggPSBhZG9wdENPTShtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9y
bVBhdHRlcm4oY29udGV4dCwgcGF0dGVybkFscGhhLCB1c2VyVG9CYXNlQ1RNKSk7CisgICAgbV9k
YXRhLT5tX3BhdHRlcm5GaWxsQnJ1c2ggPSBhZG9wdENPTShtX3N0YXRlLmZpbGxQYXR0ZXJuLT5j
cmVhdGVQbGF0Zm9ybVBhdHRlcm4oKnRoaXMsIHBhdHRlcm5BbHBoYSwgdXNlclRvQmFzZUNUTSkp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkK
QEAgLTEzMjksMjQgKzEzMzAsNTggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChj
b25zdCBGbAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjb250ZXh0ID0gcGxh
dGZvcm1Db250ZXh0KCk7Ci0KLSAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKLQog
ICAgIGRyYXdXaXRob3V0U2hhZG93KHJlY3QsIFt0aGlzLCByZWN0XShJRDJEMVJlbmRlclRhcmdl
dCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIEZsb2F0U2l6ZSByZW5kZXJUYXJnZXRTaXplID0g
cmVuZGVyVGFyZ2V0LT5HZXRTaXplKCk7Ci0gICAgICAgIGlmIChyZWN0LnNpemUoKSA9PSByZW5k
ZXJUYXJnZXRTaXplKQorICAgICAgICBGbG9hdFJlY3QgcmVuZGVyVGFyZ2V0UmVjdChGbG9hdFBv
aW50KCksIHJlbmRlclRhcmdldC0+R2V0U2l6ZSgpKTsKKyAgICAgICAgRmxvYXRSZWN0IHJlY3RU
b0NsZWFyKHJlY3QpOworCisgICAgICAgIGlmIChyZWN0VG9DbGVhci5jb250YWlucyhyZW5kZXJU
YXJnZXRSZWN0KSkgeworICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5TZXRUYWdzKDEsIF9fTElO
RV9fKTsKICAgICAgICAgICAgIHJlbmRlclRhcmdldC0+Q2xlYXIoKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsUmVjdGFuZ2xlKHJlY3QsIG1fZGF0YS0+YnJ1
c2hXaXRoQ29sb3IoY29sb3JXaXRoR2xvYmFsQWxwaGEoZmlsbENvbG9yKCkpKS5nZXQoKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXJlY3RUb0NsZWFy
LmludGVyc2VjdHMocmVuZGVyVGFyZ2V0UmVjdCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgcmVuZGVyVGFyZ2V0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKKyAgICAgICAgcmVjdFRv
Q2xlYXIuaW50ZXJzZWN0KHJlbmRlclRhcmdldFJlY3QpOworICAgICAgICByZW5kZXJUYXJnZXQt
PkZpbGxSZWN0YW5nbGUocmVjdFRvQ2xlYXIsIG1fZGF0YS0+YnJ1c2hXaXRoQ29sb3IoY29sb3JX
aXRoR2xvYmFsQWxwaGEoZmlsbENvbG9yKCkpKS5nZXQoKSk7CiAgICAgfSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
bGluZVdpZHRoKQogewotICAgICh2b2lkKXJlY3Q7Ci0gICAgKHZvaWQpbGluZVdpZHRoOwotICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlz
dFJlY29yZGVyLT5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCkgeworICAgICAgICBhdXRv
IGRyYXdGdW5jdGlvbiA9IFt0aGlzLCByZWN0LCBsaW5lV2lkdGhdKElEMkQxUmVuZGVyVGFyZ2V0
KiByZW5kZXJUYXJnZXQpIHsKKyAgICAgICAgICAgIHJlbmRlclRhcmdldC0+U2V0VGFncygxLCBf
X0xJTkVfXyk7CisgICAgICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsK
KyAgICAgICAgICAgIHJlbmRlclRhcmdldC0+RHJhd1JlY3RhbmdsZSgmZDJkUmVjdCwgbV9zdGF0
ZS5zdHJva2VHcmFkaWVudC0+Y3JlYXRlUGxhdGZvcm1HcmFkaWVudElmTmVjZXNzYXJ5KHJlbmRl
clRhcmdldCksIGxpbmVXaWR0aCwgbV9kYXRhLT5zdHJva2VTdHlsZSgpKTsKKyAgICAgICAgfTsK
KworICAgICAgICBpZiAoaGFzU2hhZG93KCkpCisgICAgICAgICAgICBkcmF3V2l0aFNoYWRvdyhy
ZWN0LCBkcmF3RnVuY3Rpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkcmF3V2l0aG91
dFNoYWRvdyhyZWN0LCBkcmF3RnVuY3Rpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKG1fc3RhdGUuc3Ryb2tlUGF0dGVybikKKyAgICAgICAgYXBwbHlTdHJva2VQYXR0ZXJu
KCk7CisKKyAgICBkcmF3V2l0aG91dFNoYWRvdyhyZWN0LCBbdGhpcywgcmVjdCwgbGluZVdpZHRo
XShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CisgICAgICAgIHJlbmRlclRhcmdl
dC0+U2V0VGFncygxLCBfX0xJTkVfXyk7CisgICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJl
Y3QgPSByZWN0OworICAgICAgICBhdXRvIGJydXNoID0gbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID8g
cGF0dGVyblN0cm9rZUJydXNoKCkgOiBzb2xpZFN0cm9rZUJydXNoKCk7CisgICAgICAgIHJlbmRl
clRhcmdldC0+RHJhd1JlY3RhbmdsZSgmZDJkUmVjdCwgYnJ1c2gsIGxpbmVXaWR0aCwgbV9kYXRh
LT5zdHJva2VTdHlsZSgpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dExpbmVDYXAoTGluZUNhcCBjYXApCkBAIC0xODEzLDcgKzE4NDgsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBzCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBhdXRvIGQyZEVsbGlwc2UgPSBEMkQxOjpFbGxpcHNlKEQyRDE6OlBvaW50MkYoZWxsaXBzZS54
KCksIGVsbGlwc2UueSgpKSwgZWxsaXBzZS53aWR0aCgpLCBlbGxpcHNlLmhlaWdodCgpKTsKKyAg
ICBhdXRvIGQyZEVsbGlwc2UgPSBEMkQxOjpFbGxpcHNlKGVsbGlwc2UuY2VudGVyKCksIDAuNSAq
IGVsbGlwc2Uud2lkdGgoKSwgMC41ICogZWxsaXBzZS5oZWlnaHQoKSk7CiAKICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+U2V0VGFncygxLCBfX0xJTkVfXyk7CiAKQEAgLTE4MzUsNyArMTg3MCw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGkKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGF1dG8gZDJkRWxsaXBzZSA9IEQyRDE6OkVsbGlwc2UoRDJEMTo6UG9p
bnQyRihlbGxpcHNlLngoKSwgZWxsaXBzZS55KCkpLCBlbGxpcHNlLndpZHRoKCksIGVsbGlwc2Uu
aGVpZ2h0KCkpOworICAgIGF1dG8gZDJkRWxsaXBzZSA9IEQyRDE6OkVsbGlwc2UoZWxsaXBzZS5j
ZW50ZXIoKSwgMC41ICogZWxsaXBzZS53aWR0aCgpLCAwLjUgKiBlbGxpcHNlLmhlaWdodCgpKTsK
IAogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5TZXRUYWdzKDEsIF9fTElORV9fKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZUJ1ZmZlckRpcmVjdDJELmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1h
Z2VCdWZmZXIKICAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBjb250ZXh0LnJlbmRl
cmluZ01vZGUoKTsKICAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0
aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVy
KHNjYWxlZFNpemUsIDEsIENvbG9yU3BhY2VTUkdCLCByZW5kZXJpbmdNb2RlLCBjb250ZXh0LnBs
YXRmb3JtQ29udGV4dCgpLCBzdWNjZXNzKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNjYWxlZFNpemUsIDEsIENvbG9yU3BhY2VTUkdC
LCByZW5kZXJpbmdNb2RlLCAmY29udGV4dCwgc3VjY2VzcykpOwogCiAgICAgaWYgKCFzdWNjZXNz
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTc2LDcgKzc2LDcgQEAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcgogICAgIHJldHVybiBidWZmZXI7CiB9CiAKLUlt
YWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSAvKmNvbG9yU3BhY2UqLywgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlLCBJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0LCBib29sJiBzdWNjZXNz
KQorSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIC8qY29sb3JTcGFjZSovLCBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwgYm9v
bCYgc3VjY2VzcykKICAgICA6IG1fbG9naWNhbFNpemUoc2l6ZSkKICAgICAsIG1fcmVzb2x1dGlv
blNjYWxlKHJlc29sdXRpb25TY2FsZSkKIHsKQEAgLTEwMSw2ICsxMDEsNyBAQCBJbWFnZUJ1ZmZl
cjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplCiAgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJm
bG93ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byByZW5kZXJUYXJnZXQgPSB0YXJn
ZXRDb250ZXh0ID8gdGFyZ2V0Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiBudWxscHRyOwog
ICAgIGlmICghcmVuZGVyVGFyZ2V0KQogICAgICAgICByZW5kZXJUYXJnZXQgPSBHcmFwaGljc0Nv
bnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKTsKICAgICBSRUxFQVNFX0FTU0VSVChyZW5kZXJU
YXJnZXQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
RGVjb2RlckRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMDcyNzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGly
ZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsMTQgKzE4NywxNCBAQCB1bnNpZ25lZCBJ
bWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4CiAgICAgcmV0dXJuIHdpZHRoICogaGVpZ2h0
ICogNDsKIH0KIAotdm9pZCBJbWFnZURlY29kZXI6OnNldFJlbmRlclRhcmdldChJRDJEMVJlbmRl
clRhcmdldCogcmVuZGVyVGFyZ2V0KQordm9pZCBJbWFnZURlY29kZXI6OnNldFRhcmdldENvbnRl
eHQoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKIHsKICAgICBtX3JlbmRlclRhcmdl
dCA9IHJlbmRlclRhcmdldDsKIH0KIAogTmF0aXZlSW1hZ2VQdHIgSW1hZ2VEZWNvZGVyOjpjcmVh
dGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2Ft
cGxpbmdMZXZlbCwgRGVjb2RpbmdNb2RlKSBjb25zdAogewotICAgIGlmICghbV9uYXRpdmVEZWNv
ZGVyKQorICAgIGlmICghbV9uYXRpdmVEZWNvZGVyIHx8ICFtX3JlbmRlclRhcmdldCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBDT01QdHI8SVdJQ0JpdG1hcEZyYW1lRGVjb2RlPiBm
cmFtZTsKQEAgLTIxMSwxMCArMjExLDYgQEAgTmF0aXZlSW1hZ2VQdHIgSW1hZ2VEZWNvZGVyOjpj
cmVhdGVGcmFtZQogICAgIGlmICghU1VDQ0VFREVEKGhyKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICBBU1NFUlQobV9yZW5kZXJUYXJnZXQpOwotICAgIGlmICghbV9yZW5kZXJUYXJn
ZXQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCiAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBi
aXRtYXA7CiAgICAgaHIgPSBtX3JlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFwRnJvbVdpY0JpdG1h
cChjb252ZXJ0ZXIuZ2V0KCksIG51bGxwdHIsICZiaXRtYXApOwogICAgIGlmICghU1VDQ0VFREVE
KGhyKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURl
Y29kZXJEaXJlY3QyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5oCShyZXZpc2lvbiAyMDcyNzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQu
aAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0Fs
bERhdGFSZWNlaXZlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNBbGxEYXRhUmVjZWl2ZWQ7IH0KICAg
ICB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpIHsgfQogCi0gICAgdm9pZCBzZXRS
ZW5kZXJUYXJnZXQoSUQyRDFSZW5kZXJUYXJnZXQqKTsKKyAgICB2b2lkIHNldFRhcmdldENvbnRl
eHQoSUQyRDFSZW5kZXJUYXJnZXQqKTsKIAogICAgIHN0YXRpYyBJV0lDSW1hZ2luZ0ZhY3Rvcnkq
IHN5c3RlbUltYWdpbmdGYWN0b3J5KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDIw
NzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVj
dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsMTEgKzkyLDYgQEAgdm9pZCBCaXRtYXBJbWFn
ZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyYwogICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxvYXRS
ZWN0KDAuMGYsIDAuMGYsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBj
b21wb3NpdGVPcCwgQmxlbmRNb2RlTm9ybWFsLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24o
KSk7CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6OnNldFJlbmRlclRhcmdldChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCi17Ci0gICAgbV9zb3VyY2Uuc2V0UmVuZGVyVGFyZ2V0KGNvbnRleHQpOwot
fQotCiB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGN0eHQsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxl
bmRNb2RlIGJsZW5kTW9kZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9OYXRpdmVJbWFnZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHAJKHJldmlz
aW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9OYXRp
dmVJbWFnZURpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPGQyZDEuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0dGVy
bkRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vUGF0dGVybkRpcmVjdDJELmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdHRlcm5EaXJlY3QyRC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDEyICszNyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSUQy
RDFCaXRtYXBCcnVzaCogUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKElEMkQxUmVuZGVy
VGFyZ2V0KiByZW5kZXJUYXJnZXQsIGZsb2F0IGFscGhhLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9uKSBjb25zdAorSUQyRDFCaXRtYXBCcnVzaCogUGF0dGVy
bjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
ZmxvYXQgYWxwaGEsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbnNmb3JtYXRp
b24pIGNvbnN0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVuZGVyVGFyZ2V0KTsKLQotICAgIEZs
b2F0UmVjdCB0aWxlUmVjdCA9IHRpbGVJbWFnZSgpLT5yZWN0KCk7Ci0KICAgICBBZmZpbmVUcmFu
c2Zvcm0gcGF0dGVyblRyYW5zZm9ybSA9IHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9uICogbV9wYXR0
ZXJuU3BhY2VUcmFuc2Zvcm1hdGlvbjsKICAgICBhdXRvIGJpdG1hcEJydXNoUHJvcGVydGllcyA9
IEQyRDE6OkJpdG1hcEJydXNoUHJvcGVydGllcygpOwogICAgIGJpdG1hcEJydXNoUHJvcGVydGll
cy5leHRlbmRNb2RlWCA9IG1fcmVwZWF0WCA/IEQyRDFfRVhURU5EX01PREVfV1JBUCA6IEQyRDFf
RVhURU5EX01PREVfQ0xBTVA7CkBAIC01Miw5ICs0OCwxNCBAQCBJRDJEMUJpdG1hcEJydXNoKiBQ
YXR0ZXJuOjpjcmVhdGVQbGF0Zm9yCiAgICAgYnJ1c2hQcm9wZXJ0aWVzLnRyYW5zZm9ybSA9IHBh
dHRlcm5UcmFuc2Zvcm07CiAgICAgYnJ1c2hQcm9wZXJ0aWVzLm9wYWNpdHkgPSBhbHBoYTsKIAor
ICAgIGF1dG8gcGF0dGVybkltYWdlID0gdGlsZUltYWdlKCk7CisKKyAgICBhdXRvIHBsYXRmb3Jt
Q29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAgUkVMRUFTRV9BU1NFUlQo
cGxhdGZvcm1Db250ZXh0KTsKKwogICAgIElEMkQxQml0bWFwQnJ1c2gqIHBhdHRlcm5CcnVzaCA9
IG51bGxwdHI7Ci0gICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFwQnJ1
c2godGlsZUltYWdlKCktPm5hdGl2ZUltYWdlKCkuZ2V0KCksICZiaXRtYXBCcnVzaFByb3BlcnRp
ZXMsICZicnVzaFByb3BlcnRpZXMsICZwYXR0ZXJuQnJ1c2gpOwotICAgIEFTU0VSVChocik7Cisg
ICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29udGV4dC0+Q3JlYXRlQml0bWFwQnJ1c2gocGF0dGVy
bkltYWdlLT5uYXRpdmVJbWFnZSgmY29udGV4dCkuZ2V0KCksICZiaXRtYXBCcnVzaFByb3BlcnRp
ZXMsICZicnVzaFByb3BlcnRpZXMsICZwYXR0ZXJuQnJ1c2gpOworICAgIEFTU0VSVChTVUNDRUVE
RUQoaHIpKTsKICAgICByZXR1cm4gcGF0dGVybkJydXNoOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAJKHJldmlzaW9u
IDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDEwIEBACiAjaW5jbHVkZSA8YWxnb3Jp
dGhtPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKKyNpZiBVU0UoRElSRUNUMkQpCisj
aW5jbHVkZSA8ZDJkMS5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGlj
IGlubGluZSB2b2lkIGVuZE1hdHJpeFJvdyhWZWN0b3I8ZmxvYXQ+JiBwYXJhbWV0ZXJzKQpAQCAt
MzEzLDE1ICszMTcsMjEgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6dXBkYXRlQmFja2lu
ZwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyOjphbGxv
Y2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKCkKK3ZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXI6OmFs
bG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRD
b250ZXh0KQogewogICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIGVmZmVjdCBjaGFpbiBoYXMgYmVl
biBidWlsdCwgYW5kIHRoZQogICAgIC8vIHNvdXJjZSBpbWFnZSBzaXplcyBzZXQuIFdlIGp1c3Qg
bmVlZCB0byBhdHRhY2ggdGhlIGdyYXBoaWMKICAgICAvLyBidWZmZXIgaWYgd2UgaGF2ZSBub3Qg
eWV0IGRvbmUgc28uCiAgICAgaWYgKCFtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQpIHsKICAgICAg
ICAgSW50U2l6ZSBsb2dpY2FsU2l6ZShtX3NvdXJjZURyYXdpbmdSZWdpb24ud2lkdGgoKSwgbV9z
b3VyY2VEcmF3aW5nUmVnaW9uLmhlaWdodCgpKTsKLSAgICAgICAgaWYgKCFzb3VyY2VJbWFnZSgp
IHx8IHNvdXJjZUltYWdlKCktPmxvZ2ljYWxTaXplKCkgIT0gbG9naWNhbFNpemUpCisgICAgICAg
IGlmICghc291cmNlSW1hZ2UoKSB8fCBzb3VyY2VJbWFnZSgpLT5sb2dpY2FsU2l6ZSgpICE9IGxv
Z2ljYWxTaXplKSB7CisjaWYgVVNFKERJUkVDVDJEKQorICAgICAgICAgICAgc2V0U291cmNlSW1h
Z2UoSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSgpLCAmdGFy
Z2V0Q29udGV4dCwgZmlsdGVyU2NhbGUoKSkpOworI2Vsc2UKKyAgICAgICAgICAgIFVOVVNFRF9Q
QVJBTSh0YXJnZXRDb250ZXh0KTsKICAgICAgICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVm
ZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUoKSwgZmlsdGVyU2NhbGUoKSkp
OworI2VuZGlmCisgICAgICAgIH0KICAgICAgICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0g
dHJ1ZTsKICAgICB9CiB9CkBAIC0zOTYsNyArNDA2LDcgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5k
ZXJlckhlbHBlcjo6YmVnaW5GaQogICAgIEFTU0VSVChtX3JlbmRlckxheWVyKTsKICAgICAKICAg
ICBGaWx0ZXJFZmZlY3RSZW5kZXJlciogZmlsdGVyID0gbV9yZW5kZXJMYXllci0+ZmlsdGVyUmVu
ZGVyZXIoKTsKLSAgICBmaWx0ZXItPmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoKTsKKyAg
ICBmaWx0ZXItPmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQobV90YXJnZXRDb250ZXh0KTsK
ICAgICAvLyBQYWludCBpbnRvIHRoZSBjb250ZXh0IHRoYXQgcmVwcmVzZW50cyB0aGUgU291cmNl
R3JhcGhpYyBvZiB0aGUgZmlsdGVyLgogICAgIEdyYXBoaWNzQ29udGV4dCogc291cmNlR3JhcGhp
Y3NDb250ZXh0ID0gZmlsdGVyLT5pbnB1dENvbnRleHQoKTsKICAgICBpZiAoIXNvdXJjZUdyYXBo
aWNzQ29udGV4dCB8fCBmaWx0ZXItPmZpbHRlclJlZ2lvbigpLmlzRW1wdHkoKSB8fCBJbWFnZUJ1
ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZmlsdGVyLT5maWx0ZXJSZWdpb24oKS5zaXplKCkpKSB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVy
ZXIuaAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRl
ckVmZmVjdFJlbmRlcmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50OwpAQCAtNTcsOCArNTgsOSBAQCBlbnVt
IEZpbHRlckNvbnN1bWVyIHsKIGNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyIHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBGaWx0ZXJFZmZlY3RSZW5k
ZXJlckhlbHBlcihib29sIGhhdmVGaWx0ZXJFZmZlY3QpCi0gICAgICAgIDogbV9oYXZlRmlsdGVy
RWZmZWN0KGhhdmVGaWx0ZXJFZmZlY3QpCisgICAgRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXIo
Ym9vbCBoYXZlRmlsdGVyRWZmZWN0LCBHcmFwaGljc0NvbnRleHQmIHRhcmdldENvbnRleHQpCisg
ICAgICAgIDogbV90YXJnZXRDb250ZXh0KHRhcmdldENvbnRleHQpCisgICAgICAgICwgbV9oYXZl
RmlsdGVyRWZmZWN0KGhhdmVGaWx0ZXJFZmZlY3QpCiAgICAgewogICAgIH0KICAgICAKQEAgLTc3
LDYgKzc5LDcgQEAgcHJpdmF0ZToKICAgICBSZW5kZXJMYXllciogbV9yZW5kZXJMYXllciB7IG51
bGxwdHIgfTsgLy8gRklYTUU6IHRoaXMgaXMgbWFpbmx5IHVzZWQgdG8gZ2V0IHRoZSBGaWx0ZXJF
ZmZlY3RSZW5kZXJlci4gRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXIgc2hvdWxkIGJlIHdlYW5l
ZCBvZmYgaXQuCiAgICAgTGF5b3V0UG9pbnQgbV9wYWludE9mZnNldDsKICAgICBMYXlvdXRSZWN0
IG1fcmVwYWludFJlY3Q7CisgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBtX3RhcmdldENvbnRl
eHQ7CiAgICAgYm9vbCBtX2hhdmVGaWx0ZXJFZmZlY3QgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9z
dGFydGVkRmlsdGVyRWZmZWN0IHsgZmFsc2UgfTsKIH07CkBAIC0xMDcsNyArMTEwLDcgQEAgcHVi
bGljOgogICAgIGJvb2wgYnVpbGQoUmVuZGVyRWxlbWVudCosIGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmLCBGaWx0ZXJDb25zdW1lcik7CiAgICAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxk
UmVmZXJlbmNlRmlsdGVyKFJlbmRlckVsZW1lbnQqLCBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4g
cHJldmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiopOwogICAgIGJvb2wgdXBk
YXRlQmFja2luZ1N0b3JlUmVjdChjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlY3QpOwotICAgIHZv
aWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCgpOworICAgIHZvaWQgYWxsb2NhdGVCYWNr
aW5nU3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAgICB2b2lkIGNsZWFy
SW50ZXJtZWRpYXRlUmVzdWx0cygpOwogICAgIHZvaWQgYXBwbHkoKTsKICAgICAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMjA3Mjc1KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDE2OCw3ICs0MTY4LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGFzRmlsdGVyVGhhdElz
UGFpbnRpbgogICAgIGlmICghaGFzUGFpbnRlZEZpbHRlcikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgYXV0byBmaWx0ZXJQYWludGVyID0gc3RkOjptYWtlX3VuaXF1ZTxGaWx0ZXJFZmZl
Y3RSZW5kZXJlckhlbHBlcj4oaGFzUGFpbnRlZEZpbHRlcik7CisgICAgYXV0byBmaWx0ZXJQYWlu
dGVyID0gc3RkOjptYWtlX3VuaXF1ZTxGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcj4oaGFzUGFp
bnRlZEZpbHRlciwgY29udGV4dCk7CiAgICAgaWYgKCFmaWx0ZXJQYWludGVyLT5oYXZlRmlsdGVy
RWZmZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDE4Miw3ICs0MTgyLDcgQEAg
c3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVySGVscAogCiAgICAgRmlsdGVySW5m
byogZmlsdGVySW5mbyA9IEZpbHRlckluZm86OmdldElmRXhpc3RzKCp0aGlzKTsKICAgICBib29s
IGhhc1BhaW50ZWRGaWx0ZXIgPSBmaWx0ZXJJbmZvICYmIGZpbHRlckluZm8tPnJlbmRlcmVyKCkg
JiYgcGFpbnRzV2l0aEZpbHRlcnMoKTsKLSAgICBhdXRvIGZpbHRlclBhaW50ZXIgPSBzdGQ6Om1h
a2VfdW5pcXVlPEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyPihoYXNQYWludGVkRmlsdGVyKTsK
KyAgICBhdXRvIGZpbHRlclBhaW50ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEZpbHRlckVmZmVjdFJl
bmRlcmVySGVscGVyPihoYXNQYWludGVkRmlsdGVyLCBjb250ZXh0KTsKIAogICAgIExheW91dFJl
Y3QgZmlsdGVyUmVwYWludFJlY3QgPSBmaWx0ZXJJbmZvLT5kaXJ0eVNvdXJjZVJlY3QoKTsKICAg
ICBmaWx0ZXJSZXBhaW50UmVjdC5tb3ZlKG9mZnNldEZyb21Sb290KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNiArNTQsMTEgQEAKICNpbmNsdWRlIDxydW50aW1lL0pTQ0lubGluZXMuaD4KICNpbmNsdWRl
IDxydW50aW1lL0pTTG9jay5oPgogCisjaWYgVVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIkNPTVB0
ci5oIgorI2luY2x1ZGUgPGQyZDEuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IFNWR0ltYWdlOjpTVkdJbWFnZShJbWFnZU9ic2VydmVyJiBvYnNlcnZlciwgY29uc3QgVVJMJiB1
cmwpCkBAIC0xODcsNyArMTkyLDcgQEAgdm9pZCBTVkdJbWFnZTo6ZHJhd0ZvckNvbnRhaW5lcihH
cmFwaGljcwogI2lmIFVTRShDQUlSTykKIC8vIFBhc3NlcyBvd25lcnNoaXAgb2YgdGhlIG5hdGl2
ZSBpbWFnZSB0byB0aGUgY2FsbGVyIHNvIE5hdGl2ZUltYWdlUHRyIG5lZWRzCiAvLyB0byBiZSBh
IHNtYXJ0IHBvaW50ZXIgdHlwZS4KLU5hdGl2ZUltYWdlUHRyIFNWR0ltYWdlOjpuYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpCitOYXRpdmVJbWFnZVB0ciBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KikKIHsKICAgICBpZiAoIW1fcGFn
ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMDQsNiArMjA5LDM4IEBAIE5hdGl2ZUlt
YWdlUHRyIFNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckMKIH0KICNlbmRpZgogCisjaWYgVVNFKERJ
UkVDVDJEKQorTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCkKK3sKKyAgICBBU1NFUlQodGFyZ2V0Q29udGV4dCk7
CisgICAgaWYgKCFtX3BhZ2UgfHwgIXRhcmdldENvbnRleHQpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgYXV0byBwbGF0Zm9ybUNvbnRleHQgPSB0YXJnZXRDb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKKyAgICBBU1NFUlQocGxhdGZvcm1Db250ZXh0KTsKKworICAgIC8vIERyYXcg
dGhlIFNWRyBpbnRvIGEgYml0bWFwLgorICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdl
dD4gbmF0aXZlSW1hZ2VUYXJnZXQ7CisgICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29udGV4dC0+
Q3JlYXRlQ29tcGF0aWJsZVJlbmRlclRhcmdldChJbnRTaXplKHJlY3QoKS5zaXplKCkpLCAmbmF0
aXZlSW1hZ2VUYXJnZXQpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIG5hdGl2
ZUltYWdlVGFyZ2V0LT5CZWdpbkRyYXcoKTsKKyAgICBHcmFwaGljc0NvbnRleHQgbG9jYWxDb250
ZXh0KG5hdGl2ZUltYWdlVGFyZ2V0LmdldCgpKTsKKyAgICBsb2NhbENvbnRleHQuc2V0RGlkQmVn
aW5EcmF3KHRydWUpOworCisgICAgZHJhdyhsb2NhbENvbnRleHQsIHJlY3QoKSwgcmVjdCgpLCBD
b21wb3NpdGVTb3VyY2VPdmVyLCBCbGVuZE1vZGVOb3JtYWwsIEltYWdlT3JpZW50YXRpb25EZXNj
cmlwdGlvbigpKTsKKworICAgIGhyID0gbmF0aXZlSW1hZ2VUYXJnZXQtPkZsdXNoKCk7CisgICAg
QVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBuYXRpdmVJ
bWFnZTsKKyAgICBociA9IG5hdGl2ZUltYWdlVGFyZ2V0LT5HZXRCaXRtYXAoJm5hdGl2ZUltYWdl
KTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICByZXR1cm4gbmF0aXZlSW1hZ2U7
Cit9CisjZW5kaWYKKwogdm9pZCBTVkdJbWFnZTo6ZHJhd1BhdHRlcm5Gb3JDb250YWluZXIoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFNpemUmIGNvbnRhaW5lclNpemUsIGZs
b2F0IHpvb20sIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKICAgICBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBjb25zdCBG
bG9hdFJlY3QmIGRzdFJlY3QsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcg
KzY2LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0QW5pbWF0aW9uKCkgZmluYWw7CiAKICNp
ZiBVU0UoQ0FJUk8pCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKSBmaW5hbDsKKyAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgZmluYWw7CisjZW5kaWYKKyNpZiBV
U0UoRElSRUNUMkQpCisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoY29uc3QgR3JhcGhp
Y3NDb250ZXh0KiA9IG51bGxwdHIpIGZpbmFsOwogI2VuZGlmCiAKIHByaXZhdGU6CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5l
ci5jcHAJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdJbWFnZUZvckNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2LDkgQEAg
dm9pZCBTVkdJbWFnZUZvckNvbnRhaW5lcjo6ZHJhd1BhdHRlcm4oRwogICAgIG1faW1hZ2UtPmRy
YXdQYXR0ZXJuRm9yQ29udGFpbmVyKGNvbnRleHQsIG1fY29udGFpbmVyU2l6ZSwgbV96b29tLCBz
cmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgY29tcG9zaXRlT3AsIGRz
dFJlY3QsIGJsZW5kTW9kZSk7CiB9CiAKLU5hdGl2ZUltYWdlUHRyIFNWR0ltYWdlRm9yQ29udGFp
bmVyOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCitOYXRpdmVJbWFnZVB0ciBTVkdJbWFn
ZUZvckNvbnRhaW5lcjo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3ND
b250ZXh0KiB0YXJnZXRDb250ZXh0KQogewotICAgIHJldHVybiBtX2ltYWdlLT5uYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpOworICAgIHJldHVybiBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSh0YXJnZXRDb250ZXh0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9yQ29udGFpbmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9yQ29u
dGFpbmVyLmgJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdJbWFnZUZvckNvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBA
IHB1YmxpYzoKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgdG8gYmUgbGVzcyBjb25zZXJ2
YXRpdmUuCiAgICAgYm9vbCBjdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JD
dXJyZW50RnJhbWUoKSBmaW5hbDsKKyAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgZmluYWw7CiAKIHBy
aXZhdGU6CiAgICAgU1ZHSW1hZ2VGb3JDb250YWluZXIoU1ZHSW1hZ2UqIGltYWdlLCBjb25zdCBG
bG9hdFNpemUmIGNvbnRhaW5lclNpemUsIGZsb2F0IHpvb20pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291670</attachid>
            <date>2016-10-14 14:58:20 -0700</date>
            <delta_ts>2016-10-14 15:13:57 -0700</delta_ts>
            <desc>Patch for landing.</desc>
            <filename>bug-163349-20161014145452.patch</filename>
            <type>text/plain</type>
            <size>40276</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzM1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg0IEBACisyMDE2LTEwLTE0ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBJ
bXBsZW1lbnQgYmFzaWMgU1ZHIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MzM0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIERpcmVjdDJEIG5lZWRzIGFjY2VzcyB0byB0aGUgdGFyZ2V0IGdy
YXBoaWNzIGNvbnRleHQgd2hlbiBnZW5lcmF0aW5nIGJpdG1hcAorICAgICAgICBpbWFnZXMgc28g
dGhhdCBpdCBjYW4gcHJvcGVybHkgbWF0Y2ggcGl4ZWwgZm9ybWF0IGFuZCBvdGhlciBzZXR0aW5n
cy4KKworICAgICAgICBBZGQgaW1wbGVtZW50YXRpb25zIGZvciBhIG51bWJlciBvZiBkcmF3aW5n
IHByaW1pdGl2ZXMgdXNlZCBpbiB0aGUgU1ZHCisgICAgICAgIHRlc3QgY2FzZXMuIENvcnJlY3Qg
c29tZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIENHIGFuZCBEaXJlY3QyRCBmb3IgZHJhd2luZworICAg
ICAgICBkaWZmZXJlbnQgcHJpbWl0aXZlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRlc3Rl
ZCBieSBleGlzdGluZyAnc3ZnJyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSW1h
Z2VBdEluZGV4KTogVGFrZSBvcHRpb25hbCB0YXJnZXQgZ3JhcGhpY3MKKyAgICAgICBjb250ZXh0
LiBBbHNvIHBhc3MgdGhlIGdyYXBoaWNzIGNvbnRleHQgdG8gdGhlIGltYWdlIGRlY29kZXIuCisg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSk6IEFjY2VwdCBhbiBvcHRp
b25hbCB0YXJnZXQgY29udGV4dC4KKyAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKTogRGl0dG8uCisgICAgICAgKFdlYkNvcmU6OkJpdG1hcElt
YWdlOjpkcmF3KTogUGFzcyB0YXJnZXQgZ3JhcGhpY3MgY29udGV4dCB0byB0aGUKKyAgICAgICAn
ZnJhbWVJbWFnZUF0SW5kZXgnIG1ldGhvZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6IE1vdmVkIGZyb20gaGVhZGVyLiBBZGQgY3JlYXRlIGZ1
bmN0aW9uIHRoYXQKKyAgICAgICAgdGFrZXMgYW4gb3B0aW9uYWwgR3JhcGhpY3NDb250ZXh0IGFy
Z3VtZW50LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcDogQWRkIG1pc3Npbmcg
aW5jbHVkZSBuZWVkZWQgdG8gYnVpbGQKKyAgICAgICAgdW5kZXIgRGlyZWN0MkQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VTb3VyY2U6OnNldERlY29kZXJUYXJnZXRDb250ZXh0KTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0UmVuZGVyVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL1BhdHRlcm4uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOjplbmREcmF3KTogTG9nIGVycm9yIHN0YXRlIGluc3RlYWQgb2YgY3Jh
c2hpbmcKKyAgICAgICAgZWFjaCB0aW1lLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkcmF3RWxsaXBzZSk6IEVsbGlwc2VzIGFyZSBkZWZpbmVkIGluIEQyRCBhcyBhIGNlbnRl
ciwgYW4KKyAgICAgICAgWC1yYWRpdXMsIGFuZCBhIFktcmFkaXVzLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KTogVXNlICdDbGVhcicgZnVuY3Rpb24gaWYgcG9z
c2libGUuIERvbid0IGNsZWFyCisgICAgICAgIGFueXRoaW5nIGlmIHRoZSBjbGVhciByZWN0IGlz
IG91dHNpZGUgdGhlIGRyYXdpbmcgYXJlYS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUmVjdCk6IFByb3ZpZGUgaW1wbGVtZW50YXRpb24gKG5lZWRlZCBieSBTVkcp
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNl
KTogRWxsaXBzZXMgYXJlIGRlZmluZWQgaW4gRDJEIGFzCisgICAgICAgIGEgY2VudGVyLCBhbiBY
LXJhZGl1cywgYW5kIGEgWS1yYWRpdXMuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKTogQWNjZXB0IG9wdGlvbmFsIEdyYXBo
aWNzQ29udGV4dCBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpJbWFn
ZUJ1ZmZlcik6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURl
Y29kZXJEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNldFRh
cmdldENvbnRleHQpOiBSZW5hbWVkIGZyb20gJ3NldFJlbmRlclRhcmdldCcuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kZXI6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KTogVGFrZSBvcHRp
b25hbCBHcmFwaGljc0NvbnRleHQgYXJndW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kZXI6OnNldFJlbmRlclRhcmdldCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OnNldFJlbmRlclRhcmdldCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3BwOiBBZGQgbWlzc2luZyBpbmNsdWRlLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGlyZWN0MkQuY3BwOiAKKyAgICAg
ICAgKFdlYkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybik6IFJldmlzZSBmb3Ig
bmV3IHNpZ25hdHVyZS4KKyAgICAgICAgKiByZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXI6OmFsbG9jYXRlQmFj
a2luZ1N0b3JlSWZOZWVkZWQpOiBQYXNzIEdyYXBoaWNzQ29udGV4dAorICAgICAgICB0byBJbWFn
ZUJ1ZmZlciBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRl
cmVySGVscGVyOjpiZWdpbkZpbHRlckVmZmVjdCk6IFBhc3MgdGFyZ2V0IGNvbnRleHQgdG8KKyAg
ICAgICAgZmlsdGVyIHdoZW4gYWxsb2NhdGluZyBiYWNraW5nIHN0b3JlLgorICAgICAgICAqIHJl
bmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oOiBBZGQgR3JhcGhpY3NDb250ZXh0IGFzIGFy
Z3VtZW50IHRvIGNvbnN0cnVjdG9yLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzRmlsdGVyVGhhdElzUGFpbnRp
bmcpOiBTdXBwbHkgR3JhcGhpY3NDb250ZXh0IGFyZ3VtZW50IHdoZW4KKyAgICAgICAgYnVpbGRp
bmcgbmV3IEZpbHRlckVmZmVjdFJlbmRlcmVyIGFuZCBoZWxwZXIuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6c2V0dXBGaWx0ZXJzKTogRGl0dG8uCisgICAgICAgICogc3ZnL2dyYXBo
aWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSk6IFJldmlzZSB0byB0YWtlIG9wdGlvbmFsIEdyYXBoaWNzQ29udGV4
dAorICAgICAgICBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJ
bWFnZSk6IERpdHRvLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5oOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJbWFnZUZvckNvbnRhaW5lcjo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOiBE
aXR0by4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuaDoKKwog
MjAxNi0xMC0xNCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAg
ICAgIENsZWFuIHVwIEJhY2tGb3J3YXJkQ2xpZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCShyZXZpc2lvbiAyMDcyNzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgwLDM5ICs4MCwzOSBAQCBib29sIEJpdG1hcEltYWdlOjpkYXRhQ2hhbmdl
ZChib29sIGFsbERhCiAgICAgcmV0dXJuIG1fc291cmNlLmRhdGFDaGFuZ2VkKGRhdGEoKSwgYWxs
RGF0YVJlY2VpdmVkKTsKIH0KIAotTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1h
Z2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVs
KQorTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBp
bmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBjb25zdCBHcmFwaGljc0Nv
bnRleHQqIHRhcmdldENvbnRleHQpCiB7CiAgICAgaWYgKGZyYW1lSGFzSW52YWxpZE5hdGl2ZUlt
YWdlQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCkpIHsKICAgICAgICAgTE9HKEltYWdl
cywgIkJpdG1hcEltYWdlICVwIGZyYW1lSW1hZ2VBdEluZGV4IC0gc3Vic2FtcGxpbmdMZXZlbCB3
YXMgJWQsIHJlc2FtcGxpbmciLCB0aGlzLCBzdGF0aWNfY2FzdDxpbnQ+KGZyYW1lU3Vic2FtcGxp
bmdMZXZlbEF0SW5kZXgoaW5kZXgpKSk7CiAgICAgICAgIGludmFsaWRhdGVQbGF0Zm9ybURhdGEo
KTsKICAgICB9CiAKLSAgICByZXR1cm4gbV9zb3VyY2UuZnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgs
IHN1YnNhbXBsaW5nTGV2ZWwpOworICAgIHJldHVybiBtX3NvdXJjZS5mcmFtZUltYWdlQXRJbmRl
eChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgdGFyZ2V0Q29udGV4dCk7CiB9CiAKLU5hdGl2ZUlt
YWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSgpCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJ
bWFnZTo6bmF0aXZlSW1hZ2UoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0KQog
ewotICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKKyAgICByZXR1cm4gZnJhbWVJbWFn
ZUF0SW5kZXgoMCwgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgdGFyZ2V0Q29udGV4dCk7CiB9
CiAKLU5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0KQogewotICAgIHJldHVybiBm
cmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VB
dEluZGV4KG1fY3VycmVudEZyYW1lLCBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0LCB0YXJnZXRD
b250ZXh0KTsKIH0KIAogI2lmIFVTRShDRykKLU5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpu
YXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQorTmF0aXZlSW1hZ2VQdHIgQml0
bWFwSW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCkKIHsKICAgICBzaXplX3QgY291bnQgPSBmcmFt
ZUNvdW50KCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAg
ICAgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpOworICAgICAgICBhdXRvIGlt
YWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSwgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgdGFy
Z2V0Q29udGV4dCk7CiAgICAgICAgIGlmIChpbWFnZSAmJiBuYXRpdmVJbWFnZVNpemUoaW1hZ2Up
ID09IHNpemUpCiAgICAgICAgICAgICByZXR1cm4gaW1hZ2U7CiAgICAgfQogCiAgICAgLy8gRmFs
bGJhY2sgdG8gdGhlIGZpcnN0IGZyYW1lIGltYWdlIGlmIHdlIGNhbid0IGZpbmQgdGhlIHJpZ2h0
IHNpemUKLSAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCk7CisgICAgcmV0dXJuIGZyYW1l
SW1hZ2VBdEluZGV4KDAsIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQsIHRhcmdldENvbnRleHQp
OwogfQogCiBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IEJpdG1hcEltYWdlOjpmcmFtZXNOYXRpdmVJ
bWFnZXMoKQpAQCAtMTQxLDEwICsxNDEsNiBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCYgCiAgICAgaWYgKGRlc3RSZWN0LmlzRW1wdHkoKSB8fCBzcmNSZWN0LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIHNldFJlbmRl
clRhcmdldChjb250ZXh0KTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIHN0YXJ0
QW5pbWF0aW9uKERvTm90Q2F0Y2hVcCk7CiAjZWxzZQpAQCAtMTYxLDcgKzE1Nyw3IEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiAKICAgICBTdWJzYW1wbGluZ0xldmVs
IHN1YnNhbXBsaW5nTGV2ZWwgPSBtX3NvdXJjZS5zdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUoc2Nh
bGUpOwogICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZSAlcCBkcmF3IC0gc3Vic2FtcGxpbmdM
ZXZlbCAlZCBhdCBzY2FsZSAlLjRmIiwgdGhpcywgc3RhdGljX2Nhc3Q8aW50PihzdWJzYW1wbGlu
Z0xldmVsKSwgc2NhbGUpOwogCi0gICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1f
Y3VycmVudEZyYW1lLCBzdWJzYW1wbGluZ0xldmVsKTsKKyAgICBhdXRvIGltYWdlID0gZnJhbWVJ
bWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsIHN1YnNhbXBsaW5nTGV2ZWwsICZjb250ZXh0KTsK
ICAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGlt
YWdlIHlldC4KICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTExNywyMSArMTE3LDE4IEBAIHB1YmxpYzoKICAgICBFdmFzX09iamVjdCogZ2V0RXZhc09i
amVjdChFdmFzKikgb3ZlcnJpZGU7CiAjZW5kaWYKIAotICAgIFdFQkNPUkVfRVhQT1JUIE5hdGl2
ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgb3ZlcnJpZGU7Ci0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCBO
YXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0
cikgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpIG92ZXJyaWRlOwogI2lmIFVTRShD
RykKLSAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJikg
b3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50
U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSBvdmVycmlkZTsKICAgICBW
ZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIG92ZXJyaWRlOwogI2Vu
ZGlmCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIHZvaWQgc2V0UmVuZGVyVGFyZ2V0KEdyYXBoaWNz
Q29udGV4dCYpOwotI2VuZGlmCiAKIHByb3RlY3RlZDoKICAgICBXRUJDT1JFX0VYUE9SVCBCaXRt
YXBJbWFnZShOYXRpdmVJbWFnZVB0ciYmLCBJbWFnZU9ic2VydmVyKiA9IG51bGxwdHIpOwogICAg
IFdFQkNPUkVfRVhQT1JUIEJpdG1hcEltYWdlKEltYWdlT2JzZXJ2ZXIqID0gbnVsbHB0cik7CiAK
LSAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5n
TGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKKyAgICBOYXRpdmVJbWFnZVB0ciBm
cmFtZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xl
dmVsOjpEZWZhdWx0LCBjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cik7CiAKICAgICAv
LyBDYWxsZWQgdG8gaW52YWxpZGF0ZSBjYWNoZWQgZGF0YS4gV2hlbiB8ZGVzdHJveUFsbHwgaXMg
dHJ1ZSwgd2Ugd2lwZSBvdXQKICAgICAvLyB0aGUgZW50aXJlIGZyYW1lIGJ1ZmZlciBjYWNoZSBh
bmQgdGVsbCB0aGUgaW1hZ2Ugc291cmNlIHRvIGRlc3Ryb3kKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDkg
KzEzNyw5IEBAIHB1YmxpYzoKIAogICAgIGVudW0gVGlsZVJ1bGUgeyBTdHJldGNoVGlsZSwgUm91
bmRUaWxlLCBTcGFjZVRpbGUsIFJlcGVhdFRpbGUgfTsKIAotICAgIHZpcnR1YWwgTmF0aXZlSW1h
Z2VQdHIgbmF0aXZlSW1hZ2UoKSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgdmlydHVhbCBOYXRp
dmVJbWFnZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4gbnVs
bHB0cjsgfQotICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBu
YXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgeyByZXR1cm4gbnVs
bHB0cjsgfQorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VPZlNpemUoY29u
c3QgSW50U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSB7IHJldHVybiBu
dWxscHRyOyB9CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgeyByZXR1cm4gbnVsbHB0
cjsgfQogICAgIHZpcnR1YWwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkZvckN1cnJlbnRG
cmFtZSgpIGNvbnN0IHsgcmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsgfQogICAgIHZpcnR1YWwg
VmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBmcmFtZXNOYXRpdmVJbWFnZXMoKSB7IHJldHVybiB7IH07
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4K
ICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDYgKzM4
LDI2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVk
TGVuZ3RoID0gNDA5NjsKIHN0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkQXJlYSA9IE1heENs
YW1wZWRMZW5ndGggKiBNYXhDbGFtcGVkTGVuZ3RoOwogCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlKQoreworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIHN1Y2Nlc3MpKTsKKyAgICBpZiAoIXN1
Y2Nlc3MpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBidWZmZXI7Cit9CisK
KyNpZiBVU0UoRElSRUNUMkQpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVm
ZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgYm9vbCBzdWNjZXNzID0g
ZmFsc2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdl
QnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwg
dGFyZ2V0Q29udGV4dCwgc3VjY2VzcykpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKyNlbmRpZgorCiBib29sIEltYWdl
QnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7CiAgICAg
aWYgKHNpemUuaXNFbXB0eSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwx
NSArMzUsMTIgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJE
YXRhLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgPG1lbW9yeT4KICNp
bmNsdWRlIDxydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
Ci0jaWYgUExBVEZPUk0oV0lOKQotaW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0OwotI2VuZGlm
Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvYXRSZWN0OwpAQCAtNzQsMTQgKzcx
LDEwIEBAIGNsYXNzIEltYWdlQnVmZmVyIHsKICAgICBmcmllbmQgY2xhc3MgSU9TdXJmYWNlOwog
cHVibGljOgogICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24g
ZmFpbHVyZS4KLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IENvbG9yU3BhY2VT
UkdCKQotICAgIHsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIHN1Y2Nlc3MpKTsKLSAgICAg
ICAgaWYgKCFzdWNjZXNzKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJl
dHVybiBidWZmZXI7Ci0gICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2Rl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZVNSR0Ip
OworI2lmIFVTRShESVJFQ1QyRCkKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9k
ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29s
b3JTcGFjZSA9IENvbG9yU3BhY2VTUkdCKTsKKyNlbmRpZgogCiAgICAgLy8gQ3JlYXRlIGFuIGlt
YWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRleHQsIHdpdGggc3VpdGFibGUgcmVz
b2x1dGlvbiBmb3IgZHJhd2luZyBpbnRvIHRoZSBidWZmZXIgYW5kIHRoZW4gaW50byB0aGlzIGNv
bnRleHQuCiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29t
cGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsK
QEAgLTE4Miw3ICsxNzUsNyBAQCBwcml2YXRlOgogI2lmIFVTRShDRykKICAgICBJbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENHQ29sb3JTcGFjZVJl
ZiwgUmVuZGVyaW5nTW9kZSwgYm9vbCYgc3VjY2Vzcyk7CiAjZWxpZiBVU0UoRElSRUNUMkQpCi0g
ICAgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBJRDJEMVJlbmRlclRhcmdldCosIGJvb2wmIHN1Y2Nl
c3MpOworICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Kiwg
Ym9vbCYgc3VjY2Vzcyk7CiAjZW5kaWYKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcAkocmV2aXNpb24gMjA3
Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOSBAQAogCiAjaWYgVVNFKENHKQogI2lu
Y2x1ZGUgIkltYWdlRGVjb2RlckNHLmgiCisjZWxpZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSAi
SW1hZ2VEZWNvZGVyRGlyZWN0MkQuaCIKKyNpbmNsdWRlIDxXaW5Db2RlYy5oPgogI2Vsc2UKICNp
bmNsdWRlICJJbWFnZURlY29kZXIuaCIKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAkocmV2aXNpb24gMjA3Mjc1KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTUsMTUgKzExNSwxOCBAQCBib29sIEltYWdlU291cmNlOjplbnN1cmVE
ZWNvZGVyQXZhaWxhYmxlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLSNpZiBVU0UoRElSRUNUMkQp
Ci12b2lkIEltYWdlU291cmNlOjpzZXRSZW5kZXJUYXJnZXQoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KQordm9pZCBJbWFnZVNvdXJjZTo6c2V0RGVjb2RlclRhcmdldENvbnRleHQoY29uc3QgR3Jh
cGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0KQogeworI2lmIFVTRShESVJFQ1QyRCkKICAgICBp
ZiAoIWlzRGVjb2RlckF2YWlsYWJsZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RlY29k
ZXItPnNldFJlbmRlclRhcmdldChjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKTsKLX0KKyAgICBp
ZiAodGFyZ2V0Q29udGV4dCkKKyAgICAgICAgbV9kZWNvZGVyLT5zZXRUYXJnZXRDb250ZXh0KHRh
cmdldENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KGNvbnRleHQpOwogI2VuZGlmCit9CiAKIHZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEoU2hhcmVk
QnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKIHsKQEAgLTIwOSw2ICsyMTIsMTMg
QEAgTmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSQogICAgIHJldHVybiBp
c0RlY29kZXJBdmFpbGFibGUoKSA/IG1fZGVjb2Rlci0+Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgo
aW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpIDogbnVsbHB0cjsKIH0KIAorTmF0aXZlSW1hZ2VQdHIg
SW1hZ2VTb3VyY2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdM
ZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRl
eHQpCit7CisgICAgc2V0RGVjb2RlclRhcmdldENvbnRleHQodGFyZ2V0Q29udGV4dCk7CisKKyAg
ICByZXR1cm4gbV9mcmFtZUNhY2hlLmZyYW1lSW1hZ2VBdEluZGV4KGluZGV4LCBzdWJzYW1wbGlu
Z0xldmVsKTsKK30KKwogdm9pZCBJbWFnZVNvdXJjZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykKIHsK
ICAgICB0cy5kdW1wUHJvcGVydHkoInR5cGUiLCBmaWxlbmFtZUV4dGVuc2lvbigpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAkocmV2
aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTAsIDIwMTIsIDIwMTQsIDIwMTYg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0y
MDA4LCAyMDEwLCAyMDEyLCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUb3JjaCBNb2JpbGUsIEluYy4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKQEAgLTU5LDEwICs1OSw2IEBAIHB1YmxpYzoKICAgICBib29sIGVuc3VyZURl
Y29kZXJBdmFpbGFibGUoU2hhcmVkQnVmZmVyKik7CiAgICAgYm9vbCBpc0RlY29kZXJBdmFpbGFi
bGUoKSBjb25zdCB7IHJldHVybiBtX2RlY29kZXIuZ2V0KCk7IH0KIAotI2lmIFVTRShESVJFQ1Qy
RCkKLSAgICB2b2lkIHNldFJlbmRlclRhcmdldChHcmFwaGljc0NvbnRleHQmKTsKLSNlbmRpZgot
CiAgICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2
ZWQpOwogICAgIGJvb2wgZGF0YUNoYW5nZWQoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERh
dGFSZWNlaXZlZCk7CiAKQEAgLTkzLDcgKzg5LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGZy
YW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGlu
Z0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCkgeyByZXR1cm4gbV9mcmFtZUNhY2hl
LmZyYW1lQnl0ZXNBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsgfQogICAgIGZsb2F0
IGZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9mcmFtZUNhY2hl
LmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsgfQogICAgIEltYWdlT3JpZW50YXRpb24gZnJh
bWVPcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUu
ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOyB9Ci0gICAgTmF0aXZlSW1hZ2VQdHIgZnJh
bWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5n
TGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUu
ZnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOyB9CisgICAgTmF0aXZl
SW1hZ2VQdHIgZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVs
ID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJn
ZXRDb250ZXh0ID0gbnVsbHB0cik7CiAKICAgICBTdWJzYW1wbGluZ0xldmVsIG1heGltdW1TdWJz
YW1wbGluZ0xldmVsKCk7CiAgICAgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsRm9y
U2NhbGUoZmxvYXQpOwpAQCAtMTA0LDcgKzEwMCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGVh
ckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90KTsKICAgICB2b2lkIGNsZWFyKGJvb2wgZGVzdHJveUFs
bCwgc2l6ZV90IGNvdW50LCBTaGFyZWRCdWZmZXIqIGRhdGEpOwogICAgIHZvaWQgZHVtcChUZXh0
U3RyZWFtJik7Ci0gICAgCisKKyAgICB2b2lkIHNldERlY29kZXJUYXJnZXRDb250ZXh0KGNvbnN0
IEdyYXBoaWNzQ29udGV4dCopOworCiAgICAgSW1hZ2VGcmFtZUNhY2hlIG1fZnJhbWVDYWNoZTsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VEZWNvZGVyPiBtX2RlY29kZXI7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgJKHJldmlzaW9uIDIwNzI3
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksNyArMzksNiBAQCB0eXBlZGVmIHN0cnVjdCBDR1BhdHRlcm4qIENHUGF0
dGVyblJlZjsKIHR5cGVkZWYgQ0dQYXR0ZXJuUmVmIFBsYXRmb3JtUGF0dGVyblB0cjsKICNlbGlm
IFVTRShESVJFQ1QyRCkKIGludGVyZmFjZSBJRDJEMUJpdG1hcEJydXNoOwotaW50ZXJmYWNlIElE
MkQxUmVuZGVyVGFyZ2V0OwogdHlwZWRlZiBJRDJEMUJpdG1hcEJydXNoKiBQbGF0Zm9ybVBhdHRl
cm5QdHI7CiAjZWxpZiBVU0UoQ0FJUk8pCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KQEAgLTUxLDYgKzUw
LDcgQEAgdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybVBhdHRlcm5QdHI7CiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNs
YXNzIEltYWdlOwogCiBjbGFzcyBQYXR0ZXJuIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8UGF0
dGVybj4gewpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAjaWYgIVVTRShESVJFQ1QyRCkKICAg
ICBQbGF0Zm9ybVBhdHRlcm5QdHIgY3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdXNlclNwYWNlVHJhbnNmb3JtYXRpb24pIGNvbnN0OwogI2Vsc2UKLSAgICBQbGF0
Zm9ybVBhdHRlcm5QdHIgY3JlYXRlUGxhdGZvcm1QYXR0ZXJuKElEMkQxUmVuZGVyVGFyZ2V0Kiwg
ZmxvYXQgYWxwaGEsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbnNmb3JtYXRp
b24pIGNvbnN0OworICAgIFBsYXRmb3JtUGF0dGVyblB0ciBjcmVhdGVQbGF0Zm9ybVBhdHRlcm4o
Y29uc3QgR3JhcGhpY3NDb250ZXh0JiwgZmxvYXQgYWxwaGEsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdXNlclNwYWNlVHJhbnNmb3JtYXRpb24pIGNvbnN0OwogI2VuZGlmCiAgICAgdm9pZCBzZXRQ
YXR0ZXJuU3BhY2VUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuU3BhY2VU
cmFuc2Zvcm1hdGlvbik7CiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBnZXRQYXR0ZXJuU3Bh
Y2VUcmFuc2Zvcm0oKSB7IHJldHVybiBtX3BhdHRlcm5TcGFjZVRyYW5zZm9ybWF0aW9uOyB9OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMDcyNzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzgsNyArMzM4LDggQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmVuZAogICAgIEQyRDFfVEFHIGZpcnN0LCBzZWNvbmQ7
CiAgICAgSFJFU1VMVCBociA9IG1fcmVuZGVyVGFyZ2V0LT5FbmREcmF3KCZmaXJzdCwgJnNlY29u
ZCk7CiAKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICBpZiAoIVNVQ0NF
RURFRChocikpCisgICAgICAgIFdURkxvZ0Fsd2F5cygiRmFpbGVkIGluIEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kRHJhdzogaHI9JWxkLCBmaXJzdD0lbGQsIHNlY29uZD0lbGQi
LCBociwgZmlyc3QsIHNlY29uZCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlOjpyZXN0b3JlKCkKQEAgLTczNiw3ICs3MzcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0VsbGlwc2UoY29uc3QgCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRv
IGVsbGlwc2UgPSBEMkQxOjpFbGxpcHNlKEQyRDE6OlBvaW50MkYocmVjdC54KCksIHJlY3QueSgp
KSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBhdXRvIGVsbGlwc2UgPSBEMkQx
OjpFbGxpcHNlKHJlY3QuY2VudGVyKCksIDAuNSAqIHJlY3Qud2lkdGgoKSwgMC41ICogcmVjdC5o
ZWlnaHQoKSk7CiAKICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIApAQCAt
NzU4LDcgKzc1OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4K
ICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNuJ3Qg
cmVhbGx5IG5lZWRlZCBvbiBXaW5kb3dzCiAKICAgICBjb25zdCBmbG9hdCBwYXR0ZXJuQWxwaGEg
PSAxOwotICAgIG1fZGF0YS0+bV9wYXR0ZXJuU3Ryb2tlQnJ1c2ggPSBhZG9wdENPTShtX3N0YXRl
LnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb250ZXh0LCBwYXR0ZXJuQWxw
aGEsIHVzZXJUb0Jhc2VDVE0pKTsKKyAgICBtX2RhdGEtPm1fcGF0dGVyblN0cm9rZUJydXNoID0g
YWRvcHRDT00obV9zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oKnRo
aXMsIHBhdHRlcm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6YXBwbHlGaWxsUGF0dGVybigpCkBAIC03NzAsNyArNzcxLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oKQogICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9C
YXNlQ1RNOyAvLyBGSVhNRTogVGhpcyBpc24ndCByZWFsbHkgbmVlZGVkIG9uIFdpbmRvd3MKIAog
ICAgIGNvbnN0IGZsb2F0IHBhdHRlcm5BbHBoYSA9IDE7Ci0gICAgbV9kYXRhLT5tX3BhdHRlcm5G
aWxsQnJ1c2ggPSBhZG9wdENPTShtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBh
dHRlcm4oY29udGV4dCwgcGF0dGVybkFscGhhLCB1c2VyVG9CYXNlQ1RNKSk7CisgICAgbV9kYXRh
LT5tX3BhdHRlcm5GaWxsQnJ1c2ggPSBhZG9wdENPTShtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVh
dGVQbGF0Zm9ybVBhdHRlcm4oKnRoaXMsIHBhdHRlcm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKQEAg
LTEzMjksMjQgKzEzMzAsNTggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25z
dCBGbAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7Ci0KLSAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKLQogICAg
IGRyYXdXaXRob3V0U2hhZG93KHJlY3QsIFt0aGlzLCByZWN0XShJRDJEMVJlbmRlclRhcmdldCog
cmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIEZsb2F0U2l6ZSByZW5kZXJUYXJnZXRTaXplID0gcmVu
ZGVyVGFyZ2V0LT5HZXRTaXplKCk7Ci0gICAgICAgIGlmIChyZWN0LnNpemUoKSA9PSByZW5kZXJU
YXJnZXRTaXplKQorICAgICAgICBGbG9hdFJlY3QgcmVuZGVyVGFyZ2V0UmVjdChGbG9hdFBvaW50
KCksIHJlbmRlclRhcmdldC0+R2V0U2l6ZSgpKTsKKyAgICAgICAgRmxvYXRSZWN0IHJlY3RUb0Ns
ZWFyKHJlY3QpOworCisgICAgICAgIGlmIChyZWN0VG9DbGVhci5jb250YWlucyhyZW5kZXJUYXJn
ZXRSZWN0KSkgeworICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5TZXRUYWdzKDEsIF9fTElORV9f
KTsKICAgICAgICAgICAgIHJlbmRlclRhcmdldC0+Q2xlYXIoKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsUmVjdGFuZ2xlKHJlY3QsIG1fZGF0YS0+YnJ1c2hX
aXRoQ29sb3IoY29sb3JXaXRoR2xvYmFsQWxwaGEoZmlsbENvbG9yKCkpKS5nZXQoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXJlY3RUb0NsZWFyLmlu
dGVyc2VjdHMocmVuZGVyVGFyZ2V0UmVjdCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgcmVuZGVyVGFyZ2V0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKKyAgICAgICAgcmVjdFRvQ2xl
YXIuaW50ZXJzZWN0KHJlbmRlclRhcmdldFJlY3QpOworICAgICAgICByZW5kZXJUYXJnZXQtPkZp
bGxSZWN0YW5nbGUocmVjdFRvQ2xlYXIsIG1fZGF0YS0+YnJ1c2hXaXRoQ29sb3IoY29sb3JXaXRo
R2xvYmFsQWxwaGEoZmlsbENvbG9yKCkpKS5nZXQoKSk7CiAgICAgfSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGlu
ZVdpZHRoKQogewotICAgICh2b2lkKXJlY3Q7Ci0gICAgKHZvaWQpbGluZVdpZHRoOwotICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJl
Y29yZGVyLT5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCkgeworICAgICAgICBhdXRvIGRy
YXdGdW5jdGlvbiA9IFt0aGlzLCByZWN0LCBsaW5lV2lkdGhdKElEMkQxUmVuZGVyVGFyZ2V0KiBy
ZW5kZXJUYXJnZXQpIHsKKyAgICAgICAgICAgIHJlbmRlclRhcmdldC0+U2V0VGFncygxLCBfX0xJ
TkVfXyk7CisgICAgICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKKyAg
ICAgICAgICAgIHJlbmRlclRhcmdldC0+RHJhd1JlY3RhbmdsZSgmZDJkUmVjdCwgbV9zdGF0ZS5z
dHJva2VHcmFkaWVudC0+Y3JlYXRlUGxhdGZvcm1HcmFkaWVudElmTmVjZXNzYXJ5KHJlbmRlclRh
cmdldCksIGxpbmVXaWR0aCwgbV9kYXRhLT5zdHJva2VTdHlsZSgpKTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBpZiAoaGFzU2hhZG93KCkpCisgICAgICAgICAgICBkcmF3V2l0aFNoYWRvdyhyZWN0
LCBkcmF3RnVuY3Rpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkcmF3V2l0aG91dFNo
YWRvdyhyZWN0LCBkcmF3RnVuY3Rpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKG1fc3RhdGUuc3Ryb2tlUGF0dGVybikKKyAgICAgICAgYXBwbHlTdHJva2VQYXR0ZXJuKCk7
CisKKyAgICBkcmF3V2l0aG91dFNoYWRvdyhyZWN0LCBbdGhpcywgcmVjdCwgbGluZVdpZHRoXShJ
RDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CisgICAgICAgIHJlbmRlclRhcmdldC0+
U2V0VGFncygxLCBfX0xJTkVfXyk7CisgICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3Qg
PSByZWN0OworICAgICAgICBhdXRvIGJydXNoID0gbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID8gcGF0
dGVyblN0cm9rZUJydXNoKCkgOiBzb2xpZFN0cm9rZUJydXNoKCk7CisgICAgICAgIHJlbmRlclRh
cmdldC0+RHJhd1JlY3RhbmdsZSgmZDJkUmVjdCwgYnJ1c2gsIGxpbmVXaWR0aCwgbV9kYXRhLT5z
dHJva2VTdHlsZSgpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExp
bmVDYXAoTGluZUNhcCBjYXApCkBAIC0xODEzLDcgKzE4NDgsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBzCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBh
dXRvIGQyZEVsbGlwc2UgPSBEMkQxOjpFbGxpcHNlKEQyRDE6OlBvaW50MkYoZWxsaXBzZS54KCks
IGVsbGlwc2UueSgpKSwgZWxsaXBzZS53aWR0aCgpLCBlbGxpcHNlLmhlaWdodCgpKTsKKyAgICBh
dXRvIGQyZEVsbGlwc2UgPSBEMkQxOjpFbGxpcHNlKGVsbGlwc2UuY2VudGVyKCksIDAuNSAqIGVs
bGlwc2Uud2lkdGgoKSwgMC41ICogZWxsaXBzZS5oZWlnaHQoKSk7CiAKICAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+U2V0VGFncygxLCBfX0xJTkVfXyk7CiAKQEAgLTE4MzUsNyArMTg3MCw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGkKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGF1dG8gZDJkRWxsaXBzZSA9IEQyRDE6OkVsbGlwc2UoRDJEMTo6UG9pbnQy
RihlbGxpcHNlLngoKSwgZWxsaXBzZS55KCkpLCBlbGxpcHNlLndpZHRoKCksIGVsbGlwc2UuaGVp
Z2h0KCkpOworICAgIGF1dG8gZDJkRWxsaXBzZSA9IEQyRDE6OkVsbGlwc2UoZWxsaXBzZS5jZW50
ZXIoKSwgMC41ICogZWxsaXBzZS53aWR0aCgpLCAwLjUgKiBlbGxpcHNlLmhlaWdodCgpKTsKIAog
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5TZXRUYWdzKDEsIF9fTElORV9fKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFn
ZUJ1ZmZlckRpcmVjdDJELmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Niw3ICs2Niw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VC
dWZmZXIKICAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBjb250ZXh0LnJlbmRlcmlu
Z01vZGUoKTsKICAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJs
ZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNj
YWxlZFNpemUsIDEsIENvbG9yU3BhY2VTUkdCLCByZW5kZXJpbmdNb2RlLCBjb250ZXh0LnBsYXRm
b3JtQ29udGV4dCgpLCBzdWNjZXNzKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNjYWxlZFNpemUsIDEsIENvbG9yU3BhY2VTUkdCLCBy
ZW5kZXJpbmdNb2RlLCAmY29udGV4dCwgc3VjY2VzcykpOwogCiAgICAgaWYgKCFzdWNjZXNzKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTc2LDcgKzc2LDcgQEAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcgogICAgIHJldHVybiBidWZmZXI7CiB9CiAKLUltYWdl
QnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSAvKmNvbG9yU3BhY2UqLywgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlLCBJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0LCBib29sJiBzdWNjZXNzKQor
SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIC8qY29sb3JTcGFjZSovLCBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwgYm9vbCYg
c3VjY2VzcykKICAgICA6IG1fbG9naWNhbFNpemUoc2l6ZSkKICAgICAsIG1fcmVzb2x1dGlvblNj
YWxlKHJlc29sdXRpb25TY2FsZSkKIHsKQEAgLTEwMSw2ICsxMDEsNyBAQCBJbWFnZUJ1ZmZlcjo6
SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplCiAgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byByZW5kZXJUYXJnZXQgPSB0YXJnZXRD
b250ZXh0ID8gdGFyZ2V0Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiBudWxscHRyOwogICAg
IGlmICghcmVuZGVyVGFyZ2V0KQogICAgICAgICByZW5kZXJUYXJnZXQgPSBHcmFwaGljc0NvbnRl
eHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKTsKICAgICBSRUxFQVNFX0FTU0VSVChyZW5kZXJUYXJn
ZXQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVj
b2RlckRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMDcyNzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0
MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsMTQgKzE4NywxNCBAQCB1bnNpZ25lZCBJbWFn
ZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4CiAgICAgcmV0dXJuIHdpZHRoICogaGVpZ2h0ICog
NDsKIH0KIAotdm9pZCBJbWFnZURlY29kZXI6OnNldFJlbmRlclRhcmdldChJRDJEMVJlbmRlclRh
cmdldCogcmVuZGVyVGFyZ2V0KQordm9pZCBJbWFnZURlY29kZXI6OnNldFRhcmdldENvbnRleHQo
SUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKIHsKICAgICBtX3JlbmRlclRhcmdldCA9
IHJlbmRlclRhcmdldDsKIH0KIAogTmF0aXZlSW1hZ2VQdHIgSW1hZ2VEZWNvZGVyOjpjcmVhdGVG
cmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxp
bmdMZXZlbCwgRGVjb2RpbmdNb2RlKSBjb25zdAogewotICAgIGlmICghbV9uYXRpdmVEZWNvZGVy
KQorICAgIGlmICghbV9uYXRpdmVEZWNvZGVyIHx8ICFtX3JlbmRlclRhcmdldCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKICAgICBDT01QdHI8SVdJQ0JpdG1hcEZyYW1lRGVjb2RlPiBmcmFt
ZTsKQEAgLTIxMSwxMCArMjExLDYgQEAgTmF0aXZlSW1hZ2VQdHIgSW1hZ2VEZWNvZGVyOjpjcmVh
dGVGcmFtZQogICAgIGlmICghU1VDQ0VFREVEKGhyKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICBBU1NFUlQobV9yZW5kZXJUYXJnZXQpOwotICAgIGlmICghbV9yZW5kZXJUYXJnZXQp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCiAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRt
YXA7CiAgICAgaHIgPSBtX3JlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFwRnJvbVdpY0JpdG1hcChj
b252ZXJ0ZXIuZ2V0KCksIG51bGxwdHIsICZiaXRtYXApOwogICAgIGlmICghU1VDQ0VFREVEKGhy
KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29k
ZXJEaXJlY3QyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5oCShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaAko
d29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0FsbERh
dGFSZWNlaXZlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNBbGxEYXRhUmVjZWl2ZWQ7IH0KICAgICB2
b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpIHsgfQogCi0gICAgdm9pZCBzZXRSZW5k
ZXJUYXJnZXQoSUQyRDFSZW5kZXJUYXJnZXQqKTsKKyAgICB2b2lkIHNldFRhcmdldENvbnRleHQo
SUQyRDFSZW5kZXJUYXJnZXQqKTsKIAogICAgIHN0YXRpYyBJV0lDSW1hZ2luZ0ZhY3RvcnkqIHN5
c3RlbUltYWdpbmdGYWN0b3J5KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDIwNzI3
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVjdDJE
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsMTEgKzkyLDYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6
ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyYwogICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxvYXRSZWN0
KDAuMGYsIDAuMGYsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBjb21w
b3NpdGVPcCwgQmxlbmRNb2RlTm9ybWFsLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oKSk7
CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6OnNldFJlbmRlclRhcmdldChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCi17Ci0gICAgbV9zb3VyY2Uuc2V0UmVuZGVyVGFyZ2V0KGNvbnRleHQpOwotfQot
CiB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGN0eHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRN
b2RlIGJsZW5kTW9kZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9OYXRpdmVJbWFnZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHAJKHJldmlzaW9u
IDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9OYXRpdmVJ
bWFnZURpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPGQyZDEuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0dGVybkRp
cmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vUGF0dGVybkRpcmVjdDJELmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdHRlcm5EaXJlY3QyRC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDEyICszNyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSUQyRDFC
aXRtYXBCcnVzaCogUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKElEMkQxUmVuZGVyVGFy
Z2V0KiByZW5kZXJUYXJnZXQsIGZsb2F0IGFscGhhLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVz
ZXJTcGFjZVRyYW5zZm9ybWF0aW9uKSBjb25zdAorSUQyRDFCaXRtYXBCcnVzaCogUGF0dGVybjo6
Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgZmxv
YXQgYWxwaGEsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbnNmb3JtYXRpb24p
IGNvbnN0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVuZGVyVGFyZ2V0KTsKLQotICAgIEZsb2F0
UmVjdCB0aWxlUmVjdCA9IHRpbGVJbWFnZSgpLT5yZWN0KCk7Ci0KICAgICBBZmZpbmVUcmFuc2Zv
cm0gcGF0dGVyblRyYW5zZm9ybSA9IHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9uICogbV9wYXR0ZXJu
U3BhY2VUcmFuc2Zvcm1hdGlvbjsKICAgICBhdXRvIGJpdG1hcEJydXNoUHJvcGVydGllcyA9IEQy
RDE6OkJpdG1hcEJydXNoUHJvcGVydGllcygpOwogICAgIGJpdG1hcEJydXNoUHJvcGVydGllcy5l
eHRlbmRNb2RlWCA9IG1fcmVwZWF0WCA/IEQyRDFfRVhURU5EX01PREVfV1JBUCA6IEQyRDFfRVhU
RU5EX01PREVfQ0xBTVA7CkBAIC01Miw5ICs0OCwxNCBAQCBJRDJEMUJpdG1hcEJydXNoKiBQYXR0
ZXJuOjpjcmVhdGVQbGF0Zm9yCiAgICAgYnJ1c2hQcm9wZXJ0aWVzLnRyYW5zZm9ybSA9IHBhdHRl
cm5UcmFuc2Zvcm07CiAgICAgYnJ1c2hQcm9wZXJ0aWVzLm9wYWNpdHkgPSBhbHBoYTsKIAorICAg
IGF1dG8gcGF0dGVybkltYWdlID0gdGlsZUltYWdlKCk7CisKKyAgICBhdXRvIHBsYXRmb3JtQ29u
dGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAgUkVMRUFTRV9BU1NFUlQocGxh
dGZvcm1Db250ZXh0KTsKKwogICAgIElEMkQxQml0bWFwQnJ1c2gqIHBhdHRlcm5CcnVzaCA9IG51
bGxwdHI7Ci0gICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFwQnJ1c2go
dGlsZUltYWdlKCktPm5hdGl2ZUltYWdlKCkuZ2V0KCksICZiaXRtYXBCcnVzaFByb3BlcnRpZXMs
ICZicnVzaFByb3BlcnRpZXMsICZwYXR0ZXJuQnJ1c2gpOwotICAgIEFTU0VSVChocik7CisgICAg
SFJFU1VMVCBociA9IHBsYXRmb3JtQ29udGV4dC0+Q3JlYXRlQml0bWFwQnJ1c2gocGF0dGVybklt
YWdlLT5uYXRpdmVJbWFnZSgmY29udGV4dCkuZ2V0KCksICZiaXRtYXBCcnVzaFByb3BlcnRpZXMs
ICZicnVzaFByb3BlcnRpZXMsICZwYXR0ZXJuQnJ1c2gpOworICAgIEFTU0VSVChTVUNDRUVERUQo
aHIpKTsKICAgICByZXR1cm4gcGF0dGVybkJydXNoOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAJKHJldmlzaW9uIDIw
NzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDEwIEBACiAjaW5jbHVkZSA8YWxnb3JpdGht
PgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKKyNpZiBVU0UoRElSRUNUMkQpCisjaW5j
bHVkZSA8ZDJkMS5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGlu
bGluZSB2b2lkIGVuZE1hdHJpeFJvdyhWZWN0b3I8ZmxvYXQ+JiBwYXJhbWV0ZXJzKQpAQCAtMzEz
LDE1ICszMTcsMjEgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6dXBkYXRlQmFja2luZwog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyOjphbGxvY2F0
ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKCkKK3ZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXI6OmFsbG9j
YXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRDb250
ZXh0KQogewogICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIGVmZmVjdCBjaGFpbiBoYXMgYmVlbiBi
dWlsdCwgYW5kIHRoZQogICAgIC8vIHNvdXJjZSBpbWFnZSBzaXplcyBzZXQuIFdlIGp1c3QgbmVl
ZCB0byBhdHRhY2ggdGhlIGdyYXBoaWMKICAgICAvLyBidWZmZXIgaWYgd2UgaGF2ZSBub3QgeWV0
IGRvbmUgc28uCiAgICAgaWYgKCFtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQpIHsKICAgICAgICAg
SW50U2l6ZSBsb2dpY2FsU2l6ZShtX3NvdXJjZURyYXdpbmdSZWdpb24ud2lkdGgoKSwgbV9zb3Vy
Y2VEcmF3aW5nUmVnaW9uLmhlaWdodCgpKTsKLSAgICAgICAgaWYgKCFzb3VyY2VJbWFnZSgpIHx8
IHNvdXJjZUltYWdlKCktPmxvZ2ljYWxTaXplKCkgIT0gbG9naWNhbFNpemUpCisgICAgICAgIGlm
ICghc291cmNlSW1hZ2UoKSB8fCBzb3VyY2VJbWFnZSgpLT5sb2dpY2FsU2l6ZSgpICE9IGxvZ2lj
YWxTaXplKSB7CisjaWYgVVNFKERJUkVDVDJEKQorICAgICAgICAgICAgc2V0U291cmNlSW1hZ2Uo
SW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSgpLCAmdGFyZ2V0
Q29udGV4dCwgZmlsdGVyU2NhbGUoKSkpOworI2Vsc2UKKyAgICAgICAgICAgIFVOVVNFRF9QQVJB
TSh0YXJnZXRDb250ZXh0KTsKICAgICAgICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVy
OjpjcmVhdGUobG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUoKSwgZmlsdGVyU2NhbGUoKSkpOwor
I2VuZGlmCisgICAgICAgIH0KICAgICAgICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0gdHJ1
ZTsKICAgICB9CiB9CkBAIC0zOTYsNyArNDA2LDcgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJl
ckhlbHBlcjo6YmVnaW5GaQogICAgIEFTU0VSVChtX3JlbmRlckxheWVyKTsKICAgICAKICAgICBG
aWx0ZXJFZmZlY3RSZW5kZXJlciogZmlsdGVyID0gbV9yZW5kZXJMYXllci0+ZmlsdGVyUmVuZGVy
ZXIoKTsKLSAgICBmaWx0ZXItPmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoKTsKKyAgICBm
aWx0ZXItPmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQobV90YXJnZXRDb250ZXh0KTsKICAg
ICAvLyBQYWludCBpbnRvIHRoZSBjb250ZXh0IHRoYXQgcmVwcmVzZW50cyB0aGUgU291cmNlR3Jh
cGhpYyBvZiB0aGUgZmlsdGVyLgogICAgIEdyYXBoaWNzQ29udGV4dCogc291cmNlR3JhcGhpY3ND
b250ZXh0ID0gZmlsdGVyLT5pbnB1dENvbnRleHQoKTsKICAgICBpZiAoIXNvdXJjZUdyYXBoaWNz
Q29udGV4dCB8fCBmaWx0ZXItPmZpbHRlclJlZ2lvbigpLmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZl
cjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZmlsdGVyLT5maWx0ZXJSZWdpb24oKS5zaXplKCkpKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIu
aAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50OwpAQCAtNTcsOCArNTgsOSBAQCBlbnVtIEZp
bHRlckNvbnN1bWVyIHsKIGNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyIHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBGaWx0ZXJFZmZlY3RSZW5kZXJl
ckhlbHBlcihib29sIGhhdmVGaWx0ZXJFZmZlY3QpCi0gICAgICAgIDogbV9oYXZlRmlsdGVyRWZm
ZWN0KGhhdmVGaWx0ZXJFZmZlY3QpCisgICAgRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXIoYm9v
bCBoYXZlRmlsdGVyRWZmZWN0LCBHcmFwaGljc0NvbnRleHQmIHRhcmdldENvbnRleHQpCisgICAg
ICAgIDogbV90YXJnZXRDb250ZXh0KHRhcmdldENvbnRleHQpCisgICAgICAgICwgbV9oYXZlRmls
dGVyRWZmZWN0KGhhdmVGaWx0ZXJFZmZlY3QpCiAgICAgewogICAgIH0KICAgICAKQEAgLTc3LDYg
Kzc5LDcgQEAgcHJpdmF0ZToKICAgICBSZW5kZXJMYXllciogbV9yZW5kZXJMYXllciB7IG51bGxw
dHIgfTsgLy8gRklYTUU6IHRoaXMgaXMgbWFpbmx5IHVzZWQgdG8gZ2V0IHRoZSBGaWx0ZXJFZmZl
Y3RSZW5kZXJlci4gRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXIgc2hvdWxkIGJlIHdlYW5lZCBv
ZmYgaXQuCiAgICAgTGF5b3V0UG9pbnQgbV9wYWludE9mZnNldDsKICAgICBMYXlvdXRSZWN0IG1f
cmVwYWludFJlY3Q7CisgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBtX3RhcmdldENvbnRleHQ7
CiAgICAgYm9vbCBtX2hhdmVGaWx0ZXJFZmZlY3QgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zdGFy
dGVkRmlsdGVyRWZmZWN0IHsgZmFsc2UgfTsKIH07CkBAIC0xMDcsNyArMTEwLDcgQEAgcHVibGlj
OgogICAgIGJvb2wgYnVpbGQoUmVuZGVyRWxlbWVudCosIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMm
LCBGaWx0ZXJDb25zdW1lcik7CiAgICAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkUmVm
ZXJlbmNlRmlsdGVyKFJlbmRlckVsZW1lbnQqLCBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gcHJl
dmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiopOwogICAgIGJvb2wgdXBkYXRl
QmFja2luZ1N0b3JlUmVjdChjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlY3QpOwotICAgIHZvaWQg
YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCgpOworICAgIHZvaWQgYWxsb2NhdGVCYWNraW5n
U3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAgICB2b2lkIGNsZWFySW50
ZXJtZWRpYXRlUmVzdWx0cygpOwogICAgIHZvaWQgYXBwbHkoKTsKICAgICAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDE2OCw3ICs0MTY4LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGFzRmlsdGVyVGhhdElzUGFp
bnRpbgogICAgIGlmICghaGFzUGFpbnRlZEZpbHRlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgYXV0byBmaWx0ZXJQYWludGVyID0gc3RkOjptYWtlX3VuaXF1ZTxGaWx0ZXJFZmZlY3RS
ZW5kZXJlckhlbHBlcj4oaGFzUGFpbnRlZEZpbHRlcik7CisgICAgYXV0byBmaWx0ZXJQYWludGVy
ID0gc3RkOjptYWtlX3VuaXF1ZTxGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcj4oaGFzUGFpbnRl
ZEZpbHRlciwgY29udGV4dCk7CiAgICAgaWYgKCFmaWx0ZXJQYWludGVyLT5oYXZlRmlsdGVyRWZm
ZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDE4Miw3ICs0MTgyLDcgQEAgc3Rk
Ojp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVySGVscAogCiAgICAgRmlsdGVySW5mbyog
ZmlsdGVySW5mbyA9IEZpbHRlckluZm86OmdldElmRXhpc3RzKCp0aGlzKTsKICAgICBib29sIGhh
c1BhaW50ZWRGaWx0ZXIgPSBmaWx0ZXJJbmZvICYmIGZpbHRlckluZm8tPnJlbmRlcmVyKCkgJiYg
cGFpbnRzV2l0aEZpbHRlcnMoKTsKLSAgICBhdXRvIGZpbHRlclBhaW50ZXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyPihoYXNQYWludGVkRmlsdGVyKTsKKyAg
ICBhdXRvIGZpbHRlclBhaW50ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEZpbHRlckVmZmVjdFJlbmRl
cmVySGVscGVyPihoYXNQYWludGVkRmlsdGVyLCBjb250ZXh0KTsKIAogICAgIExheW91dFJlY3Qg
ZmlsdGVyUmVwYWludFJlY3QgPSBmaWx0ZXJJbmZvLT5kaXJ0eVNvdXJjZVJlY3QoKTsKICAgICBm
aWx0ZXJSZXBhaW50UmVjdC5tb3ZlKG9mZnNldEZyb21Sb290KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQs
NiArNTQsMTEgQEAKICNpbmNsdWRlIDxydW50aW1lL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxy
dW50aW1lL0pTTG9jay5oPgogCisjaWYgVVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIkNPTVB0ci5o
IgorI2luY2x1ZGUgPGQyZDEuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNW
R0ltYWdlOjpTVkdJbWFnZShJbWFnZU9ic2VydmVyJiBvYnNlcnZlciwgY29uc3QgVVJMJiB1cmwp
CkBAIC0xODcsNyArMTkyLDcgQEAgdm9pZCBTVkdJbWFnZTo6ZHJhd0ZvckNvbnRhaW5lcihHcmFw
aGljcwogI2lmIFVTRShDQUlSTykKIC8vIFBhc3NlcyBvd25lcnNoaXAgb2YgdGhlIG5hdGl2ZSBp
bWFnZSB0byB0aGUgY2FsbGVyIHNvIE5hdGl2ZUltYWdlUHRyIG5lZWRzCiAvLyB0byBiZSBhIHNt
YXJ0IHBvaW50ZXIgdHlwZS4KLU5hdGl2ZUltYWdlUHRyIFNWR0ltYWdlOjpuYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpCitOYXRpdmVJbWFnZVB0ciBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JD
dXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KikKIHsKICAgICBpZiAoIW1fcGFnZSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMDQsNiArMjA5LDM4IEBAIE5hdGl2ZUltYWdl
UHRyIFNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckMKIH0KICNlbmRpZgogCisjaWYgVVNFKERJUkVD
VDJEKQorTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCogdGFyZ2V0Q29udGV4dCkKK3sKKyAgICBBU1NFUlQodGFyZ2V0Q29udGV4dCk7Cisg
ICAgaWYgKCFtX3BhZ2UgfHwgIXRhcmdldENvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgYXV0byBwbGF0Zm9ybUNvbnRleHQgPSB0YXJnZXRDb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKTsKKyAgICBBU1NFUlQocGxhdGZvcm1Db250ZXh0KTsKKworICAgIC8vIERyYXcgdGhl
IFNWRyBpbnRvIGEgYml0bWFwLgorICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4g
bmF0aXZlSW1hZ2VUYXJnZXQ7CisgICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29udGV4dC0+Q3Jl
YXRlQ29tcGF0aWJsZVJlbmRlclRhcmdldChJbnRTaXplKHJlY3QoKS5zaXplKCkpLCAmbmF0aXZl
SW1hZ2VUYXJnZXQpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIG5hdGl2ZUlt
YWdlVGFyZ2V0LT5CZWdpbkRyYXcoKTsKKyAgICBHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0
KG5hdGl2ZUltYWdlVGFyZ2V0LmdldCgpKTsKKyAgICBsb2NhbENvbnRleHQuc2V0RGlkQmVnaW5E
cmF3KHRydWUpOworCisgICAgZHJhdyhsb2NhbENvbnRleHQsIHJlY3QoKSwgcmVjdCgpLCBDb21w
b3NpdGVTb3VyY2VPdmVyLCBCbGVuZE1vZGVOb3JtYWwsIEltYWdlT3JpZW50YXRpb25EZXNjcmlw
dGlvbigpKTsKKworICAgIGhyID0gbmF0aXZlSW1hZ2VUYXJnZXQtPkZsdXNoKCk7CisgICAgQVNT
RVJUKFNVQ0NFRURFRChocikpOworCisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBuYXRpdmVJbWFn
ZTsKKyAgICBociA9IG5hdGl2ZUltYWdlVGFyZ2V0LT5HZXRCaXRtYXAoJm5hdGl2ZUltYWdlKTsK
KyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICByZXR1cm4gbmF0aXZlSW1hZ2U7Cit9
CisjZW5kaWYKKwogdm9pZCBTVkdJbWFnZTo6ZHJhd1BhdHRlcm5Gb3JDb250YWluZXIoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFNpemUmIGNvbnRhaW5lclNpemUsIGZsb2F0
IHpvb20sIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBjb25zdCBGbG9h
dFJlY3QmIGRzdFJlY3QsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2
LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0QW5pbWF0aW9uKCkgZmluYWw7CiAKICNpZiBV
U0UoQ0FJUk8pCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KSBmaW5hbDsKKyAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShj
b25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgZmluYWw7CisjZW5kaWYKKyNpZiBVU0Uo
RElSRUNUMkQpCisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoY29uc3QgR3JhcGhpY3ND
b250ZXh0KiA9IG51bGxwdHIpIGZpbmFsOwogI2VuZGlmCiAKIHByaXZhdGU6CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5j
cHAJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJ
bWFnZUZvckNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2LDkgQEAgdm9p
ZCBTVkdJbWFnZUZvckNvbnRhaW5lcjo6ZHJhd1BhdHRlcm4oRwogICAgIG1faW1hZ2UtPmRyYXdQ
YXR0ZXJuRm9yQ29udGFpbmVyKGNvbnRleHQsIG1fY29udGFpbmVyU2l6ZSwgbV96b29tLCBzcmNS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgY29tcG9zaXRlT3AsIGRzdFJl
Y3QsIGJsZW5kTW9kZSk7CiB9CiAKLU5hdGl2ZUltYWdlUHRyIFNWR0ltYWdlRm9yQ29udGFpbmVy
OjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCitOYXRpdmVJbWFnZVB0ciBTVkdJbWFnZUZv
ckNvbnRhaW5lcjo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3NDb250
ZXh0KiB0YXJnZXRDb250ZXh0KQogewotICAgIHJldHVybiBtX2ltYWdlLT5uYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpOworICAgIHJldHVybiBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSh0YXJnZXRDb250ZXh0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9yQ29udGFpbmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9yQ29udGFp
bmVyLmgJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdJbWFnZUZvckNvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHB1
YmxpYzoKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgdG8gYmUgbGVzcyBjb25zZXJ2YXRp
dmUuCiAgICAgYm9vbCBjdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBmYWxzZTsgfQogCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKSBmaW5hbDsKKyAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgZmluYWw7CiAKIHByaXZh
dGU6CiAgICAgU1ZHSW1hZ2VGb3JDb250YWluZXIoU1ZHSW1hZ2UqIGltYWdlLCBjb25zdCBGbG9h
dFNpemUmIGNvbnRhaW5lclNpemUsIGZsb2F0IHpvb20pCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291671</attachid>
            <date>2016-10-14 15:14:01 -0700</date>
            <delta_ts>2016-10-14 15:44:53 -0700</delta_ts>
            <desc>Patch for landing.</desc>
            <filename>bug-163349-20161014151032.patch</filename>
            <type>text/plain</type>
            <size>40282</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzM1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg0IEBACisyMDE2LTEwLTE0ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBJ
bXBsZW1lbnQgYmFzaWMgU1ZHIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MzM0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIERpcmVjdDJEIG5lZWRzIGFjY2VzcyB0byB0aGUgdGFyZ2V0IGdy
YXBoaWNzIGNvbnRleHQgd2hlbiBnZW5lcmF0aW5nIGJpdG1hcAorICAgICAgICBpbWFnZXMgc28g
dGhhdCBpdCBjYW4gcHJvcGVybHkgbWF0Y2ggcGl4ZWwgZm9ybWF0IGFuZCBvdGhlciBzZXR0aW5n
cy4KKworICAgICAgICBBZGQgaW1wbGVtZW50YXRpb25zIGZvciBhIG51bWJlciBvZiBkcmF3aW5n
IHByaW1pdGl2ZXMgdXNlZCBpbiB0aGUgU1ZHCisgICAgICAgIHRlc3QgY2FzZXMuIENvcnJlY3Qg
c29tZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIENHIGFuZCBEaXJlY3QyRCBmb3IgZHJhd2luZworICAg
ICAgICBkaWZmZXJlbnQgcHJpbWl0aXZlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRlc3Rl
ZCBieSBleGlzdGluZyAnc3ZnJyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSW1h
Z2VBdEluZGV4KTogVGFrZSBvcHRpb25hbCB0YXJnZXQgZ3JhcGhpY3MKKyAgICAgICBjb250ZXh0
LiBBbHNvIHBhc3MgdGhlIGdyYXBoaWNzIGNvbnRleHQgdG8gdGhlIGltYWdlIGRlY29kZXIuCisg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSk6IEFjY2VwdCBhbiBvcHRp
b25hbCB0YXJnZXQgY29udGV4dC4KKyAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKTogRGl0dG8uCisgICAgICAgKFdlYkNvcmU6OkJpdG1hcElt
YWdlOjpkcmF3KTogUGFzcyB0YXJnZXQgZ3JhcGhpY3MgY29udGV4dCB0byB0aGUKKyAgICAgICAn
ZnJhbWVJbWFnZUF0SW5kZXgnIG1ldGhvZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6IE1vdmVkIGZyb20gaGVhZGVyLiBBZGQgY3JlYXRlIGZ1
bmN0aW9uIHRoYXQKKyAgICAgICAgdGFrZXMgYW4gb3B0aW9uYWwgR3JhcGhpY3NDb250ZXh0IGFy
Z3VtZW50LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcDogQWRkIG1pc3Npbmcg
aW5jbHVkZSBuZWVkZWQgdG8gYnVpbGQKKyAgICAgICAgdW5kZXIgRGlyZWN0MkQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VTb3VyY2U6OnNldERlY29kZXJUYXJnZXRDb250ZXh0KTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0UmVuZGVyVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL1BhdHRlcm4uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOjplbmREcmF3KTogTG9nIGVycm9yIHN0YXRlIGluc3RlYWQgb2YgY3Jh
c2hpbmcKKyAgICAgICAgZWFjaCB0aW1lLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkcmF3RWxsaXBzZSk6IEVsbGlwc2VzIGFyZSBkZWZpbmVkIGluIEQyRCBhcyBhIGNlbnRl
ciwgYW4KKyAgICAgICAgWC1yYWRpdXMsIGFuZCBhIFktcmFkaXVzLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KTogVXNlICdDbGVhcicgZnVuY3Rpb24gaWYgcG9z
c2libGUuIERvbid0IGNsZWFyCisgICAgICAgIGFueXRoaW5nIGlmIHRoZSBjbGVhciByZWN0IGlz
IG91dHNpZGUgdGhlIGRyYXdpbmcgYXJlYS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUmVjdCk6IFByb3ZpZGUgaW1wbGVtZW50YXRpb24gKG5lZWRlZCBieSBTVkcp
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNl
KTogRWxsaXBzZXMgYXJlIGRlZmluZWQgaW4gRDJEIGFzCisgICAgICAgIGEgY2VudGVyLCBhbiBY
LXJhZGl1cywgYW5kIGEgWS1yYWRpdXMuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKTogQWNjZXB0IG9wdGlvbmFsIEdyYXBo
aWNzQ29udGV4dCBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpJbWFn
ZUJ1ZmZlcik6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURl
Y29kZXJEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNldFRh
cmdldENvbnRleHQpOiBSZW5hbWVkIGZyb20gJ3NldFJlbmRlclRhcmdldCcuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kZXI6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KTogVGFrZSBvcHRp
b25hbCBHcmFwaGljc0NvbnRleHQgYXJndW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kZXI6OnNldFJlbmRlclRhcmdldCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OnNldFJlbmRlclRhcmdldCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3BwOiBBZGQgbWlzc2luZyBpbmNsdWRlLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGlyZWN0MkQuY3BwOiAKKyAgICAg
ICAgKFdlYkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybik6IFJldmlzZSBmb3Ig
bmV3IHNpZ25hdHVyZS4KKyAgICAgICAgKiByZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXI6OmFsbG9jYXRlQmFj
a2luZ1N0b3JlSWZOZWVkZWQpOiBQYXNzIEdyYXBoaWNzQ29udGV4dAorICAgICAgICB0byBJbWFn
ZUJ1ZmZlciBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRl
cmVySGVscGVyOjpiZWdpbkZpbHRlckVmZmVjdCk6IFBhc3MgdGFyZ2V0IGNvbnRleHQgdG8KKyAg
ICAgICAgZmlsdGVyIHdoZW4gYWxsb2NhdGluZyBiYWNraW5nIHN0b3JlLgorICAgICAgICAqIHJl
bmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oOiBBZGQgR3JhcGhpY3NDb250ZXh0IGFzIGFy
Z3VtZW50IHRvIGNvbnN0cnVjdG9yLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzRmlsdGVyVGhhdElzUGFpbnRp
bmcpOiBTdXBwbHkgR3JhcGhpY3NDb250ZXh0IGFyZ3VtZW50IHdoZW4KKyAgICAgICAgYnVpbGRp
bmcgbmV3IEZpbHRlckVmZmVjdFJlbmRlcmVyIGFuZCBoZWxwZXIuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6c2V0dXBGaWx0ZXJzKTogRGl0dG8uCisgICAgICAgICogc3ZnL2dyYXBo
aWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSk6IFJldmlzZSB0byB0YWtlIG9wdGlvbmFsIEdyYXBoaWNzQ29udGV4
dAorICAgICAgICBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJ
bWFnZSk6IERpdHRvLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5oOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJbWFnZUZvckNvbnRhaW5lcjo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOiBE
aXR0by4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuaDoKKwog
MjAxNi0xMC0xNCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAg
ICAgIENsZWFuIHVwIEJhY2tGb3J3YXJkQ2xpZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCShyZXZpc2lvbiAyMDcyNzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgwLDM5ICs4MCwzOSBAQCBib29sIEJpdG1hcEltYWdlOjpkYXRhQ2hhbmdl
ZChib29sIGFsbERhCiAgICAgcmV0dXJuIG1fc291cmNlLmRhdGFDaGFuZ2VkKGRhdGEoKSwgYWxs
RGF0YVJlY2VpdmVkKTsKIH0KIAotTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1h
Z2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVs
KQorTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBp
bmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBjb25zdCBHcmFwaGljc0Nv
bnRleHQqIHRhcmdldENvbnRleHQpCiB7CiAgICAgaWYgKGZyYW1lSGFzSW52YWxpZE5hdGl2ZUlt
YWdlQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCkpIHsKICAgICAgICAgTE9HKEltYWdl
cywgIkJpdG1hcEltYWdlICVwIGZyYW1lSW1hZ2VBdEluZGV4IC0gc3Vic2FtcGxpbmdMZXZlbCB3
YXMgJWQsIHJlc2FtcGxpbmciLCB0aGlzLCBzdGF0aWNfY2FzdDxpbnQ+KGZyYW1lU3Vic2FtcGxp
bmdMZXZlbEF0SW5kZXgoaW5kZXgpKSk7CiAgICAgICAgIGludmFsaWRhdGVQbGF0Zm9ybURhdGEo
KTsKICAgICB9CiAKLSAgICByZXR1cm4gbV9zb3VyY2UuZnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgs
IHN1YnNhbXBsaW5nTGV2ZWwpOworICAgIHJldHVybiBtX3NvdXJjZS5mcmFtZUltYWdlQXRJbmRl
eChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgdGFyZ2V0Q29udGV4dCk7CiB9CiAKLU5hdGl2ZUlt
YWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSgpCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJ
bWFnZTo6bmF0aXZlSW1hZ2UoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0KQog
ewotICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKKyAgICByZXR1cm4gZnJhbWVJbWFn
ZUF0SW5kZXgoMCwgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgdGFyZ2V0Q29udGV4dCk7CiB9
CiAKLU5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0KQogewotICAgIHJldHVybiBm
cmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VB
dEluZGV4KG1fY3VycmVudEZyYW1lLCBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0LCB0YXJnZXRD
b250ZXh0KTsKIH0KIAogI2lmIFVTRShDRykKLU5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpu
YXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQorTmF0aXZlSW1hZ2VQdHIgQml0
bWFwSW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCkKIHsKICAgICBzaXplX3QgY291bnQgPSBmcmFt
ZUNvdW50KCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAg
ICAgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpOworICAgICAgICBhdXRvIGlt
YWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSwgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgdGFy
Z2V0Q29udGV4dCk7CiAgICAgICAgIGlmIChpbWFnZSAmJiBuYXRpdmVJbWFnZVNpemUoaW1hZ2Up
ID09IHNpemUpCiAgICAgICAgICAgICByZXR1cm4gaW1hZ2U7CiAgICAgfQogCiAgICAgLy8gRmFs
bGJhY2sgdG8gdGhlIGZpcnN0IGZyYW1lIGltYWdlIGlmIHdlIGNhbid0IGZpbmQgdGhlIHJpZ2h0
IHNpemUKLSAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCk7CisgICAgcmV0dXJuIGZyYW1l
SW1hZ2VBdEluZGV4KDAsIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQsIHRhcmdldENvbnRleHQp
OwogfQogCiBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IEJpdG1hcEltYWdlOjpmcmFtZXNOYXRpdmVJ
bWFnZXMoKQpAQCAtMTQxLDEwICsxNDEsNiBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCYgCiAgICAgaWYgKGRlc3RSZWN0LmlzRW1wdHkoKSB8fCBzcmNSZWN0LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIHNldFJlbmRl
clRhcmdldChjb250ZXh0KTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIHN0YXJ0
QW5pbWF0aW9uKERvTm90Q2F0Y2hVcCk7CiAjZWxzZQpAQCAtMTYxLDcgKzE1Nyw3IEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiAKICAgICBTdWJzYW1wbGluZ0xldmVs
IHN1YnNhbXBsaW5nTGV2ZWwgPSBtX3NvdXJjZS5zdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUoc2Nh
bGUpOwogICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZSAlcCBkcmF3IC0gc3Vic2FtcGxpbmdM
ZXZlbCAlZCBhdCBzY2FsZSAlLjRmIiwgdGhpcywgc3RhdGljX2Nhc3Q8aW50PihzdWJzYW1wbGlu
Z0xldmVsKSwgc2NhbGUpOwogCi0gICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1f
Y3VycmVudEZyYW1lLCBzdWJzYW1wbGluZ0xldmVsKTsKKyAgICBhdXRvIGltYWdlID0gZnJhbWVJ
bWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsIHN1YnNhbXBsaW5nTGV2ZWwsICZjb250ZXh0KTsK
ICAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGlt
YWdlIHlldC4KICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTExNywyMSArMTE3LDE4IEBAIHB1YmxpYzoKICAgICBFdmFzX09iamVjdCogZ2V0RXZhc09i
amVjdChFdmFzKikgb3ZlcnJpZGU7CiAjZW5kaWYKIAotICAgIFdFQkNPUkVfRVhQT1JUIE5hdGl2
ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgb3ZlcnJpZGU7Ci0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCBO
YXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0
cikgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpIG92ZXJyaWRlOwogI2lmIFVTRShD
RykKLSAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJikg
b3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50
U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSBvdmVycmlkZTsKICAgICBW
ZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIG92ZXJyaWRlOwogI2Vu
ZGlmCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIHZvaWQgc2V0UmVuZGVyVGFyZ2V0KEdyYXBoaWNz
Q29udGV4dCYpOwotI2VuZGlmCiAKIHByb3RlY3RlZDoKICAgICBXRUJDT1JFX0VYUE9SVCBCaXRt
YXBJbWFnZShOYXRpdmVJbWFnZVB0ciYmLCBJbWFnZU9ic2VydmVyKiA9IG51bGxwdHIpOwogICAg
IFdFQkNPUkVfRVhQT1JUIEJpdG1hcEltYWdlKEltYWdlT2JzZXJ2ZXIqID0gbnVsbHB0cik7CiAK
LSAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5n
TGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKKyAgICBOYXRpdmVJbWFnZVB0ciBm
cmFtZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xl
dmVsOjpEZWZhdWx0LCBjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cik7CiAKICAgICAv
LyBDYWxsZWQgdG8gaW52YWxpZGF0ZSBjYWNoZWQgZGF0YS4gV2hlbiB8ZGVzdHJveUFsbHwgaXMg
dHJ1ZSwgd2Ugd2lwZSBvdXQKICAgICAvLyB0aGUgZW50aXJlIGZyYW1lIGJ1ZmZlciBjYWNoZSBh
bmQgdGVsbCB0aGUgaW1hZ2Ugc291cmNlIHRvIGRlc3Ryb3kKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDkg
KzEzNyw5IEBAIHB1YmxpYzoKIAogICAgIGVudW0gVGlsZVJ1bGUgeyBTdHJldGNoVGlsZSwgUm91
bmRUaWxlLCBTcGFjZVRpbGUsIFJlcGVhdFRpbGUgfTsKIAotICAgIHZpcnR1YWwgTmF0aXZlSW1h
Z2VQdHIgbmF0aXZlSW1hZ2UoKSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgdmlydHVhbCBOYXRp
dmVJbWFnZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4gbnVs
bHB0cjsgfQotICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBu
YXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgeyByZXR1cm4gbnVs
bHB0cjsgfQorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VPZlNpemUoY29u
c3QgSW50U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSB7IHJldHVybiBu
dWxscHRyOyB9CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgeyByZXR1cm4gbnVsbHB0
cjsgfQogICAgIHZpcnR1YWwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkZvckN1cnJlbnRG
cmFtZSgpIGNvbnN0IHsgcmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsgfQogICAgIHZpcnR1YWwg
VmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBmcmFtZXNOYXRpdmVJbWFnZXMoKSB7IHJldHVybiB7IH07
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4K
ICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDYgKzM4
LDI2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVk
TGVuZ3RoID0gNDA5NjsKIHN0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkQXJlYSA9IE1heENs
YW1wZWRMZW5ndGggKiBNYXhDbGFtcGVkTGVuZ3RoOwogCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlKQoreworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIHN1Y2Nlc3MpKTsKKyAgICBpZiAoIXN1
Y2Nlc3MpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBidWZmZXI7Cit9CisK
KyNpZiBVU0UoRElSRUNUMkQpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVm
ZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgYm9vbCBzdWNjZXNzID0g
ZmFsc2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdl
QnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwg
dGFyZ2V0Q29udGV4dCwgc3VjY2VzcykpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKyNlbmRpZgorCiBib29sIEltYWdl
QnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7CiAgICAg
aWYgKHNpemUuaXNFbXB0eSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAyMDcyNzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwx
NSArMzUsMTIgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJE
YXRhLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgPG1lbW9yeT4KICNp
bmNsdWRlIDxydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
Ci0jaWYgUExBVEZPUk0oV0lOKQotaW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0OwotI2VuZGlm
Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvYXRSZWN0OwpAQCAtNzQsMTQgKzcx
LDEwIEBAIGNsYXNzIEltYWdlQnVmZmVyIHsKICAgICBmcmllbmQgY2xhc3MgSU9TdXJmYWNlOwog
cHVibGljOgogICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24g
ZmFpbHVyZS4KLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IENvbG9yU3BhY2VT
UkdCKQotICAgIHsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIHN1Y2Nlc3MpKTsKLSAgICAg
ICAgaWYgKCFzdWNjZXNzKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJl
dHVybiBidWZmZXI7Ci0gICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2Rl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZVNSR0Ip
OworI2lmIFVTRShESVJFQ1QyRCkKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9k
ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29s
b3JTcGFjZSA9IENvbG9yU3BhY2VTUkdCKTsKKyNlbmRpZgogCiAgICAgLy8gQ3JlYXRlIGFuIGlt
YWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRleHQsIHdpdGggc3VpdGFibGUgcmVz
b2x1dGlvbiBmb3IgZHJhd2luZyBpbnRvIHRoZSBidWZmZXIgYW5kIHRoZW4gaW50byB0aGlzIGNv
bnRleHQuCiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29t
cGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsK
QEAgLTE4Miw3ICsxNzUsNyBAQCBwcml2YXRlOgogI2lmIFVTRShDRykKICAgICBJbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENHQ29sb3JTcGFjZVJl
ZiwgUmVuZGVyaW5nTW9kZSwgYm9vbCYgc3VjY2Vzcyk7CiAjZWxpZiBVU0UoRElSRUNUMkQpCi0g
ICAgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBJRDJEMVJlbmRlclRhcmdldCosIGJvb2wmIHN1Y2Nl
c3MpOworICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Kiwg
Ym9vbCYgc3VjY2Vzcyk7CiAjZW5kaWYKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcAkocmV2aXNpb24gMjA3
Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOSBAQAogCiAjaWYgVVNFKENHKQogI2lu
Y2x1ZGUgIkltYWdlRGVjb2RlckNHLmgiCisjZWxpZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSAi
SW1hZ2VEZWNvZGVyRGlyZWN0MkQuaCIKKyNpbmNsdWRlIDxXaW5Db2RlYy5oPgogI2Vsc2UKICNp
bmNsdWRlICJJbWFnZURlY29kZXIuaCIKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAkocmV2aXNpb24gMjA3Mjc1KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTUsMTUgKzExNSwxOCBAQCBib29sIEltYWdlU291cmNlOjplbnN1cmVE
ZWNvZGVyQXZhaWxhYmxlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLSNpZiBVU0UoRElSRUNUMkQp
Ci12b2lkIEltYWdlU291cmNlOjpzZXRSZW5kZXJUYXJnZXQoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KQordm9pZCBJbWFnZVNvdXJjZTo6c2V0RGVjb2RlclRhcmdldENvbnRleHQoY29uc3QgR3Jh
cGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0KQogeworI2lmIFVTRShESVJFQ1QyRCkKICAgICBp
ZiAoIWlzRGVjb2RlckF2YWlsYWJsZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RlY29k
ZXItPnNldFJlbmRlclRhcmdldChjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKTsKLX0KKyAgICBp
ZiAodGFyZ2V0Q29udGV4dCkKKyAgICAgICAgbV9kZWNvZGVyLT5zZXRUYXJnZXRDb250ZXh0KHRh
cmdldENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KHRhcmdldENvbnRleHQpOwogI2VuZGlmCit9CiAKIHZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEo
U2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKIHsKQEAgLTIwOSw2ICsy
MTIsMTMgQEAgTmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSQogICAgIHJl
dHVybiBpc0RlY29kZXJBdmFpbGFibGUoKSA/IG1fZGVjb2Rlci0+Y3JlYXRlRnJhbWVJbWFnZUF0
SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpIDogbnVsbHB0cjsKIH0KIAorTmF0aXZlSW1h
Z2VQdHIgSW1hZ2VTb3VyY2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2Ft
cGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdl
dENvbnRleHQpCit7CisgICAgc2V0RGVjb2RlclRhcmdldENvbnRleHQodGFyZ2V0Q29udGV4dCk7
CisKKyAgICByZXR1cm4gbV9mcmFtZUNhY2hlLmZyYW1lSW1hZ2VBdEluZGV4KGluZGV4LCBzdWJz
YW1wbGluZ0xldmVsKTsKK30KKwogdm9pZCBJbWFnZVNvdXJjZTo6ZHVtcChUZXh0U3RyZWFtJiB0
cykKIHsKICAgICB0cy5kdW1wUHJvcGVydHkoInR5cGUiLCBmaWxlbmFtZUV4dGVuc2lvbigpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
aAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTAsIDIwMTIsIDIwMTQs
IDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNC0yMDA4LCAyMDEwLCAyMDEyLCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUb3JjaCBNb2JpbGUsIEluYy4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKQEAgLTU5LDEwICs1OSw2IEBAIHB1YmxpYzoKICAgICBib29sIGVu
c3VyZURlY29kZXJBdmFpbGFibGUoU2hhcmVkQnVmZmVyKik7CiAgICAgYm9vbCBpc0RlY29kZXJB
dmFpbGFibGUoKSBjb25zdCB7IHJldHVybiBtX2RlY29kZXIuZ2V0KCk7IH0KIAotI2lmIFVTRShE
SVJFQ1QyRCkKLSAgICB2b2lkIHNldFJlbmRlclRhcmdldChHcmFwaGljc0NvbnRleHQmKTsKLSNl
bmRpZgotCiAgICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRh
UmVjZWl2ZWQpOwogICAgIGJvb2wgZGF0YUNoYW5nZWQoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29s
IGFsbERhdGFSZWNlaXZlZCk7CiAKQEAgLTkzLDcgKzg5LDcgQEAgcHVibGljOgogICAgIHVuc2ln
bmVkIGZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJz
YW1wbGluZ0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCkgeyByZXR1cm4gbV9mcmFt
ZUNhY2hlLmZyYW1lQnl0ZXNBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsgfQogICAg
IGZsb2F0IGZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9mcmFt
ZUNhY2hlLmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsgfQogICAgIEltYWdlT3JpZW50YXRp
b24gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2ZyYW1l
Q2FjaGUuZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOyB9Ci0gICAgTmF0aXZlSW1hZ2VQ
dHIgZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNh
bXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KSB7IHJldHVybiBtX2ZyYW1l
Q2FjaGUuZnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOyB9CisgICAg
TmF0aXZlSW1hZ2VQdHIgZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGlu
Z0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgY29uc3QgR3JhcGhpY3NDb250ZXh0
KiB0YXJnZXRDb250ZXh0ID0gbnVsbHB0cik7CiAKICAgICBTdWJzYW1wbGluZ0xldmVsIG1heGlt
dW1TdWJzYW1wbGluZ0xldmVsKCk7CiAgICAgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xl
dmVsRm9yU2NhbGUoZmxvYXQpOwpAQCAtMTA0LDcgKzEwMCw5IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90KTsKICAgICB2b2lkIGNsZWFyKGJvb2wgZGVz
dHJveUFsbCwgc2l6ZV90IGNvdW50LCBTaGFyZWRCdWZmZXIqIGRhdGEpOwogICAgIHZvaWQgZHVt
cChUZXh0U3RyZWFtJik7Ci0gICAgCisKKyAgICB2b2lkIHNldERlY29kZXJUYXJnZXRDb250ZXh0
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCopOworCiAgICAgSW1hZ2VGcmFtZUNhY2hlIG1fZnJhbWVD
YWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VEZWNvZGVyPiBtX2RlY29kZXI7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgJKHJldmlzaW9u
IDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAko
d29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNiBAQCB0eXBlZGVmIHN0cnVjdCBDR1BhdHRlcm4q
IENHUGF0dGVyblJlZjsKIHR5cGVkZWYgQ0dQYXR0ZXJuUmVmIFBsYXRmb3JtUGF0dGVyblB0cjsK
ICNlbGlmIFVTRShESVJFQ1QyRCkKIGludGVyZmFjZSBJRDJEMUJpdG1hcEJydXNoOwotaW50ZXJm
YWNlIElEMkQxUmVuZGVyVGFyZ2V0OwogdHlwZWRlZiBJRDJEMUJpdG1hcEJydXNoKiBQbGF0Zm9y
bVBhdHRlcm5QdHI7CiAjZWxpZiBVU0UoQ0FJUk8pCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KQEAgLTUx
LDYgKzUwLDcgQEAgdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybVBhdHRlcm5QdHI7CiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4
dDsKIGNsYXNzIEltYWdlOwogCiBjbGFzcyBQYXR0ZXJuIGZpbmFsIDogcHVibGljIFJlZkNvdW50
ZWQ8UGF0dGVybj4gewpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAjaWYgIVVTRShESVJFQ1Qy
RCkKICAgICBQbGF0Zm9ybVBhdHRlcm5QdHIgY3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbnNmb3JtYXRpb24pIGNvbnN0OwogI2Vsc2UKLSAg
ICBQbGF0Zm9ybVBhdHRlcm5QdHIgY3JlYXRlUGxhdGZvcm1QYXR0ZXJuKElEMkQxUmVuZGVyVGFy
Z2V0KiwgZmxvYXQgYWxwaGEsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbnNm
b3JtYXRpb24pIGNvbnN0OworICAgIFBsYXRmb3JtUGF0dGVyblB0ciBjcmVhdGVQbGF0Zm9ybVBh
dHRlcm4oY29uc3QgR3JhcGhpY3NDb250ZXh0JiwgZmxvYXQgYWxwaGEsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdXNlclNwYWNlVHJhbnNmb3JtYXRpb24pIGNvbnN0OwogI2VuZGlmCiAgICAgdm9p
ZCBzZXRQYXR0ZXJuU3BhY2VUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
U3BhY2VUcmFuc2Zvcm1hdGlvbik7CiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBnZXRQYXR0
ZXJuU3BhY2VUcmFuc2Zvcm0oKSB7IHJldHVybiBtX3BhdHRlcm5TcGFjZVRyYW5zZm9ybWF0aW9u
OyB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMDcy
NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzgsNyArMzM4LDggQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmVuZAogICAgIEQyRDFfVEFHIGZpcnN0LCBz
ZWNvbmQ7CiAgICAgSFJFU1VMVCBociA9IG1fcmVuZGVyVGFyZ2V0LT5FbmREcmF3KCZmaXJzdCwg
JnNlY29uZCk7CiAKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICBpZiAo
IVNVQ0NFRURFRChocikpCisgICAgICAgIFdURkxvZ0Fsd2F5cygiRmFpbGVkIGluIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kRHJhdzogaHI9JWxkLCBmaXJzdD0lbGQsIHNlY29u
ZD0lbGQiLCBociwgZmlyc3QsIHNlY29uZCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlOjpyZXN0b3JlKCkKQEAgLTczNiw3ICs3MzcsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBhdXRvIGVsbGlwc2UgPSBEMkQxOjpFbGxpcHNlKEQyRDE6OlBvaW50MkYocmVjdC54KCksIHJl
Y3QueSgpKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBhdXRvIGVsbGlwc2Ug
PSBEMkQxOjpFbGxpcHNlKHJlY3QuY2VudGVyKCksIDAuNSAqIHJlY3Qud2lkdGgoKSwgMC41ICog
cmVjdC5oZWlnaHQoKSk7CiAKICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsK
IApAQCAtNzU4LDcgKzc1OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBh
dHRlcm4KICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTTsgLy8gRklYTUU6IFRoaXMg
aXNuJ3QgcmVhbGx5IG5lZWRlZCBvbiBXaW5kb3dzCiAKICAgICBjb25zdCBmbG9hdCBwYXR0ZXJu
QWxwaGEgPSAxOwotICAgIG1fZGF0YS0+bV9wYXR0ZXJuU3Ryb2tlQnJ1c2ggPSBhZG9wdENPTSht
X3N0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb250ZXh0LCBwYXR0
ZXJuQWxwaGEsIHVzZXJUb0Jhc2VDVE0pKTsKKyAgICBtX2RhdGEtPm1fcGF0dGVyblN0cm9rZUJy
dXNoID0gYWRvcHRDT00obV9zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRl
cm4oKnRoaXMsIHBhdHRlcm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVybigpCkBAIC03NzAsNyArNzcxLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oKQogICAgIEFmZmluZVRyYW5zZm9ybSB1
c2VyVG9CYXNlQ1RNOyAvLyBGSVhNRTogVGhpcyBpc24ndCByZWFsbHkgbmVlZGVkIG9uIFdpbmRv
d3MKIAogICAgIGNvbnN0IGZsb2F0IHBhdHRlcm5BbHBoYSA9IDE7Ci0gICAgbV9kYXRhLT5tX3Bh
dHRlcm5GaWxsQnJ1c2ggPSBhZG9wdENPTShtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0
Zm9ybVBhdHRlcm4oY29udGV4dCwgcGF0dGVybkFscGhhLCB1c2VyVG9CYXNlQ1RNKSk7CisgICAg
bV9kYXRhLT5tX3BhdHRlcm5GaWxsQnJ1c2ggPSBhZG9wdENPTShtX3N0YXRlLmZpbGxQYXR0ZXJu
LT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oKnRoaXMsIHBhdHRlcm5BbHBoYSwgdXNlclRvQmFzZUNU
TSkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0
aCkKQEAgLTEzMjksMjQgKzEzMzAsNTggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVj
dChjb25zdCBGbAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjb250ZXh0ID0g
cGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsK
LQogICAgIGRyYXdXaXRob3V0U2hhZG93KHJlY3QsIFt0aGlzLCByZWN0XShJRDJEMVJlbmRlclRh
cmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIEZsb2F0U2l6ZSByZW5kZXJUYXJnZXRTaXpl
ID0gcmVuZGVyVGFyZ2V0LT5HZXRTaXplKCk7Ci0gICAgICAgIGlmIChyZWN0LnNpemUoKSA9PSBy
ZW5kZXJUYXJnZXRTaXplKQorICAgICAgICBGbG9hdFJlY3QgcmVuZGVyVGFyZ2V0UmVjdChGbG9h
dFBvaW50KCksIHJlbmRlclRhcmdldC0+R2V0U2l6ZSgpKTsKKyAgICAgICAgRmxvYXRSZWN0IHJl
Y3RUb0NsZWFyKHJlY3QpOworCisgICAgICAgIGlmIChyZWN0VG9DbGVhci5jb250YWlucyhyZW5k
ZXJUYXJnZXRSZWN0KSkgeworICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5TZXRUYWdzKDEsIF9f
TElORV9fKTsKICAgICAgICAgICAgIHJlbmRlclRhcmdldC0+Q2xlYXIoKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsUmVjdGFuZ2xlKHJlY3QsIG1fZGF0YS0+
YnJ1c2hXaXRoQ29sb3IoY29sb3JXaXRoR2xvYmFsQWxwaGEoZmlsbENvbG9yKCkpKS5nZXQoKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXJlY3RUb0Ns
ZWFyLmludGVyc2VjdHMocmVuZGVyVGFyZ2V0UmVjdCkpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgcmVuZGVyVGFyZ2V0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKKyAgICAgICAgcmVj
dFRvQ2xlYXIuaW50ZXJzZWN0KHJlbmRlclRhcmdldFJlY3QpOworICAgICAgICByZW5kZXJUYXJn
ZXQtPkZpbGxSZWN0YW5nbGUocmVjdFRvQ2xlYXIsIG1fZGF0YS0+YnJ1c2hXaXRoQ29sb3IoY29s
b3JXaXRoR2xvYmFsQWxwaGEoZmlsbENvbG9yKCkpKS5nZXQoKSk7CiAgICAgfSk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxv
YXQgbGluZVdpZHRoKQogewotICAgICh2b2lkKXJlY3Q7Ci0gICAgKHZvaWQpbGluZVdpZHRoOwot
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5
TGlzdFJlY29yZGVyLT5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCkgeworICAgICAgICBh
dXRvIGRyYXdGdW5jdGlvbiA9IFt0aGlzLCByZWN0LCBsaW5lV2lkdGhdKElEMkQxUmVuZGVyVGFy
Z2V0KiByZW5kZXJUYXJnZXQpIHsKKyAgICAgICAgICAgIHJlbmRlclRhcmdldC0+U2V0VGFncygx
LCBfX0xJTkVfXyk7CisgICAgICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVj
dDsKKyAgICAgICAgICAgIHJlbmRlclRhcmdldC0+RHJhd1JlY3RhbmdsZSgmZDJkUmVjdCwgbV9z
dGF0ZS5zdHJva2VHcmFkaWVudC0+Y3JlYXRlUGxhdGZvcm1HcmFkaWVudElmTmVjZXNzYXJ5KHJl
bmRlclRhcmdldCksIGxpbmVXaWR0aCwgbV9kYXRhLT5zdHJva2VTdHlsZSgpKTsKKyAgICAgICAg
fTsKKworICAgICAgICBpZiAoaGFzU2hhZG93KCkpCisgICAgICAgICAgICBkcmF3V2l0aFNoYWRv
dyhyZWN0LCBkcmF3RnVuY3Rpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkcmF3V2l0
aG91dFNoYWRvdyhyZWN0LCBkcmF3RnVuY3Rpb24pOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKG1fc3RhdGUuc3Ryb2tlUGF0dGVybikKKyAgICAgICAgYXBwbHlTdHJva2VQYXR0
ZXJuKCk7CisKKyAgICBkcmF3V2l0aG91dFNoYWRvdyhyZWN0LCBbdGhpcywgcmVjdCwgbGluZVdp
ZHRoXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CisgICAgICAgIHJlbmRlclRh
cmdldC0+U2V0VGFncygxLCBfX0xJTkVfXyk7CisgICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQy
ZFJlY3QgPSByZWN0OworICAgICAgICBhdXRvIGJydXNoID0gbV9zdGF0ZS5zdHJva2VQYXR0ZXJu
ID8gcGF0dGVyblN0cm9rZUJydXNoKCkgOiBzb2xpZFN0cm9rZUJydXNoKCk7CisgICAgICAgIHJl
bmRlclRhcmdldC0+RHJhd1JlY3RhbmdsZSgmZDJkUmVjdCwgYnJ1c2gsIGxpbmVXaWR0aCwgbV9k
YXRhLT5zdHJva2VTdHlsZSgpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldExpbmVDYXAoTGluZUNhcCBjYXApCkBAIC0xODEzLDcgKzE4NDgsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBzCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBhdXRvIGQyZEVsbGlwc2UgPSBEMkQxOjpFbGxpcHNlKEQyRDE6OlBvaW50MkYoZWxsaXBz
ZS54KCksIGVsbGlwc2UueSgpKSwgZWxsaXBzZS53aWR0aCgpLCBlbGxpcHNlLmhlaWdodCgpKTsK
KyAgICBhdXRvIGQyZEVsbGlwc2UgPSBEMkQxOjpFbGxpcHNlKGVsbGlwc2UuY2VudGVyKCksIDAu
NSAqIGVsbGlwc2Uud2lkdGgoKSwgMC41ICogZWxsaXBzZS5oZWlnaHQoKSk7CiAKICAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+U2V0VGFncygxLCBfX0xJTkVfXyk7CiAKQEAgLTE4MzUsNyArMTg3MCw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGF1dG8gZDJkRWxsaXBzZSA9IEQyRDE6OkVsbGlwc2UoRDJEMTo6
UG9pbnQyRihlbGxpcHNlLngoKSwgZWxsaXBzZS55KCkpLCBlbGxpcHNlLndpZHRoKCksIGVsbGlw
c2UuaGVpZ2h0KCkpOworICAgIGF1dG8gZDJkRWxsaXBzZSA9IEQyRDE6OkVsbGlwc2UoZWxsaXBz
ZS5jZW50ZXIoKSwgMC41ICogZWxsaXBzZS53aWR0aCgpLCAwLjUgKiBlbGxpcHNlLmhlaWdodCgp
KTsKIAogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5TZXRUYWdzKDEsIF9fTElORV9fKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0
MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
SW1hZ2VCdWZmZXIKICAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBjb250ZXh0LnJl
bmRlcmluZ01vZGUoKTsKICAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29t
cGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFs
c2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVm
ZmVyKHNjYWxlZFNpemUsIDEsIENvbG9yU3BhY2VTUkdCLCByZW5kZXJpbmdNb2RlLCBjb250ZXh0
LnBsYXRmb3JtQ29udGV4dCgpLCBzdWNjZXNzKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNjYWxlZFNpemUsIDEsIENvbG9yU3BhY2VT
UkdCLCByZW5kZXJpbmdNb2RlLCAmY29udGV4dCwgc3VjY2VzcykpOwogCiAgICAgaWYgKCFzdWNj
ZXNzKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTc2LDcgKzc2LDcgQEAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcgogICAgIHJldHVybiBidWZmZXI7CiB9CiAK
LUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSAvKmNvbG9yU3BhY2UqLywgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlLCBJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0LCBib29sJiBzdWNj
ZXNzKQorSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIC8qY29sb3JTcGFjZSovLCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwg
Ym9vbCYgc3VjY2VzcykKICAgICA6IG1fbG9naWNhbFNpemUoc2l6ZSkKICAgICAsIG1fcmVzb2x1
dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKIHsKQEAgLTEwMSw2ICsxMDEsNyBAQCBJbWFnZUJ1
ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplCiAgICAgaWYgKG51bUJ5dGVzLmhhc092
ZXJmbG93ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byByZW5kZXJUYXJnZXQgPSB0
YXJnZXRDb250ZXh0ID8gdGFyZ2V0Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiBudWxscHRy
OwogICAgIGlmICghcmVuZGVyVGFyZ2V0KQogICAgICAgICByZW5kZXJUYXJnZXQgPSBHcmFwaGlj
c0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKTsKICAgICBSRUxFQVNFX0FTU0VSVChyZW5k
ZXJUYXJnZXQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlRGVjb2RlckRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMDcy
NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVy
RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsMTQgKzE4NywxNCBAQCB1bnNpZ25l
ZCBJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4CiAgICAgcmV0dXJuIHdpZHRoICogaGVp
Z2h0ICogNDsKIH0KIAotdm9pZCBJbWFnZURlY29kZXI6OnNldFJlbmRlclRhcmdldChJRDJEMVJl
bmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQordm9pZCBJbWFnZURlY29kZXI6OnNldFRhcmdldENv
bnRleHQoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKIHsKICAgICBtX3JlbmRlclRh
cmdldCA9IHJlbmRlclRhcmdldDsKIH0KIAogTmF0aXZlSW1hZ2VQdHIgSW1hZ2VEZWNvZGVyOjpj
cmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vi
c2FtcGxpbmdMZXZlbCwgRGVjb2RpbmdNb2RlKSBjb25zdAogewotICAgIGlmICghbV9uYXRpdmVE
ZWNvZGVyKQorICAgIGlmICghbV9uYXRpdmVEZWNvZGVyIHx8ICFtX3JlbmRlclRhcmdldCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBDT01QdHI8SVdJQ0JpdG1hcEZyYW1lRGVjb2Rl
PiBmcmFtZTsKQEAgLTIxMSwxMCArMjExLDYgQEAgTmF0aXZlSW1hZ2VQdHIgSW1hZ2VEZWNvZGVy
OjpjcmVhdGVGcmFtZQogICAgIGlmICghU1VDQ0VFREVEKGhyKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICBBU1NFUlQobV9yZW5kZXJUYXJnZXQpOwotICAgIGlmICghbV9yZW5kZXJU
YXJnZXQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCiAgICAgQ09NUHRyPElEMkQxQml0bWFw
PiBiaXRtYXA7CiAgICAgaHIgPSBtX3JlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFwRnJvbVdpY0Jp
dG1hcChjb252ZXJ0ZXIuZ2V0KCksIG51bGxwdHIsICZiaXRtYXApOwogICAgIGlmICghU1VDQ0VF
REVEKGhyKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFn
ZURlY29kZXJEaXJlY3QyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5oCShyZXZpc2lvbiAyMDcyNzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0
MkQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBp
c0FsbERhdGFSZWNlaXZlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNBbGxEYXRhUmVjZWl2ZWQ7IH0K
ICAgICB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpIHsgfQogCi0gICAgdm9pZCBz
ZXRSZW5kZXJUYXJnZXQoSUQyRDFSZW5kZXJUYXJnZXQqKTsKKyAgICB2b2lkIHNldFRhcmdldENv
bnRleHQoSUQyRDFSZW5kZXJUYXJnZXQqKTsKIAogICAgIHN0YXRpYyBJV0lDSW1hZ2luZ0ZhY3Rv
cnkqIHN5c3RlbUltYWdpbmdGYWN0b3J5KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAJKHJldmlzaW9u
IDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURp
cmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsMTEgKzkyLDYgQEAgdm9pZCBCaXRtYXBJ
bWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyYwogICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxv
YXRSZWN0KDAuMGYsIDAuMGYsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkp
LCBjb21wb3NpdGVPcCwgQmxlbmRNb2RlTm9ybWFsLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRp
b24oKSk7CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6OnNldFJlbmRlclRhcmdldChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpCi17Ci0gICAgbV9zb3VyY2Uuc2V0UmVuZGVyVGFyZ2V0KGNvbnRleHQp
OwotfQotCiB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGN0eHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBDb21wb3NpdGVPcGVyYXRvciBvcCwg
QmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9OYXRpdmVJbWFnZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHAJKHJl
dmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9O
YXRpdmVJbWFnZURpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPGQyZDEuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0
dGVybkRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vUGF0dGVybkRpcmVjdDJELmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdHRlcm5EaXJlY3QyRC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDEyICszNyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
SUQyRDFCaXRtYXBCcnVzaCogUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKElEMkQxUmVu
ZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQsIGZsb2F0IGFscGhhLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9uKSBjb25zdAorSUQyRDFCaXRtYXBCcnVzaCogUGF0
dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgZmxvYXQgYWxwaGEsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbnNmb3Jt
YXRpb24pIGNvbnN0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVuZGVyVGFyZ2V0KTsKLQotICAg
IEZsb2F0UmVjdCB0aWxlUmVjdCA9IHRpbGVJbWFnZSgpLT5yZWN0KCk7Ci0KICAgICBBZmZpbmVU
cmFuc2Zvcm0gcGF0dGVyblRyYW5zZm9ybSA9IHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9uICogbV9w
YXR0ZXJuU3BhY2VUcmFuc2Zvcm1hdGlvbjsKICAgICBhdXRvIGJpdG1hcEJydXNoUHJvcGVydGll
cyA9IEQyRDE6OkJpdG1hcEJydXNoUHJvcGVydGllcygpOwogICAgIGJpdG1hcEJydXNoUHJvcGVy
dGllcy5leHRlbmRNb2RlWCA9IG1fcmVwZWF0WCA/IEQyRDFfRVhURU5EX01PREVfV1JBUCA6IEQy
RDFfRVhURU5EX01PREVfQ0xBTVA7CkBAIC01Miw5ICs0OCwxNCBAQCBJRDJEMUJpdG1hcEJydXNo
KiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9yCiAgICAgYnJ1c2hQcm9wZXJ0aWVzLnRyYW5zZm9ybSA9
IHBhdHRlcm5UcmFuc2Zvcm07CiAgICAgYnJ1c2hQcm9wZXJ0aWVzLm9wYWNpdHkgPSBhbHBoYTsK
IAorICAgIGF1dG8gcGF0dGVybkltYWdlID0gdGlsZUltYWdlKCk7CisKKyAgICBhdXRvIHBsYXRm
b3JtQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAgUkVMRUFTRV9BU1NF
UlQocGxhdGZvcm1Db250ZXh0KTsKKwogICAgIElEMkQxQml0bWFwQnJ1c2gqIHBhdHRlcm5CcnVz
aCA9IG51bGxwdHI7Ci0gICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFw
QnJ1c2godGlsZUltYWdlKCktPm5hdGl2ZUltYWdlKCkuZ2V0KCksICZiaXRtYXBCcnVzaFByb3Bl
cnRpZXMsICZicnVzaFByb3BlcnRpZXMsICZwYXR0ZXJuQnJ1c2gpOwotICAgIEFTU0VSVChocik7
CisgICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29udGV4dC0+Q3JlYXRlQml0bWFwQnJ1c2gocGF0
dGVybkltYWdlLT5uYXRpdmVJbWFnZSgmY29udGV4dCkuZ2V0KCksICZiaXRtYXBCcnVzaFByb3Bl
cnRpZXMsICZicnVzaFByb3BlcnRpZXMsICZwYXR0ZXJuQnJ1c2gpOworICAgIEFTU0VSVChTVUND
RUVERUQoaHIpKTsKICAgICByZXR1cm4gcGF0dGVybkJydXNoOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAJKHJldmlz
aW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5k
ZXJlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDEwIEBACiAjaW5jbHVkZSA8YWxn
b3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKKyNpZiBVU0UoRElSRUNUMkQp
CisjaW5jbHVkZSA8ZDJkMS5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3Rh
dGljIGlubGluZSB2b2lkIGVuZE1hdHJpeFJvdyhWZWN0b3I8ZmxvYXQ+JiBwYXJhbWV0ZXJzKQpA
QCAtMzEzLDE1ICszMTcsMjEgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6dXBkYXRlQmFj
a2luZwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyOjph
bGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKCkKK3ZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXI6
OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiB0YXJn
ZXRDb250ZXh0KQogewogICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIGVmZmVjdCBjaGFpbiBoYXMg
YmVlbiBidWlsdCwgYW5kIHRoZQogICAgIC8vIHNvdXJjZSBpbWFnZSBzaXplcyBzZXQuIFdlIGp1
c3QgbmVlZCB0byBhdHRhY2ggdGhlIGdyYXBoaWMKICAgICAvLyBidWZmZXIgaWYgd2UgaGF2ZSBu
b3QgeWV0IGRvbmUgc28uCiAgICAgaWYgKCFtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQpIHsKICAg
ICAgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZShtX3NvdXJjZURyYXdpbmdSZWdpb24ud2lkdGgoKSwg
bV9zb3VyY2VEcmF3aW5nUmVnaW9uLmhlaWdodCgpKTsKLSAgICAgICAgaWYgKCFzb3VyY2VJbWFn
ZSgpIHx8IHNvdXJjZUltYWdlKCktPmxvZ2ljYWxTaXplKCkgIT0gbG9naWNhbFNpemUpCisgICAg
ICAgIGlmICghc291cmNlSW1hZ2UoKSB8fCBzb3VyY2VJbWFnZSgpLT5sb2dpY2FsU2l6ZSgpICE9
IGxvZ2ljYWxTaXplKSB7CisjaWYgVVNFKERJUkVDVDJEKQorICAgICAgICAgICAgc2V0U291cmNl
SW1hZ2UoSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSgpLCAm
dGFyZ2V0Q29udGV4dCwgZmlsdGVyU2NhbGUoKSkpOworI2Vsc2UKKyAgICAgICAgICAgIFVOVVNF
RF9QQVJBTSh0YXJnZXRDb250ZXh0KTsKICAgICAgICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdl
QnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUoKSwgZmlsdGVyU2NhbGUo
KSkpOworI2VuZGlmCisgICAgICAgIH0KICAgICAgICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVk
ID0gdHJ1ZTsKICAgICB9CiB9CkBAIC0zOTYsNyArNDA2LDcgQEAgYm9vbCBGaWx0ZXJFZmZlY3RS
ZW5kZXJlckhlbHBlcjo6YmVnaW5GaQogICAgIEFTU0VSVChtX3JlbmRlckxheWVyKTsKICAgICAK
ICAgICBGaWx0ZXJFZmZlY3RSZW5kZXJlciogZmlsdGVyID0gbV9yZW5kZXJMYXllci0+ZmlsdGVy
UmVuZGVyZXIoKTsKLSAgICBmaWx0ZXItPmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoKTsK
KyAgICBmaWx0ZXItPmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQobV90YXJnZXRDb250ZXh0
KTsKICAgICAvLyBQYWludCBpbnRvIHRoZSBjb250ZXh0IHRoYXQgcmVwcmVzZW50cyB0aGUgU291
cmNlR3JhcGhpYyBvZiB0aGUgZmlsdGVyLgogICAgIEdyYXBoaWNzQ29udGV4dCogc291cmNlR3Jh
cGhpY3NDb250ZXh0ID0gZmlsdGVyLT5pbnB1dENvbnRleHQoKTsKICAgICBpZiAoIXNvdXJjZUdy
YXBoaWNzQ29udGV4dCB8fCBmaWx0ZXItPmZpbHRlclJlZ2lvbigpLmlzRW1wdHkoKSB8fCBJbWFn
ZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZmlsdGVyLT5maWx0ZXJSZWdpb24oKS5zaXplKCkp
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVu
ZGVyZXIuaAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zp
bHRlckVmZmVjdFJlbmRlcmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50OwpAQCAtNTcsOCArNTgsOSBAQCBl
bnVtIEZpbHRlckNvbnN1bWVyIHsKIGNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyIHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBGaWx0ZXJFZmZlY3RS
ZW5kZXJlckhlbHBlcihib29sIGhhdmVGaWx0ZXJFZmZlY3QpCi0gICAgICAgIDogbV9oYXZlRmls
dGVyRWZmZWN0KGhhdmVGaWx0ZXJFZmZlY3QpCisgICAgRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxw
ZXIoYm9vbCBoYXZlRmlsdGVyRWZmZWN0LCBHcmFwaGljc0NvbnRleHQmIHRhcmdldENvbnRleHQp
CisgICAgICAgIDogbV90YXJnZXRDb250ZXh0KHRhcmdldENvbnRleHQpCisgICAgICAgICwgbV9o
YXZlRmlsdGVyRWZmZWN0KGhhdmVGaWx0ZXJFZmZlY3QpCiAgICAgewogICAgIH0KICAgICAKQEAg
LTc3LDYgKzc5LDcgQEAgcHJpdmF0ZToKICAgICBSZW5kZXJMYXllciogbV9yZW5kZXJMYXllciB7
IG51bGxwdHIgfTsgLy8gRklYTUU6IHRoaXMgaXMgbWFpbmx5IHVzZWQgdG8gZ2V0IHRoZSBGaWx0
ZXJFZmZlY3RSZW5kZXJlci4gRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXIgc2hvdWxkIGJlIHdl
YW5lZCBvZmYgaXQuCiAgICAgTGF5b3V0UG9pbnQgbV9wYWludE9mZnNldDsKICAgICBMYXlvdXRS
ZWN0IG1fcmVwYWludFJlY3Q7CisgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBtX3RhcmdldENv
bnRleHQ7CiAgICAgYm9vbCBtX2hhdmVGaWx0ZXJFZmZlY3QgeyBmYWxzZSB9OwogICAgIGJvb2wg
bV9zdGFydGVkRmlsdGVyRWZmZWN0IHsgZmFsc2UgfTsKIH07CkBAIC0xMDcsNyArMTEwLDcgQEAg
cHVibGljOgogICAgIGJvb2wgYnVpbGQoUmVuZGVyRWxlbWVudCosIGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmLCBGaWx0ZXJDb25zdW1lcik7CiAgICAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1
aWxkUmVmZXJlbmNlRmlsdGVyKFJlbmRlckVsZW1lbnQqLCBQYXNzUmVmUHRyPEZpbHRlckVmZmVj
dD4gcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiopOwogICAgIGJvb2wg
dXBkYXRlQmFja2luZ1N0b3JlUmVjdChjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlY3QpOwotICAg
IHZvaWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCgpOworICAgIHZvaWQgYWxsb2NhdGVC
YWNraW5nU3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAgICB2b2lkIGNs
ZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwogICAgIHZvaWQgYXBwbHkoKTsKICAgICAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMjA3Mjc1
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDE2OCw3ICs0MTY4LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGFzRmlsdGVyVGhh
dElzUGFpbnRpbgogICAgIGlmICghaGFzUGFpbnRlZEZpbHRlcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgYXV0byBmaWx0ZXJQYWludGVyID0gc3RkOjptYWtlX3VuaXF1ZTxGaWx0ZXJF
ZmZlY3RSZW5kZXJlckhlbHBlcj4oaGFzUGFpbnRlZEZpbHRlcik7CisgICAgYXV0byBmaWx0ZXJQ
YWludGVyID0gc3RkOjptYWtlX3VuaXF1ZTxGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcj4oaGFz
UGFpbnRlZEZpbHRlciwgY29udGV4dCk7CiAgICAgaWYgKCFmaWx0ZXJQYWludGVyLT5oYXZlRmls
dGVyRWZmZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDE4Miw3ICs0MTgyLDcg
QEAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVySGVscAogCiAgICAgRmlsdGVy
SW5mbyogZmlsdGVySW5mbyA9IEZpbHRlckluZm86OmdldElmRXhpc3RzKCp0aGlzKTsKICAgICBi
b29sIGhhc1BhaW50ZWRGaWx0ZXIgPSBmaWx0ZXJJbmZvICYmIGZpbHRlckluZm8tPnJlbmRlcmVy
KCkgJiYgcGFpbnRzV2l0aEZpbHRlcnMoKTsKLSAgICBhdXRvIGZpbHRlclBhaW50ZXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyPihoYXNQYWludGVkRmlsdGVy
KTsKKyAgICBhdXRvIGZpbHRlclBhaW50ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEZpbHRlckVmZmVj
dFJlbmRlcmVySGVscGVyPihoYXNQYWludGVkRmlsdGVyLCBjb250ZXh0KTsKIAogICAgIExheW91
dFJlY3QgZmlsdGVyUmVwYWludFJlY3QgPSBmaWx0ZXJJbmZvLT5kaXJ0eVNvdXJjZVJlY3QoKTsK
ICAgICBmaWx0ZXJSZXBhaW50UmVjdC5tb3ZlKG9mZnNldEZyb21Sb290KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkocmV2aXNpb24gMjA3Mjc1KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTQsNiArNTQsMTEgQEAKICNpbmNsdWRlIDxydW50aW1lL0pTQ0lubGluZXMuaD4KICNpbmNs
dWRlIDxydW50aW1lL0pTTG9jay5oPgogCisjaWYgVVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIkNP
TVB0ci5oIgorI2luY2x1ZGUgPGQyZDEuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIFNWR0ltYWdlOjpTVkdJbWFnZShJbWFnZU9ic2VydmVyJiBvYnNlcnZlciwgY29uc3QgVVJM
JiB1cmwpCkBAIC0xODcsNyArMTkyLDcgQEAgdm9pZCBTVkdJbWFnZTo6ZHJhd0ZvckNvbnRhaW5l
cihHcmFwaGljcwogI2lmIFVTRShDQUlSTykKIC8vIFBhc3NlcyBvd25lcnNoaXAgb2YgdGhlIG5h
dGl2ZSBpbWFnZSB0byB0aGUgY2FsbGVyIHNvIE5hdGl2ZUltYWdlUHRyIG5lZWRzCiAvLyB0byBi
ZSBhIHNtYXJ0IHBvaW50ZXIgdHlwZS4KLU5hdGl2ZUltYWdlUHRyIFNWR0ltYWdlOjpuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpCitOYXRpdmVJbWFnZVB0ciBTVkdJbWFnZTo6bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KikKIHsKICAgICBpZiAoIW1f
cGFnZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMDQsNiArMjA5LDM4IEBAIE5hdGl2
ZUltYWdlUHRyIFNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckMKIH0KICNlbmRpZgogCisjaWYgVVNF
KERJUkVDVDJEKQorTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCkKK3sKKyAgICBBU1NFUlQodGFyZ2V0Q29udGV4
dCk7CisgICAgaWYgKCFtX3BhZ2UgfHwgIXRhcmdldENvbnRleHQpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgYXV0byBwbGF0Zm9ybUNvbnRleHQgPSB0YXJnZXRDb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKTsKKyAgICBBU1NFUlQocGxhdGZvcm1Db250ZXh0KTsKKworICAgIC8vIERy
YXcgdGhlIFNWRyBpbnRvIGEgYml0bWFwLgorICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRh
cmdldD4gbmF0aXZlSW1hZ2VUYXJnZXQ7CisgICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29udGV4
dC0+Q3JlYXRlQ29tcGF0aWJsZVJlbmRlclRhcmdldChJbnRTaXplKHJlY3QoKS5zaXplKCkpLCAm
bmF0aXZlSW1hZ2VUYXJnZXQpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIG5h
dGl2ZUltYWdlVGFyZ2V0LT5CZWdpbkRyYXcoKTsKKyAgICBHcmFwaGljc0NvbnRleHQgbG9jYWxD
b250ZXh0KG5hdGl2ZUltYWdlVGFyZ2V0LmdldCgpKTsKKyAgICBsb2NhbENvbnRleHQuc2V0RGlk
QmVnaW5EcmF3KHRydWUpOworCisgICAgZHJhdyhsb2NhbENvbnRleHQsIHJlY3QoKSwgcmVjdCgp
LCBDb21wb3NpdGVTb3VyY2VPdmVyLCBCbGVuZE1vZGVOb3JtYWwsIEltYWdlT3JpZW50YXRpb25E
ZXNjcmlwdGlvbigpKTsKKworICAgIGhyID0gbmF0aXZlSW1hZ2VUYXJnZXQtPkZsdXNoKCk7Cisg
ICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBuYXRp
dmVJbWFnZTsKKyAgICBociA9IG5hdGl2ZUltYWdlVGFyZ2V0LT5HZXRCaXRtYXAoJm5hdGl2ZUlt
YWdlKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICByZXR1cm4gbmF0aXZlSW1h
Z2U7Cit9CisjZW5kaWYKKwogdm9pZCBTVkdJbWFnZTo6ZHJhd1BhdHRlcm5Gb3JDb250YWluZXIo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFNpemUmIGNvbnRhaW5lclNpemUs
IGZsb2F0IHpvb20sIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKICAgICBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBjb25z
dCBGbG9hdFJlY3QmIGRzdFJlY3QsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkocmV2aXNpb24gMjA3Mjc1KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2
LDcgKzY2LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0QW5pbWF0aW9uKCkgZmluYWw7CiAK
ICNpZiBVU0UoQ0FJUk8pCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKSBmaW5hbDsKKyAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgZmluYWw7CisjZW5kaWYKKyNp
ZiBVU0UoRElSRUNUMkQpCisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoY29uc3QgR3Jh
cGhpY3NDb250ZXh0KiA9IG51bGxwdHIpIGZpbmFsOwogI2VuZGlmCiAKIHByaXZhdGU6CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRh
aW5lci5jcHAJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2LDkg
QEAgdm9pZCBTVkdJbWFnZUZvckNvbnRhaW5lcjo6ZHJhd1BhdHRlcm4oRwogICAgIG1faW1hZ2Ut
PmRyYXdQYXR0ZXJuRm9yQ29udGFpbmVyKGNvbnRleHQsIG1fY29udGFpbmVyU2l6ZSwgbV96b29t
LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgY29tcG9zaXRlT3As
IGRzdFJlY3QsIGJsZW5kTW9kZSk7CiB9CiAKLU5hdGl2ZUltYWdlUHRyIFNWR0ltYWdlRm9yQ29u
dGFpbmVyOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCitOYXRpdmVJbWFnZVB0ciBTVkdJ
bWFnZUZvckNvbnRhaW5lcjo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhp
Y3NDb250ZXh0KiB0YXJnZXRDb250ZXh0KQogewotICAgIHJldHVybiBtX2ltYWdlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIHJldHVybiBtX2ltYWdlLT5uYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSh0YXJnZXRDb250ZXh0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9yQ29udGFpbmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9y
Q29udGFpbmVyLmgJKHJldmlzaW9uIDIwNzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3
IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgdG8gYmUgbGVzcyBjb25z
ZXJ2YXRpdmUuCiAgICAgYm9vbCBjdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKSBmaW5hbDsKKyAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgZmluYWw7CiAK
IHByaXZhdGU6CiAgICAgU1ZHSW1hZ2VGb3JDb250YWluZXIoU1ZHSW1hZ2UqIGltYWdlLCBjb25z
dCBGbG9hdFNpemUmIGNvbnRhaW5lclNpemUsIGZsb2F0IHpvb20pCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>