<?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>47070</bug_id>
          
          <creation_ts>2010-10-03 23:14:29 -0700</creation_ts>
          <short_desc>[Texmap] [Qt] Texture mapper initial implementation</short_desc>
          <delta_ts>2011-07-14 14:08:40 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Performance, Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>47068</blocked>
    
    <blocked>48241</blocked>
    
    <blocked>48247</blocked>
    
    <blocked>56935</blocked>
    
    <blocked>58731</blocked>
    
    <blocked>58739</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Noam Rosenthal">noam</assigned_to>
          <cc>abarth</cc>
    
    <cc>amruthraj</cc>
    
    <cc>ariya.hidayat</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>smagnuso</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>288817</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-03 23:14:29 -0700</bug_when>
    <thetext>Provide an initial implementation of texture-mapper, that works with Qt and OpenGL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288818</commentid>
    <comment_count>1</comment_count>
      <attachid>69601</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-03 23:18:05 -0700</bug_when>
    <thetext>Created attachment 69601
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288821</commentid>
    <comment_count>2</comment_count>
      <attachid>69602</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-04 00:22:34 -0700</bug_when>
    <thetext>Created attachment 69602
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288822</commentid>
    <comment_count>3</comment_count>
      <attachid>69603</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-04 00:25:58 -0700</bug_when>
    <thetext>Created attachment 69603
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288888</commentid>
    <comment_count>4</comment_count>
      <attachid>69603</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-04 05:42:50 -0700</bug_when>
    <thetext>Comment on attachment 69603
Patch

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

&gt; WebCore/ChangeLog:9
&gt; +        [Texmap] [Qt] Texture mapper initial implementation
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=47070
&gt; +
&gt; +        No new tests: initial patch.
&gt; +

We need an explanation here what the texture mapper is for.

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:43
&gt; +    void glVertexAttribPointer(GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *);

GLvoid*

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:45
&gt; +    void glShaderSource(GLuint, GLsizei, const char **, const GLint *);

the * should be left aligned

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:77
&gt; +namespace WTF {

Why are you defining WTF things outside JavaScriptCore/wtf? That doesnt seem right.

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:107
&gt; +        qFatal(&quot;[TextureMapper GL] Command failed: Line %d\n\toperation: %s, \n\terror: %x\n&quot;, line, command, err);

This is not a Qt file, so no qFatal.

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:143
&gt; +    friend class TextureMapperGL;

We normally declare friend classes at the bottom, though I do not know if there is a style guide item for that

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:152
&gt; +    virtual void setContentsToImage(Image*);
&gt; +private:

Please add newline before private here

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:234
&gt; +#define TEXMAP_GET_SHADER_VAR_LOCATION(type, prog, var) if (gShaderInfo.get##type##Location(TexmapShaderInfo::prog##Program, TexmapShaderInfo::var##Variable, #var) &lt; 0) qWarning(&quot;Couldn&apos;t find variable &quot;#var&quot; in program &quot;#prog);
&gt; +#define TEXMAP_BUILD_SHADER(program) gShaderInfo.createShaderProgram(vertexShaderSource##program, fragmentShaderSource##program, TexmapShaderInfo::program##Program);

no qWarning here please

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:236
&gt; +TextureMapperGL::TextureMapperGL(GraphicsContext* gc)

use context and not gc... gc normally refers to garbage collector and we normally use context

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:262
&gt; +&quot;                   gl_FragColor = vec4(color.rgb * o, color.a * o);                \n&quot;
&gt; +&quot;               }                                                               \n&quot;;

There seems to be a less spaces before the \n in the last line. It should be this viewer though

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:274
&gt; +    const char* vertexShaderSourceOpacityAndMask =
&gt; +            OES2_PERCISION_DEFINITIONS
&gt; +&quot;               uniform mat4 InMatrix;                                      \n&quot;
&gt; +&quot;               attribute vec4 InTexCoordSource, InTexCoordMask, InVertex;      \n&quot;
&gt; +&quot;               varying highp vec2 OutTexCoordSource, OutTexCoordMask;      \n&quot;
&gt; +&quot;               void main(void)                                             \n&quot;
&gt; +&quot;               {                                                           \n&quot;
&gt; +&quot;                   OutTexCoordSource = vec2(InTexCoordSource);               \n&quot;
&gt; +&quot;                   OutTexCoordMask = vec2(InTexCoordMask);                   \n&quot;
&gt; +&quot;                   gl_Position = InMatrix * InVertex;                      \n&quot;
&gt; +&quot;               }                                                           \n&quot;;

Here as well.

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:361
&gt; +void TextureMapperGL::drawTexture(const BitmapTexture&amp; texture, const IntRect&amp; targetRect, const TransformationMatrix&amp; mvMatrix, float opacity, const BitmapTexture* maskTexture)

mvMatrix? mv == ?

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:430
&gt; +void BitmapTextureGL::reset(const IntSize&amp; newSize, bool opaque)

How is it a reset if it takes new values?

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:460
&gt; +PlatformGraphicsContext* BitmapTextureGL::beginPaint(const IntRect&amp; dirtyRect)
&gt; +
&gt; +{

newline too much here

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:480
&gt; +    struct Entry {
&gt; +        GLuint texture;
&gt; +        int refCount;
&gt; +    };

Anyway to avoid manual refcounting?

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:618
&gt; +    // create the model-view-projection matrix to display on screen

Comments start with capital letter, ends with a dot.

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.h:63
&gt; +// next power of two

Comment style... starts with a ...

&gt; WebCore/platform/graphics/qt/TextureMapperQt.cpp:47
&gt; +    virtual bool save(const String &amp;);

It is not obvious what the string represents here. also the &amp; should be left algined

&gt; WebCore/platform/graphics/qt/TextureMapperQt.cpp:192
&gt; +    return adoptRef(new TextureMapperQt(gc));

context please

&gt; WebCore/platform/graphics/qt/TextureMapperQt.cpp:196
&gt; +PassRefPtr&lt;BitmapTexture&gt; TextureMapperQt::createTexture() { return adoptRef(new BitmapTextureQt()); }

no no, we dont define methods like that... please put the return... on the next line

&gt; WebCore/platform/graphics/qt/TextureMapperQt.cpp:219
&gt; +PassRefPtr&lt;RGBA32PremultimpliedBuffer&gt; RGBA32PremultimpliedBuffer::create() { return adoptRef(new RGBA32PremultimpliedBufferQt()); }

Here as well. We normally only do this in headers

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:39
&gt; +#if PLATFORM(QT)
&gt; +#include &quot;QtCore/qdebug.h&quot;
&gt; +#endif

we really shouldnt use Qt debugginbg here

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:56
&gt; +    void mark(BitmapTexture *texture);

* alignment

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:92
&gt; +    // needs active context: texture.destroy

comments style

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:128
&gt; +    printf(&quot;Yaya!! %d [%d] [%d]&quot;, index, m_data.size(), m_totalCost);

Yaya? Probably remove this debug output

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:227
&gt; +    void notifyTransformAnimationRunning(bool r);

r? write it out.

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:409
&gt; +static int compareGraphicsLayersZValue(const void* pa, const void* pb)

pa, pb? maybe a and b would be better

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:492
&gt; +    for (int i = 0; i &lt; size; ++i)
&gt; +        if (TextureMapperNode* child = m_children[i])
&gt; +            descendantsWithContent += child-&gt;countDescendantsWithContent();
&gt; +

The  for loop here needs braces

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:515
&gt; +    /* calculate layer type. A layer can be one of the following:
&gt; +        RootLayer: the top level. Draws to a framebuffer, and the target texture draws into the viewport.
&gt; +                   only one layer is the root layer.
&gt; +        ScissorLayer: draws to the current framebuffer, and applies an extra scissor before drawing its children.
&gt; +                      A scissor layer is a layer with children that masks to bounds, is not a transparency layer, and has a rectangular clip.
&gt; +        ClipLayer: creates a new framebuffer, the size of the layer, and then paints it to the enclosing BitmapTexture with the layer&apos;s transform/opacity.
&gt; +                    A clip layer is a layer that masks to bounds, doesn&apos;t preserve 3D, has children, and has a transparency/mask or a non-rectangular transform.
&gt; +        TransparencyLayer: creates a new framebuffer idetical in size to the current framebuffer. Then draws the fb&apos;s texture to the current framebuffer with identity transform.
&gt; +                           Used for layers with children and transparency/mask that preserve 3D or don&apos;t mask to bounds.
&gt; +        DefaultLayer: draws itself and its children directly to the current framebuffer.
&gt; +                      any layer that doesn&apos;t conform to the other rules is a DefaultLayer.
&gt; +    */
&gt; +

we normally use // comments

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:554
&gt; +    // needs active context

comments style

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:612
&gt; +    for (int i = 0; i &lt; size; ++i)
&gt; +        if (TextureMapperNode* layer = m_children[i])
&gt; +            layer-&gt;invalidateTransform();

needs braces!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288895</commentid>
    <comment_count>5</comment_count>
      <attachid>69623</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-04 06:06:54 -0700</bug_when>
    <thetext>Created attachment 69623
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288898</commentid>
    <comment_count>6</comment_count>
      <attachid>69623</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-04 06:14:24 -0700</bug_when>
    <thetext>Comment on attachment 69623
Patch

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

&gt; WebCore/ChangeLog:7
&gt; +        The idea is that in time this would replace GraphicsLayerQt, and could serve as an implementation for other platforms that don&apos;t have a scenegraph library.

with time

&gt; WebCore/ChangeLog:9
&gt; +        an adequate level of stability, we can enable it by default and perhaps have it replace GraphicsLayerQt.

I don&apos;t like the &apos;perhaps&apos; here... It sounds like we are adding code that we are not sure whether we will use or not, or just abandon.

Maybe write: &quot;we will enable it by default and replace GraphicsLayerQt on platforms where that makes most sense.

Try to keep these within 80-100 chars per line

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:59
&gt; +    void glDeleteFramebuffers(GLsizei n, const GLuint *framebuffers);
&gt; +    void glGenFramebuffers(GLsizei n, GLuint *framebuffers);

* alignment

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:61
&gt; +    void glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint *params);

* alignment

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:77
&gt; +namespace WTF {

Maybe add a comment why you need this for now.

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:107
&gt; +        printf(&quot;[TextureMapper GL] Command failed: Line %d\n\toperation: %s, \n\terror: %x\n&quot;, line, command, err);

I think webkit has some ways to do debugging.

&gt; WebCore/platform/graphics/qt/TextureMapperQt.cpp:43
&gt; +    virtual bool save(const String&amp;);

Please add a variable like &quot;save(const String&amp; path)&quot;

&gt; WebCore/platform/graphics/qt/TextureMapperQt.cpp:49
&gt; +    GraphicsContext* m_gc;

context

&gt; WebCore/platform/graphics/qt/TextureMapperQt.cpp:127
&gt; +TextureMapperQt::TextureMapperQt(GraphicsContext* gc)

context please, not gc

&gt; WebCore/platform/graphics/qt/TextureMapperQt.cpp:135
&gt; +void TextureMapperQt::bindSurface(BitmapTexture* aSurface)

why aSurface and not just surface?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289348</commentid>
    <comment_count>7</comment_count>
      <attachid>69729</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-04 19:01:37 -0700</bug_when>
    <thetext>Created attachment 69729
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289583</commentid>
    <comment_count>8</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-05 07:10:36 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=69729) [details]
&gt; Patch

Not up for review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289586</commentid>
    <comment_count>9</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-05 07:15:17 -0700</bug_when>
    <thetext>Found some stability issues I wanted to figure out before resubmitting for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289746</commentid>
    <comment_count>10</comment_count>
      <attachid>69811</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-05 11:03:07 -0700</bug_when>
    <thetext>Created attachment 69811
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289750</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-05 11:07:18 -0700</bug_when>
    <thetext>Attachment 69811 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/graphics/opengl/TextureMapperGL.cpp:307:  Extra space before [  [whitespace/braces] [5]
WebCore/platform/graphics/opengl/TextureMapperGL.cpp:574:  Extra space before [  [whitespace/braces] [5]
WebCore/platform/graphics/qt/GraphicsLayerQt.cpp:44:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289755</commentid>
    <comment_count>12</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-05 11:11:55 -0700</bug_when>
    <thetext>Attachment 69811 did not build on qt:
Build output: http://queues.webkit.org/results/4141094</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289759</commentid>
    <comment_count>13</comment_count>
      <attachid>69811</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-05 11:15:23 -0700</bug_when>
    <thetext>Comment on attachment 69811
Patch

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

&gt; WebCore/WebCore.pro:214
&gt; +QT += opengl

So even if we are not using this we force opengl?

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:81
&gt; +    if (err)
&gt; +        WTFReportError(__FILE__, line, WTF_PRETTY_FUNCTION, &quot;[TextureMapper GL] Command failed: %s (%x)\n&quot;, command, err);

we normally do

if (!err)
   return;

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:172
&gt; +//        LOG(infoLog);

We dont want to commit this

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:184
&gt; +TextureMapperGL::TextureMapperGL(GraphicsContext* context)

can&apos;t some of these different classes be in different files?

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:479
&gt; +}
&gt; +bool BitmapTextureGL::isValid() const

missing newline here

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:501
&gt; +
&gt; +

excessive newline here

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:538
&gt; +    const BitmapTextureGL&amp; surface = static_cast&lt;const BitmapTextureGL&amp;&gt;(aSurface);
&gt; +    // Create the model-view-projection matrix to display on screen.

I would add a new line before the comment

&gt; WebCore/platform/graphics/qt/GraphicsLayerQt.cpp:698
&gt; +//        if (m_pendingContent.contentType == HTMLContentType)
&gt; +//            recache(m_pendingContent.regionToUpdate);

dont add outcommented code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289767</commentid>
    <comment_count>14</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-05 11:21:11 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 69811 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=69811&amp;action=review
&gt; 
&gt; &gt; WebCore/WebCore.pro:214
&gt; &gt; +QT += opengl
&gt; 
&gt; So even if we are not using this we force opengl?
&gt;

This went into the patch by mistake... will fix the rest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289790</commentid>
    <comment_count>15</comment_count>
      <attachid>69821</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-05 11:49:53 -0700</bug_when>
    <thetext>Created attachment 69821
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291184</commentid>
    <comment_count>16</comment_count>
      <attachid>70130</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-07 12:33:32 -0700</bug_when>
    <thetext>Created attachment 70130
Patch

Removed the GL backend from this patch, to make it easier to review - will add it in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291199</commentid>
    <comment_count>17</comment_count>
      <attachid>70130</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-07 12:50:42 -0700</bug_when>
    <thetext>Comment on attachment 70130
Patch

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

&gt; WebCore/platform/graphics/qt/TextureMapperQt.cpp:21
&gt; +#include &quot;texmap/TextureMapper.h&quot;

so this lives in WebCore/platform/graphics/texmap/ ? This seems like a layering violation then.

&gt; WebCore/platform/graphics/qt/TextureMapperQt.cpp:23
&gt; +#include &quot;QtCore/qdebug.h&quot;

Shouldn&apos;t we include these as &lt;QtCore/qdebug.h&gt;

&gt; WebCore/platform/graphics/qt/TextureMapperQt.cpp:28
&gt; +# include &quot;opengl/TextureMapperGL.h&quot;

why the space before include?

&gt; WebCore/platform/graphics/qt/TextureMapperQt.cpp:59
&gt; +    virtual const char* type() const { return &quot;Qt&quot;; }

why Qt here. that doesn&apos;t seem descriptive

&gt; WebCore/platform/graphics/qt/TextureMapperQt.cpp:62
&gt; +    static void initialize(QPainter *painter)

* is placed wrongly

&gt; WebCore/platform/graphics/qt/TextureMapperQt.cpp:64
&gt; +        painter-&gt;setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform, false);

A comment would be good here

&gt; WebCore/platform/graphics/qt/TextureMapperQt.cpp:160
&gt; +        const BitmapTextureQt* maskQt = static_cast&lt;const BitmapTextureQt*&gt;(maskTexture);

Why not just &apos;mask&apos;?

&gt; WebCore/platform/graphics/qt/TextureMapperQt.cpp:201
&gt; +        m_image = QImage(rect.size().width(), rect.size().height(), QImage::Format_ARGB32_Premultiplied);

Are you sure we are never overriding an existing m_image here?

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:36
&gt; +#define DEBUG_TEXMAP_FPS 1

Should we commit with debug enabled?

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:43
&gt; +    GraphicsContext* gc;

I prefer context to gc

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:62
&gt; +            return sz.width() * sz.height() * 4;

add comment about the 4

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:87
&gt; +    // We need an active GL context, because we might call glDeleteTextures.

Isn&apos;t this the non GL impl?

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:109
&gt; +//    LOG(&quot;[TextureMapper] Purged %2.4fK of textures(%d) [%2.4fK/%d]\n&quot;, float(before - m_totalCost) / 1024,
&gt; +//           int(size-m_data.size()), float(m_totalCost) / 1024, m_data.size());

remove before committing

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:112
&gt; +void TextureMapperCache::mark(BitmapTexture *texture)

* placement

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:233
&gt; +        TransformData() : dirty(true), localDirty(true), perspectiveDirty(true)
&gt; +        {
&gt; +        }

Make that TransformData() : dirty(true), localDirty(true), perspectiveDirty(true { }

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:272
&gt; +    inline IntRect fullRect() const

entireRect?

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:318
&gt; +        bool dirty;
&gt; +        bool tiled;

I believe we would normally call these isDirty, isTiled etc

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:382
&gt; +    return int(((*nodeA)-&gt;m_transforms.centerZ - (*nodeB)-&gt;m_transforms.centerZ) * 1000);

1000? comment

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:392
&gt; +{
&gt; +
&gt; +    if (m_layerType == ClipLayer || m_layerType == TransparencyLayer || m_state.replicaLayer)

unneeded newline

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:398
&gt; +    for (int i = 0; i &lt; size; ++i)
&gt; +        if (TextureMapperNode* child = m_children[i])
&gt; +            if (child-&gt;hasSurfaceDescendants())
&gt; +                return true;

You are missing braces here for the &apos;for&apos; and the first &apos;if&apos;

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:403
&gt; +void TextureMapperNode::paint(GraphicsContext* gc, const IntSize&amp; size, const IntRect&amp; targetRect, const IntRect&amp; exposedRect, const TransformationMatrix&amp; transform, float opacity)

s/gc/context

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:405
&gt; +    // needs active context

comments starts with capital, ends with dot

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:483
&gt; +    // calculate layer type. A layer can be one of the following:
&gt; +    //  RootLayer: the top level. Draws to a framebuffer, and the target texture draws into the viewport.
&gt; +    //            only one layer is the root layer.
&gt; +    //  ScissorLayer: draws to the current framebuffer, and applies an extra scissor before drawing its children.
&gt; +    //                A scissor layer is a layer with children that masks to bounds, is not a transparency layer, and has a rectangular clip.
&gt; +    //  ClipLayer: creates a new framebuffer, the size of the layer, and then paints it to the enclosing BitmapTexture with the layer&apos;s transform/opacity.
&gt; +    //              A clip layer is a layer that masks to bounds, doesn&apos;t preserve 3D, has children, and has a transparency/mask or a non-rectangular transform.
&gt; +    //  TransparencyLayer: creates a new framebuffer idetical in size to the current framebuffer. Then draws the fb&apos;s texture to the current framebuffer with identity transform.
&gt; +    //                     Used for layers with children and transparency/mask that preserve 3D or don&apos;t mask to bounds.
&gt; +    //  DefaultLayer: draws itself and its children directly to the current framebuffer.
&gt; +    //                any layer that doesn&apos;t conform to the other rules is a DefaultLayer.
&gt; +

Can you keep this comment within 100 chars?

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:524
&gt; +#if 0

I dont like adding code if 0&apos;ed

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:686
&gt; +    // needs active context

wrong comment style

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:744
&gt; +void TextureMapperNode::paintSelf(TextureMapper* textureMapper, float opacity, BitmapTexture* maskTexture, BitmapTexture* replicaMaskTexture, bool isSurface)

huge method, can&apos;t it be split up?

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:763
&gt; +    // needs active context

comment style

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:1053
&gt; +    if (m_changeMask &amp; MaskLayerChange)
&gt; +       if (TextureMapperNode* layer = toTextureMapperNode(m_layer-&gt;maskLayer()))
&gt; +           layer-&gt;m_effectTarget = this;

needs braces!

&gt; WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:1057
&gt; +    if (m_changeMask &amp; ReplicaLayerChange)
&gt; +       if (TextureMapperNode* layer = toTextureMapperNode(m_layer-&gt;replicaLayer()))
&gt; +           layer-&gt;m_effectTarget = this;

also here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291236</commentid>
    <comment_count>18</comment_count>
      <attachid>70147</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-07 14:00:51 -0700</bug_when>
    <thetext>Created attachment 70147
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291240</commentid>
    <comment_count>19</comment_count>
      <attachid>70147</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-07 14:04:42 -0700</bug_when>
    <thetext>Comment on attachment 70147
Patch

Looks fine as an initial commit. Would be nice to have tronical and kling look it over, but that can be done later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291284</commentid>
    <comment_count>20</comment_count>
      <attachid>70159</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-07 15:15:32 -0700</bug_when>
    <thetext>Created attachment 70159
Patch - OpenGL implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291297</commentid>
    <comment_count>21</comment_count>
      <attachid>70147</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-07 15:56:41 -0700</bug_when>
    <thetext>Comment on attachment 70147
Patch

Rejecting patch 70147 from commit-queue.

Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;build-and-test&apos;, &apos;--no-clean&apos;, &apos;--no-update&apos;, &apos;--test&apos;, &apos;--quiet&apos;, &apos;--non-interactive&apos;]&quot; exit_code: 2
Last 500 characters of output:
l tests successful.
Files=14, Tests=304,  1 wallclock secs ( 0.73 cusr +  0.17 csys =  0.90 CPU)
Running build-dumprendertree
Compiling Java tests
make: Nothing to be done for `default&apos;.
Running tests from /Projects/CommitQueue/LayoutTests
Testing 21484 test cases.
java/lc3/JSObject/ToObject-001.html -&gt; failed

Exiting early after 1 failures. 17535 tests run.
285.23s total testing time

17534 test cases (99%) succeeded
1 test case (&lt;1%) had incorrect layout
28 test cases (&lt;1%) had stderr output

Full output: http://queues.webkit.org/results/4169127</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291310</commentid>
    <comment_count>22</comment_count>
      <attachid>70147</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-07 16:21:20 -0700</bug_when>
    <thetext>Comment on attachment 70147
Patch

Flaky?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291333</commentid>
    <comment_count>23</comment_count>
      <attachid>70147</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-07 17:01:25 -0700</bug_when>
    <thetext>Comment on attachment 70147
Patch

Rejecting patch 70147 from commit-queue.

Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;build-and-test&apos;, &apos;--no-clean&apos;, &apos;--no-update&apos;, &apos;--test&apos;, &apos;--quiet&apos;, &apos;--non-interactive&apos;]&quot; exit_code: 2
Last 500 characters of output:
uild-dumprendertree
Compiling Java tests
make: Nothing to be done for `default&apos;.
Running tests from /Projects/CommitQueue/LayoutTests
Testing 21485 test cases.
http/tests/xmlhttprequest/cross-origin-no-authorization.html -&gt; failed

Exiting early after 1 failures. 21341 tests run.
517.74s total testing time
WARNING:webkitpy.common.system:Called kill_process with a non-existant pid 39828

21340 test cases (99%) succeeded
1 test case (&lt;1%) had incorrect layout
33 test cases (&lt;1%) had stderr output

Full output: http://queues.webkit.org/results/4243118</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291437</commentid>
    <comment_count>24</comment_count>
      <attachid>70147</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-07 21:31:54 -0700</bug_when>
    <thetext>Comment on attachment 70147
Patch

Clearing flags on attachment: 70147

Committed r69374: &lt;http://trac.webkit.org/changeset/69374&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291482</commentid>
    <comment_count>25</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-10-08 00:31:16 -0700</bug_when>
    <thetext>Nice :) At the risk of stating the obvious: I think the chromium layer implementation would be a prime candidate to port to the texture mapper.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291487</commentid>
    <comment_count>26</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-08 00:51:47 -0700</bug_when>
    <thetext>Not sure about Chromium, with their GPU process stuff. Also their current stuff is pretty good. 
The first candidates I&apos;m hoping for are Android and the smaller ports, and of course as a replacement for our very own QGraphicsView-based implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291499</commentid>
    <comment_count>27</comment_count>
      <attachid>70159</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2010-10-08 01:40:28 -0700</bug_when>
    <thetext>Comment on attachment 70159
Patch - OpenGL implementation

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

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:60
&gt; +    void glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint *params);

The * should be left aligned.

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:286
&gt; +

Am I missing something or could you return before the cast?

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.h:50
&gt; +    int m_curProgram;

m_currentProgram?

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.h:64
&gt; +static inline int npot(int num)

Could you rename it?

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.h:75
&gt; +static inline IntSize npot(const IntSize&amp; s)

Rename it to size no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291505</commentid>
    <comment_count>28</comment_count>
      <attachid>70210</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-08 01:53:47 -0700</bug_when>
    <thetext>Created attachment 70210
OpenGL implementation with Alexis&apos; comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291507</commentid>
    <comment_count>29</comment_count>
      <attachid>70212</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-08 01:59:23 -0700</bug_when>
    <thetext>Created attachment 70212
Patch 1: OpenGL backend

Re-upload, forgot the m_currentProgram thingy ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291526</commentid>
    <comment_count>30</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-10-08 02:38:11 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; Not sure about Chromium, with their GPU process stuff. Also their current stuff is pretty good. 
&gt; The first candidates I&apos;m hoping for are Android and the smaller ports, and of course as a replacement for our very own QGraphicsView-based implementation

AFAIK Chromium is just using GL and their underlying GL library takes care of redirecting the commands to the real process that can access the GPU. Coding wise I think it would be fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292157</commentid>
    <comment_count>31</comment_count>
      <attachid>70361</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-09 12:30:16 -0700</bug_when>
    <thetext>Created attachment 70361
Slice 1: allow the media AC integration to compile (doesn&apos;t work yet)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292160</commentid>
    <comment_count>32</comment_count>
      <attachid>70362</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-09 12:37:02 -0700</bug_when>
    <thetext>Created attachment 70362
Patch 2: stub for media layer implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292161</commentid>
    <comment_count>33</comment_count>
      <attachid>70363</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-09 12:40:37 -0700</bug_when>
    <thetext>Created attachment 70363
Patch 3: Add an opt-in #define to WebCore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292163</commentid>
    <comment_count>34</comment_count>
      <attachid>70364</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-09 12:46:35 -0700</bug_when>
    <thetext>Created attachment 70364
Patch 4: glue layer (PageClientQt) opt-in for TextureMapper</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292165</commentid>
    <comment_count>35</comment_count>
      <attachid>70365</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-09 12:54:05 -0700</bug_when>
    <thetext>Created attachment 70365
Patch 5: have QWebFrame render the layer it got from TextureMapper

This is the most delicate patch of the 5, because it affects current QWebFrame rendering code, though it doesn&apos;t change anything significant outside the opt-in #define.
I preferred to do it like this so that I don&apos;t fork the QWebFrame functions completely, causing future pains when trying to remove the opt-in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292202</commentid>
    <comment_count>36</comment_count>
      <attachid>70362</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-09 14:34:23 -0700</bug_when>
    <thetext>Comment on attachment 70362
Patch 2: stub for media layer implementation.

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

&gt; WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp:620
&gt; +    {
&gt; +        if (!videoItem)
&gt; +            return;
&gt; +
&gt; +    }

what is the difference?

&gt; WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp:625
&gt; +        m_client = client;
&gt; +
&gt; +    }

excessive newline

&gt; WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp:627
&gt; +    virtual void paint(GraphicsContext* gc)

context, and not gc please

&gt; WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp:631
&gt; +            return;
&gt; +        QStyleOptionGraphicsItem opt;

I prefer newline after return

&gt; WebCore/platform/graphics/qt/MediaPlayerPrivateQt.h:105
&gt; +    virtual void acceleratedRenderingStateChanged() {}

needs a space in {}, thus { }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292203</commentid>
    <comment_count>37</comment_count>
      <attachid>70364</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-09 14:39:15 -0700</bug_when>
    <thetext>Comment on attachment 70364
Patch 4: glue layer (PageClientQt) opt-in for TextureMapper

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

&gt; WebCore/platform/qt/QWebPageClient.h:60
&gt; +    virtual void setRootGraphicsLayer(WebCore::TextureMapperPlatformLayer* layer) {}

space within {}, thus { }

&gt; WebCore/platform/qt/QWebPageClient.h:62
&gt; +    virtual void setRootGraphicsLayer(QGraphicsObject* layer) {}

here as well

&gt; WebKit/qt/WebCoreSupport/PageClientQt.cpp:37
&gt; +    PlatformLayerProxyQt(QWebFrame *frame, TextureMapperContentLayer *layer, QWidget *widget = 0, QGraphicsObject* graphicsObject = 0)

wrong placement of *

Can&apos;t this be templated instead of can you create two contructors one for QWidget and one for QGraphicsObject? maybe using an init() method?

&gt; WebKit/qt/WebCoreSupport/PageClientQt.cpp:38
&gt; +        : QObject(widget ? (QObject*)widget : (QObject*)graphicsObject)

Is this needed?

&gt; WebKit/qt/WebCoreSupport/PageClientQt.cpp:108
&gt; +void
&gt; +PageClientQWidget::markForSync(bool scheduleSync)

void on same line as PageClientQWidget

&gt; WebKit/qt/WebCoreSupport/PageClientQt.cpp:238
&gt; +    // This is not needed in texture-mapper, because we get the scroll position from the QPainter.
&gt; +    return;

Can&apos;t this be refactored to not have a return by just changing the defines?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292205</commentid>
    <comment_count>38</comment_count>
      <attachid>70374</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-09 14:42:55 -0700</bug_when>
    <thetext>Created attachment 70374
Patch 2: stub for media layer implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292212</commentid>
    <comment_count>39</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-09 14:54:17 -0700</bug_when>
    <thetext>Did you mean to r- patch 4 instead of patch 3?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292216</commentid>
    <comment_count>40</comment_count>
      <attachid>70377</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-09 15:25:52 -0700</bug_when>
    <thetext>Created attachment 70377
Patch 4: glue layer (PageClientQt) opt-in for TextureMapper</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292226</commentid>
    <comment_count>41</comment_count>
      <attachid>70365</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-09 16:42:55 -0700</bug_when>
    <thetext>Comment on attachment 70365
Patch 5: have QWebFrame render the layer it got from TextureMapper

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

&gt; WebKit/qt/Api/qwebframe.cpp:306
&gt; +    // TextureMapper might use raw OpenGL some other backend. On raster this doesn&apos;t have any effect anyway.

raw OpenGL some other... the english sounds a bit strange.

&gt; WebKit/qt/Api/qwebframe.cpp:308
&gt; +    painter-&gt;beginNativePainting();
&gt; +    if (rootGraphicsLayer)

do we really need beginNative* if there is no rootGraphicsLayer?

&gt; WebKit/qt/Api/qwebframe.cpp:310
&gt; +    painter-&gt;endNativePainting();

I would like a newline after this, as it is a kind of grouping

&gt; WebKit/qt/Api/qwebframe.cpp:360
&gt; +#if USE(ACCELERATED_COMPOSITING) &amp;&amp; USE(TEXTURE_MAPPER)

why doesn&apos;t texture mapper imply accel. compositing

&gt; WebKit/qt/Api/qwebframe.cpp:361
&gt; +        if (rootGraphicsLayer ) {

remove space after rootGraphicsLayer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292227</commentid>
    <comment_count>42</comment_count>
      <attachid>70377</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-09 16:47:24 -0700</bug_when>
    <thetext>Comment on attachment 70377
Patch 4: glue layer (PageClientQt) opt-in for TextureMapper

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

&gt; WebKit/qt/WebCoreSupport/PageClientQt.cpp:40
&gt; +    PlatformLayerProxyQt(QWebFrame* frame, TextureMapperContentLayer* layer, QWidget* widget = 0, QGraphicsObject* graphicsObject = 0)
&gt; +        : QObject(widget ? (QObject*)widget : (QObject*)graphicsObject)
&gt; +        , m_widget(widget)
&gt; +        , m_graphicsItem(graphicsObject)

I dont like this very much... it is not clear if you can have widget and graphics object at the same time and in that case, what the widget would be

&gt; WebKit/qt/WebCoreSupport/PageClientQt.cpp:94
&gt; +
&gt; +    QRect m_dirtyRect;
&gt; +    QWidget* m_widget;
&gt; +    QGraphicsItem* m_graphicsItem;
&gt; +    QWebFrame* m_frame;
&gt; +    TextureMapperContentLayer* m_layer;

Why are these public?

&gt; WebKit/qt/WebCoreSupport/PageClientQt.cpp:428
&gt; -    // The sceneRect is a good approximation of the size of the application, independent of the view.
&gt; +    // The sceneRect is a good approximation of the size of the application, in dependent of the view.

This change doesn&apos;t seem right

&gt; WebKit/qt/WebCoreSupport/PageClientQt.h:53
&gt; +    PageClientQWidget(QWidget* v, QWebPage *p)
&gt; +        : view(v)
&gt; +        , page(p)

just write out things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292228</commentid>
    <comment_count>43</comment_count>
      <attachid>70374</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-09 16:50:26 -0700</bug_when>
    <thetext>Comment on attachment 70374
Patch 2: stub for media layer implementation.

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

&gt; WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp:630
&gt; +        opt.rect = opt.exposedRect.toRect();

Are you setting the flag that makes this not be the boundingrect?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292290</commentid>
    <comment_count>44</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-10 06:54:03 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; (From update of attachment 70374 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=70374&amp;action=review
&gt; 
&gt; &gt; WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp:630
&gt; &gt; +        opt.rect = opt.exposedRect.toRect();
&gt; 
&gt; Are you setting the flag that makes this not be the boundingrect?

I&apos;m not sure yet, this is just a stub that makes things compile with texture-mapper + video... let&apos;s review it again when it actually works</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292296</commentid>
    <comment_count>45</comment_count>
      <attachid>70401</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-10 07:15:41 -0700</bug_when>
    <thetext>Created attachment 70401
Patch 4: glue layer (PageClientQt) opt-in for TextureMapper</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292297</commentid>
    <comment_count>46</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-10 07:18:41 -0700</bug_when>
    <thetext>&gt; why doesn&apos;t texture mapper imply accel. compositing
I&apos;d rather keep both flags for now - one of them is permanent and one temporary. We&apos;ll remove the TEXTURE_MAPPER flag later, and keep the ACCELERATED_COMPOSITING one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292298</commentid>
    <comment_count>47</comment_count>
      <attachid>70402</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-10 07:20:56 -0700</bug_when>
    <thetext>Created attachment 70402
Patch 5: have QWebFrame render the layer it got from TextureMapper</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292300</commentid>
    <comment_count>48</comment_count>
      <attachid>70363</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-10 07:21:41 -0700</bug_when>
    <thetext>Comment on attachment 70363
Patch 3: Add an opt-in #define to WebCore

I think this was r-&apos;ed by mistake - otherwise I see no comments about what&apos;s wrong :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292303</commentid>
    <comment_count>49</comment_count>
      <attachid>70402</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-10 07:30:43 -0700</bug_when>
    <thetext>Comment on attachment 70402
Patch 5: have QWebFrame render the layer it got from TextureMapper

Looks fine, just make sure this is very well tested, for the case not using AC</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292304</commentid>
    <comment_count>50</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-10 07:34:11 -0700</bug_when>
    <thetext>(In reply to comment #49)
&gt; (From update of attachment 70402 [details])
&gt; Looks fine, just make sure this is very well tested, for the case not using AC

I tested it manually and there&apos;s no change in rednering - in the non-AC case all I do is move the if() to be outside the for(). 

I tried to keep this change separate in case it does cause a regression that I can&apos;t detect by myself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293618</commentid>
    <comment_count>51</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-13 12:27:47 -0700</bug_when>
    <thetext>Attachment 70402 was posted by a committer and has review+, assigning to Noam Rosenthal for commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294159</commentid>
    <comment_count>52</comment_count>
      <attachid>70374</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-14 09:53:16 -0700</bug_when>
    <thetext>Comment on attachment 70374
Patch 2: stub for media layer implementation.

Clearing flags on attachment: 70374

Committed r69772: &lt;http://trac.webkit.org/changeset/69772&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294181</commentid>
    <comment_count>53</comment_count>
      <attachid>70402</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-14 10:31:53 -0700</bug_when>
    <thetext>Comment on attachment 70402
Patch 5: have QWebFrame render the layer it got from TextureMapper

Clearing flags on attachment: 70402

Committed r69777: &lt;http://trac.webkit.org/changeset/69777&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298820</commentid>
    <comment_count>54</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-25 06:47:40 -0700</bug_when>
    <thetext>Patch 1 and patch 4 are still awaiting review... any takers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298825</commentid>
    <comment_count>55</comment_count>
      <attachid>70401</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-25 06:52:36 -0700</bug_when>
    <thetext>Comment on attachment 70401
Patch 4: glue layer (PageClientQt) opt-in for TextureMapper

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

&gt; WebCore/platform/qt/QWebPageClient.h:63
&gt; +#if USE(TEXTURE_MAPPER)
&gt; +    virtual void setRootGraphicsLayer(WebCore::TextureMapperPlatformLayer* layer) { }
&gt; +#else
&gt; +    virtual void setRootGraphicsLayer(QGraphicsObject* layer) { }
&gt; +#endif

Why not just use NativeLayer instead of QGraphicsObject* etc, now that these typedefs exists?

&gt; WebKit/qt/WebCoreSupport/PageClientQt.cpp:58
&gt; +    void setSizeChanged(const IntSize&amp; newSize)
&gt; +    {
&gt; +    }

Add a comment why this is umimplemented</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298838</commentid>
    <comment_count>56</comment_count>
      <attachid>70212</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-25 07:29:31 -0700</bug_when>
    <thetext>Comment on attachment 70212
Patch 1: OpenGL backend

Looks fine as an initial commit. We can take it from here in future patches if needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298845</commentid>
    <comment_count>57</comment_count>
      <attachid>70212</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-25 07:53:35 -0700</bug_when>
    <thetext>Comment on attachment 70212
Patch 1: OpenGL backend

Clearing flags on attachment: 70212

Committed r70452: &lt;http://trac.webkit.org/changeset/70452&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298862</commentid>
    <comment_count>58</comment_count>
      <attachid>70401</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-10-25 08:26:58 -0700</bug_when>
    <thetext>Comment on attachment 70401
Patch 4: glue layer (PageClientQt) opt-in for TextureMapper

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

&gt; WebCore/platform/qt/QWebPageClient.h:-36
&gt; +#else
&gt; +class QGraphicsObject;
&gt; +#endif
&gt; +
&gt;  QT_BEGIN_NAMESPACE
&gt; -class QGraphicsItem;

Theoretically the QGraphicsObject forward declaration should remain inside QT_BEGIN_NAMESPACE. Why #ifdef the forward declaration anyway? Why not always forward declare QGraphicsObject and TextureMapperPlatformLayer simply? :)

&gt; WebCore/platform/qt/QWebPageClient.h:60
&gt; +    virtual void setRootGraphicsLayer(WebCore::TextureMapperPlatformLayer* layer) { }

On a second thought, why not use the PlatformLayer typedef instead of #ifdef here? Is it a problem to include GraphicsLayer.h here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298955</commentid>
    <comment_count>59</comment_count>
      <attachid>71767</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-25 10:42:59 -0700</bug_when>
    <thetext>Created attachment 71767
Patch 4: glue layer (PageClientQt) opt-in for TextureMapper</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298956</commentid>
    <comment_count>60</comment_count>
      <attachid>71768</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-25 10:44:10 -0700</bug_when>
    <thetext>Created attachment 71768
Patch 4: glue layer (PageClientQt) opt-in for TextureMapper</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299013</commentid>
    <comment_count>61</comment_count>
      <attachid>71768</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-25 12:06:45 -0700</bug_when>
    <thetext>Comment on attachment 71768
Patch 4: glue layer (PageClientQt) opt-in for TextureMapper

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

Apart from the ChangeLog, this looks ok.

&gt; WebCore/ChangeLog:13
&gt; +        No new tests. WIP on a new implementation.

What do you mean about this? Are no new tests needed? Are you working on a new implementation? then why should this go in?

&gt; WebCore/platform/qt/QWebPageClient.h:55
&gt; +    virtual void setRootGraphicsLayer(PlatformLayer* layer) { }

Now that is a lot better!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299015</commentid>
    <comment_count>62</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-25 12:11:05 -0700</bug_when>
    <thetext>(In reply to comment #61)
&gt; &gt; +        No new tests. WIP on a new implementation.
&gt; 
&gt; What do you mean about this? Are no new tests needed? Are you working on a new implementation? then why should this go in?

The old compositing tests should be sufficient for this. But nothing is testable until the implementation is complete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299019</commentid>
    <comment_count>63</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-25 12:15:58 -0700</bug_when>
    <thetext>(In reply to comment #62)
&gt; (In reply to comment #61)
&gt; &gt; &gt; +        No new tests. WIP on a new implementation.
&gt; &gt; 
&gt; &gt; What do you mean about this? Are no new tests needed? Are you working on a new implementation? then why should this go in?
&gt; 
&gt; The old compositing tests should be sufficient for this. But nothing is testable until the implementation is complete.

Now just add that to the ChangeLog!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299024</commentid>
    <comment_count>64</comment_count>
      <attachid>71780</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-25 12:19:54 -0700</bug_when>
    <thetext>Created attachment 71780
Patch 4: glue layer (PageClientQt) opt-in for TextureMapper</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299077</commentid>
    <comment_count>65</comment_count>
      <attachid>70363</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-25 13:20:34 -0700</bug_when>
    <thetext>Comment on attachment 70363
Patch 3: Add an opt-in #define to WebCore

Clearing flags on attachment: 70363

Committed r70485: &lt;http://trac.webkit.org/changeset/70485&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299088</commentid>
    <comment_count>66</comment_count>
      <attachid>71780</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-25 13:43:54 -0700</bug_when>
    <thetext>Comment on attachment 71780
Patch 4: glue layer (PageClientQt) opt-in for TextureMapper

Clearing flags on attachment: 71780

Committed r70487: &lt;http://trac.webkit.org/changeset/70487&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299089</commentid>
    <comment_count>67</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-25 13:44:06 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300733</commentid>
    <comment_count>68</comment_count>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2010-10-27 17:31:11 -0700</bug_when>
    <thetext>Reopened, because it breaks the build. I wonder how this can compile at all. Hint: &quot;Platfrom&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301381</commentid>
    <comment_count>69</comment_count>
      <attachid>72246</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-28 15:30:38 -0700</bug_when>
    <thetext>Created attachment 72246
Build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301382</commentid>
    <comment_count>70</comment_count>
      <attachid>72247</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-28 15:32:16 -0700</bug_when>
    <thetext>Created attachment 72247
Build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301399</commentid>
    <comment_count>71</comment_count>
      <attachid>72247</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-28 15:57:48 -0700</bug_when>
    <thetext>Comment on attachment 72247
Build fix

Clearing flags on attachment: 72247

Committed r70819: &lt;http://trac.webkit.org/changeset/70819&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301400</commentid>
    <comment_count>72</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-28 15:58:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301573</commentid>
    <comment_count>73</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-28 21:18:59 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/70819 might have broken GTK Linux 32-bit Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301580</commentid>
    <comment_count>74</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-28 21:43:35 -0700</bug_when>
    <thetext>(In reply to comment #73)
&gt; http://trac.webkit.org/changeset/70819 might have broken GTK Linux 32-bit Release
I doubt it, none of the changed files gets compiled for GTK...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301843</commentid>
    <comment_count>75</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-29 10:08:32 -0700</bug_when>
    <thetext>Adding some patches using this bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301853</commentid>
    <comment_count>76</comment_count>
      <attachid>72346</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-29 10:30:17 -0700</bug_when>
    <thetext>Created attachment 72346
Build fix for X11: Plugins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301862</commentid>
    <comment_count>77</comment_count>
      <attachid>72347</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-29 10:43:11 -0700</bug_when>
    <thetext>Created attachment 72347
Patch: small refactor to allow WebKit2 and remove globals

This is based to feedback from Simon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301872</commentid>
    <comment_count>78</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-29 10:48:36 -0700</bug_when>
    <thetext>Attachment 72347 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;WebKit/qt/Api/qwebframe.cpp&quot;
WebCore/platform/graphics/opengl/TextureMapperGL.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/graphics/opengl/TextureMapperGL.cpp:41:  &quot;GL/glx.h&quot; already included at WebCore/platform/graphics/opengl/TextureMapperGL.cpp:37  [build/include] [4]
WebCore/platform/graphics/opengl/TextureMapperGL.cpp:85:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebCore/platform/graphics/opengl/TextureMapperGL.cpp:553:  Use 0 instead of NULL.  [readability/null] [5]
WARNING: File exempt from style guide. Skipping: &quot;WebKit/qt/Api/qwebframe_p.h&quot;
Total errors found: 4 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301876</commentid>
    <comment_count>79</comment_count>
      <attachid>72349</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-29 10:54:16 -0700</bug_when>
    <thetext>Created attachment 72349
Patch: small refactor to allow WebKit2 and remove globals</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301880</commentid>
    <comment_count>80</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-29 10:56:50 -0700</bug_when>
    <thetext>Attachment 72347 did not build on qt:
Build output: http://queues.webkit.org/results/4842073</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301892</commentid>
    <comment_count>81</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-29 11:12:43 -0700</bug_when>
    <thetext>Attachment 72349 did not build on qt:
Build output: http://queues.webkit.org/results/4748095</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301980</commentid>
    <comment_count>82</comment_count>
      <attachid>72374</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-29 12:51:26 -0700</bug_when>
    <thetext>Created attachment 72374
Patch: small refactor to allow WebKit2 and remove globals

Oops, one of the lines was outside the #ifdef</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302240</commentid>
    <comment_count>83</comment_count>
      <attachid>72346</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-10-29 19:54:14 -0700</bug_when>
    <thetext>Comment on attachment 72346
Build fix for X11: Plugins

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302263</commentid>
    <comment_count>84</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-29 23:47:33 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 72346:

fast/events/spatial-navigation/snav-clipped-overflowed-content.html
fast/dom/onerror-img.html

Please file bugs against the tests.  These tests were authored by tonikitoo@webkit.org and vestbo@webkit.org.  The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302270</commentid>
    <comment_count>85</comment_count>
      <attachid>72374</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-30 00:59:35 -0700</bug_when>
    <thetext>Comment on attachment 72374
Patch: small refactor to allow WebKit2 and remove globals

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

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:88
&gt; +typedef GLXContextHandle GLContextHandle;

In WebKit we normally use *Context and not ContextHandle, maybe use GraphicsGLContext or so?

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:113
&gt; +            TargetProgram,
&gt; +            NumPrograms

I would add a new line before NumPrograms. Does this follow webkit naming?

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:154
&gt; +            char infoLog[1024];
&gt; +            int len;
&gt; +            GL_CMD(glGetProgramInfoLog(programID, 1024, &amp;len, infoLog));

You are reintroducing this part. Are you using the log for any thing now?

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:496
&gt; +    GLuint newTextureID = m_textureMapper-&gt;pvt-&gt;directlyCompositedImages.findOrCreate(nativeImage, found);

I don&apos;t think we normally uses &quot;Private&quot; classes in WebCore, and I dont really like the pvt naming. Find out what is done in other cases in WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302314</commentid>
    <comment_count>86</comment_count>
      <attachid>72436</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-30 08:29:16 -0700</bug_when>
    <thetext>Created attachment 72436
Revised after Kenneth&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302315</commentid>
    <comment_count>87</comment_count>
      <attachid>72437</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-30 08:33:04 -0700</bug_when>
    <thetext>Created attachment 72437
Revised after Kenneth&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302383</commentid>
    <comment_count>88</comment_count>
      <attachid>72437</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-31 06:38:04 -0700</bug_when>
    <thetext>Comment on attachment 72437
Revised after Kenneth&apos;s comments

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

&gt; WebCore/platform/graphics/texmap/TextureMapper.h:1
&gt; -/*
&gt; + /*

Is thi change correct&gt;?

&gt; WebKit/qt/Api/qwebframe.cpp:328
&gt; +#if USE(ACCELERATED_COMPOSITING) &amp;&amp; USE(TEXTURE_MAPPER)
&gt; +void QWebFramePrivate::renderCompositedLayers(GraphicsContext* context, const IntRect&amp; clip)
&gt; +{
&gt; +    if (!rootGraphicsLayer)
&gt; +        return;
&gt; +    if (!textureMapper)
&gt; +        textureMapper = TextureMapper::create(context);
&gt; +    textureMapper-&gt;setGraphicsContext(context);
&gt; +    textureMapper-&gt;setImageInterpolationQuality(context-&gt;imageInterpolationQuality());
&gt; +    textureMapper-&gt;setTextDrawingMode(context-&gt;textDrawingMode());
&gt; +    QPainter* painter = context-&gt;platformContext();
&gt; +    FrameView* view = frame-&gt;view();
&gt; +    painter-&gt;save();
&gt; +    painter-&gt;beginNativePainting();
&gt; +    TextureMapperContentLayer::PaintOptions options;
&gt; +    options.visibleRect = clip;
&gt; +    options.targetRect = view-&gt;frameRect();
&gt; +    options.viewportSize = view-&gt;size();
&gt; +    options.opacity = painter-&gt;opacity();
&gt; +    rootGraphicsLayer-&gt;paint(textureMapper.get(), options);
&gt; +    painter-&gt;endNativePainting();
&gt; +    painter-&gt;restore();
&gt; +}
&gt; +#endif

Can&apos;t you use newlines to group this more logically... That would make reading it a bit easier... like an empty newline after return</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302395</commentid>
    <comment_count>89</comment_count>
      <attachid>72457</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-31 08:39:53 -0700</bug_when>
    <thetext>Created attachment 72457
Same as reviewed patch, fixed the new line and space glitch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302398</commentid>
    <comment_count>90</comment_count>
      <attachid>72457</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-31 09:07:52 -0700</bug_when>
    <thetext>Comment on attachment 72457
Same as reviewed patch, fixed the new line and space glitch

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

&gt; WebCore/platform/graphics/opengl/TextureMapperGL.cpp:497
&gt; +    GLuint newTextureID = m_textureMapper-&gt;m_data-&gt;directlyCompositedImages.findOrCreate(nativeImage, found);

Btw, I would prefer an inline accessor for m_data. like data(). That is more out way to do things.

Meaning that in the class where m_data is defined m_data-&gt; is fine, but when you use it elsewhere an inline accessor makes sense, also you could make it private and friend if not supposed to be used by others.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302517</commentid>
    <comment_count>91</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-31 18:38:46 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 72346:

webarchive/test-link-rel-icon.html

Please file bugs against the tests.  These tests were authored by ddkilzer@webkit.org.  The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302520</commentid>
    <comment_count>92</comment_count>
      <attachid>72346</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-31 18:39:46 -0700</bug_when>
    <thetext>Comment on attachment 72346
Build fix for X11: Plugins

Clearing flags on attachment: 72346

Committed r71000: &lt;http://trac.webkit.org/changeset/71000&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302521</commentid>
    <comment_count>93</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-31 18:40:01 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302531</commentid>
    <comment_count>94</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-31 19:18:02 -0700</bug_when>
    <thetext>Why was this closed? one patch was not committed yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302532</commentid>
    <comment_count>95</comment_count>
      <attachid>72457</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-31 19:18:59 -0700</bug_when>
    <thetext>Comment on attachment 72457
Same as reviewed patch, fixed the new line and space glitch

Rejecting patch 72457 from review queue.

noam.rosenthal@nokia.com does not have reviewer permissions according to http://trac.webkit.org/browser/trunk/WebKitTools/Scripts/webkitpy/common/config/committers.py.

- If you do not have reviewer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have reviewer rights please correct the error in WebKitTools/Scripts/webkitpy/common/config/committers.py by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your reviewer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302537</commentid>
    <comment_count>96</comment_count>
      <attachid>72457</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-31 19:31:54 -0700</bug_when>
    <thetext>Comment on attachment 72457
Same as reviewed patch, fixed the new line and space glitch

Rejecting patch 72457 from commit-queue.

Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;apply-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, 72457]&quot; exit_code: 2
Last 500 characters of output:
aphics/qt/TextureMapperQt.cpp
patching file WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp
patching file WebCore/platform/graphics/texmap/TextureMapper.h
patching file WebCore/platform/graphics/texmap/TextureMapperPlatformLayer.h
patching file WebKit/qt/Api/qwebframe.cpp
patching file WebKit/qt/Api/qwebframe_p.h
patching file WebKit/qt/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.

Failed to run &quot;[u&apos;/Projects/CommitQueue/WebKitTools/Scripts/svn-apply&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/4765106</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302549</commentid>
    <comment_count>97</comment_count>
      <attachid>72457</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-31 20:10:29 -0700</bug_when>
    <thetext>Comment on attachment 72457
Same as reviewed patch, fixed the new line and space glitch

Rejecting patch 72457 from commit-queue.

Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=abarth-cq-sl&apos;, &apos;apply-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, 72457]&quot; exit_code: 2
Last 500 characters of output:
/TextureMapperQt.cpp
patching file WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp
patching file WebCore/platform/graphics/texmap/TextureMapper.h
patching file WebCore/platform/graphics/texmap/TextureMapperPlatformLayer.h
patching file WebKit/qt/Api/qwebframe.cpp
patching file WebKit/qt/Api/qwebframe_p.h
patching file WebKit/qt/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.

Failed to run &quot;[u&apos;/Users/abarth/git/webkit-queue/WebKitTools/Scripts/svn-apply&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/4764117</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302550</commentid>
    <comment_count>98</comment_count>
      <attachid>72483</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-10-31 20:21:40 -0700</bug_when>
    <thetext>Created attachment 72483
Patch

I changed m_data to data(). Can someone r+ it again? For some reason I couldn&apos;t do it myself...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302725</commentid>
    <comment_count>99</comment_count>
      <attachid>72483</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-01 08:51:19 -0700</bug_when>
    <thetext>Comment on attachment 72483
Patch

Rejecting patch 72483 from commit-queue.

Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;apply-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, 72483]&quot; exit_code: 2
Last 500 characters of output:
bCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp
patching file WebCore/platform/graphics/texmap/TextureMapper.h
patching file WebCore/platform/graphics/texmap/TextureMapperPlatformLayer.h
patching file WebKit/qt/Api/qwebframe.cpp
patching file WebKit/qt/Api/qwebframe_p.h
patching file WebKit/qt/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.

Failed to run &quot;[u&apos;/Projects/CommitQueue/WebKitTools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Kenneth Rohde Christiansen&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/4795130</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303768</commentid>
    <comment_count>100</comment_count>
      <attachid>72762</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-11-02 16:21:42 -0700</bug_when>
    <thetext>Created attachment 72762
Patch

Some patch/diff issues... applying again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303892</commentid>
    <comment_count>101</comment_count>
      <attachid>72762</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-02 21:41:44 -0700</bug_when>
    <thetext>Comment on attachment 72762
Patch

Clearing flags on attachment: 72762

Committed r71213: &lt;http://trac.webkit.org/changeset/71213&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303893</commentid>
    <comment_count>102</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-02 21:42:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305675</commentid>
    <comment_count>103</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-11-05 17:44:31 -0700</bug_when>
    <thetext>Reopening to allow some more patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305710</commentid>
    <comment_count>104</comment_count>
      <attachid>73160</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-11-05 20:30:57 -0700</bug_when>
    <thetext>Created attachment 73160
Prepare TextureMapper to be thread safe

This looks like a big patch, but most of it is just moving TextureMapperNode to its own file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306047</commentid>
    <comment_count>105</comment_count>
      <attachid>73160</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-11-08 00:58:15 -0800</bug_when>
    <thetext>Comment on attachment 73160
Prepare TextureMapper to be thread safe

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

&gt; WebCore/platform/graphics/qt/TextureMapperQt.h:24
&gt; +#define TextureMapperQt_h
&gt; +namespace WebCore {

Add newline between these

&gt; WebCore/platform/graphics/texmap/TextureMapperNode.cpp:35
&gt; +        inline int calculateCost() const

Rename to computeCost, to follow our nomenclature

&gt; WebCore/platform/graphics/texmap/TextureMapperNode.cpp:81
&gt; +        m_totalCost += m_data[i].calculateCost();
&gt; +
&gt; +
&gt; +    for (int i = size-1; i &gt;= 0 &amp;&amp; m_totalCost &gt; TextureMapperCache::MaxCost - TextureMapperCache::PurgeAmount; --i) {

Remove one of these newlines

&gt; WebCore/platform/graphics/texmap/TextureMapperNode.cpp:193
&gt; +        return true;
&gt; +    const int size = m_children.size();

Add newline between these two

&gt; WebCore/platform/graphics/texmap/TextureMapperNode.cpp:207
&gt; +        return 0;
&gt; +    int descendantsWithContent = (m_state.drawsContent || m_currentContent.contentType != HTMLContentType) ? 1 : 0;

here as well

&gt; WebCore/platform/graphics/texmap/TextureMapperNode.cpp:329
&gt; +        return;
&gt; +    m_transforms.forDescendants.setM13(0);

newline between</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306149</commentid>
    <comment_count>106</comment_count>
      <attachid>73244</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-11-08 08:59:36 -0800</bug_when>
    <thetext>Created attachment 73244
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306179</commentid>
    <comment_count>107</comment_count>
      <attachid>73244</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-11-08 10:08:33 -0800</bug_when>
    <thetext>Comment on attachment 73244
Patch

Committed manually, r71538.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306374</commentid>
    <comment_count>108</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-08 14:26:31 -0800</bug_when>
    <thetext>This broke the Snow Leopard bot (and thus the commit-queue).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306394</commentid>
    <comment_count>109</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-11-08 14:54:00 -0800</bug_when>
    <thetext>(In reply to comment #108)
&gt; This broke the Snow Leopard bot (and thus the commit-queue).

Temporary fix: 71577. Will re-add the test later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307539</commentid>
    <comment_count>110</comment_count>
      <attachid>72437</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-10 14:03:39 -0800</bug_when>
    <thetext>Comment on attachment 72437
Revised after Kenneth&apos;s comments

Cleared Kenneth Rohde Christiansen&apos;s review+ from obsolete attachment 72437 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307540</commentid>
    <comment_count>111</comment_count>
      <attachid>72483</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-10 14:03:46 -0800</bug_when>
    <thetext>Comment on attachment 72483
Patch

Cleared Kenneth Rohde Christiansen&apos;s review+ from obsolete attachment 72483 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307541</commentid>
    <comment_count>112</comment_count>
      <attachid>73160</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-10 14:03:54 -0800</bug_when>
    <thetext>Comment on attachment 73160
Prepare TextureMapper to be thread safe

Cleared Kenneth Rohde Christiansen&apos;s review+ from obsolete attachment 73160 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69601</attachid>
            <date>2010-10-03 23:18:05 -0700</date>
            <delta_ts>2010-10-04 00:22:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47070-20101004081801.patch</filename>
            <type>text/plain</type>
            <size>113779</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MDViOTc3NTc3NjQwNTgwMDgyMjQyYzQ3MDAzZGVhYWJmOThlMTU3MS4uNDkxZGU0YjE2MjdiOGZj
NGViZGE0ZWM4NDcxN2FkYzAzZmUyZGEyZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxODIgQEAKKzIwMTAtMTAtMDMgIE5v
J2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVGV4bWFwXSBbUXRdIFRleHR1cmUg
bWFwcGVyIGluaXRpYWwgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MDcwCisKKyAgICAgICAgTm8gbmV3IHRlc3RzOiBpbml0
aWFsIHBhdGNoLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVN
YXBwZXJHTC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGVidWdHTENvbW1hbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6bG9hZFJlY3RUb1NoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBUZXh0dXJlR0w6OkJpdG1hcFRleHR1cmVHTCk6CisgICAgICAgIChXZWJDb3JlOjpUZXht
YXBTaGFkZXJJbmZvOjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4
bWFwU2hhZGVySW5mbzo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4
bWFwU2hhZGVySW5mbzo6Y3JlYXRlU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJHTDo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnJlc2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6YmVnaW5QYWludCk6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmVuZFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleG1hcEdMU2hhZGVyVGV4dHVyZXM6OmZpbmRPckNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXhtYXBHTFNoYWRlclRleHR1cmVzOjpkZXJlZik6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBUZXh0dXJlR0w6OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBUZXh0dXJlR0w6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdM
Ojppc1ZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6c2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVQcm9qZWN0aW9uTWF0cml4KToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJHTDo6Y2xlYW51cCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyR0w6OmJpbmRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJH
TDo6c2V0Q2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OnBhaW50VG9U
YXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0dXJl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjp+VGV4dHVyZU1hcHBl
ckdMKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6YWxsb3dTdXJmYWNlRm9y
Um9vdCk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcjo6flJH
QkEzMlByZW11bHRpbXBsaWVkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Om5wb3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNhY2hlOjpFbnRy
eTo6RW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNhY2hlOjpFbnRyeTo6
Y2FsY3VsYXRlQ29zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ2FjaGU6OkVu
dHJ5OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWNoZTo6
VGV4dHVyZU1hcHBlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWNo
ZTo6cHVyZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNhY2hlOjptYXJrKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWNoZUxvY2s6OlRleHR1cmVNYXBwZXJD
YWNoZUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNhY2hlTG9jazo6flRl
eHR1cmVNYXBwZXJDYWNoZUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5v
ZGU6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJOb2RlOjpub3RpZnlBbmltYXRpb25TdGFydGVkQXN5bmMpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGU6OlRyYW5zZm9ybURhdGE6OlRyYW5zZm9ybURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnREYXRhOjpDb250ZW50RGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6dGFyZ2V0UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6ZnVsbFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnJlcGxpY2FSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJOb2RlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpHcmFwaGljc0xheWVy
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpTdGF0ZTo6
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldE5lZWRzRGlz
cGxheUluUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c2V0TmVl
ZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzZXRQbGF0
Zm9ybUxheWVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVHcmFwaGljc0xheWVy
c1pWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpzb3J0QnlaT3JkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlck5vZGU6Omhhc1N1cmZhY2VEZXNjZW5kYW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGU6OmNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6dG9UZXh0dXJlTWFwcGVyTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZUxheWVyVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6aW5pdGlhbGl6ZVRleHR1cmVNYXBwZXIp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OlRleHR1cmVNYXBwZXJOb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpyb290TGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmludmFsaWRhdGVUcmFuc2Zvcm0pOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVMb2NhbFRyYW5zZm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6ZmxhdHRlblRvMkRTcGFj
ZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpuZWFy
ZXN0U3VyZmFjZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNv
bXB1dGVSZXBsaWNhVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJO
b2RlOjpjb21wdXRlVHJhbnNmb3JtYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJOb2RlOjpiZWdpbkFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyTm9kZTo6ZW5kQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJO
b2RlOjp1cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlck5vZGU6OnBhaW50U2VsZik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
Tm9kZTo6cGFpbnRSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5v
ZGU6OmNsZWFudXBUZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJOb2RlOjp+VGV4dHVyZU1hcHBlck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlck5vZGU6OnNldFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
Tm9kZTo6c2V0T3BhY2l0eUZyb21BbmltYXRpb25GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyTm9kZTo6bm90aWZ5VHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6bm90aWZ5T3BhY2l0eUFuaW1hdGlvblJ1
bm5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6Om5vdGlmeUFuaW1h
dGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldFRy
YW5zZm9ybUZyb21BbmltYXRpb25GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyTm9kZTo6bm90aWZ5Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJO
b2RlOjpwZXJmb3JtUG9zdFN5bmNPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6On5HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcjo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldFBhcmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q2hpbGRyZW4pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRDaGlsZEF0SW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkQWJv
dmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENo
aWxkQmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OnJlcGxhY2VDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcjo6c2V0TWFza0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0UG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldEFuY2hvclBvaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRUcmFuc2Zvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENoaWxk
cmVuVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyOjpzZXRQcmVzZXJ2ZXMzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcjo6c2V0TWFza3NUb0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmNsZWFyQmFja2dyb3VuZENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRD
b250ZW50c09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNCYWNr
Z3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI6OnNldENvbnRlbnRzVG9NZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlz
TGF5ZXJPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
OjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcjo6bmF0aXZlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXI6OnBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFRleHR1cmU6OkJpdG1hcFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwVGV4dHVyZTo6fkJpdG1hcFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
VGV4dHVyZTo6YWxsb3dPZmZsaW5lVGV4dHVyZVVwbG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBUZXh0dXJlOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjpi
ZWdpblBhaW50TWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6c2F2ZSk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjpsb2NrKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFRleHR1cmU6OnVubG9jayk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0
dXJlOjppc0xvY2tlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjpjb250ZW50
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjpzZXRPZmZzZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6b2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXI6On5UZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXI6OnBhaW50VG9UYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
cjo6Y2xlYW51cCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpncmFwaGljc0Nv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6VGV4dHVyZU1hcHBlcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyQ2xp
ZW50Ojp+VGV4dHVyZU1hcHBlckxheWVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyOjp+VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6cGFpbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6Y2xlYW51cFRleHR1cmVNYXBw
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6bGF5ZXJU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJWaWRlb0xheWVyOjpsYXllclR5
cGUpOgorCisyMDEwLTEwLTAzICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tp
YS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWxsb3cgQ1NTIGFuaW1hdGlvbnMgdG8gcnVuIGF0IG1vcmUgdGhhbiA0MEZQUworICAgICAgICBB
ZGQgYSBzZXR0aW5ncyBmdW5jdGlvbiAoc2V0QW5pbWF0aW9uVGltZXJEZWxheSkgdGhhdCBhZmZl
Y3RzIEFuaW1hdGlvbkNvbnRyb2xsZXIncyB0aW1lci4gVGhpcyBpcyBpbiBhY2NvcmRhbmNlIHRv
CisgICAgICAgIGhvdyB0aGUgRE9NVGltZXIgbWluaW11bSBpbnRlcnZhbCBzZXR0aW5ncyB3ZXJl
IGRvbmUgaW4gYnVnIDQ1MzYyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDYyODMKKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhpcyBidWcgZG9l
c24ndCBjcmVhdGUgYW55IG5ldyB0ZXN0YWJsZSBiZWhhdmlvci4KKworICAgICAgICAqIHBhZ2Uv
U2V0dGluZ3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNldEFuaW1hdGlvblRp
bWVyRGVsYXkpOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuaDoKKyAgICAgICAgKiBwYWdlL2Fu
aW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25UaW1lcik6CisgICAgICAgICog
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6
QW5pbWF0aW9uQ29udHJvbGxlcjo6YW5pbWF0aW9uVGltZXJEZWxheSk6CisgICAgICAgIChXZWJD
b3JlOjpBbmltYXRpb25Db250cm9sbGVyOjpzZXRBbmltYXRpb25UaW1lckRlbGF5KToKKwogMjAx
MC0xMC0wMyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEhvbGdlciBGcmV5dGhlci4KQEAgLTYyMDcwLDcgKzYyMjQ5LDcgQEAKIAogICAgICAg
ICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEuCiAKLSAgICAgICAgQnVnwqA0MTM0
MCAtIFtHU3RyZWFtZXJdIFN1YnRsZSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgc2Vla3MKKyAgICAg
ICAgQnVnIDQxMzQwIC0gW0dTdHJlYW1lcl0gU3VidGxlIHJhY2UgY29uZGl0aW9uIGR1cmluZyBz
ZWVrcwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEz
NDAKIAogICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3Vy
Y2VHU3RyZWFtZXIuY3BwOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcCBi
L1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKaW5kZXggM2M5NWI1OWQ2NzdhNWExMWEwNTc1ZWU2
OGUyMDc5NjQ1ZDllMGQzMC4uYzhiYzNmMWE1NTU4ZTMyNmI0NjJhZTUxZDc2NzA1YTVlZmVjZTY0
MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAorKysgYi9XZWJDb3JlL3Bh
Z2UvU2V0dGluZ3MuY3BwCkBAIC00MTIsNiArNDEyLDExIEBAIHZvaWQgU2V0dGluZ3M6OnNldE1p
bkRPTVRpbWVySW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQogICAgIERPTVRpbWVyOjpzZXRNaW5U
aW1lckludGVydmFsKGludGVydmFsKTsKIH0KIAordm9pZCBTZXR0aW5nczo6c2V0QW5pbWF0aW9u
VGltZXJEZWxheShkb3VibGUgdmFsdWUpCit7CisgICAgQW5pbWF0aW9uQ29udHJvbGxlcjo6c2V0
QW5pbWF0aW9uVGltZXJEZWxheSh2YWx1ZSk7Cit9CisKIHZvaWQgU2V0dGluZ3M6OnNldFVzZXNQ
YWdlQ2FjaGUoYm9vbCB1c2VzUGFnZUNhY2hlKQogewogICAgIGlmIChtX3VzZXNQYWdlQ2FjaGUg
PT0gdXNlc1BhZ2VDYWNoZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oIGIv
V2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKaW5kZXggYzIxN2EwZDMxMzcxNjYyY2NhNmQ2OGMxODg0
MGQ3MWE2MTMyOTA0Mi4uN2M3MTczNTI2YTE5Mjg5ODY0ODQ2ZGIwOTEwMTY2NTE1NDI2ZThlMSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKKysrIGIvV2ViQ29yZS9wYWdlL1Nl
dHRpbmdzLmgKQEAgLTIwMCw3ICsyMDAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZvaWQgc2V0RE9NUGFzdGVBbGxvd2VkKGJvb2wpOwogICAgICAgICBib29sIGlzRE9NUGFzdGVB
bGxvd2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc0RPTVBhc3RlQWxsb3dlZDsgfQogICAgICAgICAK
LSAgICAgICAgc3RhdGljIHZvaWQgc2V0TWluRE9NVGltZXJJbnRlcnZhbChkb3VibGUpOyAvLyBJ
bnRlcnZhbCBzcGVjaWZpZWQgaW4gc2Vjb25kcy4KKyAgICAgICAgc3RhdGljIHZvaWQgc2V0TWlu
RE9NVGltZXJJbnRlcnZhbChkb3VibGUpOyAvLyBJbnRlcnZhbCBzcGVjaWZpZWQgaW4gc2Vjb25k
cy4gICAgICAgIAorICAgICAgICBzdGF0aWMgdm9pZCBzZXRBbmltYXRpb25UaW1lckRlbGF5KGRv
dWJsZSk7IC8vIFRpbWVyIGRlbGF5IHNwZWNpZmllZCBpbiBzZWNvbmRzLgogICAgICAgICAKICAg
ICAgICAgdm9pZCBzZXRVc2VzUGFnZUNhY2hlKGJvb2wpOwogICAgICAgICBib29sIHVzZXNQYWdl
Q2FjaGUoKSBjb25zdCB7IHJldHVybiBtX3VzZXNQYWdlQ2FjaGU7IH0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGI1ZDg3ZTYxN2FlMjA1
NDYwYmYxNDFiMWE3MDA5NGQ5YTUzODU1MGUuLjY3YzUxMDc4MmNhNWJlZTkxNTRlNWU2ZmYwMWEz
OGYxMGY0NjhiMzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9u
Q29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250
cm9sbGVyLmNwcApAQCAtNDMsNyArNDMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0
YXRpYyBjb25zdCBkb3VibGUgY0FuaW1hdGlvblRpbWVyRGVsYXkgPSAwLjAyNTsKK2RvdWJsZSBB
bmltYXRpb25Db250cm9sbGVyOjpzX2FuaW1hdGlvblRpbWVyRGVsYXkgPSAwLjAyNTsKIHN0YXRp
YyBjb25zdCBkb3VibGUgY0JlZ2luQW5pbWF0aW9uVXBkYXRlVGltZU5vdFNldCA9IC0xOwogCiBB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUoRnJh
bWUqIGZyYW1lKQpAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OnVwZGF0ZUFuaW1hdGlvblRpbWVyKGJvb2wgY2FsbFNldENoYW5nZWQvKiA9IGZhCiAg
ICAgLy8gSWYgd2Ugd2FudCBzZXJ2aWNlIGltbWVkaWF0ZWx5LCB3ZSBzdGFydCBhIHJlcGVhdGlu
ZyB0aW1lciB0byByZWR1Y2UgdGhlIG92ZXJoZWFkIG9mIHN0YXJ0aW5nCiAgICAgaWYgKG5lZWRz
U2VydmljZSA9PSAwKSB7CiAgICAgICAgIGlmICghbV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgp
IHx8IG1fYW5pbWF0aW9uVGltZXIucmVwZWF0SW50ZXJ2YWwoKSA9PSAwKQotICAgICAgICAgICAg
bV9hbmltYXRpb25UaW1lci5zdGFydFJlcGVhdGluZyhjQW5pbWF0aW9uVGltZXJEZWxheSk7Cisg
ICAgICAgICAgICBtX2FuaW1hdGlvblRpbWVyLnN0YXJ0UmVwZWF0aW5nKEFuaW1hdGlvbkNvbnRy
b2xsZXI6OmFuaW1hdGlvblRpbWVyRGVsYXkoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xs
ZXIuaCBiL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5oCmluZGV4
IDQ1MjhkYWUxNWUxZjEwZGNhOTYzMTQ4ZTRhNWNmMGY0MWUwYmM0NWYuLmUxMDRmMDMwYzJlM2Mx
OTQxMTY0OTg5NDQ2NWM4ZTMwOWIzMWIyZmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQ29udHJvbGxlci5oCkBAIC03MCw4ICs3MCwxMiBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgc3RhdGljIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZEFuaW1hdGlvbk9mUHJvcGVydHkoQ1NT
UHJvcGVydHlJRCk7CiAKKyAgICBzdGF0aWMgZG91YmxlIGFuaW1hdGlvblRpbWVyRGVsYXkoKSB7
IHJldHVybiBzX2FuaW1hdGlvblRpbWVyRGVsYXk7IH0KKyAgICBzdGF0aWMgdm9pZCBzZXRBbmlt
YXRpb25UaW1lckRlbGF5KGRvdWJsZSB2YWx1ZSkgeyBzX2FuaW1hdGlvblRpbWVyRGVsYXkgPSB2
YWx1ZTsgfQorCiBwcml2YXRlOgogICAgIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKiBtX2Rh
dGE7CisgICAgc3RhdGljIGRvdWJsZSBzX2FuaW1hdGlvblRpbWVyRGVsYXk7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMDlhYWM3OTA1ZGNmZDBiZTU1
MjZlMGVlODgxNjhkNTljYWFjMDY5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMCwwICsxLDY1MSBAQAor
LyoKKyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkhhc2hNYXAuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1
ZGUgIlBhc3NSZWZQdHIuaCIKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiVGlt
ZXIuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgZGVmaW5lZChURVhNQVBfT1BFTkdMX0VT
XzIpCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjZWxpZiBQTEFURk9STShNQUMpCisjaW5jbHVk
ZSA8Z2wuaD4KKyNlbHNlCisjaW5jbHVkZSA8R0wvZ2wuaD4KKyNlbmRpZgorCisjaWZuZGVmIFRF
WE1BUF9PUEVOR0xfRVMyCitleHRlcm4gIkMiIHsKKyAgICB2b2lkIGdsVW5pZm9ybTFmKEdMaW50
LCBHTGZsb2F0KTsKKyAgICB2b2lkIGdsVW5pZm9ybTFpKEdMaW50LCBHTGludCk7CisgICAgdm9p
ZCBnbFZlcnRleEF0dHJpYlBvaW50ZXIoR0x1aW50LCBHTGludCwgR0xlbnVtLCBHTGJvb2xlYW4s
IEdMc2l6ZWksIGNvbnN0IEdMdm9pZCAqKTsKKyAgICB2b2lkIGdsVW5pZm9ybTRmKEdMaW50LCBH
TGZsb2F0LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZsb2F0KTsKKyAgICB2b2lkIGdsU2hhZGVyU291
cmNlKEdMdWludCwgR0xzaXplaSwgY29uc3QgY2hhciAqKiwgY29uc3QgR0xpbnQgKik7CisgICAg
R0x1aW50IGdsQ3JlYXRlU2hhZGVyKEdMZW51bSk7CisgICAgdm9pZCBnbFNoYWRlclNvdXJjZShH
THVpbnQsIEdMc2l6ZWksIGNvbnN0IGNoYXIgKiosIGNvbnN0IEdMaW50ICopOworICAgIHZvaWQg
Z2xDb21waWxlU2hhZGVyKEdMdWludCk7CisgICAgdm9pZCBnbERlbGV0ZVNoYWRlcihHTHVpbnQp
OworICAgIHZvaWQgZ2xVbmlmb3JtTWF0cml4NGZ2KEdMaW50LCBHTHNpemVpLCBHTGJvb2xlYW4s
IGNvbnN0IEdMZmxvYXQgKik7CisgICAgR0x1aW50IGdsQ3JlYXRlUHJvZ3JhbSgpOworICAgIHZv
aWQgZ2xBdHRhY2hTaGFkZXIoR0x1aW50LCBHTHVpbnQpOworICAgIHZvaWQgZ2xMaW5rUHJvZ3Jh
bShHTHVpbnQpOworICAgIHZvaWQgZ2xVc2VQcm9ncmFtKEdMdWludCk7CisgICAgdm9pZCBnbERp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQpOworICAgIHZvaWQgZ2xFbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShHTHVpbnQpOworICAgIHZvaWQgZ2xCaW5kRnJhbWVidWZmZXIoR0xlbnVtIHRh
cmdldCwgR0x1aW50IGZyYW1lYnVmZmVyKTsKKyAgICB2b2lkIGdsRGVsZXRlRnJhbWVidWZmZXJz
KEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50ICpmcmFtZWJ1ZmZlcnMpOworICAgIHZvaWQgZ2xHZW5G
cmFtZWJ1ZmZlcnMoR0xzaXplaSBuLCBHTHVpbnQgKmZyYW1lYnVmZmVycyk7CisgICAgdm9pZCBn
bEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBH
TGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwpOworICAgIHZvaWQg
Z2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHTGVudW0gdGFyZ2V0LCBHTGVu
dW0gYXR0YWNobWVudCwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsKKyAgICB2b2lkIGds
QmluZEJ1ZmZlcihHTGVudW0sIEdMdWludCk7CisgICAgdm9pZCBnbERlbGV0ZUJ1ZmZlcnMoR0xz
aXplaSwgY29uc3QgR0x1aW50Kik7CisgICAgdm9pZCBnbEdlbkJ1ZmZlcnMoR0xzaXplaSwgR0x1
aW50Kik7CisgICAgdm9pZCBnbEJ1ZmZlckRhdGEoR0xlbnVtLCBHTHNpemVpcHRyLCBjb25zdCBH
THZvaWQqLCBHTGVudW0pOworICAgIHZvaWQgZ2xCdWZmZXJTdWJEYXRhKEdMZW51bSwgR0xzaXpl
aXB0ciwgR0xzaXplaXB0ciwgY29uc3QgR0x2b2lkKik7CisgICAgdm9pZCBnbEdldFByb2dyYW1J
bmZvTG9nKEdMdWludCBwcm9ncmFtLCBHTHNpemVpLCBHTHNpemVpKiwgR0xjaGFyKik7CisKKyNp
ZiAhUExBVEZPUk0oTUFDKQorICAgIEdMaW50IGdsR2V0VW5pZm9ybUxvY2F0aW9uKEdMdWludCwg
Y29uc3QgR0xjaGFyICopOworICAgIEdMaW50IGdsR2V0QXR0cmliTG9jYXRpb24oR0x1aW50LCBj
b25zdCBHTGNoYXIgKik7CisjZW5kaWYKK30KKyNlbmRpZgorCisKK25hbWVzcGFjZSBXVEYgewor
CisvLyBTdHJpbmdIYXNoIGlzIHRoZSBkZWZhdWx0IGhhc2ggZm9yIFN0cmluZwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRy
YWl0czxXZWJDb3JlOjpGbG9hdFJlY3Q+IDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxXZWJDb3Jl
OjpGbG9hdFJlY3Q+IHsKKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoV2Vi
Q29yZTo6RmxvYXRSZWN0JiBzbG90KSB7IHNsb3QgPSBXZWJDb3JlOjpGbG9hdFJlY3QoKTsgfQor
ICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYg
dmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IFdlYkNvcmU6OkZsb2F0UmVjdCgpOyB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxXZWJDb3JlOjpGbG9hdFJlY3Q+IHsKKyAgICBz
dHJ1Y3QgSGFzaCB7CisgICAgICAgIHN0YXRpYyBpbnQgaGFzaChjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIHJlY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpbnQocmVjdC54KCkg
KiAweDEwKSB8IChpbnQocmVjdC55KCkgKiAweDEwKSA8PCA0KSB8IChpbnQocmVjdC5oZWlnaHQo
KSAqIDB4MTAwKSA8PCA4KSB8IChpbnQocmVjdC53aWR0aCgpICogMHgxMDApIDw8IDIwKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYgYSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBiKSB7IHJldHVybiBhID09IGI7IH0K
KworICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCA9IHRydWU7CisgICAgfTsKK307CisKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitpbmxp
bmUgc3RhdGljIHZvaWQgZGVidWdHTENvbW1hbmQoY29uc3QgY2hhciogY29tbWFuZCwgaW50IGxp
bmUpCit7CisgICAgY29uc3QgR0xlbnVtIGVyciA9IGdsR2V0RXJyb3IoKTsKKyAgICBpZiAoZXJy
KQorICAgICAgICBxRmF0YWwoIltUZXh0dXJlTWFwcGVyIEdMXSBDb21tYW5kIGZhaWxlZDogTGlu
ZSAlZFxuXHRvcGVyYXRpb246ICVzLCBcblx0ZXJyb3I6ICV4XG4iLCBsaW5lLCBjb21tYW5kLCBl
cnIpOworfQorCisjZGVmaW5lIERFQlVHX0dMX0NPTU1BTkRTCisKKyNpZmRlZiBERUJVR19HTF9D
T01NQU5EUworI2RlZmluZSBHTF9DTUQoeCkge3gsIGRlYnVnR0xDb21tYW5kKCN4LCBfX0xJTkVf
Xyk7IH0KKyNlbHNlCisjZGVmaW5lIEdMX0NNRCh4KSB4CisjZW5kaWYKKworc3RydWN0IFRleG1h
cEdMVmJvUmVwb3NpdG9yeSB7CisgICAgdHlwZWRlZiBIYXNoTWFwPEZsb2F0UmVjdCwgR0x1aW50
PiBWYm9NYXA7CisgICAgVmJvTWFwIHZib01hcDsKK307CisKK3N0YXRpYyBUZXhtYXBHTFZib1Jl
cG9zaXRvcnkgZ1Zib1JlcG9zaXRvcnk7CisKK3N0YXRpYyB2b2lkIGxvYWRSZWN0VG9TaGFkZXIo
R0x1aW50IGlkLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgR0x1aW50IHZibzsKKyAg
ICBUZXhtYXBHTFZib1JlcG9zaXRvcnk6OlZib01hcDo6aXRlcmF0b3IgaXQgPSBnVmJvUmVwb3Np
dG9yeS52Ym9NYXAuZmluZChyZWN0KTsKKyAgICBpZiAoaXQgPT0gZ1Zib1JlcG9zaXRvcnkudmJv
TWFwLmVuZCgpKSB7CisgICAgICAgIGNvbnN0IEZsb2F0UXVhZCBxdWFkKHJlY3QpOworICAgICAg
ICBHTF9DTUQoZ2xHZW5CdWZmZXJzKDEsICZ2Ym8pKQorICAgICAgICBHTF9DTUQoZ2xCaW5kQnVm
ZmVyKEdMX0FSUkFZX0JVRkZFUiwgdmJvKSkKKyAgICAgICAgR0xfQ01EKGdsQnVmZmVyRGF0YShH
TF9BUlJBWV9CVUZGRVIsIHNpemVvZihGbG9hdFF1YWQpLCAmcXVhZCwgR0xfU1RBVElDX0RSQVcp
KQorICAgICAgICBnVmJvUmVwb3NpdG9yeS52Ym9NYXAuYWRkKHJlY3QsIHZibyk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgdmJvID0gaXQtPnNlY29uZDsKKyAgICAgICAgR0xfQ01EKGdsQmluZEJ1
ZmZlcihHTF9BUlJBWV9CVUZGRVIsIHZibykpCisgICAgfQorICAgIEdMX0NNRChnbFZlcnRleEF0
dHJpYlBvaW50ZXIoaWQsIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgMCkpCit9CisKK2NsYXNz
IEJpdG1hcFRleHR1cmVHTCA6IHB1YmxpYyBCaXRtYXBUZXh0dXJlIHsKKyAgICBmcmllbmQgY2xh
c3MgVGV4dHVyZU1hcHBlckdMOworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7
CisgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNW
YWxpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCByZXNldChjb25zdCBJbnRTaXplJiwgYm9v
bCBvcGFxdWUpOworICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFp
bnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7Citwcml2YXRl
OgorICAgIEdMdWludCBtX2lkOworICAgIE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7CisgICAgRmxv
YXRTaXplIG1fcmVsYXRpdmVTaXplOworICAgIGJvb2wgbV9vcGFxdWU7CisgICAgSW50U2l6ZSBt
X3RleHR1cmVTaXplOworICAgIFJlZlB0cjxSR0JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcj4gbV9i
dWZmZXI7CisgICAgSW50UmVjdCBtX2RpcnR5UmVjdDsKKyAgICBGbG9hdFJlY3QgbV9zb3VyY2VS
ZWN0OworICAgIEdMdWludCBtX2ZibzsKKyAgICBJbnRTaXplIG1fYWN0dWFsU2l6ZTsKKyAgICBi
b29sIG1fc3VyZmFjZU5lZWRzUmVzZXQ7CisgICAgQml0bWFwVGV4dHVyZUdMKCkKKyAgICAgICAg
OiBtX2lkKDApCisgICAgICAgICwgbV9pbWFnZSgwKQorICAgICAgICAsIG1fb3BhcXVlKGZhbHNl
KQorICAgICAgICAsIG1fZmJvKDApCisgICAgICAgICwgbV9zdXJmYWNlTmVlZHNSZXNldCh0cnVl
KQorICAgIHsKKyAgICB9Cit9OworCitzdGF0aWMgc3RydWN0IFRleG1hcFNoYWRlckluZm8gewor
ICAgIGVudW0gU2hhZGVyUHJvZ3JhbUluZGV4IHsKKyAgICAgICAgU2ltcGxlUHJvZ3JhbSwKKyAg
ICAgICAgT3BhY2l0eVByb2dyYW0sCisgICAgICAgIE9wYWNpdHlBbmRNYXNrUHJvZ3JhbSwKKyAg
ICAgICAgVGFyZ2V0UHJvZ3JhbSwKKyAgICAgICAgTnVtUHJvZ3JhbXMKKyAgICB9OworCisgICAg
ZW51bSBTaGFkZXJWYXJpYWJsZUluZGV4IHsKKyAgICAgICAgSW5NYXRyaXhWYXJpYWJsZSwKKyAg
ICAgICAgSW5UZXhDb29yZFNvdXJjZVZhcmlhYmxlLAorICAgICAgICBJblZlcnRleFZhcmlhYmxl
LAorICAgICAgICBJblRleENvb3JkTWFza1ZhcmlhYmxlLAorCisgICAgICAgIE9wYWNpdHlWYXJp
YWJsZSwKKyAgICAgICAgU291cmNlVGV4dHVyZVZhcmlhYmxlLAorICAgICAgICBNYXNrVGV4dHVy
ZVZhcmlhYmxlLAorICAgICAgICBOdW1WYXJpYWJsZXMKKyAgICB9OworCisgICAgc3RydWN0IFBy
b2dyYW1JbmZvIHsKKyAgICAgICAgR0x1aW50IGlkOworICAgICAgICBHTGludCB2YXJzW051bVZh
cmlhYmxlc107CisgICAgfTsKKworICAgIEdMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihTaGFkZXJQ
cm9ncmFtSW5kZXggcHJvZywgU2hhZGVyVmFyaWFibGVJbmRleCB2YXIsIGNvbnN0IGNoYXIqIG5h
bWUpCisgICAgeworICAgICAgICByZXR1cm4gcHJvZ3JhbXNbcHJvZ10udmFyc1t2YXJdID0gZ2xH
ZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbXNbcHJvZ10uaWQsIG5hbWUpOworICAgIH0KKworICAg
IEdMaW50IGdldEF0dHJpYkxvY2F0aW9uKFNoYWRlclByb2dyYW1JbmRleCBwcm9nLCBTaGFkZXJW
YXJpYWJsZUluZGV4IHZhciwgY29uc3QgY2hhciogbmFtZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBwcm9ncmFtc1twcm9nXS52YXJzW3Zhcl0gPSBnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1z
W3Byb2ddLmlkLCBuYW1lKTsKKyAgICB9CisKKyAgICB2b2lkIGNyZWF0ZVNoYWRlclByb2dyYW0o
Y29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRl
clNvdXJjZSwgU2hhZGVyUHJvZ3JhbUluZGV4IGluZGV4KQorICAgIHsKKyAgICAgICAgR0x1aW50
IHZlcnRleFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIpOworICAgICAg
ICBHTHVpbnQgZnJhZ21lbnRTaGFkZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9GUkFHTUVOVF9TSEFE
RVIpOworICAgICAgICBHTF9DTUQoZ2xTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAmdmVy
dGV4U2hhZGVyU291cmNlLCAwKSkKKyAgICAgICAgR0xfQ01EKGdsU2hhZGVyU291cmNlKGZyYWdt
ZW50U2hhZGVyLCAxLCAmZnJhZ21lbnRTaGFkZXJTb3VyY2UsIDApKQorICAgICAgICBHTHVpbnQg
cHJvZ3JhbUlEID0gZ2xDcmVhdGVQcm9ncmFtKCk7CisgICAgICAgIEdMX0NNRChnbENvbXBpbGVT
aGFkZXIodmVydGV4U2hhZGVyKSkKKyAgICAgICAgR0xfQ01EKGdsQ29tcGlsZVNoYWRlcihmcmFn
bWVudFNoYWRlcikpCisgICAgICAgIEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIHZl
cnRleFNoYWRlcikpCisgICAgICAgIEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZy
YWdtZW50U2hhZGVyKSkKKyAgICAgICAgR0xfQ01EKGdsTGlua1Byb2dyYW0ocHJvZ3JhbUlEKSkK
KyAgICAgICAgcHJvZ3JhbXNbaW5kZXhdLmlkID0gcHJvZ3JhbUlEOworICAgICAgICBjaGFyIGlu
Zm9Mb2dbMTAyNF07CisgICAgICAgIGludCBsZW47CisgICAgICAgIGdsR2V0UHJvZ3JhbUluZm9M
b2cocHJvZ3JhbUlELCAxMDI0LCAmbGVuLCBpbmZvTG9nKTsKKyAgICAgICAgcHJpbnRmKCIlc1xu
IiwgaW5mb0xvZyk7CisgICAgfQorCisgICAgUHJvZ3JhbUluZm8gcHJvZ3JhbXNbTnVtUHJvZ3Jh
bXNdOworCit9IGdTaGFkZXJJbmZvOworCisjZGVmaW5lIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9M
T0NBVElPTih0eXBlLCBwcm9nLCB2YXIpIGlmIChnU2hhZGVySW5mby5nZXQjI3R5cGUjI0xvY2F0
aW9uKFRleG1hcFNoYWRlckluZm86OnByb2cjI1Byb2dyYW0sIFRleG1hcFNoYWRlckluZm86OnZh
ciMjVmFyaWFibGUsICN2YXIpIDwgMCkgcVdhcm5pbmcoIkNvdWxkbid0IGZpbmQgdmFyaWFibGUg
IiN2YXIiIGluIHByb2dyYW0gIiNwcm9nKTsKKyNkZWZpbmUgVEVYTUFQX0JVSUxEX1NIQURFUihw
cm9ncmFtKSBnU2hhZGVySW5mby5jcmVhdGVTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJj
ZSMjcHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXJTb3VyY2UjI3Byb2dyYW0sIFRleG1hcFNoYWRlcklu
Zm86OnByb2dyYW0jI1Byb2dyYW0pOworCitUZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJH
TChHcmFwaGljc0NvbnRleHQqIGdjKQorICAgIDogVGV4dHVyZU1hcHBlcihnYykKKyAgICAsIG1f
Y3VyUHJvZ3JhbShUZXhtYXBTaGFkZXJJbmZvOjpUYXJnZXRQcm9ncmFtKQoreworICAgIHN0YXRp
YyBib29sIHNoYWRlcnNDb21waWxlZCA9IGZhbHNlOworICAgIGlmIChzaGFkZXJzQ29tcGlsZWQp
CisgICAgICAgIHJldHVybjsKKyAgICBzaGFkZXJzQ29tcGlsZWQgPSB0cnVlOworI2lmbmRlZiBU
RVhNQVBfT1BFTkdMX0VTMgorI2RlZmluZSBPRVMyX1BFUkNJU0lPTl9ERUZJTklUSU9OUyBcCisg
ICAgIiNkZWZpbmUgbG93cFxuI2RlZmluZSBoaWdocFxuIgorI2Vsc2UKKyNkZWZpbmUgT0VTMl9Q
RVJDSVNJT05fREVGSU5JVElPTlMKKyNlbmRpZgorCisgICAgY29uc3QgY2hhciogZnJhZ21lbnRT
aGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9CisgICAgICAgICAgICBPRVMyX1BFUkNJU0lPTl9E
RUZJTklUSU9OUworIiAgICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIFNvdXJjZVRleHR1
cmUsIE1hc2tUZXh0dXJlOyAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAg
ICAgdW5pZm9ybSBsb3dwIGZsb2F0IE9wYWNpdHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0
VGV4Q29vcmRTb3VyY2UsIE91dFRleENvb3JkTWFzazsgICAgICAgICAgICAgIFxuIgorIiAgICAg
ICAgICAgICAgIHZvaWQgbWFpbih2b2lkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIK
KyIgICAgICAgICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKFNvdXJjZVRl
eHR1cmUsIE91dFRleENvb3JkU291cmNlKTsgIFxuIgorIiAgICAgICAgICAgICAgICAgICBsb3dw
IHZlYzQgbWFza0NvbG9yID0gdGV4dHVyZTJEKE1hc2tUZXh0dXJlLCBPdXRUZXhDb29yZE1hc2sp
OyAgXG4iCisiICAgICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgbyA9IE9wYWNpdHkgKiBtYXNr
Q29sb3IuYTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICAg
ICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBvLCBjb2xvci5hICogbyk7ICAgICAg
ICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CisKKyAgICBjb25zdCBj
aGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9CisgICAgICAgICAgICBPRVMy
X1BFUkNJU0lPTl9ERUZJTklUSU9OUworIiAgICAgICAgICAgICAgIHVuaWZvcm0gbWF0NCBJbk1h
dHJpeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAg
ICAgICAgIGF0dHJpYnV0ZSB2ZWM0IEluVGV4Q29vcmRTb3VyY2UsIEluVGV4Q29vcmRNYXNrLCBJ
blZlcnRleDsgICAgICBcbiIKKyIgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0
VGV4Q29vcmRTb3VyY2UsIE91dFRleENvb3JkTWFzazsgICAgICBcbiIKKyIgICAgICAgICAgICAg
ICB2b2lkIG1haW4odm9pZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcbiIKKyIgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICAgICAgT3V0
VGV4Q29vcmRTb3VyY2UgPSB2ZWMyKEluVGV4Q29vcmRTb3VyY2UpOyAgICAgICAgICAgICAgIFxu
IgorIiAgICAgICAgICAgICAgICAgICBPdXRUZXhDb29yZE1hc2sgPSB2ZWMyKEluVGV4Q29vcmRN
YXNrKTsgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgIGdsX1Bvc2l0
aW9uID0gSW5NYXRyaXggKiBJblZlcnRleDsgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAg
ICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXG4iOworCisgICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3Vy
Y2VPcGFjaXR5ID0KKyAgICAgICAgICAgIE9FUzJfUEVSQ0lTSU9OX0RFRklOSVRJT05TCisiICAg
ICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgU291cmNlVGV4dHVyZTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3Ag
ZmxvYXQgT3BhY2l0eTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxu
IgorIiAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiBPdXRUZXhDb29yZFNvdXJjZTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgdm9pZCBt
YWluKHZvaWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcbiIKKyIgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAg
ICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQoU291cmNlVGV4dHVyZSwgT3V0VGV4Q29v
cmRTb3VyY2UpOyAgXG4iCisiICAgICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQo
Y29sb3IucmdiICogT3BhY2l0eSwgY29sb3IuYSAqIE9wYWNpdHkpOyAgICBcbiIKKyIgICAgICAg
ICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFxuIjsKKworICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNv
dXJjZU9wYWNpdHkgPQorICAgICAgICAgICAgT0VTMl9QRVJDSVNJT05fREVGSU5JVElPTlMKKyIg
ICAgICAgICAgICAgICB1bmlmb3JtIG1hdDQgSW5NYXRyaXg7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgSW5UZXhDb29yZFNv
dXJjZSwgSW5WZXJ0ZXg7ICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgdmFyeWluZyBo
aWdocCB2ZWMyIE91dFRleENvb3JkU291cmNlOyAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAg
ICAgICAgIHZvaWQgbWFpbih2b2lkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcbiIKKyIgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgIE91dFRleENvb3JkU291
cmNlID0gdmVjMihJblRleENvb3JkU291cmNlKTsgICAgICAgXG4iCisiICAgICAgICAgICAgICAg
ICAgIGdsX1Bvc2l0aW9uID0gSW5NYXRyaXggKiBJblZlcnRleDsgICAgICAgICAgICAgIFxuIgor
IiAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcbiI7CisKKyAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVNp
bXBsZSA9CisgICAgICAgICAgICBPRVMyX1BFUkNJU0lPTl9ERUZJTklUSU9OUworIiAgICAgICAg
ICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIFNvdXJjZVRleHR1cmU7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAg
dmVjMiBPdXRUZXhDb29yZFNvdXJjZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFxuIgorIiAgICAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAg
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICBsb3dwIHZlYzQgY29sb3Ig
PSB0ZXh0dXJlMkQoU291cmNlVGV4dHVyZSwgT3V0VGV4Q29vcmRTb3VyY2UpOyAgICAgIFxuIgor
IiAgICAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFxuIjsKKworICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNpbXBs
ZSA9IHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHk7CisKKyAgICBjb25zdCBjaGFyKiBmcmFnbWVu
dFNoYWRlclNvdXJjZVRhcmdldCA9CisgICAgICAgICAgICBPRVMyX1BFUkNJU0lPTl9ERUZJTklU
SU9OUworIiAgICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIFNvdXJjZVRleHR1cmU7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAg
ICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgT3BhY2l0eTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgdmFyeWluZyBoaWdo
cCB2ZWMyIE91dFRleENvb3JkU291cmNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAg
ICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgIGxv
d3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRChTb3VyY2VUZXh0dXJlLCBPdXRUZXhDb29yZFNvdXJj
ZSk7ICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0
KGNvbG9yLmJnciAqIE9wYWNpdHksIGNvbG9yLmEgKiBPcGFjaXR5KTsgICAgICAgICAgICBcbiIK
KyIgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOworCisgICAgY29uc3QgY2hh
ciogdmVydGV4U2hhZGVyU291cmNlVGFyZ2V0ID0KKyAgICAgICAgICAgIE9FUzJfUEVSQ0lTSU9O
X0RFRklOSVRJT05TCisiICAgICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgSW5UZXhDb29yZFNv
dXJjZSwgSW5WZXJ0ZXg7ICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgdmFyeWluZyBo
aWdocCB2ZWMyIE91dFRleENvb3JkU291cmNlOyAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAg
ICAgICAgIHZvaWQgbWFpbih2b2lkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcbiIKKyIgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgIE91dFRleENvb3JkU291
cmNlID0gdmVjMihJblRleENvb3JkU291cmNlKTsgICAgIFxuIgorIiAgICAgICAgICAgICAgICAg
ICBnbF9Qb3NpdGlvbiA9IEluVmVydGV4OyAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIg
ICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXG4iOworCisgICAgVEVYTUFQX0JVSUxEX1NIQURFUihTaW1wbGUpCisgICAgVEVY
TUFQX0JVSUxEX1NIQURFUihPcGFjaXR5KQorICAgIFRFWE1BUF9CVUlMRF9TSEFERVIoT3BhY2l0
eUFuZE1hc2spCisgICAgVEVYTUFQX0JVSUxEX1NIQURFUihUYXJnZXQpCisKKyAgICBURVhNQVBf
R0VUX1NIQURFUl9WQVJfTE9DQVRJT04oQXR0cmliLCBPcGFjaXR5QW5kTWFzaywgSW5WZXJ0ZXgp
CisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKEF0dHJpYiwgT3BhY2l0eUFuZE1h
c2ssIEluVGV4Q29vcmRTb3VyY2UpCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9O
KEF0dHJpYiwgT3BhY2l0eUFuZE1hc2ssIEluVGV4Q29vcmRNYXNrKQorICAgIFRFWE1BUF9HRVRf
U0hBREVSX1ZBUl9MT0NBVElPTihVbmlmb3JtLCBPcGFjaXR5QW5kTWFzaywgSW5NYXRyaXgpCisg
ICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKFVuaWZvcm0sIE9wYWNpdHlBbmRNYXNr
LCBTb3VyY2VUZXh0dXJlKQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihVbmlm
b3JtLCBPcGFjaXR5QW5kTWFzaywgTWFza1RleHR1cmUpCisgICAgVEVYTUFQX0dFVF9TSEFERVJf
VkFSX0xPQ0FUSU9OKFVuaWZvcm0sIE9wYWNpdHlBbmRNYXNrLCBPcGFjaXR5KQorCisgICAgVEVY
TUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKEF0dHJpYiwgT3BhY2l0eSwgSW5WZXJ0ZXgpCisg
ICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKEF0dHJpYiwgT3BhY2l0eSwgSW5UZXhD
b29yZFNvdXJjZSkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oVW5pZm9ybSwg
T3BhY2l0eSwgSW5NYXRyaXgpCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKFVu
aWZvcm0sIE9wYWNpdHksIFNvdXJjZVRleHR1cmUpCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFS
X0xPQ0FUSU9OKFVuaWZvcm0sIE9wYWNpdHksIE9wYWNpdHkpCisKKyAgICBURVhNQVBfR0VUX1NI
QURFUl9WQVJfTE9DQVRJT04oQXR0cmliLCBTaW1wbGUsIEluVmVydGV4KQorICAgIFRFWE1BUF9H
RVRfU0hBREVSX1ZBUl9MT0NBVElPTihBdHRyaWIsIFNpbXBsZSwgSW5UZXhDb29yZFNvdXJjZSkK
KyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oVW5pZm9ybSwgU2ltcGxlLCBJbk1h
dHJpeCkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oVW5pZm9ybSwgU2ltcGxl
LCBTb3VyY2VUZXh0dXJlKQorCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKEF0
dHJpYiwgVGFyZ2V0LCBJblRleENvb3JkU291cmNlKQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZB
Ul9MT0NBVElPTihBdHRyaWIsIFRhcmdldCwgSW5WZXJ0ZXgpCisgICAgVEVYTUFQX0dFVF9TSEFE
RVJfVkFSX0xPQ0FUSU9OKFVuaWZvcm0sIFRhcmdldCwgU291cmNlVGV4dHVyZSkKKyAgICBURVhN
QVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oVW5pZm9ybSwgVGFyZ2V0LCBPcGFjaXR5KQorfQor
Cit2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYg
dGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG12TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNr
VGV4dHVyZSkKK3sKKyAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wmIHRleHR1cmVHTCA9IHN0YXRp
Y19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KHRleHR1cmUpOworICAgIGlmICghdGV4dHVy
ZS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFRleG1hcFNoYWRlckluZm86OlNo
YWRlclByb2dyYW1JbmRleCBwcm9ncmFtOworICAgIGlmIChtYXNrVGV4dHVyZSkKKyAgICAgICAg
cHJvZ3JhbSA9IFRleG1hcFNoYWRlckluZm86Ok9wYWNpdHlBbmRNYXNrUHJvZ3JhbTsKKyAgICBl
bHNlIGlmIChvcGFjaXR5IDwgMC45OSkKKyAgICAgICAgcHJvZ3JhbSA9IFRleG1hcFNoYWRlcklu
Zm86Ok9wYWNpdHlQcm9ncmFtOworICAgIGVsc2UKKyAgICAgICAgcHJvZ3JhbSA9IFRleG1hcFNo
YWRlckluZm86OlNpbXBsZVByb2dyYW07CisgICAgY29uc3QgVGV4bWFwU2hhZGVySW5mbzo6UHJv
Z3JhbUluZm8mIHByb2dyYW1JbmZvID0gZ1NoYWRlckluZm8ucHJvZ3JhbXNbcHJvZ3JhbV07Cisg
ICAgaWYgKG1fY3VyUHJvZ3JhbSAhPSBwcm9ncmFtKSB7CisgICAgICAgIEdMX0NNRChnbFVzZVBy
b2dyYW0ocHJvZ3JhbUluZm8uaWQpKQorICAgICAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkoZ1NoYWRlckluZm8ucHJvZ3JhbXNbbV9jdXJQcm9ncmFtXS52YXJzW1RleG1hcFNo
YWRlckluZm86OkluVGV4Q29vcmRTb3VyY2VWYXJpYWJsZV0pKQorICAgICAgICBHTF9DTUQoZ2xE
aXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZ1NoYWRlckluZm8ucHJvZ3JhbXNbbV9jdXJQcm9ncmFt
XS52YXJzW1RleG1hcFNoYWRlckluZm86OkluVmVydGV4VmFyaWFibGVdKSkKKyAgICAgICAgbV9j
dXJQcm9ncmFtID0gcHJvZ3JhbTsKKyAgICAgICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmli
QXJyYXkocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblRleENvb3JkU291cmNl
VmFyaWFibGVdKSkKKyAgICAgICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJv
Z3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblZlcnRleFZhcmlhYmxlXSkpCisgICAg
fQorCisgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKSkKKyAgICBHTF9DTUQoZ2xE
aXNhYmxlKEdMX1NURU5DSUxfVEVTVCkpCisKKyAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdM
X1RFWFRVUkUwKSkKKyAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0
dXJlR0wubV9pZCkpCisgICAgbG9hZFJlY3RUb1NoYWRlcihwcm9ncmFtSW5mby52YXJzW1RleG1h
cFNoYWRlckluZm86OkluVmVydGV4VmFyaWFibGVdLCB0YXJnZXRSZWN0KTsKKyAgICBsb2FkUmVj
dFRvU2hhZGVyKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5UZXhDb29yZFNv
dXJjZVZhcmlhYmxlXSwgdGV4dHVyZUdMLm1fc291cmNlUmVjdCk7CisgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgobV9wcm9qZWN0aW9uTWF0cml4
KS5tdWx0TGVmdChtdk1hdHJpeCk7CisgICAgY29uc3QgR0xmbG9hdCBtNFtdID0geworICAgICAg
ICBtYXRyaXgubTExKCksIG1hdHJpeC5tMTIoKSwgbWF0cml4Lm0xMygpLCBtYXRyaXgubTE0KCks
CisgICAgICAgIG1hdHJpeC5tMjEoKSwgbWF0cml4Lm0yMigpLCBtYXRyaXgubTIzKCksIG1hdHJp
eC5tMjQoKSwKKyAgICAgICAgbWF0cml4Lm0zMSgpLCBtYXRyaXgubTMyKCksIG1hdHJpeC5tMzMo
KSwgbWF0cml4Lm0zNCgpLAorICAgICAgICBtYXRyaXgubTQxKCksIG1hdHJpeC5tNDIoKSwgbWF0
cml4Lm00MygpLCBtYXRyaXgubTQ0KCkKKyAgICB9OworICAgIGdsVW5pZm9ybU1hdHJpeDRmdihw
cm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OkluTWF0cml4VmFyaWFibGVdLCAxLCBH
TF9GQUxTRSwgbTQpOworICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtSW5mby52YXJzW1Rl
eG1hcFNoYWRlckluZm86OlNvdXJjZVRleHR1cmVWYXJpYWJsZV0sIDApKQorCisgICAgaWYgKG1h
c2tUZXh0dXJlICYmIG1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgY29uc3QgQml0
bWFwVGV4dHVyZUdMKiBtYXNrVGV4dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4
dHVyZUdMKj4obWFza1RleHR1cmUpOworICAgICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdM
X1RFWFRVUkUxKSkKKyAgICAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
bWFza1RleHR1cmVHTC0+bV9pZCkpCisgICAgICAgIGxvYWRSZWN0VG9TaGFkZXIocHJvZ3JhbUlu
Zm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblRleENvb3JkTWFza1ZhcmlhYmxlXSwgbWFza1Rl
eHR1cmVHTC0+bV9zb3VyY2VSZWN0KTsKKyAgICAgICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0
cmliQXJyYXkocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblRleENvb3JkTWFz
a1ZhcmlhYmxlXSkpCisgICAgICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtSW5mby52YXJz
W1RleG1hcFNoYWRlckluZm86Ok1hc2tUZXh0dXJlVmFyaWFibGVdLCAxKSkKKyAgICAgICAgR0xf
Q01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpCisgICAgfQorCisgICAgaWYgKHByb2dy
YW0gIT0gVGV4bWFwU2hhZGVySW5mbzo6U2ltcGxlUHJvZ3JhbSkKKyAgICAgICAgR0xfQ01EKGds
VW5pZm9ybTFmKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6T3BhY2l0eVZhcmlh
YmxlXSwgb3BhY2l0eSkpCisKKyAgICBpZiAodGV4dHVyZUdMLm1fb3BhcXVlICYmIG9wYWNpdHkg
PiAwLjk5ICYmICFtYXNrVGV4dHVyZSkKKyAgICAgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9CTEVO
RCkpCisgICAgZWxzZSB7CisgICAgICAgIEdMX0NNRChnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09O
RV9NSU5VU19TUkNfQUxQSEEpKQorICAgICAgICBHTF9DTUQoZ2xFbmFibGUoR0xfQkxFTkQpKQor
ICAgIH0KKworICAgIEdMX0NNRChnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KSkK
K30KKworCitjb25zdCBjaGFyKiBUZXh0dXJlTWFwcGVyR0w6OnR5cGUoKSBjb25zdAoreworICAg
IHJldHVybiAiT3BlbkdMIjsKK30KKwordm9pZCBCaXRtYXBUZXh0dXJlR0w6OnJlc2V0KGNvbnN0
IEludFNpemUmIG5ld1NpemUsIGJvb2wgb3BhcXVlKQoreworICAgIEJpdG1hcFRleHR1cmU6OnJl
c2V0KG5ld1NpemUsIG9wYXF1ZSk7CisgICAgbV9pbWFnZSA9IDA7CisgICAgSW50U2l6ZSBuZXdU
ZXh0dXJlU2l6ZSA9IG5wb3QobmV3U2l6ZSk7CisgICAgYm9vbCBqdXN0Q3JlYXRlZCA9IGZhbHNl
OworICAgIGlmICghbV9pZCkgeworICAgICAgICBHTF9DTUQoZ2xHZW5UZXh0dXJlcygxLCAmbV9p
ZCkpCisgICAgICAgIGp1c3RDcmVhdGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoanVzdENy
ZWF0ZWQgfHwgbmV3VGV4dHVyZVNpemUud2lkdGgoKSA+IG1fdGV4dHVyZVNpemUud2lkdGgoKSB8
fCBuZXdUZXh0dXJlU2l6ZS5oZWlnaHQoKSA+IG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpIHsKKyAg
ICAgICAgcHJpbnRmKCJbVGV4dHVyZU1hcHBlckdMXSBDcmVhdGluZyB0ZXh0dXJlLiBJRDogJWQ7
IFNpemU6ICVkLCVkXG4iLCBtX2lkLCBuZXdUZXh0dXJlU2l6ZS53aWR0aCgpLCBuZXdUZXh0dXJl
U2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fdGV4dHVyZVNpemUgPSBuZXdUZXh0dXJlU2l6ZTsK
KyAgICAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pZCkpCisgICAg
ICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5f
RklMVEVSLCBHTF9MSU5FQVIpKQorICAgICAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKSkKKyAgICAgICAgR0xf
Q01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xf
Q0xBTVBfVE9fRURHRSkpCisgICAgICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpKQorICAgICAgICBHTF9D
TUQoZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIG1fdGV4dHVyZVNpemUu
d2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURf
QllURSwgMCkpCisgICAgfQorICAgIG1fYWN0dWFsU2l6ZSA9IG5ld1NpemU7CisgICAgbV9yZWxh
dGl2ZVNpemUgPSBGbG9hdFNpemUoZmxvYXQobmV3U2l6ZS53aWR0aCgpKSAvIG1fdGV4dHVyZVNp
emUud2lkdGgoKSwgZmxvYXQobmV3U2l6ZS5oZWlnaHQoKSkgLyBtX3RleHR1cmVTaXplLmhlaWdo
dCgpKTsKKyAgICBtX3NvdXJjZVJlY3QgPSBGbG9hdFJlY3QoMCwgMCwgbV9yZWxhdGl2ZVNpemUu
d2lkdGgoKSwgbV9yZWxhdGl2ZVNpemUuaGVpZ2h0KCkpOworICAgIG1fb3BhcXVlID0gb3BhcXVl
OworICAgIG1fc3VyZmFjZU5lZWRzUmVzZXQgPSB0cnVlOworfQorCitQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dCogQml0bWFwVGV4dHVyZUdMOjpiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5
UmVjdCkKKworeworICAgIG1fYnVmZmVyID0gUkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI6OmNy
ZWF0ZSgpOworICAgIG1fZGlydHlSZWN0ID0gZGlydHlSZWN0OworICAgIHJldHVybiBtX2J1ZmZl
ci0+YmVnaW5QYWludChkaXJ0eVJlY3QsIG1fb3BhcXVlKTsKK30KKwordm9pZCBCaXRtYXBUZXh0
dXJlR0w6OmVuZFBhaW50KCkKK3sKKyAgICBpZiAoIW1fYnVmZmVyKQorICAgICAgICByZXR1cm47
CisgICAgbV9idWZmZXItPmVuZFBhaW50KCk7CisgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgbV9pZCkpCisgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJF
XzJELCAwLCBtX2RpcnR5UmVjdC54KCksIG1fZGlydHlSZWN0LnkoKSwgbV9kaXJ0eVJlY3Qud2lk
dGgoKSwgbV9kaXJ0eVJlY3QuaGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIG1f
YnVmZmVyLT5kYXRhKCkpKQorICAgIG1fYnVmZmVyLmNsZWFyKCk7Cit9CisKK3N0cnVjdCBUZXht
YXBHTFNoYWRlclRleHR1cmVzIHsKKyAgICBzdHJ1Y3QgRW50cnkgeworICAgICAgICBHTHVpbnQg
dGV4dHVyZTsKKyAgICAgICAgaW50IHJlZkNvdW50OworICAgIH07CisgICAgSGFzaE1hcDxOYXRp
dmVJbWFnZVB0ciwgRW50cnk+IGltYWdlVG9UZXh0dXJlOworICAgIEdMdWludCBmaW5kT3JDcmVh
dGUoTmF0aXZlSW1hZ2VQdHIgaW1hZ2UsIGJvb2wmIGZvdW5kKQorICAgIHsKKyAgICAgICAgSGFz
aE1hcDxOYXRpdmVJbWFnZVB0ciwgRW50cnk+OjppdGVyYXRvciBpdCA9IGltYWdlVG9UZXh0dXJl
LmZpbmQoaW1hZ2UpOworICAgICAgICBmb3VuZCA9IGZhbHNlOworICAgICAgICBpZiAoaXQgIT0g
aW1hZ2VUb1RleHR1cmUuZW5kKCkpIHsKKyAgICAgICAgICAgIGl0LT5zZWNvbmQucmVmQ291bnQr
KzsKKyAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBpdC0+c2Vj
b25kLnRleHR1cmU7CisgICAgICAgIH0KKyAgICAgICAgRW50cnkgZW50cnk7CisgICAgICAgIEdM
X0NNRChnbEdlblRleHR1cmVzKDEsICZlbnRyeS50ZXh0dXJlKSk7CisgICAgICAgIGVudHJ5LnJl
ZkNvdW50ID0gMTsKKyAgICAgICAgaW1hZ2VUb1RleHR1cmUuYWRkKGltYWdlLCBlbnRyeSk7Cisg
ICAgICAgIHJldHVybiBlbnRyeS50ZXh0dXJlOworICAgIH0KKworICAgIGJvb2wgZGVyZWYoTmF0
aXZlSW1hZ2VQdHIgaW1hZ2UpCisgICAgeworICAgICAgICBIYXNoTWFwPE5hdGl2ZUltYWdlUHRy
LCBFbnRyeT46Oml0ZXJhdG9yIGl0ID0gaW1hZ2VUb1RleHR1cmUuZmluZChpbWFnZSk7CisgICAg
ICAgIGlmIChpdCAhPSBpbWFnZVRvVGV4dHVyZS5lbmQoKSkgeworICAgICAgICAgICAgaWYgKGl0
LT5zZWNvbmQucmVmQ291bnQgPCAyKSB7CisgICAgICAgICAgICAgICAgaW1hZ2VUb1RleHR1cmUu
cmVtb3ZlKGl0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKworc3RhdGljIFRl
eG1hcEdMU2hhZGVyVGV4dHVyZXMgZ1RleHR1cmVSZXBvc2l0b3J5OworCit2b2lkIEJpdG1hcFRl
eHR1cmVHTDo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKK3sKKyAgICBOYXRpdmVJ
bWFnZVB0ciBuYXRpdmVJbWFnZSA9IGltYWdlID8gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCkgOiAwOworICAgIGlmICghaW1hZ2UgfHwgIW5hdGl2ZUltYWdlKSB7CisgICAgICAg
IGlmIChtX2ltYWdlKQorICAgICAgICAgICAgZGVzdHJveSgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKG5hdGl2ZUltYWdlID09IG1faW1hZ2UpCisgICAgICAgIHJldHVybjsK
KyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgR0x1aW50IG5ld1RleHR1cmVJRCA9IGdUZXh0
dXJlUmVwb3NpdG9yeS5maW5kT3JDcmVhdGUobmF0aXZlSW1hZ2UsIGZvdW5kKTsKKyAgICBpZiAo
bmV3VGV4dHVyZUlEICE9IG1faWQpIHsKKyAgICAgICAgZGVzdHJveSgpOworICAgICAgICBtX2lk
ID0gbmV3VGV4dHVyZUlEOworICAgICAgICByZXNldChpbWFnZS0+c2l6ZSgpLCBmYWxzZSk7Cisg
ICAgICAgIG1faW1hZ2UgPSBuYXRpdmVJbWFnZTsKKyAgICAgICAgcHJpbnRmKCJbVGV4dHVyZU1h
cHBlckdMXSBDcmVhdGluZyB0ZXh0dXJlIGZyb20gZGlyZWN0bHkgY29tcG9zaXRlZCBpbWFnZS4g
SUQ6ICVkOyBTaXplOiAlZCwlZFxuIiwgbV9pZCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWln
aHQoKSk7CisgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4
dCBnYyhiZWdpblBhaW50KEludFJlY3QoMCwgMCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3Rl
eHR1cmVTaXplLmhlaWdodCgpKSkpOworICAgICAgICAgICAgZ2MuZHJhd0ltYWdlKGltYWdlLCBE
ZXZpY2VDb2xvclNwYWNlLCBJbnRQb2ludCgwLCAwKSwgQ29tcG9zaXRlQ29weSk7CisgICAgICAg
ICAgICBlbmRQYWludCgpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEJpdG1hcFRleHR1
cmVHTDo6ZGVzdHJveSgpCit7CisgICAgaWYgKG1faWQgJiYgKCFtX2ltYWdlIHx8ICFnVGV4dHVy
ZVJlcG9zaXRvcnkuZGVyZWYobV9pbWFnZSkpKSB7CisgICAgICAgIEdMX0NNRChnbERlbGV0ZVRl
eHR1cmVzKDEsICZtX2lkKSkKKyAgICAgICAgcHJpbnRmKCJbVGV4dHVyZU1hcHBlck9wZW5HTF0g
RGVsZXRpbmcgdGV4dHVyZSAlZCwgc2l6ZTogJWQsJWRcbiIsIG1faWQsIG1fdGV4dHVyZVNpemUu
d2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CisgICAgfQorICAgIGlmIChtX2ZibykK
KyAgICAgICAgR0xfQ01EKGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2ZibykpCisKKyAgICBt
X2ZibyA9IDA7CisgICAgbV9pZCA9IDA7CisgICAgbV90ZXh0dXJlU2l6ZSA9IEludFNpemUoKTsK
KyAgICBtX3JlbGF0aXZlU2l6ZSA9IEZsb2F0U2l6ZSgxLCAxKTsKK30KK2Jvb2wgQml0bWFwVGV4
dHVyZUdMOjppc1ZhbGlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pZDsKK30KKworSW50U2l6
ZSBCaXRtYXBUZXh0dXJlR0w6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3RleHR1cmVT
aXplOworfQorCitzdGF0aWMgaW5saW5lIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNyZWF0ZVByb2pl
Y3Rpb25NYXRyaXgoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBmbGlwKQoreworICAgIHJldHVy
biBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgyLjAgLyBmbG9hdChzaXplLndpZHRoKCkpLCAwLCAwLCAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAoZmxpcCA/IC0yLjAgOiAyLjAp
IC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSksIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsIDAsIC0wLjAwMDAwMSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLTEsIGZsaXAgPyAxIDogLTEsIDAsIDEpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6
Y2xlYW51cCgpCisgICAgeworICAgIGZvciAoVGV4bWFwR0xWYm9SZXBvc2l0b3J5OjpWYm9NYXA6
Oml0ZXJhdG9yIGl0ID0gZ1Zib1JlcG9zaXRvcnkudmJvTWFwLmJlZ2luKCk7IGl0ICE9IGdWYm9S
ZXBvc2l0b3J5LnZib01hcC5lbmQoKTsgKytpdCkgeworICAgICAgICBwcmludGYoIltUZXh0dXJl
TWFwcGVyR0xdIERlbGV0aW5nIHZibyAlZCwgJWYgJWYgJWYgJWZcbiIsIGl0LT5zZWNvbmQsIGl0
LT5maXJzdC54KCksIGl0LT5maXJzdC55KCksIGl0LT5maXJzdC53aWR0aCgpLCBpdC0+Zmlyc3Qu
aGVpZ2h0KCkpOworICAgICAgICBHTF9DTUQoZ2xEZWxldGVCdWZmZXJzKDEsICZpdC0+c2Vjb25k
KSkKKyAgICB9CisgICAgZ1Zib1JlcG9zaXRvcnkudmJvTWFwLmNsZWFyKCk7Cit9CisKKwordm9p
ZCBUZXh0dXJlTWFwcGVyR0w6OmJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUgKnN1cmZhY2VQb2lu
dGVyKQoreworICAgIEJpdG1hcFRleHR1cmVHTCogc3VyZmFjZSA9IHN0YXRpY19jYXN0PEJpdG1h
cFRleHR1cmVHTCo+KHN1cmZhY2VQb2ludGVyKTsKKworICAgIGlmICghc3VyZmFjZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IGNyZWF0ZVByb2pl
Y3Rpb25NYXRyaXgoc3VyZmFjZS0+c2l6ZSgpLCBmYWxzZSk7CisgICAgbWF0cml4LnRyYW5zbGF0
ZSgtc3VyZmFjZS0+b2Zmc2V0KCkueCgpLCAtc3VyZmFjZS0+b2Zmc2V0KCkueSgpKTsKKworICAg
IGlmIChzdXJmYWNlLT5tX3N1cmZhY2VOZWVkc1Jlc2V0IHx8ICFzdXJmYWNlLT5tX2Zibykgewor
ICAgICAgICBpZiAoIXN1cmZhY2UtPm1fZmJvKQorICAgICAgICAgICAgR0xfQ01EKGdsR2VuRnJh
bWVidWZmZXJzKDEsICZzdXJmYWNlLT5tX2ZibykpCisgICAgICAgIEdMX0NNRChnbEJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgc3VyZmFjZS0+bV9mYm8pKQorICAgICAgICBHTF9DTUQo
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKSkKKyAgICAgICAgR0xfQ01EKGdsRnJhbWVi
dWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9U
RVhUVVJFXzJELCBzdXJmYWNlLT5tX2lkLCAwKSkKKyAgICAgICAgR0xfQ01EKGdsQ2xlYXJDb2xv
cigwLCAwLCAwLCAwKSkKKyAgICAgICAgR0xfQ01EKGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJ
VCkpCisgICAgICAgIHN1cmZhY2UtPm1fc3VyZmFjZU5lZWRzUmVzZXQgPSBmYWxzZTsKKyAgICB9
IGVsc2UgeworICAgICAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIs
IHN1cmZhY2UtPm1fZmJvKSkKKyAgICB9CisKKyAgICBHTF9DTUQoZ2xWaWV3cG9ydCgwLCAwLCBz
dXJmYWNlLT5zaXplKCkud2lkdGgoKSwgc3VyZmFjZS0+c2l6ZSgpLmhlaWdodCgpKSkKKyAgICBt
X3Byb2plY3Rpb25NYXRyaXggPSBtYXRyaXg7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpz
ZXRDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgR0xfQ01EKGdsU2Npc3NvcihyZWN0
LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSkpCisgICAgR0xfQ01E
KGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCkpCit9CisKKwordm9pZCBUZXh0dXJlTWFwcGVyR0w6
OnBhaW50VG9UYXJnZXQoY29uc3QgQml0bWFwVGV4dHVyZSYgYVN1cmZhY2UsIGNvbnN0IEludFNp
emUmIHN1cmZhY2VTaXplLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBm
bG9hdCBvcGFjaXR5LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCkKK3sKKyAgICBjb25zdCBC
aXRtYXBUZXh0dXJlR0wmIHN1cmZhY2UgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJl
R0wmPihhU3VyZmFjZSk7CisgICAgLy8gY3JlYXRlIHRoZSBtb2RlbC12aWV3LXByb2plY3Rpb24g
bWF0cml4IHRvIGRpc3BsYXkgb24gc2NyZWVuCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbXZw
TWF0cml4ID0gY3JlYXRlUHJvamVjdGlvbk1hdHJpeChzdXJmYWNlU2l6ZSwgdHJ1ZSkubXVsdExl
ZnQodHJhbnNmb3JtKTsKKyAgICBjb25zdCBGbG9hdFF1YWQgZmluYWxRdWFkID0gbXZwTWF0cml4
Lm1hcFF1YWQoRmxvYXRRdWFkKEZsb2F0UmVjdChzdXJmYWNlLm9mZnNldCgpLngoKSwgc3VyZmFj
ZS5vZmZzZXQoKS55KCksIHN1cmZhY2UubV9hY3R1YWxTaXplLndpZHRoKCksIHN1cmZhY2UubV9h
Y3R1YWxTaXplLmhlaWdodCgpKSkpOworCisgICAgLy8gV2UgYWxyZWFkeSBibGVuZGVkIHRoZSBh
bHBoYSBpbjsgdGhlIHJlc3VsdCBpcyBwcmVtdWx0aXBsaWVkCisgICAgR0xfQ01EKGdsVXNlUHJv
Z3JhbShnU2hhZGVySW5mby5wcm9ncmFtc1tUZXhtYXBTaGFkZXJJbmZvOjpUYXJnZXRQcm9ncmFt
XS5pZCkpCisgICAgR0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKSkK
KyAgICBHTF9DTUQoZ2xWaWV3cG9ydCgwLCAwLCBzdXJmYWNlU2l6ZS53aWR0aCgpLCBzdXJmYWNl
U2l6ZS5oZWlnaHQoKSkpCisgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9TVEVOQ0lMX1RFU1QpKQor
ICAgIGNvbnN0IFRleG1hcFNoYWRlckluZm86OlByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbyA9IGdT
aGFkZXJJbmZvLnByb2dyYW1zW1RleG1hcFNoYWRlckluZm86OlRhcmdldFByb2dyYW1dOworICAg
IEdMX0NNRChnbFVuaWZvcm0xZihwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86Ok9w
YWNpdHlWYXJpYWJsZV0sIG9wYWNpdHkpKQorICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xf
VEVYVFVSRTApKQorICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHN1cmZh
Y2UubV9pZCkpCisgICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFw
U2hhZGVySW5mbzo6U291cmNlVGV4dHVyZVZhcmlhYmxlXSwgMCkpCisgICAgR0xfQ01EKGdsRW5h
YmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJ
blRleENvb3JkU291cmNlVmFyaWFibGVdKSkKKyAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheShwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OkluVmVydGV4VmFyaWFi
bGVdKSkKKyAgICBHTF9DTUQoZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCkpCisgICAg
R0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRl
ckluZm86OkluVmVydGV4VmFyaWFibGVdLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsICZmaW5h
bFF1YWQpKQorICAgIGxvYWRSZWN0VG9TaGFkZXIocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFk
ZXJJbmZvOjpJblRleENvb3JkU291cmNlVmFyaWFibGVdLCBzdXJmYWNlLm1fc291cmNlUmVjdCk7
CisgICAgR0xfQ01EKGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDApKQorICAgIEdMX0NN
RChnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpKQorICAgIEdMX0NN
RChnbEVuYWJsZShHTF9CTEVORCkpCisgICAgc2V0Q2xpcCh2aXNpYmxlUmVjdCk7CisKKyAgICBH
TF9DTUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpCisgICAgR0xfQ01EKGds
RGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5m
bzo6SW5UZXhDb29yZFNvdXJjZVZhcmlhYmxlXSkpCisgICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5WZXJ0ZXhW
YXJpYWJsZV0pKQorICAgIEdMX0NNRChnbFVzZVByb2dyYW0oMCkpCisgICAgbV9jdXJQcm9ncmFt
ID0gVGV4bWFwU2hhZGVySW5mbzo6VGFyZ2V0UHJvZ3JhbTsKK30KKworUGFzc1JlZlB0cjxCaXRt
YXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZVRleHR1cmUoKSB7IHJldHVybiBhZG9w
dFJlZihuZXcgQml0bWFwVGV4dHVyZUdMKCkpOyB9CisKK307CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlYWFm
YmNhMTUxYzgzZTU4ZTRlOWMwNDBiMjM3NDM0YjQxODkxZGIKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaApAQCAtMCww
ICsxLDg0IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBUZXh0dXJlTWFwcGVyR0xfaAorI2RlZmluZSBUZXh0dXJlTWFwcGVyR0xfaAorCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5j
bHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5j
bHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisv
LyBBbiBPcGVuR0wtRVMyIGltcGxlbWVudGF0aW9uIG9mIFRleHR1cmVNYXBwZXIuCitjbGFzcyBU
ZXh0dXJlTWFwcGVyR0wgOiBwdWJsaWMgVGV4dHVyZU1hcHBlciB7CitwdWJsaWM6CisgICAgVGV4
dHVyZU1hcHBlckdMKEdyYXBoaWNzQ29udGV4dCogZ2MpOworICAgIHZpcnR1YWwgflRleHR1cmVN
YXBwZXJHTCgpIHt9CisKKyAgICAvLyByZWltcHMgZnJvbSBUZXh0dXJlTWFwcGVyCisgICAgdmly
dHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0
IEludFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBv
cGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7CisgICAgdmlydHVhbCB2
b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRDbGlwKGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1Rhcmdl
dChjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpOwor
ICAgIHZpcnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJl
KCk7CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiB0eXBlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIGNsZWFudXAoKTsKKworcHJpdmF0ZToKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3By
b2plY3Rpb25NYXRyaXg7CisgICAgaW50IG1fY3VyUHJvZ3JhbTsKK307CisKKy8vIEFuIG9mZnNj
cmVlbiBidWZmZXIgdG8gYmUgcmVuZGVyZWQgYnkgc29mdHdhcmUuCitjbGFzcyBSR0JBMzJQcmVt
dWx0aW1wbGllZEJ1ZmZlciA6IHB1YmxpYyBSZWZDb3VudGVkPFJHQkEzMlByZW11bHRpbXBsaWVk
QnVmZmVyPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UkdCQTMyUHJlbXVsdGltcGxpZWRCdWZm
ZXIoKSB7fQorICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQo
Y29uc3QgSW50UmVjdCYgZGlydHlSZWN0LCBib29sIG9wYXF1ZSkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBlbmRQYWludCgpID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25z
dCA9IDA7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI+
IGNyZWF0ZSgpOworfTsKKworLy8gbmV4dCBwb3dlciBvZiB0d28KK3N0YXRpYyBpbmxpbmUgaW50
IG5wb3QoaW50IG51bSkKK3sKKyAgICBmb3IgKGludCBpID0gMHgxMDAwMDAwMDsgaSA+IDA7IGkg
Pj49IDEpIHsKKyAgICAgICAgaWYgKG51bSA9PSBpKQorICAgICAgICAgICAgcmV0dXJuIG51bTsK
KyAgICAgICAgaWYgKG51bSAmIGkpCisgICAgICAgICAgICByZXR1cm4gKGkgPDwgMSk7CisgICAg
fQorICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIEludFNpemUgbnBvdChjb25zdCBJ
bnRTaXplJiBzKQoreworICAgIHJldHVybiBJbnRTaXplKG5wb3Qocy53aWR0aCgpKSwgbnBvdChz
LmhlaWdodCgpKSk7Cit9CisKK307CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYmI3OGRmZWI3YWU3ZTBlY2ZlMjVmNTg5ODBhMmFk
MmY5MWU0OWE3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCkBAIC0wLDAgKzEsMTYwMSBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCisKKyNpbmNsdWRlICJDdXJyZW50VGltZS5oIgorI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkhhc2hNYXAuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIlJlZkNvdW50ZWQu
aCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybU9w
ZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNp
bmNsdWRlICJVbml0QmV6aWVyLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmIFBMQVRGT1JN
KFFUKQorI2luY2x1ZGUgIlF0Q29yZS9xZGVidWcuaCIKKyNlbmRpZgorCisjZGVmaW5lIERFQlVH
X1RFWE1BUF9GUFMgMQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBUZXhtYXBQYWlu
dE9wdGlvbnMgeworICAgIEJpdG1hcFRleHR1cmUqIHN1cmZhY2U7CisgICAgVGV4dHVyZU1hcHBl
ciogdGV4dHVyZU1hcHBlcjsKKyAgICBHcmFwaGljc0NvbnRleHQqIGdjOworICAgIFRleHR1cmVN
YXBwZXJOb2RlKiByb290TGF5ZXI7CisgICAgZmxvYXQgb3BhY2l0eTsKKyAgICBJbnRSZWN0IHNj
aXNzb3JSZWN0OworICAgIEludFJlY3QgdmlzaWJsZVJlY3Q7Cit9OworY2xhc3MgVGV4dHVyZU1h
cHBlckNhY2hlIHsKK3B1YmxpYzoKKyAgICB2b2lkIG1hcmsoQml0bWFwVGV4dHVyZSAqdGV4dHVy
ZSk7CisKKyAgICBjbGFzcyBFbnRyeSB7CisgICAgcHVibGljOgorICAgICAgICBSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gdGV4dHVyZTsKKyAgICAgICAgRW50cnkoKSA6IHByZXZpb3VzQ29zdCgwKSB7
IH0KKyAgICAgICAgaW5saW5lIGludCBjYWxjdWxhdGVDb3N0KCkgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKCF0ZXh0dXJlIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjb25zdCBJbnRTaXplIHN6ID0gdGV4dHVy
ZS0+c2l6ZSgpOworICAgICAgICAgICAgcmV0dXJuIHN6LndpZHRoKCkgKiBzei5oZWlnaHQoKSAq
IDQ7CisgICAgICAgIH0KKyAgICAgICAgRW50cnkoQml0bWFwVGV4dHVyZSogbmV3VGV4dHVyZSkK
KyAgICAgICAgICAgIDogdGV4dHVyZShuZXdUZXh0dXJlKQorICAgICAgICB7CisgICAgICAgIH0K
KyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEVudHJ5JiBvdGhlcikgY29uc3QgeyByZXR1
cm4gdGV4dHVyZSA9PSBvdGhlci50ZXh0dXJlOyB9CisgICAgICAgIGludCBwcmV2aW91c0Nvc3Q7
CisgICAgfTsKKworICAgIFRleHR1cmVNYXBwZXJDYWNoZSgpIDogbV90b3RhbENvc3QoMCkge30K
KworICAgIHZvaWQgcHVyZ2UoKTsKKyAgICBWZWN0b3I8RW50cnk+IG1fZGF0YTsKKyAgICBpbnQg
bV90b3RhbENvc3Q7CisjaWZuZGVmIFRFWE1BUF9URVhUVVJFX0NBQ0hFX0tCUworI2RlZmluZSBU
RVhNQVBfVEVYVFVSRV9DQUNIRV9LQlMgMjQgKiAxMDI0CisjZW5kaWYKKyAgICBzdGF0aWMgY29u
c3QgaW50IE1heENvc3QgPSBURVhNQVBfVEVYVFVSRV9DQUNIRV9LQlMgKiAxMDI0OworICAgIHN0
YXRpYyBjb25zdCBpbnQgUHVyZ2VBbW91bnQgPSBNYXhDb3N0IC8gNDsKK307CisKKwordm9pZCBU
ZXh0dXJlTWFwcGVyQ2FjaGU6OnB1cmdlKCkKK3sKKyAgICAvLyBuZWVkcyBhY3RpdmUgY29udGV4
dDogdGV4dHVyZS5kZXN0cm95CisgICAgY29uc3QgaW50IHNpemUgPSBtX2RhdGEuc2l6ZSgpOwor
CisgICAgaWYgKG1fdG90YWxDb3N0IDw9IFRleHR1cmVNYXBwZXJDYWNoZTo6TWF4Q29zdCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gRW5zdXJlIHRoYXQgd2UgaGF2ZSB0aGUgcmlnaHQgY291
bnQuIEl0IG1pZ2h0IGJlIGluYWNjdXJhdGUgaWYgY29udGVudCBjaGFuZ2VkIHNpemUuCisgICAg
Ly8gV2Ugb25seSBkbyB0aGlzIHdoZW4gd2UncmUgYWN0dWFsbHkgcmVhZHkgdG8gcHVyZ2UuCisg
ICAgbV90b3RhbENvc3QgPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQor
ICAgICAgICBtX3RvdGFsQ29zdCArPSBtX2RhdGFbaV0uY2FsY3VsYXRlQ29zdCgpOworCisgICAg
aW50IGJlZm9yZSA9IG1fdG90YWxDb3N0OworICAgIGZvciAoaW50IGkgPSBzaXplLTE7IGkgPj0g
MCAmJiBtX3RvdGFsQ29zdCA+IFRleHR1cmVNYXBwZXJDYWNoZTo6TWF4Q29zdCAtIFRleHR1cmVN
YXBwZXJDYWNoZTo6UHVyZ2VBbW91bnQ7IC0taSkgeworICAgICAgICBFbnRyeSYgZW50cnkgPSBt
X2RhdGFbaV07CisgICAgICAgIGlmIChlbnRyeS50ZXh0dXJlLT5pc0xvY2tlZCgpIHx8ICFlbnRy
eS50ZXh0dXJlLT5pc1ZhbGlkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV90
b3RhbENvc3QgLT0gZW50cnkucHJldmlvdXNDb3N0OworICAgICAgICBlbnRyeS50ZXh0dXJlLT5k
ZXN0cm95KCk7CisgICAgICAgIG1fZGF0YS5yZW1vdmUoaSk7CisgICAgfQorCisgICAgcHJpbnRm
KCJbVGV4dHVyZU1hcHBlcl0gUHVyZ2VkICUyLjRmSyBvZiB0ZXh0dXJlcyglZCkgWyUyLjRmSy8l
ZF1cbiIsIGZsb2F0KGJlZm9yZSAtIG1fdG90YWxDb3N0KSAvIDEwMjQsCisgICAgICAgICAgIGlu
dChzaXplLW1fZGF0YS5zaXplKCkpLCBmbG9hdChtX3RvdGFsQ29zdCkgLyAxMDI0LCBtX2RhdGEu
c2l6ZSgpKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyQ2FjaGU6Om1hcmsoQml0bWFwVGV4dHVy
ZSAqdGV4dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUgfHwgIXRleHR1cmUtPmlzVmFsaWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgRW50cnkgZW50cnkodGV4dHVyZSk7CisgICAgc2l6ZV90
IGluZGV4ID0gbV9kYXRhLmZpbmQoZW50cnkpOworICAgIGlmICghaW5kZXgpCisgICAgICAgIHJl
dHVybjsKKworICAgIHByaW50ZigiWWF5YSEhICVkIFslZF0gWyVkXSIsIGluZGV4LCBtX2RhdGEu
c2l6ZSgpLCBtX3RvdGFsQ29zdCk7CisgICAgaWYgKGluZGV4IDwgbV9kYXRhLnNpemUoKSkgCisg
ICAgICAgIG1fZGF0YS5yZW1vdmUoaW5kZXgpOworICAgIGNvbnN0IGludCBjb3N0ID0gZW50cnku
Y2FsY3VsYXRlQ29zdCgpOworICAgIG1fdG90YWxDb3N0IC09IGVudHJ5LnByZXZpb3VzQ29zdDsK
KyAgICBtX3RvdGFsQ29zdCArPSAoZW50cnkucHJldmlvdXNDb3N0ID0gY29zdCk7CisgICAgbV9k
YXRhLnByZXBlbmQoZW50cnkpOworfQorCitUZXh0dXJlTWFwcGVyQ2FjaGUgZ1RleHR1cmVNYXBw
ZXJDYWNoZTsKKworY2xhc3MgVGV4dHVyZU1hcHBlckNhY2hlTG9jayB7CitwdWJsaWM6CisgICAg
VGV4dHVyZU1hcHBlckNhY2hlTG9jayhCaXRtYXBUZXh0dXJlKiB0ZXh0dXJlKSA6IG1fdGV4dHVy
ZSh0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgICAgIG1f
dGV4dHVyZS0+bG9jaygpOworICAgIH0KKyAgICB+VGV4dHVyZU1hcHBlckNhY2hlTG9jaygpCisg
ICAgeworICAgICAgICBpZiAobV90ZXh0dXJlKQorICAgICAgICAgICAgbV90ZXh0dXJlLT51bmxv
Y2soKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1fdGV4
dHVyZTsKK307CisKK2NsYXNzIFRleHR1cmVNYXBwZXJOb2RlIDogcHVibGljIFRleHR1cmVNYXBw
ZXJDb250ZW50TGF5ZXIgeworCitwdWJsaWM6CisgICAgLy8gVGhpcyBzZXQgb2YgZmxhZ3MgaGVs
cCB1cyBkZWZlciB3aGljaCBwcm9wZXJ0aWVzIG9mIHRoZSBsYXllciBoYXZlIGJlZW4KKyAgICAv
LyBtb2RpZmllZCBieSB0aGUgY29tcG9zaXRvciwgc28gd2UgY2FuIGtub3cgd2hhdCB0byBsb29r
IGZvciBpbiB0aGUgbmV4dCBmbHVzaC4KKyAgICBlbnVtIENoYW5nZU1hc2sgeworICAgICAgICBO
b0NoYW5nZXMgPSAgICAgICAgICAgICAgICAgMCwKKworICAgICAgICBQYXJlbnRDaGFuZ2UgPSAg
ICAgICAgICAgICAgKDFMIDw8IDApLAorICAgICAgICBDaGlsZHJlbkNoYW5nZSA9ICAgICAgICAg
ICAgKDFMIDw8IDEpLAorICAgICAgICBNYXNrTGF5ZXJDaGFuZ2UgPSAgICAgICAgICAgKDFMIDw8
IDIpLAorICAgICAgICBQb3NpdGlvbkNoYW5nZSA9ICAgICAgICAgICAgKDFMIDw8IDMpLAorCisg
ICAgICAgIEFuY2hvclBvaW50Q2hhbmdlID0gICAgICAgICAoMUwgPDwgNCksCisgICAgICAgIFNp
emVDaGFuZ2UgID0gICAgICAgICAgICAgICAoMUwgPDwgNSksCisgICAgICAgIFRyYW5zZm9ybUNo
YW5nZSA9ICAgICAgICAgICAoMUwgPDwgNiksCisgICAgICAgIENvbnRlbnRDaGFuZ2UgPSAgICAg
ICAgICAgICAoMUwgPDwgNyksCisKKyAgICAgICAgQ29udGVudHNPcmllbnRhdGlvbkNoYW5nZSA9
ICgxTCA8PCA5KSwKKyAgICAgICAgT3BhY2l0eUNoYW5nZSA9ICAgICAgICAgICAgICgxTCA8PCAx
MCksCisgICAgICAgIENvbnRlbnRzUmVjdENoYW5nZSA9ICAgICAgICAoMUwgPDwgMTEpLAorCisg
ICAgICAgIFByZXNlcnZlczNEQ2hhbmdlID0gICAgICAgICAoMUwgPDwgMTIpLAorICAgICAgICBN
YXNrc1RvQm91bmRzQ2hhbmdlID0gICAgICAgKDFMIDw8IDEzKSwKKyAgICAgICAgRHJhd3NDb250
ZW50Q2hhbmdlID0gICAgICAgICgxTCA8PCAxNCksCisgICAgICAgIENvbnRlbnRzT3BhcXVlQ2hh
bmdlID0gICAgICAoMUwgPDwgMTUpLAorCisgICAgICAgIEJhY2tmYWNlVmlzaWJpbGl0eUNoYW5n
ZSA9ICAoMUwgPDwgMTYpLAorICAgICAgICBDaGlsZHJlblRyYW5zZm9ybUNoYW5nZSA9ICAgKDFM
IDw8IDE3KSwKKyAgICAgICAgRGlzcGxheUNoYW5nZSA9ICAgICAgICAgICAgICgxTCA8PCAxOCks
CisgICAgICAgIEJhY2tncm91bmRDb2xvckNoYW5nZSA9ICAgICAoMUwgPDwgMTkpLAorCisgICAg
ICAgIFJlcGxpY2FMYXllckNoYW5nZSA9ICAgICAgICAoMUwgPDwgMjApCisgICAgfTsKKworICAg
IC8vIFRoZSBjb21wb3NpdG9yIGxldHMgdXMgc3BlY2lhbC1jYXNlIGltYWdlcyBhbmQgY29sb3Jz
LCBzbyB3ZSB0cnkgdG8gZG8gc28uCisgICAgZW51bSBTdGF0aWNDb250ZW50VHlwZSB7IEhUTUxD
b250ZW50VHlwZSwgRGlyZWN0SW1hZ2VDb250ZW50VHlwZSwgQ29sb3JDb250ZW50VHlwZSwgTWVk
aWFDb250ZW50VHlwZSwgQ2FudmFzM0RDb250ZW50VHlwZX07CisKKyAgICBUZXh0dXJlTWFwcGVy
Tm9kZSogcm9vdExheWVyKCk7CisKKyAgICBUZXh0dXJlTWFwcGVyTm9kZShHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlciogbmV3TGF5ZXIpOworICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJOb2Rl
KCk7CisKKyNpZiBERUJVR19URVhNQVBfRlBTCisgICAgdm9pZCBiZWdpbkFuaW1hdGlvbihBbmlt
YXRlZFByb3BlcnR5SUQgcHJvcGVydHkpOworICAgIHZvaWQgZW5kQW5pbWF0aW9uKEFuaW1hdGVk
UHJvcGVydHlJRCBwcm9wZXJ0eSk7CisjZW5kaWYKKworICAgIHZvaWQgY2xlYXJEaXJlY3RJbWFn
ZSgpOworICAgIHZvaWQgY29tcHV0ZVRyYW5zZm9ybWF0aW9ucygpOworICAgIEludFNpemUgbmVh
cmVzdFN1cmZhY2VTaXplKCkgY29uc3Q7CisgICAgdm9pZCBjb21wdXRlUmVwbGljYVRyYW5zZm9y
bSgpOworICAgIHZvaWQgY29tcHV0ZUxheWVyVHlwZSgpOworICAgIHZvaWQgY29tcHV0ZUxvY2Fs
VHJhbnNmb3JtKCk7CisgICAgdm9pZCBmbGF0dGVuVG8yRFNwYWNlSWZOZWNlc3NhcnkoKTsKKyAg
ICB2b2lkIGluaXRpYWxpemVUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqKTsKKyAgICB2b2lk
IGludmFsaWRhdGVUcmFuc2Zvcm0oKTsKKyAgICB2b2lkIG5vdGlmeUNoYW5nZShDaGFuZ2VNYXNr
KTsKKyAgICB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlKGJvb2wgcmVjdXJzZSk7CisgICAgdm9p
ZCBwZXJmb3JtUG9zdFN5bmNPcGVyYXRpb25zKCk7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXko
KTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChJbnRSZWN0KTsKKyAgICB2aXJ0dWFs
IHZvaWQgY2xlYW51cFRleHR1cmVNYXBwZXIoKTsKKworI2lmIEVOQUJMRV9URVhNQVBfQU5JTUFU
SU9OCisgICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsK
KyAgICB2b2lkIHNldE9wYWNpdHlGcm9tQW5pbWF0aW9uRnJhbWUoZmxvYXQgb3BhY2l0eSk7Cisg
ICAgdm9pZCBzZXRUcmFuc2Zvcm1Gcm9tQW5pbWF0aW9uRnJhbWUoY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmKTsKKyAgICB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoKTsKKyAgICB2b2lk
IG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRpbWVyPFRleHR1cmVNYXBwZXJOb2Rl
PiopIHsgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZCgpOyB9CisgICAgdm9pZCBub3RpZnlBbmltYXRp
b25TdGFydGVkQXN5bmMoKSB7IG1fbm90aWZ5QW5pbWF0aW9uU3RhcnRlZFRpbWVyLnN0YXJ0T25l
U2hvdCgwKTsgfQorICAgIHZvaWQgbm90aWZ5VHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZyhib29s
IHIpOworICAgIHZvaWQgbm90aWZ5T3BhY2l0eUFuaW1hdGlvblJ1bm5pbmcoYm9vbCByKTsKKyNl
bmRpZgorCisgICAgdm9pZCBwYWludFJlY3Vyc2l2ZShUZXhtYXBQYWludE9wdGlvbnMgb3B0aW9u
cyk7CisgICAgdm9pZCBwYWludFNlbGYoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgZmxv
YXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIEJpdG1hcFRleHR1cmUqIHJl
cGxpY2FNYXNrVGV4dHVyZSwgYm9vbCBpc1N1cmZhY2UpOworICAgIHZvaWQgdXBsb2FkVGV4dHVy
ZUZyb21Db250ZW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpOworCisgICAgaW50IGNv
dW50RGVzY2VuZGFudHNXaXRoQ29udGVudCgpIGNvbnN0OworICAgIGJvb2wgaGFzU3VyZmFjZURl
c2NlbmRhbnRzKCkgY29uc3Q7CisKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3NpemU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRQbGF0Zm9ybUxheWVyQ2xpZW50KFRleHR1
cmVNYXBwZXJMYXllckNsaWVudCopOworICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qg
SW50UmVjdCYgZXhwb3NlZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zv
cm0sIGZsb2F0IG9wYWNpdHkpOworCisgICAgc3RhdGljIFRleHR1cmVNYXBwZXJOb2RlKiB0b1Rl
eHR1cmVNYXBwZXJOb2RlKEdyYXBoaWNzTGF5ZXIqKTsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlciogbV9sYXllcjsKKyAgICBjb25zdCBjaGFyKiBtX2xhc3RUZXh0dXJl
TWFwcGVyVHlwZTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlcj4gbV9sYXN0VGV4dHVyZU1hcHBl
cjsKKyAgICBzdHJ1Y3QgVHJhbnNmb3JtRGF0YSB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGJhc2UsIHRhcmdldCwgcmVwbGljYSwgZm9yRGVzY2VuZGFudHMsIHBlcnNwZWN0aXZlLCBs
b2NhbDsKKyAgICAgICAgSW50UmVjdCB0YXJnZXRCb3VuZGluZ1JlY3Q7CisgICAgICAgIGZsb2F0
IGNlbnRlclo7CisgICAgICAgIGJvb2wgZGlydHksIGxvY2FsRGlydHksIHBlcnNwZWN0aXZlRGly
dHk7CisgICAgICAgIEludFJlY3QgYm91bmRpbmdSZWN0RnJvbVJvb3Q7CisgICAgICAgIFRyYW5z
Zm9ybURhdGEoKSA6IGRpcnR5KHRydWUpLCBsb2NhbERpcnR5KHRydWUpLCBwZXJzcGVjdGl2ZURp
cnR5KHRydWUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBUcmFuc2Zvcm1E
YXRhIG1fdHJhbnNmb3JtczsKKworICAgIGVudW0gTGF5ZXJUeXBlIHsKKyAgICAgICAgRGVmYXVs
dExheWVyLAorICAgICAgICBSb290TGF5ZXIsCisgICAgICAgIFNjaXNzb3JMYXllciwKKyAgICAg
ICAgQ2xpcExheWVyLAorICAgICAgICBUcmFuc3BhcmVuY3lMYXllcgorICAgIH07CisKKyAgICBM
YXllclR5cGUgbV9sYXllclR5cGU7CisKKyAgICBzdHJ1Y3QgQ29udGVudERhdGEgeworICAgICAg
ICBJbnRSZWN0IG5lZWRzRGlzcGxheVJlY3Q7CisgICAgICAgIGJvb2wgbmVlZHNEaXNwbGF5Owor
ICAgICAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3I7CisKKyAgICAgICAgU3RhdGljQ29udGVudFR5
cGUgY29udGVudFR5cGU7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2U7CisgICAgICAgIFRl
eHR1cmVNYXBwZXJWaWRlb0xheWVyKiBtZWRpYTsKKworICAgICAgICBDb250ZW50RGF0YSgpCisg
ICAgICAgICAgICA6IG5lZWRzRGlzcGxheShmYWxzZSkKKyAgICAgICAgICAgICwgY29udGVudFR5
cGUoSFRNTENvbnRlbnRUeXBlKQorICAgICAgICAgICAgLCBpbWFnZSgwKQorICAgICAgICAgICAg
LCBtZWRpYSgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgIH07CisKKyAgICBpbmxpbmUg
SW50UmVjdCB0YXJnZXRSZWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2N1cnJl
bnRDb250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSA/IGZ1bGxSZWN0KCkgOiBt
X3N0YXRlLmNvbnRlbnRzUmVjdDsKKyAgICB9CisKKyAgICBpbmxpbmUgSW50UmVjdCBmdWxsUmVj
dCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAwLCBtX3NpemUud2lk
dGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSW50UmVjdCByZXBs
aWNhUmVjdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9sYXllclR5cGUgPT0gVHJh
bnNwYXJlbmN5TGF5ZXIgPyBJbnRSZWN0KDAsIDAsIG1fbmVhcmVzdFN1cmZhY2VTaXplLndpZHRo
KCksIG1fbmVhcmVzdFN1cmZhY2VTaXplLmhlaWdodCgpKSA6IGZ1bGxSZWN0KCk7CisgICAgfQor
CisgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1fdGV4dHVyZTsKKyAgICBSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gbV9zdXJmYWNlLCBtX3JlcGxpY2FTdXJmYWNlOworCisgICAgQ29udGVudERhdGEg
bV9wZW5kaW5nQ29udGVudDsKKyAgICBDb250ZW50RGF0YSBtX2N1cnJlbnRDb250ZW50OworCisg
ICAgVmVjdG9yPFRleHR1cmVNYXBwZXJOb2RlKj4gbV9jaGlsZHJlbjsKKyAgICBUZXh0dXJlTWFw
cGVyTm9kZSogbV9wYXJlbnQ7CisgICAgVGV4dHVyZU1hcHBlck5vZGUqIG1fZWZmZWN0VGFyZ2V0
OworI2lmIERFQlVHX1RFWE1BUF9GUFMKKyAgICBzdHJ1Y3QgR3JhcGhpY3NMYXllckFuaW1hdGlv
biB7CisgICAgICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb24oKSA6IGZyYW1lcygwKSB7IGxhc3Qg
PSBzdGFydGVkID0gV1RGOjpjdXJyZW50VGltZSgpOyB9CisgICAgICAgIGludCBmcmFtZXM7Cisg
ICAgICAgIGRvdWJsZSBsYXN0LCBzdGFydGVkOworICAgIH07CisgICAgSGFzaE1hcDxpbnQsIEdy
YXBoaWNzTGF5ZXJBbmltYXRpb24qPiBtX2FuaW1fZnBzOworI2VuZGlmCisKKyAgICBpbnQgbV9j
aGFuZ2VNYXNrOworICAgIEludFNpemUgbV9zaXplLCBtX25lYXJlc3RTdXJmYWNlU2l6ZTsKKyAg
ICBTdHJpbmcgbV9uYW1lOworICAgIFRleHR1cmVNYXBwZXJMYXllckNsaWVudCogbV9wbGF0Zm9y
bUNsaWVudDsKKworICAgIHN0cnVjdCBTdGF0ZSB7CisgICAgICAgIEZsb2F0UG9pbnQgcG9zOwor
ICAgICAgICBGbG9hdFBvaW50M0QgYW5jaG9yUG9pbnQ7CisgICAgICAgIEZsb2F0U2l6ZSBzaXpl
OworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CisgICAgICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGNoaWxkcmVuVHJhbnNmb3JtOworICAgICAgICBDb2xvciBiYWNrZ3Jv
dW5kQ29sb3I7CisgICAgICAgIENvbG9yIGN1cnJlbnRDb2xvcjsKKyAgICAgICAgR3JhcGhpY3NM
YXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIGdlb09yaWVudGF0aW9uOwor
ICAgICAgICBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24g
Y29udGVudHNPcmllbnRhdGlvbjsKKyAgICAgICAgZmxvYXQgb3BhY2l0eTsKKyAgICAgICAgSW50
UmVjdCBjb250ZW50c1JlY3Q7CisgICAgICAgIGludCBkZXNjZW5kYW50c1dpdGhDb250ZW50Owor
ICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbWFza0xheWVyOworICAgICAgICBUZXh0dXJlTWFw
cGVyTm9kZSogcmVwbGljYUxheWVyOworICAgICAgICBib29sIHByZXNlcnZlczNEOworICAgICAg
ICBib29sIG1hc2tzVG9Cb3VuZHM7CisgICAgICAgIGJvb2wgZHJhd3NDb250ZW50OworICAgICAg
ICBib29sIGNvbnRlbnRzT3BhcXVlOworICAgICAgICBib29sIGJhY2tmYWNlVmlzaWJpbGl0eTsK
KyAgICAgICAgYm9vbCB2aXNpYmxlOworICAgICAgICBib29sIGRpcnR5OworICAgICAgICBib29s
IHRpbGVkOworICAgICAgICBib29sIGhhc1N1cmZhY2VEZXNjZW5kYW50czsKKworICAgICAgICBT
dGF0ZSgpCisgICAgICAgICAgICA6IG9wYWNpdHkoMS5mKQorICAgICAgICAgICAgLCBkZXNjZW5k
YW50c1dpdGhDb250ZW50KDApCisgICAgICAgICAgICAsIG1hc2tMYXllcigwKQorICAgICAgICAg
ICAgLCByZXBsaWNhTGF5ZXIoMCkKKyAgICAgICAgICAgICwgcHJlc2VydmVzM0QoZmFsc2UpCisg
ICAgICAgICAgICAsIG1hc2tzVG9Cb3VuZHMoZmFsc2UpCisgICAgICAgICAgICAsIGRyYXdzQ29u
dGVudChmYWxzZSkKKyAgICAgICAgICAgICwgY29udGVudHNPcGFxdWUoZmFsc2UpCisgICAgICAg
ICAgICAsIGJhY2tmYWNlVmlzaWJpbGl0eShmYWxzZSkKKyAgICAgICAgICAgICwgdmlzaWJsZSh0
cnVlKQorICAgICAgICAgICAgLCBkaXJ0eSh0cnVlKQorICAgICAgICAgICAgLCB0aWxlZChmYWxz
ZSkKKyAgICAgICAgICAgICwgaGFzU3VyZmFjZURlc2NlbmRhbnRzKGZhbHNlKQorICAgICAgICB7
CisgICAgICAgIH0KKyAgICB9OworICAgIFN0YXRlIG1fc3RhdGU7Cit9OworCit2b2lkIFRleHR1
cmVNYXBwZXJOb2RlOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoSW50UmVjdCByZWN0KQoreworICAg
IGlmIChtX3BsYXRmb3JtQ2xpZW50KSB7CisgICAgICAgIGlmIChtX3N0YXRlLmhhc1N1cmZhY2VE
ZXNjZW5kYW50cykgeworICAgICAgICAgICAgbV9wbGF0Zm9ybUNsaWVudC0+c2V0TmVlZHNEaXNw
bGF5KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcmVjdC5pbnRl
cnNlY3QoSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7Cisg
ICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
bV9wbGF0Zm9ybUNsaWVudC0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3BhcmVudCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9wYXJlbnQtPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKK30KKwordm9pZCBUZXh0
dXJlTWFwcGVyTm9kZTo6c2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBpZiAobV9lZmZlY3RUYXJn
ZXQpCisgICAgICAgIG1fZWZmZWN0VGFyZ2V0LT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBpZiAo
bV90cmFuc2Zvcm1zLnRhcmdldEJvdW5kaW5nUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAobV9zdGF0ZS5kcmF3c0NvbnRlbnQgfHwgbV9jdXJyZW50Q29udGVudC5jb250
ZW50VHlwZSAhPSBIVE1MQ29udGVudFR5cGUpCisgICAgICAgIHNldE5lZWRzRGlzcGxheUluUmVj
dChtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0KTsKK30KKworCit2b2lkIFRleHR1cmVN
YXBwZXJOb2RlOjpzZXRQbGF0Zm9ybUxheWVyQ2xpZW50KFRleHR1cmVNYXBwZXJMYXllckNsaWVu
dCogY2xpZW50KQoreworICAgIG1fcGxhdGZvcm1DbGllbnQgPSBjbGllbnQ7Cit9CisKK3N0YXRp
YyBpbnQgY29tcGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKGNvbnN0IHZvaWQqIHBhLCBjb25zdCB2
b2lkKiBwYikKK3sKKyAgICB0eXBlZGVmIGNvbnN0IFRleHR1cmVNYXBwZXJOb2RlKiBwdHI7Cisg
ICAgY29uc3QgcHRyKiBhID0gc3RhdGljX2Nhc3Q8Y29uc3QgcHRyKj4ocGEpOworICAgIGNvbnN0
IHB0ciogYiA9IHN0YXRpY19jYXN0PGNvbnN0IHB0cio+KHBiKTsKKyAgICByZXR1cm4gaW50KCgo
KmEpLT5tX3RyYW5zZm9ybXMuY2VudGVyWiAtICgqYiktPm1fdHJhbnNmb3Jtcy5jZW50ZXJaKSox
MDAwKTsKK30KK2lubGluZSBzdGF0aWMgdm9pZCBzb3J0QnlaT3JkZXIoVmVjdG9yPFRleHR1cmVN
YXBwZXJOb2RlKiA+JiBhcnJheSwgaW50IGZpcnN0LCBpbnQgbGFzdCkKK3sKKyAgICBxc29ydChh
cnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgc2l6ZW9mKFRleHR1cmVNYXBwZXJOb2RlKiksIGNv
bXBhcmVHcmFwaGljc0xheWVyc1pWYWx1ZSk7Cit9CisKK2Jvb2wgVGV4dHVyZU1hcHBlck5vZGU6
Omhhc1N1cmZhY2VEZXNjZW5kYW50cygpIGNvbnN0Cit7CisKKyAgICBpZiAobV9sYXllclR5cGUg
PT0gQ2xpcExheWVyIHx8IG1fbGF5ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVyIHx8IG1fc3Rh
dGUucmVwbGljYUxheWVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjb25zdCBpbnQgc2l6
ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KQorICAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIGNoaWxkID0gbV9jaGlsZHJlbltpXSkK
KyAgICAgICAgICAgIGlmIChjaGlsZC0+aGFzU3VyZmFjZURlc2NlbmRhbnRzKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworCit9CisKK3ZvaWQgVGV4
dHVyZU1hcHBlck5vZGU6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IEludFNpemUm
IHNpemUsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFJlY3QmIGV4cG9zZWRS
ZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5
KQoreworICAgIC8vIG5lZWRzIGFjdGl2ZSBjb250ZXh0CisgICAgQVNTRVJUKG1fbGF5ZXJUeXBl
ID09IFJvb3RMYXllcik7CisgICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworI2lmIDAKKyAgICBXVEY6OlN0b3BXYXRjaCBzdG9wV2F0Y2g7CisgICAgcHJpbnRmKCJb
VGV4dHVyZU1hcHBlcl0gUm9vdFBhaW50ISFcbiIpOworI2VuZGlmCisKKyAgICBSZWZQdHI8VGV4
dHVyZU1hcHBlcj4gdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShnYyk7CisK
KyAgICBpZiAodGV4dHVyZU1hcHBlci0+dHlwZSgpICE9IG1fbGFzdFRleHR1cmVNYXBwZXJUeXBl
KQorICAgICAgICBnVGV4dHVyZU1hcHBlckNhY2hlLm1fZGF0YS5jbGVhcigpOworCisgICAgbV9s
YXN0VGV4dHVyZU1hcHBlciA9IHRleHR1cmVNYXBwZXI7CisgICAgVGV4bWFwUGFpbnRPcHRpb25z
IG9wdDsKKyAgICBvcHQub3BhY2l0eSA9IDE7CisgICAgb3B0LnJvb3RMYXllciA9IHRoaXM7Cisg
ICAgb3B0LnNjaXNzb3JSZWN0ID0gdGFyZ2V0UmVjdDsKKyAgICBvcHQudmlzaWJsZVJlY3QgPSBl
eHBvc2VkUmVjdDsKKyAgICBvcHQudGV4dHVyZU1hcHBlciA9IHRleHR1cmVNYXBwZXIuZ2V0KCk7
CisgICAgb3B0LmdjID0gdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0KCk7CisgICAgb3B0
LnN1cmZhY2UgPSAwOworICAgIHBhaW50UmVjdXJzaXZlKG9wdCk7CisKKyAgICBpZiAodGV4dHVy
ZU1hcHBlci0+YWxsb3dTdXJmYWNlRm9yUm9vdCgpIHx8IG1fc3RhdGUuaGFzU3VyZmFjZURlc2Nl
bmRhbnRzKSB7CisgICAgICAgIHRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKDApOworICAgICAg
ICB0ZXh0dXJlTWFwcGVyLT5wYWludFRvVGFyZ2V0KCptX3N1cmZhY2UuZ2V0KCksIHNpemUsIHRy
YW5zZm9ybSwgb3BhY2l0eSAqIG1fc3RhdGUub3BhY2l0eSwgdGFyZ2V0UmVjdCk7CisgICAgfQor
ICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUucHVyZ2UoKTsKKyNpZiAwCisgICAgeworICAgICAgICBz
dGF0aWMgaW50IHJvb3RDb3VudCA9IDA7CisgICAgICAgIHByaW50ZigiW1RleHR1cmVNYXBwZXJd
IFJvb3RQYWludCglZCkgJWQgbGF5ZXIoJXApICglZCslZCAlZHglZCkgWyVkbXNdXG4iLCArK3Jv
b3RDb3VudCwgdGV4dHVyZU1hcHBlci0+YWxsb3dTdXJmYWNlRm9yUm9vdCgpLAorICAgICAgICAg
ICAgICAgdGhpcywgZXhwb3NlZFJlY3QueCgpLCBleHBvc2VkUmVjdC55KCksIGV4cG9zZWRSZWN0
LndpZHRoKCksIGV4cG9zZWRSZWN0LmhlaWdodCgpLCAKKyAgICAgICAgICAgICAgIGludChzdG9w
V2F0Y2guZWxhcHNlZCgpICogMTAwMCkpOworI2lmIDAKKyAgICAgICAgaWYgKHRleHR1cmVNYXBw
ZXItPmFsbG93U3VyZmFjZUZvclJvb3QoKSkKKyAgICAgICAgICAgIG1fc3VyZmFjZS0+c2F2ZShT
dHJpbmcoKS5mb3JtYXQoIi90bXAvcm9vdF8lZC5wbmciLCByb290Q291bnQpKTsKKyNlbmRpZgor
ICAgIH0KKyNlbmRpZgorfQorCitpbnQgVGV4dHVyZU1hcHBlck5vZGU6OmNvdW50RGVzY2VuZGFu
dHNXaXRoQ29udGVudCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3N0YXRlLnZpc2libGUgfHwgbV9z
dGF0ZS5vcGFjaXR5IDwgMC4wMDEpCisgICAgICAgIHJldHVybiAwOworICAgIGludCBkZXNjZW5k
YW50c1dpdGhDb250ZW50ID0gKG1fc3RhdGUuZHJhd3NDb250ZW50IHx8IG1fY3VycmVudENvbnRl
bnQuY29udGVudFR5cGUgIT0gSFRNTENvbnRlbnRUeXBlKSA/IDEgOiAwOworCisgICAgY29uc3Qg
aW50IHNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNp
emU7ICsraSkKKyAgICAgICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiBjaGlsZCA9IG1fY2hpbGRy
ZW5baV0pCisgICAgICAgICAgICBkZXNjZW5kYW50c1dpdGhDb250ZW50ICs9IGNoaWxkLT5jb3Vu
dERlc2NlbmRhbnRzV2l0aENvbnRlbnQoKTsKKworICAgIHJldHVybiBkZXNjZW5kYW50c1dpdGhD
b250ZW50OworfQorCitpbmxpbmUgVGV4dHVyZU1hcHBlck5vZGUqIFRleHR1cmVNYXBwZXJOb2Rl
Ojp0b1RleHR1cmVNYXBwZXJOb2RlKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIHJldHVy
biBsYXllciA/IHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKj4obGF5ZXIp
LT5tX25vZGUuZ2V0KCkgOiAwOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRl
TGF5ZXJUeXBlKCkKK3sKKyAgICAvKiBjYWxjdWxhdGUgbGF5ZXIgdHlwZS4gQSBsYXllciBjYW4g
YmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICAgIFJvb3RMYXllcjogdGhlIHRvcCBsZXZl
bC4gRHJhd3MgdG8gYSBmcmFtZWJ1ZmZlciwgYW5kIHRoZSB0YXJnZXQgdGV4dHVyZSBkcmF3cyBp
bnRvIHRoZSB2aWV3cG9ydC4KKyAgICAgICAgICAgICAgICAgICBvbmx5IG9uZSBsYXllciBpcyB0
aGUgcm9vdCBsYXllci4KKyAgICAgICAgU2Npc3NvckxheWVyOiBkcmF3cyB0byB0aGUgY3VycmVu
dCBmcmFtZWJ1ZmZlciwgYW5kIGFwcGxpZXMgYW4gZXh0cmEgc2Npc3NvciBiZWZvcmUgZHJhd2lu
ZyBpdHMgY2hpbGRyZW4uCisgICAgICAgICAgICAgICAgICAgICAgQSBzY2lzc29yIGxheWVyIGlz
IGEgbGF5ZXIgd2l0aCBjaGlsZHJlbiB0aGF0IG1hc2tzIHRvIGJvdW5kcywgaXMgbm90IGEgdHJh
bnNwYXJlbmN5IGxheWVyLCBhbmQgaGFzIGEgcmVjdGFuZ3VsYXIgY2xpcC4KKyAgICAgICAgQ2xp
cExheWVyOiBjcmVhdGVzIGEgbmV3IGZyYW1lYnVmZmVyLCB0aGUgc2l6ZSBvZiB0aGUgbGF5ZXIs
IGFuZCB0aGVuIHBhaW50cyBpdCB0byB0aGUgZW5jbG9zaW5nIEJpdG1hcFRleHR1cmUgd2l0aCB0
aGUgbGF5ZXIncyB0cmFuc2Zvcm0vb3BhY2l0eS4KKyAgICAgICAgICAgICAgICAgICAgQSBjbGlw
IGxheWVyIGlzIGEgbGF5ZXIgdGhhdCBtYXNrcyB0byBib3VuZHMsIGRvZXNuJ3QgcHJlc2VydmUg
M0QsIGhhcyBjaGlsZHJlbiwgYW5kIGhhcyBhIHRyYW5zcGFyZW5jeS9tYXNrIG9yIGEgbm9uLXJl
Y3Rhbmd1bGFyIHRyYW5zZm9ybS4KKyAgICAgICAgVHJhbnNwYXJlbmN5TGF5ZXI6IGNyZWF0ZXMg
YSBuZXcgZnJhbWVidWZmZXIgaWRldGljYWwgaW4gc2l6ZSB0byB0aGUgY3VycmVudCBmcmFtZWJ1
ZmZlci4gVGhlbiBkcmF3cyB0aGUgZmIncyB0ZXh0dXJlIHRvIHRoZSBjdXJyZW50IGZyYW1lYnVm
ZmVyIHdpdGggaWRlbnRpdHkgdHJhbnNmb3JtLgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
VXNlZCBmb3IgbGF5ZXJzIHdpdGggY2hpbGRyZW4gYW5kIHRyYW5zcGFyZW5jeS9tYXNrIHRoYXQg
cHJlc2VydmUgM0Qgb3IgZG9uJ3QgbWFzayB0byBib3VuZHMuCisgICAgICAgIERlZmF1bHRMYXll
cjogZHJhd3MgaXRzZWxmIGFuZCBpdHMgY2hpbGRyZW4gZGlyZWN0bHkgdG8gdGhlIGN1cnJlbnQg
ZnJhbWVidWZmZXIuCisgICAgICAgICAgICAgICAgICAgICAgYW55IGxheWVyIHRoYXQgZG9lc24n
dCBjb25mb3JtIHRvIHRoZSBvdGhlciBydWxlcyBpcyBhIERlZmF1bHRMYXllci4KKyAgICAqLwor
CisgICAgY29uc3QgYm9vbCBzZWxmSGFzQ29udGVudCA9IG1fc3RhdGUuZHJhd3NDb250ZW50IHx8
IChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlICE9IEhUTUxDb250ZW50VHlwZSk7CisgICAg
Y29uc3QgYm9vbCBoYXNEZXNjZW5kYW50c1dpdGhDb250ZW50ID0gbV9zdGF0ZS5kZXNjZW5kYW50
c1dpdGhDb250ZW50IC0gKHNlbGZIYXNDb250ZW50ID8gMSA6IDApOworICAgIGNvbnN0IGJvb2wg
aGFzVHJhbnNwYXJlbmN5ID0gbV9zdGF0ZS5vcGFjaXR5IDwgMC45OSB8fCBtX3N0YXRlLm1hc2tM
YXllcjsKKyAgICBjb25zdCBib29sIGhhc1JlcGxpY2EgPSBtX3N0YXRlLnJlcGxpY2FMYXllcjsK
KyAgICBtX2xheWVyVHlwZSA9IERlZmF1bHRMYXllcjsKKworICAgIC8vIExheWVyIGhhcyBubyBw
YXJlbnQsIGl0IG11c3QgYmUgYSByb290IGxheWVyLgorICAgIGlmICghbV9wYXJlbnQgJiYgIW1f
ZWZmZWN0VGFyZ2V0KSB7CisgICAgICAgIG1fbGF5ZXJUeXBlID0gUm9vdExheWVyOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gQSBsYXllciB3aXRoIG5vIGNvbnRlbnRzIGlzIGFs
d2F5cyBhIGRlZmF1bHQgbGF5ZXIuCisgICAgaWYgKCFtX3N0YXRlLmRlc2NlbmRhbnRzV2l0aENv
bnRlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEEgbGF5ZXIgd2l0aCBjb250ZW50LWRl
c2NlbmRhbnRzIGFuZCBhIG1hc2sgaXMgYWx3YXlzIGEgY2xpcCBsYXllci4KKyAgICBpZiAoaGFz
RGVzY2VuZGFudHNXaXRoQ29udGVudCAmJiBtX3N0YXRlLm1hc2tMYXllcikgeworICAgICAgICBt
X2xheWVyVHlwZSA9IENsaXBMYXllcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IEEgbWFza3MtdG8gYm91bmRzIGxheWVyIGNhbiBiZSBhIGNsaXAgb3IgYSBzY2lzc29yIGxheWVy
LiBJdCdzIGEgc2Npc3NvciBsYXllciBvbmx5IGlmIGl0IGhhcyBhIHRyaXZpYWwgY2xpcCAoaWRl
bnRpdHkgb3IgdHJhbnNsYXRpb24pLCBvciBpZiBpdCBoYXMgdHJhbnNwYXJlbmN5LgorICAgIC8v
IFRoYXQncyBiZWNhdXNlIGEgQ2xpcExheWVyIHdvdWxkIGNyZWF0ZSBhbiBpbnRlcm1lZGlhdGUg
ZHJhd2luZyBzdXJmYWNlIChGQikgLSB3ZSB3YW50IHRvIGxpbWl0IGl0IHRvIHdoZW4gaXQncyBh
Y3R1YWxseSBuZWNlc3NhcnksIGkuZS4gdHJhbnNwYXJlbmN5IG9yIG5vbi10cml2aWFsIGNsaXAu
CisgICAgaWYgKG1fc3RhdGUubWFza3NUb0JvdW5kcyAmJiBoYXNEZXNjZW5kYW50c1dpdGhDb250
ZW50KSB7CisgICAgICAgIGlmIChoYXNUcmFuc3BhcmVuY3kgfHwgIW1fc3RhdGUudHJhbnNmb3Jt
LmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkgfHwgbV9wYXJlbnQtPm1fc3RhdGUucHJlc2VydmVz
M0QpCisgICAgICAgICAgICBtX2xheWVyVHlwZSA9IENsaXBMYXllcjsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9sYXllclR5cGUgPSBTY2lzc29yTGF5ZXI7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBXZSB1c2UgYSB0cmFuc3BhcmVuY3kgbGF5ZXIgd2hlbiB3ZSBoYXZl
IHR3byBvZiB0aGUgZm9sbG93aW5nIDM6IHJlcGxpY2EsIHRyYW5zcGFyZW5jeSwgZGVzY2VuZGFu
dHMgd2l0aCBjb250ZW50cy4KKyAgICBpZiAoKGhhc1JlcGxpY2EgJiYgaGFzRGVzY2VuZGFudHNX
aXRoQ29udGVudCkgfHwgKGhhc1JlcGxpY2EgJiYgaGFzVHJhbnNwYXJlbmN5KSB8fCAoaGFzVHJh
bnNwYXJlbmN5ICYmIG1fc3RhdGUuZGVzY2VuZGFudHNXaXRoQ29udGVudCA+IDEpKQorICAgICAg
ICBtX2xheWVyVHlwZSA9IFRyYW5zcGFyZW5jeUxheWVyOworfQordm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6aW5pdGlhbGl6ZVRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBl
cikKK3sKKyAgICAvLyBuZWVkcyBhY3RpdmUgY29udGV4dAorICAgIGlmICh0ZXh0dXJlTWFwcGVy
LT50eXBlKCkgPT0gbV9sYXN0VGV4dHVyZU1hcHBlclR5cGUpCisgICAgICAgIHJldHVybjsKKyNp
ZiAwCisgICAgaWYgKG1fbGF5ZXJUeXBlID09IENsaXBMYXllciB8fCBtX2xheWVyVHlwZSA9PSBU
cmFuc3BhcmVuY3lMYXllcgorICAgICAgICB8fCAobV9sYXllclR5cGUgPT0gUm9vdExheWVyICYm
IHRleHR1cmVNYXBwZXItPmFsbG93U3VyZmFjZUZvclJvb3QoKSkpCisgICAgICAgIG1fc3VyZmFj
ZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICBlbHNlIGlmIChtX3N1cmZh
Y2UpCisgICAgICAgIG1fc3VyZmFjZS0+ZGVzdHJveSgpOworICAgIGlmIChtX3N0YXRlLnJlcGxp
Y2FMYXllcikKKyAgICAgICAgbV9yZXBsaWNhU3VyZmFjZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0
ZVRleHR1cmUoKTsKKyAgICBlbHNlIGlmIChtX3JlcGxpY2FTdXJmYWNlKQorICAgICAgICBtX3Jl
cGxpY2FTdXJmYWNlLT5kZXN0cm95KCk7CisjZWxzZQorICAgIG1fc3VyZmFjZSA9IHRleHR1cmVN
YXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICBtX3JlcGxpY2FTdXJmYWNlID0gdGV4dHVyZU1h
cHBlci0+Y3JlYXRlVGV4dHVyZSgpOworI2VuZGlmCisgICAgbV90ZXh0dXJlID0gdGV4dHVyZU1h
cHBlci0+Y3JlYXRlVGV4dHVyZSgpOworICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUubWFyayhtX3Rl
eHR1cmUuZ2V0KCkpOworICAgIG1fbGFzdFRleHR1cmVNYXBwZXJUeXBlID0gdGV4dHVyZU1hcHBl
ci0+dHlwZSgpOworfQorCitUZXh0dXJlTWFwcGVyTm9kZTo6VGV4dHVyZU1hcHBlck5vZGUoR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIqIG5ld0xheWVyKQorICAgIDogbV9sYXllcihuZXdMYXll
cikKKyAgICAsIG1fbGFzdFRleHR1cmVNYXBwZXJUeXBlKDApCisgICAgLCBtX2xhc3RUZXh0dXJl
TWFwcGVyKDApCisgICAgLCBtX2xheWVyVHlwZShEZWZhdWx0TGF5ZXIpCisjaWYgRU5BQkxFX1RF
WE1BUF9BTklNQVRJT04KKyAgICAsIG1fbm90aWZ5QW5pbWF0aW9uU3RhcnRlZFRpbWVyKHRoaXMs
ICZUZXh0dXJlTWFwcGVyTm9kZTo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQpCisj
ZW5kaWYKKyAgICAsIG1fc3VyZmFjZSgwKQorICAgICwgbV9wYXJlbnQoMCkKKyAgICAsIG1fZWZm
ZWN0VGFyZ2V0KDApCisgICAgLCBtX2NoYW5nZU1hc2soTm9DaGFuZ2VzKQorICAgICwgbV9wbGF0
Zm9ybUNsaWVudCgwKQoreworCit9CisKK1RleHR1cmVNYXBwZXJOb2RlKiBUZXh0dXJlTWFwcGVy
Tm9kZTo6cm9vdExheWVyKCkKK3sKKyAgICBpZiAobV9lZmZlY3RUYXJnZXQpCisgICAgICAgIHJl
dHVybiBtX2VmZmVjdFRhcmdldC0+cm9vdExheWVyKCk7CisgICAgaWYgKG1fcGFyZW50KQorICAg
ICAgICByZXR1cm4gbV9wYXJlbnQtPnJvb3RMYXllcigpOworICAgIHJldHVybiB0aGlzOworfQor
Cit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjppbnZhbGlkYXRlVHJhbnNmb3JtKCkKK3sKKyAgICBt
X3RyYW5zZm9ybXMuZGlydHkgPSB0cnVlOworICAgIGlmIChtX2xheWVyVHlwZSAhPSBDbGlwTGF5
ZXIpCisgICAgICAgIG1fc3RhdGUuZGlydHkgPSB0cnVlOworICAgIGlmIChtX3N0YXRlLnJlcGxp
Y2FMYXllcikKKyAgICAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPmludmFsaWRhdGVUcmFuc2Zv
cm0oKTsKKyAgICBjb25zdCBpbnQgc2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUq
IGxheWVyID0gbV9jaGlsZHJlbltpXSkKKyAgICAgICAgICAgIGxheWVyLT5pbnZhbGlkYXRlVHJh
bnNmb3JtKCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVMb2NhbFRyYW5z
Zm9ybSgpCit7CisgICAgaWYgKCFtX3RyYW5zZm9ybXMubG9jYWxEaXJ0eSkKKyAgICAgICAgcmV0
dXJuOworICAgIGNvbnN0IGZsb2F0IG9yaWdpblggPSBtX3N0YXRlLmFuY2hvclBvaW50LngoKSAq
IG1fc2l6ZS53aWR0aCgpOworICAgIGNvbnN0IGZsb2F0IG9yaWdpblkgPSBtX3N0YXRlLmFuY2hv
clBvaW50LnkoKSAqIG1fc2l6ZS5oZWlnaHQoKTsKKyAgICBtX3RyYW5zZm9ybXMubG9jYWwgPQor
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpCisgICAgICAgIC50cmFuc2xhdGUzZChvcmln
aW5YICsgbV9zdGF0ZS5wb3MueCgpLCBvcmlnaW5ZICsgbV9zdGF0ZS5wb3MueSgpLCBtX3N0YXRl
LmFuY2hvclBvaW50LnooKSkKKyNpZiBFTkFCTEVfVEVYTUFQX0FOSU1BVElPTgorICAgICAgICAu
bXVsdExlZnQobV9hbmltLnRyYW5zZm9ybUFuaW1hdGlvblJ1bm5pbmcgPyBtX2FuaW0udHJhbnNm
b3JtIDogbV9zdGF0ZS50cmFuc2Zvcm0pCisjZWxzZQorICAgICAgICAubXVsdExlZnQobV9zdGF0
ZS50cmFuc2Zvcm0pCisjZW5kaWYKKyAgICAgICAgLnRyYW5zbGF0ZTNkKC1vcmlnaW5YLCAtb3Jp
Z2luWSwgLW1fc3RhdGUuYW5jaG9yUG9pbnQueigpKTsKKyAgICBtX3RyYW5zZm9ybXMubG9jYWxE
aXJ0eSA9IGZhbHNlOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpmbGF0dGVuVG8yRFNw
YWNlSWZOZWNlc3NhcnkoKQoreworICAgIGlmIChtX3N0YXRlLnByZXNlcnZlczNEKQorICAgICAg
ICByZXR1cm47CisgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE0xMygwKTsKKyAg
ICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTIzKDApOworICAgIG1fdHJhbnNmb3Jt
cy5mb3JEZXNjZW5kYW50cy5zZXRNMzEoMCk7CisgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRh
bnRzLnNldE0zMigwKTsKKyAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTMzKDEp
OworICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNMzQoMCk7CisgICAgbV90cmFu
c2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE00MygwKTsKK30KKworSW50U2l6ZSBUZXh0dXJlTWFw
cGVyTm9kZTo6bmVhcmVzdFN1cmZhY2VTaXplKCkgY29uc3QKK3sKKyAgICBpZiAobV9sYXllclR5
cGUgPT0gQ2xpcExheWVyIHx8IG1fbGF5ZXJUeXBlID09IFJvb3RMYXllcikKKyAgICAgICAgcmV0
dXJuIG1fc3VyZmFjZSAmJiAhbV9zdXJmYWNlLT5zaXplKCkuaXNFbXB0eSgpID8gbV9zdXJmYWNl
LT5zaXplKCkgOiBtX3NpemU7CisgICAgcmV0dXJuIG1fcGFyZW50LT5uZWFyZXN0U3VyZmFjZVNp
emUoKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVJlcGxpY2FUcmFuc2Zv
cm0oKQoreworICAgIGlmICghbV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fbmVhcmVzdFN1cmZhY2VTaXplID0gbmVhcmVzdFN1cmZhY2VTaXplKCk7CisKKyAg
ICBpZiAobV9sYXllclR5cGUgIT0gVHJhbnNwYXJlbmN5TGF5ZXIpIHsKKyAgICAgICAgbV90cmFu
c2Zvcm1zLnJlcGxpY2EgPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtX3RyYW5zZm9ybXMudGFyZ2V0
KS5tdWx0TGVmdChtX3N0YXRlLnJlcGxpY2FMYXllci0+bV90cmFuc2Zvcm1zLmxvY2FsKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IGZsb2F0IG9yaWdpblggPSBtX3RyYW5z
Zm9ybXMudGFyZ2V0Lm00MSgpOworICAgIGNvbnN0IGZsb2F0IG9yaWdpblkgPSBtX3RyYW5zZm9y
bXMudGFyZ2V0Lm00MigpOworICAgIG1fdHJhbnNmb3Jtcy5yZXBsaWNhID0KKyAgICAgICAgICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkKKyAgICAgICAgICAgICAgICAudHJhbnNsYXRlKG9yaWdp
blgsIG9yaWdpblkpCisgICAgICAgICAgICAgICAgLm11bHRMZWZ0KG1fc3RhdGUucmVwbGljYUxh
eWVyLT5tX3RyYW5zZm9ybXMubG9jYWwpCisgICAgICAgICAgICAgICAgLnRyYW5zbGF0ZSgtb3Jp
Z2luWCwgLW9yaWdpblkpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlVHJh
bnNmb3JtYXRpb25zKCkKK3sKKyAgICBpZiAoIW1fdHJhbnNmb3Jtcy5kaXJ0eSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV90cmFuc2Zvcm1zLmRpcnR5ID0gZmFsc2U7CisgICAgaWYgKChtX3Np
emUuaXNFbXB0eSgpICYmIG1fc3RhdGUubWFza3NUb0JvdW5kcykpCisgICAgICAgIHJldHVybjsK
KworICAgIFRleHR1cmVNYXBwZXJOb2RlKiBwYXJlbnQgPSBtX3BhcmVudDsKKyAgICBjb21wdXRl
TG9jYWxUcmFuc2Zvcm0oKTsKKworICAgIG1fdHJhbnNmb3Jtcy50YXJnZXQgPSBUcmFuc2Zvcm1h
dGlvbk1hdHJpeChwYXJlbnQgPyBwYXJlbnQtPm1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cyA6
IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpLm11bHRMZWZ0KG1fdHJhbnNmb3Jtcy5sb2NhbCk7Cisg
ICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzID0gKG1fbGF5ZXJUeXBlID09IENsaXBMYXll
ciA/IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkgOiBtX3RyYW5zZm9ybXMudGFyZ2V0KTsKKworICAg
IGlmIChtX2VmZmVjdFRhcmdldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90cmFuc2Zvcm1z
LnRhcmdldEJvdW5kaW5nUmVjdCA9IEludFJlY3QobV90cmFuc2Zvcm1zLnRhcmdldC5tYXBSZWN0
KGZ1bGxSZWN0KCkpKTsKKyAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIG1f
c3RhdGUucmVwbGljYUxheWVyLT5jb21wdXRlVHJhbnNmb3JtYXRpb25zKCk7CisKKyAgICBmbGF0
dGVuVG8yRFNwYWNlSWZOZWNlc3NhcnkoKTsKKworICAgIGlmICghbV9zdGF0ZS5iYWNrZmFjZVZp
c2liaWxpdHkgJiYgbV90cmFuc2Zvcm1zLnRhcmdldC5pbnZlcnNlKCkubTMzKCkgPCAwKSB7Cisg
ICAgICAgIG1fc3RhdGUudmlzaWJsZSA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIG1fc3RhdGUudmlzaWJsZSA9IHRydWU7CisKKyAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+
bV9zdGF0ZS5wcmVzZXJ2ZXMzRCkKKyAgICAgICAgbV90cmFuc2Zvcm1zLmNlbnRlclogPSBtX3Ry
YW5zZm9ybXMudGFyZ2V0Lm1hcFBvaW50KEZsb2F0UG9pbnQzRChtX3NpemUud2lkdGgoKSAvIDIs
IG1fc2l6ZS5oZWlnaHQoKSAvIDIsIDApKS56KCk7CisKKyAgICBpZiAoIW1fY2hpbGRyZW4uc2l6
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zdGF0ZS5jaGlsZHJlblRyYW5zZm9y
bS5pc0lkZW50aXR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEZsb2F0UG9pbnQg
Y2VudGVyUG9pbnQgPSBGbG9hdFBvaW50KG1fc2l6ZS53aWR0aCgpIC8gMiwgbV9zaXplLmhlaWdo
dCgpIC8gMik7CisgICAgaWYgKG1fdHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZURpcnR5KQorICAgICAg
ICBtX3RyYW5zZm9ybXMucGVyc3BlY3RpdmUgPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpCisgICAg
ICAgICAgICAudHJhbnNsYXRlKGNlbnRlclBvaW50LngoKSwgY2VudGVyUG9pbnQueSgpKQorICAg
ICAgICAgICAgLm11bHRMZWZ0KG1fc3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm0pCisgICAgICAgICAg
ICAudHJhbnNsYXRlKC1jZW50ZXJQb2ludC54KCksIC1jZW50ZXJQb2ludC55KCkpOworICAgIG1f
dHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZURpcnR5ID0gZmFsc2U7CisgICAgbV90cmFuc2Zvcm1zLmZv
ckRlc2NlbmRhbnRzLm11bHRMZWZ0KG1fdHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZSk7Cit9CisKKyNp
ZiBERUJVR19URVhNQVBfRlBTCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpiZWdpbkFuaW1hdGlv
bihBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHkpCit7CisgICAgQVNTRVJUKCFtX2FuaW1fZnBz
LmdldChwcm9wZXJ0eSkpOworICAgIGZwcmludGYoc3RkZXJyLCAiQW5pbWF0aW9uU3RhcnRlZCgl
cCk6ICVkXG4iLCB0aGlzLCBwcm9wZXJ0eSk7CisgICAgbV9hbmltX2Zwcy5zZXQocHJvcGVydHks
IG5ldyBHcmFwaGljc0xheWVyQW5pbWF0aW9uKCkpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJO
b2RlOjplbmRBbmltYXRpb24oQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5KQoreworICAgIEdy
YXBoaWNzTGF5ZXJBbmltYXRpb24qIGFuaW0gPSBtX2FuaW1fZnBzLnRha2UocHJvcGVydHkpOwor
ICAgIEFTU0VSVChhbmltKTsKKyAgICBpZiAoYW5pbSkgeworICAgICAgICBjb25zdCBkb3VibGUg
ZHVyYXRpb24gPSBXVEY6OmN1cnJlbnRUaW1lKCktYW5pbS0+c3RhcnRlZDsKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJBbmltYXRpb25FbmRlZCglcCk6ICVkOiBbJWZdIFslZCBmcmFtZXNdIFsl
ZiBGUFNdXG4iLCB0aGlzLCBwcm9wZXJ0eSwgZHVyYXRpb24sIAorICAgICAgICAgICAgICAgIGFu
aW0tPmZyYW1lcywgKDEwMDAgLyAoKGR1cmF0aW9uKjEwMDApIC8gYW5pbS0+ZnJhbWVzKSkgKTsK
KyAgICB9Cit9CisjZW5kaWYKKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6dXBsb2FkVGV4dHVy
ZUZyb21Db250ZW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCit7CisgICAgLy8gbmVl
ZHMgYWN0aXZlIGNvbnRleHQKKyAgICBpZiAobV9zaXplLmlzRW1wdHkoKSB8fCAhbV9sYXllcikg
eworICAgICAgICBtX3RleHR1cmUtPmRlc3Ryb3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IERpcmVjdEltYWdlQ29u
dGVudFR5cGUpIHsKKyAgICAgICAgaWYgKG1fY3VycmVudENvbnRlbnQuaW1hZ2UpCisgICAgICAg
ICAgICBtX3RleHR1cmUtPnNldENvbnRlbnRzVG9JbWFnZShtX2N1cnJlbnRDb250ZW50LmltYWdl
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2N1cnJlbnRDb250
ZW50LmNvbnRlbnRUeXBlID09IE1lZGlhQ29udGVudFR5cGUpIHsKKyAgICAgICAgaWYgKCFtX2N1
cnJlbnRDb250ZW50Lm1lZGlhKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3RleHR1
cmUtPnJlc2V0KG1fc2l6ZSwgdHJ1ZSk7CisgICAgICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KiBwZ2MgPSBtX3RleHR1cmUtPmJlZ2luUGFpbnRNZWRpYSgpOworICAgICAgICBHcmFwaGljc0Nv
bnRleHQgZ2MocGdjKTsKKyAgICAgICAgbV9jdXJyZW50Q29udGVudC5tZWRpYS0+cGFpbnQoJmdj
KTsKKyAgICAgICAgbV90ZXh0dXJlLT5lbmRQYWludCgpOworICAgIH0KKworICAgIGNvbnN0IGJv
b2wgbmVlZHNSZXNldCA9IChtX3RleHR1cmUtPmNvbnRlbnRTaXplKCkgIT0gbV9zaXplKSB8fCAh
bV90ZXh0dXJlLT5pc1ZhbGlkKCk7CisgICAgaWYgKChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRU
eXBlICE9IEhUTUxDb250ZW50VHlwZSkKKyAgICAgICAgfHwgKCFtX2N1cnJlbnRDb250ZW50Lm5l
ZWRzRGlzcGxheSAmJiBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QuaXNFbXB0eSgp
ICYmICFuZWVkc1Jlc2V0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV1RGOjpTdG9wV2F0Y2gg
c3RvcFdhdGNoOworICAgIEludFJlY3QgZGlydHlSZWN0ID0gSW50UmVjdCgwLCAwLCBtX3NpemUu
d2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICBpZiAoIW5lZWRzUmVzZXQgJiYgIW1fY3Vy
cmVudENvbnRlbnQubmVlZHNEaXNwbGF5KQorICAgICAgICBkaXJ0eVJlY3QuaW50ZXJzZWN0KG1f
Y3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCk7CisgICAgaWYgKG5lZWRzUmVzZXQpCisg
ICAgICAgIG1fdGV4dHVyZS0+cmVzZXQobV9zaXplLCBtX3N0YXRlLmNvbnRlbnRzT3BhcXVlKTsK
KworICAgIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdjKG1fdGV4dHVyZS0+YmVnaW5QYWlu
dChkaXJ0eVJlY3QpKTsKKyAgICAgICAgaWYgKHRleHR1cmVNYXBwZXIgJiYgdGV4dHVyZU1hcHBl
ci0+Z3JhcGhpY3NDb250ZXh0KCkpIHsKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogb3Jp
Z2luYWxHQyA9IHRleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dCgpOworICAgICAgICAgICAg
Z2Muc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShvcmlnaW5hbEdDLT5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KCkpOworICAgICAgICAgICAgZ2Muc2V0VGV4dERyYXdpbmdNb2RlKG9yaWdp
bmFsR0MtPnRleHREcmF3aW5nTW9kZSgpKTsKKyAgICAgICAgfQorICAgICAgICBtX2xheWVyLT5w
YWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhnYywgZGlydHlSZWN0KTsKKyAgICB9CisgICAgbV90
ZXh0dXJlLT5lbmRQYWludCgpOworICAgIHsKKyAgICAgICAgc3RhdGljIGludCByZW5kZXJDb3Vu
dCA9IDA7CisgICAgICAgIHByaW50ZigiW1RleHR1cmVNYXBwZXJdIFJlLXJlbmRlciglZCkgbGF5
ZXIoJXApICVkOjolZDo6JWQgKCVkeCVkKSBbJWRtc11cbiIsICsrcmVuZGVyQ291bnQsIHRoaXMs
CisgICAgICAgICAgICAgICBuZWVkc1Jlc2V0LCBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxh
eSwgIW1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdC5pc0VtcHR5KCksCisgICAgICAg
ICAgICAgICBkaXJ0eVJlY3Qud2lkdGgoKSwgZGlydHlSZWN0LmhlaWdodCgpLCBpbnQoc3RvcFdh
dGNoLmVsYXBzZWQoKSAqIDEwMDApKTsKKyNpZiAwCisgICAgICAgIG1fdGV4dHVyZS0+c2F2ZShT
dHJpbmcoKS5mb3JtYXQoIi90bXAvbGF5ZXJfJWQucG5nIiwgcmVuZGVyQ291bnQpKTsKKyNlbmRp
ZgorICAgIH0KKworICAgIG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCA9IEludFJl
Y3QoKTsKKyAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSA9IGZhbHNlOworfQorCit2
b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludFNlbGYoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1h
cHBlciwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIEJpdG1hcFRl
eHR1cmUqIHJlcGxpY2FNYXNrVGV4dHVyZSwgYm9vbCBpc1N1cmZhY2UpCit7CisgICAgLy8gbmVl
ZHMgYWN0aXZlIGNvbnRleHQKKyAgICBpZiAoIW1fbGF5ZXIgfHwgbV9zaXplLmlzRW1wdHkoKSB8
fCAoIW1fc3RhdGUuZHJhd3NDb250ZW50ICYmIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUg
PT0gSFRNTENvbnRlbnRUeXBlKSkKKyAgICAgICAgcmV0dXJuOworICAgIHVwbG9hZFRleHR1cmVG
cm9tQ29udGVudCh0ZXh0dXJlTWFwcGVyKTsKKyAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIg
JiYgIWlzU3VyZmFjZSkKKyAgICAgICAgdGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUoKm1fdGV4
dHVyZS5nZXQoKSwgcmVwbGljYVJlY3QoKSwgbV90cmFuc2Zvcm1zLnJlcGxpY2EsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgb3BhY2l0eSAqIG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRl
Lm9wYWNpdHksIAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxpY2FNYXNrVGV4dHVyZSA/
IHJlcGxpY2FNYXNrVGV4dHVyZSA6IG1hc2tUZXh0dXJlKTsKKworCisgICAgY29uc3QgSW50UmVj
dCByZWN0ID0gbV9sYXllclR5cGUgPT0gQ2xpcExheWVyID8gZnVsbFJlY3QoKSA6IHRhcmdldFJl
Y3QoKTsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBtX2xheWVy
VHlwZSA9PSBDbGlwTGF5ZXIgPyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpIDogbV90cmFuc2Zvcm1z
LnRhcmdldDsKKyAgICB0ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqbV90ZXh0dXJlLmdldCgp
LCByZWN0LCB0cmFuc2Zvcm0sIG9wYWNpdHksIGlzU3VyZmFjZSA/IDAgOiBtYXNrVGV4dHVyZSk7
Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50UmVjdXJzaXZlKFRleG1hcFBhaW50
T3B0aW9ucyBvcHRpb25zKQoreworICAgIC8vIG5lZWRzIGFjdGl2ZSBjb250ZXh0CisKKyAgICBX
VEY6OlN0b3BXYXRjaCBzdG9wV2F0Y2g7CisKKyNpZiBERUJVR19URVhNQVBfRlBTCisgICAgaWYg
KCFtX2FuaW1fZnBzLmlzRW1wdHkoKSkgeworICAgICAgICBjb25zdCBkb3VibGUgbm93ID0gV1RG
OjpjdXJyZW50VGltZSgpOworICAgICAgICBIYXNoTWFwPGludCwgR3JhcGhpY3NMYXllckFuaW1h
dGlvbio+OjppdGVyYXRvciBlbmQgPSBtX2FuaW1fZnBzLmVuZCgpOworICAgICAgICBmb3IgKEhh
c2hNYXA8aW50LCBHcmFwaGljc0xheWVyQW5pbWF0aW9uKj46Oml0ZXJhdG9yIGl0ID0gbV9hbmlt
X2Zwcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIC8vIHByaW50Zigi
RlJBTUUoJWQpOiAlZG1zIFslcF1cbiIsIGl0LT5zZWNvbmQtPmZyYW1lcywgaW50KChub3ctaXQt
PnNlY29uZC0+bGFzdCkqMTAwMCksIHRoaXMpOworICAgICAgICAgICAgaXQtPnNlY29uZC0+bGFz
dCA9IG5vdzsKKyAgICAgICAgICAgICsraXQtPnNlY29uZC0+ZnJhbWVzOworICAgICAgICB9Cisg
ICAgfQorI2VuZGlmCisgICAgYm9vbCBpc0RpcnR5ID0gbV9zdGF0ZS5kaXJ0eTsKKyAgICBtX3N0
YXRlLmRpcnR5ID0gZmFsc2U7CisKKyAgICBpZiAoKG1fc2l6ZS5pc0VtcHR5KCkgJiYgKG1fc3Rh
dGUubWFza3NUb0JvdW5kcworICAgICAgICB8fCBtX2NoaWxkcmVuLmlzRW1wdHkoKSkpIHx8ICFt
X3N0YXRlLnZpc2libGUgfHwgb3B0aW9ucy5vcGFjaXR5IDwgMC4wMSB8fCBtX3N0YXRlLm9wYWNp
dHkgPCAwLjAxKQorICAgICAgICByZXR1cm47CisKKyAgICBpbml0aWFsaXplVGV4dHVyZU1hcHBl
cihvcHRpb25zLnRleHR1cmVNYXBwZXIpOworICAgIGNvbXB1dGVSZXBsaWNhVHJhbnNmb3JtKCk7
CisKKyAgICBpZiAobV9zdGF0ZS5tYXNrTGF5ZXIpIHsKKyAgICAgICAgbV9zdGF0ZS5tYXNrTGF5
ZXItPmluaXRpYWxpemVUZXh0dXJlTWFwcGVyKG9wdGlvbnMudGV4dHVyZU1hcHBlcik7CisgICAg
ICAgIG1fc3RhdGUubWFza0xheWVyLT5tX3N0YXRlLmRpcnR5ID0gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyKSB7CisgICAgICAgIG1fc3RhdGUucmVwbGljYUxh
eWVyLT5pbml0aWFsaXplVGV4dHVyZU1hcHBlcihvcHRpb25zLnRleHR1cmVNYXBwZXIpOworICAg
ICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5kaXJ0eSA9IGZhbHNlOworICAgICAg
ICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUubWFza0xheWVyKSB7CisgICAgICAg
ICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5tYXNrTGF5ZXItPmluaXRpYWxpemVU
ZXh0dXJlTWFwcGVyKG9wdGlvbnMudGV4dHVyZU1hcHBlcik7CisgICAgICAgICAgICBtX3N0YXRl
LnJlcGxpY2FMYXllci0+bV9zdGF0ZS5tYXNrTGF5ZXItPm1fc3RhdGUuZGlydHkgPSBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIFRleHR1cmVNYXBwZXJOb2RlKiByZXBsaWNhID0gbV9z
dGF0ZS5yZXBsaWNhTGF5ZXI7CisgICAgY29uc3QgYm9vbCBpc1N1cmZhY2UgPSAobV9sYXllclR5
cGUgPT0gQ2xpcExheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9sYXllclR5
cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAo
bV9sYXllclR5cGUgPT0gUm9vdExheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICYmIChvcHRpb25zLnRleHR1cmVNYXBwZXItPmFsbG93U3VyZmFjZUZvclJvb3QoKSB8fCBtX3N0
YXRlLmhhc1N1cmZhY2VEZXNjZW5kYW50cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKSk7CisgICAgaWYgKGlzU3VyZmFjZSkKKyAgICAgICAgdXBsb2FkVGV4dHVyZUZyb21Db250
ZW50KG9wdGlvbnMudGV4dHVyZU1hcHBlcik7CisgICAgY29uc3QgSW50UmVjdCBib3VuZGluZ1Jl
Y3Rmcm9tTmVhcmVzdFN1cmZhY2UgPSBtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0Owor
CisKKyNpZiBFTkFCTEVfVEVYTUFQX0FOSU1BVElPTgorICAgIGlmIChtX2FuaW0ub3BhY2l0eUFu
aW1hdGlvblJ1bm5pbmcpCisgICAgICAgIG9wdGlvbnMub3BhY2l0eSAqPSBtX2FuaW0ub3BhY2l0
eTsKKyAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgb3B0aW9ucy5vcGFjaXR5ICo9IG1fc3RhdGUu
b3BhY2l0eTsKKworICAgIGZsb2F0IGNvbnRlbnRPcGFjaXR5ID0gaXNTdXJmYWNlID8gMSA6IG9w
dGlvbnMub3BhY2l0eTsKKyAgICBUZXhtYXBQYWludE9wdGlvbnMgb3B0aW9uc0ZvckRlc2NlbmRh
bnRzKG9wdGlvbnMpOworICAgIG9wdGlvbnNGb3JEZXNjZW5kYW50cy5vcGFjaXR5ID0gY29udGVu
dE9wYWNpdHk7CisKKyAgICBpZiAobV9sYXllclR5cGUgPT0gQ2xpcExheWVyKSB7CisgICAgICAg
IG9wdGlvbnNGb3JEZXNjZW5kYW50cy52aXNpYmxlUmVjdCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4
KCkudHJhbnNsYXRlKC1ib3VuZGluZ1JlY3Rmcm9tTmVhcmVzdFN1cmZhY2UueCgpLCAtYm91bmRp
bmdSZWN0ZnJvbU5lYXJlc3RTdXJmYWNlLnkoKSkubWFwUmVjdChvcHRpb25zLnZpc2libGVSZWN0
KTsKKyAgICAgICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLnNjaXNzb3JSZWN0ID0gSW50UmVjdCgw
LCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICB9CisKKyAgICBpZiAo
bV9sYXllclR5cGUgPT0gU2Npc3NvckxheWVyKSAKKyAgICAgICAgb3B0aW9uc0ZvckRlc2NlbmRh
bnRzLnNjaXNzb3JSZWN0LmludGVyc2VjdChtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0
KTsKKyAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPnNldENsaXAob3B0aW9uc0ZvckRlc2NlbmRh
bnRzLnNjaXNzb3JSZWN0KTsKKworICAgIFRleHR1cmVNYXBwZXJDYWNoZUxvY2sobV90ZXh0dXJl
LmdldCgpKTsKKyAgICBUZXh0dXJlTWFwcGVyQ2FjaGVMb2NrKG1fc3VyZmFjZS5nZXQoKSk7Cisg
ICAgVGV4dHVyZU1hcHBlckNhY2hlTG9jayhtX3JlcGxpY2FTdXJmYWNlLmdldCgpKTsKKworICAg
IGdUZXh0dXJlTWFwcGVyQ2FjaGUucHVyZ2UoKTsKKworICAgIGlmIChpc1N1cmZhY2UpIHsKKyAg
ICAgICAgQVNTRVJUKG1fc3VyZmFjZSk7CisgICAgICAgIGlmICghbV9zdXJmYWNlLT5pc1ZhbGlk
KCkpCisgICAgICAgICAgICBpc0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1fc3RhdGUudGls
ZWQpIHsKKyAgICAgICAgICAgIG1fc3VyZmFjZS0+cmVzZXQob3B0aW9ucy52aXNpYmxlUmVjdC5z
aXplKCkpOworICAgICAgICAgICAgbV9zdXJmYWNlLT5zZXRPZmZzZXQob3B0aW9ucy52aXNpYmxl
UmVjdC5sb2NhdGlvbigpKTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0RpcnR5KQorICAgICAgICAg
ICAgbV9zdXJmYWNlLT5yZXNldChtX2xheWVyVHlwZSA9PSBUcmFuc3BhcmVuY3lMYXllciA/IG9w
dGlvbnMuc3VyZmFjZS0+c2l6ZSgpIDogbV9zaXplKTsKKyAgICAgICAgZ1RleHR1cmVNYXBwZXJD
YWNoZS5tYXJrKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBl
ci0+YmluZFN1cmZhY2UobV9zdXJmYWNlLmdldCgpKTsKKworICAgICAgICBvcHRpb25zRm9yRGVz
Y2VuZGFudHMuc3VyZmFjZSA9IG1fc3VyZmFjZS5nZXQoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBpZiAobV9zdXJmYWNlKQorICAgICAgICAgICAgbV9zdXJmYWNlLT5kZXN0cm95KCk7CisgICAg
ICAgIGNvbnRlbnRPcGFjaXR5ID0gb3B0aW9ucy5vcGFjaXR5OworICAgIH0KKworICAgIFJlZlB0
cjxCaXRtYXBUZXh0dXJlPiBtYXNrVGV4dHVyZTsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4g
cmVwbGljYU1hc2tUZXh0dXJlOworICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSogbWFzayA9IG1f
c3RhdGUubWFza0xheWVyKSB7CisgICAgICAgIG1hc2stPnVwbG9hZFRleHR1cmVGcm9tQ29udGVu
dChvcHRpb25zLnRleHR1cmVNYXBwZXIpOworICAgICAgICBtYXNrVGV4dHVyZSA9IG1hc2stPm1f
dGV4dHVyZTsKKyAgICB9CisKKyAgICBpZiAocmVwbGljYSAmJiByZXBsaWNhLT5tX3N0YXRlLm1h
c2tMYXllcikgeworICAgICAgICByZXBsaWNhLT5tX3N0YXRlLm1hc2tMYXllci0+dXBsb2FkVGV4
dHVyZUZyb21Db250ZW50KG9wdGlvbnMudGV4dHVyZU1hcHBlcik7CisgICAgICAgIHJlcGxpY2FN
YXNrVGV4dHVyZSA9IHJlcGxpY2EtPm1fc3RhdGUubWFza0xheWVyLT5tX3RleHR1cmU7CisgICAg
fQorCisgICAgaW50IGNoaWxkcmVuU2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOworICAgIGlmIChp
c0RpcnR5IHx8ICFpc1N1cmZhY2UgfHwgbV9zdGF0ZS50aWxlZCB8fCAhbV9zdXJmYWNlLT5pc1Zh
bGlkKCkpIHsKKyAgICAgICAgYm9vbCBkaWRQYWludFNlbGYgPSBmYWxzZTsKKyAgICAgICAgaWYg
KCFtX3N0YXRlLnByZXNlcnZlczNEIHx8IG1fY2hpbGRyZW4uaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBwYWludFNlbGYob3B0aW9ucy50ZXh0dXJlTWFwcGVyLCBjb250ZW50T3BhY2l0eSwgbWFz
a1RleHR1cmUuZ2V0KCksIHJlcGxpY2FNYXNrVGV4dHVyZS5nZXQoKSwgaXNTdXJmYWNlKTsKKyAg
ICAgICAgICAgIGRpZFBhaW50U2VsZiA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bV9jaGlsZHJlbi5pc0VtcHR5KCkgJiYgIWlzU3VyZmFjZSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBpZiAobV9sYXllclR5cGUgPT0gU2Npc3NvckxheWVyKQorICAgICAgICAgICAg
b3B0aW9uc0ZvckRlc2NlbmRhbnRzLnNjaXNzb3JSZWN0LmludGVyc2VjdChtX3RyYW5zZm9ybXMu
dGFyZ2V0Lm1hcFJlY3QoSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdo
dCgpKSkpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW5TaXplOyArK2kp
IHsKKyAgICAgICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBsYXllciA9IG1fY2hpbGRyZW5baV07
CisgICAgICAgICAgICBpZiAoIWxheWVyKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICBpZiAoIWRpZFBhaW50U2VsZiAmJiBsYXllci0+bV90cmFuc2Zvcm1zLmNlbnRl
clogPj0gMCkgeworICAgICAgICAgICAgICAgIHBhaW50U2VsZihvcHRpb25zLnRleHR1cmVNYXBw
ZXIsIGNvbnRlbnRPcGFjaXR5LCBtYXNrVGV4dHVyZS5nZXQoKSwgcmVwbGljYU1hc2tUZXh0dXJl
LmdldCgpLCBpc1N1cmZhY2UpOworICAgICAgICAgICAgICAgIGRpZFBhaW50U2VsZiA9IHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsYXllci0+cGFpbnRSZWN1cnNpdmUob3B0aW9u
c0ZvckRlc2NlbmRhbnRzKTsKKyAgICAgICAgICAgIGlmIChpc1N1cmZhY2UpIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQobV9zdXJmYWNlKTsKKyAgICAgICAgICAgICAgICBnVGV4dHVyZU1hcHBl
ckNhY2hlLm1hcmsobV9zdXJmYWNlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBvcHRpb25zLnRl
eHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFkaWRQYWludFNlbGYpIHsKKyAgICAgICAgICAgIHBh
aW50U2VsZihvcHRpb25zLnRleHR1cmVNYXBwZXIsIGNvbnRlbnRPcGFjaXR5LCBtYXNrVGV4dHVy
ZS5nZXQoKSwgcmVwbGljYU1hc2tUZXh0dXJlLmdldCgpLCBpc1N1cmZhY2UpOworICAgICAgICAg
ICAgZGlkUGFpbnRTZWxmID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX2xh
eWVyVHlwZSA9PSBSb290TGF5ZXIgfHwgbV9sYXllclR5cGUgPT0gRGVmYXVsdExheWVyIHx8IG1f
bGF5ZXJUeXBlID09IFNjaXNzb3JMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJU
KG1fc3VyZmFjZSk7CisgICAgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSA9ICptX3N1cmZhY2UuZ2V0
KCk7CisgICAgaWYgKHJlcGxpY2EpIHsKKyAgICAgICAgQVNTRVJUKG1fcmVwbGljYVN1cmZhY2Up
OworICAgICAgICBtX3JlcGxpY2FTdXJmYWNlLT5yZXNldChvcHRpb25zLnN1cmZhY2UtPnNpemUo
KSk7CisgICAgICAgIG1fcmVwbGljYVN1cmZhY2UtPnNldE9mZnNldChvcHRpb25zLnN1cmZhY2Ut
Pm9mZnNldCgpKTsKKyAgICAgICAgZ1RleHR1cmVNYXBwZXJDYWNoZS5tYXJrKG1fcmVwbGljYVN1
cmZhY2UuZ2V0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNl
KG1fcmVwbGljYVN1cmZhY2UuZ2V0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXIt
PmRyYXdUZXh0dXJlKHRleHR1cmUsIHJlcGxpY2FSZWN0KCksIG1fdHJhbnNmb3Jtcy5yZXBsaWNh
LCByZXBsaWNhLT5tX3N0YXRlLm9wYWNpdHksIHJlcGxpY2FNYXNrVGV4dHVyZSA/IHJlcGxpY2FN
YXNrVGV4dHVyZS5nZXQoKSA6IG1hc2tUZXh0dXJlLmdldCgpKTsKKyAgICAgICAgb3B0aW9ucy50
ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSh0ZXh0dXJlLCBJbnRSZWN0KEludFBvaW50KDAsIDAp
LCBvcHRpb25zLnN1cmZhY2UtPnNpemUoKSksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIDEuMGYs
IG1hc2tUZXh0dXJlLmdldCgpKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5k
U3VyZmFjZShvcHRpb25zLnN1cmZhY2UpOworICAgICAgICBnVGV4dHVyZU1hcHBlckNhY2hlLm1h
cmsob3B0aW9ucy5zdXJmYWNlKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3
VGV4dHVyZSgqbV9yZXBsaWNhU3VyZmFjZS5nZXQoKSwgSW50UmVjdChJbnRQb2ludCgwLCAwKSwg
b3B0aW9ucy5zdXJmYWNlLT5zaXplKCkpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBvcHRpb25z
Lm9wYWNpdHksIDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb3B0aW9ucy50ZXh0
dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShvcHRpb25zLnN1cmZhY2UpOworICAgIG9wdGlvbnMudGV4
dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUodGV4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9sYXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIgPyBJbnRSZWN0KEludFBvaW50
KDAsIDApLCBvcHRpb25zLnN1cmZhY2UtPnNpemUoKSkgOiAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGFyZ2V0UmVjdCgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9s
YXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIgPyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpIDog
bV90cmFuc2Zvcm1zLnRhcmdldCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlv
bnMub3BhY2l0eSwgbWFza1RleHR1cmUuZ2V0KCkpOworICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUu
bWFyaygmdGV4dHVyZSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNsZWFudXBUZXh0
dXJlTWFwcGVyKCkKK3sKKyAgICBpZiAobV90ZXh0dXJlKQorICAgICAgICBtX3RleHR1cmUtPmRl
c3Ryb3koKTsKKyAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICBtX3N1cmZhY2UtPmRlc3Ryb3ko
KTsKKyAgICBpZiAobV9yZXBsaWNhU3VyZmFjZSkKKyAgICAgICAgbV9yZXBsaWNhU3VyZmFjZS0+
ZGVzdHJveSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAobV9jaGlsZHJlbltpXSkKKyAgICAgICAgICAgIG1fY2hpbGRyZW5b
aV0tPmNsZWFudXBUZXh0dXJlTWFwcGVyKCk7CisgICAgfQorICAgIGlmIChtX2xhc3RUZXh0dXJl
TWFwcGVyKQorICAgICAgICBtX2xhc3RUZXh0dXJlTWFwcGVyLT5jbGVhbnVwKCk7Cit9CisKK1Rl
eHR1cmVNYXBwZXJOb2RlOjp+VGV4dHVyZU1hcHBlck5vZGUoKQoreworICAgIC8vIG5lZWRzIGFj
dGl2ZSBjb250ZXh0CisgICAgLy8gc3luY0NvbXBvc2l0aW5nU3RhdGUodHJ1ZSk7CisgICAgc2V0
TmVlZHNEaXNwbGF5KCk7CisgICAgeworICAgICAgICBjb25zdCBpbnQgY2hpbGRyZW5TaXplID0g
bV9jaGlsZHJlbi5zaXplKCk7CisgICAgICAgIGZvciAoaW50IGkgPSBjaGlsZHJlblNpemUtMTsg
aSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2NoaWxkcmVuW2ldLT5tX3BhcmVu
dCA9PSB0aGlzKTsKKyAgICAgICAgICAgIG1fY2hpbGRyZW5baV0tPm1fcGFyZW50ID0gMDsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBpZiAobV9wYXJlbnQpCisgICAgICAgIG1fcGFyZW50LT5tX2No
aWxkcmVuLnJlbW92ZShtX3BhcmVudC0+bV9jaGlsZHJlbi5maW5kKHRoaXMpKTsKK30KKworI2lm
IEVOQUJMRV9URVhNQVBfQU5JTUFUSU9OCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzZXRUcmFu
c2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBtX2Fu
aW0udHJhbnNmb3JtID0gdHJhbnNmb3JtOworICAgIG1fdHJhbnNmb3Jtcy5kaXJ0eSA9IHRydWU7
CisgICAgaWYgKG1fcGFyZW50KQorICAgICAgICBtX3BhcmVudC0+bV9zdGF0ZS5kaXJ0eSA9IHRy
dWU7CisgICAgaWYgKG1fc3RhdGUucHJlc2VydmVzM0QpIAorICAgICAgICBtX3N0YXRlLmRpcnR5
ID0gdHJ1ZTsKKyAgICBwZXJmb3JtUG9zdFN5bmNPcGVyYXRpb25zKCk7Cit9CisKK3ZvaWQgVGV4
dHVyZU1hcHBlck5vZGU6OnNldE9wYWNpdHlGcm9tQW5pbWF0aW9uRnJhbWUoZmxvYXQgb3BhY2l0
eSkKK3sKKyAgICBpZiAobV9sYXllcikKKyAgICAgICAgbV9sYXllci0+c2V0T3BhY2l0eShvcGFj
aXR5KTsKKyAgICBtX2FuaW0ub3BhY2l0eSA9IG9wYWNpdHk7CisgICAgbV9zdGF0ZS5kaXJ0eSA9
IHRydWU7ICAgIAorICAgIHBlcmZvcm1Qb3N0U3luY09wZXJhdGlvbnMoKTsKK30KKwordm9pZCBU
ZXh0dXJlTWFwcGVyTm9kZTo6bm90aWZ5VHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZyhib29sIHJ1
bm5pbmcpCit7CisgICAgbV9sYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKKyAgICBtX2Fu
aW0udHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZyA9IHJ1bm5pbmc7CisgICAgaWYgKHJ1bm5pbmcp
CisgICAgICAgIG1fYW5pbS50cmFuc2Zvcm0gPSBtX3N0YXRlLnRyYW5zZm9ybTsKKyAgICBlbHNl
IAorICAgICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlRyYW5zZm9ybUNoYW5n
ZSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6Om5vdGlmeU9wYWNpdHlBbmltYXRpb25S
dW5uaW5nKGJvb2wgcnVubmluZykKK3sKKyAgICBtX2xheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0
ZSgpOworICAgIG1fYW5pbS5vcGFjaXR5QW5pbWF0aW9uUnVubmluZyA9IHJ1bm5pbmc7CisgICAg
aWYgKHJ1bm5pbmcpCisgICAgICAgIG1fYW5pbS5vcGFjaXR5ID0gbV9zdGF0ZS5vcGFjaXR5Owor
ICAgIGVsc2UgCisgICAgICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6T3BhY2l0
eUNoYW5nZSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6Om5vdGlmeUFuaW1hdGlvblN0
YXJ0ZWQoKQoreworICAgIGlmIChtX2xheWVyKQorICAgICAgICBtX2xheWVyLT5jbGllbnQoKS0+
bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChtX2xheWVyLCBXVEY6OmN1cnJlbnRUaW1lKCkpOworfQor
Cit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzZXRUcmFuc2Zvcm1Gcm9tQW5pbWF0aW9uRnJhbWUo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkKK3sKKyAgICBpZiAobV9sYXllcikK
KyAgICAgICAgbV9sYXllci0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7CisgICAgc2V0VHJhbnNmb3Jt
KG1hdHJpeCk7Cit9CisjZW5kaWYKKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6bm90aWZ5Q2hh
bmdlKENoYW5nZU1hc2sgY2hhbmdlTWFzaykKK3sKKyAgICBtX2NoYW5nZU1hc2sgfD0gY2hhbmdl
TWFzazsKKyAgICBpZiAoIW1fbGF5ZXItPmNsaWVudCgpKQorICAgICAgICByZXR1cm47CisgICAg
bV9sYXllci0+Y2xpZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZChtX2xheWVyKTsKK30KKwordm9p
ZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGVyZm9ybVBvc3RTeW5jT3BlcmF0aW9ucygpCit7CisgICAg
Y29uc3QgTGF5ZXJUeXBlIHByZXZMYXllclR5cGUgPSBtX2xheWVyVHlwZTsKKyAgICBjb21wdXRl
TGF5ZXJUeXBlKCk7CisgICAgaWYgKHByZXZMYXllclR5cGUgIT0gbV9sYXllclR5cGUpCisgICAg
ICAgIG1fc3RhdGUuZGlydHkgPSB0cnVlOworICAgIGlmIChtX3RyYW5zZm9ybXMuZGlydHkpIAor
ICAgICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKworICAgIGNvbXB1dGVUcmFuc2Zvcm1hdGlvbnMo
KTsKKyAgICBpZiAobV9zdGF0ZS5tYXNrTGF5ZXIgJiYgIW1fc3RhdGUuZGlydHkpCisgICAgICAg
IG1fc3RhdGUuZGlydHkgPSBtX3N0YXRlLm1hc2tMYXllci0+bV9zdGF0ZS5kaXJ0eTsKKyAgICBp
ZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIgJiYgIW1fc3RhdGUuZGlydHkpCisgICAgICAgIG1fc3Rh
dGUuZGlydHkgPSBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5kaXJ0eTsKKworICAgIGNv
bnN0IGludCBzaXplID0gbV9jaGlsZHJlbi5zaXplKCk7CisKKyAgICBmb3IgKGludCBpID0gc2l6
ZSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBsYXllciA9
IG1fY2hpbGRyZW5baV07CisKKyAgICAgICAgbGF5ZXItPnBlcmZvcm1Qb3N0U3luY09wZXJhdGlv
bnMoKTsKKyAgICAgICAgaWYgKCFtX3N0YXRlLmRpcnR5KQorICAgICAgICAgICAgbV9zdGF0ZS5k
aXJ0eSA9IGxheWVyLT5tX3N0YXRlLmRpcnR5OworICAgIH0KKyAgICBtX3N0YXRlLmhhc1N1cmZh
Y2VEZXNjZW5kYW50cyA9IGhhc1N1cmZhY2VEZXNjZW5kYW50cygpOworICAgIGlmIChtX3N0YXRl
LmRpcnR5KQorICAgICAgICBtX3N0YXRlLmRlc2NlbmRhbnRzV2l0aENvbnRlbnQgPSBjb3VudERl
c2NlbmRhbnRzV2l0aENvbnRlbnQoKTsKKworICAgIGlmIChtX3N0YXRlLnByZXNlcnZlczNEKQor
ICAgICAgICBzb3J0QnlaT3JkZXIobV9jaGlsZHJlbiwgMCwgc2l6ZSk7CisgICAgaWYgKG1fc3Rh
dGUuZGlydHkpIAorICAgICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKK30KKwordm9pZCBUZXh0dXJl
TWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUoYm9vbCByZWN1cnNlKQoreworICAgIGJv
b2wgbmVlZHNUb0ludmFsaWRhdGVUcmFuc2Zvcm0gPSBmYWxzZTsKKworICAgIGlmICghbV9sYXll
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY2hhbmdlTWFzayA9PSBOb0NoYW5nZXMp
CisgICAgICAgIGdvdG8gYWZ0ZXJDdXJyZW50TGF5ZXJTeW5jOworCisgICAgc2V0TmVlZHNEaXNw
bGF5KCk7CisgICAgaWYgKG1fcGFyZW50KQorICAgICAgICBtX3BhcmVudC0+bV9zdGF0ZS5kaXJ0
eSA9IHRydWU7CisKKyAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1M
Q29udGVudFR5cGUgJiYgKG1fY2hhbmdlTWFzayAmIFBhcmVudENoYW5nZSkpIHsKKyAgICAgICAg
Ly8gVGhlIFdlYkNvcmUgY29tcG9zaXRvciBtYW5hZ2VzIGl0ZW0gb3duZXJzaGlwLiBXZSBoYXZl
IHRvIG1ha2Ugc3VyZSBncmFwaGljc3ZpZXcgZG9lc24ndAorICAgICAgICAvLyB0cnkgdG8gc25h
dGNoIHRoYXQgb3duZXJzaGlwLgorCisgICAgICAgIGlmICghbV9sYXllci0+cGFyZW50KCkpCisg
ICAgICAgICAgICBtX3BhcmVudCA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcGFy
ZW50ID0gdG9UZXh0dXJlTWFwcGVyTm9kZShtX2xheWVyLT5wYXJlbnQoKSk7CisKKyAgICAgICAg
aWYgKCFtX2xheWVyLT5wYXJlbnQoKSAmJiBtX3BhcmVudCkgeworICAgICAgICAgICAgc2l6ZV90
IGluZGV4ID0gbV9wYXJlbnQtPm1fY2hpbGRyZW4uZmluZCh0aGlzKTsKKyAgICAgICAgICAgIG1f
cGFyZW50LT5tX2NoaWxkcmVuLnJlbW92ZShpbmRleCk7CisgICAgICAgIH0KKworICAgIH0KKwor
ICAgIGlmIChtX2NoYW5nZU1hc2sgJiBDaGlsZHJlbkNoYW5nZSkgeworICAgICAgICBtX2NoaWxk
cmVuLmNsZWFyKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9sYXllci0+Y2hp
bGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKFRleHR1cmVNYXBwZXJOb2Rl
KiBjaGlsZCA9IHRvVGV4dHVyZU1hcHBlck5vZGUobV9sYXllci0+Y2hpbGRyZW4oKVtpXSkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIWNoaWxkKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChjaGlsZCk7CisgICAgICAgICAg
ICAgICAgY2hpbGQtPm1fcGFyZW50ID0gdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBtX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9jaGFuZ2VN
YXNrICYgKFNpemVDaGFuZ2UgfCBDb250ZW50c1JlY3RDaGFuZ2UpKSB7CisgICAgICAgIEludFNp
emUgd2FudGVkU2l6ZSA9IEludFNpemUobV9sYXllci0+c2l6ZSgpLndpZHRoKCksIG1fbGF5ZXIt
PnNpemUoKS5oZWlnaHQoKSk7CisgICAgICAgIGlmICh3YW50ZWRTaXplLmlzRW1wdHkoKSAmJiBt
X3BlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSkKKyAgICAgICAg
ICAgIHdhbnRlZFNpemUgPSBJbnRTaXplKG1fbGF5ZXItPmNvbnRlbnRzUmVjdCgpLndpZHRoKCks
IG1fbGF5ZXItPmNvbnRlbnRzUmVjdCgpLmhlaWdodCgpKTsKKworICAgICAgICBpZiAod2FudGVk
U2l6ZSAhPSBtX3NpemUpIHsKKyAgICAgICAgICAgIG1fc2l6ZSA9IEludFNpemUod2FudGVkU2l6
ZS53aWR0aCgpLCB3YW50ZWRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgIGlmIChtX3BsYXRm
b3JtQ2xpZW50KQorICAgICAgICAgICAgICAgIG1fcGxhdGZvcm1DbGllbnQtPnNldFNpemVDaGFu
Z2VkKG1fc2l6ZSk7CisgICAgICAgICAgICBjb25zdCBib29sIG5lZWRzVGlsaW5nID0gbV9zaXpl
LndpZHRoKCkgPiAyMDAwIHx8IG1fc2l6ZS5oZWlnaHQoKSA+IDIwMDA7CisgICAgICAgICAgICBp
ZiAobV9zdGF0ZS50aWxlZCAhPSBuZWVkc1RpbGluZykKKyAgICAgICAgICAgICAgICBtX3N0YXRl
LnRpbGVkID0gbmVlZHNUaWxpbmc7CisgICAgICAgICAgICBtX3N0YXRlLmRpcnR5ID0gdHJ1ZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX2NoYW5nZU1hc2sgJiBNYXNrTGF5ZXJDaGFu
Z2UpCisgICAgICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiBsYXllciA9IHRvVGV4dHVyZU1hcHBl
ck5vZGUobV9sYXllci0+bWFza0xheWVyKCkpKQorICAgICAgICAgICBsYXllci0+bV9lZmZlY3RU
YXJnZXQgPSB0aGlzOworCisgICAgaWYgKG1fY2hhbmdlTWFzayAmIFJlcGxpY2FMYXllckNoYW5n
ZSkKKyAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVy
Tm9kZShtX2xheWVyLT5yZXBsaWNhTGF5ZXIoKSkpCisgICAgICAgICAgIGxheWVyLT5tX2VmZmVj
dFRhcmdldCA9IHRoaXM7CisKKyAgICBpZiAobV9jaGFuZ2VNYXNrICYgKFRyYW5zZm9ybUNoYW5n
ZSB8IFNpemVDaGFuZ2UgfCBBbmNob3JQb2ludENoYW5nZSB8IFBvc2l0aW9uQ2hhbmdlKSkKKyAg
ICAgICAgbV90cmFuc2Zvcm1zLmxvY2FsRGlydHkgPSB0cnVlOworCisgICAgaWYgKG1fY2hhbmdl
TWFzayAmIChDaGlsZHJlblRyYW5zZm9ybUNoYW5nZSB8IFNpemVDaGFuZ2UpKQorICAgICAgICBt
X3RyYW5zZm9ybXMucGVyc3BlY3RpdmVEaXJ0eSA9IHRydWU7CisKKyAgICBpZiAobV9jaGFuZ2VN
YXNrICYgKENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlIHwgUHJlc2VydmVzM0RDaGFuZ2UgfCBUcmFu
c2Zvcm1DaGFuZ2UgfCBBbmNob3JQb2ludENoYW5nZSB8IFNpemVDaGFuZ2UgfCBDb250ZW50c1Jl
Y3RDaGFuZ2UgfCBCYWNrZmFjZVZpc2liaWxpdHlDaGFuZ2UgfCBQb3NpdGlvbkNoYW5nZSB8IE1h
c2tMYXllckNoYW5nZSB8IERyYXdzQ29udGVudENoYW5nZSB8IENvbnRlbnRDaGFuZ2UgfCBSZXBs
aWNhTGF5ZXJDaGFuZ2UpKSAgICB7CisgICAgICAgIC8vIER1ZSB0byB0aGUgZGlmZmVyZW5jZXMg
YmV0d2VlbiB0aGUgd2F5IFdlYkNvcmUgaGFuZGxlcyB0cmFuc2Zvcm1zIGFuZCB0aGUgd2F5IFF0
IGhhbmRsZXMgdHJhbnNmb3JtcywKKyAgICAgICAgLy8gYWxsIHRoZXNlIGVsZW1lbnRzIGFmZmVj
dCB0aGUgdHJhbnNmb3JtcyBvZiBhbGwgdGhlIGRlc2NlbmRhbnRzLgorICAgICAgICBuZWVkc1Rv
SW52YWxpZGF0ZVRyYW5zZm9ybSA9IHRydWU7CisgICAgfQorCisgICAgaWYgKG1fY2hhbmdlTWFz
ayAmIERpc3BsYXlDaGFuZ2UpIAorICAgICAgICBtX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKKworICAg
IG1fc3RhdGUubWFza0xheWVyID0gdG9UZXh0dXJlTWFwcGVyTm9kZShtX2xheWVyLT5tYXNrTGF5
ZXIoKSk7CisgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJOb2RlKG1f
bGF5ZXItPnJlcGxpY2FMYXllcigpKTsKKyAgICBtX3N0YXRlLnBvcyA9IG1fbGF5ZXItPnBvc2l0
aW9uKCk7CisgICAgbV9zdGF0ZS5hbmNob3JQb2ludCA9IG1fbGF5ZXItPmFuY2hvclBvaW50KCk7
CisgICAgbV9zdGF0ZS5zaXplID0gbV9sYXllci0+c2l6ZSgpOworICAgIG1fc3RhdGUudHJhbnNm
b3JtID0gbV9sYXllci0+dHJhbnNmb3JtKCk7CisgICAgbV9zdGF0ZS5jb250ZW50c1JlY3QgPSBt
X2xheWVyLT5jb250ZW50c1JlY3QoKTsKKyAgICBtX3N0YXRlLm9wYWNpdHkgPSBtX2xheWVyLT5v
cGFjaXR5KCk7CisgICAgbV9zdGF0ZS5jb250ZW50c1JlY3QgPSBtX2xheWVyLT5jb250ZW50c1Jl
Y3QoKTsKKyAgICBtX3N0YXRlLnByZXNlcnZlczNEID0gbV9sYXllci0+cHJlc2VydmVzM0QoKTsK
KyAgICBtX3N0YXRlLm1hc2tzVG9Cb3VuZHMgPSBtX2xheWVyLT5tYXNrc1RvQm91bmRzKCk7Cisg
ICAgbV9zdGF0ZS5kcmF3c0NvbnRlbnQgPSBtX2xheWVyLT5kcmF3c0NvbnRlbnQoKTsKKyAgICBt
X3N0YXRlLmNvbnRlbnRzT3BhcXVlID0gbV9sYXllci0+Y29udGVudHNPcGFxdWUoKTsKKyAgICBt
X3N0YXRlLmJhY2tmYWNlVmlzaWJpbGl0eSA9IG1fbGF5ZXItPmJhY2tmYWNlVmlzaWJpbGl0eSgp
OworICAgIG1fc3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm0gPSBtX2xheWVyLT5jaGlsZHJlblRyYW5z
Zm9ybSgpOworICAgIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPSBtX3BlbmRpbmdDb250
ZW50LmNvbnRlbnRUeXBlOworICAgIG1fY3VycmVudENvbnRlbnQuaW1hZ2UgPSBtX3BlbmRpbmdD
b250ZW50LmltYWdlOworICAgIG1fY3VycmVudENvbnRlbnQubWVkaWEgPSBtX3BlbmRpbmdDb250
ZW50Lm1lZGlhOworICAgIG1fY3VycmVudENvbnRlbnQuYmFja2dyb3VuZENvbG9yID0gbV9wZW5k
aW5nQ29udGVudC5iYWNrZ3JvdW5kQ29sb3I7CisgICAgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rp
c3BsYXkgPSBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSB8fCBtX3BlbmRpbmdDb250ZW50
Lm5lZWRzRGlzcGxheTsKKyAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QudW5p
dGUobV9wZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXlSZWN0KTsKKyAgICBtX3BlbmRpbmdDb250
ZW50Lm5lZWRzRGlzcGxheSA9IGZhbHNlOworICAgIG1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNw
bGF5UmVjdCA9IEludFJlY3QoKTsKKyAgICBtX2NoYW5nZU1hc2sgPSBOb0NoYW5nZXM7CisgICAg
YWZ0ZXJDdXJyZW50TGF5ZXJTeW5jOgorICAgIGlmIChuZWVkc1RvSW52YWxpZGF0ZVRyYW5zZm9y
bSkKKyAgICAgICAgaW52YWxpZGF0ZVRyYW5zZm9ybSgpOworCisgICAgaWYgKG1fc3RhdGUubWFz
a0xheWVyKSB7CisgICAgICAgIG1fc3RhdGUubWFza0xheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0
ZShmYWxzZSk7CisgICAgICAgIGlmIChtX3N0YXRlLm1hc2tMYXllci0+bV9zaXplLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIG1fc3RhdGUubWFza0xheWVyLT5tX3NpemUgPSBtX3NpemU7CisgICAg
fQorCisgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyKQorICAgICAgICBtX3N0YXRlLnJlcGxp
Y2FMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGUoZmFsc2UpOworCisjaWYgMAorICAgIGlmICht
X3N0YXRlLmRpcnR5ICYmIG1fdGV4dHVyZSAmJiBtX3RleHR1cmUtPmFsbG93T2ZmbGluZVRleHR1
cmVVcGxvYWQoKSkKKyAgICAgICAgdXBsb2FkVGV4dHVyZUZyb21Db250ZW50KDApOworI2VuZGlm
CisKKyAgICBpZiAoIXJlY3Vyc2UpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IGludCBj
aGlsZHJlblNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKKyAgICBmb3IgKGludCBpID0gY2hpbGRy
ZW5TaXplLTE7IGkgPj0gMDsgLS1pKQorICAgICAgICBtX2NoaWxkcmVuW2ldLT5zeW5jQ29tcG9z
aXRpbmdTdGF0ZSh0cnVlKTsKK30KKworR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OkdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKKyAgICA6
IEdyYXBoaWNzTGF5ZXIoY2xpZW50KQorICAgICwgbV9ub2RlKG5ldyBUZXh0dXJlTWFwcGVyTm9k
ZSh0aGlzKSkKK3sKK30KKwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TmFt
ZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgbV9ub2RlLT5tX25hbWUgPSBuYW1lOworfQor
CitHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6fkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
KCkKK3sKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpOiBUaGUgY3VycmVudCBzaXpl
IG1pZ2h0IGNoYW5nZSwgdGh1cyB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgd2hvbGUgZGlzcGxheS4K
KyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROZWVkc0Rpc3BsYXkoKQor
eworICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXkgPSB0cnVlOworICAg
IG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpEaXNwbGF5Q2hhbmdlKTsK
K30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3sKKyAgICBpZiAobV9ub2RlLT5tX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheSkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXlS
ZWN0LnVuaXRlKEludFJlY3QocmVjdCkpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1
cmVNYXBwZXJOb2RlOjpEaXNwbGF5Q2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xh
eWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0UGFyZW50KEdy
YXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVN
YXBwZXJOb2RlOjpQYXJlbnRDaGFuZ2UpOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFBhcmVudChs
YXllcik7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK2Jvb2wgR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OnNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xh
eWVyKj4mIGNoaWxkcmVuKQoreworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBw
ZXJOb2RlOjpDaGlsZHJlbkNoYW5nZSk7CisgICAgcmV0dXJuIEdyYXBoaWNzTGF5ZXI6OnNldENo
aWxkcmVuKGNoaWxkcmVuKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwor
dm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGQoR3JhcGhpY3NMYXllciog
bGF5ZXIpCit7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNo
aWxkcmVuQ2hhbmdlKTsKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZChsYXllcik7Cit9CisK
Ky8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6OmFkZENoaWxkQXRJbmRleChHcmFwaGljc0xheWVyKiBsYXllciwgaW50IGluZGV4
KQoreworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChsYXllciwgaW5kZXgpOwor
ICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDaGlsZHJlbkNoYW5n
ZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkQWJvdmUoR3JhcGhpY3NMYXllciogbGF5ZXIsIEdy
YXBoaWNzTGF5ZXIqIHNpYmxpbmcpCit7CisgICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJv
dmUobGF5ZXIsIHNpYmxpbmcpOworICAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFw
cGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIu
aCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRDaGlsZEJlbG93KEdy
YXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQoreworCisgICAgR3Jh
cGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhsYXllciwgc2libGluZyk7CisgICAgbV9ub2RlLT5u
b3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNoaWxkcmVuQ2hhbmdlKTsKK30KKworLyog
XHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLworYm9vbCBHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6cmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFwaGljc0xheWVy
KiBuZXdDaGlsZCkKK3sKKyAgICBpZiAoR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKG9sZENo
aWxkLCBuZXdDaGlsZCkpIHsKKyAgICAgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1h
cHBlck5vZGU6OkNoaWxkcmVuQ2hhbmdlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyov
Cit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpyZW1vdmVGcm9tUGFyZW50KCkKK3sK
KyAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisgICAgbV9ub2RlLT5ub3RpZnlD
aGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlBhcmVudENoYW5nZSk7CisgICAgR3JhcGhpY3NMYXll
cjo6cmVtb3ZlRnJvbVBhcmVudCgpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkK
KyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRNYXNrTGF5ZXIoR3JhcGhp
Y3NMYXllciogdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IG1hc2tMYXllcigpKQorICAgICAg
ICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVyKHZhbHVlKTsKKyAgICBt
X25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6TWFza0xheWVyQ2hhbmdlKTsK
K30KKworCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKiB2YWx1
ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gcmVwbGljYUxheWVyKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcih2YWx1ZSk7CisgICAgbV9u
b2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlJlcGxpY2FMYXllckNoYW5nZSk7
Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHZhbHVlKQorewor
ICAgIGlmICh2YWx1ZSA9PSBwb3NpdGlvbigpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhp
Y3NMYXllcjo6c2V0UG9zaXRpb24odmFsdWUpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRl
eHR1cmVNYXBwZXJOb2RlOjpQb3NpdGlvbkNoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhp
Y3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldEFuY2hv
clBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IGFu
Y2hvclBvaW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRBbmNo
b3JQb2ludCh2YWx1ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5v
ZGU6OkFuY2hvclBvaW50Q2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgp
CisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0U2l6ZShjb25zdCBGbG9h
dFNpemUmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBzaXplKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNpemUodmFsdWUpOworICAgIG1fbm9kZS0+bm90
aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpTaXplQ2hhbmdlKTsKK30KKworLyogXHJlaW1w
IChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6
c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB2YWx1ZSkKK3sKKyAgICBp
ZiAodmFsdWUgPT0gdHJhbnNmb3JtKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNz
TGF5ZXI6OnNldFRyYW5zZm9ybSh2YWx1ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4
dHVyZU1hcHBlck5vZGU6OlRyYW5zZm9ybUNoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhp
Y3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENoaWxk
cmVuVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB2YWx1ZSkKK3sKKyAgICBp
ZiAodmFsdWUgPT0gY2hpbGRyZW5UcmFuc2Zvcm0oKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdy
YXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuVHJhbnNmb3JtKHZhbHVlKTsKKyAgICBtX25vZGUtPm5v
dGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5UcmFuc2Zvcm1DaGFuZ2UpOwor
fQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyOjpzZXRQcmVzZXJ2ZXMzRChib29sIHZhbHVlKQoreworICAgIGlmICh2YWx1
ZSA9PSBwcmVzZXJ2ZXMzRCgpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6
c2V0UHJlc2VydmVzM0QodmFsdWUpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVN
YXBwZXJOb2RlOjpQcmVzZXJ2ZXMzRENoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NM
YXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE1hc2tzVG9C
b3VuZHMoYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gbWFza3NUb0JvdW5kcygpKQor
ICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza3NUb0JvdW5kcyh2YWx1
ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6Ok1hc2tzVG9C
b3VuZHNDaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lk
IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXREcmF3c0NvbnRlbnQoYm9vbCB2YWx1ZSkK
K3sKKyAgICBpZiAodmFsdWUgPT0gZHJhd3NDb250ZW50KCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6RHJhd3NDb250ZW50Q2hh
bmdlKTsKKyAgICBHcmFwaGljc0xheWVyOjpzZXREcmF3c0NvbnRlbnQodmFsdWUpOworfQorCisv
KiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIHZhbHVlKQoreworICAgIGlm
ICh2YWx1ZSA9PSBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQuYmFja2dyb3VuZENvbG9yKQorICAg
ICAgICByZXR1cm47CisgICAgbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xv
ciA9IHZhbHVlOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tncm91bmRDb2xvcih2YWx1ZSk7
CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkJhY2tncm91bmRD
b2xvckNoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQg
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmNsZWFyQmFja2dyb3VuZENvbG9yKCkKK3sKKyAg
ICBpZiAoIW1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5kQ29sb3IuaXNWYWxpZCgp
KQorICAgICAgICByZXR1cm47CisgICAgbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50LmJhY2tncm91
bmRDb2xvciA9IENvbG9yKCk7CisgICAgR3JhcGhpY3NMYXllcjo6Y2xlYXJCYWNrZ3JvdW5kQ29s
b3IoKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6QmFja2dy
b3VuZENvbG9yQ2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwor
dm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNPcGFxdWUoYm9vbCB2
YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gY29udGVudHNPcGFxdWUoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50
c09wYXF1ZUNoYW5nZSk7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUodmFs
dWUpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkoYm9vbCB2YWx1ZSkKK3sK
KyAgICBpZiAodmFsdWUgPT0gYmFja2ZhY2VWaXNpYmlsaXR5KCkpCisgICAgICAgIHJldHVybjsK
KyAgICBHcmFwaGljc0xheWVyOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkodmFsdWUpOworICAgIG1f
bm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpCYWNrZmFjZVZpc2liaWxpdHlD
aGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRPcGFjaXR5KGZsb2F0IHZhbHVlKQoreworICAgIGlm
ICh2YWx1ZSA9PSBvcGFjaXR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVy
OjpzZXRPcGFjaXR5KHZhbHVlKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFw
cGVyTm9kZTo6T3BhY2l0eUNoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5o
KQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzUmVjdChj
b25zdCBJbnRSZWN0JiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gY29udGVudHNSZWN0KCkp
CisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1JlY3QodmFs
dWUpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50
c1JlY3RDaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lk
IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGlt
YWdlKQoreworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDb250
ZW50Q2hhbmdlKTsKKyAgICBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGUgPSBp
bWFnZSA/IFRleHR1cmVNYXBwZXJOb2RlOjpEaXJlY3RJbWFnZUNvbnRlbnRUeXBlIDogVGV4dHVy
ZU1hcHBlck5vZGU6OkhUTUxDb250ZW50VHlwZTsKKyAgICBtX25vZGUtPm1fcGVuZGluZ0NvbnRl
bnQuaW1hZ2UgPSBpbWFnZTsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2Uo
aW1hZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c0JhY2tncm91bmRDb2xvcihjb25zdCBD
b2xvciYgY29sb3IpCit7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5v
ZGU6OkNvbnRlbnRDaGFuZ2UpOworICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5jb250ZW50
VHlwZSA9IFRleHR1cmVNYXBwZXJOb2RlOjpDb2xvckNvbnRlbnRUeXBlOworICAgIG1fbm9kZS0+
bV9wZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsKKyAgICBHcmFwaGljc0xh
eWVyOjpzZXRDb250ZW50c0JhY2tncm91bmRDb2xvcihjb2xvcik7Cit9CisKKwordm9pZCBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIq
IG1lZGlhKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9NZWRpYShtZWRpYSk7
CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRDaGFu
Z2UpOworICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSA9IG1lZGlhID8g
VGV4dHVyZU1hcHBlck5vZGU6Ok1lZGlhQ29udGVudFR5cGUgOiBUZXh0dXJlTWFwcGVyTm9kZTo6
SFRNTENvbnRlbnRUeXBlOworICAgIGlmIChtZWRpYSkKKyAgICAgICAgbV9ub2RlLT5tX3BlbmRp
bmdDb250ZW50Lm1lZGlhID0gc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlclZpZGVvTGF5ZXIqPiht
ZWRpYSk7CisgICAgZWxzZQorICAgICAgICBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQubWVkaWEg
PSAwOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c09yaWVudGF0aW9uKENvbXBvc2l0aW5nQ29v
cmRpbmF0ZXNPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBpZiAoY29udGVudHNPcmll
bnRhdGlvbigpID09IG9yaWVudGF0aW9uKQorICAgICAgICByZXR1cm47CisgICAgbV9ub2RlLT5u
b3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRzT3JpZW50YXRpb25DaGFuZ2Up
OworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3JpZW50YXRpb24ob3JpZW50YXRpb24p
OworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKQor
eworICAgIG1fbm9kZS0+c3luY0NvbXBvc2l0aW5nU3RhdGUoZmFsc2UpOworICAgIG1fbm9kZS0+
cGVyZm9ybVBvc3RTeW5jT3BlcmF0aW9ucygpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5
ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzeW5jQ29tcG9zaXRp
bmdTdGF0ZSgpCit7CisgICAgR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGUoKTsK
KyAgICBtX25vZGUtPnN5bmNDb21wb3NpdGluZ1N0YXRlKHRydWUpOworICAgIG1fbm9kZS0+cGVy
Zm9ybVBvc3RTeW5jT3BlcmF0aW9ucygpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIu
aCkKKyAqLworTmF0aXZlTGF5ZXIgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6Om5hdGl2ZUxh
eWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ub2RlLmdldCgpOworfQorCisvKiBccmVpbXAg
KEdyYXBoaWNzTGF5ZXIuaCkKKyovCitQbGF0Zm9ybUxheWVyKiBHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbm9kZS5nZXQo
KTsKK30KKworUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVyOjpjcmVhdGUo
R3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQoreworICAgIHJldHVybiBuZXcgR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIoY2xpZW50KTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMWExNThmM2I3MGIwNzgxNjAzZjYzZDQzOTg0ZWU2OGE1N2EwMzZjMAot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
Ki8KKworI2lmbmRlZiBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcl9oCisjZGVmaW5lIEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyX2gKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50
LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNlbmRpZgorCisjZGVmaW5lIEVOQUJMRV9URVhNQVBf
QU5JTUFUSU9OIDAKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0dXJlTWFwcGVy
Tm9kZTsKK2NsYXNzIEJpdG1hcFRleHR1cmU7CitjbGFzcyBUZXh0dXJlTWFwcGVyOworCitjbGFz
cyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciA6IHB1YmxpYyBHcmFwaGljc0xheWVyIHsKKyAg
ICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlck5vZGU7CisKK3B1YmxpYzoKKyAgICBHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcihHcmFwaGljc0xheWVyQ2xpZW50Kik7CisgICAgdmlydHVhbCB+
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoKTsKKworICAgIC8vIHJlaW1wcyBmcm9tIEdyYXBo
aWNzTGF5ZXIuaAorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZp
cnR1YWwgdm9pZCBzZXRQYXJlbnQoR3JhcGhpY3NMYXllciogbGF5ZXIpOworICAgIHZpcnR1YWwg
Ym9vbCBzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+Jik7CisgICAgdmly
dHVhbCB2b2lkIGFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRk
Q2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqLCBpbnQgaW5kZXgpOworICAgIHZpcnR1YWwgdm9p
ZCBhZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJs
aW5nKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBsYXll
ciwgR3JhcGhpY3NMYXllciogc2libGluZyk7CisgICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGls
ZChHcmFwaGljc0xheWVyKiBvbGRDaGlsZCwgR3JhcGhpY3NMYXllciogbmV3Q2hpbGQpOworICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVGcm9tUGFyZW50KCk7CisgICAgdmlydHVhbCB2b2lkIHNldE1h
c2tMYXllcihHcmFwaGljc0xheWVyKiBsYXllcik7CisgICAgdmlydHVhbCB2b2lkIHNldFBvc2l0
aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHApOworICAgIHZpcnR1YWwgdm9pZCBzZXRBbmNob3JQb2lu
dChjb25zdCBGbG9hdFBvaW50M0QmIHApOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSk7CisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCk7CisgICAgdmlydHVhbCB2b2lkIHNldENoaWxkcmVuVHJh
bnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0UHJlc2VydmVzM0QoYm9vbCBiKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza3NUb0JvdW5k
cyhib29sIGIpOworICAgIHZpcnR1YWwgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCBiKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CisgICAgdmly
dHVhbCB2b2lkIGNsZWFyQmFja2dyb3VuZENvbG9yKCk7CisgICAgdmlydHVhbCB2b2lkIHNldENv
bnRlbnRzT3BhcXVlKGJvb2wgYik7CisgICAgdmlydHVhbCB2b2lkIHNldEJhY2tmYWNlVmlzaWJp
bGl0eShib29sIGIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgcik7Cisg
ICAgdmlydHVhbCB2b2lkIHNldFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7CisgICAgdmlydHVhbCB2
b2lkIHNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKik7CisgICAgdmlydHVhbCB2b2lk
IHNldENvbnRlbnRzQmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CisjaWYgRU5BQkxFKDNE
X0NBTlZBUykKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0dyYXBoaWNzQ29udGV4dDNE
KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgdmlydHVhbCB2b2lkIHNldEdyYXBoaWNz
Q29udGV4dDNETmVlZHNEaXNwbGF5KCk7CisjZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29u
dGVudHNPcmllbnRhdGlvbihDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gb3JpZW50
YXRpb24pOworICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOworICAgIHZp
cnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIHZpcnR1YWwgTmF0
aXZlTGF5ZXIgbmF0aXZlTGF5ZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIq
IHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBhZGRBbmltYXRpb24o
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiAvKmJveFNpemUqLywgY29u
c3QgQW5pbWF0aW9uKiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJp
bmcmIC8qa2V5ZnJhbWVzTmFtZSovLCBkb3VibGUgLyp0aW1lT2Zmc2V0Ki8pIHsgcmV0dXJuIGZh
bHNlOyB9CisKK3ByaXZhdGU6CisgICAgT3duUHRyPFRleHR1cmVNYXBwZXJOb2RlPiBtX25vZGU7
Cit9OworCit9CisjZW5kaWYgLy8gR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXJfaApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmMwMWJiYTdhZmI2OGE2ZjdjZjJhMjIzYjE4MjA1OTNjOTliY2ZmYzIKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgK
QEAgLTAsMCArMSwxMTcgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIFRleHR1cmVNYXBwZXJfaAorI2RlZmluZSBUZXh0dXJlTWFwcGVyX2gKKworI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiAoZGVmaW5lZChRVF9PUEVOR0xfTElC
KSkKKyAgICAjaWYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikgJiYgIWRlZmluZWQoVEVYTUFQX09Q
RU5HTF9FU18yKQorICAgICAgICAjZGVmaW5lIFRFWE1BUF9PUEVOR0xfRVNfMgorICAgICNlbmRp
ZgorI2VuZGlmCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRS
ZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0
cml4LmgiCisKKy8qCisgICAgVGV4dHVyZU1hcHBlciBpcyBhIG1lY2hhbmlzbSB0aGF0IGVuYWJs
ZXMgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIG9mIENTUyBhbmltYXRpb25zIChhY2NlbGVyYXRlZCBj
b21wb3NpdGluZykgd2l0aG91dAorICAgIGEgbmVlZCBmb3IgYSBwbGF0Zm9ybSBzcGVjaWZpYyBz
Y2VuZS1ncmFwaCBsaWJyYXJ5IGxpa2UgQ29yZUFuaW1hdGlvbnMgb3IgUUdyYXBoaWNzVmlldy4K
KyovCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGV4dHVyZU1hcHBlcjsKKworLy8g
QSAyRCB0ZXh0dXJlIHRoYXQgY2FuIGJlIHRoZSB0YXJnZXQgb2Ygc29mdHdhcmUgb3IgR0wgcmVu
ZGVyaW5nLgorY2xhc3MgQml0bWFwVGV4dHVyZSAgOiBwdWJsaWMgUmVmQ291bnRlZDxCaXRtYXBU
ZXh0dXJlPiB7CitwdWJsaWM6CisgICAgQml0bWFwVGV4dHVyZSgpIDogbV9sb2NrQ291bnQoMCkg
e30KKyAgICB2aXJ0dWFsIH5CaXRtYXBUZXh0dXJlKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wg
YWxsb3dPZmZsaW5lVGV4dHVyZVVwbG9hZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dmlydHVhbCB2b2lkIGRlc3Ryb3koKSA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHJlc2V0KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgb3BhcXVlID0gZmFsc2Up
CisgICAgeworICAgICAgICBtX2lzT3BhcXVlID0gb3BhcXVlOworICAgICAgICBtX2NvbnRlbnRT
aXplID0gc2l6ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBlbmRQYWludCgpID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KiBiZWdpblBhaW50TWVkaWEoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJlZ2luUGFpbnQoSW50
UmVjdCgwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSk7CisgICAgfQorICAg
IHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKSA9IDA7CisgICAgdmlydHVh
bCBib29sIHNhdmUoY29uc3QgU3RyaW5nICYpIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBpbmxp
bmUgdm9pZCBsb2NrKCkgeyArK21fbG9ja0NvdW50OyB9CisgICAgaW5saW5lIHZvaWQgdW5sb2Nr
KCkgeyAtLW1fbG9ja0NvdW50OyB9CisgICAgaW5saW5lIGJvb2wgaXNMb2NrZWQoKSB7IHJldHVy
biBtX2xvY2tDb3VudDsgfQorICAgIGlubGluZSBJbnRTaXplIGNvbnRlbnRTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9jb250ZW50U2l6ZTsgfQorICAgIGlubGluZSB2b2lkIHNldE9mZnNldChjb25z
dCBJbnRQb2ludCYgbykgeyBtX29mZnNldCA9IG87IH0KKyAgICBpbmxpbmUgSW50UG9pbnQgb2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KK3ByaXZhdGU6CisgICAgaW50IG1fbG9j
a0NvdW50OworICAgIEludFNpemUgbV9jb250ZW50U2l6ZTsKKyAgICBib29sIG1faXNPcGFxdWU7
CisgICAgSW50UG9pbnQgbV9vZmZzZXQ7Cit9OworCisvLyBBICJjb250ZXh0IiBjbGFzcyB1c2Vk
IHRvIGVuY2Fwc3VsYXRlIGFjY2VsZXJhdGVkIHRleHR1cmUgbWFwcGluZyBmdW5jdGlvbnM6IGku
ZS4gZHJhd2luZyBhIHRleHR1cmUKKy8vIG9udG8gdGhlIHNjcmVlbiBvciBpbnRvIGFub3RoZXIg
dGV4dHVyZSB3aXRoIGEgc3BlY2lmaWVkIHRyYW5zZm9ybSwgb3BhY2l0eSBhbmQgbWFzay4KK2Ns
YXNzIFRleHR1cmVNYXBwZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0dXJlTWFwcGVyPiB7Cisg
ICAgZnJpZW5kIGNsYXNzIEJpdG1hcFRleHR1cmU7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxUZXh0dXJlTWFwcGVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0Kik7CisgICAgdmly
dHVhbCB+VGV4dHVyZU1hcHBlcigpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJl
KGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHRhcmdldCwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCks
IGZsb2F0IG9wYWNpdHkgPSAxLjBmLCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSA9
IDApID0gMDsKKworICAgIC8vIG1ha2VzIGEgc3VyZmFjZSB0aGUgdGFyZ2V0IGZvciB0aGUgZm9s
bG93aW5nIGRyYXdUZXh0dXJlIGNhbGxzLgorICAgIHZpcnR1YWwgdm9pZCBiaW5kU3VyZmFjZShC
aXRtYXBUZXh0dXJlKiBzdXJmYWNlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50VG9UYXJn
ZXQoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEludFJlY3Qm
IHZpc2libGVSZWN0KQorICAgIHsKKyAgICAgICAgZHJhd1RleHR1cmUodGV4dHVyZSwgSW50UmVj
dCgwLCAwLCB0ZXh0dXJlLmNvbnRlbnRTaXplKCkud2lkdGgoKSwgdGV4dHVyZS5jb250ZW50U2l6
ZSgpLmhlaWdodCgpKSwgbWF0cml4LCBvcGFjaXR5LCAwKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0Q2xpcChjb25zdCBJbnRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBhbGxv
d1N1cmZhY2VGb3JSb290KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRt
YXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCkgPSAwOworICAgIHZpcnR1YWwgY29uc3QgY2hhciog
dHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cCgpIHt9CisKKyAgICBH
cmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2M7IH0K
KworcHJvdGVjdGVkOgorICAgIFRleHR1cmVNYXBwZXIoR3JhcGhpY3NDb250ZXh0KiBnYykgOiBt
X2djKGdjKSB7fQorICAgIEdyYXBoaWNzQ29udGV4dCogbV9nYzsKK307CisKK307CisKKyNlbmRp
ZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzZTlmYzk5
YWEzOTFlM2YwYjdmODZhNTFiODNiZTMzMjc1ZjcyZjUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5o
CkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
CisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJfaAorI2RlZmluZSBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcl9o
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3Mg
SW50UmVjdDsKK2NsYXNzIEludFNpemU7CitjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKKwor
CisvLyBHbHVlIGxheWVyIHRvIGNvbm5lY3QgdGhlIHRleG1hcCBsYXllciB0byB0aGUgcGxhdGZv
cm0gc3BlY2lmaWMgY29udGFpbmVyLgorY2xhc3MgVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQoKSB7fQorICAg
IHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNl
dE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHNldFNpemVDaGFuZ2VkKGNvbnN0IEludFNpemUmKSA9IDA7Cit9OworCitjbGFzcyBU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciB7CitwdWJsaWM6CisgICAgZW51bSBUeXBlIHsKKyAg
ICAgICAgQ29udGVudExheWVyLAorICAgICAgICBWaWRlb0xheWVyCisgICAgfTsKKworICAgIHZp
cnR1YWwgVHlwZSBsYXllclR5cGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB+VGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXIoKSB7fQorfTsKKworY2xhc3MgVGV4dHVyZU1hcHBlckNvbnRlbnRM
YXllciA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciB7CitwdWJsaWM6CisgICAg
dmlydHVhbCB2b2lkIHNldFBsYXRmb3JtTGF5ZXJDbGllbnQoVGV4dHVyZU1hcHBlckxheWVyQ2xp
ZW50KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UmVjdCYgZXhw
b3NlZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9w
YWNpdHkpIHt9CisgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGNsZWFudXBUZXh0dXJlTWFwcGVyKCkge30KKyAgICB2aXJ0dWFsIFR5cGUgbGF5
ZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gQ29udGVudExheWVyOyB9Cit9OworCisjaWYgRU5BQkxF
KFZJREVPKQorY2xhc3MgVGV4dHVyZU1hcHBlclZpZGVvTGF5ZXIgOiBwdWJsaWMgVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFw
aGljc0NvbnRleHQqKSA9IDA7CisgICAgdmlydHVhbCBUeXBlIGxheWVyVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIFZpZGVvTGF5ZXI7IH0KK307CisjZW5kaWYKKworfQorCisjZW5kaWYgLy8gVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJfaApkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xZ3JhcGhp
Y3N3ZWJ2aWV3LmNwcCBiL1dlYktpdC9xdC9BcGkvcWdyYXBoaWNzd2Vidmlldy5jcHAKaW5kZXgg
YmNlMGI2MWJiMjU5ZjMzMDM3OWVkYTBmMjE5Yzg1Njk3MjAxNzc5Ni4uYzQzOTI5NDJlMWI0ODJh
NTk0NjI3MGY0YTA2OTAwZWM3MTVhOGIyZSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0FwaS9xZ3Jh
cGhpY3N3ZWJ2aWV3LmNwcAorKysgYi9XZWJLaXQvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3Bw
CkBAIC0yNDcsNiArMjQ3LDcgQEAgUUdyYXBoaWNzV2ViVmlldzo6UUdyYXBoaWNzV2ViVmlldyhR
R3JhcGhpY3NJdGVtKiBwYXJlbnQpCiAgICAgc2V0QWNjZXB0VG91Y2hFdmVudHModHJ1ZSk7CiAg
ICAgc2V0Rm9jdXNQb2xpY3koUXQ6OlN0cm9uZ0ZvY3VzKTsKICAgICBzZXRGbGFnKFFHcmFwaGlj
c0l0ZW06Okl0ZW1DbGlwc0NoaWxkcmVuVG9TaGFwZSwgdHJ1ZSk7CisgICAgU2V0dGluZ3M6OnNl
dEFuaW1hdGlvblRpbWVyRGVsYXkoMC4wMTY3KTsKICNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19T
VE9SRSkKICAgICBRT2JqZWN0Ojpjb25uZWN0KHRoaXMsIFNJR05BTChzY2FsZUNoYW5nZWQoKSks
IHRoaXMsIFNMT1QoX3Ffc2NhbGVDaGFuZ2VkKCkpKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L3F0L0NoYW5nZUxvZyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggYjdjZTg5Y2RmMDU3
YjJhMjE2MGExM2Y1ZWVjMjZiYzU5YjdmZTkwNi4uMzQ4ZWZlMGYzY2JiNmUzODA1MjY1MjUzMWEy
YTRiYjJlNThjOGRkOCAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9XZWJL
aXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMTAtMDMgIE5vJ2FtIFJvc2Vu
dGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbGxvdyBDU1MgYW5pbWF0aW9ucyB0byBydW4gYXQg
bW9yZSB0aGFuIDQwRlBTCisKKyAgICAgICAgTWFrZSB0aGUgYW5pbWF0aW9uIGNvbnRyb2xsZXIg
cnVuIGF0IDYwIEZQUyB3aGVuIHVzaW5nIGEgUUdyYXBoaWNzV2ViVmlldy4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDYyODMKKworICAgICAgICAq
IEFwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKFFHcmFwaGljc1dlYlZpZXc6OlFH
cmFwaGljc1dlYlZpZXcpOgorCiAyMDEwLTEwLTAyICBEaWVnbyBHb256YWxleiAgPGRpZWdvaGNn
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3Rp
YW5zZW4uCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69602</attachid>
            <date>2010-10-04 00:22:34 -0700</date>
            <delta_ts>2010-10-04 00:25:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47070-20101004092231.patch</filename>
            <type>text/plain</type>
            <size>121819</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MDViOTc3NTc3NjQwNTgwMDgyMjQyYzQ3MDAzZGVhYWJmOThlMTU3MS4uNDkxZGU0YjE2MjdiOGZj
NGViZGE0ZWM4NDcxN2FkYzAzZmUyZGEyZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxODIgQEAKKzIwMTAtMTAtMDMgIE5v
J2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVGV4bWFwXSBbUXRdIFRleHR1cmUg
bWFwcGVyIGluaXRpYWwgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MDcwCisKKyAgICAgICAgTm8gbmV3IHRlc3RzOiBpbml0
aWFsIHBhdGNoLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVN
YXBwZXJHTC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGVidWdHTENvbW1hbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6bG9hZFJlY3RUb1NoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBUZXh0dXJlR0w6OkJpdG1hcFRleHR1cmVHTCk6CisgICAgICAgIChXZWJDb3JlOjpUZXht
YXBTaGFkZXJJbmZvOjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4
bWFwU2hhZGVySW5mbzo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4
bWFwU2hhZGVySW5mbzo6Y3JlYXRlU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJHTDo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnJlc2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6YmVnaW5QYWludCk6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmVuZFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleG1hcEdMU2hhZGVyVGV4dHVyZXM6OmZpbmRPckNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXhtYXBHTFNoYWRlclRleHR1cmVzOjpkZXJlZik6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBUZXh0dXJlR0w6OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBUZXh0dXJlR0w6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdM
Ojppc1ZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6c2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVQcm9qZWN0aW9uTWF0cml4KToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJHTDo6Y2xlYW51cCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyR0w6OmJpbmRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJH
TDo6c2V0Q2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OnBhaW50VG9U
YXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0dXJl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjp+VGV4dHVyZU1hcHBl
ckdMKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6YWxsb3dTdXJmYWNlRm9y
Um9vdCk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcjo6flJH
QkEzMlByZW11bHRpbXBsaWVkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Om5wb3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNhY2hlOjpFbnRy
eTo6RW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNhY2hlOjpFbnRyeTo6
Y2FsY3VsYXRlQ29zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ2FjaGU6OkVu
dHJ5OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWNoZTo6
VGV4dHVyZU1hcHBlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWNo
ZTo6cHVyZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNhY2hlOjptYXJrKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWNoZUxvY2s6OlRleHR1cmVNYXBwZXJD
YWNoZUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNhY2hlTG9jazo6flRl
eHR1cmVNYXBwZXJDYWNoZUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5v
ZGU6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJOb2RlOjpub3RpZnlBbmltYXRpb25TdGFydGVkQXN5bmMpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGU6OlRyYW5zZm9ybURhdGE6OlRyYW5zZm9ybURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnREYXRhOjpDb250ZW50RGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6dGFyZ2V0UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6ZnVsbFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnJlcGxpY2FSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJOb2RlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpHcmFwaGljc0xheWVy
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpTdGF0ZTo6
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldE5lZWRzRGlz
cGxheUluUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c2V0TmVl
ZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzZXRQbGF0
Zm9ybUxheWVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVHcmFwaGljc0xheWVy
c1pWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpzb3J0QnlaT3JkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlck5vZGU6Omhhc1N1cmZhY2VEZXNjZW5kYW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGU6OmNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6dG9UZXh0dXJlTWFwcGVyTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZUxheWVyVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6aW5pdGlhbGl6ZVRleHR1cmVNYXBwZXIp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OlRleHR1cmVNYXBwZXJOb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpyb290TGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmludmFsaWRhdGVUcmFuc2Zvcm0pOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVMb2NhbFRyYW5zZm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6ZmxhdHRlblRvMkRTcGFj
ZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpuZWFy
ZXN0U3VyZmFjZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNv
bXB1dGVSZXBsaWNhVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJO
b2RlOjpjb21wdXRlVHJhbnNmb3JtYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJOb2RlOjpiZWdpbkFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyTm9kZTo6ZW5kQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJO
b2RlOjp1cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlck5vZGU6OnBhaW50U2VsZik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
Tm9kZTo6cGFpbnRSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5v
ZGU6OmNsZWFudXBUZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJOb2RlOjp+VGV4dHVyZU1hcHBlck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlck5vZGU6OnNldFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
Tm9kZTo6c2V0T3BhY2l0eUZyb21BbmltYXRpb25GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyTm9kZTo6bm90aWZ5VHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6bm90aWZ5T3BhY2l0eUFuaW1hdGlvblJ1
bm5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6Om5vdGlmeUFuaW1h
dGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldFRy
YW5zZm9ybUZyb21BbmltYXRpb25GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyTm9kZTo6bm90aWZ5Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJO
b2RlOjpwZXJmb3JtUG9zdFN5bmNPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6On5HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcjo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldFBhcmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q2hpbGRyZW4pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRDaGlsZEF0SW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkQWJv
dmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENo
aWxkQmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OnJlcGxhY2VDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcjo6c2V0TWFza0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0UG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldEFuY2hvclBvaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRUcmFuc2Zvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENoaWxk
cmVuVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyOjpzZXRQcmVzZXJ2ZXMzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcjo6c2V0TWFza3NUb0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmNsZWFyQmFja2dyb3VuZENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRD
b250ZW50c09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNCYWNr
Z3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI6OnNldENvbnRlbnRzVG9NZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlz
TGF5ZXJPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
OjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcjo6bmF0aXZlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXI6OnBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFRleHR1cmU6OkJpdG1hcFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwVGV4dHVyZTo6fkJpdG1hcFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
VGV4dHVyZTo6YWxsb3dPZmZsaW5lVGV4dHVyZVVwbG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBUZXh0dXJlOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjpi
ZWdpblBhaW50TWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6c2F2ZSk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjpsb2NrKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFRleHR1cmU6OnVubG9jayk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0
dXJlOjppc0xvY2tlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjpjb250ZW50
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjpzZXRPZmZzZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6b2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXI6On5UZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXI6OnBhaW50VG9UYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
cjo6Y2xlYW51cCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpncmFwaGljc0Nv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6VGV4dHVyZU1hcHBlcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyQ2xp
ZW50Ojp+VGV4dHVyZU1hcHBlckxheWVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyOjp+VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6cGFpbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6Y2xlYW51cFRleHR1cmVNYXBw
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6bGF5ZXJU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJWaWRlb0xheWVyOjpsYXllclR5
cGUpOgorCisyMDEwLTEwLTAzICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tp
YS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWxsb3cgQ1NTIGFuaW1hdGlvbnMgdG8gcnVuIGF0IG1vcmUgdGhhbiA0MEZQUworICAgICAgICBB
ZGQgYSBzZXR0aW5ncyBmdW5jdGlvbiAoc2V0QW5pbWF0aW9uVGltZXJEZWxheSkgdGhhdCBhZmZl
Y3RzIEFuaW1hdGlvbkNvbnRyb2xsZXIncyB0aW1lci4gVGhpcyBpcyBpbiBhY2NvcmRhbmNlIHRv
CisgICAgICAgIGhvdyB0aGUgRE9NVGltZXIgbWluaW11bSBpbnRlcnZhbCBzZXR0aW5ncyB3ZXJl
IGRvbmUgaW4gYnVnIDQ1MzYyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDYyODMKKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhpcyBidWcgZG9l
c24ndCBjcmVhdGUgYW55IG5ldyB0ZXN0YWJsZSBiZWhhdmlvci4KKworICAgICAgICAqIHBhZ2Uv
U2V0dGluZ3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNldEFuaW1hdGlvblRp
bWVyRGVsYXkpOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuaDoKKyAgICAgICAgKiBwYWdlL2Fu
aW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25UaW1lcik6CisgICAgICAgICog
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6
QW5pbWF0aW9uQ29udHJvbGxlcjo6YW5pbWF0aW9uVGltZXJEZWxheSk6CisgICAgICAgIChXZWJD
b3JlOjpBbmltYXRpb25Db250cm9sbGVyOjpzZXRBbmltYXRpb25UaW1lckRlbGF5KToKKwogMjAx
MC0xMC0wMyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEhvbGdlciBGcmV5dGhlci4KQEAgLTYyMDcwLDcgKzYyMjQ5LDcgQEAKIAogICAgICAg
ICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEuCiAKLSAgICAgICAgQnVnwqA0MTM0
MCAtIFtHU3RyZWFtZXJdIFN1YnRsZSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgc2Vla3MKKyAgICAg
ICAgQnVnIDQxMzQwIC0gW0dTdHJlYW1lcl0gU3VidGxlIHJhY2UgY29uZGl0aW9uIGR1cmluZyBz
ZWVrcwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEz
NDAKIAogICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3Vy
Y2VHU3RyZWFtZXIuY3BwOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcCBi
L1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKaW5kZXggM2M5NWI1OWQ2NzdhNWExMWEwNTc1ZWU2
OGUyMDc5NjQ1ZDllMGQzMC4uYzhiYzNmMWE1NTU4ZTMyNmI0NjJhZTUxZDc2NzA1YTVlZmVjZTY0
MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAorKysgYi9XZWJDb3JlL3Bh
Z2UvU2V0dGluZ3MuY3BwCkBAIC00MTIsNiArNDEyLDExIEBAIHZvaWQgU2V0dGluZ3M6OnNldE1p
bkRPTVRpbWVySW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQogICAgIERPTVRpbWVyOjpzZXRNaW5U
aW1lckludGVydmFsKGludGVydmFsKTsKIH0KIAordm9pZCBTZXR0aW5nczo6c2V0QW5pbWF0aW9u
VGltZXJEZWxheShkb3VibGUgdmFsdWUpCit7CisgICAgQW5pbWF0aW9uQ29udHJvbGxlcjo6c2V0
QW5pbWF0aW9uVGltZXJEZWxheSh2YWx1ZSk7Cit9CisKIHZvaWQgU2V0dGluZ3M6OnNldFVzZXNQ
YWdlQ2FjaGUoYm9vbCB1c2VzUGFnZUNhY2hlKQogewogICAgIGlmIChtX3VzZXNQYWdlQ2FjaGUg
PT0gdXNlc1BhZ2VDYWNoZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oIGIv
V2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKaW5kZXggYzIxN2EwZDMxMzcxNjYyY2NhNmQ2OGMxODg0
MGQ3MWE2MTMyOTA0Mi4uN2M3MTczNTI2YTE5Mjg5ODY0ODQ2ZGIwOTEwMTY2NTE1NDI2ZThlMSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKKysrIGIvV2ViQ29yZS9wYWdlL1Nl
dHRpbmdzLmgKQEAgLTIwMCw3ICsyMDAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZvaWQgc2V0RE9NUGFzdGVBbGxvd2VkKGJvb2wpOwogICAgICAgICBib29sIGlzRE9NUGFzdGVB
bGxvd2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc0RPTVBhc3RlQWxsb3dlZDsgfQogICAgICAgICAK
LSAgICAgICAgc3RhdGljIHZvaWQgc2V0TWluRE9NVGltZXJJbnRlcnZhbChkb3VibGUpOyAvLyBJ
bnRlcnZhbCBzcGVjaWZpZWQgaW4gc2Vjb25kcy4KKyAgICAgICAgc3RhdGljIHZvaWQgc2V0TWlu
RE9NVGltZXJJbnRlcnZhbChkb3VibGUpOyAvLyBJbnRlcnZhbCBzcGVjaWZpZWQgaW4gc2Vjb25k
cy4gICAgICAgIAorICAgICAgICBzdGF0aWMgdm9pZCBzZXRBbmltYXRpb25UaW1lckRlbGF5KGRv
dWJsZSk7IC8vIFRpbWVyIGRlbGF5IHNwZWNpZmllZCBpbiBzZWNvbmRzLgogICAgICAgICAKICAg
ICAgICAgdm9pZCBzZXRVc2VzUGFnZUNhY2hlKGJvb2wpOwogICAgICAgICBib29sIHVzZXNQYWdl
Q2FjaGUoKSBjb25zdCB7IHJldHVybiBtX3VzZXNQYWdlQ2FjaGU7IH0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGI1ZDg3ZTYxN2FlMjA1
NDYwYmYxNDFiMWE3MDA5NGQ5YTUzODU1MGUuLjY3YzUxMDc4MmNhNWJlZTkxNTRlNWU2ZmYwMWEz
OGYxMGY0NjhiMzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9u
Q29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250
cm9sbGVyLmNwcApAQCAtNDMsNyArNDMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0
YXRpYyBjb25zdCBkb3VibGUgY0FuaW1hdGlvblRpbWVyRGVsYXkgPSAwLjAyNTsKK2RvdWJsZSBB
bmltYXRpb25Db250cm9sbGVyOjpzX2FuaW1hdGlvblRpbWVyRGVsYXkgPSAwLjAyNTsKIHN0YXRp
YyBjb25zdCBkb3VibGUgY0JlZ2luQW5pbWF0aW9uVXBkYXRlVGltZU5vdFNldCA9IC0xOwogCiBB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUoRnJh
bWUqIGZyYW1lKQpAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OnVwZGF0ZUFuaW1hdGlvblRpbWVyKGJvb2wgY2FsbFNldENoYW5nZWQvKiA9IGZhCiAg
ICAgLy8gSWYgd2Ugd2FudCBzZXJ2aWNlIGltbWVkaWF0ZWx5LCB3ZSBzdGFydCBhIHJlcGVhdGlu
ZyB0aW1lciB0byByZWR1Y2UgdGhlIG92ZXJoZWFkIG9mIHN0YXJ0aW5nCiAgICAgaWYgKG5lZWRz
U2VydmljZSA9PSAwKSB7CiAgICAgICAgIGlmICghbV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgp
IHx8IG1fYW5pbWF0aW9uVGltZXIucmVwZWF0SW50ZXJ2YWwoKSA9PSAwKQotICAgICAgICAgICAg
bV9hbmltYXRpb25UaW1lci5zdGFydFJlcGVhdGluZyhjQW5pbWF0aW9uVGltZXJEZWxheSk7Cisg
ICAgICAgICAgICBtX2FuaW1hdGlvblRpbWVyLnN0YXJ0UmVwZWF0aW5nKEFuaW1hdGlvbkNvbnRy
b2xsZXI6OmFuaW1hdGlvblRpbWVyRGVsYXkoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xs
ZXIuaCBiL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5oCmluZGV4
IDQ1MjhkYWUxNWUxZjEwZGNhOTYzMTQ4ZTRhNWNmMGY0MWUwYmM0NWYuLmUxMDRmMDMwYzJlM2Mx
OTQxMTY0OTg5NDQ2NWM4ZTMwOWIzMWIyZmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQ29udHJvbGxlci5oCkBAIC03MCw4ICs3MCwxMiBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgc3RhdGljIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZEFuaW1hdGlvbk9mUHJvcGVydHkoQ1NT
UHJvcGVydHlJRCk7CiAKKyAgICBzdGF0aWMgZG91YmxlIGFuaW1hdGlvblRpbWVyRGVsYXkoKSB7
IHJldHVybiBzX2FuaW1hdGlvblRpbWVyRGVsYXk7IH0KKyAgICBzdGF0aWMgdm9pZCBzZXRBbmlt
YXRpb25UaW1lckRlbGF5KGRvdWJsZSB2YWx1ZSkgeyBzX2FuaW1hdGlvblRpbWVyRGVsYXkgPSB2
YWx1ZTsgfQorCiBwcml2YXRlOgogICAgIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKiBtX2Rh
dGE7CisgICAgc3RhdGljIGRvdWJsZSBzX2FuaW1hdGlvblRpbWVyRGVsYXk7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMDlhYWM3OTA1ZGNmZDBiZTU1
MjZlMGVlODgxNjhkNTljYWFjMDY5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMCwwICsxLDY1MSBAQAor
LyoKKyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkhhc2hNYXAuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1
ZGUgIlBhc3NSZWZQdHIuaCIKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiVGlt
ZXIuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgZGVmaW5lZChURVhNQVBfT1BFTkdMX0VT
XzIpCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjZWxpZiBQTEFURk9STShNQUMpCisjaW5jbHVk
ZSA8Z2wuaD4KKyNlbHNlCisjaW5jbHVkZSA8R0wvZ2wuaD4KKyNlbmRpZgorCisjaWZuZGVmIFRF
WE1BUF9PUEVOR0xfRVMyCitleHRlcm4gIkMiIHsKKyAgICB2b2lkIGdsVW5pZm9ybTFmKEdMaW50
LCBHTGZsb2F0KTsKKyAgICB2b2lkIGdsVW5pZm9ybTFpKEdMaW50LCBHTGludCk7CisgICAgdm9p
ZCBnbFZlcnRleEF0dHJpYlBvaW50ZXIoR0x1aW50LCBHTGludCwgR0xlbnVtLCBHTGJvb2xlYW4s
IEdMc2l6ZWksIGNvbnN0IEdMdm9pZCAqKTsKKyAgICB2b2lkIGdsVW5pZm9ybTRmKEdMaW50LCBH
TGZsb2F0LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZsb2F0KTsKKyAgICB2b2lkIGdsU2hhZGVyU291
cmNlKEdMdWludCwgR0xzaXplaSwgY29uc3QgY2hhciAqKiwgY29uc3QgR0xpbnQgKik7CisgICAg
R0x1aW50IGdsQ3JlYXRlU2hhZGVyKEdMZW51bSk7CisgICAgdm9pZCBnbFNoYWRlclNvdXJjZShH
THVpbnQsIEdMc2l6ZWksIGNvbnN0IGNoYXIgKiosIGNvbnN0IEdMaW50ICopOworICAgIHZvaWQg
Z2xDb21waWxlU2hhZGVyKEdMdWludCk7CisgICAgdm9pZCBnbERlbGV0ZVNoYWRlcihHTHVpbnQp
OworICAgIHZvaWQgZ2xVbmlmb3JtTWF0cml4NGZ2KEdMaW50LCBHTHNpemVpLCBHTGJvb2xlYW4s
IGNvbnN0IEdMZmxvYXQgKik7CisgICAgR0x1aW50IGdsQ3JlYXRlUHJvZ3JhbSgpOworICAgIHZv
aWQgZ2xBdHRhY2hTaGFkZXIoR0x1aW50LCBHTHVpbnQpOworICAgIHZvaWQgZ2xMaW5rUHJvZ3Jh
bShHTHVpbnQpOworICAgIHZvaWQgZ2xVc2VQcm9ncmFtKEdMdWludCk7CisgICAgdm9pZCBnbERp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQpOworICAgIHZvaWQgZ2xFbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShHTHVpbnQpOworICAgIHZvaWQgZ2xCaW5kRnJhbWVidWZmZXIoR0xlbnVtIHRh
cmdldCwgR0x1aW50IGZyYW1lYnVmZmVyKTsKKyAgICB2b2lkIGdsRGVsZXRlRnJhbWVidWZmZXJz
KEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50ICpmcmFtZWJ1ZmZlcnMpOworICAgIHZvaWQgZ2xHZW5G
cmFtZWJ1ZmZlcnMoR0xzaXplaSBuLCBHTHVpbnQgKmZyYW1lYnVmZmVycyk7CisgICAgdm9pZCBn
bEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBH
TGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwpOworICAgIHZvaWQg
Z2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHTGVudW0gdGFyZ2V0LCBHTGVu
dW0gYXR0YWNobWVudCwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsKKyAgICB2b2lkIGds
QmluZEJ1ZmZlcihHTGVudW0sIEdMdWludCk7CisgICAgdm9pZCBnbERlbGV0ZUJ1ZmZlcnMoR0xz
aXplaSwgY29uc3QgR0x1aW50Kik7CisgICAgdm9pZCBnbEdlbkJ1ZmZlcnMoR0xzaXplaSwgR0x1
aW50Kik7CisgICAgdm9pZCBnbEJ1ZmZlckRhdGEoR0xlbnVtLCBHTHNpemVpcHRyLCBjb25zdCBH
THZvaWQqLCBHTGVudW0pOworICAgIHZvaWQgZ2xCdWZmZXJTdWJEYXRhKEdMZW51bSwgR0xzaXpl
aXB0ciwgR0xzaXplaXB0ciwgY29uc3QgR0x2b2lkKik7CisgICAgdm9pZCBnbEdldFByb2dyYW1J
bmZvTG9nKEdMdWludCBwcm9ncmFtLCBHTHNpemVpLCBHTHNpemVpKiwgR0xjaGFyKik7CisKKyNp
ZiAhUExBVEZPUk0oTUFDKQorICAgIEdMaW50IGdsR2V0VW5pZm9ybUxvY2F0aW9uKEdMdWludCwg
Y29uc3QgR0xjaGFyICopOworICAgIEdMaW50IGdsR2V0QXR0cmliTG9jYXRpb24oR0x1aW50LCBj
b25zdCBHTGNoYXIgKik7CisjZW5kaWYKK30KKyNlbmRpZgorCisKK25hbWVzcGFjZSBXVEYgewor
CisvLyBTdHJpbmdIYXNoIGlzIHRoZSBkZWZhdWx0IGhhc2ggZm9yIFN0cmluZwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRy
YWl0czxXZWJDb3JlOjpGbG9hdFJlY3Q+IDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxXZWJDb3Jl
OjpGbG9hdFJlY3Q+IHsKKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoV2Vi
Q29yZTo6RmxvYXRSZWN0JiBzbG90KSB7IHNsb3QgPSBXZWJDb3JlOjpGbG9hdFJlY3QoKTsgfQor
ICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYg
dmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IFdlYkNvcmU6OkZsb2F0UmVjdCgpOyB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxXZWJDb3JlOjpGbG9hdFJlY3Q+IHsKKyAgICBz
dHJ1Y3QgSGFzaCB7CisgICAgICAgIHN0YXRpYyBpbnQgaGFzaChjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIHJlY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpbnQocmVjdC54KCkg
KiAweDEwKSB8IChpbnQocmVjdC55KCkgKiAweDEwKSA8PCA0KSB8IChpbnQocmVjdC5oZWlnaHQo
KSAqIDB4MTAwKSA8PCA4KSB8IChpbnQocmVjdC53aWR0aCgpICogMHgxMDApIDw8IDIwKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYgYSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBiKSB7IHJldHVybiBhID09IGI7IH0K
KworICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCA9IHRydWU7CisgICAgfTsKK307CisKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitpbmxp
bmUgc3RhdGljIHZvaWQgZGVidWdHTENvbW1hbmQoY29uc3QgY2hhciogY29tbWFuZCwgaW50IGxp
bmUpCit7CisgICAgY29uc3QgR0xlbnVtIGVyciA9IGdsR2V0RXJyb3IoKTsKKyAgICBpZiAoZXJy
KQorICAgICAgICBxRmF0YWwoIltUZXh0dXJlTWFwcGVyIEdMXSBDb21tYW5kIGZhaWxlZDogTGlu
ZSAlZFxuXHRvcGVyYXRpb246ICVzLCBcblx0ZXJyb3I6ICV4XG4iLCBsaW5lLCBjb21tYW5kLCBl
cnIpOworfQorCisjZGVmaW5lIERFQlVHX0dMX0NPTU1BTkRTCisKKyNpZmRlZiBERUJVR19HTF9D
T01NQU5EUworI2RlZmluZSBHTF9DTUQoeCkge3gsIGRlYnVnR0xDb21tYW5kKCN4LCBfX0xJTkVf
Xyk7IH0KKyNlbHNlCisjZGVmaW5lIEdMX0NNRCh4KSB4CisjZW5kaWYKKworc3RydWN0IFRleG1h
cEdMVmJvUmVwb3NpdG9yeSB7CisgICAgdHlwZWRlZiBIYXNoTWFwPEZsb2F0UmVjdCwgR0x1aW50
PiBWYm9NYXA7CisgICAgVmJvTWFwIHZib01hcDsKK307CisKK3N0YXRpYyBUZXhtYXBHTFZib1Jl
cG9zaXRvcnkgZ1Zib1JlcG9zaXRvcnk7CisKK3N0YXRpYyB2b2lkIGxvYWRSZWN0VG9TaGFkZXIo
R0x1aW50IGlkLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgR0x1aW50IHZibzsKKyAg
ICBUZXhtYXBHTFZib1JlcG9zaXRvcnk6OlZib01hcDo6aXRlcmF0b3IgaXQgPSBnVmJvUmVwb3Np
dG9yeS52Ym9NYXAuZmluZChyZWN0KTsKKyAgICBpZiAoaXQgPT0gZ1Zib1JlcG9zaXRvcnkudmJv
TWFwLmVuZCgpKSB7CisgICAgICAgIGNvbnN0IEZsb2F0UXVhZCBxdWFkKHJlY3QpOworICAgICAg
ICBHTF9DTUQoZ2xHZW5CdWZmZXJzKDEsICZ2Ym8pKQorICAgICAgICBHTF9DTUQoZ2xCaW5kQnVm
ZmVyKEdMX0FSUkFZX0JVRkZFUiwgdmJvKSkKKyAgICAgICAgR0xfQ01EKGdsQnVmZmVyRGF0YShH
TF9BUlJBWV9CVUZGRVIsIHNpemVvZihGbG9hdFF1YWQpLCAmcXVhZCwgR0xfU1RBVElDX0RSQVcp
KQorICAgICAgICBnVmJvUmVwb3NpdG9yeS52Ym9NYXAuYWRkKHJlY3QsIHZibyk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgdmJvID0gaXQtPnNlY29uZDsKKyAgICAgICAgR0xfQ01EKGdsQmluZEJ1
ZmZlcihHTF9BUlJBWV9CVUZGRVIsIHZibykpCisgICAgfQorICAgIEdMX0NNRChnbFZlcnRleEF0
dHJpYlBvaW50ZXIoaWQsIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgMCkpCit9CisKK2NsYXNz
IEJpdG1hcFRleHR1cmVHTCA6IHB1YmxpYyBCaXRtYXBUZXh0dXJlIHsKKyAgICBmcmllbmQgY2xh
c3MgVGV4dHVyZU1hcHBlckdMOworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7
CisgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNW
YWxpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCByZXNldChjb25zdCBJbnRTaXplJiwgYm9v
bCBvcGFxdWUpOworICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFp
bnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7Citwcml2YXRl
OgorICAgIEdMdWludCBtX2lkOworICAgIE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7CisgICAgRmxv
YXRTaXplIG1fcmVsYXRpdmVTaXplOworICAgIGJvb2wgbV9vcGFxdWU7CisgICAgSW50U2l6ZSBt
X3RleHR1cmVTaXplOworICAgIFJlZlB0cjxSR0JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcj4gbV9i
dWZmZXI7CisgICAgSW50UmVjdCBtX2RpcnR5UmVjdDsKKyAgICBGbG9hdFJlY3QgbV9zb3VyY2VS
ZWN0OworICAgIEdMdWludCBtX2ZibzsKKyAgICBJbnRTaXplIG1fYWN0dWFsU2l6ZTsKKyAgICBi
b29sIG1fc3VyZmFjZU5lZWRzUmVzZXQ7CisgICAgQml0bWFwVGV4dHVyZUdMKCkKKyAgICAgICAg
OiBtX2lkKDApCisgICAgICAgICwgbV9pbWFnZSgwKQorICAgICAgICAsIG1fb3BhcXVlKGZhbHNl
KQorICAgICAgICAsIG1fZmJvKDApCisgICAgICAgICwgbV9zdXJmYWNlTmVlZHNSZXNldCh0cnVl
KQorICAgIHsKKyAgICB9Cit9OworCitzdGF0aWMgc3RydWN0IFRleG1hcFNoYWRlckluZm8gewor
ICAgIGVudW0gU2hhZGVyUHJvZ3JhbUluZGV4IHsKKyAgICAgICAgU2ltcGxlUHJvZ3JhbSwKKyAg
ICAgICAgT3BhY2l0eVByb2dyYW0sCisgICAgICAgIE9wYWNpdHlBbmRNYXNrUHJvZ3JhbSwKKyAg
ICAgICAgVGFyZ2V0UHJvZ3JhbSwKKyAgICAgICAgTnVtUHJvZ3JhbXMKKyAgICB9OworCisgICAg
ZW51bSBTaGFkZXJWYXJpYWJsZUluZGV4IHsKKyAgICAgICAgSW5NYXRyaXhWYXJpYWJsZSwKKyAg
ICAgICAgSW5UZXhDb29yZFNvdXJjZVZhcmlhYmxlLAorICAgICAgICBJblZlcnRleFZhcmlhYmxl
LAorICAgICAgICBJblRleENvb3JkTWFza1ZhcmlhYmxlLAorCisgICAgICAgIE9wYWNpdHlWYXJp
YWJsZSwKKyAgICAgICAgU291cmNlVGV4dHVyZVZhcmlhYmxlLAorICAgICAgICBNYXNrVGV4dHVy
ZVZhcmlhYmxlLAorICAgICAgICBOdW1WYXJpYWJsZXMKKyAgICB9OworCisgICAgc3RydWN0IFBy
b2dyYW1JbmZvIHsKKyAgICAgICAgR0x1aW50IGlkOworICAgICAgICBHTGludCB2YXJzW051bVZh
cmlhYmxlc107CisgICAgfTsKKworICAgIEdMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihTaGFkZXJQ
cm9ncmFtSW5kZXggcHJvZywgU2hhZGVyVmFyaWFibGVJbmRleCB2YXIsIGNvbnN0IGNoYXIqIG5h
bWUpCisgICAgeworICAgICAgICByZXR1cm4gcHJvZ3JhbXNbcHJvZ10udmFyc1t2YXJdID0gZ2xH
ZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbXNbcHJvZ10uaWQsIG5hbWUpOworICAgIH0KKworICAg
IEdMaW50IGdldEF0dHJpYkxvY2F0aW9uKFNoYWRlclByb2dyYW1JbmRleCBwcm9nLCBTaGFkZXJW
YXJpYWJsZUluZGV4IHZhciwgY29uc3QgY2hhciogbmFtZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBwcm9ncmFtc1twcm9nXS52YXJzW3Zhcl0gPSBnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1z
W3Byb2ddLmlkLCBuYW1lKTsKKyAgICB9CisKKyAgICB2b2lkIGNyZWF0ZVNoYWRlclByb2dyYW0o
Y29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRl
clNvdXJjZSwgU2hhZGVyUHJvZ3JhbUluZGV4IGluZGV4KQorICAgIHsKKyAgICAgICAgR0x1aW50
IHZlcnRleFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIpOworICAgICAg
ICBHTHVpbnQgZnJhZ21lbnRTaGFkZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9GUkFHTUVOVF9TSEFE
RVIpOworICAgICAgICBHTF9DTUQoZ2xTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAmdmVy
dGV4U2hhZGVyU291cmNlLCAwKSkKKyAgICAgICAgR0xfQ01EKGdsU2hhZGVyU291cmNlKGZyYWdt
ZW50U2hhZGVyLCAxLCAmZnJhZ21lbnRTaGFkZXJTb3VyY2UsIDApKQorICAgICAgICBHTHVpbnQg
cHJvZ3JhbUlEID0gZ2xDcmVhdGVQcm9ncmFtKCk7CisgICAgICAgIEdMX0NNRChnbENvbXBpbGVT
aGFkZXIodmVydGV4U2hhZGVyKSkKKyAgICAgICAgR0xfQ01EKGdsQ29tcGlsZVNoYWRlcihmcmFn
bWVudFNoYWRlcikpCisgICAgICAgIEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIHZl
cnRleFNoYWRlcikpCisgICAgICAgIEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZy
YWdtZW50U2hhZGVyKSkKKyAgICAgICAgR0xfQ01EKGdsTGlua1Byb2dyYW0ocHJvZ3JhbUlEKSkK
KyAgICAgICAgcHJvZ3JhbXNbaW5kZXhdLmlkID0gcHJvZ3JhbUlEOworICAgICAgICBjaGFyIGlu
Zm9Mb2dbMTAyNF07CisgICAgICAgIGludCBsZW47CisgICAgICAgIGdsR2V0UHJvZ3JhbUluZm9M
b2cocHJvZ3JhbUlELCAxMDI0LCAmbGVuLCBpbmZvTG9nKTsKKyAgICAgICAgcHJpbnRmKCIlc1xu
IiwgaW5mb0xvZyk7CisgICAgfQorCisgICAgUHJvZ3JhbUluZm8gcHJvZ3JhbXNbTnVtUHJvZ3Jh
bXNdOworCit9IGdTaGFkZXJJbmZvOworCisjZGVmaW5lIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9M
T0NBVElPTih0eXBlLCBwcm9nLCB2YXIpIGlmIChnU2hhZGVySW5mby5nZXQjI3R5cGUjI0xvY2F0
aW9uKFRleG1hcFNoYWRlckluZm86OnByb2cjI1Byb2dyYW0sIFRleG1hcFNoYWRlckluZm86OnZh
ciMjVmFyaWFibGUsICN2YXIpIDwgMCkgcVdhcm5pbmcoIkNvdWxkbid0IGZpbmQgdmFyaWFibGUg
IiN2YXIiIGluIHByb2dyYW0gIiNwcm9nKTsKKyNkZWZpbmUgVEVYTUFQX0JVSUxEX1NIQURFUihw
cm9ncmFtKSBnU2hhZGVySW5mby5jcmVhdGVTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJj
ZSMjcHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXJTb3VyY2UjI3Byb2dyYW0sIFRleG1hcFNoYWRlcklu
Zm86OnByb2dyYW0jI1Byb2dyYW0pOworCitUZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJH
TChHcmFwaGljc0NvbnRleHQqIGdjKQorICAgIDogVGV4dHVyZU1hcHBlcihnYykKKyAgICAsIG1f
Y3VyUHJvZ3JhbShUZXhtYXBTaGFkZXJJbmZvOjpUYXJnZXRQcm9ncmFtKQoreworICAgIHN0YXRp
YyBib29sIHNoYWRlcnNDb21waWxlZCA9IGZhbHNlOworICAgIGlmIChzaGFkZXJzQ29tcGlsZWQp
CisgICAgICAgIHJldHVybjsKKyAgICBzaGFkZXJzQ29tcGlsZWQgPSB0cnVlOworI2lmbmRlZiBU
RVhNQVBfT1BFTkdMX0VTMgorI2RlZmluZSBPRVMyX1BFUkNJU0lPTl9ERUZJTklUSU9OUyBcCisg
ICAgIiNkZWZpbmUgbG93cFxuI2RlZmluZSBoaWdocFxuIgorI2Vsc2UKKyNkZWZpbmUgT0VTMl9Q
RVJDSVNJT05fREVGSU5JVElPTlMKKyNlbmRpZgorCisgICAgY29uc3QgY2hhciogZnJhZ21lbnRT
aGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9CisgICAgICAgICAgICBPRVMyX1BFUkNJU0lPTl9E
RUZJTklUSU9OUworIiAgICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIFNvdXJjZVRleHR1
cmUsIE1hc2tUZXh0dXJlOyAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAg
ICAgdW5pZm9ybSBsb3dwIGZsb2F0IE9wYWNpdHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0
VGV4Q29vcmRTb3VyY2UsIE91dFRleENvb3JkTWFzazsgICAgICAgICAgICAgIFxuIgorIiAgICAg
ICAgICAgICAgIHZvaWQgbWFpbih2b2lkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIK
KyIgICAgICAgICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKFNvdXJjZVRl
eHR1cmUsIE91dFRleENvb3JkU291cmNlKTsgIFxuIgorIiAgICAgICAgICAgICAgICAgICBsb3dw
IHZlYzQgbWFza0NvbG9yID0gdGV4dHVyZTJEKE1hc2tUZXh0dXJlLCBPdXRUZXhDb29yZE1hc2sp
OyAgXG4iCisiICAgICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgbyA9IE9wYWNpdHkgKiBtYXNr
Q29sb3IuYTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICAg
ICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBvLCBjb2xvci5hICogbyk7ICAgICAg
ICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CisKKyAgICBjb25zdCBj
aGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9CisgICAgICAgICAgICBPRVMy
X1BFUkNJU0lPTl9ERUZJTklUSU9OUworIiAgICAgICAgICAgICAgIHVuaWZvcm0gbWF0NCBJbk1h
dHJpeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAg
ICAgICAgIGF0dHJpYnV0ZSB2ZWM0IEluVGV4Q29vcmRTb3VyY2UsIEluVGV4Q29vcmRNYXNrLCBJ
blZlcnRleDsgICAgICBcbiIKKyIgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0
VGV4Q29vcmRTb3VyY2UsIE91dFRleENvb3JkTWFzazsgICAgICBcbiIKKyIgICAgICAgICAgICAg
ICB2b2lkIG1haW4odm9pZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcbiIKKyIgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICAgICAgT3V0
VGV4Q29vcmRTb3VyY2UgPSB2ZWMyKEluVGV4Q29vcmRTb3VyY2UpOyAgICAgICAgICAgICAgIFxu
IgorIiAgICAgICAgICAgICAgICAgICBPdXRUZXhDb29yZE1hc2sgPSB2ZWMyKEluVGV4Q29vcmRN
YXNrKTsgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgIGdsX1Bvc2l0
aW9uID0gSW5NYXRyaXggKiBJblZlcnRleDsgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAg
ICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXG4iOworCisgICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3Vy
Y2VPcGFjaXR5ID0KKyAgICAgICAgICAgIE9FUzJfUEVSQ0lTSU9OX0RFRklOSVRJT05TCisiICAg
ICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgU291cmNlVGV4dHVyZTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3Ag
ZmxvYXQgT3BhY2l0eTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxu
IgorIiAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiBPdXRUZXhDb29yZFNvdXJjZTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgdm9pZCBt
YWluKHZvaWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcbiIKKyIgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAg
ICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQoU291cmNlVGV4dHVyZSwgT3V0VGV4Q29v
cmRTb3VyY2UpOyAgXG4iCisiICAgICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQo
Y29sb3IucmdiICogT3BhY2l0eSwgY29sb3IuYSAqIE9wYWNpdHkpOyAgICBcbiIKKyIgICAgICAg
ICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFxuIjsKKworICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNv
dXJjZU9wYWNpdHkgPQorICAgICAgICAgICAgT0VTMl9QRVJDSVNJT05fREVGSU5JVElPTlMKKyIg
ICAgICAgICAgICAgICB1bmlmb3JtIG1hdDQgSW5NYXRyaXg7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgSW5UZXhDb29yZFNv
dXJjZSwgSW5WZXJ0ZXg7ICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgdmFyeWluZyBo
aWdocCB2ZWMyIE91dFRleENvb3JkU291cmNlOyAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAg
ICAgICAgIHZvaWQgbWFpbih2b2lkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcbiIKKyIgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgIE91dFRleENvb3JkU291
cmNlID0gdmVjMihJblRleENvb3JkU291cmNlKTsgICAgICAgXG4iCisiICAgICAgICAgICAgICAg
ICAgIGdsX1Bvc2l0aW9uID0gSW5NYXRyaXggKiBJblZlcnRleDsgICAgICAgICAgICAgIFxuIgor
IiAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcbiI7CisKKyAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVNp
bXBsZSA9CisgICAgICAgICAgICBPRVMyX1BFUkNJU0lPTl9ERUZJTklUSU9OUworIiAgICAgICAg
ICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIFNvdXJjZVRleHR1cmU7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAg
dmVjMiBPdXRUZXhDb29yZFNvdXJjZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFxuIgorIiAgICAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAg
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICBsb3dwIHZlYzQgY29sb3Ig
PSB0ZXh0dXJlMkQoU291cmNlVGV4dHVyZSwgT3V0VGV4Q29vcmRTb3VyY2UpOyAgICAgIFxuIgor
IiAgICAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFxuIjsKKworICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNpbXBs
ZSA9IHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHk7CisKKyAgICBjb25zdCBjaGFyKiBmcmFnbWVu
dFNoYWRlclNvdXJjZVRhcmdldCA9CisgICAgICAgICAgICBPRVMyX1BFUkNJU0lPTl9ERUZJTklU
SU9OUworIiAgICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIFNvdXJjZVRleHR1cmU7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAg
ICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgT3BhY2l0eTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgdmFyeWluZyBoaWdo
cCB2ZWMyIE91dFRleENvb3JkU291cmNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAg
ICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgIGxv
d3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRChTb3VyY2VUZXh0dXJlLCBPdXRUZXhDb29yZFNvdXJj
ZSk7ICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0
KGNvbG9yLmJnciAqIE9wYWNpdHksIGNvbG9yLmEgKiBPcGFjaXR5KTsgICAgICAgICAgICBcbiIK
KyIgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOworCisgICAgY29uc3QgY2hh
ciogdmVydGV4U2hhZGVyU291cmNlVGFyZ2V0ID0KKyAgICAgICAgICAgIE9FUzJfUEVSQ0lTSU9O
X0RFRklOSVRJT05TCisiICAgICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgSW5UZXhDb29yZFNv
dXJjZSwgSW5WZXJ0ZXg7ICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgdmFyeWluZyBo
aWdocCB2ZWMyIE91dFRleENvb3JkU291cmNlOyAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAg
ICAgICAgIHZvaWQgbWFpbih2b2lkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcbiIKKyIgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgIE91dFRleENvb3JkU291
cmNlID0gdmVjMihJblRleENvb3JkU291cmNlKTsgICAgIFxuIgorIiAgICAgICAgICAgICAgICAg
ICBnbF9Qb3NpdGlvbiA9IEluVmVydGV4OyAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIg
ICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXG4iOworCisgICAgVEVYTUFQX0JVSUxEX1NIQURFUihTaW1wbGUpCisgICAgVEVY
TUFQX0JVSUxEX1NIQURFUihPcGFjaXR5KQorICAgIFRFWE1BUF9CVUlMRF9TSEFERVIoT3BhY2l0
eUFuZE1hc2spCisgICAgVEVYTUFQX0JVSUxEX1NIQURFUihUYXJnZXQpCisKKyAgICBURVhNQVBf
R0VUX1NIQURFUl9WQVJfTE9DQVRJT04oQXR0cmliLCBPcGFjaXR5QW5kTWFzaywgSW5WZXJ0ZXgp
CisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKEF0dHJpYiwgT3BhY2l0eUFuZE1h
c2ssIEluVGV4Q29vcmRTb3VyY2UpCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9O
KEF0dHJpYiwgT3BhY2l0eUFuZE1hc2ssIEluVGV4Q29vcmRNYXNrKQorICAgIFRFWE1BUF9HRVRf
U0hBREVSX1ZBUl9MT0NBVElPTihVbmlmb3JtLCBPcGFjaXR5QW5kTWFzaywgSW5NYXRyaXgpCisg
ICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKFVuaWZvcm0sIE9wYWNpdHlBbmRNYXNr
LCBTb3VyY2VUZXh0dXJlKQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihVbmlm
b3JtLCBPcGFjaXR5QW5kTWFzaywgTWFza1RleHR1cmUpCisgICAgVEVYTUFQX0dFVF9TSEFERVJf
VkFSX0xPQ0FUSU9OKFVuaWZvcm0sIE9wYWNpdHlBbmRNYXNrLCBPcGFjaXR5KQorCisgICAgVEVY
TUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKEF0dHJpYiwgT3BhY2l0eSwgSW5WZXJ0ZXgpCisg
ICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKEF0dHJpYiwgT3BhY2l0eSwgSW5UZXhD
b29yZFNvdXJjZSkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oVW5pZm9ybSwg
T3BhY2l0eSwgSW5NYXRyaXgpCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKFVu
aWZvcm0sIE9wYWNpdHksIFNvdXJjZVRleHR1cmUpCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFS
X0xPQ0FUSU9OKFVuaWZvcm0sIE9wYWNpdHksIE9wYWNpdHkpCisKKyAgICBURVhNQVBfR0VUX1NI
QURFUl9WQVJfTE9DQVRJT04oQXR0cmliLCBTaW1wbGUsIEluVmVydGV4KQorICAgIFRFWE1BUF9H
RVRfU0hBREVSX1ZBUl9MT0NBVElPTihBdHRyaWIsIFNpbXBsZSwgSW5UZXhDb29yZFNvdXJjZSkK
KyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oVW5pZm9ybSwgU2ltcGxlLCBJbk1h
dHJpeCkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oVW5pZm9ybSwgU2ltcGxl
LCBTb3VyY2VUZXh0dXJlKQorCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKEF0
dHJpYiwgVGFyZ2V0LCBJblRleENvb3JkU291cmNlKQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZB
Ul9MT0NBVElPTihBdHRyaWIsIFRhcmdldCwgSW5WZXJ0ZXgpCisgICAgVEVYTUFQX0dFVF9TSEFE
RVJfVkFSX0xPQ0FUSU9OKFVuaWZvcm0sIFRhcmdldCwgU291cmNlVGV4dHVyZSkKKyAgICBURVhN
QVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oVW5pZm9ybSwgVGFyZ2V0LCBPcGFjaXR5KQorfQor
Cit2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYg
dGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG12TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNr
VGV4dHVyZSkKK3sKKyAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wmIHRleHR1cmVHTCA9IHN0YXRp
Y19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KHRleHR1cmUpOworICAgIGlmICghdGV4dHVy
ZS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFRleG1hcFNoYWRlckluZm86OlNo
YWRlclByb2dyYW1JbmRleCBwcm9ncmFtOworICAgIGlmIChtYXNrVGV4dHVyZSkKKyAgICAgICAg
cHJvZ3JhbSA9IFRleG1hcFNoYWRlckluZm86Ok9wYWNpdHlBbmRNYXNrUHJvZ3JhbTsKKyAgICBl
bHNlIGlmIChvcGFjaXR5IDwgMC45OSkKKyAgICAgICAgcHJvZ3JhbSA9IFRleG1hcFNoYWRlcklu
Zm86Ok9wYWNpdHlQcm9ncmFtOworICAgIGVsc2UKKyAgICAgICAgcHJvZ3JhbSA9IFRleG1hcFNo
YWRlckluZm86OlNpbXBsZVByb2dyYW07CisgICAgY29uc3QgVGV4bWFwU2hhZGVySW5mbzo6UHJv
Z3JhbUluZm8mIHByb2dyYW1JbmZvID0gZ1NoYWRlckluZm8ucHJvZ3JhbXNbcHJvZ3JhbV07Cisg
ICAgaWYgKG1fY3VyUHJvZ3JhbSAhPSBwcm9ncmFtKSB7CisgICAgICAgIEdMX0NNRChnbFVzZVBy
b2dyYW0ocHJvZ3JhbUluZm8uaWQpKQorICAgICAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkoZ1NoYWRlckluZm8ucHJvZ3JhbXNbbV9jdXJQcm9ncmFtXS52YXJzW1RleG1hcFNo
YWRlckluZm86OkluVGV4Q29vcmRTb3VyY2VWYXJpYWJsZV0pKQorICAgICAgICBHTF9DTUQoZ2xE
aXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZ1NoYWRlckluZm8ucHJvZ3JhbXNbbV9jdXJQcm9ncmFt
XS52YXJzW1RleG1hcFNoYWRlckluZm86OkluVmVydGV4VmFyaWFibGVdKSkKKyAgICAgICAgbV9j
dXJQcm9ncmFtID0gcHJvZ3JhbTsKKyAgICAgICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmli
QXJyYXkocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblRleENvb3JkU291cmNl
VmFyaWFibGVdKSkKKyAgICAgICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJv
Z3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblZlcnRleFZhcmlhYmxlXSkpCisgICAg
fQorCisgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKSkKKyAgICBHTF9DTUQoZ2xE
aXNhYmxlKEdMX1NURU5DSUxfVEVTVCkpCisKKyAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdM
X1RFWFRVUkUwKSkKKyAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0
dXJlR0wubV9pZCkpCisgICAgbG9hZFJlY3RUb1NoYWRlcihwcm9ncmFtSW5mby52YXJzW1RleG1h
cFNoYWRlckluZm86OkluVmVydGV4VmFyaWFibGVdLCB0YXJnZXRSZWN0KTsKKyAgICBsb2FkUmVj
dFRvU2hhZGVyKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5UZXhDb29yZFNv
dXJjZVZhcmlhYmxlXSwgdGV4dHVyZUdMLm1fc291cmNlUmVjdCk7CisgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgobV9wcm9qZWN0aW9uTWF0cml4
KS5tdWx0TGVmdChtdk1hdHJpeCk7CisgICAgY29uc3QgR0xmbG9hdCBtNFtdID0geworICAgICAg
ICBtYXRyaXgubTExKCksIG1hdHJpeC5tMTIoKSwgbWF0cml4Lm0xMygpLCBtYXRyaXgubTE0KCks
CisgICAgICAgIG1hdHJpeC5tMjEoKSwgbWF0cml4Lm0yMigpLCBtYXRyaXgubTIzKCksIG1hdHJp
eC5tMjQoKSwKKyAgICAgICAgbWF0cml4Lm0zMSgpLCBtYXRyaXgubTMyKCksIG1hdHJpeC5tMzMo
KSwgbWF0cml4Lm0zNCgpLAorICAgICAgICBtYXRyaXgubTQxKCksIG1hdHJpeC5tNDIoKSwgbWF0
cml4Lm00MygpLCBtYXRyaXgubTQ0KCkKKyAgICB9OworICAgIGdsVW5pZm9ybU1hdHJpeDRmdihw
cm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OkluTWF0cml4VmFyaWFibGVdLCAxLCBH
TF9GQUxTRSwgbTQpOworICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtSW5mby52YXJzW1Rl
eG1hcFNoYWRlckluZm86OlNvdXJjZVRleHR1cmVWYXJpYWJsZV0sIDApKQorCisgICAgaWYgKG1h
c2tUZXh0dXJlICYmIG1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgY29uc3QgQml0
bWFwVGV4dHVyZUdMKiBtYXNrVGV4dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4
dHVyZUdMKj4obWFza1RleHR1cmUpOworICAgICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdM
X1RFWFRVUkUxKSkKKyAgICAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
bWFza1RleHR1cmVHTC0+bV9pZCkpCisgICAgICAgIGxvYWRSZWN0VG9TaGFkZXIocHJvZ3JhbUlu
Zm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblRleENvb3JkTWFza1ZhcmlhYmxlXSwgbWFza1Rl
eHR1cmVHTC0+bV9zb3VyY2VSZWN0KTsKKyAgICAgICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0
cmliQXJyYXkocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblRleENvb3JkTWFz
a1ZhcmlhYmxlXSkpCisgICAgICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtSW5mby52YXJz
W1RleG1hcFNoYWRlckluZm86Ok1hc2tUZXh0dXJlVmFyaWFibGVdLCAxKSkKKyAgICAgICAgR0xf
Q01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpCisgICAgfQorCisgICAgaWYgKHByb2dy
YW0gIT0gVGV4bWFwU2hhZGVySW5mbzo6U2ltcGxlUHJvZ3JhbSkKKyAgICAgICAgR0xfQ01EKGds
VW5pZm9ybTFmKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6T3BhY2l0eVZhcmlh
YmxlXSwgb3BhY2l0eSkpCisKKyAgICBpZiAodGV4dHVyZUdMLm1fb3BhcXVlICYmIG9wYWNpdHkg
PiAwLjk5ICYmICFtYXNrVGV4dHVyZSkKKyAgICAgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9CTEVO
RCkpCisgICAgZWxzZSB7CisgICAgICAgIEdMX0NNRChnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09O
RV9NSU5VU19TUkNfQUxQSEEpKQorICAgICAgICBHTF9DTUQoZ2xFbmFibGUoR0xfQkxFTkQpKQor
ICAgIH0KKworICAgIEdMX0NNRChnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KSkK
K30KKworCitjb25zdCBjaGFyKiBUZXh0dXJlTWFwcGVyR0w6OnR5cGUoKSBjb25zdAoreworICAg
IHJldHVybiAiT3BlbkdMIjsKK30KKwordm9pZCBCaXRtYXBUZXh0dXJlR0w6OnJlc2V0KGNvbnN0
IEludFNpemUmIG5ld1NpemUsIGJvb2wgb3BhcXVlKQoreworICAgIEJpdG1hcFRleHR1cmU6OnJl
c2V0KG5ld1NpemUsIG9wYXF1ZSk7CisgICAgbV9pbWFnZSA9IDA7CisgICAgSW50U2l6ZSBuZXdU
ZXh0dXJlU2l6ZSA9IG5wb3QobmV3U2l6ZSk7CisgICAgYm9vbCBqdXN0Q3JlYXRlZCA9IGZhbHNl
OworICAgIGlmICghbV9pZCkgeworICAgICAgICBHTF9DTUQoZ2xHZW5UZXh0dXJlcygxLCAmbV9p
ZCkpCisgICAgICAgIGp1c3RDcmVhdGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoanVzdENy
ZWF0ZWQgfHwgbmV3VGV4dHVyZVNpemUud2lkdGgoKSA+IG1fdGV4dHVyZVNpemUud2lkdGgoKSB8
fCBuZXdUZXh0dXJlU2l6ZS5oZWlnaHQoKSA+IG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpIHsKKyAg
ICAgICAgcHJpbnRmKCJbVGV4dHVyZU1hcHBlckdMXSBDcmVhdGluZyB0ZXh0dXJlLiBJRDogJWQ7
IFNpemU6ICVkLCVkXG4iLCBtX2lkLCBuZXdUZXh0dXJlU2l6ZS53aWR0aCgpLCBuZXdUZXh0dXJl
U2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fdGV4dHVyZVNpemUgPSBuZXdUZXh0dXJlU2l6ZTsK
KyAgICAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pZCkpCisgICAg
ICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5f
RklMVEVSLCBHTF9MSU5FQVIpKQorICAgICAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKSkKKyAgICAgICAgR0xf
Q01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xf
Q0xBTVBfVE9fRURHRSkpCisgICAgICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpKQorICAgICAgICBHTF9D
TUQoZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIG1fdGV4dHVyZVNpemUu
d2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURf
QllURSwgMCkpCisgICAgfQorICAgIG1fYWN0dWFsU2l6ZSA9IG5ld1NpemU7CisgICAgbV9yZWxh
dGl2ZVNpemUgPSBGbG9hdFNpemUoZmxvYXQobmV3U2l6ZS53aWR0aCgpKSAvIG1fdGV4dHVyZVNp
emUud2lkdGgoKSwgZmxvYXQobmV3U2l6ZS5oZWlnaHQoKSkgLyBtX3RleHR1cmVTaXplLmhlaWdo
dCgpKTsKKyAgICBtX3NvdXJjZVJlY3QgPSBGbG9hdFJlY3QoMCwgMCwgbV9yZWxhdGl2ZVNpemUu
d2lkdGgoKSwgbV9yZWxhdGl2ZVNpemUuaGVpZ2h0KCkpOworICAgIG1fb3BhcXVlID0gb3BhcXVl
OworICAgIG1fc3VyZmFjZU5lZWRzUmVzZXQgPSB0cnVlOworfQorCitQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dCogQml0bWFwVGV4dHVyZUdMOjpiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5
UmVjdCkKKworeworICAgIG1fYnVmZmVyID0gUkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI6OmNy
ZWF0ZSgpOworICAgIG1fZGlydHlSZWN0ID0gZGlydHlSZWN0OworICAgIHJldHVybiBtX2J1ZmZl
ci0+YmVnaW5QYWludChkaXJ0eVJlY3QsIG1fb3BhcXVlKTsKK30KKwordm9pZCBCaXRtYXBUZXh0
dXJlR0w6OmVuZFBhaW50KCkKK3sKKyAgICBpZiAoIW1fYnVmZmVyKQorICAgICAgICByZXR1cm47
CisgICAgbV9idWZmZXItPmVuZFBhaW50KCk7CisgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgbV9pZCkpCisgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJF
XzJELCAwLCBtX2RpcnR5UmVjdC54KCksIG1fZGlydHlSZWN0LnkoKSwgbV9kaXJ0eVJlY3Qud2lk
dGgoKSwgbV9kaXJ0eVJlY3QuaGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIG1f
YnVmZmVyLT5kYXRhKCkpKQorICAgIG1fYnVmZmVyLmNsZWFyKCk7Cit9CisKK3N0cnVjdCBUZXht
YXBHTFNoYWRlclRleHR1cmVzIHsKKyAgICBzdHJ1Y3QgRW50cnkgeworICAgICAgICBHTHVpbnQg
dGV4dHVyZTsKKyAgICAgICAgaW50IHJlZkNvdW50OworICAgIH07CisgICAgSGFzaE1hcDxOYXRp
dmVJbWFnZVB0ciwgRW50cnk+IGltYWdlVG9UZXh0dXJlOworICAgIEdMdWludCBmaW5kT3JDcmVh
dGUoTmF0aXZlSW1hZ2VQdHIgaW1hZ2UsIGJvb2wmIGZvdW5kKQorICAgIHsKKyAgICAgICAgSGFz
aE1hcDxOYXRpdmVJbWFnZVB0ciwgRW50cnk+OjppdGVyYXRvciBpdCA9IGltYWdlVG9UZXh0dXJl
LmZpbmQoaW1hZ2UpOworICAgICAgICBmb3VuZCA9IGZhbHNlOworICAgICAgICBpZiAoaXQgIT0g
aW1hZ2VUb1RleHR1cmUuZW5kKCkpIHsKKyAgICAgICAgICAgIGl0LT5zZWNvbmQucmVmQ291bnQr
KzsKKyAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBpdC0+c2Vj
b25kLnRleHR1cmU7CisgICAgICAgIH0KKyAgICAgICAgRW50cnkgZW50cnk7CisgICAgICAgIEdM
X0NNRChnbEdlblRleHR1cmVzKDEsICZlbnRyeS50ZXh0dXJlKSk7CisgICAgICAgIGVudHJ5LnJl
ZkNvdW50ID0gMTsKKyAgICAgICAgaW1hZ2VUb1RleHR1cmUuYWRkKGltYWdlLCBlbnRyeSk7Cisg
ICAgICAgIHJldHVybiBlbnRyeS50ZXh0dXJlOworICAgIH0KKworICAgIGJvb2wgZGVyZWYoTmF0
aXZlSW1hZ2VQdHIgaW1hZ2UpCisgICAgeworICAgICAgICBIYXNoTWFwPE5hdGl2ZUltYWdlUHRy
LCBFbnRyeT46Oml0ZXJhdG9yIGl0ID0gaW1hZ2VUb1RleHR1cmUuZmluZChpbWFnZSk7CisgICAg
ICAgIGlmIChpdCAhPSBpbWFnZVRvVGV4dHVyZS5lbmQoKSkgeworICAgICAgICAgICAgaWYgKGl0
LT5zZWNvbmQucmVmQ291bnQgPCAyKSB7CisgICAgICAgICAgICAgICAgaW1hZ2VUb1RleHR1cmUu
cmVtb3ZlKGl0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKworc3RhdGljIFRl
eG1hcEdMU2hhZGVyVGV4dHVyZXMgZ1RleHR1cmVSZXBvc2l0b3J5OworCit2b2lkIEJpdG1hcFRl
eHR1cmVHTDo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKK3sKKyAgICBOYXRpdmVJ
bWFnZVB0ciBuYXRpdmVJbWFnZSA9IGltYWdlID8gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCkgOiAwOworICAgIGlmICghaW1hZ2UgfHwgIW5hdGl2ZUltYWdlKSB7CisgICAgICAg
IGlmIChtX2ltYWdlKQorICAgICAgICAgICAgZGVzdHJveSgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKG5hdGl2ZUltYWdlID09IG1faW1hZ2UpCisgICAgICAgIHJldHVybjsK
KyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgR0x1aW50IG5ld1RleHR1cmVJRCA9IGdUZXh0
dXJlUmVwb3NpdG9yeS5maW5kT3JDcmVhdGUobmF0aXZlSW1hZ2UsIGZvdW5kKTsKKyAgICBpZiAo
bmV3VGV4dHVyZUlEICE9IG1faWQpIHsKKyAgICAgICAgZGVzdHJveSgpOworICAgICAgICBtX2lk
ID0gbmV3VGV4dHVyZUlEOworICAgICAgICByZXNldChpbWFnZS0+c2l6ZSgpLCBmYWxzZSk7Cisg
ICAgICAgIG1faW1hZ2UgPSBuYXRpdmVJbWFnZTsKKyAgICAgICAgcHJpbnRmKCJbVGV4dHVyZU1h
cHBlckdMXSBDcmVhdGluZyB0ZXh0dXJlIGZyb20gZGlyZWN0bHkgY29tcG9zaXRlZCBpbWFnZS4g
SUQ6ICVkOyBTaXplOiAlZCwlZFxuIiwgbV9pZCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWln
aHQoKSk7CisgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4
dCBnYyhiZWdpblBhaW50KEludFJlY3QoMCwgMCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3Rl
eHR1cmVTaXplLmhlaWdodCgpKSkpOworICAgICAgICAgICAgZ2MuZHJhd0ltYWdlKGltYWdlLCBE
ZXZpY2VDb2xvclNwYWNlLCBJbnRQb2ludCgwLCAwKSwgQ29tcG9zaXRlQ29weSk7CisgICAgICAg
ICAgICBlbmRQYWludCgpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEJpdG1hcFRleHR1
cmVHTDo6ZGVzdHJveSgpCit7CisgICAgaWYgKG1faWQgJiYgKCFtX2ltYWdlIHx8ICFnVGV4dHVy
ZVJlcG9zaXRvcnkuZGVyZWYobV9pbWFnZSkpKSB7CisgICAgICAgIEdMX0NNRChnbERlbGV0ZVRl
eHR1cmVzKDEsICZtX2lkKSkKKyAgICAgICAgcHJpbnRmKCJbVGV4dHVyZU1hcHBlck9wZW5HTF0g
RGVsZXRpbmcgdGV4dHVyZSAlZCwgc2l6ZTogJWQsJWRcbiIsIG1faWQsIG1fdGV4dHVyZVNpemUu
d2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CisgICAgfQorICAgIGlmIChtX2ZibykK
KyAgICAgICAgR0xfQ01EKGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2ZibykpCisKKyAgICBt
X2ZibyA9IDA7CisgICAgbV9pZCA9IDA7CisgICAgbV90ZXh0dXJlU2l6ZSA9IEludFNpemUoKTsK
KyAgICBtX3JlbGF0aXZlU2l6ZSA9IEZsb2F0U2l6ZSgxLCAxKTsKK30KK2Jvb2wgQml0bWFwVGV4
dHVyZUdMOjppc1ZhbGlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pZDsKK30KKworSW50U2l6
ZSBCaXRtYXBUZXh0dXJlR0w6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3RleHR1cmVT
aXplOworfQorCitzdGF0aWMgaW5saW5lIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNyZWF0ZVByb2pl
Y3Rpb25NYXRyaXgoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBmbGlwKQoreworICAgIHJldHVy
biBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgyLjAgLyBmbG9hdChzaXplLndpZHRoKCkpLCAwLCAwLCAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAoZmxpcCA/IC0yLjAgOiAyLjAp
IC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSksIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsIDAsIC0wLjAwMDAwMSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLTEsIGZsaXAgPyAxIDogLTEsIDAsIDEpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6
Y2xlYW51cCgpCisgICAgeworICAgIGZvciAoVGV4bWFwR0xWYm9SZXBvc2l0b3J5OjpWYm9NYXA6
Oml0ZXJhdG9yIGl0ID0gZ1Zib1JlcG9zaXRvcnkudmJvTWFwLmJlZ2luKCk7IGl0ICE9IGdWYm9S
ZXBvc2l0b3J5LnZib01hcC5lbmQoKTsgKytpdCkgeworICAgICAgICBwcmludGYoIltUZXh0dXJl
TWFwcGVyR0xdIERlbGV0aW5nIHZibyAlZCwgJWYgJWYgJWYgJWZcbiIsIGl0LT5zZWNvbmQsIGl0
LT5maXJzdC54KCksIGl0LT5maXJzdC55KCksIGl0LT5maXJzdC53aWR0aCgpLCBpdC0+Zmlyc3Qu
aGVpZ2h0KCkpOworICAgICAgICBHTF9DTUQoZ2xEZWxldGVCdWZmZXJzKDEsICZpdC0+c2Vjb25k
KSkKKyAgICB9CisgICAgZ1Zib1JlcG9zaXRvcnkudmJvTWFwLmNsZWFyKCk7Cit9CisKKwordm9p
ZCBUZXh0dXJlTWFwcGVyR0w6OmJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUgKnN1cmZhY2VQb2lu
dGVyKQoreworICAgIEJpdG1hcFRleHR1cmVHTCogc3VyZmFjZSA9IHN0YXRpY19jYXN0PEJpdG1h
cFRleHR1cmVHTCo+KHN1cmZhY2VQb2ludGVyKTsKKworICAgIGlmICghc3VyZmFjZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IGNyZWF0ZVByb2pl
Y3Rpb25NYXRyaXgoc3VyZmFjZS0+c2l6ZSgpLCBmYWxzZSk7CisgICAgbWF0cml4LnRyYW5zbGF0
ZSgtc3VyZmFjZS0+b2Zmc2V0KCkueCgpLCAtc3VyZmFjZS0+b2Zmc2V0KCkueSgpKTsKKworICAg
IGlmIChzdXJmYWNlLT5tX3N1cmZhY2VOZWVkc1Jlc2V0IHx8ICFzdXJmYWNlLT5tX2Zibykgewor
ICAgICAgICBpZiAoIXN1cmZhY2UtPm1fZmJvKQorICAgICAgICAgICAgR0xfQ01EKGdsR2VuRnJh
bWVidWZmZXJzKDEsICZzdXJmYWNlLT5tX2ZibykpCisgICAgICAgIEdMX0NNRChnbEJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgc3VyZmFjZS0+bV9mYm8pKQorICAgICAgICBHTF9DTUQo
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKSkKKyAgICAgICAgR0xfQ01EKGdsRnJhbWVi
dWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9U
RVhUVVJFXzJELCBzdXJmYWNlLT5tX2lkLCAwKSkKKyAgICAgICAgR0xfQ01EKGdsQ2xlYXJDb2xv
cigwLCAwLCAwLCAwKSkKKyAgICAgICAgR0xfQ01EKGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJ
VCkpCisgICAgICAgIHN1cmZhY2UtPm1fc3VyZmFjZU5lZWRzUmVzZXQgPSBmYWxzZTsKKyAgICB9
IGVsc2UgeworICAgICAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIs
IHN1cmZhY2UtPm1fZmJvKSkKKyAgICB9CisKKyAgICBHTF9DTUQoZ2xWaWV3cG9ydCgwLCAwLCBz
dXJmYWNlLT5zaXplKCkud2lkdGgoKSwgc3VyZmFjZS0+c2l6ZSgpLmhlaWdodCgpKSkKKyAgICBt
X3Byb2plY3Rpb25NYXRyaXggPSBtYXRyaXg7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpz
ZXRDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgR0xfQ01EKGdsU2Npc3NvcihyZWN0
LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSkpCisgICAgR0xfQ01E
KGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCkpCit9CisKKwordm9pZCBUZXh0dXJlTWFwcGVyR0w6
OnBhaW50VG9UYXJnZXQoY29uc3QgQml0bWFwVGV4dHVyZSYgYVN1cmZhY2UsIGNvbnN0IEludFNp
emUmIHN1cmZhY2VTaXplLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBm
bG9hdCBvcGFjaXR5LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCkKK3sKKyAgICBjb25zdCBC
aXRtYXBUZXh0dXJlR0wmIHN1cmZhY2UgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJl
R0wmPihhU3VyZmFjZSk7CisgICAgLy8gY3JlYXRlIHRoZSBtb2RlbC12aWV3LXByb2plY3Rpb24g
bWF0cml4IHRvIGRpc3BsYXkgb24gc2NyZWVuCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbXZw
TWF0cml4ID0gY3JlYXRlUHJvamVjdGlvbk1hdHJpeChzdXJmYWNlU2l6ZSwgdHJ1ZSkubXVsdExl
ZnQodHJhbnNmb3JtKTsKKyAgICBjb25zdCBGbG9hdFF1YWQgZmluYWxRdWFkID0gbXZwTWF0cml4
Lm1hcFF1YWQoRmxvYXRRdWFkKEZsb2F0UmVjdChzdXJmYWNlLm9mZnNldCgpLngoKSwgc3VyZmFj
ZS5vZmZzZXQoKS55KCksIHN1cmZhY2UubV9hY3R1YWxTaXplLndpZHRoKCksIHN1cmZhY2UubV9h
Y3R1YWxTaXplLmhlaWdodCgpKSkpOworCisgICAgLy8gV2UgYWxyZWFkeSBibGVuZGVkIHRoZSBh
bHBoYSBpbjsgdGhlIHJlc3VsdCBpcyBwcmVtdWx0aXBsaWVkCisgICAgR0xfQ01EKGdsVXNlUHJv
Z3JhbShnU2hhZGVySW5mby5wcm9ncmFtc1tUZXhtYXBTaGFkZXJJbmZvOjpUYXJnZXRQcm9ncmFt
XS5pZCkpCisgICAgR0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKSkK
KyAgICBHTF9DTUQoZ2xWaWV3cG9ydCgwLCAwLCBzdXJmYWNlU2l6ZS53aWR0aCgpLCBzdXJmYWNl
U2l6ZS5oZWlnaHQoKSkpCisgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9TVEVOQ0lMX1RFU1QpKQor
ICAgIGNvbnN0IFRleG1hcFNoYWRlckluZm86OlByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbyA9IGdT
aGFkZXJJbmZvLnByb2dyYW1zW1RleG1hcFNoYWRlckluZm86OlRhcmdldFByb2dyYW1dOworICAg
IEdMX0NNRChnbFVuaWZvcm0xZihwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86Ok9w
YWNpdHlWYXJpYWJsZV0sIG9wYWNpdHkpKQorICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xf
VEVYVFVSRTApKQorICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHN1cmZh
Y2UubV9pZCkpCisgICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFw
U2hhZGVySW5mbzo6U291cmNlVGV4dHVyZVZhcmlhYmxlXSwgMCkpCisgICAgR0xfQ01EKGdsRW5h
YmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJ
blRleENvb3JkU291cmNlVmFyaWFibGVdKSkKKyAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheShwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OkluVmVydGV4VmFyaWFi
bGVdKSkKKyAgICBHTF9DTUQoZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCkpCisgICAg
R0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRl
ckluZm86OkluVmVydGV4VmFyaWFibGVdLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsICZmaW5h
bFF1YWQpKQorICAgIGxvYWRSZWN0VG9TaGFkZXIocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFk
ZXJJbmZvOjpJblRleENvb3JkU291cmNlVmFyaWFibGVdLCBzdXJmYWNlLm1fc291cmNlUmVjdCk7
CisgICAgR0xfQ01EKGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDApKQorICAgIEdMX0NN
RChnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpKQorICAgIEdMX0NN
RChnbEVuYWJsZShHTF9CTEVORCkpCisgICAgc2V0Q2xpcCh2aXNpYmxlUmVjdCk7CisKKyAgICBH
TF9DTUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpCisgICAgR0xfQ01EKGds
RGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5m
bzo6SW5UZXhDb29yZFNvdXJjZVZhcmlhYmxlXSkpCisgICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5WZXJ0ZXhW
YXJpYWJsZV0pKQorICAgIEdMX0NNRChnbFVzZVByb2dyYW0oMCkpCisgICAgbV9jdXJQcm9ncmFt
ID0gVGV4bWFwU2hhZGVySW5mbzo6VGFyZ2V0UHJvZ3JhbTsKK30KKworUGFzc1JlZlB0cjxCaXRt
YXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZVRleHR1cmUoKSB7IHJldHVybiBhZG9w
dFJlZihuZXcgQml0bWFwVGV4dHVyZUdMKCkpOyB9CisKK307CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlYWFm
YmNhMTUxYzgzZTU4ZTRlOWMwNDBiMjM3NDM0YjQxODkxZGIKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaApAQCAtMCww
ICsxLDg0IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBUZXh0dXJlTWFwcGVyR0xfaAorI2RlZmluZSBUZXh0dXJlTWFwcGVyR0xfaAorCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5j
bHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5j
bHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisv
LyBBbiBPcGVuR0wtRVMyIGltcGxlbWVudGF0aW9uIG9mIFRleHR1cmVNYXBwZXIuCitjbGFzcyBU
ZXh0dXJlTWFwcGVyR0wgOiBwdWJsaWMgVGV4dHVyZU1hcHBlciB7CitwdWJsaWM6CisgICAgVGV4
dHVyZU1hcHBlckdMKEdyYXBoaWNzQ29udGV4dCogZ2MpOworICAgIHZpcnR1YWwgflRleHR1cmVN
YXBwZXJHTCgpIHt9CisKKyAgICAvLyByZWltcHMgZnJvbSBUZXh0dXJlTWFwcGVyCisgICAgdmly
dHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0
IEludFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBv
cGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7CisgICAgdmlydHVhbCB2
b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRDbGlwKGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1Rhcmdl
dChjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpOwor
ICAgIHZpcnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJl
KCk7CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiB0eXBlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIGNsZWFudXAoKTsKKworcHJpdmF0ZToKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3By
b2plY3Rpb25NYXRyaXg7CisgICAgaW50IG1fY3VyUHJvZ3JhbTsKK307CisKKy8vIEFuIG9mZnNj
cmVlbiBidWZmZXIgdG8gYmUgcmVuZGVyZWQgYnkgc29mdHdhcmUuCitjbGFzcyBSR0JBMzJQcmVt
dWx0aW1wbGllZEJ1ZmZlciA6IHB1YmxpYyBSZWZDb3VudGVkPFJHQkEzMlByZW11bHRpbXBsaWVk
QnVmZmVyPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UkdCQTMyUHJlbXVsdGltcGxpZWRCdWZm
ZXIoKSB7fQorICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQo
Y29uc3QgSW50UmVjdCYgZGlydHlSZWN0LCBib29sIG9wYXF1ZSkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBlbmRQYWludCgpID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25z
dCA9IDA7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI+
IGNyZWF0ZSgpOworfTsKKworLy8gbmV4dCBwb3dlciBvZiB0d28KK3N0YXRpYyBpbmxpbmUgaW50
IG5wb3QoaW50IG51bSkKK3sKKyAgICBmb3IgKGludCBpID0gMHgxMDAwMDAwMDsgaSA+IDA7IGkg
Pj49IDEpIHsKKyAgICAgICAgaWYgKG51bSA9PSBpKQorICAgICAgICAgICAgcmV0dXJuIG51bTsK
KyAgICAgICAgaWYgKG51bSAmIGkpCisgICAgICAgICAgICByZXR1cm4gKGkgPDwgMSk7CisgICAg
fQorICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIEludFNpemUgbnBvdChjb25zdCBJ
bnRTaXplJiBzKQoreworICAgIHJldHVybiBJbnRTaXplKG5wb3Qocy53aWR0aCgpKSwgbnBvdChz
LmhlaWdodCgpKSk7Cit9CisKK307CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MjI5
ZTVjMWQ0NGUzNzcyN2UzNjYxMTRjZjEwNmY3ODViMWFhMTE3Ci0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwCkBAIC0wLDAg
KzEsMjIzIEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyLmgiCisKKyNpbmNs
dWRlICJRdENvcmUvcWRlYnVnLmgiCisjaW5jbHVkZSAiUXRHdWkvcXBhaW50ZW5naW5lLmgiCisj
aW5jbHVkZSAiUXRHdWkvcXBpeG1hcC5oIgorCisjaWZuZGVmIFFUX05PX0FOSU1BVElPTlMKKyMg
aW5jbHVkZSAiUXRDb3JlL3FhYnN0cmFjdGFuaW1hdGlvbi5oIgorI2VuZGlmCisKKyNpZmRlZiBR
VF9PUEVOR0xfTElCCisjIGluY2x1ZGUgIm9wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCIKKyNlbmRp
ZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJpdG1hcFRleHR1cmVRdCA6IHB1Ymxp
YyBCaXRtYXBUZXh0dXJlIHsKKyAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlclF0OworcHVi
bGljOgorICAgIEJpdG1hcFRleHR1cmVRdCgpIDogbV9nYygwKSB7fQorICAgIHZpcnR1YWwgdm9p
ZCBkZXN0cm95KCk7CisgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBJ
bnRTaXplKG1fcGl4bWFwLndpZHRoKCksIG1fcGl4bWFwLmhlaWdodCgpKTsgfQorICAgIHZpcnR1
YWwgdm9pZCByZXNldChjb25zdCBJbnRTaXplJiwgYm9vbCBvcGFxdWUpOworICAgIHZpcnR1YWwg
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlS
ZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29udGVudHNUb0ltYWdlKEltYWdlKik7CisgICAgdmlydHVhbCBib29sIHNhdmUoY29uc3QgU3Ry
aW5nICYpOworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gIW1fcGl4
bWFwLmlzTnVsbCgpOyB9CisgICAgdmlydHVhbCBib29sIGFsbG93T2ZmbGluZVRleHR1cmVVcGxv
YWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgSW50UmVjdCBzb3VyY2VSZWN0KCkgY29u
c3QgeyByZXR1cm4gSW50UmVjdCgwLCAwLCBjb250ZW50U2l6ZSgpLndpZHRoKCksIGNvbnRlbnRT
aXplKCkuaGVpZ2h0KCkpOyB9Citwcml2YXRlOgorICAgIFFQYWludGVyIG1fcGFpbnRlcjsKKyAg
ICBHcmFwaGljc0NvbnRleHQqIG1fZ2M7CisgICAgUVBpeG1hcCBtX3BpeG1hcDsKK307CisKK2Ns
YXNzIFRleHR1cmVNYXBwZXJRdCA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyIHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwg
Y29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1h
dHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpOwor
ICAgIHZpcnR1YWwgdm9pZCBiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q2xpcChjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29s
IGFsbG93U3VyZmFjZUZvclJvb3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIFRleHR1
cmVNYXBwZXJRdChHcmFwaGljc0NvbnRleHQqIGdjKTsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IHR5cGUoKSBjb25zdCB7IHJldHVybiAiUXQiOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJp
dG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKKworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxp
emUoUVBhaW50ZXIgKnBhaW50ZXIpCisgICAgeworICAgICAgICBwYWludGVyLT5zZXRSZW5kZXJI
aW50cyhRUGFpbnRlcjo6QW50aWFsaWFzaW5nIHwgUVBhaW50ZXI6OlNtb290aFBpeG1hcFRyYW5z
Zm9ybSwgZmFsc2UpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBRUGFpbnRlciogbV9wYWludGVy
OworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlUXQ+IG1fY3VycmVudFN1cmZhY2U7Cit9OworCit2
b2lkIEJpdG1hcFRleHR1cmVRdDo6ZGVzdHJveSgpCit7CisgICAgaWYgKG1fcGl4bWFwLnBhaW50
aW5nQWN0aXZlKCkpCisgICAgICAgIHFGYXRhbCgiRGVzdHJveWluZyBhbiBhY3RpdmUgcGl4bWFw
Iik7CisgICAgbV9waXhtYXAgPSBRUGl4bWFwKCk7Cit9CisKK3ZvaWQgQml0bWFwVGV4dHVyZVF0
OjpyZXNldChjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGlzT3BhcXVlKQoreworICAgIEJpdG1h
cFRleHR1cmU6OnJlc2V0KHNpemUsIGlzT3BhcXVlKTsKKworICAgIGlmIChzaXplLndpZHRoKCkg
PiBtX3BpeG1hcC5zaXplKCkud2lkdGgoKSB8fCBzaXplLmhlaWdodCgpID4gbV9waXhtYXAuc2l6
ZSgpLmhlaWdodCgpIHx8IG1fcGl4bWFwLmlzTnVsbCgpKQorICAgICAgICBtX3BpeG1hcCA9IFFQ
aXhtYXAoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICBpZiAoIWlzT3BhcXVlKQor
ICAgICAgICBtX3BpeG1hcC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7Cit9CisKK1BsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0KiBCaXRtYXBUZXh0dXJlUXQ6OmJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYg
ZGlydHlSZWN0KQoreworICAgIG1fcGFpbnRlci5iZWdpbigmbV9waXhtYXApOworICAgIFRleHR1
cmVNYXBwZXJRdDo6aW5pdGlhbGl6ZSgmbV9wYWludGVyKTsKKyAgICBtX3BhaW50ZXIuc2V0Q29t
cG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfQ2xlYXIpOworICAgIG1fcGFp
bnRlci5maWxsUmVjdChRUmVjdChkaXJ0eVJlY3QpLCBRdDo6dHJhbnNwYXJlbnQpOworICAgIG1f
cGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3Vy
Y2VPdmVyKTsKKyAgICByZXR1cm4gJm1fcGFpbnRlcjsKK30KKwordm9pZCBCaXRtYXBUZXh0dXJl
UXQ6OmVuZFBhaW50KCkKK3sKKyAgICBtX3BhaW50ZXIuZW5kKCk7Cit9CisKK2Jvb2wgQml0bWFw
VGV4dHVyZVF0OjpzYXZlKGNvbnN0IFN0cmluZyAmcGF0aCkKK3sKKyAgICByZXR1cm4gbV9waXht
YXAuc2F2ZShwYXRoLCAiUE5HIik7Cit9CisKK3ZvaWQgQml0bWFwVGV4dHVyZVF0OjpzZXRDb250
ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQoreworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJl
dHVybjsKKyAgICBjb25zdCBRUGl4bWFwKiBwaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JD
dXJyZW50RnJhbWUoKTsKKyAgICBpZiAoIXBpeG1hcCkKKyAgICAgICAgcmV0dXJuOworICAgIEJp
dG1hcFRleHR1cmU6OnJlc2V0KHBpeG1hcC0+c2l6ZSgpLCAhcGl4bWFwLT5oYXNBbHBoYUNoYW5u
ZWwoKSk7CisgICAgbV9waXhtYXAgPSAqcGl4bWFwOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJR
dDo6c2V0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgICBRUGFpbnRlciogcGFpbnRl
ciA9IG1fY3VycmVudFN1cmZhY2UgPyAmbV9jdXJyZW50U3VyZmFjZS0+bV9wYWludGVyIDogbV9w
YWludGVyOworICAgICBwYWludGVyLT5zZXRDbGlwUmVjdChyZWN0KTsKK30KKworVGV4dHVyZU1h
cHBlclF0OjpUZXh0dXJlTWFwcGVyUXQoR3JhcGhpY3NDb250ZXh0KiBnYykKKyAgICA6IFRleHR1
cmVNYXBwZXIoZ2MpCisgICAgLCBtX3BhaW50ZXIoZ2MtPnBsYXRmb3JtQ29udGV4dCgpKQorICAg
ICwgbV9jdXJyZW50U3VyZmFjZSgwKQoreworICAgIFRleHR1cmVNYXBwZXJRdDo6aW5pdGlhbGl6
ZShtX3BhaW50ZXIpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJRdDo6YmluZFN1cmZhY2UoQml0
bWFwVGV4dHVyZSogYVN1cmZhY2UpCit7CisgICAgaWYgKG1fY3VycmVudFN1cmZhY2UgPT0gYVN1
cmZhY2UpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9jdXJyZW50U3VyZmFjZSkKKyAgICAg
ICAgbV9jdXJyZW50U3VyZmFjZS0+bV9wYWludGVyLmVuZCgpOworICAgIGlmICghYVN1cmZhY2Up
IHsKKyAgICAgICAgbV9jdXJyZW50U3VyZmFjZSA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgQml0bWFwVGV4dHVyZVF0KiBzdXJmYWNlID0gc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVy
ZVF0Kj4oYVN1cmZhY2UpOworICAgIGlmICghc3VyZmFjZS0+bV9wYWludGVyLmlzQWN0aXZlKCkp
CisgICAgICAgIHN1cmZhY2UtPm1fcGFpbnRlci5iZWdpbigmc3VyZmFjZS0+bV9waXhtYXApOwor
ICAgIG1fY3VycmVudFN1cmZhY2UgPSBzdXJmYWNlOworfQorCisKK3ZvaWQgVGV4dHVyZU1hcHBl
clF0OjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiBhVGV4dHVyZSwgY29uc3QgSW50
UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxv
YXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCit7CisgICAgY29u
c3QgQml0bWFwVGV4dHVyZVF0JiB0ZXh0dXJlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4
dHVyZVF0Jj4oYVRleHR1cmUpOworICAgIFFQYWludGVyKiBwYWludGVyID0gbV9wYWludGVyOwor
ICAgIFFQaXhtYXAgcGl4bWFwID0gdGV4dHVyZS5tX3BpeG1hcDsKKyAgICBpZiAobV9jdXJyZW50
U3VyZmFjZSkKKyAgICAgICAgcGFpbnRlciA9ICZtX2N1cnJlbnRTdXJmYWNlLT5tX3BhaW50ZXI7
CisKKyAgICBpZiAobWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQoKSkgeworICAg
ICAgICBjb25zdCBCaXRtYXBUZXh0dXJlUXQqIG1hc2tRdCA9IHN0YXRpY19jYXN0PGNvbnN0IEJp
dG1hcFRleHR1cmVRdCo+KG1hc2tUZXh0dXJlKTsKKyAgICAgICAgUVBpeG1hcCBpbnRlcm1lZGlh
dGVQaXhtYXAocGl4bWFwLnNpemUoKSk7CisgICAgICAgIGludGVybWVkaWF0ZVBpeG1hcC5maWxs
KFF0Ojp0cmFuc3BhcmVudCk7CisgICAgICAgIFFQYWludGVyIG1hc2tQYWludGVyKCZpbnRlcm1l
ZGlhdGVQaXhtYXApOworICAgICAgICBtYXNrUGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBh
aW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2UpOworICAgICAgICBtYXNrUGFpbnRlci5kcmF3
UGl4bWFwKDAsIDAsIHBpeG1hcCk7CisgICAgICAgIG1hc2tQYWludGVyLnNldENvbXBvc2l0aW9u
TW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX0Rlc3RpbmF0aW9uSW4pOworICAgICAgICBt
YXNrUGFpbnRlci5kcmF3UGl4bWFwKFFSZWN0KDAsIDAsIHBpeG1hcC53aWR0aCgpLCBwaXhtYXAu
aGVpZ2h0KCkpLCBtYXNrUXQtPm1fcGl4bWFwLCBtYXNrUXQtPnNvdXJjZVJlY3QoKSk7CisgICAg
ICAgIG1hc2tQYWludGVyLmVuZCgpOworICAgICAgICBwaXhtYXAgPSBpbnRlcm1lZGlhdGVQaXht
YXA7CisgICAgfQorCisgICAgY29uc3QgcXJlYWwgcHJldk9wYWNpdHkgPSBwYWludGVyLT5vcGFj
aXR5KCk7CisgICAgY29uc3QgUVRyYW5zZm9ybSBwcmV2VHJhbnNmb3JtID0gcGFpbnRlci0+dHJh
bnNmb3JtKCk7CisgICAgcGFpbnRlci0+c2V0T3BhY2l0eShvcGFjaXR5KTsKKyAgICBwYWludGVy
LT5zZXRUcmFuc2Zvcm0obWF0cml4LCB0cnVlKTsKKyAgICBwYWludGVyLT5kcmF3UGl4bWFwKHRh
cmdldFJlY3QsIHBpeG1hcCwgdGV4dHVyZS5zb3VyY2VSZWN0KCkpOworICAgIHBhaW50ZXItPnNl
dFRyYW5zZm9ybShwcmV2VHJhbnNmb3JtKTsKKyAgICBwYWludGVyLT5zZXRPcGFjaXR5KHByZXZP
cGFjaXR5KTsKK30KKworUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyPiBUZXh0dXJlTWFwcGVyOjpj
cmVhdGUoR3JhcGhpY3NDb250ZXh0KiBnYykKK3sKKyNpZmRlZiBRVF9PUEVOR0xfTElCCisgICAg
aWYgKGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+cGFpbnRFbmdpbmUoKS0+dHlwZSgpID09IFFQYWlu
dEVuZ2luZTo6T3BlbkdMMikKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFw
cGVyR0woZ2MpKTsKKyNlbmRpZgorICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBl
clF0KGdjKSk7Cit9CisKKworUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVy
UXQ6OmNyZWF0ZVRleHR1cmUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQml0bWFwVGV4dHVyZVF0
KCkpOyB9CisKKyNpZmRlZiBRVF9PUEVOR0xfTElCCitjbGFzcyBSR0JBMzJQcmVtdWx0aW1wbGll
ZEJ1ZmZlclF0IDogcHVibGljIFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyIHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50KGNvbnN0IElu
dFJlY3QmIHJlY3QsIGJvb2wgb3BhcXVlKQorICAgIHsKKyAgICAgICAgbV9pbWFnZSA9IFFJbWFn
ZShyZWN0LnNpemUoKS53aWR0aCgpLCByZWN0LnNpemUoKS5oZWlnaHQoKSwgUUltYWdlOjpGb3Jt
YXRfQVJHQjMyX1ByZW11bHRpcGxpZWQpOworICAgICAgICBpZiAoIW9wYXF1ZSkKKyAgICAgICAg
ICAgIG1faW1hZ2UuZmlsbCgwKTsKKyAgICAgICAgbV9wYWludGVyLmJlZ2luKCZtX2ltYWdlKTsK
KyAgICAgICAgVGV4dHVyZU1hcHBlclF0Ojppbml0aWFsaXplKCZtX3BhaW50ZXIpOworICAgICAg
ICBtX3BhaW50ZXIudHJhbnNsYXRlKC1yZWN0LngoKSwgLXJlY3QueSgpKTsKKyAgICAgICAgcmV0
dXJuICZtX3BhaW50ZXI7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCkgeyBt
X3BhaW50ZXIuZW5kKCk7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdCB7
IHJldHVybiBtX2ltYWdlLmNvbnN0Qml0cygpOyB9CisKK3ByaXZhdGU6CisgICAgUVBhaW50ZXIg
bV9wYWludGVyOworICAgIFFJbWFnZSBtX2ltYWdlOworfTsKK1Bhc3NSZWZQdHI8UkdCQTMyUHJl
bXVsdGltcGxpZWRCdWZmZXI+IFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyOjpjcmVhdGUoKSB7
IHJldHVybiBhZG9wdFJlZihuZXcgUkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXJRdCgpKTsgfQor
I2VuZGlmCit9OworCisjaW5jbHVkZSA8VGV4dHVyZU1hcHBlclF0Lm1vYz4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYmI3OGRmZWI3YWU3ZTBlY2ZlMjVmNTg5ODBh
MmFkMmY5MWU0OWE3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCkBAIC0wLDAgKzEsMTYwMSBA
QAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCisKKyNpbmNsdWRlICJDdXJyZW50VGltZS5oIgor
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkhhc2hNYXAuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIlJlZkNvdW50
ZWQuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIlRyYW5zZm9y
bU9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIK
KyNpbmNsdWRlICJVbml0QmV6aWVyLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmIFBMQVRG
T1JNKFFUKQorI2luY2x1ZGUgIlF0Q29yZS9xZGVidWcuaCIKKyNlbmRpZgorCisjZGVmaW5lIERF
QlVHX1RFWE1BUF9GUFMgMQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBUZXhtYXBQ
YWludE9wdGlvbnMgeworICAgIEJpdG1hcFRleHR1cmUqIHN1cmZhY2U7CisgICAgVGV4dHVyZU1h
cHBlciogdGV4dHVyZU1hcHBlcjsKKyAgICBHcmFwaGljc0NvbnRleHQqIGdjOworICAgIFRleHR1
cmVNYXBwZXJOb2RlKiByb290TGF5ZXI7CisgICAgZmxvYXQgb3BhY2l0eTsKKyAgICBJbnRSZWN0
IHNjaXNzb3JSZWN0OworICAgIEludFJlY3QgdmlzaWJsZVJlY3Q7Cit9OworY2xhc3MgVGV4dHVy
ZU1hcHBlckNhY2hlIHsKK3B1YmxpYzoKKyAgICB2b2lkIG1hcmsoQml0bWFwVGV4dHVyZSAqdGV4
dHVyZSk7CisKKyAgICBjbGFzcyBFbnRyeSB7CisgICAgcHVibGljOgorICAgICAgICBSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gdGV4dHVyZTsKKyAgICAgICAgRW50cnkoKSA6IHByZXZpb3VzQ29zdCgw
KSB7IH0KKyAgICAgICAgaW5saW5lIGludCBjYWxjdWxhdGVDb3N0KCkgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKCF0ZXh0dXJlIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjb25zdCBJbnRTaXplIHN6ID0gdGV4
dHVyZS0+c2l6ZSgpOworICAgICAgICAgICAgcmV0dXJuIHN6LndpZHRoKCkgKiBzei5oZWlnaHQo
KSAqIDQ7CisgICAgICAgIH0KKyAgICAgICAgRW50cnkoQml0bWFwVGV4dHVyZSogbmV3VGV4dHVy
ZSkKKyAgICAgICAgICAgIDogdGV4dHVyZShuZXdUZXh0dXJlKQorICAgICAgICB7CisgICAgICAg
IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEVudHJ5JiBvdGhlcikgY29uc3QgeyBy
ZXR1cm4gdGV4dHVyZSA9PSBvdGhlci50ZXh0dXJlOyB9CisgICAgICAgIGludCBwcmV2aW91c0Nv
c3Q7CisgICAgfTsKKworICAgIFRleHR1cmVNYXBwZXJDYWNoZSgpIDogbV90b3RhbENvc3QoMCkg
e30KKworICAgIHZvaWQgcHVyZ2UoKTsKKyAgICBWZWN0b3I8RW50cnk+IG1fZGF0YTsKKyAgICBp
bnQgbV90b3RhbENvc3Q7CisjaWZuZGVmIFRFWE1BUF9URVhUVVJFX0NBQ0hFX0tCUworI2RlZmlu
ZSBURVhNQVBfVEVYVFVSRV9DQUNIRV9LQlMgMjQgKiAxMDI0CisjZW5kaWYKKyAgICBzdGF0aWMg
Y29uc3QgaW50IE1heENvc3QgPSBURVhNQVBfVEVYVFVSRV9DQUNIRV9LQlMgKiAxMDI0OworICAg
IHN0YXRpYyBjb25zdCBpbnQgUHVyZ2VBbW91bnQgPSBNYXhDb3N0IC8gNDsKK307CisKKwordm9p
ZCBUZXh0dXJlTWFwcGVyQ2FjaGU6OnB1cmdlKCkKK3sKKyAgICAvLyBuZWVkcyBhY3RpdmUgY29u
dGV4dDogdGV4dHVyZS5kZXN0cm95CisgICAgY29uc3QgaW50IHNpemUgPSBtX2RhdGEuc2l6ZSgp
OworCisgICAgaWYgKG1fdG90YWxDb3N0IDw9IFRleHR1cmVNYXBwZXJDYWNoZTo6TWF4Q29zdCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRW5zdXJlIHRoYXQgd2UgaGF2ZSB0aGUgcmlnaHQg
Y291bnQuIEl0IG1pZ2h0IGJlIGluYWNjdXJhdGUgaWYgY29udGVudCBjaGFuZ2VkIHNpemUuCisg
ICAgLy8gV2Ugb25seSBkbyB0aGlzIHdoZW4gd2UncmUgYWN0dWFsbHkgcmVhZHkgdG8gcHVyZ2Uu
CisgICAgbV90b3RhbENvc3QgPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KQorICAgICAgICBtX3RvdGFsQ29zdCArPSBtX2RhdGFbaV0uY2FsY3VsYXRlQ29zdCgpOworCisg
ICAgaW50IGJlZm9yZSA9IG1fdG90YWxDb3N0OworICAgIGZvciAoaW50IGkgPSBzaXplLTE7IGkg
Pj0gMCAmJiBtX3RvdGFsQ29zdCA+IFRleHR1cmVNYXBwZXJDYWNoZTo6TWF4Q29zdCAtIFRleHR1
cmVNYXBwZXJDYWNoZTo6UHVyZ2VBbW91bnQ7IC0taSkgeworICAgICAgICBFbnRyeSYgZW50cnkg
PSBtX2RhdGFbaV07CisgICAgICAgIGlmIChlbnRyeS50ZXh0dXJlLT5pc0xvY2tlZCgpIHx8ICFl
bnRyeS50ZXh0dXJlLT5pc1ZhbGlkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
bV90b3RhbENvc3QgLT0gZW50cnkucHJldmlvdXNDb3N0OworICAgICAgICBlbnRyeS50ZXh0dXJl
LT5kZXN0cm95KCk7CisgICAgICAgIG1fZGF0YS5yZW1vdmUoaSk7CisgICAgfQorCisgICAgcHJp
bnRmKCJbVGV4dHVyZU1hcHBlcl0gUHVyZ2VkICUyLjRmSyBvZiB0ZXh0dXJlcyglZCkgWyUyLjRm
Sy8lZF1cbiIsIGZsb2F0KGJlZm9yZSAtIG1fdG90YWxDb3N0KSAvIDEwMjQsCisgICAgICAgICAg
IGludChzaXplLW1fZGF0YS5zaXplKCkpLCBmbG9hdChtX3RvdGFsQ29zdCkgLyAxMDI0LCBtX2Rh
dGEuc2l6ZSgpKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyQ2FjaGU6Om1hcmsoQml0bWFwVGV4
dHVyZSAqdGV4dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUgfHwgIXRleHR1cmUtPmlzVmFsaWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRW50cnkgZW50cnkodGV4dHVyZSk7CisgICAgc2l6
ZV90IGluZGV4ID0gbV9kYXRhLmZpbmQoZW50cnkpOworICAgIGlmICghaW5kZXgpCisgICAgICAg
IHJldHVybjsKKworICAgIHByaW50ZigiWWF5YSEhICVkIFslZF0gWyVkXSIsIGluZGV4LCBtX2Rh
dGEuc2l6ZSgpLCBtX3RvdGFsQ29zdCk7CisgICAgaWYgKGluZGV4IDwgbV9kYXRhLnNpemUoKSkg
CisgICAgICAgIG1fZGF0YS5yZW1vdmUoaW5kZXgpOworICAgIGNvbnN0IGludCBjb3N0ID0gZW50
cnkuY2FsY3VsYXRlQ29zdCgpOworICAgIG1fdG90YWxDb3N0IC09IGVudHJ5LnByZXZpb3VzQ29z
dDsKKyAgICBtX3RvdGFsQ29zdCArPSAoZW50cnkucHJldmlvdXNDb3N0ID0gY29zdCk7CisgICAg
bV9kYXRhLnByZXBlbmQoZW50cnkpOworfQorCitUZXh0dXJlTWFwcGVyQ2FjaGUgZ1RleHR1cmVN
YXBwZXJDYWNoZTsKKworY2xhc3MgVGV4dHVyZU1hcHBlckNhY2hlTG9jayB7CitwdWJsaWM6Cisg
ICAgVGV4dHVyZU1hcHBlckNhY2hlTG9jayhCaXRtYXBUZXh0dXJlKiB0ZXh0dXJlKSA6IG1fdGV4
dHVyZSh0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgICAg
IG1fdGV4dHVyZS0+bG9jaygpOworICAgIH0KKyAgICB+VGV4dHVyZU1hcHBlckNhY2hlTG9jaygp
CisgICAgeworICAgICAgICBpZiAobV90ZXh0dXJlKQorICAgICAgICAgICAgbV90ZXh0dXJlLT51
bmxvY2soKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1f
dGV4dHVyZTsKK307CisKK2NsYXNzIFRleHR1cmVNYXBwZXJOb2RlIDogcHVibGljIFRleHR1cmVN
YXBwZXJDb250ZW50TGF5ZXIgeworCitwdWJsaWM6CisgICAgLy8gVGhpcyBzZXQgb2YgZmxhZ3Mg
aGVscCB1cyBkZWZlciB3aGljaCBwcm9wZXJ0aWVzIG9mIHRoZSBsYXllciBoYXZlIGJlZW4KKyAg
ICAvLyBtb2RpZmllZCBieSB0aGUgY29tcG9zaXRvciwgc28gd2UgY2FuIGtub3cgd2hhdCB0byBs
b29rIGZvciBpbiB0aGUgbmV4dCBmbHVzaC4KKyAgICBlbnVtIENoYW5nZU1hc2sgeworICAgICAg
ICBOb0NoYW5nZXMgPSAgICAgICAgICAgICAgICAgMCwKKworICAgICAgICBQYXJlbnRDaGFuZ2Ug
PSAgICAgICAgICAgICAgKDFMIDw8IDApLAorICAgICAgICBDaGlsZHJlbkNoYW5nZSA9ICAgICAg
ICAgICAgKDFMIDw8IDEpLAorICAgICAgICBNYXNrTGF5ZXJDaGFuZ2UgPSAgICAgICAgICAgKDFM
IDw8IDIpLAorICAgICAgICBQb3NpdGlvbkNoYW5nZSA9ICAgICAgICAgICAgKDFMIDw8IDMpLAor
CisgICAgICAgIEFuY2hvclBvaW50Q2hhbmdlID0gICAgICAgICAoMUwgPDwgNCksCisgICAgICAg
IFNpemVDaGFuZ2UgID0gICAgICAgICAgICAgICAoMUwgPDwgNSksCisgICAgICAgIFRyYW5zZm9y
bUNoYW5nZSA9ICAgICAgICAgICAoMUwgPDwgNiksCisgICAgICAgIENvbnRlbnRDaGFuZ2UgPSAg
ICAgICAgICAgICAoMUwgPDwgNyksCisKKyAgICAgICAgQ29udGVudHNPcmllbnRhdGlvbkNoYW5n
ZSA9ICgxTCA8PCA5KSwKKyAgICAgICAgT3BhY2l0eUNoYW5nZSA9ICAgICAgICAgICAgICgxTCA8
PCAxMCksCisgICAgICAgIENvbnRlbnRzUmVjdENoYW5nZSA9ICAgICAgICAoMUwgPDwgMTEpLAor
CisgICAgICAgIFByZXNlcnZlczNEQ2hhbmdlID0gICAgICAgICAoMUwgPDwgMTIpLAorICAgICAg
ICBNYXNrc1RvQm91bmRzQ2hhbmdlID0gICAgICAgKDFMIDw8IDEzKSwKKyAgICAgICAgRHJhd3ND
b250ZW50Q2hhbmdlID0gICAgICAgICgxTCA8PCAxNCksCisgICAgICAgIENvbnRlbnRzT3BhcXVl
Q2hhbmdlID0gICAgICAoMUwgPDwgMTUpLAorCisgICAgICAgIEJhY2tmYWNlVmlzaWJpbGl0eUNo
YW5nZSA9ICAoMUwgPDwgMTYpLAorICAgICAgICBDaGlsZHJlblRyYW5zZm9ybUNoYW5nZSA9ICAg
KDFMIDw8IDE3KSwKKyAgICAgICAgRGlzcGxheUNoYW5nZSA9ICAgICAgICAgICAgICgxTCA8PCAx
OCksCisgICAgICAgIEJhY2tncm91bmRDb2xvckNoYW5nZSA9ICAgICAoMUwgPDwgMTkpLAorCisg
ICAgICAgIFJlcGxpY2FMYXllckNoYW5nZSA9ICAgICAgICAoMUwgPDwgMjApCisgICAgfTsKKwor
ICAgIC8vIFRoZSBjb21wb3NpdG9yIGxldHMgdXMgc3BlY2lhbC1jYXNlIGltYWdlcyBhbmQgY29s
b3JzLCBzbyB3ZSB0cnkgdG8gZG8gc28uCisgICAgZW51bSBTdGF0aWNDb250ZW50VHlwZSB7IEhU
TUxDb250ZW50VHlwZSwgRGlyZWN0SW1hZ2VDb250ZW50VHlwZSwgQ29sb3JDb250ZW50VHlwZSwg
TWVkaWFDb250ZW50VHlwZSwgQ2FudmFzM0RDb250ZW50VHlwZX07CisKKyAgICBUZXh0dXJlTWFw
cGVyTm9kZSogcm9vdExheWVyKCk7CisKKyAgICBUZXh0dXJlTWFwcGVyTm9kZShHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlciogbmV3TGF5ZXIpOworICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJO
b2RlKCk7CisKKyNpZiBERUJVR19URVhNQVBfRlBTCisgICAgdm9pZCBiZWdpbkFuaW1hdGlvbihB
bmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHkpOworICAgIHZvaWQgZW5kQW5pbWF0aW9uKEFuaW1h
dGVkUHJvcGVydHlJRCBwcm9wZXJ0eSk7CisjZW5kaWYKKworICAgIHZvaWQgY2xlYXJEaXJlY3RJ
bWFnZSgpOworICAgIHZvaWQgY29tcHV0ZVRyYW5zZm9ybWF0aW9ucygpOworICAgIEludFNpemUg
bmVhcmVzdFN1cmZhY2VTaXplKCkgY29uc3Q7CisgICAgdm9pZCBjb21wdXRlUmVwbGljYVRyYW5z
Zm9ybSgpOworICAgIHZvaWQgY29tcHV0ZUxheWVyVHlwZSgpOworICAgIHZvaWQgY29tcHV0ZUxv
Y2FsVHJhbnNmb3JtKCk7CisgICAgdm9pZCBmbGF0dGVuVG8yRFNwYWNlSWZOZWNlc3NhcnkoKTsK
KyAgICB2b2lkIGluaXRpYWxpemVUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqKTsKKyAgICB2
b2lkIGludmFsaWRhdGVUcmFuc2Zvcm0oKTsKKyAgICB2b2lkIG5vdGlmeUNoYW5nZShDaGFuZ2VN
YXNrKTsKKyAgICB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlKGJvb2wgcmVjdXJzZSk7CisgICAg
dm9pZCBwZXJmb3JtUG9zdFN5bmNPcGVyYXRpb25zKCk7CisgICAgdm9pZCBzZXROZWVkc0Rpc3Bs
YXkoKTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChJbnRSZWN0KTsKKyAgICB2aXJ0
dWFsIHZvaWQgY2xlYW51cFRleHR1cmVNYXBwZXIoKTsKKworI2lmIEVOQUJMRV9URVhNQVBfQU5J
TUFUSU9OCisgICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
KTsKKyAgICB2b2lkIHNldE9wYWNpdHlGcm9tQW5pbWF0aW9uRnJhbWUoZmxvYXQgb3BhY2l0eSk7
CisgICAgdm9pZCBzZXRUcmFuc2Zvcm1Gcm9tQW5pbWF0aW9uRnJhbWUoY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmKTsKKyAgICB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoKTsKKyAgICB2
b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRpbWVyPFRleHR1cmVNYXBwZXJO
b2RlPiopIHsgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZCgpOyB9CisgICAgdm9pZCBub3RpZnlBbmlt
YXRpb25TdGFydGVkQXN5bmMoKSB7IG1fbm90aWZ5QW5pbWF0aW9uU3RhcnRlZFRpbWVyLnN0YXJ0
T25lU2hvdCgwKTsgfQorICAgIHZvaWQgbm90aWZ5VHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZyhi
b29sIHIpOworICAgIHZvaWQgbm90aWZ5T3BhY2l0eUFuaW1hdGlvblJ1bm5pbmcoYm9vbCByKTsK
KyNlbmRpZgorCisgICAgdm9pZCBwYWludFJlY3Vyc2l2ZShUZXhtYXBQYWludE9wdGlvbnMgb3B0
aW9ucyk7CisgICAgdm9pZCBwYWludFNlbGYoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwg
ZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIEJpdG1hcFRleHR1cmUq
IHJlcGxpY2FNYXNrVGV4dHVyZSwgYm9vbCBpc1N1cmZhY2UpOworICAgIHZvaWQgdXBsb2FkVGV4
dHVyZUZyb21Db250ZW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpOworCisgICAgaW50
IGNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCgpIGNvbnN0OworICAgIGJvb2wgaGFzU3VyZmFj
ZURlc2NlbmRhbnRzKCkgY29uc3Q7CisKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVy
biBtX3NpemU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRQbGF0Zm9ybUxheWVyQ2xpZW50KFRl
eHR1cmVNYXBwZXJMYXllckNsaWVudCopOworICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29u
c3QgSW50UmVjdCYgZXhwb3NlZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFu
c2Zvcm0sIGZsb2F0IG9wYWNpdHkpOworCisgICAgc3RhdGljIFRleHR1cmVNYXBwZXJOb2RlKiB0
b1RleHR1cmVNYXBwZXJOb2RlKEdyYXBoaWNzTGF5ZXIqKTsKK3B1YmxpYzoKKyAgICBHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlciogbV9sYXllcjsKKyAgICBjb25zdCBjaGFyKiBtX2xhc3RUZXh0
dXJlTWFwcGVyVHlwZTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlcj4gbV9sYXN0VGV4dHVyZU1h
cHBlcjsKKyAgICBzdHJ1Y3QgVHJhbnNmb3JtRGF0YSB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IGJhc2UsIHRhcmdldCwgcmVwbGljYSwgZm9yRGVzY2VuZGFudHMsIHBlcnNwZWN0aXZl
LCBsb2NhbDsKKyAgICAgICAgSW50UmVjdCB0YXJnZXRCb3VuZGluZ1JlY3Q7CisgICAgICAgIGZs
b2F0IGNlbnRlclo7CisgICAgICAgIGJvb2wgZGlydHksIGxvY2FsRGlydHksIHBlcnNwZWN0aXZl
RGlydHk7CisgICAgICAgIEludFJlY3QgYm91bmRpbmdSZWN0RnJvbVJvb3Q7CisgICAgICAgIFRy
YW5zZm9ybURhdGEoKSA6IGRpcnR5KHRydWUpLCBsb2NhbERpcnR5KHRydWUpLCBwZXJzcGVjdGl2
ZURpcnR5KHRydWUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBUcmFuc2Zv
cm1EYXRhIG1fdHJhbnNmb3JtczsKKworICAgIGVudW0gTGF5ZXJUeXBlIHsKKyAgICAgICAgRGVm
YXVsdExheWVyLAorICAgICAgICBSb290TGF5ZXIsCisgICAgICAgIFNjaXNzb3JMYXllciwKKyAg
ICAgICAgQ2xpcExheWVyLAorICAgICAgICBUcmFuc3BhcmVuY3lMYXllcgorICAgIH07CisKKyAg
ICBMYXllclR5cGUgbV9sYXllclR5cGU7CisKKyAgICBzdHJ1Y3QgQ29udGVudERhdGEgeworICAg
ICAgICBJbnRSZWN0IG5lZWRzRGlzcGxheVJlY3Q7CisgICAgICAgIGJvb2wgbmVlZHNEaXNwbGF5
OworICAgICAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3I7CisKKyAgICAgICAgU3RhdGljQ29udGVu
dFR5cGUgY29udGVudFR5cGU7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2U7CisgICAgICAg
IFRleHR1cmVNYXBwZXJWaWRlb0xheWVyKiBtZWRpYTsKKworICAgICAgICBDb250ZW50RGF0YSgp
CisgICAgICAgICAgICA6IG5lZWRzRGlzcGxheShmYWxzZSkKKyAgICAgICAgICAgICwgY29udGVu
dFR5cGUoSFRNTENvbnRlbnRUeXBlKQorICAgICAgICAgICAgLCBpbWFnZSgwKQorICAgICAgICAg
ICAgLCBtZWRpYSgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgIH07CisKKyAgICBpbmxp
bmUgSW50UmVjdCB0YXJnZXRSZWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2N1
cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSA/IGZ1bGxSZWN0KCkg
OiBtX3N0YXRlLmNvbnRlbnRzUmVjdDsKKyAgICB9CisKKyAgICBpbmxpbmUgSW50UmVjdCBmdWxs
UmVjdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAwLCBtX3NpemUu
d2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSW50UmVjdCBy
ZXBsaWNhUmVjdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9sYXllclR5cGUgPT0g
VHJhbnNwYXJlbmN5TGF5ZXIgPyBJbnRSZWN0KDAsIDAsIG1fbmVhcmVzdFN1cmZhY2VTaXplLndp
ZHRoKCksIG1fbmVhcmVzdFN1cmZhY2VTaXplLmhlaWdodCgpKSA6IGZ1bGxSZWN0KCk7CisgICAg
fQorCisgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1fdGV4dHVyZTsKKyAgICBSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gbV9zdXJmYWNlLCBtX3JlcGxpY2FTdXJmYWNlOworCisgICAgQ29udGVudERh
dGEgbV9wZW5kaW5nQ29udGVudDsKKyAgICBDb250ZW50RGF0YSBtX2N1cnJlbnRDb250ZW50Owor
CisgICAgVmVjdG9yPFRleHR1cmVNYXBwZXJOb2RlKj4gbV9jaGlsZHJlbjsKKyAgICBUZXh0dXJl
TWFwcGVyTm9kZSogbV9wYXJlbnQ7CisgICAgVGV4dHVyZU1hcHBlck5vZGUqIG1fZWZmZWN0VGFy
Z2V0OworI2lmIERFQlVHX1RFWE1BUF9GUFMKKyAgICBzdHJ1Y3QgR3JhcGhpY3NMYXllckFuaW1h
dGlvbiB7CisgICAgICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb24oKSA6IGZyYW1lcygwKSB7IGxh
c3QgPSBzdGFydGVkID0gV1RGOjpjdXJyZW50VGltZSgpOyB9CisgICAgICAgIGludCBmcmFtZXM7
CisgICAgICAgIGRvdWJsZSBsYXN0LCBzdGFydGVkOworICAgIH07CisgICAgSGFzaE1hcDxpbnQs
IEdyYXBoaWNzTGF5ZXJBbmltYXRpb24qPiBtX2FuaW1fZnBzOworI2VuZGlmCisKKyAgICBpbnQg
bV9jaGFuZ2VNYXNrOworICAgIEludFNpemUgbV9zaXplLCBtX25lYXJlc3RTdXJmYWNlU2l6ZTsK
KyAgICBTdHJpbmcgbV9uYW1lOworICAgIFRleHR1cmVNYXBwZXJMYXllckNsaWVudCogbV9wbGF0
Zm9ybUNsaWVudDsKKworICAgIHN0cnVjdCBTdGF0ZSB7CisgICAgICAgIEZsb2F0UG9pbnQgcG9z
OworICAgICAgICBGbG9hdFBvaW50M0QgYW5jaG9yUG9pbnQ7CisgICAgICAgIEZsb2F0U2l6ZSBz
aXplOworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CisgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkcmVuVHJhbnNmb3JtOworICAgICAgICBDb2xvciBiYWNr
Z3JvdW5kQ29sb3I7CisgICAgICAgIENvbG9yIGN1cnJlbnRDb2xvcjsKKyAgICAgICAgR3JhcGhp
Y3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIGdlb09yaWVudGF0aW9u
OworICAgICAgICBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRp
b24gY29udGVudHNPcmllbnRhdGlvbjsKKyAgICAgICAgZmxvYXQgb3BhY2l0eTsKKyAgICAgICAg
SW50UmVjdCBjb250ZW50c1JlY3Q7CisgICAgICAgIGludCBkZXNjZW5kYW50c1dpdGhDb250ZW50
OworICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbWFza0xheWVyOworICAgICAgICBUZXh0dXJl
TWFwcGVyTm9kZSogcmVwbGljYUxheWVyOworICAgICAgICBib29sIHByZXNlcnZlczNEOworICAg
ICAgICBib29sIG1hc2tzVG9Cb3VuZHM7CisgICAgICAgIGJvb2wgZHJhd3NDb250ZW50OworICAg
ICAgICBib29sIGNvbnRlbnRzT3BhcXVlOworICAgICAgICBib29sIGJhY2tmYWNlVmlzaWJpbGl0
eTsKKyAgICAgICAgYm9vbCB2aXNpYmxlOworICAgICAgICBib29sIGRpcnR5OworICAgICAgICBi
b29sIHRpbGVkOworICAgICAgICBib29sIGhhc1N1cmZhY2VEZXNjZW5kYW50czsKKworICAgICAg
ICBTdGF0ZSgpCisgICAgICAgICAgICA6IG9wYWNpdHkoMS5mKQorICAgICAgICAgICAgLCBkZXNj
ZW5kYW50c1dpdGhDb250ZW50KDApCisgICAgICAgICAgICAsIG1hc2tMYXllcigwKQorICAgICAg
ICAgICAgLCByZXBsaWNhTGF5ZXIoMCkKKyAgICAgICAgICAgICwgcHJlc2VydmVzM0QoZmFsc2Up
CisgICAgICAgICAgICAsIG1hc2tzVG9Cb3VuZHMoZmFsc2UpCisgICAgICAgICAgICAsIGRyYXdz
Q29udGVudChmYWxzZSkKKyAgICAgICAgICAgICwgY29udGVudHNPcGFxdWUoZmFsc2UpCisgICAg
ICAgICAgICAsIGJhY2tmYWNlVmlzaWJpbGl0eShmYWxzZSkKKyAgICAgICAgICAgICwgdmlzaWJs
ZSh0cnVlKQorICAgICAgICAgICAgLCBkaXJ0eSh0cnVlKQorICAgICAgICAgICAgLCB0aWxlZChm
YWxzZSkKKyAgICAgICAgICAgICwgaGFzU3VyZmFjZURlc2NlbmRhbnRzKGZhbHNlKQorICAgICAg
ICB7CisgICAgICAgIH0KKyAgICB9OworICAgIFN0YXRlIG1fc3RhdGU7Cit9OworCit2b2lkIFRl
eHR1cmVNYXBwZXJOb2RlOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoSW50UmVjdCByZWN0KQorewor
ICAgIGlmIChtX3BsYXRmb3JtQ2xpZW50KSB7CisgICAgICAgIGlmIChtX3N0YXRlLmhhc1N1cmZh
Y2VEZXNjZW5kYW50cykgeworICAgICAgICAgICAgbV9wbGF0Zm9ybUNsaWVudC0+c2V0TmVlZHNE
aXNwbGF5KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcmVjdC5p
bnRlcnNlY3QoSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7
CisgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgbV9wbGF0Zm9ybUNsaWVudC0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3BhcmVudCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9wYXJlbnQtPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKK30KKwordm9pZCBU
ZXh0dXJlTWFwcGVyTm9kZTo6c2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBpZiAobV9lZmZlY3RU
YXJnZXQpCisgICAgICAgIG1fZWZmZWN0VGFyZ2V0LT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBp
ZiAobV90cmFuc2Zvcm1zLnRhcmdldEJvdW5kaW5nUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAobV9zdGF0ZS5kcmF3c0NvbnRlbnQgfHwgbV9jdXJyZW50Q29udGVudC5j
b250ZW50VHlwZSAhPSBIVE1MQ29udGVudFR5cGUpCisgICAgICAgIHNldE5lZWRzRGlzcGxheUlu
UmVjdChtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0KTsKK30KKworCit2b2lkIFRleHR1
cmVNYXBwZXJOb2RlOjpzZXRQbGF0Zm9ybUxheWVyQ2xpZW50KFRleHR1cmVNYXBwZXJMYXllckNs
aWVudCogY2xpZW50KQoreworICAgIG1fcGxhdGZvcm1DbGllbnQgPSBjbGllbnQ7Cit9CisKK3N0
YXRpYyBpbnQgY29tcGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKGNvbnN0IHZvaWQqIHBhLCBjb25z
dCB2b2lkKiBwYikKK3sKKyAgICB0eXBlZGVmIGNvbnN0IFRleHR1cmVNYXBwZXJOb2RlKiBwdHI7
CisgICAgY29uc3QgcHRyKiBhID0gc3RhdGljX2Nhc3Q8Y29uc3QgcHRyKj4ocGEpOworICAgIGNv
bnN0IHB0ciogYiA9IHN0YXRpY19jYXN0PGNvbnN0IHB0cio+KHBiKTsKKyAgICByZXR1cm4gaW50
KCgoKmEpLT5tX3RyYW5zZm9ybXMuY2VudGVyWiAtICgqYiktPm1fdHJhbnNmb3Jtcy5jZW50ZXJa
KSoxMDAwKTsKK30KK2lubGluZSBzdGF0aWMgdm9pZCBzb3J0QnlaT3JkZXIoVmVjdG9yPFRleHR1
cmVNYXBwZXJOb2RlKiA+JiBhcnJheSwgaW50IGZpcnN0LCBpbnQgbGFzdCkKK3sKKyAgICBxc29y
dChhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgc2l6ZW9mKFRleHR1cmVNYXBwZXJOb2RlKiks
IGNvbXBhcmVHcmFwaGljc0xheWVyc1pWYWx1ZSk7Cit9CisKK2Jvb2wgVGV4dHVyZU1hcHBlck5v
ZGU6Omhhc1N1cmZhY2VEZXNjZW5kYW50cygpIGNvbnN0Cit7CisKKyAgICBpZiAobV9sYXllclR5
cGUgPT0gQ2xpcExheWVyIHx8IG1fbGF5ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVyIHx8IG1f
c3RhdGUucmVwbGljYUxheWVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjb25zdCBpbnQg
c2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKQorICAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIGNoaWxkID0gbV9jaGlsZHJlbltp
XSkKKyAgICAgICAgICAgIGlmIChjaGlsZC0+aGFzU3VyZmFjZURlc2NlbmRhbnRzKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworCit9CisKK3ZvaWQg
VGV4dHVyZU1hcHBlck5vZGU6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IEludFNp
emUmIHNpemUsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFJlY3QmIGV4cG9z
ZWRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFj
aXR5KQoreworICAgIC8vIG5lZWRzIGFjdGl2ZSBjb250ZXh0CisgICAgQVNTRVJUKG1fbGF5ZXJU
eXBlID09IFJvb3RMYXllcik7CisgICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKworI2lmIDAKKyAgICBXVEY6OlN0b3BXYXRjaCBzdG9wV2F0Y2g7CisgICAgcHJpbnRm
KCJbVGV4dHVyZU1hcHBlcl0gUm9vdFBhaW50ISFcbiIpOworI2VuZGlmCisKKyAgICBSZWZQdHI8
VGV4dHVyZU1hcHBlcj4gdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShnYyk7
CisKKyAgICBpZiAodGV4dHVyZU1hcHBlci0+dHlwZSgpICE9IG1fbGFzdFRleHR1cmVNYXBwZXJU
eXBlKQorICAgICAgICBnVGV4dHVyZU1hcHBlckNhY2hlLm1fZGF0YS5jbGVhcigpOworCisgICAg
bV9sYXN0VGV4dHVyZU1hcHBlciA9IHRleHR1cmVNYXBwZXI7CisgICAgVGV4bWFwUGFpbnRPcHRp
b25zIG9wdDsKKyAgICBvcHQub3BhY2l0eSA9IDE7CisgICAgb3B0LnJvb3RMYXllciA9IHRoaXM7
CisgICAgb3B0LnNjaXNzb3JSZWN0ID0gdGFyZ2V0UmVjdDsKKyAgICBvcHQudmlzaWJsZVJlY3Qg
PSBleHBvc2VkUmVjdDsKKyAgICBvcHQudGV4dHVyZU1hcHBlciA9IHRleHR1cmVNYXBwZXIuZ2V0
KCk7CisgICAgb3B0LmdjID0gdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0KCk7CisgICAg
b3B0LnN1cmZhY2UgPSAwOworICAgIHBhaW50UmVjdXJzaXZlKG9wdCk7CisKKyAgICBpZiAodGV4
dHVyZU1hcHBlci0+YWxsb3dTdXJmYWNlRm9yUm9vdCgpIHx8IG1fc3RhdGUuaGFzU3VyZmFjZURl
c2NlbmRhbnRzKSB7CisgICAgICAgIHRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKDApOworICAg
ICAgICB0ZXh0dXJlTWFwcGVyLT5wYWludFRvVGFyZ2V0KCptX3N1cmZhY2UuZ2V0KCksIHNpemUs
IHRyYW5zZm9ybSwgb3BhY2l0eSAqIG1fc3RhdGUub3BhY2l0eSwgdGFyZ2V0UmVjdCk7CisgICAg
fQorICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUucHVyZ2UoKTsKKyNpZiAwCisgICAgeworICAgICAg
ICBzdGF0aWMgaW50IHJvb3RDb3VudCA9IDA7CisgICAgICAgIHByaW50ZigiW1RleHR1cmVNYXBw
ZXJdIFJvb3RQYWludCglZCkgJWQgbGF5ZXIoJXApICglZCslZCAlZHglZCkgWyVkbXNdXG4iLCAr
K3Jvb3RDb3VudCwgdGV4dHVyZU1hcHBlci0+YWxsb3dTdXJmYWNlRm9yUm9vdCgpLAorICAgICAg
ICAgICAgICAgdGhpcywgZXhwb3NlZFJlY3QueCgpLCBleHBvc2VkUmVjdC55KCksIGV4cG9zZWRS
ZWN0LndpZHRoKCksIGV4cG9zZWRSZWN0LmhlaWdodCgpLCAKKyAgICAgICAgICAgICAgIGludChz
dG9wV2F0Y2guZWxhcHNlZCgpICogMTAwMCkpOworI2lmIDAKKyAgICAgICAgaWYgKHRleHR1cmVN
YXBwZXItPmFsbG93U3VyZmFjZUZvclJvb3QoKSkKKyAgICAgICAgICAgIG1fc3VyZmFjZS0+c2F2
ZShTdHJpbmcoKS5mb3JtYXQoIi90bXAvcm9vdF8lZC5wbmciLCByb290Q291bnQpKTsKKyNlbmRp
ZgorICAgIH0KKyNlbmRpZgorfQorCitpbnQgVGV4dHVyZU1hcHBlck5vZGU6OmNvdW50RGVzY2Vu
ZGFudHNXaXRoQ29udGVudCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3N0YXRlLnZpc2libGUgfHwg
bV9zdGF0ZS5vcGFjaXR5IDwgMC4wMDEpCisgICAgICAgIHJldHVybiAwOworICAgIGludCBkZXNj
ZW5kYW50c1dpdGhDb250ZW50ID0gKG1fc3RhdGUuZHJhd3NDb250ZW50IHx8IG1fY3VycmVudENv
bnRlbnQuY29udGVudFR5cGUgIT0gSFRNTENvbnRlbnRUeXBlKSA/IDEgOiAwOworCisgICAgY29u
c3QgaW50IHNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IHNpemU7ICsraSkKKyAgICAgICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiBjaGlsZCA9IG1fY2hp
bGRyZW5baV0pCisgICAgICAgICAgICBkZXNjZW5kYW50c1dpdGhDb250ZW50ICs9IGNoaWxkLT5j
b3VudERlc2NlbmRhbnRzV2l0aENvbnRlbnQoKTsKKworICAgIHJldHVybiBkZXNjZW5kYW50c1dp
dGhDb250ZW50OworfQorCitpbmxpbmUgVGV4dHVyZU1hcHBlck5vZGUqIFRleHR1cmVNYXBwZXJO
b2RlOjp0b1RleHR1cmVNYXBwZXJOb2RlKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIHJl
dHVybiBsYXllciA/IHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKj4obGF5
ZXIpLT5tX25vZGUuZ2V0KCkgOiAwOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21w
dXRlTGF5ZXJUeXBlKCkKK3sKKyAgICAvKiBjYWxjdWxhdGUgbGF5ZXIgdHlwZS4gQSBsYXllciBj
YW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICAgIFJvb3RMYXllcjogdGhlIHRvcCBs
ZXZlbC4gRHJhd3MgdG8gYSBmcmFtZWJ1ZmZlciwgYW5kIHRoZSB0YXJnZXQgdGV4dHVyZSBkcmF3
cyBpbnRvIHRoZSB2aWV3cG9ydC4KKyAgICAgICAgICAgICAgICAgICBvbmx5IG9uZSBsYXllciBp
cyB0aGUgcm9vdCBsYXllci4KKyAgICAgICAgU2Npc3NvckxheWVyOiBkcmF3cyB0byB0aGUgY3Vy
cmVudCBmcmFtZWJ1ZmZlciwgYW5kIGFwcGxpZXMgYW4gZXh0cmEgc2Npc3NvciBiZWZvcmUgZHJh
d2luZyBpdHMgY2hpbGRyZW4uCisgICAgICAgICAgICAgICAgICAgICAgQSBzY2lzc29yIGxheWVy
IGlzIGEgbGF5ZXIgd2l0aCBjaGlsZHJlbiB0aGF0IG1hc2tzIHRvIGJvdW5kcywgaXMgbm90IGEg
dHJhbnNwYXJlbmN5IGxheWVyLCBhbmQgaGFzIGEgcmVjdGFuZ3VsYXIgY2xpcC4KKyAgICAgICAg
Q2xpcExheWVyOiBjcmVhdGVzIGEgbmV3IGZyYW1lYnVmZmVyLCB0aGUgc2l6ZSBvZiB0aGUgbGF5
ZXIsIGFuZCB0aGVuIHBhaW50cyBpdCB0byB0aGUgZW5jbG9zaW5nIEJpdG1hcFRleHR1cmUgd2l0
aCB0aGUgbGF5ZXIncyB0cmFuc2Zvcm0vb3BhY2l0eS4KKyAgICAgICAgICAgICAgICAgICAgQSBj
bGlwIGxheWVyIGlzIGEgbGF5ZXIgdGhhdCBtYXNrcyB0byBib3VuZHMsIGRvZXNuJ3QgcHJlc2Vy
dmUgM0QsIGhhcyBjaGlsZHJlbiwgYW5kIGhhcyBhIHRyYW5zcGFyZW5jeS9tYXNrIG9yIGEgbm9u
LXJlY3Rhbmd1bGFyIHRyYW5zZm9ybS4KKyAgICAgICAgVHJhbnNwYXJlbmN5TGF5ZXI6IGNyZWF0
ZXMgYSBuZXcgZnJhbWVidWZmZXIgaWRldGljYWwgaW4gc2l6ZSB0byB0aGUgY3VycmVudCBmcmFt
ZWJ1ZmZlci4gVGhlbiBkcmF3cyB0aGUgZmIncyB0ZXh0dXJlIHRvIHRoZSBjdXJyZW50IGZyYW1l
YnVmZmVyIHdpdGggaWRlbnRpdHkgdHJhbnNmb3JtLgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVXNlZCBmb3IgbGF5ZXJzIHdpdGggY2hpbGRyZW4gYW5kIHRyYW5zcGFyZW5jeS9tYXNrIHRo
YXQgcHJlc2VydmUgM0Qgb3IgZG9uJ3QgbWFzayB0byBib3VuZHMuCisgICAgICAgIERlZmF1bHRM
YXllcjogZHJhd3MgaXRzZWxmIGFuZCBpdHMgY2hpbGRyZW4gZGlyZWN0bHkgdG8gdGhlIGN1cnJl
bnQgZnJhbWVidWZmZXIuCisgICAgICAgICAgICAgICAgICAgICAgYW55IGxheWVyIHRoYXQgZG9l
c24ndCBjb25mb3JtIHRvIHRoZSBvdGhlciBydWxlcyBpcyBhIERlZmF1bHRMYXllci4KKyAgICAq
LworCisgICAgY29uc3QgYm9vbCBzZWxmSGFzQ29udGVudCA9IG1fc3RhdGUuZHJhd3NDb250ZW50
IHx8IChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlICE9IEhUTUxDb250ZW50VHlwZSk7Cisg
ICAgY29uc3QgYm9vbCBoYXNEZXNjZW5kYW50c1dpdGhDb250ZW50ID0gbV9zdGF0ZS5kZXNjZW5k
YW50c1dpdGhDb250ZW50IC0gKHNlbGZIYXNDb250ZW50ID8gMSA6IDApOworICAgIGNvbnN0IGJv
b2wgaGFzVHJhbnNwYXJlbmN5ID0gbV9zdGF0ZS5vcGFjaXR5IDwgMC45OSB8fCBtX3N0YXRlLm1h
c2tMYXllcjsKKyAgICBjb25zdCBib29sIGhhc1JlcGxpY2EgPSBtX3N0YXRlLnJlcGxpY2FMYXll
cjsKKyAgICBtX2xheWVyVHlwZSA9IERlZmF1bHRMYXllcjsKKworICAgIC8vIExheWVyIGhhcyBu
byBwYXJlbnQsIGl0IG11c3QgYmUgYSByb290IGxheWVyLgorICAgIGlmICghbV9wYXJlbnQgJiYg
IW1fZWZmZWN0VGFyZ2V0KSB7CisgICAgICAgIG1fbGF5ZXJUeXBlID0gUm9vdExheWVyOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQSBsYXllciB3aXRoIG5vIGNvbnRlbnRzIGlz
IGFsd2F5cyBhIGRlZmF1bHQgbGF5ZXIuCisgICAgaWYgKCFtX3N0YXRlLmRlc2NlbmRhbnRzV2l0
aENvbnRlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEEgbGF5ZXIgd2l0aCBjb250ZW50
LWRlc2NlbmRhbnRzIGFuZCBhIG1hc2sgaXMgYWx3YXlzIGEgY2xpcCBsYXllci4KKyAgICBpZiAo
aGFzRGVzY2VuZGFudHNXaXRoQ29udGVudCAmJiBtX3N0YXRlLm1hc2tMYXllcikgeworICAgICAg
ICBtX2xheWVyVHlwZSA9IENsaXBMYXllcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIEEgbWFza3MtdG8gYm91bmRzIGxheWVyIGNhbiBiZSBhIGNsaXAgb3IgYSBzY2lzc29yIGxh
eWVyLiBJdCdzIGEgc2Npc3NvciBsYXllciBvbmx5IGlmIGl0IGhhcyBhIHRyaXZpYWwgY2xpcCAo
aWRlbnRpdHkgb3IgdHJhbnNsYXRpb24pLCBvciBpZiBpdCBoYXMgdHJhbnNwYXJlbmN5LgorICAg
IC8vIFRoYXQncyBiZWNhdXNlIGEgQ2xpcExheWVyIHdvdWxkIGNyZWF0ZSBhbiBpbnRlcm1lZGlh
dGUgZHJhd2luZyBzdXJmYWNlIChGQikgLSB3ZSB3YW50IHRvIGxpbWl0IGl0IHRvIHdoZW4gaXQn
cyBhY3R1YWxseSBuZWNlc3NhcnksIGkuZS4gdHJhbnNwYXJlbmN5IG9yIG5vbi10cml2aWFsIGNs
aXAuCisgICAgaWYgKG1fc3RhdGUubWFza3NUb0JvdW5kcyAmJiBoYXNEZXNjZW5kYW50c1dpdGhD
b250ZW50KSB7CisgICAgICAgIGlmIChoYXNUcmFuc3BhcmVuY3kgfHwgIW1fc3RhdGUudHJhbnNm
b3JtLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkgfHwgbV9wYXJlbnQtPm1fc3RhdGUucHJlc2Vy
dmVzM0QpCisgICAgICAgICAgICBtX2xheWVyVHlwZSA9IENsaXBMYXllcjsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbV9sYXllclR5cGUgPSBTY2lzc29yTGF5ZXI7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBXZSB1c2UgYSB0cmFuc3BhcmVuY3kgbGF5ZXIgd2hlbiB3ZSBo
YXZlIHR3byBvZiB0aGUgZm9sbG93aW5nIDM6IHJlcGxpY2EsIHRyYW5zcGFyZW5jeSwgZGVzY2Vu
ZGFudHMgd2l0aCBjb250ZW50cy4KKyAgICBpZiAoKGhhc1JlcGxpY2EgJiYgaGFzRGVzY2VuZGFu
dHNXaXRoQ29udGVudCkgfHwgKGhhc1JlcGxpY2EgJiYgaGFzVHJhbnNwYXJlbmN5KSB8fCAoaGFz
VHJhbnNwYXJlbmN5ICYmIG1fc3RhdGUuZGVzY2VuZGFudHNXaXRoQ29udGVudCA+IDEpKQorICAg
ICAgICBtX2xheWVyVHlwZSA9IFRyYW5zcGFyZW5jeUxheWVyOworfQordm9pZCBUZXh0dXJlTWFw
cGVyTm9kZTo6aW5pdGlhbGl6ZVRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1h
cHBlcikKK3sKKyAgICAvLyBuZWVkcyBhY3RpdmUgY29udGV4dAorICAgIGlmICh0ZXh0dXJlTWFw
cGVyLT50eXBlKCkgPT0gbV9sYXN0VGV4dHVyZU1hcHBlclR5cGUpCisgICAgICAgIHJldHVybjsK
KyNpZiAwCisgICAgaWYgKG1fbGF5ZXJUeXBlID09IENsaXBMYXllciB8fCBtX2xheWVyVHlwZSA9
PSBUcmFuc3BhcmVuY3lMYXllcgorICAgICAgICB8fCAobV9sYXllclR5cGUgPT0gUm9vdExheWVy
ICYmIHRleHR1cmVNYXBwZXItPmFsbG93U3VyZmFjZUZvclJvb3QoKSkpCisgICAgICAgIG1fc3Vy
ZmFjZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICBlbHNlIGlmIChtX3N1
cmZhY2UpCisgICAgICAgIG1fc3VyZmFjZS0+ZGVzdHJveSgpOworICAgIGlmIChtX3N0YXRlLnJl
cGxpY2FMYXllcikKKyAgICAgICAgbV9yZXBsaWNhU3VyZmFjZSA9IHRleHR1cmVNYXBwZXItPmNy
ZWF0ZVRleHR1cmUoKTsKKyAgICBlbHNlIGlmIChtX3JlcGxpY2FTdXJmYWNlKQorICAgICAgICBt
X3JlcGxpY2FTdXJmYWNlLT5kZXN0cm95KCk7CisjZWxzZQorICAgIG1fc3VyZmFjZSA9IHRleHR1
cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICBtX3JlcGxpY2FTdXJmYWNlID0gdGV4dHVy
ZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOworI2VuZGlmCisgICAgbV90ZXh0dXJlID0gdGV4dHVy
ZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOworICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUubWFyayht
X3RleHR1cmUuZ2V0KCkpOworICAgIG1fbGFzdFRleHR1cmVNYXBwZXJUeXBlID0gdGV4dHVyZU1h
cHBlci0+dHlwZSgpOworfQorCitUZXh0dXJlTWFwcGVyTm9kZTo6VGV4dHVyZU1hcHBlck5vZGUo
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIG5ld0xheWVyKQorICAgIDogbV9sYXllcihuZXdM
YXllcikKKyAgICAsIG1fbGFzdFRleHR1cmVNYXBwZXJUeXBlKDApCisgICAgLCBtX2xhc3RUZXh0
dXJlTWFwcGVyKDApCisgICAgLCBtX2xheWVyVHlwZShEZWZhdWx0TGF5ZXIpCisjaWYgRU5BQkxF
X1RFWE1BUF9BTklNQVRJT04KKyAgICAsIG1fbm90aWZ5QW5pbWF0aW9uU3RhcnRlZFRpbWVyKHRo
aXMsICZUZXh0dXJlTWFwcGVyTm9kZTo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQp
CisjZW5kaWYKKyAgICAsIG1fc3VyZmFjZSgwKQorICAgICwgbV9wYXJlbnQoMCkKKyAgICAsIG1f
ZWZmZWN0VGFyZ2V0KDApCisgICAgLCBtX2NoYW5nZU1hc2soTm9DaGFuZ2VzKQorICAgICwgbV9w
bGF0Zm9ybUNsaWVudCgwKQoreworCit9CisKK1RleHR1cmVNYXBwZXJOb2RlKiBUZXh0dXJlTWFw
cGVyTm9kZTo6cm9vdExheWVyKCkKK3sKKyAgICBpZiAobV9lZmZlY3RUYXJnZXQpCisgICAgICAg
IHJldHVybiBtX2VmZmVjdFRhcmdldC0+cm9vdExheWVyKCk7CisgICAgaWYgKG1fcGFyZW50KQor
ICAgICAgICByZXR1cm4gbV9wYXJlbnQtPnJvb3RMYXllcigpOworICAgIHJldHVybiB0aGlzOwor
fQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjppbnZhbGlkYXRlVHJhbnNmb3JtKCkKK3sKKyAg
ICBtX3RyYW5zZm9ybXMuZGlydHkgPSB0cnVlOworICAgIGlmIChtX2xheWVyVHlwZSAhPSBDbGlw
TGF5ZXIpCisgICAgICAgIG1fc3RhdGUuZGlydHkgPSB0cnVlOworICAgIGlmIChtX3N0YXRlLnJl
cGxpY2FMYXllcikKKyAgICAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPmludmFsaWRhdGVUcmFu
c2Zvcm0oKTsKKyAgICBjb25zdCBpbnQgc2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5v
ZGUqIGxheWVyID0gbV9jaGlsZHJlbltpXSkKKyAgICAgICAgICAgIGxheWVyLT5pbnZhbGlkYXRl
VHJhbnNmb3JtKCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVMb2NhbFRy
YW5zZm9ybSgpCit7CisgICAgaWYgKCFtX3RyYW5zZm9ybXMubG9jYWxEaXJ0eSkKKyAgICAgICAg
cmV0dXJuOworICAgIGNvbnN0IGZsb2F0IG9yaWdpblggPSBtX3N0YXRlLmFuY2hvclBvaW50Lngo
KSAqIG1fc2l6ZS53aWR0aCgpOworICAgIGNvbnN0IGZsb2F0IG9yaWdpblkgPSBtX3N0YXRlLmFu
Y2hvclBvaW50LnkoKSAqIG1fc2l6ZS5oZWlnaHQoKTsKKyAgICBtX3RyYW5zZm9ybXMubG9jYWwg
PQorICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpCisgICAgICAgIC50cmFuc2xhdGUzZChv
cmlnaW5YICsgbV9zdGF0ZS5wb3MueCgpLCBvcmlnaW5ZICsgbV9zdGF0ZS5wb3MueSgpLCBtX3N0
YXRlLmFuY2hvclBvaW50LnooKSkKKyNpZiBFTkFCTEVfVEVYTUFQX0FOSU1BVElPTgorICAgICAg
ICAubXVsdExlZnQobV9hbmltLnRyYW5zZm9ybUFuaW1hdGlvblJ1bm5pbmcgPyBtX2FuaW0udHJh
bnNmb3JtIDogbV9zdGF0ZS50cmFuc2Zvcm0pCisjZWxzZQorICAgICAgICAubXVsdExlZnQobV9z
dGF0ZS50cmFuc2Zvcm0pCisjZW5kaWYKKyAgICAgICAgLnRyYW5zbGF0ZTNkKC1vcmlnaW5YLCAt
b3JpZ2luWSwgLW1fc3RhdGUuYW5jaG9yUG9pbnQueigpKTsKKyAgICBtX3RyYW5zZm9ybXMubG9j
YWxEaXJ0eSA9IGZhbHNlOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpmbGF0dGVuVG8y
RFNwYWNlSWZOZWNlc3NhcnkoKQoreworICAgIGlmIChtX3N0YXRlLnByZXNlcnZlczNEKQorICAg
ICAgICByZXR1cm47CisgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE0xMygwKTsK
KyAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTIzKDApOworICAgIG1fdHJhbnNm
b3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNMzEoMCk7CisgICAgbV90cmFuc2Zvcm1zLmZvckRlc2Nl
bmRhbnRzLnNldE0zMigwKTsKKyAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTMz
KDEpOworICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNMzQoMCk7CisgICAgbV90
cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE00MygwKTsKK30KKworSW50U2l6ZSBUZXh0dXJl
TWFwcGVyTm9kZTo6bmVhcmVzdFN1cmZhY2VTaXplKCkgY29uc3QKK3sKKyAgICBpZiAobV9sYXll
clR5cGUgPT0gQ2xpcExheWVyIHx8IG1fbGF5ZXJUeXBlID09IFJvb3RMYXllcikKKyAgICAgICAg
cmV0dXJuIG1fc3VyZmFjZSAmJiAhbV9zdXJmYWNlLT5zaXplKCkuaXNFbXB0eSgpID8gbV9zdXJm
YWNlLT5zaXplKCkgOiBtX3NpemU7CisgICAgcmV0dXJuIG1fcGFyZW50LT5uZWFyZXN0U3VyZmFj
ZVNpemUoKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVJlcGxpY2FUcmFu
c2Zvcm0oKQoreworICAgIGlmICghbV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fbmVhcmVzdFN1cmZhY2VTaXplID0gbmVhcmVzdFN1cmZhY2VTaXplKCk7CisK
KyAgICBpZiAobV9sYXllclR5cGUgIT0gVHJhbnNwYXJlbmN5TGF5ZXIpIHsKKyAgICAgICAgbV90
cmFuc2Zvcm1zLnJlcGxpY2EgPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtX3RyYW5zZm9ybXMudGFy
Z2V0KS5tdWx0TGVmdChtX3N0YXRlLnJlcGxpY2FMYXllci0+bV90cmFuc2Zvcm1zLmxvY2FsKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IGZsb2F0IG9yaWdpblggPSBtX3Ry
YW5zZm9ybXMudGFyZ2V0Lm00MSgpOworICAgIGNvbnN0IGZsb2F0IG9yaWdpblkgPSBtX3RyYW5z
Zm9ybXMudGFyZ2V0Lm00MigpOworICAgIG1fdHJhbnNmb3Jtcy5yZXBsaWNhID0KKyAgICAgICAg
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KCkKKyAgICAgICAgICAgICAgICAudHJhbnNsYXRlKG9y
aWdpblgsIG9yaWdpblkpCisgICAgICAgICAgICAgICAgLm11bHRMZWZ0KG1fc3RhdGUucmVwbGlj
YUxheWVyLT5tX3RyYW5zZm9ybXMubG9jYWwpCisgICAgICAgICAgICAgICAgLnRyYW5zbGF0ZSgt
b3JpZ2luWCwgLW9yaWdpblkpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRl
VHJhbnNmb3JtYXRpb25zKCkKK3sKKyAgICBpZiAoIW1fdHJhbnNmb3Jtcy5kaXJ0eSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV90cmFuc2Zvcm1zLmRpcnR5ID0gZmFsc2U7CisgICAgaWYgKCht
X3NpemUuaXNFbXB0eSgpICYmIG1fc3RhdGUubWFza3NUb0JvdW5kcykpCisgICAgICAgIHJldHVy
bjsKKworICAgIFRleHR1cmVNYXBwZXJOb2RlKiBwYXJlbnQgPSBtX3BhcmVudDsKKyAgICBjb21w
dXRlTG9jYWxUcmFuc2Zvcm0oKTsKKworICAgIG1fdHJhbnNmb3Jtcy50YXJnZXQgPSBUcmFuc2Zv
cm1hdGlvbk1hdHJpeChwYXJlbnQgPyBwYXJlbnQtPm1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50
cyA6IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpLm11bHRMZWZ0KG1fdHJhbnNmb3Jtcy5sb2NhbCk7
CisgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzID0gKG1fbGF5ZXJUeXBlID09IENsaXBM
YXllciA/IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkgOiBtX3RyYW5zZm9ybXMudGFyZ2V0KTsKKwor
ICAgIGlmIChtX2VmZmVjdFRhcmdldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90cmFuc2Zv
cm1zLnRhcmdldEJvdW5kaW5nUmVjdCA9IEludFJlY3QobV90cmFuc2Zvcm1zLnRhcmdldC5tYXBS
ZWN0KGZ1bGxSZWN0KCkpKTsKKyAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAg
IG1fc3RhdGUucmVwbGljYUxheWVyLT5jb21wdXRlVHJhbnNmb3JtYXRpb25zKCk7CisKKyAgICBm
bGF0dGVuVG8yRFNwYWNlSWZOZWNlc3NhcnkoKTsKKworICAgIGlmICghbV9zdGF0ZS5iYWNrZmFj
ZVZpc2liaWxpdHkgJiYgbV90cmFuc2Zvcm1zLnRhcmdldC5pbnZlcnNlKCkubTMzKCkgPCAwKSB7
CisgICAgICAgIG1fc3RhdGUudmlzaWJsZSA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIG1fc3RhdGUudmlzaWJsZSA9IHRydWU7CisKKyAgICBpZiAocGFyZW50ICYmIHBhcmVu
dC0+bV9zdGF0ZS5wcmVzZXJ2ZXMzRCkKKyAgICAgICAgbV90cmFuc2Zvcm1zLmNlbnRlclogPSBt
X3RyYW5zZm9ybXMudGFyZ2V0Lm1hcFBvaW50KEZsb2F0UG9pbnQzRChtX3NpemUud2lkdGgoKSAv
IDIsIG1fc2l6ZS5oZWlnaHQoKSAvIDIsIDApKS56KCk7CisKKyAgICBpZiAoIW1fY2hpbGRyZW4u
c2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zdGF0ZS5jaGlsZHJlblRyYW5z
Zm9ybS5pc0lkZW50aXR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEZsb2F0UG9p
bnQgY2VudGVyUG9pbnQgPSBGbG9hdFBvaW50KG1fc2l6ZS53aWR0aCgpIC8gMiwgbV9zaXplLmhl
aWdodCgpIC8gMik7CisgICAgaWYgKG1fdHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZURpcnR5KQorICAg
ICAgICBtX3RyYW5zZm9ybXMucGVyc3BlY3RpdmUgPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpCisg
ICAgICAgICAgICAudHJhbnNsYXRlKGNlbnRlclBvaW50LngoKSwgY2VudGVyUG9pbnQueSgpKQor
ICAgICAgICAgICAgLm11bHRMZWZ0KG1fc3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm0pCisgICAgICAg
ICAgICAudHJhbnNsYXRlKC1jZW50ZXJQb2ludC54KCksIC1jZW50ZXJQb2ludC55KCkpOworICAg
IG1fdHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZURpcnR5ID0gZmFsc2U7CisgICAgbV90cmFuc2Zvcm1z
LmZvckRlc2NlbmRhbnRzLm11bHRMZWZ0KG1fdHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZSk7Cit9CisK
KyNpZiBERUJVR19URVhNQVBfRlBTCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpiZWdpbkFuaW1h
dGlvbihBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHkpCit7CisgICAgQVNTRVJUKCFtX2FuaW1f
ZnBzLmdldChwcm9wZXJ0eSkpOworICAgIGZwcmludGYoc3RkZXJyLCAiQW5pbWF0aW9uU3RhcnRl
ZCglcCk6ICVkXG4iLCB0aGlzLCBwcm9wZXJ0eSk7CisgICAgbV9hbmltX2Zwcy5zZXQocHJvcGVy
dHksIG5ldyBHcmFwaGljc0xheWVyQW5pbWF0aW9uKCkpOworfQorCit2b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjplbmRBbmltYXRpb24oQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5KQoreworICAg
IEdyYXBoaWNzTGF5ZXJBbmltYXRpb24qIGFuaW0gPSBtX2FuaW1fZnBzLnRha2UocHJvcGVydHkp
OworICAgIEFTU0VSVChhbmltKTsKKyAgICBpZiAoYW5pbSkgeworICAgICAgICBjb25zdCBkb3Vi
bGUgZHVyYXRpb24gPSBXVEY6OmN1cnJlbnRUaW1lKCktYW5pbS0+c3RhcnRlZDsKKyAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJBbmltYXRpb25FbmRlZCglcCk6ICVkOiBbJWZdIFslZCBmcmFtZXNd
IFslZiBGUFNdXG4iLCB0aGlzLCBwcm9wZXJ0eSwgZHVyYXRpb24sIAorICAgICAgICAgICAgICAg
IGFuaW0tPmZyYW1lcywgKDEwMDAgLyAoKGR1cmF0aW9uKjEwMDApIC8gYW5pbS0+ZnJhbWVzKSkg
KTsKKyAgICB9Cit9CisjZW5kaWYKKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6dXBsb2FkVGV4
dHVyZUZyb21Db250ZW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCit7CisgICAgLy8g
bmVlZHMgYWN0aXZlIGNvbnRleHQKKyAgICBpZiAobV9zaXplLmlzRW1wdHkoKSB8fCAhbV9sYXll
cikgeworICAgICAgICBtX3RleHR1cmUtPmRlc3Ryb3koKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IERpcmVjdEltYWdl
Q29udGVudFR5cGUpIHsKKyAgICAgICAgaWYgKG1fY3VycmVudENvbnRlbnQuaW1hZ2UpCisgICAg
ICAgICAgICBtX3RleHR1cmUtPnNldENvbnRlbnRzVG9JbWFnZShtX2N1cnJlbnRDb250ZW50Lmlt
YWdlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2N1cnJlbnRD
b250ZW50LmNvbnRlbnRUeXBlID09IE1lZGlhQ29udGVudFR5cGUpIHsKKyAgICAgICAgaWYgKCFt
X2N1cnJlbnRDb250ZW50Lm1lZGlhKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3Rl
eHR1cmUtPnJlc2V0KG1fc2l6ZSwgdHJ1ZSk7CisgICAgICAgIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0KiBwZ2MgPSBtX3RleHR1cmUtPmJlZ2luUGFpbnRNZWRpYSgpOworICAgICAgICBHcmFwaGlj
c0NvbnRleHQgZ2MocGdjKTsKKyAgICAgICAgbV9jdXJyZW50Q29udGVudC5tZWRpYS0+cGFpbnQo
JmdjKTsKKyAgICAgICAgbV90ZXh0dXJlLT5lbmRQYWludCgpOworICAgIH0KKworICAgIGNvbnN0
IGJvb2wgbmVlZHNSZXNldCA9IChtX3RleHR1cmUtPmNvbnRlbnRTaXplKCkgIT0gbV9zaXplKSB8
fCAhbV90ZXh0dXJlLT5pc1ZhbGlkKCk7CisgICAgaWYgKChtX2N1cnJlbnRDb250ZW50LmNvbnRl
bnRUeXBlICE9IEhUTUxDb250ZW50VHlwZSkKKyAgICAgICAgfHwgKCFtX2N1cnJlbnRDb250ZW50
Lm5lZWRzRGlzcGxheSAmJiBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QuaXNFbXB0
eSgpICYmICFuZWVkc1Jlc2V0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV1RGOjpTdG9wV2F0
Y2ggc3RvcFdhdGNoOworICAgIEludFJlY3QgZGlydHlSZWN0ID0gSW50UmVjdCgwLCAwLCBtX3Np
emUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICBpZiAoIW5lZWRzUmVzZXQgJiYgIW1f
Y3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5KQorICAgICAgICBkaXJ0eVJlY3QuaW50ZXJzZWN0
KG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCk7CisgICAgaWYgKG5lZWRzUmVzZXQp
CisgICAgICAgIG1fdGV4dHVyZS0+cmVzZXQobV9zaXplLCBtX3N0YXRlLmNvbnRlbnRzT3BhcXVl
KTsKKworICAgIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdjKG1fdGV4dHVyZS0+YmVnaW5Q
YWludChkaXJ0eVJlY3QpKTsKKyAgICAgICAgaWYgKHRleHR1cmVNYXBwZXIgJiYgdGV4dHVyZU1h
cHBlci0+Z3JhcGhpY3NDb250ZXh0KCkpIHsKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCog
b3JpZ2luYWxHQyA9IHRleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dCgpOworICAgICAgICAg
ICAgZ2Muc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShvcmlnaW5hbEdDLT5pbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5KCkpOworICAgICAgICAgICAgZ2Muc2V0VGV4dERyYXdpbmdNb2RlKG9y
aWdpbmFsR0MtPnRleHREcmF3aW5nTW9kZSgpKTsKKyAgICAgICAgfQorICAgICAgICBtX2xheWVy
LT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhnYywgZGlydHlSZWN0KTsKKyAgICB9CisgICAg
bV90ZXh0dXJlLT5lbmRQYWludCgpOworICAgIHsKKyAgICAgICAgc3RhdGljIGludCByZW5kZXJD
b3VudCA9IDA7CisgICAgICAgIHByaW50ZigiW1RleHR1cmVNYXBwZXJdIFJlLXJlbmRlciglZCkg
bGF5ZXIoJXApICVkOjolZDo6JWQgKCVkeCVkKSBbJWRtc11cbiIsICsrcmVuZGVyQ291bnQsIHRo
aXMsCisgICAgICAgICAgICAgICBuZWVkc1Jlc2V0LCBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlz
cGxheSwgIW1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdC5pc0VtcHR5KCksCisgICAg
ICAgICAgICAgICBkaXJ0eVJlY3Qud2lkdGgoKSwgZGlydHlSZWN0LmhlaWdodCgpLCBpbnQoc3Rv
cFdhdGNoLmVsYXBzZWQoKSAqIDEwMDApKTsKKyNpZiAwCisgICAgICAgIG1fdGV4dHVyZS0+c2F2
ZShTdHJpbmcoKS5mb3JtYXQoIi90bXAvbGF5ZXJfJWQucG5nIiwgcmVuZGVyQ291bnQpKTsKKyNl
bmRpZgorICAgIH0KKworICAgIG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCA9IElu
dFJlY3QoKTsKKyAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSA9IGZhbHNlOworfQor
Cit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludFNlbGYoVGV4dHVyZU1hcHBlciogdGV4dHVy
ZU1hcHBlciwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIEJpdG1h
cFRleHR1cmUqIHJlcGxpY2FNYXNrVGV4dHVyZSwgYm9vbCBpc1N1cmZhY2UpCit7CisgICAgLy8g
bmVlZHMgYWN0aXZlIGNvbnRleHQKKyAgICBpZiAoIW1fbGF5ZXIgfHwgbV9zaXplLmlzRW1wdHko
KSB8fCAoIW1fc3RhdGUuZHJhd3NDb250ZW50ICYmIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5
cGUgPT0gSFRNTENvbnRlbnRUeXBlKSkKKyAgICAgICAgcmV0dXJuOworICAgIHVwbG9hZFRleHR1
cmVGcm9tQ29udGVudCh0ZXh0dXJlTWFwcGVyKTsKKyAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5
ZXIgJiYgIWlzU3VyZmFjZSkKKyAgICAgICAgdGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUoKm1f
dGV4dHVyZS5nZXQoKSwgcmVwbGljYVJlY3QoKSwgbV90cmFuc2Zvcm1zLnJlcGxpY2EsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eSAqIG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0
YXRlLm9wYWNpdHksIAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxpY2FNYXNrVGV4dHVy
ZSA/IHJlcGxpY2FNYXNrVGV4dHVyZSA6IG1hc2tUZXh0dXJlKTsKKworCisgICAgY29uc3QgSW50
UmVjdCByZWN0ID0gbV9sYXllclR5cGUgPT0gQ2xpcExheWVyID8gZnVsbFJlY3QoKSA6IHRhcmdl
dFJlY3QoKTsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBtX2xh
eWVyVHlwZSA9PSBDbGlwTGF5ZXIgPyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpIDogbV90cmFuc2Zv
cm1zLnRhcmdldDsKKyAgICB0ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqbV90ZXh0dXJlLmdl
dCgpLCByZWN0LCB0cmFuc2Zvcm0sIG9wYWNpdHksIGlzU3VyZmFjZSA/IDAgOiBtYXNrVGV4dHVy
ZSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50UmVjdXJzaXZlKFRleG1hcFBh
aW50T3B0aW9ucyBvcHRpb25zKQoreworICAgIC8vIG5lZWRzIGFjdGl2ZSBjb250ZXh0CisKKyAg
ICBXVEY6OlN0b3BXYXRjaCBzdG9wV2F0Y2g7CisKKyNpZiBERUJVR19URVhNQVBfRlBTCisgICAg
aWYgKCFtX2FuaW1fZnBzLmlzRW1wdHkoKSkgeworICAgICAgICBjb25zdCBkb3VibGUgbm93ID0g
V1RGOjpjdXJyZW50VGltZSgpOworICAgICAgICBIYXNoTWFwPGludCwgR3JhcGhpY3NMYXllckFu
aW1hdGlvbio+OjppdGVyYXRvciBlbmQgPSBtX2FuaW1fZnBzLmVuZCgpOworICAgICAgICBmb3Ig
KEhhc2hNYXA8aW50LCBHcmFwaGljc0xheWVyQW5pbWF0aW9uKj46Oml0ZXJhdG9yIGl0ID0gbV9h
bmltX2Zwcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIC8vIHByaW50
ZigiRlJBTUUoJWQpOiAlZG1zIFslcF1cbiIsIGl0LT5zZWNvbmQtPmZyYW1lcywgaW50KChub3ct
aXQtPnNlY29uZC0+bGFzdCkqMTAwMCksIHRoaXMpOworICAgICAgICAgICAgaXQtPnNlY29uZC0+
bGFzdCA9IG5vdzsKKyAgICAgICAgICAgICsraXQtPnNlY29uZC0+ZnJhbWVzOworICAgICAgICB9
CisgICAgfQorI2VuZGlmCisgICAgYm9vbCBpc0RpcnR5ID0gbV9zdGF0ZS5kaXJ0eTsKKyAgICBt
X3N0YXRlLmRpcnR5ID0gZmFsc2U7CisKKyAgICBpZiAoKG1fc2l6ZS5pc0VtcHR5KCkgJiYgKG1f
c3RhdGUubWFza3NUb0JvdW5kcworICAgICAgICB8fCBtX2NoaWxkcmVuLmlzRW1wdHkoKSkpIHx8
ICFtX3N0YXRlLnZpc2libGUgfHwgb3B0aW9ucy5vcGFjaXR5IDwgMC4wMSB8fCBtX3N0YXRlLm9w
YWNpdHkgPCAwLjAxKQorICAgICAgICByZXR1cm47CisKKyAgICBpbml0aWFsaXplVGV4dHVyZU1h
cHBlcihvcHRpb25zLnRleHR1cmVNYXBwZXIpOworICAgIGNvbXB1dGVSZXBsaWNhVHJhbnNmb3Jt
KCk7CisKKyAgICBpZiAobV9zdGF0ZS5tYXNrTGF5ZXIpIHsKKyAgICAgICAgbV9zdGF0ZS5tYXNr
TGF5ZXItPmluaXRpYWxpemVUZXh0dXJlTWFwcGVyKG9wdGlvbnMudGV4dHVyZU1hcHBlcik7Cisg
ICAgICAgIG1fc3RhdGUubWFza0xheWVyLT5tX3N0YXRlLmRpcnR5ID0gZmFsc2U7CisgICAgfQor
CisgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyKSB7CisgICAgICAgIG1fc3RhdGUucmVwbGlj
YUxheWVyLT5pbml0aWFsaXplVGV4dHVyZU1hcHBlcihvcHRpb25zLnRleHR1cmVNYXBwZXIpOwor
ICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5kaXJ0eSA9IGZhbHNlOworICAg
ICAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUubWFza0xheWVyKSB7CisgICAg
ICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5tYXNrTGF5ZXItPmluaXRpYWxp
emVUZXh0dXJlTWFwcGVyKG9wdGlvbnMudGV4dHVyZU1hcHBlcik7CisgICAgICAgICAgICBtX3N0
YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5tYXNrTGF5ZXItPm1fc3RhdGUuZGlydHkgPSBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRleHR1cmVNYXBwZXJOb2RlKiByZXBsaWNhID0g
bV9zdGF0ZS5yZXBsaWNhTGF5ZXI7CisgICAgY29uc3QgYm9vbCBpc1N1cmZhY2UgPSAobV9sYXll
clR5cGUgPT0gQ2xpcExheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9sYXll
clR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
fCAobV9sYXllclR5cGUgPT0gUm9vdExheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICYmIChvcHRpb25zLnRleHR1cmVNYXBwZXItPmFsbG93U3VyZmFjZUZvclJvb3QoKSB8fCBt
X3N0YXRlLmhhc1N1cmZhY2VEZXNjZW5kYW50cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKSk7CisgICAgaWYgKGlzU3VyZmFjZSkKKyAgICAgICAgdXBsb2FkVGV4dHVyZUZyb21D
b250ZW50KG9wdGlvbnMudGV4dHVyZU1hcHBlcik7CisgICAgY29uc3QgSW50UmVjdCBib3VuZGlu
Z1JlY3Rmcm9tTmVhcmVzdFN1cmZhY2UgPSBtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0
OworCisKKyNpZiBFTkFCTEVfVEVYTUFQX0FOSU1BVElPTgorICAgIGlmIChtX2FuaW0ub3BhY2l0
eUFuaW1hdGlvblJ1bm5pbmcpCisgICAgICAgIG9wdGlvbnMub3BhY2l0eSAqPSBtX2FuaW0ub3Bh
Y2l0eTsKKyAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgb3B0aW9ucy5vcGFjaXR5ICo9IG1fc3Rh
dGUub3BhY2l0eTsKKworICAgIGZsb2F0IGNvbnRlbnRPcGFjaXR5ID0gaXNTdXJmYWNlID8gMSA6
IG9wdGlvbnMub3BhY2l0eTsKKyAgICBUZXhtYXBQYWludE9wdGlvbnMgb3B0aW9uc0ZvckRlc2Nl
bmRhbnRzKG9wdGlvbnMpOworICAgIG9wdGlvbnNGb3JEZXNjZW5kYW50cy5vcGFjaXR5ID0gY29u
dGVudE9wYWNpdHk7CisKKyAgICBpZiAobV9sYXllclR5cGUgPT0gQ2xpcExheWVyKSB7CisgICAg
ICAgIG9wdGlvbnNGb3JEZXNjZW5kYW50cy52aXNpYmxlUmVjdCA9IFRyYW5zZm9ybWF0aW9uTWF0
cml4KCkudHJhbnNsYXRlKC1ib3VuZGluZ1JlY3Rmcm9tTmVhcmVzdFN1cmZhY2UueCgpLCAtYm91
bmRpbmdSZWN0ZnJvbU5lYXJlc3RTdXJmYWNlLnkoKSkubWFwUmVjdChvcHRpb25zLnZpc2libGVS
ZWN0KTsKKyAgICAgICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLnNjaXNzb3JSZWN0ID0gSW50UmVj
dCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICB9CisKKyAgICBp
ZiAobV9sYXllclR5cGUgPT0gU2Npc3NvckxheWVyKSAKKyAgICAgICAgb3B0aW9uc0ZvckRlc2Nl
bmRhbnRzLnNjaXNzb3JSZWN0LmludGVyc2VjdChtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdS
ZWN0KTsKKyAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPnNldENsaXAob3B0aW9uc0ZvckRlc2Nl
bmRhbnRzLnNjaXNzb3JSZWN0KTsKKworICAgIFRleHR1cmVNYXBwZXJDYWNoZUxvY2sobV90ZXh0
dXJlLmdldCgpKTsKKyAgICBUZXh0dXJlTWFwcGVyQ2FjaGVMb2NrKG1fc3VyZmFjZS5nZXQoKSk7
CisgICAgVGV4dHVyZU1hcHBlckNhY2hlTG9jayhtX3JlcGxpY2FTdXJmYWNlLmdldCgpKTsKKwor
ICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUucHVyZ2UoKTsKKworICAgIGlmIChpc1N1cmZhY2UpIHsK
KyAgICAgICAgQVNTRVJUKG1fc3VyZmFjZSk7CisgICAgICAgIGlmICghbV9zdXJmYWNlLT5pc1Zh
bGlkKCkpCisgICAgICAgICAgICBpc0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1fc3RhdGUu
dGlsZWQpIHsKKyAgICAgICAgICAgIG1fc3VyZmFjZS0+cmVzZXQob3B0aW9ucy52aXNpYmxlUmVj
dC5zaXplKCkpOworICAgICAgICAgICAgbV9zdXJmYWNlLT5zZXRPZmZzZXQob3B0aW9ucy52aXNp
YmxlUmVjdC5sb2NhdGlvbigpKTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0RpcnR5KQorICAgICAg
ICAgICAgbV9zdXJmYWNlLT5yZXNldChtX2xheWVyVHlwZSA9PSBUcmFuc3BhcmVuY3lMYXllciA/
IG9wdGlvbnMuc3VyZmFjZS0+c2l6ZSgpIDogbV9zaXplKTsKKyAgICAgICAgZ1RleHR1cmVNYXBw
ZXJDYWNoZS5tYXJrKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1h
cHBlci0+YmluZFN1cmZhY2UobV9zdXJmYWNlLmdldCgpKTsKKworICAgICAgICBvcHRpb25zRm9y
RGVzY2VuZGFudHMuc3VyZmFjZSA9IG1fc3VyZmFjZS5nZXQoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICAgICAgbV9zdXJmYWNlLT5kZXN0cm95KCk7Cisg
ICAgICAgIGNvbnRlbnRPcGFjaXR5ID0gb3B0aW9ucy5vcGFjaXR5OworICAgIH0KKworICAgIFJl
ZlB0cjxCaXRtYXBUZXh0dXJlPiBtYXNrVGV4dHVyZTsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVy
ZT4gcmVwbGljYU1hc2tUZXh0dXJlOworICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSogbWFzayA9
IG1fc3RhdGUubWFza0xheWVyKSB7CisgICAgICAgIG1hc2stPnVwbG9hZFRleHR1cmVGcm9tQ29u
dGVudChvcHRpb25zLnRleHR1cmVNYXBwZXIpOworICAgICAgICBtYXNrVGV4dHVyZSA9IG1hc2st
Pm1fdGV4dHVyZTsKKyAgICB9CisKKyAgICBpZiAocmVwbGljYSAmJiByZXBsaWNhLT5tX3N0YXRl
Lm1hc2tMYXllcikgeworICAgICAgICByZXBsaWNhLT5tX3N0YXRlLm1hc2tMYXllci0+dXBsb2Fk
VGV4dHVyZUZyb21Db250ZW50KG9wdGlvbnMudGV4dHVyZU1hcHBlcik7CisgICAgICAgIHJlcGxp
Y2FNYXNrVGV4dHVyZSA9IHJlcGxpY2EtPm1fc3RhdGUubWFza0xheWVyLT5tX3RleHR1cmU7Cisg
ICAgfQorCisgICAgaW50IGNoaWxkcmVuU2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOworICAgIGlm
IChpc0RpcnR5IHx8ICFpc1N1cmZhY2UgfHwgbV9zdGF0ZS50aWxlZCB8fCAhbV9zdXJmYWNlLT5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgYm9vbCBkaWRQYWludFNlbGYgPSBmYWxzZTsKKyAgICAgICAg
aWYgKCFtX3N0YXRlLnByZXNlcnZlczNEIHx8IG1fY2hpbGRyZW4uaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBwYWludFNlbGYob3B0aW9ucy50ZXh0dXJlTWFwcGVyLCBjb250ZW50T3BhY2l0eSwg
bWFza1RleHR1cmUuZ2V0KCksIHJlcGxpY2FNYXNrVGV4dHVyZS5nZXQoKSwgaXNTdXJmYWNlKTsK
KyAgICAgICAgICAgIGRpZFBhaW50U2VsZiA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAobV9jaGlsZHJlbi5pc0VtcHR5KCkgJiYgIWlzU3VyZmFjZSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBpZiAobV9sYXllclR5cGUgPT0gU2Npc3NvckxheWVyKQorICAgICAgICAg
ICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLnNjaXNzb3JSZWN0LmludGVyc2VjdChtX3RyYW5zZm9y
bXMudGFyZ2V0Lm1hcFJlY3QoSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhl
aWdodCgpKSkpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW5TaXplOyAr
K2kpIHsKKyAgICAgICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBsYXllciA9IG1fY2hpbGRyZW5b
aV07CisgICAgICAgICAgICBpZiAoIWxheWVyKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICBpZiAoIWRpZFBhaW50U2VsZiAmJiBsYXllci0+bV90cmFuc2Zvcm1zLmNl
bnRlclogPj0gMCkgeworICAgICAgICAgICAgICAgIHBhaW50U2VsZihvcHRpb25zLnRleHR1cmVN
YXBwZXIsIGNvbnRlbnRPcGFjaXR5LCBtYXNrVGV4dHVyZS5nZXQoKSwgcmVwbGljYU1hc2tUZXh0
dXJlLmdldCgpLCBpc1N1cmZhY2UpOworICAgICAgICAgICAgICAgIGRpZFBhaW50U2VsZiA9IHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsYXllci0+cGFpbnRSZWN1cnNpdmUob3B0
aW9uc0ZvckRlc2NlbmRhbnRzKTsKKyAgICAgICAgICAgIGlmIChpc1N1cmZhY2UpIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQobV9zdXJmYWNlKTsKKyAgICAgICAgICAgICAgICBnVGV4dHVyZU1h
cHBlckNhY2hlLm1hcmsobV9zdXJmYWNlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBvcHRpb25z
LnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFkaWRQYWludFNlbGYpIHsKKyAgICAgICAgICAg
IHBhaW50U2VsZihvcHRpb25zLnRleHR1cmVNYXBwZXIsIGNvbnRlbnRPcGFjaXR5LCBtYXNrVGV4
dHVyZS5nZXQoKSwgcmVwbGljYU1hc2tUZXh0dXJlLmdldCgpLCBpc1N1cmZhY2UpOworICAgICAg
ICAgICAgZGlkUGFpbnRTZWxmID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICht
X2xheWVyVHlwZSA9PSBSb290TGF5ZXIgfHwgbV9sYXllclR5cGUgPT0gRGVmYXVsdExheWVyIHx8
IG1fbGF5ZXJUeXBlID09IFNjaXNzb3JMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNT
RVJUKG1fc3VyZmFjZSk7CisgICAgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSA9ICptX3N1cmZhY2Uu
Z2V0KCk7CisgICAgaWYgKHJlcGxpY2EpIHsKKyAgICAgICAgQVNTRVJUKG1fcmVwbGljYVN1cmZh
Y2UpOworICAgICAgICBtX3JlcGxpY2FTdXJmYWNlLT5yZXNldChvcHRpb25zLnN1cmZhY2UtPnNp
emUoKSk7CisgICAgICAgIG1fcmVwbGljYVN1cmZhY2UtPnNldE9mZnNldChvcHRpb25zLnN1cmZh
Y2UtPm9mZnNldCgpKTsKKyAgICAgICAgZ1RleHR1cmVNYXBwZXJDYWNoZS5tYXJrKG1fcmVwbGlj
YVN1cmZhY2UuZ2V0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJm
YWNlKG1fcmVwbGljYVN1cmZhY2UuZ2V0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBw
ZXItPmRyYXdUZXh0dXJlKHRleHR1cmUsIHJlcGxpY2FSZWN0KCksIG1fdHJhbnNmb3Jtcy5yZXBs
aWNhLCByZXBsaWNhLT5tX3N0YXRlLm9wYWNpdHksIHJlcGxpY2FNYXNrVGV4dHVyZSA/IHJlcGxp
Y2FNYXNrVGV4dHVyZS5nZXQoKSA6IG1hc2tUZXh0dXJlLmdldCgpKTsKKyAgICAgICAgb3B0aW9u
cy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSh0ZXh0dXJlLCBJbnRSZWN0KEludFBvaW50KDAs
IDApLCBvcHRpb25zLnN1cmZhY2UtPnNpemUoKSksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIDEu
MGYsIG1hc2tUZXh0dXJlLmdldCgpKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5i
aW5kU3VyZmFjZShvcHRpb25zLnN1cmZhY2UpOworICAgICAgICBnVGV4dHVyZU1hcHBlckNhY2hl
Lm1hcmsob3B0aW9ucy5zdXJmYWNlKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5k
cmF3VGV4dHVyZSgqbV9yZXBsaWNhU3VyZmFjZS5nZXQoKSwgSW50UmVjdChJbnRQb2ludCgwLCAw
KSwgb3B0aW9ucy5zdXJmYWNlLT5zaXplKCkpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBvcHRp
b25zLm9wYWNpdHksIDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb3B0aW9ucy50
ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShvcHRpb25zLnN1cmZhY2UpOworICAgIG9wdGlvbnMu
dGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUodGV4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9sYXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIgPyBJbnRSZWN0KEludFBv
aW50KDAsIDApLCBvcHRpb25zLnN1cmZhY2UtPnNpemUoKSkgOiAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGFyZ2V0UmVjdCgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9sYXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIgPyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
IDogbV90cmFuc2Zvcm1zLnRhcmdldCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9w
dGlvbnMub3BhY2l0eSwgbWFza1RleHR1cmUuZ2V0KCkpOworICAgIGdUZXh0dXJlTWFwcGVyQ2Fj
aGUubWFyaygmdGV4dHVyZSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNsZWFudXBU
ZXh0dXJlTWFwcGVyKCkKK3sKKyAgICBpZiAobV90ZXh0dXJlKQorICAgICAgICBtX3RleHR1cmUt
PmRlc3Ryb3koKTsKKyAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICBtX3N1cmZhY2UtPmRlc3Ry
b3koKTsKKyAgICBpZiAobV9yZXBsaWNhU3VyZmFjZSkKKyAgICAgICAgbV9yZXBsaWNhU3VyZmFj
ZS0+ZGVzdHJveSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7
ICsraSkgeworICAgICAgICBpZiAobV9jaGlsZHJlbltpXSkKKyAgICAgICAgICAgIG1fY2hpbGRy
ZW5baV0tPmNsZWFudXBUZXh0dXJlTWFwcGVyKCk7CisgICAgfQorICAgIGlmIChtX2xhc3RUZXh0
dXJlTWFwcGVyKQorICAgICAgICBtX2xhc3RUZXh0dXJlTWFwcGVyLT5jbGVhbnVwKCk7Cit9CisK
K1RleHR1cmVNYXBwZXJOb2RlOjp+VGV4dHVyZU1hcHBlck5vZGUoKQoreworICAgIC8vIG5lZWRz
IGFjdGl2ZSBjb250ZXh0CisgICAgLy8gc3luY0NvbXBvc2l0aW5nU3RhdGUodHJ1ZSk7CisgICAg
c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgeworICAgICAgICBjb25zdCBpbnQgY2hpbGRyZW5TaXpl
ID0gbV9jaGlsZHJlbi5zaXplKCk7CisgICAgICAgIGZvciAoaW50IGkgPSBjaGlsZHJlblNpemUt
MTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2NoaWxkcmVuW2ldLT5tX3Bh
cmVudCA9PSB0aGlzKTsKKyAgICAgICAgICAgIG1fY2hpbGRyZW5baV0tPm1fcGFyZW50ID0gMDsK
KyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobV9wYXJlbnQpCisgICAgICAgIG1fcGFyZW50LT5t
X2NoaWxkcmVuLnJlbW92ZShtX3BhcmVudC0+bV9jaGlsZHJlbi5maW5kKHRoaXMpKTsKK30KKwor
I2lmIEVOQUJMRV9URVhNQVBfQU5JTUFUSU9OCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzZXRU
cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBt
X2FuaW0udHJhbnNmb3JtID0gdHJhbnNmb3JtOworICAgIG1fdHJhbnNmb3Jtcy5kaXJ0eSA9IHRy
dWU7CisgICAgaWYgKG1fcGFyZW50KQorICAgICAgICBtX3BhcmVudC0+bV9zdGF0ZS5kaXJ0eSA9
IHRydWU7CisgICAgaWYgKG1fc3RhdGUucHJlc2VydmVzM0QpIAorICAgICAgICBtX3N0YXRlLmRp
cnR5ID0gdHJ1ZTsKKyAgICBwZXJmb3JtUG9zdFN5bmNPcGVyYXRpb25zKCk7Cit9CisKK3ZvaWQg
VGV4dHVyZU1hcHBlck5vZGU6OnNldE9wYWNpdHlGcm9tQW5pbWF0aW9uRnJhbWUoZmxvYXQgb3Bh
Y2l0eSkKK3sKKyAgICBpZiAobV9sYXllcikKKyAgICAgICAgbV9sYXllci0+c2V0T3BhY2l0eShv
cGFjaXR5KTsKKyAgICBtX2FuaW0ub3BhY2l0eSA9IG9wYWNpdHk7CisgICAgbV9zdGF0ZS5kaXJ0
eSA9IHRydWU7ICAgIAorICAgIHBlcmZvcm1Qb3N0U3luY09wZXJhdGlvbnMoKTsKK30KKwordm9p
ZCBUZXh0dXJlTWFwcGVyTm9kZTo6bm90aWZ5VHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZyhib29s
IHJ1bm5pbmcpCit7CisgICAgbV9sYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKKyAgICBt
X2FuaW0udHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZyA9IHJ1bm5pbmc7CisgICAgaWYgKHJ1bm5p
bmcpCisgICAgICAgIG1fYW5pbS50cmFuc2Zvcm0gPSBtX3N0YXRlLnRyYW5zZm9ybTsKKyAgICBl
bHNlIAorICAgICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlRyYW5zZm9ybUNo
YW5nZSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6Om5vdGlmeU9wYWNpdHlBbmltYXRp
b25SdW5uaW5nKGJvb2wgcnVubmluZykKK3sKKyAgICBtX2xheWVyLT5zeW5jQ29tcG9zaXRpbmdT
dGF0ZSgpOworICAgIG1fYW5pbS5vcGFjaXR5QW5pbWF0aW9uUnVubmluZyA9IHJ1bm5pbmc7Cisg
ICAgaWYgKHJ1bm5pbmcpCisgICAgICAgIG1fYW5pbS5vcGFjaXR5ID0gbV9zdGF0ZS5vcGFjaXR5
OworICAgIGVsc2UgCisgICAgICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6T3Bh
Y2l0eUNoYW5nZSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6Om5vdGlmeUFuaW1hdGlv
blN0YXJ0ZWQoKQoreworICAgIGlmIChtX2xheWVyKQorICAgICAgICBtX2xheWVyLT5jbGllbnQo
KS0+bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChtX2xheWVyLCBXVEY6OmN1cnJlbnRUaW1lKCkpOwor
fQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzZXRUcmFuc2Zvcm1Gcm9tQW5pbWF0aW9uRnJh
bWUoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkKK3sKKyAgICBpZiAobV9sYXll
cikKKyAgICAgICAgbV9sYXllci0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7CisgICAgc2V0VHJhbnNm
b3JtKG1hdHJpeCk7Cit9CisjZW5kaWYKKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6bm90aWZ5
Q2hhbmdlKENoYW5nZU1hc2sgY2hhbmdlTWFzaykKK3sKKyAgICBtX2NoYW5nZU1hc2sgfD0gY2hh
bmdlTWFzazsKKyAgICBpZiAoIW1fbGF5ZXItPmNsaWVudCgpKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9sYXllci0+Y2xpZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZChtX2xheWVyKTsKK30KKwor
dm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGVyZm9ybVBvc3RTeW5jT3BlcmF0aW9ucygpCit7Cisg
ICAgY29uc3QgTGF5ZXJUeXBlIHByZXZMYXllclR5cGUgPSBtX2xheWVyVHlwZTsKKyAgICBjb21w
dXRlTGF5ZXJUeXBlKCk7CisgICAgaWYgKHByZXZMYXllclR5cGUgIT0gbV9sYXllclR5cGUpCisg
ICAgICAgIG1fc3RhdGUuZGlydHkgPSB0cnVlOworICAgIGlmIChtX3RyYW5zZm9ybXMuZGlydHkp
IAorICAgICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKworICAgIGNvbXB1dGVUcmFuc2Zvcm1hdGlv
bnMoKTsKKyAgICBpZiAobV9zdGF0ZS5tYXNrTGF5ZXIgJiYgIW1fc3RhdGUuZGlydHkpCisgICAg
ICAgIG1fc3RhdGUuZGlydHkgPSBtX3N0YXRlLm1hc2tMYXllci0+bV9zdGF0ZS5kaXJ0eTsKKyAg
ICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIgJiYgIW1fc3RhdGUuZGlydHkpCisgICAgICAgIG1f
c3RhdGUuZGlydHkgPSBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5kaXJ0eTsKKworICAg
IGNvbnN0IGludCBzaXplID0gbV9jaGlsZHJlbi5zaXplKCk7CisKKyAgICBmb3IgKGludCBpID0g
c2l6ZSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBsYXll
ciA9IG1fY2hpbGRyZW5baV07CisKKyAgICAgICAgbGF5ZXItPnBlcmZvcm1Qb3N0U3luY09wZXJh
dGlvbnMoKTsKKyAgICAgICAgaWYgKCFtX3N0YXRlLmRpcnR5KQorICAgICAgICAgICAgbV9zdGF0
ZS5kaXJ0eSA9IGxheWVyLT5tX3N0YXRlLmRpcnR5OworICAgIH0KKyAgICBtX3N0YXRlLmhhc1N1
cmZhY2VEZXNjZW5kYW50cyA9IGhhc1N1cmZhY2VEZXNjZW5kYW50cygpOworICAgIGlmIChtX3N0
YXRlLmRpcnR5KQorICAgICAgICBtX3N0YXRlLmRlc2NlbmRhbnRzV2l0aENvbnRlbnQgPSBjb3Vu
dERlc2NlbmRhbnRzV2l0aENvbnRlbnQoKTsKKworICAgIGlmIChtX3N0YXRlLnByZXNlcnZlczNE
KQorICAgICAgICBzb3J0QnlaT3JkZXIobV9jaGlsZHJlbiwgMCwgc2l6ZSk7CisgICAgaWYgKG1f
c3RhdGUuZGlydHkpIAorICAgICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKK30KKwordm9pZCBUZXh0
dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUoYm9vbCByZWN1cnNlKQoreworICAg
IGJvb2wgbmVlZHNUb0ludmFsaWRhdGVUcmFuc2Zvcm0gPSBmYWxzZTsKKworICAgIGlmICghbV9s
YXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY2hhbmdlTWFzayA9PSBOb0NoYW5n
ZXMpCisgICAgICAgIGdvdG8gYWZ0ZXJDdXJyZW50TGF5ZXJTeW5jOworCisgICAgc2V0TmVlZHNE
aXNwbGF5KCk7CisgICAgaWYgKG1fcGFyZW50KQorICAgICAgICBtX3BhcmVudC0+bV9zdGF0ZS5k
aXJ0eSA9IHRydWU7CisKKyAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBI
VE1MQ29udGVudFR5cGUgJiYgKG1fY2hhbmdlTWFzayAmIFBhcmVudENoYW5nZSkpIHsKKyAgICAg
ICAgLy8gVGhlIFdlYkNvcmUgY29tcG9zaXRvciBtYW5hZ2VzIGl0ZW0gb3duZXJzaGlwLiBXZSBo
YXZlIHRvIG1ha2Ugc3VyZSBncmFwaGljc3ZpZXcgZG9lc24ndAorICAgICAgICAvLyB0cnkgdG8g
c25hdGNoIHRoYXQgb3duZXJzaGlwLgorCisgICAgICAgIGlmICghbV9sYXllci0+cGFyZW50KCkp
CisgICAgICAgICAgICBtX3BhcmVudCA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
cGFyZW50ID0gdG9UZXh0dXJlTWFwcGVyTm9kZShtX2xheWVyLT5wYXJlbnQoKSk7CisKKyAgICAg
ICAgaWYgKCFtX2xheWVyLT5wYXJlbnQoKSAmJiBtX3BhcmVudCkgeworICAgICAgICAgICAgc2l6
ZV90IGluZGV4ID0gbV9wYXJlbnQtPm1fY2hpbGRyZW4uZmluZCh0aGlzKTsKKyAgICAgICAgICAg
IG1fcGFyZW50LT5tX2NoaWxkcmVuLnJlbW92ZShpbmRleCk7CisgICAgICAgIH0KKworICAgIH0K
KworICAgIGlmIChtX2NoYW5nZU1hc2sgJiBDaGlsZHJlbkNoYW5nZSkgeworICAgICAgICBtX2No
aWxkcmVuLmNsZWFyKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9sYXllci0+
Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKFRleHR1cmVNYXBwZXJO
b2RlKiBjaGlsZCA9IHRvVGV4dHVyZU1hcHBlck5vZGUobV9sYXllci0+Y2hpbGRyZW4oKVtpXSkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIWNoaWxkKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChjaGlsZCk7CisgICAgICAg
ICAgICAgICAgY2hpbGQtPm1fcGFyZW50ID0gdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBtX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9jaGFu
Z2VNYXNrICYgKFNpemVDaGFuZ2UgfCBDb250ZW50c1JlY3RDaGFuZ2UpKSB7CisgICAgICAgIElu
dFNpemUgd2FudGVkU2l6ZSA9IEludFNpemUobV9sYXllci0+c2l6ZSgpLndpZHRoKCksIG1fbGF5
ZXItPnNpemUoKS5oZWlnaHQoKSk7CisgICAgICAgIGlmICh3YW50ZWRTaXplLmlzRW1wdHkoKSAm
JiBtX3BlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSkKKyAgICAg
ICAgICAgIHdhbnRlZFNpemUgPSBJbnRTaXplKG1fbGF5ZXItPmNvbnRlbnRzUmVjdCgpLndpZHRo
KCksIG1fbGF5ZXItPmNvbnRlbnRzUmVjdCgpLmhlaWdodCgpKTsKKworICAgICAgICBpZiAod2Fu
dGVkU2l6ZSAhPSBtX3NpemUpIHsKKyAgICAgICAgICAgIG1fc2l6ZSA9IEludFNpemUod2FudGVk
U2l6ZS53aWR0aCgpLCB3YW50ZWRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgIGlmIChtX3Bs
YXRmb3JtQ2xpZW50KQorICAgICAgICAgICAgICAgIG1fcGxhdGZvcm1DbGllbnQtPnNldFNpemVD
aGFuZ2VkKG1fc2l6ZSk7CisgICAgICAgICAgICBjb25zdCBib29sIG5lZWRzVGlsaW5nID0gbV9z
aXplLndpZHRoKCkgPiAyMDAwIHx8IG1fc2l6ZS5oZWlnaHQoKSA+IDIwMDA7CisgICAgICAgICAg
ICBpZiAobV9zdGF0ZS50aWxlZCAhPSBuZWVkc1RpbGluZykKKyAgICAgICAgICAgICAgICBtX3N0
YXRlLnRpbGVkID0gbmVlZHNUaWxpbmc7CisgICAgICAgICAgICBtX3N0YXRlLmRpcnR5ID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX2NoYW5nZU1hc2sgJiBNYXNrTGF5ZXJD
aGFuZ2UpCisgICAgICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiBsYXllciA9IHRvVGV4dHVyZU1h
cHBlck5vZGUobV9sYXllci0+bWFza0xheWVyKCkpKQorICAgICAgICAgICBsYXllci0+bV9lZmZl
Y3RUYXJnZXQgPSB0aGlzOworCisgICAgaWYgKG1fY2hhbmdlTWFzayAmIFJlcGxpY2FMYXllckNo
YW5nZSkKKyAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIGxheWVyID0gdG9UZXh0dXJlTWFw
cGVyTm9kZShtX2xheWVyLT5yZXBsaWNhTGF5ZXIoKSkpCisgICAgICAgICAgIGxheWVyLT5tX2Vm
ZmVjdFRhcmdldCA9IHRoaXM7CisKKyAgICBpZiAobV9jaGFuZ2VNYXNrICYgKFRyYW5zZm9ybUNo
YW5nZSB8IFNpemVDaGFuZ2UgfCBBbmNob3JQb2ludENoYW5nZSB8IFBvc2l0aW9uQ2hhbmdlKSkK
KyAgICAgICAgbV90cmFuc2Zvcm1zLmxvY2FsRGlydHkgPSB0cnVlOworCisgICAgaWYgKG1fY2hh
bmdlTWFzayAmIChDaGlsZHJlblRyYW5zZm9ybUNoYW5nZSB8IFNpemVDaGFuZ2UpKQorICAgICAg
ICBtX3RyYW5zZm9ybXMucGVyc3BlY3RpdmVEaXJ0eSA9IHRydWU7CisKKyAgICBpZiAobV9jaGFu
Z2VNYXNrICYgKENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlIHwgUHJlc2VydmVzM0RDaGFuZ2UgfCBU
cmFuc2Zvcm1DaGFuZ2UgfCBBbmNob3JQb2ludENoYW5nZSB8IFNpemVDaGFuZ2UgfCBDb250ZW50
c1JlY3RDaGFuZ2UgfCBCYWNrZmFjZVZpc2liaWxpdHlDaGFuZ2UgfCBQb3NpdGlvbkNoYW5nZSB8
IE1hc2tMYXllckNoYW5nZSB8IERyYXdzQ29udGVudENoYW5nZSB8IENvbnRlbnRDaGFuZ2UgfCBS
ZXBsaWNhTGF5ZXJDaGFuZ2UpKSAgICB7CisgICAgICAgIC8vIER1ZSB0byB0aGUgZGlmZmVyZW5j
ZXMgYmV0d2VlbiB0aGUgd2F5IFdlYkNvcmUgaGFuZGxlcyB0cmFuc2Zvcm1zIGFuZCB0aGUgd2F5
IFF0IGhhbmRsZXMgdHJhbnNmb3JtcywKKyAgICAgICAgLy8gYWxsIHRoZXNlIGVsZW1lbnRzIGFm
ZmVjdCB0aGUgdHJhbnNmb3JtcyBvZiBhbGwgdGhlIGRlc2NlbmRhbnRzLgorICAgICAgICBuZWVk
c1RvSW52YWxpZGF0ZVRyYW5zZm9ybSA9IHRydWU7CisgICAgfQorCisgICAgaWYgKG1fY2hhbmdl
TWFzayAmIERpc3BsYXlDaGFuZ2UpIAorICAgICAgICBtX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKKwor
ICAgIG1fc3RhdGUubWFza0xheWVyID0gdG9UZXh0dXJlTWFwcGVyTm9kZShtX2xheWVyLT5tYXNr
TGF5ZXIoKSk7CisgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJOb2Rl
KG1fbGF5ZXItPnJlcGxpY2FMYXllcigpKTsKKyAgICBtX3N0YXRlLnBvcyA9IG1fbGF5ZXItPnBv
c2l0aW9uKCk7CisgICAgbV9zdGF0ZS5hbmNob3JQb2ludCA9IG1fbGF5ZXItPmFuY2hvclBvaW50
KCk7CisgICAgbV9zdGF0ZS5zaXplID0gbV9sYXllci0+c2l6ZSgpOworICAgIG1fc3RhdGUudHJh
bnNmb3JtID0gbV9sYXllci0+dHJhbnNmb3JtKCk7CisgICAgbV9zdGF0ZS5jb250ZW50c1JlY3Qg
PSBtX2xheWVyLT5jb250ZW50c1JlY3QoKTsKKyAgICBtX3N0YXRlLm9wYWNpdHkgPSBtX2xheWVy
LT5vcGFjaXR5KCk7CisgICAgbV9zdGF0ZS5jb250ZW50c1JlY3QgPSBtX2xheWVyLT5jb250ZW50
c1JlY3QoKTsKKyAgICBtX3N0YXRlLnByZXNlcnZlczNEID0gbV9sYXllci0+cHJlc2VydmVzM0Qo
KTsKKyAgICBtX3N0YXRlLm1hc2tzVG9Cb3VuZHMgPSBtX2xheWVyLT5tYXNrc1RvQm91bmRzKCk7
CisgICAgbV9zdGF0ZS5kcmF3c0NvbnRlbnQgPSBtX2xheWVyLT5kcmF3c0NvbnRlbnQoKTsKKyAg
ICBtX3N0YXRlLmNvbnRlbnRzT3BhcXVlID0gbV9sYXllci0+Y29udGVudHNPcGFxdWUoKTsKKyAg
ICBtX3N0YXRlLmJhY2tmYWNlVmlzaWJpbGl0eSA9IG1fbGF5ZXItPmJhY2tmYWNlVmlzaWJpbGl0
eSgpOworICAgIG1fc3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm0gPSBtX2xheWVyLT5jaGlsZHJlblRy
YW5zZm9ybSgpOworICAgIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPSBtX3BlbmRpbmdD
b250ZW50LmNvbnRlbnRUeXBlOworICAgIG1fY3VycmVudENvbnRlbnQuaW1hZ2UgPSBtX3BlbmRp
bmdDb250ZW50LmltYWdlOworICAgIG1fY3VycmVudENvbnRlbnQubWVkaWEgPSBtX3BlbmRpbmdD
b250ZW50Lm1lZGlhOworICAgIG1fY3VycmVudENvbnRlbnQuYmFja2dyb3VuZENvbG9yID0gbV9w
ZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5kQ29sb3I7CisgICAgbV9jdXJyZW50Q29udGVudC5uZWVk
c0Rpc3BsYXkgPSBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSB8fCBtX3BlbmRpbmdDb250
ZW50Lm5lZWRzRGlzcGxheTsKKyAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3Qu
dW5pdGUobV9wZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXlSZWN0KTsKKyAgICBtX3BlbmRpbmdD
b250ZW50Lm5lZWRzRGlzcGxheSA9IGZhbHNlOworICAgIG1fcGVuZGluZ0NvbnRlbnQubmVlZHNE
aXNwbGF5UmVjdCA9IEludFJlY3QoKTsKKyAgICBtX2NoYW5nZU1hc2sgPSBOb0NoYW5nZXM7Cisg
ICAgYWZ0ZXJDdXJyZW50TGF5ZXJTeW5jOgorICAgIGlmIChuZWVkc1RvSW52YWxpZGF0ZVRyYW5z
Zm9ybSkKKyAgICAgICAgaW52YWxpZGF0ZVRyYW5zZm9ybSgpOworCisgICAgaWYgKG1fc3RhdGUu
bWFza0xheWVyKSB7CisgICAgICAgIG1fc3RhdGUubWFza0xheWVyLT5zeW5jQ29tcG9zaXRpbmdT
dGF0ZShmYWxzZSk7CisgICAgICAgIGlmIChtX3N0YXRlLm1hc2tMYXllci0+bV9zaXplLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIG1fc3RhdGUubWFza0xheWVyLT5tX3NpemUgPSBtX3NpemU7Cisg
ICAgfQorCisgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyKQorICAgICAgICBtX3N0YXRlLnJl
cGxpY2FMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGUoZmFsc2UpOworCisjaWYgMAorICAgIGlm
IChtX3N0YXRlLmRpcnR5ICYmIG1fdGV4dHVyZSAmJiBtX3RleHR1cmUtPmFsbG93T2ZmbGluZVRl
eHR1cmVVcGxvYWQoKSkKKyAgICAgICAgdXBsb2FkVGV4dHVyZUZyb21Db250ZW50KDApOworI2Vu
ZGlmCisKKyAgICBpZiAoIXJlY3Vyc2UpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IGlu
dCBjaGlsZHJlblNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKKyAgICBmb3IgKGludCBpID0gY2hp
bGRyZW5TaXplLTE7IGkgPj0gMDsgLS1pKQorICAgICAgICBtX2NoaWxkcmVuW2ldLT5zeW5jQ29t
cG9zaXRpbmdTdGF0ZSh0cnVlKTsKK30KKworR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6Okdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKKyAg
ICA6IEdyYXBoaWNzTGF5ZXIoY2xpZW50KQorICAgICwgbV9ub2RlKG5ldyBUZXh0dXJlTWFwcGVy
Tm9kZSh0aGlzKSkKK3sKK30KKwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0
TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgbV9ub2RlLT5tX25hbWUgPSBuYW1lOwor
fQorCitHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6fkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyKCkKK3sKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpOiBUaGUgY3VycmVudCBz
aXplIG1pZ2h0IGNoYW5nZSwgdGh1cyB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgd2hvbGUgZGlzcGxh
eS4KKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROZWVkc0Rpc3BsYXko
KQoreworICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXkgPSB0cnVlOwor
ICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpEaXNwbGF5Q2hhbmdl
KTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3sKKyAgICBpZiAobV9ub2RlLT5tX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5uZWVkc0Rpc3Bs
YXlSZWN0LnVuaXRlKEludFJlY3QocmVjdCkpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRl
eHR1cmVNYXBwZXJOb2RlOjpEaXNwbGF5Q2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGlj
c0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0UGFyZW50
KEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1
cmVNYXBwZXJOb2RlOjpQYXJlbnRDaGFuZ2UpOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFBhcmVu
dChsYXllcik7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK2Jvb2wgR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGlj
c0xheWVyKj4mIGNoaWxkcmVuKQoreworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVN
YXBwZXJOb2RlOjpDaGlsZHJlbkNoYW5nZSk7CisgICAgcmV0dXJuIEdyYXBoaWNzTGF5ZXI6OnNl
dENoaWxkcmVuKGNoaWxkcmVuKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisq
Lwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGQoR3JhcGhpY3NMYXll
ciogbGF5ZXIpCit7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6
OkNoaWxkcmVuQ2hhbmdlKTsKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZChsYXllcik7Cit9
CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXI6OmFkZENoaWxkQXRJbmRleChHcmFwaGljc0xheWVyKiBsYXllciwgaW50IGlu
ZGV4KQoreworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChsYXllciwgaW5kZXgp
OworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDaGlsZHJlbkNo
YW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkQWJvdmUoR3JhcGhpY3NMYXllciogbGF5ZXIs
IEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpCit7CisgICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxk
QWJvdmUobGF5ZXIsIHNpYmxpbmcpOworICAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJl
TWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5
ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRDaGlsZEJlbG93
KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQoreworCisgICAg
R3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhsYXllciwgc2libGluZyk7CisgICAgbV9ub2Rl
LT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNoaWxkcmVuQ2hhbmdlKTsKK30KKwor
LyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLworYm9vbCBHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcjo6cmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFwaGljc0xh
eWVyKiBuZXdDaGlsZCkKK3sKKyAgICBpZiAoR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKG9s
ZENoaWxkLCBuZXdDaGlsZCkpIHsKKyAgICAgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVy
ZU1hcHBlck5vZGU6OkNoaWxkcmVuQ2hhbmdlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkK
KyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpyZW1vdmVGcm9tUGFyZW50KCkK
K3sKKyAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisgICAgbV9ub2RlLT5ub3Rp
ZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlBhcmVudENoYW5nZSk7CisgICAgR3JhcGhpY3NM
YXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIu
aCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRNYXNrTGF5ZXIoR3Jh
cGhpY3NMYXllciogdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IG1hc2tMYXllcigpKQorICAg
ICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVyKHZhbHVlKTsKKyAg
ICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6TWFza0xheWVyQ2hhbmdl
KTsKK30KKworCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKiB2
YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gcmVwbGljYUxheWVyKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcih2YWx1ZSk7CisgICAg
bV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlJlcGxpY2FMYXllckNoYW5n
ZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHZhbHVlKQor
eworICAgIGlmICh2YWx1ZSA9PSBwb3NpdGlvbigpKQorICAgICAgICByZXR1cm47CisgICAgR3Jh
cGhpY3NMYXllcjo6c2V0UG9zaXRpb24odmFsdWUpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdl
KFRleHR1cmVNYXBwZXJOb2RlOjpQb3NpdGlvbkNoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3Jh
cGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldEFu
Y2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09
IGFuY2hvclBvaW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRB
bmNob3JQb2ludCh2YWx1ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBl
ck5vZGU6OkFuY2hvclBvaW50Q2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVy
LmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0U2l6ZShjb25zdCBG
bG9hdFNpemUmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBzaXplKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNpemUodmFsdWUpOworICAgIG1fbm9kZS0+
bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpTaXplQ2hhbmdlKTsKK30KKworLyogXHJl
aW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cjo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB2YWx1ZSkKK3sKKyAg
ICBpZiAodmFsdWUgPT0gdHJhbnNmb3JtKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBo
aWNzTGF5ZXI6OnNldFRyYW5zZm9ybSh2YWx1ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2Uo
VGV4dHVyZU1hcHBlck5vZGU6OlRyYW5zZm9ybUNoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3Jh
cGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENo
aWxkcmVuVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB2YWx1ZSkKK3sKKyAg
ICBpZiAodmFsdWUgPT0gY2hpbGRyZW5UcmFuc2Zvcm0oKSkKKyAgICAgICAgcmV0dXJuOworICAg
IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuVHJhbnNmb3JtKHZhbHVlKTsKKyAgICBtX25vZGUt
Pm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5UcmFuc2Zvcm1DaGFuZ2Up
OworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjpzZXRQcmVzZXJ2ZXMzRChib29sIHZhbHVlKQoreworICAgIGlmICh2
YWx1ZSA9PSBwcmVzZXJ2ZXMzRCgpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXll
cjo6c2V0UHJlc2VydmVzM0QodmFsdWUpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1
cmVNYXBwZXJOb2RlOjpQcmVzZXJ2ZXMzRENoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhp
Y3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE1hc2tz
VG9Cb3VuZHMoYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gbWFza3NUb0JvdW5kcygp
KQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza3NUb0JvdW5kcyh2
YWx1ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6Ok1hc2tz
VG9Cb3VuZHNDaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2
b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXREcmF3c0NvbnRlbnQoYm9vbCB2YWx1
ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gZHJhd3NDb250ZW50KCkpCisgICAgICAgIHJldHVybjsK
KyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6RHJhd3NDb250ZW50
Q2hhbmdlKTsKKyAgICBHcmFwaGljc0xheWVyOjpzZXREcmF3c0NvbnRlbnQodmFsdWUpOworfQor
CisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIHZhbHVlKQoreworICAg
IGlmICh2YWx1ZSA9PSBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQuYmFja2dyb3VuZENvbG9yKQor
ICAgICAgICByZXR1cm47CisgICAgbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRD
b2xvciA9IHZhbHVlOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tncm91bmRDb2xvcih2YWx1
ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkJhY2tncm91
bmRDb2xvckNoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3Zv
aWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmNsZWFyQmFja2dyb3VuZENvbG9yKCkKK3sK
KyAgICBpZiAoIW1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5kQ29sb3IuaXNWYWxp
ZCgpKQorICAgICAgICByZXR1cm47CisgICAgbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50LmJhY2tn
cm91bmRDb2xvciA9IENvbG9yKCk7CisgICAgR3JhcGhpY3NMYXllcjo6Y2xlYXJCYWNrZ3JvdW5k
Q29sb3IoKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6QmFj
a2dyb3VuZENvbG9yQ2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisq
Lwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNPcGFxdWUoYm9v
bCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gY29udGVudHNPcGFxdWUoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDb250
ZW50c09wYXF1ZUNoYW5nZSk7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUo
dmFsdWUpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkoYm9vbCB2YWx1ZSkK
K3sKKyAgICBpZiAodmFsdWUgPT0gYmFja2ZhY2VWaXNpYmlsaXR5KCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkodmFsdWUpOworICAg
IG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpCYWNrZmFjZVZpc2liaWxp
dHlDaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRPcGFjaXR5KGZsb2F0IHZhbHVlKQoreworICAg
IGlmICh2YWx1ZSA9PSBvcGFjaXR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xh
eWVyOjpzZXRPcGFjaXR5KHZhbHVlKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJl
TWFwcGVyTm9kZTo6T3BhY2l0eUNoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXll
ci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzUmVj
dChjb25zdCBJbnRSZWN0JiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gY29udGVudHNSZWN0
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1JlY3Qo
dmFsdWUpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDb250
ZW50c1JlY3RDaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2
b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2Uq
IGltYWdlKQoreworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpD
b250ZW50Q2hhbmdlKTsKKyAgICBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGUg
PSBpbWFnZSA/IFRleHR1cmVNYXBwZXJOb2RlOjpEaXJlY3RJbWFnZUNvbnRlbnRUeXBlIDogVGV4
dHVyZU1hcHBlck5vZGU6OkhUTUxDb250ZW50VHlwZTsKKyAgICBtX25vZGUtPm1fcGVuZGluZ0Nv
bnRlbnQuaW1hZ2UgPSBpbWFnZTsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1h
Z2UoaW1hZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c0JhY2tncm91bmRDb2xvcihjb25z
dCBDb2xvciYgY29sb3IpCit7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBl
ck5vZGU6OkNvbnRlbnRDaGFuZ2UpOworICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5jb250
ZW50VHlwZSA9IFRleHR1cmVNYXBwZXJOb2RlOjpDb2xvckNvbnRlbnRUeXBlOworICAgIG1fbm9k
ZS0+bV9wZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsKKyAgICBHcmFwaGlj
c0xheWVyOjpzZXRDb250ZW50c0JhY2tncm91bmRDb2xvcihjb2xvcik7Cit9CisKKwordm9pZCBH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5
ZXIqIG1lZGlhKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9NZWRpYShtZWRp
YSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRD
aGFuZ2UpOworICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSA9IG1lZGlh
ID8gVGV4dHVyZU1hcHBlck5vZGU6Ok1lZGlhQ29udGVudFR5cGUgOiBUZXh0dXJlTWFwcGVyTm9k
ZTo6SFRNTENvbnRlbnRUeXBlOworICAgIGlmIChtZWRpYSkKKyAgICAgICAgbV9ub2RlLT5tX3Bl
bmRpbmdDb250ZW50Lm1lZGlhID0gc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlclZpZGVvTGF5ZXIq
PihtZWRpYSk7CisgICAgZWxzZQorICAgICAgICBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQubWVk
aWEgPSAwOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c09yaWVudGF0aW9uKENvbXBvc2l0aW5n
Q29vcmRpbmF0ZXNPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBpZiAoY29udGVudHNP
cmllbnRhdGlvbigpID09IG9yaWVudGF0aW9uKQorICAgICAgICByZXR1cm47CisgICAgbV9ub2Rl
LT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRzT3JpZW50YXRpb25DaGFu
Z2UpOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3JpZW50YXRpb24ob3JpZW50YXRp
b24pOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHko
KQoreworICAgIG1fbm9kZS0+c3luY0NvbXBvc2l0aW5nU3RhdGUoZmFsc2UpOworICAgIG1fbm9k
ZS0+cGVyZm9ybVBvc3RTeW5jT3BlcmF0aW9ucygpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNz
TGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzeW5jQ29tcG9z
aXRpbmdTdGF0ZSgpCit7CisgICAgR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGUo
KTsKKyAgICBtX25vZGUtPnN5bmNDb21wb3NpdGluZ1N0YXRlKHRydWUpOworICAgIG1fbm9kZS0+
cGVyZm9ybVBvc3RTeW5jT3BlcmF0aW9ucygpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5
ZXIuaCkKKyAqLworTmF0aXZlTGF5ZXIgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6Om5hdGl2
ZUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ub2RlLmdldCgpOworfQorCisvKiBccmVp
bXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCitQbGF0Zm9ybUxheWVyKiBHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbm9kZS5n
ZXQoKTsKK30KKworUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVyOjpjcmVh
dGUoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQoreworICAgIHJldHVybiBuZXcgR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIoY2xpZW50KTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMWExNThmM2I3MGIwNzgxNjAzZjYzZDQzOTg0ZWU2OGE1N2EwMzZj
MAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorKi8KKworI2lmbmRlZiBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcl9oCisjZGVmaW5lIEdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyX2gKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xp
ZW50LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNlbmRpZgorCisjZGVmaW5lIEVOQUJMRV9URVhN
QVBfQU5JTUFUSU9OIDAKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0dXJlTWFw
cGVyTm9kZTsKK2NsYXNzIEJpdG1hcFRleHR1cmU7CitjbGFzcyBUZXh0dXJlTWFwcGVyOworCitj
bGFzcyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciA6IHB1YmxpYyBHcmFwaGljc0xheWVyIHsK
KyAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlck5vZGU7CisKK3B1YmxpYzoKKyAgICBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcihHcmFwaGljc0xheWVyQ2xpZW50Kik7CisgICAgdmlydHVh
bCB+R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoKTsKKworICAgIC8vIHJlaW1wcyBmcm9tIEdy
YXBoaWNzTGF5ZXIuaAorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAg
IHZpcnR1YWwgdm9pZCBzZXRQYXJlbnQoR3JhcGhpY3NMYXllciogbGF5ZXIpOworICAgIHZpcnR1
YWwgYm9vbCBzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+Jik7CisgICAg
dmlydHVhbCB2b2lkIGFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqLCBpbnQgaW5kZXgpOworICAgIHZpcnR1YWwg
dm9pZCBhZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBz
aWJsaW5nKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBs
YXllciwgR3JhcGhpY3NMYXllciogc2libGluZyk7CisgICAgdmlydHVhbCBib29sIHJlcGxhY2VD
aGlsZChHcmFwaGljc0xheWVyKiBvbGRDaGlsZCwgR3JhcGhpY3NMYXllciogbmV3Q2hpbGQpOwor
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVGcm9tUGFyZW50KCk7CisgICAgdmlydHVhbCB2b2lkIHNl
dE1hc2tMYXllcihHcmFwaGljc0xheWVyKiBsYXllcik7CisgICAgdmlydHVhbCB2b2lkIHNldFBv
c2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHApOworICAgIHZpcnR1YWwgdm9pZCBzZXRBbmNob3JQ
b2ludChjb25zdCBGbG9hdFBvaW50M0QmIHApOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSk7CisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCk7CisgICAgdmlydHVhbCB2b2lkIHNldENoaWxkcmVu
VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0UHJlc2VydmVzM0QoYm9vbCBiKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza3NUb0Jv
dW5kcyhib29sIGIpOworICAgIHZpcnR1YWwgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCBiKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CisgICAg
dmlydHVhbCB2b2lkIGNsZWFyQmFja2dyb3VuZENvbG9yKCk7CisgICAgdmlydHVhbCB2b2lkIHNl
dENvbnRlbnRzT3BhcXVlKGJvb2wgYik7CisgICAgdmlydHVhbCB2b2lkIHNldEJhY2tmYWNlVmlz
aWJpbGl0eShib29sIGIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNp
dHkpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgcik7
CisgICAgdmlydHVhbCB2b2lkIHNldFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7CisgICAgdmlydHVh
bCB2b2lkIHNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKik7CisgICAgdmlydHVhbCB2
b2lkIHNldENvbnRlbnRzQmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CisjaWYgRU5BQkxF
KDNEX0NBTlZBUykKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0dyYXBoaWNzQ29udGV4
dDNEKGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgdmlydHVhbCB2b2lkIHNldEdyYXBo
aWNzQ29udGV4dDNETmVlZHNEaXNwbGF5KCk7CisjZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29udGVudHNPcmllbnRhdGlvbihDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24pOworICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOworICAg
IHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIHZpcnR1YWwg
TmF0aXZlTGF5ZXIgbmF0aXZlTGF5ZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5
ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBhZGRBbmltYXRp
b24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiAvKmJveFNpemUqLywg
Y29uc3QgQW5pbWF0aW9uKiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIC8qa2V5ZnJhbWVzTmFtZSovLCBkb3VibGUgLyp0aW1lT2Zmc2V0Ki8pIHsgcmV0dXJu
IGZhbHNlOyB9CisKK3ByaXZhdGU6CisgICAgT3duUHRyPFRleHR1cmVNYXBwZXJOb2RlPiBtX25v
ZGU7Cit9OworCit9CisjZW5kaWYgLy8gR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXJfaApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmMwMWJiYTdhZmI2OGE2ZjdjZjJhMjIzYjE4MjA1OTNjOTliY2ZmYzIKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
LmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIFRleHR1cmVNYXBwZXJfaAorI2RlZmluZSBUZXh0dXJlTWFwcGVyX2gKKwor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiAoZGVmaW5lZChRVF9PUEVOR0xf
TElCKSkKKyAgICAjaWYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikgJiYgIWRlZmluZWQoVEVYTUFQ
X09QRU5HTF9FU18yKQorICAgICAgICAjZGVmaW5lIFRFWE1BUF9PUEVOR0xfRVNfMgorICAgICNl
bmRpZgorI2VuZGlmCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJ
bnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9u
TWF0cml4LmgiCisKKy8qCisgICAgVGV4dHVyZU1hcHBlciBpcyBhIG1lY2hhbmlzbSB0aGF0IGVu
YWJsZXMgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIG9mIENTUyBhbmltYXRpb25zIChhY2NlbGVyYXRl
ZCBjb21wb3NpdGluZykgd2l0aG91dAorICAgIGEgbmVlZCBmb3IgYSBwbGF0Zm9ybSBzcGVjaWZp
YyBzY2VuZS1ncmFwaCBsaWJyYXJ5IGxpa2UgQ29yZUFuaW1hdGlvbnMgb3IgUUdyYXBoaWNzVmll
dy4KKyovCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGV4dHVyZU1hcHBlcjsKKwor
Ly8gQSAyRCB0ZXh0dXJlIHRoYXQgY2FuIGJlIHRoZSB0YXJnZXQgb2Ygc29mdHdhcmUgb3IgR0wg
cmVuZGVyaW5nLgorY2xhc3MgQml0bWFwVGV4dHVyZSAgOiBwdWJsaWMgUmVmQ291bnRlZDxCaXRt
YXBUZXh0dXJlPiB7CitwdWJsaWM6CisgICAgQml0bWFwVGV4dHVyZSgpIDogbV9sb2NrQ291bnQo
MCkge30KKyAgICB2aXJ0dWFsIH5CaXRtYXBUZXh0dXJlKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJv
b2wgYWxsb3dPZmZsaW5lVGV4dHVyZVVwbG9hZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIHNpemUo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHJlc2V0KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgb3BhcXVlID0gZmFs
c2UpCisgICAgeworICAgICAgICBtX2lzT3BhcXVlID0gb3BhcXVlOworICAgICAgICBtX2NvbnRl
bnRTaXplID0gc2l6ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBlbmRQYWludCgpID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0KiBiZWdpblBhaW50TWVkaWEoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJlZ2luUGFpbnQo
SW50UmVjdCgwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSk7CisgICAgfQor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKSA9IDA7CisgICAgdmly
dHVhbCBib29sIHNhdmUoY29uc3QgU3RyaW5nICYpIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBp
bmxpbmUgdm9pZCBsb2NrKCkgeyArK21fbG9ja0NvdW50OyB9CisgICAgaW5saW5lIHZvaWQgdW5s
b2NrKCkgeyAtLW1fbG9ja0NvdW50OyB9CisgICAgaW5saW5lIGJvb2wgaXNMb2NrZWQoKSB7IHJl
dHVybiBtX2xvY2tDb3VudDsgfQorICAgIGlubGluZSBJbnRTaXplIGNvbnRlbnRTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9jb250ZW50U2l6ZTsgfQorICAgIGlubGluZSB2b2lkIHNldE9mZnNldChj
b25zdCBJbnRQb2ludCYgbykgeyBtX29mZnNldCA9IG87IH0KKyAgICBpbmxpbmUgSW50UG9pbnQg
b2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KK3ByaXZhdGU6CisgICAgaW50IG1f
bG9ja0NvdW50OworICAgIEludFNpemUgbV9jb250ZW50U2l6ZTsKKyAgICBib29sIG1faXNPcGFx
dWU7CisgICAgSW50UG9pbnQgbV9vZmZzZXQ7Cit9OworCisvLyBBICJjb250ZXh0IiBjbGFzcyB1
c2VkIHRvIGVuY2Fwc3VsYXRlIGFjY2VsZXJhdGVkIHRleHR1cmUgbWFwcGluZyBmdW5jdGlvbnM6
IGkuZS4gZHJhd2luZyBhIHRleHR1cmUKKy8vIG9udG8gdGhlIHNjcmVlbiBvciBpbnRvIGFub3Ro
ZXIgdGV4dHVyZSB3aXRoIGEgc3BlY2lmaWVkIHRyYW5zZm9ybSwgb3BhY2l0eSBhbmQgbWFzay4K
K2NsYXNzIFRleHR1cmVNYXBwZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0dXJlTWFwcGVyPiB7
CisgICAgZnJpZW5kIGNsYXNzIEJpdG1hcFRleHR1cmU7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0Kik7CisgICAg
dmlydHVhbCB+VGV4dHVyZU1hcHBlcigpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0
dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHRhcmdldCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4
KCksIGZsb2F0IG9wYWNpdHkgPSAxLjBmLCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVy
ZSA9IDApID0gMDsKKworICAgIC8vIG1ha2VzIGEgc3VyZmFjZSB0aGUgdGFyZ2V0IGZvciB0aGUg
Zm9sbG93aW5nIGRyYXdUZXh0dXJlIGNhbGxzLgorICAgIHZpcnR1YWwgdm9pZCBiaW5kU3VyZmFj
ZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50VG9U
YXJnZXQoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50U2l6ZSYsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEludFJl
Y3QmIHZpc2libGVSZWN0KQorICAgIHsKKyAgICAgICAgZHJhd1RleHR1cmUodGV4dHVyZSwgSW50
UmVjdCgwLCAwLCB0ZXh0dXJlLmNvbnRlbnRTaXplKCkud2lkdGgoKSwgdGV4dHVyZS5jb250ZW50
U2l6ZSgpLmhlaWdodCgpKSwgbWF0cml4LCBvcGFjaXR5LCAwKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Q2xpcChjb25zdCBJbnRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBh
bGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxC
aXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCkgPSAwOworICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogdHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cCgpIHt9CisKKyAg
ICBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2M7
IH0KKworcHJvdGVjdGVkOgorICAgIFRleHR1cmVNYXBwZXIoR3JhcGhpY3NDb250ZXh0KiBnYykg
OiBtX2djKGdjKSB7fQorICAgIEdyYXBoaWNzQ29udGV4dCogbV9nYzsKK307CisKK307CisKKyNl
bmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzZTlm
Yzk5YWEzOTFlM2YwYjdmODZhNTFiODNiZTMzMjc1ZjcyZjUKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ci5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJfaAorI2RlZmluZSBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
cl9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xh
c3MgSW50UmVjdDsKK2NsYXNzIEludFNpemU7CitjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsK
KworCisvLyBHbHVlIGxheWVyIHRvIGNvbm5lY3QgdGhlIHRleG1hcCBsYXllciB0byB0aGUgcGxh
dGZvcm0gc3BlY2lmaWMgY29udGFpbmVyLgorY2xhc3MgVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQoKSB7fQor
ICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHNldFNpemVDaGFuZ2VkKGNvbnN0IEludFNpemUmKSA9IDA7Cit9OworCitjbGFz
cyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciB7CitwdWJsaWM6CisgICAgZW51bSBUeXBlIHsK
KyAgICAgICAgQ29udGVudExheWVyLAorICAgICAgICBWaWRlb0xheWVyCisgICAgfTsKKworICAg
IHZpcnR1YWwgVHlwZSBsYXllclR5cGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB+VGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXIoKSB7fQorfTsKKworY2xhc3MgVGV4dHVyZU1hcHBlckNvbnRl
bnRMYXllciA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB2b2lkIHNldFBsYXRmb3JtTGF5ZXJDbGllbnQoVGV4dHVyZU1hcHBlckxheWVy
Q2xpZW50KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UmVjdCYg
ZXhwb3NlZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0
IG9wYWNpdHkpIHt9CisgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGNsZWFudXBUZXh0dXJlTWFwcGVyKCkge30KKyAgICB2aXJ0dWFsIFR5cGUg
bGF5ZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gQ29udGVudExheWVyOyB9Cit9OworCisjaWYgRU5B
QkxFKFZJREVPKQorY2xhc3MgVGV4dHVyZU1hcHBlclZpZGVvTGF5ZXIgOiBwdWJsaWMgVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBwYWludChH
cmFwaGljc0NvbnRleHQqKSA9IDA7CisgICAgdmlydHVhbCBUeXBlIGxheWVyVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIFZpZGVvTGF5ZXI7IH0KK307CisjZW5kaWYKKworfQorCisjZW5kaWYgLy8gVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJfaApkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xZ3Jh
cGhpY3N3ZWJ2aWV3LmNwcCBiL1dlYktpdC9xdC9BcGkvcWdyYXBoaWNzd2Vidmlldy5jcHAKaW5k
ZXggYmNlMGI2MWJiMjU5ZjMzMDM3OWVkYTBmMjE5Yzg1Njk3MjAxNzc5Ni4uYzQzOTI5NDJlMWI0
ODJhNTk0NjI3MGY0YTA2OTAwZWM3MTVhOGIyZSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0FwaS9x
Z3JhcGhpY3N3ZWJ2aWV3LmNwcAorKysgYi9XZWJLaXQvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcu
Y3BwCkBAIC0yNDcsNiArMjQ3LDcgQEAgUUdyYXBoaWNzV2ViVmlldzo6UUdyYXBoaWNzV2ViVmll
dyhRR3JhcGhpY3NJdGVtKiBwYXJlbnQpCiAgICAgc2V0QWNjZXB0VG91Y2hFdmVudHModHJ1ZSk7
CiAgICAgc2V0Rm9jdXNQb2xpY3koUXQ6OlN0cm9uZ0ZvY3VzKTsKICAgICBzZXRGbGFnKFFHcmFw
aGljc0l0ZW06Okl0ZW1DbGlwc0NoaWxkcmVuVG9TaGFwZSwgdHJ1ZSk7CisgICAgU2V0dGluZ3M6
OnNldEFuaW1hdGlvblRpbWVyRGVsYXkoMC4wMTY3KTsKICNpZiBFTkFCTEUoVElMRURfQkFDS0lO
R19TVE9SRSkKICAgICBRT2JqZWN0Ojpjb25uZWN0KHRoaXMsIFNJR05BTChzY2FsZUNoYW5nZWQo
KSksIHRoaXMsIFNMT1QoX3Ffc2NhbGVDaGFuZ2VkKCkpKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
V2ViS2l0L3F0L0NoYW5nZUxvZyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggYjdjZTg5Y2Rm
MDU3YjJhMjE2MGExM2Y1ZWVjMjZiYzU5YjdmZTkwNi4uMzQ4ZWZlMGYzY2JiNmUzODA1MjY1MjUz
MWEyYTRiYjJlNThjOGRkOCAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMTAtMDMgIE5vJ2FtIFJv
c2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbGxvdyBDU1MgYW5pbWF0aW9ucyB0byBydW4g
YXQgbW9yZSB0aGFuIDQwRlBTCisKKyAgICAgICAgTWFrZSB0aGUgYW5pbWF0aW9uIGNvbnRyb2xs
ZXIgcnVuIGF0IDYwIEZQUyB3aGVuIHVzaW5nIGEgUUdyYXBoaWNzV2ViVmlldy4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDYyODMKKworICAgICAg
ICAqIEFwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKFFHcmFwaGljc1dlYlZpZXc6
OlFHcmFwaGljc1dlYlZpZXcpOgorCiAyMDEwLTEwLTAyICBEaWVnbyBHb256YWxleiAgPGRpZWdv
aGNnQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJp
c3RpYW5zZW4uCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69603</attachid>
            <date>2010-10-04 00:25:58 -0700</date>
            <delta_ts>2010-10-04 06:10:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch-47070-1.diff</filename>
            <type>text/plain</type>
            <size>115779</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzJiZjllNy4uNDkxZGU0YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiwxNjUgQEAKIAogICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBbVGV4bWFwXSBbUXRdIFRleHR1cmUgbWFwcGVyIGlu
aXRpYWwgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ3MDcwCisKKyAgICAgICAgTm8gbmV3IHRlc3RzOiBpbml0aWFsIHBhdGNo
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGVidWdHTENvbW1hbmQpOgorICAgICAgICAo
V2ViQ29yZTo6bG9hZFJlY3RUb1NoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0
dXJlR0w6OkJpdG1hcFRleHR1cmVHTCk6CisgICAgICAgIChXZWJDb3JlOjpUZXhtYXBTaGFkZXJJ
bmZvOjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4bWFwU2hhZGVy
SW5mbzo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4bWFwU2hhZGVy
SW5mbzo6Y3JlYXRlU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyR0w6OlRleHR1cmVNYXBwZXJHTCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
R0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6dHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnJlc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6YmVnaW5QYWludCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBUZXh0dXJlR0w6OmVuZFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleG1hcEdM
U2hhZGVyVGV4dHVyZXM6OmZpbmRPckNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXhtYXBH
TFNoYWRlclRleHR1cmVzOjpkZXJlZik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJl
R0w6OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJl
R0w6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjppc1ZhbGlk
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6c2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVQcm9qZWN0aW9uTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJHTDo6Y2xlYW51cCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6
OmJpbmRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6c2V0Q2xp
cCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OnBhaW50VG9UYXJnZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0dXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjp+VGV4dHVyZU1hcHBlckdMKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6YWxsb3dTdXJmYWNlRm9yUm9vdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSR0JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcjo6flJHQkEzMlByZW11
bHRpbXBsaWVkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Om5wb3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNhY2hlOjpFbnRyeTo6RW50cnkp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNhY2hlOjpFbnRyeTo6Y2FsY3VsYXRl
Q29zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ2FjaGU6OkVudHJ5OjpvcGVy
YXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWNoZTo6VGV4dHVyZU1h
cHBlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWNoZTo6cHVyZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNhY2hlOjptYXJrKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWNoZUxvY2s6OlRleHR1cmVNYXBwZXJDYWNoZUxvY2sp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNhY2hlTG9jazo6flRleHR1cmVNYXBw
ZXJDYWNoZUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6Om5vdGlm
eUFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJOb2RlOjpub3RpZnlBbmltYXRpb25TdGFydGVkQXN5bmMpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlck5vZGU6OlRyYW5zZm9ybURhdGE6OlRyYW5zZm9ybURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnREYXRhOjpDb250ZW50RGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6dGFyZ2V0UmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6ZnVsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlck5vZGU6OnJlcGxpY2FSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJOb2RlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpHcmFwaGljc0xheWVyQW5pbWF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpTdGF0ZTo6U3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldE5lZWRzRGlzcGxheUluUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c2V0TmVlZHNEaXNwbGF5
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzZXRQbGF0Zm9ybUxheWVy
Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVHcmFwaGljc0xheWVyc1pWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpzb3J0QnlaT3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlck5vZGU6Omhhc1N1cmZhY2VEZXNjZW5kYW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlck5vZGU6OmNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTm9kZTo6dG9UZXh0dXJlTWFwcGVyTm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZUxheWVyVHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6aW5pdGlhbGl6ZVRleHR1cmVNYXBwZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OlRleHR1cmVNYXBwZXJOb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpyb290TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmludmFsaWRhdGVUcmFuc2Zvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVMb2NhbFRyYW5zZm9ybSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6ZmxhdHRlblRvMkRTcGFjZUlmTmVjZXNz
YXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpuZWFyZXN0U3VyZmFj
ZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVSZXBs
aWNhVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpjb21w
dXRlVHJhbnNmb3JtYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2Rl
OjpiZWdpbkFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6
ZW5kQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjp1cGxv
YWRUZXh0dXJlRnJvbUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5v
ZGU6OnBhaW50U2VsZik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6cGFp
bnRSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNsZWFu
dXBUZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjp+
VGV4dHVyZU1hcHBlck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6
OnNldFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c2V0
T3BhY2l0eUZyb21BbmltYXRpb25GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyTm9kZTo6bm90aWZ5VHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6bm90aWZ5T3BhY2l0eUFuaW1hdGlvblJ1bm5pbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6Om5vdGlmeUFuaW1hdGlvblN0YXJ0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldFRyYW5zZm9ybUZy
b21BbmltYXRpb25GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6
bm90aWZ5Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpwZXJm
b3JtUG9zdFN5bmNPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJO
b2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcjo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6On5HcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6
c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OnNldFBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRDaGlsZEF0SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkQWJvdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkQmVsb3cp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnJlcGxhY2VD
aGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cmVt
b3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6c2V0TWFza0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldEFuY2hvclBvaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRUcmFuc2Zvcm0pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENoaWxkcmVuVHJhbnNm
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRQ
cmVzZXJ2ZXMzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cjo6c2V0TWFza3NUb0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcjo6c2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmNsZWFyQmFja2dyb3VuZENvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c09w
YXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0
QmFja2ZhY2VWaXNpYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyOjpzZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNCYWNrZ3JvdW5kQ29s
b3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENv
bnRlbnRzVG9NZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6c2V0Q29udGVudHNPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcjo6c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzeW5jQ29t
cG9zaXRpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6bmF0aXZlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6OnBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
cjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcjo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcFRleHR1cmU6OkJpdG1hcFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4
dHVyZTo6fkJpdG1hcFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6
YWxsb3dPZmZsaW5lVGV4dHVyZVVwbG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0
dXJlOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjpiZWdpblBhaW50
TWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6c2F2ZSk6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjpsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cFRleHR1cmU6OnVubG9jayk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjppc0xv
Y2tlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjpjb250ZW50U2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjpzZXRPZmZzZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwVGV4dHVyZTo6b2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXI6On5UZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6
OnBhaW50VG9UYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6Y2xlYW51
cCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpncmFwaGljc0NvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6VGV4dHVyZU1hcHBlcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyQ2xpZW50Ojp+VGV4
dHVyZU1hcHBlckxheWVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyOjp+VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6Y2xlYW51cFRleHR1cmVNYXBwZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6bGF5ZXJUeXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJWaWRlb0xheWVyOjpsYXllclR5cGUpOgorCisy
MDEwLTEwLTAzICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAgQWxsb3cgQ1NT
IGFuaW1hdGlvbnMgdG8gcnVuIGF0IG1vcmUgdGhhbiA0MEZQUwogICAgICAgICBBZGQgYSBzZXR0
aW5ncyBmdW5jdGlvbiAoc2V0QW5pbWF0aW9uVGltZXJEZWxheSkgdGhhdCBhZmZlY3RzIEFuaW1h
dGlvbkNvbnRyb2xsZXIncyB0aW1lci4gVGhpcyBpcyBpbiBhY2NvcmRhbmNlIHRvCiAgICAgICAg
IGhvdyB0aGUgRE9NVGltZXIgbWluaW11bSBpbnRlcnZhbCBzZXR0aW5ncyB3ZXJlIGRvbmUgaW4g
YnVnIDQ1MzYyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
VGV4dHVyZU1hcHBlckdMLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1Rl
eHR1cmVNYXBwZXJHTC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA5
YWFjNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTAsMCArMSw2NTEgQEAKKy8qCisgQ29weXJpZ2h0IChD
KSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4
dHVyZU1hcHBlckdMLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJIYXNoTWFwLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJQYXNzUmVmUHRyLmgi
CisjaW5jbHVkZSAiUmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisKKyNpbmNsdWRl
IDxzdGRpby5oPgorI2lmIGRlZmluZWQoVEVYTUFQX09QRU5HTF9FU18yKQorI2luY2x1ZGUgPEdM
RVMyL2dsMi5oPgorI2VsaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgPGdsLmg+CisjZWxzZQor
I2luY2x1ZGUgPEdML2dsLmg+CisjZW5kaWYKKworI2lmbmRlZiBURVhNQVBfT1BFTkdMX0VTMgor
ZXh0ZXJuICJDIiB7CisgICAgdm9pZCBnbFVuaWZvcm0xZihHTGludCwgR0xmbG9hdCk7CisgICAg
dm9pZCBnbFVuaWZvcm0xaShHTGludCwgR0xpbnQpOworICAgIHZvaWQgZ2xWZXJ0ZXhBdHRyaWJQ
b2ludGVyKEdMdWludCwgR0xpbnQsIEdMZW51bSwgR0xib29sZWFuLCBHTHNpemVpLCBjb25zdCBH
THZvaWQgKik7CisgICAgdm9pZCBnbFVuaWZvcm00ZihHTGludCwgR0xmbG9hdCwgR0xmbG9hdCwg
R0xmbG9hdCwgR0xmbG9hdCk7CisgICAgdm9pZCBnbFNoYWRlclNvdXJjZShHTHVpbnQsIEdMc2l6
ZWksIGNvbnN0IGNoYXIgKiosIGNvbnN0IEdMaW50ICopOworICAgIEdMdWludCBnbENyZWF0ZVNo
YWRlcihHTGVudW0pOworICAgIHZvaWQgZ2xTaGFkZXJTb3VyY2UoR0x1aW50LCBHTHNpemVpLCBj
b25zdCBjaGFyICoqLCBjb25zdCBHTGludCAqKTsKKyAgICB2b2lkIGdsQ29tcGlsZVNoYWRlcihH
THVpbnQpOworICAgIHZvaWQgZ2xEZWxldGVTaGFkZXIoR0x1aW50KTsKKyAgICB2b2lkIGdsVW5p
Zm9ybU1hdHJpeDRmdihHTGludCwgR0xzaXplaSwgR0xib29sZWFuLCBjb25zdCBHTGZsb2F0ICop
OworICAgIEdMdWludCBnbENyZWF0ZVByb2dyYW0oKTsKKyAgICB2b2lkIGdsQXR0YWNoU2hhZGVy
KEdMdWludCwgR0x1aW50KTsKKyAgICB2b2lkIGdsTGlua1Byb2dyYW0oR0x1aW50KTsKKyAgICB2
b2lkIGdsVXNlUHJvZ3JhbShHTHVpbnQpOworICAgIHZvaWQgZ2xEaXNhYmxlVmVydGV4QXR0cmli
QXJyYXkoR0x1aW50KTsKKyAgICB2b2lkIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0x1aW50
KTsKKyAgICB2b2lkIGdsQmluZEZyYW1lYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMdWludCBmcmFt
ZWJ1ZmZlcik7CisgICAgdm9pZCBnbERlbGV0ZUZyYW1lYnVmZmVycyhHTHNpemVpIG4sIGNvbnN0
IEdMdWludCAqZnJhbWVidWZmZXJzKTsKKyAgICB2b2lkIGdsR2VuRnJhbWVidWZmZXJzKEdMc2l6
ZWkgbiwgR0x1aW50ICpmcmFtZWJ1ZmZlcnMpOworICAgIHZvaWQgZ2xGcmFtZWJ1ZmZlclRleHR1
cmUyRChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHRleHRhcmdldCwg
R0x1aW50IHRleHR1cmUsIEdMaW50IGxldmVsKTsKKyAgICB2b2lkIGdsR2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyaXYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdM
ZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7CisgICAgdm9pZCBnbEJpbmRCdWZmZXIoR0xlbnVt
LCBHTHVpbnQpOworICAgIHZvaWQgZ2xEZWxldGVCdWZmZXJzKEdMc2l6ZWksIGNvbnN0IEdMdWlu
dCopOworICAgIHZvaWQgZ2xHZW5CdWZmZXJzKEdMc2l6ZWksIEdMdWludCopOworICAgIHZvaWQg
Z2xCdWZmZXJEYXRhKEdMZW51bSwgR0xzaXplaXB0ciwgY29uc3QgR0x2b2lkKiwgR0xlbnVtKTsK
KyAgICB2b2lkIGdsQnVmZmVyU3ViRGF0YShHTGVudW0sIEdMc2l6ZWlwdHIsIEdMc2l6ZWlwdHIs
IGNvbnN0IEdMdm9pZCopOworICAgIHZvaWQgZ2xHZXRQcm9ncmFtSW5mb0xvZyhHTHVpbnQgcHJv
Z3JhbSwgR0xzaXplaSwgR0xzaXplaSosIEdMY2hhciopOworCisjaWYgIVBMQVRGT1JNKE1BQykK
KyAgICBHTGludCBnbEdldFVuaWZvcm1Mb2NhdGlvbihHTHVpbnQsIGNvbnN0IEdMY2hhciAqKTsK
KyAgICBHTGludCBnbEdldEF0dHJpYkxvY2F0aW9uKEdMdWludCwgY29uc3QgR0xjaGFyICopOwor
I2VuZGlmCit9CisjZW5kaWYKKworCituYW1lc3BhY2UgV1RGIHsKKworLy8gU3RyaW5nSGFzaCBp
cyB0aGUgZGVmYXVsdCBoYXNoIGZvciBTdHJpbmcKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6Rmxv
YXRSZWN0PiA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8V2ViQ29yZTo6RmxvYXRSZWN0PiB7Cisg
ICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFdlYkNvcmU6OkZsb2F0UmVjdCYg
c2xvdCkgeyBzbG90ID0gV2ViQ29yZTo6RmxvYXRSZWN0KCk7IH0KKyAgICBzdGF0aWMgYm9vbCBp
c0RlbGV0ZWRWYWx1ZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHZhbHVlKSB7IHJldHVybiB2
YWx1ZSA9PSBXZWJDb3JlOjpGbG9hdFJlY3QoKTsgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
RGVmYXVsdEhhc2g8V2ViQ29yZTo6RmxvYXRSZWN0PiB7CisgICAgc3RydWN0IEhhc2ggeworICAg
ICAgICBzdGF0aWMgaW50IGhhc2goY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0KQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gaW50KHJlY3QueCgpICogMHgxMCkgfCAoaW50KHJl
Y3QueSgpICogMHgxMCkgPDwgNCkgfCAoaW50KHJlY3QuaGVpZ2h0KCkgKiAweDEwMCkgPDwgOCkg
fCAoaW50KHJlY3Qud2lkdGgoKSAqIDB4MTAwKSA8PCAyMCk7CisgICAgICAgIH0KKworICAgICAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGEsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworICAgIH07
Cit9OworCit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworaW5saW5lIHN0YXRpYyB2b2lkIGRl
YnVnR0xDb21tYW5kKGNvbnN0IGNoYXIqIGNvbW1hbmQsIGludCBsaW5lKQoreworICAgIGNvbnN0
IEdMZW51bSBlcnIgPSBnbEdldEVycm9yKCk7CisgICAgaWYgKGVycikKKyAgICAgICAgcUZhdGFs
KCJbVGV4dHVyZU1hcHBlciBHTF0gQ29tbWFuZCBmYWlsZWQ6IExpbmUgJWRcblx0b3BlcmF0aW9u
OiAlcywgXG5cdGVycm9yOiAleFxuIiwgbGluZSwgY29tbWFuZCwgZXJyKTsKK30KKworI2RlZmlu
ZSBERUJVR19HTF9DT01NQU5EUworCisjaWZkZWYgREVCVUdfR0xfQ09NTUFORFMKKyNkZWZpbmUg
R0xfQ01EKHgpIHt4LCBkZWJ1Z0dMQ29tbWFuZCgjeCwgX19MSU5FX18pOyB9CisjZWxzZQorI2Rl
ZmluZSBHTF9DTUQoeCkgeAorI2VuZGlmCisKK3N0cnVjdCBUZXhtYXBHTFZib1JlcG9zaXRvcnkg
eworICAgIHR5cGVkZWYgSGFzaE1hcDxGbG9hdFJlY3QsIEdMdWludD4gVmJvTWFwOworICAgIFZi
b01hcCB2Ym9NYXA7Cit9OworCitzdGF0aWMgVGV4bWFwR0xWYm9SZXBvc2l0b3J5IGdWYm9SZXBv
c2l0b3J5OworCitzdGF0aWMgdm9pZCBsb2FkUmVjdFRvU2hhZGVyKEdMdWludCBpZCwgY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQoreworICAgIEdMdWludCB2Ym87CisgICAgVGV4bWFwR0xWYm9SZXBv
c2l0b3J5OjpWYm9NYXA6Oml0ZXJhdG9yIGl0ID0gZ1Zib1JlcG9zaXRvcnkudmJvTWFwLmZpbmQo
cmVjdCk7CisgICAgaWYgKGl0ID09IGdWYm9SZXBvc2l0b3J5LnZib01hcC5lbmQoKSkgeworICAg
ICAgICBjb25zdCBGbG9hdFF1YWQgcXVhZChyZWN0KTsKKyAgICAgICAgR0xfQ01EKGdsR2VuQnVm
ZmVycygxLCAmdmJvKSkKKyAgICAgICAgR0xfQ01EKGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZG
RVIsIHZibykpCisgICAgICAgIEdMX0NNRChnbEJ1ZmZlckRhdGEoR0xfQVJSQVlfQlVGRkVSLCBz
aXplb2YoRmxvYXRRdWFkKSwgJnF1YWQsIEdMX1NUQVRJQ19EUkFXKSkKKyAgICAgICAgZ1Zib1Jl
cG9zaXRvcnkudmJvTWFwLmFkZChyZWN0LCB2Ym8pOworICAgIH0gZWxzZSB7CisgICAgICAgIHZi
byA9IGl0LT5zZWNvbmQ7CisgICAgICAgIEdMX0NNRChnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVG
RkVSLCB2Ym8pKQorICAgIH0KKyAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKGlkLCAy
LCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIDApKQorfQorCitjbGFzcyBCaXRtYXBUZXh0dXJlR0wg
OiBwdWJsaWMgQml0bWFwVGV4dHVyZSB7CisgICAgZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJH
TDsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOworICAgIHZpcnR1YWwgSW50
U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVzZXQoY29uc3QgSW50U2l6ZSYsIGJvb2wgb3BhcXVlKTsKKyAgICB2
aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3Qm
IGRpcnR5UmVjdCk7CisgICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCk7CisgICAgdmlydHVhbCB2
b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOworcHJpdmF0ZToKKyAgICBHTHVpbnQgbV9p
ZDsKKyAgICBOYXRpdmVJbWFnZVB0ciBtX2ltYWdlOworICAgIEZsb2F0U2l6ZSBtX3JlbGF0aXZl
U2l6ZTsKKyAgICBib29sIG1fb3BhcXVlOworICAgIEludFNpemUgbV90ZXh0dXJlU2l6ZTsKKyAg
ICBSZWZQdHI8UkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI+IG1fYnVmZmVyOworICAgIEludFJl
Y3QgbV9kaXJ0eVJlY3Q7CisgICAgRmxvYXRSZWN0IG1fc291cmNlUmVjdDsKKyAgICBHTHVpbnQg
bV9mYm87CisgICAgSW50U2l6ZSBtX2FjdHVhbFNpemU7CisgICAgYm9vbCBtX3N1cmZhY2VOZWVk
c1Jlc2V0OworICAgIEJpdG1hcFRleHR1cmVHTCgpCisgICAgICAgIDogbV9pZCgwKQorICAgICAg
ICAsIG1faW1hZ2UoMCkKKyAgICAgICAgLCBtX29wYXF1ZShmYWxzZSkKKyAgICAgICAgLCBtX2Zi
bygwKQorICAgICAgICAsIG1fc3VyZmFjZU5lZWRzUmVzZXQodHJ1ZSkKKyAgICB7CisgICAgfQor
fTsKKworc3RhdGljIHN0cnVjdCBUZXhtYXBTaGFkZXJJbmZvIHsKKyAgICBlbnVtIFNoYWRlclBy
b2dyYW1JbmRleCB7CisgICAgICAgIFNpbXBsZVByb2dyYW0sCisgICAgICAgIE9wYWNpdHlQcm9n
cmFtLAorICAgICAgICBPcGFjaXR5QW5kTWFza1Byb2dyYW0sCisgICAgICAgIFRhcmdldFByb2dy
YW0sCisgICAgICAgIE51bVByb2dyYW1zCisgICAgfTsKKworICAgIGVudW0gU2hhZGVyVmFyaWFi
bGVJbmRleCB7CisgICAgICAgIEluTWF0cml4VmFyaWFibGUsCisgICAgICAgIEluVGV4Q29vcmRT
b3VyY2VWYXJpYWJsZSwKKyAgICAgICAgSW5WZXJ0ZXhWYXJpYWJsZSwKKyAgICAgICAgSW5UZXhD
b29yZE1hc2tWYXJpYWJsZSwKKworICAgICAgICBPcGFjaXR5VmFyaWFibGUsCisgICAgICAgIFNv
dXJjZVRleHR1cmVWYXJpYWJsZSwKKyAgICAgICAgTWFza1RleHR1cmVWYXJpYWJsZSwKKyAgICAg
ICAgTnVtVmFyaWFibGVzCisgICAgfTsKKworICAgIHN0cnVjdCBQcm9ncmFtSW5mbyB7CisgICAg
ICAgIEdMdWludCBpZDsKKyAgICAgICAgR0xpbnQgdmFyc1tOdW1WYXJpYWJsZXNdOworICAgIH07
CisKKyAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oU2hhZGVyUHJvZ3JhbUluZGV4IHByb2cs
IFNoYWRlclZhcmlhYmxlSW5kZXggdmFyLCBjb25zdCBjaGFyKiBuYW1lKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHByb2dyYW1zW3Byb2ddLnZhcnNbdmFyXSA9IGdsR2V0VW5pZm9ybUxvY2F0aW9u
KHByb2dyYW1zW3Byb2ddLmlkLCBuYW1lKTsKKyAgICB9CisKKyAgICBHTGludCBnZXRBdHRyaWJM
b2NhdGlvbihTaGFkZXJQcm9ncmFtSW5kZXggcHJvZywgU2hhZGVyVmFyaWFibGVJbmRleCB2YXIs
IGNvbnN0IGNoYXIqIG5hbWUpCisgICAgeworICAgICAgICByZXR1cm4gcHJvZ3JhbXNbcHJvZ10u
dmFyc1t2YXJdID0gZ2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtc1twcm9nXS5pZCwgbmFtZSk7
CisgICAgfQorCisgICAgdm9pZCBjcmVhdGVTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRl
eFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UsIFNoYWRlclBy
b2dyYW1JbmRleCBpbmRleCkKKyAgICB7CisgICAgICAgIEdMdWludCB2ZXJ0ZXhTaGFkZXIgPSBn
bENyZWF0ZVNoYWRlcihHTF9WRVJURVhfU0hBREVSKTsKKyAgICAgICAgR0x1aW50IGZyYWdtZW50
U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKKyAgICAgICAgR0xf
Q01EKGdsU2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgMSwgJnZlcnRleFNoYWRlclNvdXJjZSwg
MCkpCisgICAgICAgIEdMX0NNRChnbFNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgMSwgJmZy
YWdtZW50U2hhZGVyU291cmNlLCAwKSkKKyAgICAgICAgR0x1aW50IHByb2dyYW1JRCA9IGdsQ3Jl
YXRlUHJvZ3JhbSgpOworICAgICAgICBHTF9DTUQoZ2xDb21waWxlU2hhZGVyKHZlcnRleFNoYWRl
cikpCisgICAgICAgIEdMX0NNRChnbENvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpKQorICAg
ICAgICBHTF9DTUQoZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2ZXJ0ZXhTaGFkZXIpKQorICAg
ICAgICBHTF9DTUQoZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNoYWRlcikpCisg
ICAgICAgIEdMX0NNRChnbExpbmtQcm9ncmFtKHByb2dyYW1JRCkpCisgICAgICAgIHByb2dyYW1z
W2luZGV4XS5pZCA9IHByb2dyYW1JRDsKKyAgICAgICAgY2hhciBpbmZvTG9nWzEwMjRdOworICAg
ICAgICBpbnQgbGVuOworICAgICAgICBnbEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW1JRCwgMTAy
NCwgJmxlbiwgaW5mb0xvZyk7CisgICAgICAgIHByaW50ZigiJXNcbiIsIGluZm9Mb2cpOworICAg
IH0KKworICAgIFByb2dyYW1JbmZvIHByb2dyYW1zW051bVByb2dyYW1zXTsKKworfSBnU2hhZGVy
SW5mbzsKKworI2RlZmluZSBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04odHlwZSwgcHJv
ZywgdmFyKSBpZiAoZ1NoYWRlckluZm8uZ2V0IyN0eXBlIyNMb2NhdGlvbihUZXhtYXBTaGFkZXJJ
bmZvOjpwcm9nIyNQcm9ncmFtLCBUZXhtYXBTaGFkZXJJbmZvOjp2YXIjI1ZhcmlhYmxlLCAjdmFy
KSA8IDApIHFXYXJuaW5nKCJDb3VsZG4ndCBmaW5kIHZhcmlhYmxlICIjdmFyIiBpbiBwcm9ncmFt
ICIjcHJvZyk7CisjZGVmaW5lIFRFWE1BUF9CVUlMRF9TSEFERVIocHJvZ3JhbSkgZ1NoYWRlcklu
Zm8uY3JlYXRlU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3VyY2UjI3Byb2dyYW0sIGZyYWdt
ZW50U2hhZGVyU291cmNlIyNwcm9ncmFtLCBUZXhtYXBTaGFkZXJJbmZvOjpwcm9ncmFtIyNQcm9n
cmFtKTsKKworVGV4dHVyZU1hcHBlckdMOjpUZXh0dXJlTWFwcGVyR0woR3JhcGhpY3NDb250ZXh0
KiBnYykKKyAgICA6IFRleHR1cmVNYXBwZXIoZ2MpCisgICAgLCBtX2N1clByb2dyYW0oVGV4bWFw
U2hhZGVySW5mbzo6VGFyZ2V0UHJvZ3JhbSkKK3sKKyAgICBzdGF0aWMgYm9vbCBzaGFkZXJzQ29t
cGlsZWQgPSBmYWxzZTsKKyAgICBpZiAoc2hhZGVyc0NvbXBpbGVkKQorICAgICAgICByZXR1cm47
CisgICAgc2hhZGVyc0NvbXBpbGVkID0gdHJ1ZTsKKyNpZm5kZWYgVEVYTUFQX09QRU5HTF9FUzIK
KyNkZWZpbmUgT0VTMl9QRVJDSVNJT05fREVGSU5JVElPTlMgXAorICAgICIjZGVmaW5lIGxvd3Bc
biNkZWZpbmUgaGlnaHBcbiIKKyNlbHNlCisjZGVmaW5lIE9FUzJfUEVSQ0lTSU9OX0RFRklOSVRJ
T05TCisjZW5kaWYKKworICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlT3BhY2l0
eUFuZE1hc2sgPQorICAgICAgICAgICAgT0VTMl9QRVJDSVNJT05fREVGSU5JVElPTlMKKyIgICAg
ICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBTb3VyY2VUZXh0dXJlLCBNYXNrVGV4dHVyZTsg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHVuaWZvcm0gbG93cCBm
bG9hdCBPcGFjaXR5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4i
CisiICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIE91dFRleENvb3JkU291cmNlLCBP
dXRUZXhDb29yZE1hc2s7ICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB2b2lkIG1h
aW4odm9pZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFxuIgorIiAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAg
ICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRChTb3VyY2VUZXh0dXJlLCBPdXRUZXhDb29y
ZFNvdXJjZSk7ICBcbiIKKyIgICAgICAgICAgICAgICAgICAgbG93cCB2ZWM0IG1hc2tDb2xvciA9
IHRleHR1cmUyRChNYXNrVGV4dHVyZSwgT3V0VGV4Q29vcmRNYXNrKTsgIFxuIgorIiAgICAgICAg
ICAgICAgICAgICBsb3dwIGZsb2F0IG8gPSBPcGFjaXR5ICogbWFza0NvbG9yLmE7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9
IHZlYzQoY29sb3IucmdiICogbywgY29sb3IuYSAqIG8pOyAgICAgICAgICAgICAgICBcbiIKKyIg
ICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXG4iOworCisgICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVy
U291cmNlT3BhY2l0eUFuZE1hc2sgPQorICAgICAgICAgICAgT0VTMl9QRVJDSVNJT05fREVGSU5J
VElPTlMKKyIgICAgICAgICAgICAgICB1bmlmb3JtIG1hdDQgSW5NYXRyaXg7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICBhdHRyaWJ1dGUg
dmVjNCBJblRleENvb3JkU291cmNlLCBJblRleENvb3JkTWFzaywgSW5WZXJ0ZXg7ICAgICAgXG4i
CisiICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIE91dFRleENvb3JkU291cmNlLCBP
dXRUZXhDb29yZE1hc2s7ICAgICAgXG4iCisiICAgICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAg
ICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgIE91dFRleENvb3JkU291cmNlID0g
dmVjMihJblRleENvb3JkU291cmNlKTsgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAg
ICAgICAgT3V0VGV4Q29vcmRNYXNrID0gdmVjMihJblRleENvb3JkTWFzayk7ICAgICAgICAgICAg
ICAgICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IEluTWF0cml4ICog
SW5WZXJ0ZXg7ICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxu
IjsKKworICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlT3BhY2l0eSA9CisgICAg
ICAgICAgICBPRVMyX1BFUkNJU0lPTl9ERUZJTklUSU9OUworIiAgICAgICAgICAgICAgIHVuaWZv
cm0gc2FtcGxlcjJEIFNvdXJjZVRleHR1cmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXG4iCisiICAgICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IE9wYWNpdHk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAg
ICB2YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0VGV4Q29vcmRTb3VyY2U7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAg
ICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICAgICAgbG93cCB2ZWM0IGNv
bG9yID0gdGV4dHVyZTJEKFNvdXJjZVRleHR1cmUsIE91dFRleENvb3JkU291cmNlKTsgIFxuIgor
IiAgICAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIE9wYWNp
dHksIGNvbG9yLmEgKiBPcGFjaXR5KTsgICAgXG4iCisiICAgICAgICAgICAgICAgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcbiI7CisKKyAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5ID0KKyAg
ICAgICAgICAgIE9FUzJfUEVSQ0lTSU9OX0RFRklOSVRJT05TCisiICAgICAgICAgICAgICAgdW5p
Zm9ybSBtYXQ0IEluTWF0cml4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IEluVGV4Q29vcmRTb3VyY2UsIEluVmVydGV4OyAg
ICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiBPdXRUZXhD
b29yZFNvdXJjZTsgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB2b2lkIG1haW4o
dm9pZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAg
ICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFxuIgorIiAgICAgICAgICAgICAgICAgICBPdXRUZXhDb29yZFNvdXJjZSA9IHZlYzIoSW5UZXhD
b29yZFNvdXJjZSk7ICAgICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9
IEluTWF0cml4ICogSW5WZXJ0ZXg7ICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOwor
CisgICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUgPQorICAgICAgICAg
ICAgT0VTMl9QRVJDSVNJT05fREVGSU5JVElPTlMKKyIgICAgICAgICAgICAgICB1bmlmb3JtIHNh
bXBsZXIyRCBTb3VyY2VUZXh0dXJlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcbiIKKyIgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0VGV4Q29vcmRT
b3VyY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAg
ICAgICB2b2lkIG1haW4odm9pZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
biIKKyIgICAgICAgICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKFNvdXJj
ZVRleHR1cmUsIE91dFRleENvb3JkU291cmNlKTsgICAgICBcbiIKKyIgICAgICAgICAgICAgICAg
ICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CisK
KyAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUgPSB2ZXJ0ZXhTaGFkZXJT
b3VyY2VPcGFjaXR5OworCisgICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VUYXJn
ZXQgPQorICAgICAgICAgICAgT0VTMl9QRVJDSVNJT05fREVGSU5JVElPTlMKKyIgICAgICAgICAg
ICAgICB1bmlmb3JtIHNhbXBsZXIyRCBTb3VyY2VUZXh0dXJlOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgdW5pZm9ybSBsb3dw
IGZsb2F0IE9wYWNpdHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiBPdXRUZXhDb29y
ZFNvdXJjZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAg
ICAgICAgICAgICB2b2lkIG1haW4odm9pZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0
ZXh0dXJlMkQoU291cmNlVGV4dHVyZSwgT3V0VGV4Q29vcmRTb3VyY2UpOyAgICAgICAgICBcbiIK
KyIgICAgICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5iZ3IgKiBPcGFj
aXR5LCBjb2xvci5hICogT3BhY2l0eSk7ICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFxuIjsKKworICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNv
dXJjZVRhcmdldCA9CisgICAgICAgICAgICBPRVMyX1BFUkNJU0lPTl9ERUZJTklUSU9OUworIiAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IEluVGV4Q29vcmRTb3VyY2UsIEluVmVydGV4OyAg
ICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiBPdXRUZXhD
b29yZFNvdXJjZTsgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB2b2lkIG1haW4o
dm9pZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAg
ICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFxuIgorIiAgICAgICAgICAgICAgICAgICBPdXRUZXhDb29yZFNvdXJjZSA9IHZlYzIoSW5UZXhD
b29yZFNvdXJjZSk7ICAgICBcbiIKKyIgICAgICAgICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSBJ
blZlcnRleDsgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKwor
ICAgIFRFWE1BUF9CVUlMRF9TSEFERVIoU2ltcGxlKQorICAgIFRFWE1BUF9CVUlMRF9TSEFERVIo
T3BhY2l0eSkKKyAgICBURVhNQVBfQlVJTERfU0hBREVSKE9wYWNpdHlBbmRNYXNrKQorICAgIFRF
WE1BUF9CVUlMRF9TSEFERVIoVGFyZ2V0KQorCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xP
Q0FUSU9OKEF0dHJpYiwgT3BhY2l0eUFuZE1hc2ssIEluVmVydGV4KQorICAgIFRFWE1BUF9HRVRf
U0hBREVSX1ZBUl9MT0NBVElPTihBdHRyaWIsIE9wYWNpdHlBbmRNYXNrLCBJblRleENvb3JkU291
cmNlKQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihBdHRyaWIsIE9wYWNpdHlB
bmRNYXNrLCBJblRleENvb3JkTWFzaykKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJ
T04oVW5pZm9ybSwgT3BhY2l0eUFuZE1hc2ssIEluTWF0cml4KQorICAgIFRFWE1BUF9HRVRfU0hB
REVSX1ZBUl9MT0NBVElPTihVbmlmb3JtLCBPcGFjaXR5QW5kTWFzaywgU291cmNlVGV4dHVyZSkK
KyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oVW5pZm9ybSwgT3BhY2l0eUFuZE1h
c2ssIE1hc2tUZXh0dXJlKQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihVbmlm
b3JtLCBPcGFjaXR5QW5kTWFzaywgT3BhY2l0eSkKKworICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZB
Ul9MT0NBVElPTihBdHRyaWIsIE9wYWNpdHksIEluVmVydGV4KQorICAgIFRFWE1BUF9HRVRfU0hB
REVSX1ZBUl9MT0NBVElPTihBdHRyaWIsIE9wYWNpdHksIEluVGV4Q29vcmRTb3VyY2UpCisgICAg
VEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKFVuaWZvcm0sIE9wYWNpdHksIEluTWF0cml4
KQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihVbmlmb3JtLCBPcGFjaXR5LCBT
b3VyY2VUZXh0dXJlKQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihVbmlmb3Jt
LCBPcGFjaXR5LCBPcGFjaXR5KQorCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9O
KEF0dHJpYiwgU2ltcGxlLCBJblZlcnRleCkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9D
QVRJT04oQXR0cmliLCBTaW1wbGUsIEluVGV4Q29vcmRTb3VyY2UpCisgICAgVEVYTUFQX0dFVF9T
SEFERVJfVkFSX0xPQ0FUSU9OKFVuaWZvcm0sIFNpbXBsZSwgSW5NYXRyaXgpCisgICAgVEVYTUFQ
X0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKFVuaWZvcm0sIFNpbXBsZSwgU291cmNlVGV4dHVyZSkK
KworICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihBdHRyaWIsIFRhcmdldCwgSW5U
ZXhDb29yZFNvdXJjZSkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oQXR0cmli
LCBUYXJnZXQsIEluVmVydGV4KQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihV
bmlmb3JtLCBUYXJnZXQsIFNvdXJjZVRleHR1cmUpCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFS
X0xPQ0FUSU9OKFVuaWZvcm0sIFRhcmdldCwgT3BhY2l0eSkKK30KKwordm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IElu
dFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtdk1hdHJpeCwg
ZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCit7CisgICAg
Y29uc3QgQml0bWFwVGV4dHVyZUdMJiB0ZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRt
YXBUZXh0dXJlR0wmPih0ZXh0dXJlKTsKKyAgICBpZiAoIXRleHR1cmUuaXNWYWxpZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBUZXhtYXBTaGFkZXJJbmZvOjpTaGFkZXJQcm9ncmFtSW5kZXgg
cHJvZ3JhbTsKKyAgICBpZiAobWFza1RleHR1cmUpCisgICAgICAgIHByb2dyYW0gPSBUZXhtYXBT
aGFkZXJJbmZvOjpPcGFjaXR5QW5kTWFza1Byb2dyYW07CisgICAgZWxzZSBpZiAob3BhY2l0eSA8
IDAuOTkpCisgICAgICAgIHByb2dyYW0gPSBUZXhtYXBTaGFkZXJJbmZvOjpPcGFjaXR5UHJvZ3Jh
bTsKKyAgICBlbHNlCisgICAgICAgIHByb2dyYW0gPSBUZXhtYXBTaGFkZXJJbmZvOjpTaW1wbGVQ
cm9ncmFtOworICAgIGNvbnN0IFRleG1hcFNoYWRlckluZm86OlByb2dyYW1JbmZvJiBwcm9ncmFt
SW5mbyA9IGdTaGFkZXJJbmZvLnByb2dyYW1zW3Byb2dyYW1dOworICAgIGlmIChtX2N1clByb2dy
YW0gIT0gcHJvZ3JhbSkgeworICAgICAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHByb2dyYW1JbmZv
LmlkKSkKKyAgICAgICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGdTaGFkZXJJ
bmZvLnByb2dyYW1zW21fY3VyUHJvZ3JhbV0udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblRleENv
b3JkU291cmNlVmFyaWFibGVdKSkKKyAgICAgICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KGdTaGFkZXJJbmZvLnByb2dyYW1zW21fY3VyUHJvZ3JhbV0udmFyc1tUZXhtYXBTaGFk
ZXJJbmZvOjpJblZlcnRleFZhcmlhYmxlXSkpCisgICAgICAgIG1fY3VyUHJvZ3JhbSA9IHByb2dy
YW07CisgICAgICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW1JbmZv
LnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5UZXhDb29yZFNvdXJjZVZhcmlhYmxlXSkpCisgICAg
ICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW1JbmZvLnZhcnNbVGV4
bWFwU2hhZGVySW5mbzo6SW5WZXJ0ZXhWYXJpYWJsZV0pKQorICAgIH0KKworICAgIEdMX0NNRChn
bERpc2FibGUoR0xfREVQVEhfVEVTVCkpCisgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9TVEVOQ0lM
X1RFU1QpKQorCisgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpCisgICAg
R0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4dHVyZUdMLm1faWQpKQorICAg
IGxvYWRSZWN0VG9TaGFkZXIocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblZl
cnRleFZhcmlhYmxlXSwgdGFyZ2V0UmVjdCk7CisgICAgbG9hZFJlY3RUb1NoYWRlcihwcm9ncmFt
SW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OkluVGV4Q29vcmRTb3VyY2VWYXJpYWJsZV0sIHRl
eHR1cmVHTC5tX3NvdXJjZVJlY3QpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9
IFRyYW5zZm9ybWF0aW9uTWF0cml4KG1fcHJvamVjdGlvbk1hdHJpeCkubXVsdExlZnQobXZNYXRy
aXgpOworICAgIGNvbnN0IEdMZmxvYXQgbTRbXSA9IHsKKyAgICAgICAgbWF0cml4Lm0xMSgpLCBt
YXRyaXgubTEyKCksIG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAorICAgICAgICBtYXRyaXgu
bTIxKCksIG1hdHJpeC5tMjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCisgICAgICAg
IG1hdHJpeC5tMzEoKSwgbWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQoKSwK
KyAgICAgICAgbWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0cml4
Lm00NCgpCisgICAgfTsKKyAgICBnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tU
ZXhtYXBTaGFkZXJJbmZvOjpJbk1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00KTsKKyAg
ICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpT
b3VyY2VUZXh0dXJlVmFyaWFibGVdLCAwKSkKKworICAgIGlmIChtYXNrVGV4dHVyZSAmJiBtYXNr
VGV4dHVyZS0+aXNWYWxpZCgpKSB7CisgICAgICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCogbWFz
a1RleHR1cmVHTCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCo+KG1hc2tUZXh0
dXJlKTsKKyAgICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMSkpCisgICAg
ICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1hc2tUZXh0dXJlR0wtPm1f
aWQpKQorICAgICAgICBsb2FkUmVjdFRvU2hhZGVyKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hh
ZGVySW5mbzo6SW5UZXhDb29yZE1hc2tWYXJpYWJsZV0sIG1hc2tUZXh0dXJlR0wtPm1fc291cmNl
UmVjdCk7CisgICAgICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW1J
bmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5UZXhDb29yZE1hc2tWYXJpYWJsZV0pKQorICAg
ICAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZv
OjpNYXNrVGV4dHVyZVZhcmlhYmxlXSwgMSkpCisgICAgICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1
cmUoR0xfVEVYVFVSRTApKQorICAgIH0KKworICAgIGlmIChwcm9ncmFtICE9IFRleG1hcFNoYWRl
ckluZm86OlNpbXBsZVByb2dyYW0pCisgICAgICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9ncmFt
SW5mby52YXJzW1RleG1hcFNoYWRlckluZm86Ok9wYWNpdHlWYXJpYWJsZV0sIG9wYWNpdHkpKQor
CisgICAgaWYgKHRleHR1cmVHTC5tX29wYXF1ZSAmJiBvcGFjaXR5ID4gMC45OSAmJiAhbWFza1Rl
eHR1cmUpCisgICAgICAgIEdMX0NNRChnbERpc2FibGUoR0xfQkxFTkQpKQorICAgIGVsc2Ugewor
ICAgICAgICBHTF9DTUQoZ2xCbGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhB
KSkKKyAgICAgICAgR0xfQ01EKGdsRW5hYmxlKEdMX0JMRU5EKSkKKyAgICB9CisKKyAgICBHTF9D
TUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpCit9CisKKworY29uc3QgY2hh
ciogVGV4dHVyZU1hcHBlckdMOjp0eXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIk9wZW5HTCI7
Cit9CisKK3ZvaWQgQml0bWFwVGV4dHVyZUdMOjpyZXNldChjb25zdCBJbnRTaXplJiBuZXdTaXpl
LCBib29sIG9wYXF1ZSkKK3sKKyAgICBCaXRtYXBUZXh0dXJlOjpyZXNldChuZXdTaXplLCBvcGFx
dWUpOworICAgIG1faW1hZ2UgPSAwOworICAgIEludFNpemUgbmV3VGV4dHVyZVNpemUgPSBucG90
KG5ld1NpemUpOworICAgIGJvb2wganVzdENyZWF0ZWQgPSBmYWxzZTsKKyAgICBpZiAoIW1faWQp
IHsKKyAgICAgICAgR0xfQ01EKGdsR2VuVGV4dHVyZXMoMSwgJm1faWQpKQorICAgICAgICBqdXN0
Q3JlYXRlZCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGp1c3RDcmVhdGVkIHx8IG5ld1RleHR1
cmVTaXplLndpZHRoKCkgPiBtX3RleHR1cmVTaXplLndpZHRoKCkgfHwgbmV3VGV4dHVyZVNpemUu
aGVpZ2h0KCkgPiBtX3RleHR1cmVTaXplLmhlaWdodCgpKSB7CisgICAgICAgIHByaW50ZigiW1Rl
eHR1cmVNYXBwZXJHTF0gQ3JlYXRpbmcgdGV4dHVyZS4gSUQ6ICVkOyBTaXplOiAlZCwlZFxuIiwg
bV9pZCwgbmV3VGV4dHVyZVNpemUud2lkdGgoKSwgbmV3VGV4dHVyZVNpemUuaGVpZ2h0KCkpOwor
ICAgICAgICBtX3RleHR1cmVTaXplID0gbmV3VGV4dHVyZVNpemU7CisgICAgICAgIEdMX0NNRChn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faWQpKQorICAgICAgICBHTF9DTUQoZ2xUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFS
KSkKKyAgICAgICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX01BR19GSUxURVIsIEdMX0xJTkVBUikpCisgICAgICAgIEdMX0NNRChnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpKQor
ICAgICAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
V1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKSkKKyAgICAgICAgR0xfQ01EKGdsVGV4SW1hZ2UyRChH
TF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVy
ZVNpemUuaGVpZ2h0KCksIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApKQorICAgIH0K
KyAgICBtX2FjdHVhbFNpemUgPSBuZXdTaXplOworICAgIG1fcmVsYXRpdmVTaXplID0gRmxvYXRT
aXplKGZsb2F0KG5ld1NpemUud2lkdGgoKSkgLyBtX3RleHR1cmVTaXplLndpZHRoKCksIGZsb2F0
KG5ld1NpemUuaGVpZ2h0KCkpIC8gbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CisgICAgbV9zb3Vy
Y2VSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIG1fcmVsYXRpdmVTaXplLndpZHRoKCksIG1fcmVsYXRp
dmVTaXplLmhlaWdodCgpKTsKKyAgICBtX29wYXF1ZSA9IG9wYXF1ZTsKKyAgICBtX3N1cmZhY2VO
ZWVkc1Jlc2V0ID0gdHJ1ZTsKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIEJpdG1hcFRl
eHR1cmVHTDo6YmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCisKK3sKKyAgICBt
X2J1ZmZlciA9IFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyOjpjcmVhdGUoKTsKKyAgICBtX2Rp
cnR5UmVjdCA9IGRpcnR5UmVjdDsKKyAgICByZXR1cm4gbV9idWZmZXItPmJlZ2luUGFpbnQoZGly
dHlSZWN0LCBtX29wYXF1ZSk7Cit9CisKK3ZvaWQgQml0bWFwVGV4dHVyZUdMOjplbmRQYWludCgp
Cit7CisgICAgaWYgKCFtX2J1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fYnVmZmVyLT5l
bmRQYWludCgpOworICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faWQp
KQorICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9kaXJ0eVJl
Y3QueCgpLCBtX2RpcnR5UmVjdC55KCksIG1fZGlydHlSZWN0LndpZHRoKCksIG1fZGlydHlSZWN0
LmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBtX2J1ZmZlci0+ZGF0YSgpKSkK
KyAgICBtX2J1ZmZlci5jbGVhcigpOworfQorCitzdHJ1Y3QgVGV4bWFwR0xTaGFkZXJUZXh0dXJl
cyB7CisgICAgc3RydWN0IEVudHJ5IHsKKyAgICAgICAgR0x1aW50IHRleHR1cmU7CisgICAgICAg
IGludCByZWZDb3VudDsKKyAgICB9OworICAgIEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIsIEVudHJ5
PiBpbWFnZVRvVGV4dHVyZTsKKyAgICBHTHVpbnQgZmluZE9yQ3JlYXRlKE5hdGl2ZUltYWdlUHRy
IGltYWdlLCBib29sJiBmb3VuZCkKKyAgICB7CisgICAgICAgIEhhc2hNYXA8TmF0aXZlSW1hZ2VQ
dHIsIEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5maW5kKGltYWdlKTsKKyAg
ICAgICAgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgaWYgKGl0ICE9IGltYWdlVG9UZXh0dXJlLmVu
ZCgpKSB7CisgICAgICAgICAgICBpdC0+c2Vjb25kLnJlZkNvdW50Kys7CisgICAgICAgICAgICBm
b3VuZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZC50ZXh0dXJlOworICAg
ICAgICB9CisgICAgICAgIEVudHJ5IGVudHJ5OworICAgICAgICBHTF9DTUQoZ2xHZW5UZXh0dXJl
cygxLCAmZW50cnkudGV4dHVyZSkpOworICAgICAgICBlbnRyeS5yZWZDb3VudCA9IDE7CisgICAg
ICAgIGltYWdlVG9UZXh0dXJlLmFkZChpbWFnZSwgZW50cnkpOworICAgICAgICByZXR1cm4gZW50
cnkudGV4dHVyZTsKKyAgICB9CisKKyAgICBib29sIGRlcmVmKE5hdGl2ZUltYWdlUHRyIGltYWdl
KQorICAgIHsKKyAgICAgICAgSGFzaE1hcDxOYXRpdmVJbWFnZVB0ciwgRW50cnk+OjppdGVyYXRv
ciBpdCA9IGltYWdlVG9UZXh0dXJlLmZpbmQoaW1hZ2UpOworICAgICAgICBpZiAoaXQgIT0gaW1h
Z2VUb1RleHR1cmUuZW5kKCkpIHsKKyAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLnJlZkNvdW50
IDwgMikgeworICAgICAgICAgICAgICAgIGltYWdlVG9UZXh0dXJlLnJlbW92ZShpdCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK3N0YXRpYyBUZXhtYXBHTFNoYWRlclRleHR1
cmVzIGdUZXh0dXJlUmVwb3NpdG9yeTsKKwordm9pZCBCaXRtYXBUZXh0dXJlR0w6OnNldENvbnRl
bnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCit7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1h
Z2UgPSBpbWFnZSA/IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIDogMDsKKyAg
ICBpZiAoIWltYWdlIHx8ICFuYXRpdmVJbWFnZSkgeworICAgICAgICBpZiAobV9pbWFnZSkKKyAg
ICAgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChu
YXRpdmVJbWFnZSA9PSBtX2ltYWdlKQorICAgICAgICByZXR1cm47CisgICAgYm9vbCBmb3VuZCA9
IGZhbHNlOworICAgIEdMdWludCBuZXdUZXh0dXJlSUQgPSBnVGV4dHVyZVJlcG9zaXRvcnkuZmlu
ZE9yQ3JlYXRlKG5hdGl2ZUltYWdlLCBmb3VuZCk7CisgICAgaWYgKG5ld1RleHR1cmVJRCAhPSBt
X2lkKSB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgbV9pZCA9IG5ld1RleHR1cmVJRDsK
KyAgICAgICAgcmVzZXQoaW1hZ2UtPnNpemUoKSwgZmFsc2UpOworICAgICAgICBtX2ltYWdlID0g
bmF0aXZlSW1hZ2U7CisgICAgICAgIHByaW50ZigiW1RleHR1cmVNYXBwZXJHTF0gQ3JlYXRpbmcg
dGV4dHVyZSBmcm9tIGRpcmVjdGx5IGNvbXBvc2l0ZWQgaW1hZ2UuIElEOiAlZDsgU2l6ZTogJWQs
JWRcbiIsIG1faWQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCkpOworICAgICAgICBp
ZiAoIWZvdW5kKSB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQgZ2MoYmVnaW5QYWludChJ
bnRSZWN0KDAsIDAsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQo
KSkpKTsKKyAgICAgICAgICAgIGdjLmRyYXdJbWFnZShpbWFnZSwgRGV2aWNlQ29sb3JTcGFjZSwg
SW50UG9pbnQoMCwgMCksIENvbXBvc2l0ZUNvcHkpOworICAgICAgICAgICAgZW5kUGFpbnQoKTsK
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBCaXRtYXBUZXh0dXJlR0w6OmRlc3Ryb3koKQor
eworICAgIGlmIChtX2lkICYmICghbV9pbWFnZSB8fCAhZ1RleHR1cmVSZXBvc2l0b3J5LmRlcmVm
KG1faW1hZ2UpKSkgeworICAgICAgICBHTF9DTUQoZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9pZCkp
CisgICAgICAgIHByaW50ZigiW1RleHR1cmVNYXBwZXJPcGVuR0xdIERlbGV0aW5nIHRleHR1cmUg
JWQsIHNpemU6ICVkLCVkXG4iLCBtX2lkLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVy
ZVNpemUuaGVpZ2h0KCkpOworICAgIH0KKyAgICBpZiAobV9mYm8pCisgICAgICAgIEdMX0NNRChn
bERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pKQorCisgICAgbV9mYm8gPSAwOworICAgIG1f
aWQgPSAwOworICAgIG1fdGV4dHVyZVNpemUgPSBJbnRTaXplKCk7CisgICAgbV9yZWxhdGl2ZVNp
emUgPSBGbG9hdFNpemUoMSwgMSk7Cit9Citib29sIEJpdG1hcFRleHR1cmVHTDo6aXNWYWxpZCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1faWQ7Cit9CisKK0ludFNpemUgQml0bWFwVGV4dHVyZUdM
OjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90ZXh0dXJlU2l6ZTsKK30KKworc3RhdGlj
IGlubGluZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KGNvbnN0
IEludFNpemUmIHNpemUsIGJvb2wgZmxpcCkKK3sKKyAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25N
YXRyaXgoMi4wIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSwgMCwgMCwgMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwgKGZsaXAgPyAtMi4wIDogMi4wKSAvIGZsb2F0KHNpemUuaGVp
Z2h0KCkpLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAtMC4w
MDAwMDEsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCBmbGlwID8gMSA6
IC0xLCAwLCAxKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmNsZWFudXAoKQorICAgIHsK
KyAgICBmb3IgKFRleG1hcEdMVmJvUmVwb3NpdG9yeTo6VmJvTWFwOjppdGVyYXRvciBpdCA9IGdW
Ym9SZXBvc2l0b3J5LnZib01hcC5iZWdpbigpOyBpdCAhPSBnVmJvUmVwb3NpdG9yeS52Ym9NYXAu
ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgcHJpbnRmKCJbVGV4dHVyZU1hcHBlckdMXSBEZWxldGlu
ZyB2Ym8gJWQsICVmICVmICVmICVmXG4iLCBpdC0+c2Vjb25kLCBpdC0+Zmlyc3QueCgpLCBpdC0+
Zmlyc3QueSgpLCBpdC0+Zmlyc3Qud2lkdGgoKSwgaXQtPmZpcnN0LmhlaWdodCgpKTsKKyAgICAg
ICAgR0xfQ01EKGdsRGVsZXRlQnVmZmVycygxLCAmaXQtPnNlY29uZCkpCisgICAgfQorICAgIGdW
Ym9SZXBvc2l0b3J5LnZib01hcC5jbGVhcigpOworfQorCisKK3ZvaWQgVGV4dHVyZU1hcHBlckdM
OjpiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlICpzdXJmYWNlUG9pbnRlcikKK3sKKyAgICBCaXRt
YXBUZXh0dXJlR0wqIHN1cmZhY2UgPSBzdGF0aWNfY2FzdDxCaXRtYXBUZXh0dXJlR0wqPihzdXJm
YWNlUG9pbnRlcik7CisKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybjsKKyAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KHN1cmZh
Y2UtPnNpemUoKSwgZmFsc2UpOworICAgIG1hdHJpeC50cmFuc2xhdGUoLXN1cmZhY2UtPm9mZnNl
dCgpLngoKSwgLXN1cmZhY2UtPm9mZnNldCgpLnkoKSk7CisKKyAgICBpZiAoc3VyZmFjZS0+bV9z
dXJmYWNlTmVlZHNSZXNldCB8fCAhc3VyZmFjZS0+bV9mYm8pIHsKKyAgICAgICAgaWYgKCFzdXJm
YWNlLT5tX2ZibykKKyAgICAgICAgICAgIEdMX0NNRChnbEdlbkZyYW1lYnVmZmVycygxLCAmc3Vy
ZmFjZS0+bV9mYm8pKQorICAgICAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVC
VUZGRVIsIHN1cmZhY2UtPm1fZmJvKSkKKyAgICAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgMCkpCisgICAgICAgIEdMX0NNRChnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdM
X0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgc3VyZmFj
ZS0+bV9pZCwgMCkpCisgICAgICAgIEdMX0NNRChnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCkpCisg
ICAgICAgIEdMX0NNRChnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpKQorICAgICAgICBzdXJm
YWNlLT5tX3N1cmZhY2VOZWVkc1Jlc2V0ID0gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
R0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBzdXJmYWNlLT5tX2Zibykp
CisgICAgfQorCisgICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwgc3VyZmFjZS0+c2l6ZSgpLndp
ZHRoKCksIHN1cmZhY2UtPnNpemUoKS5oZWlnaHQoKSkpCisgICAgbV9wcm9qZWN0aW9uTWF0cml4
ID0gbWF0cml4OworfQorCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6c2V0Q2xpcChjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIEdMX0NNRChnbFNjaXNzb3IocmVjdC54KCksIHJlY3QueSgpLCBy
ZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKQorICAgIEdMX0NNRChnbEVuYWJsZShHTF9TQ0lT
U09SX1RFU1QpKQorfQorCisKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpwYWludFRvVGFyZ2V0KGNv
bnN0IEJpdG1hcFRleHR1cmUmIGFTdXJmYWNlLCBjb25zdCBJbnRTaXplJiBzdXJmYWNlU2l6ZSwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSwgY29u
c3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpCit7CisgICAgY29uc3QgQml0bWFwVGV4dHVyZUdMJiBz
dXJmYWNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oYVN1cmZhY2UpOwor
ICAgIC8vIGNyZWF0ZSB0aGUgbW9kZWwtdmlldy1wcm9qZWN0aW9uIG1hdHJpeCB0byBkaXNwbGF5
IG9uIHNjcmVlbgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG12cE1hdHJpeCA9IGNyZWF0ZVBy
b2plY3Rpb25NYXRyaXgoc3VyZmFjZVNpemUsIHRydWUpLm11bHRMZWZ0KHRyYW5zZm9ybSk7Cisg
ICAgY29uc3QgRmxvYXRRdWFkIGZpbmFsUXVhZCA9IG12cE1hdHJpeC5tYXBRdWFkKEZsb2F0UXVh
ZChGbG9hdFJlY3Qoc3VyZmFjZS5vZmZzZXQoKS54KCksIHN1cmZhY2Uub2Zmc2V0KCkueSgpLCBz
dXJmYWNlLm1fYWN0dWFsU2l6ZS53aWR0aCgpLCBzdXJmYWNlLm1fYWN0dWFsU2l6ZS5oZWlnaHQo
KSkpKTsKKworICAgIC8vIFdlIGFscmVhZHkgYmxlbmRlZCB0aGUgYWxwaGEgaW47IHRoZSByZXN1
bHQgaXMgcHJlbXVsdGlwbGllZAorICAgIEdMX0NNRChnbFVzZVByb2dyYW0oZ1NoYWRlckluZm8u
cHJvZ3JhbXNbVGV4bWFwU2hhZGVySW5mbzo6VGFyZ2V0UHJvZ3JhbV0uaWQpKQorICAgIEdMX0NN
RChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCkpCisgICAgR0xfQ01EKGdsVmll
d3BvcnQoMCwgMCwgc3VyZmFjZVNpemUud2lkdGgoKSwgc3VyZmFjZVNpemUuaGVpZ2h0KCkpKQor
ICAgIEdMX0NNRChnbERpc2FibGUoR0xfU1RFTkNJTF9URVNUKSkKKyAgICBjb25zdCBUZXhtYXBT
aGFkZXJJbmZvOjpQcm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8gPSBnU2hhZGVySW5mby5wcm9ncmFt
c1tUZXhtYXBTaGFkZXJJbmZvOjpUYXJnZXRQcm9ncmFtXTsKKyAgICBHTF9DTUQoZ2xVbmlmb3Jt
MWYocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpPcGFjaXR5VmFyaWFibGVdLCBv
cGFjaXR5KSkKKyAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKSkKKyAgICBH
TF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBzdXJmYWNlLm1faWQpKQorICAgIEdM
X0NNRChnbFVuaWZvcm0xaShwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OlNvdXJj
ZVRleHR1cmVWYXJpYWJsZV0sIDApKQorICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5UZXhDb29yZFNvdXJjZVZh
cmlhYmxlXSkpCisgICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbUlu
Zm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblZlcnRleFZhcmlhYmxlXSkpCisgICAgR0xfQ01E
KGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDApKQorICAgIEdMX0NNRChnbFZlcnRleEF0
dHJpYlBvaW50ZXIocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblZlcnRleFZh
cmlhYmxlXSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCAmZmluYWxRdWFkKSkKKyAgICBsb2Fk
UmVjdFRvU2hhZGVyKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5UZXhDb29y
ZFNvdXJjZVZhcmlhYmxlXSwgc3VyZmFjZS5tX3NvdXJjZVJlY3QpOworICAgIEdMX0NNRChnbEJp
bmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCAwKSkKKyAgICBHTF9DTUQoZ2xCbGVuZEZ1bmMoR0xf
T05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKSkKKyAgICBHTF9DTUQoZ2xFbmFibGUoR0xfQkxF
TkQpKQorICAgIHNldENsaXAodmlzaWJsZVJlY3QpOworCisgICAgR0xfQ01EKGdsRHJhd0FycmF5
cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpKQorICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRy
aWJBcnJheShwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OkluVGV4Q29vcmRTb3Vy
Y2VWYXJpYWJsZV0pKQorICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9n
cmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OkluVmVydGV4VmFyaWFibGVdKSkKKyAgICBH
TF9DTUQoZ2xVc2VQcm9ncmFtKDApKQorICAgIG1fY3VyUHJvZ3JhbSA9IFRleG1hcFNoYWRlcklu
Zm86OlRhcmdldFByb2dyYW07Cit9CisKK1Bhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVy
ZU1hcHBlckdMOjpjcmVhdGVUZXh0dXJlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IEJpdG1hcFRl
eHR1cmVHTCgpKTsgfQorCit9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9UZXh0dXJlTWFwcGVyR0wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li40ZWFhZmJjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyBDb3B5cmlnaHQg
KEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisK
KyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgVGV4dHVyZU1hcHBlckdMX2gKKyNkZWZp
bmUgVGV4dHVyZU1hcHBlckdMX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
KworI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVy
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQW4gT3BlbkdMLUVTMiBpbXBsZW1lbnRh
dGlvbiBvZiBUZXh0dXJlTWFwcGVyLgorY2xhc3MgVGV4dHVyZU1hcHBlckdMIDogcHVibGljIFRl
eHR1cmVNYXBwZXIgeworcHVibGljOgorICAgIFRleHR1cmVNYXBwZXJHTChHcmFwaGljc0NvbnRl
eHQqIGdjKTsKKyAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyR0woKSB7fQorCisgICAgLy8gcmVp
bXBzIGZyb20gVGV4dHVyZU1hcHBlcgorICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25z
dCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVy
ZSogbWFza1RleHR1cmUpOworICAgIHZpcnR1YWwgdm9pZCBiaW5kU3VyZmFjZShCaXRtYXBUZXh0
dXJlKiBzdXJmYWNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xpcChjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCB2b2lkIHBhaW50VG9UYXJnZXQoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNv
bnN0IEludFNpemUmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHks
IGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0KTsKKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJm
YWNlRm9yUm9vdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpOworICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogdHlwZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwKCk7CisKK3ByaXZhdGU6
CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9wcm9qZWN0aW9uTWF0cml4OworICAgIGludCBt
X2N1clByb2dyYW07Cit9OworCisvLyBBbiBvZmZzY3JlZW4gYnVmZmVyIHRvIGJlIHJlbmRlcmVk
IGJ5IHNvZnR3YXJlLgorY2xhc3MgUkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXIgOiBwdWJsaWMg
UmVmQ291bnRlZDxSR0JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcj4geworcHVibGljOgorICAgIHZp
cnR1YWwgflJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyKCkge30KKyAgICB2aXJ0dWFsIFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCwg
Ym9vbCBvcGFxdWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnQoKSA9IDA7CisgICAg
dmlydHVhbCBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgPSAwOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyPiBjcmVhdGUoKTsKK307CisKKy8vIG5leHQg
cG93ZXIgb2YgdHdvCitzdGF0aWMgaW5saW5lIGludCBucG90KGludCBudW0pCit7CisgICAgZm9y
IChpbnQgaSA9IDB4MTAwMDAwMDA7IGkgPiAwOyBpID4+PSAxKSB7CisgICAgICAgIGlmIChudW0g
PT0gaSkKKyAgICAgICAgICAgIHJldHVybiBudW07CisgICAgICAgIGlmIChudW0gJiBpKQorICAg
ICAgICAgICAgcmV0dXJuIChpIDw8IDEpOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KKworc3Rh
dGljIGlubGluZSBJbnRTaXplIG5wb3QoY29uc3QgSW50U2l6ZSYgcykKK3sKKyAgICByZXR1cm4g
SW50U2l6ZShucG90KHMud2lkdGgoKSksIG5wb3Qocy5oZWlnaHQoKSkpOworfQorCit9OworCisj
ZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L1RleHR1cmVNYXBwZXJRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1
cmVNYXBwZXJRdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIyOWU1
YwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVy
ZU1hcHBlclF0LmNwcApAQCAtMCwwICsxLDIyMyBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTAg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4
dHVyZU1hcHBlci5oIgorCisjaW5jbHVkZSAiUXRDb3JlL3FkZWJ1Zy5oIgorI2luY2x1ZGUgIlF0
R3VpL3FwYWludGVuZ2luZS5oIgorI2luY2x1ZGUgIlF0R3VpL3FwaXhtYXAuaCIKKworI2lmbmRl
ZiBRVF9OT19BTklNQVRJT05TCisjIGluY2x1ZGUgIlF0Q29yZS9xYWJzdHJhY3RhbmltYXRpb24u
aCIKKyNlbmRpZgorCisjaWZkZWYgUVRfT1BFTkdMX0xJQgorIyBpbmNsdWRlICJvcGVuZ2wvVGV4
dHVyZU1hcHBlckdMLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBC
aXRtYXBUZXh0dXJlUXQgOiBwdWJsaWMgQml0bWFwVGV4dHVyZSB7CisgICAgZnJpZW5kIGNsYXNz
IFRleHR1cmVNYXBwZXJRdDsKK3B1YmxpYzoKKyAgICBCaXRtYXBUZXh0dXJlUXQoKSA6IG1fZ2Mo
MCkge30KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOworICAgIHZpcnR1YWwgSW50U2l6ZSBz
aXplKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZShtX3BpeG1hcC53aWR0aCgpLCBtX3BpeG1hcC5o
ZWlnaHQoKSk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoY29uc3QgSW50U2l6ZSYsIGJvb2wg
b3BhcXVlKTsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50
KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CisgICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCk7
CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOworICAgIHZpcnR1
YWwgYm9vbCBzYXZlKGNvbnN0IFN0cmluZyAmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgp
IGNvbnN0IHsgcmV0dXJuICFtX3BpeG1hcC5pc051bGwoKTsgfQorICAgIHZpcnR1YWwgYm9vbCBh
bGxvd09mZmxpbmVUZXh0dXJlVXBsb2FkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIElu
dFJlY3Qgc291cmNlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoMCwgMCwgY29udGVudFNp
emUoKS53aWR0aCgpLCBjb250ZW50U2l6ZSgpLmhlaWdodCgpKTsgfQorcHJpdmF0ZToKKyAgICBR
UGFpbnRlciBtX3BhaW50ZXI7CisgICAgR3JhcGhpY3NDb250ZXh0KiBtX2djOworICAgIFFQaXht
YXAgbV9waXhtYXA7Cit9OworCitjbGFzcyBUZXh0dXJlTWFwcGVyUXQgOiBwdWJsaWMgVGV4dHVy
ZU1hcHBlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJp
dG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRl
eHR1cmUqIG1hc2tUZXh0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0bWFw
VGV4dHVyZSogc3VyZmFjZSk7CisgICAgdmlydHVhbCB2b2lkIHNldENsaXAoY29uc3QgSW50UmVj
dCYpOworICAgIHZpcnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBUZXh0dXJlTWFwcGVyUXQoR3JhcGhpY3NDb250ZXh0KiBnYyk7Cisg
ICAgdmlydHVhbCBjb25zdCBjaGFyKiB0eXBlKCkgY29uc3QgeyByZXR1cm4gIlF0IjsgfQorICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CisKKyAg
ICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKFFQYWludGVyICpwYWludGVyKQorICAgIHsKKyAgICAg
ICAgcGFpbnRlci0+c2V0UmVuZGVySGludHMoUVBhaW50ZXI6OkFudGlhbGlhc2luZyB8IFFQYWlu
dGVyOjpTbW9vdGhQaXhtYXBUcmFuc2Zvcm0sIGZhbHNlKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgUVBhaW50ZXIqIG1fcGFpbnRlcjsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZVF0PiBtX2N1
cnJlbnRTdXJmYWNlOworfTsKKwordm9pZCBCaXRtYXBUZXh0dXJlUXQ6OmRlc3Ryb3koKQorewor
ICAgIGlmIChtX3BpeG1hcC5wYWludGluZ0FjdGl2ZSgpKQorICAgICAgICBxRmF0YWwoIkRlc3Ry
b3lpbmcgYW4gYWN0aXZlIHBpeG1hcCIpOworICAgIG1fcGl4bWFwID0gUVBpeG1hcCgpOworfQor
Cit2b2lkIEJpdG1hcFRleHR1cmVRdDo6cmVzZXQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBp
c09wYXF1ZSkKK3sKKyAgICBCaXRtYXBUZXh0dXJlOjpyZXNldChzaXplLCBpc09wYXF1ZSk7CisK
KyAgICBpZiAoc2l6ZS53aWR0aCgpID4gbV9waXhtYXAuc2l6ZSgpLndpZHRoKCkgfHwgc2l6ZS5o
ZWlnaHQoKSA+IG1fcGl4bWFwLnNpemUoKS5oZWlnaHQoKSB8fCBtX3BpeG1hcC5pc051bGwoKSkK
KyAgICAgICAgbV9waXhtYXAgPSBRUGl4bWFwKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7
CisgICAgaWYgKCFpc09wYXF1ZSkKKyAgICAgICAgbV9waXhtYXAuZmlsbChRdDo6dHJhbnNwYXJl
bnQpOworfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogQml0bWFwVGV4dHVyZVF0OjpiZWdp
blBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBtX3BhaW50ZXIuYmVnaW4o
Jm1fcGl4bWFwKTsKKyAgICBUZXh0dXJlTWFwcGVyUXQ6OmluaXRpYWxpemUoJm1fcGFpbnRlcik7
CisgICAgbV9wYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25N
b2RlX0NsZWFyKTsKKyAgICBtX3BhaW50ZXIuZmlsbFJlY3QoUVJlY3QoZGlydHlSZWN0KSwgUXQ6
OnRyYW5zcGFyZW50KTsKKyAgICBtX3BhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVy
OjpDb21wb3NpdGlvbk1vZGVfU291cmNlT3Zlcik7CisgICAgcmV0dXJuICZtX3BhaW50ZXI7Cit9
CisKK3ZvaWQgQml0bWFwVGV4dHVyZVF0OjplbmRQYWludCgpCit7CisgICAgbV9wYWludGVyLmVu
ZCgpOworfQorCitib29sIEJpdG1hcFRleHR1cmVRdDo6c2F2ZShjb25zdCBTdHJpbmcgJnBhdGgp
Cit7CisgICAgcmV0dXJuIG1fcGl4bWFwLnNhdmUocGF0aCwgIlBORyIpOworfQorCit2b2lkIEJp
dG1hcFRleHR1cmVRdDo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKK3sKKyAgICBp
ZiAoIWltYWdlKQorICAgICAgICByZXR1cm47CisgICAgY29uc3QgUVBpeG1hcCogcGl4bWFwID0g
aW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFwaXhtYXApCisg
ICAgICAgIHJldHVybjsKKyAgICBCaXRtYXBUZXh0dXJlOjpyZXNldChwaXhtYXAtPnNpemUoKSwg
IXBpeG1hcC0+aGFzQWxwaGFDaGFubmVsKCkpOworICAgIG1fcGl4bWFwID0gKnBpeG1hcDsKK30K
Kwordm9pZCBUZXh0dXJlTWFwcGVyUXQ6OnNldENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sK
KyAgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBtX2N1cnJlbnRTdXJmYWNlID8gJm1fY3VycmVudFN1
cmZhY2UtPm1fcGFpbnRlciA6IG1fcGFpbnRlcjsKKyAgICAgcGFpbnRlci0+c2V0Q2xpcFJlY3Qo
cmVjdCk7Cit9CisKK1RleHR1cmVNYXBwZXJRdDo6VGV4dHVyZU1hcHBlclF0KEdyYXBoaWNzQ29u
dGV4dCogZ2MpCisgICAgOiBUZXh0dXJlTWFwcGVyKGdjKQorICAgICwgbV9wYWludGVyKGdjLT5w
bGF0Zm9ybUNvbnRleHQoKSkKKyAgICAsIG1fY3VycmVudFN1cmZhY2UoMCkKK3sKKyAgICBUZXh0
dXJlTWFwcGVyUXQ6OmluaXRpYWxpemUobV9wYWludGVyKTsKK30KKwordm9pZCBUZXh0dXJlTWFw
cGVyUXQ6OmJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIGFTdXJmYWNlKQoreworICAgIGlmICht
X2N1cnJlbnRTdXJmYWNlID09IGFTdXJmYWNlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1f
Y3VycmVudFN1cmZhY2UpCisgICAgICAgIG1fY3VycmVudFN1cmZhY2UtPm1fcGFpbnRlci5lbmQo
KTsKKyAgICBpZiAoIWFTdXJmYWNlKSB7CisgICAgICAgIG1fY3VycmVudFN1cmZhY2UgPSAwOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIEJpdG1hcFRleHR1cmVRdCogc3VyZmFjZSA9IHN0
YXRpY19jYXN0PEJpdG1hcFRleHR1cmVRdCo+KGFTdXJmYWNlKTsKKyAgICBpZiAoIXN1cmZhY2Ut
Pm1fcGFpbnRlci5pc0FjdGl2ZSgpKQorICAgICAgICBzdXJmYWNlLT5tX3BhaW50ZXIuYmVnaW4o
JnN1cmZhY2UtPm1fcGl4bWFwKTsKKyAgICBtX2N1cnJlbnRTdXJmYWNlID0gc3VyZmFjZTsKK30K
KworCit2b2lkIFRleHR1cmVNYXBwZXJRdDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVy
ZSYgYVRleHR1cmUsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1h
c2tUZXh0dXJlKQoreworICAgIGNvbnN0IEJpdG1hcFRleHR1cmVRdCYgdGV4dHVyZSA9IHN0YXRp
Y19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVRdCY+KGFUZXh0dXJlKTsKKyAgICBRUGFpbnRlciog
cGFpbnRlciA9IG1fcGFpbnRlcjsKKyAgICBRUGl4bWFwIHBpeG1hcCA9IHRleHR1cmUubV9waXht
YXA7CisgICAgaWYgKG1fY3VycmVudFN1cmZhY2UpCisgICAgICAgIHBhaW50ZXIgPSAmbV9jdXJy
ZW50U3VyZmFjZS0+bV9wYWludGVyOworCisgICAgaWYgKG1hc2tUZXh0dXJlICYmIG1hc2tUZXh0
dXJlLT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgY29uc3QgQml0bWFwVGV4dHVyZVF0KiBtYXNrUXQg
PSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlUXQqPihtYXNrVGV4dHVyZSk7CisgICAg
ICAgIFFQaXhtYXAgaW50ZXJtZWRpYXRlUGl4bWFwKHBpeG1hcC5zaXplKCkpOworICAgICAgICBp
bnRlcm1lZGlhdGVQaXhtYXAuZmlsbChRdDo6dHJhbnNwYXJlbnQpOworICAgICAgICBRUGFpbnRl
ciBtYXNrUGFpbnRlcigmaW50ZXJtZWRpYXRlUGl4bWFwKTsKKyAgICAgICAgbWFza1BhaW50ZXIu
c2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKKyAg
ICAgICAgbWFza1BhaW50ZXIuZHJhd1BpeG1hcCgwLCAwLCBwaXhtYXApOworICAgICAgICBtYXNr
UGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9EZXN0
aW5hdGlvbkluKTsKKyAgICAgICAgbWFza1BhaW50ZXIuZHJhd1BpeG1hcChRUmVjdCgwLCAwLCBw
aXhtYXAud2lkdGgoKSwgcGl4bWFwLmhlaWdodCgpKSwgbWFza1F0LT5tX3BpeG1hcCwgbWFza1F0
LT5zb3VyY2VSZWN0KCkpOworICAgICAgICBtYXNrUGFpbnRlci5lbmQoKTsKKyAgICAgICAgcGl4
bWFwID0gaW50ZXJtZWRpYXRlUGl4bWFwOworICAgIH0KKworICAgIGNvbnN0IHFyZWFsIHByZXZP
cGFjaXR5ID0gcGFpbnRlci0+b3BhY2l0eSgpOworICAgIGNvbnN0IFFUcmFuc2Zvcm0gcHJldlRy
YW5zZm9ybSA9IHBhaW50ZXItPnRyYW5zZm9ybSgpOworICAgIHBhaW50ZXItPnNldE9wYWNpdHko
b3BhY2l0eSk7CisgICAgcGFpbnRlci0+c2V0VHJhbnNmb3JtKG1hdHJpeCwgdHJ1ZSk7CisgICAg
cGFpbnRlci0+ZHJhd1BpeG1hcCh0YXJnZXRSZWN0LCBwaXhtYXAsIHRleHR1cmUuc291cmNlUmVj
dCgpKTsKKyAgICBwYWludGVyLT5zZXRUcmFuc2Zvcm0ocHJldlRyYW5zZm9ybSk7CisgICAgcGFp
bnRlci0+c2V0T3BhY2l0eShwcmV2T3BhY2l0eSk7Cit9CisKK1Bhc3NSZWZQdHI8VGV4dHVyZU1h
cHBlcj4gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dCogZ2MpCit7CisjaWZk
ZWYgUVRfT1BFTkdMX0xJQgorICAgIGlmIChnYy0+cGxhdGZvcm1Db250ZXh0KCktPnBhaW50RW5n
aW5lKCktPnR5cGUoKSA9PSBRUGFpbnRFbmdpbmU6Ok9wZW5HTDIpCisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlckdMKGdjKSk7CisjZW5kaWYKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFRleHR1cmVNYXBwZXJRdChnYykpOworfQorCisKK1Bhc3NSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gVGV4dHVyZU1hcHBlclF0OjpjcmVhdGVUZXh0dXJlKCkgeyByZXR1cm4gYWRvcHRS
ZWYobmV3IEJpdG1hcFRleHR1cmVRdCgpKTsgfQorCisjaWZkZWYgUVRfT1BFTkdMX0xJQgorY2xh
c3MgUkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXJRdCA6IHB1YmxpYyBSR0JBMzJQcmVtdWx0aW1w
bGllZEJ1ZmZlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dCogYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiByZWN0LCBib29sIG9wYXF1ZSkKKyAgICB7Cisg
ICAgICAgIG1faW1hZ2UgPSBRSW1hZ2UocmVjdC5zaXplKCkud2lkdGgoKSwgcmVjdC5zaXplKCku
aGVpZ2h0KCksIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsKKyAgICAgICAg
aWYgKCFvcGFxdWUpCisgICAgICAgICAgICBtX2ltYWdlLmZpbGwoMCk7CisgICAgICAgIG1fcGFp
bnRlci5iZWdpbigmbV9pbWFnZSk7CisgICAgICAgIFRleHR1cmVNYXBwZXJRdDo6aW5pdGlhbGl6
ZSgmbV9wYWludGVyKTsKKyAgICAgICAgbV9wYWludGVyLnRyYW5zbGF0ZSgtcmVjdC54KCksIC1y
ZWN0LnkoKSk7CisgICAgICAgIHJldHVybiAmbV9wYWludGVyOworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBlbmRQYWludCgpIHsgbV9wYWludGVyLmVuZCgpOyB9CisgICAgdmlydHVhbCBjb25z
dCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5jb25zdEJpdHMoKTsgfQorCitw
cml2YXRlOgorICAgIFFQYWludGVyIG1fcGFpbnRlcjsKKyAgICBRSW1hZ2UgbV9pbWFnZTsKK307
CitQYXNzUmVmUHRyPFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyPiBSR0JBMzJQcmVtdWx0aW1w
bGllZEJ1ZmZlcjo6Y3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFJHQkEzMlByZW11bHRp
bXBsaWVkQnVmZmVyUXQoKSk7IH0KKyNlbmRpZgorfTsKKworI2luY2x1ZGUgPFRleHR1cmVNYXBw
ZXJRdC5tb2M+CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMWJiNzhkZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApAQCAt
MCwwICsxLDE2MDEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgorCisjaW5jbHVkZSAiQ3Vy
cmVudFRpbWUuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJIYXNoTWFwLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNs
dWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUg
IlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNs
dWRlICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiVW5pdEJlemllci5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+
CisKKyNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlICJRdENvcmUvcWRlYnVnLmgiCisjZW5kaWYK
KworI2RlZmluZSBERUJVR19URVhNQVBfRlBTIDEKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dHJ1Y3QgVGV4bWFwUGFpbnRPcHRpb25zIHsKKyAgICBCaXRtYXBUZXh0dXJlKiBzdXJmYWNlOwor
ICAgIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXI7CisgICAgR3JhcGhpY3NDb250ZXh0KiBn
YzsKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogcm9vdExheWVyOworICAgIGZsb2F0IG9wYWNpdHk7
CisgICAgSW50UmVjdCBzY2lzc29yUmVjdDsKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0OworfTsK
K2NsYXNzIFRleHR1cmVNYXBwZXJDYWNoZSB7CitwdWJsaWM6CisgICAgdm9pZCBtYXJrKEJpdG1h
cFRleHR1cmUgKnRleHR1cmUpOworCisgICAgY2xhc3MgRW50cnkgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmU7CisgICAgICAgIEVudHJ5KCkgOiBw
cmV2aW91c0Nvc3QoMCkgeyB9CisgICAgICAgIGlubGluZSBpbnQgY2FsY3VsYXRlQ29zdCgpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghdGV4dHVyZSB8fCAhdGV4dHVyZS0+aXNW
YWxpZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgY29uc3QgSW50
U2l6ZSBzeiA9IHRleHR1cmUtPnNpemUoKTsKKyAgICAgICAgICAgIHJldHVybiBzei53aWR0aCgp
ICogc3ouaGVpZ2h0KCkgKiA0OworICAgICAgICB9CisgICAgICAgIEVudHJ5KEJpdG1hcFRleHR1
cmUqIG5ld1RleHR1cmUpCisgICAgICAgICAgICA6IHRleHR1cmUobmV3VGV4dHVyZSkKKyAgICAg
ICAgeworICAgICAgICB9CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFbnRyeSYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuIHRleHR1cmUgPT0gb3RoZXIudGV4dHVyZTsgfQorICAgICAgICBp
bnQgcHJldmlvdXNDb3N0OworICAgIH07CisKKyAgICBUZXh0dXJlTWFwcGVyQ2FjaGUoKSA6IG1f
dG90YWxDb3N0KDApIHt9CisKKyAgICB2b2lkIHB1cmdlKCk7CisgICAgVmVjdG9yPEVudHJ5PiBt
X2RhdGE7CisgICAgaW50IG1fdG90YWxDb3N0OworI2lmbmRlZiBURVhNQVBfVEVYVFVSRV9DQUNI
RV9LQlMKKyNkZWZpbmUgVEVYTUFQX1RFWFRVUkVfQ0FDSEVfS0JTIDI0ICogMTAyNAorI2VuZGlm
CisgICAgc3RhdGljIGNvbnN0IGludCBNYXhDb3N0ID0gVEVYTUFQX1RFWFRVUkVfQ0FDSEVfS0JT
ICogMTAyNDsKKyAgICBzdGF0aWMgY29uc3QgaW50IFB1cmdlQW1vdW50ID0gTWF4Q29zdCAvIDQ7
Cit9OworCisKK3ZvaWQgVGV4dHVyZU1hcHBlckNhY2hlOjpwdXJnZSgpCit7CisgICAgLy8gbmVl
ZHMgYWN0aXZlIGNvbnRleHQ6IHRleHR1cmUuZGVzdHJveQorICAgIGNvbnN0IGludCBzaXplID0g
bV9kYXRhLnNpemUoKTsKKworICAgIGlmIChtX3RvdGFsQ29zdCA8PSBUZXh0dXJlTWFwcGVyQ2Fj
aGU6Ok1heENvc3QpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEVuc3VyZSB0aGF0IHdlIGhh
dmUgdGhlIHJpZ2h0IGNvdW50LiBJdCBtaWdodCBiZSBpbmFjY3VyYXRlIGlmIGNvbnRlbnQgY2hh
bmdlZCBzaXplLgorICAgIC8vIFdlIG9ubHkgZG8gdGhpcyB3aGVuIHdlJ3JlIGFjdHVhbGx5IHJl
YWR5IHRvIHB1cmdlLgorICAgIG1fdG90YWxDb3N0ID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IHNpemU7ICsraSkKKyAgICAgICAgbV90b3RhbENvc3QgKz0gbV9kYXRhW2ldLmNhbGN1bGF0
ZUNvc3QoKTsKKworICAgIGludCBiZWZvcmUgPSBtX3RvdGFsQ29zdDsKKyAgICBmb3IgKGludCBp
ID0gc2l6ZS0xOyBpID49IDAgJiYgbV90b3RhbENvc3QgPiBUZXh0dXJlTWFwcGVyQ2FjaGU6Ok1h
eENvc3QgLSBUZXh0dXJlTWFwcGVyQ2FjaGU6OlB1cmdlQW1vdW50OyAtLWkpIHsKKyAgICAgICAg
RW50cnkmIGVudHJ5ID0gbV9kYXRhW2ldOworICAgICAgICBpZiAoZW50cnkudGV4dHVyZS0+aXNM
b2NrZWQoKSB8fCAhZW50cnkudGV4dHVyZS0+aXNWYWxpZCgpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIG1fdG90YWxDb3N0IC09IGVudHJ5LnByZXZpb3VzQ29zdDsKKyAgICAgICAg
ZW50cnkudGV4dHVyZS0+ZGVzdHJveSgpOworICAgICAgICBtX2RhdGEucmVtb3ZlKGkpOworICAg
IH0KKworICAgIHByaW50ZigiW1RleHR1cmVNYXBwZXJdIFB1cmdlZCAlMi40Zksgb2YgdGV4dHVy
ZXMoJWQpIFslMi40ZksvJWRdXG4iLCBmbG9hdChiZWZvcmUgLSBtX3RvdGFsQ29zdCkgLyAxMDI0
LAorICAgICAgICAgICBpbnQoc2l6ZS1tX2RhdGEuc2l6ZSgpKSwgZmxvYXQobV90b3RhbENvc3Qp
IC8gMTAyNCwgbV9kYXRhLnNpemUoKSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckNhY2hlOjpt
YXJrKEJpdG1hcFRleHR1cmUgKnRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlIHx8ICF0ZXh0
dXJlLT5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEVudHJ5IGVudHJ5KHRleHR1
cmUpOworICAgIHNpemVfdCBpbmRleCA9IG1fZGF0YS5maW5kKGVudHJ5KTsKKyAgICBpZiAoIWlu
ZGV4KQorICAgICAgICByZXR1cm47CisKKyAgICBwcmludGYoIllheWEhISAlZCBbJWRdIFslZF0i
LCBpbmRleCwgbV9kYXRhLnNpemUoKSwgbV90b3RhbENvc3QpOworICAgIGlmIChpbmRleCA8IG1f
ZGF0YS5zaXplKCkpIAorICAgICAgICBtX2RhdGEucmVtb3ZlKGluZGV4KTsKKyAgICBjb25zdCBp
bnQgY29zdCA9IGVudHJ5LmNhbGN1bGF0ZUNvc3QoKTsKKyAgICBtX3RvdGFsQ29zdCAtPSBlbnRy
eS5wcmV2aW91c0Nvc3Q7CisgICAgbV90b3RhbENvc3QgKz0gKGVudHJ5LnByZXZpb3VzQ29zdCA9
IGNvc3QpOworICAgIG1fZGF0YS5wcmVwZW5kKGVudHJ5KTsKK30KKworVGV4dHVyZU1hcHBlckNh
Y2hlIGdUZXh0dXJlTWFwcGVyQ2FjaGU7CisKK2NsYXNzIFRleHR1cmVNYXBwZXJDYWNoZUxvY2sg
eworcHVibGljOgorICAgIFRleHR1cmVNYXBwZXJDYWNoZUxvY2soQml0bWFwVGV4dHVyZSogdGV4
dHVyZSkgOiBtX3RleHR1cmUodGV4dHVyZSkKKyAgICB7CisgICAgICAgIGlmIChtX3RleHR1cmUp
CisgICAgICAgICAgICBtX3RleHR1cmUtPmxvY2soKTsKKyAgICB9CisgICAgflRleHR1cmVNYXBw
ZXJDYWNoZUxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgICAg
IG1fdGV4dHVyZS0+dW5sb2NrKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlZlB0cjxCaXRt
YXBUZXh0dXJlPiBtX3RleHR1cmU7Cit9OworCitjbGFzcyBUZXh0dXJlTWFwcGVyTm9kZSA6IHB1
YmxpYyBUZXh0dXJlTWFwcGVyQ29udGVudExheWVyIHsKKworcHVibGljOgorICAgIC8vIFRoaXMg
c2V0IG9mIGZsYWdzIGhlbHAgdXMgZGVmZXIgd2hpY2ggcHJvcGVydGllcyBvZiB0aGUgbGF5ZXIg
aGF2ZSBiZWVuCisgICAgLy8gbW9kaWZpZWQgYnkgdGhlIGNvbXBvc2l0b3IsIHNvIHdlIGNhbiBr
bm93IHdoYXQgdG8gbG9vayBmb3IgaW4gdGhlIG5leHQgZmx1c2guCisgICAgZW51bSBDaGFuZ2VN
YXNrIHsKKyAgICAgICAgTm9DaGFuZ2VzID0gICAgICAgICAgICAgICAgIDAsCisKKyAgICAgICAg
UGFyZW50Q2hhbmdlID0gICAgICAgICAgICAgICgxTCA8PCAwKSwKKyAgICAgICAgQ2hpbGRyZW5D
aGFuZ2UgPSAgICAgICAgICAgICgxTCA8PCAxKSwKKyAgICAgICAgTWFza0xheWVyQ2hhbmdlID0g
ICAgICAgICAgICgxTCA8PCAyKSwKKyAgICAgICAgUG9zaXRpb25DaGFuZ2UgPSAgICAgICAgICAg
ICgxTCA8PCAzKSwKKworICAgICAgICBBbmNob3JQb2ludENoYW5nZSA9ICAgICAgICAgKDFMIDw8
IDQpLAorICAgICAgICBTaXplQ2hhbmdlICA9ICAgICAgICAgICAgICAgKDFMIDw8IDUpLAorICAg
ICAgICBUcmFuc2Zvcm1DaGFuZ2UgPSAgICAgICAgICAgKDFMIDw8IDYpLAorICAgICAgICBDb250
ZW50Q2hhbmdlID0gICAgICAgICAgICAgKDFMIDw8IDcpLAorCisgICAgICAgIENvbnRlbnRzT3Jp
ZW50YXRpb25DaGFuZ2UgPSAoMUwgPDwgOSksCisgICAgICAgIE9wYWNpdHlDaGFuZ2UgPSAgICAg
ICAgICAgICAoMUwgPDwgMTApLAorICAgICAgICBDb250ZW50c1JlY3RDaGFuZ2UgPSAgICAgICAg
KDFMIDw8IDExKSwKKworICAgICAgICBQcmVzZXJ2ZXMzRENoYW5nZSA9ICAgICAgICAgKDFMIDw8
IDEyKSwKKyAgICAgICAgTWFza3NUb0JvdW5kc0NoYW5nZSA9ICAgICAgICgxTCA8PCAxMyksCisg
ICAgICAgIERyYXdzQ29udGVudENoYW5nZSA9ICAgICAgICAoMUwgPDwgMTQpLAorICAgICAgICBD
b250ZW50c09wYXF1ZUNoYW5nZSA9ICAgICAgKDFMIDw8IDE1KSwKKworICAgICAgICBCYWNrZmFj
ZVZpc2liaWxpdHlDaGFuZ2UgPSAgKDFMIDw8IDE2KSwKKyAgICAgICAgQ2hpbGRyZW5UcmFuc2Zv
cm1DaGFuZ2UgPSAgICgxTCA8PCAxNyksCisgICAgICAgIERpc3BsYXlDaGFuZ2UgPSAgICAgICAg
ICAgICAoMUwgPDwgMTgpLAorICAgICAgICBCYWNrZ3JvdW5kQ29sb3JDaGFuZ2UgPSAgICAgKDFM
IDw8IDE5KSwKKworICAgICAgICBSZXBsaWNhTGF5ZXJDaGFuZ2UgPSAgICAgICAgKDFMIDw8IDIw
KQorICAgIH07CisKKyAgICAvLyBUaGUgY29tcG9zaXRvciBsZXRzIHVzIHNwZWNpYWwtY2FzZSBp
bWFnZXMgYW5kIGNvbG9ycywgc28gd2UgdHJ5IHRvIGRvIHNvLgorICAgIGVudW0gU3RhdGljQ29u
dGVudFR5cGUgeyBIVE1MQ29udGVudFR5cGUsIERpcmVjdEltYWdlQ29udGVudFR5cGUsIENvbG9y
Q29udGVudFR5cGUsIE1lZGlhQ29udGVudFR5cGUsIENhbnZhczNEQ29udGVudFR5cGV9OworCisg
ICAgVGV4dHVyZU1hcHBlck5vZGUqIHJvb3RMYXllcigpOworCisgICAgVGV4dHVyZU1hcHBlck5v
ZGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIG5ld0xheWVyKTsKKyAgICB2aXJ0dWFsIH5U
ZXh0dXJlTWFwcGVyTm9kZSgpOworCisjaWYgREVCVUdfVEVYTUFQX0ZQUworICAgIHZvaWQgYmVn
aW5BbmltYXRpb24oQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5KTsKKyAgICB2b2lkIGVuZEFu
aW1hdGlvbihBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHkpOworI2VuZGlmCisKKyAgICB2b2lk
IGNsZWFyRGlyZWN0SW1hZ2UoKTsKKyAgICB2b2lkIGNvbXB1dGVUcmFuc2Zvcm1hdGlvbnMoKTsK
KyAgICBJbnRTaXplIG5lYXJlc3RTdXJmYWNlU2l6ZSgpIGNvbnN0OworICAgIHZvaWQgY29tcHV0
ZVJlcGxpY2FUcmFuc2Zvcm0oKTsKKyAgICB2b2lkIGNvbXB1dGVMYXllclR5cGUoKTsKKyAgICB2
b2lkIGNvbXB1dGVMb2NhbFRyYW5zZm9ybSgpOworICAgIHZvaWQgZmxhdHRlblRvMkRTcGFjZUlm
TmVjZXNzYXJ5KCk7CisgICAgdm9pZCBpbml0aWFsaXplVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFw
cGVyKik7CisgICAgdm9pZCBpbnZhbGlkYXRlVHJhbnNmb3JtKCk7CisgICAgdm9pZCBub3RpZnlD
aGFuZ2UoQ2hhbmdlTWFzayk7CisgICAgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZShib29sIHJl
Y3Vyc2UpOworICAgIHZvaWQgcGVyZm9ybVBvc3RTeW5jT3BlcmF0aW9ucygpOworICAgIHZvaWQg
c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoSW50UmVj
dCk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFudXBUZXh0dXJlTWFwcGVyKCk7CisKKyNpZiBFTkFC
TEVfVEVYTUFQX0FOSU1BVElPTgorICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4Jik7CisgICAgdm9pZCBzZXRPcGFjaXR5RnJvbUFuaW1hdGlvbkZyYW1lKGZs
b2F0IG9wYWNpdHkpOworICAgIHZvaWQgc2V0VHJhbnNmb3JtRnJvbUFuaW1hdGlvbkZyYW1lKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgdm9pZCBub3RpZnlBbmltYXRpb25TdGFy
dGVkKCk7CisgICAgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkVGltZXJGaXJlZChUaW1lcjxU
ZXh0dXJlTWFwcGVyTm9kZT4qKSB7IG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoKTsgfQorICAgIHZv
aWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZEFzeW5jKCkgeyBtX25vdGlmeUFuaW1hdGlvblN0YXJ0
ZWRUaW1lci5zdGFydE9uZVNob3QoMCk7IH0KKyAgICB2b2lkIG5vdGlmeVRyYW5zZm9ybUFuaW1h
dGlvblJ1bm5pbmcoYm9vbCByKTsKKyAgICB2b2lkIG5vdGlmeU9wYWNpdHlBbmltYXRpb25SdW5u
aW5nKGJvb2wgcik7CisjZW5kaWYKKworICAgIHZvaWQgcGFpbnRSZWN1cnNpdmUoVGV4bWFwUGFp
bnRPcHRpb25zIG9wdGlvbnMpOworICAgIHZvaWQgcGFpbnRTZWxmKFRleHR1cmVNYXBwZXIqIHRl
eHR1cmVNYXBwZXIsIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlLCBC
aXRtYXBUZXh0dXJlKiByZXBsaWNhTWFza1RleHR1cmUsIGJvb2wgaXNTdXJmYWNlKTsKKyAgICB2
b2lkIHVwbG9hZFRleHR1cmVGcm9tQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVy
KTsKKworICAgIGludCBjb3VudERlc2NlbmRhbnRzV2l0aENvbnRlbnQoKSBjb25zdDsKKyAgICBi
b29sIGhhc1N1cmZhY2VEZXNjZW5kYW50cygpIGNvbnN0OworCisgICAgSW50U2l6ZSBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGxhdGZvcm1M
YXllckNsaWVudChUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFJlY3QmIHRh
cmdldFJlY3QsIGNvbnN0IEludFJlY3QmIGV4cG9zZWRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5KTsKKworICAgIHN0YXRpYyBUZXh0dXJl
TWFwcGVyTm9kZSogdG9UZXh0dXJlTWFwcGVyTm9kZShHcmFwaGljc0xheWVyKik7CitwdWJsaWM6
CisgICAgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIG1fbGF5ZXI7CisgICAgY29uc3QgY2hh
ciogbV9sYXN0VGV4dHVyZU1hcHBlclR5cGU7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXI+IG1f
bGFzdFRleHR1cmVNYXBwZXI7CisgICAgc3RydWN0IFRyYW5zZm9ybURhdGEgeworICAgICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBiYXNlLCB0YXJnZXQsIHJlcGxpY2EsIGZvckRlc2NlbmRhbnRz
LCBwZXJzcGVjdGl2ZSwgbG9jYWw7CisgICAgICAgIEludFJlY3QgdGFyZ2V0Qm91bmRpbmdSZWN0
OworICAgICAgICBmbG9hdCBjZW50ZXJaOworICAgICAgICBib29sIGRpcnR5LCBsb2NhbERpcnR5
LCBwZXJzcGVjdGl2ZURpcnR5OworICAgICAgICBJbnRSZWN0IGJvdW5kaW5nUmVjdEZyb21Sb290
OworICAgICAgICBUcmFuc2Zvcm1EYXRhKCkgOiBkaXJ0eSh0cnVlKSwgbG9jYWxEaXJ0eSh0cnVl
KSwgcGVyc3BlY3RpdmVEaXJ0eSh0cnVlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgVHJhbnNmb3JtRGF0YSBtX3RyYW5zZm9ybXM7CisKKyAgICBlbnVtIExheWVyVHlwZSB7
CisgICAgICAgIERlZmF1bHRMYXllciwKKyAgICAgICAgUm9vdExheWVyLAorICAgICAgICBTY2lz
c29yTGF5ZXIsCisgICAgICAgIENsaXBMYXllciwKKyAgICAgICAgVHJhbnNwYXJlbmN5TGF5ZXIK
KyAgICB9OworCisgICAgTGF5ZXJUeXBlIG1fbGF5ZXJUeXBlOworCisgICAgc3RydWN0IENvbnRl
bnREYXRhIHsKKyAgICAgICAgSW50UmVjdCBuZWVkc0Rpc3BsYXlSZWN0OworICAgICAgICBib29s
IG5lZWRzRGlzcGxheTsKKyAgICAgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOworCisgICAgICAg
IFN0YXRpY0NvbnRlbnRUeXBlIGNvbnRlbnRUeXBlOworICAgICAgICBSZWZQdHI8SW1hZ2U+IGlt
YWdlOworICAgICAgICBUZXh0dXJlTWFwcGVyVmlkZW9MYXllciogbWVkaWE7CisKKyAgICAgICAg
Q29udGVudERhdGEoKQorICAgICAgICAgICAgOiBuZWVkc0Rpc3BsYXkoZmFsc2UpCisgICAgICAg
ICAgICAsIGNvbnRlbnRUeXBlKEhUTUxDb250ZW50VHlwZSkKKyAgICAgICAgICAgICwgaW1hZ2Uo
MCkKKyAgICAgICAgICAgICwgbWVkaWEoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICB9
OworCisgICAgaW5saW5lIEludFJlY3QgdGFyZ2V0UmVjdCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUg
PyBmdWxsUmVjdCgpIDogbV9zdGF0ZS5jb250ZW50c1JlY3Q7CisgICAgfQorCisgICAgaW5saW5l
IEludFJlY3QgZnVsbFJlY3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEludFJlY3Qo
MCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgfQorCisgICAgaW5s
aW5lIEludFJlY3QgcmVwbGljYVJlY3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
bGF5ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVyID8gSW50UmVjdCgwLCAwLCBtX25lYXJlc3RT
dXJmYWNlU2l6ZS53aWR0aCgpLCBtX25lYXJlc3RTdXJmYWNlU2l6ZS5oZWlnaHQoKSkgOiBmdWxs
UmVjdCgpOworICAgIH0KKworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBtX3RleHR1cmU7Cisg
ICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1fc3VyZmFjZSwgbV9yZXBsaWNhU3VyZmFjZTsKKwor
ICAgIENvbnRlbnREYXRhIG1fcGVuZGluZ0NvbnRlbnQ7CisgICAgQ29udGVudERhdGEgbV9jdXJy
ZW50Q29udGVudDsKKworICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyTm9kZSo+IG1fY2hpbGRyZW47
CisgICAgVGV4dHVyZU1hcHBlck5vZGUqIG1fcGFyZW50OworICAgIFRleHR1cmVNYXBwZXJOb2Rl
KiBtX2VmZmVjdFRhcmdldDsKKyNpZiBERUJVR19URVhNQVBfRlBTCisgICAgc3RydWN0IEdyYXBo
aWNzTGF5ZXJBbmltYXRpb24geworICAgICAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9uKCkgOiBm
cmFtZXMoMCkgeyBsYXN0ID0gc3RhcnRlZCA9IFdURjo6Y3VycmVudFRpbWUoKTsgfQorICAgICAg
ICBpbnQgZnJhbWVzOworICAgICAgICBkb3VibGUgbGFzdCwgc3RhcnRlZDsKKyAgICB9OworICAg
IEhhc2hNYXA8aW50LCBHcmFwaGljc0xheWVyQW5pbWF0aW9uKj4gbV9hbmltX2ZwczsKKyNlbmRp
ZgorCisgICAgaW50IG1fY2hhbmdlTWFzazsKKyAgICBJbnRTaXplIG1fc2l6ZSwgbV9uZWFyZXN0
U3VyZmFjZVNpemU7CisgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXJD
bGllbnQqIG1fcGxhdGZvcm1DbGllbnQ7CisKKyAgICBzdHJ1Y3QgU3RhdGUgeworICAgICAgICBG
bG9hdFBvaW50IHBvczsKKyAgICAgICAgRmxvYXRQb2ludDNEIGFuY2hvclBvaW50OworICAgICAg
ICBGbG9hdFNpemUgc2l6ZTsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3Jt
OworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZHJlblRyYW5zZm9ybTsKKyAgICAg
ICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOworICAgICAgICBDb2xvciBjdXJyZW50Q29sb3I7Cisg
ICAgICAgIEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBn
ZW9PcmllbnRhdGlvbjsKKyAgICAgICAgR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGlu
YXRlc09yaWVudGF0aW9uIGNvbnRlbnRzT3JpZW50YXRpb247CisgICAgICAgIGZsb2F0IG9wYWNp
dHk7CisgICAgICAgIEludFJlY3QgY29udGVudHNSZWN0OworICAgICAgICBpbnQgZGVzY2VuZGFu
dHNXaXRoQ29udGVudDsKKyAgICAgICAgVGV4dHVyZU1hcHBlck5vZGUqIG1hc2tMYXllcjsKKyAg
ICAgICAgVGV4dHVyZU1hcHBlck5vZGUqIHJlcGxpY2FMYXllcjsKKyAgICAgICAgYm9vbCBwcmVz
ZXJ2ZXMzRDsKKyAgICAgICAgYm9vbCBtYXNrc1RvQm91bmRzOworICAgICAgICBib29sIGRyYXdz
Q29udGVudDsKKyAgICAgICAgYm9vbCBjb250ZW50c09wYXF1ZTsKKyAgICAgICAgYm9vbCBiYWNr
ZmFjZVZpc2liaWxpdHk7CisgICAgICAgIGJvb2wgdmlzaWJsZTsKKyAgICAgICAgYm9vbCBkaXJ0
eTsKKyAgICAgICAgYm9vbCB0aWxlZDsKKyAgICAgICAgYm9vbCBoYXNTdXJmYWNlRGVzY2VuZGFu
dHM7CisKKyAgICAgICAgU3RhdGUoKQorICAgICAgICAgICAgOiBvcGFjaXR5KDEuZikKKyAgICAg
ICAgICAgICwgZGVzY2VuZGFudHNXaXRoQ29udGVudCgwKQorICAgICAgICAgICAgLCBtYXNrTGF5
ZXIoMCkKKyAgICAgICAgICAgICwgcmVwbGljYUxheWVyKDApCisgICAgICAgICAgICAsIHByZXNl
cnZlczNEKGZhbHNlKQorICAgICAgICAgICAgLCBtYXNrc1RvQm91bmRzKGZhbHNlKQorICAgICAg
ICAgICAgLCBkcmF3c0NvbnRlbnQoZmFsc2UpCisgICAgICAgICAgICAsIGNvbnRlbnRzT3BhcXVl
KGZhbHNlKQorICAgICAgICAgICAgLCBiYWNrZmFjZVZpc2liaWxpdHkoZmFsc2UpCisgICAgICAg
ICAgICAsIHZpc2libGUodHJ1ZSkKKyAgICAgICAgICAgICwgZGlydHkodHJ1ZSkKKyAgICAgICAg
ICAgICwgdGlsZWQoZmFsc2UpCisgICAgICAgICAgICAsIGhhc1N1cmZhY2VEZXNjZW5kYW50cyhm
YWxzZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgfTsKKyAgICBTdGF0ZSBtX3N0YXRlOwor
fTsKKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEludFJl
Y3QgcmVjdCkKK3sKKyAgICBpZiAobV9wbGF0Zm9ybUNsaWVudCkgeworICAgICAgICBpZiAobV9z
dGF0ZS5oYXNTdXJmYWNlRGVzY2VuZGFudHMpIHsKKyAgICAgICAgICAgIG1fcGxhdGZvcm1DbGll
bnQtPnNldE5lZWRzRGlzcGxheSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIHJlY3QuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6
ZS5oZWlnaHQoKSkpOworICAgICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIG1fcGxhdGZvcm1DbGllbnQtPnNldE5lZWRzRGlzcGxheUluUmVjdChy
ZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9wYXJlbnQpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fcGFyZW50LT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7
Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAg
aWYgKG1fZWZmZWN0VGFyZ2V0KQorICAgICAgICBtX2VmZmVjdFRhcmdldC0+c2V0TmVlZHNEaXNw
bGF5KCk7CisgICAgaWYgKG1fdHJhbnNmb3Jtcy50YXJnZXRCb3VuZGluZ1JlY3QuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fc3RhdGUuZHJhd3NDb250ZW50IHx8IG1fY3Vy
cmVudENvbnRlbnQuY29udGVudFR5cGUgIT0gSFRNTENvbnRlbnRUeXBlKQorICAgICAgICBzZXRO
ZWVkc0Rpc3BsYXlJblJlY3QobV90cmFuc2Zvcm1zLnRhcmdldEJvdW5kaW5nUmVjdCk7Cit9CisK
Kwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0UGxhdGZvcm1MYXllckNsaWVudChUZXh0dXJl
TWFwcGVyTGF5ZXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICBtX3BsYXRmb3JtQ2xpZW50ID0gY2xp
ZW50OworfQorCitzdGF0aWMgaW50IGNvbXBhcmVHcmFwaGljc0xheWVyc1pWYWx1ZShjb25zdCB2
b2lkKiBwYSwgY29uc3Qgdm9pZCogcGIpCit7CisgICAgdHlwZWRlZiBjb25zdCBUZXh0dXJlTWFw
cGVyTm9kZSogcHRyOworICAgIGNvbnN0IHB0ciogYSA9IHN0YXRpY19jYXN0PGNvbnN0IHB0cio+
KHBhKTsKKyAgICBjb25zdCBwdHIqIGIgPSBzdGF0aWNfY2FzdDxjb25zdCBwdHIqPihwYik7Cisg
ICAgcmV0dXJuIGludCgoKCphKS0+bV90cmFuc2Zvcm1zLmNlbnRlclogLSAoKmIpLT5tX3RyYW5z
Zm9ybXMuY2VudGVyWikqMTAwMCk7Cit9CitpbmxpbmUgc3RhdGljIHZvaWQgc29ydEJ5Wk9yZGVy
KFZlY3RvcjxUZXh0dXJlTWFwcGVyTm9kZSogPiYgYXJyYXksIGludCBmaXJzdCwgaW50IGxhc3Qp
Cit7CisgICAgcXNvcnQoYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIHNpemVvZihUZXh0dXJl
TWFwcGVyTm9kZSopLCBjb21wYXJlR3JhcGhpY3NMYXllcnNaVmFsdWUpOworfQorCitib29sIFRl
eHR1cmVNYXBwZXJOb2RlOjpoYXNTdXJmYWNlRGVzY2VuZGFudHMoKSBjb25zdAoreworCisgICAg
aWYgKG1fbGF5ZXJUeXBlID09IENsaXBMYXllciB8fCBtX2xheWVyVHlwZSA9PSBUcmFuc3BhcmVu
Y3lMYXllciB8fCBtX3N0YXRlLnJlcGxpY2FMYXllcikKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgY29uc3QgaW50IHNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiBjaGlsZCA9
IG1fY2hpbGRyZW5baV0pCisgICAgICAgICAgICBpZiAoY2hpbGQtPmhhc1N1cmZhY2VEZXNjZW5k
YW50cygpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsK
KworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludChHcmFwaGljc0NvbnRleHQqIGdj
LCBjb25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJ
bnRSZWN0JiBleHBvc2VkUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9y
bSwgZmxvYXQgb3BhY2l0eSkKK3sKKyAgICAvLyBuZWVkcyBhY3RpdmUgY29udGV4dAorICAgIEFT
U0VSVChtX2xheWVyVHlwZSA9PSBSb290TGF5ZXIpOworICAgIGlmIChtX3NpemUuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisKKyNpZiAwCisgICAgV1RGOjpTdG9wV2F0Y2ggc3RvcFdhdGNo
OworICAgIHByaW50ZigiW1RleHR1cmVNYXBwZXJdIFJvb3RQYWludCEhXG4iKTsKKyNlbmRpZgor
CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXI+IHRleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVy
OjpjcmVhdGUoZ2MpOworCisgICAgaWYgKHRleHR1cmVNYXBwZXItPnR5cGUoKSAhPSBtX2xhc3RU
ZXh0dXJlTWFwcGVyVHlwZSkKKyAgICAgICAgZ1RleHR1cmVNYXBwZXJDYWNoZS5tX2RhdGEuY2xl
YXIoKTsKKworICAgIG1fbGFzdFRleHR1cmVNYXBwZXIgPSB0ZXh0dXJlTWFwcGVyOworICAgIFRl
eG1hcFBhaW50T3B0aW9ucyBvcHQ7CisgICAgb3B0Lm9wYWNpdHkgPSAxOworICAgIG9wdC5yb290
TGF5ZXIgPSB0aGlzOworICAgIG9wdC5zY2lzc29yUmVjdCA9IHRhcmdldFJlY3Q7CisgICAgb3B0
LnZpc2libGVSZWN0ID0gZXhwb3NlZFJlY3Q7CisgICAgb3B0LnRleHR1cmVNYXBwZXIgPSB0ZXh0
dXJlTWFwcGVyLmdldCgpOworICAgIG9wdC5nYyA9IHRleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29u
dGV4dCgpOworICAgIG9wdC5zdXJmYWNlID0gMDsKKyAgICBwYWludFJlY3Vyc2l2ZShvcHQpOwor
CisgICAgaWYgKHRleHR1cmVNYXBwZXItPmFsbG93U3VyZmFjZUZvclJvb3QoKSB8fCBtX3N0YXRl
Lmhhc1N1cmZhY2VEZXNjZW5kYW50cykgeworICAgICAgICB0ZXh0dXJlTWFwcGVyLT5iaW5kU3Vy
ZmFjZSgwKTsKKyAgICAgICAgdGV4dHVyZU1hcHBlci0+cGFpbnRUb1RhcmdldCgqbV9zdXJmYWNl
LmdldCgpLCBzaXplLCB0cmFuc2Zvcm0sIG9wYWNpdHkgKiBtX3N0YXRlLm9wYWNpdHksIHRhcmdl
dFJlY3QpOworICAgIH0KKyAgICBnVGV4dHVyZU1hcHBlckNhY2hlLnB1cmdlKCk7CisjaWYgMAor
ICAgIHsKKyAgICAgICAgc3RhdGljIGludCByb290Q291bnQgPSAwOworICAgICAgICBwcmludGYo
IltUZXh0dXJlTWFwcGVyXSBSb290UGFpbnQoJWQpICVkIGxheWVyKCVwKSAoJWQrJWQgJWR4JWQp
IFslZG1zXVxuIiwgKytyb290Q291bnQsIHRleHR1cmVNYXBwZXItPmFsbG93U3VyZmFjZUZvclJv
b3QoKSwKKyAgICAgICAgICAgICAgIHRoaXMsIGV4cG9zZWRSZWN0LngoKSwgZXhwb3NlZFJlY3Qu
eSgpLCBleHBvc2VkUmVjdC53aWR0aCgpLCBleHBvc2VkUmVjdC5oZWlnaHQoKSwgCisgICAgICAg
ICAgICAgICBpbnQoc3RvcFdhdGNoLmVsYXBzZWQoKSAqIDEwMDApKTsKKyNpZiAwCisgICAgICAg
IGlmICh0ZXh0dXJlTWFwcGVyLT5hbGxvd1N1cmZhY2VGb3JSb290KCkpCisgICAgICAgICAgICBt
X3N1cmZhY2UtPnNhdmUoU3RyaW5nKCkuZm9ybWF0KCIvdG1wL3Jvb3RfJWQucG5nIiwgcm9vdENv
dW50KSk7CisjZW5kaWYKKyAgICB9CisjZW5kaWYKK30KKworaW50IFRleHR1cmVNYXBwZXJOb2Rl
Ojpjb3VudERlc2NlbmRhbnRzV2l0aENvbnRlbnQoKSBjb25zdAoreworICAgIGlmICghbV9zdGF0
ZS52aXNpYmxlIHx8IG1fc3RhdGUub3BhY2l0eSA8IDAuMDAxKQorICAgICAgICByZXR1cm4gMDsK
KyAgICBpbnQgZGVzY2VuZGFudHNXaXRoQ29udGVudCA9IChtX3N0YXRlLmRyYXdzQ29udGVudCB8
fCBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlICE9IEhUTUxDb250ZW50VHlwZSkgPyAxIDog
MDsKKworICAgIGNvbnN0IGludCBzaXplID0gbV9jaGlsZHJlbi5zaXplKCk7CisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSog
Y2hpbGQgPSBtX2NoaWxkcmVuW2ldKQorICAgICAgICAgICAgZGVzY2VuZGFudHNXaXRoQ29udGVu
dCArPSBjaGlsZC0+Y291bnREZXNjZW5kYW50c1dpdGhDb250ZW50KCk7CisKKyAgICByZXR1cm4g
ZGVzY2VuZGFudHNXaXRoQ29udGVudDsKK30KKworaW5saW5lIFRleHR1cmVNYXBwZXJOb2RlKiBU
ZXh0dXJlTWFwcGVyTm9kZTo6dG9UZXh0dXJlTWFwcGVyTm9kZShHcmFwaGljc0xheWVyKiBsYXll
cikKK3sKKyAgICByZXR1cm4gbGF5ZXIgPyBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcio+KGxheWVyKS0+bV9ub2RlLmdldCgpIDogMDsKK30KKwordm9pZCBUZXh0dXJlTWFw
cGVyTm9kZTo6Y29tcHV0ZUxheWVyVHlwZSgpCit7CisgICAgLyogY2FsY3VsYXRlIGxheWVyIHR5
cGUuIEEgbGF5ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICBSb290TGF5
ZXI6IHRoZSB0b3AgbGV2ZWwuIERyYXdzIHRvIGEgZnJhbWVidWZmZXIsIGFuZCB0aGUgdGFyZ2V0
IHRleHR1cmUgZHJhd3MgaW50byB0aGUgdmlld3BvcnQuCisgICAgICAgICAgICAgICAgICAgb25s
eSBvbmUgbGF5ZXIgaXMgdGhlIHJvb3QgbGF5ZXIuCisgICAgICAgIFNjaXNzb3JMYXllcjogZHJh
d3MgdG8gdGhlIGN1cnJlbnQgZnJhbWVidWZmZXIsIGFuZCBhcHBsaWVzIGFuIGV4dHJhIHNjaXNz
b3IgYmVmb3JlIGRyYXdpbmcgaXRzIGNoaWxkcmVuLgorICAgICAgICAgICAgICAgICAgICAgIEEg
c2Npc3NvciBsYXllciBpcyBhIGxheWVyIHdpdGggY2hpbGRyZW4gdGhhdCBtYXNrcyB0byBib3Vu
ZHMsIGlzIG5vdCBhIHRyYW5zcGFyZW5jeSBsYXllciwgYW5kIGhhcyBhIHJlY3Rhbmd1bGFyIGNs
aXAuCisgICAgICAgIENsaXBMYXllcjogY3JlYXRlcyBhIG5ldyBmcmFtZWJ1ZmZlciwgdGhlIHNp
emUgb2YgdGhlIGxheWVyLCBhbmQgdGhlbiBwYWludHMgaXQgdG8gdGhlIGVuY2xvc2luZyBCaXRt
YXBUZXh0dXJlIHdpdGggdGhlIGxheWVyJ3MgdHJhbnNmb3JtL29wYWNpdHkuCisgICAgICAgICAg
ICAgICAgICAgIEEgY2xpcCBsYXllciBpcyBhIGxheWVyIHRoYXQgbWFza3MgdG8gYm91bmRzLCBk
b2Vzbid0IHByZXNlcnZlIDNELCBoYXMgY2hpbGRyZW4sIGFuZCBoYXMgYSB0cmFuc3BhcmVuY3kv
bWFzayBvciBhIG5vbi1yZWN0YW5ndWxhciB0cmFuc2Zvcm0uCisgICAgICAgIFRyYW5zcGFyZW5j
eUxheWVyOiBjcmVhdGVzIGEgbmV3IGZyYW1lYnVmZmVyIGlkZXRpY2FsIGluIHNpemUgdG8gdGhl
IGN1cnJlbnQgZnJhbWVidWZmZXIuIFRoZW4gZHJhd3MgdGhlIGZiJ3MgdGV4dHVyZSB0byB0aGUg
Y3VycmVudCBmcmFtZWJ1ZmZlciB3aXRoIGlkZW50aXR5IHRyYW5zZm9ybS4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFVzZWQgZm9yIGxheWVycyB3aXRoIGNoaWxkcmVuIGFuZCB0cmFuc3Bh
cmVuY3kvbWFzayB0aGF0IHByZXNlcnZlIDNEIG9yIGRvbid0IG1hc2sgdG8gYm91bmRzLgorICAg
ICAgICBEZWZhdWx0TGF5ZXI6IGRyYXdzIGl0c2VsZiBhbmQgaXRzIGNoaWxkcmVuIGRpcmVjdGx5
IHRvIHRoZSBjdXJyZW50IGZyYW1lYnVmZmVyLgorICAgICAgICAgICAgICAgICAgICAgIGFueSBs
YXllciB0aGF0IGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgb3RoZXIgcnVsZXMgaXMgYSBEZWZhdWx0
TGF5ZXIuCisgICAgKi8KKworICAgIGNvbnN0IGJvb2wgc2VsZkhhc0NvbnRlbnQgPSBtX3N0YXRl
LmRyYXdzQ29udGVudCB8fCAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSAhPSBIVE1MQ29u
dGVudFR5cGUpOworICAgIGNvbnN0IGJvb2wgaGFzRGVzY2VuZGFudHNXaXRoQ29udGVudCA9IG1f
c3RhdGUuZGVzY2VuZGFudHNXaXRoQ29udGVudCAtIChzZWxmSGFzQ29udGVudCA/IDEgOiAwKTsK
KyAgICBjb25zdCBib29sIGhhc1RyYW5zcGFyZW5jeSA9IG1fc3RhdGUub3BhY2l0eSA8IDAuOTkg
fHwgbV9zdGF0ZS5tYXNrTGF5ZXI7CisgICAgY29uc3QgYm9vbCBoYXNSZXBsaWNhID0gbV9zdGF0
ZS5yZXBsaWNhTGF5ZXI7CisgICAgbV9sYXllclR5cGUgPSBEZWZhdWx0TGF5ZXI7CisKKyAgICAv
LyBMYXllciBoYXMgbm8gcGFyZW50LCBpdCBtdXN0IGJlIGEgcm9vdCBsYXllci4KKyAgICBpZiAo
IW1fcGFyZW50ICYmICFtX2VmZmVjdFRhcmdldCkgeworICAgICAgICBtX2xheWVyVHlwZSA9IFJv
b3RMYXllcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEEgbGF5ZXIgd2l0aCBu
byBjb250ZW50cyBpcyBhbHdheXMgYSBkZWZhdWx0IGxheWVyLgorICAgIGlmICghbV9zdGF0ZS5k
ZXNjZW5kYW50c1dpdGhDb250ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBBIGxheWVy
IHdpdGggY29udGVudC1kZXNjZW5kYW50cyBhbmQgYSBtYXNrIGlzIGFsd2F5cyBhIGNsaXAgbGF5
ZXIuCisgICAgaWYgKGhhc0Rlc2NlbmRhbnRzV2l0aENvbnRlbnQgJiYgbV9zdGF0ZS5tYXNrTGF5
ZXIpIHsKKyAgICAgICAgbV9sYXllclR5cGUgPSBDbGlwTGF5ZXI7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBBIG1hc2tzLXRvIGJvdW5kcyBsYXllciBjYW4gYmUgYSBjbGlwIG9y
IGEgc2Npc3NvciBsYXllci4gSXQncyBhIHNjaXNzb3IgbGF5ZXIgb25seSBpZiBpdCBoYXMgYSB0
cml2aWFsIGNsaXAgKGlkZW50aXR5IG9yIHRyYW5zbGF0aW9uKSwgb3IgaWYgaXQgaGFzIHRyYW5z
cGFyZW5jeS4KKyAgICAvLyBUaGF0J3MgYmVjYXVzZSBhIENsaXBMYXllciB3b3VsZCBjcmVhdGUg
YW4gaW50ZXJtZWRpYXRlIGRyYXdpbmcgc3VyZmFjZSAoRkIpIC0gd2Ugd2FudCB0byBsaW1pdCBp
dCB0byB3aGVuIGl0J3MgYWN0dWFsbHkgbmVjZXNzYXJ5LCBpLmUuIHRyYW5zcGFyZW5jeSBvciBu
b24tdHJpdmlhbCBjbGlwLgorICAgIGlmIChtX3N0YXRlLm1hc2tzVG9Cb3VuZHMgJiYgaGFzRGVz
Y2VuZGFudHNXaXRoQ29udGVudCkgeworICAgICAgICBpZiAoaGFzVHJhbnNwYXJlbmN5IHx8ICFt
X3N0YXRlLnRyYW5zZm9ybS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpIHx8IG1fcGFyZW50LT5t
X3N0YXRlLnByZXNlcnZlczNEKQorICAgICAgICAgICAgbV9sYXllclR5cGUgPSBDbGlwTGF5ZXI7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbGF5ZXJUeXBlID0gU2Npc3NvckxheWVyOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgdXNlIGEgdHJhbnNwYXJlbmN5IGxh
eWVyIHdoZW4gd2UgaGF2ZSB0d28gb2YgdGhlIGZvbGxvd2luZyAzOiByZXBsaWNhLCB0cmFuc3Bh
cmVuY3ksIGRlc2NlbmRhbnRzIHdpdGggY29udGVudHMuCisgICAgaWYgKChoYXNSZXBsaWNhICYm
IGhhc0Rlc2NlbmRhbnRzV2l0aENvbnRlbnQpIHx8IChoYXNSZXBsaWNhICYmIGhhc1RyYW5zcGFy
ZW5jeSkgfHwgKGhhc1RyYW5zcGFyZW5jeSAmJiBtX3N0YXRlLmRlc2NlbmRhbnRzV2l0aENvbnRl
bnQgPiAxKSkKKyAgICAgICAgbV9sYXllclR5cGUgPSBUcmFuc3BhcmVuY3lMYXllcjsKK30KK3Zv
aWQgVGV4dHVyZU1hcHBlck5vZGU6OmluaXRpYWxpemVUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBw
ZXIqIHRleHR1cmVNYXBwZXIpCit7CisgICAgLy8gbmVlZHMgYWN0aXZlIGNvbnRleHQKKyAgICBp
ZiAodGV4dHVyZU1hcHBlci0+dHlwZSgpID09IG1fbGFzdFRleHR1cmVNYXBwZXJUeXBlKQorICAg
ICAgICByZXR1cm47CisjaWYgMAorICAgIGlmIChtX2xheWVyVHlwZSA9PSBDbGlwTGF5ZXIgfHwg
bV9sYXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIKKyAgICAgICAgfHwgKG1fbGF5ZXJUeXBl
ID09IFJvb3RMYXllciAmJiB0ZXh0dXJlTWFwcGVyLT5hbGxvd1N1cmZhY2VGb3JSb290KCkpKQor
ICAgICAgICBtX3N1cmZhY2UgPSB0ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CisgICAg
ZWxzZSBpZiAobV9zdXJmYWNlKQorICAgICAgICBtX3N1cmZhY2UtPmRlc3Ryb3koKTsKKyAgICBp
ZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIG1fcmVwbGljYVN1cmZhY2UgPSB0ZXh0
dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CisgICAgZWxzZSBpZiAobV9yZXBsaWNhU3VyZmFj
ZSkKKyAgICAgICAgbV9yZXBsaWNhU3VyZmFjZS0+ZGVzdHJveSgpOworI2Vsc2UKKyAgICBtX3N1
cmZhY2UgPSB0ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CisgICAgbV9yZXBsaWNhU3Vy
ZmFjZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyNlbmRpZgorICAgIG1fdGV4
dHVyZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICBnVGV4dHVyZU1hcHBl
ckNhY2hlLm1hcmsobV90ZXh0dXJlLmdldCgpKTsKKyAgICBtX2xhc3RUZXh0dXJlTWFwcGVyVHlw
ZSA9IHRleHR1cmVNYXBwZXItPnR5cGUoKTsKK30KKworVGV4dHVyZU1hcHBlck5vZGU6OlRleHR1
cmVNYXBwZXJOb2RlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBuZXdMYXllcikKKyAgICA6
IG1fbGF5ZXIobmV3TGF5ZXIpCisgICAgLCBtX2xhc3RUZXh0dXJlTWFwcGVyVHlwZSgwKQorICAg
ICwgbV9sYXN0VGV4dHVyZU1hcHBlcigwKQorICAgICwgbV9sYXllclR5cGUoRGVmYXVsdExheWVy
KQorI2lmIEVOQUJMRV9URVhNQVBfQU5JTUFUSU9OCisgICAgLCBtX25vdGlmeUFuaW1hdGlvblN0
YXJ0ZWRUaW1lcih0aGlzLCAmVGV4dHVyZU1hcHBlck5vZGU6Om5vdGlmeUFuaW1hdGlvblN0YXJ0
ZWRUaW1lckZpcmVkKQorI2VuZGlmCisgICAgLCBtX3N1cmZhY2UoMCkKKyAgICAsIG1fcGFyZW50
KDApCisgICAgLCBtX2VmZmVjdFRhcmdldCgwKQorICAgICwgbV9jaGFuZ2VNYXNrKE5vQ2hhbmdl
cykKKyAgICAsIG1fcGxhdGZvcm1DbGllbnQoMCkKK3sKKworfQorCitUZXh0dXJlTWFwcGVyTm9k
ZSogVGV4dHVyZU1hcHBlck5vZGU6OnJvb3RMYXllcigpCit7CisgICAgaWYgKG1fZWZmZWN0VGFy
Z2V0KQorICAgICAgICByZXR1cm4gbV9lZmZlY3RUYXJnZXQtPnJvb3RMYXllcigpOworICAgIGlm
IChtX3BhcmVudCkKKyAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5yb290TGF5ZXIoKTsKKyAgICBy
ZXR1cm4gdGhpczsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6aW52YWxpZGF0ZVRyYW5z
Zm9ybSgpCit7CisgICAgbV90cmFuc2Zvcm1zLmRpcnR5ID0gdHJ1ZTsKKyAgICBpZiAobV9sYXll
clR5cGUgIT0gQ2xpcExheWVyKQorICAgICAgICBtX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKKyAgICBp
ZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5p
bnZhbGlkYXRlVHJhbnNmb3JtKCk7CisgICAgY29uc3QgaW50IHNpemUgPSBtX2NoaWxkcmVuLnNp
emUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgaWYgKFRl
eHR1cmVNYXBwZXJOb2RlKiBsYXllciA9IG1fY2hpbGRyZW5baV0pCisgICAgICAgICAgICBsYXll
ci0+aW52YWxpZGF0ZVRyYW5zZm9ybSgpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpj
b21wdXRlTG9jYWxUcmFuc2Zvcm0oKQoreworICAgIGlmICghbV90cmFuc2Zvcm1zLmxvY2FsRGly
dHkpCisgICAgICAgIHJldHVybjsKKyAgICBjb25zdCBmbG9hdCBvcmlnaW5YID0gbV9zdGF0ZS5h
bmNob3JQb2ludC54KCkgKiBtX3NpemUud2lkdGgoKTsKKyAgICBjb25zdCBmbG9hdCBvcmlnaW5Z
ID0gbV9zdGF0ZS5hbmNob3JQb2ludC55KCkgKiBtX3NpemUuaGVpZ2h0KCk7CisgICAgbV90cmFu
c2Zvcm1zLmxvY2FsID0KKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoKQorICAgICAgICAu
dHJhbnNsYXRlM2Qob3JpZ2luWCArIG1fc3RhdGUucG9zLngoKSwgb3JpZ2luWSArIG1fc3RhdGUu
cG9zLnkoKSwgbV9zdGF0ZS5hbmNob3JQb2ludC56KCkpCisjaWYgRU5BQkxFX1RFWE1BUF9BTklN
QVRJT04KKyAgICAgICAgLm11bHRMZWZ0KG1fYW5pbS50cmFuc2Zvcm1BbmltYXRpb25SdW5uaW5n
ID8gbV9hbmltLnRyYW5zZm9ybSA6IG1fc3RhdGUudHJhbnNmb3JtKQorI2Vsc2UKKyAgICAgICAg
Lm11bHRMZWZ0KG1fc3RhdGUudHJhbnNmb3JtKQorI2VuZGlmCisgICAgICAgIC50cmFuc2xhdGUz
ZCgtb3JpZ2luWCwgLW9yaWdpblksIC1tX3N0YXRlLmFuY2hvclBvaW50LnooKSk7CisgICAgbV90
cmFuc2Zvcm1zLmxvY2FsRGlydHkgPSBmYWxzZTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9k
ZTo6ZmxhdHRlblRvMkRTcGFjZUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAobV9zdGF0ZS5wcmVz
ZXJ2ZXMzRCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50
cy5zZXRNMTMoMCk7CisgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE0yMygwKTsK
KyAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTMxKDApOworICAgIG1fdHJhbnNm
b3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNMzIoMCk7CisgICAgbV90cmFuc2Zvcm1zLmZvckRlc2Nl
bmRhbnRzLnNldE0zMygxKTsKKyAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTM0
KDApOworICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNNDMoMCk7Cit9CisKK0lu
dFNpemUgVGV4dHVyZU1hcHBlck5vZGU6Om5lYXJlc3RTdXJmYWNlU2l6ZSgpIGNvbnN0Cit7Cisg
ICAgaWYgKG1fbGF5ZXJUeXBlID09IENsaXBMYXllciB8fCBtX2xheWVyVHlwZSA9PSBSb290TGF5
ZXIpCisgICAgICAgIHJldHVybiBtX3N1cmZhY2UgJiYgIW1fc3VyZmFjZS0+c2l6ZSgpLmlzRW1w
dHkoKSA/IG1fc3VyZmFjZS0+c2l6ZSgpIDogbV9zaXplOworICAgIHJldHVybiBtX3BhcmVudC0+
bmVhcmVzdFN1cmZhY2VTaXplKCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1
dGVSZXBsaWNhVHJhbnNmb3JtKCkKK3sKKyAgICBpZiAoIW1fc3RhdGUucmVwbGljYUxheWVyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX25lYXJlc3RTdXJmYWNlU2l6ZSA9IG5lYXJlc3RTdXJm
YWNlU2l6ZSgpOworCisgICAgaWYgKG1fbGF5ZXJUeXBlICE9IFRyYW5zcGFyZW5jeUxheWVyKSB7
CisgICAgICAgIG1fdHJhbnNmb3Jtcy5yZXBsaWNhID0gVHJhbnNmb3JtYXRpb25NYXRyaXgobV90
cmFuc2Zvcm1zLnRhcmdldCkubXVsdExlZnQobV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fdHJhbnNm
b3Jtcy5sb2NhbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBmbG9hdCBv
cmlnaW5YID0gbV90cmFuc2Zvcm1zLnRhcmdldC5tNDEoKTsKKyAgICBjb25zdCBmbG9hdCBvcmln
aW5ZID0gbV90cmFuc2Zvcm1zLnRhcmdldC5tNDIoKTsKKyAgICBtX3RyYW5zZm9ybXMucmVwbGlj
YSA9CisgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpCisgICAgICAgICAgICAgICAg
LnRyYW5zbGF0ZShvcmlnaW5YLCBvcmlnaW5ZKQorICAgICAgICAgICAgICAgIC5tdWx0TGVmdCht
X3N0YXRlLnJlcGxpY2FMYXllci0+bV90cmFuc2Zvcm1zLmxvY2FsKQorICAgICAgICAgICAgICAg
IC50cmFuc2xhdGUoLW9yaWdpblgsIC1vcmlnaW5ZKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6Y29tcHV0ZVRyYW5zZm9ybWF0aW9ucygpCit7CisgICAgaWYgKCFtX3RyYW5zZm9ybXMu
ZGlydHkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdHJhbnNmb3Jtcy5kaXJ0eSA9IGZhbHNl
OworICAgIGlmICgobV9zaXplLmlzRW1wdHkoKSAmJiBtX3N0YXRlLm1hc2tzVG9Cb3VuZHMpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogcGFyZW50ID0gbV9wYXJl
bnQ7CisgICAgY29tcHV0ZUxvY2FsVHJhbnNmb3JtKCk7CisKKyAgICBtX3RyYW5zZm9ybXMudGFy
Z2V0ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgocGFyZW50ID8gcGFyZW50LT5tX3RyYW5zZm9ybXMu
Zm9yRGVzY2VuZGFudHMgOiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKS5tdWx0TGVmdChtX3RyYW5z
Zm9ybXMubG9jYWwpOworICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cyA9IChtX2xheWVy
VHlwZSA9PSBDbGlwTGF5ZXIgPyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpIDogbV90cmFuc2Zvcm1z
LnRhcmdldCk7CisKKyAgICBpZiAobV9lZmZlY3RUYXJnZXQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fdHJhbnNmb3Jtcy50YXJnZXRCb3VuZGluZ1JlY3QgPSBJbnRSZWN0KG1fdHJhbnNmb3Jt
cy50YXJnZXQubWFwUmVjdChmdWxsUmVjdCgpKSk7CisgICAgaWYgKG1fc3RhdGUucmVwbGljYUxh
eWVyKQorICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+Y29tcHV0ZVRyYW5zZm9ybWF0aW9u
cygpOworCisgICAgZmxhdHRlblRvMkRTcGFjZUlmTmVjZXNzYXJ5KCk7CisKKyAgICBpZiAoIW1f
c3RhdGUuYmFja2ZhY2VWaXNpYmlsaXR5ICYmIG1fdHJhbnNmb3Jtcy50YXJnZXQuaW52ZXJzZSgp
Lm0zMygpIDwgMCkgeworICAgICAgICBtX3N0YXRlLnZpc2libGUgPSBmYWxzZTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBtX3N0YXRlLnZpc2libGUgPSB0cnVlOworCisgICAgaWYgKHBh
cmVudCAmJiBwYXJlbnQtPm1fc3RhdGUucHJlc2VydmVzM0QpCisgICAgICAgIG1fdHJhbnNmb3Jt
cy5jZW50ZXJaID0gbV90cmFuc2Zvcm1zLnRhcmdldC5tYXBQb2ludChGbG9hdFBvaW50M0QobV9z
aXplLndpZHRoKCkgLyAyLCBtX3NpemUuaGVpZ2h0KCkgLyAyLCAwKSkueigpOworCisgICAgaWYg
KCFtX2NoaWxkcmVuLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc3RhdGUu
Y2hpbGRyZW5UcmFuc2Zvcm0uaXNJZGVudGl0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBj
b25zdCBGbG9hdFBvaW50IGNlbnRlclBvaW50ID0gRmxvYXRQb2ludChtX3NpemUud2lkdGgoKSAv
IDIsIG1fc2l6ZS5oZWlnaHQoKSAvIDIpOworICAgIGlmIChtX3RyYW5zZm9ybXMucGVyc3BlY3Rp
dmVEaXJ0eSkKKyAgICAgICAgbV90cmFuc2Zvcm1zLnBlcnNwZWN0aXZlID0gVHJhbnNmb3JtYXRp
b25NYXRyaXgoKQorICAgICAgICAgICAgLnRyYW5zbGF0ZShjZW50ZXJQb2ludC54KCksIGNlbnRl
clBvaW50LnkoKSkKKyAgICAgICAgICAgIC5tdWx0TGVmdChtX3N0YXRlLmNoaWxkcmVuVHJhbnNm
b3JtKQorICAgICAgICAgICAgLnRyYW5zbGF0ZSgtY2VudGVyUG9pbnQueCgpLCAtY2VudGVyUG9p
bnQueSgpKTsKKyAgICBtX3RyYW5zZm9ybXMucGVyc3BlY3RpdmVEaXJ0eSA9IGZhbHNlOworICAg
IG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5tdWx0TGVmdChtX3RyYW5zZm9ybXMucGVyc3Bl
Y3RpdmUpOworfQorCisjaWYgREVCVUdfVEVYTUFQX0ZQUwordm9pZCBUZXh0dXJlTWFwcGVyTm9k
ZTo6YmVnaW5BbmltYXRpb24oQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5KQoreworICAgIEFT
U0VSVCghbV9hbmltX2Zwcy5nZXQocHJvcGVydHkpKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkFu
aW1hdGlvblN0YXJ0ZWQoJXApOiAlZFxuIiwgdGhpcywgcHJvcGVydHkpOworICAgIG1fYW5pbV9m
cHMuc2V0KHByb3BlcnR5LCBuZXcgR3JhcGhpY3NMYXllckFuaW1hdGlvbigpKTsKK30KKwordm9p
ZCBUZXh0dXJlTWFwcGVyTm9kZTo6ZW5kQW5pbWF0aW9uKEFuaW1hdGVkUHJvcGVydHlJRCBwcm9w
ZXJ0eSkKK3sKKyAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9uKiBhbmltID0gbV9hbmltX2Zwcy50
YWtlKHByb3BlcnR5KTsKKyAgICBBU1NFUlQoYW5pbSk7CisgICAgaWYgKGFuaW0pIHsKKyAgICAg
ICAgY29uc3QgZG91YmxlIGR1cmF0aW9uID0gV1RGOjpjdXJyZW50VGltZSgpLWFuaW0tPnN0YXJ0
ZWQ7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQW5pbWF0aW9uRW5kZWQoJXApOiAlZDogWyVm
XSBbJWQgZnJhbWVzXSBbJWYgRlBTXVxuIiwgdGhpcywgcHJvcGVydHksIGR1cmF0aW9uLCAKKyAg
ICAgICAgICAgICAgICBhbmltLT5mcmFtZXMsICgxMDAwIC8gKChkdXJhdGlvbioxMDAwKSAvIGFu
aW0tPmZyYW1lcykpICk7CisgICAgfQorfQorI2VuZGlmCisKK3ZvaWQgVGV4dHVyZU1hcHBlck5v
ZGU6OnVwbG9hZFRleHR1cmVGcm9tQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVy
KQoreworICAgIC8vIG5lZWRzIGFjdGl2ZSBjb250ZXh0CisgICAgaWYgKG1fc2l6ZS5pc0VtcHR5
KCkgfHwgIW1fbGF5ZXIpIHsKKyAgICAgICAgbV90ZXh0dXJlLT5kZXN0cm95KCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9
PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlKSB7CisgICAgICAgIGlmIChtX2N1cnJlbnRDb250ZW50
LmltYWdlKQorICAgICAgICAgICAgbV90ZXh0dXJlLT5zZXRDb250ZW50c1RvSW1hZ2UobV9jdXJy
ZW50Q29udGVudC5pbWFnZS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBNZWRpYUNvbnRlbnRUeXBlKSB7Cisg
ICAgICAgIGlmICghbV9jdXJyZW50Q29udGVudC5tZWRpYSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgbV90ZXh0dXJlLT5yZXNldChtX3NpemUsIHRydWUpOworICAgICAgICBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dCogcGdjID0gbV90ZXh0dXJlLT5iZWdpblBhaW50TWVkaWEoKTsKKyAg
ICAgICAgR3JhcGhpY3NDb250ZXh0IGdjKHBnYyk7CisgICAgICAgIG1fY3VycmVudENvbnRlbnQu
bWVkaWEtPnBhaW50KCZnYyk7CisgICAgICAgIG1fdGV4dHVyZS0+ZW5kUGFpbnQoKTsKKyAgICB9
CisKKyAgICBjb25zdCBib29sIG5lZWRzUmVzZXQgPSAobV90ZXh0dXJlLT5jb250ZW50U2l6ZSgp
ICE9IG1fc2l6ZSkgfHwgIW1fdGV4dHVyZS0+aXNWYWxpZCgpOworICAgIGlmICgobV9jdXJyZW50
Q29udGVudC5jb250ZW50VHlwZSAhPSBIVE1MQ29udGVudFR5cGUpCisgICAgICAgIHx8ICghbV9j
dXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgJiYgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3Bs
YXlSZWN0LmlzRW1wdHkoKSAmJiAhbmVlZHNSZXNldCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFdURjo6U3RvcFdhdGNoIHN0b3BXYXRjaDsKKyAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IEludFJl
Y3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgaWYgKCFuZWVk
c1Jlc2V0ICYmICFtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSkKKyAgICAgICAgZGlydHlS
ZWN0LmludGVyc2VjdChtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QpOworICAgIGlm
IChuZWVkc1Jlc2V0KQorICAgICAgICBtX3RleHR1cmUtPnJlc2V0KG1fc2l6ZSwgbV9zdGF0ZS5j
b250ZW50c09wYXF1ZSk7CisKKyAgICB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhtX3Rl
eHR1cmUtPmJlZ2luUGFpbnQoZGlydHlSZWN0KSk7CisgICAgICAgIGlmICh0ZXh0dXJlTWFwcGVy
ICYmIHRleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dCgpKSB7CisgICAgICAgICAgICBHcmFw
aGljc0NvbnRleHQqIG9yaWdpbmFsR0MgPSB0ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQo
KTsKKyAgICAgICAgICAgIGdjLnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkob3JpZ2luYWxH
Qy0+aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICAgICAgICAgIGdjLnNldFRleHRE
cmF3aW5nTW9kZShvcmlnaW5hbEdDLT50ZXh0RHJhd2luZ01vZGUoKSk7CisgICAgICAgIH0KKyAg
ICAgICAgbV9sYXllci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoZ2MsIGRpcnR5UmVjdCk7
CisgICAgfQorICAgIG1fdGV4dHVyZS0+ZW5kUGFpbnQoKTsKKyAgICB7CisgICAgICAgIHN0YXRp
YyBpbnQgcmVuZGVyQ291bnQgPSAwOworICAgICAgICBwcmludGYoIltUZXh0dXJlTWFwcGVyXSBS
ZS1yZW5kZXIoJWQpIGxheWVyKCVwKSAlZDo6JWQ6OiVkICglZHglZCkgWyVkbXNdXG4iLCArK3Jl
bmRlckNvdW50LCB0aGlzLAorICAgICAgICAgICAgICAgbmVlZHNSZXNldCwgbV9jdXJyZW50Q29u
dGVudC5uZWVkc0Rpc3BsYXksICFtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QuaXNF
bXB0eSgpLAorICAgICAgICAgICAgICAgZGlydHlSZWN0LndpZHRoKCksIGRpcnR5UmVjdC5oZWln
aHQoKSwgaW50KHN0b3BXYXRjaC5lbGFwc2VkKCkgKiAxMDAwKSk7CisjaWYgMAorICAgICAgICBt
X3RleHR1cmUtPnNhdmUoU3RyaW5nKCkuZm9ybWF0KCIvdG1wL2xheWVyXyVkLnBuZyIsIHJlbmRl
ckNvdW50KSk7CisjZW5kaWYKKyAgICB9CisKKyAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlz
cGxheVJlY3QgPSBJbnRSZWN0KCk7CisgICAgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkg
PSBmYWxzZTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRTZWxmKFRleHR1cmVN
YXBwZXIqIHRleHR1cmVNYXBwZXIsIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2tU
ZXh0dXJlLCBCaXRtYXBUZXh0dXJlKiByZXBsaWNhTWFza1RleHR1cmUsIGJvb2wgaXNTdXJmYWNl
KQoreworICAgIC8vIG5lZWRzIGFjdGl2ZSBjb250ZXh0CisgICAgaWYgKCFtX2xheWVyIHx8IG1f
c2l6ZS5pc0VtcHR5KCkgfHwgKCFtX3N0YXRlLmRyYXdzQ29udGVudCAmJiBtX2N1cnJlbnRDb250
ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSkpCisgICAgICAgIHJldHVybjsKKyAg
ICB1cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQodGV4dHVyZU1hcHBlcik7CisgICAgaWYgKG1fc3Rh
dGUucmVwbGljYUxheWVyICYmICFpc1N1cmZhY2UpCisgICAgICAgIHRleHR1cmVNYXBwZXItPmRy
YXdUZXh0dXJlKCptX3RleHR1cmUuZ2V0KCksIHJlcGxpY2FSZWN0KCksIG1fdHJhbnNmb3Jtcy5y
ZXBsaWNhLAorICAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHkgKiBtX3N0YXRlLnJlcGxp
Y2FMYXllci0+bV9zdGF0ZS5vcGFjaXR5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXBs
aWNhTWFza1RleHR1cmUgPyByZXBsaWNhTWFza1RleHR1cmUgOiBtYXNrVGV4dHVyZSk7CisKKwor
ICAgIGNvbnN0IEludFJlY3QgcmVjdCA9IG1fbGF5ZXJUeXBlID09IENsaXBMYXllciA/IGZ1bGxS
ZWN0KCkgOiB0YXJnZXRSZWN0KCk7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJh
bnNmb3JtID0gbV9sYXllclR5cGUgPT0gQ2xpcExheWVyID8gVHJhbnNmb3JtYXRpb25NYXRyaXgo
KSA6IG1fdHJhbnNmb3Jtcy50YXJnZXQ7CisgICAgdGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUo
Km1fdGV4dHVyZS5nZXQoKSwgcmVjdCwgdHJhbnNmb3JtLCBvcGFjaXR5LCBpc1N1cmZhY2UgPyAw
IDogbWFza1RleHR1cmUpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludFJlY3Vy
c2l2ZShUZXhtYXBQYWludE9wdGlvbnMgb3B0aW9ucykKK3sKKyAgICAvLyBuZWVkcyBhY3RpdmUg
Y29udGV4dAorCisgICAgV1RGOjpTdG9wV2F0Y2ggc3RvcFdhdGNoOworCisjaWYgREVCVUdfVEVY
TUFQX0ZQUworICAgIGlmICghbV9hbmltX2Zwcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgY29uc3Qg
ZG91YmxlIG5vdyA9IFdURjo6Y3VycmVudFRpbWUoKTsKKyAgICAgICAgSGFzaE1hcDxpbnQsIEdy
YXBoaWNzTGF5ZXJBbmltYXRpb24qPjo6aXRlcmF0b3IgZW5kID0gbV9hbmltX2Zwcy5lbmQoKTsK
KyAgICAgICAgZm9yIChIYXNoTWFwPGludCwgR3JhcGhpY3NMYXllckFuaW1hdGlvbio+OjppdGVy
YXRvciBpdCA9IG1fYW5pbV9mcHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
ICAgICAvLyBwcmludGYoIkZSQU1FKCVkKTogJWRtcyBbJXBdXG4iLCBpdC0+c2Vjb25kLT5mcmFt
ZXMsIGludCgobm93LWl0LT5zZWNvbmQtPmxhc3QpKjEwMDApLCB0aGlzKTsKKyAgICAgICAgICAg
IGl0LT5zZWNvbmQtPmxhc3QgPSBub3c7CisgICAgICAgICAgICArK2l0LT5zZWNvbmQtPmZyYW1l
czsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIGJvb2wgaXNEaXJ0eSA9IG1fc3RhdGUu
ZGlydHk7CisgICAgbV9zdGF0ZS5kaXJ0eSA9IGZhbHNlOworCisgICAgaWYgKChtX3NpemUuaXNF
bXB0eSgpICYmIChtX3N0YXRlLm1hc2tzVG9Cb3VuZHMKKyAgICAgICAgfHwgbV9jaGlsZHJlbi5p
c0VtcHR5KCkpKSB8fCAhbV9zdGF0ZS52aXNpYmxlIHx8IG9wdGlvbnMub3BhY2l0eSA8IDAuMDEg
fHwgbV9zdGF0ZS5vcGFjaXR5IDwgMC4wMSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW5pdGlh
bGl6ZVRleHR1cmVNYXBwZXIob3B0aW9ucy50ZXh0dXJlTWFwcGVyKTsKKyAgICBjb21wdXRlUmVw
bGljYVRyYW5zZm9ybSgpOworCisgICAgaWYgKG1fc3RhdGUubWFza0xheWVyKSB7CisgICAgICAg
IG1fc3RhdGUubWFza0xheWVyLT5pbml0aWFsaXplVGV4dHVyZU1hcHBlcihvcHRpb25zLnRleHR1
cmVNYXBwZXIpOworICAgICAgICBtX3N0YXRlLm1hc2tMYXllci0+bV9zdGF0ZS5kaXJ0eSA9IGZh
bHNlOworICAgIH0KKworICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllcikgeworICAgICAgICBt
X3N0YXRlLnJlcGxpY2FMYXllci0+aW5pdGlhbGl6ZVRleHR1cmVNYXBwZXIob3B0aW9ucy50ZXh0
dXJlTWFwcGVyKTsKKyAgICAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUuZGlydHkg
PSBmYWxzZTsKKyAgICAgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRlLm1hc2tM
YXllcikgeworICAgICAgICAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUubWFza0xh
eWVyLT5pbml0aWFsaXplVGV4dHVyZU1hcHBlcihvcHRpb25zLnRleHR1cmVNYXBwZXIpOworICAg
ICAgICAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUubWFza0xheWVyLT5tX3N0YXRl
LmRpcnR5ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUZXh0dXJlTWFwcGVyTm9k
ZSogcmVwbGljYSA9IG1fc3RhdGUucmVwbGljYUxheWVyOworICAgIGNvbnN0IGJvb2wgaXNTdXJm
YWNlID0gKG1fbGF5ZXJUeXBlID09IENsaXBMYXllcgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IG1fbGF5ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVyCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgKG1fbGF5ZXJUeXBlID09IFJvb3RMYXllcgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmJiAob3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5hbGxvd1N1cmZhY2VG
b3JSb290KCkgfHwgbV9zdGF0ZS5oYXNTdXJmYWNlRGVzY2VuZGFudHMpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICkpOworICAgIGlmIChpc1N1cmZhY2UpCisgICAgICAgIHVwbG9h
ZFRleHR1cmVGcm9tQ29udGVudChvcHRpb25zLnRleHR1cmVNYXBwZXIpOworICAgIGNvbnN0IElu
dFJlY3QgYm91bmRpbmdSZWN0ZnJvbU5lYXJlc3RTdXJmYWNlID0gbV90cmFuc2Zvcm1zLnRhcmdl
dEJvdW5kaW5nUmVjdDsKKworCisjaWYgRU5BQkxFX1RFWE1BUF9BTklNQVRJT04KKyAgICBpZiAo
bV9hbmltLm9wYWNpdHlBbmltYXRpb25SdW5uaW5nKQorICAgICAgICBvcHRpb25zLm9wYWNpdHkg
Kj0gbV9hbmltLm9wYWNpdHk7CisgICAgZWxzZQorI2VuZGlmCisgICAgICAgIG9wdGlvbnMub3Bh
Y2l0eSAqPSBtX3N0YXRlLm9wYWNpdHk7CisKKyAgICBmbG9hdCBjb250ZW50T3BhY2l0eSA9IGlz
U3VyZmFjZSA/IDEgOiBvcHRpb25zLm9wYWNpdHk7CisgICAgVGV4bWFwUGFpbnRPcHRpb25zIG9w
dGlvbnNGb3JEZXNjZW5kYW50cyhvcHRpb25zKTsKKyAgICBvcHRpb25zRm9yRGVzY2VuZGFudHMu
b3BhY2l0eSA9IGNvbnRlbnRPcGFjaXR5OworCisgICAgaWYgKG1fbGF5ZXJUeXBlID09IENsaXBM
YXllcikgeworICAgICAgICBvcHRpb25zRm9yRGVzY2VuZGFudHMudmlzaWJsZVJlY3QgPSBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgpLnRyYW5zbGF0ZSgtYm91bmRpbmdSZWN0ZnJvbU5lYXJlc3RTdXJm
YWNlLngoKSwgLWJvdW5kaW5nUmVjdGZyb21OZWFyZXN0U3VyZmFjZS55KCkpLm1hcFJlY3Qob3B0
aW9ucy52aXNpYmxlUmVjdCk7CisgICAgICAgIG9wdGlvbnNGb3JEZXNjZW5kYW50cy5zY2lzc29y
UmVjdCA9IEludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Cisg
ICAgfQorCisgICAgaWYgKG1fbGF5ZXJUeXBlID09IFNjaXNzb3JMYXllcikgCisgICAgICAgIG9w
dGlvbnNGb3JEZXNjZW5kYW50cy5zY2lzc29yUmVjdC5pbnRlcnNlY3QobV90cmFuc2Zvcm1zLnRh
cmdldEJvdW5kaW5nUmVjdCk7CisgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5zZXRDbGlwKG9w
dGlvbnNGb3JEZXNjZW5kYW50cy5zY2lzc29yUmVjdCk7CisKKyAgICBUZXh0dXJlTWFwcGVyQ2Fj
aGVMb2NrKG1fdGV4dHVyZS5nZXQoKSk7CisgICAgVGV4dHVyZU1hcHBlckNhY2hlTG9jayhtX3N1
cmZhY2UuZ2V0KCkpOworICAgIFRleHR1cmVNYXBwZXJDYWNoZUxvY2sobV9yZXBsaWNhU3VyZmFj
ZS5nZXQoKSk7CisKKyAgICBnVGV4dHVyZU1hcHBlckNhY2hlLnB1cmdlKCk7CisKKyAgICBpZiAo
aXNTdXJmYWNlKSB7CisgICAgICAgIEFTU0VSVChtX3N1cmZhY2UpOworICAgICAgICBpZiAoIW1f
c3VyZmFjZS0+aXNWYWxpZCgpKQorICAgICAgICAgICAgaXNEaXJ0eSA9IHRydWU7CisgICAgICAg
IGlmIChtX3N0YXRlLnRpbGVkKSB7CisgICAgICAgICAgICBtX3N1cmZhY2UtPnJlc2V0KG9wdGlv
bnMudmlzaWJsZVJlY3Quc2l6ZSgpKTsKKyAgICAgICAgICAgIG1fc3VyZmFjZS0+c2V0T2Zmc2V0
KG9wdGlvbnMudmlzaWJsZVJlY3QubG9jYXRpb24oKSk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNE
aXJ0eSkKKyAgICAgICAgICAgIG1fc3VyZmFjZS0+cmVzZXQobV9sYXllclR5cGUgPT0gVHJhbnNw
YXJlbmN5TGF5ZXIgPyBvcHRpb25zLnN1cmZhY2UtPnNpemUoKSA6IG1fc2l6ZSk7CisgICAgICAg
IGdUZXh0dXJlTWFwcGVyQ2FjaGUubWFyayhtX3N1cmZhY2UuZ2V0KCkpOworICAgICAgICBvcHRp
b25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKG1fc3VyZmFjZS5nZXQoKSk7CisKKyAgICAg
ICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLnN1cmZhY2UgPSBtX3N1cmZhY2UuZ2V0KCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaWYgKG1fc3VyZmFjZSkKKyAgICAgICAgICAgIG1fc3VyZmFjZS0+
ZGVzdHJveSgpOworICAgICAgICBjb250ZW50T3BhY2l0eSA9IG9wdGlvbnMub3BhY2l0eTsKKyAg
ICB9CisKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbWFza1RleHR1cmU7CisgICAgUmVmUHRy
PEJpdG1hcFRleHR1cmU+IHJlcGxpY2FNYXNrVGV4dHVyZTsKKyAgICBpZiAoVGV4dHVyZU1hcHBl
ck5vZGUqIG1hc2sgPSBtX3N0YXRlLm1hc2tMYXllcikgeworICAgICAgICBtYXNrLT51cGxvYWRU
ZXh0dXJlRnJvbUNvbnRlbnQob3B0aW9ucy50ZXh0dXJlTWFwcGVyKTsKKyAgICAgICAgbWFza1Rl
eHR1cmUgPSBtYXNrLT5tX3RleHR1cmU7CisgICAgfQorCisgICAgaWYgKHJlcGxpY2EgJiYgcmVw
bGljYS0+bV9zdGF0ZS5tYXNrTGF5ZXIpIHsKKyAgICAgICAgcmVwbGljYS0+bV9zdGF0ZS5tYXNr
TGF5ZXItPnVwbG9hZFRleHR1cmVGcm9tQ29udGVudChvcHRpb25zLnRleHR1cmVNYXBwZXIpOwor
ICAgICAgICByZXBsaWNhTWFza1RleHR1cmUgPSByZXBsaWNhLT5tX3N0YXRlLm1hc2tMYXllci0+
bV90ZXh0dXJlOworICAgIH0KKworICAgIGludCBjaGlsZHJlblNpemUgPSBtX2NoaWxkcmVuLnNp
emUoKTsKKyAgICBpZiAoaXNEaXJ0eSB8fCAhaXNTdXJmYWNlIHx8IG1fc3RhdGUudGlsZWQgfHwg
IW1fc3VyZmFjZS0+aXNWYWxpZCgpKSB7CisgICAgICAgIGJvb2wgZGlkUGFpbnRTZWxmID0gZmFs
c2U7CisgICAgICAgIGlmICghbV9zdGF0ZS5wcmVzZXJ2ZXMzRCB8fCBtX2NoaWxkcmVuLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgcGFpbnRTZWxmKG9wdGlvbnMudGV4dHVyZU1hcHBlciwgY29u
dGVudE9wYWNpdHksIG1hc2tUZXh0dXJlLmdldCgpLCByZXBsaWNhTWFza1RleHR1cmUuZ2V0KCks
IGlzU3VyZmFjZSk7CisgICAgICAgICAgICBkaWRQYWludFNlbGYgPSB0cnVlOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKG1fY2hpbGRyZW4uaXNFbXB0eSgpICYmICFpc1N1cmZhY2UpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKG1fbGF5ZXJUeXBlID09IFNjaXNzb3JMYXll
cikKKyAgICAgICAgICAgIG9wdGlvbnNGb3JEZXNjZW5kYW50cy5zY2lzc29yUmVjdC5pbnRlcnNl
Y3QobV90cmFuc2Zvcm1zLnRhcmdldC5tYXBSZWN0KEludFJlY3QoMCwgMCwgbV9zaXplLndpZHRo
KCksIG1fc2l6ZS5oZWlnaHQoKSkpKTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNo
aWxkcmVuU2l6ZTsgKytpKSB7CisgICAgICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbGF5ZXIg
PSBtX2NoaWxkcmVuW2ldOworICAgICAgICAgICAgaWYgKCFsYXllcikKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKCFkaWRQYWludFNlbGYgJiYgbGF5ZXItPm1f
dHJhbnNmb3Jtcy5jZW50ZXJaID49IDApIHsKKyAgICAgICAgICAgICAgICBwYWludFNlbGYob3B0
aW9ucy50ZXh0dXJlTWFwcGVyLCBjb250ZW50T3BhY2l0eSwgbWFza1RleHR1cmUuZ2V0KCksIHJl
cGxpY2FNYXNrVGV4dHVyZS5nZXQoKSwgaXNTdXJmYWNlKTsKKyAgICAgICAgICAgICAgICBkaWRQ
YWludFNlbGYgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGF5ZXItPnBhaW50
UmVjdXJzaXZlKG9wdGlvbnNGb3JEZXNjZW5kYW50cyk7CisgICAgICAgICAgICBpZiAoaXNTdXJm
YWNlKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fc3VyZmFjZSk7CisgICAgICAgICAgICAg
ICAgZ1RleHR1cmVNYXBwZXJDYWNoZS5tYXJrKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgICAgICAg
ICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShtX3N1cmZhY2UuZ2V0KCkp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghZGlkUGFpbnRTZWxmKSB7
CisgICAgICAgICAgICBwYWludFNlbGYob3B0aW9ucy50ZXh0dXJlTWFwcGVyLCBjb250ZW50T3Bh
Y2l0eSwgbWFza1RleHR1cmUuZ2V0KCksIHJlcGxpY2FNYXNrVGV4dHVyZS5nZXQoKSwgaXNTdXJm
YWNlKTsKKyAgICAgICAgICAgIGRpZFBhaW50U2VsZiA9IHRydWU7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAobV9sYXllclR5cGUgPT0gUm9vdExheWVyIHx8IG1fbGF5ZXJUeXBlID09IERl
ZmF1bHRMYXllciB8fCBtX2xheWVyVHlwZSA9PSBTY2lzc29yTGF5ZXIpCisgICAgICAgIHJldHVy
bjsKKworICAgIEFTU0VSVChtX3N1cmZhY2UpOworICAgIEJpdG1hcFRleHR1cmUmIHRleHR1cmUg
PSAqbV9zdXJmYWNlLmdldCgpOworICAgIGlmIChyZXBsaWNhKSB7CisgICAgICAgIEFTU0VSVCht
X3JlcGxpY2FTdXJmYWNlKTsKKyAgICAgICAgbV9yZXBsaWNhU3VyZmFjZS0+cmVzZXQob3B0aW9u
cy5zdXJmYWNlLT5zaXplKCkpOworICAgICAgICBtX3JlcGxpY2FTdXJmYWNlLT5zZXRPZmZzZXQo
b3B0aW9ucy5zdXJmYWNlLT5vZmZzZXQoKSk7CisgICAgICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUu
bWFyayhtX3JlcGxpY2FTdXJmYWNlLmdldCgpKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFw
cGVyLT5iaW5kU3VyZmFjZShtX3JlcGxpY2FTdXJmYWNlLmdldCgpKTsKKyAgICAgICAgb3B0aW9u
cy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSh0ZXh0dXJlLCByZXBsaWNhUmVjdCgpLCBtX3Ry
YW5zZm9ybXMucmVwbGljYSwgcmVwbGljYS0+bV9zdGF0ZS5vcGFjaXR5LCByZXBsaWNhTWFza1Rl
eHR1cmUgPyByZXBsaWNhTWFza1RleHR1cmUuZ2V0KCkgOiBtYXNrVGV4dHVyZS5nZXQoKSk7Cisg
ICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUodGV4dHVyZSwgSW50UmVj
dChJbnRQb2ludCgwLCAwKSwgb3B0aW9ucy5zdXJmYWNlLT5zaXplKCkpLCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgpLCAxLjBmLCBtYXNrVGV4dHVyZS5nZXQoKSk7CisgICAgICAgIG9wdGlvbnMudGV4
dHVyZU1hcHBlci0+YmluZFN1cmZhY2Uob3B0aW9ucy5zdXJmYWNlKTsKKyAgICAgICAgZ1RleHR1
cmVNYXBwZXJDYWNoZS5tYXJrKG9wdGlvbnMuc3VyZmFjZSk7CisgICAgICAgIG9wdGlvbnMudGV4
dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUoKm1fcmVwbGljYVN1cmZhY2UuZ2V0KCksIEludFJlY3Qo
SW50UG9pbnQoMCwgMCksIG9wdGlvbnMuc3VyZmFjZS0+c2l6ZSgpKSwgVHJhbnNmb3JtYXRpb25N
YXRyaXgoKSwgb3B0aW9ucy5vcGFjaXR5LCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2Uob3B0aW9ucy5zdXJmYWNlKTsK
KyAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKHRleHR1cmUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fbGF5ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVyID8g
SW50UmVjdChJbnRQb2ludCgwLCAwKSwgb3B0aW9ucy5zdXJmYWNlLT5zaXplKCkpIDogCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFJlY3QoKSwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fbGF5ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVyID8gVHJhbnNmb3Jt
YXRpb25NYXRyaXgoKSA6IG1fdHJhbnNmb3Jtcy50YXJnZXQsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvcHRpb25zLm9wYWNpdHksIG1hc2tUZXh0dXJlLmdldCgpKTsKKyAgICBnVGV4
dHVyZU1hcHBlckNhY2hlLm1hcmsoJnRleHR1cmUpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJO
b2RlOjpjbGVhbnVwVGV4dHVyZU1hcHBlcigpCit7CisgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAg
ICAgbV90ZXh0dXJlLT5kZXN0cm95KCk7CisgICAgaWYgKG1fc3VyZmFjZSkKKyAgICAgICAgbV9z
dXJmYWNlLT5kZXN0cm95KCk7CisgICAgaWYgKG1fcmVwbGljYVN1cmZhY2UpCisgICAgICAgIG1f
cmVwbGljYVN1cmZhY2UtPmRlc3Ryb3koKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fY2hp
bGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fY2hpbGRyZW5baV0pCisgICAgICAg
ICAgICBtX2NoaWxkcmVuW2ldLT5jbGVhbnVwVGV4dHVyZU1hcHBlcigpOworICAgIH0KKyAgICBp
ZiAobV9sYXN0VGV4dHVyZU1hcHBlcikKKyAgICAgICAgbV9sYXN0VGV4dHVyZU1hcHBlci0+Y2xl
YW51cCgpOworfQorCitUZXh0dXJlTWFwcGVyTm9kZTo6flRleHR1cmVNYXBwZXJOb2RlKCkKK3sK
KyAgICAvLyBuZWVkcyBhY3RpdmUgY29udGV4dAorICAgIC8vIHN5bmNDb21wb3NpdGluZ1N0YXRl
KHRydWUpOworICAgIHNldE5lZWRzRGlzcGxheSgpOworICAgIHsKKyAgICAgICAgY29uc3QgaW50
IGNoaWxkcmVuU2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOworICAgICAgICBmb3IgKGludCBpID0g
Y2hpbGRyZW5TaXplLTE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAgICBBU1NFUlQobV9jaGls
ZHJlbltpXS0+bV9wYXJlbnQgPT0gdGhpcyk7CisgICAgICAgICAgICBtX2NoaWxkcmVuW2ldLT5t
X3BhcmVudCA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1fcGFyZW50KQorICAgICAg
ICBtX3BhcmVudC0+bV9jaGlsZHJlbi5yZW1vdmUobV9wYXJlbnQtPm1fY2hpbGRyZW4uZmluZCh0
aGlzKSk7Cit9CisKKyNpZiBFTkFCTEVfVEVYTUFQX0FOSU1BVElPTgordm9pZCBUZXh0dXJlTWFw
cGVyTm9kZTo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zv
cm0pCit7CisgICAgbV9hbmltLnRyYW5zZm9ybSA9IHRyYW5zZm9ybTsKKyAgICBtX3RyYW5zZm9y
bXMuZGlydHkgPSB0cnVlOworICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgbV9wYXJlbnQtPm1f
c3RhdGUuZGlydHkgPSB0cnVlOworICAgIGlmIChtX3N0YXRlLnByZXNlcnZlczNEKSAKKyAgICAg
ICAgbV9zdGF0ZS5kaXJ0eSA9IHRydWU7CisgICAgcGVyZm9ybVBvc3RTeW5jT3BlcmF0aW9ucygp
OworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzZXRPcGFjaXR5RnJvbUFuaW1hdGlvbkZy
YW1lKGZsb2F0IG9wYWNpdHkpCit7CisgICAgaWYgKG1fbGF5ZXIpCisgICAgICAgIG1fbGF5ZXIt
PnNldE9wYWNpdHkob3BhY2l0eSk7CisgICAgbV9hbmltLm9wYWNpdHkgPSBvcGFjaXR5OworICAg
IG1fc3RhdGUuZGlydHkgPSB0cnVlOyAgICAKKyAgICBwZXJmb3JtUG9zdFN5bmNPcGVyYXRpb25z
KCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6Om5vdGlmeVRyYW5zZm9ybUFuaW1hdGlv
blJ1bm5pbmcoYm9vbCBydW5uaW5nKQoreworICAgIG1fbGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0
YXRlKCk7CisgICAgbV9hbmltLnRyYW5zZm9ybUFuaW1hdGlvblJ1bm5pbmcgPSBydW5uaW5nOwor
ICAgIGlmIChydW5uaW5nKQorICAgICAgICBtX2FuaW0udHJhbnNmb3JtID0gbV9zdGF0ZS50cmFu
c2Zvcm07CisgICAgZWxzZSAKKyAgICAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2Rl
OjpUcmFuc2Zvcm1DaGFuZ2UpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpub3RpZnlP
cGFjaXR5QW5pbWF0aW9uUnVubmluZyhib29sIHJ1bm5pbmcpCit7CisgICAgbV9sYXllci0+c3lu
Y0NvbXBvc2l0aW5nU3RhdGUoKTsKKyAgICBtX2FuaW0ub3BhY2l0eUFuaW1hdGlvblJ1bm5pbmcg
PSBydW5uaW5nOworICAgIGlmIChydW5uaW5nKQorICAgICAgICBtX2FuaW0ub3BhY2l0eSA9IG1f
c3RhdGUub3BhY2l0eTsKKyAgICBlbHNlIAorICAgICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1h
cHBlck5vZGU6Ok9wYWNpdHlDaGFuZ2UpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpu
b3RpZnlBbmltYXRpb25TdGFydGVkKCkKK3sKKyAgICBpZiAobV9sYXllcikKKyAgICAgICAgbV9s
YXllci0+Y2xpZW50KCktPm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQobV9sYXllciwgV1RGOjpjdXJy
ZW50VGltZSgpKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0VHJhbnNmb3JtRnJv
bUFuaW1hdGlvbkZyYW1lKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCit7Cisg
ICAgaWYgKG1fbGF5ZXIpCisgICAgICAgIG1fbGF5ZXItPnNldFRyYW5zZm9ybShtYXRyaXgpOwor
ICAgIHNldFRyYW5zZm9ybShtYXRyaXgpOworfQorI2VuZGlmCisKK3ZvaWQgVGV4dHVyZU1hcHBl
ck5vZGU6Om5vdGlmeUNoYW5nZShDaGFuZ2VNYXNrIGNoYW5nZU1hc2spCit7CisgICAgbV9jaGFu
Z2VNYXNrIHw9IGNoYW5nZU1hc2s7CisgICAgaWYgKCFtX2xheWVyLT5jbGllbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fbGF5ZXItPmNsaWVudCgpLT5ub3RpZnlTeW5jUmVxdWlyZWQobV9s
YXllcik7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBlcmZvcm1Qb3N0U3luY09wZXJh
dGlvbnMoKQoreworICAgIGNvbnN0IExheWVyVHlwZSBwcmV2TGF5ZXJUeXBlID0gbV9sYXllclR5
cGU7CisgICAgY29tcHV0ZUxheWVyVHlwZSgpOworICAgIGlmIChwcmV2TGF5ZXJUeXBlICE9IG1f
bGF5ZXJUeXBlKQorICAgICAgICBtX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKKyAgICBpZiAobV90cmFu
c2Zvcm1zLmRpcnR5KSAKKyAgICAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CisKKyAgICBjb21wdXRl
VHJhbnNmb3JtYXRpb25zKCk7CisgICAgaWYgKG1fc3RhdGUubWFza0xheWVyICYmICFtX3N0YXRl
LmRpcnR5KQorICAgICAgICBtX3N0YXRlLmRpcnR5ID0gbV9zdGF0ZS5tYXNrTGF5ZXItPm1fc3Rh
dGUuZGlydHk7CisgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyICYmICFtX3N0YXRlLmRpcnR5
KQorICAgICAgICBtX3N0YXRlLmRpcnR5ID0gbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUu
ZGlydHk7CisKKyAgICBjb25zdCBpbnQgc2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOworCisgICAg
Zm9yIChpbnQgaSA9IHNpemUgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBUZXh0dXJlTWFw
cGVyTm9kZSogbGF5ZXIgPSBtX2NoaWxkcmVuW2ldOworCisgICAgICAgIGxheWVyLT5wZXJmb3Jt
UG9zdFN5bmNPcGVyYXRpb25zKCk7CisgICAgICAgIGlmICghbV9zdGF0ZS5kaXJ0eSkKKyAgICAg
ICAgICAgIG1fc3RhdGUuZGlydHkgPSBsYXllci0+bV9zdGF0ZS5kaXJ0eTsKKyAgICB9CisgICAg
bV9zdGF0ZS5oYXNTdXJmYWNlRGVzY2VuZGFudHMgPSBoYXNTdXJmYWNlRGVzY2VuZGFudHMoKTsK
KyAgICBpZiAobV9zdGF0ZS5kaXJ0eSkKKyAgICAgICAgbV9zdGF0ZS5kZXNjZW5kYW50c1dpdGhD
b250ZW50ID0gY291bnREZXNjZW5kYW50c1dpdGhDb250ZW50KCk7CisKKyAgICBpZiAobV9zdGF0
ZS5wcmVzZXJ2ZXMzRCkKKyAgICAgICAgc29ydEJ5Wk9yZGVyKG1fY2hpbGRyZW4sIDAsIHNpemUp
OworICAgIGlmIChtX3N0YXRlLmRpcnR5KSAKKyAgICAgICAgc2V0TmVlZHNEaXNwbGF5KCk7Cit9
CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlKGJvb2wgcmVj
dXJzZSkKK3sKKyAgICBib29sIG5lZWRzVG9JbnZhbGlkYXRlVHJhbnNmb3JtID0gZmFsc2U7CisK
KyAgICBpZiAoIW1fbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NoYW5nZU1h
c2sgPT0gTm9DaGFuZ2VzKQorICAgICAgICBnb3RvIGFmdGVyQ3VycmVudExheWVyU3luYzsKKwor
ICAgIHNldE5lZWRzRGlzcGxheSgpOworICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgbV9wYXJl
bnQtPm1fc3RhdGUuZGlydHkgPSB0cnVlOworCisgICAgaWYgKG1fY3VycmVudENvbnRlbnQuY29u
dGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlICYmIChtX2NoYW5nZU1hc2sgJiBQYXJlbnRDaGFu
Z2UpKSB7CisgICAgICAgIC8vIFRoZSBXZWJDb3JlIGNvbXBvc2l0b3IgbWFuYWdlcyBpdGVtIG93
bmVyc2hpcC4gV2UgaGF2ZSB0byBtYWtlIHN1cmUgZ3JhcGhpY3N2aWV3IGRvZXNuJ3QKKyAgICAg
ICAgLy8gdHJ5IHRvIHNuYXRjaCB0aGF0IG93bmVyc2hpcC4KKworICAgICAgICBpZiAoIW1fbGF5
ZXItPnBhcmVudCgpKQorICAgICAgICAgICAgbV9wYXJlbnQgPSAwOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX3BhcmVudCA9IHRvVGV4dHVyZU1hcHBlck5vZGUobV9sYXllci0+cGFyZW50
KCkpOworCisgICAgICAgIGlmICghbV9sYXllci0+cGFyZW50KCkgJiYgbV9wYXJlbnQpIHsKKyAg
ICAgICAgICAgIHNpemVfdCBpbmRleCA9IG1fcGFyZW50LT5tX2NoaWxkcmVuLmZpbmQodGhpcyk7
CisgICAgICAgICAgICBtX3BhcmVudC0+bV9jaGlsZHJlbi5yZW1vdmUoaW5kZXgpOworICAgICAg
ICB9CisKKyAgICB9CisKKyAgICBpZiAobV9jaGFuZ2VNYXNrICYgQ2hpbGRyZW5DaGFuZ2UpIHsK
KyAgICAgICAgbV9jaGlsZHJlbi5jbGVhcigpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChU
ZXh0dXJlTWFwcGVyTm9kZSogY2hpbGQgPSB0b1RleHR1cmVNYXBwZXJOb2RlKG1fbGF5ZXItPmNo
aWxkcmVuKClbaV0pKSB7CisgICAgICAgICAgICAgICAgaWYgKCFjaGlsZCkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoY2hp
bGQpOworICAgICAgICAgICAgICAgIGNoaWxkLT5tX3BhcmVudCA9IHRoaXM7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IHRydWU7CisgICAgfQorCisg
ICAgaWYgKG1fY2hhbmdlTWFzayAmIChTaXplQ2hhbmdlIHwgQ29udGVudHNSZWN0Q2hhbmdlKSkg
eworICAgICAgICBJbnRTaXplIHdhbnRlZFNpemUgPSBJbnRTaXplKG1fbGF5ZXItPnNpemUoKS53
aWR0aCgpLCBtX2xheWVyLT5zaXplKCkuaGVpZ2h0KCkpOworICAgICAgICBpZiAod2FudGVkU2l6
ZS5pc0VtcHR5KCkgJiYgbV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVu
dFR5cGUpCisgICAgICAgICAgICB3YW50ZWRTaXplID0gSW50U2l6ZShtX2xheWVyLT5jb250ZW50
c1JlY3QoKS53aWR0aCgpLCBtX2xheWVyLT5jb250ZW50c1JlY3QoKS5oZWlnaHQoKSk7CisKKyAg
ICAgICAgaWYgKHdhbnRlZFNpemUgIT0gbV9zaXplKSB7CisgICAgICAgICAgICBtX3NpemUgPSBJ
bnRTaXplKHdhbnRlZFNpemUud2lkdGgoKSwgd2FudGVkU2l6ZS5oZWlnaHQoKSk7CisgICAgICAg
ICAgICBpZiAobV9wbGF0Zm9ybUNsaWVudCkKKyAgICAgICAgICAgICAgICBtX3BsYXRmb3JtQ2xp
ZW50LT5zZXRTaXplQ2hhbmdlZChtX3NpemUpOworICAgICAgICAgICAgY29uc3QgYm9vbCBuZWVk
c1RpbGluZyA9IG1fc2l6ZS53aWR0aCgpID4gMjAwMCB8fCBtX3NpemUuaGVpZ2h0KCkgPiAyMDAw
OworICAgICAgICAgICAgaWYgKG1fc3RhdGUudGlsZWQgIT0gbmVlZHNUaWxpbmcpCisgICAgICAg
ICAgICAgICAgbV9zdGF0ZS50aWxlZCA9IG5lZWRzVGlsaW5nOworICAgICAgICAgICAgbV9zdGF0
ZS5kaXJ0eSA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9jaGFuZ2VNYXNr
ICYgTWFza0xheWVyQ2hhbmdlKQorICAgICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSogbGF5ZXIg
PSB0b1RleHR1cmVNYXBwZXJOb2RlKG1fbGF5ZXItPm1hc2tMYXllcigpKSkKKyAgICAgICAgICAg
bGF5ZXItPm1fZWZmZWN0VGFyZ2V0ID0gdGhpczsKKworICAgIGlmIChtX2NoYW5nZU1hc2sgJiBS
ZXBsaWNhTGF5ZXJDaGFuZ2UpCisgICAgICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiBsYXllciA9
IHRvVGV4dHVyZU1hcHBlck5vZGUobV9sYXllci0+cmVwbGljYUxheWVyKCkpKQorICAgICAgICAg
ICBsYXllci0+bV9lZmZlY3RUYXJnZXQgPSB0aGlzOworCisgICAgaWYgKG1fY2hhbmdlTWFzayAm
IChUcmFuc2Zvcm1DaGFuZ2UgfCBTaXplQ2hhbmdlIHwgQW5jaG9yUG9pbnRDaGFuZ2UgfCBQb3Np
dGlvbkNoYW5nZSkpCisgICAgICAgIG1fdHJhbnNmb3Jtcy5sb2NhbERpcnR5ID0gdHJ1ZTsKKwor
ICAgIGlmIChtX2NoYW5nZU1hc2sgJiAoQ2hpbGRyZW5UcmFuc2Zvcm1DaGFuZ2UgfCBTaXplQ2hh
bmdlKSkKKyAgICAgICAgbV90cmFuc2Zvcm1zLnBlcnNwZWN0aXZlRGlydHkgPSB0cnVlOworCisg
ICAgaWYgKG1fY2hhbmdlTWFzayAmIChDaGlsZHJlblRyYW5zZm9ybUNoYW5nZSB8IFByZXNlcnZl
czNEQ2hhbmdlIHwgVHJhbnNmb3JtQ2hhbmdlIHwgQW5jaG9yUG9pbnRDaGFuZ2UgfCBTaXplQ2hh
bmdlIHwgQ29udGVudHNSZWN0Q2hhbmdlIHwgQmFja2ZhY2VWaXNpYmlsaXR5Q2hhbmdlIHwgUG9z
aXRpb25DaGFuZ2UgfCBNYXNrTGF5ZXJDaGFuZ2UgfCBEcmF3c0NvbnRlbnRDaGFuZ2UgfCBDb250
ZW50Q2hhbmdlIHwgUmVwbGljYUxheWVyQ2hhbmdlKSkgICAgeworICAgICAgICAvLyBEdWUgdG8g
dGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHdheSBXZWJDb3JlIGhhbmRsZXMgdHJhbnNmb3Jt
cyBhbmQgdGhlIHdheSBRdCBoYW5kbGVzIHRyYW5zZm9ybXMsCisgICAgICAgIC8vIGFsbCB0aGVz
ZSBlbGVtZW50cyBhZmZlY3QgdGhlIHRyYW5zZm9ybXMgb2YgYWxsIHRoZSBkZXNjZW5kYW50cy4K
KyAgICAgICAgbmVlZHNUb0ludmFsaWRhdGVUcmFuc2Zvcm0gPSB0cnVlOworICAgIH0KKworICAg
IGlmIChtX2NoYW5nZU1hc2sgJiBEaXNwbGF5Q2hhbmdlKSAKKyAgICAgICAgbV9zdGF0ZS5kaXJ0
eSA9IHRydWU7CisKKyAgICBtX3N0YXRlLm1hc2tMYXllciA9IHRvVGV4dHVyZU1hcHBlck5vZGUo
bV9sYXllci0+bWFza0xheWVyKCkpOworICAgIG1fc3RhdGUucmVwbGljYUxheWVyID0gdG9UZXh0
dXJlTWFwcGVyTm9kZShtX2xheWVyLT5yZXBsaWNhTGF5ZXIoKSk7CisgICAgbV9zdGF0ZS5wb3Mg
PSBtX2xheWVyLT5wb3NpdGlvbigpOworICAgIG1fc3RhdGUuYW5jaG9yUG9pbnQgPSBtX2xheWVy
LT5hbmNob3JQb2ludCgpOworICAgIG1fc3RhdGUuc2l6ZSA9IG1fbGF5ZXItPnNpemUoKTsKKyAg
ICBtX3N0YXRlLnRyYW5zZm9ybSA9IG1fbGF5ZXItPnRyYW5zZm9ybSgpOworICAgIG1fc3RhdGUu
Y29udGVudHNSZWN0ID0gbV9sYXllci0+Y29udGVudHNSZWN0KCk7CisgICAgbV9zdGF0ZS5vcGFj
aXR5ID0gbV9sYXllci0+b3BhY2l0eSgpOworICAgIG1fc3RhdGUuY29udGVudHNSZWN0ID0gbV9s
YXllci0+Y29udGVudHNSZWN0KCk7CisgICAgbV9zdGF0ZS5wcmVzZXJ2ZXMzRCA9IG1fbGF5ZXIt
PnByZXNlcnZlczNEKCk7CisgICAgbV9zdGF0ZS5tYXNrc1RvQm91bmRzID0gbV9sYXllci0+bWFz
a3NUb0JvdW5kcygpOworICAgIG1fc3RhdGUuZHJhd3NDb250ZW50ID0gbV9sYXllci0+ZHJhd3ND
b250ZW50KCk7CisgICAgbV9zdGF0ZS5jb250ZW50c09wYXF1ZSA9IG1fbGF5ZXItPmNvbnRlbnRz
T3BhcXVlKCk7CisgICAgbV9zdGF0ZS5iYWNrZmFjZVZpc2liaWxpdHkgPSBtX2xheWVyLT5iYWNr
ZmFjZVZpc2liaWxpdHkoKTsKKyAgICBtX3N0YXRlLmNoaWxkcmVuVHJhbnNmb3JtID0gbV9sYXll
ci0+Y2hpbGRyZW5UcmFuc2Zvcm0oKTsKKyAgICBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBl
ID0gbV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlwZTsKKyAgICBtX2N1cnJlbnRDb250ZW50Lmlt
YWdlID0gbV9wZW5kaW5nQ29udGVudC5pbWFnZTsKKyAgICBtX2N1cnJlbnRDb250ZW50Lm1lZGlh
ID0gbV9wZW5kaW5nQ29udGVudC5tZWRpYTsKKyAgICBtX2N1cnJlbnRDb250ZW50LmJhY2tncm91
bmRDb2xvciA9IG1fcGVuZGluZ0NvbnRlbnQuYmFja2dyb3VuZENvbG9yOworICAgIG1fY3VycmVu
dENvbnRlbnQubmVlZHNEaXNwbGF5ID0gbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgfHwg
bV9wZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXk7CisgICAgbV9jdXJyZW50Q29udGVudC5uZWVk
c0Rpc3BsYXlSZWN0LnVuaXRlKG1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCk7Cisg
ICAgbV9wZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKKyAgICBtX3BlbmRpbmdD
b250ZW50Lm5lZWRzRGlzcGxheVJlY3QgPSBJbnRSZWN0KCk7CisgICAgbV9jaGFuZ2VNYXNrID0g
Tm9DaGFuZ2VzOworICAgIGFmdGVyQ3VycmVudExheWVyU3luYzoKKyAgICBpZiAobmVlZHNUb0lu
dmFsaWRhdGVUcmFuc2Zvcm0pCisgICAgICAgIGludmFsaWRhdGVUcmFuc2Zvcm0oKTsKKworICAg
IGlmIChtX3N0YXRlLm1hc2tMYXllcikgeworICAgICAgICBtX3N0YXRlLm1hc2tMYXllci0+c3lu
Y0NvbXBvc2l0aW5nU3RhdGUoZmFsc2UpOworICAgICAgICBpZiAobV9zdGF0ZS5tYXNrTGF5ZXIt
Pm1fc2l6ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX3N0YXRlLm1hc2tMYXllci0+bV9zaXpl
ID0gbV9zaXplOworICAgIH0KKworICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllcikKKyAgICAg
ICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKGZhbHNlKTsKKwor
I2lmIDAKKyAgICBpZiAobV9zdGF0ZS5kaXJ0eSAmJiBtX3RleHR1cmUgJiYgbV90ZXh0dXJlLT5h
bGxvd09mZmxpbmVUZXh0dXJlVXBsb2FkKCkpCisgICAgICAgIHVwbG9hZFRleHR1cmVGcm9tQ29u
dGVudCgwKTsKKyNlbmRpZgorCisgICAgaWYgKCFyZWN1cnNlKQorICAgICAgICByZXR1cm47CisK
KyAgICBjb25zdCBpbnQgY2hpbGRyZW5TaXplID0gbV9jaGlsZHJlbi5zaXplKCk7CisgICAgZm9y
IChpbnQgaSA9IGNoaWxkcmVuU2l6ZS0xOyBpID49IDA7IC0taSkKKyAgICAgICAgbV9jaGlsZHJl
bltpXS0+c3luY0NvbXBvc2l0aW5nU3RhdGUodHJ1ZSk7Cit9CisKK0dyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihHcmFwaGljc0xheWVyQ2xpZW50
KiBjbGllbnQpCisgICAgOiBHcmFwaGljc0xheWVyKGNsaWVudCkKKyAgICAsIG1fbm9kZShuZXcg
VGV4dHVyZU1hcHBlck5vZGUodGhpcykpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6OnNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIG1fbm9kZS0+bV9u
YW1lID0gbmFtZTsKK30KKworR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6On5HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcigpCit7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKTog
VGhlIGN1cnJlbnQgc2l6ZSBtaWdodCBjaGFuZ2UsIHRodXMgd2UgbmVlZCB0byB1cGRhdGUgdGhl
IHdob2xlIGRpc3BsYXkuCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0
TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNw
bGF5ID0gdHJ1ZTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6
RGlzcGxheUNoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3Zv
aWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5u
ZWVkc0Rpc3BsYXkpCisgICAgICAgIHJldHVybjsKKyAgICBtX25vZGUtPm1fcGVuZGluZ0NvbnRl
bnQubmVlZHNEaXNwbGF5UmVjdC51bml0ZShJbnRSZWN0KHJlY3QpKTsKKyAgICBtX25vZGUtPm5v
dGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6RGlzcGxheUNoYW5nZSk7Cit9CisKKy8qIFxy
ZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI6OnNldFBhcmVudChHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBtX25vZGUtPm5vdGlm
eUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6UGFyZW50Q2hhbmdlKTsKKyAgICBHcmFwaGljc0xh
eWVyOjpzZXRQYXJlbnQobGF5ZXIpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkK
KyovCitib29sIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDaGlsZHJlbihjb25zdCBW
ZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbikKK3sKKyAgICBtX25vZGUtPm5vdGlmeUNo
YW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOworICAgIHJldHVybiBHcmFw
aGljc0xheWVyOjpzZXRDaGlsZHJlbihjaGlsZHJlbik7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhp
Y3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxk
KEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1
cmVNYXBwZXJOb2RlOjpDaGlsZHJlbkNoYW5nZSk7CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hp
bGQobGF5ZXIpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllciog
bGF5ZXIsIGludCBpbmRleCkKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgo
bGF5ZXIsIGluZGV4KTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9k
ZTo6Q2hpbGRyZW5DaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyov
Cit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRDaGlsZEFib3ZlKEdyYXBoaWNz
TGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQoreworICAgICBHcmFwaGljc0xh
eWVyOjphZGRDaGlsZEFib3ZlKGxheWVyLCBzaWJsaW5nKTsKKyAgICAgbV9ub2RlLT5ub3RpZnlD
aGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNoaWxkcmVuQ2hhbmdlKTsKK30KKworLyogXHJlaW1w
IChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6
YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGlu
ZykKK3sKKworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3cobGF5ZXIsIHNpYmxpbmcp
OworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDaGlsZHJlbkNo
YW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK2Jvb2wgR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OnJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiBvbGRDaGls
ZCwgR3JhcGhpY3NMYXllciogbmV3Q2hpbGQpCit7CisgICAgaWYgKEdyYXBoaWNzTGF5ZXI6OnJl
cGxhY2VDaGlsZChvbGRDaGlsZCwgbmV3Q2hpbGQpKSB7CisgICAgICAgIG1fbm9kZS0+bm90aWZ5
Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDaGlsZHJlbkNoYW5nZSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLyogXHJlaW1wIChHcmFw
aGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cmVtb3Zl
RnJvbVBhcmVudCgpCit7CisgICAgaWYgKCFwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpQYXJlbnRDaGFuZ2UpOwor
ICAgIEdyYXBoaWNzTGF5ZXI6OnJlbW92ZUZyb21QYXJlbnQoKTsKK30KKworLyogXHJlaW1wIChH
cmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0
TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBtYXNr
TGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXll
cih2YWx1ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6Ok1h
c2tMYXllckNoYW5nZSk7Cit9CisKKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwor
dm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3Jh
cGhpY3NMYXllciogdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IHJlcGxpY2FMYXllcigpKQor
ICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIo
dmFsdWUpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpSZXBs
aWNhTGF5ZXJDaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2
b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBv
aW50JiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gcG9zaXRpb24oKSkKKyAgICAgICAgcmV0
dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKHZhbHVlKTsKKyAgICBtX25vZGUt
Pm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6UG9zaXRpb25DaGFuZ2UpOworfQorCisv
KiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyOjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHZhbHVlKQoreworICAg
IGlmICh2YWx1ZSA9PSBhbmNob3JQb2ludCgpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhp
Y3NMYXllcjo6c2V0QW5jaG9yUG9pbnQodmFsdWUpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdl
KFRleHR1cmVNYXBwZXJOb2RlOjpBbmNob3JQb2ludENoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAo
R3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNl
dFNpemUoY29uc3QgRmxvYXRTaXplJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gc2l6ZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRTaXplKHZhbHVlKTsK
KyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6U2l6ZUNoYW5nZSk7
Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IHRyYW5zZm9ybSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0odmFsdWUpOworICAgIG1fbm9kZS0+
bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpUcmFuc2Zvcm1DaGFuZ2UpOworfQorCisv
KiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyOjpzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IGNoaWxkcmVuVHJhbnNmb3JtKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlblRyYW5zZm9ybSh2YWx1ZSk7
CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNoaWxkcmVuVHJh
bnNmb3JtQ2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9p
ZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0UHJlc2VydmVzM0QoYm9vbCB2YWx1ZSkK
K3sKKyAgICBpZiAodmFsdWUgPT0gcHJlc2VydmVzM0QoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IEdyYXBoaWNzTGF5ZXI6OnNldFByZXNlcnZlczNEKHZhbHVlKTsKKyAgICBtX25vZGUtPm5vdGlm
eUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6UHJlc2VydmVzM0RDaGFuZ2UpOworfQorCisvKiBc
cmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyOjpzZXRNYXNrc1RvQm91bmRzKGJvb2wgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IG1h
c2tzVG9Cb3VuZHMoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1h
c2tzVG9Cb3VuZHModmFsdWUpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBw
ZXJOb2RlOjpNYXNrc1RvQm91bmRzQ2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xh
eWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0RHJhd3NDb250
ZW50KGJvb2wgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IGRyYXdzQ29udGVudCgpKQorICAg
ICAgICByZXR1cm47CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6
OkRyYXdzQ29udGVudENoYW5nZSk7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50
KHZhbHVlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiB2
YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50LmJhY2tn
cm91bmRDb2xvcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVu
dC5iYWNrZ3JvdW5kQ29sb3IgPSB2YWx1ZTsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRCYWNrZ3Jv
dW5kQ29sb3IodmFsdWUpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJO
b2RlOjpCYWNrZ3JvdW5kQ29sb3JDaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5
ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpjbGVhckJhY2tncm91
bmRDb2xvcigpCit7CisgICAgaWYgKCFtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQuYmFja2dyb3Vu
ZENvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbm9kZS0+bV9wZW5kaW5n
Q29udGVudC5iYWNrZ3JvdW5kQ29sb3IgPSBDb2xvcigpOworICAgIEdyYXBoaWNzTGF5ZXI6OmNs
ZWFyQmFja2dyb3VuZENvbG9yKCk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1h
cHBlck5vZGU6OkJhY2tncm91bmRDb2xvckNoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhp
Y3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRl
bnRzT3BhcXVlKGJvb2wgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IGNvbnRlbnRzT3BhcXVl
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFw
cGVyTm9kZTo6Q29udGVudHNPcGFxdWVDaGFuZ2UpOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENv
bnRlbnRzT3BhcXVlKHZhbHVlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisq
Lwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5
KGJvb2wgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IGJhY2tmYWNlVmlzaWJpbGl0eSgpKQor
ICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5
KHZhbHVlKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6QmFj
a2ZhY2VWaXNpYmlsaXR5Q2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgp
CisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0T3BhY2l0eShmbG9hdCB2
YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gb3BhY2l0eSgpKQorICAgICAgICByZXR1cm47Cisg
ICAgR3JhcGhpY3NMYXllcjo6c2V0T3BhY2l0eSh2YWx1ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlD
aGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6Ok9wYWNpdHlDaGFuZ2UpOworfQorCisvKiBccmVpbXAg
KEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpz
ZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09
IGNvbnRlbnRzUmVjdCgpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0
Q29udGVudHNSZWN0KHZhbHVlKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFw
cGVyTm9kZTo6Q29udGVudHNSZWN0Q2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xh
eWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNU
b0ltYWdlKEltYWdlKiBpbWFnZSkKK3sKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJl
TWFwcGVyTm9kZTo6Q29udGVudENoYW5nZSk7CisgICAgbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50
LmNvbnRlbnRUeXBlID0gaW1hZ2UgPyBUZXh0dXJlTWFwcGVyTm9kZTo6RGlyZWN0SW1hZ2VDb250
ZW50VHlwZSA6IFRleHR1cmVNYXBwZXJOb2RlOjpIVE1MQ29udGVudFR5cGU7CisgICAgbV9ub2Rl
LT5tX3BlbmRpbmdDb250ZW50LmltYWdlID0gaW1hZ2U7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0
Q29udGVudHNUb0ltYWdlKGltYWdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgp
CisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNCYWNrZ3Jv
dW5kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdl
KFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50Q2hhbmdlKTsKKyAgICBtX25vZGUtPm1fcGVuZGlu
Z0NvbnRlbnQuY29udGVudFR5cGUgPSBUZXh0dXJlTWFwcGVyTm9kZTo6Q29sb3JDb250ZW50VHlw
ZTsKKyAgICBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQuYmFja2dyb3VuZENvbG9yID0gY29sb3I7
CisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNCYWNrZ3JvdW5kQ29sb3IoY29sb3IpOwor
fQorCisKK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9NZWRp
YShQbGF0Zm9ybUxheWVyKiBtZWRpYSkKK3sKKyAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50
c1RvTWVkaWEobWVkaWEpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJO
b2RlOjpDb250ZW50Q2hhbmdlKTsKKyAgICBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQuY29udGVu
dFR5cGUgPSBtZWRpYSA/IFRleHR1cmVNYXBwZXJOb2RlOjpNZWRpYUNvbnRlbnRUeXBlIDogVGV4
dHVyZU1hcHBlck5vZGU6OkhUTUxDb250ZW50VHlwZTsKKyAgICBpZiAobWVkaWEpCisgICAgICAg
IG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5tZWRpYSA9IHN0YXRpY19jYXN0PFRleHR1cmVNYXBw
ZXJWaWRlb0xheWVyKj4obWVkaWEpOworICAgIGVsc2UKKyAgICAgICAgbV9ub2RlLT5tX3BlbmRp
bmdDb250ZW50Lm1lZGlhID0gMDsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisq
Lwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNPcmllbnRhdGlv
bihDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAg
aWYgKGNvbnRlbnRzT3JpZW50YXRpb24oKSA9PSBvcmllbnRhdGlvbikKKyAgICAgICAgcmV0dXJu
OworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50c09y
aWVudGF0aW9uQ2hhbmdlKTsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09yaWVudGF0
aW9uKG9yaWVudGF0aW9uKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwor
dm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCkKK3sKKyAgICBtX25vZGUtPnN5bmNDb21wb3NpdGluZ1N0YXRlKGZhbHNl
KTsKKyAgICBtX25vZGUtPnBlcmZvcm1Qb3N0U3luY09wZXJhdGlvbnMoKTsKK30KKworLyogXHJl
aW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cjo6c3luY0NvbXBvc2l0aW5nU3RhdGUoKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OnN5bmNDb21w
b3NpdGluZ1N0YXRlKCk7CisgICAgbV9ub2RlLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSh0cnVlKTsK
KyAgICBtX25vZGUtPnBlcmZvcm1Qb3N0U3luY09wZXJhdGlvbnMoKTsKK30KKworLyogXHJlaW1w
IChHcmFwaGljc0xheWVyLmgpCisgKi8KK05hdGl2ZUxheWVyIEdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyOjpuYXRpdmVMYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbm9kZS5nZXQoKTsK
K30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLworUGxhdGZvcm1MYXllciogR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAoreworICAgIHJl
dHVybiBtX25vZGUuZ2V0KCk7Cit9CisKK1Bhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gR3JhcGhp
Y3NMYXllcjo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICByZXR1
cm4gbmV3IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGNsaWVudCk7Cit9CisKK30KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFh
MTU4ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgICAg
Q29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyovCisKKyNpZm5kZWYgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXJfaAorI2RlZmlu
ZSBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcl9oCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXll
ckNsaWVudC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjZW5kaWYKKworI2RlZmluZSBFTkFCTEVf
VEVYTUFQX0FOSU1BVElPTiAwCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGV4dHVy
ZU1hcHBlck5vZGU7CitjbGFzcyBCaXRtYXBUZXh0dXJlOworY2xhc3MgVGV4dHVyZU1hcHBlcjsK
KworY2xhc3MgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIgOiBwdWJsaWMgR3JhcGhpY3NMYXll
ciB7CisgICAgZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJOb2RlOworCitwdWJsaWM6CisgICAg
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoR3JhcGhpY3NMYXllckNsaWVudCopOworICAgIHZp
cnR1YWwgfkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKCk7CisKKyAgICAvLyByZWltcHMgZnJv
bSBHcmFwaGljc0xheWVyLmgKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Cisg
ICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0UGFyZW50KEdyYXBoaWNzTGF5ZXIqIGxheWVyKTsKKyAgICB2
aXJ0dWFsIGJvb2wgc2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYpOwor
ICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChHcmFwaGljc0xheWVyKik7CisgICAgdmlydHVhbCB2
b2lkIGFkZENoaWxkQXRJbmRleChHcmFwaGljc0xheWVyKiwgaW50IGluZGV4KTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXll
ciogc2libGluZyk7CisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkQmVsb3coR3JhcGhpY3NMYXll
ciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpOworICAgIHZpcnR1YWwgYm9vbCByZXBs
YWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIEdyYXBoaWNzTGF5ZXIqIG5ld0NoaWxk
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QW5j
aG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiBwKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6
ZShjb25zdCBGbG9hdFNpemUmIHNpemUpOworICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDaGls
ZHJlblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCk7CisgICAgdmlydHVh
bCB2b2lkIHNldFByZXNlcnZlczNEKGJvb2wgYik7CisgICAgdmlydHVhbCB2b2lkIHNldE1hc2tz
VG9Cb3VuZHMoYm9vbCBiKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wg
Yik7CisgICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYpOwor
ICAgIHZpcnR1YWwgdm9pZCBjbGVhckJhY2tncm91bmRDb2xvcigpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRDb250ZW50c09wYXF1ZShib29sIGIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZmFj
ZVZpc2liaWxpdHkoYm9vbCBiKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCBv
cGFjaXR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3Qm
IHIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVy
Kik7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOworICAgIHZp
cnR1YWwgdm9pZCBzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciopOworICAgIHZpcnR1
YWwgdm9pZCBzZXRDb250ZW50c0JhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYpOworI2lmIEVO
QUJMRSgzRF9DQU5WQVMpCisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9HcmFwaGljc0Nv
bnRleHQzRChjb25zdCBHcmFwaGljc0NvbnRleHQzRCopOworICAgIHZpcnR1YWwgdm9pZCBzZXRH
cmFwaGljc0NvbnRleHQzRE5lZWRzRGlzcGxheSgpOworI2VuZGlmCisgICAgdmlydHVhbCB2b2lk
IHNldENvbnRlbnRzT3JpZW50YXRpb24oQ29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9u
IG9yaWVudGF0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7
CisgICAgdmlydHVhbCB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICB2aXJ0
dWFsIE5hdGl2ZUxheWVyIG5hdGl2ZUxheWVyKCkgY29uc3Q7CisgICAgdmlydHVhbCBQbGF0Zm9y
bUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgYWRkQW5p
bWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgLypib3hTaXpl
Ki8sIGNvbnN0IEFuaW1hdGlvbiosIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgU3RyaW5nJiAvKmtleWZyYW1lc05hbWUqLywgZG91YmxlIC8qdGltZU9mZnNldCovKSB7IHJl
dHVybiBmYWxzZTsgfQorCitwcml2YXRlOgorICAgIE93blB0cjxUZXh0dXJlTWFwcGVyTm9kZT4g
bV9ub2RlOworfTsKKworfQorI2VuZGlmIC8vIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyX2gK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDFiYmE3Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCkBA
IC0wLDAgKzEsMTE3IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBUZXh0dXJlTWFwcGVyX2gKKyNkZWZpbmUgVGV4dHVyZU1hcHBlcl9oCisKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaWYgKGRlZmluZWQoUVRfT1BFTkdMX0xJQikp
CisgICAgI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpICYmICFkZWZpbmVkKFRFWE1BUF9PUEVO
R0xfRVNfMikKKyAgICAgICAgI2RlZmluZSBURVhNQVBfT1BFTkdMX0VTXzIKKyAgICAjZW5kaWYK
KyNlbmRpZgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW50UmVj
dC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oIgorCisvKgorICAgIFRleHR1cmVNYXBwZXIgaXMgYSBtZWNoYW5pc20gdGhhdCBlbmFibGVz
IGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBvZiBDU1MgYW5pbWF0aW9ucyAoYWNjZWxlcmF0ZWQgY29t
cG9zaXRpbmcpIHdpdGhvdXQKKyAgICBhIG5lZWQgZm9yIGEgcGxhdGZvcm0gc3BlY2lmaWMgc2Nl
bmUtZ3JhcGggbGlicmFyeSBsaWtlIENvcmVBbmltYXRpb25zIG9yIFFHcmFwaGljc1ZpZXcuCisq
LworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHR1cmVNYXBwZXI7CisKKy8vIEEg
MkQgdGV4dHVyZSB0aGF0IGNhbiBiZSB0aGUgdGFyZ2V0IG9mIHNvZnR3YXJlIG9yIEdMIHJlbmRl
cmluZy4KK2NsYXNzIEJpdG1hcFRleHR1cmUgIDogcHVibGljIFJlZkNvdW50ZWQ8Qml0bWFwVGV4
dHVyZT4geworcHVibGljOgorICAgIEJpdG1hcFRleHR1cmUoKSA6IG1fbG9ja0NvdW50KDApIHt9
CisgICAgdmlydHVhbCB+Qml0bWFwVGV4dHVyZSgpIHsgfQorCisgICAgdmlydHVhbCBib29sIGFs
bG93T2ZmbGluZVRleHR1cmVVcGxvYWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgdm9pZCBkZXN0cm95KCkgPSAwOworICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgdm9pZCByZXNldChjb25zdCBJbnRTaXplJiBzaXplLCBib29sIG9wYXF1ZSA9IGZhbHNlKQor
ICAgIHsKKyAgICAgICAgbV9pc09wYXF1ZSA9IG9wYXF1ZTsKKyAgICAgICAgbV9jb250ZW50U2l6
ZSA9IHNpemU7CisgICAgfQorCisgICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCog
YmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZW5kUGFpbnQoKSA9IDA7CisgICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCog
YmVnaW5QYWludE1lZGlhKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiZWdpblBhaW50KEludFJl
Y3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpOworICAgIH0KKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKikgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBzYXZlKGNvbnN0IFN0cmluZyAmKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgaW5saW5l
IHZvaWQgbG9jaygpIHsgKyttX2xvY2tDb3VudDsgfQorICAgIGlubGluZSB2b2lkIHVubG9jaygp
IHsgLS1tX2xvY2tDb3VudDsgfQorICAgIGlubGluZSBib29sIGlzTG9ja2VkKCkgeyByZXR1cm4g
bV9sb2NrQ291bnQ7IH0KKyAgICBpbmxpbmUgSW50U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGVudFNpemU7IH0KKyAgICBpbmxpbmUgdm9pZCBzZXRPZmZzZXQoY29uc3Qg
SW50UG9pbnQmIG8pIHsgbV9vZmZzZXQgPSBvOyB9CisgICAgaW5saW5lIEludFBvaW50IG9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Citwcml2YXRlOgorICAgIGludCBtX2xvY2tD
b3VudDsKKyAgICBJbnRTaXplIG1fY29udGVudFNpemU7CisgICAgYm9vbCBtX2lzT3BhcXVlOwor
ICAgIEludFBvaW50IG1fb2Zmc2V0OworfTsKKworLy8gQSAiY29udGV4dCIgY2xhc3MgdXNlZCB0
byBlbmNhcHN1bGF0ZSBhY2NlbGVyYXRlZCB0ZXh0dXJlIG1hcHBpbmcgZnVuY3Rpb25zOiBpLmUu
IGRyYXdpbmcgYSB0ZXh0dXJlCisvLyBvbnRvIHRoZSBzY3JlZW4gb3IgaW50byBhbm90aGVyIHRl
eHR1cmUgd2l0aCBhIHNwZWNpZmllZCB0cmFuc2Zvcm0sIG9wYWNpdHkgYW5kIG1hc2suCitjbGFz
cyBUZXh0dXJlTWFwcGVyIDogcHVibGljIFJlZkNvdW50ZWQ8VGV4dHVyZU1hcHBlcj4geworICAg
IGZyaWVuZCBjbGFzcyBCaXRtYXBUZXh0dXJlOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8VGV4dHVyZU1hcHBlcj4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dCopOworICAgIHZpcnR1
YWwgflRleHR1cmVNYXBwZXIoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShj
b25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXQsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBm
bG9hdCBvcGFjaXR5ID0gMS4wZiwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUgPSAw
KSA9IDA7CisKKyAgICAvLyBtYWtlcyBhIHN1cmZhY2UgdGhlIHRhcmdldCBmb3IgdGhlIGZvbGxv
d2luZyBkcmF3VGV4dHVyZSBjYWxscy4KKyAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0
bWFwVGV4dHVyZSogc3VyZmFjZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGFyZ2V0
KGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFNpemUmLCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBJbnRSZWN0JiB2
aXNpYmxlUmVjdCkKKyAgICB7CisgICAgICAgIGRyYXdUZXh0dXJlKHRleHR1cmUsIEludFJlY3Qo
MCwgMCwgdGV4dHVyZS5jb250ZW50U2l6ZSgpLndpZHRoKCksIHRleHR1cmUuY29udGVudFNpemUo
KS5oZWlnaHQoKSksIG1hdHJpeCwgb3BhY2l0eSwgMCk7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIHNldENsaXAoY29uc3QgSW50UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dT
dXJmYWNlRm9yUm9vdCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5
cGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFudXAoKSB7fQorCisgICAgR3Jh
cGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2djOyB9CisK
K3Byb3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVyKEdyYXBoaWNzQ29udGV4dCogZ2MpIDogbV9n
YyhnYykge30KKyAgICBHcmFwaGljc0NvbnRleHQqIG1fZ2M7Cit9OworCit9OworCisjZW5kaWYK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4yM2U5ZmM5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaApAQCAtMCwwICsx
LDcwIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIFRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyX2gKKyNkZWZpbmUgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJfaAorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEludFJlY3Q7Citj
bGFzcyBJbnRTaXplOworY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CisKKworLy8gR2x1ZSBs
YXllciB0byBjb25uZWN0IHRoZSB0ZXhtYXAgbGF5ZXIgdG8gdGhlIHBsYXRmb3JtIHNwZWNpZmlj
IGNvbnRhaW5lci4KK2NsYXNzIFRleHR1cmVNYXBwZXJMYXllckNsaWVudCB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlckxheWVyQ2xpZW50KCkge30KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TmVlZHNEaXNwbGF5KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3Bs
YXlJblJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRT
aXplQ2hhbmdlZChjb25zdCBJbnRTaXplJikgPSAwOworfTsKKworY2xhc3MgVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXIgeworcHVibGljOgorICAgIGVudW0gVHlwZSB7CisgICAgICAgIENvbnRl
bnRMYXllciwKKyAgICAgICAgVmlkZW9MYXllcgorICAgIH07CisKKyAgICB2aXJ0dWFsIFR5cGUg
bGF5ZXJUeXBlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyKCkge30KK307CisKK2NsYXNzIFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIgOiBwdWJs
aWMgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9p
ZCBzZXRQbGF0Zm9ybUxheWVyQ2xpZW50KFRleHR1cmVNYXBwZXJMYXllckNsaWVudCopID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50U2l6ZSYs
IGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFJlY3QmIGV4cG9zZWRSZWN0LCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5KSB7fQor
ICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBj
bGVhbnVwVGV4dHVyZU1hcHBlcigpIHt9CisgICAgdmlydHVhbCBUeXBlIGxheWVyVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIENvbnRlbnRMYXllcjsgfQorfTsKKworI2lmIEVOQUJMRShWSURFTykKK2Ns
YXNzIFRleHR1cmVNYXBwZXJWaWRlb0xheWVyIDogcHVibGljIFRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0
KikgPSAwOworICAgIHZpcnR1YWwgVHlwZSBsYXllclR5cGUoKSBjb25zdCB7IHJldHVybiBWaWRl
b0xheWVyOyB9Cit9OworI2VuZGlmCisKK30KKworI2VuZGlmIC8vIFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69623</attachid>
            <date>2010-10-04 06:06:54 -0700</date>
            <delta_ts>2010-10-04 19:01:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch-47070-2.diff</filename>
            <type>text/plain</type>
            <size>112318</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzJiZjllNy4uYWI3ZDFjNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiwxNzAgQEAKIAogICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBbVGV4bWFwXSBbUXRdIFRleHR1cmUgbWFwcGVyIGlu
aXRpYWwgaW1wbGVtZW50YXRpb24KKyAgICAgICAgVGV4dHVyZSBNYXBwZXIgaXMgYW4gaW1wbGVt
ZW50YXRpb24gb2YgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgdGhhdCBkb2Vzbid0IHJlcXVpcmUg
YSBwbGF0Zm9ybSBzcGVjaWZpYyBzY2VuZWdyYXBoIGxpYnJhcnkgbGlrZSBDQSBvciBRR3JhcGhp
Y3NWaWV3LgorICAgICAgICBUaGUgaWRlYSBpcyB0aGF0IGluIHRpbWUgdGhpcyB3b3VsZCByZXBs
YWNlIEdyYXBoaWNzTGF5ZXJRdCwgYW5kIGNvdWxkIHNlcnZlIGFzIGFuIGltcGxlbWVudGF0aW9u
IGZvciBvdGhlciBwbGF0Zm9ybXMgdGhhdCBkb24ndCBoYXZlIGEgc2NlbmVncmFwaCBsaWJyYXJ5
LgorICAgICAgICBUaGUgZmlyc3Qgc3RhZ2Ugb2YgdGhpcyBpcyB0byBhZGQgYWxsIHRoZSBjb2Rl
IHRvIHRydW5rLCBhbmQgZW5hYmxlIGl0IGluIFF0IHdpdGggYW4gb3B0LWluIGJ1aWxkIGZsYWcg
c28gdGhhdCBpdCBjYW4gYmUgZWFzaWx5IHRlc3RlZC4gT25jZSBpdCByZWFjaGVzCisgICAgICAg
IGFuIGFkZXF1YXRlIGxldmVsIG9mIHN0YWJpbGl0eSwgd2UgY2FuIGVuYWJsZSBpdCBieSBkZWZh
dWx0IGFuZCBwZXJoYXBzIGhhdmUgaXQgcmVwbGFjZSBHcmFwaGljc0xheWVyUXQuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MDcwCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzOiBpbml0aWFsIHBhdGNoLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6ZGVidWdHTENvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6bG9hZFJlY3RUb1NoYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OkJpdG1hcFRleHR1cmVHTCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXhtYXBTaGFkZXJJbmZvOjpnZXRVbmlmb3JtTG9jYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4bWFwU2hhZGVySW5mbzo6Z2V0QXR0cmliTG9jYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4bWFwU2hhZGVySW5mbzo6Y3JlYXRlU2hhZGVyUHJvZ3JhbSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBUZXh0dXJlR0w6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6
YmVnaW5QYWludCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmVuZFBhaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleG1hcEdMU2hhZGVyVGV4dHVyZXM6OmZpbmRPckNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXhtYXBHTFNoYWRlclRleHR1cmVzOjpkZXJlZik6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnNldENvbnRlbnRzVG9JbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmRlc3Ryb3kpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwVGV4dHVyZUdMOjppc1ZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cFRleHR1cmVHTDo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVQcm9qZWN0aW9uTWF0
cml4KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Y2xlYW51cCk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJpbmRTdXJmYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6c2V0Q2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0w6OnBhaW50VG9UYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckdMOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvVGV4dHVyZU1hcHBlckdMLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckdMOjp+VGV4dHVyZU1hcHBlckdMKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJHTDo6YWxsb3dTdXJmYWNlRm9yUm9vdCk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJQcmVt
dWx0aW1wbGllZEJ1ZmZlcjo6flJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6Om5wb3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckNhY2hlOjpFbnRyeTo6RW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckNhY2hlOjpFbnRyeTo6Y2FsY3VsYXRlQ29zdCk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyQ2FjaGU6OkVudHJ5OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJDYWNoZTo6VGV4dHVyZU1hcHBlckNhY2hlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJDYWNoZTo6cHVyZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckNhY2hlOjptYXJrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWNo
ZUxvY2s6OlRleHR1cmVNYXBwZXJDYWNoZUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckNhY2hlTG9jazo6flRleHR1cmVNYXBwZXJDYWNoZUxvY2spOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlck5vZGU6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpub3RpZnlBbmltYXRpb25T
dGFydGVkQXN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OlRyYW5zZm9ybURhdGE6OlRy
YW5zZm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OkNvbnRl
bnREYXRhOjpDb250ZW50RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9k
ZTo6dGFyZ2V0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6ZnVs
bFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnJlcGxpY2FSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpHcmFwaGljc0xheWVyQW5p
bWF0aW9uOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJOb2RlOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlck5vZGU6OnNldE5lZWRzRGlzcGxheUluUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyTm9kZTo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJOb2RlOjpzZXRQbGF0Zm9ybUxheWVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbXBhcmVHcmFwaGljc0xheWVyc1pWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpzb3J0Qnla
T3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6Omhhc1N1cmZhY2VE
ZXNjZW5kYW50cyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnQp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNvdW50RGVzY2VuZGFudHNX
aXRoQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6dG9UZXh0
dXJlTWFwcGVyTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6Y29t
cHV0ZUxheWVyVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6aW5p
dGlhbGl6ZVRleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5v
ZGU6OlRleHR1cmVNYXBwZXJOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJO
b2RlOjpyb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6Omlu
dmFsaWRhdGVUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6
OmNvbXB1dGVMb2NhbFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
Tm9kZTo6ZmxhdHRlblRvMkRTcGFjZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJOb2RlOjpuZWFyZXN0U3VyZmFjZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVSZXBsaWNhVHJhbnNmb3JtKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlVHJhbnNmb3JtYXRpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpiZWdpbkFuaW1hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6ZW5kQW5pbWF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjp1cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnBhaW50U2VsZik6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRSZWN1cnNpdmUpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNsZWFudXBUZXh0dXJlTWFwcGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjp+VGV4dHVyZU1hcHBlck5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldFRyYW5zZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c2V0T3BhY2l0eUZyb21BbmltYXRpb25GcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6bm90aWZ5VHJhbnNmb3JtQW5p
bWF0aW9uUnVubmluZyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6bm90
aWZ5T3BhY2l0eUFuaW1hdGlvblJ1bm5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlck5vZGU6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlck5vZGU6OnNldFRyYW5zZm9ybUZyb21BbmltYXRpb25GcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6bm90aWZ5Q2hhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpwZXJmb3JtUG9zdFN5bmNPcGVyYXRpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6R3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6OnNldE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6On5HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROZWVkc0Rpc3BsYXlJblJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldFBh
cmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0
Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
OjphZGRDaGlsZEF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6OmFkZENoaWxkQWJvdmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OmFkZENoaWxkQmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OnJlcGxhY2VDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TWFza0xheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRSZXBsaWNhdGVkQnlM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OnNldEFuY2hvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyOjpzZXRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXI6OnNldENoaWxkcmVuVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRQcmVzZXJ2ZXMzRCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TWFza3NUb0JvdW5kcyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0RHJhd3NDb250ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRCYWNr
Z3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI6OmNsZWFyQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRPcGFjaXR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1Jl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENv
bnRlbnRzVG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6c2V0Q29udGVudHNCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9NZWRpYSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNPcmllbnRhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c3luY0Nv
bXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6bmF0aXZlTGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnBsYXRmb3JtTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQW5pbWF0
aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmU6OkJpdG1hcFRleHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6fkJpdG1hcFRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6YWxsb3dPZmZsaW5lVGV4dHVyZVVwbG9hZCk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjpyZXNldCk6CisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBUZXh0dXJlOjpiZWdpblBhaW50TWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwVGV4dHVyZTo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjps
b2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmU6OnVubG9jayk6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjppc0xvY2tlZCk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBUZXh0dXJlOjpjb250ZW50U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0
dXJlOjpzZXRPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6b2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6On5UZXh0dXJlTWFwcGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6OnBhaW50VG9UYXJnZXQpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6Y2xlYW51cCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyOjpncmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlcjo6VGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckxheWVyQ2xpZW50Ojp+VGV4dHVyZU1hcHBlckxheWVyQ2xpZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyOjp+VGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNvbnRlbnRM
YXllcjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNvbnRlbnRMYXll
cjo6Y2xlYW51cFRleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckNvbnRlbnRMYXllcjo6bGF5ZXJUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJWaWRlb0xheWVyOjpsYXllclR5cGUpOgorCisyMDEwLTEwLTAzICBObydhbSBSb3NlbnRoYWwg
IDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKICAgICAgICAgQWxsb3cgQ1NTIGFuaW1hdGlvbnMgdG8gcnVuIGF0IG1vcmUg
dGhhbiA0MEZQUwogICAgICAgICBBZGQgYSBzZXR0aW5ncyBmdW5jdGlvbiAoc2V0QW5pbWF0aW9u
VGltZXJEZWxheSkgdGhhdCBhZmZlY3RzIEFuaW1hdGlvbkNvbnRyb2xsZXIncyB0aW1lci4gVGhp
cyBpcyBpbiBhY2NvcmRhbmNlIHRvCiAgICAgICAgIGhvdyB0aGUgRE9NVGltZXIgbWluaW11bSBp
bnRlcnZhbCBzZXR0aW5ncyB3ZXJlIGRvbmUgaW4gYnVnIDQ1MzYyLgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ3NzUwYgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTAs
MCArMSw2NTIgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCisKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIYXNoTWFwLmgiCisjaW5jbHVkZSAiSW1h
Z2UuaCIKKyNpbmNsdWRlICJQYXNzUmVmUHRyLmgiCisjaW5jbHVkZSAiUmVmQ291bnRlZC5oIgor
I2luY2x1ZGUgIlRpbWVyLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIGRlZmluZWQoVEVY
TUFQX09QRU5HTF9FU18yKQorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2VsaWYgUExBVEZPUk0o
TUFDKQorI2luY2x1ZGUgPGdsLmg+CisjZWxzZQorI2luY2x1ZGUgPEdML2dsLmg+CisjZW5kaWYK
KworI2lmbmRlZiBURVhNQVBfT1BFTkdMX0VTMgorZXh0ZXJuICJDIiB7CisgICAgdm9pZCBnbFVu
aWZvcm0xZihHTGludCwgR0xmbG9hdCk7CisgICAgdm9pZCBnbFVuaWZvcm0xaShHTGludCwgR0xp
bnQpOworICAgIHZvaWQgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKEdMdWludCwgR0xpbnQsIEdMZW51
bSwgR0xib29sZWFuLCBHTHNpemVpLCBjb25zdCBHTHZvaWQqKTsKKyAgICB2b2lkIGdsVW5pZm9y
bTRmKEdMaW50LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZsb2F0KTsKKyAgICB2b2lk
IGdsU2hhZGVyU291cmNlKEdMdWludCwgR0xzaXplaSwgY29uc3QgY2hhcioqLCBjb25zdCBHTGlu
dCopOworICAgIEdMdWludCBnbENyZWF0ZVNoYWRlcihHTGVudW0pOworICAgIHZvaWQgZ2xTaGFk
ZXJTb3VyY2UoR0x1aW50LCBHTHNpemVpLCBjb25zdCBjaGFyKiosIGNvbnN0IEdMaW50Kik7Cisg
ICAgdm9pZCBnbENvbXBpbGVTaGFkZXIoR0x1aW50KTsKKyAgICB2b2lkIGdsRGVsZXRlU2hhZGVy
KEdMdWludCk7CisgICAgdm9pZCBnbFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQsIEdMc2l6ZWksIEdM
Ym9vbGVhbiwgY29uc3QgR0xmbG9hdCopOworICAgIEdMdWludCBnbENyZWF0ZVByb2dyYW0oKTsK
KyAgICB2b2lkIGdsQXR0YWNoU2hhZGVyKEdMdWludCwgR0x1aW50KTsKKyAgICB2b2lkIGdsTGlu
a1Byb2dyYW0oR0x1aW50KTsKKyAgICB2b2lkIGdsVXNlUHJvZ3JhbShHTHVpbnQpOworICAgIHZv
aWQgZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0x1aW50KTsKKyAgICB2b2lkIGdsRW5hYmxl
VmVydGV4QXR0cmliQXJyYXkoR0x1aW50KTsKKyAgICB2b2lkIGdsQmluZEZyYW1lYnVmZmVyKEdM
ZW51bSB0YXJnZXQsIEdMdWludCBmcmFtZWJ1ZmZlcik7CisgICAgdm9pZCBnbERlbGV0ZUZyYW1l
YnVmZmVycyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCAqZnJhbWVidWZmZXJzKTsKKyAgICB2b2lk
IGdsR2VuRnJhbWVidWZmZXJzKEdMc2l6ZWkgbiwgR0x1aW50ICpmcmFtZWJ1ZmZlcnMpOworICAg
IHZvaWQgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNo
bWVudCwgR0xlbnVtIHRleHRhcmdldCwgR0x1aW50IHRleHR1cmUsIEdMaW50IGxldmVsKTsKKyAg
ICB2b2lkIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0xlbnVtIHRhcmdl
dCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7CisgICAg
dm9pZCBnbEJpbmRCdWZmZXIoR0xlbnVtLCBHTHVpbnQpOworICAgIHZvaWQgZ2xEZWxldGVCdWZm
ZXJzKEdMc2l6ZWksIGNvbnN0IEdMdWludCopOworICAgIHZvaWQgZ2xHZW5CdWZmZXJzKEdMc2l6
ZWksIEdMdWludCopOworICAgIHZvaWQgZ2xCdWZmZXJEYXRhKEdMZW51bSwgR0xzaXplaXB0ciwg
Y29uc3QgR0x2b2lkKiwgR0xlbnVtKTsKKyAgICB2b2lkIGdsQnVmZmVyU3ViRGF0YShHTGVudW0s
IEdMc2l6ZWlwdHIsIEdMc2l6ZWlwdHIsIGNvbnN0IEdMdm9pZCopOworICAgIHZvaWQgZ2xHZXRQ
cm9ncmFtSW5mb0xvZyhHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSwgR0xzaXplaSosIEdMY2hhciop
OworCisjaWYgIVBMQVRGT1JNKE1BQykKKyAgICBHTGludCBnbEdldFVuaWZvcm1Mb2NhdGlvbihH
THVpbnQsIGNvbnN0IEdMY2hhciopOworICAgIEdMaW50IGdsR2V0QXR0cmliTG9jYXRpb24oR0x1
aW50LCBjb25zdCBHTGNoYXIqKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKworbmFtZXNwYWNlIFdU
RiB7CisKKy8vIFN0cmluZ0hhc2ggaXMgdGhlIGRlZmF1bHQgaGFzaCBmb3IgU3RyaW5nCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBI
YXNoVHJhaXRzPFdlYkNvcmU6OkZsb2F0UmVjdD4gOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPFdl
YkNvcmU6OkZsb2F0UmVjdD4geworICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1
ZShXZWJDb3JlOjpGbG9hdFJlY3QmIHNsb3QpIHsgc2xvdCA9IFdlYkNvcmU6OkZsb2F0UmVjdCgp
OyB9CisgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gV2ViQ29yZTo6RmxvYXRSZWN0KCk7IH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFdlYkNvcmU6OkZsb2F0UmVjdD4gewor
ICAgIHN0cnVjdCBIYXNoIHsKKyAgICAgICAgc3RhdGljIGludCBoYXNoKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGludChyZWN0
LngoKSAqIDB4MTApIHwgKGludChyZWN0LnkoKSAqIDB4MTApIDw8IDQpIHwgKGludChyZWN0Lmhl
aWdodCgpICogMHgxMDApIDw8IDgpIHwgKGludChyZWN0LndpZHRoKCkgKiAweDEwMCkgPDwgMjAp
OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBhLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGIpIHsgcmV0dXJuIGEgPT0g
YjsgfQorCisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JE
ZWxldGVkID0gdHJ1ZTsKKyAgICB9OworfTsKKworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2lubGluZSBzdGF0aWMgdm9pZCBkZWJ1Z0dMQ29tbWFuZChjb25zdCBjaGFyKiBjb21tYW5kLCBp
bnQgbGluZSkKK3sKKyAgICBjb25zdCBHTGVudW0gZXJyID0gZ2xHZXRFcnJvcigpOworICAgIGlm
IChlcnIpCisgICAgICAgIHByaW50ZigiW1RleHR1cmVNYXBwZXIgR0xdIENvbW1hbmQgZmFpbGVk
OiBMaW5lICVkXG5cdG9wZXJhdGlvbjogJXMsIFxuXHRlcnJvcjogJXhcbiIsIGxpbmUsIGNvbW1h
bmQsIGVycik7Cit9CisKKyNkZWZpbmUgREVCVUdfR0xfQ09NTUFORFMKKworI2lmZGVmIERFQlVH
X0dMX0NPTU1BTkRTCisjZGVmaW5lIEdMX0NNRCh4KSB7eCwgZGVidWdHTENvbW1hbmQoI3gsIF9f
TElORV9fKTsgfQorI2Vsc2UKKyNkZWZpbmUgR0xfQ01EKHgpIHgKKyNlbmRpZgorCitzdHJ1Y3Qg
VGV4bWFwR0xWYm9SZXBvc2l0b3J5IHsKKyAgICB0eXBlZGVmIEhhc2hNYXA8RmxvYXRSZWN0LCBH
THVpbnQ+IFZib01hcDsKKyAgICBWYm9NYXAgdmJvTWFwOworfTsKKworc3RhdGljIFRleG1hcEdM
VmJvUmVwb3NpdG9yeSBnVmJvUmVwb3NpdG9yeTsKKworc3RhdGljIHZvaWQgbG9hZFJlY3RUb1No
YWRlcihHTHVpbnQgaWQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBHTHVpbnQgdmJv
OworICAgIFRleG1hcEdMVmJvUmVwb3NpdG9yeTo6VmJvTWFwOjppdGVyYXRvciBpdCA9IGdWYm9S
ZXBvc2l0b3J5LnZib01hcC5maW5kKHJlY3QpOworICAgIGlmIChpdCA9PSBnVmJvUmVwb3NpdG9y
eS52Ym9NYXAuZW5kKCkpIHsKKyAgICAgICAgY29uc3QgRmxvYXRRdWFkIHF1YWQocmVjdCk7Cisg
ICAgICAgIEdMX0NNRChnbEdlbkJ1ZmZlcnMoMSwgJnZibykpCisgICAgICAgIEdMX0NNRChnbEJp
bmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCB2Ym8pKQorICAgICAgICBHTF9DTUQoZ2xCdWZmZXJE
YXRhKEdMX0FSUkFZX0JVRkZFUiwgc2l6ZW9mKEZsb2F0UXVhZCksICZxdWFkLCBHTF9TVEFUSUNf
RFJBVykpCisgICAgICAgIGdWYm9SZXBvc2l0b3J5LnZib01hcC5hZGQocmVjdCwgdmJvKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICB2Ym8gPSBpdC0+c2Vjb25kOworICAgICAgICBHTF9DTUQoZ2xC
aW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgdmJvKSkKKyAgICB9CisgICAgR0xfQ01EKGdsVmVy
dGV4QXR0cmliUG9pbnRlcihpZCwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCAwKSkKK30KKwor
Y2xhc3MgQml0bWFwVGV4dHVyZUdMIDogcHVibGljIEJpdG1hcFRleHR1cmUgeworcHVibGljOgor
ICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CisgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCByZXNldChjb25zdCBJbnRTaXplJiwgYm9vbCBvcGFxdWUpOworICAgIHZpcnR1YWwgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsK
KyAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVu
dHNUb0ltYWdlKEltYWdlKik7CisKK3ByaXZhdGU6CisgICAgR0x1aW50IG1faWQ7CisgICAgTmF0
aXZlSW1hZ2VQdHIgbV9pbWFnZTsKKyAgICBGbG9hdFNpemUgbV9yZWxhdGl2ZVNpemU7CisgICAg
Ym9vbCBtX29wYXF1ZTsKKyAgICBJbnRTaXplIG1fdGV4dHVyZVNpemU7CisgICAgUmVmUHRyPFJH
QkEzMlByZW11bHRpbXBsaWVkQnVmZmVyPiBtX2J1ZmZlcjsKKyAgICBJbnRSZWN0IG1fZGlydHlS
ZWN0OworICAgIEZsb2F0UmVjdCBtX3NvdXJjZVJlY3Q7CisgICAgR0x1aW50IG1fZmJvOworICAg
IEludFNpemUgbV9hY3R1YWxTaXplOworICAgIGJvb2wgbV9zdXJmYWNlTmVlZHNSZXNldDsKKyAg
ICBCaXRtYXBUZXh0dXJlR0woKQorICAgICAgICA6IG1faWQoMCkKKyAgICAgICAgLCBtX2ltYWdl
KDApCisgICAgICAgICwgbV9vcGFxdWUoZmFsc2UpCisgICAgICAgICwgbV9mYm8oMCkKKyAgICAg
ICAgLCBtX3N1cmZhY2VOZWVkc1Jlc2V0KHRydWUpCisgICAgeworICAgIH0KKworICAgIGZyaWVu
ZCBjbGFzcyBUZXh0dXJlTWFwcGVyR0w7Cit9OworCitzdGF0aWMgc3RydWN0IFRleG1hcFNoYWRl
ckluZm8geworICAgIGVudW0gU2hhZGVyUHJvZ3JhbUluZGV4IHsKKyAgICAgICAgU2ltcGxlUHJv
Z3JhbSwKKyAgICAgICAgT3BhY2l0eVByb2dyYW0sCisgICAgICAgIE9wYWNpdHlBbmRNYXNrUHJv
Z3JhbSwKKyAgICAgICAgVGFyZ2V0UHJvZ3JhbSwKKyAgICAgICAgTnVtUHJvZ3JhbXMKKyAgICB9
OworCisgICAgZW51bSBTaGFkZXJWYXJpYWJsZUluZGV4IHsKKyAgICAgICAgSW5NYXRyaXhWYXJp
YWJsZSwKKyAgICAgICAgSW5UZXhDb29yZFNvdXJjZVZhcmlhYmxlLAorICAgICAgICBJblZlcnRl
eFZhcmlhYmxlLAorICAgICAgICBJblRleENvb3JkTWFza1ZhcmlhYmxlLAorCisgICAgICAgIE9w
YWNpdHlWYXJpYWJsZSwKKyAgICAgICAgU291cmNlVGV4dHVyZVZhcmlhYmxlLAorICAgICAgICBN
YXNrVGV4dHVyZVZhcmlhYmxlLAorICAgICAgICBOdW1WYXJpYWJsZXMKKyAgICB9OworCisgICAg
c3RydWN0IFByb2dyYW1JbmZvIHsKKyAgICAgICAgR0x1aW50IGlkOworICAgICAgICBHTGludCB2
YXJzW051bVZhcmlhYmxlc107CisgICAgfTsKKworICAgIEdMaW50IGdldFVuaWZvcm1Mb2NhdGlv
bihTaGFkZXJQcm9ncmFtSW5kZXggcHJvZywgU2hhZGVyVmFyaWFibGVJbmRleCB2YXIsIGNvbnN0
IGNoYXIqIG5hbWUpCisgICAgeworICAgICAgICByZXR1cm4gcHJvZ3JhbXNbcHJvZ10udmFyc1t2
YXJdID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbXNbcHJvZ10uaWQsIG5hbWUpOworICAg
IH0KKworICAgIEdMaW50IGdldEF0dHJpYkxvY2F0aW9uKFNoYWRlclByb2dyYW1JbmRleCBwcm9n
LCBTaGFkZXJWYXJpYWJsZUluZGV4IHZhciwgY29uc3QgY2hhciogbmFtZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBwcm9ncmFtc1twcm9nXS52YXJzW3Zhcl0gPSBnbEdldEF0dHJpYkxvY2F0aW9u
KHByb2dyYW1zW3Byb2ddLmlkLCBuYW1lKTsKKyAgICB9CisKKyAgICB2b2lkIGNyZWF0ZVNoYWRl
clByb2dyYW0oY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFn
bWVudFNoYWRlclNvdXJjZSwgU2hhZGVyUHJvZ3JhbUluZGV4IGluZGV4KQorICAgIHsKKyAgICAg
ICAgR0x1aW50IHZlcnRleFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIp
OworICAgICAgICBHTHVpbnQgZnJhZ21lbnRTaGFkZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9GUkFH
TUVOVF9TSEFERVIpOworICAgICAgICBHTF9DTUQoZ2xTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVy
LCAxLCAmdmVydGV4U2hhZGVyU291cmNlLCAwKSkKKyAgICAgICAgR0xfQ01EKGdsU2hhZGVyU291
cmNlKGZyYWdtZW50U2hhZGVyLCAxLCAmZnJhZ21lbnRTaGFkZXJTb3VyY2UsIDApKQorICAgICAg
ICBHTHVpbnQgcHJvZ3JhbUlEID0gZ2xDcmVhdGVQcm9ncmFtKCk7CisgICAgICAgIEdMX0NNRChn
bENvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKSkKKyAgICAgICAgR0xfQ01EKGdsQ29tcGlsZVNo
YWRlcihmcmFnbWVudFNoYWRlcikpCisgICAgICAgIEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9n
cmFtSUQsIHZlcnRleFNoYWRlcikpCisgICAgICAgIEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9n
cmFtSUQsIGZyYWdtZW50U2hhZGVyKSkKKyAgICAgICAgR0xfQ01EKGdsTGlua1Byb2dyYW0ocHJv
Z3JhbUlEKSkKKyAgICAgICAgcHJvZ3JhbXNbaW5kZXhdLmlkID0gcHJvZ3JhbUlEOworICAgICAg
ICBjaGFyIGluZm9Mb2dbMTAyNF07CisgICAgICAgIGludCBsZW47CisgICAgICAgIGdsR2V0UHJv
Z3JhbUluZm9Mb2cocHJvZ3JhbUlELCAxMDI0LCAmbGVuLCBpbmZvTG9nKTsKKyAgICAgICAgcHJp
bnRmKCIlc1xuIiwgaW5mb0xvZyk7CisgICAgfQorCisgICAgUHJvZ3JhbUluZm8gcHJvZ3JhbXNb
TnVtUHJvZ3JhbXNdOworCit9IGdTaGFkZXJJbmZvOworCisjZGVmaW5lIFRFWE1BUF9HRVRfU0hB
REVSX1ZBUl9MT0NBVElPTih0eXBlLCBwcm9nLCB2YXIpIGlmIChnU2hhZGVySW5mby5nZXQjI3R5
cGUjI0xvY2F0aW9uKFRleG1hcFNoYWRlckluZm86OnByb2cjI1Byb2dyYW0sIFRleG1hcFNoYWRl
ckluZm86OnZhciMjVmFyaWFibGUsICN2YXIpIDwgMCkgcHJpbnRmKCJDb3VsZG4ndCBmaW5kIHZh
cmlhYmxlICIjdmFyIiBpbiBwcm9ncmFtICIjcHJvZyJcbiIpOworI2RlZmluZSBURVhNQVBfQlVJ
TERfU0hBREVSKHByb2dyYW0pIGdTaGFkZXJJbmZvLmNyZWF0ZVNoYWRlclByb2dyYW0odmVydGV4
U2hhZGVyU291cmNlIyNwcm9ncmFtLCBmcmFnbWVudFNoYWRlclNvdXJjZSMjcHJvZ3JhbSwgVGV4
bWFwU2hhZGVySW5mbzo6cHJvZ3JhbSMjUHJvZ3JhbSk7CisKK1RleHR1cmVNYXBwZXJHTDo6VGV4
dHVyZU1hcHBlckdMKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKKyAgICA6IFRleHR1cmVNYXBw
ZXIoY29udGV4dCkKKyAgICAsIG1fY3VyUHJvZ3JhbShUZXhtYXBTaGFkZXJJbmZvOjpUYXJnZXRQ
cm9ncmFtKQoreworICAgIHN0YXRpYyBib29sIHNoYWRlcnNDb21waWxlZCA9IGZhbHNlOworICAg
IGlmIChzaGFkZXJzQ29tcGlsZWQpCisgICAgICAgIHJldHVybjsKKyAgICBzaGFkZXJzQ29tcGls
ZWQgPSB0cnVlOworI2lmbmRlZiBURVhNQVBfT1BFTkdMX0VTMgorI2RlZmluZSBPRVMyX1BFUkNJ
U0lPTl9ERUZJTklUSU9OUyBcCisgICAgIiNkZWZpbmUgbG93cFxuI2RlZmluZSBoaWdocFxuIgor
I2Vsc2UKKyNkZWZpbmUgT0VTMl9QRVJDSVNJT05fREVGSU5JVElPTlMKKyNlbmRpZgorCisgICAg
Y29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9CisgICAgICAg
ICAgICBPRVMyX1BFUkNJU0lPTl9ERUZJTklUSU9OUworIiAgICAgICAgICAgICAgIHVuaWZvcm0g
c2FtcGxlcjJEIFNvdXJjZVRleHR1cmUsIE1hc2tUZXh0dXJlOyAgICAgICAgICAgICAgICAgICAg
ICAgXG4iCisiICAgICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IE9wYWNpdHk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB2
YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0VGV4Q29vcmRTb3VyY2UsIE91dFRleENvb3JkTWFzazsgICAg
ICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAg
ICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9y
ID0gdGV4dHVyZTJEKFNvdXJjZVRleHR1cmUsIE91dFRleENvb3JkU291cmNlKTsgIFxuIgorIiAg
ICAgICAgICAgICAgICAgICBsb3dwIHZlYzQgbWFza0NvbG9yID0gdGV4dHVyZTJEKE1hc2tUZXh0
dXJlLCBPdXRUZXhDb29yZE1hc2spOyAgXG4iCisiICAgICAgICAgICAgICAgICAgIGxvd3AgZmxv
YXQgbyA9IE9wYWNpdHkgKiBtYXNrQ29sb3IuYTsgICAgICAgICAgICAgICAgICAgICAgICAgICBc
biIKKyIgICAgICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBv
LCBjb2xvci5hICogbyk7ICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXG4iOworCisgICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlT3BhY2l0eUFu
ZE1hc2sgPQorICAgICAgICAgICAgT0VTMl9QRVJDSVNJT05fREVGSU5JVElPTlMKKyIgICAgICAg
ICAgICAgICB1bmlmb3JtIG1hdDQgSW5NYXRyaXg7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgSW5UZXhD
b29yZFNvdXJjZSwgSW5UZXhDb29yZE1hc2ssIEluVmVydGV4OyAgICAgIFxuIgorIiAgICAgICAg
ICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiBPdXRUZXhDb29yZFNvdXJjZSwgT3V0VGV4Q29vcmRN
YXNrOyAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAg
ICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICBPdXRUZXhDb29yZFNvdXJjZSA9
IHZlYzIoSW5UZXhDb29yZFNvdXJjZSk7ICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAg
ICAgICAgICAgT3V0VGV4Q29vcmRNYXNrID0gdmVjMihJblRleENvb3JkTWFzayk7ICAgICAgICAg
ICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gSW5NYXRy
aXggKiBJblZlcnRleDsgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAg
ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcbiI7CisKKyAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZU9w
YWNpdHkgPQorICAgICAgICAgICAgT0VTMl9QRVJDSVNJT05fREVGSU5JVElPTlMKKyIgICAgICAg
ICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBTb3VyY2VUZXh0dXJlOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9h
dCBPcGFjaXR5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisi
ICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIE91dFRleENvb3JkU291cmNlOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB2b2lkIG1haW4o
dm9pZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFxuIgorIiAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAg
IGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRChTb3VyY2VUZXh0dXJlLCBPdXRUZXhDb29yZFNv
dXJjZSk7ICBcbiIKKyIgICAgICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xv
ci5yZ2IgKiBPcGFjaXR5LCBjb2xvci5hICogT3BhY2l0eSk7ICAgIFxuIgorIiAgICAgICAgICAg
ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXG4iOworCisgICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNl
T3BhY2l0eSA9CisgICAgICAgICAgICBPRVMyX1BFUkNJU0lPTl9ERUZJTklUSU9OUworIiAgICAg
ICAgICAgICAgIHVuaWZvcm0gbWF0NCBJbk1hdHJpeDsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcbiIKKyIgICAgICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBJblRleENvb3JkU291cmNl
LCBJblZlcnRleDsgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2
ZWMyIE91dFRleENvb3JkU291cmNlOyAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAg
IHZvaWQgbWFpbih2b2lkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIK
KyIgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgIE91dFRleENvb3JkU291cmNlID0g
dmVjMihJblRleENvb3JkU291cmNlKTsgICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICBnbF9Q
b3NpdGlvbiA9IEluTWF0cml4ICogSW5WZXJ0ZXg7ICAgICAgICAgICAgICBcbiIKKyIgICAgICAg
ICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXG4iOworCisgICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUgPQor
ICAgICAgICAgICAgT0VTMl9QRVJDSVNJT05fREVGSU5JVElPTlMKKyIgICAgICAgICAgICAgICB1
bmlmb3JtIHNhbXBsZXIyRCBTb3VyY2VUZXh0dXJlOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0
VGV4Q29vcmRTb3VyY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIg
ICAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVy
ZTJEKFNvdXJjZVRleHR1cmUsIE91dFRleENvb3JkU291cmNlKTsgICAgICBcbiIKKyIgICAgICAg
ICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcbiI7CisKKyAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUgPSB2ZXJ0
ZXhTaGFkZXJTb3VyY2VPcGFjaXR5OworCisgICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJT
b3VyY2VUYXJnZXQgPQorICAgICAgICAgICAgT0VTMl9QRVJDSVNJT05fREVGSU5JVElPTlMKKyIg
ICAgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBTb3VyY2VUZXh0dXJlOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgdW5p
Zm9ybSBsb3dwIGZsb2F0IE9wYWNpdHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiBP
dXRUZXhDb29yZFNvdXJjZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
biIKKyIgICAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAg
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICBsb3dwIHZlYzQg
Y29sb3IgPSB0ZXh0dXJlMkQoU291cmNlVGV4dHVyZSwgT3V0VGV4Q29vcmRTb3VyY2UpOyAgICAg
ICAgICBcbiIKKyIgICAgICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5i
Z3IgKiBPcGFjaXR5LCBjb2xvci5hICogT3BhY2l0eSk7ICAgICAgICAgICAgXG4iCisiICAgICAg
ICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKworICAgIGNvbnN0IGNoYXIqIHZlcnRl
eFNoYWRlclNvdXJjZVRhcmdldCA9CisgICAgICAgICAgICBPRVMyX1BFUkNJU0lPTl9ERUZJTklU
SU9OUworIiAgICAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IEluVGV4Q29vcmRTb3VyY2UsIElu
VmVydGV4OyAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIg
T3V0VGV4Q29vcmRTb3VyY2U7ICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgdm9p
ZCBtYWluKHZvaWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAg
ICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICAgICAgT3V0VGV4Q29vcmRTb3VyY2UgPSB2ZWMy
KEluVGV4Q29vcmRTb3VyY2UpOyAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgIGdsX1Bvc2l0
aW9uID0gSW5WZXJ0ZXg7ICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAg
ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
biI7CisKKyAgICBURVhNQVBfQlVJTERfU0hBREVSKFNpbXBsZSkKKyAgICBURVhNQVBfQlVJTERf
U0hBREVSKE9wYWNpdHkpCisgICAgVEVYTUFQX0JVSUxEX1NIQURFUihPcGFjaXR5QW5kTWFzaykK
KyAgICBURVhNQVBfQlVJTERfU0hBREVSKFRhcmdldCkKKworICAgIFRFWE1BUF9HRVRfU0hBREVS
X1ZBUl9MT0NBVElPTihBdHRyaWIsIE9wYWNpdHlBbmRNYXNrLCBJblZlcnRleCkKKyAgICBURVhN
QVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oQXR0cmliLCBPcGFjaXR5QW5kTWFzaywgSW5UZXhD
b29yZFNvdXJjZSkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oQXR0cmliLCBP
cGFjaXR5QW5kTWFzaywgSW5UZXhDb29yZE1hc2spCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFS
X0xPQ0FUSU9OKFVuaWZvcm0sIE9wYWNpdHlBbmRNYXNrLCBJbk1hdHJpeCkKKyAgICBURVhNQVBf
R0VUX1NIQURFUl9WQVJfTE9DQVRJT04oVW5pZm9ybSwgT3BhY2l0eUFuZE1hc2ssIFNvdXJjZVRl
eHR1cmUpCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKFVuaWZvcm0sIE9wYWNp
dHlBbmRNYXNrLCBNYXNrVGV4dHVyZSkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJ
T04oVW5pZm9ybSwgT3BhY2l0eUFuZE1hc2ssIE9wYWNpdHkpCisKKyAgICBURVhNQVBfR0VUX1NI
QURFUl9WQVJfTE9DQVRJT04oQXR0cmliLCBPcGFjaXR5LCBJblZlcnRleCkKKyAgICBURVhNQVBf
R0VUX1NIQURFUl9WQVJfTE9DQVRJT04oQXR0cmliLCBPcGFjaXR5LCBJblRleENvb3JkU291cmNl
KQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihVbmlmb3JtLCBPcGFjaXR5LCBJ
bk1hdHJpeCkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oVW5pZm9ybSwgT3Bh
Y2l0eSwgU291cmNlVGV4dHVyZSkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04o
VW5pZm9ybSwgT3BhY2l0eSwgT3BhY2l0eSkKKworICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9M
T0NBVElPTihBdHRyaWIsIFNpbXBsZSwgSW5WZXJ0ZXgpCisgICAgVEVYTUFQX0dFVF9TSEFERVJf
VkFSX0xPQ0FUSU9OKEF0dHJpYiwgU2ltcGxlLCBJblRleENvb3JkU291cmNlKQorICAgIFRFWE1B
UF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihVbmlmb3JtLCBTaW1wbGUsIEluTWF0cml4KQorICAg
IFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihVbmlmb3JtLCBTaW1wbGUsIFNvdXJjZVRl
eHR1cmUpCisKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oQXR0cmliLCBUYXJn
ZXQsIEluVGV4Q29vcmRTb3VyY2UpCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9O
KEF0dHJpYiwgVGFyZ2V0LCBJblZlcnRleCkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9D
QVRJT04oVW5pZm9ybSwgVGFyZ2V0LCBTb3VyY2VUZXh0dXJlKQorICAgIFRFWE1BUF9HRVRfU0hB
REVSX1ZBUl9MT0NBVElPTihVbmlmb3JtLCBUYXJnZXQsIE9wYWNpdHkpCit9CisKK3ZvaWQgVGV4
dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBj
b25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9k
ZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4
dHVyZSkKK3sKKyAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wmIHRleHR1cmVHTCA9IHN0YXRpY19j
YXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KHRleHR1cmUpOworICAgIGlmICghdGV4dHVyZS5p
c1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFRleG1hcFNoYWRlckluZm86OlNoYWRl
clByb2dyYW1JbmRleCBwcm9ncmFtOworICAgIGlmIChtYXNrVGV4dHVyZSkKKyAgICAgICAgcHJv
Z3JhbSA9IFRleG1hcFNoYWRlckluZm86Ok9wYWNpdHlBbmRNYXNrUHJvZ3JhbTsKKyAgICBlbHNl
IGlmIChvcGFjaXR5IDwgMC45OSkKKyAgICAgICAgcHJvZ3JhbSA9IFRleG1hcFNoYWRlckluZm86
Ok9wYWNpdHlQcm9ncmFtOworICAgIGVsc2UKKyAgICAgICAgcHJvZ3JhbSA9IFRleG1hcFNoYWRl
ckluZm86OlNpbXBsZVByb2dyYW07CisgICAgY29uc3QgVGV4bWFwU2hhZGVySW5mbzo6UHJvZ3Jh
bUluZm8mIHByb2dyYW1JbmZvID0gZ1NoYWRlckluZm8ucHJvZ3JhbXNbcHJvZ3JhbV07CisgICAg
aWYgKG1fY3VyUHJvZ3JhbSAhPSBwcm9ncmFtKSB7CisgICAgICAgIEdMX0NNRChnbFVzZVByb2dy
YW0ocHJvZ3JhbUluZm8uaWQpKQorICAgICAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmli
QXJyYXkoZ1NoYWRlckluZm8ucHJvZ3JhbXNbbV9jdXJQcm9ncmFtXS52YXJzW1RleG1hcFNoYWRl
ckluZm86OkluVGV4Q29vcmRTb3VyY2VWYXJpYWJsZV0pKQorICAgICAgICBHTF9DTUQoZ2xEaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkoZ1NoYWRlckluZm8ucHJvZ3JhbXNbbV9jdXJQcm9ncmFtXS52
YXJzW1RleG1hcFNoYWRlckluZm86OkluVmVydGV4VmFyaWFibGVdKSkKKyAgICAgICAgbV9jdXJQ
cm9ncmFtID0gcHJvZ3JhbTsKKyAgICAgICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJy
YXkocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblRleENvb3JkU291cmNlVmFy
aWFibGVdKSkKKyAgICAgICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3Jh
bUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblZlcnRleFZhcmlhYmxlXSkpCisgICAgfQor
CisgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKSkKKyAgICBHTF9DTUQoZ2xEaXNh
YmxlKEdMX1NURU5DSUxfVEVTVCkpCisKKyAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RF
WFRVUkUwKSkKKyAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJl
R0wubV9pZCkpCisgICAgbG9hZFJlY3RUb1NoYWRlcihwcm9ncmFtSW5mby52YXJzW1RleG1hcFNo
YWRlckluZm86OkluVmVydGV4VmFyaWFibGVdLCB0YXJnZXRSZWN0KTsKKyAgICBsb2FkUmVjdFRv
U2hhZGVyKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5UZXhDb29yZFNvdXJj
ZVZhcmlhYmxlXSwgdGV4dHVyZUdMLm1fc291cmNlUmVjdCk7CisgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgobV9wcm9qZWN0aW9uTWF0cml4KS5t
dWx0TGVmdChtb2RlbFZpZXdNYXRyaXgpOworICAgIGNvbnN0IEdMZmxvYXQgbTRbXSA9IHsKKyAg
ICAgICAgbWF0cml4Lm0xMSgpLCBtYXRyaXgubTEyKCksIG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0x
NCgpLAorICAgICAgICBtYXRyaXgubTIxKCksIG1hdHJpeC5tMjIoKSwgbWF0cml4Lm0yMygpLCBt
YXRyaXgubTI0KCksCisgICAgICAgIG1hdHJpeC5tMzEoKSwgbWF0cml4Lm0zMigpLCBtYXRyaXgu
bTMzKCksIG1hdHJpeC5tMzQoKSwKKyAgICAgICAgbWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCks
IG1hdHJpeC5tNDMoKSwgbWF0cml4Lm00NCgpCisgICAgfTsKKyAgICBnbFVuaWZvcm1NYXRyaXg0
ZnYocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJbk1hdHJpeFZhcmlhYmxlXSwg
MSwgR0xfRkFMU0UsIG00KTsKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbUluZm8udmFy
c1tUZXhtYXBTaGFkZXJJbmZvOjpTb3VyY2VUZXh0dXJlVmFyaWFibGVdLCAwKSkKKworICAgIGlm
IChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpKSB7CisgICAgICAgIGNvbnN0
IEJpdG1hcFRleHR1cmVHTCogbWFza1RleHR1cmVHTCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1h
cFRleHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsKKyAgICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVy
ZShHTF9URVhUVVJFMSkpCisgICAgICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIG1hc2tUZXh0dXJlR0wtPm1faWQpKQorICAgICAgICBsb2FkUmVjdFRvU2hhZGVyKHByb2dy
YW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5UZXhDb29yZE1hc2tWYXJpYWJsZV0sIG1h
c2tUZXh0dXJlR0wtPm1fc291cmNlUmVjdCk7CisgICAgICAgIEdMX0NNRChnbEVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5UZXhDb29y
ZE1hc2tWYXJpYWJsZV0pKQorICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbUluZm8u
dmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpNYXNrVGV4dHVyZVZhcmlhYmxlXSwgMSkpCisgICAgICAg
IEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKQorICAgIH0KKworICAgIGlmIChw
cm9ncmFtICE9IFRleG1hcFNoYWRlckluZm86OlNpbXBsZVByb2dyYW0pCisgICAgICAgIEdMX0NN
RChnbFVuaWZvcm0xZihwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86Ok9wYWNpdHlW
YXJpYWJsZV0sIG9wYWNpdHkpKQorCisgICAgaWYgKHRleHR1cmVHTC5tX29wYXF1ZSAmJiBvcGFj
aXR5ID4gMC45OSAmJiAhbWFza1RleHR1cmUpCisgICAgICAgIEdMX0NNRChnbERpc2FibGUoR0xf
QkxFTkQpKQorICAgIGVsc2UgeworICAgICAgICBHTF9DTUQoZ2xCbGVuZEZ1bmMoR0xfT05FLCBH
TF9PTkVfTUlOVVNfU1JDX0FMUEhBKSkKKyAgICAgICAgR0xfQ01EKGdsRW5hYmxlKEdMX0JMRU5E
KSkKKyAgICB9CisKKyAgICBHTF9DTUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwg
NCkpCit9CisKKworY29uc3QgY2hhciogVGV4dHVyZU1hcHBlckdMOjp0eXBlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gIk9wZW5HTCI7Cit9CisKK3ZvaWQgQml0bWFwVGV4dHVyZUdMOjpyZXNldChj
b25zdCBJbnRTaXplJiBuZXdTaXplLCBib29sIG9wYXF1ZSkKK3sKKyAgICBCaXRtYXBUZXh0dXJl
OjpyZXNldChuZXdTaXplLCBvcGFxdWUpOworICAgIG1faW1hZ2UgPSAwOworICAgIEludFNpemUg
bmV3VGV4dHVyZVNpemUgPSBucG90KG5ld1NpemUpOworICAgIGJvb2wganVzdENyZWF0ZWQgPSBm
YWxzZTsKKyAgICBpZiAoIW1faWQpIHsKKyAgICAgICAgR0xfQ01EKGdsR2VuVGV4dHVyZXMoMSwg
Jm1faWQpKQorICAgICAgICBqdXN0Q3JlYXRlZCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGp1
c3RDcmVhdGVkIHx8IG5ld1RleHR1cmVTaXplLndpZHRoKCkgPiBtX3RleHR1cmVTaXplLndpZHRo
KCkgfHwgbmV3VGV4dHVyZVNpemUuaGVpZ2h0KCkgPiBtX3RleHR1cmVTaXplLmhlaWdodCgpKSB7
CisgICAgICAgIHByaW50ZigiW1RleHR1cmVNYXBwZXJHTF0gQ3JlYXRpbmcgdGV4dHVyZS4gSUQ6
ICVkOyBTaXplOiAlZCwlZFxuIiwgbV9pZCwgbmV3VGV4dHVyZVNpemUud2lkdGgoKSwgbmV3VGV4
dHVyZVNpemUuaGVpZ2h0KCkpOworICAgICAgICBtX3RleHR1cmVTaXplID0gbmV3VGV4dHVyZVNp
emU7CisgICAgICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faWQpKQor
ICAgICAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
TUlOX0ZJTFRFUiwgR0xfTElORUFSKSkKKyAgICAgICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVyaShH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUikpCisgICAgICAg
IEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1Ms
IEdMX0NMQU1QX1RPX0VER0UpKQorICAgICAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKSkKKyAgICAgICAg
R0xfQ01EKGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCBtX3RleHR1cmVT
aXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCksIDAsIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIDApKQorICAgIH0KKyAgICBtX2FjdHVhbFNpemUgPSBuZXdTaXplOworICAgIG1f
cmVsYXRpdmVTaXplID0gRmxvYXRTaXplKGZsb2F0KG5ld1NpemUud2lkdGgoKSkgLyBtX3RleHR1
cmVTaXplLndpZHRoKCksIGZsb2F0KG5ld1NpemUuaGVpZ2h0KCkpIC8gbV90ZXh0dXJlU2l6ZS5o
ZWlnaHQoKSk7CisgICAgbV9zb3VyY2VSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIG1fcmVsYXRpdmVT
aXplLndpZHRoKCksIG1fcmVsYXRpdmVTaXplLmhlaWdodCgpKTsKKyAgICBtX29wYXF1ZSA9IG9w
YXF1ZTsKKyAgICBtX3N1cmZhY2VOZWVkc1Jlc2V0ID0gdHJ1ZTsKK30KKworUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqIEJpdG1hcFRleHR1cmVHTDo6YmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBk
aXJ0eVJlY3QpCit7CisgICAgbV9idWZmZXIgPSBSR0JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcjo6
Y3JlYXRlKCk7CisgICAgbV9kaXJ0eVJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgcmV0dXJuIG1fYnVm
ZmVyLT5iZWdpblBhaW50KGRpcnR5UmVjdCwgbV9vcGFxdWUpOworfQorCit2b2lkIEJpdG1hcFRl
eHR1cmVHTDo6ZW5kUGFpbnQoKQoreworICAgIGlmICghbV9idWZmZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX2J1ZmZlci0+ZW5kUGFpbnQoKTsKKyAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBtX2lkKSkKKyAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRV
UkVfMkQsIDAsIG1fZGlydHlSZWN0LngoKSwgbV9kaXJ0eVJlY3QueSgpLCBtX2RpcnR5UmVjdC53
aWR0aCgpLCBtX2RpcnR5UmVjdC5oZWlnaHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwg
bV9idWZmZXItPmRhdGEoKSkpCisgICAgbV9idWZmZXIuY2xlYXIoKTsKK30KKworc3RydWN0IFRl
eG1hcEdMU2hhZGVyVGV4dHVyZXMgeworICAgIHN0cnVjdCBFbnRyeSB7CisgICAgICAgIEdMdWlu
dCB0ZXh0dXJlOworICAgICAgICBpbnQgcmVmQ291bnQ7CisgICAgfTsKKyAgICBIYXNoTWFwPE5h
dGl2ZUltYWdlUHRyLCBFbnRyeT4gaW1hZ2VUb1RleHR1cmU7CisgICAgR0x1aW50IGZpbmRPckNy
ZWF0ZShOYXRpdmVJbWFnZVB0ciBpbWFnZSwgYm9vbCYgZm91bmQpCisgICAgeworICAgICAgICBI
YXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBFbnRyeT46Oml0ZXJhdG9yIGl0ID0gaW1hZ2VUb1RleHR1
cmUuZmluZChpbWFnZSk7CisgICAgICAgIGZvdW5kID0gZmFsc2U7CisgICAgICAgIGlmIChpdCAh
PSBpbWFnZVRvVGV4dHVyZS5lbmQoKSkgeworICAgICAgICAgICAgaXQtPnNlY29uZC5yZWZDb3Vu
dCsrOworICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGl0LT5z
ZWNvbmQudGV4dHVyZTsKKyAgICAgICAgfQorICAgICAgICBFbnRyeSBlbnRyeTsKKyAgICAgICAg
R0xfQ01EKGdsR2VuVGV4dHVyZXMoMSwgJmVudHJ5LnRleHR1cmUpKTsKKyAgICAgICAgZW50cnku
cmVmQ291bnQgPSAxOworICAgICAgICBpbWFnZVRvVGV4dHVyZS5hZGQoaW1hZ2UsIGVudHJ5KTsK
KyAgICAgICAgcmV0dXJuIGVudHJ5LnRleHR1cmU7CisgICAgfQorCisgICAgYm9vbCBkZXJlZihO
YXRpdmVJbWFnZVB0ciBpbWFnZSkKKyAgICB7CisgICAgICAgIEhhc2hNYXA8TmF0aXZlSW1hZ2VQ
dHIsIEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5maW5kKGltYWdlKTsKKyAg
ICAgICAgaWYgKGl0ICE9IGltYWdlVG9UZXh0dXJlLmVuZCgpKSB7CisgICAgICAgICAgICBpZiAo
aXQtPnNlY29uZC5yZWZDb3VudCA8IDIpIHsKKyAgICAgICAgICAgICAgICBpbWFnZVRvVGV4dHVy
ZS5yZW1vdmUoaXQpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCitzdGF0aWMg
VGV4bWFwR0xTaGFkZXJUZXh0dXJlcyBnVGV4dHVyZVJlcG9zaXRvcnk7CisKK3ZvaWQgQml0bWFw
VGV4dHVyZUdMOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQoreworICAgIE5hdGl2
ZUltYWdlUHRyIG5hdGl2ZUltYWdlID0gaW1hZ2UgPyBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKSA6IDA7CisgICAgaWYgKCFpbWFnZSB8fCAhbmF0aXZlSW1hZ2UpIHsKKyAgICAg
ICAgaWYgKG1faW1hZ2UpCisgICAgICAgICAgICBkZXN0cm95KCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAobmF0aXZlSW1hZ2UgPT0gbV9pbWFnZSkKKyAgICAgICAgcmV0dXJu
OworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICBHTHVpbnQgbmV3VGV4dHVyZUlEID0gZ1Rl
eHR1cmVSZXBvc2l0b3J5LmZpbmRPckNyZWF0ZShuYXRpdmVJbWFnZSwgZm91bmQpOworICAgIGlm
IChuZXdUZXh0dXJlSUQgIT0gbV9pZCkgeworICAgICAgICBkZXN0cm95KCk7CisgICAgICAgIG1f
aWQgPSBuZXdUZXh0dXJlSUQ7CisgICAgICAgIHJlc2V0KGltYWdlLT5zaXplKCksIGZhbHNlKTsK
KyAgICAgICAgbV9pbWFnZSA9IG5hdGl2ZUltYWdlOworICAgICAgICBwcmludGYoIltUZXh0dXJl
TWFwcGVyR0xdIENyZWF0aW5nIHRleHR1cmUgZnJvbSBkaXJlY3RseSBjb21wb3NpdGVkIGltYWdl
LiBJRDogJWQ7IFNpemU6ICVkLCVkXG4iLCBtX2lkLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhl
aWdodCgpKTsKKyAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgR3JhcGhpY3NDb250
ZXh0IGNvbnRleHQoYmVnaW5QYWludChJbnRSZWN0KDAsIDAsIG1fdGV4dHVyZVNpemUud2lkdGgo
KSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSkpKTsKKyAgICAgICAgICAgIGNvbnRleHQuZHJhd0lt
YWdlKGltYWdlLCBEZXZpY2VDb2xvclNwYWNlLCBJbnRQb2ludCgwLCAwKSwgQ29tcG9zaXRlQ29w
eSk7CisgICAgICAgICAgICBlbmRQYWludCgpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lk
IEJpdG1hcFRleHR1cmVHTDo6ZGVzdHJveSgpCit7CisgICAgaWYgKG1faWQgJiYgKCFtX2ltYWdl
IHx8ICFnVGV4dHVyZVJlcG9zaXRvcnkuZGVyZWYobV9pbWFnZSkpKSB7CisgICAgICAgIEdMX0NN
RChnbERlbGV0ZVRleHR1cmVzKDEsICZtX2lkKSkKKyAgICAgICAgcHJpbnRmKCJbVGV4dHVyZU1h
cHBlck9wZW5HTF0gRGVsZXRpbmcgdGV4dHVyZSAlZCwgc2l6ZTogJWQsJWRcbiIsIG1faWQsIG1f
dGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CisgICAgfQorICAg
IGlmIChtX2ZibykKKyAgICAgICAgR0xfQ01EKGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zi
bykpCisKKyAgICBtX2ZibyA9IDA7CisgICAgbV9pZCA9IDA7CisgICAgbV90ZXh0dXJlU2l6ZSA9
IEludFNpemUoKTsKKyAgICBtX3JlbGF0aXZlU2l6ZSA9IEZsb2F0U2l6ZSgxLCAxKTsKK30KK2Jv
b2wgQml0bWFwVGV4dHVyZUdMOjppc1ZhbGlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pZDsK
K30KKworSW50U2l6ZSBCaXRtYXBUZXh0dXJlR0w6OnNpemUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3RleHR1cmVTaXplOworfQorCitzdGF0aWMgaW5saW5lIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBmbGlwKQor
eworICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgyLjAgLyBmbG9hdChzaXplLndpZHRo
KCkpLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAoZmxpcCA/
IC0yLjAgOiAyLjApIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSksIDAsIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsIDAsIC0wLjAwMDAwMSwgMCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLTEsIGZsaXAgPyAxIDogLTEsIDAsIDEpOworfQorCit2b2lkIFRleHR1
cmVNYXBwZXJHTDo6Y2xlYW51cCgpCisgICAgeworICAgIGZvciAoVGV4bWFwR0xWYm9SZXBvc2l0
b3J5OjpWYm9NYXA6Oml0ZXJhdG9yIGl0ID0gZ1Zib1JlcG9zaXRvcnkudmJvTWFwLmJlZ2luKCk7
IGl0ICE9IGdWYm9SZXBvc2l0b3J5LnZib01hcC5lbmQoKTsgKytpdCkgeworICAgICAgICBwcmlu
dGYoIltUZXh0dXJlTWFwcGVyR0xdIERlbGV0aW5nIHZibyAlZCwgJWYgJWYgJWYgJWZcbiIsIGl0
LT5zZWNvbmQsIGl0LT5maXJzdC54KCksIGl0LT5maXJzdC55KCksIGl0LT5maXJzdC53aWR0aCgp
LCBpdC0+Zmlyc3QuaGVpZ2h0KCkpOworICAgICAgICBHTF9DTUQoZ2xEZWxldGVCdWZmZXJzKDEs
ICZpdC0+c2Vjb25kKSkKKyAgICB9CisgICAgZ1Zib1JlcG9zaXRvcnkudmJvTWFwLmNsZWFyKCk7
Cit9CisKKwordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUg
KnN1cmZhY2VQb2ludGVyKQoreworICAgIEJpdG1hcFRleHR1cmVHTCogc3VyZmFjZSA9IHN0YXRp
Y19jYXN0PEJpdG1hcFRleHR1cmVHTCo+KHN1cmZhY2VQb2ludGVyKTsKKworICAgIGlmICghc3Vy
ZmFjZSkKKyAgICAgICAgcmV0dXJuOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9
IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgoc3VyZmFjZS0+c2l6ZSgpLCBmYWxzZSk7CisgICAgbWF0
cml4LnRyYW5zbGF0ZSgtc3VyZmFjZS0+b2Zmc2V0KCkueCgpLCAtc3VyZmFjZS0+b2Zmc2V0KCku
eSgpKTsKKworICAgIGlmIChzdXJmYWNlLT5tX3N1cmZhY2VOZWVkc1Jlc2V0IHx8ICFzdXJmYWNl
LT5tX2ZibykgeworICAgICAgICBpZiAoIXN1cmZhY2UtPm1fZmJvKQorICAgICAgICAgICAgR0xf
Q01EKGdsR2VuRnJhbWVidWZmZXJzKDEsICZzdXJmYWNlLT5tX2ZibykpCisgICAgICAgIEdMX0NN
RChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgc3VyZmFjZS0+bV9mYm8pKQorICAg
ICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKSkKKyAgICAgICAgR0xf
Q01EKGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFD
SE1FTlQwLCBHTF9URVhUVVJFXzJELCBzdXJmYWNlLT5tX2lkLCAwKSkKKyAgICAgICAgR0xfQ01E
KGdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKSkKKyAgICAgICAgR0xfQ01EKGdsQ2xlYXIoR0xfQ09M
T1JfQlVGRkVSX0JJVCkpCisgICAgICAgIHN1cmZhY2UtPm1fc3VyZmFjZU5lZWRzUmVzZXQgPSBm
YWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIHN1cmZhY2UtPm1fZmJvKSkKKyAgICB9CisKKyAgICBHTF9DTUQoZ2xWaWV3
cG9ydCgwLCAwLCBzdXJmYWNlLT5zaXplKCkud2lkdGgoKSwgc3VyZmFjZS0+c2l6ZSgpLmhlaWdo
dCgpKSkKKyAgICBtX3Byb2plY3Rpb25NYXRyaXggPSBtYXRyaXg7Cit9CisKK3ZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpzZXRDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgR0xfQ01EKGds
U2Npc3NvcihyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSkp
CisgICAgR0xfQ01EKGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCkpCit9CisKKwordm9pZCBUZXh0
dXJlTWFwcGVyR0w6OnBhaW50VG9UYXJnZXQoY29uc3QgQml0bWFwVGV4dHVyZSYgYVN1cmZhY2Us
IGNvbnN0IEludFNpemUmIHN1cmZhY2VTaXplLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCkKK3sK
KyAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wmIHN1cmZhY2UgPSBzdGF0aWNfY2FzdDxjb25zdCBC
aXRtYXBUZXh0dXJlR0wmPihhU3VyZmFjZSk7CisgICAgLy8gQ3JlYXRlIHRoZSBtb2RlbC12aWV3
LXByb2plY3Rpb24gbWF0cml4IHRvIGRpc3BsYXkgb24gc2NyZWVuLgorICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IG12cE1hdHJpeCA9IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgoc3VyZmFjZVNpemUs
IHRydWUpLm11bHRMZWZ0KHRyYW5zZm9ybSk7CisgICAgY29uc3QgRmxvYXRRdWFkIGZpbmFsUXVh
ZCA9IG12cE1hdHJpeC5tYXBRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3Qoc3VyZmFjZS5vZmZzZXQo
KS54KCksIHN1cmZhY2Uub2Zmc2V0KCkueSgpLCBzdXJmYWNlLm1fYWN0dWFsU2l6ZS53aWR0aCgp
LCBzdXJmYWNlLm1fYWN0dWFsU2l6ZS5oZWlnaHQoKSkpKTsKKworICAgIC8vIFdlIGFscmVhZHkg
YmxlbmRlZCB0aGUgYWxwaGEgaW47IHRoZSByZXN1bHQgaXMgcHJlbXVsdGlwbGllZC4KKyAgICBH
TF9DTUQoZ2xVc2VQcm9ncmFtKGdTaGFkZXJJbmZvLnByb2dyYW1zW1RleG1hcFNoYWRlckluZm86
OlRhcmdldFByb2dyYW1dLmlkKSkKKyAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJB
TUVCVUZGRVIsIDApKQorICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAsIHN1cmZhY2VTaXplLndp
ZHRoKCksIHN1cmZhY2VTaXplLmhlaWdodCgpKSkKKyAgICBHTF9DTUQoZ2xEaXNhYmxlKEdMX1NU
RU5DSUxfVEVTVCkpCisgICAgY29uc3QgVGV4bWFwU2hhZGVySW5mbzo6UHJvZ3JhbUluZm8mIHBy
b2dyYW1JbmZvID0gZ1NoYWRlckluZm8ucHJvZ3JhbXNbVGV4bWFwU2hhZGVySW5mbzo6VGFyZ2V0
UHJvZ3JhbV07CisgICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFw
U2hhZGVySW5mbzo6T3BhY2l0eVZhcmlhYmxlXSwgb3BhY2l0eSkpCisgICAgR0xfQ01EKGdsQWN0
aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpCisgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVY
VFVSRV8yRCwgc3VyZmFjZS5tX2lkKSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbUlu
Zm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpTb3VyY2VUZXh0dXJlVmFyaWFibGVdLCAwKSkKKyAg
ICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtSW5mby52YXJzW1RleG1h
cFNoYWRlckluZm86OkluVGV4Q29vcmRTb3VyY2VWYXJpYWJsZV0pKQorICAgIEdMX0NNRChnbEVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6
SW5WZXJ0ZXhWYXJpYWJsZV0pKQorICAgIEdMX0NNRChnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVG
RkVSLCAwKSkKKyAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW1JbmZvLnZh
cnNbVGV4bWFwU2hhZGVySW5mbzo6SW5WZXJ0ZXhWYXJpYWJsZV0sIDIsIEdMX0ZMT0FULCBHTF9G
QUxTRSwgMCwgJmZpbmFsUXVhZCkpCisgICAgbG9hZFJlY3RUb1NoYWRlcihwcm9ncmFtSW5mby52
YXJzW1RleG1hcFNoYWRlckluZm86OkluVGV4Q29vcmRTb3VyY2VWYXJpYWJsZV0sIHN1cmZhY2Uu
bV9zb3VyY2VSZWN0KTsKKyAgICBHTF9DTUQoZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwg
MCkpCisgICAgR0xfQ01EKGdsQmxlbmRGdW5jKEdMX09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBI
QSkpCisgICAgR0xfQ01EKGdsRW5hYmxlKEdMX0JMRU5EKSkKKyAgICBzZXRDbGlwKHZpc2libGVS
ZWN0KTsKKworICAgIEdMX0NNRChnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KSkK
KyAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbUluZm8udmFyc1tU
ZXhtYXBTaGFkZXJJbmZvOjpJblRleENvb3JkU291cmNlVmFyaWFibGVdKSkKKyAgICBHTF9DTUQo
Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJ
bmZvOjpJblZlcnRleFZhcmlhYmxlXSkpCisgICAgR0xfQ01EKGdsVXNlUHJvZ3JhbSgwKSkKKyAg
ICBtX2N1clByb2dyYW0gPSBUZXhtYXBTaGFkZXJJbmZvOjpUYXJnZXRQcm9ncmFtOworfQorCitQ
YXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlVGV4dHVyZSgp
IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBCaXRtYXBUZXh0dXJlR0woKSk7IH0KKworfTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M0MjRjNAotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCkBA
IC0wLDAgKzEsODQgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFRleHR1cmVNYXBwZXJHTF9oCisjZGVmaW5lIFRleHR1cmVNYXBwZXJHTF9oCisKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIK
KyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIK
KyNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKy8vIEFuIE9wZW5HTC1FUzIgaW1wbGVtZW50YXRpb24gb2YgVGV4dHVyZU1hcHBlci4KK2Ns
YXNzIFRleHR1cmVNYXBwZXJHTCA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyIHsKK3B1YmxpYzoKKyAg
ICBUZXh0dXJlTWFwcGVyR0woR3JhcGhpY3NDb250ZXh0KiBnYyk7CisgICAgdmlydHVhbCB+VGV4
dHVyZU1hcHBlckdMKCkge30KKworICAgIC8vIHJlaW1wcyBmcm9tIFRleHR1cmVNYXBwZXIKKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwg
Y29uc3QgSW50UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZs
b2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSk7CisgICAgdmlydHVh
bCB2b2lkIHNldENsaXAoY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFRv
VGFyZ2V0KGNvbnN0IEJpdG1hcFRleHR1cmUmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVj
dCk7CisgICAgdmlydHVhbCBib29sIGFsbG93U3VyZmFjZUZvclJvb3QoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRl
eHR1cmUoKTsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5cGUoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgY2xlYW51cCgpOworCitwcml2YXRlOgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG1fcHJvamVjdGlvbk1hdHJpeDsKKyAgICBpbnQgbV9jdXJQcm9ncmFtOworfTsKKworLy8gQW4g
b2Zmc2NyZWVuIGJ1ZmZlciB0byBiZSByZW5kZXJlZCBieSBzb2Z0d2FyZS4KK2NsYXNzIFJHQkEz
MlByZW11bHRpbXBsaWVkQnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8UkdCQTMyUHJlbXVsdGlt
cGxpZWRCdWZmZXI+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5SR0JBMzJQcmVtdWx0aW1wbGll
ZEJ1ZmZlcigpIHt9CisgICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5Q
YWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QsIGJvb2wgb3BhcXVlKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGVuZFBhaW50KCkgPSAwOworICAgIHZpcnR1YWwgY29uc3Qgdm9pZCogZGF0YSgp
IGNvbnN0ID0gMDsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSR0JBMzJQcmVtdWx0aW1wbGllZEJ1
ZmZlcj4gY3JlYXRlKCk7Cit9OworCisvLyBOZXh0IHBvd2VyIG9mIHR3by4KK3N0YXRpYyBpbmxp
bmUgaW50IG5wb3QoaW50IG51bSkKK3sKKyAgICBmb3IgKGludCBpID0gMHgxMDAwMDAwMDsgaSA+
IDA7IGkgPj49IDEpIHsKKyAgICAgICAgaWYgKG51bSA9PSBpKQorICAgICAgICAgICAgcmV0dXJu
IG51bTsKKyAgICAgICAgaWYgKG51bSAmIGkpCisgICAgICAgICAgICByZXR1cm4gKGkgPDwgMSk7
CisgICAgfQorICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIEludFNpemUgbnBvdChj
b25zdCBJbnRTaXplJiBzKQoreworICAgIHJldHVybiBJbnRTaXplKG5wb3Qocy53aWR0aCgpKSwg
bnBvdChzLmhlaWdodCgpKSk7Cit9CisKK307CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjIzM2EzCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwCkBAIC0wLDAgKzEs
MjI3IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyLmgiCisKKyNpbmNsdWRl
ICJRdENvcmUvcWRlYnVnLmgiCisjaW5jbHVkZSAiUXRHdWkvcXBhaW50ZW5naW5lLmgiCisjaW5j
bHVkZSAiUXRHdWkvcXBpeG1hcC5oIgorCisjaWZkZWYgUVRfT1BFTkdMX0xJQgorIyBpbmNsdWRl
ICJvcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBCaXRtYXBUZXh0dXJlUXQgOiBwdWJsaWMgQml0bWFwVGV4dHVyZSB7CisgICAg
ZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJRdDsKK3B1YmxpYzoKKyAgICBCaXRtYXBUZXh0dXJl
UXQoKSA6IG1fZ2MoMCkge30KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOworICAgIHZpcnR1
YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZShtX3BpeG1hcC53aWR0aCgp
LCBtX3BpeG1hcC5oZWlnaHQoKSk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoY29uc3QgSW50
U2l6ZSYsIGJvb2wgb3BhcXVlKTsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CisgICAgdmlydHVhbCB2b2lk
IGVuZFBhaW50KCk7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSop
OworICAgIHZpcnR1YWwgYm9vbCBzYXZlKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgYm9v
bCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gIW1fcGl4bWFwLmlzTnVsbCgpOyB9CisgICAgdmly
dHVhbCBib29sIGFsbG93T2ZmbGluZVRleHR1cmVVcGxvYWQoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CisgICAgSW50UmVjdCBzb3VyY2VSZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVjdCgwLCAw
LCBjb250ZW50U2l6ZSgpLndpZHRoKCksIGNvbnRlbnRTaXplKCkuaGVpZ2h0KCkpOyB9Citwcml2
YXRlOgorICAgIFFQYWludGVyIG1fcGFpbnRlcjsKKyAgICBHcmFwaGljc0NvbnRleHQqIG1fZ2M7
CisgICAgUVBpeG1hcCBtX3BpeG1hcDsKK307CisKK2NsYXNzIFRleHR1cmVNYXBwZXJRdCA6IHB1
YmxpYyBUZXh0dXJlTWFwcGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1
cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVj
dCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29u
c3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpOworICAgIHZpcnR1YWwgdm9pZCBiaW5kU3Vy
ZmFjZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xpcChj
b25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIGFsbG93U3VyZmFjZUZvclJvb3QoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIFRleHR1cmVNYXBwZXJRdChHcmFwaGljc0NvbnRl
eHQqIGdjKTsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5cGUoKSBjb25zdCB7IHJldHVybiAi
UXQiOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1
cmUoKTsKKworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoUVBhaW50ZXIgKnBhaW50ZXIpCisg
ICAgeworICAgICAgICBwYWludGVyLT5zZXRSZW5kZXJIaW50cyhRUGFpbnRlcjo6QW50aWFsaWFz
aW5nIHwgUVBhaW50ZXI6OlNtb290aFBpeG1hcFRyYW5zZm9ybSwgZmFsc2UpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBRUGFpbnRlciogbV9wYWludGVyOworICAgIFJlZlB0cjxCaXRtYXBUZXh0
dXJlUXQ+IG1fY3VycmVudFN1cmZhY2U7Cit9OworCit2b2lkIEJpdG1hcFRleHR1cmVRdDo6ZGVz
dHJveSgpCit7CisgICAgaWYgKG1fcGl4bWFwLnBhaW50aW5nQWN0aXZlKCkpCisgICAgICAgIHFG
YXRhbCgiRGVzdHJveWluZyBhbiBhY3RpdmUgcGl4bWFwIik7CisgICAgbV9waXhtYXAgPSBRUGl4
bWFwKCk7Cit9CisKK3ZvaWQgQml0bWFwVGV4dHVyZVF0OjpyZXNldChjb25zdCBJbnRTaXplJiBz
aXplLCBib29sIGlzT3BhcXVlKQoreworICAgIEJpdG1hcFRleHR1cmU6OnJlc2V0KHNpemUsIGlz
T3BhcXVlKTsKKworICAgIGlmIChzaXplLndpZHRoKCkgPiBtX3BpeG1hcC5zaXplKCkud2lkdGgo
KSB8fCBzaXplLmhlaWdodCgpID4gbV9waXhtYXAuc2l6ZSgpLmhlaWdodCgpIHx8IG1fcGl4bWFw
LmlzTnVsbCgpKQorICAgICAgICBtX3BpeG1hcCA9IFFQaXhtYXAoc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpKTsKKyAgICBpZiAoIWlzT3BhcXVlKQorICAgICAgICBtX3BpeG1hcC5maWxsKFF0
Ojp0cmFuc3BhcmVudCk7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBCaXRtYXBUZXh0
dXJlUXQ6OmJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIG1fcGFp
bnRlci5iZWdpbigmbV9waXhtYXApOworICAgIFRleHR1cmVNYXBwZXJRdDo6aW5pdGlhbGl6ZSgm
bV9wYWludGVyKTsKKyAgICBtX3BhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpD
b21wb3NpdGlvbk1vZGVfQ2xlYXIpOworICAgIG1fcGFpbnRlci5maWxsUmVjdChRUmVjdChkaXJ0
eVJlY3QpLCBRdDo6dHJhbnNwYXJlbnQpOworICAgIG1fcGFpbnRlci5zZXRDb21wb3NpdGlvbk1v
ZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2VPdmVyKTsKKyAgICByZXR1cm4gJm1f
cGFpbnRlcjsKK30KKwordm9pZCBCaXRtYXBUZXh0dXJlUXQ6OmVuZFBhaW50KCkKK3sKKyAgICBt
X3BhaW50ZXIuZW5kKCk7Cit9CisKK2Jvb2wgQml0bWFwVGV4dHVyZVF0OjpzYXZlKGNvbnN0IFN0
cmluZyAmcGF0aCkKK3sKKyAgICByZXR1cm4gbV9waXhtYXAuc2F2ZShwYXRoLCAiUE5HIik7Cit9
CisKK3ZvaWQgQml0bWFwVGV4dHVyZVF0OjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdl
KQoreworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBjb25zdCBRUGl4bWFw
KiBwaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAo
IXBpeG1hcCkKKyAgICAgICAgcmV0dXJuOworICAgIEJpdG1hcFRleHR1cmU6OnJlc2V0KHBpeG1h
cC0+c2l6ZSgpLCAhcGl4bWFwLT5oYXNBbHBoYUNoYW5uZWwoKSk7CisgICAgbV9waXhtYXAgPSAq
cGl4bWFwOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJRdDo6c2V0Q2xpcChjb25zdCBJbnRSZWN0
JiByZWN0KQoreworICAgICBRUGFpbnRlciogcGFpbnRlciA9IG1fY3VycmVudFN1cmZhY2UgPyAm
bV9jdXJyZW50U3VyZmFjZS0+bV9wYWludGVyIDogbV9wYWludGVyOworICAgICBwYWludGVyLT5z
ZXRDbGlwUmVjdChyZWN0KTsKK30KKworVGV4dHVyZU1hcHBlclF0OjpUZXh0dXJlTWFwcGVyUXQo
R3JhcGhpY3NDb250ZXh0KiBnYykKKyAgICA6IFRleHR1cmVNYXBwZXIoZ2MpCisgICAgLCBtX3Bh
aW50ZXIoZ2MtPnBsYXRmb3JtQ29udGV4dCgpKQorICAgICwgbV9jdXJyZW50U3VyZmFjZSgwKQor
eworICAgIFRleHR1cmVNYXBwZXJRdDo6aW5pdGlhbGl6ZShtX3BhaW50ZXIpOworfQorCit2b2lk
IFRleHR1cmVNYXBwZXJRdDo6YmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogYVN1cmZhY2UpCit7
CisgICAgaWYgKG1fY3VycmVudFN1cmZhY2UgPT0gYVN1cmZhY2UpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAobV9jdXJyZW50U3VyZmFjZSkKKyAgICAgICAgbV9jdXJyZW50U3VyZmFjZS0+bV9w
YWludGVyLmVuZCgpOworICAgIGlmICghYVN1cmZhY2UpIHsKKyAgICAgICAgbV9jdXJyZW50U3Vy
ZmFjZSA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQml0bWFwVGV4dHVyZVF0KiBz
dXJmYWNlID0gc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVyZVF0Kj4oYVN1cmZhY2UpOworICAgIGlm
ICghc3VyZmFjZS0+bV9wYWludGVyLmlzQWN0aXZlKCkpCisgICAgICAgIHN1cmZhY2UtPm1fcGFp
bnRlci5iZWdpbigmc3VyZmFjZS0+bV9waXhtYXApOworICAgIG1fY3VycmVudFN1cmZhY2UgPSBz
dXJmYWNlOworfQorCisKK3ZvaWQgVGV4dHVyZU1hcHBlclF0OjpkcmF3VGV4dHVyZShjb25zdCBC
aXRtYXBUZXh0dXJlJiBhVGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFw
VGV4dHVyZSogbWFza1RleHR1cmUpCit7CisgICAgY29uc3QgQml0bWFwVGV4dHVyZVF0JiB0ZXh0
dXJlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZVF0Jj4oYVRleHR1cmUpOworICAg
IFFQYWludGVyKiBwYWludGVyID0gbV9wYWludGVyOworICAgIFFQaXhtYXAgcGl4bWFwID0gdGV4
dHVyZS5tX3BpeG1hcDsKKyAgICBpZiAobV9jdXJyZW50U3VyZmFjZSkKKyAgICAgICAgcGFpbnRl
ciA9ICZtX2N1cnJlbnRTdXJmYWNlLT5tX3BhaW50ZXI7CisKKyAgICBpZiAobWFza1RleHR1cmUg
JiYgbWFza1RleHR1cmUtPmlzVmFsaWQoKSkgeworICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJl
UXQqIG1hc2tRdCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVRdCo+KG1hc2tUZXh0
dXJlKTsKKyAgICAgICAgUVBpeG1hcCBpbnRlcm1lZGlhdGVQaXhtYXAocGl4bWFwLnNpemUoKSk7
CisgICAgICAgIGludGVybWVkaWF0ZVBpeG1hcC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7CisgICAg
ICAgIFFQYWludGVyIG1hc2tQYWludGVyKCZpbnRlcm1lZGlhdGVQaXhtYXApOworICAgICAgICBt
YXNrUGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9T
b3VyY2UpOworICAgICAgICBtYXNrUGFpbnRlci5kcmF3UGl4bWFwKDAsIDAsIHBpeG1hcCk7Cisg
ICAgICAgIG1hc2tQYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRp
b25Nb2RlX0Rlc3RpbmF0aW9uSW4pOworICAgICAgICBtYXNrUGFpbnRlci5kcmF3UGl4bWFwKFFS
ZWN0KDAsIDAsIHBpeG1hcC53aWR0aCgpLCBwaXhtYXAuaGVpZ2h0KCkpLCBtYXNrUXQtPm1fcGl4
bWFwLCBtYXNrUXQtPnNvdXJjZVJlY3QoKSk7CisgICAgICAgIG1hc2tQYWludGVyLmVuZCgpOwor
ICAgICAgICBwaXhtYXAgPSBpbnRlcm1lZGlhdGVQaXhtYXA7CisgICAgfQorCisgICAgY29uc3Qg
cXJlYWwgcHJldk9wYWNpdHkgPSBwYWludGVyLT5vcGFjaXR5KCk7CisgICAgY29uc3QgUVRyYW5z
Zm9ybSBwcmV2VHJhbnNmb3JtID0gcGFpbnRlci0+dHJhbnNmb3JtKCk7CisgICAgcGFpbnRlci0+
c2V0T3BhY2l0eShvcGFjaXR5KTsKKyAgICBwYWludGVyLT5zZXRUcmFuc2Zvcm0obWF0cml4LCB0
cnVlKTsKKyAgICBwYWludGVyLT5kcmF3UGl4bWFwKHRhcmdldFJlY3QsIHBpeG1hcCwgdGV4dHVy
ZS5zb3VyY2VSZWN0KCkpOworICAgIHBhaW50ZXItPnNldFRyYW5zZm9ybShwcmV2VHJhbnNmb3Jt
KTsKKyAgICBwYWludGVyLT5zZXRPcGFjaXR5KHByZXZPcGFjaXR5KTsKK30KKworUGFzc1JlZlB0
cjxUZXh0dXJlTWFwcGVyPiBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0KiBn
YykKK3sKKyNpZmRlZiBRVF9PUEVOR0xfTElCCisgICAgaWYgKGdjLT5wbGF0Zm9ybUNvbnRleHQo
KS0+cGFpbnRFbmdpbmUoKS0+dHlwZSgpID09IFFQYWludEVuZ2luZTo6T3BlbkdMMikKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyR0woZ2MpKTsKKyNlbmRpZgorICAg
IHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclF0KGdjKSk7Cit9CisKKworUGFzc1Jl
ZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVyUXQ6OmNyZWF0ZVRleHR1cmUoKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQml0bWFwVGV4dHVyZVF0KCkpOworfQorCisjaWZkZWYg
UVRfT1BFTkdMX0xJQgorY2xhc3MgUkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXJRdCA6IHB1Ymxp
YyBSR0JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiByZWN0LCBib29s
IG9wYXF1ZSkKKyAgICB7CisgICAgICAgIG1faW1hZ2UgPSBRSW1hZ2UocmVjdC5zaXplKCkud2lk
dGgoKSwgcmVjdC5zaXplKCkuaGVpZ2h0KCksIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0
aXBsaWVkKTsKKyAgICAgICAgaWYgKCFvcGFxdWUpCisgICAgICAgICAgICBtX2ltYWdlLmZpbGwo
MCk7CisgICAgICAgIG1fcGFpbnRlci5iZWdpbigmbV9pbWFnZSk7CisgICAgICAgIFRleHR1cmVN
YXBwZXJRdDo6aW5pdGlhbGl6ZSgmbV9wYWludGVyKTsKKyAgICAgICAgbV9wYWludGVyLnRyYW5z
bGF0ZSgtcmVjdC54KCksIC1yZWN0LnkoKSk7CisgICAgICAgIHJldHVybiAmbV9wYWludGVyOwor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludCgpIHsgbV9wYWludGVyLmVuZCgpOyB9
CisgICAgdmlydHVhbCBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5j
b25zdEJpdHMoKTsgfQorCitwcml2YXRlOgorICAgIFFQYWludGVyIG1fcGFpbnRlcjsKKyAgICBR
SW1hZ2UgbV9pbWFnZTsKK307CisKK1Bhc3NSZWZQdHI8UkdCQTMyUHJlbXVsdGltcGxpZWRCdWZm
ZXI+IFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyOjpjcmVhdGUoKQoreworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgUkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXJRdCgpKTsKK30KKworI2VuZGlm
Cit9OworCisjaW5jbHVkZSA8VGV4dHVyZU1hcHBlclF0Lm1vYz4KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OThiZjQyCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIuY3BwCkBAIC0wLDAgKzEsMTQ3NCBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyLmgiCisKKyNpbmNsdWRlICJDdXJyZW50VGltZS5oIgorI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhhc2hNYXAu
aCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKKyNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIu
aCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIK
KyNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJVbml0
QmV6aWVyLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2RlZmluZSBERUJVR19URVhNQVBfRlBT
IDEKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgVGV4bWFwUGFpbnRPcHRpb25zIHsK
KyAgICBCaXRtYXBUZXh0dXJlKiBzdXJmYWNlOworICAgIFRleHR1cmVNYXBwZXIqIHRleHR1cmVN
YXBwZXI7CisgICAgR3JhcGhpY3NDb250ZXh0KiBnYzsKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSog
cm9vdExheWVyOworICAgIGZsb2F0IG9wYWNpdHk7CisgICAgSW50UmVjdCBzY2lzc29yUmVjdDsK
KyAgICBJbnRSZWN0IHZpc2libGVSZWN0OworfTsKK2NsYXNzIFRleHR1cmVNYXBwZXJDYWNoZSB7
CitwdWJsaWM6CisgICAgdm9pZCBtYXJrKEJpdG1hcFRleHR1cmUqIHRleHR1cmUpOworCisgICAg
Y2xhc3MgRW50cnkgeworICAgIHB1YmxpYzoKKyAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+
IHRleHR1cmU7CisgICAgICAgIEVudHJ5KCkgOiBwcmV2aW91c0Nvc3QoMCkgeyB9CisgICAgICAg
IGlubGluZSBpbnQgY2FsY3VsYXRlQ29zdCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmICghdGV4dHVyZSB8fCAhdGV4dHVyZS0+aXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgY29uc3QgSW50U2l6ZSBzeiA9IHRleHR1cmUtPnNpemUoKTsK
KyAgICAgICAgICAgIHJldHVybiBzei53aWR0aCgpICogc3ouaGVpZ2h0KCkgKiA0OworICAgICAg
ICB9CisgICAgICAgIEVudHJ5KEJpdG1hcFRleHR1cmUqIG5ld1RleHR1cmUpCisgICAgICAgICAg
ICA6IHRleHR1cmUobmV3VGV4dHVyZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBFbnRyeSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIHRleHR1cmUg
PT0gb3RoZXIudGV4dHVyZTsgfQorICAgICAgICBpbnQgcHJldmlvdXNDb3N0OworICAgIH07CisK
KyAgICBUZXh0dXJlTWFwcGVyQ2FjaGUoKSA6IG1fdG90YWxDb3N0KDApIHt9CisKKyAgICB2b2lk
IHB1cmdlKCk7CisgICAgVmVjdG9yPEVudHJ5PiBtX2RhdGE7CisgICAgaW50IG1fdG90YWxDb3N0
OworI2lmbmRlZiBURVhNQVBfVEVYVFVSRV9DQUNIRV9LQlMKKyNkZWZpbmUgVEVYTUFQX1RFWFRV
UkVfQ0FDSEVfS0JTIDI0ICogMTAyNAorI2VuZGlmCisgICAgc3RhdGljIGNvbnN0IGludCBNYXhD
b3N0ID0gVEVYTUFQX1RFWFRVUkVfQ0FDSEVfS0JTICogMTAyNDsKKyAgICBzdGF0aWMgY29uc3Qg
aW50IFB1cmdlQW1vdW50ID0gTWF4Q29zdCAvIDQ7Cit9OworCisKK3ZvaWQgVGV4dHVyZU1hcHBl
ckNhY2hlOjpwdXJnZSgpCit7CisgICAgLy8gV2UgbmVlZCBhbiBhY3RpdmUgR0wgY29udGV4dCwg
YmVjYXVzZSB3ZSBtaWdodCBjYWxsIGdsRGVsZXRlVGV4dHVyZXMuCisgICAgY29uc3QgaW50IHNp
emUgPSBtX2RhdGEuc2l6ZSgpOworCisgICAgaWYgKG1fdG90YWxDb3N0IDw9IFRleHR1cmVNYXBw
ZXJDYWNoZTo6TWF4Q29zdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRW5zdXJlIHRoYXQg
d2UgaGF2ZSB0aGUgcmlnaHQgY291bnQuIEl0IG1pZ2h0IGJlIGluYWNjdXJhdGUgaWYgY29udGVu
dCBjaGFuZ2VkIHNpemUuCisgICAgLy8gV2Ugb25seSBkbyB0aGlzIHdoZW4gd2UncmUgYWN0dWFs
bHkgcmVhZHkgdG8gcHVyZ2UuCisgICAgbV90b3RhbENvc3QgPSAwOworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBtX3RvdGFsQ29zdCArPSBtX2RhdGFbaV0uY2Fs
Y3VsYXRlQ29zdCgpOworCisgICAgaW50IGJlZm9yZSA9IG1fdG90YWxDb3N0OworICAgIGZvciAo
aW50IGkgPSBzaXplLTE7IGkgPj0gMCAmJiBtX3RvdGFsQ29zdCA+IFRleHR1cmVNYXBwZXJDYWNo
ZTo6TWF4Q29zdCAtIFRleHR1cmVNYXBwZXJDYWNoZTo6UHVyZ2VBbW91bnQ7IC0taSkgeworICAg
ICAgICBFbnRyeSYgZW50cnkgPSBtX2RhdGFbaV07CisgICAgICAgIGlmIChlbnRyeS50ZXh0dXJl
LT5pc0xvY2tlZCgpIHx8ICFlbnRyeS50ZXh0dXJlLT5pc1ZhbGlkKCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgbV90b3RhbENvc3QgLT0gZW50cnkucHJldmlvdXNDb3N0OworICAg
ICAgICBlbnRyeS50ZXh0dXJlLT5kZXN0cm95KCk7CisgICAgICAgIG1fZGF0YS5yZW1vdmUoaSk7
CisgICAgfQorCisgICAgcHJpbnRmKCJbVGV4dHVyZU1hcHBlcl0gUHVyZ2VkICUyLjRmSyBvZiB0
ZXh0dXJlcyglZCkgWyUyLjRmSy8lZF1cbiIsIGZsb2F0KGJlZm9yZSAtIG1fdG90YWxDb3N0KSAv
IDEwMjQsCisgICAgICAgICAgIGludChzaXplLW1fZGF0YS5zaXplKCkpLCBmbG9hdChtX3RvdGFs
Q29zdCkgLyAxMDI0LCBtX2RhdGEuc2l6ZSgpKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyQ2Fj
aGU6Om1hcmsoQml0bWFwVGV4dHVyZSAqdGV4dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUgfHwg
IXRleHR1cmUtPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRW50cnkgZW50cnko
dGV4dHVyZSk7CisgICAgc2l6ZV90IGluZGV4ID0gbV9kYXRhLmZpbmQoZW50cnkpOworICAgIGlm
ICghaW5kZXgpCisgICAgICAgIHJldHVybjsKKworICAgIHByaW50ZigiWWF5YSEhICVkIFslZF0g
WyVkXSIsIGluZGV4LCBtX2RhdGEuc2l6ZSgpLCBtX3RvdGFsQ29zdCk7CisgICAgaWYgKGluZGV4
IDwgbV9kYXRhLnNpemUoKSkgCisgICAgICAgIG1fZGF0YS5yZW1vdmUoaW5kZXgpOworICAgIGNv
bnN0IGludCBjb3N0ID0gZW50cnkuY2FsY3VsYXRlQ29zdCgpOworICAgIG1fdG90YWxDb3N0IC09
IGVudHJ5LnByZXZpb3VzQ29zdDsKKyAgICBtX3RvdGFsQ29zdCArPSAoZW50cnkucHJldmlvdXND
b3N0ID0gY29zdCk7CisgICAgbV9kYXRhLnByZXBlbmQoZW50cnkpOworfQorCitUZXh0dXJlTWFw
cGVyQ2FjaGUgZ1RleHR1cmVNYXBwZXJDYWNoZTsKKworY2xhc3MgVGV4dHVyZU1hcHBlckNhY2hl
TG9jayB7CitwdWJsaWM6CisgICAgVGV4dHVyZU1hcHBlckNhY2hlTG9jayhCaXRtYXBUZXh0dXJl
KiB0ZXh0dXJlKSA6IG1fdGV4dHVyZSh0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgaWYgKG1fdGV4
dHVyZSkKKyAgICAgICAgICAgIG1fdGV4dHVyZS0+bG9jaygpOworICAgIH0KKyAgICB+VGV4dHVy
ZU1hcHBlckNhY2hlTG9jaygpCisgICAgeworICAgICAgICBpZiAobV90ZXh0dXJlKQorICAgICAg
ICAgICAgbV90ZXh0dXJlLT51bmxvY2soKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRy
PEJpdG1hcFRleHR1cmU+IG1fdGV4dHVyZTsKK307CisKK2NsYXNzIFRleHR1cmVNYXBwZXJOb2Rl
IDogcHVibGljIFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIgeworCitwdWJsaWM6CisgICAgLy8g
VGhpcyBzZXQgb2YgZmxhZ3MgaGVscCB1cyBkZWZlciB3aGljaCBwcm9wZXJ0aWVzIG9mIHRoZSBs
YXllciBoYXZlIGJlZW4KKyAgICAvLyBtb2RpZmllZCBieSB0aGUgY29tcG9zaXRvciwgc28gd2Ug
Y2FuIGtub3cgd2hhdCB0byBsb29rIGZvciBpbiB0aGUgbmV4dCBmbHVzaC4KKyAgICBlbnVtIENo
YW5nZU1hc2sgeworICAgICAgICBOb0NoYW5nZXMgPSAgICAgICAgICAgICAgICAgMCwKKworICAg
ICAgICBQYXJlbnRDaGFuZ2UgPSAgICAgICAgICAgICAgKDFMIDw8IDApLAorICAgICAgICBDaGls
ZHJlbkNoYW5nZSA9ICAgICAgICAgICAgKDFMIDw8IDEpLAorICAgICAgICBNYXNrTGF5ZXJDaGFu
Z2UgPSAgICAgICAgICAgKDFMIDw8IDIpLAorICAgICAgICBQb3NpdGlvbkNoYW5nZSA9ICAgICAg
ICAgICAgKDFMIDw8IDMpLAorCisgICAgICAgIEFuY2hvclBvaW50Q2hhbmdlID0gICAgICAgICAo
MUwgPDwgNCksCisgICAgICAgIFNpemVDaGFuZ2UgID0gICAgICAgICAgICAgICAoMUwgPDwgNSks
CisgICAgICAgIFRyYW5zZm9ybUNoYW5nZSA9ICAgICAgICAgICAoMUwgPDwgNiksCisgICAgICAg
IENvbnRlbnRDaGFuZ2UgPSAgICAgICAgICAgICAoMUwgPDwgNyksCisKKyAgICAgICAgQ29udGVu
dHNPcmllbnRhdGlvbkNoYW5nZSA9ICgxTCA8PCA5KSwKKyAgICAgICAgT3BhY2l0eUNoYW5nZSA9
ICAgICAgICAgICAgICgxTCA8PCAxMCksCisgICAgICAgIENvbnRlbnRzUmVjdENoYW5nZSA9ICAg
ICAgICAoMUwgPDwgMTEpLAorCisgICAgICAgIFByZXNlcnZlczNEQ2hhbmdlID0gICAgICAgICAo
MUwgPDwgMTIpLAorICAgICAgICBNYXNrc1RvQm91bmRzQ2hhbmdlID0gICAgICAgKDFMIDw8IDEz
KSwKKyAgICAgICAgRHJhd3NDb250ZW50Q2hhbmdlID0gICAgICAgICgxTCA8PCAxNCksCisgICAg
ICAgIENvbnRlbnRzT3BhcXVlQ2hhbmdlID0gICAgICAoMUwgPDwgMTUpLAorCisgICAgICAgIEJh
Y2tmYWNlVmlzaWJpbGl0eUNoYW5nZSA9ICAoMUwgPDwgMTYpLAorICAgICAgICBDaGlsZHJlblRy
YW5zZm9ybUNoYW5nZSA9ICAgKDFMIDw8IDE3KSwKKyAgICAgICAgRGlzcGxheUNoYW5nZSA9ICAg
ICAgICAgICAgICgxTCA8PCAxOCksCisgICAgICAgIEJhY2tncm91bmRDb2xvckNoYW5nZSA9ICAg
ICAoMUwgPDwgMTkpLAorCisgICAgICAgIFJlcGxpY2FMYXllckNoYW5nZSA9ICAgICAgICAoMUwg
PDwgMjApCisgICAgfTsKKworICAgIC8vIFRoZSBjb21wb3NpdG9yIGxldHMgdXMgc3BlY2lhbC1j
YXNlIGltYWdlcyBhbmQgY29sb3JzLCBzbyB3ZSB0cnkgdG8gZG8gc28uCisgICAgZW51bSBTdGF0
aWNDb250ZW50VHlwZSB7IEhUTUxDb250ZW50VHlwZSwgRGlyZWN0SW1hZ2VDb250ZW50VHlwZSwg
Q29sb3JDb250ZW50VHlwZSwgTWVkaWFDb250ZW50VHlwZSwgQ2FudmFzM0RDb250ZW50VHlwZX07
CisKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogcm9vdExheWVyKCk7CisKKyAgICBUZXh0dXJlTWFw
cGVyTm9kZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogbmV3TGF5ZXIpOworICAgIHZpcnR1
YWwgflRleHR1cmVNYXBwZXJOb2RlKCk7CisKKyAgICB2b2lkIGNsZWFyRGlyZWN0SW1hZ2UoKTsK
KyAgICB2b2lkIGNvbXB1dGVUcmFuc2Zvcm1hdGlvbnMoKTsKKyAgICBJbnRTaXplIG5lYXJlc3RT
dXJmYWNlU2l6ZSgpIGNvbnN0OworICAgIHZvaWQgY29tcHV0ZVJlcGxpY2FUcmFuc2Zvcm0oKTsK
KyAgICB2b2lkIGNvbXB1dGVMYXllclR5cGUoKTsKKyAgICB2b2lkIGNvbXB1dGVMb2NhbFRyYW5z
Zm9ybSgpOworICAgIHZvaWQgZmxhdHRlblRvMkRTcGFjZUlmTmVjZXNzYXJ5KCk7CisgICAgdm9p
ZCBpbml0aWFsaXplVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKik7CisgICAgdm9pZCBpbnZh
bGlkYXRlVHJhbnNmb3JtKCk7CisgICAgdm9pZCBub3RpZnlDaGFuZ2UoQ2hhbmdlTWFzayk7Cisg
ICAgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZShib29sIHJlY3Vyc2UpOworICAgIHZvaWQgcGVy
Zm9ybVBvc3RTeW5jT3BlcmF0aW9ucygpOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Cisg
ICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoSW50UmVjdCk7CisgICAgdmlydHVhbCB2b2lk
IGNsZWFudXBUZXh0dXJlTWFwcGVyKCk7CisKKyAgICB2b2lkIHBhaW50UmVjdXJzaXZlKFRleG1h
cFBhaW50T3B0aW9ucyBvcHRpb25zKTsKKyAgICB2b2lkIHBhaW50U2VsZihUZXh0dXJlTWFwcGVy
KiB0ZXh0dXJlTWFwcGVyLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVy
ZSwgQml0bWFwVGV4dHVyZSogcmVwbGljYU1hc2tUZXh0dXJlLCBib29sIGlzU3VyZmFjZSk7Cisg
ICAgdm9pZCB1cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1h
cHBlcik7CisKKyAgICBpbnQgY291bnREZXNjZW5kYW50c1dpdGhDb250ZW50KCkgY29uc3Q7Cisg
ICAgYm9vbCBoYXNTdXJmYWNlRGVzY2VuZGFudHMoKSBjb25zdDsKKworICAgIEludFNpemUgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldFBsYXRm
b3JtTGF5ZXJDbGllbnQoVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50Kik7CisgICAgdmlydHVhbCB2
b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFNpemUmLCBjb25zdCBJbnRSZWN0
JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0JiBleHBvc2VkUmVjdCwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSk7CisKKyAgICBzdGF0aWMgVGV4
dHVyZU1hcHBlck5vZGUqIHRvVGV4dHVyZU1hcHBlck5vZGUoR3JhcGhpY3NMYXllciopOworcHVi
bGljOgorICAgIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBtX2xheWVyOworICAgIGNvbnN0
IGNoYXIqIG1fbGFzdFRleHR1cmVNYXBwZXJUeXBlOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVy
PiBtX2xhc3RUZXh0dXJlTWFwcGVyOworICAgIHN0cnVjdCBUcmFuc2Zvcm1EYXRhIHsKKyAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYmFzZSwgdGFyZ2V0LCByZXBsaWNhLCBmb3JEZXNjZW5k
YW50cywgcGVyc3BlY3RpdmUsIGxvY2FsOworICAgICAgICBJbnRSZWN0IHRhcmdldEJvdW5kaW5n
UmVjdDsKKyAgICAgICAgZmxvYXQgY2VudGVyWjsKKyAgICAgICAgYm9vbCBkaXJ0eSwgbG9jYWxE
aXJ0eSwgcGVyc3BlY3RpdmVEaXJ0eTsKKyAgICAgICAgSW50UmVjdCBib3VuZGluZ1JlY3RGcm9t
Um9vdDsKKyAgICAgICAgVHJhbnNmb3JtRGF0YSgpIDogZGlydHkodHJ1ZSksIGxvY2FsRGlydHko
dHJ1ZSksIHBlcnNwZWN0aXZlRGlydHkodHJ1ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAg
fTsKKworICAgIFRyYW5zZm9ybURhdGEgbV90cmFuc2Zvcm1zOworCisgICAgZW51bSBMYXllclR5
cGUgeworICAgICAgICBEZWZhdWx0TGF5ZXIsCisgICAgICAgIFJvb3RMYXllciwKKyAgICAgICAg
U2Npc3NvckxheWVyLAorICAgICAgICBDbGlwTGF5ZXIsCisgICAgICAgIFRyYW5zcGFyZW5jeUxh
eWVyCisgICAgfTsKKworICAgIExheWVyVHlwZSBtX2xheWVyVHlwZTsKKworICAgIHN0cnVjdCBD
b250ZW50RGF0YSB7CisgICAgICAgIEludFJlY3QgbmVlZHNEaXNwbGF5UmVjdDsKKyAgICAgICAg
Ym9vbCBuZWVkc0Rpc3BsYXk7CisgICAgICAgIENvbG9yIGJhY2tncm91bmRDb2xvcjsKKworICAg
ICAgICBTdGF0aWNDb250ZW50VHlwZSBjb250ZW50VHlwZTsKKyAgICAgICAgUmVmUHRyPEltYWdl
PiBpbWFnZTsKKyAgICAgICAgVGV4dHVyZU1hcHBlclZpZGVvTGF5ZXIqIG1lZGlhOworCisgICAg
ICAgIENvbnRlbnREYXRhKCkKKyAgICAgICAgICAgIDogbmVlZHNEaXNwbGF5KGZhbHNlKQorICAg
ICAgICAgICAgLCBjb250ZW50VHlwZShIVE1MQ29udGVudFR5cGUpCisgICAgICAgICAgICAsIGlt
YWdlKDApCisgICAgICAgICAgICAsIG1lZGlhKDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgfTsKKworICAgIGlubGluZSBJbnRSZWN0IHRhcmdldFJlY3QoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRU
eXBlID8gZnVsbFJlY3QoKSA6IG1fc3RhdGUuY29udGVudHNSZWN0OworICAgIH0KKworICAgIGlu
bGluZSBJbnRSZWN0IGZ1bGxSZWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBJbnRS
ZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgIH0KKworICAg
IGlubGluZSBJbnRSZWN0IHJlcGxpY2FSZWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2xheWVyVHlwZSA9PSBUcmFuc3BhcmVuY3lMYXllciA/IEludFJlY3QoMCwgMCwgbV9uZWFy
ZXN0U3VyZmFjZVNpemUud2lkdGgoKSwgbV9uZWFyZXN0U3VyZmFjZVNpemUuaGVpZ2h0KCkpIDog
ZnVsbFJlY3QoKTsKKyAgICB9CisKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbV90ZXh0dXJl
OworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBtX3N1cmZhY2UsIG1fcmVwbGljYVN1cmZhY2U7
CisKKyAgICBDb250ZW50RGF0YSBtX3BlbmRpbmdDb250ZW50OworICAgIENvbnRlbnREYXRhIG1f
Y3VycmVudENvbnRlbnQ7CisKKyAgICBWZWN0b3I8VGV4dHVyZU1hcHBlck5vZGUqPiBtX2NoaWxk
cmVuOworICAgIFRleHR1cmVNYXBwZXJOb2RlKiBtX3BhcmVudDsKKyAgICBUZXh0dXJlTWFwcGVy
Tm9kZSogbV9lZmZlY3RUYXJnZXQ7CisgICAgaW50IG1fY2hhbmdlTWFzazsKKyAgICBJbnRTaXpl
IG1fc2l6ZSwgbV9uZWFyZXN0U3VyZmFjZVNpemU7CisgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBU
ZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQqIG1fcGxhdGZvcm1DbGllbnQ7CisKKyAgICBzdHJ1Y3Qg
U3RhdGUgeworICAgICAgICBGbG9hdFBvaW50IHBvczsKKyAgICAgICAgRmxvYXRQb2ludDNEIGFu
Y2hvclBvaW50OworICAgICAgICBGbG9hdFNpemUgc2l6ZTsKKyAgICAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggdHJhbnNmb3JtOworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZHJl
blRyYW5zZm9ybTsKKyAgICAgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOworICAgICAgICBDb2xv
ciBjdXJyZW50Q29sb3I7CisgICAgICAgIEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0ZXNPcmllbnRhdGlvbiBnZW9PcmllbnRhdGlvbjsKKyAgICAgICAgR3JhcGhpY3NMYXllcjo6
Q29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIGNvbnRlbnRzT3JpZW50YXRpb247Cisg
ICAgICAgIGZsb2F0IG9wYWNpdHk7CisgICAgICAgIEludFJlY3QgY29udGVudHNSZWN0OworICAg
ICAgICBpbnQgZGVzY2VuZGFudHNXaXRoQ29udGVudDsKKyAgICAgICAgVGV4dHVyZU1hcHBlck5v
ZGUqIG1hc2tMYXllcjsKKyAgICAgICAgVGV4dHVyZU1hcHBlck5vZGUqIHJlcGxpY2FMYXllcjsK
KyAgICAgICAgYm9vbCBwcmVzZXJ2ZXMzRDsKKyAgICAgICAgYm9vbCBtYXNrc1RvQm91bmRzOwor
ICAgICAgICBib29sIGRyYXdzQ29udGVudDsKKyAgICAgICAgYm9vbCBjb250ZW50c09wYXF1ZTsK
KyAgICAgICAgYm9vbCBiYWNrZmFjZVZpc2liaWxpdHk7CisgICAgICAgIGJvb2wgdmlzaWJsZTsK
KyAgICAgICAgYm9vbCBkaXJ0eTsKKyAgICAgICAgYm9vbCB0aWxlZDsKKyAgICAgICAgYm9vbCBo
YXNTdXJmYWNlRGVzY2VuZGFudHM7CisKKyAgICAgICAgU3RhdGUoKQorICAgICAgICAgICAgOiBv
cGFjaXR5KDEuZikKKyAgICAgICAgICAgICwgZGVzY2VuZGFudHNXaXRoQ29udGVudCgwKQorICAg
ICAgICAgICAgLCBtYXNrTGF5ZXIoMCkKKyAgICAgICAgICAgICwgcmVwbGljYUxheWVyKDApCisg
ICAgICAgICAgICAsIHByZXNlcnZlczNEKGZhbHNlKQorICAgICAgICAgICAgLCBtYXNrc1RvQm91
bmRzKGZhbHNlKQorICAgICAgICAgICAgLCBkcmF3c0NvbnRlbnQoZmFsc2UpCisgICAgICAgICAg
ICAsIGNvbnRlbnRzT3BhcXVlKGZhbHNlKQorICAgICAgICAgICAgLCBiYWNrZmFjZVZpc2liaWxp
dHkoZmFsc2UpCisgICAgICAgICAgICAsIHZpc2libGUodHJ1ZSkKKyAgICAgICAgICAgICwgZGly
dHkodHJ1ZSkKKyAgICAgICAgICAgICwgdGlsZWQoZmFsc2UpCisgICAgICAgICAgICAsIGhhc1N1
cmZhY2VEZXNjZW5kYW50cyhmYWxzZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgfTsKKyAg
ICBTdGF0ZSBtX3N0YXRlOworfTsKKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KEludFJlY3QgcmVjdCkKK3sKKyAgICBpZiAobV9wbGF0Zm9ybUNsaWVudCkg
eworICAgICAgICBpZiAobV9zdGF0ZS5oYXNTdXJmYWNlRGVzY2VuZGFudHMpIHsKKyAgICAgICAg
ICAgIG1fcGxhdGZvcm1DbGllbnQtPnNldE5lZWRzRGlzcGxheSgpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIHJlY3QuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgbV9z
aXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICBpZiAocmVjdC5pc0VtcHR5
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fcGxhdGZvcm1DbGllbnQtPnNldE5l
ZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
ICghbV9wYXJlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGFyZW50LT5zZXROZWVkc0Rp
c3BsYXlJblJlY3QocmVjdCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldE5lZWRz
RGlzcGxheSgpCit7CisgICAgaWYgKG1fZWZmZWN0VGFyZ2V0KQorICAgICAgICBtX2VmZmVjdFRh
cmdldC0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgaWYgKG1fdHJhbnNmb3Jtcy50YXJnZXRCb3Vu
ZGluZ1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fc3RhdGUuZHJh
d3NDb250ZW50IHx8IG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgIT0gSFRNTENvbnRlbnRU
eXBlKQorICAgICAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3QobV90cmFuc2Zvcm1zLnRhcmdldEJv
dW5kaW5nUmVjdCk7Cit9CisKKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0UGxhdGZvcm1M
YXllckNsaWVudChUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICBtX3Bs
YXRmb3JtQ2xpZW50ID0gY2xpZW50OworfQorCitzdGF0aWMgaW50IGNvbXBhcmVHcmFwaGljc0xh
eWVyc1pWYWx1ZShjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQoreworICAgIHR5cGVkZWYg
Y29uc3QgVGV4dHVyZU1hcHBlck5vZGUqIE5vZGVQdHI7CisgICAgY29uc3QgTm9kZVB0ciogbm9k
ZUEgPSBzdGF0aWNfY2FzdDxjb25zdCBOb2RlUHRyKj4oYSk7CisgICAgY29uc3QgTm9kZVB0ciog
bm9kZUIgPSBzdGF0aWNfY2FzdDxjb25zdCBOb2RlUHRyKj4oYik7CisgICAgcmV0dXJuIGludCgo
KCpub2RlQSktPm1fdHJhbnNmb3Jtcy5jZW50ZXJaIC0gKCpub2RlQiktPm1fdHJhbnNmb3Jtcy5j
ZW50ZXJaKSAqIDEwMDApOworfQoraW5saW5lIHN0YXRpYyB2b2lkIHNvcnRCeVpPcmRlcihWZWN0
b3I8VGV4dHVyZU1hcHBlck5vZGUqID4mIGFycmF5LCBpbnQgZmlyc3QsIGludCBsYXN0KQorewor
ICAgIHFzb3J0KGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBzaXplb2YoVGV4dHVyZU1hcHBl
ck5vZGUqKSwgY29tcGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKTsKK30KKworYm9vbCBUZXh0dXJl
TWFwcGVyTm9kZTo6aGFzU3VyZmFjZURlc2NlbmRhbnRzKCkgY29uc3QKK3sKKworICAgIGlmICht
X2xheWVyVHlwZSA9PSBDbGlwTGF5ZXIgfHwgbV9sYXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5
ZXIgfHwgbV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNv
bnN0IGludCBzaXplID0gbV9jaGlsZHJlbi5zaXplKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBzaXplOyArK2kpCisgICAgICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSogY2hpbGQgPSBtX2No
aWxkcmVuW2ldKQorICAgICAgICAgICAgaWYgKGNoaWxkLT5oYXNTdXJmYWNlRGVzY2VuZGFudHMo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7CisKK30K
Kwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBnYywgY29u
c3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UmVj
dCYgZXhwb3NlZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZs
b2F0IG9wYWNpdHkpCit7CisgICAgLy8gbmVlZHMgYWN0aXZlIGNvbnRleHQKKyAgICBBU1NFUlQo
bV9sYXllclR5cGUgPT0gUm9vdExheWVyKTsKKyAgICBpZiAobV9zaXplLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworCisjaWYgMAorICAgIFdURjo6U3RvcFdhdGNoIHN0b3BXYXRjaDsKKyAg
ICBwcmludGYoIltUZXh0dXJlTWFwcGVyXSBSb290UGFpbnQhIVxuIik7CisjZW5kaWYKKworICAg
IFJlZlB0cjxUZXh0dXJlTWFwcGVyPiB0ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3Jl
YXRlKGdjKTsKKworICAgIGlmICh0ZXh0dXJlTWFwcGVyLT50eXBlKCkgIT0gbV9sYXN0VGV4dHVy
ZU1hcHBlclR5cGUpCisgICAgICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUubV9kYXRhLmNsZWFyKCk7
CisKKyAgICBtX2xhc3RUZXh0dXJlTWFwcGVyID0gdGV4dHVyZU1hcHBlcjsKKyAgICBUZXhtYXBQ
YWludE9wdGlvbnMgb3B0OworICAgIG9wdC5vcGFjaXR5ID0gMTsKKyAgICBvcHQucm9vdExheWVy
ID0gdGhpczsKKyAgICBvcHQuc2Npc3NvclJlY3QgPSB0YXJnZXRSZWN0OworICAgIG9wdC52aXNp
YmxlUmVjdCA9IGV4cG9zZWRSZWN0OworICAgIG9wdC50ZXh0dXJlTWFwcGVyID0gdGV4dHVyZU1h
cHBlci5nZXQoKTsKKyAgICBvcHQuZ2MgPSB0ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQo
KTsKKyAgICBvcHQuc3VyZmFjZSA9IDA7CisgICAgcGFpbnRSZWN1cnNpdmUob3B0KTsKKworICAg
IGlmICh0ZXh0dXJlTWFwcGVyLT5hbGxvd1N1cmZhY2VGb3JSb290KCkgfHwgbV9zdGF0ZS5oYXNT
dXJmYWNlRGVzY2VuZGFudHMpIHsKKyAgICAgICAgdGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2Uo
MCk7CisgICAgICAgIHRleHR1cmVNYXBwZXItPnBhaW50VG9UYXJnZXQoKm1fc3VyZmFjZS5nZXQo
KSwgc2l6ZSwgdHJhbnNmb3JtLCBvcGFjaXR5ICogbV9zdGF0ZS5vcGFjaXR5LCB0YXJnZXRSZWN0
KTsKKyAgICB9CisgICAgZ1RleHR1cmVNYXBwZXJDYWNoZS5wdXJnZSgpOworI2lmIDAKKyAgICB7
CisgICAgICAgIHN0YXRpYyBpbnQgcm9vdENvdW50ID0gMDsKKyAgICAgICAgcHJpbnRmKCJbVGV4
dHVyZU1hcHBlcl0gUm9vdFBhaW50KCVkKSAlZCBsYXllciglcCkgKCVkKyVkICVkeCVkKSBbJWRt
c11cbiIsICsrcm9vdENvdW50LCB0ZXh0dXJlTWFwcGVyLT5hbGxvd1N1cmZhY2VGb3JSb290KCks
CisgICAgICAgICAgICAgICB0aGlzLCBleHBvc2VkUmVjdC54KCksIGV4cG9zZWRSZWN0LnkoKSwg
ZXhwb3NlZFJlY3Qud2lkdGgoKSwgZXhwb3NlZFJlY3QuaGVpZ2h0KCksIAorICAgICAgICAgICAg
ICAgaW50KHN0b3BXYXRjaC5lbGFwc2VkKCkgKiAxMDAwKSk7CisjaWYgMAorICAgICAgICBpZiAo
dGV4dHVyZU1hcHBlci0+YWxsb3dTdXJmYWNlRm9yUm9vdCgpKQorICAgICAgICAgICAgbV9zdXJm
YWNlLT5zYXZlKFN0cmluZygpLmZvcm1hdCgiL3RtcC9yb290XyVkLnBuZyIsIHJvb3RDb3VudCkp
OworI2VuZGlmCisgICAgfQorI2VuZGlmCit9CisKK2ludCBUZXh0dXJlTWFwcGVyTm9kZTo6Y291
bnREZXNjZW5kYW50c1dpdGhDb250ZW50KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc3RhdGUudmlz
aWJsZSB8fCBtX3N0YXRlLm9wYWNpdHkgPCAwLjAwMSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
aW50IGRlc2NlbmRhbnRzV2l0aENvbnRlbnQgPSAobV9zdGF0ZS5kcmF3c0NvbnRlbnQgfHwgbV9j
dXJyZW50Q29udGVudC5jb250ZW50VHlwZSAhPSBIVE1MQ29udGVudFR5cGUpID8gMSA6IDA7CisK
KyAgICBjb25zdCBpbnQgc2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSogY2hp
bGQgPSBtX2NoaWxkcmVuW2ldKQorICAgICAgICAgICAgZGVzY2VuZGFudHNXaXRoQ29udGVudCAr
PSBjaGlsZC0+Y291bnREZXNjZW5kYW50c1dpdGhDb250ZW50KCk7CisgICAgfQorCisgICAgcmV0
dXJuIGRlc2NlbmRhbnRzV2l0aENvbnRlbnQ7Cit9CisKK2lubGluZSBUZXh0dXJlTWFwcGVyTm9k
ZSogVGV4dHVyZU1hcHBlck5vZGU6OnRvVGV4dHVyZU1hcHBlck5vZGUoR3JhcGhpY3NMYXllciog
bGF5ZXIpCit7CisgICAgcmV0dXJuIGxheWVyID8gc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIqPihsYXllciktPm1fbm9kZS5nZXQoKSA6IDA7Cit9CisKK3ZvaWQgVGV4dHVy
ZU1hcHBlck5vZGU6OmNvbXB1dGVMYXllclR5cGUoKQoreworICAgIC8vIGNhbGN1bGF0ZSBsYXll
ciB0eXBlLiBBIGxheWVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAvLyAgUm9v
dExheWVyOiB0aGUgdG9wIGxldmVsLiBEcmF3cyB0byBhIGZyYW1lYnVmZmVyLCBhbmQgdGhlIHRh
cmdldCB0ZXh0dXJlIGRyYXdzIGludG8gdGhlIHZpZXdwb3J0LgorICAgIC8vICAgICAgICAgICAg
b25seSBvbmUgbGF5ZXIgaXMgdGhlIHJvb3QgbGF5ZXIuCisgICAgLy8gIFNjaXNzb3JMYXllcjog
ZHJhd3MgdG8gdGhlIGN1cnJlbnQgZnJhbWVidWZmZXIsIGFuZCBhcHBsaWVzIGFuIGV4dHJhIHNj
aXNzb3IgYmVmb3JlIGRyYXdpbmcgaXRzIGNoaWxkcmVuLgorICAgIC8vICAgICAgICAgICAgICAg
IEEgc2Npc3NvciBsYXllciBpcyBhIGxheWVyIHdpdGggY2hpbGRyZW4gdGhhdCBtYXNrcyB0byBi
b3VuZHMsIGlzIG5vdCBhIHRyYW5zcGFyZW5jeSBsYXllciwgYW5kIGhhcyBhIHJlY3Rhbmd1bGFy
IGNsaXAuCisgICAgLy8gIENsaXBMYXllcjogY3JlYXRlcyBhIG5ldyBmcmFtZWJ1ZmZlciwgdGhl
IHNpemUgb2YgdGhlIGxheWVyLCBhbmQgdGhlbiBwYWludHMgaXQgdG8gdGhlIGVuY2xvc2luZyBC
aXRtYXBUZXh0dXJlIHdpdGggdGhlIGxheWVyJ3MgdHJhbnNmb3JtL29wYWNpdHkuCisgICAgLy8g
ICAgICAgICAgICAgIEEgY2xpcCBsYXllciBpcyBhIGxheWVyIHRoYXQgbWFza3MgdG8gYm91bmRz
LCBkb2Vzbid0IHByZXNlcnZlIDNELCBoYXMgY2hpbGRyZW4sIGFuZCBoYXMgYSB0cmFuc3BhcmVu
Y3kvbWFzayBvciBhIG5vbi1yZWN0YW5ndWxhciB0cmFuc2Zvcm0uCisgICAgLy8gIFRyYW5zcGFy
ZW5jeUxheWVyOiBjcmVhdGVzIGEgbmV3IGZyYW1lYnVmZmVyIGlkZXRpY2FsIGluIHNpemUgdG8g
dGhlIGN1cnJlbnQgZnJhbWVidWZmZXIuIFRoZW4gZHJhd3MgdGhlIGZiJ3MgdGV4dHVyZSB0byB0
aGUgY3VycmVudCBmcmFtZWJ1ZmZlciB3aXRoIGlkZW50aXR5IHRyYW5zZm9ybS4KKyAgICAvLyAg
ICAgICAgICAgICAgICAgICAgIFVzZWQgZm9yIGxheWVycyB3aXRoIGNoaWxkcmVuIGFuZCB0cmFu
c3BhcmVuY3kvbWFzayB0aGF0IHByZXNlcnZlIDNEIG9yIGRvbid0IG1hc2sgdG8gYm91bmRzLgor
ICAgIC8vICBEZWZhdWx0TGF5ZXI6IGRyYXdzIGl0c2VsZiBhbmQgaXRzIGNoaWxkcmVuIGRpcmVj
dGx5IHRvIHRoZSBjdXJyZW50IGZyYW1lYnVmZmVyLgorICAgIC8vICAgICAgICAgICAgICAgIGFu
eSBsYXllciB0aGF0IGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgb3RoZXIgcnVsZXMgaXMgYSBEZWZh
dWx0TGF5ZXIuCisKKyAgICBjb25zdCBib29sIHNlbGZIYXNDb250ZW50ID0gbV9zdGF0ZS5kcmF3
c0NvbnRlbnQgfHwgKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgIT0gSFRNTENvbnRlbnRU
eXBlKTsKKyAgICBjb25zdCBib29sIGhhc0Rlc2NlbmRhbnRzV2l0aENvbnRlbnQgPSBtX3N0YXRl
LmRlc2NlbmRhbnRzV2l0aENvbnRlbnQgLSAoc2VsZkhhc0NvbnRlbnQgPyAxIDogMCk7CisgICAg
Y29uc3QgYm9vbCBoYXNUcmFuc3BhcmVuY3kgPSBtX3N0YXRlLm9wYWNpdHkgPCAwLjk5IHx8IG1f
c3RhdGUubWFza0xheWVyOworICAgIGNvbnN0IGJvb2wgaGFzUmVwbGljYSA9IG1fc3RhdGUucmVw
bGljYUxheWVyOworICAgIG1fbGF5ZXJUeXBlID0gRGVmYXVsdExheWVyOworCisgICAgLy8gTGF5
ZXIgaGFzIG5vIHBhcmVudCwgaXQgbXVzdCBiZSBhIHJvb3QgbGF5ZXIuCisgICAgaWYgKCFtX3Bh
cmVudCAmJiAhbV9lZmZlY3RUYXJnZXQpIHsKKyAgICAgICAgbV9sYXllclR5cGUgPSBSb290TGF5
ZXI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBIGxheWVyIHdpdGggbm8gY29u
dGVudHMgaXMgYWx3YXlzIGEgZGVmYXVsdCBsYXllci4KKyAgICBpZiAoIW1fc3RhdGUuZGVzY2Vu
ZGFudHNXaXRoQ29udGVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQSBsYXllciB3aXRo
IGNvbnRlbnQtZGVzY2VuZGFudHMgYW5kIGEgbWFzayBpcyBhbHdheXMgYSBjbGlwIGxheWVyLgor
ICAgIGlmIChoYXNEZXNjZW5kYW50c1dpdGhDb250ZW50ICYmIG1fc3RhdGUubWFza0xheWVyKSB7
CisgICAgICAgIG1fbGF5ZXJUeXBlID0gQ2xpcExheWVyOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gQSBtYXNrcy10byBib3VuZHMgbGF5ZXIgY2FuIGJlIGEgY2xpcCBvciBhIHNj
aXNzb3IgbGF5ZXIuIEl0J3MgYSBzY2lzc29yIGxheWVyIG9ubHkgaWYgaXQgaGFzIGEgdHJpdmlh
bCBjbGlwIChpZGVudGl0eSBvciB0cmFuc2xhdGlvbiksIG9yIGlmIGl0IGhhcyB0cmFuc3BhcmVu
Y3kuCisgICAgLy8gVGhhdCdzIGJlY2F1c2UgYSBDbGlwTGF5ZXIgd291bGQgY3JlYXRlIGFuIGlu
dGVybWVkaWF0ZSBkcmF3aW5nIHN1cmZhY2UgKEZCKSAtIHdlIHdhbnQgdG8gbGltaXQgaXQgdG8g
d2hlbiBpdCdzIGFjdHVhbGx5IG5lY2Vzc2FyeSwgaS5lLiB0cmFuc3BhcmVuY3kgb3Igbm9uLXRy
aXZpYWwgY2xpcC4KKyAgICBpZiAobV9zdGF0ZS5tYXNrc1RvQm91bmRzICYmIGhhc0Rlc2NlbmRh
bnRzV2l0aENvbnRlbnQpIHsKKyAgICAgICAgaWYgKGhhc1RyYW5zcGFyZW5jeSB8fCAhbV9zdGF0
ZS50cmFuc2Zvcm0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSB8fCBtX3BhcmVudC0+bV9zdGF0
ZS5wcmVzZXJ2ZXMzRCkKKyAgICAgICAgICAgIG1fbGF5ZXJUeXBlID0gQ2xpcExheWVyOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX2xheWVyVHlwZSA9IFNjaXNzb3JMYXllcjsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIHVzZSBhIHRyYW5zcGFyZW5jeSBsYXllciB3
aGVuIHdlIGhhdmUgdHdvIG9mIHRoZSBmb2xsb3dpbmcgMzogcmVwbGljYSwgdHJhbnNwYXJlbmN5
LCBkZXNjZW5kYW50cyB3aXRoIGNvbnRlbnRzLgorICAgIGlmICgoaGFzUmVwbGljYSAmJiBoYXNE
ZXNjZW5kYW50c1dpdGhDb250ZW50KSB8fCAoaGFzUmVwbGljYSAmJiBoYXNUcmFuc3BhcmVuY3kp
IHx8IChoYXNUcmFuc3BhcmVuY3kgJiYgbV9zdGF0ZS5kZXNjZW5kYW50c1dpdGhDb250ZW50ID4g
MSkpCisgICAgICAgIG1fbGF5ZXJUeXBlID0gVHJhbnNwYXJlbmN5TGF5ZXI7Cit9Cit2b2lkIFRl
eHR1cmVNYXBwZXJOb2RlOjppbml0aWFsaXplVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0
ZXh0dXJlTWFwcGVyKQoreworICAgIGlmICh0ZXh0dXJlTWFwcGVyLT50eXBlKCkgPT0gbV9sYXN0
VGV4dHVyZU1hcHBlclR5cGUpCisgICAgICAgIHJldHVybjsKKyNpZiAwCisgICAgaWYgKG1fbGF5
ZXJUeXBlID09IENsaXBMYXllciB8fCBtX2xheWVyVHlwZSA9PSBUcmFuc3BhcmVuY3lMYXllcgor
ICAgICAgICB8fCAobV9sYXllclR5cGUgPT0gUm9vdExheWVyICYmIHRleHR1cmVNYXBwZXItPmFs
bG93U3VyZmFjZUZvclJvb3QoKSkpCisgICAgICAgIG1fc3VyZmFjZSA9IHRleHR1cmVNYXBwZXIt
PmNyZWF0ZVRleHR1cmUoKTsKKyAgICBlbHNlIGlmIChtX3N1cmZhY2UpCisgICAgICAgIG1fc3Vy
ZmFjZS0+ZGVzdHJveSgpOworICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllcikKKyAgICAgICAg
bV9yZXBsaWNhU3VyZmFjZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICBl
bHNlIGlmIChtX3JlcGxpY2FTdXJmYWNlKQorICAgICAgICBtX3JlcGxpY2FTdXJmYWNlLT5kZXN0
cm95KCk7CisjZWxzZQorICAgIG1fc3VyZmFjZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1
cmUoKTsKKyAgICBtX3JlcGxpY2FTdXJmYWNlID0gdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVy
ZSgpOworI2VuZGlmCisgICAgbV90ZXh0dXJlID0gdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVy
ZSgpOworICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUubWFyayhtX3RleHR1cmUuZ2V0KCkpOworICAg
IG1fbGFzdFRleHR1cmVNYXBwZXJUeXBlID0gdGV4dHVyZU1hcHBlci0+dHlwZSgpOworfQorCitU
ZXh0dXJlTWFwcGVyTm9kZTo6VGV4dHVyZU1hcHBlck5vZGUoR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIqIG5ld0xheWVyKQorICAgIDogbV9sYXllcihuZXdMYXllcikKKyAgICAsIG1fbGFzdFRl
eHR1cmVNYXBwZXJUeXBlKDApCisgICAgLCBtX2xhc3RUZXh0dXJlTWFwcGVyKDApCisgICAgLCBt
X2xheWVyVHlwZShEZWZhdWx0TGF5ZXIpCisgICAgLCBtX3N1cmZhY2UoMCkKKyAgICAsIG1fcGFy
ZW50KDApCisgICAgLCBtX2VmZmVjdFRhcmdldCgwKQorICAgICwgbV9jaGFuZ2VNYXNrKE5vQ2hh
bmdlcykKKyAgICAsIG1fcGxhdGZvcm1DbGllbnQoMCkKK3sKKworfQorCitUZXh0dXJlTWFwcGVy
Tm9kZSogVGV4dHVyZU1hcHBlck5vZGU6OnJvb3RMYXllcigpCit7CisgICAgaWYgKG1fZWZmZWN0
VGFyZ2V0KQorICAgICAgICByZXR1cm4gbV9lZmZlY3RUYXJnZXQtPnJvb3RMYXllcigpOworICAg
IGlmIChtX3BhcmVudCkKKyAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5yb290TGF5ZXIoKTsKKyAg
ICByZXR1cm4gdGhpczsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6aW52YWxpZGF0ZVRy
YW5zZm9ybSgpCit7CisgICAgbV90cmFuc2Zvcm1zLmRpcnR5ID0gdHJ1ZTsKKyAgICBpZiAobV9s
YXllclR5cGUgIT0gQ2xpcExheWVyKQorICAgICAgICBtX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKKyAg
ICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVy
LT5pbnZhbGlkYXRlVHJhbnNmb3JtKCk7CisgICAgY29uc3QgaW50IHNpemUgPSBtX2NoaWxkcmVu
LnNpemUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBp
ZiAoVGV4dHVyZU1hcHBlck5vZGUqIGxheWVyID0gbV9jaGlsZHJlbltpXSkKKyAgICAgICAgICAg
IGxheWVyLT5pbnZhbGlkYXRlVHJhbnNmb3JtKCk7CisgICAgfQorfQorCit2b2lkIFRleHR1cmVN
YXBwZXJOb2RlOjpjb21wdXRlTG9jYWxUcmFuc2Zvcm0oKQoreworICAgIGlmICghbV90cmFuc2Zv
cm1zLmxvY2FsRGlydHkpCisgICAgICAgIHJldHVybjsKKyAgICBjb25zdCBmbG9hdCBvcmlnaW5Y
ID0gbV9zdGF0ZS5hbmNob3JQb2ludC54KCkgKiBtX3NpemUud2lkdGgoKTsKKyAgICBjb25zdCBm
bG9hdCBvcmlnaW5ZID0gbV9zdGF0ZS5hbmNob3JQb2ludC55KCkgKiBtX3NpemUuaGVpZ2h0KCk7
CisgICAgbV90cmFuc2Zvcm1zLmxvY2FsID0KKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgo
KQorICAgICAgICAudHJhbnNsYXRlM2Qob3JpZ2luWCArIG1fc3RhdGUucG9zLngoKSwgb3JpZ2lu
WSArIG1fc3RhdGUucG9zLnkoKSwgbV9zdGF0ZS5hbmNob3JQb2ludC56KCkpCisgICAgICAgIC5t
dWx0TGVmdChtX3N0YXRlLnRyYW5zZm9ybSkKKyAgICAgICAgLnRyYW5zbGF0ZTNkKC1vcmlnaW5Y
LCAtb3JpZ2luWSwgLW1fc3RhdGUuYW5jaG9yUG9pbnQueigpKTsKKyAgICBtX3RyYW5zZm9ybXMu
bG9jYWxEaXJ0eSA9IGZhbHNlOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpmbGF0dGVu
VG8yRFNwYWNlSWZOZWNlc3NhcnkoKQoreworICAgIGlmIChtX3N0YXRlLnByZXNlcnZlczNEKQor
ICAgICAgICByZXR1cm47CisgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE0xMygw
KTsKKyAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTIzKDApOworICAgIG1fdHJh
bnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNMzEoMCk7CisgICAgbV90cmFuc2Zvcm1zLmZvckRl
c2NlbmRhbnRzLnNldE0zMigwKTsKKyAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0
TTMzKDEpOworICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNMzQoMCk7CisgICAg
bV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE00MygwKTsKK30KKworSW50U2l6ZSBUZXh0
dXJlTWFwcGVyTm9kZTo6bmVhcmVzdFN1cmZhY2VTaXplKCkgY29uc3QKK3sKKyAgICBpZiAobV9s
YXllclR5cGUgPT0gQ2xpcExheWVyIHx8IG1fbGF5ZXJUeXBlID09IFJvb3RMYXllcikKKyAgICAg
ICAgcmV0dXJuIG1fc3VyZmFjZSAmJiAhbV9zdXJmYWNlLT5zaXplKCkuaXNFbXB0eSgpID8gbV9z
dXJmYWNlLT5zaXplKCkgOiBtX3NpemU7CisgICAgcmV0dXJuIG1fcGFyZW50LT5uZWFyZXN0U3Vy
ZmFjZVNpemUoKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVJlcGxpY2FU
cmFuc2Zvcm0oKQoreworICAgIGlmICghbV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fbmVhcmVzdFN1cmZhY2VTaXplID0gbmVhcmVzdFN1cmZhY2VTaXplKCk7
CisKKyAgICBpZiAobV9sYXllclR5cGUgIT0gVHJhbnNwYXJlbmN5TGF5ZXIpIHsKKyAgICAgICAg
bV90cmFuc2Zvcm1zLnJlcGxpY2EgPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtX3RyYW5zZm9ybXMu
dGFyZ2V0KS5tdWx0TGVmdChtX3N0YXRlLnJlcGxpY2FMYXllci0+bV90cmFuc2Zvcm1zLmxvY2Fs
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IGZsb2F0IG9yaWdpblggPSBt
X3RyYW5zZm9ybXMudGFyZ2V0Lm00MSgpOworICAgIGNvbnN0IGZsb2F0IG9yaWdpblkgPSBtX3Ry
YW5zZm9ybXMudGFyZ2V0Lm00MigpOworICAgIG1fdHJhbnNmb3Jtcy5yZXBsaWNhID0KKyAgICAg
ICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KCkKKyAgICAgICAgICAgICAgICAudHJhbnNsYXRl
KG9yaWdpblgsIG9yaWdpblkpCisgICAgICAgICAgICAgICAgLm11bHRMZWZ0KG1fc3RhdGUucmVw
bGljYUxheWVyLT5tX3RyYW5zZm9ybXMubG9jYWwpCisgICAgICAgICAgICAgICAgLnRyYW5zbGF0
ZSgtb3JpZ2luWCwgLW9yaWdpblkpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21w
dXRlVHJhbnNmb3JtYXRpb25zKCkKK3sKKyAgICBpZiAoIW1fdHJhbnNmb3Jtcy5kaXJ0eSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV90cmFuc2Zvcm1zLmRpcnR5ID0gZmFsc2U7CisgICAgaWYg
KChtX3NpemUuaXNFbXB0eSgpICYmIG1fc3RhdGUubWFza3NUb0JvdW5kcykpCisgICAgICAgIHJl
dHVybjsKKworICAgIFRleHR1cmVNYXBwZXJOb2RlKiBwYXJlbnQgPSBtX3BhcmVudDsKKyAgICBj
b21wdXRlTG9jYWxUcmFuc2Zvcm0oKTsKKworICAgIG1fdHJhbnNmb3Jtcy50YXJnZXQgPSBUcmFu
c2Zvcm1hdGlvbk1hdHJpeChwYXJlbnQgPyBwYXJlbnQtPm1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5k
YW50cyA6IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpLm11bHRMZWZ0KG1fdHJhbnNmb3Jtcy5sb2Nh
bCk7CisgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzID0gKG1fbGF5ZXJUeXBlID09IENs
aXBMYXllciA/IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkgOiBtX3RyYW5zZm9ybXMudGFyZ2V0KTsK
KworICAgIGlmIChtX2VmZmVjdFRhcmdldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90cmFu
c2Zvcm1zLnRhcmdldEJvdW5kaW5nUmVjdCA9IEludFJlY3QobV90cmFuc2Zvcm1zLnRhcmdldC5t
YXBSZWN0KGZ1bGxSZWN0KCkpKTsKKyAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAg
ICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5jb21wdXRlVHJhbnNmb3JtYXRpb25zKCk7CisKKyAg
ICBmbGF0dGVuVG8yRFNwYWNlSWZOZWNlc3NhcnkoKTsKKworICAgIGlmICghbV9zdGF0ZS5iYWNr
ZmFjZVZpc2liaWxpdHkgJiYgbV90cmFuc2Zvcm1zLnRhcmdldC5pbnZlcnNlKCkubTMzKCkgPCAw
KSB7CisgICAgICAgIG1fc3RhdGUudmlzaWJsZSA9IGZhbHNlOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIG1fc3RhdGUudmlzaWJsZSA9IHRydWU7CisKKyAgICBpZiAocGFyZW50ICYmIHBh
cmVudC0+bV9zdGF0ZS5wcmVzZXJ2ZXMzRCkKKyAgICAgICAgbV90cmFuc2Zvcm1zLmNlbnRlclog
PSBtX3RyYW5zZm9ybXMudGFyZ2V0Lm1hcFBvaW50KEZsb2F0UG9pbnQzRChtX3NpemUud2lkdGgo
KSAvIDIsIG1fc2l6ZS5oZWlnaHQoKSAvIDIsIDApKS56KCk7CisKKyAgICBpZiAoIW1fY2hpbGRy
ZW4uc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zdGF0ZS5jaGlsZHJlblRy
YW5zZm9ybS5pc0lkZW50aXR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEZsb2F0
UG9pbnQgY2VudGVyUG9pbnQgPSBGbG9hdFBvaW50KG1fc2l6ZS53aWR0aCgpIC8gMiwgbV9zaXpl
LmhlaWdodCgpIC8gMik7CisgICAgaWYgKG1fdHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZURpcnR5KQor
ICAgICAgICBtX3RyYW5zZm9ybXMucGVyc3BlY3RpdmUgPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
CisgICAgICAgICAgICAudHJhbnNsYXRlKGNlbnRlclBvaW50LngoKSwgY2VudGVyUG9pbnQueSgp
KQorICAgICAgICAgICAgLm11bHRMZWZ0KG1fc3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm0pCisgICAg
ICAgICAgICAudHJhbnNsYXRlKC1jZW50ZXJQb2ludC54KCksIC1jZW50ZXJQb2ludC55KCkpOwor
ICAgIG1fdHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZURpcnR5ID0gZmFsc2U7CisgICAgbV90cmFuc2Zv
cm1zLmZvckRlc2NlbmRhbnRzLm11bHRMZWZ0KG1fdHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZSk7Cit9
CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnVwbG9hZFRleHR1cmVGcm9tQ29udGVudChUZXh0
dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQoreworICAgIC8vIG5lZWRzIGFjdGl2ZSBjb250ZXh0
CisgICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkgfHwgIW1fbGF5ZXIpIHsKKyAgICAgICAgbV90ZXh0
dXJlLT5kZXN0cm95KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9jdXJy
ZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlKSB7CisgICAg
ICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmltYWdlKQorICAgICAgICAgICAgbV90ZXh0dXJlLT5z
ZXRDb250ZW50c1RvSW1hZ2UobV9jdXJyZW50Q29udGVudC5pbWFnZS5nZXQoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9
PSBNZWRpYUNvbnRlbnRUeXBlKSB7CisgICAgICAgIGlmICghbV9jdXJyZW50Q29udGVudC5tZWRp
YSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV90ZXh0dXJlLT5yZXNldChtX3NpemUs
IHRydWUpOworICAgICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGdjID0gbV90ZXh0dXJl
LT5iZWdpblBhaW50TWVkaWEoKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdjKHBnYyk7Cisg
ICAgICAgIG1fY3VycmVudENvbnRlbnQubWVkaWEtPnBhaW50KCZnYyk7CisgICAgICAgIG1fdGV4
dHVyZS0+ZW5kUGFpbnQoKTsKKyAgICB9CisKKyAgICBjb25zdCBib29sIG5lZWRzUmVzZXQgPSAo
bV90ZXh0dXJlLT5jb250ZW50U2l6ZSgpICE9IG1fc2l6ZSkgfHwgIW1fdGV4dHVyZS0+aXNWYWxp
ZCgpOworICAgIGlmICgobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSAhPSBIVE1MQ29udGVu
dFR5cGUpCisgICAgICAgIHx8ICghbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgJiYgbV9j
dXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0LmlzRW1wdHkoKSAmJiAhbmVlZHNSZXNldCkp
CisgICAgICAgIHJldHVybjsKKworICAgIFdURjo6U3RvcFdhdGNoIHN0b3BXYXRjaDsKKyAgICBJ
bnRSZWN0IGRpcnR5UmVjdCA9IEludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5o
ZWlnaHQoKSk7CisgICAgaWYgKCFuZWVkc1Jlc2V0ICYmICFtX2N1cnJlbnRDb250ZW50Lm5lZWRz
RGlzcGxheSkKKyAgICAgICAgZGlydHlSZWN0LmludGVyc2VjdChtX2N1cnJlbnRDb250ZW50Lm5l
ZWRzRGlzcGxheVJlY3QpOworICAgIGlmIChuZWVkc1Jlc2V0KQorICAgICAgICBtX3RleHR1cmUt
PnJlc2V0KG1fc2l6ZSwgbV9zdGF0ZS5jb250ZW50c09wYXF1ZSk7CisKKyAgICB7CisgICAgICAg
IEdyYXBoaWNzQ29udGV4dCBnYyhtX3RleHR1cmUtPmJlZ2luUGFpbnQoZGlydHlSZWN0KSk7Cisg
ICAgICAgIGlmICh0ZXh0dXJlTWFwcGVyICYmIHRleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4
dCgpKSB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqIG9yaWdpbmFsR0MgPSB0ZXh0dXJl
TWFwcGVyLT5ncmFwaGljc0NvbnRleHQoKTsKKyAgICAgICAgICAgIGdjLnNldEltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkob3JpZ2luYWxHQy0+aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsK
KyAgICAgICAgICAgIGdjLnNldFRleHREcmF3aW5nTW9kZShvcmlnaW5hbEdDLT50ZXh0RHJhd2lu
Z01vZGUoKSk7CisgICAgICAgIH0KKyAgICAgICAgbV9sYXllci0+cGFpbnRHcmFwaGljc0xheWVy
Q29udGVudHMoZ2MsIGRpcnR5UmVjdCk7CisgICAgfQorICAgIG1fdGV4dHVyZS0+ZW5kUGFpbnQo
KTsKKyAgICB7CisgICAgICAgIHN0YXRpYyBpbnQgcmVuZGVyQ291bnQgPSAwOworICAgICAgICBw
cmludGYoIltUZXh0dXJlTWFwcGVyXSBSZS1yZW5kZXIoJWQpIGxheWVyKCVwKSAlZDo6JWQ6OiVk
ICglZHglZCkgWyVkbXNdXG4iLCArK3JlbmRlckNvdW50LCB0aGlzLAorICAgICAgICAgICAgICAg
bmVlZHNSZXNldCwgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXksICFtX2N1cnJlbnRDb250
ZW50Lm5lZWRzRGlzcGxheVJlY3QuaXNFbXB0eSgpLAorICAgICAgICAgICAgICAgZGlydHlSZWN0
LndpZHRoKCksIGRpcnR5UmVjdC5oZWlnaHQoKSwgaW50KHN0b3BXYXRjaC5lbGFwc2VkKCkgKiAx
MDAwKSk7CisjaWYgMAorICAgICAgICBtX3RleHR1cmUtPnNhdmUoU3RyaW5nKCkuZm9ybWF0KCIv
dG1wL2xheWVyXyVkLnBuZyIsIHJlbmRlckNvdW50KSk7CisjZW5kaWYKKyAgICB9CisKKyAgICBt
X2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QgPSBJbnRSZWN0KCk7CisgICAgbV9jdXJy
ZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6cGFpbnRTZWxmKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGZsb2F0IG9wYWNp
dHksIEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlLCBCaXRtYXBUZXh0dXJlKiByZXBsaWNhTWFz
a1RleHR1cmUsIGJvb2wgaXNTdXJmYWNlKQoreworICAgIC8vIG5lZWRzIGFjdGl2ZSBjb250ZXh0
CisgICAgaWYgKCFtX2xheWVyIHx8IG1fc2l6ZS5pc0VtcHR5KCkgfHwgKCFtX3N0YXRlLmRyYXdz
Q29udGVudCAmJiBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlw
ZSkpCisgICAgICAgIHJldHVybjsKKyAgICB1cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQodGV4dHVy
ZU1hcHBlcik7CisgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyICYmICFpc1N1cmZhY2UpCisg
ICAgICAgIHRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCptX3RleHR1cmUuZ2V0KCksIHJlcGxp
Y2FSZWN0KCksIG1fdHJhbnNmb3Jtcy5yZXBsaWNhLAorICAgICAgICAgICAgICAgICAgICAgICAg
IG9wYWNpdHkgKiBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5vcGFjaXR5LCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICByZXBsaWNhTWFza1RleHR1cmUgPyByZXBsaWNhTWFza1RleHR1
cmUgOiBtYXNrVGV4dHVyZSk7CisKKworICAgIGNvbnN0IEludFJlY3QgcmVjdCA9IG1fbGF5ZXJU
eXBlID09IENsaXBMYXllciA/IGZ1bGxSZWN0KCkgOiB0YXJnZXRSZWN0KCk7CisgICAgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gbV9sYXllclR5cGUgPT0gQ2xpcExheWVy
ID8gVHJhbnNmb3JtYXRpb25NYXRyaXgoKSA6IG1fdHJhbnNmb3Jtcy50YXJnZXQ7CisgICAgdGV4
dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUoKm1fdGV4dHVyZS5nZXQoKSwgcmVjdCwgdHJhbnNmb3Jt
LCBvcGFjaXR5LCBpc1N1cmZhY2UgPyAwIDogbWFza1RleHR1cmUpOworfQorCit2b2lkIFRleHR1
cmVNYXBwZXJOb2RlOjpwYWludFJlY3Vyc2l2ZShUZXhtYXBQYWludE9wdGlvbnMgb3B0aW9ucykK
K3sKKyAgICAvLyBuZWVkcyBhY3RpdmUgY29udGV4dAorCisgICAgV1RGOjpTdG9wV2F0Y2ggc3Rv
cFdhdGNoOworCisgICAgYm9vbCBpc0RpcnR5ID0gbV9zdGF0ZS5kaXJ0eTsKKyAgICBtX3N0YXRl
LmRpcnR5ID0gZmFsc2U7CisKKyAgICBpZiAoKG1fc2l6ZS5pc0VtcHR5KCkgJiYgKG1fc3RhdGUu
bWFza3NUb0JvdW5kcworICAgICAgICB8fCBtX2NoaWxkcmVuLmlzRW1wdHkoKSkpIHx8ICFtX3N0
YXRlLnZpc2libGUgfHwgb3B0aW9ucy5vcGFjaXR5IDwgMC4wMSB8fCBtX3N0YXRlLm9wYWNpdHkg
PCAwLjAxKQorICAgICAgICByZXR1cm47CisKKyAgICBpbml0aWFsaXplVGV4dHVyZU1hcHBlcihv
cHRpb25zLnRleHR1cmVNYXBwZXIpOworICAgIGNvbXB1dGVSZXBsaWNhVHJhbnNmb3JtKCk7CisK
KyAgICBpZiAobV9zdGF0ZS5tYXNrTGF5ZXIpIHsKKyAgICAgICAgbV9zdGF0ZS5tYXNrTGF5ZXIt
PmluaXRpYWxpemVUZXh0dXJlTWFwcGVyKG9wdGlvbnMudGV4dHVyZU1hcHBlcik7CisgICAgICAg
IG1fc3RhdGUubWFza0xheWVyLT5tX3N0YXRlLmRpcnR5ID0gZmFsc2U7CisgICAgfQorCisgICAg
aWYgKG1fc3RhdGUucmVwbGljYUxheWVyKSB7CisgICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVy
LT5pbml0aWFsaXplVGV4dHVyZU1hcHBlcihvcHRpb25zLnRleHR1cmVNYXBwZXIpOworICAgICAg
ICBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5kaXJ0eSA9IGZhbHNlOworICAgICAgICBp
ZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUubWFza0xheWVyKSB7CisgICAgICAgICAg
ICBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5tYXNrTGF5ZXItPmluaXRpYWxpemVUZXh0
dXJlTWFwcGVyKG9wdGlvbnMudGV4dHVyZU1hcHBlcik7CisgICAgICAgICAgICBtX3N0YXRlLnJl
cGxpY2FMYXllci0+bV9zdGF0ZS5tYXNrTGF5ZXItPm1fc3RhdGUuZGlydHkgPSBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIFRleHR1cmVNYXBwZXJOb2RlKiByZXBsaWNhID0gbV9zdGF0
ZS5yZXBsaWNhTGF5ZXI7CisgICAgY29uc3QgYm9vbCBpc1N1cmZhY2UgPSAobV9sYXllclR5cGUg
PT0gQ2xpcExheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9sYXllclR5cGUg
PT0gVHJhbnNwYXJlbmN5TGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAobV9s
YXllclR5cGUgPT0gUm9vdExheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYm
IChvcHRpb25zLnRleHR1cmVNYXBwZXItPmFsbG93U3VyZmFjZUZvclJvb3QoKSB8fCBtX3N0YXRl
Lmhhc1N1cmZhY2VEZXNjZW5kYW50cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KSk7CisgICAgaWYgKGlzU3VyZmFjZSkKKyAgICAgICAgdXBsb2FkVGV4dHVyZUZyb21Db250ZW50
KG9wdGlvbnMudGV4dHVyZU1hcHBlcik7CisgICAgY29uc3QgSW50UmVjdCBib3VuZGluZ1JlY3Rm
cm9tTmVhcmVzdFN1cmZhY2UgPSBtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0OworCisK
KyAgICBvcHRpb25zLm9wYWNpdHkgKj0gbV9zdGF0ZS5vcGFjaXR5OworCisgICAgZmxvYXQgY29u
dGVudE9wYWNpdHkgPSBpc1N1cmZhY2UgPyAxIDogb3B0aW9ucy5vcGFjaXR5OworICAgIFRleG1h
cFBhaW50T3B0aW9ucyBvcHRpb25zRm9yRGVzY2VuZGFudHMob3B0aW9ucyk7CisgICAgb3B0aW9u
c0ZvckRlc2NlbmRhbnRzLm9wYWNpdHkgPSBjb250ZW50T3BhY2l0eTsKKworICAgIGlmIChtX2xh
eWVyVHlwZSA9PSBDbGlwTGF5ZXIpIHsKKyAgICAgICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLnZp
c2libGVSZWN0ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKS50cmFuc2xhdGUoLWJvdW5kaW5nUmVj
dGZyb21OZWFyZXN0U3VyZmFjZS54KCksIC1ib3VuZGluZ1JlY3Rmcm9tTmVhcmVzdFN1cmZhY2Uu
eSgpKS5tYXBSZWN0KG9wdGlvbnMudmlzaWJsZVJlY3QpOworICAgICAgICBvcHRpb25zRm9yRGVz
Y2VuZGFudHMuc2Npc3NvclJlY3QgPSBJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3Np
emUuaGVpZ2h0KCkpOworICAgIH0KKworICAgIGlmIChtX2xheWVyVHlwZSA9PSBTY2lzc29yTGF5
ZXIpIAorICAgICAgICBvcHRpb25zRm9yRGVzY2VuZGFudHMuc2Npc3NvclJlY3QuaW50ZXJzZWN0
KG1fdHJhbnNmb3Jtcy50YXJnZXRCb3VuZGluZ1JlY3QpOworICAgIG9wdGlvbnMudGV4dHVyZU1h
cHBlci0+c2V0Q2xpcChvcHRpb25zRm9yRGVzY2VuZGFudHMuc2Npc3NvclJlY3QpOworCisgICAg
VGV4dHVyZU1hcHBlckNhY2hlTG9jayhtX3RleHR1cmUuZ2V0KCkpOworICAgIFRleHR1cmVNYXBw
ZXJDYWNoZUxvY2sobV9zdXJmYWNlLmdldCgpKTsKKyAgICBUZXh0dXJlTWFwcGVyQ2FjaGVMb2Nr
KG1fcmVwbGljYVN1cmZhY2UuZ2V0KCkpOworCisgICAgZ1RleHR1cmVNYXBwZXJDYWNoZS5wdXJn
ZSgpOworCisgICAgaWYgKGlzU3VyZmFjZSkgeworICAgICAgICBBU1NFUlQobV9zdXJmYWNlKTsK
KyAgICAgICAgaWYgKCFtX3N1cmZhY2UtPmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGlzRGlydHkg
PSB0cnVlOworICAgICAgICBpZiAobV9zdGF0ZS50aWxlZCkgeworICAgICAgICAgICAgbV9zdXJm
YWNlLT5yZXNldChvcHRpb25zLnZpc2libGVSZWN0LnNpemUoKSk7CisgICAgICAgICAgICBtX3N1
cmZhY2UtPnNldE9mZnNldChvcHRpb25zLnZpc2libGVSZWN0LmxvY2F0aW9uKCkpOworICAgICAg
ICB9IGVsc2UgaWYgKGlzRGlydHkpCisgICAgICAgICAgICBtX3N1cmZhY2UtPnJlc2V0KG1fbGF5
ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVyID8gb3B0aW9ucy5zdXJmYWNlLT5zaXplKCkgOiBt
X3NpemUpOworICAgICAgICBnVGV4dHVyZU1hcHBlckNhY2hlLm1hcmsobV9zdXJmYWNlLmdldCgp
KTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShtX3N1cmZhY2Uu
Z2V0KCkpOworCisgICAgICAgIG9wdGlvbnNGb3JEZXNjZW5kYW50cy5zdXJmYWNlID0gbV9zdXJm
YWNlLmdldCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAg
ICAgICBtX3N1cmZhY2UtPmRlc3Ryb3koKTsKKyAgICAgICAgY29udGVudE9wYWNpdHkgPSBvcHRp
b25zLm9wYWNpdHk7CisgICAgfQorCisgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1hc2tUZXh0
dXJlOworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiByZXBsaWNhTWFza1RleHR1cmU7CisgICAg
aWYgKFRleHR1cmVNYXBwZXJOb2RlKiBtYXNrID0gbV9zdGF0ZS5tYXNrTGF5ZXIpIHsKKyAgICAg
ICAgbWFzay0+dXBsb2FkVGV4dHVyZUZyb21Db250ZW50KG9wdGlvbnMudGV4dHVyZU1hcHBlcik7
CisgICAgICAgIG1hc2tUZXh0dXJlID0gbWFzay0+bV90ZXh0dXJlOworICAgIH0KKworICAgIGlm
IChyZXBsaWNhICYmIHJlcGxpY2EtPm1fc3RhdGUubWFza0xheWVyKSB7CisgICAgICAgIHJlcGxp
Y2EtPm1fc3RhdGUubWFza0xheWVyLT51cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQob3B0aW9ucy50
ZXh0dXJlTWFwcGVyKTsKKyAgICAgICAgcmVwbGljYU1hc2tUZXh0dXJlID0gcmVwbGljYS0+bV9z
dGF0ZS5tYXNrTGF5ZXItPm1fdGV4dHVyZTsKKyAgICB9CisKKyAgICBpbnQgY2hpbGRyZW5TaXpl
ID0gbV9jaGlsZHJlbi5zaXplKCk7CisgICAgaWYgKGlzRGlydHkgfHwgIWlzU3VyZmFjZSB8fCBt
X3N0YXRlLnRpbGVkIHx8ICFtX3N1cmZhY2UtPmlzVmFsaWQoKSkgeworICAgICAgICBib29sIGRp
ZFBhaW50U2VsZiA9IGZhbHNlOworICAgICAgICBpZiAoIW1fc3RhdGUucHJlc2VydmVzM0QgfHwg
bV9jaGlsZHJlbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHBhaW50U2VsZihvcHRpb25zLnRl
eHR1cmVNYXBwZXIsIGNvbnRlbnRPcGFjaXR5LCBtYXNrVGV4dHVyZS5nZXQoKSwgcmVwbGljYU1h
c2tUZXh0dXJlLmdldCgpLCBpc1N1cmZhY2UpOworICAgICAgICAgICAgZGlkUGFpbnRTZWxmID0g
dHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2NoaWxkcmVuLmlzRW1wdHkoKSAmJiAh
aXNTdXJmYWNlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChtX2xheWVyVHlw
ZSA9PSBTY2lzc29yTGF5ZXIpCisgICAgICAgICAgICBvcHRpb25zRm9yRGVzY2VuZGFudHMuc2Np
c3NvclJlY3QuaW50ZXJzZWN0KG1fdHJhbnNmb3Jtcy50YXJnZXQubWFwUmVjdChJbnRSZWN0KDAs
IDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKSk7CisKKyAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjaGlsZHJlblNpemU7ICsraSkgeworICAgICAgICAgICAgVGV4dHVyZU1h
cHBlck5vZGUqIGxheWVyID0gbV9jaGlsZHJlbltpXTsKKyAgICAgICAgICAgIGlmICghbGF5ZXIp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmICghZGlkUGFpbnRT
ZWxmICYmIGxheWVyLT5tX3RyYW5zZm9ybXMuY2VudGVyWiA+PSAwKSB7CisgICAgICAgICAgICAg
ICAgcGFpbnRTZWxmKG9wdGlvbnMudGV4dHVyZU1hcHBlciwgY29udGVudE9wYWNpdHksIG1hc2tU
ZXh0dXJlLmdldCgpLCByZXBsaWNhTWFza1RleHR1cmUuZ2V0KCksIGlzU3VyZmFjZSk7CisgICAg
ICAgICAgICAgICAgZGlkUGFpbnRTZWxmID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGxheWVyLT5wYWludFJlY3Vyc2l2ZShvcHRpb25zRm9yRGVzY2VuZGFudHMpOworICAgICAg
ICAgICAgaWYgKGlzU3VyZmFjZSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChtX3N1cmZhY2Up
OworICAgICAgICAgICAgICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUubWFyayhtX3N1cmZhY2UuZ2V0
KCkpOworICAgICAgICAgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2Uo
bV9zdXJmYWNlLmdldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAo
IWRpZFBhaW50U2VsZikgeworICAgICAgICAgICAgcGFpbnRTZWxmKG9wdGlvbnMudGV4dHVyZU1h
cHBlciwgY29udGVudE9wYWNpdHksIG1hc2tUZXh0dXJlLmdldCgpLCByZXBsaWNhTWFza1RleHR1
cmUuZ2V0KCksIGlzU3VyZmFjZSk7CisgICAgICAgICAgICBkaWRQYWludFNlbGYgPSB0cnVlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fbGF5ZXJUeXBlID09IFJvb3RMYXllciB8fCBt
X2xheWVyVHlwZSA9PSBEZWZhdWx0TGF5ZXIgfHwgbV9sYXllclR5cGUgPT0gU2Npc3NvckxheWVy
KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9zdXJmYWNlKTsKKyAgICBCaXRtYXBU
ZXh0dXJlJiB0ZXh0dXJlID0gKm1fc3VyZmFjZS5nZXQoKTsKKyAgICBpZiAocmVwbGljYSkgewor
ICAgICAgICBBU1NFUlQobV9yZXBsaWNhU3VyZmFjZSk7CisgICAgICAgIG1fcmVwbGljYVN1cmZh
Y2UtPnJlc2V0KG9wdGlvbnMuc3VyZmFjZS0+c2l6ZSgpKTsKKyAgICAgICAgbV9yZXBsaWNhU3Vy
ZmFjZS0+c2V0T2Zmc2V0KG9wdGlvbnMuc3VyZmFjZS0+b2Zmc2V0KCkpOworICAgICAgICBnVGV4
dHVyZU1hcHBlckNhY2hlLm1hcmsobV9yZXBsaWNhU3VyZmFjZS5nZXQoKSk7CisgICAgICAgIG9w
dGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UobV9yZXBsaWNhU3VyZmFjZS5nZXQoKSk7
CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUodGV4dHVyZSwgcmVw
bGljYVJlY3QoKSwgbV90cmFuc2Zvcm1zLnJlcGxpY2EsIHJlcGxpY2EtPm1fc3RhdGUub3BhY2l0
eSwgcmVwbGljYU1hc2tUZXh0dXJlID8gcmVwbGljYU1hc2tUZXh0dXJlLmdldCgpIDogbWFza1Rl
eHR1cmUuZ2V0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJl
KHRleHR1cmUsIEludFJlY3QoSW50UG9pbnQoMCwgMCksIG9wdGlvbnMuc3VyZmFjZS0+c2l6ZSgp
KSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgMS4wZiwgbWFza1RleHR1cmUuZ2V0KCkpOworICAg
ICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKG9wdGlvbnMuc3VyZmFjZSk7
CisgICAgICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUubWFyayhvcHRpb25zLnN1cmZhY2UpOworICAg
ICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCptX3JlcGxpY2FTdXJmYWNl
LmdldCgpLCBJbnRSZWN0KEludFBvaW50KDAsIDApLCBvcHRpb25zLnN1cmZhY2UtPnNpemUoKSks
IFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIG9wdGlvbnMub3BhY2l0eSwgMCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKG9w
dGlvbnMuc3VyZmFjZSk7CisgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSh0
ZXh0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xheWVyVHlwZSA9PSBUcmFu
c3BhcmVuY3lMYXllciA/IEludFJlY3QoSW50UG9pbnQoMCwgMCksIG9wdGlvbnMuc3VyZmFjZS0+
c2l6ZSgpKSA6IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0KCksIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xheWVyVHlwZSA9PSBUcmFuc3BhcmVuY3lM
YXllciA/IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkgOiBtX3RyYW5zZm9ybXMudGFyZ2V0LCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vcGFjaXR5LCBtYXNrVGV4dHVyZS5n
ZXQoKSk7CisgICAgZ1RleHR1cmVNYXBwZXJDYWNoZS5tYXJrKCZ0ZXh0dXJlKTsKK30KKwordm9p
ZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y2xlYW51cFRleHR1cmVNYXBwZXIoKQoreworICAgIGlmICht
X3RleHR1cmUpCisgICAgICAgIG1fdGV4dHVyZS0+ZGVzdHJveSgpOworICAgIGlmIChtX3N1cmZh
Y2UpCisgICAgICAgIG1fc3VyZmFjZS0+ZGVzdHJveSgpOworICAgIGlmIChtX3JlcGxpY2FTdXJm
YWNlKQorICAgICAgICBtX3JlcGxpY2FTdXJmYWNlLT5kZXN0cm95KCk7CisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2NoaWxk
cmVuW2ldKQorICAgICAgICAgICAgbV9jaGlsZHJlbltpXS0+Y2xlYW51cFRleHR1cmVNYXBwZXIo
KTsKKyAgICB9CisgICAgaWYgKG1fbGFzdFRleHR1cmVNYXBwZXIpCisgICAgICAgIG1fbGFzdFRl
eHR1cmVNYXBwZXItPmNsZWFudXAoKTsKK30KKworVGV4dHVyZU1hcHBlck5vZGU6On5UZXh0dXJl
TWFwcGVyTm9kZSgpCit7CisgICAgLy8gbmVlZHMgYWN0aXZlIGNvbnRleHQKKyAgICAvLyBzeW5j
Q29tcG9zaXRpbmdTdGF0ZSh0cnVlKTsKKyAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICB7Cisg
ICAgICAgIGNvbnN0IGludCBjaGlsZHJlblNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKKyAgICAg
ICAgZm9yIChpbnQgaSA9IGNoaWxkcmVuU2l6ZS0xOyBpID49IDA7IC0taSkgeworICAgICAgICAg
ICAgQVNTRVJUKG1fY2hpbGRyZW5baV0tPm1fcGFyZW50ID09IHRoaXMpOworICAgICAgICAgICAg
bV9jaGlsZHJlbltpXS0+bV9wYXJlbnQgPSAwOworICAgICAgICB9CisgICAgfQorICAgIGlmICht
X3BhcmVudCkKKyAgICAgICAgbV9wYXJlbnQtPm1fY2hpbGRyZW4ucmVtb3ZlKG1fcGFyZW50LT5t
X2NoaWxkcmVuLmZpbmQodGhpcykpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpub3Rp
ZnlDaGFuZ2UoQ2hhbmdlTWFzayBjaGFuZ2VNYXNrKQoreworICAgIG1fY2hhbmdlTWFzayB8PSBj
aGFuZ2VNYXNrOworICAgIGlmICghbV9sYXllci0+Y2xpZW50KCkpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2xheWVyLT5jbGllbnQoKS0+bm90aWZ5U3luY1JlcXVpcmVkKG1fbGF5ZXIpOworfQor
Cit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwZXJmb3JtUG9zdFN5bmNPcGVyYXRpb25zKCkKK3sK
KyAgICBjb25zdCBMYXllclR5cGUgcHJldkxheWVyVHlwZSA9IG1fbGF5ZXJUeXBlOworICAgIGNv
bXB1dGVMYXllclR5cGUoKTsKKyAgICBpZiAocHJldkxheWVyVHlwZSAhPSBtX2xheWVyVHlwZSkK
KyAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IHRydWU7CisgICAgaWYgKG1fdHJhbnNmb3Jtcy5kaXJ0
eSkgCisgICAgICAgIHNldE5lZWRzRGlzcGxheSgpOworCisgICAgY29tcHV0ZVRyYW5zZm9ybWF0
aW9ucygpOworICAgIGlmIChtX3N0YXRlLm1hc2tMYXllciAmJiAhbV9zdGF0ZS5kaXJ0eSkKKyAg
ICAgICAgbV9zdGF0ZS5kaXJ0eSA9IG1fc3RhdGUubWFza0xheWVyLT5tX3N0YXRlLmRpcnR5Owor
ICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllciAmJiAhbV9zdGF0ZS5kaXJ0eSkKKyAgICAgICAg
bV9zdGF0ZS5kaXJ0eSA9IG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRlLmRpcnR5OworCisg
ICAgY29uc3QgaW50IHNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKKworICAgIGZvciAoaW50IGkg
PSBzaXplIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgVGV4dHVyZU1hcHBlck5vZGUqIGxh
eWVyID0gbV9jaGlsZHJlbltpXTsKKworICAgICAgICBsYXllci0+cGVyZm9ybVBvc3RTeW5jT3Bl
cmF0aW9ucygpOworICAgICAgICBpZiAoIW1fc3RhdGUuZGlydHkpCisgICAgICAgICAgICBtX3N0
YXRlLmRpcnR5ID0gbGF5ZXItPm1fc3RhdGUuZGlydHk7CisgICAgfQorICAgIG1fc3RhdGUuaGFz
U3VyZmFjZURlc2NlbmRhbnRzID0gaGFzU3VyZmFjZURlc2NlbmRhbnRzKCk7CisgICAgaWYgKG1f
c3RhdGUuZGlydHkpCisgICAgICAgIG1fc3RhdGUuZGVzY2VuZGFudHNXaXRoQ29udGVudCA9IGNv
dW50RGVzY2VuZGFudHNXaXRoQ29udGVudCgpOworCisgICAgaWYgKG1fc3RhdGUucHJlc2VydmVz
M0QpCisgICAgICAgIHNvcnRCeVpPcmRlcihtX2NoaWxkcmVuLCAwLCBzaXplKTsKKyAgICBpZiAo
bV9zdGF0ZS5kaXJ0eSkgCisgICAgICAgIHNldE5lZWRzRGlzcGxheSgpOworfQorCit2b2lkIFRl
eHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShib29sIHJlY3Vyc2UpCit7Cisg
ICAgYm9vbCBuZWVkc1RvSW52YWxpZGF0ZVRyYW5zZm9ybSA9IGZhbHNlOworCisgICAgaWYgKCFt
X2xheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jaGFuZ2VNYXNrID09IE5vQ2hh
bmdlcykKKyAgICAgICAgZ290byBhZnRlckN1cnJlbnRMYXllclN5bmM7CisKKyAgICBzZXROZWVk
c0Rpc3BsYXkoKTsKKyAgICBpZiAobV9wYXJlbnQpCisgICAgICAgIG1fcGFyZW50LT5tX3N0YXRl
LmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09
IEhUTUxDb250ZW50VHlwZSAmJiAobV9jaGFuZ2VNYXNrICYgUGFyZW50Q2hhbmdlKSkgeworICAg
ICAgICAvLyBUaGUgV2ViQ29yZSBjb21wb3NpdG9yIG1hbmFnZXMgaXRlbSBvd25lcnNoaXAuIFdl
IGhhdmUgdG8gbWFrZSBzdXJlIGdyYXBoaWNzdmlldyBkb2Vzbid0CisgICAgICAgIC8vIHRyeSB0
byBzbmF0Y2ggdGhhdCBvd25lcnNoaXAuCisKKyAgICAgICAgaWYgKCFtX2xheWVyLT5wYXJlbnQo
KSkKKyAgICAgICAgICAgIG1fcGFyZW50ID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bV9wYXJlbnQgPSB0b1RleHR1cmVNYXBwZXJOb2RlKG1fbGF5ZXItPnBhcmVudCgpKTsKKworICAg
ICAgICBpZiAoIW1fbGF5ZXItPnBhcmVudCgpICYmIG1fcGFyZW50KSB7CisgICAgICAgICAgICBz
aXplX3QgaW5kZXggPSBtX3BhcmVudC0+bV9jaGlsZHJlbi5maW5kKHRoaXMpOworICAgICAgICAg
ICAgbV9wYXJlbnQtPm1fY2hpbGRyZW4ucmVtb3ZlKGluZGV4KTsKKyAgICAgICAgfQorCisgICAg
fQorCisgICAgaWYgKG1fY2hhbmdlTWFzayAmIENoaWxkcmVuQ2hhbmdlKSB7CisgICAgICAgIG1f
Y2hpbGRyZW4uY2xlYXIoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xheWVy
LT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoVGV4dHVyZU1hcHBl
ck5vZGUqIGNoaWxkID0gdG9UZXh0dXJlTWFwcGVyTm9kZShtX2xheWVyLT5jaGlsZHJlbigpW2ld
KSkgeworICAgICAgICAgICAgICAgIGlmICghY2hpbGQpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKKyAgICAg
ICAgICAgICAgICBjaGlsZC0+bV9wYXJlbnQgPSB0aGlzOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIG1fc3RhdGUuZGlydHkgPSB0cnVlOworICAgIH0KKworICAgIGlmIChtX2No
YW5nZU1hc2sgJiAoU2l6ZUNoYW5nZSB8IENvbnRlbnRzUmVjdENoYW5nZSkpIHsKKyAgICAgICAg
SW50U2l6ZSB3YW50ZWRTaXplID0gSW50U2l6ZShtX2xheWVyLT5zaXplKCkud2lkdGgoKSwgbV9s
YXllci0+c2l6ZSgpLmhlaWdodCgpKTsKKyAgICAgICAgaWYgKHdhbnRlZFNpemUuaXNFbXB0eSgp
ICYmIG1fcGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlKQorICAg
ICAgICAgICAgd2FudGVkU2l6ZSA9IEludFNpemUobV9sYXllci0+Y29udGVudHNSZWN0KCkud2lk
dGgoKSwgbV9sYXllci0+Y29udGVudHNSZWN0KCkuaGVpZ2h0KCkpOworCisgICAgICAgIGlmICh3
YW50ZWRTaXplICE9IG1fc2l6ZSkgeworICAgICAgICAgICAgbV9zaXplID0gSW50U2l6ZSh3YW50
ZWRTaXplLndpZHRoKCksIHdhbnRlZFNpemUuaGVpZ2h0KCkpOworICAgICAgICAgICAgaWYgKG1f
cGxhdGZvcm1DbGllbnQpCisgICAgICAgICAgICAgICAgbV9wbGF0Zm9ybUNsaWVudC0+c2V0U2l6
ZUNoYW5nZWQobV9zaXplKTsKKyAgICAgICAgICAgIGNvbnN0IGJvb2wgbmVlZHNUaWxpbmcgPSBt
X3NpemUud2lkdGgoKSA+IDIwMDAgfHwgbV9zaXplLmhlaWdodCgpID4gMjAwMDsKKyAgICAgICAg
ICAgIGlmIChtX3N0YXRlLnRpbGVkICE9IG5lZWRzVGlsaW5nKQorICAgICAgICAgICAgICAgIG1f
c3RhdGUudGlsZWQgPSBuZWVkc1RpbGluZzsKKyAgICAgICAgICAgIG1fc3RhdGUuZGlydHkgPSB0
cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fY2hhbmdlTWFzayAmIE1hc2tMYXll
ckNoYW5nZSkKKyAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIGxheWVyID0gdG9UZXh0dXJl
TWFwcGVyTm9kZShtX2xheWVyLT5tYXNrTGF5ZXIoKSkpCisgICAgICAgICAgIGxheWVyLT5tX2Vm
ZmVjdFRhcmdldCA9IHRoaXM7CisKKyAgICBpZiAobV9jaGFuZ2VNYXNrICYgUmVwbGljYUxheWVy
Q2hhbmdlKQorICAgICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSogbGF5ZXIgPSB0b1RleHR1cmVN
YXBwZXJOb2RlKG1fbGF5ZXItPnJlcGxpY2FMYXllcigpKSkKKyAgICAgICAgICAgbGF5ZXItPm1f
ZWZmZWN0VGFyZ2V0ID0gdGhpczsKKworICAgIGlmIChtX2NoYW5nZU1hc2sgJiAoVHJhbnNmb3Jt
Q2hhbmdlIHwgU2l6ZUNoYW5nZSB8IEFuY2hvclBvaW50Q2hhbmdlIHwgUG9zaXRpb25DaGFuZ2Up
KQorICAgICAgICBtX3RyYW5zZm9ybXMubG9jYWxEaXJ0eSA9IHRydWU7CisKKyAgICBpZiAobV9j
aGFuZ2VNYXNrICYgKENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlIHwgU2l6ZUNoYW5nZSkpCisgICAg
ICAgIG1fdHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZURpcnR5ID0gdHJ1ZTsKKworICAgIGlmIChtX2No
YW5nZU1hc2sgJiAoQ2hpbGRyZW5UcmFuc2Zvcm1DaGFuZ2UgfCBQcmVzZXJ2ZXMzRENoYW5nZSB8
IFRyYW5zZm9ybUNoYW5nZSB8IEFuY2hvclBvaW50Q2hhbmdlIHwgU2l6ZUNoYW5nZSB8IENvbnRl
bnRzUmVjdENoYW5nZSB8IEJhY2tmYWNlVmlzaWJpbGl0eUNoYW5nZSB8IFBvc2l0aW9uQ2hhbmdl
IHwgTWFza0xheWVyQ2hhbmdlIHwgRHJhd3NDb250ZW50Q2hhbmdlIHwgQ29udGVudENoYW5nZSB8
IFJlcGxpY2FMYXllckNoYW5nZSkpICAgIHsKKyAgICAgICAgLy8gRHVlIHRvIHRoZSBkaWZmZXJl
bmNlcyBiZXR3ZWVuIHRoZSB3YXkgV2ViQ29yZSBoYW5kbGVzIHRyYW5zZm9ybXMgYW5kIHRoZSB3
YXkgUXQgaGFuZGxlcyB0cmFuc2Zvcm1zLAorICAgICAgICAvLyBhbGwgdGhlc2UgZWxlbWVudHMg
YWZmZWN0IHRoZSB0cmFuc2Zvcm1zIG9mIGFsbCB0aGUgZGVzY2VuZGFudHMuCisgICAgICAgIG5l
ZWRzVG9JbnZhbGlkYXRlVHJhbnNmb3JtID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9jaGFu
Z2VNYXNrICYgRGlzcGxheUNoYW5nZSkgCisgICAgICAgIG1fc3RhdGUuZGlydHkgPSB0cnVlOwor
CisgICAgbV9zdGF0ZS5tYXNrTGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJOb2RlKG1fbGF5ZXItPm1h
c2tMYXllcigpKTsKKyAgICBtX3N0YXRlLnJlcGxpY2FMYXllciA9IHRvVGV4dHVyZU1hcHBlck5v
ZGUobV9sYXllci0+cmVwbGljYUxheWVyKCkpOworICAgIG1fc3RhdGUucG9zID0gbV9sYXllci0+
cG9zaXRpb24oKTsKKyAgICBtX3N0YXRlLmFuY2hvclBvaW50ID0gbV9sYXllci0+YW5jaG9yUG9p
bnQoKTsKKyAgICBtX3N0YXRlLnNpemUgPSBtX2xheWVyLT5zaXplKCk7CisgICAgbV9zdGF0ZS50
cmFuc2Zvcm0gPSBtX2xheWVyLT50cmFuc2Zvcm0oKTsKKyAgICBtX3N0YXRlLmNvbnRlbnRzUmVj
dCA9IG1fbGF5ZXItPmNvbnRlbnRzUmVjdCgpOworICAgIG1fc3RhdGUub3BhY2l0eSA9IG1fbGF5
ZXItPm9wYWNpdHkoKTsKKyAgICBtX3N0YXRlLmNvbnRlbnRzUmVjdCA9IG1fbGF5ZXItPmNvbnRl
bnRzUmVjdCgpOworICAgIG1fc3RhdGUucHJlc2VydmVzM0QgPSBtX2xheWVyLT5wcmVzZXJ2ZXMz
RCgpOworICAgIG1fc3RhdGUubWFza3NUb0JvdW5kcyA9IG1fbGF5ZXItPm1hc2tzVG9Cb3VuZHMo
KTsKKyAgICBtX3N0YXRlLmRyYXdzQ29udGVudCA9IG1fbGF5ZXItPmRyYXdzQ29udGVudCgpOwor
ICAgIG1fc3RhdGUuY29udGVudHNPcGFxdWUgPSBtX2xheWVyLT5jb250ZW50c09wYXF1ZSgpOwor
ICAgIG1fc3RhdGUuYmFja2ZhY2VWaXNpYmlsaXR5ID0gbV9sYXllci0+YmFja2ZhY2VWaXNpYmls
aXR5KCk7CisgICAgbV9zdGF0ZS5jaGlsZHJlblRyYW5zZm9ybSA9IG1fbGF5ZXItPmNoaWxkcmVu
VHJhbnNmb3JtKCk7CisgICAgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9IG1fcGVuZGlu
Z0NvbnRlbnQuY29udGVudFR5cGU7CisgICAgbV9jdXJyZW50Q29udGVudC5pbWFnZSA9IG1fcGVu
ZGluZ0NvbnRlbnQuaW1hZ2U7CisgICAgbV9jdXJyZW50Q29udGVudC5tZWRpYSA9IG1fcGVuZGlu
Z0NvbnRlbnQubWVkaWE7CisgICAgbV9jdXJyZW50Q29udGVudC5iYWNrZ3JvdW5kQ29sb3IgPSBt
X3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xvcjsKKyAgICBtX2N1cnJlbnRDb250ZW50Lm5l
ZWRzRGlzcGxheSA9IG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5IHx8IG1fcGVuZGluZ0Nv
bnRlbnQubmVlZHNEaXNwbGF5OworICAgIG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVj
dC51bml0ZShtX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QpOworICAgIG1fcGVuZGlu
Z0NvbnRlbnQubmVlZHNEaXNwbGF5ID0gZmFsc2U7CisgICAgbV9wZW5kaW5nQ29udGVudC5uZWVk
c0Rpc3BsYXlSZWN0ID0gSW50UmVjdCgpOworICAgIG1fY2hhbmdlTWFzayA9IE5vQ2hhbmdlczsK
KyAgICBhZnRlckN1cnJlbnRMYXllclN5bmM6CisgICAgaWYgKG5lZWRzVG9JbnZhbGlkYXRlVHJh
bnNmb3JtKQorICAgICAgICBpbnZhbGlkYXRlVHJhbnNmb3JtKCk7CisKKyAgICBpZiAobV9zdGF0
ZS5tYXNrTGF5ZXIpIHsKKyAgICAgICAgbV9zdGF0ZS5tYXNrTGF5ZXItPnN5bmNDb21wb3NpdGlu
Z1N0YXRlKGZhbHNlKTsKKyAgICAgICAgaWYgKG1fc3RhdGUubWFza0xheWVyLT5tX3NpemUuaXNF
bXB0eSgpKQorICAgICAgICAgICAgbV9zdGF0ZS5tYXNrTGF5ZXItPm1fc2l6ZSA9IG1fc2l6ZTsK
KyAgICB9CisKKyAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIG1fc3RhdGUu
cmVwbGljYUxheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShmYWxzZSk7CisKKyNpZiAwCisgICAg
aWYgKG1fc3RhdGUuZGlydHkgJiYgbV90ZXh0dXJlICYmIG1fdGV4dHVyZS0+YWxsb3dPZmZsaW5l
VGV4dHVyZVVwbG9hZCgpKQorICAgICAgICB1cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQoMCk7Cisj
ZW5kaWYKKworICAgIGlmICghcmVjdXJzZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3Qg
aW50IGNoaWxkcmVuU2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOworICAgIGZvciAoaW50IGkgPSBj
aGlsZHJlblNpemUtMTsgaSA+PSAwOyAtLWkpCisgICAgICAgIG1fY2hpbGRyZW5baV0tPnN5bmND
b21wb3NpdGluZ1N0YXRlKHRydWUpOworfQorCitHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQor
ICAgIDogR3JhcGhpY3NMYXllcihjbGllbnQpCisgICAgLCBtX25vZGUobmV3IFRleHR1cmVNYXBw
ZXJOb2RlKHRoaXMpKQoreworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpz
ZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBtX25vZGUtPm1fbmFtZSA9IG5hbWU7
Cit9CisKK0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjp+R3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIoKQoreworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCk6IFRoZSBjdXJyZW50
IHNpemUgbWlnaHQgY2hhbmdlLCB0aHVzIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSB3aG9sZSBkaXNw
bGF5LgorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxh
eSgpCit7CisgICAgbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheSA9IHRydWU7
CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkRpc3BsYXlDaGFu
Z2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQoreworICAgIGlmIChtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5
KQorICAgICAgICByZXR1cm47CisgICAgbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlz
cGxheVJlY3QudW5pdGUoSW50UmVjdChyZWN0KSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2Uo
VGV4dHVyZU1hcHBlck5vZGU6OkRpc3BsYXlDaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBo
aWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRQYXJl
bnQoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4
dHVyZU1hcHBlck5vZGU6OlBhcmVudENoYW5nZSk7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0UGFy
ZW50KGxheWVyKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLworYm9vbCBH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBo
aWNzTGF5ZXIqPiYgY2hpbGRyZW4pCit7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVy
ZU1hcHBlck5vZGU6OkNoaWxkcmVuQ2hhbmdlKTsKKyAgICByZXR1cm4gR3JhcGhpY3NMYXllcjo6
c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkK
KyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRDaGlsZChHcmFwaGljc0xh
eWVyKiBsYXllcikKK3sKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9k
ZTo6Q2hpbGRyZW5DaGFuZ2UpOworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkKGxheWVyKTsK
K30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBpbnQg
aW5kZXgpCit7CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KGxheWVyLCBpbmRl
eCk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNoaWxkcmVu
Q2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiBsYXll
ciwgR3JhcGhpY3NMYXllciogc2libGluZykKK3sKKyAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hp
bGRBYm92ZShsYXllciwgc2libGluZyk7CisgICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1
cmVNYXBwZXJOb2RlOjpDaGlsZHJlbkNoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NM
YXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkQmVs
b3coR3JhcGhpY3NMYXllciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpCit7CisKKyAg
ICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KGxheWVyLCBzaWJsaW5nKTsKKyAgICBtX25v
ZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOworfQor
CisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCitib29sIEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyOjpyZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIEdyYXBoaWNz
TGF5ZXIqIG5ld0NoaWxkKQoreworICAgIGlmIChHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQo
b2xkQ2hpbGQsIG5ld0NoaWxkKSkgeworICAgICAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0
dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5o
KQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnJlbW92ZUZyb21QYXJlbnQo
KQoreworICAgIGlmICghcGFyZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX25vZGUtPm5v
dGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6UGFyZW50Q2hhbmdlKTsKKyAgICBHcmFwaGlj
c0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXll
ci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE1hc2tMYXllcihH
cmFwaGljc0xheWVyKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gbWFza0xheWVyKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRNYXNrTGF5ZXIodmFsdWUpOwor
ICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpNYXNrTGF5ZXJDaGFu
Z2UpOworfQorCisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OnNldFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIq
IHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSByZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFJlcGxpY2F0ZWRCeUxheWVyKHZhbHVlKTsKKyAg
ICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6UmVwbGljYUxheWVyQ2hh
bmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgdmFsdWUp
Cit7CisgICAgaWYgKHZhbHVlID09IHBvc2l0aW9uKCkpCisgICAgICAgIHJldHVybjsKKyAgICBH
cmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbih2YWx1ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFu
Z2UoVGV4dHVyZU1hcHBlck5vZGU6OlBvc2l0aW9uQ2hhbmdlKTsKK30KKworLyogXHJlaW1wIChH
cmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0
QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUg
PT0gYW5jaG9yUG9pbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dEFuY2hvclBvaW50KHZhbHVlKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFw
cGVyTm9kZTo6QW5jaG9yUG9pbnRDaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5
ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRTaXplKGNvbnN0
IEZsb2F0U2l6ZSYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IHNpemUoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0U2l6ZSh2YWx1ZSk7CisgICAgbV9ub2Rl
LT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlNpemVDaGFuZ2UpOworfQorCisvKiBc
cmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHZhbHVlKQorewor
ICAgIGlmICh2YWx1ZSA9PSB0cmFuc2Zvcm0oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3Jh
cGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKHZhbHVlKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5n
ZShUZXh0dXJlTWFwcGVyTm9kZTo6VHJhbnNmb3JtQ2hhbmdlKTsKK30KKworLyogXHJlaW1wIChH
cmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0
Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHZhbHVlKQorewor
ICAgIGlmICh2YWx1ZSA9PSBjaGlsZHJlblRyYW5zZm9ybSgpKQorICAgICAgICByZXR1cm47Cisg
ICAgR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0odmFsdWUpOworICAgIG1fbm9k
ZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDaGlsZHJlblRyYW5zZm9ybUNoYW5n
ZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXI6OnNldFByZXNlcnZlczNEKGJvb2wgdmFsdWUpCit7CisgICAgaWYg
KHZhbHVlID09IHByZXNlcnZlczNEKCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xh
eWVyOjpzZXRQcmVzZXJ2ZXMzRCh2YWx1ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4
dHVyZU1hcHBlck5vZGU6OlByZXNlcnZlczNEQ2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFw
aGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TWFz
a3NUb0JvdW5kcyhib29sIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBtYXNrc1RvQm91bmRz
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRz
KHZhbHVlKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6TWFz
a3NUb0JvdW5kc0NoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8K
K3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldERyYXdzQ29udGVudChib29sIHZh
bHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBkcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpEcmF3c0NvbnRl
bnRDaGFuZ2UpOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29udGVudCh2YWx1ZSk7Cit9
CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXI6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgdmFsdWUpCit7Cisg
ICAgaWYgKHZhbHVlID09IG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5kQ29sb3Ip
CisgICAgICAgIHJldHVybjsKKyAgICBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQuYmFja2dyb3Vu
ZENvbG9yID0gdmFsdWU7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0QmFja2dyb3VuZENvbG9yKHZh
bHVlKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6QmFja2dy
b3VuZENvbG9yQ2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwor
dm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6Y2xlYXJCYWNrZ3JvdW5kQ29sb3IoKQor
eworICAgIGlmICghbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xvci5pc1Zh
bGlkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQuYmFj
a2dyb3VuZENvbG9yID0gQ29sb3IoKTsKKyAgICBHcmFwaGljc0xheWVyOjpjbGVhckJhY2tncm91
bmRDb2xvcigpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpC
YWNrZ3JvdW5kQ29sb3JDaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkK
KyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c09wYXF1ZShi
b29sIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBjb250ZW50c09wYXF1ZSgpKQorICAgICAg
ICByZXR1cm47CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNv
bnRlbnRzT3BhcXVlQ2hhbmdlKTsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09wYXF1
ZSh2YWx1ZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sIHZhbHVl
KQoreworICAgIGlmICh2YWx1ZSA9PSBiYWNrZmFjZVZpc2liaWxpdHkoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eSh2YWx1ZSk7Cisg
ICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkJhY2tmYWNlVmlzaWJp
bGl0eUNoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQg
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE9wYWNpdHkoZmxvYXQgdmFsdWUpCit7Cisg
ICAgaWYgKHZhbHVlID09IG9wYWNpdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNz
TGF5ZXI6OnNldE9wYWNpdHkodmFsdWUpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1
cmVNYXBwZXJOb2RlOjpPcGFjaXR5Q2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xh
eWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNS
ZWN0KGNvbnN0IEludFJlY3QmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBjb250ZW50c1Jl
Y3QoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzUmVj
dCh2YWx1ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNv
bnRlbnRzUmVjdENoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8K
K3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9JbWFnZShJbWFn
ZSogaW1hZ2UpCit7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6
OkNvbnRlbnRDaGFuZ2UpOworICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlw
ZSA9IGltYWdlID8gVGV4dHVyZU1hcHBlck5vZGU6OkRpcmVjdEltYWdlQ29udGVudFR5cGUgOiBU
ZXh0dXJlTWFwcGVyTm9kZTo6SFRNTENvbnRlbnRUeXBlOworICAgIG1fbm9kZS0+bV9wZW5kaW5n
Q29udGVudC5pbWFnZSA9IGltYWdlOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9J
bWFnZShpbWFnZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQg
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzQmFja2dyb3VuZENvbG9yKGNv
bnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFw
cGVyTm9kZTo6Q29udGVudENoYW5nZSk7CisgICAgbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50LmNv
bnRlbnRUeXBlID0gVGV4dHVyZU1hcHBlck5vZGU6OkNvbG9yQ29udGVudFR5cGU7CisgICAgbV9u
b2RlLT5tX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xvciA9IGNvbG9yOworICAgIEdyYXBo
aWNzTGF5ZXI6OnNldENvbnRlbnRzQmFja2dyb3VuZENvbG9yKGNvbG9yKTsKK30KKworCit2b2lk
IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1M
YXllciogbWVkaWEpCit7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb01lZGlhKG1l
ZGlhKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVu
dENoYW5nZSk7CisgICAgbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlID0gbWVk
aWEgPyBUZXh0dXJlTWFwcGVyTm9kZTo6TWVkaWFDb250ZW50VHlwZSA6IFRleHR1cmVNYXBwZXJO
b2RlOjpIVE1MQ29udGVudFR5cGU7CisgICAgaWYgKG1lZGlhKQorICAgICAgICBtX25vZGUtPm1f
cGVuZGluZ0NvbnRlbnQubWVkaWEgPSBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyVmlkZW9MYXll
cio+KG1lZGlhKTsKKyAgICBlbHNlCisgICAgICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5t
ZWRpYSA9IDA7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzT3JpZW50YXRpb24oQ29tcG9zaXRp
bmdDb29yZGluYXRlc09yaWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIGlmIChjb250ZW50
c09yaWVudGF0aW9uKCkgPT0gb3JpZW50YXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICBtX25v
ZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudHNPcmllbnRhdGlvbkNo
YW5nZSk7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcmllbnRhdGlvbihvcmllbnRh
dGlvbik7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25s
eSgpCit7CisgICAgbV9ub2RlLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShmYWxzZSk7CisgICAgbV9u
b2RlLT5wZXJmb3JtUG9zdFN5bmNPcGVyYXRpb25zKCk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhp
Y3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnN5bmNDb21w
b3NpdGluZ1N0YXRlKCkKK3sKKyAgICBHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0
ZSgpOworICAgIG1fbm9kZS0+c3luY0NvbXBvc2l0aW5nU3RhdGUodHJ1ZSk7CisgICAgbV9ub2Rl
LT5wZXJmb3JtUG9zdFN5bmNPcGVyYXRpb25zKCk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NM
YXllci5oKQorICovCitOYXRpdmVMYXllciBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6bmF0
aXZlTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX25vZGUuZ2V0KCk7Cit9CisKKy8qIFxy
ZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK1BsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ub2Rl
LmdldCgpOworfQorCitQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IEdyYXBoaWNzTGF5ZXI6OmNy
ZWF0ZShHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJuIG5ldyBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcihjbGllbnQpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTE1OGYzCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIuaApAQCAtMCwwICsxLDk2IEBACisvKgorICAgIENvcHlyaWdodCAo
QykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwor
CisjaWZuZGVmIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyX2gKKyNkZWZpbmUgR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXJfaAorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDbGllbnQuaCIK
KyNpbmNsdWRlICJJbWFnZS5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgorI2VuZGlmCisKKyNkZWZpbmUgRU5BQkxFX1RFWE1BUF9BTklN
QVRJT04gMAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHR1cmVNYXBwZXJOb2Rl
OworY2xhc3MgQml0bWFwVGV4dHVyZTsKK2NsYXNzIFRleHR1cmVNYXBwZXI7CisKK2NsYXNzIEdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyIDogcHVibGljIEdyYXBoaWNzTGF5ZXIgeworICAgIGZy
aWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVyTm9kZTsKKworcHVibGljOgorICAgIEdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqKTsKKyAgICB2aXJ0dWFsIH5HcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcigpOworCisgICAgLy8gcmVpbXBzIGZyb20gR3JhcGhpY3NM
YXllci5oCisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpOworICAgIHZpcnR1YWwg
dm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVh
bCB2b2lkIHNldFBhcmVudChHcmFwaGljc0xheWVyKiBsYXllcik7CisgICAgdmlydHVhbCBib29s
IHNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mKTsKKyAgICB2aXJ0dWFs
IHZvaWQgYWRkQ2hpbGQoR3JhcGhpY3NMYXllciopOworICAgIHZpcnR1YWwgdm9pZCBhZGRDaGls
ZEF0SW5kZXgoR3JhcGhpY3NMYXllciosIGludCBpbmRleCk7CisgICAgdmlydHVhbCB2b2lkIGFk
ZENoaWxkQWJvdmUoR3JhcGhpY3NMYXllciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcp
OworICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBH
cmFwaGljc0xheWVyKiBzaWJsaW5nKTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkKEdy
YXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFwaGljc0xheWVyKiBuZXdDaGlsZCk7CisgICAgdmly
dHVhbCB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza0xh
eWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zaXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgcCk7CisgICAgdmlydHVhbCB2b2lkIHNldEFuY2hvclBvaW50KGNv
bnN0IEZsb2F0UG9pbnQzRCYgcCk7CisgICAgdmlydHVhbCB2b2lkIHNldFNpemUoY29uc3QgRmxv
YXRTaXplJiBzaXplKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiB0KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hpbGRyZW5UcmFuc2Zv
cm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQ
cmVzZXJ2ZXMzRChib29sIGIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrc1RvQm91bmRzKGJv
b2wgYik7CisgICAgdmlydHVhbCB2b2lkIHNldERyYXdzQ29udGVudChib29sIGIpOworICAgIHZp
cnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJCYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVu
dHNPcGFxdWUoYm9vbCBiKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2ZhY2VWaXNpYmlsaXR5
KGJvb2wgYik7CisgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSk7Cisg
ICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciopOworICAgIHZp
cnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29udGVudHNCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKKyNpZiBFTkFCTEUoM0RfQ0FO
VkFTKQorICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvR3JhcGhpY3NDb250ZXh0M0QoY29u
c3QgR3JhcGhpY3NDb250ZXh0M0QqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250
ZXh0M0ROZWVkc0Rpc3BsYXkoKTsKKyNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c09yaWVudGF0aW9uKENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBvcmllbnRhdGlv
bik7CisgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlKCk7CisgICAgdmlydHVh
bCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIHZpcnR1
YWwgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgdmlydHVhbCBOYXRpdmVM
YXllciBuYXRpdmVMYXllcigpIGNvbnN0OworICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxh
dGZvcm1MYXllcigpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGFkZEFuaW1hdGlvbihjb25z
dCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUmIC8qYm94U2l6ZSovLCBjb25zdCBB
bmltYXRpb24qLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
LyprZXlmcmFtZXNOYW1lKi8sIGRvdWJsZSAvKnRpbWVPZmZzZXQqLykgeyByZXR1cm4gZmFsc2U7
IH0KKworcHJpdmF0ZToKKyAgICBPd25QdHI8VGV4dHVyZU1hcHBlck5vZGU+IG1fbm9kZTsKK307
CisKK30KKyNlbmRpZiAvLyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcl9oCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmggYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNjMWM2ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaApAQCAtMCwwICsxLDEy
MCBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgVGV4
dHVyZU1hcHBlcl9oCisjZGVmaW5lIFRleHR1cmVNYXBwZXJfaAorCisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorI2lmIChkZWZpbmVkKFFUX09QRU5HTF9MSUIpKQorICAgICNpZiBk
ZWZpbmVkKFFUX09QRU5HTF9FU18yKSAmJiAhZGVmaW5lZChURVhNQVBfT1BFTkdMX0VTXzIpCisg
ICAgICAgICNkZWZpbmUgVEVYTUFQX09QRU5HTF9FU18yCisgICAgI2VuZGlmCisjZW5kaWYKKwor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNs
dWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKworLyoK
KyAgICBUZXh0dXJlTWFwcGVyIGlzIGEgbWVjaGFuaXNtIHRoYXQgZW5hYmxlcyBoYXJkd2FyZSBh
Y2NlbGVyYXRpb24gb2YgQ1NTIGFuaW1hdGlvbnMgKGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nKSB3
aXRob3V0CisgICAgYSBuZWVkIGZvciBhIHBsYXRmb3JtIHNwZWNpZmljIHNjZW5lLWdyYXBoIGxp
YnJhcnkgbGlrZSBDb3JlQW5pbWF0aW9ucyBvciBRR3JhcGhpY3NWaWV3LgorKi8KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0dXJlTWFwcGVyOworCisvLyBBIDJEIHRleHR1cmUg
dGhhdCBjYW4gYmUgdGhlIHRhcmdldCBvZiBzb2Z0d2FyZSBvciBHTCByZW5kZXJpbmcuCitjbGFz
cyBCaXRtYXBUZXh0dXJlICA6IHB1YmxpYyBSZWZDb3VudGVkPEJpdG1hcFRleHR1cmU+IHsKK3B1
YmxpYzoKKyAgICBCaXRtYXBUZXh0dXJlKCkgOiBtX2xvY2tDb3VudCgwKSB7fQorICAgIHZpcnR1
YWwgfkJpdG1hcFRleHR1cmUoKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBhbGxvd09mZmxpbmVU
ZXh0dXJlVXBsb2FkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
ZGVzdHJveSgpID0gMDsKKyAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVz
ZXQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBvcGFxdWUgPSBmYWxzZSkKKyAgICB7CisgICAg
ICAgIG1faXNPcGFxdWUgPSBvcGFxdWU7CisgICAgICAgIG1fY29udGVudFNpemUgPSBzaXplOwor
ICAgIH0KKworICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQo
Y29uc3QgSW50UmVjdCYgZGlydHlSZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVuZFBhaW50
KCkgPSAwOworICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnRN
ZWRpYSgpCisgICAgeworICAgICAgICByZXR1cm4gYmVnaW5QYWludChJbnRSZWN0KDAsIDAsIHNp
emUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lk
IHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2F2ZShj
b25zdCBTdHJpbmcmIGZpbGVuYW1lKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgaW5saW5lIHZv
aWQgbG9jaygpIHsgKyttX2xvY2tDb3VudDsgfQorICAgIGlubGluZSB2b2lkIHVubG9jaygpIHsg
LS1tX2xvY2tDb3VudDsgfQorICAgIGlubGluZSBib29sIGlzTG9ja2VkKCkgeyByZXR1cm4gbV9s
b2NrQ291bnQ7IH0KKyAgICBpbmxpbmUgSW50U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGVudFNpemU7IH0KKyAgICBpbmxpbmUgdm9pZCBzZXRPZmZzZXQoY29uc3QgSW50
UG9pbnQmIG8pIHsgbV9vZmZzZXQgPSBvOyB9CisgICAgaW5saW5lIEludFBvaW50IG9mZnNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Citwcml2YXRlOgorICAgIGludCBtX2xvY2tDb3Vu
dDsKKyAgICBJbnRTaXplIG1fY29udGVudFNpemU7CisgICAgYm9vbCBtX2lzT3BhcXVlOworICAg
IEludFBvaW50IG1fb2Zmc2V0OworfTsKKworLy8gQSAiY29udGV4dCIgY2xhc3MgdXNlZCB0byBl
bmNhcHN1bGF0ZSBhY2NlbGVyYXRlZCB0ZXh0dXJlIG1hcHBpbmcgZnVuY3Rpb25zOiBpLmUuIGRy
YXdpbmcgYSB0ZXh0dXJlCisvLyBvbnRvIHRoZSBzY3JlZW4gb3IgaW50byBhbm90aGVyIHRleHR1
cmUgd2l0aCBhIHNwZWNpZmllZCB0cmFuc2Zvcm0sIG9wYWNpdHkgYW5kIG1hc2suCitjbGFzcyBU
ZXh0dXJlTWFwcGVyIDogcHVibGljIFJlZkNvdW50ZWQ8VGV4dHVyZU1hcHBlcj4geworICAgIGZy
aWVuZCBjbGFzcyBCaXRtYXBUZXh0dXJlOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8VGV4dHVyZU1hcHBlcj4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dCopOworICAgIHZpcnR1YWwg
flRleHR1cmVNYXBwZXIoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25z
dCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXQsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBmbG9h
dCBvcGFjaXR5ID0gMS4wZiwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUgPSAwKSA9
IDA7CisKKyAgICAvLyBtYWtlcyBhIHN1cmZhY2UgdGhlIHRhcmdldCBmb3IgdGhlIGZvbGxvd2lu
ZyBkcmF3VGV4dHVyZSBjYWxscy4KKyAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0bWFw
VGV4dHVyZSogc3VyZmFjZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGFyZ2V0KGNv
bnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFNpemUmLCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBJbnRSZWN0JiB2aXNp
YmxlUmVjdCkKKyAgICB7CisgICAgICAgIGRyYXdUZXh0dXJlKHRleHR1cmUsIEludFJlY3QoMCwg
MCwgdGV4dHVyZS5jb250ZW50U2l6ZSgpLndpZHRoKCksIHRleHR1cmUuY29udGVudFNpemUoKS5o
ZWlnaHQoKSksIG1hdHJpeCwgb3BhY2l0eSwgMCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IHNldENsaXAoY29uc3QgSW50UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJm
YWNlRm9yUm9vdCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4
dHVyZT4gY3JlYXRlVGV4dHVyZSgpID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5cGUo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFudXAoKSB7fQorCisgICAgR3JhcGhp
Y3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fZ2M7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgVGV4dHVyZU1hcHBlcihHcmFwaGljc0Nv
bnRleHQqIGdjKSA6IG1fZ2MoZ2MpIHt9CisgICAgR3JhcGhpY3NDb250ZXh0KiBtX2djOworfTsK
KworfTsKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNlOWZjOQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllcl9oCisjZGVmaW5lIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHQ7Citj
bGFzcyBJbnRSZWN0OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4
OworCisKKy8vIEdsdWUgbGF5ZXIgdG8gY29ubmVjdCB0aGUgdGV4bWFwIGxheWVyIHRvIHRoZSBw
bGF0Zm9ybSBzcGVjaWZpYyBjb250YWluZXIuCitjbGFzcyBUZXh0dXJlTWFwcGVyTGF5ZXJDbGll
bnQgeworcHVibGljOgorICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJMYXllckNsaWVudCgpIHt9
CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0U2l6ZUNoYW5nZWQoY29uc3QgSW50U2l6ZSYpID0gMDsKK307CisKK2Ns
YXNzIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyIHsKK3B1YmxpYzoKKyAgICBlbnVtIFR5cGUg
eworICAgICAgICBDb250ZW50TGF5ZXIsCisgICAgICAgIFZpZGVvTGF5ZXIKKyAgICB9OworCisg
ICAgdmlydHVhbCBUeXBlIGxheWVyVHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIH5UZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllcigpIHt9Cit9OworCitjbGFzcyBUZXh0dXJlTWFwcGVyQ29u
dGVudExheWVyIDogcHVibGljIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyIHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0UGxhdGZvcm1MYXllckNsaWVudChUZXh0dXJlTWFwcGVyTGF5
ZXJDbGllbnQqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEludFNpemUmLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0
JiBleHBvc2VkUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxv
YXQgb3BhY2l0eSkge30KKyAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgY2xlYW51cFRleHR1cmVNYXBwZXIoKSB7fQorICAgIHZpcnR1YWwgVHlw
ZSBsYXllclR5cGUoKSBjb25zdCB7IHJldHVybiBDb250ZW50TGF5ZXI7IH0KK307CisKKyNpZiBF
TkFCTEUoVklERU8pCitjbGFzcyBUZXh0dXJlTWFwcGVyVmlkZW9MYXllciA6IHB1YmxpYyBUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHBhaW50
KEdyYXBoaWNzQ29udGV4dCopID0gMDsKKyAgICB2aXJ0dWFsIFR5cGUgbGF5ZXJUeXBlKCkgY29u
c3QgeyByZXR1cm4gVmlkZW9MYXllcjsgfQorfTsKKyNlbmRpZgorCit9CisKKyNlbmRpZiAvLyBU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69729</attachid>
            <date>2010-10-04 19:01:37 -0700</date>
            <delta_ts>2010-10-05 11:03:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch-47070-3.diff</filename>
            <type>text/plain</type>
            <size>115880</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzJiZjllNy4uYjM3MGQzYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiwxNzIgQEAKIAogICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBbVGV4bWFwXSBbUXRdIFRleHR1cmUgbWFwcGVyIGlu
aXRpYWwgaW1wbGVtZW50YXRpb24KKyAgICAgICAgVGV4dHVyZSBNYXBwZXIgaXMgYW4gaW1wbGVt
ZW50YXRpb24gb2YgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgdGhhdCBkb2Vzbid0IHJlcXVpcmUg
YQorICAgICAgICBwbGF0Zm9ybSBzcGVjaWZpYyBzY2VuZWdyYXBoIGxpYnJhcnkgbGlrZSBDQSBv
ciBRR3JhcGhpY3NWaWV3LiBUaGUgaWRlYSBpcyB0aGF0IHdpdGgKKyAgICAgICAgdGltZSB0aGlz
IHdvdWxkIHJlcGxhY2UgR3JhcGhpY3NMYXllclF0LCBhbmQgY291bGQgc2VydmUgYXMgYW4gaW1w
bGVtZW50YXRpb24gZm9yIG90aGVyCisgICAgICAgIHBsYXRmb3JtcyB0aGF0IGRvbid0IGhhdmUg
YSBzY2VuZWdyYXBoIGxpYnJhcnkuIFRoZSBmaXJzdCBzdGFnZSBvZiB0aGlzIGlzIHRvIGFkZCBh
bGwgdGhlIGNvZGUgdG8gdHJ1bmssCisgICAgICAgIGFuZCBlbmFibGUgaXQgaW4gUXQgd2l0aCBh
biBvcHQtaW4gYnVpbGQgZmxhZyBzbyB0aGF0IGl0IGNhbiBiZSBlYXNpbHkgdGVzdGVkLiBPbmNl
IGl0IHJlYWNoZXMKKyAgICAgICAgYW4gYWRlcXVhdGUgbGV2ZWwgb2Ygc3RhYmlsaXR5LCB3ZSBj
YW4gZW5hYmxlIGl0IGJ5IGRlZmF1bHQgYW5kIGV2ZW50dWFsbHkgaGF2ZSBpdCByZXBsYWNlIEdy
YXBoaWNzTGF5ZXJRdC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDcwNzAKKworICAgICAgICBObyBuZXcgdGVzdHM6IGluaXRpYWwgcGF0Y2guCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpkZWJ1Z0dMQ29tbWFuZCk6CisgICAgICAgIChXZWJD
b3JlOjpsb2FkUmVjdFRvU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVH
TDo6Qml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNvcmU6OlRleG1hcFNoYWRlckluZm86
OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXhtYXBTaGFkZXJJbmZv
OjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXhtYXBTaGFkZXJJbmZv
OjpjcmVhdGVTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJH
TDo6VGV4dHVyZU1hcHBlckdMKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6
ZHJhd1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjp0eXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6cmVzZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwVGV4dHVyZUdMOjpiZWdpblBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcFRleHR1cmVHTDo6ZW5kUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4bWFwR0xTaGFk
ZXJUZXh0dXJlczo6ZmluZE9yQ3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleG1hcEdMU2hh
ZGVyVGV4dHVyZXM6OmRlcmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6
c2V0Q29udGVudHNUb0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6
ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmlzVmFsaWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpzaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZVByb2plY3Rpb25NYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckdMOjpjbGVhbnVwKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Ymlu
ZFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpzZXRDbGlwKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6cGFpbnRUb1RhcmdldCk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6On5UZXh0dXJlTWFwcGVyR0wpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjphbGxvd1N1cmZhY2VGb3JSb290KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyOjp+UkdCQTMyUHJlbXVsdGlt
cGxpZWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6bnBvdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ2FjaGU6OkVudHJ5OjpFbnRyeSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ2FjaGU6OkVudHJ5OjpjYWxjdWxhdGVDb3N0
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWNoZTo6RW50cnk6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNhY2hlOjpUZXh0dXJlTWFwcGVy
Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNhY2hlOjpwdXJnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ2FjaGU6Om1hcmspOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckNhY2hlTG9jazo6VGV4dHVyZU1hcHBlckNhY2hlTG9jayk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ2FjaGVMb2NrOjp+VGV4dHVyZU1hcHBlckNh
Y2hlTG9jayk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6bm90aWZ5QW5p
bWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ck5vZGU6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWRBc3luYyk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyTm9kZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
Tm9kZTo6VHJhbnNmb3JtRGF0YTo6VHJhbnNmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudERhdGE6OkNvbnRlbnREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjp0YXIgICAgZ2V0UmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6ZnVsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlck5vZGU6OnJlcGxpY2FSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJOb2RlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpHcmFwaGljc0xheWVyQW5pbWF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpTdGF0ZTo6U3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldE5lZWRzRGlzcGxheUluUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c2V0TmVlZHNEaXNwbGF5
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzZXRQbGF0Zm9ybUxheWVy
Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVHcmFwaGljc0xheWVyc1pWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpzb3J0QnlaT3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlck5vZGU6Omhhc1N1cmZhY2VEZXNjZW5kYW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlck5vZGU6OmNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTm9kZTo6dG9UZXh0dXJlTWFwcGVyTm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZUxheWVyVHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6aW5pdGlhbGl6ZVRleHR1cmVNYXBwZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OlRleHR1cmVNYXBwZXJOb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpyb290TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmludmFsaWRhdGVUcmFuc2Zvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVMb2NhbFRyYW5zZm9ybSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6ZmxhdHRlblRvMkRTcGFjZUlmTmVjZXNz
YXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpuZWFyZXN0U3VyZmFj
ZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVSZXBs
aWNhVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpjb21w
dXRlVHJhbnNmb3JtYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2Rl
OjpiZWdpbkFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6
ZW5kQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjp1cGxv
YWRUZXh0dXJlRnJvbUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5v
ZGU6OnBhaW50U2VsZik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6cGFp
bnRSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNsZWFu
dXBUZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjp+
VGV4dHVyZU1hcHBlck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6
OnNldFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c2V0
T3BhY2l0eUZyb21BbmltYXRpb25GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyTm9kZTo6bm90aWZ5VHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6bm90aWZ5T3BhY2l0eUFuaW1hdGlvblJ1bm5pbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6Om5vdGlmeUFuaW1hdGlvblN0YXJ0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldFRyYW5zZm9ybUZy
b21BbmltYXRpb25GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6
bm90aWZ5Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpwZXJm
b3JtUG9zdFN5bmNPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJO
b2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcjo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6On5HcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6
c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OnNldFBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRDaGlsZEF0SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkQWJvdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkQmVsb3cp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnJlcGxhY2VD
aGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cmVt
b3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6c2V0TWFza0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldEFuY2hvclBvaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRUcmFuc2Zvcm0pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENoaWxkcmVuVHJhbnNm
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRQ
cmVzZXJ2ZXMzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cjo6c2V0TWFza3NUb0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcjo6c2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmNsZWFyQmFja2dyb3VuZENvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c09w
YXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0
QmFja2ZhY2VWaXNpYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyOjpzZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNCYWNrZ3JvdW5kQ29s
b3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENv
bnRlbnRzVG9NZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6c2V0Q29udGVudHNPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcjo6c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzeW5jQ29t
cG9zaXRpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6bmF0aXZlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6OnBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
cjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcjo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcFRleHR1cmU6OkJpdG1hcFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4
dHVyZTo6fkJpdG1hcFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6
YWxsb3dPZmZsaW5lVGV4dHVyZVVwbG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0
dXJlOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjpiZWdpblBhaW50
TWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6c2F2ZSk6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjpsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cFRleHR1cmU6OnVubG9jayk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjppc0xv
Y2tlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjpjb250ZW50U2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjpzZXRPZmZzZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwVGV4dHVyZTo6b2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXI6On5UZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6
OnBhaW50VG9UYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6Y2xlYW51
cCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpncmFwaGljc0NvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6VGV4dHVyZU1hcHBlcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyQ2xpZW50Ojp+VGV4
dHVyZU1hcHBlckxheWVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyOjp+VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6Y2xlYW51cFRleHR1cmVNYXBwZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6bGF5ZXJUeXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJWaWRlb0xheWVyOjpsYXllclR5cGUpOgorCisy
MDEwLTEwLTAzICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAgQWxsb3cgQ1NT
IGFuaW1hdGlvbnMgdG8gcnVuIGF0IG1vcmUgdGhhbiA0MEZQUwogICAgICAgICBBZGQgYSBzZXR0
aW5ncyBmdW5jdGlvbiAoc2V0QW5pbWF0aW9uVGltZXJEZWxheSkgdGhhdCBhZmZlY3RzIEFuaW1h
dGlvbkNvbnRyb2xsZXIncyB0aW1lci4gVGhpcyBpcyBpbiBhY2NvcmRhbmNlIHRvCiAgICAgICAg
IGhvdyB0aGUgRE9NVGltZXIgbWluaW11bSBpbnRlcnZhbCBzZXR0aW5ncyB3ZXJlIGRvbmUgaW4g
YnVnIDQ1MzYyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
VGV4dHVyZU1hcHBlckdMLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1Rl
eHR1cmVNYXBwZXJHTC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdm
YTI0YgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTAsMCArMSw2NTIgQEAKKy8qCisgQ29weXJpZ2h0IChD
KSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4
dHVyZU1hcHBlckdMLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJIYXNoTWFwLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJQYXNzUmVmUHRyLmgi
CisjaW5jbHVkZSAiUmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisKKyNpZiBkZWZp
bmVkKFRFWE1BUF9PUEVOR0xfRVNfMikKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNlbGlmIFBM
QVRGT1JNKE1BQykKKyNpbmNsdWRlIDxnbC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxHTC9nbC5oPgor
I2VuZGlmCisKKyNpZm5kZWYgVEVYTUFQX09QRU5HTF9FUzIKK2V4dGVybiAiQyIgeworICAgIHZv
aWQgZ2xVbmlmb3JtMWYoR0xpbnQsIEdMZmxvYXQpOworICAgIHZvaWQgZ2xVbmlmb3JtMWkoR0xp
bnQsIEdMaW50KTsKKyAgICB2b2lkIGdsVmVydGV4QXR0cmliUG9pbnRlcihHTHVpbnQsIEdMaW50
LCBHTGVudW0sIEdMYm9vbGVhbiwgR0xzaXplaSwgY29uc3QgR0x2b2lkKik7CisgICAgdm9pZCBn
bFVuaWZvcm00ZihHTGludCwgR0xmbG9hdCwgR0xmbG9hdCwgR0xmbG9hdCwgR0xmbG9hdCk7Cisg
ICAgdm9pZCBnbFNoYWRlclNvdXJjZShHTHVpbnQsIEdMc2l6ZWksIGNvbnN0IGNoYXIqKiwgY29u
c3QgR0xpbnQqKTsKKyAgICBHTHVpbnQgZ2xDcmVhdGVTaGFkZXIoR0xlbnVtKTsKKyAgICB2b2lk
IGdsU2hhZGVyU291cmNlKEdMdWludCwgR0xzaXplaSwgY29uc3QgY2hhcioqLCBjb25zdCBHTGlu
dCopOworICAgIHZvaWQgZ2xDb21waWxlU2hhZGVyKEdMdWludCk7CisgICAgdm9pZCBnbERlbGV0
ZVNoYWRlcihHTHVpbnQpOworICAgIHZvaWQgZ2xVbmlmb3JtTWF0cml4NGZ2KEdMaW50LCBHTHNp
emVpLCBHTGJvb2xlYW4sIGNvbnN0IEdMZmxvYXQqKTsKKyAgICBHTHVpbnQgZ2xDcmVhdGVQcm9n
cmFtKCk7CisgICAgdm9pZCBnbEF0dGFjaFNoYWRlcihHTHVpbnQsIEdMdWludCk7CisgICAgdm9p
ZCBnbExpbmtQcm9ncmFtKEdMdWludCk7CisgICAgdm9pZCBnbFVzZVByb2dyYW0oR0x1aW50KTsK
KyAgICB2b2lkIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdMdWludCk7CisgICAgdm9pZCBn
bEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdMdWludCk7CisgICAgdm9pZCBnbEJpbmRGcmFtZWJ1
ZmZlcihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgZnJhbWVidWZmZXIpOworICAgIHZvaWQgZ2xEZWxl
dGVGcmFtZWJ1ZmZlcnMoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIGZyYW1lYnVmZmVycyk7Cisg
ICAgdm9pZCBnbEdlbkZyYW1lYnVmZmVycyhHTHNpemVpIG4sIEdMdWludCogZnJhbWVidWZmZXJz
KTsKKyAgICB2b2lkIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xlbnVtIHRhcmdldCwgR0xlbnVt
IGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQsIEdMdWludCB0ZXh0dXJlLCBHTGludCBsZXZl
bCk7CisgICAgdm9pZCBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdMZW51
bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMp
OworICAgIHZvaWQgZ2xCaW5kQnVmZmVyKEdMZW51bSwgR0x1aW50KTsKKyAgICB2b2lkIGdsRGVs
ZXRlQnVmZmVycyhHTHNpemVpLCBjb25zdCBHTHVpbnQqKTsKKyAgICB2b2lkIGdsR2VuQnVmZmVy
cyhHTHNpemVpLCBHTHVpbnQqKTsKKyAgICB2b2lkIGdsQnVmZmVyRGF0YShHTGVudW0sIEdMc2l6
ZWlwdHIsIGNvbnN0IEdMdm9pZCosIEdMZW51bSk7CisgICAgdm9pZCBnbEJ1ZmZlclN1YkRhdGEo
R0xlbnVtLCBHTHNpemVpcHRyLCBHTHNpemVpcHRyLCBjb25zdCBHTHZvaWQqKTsKKyAgICB2b2lk
IGdsR2V0UHJvZ3JhbUluZm9Mb2coR0x1aW50IHByb2dyYW0sIEdMc2l6ZWksIEdMc2l6ZWkqLCBH
TGNoYXIqKTsKKworI2lmICFQTEFURk9STShNQUMpCisgICAgR0xpbnQgZ2xHZXRVbmlmb3JtTG9j
YXRpb24oR0x1aW50LCBjb25zdCBHTGNoYXIqKTsKKyAgICBHTGludCBnbEdldEF0dHJpYkxvY2F0
aW9uKEdMdWludCwgY29uc3QgR0xjaGFyKik7CisjZW5kaWYKK30KKyNlbmRpZgorCisvLyBUaGlz
IGhhcyB0byBiZSBpbnNpZGUgYSBXVEYgYmVjYXVzZSBpdCdzIGEgdGVtcGxhdGUgc3BlY2lhbGl6
YXRpb24uCituYW1lc3BhY2UgV1RGIHsKKworLy8gU3RyaW5nSGFzaCBpcyB0aGUgZGVmYXVsdCBo
YXNoIGZvciBTdHJpbmcKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsK
K3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6RmxvYXRSZWN0PiA6IFdURjo6
R2VuZXJpY0hhc2hUcmFpdHM8V2ViQ29yZTo6RmxvYXRSZWN0PiB7CisgICAgc3RhdGljIHZvaWQg
Y29uc3RydWN0RGVsZXRlZFZhbHVlKFdlYkNvcmU6OkZsb2F0UmVjdCYgc2xvdCkgeyBzbG90ID0g
V2ViQ29yZTo6RmxvYXRSZWN0KCk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSBXZWJDb3Jl
OjpGbG9hdFJlY3QoKTsgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8V2Vi
Q29yZTo6RmxvYXRSZWN0PiB7CisgICAgc3RydWN0IEhhc2ggeworICAgICAgICBzdGF0aWMgaW50
IGhhc2goY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0KQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaW50KHJlY3QueCgpICogMHgxMCkgfCAoaW50KHJlY3QueSgpICogMHgxMCkg
PDwgNCkgfCAoaW50KHJlY3QuaGVpZ2h0KCkgKiAweDEwMCkgPDwgOCkgfCAoaW50KHJlY3Qud2lk
dGgoKSAqIDB4MTAwKSA8PCAyMCk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2Fm
ZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworICAgIH07Cit9OworCit9CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworaW5saW5lIHN0YXRpYyB2b2lkIGRlYnVnR0xDb21tYW5kKGNv
bnN0IGNoYXIqIGNvbW1hbmQsIGludCBsaW5lKQoreworICAgIGNvbnN0IEdMZW51bSBlcnIgPSBn
bEdldEVycm9yKCk7CisgICAgaWYgKGVycikKKyAgICAgICAgV1RGUmVwb3J0RXJyb3IoX19GSUxF
X18sIGxpbmUsIFdURl9QUkVUVFlfRlVOQ1RJT04sICJbVGV4dHVyZU1hcHBlciBHTF0gQ29tbWFu
ZCBmYWlsZWQ6ICVzICgleClcbiIsIGNvbW1hbmQsIGVycik7Cit9CisKKyNkZWZpbmUgREVCVUdf
R0xfQ09NTUFORFMKKworI2lmZGVmIERFQlVHX0dMX0NPTU1BTkRTCisjZGVmaW5lIEdMX0NNRCh4
KSB7eCwgZGVidWdHTENvbW1hbmQoI3gsIF9fTElORV9fKTsgfQorI2Vsc2UKKyNkZWZpbmUgR0xf
Q01EKHgpIHgKKyNlbmRpZgorCitzdHJ1Y3QgVGV4bWFwR0xWYm9SZXBvc2l0b3J5IHsKKyAgICB0
eXBlZGVmIEhhc2hNYXA8RmxvYXRSZWN0LCBHTHVpbnQ+IFZib01hcDsKKyAgICBWYm9NYXAgdmJv
TWFwOworfTsKKworc3RhdGljIFRleG1hcEdMVmJvUmVwb3NpdG9yeSBnVmJvUmVwb3NpdG9yeTsK
Kworc3RhdGljIHZvaWQgbG9hZFJlY3RUb1NoYWRlcihHTHVpbnQgaWQsIGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3sKKyAgICBHTHVpbnQgdmJvOworICAgIFRleG1hcEdMVmJvUmVwb3NpdG9yeTo6
VmJvTWFwOjppdGVyYXRvciBpdCA9IGdWYm9SZXBvc2l0b3J5LnZib01hcC5maW5kKHJlY3QpOwor
ICAgIGlmIChpdCA9PSBnVmJvUmVwb3NpdG9yeS52Ym9NYXAuZW5kKCkpIHsKKyAgICAgICAgY29u
c3QgRmxvYXRRdWFkIHF1YWQocmVjdCk7CisgICAgICAgIEdMX0NNRChnbEdlbkJ1ZmZlcnMoMSwg
JnZibykpCisgICAgICAgIEdMX0NNRChnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCB2Ym8p
KQorICAgICAgICBHTF9DTUQoZ2xCdWZmZXJEYXRhKEdMX0FSUkFZX0JVRkZFUiwgc2l6ZW9mKEZs
b2F0UXVhZCksICZxdWFkLCBHTF9TVEFUSUNfRFJBVykpCisgICAgICAgIGdWYm9SZXBvc2l0b3J5
LnZib01hcC5hZGQocmVjdCwgdmJvKTsKKyAgICB9IGVsc2UgeworICAgICAgICB2Ym8gPSBpdC0+
c2Vjb25kOworICAgICAgICBHTF9DTUQoZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgdmJv
KSkKKyAgICB9CisgICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihpZCwgMiwgR0xfRkxP
QVQsIEdMX0ZBTFNFLCAwLCAwKSkKK30KKworY2xhc3MgQml0bWFwVGV4dHVyZUdMIDogcHVibGlj
IEJpdG1hcFRleHR1cmUgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7Cisg
ICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCByZXNldChjb25zdCBJbnRTaXplJiwgYm9vbCBv
cGFxdWUpOworICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQo
Y29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnQoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7CisKK3ByaXZhdGU6
CisgICAgR0x1aW50IG1faWQ7CisgICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKKyAgICBGbG9h
dFNpemUgbV9yZWxhdGl2ZVNpemU7CisgICAgYm9vbCBtX29wYXF1ZTsKKyAgICBJbnRTaXplIG1f
dGV4dHVyZVNpemU7CisgICAgUmVmUHRyPFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyPiBtX2J1
ZmZlcjsKKyAgICBJbnRSZWN0IG1fZGlydHlSZWN0OworICAgIEZsb2F0UmVjdCBtX3NvdXJjZVJl
Y3Q7CisgICAgR0x1aW50IG1fZmJvOworICAgIEludFNpemUgbV9hY3R1YWxTaXplOworICAgIGJv
b2wgbV9zdXJmYWNlTmVlZHNSZXNldDsKKyAgICBCaXRtYXBUZXh0dXJlR0woKQorICAgICAgICA6
IG1faWQoMCkKKyAgICAgICAgLCBtX2ltYWdlKDApCisgICAgICAgICwgbV9vcGFxdWUoZmFsc2Up
CisgICAgICAgICwgbV9mYm8oMCkKKyAgICAgICAgLCBtX3N1cmZhY2VOZWVkc1Jlc2V0KHRydWUp
CisgICAgeworICAgIH0KKworICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVyR0w7Cit9Owor
CitzdGF0aWMgc3RydWN0IFRleG1hcFNoYWRlckluZm8geworICAgIGVudW0gU2hhZGVyUHJvZ3Jh
bUluZGV4IHsKKyAgICAgICAgU2ltcGxlUHJvZ3JhbSwKKyAgICAgICAgT3BhY2l0eVByb2dyYW0s
CisgICAgICAgIE9wYWNpdHlBbmRNYXNrUHJvZ3JhbSwKKyAgICAgICAgVGFyZ2V0UHJvZ3JhbSwK
KyAgICAgICAgTnVtUHJvZ3JhbXMKKyAgICB9OworCisgICAgZW51bSBTaGFkZXJWYXJpYWJsZUlu
ZGV4IHsKKyAgICAgICAgSW5NYXRyaXhWYXJpYWJsZSwKKyAgICAgICAgSW5UZXhDb29yZFNvdXJj
ZVZhcmlhYmxlLAorICAgICAgICBJblZlcnRleFZhcmlhYmxlLAorICAgICAgICBJblRleENvb3Jk
TWFza1ZhcmlhYmxlLAorCisgICAgICAgIE9wYWNpdHlWYXJpYWJsZSwKKyAgICAgICAgU291cmNl
VGV4dHVyZVZhcmlhYmxlLAorICAgICAgICBNYXNrVGV4dHVyZVZhcmlhYmxlLAorICAgICAgICBO
dW1WYXJpYWJsZXMKKyAgICB9OworCisgICAgc3RydWN0IFByb2dyYW1JbmZvIHsKKyAgICAgICAg
R0x1aW50IGlkOworICAgICAgICBHTGludCB2YXJzW051bVZhcmlhYmxlc107CisgICAgfTsKKwor
ICAgIEdMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihTaGFkZXJQcm9ncmFtSW5kZXggcHJvZywgU2hh
ZGVyVmFyaWFibGVJbmRleCB2YXIsIGNvbnN0IGNoYXIqIG5hbWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gcHJvZ3JhbXNbcHJvZ10udmFyc1t2YXJdID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJv
Z3JhbXNbcHJvZ10uaWQsIG5hbWUpOworICAgIH0KKworICAgIEdMaW50IGdldEF0dHJpYkxvY2F0
aW9uKFNoYWRlclByb2dyYW1JbmRleCBwcm9nLCBTaGFkZXJWYXJpYWJsZUluZGV4IHZhciwgY29u
c3QgY2hhciogbmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBwcm9ncmFtc1twcm9nXS52YXJz
W3Zhcl0gPSBnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1zW3Byb2ddLmlkLCBuYW1lKTsKKyAg
ICB9CisKKyAgICB2b2lkIGNyZWF0ZVNoYWRlclByb2dyYW0oY29uc3QgY2hhciogdmVydGV4U2hh
ZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSwgU2hhZGVyUHJvZ3Jh
bUluZGV4IGluZGV4KQorICAgIHsKKyAgICAgICAgR0x1aW50IHZlcnRleFNoYWRlciA9IGdsQ3Jl
YXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIpOworICAgICAgICBHTHVpbnQgZnJhZ21lbnRTaGFk
ZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9GUkFHTUVOVF9TSEFERVIpOworICAgICAgICBHTF9DTUQo
Z2xTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAmdmVydGV4U2hhZGVyU291cmNlLCAwKSkK
KyAgICAgICAgR0xfQ01EKGdsU2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCAxLCAmZnJhZ21l
bnRTaGFkZXJTb3VyY2UsIDApKQorICAgICAgICBHTHVpbnQgcHJvZ3JhbUlEID0gZ2xDcmVhdGVQ
cm9ncmFtKCk7CisgICAgICAgIEdMX0NNRChnbENvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKSkK
KyAgICAgICAgR0xfQ01EKGdsQ29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcikpCisgICAgICAg
IEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIHZlcnRleFNoYWRlcikpCisgICAgICAg
IEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZyYWdtZW50U2hhZGVyKSkKKyAgICAg
ICAgR0xfQ01EKGdsTGlua1Byb2dyYW0ocHJvZ3JhbUlEKSkKKyAgICAgICAgcHJvZ3JhbXNbaW5k
ZXhdLmlkID0gcHJvZ3JhbUlEOworICAgICAgICBjaGFyIGluZm9Mb2dbMTAyNF07CisgICAgICAg
IGludCBsZW47CisgICAgICAgIGdsR2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbUlELCAxMDI0LCAm
bGVuLCBpbmZvTG9nKTsKKyAgICB9CisKKyAgICBQcm9ncmFtSW5mbyBwcm9ncmFtc1tOdW1Qcm9n
cmFtc107CisKK30gZ1NoYWRlckluZm87CisKKyNkZWZpbmUgVEVYTUFQX0dFVF9TSEFERVJfVkFS
X0xPQ0FUSU9OKHR5cGUsIHByb2csIHZhcikgXAorICAgICAgICAgICAgaWYgKGdTaGFkZXJJbmZv
LmdldCMjdHlwZSMjTG9jYXRpb24oVGV4bWFwU2hhZGVySW5mbzo6cHJvZyMjUHJvZ3JhbSwgVGV4
bWFwU2hhZGVySW5mbzo6dmFyIyNWYXJpYWJsZSwgI3ZhcikgPCAwKSBcCisgICAgICAgICAgICAg
ICAgICAgIExPR19FUlJPUigiQ291bGRuJ3QgZmluZCB2YXJpYWJsZSAiI3ZhciIgaW4gcHJvZ3Jh
bSAiI3Byb2ciXG4iKTsKKyNkZWZpbmUgVEVYTUFQX0JVSUxEX1NIQURFUihwcm9ncmFtKSBnU2hh
ZGVySW5mby5jcmVhdGVTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJjZSMjcHJvZ3JhbSwg
ZnJhZ21lbnRTaGFkZXJTb3VyY2UjI3Byb2dyYW0sIFRleG1hcFNoYWRlckluZm86OnByb2dyYW0j
I1Byb2dyYW0pOworCitUZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQpCisgICAgOiBUZXh0dXJlTWFwcGVyKGNvbnRleHQpCisgICAgLCBtX2N1
clByb2dyYW0oVGV4bWFwU2hhZGVySW5mbzo6VGFyZ2V0UHJvZ3JhbSkKK3sKKyAgICBzdGF0aWMg
Ym9vbCBzaGFkZXJzQ29tcGlsZWQgPSBmYWxzZTsKKyAgICBpZiAoc2hhZGVyc0NvbXBpbGVkKQor
ICAgICAgICByZXR1cm47CisgICAgc2hhZGVyc0NvbXBpbGVkID0gdHJ1ZTsKKyNpZm5kZWYgVEVY
TUFQX09QRU5HTF9FUzIKKyNkZWZpbmUgT0VTMl9QRVJDSVNJT05fREVGSU5JVElPTlMgXAorICAg
ICIjZGVmaW5lIGxvd3BcbiNkZWZpbmUgaGlnaHBcbiIKKyNlbHNlCisjZGVmaW5lIE9FUzJfUEVS
Q0lTSU9OX0RFRklOSVRJT05TCisjZW5kaWYKKworICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hh
ZGVyU291cmNlT3BhY2l0eUFuZE1hc2sgPQorICAgICAgICAgICAgT0VTMl9QRVJDSVNJT05fREVG
SU5JVElPTlMKKyIgICAgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBTb3VyY2VUZXh0dXJl
LCBNYXNrVGV4dHVyZTsgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAg
IHVuaWZvcm0gbG93cCBmbG9hdCBPcGFjaXR5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIE91dFRl
eENvb3JkU291cmNlLCBPdXRUZXhDb29yZE1hc2s7ICAgICAgICAgICAgICBcbiIKKyIgICAgICAg
ICAgICAgICB2b2lkIG1haW4odm9pZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisi
ICAgICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRChTb3VyY2VUZXh0
dXJlLCBPdXRUZXhDb29yZFNvdXJjZSk7ICBcbiIKKyIgICAgICAgICAgICAgICAgICAgbG93cCB2
ZWM0IG1hc2tDb2xvciA9IHRleHR1cmUyRChNYXNrVGV4dHVyZSwgT3V0VGV4Q29vcmRNYXNrKTsg
IFxuIgorIiAgICAgICAgICAgICAgICAgICBsb3dwIGZsb2F0IG8gPSBPcGFjaXR5ICogbWFza0Nv
bG9yLmE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAg
IGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogbywgY29sb3IuYSAqIG8pOyAgICAgICAg
ICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKworICAgIGNvbnN0
IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrID0KKyAgICAgICAgICAgIE9F
UzJfUEVSQ0lTSU9OX0RFRklOSVRJT05TCisiICAgICAgICAgICAgICAgdW5pZm9ybSBtYXQ0IElu
TWF0cml4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IEluVGV4Q29vcmRTb3VyY2UsIEluVGV4Q29vcmRN
YXNrLCBJblZlcnRleDsgICAgICBcbiIKKyIgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZl
YzIgT3V0VGV4Q29vcmRTb3VyY2UsIE91dFRleENvb3JkTWFzazsgICAgICAgICAgXG4iCisiICAg
ICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAg
ICAgICAgICAgICAgICAgT3V0VGV4Q29vcmRTb3VyY2UgPSB2ZWMyKEluVGV4Q29vcmRTb3VyY2Up
OyAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgIE91dFRleENvb3JkTWFz
ayA9IHZlYzIoSW5UZXhDb29yZE1hc2spOyAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAg
ICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IEluTWF0cml4ICogSW5WZXJ0ZXg7ICAgICAgICAg
ICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOworCisgICAg
Y29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VPcGFjaXR5ID0KKyAgICAgICAgICAgIE9F
UzJfUEVSQ0lTSU9OX0RFRklOSVRJT05TCisiICAgICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVy
MkQgU291cmNlVGV4dHVyZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIK
KyIgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgT3BhY2l0eTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZhcnlpbmcg
aGlnaHAgdmVjMiBPdXRUZXhDb29yZFNvdXJjZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXG4iCisiICAgICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0
dXJlMkQoU291cmNlVGV4dHVyZSwgT3V0VGV4Q29vcmRTb3VyY2UpOyAgXG4iCisiICAgICAgICAg
ICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogT3BhY2l0eSwgY29sb3Iu
YSAqIE9wYWNpdHkpOyAgICBcbiIKKyIgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKwor
ICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHkgPQorICAgICAgICAgICAg
T0VTMl9QRVJDSVNJT05fREVGSU5JVElPTlMKKyIgICAgICAgICAgICAgICB1bmlmb3JtIG1hdDQg
SW5NYXRyaXg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAg
ICAgYXR0cmlidXRlIHZlYzQgSW5UZXhDb29yZFNvdXJjZSwgSW5WZXJ0ZXg7ICAgICAgICAgIFxu
IgorIiAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiBPdXRUZXhDb29yZFNvdXJjZTsg
ICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAg
ICAgICAgICAgICAgICBPdXRUZXhDb29yZFNvdXJjZSA9IHZlYzIoSW5UZXhDb29yZFNvdXJjZSk7
ICAgICBcbiIKKyIgICAgICAgICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSBJbk1hdHJpeCAqIElu
VmVydGV4OyAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKworICAgIGNvbnN0IGNo
YXIqIGZyYWdtZW50U2hhZGVyU291cmNlU2ltcGxlID0KKyAgICAgICAgICAgIE9FUzJfUEVSQ0lT
SU9OX0RFRklOSVRJT05TCisiICAgICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgU291cmNl
VGV4dHVyZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAg
ICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIE91dFRleENvb3JkU291cmNlOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgdm9pZCBtYWlu
KHZvaWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXG4iCisiICAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAg
ICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRChTb3VyY2VUZXh0dXJlLCBPdXRU
ZXhDb29yZFNvdXJjZSk7ICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xv
ciA9IGNvbG9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XG4iCisiICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOworCisgICAgY29uc3QgY2hh
ciogdmVydGV4U2hhZGVyU291cmNlU2ltcGxlID0gdmVydGV4U2hhZGVyU291cmNlT3BhY2l0eTsK
KworICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlVGFyZ2V0ID0KKyAgICAgICAg
ICAgIE9FUzJfUEVSQ0lTSU9OX0RFRklOSVRJT05TCisiICAgICAgICAgICAgICAgdW5pZm9ybSBz
YW1wbGVyMkQgU291cmNlVGV4dHVyZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCBPcGFjaXR5
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIg
ICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0VGV4Q29vcmRTb3VyY2U7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgdm9p
ZCBtYWluKHZvaWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
biIKKyIgICAgICAgICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKFNvdXJj
ZVRleHR1cmUsIE91dFRleENvb3JkU291cmNlKTsgICAgICAgICAgXG4iCisiICAgICAgICAgICAg
ICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IuYmdyICogT3BhY2l0eSwgY29sb3IuYSAq
IE9wYWNpdHkpOyAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcbiI7CisKKyAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VUYXJnZXQgPQor
ICAgICAgICAgICAgT0VTMl9QRVJDSVNJT05fREVGSU5JVElPTlMKKyIgICAgICAgICAgICAgICBh
dHRyaWJ1dGUgdmVjNCBJblRleENvb3JkU291cmNlLCBJblZlcnRleDsgICAgICAgICAgXG4iCisi
ICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIE91dFRleENvb3JkU291cmNlOyAgICAg
ICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAg
ICAgICAgICAgIE91dFRleENvb3JkU291cmNlID0gdmVjMihJblRleENvb3JkU291cmNlKTsgICAg
IFxuIgorIiAgICAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IEluVmVydGV4OyAgICAgICAg
ICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOworCisgICAgVEVYTUFQX0JVSUxE
X1NIQURFUihTaW1wbGUpCisgICAgVEVYTUFQX0JVSUxEX1NIQURFUihPcGFjaXR5KQorICAgIFRF
WE1BUF9CVUlMRF9TSEFERVIoT3BhY2l0eUFuZE1hc2spCisgICAgVEVYTUFQX0JVSUxEX1NIQURF
UihUYXJnZXQpCisKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oQXR0cmliLCBP
cGFjaXR5QW5kTWFzaywgSW5WZXJ0ZXgpCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FU
SU9OKEF0dHJpYiwgT3BhY2l0eUFuZE1hc2ssIEluVGV4Q29vcmRTb3VyY2UpCisgICAgVEVYTUFQ
X0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKEF0dHJpYiwgT3BhY2l0eUFuZE1hc2ssIEluVGV4Q29v
cmRNYXNrKQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihVbmlmb3JtLCBPcGFj
aXR5QW5kTWFzaywgSW5NYXRyaXgpCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9O
KFVuaWZvcm0sIE9wYWNpdHlBbmRNYXNrLCBTb3VyY2VUZXh0dXJlKQorICAgIFRFWE1BUF9HRVRf
U0hBREVSX1ZBUl9MT0NBVElPTihVbmlmb3JtLCBPcGFjaXR5QW5kTWFzaywgTWFza1RleHR1cmUp
CisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKFVuaWZvcm0sIE9wYWNpdHlBbmRN
YXNrLCBPcGFjaXR5KQorCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKEF0dHJp
YiwgT3BhY2l0eSwgSW5WZXJ0ZXgpCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9O
KEF0dHJpYiwgT3BhY2l0eSwgSW5UZXhDb29yZFNvdXJjZSkKKyAgICBURVhNQVBfR0VUX1NIQURF
Ul9WQVJfTE9DQVRJT04oVW5pZm9ybSwgT3BhY2l0eSwgSW5NYXRyaXgpCisgICAgVEVYTUFQX0dF
VF9TSEFERVJfVkFSX0xPQ0FUSU9OKFVuaWZvcm0sIE9wYWNpdHksIFNvdXJjZVRleHR1cmUpCisg
ICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKFVuaWZvcm0sIE9wYWNpdHksIE9wYWNp
dHkpCisKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oQXR0cmliLCBTaW1wbGUs
IEluVmVydGV4KQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihBdHRyaWIsIFNp
bXBsZSwgSW5UZXhDb29yZFNvdXJjZSkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJ
T04oVW5pZm9ybSwgU2ltcGxlLCBJbk1hdHJpeCkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJf
TE9DQVRJT04oVW5pZm9ybSwgU2ltcGxlLCBTb3VyY2VUZXh0dXJlKQorCisgICAgVEVYTUFQX0dF
VF9TSEFERVJfVkFSX0xPQ0FUSU9OKEF0dHJpYiwgVGFyZ2V0LCBJblRleENvb3JkU291cmNlKQor
ICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihBdHRyaWIsIFRhcmdldCwgSW5WZXJ0
ZXgpCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKFVuaWZvcm0sIFRhcmdldCwg
U291cmNlVGV4dHVyZSkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oVW5pZm9y
bSwgVGFyZ2V0LCBPcGFjaXR5KQorfQorCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1
cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVj
dCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3Bh
Y2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCit7CisgICAgY29uc3QgQml0
bWFwVGV4dHVyZUdMJiB0ZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJl
R0wmPih0ZXh0dXJlKTsKKyAgICBpZiAoIXRleHR1cmUuaXNWYWxpZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBUZXhtYXBTaGFkZXJJbmZvOjpTaGFkZXJQcm9ncmFtSW5kZXggcHJvZ3JhbTsK
KyAgICBpZiAobWFza1RleHR1cmUpCisgICAgICAgIHByb2dyYW0gPSBUZXhtYXBTaGFkZXJJbmZv
OjpPcGFjaXR5QW5kTWFza1Byb2dyYW07CisgICAgZWxzZSBpZiAob3BhY2l0eSA8IDAuOTkpCisg
ICAgICAgIHByb2dyYW0gPSBUZXhtYXBTaGFkZXJJbmZvOjpPcGFjaXR5UHJvZ3JhbTsKKyAgICBl
bHNlCisgICAgICAgIHByb2dyYW0gPSBUZXhtYXBTaGFkZXJJbmZvOjpTaW1wbGVQcm9ncmFtOwor
ICAgIGNvbnN0IFRleG1hcFNoYWRlckluZm86OlByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbyA9IGdT
aGFkZXJJbmZvLnByb2dyYW1zW3Byb2dyYW1dOworICAgIGlmIChtX2N1clByb2dyYW0gIT0gcHJv
Z3JhbSkgeworICAgICAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHByb2dyYW1JbmZvLmlkKSkKKyAg
ICAgICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGdTaGFkZXJJbmZvLnByb2dy
YW1zW21fY3VyUHJvZ3JhbV0udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblRleENvb3JkU291cmNl
VmFyaWFibGVdKSkKKyAgICAgICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGdT
aGFkZXJJbmZvLnByb2dyYW1zW21fY3VyUHJvZ3JhbV0udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJ
blZlcnRleFZhcmlhYmxlXSkpCisgICAgICAgIG1fY3VyUHJvZ3JhbSA9IHByb2dyYW07CisgICAg
ICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW1JbmZvLnZhcnNbVGV4
bWFwU2hhZGVySW5mbzo6SW5UZXhDb29yZFNvdXJjZVZhcmlhYmxlXSkpCisgICAgICAgIEdMX0NN
RChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVy
SW5mbzo6SW5WZXJ0ZXhWYXJpYWJsZV0pKQorICAgIH0KKworICAgIEdMX0NNRChnbERpc2FibGUo
R0xfREVQVEhfVEVTVCkpCisgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9TVEVOQ0lMX1RFU1QpKQor
CisgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpCisgICAgR0xfQ01EKGds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4dHVyZUdMLm1faWQpKQorICAgIGxvYWRSZWN0
VG9TaGFkZXIocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblZlcnRleFZhcmlh
YmxlXSwgdGFyZ2V0UmVjdCk7CisgICAgbG9hZFJlY3RUb1NoYWRlcihwcm9ncmFtSW5mby52YXJz
W1RleG1hcFNoYWRlckluZm86OkluVGV4Q29vcmRTb3VyY2VWYXJpYWJsZV0sIHRleHR1cmVHTC5t
X3NvdXJjZVJlY3QpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9y
bWF0aW9uTWF0cml4KG1fcHJvamVjdGlvbk1hdHJpeCkubXVsdExlZnQobW9kZWxWaWV3TWF0cml4
KTsKKyAgICBjb25zdCBHTGZsb2F0IG00W10gPSB7CisgICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0
cml4Lm0xMigpLCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQoKSwKKyAgICAgICAgbWF0cml4Lm0y
MSgpLCBtYXRyaXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgpLAorICAgICAgICBt
YXRyaXgubTMxKCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCksCisg
ICAgICAgIG1hdHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5t
NDQoKQorICAgIH07CisgICAgZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4
bWFwU2hhZGVySW5mbzo6SW5NYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNCk7CisgICAg
R0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6U291
cmNlVGV4dHVyZVZhcmlhYmxlXSwgMCkpCisKKyAgICBpZiAobWFza1RleHR1cmUgJiYgbWFza1Rl
eHR1cmUtPmlzVmFsaWQoKSkgeworICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wqIG1hc2tU
ZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wqPihtYXNrVGV4dHVy
ZSk7CisgICAgICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpKQorICAgICAg
ICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtYXNrVGV4dHVyZUdMLT5tX2lk
KSkKKyAgICAgICAgbG9hZFJlY3RUb1NoYWRlcihwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRl
ckluZm86OkluVGV4Q29vcmRNYXNrVmFyaWFibGVdLCBtYXNrVGV4dHVyZUdMLT5tX3NvdXJjZVJl
Y3QpOworICAgICAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtSW5m
by52YXJzW1RleG1hcFNoYWRlckluZm86OkluVGV4Q29vcmRNYXNrVmFyaWFibGVdKSkKKyAgICAg
ICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6
TWFza1RleHR1cmVWYXJpYWJsZV0sIDEpKQorICAgICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJl
KEdMX1RFWFRVUkUwKSkKKyAgICB9CisKKyAgICBpZiAocHJvZ3JhbSAhPSBUZXhtYXBTaGFkZXJJ
bmZvOjpTaW1wbGVQcm9ncmFtKQorICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbUlu
Zm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpPcGFjaXR5VmFyaWFibGVdLCBvcGFjaXR5KSkKKwor
ICAgIGlmICh0ZXh0dXJlR0wubV9vcGFxdWUgJiYgb3BhY2l0eSA+IDAuOTkgJiYgIW1hc2tUZXh0
dXJlKQorICAgICAgICBHTF9DTUQoZ2xEaXNhYmxlKEdMX0JMRU5EKSkKKyAgICBlbHNlIHsKKyAg
ICAgICAgR0xfQ01EKGdsQmxlbmRGdW5jKEdMX09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSkp
CisgICAgICAgIEdMX0NNRChnbEVuYWJsZShHTF9CTEVORCkpCisgICAgfQorCisgICAgR0xfQ01E
KGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpKQorfQorCisKK2NvbnN0IGNoYXIq
IFRleHR1cmVNYXBwZXJHTDo6dHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICJPcGVuR0wiOwor
fQorCit2b2lkIEJpdG1hcFRleHR1cmVHTDo6cmVzZXQoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSwg
Ym9vbCBvcGFxdWUpCit7CisgICAgQml0bWFwVGV4dHVyZTo6cmVzZXQobmV3U2l6ZSwgb3BhcXVl
KTsKKyAgICBtX2ltYWdlID0gMDsKKyAgICBJbnRTaXplIG5ld1RleHR1cmVTaXplID0gbnBvdChu
ZXdTaXplKTsKKyAgICBib29sIGp1c3RDcmVhdGVkID0gZmFsc2U7CisgICAgaWYgKCFtX2lkKSB7
CisgICAgICAgIEdMX0NNRChnbEdlblRleHR1cmVzKDEsICZtX2lkKSkKKyAgICAgICAganVzdENy
ZWF0ZWQgPSB0cnVlOworICAgIH0KKworICAgIGlmIChqdXN0Q3JlYXRlZCB8fCBuZXdUZXh0dXJl
U2l6ZS53aWR0aCgpID4gbV90ZXh0dXJlU2l6ZS53aWR0aCgpIHx8IG5ld1RleHR1cmVTaXplLmhl
aWdodCgpID4gbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSkgeworICAgICAgICBMT0coIltUZXh0dXJl
TWFwcGVyR0xdIENyZWF0aW5nIHRleHR1cmUuIElEOiAlZDsgU2l6ZTogJWQsJWRcbiIsIG1faWQs
IG5ld1RleHR1cmVTaXplLndpZHRoKCksIG5ld1RleHR1cmVTaXplLmhlaWdodCgpKTsKKyAgICAg
ICAgbV90ZXh0dXJlU2l6ZSA9IG5ld1RleHR1cmVTaXplOworICAgICAgICBHTF9DTUQoZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lkKSkKKyAgICAgICAgR0xfQ01EKGdsVGV4UGFyYW1l
dGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUikpCisg
ICAgICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9N
QUdfRklMVEVSLCBHTF9MSU5FQVIpKQorICAgICAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKSkKKyAgICAg
ICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
VCwgR0xfQ0xBTVBfVE9fRURHRSkpCisgICAgICAgIEdMX0NNRChnbFRleEltYWdlMkQoR0xfVEVY
VFVSRV8yRCwgMCwgR0xfUkdCQSwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXpl
LmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKSkKKyAgICB9CisgICAg
bV9hY3R1YWxTaXplID0gbmV3U2l6ZTsKKyAgICBtX3JlbGF0aXZlU2l6ZSA9IEZsb2F0U2l6ZShm
bG9hdChuZXdTaXplLndpZHRoKCkpIC8gbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBmbG9hdChuZXdT
aXplLmhlaWdodCgpKSAvIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpOworICAgIG1fc291cmNlUmVj
dCA9IEZsb2F0UmVjdCgwLCAwLCBtX3JlbGF0aXZlU2l6ZS53aWR0aCgpLCBtX3JlbGF0aXZlU2l6
ZS5oZWlnaHQoKSk7CisgICAgbV9vcGFxdWUgPSBvcGFxdWU7CisgICAgbV9zdXJmYWNlTmVlZHNS
ZXNldCA9IHRydWU7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBCaXRtYXBUZXh0dXJl
R0w6OmJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIG1fYnVmZmVy
ID0gUkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI6OmNyZWF0ZSgpOworICAgIG1fZGlydHlSZWN0
ID0gZGlydHlSZWN0OworICAgIHJldHVybiBtX2J1ZmZlci0+YmVnaW5QYWludChkaXJ0eVJlY3Qs
IG1fb3BhcXVlKTsKK30KKwordm9pZCBCaXRtYXBUZXh0dXJlR0w6OmVuZFBhaW50KCkKK3sKKyAg
ICBpZiAoIW1fYnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgbV9idWZmZXItPmVuZFBhaW50
KCk7CisgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pZCkpCisgICAg
R0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2RpcnR5UmVjdC54KCks
IG1fZGlydHlSZWN0LnkoKSwgbV9kaXJ0eVJlY3Qud2lkdGgoKSwgbV9kaXJ0eVJlY3QuaGVpZ2h0
KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIG1fYnVmZmVyLT5kYXRhKCkpKQorICAgIG1f
YnVmZmVyLmNsZWFyKCk7Cit9CisKK3N0cnVjdCBUZXhtYXBHTFNoYWRlclRleHR1cmVzIHsKKyAg
ICBzdHJ1Y3QgRW50cnkgeworICAgICAgICBHTHVpbnQgdGV4dHVyZTsKKyAgICAgICAgaW50IHJl
ZkNvdW50OworICAgIH07CisgICAgSGFzaE1hcDxOYXRpdmVJbWFnZVB0ciwgRW50cnk+IGltYWdl
VG9UZXh0dXJlOworICAgIEdMdWludCBmaW5kT3JDcmVhdGUoTmF0aXZlSW1hZ2VQdHIgaW1hZ2Us
IGJvb2wmIGZvdW5kKQorICAgIHsKKyAgICAgICAgSGFzaE1hcDxOYXRpdmVJbWFnZVB0ciwgRW50
cnk+OjppdGVyYXRvciBpdCA9IGltYWdlVG9UZXh0dXJlLmZpbmQoaW1hZ2UpOworICAgICAgICBm
b3VuZCA9IGZhbHNlOworICAgICAgICBpZiAoaXQgIT0gaW1hZ2VUb1RleHR1cmUuZW5kKCkpIHsK
KyAgICAgICAgICAgIGl0LT5zZWNvbmQucmVmQ291bnQrKzsKKyAgICAgICAgICAgIGZvdW5kID0g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kLnRleHR1cmU7CisgICAgICAgIH0K
KyAgICAgICAgRW50cnkgZW50cnk7CisgICAgICAgIEdMX0NNRChnbEdlblRleHR1cmVzKDEsICZl
bnRyeS50ZXh0dXJlKSk7CisgICAgICAgIGVudHJ5LnJlZkNvdW50ID0gMTsKKyAgICAgICAgaW1h
Z2VUb1RleHR1cmUuYWRkKGltYWdlLCBlbnRyeSk7CisgICAgICAgIHJldHVybiBlbnRyeS50ZXh0
dXJlOworICAgIH0KKworICAgIGJvb2wgZGVyZWYoTmF0aXZlSW1hZ2VQdHIgaW1hZ2UpCisgICAg
eworICAgICAgICBIYXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBFbnRyeT46Oml0ZXJhdG9yIGl0ID0g
aW1hZ2VUb1RleHR1cmUuZmluZChpbWFnZSk7CisgICAgICAgIGlmIChpdCAhPSBpbWFnZVRvVGV4
dHVyZS5lbmQoKSkgeworICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQucmVmQ291bnQgPCAyKSB7
CisgICAgICAgICAgICAgICAgaW1hZ2VUb1RleHR1cmUucmVtb3ZlKGl0KTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorfTsKKworc3RhdGljIFRleG1hcEdMU2hhZGVyVGV4dHVyZXMgZ1Rl
eHR1cmVSZXBvc2l0b3J5OworCit2b2lkIEJpdG1hcFRleHR1cmVHTDo6c2V0Q29udGVudHNUb0lt
YWdlKEltYWdlKiBpbWFnZSkKK3sKKyAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSA9IGlt
YWdlID8gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgOiAwOworICAgIGlmICgh
aW1hZ2UgfHwgIW5hdGl2ZUltYWdlKSB7CisgICAgICAgIGlmIChtX2ltYWdlKQorICAgICAgICAg
ICAgZGVzdHJveSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG5hdGl2ZUlt
YWdlID09IG1faW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBib29sIGZvdW5kID0gZmFsc2U7
CisgICAgR0x1aW50IG5ld1RleHR1cmVJRCA9IGdUZXh0dXJlUmVwb3NpdG9yeS5maW5kT3JDcmVh
dGUobmF0aXZlSW1hZ2UsIGZvdW5kKTsKKyAgICBpZiAobmV3VGV4dHVyZUlEICE9IG1faWQpIHsK
KyAgICAgICAgZGVzdHJveSgpOworICAgICAgICBtX2lkID0gbmV3VGV4dHVyZUlEOworICAgICAg
ICByZXNldChpbWFnZS0+c2l6ZSgpLCBmYWxzZSk7CisgICAgICAgIG1faW1hZ2UgPSBuYXRpdmVJ
bWFnZTsKKyAgICAgICAgTE9HKCJbVGV4dHVyZU1hcHBlckdMXSBDcmVhdGluZyB0ZXh0dXJlIGZy
b20gZGlyZWN0bHkgY29tcG9zaXRlZCBpbWFnZS4gSUQ6ICVkOyBTaXplOiAlZCwlZFxuIiwgbV9p
ZCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSk7CisgICAgICAgIGlmICghZm91bmQp
IHsKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGJlZ2luUGFpbnQoSW50UmVj
dCgwLCAwLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpKSk7
CisgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgRGV2aWNlQ29sb3JTcGFjZSwg
SW50UG9pbnQoMCwgMCksIENvbXBvc2l0ZUNvcHkpOworICAgICAgICAgICAgZW5kUGFpbnQoKTsK
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBCaXRtYXBUZXh0dXJlR0w6OmRlc3Ryb3koKQor
eworICAgIGlmIChtX2lkICYmICghbV9pbWFnZSB8fCAhZ1RleHR1cmVSZXBvc2l0b3J5LmRlcmVm
KG1faW1hZ2UpKSkgeworICAgICAgICBHTF9DTUQoZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9pZCkp
CisgICAgICAgIExPRygiW1RleHR1cmVNYXBwZXJPcGVuR0xdIERlbGV0aW5nIHRleHR1cmUgJWQs
IHNpemU6ICVkLCVkXG4iLCBtX2lkLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNp
emUuaGVpZ2h0KCkpOworICAgIH0KKyAgICBpZiAobV9mYm8pCisgICAgICAgIEdMX0NNRChnbERl
bGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pKQorCisgICAgbV9mYm8gPSAwOworICAgIG1faWQg
PSAwOworICAgIG1fdGV4dHVyZVNpemUgPSBJbnRTaXplKCk7CisgICAgbV9yZWxhdGl2ZVNpemUg
PSBGbG9hdFNpemUoMSwgMSk7Cit9Citib29sIEJpdG1hcFRleHR1cmVHTDo6aXNWYWxpZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1faWQ7Cit9CisKK0ludFNpemUgQml0bWFwVGV4dHVyZUdMOjpz
aXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90ZXh0dXJlU2l6ZTsKK30KKworc3RhdGljIGlu
bGluZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KGNvbnN0IElu
dFNpemUmIHNpemUsIGJvb2wgZmxpcCkKK3sKKyAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRy
aXgoMi4wIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgKGZsaXAgPyAtMi4wIDogMi4wKSAvIGZsb2F0KHNpemUuaGVpZ2h0
KCkpLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAtMC4wMDAw
MDEsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCBmbGlwID8gMSA6IC0x
LCAwLCAxKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmNsZWFudXAoKQorICAgIHsKKyAg
ICBmb3IgKFRleG1hcEdMVmJvUmVwb3NpdG9yeTo6VmJvTWFwOjppdGVyYXRvciBpdCA9IGdWYm9S
ZXBvc2l0b3J5LnZib01hcC5iZWdpbigpOyBpdCAhPSBnVmJvUmVwb3NpdG9yeS52Ym9NYXAuZW5k
KCk7ICsraXQpIHsKKyAgICAgICAgTE9HKCJbVGV4dHVyZU1hcHBlckdMXSBEZWxldGluZyB2Ym8g
JWQsICVmICVmICVmICVmXG4iLCBpdC0+c2Vjb25kLCBpdC0+Zmlyc3QueCgpLCBpdC0+Zmlyc3Qu
eSgpLCBpdC0+Zmlyc3Qud2lkdGgoKSwgaXQtPmZpcnN0LmhlaWdodCgpKTsKKyAgICAgICAgR0xf
Q01EKGdsRGVsZXRlQnVmZmVycygxLCAmaXQtPnNlY29uZCkpCisgICAgfQorICAgIGdWYm9SZXBv
c2l0b3J5LnZib01hcC5jbGVhcigpOworfQorCisKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpiaW5k
U3VyZmFjZShCaXRtYXBUZXh0dXJlICpzdXJmYWNlUG9pbnRlcikKK3sKKyAgICBCaXRtYXBUZXh0
dXJlR0wqIHN1cmZhY2UgPSBzdGF0aWNfY2FzdDxCaXRtYXBUZXh0dXJlR0wqPihzdXJmYWNlUG9p
bnRlcik7CisKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybjsKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBtYXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KHN1cmZhY2UtPnNp
emUoKSwgZmFsc2UpOworICAgIG1hdHJpeC50cmFuc2xhdGUoLXN1cmZhY2UtPm9mZnNldCgpLngo
KSwgLXN1cmZhY2UtPm9mZnNldCgpLnkoKSk7CisKKyAgICBpZiAoc3VyZmFjZS0+bV9zdXJmYWNl
TmVlZHNSZXNldCB8fCAhc3VyZmFjZS0+bV9mYm8pIHsKKyAgICAgICAgaWYgKCFzdXJmYWNlLT5t
X2ZibykKKyAgICAgICAgICAgIEdMX0NNRChnbEdlbkZyYW1lYnVmZmVycygxLCAmc3VyZmFjZS0+
bV9mYm8pKQorICAgICAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIs
IHN1cmZhY2UtPm1fZmJvKSkKKyAgICAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgMCkpCisgICAgICAgIEdMX0NNRChnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1F
QlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgc3VyZmFjZS0+bV9p
ZCwgMCkpCisgICAgICAgIEdMX0NNRChnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCkpCisgICAgICAg
IEdMX0NNRChnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpKQorICAgICAgICBzdXJmYWNlLT5t
X3N1cmZhY2VOZWVkc1Jlc2V0ID0gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgR0xfQ01E
KGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBzdXJmYWNlLT5tX2ZibykpCisgICAg
fQorCisgICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwgc3VyZmFjZS0+c2l6ZSgpLndpZHRoKCks
IHN1cmZhY2UtPnNpemUoKS5oZWlnaHQoKSkpCisgICAgbV9wcm9qZWN0aW9uTWF0cml4ID0gbWF0
cml4OworfQorCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6c2V0Q2xpcChjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIEdMX0NNRChnbFNjaXNzb3IocmVjdC54KCksIHJlY3QueSgpLCByZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpKQorICAgIEdMX0NNRChnbEVuYWJsZShHTF9TQ0lTU09SX1RF
U1QpKQorfQorCisKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpwYWludFRvVGFyZ2V0KGNvbnN0IEJp
dG1hcFRleHR1cmUmIGFTdXJmYWNlLCBjb25zdCBJbnRTaXplJiBzdXJmYWNlU2l6ZSwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSwgY29uc3QgSW50
UmVjdCYgdmlzaWJsZVJlY3QpCit7CisgICAgY29uc3QgQml0bWFwVGV4dHVyZUdMJiBzdXJmYWNl
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oYVN1cmZhY2UpOworICAgIC8v
IENyZWF0ZSB0aGUgbW9kZWwtdmlldy1wcm9qZWN0aW9uIG1hdHJpeCB0byBkaXNwbGF5IG9uIHNj
cmVlbi4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtdnBNYXRyaXggPSBjcmVhdGVQcm9qZWN0
aW9uTWF0cml4KHN1cmZhY2VTaXplLCB0cnVlKS5tdWx0TGVmdCh0cmFuc2Zvcm0pOworICAgIGNv
bnN0IEZsb2F0UXVhZCBmaW5hbFF1YWQgPSBtdnBNYXRyaXgubWFwUXVhZChGbG9hdFF1YWQoRmxv
YXRSZWN0KHN1cmZhY2Uub2Zmc2V0KCkueCgpLCBzdXJmYWNlLm9mZnNldCgpLnkoKSwgc3VyZmFj
ZS5tX2FjdHVhbFNpemUud2lkdGgoKSwgc3VyZmFjZS5tX2FjdHVhbFNpemUuaGVpZ2h0KCkpKSk7
CisKKyAgICAvLyBXZSBhbHJlYWR5IGJsZW5kZWQgdGhlIGFscGhhIGluOyB0aGUgcmVzdWx0IGlz
IHByZW11bHRpcGxpZWQuCisgICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShnU2hhZGVySW5mby5wcm9n
cmFtc1tUZXhtYXBTaGFkZXJJbmZvOjpUYXJnZXRQcm9ncmFtXS5pZCkpCisgICAgR0xfQ01EKGds
QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKSkKKyAgICBHTF9DTUQoZ2xWaWV3cG9y
dCgwLCAwLCBzdXJmYWNlU2l6ZS53aWR0aCgpLCBzdXJmYWNlU2l6ZS5oZWlnaHQoKSkpCisgICAg
R0xfQ01EKGdsRGlzYWJsZShHTF9TVEVOQ0lMX1RFU1QpKQorICAgIGNvbnN0IFRleG1hcFNoYWRl
ckluZm86OlByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbyA9IGdTaGFkZXJJbmZvLnByb2dyYW1zW1Rl
eG1hcFNoYWRlckluZm86OlRhcmdldFByb2dyYW1dOworICAgIEdMX0NNRChnbFVuaWZvcm0xZihw
cm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86Ok9wYWNpdHlWYXJpYWJsZV0sIG9wYWNp
dHkpKQorICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKQorICAgIEdMX0NN
RChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHN1cmZhY2UubV9pZCkpCisgICAgR0xfQ01E
KGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6U291cmNlVGV4
dHVyZVZhcmlhYmxlXSwgMCkpCisgICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXko
cHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblRleENvb3JkU291cmNlVmFyaWFi
bGVdKSkKKyAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtSW5mby52
YXJzW1RleG1hcFNoYWRlckluZm86OkluVmVydGV4VmFyaWFibGVdKSkKKyAgICBHTF9DTUQoZ2xC
aW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCkpCisgICAgR0xfQ01EKGdsVmVydGV4QXR0cmli
UG9pbnRlcihwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OkluVmVydGV4VmFyaWFi
bGVdLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsICZmaW5hbFF1YWQpKQorICAgIGxvYWRSZWN0
VG9TaGFkZXIocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblRleENvb3JkU291
cmNlVmFyaWFibGVdLCBzdXJmYWNlLm1fc291cmNlUmVjdCk7CisgICAgR0xfQ01EKGdsQmluZEJ1
ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDApKQorICAgIEdMX0NNRChnbEJsZW5kRnVuYyhHTF9PTkUs
IEdMX09ORV9NSU5VU19TUkNfQUxQSEEpKQorICAgIEdMX0NNRChnbEVuYWJsZShHTF9CTEVORCkp
CisgICAgc2V0Q2xpcCh2aXNpYmxlUmVjdCk7CisKKyAgICBHTF9DTUQoZ2xEcmF3QXJyYXlzKEdM
X1RSSUFOR0xFX0ZBTiwgMCwgNCkpCisgICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5UZXhDb29yZFNvdXJjZVZh
cmlhYmxlXSkpCisgICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW1J
bmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5WZXJ0ZXhWYXJpYWJsZV0pKQorICAgIEdMX0NN
RChnbFVzZVByb2dyYW0oMCkpCisgICAgbV9jdXJQcm9ncmFtID0gVGV4bWFwU2hhZGVySW5mbzo6
VGFyZ2V0UHJvZ3JhbTsKK30KKworUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFw
cGVyR0w6OmNyZWF0ZVRleHR1cmUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQml0bWFwVGV4dHVy
ZUdMKCkpOyB9CisKK307CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L1RleHR1cmVNYXBwZXJHTC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNj
NDI0YzQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9UZXh0dXJlTWFwcGVyR0wuaApAQCAtMCwwICsxLDg0IEBACisvKgorIENvcHlyaWdodCAoQykg
MjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBUZXh0dXJlTWFwcGVyR0xfaAorI2RlZmluZSBU
ZXh0dXJlTWFwcGVyR0xfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisj
aW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlRy
YW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBBbiBPcGVuR0wtRVMyIGltcGxlbWVudGF0aW9u
IG9mIFRleHR1cmVNYXBwZXIuCitjbGFzcyBUZXh0dXJlTWFwcGVyR0wgOiBwdWJsaWMgVGV4dHVy
ZU1hcHBlciB7CitwdWJsaWM6CisgICAgVGV4dHVyZU1hcHBlckdMKEdyYXBoaWNzQ29udGV4dCog
Z2MpOworICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJHTCgpIHt9CisKKyAgICAvLyByZWltcHMg
ZnJvbSBUZXh0dXJlTWFwcGVyCisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJp
dG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBt
YXNrVGV4dHVyZSk7CisgICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUq
IHN1cmZhY2UpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDbGlwKGNvbnN0IEludFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RhcmdldChjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3Qg
SW50U2l6ZSYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29u
c3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpOworICAgIHZpcnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VG
b3JSb290KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxC
aXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiB0
eXBlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNsZWFudXAoKTsKKworcHJpdmF0ZToKKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3Byb2plY3Rpb25NYXRyaXg7CisgICAgaW50IG1fY3Vy
UHJvZ3JhbTsKK307CisKKy8vIEFuIG9mZnNjcmVlbiBidWZmZXIgdG8gYmUgcmVuZGVyZWQgYnkg
c29mdHdhcmUuCitjbGFzcyBSR0JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlciA6IHB1YmxpYyBSZWZD
b3VudGVkPFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyPiB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+UkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXIoKSB7fQorICAgIHZpcnR1YWwgUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0LCBib29s
IG9wYXF1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludCgpID0gMDsKKyAgICB2aXJ0
dWFsIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdCA9IDA7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
UkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI+IGNyZWF0ZSgpOworfTsKKworLy8gTmV4dCBwb3dl
ciBvZiB0d28uCitzdGF0aWMgaW5saW5lIGludCBucG90KGludCBudW0pCit7CisgICAgZm9yIChp
bnQgaSA9IDB4MTAwMDAwMDA7IGkgPiAwOyBpID4+PSAxKSB7CisgICAgICAgIGlmIChudW0gPT0g
aSkKKyAgICAgICAgICAgIHJldHVybiBudW07CisgICAgICAgIGlmIChudW0gJiBpKQorICAgICAg
ICAgICAgcmV0dXJuIChpIDw8IDEpOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KKworc3RhdGlj
IGlubGluZSBJbnRTaXplIG5wb3QoY29uc3QgSW50U2l6ZSYgcykKK3sKKyAgICByZXR1cm4gSW50
U2l6ZShucG90KHMud2lkdGgoKSksIG5wb3Qocy5oZWlnaHQoKSkpOworfQorCit9OworCisjZW5k
aWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dy
YXBoaWNzTGF5ZXJRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNz
TGF5ZXJRdC5jcHAKaW5kZXggMDc5ZDhiYS4uMjZiMThmYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuY3BwCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcApAQCAtNDMsOCArNDMsOCBAQAog
I2luY2x1ZGUgPFF0R3VpL3FzdHlsZW9wdGlvbi5oPgogCiAKLSNkZWZpbmUgUVRfREVCVUdfUkVD
QUNIRSAwCi0jZGVmaW5lIFFUX0RFQlVHX0NBQ0hFRFVNUCAwCisjZGVmaW5lIFFUX0RFQlVHX1JF
Q0FDSEUgMQorI2RlZmluZSBRVF9ERUJVR19DQUNIRURVTVAgMQogCiAjZGVmaW5lIFFUX0RFQlVH
X0ZQUyAwCiAKQEAgLTQwMiw3ICs0MDIsNyBAQCBRUGl4bWFwIEdyYXBoaWNzTGF5ZXJRdEltcGw6
OnJlY2FjaGUoY29uc3QgUVJlZ2lvbiYgcmVnaW9uVG9VcGRhdGUpCiAgICAgICAgICAgICByZWdp
b24gKz0gbmV3UmVnaW9uOwogICAgICAgICAgICAgaWYgKGZpbGwgJiYgIXJlZ2lvbi5pc0VtcHR5
KCkpIHsgLy8gQ2xlYXIgdGhlIGVudGlyZSBwaXhtYXAgd2l0aCB0aGUgYmFja2dyb3VuZC4KICNp
ZiBRVF9ERUJVR19SRUNBQ0hFCi0gICAgICAgICAgICAgICAgcURlYnVnKCkgPDwgIkNhY2hlRXJh
c2UiIDw8IHRoaXMgPDwgbV9zaXplIDw8IGJhY2tncm91bmQ7CisgICAgICAgICAgICAgICAgcURl
YnVnKCkgPDwgIkNhY2hlRXJhc2UiIDw8IHRoaXMgPDwgbV9zaXplOwogI2VuZGlmCiAgICAgICAg
ICAgICAgICAgZXJhc2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBwaXhtYXAuZmlsbChRdDo6
dHJhbnNwYXJlbnQpOwpAQCAtNDE1LDggKzQxNSw2IEBAIFFQaXhtYXAgR3JhcGhpY3NMYXllclF0
SW1wbDo6cmVjYWNoZShjb25zdCBRUmVnaW9uJiByZWdpb25Ub1VwZGF0ZSkKICNpZiBRVF9ERUJV
R19DQUNIRURVTVAKICAgICAgICAgICAgIHN0YXRpYyBpbnQgcmVjYWNoZUNvdW50ID0gMDsKICAg
ICAgICAgICAgICsrcmVjYWNoZUNvdW50OwotICAgICAgICAgICAgcURlYnVnKCkgPDwgIioqKiog
Q0FDSEVEVU1QIiA8PCByZWNhY2hlQ291bnQgPDwgdGhpcyA8PCBtX2xheWVyIDw8IHJlZ2lvbiA8
PCBtX3NpemU7Ci0gICAgICAgICAgICBwaXhtYXAuc2F2ZShRU3RyaW5nKCkuc3ByaW50ZigiL3Rt
cC8lMDVkX0EucG5nIiwgcmVjYWNoZUNvdW50KSwgIlBORyIpOwogI2VuZGlmCiAKICAgICAgICAg
ICAgIFFQYWludGVyIHBhaW50ZXIoJnBpeG1hcCk7CkBAIC00MjcsMTEgKzQyNSw2IEBAIFFQaXht
YXAgR3JhcGhpY3NMYXllclF0SW1wbDo6cmVjYWNoZShjb25zdCBRUmVnaW9uJiByZWdpb25Ub1Vw
ZGF0ZSkKICAgICAgICAgICAgIGlmICghZXJhc2VkKSB7IC8vIEVyYXNlIHRoZSBhcmVhIGluIGNh
Y2hlIHRoYXQgd2UncmUgZHJhd2luZyBpbnRvLgogICAgICAgICAgICAgICAgIHBhaW50ZXIuc2V0
Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfQ2xlYXIpOwogICAgICAg
ICAgICAgICAgIHBhaW50ZXIuZmlsbFJlY3QocmVnaW9uLmJvdW5kaW5nUmVjdCgpLCBRdDo6dHJh
bnNwYXJlbnQpOwotCi0jaWYgUVRfREVCVUdfQ0FDSEVEVU1QCi0gICAgICAgICAgICAgICAgcURl
YnVnKCkgPDwgIioqKiogQ0FDSEVEVU1QIiA8PCByZWNhY2hlQ291bnQgPDwgdGhpcyA8PCBtX2xh
eWVyIDw8IHJlZ2lvbiA8PCBtX3NpemU7Ci0gICAgICAgICAgICAgICAgcGl4bWFwLnNhdmUoUVN0
cmluZygpLnNwcmludGYoIi90bXAvJTA1ZF9CLnBuZyIsIHJlY2FjaGVDb3VudCksICJQTkciKTsK
LSNlbmRpZgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGFjdHVh
bCBjb250ZW50cyBpbnRvIHRoZSBjYWNoZS4KQEAgLTQ1OSw2ICs0NTIsOCBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXJRdEltcGw6OnVwZGF0ZVRyYW5zZm9ybSgpCiAKICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBsb2NhbFRyYW5zZm9ybTsKIAorICAgIHFEZWJ1ZygpIDw8IF9fZnVuY19fOworCiAgICAg
R3JhcGhpY3NMYXllclF0SW1wbCogcGFyZW50ID0gdG9HcmFwaGljc0xheWVyUXRJbXBsKHBhcmVu
dE9iamVjdCgpKTsKIAogICAgIC8vIFdlYkNvcmUgaGFzIHJlbGF0aXZlLXRvLXNpemUgb3JpZ2lu
UG9pbnQsIHdoZXJlIGFzIHRoZSBRR3JhcGhpY3NWaWV3IGhhcyBhIHBpeGVsIG9yaWdpblBvaW50
LgpAQCAtNTE5LDYgKzUxNCw4IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6dXBkYXRlVHJh
bnNmb3JtKCkKICAgICBpZiAoIWludmVyc2VPaykKICAgICAgICAgcmV0dXJuOwogCisgICAgcURl
YnVnKCkgPDwgdHJhbnNmb3JtMkQ7CisKICAgICBzZXRUcmFuc2Zvcm0odHJhbnNmb3JtMkQpOwog
CiAgICAgY29uc3QgUUxpc3Q8UUdyYXBoaWNzSXRlbSo+IGNoaWxkcmVuID0gY2hpbGRJdGVtcygp
OwpAQCAtNTU5LDYgKzU1Niw3IEBAIFFSZWN0RiBHcmFwaGljc0xheWVyUXRJbXBsOjpib3VuZGlu
Z1JlY3QoKSBjb25zdAogCiB2b2lkIEdyYXBoaWNzTGF5ZXJRdEltcGw6OnBhaW50KFFQYWludGVy
KiBwYWludGVyLCBjb25zdCBRU3R5bGVPcHRpb25HcmFwaGljc0l0ZW0qIG9wdGlvbiwgUVdpZGdl
dCogd2lkZ2V0KQogeworICAgIHFEZWJ1ZygpIDw8IF9fZnVuY19fIDw8IG9wdGlvbi0+ZXhwb3Nl
ZFJlY3Q7CiAgICAgaWYgKG1fY3VycmVudENvbnRlbnQuYmFja2dyb3VuZENvbG9yLmlzVmFsaWQo
KSkKICAgICAgICAgcGFpbnRlci0+ZmlsbFJlY3Qob3B0aW9uLT5yZWN0LCBRQ29sb3IobV9jdXJy
ZW50Q29udGVudC5iYWNrZ3JvdW5kQ29sb3IpKTsKIApAQCAtODM4LDYgKzgzNiw3IEBAIFBhc3NP
d25QdHI8R3JhcGhpY3NMYXllcj4gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJD
bGllbnQqIGNsaWVudCkKICovCiB2b2lkIEdyYXBoaWNzTGF5ZXJRdDo6c2V0TmVlZHNEaXNwbGF5
KCkKIHsKKyAgICBxRGVidWcoKSA8PCBfX2Z1bmNfXyA8PCB0aGlzOwogICAgIG1faW1wbC0+bV9w
ZW5kaW5nQ29udGVudC5yZWdpb25Ub1VwZGF0ZSA9IFFSZWdpb24oUVJlY3QoUVBvaW50KDAsIDAp
LCBRU2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSkpOwogICAgIG1faW1wbC0+
bm90aWZ5Q2hhbmdlKEdyYXBoaWNzTGF5ZXJRdEltcGw6OkRpc3BsYXlDaGFuZ2UpOwogfQpAQCAt
ODQ2LDYgKzg0NSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0OjpzZXROZWVkc0Rpc3BsYXkoKQog
Ki8KIHZvaWQgR3JhcGhpY3NMYXllclF0OjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogeworICAgIHFEZWJ1ZygpIDw8IF9fZnVuY19fOwogICAgIG1faW1wbC0+
bV9wZW5kaW5nQ29udGVudC5yZWdpb25Ub1VwZGF0ZSB8PSBRUmVjdEYocmVjdCkudG9BbGlnbmVk
UmVjdCgpOwogICAgIG1faW1wbC0+bm90aWZ5Q2hhbmdlKEdyYXBoaWNzTGF5ZXJRdEltcGw6OkRp
c3BsYXlDaGFuZ2UpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9UZXh0dXJlTWFwcGVyUXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0
dXJlTWFwcGVyUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYzA1
ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1
cmVNYXBwZXJRdC5jcHAKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEw
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAidGV4bWFwL1Rl
eHR1cmVNYXBwZXIuaCIKKworI2luY2x1ZGUgIlF0Q29yZS9xZGVidWcuaCIKKyNpbmNsdWRlICJR
dEd1aS9xcGFpbnRlbmdpbmUuaCIKKyNpbmNsdWRlICJRdEd1aS9xcGl4bWFwLmgiCisKKyNpZmRl
ZiBRVF9PUEVOR0xfTElCCisjIGluY2x1ZGUgIm9wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCIKKyNl
bmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJpdG1hcFRleHR1cmVRdCA6IHB1
YmxpYyBCaXRtYXBUZXh0dXJlIHsKKyAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlclF0Owor
cHVibGljOgorICAgIEJpdG1hcFRleHR1cmVRdCgpIHt9CisgICAgdmlydHVhbCB2b2lkIGRlc3Ry
b3koKTsKKyAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUo
bV9waXhtYXAud2lkdGgoKSwgbV9waXhtYXAuaGVpZ2h0KCkpOyB9CisgICAgdmlydHVhbCB2b2lk
IHJlc2V0KGNvbnN0IEludFNpemUmLCBib29sIG9wYXF1ZSk7CisgICAgdmlydHVhbCBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOwor
ICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c1RvSW1hZ2UoSW1hZ2UqKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2F2ZShjb25zdCBTdHJpbmcmIHBh
dGgpOworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gIW1fcGl4bWFw
LmlzTnVsbCgpOyB9CisgICAgdmlydHVhbCBib29sIGFsbG93T2ZmbGluZVRleHR1cmVVcGxvYWQo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgSW50UmVjdCBzb3VyY2VSZWN0KCkgY29uc3Qg
eyByZXR1cm4gSW50UmVjdCgwLCAwLCBjb250ZW50U2l6ZSgpLndpZHRoKCksIGNvbnRlbnRTaXpl
KCkuaGVpZ2h0KCkpOyB9Citwcml2YXRlOgorICAgIFFQYWludGVyIG1fcGFpbnRlcjsKKyAgICBR
UGl4bWFwIG1fcGl4bWFwOworfTsKKworY2xhc3MgVGV4dHVyZU1hcHBlclF0IDogcHVibGljIFRl
eHR1cmVNYXBwZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25z
dCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRt
YXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7CisgICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJp
dG1hcFRleHR1cmUqIHN1cmZhY2UpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDbGlwKGNvbnN0IElu
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9vdCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgVGV4dHVyZU1hcHBlclF0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCk7CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiB0eXBlKCkgY29uc3QgeyByZXR1cm4gIlF0
IjsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJl
KCk7CisKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKFFQYWludGVyICpwYWludGVyKQorICAg
IHsKKyAgICAgICAgcGFpbnRlci0+c2V0UmVuZGVySGludHMoUVBhaW50ZXI6OkFudGlhbGlhc2lu
ZyB8IFFQYWludGVyOjpTbW9vdGhQaXhtYXBUcmFuc2Zvcm0sIGZhbHNlKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgUVBhaW50ZXIqIG1fcGFpbnRlcjsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVy
ZVF0PiBtX2N1cnJlbnRTdXJmYWNlOworfTsKKwordm9pZCBCaXRtYXBUZXh0dXJlUXQ6OmRlc3Ry
b3koKQoreworICAgIGlmIChtX3BpeG1hcC5wYWludGluZ0FjdGl2ZSgpKQorICAgICAgICBxRmF0
YWwoIkRlc3Ryb3lpbmcgYW4gYWN0aXZlIHBpeG1hcCIpOworICAgIG1fcGl4bWFwID0gUVBpeG1h
cCgpOworfQorCit2b2lkIEJpdG1hcFRleHR1cmVRdDo6cmVzZXQoY29uc3QgSW50U2l6ZSYgc2l6
ZSwgYm9vbCBpc09wYXF1ZSkKK3sKKyAgICBCaXRtYXBUZXh0dXJlOjpyZXNldChzaXplLCBpc09w
YXF1ZSk7CisKKyAgICBpZiAoc2l6ZS53aWR0aCgpID4gbV9waXhtYXAuc2l6ZSgpLndpZHRoKCkg
fHwgc2l6ZS5oZWlnaHQoKSA+IG1fcGl4bWFwLnNpemUoKS5oZWlnaHQoKSB8fCBtX3BpeG1hcC5p
c051bGwoKSkKKyAgICAgICAgbV9waXhtYXAgPSBRUGl4bWFwKHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSk7CisgICAgaWYgKCFpc09wYXF1ZSkKKyAgICAgICAgbV9waXhtYXAuZmlsbChRdDo6
dHJhbnNwYXJlbnQpOworfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogQml0bWFwVGV4dHVy
ZVF0OjpiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBtX3BhaW50
ZXIuYmVnaW4oJm1fcGl4bWFwKTsKKyAgICBUZXh0dXJlTWFwcGVyUXQ6OmluaXRpYWxpemUoJm1f
cGFpbnRlcik7CisgICAgbV9wYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29t
cG9zaXRpb25Nb2RlX0NsZWFyKTsKKyAgICBtX3BhaW50ZXIuZmlsbFJlY3QoUVJlY3QoZGlydHlS
ZWN0KSwgUXQ6OnRyYW5zcGFyZW50KTsKKyAgICBtX3BhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2Rl
KFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlT3Zlcik7CisgICAgcmV0dXJuICZtX3Bh
aW50ZXI7Cit9CisKK3ZvaWQgQml0bWFwVGV4dHVyZVF0OjplbmRQYWludCgpCit7CisgICAgbV9w
YWludGVyLmVuZCgpOworfQorCitib29sIEJpdG1hcFRleHR1cmVRdDo6c2F2ZShjb25zdCBTdHJp
bmcmIHBhdGgpCit7CisgICAgcmV0dXJuIG1fcGl4bWFwLnNhdmUocGF0aCwgIlBORyIpOworfQor
Cit2b2lkIEJpdG1hcFRleHR1cmVRdDo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkK
K3sKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm47CisgICAgY29uc3QgUVBpeG1hcCog
cGl4bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFw
aXhtYXApCisgICAgICAgIHJldHVybjsKKyAgICBCaXRtYXBUZXh0dXJlOjpyZXNldChwaXhtYXAt
PnNpemUoKSwgIXBpeG1hcC0+aGFzQWxwaGFDaGFubmVsKCkpOworICAgIG1fcGl4bWFwID0gKnBp
eG1hcDsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyUXQ6OnNldENsaXAoY29uc3QgSW50UmVjdCYg
cmVjdCkKK3sKKyAgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBtX2N1cnJlbnRTdXJmYWNlID8gJm1f
Y3VycmVudFN1cmZhY2UtPm1fcGFpbnRlciA6IG1fcGFpbnRlcjsKKyAgICAgcGFpbnRlci0+c2V0
Q2xpcFJlY3QocmVjdCk7Cit9CisKK1RleHR1cmVNYXBwZXJRdDo6VGV4dHVyZU1hcHBlclF0KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCkKKyAgICA6IFRleHR1cmVNYXBwZXIoY29udGV4dCkKKyAg
ICAsIG1fcGFpbnRlcihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSkKKyAgICAsIG1fY3VycmVu
dFN1cmZhY2UoMCkKK3sKKyAgICBUZXh0dXJlTWFwcGVyUXQ6OmluaXRpYWxpemUobV9wYWludGVy
KTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyUXQ6OmJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUq
IHN1cmZhY2UpCit7CisgICAgaWYgKG1fY3VycmVudFN1cmZhY2UgPT0gc3VyZmFjZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmIChtX2N1cnJlbnRTdXJmYWNlKQorICAgICAgICBtX2N1cnJlbnRT
dXJmYWNlLT5tX3BhaW50ZXIuZW5kKCk7CisgICAgaWYgKCFzdXJmYWNlKSB7CisgICAgICAgIG1f
Y3VycmVudFN1cmZhY2UgPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEJpdG1hcFRl
eHR1cmVRdCogc3VyZmFjZVF0ID0gc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVyZVF0Kj4oc3VyZmFj
ZSk7CisgICAgaWYgKCFzdXJmYWNlUXQtPm1fcGFpbnRlci5pc0FjdGl2ZSgpKQorICAgICAgICBz
dXJmYWNlUXQtPm1fcGFpbnRlci5iZWdpbigmc3VyZmFjZVF0LT5tX3BpeG1hcCk7CisgICAgbV9j
dXJyZW50U3VyZmFjZSA9IHN1cmZhY2VRdDsKK30KKworCit2b2lkIFRleHR1cmVNYXBwZXJRdDo6
ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYg
dGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3Bh
Y2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCit7CisgICAgY29uc3QgQml0
bWFwVGV4dHVyZVF0JiB0ZXh0dXJlUXQgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJl
UXQmPih0ZXh0dXJlKTsKKyAgICBRUGFpbnRlciogcGFpbnRlciA9IG1fcGFpbnRlcjsKKyAgICBR
UGl4bWFwIHBpeG1hcCA9IHRleHR1cmVRdC5tX3BpeG1hcDsKKyAgICBpZiAobV9jdXJyZW50U3Vy
ZmFjZSkKKyAgICAgICAgcGFpbnRlciA9ICZtX2N1cnJlbnRTdXJmYWNlLT5tX3BhaW50ZXI7CisK
KyAgICBpZiAobWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQoKSkgeworICAgICAg
ICBjb25zdCBCaXRtYXBUZXh0dXJlUXQqIG1hc2tRdCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1h
cFRleHR1cmVRdCo+KG1hc2tUZXh0dXJlKTsKKyAgICAgICAgUVBpeG1hcCBpbnRlcm1lZGlhdGVQ
aXhtYXAocGl4bWFwLnNpemUoKSk7CisgICAgICAgIGludGVybWVkaWF0ZVBpeG1hcC5maWxsKFF0
Ojp0cmFuc3BhcmVudCk7CisgICAgICAgIFFQYWludGVyIG1hc2tQYWludGVyKCZpbnRlcm1lZGlh
dGVQaXhtYXApOworICAgICAgICBtYXNrUGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50
ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2UpOworICAgICAgICBtYXNrUGFpbnRlci5kcmF3UGl4
bWFwKDAsIDAsIHBpeG1hcCk7CisgICAgICAgIG1hc2tQYWludGVyLnNldENvbXBvc2l0aW9uTW9k
ZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX0Rlc3RpbmF0aW9uSW4pOworICAgICAgICBtYXNr
UGFpbnRlci5kcmF3UGl4bWFwKFFSZWN0KDAsIDAsIHBpeG1hcC53aWR0aCgpLCBwaXhtYXAuaGVp
Z2h0KCkpLCBtYXNrUXQtPm1fcGl4bWFwLCBtYXNrUXQtPnNvdXJjZVJlY3QoKSk7CisgICAgICAg
IG1hc2tQYWludGVyLmVuZCgpOworICAgICAgICBwaXhtYXAgPSBpbnRlcm1lZGlhdGVQaXhtYXA7
CisgICAgfQorCisgICAgY29uc3QgcXJlYWwgcHJldk9wYWNpdHkgPSBwYWludGVyLT5vcGFjaXR5
KCk7CisgICAgY29uc3QgUVRyYW5zZm9ybSBwcmV2VHJhbnNmb3JtID0gcGFpbnRlci0+dHJhbnNm
b3JtKCk7CisgICAgcGFpbnRlci0+c2V0T3BhY2l0eShvcGFjaXR5KTsKKyAgICBwYWludGVyLT5z
ZXRUcmFuc2Zvcm0obWF0cml4LCB0cnVlKTsKKyAgICBwYWludGVyLT5kcmF3UGl4bWFwKHRhcmdl
dFJlY3QsIHBpeG1hcCwgdGV4dHVyZVF0LnNvdXJjZVJlY3QoKSk7CisgICAgcGFpbnRlci0+c2V0
VHJhbnNmb3JtKHByZXZUcmFuc2Zvcm0pOworICAgIHBhaW50ZXItPnNldE9wYWNpdHkocHJldk9w
YWNpdHkpOworfQorCitQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXI+IFRleHR1cmVNYXBwZXI6OmNy
ZWF0ZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisjaWZkZWYgUVRfT1BFTkdMX0xJQgor
ICAgIGlmIChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+cGFpbnRFbmdpbmUoKS0+dHlwZSgp
ID09IFFQYWludEVuZ2luZTo6T3BlbkdMMikKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBU
ZXh0dXJlTWFwcGVyR0woY29udGV4dCkpOworI2VuZGlmCisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBUZXh0dXJlTWFwcGVyUXQoY29udGV4dCkpOworfQorCisKK1Bhc3NSZWZQdHI8Qml0bWFwVGV4
dHVyZT4gVGV4dHVyZU1hcHBlclF0OjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEJpdG1hcFRleHR1cmVRdCgpKTsKK30KKworI2lmZGVmIFFUX09QRU5HTF9MSUIK
K2NsYXNzIFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyUXQgOiBwdWJsaWMgUkdCQTMyUHJlbXVs
dGltcGxpZWRCdWZmZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgcmVjdCwgYm9vbCBvcGFxdWUpCisgICAg
eworICAgICAgICBtX2ltYWdlID0gUUltYWdlKHJlY3Quc2l6ZSgpLndpZHRoKCksIHJlY3Quc2l6
ZSgpLmhlaWdodCgpLCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZCk7CisgICAg
ICAgIGlmICghb3BhcXVlKQorICAgICAgICAgICAgbV9pbWFnZS5maWxsKDApOworICAgICAgICBt
X3BhaW50ZXIuYmVnaW4oJm1faW1hZ2UpOworICAgICAgICBUZXh0dXJlTWFwcGVyUXQ6OmluaXRp
YWxpemUoJm1fcGFpbnRlcik7CisgICAgICAgIG1fcGFpbnRlci50cmFuc2xhdGUoLXJlY3QueCgp
LCAtcmVjdC55KCkpOworICAgICAgICByZXR1cm4gJm1fcGFpbnRlcjsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgZW5kUGFpbnQoKSB7IG1fcGFpbnRlci5lbmQoKTsgfQorICAgIHZpcnR1YWwg
Y29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuY29uc3RCaXRzKCk7IH0K
KworcHJpdmF0ZToKKyAgICBRUGFpbnRlciBtX3BhaW50ZXI7CisgICAgUUltYWdlIG1faW1hZ2U7
Cit9OworCitQYXNzUmVmUHRyPFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyPiBSR0JBMzJQcmVt
dWx0aW1wbGllZEJ1ZmZlcjo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJH
QkEzMlByZW11bHRpbXBsaWVkQnVmZmVyUXQoKSk7Cit9CisKKyNlbmRpZgorfTsKKworI2luY2x1
ZGUgPFRleHR1cmVNYXBwZXJRdC5tb2M+CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY0NjQ4ZgotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyLmNwcApAQCAtMCwwICsxLDE0NzIgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgor
CisjaW5jbHVkZSAiQ3VycmVudFRpbWUuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIYXNoTWFwLmgiCisjaW5jbHVkZSAi
SW1hZ2UuaCIKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSAi
VGltZXIuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiVW5pdEJlemllci5oIgorCisj
ZGVmaW5lIERFQlVHX1RFWE1BUF9GUFMgMQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVj
dCBUZXhtYXBQYWludE9wdGlvbnMgeworICAgIEJpdG1hcFRleHR1cmUqIHN1cmZhY2U7CisgICAg
VGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcjsKKyAgICBHcmFwaGljc0NvbnRleHQqIGdjOwor
ICAgIFRleHR1cmVNYXBwZXJOb2RlKiByb290TGF5ZXI7CisgICAgZmxvYXQgb3BhY2l0eTsKKyAg
ICBJbnRSZWN0IHNjaXNzb3JSZWN0OworICAgIEludFJlY3QgdmlzaWJsZVJlY3Q7Cit9OworY2xh
c3MgVGV4dHVyZU1hcHBlckNhY2hlIHsKK3B1YmxpYzoKKyAgICB2b2lkIG1hcmsoQml0bWFwVGV4
dHVyZSogdGV4dHVyZSk7CisKKyAgICBjbGFzcyBFbnRyeSB7CisgICAgcHVibGljOgorICAgICAg
ICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZTsKKyAgICAgICAgRW50cnkoKSA6IHByZXZp
b3VzQ29zdCgwKSB7IH0KKyAgICAgICAgaW5saW5lIGludCBjYWxjdWxhdGVDb3N0KCkgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKCF0ZXh0dXJlIHx8ICF0ZXh0dXJlLT5pc1ZhbGlk
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjb25zdCBJbnRTaXpl
IHN6ID0gdGV4dHVyZS0+c2l6ZSgpOworICAgICAgICAgICAgcmV0dXJuIHN6LndpZHRoKCkgKiBz
ei5oZWlnaHQoKSAqIDQ7CisgICAgICAgIH0KKyAgICAgICAgRW50cnkoQml0bWFwVGV4dHVyZSog
bmV3VGV4dHVyZSkKKyAgICAgICAgICAgIDogdGV4dHVyZShuZXdUZXh0dXJlKQorICAgICAgICB7
CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEVudHJ5JiBvdGhlcikg
Y29uc3QgeyByZXR1cm4gdGV4dHVyZSA9PSBvdGhlci50ZXh0dXJlOyB9CisgICAgICAgIGludCBw
cmV2aW91c0Nvc3Q7CisgICAgfTsKKworICAgIFRleHR1cmVNYXBwZXJDYWNoZSgpIDogbV90b3Rh
bENvc3QoMCkge30KKworICAgIHZvaWQgcHVyZ2UoKTsKKyAgICBWZWN0b3I8RW50cnk+IG1fZGF0
YTsKKyAgICBpbnQgbV90b3RhbENvc3Q7CisjaWZuZGVmIFRFWE1BUF9URVhUVVJFX0NBQ0hFX0tC
UworI2RlZmluZSBURVhNQVBfVEVYVFVSRV9DQUNIRV9LQlMgMjQgKiAxMDI0CisjZW5kaWYKKyAg
ICBzdGF0aWMgY29uc3QgaW50IE1heENvc3QgPSBURVhNQVBfVEVYVFVSRV9DQUNIRV9LQlMgKiAx
MDI0OworICAgIHN0YXRpYyBjb25zdCBpbnQgUHVyZ2VBbW91bnQgPSBNYXhDb3N0IC8gNDsKK307
CisKKwordm9pZCBUZXh0dXJlTWFwcGVyQ2FjaGU6OnB1cmdlKCkKK3sKKyAgICAvLyBXZSBuZWVk
IGFuIGFjdGl2ZSBHTCBjb250ZXh0LCBiZWNhdXNlIHdlIG1pZ2h0IGNhbGwgZ2xEZWxldGVUZXh0
dXJlcy4KKyAgICBjb25zdCBpbnQgc2l6ZSA9IG1fZGF0YS5zaXplKCk7CisKKyAgICBpZiAobV90
b3RhbENvc3QgPD0gVGV4dHVyZU1hcHBlckNhY2hlOjpNYXhDb3N0KQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBFbnN1cmUgdGhhdCB3ZSBoYXZlIHRoZSByaWdodCBjb3VudC4gSXQgbWlnaHQg
YmUgaW5hY2N1cmF0ZSBpZiBjb250ZW50IGNoYW5nZWQgc2l6ZS4KKyAgICAvLyBXZSBvbmx5IGRv
IHRoaXMgd2hlbiB3ZSdyZSBhY3R1YWxseSByZWFkeSB0byBwdXJnZS4KKyAgICBtX3RvdGFsQ29z
dCA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIG1fdG90
YWxDb3N0ICs9IG1fZGF0YVtpXS5jYWxjdWxhdGVDb3N0KCk7CisKKyAgICBmb3IgKGludCBpID0g
c2l6ZS0xOyBpID49IDAgJiYgbV90b3RhbENvc3QgPiBUZXh0dXJlTWFwcGVyQ2FjaGU6Ok1heENv
c3QgLSBUZXh0dXJlTWFwcGVyQ2FjaGU6OlB1cmdlQW1vdW50OyAtLWkpIHsKKyAgICAgICAgRW50
cnkmIGVudHJ5ID0gbV9kYXRhW2ldOworICAgICAgICBpZiAoZW50cnkudGV4dHVyZS0+aXNMb2Nr
ZWQoKSB8fCAhZW50cnkudGV4dHVyZS0+aXNWYWxpZCgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIG1fdG90YWxDb3N0IC09IGVudHJ5LnByZXZpb3VzQ29zdDsKKyAgICAgICAgZW50
cnkudGV4dHVyZS0+ZGVzdHJveSgpOworICAgICAgICBtX2RhdGEucmVtb3ZlKGkpOworICAgIH0K
KworICAgIExPRygiW1RleHR1cmVNYXBwZXJdIFB1cmdlZCAlMi40Zksgb2YgdGV4dHVyZXMoJWQp
IFslMi40ZksvJWRdXG4iLCBmbG9hdChiZWZvcmUgLSBtX3RvdGFsQ29zdCkgLyAxMDI0LAorICAg
ICAgICAgICBpbnQoc2l6ZS1tX2RhdGEuc2l6ZSgpKSwgZmxvYXQobV90b3RhbENvc3QpIC8gMTAy
NCwgbV9kYXRhLnNpemUoKSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckNhY2hlOjptYXJrKEJp
dG1hcFRleHR1cmUgKnRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlIHx8ICF0ZXh0dXJlLT5p
c1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEVudHJ5IGVudHJ5KHRleHR1cmUpOwor
ICAgIHNpemVfdCBpbmRleCA9IG1fZGF0YS5maW5kKGVudHJ5KTsKKyAgICBpZiAoIWluZGV4KQor
ICAgICAgICByZXR1cm47CisKKyAgICBMT0coIllheWEhISAlZCBbJWRdIFslZF0iLCBpbmRleCwg
bV9kYXRhLnNpemUoKSwgbV90b3RhbENvc3QpOworICAgIGlmIChpbmRleCA8IG1fZGF0YS5zaXpl
KCkpIAorICAgICAgICBtX2RhdGEucmVtb3ZlKGluZGV4KTsKKyAgICBjb25zdCBpbnQgY29zdCA9
IGVudHJ5LmNhbGN1bGF0ZUNvc3QoKTsKKyAgICBtX3RvdGFsQ29zdCAtPSBlbnRyeS5wcmV2aW91
c0Nvc3Q7CisgICAgbV90b3RhbENvc3QgKz0gKGVudHJ5LnByZXZpb3VzQ29zdCA9IGNvc3QpOwor
ICAgIG1fZGF0YS5wcmVwZW5kKGVudHJ5KTsKK30KKworVGV4dHVyZU1hcHBlckNhY2hlIGdUZXh0
dXJlTWFwcGVyQ2FjaGU7CisKK2NsYXNzIFRleHR1cmVNYXBwZXJDYWNoZUxvY2sgeworcHVibGlj
OgorICAgIFRleHR1cmVNYXBwZXJDYWNoZUxvY2soQml0bWFwVGV4dHVyZSogdGV4dHVyZSkgOiBt
X3RleHR1cmUodGV4dHVyZSkKKyAgICB7CisgICAgICAgIGlmIChtX3RleHR1cmUpCisgICAgICAg
ICAgICBtX3RleHR1cmUtPmxvY2soKTsKKyAgICB9CisgICAgflRleHR1cmVNYXBwZXJDYWNoZUxv
Y2soKQorICAgIHsKKyAgICAgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgICAgIG1fdGV4dHVy
ZS0+dW5sb2NrKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJl
PiBtX3RleHR1cmU7Cit9OworCitjbGFzcyBUZXh0dXJlTWFwcGVyTm9kZSA6IHB1YmxpYyBUZXh0
dXJlTWFwcGVyQ29udGVudExheWVyIHsKKworcHVibGljOgorICAgIC8vIFRoaXMgc2V0IG9mIGZs
YWdzIGhlbHAgdXMgZGVmZXIgd2hpY2ggcHJvcGVydGllcyBvZiB0aGUgbGF5ZXIgaGF2ZSBiZWVu
CisgICAgLy8gbW9kaWZpZWQgYnkgdGhlIGNvbXBvc2l0b3IsIHNvIHdlIGNhbiBrbm93IHdoYXQg
dG8gbG9vayBmb3IgaW4gdGhlIG5leHQgZmx1c2guCisgICAgZW51bSBDaGFuZ2VNYXNrIHsKKyAg
ICAgICAgTm9DaGFuZ2VzID0gICAgICAgICAgICAgICAgIDAsCisKKyAgICAgICAgUGFyZW50Q2hh
bmdlID0gICAgICAgICAgICAgICgxTCA8PCAwKSwKKyAgICAgICAgQ2hpbGRyZW5DaGFuZ2UgPSAg
ICAgICAgICAgICgxTCA8PCAxKSwKKyAgICAgICAgTWFza0xheWVyQ2hhbmdlID0gICAgICAgICAg
ICgxTCA8PCAyKSwKKyAgICAgICAgUG9zaXRpb25DaGFuZ2UgPSAgICAgICAgICAgICgxTCA8PCAz
KSwKKworICAgICAgICBBbmNob3JQb2ludENoYW5nZSA9ICAgICAgICAgKDFMIDw8IDQpLAorICAg
ICAgICBTaXplQ2hhbmdlICA9ICAgICAgICAgICAgICAgKDFMIDw8IDUpLAorICAgICAgICBUcmFu
c2Zvcm1DaGFuZ2UgPSAgICAgICAgICAgKDFMIDw8IDYpLAorICAgICAgICBDb250ZW50Q2hhbmdl
ID0gICAgICAgICAgICAgKDFMIDw8IDcpLAorCisgICAgICAgIENvbnRlbnRzT3JpZW50YXRpb25D
aGFuZ2UgPSAoMUwgPDwgOSksCisgICAgICAgIE9wYWNpdHlDaGFuZ2UgPSAgICAgICAgICAgICAo
MUwgPDwgMTApLAorICAgICAgICBDb250ZW50c1JlY3RDaGFuZ2UgPSAgICAgICAgKDFMIDw8IDEx
KSwKKworICAgICAgICBQcmVzZXJ2ZXMzRENoYW5nZSA9ICAgICAgICAgKDFMIDw8IDEyKSwKKyAg
ICAgICAgTWFza3NUb0JvdW5kc0NoYW5nZSA9ICAgICAgICgxTCA8PCAxMyksCisgICAgICAgIERy
YXdzQ29udGVudENoYW5nZSA9ICAgICAgICAoMUwgPDwgMTQpLAorICAgICAgICBDb250ZW50c09w
YXF1ZUNoYW5nZSA9ICAgICAgKDFMIDw8IDE1KSwKKworICAgICAgICBCYWNrZmFjZVZpc2liaWxp
dHlDaGFuZ2UgPSAgKDFMIDw8IDE2KSwKKyAgICAgICAgQ2hpbGRyZW5UcmFuc2Zvcm1DaGFuZ2Ug
PSAgICgxTCA8PCAxNyksCisgICAgICAgIERpc3BsYXlDaGFuZ2UgPSAgICAgICAgICAgICAoMUwg
PDwgMTgpLAorICAgICAgICBCYWNrZ3JvdW5kQ29sb3JDaGFuZ2UgPSAgICAgKDFMIDw8IDE5KSwK
KworICAgICAgICBSZXBsaWNhTGF5ZXJDaGFuZ2UgPSAgICAgICAgKDFMIDw8IDIwKQorICAgIH07
CisKKyAgICAvLyBUaGUgY29tcG9zaXRvciBsZXRzIHVzIHNwZWNpYWwtY2FzZSBpbWFnZXMgYW5k
IGNvbG9ycywgc28gd2UgdHJ5IHRvIGRvIHNvLgorICAgIGVudW0gU3RhdGljQ29udGVudFR5cGUg
eyBIVE1MQ29udGVudFR5cGUsIERpcmVjdEltYWdlQ29udGVudFR5cGUsIENvbG9yQ29udGVudFR5
cGUsIE1lZGlhQ29udGVudFR5cGUsIENhbnZhczNEQ29udGVudFR5cGV9OworCisgICAgVGV4dHVy
ZU1hcHBlck5vZGUqIHJvb3RMYXllcigpOworCisgICAgVGV4dHVyZU1hcHBlck5vZGUoR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIqIG5ld0xheWVyKTsKKyAgICB2aXJ0dWFsIH5UZXh0dXJlTWFw
cGVyTm9kZSgpOworCisgICAgdm9pZCBjbGVhckRpcmVjdEltYWdlKCk7CisgICAgdm9pZCBjb21w
dXRlVHJhbnNmb3JtYXRpb25zKCk7CisgICAgSW50U2l6ZSBuZWFyZXN0U3VyZmFjZVNpemUoKSBj
b25zdDsKKyAgICB2b2lkIGNvbXB1dGVSZXBsaWNhVHJhbnNmb3JtKCk7CisgICAgdm9pZCBjb21w
dXRlTGF5ZXJUeXBlKCk7CisgICAgdm9pZCBjb21wdXRlTG9jYWxUcmFuc2Zvcm0oKTsKKyAgICB2
b2lkIGZsYXR0ZW5UbzJEU3BhY2VJZk5lY2Vzc2FyeSgpOworICAgIHZvaWQgaW5pdGlhbGl6ZVRl
eHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciopOworICAgIHZvaWQgaW52YWxpZGF0ZVRyYW5zZm9y
bSgpOworICAgIHZvaWQgbm90aWZ5Q2hhbmdlKENoYW5nZU1hc2spOworICAgIHZvaWQgc3luY0Nv
bXBvc2l0aW5nU3RhdGUoYm9vbCByZWN1cnNlKTsKKyAgICB2b2lkIHBlcmZvcm1Qb3N0U3luY09w
ZXJhdGlvbnMoKTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOworICAgIHZvaWQgc2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KEludFJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwVGV4dHVy
ZU1hcHBlcigpOworCisgICAgdm9pZCBwYWludFJlY3Vyc2l2ZShUZXhtYXBQYWludE9wdGlvbnMg
b3B0aW9ucyk7CisgICAgdm9pZCBwYWludFNlbGYoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBl
ciwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIEJpdG1hcFRleHR1
cmUqIHJlcGxpY2FNYXNrVGV4dHVyZSwgYm9vbCBpc1N1cmZhY2UpOworICAgIHZvaWQgdXBsb2Fk
VGV4dHVyZUZyb21Db250ZW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpOworCisgICAg
aW50IGNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCgpIGNvbnN0OworICAgIGJvb2wgaGFzU3Vy
ZmFjZURlc2NlbmRhbnRzKCkgY29uc3Q7CisKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3NpemU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRQbGF0Zm9ybUxheWVyQ2xpZW50
KFRleHR1cmVNYXBwZXJMYXllckNsaWVudCopOworICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwg
Y29uc3QgSW50UmVjdCYgZXhwb3NlZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHkpOworCisgICAgc3RhdGljIFRleHR1cmVNYXBwZXJOb2Rl
KiB0b1RleHR1cmVNYXBwZXJOb2RlKEdyYXBoaWNzTGF5ZXIqKTsKK3B1YmxpYzoKKyAgICBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlciogbV9sYXllcjsKKyAgICBjb25zdCBjaGFyKiBtX2xhc3RU
ZXh0dXJlTWFwcGVyVHlwZTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlcj4gbV9sYXN0VGV4dHVy
ZU1hcHBlcjsKKyAgICBzdHJ1Y3QgVHJhbnNmb3JtRGF0YSB7CisgICAgICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGJhc2UsIHRhcmdldCwgcmVwbGljYSwgZm9yRGVzY2VuZGFudHMsIHBlcnNwZWN0
aXZlLCBsb2NhbDsKKyAgICAgICAgSW50UmVjdCB0YXJnZXRCb3VuZGluZ1JlY3Q7CisgICAgICAg
IGZsb2F0IGNlbnRlclo7CisgICAgICAgIGJvb2wgZGlydHksIGxvY2FsRGlydHksIHBlcnNwZWN0
aXZlRGlydHk7CisgICAgICAgIEludFJlY3QgYm91bmRpbmdSZWN0RnJvbVJvb3Q7CisgICAgICAg
IFRyYW5zZm9ybURhdGEoKSA6IGRpcnR5KHRydWUpLCBsb2NhbERpcnR5KHRydWUpLCBwZXJzcGVj
dGl2ZURpcnR5KHRydWUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBUcmFu
c2Zvcm1EYXRhIG1fdHJhbnNmb3JtczsKKworICAgIGVudW0gTGF5ZXJUeXBlIHsKKyAgICAgICAg
RGVmYXVsdExheWVyLAorICAgICAgICBSb290TGF5ZXIsCisgICAgICAgIFNjaXNzb3JMYXllciwK
KyAgICAgICAgQ2xpcExheWVyLAorICAgICAgICBUcmFuc3BhcmVuY3lMYXllcgorICAgIH07CisK
KyAgICBMYXllclR5cGUgbV9sYXllclR5cGU7CisKKyAgICBzdHJ1Y3QgQ29udGVudERhdGEgewor
ICAgICAgICBJbnRSZWN0IG5lZWRzRGlzcGxheVJlY3Q7CisgICAgICAgIGJvb2wgbmVlZHNEaXNw
bGF5OworICAgICAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3I7CisKKyAgICAgICAgU3RhdGljQ29u
dGVudFR5cGUgY29udGVudFR5cGU7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2U7CisgICAg
ICAgIFRleHR1cmVNYXBwZXJWaWRlb0xheWVyKiBtZWRpYTsKKworICAgICAgICBDb250ZW50RGF0
YSgpCisgICAgICAgICAgICA6IG5lZWRzRGlzcGxheShmYWxzZSkKKyAgICAgICAgICAgICwgY29u
dGVudFR5cGUoSFRNTENvbnRlbnRUeXBlKQorICAgICAgICAgICAgLCBpbWFnZSgwKQorICAgICAg
ICAgICAgLCBtZWRpYSgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgIH07CisKKyAgICBp
bmxpbmUgSW50UmVjdCB0YXJnZXRSZWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSA/IGZ1bGxSZWN0
KCkgOiBtX3N0YXRlLmNvbnRlbnRzUmVjdDsKKyAgICB9CisKKyAgICBpbmxpbmUgSW50UmVjdCBm
dWxsUmVjdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAwLCBtX3Np
emUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSW50UmVj
dCByZXBsaWNhUmVjdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9sYXllclR5cGUg
PT0gVHJhbnNwYXJlbmN5TGF5ZXIgPyBJbnRSZWN0KDAsIDAsIG1fbmVhcmVzdFN1cmZhY2VTaXpl
LndpZHRoKCksIG1fbmVhcmVzdFN1cmZhY2VTaXplLmhlaWdodCgpKSA6IGZ1bGxSZWN0KCk7Cisg
ICAgfQorCisgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1fdGV4dHVyZTsKKyAgICBSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gbV9zdXJmYWNlLCBtX3JlcGxpY2FTdXJmYWNlOworCisgICAgQ29udGVu
dERhdGEgbV9wZW5kaW5nQ29udGVudDsKKyAgICBDb250ZW50RGF0YSBtX2N1cnJlbnRDb250ZW50
OworCisgICAgVmVjdG9yPFRleHR1cmVNYXBwZXJOb2RlKj4gbV9jaGlsZHJlbjsKKyAgICBUZXh0
dXJlTWFwcGVyTm9kZSogbV9wYXJlbnQ7CisgICAgVGV4dHVyZU1hcHBlck5vZGUqIG1fZWZmZWN0
VGFyZ2V0OworICAgIGludCBtX2NoYW5nZU1hc2s7CisgICAgSW50U2l6ZSBtX3NpemUsIG1fbmVh
cmVzdFN1cmZhY2VTaXplOworICAgIFN0cmluZyBtX25hbWU7CisgICAgVGV4dHVyZU1hcHBlckxh
eWVyQ2xpZW50KiBtX3BsYXRmb3JtQ2xpZW50OworCisgICAgc3RydWN0IFN0YXRlIHsKKyAgICAg
ICAgRmxvYXRQb2ludCBwb3M7CisgICAgICAgIEZsb2F0UG9pbnQzRCBhbmNob3JQb2ludDsKKyAg
ICAgICAgRmxvYXRTaXplIHNpemU7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5z
Zm9ybTsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRyZW5UcmFuc2Zvcm07Cisg
ICAgICAgIENvbG9yIGJhY2tncm91bmRDb2xvcjsKKyAgICAgICAgQ29sb3IgY3VycmVudENvbG9y
OworICAgICAgICBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRp
b24gZ2VvT3JpZW50YXRpb247CisgICAgICAgIEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29v
cmRpbmF0ZXNPcmllbnRhdGlvbiBjb250ZW50c09yaWVudGF0aW9uOworICAgICAgICBmbG9hdCBv
cGFjaXR5OworICAgICAgICBJbnRSZWN0IGNvbnRlbnRzUmVjdDsKKyAgICAgICAgaW50IGRlc2Nl
bmRhbnRzV2l0aENvbnRlbnQ7CisgICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBtYXNrTGF5ZXI7
CisgICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiByZXBsaWNhTGF5ZXI7CisgICAgICAgIGJvb2wg
cHJlc2VydmVzM0Q7CisgICAgICAgIGJvb2wgbWFza3NUb0JvdW5kczsKKyAgICAgICAgYm9vbCBk
cmF3c0NvbnRlbnQ7CisgICAgICAgIGJvb2wgY29udGVudHNPcGFxdWU7CisgICAgICAgIGJvb2wg
YmFja2ZhY2VWaXNpYmlsaXR5OworICAgICAgICBib29sIHZpc2libGU7CisgICAgICAgIGJvb2wg
ZGlydHk7CisgICAgICAgIGJvb2wgdGlsZWQ7CisgICAgICAgIGJvb2wgaGFzU3VyZmFjZURlc2Nl
bmRhbnRzOworCisgICAgICAgIFN0YXRlKCkKKyAgICAgICAgICAgIDogb3BhY2l0eSgxLmYpCisg
ICAgICAgICAgICAsIGRlc2NlbmRhbnRzV2l0aENvbnRlbnQoMCkKKyAgICAgICAgICAgICwgbWFz
a0xheWVyKDApCisgICAgICAgICAgICAsIHJlcGxpY2FMYXllcigwKQorICAgICAgICAgICAgLCBw
cmVzZXJ2ZXMzRChmYWxzZSkKKyAgICAgICAgICAgICwgbWFza3NUb0JvdW5kcyhmYWxzZSkKKyAg
ICAgICAgICAgICwgZHJhd3NDb250ZW50KGZhbHNlKQorICAgICAgICAgICAgLCBjb250ZW50c09w
YXF1ZShmYWxzZSkKKyAgICAgICAgICAgICwgYmFja2ZhY2VWaXNpYmlsaXR5KGZhbHNlKQorICAg
ICAgICAgICAgLCB2aXNpYmxlKHRydWUpCisgICAgICAgICAgICAsIGRpcnR5KHRydWUpCisgICAg
ICAgICAgICAsIHRpbGVkKGZhbHNlKQorICAgICAgICAgICAgLCBoYXNTdXJmYWNlRGVzY2VuZGFu
dHMoZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgIH07CisgICAgU3RhdGUgbV9zdGF0
ZTsKK307CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldE5lZWRzRGlzcGxheUluUmVjdChJ
bnRSZWN0IHJlY3QpCit7CisgICAgaWYgKG1fcGxhdGZvcm1DbGllbnQpIHsKKyAgICAgICAgaWYg
KG1fc3RhdGUuaGFzU3VyZmFjZURlc2NlbmRhbnRzKSB7CisgICAgICAgICAgICBtX3BsYXRmb3Jt
Q2xpZW50LT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICByZWN0LmludGVyc2VjdChJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBt
X3NpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBtX3BsYXRmb3JtQ2xpZW50LT5zZXROZWVkc0Rpc3BsYXlJblJl
Y3QocmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fcGFyZW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX3BhcmVudC0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJl
Y3QpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzZXROZWVkc0Rpc3BsYXkoKQorewor
ICAgIGlmIChtX2VmZmVjdFRhcmdldCkKKyAgICAgICAgbV9lZmZlY3RUYXJnZXQtPnNldE5lZWRz
RGlzcGxheSgpOworICAgIGlmIChtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0LmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX3N0YXRlLmRyYXdzQ29udGVudCB8fCBt
X2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlICE9IEhUTUxDb250ZW50VHlwZSkKKyAgICAgICAg
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KG1fdHJhbnNmb3Jtcy50YXJnZXRCb3VuZGluZ1JlY3QpOwor
fQorCisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldFBsYXRmb3JtTGF5ZXJDbGllbnQoVGV4
dHVyZU1hcHBlckxheWVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgbV9wbGF0Zm9ybUNsaWVudCA9
IGNsaWVudDsKK30KKworc3RhdGljIGludCBjb21wYXJlR3JhcGhpY3NMYXllcnNaVmFsdWUoY29u
c3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKK3sKKyAgICB0eXBlZGVmIGNvbnN0IFRleHR1cmVN
YXBwZXJOb2RlKiBOb2RlUHRyOworICAgIGNvbnN0IE5vZGVQdHIqIG5vZGVBID0gc3RhdGljX2Nh
c3Q8Y29uc3QgTm9kZVB0cio+KGEpOworICAgIGNvbnN0IE5vZGVQdHIqIG5vZGVCID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgTm9kZVB0cio+KGIpOworICAgIHJldHVybiBpbnQoKCgqbm9kZUEpLT5tX3Ry
YW5zZm9ybXMuY2VudGVyWiAtICgqbm9kZUIpLT5tX3RyYW5zZm9ybXMuY2VudGVyWikgKiAxMDAw
KTsKK30KK2lubGluZSBzdGF0aWMgdm9pZCBzb3J0QnlaT3JkZXIoVmVjdG9yPFRleHR1cmVNYXBw
ZXJOb2RlKiA+JiBhcnJheSwgaW50IGZpcnN0LCBpbnQgbGFzdCkKK3sKKyAgICBxc29ydChhcnJh
eS5kYXRhKCksIGFycmF5LnNpemUoKSwgc2l6ZW9mKFRleHR1cmVNYXBwZXJOb2RlKiksIGNvbXBh
cmVHcmFwaGljc0xheWVyc1pWYWx1ZSk7Cit9CisKK2Jvb2wgVGV4dHVyZU1hcHBlck5vZGU6Omhh
c1N1cmZhY2VEZXNjZW5kYW50cygpIGNvbnN0Cit7CisKKyAgICBpZiAobV9sYXllclR5cGUgPT0g
Q2xpcExheWVyIHx8IG1fbGF5ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVyIHx8IG1fc3RhdGUu
cmVwbGljYUxheWVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjb25zdCBpbnQgc2l6ZSA9
IG1fY2hpbGRyZW4uc2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQor
ICAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIGNoaWxkID0gbV9jaGlsZHJlbltpXSkKKyAg
ICAgICAgICAgIGlmIChjaGlsZC0+aGFzU3VyZmFjZURlc2NlbmRhbnRzKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworCit9CisKK3ZvaWQgVGV4dHVy
ZU1hcHBlck5vZGU6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IEludFNpemUmIHNp
emUsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFJlY3QmIGV4cG9zZWRSZWN0
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5KQor
eworICAgIC8vIG5lZWRzIGFjdGl2ZSBjb250ZXh0CisgICAgQVNTRVJUKG1fbGF5ZXJUeXBlID09
IFJvb3RMYXllcik7CisgICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KworI2lmIDAKKyAgICBXVEY6OlN0b3BXYXRjaCBzdG9wV2F0Y2g7CisgICAgKCJbVGV4dHVyZU1h
cHBlcl0gUm9vdFBhaW50ISFcbiIpOworI2VuZGlmCisKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBl
cj4gdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShnYyk7CisKKyAgICBpZiAo
dGV4dHVyZU1hcHBlci0+dHlwZSgpICE9IG1fbGFzdFRleHR1cmVNYXBwZXJUeXBlKQorICAgICAg
ICBnVGV4dHVyZU1hcHBlckNhY2hlLm1fZGF0YS5jbGVhcigpOworCisgICAgbV9sYXN0VGV4dHVy
ZU1hcHBlciA9IHRleHR1cmVNYXBwZXI7CisgICAgVGV4bWFwUGFpbnRPcHRpb25zIG9wdDsKKyAg
ICBvcHQub3BhY2l0eSA9IDE7CisgICAgb3B0LnJvb3RMYXllciA9IHRoaXM7CisgICAgb3B0LnNj
aXNzb3JSZWN0ID0gdGFyZ2V0UmVjdDsKKyAgICBvcHQudmlzaWJsZVJlY3QgPSBleHBvc2VkUmVj
dDsKKyAgICBvcHQudGV4dHVyZU1hcHBlciA9IHRleHR1cmVNYXBwZXIuZ2V0KCk7CisgICAgb3B0
LmdjID0gdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0KCk7CisgICAgb3B0LnN1cmZhY2Ug
PSAwOworICAgIHBhaW50UmVjdXJzaXZlKG9wdCk7CisKKyAgICBpZiAodGV4dHVyZU1hcHBlci0+
YWxsb3dTdXJmYWNlRm9yUm9vdCgpIHx8IG1fc3RhdGUuaGFzU3VyZmFjZURlc2NlbmRhbnRzKSB7
CisgICAgICAgIHRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKDApOworICAgICAgICB0ZXh0dXJl
TWFwcGVyLT5wYWludFRvVGFyZ2V0KCptX3N1cmZhY2UuZ2V0KCksIHNpemUsIHRyYW5zZm9ybSwg
b3BhY2l0eSAqIG1fc3RhdGUub3BhY2l0eSwgdGFyZ2V0UmVjdCk7CisgICAgfQorICAgIGdUZXh0
dXJlTWFwcGVyQ2FjaGUucHVyZ2UoKTsKKyNpZiAwCisgICAgeworICAgICAgICBzdGF0aWMgaW50
IHJvb3RDb3VudCA9IDA7CisgICAgICAgICgiW1RleHR1cmVNYXBwZXJdIFJvb3RQYWludCglZCkg
JWQgbGF5ZXIoJXApICglZCslZCAlZHglZCkgWyVkbXNdXG4iLCArK3Jvb3RDb3VudCwgdGV4dHVy
ZU1hcHBlci0+YWxsb3dTdXJmYWNlRm9yUm9vdCgpLAorICAgICAgICAgICAgICAgdGhpcywgZXhw
b3NlZFJlY3QueCgpLCBleHBvc2VkUmVjdC55KCksIGV4cG9zZWRSZWN0LndpZHRoKCksIGV4cG9z
ZWRSZWN0LmhlaWdodCgpLCAKKyAgICAgICAgICAgICAgIGludChzdG9wV2F0Y2guZWxhcHNlZCgp
ICogMTAwMCkpOworI2lmIDAKKyAgICAgICAgaWYgKHRleHR1cmVNYXBwZXItPmFsbG93U3VyZmFj
ZUZvclJvb3QoKSkKKyAgICAgICAgICAgIG1fc3VyZmFjZS0+c2F2ZShTdHJpbmcoKS5mb3JtYXQo
Ii90bXAvcm9vdF8lZC5wbmciLCByb290Q291bnQpKTsKKyNlbmRpZgorICAgIH0KKyNlbmRpZgor
fQorCitpbnQgVGV4dHVyZU1hcHBlck5vZGU6OmNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCgp
IGNvbnN0Cit7CisgICAgaWYgKCFtX3N0YXRlLnZpc2libGUgfHwgbV9zdGF0ZS5vcGFjaXR5IDwg
MC4wMDEpCisgICAgICAgIHJldHVybiAwOworICAgIGludCBkZXNjZW5kYW50c1dpdGhDb250ZW50
ID0gKG1fc3RhdGUuZHJhd3NDb250ZW50IHx8IG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUg
IT0gSFRNTENvbnRlbnRUeXBlKSA/IDEgOiAwOworCisgICAgY29uc3QgaW50IHNpemUgPSBtX2No
aWxkcmVuLnNpemUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAg
ICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIGNoaWxkID0gbV9jaGlsZHJlbltpXSkKKyAgICAg
ICAgICAgIGRlc2NlbmRhbnRzV2l0aENvbnRlbnQgKz0gY2hpbGQtPmNvdW50RGVzY2VuZGFudHNX
aXRoQ29udGVudCgpOworICAgIH0KKworICAgIHJldHVybiBkZXNjZW5kYW50c1dpdGhDb250ZW50
OworfQorCitpbmxpbmUgVGV4dHVyZU1hcHBlck5vZGUqIFRleHR1cmVNYXBwZXJOb2RlOjp0b1Rl
eHR1cmVNYXBwZXJOb2RlKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIHJldHVybiBsYXll
ciA/IHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKj4obGF5ZXIpLT5tX25v
ZGUuZ2V0KCkgOiAwOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlTGF5ZXJU
eXBlKCkKK3sKKyAgICAvLyBjYWxjdWxhdGUgbGF5ZXIgdHlwZS4gQSBsYXllciBjYW4gYmUgb25l
IG9mIHRoZSBmb2xsb3dpbmc6CisgICAgLy8gIFJvb3RMYXllcjogdGhlIHRvcCBsZXZlbC4gRHJh
d3MgdG8gYSBmcmFtZWJ1ZmZlciwgYW5kIHRoZSB0YXJnZXQgdGV4dHVyZSBkcmF3cyBpbnRvIHRo
ZSB2aWV3cG9ydC4KKyAgICAvLyAgICAgICAgICAgIG9ubHkgb25lIGxheWVyIGlzIHRoZSByb290
IGxheWVyLgorICAgIC8vICBTY2lzc29yTGF5ZXI6IGRyYXdzIHRvIHRoZSBjdXJyZW50IGZyYW1l
YnVmZmVyLCBhbmQgYXBwbGllcyBhbiBleHRyYSBzY2lzc29yIGJlZm9yZSBkcmF3aW5nIGl0cyBj
aGlsZHJlbi4KKyAgICAvLyAgICAgICAgICAgICAgICBBIHNjaXNzb3IgbGF5ZXIgaXMgYSBsYXll
ciB3aXRoIGNoaWxkcmVuIHRoYXQgbWFza3MgdG8gYm91bmRzLCBpcyBub3QgYSB0cmFuc3BhcmVu
Y3kgbGF5ZXIsIGFuZCBoYXMgYSByZWN0YW5ndWxhciBjbGlwLgorICAgIC8vICBDbGlwTGF5ZXI6
IGNyZWF0ZXMgYSBuZXcgZnJhbWVidWZmZXIsIHRoZSBzaXplIG9mIHRoZSBsYXllciwgYW5kIHRo
ZW4gcGFpbnRzIGl0IHRvIHRoZSBlbmNsb3NpbmcgQml0bWFwVGV4dHVyZSB3aXRoIHRoZSBsYXll
cidzIHRyYW5zZm9ybS9vcGFjaXR5LgorICAgIC8vICAgICAgICAgICAgICBBIGNsaXAgbGF5ZXIg
aXMgYSBsYXllciB0aGF0IG1hc2tzIHRvIGJvdW5kcywgZG9lc24ndCBwcmVzZXJ2ZSAzRCwgaGFz
IGNoaWxkcmVuLCBhbmQgaGFzIGEgdHJhbnNwYXJlbmN5L21hc2sgb3IgYSBub24tcmVjdGFuZ3Vs
YXIgdHJhbnNmb3JtLgorICAgIC8vICBUcmFuc3BhcmVuY3lMYXllcjogY3JlYXRlcyBhIG5ldyBm
cmFtZWJ1ZmZlciBpZGV0aWNhbCBpbiBzaXplIHRvIHRoZSBjdXJyZW50IGZyYW1lYnVmZmVyLiBU
aGVuIGRyYXdzIHRoZSBmYidzIHRleHR1cmUgdG8gdGhlIGN1cnJlbnQgZnJhbWVidWZmZXIgd2l0
aCBpZGVudGl0eSB0cmFuc2Zvcm0uCisgICAgLy8gICAgICAgICAgICAgICAgICAgICBVc2VkIGZv
ciBsYXllcnMgd2l0aCBjaGlsZHJlbiBhbmQgdHJhbnNwYXJlbmN5L21hc2sgdGhhdCBwcmVzZXJ2
ZSAzRCBvciBkb24ndCBtYXNrIHRvIGJvdW5kcy4KKyAgICAvLyAgRGVmYXVsdExheWVyOiBkcmF3
cyBpdHNlbGYgYW5kIGl0cyBjaGlsZHJlbiBkaXJlY3RseSB0byB0aGUgY3VycmVudCBmcmFtZWJ1
ZmZlci4KKyAgICAvLyAgICAgICAgICAgICAgICBhbnkgbGF5ZXIgdGhhdCBkb2Vzbid0IGNvbmZv
cm0gdG8gdGhlIG90aGVyIHJ1bGVzIGlzIGEgRGVmYXVsdExheWVyLgorCisgICAgY29uc3QgYm9v
bCBzZWxmSGFzQ29udGVudCA9IG1fc3RhdGUuZHJhd3NDb250ZW50IHx8IChtX2N1cnJlbnRDb250
ZW50LmNvbnRlbnRUeXBlICE9IEhUTUxDb250ZW50VHlwZSk7CisgICAgY29uc3QgYm9vbCBoYXNE
ZXNjZW5kYW50c1dpdGhDb250ZW50ID0gbV9zdGF0ZS5kZXNjZW5kYW50c1dpdGhDb250ZW50IC0g
KHNlbGZIYXNDb250ZW50ID8gMSA6IDApOworICAgIGNvbnN0IGJvb2wgaGFzVHJhbnNwYXJlbmN5
ID0gbV9zdGF0ZS5vcGFjaXR5IDwgMC45OSB8fCBtX3N0YXRlLm1hc2tMYXllcjsKKyAgICBjb25z
dCBib29sIGhhc1JlcGxpY2EgPSBtX3N0YXRlLnJlcGxpY2FMYXllcjsKKyAgICBtX2xheWVyVHlw
ZSA9IERlZmF1bHRMYXllcjsKKworICAgIC8vIExheWVyIGhhcyBubyBwYXJlbnQsIGl0IG11c3Qg
YmUgYSByb290IGxheWVyLgorICAgIGlmICghbV9wYXJlbnQgJiYgIW1fZWZmZWN0VGFyZ2V0KSB7
CisgICAgICAgIG1fbGF5ZXJUeXBlID0gUm9vdExheWVyOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gQSBsYXllciB3aXRoIG5vIGNvbnRlbnRzIGlzIGFsd2F5cyBhIGRlZmF1bHQg
bGF5ZXIuCisgICAgaWYgKCFtX3N0YXRlLmRlc2NlbmRhbnRzV2l0aENvbnRlbnQpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIEEgbGF5ZXIgd2l0aCBjb250ZW50LWRlc2NlbmRhbnRzIGFuZCBh
IG1hc2sgaXMgYWx3YXlzIGEgY2xpcCBsYXllci4KKyAgICBpZiAoaGFzRGVzY2VuZGFudHNXaXRo
Q29udGVudCAmJiBtX3N0YXRlLm1hc2tMYXllcikgeworICAgICAgICBtX2xheWVyVHlwZSA9IENs
aXBMYXllcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEEgbWFza3MtdG8gYm91
bmRzIGxheWVyIGNhbiBiZSBhIGNsaXAgb3IgYSBzY2lzc29yIGxheWVyLiBJdCdzIGEgc2Npc3Nv
ciBsYXllciBvbmx5IGlmIGl0IGhhcyBhIHRyaXZpYWwgY2xpcCAoaWRlbnRpdHkgb3IgdHJhbnNs
YXRpb24pLCBvciBpZiBpdCBoYXMgdHJhbnNwYXJlbmN5LgorICAgIC8vIFRoYXQncyBiZWNhdXNl
IGEgQ2xpcExheWVyIHdvdWxkIGNyZWF0ZSBhbiBpbnRlcm1lZGlhdGUgZHJhd2luZyBzdXJmYWNl
IChGQikgLSB3ZSB3YW50IHRvIGxpbWl0IGl0IHRvIHdoZW4gaXQncyBhY3R1YWxseSBuZWNlc3Nh
cnksIGkuZS4gdHJhbnNwYXJlbmN5IG9yIG5vbi10cml2aWFsIGNsaXAuCisgICAgaWYgKG1fc3Rh
dGUubWFza3NUb0JvdW5kcyAmJiBoYXNEZXNjZW5kYW50c1dpdGhDb250ZW50KSB7CisgICAgICAg
IGlmIChoYXNUcmFuc3BhcmVuY3kgfHwgIW1fc3RhdGUudHJhbnNmb3JtLmlzSWRlbnRpdHlPclRy
YW5zbGF0aW9uKCkgfHwgbV9wYXJlbnQtPm1fc3RhdGUucHJlc2VydmVzM0QpCisgICAgICAgICAg
ICBtX2xheWVyVHlwZSA9IENsaXBMYXllcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9s
YXllclR5cGUgPSBTY2lzc29yTGF5ZXI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBXZSB1c2UgYSB0cmFuc3BhcmVuY3kgbGF5ZXIgd2hlbiB3ZSBoYXZlIHR3byBvZiB0aGUgZm9s
bG93aW5nIDM6IHJlcGxpY2EsIHRyYW5zcGFyZW5jeSwgZGVzY2VuZGFudHMgd2l0aCBjb250ZW50
cy4KKyAgICBpZiAoKGhhc1JlcGxpY2EgJiYgaGFzRGVzY2VuZGFudHNXaXRoQ29udGVudCkgfHwg
KGhhc1JlcGxpY2EgJiYgaGFzVHJhbnNwYXJlbmN5KSB8fCAoaGFzVHJhbnNwYXJlbmN5ICYmIG1f
c3RhdGUuZGVzY2VuZGFudHNXaXRoQ29udGVudCA+IDEpKQorICAgICAgICBtX2xheWVyVHlwZSA9
IFRyYW5zcGFyZW5jeUxheWVyOworfQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6aW5pdGlhbGl6
ZVRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKK3sKKyAgICBpZiAo
dGV4dHVyZU1hcHBlci0+dHlwZSgpID09IG1fbGFzdFRleHR1cmVNYXBwZXJUeXBlKQorICAgICAg
ICByZXR1cm47CisjaWYgMAorICAgIGlmIChtX2xheWVyVHlwZSA9PSBDbGlwTGF5ZXIgfHwgbV9s
YXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIKKyAgICAgICAgfHwgKG1fbGF5ZXJUeXBlID09
IFJvb3RMYXllciAmJiB0ZXh0dXJlTWFwcGVyLT5hbGxvd1N1cmZhY2VGb3JSb290KCkpKQorICAg
ICAgICBtX3N1cmZhY2UgPSB0ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CisgICAgZWxz
ZSBpZiAobV9zdXJmYWNlKQorICAgICAgICBtX3N1cmZhY2UtPmRlc3Ryb3koKTsKKyAgICBpZiAo
bV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIG1fcmVwbGljYVN1cmZhY2UgPSB0ZXh0dXJl
TWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CisgICAgZWxzZSBpZiAobV9yZXBsaWNhU3VyZmFjZSkK
KyAgICAgICAgbV9yZXBsaWNhU3VyZmFjZS0+ZGVzdHJveSgpOworI2Vsc2UKKyAgICBtX3N1cmZh
Y2UgPSB0ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CisgICAgbV9yZXBsaWNhU3VyZmFj
ZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyNlbmRpZgorICAgIG1fdGV4dHVy
ZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICBnVGV4dHVyZU1hcHBlckNh
Y2hlLm1hcmsobV90ZXh0dXJlLmdldCgpKTsKKyAgICBtX2xhc3RUZXh0dXJlTWFwcGVyVHlwZSA9
IHRleHR1cmVNYXBwZXItPnR5cGUoKTsKK30KKworVGV4dHVyZU1hcHBlck5vZGU6OlRleHR1cmVN
YXBwZXJOb2RlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBuZXdMYXllcikKKyAgICA6IG1f
bGF5ZXIobmV3TGF5ZXIpCisgICAgLCBtX2xhc3RUZXh0dXJlTWFwcGVyVHlwZSgwKQorICAgICwg
bV9sYXN0VGV4dHVyZU1hcHBlcigwKQorICAgICwgbV9sYXllclR5cGUoRGVmYXVsdExheWVyKQor
ICAgICwgbV9zdXJmYWNlKDApCisgICAgLCBtX3BhcmVudCgwKQorICAgICwgbV9lZmZlY3RUYXJn
ZXQoMCkKKyAgICAsIG1fY2hhbmdlTWFzayhOb0NoYW5nZXMpCisgICAgLCBtX3BsYXRmb3JtQ2xp
ZW50KDApCit7CisKK30KKworVGV4dHVyZU1hcHBlck5vZGUqIFRleHR1cmVNYXBwZXJOb2RlOjpy
b290TGF5ZXIoKQoreworICAgIGlmIChtX2VmZmVjdFRhcmdldCkKKyAgICAgICAgcmV0dXJuIG1f
ZWZmZWN0VGFyZ2V0LT5yb290TGF5ZXIoKTsKKyAgICBpZiAobV9wYXJlbnQpCisgICAgICAgIHJl
dHVybiBtX3BhcmVudC0+cm9vdExheWVyKCk7CisgICAgcmV0dXJuIHRoaXM7Cit9CisKK3ZvaWQg
VGV4dHVyZU1hcHBlck5vZGU6OmludmFsaWRhdGVUcmFuc2Zvcm0oKQoreworICAgIG1fdHJhbnNm
b3Jtcy5kaXJ0eSA9IHRydWU7CisgICAgaWYgKG1fbGF5ZXJUeXBlICE9IENsaXBMYXllcikKKyAg
ICAgICAgbV9zdGF0ZS5kaXJ0eSA9IHRydWU7CisgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVy
KQorICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+aW52YWxpZGF0ZVRyYW5zZm9ybSgpOwor
ICAgIGNvbnN0IGludCBzaXplID0gbV9jaGlsZHJlbi5zaXplKCk7CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiBsYXll
ciA9IG1fY2hpbGRyZW5baV0pCisgICAgICAgICAgICBsYXllci0+aW52YWxpZGF0ZVRyYW5zZm9y
bSgpOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZUxvY2FsVHJh
bnNmb3JtKCkKK3sKKyAgICBpZiAoIW1fdHJhbnNmb3Jtcy5sb2NhbERpcnR5KQorICAgICAgICBy
ZXR1cm47CisgICAgY29uc3QgZmxvYXQgb3JpZ2luWCA9IG1fc3RhdGUuYW5jaG9yUG9pbnQueCgp
ICogbV9zaXplLndpZHRoKCk7CisgICAgY29uc3QgZmxvYXQgb3JpZ2luWSA9IG1fc3RhdGUuYW5j
aG9yUG9pbnQueSgpICogbV9zaXplLmhlaWdodCgpOworICAgIG1fdHJhbnNmb3Jtcy5sb2NhbCA9
CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KCkKKyAgICAgICAgLnRyYW5zbGF0ZTNkKG9y
aWdpblggKyBtX3N0YXRlLnBvcy54KCksIG9yaWdpblkgKyBtX3N0YXRlLnBvcy55KCksIG1fc3Rh
dGUuYW5jaG9yUG9pbnQueigpKQorICAgICAgICAubXVsdExlZnQobV9zdGF0ZS50cmFuc2Zvcm0p
CisgICAgICAgIC50cmFuc2xhdGUzZCgtb3JpZ2luWCwgLW9yaWdpblksIC1tX3N0YXRlLmFuY2hv
clBvaW50LnooKSk7CisgICAgbV90cmFuc2Zvcm1zLmxvY2FsRGlydHkgPSBmYWxzZTsKK30KKwor
dm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6ZmxhdHRlblRvMkRTcGFjZUlmTmVjZXNzYXJ5KCkKK3sK
KyAgICBpZiAobV9zdGF0ZS5wcmVzZXJ2ZXMzRCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fdHJh
bnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNMTMoMCk7CisgICAgbV90cmFuc2Zvcm1zLmZvckRl
c2NlbmRhbnRzLnNldE0yMygwKTsKKyAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0
TTMxKDApOworICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNMzIoMCk7CisgICAg
bV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE0zMygxKTsKKyAgICBtX3RyYW5zZm9ybXMu
Zm9yRGVzY2VuZGFudHMuc2V0TTM0KDApOworICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50
cy5zZXRNNDMoMCk7Cit9CisKK0ludFNpemUgVGV4dHVyZU1hcHBlck5vZGU6Om5lYXJlc3RTdXJm
YWNlU2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fbGF5ZXJUeXBlID09IENsaXBMYXllciB8fCBt
X2xheWVyVHlwZSA9PSBSb290TGF5ZXIpCisgICAgICAgIHJldHVybiBtX3N1cmZhY2UgJiYgIW1f
c3VyZmFjZS0+c2l6ZSgpLmlzRW1wdHkoKSA/IG1fc3VyZmFjZS0+c2l6ZSgpIDogbV9zaXplOwor
ICAgIHJldHVybiBtX3BhcmVudC0+bmVhcmVzdFN1cmZhY2VTaXplKCk7Cit9CisKK3ZvaWQgVGV4
dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVSZXBsaWNhVHJhbnNmb3JtKCkKK3sKKyAgICBpZiAoIW1f
c3RhdGUucmVwbGljYUxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX25lYXJlc3RTdXJm
YWNlU2l6ZSA9IG5lYXJlc3RTdXJmYWNlU2l6ZSgpOworCisgICAgaWYgKG1fbGF5ZXJUeXBlICE9
IFRyYW5zcGFyZW5jeUxheWVyKSB7CisgICAgICAgIG1fdHJhbnNmb3Jtcy5yZXBsaWNhID0gVHJh
bnNmb3JtYXRpb25NYXRyaXgobV90cmFuc2Zvcm1zLnRhcmdldCkubXVsdExlZnQobV9zdGF0ZS5y
ZXBsaWNhTGF5ZXItPm1fdHJhbnNmb3Jtcy5sb2NhbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBjb25zdCBmbG9hdCBvcmlnaW5YID0gbV90cmFuc2Zvcm1zLnRhcmdldC5tNDEoKTsK
KyAgICBjb25zdCBmbG9hdCBvcmlnaW5ZID0gbV90cmFuc2Zvcm1zLnRhcmdldC5tNDIoKTsKKyAg
ICBtX3RyYW5zZm9ybXMucmVwbGljYSA9CisgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCgpCisgICAgICAgICAgICAgICAgLnRyYW5zbGF0ZShvcmlnaW5YLCBvcmlnaW5ZKQorICAgICAg
ICAgICAgICAgIC5tdWx0TGVmdChtX3N0YXRlLnJlcGxpY2FMYXllci0+bV90cmFuc2Zvcm1zLmxv
Y2FsKQorICAgICAgICAgICAgICAgIC50cmFuc2xhdGUoLW9yaWdpblgsIC1vcmlnaW5ZKTsKK30K
Kwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVRyYW5zZm9ybWF0aW9ucygpCit7Cisg
ICAgaWYgKCFtX3RyYW5zZm9ybXMuZGlydHkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdHJh
bnNmb3Jtcy5kaXJ0eSA9IGZhbHNlOworICAgIGlmICgobV9zaXplLmlzRW1wdHkoKSAmJiBtX3N0
YXRlLm1hc2tzVG9Cb3VuZHMpKQorICAgICAgICByZXR1cm47CisKKyAgICBUZXh0dXJlTWFwcGVy
Tm9kZSogcGFyZW50ID0gbV9wYXJlbnQ7CisgICAgY29tcHV0ZUxvY2FsVHJhbnNmb3JtKCk7CisK
KyAgICBtX3RyYW5zZm9ybXMudGFyZ2V0ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgocGFyZW50ID8g
cGFyZW50LT5tX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMgOiBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCgpKS5tdWx0TGVmdChtX3RyYW5zZm9ybXMubG9jYWwpOworICAgIG1fdHJhbnNmb3Jtcy5mb3JE
ZXNjZW5kYW50cyA9IChtX2xheWVyVHlwZSA9PSBDbGlwTGF5ZXIgPyBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCgpIDogbV90cmFuc2Zvcm1zLnRhcmdldCk7CisKKyAgICBpZiAobV9lZmZlY3RUYXJnZXQp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fdHJhbnNmb3Jtcy50YXJnZXRCb3VuZGluZ1JlY3Qg
PSBJbnRSZWN0KG1fdHJhbnNmb3Jtcy50YXJnZXQubWFwUmVjdChmdWxsUmVjdCgpKSk7CisgICAg
aWYgKG1fc3RhdGUucmVwbGljYUxheWVyKQorICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+
Y29tcHV0ZVRyYW5zZm9ybWF0aW9ucygpOworCisgICAgZmxhdHRlblRvMkRTcGFjZUlmTmVjZXNz
YXJ5KCk7CisKKyAgICBpZiAoIW1fc3RhdGUuYmFja2ZhY2VWaXNpYmlsaXR5ICYmIG1fdHJhbnNm
b3Jtcy50YXJnZXQuaW52ZXJzZSgpLm0zMygpIDwgMCkgeworICAgICAgICBtX3N0YXRlLnZpc2li
bGUgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3N0YXRlLnZpc2libGUg
PSB0cnVlOworCisgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPm1fc3RhdGUucHJlc2VydmVzM0Qp
CisgICAgICAgIG1fdHJhbnNmb3Jtcy5jZW50ZXJaID0gbV90cmFuc2Zvcm1zLnRhcmdldC5tYXBQ
b2ludChGbG9hdFBvaW50M0QobV9zaXplLndpZHRoKCkgLyAyLCBtX3NpemUuaGVpZ2h0KCkgLyAy
LCAwKSkueigpOworCisgICAgaWYgKCFtX2NoaWxkcmVuLnNpemUoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKG1fc3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm0uaXNJZGVudGl0eSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBjb25zdCBGbG9hdFBvaW50IGNlbnRlclBvaW50ID0gRmxvYXRQ
b2ludChtX3NpemUud2lkdGgoKSAvIDIsIG1fc2l6ZS5oZWlnaHQoKSAvIDIpOworICAgIGlmICht
X3RyYW5zZm9ybXMucGVyc3BlY3RpdmVEaXJ0eSkKKyAgICAgICAgbV90cmFuc2Zvcm1zLnBlcnNw
ZWN0aXZlID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKQorICAgICAgICAgICAgLnRyYW5zbGF0ZShj
ZW50ZXJQb2ludC54KCksIGNlbnRlclBvaW50LnkoKSkKKyAgICAgICAgICAgIC5tdWx0TGVmdCht
X3N0YXRlLmNoaWxkcmVuVHJhbnNmb3JtKQorICAgICAgICAgICAgLnRyYW5zbGF0ZSgtY2VudGVy
UG9pbnQueCgpLCAtY2VudGVyUG9pbnQueSgpKTsKKyAgICBtX3RyYW5zZm9ybXMucGVyc3BlY3Rp
dmVEaXJ0eSA9IGZhbHNlOworICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5tdWx0TGVm
dChtX3RyYW5zZm9ybXMucGVyc3BlY3RpdmUpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2Rl
Ojp1cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikK
K3sKKyAgICAvLyBuZWVkcyBhY3RpdmUgY29udGV4dAorICAgIGlmIChtX3NpemUuaXNFbXB0eSgp
IHx8ICFtX2xheWVyKSB7CisgICAgICAgIG1fdGV4dHVyZS0+ZGVzdHJveSgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0g
RGlyZWN0SW1hZ2VDb250ZW50VHlwZSkgeworICAgICAgICBpZiAobV9jdXJyZW50Q29udGVudC5p
bWFnZSkKKyAgICAgICAgICAgIG1fdGV4dHVyZS0+c2V0Q29udGVudHNUb0ltYWdlKG1fY3VycmVu
dENvbnRlbnQuaW1hZ2UuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gTWVkaWFDb250ZW50VHlwZSkgeworICAg
ICAgICBpZiAoIW1fY3VycmVudENvbnRlbnQubWVkaWEpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIG1fdGV4dHVyZS0+cmVzZXQobV9zaXplLCB0cnVlKTsKKyAgICAgICAgUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQqIHBnYyA9IG1fdGV4dHVyZS0+YmVnaW5QYWludE1lZGlhKCk7CisgICAg
ICAgIEdyYXBoaWNzQ29udGV4dCBnYyhwZ2MpOworICAgICAgICBtX2N1cnJlbnRDb250ZW50Lm1l
ZGlhLT5wYWludCgmZ2MpOworICAgICAgICBtX3RleHR1cmUtPmVuZFBhaW50KCk7CisgICAgfQor
CisgICAgY29uc3QgYm9vbCBuZWVkc1Jlc2V0ID0gKG1fdGV4dHVyZS0+Y29udGVudFNpemUoKSAh
PSBtX3NpemUpIHx8ICFtX3RleHR1cmUtPmlzVmFsaWQoKTsKKyAgICBpZiAoKG1fY3VycmVudENv
bnRlbnQuY29udGVudFR5cGUgIT0gSFRNTENvbnRlbnRUeXBlKQorICAgICAgICB8fCAoIW1fY3Vy
cmVudENvbnRlbnQubmVlZHNEaXNwbGF5ICYmIG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5
UmVjdC5pc0VtcHR5KCkgJiYgIW5lZWRzUmVzZXQpKQorICAgICAgICByZXR1cm47CisKKyAgICBX
VEY6OlN0b3BXYXRjaCBzdG9wV2F0Y2g7CisgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSBJbnRSZWN0
KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgIGlmICghbmVlZHNS
ZXNldCAmJiAhbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkpCisgICAgICAgIGRpcnR5UmVj
dC5pbnRlcnNlY3QobV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0KTsKKyAgICBpZiAo
bmVlZHNSZXNldCkKKyAgICAgICAgbV90ZXh0dXJlLT5yZXNldChtX3NpemUsIG1fc3RhdGUuY29u
dGVudHNPcGFxdWUpOworCisgICAgeworICAgICAgICBHcmFwaGljc0NvbnRleHQgZ2MobV90ZXh0
dXJlLT5iZWdpblBhaW50KGRpcnR5UmVjdCkpOworICAgICAgICBpZiAodGV4dHVyZU1hcHBlciAm
JiB0ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQoKSkgeworICAgICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0KiBvcmlnaW5hbEdDID0gdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0KCk7
CisgICAgICAgICAgICBnYy5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KG9yaWdpbmFsR0Mt
PmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAgICAgICAgICBnYy5zZXRUZXh0RHJh
d2luZ01vZGUob3JpZ2luYWxHQy0+dGV4dERyYXdpbmdNb2RlKCkpOworICAgICAgICB9CisgICAg
ICAgIG1fbGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGdjLCBkaXJ0eVJlY3QpOwor
ICAgIH0KKyAgICBtX3RleHR1cmUtPmVuZFBhaW50KCk7CisgICAgeworICAgICAgICBMT0coIltU
ZXh0dXJlTWFwcGVyXSBSZS1yZW5kZXIoJWQpIGxheWVyKCVwKSAlZDo6JWQ6OiVkICglZHglZCkg
WyVkbXNdXG4iLCArK3JlbmRlckNvdW50LCB0aGlzLAorICAgICAgICAgICAgICAgbmVlZHNSZXNl
dCwgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXksICFtX2N1cnJlbnRDb250ZW50Lm5lZWRz
RGlzcGxheVJlY3QuaXNFbXB0eSgpLAorICAgICAgICAgICAgICAgZGlydHlSZWN0LndpZHRoKCks
IGRpcnR5UmVjdC5oZWlnaHQoKSwgaW50KHN0b3BXYXRjaC5lbGFwc2VkKCkgKiAxMDAwKSk7Cisj
aWYgMAorICAgICAgICBzdGF0aWMgaW50IHJlbmRlckNvdW50ID0gMDsKKyAgICAgICAgbV90ZXh0
dXJlLT5zYXZlKFN0cmluZygpLmZvcm1hdCgiL3RtcC9sYXllcl8lZC5wbmciLCByZW5kZXJDb3Vu
dCkpOworI2VuZGlmCisgICAgfQorCisgICAgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlS
ZWN0ID0gSW50UmVjdCgpOworICAgIG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5ID0gZmFs
c2U7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50U2VsZihUZXh0dXJlTWFwcGVy
KiB0ZXh0dXJlTWFwcGVyLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVy
ZSwgQml0bWFwVGV4dHVyZSogcmVwbGljYU1hc2tUZXh0dXJlLCBib29sIGlzU3VyZmFjZSkKK3sK
KyAgICAvLyBuZWVkcyBhY3RpdmUgY29udGV4dAorICAgIGlmICghbV9sYXllciB8fCBtX3NpemUu
aXNFbXB0eSgpIHx8ICghbV9zdGF0ZS5kcmF3c0NvbnRlbnQgJiYgbV9jdXJyZW50Q29udGVudC5j
b250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUpKQorICAgICAgICByZXR1cm47CisgICAgdXBs
b2FkVGV4dHVyZUZyb21Db250ZW50KHRleHR1cmVNYXBwZXIpOworICAgIGlmIChtX3N0YXRlLnJl
cGxpY2FMYXllciAmJiAhaXNTdXJmYWNlKQorICAgICAgICB0ZXh0dXJlTWFwcGVyLT5kcmF3VGV4
dHVyZSgqbV90ZXh0dXJlLmdldCgpLCByZXBsaWNhUmVjdCgpLCBtX3RyYW5zZm9ybXMucmVwbGlj
YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5ICogbV9zdGF0ZS5yZXBsaWNhTGF5
ZXItPm1fc3RhdGUub3BhY2l0eSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGljYU1h
c2tUZXh0dXJlID8gcmVwbGljYU1hc2tUZXh0dXJlIDogbWFza1RleHR1cmUpOworCisKKyAgICBj
b25zdCBJbnRSZWN0IHJlY3QgPSBtX2xheWVyVHlwZSA9PSBDbGlwTGF5ZXIgPyBmdWxsUmVjdCgp
IDogdGFyZ2V0UmVjdCgpOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9y
bSA9IG1fbGF5ZXJUeXBlID09IENsaXBMYXllciA/IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkgOiBt
X3RyYW5zZm9ybXMudGFyZ2V0OworICAgIHRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCptX3Rl
eHR1cmUuZ2V0KCksIHJlY3QsIHRyYW5zZm9ybSwgb3BhY2l0eSwgaXNTdXJmYWNlID8gMCA6IG1h
c2tUZXh0dXJlKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRSZWN1cnNpdmUo
VGV4bWFwUGFpbnRPcHRpb25zIG9wdGlvbnMpCit7CisgICAgLy8gbmVlZHMgYWN0aXZlIGNvbnRl
eHQKKworICAgIFdURjo6U3RvcFdhdGNoIHN0b3BXYXRjaDsKKworICAgIGJvb2wgaXNEaXJ0eSA9
IG1fc3RhdGUuZGlydHk7CisgICAgbV9zdGF0ZS5kaXJ0eSA9IGZhbHNlOworCisgICAgaWYgKCht
X3NpemUuaXNFbXB0eSgpICYmIChtX3N0YXRlLm1hc2tzVG9Cb3VuZHMKKyAgICAgICAgfHwgbV9j
aGlsZHJlbi5pc0VtcHR5KCkpKSB8fCAhbV9zdGF0ZS52aXNpYmxlIHx8IG9wdGlvbnMub3BhY2l0
eSA8IDAuMDEgfHwgbV9zdGF0ZS5vcGFjaXR5IDwgMC4wMSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaW5pdGlhbGl6ZVRleHR1cmVNYXBwZXIob3B0aW9ucy50ZXh0dXJlTWFwcGVyKTsKKyAgICBj
b21wdXRlUmVwbGljYVRyYW5zZm9ybSgpOworCisgICAgaWYgKG1fc3RhdGUubWFza0xheWVyKSB7
CisgICAgICAgIG1fc3RhdGUubWFza0xheWVyLT5pbml0aWFsaXplVGV4dHVyZU1hcHBlcihvcHRp
b25zLnRleHR1cmVNYXBwZXIpOworICAgICAgICBtX3N0YXRlLm1hc2tMYXllci0+bV9zdGF0ZS5k
aXJ0eSA9IGZhbHNlOworICAgIH0KKworICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllcikgewor
ICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+aW5pdGlhbGl6ZVRleHR1cmVNYXBwZXIob3B0
aW9ucy50ZXh0dXJlTWFwcGVyKTsKKyAgICAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3Rh
dGUuZGlydHkgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0
YXRlLm1hc2tMYXllcikgeworICAgICAgICAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3Rh
dGUubWFza0xheWVyLT5pbml0aWFsaXplVGV4dHVyZU1hcHBlcihvcHRpb25zLnRleHR1cmVNYXBw
ZXIpOworICAgICAgICAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUubWFza0xheWVy
LT5tX3N0YXRlLmRpcnR5ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUZXh0dXJl
TWFwcGVyTm9kZSogcmVwbGljYSA9IG1fc3RhdGUucmVwbGljYUxheWVyOworICAgIGNvbnN0IGJv
b2wgaXNTdXJmYWNlID0gKG1fbGF5ZXJUeXBlID09IENsaXBMYXllcgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IG1fbGF5ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVyCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgKG1fbGF5ZXJUeXBlID09IFJvb3RMYXllcgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAob3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5hbGxv
d1N1cmZhY2VGb3JSb290KCkgfHwgbV9zdGF0ZS5oYXNTdXJmYWNlRGVzY2VuZGFudHMpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIGlmIChpc1N1cmZhY2UpCisgICAg
ICAgIHVwbG9hZFRleHR1cmVGcm9tQ29udGVudChvcHRpb25zLnRleHR1cmVNYXBwZXIpOworICAg
IGNvbnN0IEludFJlY3QgYm91bmRpbmdSZWN0ZnJvbU5lYXJlc3RTdXJmYWNlID0gbV90cmFuc2Zv
cm1zLnRhcmdldEJvdW5kaW5nUmVjdDsKKworCisgICAgb3B0aW9ucy5vcGFjaXR5ICo9IG1fc3Rh
dGUub3BhY2l0eTsKKworICAgIGZsb2F0IGNvbnRlbnRPcGFjaXR5ID0gaXNTdXJmYWNlID8gMSA6
IG9wdGlvbnMub3BhY2l0eTsKKyAgICBUZXhtYXBQYWludE9wdGlvbnMgb3B0aW9uc0ZvckRlc2Nl
bmRhbnRzKG9wdGlvbnMpOworICAgIG9wdGlvbnNGb3JEZXNjZW5kYW50cy5vcGFjaXR5ID0gY29u
dGVudE9wYWNpdHk7CisKKyAgICBpZiAobV9sYXllclR5cGUgPT0gQ2xpcExheWVyKSB7CisgICAg
ICAgIG9wdGlvbnNGb3JEZXNjZW5kYW50cy52aXNpYmxlUmVjdCA9IFRyYW5zZm9ybWF0aW9uTWF0
cml4KCkudHJhbnNsYXRlKC1ib3VuZGluZ1JlY3Rmcm9tTmVhcmVzdFN1cmZhY2UueCgpLCAtYm91
bmRpbmdSZWN0ZnJvbU5lYXJlc3RTdXJmYWNlLnkoKSkubWFwUmVjdChvcHRpb25zLnZpc2libGVS
ZWN0KTsKKyAgICAgICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLnNjaXNzb3JSZWN0ID0gSW50UmVj
dCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICB9CisKKyAgICBp
ZiAobV9sYXllclR5cGUgPT0gU2Npc3NvckxheWVyKSAKKyAgICAgICAgb3B0aW9uc0ZvckRlc2Nl
bmRhbnRzLnNjaXNzb3JSZWN0LmludGVyc2VjdChtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdS
ZWN0KTsKKyAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPnNldENsaXAob3B0aW9uc0ZvckRlc2Nl
bmRhbnRzLnNjaXNzb3JSZWN0KTsKKworICAgIFRleHR1cmVNYXBwZXJDYWNoZUxvY2sobV90ZXh0
dXJlLmdldCgpKTsKKyAgICBUZXh0dXJlTWFwcGVyQ2FjaGVMb2NrKG1fc3VyZmFjZS5nZXQoKSk7
CisgICAgVGV4dHVyZU1hcHBlckNhY2hlTG9jayhtX3JlcGxpY2FTdXJmYWNlLmdldCgpKTsKKwor
ICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUucHVyZ2UoKTsKKworICAgIGlmIChpc1N1cmZhY2UpIHsK
KyAgICAgICAgQVNTRVJUKG1fc3VyZmFjZSk7CisgICAgICAgIGlmICghbV9zdXJmYWNlLT5pc1Zh
bGlkKCkpCisgICAgICAgICAgICBpc0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1fc3RhdGUu
dGlsZWQpIHsKKyAgICAgICAgICAgIG1fc3VyZmFjZS0+cmVzZXQob3B0aW9ucy52aXNpYmxlUmVj
dC5zaXplKCkpOworICAgICAgICAgICAgbV9zdXJmYWNlLT5zZXRPZmZzZXQob3B0aW9ucy52aXNp
YmxlUmVjdC5sb2NhdGlvbigpKTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0RpcnR5KQorICAgICAg
ICAgICAgbV9zdXJmYWNlLT5yZXNldChtX2xheWVyVHlwZSA9PSBUcmFuc3BhcmVuY3lMYXllciA/
IG9wdGlvbnMuc3VyZmFjZS0+c2l6ZSgpIDogbV9zaXplKTsKKyAgICAgICAgZ1RleHR1cmVNYXBw
ZXJDYWNoZS5tYXJrKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1h
cHBlci0+YmluZFN1cmZhY2UobV9zdXJmYWNlLmdldCgpKTsKKworICAgICAgICBvcHRpb25zRm9y
RGVzY2VuZGFudHMuc3VyZmFjZSA9IG1fc3VyZmFjZS5nZXQoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICAgICAgbV9zdXJmYWNlLT5kZXN0cm95KCk7Cisg
ICAgICAgIGNvbnRlbnRPcGFjaXR5ID0gb3B0aW9ucy5vcGFjaXR5OworICAgIH0KKworICAgIFJl
ZlB0cjxCaXRtYXBUZXh0dXJlPiBtYXNrVGV4dHVyZTsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVy
ZT4gcmVwbGljYU1hc2tUZXh0dXJlOworICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSogbWFzayA9
IG1fc3RhdGUubWFza0xheWVyKSB7CisgICAgICAgIG1hc2stPnVwbG9hZFRleHR1cmVGcm9tQ29u
dGVudChvcHRpb25zLnRleHR1cmVNYXBwZXIpOworICAgICAgICBtYXNrVGV4dHVyZSA9IG1hc2st
Pm1fdGV4dHVyZTsKKyAgICB9CisKKyAgICBpZiAocmVwbGljYSAmJiByZXBsaWNhLT5tX3N0YXRl
Lm1hc2tMYXllcikgeworICAgICAgICByZXBsaWNhLT5tX3N0YXRlLm1hc2tMYXllci0+dXBsb2Fk
VGV4dHVyZUZyb21Db250ZW50KG9wdGlvbnMudGV4dHVyZU1hcHBlcik7CisgICAgICAgIHJlcGxp
Y2FNYXNrVGV4dHVyZSA9IHJlcGxpY2EtPm1fc3RhdGUubWFza0xheWVyLT5tX3RleHR1cmU7Cisg
ICAgfQorCisgICAgaW50IGNoaWxkcmVuU2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOworICAgIGlm
IChpc0RpcnR5IHx8ICFpc1N1cmZhY2UgfHwgbV9zdGF0ZS50aWxlZCB8fCAhbV9zdXJmYWNlLT5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgYm9vbCBkaWRQYWludFNlbGYgPSBmYWxzZTsKKyAgICAgICAg
aWYgKCFtX3N0YXRlLnByZXNlcnZlczNEIHx8IG1fY2hpbGRyZW4uaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBwYWludFNlbGYob3B0aW9ucy50ZXh0dXJlTWFwcGVyLCBjb250ZW50T3BhY2l0eSwg
bWFza1RleHR1cmUuZ2V0KCksIHJlcGxpY2FNYXNrVGV4dHVyZS5nZXQoKSwgaXNTdXJmYWNlKTsK
KyAgICAgICAgICAgIGRpZFBhaW50U2VsZiA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAobV9jaGlsZHJlbi5pc0VtcHR5KCkgJiYgIWlzU3VyZmFjZSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBpZiAobV9sYXllclR5cGUgPT0gU2Npc3NvckxheWVyKQorICAgICAgICAg
ICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLnNjaXNzb3JSZWN0LmludGVyc2VjdChtX3RyYW5zZm9y
bXMudGFyZ2V0Lm1hcFJlY3QoSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhl
aWdodCgpKSkpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW5TaXplOyAr
K2kpIHsKKyAgICAgICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBsYXllciA9IG1fY2hpbGRyZW5b
aV07CisgICAgICAgICAgICBpZiAoIWxheWVyKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICBpZiAoIWRpZFBhaW50U2VsZiAmJiBsYXllci0+bV90cmFuc2Zvcm1zLmNl
bnRlclogPj0gMCkgeworICAgICAgICAgICAgICAgIHBhaW50U2VsZihvcHRpb25zLnRleHR1cmVN
YXBwZXIsIGNvbnRlbnRPcGFjaXR5LCBtYXNrVGV4dHVyZS5nZXQoKSwgcmVwbGljYU1hc2tUZXh0
dXJlLmdldCgpLCBpc1N1cmZhY2UpOworICAgICAgICAgICAgICAgIGRpZFBhaW50U2VsZiA9IHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsYXllci0+cGFpbnRSZWN1cnNpdmUob3B0
aW9uc0ZvckRlc2NlbmRhbnRzKTsKKyAgICAgICAgICAgIGlmIChpc1N1cmZhY2UpIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQobV9zdXJmYWNlKTsKKyAgICAgICAgICAgICAgICBnVGV4dHVyZU1h
cHBlckNhY2hlLm1hcmsobV9zdXJmYWNlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBvcHRpb25z
LnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFkaWRQYWludFNlbGYpIHsKKyAgICAgICAgICAg
IHBhaW50U2VsZihvcHRpb25zLnRleHR1cmVNYXBwZXIsIGNvbnRlbnRPcGFjaXR5LCBtYXNrVGV4
dHVyZS5nZXQoKSwgcmVwbGljYU1hc2tUZXh0dXJlLmdldCgpLCBpc1N1cmZhY2UpOworICAgICAg
ICAgICAgZGlkUGFpbnRTZWxmID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICht
X2xheWVyVHlwZSA9PSBSb290TGF5ZXIgfHwgbV9sYXllclR5cGUgPT0gRGVmYXVsdExheWVyIHx8
IG1fbGF5ZXJUeXBlID09IFNjaXNzb3JMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNT
RVJUKG1fc3VyZmFjZSk7CisgICAgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSA9ICptX3N1cmZhY2Uu
Z2V0KCk7CisgICAgaWYgKHJlcGxpY2EpIHsKKyAgICAgICAgQVNTRVJUKG1fcmVwbGljYVN1cmZh
Y2UpOworICAgICAgICBtX3JlcGxpY2FTdXJmYWNlLT5yZXNldChvcHRpb25zLnN1cmZhY2UtPnNp
emUoKSk7CisgICAgICAgIG1fcmVwbGljYVN1cmZhY2UtPnNldE9mZnNldChvcHRpb25zLnN1cmZh
Y2UtPm9mZnNldCgpKTsKKyAgICAgICAgZ1RleHR1cmVNYXBwZXJDYWNoZS5tYXJrKG1fcmVwbGlj
YVN1cmZhY2UuZ2V0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJm
YWNlKG1fcmVwbGljYVN1cmZhY2UuZ2V0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBw
ZXItPmRyYXdUZXh0dXJlKHRleHR1cmUsIHJlcGxpY2FSZWN0KCksIG1fdHJhbnNmb3Jtcy5yZXBs
aWNhLCByZXBsaWNhLT5tX3N0YXRlLm9wYWNpdHksIHJlcGxpY2FNYXNrVGV4dHVyZSA/IHJlcGxp
Y2FNYXNrVGV4dHVyZS5nZXQoKSA6IG1hc2tUZXh0dXJlLmdldCgpKTsKKyAgICAgICAgb3B0aW9u
cy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSh0ZXh0dXJlLCBJbnRSZWN0KEludFBvaW50KDAs
IDApLCBvcHRpb25zLnN1cmZhY2UtPnNpemUoKSksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIDEu
MGYsIG1hc2tUZXh0dXJlLmdldCgpKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5i
aW5kU3VyZmFjZShvcHRpb25zLnN1cmZhY2UpOworICAgICAgICBnVGV4dHVyZU1hcHBlckNhY2hl
Lm1hcmsob3B0aW9ucy5zdXJmYWNlKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5k
cmF3VGV4dHVyZSgqbV9yZXBsaWNhU3VyZmFjZS5nZXQoKSwgSW50UmVjdChJbnRQb2ludCgwLCAw
KSwgb3B0aW9ucy5zdXJmYWNlLT5zaXplKCkpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBvcHRp
b25zLm9wYWNpdHksIDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb3B0aW9ucy50
ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShvcHRpb25zLnN1cmZhY2UpOworICAgIG9wdGlvbnMu
dGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUodGV4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9sYXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIgPyBJbnRSZWN0KEludFBv
aW50KDAsIDApLCBvcHRpb25zLnN1cmZhY2UtPnNpemUoKSkgOiAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGFyZ2V0UmVjdCgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9sYXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIgPyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
IDogbV90cmFuc2Zvcm1zLnRhcmdldCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9w
dGlvbnMub3BhY2l0eSwgbWFza1RleHR1cmUuZ2V0KCkpOworICAgIGdUZXh0dXJlTWFwcGVyQ2Fj
aGUubWFyaygmdGV4dHVyZSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNsZWFudXBU
ZXh0dXJlTWFwcGVyKCkKK3sKKyAgICBpZiAobV90ZXh0dXJlKQorICAgICAgICBtX3RleHR1cmUt
PmRlc3Ryb3koKTsKKyAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICBtX3N1cmZhY2UtPmRlc3Ry
b3koKTsKKyAgICBpZiAobV9yZXBsaWNhU3VyZmFjZSkKKyAgICAgICAgbV9yZXBsaWNhU3VyZmFj
ZS0+ZGVzdHJveSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7
ICsraSkgeworICAgICAgICBpZiAobV9jaGlsZHJlbltpXSkKKyAgICAgICAgICAgIG1fY2hpbGRy
ZW5baV0tPmNsZWFudXBUZXh0dXJlTWFwcGVyKCk7CisgICAgfQorICAgIGlmIChtX2xhc3RUZXh0
dXJlTWFwcGVyKQorICAgICAgICBtX2xhc3RUZXh0dXJlTWFwcGVyLT5jbGVhbnVwKCk7Cit9CisK
K1RleHR1cmVNYXBwZXJOb2RlOjp+VGV4dHVyZU1hcHBlck5vZGUoKQoreworICAgIC8vIG5lZWRz
IGFjdGl2ZSBjb250ZXh0CisgICAgLy8gc3luY0NvbXBvc2l0aW5nU3RhdGUodHJ1ZSk7CisgICAg
c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgeworICAgICAgICBjb25zdCBpbnQgY2hpbGRyZW5TaXpl
ID0gbV9jaGlsZHJlbi5zaXplKCk7CisgICAgICAgIGZvciAoaW50IGkgPSBjaGlsZHJlblNpemUt
MTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2NoaWxkcmVuW2ldLT5tX3Bh
cmVudCA9PSB0aGlzKTsKKyAgICAgICAgICAgIG1fY2hpbGRyZW5baV0tPm1fcGFyZW50ID0gMDsK
KyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobV9wYXJlbnQpCisgICAgICAgIG1fcGFyZW50LT5t
X2NoaWxkcmVuLnJlbW92ZShtX3BhcmVudC0+bV9jaGlsZHJlbi5maW5kKHRoaXMpKTsKK30KKwor
dm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6bm90aWZ5Q2hhbmdlKENoYW5nZU1hc2sgY2hhbmdlTWFz
aykKK3sKKyAgICBtX2NoYW5nZU1hc2sgfD0gY2hhbmdlTWFzazsKKyAgICBpZiAoIW1fbGF5ZXIt
PmNsaWVudCgpKQorICAgICAgICByZXR1cm47CisgICAgbV9sYXllci0+Y2xpZW50KCktPm5vdGlm
eVN5bmNSZXF1aXJlZChtX2xheWVyKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGVy
Zm9ybVBvc3RTeW5jT3BlcmF0aW9ucygpCit7CisgICAgY29uc3QgTGF5ZXJUeXBlIHByZXZMYXll
clR5cGUgPSBtX2xheWVyVHlwZTsKKyAgICBjb21wdXRlTGF5ZXJUeXBlKCk7CisgICAgaWYgKHBy
ZXZMYXllclR5cGUgIT0gbV9sYXllclR5cGUpCisgICAgICAgIG1fc3RhdGUuZGlydHkgPSB0cnVl
OworICAgIGlmIChtX3RyYW5zZm9ybXMuZGlydHkpIAorICAgICAgICBzZXROZWVkc0Rpc3BsYXko
KTsKKworICAgIGNvbXB1dGVUcmFuc2Zvcm1hdGlvbnMoKTsKKyAgICBpZiAobV9zdGF0ZS5tYXNr
TGF5ZXIgJiYgIW1fc3RhdGUuZGlydHkpCisgICAgICAgIG1fc3RhdGUuZGlydHkgPSBtX3N0YXRl
Lm1hc2tMYXllci0+bV9zdGF0ZS5kaXJ0eTsKKyAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIg
JiYgIW1fc3RhdGUuZGlydHkpCisgICAgICAgIG1fc3RhdGUuZGlydHkgPSBtX3N0YXRlLnJlcGxp
Y2FMYXllci0+bV9zdGF0ZS5kaXJ0eTsKKworICAgIGNvbnN0IGludCBzaXplID0gbV9jaGlsZHJl
bi5zaXplKCk7CisKKyAgICBmb3IgKGludCBpID0gc2l6ZSAtIDE7IGkgPj0gMDsgLS1pKSB7Cisg
ICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBsYXllciA9IG1fY2hpbGRyZW5baV07CisKKyAgICAg
ICAgbGF5ZXItPnBlcmZvcm1Qb3N0U3luY09wZXJhdGlvbnMoKTsKKyAgICAgICAgaWYgKCFtX3N0
YXRlLmRpcnR5KQorICAgICAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IGxheWVyLT5tX3N0YXRlLmRp
cnR5OworICAgIH0KKyAgICBtX3N0YXRlLmhhc1N1cmZhY2VEZXNjZW5kYW50cyA9IGhhc1N1cmZh
Y2VEZXNjZW5kYW50cygpOworICAgIGlmIChtX3N0YXRlLmRpcnR5KQorICAgICAgICBtX3N0YXRl
LmRlc2NlbmRhbnRzV2l0aENvbnRlbnQgPSBjb3VudERlc2NlbmRhbnRzV2l0aENvbnRlbnQoKTsK
KworICAgIGlmIChtX3N0YXRlLnByZXNlcnZlczNEKQorICAgICAgICBzb3J0QnlaT3JkZXIobV9j
aGlsZHJlbiwgMCwgc2l6ZSk7CisgICAgaWYgKG1fc3RhdGUuZGlydHkpIAorICAgICAgICBzZXRO
ZWVkc0Rpc3BsYXkoKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0
aW5nU3RhdGUoYm9vbCByZWN1cnNlKQoreworICAgIGJvb2wgbmVlZHNUb0ludmFsaWRhdGVUcmFu
c2Zvcm0gPSBmYWxzZTsKKworICAgIGlmICghbV9sYXllcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKG1fY2hhbmdlTWFzayA9PSBOb0NoYW5nZXMpCisgICAgICAgIGdvdG8gYWZ0ZXJDdXJy
ZW50TGF5ZXJTeW5jOworCisgICAgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgaWYgKG1fcGFyZW50
KQorICAgICAgICBtX3BhcmVudC0+bV9zdGF0ZS5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAobV9j
dXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUgJiYgKG1fY2hhbmdl
TWFzayAmIFBhcmVudENoYW5nZSkpIHsKKyAgICAgICAgLy8gVGhlIFdlYkNvcmUgY29tcG9zaXRv
ciBtYW5hZ2VzIGl0ZW0gb3duZXJzaGlwLiBXZSBoYXZlIHRvIG1ha2Ugc3VyZSBncmFwaGljc3Zp
ZXcgZG9lc24ndAorICAgICAgICAvLyB0cnkgdG8gc25hdGNoIHRoYXQgb3duZXJzaGlwLgorCisg
ICAgICAgIGlmICghbV9sYXllci0+cGFyZW50KCkpCisgICAgICAgICAgICBtX3BhcmVudCA9IDA7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcGFyZW50ID0gdG9UZXh0dXJlTWFwcGVyTm9k
ZShtX2xheWVyLT5wYXJlbnQoKSk7CisKKyAgICAgICAgaWYgKCFtX2xheWVyLT5wYXJlbnQoKSAm
JiBtX3BhcmVudCkgeworICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gbV9wYXJlbnQtPm1fY2hp
bGRyZW4uZmluZCh0aGlzKTsKKyAgICAgICAgICAgIG1fcGFyZW50LT5tX2NoaWxkcmVuLnJlbW92
ZShpbmRleCk7CisgICAgICAgIH0KKworICAgIH0KKworICAgIGlmIChtX2NoYW5nZU1hc2sgJiBD
aGlsZHJlbkNoYW5nZSkgeworICAgICAgICBtX2NoaWxkcmVuLmNsZWFyKCk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9sYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiBjaGlsZCA9IHRvVGV4dHVyZU1hcHBl
ck5vZGUobV9sYXllci0+Y2hpbGRyZW4oKVtpXSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNo
aWxkKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBtX2No
aWxkcmVuLmFwcGVuZChjaGlsZCk7CisgICAgICAgICAgICAgICAgY2hpbGQtPm1fcGFyZW50ID0g
dGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtX3N0YXRlLmRpcnR5ID0g
dHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9jaGFuZ2VNYXNrICYgKFNpemVDaGFuZ2UgfCBDb250
ZW50c1JlY3RDaGFuZ2UpKSB7CisgICAgICAgIEludFNpemUgd2FudGVkU2l6ZSA9IEludFNpemUo
bV9sYXllci0+c2l6ZSgpLndpZHRoKCksIG1fbGF5ZXItPnNpemUoKS5oZWlnaHQoKSk7CisgICAg
ICAgIGlmICh3YW50ZWRTaXplLmlzRW1wdHkoKSAmJiBtX3BlbmRpbmdDb250ZW50LmNvbnRlbnRU
eXBlID09IEhUTUxDb250ZW50VHlwZSkKKyAgICAgICAgICAgIHdhbnRlZFNpemUgPSBJbnRTaXpl
KG1fbGF5ZXItPmNvbnRlbnRzUmVjdCgpLndpZHRoKCksIG1fbGF5ZXItPmNvbnRlbnRzUmVjdCgp
LmhlaWdodCgpKTsKKworICAgICAgICBpZiAod2FudGVkU2l6ZSAhPSBtX3NpemUpIHsKKyAgICAg
ICAgICAgIG1fc2l6ZSA9IEludFNpemUod2FudGVkU2l6ZS53aWR0aCgpLCB3YW50ZWRTaXplLmhl
aWdodCgpKTsKKyAgICAgICAgICAgIGlmIChtX3BsYXRmb3JtQ2xpZW50KQorICAgICAgICAgICAg
ICAgIG1fcGxhdGZvcm1DbGllbnQtPnNldFNpemVDaGFuZ2VkKG1fc2l6ZSk7CisgICAgICAgICAg
ICBjb25zdCBib29sIG5lZWRzVGlsaW5nID0gbV9zaXplLndpZHRoKCkgPiAyMDAwIHx8IG1fc2l6
ZS5oZWlnaHQoKSA+IDIwMDA7CisgICAgICAgICAgICBpZiAobV9zdGF0ZS50aWxlZCAhPSBuZWVk
c1RpbGluZykKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnRpbGVkID0gbmVlZHNUaWxpbmc7Cisg
ICAgICAgICAgICBtX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmIChtX2NoYW5nZU1hc2sgJiBNYXNrTGF5ZXJDaGFuZ2UpCisgICAgICAgaWYgKFRleHR1cmVN
YXBwZXJOb2RlKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlck5vZGUobV9sYXllci0+bWFza0xheWVy
KCkpKQorICAgICAgICAgICBsYXllci0+bV9lZmZlY3RUYXJnZXQgPSB0aGlzOworCisgICAgaWYg
KG1fY2hhbmdlTWFzayAmIFJlcGxpY2FMYXllckNoYW5nZSkKKyAgICAgICBpZiAoVGV4dHVyZU1h
cHBlck5vZGUqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTm9kZShtX2xheWVyLT5yZXBsaWNhTGF5
ZXIoKSkpCisgICAgICAgICAgIGxheWVyLT5tX2VmZmVjdFRhcmdldCA9IHRoaXM7CisKKyAgICBp
ZiAobV9jaGFuZ2VNYXNrICYgKFRyYW5zZm9ybUNoYW5nZSB8IFNpemVDaGFuZ2UgfCBBbmNob3JQ
b2ludENoYW5nZSB8IFBvc2l0aW9uQ2hhbmdlKSkKKyAgICAgICAgbV90cmFuc2Zvcm1zLmxvY2Fs
RGlydHkgPSB0cnVlOworCisgICAgaWYgKG1fY2hhbmdlTWFzayAmIChDaGlsZHJlblRyYW5zZm9y
bUNoYW5nZSB8IFNpemVDaGFuZ2UpKQorICAgICAgICBtX3RyYW5zZm9ybXMucGVyc3BlY3RpdmVE
aXJ0eSA9IHRydWU7CisKKyAgICBpZiAobV9jaGFuZ2VNYXNrICYgKENoaWxkcmVuVHJhbnNmb3Jt
Q2hhbmdlIHwgUHJlc2VydmVzM0RDaGFuZ2UgfCBUcmFuc2Zvcm1DaGFuZ2UgfCBBbmNob3JQb2lu
dENoYW5nZSB8IFNpemVDaGFuZ2UgfCBDb250ZW50c1JlY3RDaGFuZ2UgfCBCYWNrZmFjZVZpc2li
aWxpdHlDaGFuZ2UgfCBQb3NpdGlvbkNoYW5nZSB8IE1hc2tMYXllckNoYW5nZSB8IERyYXdzQ29u
dGVudENoYW5nZSB8IENvbnRlbnRDaGFuZ2UgfCBSZXBsaWNhTGF5ZXJDaGFuZ2UpKSAgICB7Cisg
ICAgICAgIC8vIER1ZSB0byB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgd2F5IFdlYkNvcmUg
aGFuZGxlcyB0cmFuc2Zvcm1zIGFuZCB0aGUgd2F5IFF0IGhhbmRsZXMgdHJhbnNmb3JtcywKKyAg
ICAgICAgLy8gYWxsIHRoZXNlIGVsZW1lbnRzIGFmZmVjdCB0aGUgdHJhbnNmb3JtcyBvZiBhbGwg
dGhlIGRlc2NlbmRhbnRzLgorICAgICAgICBuZWVkc1RvSW52YWxpZGF0ZVRyYW5zZm9ybSA9IHRy
dWU7CisgICAgfQorCisgICAgaWYgKG1fY2hhbmdlTWFzayAmIERpc3BsYXlDaGFuZ2UpIAorICAg
ICAgICBtX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKKworICAgIG1fc3RhdGUubWFza0xheWVyID0gdG9U
ZXh0dXJlTWFwcGVyTm9kZShtX2xheWVyLT5tYXNrTGF5ZXIoKSk7CisgICAgbV9zdGF0ZS5yZXBs
aWNhTGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJOb2RlKG1fbGF5ZXItPnJlcGxpY2FMYXllcigpKTsK
KyAgICBtX3N0YXRlLnBvcyA9IG1fbGF5ZXItPnBvc2l0aW9uKCk7CisgICAgbV9zdGF0ZS5hbmNo
b3JQb2ludCA9IG1fbGF5ZXItPmFuY2hvclBvaW50KCk7CisgICAgbV9zdGF0ZS5zaXplID0gbV9s
YXllci0+c2l6ZSgpOworICAgIG1fc3RhdGUudHJhbnNmb3JtID0gbV9sYXllci0+dHJhbnNmb3Jt
KCk7CisgICAgbV9zdGF0ZS5jb250ZW50c1JlY3QgPSBtX2xheWVyLT5jb250ZW50c1JlY3QoKTsK
KyAgICBtX3N0YXRlLm9wYWNpdHkgPSBtX2xheWVyLT5vcGFjaXR5KCk7CisgICAgbV9zdGF0ZS5j
b250ZW50c1JlY3QgPSBtX2xheWVyLT5jb250ZW50c1JlY3QoKTsKKyAgICBtX3N0YXRlLnByZXNl
cnZlczNEID0gbV9sYXllci0+cHJlc2VydmVzM0QoKTsKKyAgICBtX3N0YXRlLm1hc2tzVG9Cb3Vu
ZHMgPSBtX2xheWVyLT5tYXNrc1RvQm91bmRzKCk7CisgICAgbV9zdGF0ZS5kcmF3c0NvbnRlbnQg
PSBtX2xheWVyLT5kcmF3c0NvbnRlbnQoKTsKKyAgICBtX3N0YXRlLmNvbnRlbnRzT3BhcXVlID0g
bV9sYXllci0+Y29udGVudHNPcGFxdWUoKTsKKyAgICBtX3N0YXRlLmJhY2tmYWNlVmlzaWJpbGl0
eSA9IG1fbGF5ZXItPmJhY2tmYWNlVmlzaWJpbGl0eSgpOworICAgIG1fc3RhdGUuY2hpbGRyZW5U
cmFuc2Zvcm0gPSBtX2xheWVyLT5jaGlsZHJlblRyYW5zZm9ybSgpOworICAgIG1fY3VycmVudENv
bnRlbnQuY29udGVudFR5cGUgPSBtX3BlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlOworICAgIG1f
Y3VycmVudENvbnRlbnQuaW1hZ2UgPSBtX3BlbmRpbmdDb250ZW50LmltYWdlOworICAgIG1fY3Vy
cmVudENvbnRlbnQubWVkaWEgPSBtX3BlbmRpbmdDb250ZW50Lm1lZGlhOworICAgIG1fY3VycmVu
dENvbnRlbnQuYmFja2dyb3VuZENvbG9yID0gbV9wZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5kQ29s
b3I7CisgICAgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgPSBtX2N1cnJlbnRDb250ZW50
Lm5lZWRzRGlzcGxheSB8fCBtX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheTsKKyAgICBtX2N1
cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QudW5pdGUobV9wZW5kaW5nQ29udGVudC5uZWVk
c0Rpc3BsYXlSZWN0KTsKKyAgICBtX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheSA9IGZhbHNl
OworICAgIG1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCA9IEludFJlY3QoKTsKKyAg
ICBtX2NoYW5nZU1hc2sgPSBOb0NoYW5nZXM7CisgICAgYWZ0ZXJDdXJyZW50TGF5ZXJTeW5jOgor
ICAgIGlmIChuZWVkc1RvSW52YWxpZGF0ZVRyYW5zZm9ybSkKKyAgICAgICAgaW52YWxpZGF0ZVRy
YW5zZm9ybSgpOworCisgICAgaWYgKG1fc3RhdGUubWFza0xheWVyKSB7CisgICAgICAgIG1fc3Rh
dGUubWFza0xheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShmYWxzZSk7CisgICAgICAgIGlmICht
X3N0YXRlLm1hc2tMYXllci0+bV9zaXplLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fc3RhdGUu
bWFza0xheWVyLT5tX3NpemUgPSBtX3NpemU7CisgICAgfQorCisgICAgaWYgKG1fc3RhdGUucmVw
bGljYUxheWVyKQorICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+c3luY0NvbXBvc2l0aW5n
U3RhdGUoZmFsc2UpOworCisjaWYgMAorICAgIGlmIChtX3N0YXRlLmRpcnR5ICYmIG1fdGV4dHVy
ZSAmJiBtX3RleHR1cmUtPmFsbG93T2ZmbGluZVRleHR1cmVVcGxvYWQoKSkKKyAgICAgICAgdXBs
b2FkVGV4dHVyZUZyb21Db250ZW50KDApOworI2VuZGlmCisKKyAgICBpZiAoIXJlY3Vyc2UpCisg
ICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IGludCBjaGlsZHJlblNpemUgPSBtX2NoaWxkcmVu
LnNpemUoKTsKKyAgICBmb3IgKGludCBpID0gY2hpbGRyZW5TaXplLTE7IGkgPj0gMDsgLS1pKQor
ICAgICAgICBtX2NoaWxkcmVuW2ldLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSh0cnVlKTsKK30KKwor
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKEdy
YXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKKyAgICA6IEdyYXBoaWNzTGF5ZXIoY2xpZW50KQor
ICAgICwgbV9ub2RlKG5ldyBUZXh0dXJlTWFwcGVyTm9kZSh0aGlzKSkKK3sKK30KKwordm9pZCBH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCit7
CisgICAgbV9ub2RlLT5tX25hbWUgPSBuYW1lOworfQorCitHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6fkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKCkKK3sKK30KKworLyogXHJlaW1wIChH
cmFwaGljc0xheWVyLmgpOiBUaGUgY3VycmVudCBzaXplIG1pZ2h0IGNoYW5nZSwgdGh1cyB3ZSBu
ZWVkIHRvIHVwZGF0ZSB0aGUgd2hvbGUgZGlzcGxheS4KKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyOjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAgIG1fbm9kZS0+bV9wZW5kaW5n
Q29udGVudC5uZWVkc0Rpc3BsYXkgPSB0cnVlOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRl
eHR1cmVNYXBwZXJOb2RlOjpEaXNwbGF5Q2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGlj
c0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAobV9ub2RlLT5t
X3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbm9k
ZS0+bV9wZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXlSZWN0LnVuaXRlKEludFJlY3QocmVjdCkp
OworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpEaXNwbGF5Q2hh
bmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0UGFyZW50KEdyYXBoaWNzTGF5ZXIqIGxheWVyKQorewor
ICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpQYXJlbnRDaGFuZ2Up
OworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFBhcmVudChsYXllcik7Cit9CisKKy8qIFxyZWltcCAo
R3JhcGhpY3NMYXllci5oKQorKi8KK2Jvb2wgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNl
dENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuKQoreworICAg
IG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDaGlsZHJlbkNoYW5nZSk7
CisgICAgcmV0dXJuIEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuKGNoaWxkcmVuKTsKK30KKwor
LyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcjo6YWRkQ2hpbGQoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgbV9ub2RlLT5u
b3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNoaWxkcmVuQ2hhbmdlKTsKKyAgICBHcmFw
aGljc0xheWVyOjphZGRDaGlsZChsYXllcik7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXll
ci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkQXRJbmRl
eChHcmFwaGljc0xheWVyKiBsYXllciwgaW50IGluZGV4KQoreworICAgIEdyYXBoaWNzTGF5ZXI6
OmFkZENoaWxkQXRJbmRleChsYXllciwgaW5kZXgpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdl
KFRleHR1cmVNYXBwZXJOb2RlOjpDaGlsZHJlbkNoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3Jh
cGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENo
aWxkQWJvdmUoR3JhcGhpY3NMYXllciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpCit7
CisgICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUobGF5ZXIsIHNpYmxpbmcpOworICAg
ICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2Up
OworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjphZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFw
aGljc0xheWVyKiBzaWJsaW5nKQoreworCisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxv
dyhsYXllciwgc2libGluZyk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBl
ck5vZGU6OkNoaWxkcmVuQ2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgp
CisqLworYm9vbCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cmVwbGFjZUNoaWxkKEdyYXBo
aWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFwaGljc0xheWVyKiBuZXdDaGlsZCkKK3sKKyAgICBpZiAo
R3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKG9sZENoaWxkLCBuZXdDaGlsZCkpIHsKKyAgICAg
ICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNoaWxkcmVuQ2hhbmdl
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
CisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyOjpyZW1vdmVGcm9tUGFyZW50KCkKK3sKKyAgICBpZiAoIXBhcmVudCgpKQorICAg
ICAgICByZXR1cm47CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6
OlBhcmVudENoYW5nZSk7CisgICAgR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpOwor
fQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyOjpzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciogdmFsdWUpCit7CisgICAg
aWYgKHZhbHVlID09IG1hc2tMYXllcigpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NM
YXllcjo6c2V0TWFza0xheWVyKHZhbHVlKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0
dXJlTWFwcGVyTm9kZTo6TWFza0xheWVyQ2hhbmdlKTsKK30KKworCisvKiBccmVpbXAgKEdyYXBo
aWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRSZXBs
aWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0g
cmVwbGljYUxheWVyKCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRS
ZXBsaWNhdGVkQnlMYXllcih2YWx1ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVy
ZU1hcHBlck5vZGU6OlJlcGxpY2FMYXllckNoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhp
Y3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldFBvc2l0
aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBwb3NpdGlv
bigpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24odmFs
dWUpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpQb3NpdGlv
bkNoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQz
RCYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IGFuY2hvclBvaW50KCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2ludCh2YWx1ZSk7CisgICAgbV9u
b2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkFuY2hvclBvaW50Q2hhbmdlKTsK
K30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcjo6c2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHZhbHVlKQoreworICAgIGlm
ICh2YWx1ZSA9PSBzaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6
OnNldFNpemUodmFsdWUpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJO
b2RlOjpTaXplQ2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwor
dm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gdHJhbnNmb3JtKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybSh2YWx1
ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlRyYW5zZm9y
bUNoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENoaWxkcmVuVHJhbnNmb3JtKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gY2hpbGRyZW5UcmFu
c2Zvcm0oKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVu
VHJhbnNmb3JtKHZhbHVlKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVy
Tm9kZTo6Q2hpbGRyZW5UcmFuc2Zvcm1DaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNz
TGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRQcmVzZXJ2
ZXMzRChib29sIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBwcmVzZXJ2ZXMzRCgpKQorICAg
ICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0QodmFsdWUpOwor
ICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpQcmVzZXJ2ZXMzRENo
YW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OnNldE1hc2tzVG9Cb3VuZHMoYm9vbCB2YWx1ZSkKK3sKKyAg
ICBpZiAodmFsdWUgPT0gbWFza3NUb0JvdW5kcygpKQorICAgICAgICByZXR1cm47CisgICAgR3Jh
cGhpY3NMYXllcjo6c2V0TWFza3NUb0JvdW5kcyh2YWx1ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlD
aGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6Ok1hc2tzVG9Cb3VuZHNDaGFuZ2UpOworfQorCisvKiBc
cmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyOjpzZXREcmF3c0NvbnRlbnQoYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gZHJh
d3NDb250ZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShU
ZXh0dXJlTWFwcGVyTm9kZTo6RHJhd3NDb250ZW50Q2hhbmdlKTsKKyAgICBHcmFwaGljc0xheWVy
OjpzZXREcmF3c0NvbnRlbnQodmFsdWUpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIu
aCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRCYWNrZ3JvdW5kQ29s
b3IoY29uc3QgQ29sb3ImIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBtX25vZGUtPm1fcGVu
ZGluZ0NvbnRlbnQuYmFja2dyb3VuZENvbG9yKQorICAgICAgICByZXR1cm47CisgICAgbV9ub2Rl
LT5tX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xvciA9IHZhbHVlOworICAgIEdyYXBoaWNz
TGF5ZXI6OnNldEJhY2tncm91bmRDb2xvcih2YWx1ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFu
Z2UoVGV4dHVyZU1hcHBlck5vZGU6OkJhY2tncm91bmRDb2xvckNoYW5nZSk7Cit9CisKKy8qIFxy
ZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI6OmNsZWFyQmFja2dyb3VuZENvbG9yKCkKK3sKKyAgICBpZiAoIW1fbm9kZS0+bV9wZW5kaW5n
Q29udGVudC5iYWNrZ3JvdW5kQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisgICAg
bV9ub2RlLT5tX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xvciA9IENvbG9yKCk7CisgICAg
R3JhcGhpY3NMYXllcjo6Y2xlYXJCYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICBtX25vZGUtPm5vdGlm
eUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6QmFja2dyb3VuZENvbG9yQ2hhbmdlKTsKK30KKwor
LyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcjo6c2V0Q29udGVudHNPcGFxdWUoYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUg
PT0gY29udGVudHNPcGFxdWUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbm9kZS0+bm90aWZ5
Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50c09wYXF1ZUNoYW5nZSk7CisgICAgR3Jh
cGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUodmFsdWUpOworfQorCisvKiBccmVpbXAgKEdy
YXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRC
YWNrZmFjZVZpc2liaWxpdHkoYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gYmFja2Zh
Y2VWaXNpYmlsaXR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRC
YWNrZmFjZVZpc2liaWxpdHkodmFsdWUpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1
cmVNYXBwZXJOb2RlOjpCYWNrZmFjZVZpc2liaWxpdHlDaGFuZ2UpOworfQorCisvKiBccmVpbXAg
KEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpz
ZXRPcGFjaXR5KGZsb2F0IHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBvcGFjaXR5KCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRPcGFjaXR5KHZhbHVlKTsKKyAg
ICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6T3BhY2l0eUNoYW5nZSk7
Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiB2YWx1ZSkKK3sK
KyAgICBpZiAodmFsdWUgPT0gY29udGVudHNSZWN0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBH
cmFwaGljc0xheWVyOjpzZXRDb250ZW50c1JlY3QodmFsdWUpOworICAgIG1fbm9kZS0+bm90aWZ5
Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50c1JlY3RDaGFuZ2UpOworfQorCisvKiBc
cmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQoreworICAgIG1fbm9kZS0+bm90
aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50Q2hhbmdlKTsKKyAgICBtX25vZGUt
Pm1fcGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGUgPSBpbWFnZSA/IFRleHR1cmVNYXBwZXJOb2Rl
OjpEaXJlY3RJbWFnZUNvbnRlbnRUeXBlIDogVGV4dHVyZU1hcHBlck5vZGU6OkhUTUxDb250ZW50
VHlwZTsKKyAgICBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQuaW1hZ2UgPSBpbWFnZTsKKyAgICBH
cmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UpOworfQorCisvKiBccmVpbXAg
KEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpz
ZXRDb250ZW50c0JhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgbV9u
b2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRDaGFuZ2UpOworICAg
IG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSA9IFRleHR1cmVNYXBwZXJOb2Rl
OjpDb2xvckNvbnRlbnRUeXBlOworICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5iYWNrZ3Jv
dW5kQ29sb3IgPSBjb2xvcjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c0JhY2tncm91
bmRDb2xvcihjb2xvcik7Cit9CisKKwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6
c2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqIG1lZGlhKQoreworICAgIEdyYXBoaWNz
TGF5ZXI6OnNldENvbnRlbnRzVG9NZWRpYShtZWRpYSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFu
Z2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRDaGFuZ2UpOworICAgIG1fbm9kZS0+bV9wZW5k
aW5nQ29udGVudC5jb250ZW50VHlwZSA9IG1lZGlhID8gVGV4dHVyZU1hcHBlck5vZGU6Ok1lZGlh
Q29udGVudFR5cGUgOiBUZXh0dXJlTWFwcGVyTm9kZTo6SFRNTENvbnRlbnRUeXBlOworICAgIGlm
IChtZWRpYSkKKyAgICAgICAgbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50Lm1lZGlhID0gc3RhdGlj
X2Nhc3Q8VGV4dHVyZU1hcHBlclZpZGVvTGF5ZXIqPihtZWRpYSk7CisgICAgZWxzZQorICAgICAg
ICBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQubWVkaWEgPSAwOworfQorCisvKiBccmVpbXAgKEdy
YXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRD
b250ZW50c09yaWVudGF0aW9uKENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBvcmll
bnRhdGlvbikKK3sKKyAgICBpZiAoY29udGVudHNPcmllbnRhdGlvbigpID09IG9yaWVudGF0aW9u
KQorICAgICAgICByZXR1cm47CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBl
ck5vZGU6OkNvbnRlbnRzT3JpZW50YXRpb25DaGFuZ2UpOworICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dENvbnRlbnRzT3JpZW50YXRpb24ob3JpZW50YXRpb24pOworfQorCisvKiBccmVpbXAgKEdyYXBo
aWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzeW5jQ29t
cG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKQoreworICAgIG1fbm9kZS0+c3luY0NvbXBv
c2l0aW5nU3RhdGUoZmFsc2UpOworICAgIG1fbm9kZS0+cGVyZm9ybVBvc3RTeW5jT3BlcmF0aW9u
cygpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSgpCit7CisgICAgR3JhcGhp
Y3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKKyAgICBtX25vZGUtPnN5bmNDb21wb3Np
dGluZ1N0YXRlKHRydWUpOworICAgIG1fbm9kZS0+cGVyZm9ybVBvc3RTeW5jT3BlcmF0aW9ucygp
OworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyAqLworTmF0aXZlTGF5ZXIgR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6Om5hdGl2ZUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9ub2RlLmdldCgpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCitQ
bGF0Zm9ybUxheWVyKiBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1MYXllcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbm9kZS5nZXQoKTsKK30KKworUGFzc093blB0cjxHcmFw
aGljc0xheWVyPiBHcmFwaGljc0xheWVyOjpjcmVhdGUoR3JhcGhpY3NMYXllckNsaWVudCogY2xp
ZW50KQoreworICAgIHJldHVybiBuZXcgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoY2xpZW50
KTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMWExNThmMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKQEAgLTAsMCAr
MSw5NiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcl9oCisjZGVmaW5lIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyX2gKKworI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKworI2lmIEVO
QUJMRSgzRF9DQU5WQVMpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNlbmRpZgor
CisjZGVmaW5lIEVOQUJMRV9URVhNQVBfQU5JTUFUSU9OIDAKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBUZXh0dXJlTWFwcGVyTm9kZTsKK2NsYXNzIEJpdG1hcFRleHR1cmU7CitjbGFz
cyBUZXh0dXJlTWFwcGVyOworCitjbGFzcyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciA6IHB1
YmxpYyBHcmFwaGljc0xheWVyIHsKKyAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlck5vZGU7
CisKK3B1YmxpYzoKKyAgICBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihHcmFwaGljc0xheWVy
Q2xpZW50Kik7CisgICAgdmlydHVhbCB+R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoKTsKKwor
ICAgIC8vIHJlaW1wcyBmcm9tIEdyYXBoaWNzTGF5ZXIuaAorICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNv
bnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJlbnQoR3JhcGhpY3NMYXll
ciogbGF5ZXIpOworICAgIHZpcnR1YWwgYm9vbCBzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3Jh
cGhpY3NMYXllcio+Jik7CisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKEdyYXBoaWNzTGF5ZXIq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqLCBpbnQg
aW5kZXgpOworICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqIGxh
eWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRC
ZWxvdyhHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGluZyk7CisgICAg
dmlydHVhbCBib29sIHJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiBvbGRDaGlsZCwgR3JhcGhp
Y3NMYXllciogbmV3Q2hpbGQpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVGcm9tUGFyZW50KCk7
CisgICAgdmlydHVhbCB2b2lkIHNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKiBsYXllcik7Cisg
ICAgdmlydHVhbCB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHApOworICAgIHZp
cnR1YWwgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHApOworICAgIHZp
cnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSk7CisgICAgdmlydHVhbCB2
b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCk7CisgICAgdmly
dHVhbCB2b2lkIHNldENoaWxkcmVuVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiB0KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlc2VydmVzM0QoYm9vbCBiKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sIGIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRE
cmF3c0NvbnRlbnQoYm9vbCBiKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9y
KGNvbnN0IENvbG9yJik7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQmFja2dyb3VuZENvbG9yKCk7
CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzT3BhcXVlKGJvb2wgYik7CisgICAgdmlydHVh
bCB2b2lkIHNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sIGIpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1Jl
Y3QoY29uc3QgSW50UmVjdCYgcik7CisgICAgdmlydHVhbCB2b2lkIHNldFJlcGxpY2F0ZWRCeUxh
eWVyKEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdl
KEltYWdlKik7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxh
eWVyKik7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzQmFja2dyb3VuZENvbG9yKGNvbnN0
IENvbG9yJik7CisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29u
dGVudHNUb0dyYXBoaWNzQ29udGV4dDNEKGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAg
dmlydHVhbCB2b2lkIHNldEdyYXBoaWNzQ29udGV4dDNETmVlZHNEaXNwbGF5KCk7CisjZW5kaWYK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNPcmllbnRhdGlvbihDb21wb3NpdGluZ0Nvb3Jk
aW5hdGVzT3JpZW50YXRpb24gb3JpZW50YXRpb24pOworICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29t
cG9zaXRpbmdTdGF0ZSgpOworICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZUZv
clRoaXNMYXllck9ubHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcm
IG5hbWUpOworICAgIHZpcnR1YWwgTmF0aXZlTGF5ZXIgbmF0aXZlTGF5ZXIoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKKworICAgIHZp
cnR1YWwgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJ
bnRTaXplJiAvKmJveFNpemUqLywgY29uc3QgQW5pbWF0aW9uKiwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIC8qa2V5ZnJhbWVzTmFtZSovLCBkb3VibGUgLyp0
aW1lT2Zmc2V0Ki8pIHsgcmV0dXJuIGZhbHNlOyB9CisKK3ByaXZhdGU6CisgICAgT3duUHRyPFRl
eHR1cmVNYXBwZXJOb2RlPiBtX25vZGU7Cit9OworCit9CisjZW5kaWYgLy8gR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXJfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYzFj
NmQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyLmgKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEw
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFRleHR1cmVNYXBwZXJfaAorI2RlZmluZSBUZXh0dXJl
TWFwcGVyX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiAoZGVmaW5l
ZChRVF9PUEVOR0xfTElCKSkKKyAgICAjaWYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikgJiYgIWRl
ZmluZWQoVEVYTUFQX09QRU5HTF9FU18yKQorICAgICAgICAjZGVmaW5lIFRFWE1BUF9PUEVOR0xf
RVNfMgorICAgICNlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlRy
YW5zZm9ybWF0aW9uTWF0cml4LmgiCisKKy8qCisgICAgVGV4dHVyZU1hcHBlciBpcyBhIG1lY2hh
bmlzbSB0aGF0IGVuYWJsZXMgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIG9mIENTUyBhbmltYXRpb25z
IChhY2NlbGVyYXRlZCBjb21wb3NpdGluZykgd2l0aG91dAorICAgIGEgbmVlZCBmb3IgYSBwbGF0
Zm9ybSBzcGVjaWZpYyBzY2VuZS1ncmFwaCBsaWJyYXJ5IGxpa2UgQ29yZUFuaW1hdGlvbnMgb3Ig
UUdyYXBoaWNzVmlldy4KKyovCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGV4dHVy
ZU1hcHBlcjsKKworLy8gQSAyRCB0ZXh0dXJlIHRoYXQgY2FuIGJlIHRoZSB0YXJnZXQgb2Ygc29m
dHdhcmUgb3IgR0wgcmVuZGVyaW5nLgorY2xhc3MgQml0bWFwVGV4dHVyZSAgOiBwdWJsaWMgUmVm
Q291bnRlZDxCaXRtYXBUZXh0dXJlPiB7CitwdWJsaWM6CisgICAgQml0bWFwVGV4dHVyZSgpIDog
bV9sb2NrQ291bnQoMCkge30KKyAgICB2aXJ0dWFsIH5CaXRtYXBUZXh0dXJlKCkgeyB9CisKKyAg
ICB2aXJ0dWFsIGJvb2wgYWxsb3dPZmZsaW5lVGV4dHVyZVVwbG9hZCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSA9IDA7CisgICAgdmlydHVhbCBJ
bnRTaXplIHNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlc2V0KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wg
b3BhcXVlID0gZmFsc2UpCisgICAgeworICAgICAgICBtX2lzT3BhcXVlID0gb3BhcXVlOworICAg
ICAgICBtX2NvbnRlbnRTaXplID0gc2l6ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludCgpID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50TWVkaWEoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGJlZ2luUGFpbnQoSW50UmVjdCgwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgp
KSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKSA9
IDA7CisgICAgdmlydHVhbCBib29sIHNhdmUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkgeyByZXR1
cm4gZmFsc2U7IH0KKworICAgIGlubGluZSB2b2lkIGxvY2soKSB7ICsrbV9sb2NrQ291bnQ7IH0K
KyAgICBpbmxpbmUgdm9pZCB1bmxvY2soKSB7IC0tbV9sb2NrQ291bnQ7IH0KKyAgICBpbmxpbmUg
Ym9vbCBpc0xvY2tlZCgpIHsgcmV0dXJuIG1fbG9ja0NvdW50OyB9CisgICAgaW5saW5lIEludFNp
emUgY29udGVudFNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRTaXplOyB9CisgICAgaW5s
aW5lIHZvaWQgc2V0T2Zmc2V0KGNvbnN0IEludFBvaW50JiBvKSB7IG1fb2Zmc2V0ID0gbzsgfQor
ICAgIGlubGluZSBJbnRQb2ludCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQor
cHJpdmF0ZToKKyAgICBpbnQgbV9sb2NrQ291bnQ7CisgICAgSW50U2l6ZSBtX2NvbnRlbnRTaXpl
OworICAgIGJvb2wgbV9pc09wYXF1ZTsKKyAgICBJbnRQb2ludCBtX29mZnNldDsKK307CisKKy8v
IEEgImNvbnRleHQiIGNsYXNzIHVzZWQgdG8gZW5jYXBzdWxhdGUgYWNjZWxlcmF0ZWQgdGV4dHVy
ZSBtYXBwaW5nIGZ1bmN0aW9uczogaS5lLiBkcmF3aW5nIGEgdGV4dHVyZQorLy8gb250byB0aGUg
c2NyZWVuIG9yIGludG8gYW5vdGhlciB0ZXh0dXJlIHdpdGggYSBzcGVjaWZpZWQgdHJhbnNmb3Jt
LCBvcGFjaXR5IGFuZCBtYXNrLgorY2xhc3MgVGV4dHVyZU1hcHBlciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFRleHR1cmVNYXBwZXI+IHsKKyAgICBmcmllbmQgY2xhc3MgQml0bWFwVGV4dHVyZTsKKwor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXI+IGNyZWF0ZShHcmFw
aGljc0NvbnRleHQqKTsKKyAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyKCkgeyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29u
c3QgSW50UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4ID0g
VHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgZmxvYXQgb3BhY2l0eSA9IDEuMGYsIGNvbnN0IEJpdG1h
cFRleHR1cmUqIG1hc2tUZXh0dXJlID0gMCkgPSAwOworCisgICAgLy8gbWFrZXMgYSBzdXJmYWNl
IHRoZSB0YXJnZXQgZm9yIHRoZSBmb2xsb3dpbmcgZHJhd1RleHR1cmUgY2FsbHMuCisgICAgdmly
dHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRUb1RhcmdldChjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBj
b25zdCBJbnRTaXplJiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQg
b3BhY2l0eSwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpCisgICAgeworICAgICAgICBkcmF3
VGV4dHVyZSh0ZXh0dXJlLCBJbnRSZWN0KDAsIDAsIHRleHR1cmUuY29udGVudFNpemUoKS53aWR0
aCgpLCB0ZXh0dXJlLmNvbnRlbnRTaXplKCkuaGVpZ2h0KCkpLCBtYXRyaXgsIG9wYWNpdHksIDAp
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRDbGlwKGNvbnN0IEludFJlY3QmKSA9IDA7
CisgICAgdmlydHVhbCBib29sIGFsbG93U3VyZmFjZUZvclJvb3QoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKSA9IDA7Cisg
ICAgdmlydHVhbCBjb25zdCBjaGFyKiB0eXBlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBjbGVhbnVwKCkge30KKworICAgIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2djOworICAgIH0KKworcHJvdGVjdGVkOgor
ICAgIFRleHR1cmVNYXBwZXIoR3JhcGhpY3NDb250ZXh0KiBnYykgOiBtX2djKGdjKSB7fQorICAg
IEdyYXBoaWNzQ29udGV4dCogbV9nYzsKK307CisKK307CisKKyNlbmRpZgorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjIzZTlmYzkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisg
ICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyovCisKKyNpZm5kZWYgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJfaAorI2Rl
ZmluZSBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcl9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgSW50UmVjdDsKK2NsYXNzIEludFNpemU7
CitjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKKworCisvLyBHbHVlIGxheWVyIHRvIGNvbm5l
Y3QgdGhlIHRleG1hcCBsYXllciB0byB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgY29udGFpbmVyLgor
Y2xhc3MgVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5U
ZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQoKSB7fQorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rp
c3BsYXkoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25z
dCBJbnRSZWN0JiByZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFNpemVDaGFuZ2VkKGNv
bnN0IEludFNpemUmKSA9IDA7Cit9OworCitjbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ciB7CitwdWJsaWM6CisgICAgZW51bSBUeXBlIHsKKyAgICAgICAgQ29udGVudExheWVyLAorICAg
ICAgICBWaWRlb0xheWVyCisgICAgfTsKKworICAgIHZpcnR1YWwgVHlwZSBsYXllclR5cGUoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIoKSB7fQor
fTsKKworY2xhc3MgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllciA6IHB1YmxpYyBUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHNldFBsYXRmb3Jt
TGF5ZXJDbGllbnQoVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50KikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UmVjdCYgZXhwb3NlZFJlY3QsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHkpIHt9CisgICAgdmlydHVhbCBJ
bnRTaXplIHNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFudXBUZXh0dXJl
TWFwcGVyKCkge30KKyAgICB2aXJ0dWFsIFR5cGUgbGF5ZXJUeXBlKCkgY29uc3QgeyByZXR1cm4g
Q29udGVudExheWVyOyB9Cit9OworCisjaWYgRU5BQkxFKFZJREVPKQorY2xhc3MgVGV4dHVyZU1h
cHBlclZpZGVvTGF5ZXIgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIgeworcHVi
bGljOgorICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqKSA9IDA7CisgICAg
dmlydHVhbCBUeXBlIGxheWVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFZpZGVvTGF5ZXI7IH0KK307
CisjZW5kaWYKKworfQorCisjZW5kaWYgLy8gVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69811</attachid>
            <date>2010-10-05 11:03:07 -0700</date>
            <delta_ts>2010-10-05 11:49:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch-47070-4.diff</filename>
            <type>text/plain</type>
            <size>120429</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL292ZXJmbG93L3Njcm9sbC1hbmNl
c3Rvci11cGRhdGUuaHRtbCBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL292ZXJmbG93L3Njcm9s
bC1hbmNlc3Rvci11cGRhdGUuaHRtbAppbmRleCA1M2M2NmJhLi5iMDI4OWM1IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9vdmVyZmxvdy9zY3JvbGwtYW5jZXN0b3ItdXBkYXRl
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3ZlcmZsb3cvc2Nyb2xsLWFuY2Vz
dG9yLXVwZGF0ZS5odG1sCkBAIC0xNCw3ICsxNCw2IEBACiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIC5jb250YWluZXIgewotICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAg
ICAgICAgICAgdG9wOiA1MHB4OwogICAgICAgICAgICAgbGVmdDogNTBweDsKICAgICAgICAgICAg
IGhlaWdodDogMjAwcHg7CkBAIC0yNyw3ICsyNiw3IEBACiAgICAgICAgICAgICB3aWR0aDogMjAw
cHg7CiAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsKICAgICAgICAgfQotICAg
ICAgICAKKwogICAgICAgICAuY29udGVudCB7CiAgICAgICAgICAgICBoZWlnaHQ6IDUwMHB4Owog
ICAgICAgICB9CkBAIC0zOCw2ICszNyw3IEBACiAgICAgICAgIH0KIAogICAgICAgICAudGVzdGVy
IHsKKyAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7CiAgICAgICAgICAg
ICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgICBtYXJnaW4tdG9wOiA1MHB4OwogICAg
ICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47CkBAIC01Myw3ICs1Myw3IEBACiAgICAg
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KICAgICAgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKICAgICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci53YWl0VW50aWxEb25lKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGZ1bmN0aW9uIHNj
cm9sbFRlc3REaXYoKQogICAgICAgICB7CiAgICAgICAgICAgICB2YXIgc2Nyb2xsZXIgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnc2Nyb2xsZXInKTsKQEAgLTczLDggKzczLDYgQEAKICAgICA8
L2Rpdj4KICAgICA8cD5UaGUgZ3JlZW4gYm94IHNob3VsZCBvYnNjdXJlIHRoZSByZWQgYm94LCBh
bmQgbW92ZSB3aGVuIHlvdSBkcmFnIHRoZSBzY3JvbGxiYXIuPC9wPgogICA8L2Rpdj4KLSAgCi0g
IDx2aWRlbyBzcmM9Ii4uL3Jlc291cmNlcy92aWRlby5tcDQiPjwvdmlkZW8+CiAKICAgPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KICAgICB2YXIgdmlkZW8g
PSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndmlkZW8nKVswXTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzJiZjllNy4uYjM3
MGQzYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTIsNiArMiwxNzIgQEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KIAorICAgICAgICBbVGV4bWFwXSBbUXRdIFRleHR1cmUgbWFwcGVyIGluaXRpYWwgaW1wbGVt
ZW50YXRpb24KKyAgICAgICAgVGV4dHVyZSBNYXBwZXIgaXMgYW4gaW1wbGVtZW50YXRpb24gb2Yg
YWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgdGhhdCBkb2Vzbid0IHJlcXVpcmUgYQorICAgICAgICBw
bGF0Zm9ybSBzcGVjaWZpYyBzY2VuZWdyYXBoIGxpYnJhcnkgbGlrZSBDQSBvciBRR3JhcGhpY3NW
aWV3LiBUaGUgaWRlYSBpcyB0aGF0IHdpdGgKKyAgICAgICAgdGltZSB0aGlzIHdvdWxkIHJlcGxh
Y2UgR3JhcGhpY3NMYXllclF0LCBhbmQgY291bGQgc2VydmUgYXMgYW4gaW1wbGVtZW50YXRpb24g
Zm9yIG90aGVyCisgICAgICAgIHBsYXRmb3JtcyB0aGF0IGRvbid0IGhhdmUgYSBzY2VuZWdyYXBo
IGxpYnJhcnkuIFRoZSBmaXJzdCBzdGFnZSBvZiB0aGlzIGlzIHRvIGFkZCBhbGwgdGhlIGNvZGUg
dG8gdHJ1bmssCisgICAgICAgIGFuZCBlbmFibGUgaXQgaW4gUXQgd2l0aCBhbiBvcHQtaW4gYnVp
bGQgZmxhZyBzbyB0aGF0IGl0IGNhbiBiZSBlYXNpbHkgdGVzdGVkLiBPbmNlIGl0IHJlYWNoZXMK
KyAgICAgICAgYW4gYWRlcXVhdGUgbGV2ZWwgb2Ygc3RhYmlsaXR5LCB3ZSBjYW4gZW5hYmxlIGl0
IGJ5IGRlZmF1bHQgYW5kIGV2ZW50dWFsbHkgaGF2ZSBpdCByZXBsYWNlIEdyYXBoaWNzTGF5ZXJR
dC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcw
NzAKKworICAgICAgICBObyBuZXcgdGVzdHM6IGluaXRpYWwgcGF0Y2guCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpkZWJ1Z0dMQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpsb2FkUmVj
dFRvU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6Qml0bWFwVGV4
dHVyZUdMKToKKyAgICAgICAgKFdlYkNvcmU6OlRleG1hcFNoYWRlckluZm86OmdldFVuaWZvcm1M
b2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXhtYXBTaGFkZXJJbmZvOjpnZXRBdHRyaWJM
b2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXhtYXBTaGFkZXJJbmZvOjpjcmVhdGVTaGFk
ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6VGV4dHVyZU1h
cHBlckdMKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjp0eXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
VGV4dHVyZUdMOjpiZWdpblBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVH
TDo6ZW5kUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4bWFwR0xTaGFkZXJUZXh0dXJlczo6
ZmluZE9yQ3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleG1hcEdMU2hhZGVyVGV4dHVyZXM6
OmRlcmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6c2V0Q29udGVudHNU
b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6ZGVzdHJveSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmlzVmFsaWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwVGV4dHVyZUdMOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBy
b2plY3Rpb25NYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpjbGVh
bnVwKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6YmluZFN1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpzZXRDbGlwKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6cGFpbnRUb1RhcmdldCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyR0w6On5UZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMOjphbGxvd1N1cmZhY2VGb3JSb290KToKKyAgICAgICAgKFdlYkNvcmU6
OlJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyOjp+UkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6bnBvdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ2FjaGU6OkVudHJ5OjpFbnRyeSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyQ2FjaGU6OkVudHJ5OjpjYWxjdWxhdGVDb3N0KToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDYWNoZTo6RW50cnk6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNhY2hlOjpUZXh0dXJlTWFwcGVyQ2FjaGUpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNhY2hlOjpwdXJnZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyQ2FjaGU6Om1hcmspOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckNhY2hlTG9jazo6VGV4dHVyZU1hcHBlckNhY2hlTG9jayk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyQ2FjaGVMb2NrOjp+VGV4dHVyZU1hcHBlckNhY2hlTG9jayk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6bm90aWZ5QW5pbWF0aW9uU3RhcnRl
ZFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6Om5vdGlm
eUFuaW1hdGlvblN0YXJ0ZWRBc3luYyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
Tm9kZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6VHJhbnNm
b3JtRGF0YTo6VHJhbnNmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
Tm9kZTo6Q29udGVudERhdGE6OkNvbnRlbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJOb2RlOjp0YXIgICAgZ2V0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyTm9kZTo6ZnVsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5v
ZGU6OnJlcGxpY2FSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpH
cmFwaGljc0xheWVyQW5pbWF0aW9uOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldE5lZWRzRGlzcGxheUluUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzZXRQbGF0Zm9ybUxheWVyQ2xpZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbXBhcmVHcmFwaGljc0xheWVyc1pWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpzb3J0QnlaT3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5v
ZGU6Omhhc1N1cmZhY2VEZXNjZW5kYW50cyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyTm9kZTo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNv
dW50RGVzY2VuZGFudHNXaXRoQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyTm9kZTo6dG9UZXh0dXJlTWFwcGVyTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyTm9kZTo6Y29tcHV0ZUxheWVyVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyTm9kZTo6aW5pdGlhbGl6ZVRleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGU6OlRleHR1cmVNYXBwZXJOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJOb2RlOjpyb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlck5vZGU6OmludmFsaWRhdGVUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVMb2NhbFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTm9kZTo6ZmxhdHRlblRvMkRTcGFjZUlmTmVjZXNzYXJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpuZWFyZXN0U3VyZmFjZVNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVSZXBsaWNhVHJhbnNmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlVHJhbnNmb3Jt
YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpiZWdpbkFuaW1h
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6ZW5kQW5pbWF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjp1cGxvYWRUZXh0dXJlRnJv
bUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnBhaW50U2Vs
Zik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRSZWN1cnNpdmUp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNsZWFudXBUZXh0dXJlTWFw
cGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjp+VGV4dHVyZU1hcHBl
ck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldFRyYW5zZm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c2V0T3BhY2l0eUZyb21B
bmltYXRpb25GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6bm90
aWZ5VHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyTm9kZTo6bm90aWZ5T3BhY2l0eUFuaW1hdGlvblJ1bm5pbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlck5vZGU6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldFRyYW5zZm9ybUZyb21BbmltYXRpb25G
cmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6bm90aWZ5Q2hhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpwZXJmb3JtUG9zdFN5bmNP
cGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29t
cG9zaXRpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6On5HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TmVlZHNEaXNw
bGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRO
ZWVkc0Rpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6OnNldFBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcjo6c2V0Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjphZGRDaGlsZEF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkQWJvdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkQmVsb3cpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnJlcGxhY2VDaGlsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cmVtb3ZlRnJvbVBhcmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TWFz
a0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpz
ZXRSZXBsaWNhdGVkQnlMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcjo6c2V0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OnNldEFuY2hvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENoaWxkcmVuVHJhbnNmb3JtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRQcmVzZXJ2ZXMzRCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TWFza3NU
b0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6
c2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXI6OmNsZWFyQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c09wYXF1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0QmFja2ZhY2VWaXNp
YmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpz
ZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
OjpzZXRDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9NZWRp
YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29u
dGVudHNPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcjo6c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6bmF0aXZl
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnBs
YXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6Y3JlYXRlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmU6
OkJpdG1hcFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6fkJpdG1h
cFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6YWxsb3dPZmZsaW5l
VGV4dHVyZVVwbG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjpyZXNldCk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjpiZWdpblBhaW50TWVkaWEpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBUZXh0dXJlOjpsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmU6OnVu
bG9jayk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjppc0xvY2tlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjpjb250ZW50U2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBUZXh0dXJlOjpzZXRPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
VGV4dHVyZTo6b2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6On5UZXh0
dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6OnBhaW50VG9UYXJn
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6Y2xlYW51cCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpncmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlcjo6VGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyQ2xpZW50Ojp+VGV4dHVyZU1hcHBlckxh
eWVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
Ojp+VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckNvbnRlbnRMYXllcjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckNvbnRlbnRMYXllcjo6Y2xlYW51cFRleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6bGF5ZXJUeXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJWaWRlb0xheWVyOjpsYXllclR5cGUpOgorCisyMDEwLTEwLTAzICBO
bydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAgQWxsb3cgQ1NTIGFuaW1hdGlvbnMg
dG8gcnVuIGF0IG1vcmUgdGhhbiA0MEZQUwogICAgICAgICBBZGQgYSBzZXR0aW5ncyBmdW5jdGlv
biAoc2V0QW5pbWF0aW9uVGltZXJEZWxheSkgdGhhdCBhZmZlY3RzIEFuaW1hdGlvbkNvbnRyb2xs
ZXIncyB0aW1lci4gVGhpcyBpcyBpbiBhY2NvcmRhbmNlIHRvCiAgICAgICAgIGhvdyB0aGUgRE9N
VGltZXIgbWluaW11bSBpbnRlcnZhbCBzZXR0aW5ncyB3ZXJlIGRvbmUgaW4gYnVnIDQ1MzYyLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5k
ZXggYTg0NTJlNC4uOTdjNWUxZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysg
Yi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0yMTEsNiArMjExLDcgQEAgdjggewogICAgICAgICAk
JFBXRC9icmlkZ2UvYwogfQogCitRVCArPSBvcGVuZ2wKIAogV0VCQ09SRV9JTkNMVURFUEFUSCA9
IFwKICAgICAkJFBXRCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvVGV4dHVyZU1hcHBlckdMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hYzAyNmM4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMCwwICsxLDU5MiBAQAorLyoKKyBDb3B5cmln
aHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyR0wuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkhhc2hNYXAuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIlBhc3NSZWZQ
dHIuaCIKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKworI2lm
IGRlZmluZWQoVEVYTUFQX09QRU5HTF9FU18yKQorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2Vs
aWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgPGdsLmg+CisjZWxzZQorI2luY2x1ZGUgPEdML2ds
Lmg+CisjZW5kaWYKKworI2lmbmRlZiBURVhNQVBfT1BFTkdMX0VTMgorZXh0ZXJuICJDIiB7Cisg
ICAgdm9pZCBnbFVuaWZvcm0xZihHTGludCwgR0xmbG9hdCk7CisgICAgdm9pZCBnbFVuaWZvcm0x
aShHTGludCwgR0xpbnQpOworICAgIHZvaWQgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKEdMdWludCwg
R0xpbnQsIEdMZW51bSwgR0xib29sZWFuLCBHTHNpemVpLCBjb25zdCBHTHZvaWQqKTsKKyAgICB2
b2lkIGdsVW5pZm9ybTRmKEdMaW50LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZsb2F0
KTsKKyAgICB2b2lkIGdsU2hhZGVyU291cmNlKEdMdWludCwgR0xzaXplaSwgY29uc3QgY2hhcioq
LCBjb25zdCBHTGludCopOworICAgIEdMdWludCBnbENyZWF0ZVNoYWRlcihHTGVudW0pOworICAg
IHZvaWQgZ2xTaGFkZXJTb3VyY2UoR0x1aW50LCBHTHNpemVpLCBjb25zdCBjaGFyKiosIGNvbnN0
IEdMaW50Kik7CisgICAgdm9pZCBnbENvbXBpbGVTaGFkZXIoR0x1aW50KTsKKyAgICB2b2lkIGds
RGVsZXRlU2hhZGVyKEdMdWludCk7CisgICAgdm9pZCBnbFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQs
IEdMc2l6ZWksIEdMYm9vbGVhbiwgY29uc3QgR0xmbG9hdCopOworICAgIEdMdWludCBnbENyZWF0
ZVByb2dyYW0oKTsKKyAgICB2b2lkIGdsQXR0YWNoU2hhZGVyKEdMdWludCwgR0x1aW50KTsKKyAg
ICB2b2lkIGdsTGlua1Byb2dyYW0oR0x1aW50KTsKKyAgICB2b2lkIGdsVXNlUHJvZ3JhbShHTHVp
bnQpOworICAgIHZvaWQgZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0x1aW50KTsKKyAgICB2
b2lkIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0x1aW50KTsKKyAgICB2b2lkIGdsQmluZEZy
YW1lYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMdWludCBmcmFtZWJ1ZmZlcik7CisgICAgdm9pZCBn
bERlbGV0ZUZyYW1lYnVmZmVycyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCogZnJhbWVidWZmZXJz
KTsKKyAgICB2b2lkIGdsR2VuRnJhbWVidWZmZXJzKEdMc2l6ZWkgbiwgR0x1aW50KiBmcmFtZWJ1
ZmZlcnMpOworICAgIHZvaWQgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTGVudW0gdGFyZ2V0LCBH
TGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHRleHRhcmdldCwgR0x1aW50IHRleHR1cmUsIEdMaW50
IGxldmVsKTsKKyAgICB2b2lkIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYo
R0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBh
cmFtcyk7CisgICAgdm9pZCBnbEJpbmRCdWZmZXIoR0xlbnVtLCBHTHVpbnQpOworICAgIHZvaWQg
Z2xEZWxldGVCdWZmZXJzKEdMc2l6ZWksIGNvbnN0IEdMdWludCopOworICAgIHZvaWQgZ2xHZW5C
dWZmZXJzKEdMc2l6ZWksIEdMdWludCopOworICAgIHZvaWQgZ2xCdWZmZXJEYXRhKEdMZW51bSwg
R0xzaXplaXB0ciwgY29uc3QgR0x2b2lkKiwgR0xlbnVtKTsKKyAgICB2b2lkIGdsQnVmZmVyU3Vi
RGF0YShHTGVudW0sIEdMc2l6ZWlwdHIsIEdMc2l6ZWlwdHIsIGNvbnN0IEdMdm9pZCopOworICAg
IHZvaWQgZ2xHZXRQcm9ncmFtSW5mb0xvZyhHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSwgR0xzaXpl
aSosIEdMY2hhciopOworCisjaWYgIVBMQVRGT1JNKE1BQykKKyAgICBHTGludCBnbEdldFVuaWZv
cm1Mb2NhdGlvbihHTHVpbnQsIGNvbnN0IEdMY2hhciopOworICAgIEdMaW50IGdsQmluZEF0dHJp
YkxvY2F0aW9uKEdMdWludCwgR0x1aW50LCBjb25zdCBHTGNoYXIqKTsKKyNlbmRpZgorfQorI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworaW5saW5lIHN0YXRpYyB2b2lkIGRlYnVnR0xD
b21tYW5kKGNvbnN0IGNoYXIqIGNvbW1hbmQsIGludCBsaW5lKQoreworICAgIGNvbnN0IEdMZW51
bSBlcnIgPSBnbEdldEVycm9yKCk7CisgICAgaWYgKGVycikKKyAgICAgICAgV1RGUmVwb3J0RXJy
b3IoX19GSUxFX18sIGxpbmUsIFdURl9QUkVUVFlfRlVOQ1RJT04sICJbVGV4dHVyZU1hcHBlciBH
TF0gQ29tbWFuZCBmYWlsZWQ6ICVzICgleClcbiIsIGNvbW1hbmQsIGVycik7Cit9CisKKyNkZWZp
bmUgREVCVUdfR0xfQ09NTUFORFMKKworI2lmZGVmIERFQlVHX0dMX0NPTU1BTkRTCisjZGVmaW5l
IEdMX0NNRCh4KSB7eCwgZGVidWdHTENvbW1hbmQoI3gsIF9fTElORV9fKTsgfQorI2Vsc2UKKyNk
ZWZpbmUgR0xfQ01EKHgpIHgKKyNlbmRpZgorCitjbGFzcyBCaXRtYXBUZXh0dXJlR0wgOiBwdWJs
aWMgQml0bWFwVGV4dHVyZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsK
KyAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc1Zh
bGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHJlc2V0KGNvbnN0IEludFNpemUmLCBib29s
IG9wYXF1ZSk7CisgICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWlu
dChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludCgp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKTsKKworcHJpdmF0
ZToKKyAgICBHTHVpbnQgbV9pZDsKKyAgICBOYXRpdmVJbWFnZVB0ciBtX2ltYWdlOworICAgIEZs
b2F0U2l6ZSBtX3JlbGF0aXZlU2l6ZTsKKyAgICBib29sIG1fb3BhcXVlOworICAgIEludFNpemUg
bV90ZXh0dXJlU2l6ZTsKKyAgICBSZWZQdHI8UkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI+IG1f
YnVmZmVyOworICAgIEludFJlY3QgbV9kaXJ0eVJlY3Q7CisgICAgR0x1aW50IG1fZmJvOworICAg
IEludFNpemUgbV9hY3R1YWxTaXplOworICAgIGJvb2wgbV9zdXJmYWNlTmVlZHNSZXNldDsKKyAg
ICBCaXRtYXBUZXh0dXJlR0woKQorICAgICAgICA6IG1faWQoMCkKKyAgICAgICAgLCBtX2ltYWdl
KDApCisgICAgICAgICwgbV9vcGFxdWUoZmFsc2UpCisgICAgICAgICwgbV9mYm8oMCkKKyAgICAg
ICAgLCBtX3N1cmZhY2VOZWVkc1Jlc2V0KHRydWUpCisgICAgeworICAgIH0KKworICAgIGZyaWVu
ZCBjbGFzcyBUZXh0dXJlTWFwcGVyR0w7Cit9OworCitzdGF0aWMgc3RydWN0IFRleG1hcFNoYWRl
ckluZm8geworICAgIGVudW0gU2hhZGVyUHJvZ3JhbUluZGV4IHsKKyAgICAgICAgU2ltcGxlUHJv
Z3JhbSwKKyAgICAgICAgT3BhY2l0eUFuZE1hc2tQcm9ncmFtLAorICAgICAgICBUYXJnZXRQcm9n
cmFtLAorICAgICAgICBOdW1Qcm9ncmFtcworICAgIH07CisKKyAgICBlbnVtIFNoYWRlclZhcmlh
YmxlSW5kZXggeworICAgICAgICBJbk1hdHJpeFZhcmlhYmxlLAorICAgICAgICBJblNvdXJjZU1h
dHJpeFZhcmlhYmxlLAorICAgICAgICBJbk1hc2tNYXRyaXhWYXJpYWJsZSwKKyAgICAgICAgSW5W
ZXJ0ZXhWYXJpYWJsZSwKKworICAgICAgICBPcGFjaXR5VmFyaWFibGUsCisgICAgICAgIFNvdXJj
ZVRleHR1cmVWYXJpYWJsZSwKKyAgICAgICAgTWFza1RleHR1cmVWYXJpYWJsZSwKKyAgICAgICAg
TnVtVmFyaWFibGVzCisgICAgfTsKKworICAgIHN0cnVjdCBQcm9ncmFtSW5mbyB7CisgICAgICAg
IEdMdWludCBpZDsKKyAgICAgICAgR0xpbnQgdmFyc1tOdW1WYXJpYWJsZXNdOworICAgIH07CisK
KyAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oU2hhZGVyUHJvZ3JhbUluZGV4IHByb2csIFNo
YWRlclZhcmlhYmxlSW5kZXggdmFyLCBjb25zdCBjaGFyKiBuYW1lKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHByb2dyYW1zW3Byb2ddLnZhcnNbdmFyXSA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW1zW3Byb2ddLmlkLCBuYW1lKTsKKyAgICB9CisKKyAgICB2b2lkIGNyZWF0ZVNoYWRlclBy
b2dyYW0oY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVu
dFNoYWRlclNvdXJjZSwgU2hhZGVyUHJvZ3JhbUluZGV4IGluZGV4KQorICAgIHsKKyAgICAgICAg
R0x1aW50IHZlcnRleFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIpOwor
ICAgICAgICBHTHVpbnQgZnJhZ21lbnRTaGFkZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9GUkFHTUVO
VF9TSEFERVIpOworICAgICAgICBHTF9DTUQoZ2xTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAx
LCAmdmVydGV4U2hhZGVyU291cmNlLCAwKSkKKyAgICAgICAgR0xfQ01EKGdsU2hhZGVyU291cmNl
KGZyYWdtZW50U2hhZGVyLCAxLCAmZnJhZ21lbnRTaGFkZXJTb3VyY2UsIDApKQorICAgICAgICBH
THVpbnQgcHJvZ3JhbUlEID0gZ2xDcmVhdGVQcm9ncmFtKCk7CisgICAgICAgIEdMX0NNRChnbENv
bXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKSkKKyAgICAgICAgR0xfQ01EKGdsQ29tcGlsZVNoYWRl
cihmcmFnbWVudFNoYWRlcikpCisgICAgICAgIEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9ncmFt
SUQsIHZlcnRleFNoYWRlcikpCisgICAgICAgIEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9ncmFt
SUQsIGZyYWdtZW50U2hhZGVyKSkKKyAgICAgICAgR0xfQ01EKGdsQmluZEF0dHJpYkxvY2F0aW9u
KHByb2dyYW1JRCwgMCwgIkluVmVydGV4IikpCisgICAgICAgIEdMX0NNRChnbExpbmtQcm9ncmFt
KHByb2dyYW1JRCkpCisgICAgICAgIHByb2dyYW1zW2luZGV4XS5pZCA9IHByb2dyYW1JRDsKKyAg
ICAgICAgY2hhciBpbmZvTG9nWzEwMjRdOworICAgICAgICBpbnQgbGVuOworICAgICAgICBHTF9D
TUQoZ2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtSUQsIDEwMjQsICZsZW4sIGluZm9Mb2cpKTsK
Ky8vICAgICAgICBMT0coaW5mb0xvZyk7CisgICAgfQorCisgICAgUHJvZ3JhbUluZm8gcHJvZ3Jh
bXNbTnVtUHJvZ3JhbXNdOworCit9IGdTaGFkZXJJbmZvOworCisjZGVmaW5lIFRFWE1BUF9HRVRf
U0hBREVSX1ZBUl9MT0NBVElPTihwcm9nLCB2YXIpIFwKKyAgICAgICAgICAgIGlmIChnU2hhZGVy
SW5mby5nZXRVbmlmb3JtTG9jYXRpb24oVGV4bWFwU2hhZGVySW5mbzo6cHJvZyMjUHJvZ3JhbSwg
VGV4bWFwU2hhZGVySW5mbzo6dmFyIyNWYXJpYWJsZSwgI3ZhcikgPCAwKSBcCisgICAgICAgICAg
ICAgICAgICAgIExPR19FUlJPUigiQ291bGRuJ3QgZmluZCB2YXJpYWJsZSAiI3ZhciIgaW4gcHJv
Z3JhbSAiI3Byb2ciXG4iKTsKKyNkZWZpbmUgVEVYTUFQX0JVSUxEX1NIQURFUihwcm9ncmFtKSBn
U2hhZGVySW5mby5jcmVhdGVTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJjZSMjcHJvZ3Jh
bSwgZnJhZ21lbnRTaGFkZXJTb3VyY2UjI3Byb2dyYW0sIFRleG1hcFNoYWRlckluZm86OnByb2dy
YW0jI1Byb2dyYW0pOworCitUZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQpCisgICAgOiBUZXh0dXJlTWFwcGVyKGNvbnRleHQpCisgICAgLCBt
X2N1clByb2dyYW0oVGV4bWFwU2hhZGVySW5mbzo6VGFyZ2V0UHJvZ3JhbSkKK3sKKyAgICBzdGF0
aWMgYm9vbCBzaGFkZXJzQ29tcGlsZWQgPSBmYWxzZTsKKyAgICBpZiAoc2hhZGVyc0NvbXBpbGVk
KQorICAgICAgICByZXR1cm47CisgICAgc2hhZGVyc0NvbXBpbGVkID0gdHJ1ZTsKKyNpZm5kZWYg
VEVYTUFQX09QRU5HTF9FUzIKKyNkZWZpbmUgT0VTMl9QRVJDSVNJT05fREVGSU5JVElPTlMgXAor
ICAgICIjZGVmaW5lIGxvd3BcbiNkZWZpbmUgaGlnaHBcbiIKKyNlbHNlCisjZGVmaW5lIE9FUzJf
UEVSQ0lTSU9OX0RFRklOSVRJT05TCisjZW5kaWYKKworICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50
U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2sgPQorICAgICAgICAgICAgT0VTMl9QRVJDSVNJT05f
REVGSU5JVElPTlMKKyIgICAgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBTb3VyY2VUZXh0
dXJlLCBNYXNrVGV4dHVyZTsgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAg
ICAgIHVuaWZvcm0gbG93cCBmbG9hdCBPcGFjaXR5OyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIE91
dFRleENvb3JkU291cmNlLCBPdXRUZXhDb29yZE1hc2s7ICAgICAgICAgICAgICBcbiIKKyIgICAg
ICAgICAgICAgICB2b2lkIG1haW4odm9pZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4i
CisiICAgICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRChTb3VyY2VU
ZXh0dXJlLCBPdXRUZXhDb29yZFNvdXJjZSk7ICBcbiIKKyIgICAgICAgICAgICAgICAgICAgbG93
cCB2ZWM0IG1hc2tDb2xvciA9IHRleHR1cmUyRChNYXNrVGV4dHVyZSwgT3V0VGV4Q29vcmRNYXNr
KTsgIFxuIgorIiAgICAgICAgICAgICAgICAgICBsb3dwIGZsb2F0IG8gPSBPcGFjaXR5ICogbWFz
a0NvbG9yLmE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAg
ICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogbywgY29sb3IuYSAqIG8pOyAgICAg
ICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKworICAgIGNv
bnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrID0KKyAgICAgICAgICAg
IE9FUzJfUEVSQ0lTSU9OX0RFRklOSVRJT05TCisiICAgICAgICAgICAgICAgdW5pZm9ybSBtYXQ0
IEluTWF0cml4LCBJblNvdXJjZU1hdHJpeCwgSW5NYXNrTWF0cml4OyAgICAgICAgICAgIFxuIgor
IiAgICAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IEluVmVydGV4OyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hw
IHZlYzIgT3V0VGV4Q29vcmRTb3VyY2UsIE91dFRleENvb3JkTWFzazsgICAgICAgICAgXG4iCisi
ICAgICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIg
ICAgICAgICAgICAgICAgICAgT3V0VGV4Q29vcmRTb3VyY2UgPSB2ZWMyKEluU291cmNlTWF0cml4
ICogSW5WZXJ0ZXgpOyAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgIE91dFRleENvb3Jk
TWFzayA9IHZlYzIoSW5NYXNrTWF0cml4ICogSW5WZXJ0ZXgpOyAgICAgICAgICAgIFxuIgorIiAg
ICAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IEluTWF0cml4ICogSW5WZXJ0ZXg7ICAgICAg
ICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOworCisg
ICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUgPQorICAgICAgICAgICAg
T0VTMl9QRVJDSVNJT05fREVGSU5JVElPTlMKKyIgICAgICAgICAgICAgICB1bmlmb3JtIHNhbXBs
ZXIyRCBTb3VyY2VUZXh0dXJlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxu
IgorIiAgICAgICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCBPcGFjaXR5OyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgdmFyeWlu
ZyBoaWdocCB2ZWMyIE91dFRleENvb3JkU291cmNlOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcbiIKKyIgICAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAg
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRl
eHR1cmUyRChTb3VyY2VUZXh0dXJlLCBPdXRUZXhDb29yZFNvdXJjZSk7ICBcbiIKKyIgICAgICAg
ICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBPcGFjaXR5LCBjb2xv
ci5hICogT3BhY2l0eSk7ICAgIFxuIgorIiAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOwor
CisgICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlU2ltcGxlID0KKyAgICAgICAgICAg
IE9FUzJfUEVSQ0lTSU9OX0RFRklOSVRJT05TCisiICAgICAgICAgICAgICAgdW5pZm9ybSBtYXQ0
IEluTWF0cml4LCBJblNvdXJjZU1hdHJpeDsgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAg
ICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgSW5WZXJ0ZXg7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIE91
dFRleENvb3JkU291cmNlOyAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAg
ICAgdm9pZCBtYWluKHZvaWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXG4iCisiICAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgIE91
dFRleENvb3JkU291cmNlID0gdmVjMihJblNvdXJjZU1hdHJpeCAqIEluVmVydGV4KTsgICAgXG4i
CisiICAgICAgICAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gSW5NYXRyaXggKiBJblZlcnRleDsg
ICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOworCisgICAg
Y29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VUYXJnZXQgPQorICAgICAgICAgICAgT0VT
Ml9QRVJDSVNJT05fREVGSU5JVElPTlMKKyIgICAgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIy
RCBTb3VyY2VUZXh0dXJlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXG4iCisiICAgICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IE9wYWNpdHk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAg
ICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiBPdXRUZXhDb29yZFNvdXJjZTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB2b2lkIG1haW4o
dm9pZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAg
ICAgICAgICAgICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQoU291cmNlVGV4dHVy
ZSwgT3V0VGV4Q29vcmRTb3VyY2UpOyAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICAgICAg
Z2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5iZ3IgKiBPcGFjaXR5LCBjb2xvci5hICogT3BhY2l0
eSk7ICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxu
IjsKKworICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVRhcmdldCA9IHZlcnRleFNo
YWRlclNvdXJjZVNpbXBsZTsKKworICAgIFRFWE1BUF9CVUlMRF9TSEFERVIoU2ltcGxlKQorICAg
IFRFWE1BUF9CVUlMRF9TSEFERVIoT3BhY2l0eUFuZE1hc2spCisgICAgVEVYTUFQX0JVSUxEX1NI
QURFUihUYXJnZXQpCisKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oT3BhY2l0
eUFuZE1hc2ssIEluTWF0cml4KQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihP
cGFjaXR5QW5kTWFzaywgSW5Tb3VyY2VNYXRyaXgpCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFS
X0xPQ0FUSU9OKE9wYWNpdHlBbmRNYXNrLCBJbk1hc2tNYXRyaXgpCisgICAgVEVYTUFQX0dFVF9T
SEFERVJfVkFSX0xPQ0FUSU9OKE9wYWNpdHlBbmRNYXNrLCBTb3VyY2VUZXh0dXJlKQorICAgIFRF
WE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihPcGFjaXR5QW5kTWFzaywgTWFza1RleHR1cmUp
CisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKE9wYWNpdHlBbmRNYXNrLCBPcGFj
aXR5KQorCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKFNpbXBsZSwgSW5Tb3Vy
Y2VNYXRyaXgpCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKFNpbXBsZSwgSW5N
YXRyaXgpCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKFNpbXBsZSwgU291cmNl
VGV4dHVyZSkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oU2ltcGxlLCBPcGFj
aXR5KQorCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKFRhcmdldCwgSW5Tb3Vy
Y2VNYXRyaXgpCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKFRhcmdldCwgSW5N
YXRyaXgpCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKFRhcmdldCwgU291cmNl
VGV4dHVyZSkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oVGFyZ2V0LCBPcGFj
aXR5KQorfQorCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFw
VGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0
bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCit7CisgICAgY29uc3QgQml0bWFwVGV4dHVyZUdMJiB0
ZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPih0ZXh0dXJlKTsK
KyAgICBpZiAoIXRleHR1cmUuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBUZXht
YXBTaGFkZXJJbmZvOjpTaGFkZXJQcm9ncmFtSW5kZXggcHJvZ3JhbTsKKyAgICBpZiAobWFza1Rl
eHR1cmUpCisgICAgICAgIHByb2dyYW0gPSBUZXhtYXBTaGFkZXJJbmZvOjpPcGFjaXR5QW5kTWFz
a1Byb2dyYW07CisgICAgZWxzZQorICAgICAgICBwcm9ncmFtID0gVGV4bWFwU2hhZGVySW5mbzo6
U2ltcGxlUHJvZ3JhbTsKKworICAgIGNvbnN0IFRleG1hcFNoYWRlckluZm86OlByb2dyYW1JbmZv
JiBwcm9ncmFtSW5mbyA9IGdTaGFkZXJJbmZvLnByb2dyYW1zW3Byb2dyYW1dOworICAgIGlmICht
X2N1clByb2dyYW0gIT0gcHJvZ3JhbSkgeworICAgICAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHBy
b2dyYW1JbmZvLmlkKSkKKyAgICAgICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5
KGdTaGFkZXJJbmZvLnByb2dyYW1zW21fY3VyUHJvZ3JhbV0udmFyc1tUZXhtYXBTaGFkZXJJbmZv
OjpJblZlcnRleFZhcmlhYmxlXSkpCisgICAgICAgIG1fY3VyUHJvZ3JhbSA9IHByb2dyYW07Cisg
ICAgICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW1JbmZvLnZhcnNb
VGV4bWFwU2hhZGVySW5mbzo6SW5WZXJ0ZXhWYXJpYWJsZV0pKQorICAgIH0KKworICAgIEdMX0NN
RChnbERpc2FibGUoR0xfREVQVEhfVEVTVCkpCisgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9TVEVO
Q0lMX1RFU1QpKQorCisgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpCisg
ICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4dHVyZUdMLm1faWQpKQor
ICAgIEdMX0NNRChnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCAwKSkKKyAgICBjb25zdCBH
TGZsb2F0IHVuaXRSZWN0IFtdID0geyAwLCAwLCAxLCAwLCAxLCAxLCAwLCAxIH07CisgICAgR0xf
Q01EKGdsVmVydGV4QXR0cmliUG9pbnRlcigwLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHVu
aXRSZWN0KSkKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0
aW9uTWF0cml4KG1fcHJvamVjdGlvbk1hdHJpeCkubXVsdExlZnQobW9kZWxWaWV3TWF0cml4KS5t
dWx0TGVmdChUcmFuc2Zvcm1hdGlvbk1hdHJpeCgKKyAgICAgICAgICAgIHRhcmdldFJlY3Qud2lk
dGgoKSwgMCwgMCwgMCwKKyAgICAgICAgICAgIDAsIHRhcmdldFJlY3QuaGVpZ2h0KCksIDAsIDAs
CisgICAgICAgICAgICAwLCAwLCAxLCAwLAorICAgICAgICAgICAgdGFyZ2V0UmVjdC54KCksIHRh
cmdldFJlY3QueSgpLCAwLCAxKSk7CisKKyAgICBjb25zdCBHTGZsb2F0IG00W10gPSB7CisgICAg
ICAgIG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0xMigpLCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQo
KSwKKyAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRyaXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0
cml4Lm0yNCgpLAorICAgICAgICBtYXRyaXgubTMxKCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0z
MygpLCBtYXRyaXgubTM0KCksCisgICAgICAgIG1hdHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBt
YXRyaXgubTQzKCksIG1hdHJpeC5tNDQoKQorICAgIH07CisgICAgY29uc3QgR0xmbG9hdCBtNHNy
Y1tdID0ge3RleHR1cmVHTC5tX3JlbGF0aXZlU2l6ZS53aWR0aCgpLCAwLCAwLCAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHRleHR1cmVHTC5tX3JlbGF0aXZlU2l6
ZS5oZWlnaHQoKSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LCAwLCAxLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAs
IDF9OworICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXht
YXBTaGFkZXJJbmZvOjpJbk1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00KSkKKyAgICBH
TF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5m
bzo6SW5Tb3VyY2VNYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNHNyYykpCisgICAgR0xf
Q01EKGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6U291cmNl
VGV4dHVyZVZhcmlhYmxlXSwgMCkpCisgICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW1JbmZv
LnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6T3BhY2l0eVZhcmlhYmxlXSwgb3BhY2l0eSkpCisKKyAg
ICBpZiAobWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQoKSkgeworICAgICAgICBj
b25zdCBCaXRtYXBUZXh0dXJlR0wqIG1hc2tUZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxjb25zdCBC
aXRtYXBUZXh0dXJlR0wqPihtYXNrVGV4dHVyZSk7CisgICAgICAgIEdMX0NNRChnbEFjdGl2ZVRl
eHR1cmUoR0xfVEVYVFVSRTEpKQorICAgICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCBtYXNrVGV4dHVyZUdMLT5tX2lkKSkKKyAgICAgICAgY29uc3QgR0xmbG9hdCBtNG1h
c2tbXSA9IHttYXNrVGV4dHVyZUdMLT5tX3JlbGF0aXZlU2l6ZS53aWR0aCgpLCAwLCAwLCAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBtYXNrVGV4dHVyZUdM
LT5tX3JlbGF0aXZlU2l6ZS5oZWlnaHQoKSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgMCwgMCwgMX07CisgICAgICAgIGdsVW5pZm9ybU1hdHJpeDRmdihw
cm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OkluTWFza01hdHJpeFZhcmlhYmxlXSwg
MSwgR0xfRkFMU0UsIG00bWFzayk7CisgICAgICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFt
SW5mby52YXJzW1RleG1hcFNoYWRlckluZm86Ok1hc2tUZXh0dXJlVmFyaWFibGVdLCAxKSkKKyAg
ICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpCisgICAgfQorCisKKyAg
ICBpZiAodGV4dHVyZUdMLm1fb3BhcXVlICYmIG9wYWNpdHkgPiAwLjk5ICYmICFtYXNrVGV4dHVy
ZSkKKyAgICAgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9CTEVORCkpCisgICAgZWxzZSB7CisgICAg
ICAgIEdMX0NNRChnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpKQor
ICAgICAgICBHTF9DTUQoZ2xFbmFibGUoR0xfQkxFTkQpKQorICAgIH0KKworICAgIEdMX0NNRChn
bERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KSkKK30KKworCitjb25zdCBjaGFyKiBU
ZXh0dXJlTWFwcGVyR0w6OnR5cGUoKSBjb25zdAoreworICAgIHJldHVybiAiT3BlbkdMIjsKK30K
Kwordm9pZCBCaXRtYXBUZXh0dXJlR0w6OnJlc2V0KGNvbnN0IEludFNpemUmIG5ld1NpemUsIGJv
b2wgb3BhcXVlKQoreworICAgIEJpdG1hcFRleHR1cmU6OnJlc2V0KG5ld1NpemUsIG9wYXF1ZSk7
CisgICAgbV9pbWFnZSA9IDA7CisgICAgSW50U2l6ZSBuZXdUZXh0dXJlU2l6ZSA9IG5wb3QobmV3
U2l6ZSk7CisgICAgYm9vbCBqdXN0Q3JlYXRlZCA9IGZhbHNlOworICAgIGlmICghbV9pZCkgewor
ICAgICAgICBHTF9DTUQoZ2xHZW5UZXh0dXJlcygxLCAmbV9pZCkpCisgICAgICAgIGp1c3RDcmVh
dGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoanVzdENyZWF0ZWQgfHwgbmV3VGV4dHVyZVNp
emUud2lkdGgoKSA+IG1fdGV4dHVyZVNpemUud2lkdGgoKSB8fCBuZXdUZXh0dXJlU2l6ZS5oZWln
aHQoKSA+IG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpIHsKKyAgICAgICAgbV90ZXh0dXJlU2l6ZSA9
IG5ld1RleHR1cmVTaXplOworICAgICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCBtX2lkKSkKKyAgICAgICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUikpCisgICAgICAgIEdMX0NNRChnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5F
QVIpKQorICAgICAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKSkKKyAgICAgICAgR0xfQ01EKGdsVGV4UGFy
YW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURH
RSkpCisgICAgICAgIEdMX0NNRChnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdC
QSwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpLCAwLCBHTF9S
R0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKSkKKyAgICB9CisgICAgbV9hY3R1YWxTaXplID0gbmV3
U2l6ZTsKKyAgICBtX3JlbGF0aXZlU2l6ZSA9IEZsb2F0U2l6ZShmbG9hdChuZXdTaXplLndpZHRo
KCkpIC8gbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBmbG9hdChuZXdTaXplLmhlaWdodCgpKSAvIG1f
dGV4dHVyZVNpemUuaGVpZ2h0KCkpOworICAgIG1fb3BhcXVlID0gb3BhcXVlOworICAgIG1fc3Vy
ZmFjZU5lZWRzUmVzZXQgPSB0cnVlOworfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogQml0
bWFwVGV4dHVyZUdMOjpiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAg
ICBtX2J1ZmZlciA9IFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyOjpjcmVhdGUoKTsKKyAgICBt
X2RpcnR5UmVjdCA9IGRpcnR5UmVjdDsKKyAgICByZXR1cm4gbV9idWZmZXItPmJlZ2luUGFpbnQo
ZGlydHlSZWN0LCBtX29wYXF1ZSk7Cit9CisKK3ZvaWQgQml0bWFwVGV4dHVyZUdMOjplbmRQYWlu
dCgpCit7CisgICAgaWYgKCFtX2J1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fYnVmZmVy
LT5lbmRQYWludCgpOworICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1f
aWQpKQorICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9kaXJ0
eVJlY3QueCgpLCBtX2RpcnR5UmVjdC55KCksIG1fZGlydHlSZWN0LndpZHRoKCksIG1fZGlydHlS
ZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBtX2J1ZmZlci0+ZGF0YSgp
KSkKKyAgICBtX2J1ZmZlci5jbGVhcigpOworfQorCitzdHJ1Y3QgVGV4bWFwR0xTaGFkZXJUZXh0
dXJlcyB7CisgICAgc3RydWN0IEVudHJ5IHsKKyAgICAgICAgR0x1aW50IHRleHR1cmU7CisgICAg
ICAgIGludCByZWZDb3VudDsKKyAgICB9OworICAgIEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIsIEVu
dHJ5PiBpbWFnZVRvVGV4dHVyZTsKKyAgICBHTHVpbnQgZmluZE9yQ3JlYXRlKE5hdGl2ZUltYWdl
UHRyIGltYWdlLCBib29sJiBmb3VuZCkKKyAgICB7CisgICAgICAgIEhhc2hNYXA8TmF0aXZlSW1h
Z2VQdHIsIEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5maW5kKGltYWdlKTsK
KyAgICAgICAgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgaWYgKGl0ICE9IGltYWdlVG9UZXh0dXJl
LmVuZCgpKSB7CisgICAgICAgICAgICBpdC0+c2Vjb25kLnJlZkNvdW50Kys7CisgICAgICAgICAg
ICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZC50ZXh0dXJlOwor
ICAgICAgICB9CisgICAgICAgIEVudHJ5IGVudHJ5OworICAgICAgICBHTF9DTUQoZ2xHZW5UZXh0
dXJlcygxLCAmZW50cnkudGV4dHVyZSkpOworICAgICAgICBlbnRyeS5yZWZDb3VudCA9IDE7Cisg
ICAgICAgIGltYWdlVG9UZXh0dXJlLmFkZChpbWFnZSwgZW50cnkpOworICAgICAgICByZXR1cm4g
ZW50cnkudGV4dHVyZTsKKyAgICB9CisKKyAgICBib29sIGRlcmVmKE5hdGl2ZUltYWdlUHRyIGlt
YWdlKQorICAgIHsKKyAgICAgICAgSGFzaE1hcDxOYXRpdmVJbWFnZVB0ciwgRW50cnk+OjppdGVy
YXRvciBpdCA9IGltYWdlVG9UZXh0dXJlLmZpbmQoaW1hZ2UpOworICAgICAgICBpZiAoaXQgIT0g
aW1hZ2VUb1RleHR1cmUuZW5kKCkpIHsKKyAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLnJlZkNv
dW50IDwgMikgeworICAgICAgICAgICAgICAgIGltYWdlVG9UZXh0dXJlLnJlbW92ZShpdCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK3N0YXRpYyBUZXhtYXBHTFNoYWRlclRl
eHR1cmVzIGdUZXh0dXJlUmVwb3NpdG9yeTsKKwordm9pZCBCaXRtYXBUZXh0dXJlR0w6OnNldENv
bnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCit7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZl
SW1hZ2UgPSBpbWFnZSA/IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIDogMDsK
KyAgICBpZiAoIWltYWdlIHx8ICFuYXRpdmVJbWFnZSkgeworICAgICAgICBpZiAobV9pbWFnZSkK
KyAgICAgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChuYXRpdmVJbWFnZSA9PSBtX2ltYWdlKQorICAgICAgICByZXR1cm47CisgICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOworICAgIEdMdWludCBuZXdUZXh0dXJlSUQgPSBnVGV4dHVyZVJlcG9zaXRvcnku
ZmluZE9yQ3JlYXRlKG5hdGl2ZUltYWdlLCBmb3VuZCk7CisgICAgaWYgKG5ld1RleHR1cmVJRCAh
PSBtX2lkKSB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgbV9pZCA9IG5ld1RleHR1cmVJ
RDsKKyAgICAgICAgcmVzZXQoaW1hZ2UtPnNpemUoKSwgZmFsc2UpOworICAgICAgICBtX2ltYWdl
ID0gbmF0aXZlSW1hZ2U7CisgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dCBjb250ZXh0KGJlZ2luUGFpbnQoSW50UmVjdCgwLCAwLCBtX3RleHR1cmVTaXpl
LndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpKSk7CisgICAgICAgICAgICBjb250ZXh0
LmRyYXdJbWFnZShpbWFnZSwgRGV2aWNlQ29sb3JTcGFjZSwgSW50UG9pbnQoMCwgMCksIENvbXBv
c2l0ZUNvcHkpOworICAgICAgICAgICAgZW5kUGFpbnQoKTsKKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBCaXRtYXBUZXh0dXJlR0w6OmRlc3Ryb3koKQoreworICAgIGlmIChtX2lkICYmICgh
bV9pbWFnZSB8fCAhZ1RleHR1cmVSZXBvc2l0b3J5LmRlcmVmKG1faW1hZ2UpKSkKKyAgICAgICAg
R0xfQ01EKGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1faWQpKQorICAgIGlmIChtX2ZibykKKyAgICAg
ICAgR0xfQ01EKGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2ZibykpCisKKyAgICBtX2ZibyA9
IDA7CisgICAgbV9pZCA9IDA7CisgICAgbV90ZXh0dXJlU2l6ZSA9IEludFNpemUoKTsKKyAgICBt
X3JlbGF0aXZlU2l6ZSA9IEZsb2F0U2l6ZSgxLCAxKTsKK30KK2Jvb2wgQml0bWFwVGV4dHVyZUdM
Ojppc1ZhbGlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pZDsKK30KKworSW50U2l6ZSBCaXRt
YXBUZXh0dXJlR0w6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3RleHR1cmVTaXplOwor
fQorCitzdGF0aWMgaW5saW5lIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNyZWF0ZVByb2plY3Rpb25N
YXRyaXgoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBmbGlwKQoreworICAgIHJldHVybiBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgyLjAgLyBmbG9hdChzaXplLndpZHRoKCkpLCAwLCAwLCAwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAoZmxpcCA/IC0yLjAgOiAyLjApIC8gZmxv
YXQoc2l6ZS5oZWlnaHQoKSksIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsIDAsIC0wLjAwMDAwMSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEs
IGZsaXAgPyAxIDogLTEsIDAsIDEpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6Y2xlYW51
cCgpCit7Cit9CisKKwordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJpbmRTdXJmYWNlKEJpdG1hcFRl
eHR1cmUgKnN1cmZhY2VQb2ludGVyKQoreworICAgIEJpdG1hcFRleHR1cmVHTCogc3VyZmFjZSA9
IHN0YXRpY19jYXN0PEJpdG1hcFRleHR1cmVHTCo+KHN1cmZhY2VQb2ludGVyKTsKKworICAgIGlm
ICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1h
dHJpeCA9IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgoc3VyZmFjZS0+c2l6ZSgpLCBmYWxzZSk7Cisg
ICAgbWF0cml4LnRyYW5zbGF0ZSgtc3VyZmFjZS0+b2Zmc2V0KCkueCgpLCAtc3VyZmFjZS0+b2Zm
c2V0KCkueSgpKTsKKworICAgIGlmIChzdXJmYWNlLT5tX3N1cmZhY2VOZWVkc1Jlc2V0IHx8ICFz
dXJmYWNlLT5tX2ZibykgeworICAgICAgICBpZiAoIXN1cmZhY2UtPm1fZmJvKQorICAgICAgICAg
ICAgR0xfQ01EKGdsR2VuRnJhbWVidWZmZXJzKDEsICZzdXJmYWNlLT5tX2ZibykpCisgICAgICAg
IEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgc3VyZmFjZS0+bV9mYm8p
KQorICAgICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKSkKKyAgICAg
ICAgR0xfQ01EKGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9S
X0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBzdXJmYWNlLT5tX2lkLCAwKSkKKyAgICAgICAg
R0xfQ01EKGdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKSkKKyAgICAgICAgR0xfQ01EKGdsQ2xlYXIo
R0xfQ09MT1JfQlVGRkVSX0JJVCkpCisgICAgICAgIHN1cmZhY2UtPm1fc3VyZmFjZU5lZWRzUmVz
ZXQgPSBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIHN1cmZhY2UtPm1fZmJvKSkKKyAgICB9CisKKyAgICBHTF9DTUQo
Z2xWaWV3cG9ydCgwLCAwLCBzdXJmYWNlLT5zaXplKCkud2lkdGgoKSwgc3VyZmFjZS0+c2l6ZSgp
LmhlaWdodCgpKSkKKyAgICBtX3Byb2plY3Rpb25NYXRyaXggPSBtYXRyaXg7Cit9CisKK3ZvaWQg
VGV4dHVyZU1hcHBlckdMOjpzZXRDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgR0xf
Q01EKGdsU2Npc3NvcihyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSkpCisgICAgR0xfQ01EKGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCkpCit9CisKKwordm9p
ZCBUZXh0dXJlTWFwcGVyR0w6OnBhaW50VG9UYXJnZXQoY29uc3QgQml0bWFwVGV4dHVyZSYgYVN1
cmZhY2UsIGNvbnN0IEludFNpemUmIHN1cmZhY2VTaXplLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVj
dCkKK3sKKyAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wmIHN1cmZhY2UgPSBzdGF0aWNfY2FzdDxj
b25zdCBCaXRtYXBUZXh0dXJlR0wmPihhU3VyZmFjZSk7CisgICAgLy8gQ3JlYXRlIHRoZSBtb2Rl
bC12aWV3LXByb2plY3Rpb24gbWF0cml4IHRvIGRpc3BsYXkgb24gc2NyZWVuLgorICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgoc3VyZmFjZVNp
emUsIHRydWUpLm11bHRMZWZ0KHRyYW5zZm9ybSkubXVsdExlZnQoCisgICAgICAgICAgICAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXgoCisgICAgICAgICAgICAgICAgICAgICAgICBzdXJmYWNlLm1f
YWN0dWFsU2l6ZS53aWR0aCgpLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwg
c3VyZmFjZS5tX2FjdHVhbFNpemUuaGVpZ2h0KCksIDAsIDAsCisgICAgICAgICAgICAgICAgICAg
ICAgICAwLCAwLCAxLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgc3VyZmFjZS5vZmZzZXQo
KS54KCksIHN1cmZhY2Uub2Zmc2V0KCkueSgpLCAwLCAxCisgICAgICAgICAgICAgICAgKQorICAg
ICAgICAgICAgKTsKKworICAgIGNvbnN0IEdMZmxvYXQgbTRbXSA9IHsKKyAgICAgICAgbWF0cml4
Lm0xMSgpLCBtYXRyaXgubTEyKCksIG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAorICAgICAg
ICBtYXRyaXgubTIxKCksIG1hdHJpeC5tMjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCks
CisgICAgICAgIG1hdHJpeC5tMzEoKSwgbWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJp
eC5tMzQoKSwKKyAgICAgICAgbWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMo
KSwgbWF0cml4Lm00NCgpCisgICAgfTsKKworICAgIGNvbnN0IEdMZmxvYXQgbTRzcmNbXSA9IHtz
dXJmYWNlLm1fcmVsYXRpdmVTaXplLndpZHRoKCksIDAsIDAsIDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgc3VyZmFjZS5tX3JlbGF0aXZlU2l6ZS5oZWlnaHQoKSwg
MCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDF9OworCisgICAg
Ly8gV2UgYWxyZWFkeSBibGVuZGVkIHRoZSBhbHBoYSBpbjsgdGhlIHJlc3VsdCBpcyBwcmVtdWx0
aXBsaWVkLgorICAgIEdMX0NNRChnbFVzZVByb2dyYW0oZ1NoYWRlckluZm8ucHJvZ3JhbXNbVGV4
bWFwU2hhZGVySW5mbzo6VGFyZ2V0UHJvZ3JhbV0uaWQpKQorICAgIEdMX0NNRChnbEJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCkpCisgICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwg
c3VyZmFjZVNpemUud2lkdGgoKSwgc3VyZmFjZVNpemUuaGVpZ2h0KCkpKQorICAgIEdMX0NNRChn
bERpc2FibGUoR0xfU1RFTkNJTF9URVNUKSkKKyAgICBjb25zdCBUZXhtYXBTaGFkZXJJbmZvOjpQ
cm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8gPSBnU2hhZGVySW5mby5wcm9ncmFtc1tUZXhtYXBTaGFk
ZXJJbmZvOjpUYXJnZXRQcm9ncmFtXTsKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbUlu
Zm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpPcGFjaXR5VmFyaWFibGVdLCBvcGFjaXR5KSkKKyAg
ICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKSkKKyAgICBHTF9DTUQoZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBzdXJmYWNlLm1faWQpKQorICAgIEdMX0NNRChnbFVuaWZv
cm0xaShwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OlNvdXJjZVRleHR1cmVWYXJp
YWJsZV0sIDApKQorICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW1J
bmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5WZXJ0ZXhWYXJpYWJsZV0pKQorICAgIEdMX0NN
RChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJ
bk1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00KSkKKyAgICBHTF9DTUQoZ2xVbmlmb3Jt
TWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5Tb3VyY2VNYXRy
aXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNHNyYykpCisgICAgR0xfQ01EKGdsQmluZEJ1ZmZl
cihHTF9BUlJBWV9CVUZGRVIsIDApKQorICAgIEdMZmxvYXQgdW5pdFJlY3QgW10gPSB7IDAsIDAs
IDEsIDAsIDEsIDEsIDAsIDEgfTsKKyAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKDAs
IDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdW5pdFJlY3QpKQorICAgIEdMX0NNRChnbEJsZW5k
RnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpKQorICAgIEdMX0NNRChnbEVuYWJs
ZShHTF9CTEVORCkpCisgICAgc2V0Q2xpcCh2aXNpYmxlUmVjdCk7CisKKyAgICBHTF9DTUQoZ2xE
cmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpCisgICAgR0xfQ01EKGdsRGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5WZXJ0
ZXhWYXJpYWJsZV0pKQorICAgIEdMX0NNRChnbFVzZVByb2dyYW0oMCkpCisgICAgR0xfQ01EKGds
QmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDApKQorICAgIG1fY3VyUHJvZ3JhbSA9IFRleG1h
cFNoYWRlckluZm86OlRhcmdldFByb2dyYW07Cit9CisKK1Bhc3NSZWZQdHI8Qml0bWFwVGV4dHVy
ZT4gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEJpdG1hcFRleHR1cmVHTCgpKTsKK30KKworfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uY2M0MjRjNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCkBAIC0wLDAgKzEsODQgQEAK
Ky8qCisgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFRleHR1cmVN
YXBwZXJHTF9oCisjZGVmaW5lIFRleHR1cmVNYXBwZXJHTF9oCisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJJbnRT
aXplLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJ0ZXht
YXAvVGV4dHVyZU1hcHBlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEFuIE9wZW5H
TC1FUzIgaW1wbGVtZW50YXRpb24gb2YgVGV4dHVyZU1hcHBlci4KK2NsYXNzIFRleHR1cmVNYXBw
ZXJHTCA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyIHsKK3B1YmxpYzoKKyAgICBUZXh0dXJlTWFwcGVy
R0woR3JhcGhpY3NDb250ZXh0KiBnYyk7CisgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlckdMKCkg
e30KKworICAgIC8vIHJlaW1wcyBmcm9tIFRleHR1cmVNYXBwZXIKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIGNv
bnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZFN1
cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSk7CisgICAgdmlydHVhbCB2b2lkIHNldENsaXAo
Y29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGFyZ2V0KGNvbnN0IEJp
dG1hcFRleHR1cmUmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCk7CisgICAgdmlydHVh
bCBib29sIGFsbG93U3VyZmFjZUZvclJvb3QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKKyAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIHR5cGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYW51
cCgpOworCitwcml2YXRlOgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcHJvamVjdGlvbk1h
dHJpeDsKKyAgICBpbnQgbV9jdXJQcm9ncmFtOworfTsKKworLy8gQW4gb2Zmc2NyZWVuIGJ1ZmZl
ciB0byBiZSByZW5kZXJlZCBieSBzb2Z0d2FyZS4KK2NsYXNzIFJHQkEzMlByZW11bHRpbXBsaWVk
QnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8UkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI+IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5SR0JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcigpIHt9Cisg
ICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludChjb25zdCBJbnRS
ZWN0JiBkaXJ0eVJlY3QsIGJvb2wgb3BhcXVlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVuZFBh
aW50KCkgPSAwOworICAgIHZpcnR1YWwgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0ID0gMDsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxSR0JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcj4gY3JlYXRlKCk7
Cit9OworCisvLyBOZXh0IHBvd2VyIG9mIHR3by4KK3N0YXRpYyBpbmxpbmUgaW50IG5wb3QoaW50
IG51bSkKK3sKKyAgICBmb3IgKGludCBpID0gMHgxMDAwMDAwMDsgaSA+IDA7IGkgPj49IDEpIHsK
KyAgICAgICAgaWYgKG51bSA9PSBpKQorICAgICAgICAgICAgcmV0dXJuIG51bTsKKyAgICAgICAg
aWYgKG51bSAmIGkpCisgICAgICAgICAgICByZXR1cm4gKGkgPDwgMSk7CisgICAgfQorICAgIHJl
dHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIEludFNpemUgbnBvdChjb25zdCBJbnRTaXplJiBz
KQoreworICAgIHJldHVybiBJbnRTaXplKG5wb3Qocy53aWR0aCgpKSwgbnBvdChzLmhlaWdodCgp
KSk7Cit9CisKK307CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcAppbmRleCAwNzlkOGJhLi4xY2YxMmM0IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5j
cHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuY3Bw
CkBAIC00MSwxMyArNDEsMTUgQEAKICNpbmNsdWRlIDxRdEd1aS9xcGl4bWFwLmg+CiAjaW5jbHVk
ZSA8UXRHdWkvcXBpeG1hcGNhY2hlLmg+CiAjaW5jbHVkZSA8UXRHdWkvcXN0eWxlb3B0aW9uLmg+
CisjaW5jbHVkZSA8UUdMRnJhbWVidWZmZXJPYmplY3Q+CiAKLQotI2RlZmluZSBRVF9ERUJVR19S
RUNBQ0hFIDAKLSNkZWZpbmUgUVRfREVCVUdfQ0FDSEVEVU1QIDAKKyNkZWZpbmUgUVRfREVCVUdf
UkVDQUNIRSAxCisjZGVmaW5lIFFUX0RFQlVHX0NBQ0hFRFVNUCAxCiAKICNkZWZpbmUgUVRfREVC
VUdfRlBTIDAKIAorYm9vbCBRX09QRU5HTF9FWFBPUlQgcXRfb3BlbmdsX2RyYXdUZXh0dXJlKFFQ
YWludEVuZ2luZSogZW5naW5lLCBjb25zdCBRUmVjdEYgJmRlc3QsIEdMdWludCB0ZXh0dXJlSWQs
IGNvbnN0IFFTaXplICZzaXplLCBjb25zdCBRUmVjdEYgJnNyYyk7CisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogI2lmbmRlZiBRVF9OT19HUkFQSElDU0VGRkVDVApAQCAtMTczLDcgKzE3NSw3IEBA
IHB1YmxpYzoKICAgICAvLyBRR3JhcGhpY3NJdGVtIGNhY2hlIG1vZGVzIC0gU29tZXRpbWVzIHdl
IG5lZWQgdG8gY2FjaGUgdGhlIGNvbnRlbnRzIGV2ZW4gdGhvdWdoIHRoZSBpdGVtCiAgICAgLy8g
bmVlZHMgdG8gYmUgdXBkYXRlZCwgZS5nLiB3aGVuIHRoZSBiYWNrZ3JvdW5kLWNvbG9yIGlzIGNo
YW5nZWQuCiAgICAgLy8gVE9ETzogaW52ZXN0aWdhdGUgaWYgUUdyYXBoaWNzSXRlbSBjYWNoaW5n
IGNhbiBiZSBpbXByb3ZlZCB0byBzdXBwb3J0IHRoYXQgb3V0IG9mIHRoZSBib3guCi0gICAgUVBp
eG1hcCByZWNhY2hlKGNvbnN0IFFSZWdpb24mKTsKKyAgICB2b2lkIHJlY2FjaGUoY29uc3QgUVJl
Z2lvbiYpOwogCiAgICAgLy8gQ2FsbGVkIHdoZW4gdGhlIGNvbXBvc2l0b3IgaXMgcmVhZHkgZm9y
IHVzIHRvIHNob3cgdGhlIGNoYW5nZXMgb24gc2NyZWVuLgogICAgIC8vIFRoaXMgaXMgY2FsbGVk
IGluZGlyZWN0bHkgZnJvbSBDaHJvbWVDbGllbnRRdDo6c2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5
bmNocm9uaXphdGlvbgpAQCAtMjM1LDYgKzIzNyw3IEBAIHB1YmxpYzoKICAgICAgICAgUVBpeG1h
cENhY2hlOjpLZXkga2V5OwogICAgICAgICBRU2l6ZUYgc2l6ZTsKICAgICB9IG1fYmFja2luZ1N0
b3JlOworICAgIFFHTEZyYW1lYnVmZmVyT2JqZWN0KiBmYm87CiAjaWZuZGVmIFFUX05PX0FOSU1B
VElPTgogICAgIFFMaXN0PFFXZWFrUG9pbnRlcjxRQWJzdHJhY3RBbmltYXRpb24+ID4gbV9hbmlt
YXRpb25zOwogI2VuZGlmCkBAIC0zMDAsNiArMzAzLDcgQEAgR3JhcGhpY3NMYXllclF0SW1wbDo6
R3JhcGhpY3NMYXllclF0SW1wbChHcmFwaGljc0xheWVyUXQqIG5ld0xheWVyKQogICAgICwgbV90
cmFuc2Zvcm1BbmltYXRpb25SdW5uaW5nKGZhbHNlKQogICAgICwgbV9vcGFjaXR5QW5pbWF0aW9u
UnVubmluZyhmYWxzZSkKICAgICAsIG1fY2hhbmdlTWFzayhOb0NoYW5nZXMpCisgICAgLCBmYm8o
MCkKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQogICAgICwgbV9nYzNEKDApCiAjZW5kaWYKQEAgLTM0
NCwxMTIgKzM0OCw0NyBAQCBjb25zdCBHcmFwaGljc0xheWVyUXRJbXBsKiBHcmFwaGljc0xheWVy
UXRJbXBsOjpyb290TGF5ZXIoKSBjb25zdAogICAgIHJldHVybiB0aGlzOwogfQogCi1RUGl4bWFw
IEdyYXBoaWNzTGF5ZXJRdEltcGw6OnJlY2FjaGUoY29uc3QgUVJlZ2lvbiYgcmVnaW9uVG9VcGRh
dGUpCit2b2lkIEdyYXBoaWNzTGF5ZXJRdEltcGw6OnJlY2FjaGUoY29uc3QgUVJlZ2lvbiYgcmVn
aW9uVG9VcGRhdGUpCiB7Ci0gICAgaWYgKCFtX2xheWVyLT5kcmF3c0NvbnRlbnQoKSB8fCBtX3Np
emUuaXNFbXB0eSgpIHx8ICFtX3NpemUuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gUVBpeG1h
cCgpOwotCi0gICAgUVBpeG1hcCBwaXhtYXA7CiAgICAgUVJlZ2lvbiByZWdpb24gPSByZWdpb25U
b1VwZGF0ZTsKLSAgICBpZiAoUVBpeG1hcENhY2hlOjpmaW5kKG1fYmFja2luZ1N0b3JlLmtleSwg
JnBpeG1hcCkpIHsKLSAgICAgICAgaWYgKHJlZ2lvbi5pc0VtcHR5KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gcGl4bWFwOwotICAgICAgICBRUGl4bWFwQ2FjaGU6OnJlbW92ZShtX2JhY2tpbmdTdG9y
ZS5rZXkpOyAvLyBSZW1vdmUgdGhlIHJlZmVyZW5jZSB0byB0aGUgcGl4bWFwIGluIHRoZSBjYWNo
ZSB0byBhdm9pZCBhIGRldGFjaC4KKyAgICBpZiAoIWZibyB8fCBmYm8tPnNpemUoKSAhPSBtX3Np
emUpIHsKKyAgICAgICAgaWYgKGZibykKKyAgICAgICAgICAgIGRlbGV0ZSBmYm87CisgICAgICAg
IFFHTEZyYW1lYnVmZmVyT2JqZWN0Rm9ybWF0IGZvcm1hdDsKKyAgICAgICAgZm9ybWF0LnNldFNh
bXBsZXMoMCk7CisgICAgICAgIGZibyA9IG5ldyBRR0xGcmFtZWJ1ZmZlck9iamVjdChtX3NpemUu
dG9TaXplKCksIGZvcm1hdCk7CisgICAgICAgIHJlZ2lvbiA9IFFSZWdpb24oMCwgMCwgbV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisKICAgICB9CisgICAgaWYgKCFtX2xheWVyLT5k
cmF3c0NvbnRlbnQoKSB8fCBtX3NpemUuaXNFbXB0eSgpIHx8ICFtX3NpemUuaXNWYWxpZCgpIHx8
IHJlZ2lvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAogICAgIHsKICAgICAgICAgYm9v
bCBlcmFzZWQgPSBmYWxzZTsKIAotICAgICAgICAvLyBJZiB0aGUgcGl4bWFwIGlzIG5vdCBpbiB0
aGUgY2FjaGUgb3IgdGhlIHZpZXcgaGFzIGdyb3duIHNpbmNlIGxhc3QgY2FjaGVkLgotICAgICAg
ICBpZiAocGl4bWFwLmlzTnVsbCgpIHx8IG1fc2l6ZSAhPSBtX2JhY2tpbmdTdG9yZS5zaXplKSB7
Ci0jaWYgUVRfREVCVUdfUkVDQUNIRQotICAgICAgICAgICAgaWYgKHBpeG1hcC5pc051bGwoKSkK
LSAgICAgICAgICAgICAgICBxRGVidWcoKSA8PCAiQ2FjaGVNaXNzIiA8PCB0aGlzIDw8IG1fc2l6
ZTsKLSNlbmRpZgotICAgICAgICAgICAgYm9vbCBmaWxsID0gdHJ1ZTsKLSAgICAgICAgICAgIFFS
ZWdpb24gbmV3UmVnaW9uOwotICAgICAgICAgICAgUVBpeG1hcCBvbGRQaXhtYXAgPSBwaXhtYXA7
Ci0KLSAgICAgICAgICAgIC8vIElmIHRoZSBwaXhtYXAgaXMgdHdvIHNtYWxsIHRvIGhvbGQgdGhl
IHZpZXcgY29udGVudHMgd2UgZW5sYXJnZSwgb3RoZXJ3aXNlIGp1c3QgdXNlIHRoZSBvbGQgKGxh
cmdlKSBwaXhtYXAuCi0gICAgICAgICAgICBpZiAocGl4bWFwLndpZHRoKCkgPCBtX3NpemUud2lk
dGgoKSB8fCBwaXhtYXAuaGVpZ2h0KCkgPCBtX3NpemUuaGVpZ2h0KCkpIHsKLSNpZiBRVF9ERUJV
R19SRUNBQ0hFCi0gICAgICAgICAgICAgICAgcURlYnVnKCkgPDwgIkNhY2hlR3JvdyIgPDwgdGhp
cyA8PCBtX3NpemU7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBwaXhtYXAgPSBRUGl4bWFwKG1f
c2l6ZS50b1NpemUoKSk7Ci0gICAgICAgICAgICAgICAgcGl4bWFwLmZpbGwoUXQ6OnRyYW5zcGFy
ZW50KTsKLSAgICAgICAgICAgICAgICBuZXdSZWdpb24gPSBRUmVnaW9uKDAsIDAsIG1fc2l6ZS53
aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotICAgICAgICAgICAgfQotCi0jaWYgMQotICAgICAg
ICAgICAgLy8gQmxpdCB0aGUgY29udGVudHMgb2Ygb2xkUGl4bWFwIGJhY2sgaW50byB0aGUgY2Fj
aGVkIHBpeG1hcCBhcyB3ZSBhcmUganVzdCBhZGRpbmcgbmV3IHBpeGVscy4KLSAgICAgICAgICAg
IGlmICghb2xkUGl4bWFwLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgUVJlZ2lv
biBjbGVhblJlZ2lvbiA9IChRUmVnaW9uKDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVp
Z2h0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFFS
ZWdpb24oMCwgMCwgbV9iYWNraW5nU3RvcmUuc2l6ZS53aWR0aCgpLCBtX2JhY2tpbmdTdG9yZS5z
aXplLmhlaWdodCgpKSkgLSByZWdpb25Ub1VwZGF0ZTsKLSAgICAgICAgICAgICAgICBpZiAoIWNs
ZWFuUmVnaW9uLmlzRW1wdHkoKSkgewotI2lmIFFUX0RFQlVHX1JFQ0FDSEUKLSAgICAgICAgICAg
ICAgICAgICAgcURlYnVnKCkgPDwgIkNhY2hlQmxpdCIgPDwgdGhpcyA8PCBjbGVhblJlZ2lvbjsK
LSNlbmRpZgotICAgICAgICAgICAgICAgICAgICBjb25zdCBRUmVjdCBjbGVhbkJvdW5kcyhjbGVh
blJlZ2lvbi5ib3VuZGluZ1JlY3QoKSk7Ci0gICAgICAgICAgICAgICAgICAgIFFQYWludGVyIHBh
aW50ZXIoJnBpeG1hcCk7Ci0gICAgICAgICAgICAgICAgICAgIHBhaW50ZXIuc2V0Q29tcG9zaXRp
b25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKLSAgICAgICAgICAgICAg
ICAgICAgcGFpbnRlci5kcmF3UGl4bWFwKGNsZWFuQm91bmRzLnRvcExlZnQoKSwgb2xkUGl4bWFw
LCBjbGVhbkJvdW5kcyk7Ci0gICAgICAgICAgICAgICAgICAgIG5ld1JlZ2lvbiAtPSBjbGVhblJl
Z2lvbjsKLSAgICAgICAgICAgICAgICAgICAgZmlsbCA9IGZhbHNlOyAvLyBXZSBjYW5ub3QganVz
dCBmaWxsIHRoZSBwaXhtYXAuCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9s
ZFBpeG1hcCA9IFFQaXhtYXAoKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAg
cmVnaW9uICs9IG5ld1JlZ2lvbjsKLSAgICAgICAgICAgIGlmIChmaWxsICYmICFyZWdpb24uaXNF
bXB0eSgpKSB7IC8vIENsZWFyIHRoZSBlbnRpcmUgcGl4bWFwIHdpdGggdGhlIGJhY2tncm91bmQu
Ci0jaWYgUVRfREVCVUdfUkVDQUNIRQotICAgICAgICAgICAgICAgIHFEZWJ1ZygpIDw8ICJDYWNo
ZUVyYXNlIiA8PCB0aGlzIDw8IG1fc2l6ZSA8PCBiYWNrZ3JvdW5kOwotI2VuZGlmCi0gICAgICAg
ICAgICAgICAgZXJhc2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBwaXhtYXAuZmlsbChRdDo6
dHJhbnNwYXJlbnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9CiAgICAgICAgIHJlZ2lvbiAm
PSBRUmVnaW9uKDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwogCiAgICAg
ICAgIC8vIElmIHdlIGhhdmUgc29tZXRoaW5nIHRvIGRyYXcgaXRzIHRpbWUgdG8gZXJhc2UgaXQg
YW5kIHJlbmRlciB0aGUgY29udGVudHMuCiAgICAgICAgIGlmICghcmVnaW9uLmlzRW1wdHkoKSkg
ewotI2lmIFFUX0RFQlVHX0NBQ0hFRFVNUAotICAgICAgICAgICAgc3RhdGljIGludCByZWNhY2hl
Q291bnQgPSAwOwotICAgICAgICAgICAgKytyZWNhY2hlQ291bnQ7Ci0gICAgICAgICAgICBxRGVi
dWcoKSA8PCAiKioqKiBDQUNIRURVTVAiIDw8IHJlY2FjaGVDb3VudCA8PCB0aGlzIDw8IG1fbGF5
ZXIgPDwgcmVnaW9uIDw8IG1fc2l6ZTsKLSAgICAgICAgICAgIHBpeG1hcC5zYXZlKFFTdHJpbmco
KS5zcHJpbnRmKCIvdG1wLyUwNWRfQS5wbmciLCByZWNhY2hlQ291bnQpLCAiUE5HIik7Ci0jZW5k
aWYKKyAgICAgICAgICAgIFFQYWludGVyIHBhaW50ZXIoZmJvKTsKKyAgICAgICAgICAgIHBhaW50
ZXIuc2V0Q2xpcFJlZ2lvbihyZWdpb24pOworICAgICAgICAgICAgcGFpbnRlci5zZXRSZW5kZXJI
aW50KFFQYWludGVyOjpUZXh0QW50aWFsaWFzaW5nLCB0cnVlKTsKKyAgICAgICAgICAgIHBhaW50
ZXIuc2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKyAgICAgICAg
ICAgIHBhaW50ZXIuc2V0UmVuZGVySGludChRUGFpbnRlcjo6U21vb3RoUGl4bWFwVHJhbnNmb3Jt
LCB0cnVlKTsKIAotICAgICAgICAgICAgUVBhaW50ZXIgcGFpbnRlcigmcGl4bWFwKTsKICAgICAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYygmcGFpbnRlcik7CiAKLSAgICAgICAgICAgIHBhaW50
ZXIuc2V0Q2xpcFJlZ2lvbihyZWdpb24pOwotCiAgICAgICAgICAgICBpZiAoIWVyYXNlZCkgeyAv
LyBFcmFzZSB0aGUgYXJlYSBpbiBjYWNoZSB0aGF0IHdlJ3JlIGRyYXdpbmcgaW50by4KICAgICAg
ICAgICAgICAgICBwYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRp
b25Nb2RlX0NsZWFyKTsKICAgICAgICAgICAgICAgICBwYWludGVyLmZpbGxSZWN0KHJlZ2lvbi5i
b3VuZGluZ1JlY3QoKSwgUXQ6OnRyYW5zcGFyZW50KTsKLQotI2lmIFFUX0RFQlVHX0NBQ0hFRFVN
UAotICAgICAgICAgICAgICAgIHFEZWJ1ZygpIDw8ICIqKioqIENBQ0hFRFVNUCIgPDwgcmVjYWNo
ZUNvdW50IDw8IHRoaXMgPDwgbV9sYXllciA8PCByZWdpb24gPDwgbV9zaXplOwotICAgICAgICAg
ICAgICAgIHBpeG1hcC5zYXZlKFFTdHJpbmcoKS5zcHJpbnRmKCIvdG1wLyUwNWRfQi5wbmciLCBy
ZWNhY2hlQ291bnQpLCAiUE5HIik7Ci0jZW5kaWYKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgLy8gUmVuZGVyIHRoZSBhY3R1YWwgY29udGVudHMgaW50byB0aGUgY2FjaGUuCiAgICAgICAg
ICAgICBwYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2Rl
X1NvdXJjZU92ZXIpOwogICAgICAgICAgICAgbV9sYXllci0+cGFpbnRHcmFwaGljc0xheWVyQ29u
dGVudHMoZ2MsIHJlZ2lvbi5ib3VuZGluZ1JlY3QoKSk7CiAgICAgICAgICAgICBwYWludGVyLmVu
ZCgpOwotCi0jaWYgUVRfREVCVUdfQ0FDSEVEVU1QCi0gICAgICAgICAgICBxRGVidWcoKSA8PCAi
KioqKiBDQUNIRURVTVAiIDw8IHJlY2FjaGVDb3VudCA8PCB0aGlzIDw8IG1fbGF5ZXIgPDwgcmVn
aW9uIDw8IG1fc2l6ZTsKLSAgICAgICAgICAgIHBpeG1hcC5zYXZlKFFTdHJpbmcoKS5zcHJpbnRm
KCIvdG1wLyUwNWRfQy5wbmciLCByZWNhY2hlQ291bnQpLCAiUE5HIik7Ci0jZW5kaWYKICAgICAg
ICAgfQotICAgICAgICBtX2JhY2tpbmdTdG9yZS5zaXplID0gbV9zaXplOyAvLyBTdG9yZSB0aGUg
dXNlZCBzaXplIG9mIHRoZSBwaXhtYXAuCiAgICAgfQotCi0gICAgLy8gRmluYWxseSBpbnNlcnQg
aW50byB0aGUgY2FjaGUgYW5kIGFsbG93IGEgcmVmZXJlbmNlIHRoZXJlLgotICAgIG1fYmFja2lu
Z1N0b3JlLmtleSA9IFFQaXhtYXBDYWNoZTo6aW5zZXJ0KHBpeG1hcCk7Ci0gICAgcmV0dXJuIHBp
eG1hcDsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyUXRJbXBsOjp1cGRhdGVUcmFuc2Zvcm0oKQpA
QCAtNTY1LDEyICs1MDQsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJRdEltcGw6OnBhaW50KFFQYWlu
dGVyKiBwYWludGVyLCBjb25zdCBRU3R5bGVPcHRpb25HcmFwaGljc0l0ZQogICAgIHN3aXRjaCAo
bV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSkgewogICAgIGNhc2UgSFRNTENvbnRlbnRUeXBl
OgogICAgICAgICBpZiAobV9zdGF0ZS5kcmF3c0NvbnRlbnQpIHsKLSAgICAgICAgICAgIFFQaXht
YXAgYmFja2luZ1N0b3JlOwotICAgICAgICAgICAgLy8gV2UgbWlnaHQgbmVlZCB0byByZWNhY2hl
LCBpbiBjYXNlIHdlIHRyeSB0byBwYWludCBhbmQgdGhlIGNhY2hlIHdhcyBwdXJnZWQgKGUuZy4g
aWYgaXQgd2FzIGZ1bGwpLgotICAgICAgICAgICAgaWYgKCFRUGl4bWFwQ2FjaGU6OmZpbmQobV9i
YWNraW5nU3RvcmUua2V5LCAmYmFja2luZ1N0b3JlKSB8fCBiYWNraW5nU3RvcmUuc2l6ZSgpICE9
IG1fc2l6ZS50b1NpemUoKSkKLSAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmUgPSByZWNhY2hl
KFFSZWdpb24obV9zdGF0ZS5jb250ZW50c1JlY3QpKTsKLSAgICAgICAgICAgIGNvbnN0IFFSZWN0
RiBib3VuZHMoMCwgMCwgbV9iYWNraW5nU3RvcmUuc2l6ZS53aWR0aCgpLCBtX2JhY2tpbmdTdG9y
ZS5zaXplLmhlaWdodCgpKTsKLSAgICAgICAgICAgIHBhaW50ZXItPmRyYXdQaXhtYXAoMCwgMCwg
YmFja2luZ1N0b3JlKTsKKyAgICAgICAgICAgIHJlY2FjaGUoUVJlZ2lvbihtX3N0YXRlLmNvbnRl
bnRzUmVjdCkpOworICAgICAgICAgICAgcXRfb3BlbmdsX2RyYXdUZXh0dXJlKHBhaW50ZXItPnBh
aW50RW5naW5lKCksIFFSZWN0RigwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgp
KSwgZmJvLT50ZXh0dXJlKCksIG1fc2l6ZS50b1NpemUoKSwgUVJlY3RGKDAsIDAsIG1fc2l6ZS53
aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAg
ICBjYXNlIFBpeG1hcENvbnRlbnRUeXBlOgpAQCAtNzU5LDggKzY5NCw4IEBAIHZvaWQgR3JhcGhp
Y3NMYXllclF0SW1wbDo6Zmx1c2hDaGFuZ2VzKGJvb2wgcmVjdXJzaXZlLCBib29sIGZvcmNlVXBk
YXRlVHJhbnNmb3JtCiAgICAgICAgIC8vIFJlY2FjaGUgbm93OiBhbGwgdGhlIGNvbnRlbnQgaXMg
cmVhZHkgYW5kIHdlIGRvbid0IHdhbnQgdG8gd2FpdCB1bnRpbCB0aGUgcGFpbnQgZXZlbnQuCiAg
ICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBkbyB0aGlzIGZvciBIVE1MIGNvbnRlbnQsIHRoZXJl
J3Mgbm8gcG9pbnQgaW4gY2FjaGluZyBkaXJlY3RseSBjb21wb3NpdGVkCiAgICAgICAgIC8vIGNv
bnRlbnQgbGlrZSBpbWFnZXMgb3Igc29saWQgcmVjdGFuZ2xlcy4KLSAgICAgICAgaWYgKG1fcGVu
ZGluZ0NvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlKQotICAgICAgICAgICAg
cmVjYWNoZShtX3BlbmRpbmdDb250ZW50LnJlZ2lvblRvVXBkYXRlKTsKKy8vICAgICAgICBpZiAo
bV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUpCisvLyAgICAg
ICAgICAgIHJlY2FjaGUobV9wZW5kaW5nQ29udGVudC5yZWdpb25Ub1VwZGF0ZSk7CiAjZW5kaWYK
ICAgICAgICAgdXBkYXRlKG1fcGVuZGluZ0NvbnRlbnQucmVnaW9uVG9VcGRhdGUuYm91bmRpbmdS
ZWN0KCkpOwogICAgICAgICBtX3BlbmRpbmdDb250ZW50LnJlZ2lvblRvVXBkYXRlID0gUVJlZ2lv
bigpOwpAQCAtODM4LDYgKzc3Myw3IEBAIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gR3JhcGhp
Y3NMYXllcjo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKICovCiB2b2lkIEdy
YXBoaWNzTGF5ZXJRdDo6c2V0TmVlZHNEaXNwbGF5KCkKIHsKKyAgICBxRGVidWcoKSA8PCBfX2Z1
bmNfXyA8PCB0aGlzOwogICAgIG1faW1wbC0+bV9wZW5kaW5nQ29udGVudC5yZWdpb25Ub1VwZGF0
ZSA9IFFSZWdpb24oUVJlY3QoUVBvaW50KDAsIDApLCBRU2l6ZShzaXplKCkud2lkdGgoKSwgc2l6
ZSgpLmhlaWdodCgpKSkpOwogICAgIG1faW1wbC0+bm90aWZ5Q2hhbmdlKEdyYXBoaWNzTGF5ZXJR
dEltcGw6OkRpc3BsYXlDaGFuZ2UpOwogfQpAQCAtODQ2LDYgKzc4Miw3IEBAIHZvaWQgR3JhcGhp
Y3NMYXllclF0OjpzZXROZWVkc0Rpc3BsYXkoKQogKi8KIHZvaWQgR3JhcGhpY3NMYXllclF0Ojpz
ZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogeworICAgIHFEZWJ1
ZygpIDw8IF9fZnVuY19fOwogICAgIG1faW1wbC0+bV9wZW5kaW5nQ29udGVudC5yZWdpb25Ub1Vw
ZGF0ZSB8PSBRUmVjdEYocmVjdCkudG9BbGlnbmVkUmVjdCgpOwogICAgIG1faW1wbC0+bm90aWZ5
Q2hhbmdlKEdyYXBoaWNzTGF5ZXJRdEltcGw6OkRpc3BsYXlDaGFuZ2UpOwogfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MWM4ODUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAKQEAgLTAsMCArMSwy
MjQgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXIuaCIKKworI2luY2x1ZGUg
IlF0Q29yZS9xZGVidWcuaCIKKyNpbmNsdWRlICJRdEd1aS9xcGFpbnRlbmdpbmUuaCIKKyNpbmNs
dWRlICJRdEd1aS9xcGl4bWFwLmgiCisKKyNpZmRlZiBRVF9PUEVOR0xfTElCCisjIGluY2x1ZGUg
Im9wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEJpdG1hcFRleHR1cmVRdCA6IHB1YmxpYyBCaXRtYXBUZXh0dXJlIHsKKyAgICBm
cmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlclF0OworcHVibGljOgorICAgIEJpdG1hcFRleHR1cmVR
dCgpIHt9CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKKyAgICB2aXJ0dWFsIEludFNpemUg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUobV9waXhtYXAud2lkdGgoKSwgbV9waXhtYXAu
aGVpZ2h0KCkpOyB9CisgICAgdmlydHVhbCB2b2lkIHJlc2V0KGNvbnN0IEludFNpemUmLCBib29s
IG9wYXF1ZSk7CisgICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWlu
dChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludCgp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKTsKKyAgICB2aXJ0
dWFsIGJvb2wgc2F2ZShjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIHZpcnR1YWwgYm9vbCBpc1Zh
bGlkKCkgY29uc3QgeyByZXR1cm4gIW1fcGl4bWFwLmlzTnVsbCgpOyB9CisgICAgdmlydHVhbCBi
b29sIGFsbG93T2ZmbGluZVRleHR1cmVVcGxvYWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Cisg
ICAgSW50UmVjdCBzb3VyY2VSZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVjdCgwLCAwLCBjb250
ZW50U2l6ZSgpLndpZHRoKCksIGNvbnRlbnRTaXplKCkuaGVpZ2h0KCkpOyB9Citwcml2YXRlOgor
ICAgIFFQYWludGVyIG1fcGFpbnRlcjsKKyAgICBRUGl4bWFwIG1fcGl4bWFwOworfTsKKworY2xh
c3MgVGV4dHVyZU1hcHBlclF0IDogcHVibGljIFRleHR1cmVNYXBwZXIgeworcHVibGljOgorICAg
IHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBj
b25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0
cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7Cisg
ICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpOworICAg
IHZpcnR1YWwgdm9pZCBzZXRDbGlwKGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wg
YWxsb3dTdXJmYWNlRm9yUm9vdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgVGV4dHVy
ZU1hcHBlclF0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCk7CisgICAgdmlydHVhbCBjb25zdCBj
aGFyKiB0eXBlKCkgY29uc3QgeyByZXR1cm4gIlF0IjsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CisKKyAgICBzdGF0aWMgdm9pZCBpbml0
aWFsaXplKFFQYWludGVyICpwYWludGVyKQorICAgIHsKKyAgICAgICAgcGFpbnRlci0+c2V0UmVu
ZGVySGludHMoUVBhaW50ZXI6OkFudGlhbGlhc2luZyB8IFFQYWludGVyOjpTbW9vdGhQaXhtYXBU
cmFuc2Zvcm0sIGZhbHNlKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUVBhaW50ZXIqIG1fcGFp
bnRlcjsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZVF0PiBtX2N1cnJlbnRTdXJmYWNlOworfTsK
Kwordm9pZCBCaXRtYXBUZXh0dXJlUXQ6OmRlc3Ryb3koKQoreworICAgIGlmIChtX3BpeG1hcC5w
YWludGluZ0FjdGl2ZSgpKQorICAgICAgICBxRmF0YWwoIkRlc3Ryb3lpbmcgYW4gYWN0aXZlIHBp
eG1hcCIpOworICAgIG1fcGl4bWFwID0gUVBpeG1hcCgpOworfQorCit2b2lkIEJpdG1hcFRleHR1
cmVRdDo6cmVzZXQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBpc09wYXF1ZSkKK3sKKyAgICBC
aXRtYXBUZXh0dXJlOjpyZXNldChzaXplLCBpc09wYXF1ZSk7CisKKyAgICBpZiAoc2l6ZS53aWR0
aCgpID4gbV9waXhtYXAuc2l6ZSgpLndpZHRoKCkgfHwgc2l6ZS5oZWlnaHQoKSA+IG1fcGl4bWFw
LnNpemUoKS5oZWlnaHQoKSB8fCBtX3BpeG1hcC5pc051bGwoKSkKKyAgICAgICAgbV9waXhtYXAg
PSBRUGl4bWFwKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgaWYgKCFpc09wYXF1
ZSkKKyAgICAgICAgbV9waXhtYXAuZmlsbChRdDo6dHJhbnNwYXJlbnQpOworfQorCitQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dCogQml0bWFwVGV4dHVyZVF0OjpiZWdpblBhaW50KGNvbnN0IEludFJl
Y3QmIGRpcnR5UmVjdCkKK3sKKyAgICBtX3BhaW50ZXIuYmVnaW4oJm1fcGl4bWFwKTsKKyAgICBU
ZXh0dXJlTWFwcGVyUXQ6OmluaXRpYWxpemUoJm1fcGFpbnRlcik7CisgICAgbV9wYWludGVyLnNl
dENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX0NsZWFyKTsKKyAgICBt
X3BhaW50ZXIuZmlsbFJlY3QoUVJlY3QoZGlydHlSZWN0KSwgUXQ6OnRyYW5zcGFyZW50KTsKKyAg
ICBtX3BhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVf
U291cmNlT3Zlcik7CisgICAgcmV0dXJuICZtX3BhaW50ZXI7Cit9CisKK3ZvaWQgQml0bWFwVGV4
dHVyZVF0OjplbmRQYWludCgpCit7CisgICAgbV9wYWludGVyLmVuZCgpOworfQorCitib29sIEJp
dG1hcFRleHR1cmVRdDo6c2F2ZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgcmV0dXJuIG1f
cGl4bWFwLnNhdmUocGF0aCwgIlBORyIpOworfQorCit2b2lkIEJpdG1hcFRleHR1cmVRdDo6c2V0
Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKK3sKKyAgICBpZiAoIWltYWdlKQorICAgICAg
ICByZXR1cm47CisgICAgY29uc3QgUVBpeG1hcCogcGl4bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFwaXhtYXApCisgICAgICAgIHJldHVybjsKKyAg
ICBCaXRtYXBUZXh0dXJlOjpyZXNldChwaXhtYXAtPnNpemUoKSwgIXBpeG1hcC0+aGFzQWxwaGFD
aGFubmVsKCkpOworICAgIG1fcGl4bWFwID0gKnBpeG1hcDsKK30KKwordm9pZCBUZXh0dXJlTWFw
cGVyUXQ6OnNldENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICAgUVBhaW50ZXIqIHBh
aW50ZXIgPSBtX2N1cnJlbnRTdXJmYWNlID8gJm1fY3VycmVudFN1cmZhY2UtPm1fcGFpbnRlciA6
IG1fcGFpbnRlcjsKKyAgICAgcGFpbnRlci0+c2V0Q2xpcFJlY3QocmVjdCk7Cit9CisKK1RleHR1
cmVNYXBwZXJRdDo6VGV4dHVyZU1hcHBlclF0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKKyAg
ICA6IFRleHR1cmVNYXBwZXIoY29udGV4dCkKKyAgICAsIG1fcGFpbnRlcihjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKSkKKyAgICAsIG1fY3VycmVudFN1cmZhY2UoMCkKK3sKKyAgICBUZXh0dXJl
TWFwcGVyUXQ6OmluaXRpYWxpemUobV9wYWludGVyKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVy
UXQ6OmJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpCit7CisgICAgaWYgKG1fY3Vy
cmVudFN1cmZhY2UgPT0gc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2N1cnJl
bnRTdXJmYWNlKQorICAgICAgICBtX2N1cnJlbnRTdXJmYWNlLT5tX3BhaW50ZXIuZW5kKCk7Cisg
ICAgaWYgKCFzdXJmYWNlKSB7CisgICAgICAgIG1fY3VycmVudFN1cmZhY2UgPSAwOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIEJpdG1hcFRleHR1cmVRdCogc3VyZmFjZVF0ID0gc3RhdGlj
X2Nhc3Q8Qml0bWFwVGV4dHVyZVF0Kj4oc3VyZmFjZSk7CisgICAgaWYgKCFzdXJmYWNlUXQtPm1f
cGFpbnRlci5pc0FjdGl2ZSgpKQorICAgICAgICBzdXJmYWNlUXQtPm1fcGFpbnRlci5iZWdpbigm
c3VyZmFjZVF0LT5tX3BpeG1hcCk7CisgICAgbV9jdXJyZW50U3VyZmFjZSA9IHN1cmZhY2VRdDsK
K30KKworCit2b2lkIFRleHR1cmVNYXBwZXJRdDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4
dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSog
bWFza1RleHR1cmUpCit7CisgICAgY29uc3QgQml0bWFwVGV4dHVyZVF0JiB0ZXh0dXJlUXQgPSBz
dGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlUXQmPih0ZXh0dXJlKTsKKyAgICBRUGFpbnRl
ciogcGFpbnRlciA9IG1fcGFpbnRlcjsKKyAgICBRUGl4bWFwIHBpeG1hcCA9IHRleHR1cmVRdC5t
X3BpeG1hcDsKKyAgICBpZiAobV9jdXJyZW50U3VyZmFjZSkKKyAgICAgICAgcGFpbnRlciA9ICZt
X2N1cnJlbnRTdXJmYWNlLT5tX3BhaW50ZXI7CisKKyAgICBpZiAobWFza1RleHR1cmUgJiYgbWFz
a1RleHR1cmUtPmlzVmFsaWQoKSkgeworICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJlUXQqIG1h
c2tRdCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVRdCo+KG1hc2tUZXh0dXJlKTsK
KyAgICAgICAgUVBpeG1hcCBpbnRlcm1lZGlhdGVQaXhtYXAocGl4bWFwLnNpemUoKSk7CisgICAg
ICAgIGludGVybWVkaWF0ZVBpeG1hcC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7CisgICAgICAgIFFQ
YWludGVyIG1hc2tQYWludGVyKCZpbnRlcm1lZGlhdGVQaXhtYXApOworICAgICAgICBtYXNrUGFp
bnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2Up
OworICAgICAgICBtYXNrUGFpbnRlci5kcmF3UGl4bWFwKDAsIDAsIHBpeG1hcCk7CisgICAgICAg
IG1hc2tQYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2Rl
X0Rlc3RpbmF0aW9uSW4pOworICAgICAgICBtYXNrUGFpbnRlci5kcmF3UGl4bWFwKFFSZWN0KDAs
IDAsIHBpeG1hcC53aWR0aCgpLCBwaXhtYXAuaGVpZ2h0KCkpLCBtYXNrUXQtPm1fcGl4bWFwLCBt
YXNrUXQtPnNvdXJjZVJlY3QoKSk7CisgICAgICAgIG1hc2tQYWludGVyLmVuZCgpOworICAgICAg
ICBwaXhtYXAgPSBpbnRlcm1lZGlhdGVQaXhtYXA7CisgICAgfQorCisgICAgY29uc3QgcXJlYWwg
cHJldk9wYWNpdHkgPSBwYWludGVyLT5vcGFjaXR5KCk7CisgICAgY29uc3QgUVRyYW5zZm9ybSBw
cmV2VHJhbnNmb3JtID0gcGFpbnRlci0+dHJhbnNmb3JtKCk7CisgICAgcGFpbnRlci0+c2V0T3Bh
Y2l0eShvcGFjaXR5KTsKKyAgICBwYWludGVyLT5zZXRUcmFuc2Zvcm0obWF0cml4LCB0cnVlKTsK
KyAgICBwYWludGVyLT5kcmF3UGl4bWFwKHRhcmdldFJlY3QsIHBpeG1hcCwgdGV4dHVyZVF0LnNv
dXJjZVJlY3QoKSk7CisgICAgcGFpbnRlci0+c2V0VHJhbnNmb3JtKHByZXZUcmFuc2Zvcm0pOwor
ICAgIHBhaW50ZXItPnNldE9wYWNpdHkocHJldk9wYWNpdHkpOworfQorCitQYXNzUmVmUHRyPFRl
eHR1cmVNYXBwZXI+IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQpCit7CisjaWZkZWYgUVRfT1BFTkdMX0xJQgorICAgIGlmIChjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+cGFpbnRFbmdpbmUoKS0+dHlwZSgpID09IFFQYWludEVuZ2luZTo6T3BlbkdMMikK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyR0woY29udGV4dCkpOwor
I2VuZGlmCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyUXQoY29udGV4dCkp
OworfQorCisKK1Bhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlclF0OjpjcmVh
dGVUZXh0dXJlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJpdG1hcFRleHR1cmVRdCgp
KTsKK30KKworI2lmZGVmIFFUX09QRU5HTF9MSUIKK2NsYXNzIFJHQkEzMlByZW11bHRpbXBsaWVk
QnVmZmVyUXQgOiBwdWJsaWMgUkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXIgeworcHVibGljOgor
ICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50
UmVjdCYgcmVjdCwgYm9vbCBvcGFxdWUpCisgICAgeworICAgICAgICBtX2ltYWdlID0gUUltYWdl
KHJlY3Quc2l6ZSgpLndpZHRoKCksIHJlY3Quc2l6ZSgpLmhlaWdodCgpLCBRSW1hZ2U6OkZvcm1h
dF9BUkdCMzJfUHJlbXVsdGlwbGllZCk7CisgICAgICAgIGlmICghb3BhcXVlKQorICAgICAgICAg
ICAgbV9pbWFnZS5maWxsKDApOworICAgICAgICBtX3BhaW50ZXIuYmVnaW4oJm1faW1hZ2UpOwor
ICAgICAgICBUZXh0dXJlTWFwcGVyUXQ6OmluaXRpYWxpemUoJm1fcGFpbnRlcik7CisgICAgICAg
IG1fcGFpbnRlci50cmFuc2xhdGUoLXJlY3QueCgpLCAtcmVjdC55KCkpOworICAgICAgICByZXR1
cm4gJm1fcGFpbnRlcjsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnQoKSB7IG1f
cGFpbnRlci5lbmQoKTsgfQorICAgIHZpcnR1YWwgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG1faW1hZ2UuY29uc3RCaXRzKCk7IH0KKworcHJpdmF0ZToKKyAgICBRUGFpbnRlciBt
X3BhaW50ZXI7CisgICAgUUltYWdlIG1faW1hZ2U7Cit9OworCitQYXNzUmVmUHRyPFJHQkEzMlBy
ZW11bHRpbXBsaWVkQnVmZmVyPiBSR0JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcjo6Y3JlYXRlKCkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyUXQo
KSk7Cit9CisKKyNlbmRpZgorfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDc4NjMzCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIuY3BwCkBAIC0wLDAgKzEsMTQ3MSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCisKKyNp
bmNsdWRlICJDdXJyZW50VGltZS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhhc2hNYXAuaCIKKyNpbmNsdWRlICJJbWFn
ZS5oIgorI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgi
CisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlICJUaW1l
ci5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJUcmFuc2xh
dGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJVbml0QmV6aWVyLmgiCisKKyNkZWZp
bmUgREVCVUdfVEVYTUFQX0ZQUyAxCisjZGVmaW5lIExPR19DSEFOTkVMX1BSRUZJWCAidGV4bWFw
IgorbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgVGV4bWFwUGFpbnRPcHRpb25zIHsKKyAg
ICBCaXRtYXBUZXh0dXJlKiBzdXJmYWNlOworICAgIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBw
ZXI7CisgICAgR3JhcGhpY3NDb250ZXh0KiBnYzsKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogcm9v
dExheWVyOworICAgIGZsb2F0IG9wYWNpdHk7CisgICAgSW50UmVjdCBzY2lzc29yUmVjdDsKKyAg
ICBJbnRSZWN0IHZpc2libGVSZWN0OworfTsKK2NsYXNzIFRleHR1cmVNYXBwZXJDYWNoZSB7Citw
dWJsaWM6CisgICAgdm9pZCBtYXJrKEJpdG1hcFRleHR1cmUqIHRleHR1cmUpOworCisgICAgY2xh
c3MgRW50cnkgeworICAgIHB1YmxpYzoKKyAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRl
eHR1cmU7CisgICAgICAgIEVudHJ5KCkgOiBwcmV2aW91c0Nvc3QoMCkgeyB9CisgICAgICAgIGlu
bGluZSBpbnQgY2FsY3VsYXRlQ29zdCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICghdGV4dHVyZSB8fCAhdGV4dHVyZS0+aXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgY29uc3QgSW50U2l6ZSBzeiA9IHRleHR1cmUtPnNpemUoKTsKKyAg
ICAgICAgICAgIHJldHVybiBzei53aWR0aCgpICogc3ouaGVpZ2h0KCkgKiA0OworICAgICAgICB9
CisgICAgICAgIEVudHJ5KEJpdG1hcFRleHR1cmUqIG5ld1RleHR1cmUpCisgICAgICAgICAgICA6
IHRleHR1cmUobmV3VGV4dHVyZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBFbnRyeSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIHRleHR1cmUgPT0g
b3RoZXIudGV4dHVyZTsgfQorICAgICAgICBpbnQgcHJldmlvdXNDb3N0OworICAgIH07CisKKyAg
ICBUZXh0dXJlTWFwcGVyQ2FjaGUoKSA6IG1fdG90YWxDb3N0KDApIHt9CisKKyAgICB2b2lkIHB1
cmdlKCk7CisgICAgVmVjdG9yPEVudHJ5PiBtX2RhdGE7CisgICAgaW50IG1fdG90YWxDb3N0Owor
I2lmbmRlZiBURVhNQVBfVEVYVFVSRV9DQUNIRV9LQlMKKyNkZWZpbmUgVEVYTUFQX1RFWFRVUkVf
Q0FDSEVfS0JTIDI0ICogMTAyNAorI2VuZGlmCisgICAgc3RhdGljIGNvbnN0IGludCBNYXhDb3N0
ID0gVEVYTUFQX1RFWFRVUkVfQ0FDSEVfS0JTICogMTAyNDsKKyAgICBzdGF0aWMgY29uc3QgaW50
IFB1cmdlQW1vdW50ID0gTWF4Q29zdCAvIDQ7Cit9OworCisKK3ZvaWQgVGV4dHVyZU1hcHBlckNh
Y2hlOjpwdXJnZSgpCit7CisgICAgLy8gV2UgbmVlZCBhbiBhY3RpdmUgR0wgY29udGV4dCwgYmVj
YXVzZSB3ZSBtaWdodCBjYWxsIGdsRGVsZXRlVGV4dHVyZXMuCisgICAgY29uc3QgaW50IHNpemUg
PSBtX2RhdGEuc2l6ZSgpOworCisgICAgaWYgKG1fdG90YWxDb3N0IDw9IFRleHR1cmVNYXBwZXJD
YWNoZTo6TWF4Q29zdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRW5zdXJlIHRoYXQgd2Ug
aGF2ZSB0aGUgcmlnaHQgY291bnQuIEl0IG1pZ2h0IGJlIGluYWNjdXJhdGUgaWYgY29udGVudCBj
aGFuZ2VkIHNpemUuCisgICAgLy8gV2Ugb25seSBkbyB0aGlzIHdoZW4gd2UncmUgYWN0dWFsbHkg
cmVhZHkgdG8gcHVyZ2UuCisgICAgbV90b3RhbENvc3QgPSAwOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBtX3RvdGFsQ29zdCArPSBtX2RhdGFbaV0uY2FsY3Vs
YXRlQ29zdCgpOworCisgICAgZm9yIChpbnQgaSA9IHNpemUtMTsgaSA+PSAwICYmIG1fdG90YWxD
b3N0ID4gVGV4dHVyZU1hcHBlckNhY2hlOjpNYXhDb3N0IC0gVGV4dHVyZU1hcHBlckNhY2hlOjpQ
dXJnZUFtb3VudDsgLS1pKSB7CisgICAgICAgIEVudHJ5JiBlbnRyeSA9IG1fZGF0YVtpXTsKKyAg
ICAgICAgaWYgKGVudHJ5LnRleHR1cmUtPmlzTG9ja2VkKCkgfHwgIWVudHJ5LnRleHR1cmUtPmlz
VmFsaWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtX3RvdGFsQ29zdCAtPSBl
bnRyeS5wcmV2aW91c0Nvc3Q7CisgICAgICAgIGVudHJ5LnRleHR1cmUtPmRlc3Ryb3koKTsKKyAg
ICAgICAgbV9kYXRhLnJlbW92ZShpKTsKKyAgICB9CisKKy8vICAgIExPRygiW1RleHR1cmVNYXBw
ZXJdIFB1cmdlZCAlMi40Zksgb2YgdGV4dHVyZXMoJWQpIFslMi40ZksvJWRdXG4iLCBmbG9hdChi
ZWZvcmUgLSBtX3RvdGFsQ29zdCkgLyAxMDI0LAorLy8gICAgICAgICAgIGludChzaXplLW1fZGF0
YS5zaXplKCkpLCBmbG9hdChtX3RvdGFsQ29zdCkgLyAxMDI0LCBtX2RhdGEuc2l6ZSgpKTsKK30K
Kwordm9pZCBUZXh0dXJlTWFwcGVyQ2FjaGU6Om1hcmsoQml0bWFwVGV4dHVyZSAqdGV4dHVyZSkK
K3sKKyAgICBpZiAoIXRleHR1cmUgfHwgIXRleHR1cmUtPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgRW50cnkgZW50cnkodGV4dHVyZSk7CisgICAgc2l6ZV90IGluZGV4ID0gbV9k
YXRhLmZpbmQoZW50cnkpOworICAgIGlmICghaW5kZXgpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChpbmRleCA8IG1fZGF0YS5zaXplKCkpIAorICAgICAgICBtX2RhdGEucmVtb3ZlKGluZGV4
KTsKKyAgICBjb25zdCBpbnQgY29zdCA9IGVudHJ5LmNhbGN1bGF0ZUNvc3QoKTsKKyAgICBtX3Rv
dGFsQ29zdCAtPSBlbnRyeS5wcmV2aW91c0Nvc3Q7CisgICAgbV90b3RhbENvc3QgKz0gKGVudHJ5
LnByZXZpb3VzQ29zdCA9IGNvc3QpOworICAgIG1fZGF0YS5wcmVwZW5kKGVudHJ5KTsKK30KKwor
VGV4dHVyZU1hcHBlckNhY2hlIGdUZXh0dXJlTWFwcGVyQ2FjaGU7CisKK2NsYXNzIFRleHR1cmVN
YXBwZXJDYWNoZUxvY2sgeworcHVibGljOgorICAgIFRleHR1cmVNYXBwZXJDYWNoZUxvY2soQml0
bWFwVGV4dHVyZSogdGV4dHVyZSkgOiBtX3RleHR1cmUodGV4dHVyZSkKKyAgICB7CisgICAgICAg
IGlmIChtX3RleHR1cmUpCisgICAgICAgICAgICBtX3RleHR1cmUtPmxvY2soKTsKKyAgICB9Cisg
ICAgflRleHR1cmVNYXBwZXJDYWNoZUxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKG1fdGV4dHVy
ZSkKKyAgICAgICAgICAgIG1fdGV4dHVyZS0+dW5sb2NrKCk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBtX3RleHR1cmU7Cit9OworCitjbGFzcyBUZXh0dXJl
TWFwcGVyTm9kZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyQ29udGVudExheWVyIHsKKworcHVibGlj
OgorICAgIC8vIFRoaXMgc2V0IG9mIGZsYWdzIGhlbHAgdXMgZGVmZXIgd2hpY2ggcHJvcGVydGll
cyBvZiB0aGUgbGF5ZXIgaGF2ZSBiZWVuCisgICAgLy8gbW9kaWZpZWQgYnkgdGhlIGNvbXBvc2l0
b3IsIHNvIHdlIGNhbiBrbm93IHdoYXQgdG8gbG9vayBmb3IgaW4gdGhlIG5leHQgZmx1c2guCisg
ICAgZW51bSBDaGFuZ2VNYXNrIHsKKyAgICAgICAgTm9DaGFuZ2VzID0gICAgICAgICAgICAgICAg
IDAsCisKKyAgICAgICAgUGFyZW50Q2hhbmdlID0gICAgICAgICAgICAgICgxTCA8PCAwKSwKKyAg
ICAgICAgQ2hpbGRyZW5DaGFuZ2UgPSAgICAgICAgICAgICgxTCA8PCAxKSwKKyAgICAgICAgTWFz
a0xheWVyQ2hhbmdlID0gICAgICAgICAgICgxTCA8PCAyKSwKKyAgICAgICAgUG9zaXRpb25DaGFu
Z2UgPSAgICAgICAgICAgICgxTCA8PCAzKSwKKworICAgICAgICBBbmNob3JQb2ludENoYW5nZSA9
ICAgICAgICAgKDFMIDw8IDQpLAorICAgICAgICBTaXplQ2hhbmdlICA9ICAgICAgICAgICAgICAg
KDFMIDw8IDUpLAorICAgICAgICBUcmFuc2Zvcm1DaGFuZ2UgPSAgICAgICAgICAgKDFMIDw8IDYp
LAorICAgICAgICBDb250ZW50Q2hhbmdlID0gICAgICAgICAgICAgKDFMIDw8IDcpLAorCisgICAg
ICAgIENvbnRlbnRzT3JpZW50YXRpb25DaGFuZ2UgPSAoMUwgPDwgOSksCisgICAgICAgIE9wYWNp
dHlDaGFuZ2UgPSAgICAgICAgICAgICAoMUwgPDwgMTApLAorICAgICAgICBDb250ZW50c1JlY3RD
aGFuZ2UgPSAgICAgICAgKDFMIDw8IDExKSwKKworICAgICAgICBQcmVzZXJ2ZXMzRENoYW5nZSA9
ICAgICAgICAgKDFMIDw8IDEyKSwKKyAgICAgICAgTWFza3NUb0JvdW5kc0NoYW5nZSA9ICAgICAg
ICgxTCA8PCAxMyksCisgICAgICAgIERyYXdzQ29udGVudENoYW5nZSA9ICAgICAgICAoMUwgPDwg
MTQpLAorICAgICAgICBDb250ZW50c09wYXF1ZUNoYW5nZSA9ICAgICAgKDFMIDw8IDE1KSwKKwor
ICAgICAgICBCYWNrZmFjZVZpc2liaWxpdHlDaGFuZ2UgPSAgKDFMIDw8IDE2KSwKKyAgICAgICAg
Q2hpbGRyZW5UcmFuc2Zvcm1DaGFuZ2UgPSAgICgxTCA8PCAxNyksCisgICAgICAgIERpc3BsYXlD
aGFuZ2UgPSAgICAgICAgICAgICAoMUwgPDwgMTgpLAorICAgICAgICBCYWNrZ3JvdW5kQ29sb3JD
aGFuZ2UgPSAgICAgKDFMIDw8IDE5KSwKKworICAgICAgICBSZXBsaWNhTGF5ZXJDaGFuZ2UgPSAg
ICAgICAgKDFMIDw8IDIwKQorICAgIH07CisKKyAgICAvLyBUaGUgY29tcG9zaXRvciBsZXRzIHVz
IHNwZWNpYWwtY2FzZSBpbWFnZXMgYW5kIGNvbG9ycywgc28gd2UgdHJ5IHRvIGRvIHNvLgorICAg
IGVudW0gU3RhdGljQ29udGVudFR5cGUgeyBIVE1MQ29udGVudFR5cGUsIERpcmVjdEltYWdlQ29u
dGVudFR5cGUsIENvbG9yQ29udGVudFR5cGUsIE1lZGlhQ29udGVudFR5cGUsIENhbnZhczNEQ29u
dGVudFR5cGV9OworCisgICAgVGV4dHVyZU1hcHBlck5vZGUqIHJvb3RMYXllcigpOworCisgICAg
VGV4dHVyZU1hcHBlck5vZGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIG5ld0xheWVyKTsK
KyAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyTm9kZSgpOworCisgICAgdm9pZCBjbGVhckRpcmVj
dEltYWdlKCk7CisgICAgdm9pZCBjb21wdXRlVHJhbnNmb3JtYXRpb25zKCk7CisgICAgSW50U2l6
ZSBuZWFyZXN0U3VyZmFjZVNpemUoKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVSZXBsaWNhVHJh
bnNmb3JtKCk7CisgICAgdm9pZCBjb21wdXRlTGF5ZXJUeXBlKCk7CisgICAgdm9pZCBjb21wdXRl
TG9jYWxUcmFuc2Zvcm0oKTsKKyAgICB2b2lkIGZsYXR0ZW5UbzJEU3BhY2VJZk5lY2Vzc2FyeSgp
OworICAgIHZvaWQgaW5pdGlhbGl6ZVRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciopOworICAg
IHZvaWQgaW52YWxpZGF0ZVRyYW5zZm9ybSgpOworICAgIHZvaWQgbm90aWZ5Q2hhbmdlKENoYW5n
ZU1hc2spOworICAgIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoYm9vbCByZWN1cnNlKTsKKyAg
ICB2b2lkIHBlcmZvcm1Qb3N0U3luY09wZXJhdGlvbnMoKTsKKyAgICB2b2lkIHNldE5lZWRzRGlz
cGxheSgpOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KEludFJlY3QpOworICAgIHZp
cnR1YWwgdm9pZCBjbGVhbnVwVGV4dHVyZU1hcHBlcigpOworCisgICAgdm9pZCBwYWludFJlY3Vy
c2l2ZShUZXhtYXBQYWludE9wdGlvbnMgb3B0aW9ucyk7CisgICAgdm9pZCBwYWludFNlbGYoVGV4
dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSog
bWFza1RleHR1cmUsIEJpdG1hcFRleHR1cmUqIHJlcGxpY2FNYXNrVGV4dHVyZSwgYm9vbCBpc1N1
cmZhY2UpOworICAgIHZvaWQgdXBsb2FkVGV4dHVyZUZyb21Db250ZW50KFRleHR1cmVNYXBwZXIq
IHRleHR1cmVNYXBwZXIpOworCisgICAgaW50IGNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCgp
IGNvbnN0OworICAgIGJvb2wgaGFzU3VyZmFjZURlc2NlbmRhbnRzKCkgY29uc3Q7CisKKyAgICBJ
bnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCBzZXRQbGF0Zm9ybUxheWVyQ2xpZW50KFRleHR1cmVNYXBwZXJMYXllckNsaWVudCopOworICAg
IHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRTaXplJiwgY29u
c3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UmVjdCYgZXhwb3NlZFJlY3QsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHkpOworCisgICAg
c3RhdGljIFRleHR1cmVNYXBwZXJOb2RlKiB0b1RleHR1cmVNYXBwZXJOb2RlKEdyYXBoaWNzTGF5
ZXIqKTsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogbV9sYXllcjsK
KyAgICBjb25zdCBjaGFyKiBtX2xhc3RUZXh0dXJlTWFwcGVyVHlwZTsKKyAgICBSZWZQdHI8VGV4
dHVyZU1hcHBlcj4gbV9sYXN0VGV4dHVyZU1hcHBlcjsKKyAgICBzdHJ1Y3QgVHJhbnNmb3JtRGF0
YSB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGJhc2UsIHRhcmdldCwgcmVwbGljYSwg
Zm9yRGVzY2VuZGFudHMsIHBlcnNwZWN0aXZlLCBsb2NhbDsKKyAgICAgICAgSW50UmVjdCB0YXJn
ZXRCb3VuZGluZ1JlY3Q7CisgICAgICAgIGZsb2F0IGNlbnRlclo7CisgICAgICAgIGJvb2wgZGly
dHksIGxvY2FsRGlydHksIHBlcnNwZWN0aXZlRGlydHk7CisgICAgICAgIEludFJlY3QgYm91bmRp
bmdSZWN0RnJvbVJvb3Q7CisgICAgICAgIFRyYW5zZm9ybURhdGEoKSA6IGRpcnR5KHRydWUpLCBs
b2NhbERpcnR5KHRydWUpLCBwZXJzcGVjdGl2ZURpcnR5KHRydWUpCisgICAgICAgIHsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBUcmFuc2Zvcm1EYXRhIG1fdHJhbnNmb3JtczsKKworICAgIGVu
dW0gTGF5ZXJUeXBlIHsKKyAgICAgICAgRGVmYXVsdExheWVyLAorICAgICAgICBSb290TGF5ZXIs
CisgICAgICAgIFNjaXNzb3JMYXllciwKKyAgICAgICAgQ2xpcExheWVyLAorICAgICAgICBUcmFu
c3BhcmVuY3lMYXllcgorICAgIH07CisKKyAgICBMYXllclR5cGUgbV9sYXllclR5cGU7CisKKyAg
ICBzdHJ1Y3QgQ29udGVudERhdGEgeworICAgICAgICBJbnRSZWN0IG5lZWRzRGlzcGxheVJlY3Q7
CisgICAgICAgIGJvb2wgbmVlZHNEaXNwbGF5OworICAgICAgICBDb2xvciBiYWNrZ3JvdW5kQ29s
b3I7CisKKyAgICAgICAgU3RhdGljQ29udGVudFR5cGUgY29udGVudFR5cGU7CisgICAgICAgIFJl
ZlB0cjxJbWFnZT4gaW1hZ2U7CisgICAgICAgIFRleHR1cmVNYXBwZXJWaWRlb0xheWVyKiBtZWRp
YTsKKworICAgICAgICBDb250ZW50RGF0YSgpCisgICAgICAgICAgICA6IG5lZWRzRGlzcGxheShm
YWxzZSkKKyAgICAgICAgICAgICwgY29udGVudFR5cGUoSFRNTENvbnRlbnRUeXBlKQorICAgICAg
ICAgICAgLCBpbWFnZSgwKQorICAgICAgICAgICAgLCBtZWRpYSgwKQorICAgICAgICB7CisgICAg
ICAgIH0KKworICAgIH07CisKKyAgICBpbmxpbmUgSW50UmVjdCB0YXJnZXRSZWN0KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IEhU
TUxDb250ZW50VHlwZSA/IGZ1bGxSZWN0KCkgOiBtX3N0YXRlLmNvbnRlbnRzUmVjdDsKKyAgICB9
CisKKyAgICBpbmxpbmUgSW50UmVjdCBmdWxsUmVjdCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAg
ICB9CisKKyAgICBpbmxpbmUgSW50UmVjdCByZXBsaWNhUmVjdCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9sYXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIgPyBJbnRSZWN0KDAs
IDAsIG1fbmVhcmVzdFN1cmZhY2VTaXplLndpZHRoKCksIG1fbmVhcmVzdFN1cmZhY2VTaXplLmhl
aWdodCgpKSA6IGZ1bGxSZWN0KCk7CisgICAgfQorCisgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+
IG1fdGV4dHVyZTsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbV9zdXJmYWNlLCBtX3JlcGxp
Y2FTdXJmYWNlOworCisgICAgQ29udGVudERhdGEgbV9wZW5kaW5nQ29udGVudDsKKyAgICBDb250
ZW50RGF0YSBtX2N1cnJlbnRDb250ZW50OworCisgICAgVmVjdG9yPFRleHR1cmVNYXBwZXJOb2Rl
Kj4gbV9jaGlsZHJlbjsKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogbV9wYXJlbnQ7CisgICAgVGV4
dHVyZU1hcHBlck5vZGUqIG1fZWZmZWN0VGFyZ2V0OworICAgIGludCBtX2NoYW5nZU1hc2s7Cisg
ICAgSW50U2l6ZSBtX3NpemUsIG1fbmVhcmVzdFN1cmZhY2VTaXplOworICAgIFN0cmluZyBtX25h
bWU7CisgICAgVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50KiBtX3BsYXRmb3JtQ2xpZW50OworCisg
ICAgc3RydWN0IFN0YXRlIHsKKyAgICAgICAgRmxvYXRQb2ludCBwb3M7CisgICAgICAgIEZsb2F0
UG9pbnQzRCBhbmNob3JQb2ludDsKKyAgICAgICAgRmxvYXRTaXplIHNpemU7CisgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggY2hpbGRyZW5UcmFuc2Zvcm07CisgICAgICAgIENvbG9yIGJhY2tncm91bmRDb2xvcjsKKyAg
ICAgICAgQ29sb3IgY3VycmVudENvbG9yOworICAgICAgICBHcmFwaGljc0xheWVyOjpDb21wb3Np
dGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gZ2VvT3JpZW50YXRpb247CisgICAgICAgIEdyYXBo
aWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBjb250ZW50c09yaWVu
dGF0aW9uOworICAgICAgICBmbG9hdCBvcGFjaXR5OworICAgICAgICBJbnRSZWN0IGNvbnRlbnRz
UmVjdDsKKyAgICAgICAgaW50IGRlc2NlbmRhbnRzV2l0aENvbnRlbnQ7CisgICAgICAgIFRleHR1
cmVNYXBwZXJOb2RlKiBtYXNrTGF5ZXI7CisgICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiByZXBs
aWNhTGF5ZXI7CisgICAgICAgIGJvb2wgcHJlc2VydmVzM0Q7CisgICAgICAgIGJvb2wgbWFza3NU
b0JvdW5kczsKKyAgICAgICAgYm9vbCBkcmF3c0NvbnRlbnQ7CisgICAgICAgIGJvb2wgY29udGVu
dHNPcGFxdWU7CisgICAgICAgIGJvb2wgYmFja2ZhY2VWaXNpYmlsaXR5OworICAgICAgICBib29s
IHZpc2libGU7CisgICAgICAgIGJvb2wgZGlydHk7CisgICAgICAgIGJvb2wgdGlsZWQ7CisgICAg
ICAgIGJvb2wgaGFzU3VyZmFjZURlc2NlbmRhbnRzOworCisgICAgICAgIFN0YXRlKCkKKyAgICAg
ICAgICAgIDogb3BhY2l0eSgxLmYpCisgICAgICAgICAgICAsIGRlc2NlbmRhbnRzV2l0aENvbnRl
bnQoMCkKKyAgICAgICAgICAgICwgbWFza0xheWVyKDApCisgICAgICAgICAgICAsIHJlcGxpY2FM
YXllcigwKQorICAgICAgICAgICAgLCBwcmVzZXJ2ZXMzRChmYWxzZSkKKyAgICAgICAgICAgICwg
bWFza3NUb0JvdW5kcyhmYWxzZSkKKyAgICAgICAgICAgICwgZHJhd3NDb250ZW50KGZhbHNlKQor
ICAgICAgICAgICAgLCBjb250ZW50c09wYXF1ZShmYWxzZSkKKyAgICAgICAgICAgICwgYmFja2Zh
Y2VWaXNpYmlsaXR5KGZhbHNlKQorICAgICAgICAgICAgLCB2aXNpYmxlKHRydWUpCisgICAgICAg
ICAgICAsIGRpcnR5KHRydWUpCisgICAgICAgICAgICAsIHRpbGVkKGZhbHNlKQorICAgICAgICAg
ICAgLCBoYXNTdXJmYWNlRGVzY2VuZGFudHMoZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgfQor
ICAgIH07CisgICAgU3RhdGUgbV9zdGF0ZTsKK307CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6
OnNldE5lZWRzRGlzcGxheUluUmVjdChJbnRSZWN0IHJlY3QpCit7CisgICAgaWYgKG1fcGxhdGZv
cm1DbGllbnQpIHsKKyAgICAgICAgaWYgKG1fc3RhdGUuaGFzU3VyZmFjZURlc2NlbmRhbnRzKSB7
CisgICAgICAgICAgICBtX3BsYXRmb3JtQ2xpZW50LT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICByZWN0LmludGVyc2VjdChJbnRSZWN0
KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgaWYgKHJl
Y3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3BsYXRmb3JtQ2xp
ZW50LT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoIW1fcGFyZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhcmVudC0+
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2Rl
OjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAgIGlmIChtX2VmZmVjdFRhcmdldCkKKyAgICAgICAg
bV9lZmZlY3RUYXJnZXQtPnNldE5lZWRzRGlzcGxheSgpOworICAgIGlmIChtX3RyYW5zZm9ybXMu
dGFyZ2V0Qm91bmRpbmdSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICht
X3N0YXRlLmRyYXdzQ29udGVudCB8fCBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlICE9IEhU
TUxDb250ZW50VHlwZSkKKyAgICAgICAgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KG1fdHJhbnNmb3Jt
cy50YXJnZXRCb3VuZGluZ1JlY3QpOworfQorCisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNl
dFBsYXRmb3JtTGF5ZXJDbGllbnQoVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50KiBjbGllbnQpCit7
CisgICAgbV9wbGF0Zm9ybUNsaWVudCA9IGNsaWVudDsKK30KKworc3RhdGljIGludCBjb21wYXJl
R3JhcGhpY3NMYXllcnNaVmFsdWUoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKK3sKKyAg
ICB0eXBlZGVmIGNvbnN0IFRleHR1cmVNYXBwZXJOb2RlKiBOb2RlUHRyOworICAgIGNvbnN0IE5v
ZGVQdHIqIG5vZGVBID0gc3RhdGljX2Nhc3Q8Y29uc3QgTm9kZVB0cio+KGEpOworICAgIGNvbnN0
IE5vZGVQdHIqIG5vZGVCID0gc3RhdGljX2Nhc3Q8Y29uc3QgTm9kZVB0cio+KGIpOworICAgIHJl
dHVybiBpbnQoKCgqbm9kZUEpLT5tX3RyYW5zZm9ybXMuY2VudGVyWiAtICgqbm9kZUIpLT5tX3Ry
YW5zZm9ybXMuY2VudGVyWikgKiAxMDAwKTsKK30KK2lubGluZSBzdGF0aWMgdm9pZCBzb3J0Qnla
T3JkZXIoVmVjdG9yPFRleHR1cmVNYXBwZXJOb2RlKiA+JiBhcnJheSwgaW50IGZpcnN0LCBpbnQg
bGFzdCkKK3sKKyAgICBxc29ydChhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgc2l6ZW9mKFRl
eHR1cmVNYXBwZXJOb2RlKiksIGNvbXBhcmVHcmFwaGljc0xheWVyc1pWYWx1ZSk7Cit9CisKK2Jv
b2wgVGV4dHVyZU1hcHBlck5vZGU6Omhhc1N1cmZhY2VEZXNjZW5kYW50cygpIGNvbnN0Cit7CisK
KyAgICBpZiAobV9sYXllclR5cGUgPT0gQ2xpcExheWVyIHx8IG1fbGF5ZXJUeXBlID09IFRyYW5z
cGFyZW5jeUxheWVyIHx8IG1fc3RhdGUucmVwbGljYUxheWVyKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBjb25zdCBpbnQgc2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIGNo
aWxkID0gbV9jaGlsZHJlbltpXSkKKyAgICAgICAgICAgIGlmIChjaGlsZC0+aGFzU3VyZmFjZURl
c2NlbmRhbnRzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZh
bHNlOworCit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50KEdyYXBoaWNzQ29udGV4
dCogZ2MsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNv
bnN0IEludFJlY3QmIGV4cG9zZWRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJh
bnNmb3JtLCBmbG9hdCBvcGFjaXR5KQoreworICAgIC8vIG5lZWRzIGFjdGl2ZSBjb250ZXh0Cisg
ICAgQVNTRVJUKG1fbGF5ZXJUeXBlID09IFJvb3RMYXllcik7CisgICAgaWYgKG1fc2l6ZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKworI2lmIDAKKyAgICBXVEY6OlN0b3BXYXRjaCBzdG9w
V2F0Y2g7CisgICAgKCJbVGV4dHVyZU1hcHBlcl0gUm9vdFBhaW50ISFcbiIpOworI2VuZGlmCisK
KyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlcj4gdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXI6
OmNyZWF0ZShnYyk7CisKKyAgICBpZiAodGV4dHVyZU1hcHBlci0+dHlwZSgpICE9IG1fbGFzdFRl
eHR1cmVNYXBwZXJUeXBlKQorICAgICAgICBnVGV4dHVyZU1hcHBlckNhY2hlLm1fZGF0YS5jbGVh
cigpOworCisgICAgbV9sYXN0VGV4dHVyZU1hcHBlciA9IHRleHR1cmVNYXBwZXI7CisgICAgVGV4
bWFwUGFpbnRPcHRpb25zIG9wdDsKKyAgICBvcHQub3BhY2l0eSA9IDE7CisgICAgb3B0LnJvb3RM
YXllciA9IHRoaXM7CisgICAgb3B0LnNjaXNzb3JSZWN0ID0gdGFyZ2V0UmVjdDsKKyAgICBvcHQu
dmlzaWJsZVJlY3QgPSBleHBvc2VkUmVjdDsKKyAgICBvcHQudGV4dHVyZU1hcHBlciA9IHRleHR1
cmVNYXBwZXIuZ2V0KCk7CisgICAgb3B0LmdjID0gdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250
ZXh0KCk7CisgICAgb3B0LnN1cmZhY2UgPSAwOworICAgIHBhaW50UmVjdXJzaXZlKG9wdCk7CisK
KyAgICBpZiAodGV4dHVyZU1hcHBlci0+YWxsb3dTdXJmYWNlRm9yUm9vdCgpIHx8IG1fc3RhdGUu
aGFzU3VyZmFjZURlc2NlbmRhbnRzKSB7CisgICAgICAgIHRleHR1cmVNYXBwZXItPmJpbmRTdXJm
YWNlKDApOworICAgICAgICB0ZXh0dXJlTWFwcGVyLT5wYWludFRvVGFyZ2V0KCptX3N1cmZhY2Uu
Z2V0KCksIHNpemUsIHRyYW5zZm9ybSwgb3BhY2l0eSAqIG1fc3RhdGUub3BhY2l0eSwgdGFyZ2V0
UmVjdCk7CisgICAgfQorICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUucHVyZ2UoKTsKKyNpZiAwCisg
ICAgeworICAgICAgICBzdGF0aWMgaW50IHJvb3RDb3VudCA9IDA7CisgICAgICAgICgiW1RleHR1
cmVNYXBwZXJdIFJvb3RQYWludCglZCkgJWQgbGF5ZXIoJXApICglZCslZCAlZHglZCkgWyVkbXNd
XG4iLCArK3Jvb3RDb3VudCwgdGV4dHVyZU1hcHBlci0+YWxsb3dTdXJmYWNlRm9yUm9vdCgpLAor
ICAgICAgICAgICAgICAgdGhpcywgZXhwb3NlZFJlY3QueCgpLCBleHBvc2VkUmVjdC55KCksIGV4
cG9zZWRSZWN0LndpZHRoKCksIGV4cG9zZWRSZWN0LmhlaWdodCgpLCAKKyAgICAgICAgICAgICAg
IGludChzdG9wV2F0Y2guZWxhcHNlZCgpICogMTAwMCkpOworI2lmIDAKKyAgICAgICAgaWYgKHRl
eHR1cmVNYXBwZXItPmFsbG93U3VyZmFjZUZvclJvb3QoKSkKKyAgICAgICAgICAgIG1fc3VyZmFj
ZS0+c2F2ZShTdHJpbmcoKS5mb3JtYXQoIi90bXAvcm9vdF8lZC5wbmciLCByb290Q291bnQpKTsK
KyNlbmRpZgorICAgIH0KKyNlbmRpZgorfQorCitpbnQgVGV4dHVyZU1hcHBlck5vZGU6OmNvdW50
RGVzY2VuZGFudHNXaXRoQ29udGVudCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3N0YXRlLnZpc2li
bGUgfHwgbV9zdGF0ZS5vcGFjaXR5IDwgMC4wMDEpCisgICAgICAgIHJldHVybiAwOworICAgIGlu
dCBkZXNjZW5kYW50c1dpdGhDb250ZW50ID0gKG1fc3RhdGUuZHJhd3NDb250ZW50IHx8IG1fY3Vy
cmVudENvbnRlbnQuY29udGVudFR5cGUgIT0gSFRNTENvbnRlbnRUeXBlKSA/IDEgOiAwOworCisg
ICAgY29uc3QgaW50IHNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIGNoaWxk
ID0gbV9jaGlsZHJlbltpXSkKKyAgICAgICAgICAgIGRlc2NlbmRhbnRzV2l0aENvbnRlbnQgKz0g
Y2hpbGQtPmNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCgpOworICAgIH0KKworICAgIHJldHVy
biBkZXNjZW5kYW50c1dpdGhDb250ZW50OworfQorCitpbmxpbmUgVGV4dHVyZU1hcHBlck5vZGUq
IFRleHR1cmVNYXBwZXJOb2RlOjp0b1RleHR1cmVNYXBwZXJOb2RlKEdyYXBoaWNzTGF5ZXIqIGxh
eWVyKQoreworICAgIHJldHVybiBsYXllciA/IHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyKj4obGF5ZXIpLT5tX25vZGUuZ2V0KCkgOiAwOworfQorCit2b2lkIFRleHR1cmVN
YXBwZXJOb2RlOjpjb21wdXRlTGF5ZXJUeXBlKCkKK3sKKyAgICAvLyBjYWxjdWxhdGUgbGF5ZXIg
dHlwZS4gQSBsYXllciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgLy8gIFJvb3RM
YXllcjogdGhlIHRvcCBsZXZlbC4gRHJhd3MgdG8gYSBmcmFtZWJ1ZmZlciwgYW5kIHRoZSB0YXJn
ZXQgdGV4dHVyZSBkcmF3cyBpbnRvIHRoZSB2aWV3cG9ydC4KKyAgICAvLyAgICAgICAgICAgIG9u
bHkgb25lIGxheWVyIGlzIHRoZSByb290IGxheWVyLgorICAgIC8vICBTY2lzc29yTGF5ZXI6IGRy
YXdzIHRvIHRoZSBjdXJyZW50IGZyYW1lYnVmZmVyLCBhbmQgYXBwbGllcyBhbiBleHRyYSBzY2lz
c29yIGJlZm9yZSBkcmF3aW5nIGl0cyBjaGlsZHJlbi4KKyAgICAvLyAgICAgICAgICAgICAgICBB
IHNjaXNzb3IgbGF5ZXIgaXMgYSBsYXllciB3aXRoIGNoaWxkcmVuIHRoYXQgbWFza3MgdG8gYm91
bmRzLCBpcyBub3QgYSB0cmFuc3BhcmVuY3kgbGF5ZXIsIGFuZCBoYXMgYSByZWN0YW5ndWxhciBj
bGlwLgorICAgIC8vICBDbGlwTGF5ZXI6IGNyZWF0ZXMgYSBuZXcgZnJhbWVidWZmZXIsIHRoZSBz
aXplIG9mIHRoZSBsYXllciwgYW5kIHRoZW4gcGFpbnRzIGl0IHRvIHRoZSBlbmNsb3NpbmcgQml0
bWFwVGV4dHVyZSB3aXRoIHRoZSBsYXllcidzIHRyYW5zZm9ybS9vcGFjaXR5LgorICAgIC8vICAg
ICAgICAgICAgICBBIGNsaXAgbGF5ZXIgaXMgYSBsYXllciB0aGF0IG1hc2tzIHRvIGJvdW5kcywg
ZG9lc24ndCBwcmVzZXJ2ZSAzRCwgaGFzIGNoaWxkcmVuLCBhbmQgaGFzIGEgdHJhbnNwYXJlbmN5
L21hc2sgb3IgYSBub24tcmVjdGFuZ3VsYXIgdHJhbnNmb3JtLgorICAgIC8vICBUcmFuc3BhcmVu
Y3lMYXllcjogY3JlYXRlcyBhIG5ldyBmcmFtZWJ1ZmZlciBpZGV0aWNhbCBpbiBzaXplIHRvIHRo
ZSBjdXJyZW50IGZyYW1lYnVmZmVyLiBUaGVuIGRyYXdzIHRoZSBmYidzIHRleHR1cmUgdG8gdGhl
IGN1cnJlbnQgZnJhbWVidWZmZXIgd2l0aCBpZGVudGl0eSB0cmFuc2Zvcm0uCisgICAgLy8gICAg
ICAgICAgICAgICAgICAgICBVc2VkIGZvciBsYXllcnMgd2l0aCBjaGlsZHJlbiBhbmQgdHJhbnNw
YXJlbmN5L21hc2sgdGhhdCBwcmVzZXJ2ZSAzRCBvciBkb24ndCBtYXNrIHRvIGJvdW5kcy4KKyAg
ICAvLyAgRGVmYXVsdExheWVyOiBkcmF3cyBpdHNlbGYgYW5kIGl0cyBjaGlsZHJlbiBkaXJlY3Rs
eSB0byB0aGUgY3VycmVudCBmcmFtZWJ1ZmZlci4KKyAgICAvLyAgICAgICAgICAgICAgICBhbnkg
bGF5ZXIgdGhhdCBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIG90aGVyIHJ1bGVzIGlzIGEgRGVmYXVs
dExheWVyLgorCisgICAgY29uc3QgYm9vbCBzZWxmSGFzQ29udGVudCA9IG1fc3RhdGUuZHJhd3ND
b250ZW50IHx8IChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlICE9IEhUTUxDb250ZW50VHlw
ZSk7CisgICAgY29uc3QgYm9vbCBoYXNEZXNjZW5kYW50c1dpdGhDb250ZW50ID0gbV9zdGF0ZS5k
ZXNjZW5kYW50c1dpdGhDb250ZW50IC0gKHNlbGZIYXNDb250ZW50ID8gMSA6IDApOworICAgIGNv
bnN0IGJvb2wgaGFzVHJhbnNwYXJlbmN5ID0gbV9zdGF0ZS5vcGFjaXR5IDwgMC45OSB8fCBtX3N0
YXRlLm1hc2tMYXllcjsKKyAgICBjb25zdCBib29sIGhhc1JlcGxpY2EgPSBtX3N0YXRlLnJlcGxp
Y2FMYXllcjsKKyAgICBtX2xheWVyVHlwZSA9IERlZmF1bHRMYXllcjsKKworICAgIC8vIExheWVy
IGhhcyBubyBwYXJlbnQsIGl0IG11c3QgYmUgYSByb290IGxheWVyLgorICAgIGlmICghbV9wYXJl
bnQgJiYgIW1fZWZmZWN0VGFyZ2V0KSB7CisgICAgICAgIG1fbGF5ZXJUeXBlID0gUm9vdExheWVy
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQSBsYXllciB3aXRoIG5vIGNvbnRl
bnRzIGlzIGFsd2F5cyBhIGRlZmF1bHQgbGF5ZXIuCisgICAgaWYgKCFtX3N0YXRlLmRlc2NlbmRh
bnRzV2l0aENvbnRlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEEgbGF5ZXIgd2l0aCBj
b250ZW50LWRlc2NlbmRhbnRzIGFuZCBhIG1hc2sgaXMgYWx3YXlzIGEgY2xpcCBsYXllci4KKyAg
ICBpZiAoaGFzRGVzY2VuZGFudHNXaXRoQ29udGVudCAmJiBtX3N0YXRlLm1hc2tMYXllcikgewor
ICAgICAgICBtX2xheWVyVHlwZSA9IENsaXBMYXllcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIEEgbWFza3MtdG8gYm91bmRzIGxheWVyIGNhbiBiZSBhIGNsaXAgb3IgYSBzY2lz
c29yIGxheWVyLiBJdCdzIGEgc2Npc3NvciBsYXllciBvbmx5IGlmIGl0IGhhcyBhIHRyaXZpYWwg
Y2xpcCAoaWRlbnRpdHkgb3IgdHJhbnNsYXRpb24pLCBvciBpZiBpdCBoYXMgdHJhbnNwYXJlbmN5
LgorICAgIC8vIFRoYXQncyBiZWNhdXNlIGEgQ2xpcExheWVyIHdvdWxkIGNyZWF0ZSBhbiBpbnRl
cm1lZGlhdGUgZHJhd2luZyBzdXJmYWNlIChGQikgLSB3ZSB3YW50IHRvIGxpbWl0IGl0IHRvIHdo
ZW4gaXQncyBhY3R1YWxseSBuZWNlc3NhcnksIGkuZS4gdHJhbnNwYXJlbmN5IG9yIG5vbi10cml2
aWFsIGNsaXAuCisgICAgaWYgKG1fc3RhdGUubWFza3NUb0JvdW5kcyAmJiBoYXNEZXNjZW5kYW50
c1dpdGhDb250ZW50KSB7CisgICAgICAgIGlmIChoYXNUcmFuc3BhcmVuY3kgfHwgIW1fc3RhdGUu
dHJhbnNmb3JtLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkgfHwgbV9wYXJlbnQtPm1fc3RhdGUu
cHJlc2VydmVzM0QpCisgICAgICAgICAgICBtX2xheWVyVHlwZSA9IENsaXBMYXllcjsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9sYXllclR5cGUgPSBTY2lzc29yTGF5ZXI7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSB1c2UgYSB0cmFuc3BhcmVuY3kgbGF5ZXIgd2hl
biB3ZSBoYXZlIHR3byBvZiB0aGUgZm9sbG93aW5nIDM6IHJlcGxpY2EsIHRyYW5zcGFyZW5jeSwg
ZGVzY2VuZGFudHMgd2l0aCBjb250ZW50cy4KKyAgICBpZiAoKGhhc1JlcGxpY2EgJiYgaGFzRGVz
Y2VuZGFudHNXaXRoQ29udGVudCkgfHwgKGhhc1JlcGxpY2EgJiYgaGFzVHJhbnNwYXJlbmN5KSB8
fCAoaGFzVHJhbnNwYXJlbmN5ICYmIG1fc3RhdGUuZGVzY2VuZGFudHNXaXRoQ29udGVudCA+IDEp
KQorICAgICAgICBtX2xheWVyVHlwZSA9IFRyYW5zcGFyZW5jeUxheWVyOworfQordm9pZCBUZXh0
dXJlTWFwcGVyTm9kZTo6aW5pdGlhbGl6ZVRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4
dHVyZU1hcHBlcikKK3sKKyAgICBpZiAodGV4dHVyZU1hcHBlci0+dHlwZSgpID09IG1fbGFzdFRl
eHR1cmVNYXBwZXJUeXBlKQorICAgICAgICByZXR1cm47CisjaWYgMAorICAgIGlmIChtX2xheWVy
VHlwZSA9PSBDbGlwTGF5ZXIgfHwgbV9sYXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIKKyAg
ICAgICAgfHwgKG1fbGF5ZXJUeXBlID09IFJvb3RMYXllciAmJiB0ZXh0dXJlTWFwcGVyLT5hbGxv
d1N1cmZhY2VGb3JSb290KCkpKQorICAgICAgICBtX3N1cmZhY2UgPSB0ZXh0dXJlTWFwcGVyLT5j
cmVhdGVUZXh0dXJlKCk7CisgICAgZWxzZSBpZiAobV9zdXJmYWNlKQorICAgICAgICBtX3N1cmZh
Y2UtPmRlc3Ryb3koKTsKKyAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIG1f
cmVwbGljYVN1cmZhY2UgPSB0ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CisgICAgZWxz
ZSBpZiAobV9yZXBsaWNhU3VyZmFjZSkKKyAgICAgICAgbV9yZXBsaWNhU3VyZmFjZS0+ZGVzdHJv
eSgpOworI2Vsc2UKKyAgICBtX3N1cmZhY2UgPSB0ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJl
KCk7CisgICAgbV9yZXBsaWNhU3VyZmFjZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUo
KTsKKyNlbmRpZgorICAgIG1fdGV4dHVyZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUo
KTsKKyAgICBnVGV4dHVyZU1hcHBlckNhY2hlLm1hcmsobV90ZXh0dXJlLmdldCgpKTsKKyAgICBt
X2xhc3RUZXh0dXJlTWFwcGVyVHlwZSA9IHRleHR1cmVNYXBwZXItPnR5cGUoKTsKK30KKworVGV4
dHVyZU1hcHBlck5vZGU6OlRleHR1cmVNYXBwZXJOb2RlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyKiBuZXdMYXllcikKKyAgICA6IG1fbGF5ZXIobmV3TGF5ZXIpCisgICAgLCBtX2xhc3RUZXh0
dXJlTWFwcGVyVHlwZSgwKQorICAgICwgbV9sYXN0VGV4dHVyZU1hcHBlcigwKQorICAgICwgbV9s
YXllclR5cGUoRGVmYXVsdExheWVyKQorICAgICwgbV9zdXJmYWNlKDApCisgICAgLCBtX3BhcmVu
dCgwKQorICAgICwgbV9lZmZlY3RUYXJnZXQoMCkKKyAgICAsIG1fY2hhbmdlTWFzayhOb0NoYW5n
ZXMpCisgICAgLCBtX3BsYXRmb3JtQ2xpZW50KDApCit7CisKK30KKworVGV4dHVyZU1hcHBlck5v
ZGUqIFRleHR1cmVNYXBwZXJOb2RlOjpyb290TGF5ZXIoKQoreworICAgIGlmIChtX2VmZmVjdFRh
cmdldCkKKyAgICAgICAgcmV0dXJuIG1fZWZmZWN0VGFyZ2V0LT5yb290TGF5ZXIoKTsKKyAgICBp
ZiAobV9wYXJlbnQpCisgICAgICAgIHJldHVybiBtX3BhcmVudC0+cm9vdExheWVyKCk7CisgICAg
cmV0dXJuIHRoaXM7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmludmFsaWRhdGVUcmFu
c2Zvcm0oKQoreworICAgIG1fdHJhbnNmb3Jtcy5kaXJ0eSA9IHRydWU7CisgICAgaWYgKG1fbGF5
ZXJUeXBlICE9IENsaXBMYXllcikKKyAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IHRydWU7CisgICAg
aWYgKG1fc3RhdGUucmVwbGljYUxheWVyKQorICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+
aW52YWxpZGF0ZVRyYW5zZm9ybSgpOworICAgIGNvbnN0IGludCBzaXplID0gbV9jaGlsZHJlbi5z
aXplKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgaWYg
KFRleHR1cmVNYXBwZXJOb2RlKiBsYXllciA9IG1fY2hpbGRyZW5baV0pCisgICAgICAgICAgICBs
YXllci0+aW52YWxpZGF0ZVRyYW5zZm9ybSgpOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlTWFw
cGVyTm9kZTo6Y29tcHV0ZUxvY2FsVHJhbnNmb3JtKCkKK3sKKyAgICBpZiAoIW1fdHJhbnNmb3Jt
cy5sb2NhbERpcnR5KQorICAgICAgICByZXR1cm47CisgICAgY29uc3QgZmxvYXQgb3JpZ2luWCA9
IG1fc3RhdGUuYW5jaG9yUG9pbnQueCgpICogbV9zaXplLndpZHRoKCk7CisgICAgY29uc3QgZmxv
YXQgb3JpZ2luWSA9IG1fc3RhdGUuYW5jaG9yUG9pbnQueSgpICogbV9zaXplLmhlaWdodCgpOwor
ICAgIG1fdHJhbnNmb3Jtcy5sb2NhbCA9CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KCkK
KyAgICAgICAgLnRyYW5zbGF0ZTNkKG9yaWdpblggKyBtX3N0YXRlLnBvcy54KCksIG9yaWdpblkg
KyBtX3N0YXRlLnBvcy55KCksIG1fc3RhdGUuYW5jaG9yUG9pbnQueigpKQorICAgICAgICAubXVs
dExlZnQobV9zdGF0ZS50cmFuc2Zvcm0pCisgICAgICAgIC50cmFuc2xhdGUzZCgtb3JpZ2luWCwg
LW9yaWdpblksIC1tX3N0YXRlLmFuY2hvclBvaW50LnooKSk7CisgICAgbV90cmFuc2Zvcm1zLmxv
Y2FsRGlydHkgPSBmYWxzZTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6ZmxhdHRlblRv
MkRTcGFjZUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAobV9zdGF0ZS5wcmVzZXJ2ZXMzRCkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNMTMoMCk7
CisgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE0yMygwKTsKKyAgICBtX3RyYW5z
Zm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTMxKDApOworICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNj
ZW5kYW50cy5zZXRNMzIoMCk7CisgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE0z
MygxKTsKKyAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTM0KDApOworICAgIG1f
dHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNNDMoMCk7Cit9CisKK0ludFNpemUgVGV4dHVy
ZU1hcHBlck5vZGU6Om5lYXJlc3RTdXJmYWNlU2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fbGF5
ZXJUeXBlID09IENsaXBMYXllciB8fCBtX2xheWVyVHlwZSA9PSBSb290TGF5ZXIpCisgICAgICAg
IHJldHVybiBtX3N1cmZhY2UgJiYgIW1fc3VyZmFjZS0+c2l6ZSgpLmlzRW1wdHkoKSA/IG1fc3Vy
ZmFjZS0+c2l6ZSgpIDogbV9zaXplOworICAgIHJldHVybiBtX3BhcmVudC0+bmVhcmVzdFN1cmZh
Y2VTaXplKCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVSZXBsaWNhVHJh
bnNmb3JtKCkKK3sKKyAgICBpZiAoIW1fc3RhdGUucmVwbGljYUxheWVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX25lYXJlc3RTdXJmYWNlU2l6ZSA9IG5lYXJlc3RTdXJmYWNlU2l6ZSgpOwor
CisgICAgaWYgKG1fbGF5ZXJUeXBlICE9IFRyYW5zcGFyZW5jeUxheWVyKSB7CisgICAgICAgIG1f
dHJhbnNmb3Jtcy5yZXBsaWNhID0gVHJhbnNmb3JtYXRpb25NYXRyaXgobV90cmFuc2Zvcm1zLnRh
cmdldCkubXVsdExlZnQobV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fdHJhbnNmb3Jtcy5sb2NhbCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBmbG9hdCBvcmlnaW5YID0gbV90
cmFuc2Zvcm1zLnRhcmdldC5tNDEoKTsKKyAgICBjb25zdCBmbG9hdCBvcmlnaW5ZID0gbV90cmFu
c2Zvcm1zLnRhcmdldC5tNDIoKTsKKyAgICBtX3RyYW5zZm9ybXMucmVwbGljYSA9CisgICAgICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpCisgICAgICAgICAgICAgICAgLnRyYW5zbGF0ZShv
cmlnaW5YLCBvcmlnaW5ZKQorICAgICAgICAgICAgICAgIC5tdWx0TGVmdChtX3N0YXRlLnJlcGxp
Y2FMYXllci0+bV90cmFuc2Zvcm1zLmxvY2FsKQorICAgICAgICAgICAgICAgIC50cmFuc2xhdGUo
LW9yaWdpblgsIC1vcmlnaW5ZKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0
ZVRyYW5zZm9ybWF0aW9ucygpCit7CisgICAgaWYgKCFtX3RyYW5zZm9ybXMuZGlydHkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fdHJhbnNmb3Jtcy5kaXJ0eSA9IGZhbHNlOworICAgIGlmICgo
bV9zaXplLmlzRW1wdHkoKSAmJiBtX3N0YXRlLm1hc2tzVG9Cb3VuZHMpKQorICAgICAgICByZXR1
cm47CisKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogcGFyZW50ID0gbV9wYXJlbnQ7CisgICAgY29t
cHV0ZUxvY2FsVHJhbnNmb3JtKCk7CisKKyAgICBtX3RyYW5zZm9ybXMudGFyZ2V0ID0gVHJhbnNm
b3JtYXRpb25NYXRyaXgocGFyZW50ID8gcGFyZW50LT5tX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFu
dHMgOiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKS5tdWx0TGVmdChtX3RyYW5zZm9ybXMubG9jYWwp
OworICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cyA9IChtX2xheWVyVHlwZSA9PSBDbGlw
TGF5ZXIgPyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpIDogbV90cmFuc2Zvcm1zLnRhcmdldCk7CisK
KyAgICBpZiAobV9lZmZlY3RUYXJnZXQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdHJhbnNm
b3Jtcy50YXJnZXRCb3VuZGluZ1JlY3QgPSBJbnRSZWN0KG1fdHJhbnNmb3Jtcy50YXJnZXQubWFw
UmVjdChmdWxsUmVjdCgpKSk7CisgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyKQorICAgICAg
ICBtX3N0YXRlLnJlcGxpY2FMYXllci0+Y29tcHV0ZVRyYW5zZm9ybWF0aW9ucygpOworCisgICAg
ZmxhdHRlblRvMkRTcGFjZUlmTmVjZXNzYXJ5KCk7CisKKyAgICBpZiAoIW1fc3RhdGUuYmFja2Zh
Y2VWaXNpYmlsaXR5ICYmIG1fdHJhbnNmb3Jtcy50YXJnZXQuaW52ZXJzZSgpLm0zMygpIDwgMCkg
eworICAgICAgICBtX3N0YXRlLnZpc2libGUgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBtX3N0YXRlLnZpc2libGUgPSB0cnVlOworCisgICAgaWYgKHBhcmVudCAmJiBwYXJl
bnQtPm1fc3RhdGUucHJlc2VydmVzM0QpCisgICAgICAgIG1fdHJhbnNmb3Jtcy5jZW50ZXJaID0g
bV90cmFuc2Zvcm1zLnRhcmdldC5tYXBQb2ludChGbG9hdFBvaW50M0QobV9zaXplLndpZHRoKCkg
LyAyLCBtX3NpemUuaGVpZ2h0KCkgLyAyLCAwKSkueigpOworCisgICAgaWYgKCFtX2NoaWxkcmVu
LnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc3RhdGUuY2hpbGRyZW5UcmFu
c2Zvcm0uaXNJZGVudGl0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBGbG9hdFBv
aW50IGNlbnRlclBvaW50ID0gRmxvYXRQb2ludChtX3NpemUud2lkdGgoKSAvIDIsIG1fc2l6ZS5o
ZWlnaHQoKSAvIDIpOworICAgIGlmIChtX3RyYW5zZm9ybXMucGVyc3BlY3RpdmVEaXJ0eSkKKyAg
ICAgICAgbV90cmFuc2Zvcm1zLnBlcnNwZWN0aXZlID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKQor
ICAgICAgICAgICAgLnRyYW5zbGF0ZShjZW50ZXJQb2ludC54KCksIGNlbnRlclBvaW50LnkoKSkK
KyAgICAgICAgICAgIC5tdWx0TGVmdChtX3N0YXRlLmNoaWxkcmVuVHJhbnNmb3JtKQorICAgICAg
ICAgICAgLnRyYW5zbGF0ZSgtY2VudGVyUG9pbnQueCgpLCAtY2VudGVyUG9pbnQueSgpKTsKKyAg
ICBtX3RyYW5zZm9ybXMucGVyc3BlY3RpdmVEaXJ0eSA9IGZhbHNlOworICAgIG1fdHJhbnNmb3Jt
cy5mb3JEZXNjZW5kYW50cy5tdWx0TGVmdChtX3RyYW5zZm9ybXMucGVyc3BlY3RpdmUpOworfQor
Cit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjp1cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQoVGV4dHVy
ZU1hcHBlciogdGV4dHVyZU1hcHBlcikKK3sKKyAgICAvLyBuZWVkcyBhY3RpdmUgY29udGV4dAor
ICAgIGlmIChtX3NpemUuaXNFbXB0eSgpIHx8ICFtX2xheWVyKSB7CisgICAgICAgIG1fdGV4dHVy
ZS0+ZGVzdHJveSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fY3VycmVu
dENvbnRlbnQuY29udGVudFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSkgeworICAgICAg
ICBpZiAobV9jdXJyZW50Q29udGVudC5pbWFnZSkKKyAgICAgICAgICAgIG1fdGV4dHVyZS0+c2V0
Q29udGVudHNUb0ltYWdlKG1fY3VycmVudENvbnRlbnQuaW1hZ2UuZ2V0KCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0g
TWVkaWFDb250ZW50VHlwZSkgeworICAgICAgICBpZiAoIW1fY3VycmVudENvbnRlbnQubWVkaWEp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fdGV4dHVyZS0+cmVzZXQobV9zaXplLCB0
cnVlKTsKKyAgICAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCA9
IG1fdGV4dHVyZS0+YmVnaW5QYWludE1lZGlhKCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCBj
b250ZXh0KHBsYXRmb3JtQ29udGV4dCk7CisgICAgICAgIG1fY3VycmVudENvbnRlbnQubWVkaWEt
PnBhaW50KCZjb250ZXh0KTsKKyAgICAgICAgbV90ZXh0dXJlLT5lbmRQYWludCgpOworICAgIH0K
KworICAgIGNvbnN0IGJvb2wgbmVlZHNSZXNldCA9IChtX3RleHR1cmUtPmNvbnRlbnRTaXplKCkg
IT0gbV9zaXplKSB8fCAhbV90ZXh0dXJlLT5pc1ZhbGlkKCk7CisgICAgaWYgKChtX2N1cnJlbnRD
b250ZW50LmNvbnRlbnRUeXBlICE9IEhUTUxDb250ZW50VHlwZSkKKyAgICAgICAgfHwgKCFtX2N1
cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSAmJiBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxh
eVJlY3QuaXNFbXB0eSgpICYmICFuZWVkc1Jlc2V0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
V1RGOjpTdG9wV2F0Y2ggc3RvcFdhdGNoOworICAgIEludFJlY3QgZGlydHlSZWN0ID0gSW50UmVj
dCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICBpZiAoIW5lZWRz
UmVzZXQgJiYgIW1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5KQorICAgICAgICBkaXJ0eVJl
Y3QuaW50ZXJzZWN0KG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCk7CisgICAgaWYg
KG5lZWRzUmVzZXQpCisgICAgICAgIG1fdGV4dHVyZS0+cmVzZXQobV9zaXplLCBtX3N0YXRlLmNv
bnRlbnRzT3BhcXVlKTsKKworICAgIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQo
bV90ZXh0dXJlLT5iZWdpblBhaW50KGRpcnR5UmVjdCkpOworICAgICAgICBpZiAodGV4dHVyZU1h
cHBlciAmJiB0ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQoKSkgeworICAgICAgICAgICAg
R3JhcGhpY3NDb250ZXh0KiBvcmlnaW5hbENvbnRleHQgPSB0ZXh0dXJlTWFwcGVyLT5ncmFwaGlj
c0NvbnRleHQoKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eShvcmlnaW5hbENvbnRleHQtPmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAg
ICAgICAgICBjb250ZXh0LnNldFRleHREcmF3aW5nTW9kZShvcmlnaW5hbENvbnRleHQtPnRleHRE
cmF3aW5nTW9kZSgpKTsKKyAgICAgICAgfQorICAgICAgICBtX2xheWVyLT5wYWludEdyYXBoaWNz
TGF5ZXJDb250ZW50cyhjb250ZXh0LCBkaXJ0eVJlY3QpOworICAgIH0KKyAgICBtX3RleHR1cmUt
PmVuZFBhaW50KCk7CisgICAgeworI2lmIDAKKyAgICAgICAgTE9HKCJbVGV4dHVyZU1hcHBlcl0g
UmUtcmVuZGVyKCVkKSBsYXllciglcCkgJWQ6OiVkOjolZCAoJWR4JWQpIFslZG1zXVxuIiwgKyty
ZW5kZXJDb3VudCwgdGhpcywKKyAgICAgICAgICAgICAgIG5lZWRzUmVzZXQsIG1fY3VycmVudENv
bnRlbnQubmVlZHNEaXNwbGF5LCAhbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0Lmlz
RW1wdHkoKSwKKyAgICAgICAgICAgICAgIGRpcnR5UmVjdC53aWR0aCgpLCBkaXJ0eVJlY3QuaGVp
Z2h0KCksIGludChzdG9wV2F0Y2guZWxhcHNlZCgpICogMTAwMCkpOworICAgICAgICBzdGF0aWMg
aW50IHJlbmRlckNvdW50ID0gMDsKKyAgICAgICAgbV90ZXh0dXJlLT5zYXZlKFN0cmluZygpLmZv
cm1hdCgiL3RtcC9sYXllcl8lZC5wbmciLCByZW5kZXJDb3VudCkpOworI2VuZGlmCisgICAgfQor
CisgICAgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0ID0gSW50UmVjdCgpOworICAg
IG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5ID0gZmFsc2U7Cit9CisKK3ZvaWQgVGV4dHVy
ZU1hcHBlck5vZGU6OnBhaW50U2VsZihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBmbG9h
dCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgQml0bWFwVGV4dHVyZSogcmVw
bGljYU1hc2tUZXh0dXJlLCBib29sIGlzU3VyZmFjZSkKK3sKKyAgICAvLyBuZWVkcyBhY3RpdmUg
Y29udGV4dAorICAgIGlmICghbV9sYXllciB8fCBtX3NpemUuaXNFbXB0eSgpIHx8ICghbV9zdGF0
ZS5kcmF3c0NvbnRlbnQgJiYgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29u
dGVudFR5cGUpKQorICAgICAgICByZXR1cm47CisgICAgdXBsb2FkVGV4dHVyZUZyb21Db250ZW50
KHRleHR1cmVNYXBwZXIpOworICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllciAmJiAhaXNTdXJm
YWNlKQorICAgICAgICB0ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqbV90ZXh0dXJlLmdldCgp
LCByZXBsaWNhUmVjdCgpLCBtX3RyYW5zZm9ybXMucmVwbGljYSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBvcGFjaXR5ICogbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUub3BhY2l0eSwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGljYU1hc2tUZXh0dXJlID8gcmVwbGljYU1h
c2tUZXh0dXJlIDogbWFza1RleHR1cmUpOworCisKKyAgICBjb25zdCBJbnRSZWN0IHJlY3QgPSBt
X2xheWVyVHlwZSA9PSBDbGlwTGF5ZXIgPyBmdWxsUmVjdCgpIDogdGFyZ2V0UmVjdCgpOworICAg
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IG1fbGF5ZXJUeXBlID09IENs
aXBMYXllciA/IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkgOiBtX3RyYW5zZm9ybXMudGFyZ2V0Owor
ICAgIHRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCptX3RleHR1cmUuZ2V0KCksIHJlY3QsIHRy
YW5zZm9ybSwgb3BhY2l0eSwgaXNTdXJmYWNlID8gMCA6IG1hc2tUZXh0dXJlKTsKK30KKwordm9p
ZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRSZWN1cnNpdmUoVGV4bWFwUGFpbnRPcHRpb25zIG9w
dGlvbnMpCit7CisgICAgLy8gbmVlZHMgYWN0aXZlIGNvbnRleHQKKworICAgIFdURjo6U3RvcFdh
dGNoIHN0b3BXYXRjaDsKKworICAgIGJvb2wgaXNEaXJ0eSA9IG1fc3RhdGUuZGlydHk7CisgICAg
bV9zdGF0ZS5kaXJ0eSA9IGZhbHNlOworCisgICAgaWYgKChtX3NpemUuaXNFbXB0eSgpICYmICht
X3N0YXRlLm1hc2tzVG9Cb3VuZHMKKyAgICAgICAgfHwgbV9jaGlsZHJlbi5pc0VtcHR5KCkpKSB8
fCAhbV9zdGF0ZS52aXNpYmxlIHx8IG9wdGlvbnMub3BhY2l0eSA8IDAuMDEgfHwgbV9zdGF0ZS5v
cGFjaXR5IDwgMC4wMSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW5pdGlhbGl6ZVRleHR1cmVN
YXBwZXIob3B0aW9ucy50ZXh0dXJlTWFwcGVyKTsKKyAgICBjb21wdXRlUmVwbGljYVRyYW5zZm9y
bSgpOworCisgICAgaWYgKG1fc3RhdGUubWFza0xheWVyKSB7CisgICAgICAgIG1fc3RhdGUubWFz
a0xheWVyLT5pbml0aWFsaXplVGV4dHVyZU1hcHBlcihvcHRpb25zLnRleHR1cmVNYXBwZXIpOwor
ICAgICAgICBtX3N0YXRlLm1hc2tMYXllci0+bV9zdGF0ZS5kaXJ0eSA9IGZhbHNlOworICAgIH0K
KworICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllcikgeworICAgICAgICBtX3N0YXRlLnJlcGxp
Y2FMYXllci0+aW5pdGlhbGl6ZVRleHR1cmVNYXBwZXIob3B0aW9ucy50ZXh0dXJlTWFwcGVyKTsK
KyAgICAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUuZGlydHkgPSBmYWxzZTsKKyAg
ICAgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRlLm1hc2tMYXllcikgeworICAg
ICAgICAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUubWFza0xheWVyLT5pbml0aWFs
aXplVGV4dHVyZU1hcHBlcihvcHRpb25zLnRleHR1cmVNYXBwZXIpOworICAgICAgICAgICAgbV9z
dGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUubWFza0xheWVyLT5tX3N0YXRlLmRpcnR5ID0gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogcmVwbGljYSA9
IG1fc3RhdGUucmVwbGljYUxheWVyOworICAgIGNvbnN0IGJvb2wgaXNTdXJmYWNlID0gKG1fbGF5
ZXJUeXBlID09IENsaXBMYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fbGF5
ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fHwgKG1fbGF5ZXJUeXBlID09IFJvb3RMYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiAob3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5hbGxvd1N1cmZhY2VGb3JSb290KCkgfHwg
bV9zdGF0ZS5oYXNTdXJmYWNlRGVzY2VuZGFudHMpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICkpOworICAgIGlmIChpc1N1cmZhY2UpCisgICAgICAgIHVwbG9hZFRleHR1cmVGcm9t
Q29udGVudChvcHRpb25zLnRleHR1cmVNYXBwZXIpOworICAgIGNvbnN0IEludFJlY3QgYm91bmRp
bmdSZWN0ZnJvbU5lYXJlc3RTdXJmYWNlID0gbV90cmFuc2Zvcm1zLnRhcmdldEJvdW5kaW5nUmVj
dDsKKworCisgICAgb3B0aW9ucy5vcGFjaXR5ICo9IG1fc3RhdGUub3BhY2l0eTsKKworICAgIGZs
b2F0IGNvbnRlbnRPcGFjaXR5ID0gaXNTdXJmYWNlID8gMSA6IG9wdGlvbnMub3BhY2l0eTsKKyAg
ICBUZXhtYXBQYWludE9wdGlvbnMgb3B0aW9uc0ZvckRlc2NlbmRhbnRzKG9wdGlvbnMpOworICAg
IG9wdGlvbnNGb3JEZXNjZW5kYW50cy5vcGFjaXR5ID0gY29udGVudE9wYWNpdHk7CisKKyAgICBp
ZiAobV9sYXllclR5cGUgPT0gQ2xpcExheWVyKSB7CisgICAgICAgIG9wdGlvbnNGb3JEZXNjZW5k
YW50cy52aXNpYmxlUmVjdCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkudHJhbnNsYXRlKC1ib3Vu
ZGluZ1JlY3Rmcm9tTmVhcmVzdFN1cmZhY2UueCgpLCAtYm91bmRpbmdSZWN0ZnJvbU5lYXJlc3RT
dXJmYWNlLnkoKSkubWFwUmVjdChvcHRpb25zLnZpc2libGVSZWN0KTsKKyAgICAgICAgb3B0aW9u
c0ZvckRlc2NlbmRhbnRzLnNjaXNzb3JSZWN0ID0gSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgo
KSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICB9CisKKyAgICBpZiAobV9sYXllclR5cGUgPT0gU2Np
c3NvckxheWVyKSAKKyAgICAgICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLnNjaXNzb3JSZWN0Lmlu
dGVyc2VjdChtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0KTsKKyAgICBvcHRpb25zLnRl
eHR1cmVNYXBwZXItPnNldENsaXAob3B0aW9uc0ZvckRlc2NlbmRhbnRzLnNjaXNzb3JSZWN0KTsK
KworICAgIFRleHR1cmVNYXBwZXJDYWNoZUxvY2sobV90ZXh0dXJlLmdldCgpKTsKKyAgICBUZXh0
dXJlTWFwcGVyQ2FjaGVMb2NrKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgVGV4dHVyZU1hcHBlckNh
Y2hlTG9jayhtX3JlcGxpY2FTdXJmYWNlLmdldCgpKTsKKworICAgIGdUZXh0dXJlTWFwcGVyQ2Fj
aGUucHVyZ2UoKTsKKworICAgIGlmIChpc1N1cmZhY2UpIHsKKyAgICAgICAgQVNTRVJUKG1fc3Vy
ZmFjZSk7CisgICAgICAgIGlmICghbV9zdXJmYWNlLT5pc1ZhbGlkKCkpCisgICAgICAgICAgICBp
c0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1fc3RhdGUudGlsZWQpIHsKKyAgICAgICAgICAg
IG1fc3VyZmFjZS0+cmVzZXQob3B0aW9ucy52aXNpYmxlUmVjdC5zaXplKCkpOworICAgICAgICAg
ICAgbV9zdXJmYWNlLT5zZXRPZmZzZXQob3B0aW9ucy52aXNpYmxlUmVjdC5sb2NhdGlvbigpKTsK
KyAgICAgICAgfSBlbHNlIGlmIChpc0RpcnR5KQorICAgICAgICAgICAgbV9zdXJmYWNlLT5yZXNl
dChtX2xheWVyVHlwZSA9PSBUcmFuc3BhcmVuY3lMYXllciA/IG9wdGlvbnMuc3VyZmFjZS0+c2l6
ZSgpIDogbV9zaXplKTsKKyAgICAgICAgZ1RleHR1cmVNYXBwZXJDYWNoZS5tYXJrKG1fc3VyZmFj
ZS5nZXQoKSk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UobV9z
dXJmYWNlLmdldCgpKTsKKworICAgICAgICBvcHRpb25zRm9yRGVzY2VuZGFudHMuc3VyZmFjZSA9
IG1fc3VyZmFjZS5nZXQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9zdXJmYWNlKQor
ICAgICAgICAgICAgbV9zdXJmYWNlLT5kZXN0cm95KCk7CisgICAgICAgIGNvbnRlbnRPcGFjaXR5
ID0gb3B0aW9ucy5vcGFjaXR5OworICAgIH0KKworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBt
YXNrVGV4dHVyZTsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gcmVwbGljYU1hc2tUZXh0dXJl
OworICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSogbWFzayA9IG1fc3RhdGUubWFza0xheWVyKSB7
CisgICAgICAgIG1hc2stPnVwbG9hZFRleHR1cmVGcm9tQ29udGVudChvcHRpb25zLnRleHR1cmVN
YXBwZXIpOworICAgICAgICBtYXNrVGV4dHVyZSA9IG1hc2stPm1fdGV4dHVyZTsKKyAgICB9CisK
KyAgICBpZiAocmVwbGljYSAmJiByZXBsaWNhLT5tX3N0YXRlLm1hc2tMYXllcikgeworICAgICAg
ICByZXBsaWNhLT5tX3N0YXRlLm1hc2tMYXllci0+dXBsb2FkVGV4dHVyZUZyb21Db250ZW50KG9w
dGlvbnMudGV4dHVyZU1hcHBlcik7CisgICAgICAgIHJlcGxpY2FNYXNrVGV4dHVyZSA9IHJlcGxp
Y2EtPm1fc3RhdGUubWFza0xheWVyLT5tX3RleHR1cmU7CisgICAgfQorCisgICAgaW50IGNoaWxk
cmVuU2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOworICAgIGlmIChpc0RpcnR5IHx8ICFpc1N1cmZh
Y2UgfHwgbV9zdGF0ZS50aWxlZCB8fCAhbV9zdXJmYWNlLT5pc1ZhbGlkKCkpIHsKKyAgICAgICAg
Ym9vbCBkaWRQYWludFNlbGYgPSBmYWxzZTsKKyAgICAgICAgaWYgKCFtX3N0YXRlLnByZXNlcnZl
czNEIHx8IG1fY2hpbGRyZW4uaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBwYWludFNlbGYob3B0
aW9ucy50ZXh0dXJlTWFwcGVyLCBjb250ZW50T3BhY2l0eSwgbWFza1RleHR1cmUuZ2V0KCksIHJl
cGxpY2FNYXNrVGV4dHVyZS5nZXQoKSwgaXNTdXJmYWNlKTsKKyAgICAgICAgICAgIGRpZFBhaW50
U2VsZiA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9jaGlsZHJlbi5pc0VtcHR5
KCkgJiYgIWlzU3VyZmFjZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAobV9s
YXllclR5cGUgPT0gU2Npc3NvckxheWVyKQorICAgICAgICAgICAgb3B0aW9uc0ZvckRlc2NlbmRh
bnRzLnNjaXNzb3JSZWN0LmludGVyc2VjdChtX3RyYW5zZm9ybXMudGFyZ2V0Lm1hcFJlY3QoSW50
UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSkpOworCisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW5TaXplOyArK2kpIHsKKyAgICAgICAgICAgIFRl
eHR1cmVNYXBwZXJOb2RlKiBsYXllciA9IG1fY2hpbGRyZW5baV07CisgICAgICAgICAgICBpZiAo
IWxheWVyKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoIWRp
ZFBhaW50U2VsZiAmJiBsYXllci0+bV90cmFuc2Zvcm1zLmNlbnRlclogPj0gMCkgeworICAgICAg
ICAgICAgICAgIHBhaW50U2VsZihvcHRpb25zLnRleHR1cmVNYXBwZXIsIGNvbnRlbnRPcGFjaXR5
LCBtYXNrVGV4dHVyZS5nZXQoKSwgcmVwbGljYU1hc2tUZXh0dXJlLmdldCgpLCBpc1N1cmZhY2Up
OworICAgICAgICAgICAgICAgIGRpZFBhaW50U2VsZiA9IHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBsYXllci0+cGFpbnRSZWN1cnNpdmUob3B0aW9uc0ZvckRlc2NlbmRhbnRzKTsK
KyAgICAgICAgICAgIGlmIChpc1N1cmZhY2UpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9z
dXJmYWNlKTsKKyAgICAgICAgICAgICAgICBnVGV4dHVyZU1hcHBlckNhY2hlLm1hcmsobV9zdXJm
YWNlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRT
dXJmYWNlKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFkaWRQYWludFNlbGYpIHsKKyAgICAgICAgICAgIHBhaW50U2VsZihvcHRpb25zLnRl
eHR1cmVNYXBwZXIsIGNvbnRlbnRPcGFjaXR5LCBtYXNrVGV4dHVyZS5nZXQoKSwgcmVwbGljYU1h
c2tUZXh0dXJlLmdldCgpLCBpc1N1cmZhY2UpOworICAgICAgICAgICAgZGlkUGFpbnRTZWxmID0g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX2xheWVyVHlwZSA9PSBSb290TGF5
ZXIgfHwgbV9sYXllclR5cGUgPT0gRGVmYXVsdExheWVyIHx8IG1fbGF5ZXJUeXBlID09IFNjaXNz
b3JMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fc3VyZmFjZSk7CisgICAg
Qml0bWFwVGV4dHVyZSYgdGV4dHVyZSA9ICptX3N1cmZhY2UuZ2V0KCk7CisgICAgaWYgKHJlcGxp
Y2EpIHsKKyAgICAgICAgQVNTRVJUKG1fcmVwbGljYVN1cmZhY2UpOworICAgICAgICBtX3JlcGxp
Y2FTdXJmYWNlLT5yZXNldChvcHRpb25zLnN1cmZhY2UtPnNpemUoKSk7CisgICAgICAgIG1fcmVw
bGljYVN1cmZhY2UtPnNldE9mZnNldChvcHRpb25zLnN1cmZhY2UtPm9mZnNldCgpKTsKKyAgICAg
ICAgZ1RleHR1cmVNYXBwZXJDYWNoZS5tYXJrKG1fcmVwbGljYVN1cmZhY2UuZ2V0KCkpOworICAg
ICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKG1fcmVwbGljYVN1cmZhY2Uu
Z2V0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKHRleHR1
cmUsIHJlcGxpY2FSZWN0KCksIG1fdHJhbnNmb3Jtcy5yZXBsaWNhLCByZXBsaWNhLT5tX3N0YXRl
Lm9wYWNpdHksIHJlcGxpY2FNYXNrVGV4dHVyZSA/IHJlcGxpY2FNYXNrVGV4dHVyZS5nZXQoKSA6
IG1hc2tUZXh0dXJlLmdldCgpKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3
VGV4dHVyZSh0ZXh0dXJlLCBJbnRSZWN0KEludFBvaW50KDAsIDApLCBvcHRpb25zLnN1cmZhY2Ut
PnNpemUoKSksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIDEuMGYsIG1hc2tUZXh0dXJlLmdldCgp
KTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShvcHRpb25zLnN1
cmZhY2UpOworICAgICAgICBnVGV4dHVyZU1hcHBlckNhY2hlLm1hcmsob3B0aW9ucy5zdXJmYWNl
KTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqbV9yZXBsaWNh
U3VyZmFjZS5nZXQoKSwgSW50UmVjdChJbnRQb2ludCgwLCAwKSwgb3B0aW9ucy5zdXJmYWNlLT5z
aXplKCkpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBvcHRpb25zLm9wYWNpdHksIDApOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3Vy
ZmFjZShvcHRpb25zLnN1cmZhY2UpOworICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1Rl
eHR1cmUodGV4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9sYXllclR5cGUg
PT0gVHJhbnNwYXJlbmN5TGF5ZXIgPyBJbnRSZWN0KEludFBvaW50KDAsIDApLCBvcHRpb25zLnN1
cmZhY2UtPnNpemUoKSkgOiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0UmVj
dCgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9sYXllclR5cGUgPT0gVHJhbnNw
YXJlbmN5TGF5ZXIgPyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpIDogbV90cmFuc2Zvcm1zLnRhcmdl
dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub3BhY2l0eSwgbWFza1Rl
eHR1cmUuZ2V0KCkpOworICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUubWFyaygmdGV4dHVyZSk7Cit9
CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNsZWFudXBUZXh0dXJlTWFwcGVyKCkKK3sKKyAg
ICBpZiAobV90ZXh0dXJlKQorICAgICAgICBtX3RleHR1cmUtPmRlc3Ryb3koKTsKKyAgICBpZiAo
bV9zdXJmYWNlKQorICAgICAgICBtX3N1cmZhY2UtPmRlc3Ryb3koKTsKKyAgICBpZiAobV9yZXBs
aWNhU3VyZmFjZSkKKyAgICAgICAgbV9yZXBsaWNhU3VyZmFjZS0+ZGVzdHJveSgpOworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
bV9jaGlsZHJlbltpXSkKKyAgICAgICAgICAgIG1fY2hpbGRyZW5baV0tPmNsZWFudXBUZXh0dXJl
TWFwcGVyKCk7CisgICAgfQorICAgIGlmIChtX2xhc3RUZXh0dXJlTWFwcGVyKQorICAgICAgICBt
X2xhc3RUZXh0dXJlTWFwcGVyLT5jbGVhbnVwKCk7Cit9CisKK1RleHR1cmVNYXBwZXJOb2RlOjp+
VGV4dHVyZU1hcHBlck5vZGUoKQoreworICAgIC8vIG5lZWRzIGFjdGl2ZSBjb250ZXh0CisgICAg
Ly8gc3luY0NvbXBvc2l0aW5nU3RhdGUodHJ1ZSk7CisgICAgc2V0TmVlZHNEaXNwbGF5KCk7Cisg
ICAgeworICAgICAgICBjb25zdCBpbnQgY2hpbGRyZW5TaXplID0gbV9jaGlsZHJlbi5zaXplKCk7
CisgICAgICAgIGZvciAoaW50IGkgPSBjaGlsZHJlblNpemUtMTsgaSA+PSAwOyAtLWkpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChtX2NoaWxkcmVuW2ldLT5tX3BhcmVudCA9PSB0aGlzKTsKKyAgICAg
ICAgICAgIG1fY2hpbGRyZW5baV0tPm1fcGFyZW50ID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBpZiAobV9wYXJlbnQpCisgICAgICAgIG1fcGFyZW50LT5tX2NoaWxkcmVuLnJlbW92ZShtX3Bh
cmVudC0+bV9jaGlsZHJlbi5maW5kKHRoaXMpKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9k
ZTo6bm90aWZ5Q2hhbmdlKENoYW5nZU1hc2sgY2hhbmdlTWFzaykKK3sKKyAgICBtX2NoYW5nZU1h
c2sgfD0gY2hhbmdlTWFzazsKKyAgICBpZiAoIW1fbGF5ZXItPmNsaWVudCgpKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9sYXllci0+Y2xpZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZChtX2xheWVy
KTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGVyZm9ybVBvc3RTeW5jT3BlcmF0aW9u
cygpCit7CisgICAgY29uc3QgTGF5ZXJUeXBlIHByZXZMYXllclR5cGUgPSBtX2xheWVyVHlwZTsK
KyAgICBjb21wdXRlTGF5ZXJUeXBlKCk7CisgICAgaWYgKHByZXZMYXllclR5cGUgIT0gbV9sYXll
clR5cGUpCisgICAgICAgIG1fc3RhdGUuZGlydHkgPSB0cnVlOworICAgIGlmIChtX3RyYW5zZm9y
bXMuZGlydHkpIAorICAgICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKworICAgIGNvbXB1dGVUcmFu
c2Zvcm1hdGlvbnMoKTsKKyAgICBpZiAobV9zdGF0ZS5tYXNrTGF5ZXIgJiYgIW1fc3RhdGUuZGly
dHkpCisgICAgICAgIG1fc3RhdGUuZGlydHkgPSBtX3N0YXRlLm1hc2tMYXllci0+bV9zdGF0ZS5k
aXJ0eTsKKyAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIgJiYgIW1fc3RhdGUuZGlydHkpCisg
ICAgICAgIG1fc3RhdGUuZGlydHkgPSBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5kaXJ0
eTsKKworICAgIGNvbnN0IGludCBzaXplID0gbV9jaGlsZHJlbi5zaXplKCk7CisKKyAgICBmb3Ig
KGludCBpID0gc2l6ZSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIFRleHR1cmVNYXBwZXJO
b2RlKiBsYXllciA9IG1fY2hpbGRyZW5baV07CisKKyAgICAgICAgbGF5ZXItPnBlcmZvcm1Qb3N0
U3luY09wZXJhdGlvbnMoKTsKKyAgICAgICAgaWYgKCFtX3N0YXRlLmRpcnR5KQorICAgICAgICAg
ICAgbV9zdGF0ZS5kaXJ0eSA9IGxheWVyLT5tX3N0YXRlLmRpcnR5OworICAgIH0KKyAgICBtX3N0
YXRlLmhhc1N1cmZhY2VEZXNjZW5kYW50cyA9IGhhc1N1cmZhY2VEZXNjZW5kYW50cygpOworICAg
IGlmIChtX3N0YXRlLmRpcnR5KQorICAgICAgICBtX3N0YXRlLmRlc2NlbmRhbnRzV2l0aENvbnRl
bnQgPSBjb3VudERlc2NlbmRhbnRzV2l0aENvbnRlbnQoKTsKKworICAgIGlmIChtX3N0YXRlLnBy
ZXNlcnZlczNEKQorICAgICAgICBzb3J0QnlaT3JkZXIobV9jaGlsZHJlbiwgMCwgc2l6ZSk7Cisg
ICAgaWYgKG1fc3RhdGUuZGlydHkpIAorICAgICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKK30KKwor
dm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUoYm9vbCByZWN1cnNl
KQoreworICAgIGJvb2wgbmVlZHNUb0ludmFsaWRhdGVUcmFuc2Zvcm0gPSBmYWxzZTsKKworICAg
IGlmICghbV9sYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY2hhbmdlTWFzayA9
PSBOb0NoYW5nZXMpCisgICAgICAgIGdvdG8gYWZ0ZXJDdXJyZW50TGF5ZXJTeW5jOworCisgICAg
c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgaWYgKG1fcGFyZW50KQorICAgICAgICBtX3BhcmVudC0+
bV9zdGF0ZS5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50
VHlwZSA9PSBIVE1MQ29udGVudFR5cGUgJiYgKG1fY2hhbmdlTWFzayAmIFBhcmVudENoYW5nZSkp
IHsKKyAgICAgICAgLy8gVGhlIFdlYkNvcmUgY29tcG9zaXRvciBtYW5hZ2VzIGl0ZW0gb3duZXJz
aGlwLiBXZSBoYXZlIHRvIG1ha2Ugc3VyZSBncmFwaGljc3ZpZXcgZG9lc24ndAorICAgICAgICAv
LyB0cnkgdG8gc25hdGNoIHRoYXQgb3duZXJzaGlwLgorCisgICAgICAgIGlmICghbV9sYXllci0+
cGFyZW50KCkpCisgICAgICAgICAgICBtX3BhcmVudCA9IDA7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1fcGFyZW50ID0gdG9UZXh0dXJlTWFwcGVyTm9kZShtX2xheWVyLT5wYXJlbnQoKSk7
CisKKyAgICAgICAgaWYgKCFtX2xheWVyLT5wYXJlbnQoKSAmJiBtX3BhcmVudCkgeworICAgICAg
ICAgICAgc2l6ZV90IGluZGV4ID0gbV9wYXJlbnQtPm1fY2hpbGRyZW4uZmluZCh0aGlzKTsKKyAg
ICAgICAgICAgIG1fcGFyZW50LT5tX2NoaWxkcmVuLnJlbW92ZShpbmRleCk7CisgICAgICAgIH0K
KworICAgIH0KKworICAgIGlmIChtX2NoYW5nZU1hc2sgJiBDaGlsZHJlbkNoYW5nZSkgeworICAg
ICAgICBtX2NoaWxkcmVuLmNsZWFyKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9sYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKFRleHR1
cmVNYXBwZXJOb2RlKiBjaGlsZCA9IHRvVGV4dHVyZU1hcHBlck5vZGUobV9sYXllci0+Y2hpbGRy
ZW4oKVtpXSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNoaWxkKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChjaGlsZCk7
CisgICAgICAgICAgICAgICAgY2hpbGQtPm1fcGFyZW50ID0gdGhpczsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBtX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBp
ZiAobV9jaGFuZ2VNYXNrICYgKFNpemVDaGFuZ2UgfCBDb250ZW50c1JlY3RDaGFuZ2UpKSB7Cisg
ICAgICAgIEludFNpemUgd2FudGVkU2l6ZSA9IEludFNpemUobV9sYXllci0+c2l6ZSgpLndpZHRo
KCksIG1fbGF5ZXItPnNpemUoKS5oZWlnaHQoKSk7CisgICAgICAgIGlmICh3YW50ZWRTaXplLmlz
RW1wdHkoKSAmJiBtX3BlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlw
ZSkKKyAgICAgICAgICAgIHdhbnRlZFNpemUgPSBJbnRTaXplKG1fbGF5ZXItPmNvbnRlbnRzUmVj
dCgpLndpZHRoKCksIG1fbGF5ZXItPmNvbnRlbnRzUmVjdCgpLmhlaWdodCgpKTsKKworICAgICAg
ICBpZiAod2FudGVkU2l6ZSAhPSBtX3NpemUpIHsKKyAgICAgICAgICAgIG1fc2l6ZSA9IEludFNp
emUod2FudGVkU2l6ZS53aWR0aCgpLCB3YW50ZWRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAg
IGlmIChtX3BsYXRmb3JtQ2xpZW50KQorICAgICAgICAgICAgICAgIG1fcGxhdGZvcm1DbGllbnQt
PnNldFNpemVDaGFuZ2VkKG1fc2l6ZSk7CisgICAgICAgICAgICBjb25zdCBib29sIG5lZWRzVGls
aW5nID0gbV9zaXplLndpZHRoKCkgPiAyMDAwIHx8IG1fc2l6ZS5oZWlnaHQoKSA+IDIwMDA7Cisg
ICAgICAgICAgICBpZiAobV9zdGF0ZS50aWxlZCAhPSBuZWVkc1RpbGluZykKKyAgICAgICAgICAg
ICAgICBtX3N0YXRlLnRpbGVkID0gbmVlZHNUaWxpbmc7CisgICAgICAgICAgICBtX3N0YXRlLmRp
cnR5ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX2NoYW5nZU1hc2sgJiBN
YXNrTGF5ZXJDaGFuZ2UpCisgICAgICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiBsYXllciA9IHRv
VGV4dHVyZU1hcHBlck5vZGUobV9sYXllci0+bWFza0xheWVyKCkpKQorICAgICAgICAgICBsYXll
ci0+bV9lZmZlY3RUYXJnZXQgPSB0aGlzOworCisgICAgaWYgKG1fY2hhbmdlTWFzayAmIFJlcGxp
Y2FMYXllckNoYW5nZSkKKyAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIGxheWVyID0gdG9U
ZXh0dXJlTWFwcGVyTm9kZShtX2xheWVyLT5yZXBsaWNhTGF5ZXIoKSkpCisgICAgICAgICAgIGxh
eWVyLT5tX2VmZmVjdFRhcmdldCA9IHRoaXM7CisKKyAgICBpZiAobV9jaGFuZ2VNYXNrICYgKFRy
YW5zZm9ybUNoYW5nZSB8IFNpemVDaGFuZ2UgfCBBbmNob3JQb2ludENoYW5nZSB8IFBvc2l0aW9u
Q2hhbmdlKSkKKyAgICAgICAgbV90cmFuc2Zvcm1zLmxvY2FsRGlydHkgPSB0cnVlOworCisgICAg
aWYgKG1fY2hhbmdlTWFzayAmIChDaGlsZHJlblRyYW5zZm9ybUNoYW5nZSB8IFNpemVDaGFuZ2Up
KQorICAgICAgICBtX3RyYW5zZm9ybXMucGVyc3BlY3RpdmVEaXJ0eSA9IHRydWU7CisKKyAgICBp
ZiAobV9jaGFuZ2VNYXNrICYgKENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlIHwgUHJlc2VydmVzM0RD
aGFuZ2UgfCBUcmFuc2Zvcm1DaGFuZ2UgfCBBbmNob3JQb2ludENoYW5nZSB8IFNpemVDaGFuZ2Ug
fCBDb250ZW50c1JlY3RDaGFuZ2UgfCBCYWNrZmFjZVZpc2liaWxpdHlDaGFuZ2UgfCBQb3NpdGlv
bkNoYW5nZSB8IE1hc2tMYXllckNoYW5nZSB8IERyYXdzQ29udGVudENoYW5nZSB8IENvbnRlbnRD
aGFuZ2UgfCBSZXBsaWNhTGF5ZXJDaGFuZ2UpKSAgICB7CisgICAgICAgIC8vIER1ZSB0byB0aGUg
ZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgd2F5IFdlYkNvcmUgaGFuZGxlcyB0cmFuc2Zvcm1zIGFu
ZCB0aGUgd2F5IFF0IGhhbmRsZXMgdHJhbnNmb3JtcywKKyAgICAgICAgLy8gYWxsIHRoZXNlIGVs
ZW1lbnRzIGFmZmVjdCB0aGUgdHJhbnNmb3JtcyBvZiBhbGwgdGhlIGRlc2NlbmRhbnRzLgorICAg
ICAgICBuZWVkc1RvSW52YWxpZGF0ZVRyYW5zZm9ybSA9IHRydWU7CisgICAgfQorCisgICAgaWYg
KG1fY2hhbmdlTWFzayAmIERpc3BsYXlDaGFuZ2UpIAorICAgICAgICBtX3N0YXRlLmRpcnR5ID0g
dHJ1ZTsKKworICAgIG1fc3RhdGUubWFza0xheWVyID0gdG9UZXh0dXJlTWFwcGVyTm9kZShtX2xh
eWVyLT5tYXNrTGF5ZXIoKSk7CisgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXIgPSB0b1RleHR1cmVN
YXBwZXJOb2RlKG1fbGF5ZXItPnJlcGxpY2FMYXllcigpKTsKKyAgICBtX3N0YXRlLnBvcyA9IG1f
bGF5ZXItPnBvc2l0aW9uKCk7CisgICAgbV9zdGF0ZS5hbmNob3JQb2ludCA9IG1fbGF5ZXItPmFu
Y2hvclBvaW50KCk7CisgICAgbV9zdGF0ZS5zaXplID0gbV9sYXllci0+c2l6ZSgpOworICAgIG1f
c3RhdGUudHJhbnNmb3JtID0gbV9sYXllci0+dHJhbnNmb3JtKCk7CisgICAgbV9zdGF0ZS5jb250
ZW50c1JlY3QgPSBtX2xheWVyLT5jb250ZW50c1JlY3QoKTsKKyAgICBtX3N0YXRlLm9wYWNpdHkg
PSBtX2xheWVyLT5vcGFjaXR5KCk7CisgICAgbV9zdGF0ZS5jb250ZW50c1JlY3QgPSBtX2xheWVy
LT5jb250ZW50c1JlY3QoKTsKKyAgICBtX3N0YXRlLnByZXNlcnZlczNEID0gbV9sYXllci0+cHJl
c2VydmVzM0QoKTsKKyAgICBtX3N0YXRlLm1hc2tzVG9Cb3VuZHMgPSBtX2xheWVyLT5tYXNrc1Rv
Qm91bmRzKCk7CisgICAgbV9zdGF0ZS5kcmF3c0NvbnRlbnQgPSBtX2xheWVyLT5kcmF3c0NvbnRl
bnQoKTsKKyAgICBtX3N0YXRlLmNvbnRlbnRzT3BhcXVlID0gbV9sYXllci0+Y29udGVudHNPcGFx
dWUoKTsKKyAgICBtX3N0YXRlLmJhY2tmYWNlVmlzaWJpbGl0eSA9IG1fbGF5ZXItPmJhY2tmYWNl
VmlzaWJpbGl0eSgpOworICAgIG1fc3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm0gPSBtX2xheWVyLT5j
aGlsZHJlblRyYW5zZm9ybSgpOworICAgIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPSBt
X3BlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlOworICAgIG1fY3VycmVudENvbnRlbnQuaW1hZ2Ug
PSBtX3BlbmRpbmdDb250ZW50LmltYWdlOworICAgIG1fY3VycmVudENvbnRlbnQubWVkaWEgPSBt
X3BlbmRpbmdDb250ZW50Lm1lZGlhOworICAgIG1fY3VycmVudENvbnRlbnQuYmFja2dyb3VuZENv
bG9yID0gbV9wZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5kQ29sb3I7CisgICAgbV9jdXJyZW50Q29u
dGVudC5uZWVkc0Rpc3BsYXkgPSBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSB8fCBtX3Bl
bmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheTsKKyAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlz
cGxheVJlY3QudW5pdGUobV9wZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXlSZWN0KTsKKyAgICBt
X3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheSA9IGZhbHNlOworICAgIG1fcGVuZGluZ0NvbnRl
bnQubmVlZHNEaXNwbGF5UmVjdCA9IEludFJlY3QoKTsKKyAgICBtX2NoYW5nZU1hc2sgPSBOb0No
YW5nZXM7CisgICAgYWZ0ZXJDdXJyZW50TGF5ZXJTeW5jOgorICAgIGlmIChuZWVkc1RvSW52YWxp
ZGF0ZVRyYW5zZm9ybSkKKyAgICAgICAgaW52YWxpZGF0ZVRyYW5zZm9ybSgpOworCisgICAgaWYg
KG1fc3RhdGUubWFza0xheWVyKSB7CisgICAgICAgIG1fc3RhdGUubWFza0xheWVyLT5zeW5jQ29t
cG9zaXRpbmdTdGF0ZShmYWxzZSk7CisgICAgICAgIGlmIChtX3N0YXRlLm1hc2tMYXllci0+bV9z
aXplLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fc3RhdGUubWFza0xheWVyLT5tX3NpemUgPSBt
X3NpemU7CisgICAgfQorCisgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyKQorICAgICAgICBt
X3N0YXRlLnJlcGxpY2FMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGUoZmFsc2UpOworCisjaWYg
MAorICAgIGlmIChtX3N0YXRlLmRpcnR5ICYmIG1fdGV4dHVyZSAmJiBtX3RleHR1cmUtPmFsbG93
T2ZmbGluZVRleHR1cmVVcGxvYWQoKSkKKyAgICAgICAgdXBsb2FkVGV4dHVyZUZyb21Db250ZW50
KDApOworI2VuZGlmCisKKyAgICBpZiAoIXJlY3Vyc2UpCisgICAgICAgIHJldHVybjsKKworICAg
IGNvbnN0IGludCBjaGlsZHJlblNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKKyAgICBmb3IgKGlu
dCBpID0gY2hpbGRyZW5TaXplLTE7IGkgPj0gMDsgLS1pKQorICAgICAgICBtX2NoaWxkcmVuW2ld
LT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSh0cnVlKTsKK30KKworR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXI6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNs
aWVudCkKKyAgICA6IEdyYXBoaWNzTGF5ZXIoY2xpZW50KQorICAgICwgbV9ub2RlKG5ldyBUZXh0
dXJlTWFwcGVyTm9kZSh0aGlzKSkKK3sKK30KKwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6c2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgbV9ub2RlLT5tX25hbWUg
PSBuYW1lOworfQorCitHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6fkdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyKCkKK3sKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpOiBUaGUg
Y3VycmVudCBzaXplIG1pZ2h0IGNoYW5nZSwgdGh1cyB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgd2hv
bGUgZGlzcGxheS4KKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROZWVk
c0Rpc3BsYXkoKQoreworICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXkg
PSB0cnVlOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpEaXNw
bGF5Q2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAobV9ub2RlLT5tX3BlbmRpbmdDb250ZW50Lm5lZWRz
RGlzcGxheSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5u
ZWVkc0Rpc3BsYXlSZWN0LnVuaXRlKEludFJlY3QocmVjdCkpOworICAgIG1fbm9kZS0+bm90aWZ5
Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpEaXNwbGF5Q2hhbmdlKTsKK30KKworLyogXHJlaW1w
IChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6
c2V0UGFyZW50KEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIG1fbm9kZS0+bm90aWZ5Q2hh
bmdlKFRleHR1cmVNYXBwZXJOb2RlOjpQYXJlbnRDaGFuZ2UpOworICAgIEdyYXBoaWNzTGF5ZXI6
OnNldFBhcmVudChsYXllcik7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8K
K2Jvb2wgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENoaWxkcmVuKGNvbnN0IFZlY3Rv
cjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuKQoreworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdl
KFRleHR1cmVNYXBwZXJOb2RlOjpDaGlsZHJlbkNoYW5nZSk7CisgICAgcmV0dXJuIEdyYXBoaWNz
TGF5ZXI6OnNldENoaWxkcmVuKGNoaWxkcmVuKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xh
eWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGQoR3Jh
cGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1h
cHBlck5vZGU6OkNoaWxkcmVuQ2hhbmdlKTsKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZChs
YXllcik7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkQXRJbmRleChHcmFwaGljc0xheWVyKiBsYXll
ciwgaW50IGluZGV4KQoreworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChsYXll
ciwgaW5kZXgpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpD
aGlsZHJlbkNoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3Zv
aWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkQWJvdmUoR3JhcGhpY3NMYXll
ciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpCit7CisgICAgIEdyYXBoaWNzTGF5ZXI6
OmFkZENoaWxkQWJvdmUobGF5ZXIsIHNpYmxpbmcpOworICAgICBtX25vZGUtPm5vdGlmeUNoYW5n
ZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdy
YXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRD
aGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQor
eworCisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhsYXllciwgc2libGluZyk7Cisg
ICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNoaWxkcmVuQ2hhbmdl
KTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLworYm9vbCBHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcjo6cmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBH
cmFwaGljc0xheWVyKiBuZXdDaGlsZCkKK3sKKyAgICBpZiAoR3JhcGhpY3NMYXllcjo6cmVwbGFj
ZUNoaWxkKG9sZENoaWxkLCBuZXdDaGlsZCkpIHsKKyAgICAgICAgbV9ub2RlLT5ub3RpZnlDaGFu
Z2UoVGV4dHVyZU1hcHBlck5vZGU6OkNoaWxkcmVuQ2hhbmdlKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNz
TGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpyZW1vdmVGcm9t
UGFyZW50KCkKK3sKKyAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisgICAgbV9u
b2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlBhcmVudENoYW5nZSk7CisgICAg
R3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpOworfQorCisvKiBccmVpbXAgKEdyYXBo
aWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRNYXNr
TGF5ZXIoR3JhcGhpY3NMYXllciogdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IG1hc2tMYXll
cigpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVyKHZh
bHVlKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6TWFza0xh
eWVyQ2hhbmdlKTsKK30KKworCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lk
IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGlj
c0xheWVyKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gcmVwbGljYUxheWVyKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcih2YWx1
ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlJlcGxpY2FM
YXllckNoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQg
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQm
IHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBwb3NpdGlvbigpKQorICAgICAgICByZXR1cm47
CisgICAgR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24odmFsdWUpOworICAgIG1fbm9kZS0+bm90
aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpQb3NpdGlvbkNoYW5nZSk7Cit9CisKKy8qIFxy
ZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI6OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgdmFsdWUpCit7CisgICAgaWYg
KHZhbHVlID09IGFuY2hvclBvaW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xh
eWVyOjpzZXRBbmNob3JQb2ludCh2YWx1ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4
dHVyZU1hcHBlck5vZGU6OkFuY2hvclBvaW50Q2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFw
aGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0U2l6
ZShjb25zdCBGbG9hdFNpemUmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBzaXplKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNpemUodmFsdWUpOworICAg
IG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpTaXplQ2hhbmdlKTsKK30K
KworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcjo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB2YWx1
ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gdHJhbnNmb3JtKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEdyYXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybSh2YWx1ZSk7CisgICAgbV9ub2RlLT5ub3Rp
ZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlRyYW5zZm9ybUNoYW5nZSk7Cit9CisKKy8qIFxy
ZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI6OnNldENoaWxkcmVuVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB2YWx1
ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gY2hpbGRyZW5UcmFuc2Zvcm0oKSkKKyAgICAgICAgcmV0
dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuVHJhbnNmb3JtKHZhbHVlKTsKKyAg
ICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5UcmFuc2Zv
cm1DaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRQcmVzZXJ2ZXMzRChib29sIHZhbHVlKQorewor
ICAgIGlmICh2YWx1ZSA9PSBwcmVzZXJ2ZXMzRCgpKQorICAgICAgICByZXR1cm47CisgICAgR3Jh
cGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0QodmFsdWUpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hh
bmdlKFRleHR1cmVNYXBwZXJOb2RlOjpQcmVzZXJ2ZXMzRENoYW5nZSk7Cit9CisKKy8qIFxyZWlt
cCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OnNldE1hc2tzVG9Cb3VuZHMoYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gbWFza3NU
b0JvdW5kcygpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza3NU
b0JvdW5kcyh2YWx1ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5v
ZGU6Ok1hc2tzVG9Cb3VuZHNDaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIu
aCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXREcmF3c0NvbnRlbnQo
Ym9vbCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gZHJhd3NDb250ZW50KCkpCisgICAgICAg
IHJldHVybjsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6RHJh
d3NDb250ZW50Q2hhbmdlKTsKKyAgICBHcmFwaGljc0xheWVyOjpzZXREcmF3c0NvbnRlbnQodmFs
dWUpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIHZhbHVl
KQoreworICAgIGlmICh2YWx1ZSA9PSBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQuYmFja2dyb3Vu
ZENvbG9yKQorICAgICAgICByZXR1cm47CisgICAgbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50LmJh
Y2tncm91bmRDb2xvciA9IHZhbHVlOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tncm91bmRD
b2xvcih2YWx1ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6
OkJhY2tncm91bmRDb2xvckNoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5o
KQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmNsZWFyQmFja2dyb3VuZENv
bG9yKCkKK3sKKyAgICBpZiAoIW1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5kQ29s
b3IuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisgICAgbV9ub2RlLT5tX3BlbmRpbmdDb250
ZW50LmJhY2tncm91bmRDb2xvciA9IENvbG9yKCk7CisgICAgR3JhcGhpY3NMYXllcjo6Y2xlYXJC
YWNrZ3JvdW5kQ29sb3IoKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVy
Tm9kZTo6QmFja2dyb3VuZENvbG9yQ2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xh
eWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNP
cGFxdWUoYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gY29udGVudHNPcGFxdWUoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJO
b2RlOjpDb250ZW50c09wYXF1ZUNoYW5nZSk7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVu
dHNPcGFxdWUodmFsdWUpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2
b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkoYm9v
bCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gYmFja2ZhY2VWaXNpYmlsaXR5KCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkodmFs
dWUpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpCYWNrZmFj
ZVZpc2liaWxpdHlDaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyov
Cit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRPcGFjaXR5KGZsb2F0IHZhbHVl
KQoreworICAgIGlmICh2YWx1ZSA9PSBvcGFjaXR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBH
cmFwaGljc0xheWVyOjpzZXRPcGFjaXR5KHZhbHVlKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5n
ZShUZXh0dXJlTWFwcGVyTm9kZTo6T3BhY2l0eUNoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3Jh
cGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENv
bnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gY29u
dGVudHNSZWN0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRDb250
ZW50c1JlY3QodmFsdWUpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJO
b2RlOjpDb250ZW50c1JlY3RDaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIu
aCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1RvSW1h
Z2UoSW1hZ2UqIGltYWdlKQoreworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBw
ZXJOb2RlOjpDb250ZW50Q2hhbmdlKTsKKyAgICBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQuY29u
dGVudFR5cGUgPSBpbWFnZSA/IFRleHR1cmVNYXBwZXJOb2RlOjpEaXJlY3RJbWFnZUNvbnRlbnRU
eXBlIDogVGV4dHVyZU1hcHBlck5vZGU6OkhUTUxDb250ZW50VHlwZTsKKyAgICBtX25vZGUtPm1f
cGVuZGluZ0NvbnRlbnQuaW1hZ2UgPSBpbWFnZTsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRDb250
ZW50c1RvSW1hZ2UoaW1hZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyov
Cit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c0JhY2tncm91bmRD
b2xvcihjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4
dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRDaGFuZ2UpOworICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29u
dGVudC5jb250ZW50VHlwZSA9IFRleHR1cmVNYXBwZXJOb2RlOjpDb2xvckNvbnRlbnRUeXBlOwor
ICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsKKyAg
ICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c0JhY2tncm91bmRDb2xvcihjb2xvcik7Cit9CisK
Kwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNUb01lZGlhKFBs
YXRmb3JtTGF5ZXIqIG1lZGlhKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9N
ZWRpYShtZWRpYSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6
OkNvbnRlbnRDaGFuZ2UpOworICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlw
ZSA9IG1lZGlhID8gVGV4dHVyZU1hcHBlck5vZGU6Ok1lZGlhQ29udGVudFR5cGUgOiBUZXh0dXJl
TWFwcGVyTm9kZTo6SFRNTENvbnRlbnRUeXBlOworICAgIGlmIChtZWRpYSkKKyAgICAgICAgbV9u
b2RlLT5tX3BlbmRpbmdDb250ZW50Lm1lZGlhID0gc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlclZp
ZGVvTGF5ZXIqPihtZWRpYSk7CisgICAgZWxzZQorICAgICAgICBtX25vZGUtPm1fcGVuZGluZ0Nv
bnRlbnQubWVkaWEgPSAwOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2
b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c09yaWVudGF0aW9uKENv
bXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBpZiAo
Y29udGVudHNPcmllbnRhdGlvbigpID09IG9yaWVudGF0aW9uKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRzT3JpZW50
YXRpb25DaGFuZ2UpOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3JpZW50YXRpb24o
b3JpZW50YXRpb24pOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lk
IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNM
YXllck9ubHkoKQoreworICAgIG1fbm9kZS0+c3luY0NvbXBvc2l0aW5nU3RhdGUoZmFsc2UpOwor
ICAgIG1fbm9kZS0+cGVyZm9ybVBvc3RTeW5jT3BlcmF0aW9ucygpOworfQorCisvKiBccmVpbXAg
KEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpz
eW5jQ29tcG9zaXRpbmdTdGF0ZSgpCit7CisgICAgR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0
aW5nU3RhdGUoKTsKKyAgICBtX25vZGUtPnN5bmNDb21wb3NpdGluZ1N0YXRlKHRydWUpOworICAg
IG1fbm9kZS0+cGVyZm9ybVBvc3RTeW5jT3BlcmF0aW9ucygpOworfQorCisvKiBccmVpbXAgKEdy
YXBoaWNzTGF5ZXIuaCkKKyAqLworTmF0aXZlTGF5ZXIgR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI6Om5hdGl2ZUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ub2RlLmdldCgpOworfQor
CisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCitQbGF0Zm9ybUxheWVyKiBHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fbm9kZS5nZXQoKTsKK30KKworUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xh
eWVyOjpjcmVhdGUoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQoreworICAgIHJldHVybiBu
ZXcgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoY2xpZW50KTsKK30KKworfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWExNThm
MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorKi8KKworI2lmbmRlZiBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcl9oCisjZGVmaW5lIEdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyX2gKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xp
ZW50LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNlbmRpZgorCisjZGVmaW5lIEVOQUJMRV9URVhN
QVBfQU5JTUFUSU9OIDAKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0dXJlTWFw
cGVyTm9kZTsKK2NsYXNzIEJpdG1hcFRleHR1cmU7CitjbGFzcyBUZXh0dXJlTWFwcGVyOworCitj
bGFzcyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciA6IHB1YmxpYyBHcmFwaGljc0xheWVyIHsK
KyAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlck5vZGU7CisKK3B1YmxpYzoKKyAgICBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcihHcmFwaGljc0xheWVyQ2xpZW50Kik7CisgICAgdmlydHVh
bCB+R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoKTsKKworICAgIC8vIHJlaW1wcyBmcm9tIEdy
YXBoaWNzTGF5ZXIuaAorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAg
IHZpcnR1YWwgdm9pZCBzZXRQYXJlbnQoR3JhcGhpY3NMYXllciogbGF5ZXIpOworICAgIHZpcnR1
YWwgYm9vbCBzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+Jik7CisgICAg
dmlydHVhbCB2b2lkIGFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqLCBpbnQgaW5kZXgpOworICAgIHZpcnR1YWwg
dm9pZCBhZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBz
aWJsaW5nKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBs
YXllciwgR3JhcGhpY3NMYXllciogc2libGluZyk7CisgICAgdmlydHVhbCBib29sIHJlcGxhY2VD
aGlsZChHcmFwaGljc0xheWVyKiBvbGRDaGlsZCwgR3JhcGhpY3NMYXllciogbmV3Q2hpbGQpOwor
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVGcm9tUGFyZW50KCk7CisgICAgdmlydHVhbCB2b2lkIHNl
dE1hc2tMYXllcihHcmFwaGljc0xheWVyKiBsYXllcik7CisgICAgdmlydHVhbCB2b2lkIHNldFBv
c2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHApOworICAgIHZpcnR1YWwgdm9pZCBzZXRBbmNob3JQ
b2ludChjb25zdCBGbG9hdFBvaW50M0QmIHApOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSk7CisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCk7CisgICAgdmlydHVhbCB2b2lkIHNldENoaWxkcmVu
VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0UHJlc2VydmVzM0QoYm9vbCBiKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza3NUb0Jv
dW5kcyhib29sIGIpOworICAgIHZpcnR1YWwgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCBiKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CisgICAg
dmlydHVhbCB2b2lkIGNsZWFyQmFja2dyb3VuZENvbG9yKCk7CisgICAgdmlydHVhbCB2b2lkIHNl
dENvbnRlbnRzT3BhcXVlKGJvb2wgYik7CisgICAgdmlydHVhbCB2b2lkIHNldEJhY2tmYWNlVmlz
aWJpbGl0eShib29sIGIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNp
dHkpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgcik7
CisgICAgdmlydHVhbCB2b2lkIHNldFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7CisgICAgdmlydHVh
bCB2b2lkIHNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKik7CisgICAgdmlydHVhbCB2
b2lkIHNldENvbnRlbnRzQmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CisjaWYgRU5BQkxF
KDNEX0NBTlZBUykKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0dyYXBoaWNzQ29udGV4
dDNEKGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgdmlydHVhbCB2b2lkIHNldEdyYXBo
aWNzQ29udGV4dDNETmVlZHNEaXNwbGF5KCk7CisjZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29udGVudHNPcmllbnRhdGlvbihDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24pOworICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOworICAg
IHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIHZpcnR1YWwg
TmF0aXZlTGF5ZXIgbmF0aXZlTGF5ZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5
ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBhZGRBbmltYXRp
b24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiAvKmJveFNpemUqLywg
Y29uc3QgQW5pbWF0aW9uKiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIC8qa2V5ZnJhbWVzTmFtZSovLCBkb3VibGUgLyp0aW1lT2Zmc2V0Ki8pIHsgcmV0dXJu
IGZhbHNlOyB9CisKK3ByaXZhdGU6CisgICAgT3duUHRyPFRleHR1cmVNYXBwZXJOb2RlPiBtX25v
ZGU7Cit9OworCit9CisjZW5kaWYgLy8gR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXJfaApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYzFjNmQKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKQEAgLTAs
MCArMSwxMjAgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIFRleHR1cmVNYXBwZXJfaAorI2RlZmluZSBUZXh0dXJlTWFwcGVyX2gKKworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiAoZGVmaW5lZChRVF9PUEVOR0xfTElCKSkKKyAg
ICAjaWYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikgJiYgIWRlZmluZWQoVEVYTUFQX09QRU5HTF9F
U18yKQorICAgICAgICAjZGVmaW5lIFRFWE1BUF9PUEVOR0xfRVNfMgorICAgICNlbmRpZgorI2Vu
ZGlmCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4Lmgi
CisKKy8qCisgICAgVGV4dHVyZU1hcHBlciBpcyBhIG1lY2hhbmlzbSB0aGF0IGVuYWJsZXMgaGFy
ZHdhcmUgYWNjZWxlcmF0aW9uIG9mIENTUyBhbmltYXRpb25zIChhY2NlbGVyYXRlZCBjb21wb3Np
dGluZykgd2l0aG91dAorICAgIGEgbmVlZCBmb3IgYSBwbGF0Zm9ybSBzcGVjaWZpYyBzY2VuZS1n
cmFwaCBsaWJyYXJ5IGxpa2UgQ29yZUFuaW1hdGlvbnMgb3IgUUdyYXBoaWNzVmlldy4KKyovCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGV4dHVyZU1hcHBlcjsKKworLy8gQSAyRCB0
ZXh0dXJlIHRoYXQgY2FuIGJlIHRoZSB0YXJnZXQgb2Ygc29mdHdhcmUgb3IgR0wgcmVuZGVyaW5n
LgorY2xhc3MgQml0bWFwVGV4dHVyZSAgOiBwdWJsaWMgUmVmQ291bnRlZDxCaXRtYXBUZXh0dXJl
PiB7CitwdWJsaWM6CisgICAgQml0bWFwVGV4dHVyZSgpIDogbV9sb2NrQ291bnQoMCkge30KKyAg
ICB2aXJ0dWFsIH5CaXRtYXBUZXh0dXJlKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dP
ZmZsaW5lVGV4dHVyZVVwbG9hZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCB2b2lkIGRlc3Ryb3koKSA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHJlc2V0KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgb3BhcXVlID0gZmFsc2UpCisgICAg
eworICAgICAgICBtX2lzT3BhcXVlID0gb3BhcXVlOworICAgICAgICBtX2NvbnRlbnRTaXplID0g
c2l6ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBiZWdp
blBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBl
bmRQYWludCgpID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBiZWdp
blBhaW50TWVkaWEoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJlZ2luUGFpbnQoSW50UmVjdCgw
LCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSk7CisgICAgfQorICAgIHZpcnR1
YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKSA9IDA7CisgICAgdmlydHVhbCBib29s
IHNhdmUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIGlu
bGluZSB2b2lkIGxvY2soKSB7ICsrbV9sb2NrQ291bnQ7IH0KKyAgICBpbmxpbmUgdm9pZCB1bmxv
Y2soKSB7IC0tbV9sb2NrQ291bnQ7IH0KKyAgICBpbmxpbmUgYm9vbCBpc0xvY2tlZCgpIHsgcmV0
dXJuIG1fbG9ja0NvdW50OyB9CisgICAgaW5saW5lIEludFNpemUgY29udGVudFNpemUoKSBjb25z
dCB7IHJldHVybiBtX2NvbnRlbnRTaXplOyB9CisgICAgaW5saW5lIHZvaWQgc2V0T2Zmc2V0KGNv
bnN0IEludFBvaW50JiBvKSB7IG1fb2Zmc2V0ID0gbzsgfQorICAgIGlubGluZSBJbnRQb2ludCBv
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorcHJpdmF0ZToKKyAgICBpbnQgbV9s
b2NrQ291bnQ7CisgICAgSW50U2l6ZSBtX2NvbnRlbnRTaXplOworICAgIGJvb2wgbV9pc09wYXF1
ZTsKKyAgICBJbnRQb2ludCBtX29mZnNldDsKK307CisKKy8vIEEgImNvbnRleHQiIGNsYXNzIHVz
ZWQgdG8gZW5jYXBzdWxhdGUgYWNjZWxlcmF0ZWQgdGV4dHVyZSBtYXBwaW5nIGZ1bmN0aW9uczog
aS5lLiBkcmF3aW5nIGEgdGV4dHVyZQorLy8gb250byB0aGUgc2NyZWVuIG9yIGludG8gYW5vdGhl
ciB0ZXh0dXJlIHdpdGggYSBzcGVjaWZpZWQgdHJhbnNmb3JtLCBvcGFjaXR5IGFuZCBtYXNrLgor
Y2xhc3MgVGV4dHVyZU1hcHBlciA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmVNYXBwZXI+IHsK
KyAgICBmcmllbmQgY2xhc3MgQml0bWFwVGV4dHVyZTsKKworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFRleHR1cmVNYXBwZXI+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQqKTsKKyAgICB2
aXJ0dWFsIH5UZXh0dXJlTWFwcGVyKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1
cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0LCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgo
KSwgZmxvYXQgb3BhY2l0eSA9IDEuMGYsIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJl
ID0gMCkgPSAwOworCisgICAgLy8gbWFrZXMgYSBzdXJmYWNlIHRoZSB0YXJnZXQgZm9yIHRoZSBm
b2xsb3dpbmcgZHJhd1RleHR1cmUgY2FsbHMuCisgICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNl
KEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1Rh
cmdldChjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBJbnRTaXplJiwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgSW50UmVj
dCYgdmlzaWJsZVJlY3QpCisgICAgeworICAgICAgICBkcmF3VGV4dHVyZSh0ZXh0dXJlLCBJbnRS
ZWN0KDAsIDAsIHRleHR1cmUuY29udGVudFNpemUoKS53aWR0aCgpLCB0ZXh0dXJlLmNvbnRlbnRT
aXplKCkuaGVpZ2h0KCkpLCBtYXRyaXgsIG9wYWNpdHksIDApOworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBzZXRDbGlwKGNvbnN0IEludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCBib29sIGFs
bG93U3VyZmFjZUZvclJvb3QoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJp
dG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKSA9IDA7CisgICAgdmlydHVhbCBjb25zdCBjaGFy
KiB0eXBlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwKCkge30KKworICAg
IEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2djOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIFRleHR1cmVNYXBwZXIoR3Jh
cGhpY3NDb250ZXh0KiBnYykgOiBtX2djKGdjKSB7fQorICAgIEdyYXBoaWNzQ29udGV4dCogbV9n
YzsKK307CisKK307CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmggYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZTlmYzkKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllci5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5k
ZWYgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJfaAorI2RlZmluZSBUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllcl9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250
ZXh0OworY2xhc3MgSW50UmVjdDsKK2NsYXNzIEludFNpemU7CitjbGFzcyBUcmFuc2Zvcm1hdGlv
bk1hdHJpeDsKKworCisvLyBHbHVlIGxheWVyIHRvIGNvbm5lY3QgdGhlIHRleG1hcCBsYXllciB0
byB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgY29udGFpbmVyLgorY2xhc3MgVGV4dHVyZU1hcHBlckxh
eWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyTGF5ZXJDbGll
bnQoKSB7fQorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHNldFNpemVDaGFuZ2VkKGNvbnN0IEludFNpemUmKSA9IDA7Cit9
OworCitjbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciB7CitwdWJsaWM6CisgICAgZW51
bSBUeXBlIHsKKyAgICAgICAgQ29udGVudExheWVyLAorICAgICAgICBWaWRlb0xheWVyCisgICAg
fTsKKworICAgIHZpcnR1YWwgVHlwZSBsYXllclR5cGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB+VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIoKSB7fQorfTsKKworY2xhc3MgVGV4dHVyZU1h
cHBlckNvbnRlbnRMYXllciA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHNldFBsYXRmb3JtTGF5ZXJDbGllbnQoVGV4dHVyZU1h
cHBlckxheWVyQ2xpZW50KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qg
SW50UmVjdCYgZXhwb3NlZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zv
cm0sIGZsb2F0IG9wYWNpdHkpIHt9CisgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFudXBUZXh0dXJlTWFwcGVyKCkge30KKyAgICB2aXJ0
dWFsIFR5cGUgbGF5ZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gQ29udGVudExheWVyOyB9Cit9Owor
CisjaWYgRU5BQkxFKFZJREVPKQorY2xhc3MgVGV4dHVyZU1hcHBlclZpZGVvTGF5ZXIgOiBwdWJs
aWMgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9p
ZCBwYWludChHcmFwaGljc0NvbnRleHQqKSA9IDA7CisgICAgdmlydHVhbCBUeXBlIGxheWVyVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIFZpZGVvTGF5ZXI7IH0KK307CisjZW5kaWYKKworfQorCisjZW5k
aWYgLy8gVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJfaApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvUXRUZXN0QnJvd3Nlci9tYWluLmNwcCBiL1dlYktpdFRvb2xzL1F0VGVzdEJyb3dzZXIvbWFp
bi5jcHAKaW5kZXggNDE0NzFmYS4uZDA5ZjExMSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvUXRU
ZXN0QnJvd3Nlci9tYWluLmNwcAorKysgYi9XZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL21haW4u
Y3BwCkBAIC04OSw2ICs4OSw3IEBAIExhdW5jaGVyQXBwbGljYXRpb246OkxhdW5jaGVyQXBwbGlj
YXRpb24oaW50JiBhcmdjLCBjaGFyKiogYXJndikKICAgICBzZXRPcmdhbml6YXRpb25OYW1lKCJO
b2tpYSIpOwogICAgIHNldEFwcGxpY2F0aW9uTmFtZSgiUXRUZXN0QnJvd3NlciIpOwogICAgIHNl
dEFwcGxpY2F0aW9uVmVyc2lvbigiMC4xIik7CisgICAgUVBpeG1hcENhY2hlOjpzZXRDYWNoZUxp
bWl0KDE2Mzg0KTsKIAogICAgIGFwcGx5RGVmYXVsdFNldHRpbmdzKCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69821</attachid>
            <date>2010-10-05 11:49:53 -0700</date>
            <delta_ts>2010-10-07 14:00:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch-47070-5.diff</filename>
            <type>text/plain</type>
            <size>99610</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzJiZjllNy4uMzAwYzQ4NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0xMC0wNSAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5p
dGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDcwNzAKKworICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmg6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oOiBBZGRlZC4KKwogMjAx
MC0xMC0wMyAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ2YWZmMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTAsMCArMSw1
OTMgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCisKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIYXNoTWFwLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIK
KyNpbmNsdWRlICJQYXNzUmVmUHRyLmgiCisjaW5jbHVkZSAiUmVmQ291bnRlZC5oIgorI2luY2x1
ZGUgIlRpbWVyLmgiCisKKyNpZiBkZWZpbmVkKFRFWE1BUF9PUEVOR0xfRVNfMikKKyNpbmNsdWRl
IDxHTEVTMi9nbDIuaD4KKyNlbGlmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDxnbC5oPgorI2Vs
c2UKKyNpbmNsdWRlIDxHTC9nbC5oPgorI2VuZGlmCisKKyNpZm5kZWYgVEVYTUFQX09QRU5HTF9F
UzIKK2V4dGVybiAiQyIgeworICAgIHZvaWQgZ2xVbmlmb3JtMWYoR0xpbnQsIEdMZmxvYXQpOwor
ICAgIHZvaWQgZ2xVbmlmb3JtMWkoR0xpbnQsIEdMaW50KTsKKyAgICB2b2lkIGdsVmVydGV4QXR0
cmliUG9pbnRlcihHTHVpbnQsIEdMaW50LCBHTGVudW0sIEdMYm9vbGVhbiwgR0xzaXplaSwgY29u
c3QgR0x2b2lkKik7CisgICAgdm9pZCBnbFVuaWZvcm00ZihHTGludCwgR0xmbG9hdCwgR0xmbG9h
dCwgR0xmbG9hdCwgR0xmbG9hdCk7CisgICAgdm9pZCBnbFNoYWRlclNvdXJjZShHTHVpbnQsIEdM
c2l6ZWksIGNvbnN0IGNoYXIqKiwgY29uc3QgR0xpbnQqKTsKKyAgICBHTHVpbnQgZ2xDcmVhdGVT
aGFkZXIoR0xlbnVtKTsKKyAgICB2b2lkIGdsU2hhZGVyU291cmNlKEdMdWludCwgR0xzaXplaSwg
Y29uc3QgY2hhcioqLCBjb25zdCBHTGludCopOworICAgIHZvaWQgZ2xDb21waWxlU2hhZGVyKEdM
dWludCk7CisgICAgdm9pZCBnbERlbGV0ZVNoYWRlcihHTHVpbnQpOworICAgIHZvaWQgZ2xVbmlm
b3JtTWF0cml4NGZ2KEdMaW50LCBHTHNpemVpLCBHTGJvb2xlYW4sIGNvbnN0IEdMZmxvYXQqKTsK
KyAgICBHTHVpbnQgZ2xDcmVhdGVQcm9ncmFtKCk7CisgICAgdm9pZCBnbEF0dGFjaFNoYWRlcihH
THVpbnQsIEdMdWludCk7CisgICAgdm9pZCBnbExpbmtQcm9ncmFtKEdMdWludCk7CisgICAgdm9p
ZCBnbFVzZVByb2dyYW0oR0x1aW50KTsKKyAgICB2b2lkIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KEdMdWludCk7CisgICAgdm9pZCBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdMdWludCk7
CisgICAgdm9pZCBnbEJpbmRGcmFtZWJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgZnJhbWVi
dWZmZXIpOworICAgIHZvaWQgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoR0xzaXplaSBuLCBjb25zdCBH
THVpbnQqIGZyYW1lYnVmZmVycyk7CisgICAgdm9pZCBnbEdlbkZyYW1lYnVmZmVycyhHTHNpemVp
IG4sIEdMdWludCogZnJhbWVidWZmZXJzKTsKKyAgICB2b2lkIGdsRnJhbWVidWZmZXJUZXh0dXJl
MkQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQsIEdM
dWludCB0ZXh0dXJlLCBHTGludCBsZXZlbCk7CisgICAgdm9pZCBnbEdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcml2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVu
dW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOworICAgIHZvaWQgZ2xCaW5kQnVmZmVyKEdMZW51bSwg
R0x1aW50KTsKKyAgICB2b2lkIGdsRGVsZXRlQnVmZmVycyhHTHNpemVpLCBjb25zdCBHTHVpbnQq
KTsKKyAgICB2b2lkIGdsR2VuQnVmZmVycyhHTHNpemVpLCBHTHVpbnQqKTsKKyAgICB2b2lkIGds
QnVmZmVyRGF0YShHTGVudW0sIEdMc2l6ZWlwdHIsIGNvbnN0IEdMdm9pZCosIEdMZW51bSk7Cisg
ICAgdm9pZCBnbEJ1ZmZlclN1YkRhdGEoR0xlbnVtLCBHTHNpemVpcHRyLCBHTHNpemVpcHRyLCBj
b25zdCBHTHZvaWQqKTsKKyAgICB2b2lkIGdsR2V0UHJvZ3JhbUluZm9Mb2coR0x1aW50IHByb2dy
YW0sIEdMc2l6ZWksIEdMc2l6ZWkqLCBHTGNoYXIqKTsKKworI2lmICFQTEFURk9STShNQUMpCisg
ICAgR0xpbnQgZ2xHZXRVbmlmb3JtTG9jYXRpb24oR0x1aW50LCBjb25zdCBHTGNoYXIqKTsKKyAg
ICBHTGludCBnbEJpbmRBdHRyaWJMb2NhdGlvbihHTHVpbnQsIEdMdWludCwgY29uc3QgR0xjaGFy
Kik7CisjZW5kaWYKK30KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2lubGluZSBz
dGF0aWMgdm9pZCBkZWJ1Z0dMQ29tbWFuZChjb25zdCBjaGFyKiBjb21tYW5kLCBpbnQgbGluZSkK
K3sKKyAgICBjb25zdCBHTGVudW0gZXJyID0gZ2xHZXRFcnJvcigpOworICAgIGlmICghZXJyKQor
ICAgICAgICByZXR1cm47CisgICAgV1RGUmVwb3J0RXJyb3IoX19GSUxFX18sIGxpbmUsIFdURl9Q
UkVUVFlfRlVOQ1RJT04sICJbVGV4dHVyZU1hcHBlciBHTF0gQ29tbWFuZCBmYWlsZWQ6ICVzICgl
eClcbiIsIGNvbW1hbmQsIGVycik7Cit9CisKKyNkZWZpbmUgREVCVUdfR0xfQ09NTUFORFMKKwor
I2lmZGVmIERFQlVHX0dMX0NPTU1BTkRTCisjZGVmaW5lIEdMX0NNRCh4KSB7eCwgZGVidWdHTENv
bW1hbmQoI3gsIF9fTElORV9fKTsgfQorI2Vsc2UKKyNkZWZpbmUgR0xfQ01EKHgpIHgKKyNlbmRp
ZgorCitjbGFzcyBCaXRtYXBUZXh0dXJlR0wgOiBwdWJsaWMgQml0bWFwVGV4dHVyZSB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKKyAgICB2aXJ0dWFsIEludFNpemUgc2l6
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHJlc2V0KGNvbnN0IEludFNpemUmLCBib29sIG9wYXF1ZSk7CisgICAgdmlydHVhbCBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJl
Y3QpOworICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRD
b250ZW50c1RvSW1hZ2UoSW1hZ2UqKTsKKworcHJpdmF0ZToKKyAgICBHTHVpbnQgbV9pZDsKKyAg
ICBOYXRpdmVJbWFnZVB0ciBtX2ltYWdlOworICAgIEZsb2F0U2l6ZSBtX3JlbGF0aXZlU2l6ZTsK
KyAgICBib29sIG1fb3BhcXVlOworICAgIEludFNpemUgbV90ZXh0dXJlU2l6ZTsKKyAgICBSZWZQ
dHI8UkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI+IG1fYnVmZmVyOworICAgIEludFJlY3QgbV9k
aXJ0eVJlY3Q7CisgICAgR0x1aW50IG1fZmJvOworICAgIEludFNpemUgbV9hY3R1YWxTaXplOwor
ICAgIGJvb2wgbV9zdXJmYWNlTmVlZHNSZXNldDsKKyAgICBCaXRtYXBUZXh0dXJlR0woKQorICAg
ICAgICA6IG1faWQoMCkKKyAgICAgICAgLCBtX2ltYWdlKDApCisgICAgICAgICwgbV9vcGFxdWUo
ZmFsc2UpCisgICAgICAgICwgbV9mYm8oMCkKKyAgICAgICAgLCBtX3N1cmZhY2VOZWVkc1Jlc2V0
KHRydWUpCisgICAgeworICAgIH0KKworICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVyR0w7
Cit9OworCitzdGF0aWMgc3RydWN0IFRleG1hcFNoYWRlckluZm8geworICAgIGVudW0gU2hhZGVy
UHJvZ3JhbUluZGV4IHsKKyAgICAgICAgU2ltcGxlUHJvZ3JhbSwKKyAgICAgICAgT3BhY2l0eUFu
ZE1hc2tQcm9ncmFtLAorICAgICAgICBUYXJnZXRQcm9ncmFtLAorICAgICAgICBOdW1Qcm9ncmFt
cworICAgIH07CisKKyAgICBlbnVtIFNoYWRlclZhcmlhYmxlSW5kZXggeworICAgICAgICBJbk1h
dHJpeFZhcmlhYmxlLAorICAgICAgICBJblNvdXJjZU1hdHJpeFZhcmlhYmxlLAorICAgICAgICBJ
bk1hc2tNYXRyaXhWYXJpYWJsZSwKKyAgICAgICAgSW5WZXJ0ZXhWYXJpYWJsZSwKKworICAgICAg
ICBPcGFjaXR5VmFyaWFibGUsCisgICAgICAgIFNvdXJjZVRleHR1cmVWYXJpYWJsZSwKKyAgICAg
ICAgTWFza1RleHR1cmVWYXJpYWJsZSwKKyAgICAgICAgTnVtVmFyaWFibGVzCisgICAgfTsKKwor
ICAgIHN0cnVjdCBQcm9ncmFtSW5mbyB7CisgICAgICAgIEdMdWludCBpZDsKKyAgICAgICAgR0xp
bnQgdmFyc1tOdW1WYXJpYWJsZXNdOworICAgIH07CisKKyAgICBHTGludCBnZXRVbmlmb3JtTG9j
YXRpb24oU2hhZGVyUHJvZ3JhbUluZGV4IHByb2csIFNoYWRlclZhcmlhYmxlSW5kZXggdmFyLCBj
b25zdCBjaGFyKiBuYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHByb2dyYW1zW3Byb2ddLnZh
cnNbdmFyXSA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1zW3Byb2ddLmlkLCBuYW1lKTsK
KyAgICB9CisKKyAgICB2b2lkIGNyZWF0ZVNoYWRlclByb2dyYW0oY29uc3QgY2hhciogdmVydGV4
U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSwgU2hhZGVyUHJv
Z3JhbUluZGV4IGluZGV4KQorICAgIHsKKyAgICAgICAgR0x1aW50IHZlcnRleFNoYWRlciA9IGds
Q3JlYXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIpOworICAgICAgICBHTHVpbnQgZnJhZ21lbnRT
aGFkZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9GUkFHTUVOVF9TSEFERVIpOworICAgICAgICBHTF9D
TUQoZ2xTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAmdmVydGV4U2hhZGVyU291cmNlLCAw
KSkKKyAgICAgICAgR0xfQ01EKGdsU2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCAxLCAmZnJh
Z21lbnRTaGFkZXJTb3VyY2UsIDApKQorICAgICAgICBHTHVpbnQgcHJvZ3JhbUlEID0gZ2xDcmVh
dGVQcm9ncmFtKCk7CisgICAgICAgIEdMX0NNRChnbENvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVy
KSkKKyAgICAgICAgR0xfQ01EKGdsQ29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcikpCisgICAg
ICAgIEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIHZlcnRleFNoYWRlcikpCisgICAg
ICAgIEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZyYWdtZW50U2hhZGVyKSkKKyAg
ICAgICAgR0xfQ01EKGdsQmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgMCwgIkluVmVydGV4
IikpCisgICAgICAgIEdMX0NNRChnbExpbmtQcm9ncmFtKHByb2dyYW1JRCkpCisgICAgICAgIHBy
b2dyYW1zW2luZGV4XS5pZCA9IHByb2dyYW1JRDsKKyAgICAgICAgY2hhciBpbmZvTG9nWzEwMjRd
OworICAgICAgICBpbnQgbGVuOworICAgICAgICBHTF9DTUQoZ2xHZXRQcm9ncmFtSW5mb0xvZyhw
cm9ncmFtSUQsIDEwMjQsICZsZW4sIGluZm9Mb2cpKTsKKyAgICB9CisKKyAgICBQcm9ncmFtSW5m
byBwcm9ncmFtc1tOdW1Qcm9ncmFtc107CisKK30gZ1NoYWRlckluZm87CisKKyNkZWZpbmUgVEVY
TUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKHByb2csIHZhcikgXAorICAgICAgICAgICAgaWYg
KGdTaGFkZXJJbmZvLmdldFVuaWZvcm1Mb2NhdGlvbihUZXhtYXBTaGFkZXJJbmZvOjpwcm9nIyNQ
cm9ncmFtLCBUZXhtYXBTaGFkZXJJbmZvOjp2YXIjI1ZhcmlhYmxlLCAjdmFyKSA8IDApIFwKKyAg
ICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZG4ndCBmaW5kIHZhcmlhYmxlICIjdmFy
IiBpbiBwcm9ncmFtICIjcHJvZyJcbiIpOworI2RlZmluZSBURVhNQVBfQlVJTERfU0hBREVSKHBy
b2dyYW0pIGdTaGFkZXJJbmZvLmNyZWF0ZVNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNl
IyNwcm9ncmFtLCBmcmFnbWVudFNoYWRlclNvdXJjZSMjcHJvZ3JhbSwgVGV4bWFwU2hhZGVySW5m
bzo6cHJvZ3JhbSMjUHJvZ3JhbSk7CisKK1RleHR1cmVNYXBwZXJHTDo6VGV4dHVyZU1hcHBlckdM
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKKyAgICA6IFRleHR1cmVNYXBwZXIoY29udGV4dCkK
KyAgICAsIG1fY3VyUHJvZ3JhbShUZXhtYXBTaGFkZXJJbmZvOjpUYXJnZXRQcm9ncmFtKQorewor
ICAgIHN0YXRpYyBib29sIHNoYWRlcnNDb21waWxlZCA9IGZhbHNlOworICAgIGlmIChzaGFkZXJz
Q29tcGlsZWQpCisgICAgICAgIHJldHVybjsKKyAgICBzaGFkZXJzQ29tcGlsZWQgPSB0cnVlOwor
I2lmbmRlZiBURVhNQVBfT1BFTkdMX0VTMgorI2RlZmluZSBPRVMyX1BFUkNJU0lPTl9ERUZJTklU
SU9OUyBcCisgICAgIiNkZWZpbmUgbG93cFxuI2RlZmluZSBoaWdocFxuIgorI2Vsc2UKKyNkZWZp
bmUgT0VTMl9QRVJDSVNJT05fREVGSU5JVElPTlMKKyNlbmRpZgorCisgICAgY29uc3QgY2hhciog
ZnJhZ21lbnRTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9CisgICAgICAgICAgICBPRVMyX1BF
UkNJU0lPTl9ERUZJTklUSU9OUworIiAgICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIFNv
dXJjZVRleHR1cmUsIE1hc2tUZXh0dXJlOyAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAg
ICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IE9wYWNpdHk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hw
IHZlYzIgT3V0VGV4Q29vcmRTb3VyY2UsIE91dFRleENvb3JkTWFzazsgICAgICAgICAgICAgIFxu
IgorIiAgICAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcbiIKKyIgICAgICAgICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJE
KFNvdXJjZVRleHR1cmUsIE91dFRleENvb3JkU291cmNlKTsgIFxuIgorIiAgICAgICAgICAgICAg
ICAgICBsb3dwIHZlYzQgbWFza0NvbG9yID0gdGV4dHVyZTJEKE1hc2tUZXh0dXJlLCBPdXRUZXhD
b29yZE1hc2spOyAgXG4iCisiICAgICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgbyA9IE9wYWNp
dHkgKiBtYXNrQ29sb3IuYTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAg
ICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBvLCBjb2xvci5hICog
byk7ICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOwor
CisgICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2sgPQorICAg
ICAgICAgICAgT0VTMl9QRVJDSVNJT05fREVGSU5JVElPTlMKKyIgICAgICAgICAgICAgICB1bmlm
b3JtIG1hdDQgSW5NYXRyaXgsIEluU291cmNlTWF0cml4LCBJbk1hc2tNYXRyaXg7ICAgICAgICAg
ICAgXG4iCisiICAgICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgSW5WZXJ0ZXg7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZhcnlp
bmcgaGlnaHAgdmVjMiBPdXRUZXhDb29yZFNvdXJjZSwgT3V0VGV4Q29vcmRNYXNrOyAgICAgICAg
ICBcbiIKKyIgICAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFxuIgorIiAgICAgICAgICAgICAgICAgICBPdXRUZXhDb29yZFNvdXJjZSA9IHZlYzIoSW5Tb3Vy
Y2VNYXRyaXggKiBJblZlcnRleCk7ICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICAgICAgT3V0
VGV4Q29vcmRNYXNrID0gdmVjMihJbk1hc2tNYXRyaXggKiBJblZlcnRleCk7ICAgICAgICAgICAg
XG4iCisiICAgICAgICAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gSW5NYXRyaXggKiBJblZlcnRl
eDsgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
biI7CisKKyAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVNpbXBsZSA9CisgICAg
ICAgICAgICBPRVMyX1BFUkNJU0lPTl9ERUZJTklUSU9OUworIiAgICAgICAgICAgICAgIHVuaWZv
cm0gc2FtcGxlcjJEIFNvdXJjZVRleHR1cmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXG4iCisiICAgICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IE9wYWNpdHk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAg
ICB2YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0VGV4Q29vcmRTb3VyY2U7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAg
ICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICAgICAgbG93cCB2ZWM0IGNv
bG9yID0gdGV4dHVyZTJEKFNvdXJjZVRleHR1cmUsIE91dFRleENvb3JkU291cmNlKTsgIFxuIgor
IiAgICAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIE9wYWNp
dHksIGNvbG9yLmEgKiBPcGFjaXR5KTsgICAgXG4iCisiICAgICAgICAgICAgICAgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcbiI7CisKKyAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUgPQorICAg
ICAgICAgICAgT0VTMl9QRVJDSVNJT05fREVGSU5JVElPTlMKKyIgICAgICAgICAgICAgICB1bmlm
b3JtIG1hdDQgSW5NYXRyaXgsIEluU291cmNlTWF0cml4OyAgICAgICAgICAgICAgICAgICAgICBc
biIKKyIgICAgICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBJblZlcnRleDsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hw
IHZlYzIgT3V0VGV4Q29vcmRTb3VyY2U7ICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAg
ICAgICAgICAgICB2b2lkIG1haW4odm9pZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAg
ICAgICAgT3V0VGV4Q29vcmRTb3VyY2UgPSB2ZWMyKEluU291cmNlTWF0cml4ICogSW5WZXJ0ZXgp
OyAgICBcbiIKKyIgICAgICAgICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSBJbk1hdHJpeCAqIElu
VmVydGV4OyAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7
CisKKyAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVRhcmdldCA9CisgICAgICAg
ICAgICBPRVMyX1BFUkNJU0lPTl9ERUZJTklUSU9OUworIiAgICAgICAgICAgICAgIHVuaWZvcm0g
c2FtcGxlcjJEIFNvdXJjZVRleHR1cmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgT3BhY2l0
eTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisi
ICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIE91dFRleENvb3JkU291cmNlOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZv
aWQgbWFpbih2b2lkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XG4iCisiICAgICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRChTb3Vy
Y2VUZXh0dXJlLCBPdXRUZXhDb29yZFNvdXJjZSk7ICAgICAgICAgIFxuIgorIiAgICAgICAgICAg
ICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLmJnciAqIE9wYWNpdHksIGNvbG9yLmEg
KiBPcGFjaXR5KTsgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXG4iOworCisgICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlVGFyZ2V0ID0g
dmVydGV4U2hhZGVyU291cmNlU2ltcGxlOworCisgICAgVEVYTUFQX0JVSUxEX1NIQURFUihTaW1w
bGUpCisgICAgVEVYTUFQX0JVSUxEX1NIQURFUihPcGFjaXR5QW5kTWFzaykKKyAgICBURVhNQVBf
QlVJTERfU0hBREVSKFRhcmdldCkKKworICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElP
TihPcGFjaXR5QW5kTWFzaywgSW5NYXRyaXgpCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xP
Q0FUSU9OKE9wYWNpdHlBbmRNYXNrLCBJblNvdXJjZU1hdHJpeCkKKyAgICBURVhNQVBfR0VUX1NI
QURFUl9WQVJfTE9DQVRJT04oT3BhY2l0eUFuZE1hc2ssIEluTWFza01hdHJpeCkKKyAgICBURVhN
QVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oT3BhY2l0eUFuZE1hc2ssIFNvdXJjZVRleHR1cmUp
CisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKE9wYWNpdHlBbmRNYXNrLCBNYXNr
VGV4dHVyZSkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oT3BhY2l0eUFuZE1h
c2ssIE9wYWNpdHkpCisKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oU2ltcGxl
LCBJblNvdXJjZU1hdHJpeCkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oU2lt
cGxlLCBJbk1hdHJpeCkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oU2ltcGxl
LCBTb3VyY2VUZXh0dXJlKQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihTaW1w
bGUsIE9wYWNpdHkpCisKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oVGFyZ2V0
LCBJblNvdXJjZU1hdHJpeCkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oVGFy
Z2V0LCBJbk1hdHJpeCkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oVGFyZ2V0
LCBTb3VyY2VUZXh0dXJlKQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihUYXJn
ZXQsIE9wYWNpdHkpCit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25z
dCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBj
b25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkKK3sKKyAgICBjb25zdCBCaXRtYXBUZXh0
dXJlR0wmIHRleHR1cmVHTCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KHRl
eHR1cmUpOworICAgIGlmICghdGV4dHVyZS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFRleG1hcFNoYWRlckluZm86OlNoYWRlclByb2dyYW1JbmRleCBwcm9ncmFtOworICAgIGlm
IChtYXNrVGV4dHVyZSkKKyAgICAgICAgcHJvZ3JhbSA9IFRleG1hcFNoYWRlckluZm86Ok9wYWNp
dHlBbmRNYXNrUHJvZ3JhbTsKKyAgICBlbHNlCisgICAgICAgIHByb2dyYW0gPSBUZXhtYXBTaGFk
ZXJJbmZvOjpTaW1wbGVQcm9ncmFtOworCisgICAgY29uc3QgVGV4bWFwU2hhZGVySW5mbzo6UHJv
Z3JhbUluZm8mIHByb2dyYW1JbmZvID0gZ1NoYWRlckluZm8ucHJvZ3JhbXNbcHJvZ3JhbV07Cisg
ICAgaWYgKG1fY3VyUHJvZ3JhbSAhPSBwcm9ncmFtKSB7CisgICAgICAgIEdMX0NNRChnbFVzZVBy
b2dyYW0ocHJvZ3JhbUluZm8uaWQpKQorICAgICAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkoZ1NoYWRlckluZm8ucHJvZ3JhbXNbbV9jdXJQcm9ncmFtXS52YXJzW1RleG1hcFNo
YWRlckluZm86OkluVmVydGV4VmFyaWFibGVdKSkKKyAgICAgICAgbV9jdXJQcm9ncmFtID0gcHJv
Z3JhbTsKKyAgICAgICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbUlu
Zm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblZlcnRleFZhcmlhYmxlXSkpCisgICAgfQorCisg
ICAgR0xfQ01EKGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKSkKKyAgICBHTF9DTUQoZ2xEaXNhYmxl
KEdMX1NURU5DSUxfVEVTVCkpCisKKyAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRV
UkUwKSkKKyAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlR0wu
bV9pZCkpCisgICAgR0xfQ01EKGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDApKQorICAg
IGNvbnN0IEdMZmxvYXQgdW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKKyAg
ICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwg
MCwgdW5pdFJlY3QpKQorCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNm
b3JtYXRpb25NYXRyaXgobV9wcm9qZWN0aW9uTWF0cml4KS5tdWx0TGVmdChtb2RlbFZpZXdNYXRy
aXgpLm11bHRMZWZ0KFRyYW5zZm9ybWF0aW9uTWF0cml4KAorICAgICAgICAgICAgdGFyZ2V0UmVj
dC53aWR0aCgpLCAwLCAwLCAwLAorICAgICAgICAgICAgMCwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwg
MCwgMCwKKyAgICAgICAgICAgIDAsIDAsIDEsIDAsCisgICAgICAgICAgICB0YXJnZXRSZWN0Lngo
KSwgdGFyZ2V0UmVjdC55KCksIDAsIDEpKTsKKworICAgIGNvbnN0IEdMZmxvYXQgbTRbXSA9IHsK
KyAgICAgICAgbWF0cml4Lm0xMSgpLCBtYXRyaXgubTEyKCksIG1hdHJpeC5tMTMoKSwgbWF0cml4
Lm0xNCgpLAorICAgICAgICBtYXRyaXgubTIxKCksIG1hdHJpeC5tMjIoKSwgbWF0cml4Lm0yMygp
LCBtYXRyaXgubTI0KCksCisgICAgICAgIG1hdHJpeC5tMzEoKSwgbWF0cml4Lm0zMigpLCBtYXRy
aXgubTMzKCksIG1hdHJpeC5tMzQoKSwKKyAgICAgICAgbWF0cml4Lm00MSgpLCBtYXRyaXgubTQy
KCksIG1hdHJpeC5tNDMoKSwgbWF0cml4Lm00NCgpCisgICAgfTsKKyAgICBjb25zdCBHTGZsb2F0
IG00c3JjW10gPSB7dGV4dHVyZUdMLm1fcmVsYXRpdmVTaXplLndpZHRoKCksIDAsIDAsIDAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgdGV4dHVyZUdMLm1fcmVsYXRp
dmVTaXplLmhlaWdodCgpLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsIDAsIDEsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwg
MCwgMCwgMX07CisgICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJz
W1RleG1hcFNoYWRlckluZm86OkluTWF0cml4VmFyaWFibGVdLCAxLCBHTF9GQUxTRSwgbTQpKQor
ICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFk
ZXJJbmZvOjpJblNvdXJjZU1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00c3JjKSkKKyAg
ICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpT
b3VyY2VUZXh0dXJlVmFyaWFibGVdLCAwKSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3Jh
bUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpPcGFjaXR5VmFyaWFibGVdLCBvcGFjaXR5KSkK
KworICAgIGlmIChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpKSB7CisgICAg
ICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCogbWFza1RleHR1cmVHTCA9IHN0YXRpY19jYXN0PGNv
bnN0IEJpdG1hcFRleHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsKKyAgICAgICAgR0xfQ01EKGdsQWN0
aXZlVGV4dHVyZShHTF9URVhUVVJFMSkpCisgICAgICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1hc2tUZXh0dXJlR0wtPm1faWQpKQorICAgICAgICBjb25zdCBHTGZsb2F0
IG00bWFza1tdID0ge21hc2tUZXh0dXJlR0wtPm1fcmVsYXRpdmVTaXplLndpZHRoKCksIDAsIDAs
IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIG1hc2tUZXh0
dXJlR0wtPm1fcmVsYXRpdmVTaXplLmhlaWdodCgpLCAwLCAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAxfTsKKyAgICAgICAgZ2xVbmlmb3JtTWF0cml4
NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5NYXNrTWF0cml4VmFyaWFi
bGVdLCAxLCBHTF9GQUxTRSwgbTRtYXNrKTsKKyAgICAgICAgR0xfQ01EKGdsVW5pZm9ybTFpKHBy
b2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6TWFza1RleHR1cmVWYXJpYWJsZV0sIDEp
KQorICAgICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKSkKKyAgICB9CisK
KworICAgIGlmICh0ZXh0dXJlR0wubV9vcGFxdWUgJiYgb3BhY2l0eSA+IDAuOTkgJiYgIW1hc2tU
ZXh0dXJlKQorICAgICAgICBHTF9DTUQoZ2xEaXNhYmxlKEdMX0JMRU5EKSkKKyAgICBlbHNlIHsK
KyAgICAgICAgR0xfQ01EKGdsQmxlbmRGdW5jKEdMX09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBI
QSkpCisgICAgICAgIEdMX0NNRChnbEVuYWJsZShHTF9CTEVORCkpCisgICAgfQorCisgICAgR0xf
Q01EKGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpKQorfQorCisKK2NvbnN0IGNo
YXIqIFRleHR1cmVNYXBwZXJHTDo6dHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICJPcGVuR0wi
OworfQorCit2b2lkIEJpdG1hcFRleHR1cmVHTDo6cmVzZXQoY29uc3QgSW50U2l6ZSYgbmV3U2l6
ZSwgYm9vbCBvcGFxdWUpCit7CisgICAgQml0bWFwVGV4dHVyZTo6cmVzZXQobmV3U2l6ZSwgb3Bh
cXVlKTsKKyAgICBtX2ltYWdlID0gMDsKKyAgICBJbnRTaXplIG5ld1RleHR1cmVTaXplID0gbnBv
dChuZXdTaXplKTsKKyAgICBib29sIGp1c3RDcmVhdGVkID0gZmFsc2U7CisgICAgaWYgKCFtX2lk
KSB7CisgICAgICAgIEdMX0NNRChnbEdlblRleHR1cmVzKDEsICZtX2lkKSkKKyAgICAgICAganVz
dENyZWF0ZWQgPSB0cnVlOworICAgIH0KKworICAgIGlmIChqdXN0Q3JlYXRlZCB8fCBuZXdUZXh0
dXJlU2l6ZS53aWR0aCgpID4gbV90ZXh0dXJlU2l6ZS53aWR0aCgpIHx8IG5ld1RleHR1cmVTaXpl
LmhlaWdodCgpID4gbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSkgeworICAgICAgICBtX3RleHR1cmVT
aXplID0gbmV3VGV4dHVyZVNpemU7CisgICAgICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfMkQsIG1faWQpKQorICAgICAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKSkKKyAgICAgICAgR0xfQ01E
KGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdM
X0xJTkVBUikpCisgICAgICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwg
R0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpKQorICAgICAgICBHTF9DTUQoZ2xU
ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9U
T19FREdFKSkKKyAgICAgICAgR0xfQ01EKGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBH
TF9SR0JBLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCksIDAs
IEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApKQorICAgIH0KKyAgICBtX2FjdHVhbFNpemUg
PSBuZXdTaXplOworICAgIG1fcmVsYXRpdmVTaXplID0gRmxvYXRTaXplKGZsb2F0KG5ld1NpemUu
d2lkdGgoKSkgLyBtX3RleHR1cmVTaXplLndpZHRoKCksIGZsb2F0KG5ld1NpemUuaGVpZ2h0KCkp
IC8gbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CisgICAgbV9vcGFxdWUgPSBvcGFxdWU7CisgICAg
bV9zdXJmYWNlTmVlZHNSZXNldCA9IHRydWU7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KiBCaXRtYXBUZXh0dXJlR0w6OmJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQor
eworICAgIG1fYnVmZmVyID0gUkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI6OmNyZWF0ZSgpOwor
ICAgIG1fZGlydHlSZWN0ID0gZGlydHlSZWN0OworICAgIHJldHVybiBtX2J1ZmZlci0+YmVnaW5Q
YWludChkaXJ0eVJlY3QsIG1fb3BhcXVlKTsKK30KKwordm9pZCBCaXRtYXBUZXh0dXJlR0w6OmVu
ZFBhaW50KCkKK3sKKyAgICBpZiAoIW1fYnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgbV9i
dWZmZXItPmVuZFBhaW50KCk7CisgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgbV9pZCkpCisgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBt
X2RpcnR5UmVjdC54KCksIG1fZGlydHlSZWN0LnkoKSwgbV9kaXJ0eVJlY3Qud2lkdGgoKSwgbV9k
aXJ0eVJlY3QuaGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIG1fYnVmZmVyLT5k
YXRhKCkpKQorICAgIG1fYnVmZmVyLmNsZWFyKCk7Cit9CisKK3N0cnVjdCBUZXhtYXBHTFNoYWRl
clRleHR1cmVzIHsKKyAgICBzdHJ1Y3QgRW50cnkgeworICAgICAgICBHTHVpbnQgdGV4dHVyZTsK
KyAgICAgICAgaW50IHJlZkNvdW50OworICAgIH07CisgICAgSGFzaE1hcDxOYXRpdmVJbWFnZVB0
ciwgRW50cnk+IGltYWdlVG9UZXh0dXJlOworICAgIEdMdWludCBmaW5kT3JDcmVhdGUoTmF0aXZl
SW1hZ2VQdHIgaW1hZ2UsIGJvb2wmIGZvdW5kKQorICAgIHsKKyAgICAgICAgSGFzaE1hcDxOYXRp
dmVJbWFnZVB0ciwgRW50cnk+OjppdGVyYXRvciBpdCA9IGltYWdlVG9UZXh0dXJlLmZpbmQoaW1h
Z2UpOworICAgICAgICBmb3VuZCA9IGZhbHNlOworICAgICAgICBpZiAoaXQgIT0gaW1hZ2VUb1Rl
eHR1cmUuZW5kKCkpIHsKKyAgICAgICAgICAgIGl0LT5zZWNvbmQucmVmQ291bnQrKzsKKyAgICAg
ICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kLnRleHR1
cmU7CisgICAgICAgIH0KKyAgICAgICAgRW50cnkgZW50cnk7CisgICAgICAgIEdMX0NNRChnbEdl
blRleHR1cmVzKDEsICZlbnRyeS50ZXh0dXJlKSk7CisgICAgICAgIGVudHJ5LnJlZkNvdW50ID0g
MTsKKyAgICAgICAgaW1hZ2VUb1RleHR1cmUuYWRkKGltYWdlLCBlbnRyeSk7CisgICAgICAgIHJl
dHVybiBlbnRyeS50ZXh0dXJlOworICAgIH0KKworICAgIGJvb2wgZGVyZWYoTmF0aXZlSW1hZ2VQ
dHIgaW1hZ2UpCisgICAgeworICAgICAgICBIYXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBFbnRyeT46
Oml0ZXJhdG9yIGl0ID0gaW1hZ2VUb1RleHR1cmUuZmluZChpbWFnZSk7CisgICAgICAgIGlmIChp
dCAhPSBpbWFnZVRvVGV4dHVyZS5lbmQoKSkgeworICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQu
cmVmQ291bnQgPCAyKSB7CisgICAgICAgICAgICAgICAgaW1hZ2VUb1RleHR1cmUucmVtb3ZlKGl0
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKworc3RhdGljIFRleG1hcEdMU2hh
ZGVyVGV4dHVyZXMgZ1RleHR1cmVSZXBvc2l0b3J5OworCit2b2lkIEJpdG1hcFRleHR1cmVHTDo6
c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKK3sKKyAgICBOYXRpdmVJbWFnZVB0ciBu
YXRpdmVJbWFnZSA9IGltYWdlID8gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkg
OiAwOworICAgIGlmICghaW1hZ2UgfHwgIW5hdGl2ZUltYWdlKSB7CisgICAgICAgIGlmIChtX2lt
YWdlKQorICAgICAgICAgICAgZGVzdHJveSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKG5hdGl2ZUltYWdlID09IG1faW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBib29s
IGZvdW5kID0gZmFsc2U7CisgICAgR0x1aW50IG5ld1RleHR1cmVJRCA9IGdUZXh0dXJlUmVwb3Np
dG9yeS5maW5kT3JDcmVhdGUobmF0aXZlSW1hZ2UsIGZvdW5kKTsKKyAgICBpZiAobmV3VGV4dHVy
ZUlEICE9IG1faWQpIHsKKyAgICAgICAgZGVzdHJveSgpOworICAgICAgICBtX2lkID0gbmV3VGV4
dHVyZUlEOworICAgICAgICByZXNldChpbWFnZS0+c2l6ZSgpLCBmYWxzZSk7CisgICAgICAgIG1f
aW1hZ2UgPSBuYXRpdmVJbWFnZTsKKyAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAg
R3JhcGhpY3NDb250ZXh0IGNvbnRleHQoYmVnaW5QYWludChJbnRSZWN0KDAsIDAsIG1fdGV4dHVy
ZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSkpKTsKKyAgICAgICAgICAgIGNv
bnRleHQuZHJhd0ltYWdlKGltYWdlLCBEZXZpY2VDb2xvclNwYWNlLCBJbnRQb2ludCgwLCAwKSwg
Q29tcG9zaXRlQ29weSk7CisgICAgICAgICAgICBlbmRQYWludCgpOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIEJpdG1hcFRleHR1cmVHTDo6ZGVzdHJveSgpCit7CisgICAgaWYgKG1faWQg
JiYgKCFtX2ltYWdlIHx8ICFnVGV4dHVyZVJlcG9zaXRvcnkuZGVyZWYobV9pbWFnZSkpKQorICAg
ICAgICBHTF9DTUQoZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9pZCkpCisgICAgaWYgKG1fZmJvKQor
ICAgICAgICBHTF9DTUQoZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKSkKKworICAgIG1f
ZmJvID0gMDsKKyAgICBtX2lkID0gMDsKKyAgICBtX3RleHR1cmVTaXplID0gSW50U2l6ZSgpOwor
ICAgIG1fcmVsYXRpdmVTaXplID0gRmxvYXRTaXplKDEsIDEpOworfQorCitib29sIEJpdG1hcFRl
eHR1cmVHTDo6aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faWQ7Cit9CisKK0ludFNp
emUgQml0bWFwVGV4dHVyZUdMOjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90ZXh0dXJl
U2l6ZTsKK30KKworc3RhdGljIGlubGluZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjcmVhdGVQcm9q
ZWN0aW9uTWF0cml4KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgZmxpcCkKK3sKKyAgICByZXR1
cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgoMi4wIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSwgMCwgMCwg
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgKGZsaXAgPyAtMi4wIDogMi4w
KSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCAwLCAtMC4wMDAwMDEsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC0xLCBmbGlwID8gMSA6IC0xLCAwLCAxKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyR0w6
OmNsZWFudXAoKQoreworfQorCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmluZFN1cmZhY2UoQml0
bWFwVGV4dHVyZSAqc3VyZmFjZVBvaW50ZXIpCit7CisgICAgQml0bWFwVGV4dHVyZUdMKiBzdXJm
YWNlID0gc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVyZUdMKj4oc3VyZmFjZVBvaW50ZXIpOworCisg
ICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm47CisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggbWF0cml4ID0gY3JlYXRlUHJvamVjdGlvbk1hdHJpeChzdXJmYWNlLT5zaXplKCksIGZhbHNl
KTsKKyAgICBtYXRyaXgudHJhbnNsYXRlKC1zdXJmYWNlLT5vZmZzZXQoKS54KCksIC1zdXJmYWNl
LT5vZmZzZXQoKS55KCkpOworCisgICAgaWYgKHN1cmZhY2UtPm1fc3VyZmFjZU5lZWRzUmVzZXQg
fHwgIXN1cmZhY2UtPm1fZmJvKSB7CisgICAgICAgIGlmICghc3VyZmFjZS0+bV9mYm8pCisgICAg
ICAgICAgICBHTF9DTUQoZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJnN1cmZhY2UtPm1fZmJvKSkKKyAg
ICAgICAgR0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBzdXJmYWNlLT5t
X2ZibykpCisgICAgICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApKQor
ICAgICAgICBHTF9DTUQoZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xf
Q09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIHN1cmZhY2UtPm1faWQsIDApKQorICAg
ICAgICBHTF9DTUQoZ2xDbGVhckNvbG9yKDAsIDAsIDAsIDApKQorICAgICAgICBHTF9DTUQoZ2xD
bGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKSkKKyAgICAgICAgc3VyZmFjZS0+bV9zdXJmYWNlTmVl
ZHNSZXNldCA9IGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICAgIEdMX0NNRChnbEJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgc3VyZmFjZS0+bV9mYm8pKQorICAgIH0KKworICAgIEdM
X0NNRChnbFZpZXdwb3J0KDAsIDAsIHN1cmZhY2UtPnNpemUoKS53aWR0aCgpLCBzdXJmYWNlLT5z
aXplKCkuaGVpZ2h0KCkpKQorICAgIG1fcHJvamVjdGlvbk1hdHJpeCA9IG1hdHJpeDsKK30KKwor
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OnNldENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAg
ICBHTF9DTUQoZ2xTY2lzc29yKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0
LmhlaWdodCgpKSkKKyAgICBHTF9DTUQoZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKSkKK30KKwor
Cit2b2lkIFRleHR1cmVNYXBwZXJHTDo6cGFpbnRUb1RhcmdldChjb25zdCBCaXRtYXBUZXh0dXJl
JiBhU3VyZmFjZSwgY29uc3QgSW50U2l6ZSYgc3VyZmFjZVNpemUsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIGNvbnN0IEludFJlY3QmIHZpc2li
bGVSZWN0KQoreworICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCYgc3VyZmFjZSA9IHN0YXRpY19j
YXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KGFTdXJmYWNlKTsKKworICAgIC8vIENyZWF0ZSB0
aGUgbW9kZWwtdmlldy1wcm9qZWN0aW9uIG1hdHJpeCB0byBkaXNwbGF5IG9uIHNjcmVlbi4KKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KHN1
cmZhY2VTaXplLCB0cnVlKS5tdWx0TGVmdCh0cmFuc2Zvcm0pLm11bHRMZWZ0KAorICAgICAgICAg
ICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KAorICAgICAgICAgICAgICAgICAgICAgICAgc3Vy
ZmFjZS5tX2FjdHVhbFNpemUud2lkdGgoKSwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIDAsIHN1cmZhY2UubV9hY3R1YWxTaXplLmhlaWdodCgpLCAwLCAwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgMCwgMSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1cmZhY2Uu
b2Zmc2V0KCkueCgpLCBzdXJmYWNlLm9mZnNldCgpLnkoKSwgMCwgMQorICAgICAgICAgICAgICAg
ICkKKyAgICAgICAgICAgICk7CisKKyAgICBjb25zdCBHTGZsb2F0IG00W10gPSB7CisgICAgICAg
IG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0xMigpLCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQoKSwK
KyAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRyaXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0cml4
Lm0yNCgpLAorICAgICAgICBtYXRyaXgubTMxKCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0zMygp
LCBtYXRyaXgubTM0KCksCisgICAgICAgIG1hdHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBtYXRy
aXgubTQzKCksIG1hdHJpeC5tNDQoKQorICAgIH07CisKKyAgICBjb25zdCBHTGZsb2F0IG00c3Jj
W10gPSB7c3VyZmFjZS5tX3JlbGF0aXZlU2l6ZS53aWR0aCgpLCAwLCAwLCAwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHN1cmZhY2UubV9yZWxhdGl2ZVNpemUuaGVp
Z2h0KCksIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwg
MSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAxfTsK
KworICAgIC8vIFdlIGFscmVhZHkgYmxlbmRlZCB0aGUgYWxwaGEgaW47IHRoZSByZXN1bHQgaXMg
cHJlbXVsdGlwbGllZC4KKyAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKGdTaGFkZXJJbmZvLnByb2dy
YW1zW1RleG1hcFNoYWRlckluZm86OlRhcmdldFByb2dyYW1dLmlkKSkKKyAgICBHTF9DTUQoZ2xC
aW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApKQorICAgIEdMX0NNRChnbFZpZXdwb3J0
KDAsIDAsIHN1cmZhY2VTaXplLndpZHRoKCksIHN1cmZhY2VTaXplLmhlaWdodCgpKSkKKyAgICBH
TF9DTUQoZ2xEaXNhYmxlKEdMX1NURU5DSUxfVEVTVCkpCisgICAgY29uc3QgVGV4bWFwU2hhZGVy
SW5mbzo6UHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvID0gZ1NoYWRlckluZm8ucHJvZ3JhbXNbVGV4
bWFwU2hhZGVySW5mbzo6VGFyZ2V0UHJvZ3JhbV07CisgICAgR0xfQ01EKGdsVW5pZm9ybTFmKHBy
b2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6T3BhY2l0eVZhcmlhYmxlXSwgb3BhY2l0
eSkpCisgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpCisgICAgR0xfQ01E
KGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgc3VyZmFjZS5tX2lkKSkKKyAgICBHTF9DTUQo
Z2xVbmlmb3JtMWkocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpTb3VyY2VUZXh0
dXJlVmFyaWFibGVdLCAwKSkKKyAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShw
cm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OkluVmVydGV4VmFyaWFibGVdKSkKKyAg
ICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVy
SW5mbzo6SW5NYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNCkpCisgICAgR0xfQ01EKGds
VW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OkluU291
cmNlTWF0cml4VmFyaWFibGVdLCAxLCBHTF9GQUxTRSwgbTRzcmMpKQorICAgIEdMX0NNRChnbEJp
bmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCAwKSkKKyAgICBjb25zdCBHTGZsb2F0IHVuaXRSZWN0
W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07CisgICAgR0xfQ01EKGdsVmVydGV4QXR0cmli
UG9pbnRlcigwLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHVuaXRSZWN0KSkKKyAgICBHTF9D
TUQoZ2xCbGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKSkKKyAgICBHTF9D
TUQoZ2xFbmFibGUoR0xfQkxFTkQpKQorICAgIHNldENsaXAodmlzaWJsZVJlY3QpOworCisgICAg
R0xfQ01EKGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpKQorICAgIEdMX0NNRChn
bERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlcklu
Zm86OkluVmVydGV4VmFyaWFibGVdKSkKKyAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKDApKQorICAg
IEdMX0NNRChnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCAwKSkKKyAgICBtX2N1clByb2dy
YW0gPSBUZXhtYXBTaGFkZXJJbmZvOjpUYXJnZXRQcm9ncmFtOworfQorCitQYXNzUmVmUHRyPEJp
dG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlVGV4dHVyZSgpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBCaXRtYXBUZXh0dXJlR0woKSk7Cit9CisKK307CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNDI0YzQKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaApAQCAtMCww
ICsxLDg0IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBUZXh0dXJlTWFwcGVyR0xfaAorI2RlZmluZSBUZXh0dXJlTWFwcGVyR0xfaAorCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5j
bHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5j
bHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisv
LyBBbiBPcGVuR0wtRVMyIGltcGxlbWVudGF0aW9uIG9mIFRleHR1cmVNYXBwZXIuCitjbGFzcyBU
ZXh0dXJlTWFwcGVyR0wgOiBwdWJsaWMgVGV4dHVyZU1hcHBlciB7CitwdWJsaWM6CisgICAgVGV4
dHVyZU1hcHBlckdMKEdyYXBoaWNzQ29udGV4dCogZ2MpOworICAgIHZpcnR1YWwgflRleHR1cmVN
YXBwZXJHTCgpIHt9CisKKyAgICAvLyByZWltcHMgZnJvbSBUZXh0dXJlTWFwcGVyCisgICAgdmly
dHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0
IEludFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBv
cGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7CisgICAgdmlydHVhbCB2
b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRDbGlwKGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1Rhcmdl
dChjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpOwor
ICAgIHZpcnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJl
KCk7CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiB0eXBlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIGNsZWFudXAoKTsKKworcHJpdmF0ZToKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3By
b2plY3Rpb25NYXRyaXg7CisgICAgaW50IG1fY3VyUHJvZ3JhbTsKK307CisKKy8vIEFuIG9mZnNj
cmVlbiBidWZmZXIgdG8gYmUgcmVuZGVyZWQgYnkgc29mdHdhcmUuCitjbGFzcyBSR0JBMzJQcmVt
dWx0aW1wbGllZEJ1ZmZlciA6IHB1YmxpYyBSZWZDb3VudGVkPFJHQkEzMlByZW11bHRpbXBsaWVk
QnVmZmVyPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UkdCQTMyUHJlbXVsdGltcGxpZWRCdWZm
ZXIoKSB7fQorICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQo
Y29uc3QgSW50UmVjdCYgZGlydHlSZWN0LCBib29sIG9wYXF1ZSkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBlbmRQYWludCgpID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25z
dCA9IDA7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI+
IGNyZWF0ZSgpOworfTsKKworLy8gTmV4dCBwb3dlciBvZiB0d28uCitzdGF0aWMgaW5saW5lIGlu
dCBucG90KGludCBudW0pCit7CisgICAgZm9yIChpbnQgaSA9IDB4MTAwMDAwMDA7IGkgPiAwOyBp
ID4+PSAxKSB7CisgICAgICAgIGlmIChudW0gPT0gaSkKKyAgICAgICAgICAgIHJldHVybiBudW07
CisgICAgICAgIGlmIChudW0gJiBpKQorICAgICAgICAgICAgcmV0dXJuIChpIDw8IDEpOworICAg
IH0KKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSBJbnRTaXplIG5wb3QoY29uc3Qg
SW50U2l6ZSYgcykKK3sKKyAgICByZXR1cm4gSW50U2l6ZShucG90KHMud2lkdGgoKSksIG5wb3Qo
cy5oZWlnaHQoKSkpOworfQorCit9OworCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNDkxYzg4NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcApAQCAtMCwwICsxLDIyNCBA
QAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlci5oIgorCisjaW5jbHVkZSAiUXRD
b3JlL3FkZWJ1Zy5oIgorI2luY2x1ZGUgIlF0R3VpL3FwYWludGVuZ2luZS5oIgorI2luY2x1ZGUg
IlF0R3VpL3FwaXhtYXAuaCIKKworI2lmZGVmIFFUX09QRU5HTF9MSUIKKyMgaW5jbHVkZSAib3Bl
bmdsL1RleHR1cmVNYXBwZXJHTC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQml0bWFwVGV4dHVyZVF0IDogcHVibGljIEJpdG1hcFRleHR1cmUgeworICAgIGZyaWVu
ZCBjbGFzcyBUZXh0dXJlTWFwcGVyUXQ7CitwdWJsaWM6CisgICAgQml0bWFwVGV4dHVyZVF0KCkg
e30KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOworICAgIHZpcnR1YWwgSW50U2l6ZSBzaXpl
KCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZShtX3BpeG1hcC53aWR0aCgpLCBtX3BpeG1hcC5oZWln
aHQoKSk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoY29uc3QgSW50U2l6ZSYsIGJvb2wgb3Bh
cXVlKTsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50KGNv
bnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CisgICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCk7Cisg
ICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOworICAgIHZpcnR1YWwg
Ym9vbCBzYXZlKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgdmlydHVhbCBib29sIGlzVmFsaWQo
KSBjb25zdCB7IHJldHVybiAhbV9waXhtYXAuaXNOdWxsKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
YWxsb3dPZmZsaW5lVGV4dHVyZVVwbG9hZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICBJ
bnRSZWN0IHNvdXJjZVJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KDAsIDAsIGNvbnRlbnRT
aXplKCkud2lkdGgoKSwgY29udGVudFNpemUoKS5oZWlnaHQoKSk7IH0KK3ByaXZhdGU6CisgICAg
UVBhaW50ZXIgbV9wYWludGVyOworICAgIFFQaXhtYXAgbV9waXhtYXA7Cit9OworCitjbGFzcyBU
ZXh0dXJlTWFwcGVyUXQgOiBwdWJsaWMgVGV4dHVyZU1hcHBlciB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0
IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgs
IGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSk7CisgICAgdmly
dHVhbCB2b2lkIHNldENsaXAoY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBhbGxv
d1N1cmZhY2VGb3JSb290KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBUZXh0dXJlTWFw
cGVyUXQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KTsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IHR5cGUoKSBjb25zdCB7IHJldHVybiAiUXQiOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJp
dG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKKworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxp
emUoUVBhaW50ZXIgKnBhaW50ZXIpCisgICAgeworICAgICAgICBwYWludGVyLT5zZXRSZW5kZXJI
aW50cyhRUGFpbnRlcjo6QW50aWFsaWFzaW5nIHwgUVBhaW50ZXI6OlNtb290aFBpeG1hcFRyYW5z
Zm9ybSwgZmFsc2UpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBRUGFpbnRlciogbV9wYWludGVy
OworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlUXQ+IG1fY3VycmVudFN1cmZhY2U7Cit9OworCit2
b2lkIEJpdG1hcFRleHR1cmVRdDo6ZGVzdHJveSgpCit7CisgICAgaWYgKG1fcGl4bWFwLnBhaW50
aW5nQWN0aXZlKCkpCisgICAgICAgIHFGYXRhbCgiRGVzdHJveWluZyBhbiBhY3RpdmUgcGl4bWFw
Iik7CisgICAgbV9waXhtYXAgPSBRUGl4bWFwKCk7Cit9CisKK3ZvaWQgQml0bWFwVGV4dHVyZVF0
OjpyZXNldChjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGlzT3BhcXVlKQoreworICAgIEJpdG1h
cFRleHR1cmU6OnJlc2V0KHNpemUsIGlzT3BhcXVlKTsKKworICAgIGlmIChzaXplLndpZHRoKCkg
PiBtX3BpeG1hcC5zaXplKCkud2lkdGgoKSB8fCBzaXplLmhlaWdodCgpID4gbV9waXhtYXAuc2l6
ZSgpLmhlaWdodCgpIHx8IG1fcGl4bWFwLmlzTnVsbCgpKQorICAgICAgICBtX3BpeG1hcCA9IFFQ
aXhtYXAoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICBpZiAoIWlzT3BhcXVlKQor
ICAgICAgICBtX3BpeG1hcC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7Cit9CisKK1BsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0KiBCaXRtYXBUZXh0dXJlUXQ6OmJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYg
ZGlydHlSZWN0KQoreworICAgIG1fcGFpbnRlci5iZWdpbigmbV9waXhtYXApOworICAgIFRleHR1
cmVNYXBwZXJRdDo6aW5pdGlhbGl6ZSgmbV9wYWludGVyKTsKKyAgICBtX3BhaW50ZXIuc2V0Q29t
cG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfQ2xlYXIpOworICAgIG1fcGFp
bnRlci5maWxsUmVjdChRUmVjdChkaXJ0eVJlY3QpLCBRdDo6dHJhbnNwYXJlbnQpOworICAgIG1f
cGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3Vy
Y2VPdmVyKTsKKyAgICByZXR1cm4gJm1fcGFpbnRlcjsKK30KKwordm9pZCBCaXRtYXBUZXh0dXJl
UXQ6OmVuZFBhaW50KCkKK3sKKyAgICBtX3BhaW50ZXIuZW5kKCk7Cit9CisKK2Jvb2wgQml0bWFw
VGV4dHVyZVF0OjpzYXZlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICByZXR1cm4gbV9waXht
YXAuc2F2ZShwYXRoLCAiUE5HIik7Cit9CisKK3ZvaWQgQml0bWFwVGV4dHVyZVF0OjpzZXRDb250
ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQoreworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJl
dHVybjsKKyAgICBjb25zdCBRUGl4bWFwKiBwaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JD
dXJyZW50RnJhbWUoKTsKKyAgICBpZiAoIXBpeG1hcCkKKyAgICAgICAgcmV0dXJuOworICAgIEJp
dG1hcFRleHR1cmU6OnJlc2V0KHBpeG1hcC0+c2l6ZSgpLCAhcGl4bWFwLT5oYXNBbHBoYUNoYW5u
ZWwoKSk7CisgICAgbV9waXhtYXAgPSAqcGl4bWFwOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJR
dDo6c2V0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgICBRUGFpbnRlciogcGFpbnRl
ciA9IG1fY3VycmVudFN1cmZhY2UgPyAmbV9jdXJyZW50U3VyZmFjZS0+bV9wYWludGVyIDogbV9w
YWludGVyOworICAgICBwYWludGVyLT5zZXRDbGlwUmVjdChyZWN0KTsKK30KKworVGV4dHVyZU1h
cHBlclF0OjpUZXh0dXJlTWFwcGVyUXQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQorICAgIDog
VGV4dHVyZU1hcHBlcihjb250ZXh0KQorICAgICwgbV9wYWludGVyKGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpKQorICAgICwgbV9jdXJyZW50U3VyZmFjZSgwKQoreworICAgIFRleHR1cmVNYXBw
ZXJRdDo6aW5pdGlhbGl6ZShtX3BhaW50ZXIpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJRdDo6
YmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSkKK3sKKyAgICBpZiAobV9jdXJyZW50
U3VyZmFjZSA9PSBzdXJmYWNlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fY3VycmVudFN1
cmZhY2UpCisgICAgICAgIG1fY3VycmVudFN1cmZhY2UtPm1fcGFpbnRlci5lbmQoKTsKKyAgICBp
ZiAoIXN1cmZhY2UpIHsKKyAgICAgICAgbV9jdXJyZW50U3VyZmFjZSA9IDA7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgQml0bWFwVGV4dHVyZVF0KiBzdXJmYWNlUXQgPSBzdGF0aWNfY2Fz
dDxCaXRtYXBUZXh0dXJlUXQqPihzdXJmYWNlKTsKKyAgICBpZiAoIXN1cmZhY2VRdC0+bV9wYWlu
dGVyLmlzQWN0aXZlKCkpCisgICAgICAgIHN1cmZhY2VRdC0+bV9wYWludGVyLmJlZ2luKCZzdXJm
YWNlUXQtPm1fcGl4bWFwKTsKKyAgICBtX2N1cnJlbnRTdXJmYWNlID0gc3VyZmFjZVF0OworfQor
CisKK3ZvaWQgVGV4dHVyZU1hcHBlclF0OjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJl
JiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNr
VGV4dHVyZSkKK3sKKyAgICBjb25zdCBCaXRtYXBUZXh0dXJlUXQmIHRleHR1cmVRdCA9IHN0YXRp
Y19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVRdCY+KHRleHR1cmUpOworICAgIFFQYWludGVyKiBw
YWludGVyID0gbV9wYWludGVyOworICAgIFFQaXhtYXAgcGl4bWFwID0gdGV4dHVyZVF0Lm1fcGl4
bWFwOworICAgIGlmIChtX2N1cnJlbnRTdXJmYWNlKQorICAgICAgICBwYWludGVyID0gJm1fY3Vy
cmVudFN1cmZhY2UtPm1fcGFpbnRlcjsKKworICAgIGlmIChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4
dHVyZS0+aXNWYWxpZCgpKSB7CisgICAgICAgIGNvbnN0IEJpdG1hcFRleHR1cmVRdCogbWFza1F0
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZVF0Kj4obWFza1RleHR1cmUpOworICAg
ICAgICBRUGl4bWFwIGludGVybWVkaWF0ZVBpeG1hcChwaXhtYXAuc2l6ZSgpKTsKKyAgICAgICAg
aW50ZXJtZWRpYXRlUGl4bWFwLmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKKyAgICAgICAgUVBhaW50
ZXIgbWFza1BhaW50ZXIoJmludGVybWVkaWF0ZVBpeG1hcCk7CisgICAgICAgIG1hc2tQYWludGVy
LnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7Cisg
ICAgICAgIG1hc2tQYWludGVyLmRyYXdQaXhtYXAoMCwgMCwgcGl4bWFwKTsKKyAgICAgICAgbWFz
a1BhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfRGVz
dGluYXRpb25Jbik7CisgICAgICAgIG1hc2tQYWludGVyLmRyYXdQaXhtYXAoUVJlY3QoMCwgMCwg
cGl4bWFwLndpZHRoKCksIHBpeG1hcC5oZWlnaHQoKSksIG1hc2tRdC0+bV9waXhtYXAsIG1hc2tR
dC0+c291cmNlUmVjdCgpKTsKKyAgICAgICAgbWFza1BhaW50ZXIuZW5kKCk7CisgICAgICAgIHBp
eG1hcCA9IGludGVybWVkaWF0ZVBpeG1hcDsKKyAgICB9CisKKyAgICBjb25zdCBxcmVhbCBwcmV2
T3BhY2l0eSA9IHBhaW50ZXItPm9wYWNpdHkoKTsKKyAgICBjb25zdCBRVHJhbnNmb3JtIHByZXZU
cmFuc2Zvcm0gPSBwYWludGVyLT50cmFuc2Zvcm0oKTsKKyAgICBwYWludGVyLT5zZXRPcGFjaXR5
KG9wYWNpdHkpOworICAgIHBhaW50ZXItPnNldFRyYW5zZm9ybShtYXRyaXgsIHRydWUpOworICAg
IHBhaW50ZXItPmRyYXdQaXhtYXAodGFyZ2V0UmVjdCwgcGl4bWFwLCB0ZXh0dXJlUXQuc291cmNl
UmVjdCgpKTsKKyAgICBwYWludGVyLT5zZXRUcmFuc2Zvcm0ocHJldlRyYW5zZm9ybSk7CisgICAg
cGFpbnRlci0+c2V0T3BhY2l0eShwcmV2T3BhY2l0eSk7Cit9CisKK1Bhc3NSZWZQdHI8VGV4dHVy
ZU1hcHBlcj4gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkK
K3sKKyNpZmRlZiBRVF9PUEVOR0xfTElCCisgICAgaWYgKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLT5wYWludEVuZ2luZSgpLT50eXBlKCkgPT0gUVBhaW50RW5naW5lOjpPcGVuR0wyKQorICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJHTChjb250ZXh0KSk7CisjZW5k
aWYKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJRdChjb250ZXh0KSk7Cit9
CisKKworUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVyUXQ6OmNyZWF0ZVRl
eHR1cmUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQml0bWFwVGV4dHVyZVF0KCkpOwor
fQorCisjaWZkZWYgUVRfT1BFTkdMX0xJQgorY2xhc3MgUkdCQTMyUHJlbXVsdGltcGxpZWRCdWZm
ZXJRdCA6IHB1YmxpYyBSR0JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlciB7CitwdWJsaWM6CisgICAg
dmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludChjb25zdCBJbnRSZWN0
JiByZWN0LCBib29sIG9wYXF1ZSkKKyAgICB7CisgICAgICAgIG1faW1hZ2UgPSBRSW1hZ2UocmVj
dC5zaXplKCkud2lkdGgoKSwgcmVjdC5zaXplKCkuaGVpZ2h0KCksIFFJbWFnZTo6Rm9ybWF0X0FS
R0IzMl9QcmVtdWx0aXBsaWVkKTsKKyAgICAgICAgaWYgKCFvcGFxdWUpCisgICAgICAgICAgICBt
X2ltYWdlLmZpbGwoMCk7CisgICAgICAgIG1fcGFpbnRlci5iZWdpbigmbV9pbWFnZSk7CisgICAg
ICAgIFRleHR1cmVNYXBwZXJRdDo6aW5pdGlhbGl6ZSgmbV9wYWludGVyKTsKKyAgICAgICAgbV9w
YWludGVyLnRyYW5zbGF0ZSgtcmVjdC54KCksIC1yZWN0LnkoKSk7CisgICAgICAgIHJldHVybiAm
bV9wYWludGVyOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludCgpIHsgbV9wYWlu
dGVyLmVuZCgpOyB9CisgICAgdmlydHVhbCBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9pbWFnZS5jb25zdEJpdHMoKTsgfQorCitwcml2YXRlOgorICAgIFFQYWludGVyIG1fcGFp
bnRlcjsKKyAgICBRSW1hZ2UgbV9pbWFnZTsKK307CisKK1Bhc3NSZWZQdHI8UkdCQTMyUHJlbXVs
dGltcGxpZWRCdWZmZXI+IFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyOjpjcmVhdGUoKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgUkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXJRdCgpKTsK
K30KKworI2VuZGlmCit9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNzg2MzMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5j
cHAKQEAgLTAsMCArMSwxNDcxIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIKKworI2luY2x1
ZGUgIkN1cnJlbnRUaW1lLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSGFzaE1hcC5oIgorI2luY2x1ZGUgIkltYWdlLmgi
CisjaW5jbHVkZSAiUmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKKyNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgIlRpbWVyLmgi
CisjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlRyYW5zbGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIlVuaXRCZXppZXIuaCIKKworI2RlZmluZSBE
RUJVR19URVhNQVBfRlBTIDEKKyNkZWZpbmUgTE9HX0NIQU5ORUxfUFJFRklYICJ0ZXhtYXAiCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBUZXhtYXBQYWludE9wdGlvbnMgeworICAgIEJp
dG1hcFRleHR1cmUqIHN1cmZhY2U7CisgICAgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcjsK
KyAgICBHcmFwaGljc0NvbnRleHQqIGdjOworICAgIFRleHR1cmVNYXBwZXJOb2RlKiByb290TGF5
ZXI7CisgICAgZmxvYXQgb3BhY2l0eTsKKyAgICBJbnRSZWN0IHNjaXNzb3JSZWN0OworICAgIElu
dFJlY3QgdmlzaWJsZVJlY3Q7Cit9OworY2xhc3MgVGV4dHVyZU1hcHBlckNhY2hlIHsKK3B1Ymxp
YzoKKyAgICB2b2lkIG1hcmsoQml0bWFwVGV4dHVyZSogdGV4dHVyZSk7CisKKyAgICBjbGFzcyBF
bnRyeSB7CisgICAgcHVibGljOgorICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVy
ZTsKKyAgICAgICAgRW50cnkoKSA6IHByZXZpb3VzQ29zdCgwKSB7IH0KKyAgICAgICAgaW5saW5l
IGludCBjYWxjdWxhdGVDb3N0KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCF0
ZXh0dXJlIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICBjb25zdCBJbnRTaXplIHN6ID0gdGV4dHVyZS0+c2l6ZSgpOworICAgICAg
ICAgICAgcmV0dXJuIHN6LndpZHRoKCkgKiBzei5oZWlnaHQoKSAqIDQ7CisgICAgICAgIH0KKyAg
ICAgICAgRW50cnkoQml0bWFwVGV4dHVyZSogbmV3VGV4dHVyZSkKKyAgICAgICAgICAgIDogdGV4
dHVyZShuZXdUZXh0dXJlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEVudHJ5JiBvdGhlcikgY29uc3QgeyByZXR1cm4gdGV4dHVyZSA9PSBvdGhl
ci50ZXh0dXJlOyB9CisgICAgICAgIGludCBwcmV2aW91c0Nvc3Q7CisgICAgfTsKKworICAgIFRl
eHR1cmVNYXBwZXJDYWNoZSgpIDogbV90b3RhbENvc3QoMCkge30KKworICAgIHZvaWQgcHVyZ2Uo
KTsKKyAgICBWZWN0b3I8RW50cnk+IG1fZGF0YTsKKyAgICBpbnQgbV90b3RhbENvc3Q7CisjaWZu
ZGVmIFRFWE1BUF9URVhUVVJFX0NBQ0hFX0tCUworI2RlZmluZSBURVhNQVBfVEVYVFVSRV9DQUNI
RV9LQlMgMjQgKiAxMDI0CisjZW5kaWYKKyAgICBzdGF0aWMgY29uc3QgaW50IE1heENvc3QgPSBU
RVhNQVBfVEVYVFVSRV9DQUNIRV9LQlMgKiAxMDI0OworICAgIHN0YXRpYyBjb25zdCBpbnQgUHVy
Z2VBbW91bnQgPSBNYXhDb3N0IC8gNDsKK307CisKKwordm9pZCBUZXh0dXJlTWFwcGVyQ2FjaGU6
OnB1cmdlKCkKK3sKKyAgICAvLyBXZSBuZWVkIGFuIGFjdGl2ZSBHTCBjb250ZXh0LCBiZWNhdXNl
IHdlIG1pZ2h0IGNhbGwgZ2xEZWxldGVUZXh0dXJlcy4KKyAgICBjb25zdCBpbnQgc2l6ZSA9IG1f
ZGF0YS5zaXplKCk7CisKKyAgICBpZiAobV90b3RhbENvc3QgPD0gVGV4dHVyZU1hcHBlckNhY2hl
OjpNYXhDb3N0KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBFbnN1cmUgdGhhdCB3ZSBoYXZl
IHRoZSByaWdodCBjb3VudC4gSXQgbWlnaHQgYmUgaW5hY2N1cmF0ZSBpZiBjb250ZW50IGNoYW5n
ZWQgc2l6ZS4KKyAgICAvLyBXZSBvbmx5IGRvIHRoaXMgd2hlbiB3ZSdyZSBhY3R1YWxseSByZWFk
eSB0byBwdXJnZS4KKyAgICBtX3RvdGFsQ29zdCA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBzaXplOyArK2kpCisgICAgICAgIG1fdG90YWxDb3N0ICs9IG1fZGF0YVtpXS5jYWxjdWxhdGVD
b3N0KCk7CisKKyAgICBmb3IgKGludCBpID0gc2l6ZS0xOyBpID49IDAgJiYgbV90b3RhbENvc3Qg
PiBUZXh0dXJlTWFwcGVyQ2FjaGU6Ok1heENvc3QgLSBUZXh0dXJlTWFwcGVyQ2FjaGU6OlB1cmdl
QW1vdW50OyAtLWkpIHsKKyAgICAgICAgRW50cnkmIGVudHJ5ID0gbV9kYXRhW2ldOworICAgICAg
ICBpZiAoZW50cnkudGV4dHVyZS0+aXNMb2NrZWQoKSB8fCAhZW50cnkudGV4dHVyZS0+aXNWYWxp
ZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1fdG90YWxDb3N0IC09IGVudHJ5
LnByZXZpb3VzQ29zdDsKKyAgICAgICAgZW50cnkudGV4dHVyZS0+ZGVzdHJveSgpOworICAgICAg
ICBtX2RhdGEucmVtb3ZlKGkpOworICAgIH0KKworLy8gICAgTE9HKCJbVGV4dHVyZU1hcHBlcl0g
UHVyZ2VkICUyLjRmSyBvZiB0ZXh0dXJlcyglZCkgWyUyLjRmSy8lZF1cbiIsIGZsb2F0KGJlZm9y
ZSAtIG1fdG90YWxDb3N0KSAvIDEwMjQsCisvLyAgICAgICAgICAgaW50KHNpemUtbV9kYXRhLnNp
emUoKSksIGZsb2F0KG1fdG90YWxDb3N0KSAvIDEwMjQsIG1fZGF0YS5zaXplKCkpOworfQorCit2
b2lkIFRleHR1cmVNYXBwZXJDYWNoZTo6bWFyayhCaXRtYXBUZXh0dXJlICp0ZXh0dXJlKQorewor
ICAgIGlmICghdGV4dHVyZSB8fCAhdGV4dHVyZS0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBFbnRyeSBlbnRyeSh0ZXh0dXJlKTsKKyAgICBzaXplX3QgaW5kZXggPSBtX2RhdGEu
ZmluZChlbnRyeSk7CisgICAgaWYgKCFpbmRleCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KGluZGV4IDwgbV9kYXRhLnNpemUoKSkgCisgICAgICAgIG1fZGF0YS5yZW1vdmUoaW5kZXgpOwor
ICAgIGNvbnN0IGludCBjb3N0ID0gZW50cnkuY2FsY3VsYXRlQ29zdCgpOworICAgIG1fdG90YWxD
b3N0IC09IGVudHJ5LnByZXZpb3VzQ29zdDsKKyAgICBtX3RvdGFsQ29zdCArPSAoZW50cnkucHJl
dmlvdXNDb3N0ID0gY29zdCk7CisgICAgbV9kYXRhLnByZXBlbmQoZW50cnkpOworfQorCitUZXh0
dXJlTWFwcGVyQ2FjaGUgZ1RleHR1cmVNYXBwZXJDYWNoZTsKKworY2xhc3MgVGV4dHVyZU1hcHBl
ckNhY2hlTG9jayB7CitwdWJsaWM6CisgICAgVGV4dHVyZU1hcHBlckNhY2hlTG9jayhCaXRtYXBU
ZXh0dXJlKiB0ZXh0dXJlKSA6IG1fdGV4dHVyZSh0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgaWYg
KG1fdGV4dHVyZSkKKyAgICAgICAgICAgIG1fdGV4dHVyZS0+bG9jaygpOworICAgIH0KKyAgICB+
VGV4dHVyZU1hcHBlckNhY2hlTG9jaygpCisgICAgeworICAgICAgICBpZiAobV90ZXh0dXJlKQor
ICAgICAgICAgICAgbV90ZXh0dXJlLT51bmxvY2soKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
UmVmUHRyPEJpdG1hcFRleHR1cmU+IG1fdGV4dHVyZTsKK307CisKK2NsYXNzIFRleHR1cmVNYXBw
ZXJOb2RlIDogcHVibGljIFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIgeworCitwdWJsaWM6Cisg
ICAgLy8gVGhpcyBzZXQgb2YgZmxhZ3MgaGVscCB1cyBkZWZlciB3aGljaCBwcm9wZXJ0aWVzIG9m
IHRoZSBsYXllciBoYXZlIGJlZW4KKyAgICAvLyBtb2RpZmllZCBieSB0aGUgY29tcG9zaXRvciwg
c28gd2UgY2FuIGtub3cgd2hhdCB0byBsb29rIGZvciBpbiB0aGUgbmV4dCBmbHVzaC4KKyAgICBl
bnVtIENoYW5nZU1hc2sgeworICAgICAgICBOb0NoYW5nZXMgPSAgICAgICAgICAgICAgICAgMCwK
KworICAgICAgICBQYXJlbnRDaGFuZ2UgPSAgICAgICAgICAgICAgKDFMIDw8IDApLAorICAgICAg
ICBDaGlsZHJlbkNoYW5nZSA9ICAgICAgICAgICAgKDFMIDw8IDEpLAorICAgICAgICBNYXNrTGF5
ZXJDaGFuZ2UgPSAgICAgICAgICAgKDFMIDw8IDIpLAorICAgICAgICBQb3NpdGlvbkNoYW5nZSA9
ICAgICAgICAgICAgKDFMIDw8IDMpLAorCisgICAgICAgIEFuY2hvclBvaW50Q2hhbmdlID0gICAg
ICAgICAoMUwgPDwgNCksCisgICAgICAgIFNpemVDaGFuZ2UgID0gICAgICAgICAgICAgICAoMUwg
PDwgNSksCisgICAgICAgIFRyYW5zZm9ybUNoYW5nZSA9ICAgICAgICAgICAoMUwgPDwgNiksCisg
ICAgICAgIENvbnRlbnRDaGFuZ2UgPSAgICAgICAgICAgICAoMUwgPDwgNyksCisKKyAgICAgICAg
Q29udGVudHNPcmllbnRhdGlvbkNoYW5nZSA9ICgxTCA8PCA5KSwKKyAgICAgICAgT3BhY2l0eUNo
YW5nZSA9ICAgICAgICAgICAgICgxTCA8PCAxMCksCisgICAgICAgIENvbnRlbnRzUmVjdENoYW5n
ZSA9ICAgICAgICAoMUwgPDwgMTEpLAorCisgICAgICAgIFByZXNlcnZlczNEQ2hhbmdlID0gICAg
ICAgICAoMUwgPDwgMTIpLAorICAgICAgICBNYXNrc1RvQm91bmRzQ2hhbmdlID0gICAgICAgKDFM
IDw8IDEzKSwKKyAgICAgICAgRHJhd3NDb250ZW50Q2hhbmdlID0gICAgICAgICgxTCA8PCAxNCks
CisgICAgICAgIENvbnRlbnRzT3BhcXVlQ2hhbmdlID0gICAgICAoMUwgPDwgMTUpLAorCisgICAg
ICAgIEJhY2tmYWNlVmlzaWJpbGl0eUNoYW5nZSA9ICAoMUwgPDwgMTYpLAorICAgICAgICBDaGls
ZHJlblRyYW5zZm9ybUNoYW5nZSA9ICAgKDFMIDw8IDE3KSwKKyAgICAgICAgRGlzcGxheUNoYW5n
ZSA9ICAgICAgICAgICAgICgxTCA8PCAxOCksCisgICAgICAgIEJhY2tncm91bmRDb2xvckNoYW5n
ZSA9ICAgICAoMUwgPDwgMTkpLAorCisgICAgICAgIFJlcGxpY2FMYXllckNoYW5nZSA9ICAgICAg
ICAoMUwgPDwgMjApCisgICAgfTsKKworICAgIC8vIFRoZSBjb21wb3NpdG9yIGxldHMgdXMgc3Bl
Y2lhbC1jYXNlIGltYWdlcyBhbmQgY29sb3JzLCBzbyB3ZSB0cnkgdG8gZG8gc28uCisgICAgZW51
bSBTdGF0aWNDb250ZW50VHlwZSB7IEhUTUxDb250ZW50VHlwZSwgRGlyZWN0SW1hZ2VDb250ZW50
VHlwZSwgQ29sb3JDb250ZW50VHlwZSwgTWVkaWFDb250ZW50VHlwZSwgQ2FudmFzM0RDb250ZW50
VHlwZX07CisKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogcm9vdExheWVyKCk7CisKKyAgICBUZXh0
dXJlTWFwcGVyTm9kZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogbmV3TGF5ZXIpOworICAg
IHZpcnR1YWwgflRleHR1cmVNYXBwZXJOb2RlKCk7CisKKyAgICB2b2lkIGNsZWFyRGlyZWN0SW1h
Z2UoKTsKKyAgICB2b2lkIGNvbXB1dGVUcmFuc2Zvcm1hdGlvbnMoKTsKKyAgICBJbnRTaXplIG5l
YXJlc3RTdXJmYWNlU2l6ZSgpIGNvbnN0OworICAgIHZvaWQgY29tcHV0ZVJlcGxpY2FUcmFuc2Zv
cm0oKTsKKyAgICB2b2lkIGNvbXB1dGVMYXllclR5cGUoKTsKKyAgICB2b2lkIGNvbXB1dGVMb2Nh
bFRyYW5zZm9ybSgpOworICAgIHZvaWQgZmxhdHRlblRvMkRTcGFjZUlmTmVjZXNzYXJ5KCk7Cisg
ICAgdm9pZCBpbml0aWFsaXplVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKik7CisgICAgdm9p
ZCBpbnZhbGlkYXRlVHJhbnNmb3JtKCk7CisgICAgdm9pZCBub3RpZnlDaGFuZ2UoQ2hhbmdlTWFz
ayk7CisgICAgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZShib29sIHJlY3Vyc2UpOworICAgIHZv
aWQgcGVyZm9ybVBvc3RTeW5jT3BlcmF0aW9ucygpOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5
KCk7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoSW50UmVjdCk7CisgICAgdmlydHVh
bCB2b2lkIGNsZWFudXBUZXh0dXJlTWFwcGVyKCk7CisKKyAgICB2b2lkIHBhaW50UmVjdXJzaXZl
KFRleG1hcFBhaW50T3B0aW9ucyBvcHRpb25zKTsKKyAgICB2b2lkIHBhaW50U2VsZihUZXh0dXJl
TWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNr
VGV4dHVyZSwgQml0bWFwVGV4dHVyZSogcmVwbGljYU1hc2tUZXh0dXJlLCBib29sIGlzU3VyZmFj
ZSk7CisgICAgdm9pZCB1cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQoVGV4dHVyZU1hcHBlciogdGV4
dHVyZU1hcHBlcik7CisKKyAgICBpbnQgY291bnREZXNjZW5kYW50c1dpdGhDb250ZW50KCkgY29u
c3Q7CisgICAgYm9vbCBoYXNTdXJmYWNlRGVzY2VuZGFudHMoKSBjb25zdDsKKworICAgIEludFNp
emUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAgdmlydHVhbCB2b2lkIHNl
dFBsYXRmb3JtTGF5ZXJDbGllbnQoVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50Kik7CisgICAgdmly
dHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFNpemUmLCBjb25zdCBJ
bnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0JiBleHBvc2VkUmVjdCwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSk7CisKKyAgICBzdGF0
aWMgVGV4dHVyZU1hcHBlck5vZGUqIHRvVGV4dHVyZU1hcHBlck5vZGUoR3JhcGhpY3NMYXllciop
OworcHVibGljOgorICAgIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBtX2xheWVyOworICAg
IGNvbnN0IGNoYXIqIG1fbGFzdFRleHR1cmVNYXBwZXJUeXBlOworICAgIFJlZlB0cjxUZXh0dXJl
TWFwcGVyPiBtX2xhc3RUZXh0dXJlTWFwcGVyOworICAgIHN0cnVjdCBUcmFuc2Zvcm1EYXRhIHsK
KyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYmFzZSwgdGFyZ2V0LCByZXBsaWNhLCBmb3JE
ZXNjZW5kYW50cywgcGVyc3BlY3RpdmUsIGxvY2FsOworICAgICAgICBJbnRSZWN0IHRhcmdldEJv
dW5kaW5nUmVjdDsKKyAgICAgICAgZmxvYXQgY2VudGVyWjsKKyAgICAgICAgYm9vbCBkaXJ0eSwg
bG9jYWxEaXJ0eSwgcGVyc3BlY3RpdmVEaXJ0eTsKKyAgICAgICAgSW50UmVjdCBib3VuZGluZ1Jl
Y3RGcm9tUm9vdDsKKyAgICAgICAgVHJhbnNmb3JtRGF0YSgpIDogZGlydHkodHJ1ZSksIGxvY2Fs
RGlydHkodHJ1ZSksIHBlcnNwZWN0aXZlRGlydHkodHJ1ZSkKKyAgICAgICAgeworICAgICAgICB9
CisgICAgfTsKKworICAgIFRyYW5zZm9ybURhdGEgbV90cmFuc2Zvcm1zOworCisgICAgZW51bSBM
YXllclR5cGUgeworICAgICAgICBEZWZhdWx0TGF5ZXIsCisgICAgICAgIFJvb3RMYXllciwKKyAg
ICAgICAgU2Npc3NvckxheWVyLAorICAgICAgICBDbGlwTGF5ZXIsCisgICAgICAgIFRyYW5zcGFy
ZW5jeUxheWVyCisgICAgfTsKKworICAgIExheWVyVHlwZSBtX2xheWVyVHlwZTsKKworICAgIHN0
cnVjdCBDb250ZW50RGF0YSB7CisgICAgICAgIEludFJlY3QgbmVlZHNEaXNwbGF5UmVjdDsKKyAg
ICAgICAgYm9vbCBuZWVkc0Rpc3BsYXk7CisgICAgICAgIENvbG9yIGJhY2tncm91bmRDb2xvcjsK
KworICAgICAgICBTdGF0aWNDb250ZW50VHlwZSBjb250ZW50VHlwZTsKKyAgICAgICAgUmVmUHRy
PEltYWdlPiBpbWFnZTsKKyAgICAgICAgVGV4dHVyZU1hcHBlclZpZGVvTGF5ZXIqIG1lZGlhOwor
CisgICAgICAgIENvbnRlbnREYXRhKCkKKyAgICAgICAgICAgIDogbmVlZHNEaXNwbGF5KGZhbHNl
KQorICAgICAgICAgICAgLCBjb250ZW50VHlwZShIVE1MQ29udGVudFR5cGUpCisgICAgICAgICAg
ICAsIGltYWdlKDApCisgICAgICAgICAgICAsIG1lZGlhKDApCisgICAgICAgIHsKKyAgICAgICAg
fQorCisgICAgfTsKKworICAgIGlubGluZSBJbnRSZWN0IHRhcmdldFJlY3QoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENv
bnRlbnRUeXBlID8gZnVsbFJlY3QoKSA6IG1fc3RhdGUuY29udGVudHNSZWN0OworICAgIH0KKwor
ICAgIGlubGluZSBJbnRSZWN0IGZ1bGxSZWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgIH0K
KworICAgIGlubGluZSBJbnRSZWN0IHJlcGxpY2FSZWN0KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2xheWVyVHlwZSA9PSBUcmFuc3BhcmVuY3lMYXllciA/IEludFJlY3QoMCwgMCwg
bV9uZWFyZXN0U3VyZmFjZVNpemUud2lkdGgoKSwgbV9uZWFyZXN0U3VyZmFjZVNpemUuaGVpZ2h0
KCkpIDogZnVsbFJlY3QoKTsKKyAgICB9CisKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbV90
ZXh0dXJlOworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBtX3N1cmZhY2UsIG1fcmVwbGljYVN1
cmZhY2U7CisKKyAgICBDb250ZW50RGF0YSBtX3BlbmRpbmdDb250ZW50OworICAgIENvbnRlbnRE
YXRhIG1fY3VycmVudENvbnRlbnQ7CisKKyAgICBWZWN0b3I8VGV4dHVyZU1hcHBlck5vZGUqPiBt
X2NoaWxkcmVuOworICAgIFRleHR1cmVNYXBwZXJOb2RlKiBtX3BhcmVudDsKKyAgICBUZXh0dXJl
TWFwcGVyTm9kZSogbV9lZmZlY3RUYXJnZXQ7CisgICAgaW50IG1fY2hhbmdlTWFzazsKKyAgICBJ
bnRTaXplIG1fc2l6ZSwgbV9uZWFyZXN0U3VyZmFjZVNpemU7CisgICAgU3RyaW5nIG1fbmFtZTsK
KyAgICBUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQqIG1fcGxhdGZvcm1DbGllbnQ7CisKKyAgICBz
dHJ1Y3QgU3RhdGUgeworICAgICAgICBGbG9hdFBvaW50IHBvczsKKyAgICAgICAgRmxvYXRQb2lu
dDNEIGFuY2hvclBvaW50OworICAgICAgICBGbG9hdFNpemUgc2l6ZTsKKyAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBj
aGlsZHJlblRyYW5zZm9ybTsKKyAgICAgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOworICAgICAg
ICBDb2xvciBjdXJyZW50Q29sb3I7CisgICAgICAgIEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5n
Q29vcmRpbmF0ZXNPcmllbnRhdGlvbiBnZW9PcmllbnRhdGlvbjsKKyAgICAgICAgR3JhcGhpY3NM
YXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIGNvbnRlbnRzT3JpZW50YXRp
b247CisgICAgICAgIGZsb2F0IG9wYWNpdHk7CisgICAgICAgIEludFJlY3QgY29udGVudHNSZWN0
OworICAgICAgICBpbnQgZGVzY2VuZGFudHNXaXRoQ29udGVudDsKKyAgICAgICAgVGV4dHVyZU1h
cHBlck5vZGUqIG1hc2tMYXllcjsKKyAgICAgICAgVGV4dHVyZU1hcHBlck5vZGUqIHJlcGxpY2FM
YXllcjsKKyAgICAgICAgYm9vbCBwcmVzZXJ2ZXMzRDsKKyAgICAgICAgYm9vbCBtYXNrc1RvQm91
bmRzOworICAgICAgICBib29sIGRyYXdzQ29udGVudDsKKyAgICAgICAgYm9vbCBjb250ZW50c09w
YXF1ZTsKKyAgICAgICAgYm9vbCBiYWNrZmFjZVZpc2liaWxpdHk7CisgICAgICAgIGJvb2wgdmlz
aWJsZTsKKyAgICAgICAgYm9vbCBkaXJ0eTsKKyAgICAgICAgYm9vbCB0aWxlZDsKKyAgICAgICAg
Ym9vbCBoYXNTdXJmYWNlRGVzY2VuZGFudHM7CisKKyAgICAgICAgU3RhdGUoKQorICAgICAgICAg
ICAgOiBvcGFjaXR5KDEuZikKKyAgICAgICAgICAgICwgZGVzY2VuZGFudHNXaXRoQ29udGVudCgw
KQorICAgICAgICAgICAgLCBtYXNrTGF5ZXIoMCkKKyAgICAgICAgICAgICwgcmVwbGljYUxheWVy
KDApCisgICAgICAgICAgICAsIHByZXNlcnZlczNEKGZhbHNlKQorICAgICAgICAgICAgLCBtYXNr
c1RvQm91bmRzKGZhbHNlKQorICAgICAgICAgICAgLCBkcmF3c0NvbnRlbnQoZmFsc2UpCisgICAg
ICAgICAgICAsIGNvbnRlbnRzT3BhcXVlKGZhbHNlKQorICAgICAgICAgICAgLCBiYWNrZmFjZVZp
c2liaWxpdHkoZmFsc2UpCisgICAgICAgICAgICAsIHZpc2libGUodHJ1ZSkKKyAgICAgICAgICAg
ICwgZGlydHkodHJ1ZSkKKyAgICAgICAgICAgICwgdGlsZWQoZmFsc2UpCisgICAgICAgICAgICAs
IGhhc1N1cmZhY2VEZXNjZW5kYW50cyhmYWxzZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAg
fTsKKyAgICBTdGF0ZSBtX3N0YXRlOworfTsKKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KEludFJlY3QgcmVjdCkKK3sKKyAgICBpZiAobV9wbGF0Zm9ybUNs
aWVudCkgeworICAgICAgICBpZiAobV9zdGF0ZS5oYXNTdXJmYWNlRGVzY2VuZGFudHMpIHsKKyAg
ICAgICAgICAgIG1fcGxhdGZvcm1DbGllbnQtPnNldE5lZWRzRGlzcGxheSgpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJlY3QuaW50ZXJzZWN0KEludFJlY3QoMCwg
MCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICBpZiAocmVjdC5p
c0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fcGxhdGZvcm1DbGllbnQt
PnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICghbV9wYXJlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGFyZW50LT5zZXRO
ZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNl
dE5lZWRzRGlzcGxheSgpCit7CisgICAgaWYgKG1fZWZmZWN0VGFyZ2V0KQorICAgICAgICBtX2Vm
ZmVjdFRhcmdldC0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgaWYgKG1fdHJhbnNmb3Jtcy50YXJn
ZXRCb3VuZGluZ1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fc3Rh
dGUuZHJhd3NDb250ZW50IHx8IG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgIT0gSFRNTENv
bnRlbnRUeXBlKQorICAgICAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3QobV90cmFuc2Zvcm1zLnRh
cmdldEJvdW5kaW5nUmVjdCk7Cit9CisKKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0UGxh
dGZvcm1MYXllckNsaWVudChUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQqIGNsaWVudCkKK3sKKyAg
ICBtX3BsYXRmb3JtQ2xpZW50ID0gY2xpZW50OworfQorCitzdGF0aWMgaW50IGNvbXBhcmVHcmFw
aGljc0xheWVyc1pWYWx1ZShjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQoreworICAgIHR5
cGVkZWYgY29uc3QgVGV4dHVyZU1hcHBlck5vZGUqIE5vZGVQdHI7CisgICAgY29uc3QgTm9kZVB0
ciogbm9kZUEgPSBzdGF0aWNfY2FzdDxjb25zdCBOb2RlUHRyKj4oYSk7CisgICAgY29uc3QgTm9k
ZVB0ciogbm9kZUIgPSBzdGF0aWNfY2FzdDxjb25zdCBOb2RlUHRyKj4oYik7CisgICAgcmV0dXJu
IGludCgoKCpub2RlQSktPm1fdHJhbnNmb3Jtcy5jZW50ZXJaIC0gKCpub2RlQiktPm1fdHJhbnNm
b3Jtcy5jZW50ZXJaKSAqIDEwMDApOworfQoraW5saW5lIHN0YXRpYyB2b2lkIHNvcnRCeVpPcmRl
cihWZWN0b3I8VGV4dHVyZU1hcHBlck5vZGUqID4mIGFycmF5LCBpbnQgZmlyc3QsIGludCBsYXN0
KQoreworICAgIHFzb3J0KGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBzaXplb2YoVGV4dHVy
ZU1hcHBlck5vZGUqKSwgY29tcGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKTsKK30KKworYm9vbCBU
ZXh0dXJlTWFwcGVyTm9kZTo6aGFzU3VyZmFjZURlc2NlbmRhbnRzKCkgY29uc3QKK3sKKworICAg
IGlmIChtX2xheWVyVHlwZSA9PSBDbGlwTGF5ZXIgfHwgbV9sYXllclR5cGUgPT0gVHJhbnNwYXJl
bmN5TGF5ZXIgfHwgbV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGNvbnN0IGludCBzaXplID0gbV9jaGlsZHJlbi5zaXplKCk7CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSogY2hpbGQg
PSBtX2NoaWxkcmVuW2ldKQorICAgICAgICAgICAgaWYgKGNoaWxkLT5oYXNTdXJmYWNlRGVzY2Vu
ZGFudHMoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7
CisKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBn
YywgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qg
SW50UmVjdCYgZXhwb3NlZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zv
cm0sIGZsb2F0IG9wYWNpdHkpCit7CisgICAgLy8gbmVlZHMgYWN0aXZlIGNvbnRleHQKKyAgICBB
U1NFUlQobV9sYXllclR5cGUgPT0gUm9vdExheWVyKTsKKyAgICBpZiAobV9zaXplLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgMAorICAgIFdURjo6U3RvcFdhdGNoIHN0b3BXYXRj
aDsKKyAgICAoIltUZXh0dXJlTWFwcGVyXSBSb290UGFpbnQhIVxuIik7CisjZW5kaWYKKworICAg
IFJlZlB0cjxUZXh0dXJlTWFwcGVyPiB0ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3Jl
YXRlKGdjKTsKKworICAgIGlmICh0ZXh0dXJlTWFwcGVyLT50eXBlKCkgIT0gbV9sYXN0VGV4dHVy
ZU1hcHBlclR5cGUpCisgICAgICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUubV9kYXRhLmNsZWFyKCk7
CisKKyAgICBtX2xhc3RUZXh0dXJlTWFwcGVyID0gdGV4dHVyZU1hcHBlcjsKKyAgICBUZXhtYXBQ
YWludE9wdGlvbnMgb3B0OworICAgIG9wdC5vcGFjaXR5ID0gMTsKKyAgICBvcHQucm9vdExheWVy
ID0gdGhpczsKKyAgICBvcHQuc2Npc3NvclJlY3QgPSB0YXJnZXRSZWN0OworICAgIG9wdC52aXNp
YmxlUmVjdCA9IGV4cG9zZWRSZWN0OworICAgIG9wdC50ZXh0dXJlTWFwcGVyID0gdGV4dHVyZU1h
cHBlci5nZXQoKTsKKyAgICBvcHQuZ2MgPSB0ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQo
KTsKKyAgICBvcHQuc3VyZmFjZSA9IDA7CisgICAgcGFpbnRSZWN1cnNpdmUob3B0KTsKKworICAg
IGlmICh0ZXh0dXJlTWFwcGVyLT5hbGxvd1N1cmZhY2VGb3JSb290KCkgfHwgbV9zdGF0ZS5oYXNT
dXJmYWNlRGVzY2VuZGFudHMpIHsKKyAgICAgICAgdGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2Uo
MCk7CisgICAgICAgIHRleHR1cmVNYXBwZXItPnBhaW50VG9UYXJnZXQoKm1fc3VyZmFjZS5nZXQo
KSwgc2l6ZSwgdHJhbnNmb3JtLCBvcGFjaXR5ICogbV9zdGF0ZS5vcGFjaXR5LCB0YXJnZXRSZWN0
KTsKKyAgICB9CisgICAgZ1RleHR1cmVNYXBwZXJDYWNoZS5wdXJnZSgpOworI2lmIDAKKyAgICB7
CisgICAgICAgIHN0YXRpYyBpbnQgcm9vdENvdW50ID0gMDsKKyAgICAgICAgKCJbVGV4dHVyZU1h
cHBlcl0gUm9vdFBhaW50KCVkKSAlZCBsYXllciglcCkgKCVkKyVkICVkeCVkKSBbJWRtc11cbiIs
ICsrcm9vdENvdW50LCB0ZXh0dXJlTWFwcGVyLT5hbGxvd1N1cmZhY2VGb3JSb290KCksCisgICAg
ICAgICAgICAgICB0aGlzLCBleHBvc2VkUmVjdC54KCksIGV4cG9zZWRSZWN0LnkoKSwgZXhwb3Nl
ZFJlY3Qud2lkdGgoKSwgZXhwb3NlZFJlY3QuaGVpZ2h0KCksIAorICAgICAgICAgICAgICAgaW50
KHN0b3BXYXRjaC5lbGFwc2VkKCkgKiAxMDAwKSk7CisjaWYgMAorICAgICAgICBpZiAodGV4dHVy
ZU1hcHBlci0+YWxsb3dTdXJmYWNlRm9yUm9vdCgpKQorICAgICAgICAgICAgbV9zdXJmYWNlLT5z
YXZlKFN0cmluZygpLmZvcm1hdCgiL3RtcC9yb290XyVkLnBuZyIsIHJvb3RDb3VudCkpOworI2Vu
ZGlmCisgICAgfQorI2VuZGlmCit9CisKK2ludCBUZXh0dXJlTWFwcGVyTm9kZTo6Y291bnREZXNj
ZW5kYW50c1dpdGhDb250ZW50KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc3RhdGUudmlzaWJsZSB8
fCBtX3N0YXRlLm9wYWNpdHkgPCAwLjAwMSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaW50IGRl
c2NlbmRhbnRzV2l0aENvbnRlbnQgPSAobV9zdGF0ZS5kcmF3c0NvbnRlbnQgfHwgbV9jdXJyZW50
Q29udGVudC5jb250ZW50VHlwZSAhPSBIVE1MQ29udGVudFR5cGUpID8gMSA6IDA7CisKKyAgICBj
b25zdCBpbnQgc2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSogY2hpbGQgPSBt
X2NoaWxkcmVuW2ldKQorICAgICAgICAgICAgZGVzY2VuZGFudHNXaXRoQ29udGVudCArPSBjaGls
ZC0+Y291bnREZXNjZW5kYW50c1dpdGhDb250ZW50KCk7CisgICAgfQorCisgICAgcmV0dXJuIGRl
c2NlbmRhbnRzV2l0aENvbnRlbnQ7Cit9CisKK2lubGluZSBUZXh0dXJlTWFwcGVyTm9kZSogVGV4
dHVyZU1hcHBlck5vZGU6OnRvVGV4dHVyZU1hcHBlck5vZGUoR3JhcGhpY3NMYXllciogbGF5ZXIp
Cit7CisgICAgcmV0dXJuIGxheWVyID8gc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIqPihsYXllciktPm1fbm9kZS5nZXQoKSA6IDA7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBl
ck5vZGU6OmNvbXB1dGVMYXllclR5cGUoKQoreworICAgIC8vIGNhbGN1bGF0ZSBsYXllciB0eXBl
LiBBIGxheWVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAvLyAgUm9vdExheWVy
OiB0aGUgdG9wIGxldmVsLiBEcmF3cyB0byBhIGZyYW1lYnVmZmVyLCBhbmQgdGhlIHRhcmdldCB0
ZXh0dXJlIGRyYXdzIGludG8gdGhlIHZpZXdwb3J0LgorICAgIC8vICAgICAgICAgICAgb25seSBv
bmUgbGF5ZXIgaXMgdGhlIHJvb3QgbGF5ZXIuCisgICAgLy8gIFNjaXNzb3JMYXllcjogZHJhd3Mg
dG8gdGhlIGN1cnJlbnQgZnJhbWVidWZmZXIsIGFuZCBhcHBsaWVzIGFuIGV4dHJhIHNjaXNzb3Ig
YmVmb3JlIGRyYXdpbmcgaXRzIGNoaWxkcmVuLgorICAgIC8vICAgICAgICAgICAgICAgIEEgc2Np
c3NvciBsYXllciBpcyBhIGxheWVyIHdpdGggY2hpbGRyZW4gdGhhdCBtYXNrcyB0byBib3VuZHMs
IGlzIG5vdCBhIHRyYW5zcGFyZW5jeSBsYXllciwgYW5kIGhhcyBhIHJlY3Rhbmd1bGFyIGNsaXAu
CisgICAgLy8gIENsaXBMYXllcjogY3JlYXRlcyBhIG5ldyBmcmFtZWJ1ZmZlciwgdGhlIHNpemUg
b2YgdGhlIGxheWVyLCBhbmQgdGhlbiBwYWludHMgaXQgdG8gdGhlIGVuY2xvc2luZyBCaXRtYXBU
ZXh0dXJlIHdpdGggdGhlIGxheWVyJ3MgdHJhbnNmb3JtL29wYWNpdHkuCisgICAgLy8gICAgICAg
ICAgICAgIEEgY2xpcCBsYXllciBpcyBhIGxheWVyIHRoYXQgbWFza3MgdG8gYm91bmRzLCBkb2Vz
bid0IHByZXNlcnZlIDNELCBoYXMgY2hpbGRyZW4sIGFuZCBoYXMgYSB0cmFuc3BhcmVuY3kvbWFz
ayBvciBhIG5vbi1yZWN0YW5ndWxhciB0cmFuc2Zvcm0uCisgICAgLy8gIFRyYW5zcGFyZW5jeUxh
eWVyOiBjcmVhdGVzIGEgbmV3IGZyYW1lYnVmZmVyIGlkZXRpY2FsIGluIHNpemUgdG8gdGhlIGN1
cnJlbnQgZnJhbWVidWZmZXIuIFRoZW4gZHJhd3MgdGhlIGZiJ3MgdGV4dHVyZSB0byB0aGUgY3Vy
cmVudCBmcmFtZWJ1ZmZlciB3aXRoIGlkZW50aXR5IHRyYW5zZm9ybS4KKyAgICAvLyAgICAgICAg
ICAgICAgICAgICAgIFVzZWQgZm9yIGxheWVycyB3aXRoIGNoaWxkcmVuIGFuZCB0cmFuc3BhcmVu
Y3kvbWFzayB0aGF0IHByZXNlcnZlIDNEIG9yIGRvbid0IG1hc2sgdG8gYm91bmRzLgorICAgIC8v
ICBEZWZhdWx0TGF5ZXI6IGRyYXdzIGl0c2VsZiBhbmQgaXRzIGNoaWxkcmVuIGRpcmVjdGx5IHRv
IHRoZSBjdXJyZW50IGZyYW1lYnVmZmVyLgorICAgIC8vICAgICAgICAgICAgICAgIGFueSBsYXll
ciB0aGF0IGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgb3RoZXIgcnVsZXMgaXMgYSBEZWZhdWx0TGF5
ZXIuCisKKyAgICBjb25zdCBib29sIHNlbGZIYXNDb250ZW50ID0gbV9zdGF0ZS5kcmF3c0NvbnRl
bnQgfHwgKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgIT0gSFRNTENvbnRlbnRUeXBlKTsK
KyAgICBjb25zdCBib29sIGhhc0Rlc2NlbmRhbnRzV2l0aENvbnRlbnQgPSBtX3N0YXRlLmRlc2Nl
bmRhbnRzV2l0aENvbnRlbnQgLSAoc2VsZkhhc0NvbnRlbnQgPyAxIDogMCk7CisgICAgY29uc3Qg
Ym9vbCBoYXNUcmFuc3BhcmVuY3kgPSBtX3N0YXRlLm9wYWNpdHkgPCAwLjk5IHx8IG1fc3RhdGUu
bWFza0xheWVyOworICAgIGNvbnN0IGJvb2wgaGFzUmVwbGljYSA9IG1fc3RhdGUucmVwbGljYUxh
eWVyOworICAgIG1fbGF5ZXJUeXBlID0gRGVmYXVsdExheWVyOworCisgICAgLy8gTGF5ZXIgaGFz
IG5vIHBhcmVudCwgaXQgbXVzdCBiZSBhIHJvb3QgbGF5ZXIuCisgICAgaWYgKCFtX3BhcmVudCAm
JiAhbV9lZmZlY3RUYXJnZXQpIHsKKyAgICAgICAgbV9sYXllclR5cGUgPSBSb290TGF5ZXI7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBIGxheWVyIHdpdGggbm8gY29udGVudHMg
aXMgYWx3YXlzIGEgZGVmYXVsdCBsYXllci4KKyAgICBpZiAoIW1fc3RhdGUuZGVzY2VuZGFudHNX
aXRoQ29udGVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQSBsYXllciB3aXRoIGNvbnRl
bnQtZGVzY2VuZGFudHMgYW5kIGEgbWFzayBpcyBhbHdheXMgYSBjbGlwIGxheWVyLgorICAgIGlm
IChoYXNEZXNjZW5kYW50c1dpdGhDb250ZW50ICYmIG1fc3RhdGUubWFza0xheWVyKSB7CisgICAg
ICAgIG1fbGF5ZXJUeXBlID0gQ2xpcExheWVyOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gQSBtYXNrcy10byBib3VuZHMgbGF5ZXIgY2FuIGJlIGEgY2xpcCBvciBhIHNjaXNzb3Ig
bGF5ZXIuIEl0J3MgYSBzY2lzc29yIGxheWVyIG9ubHkgaWYgaXQgaGFzIGEgdHJpdmlhbCBjbGlw
IChpZGVudGl0eSBvciB0cmFuc2xhdGlvbiksIG9yIGlmIGl0IGhhcyB0cmFuc3BhcmVuY3kuCisg
ICAgLy8gVGhhdCdzIGJlY2F1c2UgYSBDbGlwTGF5ZXIgd291bGQgY3JlYXRlIGFuIGludGVybWVk
aWF0ZSBkcmF3aW5nIHN1cmZhY2UgKEZCKSAtIHdlIHdhbnQgdG8gbGltaXQgaXQgdG8gd2hlbiBp
dCdzIGFjdHVhbGx5IG5lY2Vzc2FyeSwgaS5lLiB0cmFuc3BhcmVuY3kgb3Igbm9uLXRyaXZpYWwg
Y2xpcC4KKyAgICBpZiAobV9zdGF0ZS5tYXNrc1RvQm91bmRzICYmIGhhc0Rlc2NlbmRhbnRzV2l0
aENvbnRlbnQpIHsKKyAgICAgICAgaWYgKGhhc1RyYW5zcGFyZW5jeSB8fCAhbV9zdGF0ZS50cmFu
c2Zvcm0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSB8fCBtX3BhcmVudC0+bV9zdGF0ZS5wcmVz
ZXJ2ZXMzRCkKKyAgICAgICAgICAgIG1fbGF5ZXJUeXBlID0gQ2xpcExheWVyOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX2xheWVyVHlwZSA9IFNjaXNzb3JMYXllcjsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIFdlIHVzZSBhIHRyYW5zcGFyZW5jeSBsYXllciB3aGVuIHdl
IGhhdmUgdHdvIG9mIHRoZSBmb2xsb3dpbmcgMzogcmVwbGljYSwgdHJhbnNwYXJlbmN5LCBkZXNj
ZW5kYW50cyB3aXRoIGNvbnRlbnRzLgorICAgIGlmICgoaGFzUmVwbGljYSAmJiBoYXNEZXNjZW5k
YW50c1dpdGhDb250ZW50KSB8fCAoaGFzUmVwbGljYSAmJiBoYXNUcmFuc3BhcmVuY3kpIHx8ICho
YXNUcmFuc3BhcmVuY3kgJiYgbV9zdGF0ZS5kZXNjZW5kYW50c1dpdGhDb250ZW50ID4gMSkpCisg
ICAgICAgIG1fbGF5ZXJUeXBlID0gVHJhbnNwYXJlbmN5TGF5ZXI7Cit9Cit2b2lkIFRleHR1cmVN
YXBwZXJOb2RlOjppbml0aWFsaXplVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJl
TWFwcGVyKQoreworICAgIGlmICh0ZXh0dXJlTWFwcGVyLT50eXBlKCkgPT0gbV9sYXN0VGV4dHVy
ZU1hcHBlclR5cGUpCisgICAgICAgIHJldHVybjsKKyNpZiAwCisgICAgaWYgKG1fbGF5ZXJUeXBl
ID09IENsaXBMYXllciB8fCBtX2xheWVyVHlwZSA9PSBUcmFuc3BhcmVuY3lMYXllcgorICAgICAg
ICB8fCAobV9sYXllclR5cGUgPT0gUm9vdExheWVyICYmIHRleHR1cmVNYXBwZXItPmFsbG93U3Vy
ZmFjZUZvclJvb3QoKSkpCisgICAgICAgIG1fc3VyZmFjZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0
ZVRleHR1cmUoKTsKKyAgICBlbHNlIGlmIChtX3N1cmZhY2UpCisgICAgICAgIG1fc3VyZmFjZS0+
ZGVzdHJveSgpOworICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllcikKKyAgICAgICAgbV9yZXBs
aWNhU3VyZmFjZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICBlbHNlIGlm
IChtX3JlcGxpY2FTdXJmYWNlKQorICAgICAgICBtX3JlcGxpY2FTdXJmYWNlLT5kZXN0cm95KCk7
CisjZWxzZQorICAgIG1fc3VyZmFjZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsK
KyAgICBtX3JlcGxpY2FTdXJmYWNlID0gdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOwor
I2VuZGlmCisgICAgbV90ZXh0dXJlID0gdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOwor
ICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUubWFyayhtX3RleHR1cmUuZ2V0KCkpOworICAgIG1fbGFz
dFRleHR1cmVNYXBwZXJUeXBlID0gdGV4dHVyZU1hcHBlci0+dHlwZSgpOworfQorCitUZXh0dXJl
TWFwcGVyTm9kZTo6VGV4dHVyZU1hcHBlck5vZGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIq
IG5ld0xheWVyKQorICAgIDogbV9sYXllcihuZXdMYXllcikKKyAgICAsIG1fbGFzdFRleHR1cmVN
YXBwZXJUeXBlKDApCisgICAgLCBtX2xhc3RUZXh0dXJlTWFwcGVyKDApCisgICAgLCBtX2xheWVy
VHlwZShEZWZhdWx0TGF5ZXIpCisgICAgLCBtX3N1cmZhY2UoMCkKKyAgICAsIG1fcGFyZW50KDAp
CisgICAgLCBtX2VmZmVjdFRhcmdldCgwKQorICAgICwgbV9jaGFuZ2VNYXNrKE5vQ2hhbmdlcykK
KyAgICAsIG1fcGxhdGZvcm1DbGllbnQoMCkKK3sKKworfQorCitUZXh0dXJlTWFwcGVyTm9kZSog
VGV4dHVyZU1hcHBlck5vZGU6OnJvb3RMYXllcigpCit7CisgICAgaWYgKG1fZWZmZWN0VGFyZ2V0
KQorICAgICAgICByZXR1cm4gbV9lZmZlY3RUYXJnZXQtPnJvb3RMYXllcigpOworICAgIGlmICht
X3BhcmVudCkKKyAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5yb290TGF5ZXIoKTsKKyAgICByZXR1
cm4gdGhpczsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6aW52YWxpZGF0ZVRyYW5zZm9y
bSgpCit7CisgICAgbV90cmFuc2Zvcm1zLmRpcnR5ID0gdHJ1ZTsKKyAgICBpZiAobV9sYXllclR5
cGUgIT0gQ2xpcExheWVyKQorICAgICAgICBtX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKKyAgICBpZiAo
bV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5pbnZh
bGlkYXRlVHJhbnNmb3JtKCk7CisgICAgY29uc3QgaW50IHNpemUgPSBtX2NoaWxkcmVuLnNpemUo
KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBpZiAoVGV4
dHVyZU1hcHBlck5vZGUqIGxheWVyID0gbV9jaGlsZHJlbltpXSkKKyAgICAgICAgICAgIGxheWVy
LT5pbnZhbGlkYXRlVHJhbnNmb3JtKCk7CisgICAgfQorfQorCit2b2lkIFRleHR1cmVNYXBwZXJO
b2RlOjpjb21wdXRlTG9jYWxUcmFuc2Zvcm0oKQoreworICAgIGlmICghbV90cmFuc2Zvcm1zLmxv
Y2FsRGlydHkpCisgICAgICAgIHJldHVybjsKKyAgICBjb25zdCBmbG9hdCBvcmlnaW5YID0gbV9z
dGF0ZS5hbmNob3JQb2ludC54KCkgKiBtX3NpemUud2lkdGgoKTsKKyAgICBjb25zdCBmbG9hdCBv
cmlnaW5ZID0gbV9zdGF0ZS5hbmNob3JQb2ludC55KCkgKiBtX3NpemUuaGVpZ2h0KCk7CisgICAg
bV90cmFuc2Zvcm1zLmxvY2FsID0KKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoKQorICAg
ICAgICAudHJhbnNsYXRlM2Qob3JpZ2luWCArIG1fc3RhdGUucG9zLngoKSwgb3JpZ2luWSArIG1f
c3RhdGUucG9zLnkoKSwgbV9zdGF0ZS5hbmNob3JQb2ludC56KCkpCisgICAgICAgIC5tdWx0TGVm
dChtX3N0YXRlLnRyYW5zZm9ybSkKKyAgICAgICAgLnRyYW5zbGF0ZTNkKC1vcmlnaW5YLCAtb3Jp
Z2luWSwgLW1fc3RhdGUuYW5jaG9yUG9pbnQueigpKTsKKyAgICBtX3RyYW5zZm9ybXMubG9jYWxE
aXJ0eSA9IGZhbHNlOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpmbGF0dGVuVG8yRFNw
YWNlSWZOZWNlc3NhcnkoKQoreworICAgIGlmIChtX3N0YXRlLnByZXNlcnZlczNEKQorICAgICAg
ICByZXR1cm47CisgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE0xMygwKTsKKyAg
ICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTIzKDApOworICAgIG1fdHJhbnNmb3Jt
cy5mb3JEZXNjZW5kYW50cy5zZXRNMzEoMCk7CisgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRh
bnRzLnNldE0zMigwKTsKKyAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTMzKDEp
OworICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNMzQoMCk7CisgICAgbV90cmFu
c2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE00MygwKTsKK30KKworSW50U2l6ZSBUZXh0dXJlTWFw
cGVyTm9kZTo6bmVhcmVzdFN1cmZhY2VTaXplKCkgY29uc3QKK3sKKyAgICBpZiAobV9sYXllclR5
cGUgPT0gQ2xpcExheWVyIHx8IG1fbGF5ZXJUeXBlID09IFJvb3RMYXllcikKKyAgICAgICAgcmV0
dXJuIG1fc3VyZmFjZSAmJiAhbV9zdXJmYWNlLT5zaXplKCkuaXNFbXB0eSgpID8gbV9zdXJmYWNl
LT5zaXplKCkgOiBtX3NpemU7CisgICAgcmV0dXJuIG1fcGFyZW50LT5uZWFyZXN0U3VyZmFjZVNp
emUoKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVJlcGxpY2FUcmFuc2Zv
cm0oKQoreworICAgIGlmICghbV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fbmVhcmVzdFN1cmZhY2VTaXplID0gbmVhcmVzdFN1cmZhY2VTaXplKCk7CisKKyAg
ICBpZiAobV9sYXllclR5cGUgIT0gVHJhbnNwYXJlbmN5TGF5ZXIpIHsKKyAgICAgICAgbV90cmFu
c2Zvcm1zLnJlcGxpY2EgPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtX3RyYW5zZm9ybXMudGFyZ2V0
KS5tdWx0TGVmdChtX3N0YXRlLnJlcGxpY2FMYXllci0+bV90cmFuc2Zvcm1zLmxvY2FsKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IGZsb2F0IG9yaWdpblggPSBtX3RyYW5z
Zm9ybXMudGFyZ2V0Lm00MSgpOworICAgIGNvbnN0IGZsb2F0IG9yaWdpblkgPSBtX3RyYW5zZm9y
bXMudGFyZ2V0Lm00MigpOworICAgIG1fdHJhbnNmb3Jtcy5yZXBsaWNhID0KKyAgICAgICAgICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkKKyAgICAgICAgICAgICAgICAudHJhbnNsYXRlKG9yaWdp
blgsIG9yaWdpblkpCisgICAgICAgICAgICAgICAgLm11bHRMZWZ0KG1fc3RhdGUucmVwbGljYUxh
eWVyLT5tX3RyYW5zZm9ybXMubG9jYWwpCisgICAgICAgICAgICAgICAgLnRyYW5zbGF0ZSgtb3Jp
Z2luWCwgLW9yaWdpblkpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlVHJh
bnNmb3JtYXRpb25zKCkKK3sKKyAgICBpZiAoIW1fdHJhbnNmb3Jtcy5kaXJ0eSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV90cmFuc2Zvcm1zLmRpcnR5ID0gZmFsc2U7CisgICAgaWYgKChtX3Np
emUuaXNFbXB0eSgpICYmIG1fc3RhdGUubWFza3NUb0JvdW5kcykpCisgICAgICAgIHJldHVybjsK
KworICAgIFRleHR1cmVNYXBwZXJOb2RlKiBwYXJlbnQgPSBtX3BhcmVudDsKKyAgICBjb21wdXRl
TG9jYWxUcmFuc2Zvcm0oKTsKKworICAgIG1fdHJhbnNmb3Jtcy50YXJnZXQgPSBUcmFuc2Zvcm1h
dGlvbk1hdHJpeChwYXJlbnQgPyBwYXJlbnQtPm1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cyA6
IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpLm11bHRMZWZ0KG1fdHJhbnNmb3Jtcy5sb2NhbCk7Cisg
ICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzID0gKG1fbGF5ZXJUeXBlID09IENsaXBMYXll
ciA/IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkgOiBtX3RyYW5zZm9ybXMudGFyZ2V0KTsKKworICAg
IGlmIChtX2VmZmVjdFRhcmdldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90cmFuc2Zvcm1z
LnRhcmdldEJvdW5kaW5nUmVjdCA9IEludFJlY3QobV90cmFuc2Zvcm1zLnRhcmdldC5tYXBSZWN0
KGZ1bGxSZWN0KCkpKTsKKyAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIG1f
c3RhdGUucmVwbGljYUxheWVyLT5jb21wdXRlVHJhbnNmb3JtYXRpb25zKCk7CisKKyAgICBmbGF0
dGVuVG8yRFNwYWNlSWZOZWNlc3NhcnkoKTsKKworICAgIGlmICghbV9zdGF0ZS5iYWNrZmFjZVZp
c2liaWxpdHkgJiYgbV90cmFuc2Zvcm1zLnRhcmdldC5pbnZlcnNlKCkubTMzKCkgPCAwKSB7Cisg
ICAgICAgIG1fc3RhdGUudmlzaWJsZSA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIG1fc3RhdGUudmlzaWJsZSA9IHRydWU7CisKKyAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+
bV9zdGF0ZS5wcmVzZXJ2ZXMzRCkKKyAgICAgICAgbV90cmFuc2Zvcm1zLmNlbnRlclogPSBtX3Ry
YW5zZm9ybXMudGFyZ2V0Lm1hcFBvaW50KEZsb2F0UG9pbnQzRChtX3NpemUud2lkdGgoKSAvIDIs
IG1fc2l6ZS5oZWlnaHQoKSAvIDIsIDApKS56KCk7CisKKyAgICBpZiAoIW1fY2hpbGRyZW4uc2l6
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zdGF0ZS5jaGlsZHJlblRyYW5zZm9y
bS5pc0lkZW50aXR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEZsb2F0UG9pbnQg
Y2VudGVyUG9pbnQgPSBGbG9hdFBvaW50KG1fc2l6ZS53aWR0aCgpIC8gMiwgbV9zaXplLmhlaWdo
dCgpIC8gMik7CisgICAgaWYgKG1fdHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZURpcnR5KQorICAgICAg
ICBtX3RyYW5zZm9ybXMucGVyc3BlY3RpdmUgPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpCisgICAg
ICAgICAgICAudHJhbnNsYXRlKGNlbnRlclBvaW50LngoKSwgY2VudGVyUG9pbnQueSgpKQorICAg
ICAgICAgICAgLm11bHRMZWZ0KG1fc3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm0pCisgICAgICAgICAg
ICAudHJhbnNsYXRlKC1jZW50ZXJQb2ludC54KCksIC1jZW50ZXJQb2ludC55KCkpOworICAgIG1f
dHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZURpcnR5ID0gZmFsc2U7CisgICAgbV90cmFuc2Zvcm1zLmZv
ckRlc2NlbmRhbnRzLm11bHRMZWZ0KG1fdHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZSk7Cit9CisKK3Zv
aWQgVGV4dHVyZU1hcHBlck5vZGU6OnVwbG9hZFRleHR1cmVGcm9tQ29udGVudChUZXh0dXJlTWFw
cGVyKiB0ZXh0dXJlTWFwcGVyKQoreworICAgIC8vIG5lZWRzIGFjdGl2ZSBjb250ZXh0CisgICAg
aWYgKG1fc2l6ZS5pc0VtcHR5KCkgfHwgIW1fbGF5ZXIpIHsKKyAgICAgICAgbV90ZXh0dXJlLT5k
ZXN0cm95KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9jdXJyZW50Q29u
dGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlKSB7CisgICAgICAgIGlm
IChtX2N1cnJlbnRDb250ZW50LmltYWdlKQorICAgICAgICAgICAgbV90ZXh0dXJlLT5zZXRDb250
ZW50c1RvSW1hZ2UobV9jdXJyZW50Q29udGVudC5pbWFnZS5nZXQoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBNZWRp
YUNvbnRlbnRUeXBlKSB7CisgICAgICAgIGlmICghbV9jdXJyZW50Q29udGVudC5tZWRpYSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV90ZXh0dXJlLT5yZXNldChtX3NpemUsIHRydWUp
OworICAgICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250ZXh0ID0gbV90
ZXh0dXJlLT5iZWdpblBhaW50TWVkaWEoKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRl
eHQocGxhdGZvcm1Db250ZXh0KTsKKyAgICAgICAgbV9jdXJyZW50Q29udGVudC5tZWRpYS0+cGFp
bnQoJmNvbnRleHQpOworICAgICAgICBtX3RleHR1cmUtPmVuZFBhaW50KCk7CisgICAgfQorCisg
ICAgY29uc3QgYm9vbCBuZWVkc1Jlc2V0ID0gKG1fdGV4dHVyZS0+Y29udGVudFNpemUoKSAhPSBt
X3NpemUpIHx8ICFtX3RleHR1cmUtPmlzVmFsaWQoKTsKKyAgICBpZiAoKG1fY3VycmVudENvbnRl
bnQuY29udGVudFR5cGUgIT0gSFRNTENvbnRlbnRUeXBlKQorICAgICAgICB8fCAoIW1fY3VycmVu
dENvbnRlbnQubmVlZHNEaXNwbGF5ICYmIG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVj
dC5pc0VtcHR5KCkgJiYgIW5lZWRzUmVzZXQpKQorICAgICAgICByZXR1cm47CisKKyAgICBXVEY6
OlN0b3BXYXRjaCBzdG9wV2F0Y2g7CisgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSBJbnRSZWN0KDAs
IDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgIGlmICghbmVlZHNSZXNl
dCAmJiAhbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkpCisgICAgICAgIGRpcnR5UmVjdC5p
bnRlcnNlY3QobV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0KTsKKyAgICBpZiAobmVl
ZHNSZXNldCkKKyAgICAgICAgbV90ZXh0dXJlLT5yZXNldChtX3NpemUsIG1fc3RhdGUuY29udGVu
dHNPcGFxdWUpOworCisgICAgeworICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChtX3Rl
eHR1cmUtPmJlZ2luUGFpbnQoZGlydHlSZWN0KSk7CisgICAgICAgIGlmICh0ZXh0dXJlTWFwcGVy
ICYmIHRleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dCgpKSB7CisgICAgICAgICAgICBHcmFw
aGljc0NvbnRleHQqIG9yaWdpbmFsQ29udGV4dCA9IHRleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29u
dGV4dCgpOworICAgICAgICAgICAgY29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KG9yaWdpbmFsQ29udGV4dC0+aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICAgICAg
ICAgIGNvbnRleHQuc2V0VGV4dERyYXdpbmdNb2RlKG9yaWdpbmFsQ29udGV4dC0+dGV4dERyYXdp
bmdNb2RlKCkpOworICAgICAgICB9CisgICAgICAgIG1fbGF5ZXItPnBhaW50R3JhcGhpY3NMYXll
ckNvbnRlbnRzKGNvbnRleHQsIGRpcnR5UmVjdCk7CisgICAgfQorICAgIG1fdGV4dHVyZS0+ZW5k
UGFpbnQoKTsKKyAgICB7CisjaWYgMAorICAgICAgICBMT0coIltUZXh0dXJlTWFwcGVyXSBSZS1y
ZW5kZXIoJWQpIGxheWVyKCVwKSAlZDo6JWQ6OiVkICglZHglZCkgWyVkbXNdXG4iLCArK3JlbmRl
ckNvdW50LCB0aGlzLAorICAgICAgICAgICAgICAgbmVlZHNSZXNldCwgbV9jdXJyZW50Q29udGVu
dC5uZWVkc0Rpc3BsYXksICFtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QuaXNFbXB0
eSgpLAorICAgICAgICAgICAgICAgZGlydHlSZWN0LndpZHRoKCksIGRpcnR5UmVjdC5oZWlnaHQo
KSwgaW50KHN0b3BXYXRjaC5lbGFwc2VkKCkgKiAxMDAwKSk7CisgICAgICAgIHN0YXRpYyBpbnQg
cmVuZGVyQ291bnQgPSAwOworICAgICAgICBtX3RleHR1cmUtPnNhdmUoU3RyaW5nKCkuZm9ybWF0
KCIvdG1wL2xheWVyXyVkLnBuZyIsIHJlbmRlckNvdW50KSk7CisjZW5kaWYKKyAgICB9CisKKyAg
ICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QgPSBJbnRSZWN0KCk7CisgICAgbV9j
dXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKK30KKwordm9pZCBUZXh0dXJlTWFw
cGVyTm9kZTo6cGFpbnRTZWxmKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGZsb2F0IG9w
YWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlLCBCaXRtYXBUZXh0dXJlKiByZXBsaWNh
TWFza1RleHR1cmUsIGJvb2wgaXNTdXJmYWNlKQoreworICAgIC8vIG5lZWRzIGFjdGl2ZSBjb250
ZXh0CisgICAgaWYgKCFtX2xheWVyIHx8IG1fc2l6ZS5pc0VtcHR5KCkgfHwgKCFtX3N0YXRlLmRy
YXdzQ29udGVudCAmJiBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50
VHlwZSkpCisgICAgICAgIHJldHVybjsKKyAgICB1cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQodGV4
dHVyZU1hcHBlcik7CisgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyICYmICFpc1N1cmZhY2Up
CisgICAgICAgIHRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCptX3RleHR1cmUuZ2V0KCksIHJl
cGxpY2FSZWN0KCksIG1fdHJhbnNmb3Jtcy5yZXBsaWNhLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIG9wYWNpdHkgKiBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5vcGFjaXR5LCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICByZXBsaWNhTWFza1RleHR1cmUgPyByZXBsaWNhTWFza1Rl
eHR1cmUgOiBtYXNrVGV4dHVyZSk7CisKKworICAgIGNvbnN0IEludFJlY3QgcmVjdCA9IG1fbGF5
ZXJUeXBlID09IENsaXBMYXllciA/IGZ1bGxSZWN0KCkgOiB0YXJnZXRSZWN0KCk7CisgICAgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gbV9sYXllclR5cGUgPT0gQ2xpcExh
eWVyID8gVHJhbnNmb3JtYXRpb25NYXRyaXgoKSA6IG1fdHJhbnNmb3Jtcy50YXJnZXQ7CisgICAg
dGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUoKm1fdGV4dHVyZS5nZXQoKSwgcmVjdCwgdHJhbnNm
b3JtLCBvcGFjaXR5LCBpc1N1cmZhY2UgPyAwIDogbWFza1RleHR1cmUpOworfQorCit2b2lkIFRl
eHR1cmVNYXBwZXJOb2RlOjpwYWludFJlY3Vyc2l2ZShUZXhtYXBQYWludE9wdGlvbnMgb3B0aW9u
cykKK3sKKyAgICAvLyBuZWVkcyBhY3RpdmUgY29udGV4dAorCisgICAgV1RGOjpTdG9wV2F0Y2gg
c3RvcFdhdGNoOworCisgICAgYm9vbCBpc0RpcnR5ID0gbV9zdGF0ZS5kaXJ0eTsKKyAgICBtX3N0
YXRlLmRpcnR5ID0gZmFsc2U7CisKKyAgICBpZiAoKG1fc2l6ZS5pc0VtcHR5KCkgJiYgKG1fc3Rh
dGUubWFza3NUb0JvdW5kcworICAgICAgICB8fCBtX2NoaWxkcmVuLmlzRW1wdHkoKSkpIHx8ICFt
X3N0YXRlLnZpc2libGUgfHwgb3B0aW9ucy5vcGFjaXR5IDwgMC4wMSB8fCBtX3N0YXRlLm9wYWNp
dHkgPCAwLjAxKQorICAgICAgICByZXR1cm47CisKKyAgICBpbml0aWFsaXplVGV4dHVyZU1hcHBl
cihvcHRpb25zLnRleHR1cmVNYXBwZXIpOworICAgIGNvbXB1dGVSZXBsaWNhVHJhbnNmb3JtKCk7
CisKKyAgICBpZiAobV9zdGF0ZS5tYXNrTGF5ZXIpIHsKKyAgICAgICAgbV9zdGF0ZS5tYXNrTGF5
ZXItPmluaXRpYWxpemVUZXh0dXJlTWFwcGVyKG9wdGlvbnMudGV4dHVyZU1hcHBlcik7CisgICAg
ICAgIG1fc3RhdGUubWFza0xheWVyLT5tX3N0YXRlLmRpcnR5ID0gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyKSB7CisgICAgICAgIG1fc3RhdGUucmVwbGljYUxh
eWVyLT5pbml0aWFsaXplVGV4dHVyZU1hcHBlcihvcHRpb25zLnRleHR1cmVNYXBwZXIpOworICAg
ICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5kaXJ0eSA9IGZhbHNlOworICAgICAg
ICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUubWFza0xheWVyKSB7CisgICAgICAg
ICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5tYXNrTGF5ZXItPmluaXRpYWxpemVU
ZXh0dXJlTWFwcGVyKG9wdGlvbnMudGV4dHVyZU1hcHBlcik7CisgICAgICAgICAgICBtX3N0YXRl
LnJlcGxpY2FMYXllci0+bV9zdGF0ZS5tYXNrTGF5ZXItPm1fc3RhdGUuZGlydHkgPSBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIFRleHR1cmVNYXBwZXJOb2RlKiByZXBsaWNhID0gbV9z
dGF0ZS5yZXBsaWNhTGF5ZXI7CisgICAgY29uc3QgYm9vbCBpc1N1cmZhY2UgPSAobV9sYXllclR5
cGUgPT0gQ2xpcExheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9sYXllclR5
cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAo
bV9sYXllclR5cGUgPT0gUm9vdExheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICYmIChvcHRpb25zLnRleHR1cmVNYXBwZXItPmFsbG93U3VyZmFjZUZvclJvb3QoKSB8fCBtX3N0
YXRlLmhhc1N1cmZhY2VEZXNjZW5kYW50cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKSk7CisgICAgaWYgKGlzU3VyZmFjZSkKKyAgICAgICAgdXBsb2FkVGV4dHVyZUZyb21Db250
ZW50KG9wdGlvbnMudGV4dHVyZU1hcHBlcik7CisgICAgY29uc3QgSW50UmVjdCBib3VuZGluZ1Jl
Y3Rmcm9tTmVhcmVzdFN1cmZhY2UgPSBtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0Owor
CisKKyAgICBvcHRpb25zLm9wYWNpdHkgKj0gbV9zdGF0ZS5vcGFjaXR5OworCisgICAgZmxvYXQg
Y29udGVudE9wYWNpdHkgPSBpc1N1cmZhY2UgPyAxIDogb3B0aW9ucy5vcGFjaXR5OworICAgIFRl
eG1hcFBhaW50T3B0aW9ucyBvcHRpb25zRm9yRGVzY2VuZGFudHMob3B0aW9ucyk7CisgICAgb3B0
aW9uc0ZvckRlc2NlbmRhbnRzLm9wYWNpdHkgPSBjb250ZW50T3BhY2l0eTsKKworICAgIGlmICht
X2xheWVyVHlwZSA9PSBDbGlwTGF5ZXIpIHsKKyAgICAgICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRz
LnZpc2libGVSZWN0ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKS50cmFuc2xhdGUoLWJvdW5kaW5n
UmVjdGZyb21OZWFyZXN0U3VyZmFjZS54KCksIC1ib3VuZGluZ1JlY3Rmcm9tTmVhcmVzdFN1cmZh
Y2UueSgpKS5tYXBSZWN0KG9wdGlvbnMudmlzaWJsZVJlY3QpOworICAgICAgICBvcHRpb25zRm9y
RGVzY2VuZGFudHMuc2Npc3NvclJlY3QgPSBJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBt
X3NpemUuaGVpZ2h0KCkpOworICAgIH0KKworICAgIGlmIChtX2xheWVyVHlwZSA9PSBTY2lzc29y
TGF5ZXIpIAorICAgICAgICBvcHRpb25zRm9yRGVzY2VuZGFudHMuc2Npc3NvclJlY3QuaW50ZXJz
ZWN0KG1fdHJhbnNmb3Jtcy50YXJnZXRCb3VuZGluZ1JlY3QpOworICAgIG9wdGlvbnMudGV4dHVy
ZU1hcHBlci0+c2V0Q2xpcChvcHRpb25zRm9yRGVzY2VuZGFudHMuc2Npc3NvclJlY3QpOworCisg
ICAgVGV4dHVyZU1hcHBlckNhY2hlTG9jayhtX3RleHR1cmUuZ2V0KCkpOworICAgIFRleHR1cmVN
YXBwZXJDYWNoZUxvY2sobV9zdXJmYWNlLmdldCgpKTsKKyAgICBUZXh0dXJlTWFwcGVyQ2FjaGVM
b2NrKG1fcmVwbGljYVN1cmZhY2UuZ2V0KCkpOworCisgICAgZ1RleHR1cmVNYXBwZXJDYWNoZS5w
dXJnZSgpOworCisgICAgaWYgKGlzU3VyZmFjZSkgeworICAgICAgICBBU1NFUlQobV9zdXJmYWNl
KTsKKyAgICAgICAgaWYgKCFtX3N1cmZhY2UtPmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGlzRGly
dHkgPSB0cnVlOworICAgICAgICBpZiAobV9zdGF0ZS50aWxlZCkgeworICAgICAgICAgICAgbV9z
dXJmYWNlLT5yZXNldChvcHRpb25zLnZpc2libGVSZWN0LnNpemUoKSk7CisgICAgICAgICAgICBt
X3N1cmZhY2UtPnNldE9mZnNldChvcHRpb25zLnZpc2libGVSZWN0LmxvY2F0aW9uKCkpOworICAg
ICAgICB9IGVsc2UgaWYgKGlzRGlydHkpCisgICAgICAgICAgICBtX3N1cmZhY2UtPnJlc2V0KG1f
bGF5ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVyID8gb3B0aW9ucy5zdXJmYWNlLT5zaXplKCkg
OiBtX3NpemUpOworICAgICAgICBnVGV4dHVyZU1hcHBlckNhY2hlLm1hcmsobV9zdXJmYWNlLmdl
dCgpKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShtX3N1cmZh
Y2UuZ2V0KCkpOworCisgICAgICAgIG9wdGlvbnNGb3JEZXNjZW5kYW50cy5zdXJmYWNlID0gbV9z
dXJmYWNlLmdldCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX3N1cmZhY2UpCisgICAg
ICAgICAgICBtX3N1cmZhY2UtPmRlc3Ryb3koKTsKKyAgICAgICAgY29udGVudE9wYWNpdHkgPSBv
cHRpb25zLm9wYWNpdHk7CisgICAgfQorCisgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1hc2tU
ZXh0dXJlOworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiByZXBsaWNhTWFza1RleHR1cmU7Cisg
ICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiBtYXNrID0gbV9zdGF0ZS5tYXNrTGF5ZXIpIHsKKyAg
ICAgICAgbWFzay0+dXBsb2FkVGV4dHVyZUZyb21Db250ZW50KG9wdGlvbnMudGV4dHVyZU1hcHBl
cik7CisgICAgICAgIG1hc2tUZXh0dXJlID0gbWFzay0+bV90ZXh0dXJlOworICAgIH0KKworICAg
IGlmIChyZXBsaWNhICYmIHJlcGxpY2EtPm1fc3RhdGUubWFza0xheWVyKSB7CisgICAgICAgIHJl
cGxpY2EtPm1fc3RhdGUubWFza0xheWVyLT51cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQob3B0aW9u
cy50ZXh0dXJlTWFwcGVyKTsKKyAgICAgICAgcmVwbGljYU1hc2tUZXh0dXJlID0gcmVwbGljYS0+
bV9zdGF0ZS5tYXNrTGF5ZXItPm1fdGV4dHVyZTsKKyAgICB9CisKKyAgICBpbnQgY2hpbGRyZW5T
aXplID0gbV9jaGlsZHJlbi5zaXplKCk7CisgICAgaWYgKGlzRGlydHkgfHwgIWlzU3VyZmFjZSB8
fCBtX3N0YXRlLnRpbGVkIHx8ICFtX3N1cmZhY2UtPmlzVmFsaWQoKSkgeworICAgICAgICBib29s
IGRpZFBhaW50U2VsZiA9IGZhbHNlOworICAgICAgICBpZiAoIW1fc3RhdGUucHJlc2VydmVzM0Qg
fHwgbV9jaGlsZHJlbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHBhaW50U2VsZihvcHRpb25z
LnRleHR1cmVNYXBwZXIsIGNvbnRlbnRPcGFjaXR5LCBtYXNrVGV4dHVyZS5nZXQoKSwgcmVwbGlj
YU1hc2tUZXh0dXJlLmdldCgpLCBpc1N1cmZhY2UpOworICAgICAgICAgICAgZGlkUGFpbnRTZWxm
ID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2NoaWxkcmVuLmlzRW1wdHkoKSAm
JiAhaXNTdXJmYWNlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChtX2xheWVy
VHlwZSA9PSBTY2lzc29yTGF5ZXIpCisgICAgICAgICAgICBvcHRpb25zRm9yRGVzY2VuZGFudHMu
c2Npc3NvclJlY3QuaW50ZXJzZWN0KG1fdHJhbnNmb3Jtcy50YXJnZXQubWFwUmVjdChJbnRSZWN0
KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKSk7CisKKyAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlblNpemU7ICsraSkgeworICAgICAgICAgICAgVGV4dHVy
ZU1hcHBlck5vZGUqIGxheWVyID0gbV9jaGlsZHJlbltpXTsKKyAgICAgICAgICAgIGlmICghbGF5
ZXIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmICghZGlkUGFp
bnRTZWxmICYmIGxheWVyLT5tX3RyYW5zZm9ybXMuY2VudGVyWiA+PSAwKSB7CisgICAgICAgICAg
ICAgICAgcGFpbnRTZWxmKG9wdGlvbnMudGV4dHVyZU1hcHBlciwgY29udGVudE9wYWNpdHksIG1h
c2tUZXh0dXJlLmdldCgpLCByZXBsaWNhTWFza1RleHR1cmUuZ2V0KCksIGlzU3VyZmFjZSk7Cisg
ICAgICAgICAgICAgICAgZGlkUGFpbnRTZWxmID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGxheWVyLT5wYWludFJlY3Vyc2l2ZShvcHRpb25zRm9yRGVzY2VuZGFudHMpOworICAg
ICAgICAgICAgaWYgKGlzU3VyZmFjZSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChtX3N1cmZh
Y2UpOworICAgICAgICAgICAgICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUubWFyayhtX3N1cmZhY2Uu
Z2V0KCkpOworICAgICAgICAgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZh
Y2UobV9zdXJmYWNlLmdldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp
ZiAoIWRpZFBhaW50U2VsZikgeworICAgICAgICAgICAgcGFpbnRTZWxmKG9wdGlvbnMudGV4dHVy
ZU1hcHBlciwgY29udGVudE9wYWNpdHksIG1hc2tUZXh0dXJlLmdldCgpLCByZXBsaWNhTWFza1Rl
eHR1cmUuZ2V0KCksIGlzU3VyZmFjZSk7CisgICAgICAgICAgICBkaWRQYWludFNlbGYgPSB0cnVl
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fbGF5ZXJUeXBlID09IFJvb3RMYXllciB8
fCBtX2xheWVyVHlwZSA9PSBEZWZhdWx0TGF5ZXIgfHwgbV9sYXllclR5cGUgPT0gU2Npc3Nvckxh
eWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9zdXJmYWNlKTsKKyAgICBCaXRt
YXBUZXh0dXJlJiB0ZXh0dXJlID0gKm1fc3VyZmFjZS5nZXQoKTsKKyAgICBpZiAocmVwbGljYSkg
eworICAgICAgICBBU1NFUlQobV9yZXBsaWNhU3VyZmFjZSk7CisgICAgICAgIG1fcmVwbGljYVN1
cmZhY2UtPnJlc2V0KG9wdGlvbnMuc3VyZmFjZS0+c2l6ZSgpKTsKKyAgICAgICAgbV9yZXBsaWNh
U3VyZmFjZS0+c2V0T2Zmc2V0KG9wdGlvbnMuc3VyZmFjZS0+b2Zmc2V0KCkpOworICAgICAgICBn
VGV4dHVyZU1hcHBlckNhY2hlLm1hcmsobV9yZXBsaWNhU3VyZmFjZS5nZXQoKSk7CisgICAgICAg
IG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UobV9yZXBsaWNhU3VyZmFjZS5nZXQo
KSk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUodGV4dHVyZSwg
cmVwbGljYVJlY3QoKSwgbV90cmFuc2Zvcm1zLnJlcGxpY2EsIHJlcGxpY2EtPm1fc3RhdGUub3Bh
Y2l0eSwgcmVwbGljYU1hc2tUZXh0dXJlID8gcmVwbGljYU1hc2tUZXh0dXJlLmdldCgpIDogbWFz
a1RleHR1cmUuZ2V0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0
dXJlKHRleHR1cmUsIEludFJlY3QoSW50UG9pbnQoMCwgMCksIG9wdGlvbnMuc3VyZmFjZS0+c2l6
ZSgpKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgMS4wZiwgbWFza1RleHR1cmUuZ2V0KCkpOwor
ICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKG9wdGlvbnMuc3VyZmFj
ZSk7CisgICAgICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUubWFyayhvcHRpb25zLnN1cmZhY2UpOwor
ICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCptX3JlcGxpY2FTdXJm
YWNlLmdldCgpLCBJbnRSZWN0KEludFBvaW50KDAsIDApLCBvcHRpb25zLnN1cmZhY2UtPnNpemUo
KSksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIG9wdGlvbnMub3BhY2l0eSwgMCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNl
KG9wdGlvbnMuc3VyZmFjZSk7CisgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVy
ZSh0ZXh0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xheWVyVHlwZSA9PSBU
cmFuc3BhcmVuY3lMYXllciA/IEludFJlY3QoSW50UG9pbnQoMCwgMCksIG9wdGlvbnMuc3VyZmFj
ZS0+c2l6ZSgpKSA6IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0KCks
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xheWVyVHlwZSA9PSBUcmFuc3BhcmVu
Y3lMYXllciA/IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkgOiBtX3RyYW5zZm9ybXMudGFyZ2V0LCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vcGFjaXR5LCBtYXNrVGV4dHVy
ZS5nZXQoKSk7CisgICAgZ1RleHR1cmVNYXBwZXJDYWNoZS5tYXJrKCZ0ZXh0dXJlKTsKK30KKwor
dm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y2xlYW51cFRleHR1cmVNYXBwZXIoKQoreworICAgIGlm
IChtX3RleHR1cmUpCisgICAgICAgIG1fdGV4dHVyZS0+ZGVzdHJveSgpOworICAgIGlmIChtX3N1
cmZhY2UpCisgICAgICAgIG1fc3VyZmFjZS0+ZGVzdHJveSgpOworICAgIGlmIChtX3JlcGxpY2FT
dXJmYWNlKQorICAgICAgICBtX3JlcGxpY2FTdXJmYWNlLT5kZXN0cm95KCk7CisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2No
aWxkcmVuW2ldKQorICAgICAgICAgICAgbV9jaGlsZHJlbltpXS0+Y2xlYW51cFRleHR1cmVNYXBw
ZXIoKTsKKyAgICB9CisgICAgaWYgKG1fbGFzdFRleHR1cmVNYXBwZXIpCisgICAgICAgIG1fbGFz
dFRleHR1cmVNYXBwZXItPmNsZWFudXAoKTsKK30KKworVGV4dHVyZU1hcHBlck5vZGU6On5UZXh0
dXJlTWFwcGVyTm9kZSgpCit7CisgICAgLy8gbmVlZHMgYWN0aXZlIGNvbnRleHQKKyAgICAvLyBz
eW5jQ29tcG9zaXRpbmdTdGF0ZSh0cnVlKTsKKyAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICB7
CisgICAgICAgIGNvbnN0IGludCBjaGlsZHJlblNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKKyAg
ICAgICAgZm9yIChpbnQgaSA9IGNoaWxkcmVuU2l6ZS0xOyBpID49IDA7IC0taSkgeworICAgICAg
ICAgICAgQVNTRVJUKG1fY2hpbGRyZW5baV0tPm1fcGFyZW50ID09IHRoaXMpOworICAgICAgICAg
ICAgbV9jaGlsZHJlbltpXS0+bV9wYXJlbnQgPSAwOworICAgICAgICB9CisgICAgfQorICAgIGlm
IChtX3BhcmVudCkKKyAgICAgICAgbV9wYXJlbnQtPm1fY2hpbGRyZW4ucmVtb3ZlKG1fcGFyZW50
LT5tX2NoaWxkcmVuLmZpbmQodGhpcykpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpu
b3RpZnlDaGFuZ2UoQ2hhbmdlTWFzayBjaGFuZ2VNYXNrKQoreworICAgIG1fY2hhbmdlTWFzayB8
PSBjaGFuZ2VNYXNrOworICAgIGlmICghbV9sYXllci0+Y2xpZW50KCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX2xheWVyLT5jbGllbnQoKS0+bm90aWZ5U3luY1JlcXVpcmVkKG1fbGF5ZXIpOwor
fQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwZXJmb3JtUG9zdFN5bmNPcGVyYXRpb25zKCkK
K3sKKyAgICBjb25zdCBMYXllclR5cGUgcHJldkxheWVyVHlwZSA9IG1fbGF5ZXJUeXBlOworICAg
IGNvbXB1dGVMYXllclR5cGUoKTsKKyAgICBpZiAocHJldkxheWVyVHlwZSAhPSBtX2xheWVyVHlw
ZSkKKyAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IHRydWU7CisgICAgaWYgKG1fdHJhbnNmb3Jtcy5k
aXJ0eSkgCisgICAgICAgIHNldE5lZWRzRGlzcGxheSgpOworCisgICAgY29tcHV0ZVRyYW5zZm9y
bWF0aW9ucygpOworICAgIGlmIChtX3N0YXRlLm1hc2tMYXllciAmJiAhbV9zdGF0ZS5kaXJ0eSkK
KyAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IG1fc3RhdGUubWFza0xheWVyLT5tX3N0YXRlLmRpcnR5
OworICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllciAmJiAhbV9zdGF0ZS5kaXJ0eSkKKyAgICAg
ICAgbV9zdGF0ZS5kaXJ0eSA9IG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRlLmRpcnR5Owor
CisgICAgY29uc3QgaW50IHNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKKworICAgIGZvciAoaW50
IGkgPSBzaXplIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgVGV4dHVyZU1hcHBlck5vZGUq
IGxheWVyID0gbV9jaGlsZHJlbltpXTsKKworICAgICAgICBsYXllci0+cGVyZm9ybVBvc3RTeW5j
T3BlcmF0aW9ucygpOworICAgICAgICBpZiAoIW1fc3RhdGUuZGlydHkpCisgICAgICAgICAgICBt
X3N0YXRlLmRpcnR5ID0gbGF5ZXItPm1fc3RhdGUuZGlydHk7CisgICAgfQorICAgIG1fc3RhdGUu
aGFzU3VyZmFjZURlc2NlbmRhbnRzID0gaGFzU3VyZmFjZURlc2NlbmRhbnRzKCk7CisgICAgaWYg
KG1fc3RhdGUuZGlydHkpCisgICAgICAgIG1fc3RhdGUuZGVzY2VuZGFudHNXaXRoQ29udGVudCA9
IGNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCgpOworCisgICAgaWYgKG1fc3RhdGUucHJlc2Vy
dmVzM0QpCisgICAgICAgIHNvcnRCeVpPcmRlcihtX2NoaWxkcmVuLCAwLCBzaXplKTsKKyAgICBp
ZiAobV9zdGF0ZS5kaXJ0eSkgCisgICAgICAgIHNldE5lZWRzRGlzcGxheSgpOworfQorCit2b2lk
IFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShib29sIHJlY3Vyc2UpCit7
CisgICAgYm9vbCBuZWVkc1RvSW52YWxpZGF0ZVRyYW5zZm9ybSA9IGZhbHNlOworCisgICAgaWYg
KCFtX2xheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jaGFuZ2VNYXNrID09IE5v
Q2hhbmdlcykKKyAgICAgICAgZ290byBhZnRlckN1cnJlbnRMYXllclN5bmM7CisKKyAgICBzZXRO
ZWVkc0Rpc3BsYXkoKTsKKyAgICBpZiAobV9wYXJlbnQpCisgICAgICAgIG1fcGFyZW50LT5tX3N0
YXRlLmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBl
ID09IEhUTUxDb250ZW50VHlwZSAmJiAobV9jaGFuZ2VNYXNrICYgUGFyZW50Q2hhbmdlKSkgewor
ICAgICAgICAvLyBUaGUgV2ViQ29yZSBjb21wb3NpdG9yIG1hbmFnZXMgaXRlbSBvd25lcnNoaXAu
IFdlIGhhdmUgdG8gbWFrZSBzdXJlIGdyYXBoaWNzdmlldyBkb2Vzbid0CisgICAgICAgIC8vIHRy
eSB0byBzbmF0Y2ggdGhhdCBvd25lcnNoaXAuCisKKyAgICAgICAgaWYgKCFtX2xheWVyLT5wYXJl
bnQoKSkKKyAgICAgICAgICAgIG1fcGFyZW50ID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbV9wYXJlbnQgPSB0b1RleHR1cmVNYXBwZXJOb2RlKG1fbGF5ZXItPnBhcmVudCgpKTsKKwor
ICAgICAgICBpZiAoIW1fbGF5ZXItPnBhcmVudCgpICYmIG1fcGFyZW50KSB7CisgICAgICAgICAg
ICBzaXplX3QgaW5kZXggPSBtX3BhcmVudC0+bV9jaGlsZHJlbi5maW5kKHRoaXMpOworICAgICAg
ICAgICAgbV9wYXJlbnQtPm1fY2hpbGRyZW4ucmVtb3ZlKGluZGV4KTsKKyAgICAgICAgfQorCisg
ICAgfQorCisgICAgaWYgKG1fY2hhbmdlTWFzayAmIENoaWxkcmVuQ2hhbmdlKSB7CisgICAgICAg
IG1fY2hpbGRyZW4uY2xlYXIoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xh
eWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoVGV4dHVyZU1h
cHBlck5vZGUqIGNoaWxkID0gdG9UZXh0dXJlTWFwcGVyTm9kZShtX2xheWVyLT5jaGlsZHJlbigp
W2ldKSkgeworICAgICAgICAgICAgICAgIGlmICghY2hpbGQpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKKyAg
ICAgICAgICAgICAgICBjaGlsZC0+bV9wYXJlbnQgPSB0aGlzOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIG1fc3RhdGUuZGlydHkgPSB0cnVlOworICAgIH0KKworICAgIGlmICht
X2NoYW5nZU1hc2sgJiAoU2l6ZUNoYW5nZSB8IENvbnRlbnRzUmVjdENoYW5nZSkpIHsKKyAgICAg
ICAgSW50U2l6ZSB3YW50ZWRTaXplID0gSW50U2l6ZShtX2xheWVyLT5zaXplKCkud2lkdGgoKSwg
bV9sYXllci0+c2l6ZSgpLmhlaWdodCgpKTsKKyAgICAgICAgaWYgKHdhbnRlZFNpemUuaXNFbXB0
eSgpICYmIG1fcGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlKQor
ICAgICAgICAgICAgd2FudGVkU2l6ZSA9IEludFNpemUobV9sYXllci0+Y29udGVudHNSZWN0KCku
d2lkdGgoKSwgbV9sYXllci0+Y29udGVudHNSZWN0KCkuaGVpZ2h0KCkpOworCisgICAgICAgIGlm
ICh3YW50ZWRTaXplICE9IG1fc2l6ZSkgeworICAgICAgICAgICAgbV9zaXplID0gSW50U2l6ZSh3
YW50ZWRTaXplLndpZHRoKCksIHdhbnRlZFNpemUuaGVpZ2h0KCkpOworICAgICAgICAgICAgaWYg
KG1fcGxhdGZvcm1DbGllbnQpCisgICAgICAgICAgICAgICAgbV9wbGF0Zm9ybUNsaWVudC0+c2V0
U2l6ZUNoYW5nZWQobV9zaXplKTsKKyAgICAgICAgICAgIGNvbnN0IGJvb2wgbmVlZHNUaWxpbmcg
PSBtX3NpemUud2lkdGgoKSA+IDIwMDAgfHwgbV9zaXplLmhlaWdodCgpID4gMjAwMDsKKyAgICAg
ICAgICAgIGlmIChtX3N0YXRlLnRpbGVkICE9IG5lZWRzVGlsaW5nKQorICAgICAgICAgICAgICAg
IG1fc3RhdGUudGlsZWQgPSBuZWVkc1RpbGluZzsKKyAgICAgICAgICAgIG1fc3RhdGUuZGlydHkg
PSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fY2hhbmdlTWFzayAmIE1hc2tM
YXllckNoYW5nZSkKKyAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIGxheWVyID0gdG9UZXh0
dXJlTWFwcGVyTm9kZShtX2xheWVyLT5tYXNrTGF5ZXIoKSkpCisgICAgICAgICAgIGxheWVyLT5t
X2VmZmVjdFRhcmdldCA9IHRoaXM7CisKKyAgICBpZiAobV9jaGFuZ2VNYXNrICYgUmVwbGljYUxh
eWVyQ2hhbmdlKQorICAgICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSogbGF5ZXIgPSB0b1RleHR1
cmVNYXBwZXJOb2RlKG1fbGF5ZXItPnJlcGxpY2FMYXllcigpKSkKKyAgICAgICAgICAgbGF5ZXIt
Pm1fZWZmZWN0VGFyZ2V0ID0gdGhpczsKKworICAgIGlmIChtX2NoYW5nZU1hc2sgJiAoVHJhbnNm
b3JtQ2hhbmdlIHwgU2l6ZUNoYW5nZSB8IEFuY2hvclBvaW50Q2hhbmdlIHwgUG9zaXRpb25DaGFu
Z2UpKQorICAgICAgICBtX3RyYW5zZm9ybXMubG9jYWxEaXJ0eSA9IHRydWU7CisKKyAgICBpZiAo
bV9jaGFuZ2VNYXNrICYgKENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlIHwgU2l6ZUNoYW5nZSkpCisg
ICAgICAgIG1fdHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZURpcnR5ID0gdHJ1ZTsKKworICAgIGlmICht
X2NoYW5nZU1hc2sgJiAoQ2hpbGRyZW5UcmFuc2Zvcm1DaGFuZ2UgfCBQcmVzZXJ2ZXMzRENoYW5n
ZSB8IFRyYW5zZm9ybUNoYW5nZSB8IEFuY2hvclBvaW50Q2hhbmdlIHwgU2l6ZUNoYW5nZSB8IENv
bnRlbnRzUmVjdENoYW5nZSB8IEJhY2tmYWNlVmlzaWJpbGl0eUNoYW5nZSB8IFBvc2l0aW9uQ2hh
bmdlIHwgTWFza0xheWVyQ2hhbmdlIHwgRHJhd3NDb250ZW50Q2hhbmdlIHwgQ29udGVudENoYW5n
ZSB8IFJlcGxpY2FMYXllckNoYW5nZSkpICAgIHsKKyAgICAgICAgLy8gRHVlIHRvIHRoZSBkaWZm
ZXJlbmNlcyBiZXR3ZWVuIHRoZSB3YXkgV2ViQ29yZSBoYW5kbGVzIHRyYW5zZm9ybXMgYW5kIHRo
ZSB3YXkgUXQgaGFuZGxlcyB0cmFuc2Zvcm1zLAorICAgICAgICAvLyBhbGwgdGhlc2UgZWxlbWVu
dHMgYWZmZWN0IHRoZSB0cmFuc2Zvcm1zIG9mIGFsbCB0aGUgZGVzY2VuZGFudHMuCisgICAgICAg
IG5lZWRzVG9JbnZhbGlkYXRlVHJhbnNmb3JtID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9j
aGFuZ2VNYXNrICYgRGlzcGxheUNoYW5nZSkgCisgICAgICAgIG1fc3RhdGUuZGlydHkgPSB0cnVl
OworCisgICAgbV9zdGF0ZS5tYXNrTGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJOb2RlKG1fbGF5ZXIt
Pm1hc2tMYXllcigpKTsKKyAgICBtX3N0YXRlLnJlcGxpY2FMYXllciA9IHRvVGV4dHVyZU1hcHBl
ck5vZGUobV9sYXllci0+cmVwbGljYUxheWVyKCkpOworICAgIG1fc3RhdGUucG9zID0gbV9sYXll
ci0+cG9zaXRpb24oKTsKKyAgICBtX3N0YXRlLmFuY2hvclBvaW50ID0gbV9sYXllci0+YW5jaG9y
UG9pbnQoKTsKKyAgICBtX3N0YXRlLnNpemUgPSBtX2xheWVyLT5zaXplKCk7CisgICAgbV9zdGF0
ZS50cmFuc2Zvcm0gPSBtX2xheWVyLT50cmFuc2Zvcm0oKTsKKyAgICBtX3N0YXRlLmNvbnRlbnRz
UmVjdCA9IG1fbGF5ZXItPmNvbnRlbnRzUmVjdCgpOworICAgIG1fc3RhdGUub3BhY2l0eSA9IG1f
bGF5ZXItPm9wYWNpdHkoKTsKKyAgICBtX3N0YXRlLmNvbnRlbnRzUmVjdCA9IG1fbGF5ZXItPmNv
bnRlbnRzUmVjdCgpOworICAgIG1fc3RhdGUucHJlc2VydmVzM0QgPSBtX2xheWVyLT5wcmVzZXJ2
ZXMzRCgpOworICAgIG1fc3RhdGUubWFza3NUb0JvdW5kcyA9IG1fbGF5ZXItPm1hc2tzVG9Cb3Vu
ZHMoKTsKKyAgICBtX3N0YXRlLmRyYXdzQ29udGVudCA9IG1fbGF5ZXItPmRyYXdzQ29udGVudCgp
OworICAgIG1fc3RhdGUuY29udGVudHNPcGFxdWUgPSBtX2xheWVyLT5jb250ZW50c09wYXF1ZSgp
OworICAgIG1fc3RhdGUuYmFja2ZhY2VWaXNpYmlsaXR5ID0gbV9sYXllci0+YmFja2ZhY2VWaXNp
YmlsaXR5KCk7CisgICAgbV9zdGF0ZS5jaGlsZHJlblRyYW5zZm9ybSA9IG1fbGF5ZXItPmNoaWxk
cmVuVHJhbnNmb3JtKCk7CisgICAgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9IG1fcGVu
ZGluZ0NvbnRlbnQuY29udGVudFR5cGU7CisgICAgbV9jdXJyZW50Q29udGVudC5pbWFnZSA9IG1f
cGVuZGluZ0NvbnRlbnQuaW1hZ2U7CisgICAgbV9jdXJyZW50Q29udGVudC5tZWRpYSA9IG1fcGVu
ZGluZ0NvbnRlbnQubWVkaWE7CisgICAgbV9jdXJyZW50Q29udGVudC5iYWNrZ3JvdW5kQ29sb3Ig
PSBtX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xvcjsKKyAgICBtX2N1cnJlbnRDb250ZW50
Lm5lZWRzRGlzcGxheSA9IG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5IHx8IG1fcGVuZGlu
Z0NvbnRlbnQubmVlZHNEaXNwbGF5OworICAgIG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5
UmVjdC51bml0ZShtX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QpOworICAgIG1fcGVu
ZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5ID0gZmFsc2U7CisgICAgbV9wZW5kaW5nQ29udGVudC5u
ZWVkc0Rpc3BsYXlSZWN0ID0gSW50UmVjdCgpOworICAgIG1fY2hhbmdlTWFzayA9IE5vQ2hhbmdl
czsKKyAgICBhZnRlckN1cnJlbnRMYXllclN5bmM6CisgICAgaWYgKG5lZWRzVG9JbnZhbGlkYXRl
VHJhbnNmb3JtKQorICAgICAgICBpbnZhbGlkYXRlVHJhbnNmb3JtKCk7CisKKyAgICBpZiAobV9z
dGF0ZS5tYXNrTGF5ZXIpIHsKKyAgICAgICAgbV9zdGF0ZS5tYXNrTGF5ZXItPnN5bmNDb21wb3Np
dGluZ1N0YXRlKGZhbHNlKTsKKyAgICAgICAgaWYgKG1fc3RhdGUubWFza0xheWVyLT5tX3NpemUu
aXNFbXB0eSgpKQorICAgICAgICAgICAgbV9zdGF0ZS5tYXNrTGF5ZXItPm1fc2l6ZSA9IG1fc2l6
ZTsKKyAgICB9CisKKyAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIG1fc3Rh
dGUucmVwbGljYUxheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShmYWxzZSk7CisKKyNpZiAwCisg
ICAgaWYgKG1fc3RhdGUuZGlydHkgJiYgbV90ZXh0dXJlICYmIG1fdGV4dHVyZS0+YWxsb3dPZmZs
aW5lVGV4dHVyZVVwbG9hZCgpKQorICAgICAgICB1cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQoMCk7
CisjZW5kaWYKKworICAgIGlmICghcmVjdXJzZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29u
c3QgaW50IGNoaWxkcmVuU2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOworICAgIGZvciAoaW50IGkg
PSBjaGlsZHJlblNpemUtMTsgaSA+PSAwOyAtLWkpCisgICAgICAgIG1fY2hpbGRyZW5baV0tPnN5
bmNDb21wb3NpdGluZ1N0YXRlKHRydWUpOworfQorCitHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cjo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50
KQorICAgIDogR3JhcGhpY3NMYXllcihjbGllbnQpCisgICAgLCBtX25vZGUobmV3IFRleHR1cmVN
YXBwZXJOb2RlKHRoaXMpKQoreworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
OjpzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBtX25vZGUtPm1fbmFtZSA9IG5h
bWU7Cit9CisKK0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjp+R3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIoKQoreworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCk6IFRoZSBjdXJy
ZW50IHNpemUgbWlnaHQgY2hhbmdlLCB0aHVzIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSB3aG9sZSBk
aXNwbGF5LgorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5lZWRzRGlz
cGxheSgpCit7CisgICAgbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheSA9IHRy
dWU7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkRpc3BsYXlD
aGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQoreworICAgIGlmIChtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNw
bGF5KQorICAgICAgICByZXR1cm47CisgICAgbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50Lm5lZWRz
RGlzcGxheVJlY3QudW5pdGUoSW50UmVjdChyZWN0KSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFu
Z2UoVGV4dHVyZU1hcHBlck5vZGU6OkRpc3BsYXlDaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdy
YXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRQ
YXJlbnQoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2Uo
VGV4dHVyZU1hcHBlck5vZGU6OlBhcmVudENoYW5nZSk7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0
UGFyZW50KGxheWVyKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLworYm9v
bCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdy
YXBoaWNzTGF5ZXIqPiYgY2hpbGRyZW4pCit7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4
dHVyZU1hcHBlck5vZGU6OkNoaWxkcmVuQ2hhbmdlKTsKKyAgICByZXR1cm4gR3JhcGhpY3NMYXll
cjo6c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIu
aCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRDaGlsZChHcmFwaGlj
c0xheWVyKiBsYXllcikKK3sKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVy
Tm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkKGxheWVy
KTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBp
bnQgaW5kZXgpCit7CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KGxheWVyLCBp
bmRleCk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNoaWxk
cmVuQ2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiBs
YXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKK3sKKyAgICAgR3JhcGhpY3NMYXllcjo6YWRk
Q2hpbGRBYm92ZShsYXllciwgc2libGluZyk7CisgICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRl
eHR1cmVNYXBwZXJOb2RlOjpDaGlsZHJlbkNoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhp
Y3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxk
QmVsb3coR3JhcGhpY3NMYXllciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpCit7CisK
KyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KGxheWVyLCBzaWJsaW5nKTsKKyAgICBt
X25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOwor
fQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCitib29sIEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyOjpyZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIEdyYXBo
aWNzTGF5ZXIqIG5ld0NoaWxkKQoreworICAgIGlmIChHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hp
bGQob2xkQ2hpbGQsIG5ld0NoaWxkKSkgeworICAgICAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShU
ZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXll
ci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnJlbW92ZUZyb21QYXJl
bnQoKQoreworICAgIGlmICghcGFyZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX25vZGUt
Pm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6UGFyZW50Q2hhbmdlKTsKKyAgICBHcmFw
aGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NM
YXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE1hc2tMYXll
cihHcmFwaGljc0xheWVyKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gbWFza0xheWVyKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRNYXNrTGF5ZXIodmFsdWUp
OworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpNYXNrTGF5ZXJD
aGFuZ2UpOworfQorCisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5
ZXIqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSByZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFJlcGxpY2F0ZWRCeUxheWVyKHZhbHVlKTsK
KyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6UmVwbGljYUxheWVy
Q2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgdmFs
dWUpCit7CisgICAgaWYgKHZhbHVlID09IHBvc2l0aW9uKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbih2YWx1ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlD
aGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlBvc2l0aW9uQ2hhbmdlKTsKK30KKworLyogXHJlaW1w
IChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6
c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFs
dWUgPT0gYW5jaG9yUG9pbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6
OnNldEFuY2hvclBvaW50KHZhbHVlKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJl
TWFwcGVyTm9kZTo6QW5jaG9yUG9pbnRDaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNz
TGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRTaXplKGNv
bnN0IEZsb2F0U2l6ZSYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IHNpemUoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0U2l6ZSh2YWx1ZSk7CisgICAgbV9u
b2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlNpemVDaGFuZ2UpOworfQorCisv
KiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHZhbHVlKQor
eworICAgIGlmICh2YWx1ZSA9PSB0cmFuc2Zvcm0oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
R3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKHZhbHVlKTsKKyAgICBtX25vZGUtPm5vdGlmeUNo
YW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6VHJhbnNmb3JtQ2hhbmdlKTsKK30KKworLyogXHJlaW1w
IChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6
c2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHZhbHVlKQor
eworICAgIGlmICh2YWx1ZSA9PSBjaGlsZHJlblRyYW5zZm9ybSgpKQorICAgICAgICByZXR1cm47
CisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0odmFsdWUpOworICAgIG1f
bm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDaGlsZHJlblRyYW5zZm9ybUNo
YW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OnNldFByZXNlcnZlczNEKGJvb2wgdmFsdWUpCit7CisgICAg
aWYgKHZhbHVlID09IHByZXNlcnZlczNEKCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGlj
c0xheWVyOjpzZXRQcmVzZXJ2ZXMzRCh2YWx1ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2Uo
VGV4dHVyZU1hcHBlck5vZGU6OlByZXNlcnZlczNEQ2hhbmdlKTsKK30KKworLyogXHJlaW1wIChH
cmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0
TWFza3NUb0JvdW5kcyhib29sIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBtYXNrc1RvQm91
bmRzKCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91
bmRzKHZhbHVlKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6
TWFza3NUb0JvdW5kc0NoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQor
Ki8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldERyYXdzQ29udGVudChib29s
IHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBkcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpEcmF3c0Nv
bnRlbnRDaGFuZ2UpOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29udGVudCh2YWx1ZSk7
Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgdmFsdWUpCit7
CisgICAgaWYgKHZhbHVlID09IG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5kQ29s
b3IpCisgICAgICAgIHJldHVybjsKKyAgICBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQuYmFja2dy
b3VuZENvbG9yID0gdmFsdWU7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0QmFja2dyb3VuZENvbG9y
KHZhbHVlKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6QmFj
a2dyb3VuZENvbG9yQ2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisq
Lwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6Y2xlYXJCYWNrZ3JvdW5kQ29sb3Io
KQoreworICAgIGlmICghbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xvci5p
c1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQu
YmFja2dyb3VuZENvbG9yID0gQ29sb3IoKTsKKyAgICBHcmFwaGljc0xheWVyOjpjbGVhckJhY2tn
cm91bmRDb2xvcigpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2Rl
OjpCYWNrZ3JvdW5kQ29sb3JDaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIu
aCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c09wYXF1
ZShib29sIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBjb250ZW50c09wYXF1ZSgpKQorICAg
ICAgICByZXR1cm47CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6
OkNvbnRlbnRzT3BhcXVlQ2hhbmdlKTsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09w
YXF1ZSh2YWx1ZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQg
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sIHZh
bHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBiYWNrZmFjZVZpc2liaWxpdHkoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eSh2YWx1ZSk7
CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkJhY2tmYWNlVmlz
aWJpbGl0eUNoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3Zv
aWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE9wYWNpdHkoZmxvYXQgdmFsdWUpCit7
CisgICAgaWYgKHZhbHVlID09IG9wYWNpdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBo
aWNzTGF5ZXI6OnNldE9wYWNpdHkodmFsdWUpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRl
eHR1cmVNYXBwZXJOb2RlOjpPcGFjaXR5Q2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGlj
c0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVu
dHNSZWN0KGNvbnN0IEludFJlY3QmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBjb250ZW50
c1JlY3QoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRz
UmVjdCh2YWx1ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6
OkNvbnRlbnRzUmVjdENoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQor
Ki8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9JbWFnZShJ
bWFnZSogaW1hZ2UpCit7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5v
ZGU6OkNvbnRlbnRDaGFuZ2UpOworICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5jb250ZW50
VHlwZSA9IGltYWdlID8gVGV4dHVyZU1hcHBlck5vZGU6OkRpcmVjdEltYWdlQ29udGVudFR5cGUg
OiBUZXh0dXJlTWFwcGVyTm9kZTo6SFRNTENvbnRlbnRUeXBlOworICAgIG1fbm9kZS0+bV9wZW5k
aW5nQ29udGVudC5pbWFnZSA9IGltYWdlOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRz
VG9JbWFnZShpbWFnZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3Zv
aWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzQmFja2dyb3VuZENvbG9y
KGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJl
TWFwcGVyTm9kZTo6Q29udGVudENoYW5nZSk7CisgICAgbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50
LmNvbnRlbnRUeXBlID0gVGV4dHVyZU1hcHBlck5vZGU6OkNvbG9yQ29udGVudFR5cGU7CisgICAg
bV9ub2RlLT5tX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xvciA9IGNvbG9yOworICAgIEdy
YXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzQmFja2dyb3VuZENvbG9yKGNvbG9yKTsKK30KKworCit2
b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZv
cm1MYXllciogbWVkaWEpCit7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb01lZGlh
KG1lZGlhKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29u
dGVudENoYW5nZSk7CisgICAgbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlID0g
bWVkaWEgPyBUZXh0dXJlTWFwcGVyTm9kZTo6TWVkaWFDb250ZW50VHlwZSA6IFRleHR1cmVNYXBw
ZXJOb2RlOjpIVE1MQ29udGVudFR5cGU7CisgICAgaWYgKG1lZGlhKQorICAgICAgICBtX25vZGUt
Pm1fcGVuZGluZ0NvbnRlbnQubWVkaWEgPSBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyVmlkZW9M
YXllcio+KG1lZGlhKTsKKyAgICBlbHNlCisgICAgICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVu
dC5tZWRpYSA9IDA7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQg
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzT3JpZW50YXRpb24oQ29tcG9z
aXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIGlmIChjb250
ZW50c09yaWVudGF0aW9uKCkgPT0gb3JpZW50YXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICBt
X25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudHNPcmllbnRhdGlv
bkNoYW5nZSk7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcmllbnRhdGlvbihvcmll
bnRhdGlvbik7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVy
T25seSgpCit7CisgICAgbV9ub2RlLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShmYWxzZSk7CisgICAg
bV9ub2RlLT5wZXJmb3JtUG9zdFN5bmNPcGVyYXRpb25zKCk7Cit9CisKKy8qIFxyZWltcCAoR3Jh
cGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnN5bmND
b21wb3NpdGluZ1N0YXRlKCkKK3sKKyAgICBHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdT
dGF0ZSgpOworICAgIG1fbm9kZS0+c3luY0NvbXBvc2l0aW5nU3RhdGUodHJ1ZSk7CisgICAgbV9u
b2RlLT5wZXJmb3JtUG9zdFN5bmNPcGVyYXRpb25zKCk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhp
Y3NMYXllci5oKQorICovCitOYXRpdmVMYXllciBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6
bmF0aXZlTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX25vZGUuZ2V0KCk7Cit9CisKKy8q
IFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK1BsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9u
b2RlLmdldCgpOworfQorCitQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IEdyYXBoaWNzTGF5ZXI6
OmNyZWF0ZShHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJuIG5ldyBH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihjbGllbnQpOworfQorCit9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
ci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTE1OGYzCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIuaApAQCAtMCwwICsxLDk2IEBACisvKgorICAgIENvcHlyaWdo
dCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaWZuZGVmIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyX2gKKyNkZWZpbmUgR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXJfaAorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDbGllbnQu
aCIKKyNpbmNsdWRlICJJbWFnZS5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2VuZGlmCisKKyNkZWZpbmUgRU5BQkxFX1RFWE1BUF9B
TklNQVRJT04gMAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHR1cmVNYXBwZXJO
b2RlOworY2xhc3MgQml0bWFwVGV4dHVyZTsKK2NsYXNzIFRleHR1cmVNYXBwZXI7CisKK2NsYXNz
IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyIDogcHVibGljIEdyYXBoaWNzTGF5ZXIgeworICAg
IGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVyTm9kZTsKKworcHVibGljOgorICAgIEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqKTsKKyAgICB2aXJ0dWFsIH5H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcigpOworCisgICAgLy8gcmVpbXBzIGZyb20gR3JhcGhp
Y3NMYXllci5oCisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpOworICAgIHZpcnR1
YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmly
dHVhbCB2b2lkIHNldFBhcmVudChHcmFwaGljc0xheWVyKiBsYXllcik7CisgICAgdmlydHVhbCBi
b29sIHNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRkQ2hpbGQoR3JhcGhpY3NMYXllciopOworICAgIHZpcnR1YWwgdm9pZCBhZGRD
aGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllciosIGludCBpbmRleCk7CisgICAgdmlydHVhbCB2b2lk
IGFkZENoaWxkQWJvdmUoR3JhcGhpY3NMYXllciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxp
bmcpOworICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqIGxheWVy
LCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxk
KEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFwaGljc0xheWVyKiBuZXdDaGlsZCk7CisgICAg
dmlydHVhbCB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFz
a0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zaXRp
b24oY29uc3QgRmxvYXRQb2ludCYgcCk7CisgICAgdmlydHVhbCB2b2lkIHNldEFuY2hvclBvaW50
KGNvbnN0IEZsb2F0UG9pbnQzRCYgcCk7CisgICAgdmlydHVhbCB2b2lkIHNldFNpemUoY29uc3Qg
RmxvYXRTaXplJiBzaXplKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hpbGRyZW5UcmFu
c2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRQcmVzZXJ2ZXMzRChib29sIGIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrc1RvQm91bmRz
KGJvb2wgYik7CisgICAgdmlydHVhbCB2b2lkIHNldERyYXdzQ29udGVudChib29sIGIpOworICAg
IHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0
dWFsIHZvaWQgY2xlYXJCYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29u
dGVudHNPcGFxdWUoYm9vbCBiKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2ZhY2VWaXNpYmls
aXR5KGJvb2wgYik7CisgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSk7
CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciopOworICAg
IHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0Q29udGVudHNCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKKyNpZiBFTkFCTEUoM0Rf
Q0FOVkFTKQorICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvR3JhcGhpY3NDb250ZXh0M0Qo
Y29uc3QgR3JhcGhpY3NDb250ZXh0M0QqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3ND
b250ZXh0M0ROZWVkc0Rpc3BsYXkoKTsKKyNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBzZXRDb250
ZW50c09yaWVudGF0aW9uKENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBvcmllbnRh
dGlvbik7CisgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlKCk7CisgICAgdmly
dHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIHZp
cnR1YWwgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgdmlydHVhbCBOYXRp
dmVMYXllciBuYXRpdmVMYXllcigpIGNvbnN0OworICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciog
cGxhdGZvcm1MYXllcigpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGFkZEFuaW1hdGlvbihj
b25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUmIC8qYm94U2l6ZSovLCBjb25z
dCBBbmltYXRpb24qLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyYgLyprZXlmcmFtZXNOYW1lKi8sIGRvdWJsZSAvKnRpbWVPZmZzZXQqLykgeyByZXR1cm4gZmFs
c2U7IH0KKworcHJpdmF0ZToKKyAgICBPd25QdHI8VGV4dHVyZU1hcHBlck5vZGU+IG1fbm9kZTsK
K307CisKK30KKyNlbmRpZiAvLyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcl9oCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmggYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNjMWM2ZAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaApAQCAtMCwwICsx
LDEyMCBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
VGV4dHVyZU1hcHBlcl9oCisjZGVmaW5lIFRleHR1cmVNYXBwZXJfaAorCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIChkZWZpbmVkKFFUX09QRU5HTF9MSUIpKQorICAgICNp
ZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKSAmJiAhZGVmaW5lZChURVhNQVBfT1BFTkdMX0VTXzIp
CisgICAgICAgICNkZWZpbmUgVEVYTUFQX09QRU5HTF9FU18yCisgICAgI2VuZGlmCisjZW5kaWYK
KworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNp
bmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKwor
LyoKKyAgICBUZXh0dXJlTWFwcGVyIGlzIGEgbWVjaGFuaXNtIHRoYXQgZW5hYmxlcyBoYXJkd2Fy
ZSBhY2NlbGVyYXRpb24gb2YgQ1NTIGFuaW1hdGlvbnMgKGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5n
KSB3aXRob3V0CisgICAgYSBuZWVkIGZvciBhIHBsYXRmb3JtIHNwZWNpZmljIHNjZW5lLWdyYXBo
IGxpYnJhcnkgbGlrZSBDb3JlQW5pbWF0aW9ucyBvciBRR3JhcGhpY3NWaWV3LgorKi8KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0dXJlTWFwcGVyOworCisvLyBBIDJEIHRleHR1
cmUgdGhhdCBjYW4gYmUgdGhlIHRhcmdldCBvZiBzb2Z0d2FyZSBvciBHTCByZW5kZXJpbmcuCitj
bGFzcyBCaXRtYXBUZXh0dXJlICA6IHB1YmxpYyBSZWZDb3VudGVkPEJpdG1hcFRleHR1cmU+IHsK
K3B1YmxpYzoKKyAgICBCaXRtYXBUZXh0dXJlKCkgOiBtX2xvY2tDb3VudCgwKSB7fQorICAgIHZp
cnR1YWwgfkJpdG1hcFRleHR1cmUoKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBhbGxvd09mZmxp
bmVUZXh0dXJlVXBsb2FkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgZGVzdHJveSgpID0gMDsKKyAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVzZXQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBvcGFxdWUgPSBmYWxzZSkKKyAgICB7Cisg
ICAgICAgIG1faXNPcGFxdWUgPSBvcGFxdWU7CisgICAgICAgIG1fY29udGVudFNpemUgPSBzaXpl
OworICAgIH0KKworICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFp
bnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVuZFBh
aW50KCkgPSAwOworICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFp
bnRNZWRpYSgpCisgICAgeworICAgICAgICByZXR1cm4gYmVnaW5QYWludChJbnRSZWN0KDAsIDAs
IHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKTsKKyAgICB9CisgICAgdmlydHVhbCB2
b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2F2
ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgaW5saW5l
IHZvaWQgbG9jaygpIHsgKyttX2xvY2tDb3VudDsgfQorICAgIGlubGluZSB2b2lkIHVubG9jaygp
IHsgLS1tX2xvY2tDb3VudDsgfQorICAgIGlubGluZSBib29sIGlzTG9ja2VkKCkgeyByZXR1cm4g
bV9sb2NrQ291bnQ7IH0KKyAgICBpbmxpbmUgSW50U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGVudFNpemU7IH0KKyAgICBpbmxpbmUgdm9pZCBzZXRPZmZzZXQoY29uc3Qg
SW50UG9pbnQmIG8pIHsgbV9vZmZzZXQgPSBvOyB9CisgICAgaW5saW5lIEludFBvaW50IG9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Citwcml2YXRlOgorICAgIGludCBtX2xvY2tD
b3VudDsKKyAgICBJbnRTaXplIG1fY29udGVudFNpemU7CisgICAgYm9vbCBtX2lzT3BhcXVlOwor
ICAgIEludFBvaW50IG1fb2Zmc2V0OworfTsKKworLy8gQSAiY29udGV4dCIgY2xhc3MgdXNlZCB0
byBlbmNhcHN1bGF0ZSBhY2NlbGVyYXRlZCB0ZXh0dXJlIG1hcHBpbmcgZnVuY3Rpb25zOiBpLmUu
IGRyYXdpbmcgYSB0ZXh0dXJlCisvLyBvbnRvIHRoZSBzY3JlZW4gb3IgaW50byBhbm90aGVyIHRl
eHR1cmUgd2l0aCBhIHNwZWNpZmllZCB0cmFuc2Zvcm0sIG9wYWNpdHkgYW5kIG1hc2suCitjbGFz
cyBUZXh0dXJlTWFwcGVyIDogcHVibGljIFJlZkNvdW50ZWQ8VGV4dHVyZU1hcHBlcj4geworICAg
IGZyaWVuZCBjbGFzcyBCaXRtYXBUZXh0dXJlOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8VGV4dHVyZU1hcHBlcj4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dCopOworICAgIHZpcnR1
YWwgflRleHR1cmVNYXBwZXIoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShj
b25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXQsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBm
bG9hdCBvcGFjaXR5ID0gMS4wZiwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUgPSAw
KSA9IDA7CisKKyAgICAvLyBtYWtlcyBhIHN1cmZhY2UgdGhlIHRhcmdldCBmb3IgdGhlIGZvbGxv
d2luZyBkcmF3VGV4dHVyZSBjYWxscy4KKyAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0
bWFwVGV4dHVyZSogc3VyZmFjZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGFyZ2V0
KGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFNpemUmLCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBJbnRSZWN0JiB2
aXNpYmxlUmVjdCkKKyAgICB7CisgICAgICAgIGRyYXdUZXh0dXJlKHRleHR1cmUsIEludFJlY3Qo
MCwgMCwgdGV4dHVyZS5jb250ZW50U2l6ZSgpLndpZHRoKCksIHRleHR1cmUuY29udGVudFNpemUo
KS5oZWlnaHQoKSksIG1hdHJpeCwgb3BhY2l0eSwgMCk7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIHNldENsaXAoY29uc3QgSW50UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dT
dXJmYWNlRm9yUm9vdCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5
cGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFudXAoKSB7fQorCisgICAgR3Jh
cGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fZ2M7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgVGV4dHVyZU1hcHBlcihHcmFwaGlj
c0NvbnRleHQqIGdjKSA6IG1fZ2MoZ2MpIHt9CisgICAgR3JhcGhpY3NDb250ZXh0KiBtX2djOwor
fTsKKworfTsKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNlOWZjOQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcl9oCisjZGVmaW5lIFRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHQ7
CitjbGFzcyBJbnRSZWN0OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIFRyYW5zZm9ybWF0aW9uTWF0
cml4OworCisKKy8vIEdsdWUgbGF5ZXIgdG8gY29ubmVjdCB0aGUgdGV4bWFwIGxheWVyIHRvIHRo
ZSBwbGF0Zm9ybSBzcGVjaWZpYyBjb250YWluZXIuCitjbGFzcyBUZXh0dXJlTWFwcGVyTGF5ZXJD
bGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJMYXllckNsaWVudCgp
IHt9CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZUNoYW5nZWQoY29uc3QgSW50U2l6ZSYpID0gMDsKK307CisK
K2NsYXNzIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyIHsKK3B1YmxpYzoKKyAgICBlbnVtIFR5
cGUgeworICAgICAgICBDb250ZW50TGF5ZXIsCisgICAgICAgIFZpZGVvTGF5ZXIKKyAgICB9Owor
CisgICAgdmlydHVhbCBUeXBlIGxheWVyVHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIH5U
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcigpIHt9Cit9OworCitjbGFzcyBUZXh0dXJlTWFwcGVy
Q29udGVudExheWVyIDogcHVibGljIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyIHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGxhdGZvcm1MYXllckNsaWVudChUZXh0dXJlTWFwcGVy
TGF5ZXJDbGllbnQqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEludFNpemUmLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRS
ZWN0JiBleHBvc2VkUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwg
ZmxvYXQgb3BhY2l0eSkge30KKyAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFRleHR1cmVNYXBwZXIoKSB7fQorICAgIHZpcnR1YWwg
VHlwZSBsYXllclR5cGUoKSBjb25zdCB7IHJldHVybiBDb250ZW50TGF5ZXI7IH0KK307CisKKyNp
ZiBFTkFCTEUoVklERU8pCitjbGFzcyBUZXh0dXJlTWFwcGVyVmlkZW9MYXllciA6IHB1YmxpYyBU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHBh
aW50KEdyYXBoaWNzQ29udGV4dCopID0gMDsKKyAgICB2aXJ0dWFsIFR5cGUgbGF5ZXJUeXBlKCkg
Y29uc3QgeyByZXR1cm4gVmlkZW9MYXllcjsgfQorfTsKKyNlbmRpZgorCit9CisKKyNlbmRpZiAv
LyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70130</attachid>
            <date>2010-10-07 12:33:32 -0700</date>
            <delta_ts>2010-10-07 14:00:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch-47070-6.diff</filename>
            <type>text/plain</type>
            <size>72223</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzJiZjllNy4uOGM0YzcyYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAxMC0xMC0wNSAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5p
dGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBUZXh0dXJlIE1hcHBlciBpcyBhbiBpbXBsZW1l
bnRhdGlvbiBvZiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyB0aGF0IGRvZXNuJ3QgcmVxdWlyZSBh
CisgICAgICAgIHBsYXRmb3JtIHNwZWNpZmljIHNjZW5lZ3JhcGggbGlicmFyeSBsaWtlIENBIG9y
IFFHcmFwaGljc1ZpZXcuIFRoZSBpZGVhIGlzIHRoYXQgd2l0aAorICAgICAgICB0aW1lIHRoaXMg
d291bGQgcmVwbGFjZSBHcmFwaGljc0xheWVyUXQsIGFuZCBjb3VsZCBzZXJ2ZSBhcyBhbiBpbXBs
ZW1lbnRhdGlvbiBmb3Igb3RoZXIKKyAgICAgICAgcGxhdGZvcm1zIHRoYXQgZG9uJ3QgaGF2ZSBh
IHNjZW5lZ3JhcGggbGlicmFyeS4gVGhlIGZpcnN0IHN0YWdlIG9mIHRoaXMgaXMgdG8gYWRkIGFs
bCB0aGUgY29kZSB0byB0cnVuaywKKyAgICAgICAgYW5kIGVuYWJsZSBpdCBpbiBRdCB3aXRoIGFu
IG9wdC1pbiBidWlsZCBmbGFnIHNvIHRoYXQgaXQgY2FuIGJlIGVhc2lseSB0ZXN0ZWQuIE9uY2Ug
aXQgcmVhY2hlcworICAgICAgICBhbiBhZGVxdWF0ZSBsZXZlbCBvZiBzdGFiaWxpdHksIHdlIGNh
biBlbmFibGUgaXQgYnkgZGVmYXVsdCBhbmQgZXZlbnR1YWxseSBoYXZlIGl0IHJlcGxhY2UgR3Jh
cGhpY3NMYXllclF0LgorCisgICAgICAgIFRoaXMgY2hhbmdlIGluY2x1ZGVzIG9ubHkgdGhlIGNv
bW1vbiBuZXcgZmlsZXMgYW5kIHRoZSBRdCBiYWNrZW5kOyBTdGlsbCB0byBjb21lOiB0aGUgR0wg
YmFja2VuZCBhbmQgaW50ZWdyYXRpb24gbGF5ZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmg6IEFkZGVkLgorCiAyMDEwLTEwLTAzICBObydhbSBSb3Nl
bnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L1RleHR1cmVNYXBwZXJRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1
cmVNYXBwZXJRdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkxYzg4
NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVy
ZU1hcHBlclF0LmNwcApAQCAtMCwwICsxLDIyNCBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTAg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4
dHVyZU1hcHBlci5oIgorCisjaW5jbHVkZSAiUXRDb3JlL3FkZWJ1Zy5oIgorI2luY2x1ZGUgIlF0
R3VpL3FwYWludGVuZ2luZS5oIgorI2luY2x1ZGUgIlF0R3VpL3FwaXhtYXAuaCIKKworI2lmZGVm
IFFUX09QRU5HTF9MSUIKKyMgaW5jbHVkZSAib3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oIgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQml0bWFwVGV4dHVyZVF0IDogcHVi
bGljIEJpdG1hcFRleHR1cmUgeworICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVyUXQ7Citw
dWJsaWM6CisgICAgQml0bWFwVGV4dHVyZVF0KCkge30KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJv
eSgpOworICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZSht
X3BpeG1hcC53aWR0aCgpLCBtX3BpeG1hcC5oZWlnaHQoKSk7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
cmVzZXQoY29uc3QgSW50U2l6ZSYsIGJvb2wgb3BhcXVlKTsKKyAgICB2aXJ0dWFsIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7Cisg
ICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCk7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRz
VG9JbWFnZShJbWFnZSopOworICAgIHZpcnR1YWwgYm9vbCBzYXZlKGNvbnN0IFN0cmluZyYgcGF0
aCk7CisgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAhbV9waXhtYXAu
aXNOdWxsKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dPZmZsaW5lVGV4dHVyZVVwbG9hZCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICBJbnRSZWN0IHNvdXJjZVJlY3QoKSBjb25zdCB7
IHJldHVybiBJbnRSZWN0KDAsIDAsIGNvbnRlbnRTaXplKCkud2lkdGgoKSwgY29udGVudFNpemUo
KS5oZWlnaHQoKSk7IH0KK3ByaXZhdGU6CisgICAgUVBhaW50ZXIgbV9wYWludGVyOworICAgIFFQ
aXhtYXAgbV9waXhtYXA7Cit9OworCitjbGFzcyBUZXh0dXJlTWFwcGVyUXQgOiBwdWJsaWMgVGV4
dHVyZU1hcHBlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0
IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1h
cFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0
bWFwVGV4dHVyZSogc3VyZmFjZSk7CisgICAgdmlydHVhbCB2b2lkIHNldENsaXAoY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICBUZXh0dXJlTWFwcGVyUXQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0KTsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5cGUoKSBjb25zdCB7IHJldHVybiAiUXQi
OyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUo
KTsKKworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoUVBhaW50ZXIgKnBhaW50ZXIpCisgICAg
eworICAgICAgICBwYWludGVyLT5zZXRSZW5kZXJIaW50cyhRUGFpbnRlcjo6QW50aWFsaWFzaW5n
IHwgUVBhaW50ZXI6OlNtb290aFBpeG1hcFRyYW5zZm9ybSwgZmFsc2UpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBRUGFpbnRlciogbV9wYWludGVyOworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJl
UXQ+IG1fY3VycmVudFN1cmZhY2U7Cit9OworCit2b2lkIEJpdG1hcFRleHR1cmVRdDo6ZGVzdHJv
eSgpCit7CisgICAgaWYgKG1fcGl4bWFwLnBhaW50aW5nQWN0aXZlKCkpCisgICAgICAgIHFGYXRh
bCgiRGVzdHJveWluZyBhbiBhY3RpdmUgcGl4bWFwIik7CisgICAgbV9waXhtYXAgPSBRUGl4bWFw
KCk7Cit9CisKK3ZvaWQgQml0bWFwVGV4dHVyZVF0OjpyZXNldChjb25zdCBJbnRTaXplJiBzaXpl
LCBib29sIGlzT3BhcXVlKQoreworICAgIEJpdG1hcFRleHR1cmU6OnJlc2V0KHNpemUsIGlzT3Bh
cXVlKTsKKworICAgIGlmIChzaXplLndpZHRoKCkgPiBtX3BpeG1hcC5zaXplKCkud2lkdGgoKSB8
fCBzaXplLmhlaWdodCgpID4gbV9waXhtYXAuc2l6ZSgpLmhlaWdodCgpIHx8IG1fcGl4bWFwLmlz
TnVsbCgpKQorICAgICAgICBtX3BpeG1hcCA9IFFQaXhtYXAoc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpKTsKKyAgICBpZiAoIWlzT3BhcXVlKQorICAgICAgICBtX3BpeG1hcC5maWxsKFF0Ojp0
cmFuc3BhcmVudCk7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBCaXRtYXBUZXh0dXJl
UXQ6OmJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIG1fcGFpbnRl
ci5iZWdpbigmbV9waXhtYXApOworICAgIFRleHR1cmVNYXBwZXJRdDo6aW5pdGlhbGl6ZSgmbV9w
YWludGVyKTsKKyAgICBtX3BhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21w
b3NpdGlvbk1vZGVfQ2xlYXIpOworICAgIG1fcGFpbnRlci5maWxsUmVjdChRUmVjdChkaXJ0eVJl
Y3QpLCBRdDo6dHJhbnNwYXJlbnQpOworICAgIG1fcGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUo
UVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2VPdmVyKTsKKyAgICByZXR1cm4gJm1fcGFp
bnRlcjsKK30KKwordm9pZCBCaXRtYXBUZXh0dXJlUXQ6OmVuZFBhaW50KCkKK3sKKyAgICBtX3Bh
aW50ZXIuZW5kKCk7Cit9CisKK2Jvb2wgQml0bWFwVGV4dHVyZVF0OjpzYXZlKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKK3sKKyAgICByZXR1cm4gbV9waXhtYXAuc2F2ZShwYXRoLCAiUE5HIik7Cit9CisK
K3ZvaWQgQml0bWFwVGV4dHVyZVF0OjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQor
eworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBjb25zdCBRUGl4bWFwKiBw
aXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAoIXBp
eG1hcCkKKyAgICAgICAgcmV0dXJuOworICAgIEJpdG1hcFRleHR1cmU6OnJlc2V0KHBpeG1hcC0+
c2l6ZSgpLCAhcGl4bWFwLT5oYXNBbHBoYUNoYW5uZWwoKSk7CisgICAgbV9waXhtYXAgPSAqcGl4
bWFwOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJRdDo6c2V0Q2xpcChjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgICBRUGFpbnRlciogcGFpbnRlciA9IG1fY3VycmVudFN1cmZhY2UgPyAmbV9j
dXJyZW50U3VyZmFjZS0+bV9wYWludGVyIDogbV9wYWludGVyOworICAgICBwYWludGVyLT5zZXRD
bGlwUmVjdChyZWN0KTsKK30KKworVGV4dHVyZU1hcHBlclF0OjpUZXh0dXJlTWFwcGVyUXQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0KQorICAgIDogVGV4dHVyZU1hcHBlcihjb250ZXh0KQorICAg
ICwgbV9wYWludGVyKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKQorICAgICwgbV9jdXJyZW50
U3VyZmFjZSgwKQoreworICAgIFRleHR1cmVNYXBwZXJRdDo6aW5pdGlhbGl6ZShtX3BhaW50ZXIp
OworfQorCit2b2lkIFRleHR1cmVNYXBwZXJRdDo6YmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSog
c3VyZmFjZSkKK3sKKyAgICBpZiAobV9jdXJyZW50U3VyZmFjZSA9PSBzdXJmYWNlKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKG1fY3VycmVudFN1cmZhY2UpCisgICAgICAgIG1fY3VycmVudFN1
cmZhY2UtPm1fcGFpbnRlci5lbmQoKTsKKyAgICBpZiAoIXN1cmZhY2UpIHsKKyAgICAgICAgbV9j
dXJyZW50U3VyZmFjZSA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQml0bWFwVGV4
dHVyZVF0KiBzdXJmYWNlUXQgPSBzdGF0aWNfY2FzdDxCaXRtYXBUZXh0dXJlUXQqPihzdXJmYWNl
KTsKKyAgICBpZiAoIXN1cmZhY2VRdC0+bV9wYWludGVyLmlzQWN0aXZlKCkpCisgICAgICAgIHN1
cmZhY2VRdC0+bV9wYWludGVyLmJlZ2luKCZzdXJmYWNlUXQtPm1fcGl4bWFwKTsKKyAgICBtX2N1
cnJlbnRTdXJmYWNlID0gc3VyZmFjZVF0OworfQorCisKK3ZvaWQgVGV4dHVyZU1hcHBlclF0Ojpk
cmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0
YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFj
aXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkKK3sKKyAgICBjb25zdCBCaXRt
YXBUZXh0dXJlUXQmIHRleHR1cmVRdCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVR
dCY+KHRleHR1cmUpOworICAgIFFQYWludGVyKiBwYWludGVyID0gbV9wYWludGVyOworICAgIFFQ
aXhtYXAgcGl4bWFwID0gdGV4dHVyZVF0Lm1fcGl4bWFwOworICAgIGlmIChtX2N1cnJlbnRTdXJm
YWNlKQorICAgICAgICBwYWludGVyID0gJm1fY3VycmVudFN1cmZhY2UtPm1fcGFpbnRlcjsKKwor
ICAgIGlmIChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpKSB7CisgICAgICAg
IGNvbnN0IEJpdG1hcFRleHR1cmVRdCogbWFza1F0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFw
VGV4dHVyZVF0Kj4obWFza1RleHR1cmUpOworICAgICAgICBRUGl4bWFwIGludGVybWVkaWF0ZVBp
eG1hcChwaXhtYXAuc2l6ZSgpKTsKKyAgICAgICAgaW50ZXJtZWRpYXRlUGl4bWFwLmZpbGwoUXQ6
OnRyYW5zcGFyZW50KTsKKyAgICAgICAgUVBhaW50ZXIgbWFza1BhaW50ZXIoJmludGVybWVkaWF0
ZVBpeG1hcCk7CisgICAgICAgIG1hc2tQYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRl
cjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7CisgICAgICAgIG1hc2tQYWludGVyLmRyYXdQaXht
YXAoMCwgMCwgcGl4bWFwKTsKKyAgICAgICAgbWFza1BhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2Rl
KFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfRGVzdGluYXRpb25Jbik7CisgICAgICAgIG1hc2tQ
YWludGVyLmRyYXdQaXhtYXAoUVJlY3QoMCwgMCwgcGl4bWFwLndpZHRoKCksIHBpeG1hcC5oZWln
aHQoKSksIG1hc2tRdC0+bV9waXhtYXAsIG1hc2tRdC0+c291cmNlUmVjdCgpKTsKKyAgICAgICAg
bWFza1BhaW50ZXIuZW5kKCk7CisgICAgICAgIHBpeG1hcCA9IGludGVybWVkaWF0ZVBpeG1hcDsK
KyAgICB9CisKKyAgICBjb25zdCBxcmVhbCBwcmV2T3BhY2l0eSA9IHBhaW50ZXItPm9wYWNpdHko
KTsKKyAgICBjb25zdCBRVHJhbnNmb3JtIHByZXZUcmFuc2Zvcm0gPSBwYWludGVyLT50cmFuc2Zv
cm0oKTsKKyAgICBwYWludGVyLT5zZXRPcGFjaXR5KG9wYWNpdHkpOworICAgIHBhaW50ZXItPnNl
dFRyYW5zZm9ybShtYXRyaXgsIHRydWUpOworICAgIHBhaW50ZXItPmRyYXdQaXhtYXAodGFyZ2V0
UmVjdCwgcGl4bWFwLCB0ZXh0dXJlUXQuc291cmNlUmVjdCgpKTsKKyAgICBwYWludGVyLT5zZXRU
cmFuc2Zvcm0ocHJldlRyYW5zZm9ybSk7CisgICAgcGFpbnRlci0+c2V0T3BhY2l0eShwcmV2T3Bh
Y2l0eSk7Cit9CisKK1Bhc3NSZWZQdHI8VGV4dHVyZU1hcHBlcj4gVGV4dHVyZU1hcHBlcjo6Y3Jl
YXRlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyNpZmRlZiBRVF9PUEVOR0xfTElCCisg
ICAgaWYgKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5wYWludEVuZ2luZSgpLT50eXBlKCkg
PT0gUVBhaW50RW5naW5lOjpPcGVuR0wyKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRl
eHR1cmVNYXBwZXJHTChjb250ZXh0KSk7CisjZW5kaWYKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFRleHR1cmVNYXBwZXJRdChjb250ZXh0KSk7Cit9CisKKworUGFzc1JlZlB0cjxCaXRtYXBUZXh0
dXJlPiBUZXh0dXJlTWFwcGVyUXQ6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQml0bWFwVGV4dHVyZVF0KCkpOworfQorCisjaWZkZWYgUVRfT1BFTkdMX0xJQgor
Y2xhc3MgUkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXJRdCA6IHB1YmxpYyBSR0JBMzJQcmVtdWx0
aW1wbGllZEJ1ZmZlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dCogYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiByZWN0LCBib29sIG9wYXF1ZSkKKyAgICB7
CisgICAgICAgIG1faW1hZ2UgPSBRSW1hZ2UocmVjdC5zaXplKCkud2lkdGgoKSwgcmVjdC5zaXpl
KCkuaGVpZ2h0KCksIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsKKyAgICAg
ICAgaWYgKCFvcGFxdWUpCisgICAgICAgICAgICBtX2ltYWdlLmZpbGwoMCk7CisgICAgICAgIG1f
cGFpbnRlci5iZWdpbigmbV9pbWFnZSk7CisgICAgICAgIFRleHR1cmVNYXBwZXJRdDo6aW5pdGlh
bGl6ZSgmbV9wYWludGVyKTsKKyAgICAgICAgbV9wYWludGVyLnRyYW5zbGF0ZSgtcmVjdC54KCks
IC1yZWN0LnkoKSk7CisgICAgICAgIHJldHVybiAmbV9wYWludGVyOworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBlbmRQYWludCgpIHsgbV9wYWludGVyLmVuZCgpOyB9CisgICAgdmlydHVhbCBj
b25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5jb25zdEJpdHMoKTsgfQor
Citwcml2YXRlOgorICAgIFFQYWludGVyIG1fcGFpbnRlcjsKKyAgICBRSW1hZ2UgbV9pbWFnZTsK
K307CisKK1Bhc3NSZWZQdHI8UkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI+IFJHQkEzMlByZW11
bHRpbXBsaWVkQnVmZmVyOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUkdC
QTMyUHJlbXVsdGltcGxpZWRCdWZmZXJRdCgpKTsKK30KKworI2VuZGlmCit9OwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRk
Nzg2MzMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKQEAgLTAsMCArMSwxNDcxIEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIuaCIKKworI2luY2x1ZGUgIkN1cnJlbnRUaW1lLmgiCisjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
SGFzaE1hcC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiUmVmQ291bnRlZC5oIgor
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllci5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0
aW9ucy5oIgorI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1
ZGUgIlVuaXRCZXppZXIuaCIKKworI2RlZmluZSBERUJVR19URVhNQVBfRlBTIDEKKyNkZWZpbmUg
TE9HX0NIQU5ORUxfUFJFRklYICJ0ZXhtYXAiCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVj
dCBUZXhtYXBQYWludE9wdGlvbnMgeworICAgIEJpdG1hcFRleHR1cmUqIHN1cmZhY2U7CisgICAg
VGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcjsKKyAgICBHcmFwaGljc0NvbnRleHQqIGdjOwor
ICAgIFRleHR1cmVNYXBwZXJOb2RlKiByb290TGF5ZXI7CisgICAgZmxvYXQgb3BhY2l0eTsKKyAg
ICBJbnRSZWN0IHNjaXNzb3JSZWN0OworICAgIEludFJlY3QgdmlzaWJsZVJlY3Q7Cit9OworY2xh
c3MgVGV4dHVyZU1hcHBlckNhY2hlIHsKK3B1YmxpYzoKKyAgICB2b2lkIG1hcmsoQml0bWFwVGV4
dHVyZSogdGV4dHVyZSk7CisKKyAgICBjbGFzcyBFbnRyeSB7CisgICAgcHVibGljOgorICAgICAg
ICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZTsKKyAgICAgICAgRW50cnkoKSA6IHByZXZp
b3VzQ29zdCgwKSB7IH0KKyAgICAgICAgaW5saW5lIGludCBjYWxjdWxhdGVDb3N0KCkgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKCF0ZXh0dXJlIHx8ICF0ZXh0dXJlLT5pc1ZhbGlk
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjb25zdCBJbnRTaXpl
IHN6ID0gdGV4dHVyZS0+c2l6ZSgpOworICAgICAgICAgICAgcmV0dXJuIHN6LndpZHRoKCkgKiBz
ei5oZWlnaHQoKSAqIDQ7CisgICAgICAgIH0KKyAgICAgICAgRW50cnkoQml0bWFwVGV4dHVyZSog
bmV3VGV4dHVyZSkKKyAgICAgICAgICAgIDogdGV4dHVyZShuZXdUZXh0dXJlKQorICAgICAgICB7
CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEVudHJ5JiBvdGhlcikg
Y29uc3QgeyByZXR1cm4gdGV4dHVyZSA9PSBvdGhlci50ZXh0dXJlOyB9CisgICAgICAgIGludCBw
cmV2aW91c0Nvc3Q7CisgICAgfTsKKworICAgIFRleHR1cmVNYXBwZXJDYWNoZSgpIDogbV90b3Rh
bENvc3QoMCkge30KKworICAgIHZvaWQgcHVyZ2UoKTsKKyAgICBWZWN0b3I8RW50cnk+IG1fZGF0
YTsKKyAgICBpbnQgbV90b3RhbENvc3Q7CisjaWZuZGVmIFRFWE1BUF9URVhUVVJFX0NBQ0hFX0tC
UworI2RlZmluZSBURVhNQVBfVEVYVFVSRV9DQUNIRV9LQlMgMjQgKiAxMDI0CisjZW5kaWYKKyAg
ICBzdGF0aWMgY29uc3QgaW50IE1heENvc3QgPSBURVhNQVBfVEVYVFVSRV9DQUNIRV9LQlMgKiAx
MDI0OworICAgIHN0YXRpYyBjb25zdCBpbnQgUHVyZ2VBbW91bnQgPSBNYXhDb3N0IC8gNDsKK307
CisKKwordm9pZCBUZXh0dXJlTWFwcGVyQ2FjaGU6OnB1cmdlKCkKK3sKKyAgICAvLyBXZSBuZWVk
IGFuIGFjdGl2ZSBHTCBjb250ZXh0LCBiZWNhdXNlIHdlIG1pZ2h0IGNhbGwgZ2xEZWxldGVUZXh0
dXJlcy4KKyAgICBjb25zdCBpbnQgc2l6ZSA9IG1fZGF0YS5zaXplKCk7CisKKyAgICBpZiAobV90
b3RhbENvc3QgPD0gVGV4dHVyZU1hcHBlckNhY2hlOjpNYXhDb3N0KQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBFbnN1cmUgdGhhdCB3ZSBoYXZlIHRoZSByaWdodCBjb3VudC4gSXQgbWlnaHQg
YmUgaW5hY2N1cmF0ZSBpZiBjb250ZW50IGNoYW5nZWQgc2l6ZS4KKyAgICAvLyBXZSBvbmx5IGRv
IHRoaXMgd2hlbiB3ZSdyZSBhY3R1YWxseSByZWFkeSB0byBwdXJnZS4KKyAgICBtX3RvdGFsQ29z
dCA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIG1fdG90
YWxDb3N0ICs9IG1fZGF0YVtpXS5jYWxjdWxhdGVDb3N0KCk7CisKKyAgICBmb3IgKGludCBpID0g
c2l6ZS0xOyBpID49IDAgJiYgbV90b3RhbENvc3QgPiBUZXh0dXJlTWFwcGVyQ2FjaGU6Ok1heENv
c3QgLSBUZXh0dXJlTWFwcGVyQ2FjaGU6OlB1cmdlQW1vdW50OyAtLWkpIHsKKyAgICAgICAgRW50
cnkmIGVudHJ5ID0gbV9kYXRhW2ldOworICAgICAgICBpZiAoZW50cnkudGV4dHVyZS0+aXNMb2Nr
ZWQoKSB8fCAhZW50cnkudGV4dHVyZS0+aXNWYWxpZCgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIG1fdG90YWxDb3N0IC09IGVudHJ5LnByZXZpb3VzQ29zdDsKKyAgICAgICAgZW50
cnkudGV4dHVyZS0+ZGVzdHJveSgpOworICAgICAgICBtX2RhdGEucmVtb3ZlKGkpOworICAgIH0K
KworLy8gICAgTE9HKCJbVGV4dHVyZU1hcHBlcl0gUHVyZ2VkICUyLjRmSyBvZiB0ZXh0dXJlcygl
ZCkgWyUyLjRmSy8lZF1cbiIsIGZsb2F0KGJlZm9yZSAtIG1fdG90YWxDb3N0KSAvIDEwMjQsCisv
LyAgICAgICAgICAgaW50KHNpemUtbV9kYXRhLnNpemUoKSksIGZsb2F0KG1fdG90YWxDb3N0KSAv
IDEwMjQsIG1fZGF0YS5zaXplKCkpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJDYWNoZTo6bWFy
ayhCaXRtYXBUZXh0dXJlICp0ZXh0dXJlKQoreworICAgIGlmICghdGV4dHVyZSB8fCAhdGV4dHVy
ZS0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBFbnRyeSBlbnRyeSh0ZXh0dXJl
KTsKKyAgICBzaXplX3QgaW5kZXggPSBtX2RhdGEuZmluZChlbnRyeSk7CisgICAgaWYgKCFpbmRl
eCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGluZGV4IDwgbV9kYXRhLnNpemUoKSkgCisg
ICAgICAgIG1fZGF0YS5yZW1vdmUoaW5kZXgpOworICAgIGNvbnN0IGludCBjb3N0ID0gZW50cnku
Y2FsY3VsYXRlQ29zdCgpOworICAgIG1fdG90YWxDb3N0IC09IGVudHJ5LnByZXZpb3VzQ29zdDsK
KyAgICBtX3RvdGFsQ29zdCArPSAoZW50cnkucHJldmlvdXNDb3N0ID0gY29zdCk7CisgICAgbV9k
YXRhLnByZXBlbmQoZW50cnkpOworfQorCitUZXh0dXJlTWFwcGVyQ2FjaGUgZ1RleHR1cmVNYXBw
ZXJDYWNoZTsKKworY2xhc3MgVGV4dHVyZU1hcHBlckNhY2hlTG9jayB7CitwdWJsaWM6CisgICAg
VGV4dHVyZU1hcHBlckNhY2hlTG9jayhCaXRtYXBUZXh0dXJlKiB0ZXh0dXJlKSA6IG1fdGV4dHVy
ZSh0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgICAgIG1f
dGV4dHVyZS0+bG9jaygpOworICAgIH0KKyAgICB+VGV4dHVyZU1hcHBlckNhY2hlTG9jaygpCisg
ICAgeworICAgICAgICBpZiAobV90ZXh0dXJlKQorICAgICAgICAgICAgbV90ZXh0dXJlLT51bmxv
Y2soKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1fdGV4
dHVyZTsKK307CisKK2NsYXNzIFRleHR1cmVNYXBwZXJOb2RlIDogcHVibGljIFRleHR1cmVNYXBw
ZXJDb250ZW50TGF5ZXIgeworCitwdWJsaWM6CisgICAgLy8gVGhpcyBzZXQgb2YgZmxhZ3MgaGVs
cCB1cyBkZWZlciB3aGljaCBwcm9wZXJ0aWVzIG9mIHRoZSBsYXllciBoYXZlIGJlZW4KKyAgICAv
LyBtb2RpZmllZCBieSB0aGUgY29tcG9zaXRvciwgc28gd2UgY2FuIGtub3cgd2hhdCB0byBsb29r
IGZvciBpbiB0aGUgbmV4dCBmbHVzaC4KKyAgICBlbnVtIENoYW5nZU1hc2sgeworICAgICAgICBO
b0NoYW5nZXMgPSAgICAgICAgICAgICAgICAgMCwKKworICAgICAgICBQYXJlbnRDaGFuZ2UgPSAg
ICAgICAgICAgICAgKDFMIDw8IDApLAorICAgICAgICBDaGlsZHJlbkNoYW5nZSA9ICAgICAgICAg
ICAgKDFMIDw8IDEpLAorICAgICAgICBNYXNrTGF5ZXJDaGFuZ2UgPSAgICAgICAgICAgKDFMIDw8
IDIpLAorICAgICAgICBQb3NpdGlvbkNoYW5nZSA9ICAgICAgICAgICAgKDFMIDw8IDMpLAorCisg
ICAgICAgIEFuY2hvclBvaW50Q2hhbmdlID0gICAgICAgICAoMUwgPDwgNCksCisgICAgICAgIFNp
emVDaGFuZ2UgID0gICAgICAgICAgICAgICAoMUwgPDwgNSksCisgICAgICAgIFRyYW5zZm9ybUNo
YW5nZSA9ICAgICAgICAgICAoMUwgPDwgNiksCisgICAgICAgIENvbnRlbnRDaGFuZ2UgPSAgICAg
ICAgICAgICAoMUwgPDwgNyksCisKKyAgICAgICAgQ29udGVudHNPcmllbnRhdGlvbkNoYW5nZSA9
ICgxTCA8PCA5KSwKKyAgICAgICAgT3BhY2l0eUNoYW5nZSA9ICAgICAgICAgICAgICgxTCA8PCAx
MCksCisgICAgICAgIENvbnRlbnRzUmVjdENoYW5nZSA9ICAgICAgICAoMUwgPDwgMTEpLAorCisg
ICAgICAgIFByZXNlcnZlczNEQ2hhbmdlID0gICAgICAgICAoMUwgPDwgMTIpLAorICAgICAgICBN
YXNrc1RvQm91bmRzQ2hhbmdlID0gICAgICAgKDFMIDw8IDEzKSwKKyAgICAgICAgRHJhd3NDb250
ZW50Q2hhbmdlID0gICAgICAgICgxTCA8PCAxNCksCisgICAgICAgIENvbnRlbnRzT3BhcXVlQ2hh
bmdlID0gICAgICAoMUwgPDwgMTUpLAorCisgICAgICAgIEJhY2tmYWNlVmlzaWJpbGl0eUNoYW5n
ZSA9ICAoMUwgPDwgMTYpLAorICAgICAgICBDaGlsZHJlblRyYW5zZm9ybUNoYW5nZSA9ICAgKDFM
IDw8IDE3KSwKKyAgICAgICAgRGlzcGxheUNoYW5nZSA9ICAgICAgICAgICAgICgxTCA8PCAxOCks
CisgICAgICAgIEJhY2tncm91bmRDb2xvckNoYW5nZSA9ICAgICAoMUwgPDwgMTkpLAorCisgICAg
ICAgIFJlcGxpY2FMYXllckNoYW5nZSA9ICAgICAgICAoMUwgPDwgMjApCisgICAgfTsKKworICAg
IC8vIFRoZSBjb21wb3NpdG9yIGxldHMgdXMgc3BlY2lhbC1jYXNlIGltYWdlcyBhbmQgY29sb3Jz
LCBzbyB3ZSB0cnkgdG8gZG8gc28uCisgICAgZW51bSBTdGF0aWNDb250ZW50VHlwZSB7IEhUTUxD
b250ZW50VHlwZSwgRGlyZWN0SW1hZ2VDb250ZW50VHlwZSwgQ29sb3JDb250ZW50VHlwZSwgTWVk
aWFDb250ZW50VHlwZSwgQ2FudmFzM0RDb250ZW50VHlwZX07CisKKyAgICBUZXh0dXJlTWFwcGVy
Tm9kZSogcm9vdExheWVyKCk7CisKKyAgICBUZXh0dXJlTWFwcGVyTm9kZShHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlciogbmV3TGF5ZXIpOworICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJOb2Rl
KCk7CisKKyAgICB2b2lkIGNsZWFyRGlyZWN0SW1hZ2UoKTsKKyAgICB2b2lkIGNvbXB1dGVUcmFu
c2Zvcm1hdGlvbnMoKTsKKyAgICBJbnRTaXplIG5lYXJlc3RTdXJmYWNlU2l6ZSgpIGNvbnN0Owor
ICAgIHZvaWQgY29tcHV0ZVJlcGxpY2FUcmFuc2Zvcm0oKTsKKyAgICB2b2lkIGNvbXB1dGVMYXll
clR5cGUoKTsKKyAgICB2b2lkIGNvbXB1dGVMb2NhbFRyYW5zZm9ybSgpOworICAgIHZvaWQgZmxh
dHRlblRvMkRTcGFjZUlmTmVjZXNzYXJ5KCk7CisgICAgdm9pZCBpbml0aWFsaXplVGV4dHVyZU1h
cHBlcihUZXh0dXJlTWFwcGVyKik7CisgICAgdm9pZCBpbnZhbGlkYXRlVHJhbnNmb3JtKCk7Cisg
ICAgdm9pZCBub3RpZnlDaGFuZ2UoQ2hhbmdlTWFzayk7CisgICAgdm9pZCBzeW5jQ29tcG9zaXRp
bmdTdGF0ZShib29sIHJlY3Vyc2UpOworICAgIHZvaWQgcGVyZm9ybVBvc3RTeW5jT3BlcmF0aW9u
cygpOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgdm9pZCBzZXROZWVkc0Rpc3Bs
YXlJblJlY3QoSW50UmVjdCk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFudXBUZXh0dXJlTWFwcGVy
KCk7CisKKyAgICB2b2lkIHBhaW50UmVjdXJzaXZlKFRleG1hcFBhaW50T3B0aW9ucyBvcHRpb25z
KTsKKyAgICB2b2lkIHBhaW50U2VsZihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBmbG9h
dCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgQml0bWFwVGV4dHVyZSogcmVw
bGljYU1hc2tUZXh0dXJlLCBib29sIGlzU3VyZmFjZSk7CisgICAgdm9pZCB1cGxvYWRUZXh0dXJl
RnJvbUNvbnRlbnQoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcik7CisKKyAgICBpbnQgY291
bnREZXNjZW5kYW50c1dpdGhDb250ZW50KCkgY29uc3Q7CisgICAgYm9vbCBoYXNTdXJmYWNlRGVz
Y2VuZGFudHMoKSBjb25zdDsKKworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZTsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldFBsYXRmb3JtTGF5ZXJDbGllbnQoVGV4dHVy
ZU1hcHBlckxheWVyQ2xpZW50Kik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEludFNpemUmLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJ
bnRSZWN0JiBleHBvc2VkUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9y
bSwgZmxvYXQgb3BhY2l0eSk7CisKKyAgICBzdGF0aWMgVGV4dHVyZU1hcHBlck5vZGUqIHRvVGV4
dHVyZU1hcHBlck5vZGUoR3JhcGhpY3NMYXllciopOworcHVibGljOgorICAgIEdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyKiBtX2xheWVyOworICAgIGNvbnN0IGNoYXIqIG1fbGFzdFRleHR1cmVN
YXBwZXJUeXBlOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyPiBtX2xhc3RUZXh0dXJlTWFwcGVy
OworICAgIHN0cnVjdCBUcmFuc2Zvcm1EYXRhIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggYmFzZSwgdGFyZ2V0LCByZXBsaWNhLCBmb3JEZXNjZW5kYW50cywgcGVyc3BlY3RpdmUsIGxv
Y2FsOworICAgICAgICBJbnRSZWN0IHRhcmdldEJvdW5kaW5nUmVjdDsKKyAgICAgICAgZmxvYXQg
Y2VudGVyWjsKKyAgICAgICAgYm9vbCBkaXJ0eSwgbG9jYWxEaXJ0eSwgcGVyc3BlY3RpdmVEaXJ0
eTsKKyAgICAgICAgSW50UmVjdCBib3VuZGluZ1JlY3RGcm9tUm9vdDsKKyAgICAgICAgVHJhbnNm
b3JtRGF0YSgpIDogZGlydHkodHJ1ZSksIGxvY2FsRGlydHkodHJ1ZSksIHBlcnNwZWN0aXZlRGly
dHkodHJ1ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgfTsKKworICAgIFRyYW5zZm9ybURh
dGEgbV90cmFuc2Zvcm1zOworCisgICAgZW51bSBMYXllclR5cGUgeworICAgICAgICBEZWZhdWx0
TGF5ZXIsCisgICAgICAgIFJvb3RMYXllciwKKyAgICAgICAgU2Npc3NvckxheWVyLAorICAgICAg
ICBDbGlwTGF5ZXIsCisgICAgICAgIFRyYW5zcGFyZW5jeUxheWVyCisgICAgfTsKKworICAgIExh
eWVyVHlwZSBtX2xheWVyVHlwZTsKKworICAgIHN0cnVjdCBDb250ZW50RGF0YSB7CisgICAgICAg
IEludFJlY3QgbmVlZHNEaXNwbGF5UmVjdDsKKyAgICAgICAgYm9vbCBuZWVkc0Rpc3BsYXk7Cisg
ICAgICAgIENvbG9yIGJhY2tncm91bmRDb2xvcjsKKworICAgICAgICBTdGF0aWNDb250ZW50VHlw
ZSBjb250ZW50VHlwZTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZTsKKyAgICAgICAgVGV4
dHVyZU1hcHBlclZpZGVvTGF5ZXIqIG1lZGlhOworCisgICAgICAgIENvbnRlbnREYXRhKCkKKyAg
ICAgICAgICAgIDogbmVlZHNEaXNwbGF5KGZhbHNlKQorICAgICAgICAgICAgLCBjb250ZW50VHlw
ZShIVE1MQ29udGVudFR5cGUpCisgICAgICAgICAgICAsIGltYWdlKDApCisgICAgICAgICAgICAs
IG1lZGlhKDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgfTsKKworICAgIGlubGluZSBJ
bnRSZWN0IHRhcmdldFJlY3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVu
dENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlID8gZnVsbFJlY3QoKSA6IG1f
c3RhdGUuY29udGVudHNSZWN0OworICAgIH0KKworICAgIGlubGluZSBJbnRSZWN0IGZ1bGxSZWN0
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0
aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgIH0KKworICAgIGlubGluZSBJbnRSZWN0IHJlcGxp
Y2FSZWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xheWVyVHlwZSA9PSBUcmFu
c3BhcmVuY3lMYXllciA/IEludFJlY3QoMCwgMCwgbV9uZWFyZXN0U3VyZmFjZVNpemUud2lkdGgo
KSwgbV9uZWFyZXN0U3VyZmFjZVNpemUuaGVpZ2h0KCkpIDogZnVsbFJlY3QoKTsKKyAgICB9CisK
KyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbV90ZXh0dXJlOworICAgIFJlZlB0cjxCaXRtYXBU
ZXh0dXJlPiBtX3N1cmZhY2UsIG1fcmVwbGljYVN1cmZhY2U7CisKKyAgICBDb250ZW50RGF0YSBt
X3BlbmRpbmdDb250ZW50OworICAgIENvbnRlbnREYXRhIG1fY3VycmVudENvbnRlbnQ7CisKKyAg
ICBWZWN0b3I8VGV4dHVyZU1hcHBlck5vZGUqPiBtX2NoaWxkcmVuOworICAgIFRleHR1cmVNYXBw
ZXJOb2RlKiBtX3BhcmVudDsKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogbV9lZmZlY3RUYXJnZXQ7
CisgICAgaW50IG1fY2hhbmdlTWFzazsKKyAgICBJbnRTaXplIG1fc2l6ZSwgbV9uZWFyZXN0U3Vy
ZmFjZVNpemU7CisgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXJDbGll
bnQqIG1fcGxhdGZvcm1DbGllbnQ7CisKKyAgICBzdHJ1Y3QgU3RhdGUgeworICAgICAgICBGbG9h
dFBvaW50IHBvczsKKyAgICAgICAgRmxvYXRQb2ludDNEIGFuY2hvclBvaW50OworICAgICAgICBG
bG9hdFNpemUgc2l6ZTsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwor
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZHJlblRyYW5zZm9ybTsKKyAgICAgICAg
Q29sb3IgYmFja2dyb3VuZENvbG9yOworICAgICAgICBDb2xvciBjdXJyZW50Q29sb3I7CisgICAg
ICAgIEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBnZW9P
cmllbnRhdGlvbjsKKyAgICAgICAgR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRl
c09yaWVudGF0aW9uIGNvbnRlbnRzT3JpZW50YXRpb247CisgICAgICAgIGZsb2F0IG9wYWNpdHk7
CisgICAgICAgIEludFJlY3QgY29udGVudHNSZWN0OworICAgICAgICBpbnQgZGVzY2VuZGFudHNX
aXRoQ29udGVudDsKKyAgICAgICAgVGV4dHVyZU1hcHBlck5vZGUqIG1hc2tMYXllcjsKKyAgICAg
ICAgVGV4dHVyZU1hcHBlck5vZGUqIHJlcGxpY2FMYXllcjsKKyAgICAgICAgYm9vbCBwcmVzZXJ2
ZXMzRDsKKyAgICAgICAgYm9vbCBtYXNrc1RvQm91bmRzOworICAgICAgICBib29sIGRyYXdzQ29u
dGVudDsKKyAgICAgICAgYm9vbCBjb250ZW50c09wYXF1ZTsKKyAgICAgICAgYm9vbCBiYWNrZmFj
ZVZpc2liaWxpdHk7CisgICAgICAgIGJvb2wgdmlzaWJsZTsKKyAgICAgICAgYm9vbCBkaXJ0eTsK
KyAgICAgICAgYm9vbCB0aWxlZDsKKyAgICAgICAgYm9vbCBoYXNTdXJmYWNlRGVzY2VuZGFudHM7
CisKKyAgICAgICAgU3RhdGUoKQorICAgICAgICAgICAgOiBvcGFjaXR5KDEuZikKKyAgICAgICAg
ICAgICwgZGVzY2VuZGFudHNXaXRoQ29udGVudCgwKQorICAgICAgICAgICAgLCBtYXNrTGF5ZXIo
MCkKKyAgICAgICAgICAgICwgcmVwbGljYUxheWVyKDApCisgICAgICAgICAgICAsIHByZXNlcnZl
czNEKGZhbHNlKQorICAgICAgICAgICAgLCBtYXNrc1RvQm91bmRzKGZhbHNlKQorICAgICAgICAg
ICAgLCBkcmF3c0NvbnRlbnQoZmFsc2UpCisgICAgICAgICAgICAsIGNvbnRlbnRzT3BhcXVlKGZh
bHNlKQorICAgICAgICAgICAgLCBiYWNrZmFjZVZpc2liaWxpdHkoZmFsc2UpCisgICAgICAgICAg
ICAsIHZpc2libGUodHJ1ZSkKKyAgICAgICAgICAgICwgZGlydHkodHJ1ZSkKKyAgICAgICAgICAg
ICwgdGlsZWQoZmFsc2UpCisgICAgICAgICAgICAsIGhhc1N1cmZhY2VEZXNjZW5kYW50cyhmYWxz
ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgfTsKKyAgICBTdGF0ZSBtX3N0YXRlOworfTsK
Kwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEludFJlY3Qg
cmVjdCkKK3sKKyAgICBpZiAobV9wbGF0Zm9ybUNsaWVudCkgeworICAgICAgICBpZiAobV9zdGF0
ZS5oYXNTdXJmYWNlRGVzY2VuZGFudHMpIHsKKyAgICAgICAgICAgIG1fcGxhdGZvcm1DbGllbnQt
PnNldE5lZWRzRGlzcGxheSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHJlY3QuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5o
ZWlnaHQoKSkpOworICAgICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIG1fcGxhdGZvcm1DbGllbnQtPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9wYXJlbnQpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fcGFyZW50LT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Cit9
CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAgaWYg
KG1fZWZmZWN0VGFyZ2V0KQorICAgICAgICBtX2VmZmVjdFRhcmdldC0+c2V0TmVlZHNEaXNwbGF5
KCk7CisgICAgaWYgKG1fdHJhbnNmb3Jtcy50YXJnZXRCb3VuZGluZ1JlY3QuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKG1fc3RhdGUuZHJhd3NDb250ZW50IHx8IG1fY3VycmVu
dENvbnRlbnQuY29udGVudFR5cGUgIT0gSFRNTENvbnRlbnRUeXBlKQorICAgICAgICBzZXROZWVk
c0Rpc3BsYXlJblJlY3QobV90cmFuc2Zvcm1zLnRhcmdldEJvdW5kaW5nUmVjdCk7Cit9CisKKwor
dm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0UGxhdGZvcm1MYXllckNsaWVudChUZXh0dXJlTWFw
cGVyTGF5ZXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICBtX3BsYXRmb3JtQ2xpZW50ID0gY2xpZW50
OworfQorCitzdGF0aWMgaW50IGNvbXBhcmVHcmFwaGljc0xheWVyc1pWYWx1ZShjb25zdCB2b2lk
KiBhLCBjb25zdCB2b2lkKiBiKQoreworICAgIHR5cGVkZWYgY29uc3QgVGV4dHVyZU1hcHBlck5v
ZGUqIE5vZGVQdHI7CisgICAgY29uc3QgTm9kZVB0ciogbm9kZUEgPSBzdGF0aWNfY2FzdDxjb25z
dCBOb2RlUHRyKj4oYSk7CisgICAgY29uc3QgTm9kZVB0ciogbm9kZUIgPSBzdGF0aWNfY2FzdDxj
b25zdCBOb2RlUHRyKj4oYik7CisgICAgcmV0dXJuIGludCgoKCpub2RlQSktPm1fdHJhbnNmb3Jt
cy5jZW50ZXJaIC0gKCpub2RlQiktPm1fdHJhbnNmb3Jtcy5jZW50ZXJaKSAqIDEwMDApOworfQor
aW5saW5lIHN0YXRpYyB2b2lkIHNvcnRCeVpPcmRlcihWZWN0b3I8VGV4dHVyZU1hcHBlck5vZGUq
ID4mIGFycmF5LCBpbnQgZmlyc3QsIGludCBsYXN0KQoreworICAgIHFzb3J0KGFycmF5LmRhdGEo
KSwgYXJyYXkuc2l6ZSgpLCBzaXplb2YoVGV4dHVyZU1hcHBlck5vZGUqKSwgY29tcGFyZUdyYXBo
aWNzTGF5ZXJzWlZhbHVlKTsKK30KKworYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6aGFzU3VyZmFj
ZURlc2NlbmRhbnRzKCkgY29uc3QKK3sKKworICAgIGlmIChtX2xheWVyVHlwZSA9PSBDbGlwTGF5
ZXIgfHwgbV9sYXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIgfHwgbV9zdGF0ZS5yZXBsaWNh
TGF5ZXIpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNvbnN0IGludCBzaXplID0gbV9jaGls
ZHJlbi5zaXplKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAg
IGlmIChUZXh0dXJlTWFwcGVyTm9kZSogY2hpbGQgPSBtX2NoaWxkcmVuW2ldKQorICAgICAgICAg
ICAgaWYgKGNoaWxkLT5oYXNTdXJmYWNlRGVzY2VuZGFudHMoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7CisKK30KKwordm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29u
c3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UmVjdCYgZXhwb3NlZFJlY3QsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHkpCit7CisgICAg
Ly8gbmVlZHMgYWN0aXZlIGNvbnRleHQKKyAgICBBU1NFUlQobV9sYXllclR5cGUgPT0gUm9vdExh
eWVyKTsKKyAgICBpZiAobV9zaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYg
MAorICAgIFdURjo6U3RvcFdhdGNoIHN0b3BXYXRjaDsKKyAgICAoIltUZXh0dXJlTWFwcGVyXSBS
b290UGFpbnQhIVxuIik7CisjZW5kaWYKKworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyPiB0ZXh0
dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKGdjKTsKKworICAgIGlmICh0ZXh0dXJl
TWFwcGVyLT50eXBlKCkgIT0gbV9sYXN0VGV4dHVyZU1hcHBlclR5cGUpCisgICAgICAgIGdUZXh0
dXJlTWFwcGVyQ2FjaGUubV9kYXRhLmNsZWFyKCk7CisKKyAgICBtX2xhc3RUZXh0dXJlTWFwcGVy
ID0gdGV4dHVyZU1hcHBlcjsKKyAgICBUZXhtYXBQYWludE9wdGlvbnMgb3B0OworICAgIG9wdC5v
cGFjaXR5ID0gMTsKKyAgICBvcHQucm9vdExheWVyID0gdGhpczsKKyAgICBvcHQuc2Npc3NvclJl
Y3QgPSB0YXJnZXRSZWN0OworICAgIG9wdC52aXNpYmxlUmVjdCA9IGV4cG9zZWRSZWN0OworICAg
IG9wdC50ZXh0dXJlTWFwcGVyID0gdGV4dHVyZU1hcHBlci5nZXQoKTsKKyAgICBvcHQuZ2MgPSB0
ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQoKTsKKyAgICBvcHQuc3VyZmFjZSA9IDA7Cisg
ICAgcGFpbnRSZWN1cnNpdmUob3B0KTsKKworICAgIGlmICh0ZXh0dXJlTWFwcGVyLT5hbGxvd1N1
cmZhY2VGb3JSb290KCkgfHwgbV9zdGF0ZS5oYXNTdXJmYWNlRGVzY2VuZGFudHMpIHsKKyAgICAg
ICAgdGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UoMCk7CisgICAgICAgIHRleHR1cmVNYXBwZXIt
PnBhaW50VG9UYXJnZXQoKm1fc3VyZmFjZS5nZXQoKSwgc2l6ZSwgdHJhbnNmb3JtLCBvcGFjaXR5
ICogbV9zdGF0ZS5vcGFjaXR5LCB0YXJnZXRSZWN0KTsKKyAgICB9CisgICAgZ1RleHR1cmVNYXBw
ZXJDYWNoZS5wdXJnZSgpOworI2lmIDAKKyAgICB7CisgICAgICAgIHN0YXRpYyBpbnQgcm9vdENv
dW50ID0gMDsKKyAgICAgICAgKCJbVGV4dHVyZU1hcHBlcl0gUm9vdFBhaW50KCVkKSAlZCBsYXll
ciglcCkgKCVkKyVkICVkeCVkKSBbJWRtc11cbiIsICsrcm9vdENvdW50LCB0ZXh0dXJlTWFwcGVy
LT5hbGxvd1N1cmZhY2VGb3JSb290KCksCisgICAgICAgICAgICAgICB0aGlzLCBleHBvc2VkUmVj
dC54KCksIGV4cG9zZWRSZWN0LnkoKSwgZXhwb3NlZFJlY3Qud2lkdGgoKSwgZXhwb3NlZFJlY3Qu
aGVpZ2h0KCksIAorICAgICAgICAgICAgICAgaW50KHN0b3BXYXRjaC5lbGFwc2VkKCkgKiAxMDAw
KSk7CisjaWYgMAorICAgICAgICBpZiAodGV4dHVyZU1hcHBlci0+YWxsb3dTdXJmYWNlRm9yUm9v
dCgpKQorICAgICAgICAgICAgbV9zdXJmYWNlLT5zYXZlKFN0cmluZygpLmZvcm1hdCgiL3RtcC9y
b290XyVkLnBuZyIsIHJvb3RDb3VudCkpOworI2VuZGlmCisgICAgfQorI2VuZGlmCit9CisKK2lu
dCBUZXh0dXJlTWFwcGVyTm9kZTo6Y291bnREZXNjZW5kYW50c1dpdGhDb250ZW50KCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fc3RhdGUudmlzaWJsZSB8fCBtX3N0YXRlLm9wYWNpdHkgPCAwLjAwMSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgaW50IGRlc2NlbmRhbnRzV2l0aENvbnRlbnQgPSAobV9z
dGF0ZS5kcmF3c0NvbnRlbnQgfHwgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSAhPSBIVE1M
Q29udGVudFR5cGUpID8gMSA6IDA7CisKKyAgICBjb25zdCBpbnQgc2l6ZSA9IG1fY2hpbGRyZW4u
c2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGlm
IChUZXh0dXJlTWFwcGVyTm9kZSogY2hpbGQgPSBtX2NoaWxkcmVuW2ldKQorICAgICAgICAgICAg
ZGVzY2VuZGFudHNXaXRoQ29udGVudCArPSBjaGlsZC0+Y291bnREZXNjZW5kYW50c1dpdGhDb250
ZW50KCk7CisgICAgfQorCisgICAgcmV0dXJuIGRlc2NlbmRhbnRzV2l0aENvbnRlbnQ7Cit9CisK
K2lubGluZSBUZXh0dXJlTWFwcGVyTm9kZSogVGV4dHVyZU1hcHBlck5vZGU6OnRvVGV4dHVyZU1h
cHBlck5vZGUoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgcmV0dXJuIGxheWVyID8gc3Rh
dGljX2Nhc3Q8R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqPihsYXllciktPm1fbm9kZS5nZXQo
KSA6IDA7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVMYXllclR5cGUoKQor
eworICAgIC8vIGNhbGN1bGF0ZSBsYXllciB0eXBlLiBBIGxheWVyIGNhbiBiZSBvbmUgb2YgdGhl
IGZvbGxvd2luZzoKKyAgICAvLyAgUm9vdExheWVyOiB0aGUgdG9wIGxldmVsLiBEcmF3cyB0byBh
IGZyYW1lYnVmZmVyLCBhbmQgdGhlIHRhcmdldCB0ZXh0dXJlIGRyYXdzIGludG8gdGhlIHZpZXdw
b3J0LgorICAgIC8vICAgICAgICAgICAgb25seSBvbmUgbGF5ZXIgaXMgdGhlIHJvb3QgbGF5ZXIu
CisgICAgLy8gIFNjaXNzb3JMYXllcjogZHJhd3MgdG8gdGhlIGN1cnJlbnQgZnJhbWVidWZmZXIs
IGFuZCBhcHBsaWVzIGFuIGV4dHJhIHNjaXNzb3IgYmVmb3JlIGRyYXdpbmcgaXRzIGNoaWxkcmVu
LgorICAgIC8vICAgICAgICAgICAgICAgIEEgc2Npc3NvciBsYXllciBpcyBhIGxheWVyIHdpdGgg
Y2hpbGRyZW4gdGhhdCBtYXNrcyB0byBib3VuZHMsIGlzIG5vdCBhIHRyYW5zcGFyZW5jeSBsYXll
ciwgYW5kIGhhcyBhIHJlY3Rhbmd1bGFyIGNsaXAuCisgICAgLy8gIENsaXBMYXllcjogY3JlYXRl
cyBhIG5ldyBmcmFtZWJ1ZmZlciwgdGhlIHNpemUgb2YgdGhlIGxheWVyLCBhbmQgdGhlbiBwYWlu
dHMgaXQgdG8gdGhlIGVuY2xvc2luZyBCaXRtYXBUZXh0dXJlIHdpdGggdGhlIGxheWVyJ3MgdHJh
bnNmb3JtL29wYWNpdHkuCisgICAgLy8gICAgICAgICAgICAgIEEgY2xpcCBsYXllciBpcyBhIGxh
eWVyIHRoYXQgbWFza3MgdG8gYm91bmRzLCBkb2Vzbid0IHByZXNlcnZlIDNELCBoYXMgY2hpbGRy
ZW4sIGFuZCBoYXMgYSB0cmFuc3BhcmVuY3kvbWFzayBvciBhIG5vbi1yZWN0YW5ndWxhciB0cmFu
c2Zvcm0uCisgICAgLy8gIFRyYW5zcGFyZW5jeUxheWVyOiBjcmVhdGVzIGEgbmV3IGZyYW1lYnVm
ZmVyIGlkZXRpY2FsIGluIHNpemUgdG8gdGhlIGN1cnJlbnQgZnJhbWVidWZmZXIuIFRoZW4gZHJh
d3MgdGhlIGZiJ3MgdGV4dHVyZSB0byB0aGUgY3VycmVudCBmcmFtZWJ1ZmZlciB3aXRoIGlkZW50
aXR5IHRyYW5zZm9ybS4KKyAgICAvLyAgICAgICAgICAgICAgICAgICAgIFVzZWQgZm9yIGxheWVy
cyB3aXRoIGNoaWxkcmVuIGFuZCB0cmFuc3BhcmVuY3kvbWFzayB0aGF0IHByZXNlcnZlIDNEIG9y
IGRvbid0IG1hc2sgdG8gYm91bmRzLgorICAgIC8vICBEZWZhdWx0TGF5ZXI6IGRyYXdzIGl0c2Vs
ZiBhbmQgaXRzIGNoaWxkcmVuIGRpcmVjdGx5IHRvIHRoZSBjdXJyZW50IGZyYW1lYnVmZmVyLgor
ICAgIC8vICAgICAgICAgICAgICAgIGFueSBsYXllciB0aGF0IGRvZXNuJ3QgY29uZm9ybSB0byB0
aGUgb3RoZXIgcnVsZXMgaXMgYSBEZWZhdWx0TGF5ZXIuCisKKyAgICBjb25zdCBib29sIHNlbGZI
YXNDb250ZW50ID0gbV9zdGF0ZS5kcmF3c0NvbnRlbnQgfHwgKG1fY3VycmVudENvbnRlbnQuY29u
dGVudFR5cGUgIT0gSFRNTENvbnRlbnRUeXBlKTsKKyAgICBjb25zdCBib29sIGhhc0Rlc2NlbmRh
bnRzV2l0aENvbnRlbnQgPSBtX3N0YXRlLmRlc2NlbmRhbnRzV2l0aENvbnRlbnQgLSAoc2VsZkhh
c0NvbnRlbnQgPyAxIDogMCk7CisgICAgY29uc3QgYm9vbCBoYXNUcmFuc3BhcmVuY3kgPSBtX3N0
YXRlLm9wYWNpdHkgPCAwLjk5IHx8IG1fc3RhdGUubWFza0xheWVyOworICAgIGNvbnN0IGJvb2wg
aGFzUmVwbGljYSA9IG1fc3RhdGUucmVwbGljYUxheWVyOworICAgIG1fbGF5ZXJUeXBlID0gRGVm
YXVsdExheWVyOworCisgICAgLy8gTGF5ZXIgaGFzIG5vIHBhcmVudCwgaXQgbXVzdCBiZSBhIHJv
b3QgbGF5ZXIuCisgICAgaWYgKCFtX3BhcmVudCAmJiAhbV9lZmZlY3RUYXJnZXQpIHsKKyAgICAg
ICAgbV9sYXllclR5cGUgPSBSb290TGF5ZXI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBBIGxheWVyIHdpdGggbm8gY29udGVudHMgaXMgYWx3YXlzIGEgZGVmYXVsdCBsYXllci4K
KyAgICBpZiAoIW1fc3RhdGUuZGVzY2VuZGFudHNXaXRoQ29udGVudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gQSBsYXllciB3aXRoIGNvbnRlbnQtZGVzY2VuZGFudHMgYW5kIGEgbWFzayBp
cyBhbHdheXMgYSBjbGlwIGxheWVyLgorICAgIGlmIChoYXNEZXNjZW5kYW50c1dpdGhDb250ZW50
ICYmIG1fc3RhdGUubWFza0xheWVyKSB7CisgICAgICAgIG1fbGF5ZXJUeXBlID0gQ2xpcExheWVy
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQSBtYXNrcy10byBib3VuZHMgbGF5
ZXIgY2FuIGJlIGEgY2xpcCBvciBhIHNjaXNzb3IgbGF5ZXIuIEl0J3MgYSBzY2lzc29yIGxheWVy
IG9ubHkgaWYgaXQgaGFzIGEgdHJpdmlhbCBjbGlwIChpZGVudGl0eSBvciB0cmFuc2xhdGlvbiks
IG9yIGlmIGl0IGhhcyB0cmFuc3BhcmVuY3kuCisgICAgLy8gVGhhdCdzIGJlY2F1c2UgYSBDbGlw
TGF5ZXIgd291bGQgY3JlYXRlIGFuIGludGVybWVkaWF0ZSBkcmF3aW5nIHN1cmZhY2UgKEZCKSAt
IHdlIHdhbnQgdG8gbGltaXQgaXQgdG8gd2hlbiBpdCdzIGFjdHVhbGx5IG5lY2Vzc2FyeSwgaS5l
LiB0cmFuc3BhcmVuY3kgb3Igbm9uLXRyaXZpYWwgY2xpcC4KKyAgICBpZiAobV9zdGF0ZS5tYXNr
c1RvQm91bmRzICYmIGhhc0Rlc2NlbmRhbnRzV2l0aENvbnRlbnQpIHsKKyAgICAgICAgaWYgKGhh
c1RyYW5zcGFyZW5jeSB8fCAhbV9zdGF0ZS50cmFuc2Zvcm0uaXNJZGVudGl0eU9yVHJhbnNsYXRp
b24oKSB8fCBtX3BhcmVudC0+bV9zdGF0ZS5wcmVzZXJ2ZXMzRCkKKyAgICAgICAgICAgIG1fbGF5
ZXJUeXBlID0gQ2xpcExheWVyOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2xheWVyVHlw
ZSA9IFNjaXNzb3JMYXllcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIHVz
ZSBhIHRyYW5zcGFyZW5jeSBsYXllciB3aGVuIHdlIGhhdmUgdHdvIG9mIHRoZSBmb2xsb3dpbmcg
MzogcmVwbGljYSwgdHJhbnNwYXJlbmN5LCBkZXNjZW5kYW50cyB3aXRoIGNvbnRlbnRzLgorICAg
IGlmICgoaGFzUmVwbGljYSAmJiBoYXNEZXNjZW5kYW50c1dpdGhDb250ZW50KSB8fCAoaGFzUmVw
bGljYSAmJiBoYXNUcmFuc3BhcmVuY3kpIHx8IChoYXNUcmFuc3BhcmVuY3kgJiYgbV9zdGF0ZS5k
ZXNjZW5kYW50c1dpdGhDb250ZW50ID4gMSkpCisgICAgICAgIG1fbGF5ZXJUeXBlID0gVHJhbnNw
YXJlbmN5TGF5ZXI7Cit9Cit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjppbml0aWFsaXplVGV4dHVy
ZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQoreworICAgIGlmICh0ZXh0dXJl
TWFwcGVyLT50eXBlKCkgPT0gbV9sYXN0VGV4dHVyZU1hcHBlclR5cGUpCisgICAgICAgIHJldHVy
bjsKKyNpZiAwCisgICAgaWYgKG1fbGF5ZXJUeXBlID09IENsaXBMYXllciB8fCBtX2xheWVyVHlw
ZSA9PSBUcmFuc3BhcmVuY3lMYXllcgorICAgICAgICB8fCAobV9sYXllclR5cGUgPT0gUm9vdExh
eWVyICYmIHRleHR1cmVNYXBwZXItPmFsbG93U3VyZmFjZUZvclJvb3QoKSkpCisgICAgICAgIG1f
c3VyZmFjZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICBlbHNlIGlmICht
X3N1cmZhY2UpCisgICAgICAgIG1fc3VyZmFjZS0+ZGVzdHJveSgpOworICAgIGlmIChtX3N0YXRl
LnJlcGxpY2FMYXllcikKKyAgICAgICAgbV9yZXBsaWNhU3VyZmFjZSA9IHRleHR1cmVNYXBwZXIt
PmNyZWF0ZVRleHR1cmUoKTsKKyAgICBlbHNlIGlmIChtX3JlcGxpY2FTdXJmYWNlKQorICAgICAg
ICBtX3JlcGxpY2FTdXJmYWNlLT5kZXN0cm95KCk7CisjZWxzZQorICAgIG1fc3VyZmFjZSA9IHRl
eHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICBtX3JlcGxpY2FTdXJmYWNlID0gdGV4
dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOworI2VuZGlmCisgICAgbV90ZXh0dXJlID0gdGV4
dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOworICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUubWFy
ayhtX3RleHR1cmUuZ2V0KCkpOworICAgIG1fbGFzdFRleHR1cmVNYXBwZXJUeXBlID0gdGV4dHVy
ZU1hcHBlci0+dHlwZSgpOworfQorCitUZXh0dXJlTWFwcGVyTm9kZTo6VGV4dHVyZU1hcHBlck5v
ZGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIG5ld0xheWVyKQorICAgIDogbV9sYXllcihu
ZXdMYXllcikKKyAgICAsIG1fbGFzdFRleHR1cmVNYXBwZXJUeXBlKDApCisgICAgLCBtX2xhc3RU
ZXh0dXJlTWFwcGVyKDApCisgICAgLCBtX2xheWVyVHlwZShEZWZhdWx0TGF5ZXIpCisgICAgLCBt
X3N1cmZhY2UoMCkKKyAgICAsIG1fcGFyZW50KDApCisgICAgLCBtX2VmZmVjdFRhcmdldCgwKQor
ICAgICwgbV9jaGFuZ2VNYXNrKE5vQ2hhbmdlcykKKyAgICAsIG1fcGxhdGZvcm1DbGllbnQoMCkK
K3sKKworfQorCitUZXh0dXJlTWFwcGVyTm9kZSogVGV4dHVyZU1hcHBlck5vZGU6OnJvb3RMYXll
cigpCit7CisgICAgaWYgKG1fZWZmZWN0VGFyZ2V0KQorICAgICAgICByZXR1cm4gbV9lZmZlY3RU
YXJnZXQtPnJvb3RMYXllcigpOworICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgcmV0dXJuIG1f
cGFyZW50LT5yb290TGF5ZXIoKTsKKyAgICByZXR1cm4gdGhpczsKK30KKwordm9pZCBUZXh0dXJl
TWFwcGVyTm9kZTo6aW52YWxpZGF0ZVRyYW5zZm9ybSgpCit7CisgICAgbV90cmFuc2Zvcm1zLmRp
cnR5ID0gdHJ1ZTsKKyAgICBpZiAobV9sYXllclR5cGUgIT0gQ2xpcExheWVyKQorICAgICAgICBt
X3N0YXRlLmRpcnR5ID0gdHJ1ZTsKKyAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAg
ICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5pbnZhbGlkYXRlVHJhbnNmb3JtKCk7CisgICAgY29u
c3QgaW50IHNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IHNpemU7ICsraSkgeworICAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIGxheWVyID0gbV9j
aGlsZHJlbltpXSkKKyAgICAgICAgICAgIGxheWVyLT5pbnZhbGlkYXRlVHJhbnNmb3JtKCk7Cisg
ICAgfQorfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlTG9jYWxUcmFuc2Zvcm0o
KQoreworICAgIGlmICghbV90cmFuc2Zvcm1zLmxvY2FsRGlydHkpCisgICAgICAgIHJldHVybjsK
KyAgICBjb25zdCBmbG9hdCBvcmlnaW5YID0gbV9zdGF0ZS5hbmNob3JQb2ludC54KCkgKiBtX3Np
emUud2lkdGgoKTsKKyAgICBjb25zdCBmbG9hdCBvcmlnaW5ZID0gbV9zdGF0ZS5hbmNob3JQb2lu
dC55KCkgKiBtX3NpemUuaGVpZ2h0KCk7CisgICAgbV90cmFuc2Zvcm1zLmxvY2FsID0KKyAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoKQorICAgICAgICAudHJhbnNsYXRlM2Qob3JpZ2luWCAr
IG1fc3RhdGUucG9zLngoKSwgb3JpZ2luWSArIG1fc3RhdGUucG9zLnkoKSwgbV9zdGF0ZS5hbmNo
b3JQb2ludC56KCkpCisgICAgICAgIC5tdWx0TGVmdChtX3N0YXRlLnRyYW5zZm9ybSkKKyAgICAg
ICAgLnRyYW5zbGF0ZTNkKC1vcmlnaW5YLCAtb3JpZ2luWSwgLW1fc3RhdGUuYW5jaG9yUG9pbnQu
eigpKTsKKyAgICBtX3RyYW5zZm9ybXMubG9jYWxEaXJ0eSA9IGZhbHNlOworfQorCit2b2lkIFRl
eHR1cmVNYXBwZXJOb2RlOjpmbGF0dGVuVG8yRFNwYWNlSWZOZWNlc3NhcnkoKQoreworICAgIGlm
IChtX3N0YXRlLnByZXNlcnZlczNEKQorICAgICAgICByZXR1cm47CisgICAgbV90cmFuc2Zvcm1z
LmZvckRlc2NlbmRhbnRzLnNldE0xMygwKTsKKyAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFu
dHMuc2V0TTIzKDApOworICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNMzEoMCk7
CisgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE0zMigwKTsKKyAgICBtX3RyYW5z
Zm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTMzKDEpOworICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNj
ZW5kYW50cy5zZXRNMzQoMCk7CisgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE00
MygwKTsKK30KKworSW50U2l6ZSBUZXh0dXJlTWFwcGVyTm9kZTo6bmVhcmVzdFN1cmZhY2VTaXpl
KCkgY29uc3QKK3sKKyAgICBpZiAobV9sYXllclR5cGUgPT0gQ2xpcExheWVyIHx8IG1fbGF5ZXJU
eXBlID09IFJvb3RMYXllcikKKyAgICAgICAgcmV0dXJuIG1fc3VyZmFjZSAmJiAhbV9zdXJmYWNl
LT5zaXplKCkuaXNFbXB0eSgpID8gbV9zdXJmYWNlLT5zaXplKCkgOiBtX3NpemU7CisgICAgcmV0
dXJuIG1fcGFyZW50LT5uZWFyZXN0U3VyZmFjZVNpemUoKTsKK30KKwordm9pZCBUZXh0dXJlTWFw
cGVyTm9kZTo6Y29tcHV0ZVJlcGxpY2FUcmFuc2Zvcm0oKQoreworICAgIGlmICghbV9zdGF0ZS5y
ZXBsaWNhTGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbmVhcmVzdFN1cmZhY2VTaXpl
ID0gbmVhcmVzdFN1cmZhY2VTaXplKCk7CisKKyAgICBpZiAobV9sYXllclR5cGUgIT0gVHJhbnNw
YXJlbmN5TGF5ZXIpIHsKKyAgICAgICAgbV90cmFuc2Zvcm1zLnJlcGxpY2EgPSBUcmFuc2Zvcm1h
dGlvbk1hdHJpeChtX3RyYW5zZm9ybXMudGFyZ2V0KS5tdWx0TGVmdChtX3N0YXRlLnJlcGxpY2FM
YXllci0+bV90cmFuc2Zvcm1zLmxvY2FsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGNvbnN0IGZsb2F0IG9yaWdpblggPSBtX3RyYW5zZm9ybXMudGFyZ2V0Lm00MSgpOworICAgIGNv
bnN0IGZsb2F0IG9yaWdpblkgPSBtX3RyYW5zZm9ybXMudGFyZ2V0Lm00MigpOworICAgIG1fdHJh
bnNmb3Jtcy5yZXBsaWNhID0KKyAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KCkKKyAg
ICAgICAgICAgICAgICAudHJhbnNsYXRlKG9yaWdpblgsIG9yaWdpblkpCisgICAgICAgICAgICAg
ICAgLm11bHRMZWZ0KG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3RyYW5zZm9ybXMubG9jYWwpCisg
ICAgICAgICAgICAgICAgLnRyYW5zbGF0ZSgtb3JpZ2luWCwgLW9yaWdpblkpOworfQorCit2b2lk
IFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlVHJhbnNmb3JtYXRpb25zKCkKK3sKKyAgICBpZiAo
IW1fdHJhbnNmb3Jtcy5kaXJ0eSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90cmFuc2Zvcm1z
LmRpcnR5ID0gZmFsc2U7CisgICAgaWYgKChtX3NpemUuaXNFbXB0eSgpICYmIG1fc3RhdGUubWFz
a3NUb0JvdW5kcykpCisgICAgICAgIHJldHVybjsKKworICAgIFRleHR1cmVNYXBwZXJOb2RlKiBw
YXJlbnQgPSBtX3BhcmVudDsKKyAgICBjb21wdXRlTG9jYWxUcmFuc2Zvcm0oKTsKKworICAgIG1f
dHJhbnNmb3Jtcy50YXJnZXQgPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChwYXJlbnQgPyBwYXJlbnQt
Pm1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cyA6IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpLm11
bHRMZWZ0KG1fdHJhbnNmb3Jtcy5sb2NhbCk7CisgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRh
bnRzID0gKG1fbGF5ZXJUeXBlID09IENsaXBMYXllciA/IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkg
OiBtX3RyYW5zZm9ybXMudGFyZ2V0KTsKKworICAgIGlmIChtX2VmZmVjdFRhcmdldCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV90cmFuc2Zvcm1zLnRhcmdldEJvdW5kaW5nUmVjdCA9IEludFJl
Y3QobV90cmFuc2Zvcm1zLnRhcmdldC5tYXBSZWN0KGZ1bGxSZWN0KCkpKTsKKyAgICBpZiAobV9z
dGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5jb21wdXRl
VHJhbnNmb3JtYXRpb25zKCk7CisKKyAgICBmbGF0dGVuVG8yRFNwYWNlSWZOZWNlc3NhcnkoKTsK
KworICAgIGlmICghbV9zdGF0ZS5iYWNrZmFjZVZpc2liaWxpdHkgJiYgbV90cmFuc2Zvcm1zLnRh
cmdldC5pbnZlcnNlKCkubTMzKCkgPCAwKSB7CisgICAgICAgIG1fc3RhdGUudmlzaWJsZSA9IGZh
bHNlOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fc3RhdGUudmlzaWJsZSA9IHRydWU7
CisKKyAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+bV9zdGF0ZS5wcmVzZXJ2ZXMzRCkKKyAgICAg
ICAgbV90cmFuc2Zvcm1zLmNlbnRlclogPSBtX3RyYW5zZm9ybXMudGFyZ2V0Lm1hcFBvaW50KEZs
b2F0UG9pbnQzRChtX3NpemUud2lkdGgoKSAvIDIsIG1fc2l6ZS5oZWlnaHQoKSAvIDIsIDApKS56
KCk7CisKKyAgICBpZiAoIW1fY2hpbGRyZW4uc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAobV9zdGF0ZS5jaGlsZHJlblRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGNvbnN0IEZsb2F0UG9pbnQgY2VudGVyUG9pbnQgPSBGbG9hdFBvaW50KG1f
c2l6ZS53aWR0aCgpIC8gMiwgbV9zaXplLmhlaWdodCgpIC8gMik7CisgICAgaWYgKG1fdHJhbnNm
b3Jtcy5wZXJzcGVjdGl2ZURpcnR5KQorICAgICAgICBtX3RyYW5zZm9ybXMucGVyc3BlY3RpdmUg
PSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpCisgICAgICAgICAgICAudHJhbnNsYXRlKGNlbnRlclBv
aW50LngoKSwgY2VudGVyUG9pbnQueSgpKQorICAgICAgICAgICAgLm11bHRMZWZ0KG1fc3RhdGUu
Y2hpbGRyZW5UcmFuc2Zvcm0pCisgICAgICAgICAgICAudHJhbnNsYXRlKC1jZW50ZXJQb2ludC54
KCksIC1jZW50ZXJQb2ludC55KCkpOworICAgIG1fdHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZURpcnR5
ID0gZmFsc2U7CisgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLm11bHRMZWZ0KG1fdHJh
bnNmb3Jtcy5wZXJzcGVjdGl2ZSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnVwbG9h
ZFRleHR1cmVGcm9tQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQoreworICAg
IC8vIG5lZWRzIGFjdGl2ZSBjb250ZXh0CisgICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkgfHwgIW1f
bGF5ZXIpIHsKKyAgICAgICAgbV90ZXh0dXJlLT5kZXN0cm95KCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJ
bWFnZUNvbnRlbnRUeXBlKSB7CisgICAgICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmltYWdlKQor
ICAgICAgICAgICAgbV90ZXh0dXJlLT5zZXRDb250ZW50c1RvSW1hZ2UobV9jdXJyZW50Q29udGVu
dC5pbWFnZS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9jdXJy
ZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBNZWRpYUNvbnRlbnRUeXBlKSB7CisgICAgICAgIGlm
ICghbV9jdXJyZW50Q29udGVudC5tZWRpYSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
bV90ZXh0dXJlLT5yZXNldChtX3NpemUsIHRydWUpOworICAgICAgICBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dCogcGxhdGZvcm1Db250ZXh0ID0gbV90ZXh0dXJlLT5iZWdpblBhaW50TWVkaWEoKTsK
KyAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQocGxhdGZvcm1Db250ZXh0KTsKKyAgICAg
ICAgbV9jdXJyZW50Q29udGVudC5tZWRpYS0+cGFpbnQoJmNvbnRleHQpOworICAgICAgICBtX3Rl
eHR1cmUtPmVuZFBhaW50KCk7CisgICAgfQorCisgICAgY29uc3QgYm9vbCBuZWVkc1Jlc2V0ID0g
KG1fdGV4dHVyZS0+Y29udGVudFNpemUoKSAhPSBtX3NpemUpIHx8ICFtX3RleHR1cmUtPmlzVmFs
aWQoKTsKKyAgICBpZiAoKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgIT0gSFRNTENvbnRl
bnRUeXBlKQorICAgICAgICB8fCAoIW1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5ICYmIG1f
Y3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdC5pc0VtcHR5KCkgJiYgIW5lZWRzUmVzZXQp
KQorICAgICAgICByZXR1cm47CisKKyAgICBXVEY6OlN0b3BXYXRjaCBzdG9wV2F0Y2g7CisgICAg
SW50UmVjdCBkaXJ0eVJlY3QgPSBJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUu
aGVpZ2h0KCkpOworICAgIGlmICghbmVlZHNSZXNldCAmJiAhbV9jdXJyZW50Q29udGVudC5uZWVk
c0Rpc3BsYXkpCisgICAgICAgIGRpcnR5UmVjdC5pbnRlcnNlY3QobV9jdXJyZW50Q29udGVudC5u
ZWVkc0Rpc3BsYXlSZWN0KTsKKyAgICBpZiAobmVlZHNSZXNldCkKKyAgICAgICAgbV90ZXh0dXJl
LT5yZXNldChtX3NpemUsIG1fc3RhdGUuY29udGVudHNPcGFxdWUpOworCisgICAgeworICAgICAg
ICBHcmFwaGljc0NvbnRleHQgY29udGV4dChtX3RleHR1cmUtPmJlZ2luUGFpbnQoZGlydHlSZWN0
KSk7CisgICAgICAgIGlmICh0ZXh0dXJlTWFwcGVyICYmIHRleHR1cmVNYXBwZXItPmdyYXBoaWNz
Q29udGV4dCgpKSB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqIG9yaWdpbmFsQ29udGV4
dCA9IHRleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dCgpOworICAgICAgICAgICAgY29udGV4
dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KG9yaWdpbmFsQ29udGV4dC0+aW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0VGV4dERyYXdpbmdN
b2RlKG9yaWdpbmFsQ29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkpOworICAgICAgICB9CisgICAg
ICAgIG1fbGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIGRpcnR5UmVj
dCk7CisgICAgfQorICAgIG1fdGV4dHVyZS0+ZW5kUGFpbnQoKTsKKyAgICB7CisjaWYgMAorICAg
ICAgICBMT0coIltUZXh0dXJlTWFwcGVyXSBSZS1yZW5kZXIoJWQpIGxheWVyKCVwKSAlZDo6JWQ6
OiVkICglZHglZCkgWyVkbXNdXG4iLCArK3JlbmRlckNvdW50LCB0aGlzLAorICAgICAgICAgICAg
ICAgbmVlZHNSZXNldCwgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXksICFtX2N1cnJlbnRD
b250ZW50Lm5lZWRzRGlzcGxheVJlY3QuaXNFbXB0eSgpLAorICAgICAgICAgICAgICAgZGlydHlS
ZWN0LndpZHRoKCksIGRpcnR5UmVjdC5oZWlnaHQoKSwgaW50KHN0b3BXYXRjaC5lbGFwc2VkKCkg
KiAxMDAwKSk7CisgICAgICAgIHN0YXRpYyBpbnQgcmVuZGVyQ291bnQgPSAwOworICAgICAgICBt
X3RleHR1cmUtPnNhdmUoU3RyaW5nKCkuZm9ybWF0KCIvdG1wL2xheWVyXyVkLnBuZyIsIHJlbmRl
ckNvdW50KSk7CisjZW5kaWYKKyAgICB9CisKKyAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlz
cGxheVJlY3QgPSBJbnRSZWN0KCk7CisgICAgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkg
PSBmYWxzZTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRTZWxmKFRleHR1cmVN
YXBwZXIqIHRleHR1cmVNYXBwZXIsIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2tU
ZXh0dXJlLCBCaXRtYXBUZXh0dXJlKiByZXBsaWNhTWFza1RleHR1cmUsIGJvb2wgaXNTdXJmYWNl
KQoreworICAgIC8vIG5lZWRzIGFjdGl2ZSBjb250ZXh0CisgICAgaWYgKCFtX2xheWVyIHx8IG1f
c2l6ZS5pc0VtcHR5KCkgfHwgKCFtX3N0YXRlLmRyYXdzQ29udGVudCAmJiBtX2N1cnJlbnRDb250
ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSkpCisgICAgICAgIHJldHVybjsKKyAg
ICB1cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQodGV4dHVyZU1hcHBlcik7CisgICAgaWYgKG1fc3Rh
dGUucmVwbGljYUxheWVyICYmICFpc1N1cmZhY2UpCisgICAgICAgIHRleHR1cmVNYXBwZXItPmRy
YXdUZXh0dXJlKCptX3RleHR1cmUuZ2V0KCksIHJlcGxpY2FSZWN0KCksIG1fdHJhbnNmb3Jtcy5y
ZXBsaWNhLAorICAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHkgKiBtX3N0YXRlLnJlcGxp
Y2FMYXllci0+bV9zdGF0ZS5vcGFjaXR5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXBs
aWNhTWFza1RleHR1cmUgPyByZXBsaWNhTWFza1RleHR1cmUgOiBtYXNrVGV4dHVyZSk7CisKKwor
ICAgIGNvbnN0IEludFJlY3QgcmVjdCA9IG1fbGF5ZXJUeXBlID09IENsaXBMYXllciA/IGZ1bGxS
ZWN0KCkgOiB0YXJnZXRSZWN0KCk7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJh
bnNmb3JtID0gbV9sYXllclR5cGUgPT0gQ2xpcExheWVyID8gVHJhbnNmb3JtYXRpb25NYXRyaXgo
KSA6IG1fdHJhbnNmb3Jtcy50YXJnZXQ7CisgICAgdGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUo
Km1fdGV4dHVyZS5nZXQoKSwgcmVjdCwgdHJhbnNmb3JtLCBvcGFjaXR5LCBpc1N1cmZhY2UgPyAw
IDogbWFza1RleHR1cmUpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludFJlY3Vy
c2l2ZShUZXhtYXBQYWludE9wdGlvbnMgb3B0aW9ucykKK3sKKyAgICAvLyBuZWVkcyBhY3RpdmUg
Y29udGV4dAorCisgICAgV1RGOjpTdG9wV2F0Y2ggc3RvcFdhdGNoOworCisgICAgYm9vbCBpc0Rp
cnR5ID0gbV9zdGF0ZS5kaXJ0eTsKKyAgICBtX3N0YXRlLmRpcnR5ID0gZmFsc2U7CisKKyAgICBp
ZiAoKG1fc2l6ZS5pc0VtcHR5KCkgJiYgKG1fc3RhdGUubWFza3NUb0JvdW5kcworICAgICAgICB8
fCBtX2NoaWxkcmVuLmlzRW1wdHkoKSkpIHx8ICFtX3N0YXRlLnZpc2libGUgfHwgb3B0aW9ucy5v
cGFjaXR5IDwgMC4wMSB8fCBtX3N0YXRlLm9wYWNpdHkgPCAwLjAxKQorICAgICAgICByZXR1cm47
CisKKyAgICBpbml0aWFsaXplVGV4dHVyZU1hcHBlcihvcHRpb25zLnRleHR1cmVNYXBwZXIpOwor
ICAgIGNvbXB1dGVSZXBsaWNhVHJhbnNmb3JtKCk7CisKKyAgICBpZiAobV9zdGF0ZS5tYXNrTGF5
ZXIpIHsKKyAgICAgICAgbV9zdGF0ZS5tYXNrTGF5ZXItPmluaXRpYWxpemVUZXh0dXJlTWFwcGVy
KG9wdGlvbnMudGV4dHVyZU1hcHBlcik7CisgICAgICAgIG1fc3RhdGUubWFza0xheWVyLT5tX3N0
YXRlLmRpcnR5ID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVy
KSB7CisgICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5pbml0aWFsaXplVGV4dHVyZU1hcHBl
cihvcHRpb25zLnRleHR1cmVNYXBwZXIpOworICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+
bV9zdGF0ZS5kaXJ0eSA9IGZhbHNlOworICAgICAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIt
Pm1fc3RhdGUubWFza0xheWVyKSB7CisgICAgICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+
bV9zdGF0ZS5tYXNrTGF5ZXItPmluaXRpYWxpemVUZXh0dXJlTWFwcGVyKG9wdGlvbnMudGV4dHVy
ZU1hcHBlcik7CisgICAgICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5tYXNr
TGF5ZXItPm1fc3RhdGUuZGlydHkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRl
eHR1cmVNYXBwZXJOb2RlKiByZXBsaWNhID0gbV9zdGF0ZS5yZXBsaWNhTGF5ZXI7CisgICAgY29u
c3QgYm9vbCBpc1N1cmZhY2UgPSAobV9sYXllclR5cGUgPT0gQ2xpcExheWVyCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgbV9sYXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAobV9sYXllclR5cGUgPT0gUm9vdExheWVyCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChvcHRpb25zLnRleHR1cmVNYXBwZXIt
PmFsbG93U3VyZmFjZUZvclJvb3QoKSB8fCBtX3N0YXRlLmhhc1N1cmZhY2VEZXNjZW5kYW50cykK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgaWYgKGlzU3VyZmFjZSkK
KyAgICAgICAgdXBsb2FkVGV4dHVyZUZyb21Db250ZW50KG9wdGlvbnMudGV4dHVyZU1hcHBlcik7
CisgICAgY29uc3QgSW50UmVjdCBib3VuZGluZ1JlY3Rmcm9tTmVhcmVzdFN1cmZhY2UgPSBtX3Ry
YW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0OworCisKKyAgICBvcHRpb25zLm9wYWNpdHkgKj0g
bV9zdGF0ZS5vcGFjaXR5OworCisgICAgZmxvYXQgY29udGVudE9wYWNpdHkgPSBpc1N1cmZhY2Ug
PyAxIDogb3B0aW9ucy5vcGFjaXR5OworICAgIFRleG1hcFBhaW50T3B0aW9ucyBvcHRpb25zRm9y
RGVzY2VuZGFudHMob3B0aW9ucyk7CisgICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLm9wYWNpdHkg
PSBjb250ZW50T3BhY2l0eTsKKworICAgIGlmIChtX2xheWVyVHlwZSA9PSBDbGlwTGF5ZXIpIHsK
KyAgICAgICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLnZpc2libGVSZWN0ID0gVHJhbnNmb3JtYXRp
b25NYXRyaXgoKS50cmFuc2xhdGUoLWJvdW5kaW5nUmVjdGZyb21OZWFyZXN0U3VyZmFjZS54KCks
IC1ib3VuZGluZ1JlY3Rmcm9tTmVhcmVzdFN1cmZhY2UueSgpKS5tYXBSZWN0KG9wdGlvbnMudmlz
aWJsZVJlY3QpOworICAgICAgICBvcHRpb25zRm9yRGVzY2VuZGFudHMuc2Npc3NvclJlY3QgPSBJ
bnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgIH0KKwor
ICAgIGlmIChtX2xheWVyVHlwZSA9PSBTY2lzc29yTGF5ZXIpIAorICAgICAgICBvcHRpb25zRm9y
RGVzY2VuZGFudHMuc2Npc3NvclJlY3QuaW50ZXJzZWN0KG1fdHJhbnNmb3Jtcy50YXJnZXRCb3Vu
ZGluZ1JlY3QpOworICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+c2V0Q2xpcChvcHRpb25zRm9y
RGVzY2VuZGFudHMuc2Npc3NvclJlY3QpOworCisgICAgVGV4dHVyZU1hcHBlckNhY2hlTG9jayht
X3RleHR1cmUuZ2V0KCkpOworICAgIFRleHR1cmVNYXBwZXJDYWNoZUxvY2sobV9zdXJmYWNlLmdl
dCgpKTsKKyAgICBUZXh0dXJlTWFwcGVyQ2FjaGVMb2NrKG1fcmVwbGljYVN1cmZhY2UuZ2V0KCkp
OworCisgICAgZ1RleHR1cmVNYXBwZXJDYWNoZS5wdXJnZSgpOworCisgICAgaWYgKGlzU3VyZmFj
ZSkgeworICAgICAgICBBU1NFUlQobV9zdXJmYWNlKTsKKyAgICAgICAgaWYgKCFtX3N1cmZhY2Ut
PmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGlzRGlydHkgPSB0cnVlOworICAgICAgICBpZiAobV9z
dGF0ZS50aWxlZCkgeworICAgICAgICAgICAgbV9zdXJmYWNlLT5yZXNldChvcHRpb25zLnZpc2li
bGVSZWN0LnNpemUoKSk7CisgICAgICAgICAgICBtX3N1cmZhY2UtPnNldE9mZnNldChvcHRpb25z
LnZpc2libGVSZWN0LmxvY2F0aW9uKCkpOworICAgICAgICB9IGVsc2UgaWYgKGlzRGlydHkpCisg
ICAgICAgICAgICBtX3N1cmZhY2UtPnJlc2V0KG1fbGF5ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxh
eWVyID8gb3B0aW9ucy5zdXJmYWNlLT5zaXplKCkgOiBtX3NpemUpOworICAgICAgICBnVGV4dHVy
ZU1hcHBlckNhY2hlLm1hcmsobV9zdXJmYWNlLmdldCgpKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0
dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShtX3N1cmZhY2UuZ2V0KCkpOworCisgICAgICAgIG9wdGlv
bnNGb3JEZXNjZW5kYW50cy5zdXJmYWNlID0gbV9zdXJmYWNlLmdldCgpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAgICAgICBtX3N1cmZhY2UtPmRlc3Ryb3ko
KTsKKyAgICAgICAgY29udGVudE9wYWNpdHkgPSBvcHRpb25zLm9wYWNpdHk7CisgICAgfQorCisg
ICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1hc2tUZXh0dXJlOworICAgIFJlZlB0cjxCaXRtYXBU
ZXh0dXJlPiByZXBsaWNhTWFza1RleHR1cmU7CisgICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiBt
YXNrID0gbV9zdGF0ZS5tYXNrTGF5ZXIpIHsKKyAgICAgICAgbWFzay0+dXBsb2FkVGV4dHVyZUZy
b21Db250ZW50KG9wdGlvbnMudGV4dHVyZU1hcHBlcik7CisgICAgICAgIG1hc2tUZXh0dXJlID0g
bWFzay0+bV90ZXh0dXJlOworICAgIH0KKworICAgIGlmIChyZXBsaWNhICYmIHJlcGxpY2EtPm1f
c3RhdGUubWFza0xheWVyKSB7CisgICAgICAgIHJlcGxpY2EtPm1fc3RhdGUubWFza0xheWVyLT51
cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQob3B0aW9ucy50ZXh0dXJlTWFwcGVyKTsKKyAgICAgICAg
cmVwbGljYU1hc2tUZXh0dXJlID0gcmVwbGljYS0+bV9zdGF0ZS5tYXNrTGF5ZXItPm1fdGV4dHVy
ZTsKKyAgICB9CisKKyAgICBpbnQgY2hpbGRyZW5TaXplID0gbV9jaGlsZHJlbi5zaXplKCk7Cisg
ICAgaWYgKGlzRGlydHkgfHwgIWlzU3VyZmFjZSB8fCBtX3N0YXRlLnRpbGVkIHx8ICFtX3N1cmZh
Y2UtPmlzVmFsaWQoKSkgeworICAgICAgICBib29sIGRpZFBhaW50U2VsZiA9IGZhbHNlOworICAg
ICAgICBpZiAoIW1fc3RhdGUucHJlc2VydmVzM0QgfHwgbV9jaGlsZHJlbi5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIHBhaW50U2VsZihvcHRpb25zLnRleHR1cmVNYXBwZXIsIGNvbnRlbnRPcGFj
aXR5LCBtYXNrVGV4dHVyZS5nZXQoKSwgcmVwbGljYU1hc2tUZXh0dXJlLmdldCgpLCBpc1N1cmZh
Y2UpOworICAgICAgICAgICAgZGlkUGFpbnRTZWxmID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChtX2NoaWxkcmVuLmlzRW1wdHkoKSAmJiAhaXNTdXJmYWNlKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGlmIChtX2xheWVyVHlwZSA9PSBTY2lzc29yTGF5ZXIpCisgICAg
ICAgICAgICBvcHRpb25zRm9yRGVzY2VuZGFudHMuc2Npc3NvclJlY3QuaW50ZXJzZWN0KG1fdHJh
bnNmb3Jtcy50YXJnZXQubWFwUmVjdChJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3Np
emUuaGVpZ2h0KCkpKSk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlblNp
emU7ICsraSkgeworICAgICAgICAgICAgVGV4dHVyZU1hcHBlck5vZGUqIGxheWVyID0gbV9jaGls
ZHJlbltpXTsKKyAgICAgICAgICAgIGlmICghbGF5ZXIpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgICAgIGlmICghZGlkUGFpbnRTZWxmICYmIGxheWVyLT5tX3RyYW5zZm9y
bXMuY2VudGVyWiA+PSAwKSB7CisgICAgICAgICAgICAgICAgcGFpbnRTZWxmKG9wdGlvbnMudGV4
dHVyZU1hcHBlciwgY29udGVudE9wYWNpdHksIG1hc2tUZXh0dXJlLmdldCgpLCByZXBsaWNhTWFz
a1RleHR1cmUuZ2V0KCksIGlzU3VyZmFjZSk7CisgICAgICAgICAgICAgICAgZGlkUGFpbnRTZWxm
ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxheWVyLT5wYWludFJlY3Vyc2l2
ZShvcHRpb25zRm9yRGVzY2VuZGFudHMpOworICAgICAgICAgICAgaWYgKGlzU3VyZmFjZSkgewor
ICAgICAgICAgICAgICAgIEFTU0VSVChtX3N1cmZhY2UpOworICAgICAgICAgICAgICAgIGdUZXh0
dXJlTWFwcGVyQ2FjaGUubWFyayhtX3N1cmZhY2UuZ2V0KCkpOworICAgICAgICAgICAgICAgIG9w
dGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UobV9zdXJmYWNlLmdldCgpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWRpZFBhaW50U2VsZikgeworICAgICAg
ICAgICAgcGFpbnRTZWxmKG9wdGlvbnMudGV4dHVyZU1hcHBlciwgY29udGVudE9wYWNpdHksIG1h
c2tUZXh0dXJlLmdldCgpLCByZXBsaWNhTWFza1RleHR1cmUuZ2V0KCksIGlzU3VyZmFjZSk7Cisg
ICAgICAgICAgICBkaWRQYWludFNlbGYgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKG1fbGF5ZXJUeXBlID09IFJvb3RMYXllciB8fCBtX2xheWVyVHlwZSA9PSBEZWZhdWx0TGF5
ZXIgfHwgbV9sYXllclR5cGUgPT0gU2Npc3NvckxheWVyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBBU1NFUlQobV9zdXJmYWNlKTsKKyAgICBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlID0gKm1fc3Vy
ZmFjZS5nZXQoKTsKKyAgICBpZiAocmVwbGljYSkgeworICAgICAgICBBU1NFUlQobV9yZXBsaWNh
U3VyZmFjZSk7CisgICAgICAgIG1fcmVwbGljYVN1cmZhY2UtPnJlc2V0KG9wdGlvbnMuc3VyZmFj
ZS0+c2l6ZSgpKTsKKyAgICAgICAgbV9yZXBsaWNhU3VyZmFjZS0+c2V0T2Zmc2V0KG9wdGlvbnMu
c3VyZmFjZS0+b2Zmc2V0KCkpOworICAgICAgICBnVGV4dHVyZU1hcHBlckNhY2hlLm1hcmsobV9y
ZXBsaWNhU3VyZmFjZS5nZXQoKSk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+Ymlu
ZFN1cmZhY2UobV9yZXBsaWNhU3VyZmFjZS5nZXQoKSk7CisgICAgICAgIG9wdGlvbnMudGV4dHVy
ZU1hcHBlci0+ZHJhd1RleHR1cmUodGV4dHVyZSwgcmVwbGljYVJlY3QoKSwgbV90cmFuc2Zvcm1z
LnJlcGxpY2EsIHJlcGxpY2EtPm1fc3RhdGUub3BhY2l0eSwgcmVwbGljYU1hc2tUZXh0dXJlID8g
cmVwbGljYU1hc2tUZXh0dXJlLmdldCgpIDogbWFza1RleHR1cmUuZ2V0KCkpOworICAgICAgICBv
cHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKHRleHR1cmUsIEludFJlY3QoSW50UG9p
bnQoMCwgMCksIG9wdGlvbnMuc3VyZmFjZS0+c2l6ZSgpKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgo
KSwgMS4wZiwgbWFza1RleHR1cmUuZ2V0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBw
ZXItPmJpbmRTdXJmYWNlKG9wdGlvbnMuc3VyZmFjZSk7CisgICAgICAgIGdUZXh0dXJlTWFwcGVy
Q2FjaGUubWFyayhvcHRpb25zLnN1cmZhY2UpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBw
ZXItPmRyYXdUZXh0dXJlKCptX3JlcGxpY2FTdXJmYWNlLmdldCgpLCBJbnRSZWN0KEludFBvaW50
KDAsIDApLCBvcHRpb25zLnN1cmZhY2UtPnNpemUoKSksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCks
IG9wdGlvbnMub3BhY2l0eSwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBvcHRp
b25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKG9wdGlvbnMuc3VyZmFjZSk7CisgICAgb3B0
aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSh0ZXh0dXJlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2xheWVyVHlwZSA9PSBUcmFuc3BhcmVuY3lMYXllciA/IEludFJlY3Qo
SW50UG9pbnQoMCwgMCksIG9wdGlvbnMuc3VyZmFjZS0+c2l6ZSgpKSA6IAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0KCksIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2xheWVyVHlwZSA9PSBUcmFuc3BhcmVuY3lMYXllciA/IFRyYW5zZm9ybWF0aW9uTWF0
cml4KCkgOiBtX3RyYW5zZm9ybXMudGFyZ2V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3B0aW9ucy5vcGFjaXR5LCBtYXNrVGV4dHVyZS5nZXQoKSk7CisgICAgZ1RleHR1cmVNYXBw
ZXJDYWNoZS5tYXJrKCZ0ZXh0dXJlKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y2xl
YW51cFRleHR1cmVNYXBwZXIoKQoreworICAgIGlmIChtX3RleHR1cmUpCisgICAgICAgIG1fdGV4
dHVyZS0+ZGVzdHJveSgpOworICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAgIG1fc3VyZmFjZS0+
ZGVzdHJveSgpOworICAgIGlmIChtX3JlcGxpY2FTdXJmYWNlKQorICAgICAgICBtX3JlcGxpY2FT
dXJmYWNlLT5kZXN0cm95KCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2NoaWxkcmVuW2ldKQorICAgICAgICAgICAgbV9j
aGlsZHJlbltpXS0+Y2xlYW51cFRleHR1cmVNYXBwZXIoKTsKKyAgICB9CisgICAgaWYgKG1fbGFz
dFRleHR1cmVNYXBwZXIpCisgICAgICAgIG1fbGFzdFRleHR1cmVNYXBwZXItPmNsZWFudXAoKTsK
K30KKworVGV4dHVyZU1hcHBlck5vZGU6On5UZXh0dXJlTWFwcGVyTm9kZSgpCit7CisgICAgLy8g
bmVlZHMgYWN0aXZlIGNvbnRleHQKKyAgICAvLyBzeW5jQ29tcG9zaXRpbmdTdGF0ZSh0cnVlKTsK
KyAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICB7CisgICAgICAgIGNvbnN0IGludCBjaGlsZHJl
blNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IGNoaWxkcmVu
U2l6ZS0xOyBpID49IDA7IC0taSkgeworICAgICAgICAgICAgQVNTRVJUKG1fY2hpbGRyZW5baV0t
Pm1fcGFyZW50ID09IHRoaXMpOworICAgICAgICAgICAgbV9jaGlsZHJlbltpXS0+bV9wYXJlbnQg
PSAwOworICAgICAgICB9CisgICAgfQorICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgbV9wYXJl
bnQtPm1fY2hpbGRyZW4ucmVtb3ZlKG1fcGFyZW50LT5tX2NoaWxkcmVuLmZpbmQodGhpcykpOwor
fQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpub3RpZnlDaGFuZ2UoQ2hhbmdlTWFzayBjaGFu
Z2VNYXNrKQoreworICAgIG1fY2hhbmdlTWFzayB8PSBjaGFuZ2VNYXNrOworICAgIGlmICghbV9s
YXllci0+Y2xpZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2xheWVyLT5jbGllbnQoKS0+
bm90aWZ5U3luY1JlcXVpcmVkKG1fbGF5ZXIpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2Rl
OjpwZXJmb3JtUG9zdFN5bmNPcGVyYXRpb25zKCkKK3sKKyAgICBjb25zdCBMYXllclR5cGUgcHJl
dkxheWVyVHlwZSA9IG1fbGF5ZXJUeXBlOworICAgIGNvbXB1dGVMYXllclR5cGUoKTsKKyAgICBp
ZiAocHJldkxheWVyVHlwZSAhPSBtX2xheWVyVHlwZSkKKyAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9
IHRydWU7CisgICAgaWYgKG1fdHJhbnNmb3Jtcy5kaXJ0eSkgCisgICAgICAgIHNldE5lZWRzRGlz
cGxheSgpOworCisgICAgY29tcHV0ZVRyYW5zZm9ybWF0aW9ucygpOworICAgIGlmIChtX3N0YXRl
Lm1hc2tMYXllciAmJiAhbV9zdGF0ZS5kaXJ0eSkKKyAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IG1f
c3RhdGUubWFza0xheWVyLT5tX3N0YXRlLmRpcnR5OworICAgIGlmIChtX3N0YXRlLnJlcGxpY2FM
YXllciAmJiAhbV9zdGF0ZS5kaXJ0eSkKKyAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IG1fc3RhdGUu
cmVwbGljYUxheWVyLT5tX3N0YXRlLmRpcnR5OworCisgICAgY29uc3QgaW50IHNpemUgPSBtX2No
aWxkcmVuLnNpemUoKTsKKworICAgIGZvciAoaW50IGkgPSBzaXplIC0gMTsgaSA+PSAwOyAtLWkp
IHsKKyAgICAgICAgVGV4dHVyZU1hcHBlck5vZGUqIGxheWVyID0gbV9jaGlsZHJlbltpXTsKKwor
ICAgICAgICBsYXllci0+cGVyZm9ybVBvc3RTeW5jT3BlcmF0aW9ucygpOworICAgICAgICBpZiAo
IW1fc3RhdGUuZGlydHkpCisgICAgICAgICAgICBtX3N0YXRlLmRpcnR5ID0gbGF5ZXItPm1fc3Rh
dGUuZGlydHk7CisgICAgfQorICAgIG1fc3RhdGUuaGFzU3VyZmFjZURlc2NlbmRhbnRzID0gaGFz
U3VyZmFjZURlc2NlbmRhbnRzKCk7CisgICAgaWYgKG1fc3RhdGUuZGlydHkpCisgICAgICAgIG1f
c3RhdGUuZGVzY2VuZGFudHNXaXRoQ29udGVudCA9IGNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVu
dCgpOworCisgICAgaWYgKG1fc3RhdGUucHJlc2VydmVzM0QpCisgICAgICAgIHNvcnRCeVpPcmRl
cihtX2NoaWxkcmVuLCAwLCBzaXplKTsKKyAgICBpZiAobV9zdGF0ZS5kaXJ0eSkgCisgICAgICAg
IHNldE5lZWRzRGlzcGxheSgpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29t
cG9zaXRpbmdTdGF0ZShib29sIHJlY3Vyc2UpCit7CisgICAgYm9vbCBuZWVkc1RvSW52YWxpZGF0
ZVRyYW5zZm9ybSA9IGZhbHNlOworCisgICAgaWYgKCFtX2xheWVyKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAobV9jaGFuZ2VNYXNrID09IE5vQ2hhbmdlcykKKyAgICAgICAgZ290byBhZnRl
ckN1cnJlbnRMYXllclN5bmM7CisKKyAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBpZiAobV9w
YXJlbnQpCisgICAgICAgIG1fcGFyZW50LT5tX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKKworICAgIGlm
IChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSAmJiAobV9j
aGFuZ2VNYXNrICYgUGFyZW50Q2hhbmdlKSkgeworICAgICAgICAvLyBUaGUgV2ViQ29yZSBjb21w
b3NpdG9yIG1hbmFnZXMgaXRlbSBvd25lcnNoaXAuIFdlIGhhdmUgdG8gbWFrZSBzdXJlIGdyYXBo
aWNzdmlldyBkb2Vzbid0CisgICAgICAgIC8vIHRyeSB0byBzbmF0Y2ggdGhhdCBvd25lcnNoaXAu
CisKKyAgICAgICAgaWYgKCFtX2xheWVyLT5wYXJlbnQoKSkKKyAgICAgICAgICAgIG1fcGFyZW50
ID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9wYXJlbnQgPSB0b1RleHR1cmVNYXBw
ZXJOb2RlKG1fbGF5ZXItPnBhcmVudCgpKTsKKworICAgICAgICBpZiAoIW1fbGF5ZXItPnBhcmVu
dCgpICYmIG1fcGFyZW50KSB7CisgICAgICAgICAgICBzaXplX3QgaW5kZXggPSBtX3BhcmVudC0+
bV9jaGlsZHJlbi5maW5kKHRoaXMpOworICAgICAgICAgICAgbV9wYXJlbnQtPm1fY2hpbGRyZW4u
cmVtb3ZlKGluZGV4KTsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgaWYgKG1fY2hhbmdlTWFz
ayAmIENoaWxkcmVuQ2hhbmdlKSB7CisgICAgICAgIG1fY2hpbGRyZW4uY2xlYXIoKTsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIGNoaWxkID0gdG9UZXh0dXJl
TWFwcGVyTm9kZShtX2xheWVyLT5jaGlsZHJlbigpW2ldKSkgeworICAgICAgICAgICAgICAgIGlm
ICghY2hpbGQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IG1fY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKKyAgICAgICAgICAgICAgICBjaGlsZC0+bV9wYXJl
bnQgPSB0aGlzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fc3RhdGUuZGly
dHkgPSB0cnVlOworICAgIH0KKworICAgIGlmIChtX2NoYW5nZU1hc2sgJiAoU2l6ZUNoYW5nZSB8
IENvbnRlbnRzUmVjdENoYW5nZSkpIHsKKyAgICAgICAgSW50U2l6ZSB3YW50ZWRTaXplID0gSW50
U2l6ZShtX2xheWVyLT5zaXplKCkud2lkdGgoKSwgbV9sYXllci0+c2l6ZSgpLmhlaWdodCgpKTsK
KyAgICAgICAgaWYgKHdhbnRlZFNpemUuaXNFbXB0eSgpICYmIG1fcGVuZGluZ0NvbnRlbnQuY29u
dGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlKQorICAgICAgICAgICAgd2FudGVkU2l6ZSA9IElu
dFNpemUobV9sYXllci0+Y29udGVudHNSZWN0KCkud2lkdGgoKSwgbV9sYXllci0+Y29udGVudHNS
ZWN0KCkuaGVpZ2h0KCkpOworCisgICAgICAgIGlmICh3YW50ZWRTaXplICE9IG1fc2l6ZSkgewor
ICAgICAgICAgICAgbV9zaXplID0gSW50U2l6ZSh3YW50ZWRTaXplLndpZHRoKCksIHdhbnRlZFNp
emUuaGVpZ2h0KCkpOworICAgICAgICAgICAgaWYgKG1fcGxhdGZvcm1DbGllbnQpCisgICAgICAg
ICAgICAgICAgbV9wbGF0Zm9ybUNsaWVudC0+c2V0U2l6ZUNoYW5nZWQobV9zaXplKTsKKyAgICAg
ICAgICAgIGNvbnN0IGJvb2wgbmVlZHNUaWxpbmcgPSBtX3NpemUud2lkdGgoKSA+IDIwMDAgfHwg
bV9zaXplLmhlaWdodCgpID4gMjAwMDsKKyAgICAgICAgICAgIGlmIChtX3N0YXRlLnRpbGVkICE9
IG5lZWRzVGlsaW5nKQorICAgICAgICAgICAgICAgIG1fc3RhdGUudGlsZWQgPSBuZWVkc1RpbGlu
ZzsKKyAgICAgICAgICAgIG1fc3RhdGUuZGlydHkgPSB0cnVlOworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKG1fY2hhbmdlTWFzayAmIE1hc2tMYXllckNoYW5nZSkKKyAgICAgICBpZiAoVGV4
dHVyZU1hcHBlck5vZGUqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTm9kZShtX2xheWVyLT5tYXNr
TGF5ZXIoKSkpCisgICAgICAgICAgIGxheWVyLT5tX2VmZmVjdFRhcmdldCA9IHRoaXM7CisKKyAg
ICBpZiAobV9jaGFuZ2VNYXNrICYgUmVwbGljYUxheWVyQ2hhbmdlKQorICAgICAgIGlmIChUZXh0
dXJlTWFwcGVyTm9kZSogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJOb2RlKG1fbGF5ZXItPnJlcGxp
Y2FMYXllcigpKSkKKyAgICAgICAgICAgbGF5ZXItPm1fZWZmZWN0VGFyZ2V0ID0gdGhpczsKKwor
ICAgIGlmIChtX2NoYW5nZU1hc2sgJiAoVHJhbnNmb3JtQ2hhbmdlIHwgU2l6ZUNoYW5nZSB8IEFu
Y2hvclBvaW50Q2hhbmdlIHwgUG9zaXRpb25DaGFuZ2UpKQorICAgICAgICBtX3RyYW5zZm9ybXMu
bG9jYWxEaXJ0eSA9IHRydWU7CisKKyAgICBpZiAobV9jaGFuZ2VNYXNrICYgKENoaWxkcmVuVHJh
bnNmb3JtQ2hhbmdlIHwgU2l6ZUNoYW5nZSkpCisgICAgICAgIG1fdHJhbnNmb3Jtcy5wZXJzcGVj
dGl2ZURpcnR5ID0gdHJ1ZTsKKworICAgIGlmIChtX2NoYW5nZU1hc2sgJiAoQ2hpbGRyZW5UcmFu
c2Zvcm1DaGFuZ2UgfCBQcmVzZXJ2ZXMzRENoYW5nZSB8IFRyYW5zZm9ybUNoYW5nZSB8IEFuY2hv
clBvaW50Q2hhbmdlIHwgU2l6ZUNoYW5nZSB8IENvbnRlbnRzUmVjdENoYW5nZSB8IEJhY2tmYWNl
VmlzaWJpbGl0eUNoYW5nZSB8IFBvc2l0aW9uQ2hhbmdlIHwgTWFza0xheWVyQ2hhbmdlIHwgRHJh
d3NDb250ZW50Q2hhbmdlIHwgQ29udGVudENoYW5nZSB8IFJlcGxpY2FMYXllckNoYW5nZSkpICAg
IHsKKyAgICAgICAgLy8gRHVlIHRvIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB3YXkgV2Vi
Q29yZSBoYW5kbGVzIHRyYW5zZm9ybXMgYW5kIHRoZSB3YXkgUXQgaGFuZGxlcyB0cmFuc2Zvcm1z
LAorICAgICAgICAvLyBhbGwgdGhlc2UgZWxlbWVudHMgYWZmZWN0IHRoZSB0cmFuc2Zvcm1zIG9m
IGFsbCB0aGUgZGVzY2VuZGFudHMuCisgICAgICAgIG5lZWRzVG9JbnZhbGlkYXRlVHJhbnNmb3Jt
ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9jaGFuZ2VNYXNrICYgRGlzcGxheUNoYW5nZSkg
CisgICAgICAgIG1fc3RhdGUuZGlydHkgPSB0cnVlOworCisgICAgbV9zdGF0ZS5tYXNrTGF5ZXIg
PSB0b1RleHR1cmVNYXBwZXJOb2RlKG1fbGF5ZXItPm1hc2tMYXllcigpKTsKKyAgICBtX3N0YXRl
LnJlcGxpY2FMYXllciA9IHRvVGV4dHVyZU1hcHBlck5vZGUobV9sYXllci0+cmVwbGljYUxheWVy
KCkpOworICAgIG1fc3RhdGUucG9zID0gbV9sYXllci0+cG9zaXRpb24oKTsKKyAgICBtX3N0YXRl
LmFuY2hvclBvaW50ID0gbV9sYXllci0+YW5jaG9yUG9pbnQoKTsKKyAgICBtX3N0YXRlLnNpemUg
PSBtX2xheWVyLT5zaXplKCk7CisgICAgbV9zdGF0ZS50cmFuc2Zvcm0gPSBtX2xheWVyLT50cmFu
c2Zvcm0oKTsKKyAgICBtX3N0YXRlLmNvbnRlbnRzUmVjdCA9IG1fbGF5ZXItPmNvbnRlbnRzUmVj
dCgpOworICAgIG1fc3RhdGUub3BhY2l0eSA9IG1fbGF5ZXItPm9wYWNpdHkoKTsKKyAgICBtX3N0
YXRlLmNvbnRlbnRzUmVjdCA9IG1fbGF5ZXItPmNvbnRlbnRzUmVjdCgpOworICAgIG1fc3RhdGUu
cHJlc2VydmVzM0QgPSBtX2xheWVyLT5wcmVzZXJ2ZXMzRCgpOworICAgIG1fc3RhdGUubWFza3NU
b0JvdW5kcyA9IG1fbGF5ZXItPm1hc2tzVG9Cb3VuZHMoKTsKKyAgICBtX3N0YXRlLmRyYXdzQ29u
dGVudCA9IG1fbGF5ZXItPmRyYXdzQ29udGVudCgpOworICAgIG1fc3RhdGUuY29udGVudHNPcGFx
dWUgPSBtX2xheWVyLT5jb250ZW50c09wYXF1ZSgpOworICAgIG1fc3RhdGUuYmFja2ZhY2VWaXNp
YmlsaXR5ID0gbV9sYXllci0+YmFja2ZhY2VWaXNpYmlsaXR5KCk7CisgICAgbV9zdGF0ZS5jaGls
ZHJlblRyYW5zZm9ybSA9IG1fbGF5ZXItPmNoaWxkcmVuVHJhbnNmb3JtKCk7CisgICAgbV9jdXJy
ZW50Q29udGVudC5jb250ZW50VHlwZSA9IG1fcGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGU7Cisg
ICAgbV9jdXJyZW50Q29udGVudC5pbWFnZSA9IG1fcGVuZGluZ0NvbnRlbnQuaW1hZ2U7CisgICAg
bV9jdXJyZW50Q29udGVudC5tZWRpYSA9IG1fcGVuZGluZ0NvbnRlbnQubWVkaWE7CisgICAgbV9j
dXJyZW50Q29udGVudC5iYWNrZ3JvdW5kQ29sb3IgPSBtX3BlbmRpbmdDb250ZW50LmJhY2tncm91
bmRDb2xvcjsKKyAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSA9IG1fY3VycmVudENv
bnRlbnQubmVlZHNEaXNwbGF5IHx8IG1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5OworICAg
IG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdC51bml0ZShtX3BlbmRpbmdDb250ZW50
Lm5lZWRzRGlzcGxheVJlY3QpOworICAgIG1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5ID0g
ZmFsc2U7CisgICAgbV9wZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXlSZWN0ID0gSW50UmVjdCgp
OworICAgIG1fY2hhbmdlTWFzayA9IE5vQ2hhbmdlczsKKyAgICBhZnRlckN1cnJlbnRMYXllclN5
bmM6CisgICAgaWYgKG5lZWRzVG9JbnZhbGlkYXRlVHJhbnNmb3JtKQorICAgICAgICBpbnZhbGlk
YXRlVHJhbnNmb3JtKCk7CisKKyAgICBpZiAobV9zdGF0ZS5tYXNrTGF5ZXIpIHsKKyAgICAgICAg
bV9zdGF0ZS5tYXNrTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKGZhbHNlKTsKKyAgICAgICAg
aWYgKG1fc3RhdGUubWFza0xheWVyLT5tX3NpemUuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9z
dGF0ZS5tYXNrTGF5ZXItPm1fc2l6ZSA9IG1fc2l6ZTsKKyAgICB9CisKKyAgICBpZiAobV9zdGF0
ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5zeW5jQ29tcG9z
aXRpbmdTdGF0ZShmYWxzZSk7CisKKyNpZiAwCisgICAgaWYgKG1fc3RhdGUuZGlydHkgJiYgbV90
ZXh0dXJlICYmIG1fdGV4dHVyZS0+YWxsb3dPZmZsaW5lVGV4dHVyZVVwbG9hZCgpKQorICAgICAg
ICB1cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQoMCk7CisjZW5kaWYKKworICAgIGlmICghcmVjdXJz
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgaW50IGNoaWxkcmVuU2l6ZSA9IG1fY2hp
bGRyZW4uc2l6ZSgpOworICAgIGZvciAoaW50IGkgPSBjaGlsZHJlblNpemUtMTsgaSA+PSAwOyAt
LWkpCisgICAgICAgIG1fY2hpbGRyZW5baV0tPnN5bmNDb21wb3NpdGluZ1N0YXRlKHRydWUpOwor
fQorCitHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQorICAgIDogR3JhcGhpY3NMYXllcihjbGll
bnQpCisgICAgLCBtX25vZGUobmV3IFRleHR1cmVNYXBwZXJOb2RlKHRoaXMpKQoreworfQorCit2
b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFt
ZSkKK3sKKyAgICBtX25vZGUtPm1fbmFtZSA9IG5hbWU7Cit9CisKK0dyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyOjp+R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoKQoreworfQorCisvKiBccmVp
bXAgKEdyYXBoaWNzTGF5ZXIuaCk6IFRoZSBjdXJyZW50IHNpemUgbWlnaHQgY2hhbmdlLCB0aHVz
IHdlIG5lZWQgdG8gdXBkYXRlIHRoZSB3aG9sZSBkaXNwbGF5LgorKi8KK3ZvaWQgR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAgbV9ub2RlLT5tX3Bl
bmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheSA9IHRydWU7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFu
Z2UoVGV4dHVyZU1hcHBlck5vZGU6OkRpc3BsYXlDaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdy
YXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRO
ZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmIChtX25v
ZGUtPm1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5KQorICAgICAgICByZXR1cm47CisgICAg
bV9ub2RlLT5tX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QudW5pdGUoSW50UmVjdChy
ZWN0KSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkRpc3Bs
YXlDaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRQYXJlbnQoR3JhcGhpY3NMYXllciogbGF5ZXIp
Cit7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlBhcmVudENo
YW5nZSk7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0UGFyZW50KGxheWVyKTsKK30KKworLyogXHJl
aW1wIChHcmFwaGljc0xheWVyLmgpCisqLworYm9vbCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cjo6c2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRyZW4pCit7
CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNoaWxkcmVuQ2hh
bmdlKTsKKyAgICByZXR1cm4gR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOwor
fQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyOjphZGRDaGlsZChHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBtX25v
ZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOworICAg
IEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkKGxheWVyKTsKK30KKworLyogXHJlaW1wIChHcmFwaGlj
c0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRB
dEluZGV4KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBpbnQgaW5kZXgpCit7CisgICAgR3JhcGhpY3NM
YXllcjo6YWRkQ2hpbGRBdEluZGV4KGxheWVyLCBpbmRleCk7CisgICAgbV9ub2RlLT5ub3RpZnlD
aGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNoaWxkcmVuQ2hhbmdlKTsKK30KKworLyogXHJlaW1w
IChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6
YWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGlu
ZykKK3sKKyAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZShsYXllciwgc2libGluZyk7
CisgICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDaGlsZHJlbkNo
YW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkQmVsb3coR3JhcGhpY3NMYXllciogbGF5ZXIs
IEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpCit7CisKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGls
ZEJlbG93KGxheWVyLCBzaWJsaW5nKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJl
TWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5
ZXIuaCkKKyovCitib29sIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpyZXBsYWNlQ2hpbGQo
R3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIEdyYXBoaWNzTGF5ZXIqIG5ld0NoaWxkKQoreworICAg
IGlmIChHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQob2xkQ2hpbGQsIG5ld0NoaWxkKSkgewor
ICAgICAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5D
aGFuZ2UpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OnJlbW92ZUZyb21QYXJlbnQoKQoreworICAgIGlmICghcGFyZW50KCkp
CisgICAgICAgIHJldHVybjsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVy
Tm9kZTo6UGFyZW50Q2hhbmdlKTsKKyAgICBHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50
KCk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXI6OnNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKiB2YWx1ZSkKK3sK
KyAgICBpZiAodmFsdWUgPT0gbWFza0xheWVyKCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFw
aGljc0xheWVyOjpzZXRNYXNrTGF5ZXIodmFsdWUpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdl
KFRleHR1cmVNYXBwZXJOb2RlOjpNYXNrTGF5ZXJDaGFuZ2UpOworfQorCisKKy8qIFxyZWltcCAo
R3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNl
dFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqIHZhbHVlKQoreworICAgIGlmICh2YWx1
ZSA9PSByZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6
OnNldFJlcGxpY2F0ZWRCeUxheWVyKHZhbHVlKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShU
ZXh0dXJlTWFwcGVyTm9kZTo6UmVwbGljYUxheWVyQ2hhbmdlKTsKK30KKworLyogXHJlaW1wIChH
cmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0
UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IHBv
c2l0aW9uKCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlv
bih2YWx1ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlBv
c2l0aW9uQ2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9p
ZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQ
b2ludDNEJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gYW5jaG9yUG9pbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEFuY2hvclBvaW50KHZhbHVlKTsKKyAg
ICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6QW5jaG9yUG9pbnRDaGFu
Z2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgdmFsdWUpCit7Cisg
ICAgaWYgKHZhbHVlID09IHNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NM
YXllcjo6c2V0U2l6ZSh2YWx1ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1h
cHBlck5vZGU6OlNpemVDaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkK
KyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRUcmFuc2Zvcm0oY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSB0cmFuc2Zv
cm0oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3Jt
KHZhbHVlKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6VHJh
bnNmb3JtQ2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9p
ZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBjaGlsZHJl
blRyYW5zZm9ybSgpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q2hp
bGRyZW5UcmFuc2Zvcm0odmFsdWUpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVN
YXBwZXJOb2RlOjpDaGlsZHJlblRyYW5zZm9ybUNoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3Jh
cGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldFBy
ZXNlcnZlczNEKGJvb2wgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IHByZXNlcnZlczNEKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRCh2YWx1
ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlByZXNlcnZl
czNEQ2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TWFza3NUb0JvdW5kcyhib29sIHZhbHVlKQor
eworICAgIGlmICh2YWx1ZSA9PSBtYXNrc1RvQm91bmRzKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBHcmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKHZhbHVlKTsKKyAgICBtX25vZGUtPm5v
dGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6TWFza3NUb0JvdW5kc0NoYW5nZSk7Cit9CisK
Ky8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6OnNldERyYXdzQ29udGVudChib29sIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9
PSBkcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbm9kZS0+bm90aWZ5Q2hh
bmdlKFRleHR1cmVNYXBwZXJOb2RlOjpEcmF3c0NvbnRlbnRDaGFuZ2UpOworICAgIEdyYXBoaWNz
TGF5ZXI6OnNldERyYXdzQ29udGVudCh2YWx1ZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NM
YXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldEJhY2tncm91
bmRDb2xvcihjb25zdCBDb2xvciYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IG1fbm9kZS0+
bV9wZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5kQ29sb3IpCisgICAgICAgIHJldHVybjsKKyAgICBt
X25vZGUtPm1fcGVuZGluZ0NvbnRlbnQuYmFja2dyb3VuZENvbG9yID0gdmFsdWU7CisgICAgR3Jh
cGhpY3NMYXllcjo6c2V0QmFja2dyb3VuZENvbG9yKHZhbHVlKTsKKyAgICBtX25vZGUtPm5vdGlm
eUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6QmFja2dyb3VuZENvbG9yQ2hhbmdlKTsKK30KKwor
LyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcjo6Y2xlYXJCYWNrZ3JvdW5kQ29sb3IoKQoreworICAgIGlmICghbV9ub2RlLT5tX3Bl
bmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQuYmFja2dyb3VuZENvbG9yID0gQ29sb3IoKTsK
KyAgICBHcmFwaGljc0xheWVyOjpjbGVhckJhY2tncm91bmRDb2xvcigpOworICAgIG1fbm9kZS0+
bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpCYWNrZ3JvdW5kQ29sb3JDaGFuZ2UpOwor
fQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c09wYXF1ZShib29sIHZhbHVlKQoreworICAgIGlmICh2
YWx1ZSA9PSBjb250ZW50c09wYXF1ZSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9ub2RlLT5u
b3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRzT3BhcXVlQ2hhbmdlKTsKKyAg
ICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09wYXF1ZSh2YWx1ZSk7Cit9CisKKy8qIFxyZWlt
cCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OnNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBi
YWNrZmFjZVZpc2liaWxpdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6
OnNldEJhY2tmYWNlVmlzaWJpbGl0eSh2YWx1ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2Uo
VGV4dHVyZU1hcHBlck5vZGU6OkJhY2tmYWNlVmlzaWJpbGl0eUNoYW5nZSk7Cit9CisKKy8qIFxy
ZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI6OnNldE9wYWNpdHkoZmxvYXQgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IG9wYWNpdHko
KSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkodmFsdWUp
OworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpPcGFjaXR5Q2hh
bmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHZhbHVl
KQoreworICAgIGlmICh2YWx1ZSA9PSBjb250ZW50c1JlY3QoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdCh2YWx1ZSk7CisgICAgbV9ub2RlLT5u
b3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRzUmVjdENoYW5nZSk7Cit9CisK
Ky8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCit7CisgICAgbV9ub2Rl
LT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRDaGFuZ2UpOworICAgIG1f
bm9kZS0+bV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSA9IGltYWdlID8gVGV4dHVyZU1hcHBl
ck5vZGU6OkRpcmVjdEltYWdlQ29udGVudFR5cGUgOiBUZXh0dXJlTWFwcGVyTm9kZTo6SFRNTENv
bnRlbnRUeXBlOworICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5pbWFnZSA9IGltYWdlOwor
ICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZShpbWFnZSk7Cit9CisKKy8qIFxy
ZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI6OnNldENvbnRlbnRzQmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAg
ICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudENoYW5nZSk7
CisgICAgbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlID0gVGV4dHVyZU1hcHBl
ck5vZGU6OkNvbG9yQ29udGVudFR5cGU7CisgICAgbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50LmJh
Y2tncm91bmRDb2xvciA9IGNvbG9yOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzQmFj
a2dyb3VuZENvbG9yKGNvbG9yKTsKK30KKworCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyOjpzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciogbWVkaWEpCit7CisgICAgR3Jh
cGhpY3NMYXllcjo6c2V0Q29udGVudHNUb01lZGlhKG1lZGlhKTsKKyAgICBtX25vZGUtPm5vdGlm
eUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudENoYW5nZSk7CisgICAgbV9ub2RlLT5t
X3BlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlID0gbWVkaWEgPyBUZXh0dXJlTWFwcGVyTm9kZTo6
TWVkaWFDb250ZW50VHlwZSA6IFRleHR1cmVNYXBwZXJOb2RlOjpIVE1MQ29udGVudFR5cGU7Cisg
ICAgaWYgKG1lZGlhKQorICAgICAgICBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQubWVkaWEgPSBz
dGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyVmlkZW9MYXllcio+KG1lZGlhKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5tZWRpYSA9IDA7Cit9CisKKy8qIFxyZWlt
cCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OnNldENvbnRlbnRzT3JpZW50YXRpb24oQ29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9u
IG9yaWVudGF0aW9uKQoreworICAgIGlmIChjb250ZW50c09yaWVudGF0aW9uKCkgPT0gb3JpZW50
YXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJl
TWFwcGVyTm9kZTo6Q29udGVudHNPcmllbnRhdGlvbkNoYW5nZSk7CisgICAgR3JhcGhpY3NMYXll
cjo6c2V0Q29udGVudHNPcmllbnRhdGlvbihvcmllbnRhdGlvbik7Cit9CisKKy8qIFxyZWltcCAo
R3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnN5
bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCit7CisgICAgbV9ub2RlLT5zeW5j
Q29tcG9zaXRpbmdTdGF0ZShmYWxzZSk7CisgICAgbV9ub2RlLT5wZXJmb3JtUG9zdFN5bmNPcGVy
YXRpb25zKCk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlKCkKK3sKKyAgICBH
cmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOworICAgIG1fbm9kZS0+c3luY0Nv
bXBvc2l0aW5nU3RhdGUodHJ1ZSk7CisgICAgbV9ub2RlLT5wZXJmb3JtUG9zdFN5bmNPcGVyYXRp
b25zKCk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorICovCitOYXRpdmVMYXll
ciBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6bmF0aXZlTGF5ZXIoKSBjb25zdAoreworICAg
IHJldHVybiBtX25vZGUuZ2V0KCk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQor
Ki8KK1BsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUxh
eWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ub2RlLmdldCgpOworfQorCitQYXNzT3duUHRy
PEdyYXBoaWNzTGF5ZXI+IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShHcmFwaGljc0xheWVyQ2xpZW50
KiBjbGllbnQpCit7CisgICAgcmV0dXJuIG5ldyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihj
bGllbnQpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4xYTE1OGYzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaApAQCAt
MCwwICsxLDk2IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyX2gKKyNkZWZpbmUgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXJfaAorCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDbGllbnQuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorCisj
aWYgRU5BQkxFKDNEX0NBTlZBUykKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2Vu
ZGlmCisKKyNkZWZpbmUgRU5BQkxFX1RFWE1BUF9BTklNQVRJT04gMAorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFRleHR1cmVNYXBwZXJOb2RlOworY2xhc3MgQml0bWFwVGV4dHVyZTsK
K2NsYXNzIFRleHR1cmVNYXBwZXI7CisKK2NsYXNzIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
IDogcHVibGljIEdyYXBoaWNzTGF5ZXIgeworICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVy
Tm9kZTsKKworcHVibGljOgorICAgIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKEdyYXBoaWNz
TGF5ZXJDbGllbnQqKTsKKyAgICB2aXJ0dWFsIH5HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcigp
OworCisgICAgLy8gcmVpbXBzIGZyb20gR3JhcGhpY3NMYXllci5oCisgICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzRGlzcGxheSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJl
Y3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChHcmFwaGlj
c0xheWVyKiBsYXllcik7CisgICAgdmlydHVhbCBib29sIHNldENoaWxkcmVuKGNvbnN0IFZlY3Rv
cjxHcmFwaGljc0xheWVyKj4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoR3JhcGhpY3NM
YXllciopOworICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllcios
IGludCBpbmRleCk7CisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkQWJvdmUoR3JhcGhpY3NMYXll
ciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpOworICAgIHZpcnR1YWwgdm9pZCBhZGRD
aGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKTsK
KyAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBH
cmFwaGljc0xheWVyKiBuZXdDaGlsZCk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyb21QYXJl
bnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVy
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcCk7Cisg
ICAgdmlydHVhbCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgcCk7Cisg
ICAgdmlydHVhbCB2b2lkIHNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29sIGIpOworICAg
IHZpcnR1YWwgdm9pZCBzZXRNYXNrc1RvQm91bmRzKGJvb2wgYik7CisgICAgdmlydHVhbCB2b2lk
IHNldERyYXdzQ29udGVudChib29sIGIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5k
Q29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJCYWNrZ3JvdW5kQ29s
b3IoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNPcGFxdWUoYm9vbCBiKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wgYik7CisgICAgdmlydHVhbCB2
b2lkIHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSk7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRl
bnRzUmVjdChjb25zdCBJbnRSZWN0JiByKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmVwbGljYXRl
ZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciopOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1Rv
SW1hZ2UoSW1hZ2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb01lZGlhKFBsYXRm
b3JtTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNCYWNrZ3JvdW5kQ29sb3Io
Y29uc3QgQ29sb3ImKTsKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorICAgIHZpcnR1YWwgdm9pZCBz
ZXRDb250ZW50c1RvR3JhcGhpY3NDb250ZXh0M0QoY29uc3QgR3JhcGhpY3NDb250ZXh0M0QqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0M0ROZWVkc0Rpc3BsYXkoKTsKKyNl
bmRpZgorICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c09yaWVudGF0aW9uKENvbXBvc2l0aW5n
Q29vcmRpbmF0ZXNPcmllbnRhdGlvbiBvcmllbnRhdGlvbik7CisgICAgdmlydHVhbCB2b2lkIHN5
bmNDb21wb3NpdGluZ1N0YXRlKCk7CisgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0
YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXROYW1lKGNvbnN0IFN0
cmluZyYgbmFtZSk7CisgICAgdmlydHVhbCBOYXRpdmVMYXllciBuYXRpdmVMYXllcigpIGNvbnN0
OworICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OworCisg
ICAgdmlydHVhbCBib29sIGFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNv
bnN0IEludFNpemUmIC8qYm94U2l6ZSovLCBjb25zdCBBbmltYXRpb24qLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgLyprZXlmcmFtZXNOYW1lKi8sIGRvdWJs
ZSAvKnRpbWVPZmZzZXQqLykgeyByZXR1cm4gZmFsc2U7IH0KKworcHJpdmF0ZToKKyAgICBPd25Q
dHI8VGV4dHVyZU1hcHBlck5vZGU+IG1fbm9kZTsKK307CisKK30KKyNlbmRpZiAvLyBHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MDNjMWM2ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXIuaApAQCAtMCwwICsxLDEyMCBAQAorLyoKKyBDb3B5cmlnaHQgKEMp
IDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgVGV4dHVyZU1hcHBlcl9oCisjZGVmaW5lIFRl
eHR1cmVNYXBwZXJfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIChk
ZWZpbmVkKFFUX09QRU5HTF9MSUIpKQorICAgICNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKSAm
JiAhZGVmaW5lZChURVhNQVBfT1BFTkdMX0VTXzIpCisgICAgICAgICNkZWZpbmUgVEVYTUFQX09Q
RU5HTF9FU18yCisgICAgI2VuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVk
ZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKworLyoKKyAgICBUZXh0dXJlTWFwcGVyIGlzIGEg
bWVjaGFuaXNtIHRoYXQgZW5hYmxlcyBoYXJkd2FyZSBhY2NlbGVyYXRpb24gb2YgQ1NTIGFuaW1h
dGlvbnMgKGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nKSB3aXRob3V0CisgICAgYSBuZWVkIGZvciBh
IHBsYXRmb3JtIHNwZWNpZmljIHNjZW5lLWdyYXBoIGxpYnJhcnkgbGlrZSBDb3JlQW5pbWF0aW9u
cyBvciBRR3JhcGhpY3NWaWV3LgorKi8KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBU
ZXh0dXJlTWFwcGVyOworCisvLyBBIDJEIHRleHR1cmUgdGhhdCBjYW4gYmUgdGhlIHRhcmdldCBv
ZiBzb2Z0d2FyZSBvciBHTCByZW5kZXJpbmcuCitjbGFzcyBCaXRtYXBUZXh0dXJlICA6IHB1Ymxp
YyBSZWZDb3VudGVkPEJpdG1hcFRleHR1cmU+IHsKK3B1YmxpYzoKKyAgICBCaXRtYXBUZXh0dXJl
KCkgOiBtX2xvY2tDb3VudCgwKSB7fQorICAgIHZpcnR1YWwgfkJpdG1hcFRleHR1cmUoKSB7IH0K
KworICAgIHZpcnR1YWwgYm9vbCBhbGxvd09mZmxpbmVUZXh0dXJlVXBsb2FkKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpID0gMDsKKyAgICB2aXJ0
dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoY29uc3QgSW50U2l6ZSYgc2l6ZSwg
Ym9vbCBvcGFxdWUgPSBmYWxzZSkKKyAgICB7CisgICAgICAgIG1faXNPcGFxdWUgPSBvcGFxdWU7
CisgICAgICAgIG1fY29udGVudFNpemUgPSBzaXplOworICAgIH0KKworICAgIHZpcnR1YWwgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCkgPSAwOworICAgIHZpcnR1YWwgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnRNZWRpYSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gYmVnaW5QYWludChJbnRSZWN0KDAsIDAsIHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVp
Z2h0KCkpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFn
ZSopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2F2ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKSB7
IHJldHVybiBmYWxzZTsgfQorCisgICAgaW5saW5lIHZvaWQgbG9jaygpIHsgKyttX2xvY2tDb3Vu
dDsgfQorICAgIGlubGluZSB2b2lkIHVubG9jaygpIHsgLS1tX2xvY2tDb3VudDsgfQorICAgIGlu
bGluZSBib29sIGlzTG9ja2VkKCkgeyByZXR1cm4gbV9sb2NrQ291bnQ7IH0KKyAgICBpbmxpbmUg
SW50U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudFNpemU7IH0KKyAg
ICBpbmxpbmUgdm9pZCBzZXRPZmZzZXQoY29uc3QgSW50UG9pbnQmIG8pIHsgbV9vZmZzZXQgPSBv
OyB9CisgICAgaW5saW5lIEludFBvaW50IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0
OyB9Citwcml2YXRlOgorICAgIGludCBtX2xvY2tDb3VudDsKKyAgICBJbnRTaXplIG1fY29udGVu
dFNpemU7CisgICAgYm9vbCBtX2lzT3BhcXVlOworICAgIEludFBvaW50IG1fb2Zmc2V0OworfTsK
KworLy8gQSAiY29udGV4dCIgY2xhc3MgdXNlZCB0byBlbmNhcHN1bGF0ZSBhY2NlbGVyYXRlZCB0
ZXh0dXJlIG1hcHBpbmcgZnVuY3Rpb25zOiBpLmUuIGRyYXdpbmcgYSB0ZXh0dXJlCisvLyBvbnRv
IHRoZSBzY3JlZW4gb3IgaW50byBhbm90aGVyIHRleHR1cmUgd2l0aCBhIHNwZWNpZmllZCB0cmFu
c2Zvcm0sIG9wYWNpdHkgYW5kIG1hc2suCitjbGFzcyBUZXh0dXJlTWFwcGVyIDogcHVibGljIFJl
ZkNvdW50ZWQ8VGV4dHVyZU1hcHBlcj4geworICAgIGZyaWVuZCBjbGFzcyBCaXRtYXBUZXh0dXJl
OworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlcj4gY3JlYXRl
KEdyYXBoaWNzQ29udGV4dCopOworICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXIoKSB7IH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJl
LCBjb25zdCBJbnRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRy
aXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBmbG9hdCBvcGFjaXR5ID0gMS4wZiwgY29uc3Qg
Qml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUgPSAwKSA9IDA7CisKKyAgICAvLyBtYWtlcyBhIHN1
cmZhY2UgdGhlIHRhcmdldCBmb3IgdGhlIGZvbGxvd2luZyBkcmF3VGV4dHVyZSBjYWxscy4KKyAg
ICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGFyZ2V0KGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1
cmUsIGNvbnN0IEludFNpemUmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBm
bG9hdCBvcGFjaXR5LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCkKKyAgICB7CisgICAgICAg
IGRyYXdUZXh0dXJlKHRleHR1cmUsIEludFJlY3QoMCwgMCwgdGV4dHVyZS5jb250ZW50U2l6ZSgp
LndpZHRoKCksIHRleHR1cmUuY29udGVudFNpemUoKS5oZWlnaHQoKSksIG1hdHJpeCwgb3BhY2l0
eSwgMCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHNldENsaXAoY29uc3QgSW50UmVjdCYp
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9vdCgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpID0g
MDsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5cGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGNsZWFudXAoKSB7fQorCisgICAgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRl
eHQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZ2M7CisgICAgfQorCitwcm90ZWN0
ZWQ6CisgICAgVGV4dHVyZU1hcHBlcihHcmFwaGljc0NvbnRleHQqIGdjKSA6IG1fZ2MoZ2MpIHt9
CisgICAgR3JhcGhpY3NDb250ZXh0KiBtX2djOworfTsKKworfTsKKworI2VuZGlmCisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMjNlOWZjOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKQEAgLTAsMCArMSw3MCBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcl9o
CisjZGVmaW5lIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyX2gKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgSW50
U2l6ZTsKK2NsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OworCisKKy8vIEdsdWUgbGF5ZXIgdG8g
Y29ubmVjdCB0aGUgdGV4bWFwIGxheWVyIHRvIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBjb250YWlu
ZXIuCitjbGFzcyBUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1
YWwgflRleHR1cmVNYXBwZXJMYXllckNsaWVudCgpIHt9CisgICAgdmlydHVhbCB2b2lkIHNldE5l
ZWRzRGlzcGxheSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0
KGNvbnN0IEludFJlY3QmIHJlY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZUNoYW5n
ZWQoY29uc3QgSW50U2l6ZSYpID0gMDsKK307CisKK2NsYXNzIFRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyIHsKK3B1YmxpYzoKKyAgICBlbnVtIFR5cGUgeworICAgICAgICBDb250ZW50TGF5ZXIs
CisgICAgICAgIFZpZGVvTGF5ZXIKKyAgICB9OworCisgICAgdmlydHVhbCBUeXBlIGxheWVyVHlw
ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcigp
IHt9Cit9OworCitjbGFzcyBUZXh0dXJlTWFwcGVyQ29udGVudExheWVyIDogcHVibGljIFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGxh
dGZvcm1MYXllckNsaWVudChUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQqKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFNpemUmLCBjb25zdCBJ
bnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0JiBleHBvc2VkUmVjdCwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSkge30KKyAgICB2aXJ0
dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFRl
eHR1cmVNYXBwZXIoKSB7fQorICAgIHZpcnR1YWwgVHlwZSBsYXllclR5cGUoKSBjb25zdCB7IHJl
dHVybiBDb250ZW50TGF5ZXI7IH0KK307CisKKyNpZiBFTkFCTEUoVklERU8pCitjbGFzcyBUZXh0
dXJlTWFwcGVyVmlkZW9MYXllciA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCopID0gMDsK
KyAgICB2aXJ0dWFsIFR5cGUgbGF5ZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gVmlkZW9MYXllcjsg
fQorfTsKKyNlbmRpZgorCit9CisKKyNlbmRpZiAvLyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
cl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70147</attachid>
            <date>2010-10-07 14:00:51 -0700</date>
            <delta_ts>2010-10-07 21:31:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch-47070-7.diff</filename>
            <type>text/plain</type>
            <size>71250</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzJiZjllNy4uOGM0YzcyYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAxMC0xMC0wNSAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5p
dGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBUZXh0dXJlIE1hcHBlciBpcyBhbiBpbXBsZW1l
bnRhdGlvbiBvZiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyB0aGF0IGRvZXNuJ3QgcmVxdWlyZSBh
CisgICAgICAgIHBsYXRmb3JtIHNwZWNpZmljIHNjZW5lZ3JhcGggbGlicmFyeSBsaWtlIENBIG9y
IFFHcmFwaGljc1ZpZXcuIFRoZSBpZGVhIGlzIHRoYXQgd2l0aAorICAgICAgICB0aW1lIHRoaXMg
d291bGQgcmVwbGFjZSBHcmFwaGljc0xheWVyUXQsIGFuZCBjb3VsZCBzZXJ2ZSBhcyBhbiBpbXBs
ZW1lbnRhdGlvbiBmb3Igb3RoZXIKKyAgICAgICAgcGxhdGZvcm1zIHRoYXQgZG9uJ3QgaGF2ZSBh
IHNjZW5lZ3JhcGggbGlicmFyeS4gVGhlIGZpcnN0IHN0YWdlIG9mIHRoaXMgaXMgdG8gYWRkIGFs
bCB0aGUgY29kZSB0byB0cnVuaywKKyAgICAgICAgYW5kIGVuYWJsZSBpdCBpbiBRdCB3aXRoIGFu
IG9wdC1pbiBidWlsZCBmbGFnIHNvIHRoYXQgaXQgY2FuIGJlIGVhc2lseSB0ZXN0ZWQuIE9uY2Ug
aXQgcmVhY2hlcworICAgICAgICBhbiBhZGVxdWF0ZSBsZXZlbCBvZiBzdGFiaWxpdHksIHdlIGNh
biBlbmFibGUgaXQgYnkgZGVmYXVsdCBhbmQgZXZlbnR1YWxseSBoYXZlIGl0IHJlcGxhY2UgR3Jh
cGhpY3NMYXllclF0LgorCisgICAgICAgIFRoaXMgY2hhbmdlIGluY2x1ZGVzIG9ubHkgdGhlIGNv
bW1vbiBuZXcgZmlsZXMgYW5kIHRoZSBRdCBiYWNrZW5kOyBTdGlsbCB0byBjb21lOiB0aGUgR0wg
YmFja2VuZCBhbmQgaW50ZWdyYXRpb24gbGF5ZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmg6IEFkZGVkLgorCiAyMDEwLTEwLTAzICBObydhbSBSb3Nl
bnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L1RleHR1cmVNYXBwZXJRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1
cmVNYXBwZXJRdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIzNmRh
ZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVy
ZU1hcHBlclF0LmNwcApAQCAtMCwwICsxLDIyNSBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTAg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4
dHVyZU1hcHBlci5oIgorCisjaW5jbHVkZSA8UXRDb3JlL3FkZWJ1Zy5oPgorI2luY2x1ZGUgPFF0
R3VpL3FwYWludGVuZ2luZS5oPgorI2luY2x1ZGUgPFF0R3VpL3FwaXhtYXAuaD4KKworI2lmZGVm
IFFUX09QRU5HTF9MSUIKKyMgaW5jbHVkZSAib3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oIgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQml0bWFwVGV4dHVyZVF0IDogcHVi
bGljIEJpdG1hcFRleHR1cmUgeworICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVyUXQ7Citw
dWJsaWM6CisgICAgQml0bWFwVGV4dHVyZVF0KCkge30KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJv
eSgpOworICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZSht
X3BpeG1hcC53aWR0aCgpLCBtX3BpeG1hcC5oZWlnaHQoKSk7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
cmVzZXQoY29uc3QgSW50U2l6ZSYsIGJvb2wgb3BhcXVlKTsKKyAgICB2aXJ0dWFsIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7Cisg
ICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCk7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRz
VG9JbWFnZShJbWFnZSopOworICAgIHZpcnR1YWwgYm9vbCBzYXZlKGNvbnN0IFN0cmluZyYgcGF0
aCk7CisgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAhbV9waXhtYXAu
aXNOdWxsKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dPZmZsaW5lVGV4dHVyZVVwbG9hZCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICBJbnRSZWN0IHNvdXJjZVJlY3QoKSBjb25zdCB7
IHJldHVybiBJbnRSZWN0KDAsIDAsIGNvbnRlbnRTaXplKCkud2lkdGgoKSwgY29udGVudFNpemUo
KS5oZWlnaHQoKSk7IH0KK3ByaXZhdGU6CisgICAgUVBhaW50ZXIgbV9wYWludGVyOworICAgIFFQ
aXhtYXAgbV9waXhtYXA7Cit9OworCitjbGFzcyBUZXh0dXJlTWFwcGVyUXQgOiBwdWJsaWMgVGV4
dHVyZU1hcHBlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0
IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1h
cFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0
bWFwVGV4dHVyZSogc3VyZmFjZSk7CisgICAgdmlydHVhbCB2b2lkIHNldENsaXAoY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICBUZXh0dXJlTWFwcGVyUXQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0KTsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5cGUoKSBjb25zdCB7IHJldHVybiAiVGV4
dHVyZU1hcHBlclF0IjsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBj
cmVhdGVUZXh0dXJlKCk7CisKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKFFQYWludGVyKiBw
YWludGVyKQorICAgIHsKKyAgICAgICAgcGFpbnRlci0+c2V0UmVuZGVySGludHMoUVBhaW50ZXI6
OkFudGlhbGlhc2luZyB8IFFQYWludGVyOjpTbW9vdGhQaXhtYXBUcmFuc2Zvcm0sIGZhbHNlKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgUVBhaW50ZXIqIG1fcGFpbnRlcjsKKyAgICBSZWZQdHI8
Qml0bWFwVGV4dHVyZVF0PiBtX2N1cnJlbnRTdXJmYWNlOworfTsKKwordm9pZCBCaXRtYXBUZXh0
dXJlUXQ6OmRlc3Ryb3koKQoreworICAgIGlmIChtX3BpeG1hcC5wYWludGluZ0FjdGl2ZSgpKQor
ICAgICAgICBxRmF0YWwoIkRlc3Ryb3lpbmcgYW4gYWN0aXZlIHBpeG1hcCIpOworICAgIG1fcGl4
bWFwID0gUVBpeG1hcCgpOworfQorCit2b2lkIEJpdG1hcFRleHR1cmVRdDo6cmVzZXQoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgYm9vbCBpc09wYXF1ZSkKK3sKKyAgICBCaXRtYXBUZXh0dXJlOjpyZXNl
dChzaXplLCBpc09wYXF1ZSk7CisKKyAgICBpZiAoc2l6ZS53aWR0aCgpID4gbV9waXhtYXAuc2l6
ZSgpLndpZHRoKCkgfHwgc2l6ZS5oZWlnaHQoKSA+IG1fcGl4bWFwLnNpemUoKS5oZWlnaHQoKSB8
fCBtX3BpeG1hcC5pc051bGwoKSkKKyAgICAgICAgbV9waXhtYXAgPSBRUGl4bWFwKHNpemUud2lk
dGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgaWYgKCFpc09wYXF1ZSkKKyAgICAgICAgbV9waXht
YXAuZmlsbChRdDo6dHJhbnNwYXJlbnQpOworfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCog
Qml0bWFwVGV4dHVyZVF0OjpiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sK
KyAgICBtX3BhaW50ZXIuYmVnaW4oJm1fcGl4bWFwKTsKKyAgICBUZXh0dXJlTWFwcGVyUXQ6Omlu
aXRpYWxpemUoJm1fcGFpbnRlcik7CisgICAgbV9wYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShR
UGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX0NsZWFyKTsKKyAgICBtX3BhaW50ZXIuZmlsbFJlY3Qo
UVJlY3QoZGlydHlSZWN0KSwgUXQ6OnRyYW5zcGFyZW50KTsKKyAgICBtX3BhaW50ZXIuc2V0Q29t
cG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlT3Zlcik7CisgICAg
cmV0dXJuICZtX3BhaW50ZXI7Cit9CisKK3ZvaWQgQml0bWFwVGV4dHVyZVF0OjplbmRQYWludCgp
Cit7CisgICAgbV9wYWludGVyLmVuZCgpOworfQorCitib29sIEJpdG1hcFRleHR1cmVRdDo6c2F2
ZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgcmV0dXJuIG1fcGl4bWFwLnNhdmUocGF0aCwg
IlBORyIpOworfQorCit2b2lkIEJpdG1hcFRleHR1cmVRdDo6c2V0Q29udGVudHNUb0ltYWdlKElt
YWdlKiBpbWFnZSkKK3sKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm47CisgICAgY29u
c3QgUVBpeG1hcCogcGl4bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7
CisgICAgaWYgKCFwaXhtYXApCisgICAgICAgIHJldHVybjsKKyAgICBCaXRtYXBUZXh0dXJlOjpy
ZXNldChwaXhtYXAtPnNpemUoKSwgIXBpeG1hcC0+aGFzQWxwaGFDaGFubmVsKCkpOworICAgIG1f
cGl4bWFwID0gKnBpeG1hcDsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyUXQ6OnNldENsaXAoY29u
c3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBtX2N1cnJlbnRT
dXJmYWNlID8gJm1fY3VycmVudFN1cmZhY2UtPm1fcGFpbnRlciA6IG1fcGFpbnRlcjsKKyAgICAg
cGFpbnRlci0+c2V0Q2xpcFJlY3QocmVjdCk7Cit9CisKK1RleHR1cmVNYXBwZXJRdDo6VGV4dHVy
ZU1hcHBlclF0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKKyAgICA6IFRleHR1cmVNYXBwZXIo
Y29udGV4dCkKKyAgICAsIG1fcGFpbnRlcihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSkKKyAg
ICAsIG1fY3VycmVudFN1cmZhY2UoMCkKK3sKKyAgICBUZXh0dXJlTWFwcGVyUXQ6OmluaXRpYWxp
emUobV9wYWludGVyKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyUXQ6OmJpbmRTdXJmYWNlKEJp
dG1hcFRleHR1cmUqIHN1cmZhY2UpCit7CisgICAgaWYgKG1fY3VycmVudFN1cmZhY2UgPT0gc3Vy
ZmFjZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2N1cnJlbnRTdXJmYWNlKQorICAgICAg
ICBtX2N1cnJlbnRTdXJmYWNlLT5tX3BhaW50ZXIuZW5kKCk7CisgICAgaWYgKCFzdXJmYWNlKSB7
CisgICAgICAgIG1fY3VycmVudFN1cmZhY2UgPSAwOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIEJpdG1hcFRleHR1cmVRdCogc3VyZmFjZVF0ID0gc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVy
ZVF0Kj4oc3VyZmFjZSk7CisgICAgaWYgKCFzdXJmYWNlUXQtPm1fcGFpbnRlci5pc0FjdGl2ZSgp
KQorICAgICAgICBzdXJmYWNlUXQtPm1fcGFpbnRlci5iZWdpbigmc3VyZmFjZVF0LT5tX3BpeG1h
cCk7CisgICAgbV9jdXJyZW50U3VyZmFjZSA9IHN1cmZhY2VRdDsKK30KKworCit2b2lkIFRleHR1
cmVNYXBwZXJRdDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29u
c3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJp
eCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCit7Cisg
ICAgY29uc3QgQml0bWFwVGV4dHVyZVF0JiB0ZXh0dXJlUXQgPSBzdGF0aWNfY2FzdDxjb25zdCBC
aXRtYXBUZXh0dXJlUXQmPih0ZXh0dXJlKTsKKyAgICBRUGFpbnRlciogcGFpbnRlciA9IG1fcGFp
bnRlcjsKKyAgICBRUGl4bWFwIHBpeG1hcCA9IHRleHR1cmVRdC5tX3BpeG1hcDsKKyAgICBpZiAo
bV9jdXJyZW50U3VyZmFjZSkKKyAgICAgICAgcGFpbnRlciA9ICZtX2N1cnJlbnRTdXJmYWNlLT5t
X3BhaW50ZXI7CisKKyAgICBpZiAobWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQo
KSkgeworICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJlUXQqIG1hc2sgPSBzdGF0aWNfY2FzdDxj
b25zdCBCaXRtYXBUZXh0dXJlUXQqPihtYXNrVGV4dHVyZSk7CisgICAgICAgIFFQaXhtYXAgaW50
ZXJtZWRpYXRlUGl4bWFwKHBpeG1hcC5zaXplKCkpOworICAgICAgICBpbnRlcm1lZGlhdGVQaXht
YXAuZmlsbChRdDo6dHJhbnNwYXJlbnQpOworICAgICAgICBRUGFpbnRlciBtYXNrUGFpbnRlcigm
aW50ZXJtZWRpYXRlUGl4bWFwKTsKKyAgICAgICAgbWFza1BhaW50ZXIuc2V0Q29tcG9zaXRpb25N
b2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKKyAgICAgICAgbWFza1BhaW50
ZXIuZHJhd1BpeG1hcCgwLCAwLCBwaXhtYXApOworICAgICAgICBtYXNrUGFpbnRlci5zZXRDb21w
b3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9EZXN0aW5hdGlvbkluKTsKKyAg
ICAgICAgbWFza1BhaW50ZXIuZHJhd1BpeG1hcChRUmVjdCgwLCAwLCBwaXhtYXAud2lkdGgoKSwg
cGl4bWFwLmhlaWdodCgpKSwgbWFzay0+bV9waXhtYXAsIG1hc2stPnNvdXJjZVJlY3QoKSk7Cisg
ICAgICAgIG1hc2tQYWludGVyLmVuZCgpOworICAgICAgICBwaXhtYXAgPSBpbnRlcm1lZGlhdGVQ
aXhtYXA7CisgICAgfQorCisgICAgY29uc3QgcXJlYWwgcHJldk9wYWNpdHkgPSBwYWludGVyLT5v
cGFjaXR5KCk7CisgICAgY29uc3QgUVRyYW5zZm9ybSBwcmV2VHJhbnNmb3JtID0gcGFpbnRlci0+
dHJhbnNmb3JtKCk7CisgICAgcGFpbnRlci0+c2V0T3BhY2l0eShvcGFjaXR5KTsKKyAgICBwYWlu
dGVyLT5zZXRUcmFuc2Zvcm0obWF0cml4LCB0cnVlKTsKKyAgICBwYWludGVyLT5kcmF3UGl4bWFw
KHRhcmdldFJlY3QsIHBpeG1hcCwgdGV4dHVyZVF0LnNvdXJjZVJlY3QoKSk7CisgICAgcGFpbnRl
ci0+c2V0VHJhbnNmb3JtKHByZXZUcmFuc2Zvcm0pOworICAgIHBhaW50ZXItPnNldE9wYWNpdHko
cHJldk9wYWNpdHkpOworfQorCitQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXI+IFRleHR1cmVNYXBw
ZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisjaWZkZWYgUVRfT1BFTkdM
X0xJQgorICAgIGlmIChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+cGFpbnRFbmdpbmUoKS0+
dHlwZSgpID09IFFQYWludEVuZ2luZTo6T3BlbkdMMikKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBUZXh0dXJlTWFwcGVyR0woY29udGV4dCkpOworI2VuZGlmCisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBUZXh0dXJlTWFwcGVyUXQoY29udGV4dCkpOworfQorCisKK1Bhc3NSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlclF0OjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEJpdG1hcFRleHR1cmVRdCgpKTsKK30KKworI2lmZGVmIFFUX09QRU5H
TF9MSUIKK2NsYXNzIFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyUXQgOiBwdWJsaWMgUkdCQTMy
UHJlbXVsdGltcGxpZWRCdWZmZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgcmVjdCwgYm9vbCBvcGFxdWUp
CisgICAgeworICAgICAgICAvLyBtX2ltYWdlIGlzIG9ubHkgdXNpbmcgZHVyaW5nIHBhaW50LCBp
dCdzIHNhZmUgdG8gb3ZlcnJpZGUgaXQuCisgICAgICAgIG1faW1hZ2UgPSBRSW1hZ2UocmVjdC5z
aXplKCkud2lkdGgoKSwgcmVjdC5zaXplKCkuaGVpZ2h0KCksIFFJbWFnZTo6Rm9ybWF0X0FSR0Iz
Ml9QcmVtdWx0aXBsaWVkKTsKKyAgICAgICAgaWYgKCFvcGFxdWUpCisgICAgICAgICAgICBtX2lt
YWdlLmZpbGwoMCk7CisgICAgICAgIG1fcGFpbnRlci5iZWdpbigmbV9pbWFnZSk7CisgICAgICAg
IFRleHR1cmVNYXBwZXJRdDo6aW5pdGlhbGl6ZSgmbV9wYWludGVyKTsKKyAgICAgICAgbV9wYWlu
dGVyLnRyYW5zbGF0ZSgtcmVjdC54KCksIC1yZWN0LnkoKSk7CisgICAgICAgIHJldHVybiAmbV9w
YWludGVyOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludCgpIHsgbV9wYWludGVy
LmVuZCgpOyB9CisgICAgdmlydHVhbCBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9pbWFnZS5jb25zdEJpdHMoKTsgfQorCitwcml2YXRlOgorICAgIFFQYWludGVyIG1fcGFpbnRl
cjsKKyAgICBRSW1hZ2UgbV9pbWFnZTsKK307CisKK1Bhc3NSZWZQdHI8UkdCQTMyUHJlbXVsdGlt
cGxpZWRCdWZmZXI+IFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyOjpjcmVhdGUoKQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgUkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXJRdCgpKTsKK30K
KworI2VuZGlmCit9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNmRiZTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAK
QEAgLTAsMCArMSwxNDQ0IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIKKworI2luY2x1ZGUg
IkN1cnJlbnRUaW1lLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSGFzaE1hcC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisj
aW5jbHVkZSAiUmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKKyNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisj
aW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIlVuaXRCZXppZXIuaCIKKworI2RlZmluZSBERUJV
R19URVhNQVBfRlBTIDAKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgVGV4bWFwUGFp
bnRPcHRpb25zIHsKKyAgICBCaXRtYXBUZXh0dXJlKiBzdXJmYWNlOworICAgIFRleHR1cmVNYXBw
ZXIqIHRleHR1cmVNYXBwZXI7CisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0OworICAgIFRl
eHR1cmVNYXBwZXJOb2RlKiByb290TGF5ZXI7CisgICAgZmxvYXQgb3BhY2l0eTsKKyAgICBJbnRS
ZWN0IHNjaXNzb3JSZWN0OworICAgIEludFJlY3QgdmlzaWJsZVJlY3Q7CisgICAgYm9vbCBpc1N1
cmZhY2U7Cit9OworY2xhc3MgVGV4dHVyZU1hcHBlckNhY2hlIHsKK3B1YmxpYzoKKyAgICB2b2lk
IG1hcmsoQml0bWFwVGV4dHVyZSogdGV4dHVyZSk7CisKKyAgICBjbGFzcyBFbnRyeSB7CisgICAg
cHVibGljOgorICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZTsKKyAgICAgICAg
RW50cnkoKSA6IHByZXZpb3VzQ29zdCgwKSB7IH0KKyAgICAgICAgaW5saW5lIGludCBjYWxjdWxh
dGVDb3N0KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCF0ZXh0dXJlIHx8ICF0
ZXh0dXJlLT5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICBjb25zdCBJbnRTaXplIHRleHR1cmVTaXplID0gdGV4dHVyZS0+c2l6ZSgpOworICAgICAgICAg
ICAgLy8gYW4gaW1hZ2UncyBjb3N0IGluIGJ5dGVzIGlzIHdpZHRoICogaGVpZ2h0ICogYnl0ZXMg
cGVyIHBpeGVsICg0KS4KKyAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlU2l6ZS53aWR0aCgpICog
dGV4dHVyZVNpemUuaGVpZ2h0KCkgKiA0OworICAgICAgICB9CisgICAgICAgIEVudHJ5KEJpdG1h
cFRleHR1cmUqIG5ld1RleHR1cmUpCisgICAgICAgICAgICA6IHRleHR1cmUobmV3VGV4dHVyZSkK
KyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFbnRy
eSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIHRleHR1cmUgPT0gb3RoZXIudGV4dHVyZTsgfQorICAg
ICAgICBpbnQgcHJldmlvdXNDb3N0OworICAgIH07CisKKyAgICBUZXh0dXJlTWFwcGVyQ2FjaGUo
KSA6IG1fdG90YWxDb3N0KDApIHt9CisKKyAgICB2b2lkIHB1cmdlKCk7CisgICAgVmVjdG9yPEVu
dHJ5PiBtX2RhdGE7CisgICAgaW50IG1fdG90YWxDb3N0OworI2lmbmRlZiBURVhNQVBfVEVYVFVS
RV9DQUNIRV9LQlMKKyNkZWZpbmUgVEVYTUFQX1RFWFRVUkVfQ0FDSEVfS0JTIDI0ICogMTAyNAor
I2VuZGlmCisgICAgc3RhdGljIGNvbnN0IGludCBNYXhDb3N0ID0gVEVYTUFQX1RFWFRVUkVfQ0FD
SEVfS0JTICogMTAyNDsKKyAgICBzdGF0aWMgY29uc3QgaW50IFB1cmdlQW1vdW50ID0gTWF4Q29z
dCAvIDQ7Cit9OworCisKK3ZvaWQgVGV4dHVyZU1hcHBlckNhY2hlOjpwdXJnZSgpCit7CisgICAg
Ly8gSWYgdGhpcyBpcyBpbiB0aGUgR0wgaW1wbGVtZW50YXRpb24sIHdlIG5lZWQgYW4gYWN0aXZl
IEdMIGNvbnRleHQsIGJlY2F1c2Ugd2UgbWlnaHQgY2FsbCBnbERlbGV0ZVRleHR1cmVzLgorICAg
IGNvbnN0IGludCBzaXplID0gbV9kYXRhLnNpemUoKTsKKworICAgIGlmIChtX3RvdGFsQ29zdCA8
PSBUZXh0dXJlTWFwcGVyQ2FjaGU6Ok1heENvc3QpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IEVuc3VyZSB0aGF0IHdlIGhhdmUgdGhlIHJpZ2h0IGNvdW50LiBJdCBtaWdodCBiZSBpbmFjY3Vy
YXRlIGlmIGNvbnRlbnQgY2hhbmdlZCBzaXplLgorICAgIC8vIFdlIG9ubHkgZG8gdGhpcyB3aGVu
IHdlJ3JlIGFjdHVhbGx5IHJlYWR5IHRvIHB1cmdlLgorICAgIG1fdG90YWxDb3N0ID0gMDsKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgbV90b3RhbENvc3QgKz0g
bV9kYXRhW2ldLmNhbGN1bGF0ZUNvc3QoKTsKKworICAgIGZvciAoaW50IGkgPSBzaXplLTE7IGkg
Pj0gMCAmJiBtX3RvdGFsQ29zdCA+IFRleHR1cmVNYXBwZXJDYWNoZTo6TWF4Q29zdCAtIFRleHR1
cmVNYXBwZXJDYWNoZTo6UHVyZ2VBbW91bnQ7IC0taSkgeworICAgICAgICBFbnRyeSYgZW50cnkg
PSBtX2RhdGFbaV07CisgICAgICAgIGlmIChlbnRyeS50ZXh0dXJlLT5pc0xvY2tlZCgpIHx8ICFl
bnRyeS50ZXh0dXJlLT5pc1ZhbGlkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
bV90b3RhbENvc3QgLT0gZW50cnkucHJldmlvdXNDb3N0OworICAgICAgICBlbnRyeS50ZXh0dXJl
LT5kZXN0cm95KCk7CisgICAgICAgIG1fZGF0YS5yZW1vdmUoaSk7CisgICAgfQorfQorCit2b2lk
IFRleHR1cmVNYXBwZXJDYWNoZTo6bWFyayhCaXRtYXBUZXh0dXJlKiB0ZXh0dXJlKQoreworICAg
IGlmICghdGV4dHVyZSB8fCAhdGV4dHVyZS0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBFbnRyeSBlbnRyeSh0ZXh0dXJlKTsKKyAgICBzaXplX3QgaW5kZXggPSBtX2RhdGEuZmlu
ZChlbnRyeSk7CisgICAgaWYgKCFpbmRleCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGlu
ZGV4IDwgbV9kYXRhLnNpemUoKSkgCisgICAgICAgIG1fZGF0YS5yZW1vdmUoaW5kZXgpOworICAg
IGNvbnN0IGludCBjb3N0ID0gZW50cnkuY2FsY3VsYXRlQ29zdCgpOworICAgIG1fdG90YWxDb3N0
IC09IGVudHJ5LnByZXZpb3VzQ29zdDsKKyAgICBtX3RvdGFsQ29zdCArPSAoZW50cnkucHJldmlv
dXNDb3N0ID0gY29zdCk7CisgICAgbV9kYXRhLnByZXBlbmQoZW50cnkpOworfQorCitUZXh0dXJl
TWFwcGVyQ2FjaGUgZ1RleHR1cmVNYXBwZXJDYWNoZTsKKworY2xhc3MgVGV4dHVyZU1hcHBlckNh
Y2hlTG9jayB7CitwdWJsaWM6CisgICAgVGV4dHVyZU1hcHBlckNhY2hlTG9jayhCaXRtYXBUZXh0
dXJlKiB0ZXh0dXJlKSA6IG1fdGV4dHVyZSh0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgaWYgKG1f
dGV4dHVyZSkKKyAgICAgICAgICAgIG1fdGV4dHVyZS0+bG9jaygpOworICAgIH0KKyAgICB+VGV4
dHVyZU1hcHBlckNhY2hlTG9jaygpCisgICAgeworICAgICAgICBpZiAobV90ZXh0dXJlKQorICAg
ICAgICAgICAgbV90ZXh0dXJlLT51bmxvY2soKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVm
UHRyPEJpdG1hcFRleHR1cmU+IG1fdGV4dHVyZTsKK307CisKK2NsYXNzIFRleHR1cmVNYXBwZXJO
b2RlIDogcHVibGljIFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIgeworCitwdWJsaWM6CisgICAg
Ly8gVGhpcyBzZXQgb2YgZmxhZ3MgaGVscCB1cyBkZWZlciB3aGljaCBwcm9wZXJ0aWVzIG9mIHRo
ZSBsYXllciBoYXZlIGJlZW4KKyAgICAvLyBtb2RpZmllZCBieSB0aGUgY29tcG9zaXRvciwgc28g
d2UgY2FuIGtub3cgd2hhdCB0byBsb29rIGZvciBpbiB0aGUgbmV4dCBmbHVzaC4KKyAgICBlbnVt
IENoYW5nZU1hc2sgeworICAgICAgICBOb0NoYW5nZXMgPSAgICAgICAgICAgICAgICAgMCwKKwor
ICAgICAgICBQYXJlbnRDaGFuZ2UgPSAgICAgICAgICAgICAgKDFMIDw8IDApLAorICAgICAgICBD
aGlsZHJlbkNoYW5nZSA9ICAgICAgICAgICAgKDFMIDw8IDEpLAorICAgICAgICBNYXNrTGF5ZXJD
aGFuZ2UgPSAgICAgICAgICAgKDFMIDw8IDIpLAorICAgICAgICBQb3NpdGlvbkNoYW5nZSA9ICAg
ICAgICAgICAgKDFMIDw8IDMpLAorCisgICAgICAgIEFuY2hvclBvaW50Q2hhbmdlID0gICAgICAg
ICAoMUwgPDwgNCksCisgICAgICAgIFNpemVDaGFuZ2UgID0gICAgICAgICAgICAgICAoMUwgPDwg
NSksCisgICAgICAgIFRyYW5zZm9ybUNoYW5nZSA9ICAgICAgICAgICAoMUwgPDwgNiksCisgICAg
ICAgIENvbnRlbnRDaGFuZ2UgPSAgICAgICAgICAgICAoMUwgPDwgNyksCisKKyAgICAgICAgQ29u
dGVudHNPcmllbnRhdGlvbkNoYW5nZSA9ICgxTCA8PCA5KSwKKyAgICAgICAgT3BhY2l0eUNoYW5n
ZSA9ICAgICAgICAgICAgICgxTCA8PCAxMCksCisgICAgICAgIENvbnRlbnRzUmVjdENoYW5nZSA9
ICAgICAgICAoMUwgPDwgMTEpLAorCisgICAgICAgIFByZXNlcnZlczNEQ2hhbmdlID0gICAgICAg
ICAoMUwgPDwgMTIpLAorICAgICAgICBNYXNrc1RvQm91bmRzQ2hhbmdlID0gICAgICAgKDFMIDw8
IDEzKSwKKyAgICAgICAgRHJhd3NDb250ZW50Q2hhbmdlID0gICAgICAgICgxTCA8PCAxNCksCisg
ICAgICAgIENvbnRlbnRzT3BhcXVlQ2hhbmdlID0gICAgICAoMUwgPDwgMTUpLAorCisgICAgICAg
IEJhY2tmYWNlVmlzaWJpbGl0eUNoYW5nZSA9ICAoMUwgPDwgMTYpLAorICAgICAgICBDaGlsZHJl
blRyYW5zZm9ybUNoYW5nZSA9ICAgKDFMIDw8IDE3KSwKKyAgICAgICAgRGlzcGxheUNoYW5nZSA9
ICAgICAgICAgICAgICgxTCA8PCAxOCksCisgICAgICAgIEJhY2tncm91bmRDb2xvckNoYW5nZSA9
ICAgICAoMUwgPDwgMTkpLAorCisgICAgICAgIFJlcGxpY2FMYXllckNoYW5nZSA9ICAgICAgICAo
MUwgPDwgMjApCisgICAgfTsKKworICAgIC8vIFRoZSBjb21wb3NpdG9yIGxldHMgdXMgc3BlY2lh
bC1jYXNlIGltYWdlcyBhbmQgY29sb3JzLCBzbyB3ZSB0cnkgdG8gZG8gc28uCisgICAgZW51bSBT
dGF0aWNDb250ZW50VHlwZSB7IEhUTUxDb250ZW50VHlwZSwgRGlyZWN0SW1hZ2VDb250ZW50VHlw
ZSwgQ29sb3JDb250ZW50VHlwZSwgTWVkaWFDb250ZW50VHlwZSwgQ2FudmFzM0RDb250ZW50VHlw
ZX07CisKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogcm9vdExheWVyKCk7CisKKyAgICBUZXh0dXJl
TWFwcGVyTm9kZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogbmV3TGF5ZXIpOworICAgIHZp
cnR1YWwgflRleHR1cmVNYXBwZXJOb2RlKCk7CisKKyAgICB2b2lkIGNsZWFyRGlyZWN0SW1hZ2Uo
KTsKKyAgICB2b2lkIGNvbXB1dGVUcmFuc2Zvcm1hdGlvbnMoKTsKKyAgICBJbnRTaXplIG5lYXJl
c3RTdXJmYWNlU2l6ZSgpIGNvbnN0OworICAgIHZvaWQgY29tcHV0ZVJlcGxpY2FUcmFuc2Zvcm0o
KTsKKyAgICB2b2lkIGNvbXB1dGVMYXllclR5cGUoKTsKKyAgICB2b2lkIGNvbXB1dGVMb2NhbFRy
YW5zZm9ybSgpOworICAgIHZvaWQgZmxhdHRlblRvMkRTcGFjZUlmTmVjZXNzYXJ5KCk7CisgICAg
dm9pZCBpbml0aWFsaXplVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKik7CisgICAgdm9pZCBp
bnZhbGlkYXRlVHJhbnNmb3JtKCk7CisgICAgdm9pZCBub3RpZnlDaGFuZ2UoQ2hhbmdlTWFzayk7
CisgICAgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZShib29sIHJlY3Vyc2UpOworICAgIHZvaWQg
cGVyZm9ybVBvc3RTeW5jT3BlcmF0aW9ucygpOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7
CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoSW50UmVjdCk7CisgICAgdmlydHVhbCB2
b2lkIGNsZWFudXBUZXh0dXJlTWFwcGVyKCk7CisKKyAgICB2b2lkIHBhaW50UmVjdXJzaXZlKFRl
eG1hcFBhaW50T3B0aW9ucyBvcHRpb25zKTsKKyAgICB2b2lkIHBhaW50U2VsZihjb25zdCBUZXht
YXBQYWludE9wdGlvbnMmIG9wdGlvbnMpOworICAgIHZvaWQgdXBsb2FkVGV4dHVyZUZyb21Db250
ZW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IEludFJlY3QmIHZpc2libGVS
ZWN0KTsKKworICAgIGludCBjb3VudERlc2NlbmRhbnRzV2l0aENvbnRlbnQoKSBjb25zdDsKKyAg
ICBib29sIGhhc1N1cmZhY2VEZXNjZW5kYW50cygpIGNvbnN0OworCisgICAgSW50U2l6ZSBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGxhdGZv
cm1MYXllckNsaWVudChUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFJlY3Qm
IHRhcmdldFJlY3QsIGNvbnN0IEludFJlY3QmIGV4cG9zZWRSZWN0LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5KTsKKworICAgIHN0YXRpYyBUZXh0
dXJlTWFwcGVyTm9kZSogdG9UZXh0dXJlTWFwcGVyTm9kZShHcmFwaGljc0xheWVyKik7CitwdWJs
aWM6CisgICAgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIG1fbGF5ZXI7CisgICAgY29uc3Qg
Y2hhciogbV9sYXN0VGV4dHVyZU1hcHBlclR5cGU7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXI+
IG1fbGFzdFRleHR1cmVNYXBwZXI7CisgICAgc3RydWN0IFRyYW5zZm9ybURhdGEgeworICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBiYXNlLCB0YXJnZXQsIHJlcGxpY2EsIGZvckRlc2NlbmRh
bnRzLCBwZXJzcGVjdGl2ZSwgbG9jYWw7CisgICAgICAgIEludFJlY3QgdGFyZ2V0Qm91bmRpbmdS
ZWN0OworICAgICAgICBmbG9hdCBjZW50ZXJaOworICAgICAgICBib29sIGRpcnR5LCBsb2NhbERp
cnR5LCBwZXJzcGVjdGl2ZURpcnR5OworICAgICAgICBJbnRSZWN0IGJvdW5kaW5nUmVjdEZyb21S
b290OworICAgICAgICBUcmFuc2Zvcm1EYXRhKCkgOiBkaXJ0eSh0cnVlKSwgbG9jYWxEaXJ0eSh0
cnVlKSwgcGVyc3BlY3RpdmVEaXJ0eSh0cnVlKSB7IH0KKyAgICB9OworCisgICAgVHJhbnNmb3Jt
RGF0YSBtX3RyYW5zZm9ybXM7CisKKyAgICBlbnVtIExheWVyVHlwZSB7CisgICAgICAgIERlZmF1
bHRMYXllciwKKyAgICAgICAgUm9vdExheWVyLAorICAgICAgICBTY2lzc29yTGF5ZXIsCisgICAg
ICAgIENsaXBMYXllciwKKyAgICAgICAgVHJhbnNwYXJlbmN5TGF5ZXIKKyAgICB9OworCisgICAg
TGF5ZXJUeXBlIG1fbGF5ZXJUeXBlOworCisgICAgc3RydWN0IENvbnRlbnREYXRhIHsKKyAgICAg
ICAgSW50UmVjdCBuZWVkc0Rpc3BsYXlSZWN0OworICAgICAgICBib29sIG5lZWRzRGlzcGxheTsK
KyAgICAgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOworCisgICAgICAgIFN0YXRpY0NvbnRlbnRU
eXBlIGNvbnRlbnRUeXBlOworICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlOworICAgICAgICBU
ZXh0dXJlTWFwcGVyVmlkZW9MYXllciogbWVkaWE7CisKKyAgICAgICAgQ29udGVudERhdGEoKQor
ICAgICAgICAgICAgOiBuZWVkc0Rpc3BsYXkoZmFsc2UpCisgICAgICAgICAgICAsIGNvbnRlbnRU
eXBlKEhUTUxDb250ZW50VHlwZSkKKyAgICAgICAgICAgICwgaW1hZ2UoMCkKKyAgICAgICAgICAg
ICwgbWVkaWEoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICB9OworCisgICAgaW5saW5l
IEludFJlY3QgdGFyZ2V0UmVjdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jdXJy
ZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUgPyBlbnRpcmVSZWN0KCkg
OiBtX3N0YXRlLmNvbnRlbnRzUmVjdDsKKyAgICB9CisKKyAgICBpbmxpbmUgSW50UmVjdCBlbnRp
cmVSZWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBJbnRSZWN0KDAsIDAsIG1fc2l6
ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgIH0KKworICAgIGlubGluZSBJbnRSZWN0
IHJlcGxpY2FSZWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xheWVyVHlwZSA9
PSBUcmFuc3BhcmVuY3lMYXllciA/IEludFJlY3QoMCwgMCwgbV9uZWFyZXN0U3VyZmFjZVNpemUu
d2lkdGgoKSwgbV9uZWFyZXN0U3VyZmFjZVNpemUuaGVpZ2h0KCkpIDogZW50aXJlUmVjdCgpOwor
ICAgIH0KKworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBtX3RleHR1cmU7CisgICAgUmVmUHRy
PEJpdG1hcFRleHR1cmU+IG1fc3VyZmFjZSwgbV9yZXBsaWNhU3VyZmFjZTsKKworICAgIENvbnRl
bnREYXRhIG1fcGVuZGluZ0NvbnRlbnQ7CisgICAgQ29udGVudERhdGEgbV9jdXJyZW50Q29udGVu
dDsKKworICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyTm9kZSo+IG1fY2hpbGRyZW47CisgICAgVGV4
dHVyZU1hcHBlck5vZGUqIG1fcGFyZW50OworICAgIFRleHR1cmVNYXBwZXJOb2RlKiBtX2VmZmVj
dFRhcmdldDsKKyAgICBpbnQgbV9jaGFuZ2VNYXNrOworICAgIEludFNpemUgbV9zaXplLCBtX25l
YXJlc3RTdXJmYWNlU2l6ZTsKKyAgICBTdHJpbmcgbV9uYW1lOworICAgIFRleHR1cmVNYXBwZXJM
YXllckNsaWVudCogbV9wbGF0Zm9ybUNsaWVudDsKKworICAgIHN0cnVjdCBTdGF0ZSB7CisgICAg
ICAgIEZsb2F0UG9pbnQgcG9zOworICAgICAgICBGbG9hdFBvaW50M0QgYW5jaG9yUG9pbnQ7Cisg
ICAgICAgIEZsb2F0U2l6ZSBzaXplOworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFu
c2Zvcm07CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkcmVuVHJhbnNmb3JtOwor
ICAgICAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3I7CisgICAgICAgIENvbG9yIGN1cnJlbnRDb2xv
cjsKKyAgICAgICAgR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0
aW9uIGdlb09yaWVudGF0aW9uOworICAgICAgICBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nv
b3JkaW5hdGVzT3JpZW50YXRpb24gY29udGVudHNPcmllbnRhdGlvbjsKKyAgICAgICAgZmxvYXQg
b3BhY2l0eTsKKyAgICAgICAgSW50UmVjdCBjb250ZW50c1JlY3Q7CisgICAgICAgIGludCBkZXNj
ZW5kYW50c1dpdGhDb250ZW50OworICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbWFza0xheWVy
OworICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZSogcmVwbGljYUxheWVyOworICAgICAgICBib29s
IHByZXNlcnZlczNEOworICAgICAgICBib29sIG1hc2tzVG9Cb3VuZHM7CisgICAgICAgIGJvb2wg
ZHJhd3NDb250ZW50OworICAgICAgICBib29sIGNvbnRlbnRzT3BhcXVlOworICAgICAgICBib29s
IGJhY2tmYWNlVmlzaWJpbGl0eTsKKyAgICAgICAgYm9vbCB2aXNpYmxlOworICAgICAgICBib29s
IGRpcnR5OworICAgICAgICBib29sIHRpbGVkOworICAgICAgICBib29sIGhhc1N1cmZhY2VEZXNj
ZW5kYW50czsKKworICAgICAgICBTdGF0ZSgpCisgICAgICAgICAgICA6IG9wYWNpdHkoMS5mKQor
ICAgICAgICAgICAgLCBkZXNjZW5kYW50c1dpdGhDb250ZW50KDApCisgICAgICAgICAgICAsIG1h
c2tMYXllcigwKQorICAgICAgICAgICAgLCByZXBsaWNhTGF5ZXIoMCkKKyAgICAgICAgICAgICwg
cHJlc2VydmVzM0QoZmFsc2UpCisgICAgICAgICAgICAsIG1hc2tzVG9Cb3VuZHMoZmFsc2UpCisg
ICAgICAgICAgICAsIGRyYXdzQ29udGVudChmYWxzZSkKKyAgICAgICAgICAgICwgY29udGVudHNP
cGFxdWUoZmFsc2UpCisgICAgICAgICAgICAsIGJhY2tmYWNlVmlzaWJpbGl0eShmYWxzZSkKKyAg
ICAgICAgICAgICwgdmlzaWJsZSh0cnVlKQorICAgICAgICAgICAgLCBkaXJ0eSh0cnVlKQorICAg
ICAgICAgICAgLCB0aWxlZChmYWxzZSkKKyAgICAgICAgICAgICwgaGFzU3VyZmFjZURlc2NlbmRh
bnRzKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9OworICAgIFN0YXRlIG1fc3Rh
dGU7Cit9OworCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzZXROZWVkc0Rpc3BsYXlJblJlY3Qo
SW50UmVjdCByZWN0KQoreworICAgIGlmIChtX3BsYXRmb3JtQ2xpZW50KSB7CisgICAgICAgIGlm
IChtX3N0YXRlLmhhc1N1cmZhY2VEZXNjZW5kYW50cykgeworICAgICAgICAgICAgbV9wbGF0Zm9y
bUNsaWVudC0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgcmVjdC5pbnRlcnNlY3QoSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwg
bV9zaXplLmhlaWdodCgpKSk7CisgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgbV9wbGF0Zm9ybUNsaWVudC0+c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3BhcmVudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYXJlbnQtPnNldE5lZWRzRGlzcGxheUluUmVjdChy
ZWN0KTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0TmVlZHNEaXNwbGF5KCkKK3sK
KyAgICBpZiAobV9lZmZlY3RUYXJnZXQpCisgICAgICAgIG1fZWZmZWN0VGFyZ2V0LT5zZXROZWVk
c0Rpc3BsYXkoKTsKKyAgICBpZiAobV90cmFuc2Zvcm1zLnRhcmdldEJvdW5kaW5nUmVjdC5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9zdGF0ZS5kcmF3c0NvbnRlbnQgfHwg
bV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSAhPSBIVE1MQ29udGVudFR5cGUpCisgICAgICAg
IHNldE5lZWRzRGlzcGxheUluUmVjdChtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0KTsK
K30KKworCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzZXRQbGF0Zm9ybUxheWVyQ2xpZW50KFRl
eHR1cmVNYXBwZXJMYXllckNsaWVudCogY2xpZW50KQoreworICAgIG1fcGxhdGZvcm1DbGllbnQg
PSBjbGllbnQ7Cit9CisKK3N0YXRpYyBpbnQgY29tcGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKGNv
bnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCit7CisgICAgdHlwZWRlZiBjb25zdCBUZXh0dXJl
TWFwcGVyTm9kZSogTm9kZVB0cjsKKyAgICBjb25zdCBOb2RlUHRyKiBub2RlQSA9IHN0YXRpY19j
YXN0PGNvbnN0IE5vZGVQdHIqPihhKTsKKyAgICBjb25zdCBOb2RlUHRyKiBub2RlQiA9IHN0YXRp
Y19jYXN0PGNvbnN0IE5vZGVQdHIqPihiKTsKKyAgICByZXR1cm4gaW50KCgoKm5vZGVBKS0+bV90
cmFuc2Zvcm1zLmNlbnRlclogLSAoKm5vZGVCKS0+bV90cmFuc2Zvcm1zLmNlbnRlclopICogMTAw
MCk7Cit9CitpbmxpbmUgc3RhdGljIHZvaWQgc29ydEJ5Wk9yZGVyKFZlY3RvcjxUZXh0dXJlTWFw
cGVyTm9kZSogPiYgYXJyYXksIGludCBmaXJzdCwgaW50IGxhc3QpCit7CisgICAgcXNvcnQoYXJy
YXkuZGF0YSgpLCBhcnJheS5zaXplKCksIHNpemVvZihUZXh0dXJlTWFwcGVyTm9kZSopLCBjb21w
YXJlR3JhcGhpY3NMYXllcnNaVmFsdWUpOworfQorCitib29sIFRleHR1cmVNYXBwZXJOb2RlOjpo
YXNTdXJmYWNlRGVzY2VuZGFudHMoKSBjb25zdAoreworICAgIGlmIChtX2xheWVyVHlwZSA9PSBD
bGlwTGF5ZXIgfHwgbV9sYXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIgfHwgbV9zdGF0ZS5y
ZXBsaWNhTGF5ZXIpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNvbnN0IGludCBzaXplID0g
bV9jaGlsZHJlbi5zaXplKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsK
KyAgICAgICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiBjaGlsZCA9IG1fY2hpbGRyZW5baV0pIHsK
KyAgICAgICAgICAgIGlmIChjaGlsZC0+aGFzU3VyZmFjZURlc2NlbmRhbnRzKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworCit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwg
Y29uc3QgSW50UmVjdCYgZXhwb3NlZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHkpCit7CisgICAgQVNTRVJUKG1fbGF5ZXJUeXBlID09IFJv
b3RMYXllcik7CisgICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwor
I2lmIDAKKyAgICBXVEY6OlN0b3BXYXRjaCBzdG9wV2F0Y2g7CisgICAgKCJbVGV4dHVyZU1hcHBl
cl0gUm9vdFBhaW50ISFcbiIpOworI2VuZGlmCisKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlcj4g
dGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShjb250ZXh0KTsKKworICAgIGlm
ICh0ZXh0dXJlTWFwcGVyLT50eXBlKCkgIT0gbV9sYXN0VGV4dHVyZU1hcHBlclR5cGUpCisgICAg
ICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUubV9kYXRhLmNsZWFyKCk7CisKKyAgICBtX2xhc3RUZXh0
dXJlTWFwcGVyID0gdGV4dHVyZU1hcHBlcjsKKyAgICBUZXhtYXBQYWludE9wdGlvbnMgb3B0Owor
ICAgIG9wdC5vcGFjaXR5ID0gMTsKKyAgICBvcHQucm9vdExheWVyID0gdGhpczsKKyAgICBvcHQu
c2Npc3NvclJlY3QgPSB0YXJnZXRSZWN0OworICAgIG9wdC52aXNpYmxlUmVjdCA9IGV4cG9zZWRS
ZWN0OworICAgIG9wdC50ZXh0dXJlTWFwcGVyID0gdGV4dHVyZU1hcHBlci5nZXQoKTsKKyAgICBv
cHQuY29udGV4dCA9IHRleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dCgpOworICAgIG9wdC5z
dXJmYWNlID0gMDsKKyAgICBwYWludFJlY3Vyc2l2ZShvcHQpOworCisgICAgaWYgKHRleHR1cmVN
YXBwZXItPmFsbG93U3VyZmFjZUZvclJvb3QoKSB8fCBtX3N0YXRlLmhhc1N1cmZhY2VEZXNjZW5k
YW50cykgeworICAgICAgICB0ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsKKyAgICAgICAg
dGV4dHVyZU1hcHBlci0+cGFpbnRUb1RhcmdldCgqbV9zdXJmYWNlLmdldCgpLCBzaXplLCB0cmFu
c2Zvcm0sIG9wYWNpdHkgKiBtX3N0YXRlLm9wYWNpdHksIHRhcmdldFJlY3QpOworICAgIH0KKyAg
ICBnVGV4dHVyZU1hcHBlckNhY2hlLnB1cmdlKCk7Cit9CisKK2ludCBUZXh0dXJlTWFwcGVyTm9k
ZTo6Y291bnREZXNjZW5kYW50c1dpdGhDb250ZW50KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc3Rh
dGUudmlzaWJsZSB8fCBtX3N0YXRlLm9wYWNpdHkgPCAwLjAwMSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgaW50IGRlc2NlbmRhbnRzV2l0aENvbnRlbnQgPSAobV9zdGF0ZS5kcmF3c0NvbnRlbnQg
fHwgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSAhPSBIVE1MQ29udGVudFR5cGUpID8gMSA6
IDA7CisKKyAgICBjb25zdCBpbnQgc2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGlmIChUZXh0dXJlTWFwcGVyTm9k
ZSogY2hpbGQgPSBtX2NoaWxkcmVuW2ldKQorICAgICAgICAgICAgZGVzY2VuZGFudHNXaXRoQ29u
dGVudCArPSBjaGlsZC0+Y291bnREZXNjZW5kYW50c1dpdGhDb250ZW50KCk7CisgICAgfQorCisg
ICAgcmV0dXJuIGRlc2NlbmRhbnRzV2l0aENvbnRlbnQ7Cit9CisKK2lubGluZSBUZXh0dXJlTWFw
cGVyTm9kZSogVGV4dHVyZU1hcHBlck5vZGU6OnRvVGV4dHVyZU1hcHBlck5vZGUoR3JhcGhpY3NM
YXllciogbGF5ZXIpCit7CisgICAgcmV0dXJuIGxheWVyID8gc3RhdGljX2Nhc3Q8R3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIqPihsYXllciktPm1fbm9kZS5nZXQoKSA6IDA7Cit9CisKK3ZvaWQg
VGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVMYXllclR5cGUoKQoreworICAgIC8vIGNhbGN1bGF0
ZSBsYXllciB0eXBlLiBBIGxheWVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAv
LyAgUm9vdExheWVyOiB0aGUgdG9wIGxldmVsLiBEcmF3cyB0byBhIGZyYW1lYnVmZmVyLCBhbmQg
dGhlIHRhcmdldCB0ZXh0dXJlIGRyYXdzIGludG8gdGhlIHZpZXdwb3J0LgorICAgIC8vICAgICAg
ICAgICAgb25seSBvbmUgbGF5ZXIgaXMgdGhlIHJvb3QgbGF5ZXIuCisgICAgLy8gIFNjaXNzb3JM
YXllcjogZHJhd3MgdG8gdGhlIGN1cnJlbnQgZnJhbWVidWZmZXIsIGFuZCBhcHBsaWVzIGFuIGV4
dHJhIHNjaXNzb3IgYmVmb3JlIGRyYXdpbmcgaXRzIGNoaWxkcmVuLgorICAgIC8vICAgICAgICAg
ICAgICAgIEEgc2Npc3NvciBsYXllciBpcyBhIGxheWVyIHdpdGggY2hpbGRyZW4gdGhhdCBtYXNr
cyB0byBib3VuZHMsIGlzIG5vdCBhIHRyYW5zcGFyZW5jeSBsYXllciwgYW5kIGhhcyBhIHJlY3Rh
bmd1bGFyIGNsaXAuCisgICAgLy8gIENsaXBMYXllcjogY3JlYXRlcyBhIG5ldyBmcmFtZWJ1ZmZl
ciwgdGhlIHNpemUgb2YgdGhlIGxheWVyLCBhbmQgdGhlbiBwYWludHMgaXQgdG8gdGhlIGVuY2xv
c2luZyBCaXRtYXBUZXh0dXJlIHdpdGggdGhlIGxheWVyJ3MgdHJhbnNmb3JtL29wYWNpdHkuCisg
ICAgLy8gICAgICAgICAgICAgIEEgY2xpcCBsYXllciBpcyBhIGxheWVyIHRoYXQgbWFza3MgdG8g
Ym91bmRzLCBkb2Vzbid0IHByZXNlcnZlIDNELCBoYXMgY2hpbGRyZW4sIGFuZCBoYXMgYSB0cmFu
c3BhcmVuY3kvbWFzayBvciBhIG5vbi1yZWN0YW5ndWxhciB0cmFuc2Zvcm0uCisgICAgLy8gIFRy
YW5zcGFyZW5jeUxheWVyOiBjcmVhdGVzIGEgbmV3IGZyYW1lYnVmZmVyIGlkZXRpY2FsIGluIHNp
emUgdG8gdGhlIGN1cnJlbnQgZnJhbWVidWZmZXIuIFRoZW4gZHJhd3MgdGhlIGZiJ3MgdGV4dHVy
ZSB0byB0aGUgY3VycmVudCBmcmFtZWJ1ZmZlciB3aXRoIGlkZW50aXR5IHRyYW5zZm9ybS4KKyAg
ICAvLyAgICAgICAgICAgICAgICAgICAgIFVzZWQgZm9yIGxheWVycyB3aXRoIGNoaWxkcmVuIGFu
ZCB0cmFuc3BhcmVuY3kvbWFzayB0aGF0IHByZXNlcnZlIDNEIG9yIGRvbid0IG1hc2sgdG8gYm91
bmRzLgorICAgIC8vICBEZWZhdWx0TGF5ZXI6IGRyYXdzIGl0c2VsZiBhbmQgaXRzIGNoaWxkcmVu
IGRpcmVjdGx5IHRvIHRoZSBjdXJyZW50IGZyYW1lYnVmZmVyLgorICAgIC8vICAgICAgICAgICAg
ICAgIGFueSBsYXllciB0aGF0IGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgb3RoZXIgcnVsZXMgaXMg
YSBEZWZhdWx0TGF5ZXIuCisKKyAgICBjb25zdCBib29sIHNlbGZIYXNDb250ZW50ID0gbV9zdGF0
ZS5kcmF3c0NvbnRlbnQgfHwgKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgIT0gSFRNTENv
bnRlbnRUeXBlKTsKKyAgICBjb25zdCBib29sIGhhc0Rlc2NlbmRhbnRzV2l0aENvbnRlbnQgPSBt
X3N0YXRlLmRlc2NlbmRhbnRzV2l0aENvbnRlbnQgLSAoc2VsZkhhc0NvbnRlbnQgPyAxIDogMCk7
CisgICAgY29uc3QgYm9vbCBoYXNUcmFuc3BhcmVuY3kgPSBtX3N0YXRlLm9wYWNpdHkgPCAwLjk5
IHx8IG1fc3RhdGUubWFza0xheWVyOworICAgIGNvbnN0IGJvb2wgaGFzUmVwbGljYSA9IG1fc3Rh
dGUucmVwbGljYUxheWVyOworICAgIG1fbGF5ZXJUeXBlID0gRGVmYXVsdExheWVyOworCisgICAg
Ly8gTGF5ZXIgaGFzIG5vIHBhcmVudCwgaXQgbXVzdCBiZSBhIHJvb3QgbGF5ZXIuCisgICAgaWYg
KCFtX3BhcmVudCAmJiAhbV9lZmZlY3RUYXJnZXQpIHsKKyAgICAgICAgbV9sYXllclR5cGUgPSBS
b290TGF5ZXI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBIGxheWVyIHdpdGgg
bm8gY29udGVudHMgaXMgYWx3YXlzIGEgZGVmYXVsdCBsYXllci4KKyAgICBpZiAoIW1fc3RhdGUu
ZGVzY2VuZGFudHNXaXRoQ29udGVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQSBsYXll
ciB3aXRoIGNvbnRlbnQtZGVzY2VuZGFudHMgYW5kIGEgbWFzayBpcyBhbHdheXMgYSBjbGlwIGxh
eWVyLgorICAgIGlmIChoYXNEZXNjZW5kYW50c1dpdGhDb250ZW50ICYmIG1fc3RhdGUubWFza0xh
eWVyKSB7CisgICAgICAgIG1fbGF5ZXJUeXBlID0gQ2xpcExheWVyOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gQSBtYXNrcy10byBib3VuZHMgbGF5ZXIgY2FuIGJlIGEgY2xpcCBv
ciBhIHNjaXNzb3IgbGF5ZXIuIEl0J3MgYSBzY2lzc29yIGxheWVyIG9ubHkgaWYgaXQgaGFzIGEg
dHJpdmlhbCBjbGlwIChpZGVudGl0eSBvciB0cmFuc2xhdGlvbiksIG9yIGlmIGl0IGhhcyB0cmFu
c3BhcmVuY3kuCisgICAgLy8gVGhhdCdzIGJlY2F1c2UgYSBDbGlwTGF5ZXIgd291bGQgY3JlYXRl
IGFuIGludGVybWVkaWF0ZSBkcmF3aW5nIHN1cmZhY2UgKEZCKSAtIHdlIHdhbnQgdG8gbGltaXQg
aXQgdG8gd2hlbiBpdCdzIGFjdHVhbGx5IG5lY2Vzc2FyeSwgaS5lLiB0cmFuc3BhcmVuY3kgb3Ig
bm9uLXRyaXZpYWwgY2xpcC4KKyAgICBpZiAobV9zdGF0ZS5tYXNrc1RvQm91bmRzICYmIGhhc0Rl
c2NlbmRhbnRzV2l0aENvbnRlbnQpIHsKKyAgICAgICAgaWYgKGhhc1RyYW5zcGFyZW5jeSB8fCAh
bV9zdGF0ZS50cmFuc2Zvcm0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSB8fCBtX3BhcmVudC0+
bV9zdGF0ZS5wcmVzZXJ2ZXMzRCkKKyAgICAgICAgICAgIG1fbGF5ZXJUeXBlID0gQ2xpcExheWVy
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2xheWVyVHlwZSA9IFNjaXNzb3JMYXllcjsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIHVzZSBhIHRyYW5zcGFyZW5jeSBs
YXllciB3aGVuIHdlIGhhdmUgdHdvIG9mIHRoZSBmb2xsb3dpbmcgMzogcmVwbGljYSwgdHJhbnNw
YXJlbmN5LCBkZXNjZW5kYW50cyB3aXRoIGNvbnRlbnRzLgorICAgIGlmICgoaGFzUmVwbGljYSAm
JiBoYXNEZXNjZW5kYW50c1dpdGhDb250ZW50KSB8fCAoaGFzUmVwbGljYSAmJiBoYXNUcmFuc3Bh
cmVuY3kpIHx8IChoYXNUcmFuc3BhcmVuY3kgJiYgbV9zdGF0ZS5kZXNjZW5kYW50c1dpdGhDb250
ZW50ID4gMSkpCisgICAgICAgIG1fbGF5ZXJUeXBlID0gVHJhbnNwYXJlbmN5TGF5ZXI7Cit9Cit2
b2lkIFRleHR1cmVNYXBwZXJOb2RlOjppbml0aWFsaXplVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFw
cGVyKiB0ZXh0dXJlTWFwcGVyKQoreworICAgIGlmICh0ZXh0dXJlTWFwcGVyLT50eXBlKCkgPT0g
bV9sYXN0VGV4dHVyZU1hcHBlclR5cGUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3N1cmZhY2Ug
PSB0ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CisgICAgbV9yZXBsaWNhU3VyZmFjZSA9
IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICBtX3RleHR1cmUgPSB0ZXh0dXJl
TWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CisgICAgZ1RleHR1cmVNYXBwZXJDYWNoZS5tYXJrKG1f
dGV4dHVyZS5nZXQoKSk7CisgICAgbV9sYXN0VGV4dHVyZU1hcHBlclR5cGUgPSB0ZXh0dXJlTWFw
cGVyLT50eXBlKCk7Cit9CisKK1RleHR1cmVNYXBwZXJOb2RlOjpUZXh0dXJlTWFwcGVyTm9kZShH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogbmV3TGF5ZXIpCisgICAgOiBtX2xheWVyKG5ld0xh
eWVyKQorICAgICwgbV9sYXN0VGV4dHVyZU1hcHBlclR5cGUoMCkKKyAgICAsIG1fbGFzdFRleHR1
cmVNYXBwZXIoMCkKKyAgICAsIG1fbGF5ZXJUeXBlKERlZmF1bHRMYXllcikKKyAgICAsIG1fc3Vy
ZmFjZSgwKQorICAgICwgbV9wYXJlbnQoMCkKKyAgICAsIG1fZWZmZWN0VGFyZ2V0KDApCisgICAg
LCBtX2NoYW5nZU1hc2soTm9DaGFuZ2VzKQorICAgICwgbV9wbGF0Zm9ybUNsaWVudCgwKQorewor
Cit9CisKK1RleHR1cmVNYXBwZXJOb2RlKiBUZXh0dXJlTWFwcGVyTm9kZTo6cm9vdExheWVyKCkK
K3sKKyAgICBpZiAobV9lZmZlY3RUYXJnZXQpCisgICAgICAgIHJldHVybiBtX2VmZmVjdFRhcmdl
dC0+cm9vdExheWVyKCk7CisgICAgaWYgKG1fcGFyZW50KQorICAgICAgICByZXR1cm4gbV9wYXJl
bnQtPnJvb3RMYXllcigpOworICAgIHJldHVybiB0aGlzOworfQorCit2b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjppbnZhbGlkYXRlVHJhbnNmb3JtKCkKK3sKKyAgICBtX3RyYW5zZm9ybXMuZGlydHkg
PSB0cnVlOworICAgIGlmIChtX2xheWVyVHlwZSAhPSBDbGlwTGF5ZXIpCisgICAgICAgIG1fc3Rh
dGUuZGlydHkgPSB0cnVlOworICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllcikKKyAgICAgICAg
bV9zdGF0ZS5yZXBsaWNhTGF5ZXItPmludmFsaWRhdGVUcmFuc2Zvcm0oKTsKKyAgICBjb25zdCBp
bnQgc2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7CisgICAgICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSogbGF5ZXIgPSBtX2NoaWxk
cmVuW2ldKQorICAgICAgICAgICAgbGF5ZXItPmludmFsaWRhdGVUcmFuc2Zvcm0oKTsKKyAgICB9
Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVMb2NhbFRyYW5zZm9ybSgpCit7
CisgICAgaWYgKCFtX3RyYW5zZm9ybXMubG9jYWxEaXJ0eSkKKyAgICAgICAgcmV0dXJuOworICAg
IGNvbnN0IGZsb2F0IG9yaWdpblggPSBtX3N0YXRlLmFuY2hvclBvaW50LngoKSAqIG1fc2l6ZS53
aWR0aCgpOworICAgIGNvbnN0IGZsb2F0IG9yaWdpblkgPSBtX3N0YXRlLmFuY2hvclBvaW50Lnko
KSAqIG1fc2l6ZS5oZWlnaHQoKTsKKyAgICBtX3RyYW5zZm9ybXMubG9jYWwgPQorICAgICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpCisgICAgICAgIC50cmFuc2xhdGUzZChvcmlnaW5YICsgbV9z
dGF0ZS5wb3MueCgpLCBvcmlnaW5ZICsgbV9zdGF0ZS5wb3MueSgpLCBtX3N0YXRlLmFuY2hvclBv
aW50LnooKSkKKyAgICAgICAgLm11bHRMZWZ0KG1fc3RhdGUudHJhbnNmb3JtKQorICAgICAgICAu
dHJhbnNsYXRlM2QoLW9yaWdpblgsIC1vcmlnaW5ZLCAtbV9zdGF0ZS5hbmNob3JQb2ludC56KCkp
OworICAgIG1fdHJhbnNmb3Jtcy5sb2NhbERpcnR5ID0gZmFsc2U7Cit9CisKK3ZvaWQgVGV4dHVy
ZU1hcHBlck5vZGU6OmZsYXR0ZW5UbzJEU3BhY2VJZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKG1f
c3RhdGUucHJlc2VydmVzM0QpCisgICAgICAgIHJldHVybjsKKyAgICBtX3RyYW5zZm9ybXMuZm9y
RGVzY2VuZGFudHMuc2V0TTEzKDApOworICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5z
ZXRNMjMoMCk7CisgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE0zMSgwKTsKKyAg
ICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTMyKDApOworICAgIG1fdHJhbnNmb3Jt
cy5mb3JEZXNjZW5kYW50cy5zZXRNMzMoMSk7CisgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRh
bnRzLnNldE0zNCgwKTsKKyAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTQzKDAp
OworfQorCitJbnRTaXplIFRleHR1cmVNYXBwZXJOb2RlOjpuZWFyZXN0U3VyZmFjZVNpemUoKSBj
b25zdAoreworICAgIGlmIChtX2xheWVyVHlwZSA9PSBDbGlwTGF5ZXIgfHwgbV9sYXllclR5cGUg
PT0gUm9vdExheWVyKQorICAgICAgICByZXR1cm4gbV9zdXJmYWNlICYmICFtX3N1cmZhY2UtPnNp
emUoKS5pc0VtcHR5KCkgPyBtX3N1cmZhY2UtPnNpemUoKSA6IG1fc2l6ZTsKKyAgICByZXR1cm4g
bV9wYXJlbnQtPm5lYXJlc3RTdXJmYWNlU2l6ZSgpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJO
b2RlOjpjb21wdXRlUmVwbGljYVRyYW5zZm9ybSgpCit7CisgICAgaWYgKCFtX3N0YXRlLnJlcGxp
Y2FMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9uZWFyZXN0U3VyZmFjZVNpemUgPSBu
ZWFyZXN0U3VyZmFjZVNpemUoKTsKKworICAgIGlmIChtX2xheWVyVHlwZSAhPSBUcmFuc3BhcmVu
Y3lMYXllcikgeworICAgICAgICBtX3RyYW5zZm9ybXMucmVwbGljYSA9IFRyYW5zZm9ybWF0aW9u
TWF0cml4KG1fdHJhbnNmb3Jtcy50YXJnZXQpLm11bHRMZWZ0KG1fc3RhdGUucmVwbGljYUxheWVy
LT5tX3RyYW5zZm9ybXMubG9jYWwpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29u
c3QgZmxvYXQgb3JpZ2luWCA9IG1fdHJhbnNmb3Jtcy50YXJnZXQubTQxKCk7CisgICAgY29uc3Qg
ZmxvYXQgb3JpZ2luWSA9IG1fdHJhbnNmb3Jtcy50YXJnZXQubTQyKCk7CisgICAgbV90cmFuc2Zv
cm1zLnJlcGxpY2EgPQorICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoKQorICAgICAg
ICAgICAgICAgIC50cmFuc2xhdGUob3JpZ2luWCwgb3JpZ2luWSkKKyAgICAgICAgICAgICAgICAu
bXVsdExlZnQobV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fdHJhbnNmb3Jtcy5sb2NhbCkKKyAgICAg
ICAgICAgICAgICAudHJhbnNsYXRlKC1vcmlnaW5YLCAtb3JpZ2luWSk7Cit9CisKK3ZvaWQgVGV4
dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVUcmFuc2Zvcm1hdGlvbnMoKQoreworICAgIGlmICghbV90
cmFuc2Zvcm1zLmRpcnR5KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3RyYW5zZm9ybXMuZGly
dHkgPSBmYWxzZTsKKyAgICBpZiAoKG1fc2l6ZS5pc0VtcHR5KCkgJiYgbV9zdGF0ZS5tYXNrc1Rv
Qm91bmRzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVGV4dHVyZU1hcHBlck5vZGUqIHBhcmVu
dCA9IG1fcGFyZW50OworICAgIGNvbXB1dGVMb2NhbFRyYW5zZm9ybSgpOworCisgICAgbV90cmFu
c2Zvcm1zLnRhcmdldCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KHBhcmVudCA/IHBhcmVudC0+bV90
cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzIDogVHJhbnNmb3JtYXRpb25NYXRyaXgoKSkubXVsdExl
ZnQobV90cmFuc2Zvcm1zLmxvY2FsKTsKKyAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMg
PSAobV9sYXllclR5cGUgPT0gQ2xpcExheWVyID8gVHJhbnNmb3JtYXRpb25NYXRyaXgoKSA6IG1f
dHJhbnNmb3Jtcy50YXJnZXQpOworCisgICAgaWYgKG1fZWZmZWN0VGFyZ2V0KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0ID0gSW50UmVjdCht
X3RyYW5zZm9ybXMudGFyZ2V0Lm1hcFJlY3QoZW50aXJlUmVjdCgpKSk7CisgICAgaWYgKG1fc3Rh
dGUucmVwbGljYUxheWVyKQorICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+Y29tcHV0ZVRy
YW5zZm9ybWF0aW9ucygpOworCisgICAgZmxhdHRlblRvMkRTcGFjZUlmTmVjZXNzYXJ5KCk7CisK
KyAgICBpZiAoIW1fc3RhdGUuYmFja2ZhY2VWaXNpYmlsaXR5ICYmIG1fdHJhbnNmb3Jtcy50YXJn
ZXQuaW52ZXJzZSgpLm0zMygpIDwgMCkgeworICAgICAgICBtX3N0YXRlLnZpc2libGUgPSBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3N0YXRlLnZpc2libGUgPSB0cnVlOwor
CisgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPm1fc3RhdGUucHJlc2VydmVzM0QpCisgICAgICAg
IG1fdHJhbnNmb3Jtcy5jZW50ZXJaID0gbV90cmFuc2Zvcm1zLnRhcmdldC5tYXBQb2ludChGbG9h
dFBvaW50M0QobV9zaXplLndpZHRoKCkgLyAyLCBtX3NpemUuaGVpZ2h0KCkgLyAyLCAwKSkueigp
OworCisgICAgaWYgKCFtX2NoaWxkcmVuLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKG1fc3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm0uaXNJZGVudGl0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBjb25zdCBGbG9hdFBvaW50IGNlbnRlclBvaW50ID0gRmxvYXRQb2ludChtX3Np
emUud2lkdGgoKSAvIDIsIG1fc2l6ZS5oZWlnaHQoKSAvIDIpOworICAgIGlmIChtX3RyYW5zZm9y
bXMucGVyc3BlY3RpdmVEaXJ0eSkKKyAgICAgICAgbV90cmFuc2Zvcm1zLnBlcnNwZWN0aXZlID0g
VHJhbnNmb3JtYXRpb25NYXRyaXgoKQorICAgICAgICAgICAgLnRyYW5zbGF0ZShjZW50ZXJQb2lu
dC54KCksIGNlbnRlclBvaW50LnkoKSkKKyAgICAgICAgICAgIC5tdWx0TGVmdChtX3N0YXRlLmNo
aWxkcmVuVHJhbnNmb3JtKQorICAgICAgICAgICAgLnRyYW5zbGF0ZSgtY2VudGVyUG9pbnQueCgp
LCAtY2VudGVyUG9pbnQueSgpKTsKKyAgICBtX3RyYW5zZm9ybXMucGVyc3BlY3RpdmVEaXJ0eSA9
IGZhbHNlOworICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5tdWx0TGVmdChtX3RyYW5z
Zm9ybXMucGVyc3BlY3RpdmUpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjp1cGxvYWRU
ZXh0dXJlRnJvbUNvbnRlbnQoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgSW50
UmVjdCYgdmlzaWJsZVJlY3QpCit7CisgICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkgfHwgIW1fbGF5
ZXIpIHsKKyAgICAgICAgbV90ZXh0dXJlLT5kZXN0cm95KCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJbWFn
ZUNvbnRlbnRUeXBlKSB7CisgICAgICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmltYWdlKQorICAg
ICAgICAgICAgbV90ZXh0dXJlLT5zZXRDb250ZW50c1RvSW1hZ2UobV9jdXJyZW50Q29udGVudC5p
bWFnZS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9jdXJyZW50
Q29udGVudC5jb250ZW50VHlwZSA9PSBNZWRpYUNvbnRlbnRUeXBlKSB7CisgICAgICAgIGlmICgh
bV9jdXJyZW50Q29udGVudC5tZWRpYSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV90
ZXh0dXJlLT5yZXNldChtX3NpemUsIHRydWUpOworICAgICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dCogcGxhdGZvcm1Db250ZXh0ID0gbV90ZXh0dXJlLT5iZWdpblBhaW50TWVkaWEoKTsKKyAg
ICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQocGxhdGZvcm1Db250ZXh0KTsKKyAgICAgICAg
bV9jdXJyZW50Q29udGVudC5tZWRpYS0+cGFpbnQoJmNvbnRleHQpOworICAgICAgICBtX3RleHR1
cmUtPmVuZFBhaW50KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBib29s
IG5lZWRzUmVzZXQgPSAobV90ZXh0dXJlLT5jb250ZW50U2l6ZSgpICE9IG1fc2l6ZSkgfHwgIW1f
dGV4dHVyZS0+aXNWYWxpZCgpOworICAgIGlmICgobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlw
ZSAhPSBIVE1MQ29udGVudFR5cGUpCisgICAgICAgIHx8ICghbV9jdXJyZW50Q29udGVudC5uZWVk
c0Rpc3BsYXkgJiYgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0LmlzRW1wdHkoKSAm
JiAhbmVlZHNSZXNldCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdURjo6U3RvcFdhdGNoIHN0
b3BXYXRjaDsKKyAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IEludFJlY3QoMCwgMCwgbV9zaXplLndp
ZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgaWYgKCFuZWVkc1Jlc2V0ICYmICFtX2N1cnJl
bnRDb250ZW50Lm5lZWRzRGlzcGxheSkKKyAgICAgICAgZGlydHlSZWN0LmludGVyc2VjdChtX2N1
cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QpOworICAgIGlmIChuZWVkc1Jlc2V0KQorICAg
ICAgICBtX3RleHR1cmUtPnJlc2V0KG1fc2l6ZSwgbV9zdGF0ZS5jb250ZW50c09wYXF1ZSk7Cisg
ICAgbV9wZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXlSZWN0ID0gSW50UmVjdCgpOworCisgICAg
eworICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChtX3RleHR1cmUtPmJlZ2luUGFpbnQo
ZGlydHlSZWN0KSk7CisgICAgICAgIGlmICh0ZXh0dXJlTWFwcGVyICYmIHRleHR1cmVNYXBwZXIt
PmdyYXBoaWNzQ29udGV4dCgpKSB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqIG9yaWdp
bmFsQ29udGV4dCA9IHRleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dCgpOworICAgICAgICAg
ICAgY29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KG9yaWdpbmFsQ29udGV4dC0+
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0VGV4
dERyYXdpbmdNb2RlKG9yaWdpbmFsQ29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkpOworICAgICAg
ICB9CisgICAgICAgIG1fbGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQs
IGRpcnR5UmVjdCk7CisgICAgfQorICAgIG1fdGV4dHVyZS0+ZW5kUGFpbnQoKTsKKyAgICB7Cisj
aWYgMAorICAgICAgICBMT0coIltUZXh0dXJlTWFwcGVyXSBSZS1yZW5kZXIoJWQpIGxheWVyKCVw
KSAlZDo6JWQ6OiVkICglZHglZCkgWyVkbXNdXG4iLCArK3JlbmRlckNvdW50LCB0aGlzLAorICAg
ICAgICAgICAgICAgbmVlZHNSZXNldCwgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXksICFt
X2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QuaXNFbXB0eSgpLAorICAgICAgICAgICAg
ICAgZGlydHlSZWN0LndpZHRoKCksIGRpcnR5UmVjdC5oZWlnaHQoKSwgaW50KHN0b3BXYXRjaC5l
bGFwc2VkKCkgKiAxMDAwKSk7CisgICAgICAgIHN0YXRpYyBpbnQgcmVuZGVyQ291bnQgPSAwOwor
ICAgICAgICBtX3RleHR1cmUtPnNhdmUoU3RyaW5nKCkuZm9ybWF0KCIvdG1wL2xheWVyXyVkLnBu
ZyIsIHJlbmRlckNvdW50KSk7CisjZW5kaWYKKyAgICB9CisgICAgbV9jdXJyZW50Q29udGVudC5u
ZWVkc0Rpc3BsYXkgPSBmYWxzZTsKKworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWlu
dFNlbGYoY29uc3QgVGV4bWFwUGFpbnRPcHRpb25zJiBvcHRpb25zKQoreworICAgIGlmICghbV9s
YXllciB8fCBtX3NpemUuaXNFbXB0eSgpIHx8ICghbV9zdGF0ZS5kcmF3c0NvbnRlbnQgJiYgbV9j
dXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbWFza1RleHR1cmUgPSBtX3N0YXRl
Lm1hc2tMYXllciA/IG1fc3RhdGUubWFza0xheWVyLT5tX3RleHR1cmUgOiAwOworICAgIFJlZlB0
cjxCaXRtYXBUZXh0dXJlPiByZXBsaWNhTWFza1RleHR1cmUgPSAwOworICAgIGlmIChtX3N0YXRl
LnJlcGxpY2FMYXllciAmJiBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5tYXNrTGF5ZXIp
CisgICAgICAgIHJlcGxpY2FNYXNrVGV4dHVyZSA9IG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0
YXRlLm1hc2tMYXllci0+bV90ZXh0dXJlOworCisgICAgY29uc3QgZmxvYXQgb3BhY2l0eSA9IG9w
dGlvbnMuaXNTdXJmYWNlID8gMSA6IG9wdGlvbnMub3BhY2l0eTsKKworICAgIHVwbG9hZFRleHR1
cmVGcm9tQ29udGVudChvcHRpb25zLnRleHR1cmVNYXBwZXIsIG9wdGlvbnMudmlzaWJsZVJlY3Qp
OworICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllciAmJiAhb3B0aW9ucy5pc1N1cmZhY2UpCisg
ICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUoKm1fdGV4dHVyZS5nZXQo
KSwgcmVwbGljYVJlY3QoKSwgbV90cmFuc2Zvcm1zLnJlcGxpY2EsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgb3BhY2l0eSAqIG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRlLm9wYWNpdHks
CisgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGljYU1hc2tUZXh0dXJlID8gcmVwbGljYU1h
c2tUZXh0dXJlLmdldCgpIDogbWFza1RleHR1cmUuZ2V0KCkpOworCisgICAgY29uc3QgSW50UmVj
dCByZWN0ID0gbV9sYXllclR5cGUgPT0gQ2xpcExheWVyID8gZW50aXJlUmVjdCgpIDogdGFyZ2V0
UmVjdCgpOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IG1fbGF5
ZXJUeXBlID09IENsaXBMYXllciA/IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkgOiBtX3RyYW5zZm9y
bXMudGFyZ2V0OworICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUoKm1fdGV4
dHVyZS5nZXQoKSwgcmVjdCwgdHJhbnNmb3JtLCBvcGFjaXR5LCBvcHRpb25zLmlzU3VyZmFjZSA/
IDAgOiBtYXNrVGV4dHVyZS5nZXQoKSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBh
aW50UmVjdXJzaXZlKFRleG1hcFBhaW50T3B0aW9ucyBvcHRpb25zKQoreworICAgIFdURjo6U3Rv
cFdhdGNoIHN0b3BXYXRjaDsKKworICAgIGJvb2wgaXNEaXJ0eSA9IG1fc3RhdGUuZGlydHk7Cisg
ICAgbV9zdGF0ZS5kaXJ0eSA9IGZhbHNlOworCisgICAgaWYgKChtX3NpemUuaXNFbXB0eSgpICYm
IChtX3N0YXRlLm1hc2tzVG9Cb3VuZHMKKyAgICAgICAgfHwgbV9jaGlsZHJlbi5pc0VtcHR5KCkp
KSB8fCAhbV9zdGF0ZS52aXNpYmxlIHx8IG9wdGlvbnMub3BhY2l0eSA8IDAuMDEgfHwgbV9zdGF0
ZS5vcGFjaXR5IDwgMC4wMSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW5pdGlhbGl6ZVRleHR1
cmVNYXBwZXIob3B0aW9ucy50ZXh0dXJlTWFwcGVyKTsKKyAgICBjb21wdXRlUmVwbGljYVRyYW5z
Zm9ybSgpOworCisgICAgaWYgKG1fc3RhdGUubWFza0xheWVyKSB7CisgICAgICAgIG1fc3RhdGUu
bWFza0xheWVyLT5pbml0aWFsaXplVGV4dHVyZU1hcHBlcihvcHRpb25zLnRleHR1cmVNYXBwZXIp
OworICAgICAgICBtX3N0YXRlLm1hc2tMYXllci0+bV9zdGF0ZS5kaXJ0eSA9IGZhbHNlOworICAg
IH0KKworICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllcikgeworICAgICAgICBtX3N0YXRlLnJl
cGxpY2FMYXllci0+aW5pdGlhbGl6ZVRleHR1cmVNYXBwZXIob3B0aW9ucy50ZXh0dXJlTWFwcGVy
KTsKKyAgICAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUuZGlydHkgPSBmYWxzZTsK
KyAgICAgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRlLm1hc2tMYXllcikgewor
ICAgICAgICAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUubWFza0xheWVyLT5pbml0
aWFsaXplVGV4dHVyZU1hcHBlcihvcHRpb25zLnRleHR1cmVNYXBwZXIpOworICAgICAgICAgICAg
bV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUubWFza0xheWVyLT5tX3N0YXRlLmRpcnR5ID0g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogcmVwbGlj
YSA9IG1fc3RhdGUucmVwbGljYUxheWVyOworICAgIGNvbnN0IGJvb2wgaXNTdXJmYWNlID0gKG1f
bGF5ZXJUeXBlID09IENsaXBMYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1f
bGF5ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgKG1fbGF5ZXJUeXBlID09IFJvb3RMYXllcgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmJiAob3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5hbGxvd1N1cmZhY2VGb3JSb290KCkg
fHwgbV9zdGF0ZS5oYXNTdXJmYWNlRGVzY2VuZGFudHMpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICkpOworICAgIGlmIChpc1N1cmZhY2UpCisgICAgICAgIHVwbG9hZFRleHR1cmVG
cm9tQ29udGVudChvcHRpb25zLnRleHR1cmVNYXBwZXIsIG9wdGlvbnMudmlzaWJsZVJlY3QpOwor
ICAgIGNvbnN0IEludFJlY3QgYm91bmRpbmdSZWN0ZnJvbU5lYXJlc3RTdXJmYWNlID0gbV90cmFu
c2Zvcm1zLnRhcmdldEJvdW5kaW5nUmVjdDsKKworICAgIG9wdGlvbnMub3BhY2l0eSAqPSBtX3N0
YXRlLm9wYWNpdHk7CisKKyAgICBUZXhtYXBQYWludE9wdGlvbnMgb3B0aW9uc0ZvckRlc2NlbmRh
bnRzKG9wdGlvbnMpOworICAgIG9wdGlvbnNGb3JEZXNjZW5kYW50cy5vcGFjaXR5ID0gaXNTdXJm
YWNlID8gMSA6IG9wdGlvbnMub3BhY2l0eTsKKyAgICBvcHRpb25zLmlzU3VyZmFjZSA9IGlzU3Vy
ZmFjZTsKKworICAgIGlmIChtX2xheWVyVHlwZSA9PSBDbGlwTGF5ZXIpIHsKKyAgICAgICAgb3B0
aW9uc0ZvckRlc2NlbmRhbnRzLnZpc2libGVSZWN0ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKS50
cmFuc2xhdGUoLWJvdW5kaW5nUmVjdGZyb21OZWFyZXN0U3VyZmFjZS54KCksIC1ib3VuZGluZ1Jl
Y3Rmcm9tTmVhcmVzdFN1cmZhY2UueSgpKS5tYXBSZWN0KG9wdGlvbnMudmlzaWJsZVJlY3QpOwor
ICAgICAgICBvcHRpb25zRm9yRGVzY2VuZGFudHMuc2Npc3NvclJlY3QgPSBJbnRSZWN0KDAsIDAs
IG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgIH0KKworICAgIGlmIChtX2xh
eWVyVHlwZSA9PSBTY2lzc29yTGF5ZXIpCisgICAgICAgIG9wdGlvbnNGb3JEZXNjZW5kYW50cy5z
Y2lzc29yUmVjdC5pbnRlcnNlY3QobV90cmFuc2Zvcm1zLnRhcmdldEJvdW5kaW5nUmVjdCk7Cisg
ICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5zZXRDbGlwKG9wdGlvbnNGb3JEZXNjZW5kYW50cy5z
Y2lzc29yUmVjdCk7CisKKyAgICBUZXh0dXJlTWFwcGVyQ2FjaGVMb2NrKG1fdGV4dHVyZS5nZXQo
KSk7CisgICAgVGV4dHVyZU1hcHBlckNhY2hlTG9jayhtX3N1cmZhY2UuZ2V0KCkpOworICAgIFRl
eHR1cmVNYXBwZXJDYWNoZUxvY2sobV9yZXBsaWNhU3VyZmFjZS5nZXQoKSk7CisKKyAgICBnVGV4
dHVyZU1hcHBlckNhY2hlLnB1cmdlKCk7CisKKyAgICBpZiAoaXNTdXJmYWNlKSB7CisgICAgICAg
IEFTU0VSVChtX3N1cmZhY2UpOworICAgICAgICBpZiAoIW1fc3VyZmFjZS0+aXNWYWxpZCgpKQor
ICAgICAgICAgICAgaXNEaXJ0eSA9IHRydWU7CisgICAgICAgIGlmIChtX3N0YXRlLnRpbGVkKSB7
CisgICAgICAgICAgICBtX3N1cmZhY2UtPnJlc2V0KG9wdGlvbnMudmlzaWJsZVJlY3Quc2l6ZSgp
KTsKKyAgICAgICAgICAgIG1fc3VyZmFjZS0+c2V0T2Zmc2V0KG9wdGlvbnMudmlzaWJsZVJlY3Qu
bG9jYXRpb24oKSk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNEaXJ0eSkKKyAgICAgICAgICAgIG1f
c3VyZmFjZS0+cmVzZXQobV9sYXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIgPyBvcHRpb25z
LnN1cmZhY2UtPnNpemUoKSA6IG1fc2l6ZSk7CisgICAgICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUu
bWFyayhtX3N1cmZhY2UuZ2V0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJp
bmRTdXJmYWNlKG1fc3VyZmFjZS5nZXQoKSk7CisKKyAgICAgICAgb3B0aW9uc0ZvckRlc2NlbmRh
bnRzLnN1cmZhY2UgPSBtX3N1cmZhY2UuZ2V0KCk7CisgICAgfSBlbHNlIGlmIChtX3N1cmZhY2Up
CisgICAgICAgIG1fc3VyZmFjZS0+ZGVzdHJveSgpOworCisgICAgUmVmUHRyPEJpdG1hcFRleHR1
cmU+IG1hc2tUZXh0dXJlOworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiByZXBsaWNhTWFza1Rl
eHR1cmU7CisgICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiBtYXNrID0gbV9zdGF0ZS5tYXNrTGF5
ZXIpIHsKKyAgICAgICAgbWFzay0+dXBsb2FkVGV4dHVyZUZyb21Db250ZW50KG9wdGlvbnMudGV4
dHVyZU1hcHBlciwgb3B0aW9ucy52aXNpYmxlUmVjdCk7CisgICAgICAgIG1hc2tUZXh0dXJlID0g
bWFzay0+bV90ZXh0dXJlOworICAgIH0KKworICAgIGlmIChyZXBsaWNhICYmIHJlcGxpY2EtPm1f
c3RhdGUubWFza0xheWVyKSB7CisgICAgICAgIHJlcGxpY2EtPm1fc3RhdGUubWFza0xheWVyLT51
cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQob3B0aW9ucy50ZXh0dXJlTWFwcGVyLCBvcHRpb25zLnZp
c2libGVSZWN0KTsKKyAgICAgICAgcmVwbGljYU1hc2tUZXh0dXJlID0gcmVwbGljYS0+bV9zdGF0
ZS5tYXNrTGF5ZXItPm1fdGV4dHVyZTsKKyAgICB9CisKKyAgICBpbnQgY2hpbGRyZW5TaXplID0g
bV9jaGlsZHJlbi5zaXplKCk7CisgICAgaWYgKGlzRGlydHkgfHwgIWlzU3VyZmFjZSB8fCBtX3N0
YXRlLnRpbGVkIHx8ICFtX3N1cmZhY2UtPmlzVmFsaWQoKSkgeworICAgICAgICBib29sIGRpZFBh
aW50U2VsZiA9IGZhbHNlOworICAgICAgICBpZiAoIW1fc3RhdGUucHJlc2VydmVzM0QgfHwgbV9j
aGlsZHJlbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHBhaW50U2VsZihvcHRpb25zKTsKKyAg
ICAgICAgICAgIGRpZFBhaW50U2VsZiA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bV9jaGlsZHJlbi5pc0VtcHR5KCkgJiYgIWlzU3VyZmFjZSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBpZiAobV9sYXllclR5cGUgPT0gU2Npc3NvckxheWVyKQorICAgICAgICAgICAg
b3B0aW9uc0ZvckRlc2NlbmRhbnRzLnNjaXNzb3JSZWN0LmludGVyc2VjdChtX3RyYW5zZm9ybXMu
dGFyZ2V0Lm1hcFJlY3QoSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdo
dCgpKSkpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW5TaXplOyArK2kp
IHsKKyAgICAgICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBsYXllciA9IG1fY2hpbGRyZW5baV07
CisgICAgICAgICAgICBpZiAoIWxheWVyKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICBpZiAoIWRpZFBhaW50U2VsZiAmJiBsYXllci0+bV90cmFuc2Zvcm1zLmNlbnRl
clogPj0gMCkgeworICAgICAgICAgICAgICAgIHBhaW50U2VsZihvcHRpb25zKTsKKyAgICAgICAg
ICAgICAgICBkaWRQYWludFNlbGYgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
bGF5ZXItPnBhaW50UmVjdXJzaXZlKG9wdGlvbnNGb3JEZXNjZW5kYW50cyk7CisgICAgICAgICAg
ICBpZiAoaXNTdXJmYWNlKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fc3VyZmFjZSk7Cisg
ICAgICAgICAgICAgICAgZ1RleHR1cmVNYXBwZXJDYWNoZS5tYXJrKG1fc3VyZmFjZS5nZXQoKSk7
CisgICAgICAgICAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShtX3N1
cmZhY2UuZ2V0KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghZGlk
UGFpbnRTZWxmKSB7CisgICAgICAgICAgICBwYWludFNlbGYob3B0aW9ucyk7CisgICAgICAgICAg
ICBkaWRQYWludFNlbGYgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fbGF5
ZXJUeXBlID09IFJvb3RMYXllciB8fCBtX2xheWVyVHlwZSA9PSBEZWZhdWx0TGF5ZXIgfHwgbV9s
YXllclR5cGUgPT0gU2Npc3NvckxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQo
bV9zdXJmYWNlKTsKKyAgICBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlID0gKm1fc3VyZmFjZS5nZXQo
KTsKKyAgICBpZiAocmVwbGljYSkgeworICAgICAgICBBU1NFUlQobV9yZXBsaWNhU3VyZmFjZSk7
CisgICAgICAgIG1fcmVwbGljYVN1cmZhY2UtPnJlc2V0KG9wdGlvbnMuc3VyZmFjZS0+c2l6ZSgp
KTsKKyAgICAgICAgbV9yZXBsaWNhU3VyZmFjZS0+c2V0T2Zmc2V0KG9wdGlvbnMuc3VyZmFjZS0+
b2Zmc2V0KCkpOworICAgICAgICBnVGV4dHVyZU1hcHBlckNhY2hlLm1hcmsobV9yZXBsaWNhU3Vy
ZmFjZS5nZXQoKSk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2Uo
bV9yZXBsaWNhU3VyZmFjZS5nZXQoKSk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+
ZHJhd1RleHR1cmUodGV4dHVyZSwgcmVwbGljYVJlY3QoKSwgbV90cmFuc2Zvcm1zLnJlcGxpY2Es
IHJlcGxpY2EtPm1fc3RhdGUub3BhY2l0eSwgcmVwbGljYU1hc2tUZXh0dXJlID8gcmVwbGljYU1h
c2tUZXh0dXJlLmdldCgpIDogbWFza1RleHR1cmUuZ2V0KCkpOworICAgICAgICBvcHRpb25zLnRl
eHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKHRleHR1cmUsIEludFJlY3QoSW50UG9pbnQoMCwgMCks
IG9wdGlvbnMuc3VyZmFjZS0+c2l6ZSgpKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgMS4wZiwg
bWFza1RleHR1cmUuZ2V0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRT
dXJmYWNlKG9wdGlvbnMuc3VyZmFjZSk7CisgICAgICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUubWFy
ayhvcHRpb25zLnN1cmZhY2UpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdU
ZXh0dXJlKCptX3JlcGxpY2FTdXJmYWNlLmdldCgpLCBJbnRSZWN0KEludFBvaW50KDAsIDApLCBv
cHRpb25zLnN1cmZhY2UtPnNpemUoKSksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIG9wdGlvbnMu
b3BhY2l0eSwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBvcHRpb25zLnRleHR1
cmVNYXBwZXItPmJpbmRTdXJmYWNlKG9wdGlvbnMuc3VyZmFjZSk7CisgICAgb3B0aW9ucy50ZXh0
dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSh0ZXh0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2xheWVyVHlwZSA9PSBUcmFuc3BhcmVuY3lMYXllciA/IEludFJlY3QoSW50UG9pbnQo
MCwgMCksIG9wdGlvbnMuc3VyZmFjZS0+c2l6ZSgpKSA6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRhcmdldFJlY3QoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9sYXll
clR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIgPyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpIDogbV90
cmFuc2Zvcm1zLnRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5v
cGFjaXR5LCBtYXNrVGV4dHVyZS5nZXQoKSk7CisgICAgZ1RleHR1cmVNYXBwZXJDYWNoZS5tYXJr
KCZ0ZXh0dXJlKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y2xlYW51cFRleHR1cmVN
YXBwZXIoKQoreworICAgIGlmIChtX3RleHR1cmUpCisgICAgICAgIG1fdGV4dHVyZS0+ZGVzdHJv
eSgpOworICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAgIG1fc3VyZmFjZS0+ZGVzdHJveSgpOwor
ICAgIGlmIChtX3JlcGxpY2FTdXJmYWNlKQorICAgICAgICBtX3JlcGxpY2FTdXJmYWNlLT5kZXN0
cm95KCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGlmIChtX2NoaWxkcmVuW2ldKQorICAgICAgICAgICAgbV9jaGlsZHJlbltpXS0+
Y2xlYW51cFRleHR1cmVNYXBwZXIoKTsKKyAgICB9CisgICAgaWYgKG1fbGFzdFRleHR1cmVNYXBw
ZXIpCisgICAgICAgIG1fbGFzdFRleHR1cmVNYXBwZXItPmNsZWFudXAoKTsKK30KKworVGV4dHVy
ZU1hcHBlck5vZGU6On5UZXh0dXJlTWFwcGVyTm9kZSgpCit7CisgICAgc2V0TmVlZHNEaXNwbGF5
KCk7CisgICAgeworICAgICAgICBjb25zdCBpbnQgY2hpbGRyZW5TaXplID0gbV9jaGlsZHJlbi5z
aXplKCk7CisgICAgICAgIGZvciAoaW50IGkgPSBjaGlsZHJlblNpemUtMTsgaSA+PSAwOyAtLWkp
IHsKKyAgICAgICAgICAgIEFTU0VSVChtX2NoaWxkcmVuW2ldLT5tX3BhcmVudCA9PSB0aGlzKTsK
KyAgICAgICAgICAgIG1fY2hpbGRyZW5baV0tPm1fcGFyZW50ID0gMDsKKyAgICAgICAgfQorICAg
IH0KKyAgICBpZiAobV9wYXJlbnQpCisgICAgICAgIG1fcGFyZW50LT5tX2NoaWxkcmVuLnJlbW92
ZShtX3BhcmVudC0+bV9jaGlsZHJlbi5maW5kKHRoaXMpKTsKK30KKwordm9pZCBUZXh0dXJlTWFw
cGVyTm9kZTo6bm90aWZ5Q2hhbmdlKENoYW5nZU1hc2sgY2hhbmdlTWFzaykKK3sKKyAgICBtX2No
YW5nZU1hc2sgfD0gY2hhbmdlTWFzazsKKyAgICBpZiAoIW1fbGF5ZXItPmNsaWVudCgpKQorICAg
ICAgICByZXR1cm47CisgICAgbV9sYXllci0+Y2xpZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZCht
X2xheWVyKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGVyZm9ybVBvc3RTeW5jT3Bl
cmF0aW9ucygpCit7CisgICAgY29uc3QgTGF5ZXJUeXBlIHByZXZMYXllclR5cGUgPSBtX2xheWVy
VHlwZTsKKyAgICBjb21wdXRlTGF5ZXJUeXBlKCk7CisgICAgaWYgKHByZXZMYXllclR5cGUgIT0g
bV9sYXllclR5cGUpCisgICAgICAgIG1fc3RhdGUuZGlydHkgPSB0cnVlOworICAgIGlmIChtX3Ry
YW5zZm9ybXMuZGlydHkpCisgICAgICAgIHNldE5lZWRzRGlzcGxheSgpOworCisgICAgY29tcHV0
ZVRyYW5zZm9ybWF0aW9ucygpOworICAgIGlmIChtX3N0YXRlLm1hc2tMYXllciAmJiAhbV9zdGF0
ZS5kaXJ0eSkKKyAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IG1fc3RhdGUubWFza0xheWVyLT5tX3N0
YXRlLmRpcnR5OworICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllciAmJiAhbV9zdGF0ZS5kaXJ0
eSkKKyAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRl
LmRpcnR5OworCisgICAgY29uc3QgaW50IHNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKKworICAg
IGZvciAoaW50IGkgPSBzaXplIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgVGV4dHVyZU1h
cHBlck5vZGUqIGxheWVyID0gbV9jaGlsZHJlbltpXTsKKworICAgICAgICBsYXllci0+cGVyZm9y
bVBvc3RTeW5jT3BlcmF0aW9ucygpOworICAgICAgICBpZiAoIW1fc3RhdGUuZGlydHkpCisgICAg
ICAgICAgICBtX3N0YXRlLmRpcnR5ID0gbGF5ZXItPm1fc3RhdGUuZGlydHk7CisgICAgfQorICAg
IG1fc3RhdGUuaGFzU3VyZmFjZURlc2NlbmRhbnRzID0gaGFzU3VyZmFjZURlc2NlbmRhbnRzKCk7
CisgICAgaWYgKG1fc3RhdGUuZGlydHkpCisgICAgICAgIG1fc3RhdGUuZGVzY2VuZGFudHNXaXRo
Q29udGVudCA9IGNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCgpOworCisgICAgaWYgKG1fc3Rh
dGUucHJlc2VydmVzM0QpCisgICAgICAgIHNvcnRCeVpPcmRlcihtX2NoaWxkcmVuLCAwLCBzaXpl
KTsKKyAgICBpZiAobV9zdGF0ZS5kaXJ0eSkgCisgICAgICAgIHNldE5lZWRzRGlzcGxheSgpOwor
fQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShib29sIHJl
Y3Vyc2UpCit7CisgICAgYm9vbCBuZWVkc1RvSW52YWxpZGF0ZVRyYW5zZm9ybSA9IGZhbHNlOwor
CisgICAgaWYgKCFtX2xheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jaGFuZ2VN
YXNrID09IE5vQ2hhbmdlcykKKyAgICAgICAgZ290byBhZnRlckN1cnJlbnRMYXllclN5bmM7CisK
KyAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBpZiAobV9wYXJlbnQpCisgICAgICAgIG1fcGFy
ZW50LT5tX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNv
bnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSAmJiAobV9jaGFuZ2VNYXNrICYgUGFyZW50Q2hh
bmdlKSkgeworICAgICAgICAvLyBUaGUgV2ViQ29yZSBjb21wb3NpdG9yIG1hbmFnZXMgaXRlbSBv
d25lcnNoaXAuIFdlIGhhdmUgdG8gbWFrZSBzdXJlIGdyYXBoaWNzdmlldyBkb2Vzbid0CisgICAg
ICAgIC8vIHRyeSB0byBzbmF0Y2ggdGhhdCBvd25lcnNoaXAuCisKKyAgICAgICAgaWYgKCFtX2xh
eWVyLT5wYXJlbnQoKSkKKyAgICAgICAgICAgIG1fcGFyZW50ID0gMDsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9wYXJlbnQgPSB0b1RleHR1cmVNYXBwZXJOb2RlKG1fbGF5ZXItPnBhcmVu
dCgpKTsKKworICAgICAgICBpZiAoIW1fbGF5ZXItPnBhcmVudCgpICYmIG1fcGFyZW50KSB7Cisg
ICAgICAgICAgICBzaXplX3QgaW5kZXggPSBtX3BhcmVudC0+bV9jaGlsZHJlbi5maW5kKHRoaXMp
OworICAgICAgICAgICAgbV9wYXJlbnQtPm1fY2hpbGRyZW4ucmVtb3ZlKGluZGV4KTsKKyAgICAg
ICAgfQorCisgICAgfQorCisgICAgaWYgKG1fY2hhbmdlTWFzayAmIENoaWxkcmVuQ2hhbmdlKSB7
CisgICAgICAgIG1fY2hpbGRyZW4uY2xlYXIoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2xheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAo
VGV4dHVyZU1hcHBlck5vZGUqIGNoaWxkID0gdG9UZXh0dXJlTWFwcGVyTm9kZShtX2xheWVyLT5j
aGlsZHJlbigpW2ldKSkgeworICAgICAgICAgICAgICAgIGlmICghY2hpbGQpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKGNo
aWxkKTsKKyAgICAgICAgICAgICAgICBjaGlsZC0+bV9wYXJlbnQgPSB0aGlzOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIG1fc3RhdGUuZGlydHkgPSB0cnVlOworICAgIH0KKwor
ICAgIGlmIChtX2NoYW5nZU1hc2sgJiAoU2l6ZUNoYW5nZSB8IENvbnRlbnRzUmVjdENoYW5nZSkp
IHsKKyAgICAgICAgSW50U2l6ZSB3YW50ZWRTaXplID0gSW50U2l6ZShtX2xheWVyLT5zaXplKCku
d2lkdGgoKSwgbV9sYXllci0+c2l6ZSgpLmhlaWdodCgpKTsKKyAgICAgICAgaWYgKHdhbnRlZFNp
emUuaXNFbXB0eSgpICYmIG1fcGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRl
bnRUeXBlKQorICAgICAgICAgICAgd2FudGVkU2l6ZSA9IEludFNpemUobV9sYXllci0+Y29udGVu
dHNSZWN0KCkud2lkdGgoKSwgbV9sYXllci0+Y29udGVudHNSZWN0KCkuaGVpZ2h0KCkpOworCisg
ICAgICAgIGlmICh3YW50ZWRTaXplICE9IG1fc2l6ZSkgeworICAgICAgICAgICAgbV9zaXplID0g
SW50U2l6ZSh3YW50ZWRTaXplLndpZHRoKCksIHdhbnRlZFNpemUuaGVpZ2h0KCkpOworICAgICAg
ICAgICAgaWYgKG1fcGxhdGZvcm1DbGllbnQpCisgICAgICAgICAgICAgICAgbV9wbGF0Zm9ybUNs
aWVudC0+c2V0U2l6ZUNoYW5nZWQobV9zaXplKTsKKyAgICAgICAgICAgIGNvbnN0IGJvb2wgbmVl
ZHNUaWxpbmcgPSBtX3NpemUud2lkdGgoKSA+IDIwMDAgfHwgbV9zaXplLmhlaWdodCgpID4gMjAw
MDsKKyAgICAgICAgICAgIGlmIChtX3N0YXRlLnRpbGVkICE9IG5lZWRzVGlsaW5nKQorICAgICAg
ICAgICAgICAgIG1fc3RhdGUudGlsZWQgPSBuZWVkc1RpbGluZzsKKyAgICAgICAgICAgIG1fc3Rh
dGUuZGlydHkgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fY2hhbmdlTWFz
ayAmIE1hc2tMYXllckNoYW5nZSkgeworICAgICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSogbGF5
ZXIgPSB0b1RleHR1cmVNYXBwZXJOb2RlKG1fbGF5ZXItPm1hc2tMYXllcigpKSkKKyAgICAgICAg
ICAgbGF5ZXItPm1fZWZmZWN0VGFyZ2V0ID0gdGhpczsKKyAgICB9CisKKyAgICBpZiAobV9jaGFu
Z2VNYXNrICYgUmVwbGljYUxheWVyQ2hhbmdlKSB7CisgICAgICAgaWYgKFRleHR1cmVNYXBwZXJO
b2RlKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlck5vZGUobV9sYXllci0+cmVwbGljYUxheWVyKCkp
KQorICAgICAgICAgICBsYXllci0+bV9lZmZlY3RUYXJnZXQgPSB0aGlzOworICAgIH0KKworICAg
IGlmIChtX2NoYW5nZU1hc2sgJiAoVHJhbnNmb3JtQ2hhbmdlIHwgU2l6ZUNoYW5nZSB8IEFuY2hv
clBvaW50Q2hhbmdlIHwgUG9zaXRpb25DaGFuZ2UpKQorICAgICAgICBtX3RyYW5zZm9ybXMubG9j
YWxEaXJ0eSA9IHRydWU7CisKKyAgICBpZiAobV9jaGFuZ2VNYXNrICYgKENoaWxkcmVuVHJhbnNm
b3JtQ2hhbmdlIHwgU2l6ZUNoYW5nZSkpCisgICAgICAgIG1fdHJhbnNmb3Jtcy5wZXJzcGVjdGl2
ZURpcnR5ID0gdHJ1ZTsKKworICAgIGlmIChtX2NoYW5nZU1hc2sgJiAoQ2hpbGRyZW5UcmFuc2Zv
cm1DaGFuZ2UgfCBQcmVzZXJ2ZXMzRENoYW5nZSB8IFRyYW5zZm9ybUNoYW5nZSB8IEFuY2hvclBv
aW50Q2hhbmdlIHwgU2l6ZUNoYW5nZSB8IENvbnRlbnRzUmVjdENoYW5nZSB8IEJhY2tmYWNlVmlz
aWJpbGl0eUNoYW5nZSB8IFBvc2l0aW9uQ2hhbmdlIHwgTWFza0xheWVyQ2hhbmdlIHwgRHJhd3ND
b250ZW50Q2hhbmdlIHwgQ29udGVudENoYW5nZSB8IFJlcGxpY2FMYXllckNoYW5nZSkpICAgIHsK
KyAgICAgICAgLy8gRHVlIHRvIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB3YXkgV2ViQ29y
ZSBoYW5kbGVzIHRyYW5zZm9ybXMgYW5kIHRoZSB3YXkgUXQgaGFuZGxlcyB0cmFuc2Zvcm1zLAor
ICAgICAgICAvLyBhbGwgdGhlc2UgZWxlbWVudHMgYWZmZWN0IHRoZSB0cmFuc2Zvcm1zIG9mIGFs
bCB0aGUgZGVzY2VuZGFudHMuCisgICAgICAgIG5lZWRzVG9JbnZhbGlkYXRlVHJhbnNmb3JtID0g
dHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9jaGFuZ2VNYXNrICYgRGlzcGxheUNoYW5nZSkgCisg
ICAgICAgIG1fc3RhdGUuZGlydHkgPSB0cnVlOworCisgICAgbV9zdGF0ZS5tYXNrTGF5ZXIgPSB0
b1RleHR1cmVNYXBwZXJOb2RlKG1fbGF5ZXItPm1hc2tMYXllcigpKTsKKyAgICBtX3N0YXRlLnJl
cGxpY2FMYXllciA9IHRvVGV4dHVyZU1hcHBlck5vZGUobV9sYXllci0+cmVwbGljYUxheWVyKCkp
OworICAgIG1fc3RhdGUucG9zID0gbV9sYXllci0+cG9zaXRpb24oKTsKKyAgICBtX3N0YXRlLmFu
Y2hvclBvaW50ID0gbV9sYXllci0+YW5jaG9yUG9pbnQoKTsKKyAgICBtX3N0YXRlLnNpemUgPSBt
X2xheWVyLT5zaXplKCk7CisgICAgbV9zdGF0ZS50cmFuc2Zvcm0gPSBtX2xheWVyLT50cmFuc2Zv
cm0oKTsKKyAgICBtX3N0YXRlLmNvbnRlbnRzUmVjdCA9IG1fbGF5ZXItPmNvbnRlbnRzUmVjdCgp
OworICAgIG1fc3RhdGUub3BhY2l0eSA9IG1fbGF5ZXItPm9wYWNpdHkoKTsKKyAgICBtX3N0YXRl
LmNvbnRlbnRzUmVjdCA9IG1fbGF5ZXItPmNvbnRlbnRzUmVjdCgpOworICAgIG1fc3RhdGUucHJl
c2VydmVzM0QgPSBtX2xheWVyLT5wcmVzZXJ2ZXMzRCgpOworICAgIG1fc3RhdGUubWFza3NUb0Jv
dW5kcyA9IG1fbGF5ZXItPm1hc2tzVG9Cb3VuZHMoKTsKKyAgICBtX3N0YXRlLmRyYXdzQ29udGVu
dCA9IG1fbGF5ZXItPmRyYXdzQ29udGVudCgpOworICAgIG1fc3RhdGUuY29udGVudHNPcGFxdWUg
PSBtX2xheWVyLT5jb250ZW50c09wYXF1ZSgpOworICAgIG1fc3RhdGUuYmFja2ZhY2VWaXNpYmls
aXR5ID0gbV9sYXllci0+YmFja2ZhY2VWaXNpYmlsaXR5KCk7CisgICAgbV9zdGF0ZS5jaGlsZHJl
blRyYW5zZm9ybSA9IG1fbGF5ZXItPmNoaWxkcmVuVHJhbnNmb3JtKCk7CisgICAgbV9jdXJyZW50
Q29udGVudC5jb250ZW50VHlwZSA9IG1fcGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGU7CisgICAg
bV9jdXJyZW50Q29udGVudC5pbWFnZSA9IG1fcGVuZGluZ0NvbnRlbnQuaW1hZ2U7CisgICAgbV9j
dXJyZW50Q29udGVudC5tZWRpYSA9IG1fcGVuZGluZ0NvbnRlbnQubWVkaWE7CisgICAgbV9jdXJy
ZW50Q29udGVudC5iYWNrZ3JvdW5kQ29sb3IgPSBtX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRD
b2xvcjsKKyAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSA9IG1fY3VycmVudENvbnRl
bnQubmVlZHNEaXNwbGF5IHx8IG1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5OworICAgIG1f
Y3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdC51bml0ZShtX3BlbmRpbmdDb250ZW50Lm5l
ZWRzRGlzcGxheVJlY3QpOworICAgIG1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5ID0gZmFs
c2U7CisgICAgbV9wZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXlSZWN0ID0gSW50UmVjdCgpOwor
ICAgIG1fY2hhbmdlTWFzayA9IE5vQ2hhbmdlczsKKyAgICBhZnRlckN1cnJlbnRMYXllclN5bmM6
CisgICAgaWYgKG5lZWRzVG9JbnZhbGlkYXRlVHJhbnNmb3JtKQorICAgICAgICBpbnZhbGlkYXRl
VHJhbnNmb3JtKCk7CisKKyAgICBpZiAobV9zdGF0ZS5tYXNrTGF5ZXIpIHsKKyAgICAgICAgbV9z
dGF0ZS5tYXNrTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKGZhbHNlKTsKKyAgICAgICAgaWYg
KG1fc3RhdGUubWFza0xheWVyLT5tX3NpemUuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9zdGF0
ZS5tYXNrTGF5ZXItPm1fc2l6ZSA9IG1fc2l6ZTsKKyAgICB9CisKKyAgICBpZiAobV9zdGF0ZS5y
ZXBsaWNhTGF5ZXIpCisgICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5zeW5jQ29tcG9zaXRp
bmdTdGF0ZShmYWxzZSk7CisKKyNpZiAwCisgICAgaWYgKG1fc3RhdGUuZGlydHkgJiYgbV90ZXh0
dXJlICYmIG1fdGV4dHVyZS0+YWxsb3dPZmZsaW5lVGV4dHVyZVVwbG9hZCgpKQorICAgICAgICB1
cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQoMCk7CisjZW5kaWYKKworICAgIGlmICghcmVjdXJzZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgaW50IGNoaWxkcmVuU2l6ZSA9IG1fY2hpbGRy
ZW4uc2l6ZSgpOworICAgIGZvciAoaW50IGkgPSBjaGlsZHJlblNpemUtMTsgaSA+PSAwOyAtLWkp
CisgICAgICAgIG1fY2hpbGRyZW5baV0tPnN5bmNDb21wb3NpdGluZ1N0YXRlKHRydWUpOworfQor
CitHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIo
R3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQorICAgIDogR3JhcGhpY3NMYXllcihjbGllbnQp
CisgICAgLCBtX25vZGUobmV3IFRleHR1cmVNYXBwZXJOb2RlKHRoaXMpKQoreworfQorCit2b2lk
IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkK
K3sKKyAgICBtX25vZGUtPm1fbmFtZSA9IG5hbWU7Cit9CisKK0dyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyOjp+R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoKQoreworfQorCisvKiBccmVpbXAg
KEdyYXBoaWNzTGF5ZXIuaCk6IFRoZSBjdXJyZW50IHNpemUgbWlnaHQgY2hhbmdlLCB0aHVzIHdl
IG5lZWQgdG8gdXBkYXRlIHRoZSB3aG9sZSBkaXNwbGF5LgorKi8KK3ZvaWQgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAgbV9ub2RlLT5tX3BlbmRp
bmdDb250ZW50Lm5lZWRzRGlzcGxheSA9IHRydWU7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2Uo
VGV4dHVyZU1hcHBlck5vZGU6OkRpc3BsYXlDaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBo
aWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROZWVk
c0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmIChtX25vZGUt
Pm1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5KQorICAgICAgICByZXR1cm47CisgICAgbV9u
b2RlLT5tX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QudW5pdGUoSW50UmVjdChyZWN0
KSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkRpc3BsYXlD
aGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRQYXJlbnQoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7
CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlBhcmVudENoYW5n
ZSk7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0UGFyZW50KGxheWVyKTsKK30KKworLyogXHJlaW1w
IChHcmFwaGljc0xheWVyLmgpCisqLworYm9vbCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6
c2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRyZW4pCit7Cisg
ICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNoaWxkcmVuQ2hhbmdl
KTsKKyAgICByZXR1cm4gR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOworfQor
CisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyOjphZGRDaGlsZChHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBtX25vZGUt
Pm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOworICAgIEdy
YXBoaWNzTGF5ZXI6OmFkZENoaWxkKGxheWVyKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xh
eWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRBdElu
ZGV4KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBpbnQgaW5kZXgpCit7CisgICAgR3JhcGhpY3NMYXll
cjo6YWRkQ2hpbGRBdEluZGV4KGxheWVyLCBpbmRleCk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFu
Z2UoVGV4dHVyZU1hcHBlck5vZGU6OkNoaWxkcmVuQ2hhbmdlKTsKK30KKworLyogXHJlaW1wIChH
cmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRk
Q2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykK
K3sKKyAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZShsYXllciwgc2libGluZyk7Cisg
ICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDaGlsZHJlbkNoYW5n
ZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkQmVsb3coR3JhcGhpY3NMYXllciogbGF5ZXIsIEdy
YXBoaWNzTGF5ZXIqIHNpYmxpbmcpCit7CisKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEJl
bG93KGxheWVyLCBzaWJsaW5nKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFw
cGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIu
aCkKKyovCitib29sIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpyZXBsYWNlQ2hpbGQoR3Jh
cGhpY3NMYXllciogb2xkQ2hpbGQsIEdyYXBoaWNzTGF5ZXIqIG5ld0NoaWxkKQoreworICAgIGlm
IChHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQob2xkQ2hpbGQsIG5ld0NoaWxkKSkgeworICAg
ICAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFu
Z2UpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXI6OnJlbW92ZUZyb21QYXJlbnQoKQoreworICAgIGlmICghcGFyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9k
ZTo6UGFyZW50Q2hhbmdlKTsKKyAgICBHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCk7
Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OnNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKiB2YWx1ZSkKK3sKKyAg
ICBpZiAodmFsdWUgPT0gbWFza0xheWVyKCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGlj
c0xheWVyOjpzZXRNYXNrTGF5ZXIodmFsdWUpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRl
eHR1cmVNYXBwZXJOb2RlOjpNYXNrTGF5ZXJDaGFuZ2UpOworfQorCisKKy8qIFxyZWltcCAoR3Jh
cGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldFJl
cGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9
PSByZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dFJlcGxpY2F0ZWRCeUxheWVyKHZhbHVlKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0
dXJlTWFwcGVyTm9kZTo6UmVwbGljYUxheWVyQ2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFw
aGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0UG9z
aXRpb24oY29uc3QgRmxvYXRQb2ludCYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IHBvc2l0
aW9uKCkpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbih2
YWx1ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlBvc2l0
aW9uQ2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2lu
dDNEJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gYW5jaG9yUG9pbnQoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEFuY2hvclBvaW50KHZhbHVlKTsKKyAgICBt
X25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6QW5jaG9yUG9pbnRDaGFuZ2Up
OworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgdmFsdWUpCit7CisgICAg
aWYgKHZhbHVlID09IHNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXll
cjo6c2V0U2l6ZSh2YWx1ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBl
ck5vZGU6OlNpemVDaGFuZ2UpOworfQorCisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyov
Cit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSB0cmFuc2Zvcm0o
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKHZh
bHVlKTsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6VHJhbnNm
b3JtQ2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBjaGlsZHJlblRy
YW5zZm9ybSgpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRy
ZW5UcmFuc2Zvcm0odmFsdWUpOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBw
ZXJOb2RlOjpDaGlsZHJlblRyYW5zZm9ybUNoYW5nZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhp
Y3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldFByZXNl
cnZlczNEKGJvb2wgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IHByZXNlcnZlczNEKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRCh2YWx1ZSk7
CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlByZXNlcnZlczNE
Q2hhbmdlKTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TWFza3NUb0JvdW5kcyhib29sIHZhbHVlKQorewor
ICAgIGlmICh2YWx1ZSA9PSBtYXNrc1RvQm91bmRzKCkpCisgICAgICAgIHJldHVybjsKKyAgICBH
cmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKHZhbHVlKTsKKyAgICBtX25vZGUtPm5vdGlm
eUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6TWFza3NUb0JvdW5kc0NoYW5nZSk7Cit9CisKKy8q
IFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXI6OnNldERyYXdzQ29udGVudChib29sIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBk
cmF3c0NvbnRlbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdl
KFRleHR1cmVNYXBwZXJOb2RlOjpEcmF3c0NvbnRlbnRDaGFuZ2UpOworICAgIEdyYXBoaWNzTGF5
ZXI6OnNldERyYXdzQ29udGVudCh2YWx1ZSk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXll
ci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldEJhY2tncm91bmRD
b2xvcihjb25zdCBDb2xvciYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IG1fbm9kZS0+bV9w
ZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5kQ29sb3IpCisgICAgICAgIHJldHVybjsKKyAgICBtX25v
ZGUtPm1fcGVuZGluZ0NvbnRlbnQuYmFja2dyb3VuZENvbG9yID0gdmFsdWU7CisgICAgR3JhcGhp
Y3NMYXllcjo6c2V0QmFja2dyb3VuZENvbG9yKHZhbHVlKTsKKyAgICBtX25vZGUtPm5vdGlmeUNo
YW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6QmFja2dyb3VuZENvbG9yQ2hhbmdlKTsKK30KKworLyog
XHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6Y2xlYXJCYWNrZ3JvdW5kQ29sb3IoKQoreworICAgIGlmICghbV9ub2RlLT5tX3BlbmRp
bmdDb250ZW50LmJhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQuYmFja2dyb3VuZENvbG9yID0gQ29sb3IoKTsKKyAg
ICBHcmFwaGljc0xheWVyOjpjbGVhckJhY2tncm91bmRDb2xvcigpOworICAgIG1fbm9kZS0+bm90
aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpCYWNrZ3JvdW5kQ29sb3JDaGFuZ2UpOworfQor
CisvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKKyovCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyOjpzZXRDb250ZW50c09wYXF1ZShib29sIHZhbHVlKQoreworICAgIGlmICh2YWx1
ZSA9PSBjb250ZW50c09wYXF1ZSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9ub2RlLT5ub3Rp
ZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRzT3BhcXVlQ2hhbmdlKTsKKyAgICBH
cmFwaGljc0xheWVyOjpzZXRDb250ZW50c09wYXF1ZSh2YWx1ZSk7Cit9CisKKy8qIFxyZWltcCAo
R3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNl
dEJhY2tmYWNlVmlzaWJpbGl0eShib29sIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBiYWNr
ZmFjZVZpc2liaWxpdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dEJhY2tmYWNlVmlzaWJpbGl0eSh2YWx1ZSk7CisgICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4
dHVyZU1hcHBlck5vZGU6OkJhY2tmYWNlVmlzaWJpbGl0eUNoYW5nZSk7Cit9CisKKy8qIFxyZWlt
cCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OnNldE9wYWNpdHkoZmxvYXQgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IG9wYWNpdHkoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkodmFsdWUpOwor
ICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpPcGFjaXR5Q2hhbmdl
KTsKK30KKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisqLwordm9pZCBHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHZhbHVlKQor
eworICAgIGlmICh2YWx1ZSA9PSBjb250ZW50c1JlY3QoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdCh2YWx1ZSk7CisgICAgbV9ub2RlLT5ub3Rp
ZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRzUmVjdENoYW5nZSk7Cit9CisKKy8q
IFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXI6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCit7CisgICAgbV9ub2RlLT5u
b3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRDaGFuZ2UpOworICAgIG1fbm9k
ZS0+bV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSA9IGltYWdlID8gVGV4dHVyZU1hcHBlck5v
ZGU6OkRpcmVjdEltYWdlQ29udGVudFR5cGUgOiBUZXh0dXJlTWFwcGVyTm9kZTo6SFRNTENvbnRl
bnRUeXBlOworICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5pbWFnZSA9IGltYWdlOworICAg
IEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZShpbWFnZSk7Cit9CisKKy8qIFxyZWlt
cCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OnNldENvbnRlbnRzQmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBt
X25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudENoYW5nZSk7Cisg
ICAgbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlID0gVGV4dHVyZU1hcHBlck5v
ZGU6OkNvbG9yQ29udGVudFR5cGU7CisgICAgbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50LmJhY2tn
cm91bmRDb2xvciA9IGNvbG9yOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzQmFja2dy
b3VuZENvbG9yKGNvbG9yKTsKK30KKworCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
OjpzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciogbWVkaWEpCit7CisgICAgR3JhcGhp
Y3NMYXllcjo6c2V0Q29udGVudHNUb01lZGlhKG1lZGlhKTsKKyAgICBtX25vZGUtPm5vdGlmeUNo
YW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudENoYW5nZSk7CisgICAgbV9ub2RlLT5tX3Bl
bmRpbmdDb250ZW50LmNvbnRlbnRUeXBlID0gbWVkaWEgPyBUZXh0dXJlTWFwcGVyTm9kZTo6TWVk
aWFDb250ZW50VHlwZSA6IFRleHR1cmVNYXBwZXJOb2RlOjpIVE1MQ29udGVudFR5cGU7CisgICAg
aWYgKG1lZGlhKQorICAgICAgICBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQubWVkaWEgPSBzdGF0
aWNfY2FzdDxUZXh0dXJlTWFwcGVyVmlkZW9MYXllcio+KG1lZGlhKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5tZWRpYSA9IDA7Cit9CisKKy8qIFxyZWltcCAo
R3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNl
dENvbnRlbnRzT3JpZW50YXRpb24oQ29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIG9y
aWVudGF0aW9uKQoreworICAgIGlmIChjb250ZW50c09yaWVudGF0aW9uKCkgPT0gb3JpZW50YXRp
b24pCisgICAgICAgIHJldHVybjsKKyAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFw
cGVyTm9kZTo6Q29udGVudHNPcmllbnRhdGlvbkNoYW5nZSk7CisgICAgR3JhcGhpY3NMYXllcjo6
c2V0Q29udGVudHNPcmllbnRhdGlvbihvcmllbnRhdGlvbik7Cit9CisKKy8qIFxyZWltcCAoR3Jh
cGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnN5bmND
b21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCit7CisgICAgbV9ub2RlLT5zeW5jQ29t
cG9zaXRpbmdTdGF0ZShmYWxzZSk7CisgICAgbV9ub2RlLT5wZXJmb3JtUG9zdFN5bmNPcGVyYXRp
b25zKCk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8KK3ZvaWQgR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlKCkKK3sKKyAgICBHcmFw
aGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOworICAgIG1fbm9kZS0+c3luY0NvbXBv
c2l0aW5nU3RhdGUodHJ1ZSk7CisgICAgbV9ub2RlLT5wZXJmb3JtUG9zdFN5bmNPcGVyYXRpb25z
KCk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorICovCitOYXRpdmVMYXllciBH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6bmF0aXZlTGF5ZXIoKSBjb25zdAoreworICAgIHJl
dHVybiBtX25vZGUuZ2V0KCk7Cit9CisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorKi8K
K1BsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUxheWVy
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ub2RlLmdldCgpOworfQorCitQYXNzT3duUHRyPEdy
YXBoaWNzTGF5ZXI+IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShHcmFwaGljc0xheWVyQ2xpZW50KiBj
bGllbnQpCit7CisgICAgcmV0dXJuIG5ldyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihjbGll
bnQpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4xYTE1OGYzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaApAQCAtMCww
ICsxLDk2IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyX2gKKyNkZWZpbmUgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXJfaAorCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzTGF5ZXJDbGllbnQuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorCisjaWYg
RU5BQkxFKDNEX0NBTlZBUykKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2VuZGlm
CisKKyNkZWZpbmUgRU5BQkxFX1RFWE1BUF9BTklNQVRJT04gMAorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFRleHR1cmVNYXBwZXJOb2RlOworY2xhc3MgQml0bWFwVGV4dHVyZTsKK2Ns
YXNzIFRleHR1cmVNYXBwZXI7CisKK2NsYXNzIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyIDog
cHVibGljIEdyYXBoaWNzTGF5ZXIgeworICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVyTm9k
ZTsKKworcHVibGljOgorICAgIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKEdyYXBoaWNzTGF5
ZXJDbGllbnQqKTsKKyAgICB2aXJ0dWFsIH5HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcigpOwor
CisgICAgLy8gcmVpbXBzIGZyb20gR3JhcGhpY3NMYXllci5oCisgICAgdmlydHVhbCB2b2lkIHNl
dE5lZWRzRGlzcGxheSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3Qo
Y29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChHcmFwaGljc0xh
eWVyKiBsYXllcik7CisgICAgdmlydHVhbCBib29sIHNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxH
cmFwaGljc0xheWVyKj4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoR3JhcGhpY3NMYXll
ciopOworICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllciosIGlu
dCBpbmRleCk7CisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkQWJvdmUoR3JhcGhpY3NMYXllciog
bGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpOworICAgIHZpcnR1YWwgdm9pZCBhZGRDaGls
ZEJlbG93KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFw
aGljc0xheWVyKiBuZXdDaGlsZCk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyb21QYXJlbnQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcCk7CisgICAg
dmlydHVhbCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgcCk7CisgICAg
dmlydHVhbCB2b2lkIHNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29sIGIpOworICAgIHZp
cnR1YWwgdm9pZCBzZXRNYXNrc1RvQm91bmRzKGJvb2wgYik7CisgICAgdmlydHVhbCB2b2lkIHNl
dERyYXdzQ29udGVudChib29sIGIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kQ29s
b3IoY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJCYWNrZ3JvdW5kQ29sb3Io
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNPcGFxdWUoYm9vbCBiKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wgYik7CisgICAgdmlydHVhbCB2b2lk
IHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSk7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRz
UmVjdChjb25zdCBJbnRSZWN0JiByKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmVwbGljYXRlZEJ5
TGF5ZXIoR3JhcGhpY3NMYXllciopOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1h
Z2UoSW1hZ2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3Jt
TGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNCYWNrZ3JvdW5kQ29sb3IoY29u
c3QgQ29sb3ImKTsKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorICAgIHZpcnR1YWwgdm9pZCBzZXRD
b250ZW50c1RvR3JhcGhpY3NDb250ZXh0M0QoY29uc3QgR3JhcGhpY3NDb250ZXh0M0QqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0M0ROZWVkc0Rpc3BsYXkoKTsKKyNlbmRp
ZgorICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c09yaWVudGF0aW9uKENvbXBvc2l0aW5nQ29v
cmRpbmF0ZXNPcmllbnRhdGlvbiBvcmllbnRhdGlvbik7CisgICAgdmlydHVhbCB2b2lkIHN5bmND
b21wb3NpdGluZ1N0YXRlKCk7CisgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRl
Rm9yVGhpc0xheWVyT25seSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmlu
ZyYgbmFtZSk7CisgICAgdmlydHVhbCBOYXRpdmVMYXllciBuYXRpdmVMYXllcigpIGNvbnN0Owor
ICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OworCisgICAg
dmlydHVhbCBib29sIGFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0
IEludFNpemUmIC8qYm94U2l6ZSovLCBjb25zdCBBbmltYXRpb24qLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiAvKmtleWZyYW1lc05hbWUqLywgZG91YmxlIC8q
dGltZU9mZnNldCovKSB7IHJldHVybiBmYWxzZTsgfQorCitwcml2YXRlOgorICAgIE93blB0cjxU
ZXh0dXJlTWFwcGVyTm9kZT4gbV9ub2RlOworfTsKKworfQorI2VuZGlmIC8vIEdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2Mx
YzZkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlci5oCkBAIC0wLDAgKzEsMTIwIEBACisvKgorIENvcHlyaWdodCAoQykgMjAx
MCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBUZXh0dXJlTWFwcGVyX2gKKyNkZWZpbmUgVGV4dHVy
ZU1hcHBlcl9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaWYgKGRlZmlu
ZWQoUVRfT1BFTkdMX0xJQikpCisgICAgI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpICYmICFk
ZWZpbmVkKFRFWE1BUF9PUEVOR0xfRVNfMikKKyAgICAgICAgI2RlZmluZSBURVhNQVBfT1BFTkdM
X0VTXzIKKyAgICAjZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorCisvKgorICAgIFRleHR1cmVNYXBwZXIgaXMgYSBtZWNo
YW5pc20gdGhhdCBlbmFibGVzIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBvZiBDU1MgYW5pbWF0aW9u
cyAoYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcpIHdpdGhvdXQKKyAgICBhIG5lZWQgZm9yIGEgcGxh
dGZvcm0gc3BlY2lmaWMgc2NlbmUtZ3JhcGggbGlicmFyeSBsaWtlIENvcmVBbmltYXRpb25zIG9y
IFFHcmFwaGljc1ZpZXcuCisqLworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHR1
cmVNYXBwZXI7CisKKy8vIEEgMkQgdGV4dHVyZSB0aGF0IGNhbiBiZSB0aGUgdGFyZ2V0IG9mIHNv
ZnR3YXJlIG9yIEdMIHJlbmRlcmluZy4KK2NsYXNzIEJpdG1hcFRleHR1cmUgIDogcHVibGljIFJl
ZkNvdW50ZWQ8Qml0bWFwVGV4dHVyZT4geworcHVibGljOgorICAgIEJpdG1hcFRleHR1cmUoKSA6
IG1fbG9ja0NvdW50KDApIHt9CisgICAgdmlydHVhbCB+Qml0bWFwVGV4dHVyZSgpIHsgfQorCisg
ICAgdmlydHVhbCBib29sIGFsbG93T2ZmbGluZVRleHR1cmVVcGxvYWQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCkgPSAwOworICAgIHZpcnR1YWwg
SW50U2l6ZSBzaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXNldChjb25zdCBJbnRTaXplJiBzaXplLCBib29s
IG9wYXF1ZSA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgbV9pc09wYXF1ZSA9IG9wYXF1ZTsKKyAg
ICAgICAgbV9jb250ZW50U2l6ZSA9IHNpemU7CisgICAgfQorCisgICAgdmlydHVhbCBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnQoKSA9IDA7CisgICAgdmlydHVhbCBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludE1lZGlhKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBiZWdpblBhaW50KEludFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQo
KSkpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKikg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBzYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpIHsgcmV0
dXJuIGZhbHNlOyB9CisKKyAgICBpbmxpbmUgdm9pZCBsb2NrKCkgeyArK21fbG9ja0NvdW50OyB9
CisgICAgaW5saW5lIHZvaWQgdW5sb2NrKCkgeyAtLW1fbG9ja0NvdW50OyB9CisgICAgaW5saW5l
IGJvb2wgaXNMb2NrZWQoKSB7IHJldHVybiBtX2xvY2tDb3VudDsgfQorICAgIGlubGluZSBJbnRT
aXplIGNvbnRlbnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50U2l6ZTsgfQorICAgIGlu
bGluZSB2b2lkIHNldE9mZnNldChjb25zdCBJbnRQb2ludCYgbykgeyBtX29mZnNldCA9IG87IH0K
KyAgICBpbmxpbmUgSW50UG9pbnQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0K
K3ByaXZhdGU6CisgICAgaW50IG1fbG9ja0NvdW50OworICAgIEludFNpemUgbV9jb250ZW50U2l6
ZTsKKyAgICBib29sIG1faXNPcGFxdWU7CisgICAgSW50UG9pbnQgbV9vZmZzZXQ7Cit9OworCisv
LyBBICJjb250ZXh0IiBjbGFzcyB1c2VkIHRvIGVuY2Fwc3VsYXRlIGFjY2VsZXJhdGVkIHRleHR1
cmUgbWFwcGluZyBmdW5jdGlvbnM6IGkuZS4gZHJhd2luZyBhIHRleHR1cmUKKy8vIG9udG8gdGhl
IHNjcmVlbiBvciBpbnRvIGFub3RoZXIgdGV4dHVyZSB3aXRoIGEgc3BlY2lmaWVkIHRyYW5zZm9y
bSwgb3BhY2l0eSBhbmQgbWFzay4KK2NsYXNzIFRleHR1cmVNYXBwZXIgOiBwdWJsaWMgUmVmQ291
bnRlZDxUZXh0dXJlTWFwcGVyPiB7CisgICAgZnJpZW5kIGNsYXNzIEJpdG1hcFRleHR1cmU7CisK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyPiBjcmVhdGUoR3Jh
cGhpY3NDb250ZXh0Kik7CisgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlcigpIHsgfQorCisgICAg
dmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNv
bnN0IEludFJlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCA9
IFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGZsb2F0IG9wYWNpdHkgPSAxLjBmLCBjb25zdCBCaXRt
YXBUZXh0dXJlKiBtYXNrVGV4dHVyZSA9IDApID0gMDsKKworICAgIC8vIG1ha2VzIGEgc3VyZmFj
ZSB0aGUgdGFyZ2V0IGZvciB0aGUgZm9sbG93aW5nIGRyYXdUZXh0dXJlIGNhbGxzLgorICAgIHZp
cnR1YWwgdm9pZCBiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHBhaW50VG9UYXJnZXQoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwg
Y29uc3QgSW50U2l6ZSYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0
IG9wYWNpdHksIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0KQorICAgIHsKKyAgICAgICAgZHJh
d1RleHR1cmUodGV4dHVyZSwgSW50UmVjdCgwLCAwLCB0ZXh0dXJlLmNvbnRlbnRTaXplKCkud2lk
dGgoKSwgdGV4dHVyZS5jb250ZW50U2l6ZSgpLmhlaWdodCgpKSwgbWF0cml4LCBvcGFjaXR5LCAw
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xpcChjb25zdCBJbnRSZWN0JikgPSAw
OworICAgIHZpcnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCkgPSAwOwor
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogdHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgY2xlYW51cCgpIHt9CisKKyAgICBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9nYzsKKyAgICB9CisKK3Byb3RlY3RlZDoK
KyAgICBUZXh0dXJlTWFwcGVyKEdyYXBoaWNzQ29udGV4dCogZ2MpIDogbV9nYyhnYykge30KKyAg
ICBHcmFwaGljc0NvbnRleHQqIG1fZ2M7Cit9OworCit9OworCisjZW5kaWYKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4yM2U5ZmM5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaApAQCAtMCwwICsxLDcwIEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisqLworCisjaWZuZGVmIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyX2gKKyNk
ZWZpbmUgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBJbnRTaXpl
OworY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CisKKworLy8gR2x1ZSBsYXllciB0byBjb25u
ZWN0IHRoZSB0ZXhtYXAgbGF5ZXIgdG8gdGhlIHBsYXRmb3JtIHNwZWNpZmljIGNvbnRhaW5lci4K
K2NsYXNzIFRleHR1cmVNYXBwZXJMYXllckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+
VGV4dHVyZU1hcHBlckxheWVyQ2xpZW50KCkge30KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNE
aXNwbGF5KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplQ2hhbmdlZChj
b25zdCBJbnRTaXplJikgPSAwOworfTsKKworY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXIgeworcHVibGljOgorICAgIGVudW0gVHlwZSB7CisgICAgICAgIENvbnRlbnRMYXllciwKKyAg
ICAgICAgVmlkZW9MYXllcgorICAgIH07CisKKyAgICB2aXJ0dWFsIFR5cGUgbGF5ZXJUeXBlKCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKCkge30K
K307CisKK2NsYXNzIFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIgOiBwdWJsaWMgVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBzZXRQbGF0Zm9y
bUxheWVyQ2xpZW50KFRleHR1cmVNYXBwZXJMYXllckNsaWVudCopID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFJl
Y3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFJlY3QmIGV4cG9zZWRSZWN0LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5KSB7fQorICAgIHZpcnR1YWwg
SW50U2l6ZSBzaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwVGV4dHVy
ZU1hcHBlcigpIHt9CisgICAgdmlydHVhbCBUeXBlIGxheWVyVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IENvbnRlbnRMYXllcjsgfQorfTsKKworI2lmIEVOQUJMRShWSURFTykKK2NsYXNzIFRleHR1cmVN
YXBwZXJWaWRlb0xheWVyIDogcHVibGljIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyIHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KikgPSAwOworICAg
IHZpcnR1YWwgVHlwZSBsYXllclR5cGUoKSBjb25zdCB7IHJldHVybiBWaWRlb0xheWVyOyB9Cit9
OworI2VuZGlmCisKK30KKworI2VuZGlmIC8vIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70159</attachid>
            <date>2010-10-07 15:15:32 -0700</date>
            <delta_ts>2010-10-08 01:53:47 -0700</delta_ts>
            <desc>Patch - OpenGL implementation</desc>
            <filename>patch-47070-8.diff</filename>
            <type>text/plain</type>
            <size>28641</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OGM0YzcyYS4uZWI2NDFhNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0xMC0wNyAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5p
dGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBUaGlzIHBhdGNoIGFkZHMgdGhlIE9wZW5HTCBp
bXBsZW1lbnRhdGlvbiBvZiBUZXh0dXJlTWFwcGVyLiBTZWUgdGhlIG90aGVyIGVudHJpZXMgZnJv
bSBidWcgNDcwNzAgZm9yIGRldGFpbHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00NzA3MAorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gUGFydCBvZiBh
IG5ldyBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9UZXh0dXJlTWFwcGVyR0wuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmg6IEFkZGVkLgorCiAyMDEwLTEwLTA1ICBObydhbSBS
b3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5mZDZhZmYzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMCwwICsxLDU5MyBAQAorLyoKKyBDb3B5
cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkhhc2hNYXAuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIlBhc3NS
ZWZQdHIuaCIKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKwor
I2lmIGRlZmluZWQoVEVYTUFQX09QRU5HTF9FU18yKQorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgor
I2VsaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgPGdsLmg+CisjZWxzZQorI2luY2x1ZGUgPEdM
L2dsLmg+CisjZW5kaWYKKworI2lmbmRlZiBURVhNQVBfT1BFTkdMX0VTMgorZXh0ZXJuICJDIiB7
CisgICAgdm9pZCBnbFVuaWZvcm0xZihHTGludCwgR0xmbG9hdCk7CisgICAgdm9pZCBnbFVuaWZv
cm0xaShHTGludCwgR0xpbnQpOworICAgIHZvaWQgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKEdMdWlu
dCwgR0xpbnQsIEdMZW51bSwgR0xib29sZWFuLCBHTHNpemVpLCBjb25zdCBHTHZvaWQqKTsKKyAg
ICB2b2lkIGdsVW5pZm9ybTRmKEdMaW50LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZs
b2F0KTsKKyAgICB2b2lkIGdsU2hhZGVyU291cmNlKEdMdWludCwgR0xzaXplaSwgY29uc3QgY2hh
cioqLCBjb25zdCBHTGludCopOworICAgIEdMdWludCBnbENyZWF0ZVNoYWRlcihHTGVudW0pOwor
ICAgIHZvaWQgZ2xTaGFkZXJTb3VyY2UoR0x1aW50LCBHTHNpemVpLCBjb25zdCBjaGFyKiosIGNv
bnN0IEdMaW50Kik7CisgICAgdm9pZCBnbENvbXBpbGVTaGFkZXIoR0x1aW50KTsKKyAgICB2b2lk
IGdsRGVsZXRlU2hhZGVyKEdMdWludCk7CisgICAgdm9pZCBnbFVuaWZvcm1NYXRyaXg0ZnYoR0xp
bnQsIEdMc2l6ZWksIEdMYm9vbGVhbiwgY29uc3QgR0xmbG9hdCopOworICAgIEdMdWludCBnbENy
ZWF0ZVByb2dyYW0oKTsKKyAgICB2b2lkIGdsQXR0YWNoU2hhZGVyKEdMdWludCwgR0x1aW50KTsK
KyAgICB2b2lkIGdsTGlua1Byb2dyYW0oR0x1aW50KTsKKyAgICB2b2lkIGdsVXNlUHJvZ3JhbShH
THVpbnQpOworICAgIHZvaWQgZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0x1aW50KTsKKyAg
ICB2b2lkIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0x1aW50KTsKKyAgICB2b2lkIGdsQmlu
ZEZyYW1lYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMdWludCBmcmFtZWJ1ZmZlcik7CisgICAgdm9p
ZCBnbERlbGV0ZUZyYW1lYnVmZmVycyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCogZnJhbWVidWZm
ZXJzKTsKKyAgICB2b2lkIGdsR2VuRnJhbWVidWZmZXJzKEdMc2l6ZWkgbiwgR0x1aW50KiBmcmFt
ZWJ1ZmZlcnMpOworICAgIHZvaWQgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTGVudW0gdGFyZ2V0
LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHRleHRhcmdldCwgR0x1aW50IHRleHR1cmUsIEdM
aW50IGxldmVsKTsKKyAgICB2b2lkIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVy
aXYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSBwbmFtZSwgR0xpbnQg
KnBhcmFtcyk7CisgICAgdm9pZCBnbEJpbmRCdWZmZXIoR0xlbnVtLCBHTHVpbnQpOworICAgIHZv
aWQgZ2xEZWxldGVCdWZmZXJzKEdMc2l6ZWksIGNvbnN0IEdMdWludCopOworICAgIHZvaWQgZ2xH
ZW5CdWZmZXJzKEdMc2l6ZWksIEdMdWludCopOworICAgIHZvaWQgZ2xCdWZmZXJEYXRhKEdMZW51
bSwgR0xzaXplaXB0ciwgY29uc3QgR0x2b2lkKiwgR0xlbnVtKTsKKyAgICB2b2lkIGdsQnVmZmVy
U3ViRGF0YShHTGVudW0sIEdMc2l6ZWlwdHIsIEdMc2l6ZWlwdHIsIGNvbnN0IEdMdm9pZCopOwor
ICAgIHZvaWQgZ2xHZXRQcm9ncmFtSW5mb0xvZyhHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSwgR0xz
aXplaSosIEdMY2hhciopOworCisjaWYgIVBMQVRGT1JNKE1BQykKKyAgICBHTGludCBnbEdldFVu
aWZvcm1Mb2NhdGlvbihHTHVpbnQsIGNvbnN0IEdMY2hhciopOworICAgIEdMaW50IGdsQmluZEF0
dHJpYkxvY2F0aW9uKEdMdWludCwgR0x1aW50LCBjb25zdCBHTGNoYXIqKTsKKyNlbmRpZgorfQor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworaW5saW5lIHN0YXRpYyB2b2lkIGRlYnVn
R0xDb21tYW5kKGNvbnN0IGNoYXIqIGNvbW1hbmQsIGludCBsaW5lKQoreworICAgIGNvbnN0IEdM
ZW51bSBlcnIgPSBnbEdldEVycm9yKCk7CisgICAgaWYgKCFlcnIpCisgICAgICAgIHJldHVybjsK
KyAgICBXVEZSZXBvcnRFcnJvcihfX0ZJTEVfXywgbGluZSwgV1RGX1BSRVRUWV9GVU5DVElPTiwg
IltUZXh0dXJlTWFwcGVyIEdMXSBDb21tYW5kIGZhaWxlZDogJXMgKCV4KVxuIiwgY29tbWFuZCwg
ZXJyKTsKK30KKworI2RlZmluZSBERUJVR19HTF9DT01NQU5EUworCisjaWZkZWYgREVCVUdfR0xf
Q09NTUFORFMKKyNkZWZpbmUgR0xfQ01EKHgpIHt4LCBkZWJ1Z0dMQ29tbWFuZCgjeCwgX19MSU5F
X18pOyB9CisjZWxzZQorI2RlZmluZSBHTF9DTUQoeCkgeAorI2VuZGlmCisKK2NsYXNzIEJpdG1h
cFRleHR1cmVHTCA6IHB1YmxpYyBCaXRtYXBUZXh0dXJlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IHZvaWQgZGVzdHJveSgpOworICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoY29u
c3QgSW50U2l6ZSYsIGJvb2wgb3BhcXVlKTsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CisgICAgdmlydHVh
bCB2b2lkIGVuZFBhaW50KCk7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJ
bWFnZSopOworCitwcml2YXRlOgorICAgIEdMdWludCBtX2lkOworICAgIE5hdGl2ZUltYWdlUHRy
IG1faW1hZ2U7CisgICAgRmxvYXRTaXplIG1fcmVsYXRpdmVTaXplOworICAgIGJvb2wgbV9vcGFx
dWU7CisgICAgSW50U2l6ZSBtX3RleHR1cmVTaXplOworICAgIFJlZlB0cjxSR0JBMzJQcmVtdWx0
aW1wbGllZEJ1ZmZlcj4gbV9idWZmZXI7CisgICAgSW50UmVjdCBtX2RpcnR5UmVjdDsKKyAgICBH
THVpbnQgbV9mYm87CisgICAgSW50U2l6ZSBtX2FjdHVhbFNpemU7CisgICAgYm9vbCBtX3N1cmZh
Y2VOZWVkc1Jlc2V0OworICAgIEJpdG1hcFRleHR1cmVHTCgpCisgICAgICAgIDogbV9pZCgwKQor
ICAgICAgICAsIG1faW1hZ2UoMCkKKyAgICAgICAgLCBtX29wYXF1ZShmYWxzZSkKKyAgICAgICAg
LCBtX2ZibygwKQorICAgICAgICAsIG1fc3VyZmFjZU5lZWRzUmVzZXQodHJ1ZSkKKyAgICB7Cisg
ICAgfQorCisgICAgZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJHTDsKK307CisKK3N0YXRpYyBz
dHJ1Y3QgVGV4bWFwU2hhZGVySW5mbyB7CisgICAgZW51bSBTaGFkZXJQcm9ncmFtSW5kZXggewor
ICAgICAgICBTaW1wbGVQcm9ncmFtLAorICAgICAgICBPcGFjaXR5QW5kTWFza1Byb2dyYW0sCisg
ICAgICAgIFRhcmdldFByb2dyYW0sCisgICAgICAgIE51bVByb2dyYW1zCisgICAgfTsKKworICAg
IGVudW0gU2hhZGVyVmFyaWFibGVJbmRleCB7CisgICAgICAgIEluTWF0cml4VmFyaWFibGUsCisg
ICAgICAgIEluU291cmNlTWF0cml4VmFyaWFibGUsCisgICAgICAgIEluTWFza01hdHJpeFZhcmlh
YmxlLAorICAgICAgICBJblZlcnRleFZhcmlhYmxlLAorCisgICAgICAgIE9wYWNpdHlWYXJpYWJs
ZSwKKyAgICAgICAgU291cmNlVGV4dHVyZVZhcmlhYmxlLAorICAgICAgICBNYXNrVGV4dHVyZVZh
cmlhYmxlLAorICAgICAgICBOdW1WYXJpYWJsZXMKKyAgICB9OworCisgICAgc3RydWN0IFByb2dy
YW1JbmZvIHsKKyAgICAgICAgR0x1aW50IGlkOworICAgICAgICBHTGludCB2YXJzW051bVZhcmlh
Ymxlc107CisgICAgfTsKKworICAgIEdMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihTaGFkZXJQcm9n
cmFtSW5kZXggcHJvZywgU2hhZGVyVmFyaWFibGVJbmRleCB2YXIsIGNvbnN0IGNoYXIqIG5hbWUp
CisgICAgeworICAgICAgICByZXR1cm4gcHJvZ3JhbXNbcHJvZ10udmFyc1t2YXJdID0gZ2xHZXRV
bmlmb3JtTG9jYXRpb24ocHJvZ3JhbXNbcHJvZ10uaWQsIG5hbWUpOworICAgIH0KKworICAgIHZv
aWQgY3JlYXRlU2hhZGVyUHJvZ3JhbShjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNv
bnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlLCBTaGFkZXJQcm9ncmFtSW5kZXggaW5kZXgp
CisgICAgeworICAgICAgICBHTHVpbnQgdmVydGV4U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xf
VkVSVEVYX1NIQURFUik7CisgICAgICAgIEdMdWludCBmcmFnbWVudFNoYWRlciA9IGdsQ3JlYXRl
U2hhZGVyKEdMX0ZSQUdNRU5UX1NIQURFUik7CisgICAgICAgIEdMX0NNRChnbFNoYWRlclNvdXJj
ZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2UsIDApKQorICAgICAgICBHTF9D
TUQoZ2xTaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIDEsICZmcmFnbWVudFNoYWRlclNvdXJj
ZSwgMCkpCisgICAgICAgIEdMdWludCBwcm9ncmFtSUQgPSBnbENyZWF0ZVByb2dyYW0oKTsKKyAg
ICAgICAgR0xfQ01EKGdsQ29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpKQorICAgICAgICBHTF9D
TUQoZ2xDb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKSkKKyAgICAgICAgR0xfQ01EKGdsQXR0
YWNoU2hhZGVyKHByb2dyYW1JRCwgdmVydGV4U2hhZGVyKSkKKyAgICAgICAgR0xfQ01EKGdsQXR0
YWNoU2hhZGVyKHByb2dyYW1JRCwgZnJhZ21lbnRTaGFkZXIpKQorICAgICAgICBHTF9DTUQoZ2xC
aW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAwLCAiSW5WZXJ0ZXgiKSkKKyAgICAgICAgR0xf
Q01EKGdsTGlua1Byb2dyYW0ocHJvZ3JhbUlEKSkKKyAgICAgICAgcHJvZ3JhbXNbaW5kZXhdLmlk
ID0gcHJvZ3JhbUlEOworICAgICAgICBjaGFyIGluZm9Mb2dbMTAyNF07CisgICAgICAgIGludCBs
ZW47CisgICAgICAgIEdMX0NNRChnbEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW1JRCwgMTAyNCwg
JmxlbiwgaW5mb0xvZykpOworICAgIH0KKworICAgIFByb2dyYW1JbmZvIHByb2dyYW1zW051bVBy
b2dyYW1zXTsKKworfSBnU2hhZGVySW5mbzsKKworI2RlZmluZSBURVhNQVBfR0VUX1NIQURFUl9W
QVJfTE9DQVRJT04ocHJvZywgdmFyKSBcCisgICAgICAgICAgICBpZiAoZ1NoYWRlckluZm8uZ2V0
VW5pZm9ybUxvY2F0aW9uKFRleG1hcFNoYWRlckluZm86OnByb2cjI1Byb2dyYW0sIFRleG1hcFNo
YWRlckluZm86OnZhciMjVmFyaWFibGUsICN2YXIpIDwgMCkgXAorICAgICAgICAgICAgICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkbid0IGZpbmQgdmFyaWFibGUgIiN2YXIiIGluIHByb2dyYW0gIiNw
cm9nIlxuIik7CisjZGVmaW5lIFRFWE1BUF9CVUlMRF9TSEFERVIocHJvZ3JhbSkgZ1NoYWRlcklu
Zm8uY3JlYXRlU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3VyY2UjI3Byb2dyYW0sIGZyYWdt
ZW50U2hhZGVyU291cmNlIyNwcm9ncmFtLCBUZXhtYXBTaGFkZXJJbmZvOjpwcm9ncmFtIyNQcm9n
cmFtKTsKKworVGV4dHVyZU1hcHBlckdMOjpUZXh0dXJlTWFwcGVyR0woR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0KQorICAgIDogVGV4dHVyZU1hcHBlcihjb250ZXh0KQorICAgICwgbV9jdXJQcm9n
cmFtKFRleG1hcFNoYWRlckluZm86OlRhcmdldFByb2dyYW0pCit7CisgICAgc3RhdGljIGJvb2wg
c2hhZGVyc0NvbXBpbGVkID0gZmFsc2U7CisgICAgaWYgKHNoYWRlcnNDb21waWxlZCkKKyAgICAg
ICAgcmV0dXJuOworICAgIHNoYWRlcnNDb21waWxlZCA9IHRydWU7CisjaWZuZGVmIFRFWE1BUF9P
UEVOR0xfRVMyCisjZGVmaW5lIE9FUzJfUEVSQ0lTSU9OX0RFRklOSVRJT05TIFwKKyAgICAiI2Rl
ZmluZSBsb3dwXG4jZGVmaW5lIGhpZ2hwXG4iCisjZWxzZQorI2RlZmluZSBPRVMyX1BFUkNJU0lP
Tl9ERUZJTklUSU9OUworI2VuZGlmCisKKyAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNv
dXJjZU9wYWNpdHlBbmRNYXNrID0KKyAgICAgICAgICAgIE9FUzJfUEVSQ0lTSU9OX0RFRklOSVRJ
T05TCisiICAgICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgU291cmNlVGV4dHVyZSwgTWFz
a1RleHR1cmU7ICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB1bmlm
b3JtIGxvd3AgZmxvYXQgT3BhY2l0eTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiBPdXRUZXhDb29y
ZFNvdXJjZSwgT3V0VGV4Q29vcmRNYXNrOyAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAg
ICAgdm9pZCBtYWluKHZvaWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAg
ICAgICAgICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQoU291cmNlVGV4dHVyZSwg
T3V0VGV4Q29vcmRTb3VyY2UpOyAgXG4iCisiICAgICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBt
YXNrQ29sb3IgPSB0ZXh0dXJlMkQoTWFza1RleHR1cmUsIE91dFRleENvb3JkTWFzayk7ICBcbiIK
KyIgICAgICAgICAgICAgICAgICAgbG93cCBmbG9hdCBvID0gT3BhY2l0eSAqIG1hc2tDb2xvci5h
OyAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICBnbF9G
cmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIG8sIGNvbG9yLmEgKiBvKTsgICAgICAgICAgICAg
ICAgXG4iCisiICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CisKKyAgICBjb25zdCBjaGFy
KiB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9CisgICAgICAgICAgICBPRVMyX1BF
UkNJU0lPTl9ERUZJTklUSU9OUworIiAgICAgICAgICAgICAgIHVuaWZvcm0gbWF0NCBJbk1hdHJp
eCwgSW5Tb3VyY2VNYXRyaXgsIEluTWFza01hdHJpeDsgICAgICAgICAgICBcbiIKKyIgICAgICAg
ICAgICAgICBhdHRyaWJ1dGUgdmVjNCBJblZlcnRleDsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIE91
dFRleENvb3JkU291cmNlLCBPdXRUZXhDb29yZE1hc2s7ICAgICAgICAgIFxuIgorIiAgICAgICAg
ICAgICAgIHZvaWQgbWFpbih2b2lkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAg
ICAgICAgICAgIE91dFRleENvb3JkU291cmNlID0gdmVjMihJblNvdXJjZU1hdHJpeCAqIEluVmVy
dGV4KTsgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICBPdXRUZXhDb29yZE1hc2sgPSB2
ZWMyKEluTWFza01hdHJpeCAqIEluVmVydGV4KTsgICAgICAgICAgICBcbiIKKyIgICAgICAgICAg
ICAgICAgICAgZ2xfUG9zaXRpb24gPSBJbk1hdHJpeCAqIEluVmVydGV4OyAgICAgICAgICAgICAg
ICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKworICAgIGNvbnN0
IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlU2ltcGxlID0KKyAgICAgICAgICAgIE9FUzJfUEVS
Q0lTSU9OX0RFRklOSVRJT05TCisiICAgICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgU291
cmNlVGV4dHVyZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAg
ICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgT3BhY2l0eTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAg
dmVjMiBPdXRUZXhDb29yZFNvdXJjZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4i
CisiICAgICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQo
U291cmNlVGV4dHVyZSwgT3V0VGV4Q29vcmRTb3VyY2UpOyAgXG4iCisiICAgICAgICAgICAgICAg
ICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogT3BhY2l0eSwgY29sb3IuYSAqIE9w
YWNpdHkpOyAgICBcbiIKKyIgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKworICAgIGNv
bnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSA9CisgICAgICAgICAgICBPRVMyX1BF
UkNJU0lPTl9ERUZJTklUSU9OUworIiAgICAgICAgICAgICAgIHVuaWZvcm0gbWF0NCBJbk1hdHJp
eCwgSW5Tb3VyY2VNYXRyaXg7ICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAg
ICAgIGF0dHJpYnV0ZSB2ZWM0IEluVmVydGV4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiBPdXRUZXhDb29y
ZFNvdXJjZTsgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZvaWQg
bWFpbih2b2lkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxu
IgorIiAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICBPdXRUZXhDb29y
ZFNvdXJjZSA9IHZlYzIoSW5Tb3VyY2VNYXRyaXggKiBJblZlcnRleCk7ICAgIFxuIgorIiAgICAg
ICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IEluTWF0cml4ICogSW5WZXJ0ZXg7ICAgICAgICAg
ICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKworICAgIGNvbnN0IGNo
YXIqIGZyYWdtZW50U2hhZGVyU291cmNlVGFyZ2V0ID0KKyAgICAgICAgICAgIE9FUzJfUEVSQ0lT
SU9OX0RFRklOSVRJT05TCisiICAgICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgU291cmNl
VGV4dHVyZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgor
IiAgICAgICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCBPcGFjaXR5OyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB2
YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0VGV4Q29vcmRTb3VyY2U7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFxuIgorIiAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAg
ICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKFNvdXJjZVRleHR1cmUsIE91dFRl
eENvb3JkU291cmNlKTsgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgIGdsX0ZyYWdD
b2xvciA9IHZlYzQoY29sb3IuYmdyICogT3BhY2l0eSwgY29sb3IuYSAqIE9wYWNpdHkpOyAgICAg
ICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CisKKyAg
ICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VUYXJnZXQgPSB2ZXJ0ZXhTaGFkZXJTb3Vy
Y2VTaW1wbGU7CisKKyAgICBURVhNQVBfQlVJTERfU0hBREVSKFNpbXBsZSkKKyAgICBURVhNQVBf
QlVJTERfU0hBREVSKE9wYWNpdHlBbmRNYXNrKQorICAgIFRFWE1BUF9CVUlMRF9TSEFERVIoVGFy
Z2V0KQorCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKE9wYWNpdHlBbmRNYXNr
LCBJbk1hdHJpeCkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oT3BhY2l0eUFu
ZE1hc2ssIEluU291cmNlTWF0cml4KQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElP
TihPcGFjaXR5QW5kTWFzaywgSW5NYXNrTWF0cml4KQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZB
Ul9MT0NBVElPTihPcGFjaXR5QW5kTWFzaywgU291cmNlVGV4dHVyZSkKKyAgICBURVhNQVBfR0VU
X1NIQURFUl9WQVJfTE9DQVRJT04oT3BhY2l0eUFuZE1hc2ssIE1hc2tUZXh0dXJlKQorICAgIFRF
WE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihPcGFjaXR5QW5kTWFzaywgT3BhY2l0eSkKKwor
ICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihTaW1wbGUsIEluU291cmNlTWF0cml4
KQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihTaW1wbGUsIEluTWF0cml4KQor
ICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihTaW1wbGUsIFNvdXJjZVRleHR1cmUp
CisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKFNpbXBsZSwgT3BhY2l0eSkKKwor
ICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihUYXJnZXQsIEluU291cmNlTWF0cml4
KQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihUYXJnZXQsIEluTWF0cml4KQor
ICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihUYXJnZXQsIFNvdXJjZVRleHR1cmUp
CisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKFRhcmdldCwgT3BhY2l0eSkKK30K
Kwordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUm
IHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1
cmUqIG1hc2tUZXh0dXJlKQoreworICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCYgdGV4dHVyZUdM
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4odGV4dHVyZSk7CisgICAgaWYg
KCF0ZXh0dXJlLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVGV4bWFwU2hhZGVy
SW5mbzo6U2hhZGVyUHJvZ3JhbUluZGV4IHByb2dyYW07CisgICAgaWYgKG1hc2tUZXh0dXJlKQor
ICAgICAgICBwcm9ncmFtID0gVGV4bWFwU2hhZGVySW5mbzo6T3BhY2l0eUFuZE1hc2tQcm9ncmFt
OworICAgIGVsc2UKKyAgICAgICAgcHJvZ3JhbSA9IFRleG1hcFNoYWRlckluZm86OlNpbXBsZVBy
b2dyYW07CisKKyAgICBjb25zdCBUZXhtYXBTaGFkZXJJbmZvOjpQcm9ncmFtSW5mbyYgcHJvZ3Jh
bUluZm8gPSBnU2hhZGVySW5mby5wcm9ncmFtc1twcm9ncmFtXTsKKyAgICBpZiAobV9jdXJQcm9n
cmFtICE9IHByb2dyYW0pIHsKKyAgICAgICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShwcm9ncmFtSW5m
by5pZCkpCisgICAgICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShnU2hhZGVy
SW5mby5wcm9ncmFtc1ttX2N1clByb2dyYW1dLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5WZXJ0
ZXhWYXJpYWJsZV0pKQorICAgICAgICBtX2N1clByb2dyYW0gPSBwcm9ncmFtOworICAgICAgICBH
TF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtSW5mby52YXJzW1RleG1hcFNo
YWRlckluZm86OkluVmVydGV4VmFyaWFibGVdKSkKKyAgICB9CisKKyAgICBHTF9DTUQoZ2xEaXNh
YmxlKEdMX0RFUFRIX1RFU1QpKQorICAgIEdMX0NNRChnbERpc2FibGUoR0xfU1RFTkNJTF9URVNU
KSkKKworICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKQorICAgIEdMX0NN
RChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmVHTC5tX2lkKSkKKyAgICBHTF9D
TUQoZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCkpCisgICAgY29uc3QgR0xmbG9hdCB1
bml0UmVjdFtdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9OworICAgIEdMX0NNRChnbFZlcnRl
eEF0dHJpYlBvaW50ZXIoMCwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB1bml0UmVjdCkpCisK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCht
X3Byb2plY3Rpb25NYXRyaXgpLm11bHRMZWZ0KG1vZGVsVmlld01hdHJpeCkubXVsdExlZnQoVHJh
bnNmb3JtYXRpb25NYXRyaXgoCisgICAgICAgICAgICB0YXJnZXRSZWN0LndpZHRoKCksIDAsIDAs
IDAsCisgICAgICAgICAgICAwLCB0YXJnZXRSZWN0LmhlaWdodCgpLCAwLCAwLAorICAgICAgICAg
ICAgMCwgMCwgMSwgMCwKKyAgICAgICAgICAgIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0Lnko
KSwgMCwgMSkpOworCisgICAgY29uc3QgR0xmbG9hdCBtNFtdID0geworICAgICAgICBtYXRyaXgu
bTExKCksIG1hdHJpeC5tMTIoKSwgbWF0cml4Lm0xMygpLCBtYXRyaXgubTE0KCksCisgICAgICAg
IG1hdHJpeC5tMjEoKSwgbWF0cml4Lm0yMigpLCBtYXRyaXgubTIzKCksIG1hdHJpeC5tMjQoKSwK
KyAgICAgICAgbWF0cml4Lm0zMSgpLCBtYXRyaXgubTMyKCksIG1hdHJpeC5tMzMoKSwgbWF0cml4
Lm0zNCgpLAorICAgICAgICBtYXRyaXgubTQxKCksIG1hdHJpeC5tNDIoKSwgbWF0cml4Lm00Mygp
LCBtYXRyaXgubTQ0KCkKKyAgICB9OworICAgIGNvbnN0IEdMZmxvYXQgbTRzcmNbXSA9IHt0ZXh0
dXJlR0wubV9yZWxhdGl2ZVNpemUud2lkdGgoKSwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLCB0ZXh0dXJlR0wubV9yZWxhdGl2ZVNpemUuaGVpZ2h0KCks
IDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAxfTsKKyAgICBH
TF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5m
bzo6SW5NYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNCkpCisgICAgR0xfQ01EKGdsVW5p
Zm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OkluU291cmNl
TWF0cml4VmFyaWFibGVdLCAxLCBHTF9GQUxTRSwgbTRzcmMpKQorICAgIEdMX0NNRChnbFVuaWZv
cm0xaShwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OlNvdXJjZVRleHR1cmVWYXJp
YWJsZV0sIDApKQorICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9ncmFtSW5mby52YXJzW1RleG1h
cFNoYWRlckluZm86Ok9wYWNpdHlWYXJpYWJsZV0sIG9wYWNpdHkpKQorCisgICAgaWYgKG1hc2tU
ZXh0dXJlICYmIG1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgY29uc3QgQml0bWFw
VGV4dHVyZUdMKiBtYXNrVGV4dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVy
ZUdMKj4obWFza1RleHR1cmUpOworICAgICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RF
WFRVUkUxKSkKKyAgICAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbWFz
a1RleHR1cmVHTC0+bV9pZCkpCisgICAgICAgIGNvbnN0IEdMZmxvYXQgbTRtYXNrW10gPSB7bWFz
a1RleHR1cmVHTC0+bV9yZWxhdGl2ZVNpemUud2lkdGgoKSwgMCwgMCwgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgbWFza1RleHR1cmVHTC0+bV9yZWxhdGl2
ZVNpemUuaGVpZ2h0KCksIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsIDAsIDEsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsIDAsIDAsIDF9OworICAgICAgICBnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8u
dmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJbk1hc2tNYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNF
LCBtNG1hc2spOworICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbUluZm8udmFyc1tU
ZXhtYXBTaGFkZXJJbmZvOjpNYXNrVGV4dHVyZVZhcmlhYmxlXSwgMSkpCisgICAgICAgIEdMX0NN
RChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKQorICAgIH0KKworCisgICAgaWYgKHRleHR1
cmVHTC5tX29wYXF1ZSAmJiBvcGFjaXR5ID4gMC45OSAmJiAhbWFza1RleHR1cmUpCisgICAgICAg
IEdMX0NNRChnbERpc2FibGUoR0xfQkxFTkQpKQorICAgIGVsc2UgeworICAgICAgICBHTF9DTUQo
Z2xCbGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKSkKKyAgICAgICAgR0xf
Q01EKGdsRW5hYmxlKEdMX0JMRU5EKSkKKyAgICB9CisKKyAgICBHTF9DTUQoZ2xEcmF3QXJyYXlz
KEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpCit9CisKKworY29uc3QgY2hhciogVGV4dHVyZU1hcHBl
ckdMOjp0eXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIk9wZW5HTCI7Cit9CisKK3ZvaWQgQml0
bWFwVGV4dHVyZUdMOjpyZXNldChjb25zdCBJbnRTaXplJiBuZXdTaXplLCBib29sIG9wYXF1ZSkK
K3sKKyAgICBCaXRtYXBUZXh0dXJlOjpyZXNldChuZXdTaXplLCBvcGFxdWUpOworICAgIG1faW1h
Z2UgPSAwOworICAgIEludFNpemUgbmV3VGV4dHVyZVNpemUgPSBucG90KG5ld1NpemUpOworICAg
IGJvb2wganVzdENyZWF0ZWQgPSBmYWxzZTsKKyAgICBpZiAoIW1faWQpIHsKKyAgICAgICAgR0xf
Q01EKGdsR2VuVGV4dHVyZXMoMSwgJm1faWQpKQorICAgICAgICBqdXN0Q3JlYXRlZCA9IHRydWU7
CisgICAgfQorCisgICAgaWYgKGp1c3RDcmVhdGVkIHx8IG5ld1RleHR1cmVTaXplLndpZHRoKCkg
PiBtX3RleHR1cmVTaXplLndpZHRoKCkgfHwgbmV3VGV4dHVyZVNpemUuaGVpZ2h0KCkgPiBtX3Rl
eHR1cmVTaXplLmhlaWdodCgpKSB7CisgICAgICAgIG1fdGV4dHVyZVNpemUgPSBuZXdUZXh0dXJl
U2l6ZTsKKyAgICAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pZCkp
CisgICAgICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpKQorICAgICAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKSkKKyAgICAg
ICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
UywgR0xfQ0xBTVBfVE9fRURHRSkpCisgICAgICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpKQorICAgICAg
ICBHTF9DTUQoZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIG1fdGV4dHVy
ZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdCQSwgR0xfVU5T
SUdORURfQllURSwgMCkpCisgICAgfQorICAgIG1fYWN0dWFsU2l6ZSA9IG5ld1NpemU7CisgICAg
bV9yZWxhdGl2ZVNpemUgPSBGbG9hdFNpemUoZmxvYXQobmV3U2l6ZS53aWR0aCgpKSAvIG1fdGV4
dHVyZVNpemUud2lkdGgoKSwgZmxvYXQobmV3U2l6ZS5oZWlnaHQoKSkgLyBtX3RleHR1cmVTaXpl
LmhlaWdodCgpKTsKKyAgICBtX29wYXF1ZSA9IG9wYXF1ZTsKKyAgICBtX3N1cmZhY2VOZWVkc1Jl
c2V0ID0gdHJ1ZTsKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIEJpdG1hcFRleHR1cmVH
TDo6YmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgbV9idWZmZXIg
PSBSR0JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcjo6Y3JlYXRlKCk7CisgICAgbV9kaXJ0eVJlY3Qg
PSBkaXJ0eVJlY3Q7CisgICAgcmV0dXJuIG1fYnVmZmVyLT5iZWdpblBhaW50KGRpcnR5UmVjdCwg
bV9vcGFxdWUpOworfQorCit2b2lkIEJpdG1hcFRleHR1cmVHTDo6ZW5kUGFpbnQoKQoreworICAg
IGlmICghbV9idWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX2J1ZmZlci0+ZW5kUGFpbnQo
KTsKKyAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lkKSkKKyAgICBH
TF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1fZGlydHlSZWN0LngoKSwg
bV9kaXJ0eVJlY3QueSgpLCBtX2RpcnR5UmVjdC53aWR0aCgpLCBtX2RpcnR5UmVjdC5oZWlnaHQo
KSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgbV9idWZmZXItPmRhdGEoKSkpCisgICAgbV9i
dWZmZXIuY2xlYXIoKTsKK30KKworc3RydWN0IFRleG1hcEdMU2hhZGVyVGV4dHVyZXMgeworICAg
IHN0cnVjdCBFbnRyeSB7CisgICAgICAgIEdMdWludCB0ZXh0dXJlOworICAgICAgICBpbnQgcmVm
Q291bnQ7CisgICAgfTsKKyAgICBIYXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBFbnRyeT4gaW1hZ2VU
b1RleHR1cmU7CisgICAgR0x1aW50IGZpbmRPckNyZWF0ZShOYXRpdmVJbWFnZVB0ciBpbWFnZSwg
Ym9vbCYgZm91bmQpCisgICAgeworICAgICAgICBIYXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBFbnRy
eT46Oml0ZXJhdG9yIGl0ID0gaW1hZ2VUb1RleHR1cmUuZmluZChpbWFnZSk7CisgICAgICAgIGZv
dW5kID0gZmFsc2U7CisgICAgICAgIGlmIChpdCAhPSBpbWFnZVRvVGV4dHVyZS5lbmQoKSkgewor
ICAgICAgICAgICAgaXQtPnNlY29uZC5yZWZDb3VudCsrOworICAgICAgICAgICAgZm91bmQgPSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQudGV4dHVyZTsKKyAgICAgICAgfQor
ICAgICAgICBFbnRyeSBlbnRyeTsKKyAgICAgICAgR0xfQ01EKGdsR2VuVGV4dHVyZXMoMSwgJmVu
dHJ5LnRleHR1cmUpKTsKKyAgICAgICAgZW50cnkucmVmQ291bnQgPSAxOworICAgICAgICBpbWFn
ZVRvVGV4dHVyZS5hZGQoaW1hZ2UsIGVudHJ5KTsKKyAgICAgICAgcmV0dXJuIGVudHJ5LnRleHR1
cmU7CisgICAgfQorCisgICAgYm9vbCBkZXJlZihOYXRpdmVJbWFnZVB0ciBpbWFnZSkKKyAgICB7
CisgICAgICAgIEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIsIEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBp
bWFnZVRvVGV4dHVyZS5maW5kKGltYWdlKTsKKyAgICAgICAgaWYgKGl0ICE9IGltYWdlVG9UZXh0
dXJlLmVuZCgpKSB7CisgICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5yZWZDb3VudCA8IDIpIHsK
KyAgICAgICAgICAgICAgICBpbWFnZVRvVGV4dHVyZS5yZW1vdmUoaXQpOworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9Cit9OworCitzdGF0aWMgVGV4bWFwR0xTaGFkZXJUZXh0dXJlcyBnVGV4
dHVyZVJlcG9zaXRvcnk7CisKK3ZvaWQgQml0bWFwVGV4dHVyZUdMOjpzZXRDb250ZW50c1RvSW1h
Z2UoSW1hZ2UqIGltYWdlKQoreworICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlID0gaW1h
Z2UgPyBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSA6IDA7CisgICAgaWYgKCFp
bWFnZSB8fCAhbmF0aXZlSW1hZ2UpIHsKKyAgICAgICAgaWYgKG1faW1hZ2UpCisgICAgICAgICAg
ICBkZXN0cm95KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobmF0aXZlSW1h
Z2UgPT0gbV9pbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsK
KyAgICBHTHVpbnQgbmV3VGV4dHVyZUlEID0gZ1RleHR1cmVSZXBvc2l0b3J5LmZpbmRPckNyZWF0
ZShuYXRpdmVJbWFnZSwgZm91bmQpOworICAgIGlmIChuZXdUZXh0dXJlSUQgIT0gbV9pZCkgewor
ICAgICAgICBkZXN0cm95KCk7CisgICAgICAgIG1faWQgPSBuZXdUZXh0dXJlSUQ7CisgICAgICAg
IHJlc2V0KGltYWdlLT5zaXplKCksIGZhbHNlKTsKKyAgICAgICAgbV9pbWFnZSA9IG5hdGl2ZUlt
YWdlOworICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQg
Y29udGV4dChiZWdpblBhaW50KEludFJlY3QoMCwgMCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBt
X3RleHR1cmVTaXplLmhlaWdodCgpKSkpOworICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2Uo
aW1hZ2UsIERldmljZUNvbG9yU3BhY2UsIEludFBvaW50KDAsIDApLCBDb21wb3NpdGVDb3B5KTsK
KyAgICAgICAgICAgIGVuZFBhaW50KCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQml0
bWFwVGV4dHVyZUdMOjpkZXN0cm95KCkKK3sKKyAgICBpZiAobV9pZCAmJiAoIW1faW1hZ2UgfHwg
IWdUZXh0dXJlUmVwb3NpdG9yeS5kZXJlZihtX2ltYWdlKSkpCisgICAgICAgIEdMX0NNRChnbERl
bGV0ZVRleHR1cmVzKDEsICZtX2lkKSkKKyAgICBpZiAobV9mYm8pCisgICAgICAgIEdMX0NNRChn
bERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pKQorCisgICAgbV9mYm8gPSAwOworICAgIG1f
aWQgPSAwOworICAgIG1fdGV4dHVyZVNpemUgPSBJbnRTaXplKCk7CisgICAgbV9yZWxhdGl2ZVNp
emUgPSBGbG9hdFNpemUoMSwgMSk7Cit9CisKK2Jvb2wgQml0bWFwVGV4dHVyZUdMOjppc1ZhbGlk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pZDsKK30KKworSW50U2l6ZSBCaXRtYXBUZXh0dXJl
R0w6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3RleHR1cmVTaXplOworfQorCitzdGF0
aWMgaW5saW5lIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBmbGlwKQoreworICAgIHJldHVybiBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgyLjAgLyBmbG9hdChzaXplLndpZHRoKCkpLCAwLCAwLCAwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLCAoZmxpcCA/IC0yLjAgOiAyLjApIC8gZmxvYXQoc2l6ZS5o
ZWlnaHQoKSksIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIC0w
LjAwMDAwMSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIGZsaXAgPyAx
IDogLTEsIDAsIDEpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6Y2xlYW51cCgpCit7Cit9
CisKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlICpzdXJm
YWNlUG9pbnRlcikKK3sKKyAgICBCaXRtYXBUZXh0dXJlR0wqIHN1cmZhY2UgPSBzdGF0aWNfY2Fz
dDxCaXRtYXBUZXh0dXJlR0wqPihzdXJmYWNlUG9pbnRlcik7CisKKyAgICBpZiAoIXN1cmZhY2Up
CisgICAgICAgIHJldHVybjsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBjcmVh
dGVQcm9qZWN0aW9uTWF0cml4KHN1cmZhY2UtPnNpemUoKSwgZmFsc2UpOworICAgIG1hdHJpeC50
cmFuc2xhdGUoLXN1cmZhY2UtPm9mZnNldCgpLngoKSwgLXN1cmZhY2UtPm9mZnNldCgpLnkoKSk7
CisKKyAgICBpZiAoc3VyZmFjZS0+bV9zdXJmYWNlTmVlZHNSZXNldCB8fCAhc3VyZmFjZS0+bV9m
Ym8pIHsKKyAgICAgICAgaWYgKCFzdXJmYWNlLT5tX2ZibykKKyAgICAgICAgICAgIEdMX0NNRChn
bEdlbkZyYW1lYnVmZmVycygxLCAmc3VyZmFjZS0+bV9mYm8pKQorICAgICAgICBHTF9DTUQoZ2xC
aW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIHN1cmZhY2UtPm1fZmJvKSkKKyAgICAgICAg
R0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCkpCisgICAgICAgIEdMX0NNRChn
bEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5U
MCwgR0xfVEVYVFVSRV8yRCwgc3VyZmFjZS0+bV9pZCwgMCkpCisgICAgICAgIEdMX0NNRChnbENs
ZWFyQ29sb3IoMCwgMCwgMCwgMCkpCisgICAgICAgIEdMX0NNRChnbENsZWFyKEdMX0NPTE9SX0JV
RkZFUl9CSVQpKQorICAgICAgICBzdXJmYWNlLT5tX3N1cmZhY2VOZWVkc1Jlc2V0ID0gZmFsc2U7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgR0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1F
QlVGRkVSLCBzdXJmYWNlLT5tX2ZibykpCisgICAgfQorCisgICAgR0xfQ01EKGdsVmlld3BvcnQo
MCwgMCwgc3VyZmFjZS0+c2l6ZSgpLndpZHRoKCksIHN1cmZhY2UtPnNpemUoKS5oZWlnaHQoKSkp
CisgICAgbV9wcm9qZWN0aW9uTWF0cml4ID0gbWF0cml4OworfQorCit2b2lkIFRleHR1cmVNYXBw
ZXJHTDo6c2V0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEdMX0NNRChnbFNjaXNz
b3IocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKQorICAg
IEdMX0NNRChnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpKQorfQorCisKK3ZvaWQgVGV4dHVyZU1h
cHBlckdMOjpwYWludFRvVGFyZ2V0KGNvbnN0IEJpdG1hcFRleHR1cmUmIGFTdXJmYWNlLCBjb25z
dCBJbnRTaXplJiBzdXJmYWNlU2l6ZSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5z
Zm9ybSwgZmxvYXQgb3BhY2l0eSwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpCit7CisgICAg
Y29uc3QgQml0bWFwVGV4dHVyZUdMJiBzdXJmYWNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFw
VGV4dHVyZUdMJj4oYVN1cmZhY2UpOworCisgICAgLy8gQ3JlYXRlIHRoZSBtb2RlbC12aWV3LXBy
b2plY3Rpb24gbWF0cml4IHRvIGRpc3BsYXkgb24gc2NyZWVuLgorICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IG1hdHJpeCA9IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgoc3VyZmFjZVNpemUsIHRydWUp
Lm11bHRMZWZ0KHRyYW5zZm9ybSkubXVsdExlZnQoCisgICAgICAgICAgICAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXgoCisgICAgICAgICAgICAgICAgICAgICAgICBzdXJmYWNlLm1fYWN0dWFsU2l6
ZS53aWR0aCgpLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgc3VyZmFjZS5t
X2FjdHVhbFNpemUuaGVpZ2h0KCksIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAwLCAw
LCAxLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgc3VyZmFjZS5vZmZzZXQoKS54KCksIHN1
cmZhY2Uub2Zmc2V0KCkueSgpLCAwLCAxCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAg
KTsKKworICAgIGNvbnN0IEdMZmxvYXQgbTRbXSA9IHsKKyAgICAgICAgbWF0cml4Lm0xMSgpLCBt
YXRyaXgubTEyKCksIG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAorICAgICAgICBtYXRyaXgu
bTIxKCksIG1hdHJpeC5tMjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCisgICAgICAg
IG1hdHJpeC5tMzEoKSwgbWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQoKSwK
KyAgICAgICAgbWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0cml4
Lm00NCgpCisgICAgfTsKKworICAgIGNvbnN0IEdMZmxvYXQgbTRzcmNbXSA9IHtzdXJmYWNlLm1f
cmVsYXRpdmVTaXplLndpZHRoKCksIDAsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgc3VyZmFjZS5tX3JlbGF0aXZlU2l6ZS5oZWlnaHQoKSwgMCwgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDF9OworCisgICAgLy8gV2UgYWxy
ZWFkeSBibGVuZGVkIHRoZSBhbHBoYSBpbjsgdGhlIHJlc3VsdCBpcyBwcmVtdWx0aXBsaWVkLgor
ICAgIEdMX0NNRChnbFVzZVByb2dyYW0oZ1NoYWRlckluZm8ucHJvZ3JhbXNbVGV4bWFwU2hhZGVy
SW5mbzo6VGFyZ2V0UHJvZ3JhbV0uaWQpKQorICAgIEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihH
TF9GUkFNRUJVRkZFUiwgMCkpCisgICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwgc3VyZmFjZVNp
emUud2lkdGgoKSwgc3VyZmFjZVNpemUuaGVpZ2h0KCkpKQorICAgIEdMX0NNRChnbERpc2FibGUo
R0xfU1RFTkNJTF9URVNUKSkKKyAgICBjb25zdCBUZXhtYXBTaGFkZXJJbmZvOjpQcm9ncmFtSW5m
byYgcHJvZ3JhbUluZm8gPSBnU2hhZGVySW5mby5wcm9ncmFtc1tUZXhtYXBTaGFkZXJJbmZvOjpU
YXJnZXRQcm9ncmFtXTsKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbUluZm8udmFyc1tU
ZXhtYXBTaGFkZXJJbmZvOjpPcGFjaXR5VmFyaWFibGVdLCBvcGFjaXR5KSkKKyAgICBHTF9DTUQo
Z2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKSkKKyAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBzdXJmYWNlLm1faWQpKQorICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9n
cmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OlNvdXJjZVRleHR1cmVWYXJpYWJsZV0sIDAp
KQorICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW1JbmZvLnZhcnNb
VGV4bWFwU2hhZGVySW5mbzo6SW5WZXJ0ZXhWYXJpYWJsZV0pKQorICAgIEdMX0NNRChnbFVuaWZv
cm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJbk1hdHJpeFZh
cmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00KSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2
KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5Tb3VyY2VNYXRyaXhWYXJpYWJs
ZV0sIDEsIEdMX0ZBTFNFLCBtNHNyYykpCisgICAgR0xfQ01EKGdsQmluZEJ1ZmZlcihHTF9BUlJB
WV9CVUZGRVIsIDApKQorICAgIGNvbnN0IEdMZmxvYXQgdW5pdFJlY3RbXSA9IHswLCAwLCAxLCAw
LCAxLCAxLCAwLCAxfTsKKyAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDIsIEdM
X0ZMT0FULCBHTF9GQUxTRSwgMCwgdW5pdFJlY3QpKQorICAgIEdMX0NNRChnbEJsZW5kRnVuYyhH
TF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpKQorICAgIEdMX0NNRChnbEVuYWJsZShHTF9C
TEVORCkpCisgICAgc2V0Q2xpcCh2aXNpYmxlUmVjdCk7CisKKyAgICBHTF9DTUQoZ2xEcmF3QXJy
YXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpCisgICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0
dHJpYkFycmF5KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5WZXJ0ZXhWYXJp
YWJsZV0pKQorICAgIEdMX0NNRChnbFVzZVByb2dyYW0oMCkpCisgICAgR0xfQ01EKGdsQmluZEJ1
ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDApKQorICAgIG1fY3VyUHJvZ3JhbSA9IFRleG1hcFNoYWRl
ckluZm86OlRhcmdldFByb2dyYW07Cit9CisKK1Bhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4
dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEJpdG1hcFRleHR1cmVHTCgpKTsKK30KKworfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uY2M0MjRjNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisg
Q29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFRleHR1cmVNYXBwZXJH
TF9oCisjZGVmaW5lIFRleHR1cmVNYXBwZXJHTF9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgi
CisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4
dHVyZU1hcHBlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEFuIE9wZW5HTC1FUzIg
aW1wbGVtZW50YXRpb24gb2YgVGV4dHVyZU1hcHBlci4KK2NsYXNzIFRleHR1cmVNYXBwZXJHTCA6
IHB1YmxpYyBUZXh0dXJlTWFwcGVyIHsKK3B1YmxpYzoKKyAgICBUZXh0dXJlTWFwcGVyR0woR3Jh
cGhpY3NDb250ZXh0KiBnYyk7CisgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlckdMKCkge30KKwor
ICAgIC8vIHJlaW1wcyBmcm9tIFRleHR1cmVNYXBwZXIKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1Rl
eHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJp
dG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2Uo
Qml0bWFwVGV4dHVyZSogc3VyZmFjZSk7CisgICAgdmlydHVhbCB2b2lkIHNldENsaXAoY29uc3Qg
SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGFyZ2V0KGNvbnN0IEJpdG1hcFRl
eHR1cmUmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9h
dCBvcGFjaXR5LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCk7CisgICAgdmlydHVhbCBib29s
IGFsbG93U3VyZmFjZUZvclJvb3QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKKyAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIHR5cGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cCgpOwor
Citwcml2YXRlOgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcHJvamVjdGlvbk1hdHJpeDsK
KyAgICBpbnQgbV9jdXJQcm9ncmFtOworfTsKKworLy8gQW4gb2Zmc2NyZWVuIGJ1ZmZlciB0byBi
ZSByZW5kZXJlZCBieSBzb2Z0d2FyZS4KK2NsYXNzIFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVy
IDogcHVibGljIFJlZkNvdW50ZWQ8UkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI+IHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5SR0JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcigpIHt9CisgICAgdmly
dHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBk
aXJ0eVJlY3QsIGJvb2wgb3BhcXVlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCkg
PSAwOworICAgIHZpcnR1YWwgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0ID0gMDsKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxSR0JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcj4gY3JlYXRlKCk7Cit9Owor
CisvLyBOZXh0IHBvd2VyIG9mIHR3by4KK3N0YXRpYyBpbmxpbmUgaW50IG5wb3QoaW50IG51bSkK
K3sKKyAgICBmb3IgKGludCBpID0gMHgxMDAwMDAwMDsgaSA+IDA7IGkgPj49IDEpIHsKKyAgICAg
ICAgaWYgKG51bSA9PSBpKQorICAgICAgICAgICAgcmV0dXJuIG51bTsKKyAgICAgICAgaWYgKG51
bSAmIGkpCisgICAgICAgICAgICByZXR1cm4gKGkgPDwgMSk7CisgICAgfQorICAgIHJldHVybiAx
OworfQorCitzdGF0aWMgaW5saW5lIEludFNpemUgbnBvdChjb25zdCBJbnRTaXplJiBzKQorewor
ICAgIHJldHVybiBJbnRTaXplKG5wb3Qocy53aWR0aCgpKSwgbnBvdChzLmhlaWdodCgpKSk7Cit9
CisKK307CisKKyNlbmRpZgorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70210</attachid>
            <date>2010-10-08 01:53:47 -0700</date>
            <delta_ts>2010-10-08 01:59:23 -0700</delta_ts>
            <desc>OpenGL implementation with Alexis&apos; comments</desc>
            <filename>patch-47070-9.diff</filename>
            <type>text/plain</type>
            <size>28679</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OGM0YzcyYS4uZWI2NDFhNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0xMC0wNyAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5p
dGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBUaGlzIHBhdGNoIGFkZHMgdGhlIE9wZW5HTCBp
bXBsZW1lbnRhdGlvbiBvZiBUZXh0dXJlTWFwcGVyLiBTZWUgdGhlIG90aGVyIGVudHJpZXMgZnJv
bSBidWcgNDcwNzAgZm9yIGRldGFpbHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00NzA3MAorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gUGFydCBvZiBh
IG5ldyBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9UZXh0dXJlTWFwcGVyR0wuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmg6IEFkZGVkLgorCiAyMDEwLTEwLTA1ICBObydhbSBS
b3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5kM2I2MDg4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMCwwICsxLDU5NCBAQAorLyoKKyBDb3B5
cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkhhc2hNYXAuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIlBhc3NS
ZWZQdHIuaCIKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKwor
I2lmIGRlZmluZWQoVEVYTUFQX09QRU5HTF9FU18yKQorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgor
I2VsaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgPGdsLmg+CisjZWxzZQorI2luY2x1ZGUgPEdM
L2dsLmg+CisjZW5kaWYKKworI2lmbmRlZiBURVhNQVBfT1BFTkdMX0VTMgorZXh0ZXJuICJDIiB7
CisgICAgdm9pZCBnbFVuaWZvcm0xZihHTGludCwgR0xmbG9hdCk7CisgICAgdm9pZCBnbFVuaWZv
cm0xaShHTGludCwgR0xpbnQpOworICAgIHZvaWQgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKEdMdWlu
dCwgR0xpbnQsIEdMZW51bSwgR0xib29sZWFuLCBHTHNpemVpLCBjb25zdCBHTHZvaWQqKTsKKyAg
ICB2b2lkIGdsVW5pZm9ybTRmKEdMaW50LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZs
b2F0KTsKKyAgICB2b2lkIGdsU2hhZGVyU291cmNlKEdMdWludCwgR0xzaXplaSwgY29uc3QgY2hh
cioqLCBjb25zdCBHTGludCopOworICAgIEdMdWludCBnbENyZWF0ZVNoYWRlcihHTGVudW0pOwor
ICAgIHZvaWQgZ2xTaGFkZXJTb3VyY2UoR0x1aW50LCBHTHNpemVpLCBjb25zdCBjaGFyKiosIGNv
bnN0IEdMaW50Kik7CisgICAgdm9pZCBnbENvbXBpbGVTaGFkZXIoR0x1aW50KTsKKyAgICB2b2lk
IGdsRGVsZXRlU2hhZGVyKEdMdWludCk7CisgICAgdm9pZCBnbFVuaWZvcm1NYXRyaXg0ZnYoR0xp
bnQsIEdMc2l6ZWksIEdMYm9vbGVhbiwgY29uc3QgR0xmbG9hdCopOworICAgIEdMdWludCBnbENy
ZWF0ZVByb2dyYW0oKTsKKyAgICB2b2lkIGdsQXR0YWNoU2hhZGVyKEdMdWludCwgR0x1aW50KTsK
KyAgICB2b2lkIGdsTGlua1Byb2dyYW0oR0x1aW50KTsKKyAgICB2b2lkIGdsVXNlUHJvZ3JhbShH
THVpbnQpOworICAgIHZvaWQgZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0x1aW50KTsKKyAg
ICB2b2lkIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0x1aW50KTsKKyAgICB2b2lkIGdsQmlu
ZEZyYW1lYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMdWludCBmcmFtZWJ1ZmZlcik7CisgICAgdm9p
ZCBnbERlbGV0ZUZyYW1lYnVmZmVycyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCogZnJhbWVidWZm
ZXJzKTsKKyAgICB2b2lkIGdsR2VuRnJhbWVidWZmZXJzKEdMc2l6ZWkgbiwgR0x1aW50KiBmcmFt
ZWJ1ZmZlcnMpOworICAgIHZvaWQgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTGVudW0gdGFyZ2V0
LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHRleHRhcmdldCwgR0x1aW50IHRleHR1cmUsIEdM
aW50IGxldmVsKTsKKyAgICB2b2lkIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVy
aXYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSBwbmFtZSwgR0xpbnQq
IHBhcmFtcyk7CisgICAgdm9pZCBnbEJpbmRCdWZmZXIoR0xlbnVtLCBHTHVpbnQpOworICAgIHZv
aWQgZ2xEZWxldGVCdWZmZXJzKEdMc2l6ZWksIGNvbnN0IEdMdWludCopOworICAgIHZvaWQgZ2xH
ZW5CdWZmZXJzKEdMc2l6ZWksIEdMdWludCopOworICAgIHZvaWQgZ2xCdWZmZXJEYXRhKEdMZW51
bSwgR0xzaXplaXB0ciwgY29uc3QgR0x2b2lkKiwgR0xlbnVtKTsKKyAgICB2b2lkIGdsQnVmZmVy
U3ViRGF0YShHTGVudW0sIEdMc2l6ZWlwdHIsIEdMc2l6ZWlwdHIsIGNvbnN0IEdMdm9pZCopOwor
ICAgIHZvaWQgZ2xHZXRQcm9ncmFtSW5mb0xvZyhHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSwgR0xz
aXplaSosIEdMY2hhciopOworCisjaWYgIVBMQVRGT1JNKE1BQykKKyAgICBHTGludCBnbEdldFVu
aWZvcm1Mb2NhdGlvbihHTHVpbnQsIGNvbnN0IEdMY2hhciopOworICAgIEdMaW50IGdsQmluZEF0
dHJpYkxvY2F0aW9uKEdMdWludCwgR0x1aW50LCBjb25zdCBHTGNoYXIqKTsKKyNlbmRpZgorfQor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworaW5saW5lIHN0YXRpYyB2b2lkIGRlYnVn
R0xDb21tYW5kKGNvbnN0IGNoYXIqIGNvbW1hbmQsIGludCBsaW5lKQoreworICAgIGNvbnN0IEdM
ZW51bSBlcnIgPSBnbEdldEVycm9yKCk7CisgICAgaWYgKCFlcnIpCisgICAgICAgIHJldHVybjsK
KyAgICBXVEZSZXBvcnRFcnJvcihfX0ZJTEVfXywgbGluZSwgV1RGX1BSRVRUWV9GVU5DVElPTiwg
IltUZXh0dXJlTWFwcGVyIEdMXSBDb21tYW5kIGZhaWxlZDogJXMgKCV4KVxuIiwgY29tbWFuZCwg
ZXJyKTsKK30KKworI2RlZmluZSBERUJVR19HTF9DT01NQU5EUworCisjaWZkZWYgREVCVUdfR0xf
Q09NTUFORFMKKyNkZWZpbmUgR0xfQ01EKHgpIHt4LCBkZWJ1Z0dMQ29tbWFuZCgjeCwgX19MSU5F
X18pOyB9CisjZWxzZQorI2RlZmluZSBHTF9DTUQoeCkgeAorI2VuZGlmCisKK2NsYXNzIEJpdG1h
cFRleHR1cmVHTCA6IHB1YmxpYyBCaXRtYXBUZXh0dXJlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IHZvaWQgZGVzdHJveSgpOworICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoY29u
c3QgSW50U2l6ZSYsIGJvb2wgb3BhcXVlKTsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CisgICAgdmlydHVh
bCB2b2lkIGVuZFBhaW50KCk7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJ
bWFnZSopOworCitwcml2YXRlOgorICAgIEdMdWludCBtX2lkOworICAgIE5hdGl2ZUltYWdlUHRy
IG1faW1hZ2U7CisgICAgRmxvYXRTaXplIG1fcmVsYXRpdmVTaXplOworICAgIGJvb2wgbV9vcGFx
dWU7CisgICAgSW50U2l6ZSBtX3RleHR1cmVTaXplOworICAgIFJlZlB0cjxSR0JBMzJQcmVtdWx0
aW1wbGllZEJ1ZmZlcj4gbV9idWZmZXI7CisgICAgSW50UmVjdCBtX2RpcnR5UmVjdDsKKyAgICBH
THVpbnQgbV9mYm87CisgICAgSW50U2l6ZSBtX2FjdHVhbFNpemU7CisgICAgYm9vbCBtX3N1cmZh
Y2VOZWVkc1Jlc2V0OworICAgIEJpdG1hcFRleHR1cmVHTCgpCisgICAgICAgIDogbV9pZCgwKQor
ICAgICAgICAsIG1faW1hZ2UoMCkKKyAgICAgICAgLCBtX29wYXF1ZShmYWxzZSkKKyAgICAgICAg
LCBtX2ZibygwKQorICAgICAgICAsIG1fc3VyZmFjZU5lZWRzUmVzZXQodHJ1ZSkKKyAgICB7Cisg
ICAgfQorCisgICAgZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJHTDsKK307CisKK3N0YXRpYyBz
dHJ1Y3QgVGV4bWFwU2hhZGVySW5mbyB7CisgICAgZW51bSBTaGFkZXJQcm9ncmFtSW5kZXggewor
ICAgICAgICBTaW1wbGVQcm9ncmFtLAorICAgICAgICBPcGFjaXR5QW5kTWFza1Byb2dyYW0sCisg
ICAgICAgIFRhcmdldFByb2dyYW0sCisgICAgICAgIE51bVByb2dyYW1zCisgICAgfTsKKworICAg
IGVudW0gU2hhZGVyVmFyaWFibGVJbmRleCB7CisgICAgICAgIEluTWF0cml4VmFyaWFibGUsCisg
ICAgICAgIEluU291cmNlTWF0cml4VmFyaWFibGUsCisgICAgICAgIEluTWFza01hdHJpeFZhcmlh
YmxlLAorICAgICAgICBJblZlcnRleFZhcmlhYmxlLAorCisgICAgICAgIE9wYWNpdHlWYXJpYWJs
ZSwKKyAgICAgICAgU291cmNlVGV4dHVyZVZhcmlhYmxlLAorICAgICAgICBNYXNrVGV4dHVyZVZh
cmlhYmxlLAorICAgICAgICBOdW1WYXJpYWJsZXMKKyAgICB9OworCisgICAgc3RydWN0IFByb2dy
YW1JbmZvIHsKKyAgICAgICAgR0x1aW50IGlkOworICAgICAgICBHTGludCB2YXJzW051bVZhcmlh
Ymxlc107CisgICAgfTsKKworICAgIEdMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihTaGFkZXJQcm9n
cmFtSW5kZXggcHJvZywgU2hhZGVyVmFyaWFibGVJbmRleCB2YXIsIGNvbnN0IGNoYXIqIG5hbWUp
CisgICAgeworICAgICAgICByZXR1cm4gcHJvZ3JhbXNbcHJvZ10udmFyc1t2YXJdID0gZ2xHZXRV
bmlmb3JtTG9jYXRpb24ocHJvZ3JhbXNbcHJvZ10uaWQsIG5hbWUpOworICAgIH0KKworICAgIHZv
aWQgY3JlYXRlU2hhZGVyUHJvZ3JhbShjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNv
bnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlLCBTaGFkZXJQcm9ncmFtSW5kZXggaW5kZXgp
CisgICAgeworICAgICAgICBHTHVpbnQgdmVydGV4U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xf
VkVSVEVYX1NIQURFUik7CisgICAgICAgIEdMdWludCBmcmFnbWVudFNoYWRlciA9IGdsQ3JlYXRl
U2hhZGVyKEdMX0ZSQUdNRU5UX1NIQURFUik7CisgICAgICAgIEdMX0NNRChnbFNoYWRlclNvdXJj
ZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2UsIDApKQorICAgICAgICBHTF9D
TUQoZ2xTaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIDEsICZmcmFnbWVudFNoYWRlclNvdXJj
ZSwgMCkpCisgICAgICAgIEdMdWludCBwcm9ncmFtSUQgPSBnbENyZWF0ZVByb2dyYW0oKTsKKyAg
ICAgICAgR0xfQ01EKGdsQ29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpKQorICAgICAgICBHTF9D
TUQoZ2xDb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKSkKKyAgICAgICAgR0xfQ01EKGdsQXR0
YWNoU2hhZGVyKHByb2dyYW1JRCwgdmVydGV4U2hhZGVyKSkKKyAgICAgICAgR0xfQ01EKGdsQXR0
YWNoU2hhZGVyKHByb2dyYW1JRCwgZnJhZ21lbnRTaGFkZXIpKQorICAgICAgICBHTF9DTUQoZ2xC
aW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAwLCAiSW5WZXJ0ZXgiKSkKKyAgICAgICAgR0xf
Q01EKGdsTGlua1Byb2dyYW0ocHJvZ3JhbUlEKSkKKyAgICAgICAgcHJvZ3JhbXNbaW5kZXhdLmlk
ID0gcHJvZ3JhbUlEOworICAgICAgICBjaGFyIGluZm9Mb2dbMTAyNF07CisgICAgICAgIGludCBs
ZW47CisgICAgICAgIEdMX0NNRChnbEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW1JRCwgMTAyNCwg
JmxlbiwgaW5mb0xvZykpOworICAgIH0KKworICAgIFByb2dyYW1JbmZvIHByb2dyYW1zW051bVBy
b2dyYW1zXTsKKworfSBnU2hhZGVySW5mbzsKKworI2RlZmluZSBURVhNQVBfR0VUX1NIQURFUl9W
QVJfTE9DQVRJT04ocHJvZywgdmFyKSBcCisgICAgICAgICAgICBpZiAoZ1NoYWRlckluZm8uZ2V0
VW5pZm9ybUxvY2F0aW9uKFRleG1hcFNoYWRlckluZm86OnByb2cjI1Byb2dyYW0sIFRleG1hcFNo
YWRlckluZm86OnZhciMjVmFyaWFibGUsICN2YXIpIDwgMCkgXAorICAgICAgICAgICAgICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkbid0IGZpbmQgdmFyaWFibGUgIiN2YXIiIGluIHByb2dyYW0gIiNw
cm9nIlxuIik7CisjZGVmaW5lIFRFWE1BUF9CVUlMRF9TSEFERVIocHJvZ3JhbSkgZ1NoYWRlcklu
Zm8uY3JlYXRlU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3VyY2UjI3Byb2dyYW0sIGZyYWdt
ZW50U2hhZGVyU291cmNlIyNwcm9ncmFtLCBUZXhtYXBTaGFkZXJJbmZvOjpwcm9ncmFtIyNQcm9n
cmFtKTsKKworVGV4dHVyZU1hcHBlckdMOjpUZXh0dXJlTWFwcGVyR0woR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0KQorICAgIDogVGV4dHVyZU1hcHBlcihjb250ZXh0KQorICAgICwgbV9jdXJQcm9n
cmFtKFRleG1hcFNoYWRlckluZm86OlRhcmdldFByb2dyYW0pCit7CisgICAgc3RhdGljIGJvb2wg
c2hhZGVyc0NvbXBpbGVkID0gZmFsc2U7CisgICAgaWYgKHNoYWRlcnNDb21waWxlZCkKKyAgICAg
ICAgcmV0dXJuOworICAgIHNoYWRlcnNDb21waWxlZCA9IHRydWU7CisjaWZuZGVmIFRFWE1BUF9P
UEVOR0xfRVMyCisjZGVmaW5lIE9FUzJfUEVSQ0lTSU9OX0RFRklOSVRJT05TIFwKKyAgICAiI2Rl
ZmluZSBsb3dwXG4jZGVmaW5lIGhpZ2hwXG4iCisjZWxzZQorI2RlZmluZSBPRVMyX1BFUkNJU0lP
Tl9ERUZJTklUSU9OUworI2VuZGlmCisKKyAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNv
dXJjZU9wYWNpdHlBbmRNYXNrID0KKyAgICAgICAgICAgIE9FUzJfUEVSQ0lTSU9OX0RFRklOSVRJ
T05TCisiICAgICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgU291cmNlVGV4dHVyZSwgTWFz
a1RleHR1cmU7ICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB1bmlm
b3JtIGxvd3AgZmxvYXQgT3BhY2l0eTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiBPdXRUZXhDb29y
ZFNvdXJjZSwgT3V0VGV4Q29vcmRNYXNrOyAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAg
ICAgdm9pZCBtYWluKHZvaWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAg
ICAgICAgICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQoU291cmNlVGV4dHVyZSwg
T3V0VGV4Q29vcmRTb3VyY2UpOyAgXG4iCisiICAgICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBt
YXNrQ29sb3IgPSB0ZXh0dXJlMkQoTWFza1RleHR1cmUsIE91dFRleENvb3JkTWFzayk7ICBcbiIK
KyIgICAgICAgICAgICAgICAgICAgbG93cCBmbG9hdCBvID0gT3BhY2l0eSAqIG1hc2tDb2xvci5h
OyAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICBnbF9G
cmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIG8sIGNvbG9yLmEgKiBvKTsgICAgICAgICAgICAg
ICAgXG4iCisiICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CisKKyAgICBjb25zdCBjaGFy
KiB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9CisgICAgICAgICAgICBPRVMyX1BF
UkNJU0lPTl9ERUZJTklUSU9OUworIiAgICAgICAgICAgICAgIHVuaWZvcm0gbWF0NCBJbk1hdHJp
eCwgSW5Tb3VyY2VNYXRyaXgsIEluTWFza01hdHJpeDsgICAgICAgICAgICBcbiIKKyIgICAgICAg
ICAgICAgICBhdHRyaWJ1dGUgdmVjNCBJblZlcnRleDsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIE91
dFRleENvb3JkU291cmNlLCBPdXRUZXhDb29yZE1hc2s7ICAgICAgICAgIFxuIgorIiAgICAgICAg
ICAgICAgIHZvaWQgbWFpbih2b2lkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAg
ICAgICAgICAgIE91dFRleENvb3JkU291cmNlID0gdmVjMihJblNvdXJjZU1hdHJpeCAqIEluVmVy
dGV4KTsgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICBPdXRUZXhDb29yZE1hc2sgPSB2
ZWMyKEluTWFza01hdHJpeCAqIEluVmVydGV4KTsgICAgICAgICAgICBcbiIKKyIgICAgICAgICAg
ICAgICAgICAgZ2xfUG9zaXRpb24gPSBJbk1hdHJpeCAqIEluVmVydGV4OyAgICAgICAgICAgICAg
ICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKworICAgIGNvbnN0
IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlU2ltcGxlID0KKyAgICAgICAgICAgIE9FUzJfUEVS
Q0lTSU9OX0RFRklOSVRJT05TCisiICAgICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgU291
cmNlVGV4dHVyZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAg
ICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgT3BhY2l0eTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAg
dmVjMiBPdXRUZXhDb29yZFNvdXJjZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4i
CisiICAgICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQo
U291cmNlVGV4dHVyZSwgT3V0VGV4Q29vcmRTb3VyY2UpOyAgXG4iCisiICAgICAgICAgICAgICAg
ICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogT3BhY2l0eSwgY29sb3IuYSAqIE9w
YWNpdHkpOyAgICBcbiIKKyIgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKworICAgIGNv
bnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSA9CisgICAgICAgICAgICBPRVMyX1BF
UkNJU0lPTl9ERUZJTklUSU9OUworIiAgICAgICAgICAgICAgIHVuaWZvcm0gbWF0NCBJbk1hdHJp
eCwgSW5Tb3VyY2VNYXRyaXg7ICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAg
ICAgIGF0dHJpYnV0ZSB2ZWM0IEluVmVydGV4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiBPdXRUZXhDb29y
ZFNvdXJjZTsgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZvaWQg
bWFpbih2b2lkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxu
IgorIiAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICBPdXRUZXhDb29y
ZFNvdXJjZSA9IHZlYzIoSW5Tb3VyY2VNYXRyaXggKiBJblZlcnRleCk7ICAgIFxuIgorIiAgICAg
ICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IEluTWF0cml4ICogSW5WZXJ0ZXg7ICAgICAgICAg
ICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKworICAgIGNvbnN0IGNo
YXIqIGZyYWdtZW50U2hhZGVyU291cmNlVGFyZ2V0ID0KKyAgICAgICAgICAgIE9FUzJfUEVSQ0lT
SU9OX0RFRklOSVRJT05TCisiICAgICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgU291cmNl
VGV4dHVyZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgor
IiAgICAgICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCBPcGFjaXR5OyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB2
YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0VGV4Q29vcmRTb3VyY2U7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFxuIgorIiAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAg
ICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKFNvdXJjZVRleHR1cmUsIE91dFRl
eENvb3JkU291cmNlKTsgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgIGdsX0ZyYWdD
b2xvciA9IHZlYzQoY29sb3IuYmdyICogT3BhY2l0eSwgY29sb3IuYSAqIE9wYWNpdHkpOyAgICAg
ICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CisKKyAg
ICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VUYXJnZXQgPSB2ZXJ0ZXhTaGFkZXJTb3Vy
Y2VTaW1wbGU7CisKKyAgICBURVhNQVBfQlVJTERfU0hBREVSKFNpbXBsZSkKKyAgICBURVhNQVBf
QlVJTERfU0hBREVSKE9wYWNpdHlBbmRNYXNrKQorICAgIFRFWE1BUF9CVUlMRF9TSEFERVIoVGFy
Z2V0KQorCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKE9wYWNpdHlBbmRNYXNr
LCBJbk1hdHJpeCkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oT3BhY2l0eUFu
ZE1hc2ssIEluU291cmNlTWF0cml4KQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElP
TihPcGFjaXR5QW5kTWFzaywgSW5NYXNrTWF0cml4KQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZB
Ul9MT0NBVElPTihPcGFjaXR5QW5kTWFzaywgU291cmNlVGV4dHVyZSkKKyAgICBURVhNQVBfR0VU
X1NIQURFUl9WQVJfTE9DQVRJT04oT3BhY2l0eUFuZE1hc2ssIE1hc2tUZXh0dXJlKQorICAgIFRF
WE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihPcGFjaXR5QW5kTWFzaywgT3BhY2l0eSkKKwor
ICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihTaW1wbGUsIEluU291cmNlTWF0cml4
KQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihTaW1wbGUsIEluTWF0cml4KQor
ICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihTaW1wbGUsIFNvdXJjZVRleHR1cmUp
CisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKFNpbXBsZSwgT3BhY2l0eSkKKwor
ICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihUYXJnZXQsIEluU291cmNlTWF0cml4
KQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihUYXJnZXQsIEluTWF0cml4KQor
ICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihUYXJnZXQsIFNvdXJjZVRleHR1cmUp
CisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKFRhcmdldCwgT3BhY2l0eSkKK30K
Kwordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUm
IHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1
cmUqIG1hc2tUZXh0dXJlKQoreworICAgIGlmICghdGV4dHVyZS5pc1ZhbGlkKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCYgdGV4dHVyZUdMID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4odGV4dHVyZSk7CisKKyAgICBUZXhtYXBTaGFk
ZXJJbmZvOjpTaGFkZXJQcm9ncmFtSW5kZXggcHJvZ3JhbTsKKyAgICBpZiAobWFza1RleHR1cmUp
CisgICAgICAgIHByb2dyYW0gPSBUZXhtYXBTaGFkZXJJbmZvOjpPcGFjaXR5QW5kTWFza1Byb2dy
YW07CisgICAgZWxzZQorICAgICAgICBwcm9ncmFtID0gVGV4bWFwU2hhZGVySW5mbzo6U2ltcGxl
UHJvZ3JhbTsKKworICAgIGNvbnN0IFRleG1hcFNoYWRlckluZm86OlByb2dyYW1JbmZvJiBwcm9n
cmFtSW5mbyA9IGdTaGFkZXJJbmZvLnByb2dyYW1zW3Byb2dyYW1dOworICAgIGlmIChtX2N1clBy
b2dyYW0gIT0gcHJvZ3JhbSkgeworICAgICAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHByb2dyYW1J
bmZvLmlkKSkKKyAgICAgICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGdTaGFk
ZXJJbmZvLnByb2dyYW1zW21fY3VyUHJvZ3JhbV0udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblZl
cnRleFZhcmlhYmxlXSkpCisgICAgICAgIG1fY3VyUHJvZ3JhbSA9IHByb2dyYW07CisgICAgICAg
IEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFw
U2hhZGVySW5mbzo6SW5WZXJ0ZXhWYXJpYWJsZV0pKQorICAgIH0KKworICAgIEdMX0NNRChnbERp
c2FibGUoR0xfREVQVEhfVEVTVCkpCisgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9TVEVOQ0lMX1RF
U1QpKQorCisgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpCisgICAgR0xf
Q01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4dHVyZUdMLm1faWQpKQorICAgIEdM
X0NNRChnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCAwKSkKKyAgICBjb25zdCBHTGZsb2F0
IHVuaXRSZWN0W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07CisgICAgR0xfQ01EKGdsVmVy
dGV4QXR0cmliUG9pbnRlcigwLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHVuaXRSZWN0KSkK
KworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4
KG1fcHJvamVjdGlvbk1hdHJpeCkubXVsdExlZnQobW9kZWxWaWV3TWF0cml4KS5tdWx0TGVmdChU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgKKyAgICAgICAgICAgIHRhcmdldFJlY3Qud2lkdGgoKSwgMCwg
MCwgMCwKKyAgICAgICAgICAgIDAsIHRhcmdldFJlY3QuaGVpZ2h0KCksIDAsIDAsCisgICAgICAg
ICAgICAwLCAwLCAxLCAwLAorICAgICAgICAgICAgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3Qu
eSgpLCAwLCAxKSk7CisKKyAgICBjb25zdCBHTGZsb2F0IG00W10gPSB7CisgICAgICAgIG1hdHJp
eC5tMTEoKSwgbWF0cml4Lm0xMigpLCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQoKSwKKyAgICAg
ICAgbWF0cml4Lm0yMSgpLCBtYXRyaXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgp
LAorICAgICAgICBtYXRyaXgubTMxKCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0zMygpLCBtYXRy
aXgubTM0KCksCisgICAgICAgIG1hdHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBtYXRyaXgubTQz
KCksIG1hdHJpeC5tNDQoKQorICAgIH07CisgICAgY29uc3QgR0xmbG9hdCBtNHNyY1tdID0ge3Rl
eHR1cmVHTC5tX3JlbGF0aXZlU2l6ZS53aWR0aCgpLCAwLCAwLCAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIHRleHR1cmVHTC5tX3JlbGF0aXZlU2l6ZS5oZWlnaHQo
KSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxLCAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDF9OworICAg
IEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJ
bmZvOjpJbk1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00KSkKKyAgICBHTF9DTUQoZ2xV
bmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5Tb3Vy
Y2VNYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNHNyYykpCisgICAgR0xfQ01EKGdsVW5p
Zm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6U291cmNlVGV4dHVyZVZh
cmlhYmxlXSwgMCkpCisgICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW1JbmZvLnZhcnNbVGV4
bWFwU2hhZGVySW5mbzo6T3BhY2l0eVZhcmlhYmxlXSwgb3BhY2l0eSkpCisKKyAgICBpZiAobWFz
a1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQoKSkgeworICAgICAgICBjb25zdCBCaXRt
YXBUZXh0dXJlR0wqIG1hc2tUZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0
dXJlR0wqPihtYXNrVGV4dHVyZSk7CisgICAgICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xf
VEVYVFVSRTEpKQorICAgICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBt
YXNrVGV4dHVyZUdMLT5tX2lkKSkKKyAgICAgICAgY29uc3QgR0xmbG9hdCBtNG1hc2tbXSA9IHtt
YXNrVGV4dHVyZUdMLT5tX3JlbGF0aXZlU2l6ZS53aWR0aCgpLCAwLCAwLCAwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBtYXNrVGV4dHVyZUdMLT5tX3JlbGF0
aXZlU2l6ZS5oZWlnaHQoKSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgMCwgMSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgMCwgMCwgMX07CisgICAgICAgIGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5m
by52YXJzW1RleG1hcFNoYWRlckluZm86OkluTWFza01hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFM
U0UsIG00bWFzayk7CisgICAgICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtSW5mby52YXJz
W1RleG1hcFNoYWRlckluZm86Ok1hc2tUZXh0dXJlVmFyaWFibGVdLCAxKSkKKyAgICAgICAgR0xf
Q01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpCisgICAgfQorCisKKyAgICBpZiAodGV4
dHVyZUdMLm1fb3BhcXVlICYmIG9wYWNpdHkgPiAwLjk5ICYmICFtYXNrVGV4dHVyZSkKKyAgICAg
ICAgR0xfQ01EKGdsRGlzYWJsZShHTF9CTEVORCkpCisgICAgZWxzZSB7CisgICAgICAgIEdMX0NN
RChnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpKQorICAgICAgICBH
TF9DTUQoZ2xFbmFibGUoR0xfQkxFTkQpKQorICAgIH0KKworICAgIEdMX0NNRChnbERyYXdBcnJh
eXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KSkKK30KKworCitjb25zdCBjaGFyKiBUZXh0dXJlTWFw
cGVyR0w6OnR5cGUoKSBjb25zdAoreworICAgIHJldHVybiAiT3BlbkdMIjsKK30KKwordm9pZCBC
aXRtYXBUZXh0dXJlR0w6OnJlc2V0KGNvbnN0IEludFNpemUmIG5ld1NpemUsIGJvb2wgb3BhcXVl
KQoreworICAgIEJpdG1hcFRleHR1cmU6OnJlc2V0KG5ld1NpemUsIG9wYXF1ZSk7CisgICAgbV9p
bWFnZSA9IDA7CisgICAgSW50U2l6ZSBuZXdUZXh0dXJlU2l6ZSA9IG5leHRQb3dlck9mVHdvKG5l
d1NpemUpOworICAgIGJvb2wganVzdENyZWF0ZWQgPSBmYWxzZTsKKyAgICBpZiAoIW1faWQpIHsK
KyAgICAgICAgR0xfQ01EKGdsR2VuVGV4dHVyZXMoMSwgJm1faWQpKQorICAgICAgICBqdXN0Q3Jl
YXRlZCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGp1c3RDcmVhdGVkIHx8IG5ld1RleHR1cmVT
aXplLndpZHRoKCkgPiBtX3RleHR1cmVTaXplLndpZHRoKCkgfHwgbmV3VGV4dHVyZVNpemUuaGVp
Z2h0KCkgPiBtX3RleHR1cmVTaXplLmhlaWdodCgpKSB7CisgICAgICAgIG1fdGV4dHVyZVNpemUg
PSBuZXdUZXh0dXJlU2l6ZTsKKyAgICAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgbV9pZCkpCisgICAgICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8y
RCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpKQorICAgICAgICBHTF9DTUQoZ2xU
ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElO
RUFSKSkKKyAgICAgICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSkpCisgICAgICAgIEdMX0NNRChnbFRleFBh
cmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VE
R0UpKQorICAgICAgICBHTF9DTUQoZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JH
QkEsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSwgMCwgR0xf
UkdCQSwgR0xfVU5TSUdORURfQllURSwgMCkpCisgICAgfQorICAgIG1fYWN0dWFsU2l6ZSA9IG5l
d1NpemU7CisgICAgbV9yZWxhdGl2ZVNpemUgPSBGbG9hdFNpemUoZmxvYXQobmV3U2l6ZS53aWR0
aCgpKSAvIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgZmxvYXQobmV3U2l6ZS5oZWlnaHQoKSkgLyBt
X3RleHR1cmVTaXplLmhlaWdodCgpKTsKKyAgICBtX29wYXF1ZSA9IG9wYXF1ZTsKKyAgICBtX3N1
cmZhY2VOZWVkc1Jlc2V0ID0gdHJ1ZTsKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIEJp
dG1hcFRleHR1cmVHTDo6YmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7Cisg
ICAgbV9idWZmZXIgPSBSR0JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcjo6Y3JlYXRlKCk7CisgICAg
bV9kaXJ0eVJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgcmV0dXJuIG1fYnVmZmVyLT5iZWdpblBhaW50
KGRpcnR5UmVjdCwgbV9vcGFxdWUpOworfQorCit2b2lkIEJpdG1hcFRleHR1cmVHTDo6ZW5kUGFp
bnQoKQoreworICAgIGlmICghbV9idWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX2J1ZmZl
ci0+ZW5kUGFpbnQoKTsKKyAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBt
X2lkKSkKKyAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1fZGly
dHlSZWN0LngoKSwgbV9kaXJ0eVJlY3QueSgpLCBtX2RpcnR5UmVjdC53aWR0aCgpLCBtX2RpcnR5
UmVjdC5oZWlnaHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgbV9idWZmZXItPmRhdGEo
KSkpCisgICAgbV9idWZmZXIuY2xlYXIoKTsKK30KKworc3RydWN0IFRleG1hcEdMU2hhZGVyVGV4
dHVyZXMgeworICAgIHN0cnVjdCBFbnRyeSB7CisgICAgICAgIEdMdWludCB0ZXh0dXJlOworICAg
ICAgICBpbnQgcmVmQ291bnQ7CisgICAgfTsKKyAgICBIYXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBF
bnRyeT4gaW1hZ2VUb1RleHR1cmU7CisgICAgR0x1aW50IGZpbmRPckNyZWF0ZShOYXRpdmVJbWFn
ZVB0ciBpbWFnZSwgYm9vbCYgZm91bmQpCisgICAgeworICAgICAgICBIYXNoTWFwPE5hdGl2ZUlt
YWdlUHRyLCBFbnRyeT46Oml0ZXJhdG9yIGl0ID0gaW1hZ2VUb1RleHR1cmUuZmluZChpbWFnZSk7
CisgICAgICAgIGZvdW5kID0gZmFsc2U7CisgICAgICAgIGlmIChpdCAhPSBpbWFnZVRvVGV4dHVy
ZS5lbmQoKSkgeworICAgICAgICAgICAgaXQtPnNlY29uZC5yZWZDb3VudCsrOworICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQudGV4dHVyZTsK
KyAgICAgICAgfQorICAgICAgICBFbnRyeSBlbnRyeTsKKyAgICAgICAgR0xfQ01EKGdsR2VuVGV4
dHVyZXMoMSwgJmVudHJ5LnRleHR1cmUpKTsKKyAgICAgICAgZW50cnkucmVmQ291bnQgPSAxOwor
ICAgICAgICBpbWFnZVRvVGV4dHVyZS5hZGQoaW1hZ2UsIGVudHJ5KTsKKyAgICAgICAgcmV0dXJu
IGVudHJ5LnRleHR1cmU7CisgICAgfQorCisgICAgYm9vbCBkZXJlZihOYXRpdmVJbWFnZVB0ciBp
bWFnZSkKKyAgICB7CisgICAgICAgIEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIsIEVudHJ5Pjo6aXRl
cmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5maW5kKGltYWdlKTsKKyAgICAgICAgaWYgKGl0ICE9
IGltYWdlVG9UZXh0dXJlLmVuZCgpKSB7CisgICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5yZWZD
b3VudCA8IDIpIHsKKyAgICAgICAgICAgICAgICBpbWFnZVRvVGV4dHVyZS5yZW1vdmUoaXQpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCitzdGF0aWMgVGV4bWFwR0xTaGFkZXJU
ZXh0dXJlcyBnVGV4dHVyZVJlcG9zaXRvcnk7CisKK3ZvaWQgQml0bWFwVGV4dHVyZUdMOjpzZXRD
b250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQoreworICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2
ZUltYWdlID0gaW1hZ2UgPyBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSA6IDA7
CisgICAgaWYgKCFpbWFnZSB8fCAhbmF0aXZlSW1hZ2UpIHsKKyAgICAgICAgaWYgKG1faW1hZ2Up
CisgICAgICAgICAgICBkZXN0cm95KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAobmF0aXZlSW1hZ2UgPT0gbV9pbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIGJvb2wgZm91
bmQgPSBmYWxzZTsKKyAgICBHTHVpbnQgbmV3VGV4dHVyZUlEID0gZ1RleHR1cmVSZXBvc2l0b3J5
LmZpbmRPckNyZWF0ZShuYXRpdmVJbWFnZSwgZm91bmQpOworICAgIGlmIChuZXdUZXh0dXJlSUQg
IT0gbV9pZCkgeworICAgICAgICBkZXN0cm95KCk7CisgICAgICAgIG1faWQgPSBuZXdUZXh0dXJl
SUQ7CisgICAgICAgIHJlc2V0KGltYWdlLT5zaXplKCksIGZhbHNlKTsKKyAgICAgICAgbV9pbWFn
ZSA9IG5hdGl2ZUltYWdlOworICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICBHcmFw
aGljc0NvbnRleHQgY29udGV4dChiZWdpblBhaW50KEludFJlY3QoMCwgMCwgbV90ZXh0dXJlU2l6
ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKSkpOworICAgICAgICAgICAgY29udGV4
dC5kcmF3SW1hZ2UoaW1hZ2UsIERldmljZUNvbG9yU3BhY2UsIEludFBvaW50KDAsIDApLCBDb21w
b3NpdGVDb3B5KTsKKyAgICAgICAgICAgIGVuZFBhaW50KCk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3ZvaWQgQml0bWFwVGV4dHVyZUdMOjpkZXN0cm95KCkKK3sKKyAgICBpZiAobV9pZCAmJiAo
IW1faW1hZ2UgfHwgIWdUZXh0dXJlUmVwb3NpdG9yeS5kZXJlZihtX2ltYWdlKSkpCisgICAgICAg
IEdMX0NNRChnbERlbGV0ZVRleHR1cmVzKDEsICZtX2lkKSkKKyAgICBpZiAobV9mYm8pCisgICAg
ICAgIEdMX0NNRChnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pKQorCisgICAgbV9mYm8g
PSAwOworICAgIG1faWQgPSAwOworICAgIG1fdGV4dHVyZVNpemUgPSBJbnRTaXplKCk7CisgICAg
bV9yZWxhdGl2ZVNpemUgPSBGbG9hdFNpemUoMSwgMSk7Cit9CisKK2Jvb2wgQml0bWFwVGV4dHVy
ZUdMOjppc1ZhbGlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pZDsKK30KKworSW50U2l6ZSBC
aXRtYXBUZXh0dXJlR0w6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3RleHR1cmVTaXpl
OworfQorCitzdGF0aWMgaW5saW5lIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNyZWF0ZVByb2plY3Rp
b25NYXRyaXgoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBmbGlwKQoreworICAgIHJldHVybiBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgyLjAgLyBmbG9hdChzaXplLndpZHRoKCkpLCAwLCAwLCAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAoZmxpcCA/IC0yLjAgOiAyLjApIC8g
ZmxvYXQoc2l6ZS5oZWlnaHQoKSksIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsIDAsIC0wLjAwMDAwMSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LTEsIGZsaXAgPyAxIDogLTEsIDAsIDEpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6Y2xl
YW51cCgpCit7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpiaW5kU3VyZmFjZShCaXRtYXBU
ZXh0dXJlICpzdXJmYWNlUG9pbnRlcikKK3sKKyAgICBCaXRtYXBUZXh0dXJlR0wqIHN1cmZhY2Ug
PSBzdGF0aWNfY2FzdDxCaXRtYXBUZXh0dXJlR0wqPihzdXJmYWNlUG9pbnRlcik7CisKKyAgICBp
ZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybjsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
YXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KHN1cmZhY2UtPnNpemUoKSwgZmFsc2UpOwor
ICAgIG1hdHJpeC50cmFuc2xhdGUoLXN1cmZhY2UtPm9mZnNldCgpLngoKSwgLXN1cmZhY2UtPm9m
ZnNldCgpLnkoKSk7CisKKyAgICBpZiAoc3VyZmFjZS0+bV9zdXJmYWNlTmVlZHNSZXNldCB8fCAh
c3VyZmFjZS0+bV9mYm8pIHsKKyAgICAgICAgaWYgKCFzdXJmYWNlLT5tX2ZibykKKyAgICAgICAg
ICAgIEdMX0NNRChnbEdlbkZyYW1lYnVmZmVycygxLCAmc3VyZmFjZS0+bV9mYm8pKQorICAgICAg
ICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIHN1cmZhY2UtPm1fZmJv
KSkKKyAgICAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCkpCisgICAg
ICAgIEdMX0NNRChnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xP
Ul9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgc3VyZmFjZS0+bV9pZCwgMCkpCisgICAgICAg
IEdMX0NNRChnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCkpCisgICAgICAgIEdMX0NNRChnbENsZWFy
KEdMX0NPTE9SX0JVRkZFUl9CSVQpKQorICAgICAgICBzdXJmYWNlLT5tX3N1cmZhY2VOZWVkc1Jl
c2V0ID0gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgR0xfQ01EKGdsQmluZEZyYW1lYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBzdXJmYWNlLT5tX2ZibykpCisgICAgfQorCisgICAgR0xfQ01E
KGdsVmlld3BvcnQoMCwgMCwgc3VyZmFjZS0+c2l6ZSgpLndpZHRoKCksIHN1cmZhY2UtPnNpemUo
KS5oZWlnaHQoKSkpCisgICAgbV9wcm9qZWN0aW9uTWF0cml4ID0gbWF0cml4OworfQorCit2b2lk
IFRleHR1cmVNYXBwZXJHTDo6c2V0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEdM
X0NNRChnbFNjaXNzb3IocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVp
Z2h0KCkpKQorICAgIEdMX0NNRChnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpKQorfQorCisKK3Zv
aWQgVGV4dHVyZU1hcHBlckdMOjpwYWludFRvVGFyZ2V0KGNvbnN0IEJpdG1hcFRleHR1cmUmIGFT
dXJmYWNlLCBjb25zdCBJbnRTaXplJiBzdXJmYWNlU2l6ZSwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJl
Y3QpCit7CisgICAgY29uc3QgQml0bWFwVGV4dHVyZUdMJiBzdXJmYWNlID0gc3RhdGljX2Nhc3Q8
Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oYVN1cmZhY2UpOworCisgICAgLy8gQ3JlYXRlIHRoZSBt
b2RlbC12aWV3LXByb2plY3Rpb24gbWF0cml4IHRvIGRpc3BsYXkgb24gc2NyZWVuLgorICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgoc3VyZmFj
ZVNpemUsIHRydWUpLm11bHRMZWZ0KHRyYW5zZm9ybSkubXVsdExlZnQoCisgICAgICAgICAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoCisgICAgICAgICAgICAgICAgICAgICAgICBzdXJmYWNl
Lm1fYWN0dWFsU2l6ZS53aWR0aCgpLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
MCwgc3VyZmFjZS5tX2FjdHVhbFNpemUuaGVpZ2h0KCksIDAsIDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAwLCAwLCAxLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgc3VyZmFjZS5vZmZz
ZXQoKS54KCksIHN1cmZhY2Uub2Zmc2V0KCkueSgpLCAwLCAxCisgICAgICAgICAgICAgICAgKQor
ICAgICAgICAgICAgKTsKKworICAgIGNvbnN0IEdMZmxvYXQgbTRbXSA9IHsKKyAgICAgICAgbWF0
cml4Lm0xMSgpLCBtYXRyaXgubTEyKCksIG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAorICAg
ICAgICBtYXRyaXgubTIxKCksIG1hdHJpeC5tMjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0
KCksCisgICAgICAgIG1hdHJpeC5tMzEoKSwgbWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1h
dHJpeC5tMzQoKSwKKyAgICAgICAgbWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5t
NDMoKSwgbWF0cml4Lm00NCgpCisgICAgfTsKKworICAgIGNvbnN0IEdMZmxvYXQgbTRzcmNbXSA9
IHtzdXJmYWNlLm1fcmVsYXRpdmVTaXplLndpZHRoKCksIDAsIDAsIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgc3VyZmFjZS5tX3JlbGF0aXZlU2l6ZS5oZWlnaHQo
KSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxLCAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDF9OworCisg
ICAgLy8gV2UgYWxyZWFkeSBibGVuZGVkIHRoZSBhbHBoYSBpbjsgdGhlIHJlc3VsdCBpcyBwcmVt
dWx0aXBsaWVkLgorICAgIEdMX0NNRChnbFVzZVByb2dyYW0oZ1NoYWRlckluZm8ucHJvZ3JhbXNb
VGV4bWFwU2hhZGVySW5mbzo6VGFyZ2V0UHJvZ3JhbV0uaWQpKQorICAgIEdMX0NNRChnbEJpbmRG
cmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCkpCisgICAgR0xfQ01EKGdsVmlld3BvcnQoMCwg
MCwgc3VyZmFjZVNpemUud2lkdGgoKSwgc3VyZmFjZVNpemUuaGVpZ2h0KCkpKQorICAgIEdMX0NN
RChnbERpc2FibGUoR0xfU1RFTkNJTF9URVNUKSkKKyAgICBjb25zdCBUZXhtYXBTaGFkZXJJbmZv
OjpQcm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8gPSBnU2hhZGVySW5mby5wcm9ncmFtc1tUZXhtYXBT
aGFkZXJJbmZvOjpUYXJnZXRQcm9ncmFtXTsKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3Jh
bUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpPcGFjaXR5VmFyaWFibGVdLCBvcGFjaXR5KSkK
KyAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKSkKKyAgICBHTF9DTUQoZ2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBzdXJmYWNlLm1faWQpKQorICAgIEdMX0NNRChnbFVu
aWZvcm0xaShwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OlNvdXJjZVRleHR1cmVW
YXJpYWJsZV0sIDApKQorICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dy
YW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5WZXJ0ZXhWYXJpYWJsZV0pKQorICAgIEdM
X0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZv
OjpJbk1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00KSkKKyAgICBHTF9DTUQoZ2xVbmlm
b3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5Tb3VyY2VN
YXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNHNyYykpCisgICAgR0xfQ01EKGdsQmluZEJ1
ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDApKQorICAgIGNvbnN0IEdMZmxvYXQgdW5pdFJlY3RbXSA9
IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKKyAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2lu
dGVyKDAsIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdW5pdFJlY3QpKQorICAgIEdMX0NNRChn
bEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpKQorICAgIEdMX0NNRChn
bEVuYWJsZShHTF9CTEVORCkpCisgICAgc2V0Q2xpcCh2aXNpYmxlUmVjdCk7CisKKyAgICBHTF9D
TUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpCisgICAgR0xfQ01EKGdsRGlz
YWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6
SW5WZXJ0ZXhWYXJpYWJsZV0pKQorICAgIEdMX0NNRChnbFVzZVByb2dyYW0oMCkpCisgICAgR0xf
Q01EKGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDApKQorICAgIG1fY3VyUHJvZ3JhbSA9
IFRleG1hcFNoYWRlckluZm86OlRhcmdldFByb2dyYW07Cit9CisKK1Bhc3NSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEJpdG1hcFRleHR1cmVHTCgpKTsKK30KKworfTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY1ZThhMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCkBAIC0wLDAgKzEs
ODMgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFRl
eHR1cmVNYXBwZXJHTF9oCisjZGVmaW5lIFRleHR1cmVNYXBwZXJHTF9oCisKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRl
ICJJbnRTaXplLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRl
ICJ0ZXhtYXAvVGV4dHVyZU1hcHBlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEFu
IE9wZW5HTC1FUzIgaW1wbGVtZW50YXRpb24gb2YgVGV4dHVyZU1hcHBlci4KK2NsYXNzIFRleHR1
cmVNYXBwZXJHTCA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyIHsKK3B1YmxpYzoKKyAgICBUZXh0dXJl
TWFwcGVyR0woR3JhcGhpY3NDb250ZXh0KiBnYyk7CisgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBl
ckdMKCkge30KKworICAgIC8vIHJlaW1wcyBmcm9tIFRleHR1cmVNYXBwZXIKKyAgICB2aXJ0dWFs
IHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50
UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNp
dHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQg
YmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSk7CisgICAgdmlydHVhbCB2b2lkIHNl
dENsaXAoY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGFyZ2V0KGNv
bnN0IEJpdG1hcFRleHR1cmUmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCk7CisgICAg
dmlydHVhbCBib29sIGFsbG93U3VyZmFjZUZvclJvb3QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsK
KyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5cGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
Y2xlYW51cCgpOworCitwcml2YXRlOgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcHJvamVj
dGlvbk1hdHJpeDsKKyAgICBpbnQgbV9jdXJQcm9ncmFtOworfTsKKworLy8gQW4gb2Zmc2NyZWVu
IGJ1ZmZlciB0byBiZSByZW5kZXJlZCBieSBzb2Z0d2FyZS4KK2NsYXNzIFJHQkEzMlByZW11bHRp
bXBsaWVkQnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8UkdCQTMyUHJlbXVsdGltcGxpZWRCdWZm
ZXI+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5SR0JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcigp
IHt9CisgICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludChjb25z
dCBJbnRSZWN0JiBkaXJ0eVJlY3QsIGJvb2wgb3BhcXVlKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGVuZFBhaW50KCkgPSAwOworICAgIHZpcnR1YWwgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0ID0g
MDsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSR0JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcj4gY3Jl
YXRlKCk7Cit9OworCitzdGF0aWMgaW5saW5lIGludCBuZXh0UG93ZXJPZlR3byhpbnQgbnVtKQor
eworICAgIGZvciAoaW50IGkgPSAweDEwMDAwMDAwOyBpID4gMDsgaSA+Pj0gMSkgeworICAgICAg
ICBpZiAobnVtID09IGkpCisgICAgICAgICAgICByZXR1cm4gbnVtOworICAgICAgICBpZiAobnVt
ICYgaSkKKyAgICAgICAgICAgIHJldHVybiAoaSA8PCAxKTsKKyAgICB9CisgICAgcmV0dXJuIDE7
Cit9CisKK3N0YXRpYyBpbmxpbmUgSW50U2l6ZSBuZXh0UG93ZXJPZlR3byhjb25zdCBJbnRTaXpl
JiBzaXplKQoreworICAgIHJldHVybiBJbnRTaXplKG5leHRQb3dlck9mVHdvKHNpemUud2lkdGgo
KSksIG5leHRQb3dlck9mVHdvKHNpemUuaGVpZ2h0KCkpKTsKK30KKworfTsKKworI2VuZGlmCisK
KyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70212</attachid>
            <date>2010-10-08 01:59:23 -0700</date>
            <delta_ts>2010-10-25 07:53:35 -0700</delta_ts>
            <desc>Patch 1: OpenGL backend</desc>
            <filename>patch-47070-9.diff</filename>
            <type>text/plain</type>
            <size>28703</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OGM0YzcyYS4uZWI2NDFhNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0xMC0wNyAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5p
dGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBUaGlzIHBhdGNoIGFkZHMgdGhlIE9wZW5HTCBp
bXBsZW1lbnRhdGlvbiBvZiBUZXh0dXJlTWFwcGVyLiBTZWUgdGhlIG90aGVyIGVudHJpZXMgZnJv
bSBidWcgNDcwNzAgZm9yIGRldGFpbHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00NzA3MAorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gUGFydCBvZiBh
IG5ldyBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9UZXh0dXJlTWFwcGVyR0wuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmg6IEFkZGVkLgorCiAyMDEwLTEwLTA1ICBObydhbSBS
b3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4zNWJmZWM4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMCwwICsxLDU5NCBAQAorLyoKKyBDb3B5
cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkhhc2hNYXAuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIlBhc3NS
ZWZQdHIuaCIKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKwor
I2lmIGRlZmluZWQoVEVYTUFQX09QRU5HTF9FU18yKQorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgor
I2VsaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgPGdsLmg+CisjZWxzZQorI2luY2x1ZGUgPEdM
L2dsLmg+CisjZW5kaWYKKworI2lmbmRlZiBURVhNQVBfT1BFTkdMX0VTMgorZXh0ZXJuICJDIiB7
CisgICAgdm9pZCBnbFVuaWZvcm0xZihHTGludCwgR0xmbG9hdCk7CisgICAgdm9pZCBnbFVuaWZv
cm0xaShHTGludCwgR0xpbnQpOworICAgIHZvaWQgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKEdMdWlu
dCwgR0xpbnQsIEdMZW51bSwgR0xib29sZWFuLCBHTHNpemVpLCBjb25zdCBHTHZvaWQqKTsKKyAg
ICB2b2lkIGdsVW5pZm9ybTRmKEdMaW50LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZs
b2F0KTsKKyAgICB2b2lkIGdsU2hhZGVyU291cmNlKEdMdWludCwgR0xzaXplaSwgY29uc3QgY2hh
cioqLCBjb25zdCBHTGludCopOworICAgIEdMdWludCBnbENyZWF0ZVNoYWRlcihHTGVudW0pOwor
ICAgIHZvaWQgZ2xTaGFkZXJTb3VyY2UoR0x1aW50LCBHTHNpemVpLCBjb25zdCBjaGFyKiosIGNv
bnN0IEdMaW50Kik7CisgICAgdm9pZCBnbENvbXBpbGVTaGFkZXIoR0x1aW50KTsKKyAgICB2b2lk
IGdsRGVsZXRlU2hhZGVyKEdMdWludCk7CisgICAgdm9pZCBnbFVuaWZvcm1NYXRyaXg0ZnYoR0xp
bnQsIEdMc2l6ZWksIEdMYm9vbGVhbiwgY29uc3QgR0xmbG9hdCopOworICAgIEdMdWludCBnbENy
ZWF0ZVByb2dyYW0oKTsKKyAgICB2b2lkIGdsQXR0YWNoU2hhZGVyKEdMdWludCwgR0x1aW50KTsK
KyAgICB2b2lkIGdsTGlua1Byb2dyYW0oR0x1aW50KTsKKyAgICB2b2lkIGdsVXNlUHJvZ3JhbShH
THVpbnQpOworICAgIHZvaWQgZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0x1aW50KTsKKyAg
ICB2b2lkIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0x1aW50KTsKKyAgICB2b2lkIGdsQmlu
ZEZyYW1lYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMdWludCBmcmFtZWJ1ZmZlcik7CisgICAgdm9p
ZCBnbERlbGV0ZUZyYW1lYnVmZmVycyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCogZnJhbWVidWZm
ZXJzKTsKKyAgICB2b2lkIGdsR2VuRnJhbWVidWZmZXJzKEdMc2l6ZWkgbiwgR0x1aW50KiBmcmFt
ZWJ1ZmZlcnMpOworICAgIHZvaWQgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTGVudW0gdGFyZ2V0
LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHRleHRhcmdldCwgR0x1aW50IHRleHR1cmUsIEdM
aW50IGxldmVsKTsKKyAgICB2b2lkIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVy
aXYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSBwbmFtZSwgR0xpbnQq
IHBhcmFtcyk7CisgICAgdm9pZCBnbEJpbmRCdWZmZXIoR0xlbnVtLCBHTHVpbnQpOworICAgIHZv
aWQgZ2xEZWxldGVCdWZmZXJzKEdMc2l6ZWksIGNvbnN0IEdMdWludCopOworICAgIHZvaWQgZ2xH
ZW5CdWZmZXJzKEdMc2l6ZWksIEdMdWludCopOworICAgIHZvaWQgZ2xCdWZmZXJEYXRhKEdMZW51
bSwgR0xzaXplaXB0ciwgY29uc3QgR0x2b2lkKiwgR0xlbnVtKTsKKyAgICB2b2lkIGdsQnVmZmVy
U3ViRGF0YShHTGVudW0sIEdMc2l6ZWlwdHIsIEdMc2l6ZWlwdHIsIGNvbnN0IEdMdm9pZCopOwor
ICAgIHZvaWQgZ2xHZXRQcm9ncmFtSW5mb0xvZyhHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSwgR0xz
aXplaSosIEdMY2hhciopOworCisjaWYgIVBMQVRGT1JNKE1BQykKKyAgICBHTGludCBnbEdldFVu
aWZvcm1Mb2NhdGlvbihHTHVpbnQsIGNvbnN0IEdMY2hhciopOworICAgIEdMaW50IGdsQmluZEF0
dHJpYkxvY2F0aW9uKEdMdWludCwgR0x1aW50LCBjb25zdCBHTGNoYXIqKTsKKyNlbmRpZgorfQor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworaW5saW5lIHN0YXRpYyB2b2lkIGRlYnVn
R0xDb21tYW5kKGNvbnN0IGNoYXIqIGNvbW1hbmQsIGludCBsaW5lKQoreworICAgIGNvbnN0IEdM
ZW51bSBlcnIgPSBnbEdldEVycm9yKCk7CisgICAgaWYgKCFlcnIpCisgICAgICAgIHJldHVybjsK
KyAgICBXVEZSZXBvcnRFcnJvcihfX0ZJTEVfXywgbGluZSwgV1RGX1BSRVRUWV9GVU5DVElPTiwg
IltUZXh0dXJlTWFwcGVyIEdMXSBDb21tYW5kIGZhaWxlZDogJXMgKCV4KVxuIiwgY29tbWFuZCwg
ZXJyKTsKK30KKworI2RlZmluZSBERUJVR19HTF9DT01NQU5EUworCisjaWZkZWYgREVCVUdfR0xf
Q09NTUFORFMKKyNkZWZpbmUgR0xfQ01EKHgpIHt4LCBkZWJ1Z0dMQ29tbWFuZCgjeCwgX19MSU5F
X18pOyB9CisjZWxzZQorI2RlZmluZSBHTF9DTUQoeCkgeAorI2VuZGlmCisKK2NsYXNzIEJpdG1h
cFRleHR1cmVHTCA6IHB1YmxpYyBCaXRtYXBUZXh0dXJlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IHZvaWQgZGVzdHJveSgpOworICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoY29u
c3QgSW50U2l6ZSYsIGJvb2wgb3BhcXVlKTsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CisgICAgdmlydHVh
bCB2b2lkIGVuZFBhaW50KCk7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJ
bWFnZSopOworCitwcml2YXRlOgorICAgIEdMdWludCBtX2lkOworICAgIE5hdGl2ZUltYWdlUHRy
IG1faW1hZ2U7CisgICAgRmxvYXRTaXplIG1fcmVsYXRpdmVTaXplOworICAgIGJvb2wgbV9vcGFx
dWU7CisgICAgSW50U2l6ZSBtX3RleHR1cmVTaXplOworICAgIFJlZlB0cjxSR0JBMzJQcmVtdWx0
aW1wbGllZEJ1ZmZlcj4gbV9idWZmZXI7CisgICAgSW50UmVjdCBtX2RpcnR5UmVjdDsKKyAgICBH
THVpbnQgbV9mYm87CisgICAgSW50U2l6ZSBtX2FjdHVhbFNpemU7CisgICAgYm9vbCBtX3N1cmZh
Y2VOZWVkc1Jlc2V0OworICAgIEJpdG1hcFRleHR1cmVHTCgpCisgICAgICAgIDogbV9pZCgwKQor
ICAgICAgICAsIG1faW1hZ2UoMCkKKyAgICAgICAgLCBtX29wYXF1ZShmYWxzZSkKKyAgICAgICAg
LCBtX2ZibygwKQorICAgICAgICAsIG1fc3VyZmFjZU5lZWRzUmVzZXQodHJ1ZSkKKyAgICB7Cisg
ICAgfQorCisgICAgZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJHTDsKK307CisKK3N0YXRpYyBz
dHJ1Y3QgVGV4bWFwU2hhZGVySW5mbyB7CisgICAgZW51bSBTaGFkZXJQcm9ncmFtSW5kZXggewor
ICAgICAgICBTaW1wbGVQcm9ncmFtLAorICAgICAgICBPcGFjaXR5QW5kTWFza1Byb2dyYW0sCisg
ICAgICAgIFRhcmdldFByb2dyYW0sCisgICAgICAgIE51bVByb2dyYW1zCisgICAgfTsKKworICAg
IGVudW0gU2hhZGVyVmFyaWFibGVJbmRleCB7CisgICAgICAgIEluTWF0cml4VmFyaWFibGUsCisg
ICAgICAgIEluU291cmNlTWF0cml4VmFyaWFibGUsCisgICAgICAgIEluTWFza01hdHJpeFZhcmlh
YmxlLAorICAgICAgICBJblZlcnRleFZhcmlhYmxlLAorCisgICAgICAgIE9wYWNpdHlWYXJpYWJs
ZSwKKyAgICAgICAgU291cmNlVGV4dHVyZVZhcmlhYmxlLAorICAgICAgICBNYXNrVGV4dHVyZVZh
cmlhYmxlLAorICAgICAgICBOdW1WYXJpYWJsZXMKKyAgICB9OworCisgICAgc3RydWN0IFByb2dy
YW1JbmZvIHsKKyAgICAgICAgR0x1aW50IGlkOworICAgICAgICBHTGludCB2YXJzW051bVZhcmlh
Ymxlc107CisgICAgfTsKKworICAgIEdMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihTaGFkZXJQcm9n
cmFtSW5kZXggcHJvZywgU2hhZGVyVmFyaWFibGVJbmRleCB2YXIsIGNvbnN0IGNoYXIqIG5hbWUp
CisgICAgeworICAgICAgICByZXR1cm4gcHJvZ3JhbXNbcHJvZ10udmFyc1t2YXJdID0gZ2xHZXRV
bmlmb3JtTG9jYXRpb24ocHJvZ3JhbXNbcHJvZ10uaWQsIG5hbWUpOworICAgIH0KKworICAgIHZv
aWQgY3JlYXRlU2hhZGVyUHJvZ3JhbShjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNv
bnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlLCBTaGFkZXJQcm9ncmFtSW5kZXggaW5kZXgp
CisgICAgeworICAgICAgICBHTHVpbnQgdmVydGV4U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xf
VkVSVEVYX1NIQURFUik7CisgICAgICAgIEdMdWludCBmcmFnbWVudFNoYWRlciA9IGdsQ3JlYXRl
U2hhZGVyKEdMX0ZSQUdNRU5UX1NIQURFUik7CisgICAgICAgIEdMX0NNRChnbFNoYWRlclNvdXJj
ZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2UsIDApKQorICAgICAgICBHTF9D
TUQoZ2xTaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIDEsICZmcmFnbWVudFNoYWRlclNvdXJj
ZSwgMCkpCisgICAgICAgIEdMdWludCBwcm9ncmFtSUQgPSBnbENyZWF0ZVByb2dyYW0oKTsKKyAg
ICAgICAgR0xfQ01EKGdsQ29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpKQorICAgICAgICBHTF9D
TUQoZ2xDb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKSkKKyAgICAgICAgR0xfQ01EKGdsQXR0
YWNoU2hhZGVyKHByb2dyYW1JRCwgdmVydGV4U2hhZGVyKSkKKyAgICAgICAgR0xfQ01EKGdsQXR0
YWNoU2hhZGVyKHByb2dyYW1JRCwgZnJhZ21lbnRTaGFkZXIpKQorICAgICAgICBHTF9DTUQoZ2xC
aW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAwLCAiSW5WZXJ0ZXgiKSkKKyAgICAgICAgR0xf
Q01EKGdsTGlua1Byb2dyYW0ocHJvZ3JhbUlEKSkKKyAgICAgICAgcHJvZ3JhbXNbaW5kZXhdLmlk
ID0gcHJvZ3JhbUlEOworICAgICAgICBjaGFyIGluZm9Mb2dbMTAyNF07CisgICAgICAgIGludCBs
ZW47CisgICAgICAgIEdMX0NNRChnbEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW1JRCwgMTAyNCwg
JmxlbiwgaW5mb0xvZykpOworICAgIH0KKworICAgIFByb2dyYW1JbmZvIHByb2dyYW1zW051bVBy
b2dyYW1zXTsKKworfSBnU2hhZGVySW5mbzsKKworI2RlZmluZSBURVhNQVBfR0VUX1NIQURFUl9W
QVJfTE9DQVRJT04ocHJvZywgdmFyKSBcCisgICAgICAgICAgICBpZiAoZ1NoYWRlckluZm8uZ2V0
VW5pZm9ybUxvY2F0aW9uKFRleG1hcFNoYWRlckluZm86OnByb2cjI1Byb2dyYW0sIFRleG1hcFNo
YWRlckluZm86OnZhciMjVmFyaWFibGUsICN2YXIpIDwgMCkgXAorICAgICAgICAgICAgICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkbid0IGZpbmQgdmFyaWFibGUgIiN2YXIiIGluIHByb2dyYW0gIiNw
cm9nIlxuIik7CisjZGVmaW5lIFRFWE1BUF9CVUlMRF9TSEFERVIocHJvZ3JhbSkgZ1NoYWRlcklu
Zm8uY3JlYXRlU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3VyY2UjI3Byb2dyYW0sIGZyYWdt
ZW50U2hhZGVyU291cmNlIyNwcm9ncmFtLCBUZXhtYXBTaGFkZXJJbmZvOjpwcm9ncmFtIyNQcm9n
cmFtKTsKKworVGV4dHVyZU1hcHBlckdMOjpUZXh0dXJlTWFwcGVyR0woR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0KQorICAgIDogVGV4dHVyZU1hcHBlcihjb250ZXh0KQorICAgICwgbV9jdXJyZW50
UHJvZ3JhbShUZXhtYXBTaGFkZXJJbmZvOjpUYXJnZXRQcm9ncmFtKQoreworICAgIHN0YXRpYyBi
b29sIHNoYWRlcnNDb21waWxlZCA9IGZhbHNlOworICAgIGlmIChzaGFkZXJzQ29tcGlsZWQpCisg
ICAgICAgIHJldHVybjsKKyAgICBzaGFkZXJzQ29tcGlsZWQgPSB0cnVlOworI2lmbmRlZiBURVhN
QVBfT1BFTkdMX0VTMgorI2RlZmluZSBPRVMyX1BFUkNJU0lPTl9ERUZJTklUSU9OUyBcCisgICAg
IiNkZWZpbmUgbG93cFxuI2RlZmluZSBoaWdocFxuIgorI2Vsc2UKKyNkZWZpbmUgT0VTMl9QRVJD
SVNJT05fREVGSU5JVElPTlMKKyNlbmRpZgorCisgICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFk
ZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9CisgICAgICAgICAgICBPRVMyX1BFUkNJU0lPTl9ERUZJ
TklUSU9OUworIiAgICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIFNvdXJjZVRleHR1cmUs
IE1hc2tUZXh0dXJlOyAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAg
dW5pZm9ybSBsb3dwIGZsb2F0IE9wYWNpdHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0VGV4
Q29vcmRTb3VyY2UsIE91dFRleENvb3JkTWFzazsgICAgICAgICAgICAgIFxuIgorIiAgICAgICAg
ICAgICAgIHZvaWQgbWFpbih2b2lkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIg
ICAgICAgICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKFNvdXJjZVRleHR1
cmUsIE91dFRleENvb3JkU291cmNlKTsgIFxuIgorIiAgICAgICAgICAgICAgICAgICBsb3dwIHZl
YzQgbWFza0NvbG9yID0gdGV4dHVyZTJEKE1hc2tUZXh0dXJlLCBPdXRUZXhDb29yZE1hc2spOyAg
XG4iCisiICAgICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgbyA9IE9wYWNpdHkgKiBtYXNrQ29s
b3IuYTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICAgICAg
Z2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBvLCBjb2xvci5hICogbyk7ICAgICAgICAg
ICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOworCisgICAgY29uc3Qg
Y2hhciogdmVydGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2sgPQorICAgICAgICAgICAgT0VT
Ml9QRVJDSVNJT05fREVGSU5JVElPTlMKKyIgICAgICAgICAgICAgICB1bmlmb3JtIG1hdDQgSW5N
YXRyaXgsIEluU291cmNlTWF0cml4LCBJbk1hc2tNYXRyaXg7ICAgICAgICAgICAgXG4iCisiICAg
ICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgSW5WZXJ0ZXg7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVj
MiBPdXRUZXhDb29yZFNvdXJjZSwgT3V0VGV4Q29vcmRNYXNrOyAgICAgICAgICBcbiIKKyIgICAg
ICAgICAgICAgICB2b2lkIG1haW4odm9pZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAg
ICAgICAgICAgICAgICBPdXRUZXhDb29yZFNvdXJjZSA9IHZlYzIoSW5Tb3VyY2VNYXRyaXggKiBJ
blZlcnRleCk7ICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICAgICAgT3V0VGV4Q29vcmRNYXNr
ID0gdmVjMihJbk1hc2tNYXRyaXggKiBJblZlcnRleCk7ICAgICAgICAgICAgXG4iCisiICAgICAg
ICAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gSW5NYXRyaXggKiBJblZlcnRleDsgICAgICAgICAg
ICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CisKKyAgICBj
b25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVNpbXBsZSA9CisgICAgICAgICAgICBPRVMy
X1BFUkNJU0lPTl9ERUZJTklUSU9OUworIiAgICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJE
IFNvdXJjZVRleHR1cmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisi
ICAgICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IE9wYWNpdHk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB2YXJ5aW5nIGhp
Z2hwIHZlYzIgT3V0VGV4Q29vcmRTb3VyY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFxuIgorIiAgICAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVy
ZTJEKFNvdXJjZVRleHR1cmUsIE91dFRleENvb3JkU291cmNlKTsgIFxuIgorIiAgICAgICAgICAg
ICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIE9wYWNpdHksIGNvbG9yLmEg
KiBPcGFjaXR5KTsgICAgXG4iCisiICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CisKKyAg
ICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUgPQorICAgICAgICAgICAgT0VT
Ml9QRVJDSVNJT05fREVGSU5JVElPTlMKKyIgICAgICAgICAgICAgICB1bmlmb3JtIG1hdDQgSW5N
YXRyaXgsIEluU291cmNlTWF0cml4OyAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAg
ICAgICAgICBhdHRyaWJ1dGUgdmVjNCBJblZlcnRleDsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0VGV4
Q29vcmRTb3VyY2U7ICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB2
b2lkIG1haW4odm9pZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcbiIKKyIgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICAgICAgT3V0VGV4
Q29vcmRTb3VyY2UgPSB2ZWMyKEluU291cmNlTWF0cml4ICogSW5WZXJ0ZXgpOyAgICBcbiIKKyIg
ICAgICAgICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSBJbk1hdHJpeCAqIEluVmVydGV4OyAgICAg
ICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CisKKyAgICBjb25z
dCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVRhcmdldCA9CisgICAgICAgICAgICBPRVMyX1BF
UkNJU0lPTl9ERUZJTklUSU9OUworIiAgICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIFNv
dXJjZVRleHR1cmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
biIKKyIgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgT3BhY2l0eTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAg
ICAgdmFyeWluZyBoaWdocCB2ZWMyIE91dFRleENvb3JkU291cmNlOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZvaWQgbWFpbih2b2lk
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcbiIKKyIgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAg
ICAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRChTb3VyY2VUZXh0dXJlLCBP
dXRUZXhDb29yZFNvdXJjZSk7ICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICBnbF9G
cmFnQ29sb3IgPSB2ZWM0KGNvbG9yLmJnciAqIE9wYWNpdHksIGNvbG9yLmEgKiBPcGFjaXR5KTsg
ICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOwor
CisgICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlVGFyZ2V0ID0gdmVydGV4U2hhZGVy
U291cmNlU2ltcGxlOworCisgICAgVEVYTUFQX0JVSUxEX1NIQURFUihTaW1wbGUpCisgICAgVEVY
TUFQX0JVSUxEX1NIQURFUihPcGFjaXR5QW5kTWFzaykKKyAgICBURVhNQVBfQlVJTERfU0hBREVS
KFRhcmdldCkKKworICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihPcGFjaXR5QW5k
TWFzaywgSW5NYXRyaXgpCisgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKE9wYWNp
dHlBbmRNYXNrLCBJblNvdXJjZU1hdHJpeCkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9D
QVRJT04oT3BhY2l0eUFuZE1hc2ssIEluTWFza01hdHJpeCkKKyAgICBURVhNQVBfR0VUX1NIQURF
Ul9WQVJfTE9DQVRJT04oT3BhY2l0eUFuZE1hc2ssIFNvdXJjZVRleHR1cmUpCisgICAgVEVYTUFQ
X0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKE9wYWNpdHlBbmRNYXNrLCBNYXNrVGV4dHVyZSkKKyAg
ICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oT3BhY2l0eUFuZE1hc2ssIE9wYWNpdHkp
CisKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oU2ltcGxlLCBJblNvdXJjZU1h
dHJpeCkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oU2ltcGxlLCBJbk1hdHJp
eCkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oU2ltcGxlLCBTb3VyY2VUZXh0
dXJlKQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihTaW1wbGUsIE9wYWNpdHkp
CisKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oVGFyZ2V0LCBJblNvdXJjZU1h
dHJpeCkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oVGFyZ2V0LCBJbk1hdHJp
eCkKKyAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oVGFyZ2V0LCBTb3VyY2VUZXh0
dXJlKQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihUYXJnZXQsIE9wYWNpdHkp
Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0
dXJlJiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBU
ZXh0dXJlKiBtYXNrVGV4dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUuaXNWYWxpZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wmIHRleHR1cmVHTCA9IHN0
YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KHRleHR1cmUpOworCisgICAgVGV4bWFw
U2hhZGVySW5mbzo6U2hhZGVyUHJvZ3JhbUluZGV4IHByb2dyYW07CisgICAgaWYgKG1hc2tUZXh0
dXJlKQorICAgICAgICBwcm9ncmFtID0gVGV4bWFwU2hhZGVySW5mbzo6T3BhY2l0eUFuZE1hc2tQ
cm9ncmFtOworICAgIGVsc2UKKyAgICAgICAgcHJvZ3JhbSA9IFRleG1hcFNoYWRlckluZm86OlNp
bXBsZVByb2dyYW07CisKKyAgICBjb25zdCBUZXhtYXBTaGFkZXJJbmZvOjpQcm9ncmFtSW5mbyYg
cHJvZ3JhbUluZm8gPSBnU2hhZGVySW5mby5wcm9ncmFtc1twcm9ncmFtXTsKKyAgICBpZiAobV9j
dXJyZW50UHJvZ3JhbSAhPSBwcm9ncmFtKSB7CisgICAgICAgIEdMX0NNRChnbFVzZVByb2dyYW0o
cHJvZ3JhbUluZm8uaWQpKQorICAgICAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJy
YXkoZ1NoYWRlckluZm8ucHJvZ3JhbXNbbV9jdXJyZW50UHJvZ3JhbV0udmFyc1tUZXhtYXBTaGFk
ZXJJbmZvOjpJblZlcnRleFZhcmlhYmxlXSkpCisgICAgICAgIG1fY3VycmVudFByb2dyYW0gPSBw
cm9ncmFtOworICAgICAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFt
SW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OkluVmVydGV4VmFyaWFibGVdKSkKKyAgICB9CisK
KyAgICBHTF9DTUQoZ2xEaXNhYmxlKEdMX0RFUFRIX1RFU1QpKQorICAgIEdMX0NNRChnbERpc2Fi
bGUoR0xfU1RFTkNJTF9URVNUKSkKKworICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVY
VFVSRTApKQorICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmVH
TC5tX2lkKSkKKyAgICBHTF9DTUQoZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCkpCisg
ICAgY29uc3QgR0xmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9Owor
ICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIoMCwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNF
LCAwLCB1bml0UmVjdCkpCisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBUcmFu
c2Zvcm1hdGlvbk1hdHJpeChtX3Byb2plY3Rpb25NYXRyaXgpLm11bHRMZWZ0KG1vZGVsVmlld01h
dHJpeCkubXVsdExlZnQoVHJhbnNmb3JtYXRpb25NYXRyaXgoCisgICAgICAgICAgICB0YXJnZXRS
ZWN0LndpZHRoKCksIDAsIDAsIDAsCisgICAgICAgICAgICAwLCB0YXJnZXRSZWN0LmhlaWdodCgp
LCAwLCAwLAorICAgICAgICAgICAgMCwgMCwgMSwgMCwKKyAgICAgICAgICAgIHRhcmdldFJlY3Qu
eCgpLCB0YXJnZXRSZWN0LnkoKSwgMCwgMSkpOworCisgICAgY29uc3QgR0xmbG9hdCBtNFtdID0g
eworICAgICAgICBtYXRyaXgubTExKCksIG1hdHJpeC5tMTIoKSwgbWF0cml4Lm0xMygpLCBtYXRy
aXgubTE0KCksCisgICAgICAgIG1hdHJpeC5tMjEoKSwgbWF0cml4Lm0yMigpLCBtYXRyaXgubTIz
KCksIG1hdHJpeC5tMjQoKSwKKyAgICAgICAgbWF0cml4Lm0zMSgpLCBtYXRyaXgubTMyKCksIG1h
dHJpeC5tMzMoKSwgbWF0cml4Lm0zNCgpLAorICAgICAgICBtYXRyaXgubTQxKCksIG1hdHJpeC5t
NDIoKSwgbWF0cml4Lm00MygpLCBtYXRyaXgubTQ0KCkKKyAgICB9OworICAgIGNvbnN0IEdMZmxv
YXQgbTRzcmNbXSA9IHt0ZXh0dXJlR0wubV9yZWxhdGl2ZVNpemUud2lkdGgoKSwgMCwgMCwgMCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCB0ZXh0dXJlR0wubV9yZWxh
dGl2ZVNpemUuaGVpZ2h0KCksIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgMCwgMSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LCAwLCAwLCAxfTsKKyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZh
cnNbVGV4bWFwU2hhZGVySW5mbzo6SW5NYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNCkp
CisgICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleG1hcFNo
YWRlckluZm86OkluU291cmNlTWF0cml4VmFyaWFibGVdLCAxLCBHTF9GQUxTRSwgbTRzcmMpKQor
ICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86
OlNvdXJjZVRleHR1cmVWYXJpYWJsZV0sIDApKQorICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9n
cmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86Ok9wYWNpdHlWYXJpYWJsZV0sIG9wYWNpdHkp
KQorCisgICAgaWYgKG1hc2tUZXh0dXJlICYmIG1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkpIHsKKyAg
ICAgICAgY29uc3QgQml0bWFwVGV4dHVyZUdMKiBtYXNrVGV4dHVyZUdMID0gc3RhdGljX2Nhc3Q8
Y29uc3QgQml0bWFwVGV4dHVyZUdMKj4obWFza1RleHR1cmUpOworICAgICAgICBHTF9DTUQoZ2xB
Y3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKSkKKyAgICAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgbWFza1RleHR1cmVHTC0+bV9pZCkpCisgICAgICAgIGNvbnN0IEdMZmxv
YXQgbTRtYXNrW10gPSB7bWFza1RleHR1cmVHTC0+bV9yZWxhdGl2ZVNpemUud2lkdGgoKSwgMCwg
MCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgbWFza1Rl
eHR1cmVHTC0+bV9yZWxhdGl2ZVNpemUuaGVpZ2h0KCksIDAsIDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDF9OworICAgICAgICBnbFVuaWZvcm1NYXRy
aXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJbk1hc2tNYXRyaXhWYXJp
YWJsZV0sIDEsIEdMX0ZBTFNFLCBtNG1hc2spOworICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWko
cHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpNYXNrVGV4dHVyZVZhcmlhYmxlXSwg
MSkpCisgICAgICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKQorICAgIH0K
KworCisgICAgaWYgKHRleHR1cmVHTC5tX29wYXF1ZSAmJiBvcGFjaXR5ID4gMC45OSAmJiAhbWFz
a1RleHR1cmUpCisgICAgICAgIEdMX0NNRChnbERpc2FibGUoR0xfQkxFTkQpKQorICAgIGVsc2Ug
eworICAgICAgICBHTF9DTUQoZ2xCbGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FM
UEhBKSkKKyAgICAgICAgR0xfQ01EKGdsRW5hYmxlKEdMX0JMRU5EKSkKKyAgICB9CisKKyAgICBH
TF9DTUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpCit9CisKKworY29uc3Qg
Y2hhciogVGV4dHVyZU1hcHBlckdMOjp0eXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIk9wZW5H
TCI7Cit9CisKK3ZvaWQgQml0bWFwVGV4dHVyZUdMOjpyZXNldChjb25zdCBJbnRTaXplJiBuZXdT
aXplLCBib29sIG9wYXF1ZSkKK3sKKyAgICBCaXRtYXBUZXh0dXJlOjpyZXNldChuZXdTaXplLCBv
cGFxdWUpOworICAgIG1faW1hZ2UgPSAwOworICAgIEludFNpemUgbmV3VGV4dHVyZVNpemUgPSBu
ZXh0UG93ZXJPZlR3byhuZXdTaXplKTsKKyAgICBib29sIGp1c3RDcmVhdGVkID0gZmFsc2U7Cisg
ICAgaWYgKCFtX2lkKSB7CisgICAgICAgIEdMX0NNRChnbEdlblRleHR1cmVzKDEsICZtX2lkKSkK
KyAgICAgICAganVzdENyZWF0ZWQgPSB0cnVlOworICAgIH0KKworICAgIGlmIChqdXN0Q3JlYXRl
ZCB8fCBuZXdUZXh0dXJlU2l6ZS53aWR0aCgpID4gbV90ZXh0dXJlU2l6ZS53aWR0aCgpIHx8IG5l
d1RleHR1cmVTaXplLmhlaWdodCgpID4gbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSkgeworICAgICAg
ICBtX3RleHR1cmVTaXplID0gbmV3VGV4dHVyZVNpemU7CisgICAgICAgIEdMX0NNRChnbEJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faWQpKQorICAgICAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0
ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKSkKKyAg
ICAgICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01B
R19GSUxURVIsIEdMX0xJTkVBUikpCisgICAgICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpKQorICAgICAg
ICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9U
LCBHTF9DTEFNUF9UT19FREdFKSkKKyAgICAgICAgR0xfQ01EKGdsVGV4SW1hZ2UyRChHTF9URVhU
VVJFXzJELCAwLCBHTF9SR0JBLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUu
aGVpZ2h0KCksIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApKQorICAgIH0KKyAgICBt
X2FjdHVhbFNpemUgPSBuZXdTaXplOworICAgIG1fcmVsYXRpdmVTaXplID0gRmxvYXRTaXplKGZs
b2F0KG5ld1NpemUud2lkdGgoKSkgLyBtX3RleHR1cmVTaXplLndpZHRoKCksIGZsb2F0KG5ld1Np
emUuaGVpZ2h0KCkpIC8gbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CisgICAgbV9vcGFxdWUgPSBv
cGFxdWU7CisgICAgbV9zdXJmYWNlTmVlZHNSZXNldCA9IHRydWU7Cit9CisKK1BsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0KiBCaXRtYXBUZXh0dXJlR0w6OmJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYg
ZGlydHlSZWN0KQoreworICAgIG1fYnVmZmVyID0gUkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI6
OmNyZWF0ZSgpOworICAgIG1fZGlydHlSZWN0ID0gZGlydHlSZWN0OworICAgIHJldHVybiBtX2J1
ZmZlci0+YmVnaW5QYWludChkaXJ0eVJlY3QsIG1fb3BhcXVlKTsKK30KKwordm9pZCBCaXRtYXBU
ZXh0dXJlR0w6OmVuZFBhaW50KCkKK3sKKyAgICBpZiAoIW1fYnVmZmVyKQorICAgICAgICByZXR1
cm47CisgICAgbV9idWZmZXItPmVuZFBhaW50KCk7CisgICAgR0xfQ01EKGdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgbV9pZCkpCisgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhU
VVJFXzJELCAwLCBtX2RpcnR5UmVjdC54KCksIG1fZGlydHlSZWN0LnkoKSwgbV9kaXJ0eVJlY3Qu
d2lkdGgoKSwgbV9kaXJ0eVJlY3QuaGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUs
IG1fYnVmZmVyLT5kYXRhKCkpKQorICAgIG1fYnVmZmVyLmNsZWFyKCk7Cit9CisKK3N0cnVjdCBU
ZXhtYXBHTFNoYWRlclRleHR1cmVzIHsKKyAgICBzdHJ1Y3QgRW50cnkgeworICAgICAgICBHTHVp
bnQgdGV4dHVyZTsKKyAgICAgICAgaW50IHJlZkNvdW50OworICAgIH07CisgICAgSGFzaE1hcDxO
YXRpdmVJbWFnZVB0ciwgRW50cnk+IGltYWdlVG9UZXh0dXJlOworICAgIEdMdWludCBmaW5kT3JD
cmVhdGUoTmF0aXZlSW1hZ2VQdHIgaW1hZ2UsIGJvb2wmIGZvdW5kKQorICAgIHsKKyAgICAgICAg
SGFzaE1hcDxOYXRpdmVJbWFnZVB0ciwgRW50cnk+OjppdGVyYXRvciBpdCA9IGltYWdlVG9UZXh0
dXJlLmZpbmQoaW1hZ2UpOworICAgICAgICBmb3VuZCA9IGZhbHNlOworICAgICAgICBpZiAoaXQg
IT0gaW1hZ2VUb1RleHR1cmUuZW5kKCkpIHsKKyAgICAgICAgICAgIGl0LT5zZWNvbmQucmVmQ291
bnQrKzsKKyAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBpdC0+
c2Vjb25kLnRleHR1cmU7CisgICAgICAgIH0KKyAgICAgICAgRW50cnkgZW50cnk7CisgICAgICAg
IEdMX0NNRChnbEdlblRleHR1cmVzKDEsICZlbnRyeS50ZXh0dXJlKSk7CisgICAgICAgIGVudHJ5
LnJlZkNvdW50ID0gMTsKKyAgICAgICAgaW1hZ2VUb1RleHR1cmUuYWRkKGltYWdlLCBlbnRyeSk7
CisgICAgICAgIHJldHVybiBlbnRyeS50ZXh0dXJlOworICAgIH0KKworICAgIGJvb2wgZGVyZWYo
TmF0aXZlSW1hZ2VQdHIgaW1hZ2UpCisgICAgeworICAgICAgICBIYXNoTWFwPE5hdGl2ZUltYWdl
UHRyLCBFbnRyeT46Oml0ZXJhdG9yIGl0ID0gaW1hZ2VUb1RleHR1cmUuZmluZChpbWFnZSk7Cisg
ICAgICAgIGlmIChpdCAhPSBpbWFnZVRvVGV4dHVyZS5lbmQoKSkgeworICAgICAgICAgICAgaWYg
KGl0LT5zZWNvbmQucmVmQ291bnQgPCAyKSB7CisgICAgICAgICAgICAgICAgaW1hZ2VUb1RleHR1
cmUucmVtb3ZlKGl0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKworc3RhdGlj
IFRleG1hcEdMU2hhZGVyVGV4dHVyZXMgZ1RleHR1cmVSZXBvc2l0b3J5OworCit2b2lkIEJpdG1h
cFRleHR1cmVHTDo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKK3sKKyAgICBOYXRp
dmVJbWFnZVB0ciBuYXRpdmVJbWFnZSA9IGltYWdlID8gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCkgOiAwOworICAgIGlmICghaW1hZ2UgfHwgIW5hdGl2ZUltYWdlKSB7CisgICAg
ICAgIGlmIChtX2ltYWdlKQorICAgICAgICAgICAgZGVzdHJveSgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKG5hdGl2ZUltYWdlID09IG1faW1hZ2UpCisgICAgICAgIHJldHVy
bjsKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgR0x1aW50IG5ld1RleHR1cmVJRCA9IGdU
ZXh0dXJlUmVwb3NpdG9yeS5maW5kT3JDcmVhdGUobmF0aXZlSW1hZ2UsIGZvdW5kKTsKKyAgICBp
ZiAobmV3VGV4dHVyZUlEICE9IG1faWQpIHsKKyAgICAgICAgZGVzdHJveSgpOworICAgICAgICBt
X2lkID0gbmV3VGV4dHVyZUlEOworICAgICAgICByZXNldChpbWFnZS0+c2l6ZSgpLCBmYWxzZSk7
CisgICAgICAgIG1faW1hZ2UgPSBuYXRpdmVJbWFnZTsKKyAgICAgICAgaWYgKCFmb3VuZCkgewor
ICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoYmVnaW5QYWludChJbnRSZWN0KDAs
IDAsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSkpKTsKKyAg
ICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGltYWdlLCBEZXZpY2VDb2xvclNwYWNlLCBJbnRQ
b2ludCgwLCAwKSwgQ29tcG9zaXRlQ29weSk7CisgICAgICAgICAgICBlbmRQYWludCgpOworICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIEJpdG1hcFRleHR1cmVHTDo6ZGVzdHJveSgpCit7Cisg
ICAgaWYgKG1faWQgJiYgKCFtX2ltYWdlIHx8ICFnVGV4dHVyZVJlcG9zaXRvcnkuZGVyZWYobV9p
bWFnZSkpKQorICAgICAgICBHTF9DTUQoZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9pZCkpCisgICAg
aWYgKG1fZmJvKQorICAgICAgICBHTF9DTUQoZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJv
KSkKKworICAgIG1fZmJvID0gMDsKKyAgICBtX2lkID0gMDsKKyAgICBtX3RleHR1cmVTaXplID0g
SW50U2l6ZSgpOworICAgIG1fcmVsYXRpdmVTaXplID0gRmxvYXRTaXplKDEsIDEpOworfQorCiti
b29sIEJpdG1hcFRleHR1cmVHTDo6aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faWQ7
Cit9CisKK0ludFNpemUgQml0bWFwVGV4dHVyZUdMOjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV90ZXh0dXJlU2l6ZTsKK30KKworc3RhdGljIGlubGluZSBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgZmxpcCkK
K3sKKyAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgoMi4wIC8gZmxvYXQoc2l6ZS53aWR0
aCgpKSwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgKGZsaXAg
PyAtMi4wIDogMi4wKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpLCAwLCAwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLCAwLCAtMC4wMDAwMDEsIDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC0xLCBmbGlwID8gMSA6IC0xLCAwLCAxKTsKK30KKwordm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmNsZWFudXAoKQoreworfQorCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6Ymlu
ZFN1cmZhY2UoQml0bWFwVGV4dHVyZSAqc3VyZmFjZVBvaW50ZXIpCit7CisgICAgQml0bWFwVGV4
dHVyZUdMKiBzdXJmYWNlID0gc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVyZUdMKj4oc3VyZmFjZVBv
aW50ZXIpOworCisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm47CisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbWF0cml4ID0gY3JlYXRlUHJvamVjdGlvbk1hdHJpeChzdXJmYWNlLT5z
aXplKCksIGZhbHNlKTsKKyAgICBtYXRyaXgudHJhbnNsYXRlKC1zdXJmYWNlLT5vZmZzZXQoKS54
KCksIC1zdXJmYWNlLT5vZmZzZXQoKS55KCkpOworCisgICAgaWYgKHN1cmZhY2UtPm1fc3VyZmFj
ZU5lZWRzUmVzZXQgfHwgIXN1cmZhY2UtPm1fZmJvKSB7CisgICAgICAgIGlmICghc3VyZmFjZS0+
bV9mYm8pCisgICAgICAgICAgICBHTF9DTUQoZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJnN1cmZhY2Ut
Pm1fZmJvKSkKKyAgICAgICAgR0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVS
LCBzdXJmYWNlLT5tX2ZibykpCisgICAgICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIDApKQorICAgICAgICBHTF9DTUQoZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFN
RUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIHN1cmZhY2UtPm1f
aWQsIDApKQorICAgICAgICBHTF9DTUQoZ2xDbGVhckNvbG9yKDAsIDAsIDAsIDApKQorICAgICAg
ICBHTF9DTUQoZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKSkKKyAgICAgICAgc3VyZmFjZS0+
bV9zdXJmYWNlTmVlZHNSZXNldCA9IGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICAgIEdMX0NN
RChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgc3VyZmFjZS0+bV9mYm8pKQorICAg
IH0KKworICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAsIHN1cmZhY2UtPnNpemUoKS53aWR0aCgp
LCBzdXJmYWNlLT5zaXplKCkuaGVpZ2h0KCkpKQorICAgIG1fcHJvamVjdGlvbk1hdHJpeCA9IG1h
dHJpeDsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyR0w6OnNldENsaXAoY29uc3QgSW50UmVjdCYg
cmVjdCkKK3sKKyAgICBHTF9DTUQoZ2xTY2lzc29yKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKSkKKyAgICBHTF9DTUQoZ2xFbmFibGUoR0xfU0NJU1NPUl9U
RVNUKSkKK30KKworCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6cGFpbnRUb1RhcmdldChjb25zdCBC
aXRtYXBUZXh0dXJlJiBhU3VyZmFjZSwgY29uc3QgSW50U2l6ZSYgc3VyZmFjZVNpemUsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIGNvbnN0IElu
dFJlY3QmIHZpc2libGVSZWN0KQoreworICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCYgc3VyZmFj
ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KGFTdXJmYWNlKTsKKworICAg
IC8vIENyZWF0ZSB0aGUgbW9kZWwtdmlldy1wcm9qZWN0aW9uIG1hdHJpeCB0byBkaXNwbGF5IG9u
IHNjcmVlbi4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBjcmVhdGVQcm9qZWN0
aW9uTWF0cml4KHN1cmZhY2VTaXplLCB0cnVlKS5tdWx0TGVmdCh0cmFuc2Zvcm0pLm11bHRMZWZ0
KAorICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KAorICAgICAgICAgICAgICAg
ICAgICAgICAgc3VyZmFjZS5tX2FjdHVhbFNpemUud2lkdGgoKSwgMCwgMCwgMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIDAsIHN1cmZhY2UubV9hY3R1YWxTaXplLmhlaWdodCgpLCAwLCAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN1cmZhY2Uub2Zmc2V0KCkueCgpLCBzdXJmYWNlLm9mZnNldCgpLnkoKSwgMCwgMQorICAg
ICAgICAgICAgICAgICkKKyAgICAgICAgICAgICk7CisKKyAgICBjb25zdCBHTGZsb2F0IG00W10g
PSB7CisgICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0xMigpLCBtYXRyaXgubTEzKCksIG1h
dHJpeC5tMTQoKSwKKyAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRyaXgubTIyKCksIG1hdHJpeC5t
MjMoKSwgbWF0cml4Lm0yNCgpLAorICAgICAgICBtYXRyaXgubTMxKCksIG1hdHJpeC5tMzIoKSwg
bWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCksCisgICAgICAgIG1hdHJpeC5tNDEoKSwgbWF0cml4
Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5tNDQoKQorICAgIH07CisKKyAgICBjb25zdCBH
TGZsb2F0IG00c3JjW10gPSB7c3VyZmFjZS5tX3JlbGF0aXZlU2l6ZS53aWR0aCgpLCAwLCAwLCAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHN1cmZhY2UubV9yZWxh
dGl2ZVNpemUuaGVpZ2h0KCksIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgMCwgMSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LCAwLCAwLCAxfTsKKworICAgIC8vIFdlIGFscmVhZHkgYmxlbmRlZCB0aGUgYWxwaGEgaW47IHRo
ZSByZXN1bHQgaXMgcHJlbXVsdGlwbGllZC4KKyAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKGdTaGFk
ZXJJbmZvLnByb2dyYW1zW1RleG1hcFNoYWRlckluZm86OlRhcmdldFByb2dyYW1dLmlkKSkKKyAg
ICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApKQorICAgIEdMX0NN
RChnbFZpZXdwb3J0KDAsIDAsIHN1cmZhY2VTaXplLndpZHRoKCksIHN1cmZhY2VTaXplLmhlaWdo
dCgpKSkKKyAgICBHTF9DTUQoZ2xEaXNhYmxlKEdMX1NURU5DSUxfVEVTVCkpCisgICAgY29uc3Qg
VGV4bWFwU2hhZGVySW5mbzo6UHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvID0gZ1NoYWRlckluZm8u
cHJvZ3JhbXNbVGV4bWFwU2hhZGVySW5mbzo6VGFyZ2V0UHJvZ3JhbV07CisgICAgR0xfQ01EKGds
VW5pZm9ybTFmKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6T3BhY2l0eVZhcmlh
YmxlXSwgb3BhY2l0eSkpCisgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkp
CisgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgc3VyZmFjZS5tX2lkKSkK
KyAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZv
OjpTb3VyY2VUZXh0dXJlVmFyaWFibGVdLCAwKSkKKyAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OkluVmVydGV4VmFy
aWFibGVdKSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNb
VGV4bWFwU2hhZGVySW5mbzo6SW5NYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNCkpCisg
ICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRl
ckluZm86OkluU291cmNlTWF0cml4VmFyaWFibGVdLCAxLCBHTF9GQUxTRSwgbTRzcmMpKQorICAg
IEdMX0NNRChnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCAwKSkKKyAgICBjb25zdCBHTGZs
b2F0IHVuaXRSZWN0W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07CisgICAgR0xfQ01EKGds
VmVydGV4QXR0cmliUG9pbnRlcigwLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHVuaXRSZWN0
KSkKKyAgICBHTF9DTUQoZ2xCbGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhB
KSkKKyAgICBHTF9DTUQoZ2xFbmFibGUoR0xfQkxFTkQpKQorICAgIHNldENsaXAodmlzaWJsZVJl
Y3QpOworCisgICAgR0xfQ01EKGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpKQor
ICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtSW5mby52YXJzW1Rl
eG1hcFNoYWRlckluZm86OkluVmVydGV4VmFyaWFibGVdKSkKKyAgICBHTF9DTUQoZ2xVc2VQcm9n
cmFtKDApKQorICAgIEdMX0NNRChnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCAwKSkKKyAg
ICBtX2N1cnJlbnRQcm9ncmFtID0gVGV4bWFwU2hhZGVySW5mbzo6VGFyZ2V0UHJvZ3JhbTsKK30K
KworUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZVRleHR1
cmUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQml0bWFwVGV4dHVyZUdMKCkpOworfQor
Cit9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVy
ZU1hcHBlckdMLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFw
cGVyR0wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTEyYzcyCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1h
cHBlckdMLmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgVGV4dHVyZU1hcHBlckdMX2gKKyNkZWZpbmUgVGV4dHVyZU1hcHBl
ckdMX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkZs
b2F0UXVhZC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlv
bk1hdHJpeC5oIgorI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworLy8gQW4gT3BlbkdMLUVTMiBpbXBsZW1lbnRhdGlvbiBvZiBUZXh0dXJl
TWFwcGVyLgorY2xhc3MgVGV4dHVyZU1hcHBlckdMIDogcHVibGljIFRleHR1cmVNYXBwZXIgewor
cHVibGljOgorICAgIFRleHR1cmVNYXBwZXJHTChHcmFwaGljc0NvbnRleHQqIGdjKTsKKyAgICB2
aXJ0dWFsIH5UZXh0dXJlTWFwcGVyR0woKSB7fQorCisgICAgLy8gcmVpbXBzIGZyb20gVGV4dHVy
ZU1hcHBlcgorICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJl
JiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRy
YW5zZm9ybSwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUp
OworICAgIHZpcnR1YWwgdm9pZCBiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xpcChjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2
b2lkIHBhaW50VG9UYXJnZXQoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0IEludFNpemUmLCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEludFJlY3Qm
IHZpc2libGVSZWN0KTsKKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9vdCgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVy
ZT4gY3JlYXRlVGV4dHVyZSgpOworICAgIHZpcnR1YWwgY29uc3QgY2hhciogdHlwZSgpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwKCk7CisKK3ByaXZhdGU6CisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbV9wcm9qZWN0aW9uTWF0cml4OworICAgIGludCBtX2N1cnJlbnRQcm9ncmFt
OworfTsKKworLy8gQW4gb2Zmc2NyZWVuIGJ1ZmZlciB0byBiZSByZW5kZXJlZCBieSBzb2Z0d2Fy
ZS4KK2NsYXNzIFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8
UkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5SR0JB
MzJQcmVtdWx0aW1wbGllZEJ1ZmZlcigpIHt9CisgICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dCogYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QsIGJvb2wgb3BhcXVl
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCkgPSAwOworICAgIHZpcnR1YWwgY29u
c3Qgdm9pZCogZGF0YSgpIGNvbnN0ID0gMDsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSR0JBMzJQ
cmVtdWx0aW1wbGllZEJ1ZmZlcj4gY3JlYXRlKCk7Cit9OworCitzdGF0aWMgaW5saW5lIGludCBu
ZXh0UG93ZXJPZlR3byhpbnQgbnVtKQoreworICAgIGZvciAoaW50IGkgPSAweDEwMDAwMDAwOyBp
ID4gMDsgaSA+Pj0gMSkgeworICAgICAgICBpZiAobnVtID09IGkpCisgICAgICAgICAgICByZXR1
cm4gbnVtOworICAgICAgICBpZiAobnVtICYgaSkKKyAgICAgICAgICAgIHJldHVybiAoaSA8PCAx
KTsKKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgSW50U2l6ZSBuZXh0
UG93ZXJPZlR3byhjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHJldHVybiBJbnRTaXplKG5l
eHRQb3dlck9mVHdvKHNpemUud2lkdGgoKSksIG5leHRQb3dlck9mVHdvKHNpemUuaGVpZ2h0KCkp
KTsKK30KKworfTsKKworI2VuZGlmCisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70361</attachid>
            <date>2010-10-09 12:30:16 -0700</date>
            <delta_ts>2010-10-09 12:37:02 -0700</delta_ts>
            <desc>Slice 1: allow the media AC integration to compile (doesn&apos;t work yet) </desc>
            <filename>patch-texmap-media.diff</filename>
            <type>text/plain</type>
            <size>4917</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2
YXRlUXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZh
dGVRdC5jcHAKaW5kZXggZjVjZDcxYS4uZGI5MTU0YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAKQEAgLTMzLDYgKzMz
LDcgQEAKICNpbmNsdWRlICJxd2ViZnJhbWUuaCIKICNpbmNsdWRlICJxd2VicGFnZS5oIgoKKyNp
bmNsdWRlIDxRRGVidWc+CiAjaW5jbHVkZSA8UUdyYXBoaWNzU2NlbmU+CiAjaW5jbHVkZSA8UUdy
YXBoaWNzVmlkZW9JdGVtPgogI2luY2x1ZGUgPFFNZWRpYVBsYXllckNvbnRyb2w+CkBAIC00Myw2
ICs0NCw3IEBACiAjaW5jbHVkZSA8UVBhaW50ZXI+CiAjaW5jbHVkZSA8UVBvaW50PgogI2luY2x1
ZGUgPFFSZWN0PgorI2luY2x1ZGUgPFFTdHlsZU9wdGlvbkdyYXBoaWNzSXRlbT4KICNpbmNsdWRl
IDxRVGltZT4KICNpbmNsdWRlIDxRVGltZXI+CiAjaW5jbHVkZSA8UVVybD4KQEAgLTUwLDYgKzUy
LDEwIEBACiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CgorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpbmNsdWRlICJ0ZXht
YXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3Bh
Y2UgV1RGOwoKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTYwMiw3ICs2MDgsNDMgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVRdDo6cmVwYWludCgpCiAgICAgbV93ZWJDb3JlUGxheWVyLT5yZXBh
aW50KCk7CiB9CgotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKworY2xhc3MgVGV4
dHVyZU1hcHBlclZpZGVvTGF5ZXJRdCA6IHB1YmxpYyB2aXJ0dWFsIFRleHR1cmVNYXBwZXJWaWRl
b0xheWVyIHsKK3B1YmxpYzoKKyAgICBUZXh0dXJlTWFwcGVyVmlkZW9MYXllclF0KFFHcmFwaGlj
c1ZpZGVvSXRlbSogdmlkZW9JdGVtKQorICAgICAgICA6IG1fdmlkZW9JdGVtKHZpZGVvSXRlbSkK
KyAgICB7CisgICAgICAgIGlmICghdmlkZW9JdGVtKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRQbGF0Zm9ybUxheWVyQ2xpZW50KFRleHR1cmVNYXBw
ZXJMYXllckNsaWVudCogY2xpZW50KQorICAgIHsKKyAgICAgICAgbV9jbGllbnQgPSBjbGllbnQ7
CisKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiBnYykK
KyAgICB7CisgICAgICAgIGlmICghbV92aWRlb0l0ZW0pCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIFFTdHlsZU9wdGlvbkdyYXBoaWNzSXRlbSBvcHQ7CisgICAgICAgIG9wdC5leHBvc2Vk
UmVjdCA9IG1fdmlkZW9JdGVtLmRhdGEoKS0+c2NlbmVCb3VuZGluZ1JlY3QoKTsKKyAgICAgICAg
b3B0LnJlY3QgPSBvcHQuZXhwb3NlZFJlY3QudG9SZWN0KCk7CisgICAgICAgIG1fdmlkZW9JdGVt
LmRhdGEoKS0+cGFpbnQoZ2MtPnBsYXRmb3JtQ29udGV4dCgpLCAmb3B0KTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92
aWRlb0l0ZW0gPyBJbnRTaXplKG1fdmlkZW9JdGVtLmRhdGEoKS0+c2l6ZSgpLndpZHRoKCksIG1f
dmlkZW9JdGVtLmRhdGEoKS0+c2l6ZSgpLmhlaWdodCgpKSA6IEludFNpemUoKTsKKyAgICB9CisK
KyAgICBRV2Vha1BvaW50ZXI8UUdyYXBoaWNzVmlkZW9JdGVtPiBtX3ZpZGVvSXRlbTsKKyAgICBU
ZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQqIG1fY2xpZW50OworfTsKKworCiB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZVF0OjphY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpCiB7CiAgICAg
TWVkaWFQbGF5ZXJDbGllbnQqIGNsaWVudCA9IG1fd2ViQ29yZVBsYXllci0+bWVkaWFQbGF5ZXJD
bGllbnQoKTsKQEAgLTYxMiwxNCArNjU0LDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6
OmFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCkKCiAgICAgbV9jb21wb3NpdGVkID0g
Y29tcG9zaXRlZDsKICAgICBpZiAoY29tcG9zaXRlZCkKLSAgICAgICAgbV92aWRlb1NjZW5lLT5y
ZW1vdmVJdGVtKG1fdmlkZW9JdGVtKTsKLSAgICBlbHNlCi0gICAgICAgIG1fdmlkZW9TY2VuZS0+
YWRkSXRlbShtX3ZpZGVvSXRlbSk7CisgICAgICAgIG1fcGxhdGZvcm1MYXllciA9IG5ldyBUZXh0
dXJlTWFwcGVyVmlkZW9MYXllclF0KG1fdmlkZW9JdGVtKTsKIH0KCiBQbGF0Zm9ybUxheWVyKiBN
ZWRpYVBsYXllclByaXZhdGVRdDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fY29tcG9zaXRlZCA/IG1fdmlkZW9JdGVtIDogMDsKKyAgICByZXR1cm4gbV9jb21wb3NpdGVk
ID8gbV9wbGF0Zm9ybUxheWVyLmdldCgpIDogMDsKIH0KICNlbmRpZgoKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaAppbmRleCBiYTg1
ZjhmLi4zOGQzMzA5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01l
ZGlhUGxheWVyUHJpdmF0ZVF0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9N
ZWRpYVBsYXllclByaXZhdGVRdC5oCkBAIC0zMyw2ICszMyw4IEBAIFFUX0VORF9OQU1FU1BBQ0UK
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CgorY2xhc3MgVGV4dHVyZU1hcHBlclZpZGVvTGF5ZXI7CisK
IGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZVF0IDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBNZWRp
YVBsYXllclByaXZhdGVJbnRlcmZhY2UgewoKICAgICBRX09CSkVDVApAQCAtOTEsMTIgKzkzLDE4
IEBAIHB1YmxpYzoKICAgICBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CgogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoVEVY
VFVSRV9NQVBQRVIpCiAgICAgLy8gd2hldGhlciBhY2NlbGVyYXRlZCByZW5kZXJpbmcgaXMgc3Vw
cG9ydGVkIGJ5IHRoZSBtZWRpYSBlbmdpbmUgZm9yIHRoZSBjdXJyZW50IG1lZGlhLgogICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogICAgIC8vIGNhbGxlZCB3aGVuIHRoZSByZW5kZXJpbmcgc3lzdGVtIGZsaXBzIHRo
ZSBpbnRvIG9yIG91dCBvZiBhY2NlbGVyYXRlZCByZW5kZXJpbmcgbW9kZS4KICAgICB2aXJ0dWFs
IHZvaWQgYWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKTsKICAgICAvLyByZXR1cm5z
IGFuIG9iamVjdCB0aGF0IGNhbiBiZSBkaXJlY3RseSBjb21wb3NpdGVkIHZpYSBHcmFwaGljc0xh
eWVyUXQgKGVzc2VudGlhbGx5IGEgUUdyYXBoaWNzSXRlbSopCiAgICAgdmlydHVhbCBQbGF0Zm9y
bUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CisjZWxzZQorICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgYWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKSB7fQorICAg
IHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KKyNlbmRpZgogI2VuZGlmCgogICAgIHZpcnR1YWwgUGxhdGZvcm1NZWRpYSBwbGF0Zm9ybU1l
ZGlhKCkgY29uc3Q7CkBAIC0xMjUsNiArMTMzLDkgQEAgcHJpdmF0ZToKICAgICBRTWVkaWFQbGF5
ZXJDb250cm9sKiBtX21lZGlhUGxheWVyQ29udHJvbDsKICAgICBRR3JhcGhpY3NWaWRlb0l0ZW0q
IG1fdmlkZW9JdGVtOwogICAgIFFHcmFwaGljc1NjZW5lKiBtX3ZpZGVvU2NlbmU7CisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgT3du
UHRyPFRleHR1cmVNYXBwZXJWaWRlb0xheWVyPiBtX3BsYXRmb3JtTGF5ZXI7CisjZW5kaWYKCiAg
ICAgbXV0YWJsZSBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG1fbmV0d29ya1N0YXRlOwogICAg
IG11dGFibGUgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwCmluZGV4IDkyMzZk
YWUuLmFkOWQxYTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4
dHVyZU1hcHBlclF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1
cmVNYXBwZXJRdC5jcHAKQEAgLTIwLDYgKzIwLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlci5oIgoKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKwogI2luY2x1ZGUgPFF0Q29yZS9xZGVi
dWcuaD4KICNpbmNsdWRlIDxRdEd1aS9xcGFpbnRlbmdpbmUuaD4KICNpbmNsdWRlIDxRdEd1aS9x
cGl4bWFwLmg+CkBAIC0yMjMsMyArMjI1LDUgQEAgUGFzc1JlZlB0cjxSR0JBMzJQcmVtdWx0aW1w
bGllZEJ1ZmZlcj4gUkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXI6OmNyZWF0ZSgpCgogI2VuZGlm
CiB9OworCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70362</attachid>
            <date>2010-10-09 12:37:02 -0700</date>
            <delta_ts>2010-10-09 14:42:55 -0700</delta_ts>
            <desc>Patch 2: stub for media layer implementation.</desc>
            <filename>patch-texmap-media.diff</filename>
            <type>text/plain</type>
            <size>5788</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OGM0YzcyYS4uODAzMmM5MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMC0xMC0wOSAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5p
dGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDcwNzAKKworICAgICAgICBUaGlzIHBhdGNoIGVuYWJsZXMgY29tcGlsYXRp
b24gb2YgVGV4dHVyZU1hcHBlciB3aXRoIE1lZGlhLiBJdCBoYXMgYW4gaW5pdGlhbCBub24td29y
a2luZyBpbXBsZW1lbnRhdGlvbiBvZiBhIHZpZGVvIGxheWVyLCB0byBiZSBpbnRlZ3JhdGVkCisg
ICAgICAgIG9uY2Ugb3RoZXIgcGFydHMgb2YgVGV4dHVyZU1hcHBlciBhcmUgZnVsbHkgd29ya2lu
Zy4KKworICAgICAgICBObyBuZXcgdGVzdHM6IHRoaXMgaXMgbmV3IGltcGxlbWVudGF0aW9uIHRo
YXQncyBub3QgZW5hYmxlZCB5ZXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9N
ZWRpYVBsYXllclByaXZhdGVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
VmlkZW9MYXllclF0OjpUZXh0dXJlTWFwcGVyVmlkZW9MYXllclF0KToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJWaWRlb0xheWVyUXQ6OnNldFBsYXRmb3JtTGF5ZXJDbGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclZpZGVvTGF5ZXJRdDo6cGFpbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclZpZGVvTGF5ZXJRdDo6c2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRdDo6YWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnBsYXRm
b3JtTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJp
dmF0ZVF0Lmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRdDo6c3VwcG9y
dHNBY2NlbGVyYXRlZFJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVRdDo6YWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnBsYXRmb3JtTGF5ZXIpOgorCiAyMDEwLTEwLTA1
ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwCmluZGV4IGZkYjAyYWQuLjExNDM5
NmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQ
cml2YXRlUXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5
ZXJQcml2YXRlUXQuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAicXdlYmZyYW1lLmgi
CiAjaW5jbHVkZSAicXdlYnBhZ2UuaCIKIAorI2luY2x1ZGUgPFFEZWJ1Zz4KICNpbmNsdWRlIDxR
R3JhcGhpY3NTY2VuZT4KICNpbmNsdWRlIDxRR3JhcGhpY3NWaWRlb0l0ZW0+CiAjaW5jbHVkZSA8
UU1lZGlhUGxheWVyQ29udHJvbD4KQEAgLTQzLDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxRUGFpbnRl
cj4KICNpbmNsdWRlIDxRUG9pbnQ+CiAjaW5jbHVkZSA8UVJlY3Q+CisjaW5jbHVkZSA8UVN0eWxl
T3B0aW9uR3JhcGhpY3NJdGVtPgogI2luY2x1ZGUgPFFUaW1lPgogI2luY2x1ZGUgPFFUaW1lcj4K
ICNpbmNsdWRlIDxRVXJsPgpAQCAtNTAsNiArNTIsMTAgQEAKICNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAorI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXIuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC02MDEsNyArNjA3LDQzIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnJlcGFp
bnQoKQogICAgIG1fd2ViQ29yZVBsYXllci0+cmVwYWludCgpOwogfQogCi0jaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYg
VVNFKFRFWFRVUkVfTUFQUEVSKQorCitjbGFzcyBUZXh0dXJlTWFwcGVyVmlkZW9MYXllclF0IDog
cHVibGljIHZpcnR1YWwgVGV4dHVyZU1hcHBlclZpZGVvTGF5ZXIgeworcHVibGljOgorICAgIFRl
eHR1cmVNYXBwZXJWaWRlb0xheWVyUXQoUUdyYXBoaWNzVmlkZW9JdGVtKiB2aWRlb0l0ZW0pCisg
ICAgICAgIDogbV92aWRlb0l0ZW0odmlkZW9JdGVtKQorICAgIHsKKyAgICAgICAgaWYgKCF2aWRl
b0l0ZW0pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHNl
dFBsYXRmb3JtTGF5ZXJDbGllbnQoVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50KiBjbGllbnQpCisg
ICAgeworICAgICAgICBtX2NsaWVudCA9IGNsaWVudDsKKworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqIGdjKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3Zp
ZGVvSXRlbSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgUVN0eWxlT3B0aW9uR3JhcGhp
Y3NJdGVtIG9wdDsKKyAgICAgICAgb3B0LmV4cG9zZWRSZWN0ID0gbV92aWRlb0l0ZW0uZGF0YSgp
LT5zY2VuZUJvdW5kaW5nUmVjdCgpOworICAgICAgICBvcHQucmVjdCA9IG9wdC5leHBvc2VkUmVj
dC50b1JlY3QoKTsKKyAgICAgICAgbV92aWRlb0l0ZW0uZGF0YSgpLT5wYWludChnYy0+cGxhdGZv
cm1Db250ZXh0KCksICZvcHQpOworICAgIH0KKworICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZpZGVvSXRlbSA/IEludFNpemUobV92aWRl
b0l0ZW0uZGF0YSgpLT5zaXplKCkud2lkdGgoKSwgbV92aWRlb0l0ZW0uZGF0YSgpLT5zaXplKCku
aGVpZ2h0KCkpIDogSW50U2l6ZSgpOworICAgIH0KKworICAgIFFXZWFrUG9pbnRlcjxRR3JhcGhp
Y3NWaWRlb0l0ZW0+IG1fdmlkZW9JdGVtOworICAgIFRleHR1cmVNYXBwZXJMYXllckNsaWVudCog
bV9jbGllbnQ7Cit9OworCisKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OmFjY2VsZXJhdGVk
UmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCkKIHsKICAgICBNZWRpYVBsYXllckNsaWVudCogY2xpZW50
ID0gbV93ZWJDb3JlUGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpOwpAQCAtNjExLDE0ICs2NTMs
MTIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6YWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0
ZUNoYW5nZWQoKQogCiAgICAgbV9jb21wb3NpdGVkID0gY29tcG9zaXRlZDsKICAgICBpZiAoY29t
cG9zaXRlZCkKLSAgICAgICAgbV92aWRlb1NjZW5lLT5yZW1vdmVJdGVtKG1fdmlkZW9JdGVtKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fdmlkZW9TY2VuZS0+YWRkSXRlbShtX3ZpZGVvSXRlbSk7Cisg
ICAgICAgIG1fcGxhdGZvcm1MYXllciA9IG5ldyBUZXh0dXJlTWFwcGVyVmlkZW9MYXllclF0KG1f
dmlkZW9JdGVtKTsKIH0KIAogUGxhdGZvcm1MYXllciogTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnBs
YXRmb3JtTGF5ZXIoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbXBvc2l0ZWQgPyBtX3ZpZGVv
SXRlbSA6IDA7CisgICAgcmV0dXJuIG1fY29tcG9zaXRlZCA/IG1fcGxhdGZvcm1MYXllci5nZXQo
KSA6IDA7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9NZWRpYVBsYXllclByaXZhdGVRdC5oCmluZGV4IGJhODVmOGYuLjM4ZDMzMDkgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgK
QEAgLTMzLDYgKzMzLDggQEAgUVRfRU5EX05BTUVTUEFDRQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK2NsYXNzIFRleHR1cmVNYXBwZXJWaWRlb0xheWVyOworCiBjbGFzcyBNZWRpYVBsYXllclBy
aXZhdGVRdCA6IHB1YmxpYyBRT2JqZWN0LCBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJm
YWNlIHsKIAogICAgIFFfT0JKRUNUCkBAIC05MSwxMiArOTMsMTggQEAgcHVibGljOgogICAgIGJv
b2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAgICAg
Ly8gd2hldGhlciBhY2NlbGVyYXRlZCByZW5kZXJpbmcgaXMgc3VwcG9ydGVkIGJ5IHRoZSBtZWRp
YSBlbmdpbmUgZm9yIHRoZSBjdXJyZW50IG1lZGlhLgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIC8vIGNh
bGxlZCB3aGVuIHRoZSByZW5kZXJpbmcgc3lzdGVtIGZsaXBzIHRoZSBpbnRvIG9yIG91dCBvZiBh
Y2NlbGVyYXRlZCByZW5kZXJpbmcgbW9kZS4KICAgICB2aXJ0dWFsIHZvaWQgYWNjZWxlcmF0ZWRS
ZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKTsKICAgICAvLyByZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNh
biBiZSBkaXJlY3RseSBjb21wb3NpdGVkIHZpYSBHcmFwaGljc0xheWVyUXQgKGVzc2VudGlhbGx5
IGEgUUdyYXBoaWNzSXRlbSopCiAgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxh
eWVyKCkgY29uc3Q7CisjZWxzZQorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVk
UmVuZGVyaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWNj
ZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKSB7fQorICAgIHZpcnR1YWwgUGxhdGZvcm1M
YXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyNlbmRpZgogI2VuZGlm
CiAKICAgICB2aXJ0dWFsIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRpYSgpIGNvbnN0OwpAQCAt
MTI1LDYgKzEzMyw5IEBAIHByaXZhdGU6CiAgICAgUU1lZGlhUGxheWVyQ29udHJvbCogbV9tZWRp
YVBsYXllckNvbnRyb2w7CiAgICAgUUdyYXBoaWNzVmlkZW9JdGVtKiBtX3ZpZGVvSXRlbTsKICAg
ICBRR3JhcGhpY3NTY2VuZSogbV92aWRlb1NjZW5lOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIE93blB0cjxUZXh0dXJlTWFwcGVy
VmlkZW9MYXllcj4gbV9wbGF0Zm9ybUxheWVyOworI2VuZGlmCiAKICAgICBtdXRhYmxlIE1lZGlh
UGxheWVyOjpOZXR3b3JrU3RhdGUgbV9uZXR3b3JrU3RhdGU7CiAgICAgbXV0YWJsZSBNZWRpYVBs
YXllcjo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7Cg==
</data>
<flag name="review"
          id="60203"
          type_id="1"
          status="-"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70363</attachid>
            <date>2010-10-09 12:40:37 -0700</date>
            <delta_ts>2010-10-25 13:20:34 -0700</delta_ts>
            <desc>Patch 3: Add an opt-in #define to WebCore</desc>
            <filename>patch-texmap-webcore.diff</filename>
            <type>text/plain</type>
            <size>2378</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OGM0YzcyYS4uZGNhYmE0MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0xMC0wOSAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5p
dGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDcwNzAKKworICAgICAgICBBZGQgYSBjb25maWcgZmxhZyBhbmQgYSBkZWZp
bmUgKFdURl9VU0VfVEVYVFVSRV9NQVBQRVIpIHRvIFdlYkNvcmUsIHRvIGVuYWJsZSBvcHQtaW4g
Y29tcGlsYXRpb24gb2YgdGV4dHVyZS1tYXBwZXIgd2l0aCBRdC4KKworICAgICAgICBObyBuZXcg
dGVzdHM6IFdJUCBmb3IgYSBuZXcgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBXZWJDb3Jl
LnBybzoKKwogMjAxMC0xMC0wNSAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9r
aWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggYTg0NTJl
NC4uMDE4OWZhMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3Jl
L1dlYkNvcmUucHJvCkBAIC0yMDU5LDcgKzIwNTksNiBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1Blbi5oIFwK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmggXAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5oIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9JbWFnZURlY29kZXJRdC5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9T
dGlsbEltYWdlUXQuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNwYXJlbmN5TGF5
ZXIuaCBcCkBAIC0yNTgzLDcgKzI1ODIsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9GbG9hdFJlY3RRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dy
YWRpZW50UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRR
dC5jcHAgXAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHAgXAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ljb25RdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFn
ZURlY29kZXJRdC5jcHAgXApAQCAtMzc2Nyw2ICszNzY1LDI5IEBAIHdpbjMyOiF3aW4zMi1nKysq
OmNvbnRhaW5zKFFNQUtFX0hPU1QuYXJjaCwgeDg2XzY0KTp7CiAgICAgfQogfQogCisjIFVuY29t
bWVudCB0aGlzIHRvIGVuYWJsZSBUZXh0dXJlIE1hcHBlci4KKyMgQ09ORklHICs9IHRleG1hcAor
Citjb250YWlucyhDT05GSUcsIHRleG1hcCkgeworICAgIERFRklORVMgKz0gV1RGX1VTRV9URVhU
VVJFX01BUFBFUj0xCisgICAgSEVBREVSUyArPSBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyLmggXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaAorCisgICAgU09VUkNFUyArPSBcCisgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAgXAorICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCisK
KyAgICBjb250YWlucyhRVF9DT05GSUcsIG9wZW5nbCkgeworICAgICAgICBRVCArPSBvcGVuZ2wK
KyAgICAgICAgSEVBREVSUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBl
ckdMLmgKKyAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVy
ZU1hcHBlckdMLmNwcAorICAgIH0KK30gZWxzZSB7CisgICAgSEVBREVSUyArPSBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuaAorICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcAorfQorCiBzeW1iaWFuIHsKICAgICBzaGFyZWQg
ewogICAgICAgICBjb250YWlucyhDT05GSUcsIGRlZl9maWxlcykgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70364</attachid>
            <date>2010-10-09 12:46:35 -0700</date>
            <delta_ts>2010-10-09 15:25:52 -0700</delta_ts>
            <desc>Patch 4: glue layer (PageClientQt) opt-in for TextureMapper</desc>
            <filename>patch-texmap-glue.diff</filename>
            <type>text/plain</type>
            <size>18113</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OGM0YzcyYS4uNGZkNjVmZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0xMC0wOSAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5p
dGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDcwNzAKKworICAgICAgICBHbHVlIGxheWVyIChXZWJDb3JlU3VwcG9ydCkg
Y2hhbmdlcyB0byBhbGxvdyBjb25uZWN0aW5nIFRleHR1cmVNYXBwZXIgdG8gYSBRdCBQYWdlQ2xp
ZW50LCBpLmUuCisgICAgICAgIGEgUVdlYlZpZXcgb3IgYSBRR3JhcGhpY3NXZWJWaWV3LiBUaGlz
IGVuYWJsZXMgdGhlIG5ldyB0eXBlLCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciwgdG8gYmUg
cmVjb2duaXplZCBib3RoIGJ5CisgICAgICAgIHRoZSBjb21wb3NpdG9yIGFuZCBieSB0aGUgcGFn
ZSBjbGllbnQuCisgICAgICAgIE5vdGUgdGhhdCB0aGlzIGlzIHRlbXBvcmFyaWx5IGFuIG9wdC1p
biwgdW5kZXIgVVNFKFRFWFRVUkVfTUFQUEVSKQorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gV0lQ
IG9uIGEgbmV3IGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NMYXllci5oOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50Lmg6
CisgICAgICAgIChRV2ViUGFnZUNsaWVudDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIpOgorCiAyMDEw
LTEwLTA1ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NMYXllci5oCmluZGV4IGFkNGQwNTYuLmM4MTUxMWQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCkBAIC01NywxMSArNTcsMTcgQEAgdHlwZWRl
ZiBXS0NBQ0ZMYXllciBQbGF0Zm9ybUxheWVyOwogdHlwZWRlZiB2b2lkKiBOYXRpdmVMYXllcjsK
IH0KICNlbGlmIFBMQVRGT1JNKFFUKQotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBRR3JhcGhp
Y3NJdGVtOwotUVRfRU5EX05BTUVTUEFDRQotdHlwZWRlZiBRR3JhcGhpY3NJdGVtIFBsYXRmb3Jt
TGF5ZXI7Ci10eXBlZGVmIFFHcmFwaGljc0l0ZW0qIE5hdGl2ZUxheWVyOworI2lmIFVTRShURVhU
VVJFX01BUFBFUikKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyOwordHlwZWRlZiBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciBQbGF0Zm9ybUxh
eWVyOwordHlwZWRlZiBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogTmF0aXZlTGF5ZXI7Cit9
OworI2Vsc2UKK2NsYXNzIFFHcmFwaGljc09iamVjdDsKK3R5cGVkZWYgUUdyYXBoaWNzT2JqZWN0
IFBsYXRmb3JtTGF5ZXI7Cit0eXBlZGVmIFFHcmFwaGljc09iamVjdCogTmF0aXZlTGF5ZXI7Cisj
ZW5kaWYKICNlbGlmIFBMQVRGT1JNKENIUk9NSVVNKQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgTGF5ZXJDaHJvbWl1bTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVdlYlBh
Z2VDbGllbnQuaCBiL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVdlYlBhZ2VDbGllbnQuaAppbmRleCA5
MzAxY2Q1Li4xZDA4ZTFmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FXZWJQYWdl
Q2xpZW50LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oCkBAIC0z
Miw4ICszMiwxNSBAQAogCiAjaW5jbHVkZSA8UVJlY3Q+CiAKKyNpZiBVU0UoVEVYVFVSRV9NQVBQ
RVIpCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
cjsKK307CisjZWxzZQorY2xhc3MgUUdyYXBoaWNzT2JqZWN0OworI2VuZGlmCisKIFFUX0JFR0lO
X05BTUVTUEFDRQotY2xhc3MgUUdyYXBoaWNzSXRlbTsKIGNsYXNzIFFTdHlsZTsKIFFUX0VORF9O
QU1FU1BBQ0UKIApAQCAtNDksNyArNTYsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBp
bnB1dE1ldGhvZEVuYWJsZWQoKSBjb25zdCA9IDA7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogICAgIC8vIHRoaXMgZ2V0cyBjYWxsZWQgd2hlbiB3ZSBzdGFydC9zdG9wIGNvbXBv
c2l0aW5nLgotICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihRR3JhcGhpY3NJ
dGVtKiBsYXllcikge30KKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgdmlydHVhbCB2b2lk
IHNldFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
KiBsYXllcikge30KKyNlbHNlCisgICAgdmlydHVhbCB2b2lkIHNldFJvb3RHcmFwaGljc0xheWVy
KFFHcmFwaGljc09iamVjdCogbGF5ZXIpIHt9CisjZW5kaWYKIAogICAgIC8vIHRoaXMgZ2V0cyBj
YWxsZWQgd2hlbiB0aGUgY29tcG9zaXRvciB3YW50cyB1cyB0byBzeW5jIHRoZSBsYXllcnMKICAg
ICAvLyBpZiBzY2hlZHVsZVN5bmMgaXMgdHJ1ZSwgd2Ugc2NoZWR1bGUgYSBzeW5jIG91cnNlbHZl
cy4gb3RoZXJ3aXNlLApkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuaCBiL1dl
YktpdC9xdC9BcGkvcXdlYmZyYW1lLmgKaW5kZXggZTc4ZmIwNy4uYTU5OGE1NiAxMDA2NDQKLS0t
IGEvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuaAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFt
ZS5oCkBAIC01Niw2ICs1Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBXaWRn
ZXRQcml2YXRlOwogICAgIGNsYXNzIEZyYW1lTG9hZGVyQ2xpZW50UXQ7CiAgICAgY2xhc3MgQ2hy
b21lQ2xpZW50UXQ7CisgICAgY2xhc3MgUGxhdGZvcm1MYXllclByb3h5UXQ7CiB9CiBjbGFzcyBR
V2ViRnJhbWVEYXRhOwogY2xhc3MgUVdlYkhpdFRlc3RSZXN1bHRQcml2YXRlOwpAQCAtMjMxLDYg
KzIzMiw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OldpZGdldFByaXZh
dGU7CiAgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ7CiAgICAg
ZnJpZW5kIGNsYXNzIFdlYkNvcmU6OkNocm9tZUNsaWVudFF0OworICAgIGZyaWVuZCBjbGFzcyBX
ZWJDb3JlOjpQbGF0Zm9ybUxheWVyUHJveHlRdDsKICAgICBRV2ViRnJhbWVQcml2YXRlICpkOwog
fTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oIGIvV2ViS2l0L3F0
L0FwaS9xd2ViZnJhbWVfcC5oCmluZGV4IDViYTNmNTIuLjIwMzRlNGQgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9w
LmgKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEZyYW1l
VmlldzsKICAgICBjbGFzcyBIVE1MRnJhbWVPd25lckVsZW1lbnQ7CiAgICAgY2xhc3MgU2Nyb2xs
YmFyOworICAgIGNsYXNzIFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXI7CiB9CiBjbGFzcyBRV2Vi
UGFnZTsKIApAQCAtNzIsNiArNzMsOSBAQCBwdWJsaWM6CiAgICAgICAgICwgYWxsb3dzU2Nyb2xs
aW5nKHRydWUpCiAgICAgICAgICwgbWFyZ2luV2lkdGgoLTEpCiAgICAgICAgICwgbWFyZ2luSGVp
Z2h0KC0xKQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVf
TUFQUEVSKQorICAgICAgICAsIHJvb3RHcmFwaGljc0xheWVyKDApCisjZW5kaWYKICAgICAgICAg
LCB6b29tVGV4dE9ubHkoZmFsc2UpCiAgICAgICAgIHt9CiAgICAgdm9pZCBpbml0KFFXZWJGcmFt
ZSogcWZyYW1lLCBRV2ViRnJhbWVEYXRhKiBmcmFtZURhdGEpOwpAQCAtMTAyLDYgKzEwNiw5IEBA
IHB1YmxpYzoKICAgICBib29sIGFsbG93c1Njcm9sbGluZzsKICAgICBpbnQgbWFyZ2luV2lkdGg7
CiAgICAgaW50IG1hcmdpbkhlaWdodDsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
ICYmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ29udGVu
dExheWVyKiByb290R3JhcGhpY3NMYXllcjsKKyNlbmRpZgogICAgIGJvb2wgem9vbVRleHRPbmx5
OwogfTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAgYi9XZWJLaXQv
cXQvQXBpL3F3ZWJwYWdlLmNwcAppbmRleCAxNDM5NDY4Li5mNmI2NzU0IDEwMDY0NAotLS0gYS9X
ZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNw
cApAQCAtMTk4Myw3ICsxOTgzLDcgQEAgdm9pZCBRV2ViUGFnZTo6c2V0VmlldyhRV2lkZ2V0KiB2
aWV3KQogICAgIH0KIAogICAgIGlmICh2aWV3KQotICAgICAgICBkLT5jbGllbnQgPSBuZXcgUGFn
ZUNsaWVudFFXaWRnZXQodmlldyk7CisgICAgICAgIGQtPmNsaWVudCA9IG5ldyBQYWdlQ2xpZW50
UVdpZGdldCh2aWV3LCB0aGlzKTsKIH0KIAogLyohCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQ2hh
bmdlTG9nIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCAzNDhlZmUwLi5jMmZkNmUwIDEwMDY0
NAotLS0gYS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw0NiBAQAorMjAxMC0xMC0wOSAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRo
YWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5pdGlhbCBpbXBsZW1lbnRhdGlv
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcwNzAK
KworCisgICAgICAgIEdsdWUgbGF5ZXIgKFdlYkNvcmVTdXBwb3J0KSBjaGFuZ2VzIHRvIGFsbG93
IGNvbm5lY3RpbmcgVGV4dHVyZU1hcHBlciB0byBhIFF0IFBhZ2VDbGllbnQsIGkuZS4KKyAgICAg
ICAgYSBRV2ViVmlldyBvciBhIFFHcmFwaGljc1dlYlZpZXcuIFRoaXMgZW5hYmxlcyB0aGUgbmV3
IHR5cGUsIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLCB0byBiZSByZWNvZ25pemVkIGJvdGgg
YnkKKyAgICAgICAgdGhlIGNvbXBvc2l0b3IgYW5kIGJ5IHRoZSBwYWdlIGNsaWVudC4KKyAgICAg
ICAgTm90ZSB0aGF0IHRoaXMgaXMgdGVtcG9yYXJpbHkgYW4gb3B0LWluLCB1bmRlciBVU0UoVEVY
VFVSRV9NQVBQRVIpCisKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1lLmg6CisgICAgICAgICogQXBp
L3F3ZWJmcmFtZV9wLmg6CisgICAgICAgIChRV2ViRnJhbWVQcml2YXRlOjpRV2ViRnJhbWVQcml2
YXRlKToKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuY3BwOgorICAgICAgICAoUVdlYlBhZ2U6OnNl
dFZpZXcpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0OjphdHRhY2hSb290R3JhcGhpY3NMYXllcik6
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtTGF5ZXJQcm94eVF0OjpQbGF0Zm9ybUxheWVyUHJveHlRdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUxheWVyUHJveHlRdDo6flBsYXRmb3JtTGF5ZXJQcm94eVF0
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXJQcm94eVF0OjpldmVudEZpbHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUxheWVyUHJveHlRdDo6c2V0TmVlZHNEaXNwbGF5
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXJQcm94eVF0OjpzZXROZWVkc0Rpc3Bs
YXlJblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1MYXllclByb3h5UXQ6OnNldFNp
emVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRV2lkZ2V0OjpzZXRSb290
R3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UVdpZGdldDo6bWFy
a0ZvclN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFXaWRnZXQ6OnN5bmNMYXll
cnMpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFXaWRnZXQ6On5QYWdlQ2xpZW50UVdp
ZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojp+UGFn
ZUNsaWVudFFHcmFwaGljc1dpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdy
YXBoaWNzV2lkZ2V0OjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFw
aGljc1dpZGdldDo6dXBkYXRlQ29tcG9zaXRpbmdTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpjcmVhdGVPckRlbGV0ZU92ZXJsYXkp
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9vdEdy
YXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdl
dDo6bWFya0ZvclN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dp
ZGdldDo6d2luZG93UmVjdCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UVdpZGdldDo6UGFnZUNsaWVudFFXaWRn
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFXaWRnZXQ6OmFsbG93c0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dp
ZGdldDo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCk6CisKIDIwMTAtMTAtMDMgIE5vJ2FtIFJv
c2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRRdC5jcHAgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
UXQuY3BwCmluZGV4IDlmYmM1ZTUuLjJmNTNkY2YgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAKKysrIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudFF0LmNwcApAQCAtMzksNyArMzksNyBAQAogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uLmgiCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJRdC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXIuaCIKICNlbmRpZgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVu
dFF0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgpAQCAtNTkwLDcgKzU5MCw3IEBAIHZv
aWQgQ2hyb21lQ2xpZW50UXQ6OmNhbmNlbEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RGb3JG
cmFtZShGcmFtZSogZnJhbWUsIEdlCiB2b2lkIENocm9tZUNsaWVudFF0OjphdHRhY2hSb290R3Jh
cGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCiB7
CiAgICAgaWYgKHBsYXRmb3JtUGFnZUNsaWVudCgpKQotICAgICAgICBwbGF0Zm9ybVBhZ2VDbGll
bnQoKS0+c2V0Um9vdEdyYXBoaWNzTGF5ZXIoZ3JhcGhpY3NMYXllciA/IGdyYXBoaWNzTGF5ZXIt
Pm5hdGl2ZUxheWVyKCkgOiAwKTsKKyAgICAgICAgcGxhdGZvcm1QYWdlQ2xpZW50KCktPnNldFJv
b3RHcmFwaGljc0xheWVyKGdyYXBoaWNzTGF5ZXIgPyBncmFwaGljc0xheWVyLT5wbGF0Zm9ybUxh
eWVyKCkgOiAwKTsKIH0KIAogdm9pZCBDaHJvbWVDbGllbnRRdDo6c2V0TmVlZHNPbmVTaG90RHJh
d2luZ1N5bmNocm9uaXphdGlvbigpCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvUGFnZUNsaWVudFF0LmNwcCBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50
UXQuY3BwCmluZGV4IDlmMTE0OTYuLjU1Yjk1N2EgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCisrKyBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9QYWdlQ2xpZW50UXQuY3BwCkBAIC0yMSwxMiArMjEsMTAxIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAKICNpbmNsdWRlICJQYWdlQ2xpZW50UXQuaCIKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKIAogI2lmIGRlZmluZWQoUV9XU19YMTEpCiAjaW5jbHVk
ZSA8UVgxMUluZm8+CiAjZW5kaWYKIAorI2lmZGVmIFFUX09QRU5HTF9MSUIKKyNpbmNsdWRlIDxR
R0xXaWRnZXQ+CisjZW5kaWYKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKK2NsYXNzIFBsYXRmb3JtTGF5
ZXJQcm94eVF0IDogcHVibGljIFFPYmplY3QsIHB1YmxpYyB2aXJ0dWFsIFRleHR1cmVNYXBwZXJM
YXllckNsaWVudCB7CitwdWJsaWM6CisgICAgUGxhdGZvcm1MYXllclByb3h5UXQoUVdlYkZyYW1l
ICpmcmFtZSwgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllciAqbGF5ZXIsIFFXaWRnZXQgKndpZGdl
dCA9IDAsIFFHcmFwaGljc09iamVjdCogZ3JhcGhpY3NPYmplY3QgPSAwKQorICAgICAgICA6IFFP
YmplY3Qod2lkZ2V0ID8gKFFPYmplY3QqKXdpZGdldCA6IChRT2JqZWN0KilncmFwaGljc09iamVj
dCkKKyAgICAgICAgLCBtX3dpZGdldCh3aWRnZXQpCisgICAgICAgICwgbV9ncmFwaGljc0l0ZW0o
Z3JhcGhpY3NPYmplY3QpCisgICAgICAgICwgbV9mcmFtZShmcmFtZSkKKyAgICAgICAgLCBtX2xh
eWVyKGxheWVyKQorICAgIHsKKyAgICAgICAgaWYgKG1fbGF5ZXIpCisgICAgICAgICAgICBtX2xh
eWVyLT5zZXRQbGF0Zm9ybUxheWVyQ2xpZW50KHRoaXMpOworICAgICAgICBtX2ZyYW1lLT5kLT5y
b290R3JhcGhpY3NMYXllciA9IG1fbGF5ZXI7CisgICAgICAgIGlmIChtX3dpZGdldCkKKyAgICAg
ICAgICAgIG1fd2lkZ2V0LT5pbnN0YWxsRXZlbnRGaWx0ZXIodGhpcyk7CisgICAgfQorCisgICAg
flBsYXRmb3JtTGF5ZXJQcm94eVF0KCkKKyAgICB7CisgICAgICAgIGlmIChtX2xheWVyKQorICAg
ICAgICAgICAgbV9sYXllci0+c2V0UGxhdGZvcm1MYXllckNsaWVudCgwKTsKKyAgICAgICAgaWYg
KG1fZnJhbWUtPmQpCisgICAgICAgICAgICBtX2ZyYW1lLT5kLT5yb290R3JhcGhpY3NMYXllciA9
IDA7CisgICAgfQorCisgICAgLy8gV2UgZG9uJ3Qgd2FudCBhIGh1Z2UgcmVnaW9uLWNsaXAgb24g
dGhlIGNvbXBvc2l0aW5nIGxheWVyczsgaW5zdGVhZCB3ZSB1bml0ZSB0aGUgcmVjdGFuZ2xlcyB0
b2dldGhlcgorICAgIC8vIGFuZCBjbGVhciB0aGVtIHdoZW4gdGhlIHBhaW50IGFjdHVhbGx5IG9j
Y3Vycy4KKyAgICBib29sIGV2ZW50RmlsdGVyKFFPYmplY3QqIG9iamVjdCwgUUV2ZW50KiBldmVu
dCkKKyAgICB7CisgICAgICAgIGlmIChvYmplY3QgPT0gbV93aWRnZXQgJiYgZXZlbnQtPnR5cGUo
KSA9PSBRRXZlbnQ6OlBhaW50KQorICAgICAgICAgICAgbV9kaXJ0eVJlY3QgPSBRUmVjdCgpOwor
ICAgICAgICByZXR1cm4gUU9iamVjdDo6ZXZlbnRGaWx0ZXIob2JqZWN0LCBldmVudCk7CisgICAg
fQorCisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKQorICAgIHsKKyAgICAgICAgaWYgKG1fd2lk
Z2V0KQorICAgICAgICAgICAgbV93aWRnZXQtPnVwZGF0ZSgpOworICAgICAgICBlbHNlIGlmICht
X2dyYXBoaWNzSXRlbSkKKyAgICAgICAgICAgIG1fZ3JhcGhpY3NJdGVtLT51cGRhdGUoKTsKKyAg
ICB9CisKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0
KQorICAgIHsKKyAgICAgICAgaWYgKG1fZ3JhcGhpY3NJdGVtKSB7CisgICAgICAgICAgICBtX2dy
YXBoaWNzSXRlbS0+dXBkYXRlKFFSZWN0RihyZWN0KSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgbV9kaXJ0eVJlY3QgfD0gcmVjdDsKKyAgICAgICAgbV93aWRnZXQt
PnVwZGF0ZShtX2RpcnR5UmVjdCk7CisgICAgfQorCisgICAgdm9pZCBzZXRTaXplQ2hhbmdlZChj
b25zdCBJbnRTaXplJiBuZXdTaXplKQorICAgIHsKKyAgICB9CisKKyAgICBRUmVjdCBtX2RpcnR5
UmVjdDsKKyAgICBRV2lkZ2V0KiBtX3dpZGdldDsKKyAgICBRR3JhcGhpY3NJdGVtKiBtX2dyYXBo
aWNzSXRlbTsKKyAgICBRV2ViRnJhbWUqIG1fZnJhbWU7CisgICAgVGV4dHVyZU1hcHBlckNvbnRl
bnRMYXllciogbV9sYXllcjsKK307CisKK3ZvaWQgUGFnZUNsaWVudFFXaWRnZXQ6OnNldFJvb3RH
cmFwaGljc0xheWVyKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBsYXllcikKK3sKKyAgICBp
ZiAobGF5ZXIpIHsKKyAgICAgICAgcGxhdGZvcm1MYXllclByb3h5ID0gbmV3IFBsYXRmb3JtTGF5
ZXJQcm94eVF0KHBhZ2UtPm1haW5GcmFtZSgpLCBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyQ29u
dGVudExheWVyKj4obGF5ZXIpLCB2aWV3KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBk
ZWxldGUgcGxhdGZvcm1MYXllclByb3h5OworICAgIHBsYXRmb3JtTGF5ZXJQcm94eSA9IDA7Cit9
CisKK3ZvaWQKK1BhZ2VDbGllbnRRV2lkZ2V0OjptYXJrRm9yU3luYyhib29sIHNjaGVkdWxlU3lu
YykKK3sKKyAgICBzeW5jVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkCitQYWdlQ2xp
ZW50UVdpZGdldDo6c3luY0xheWVycyhUaW1lcjxQYWdlQ2xpZW50UVdpZGdldD4qKQoreworICAg
IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUocGFnZS0+bWFpbkZyYW1lKCkpLT52aWV3KCktPnN5bmND
b21wb3NpdGluZ1N0YXRlUmVjdXJzaXZlKCk7Cit9CisjZW5kaWYKIAogdm9pZCBQYWdlQ2xpZW50
UVdpZGdldDo6c2Nyb2xsKGludCBkeCwgaW50IGR5LCBjb25zdCBRUmVjdCYgcmVjdFRvU2Nyb2xs
KQogewpAQCAtMTAzLDIzICsxOTIsMjcgQEAgUVJlY3RGIFBhZ2VDbGllbnRRV2lkZ2V0Ojp3aW5k
b3dSZWN0KCkgY29uc3QKICAgICByZXR1cm4gUVJlY3RGKHZpZXctPndpbmRvdygpLT5nZW9tZXRy
eSgpKTsKIH0KIAorUGFnZUNsaWVudFFXaWRnZXQ6On5QYWdlQ2xpZW50UVdpZGdldCgpCit7Cisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisg
ICAgZGVsZXRlIHBsYXRmb3JtTGF5ZXJQcm94eTsKKyNlbmRpZgorfQorCiBQYWdlQ2xpZW50UUdy
YXBoaWNzV2lkZ2V0Ojp+UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCgpCiB7Ci0gICAgZGVsZXRl
IG92ZXJsYXk7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlmICghcm9v
dEdyYXBoaWNzTGF5ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyB3ZSBkb24ndCBuZWVkIHRv
IGRlbGV0ZSB0aGUgcm9vdCBncmFwaGljcyBsYXllci4gVGhlIGxpZmVjeWNsZSBpcyBtYW5hZ2Vk
IGluIEdyYXBoaWNzTGF5ZXJRdC5jcHAuCi0gICAgcm9vdEdyYXBoaWNzTGF5ZXIuZGF0YSgpLT5z
ZXRQYXJlbnRJdGVtKDApOwotICAgIHZpZXctPnNjZW5lKCktPnJlbW92ZUl0ZW0ocm9vdEdyYXBo
aWNzTGF5ZXIuZGF0YSgpKTsKKyAgICBkZWxldGUgb3ZlcmxheTsKKyNpZiBVU0UoVEVYVFVSRV9N
QVBQRVIpCisgICAgZGVsZXRlIHBsYXRmb3JtTGF5ZXJQcm94eTsKKyNlbmRpZgogI2VuZGlmCiB9
CiAKIHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2Nyb2xsKGludCBkeCwgaW50IGR5
LCBjb25zdCBRUmVjdCYgcmVjdFRvU2Nyb2xsKQogewogICAgIHZpZXctPnNjcm9sbChxcmVhbChk
eCksIHFyZWFsKGR5KSwgcmVjdFRvU2Nyb2xsKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmICFVU0UoVEVYVFVS
RV9NQVBQRVIpCiAgICAgdXBkYXRlQ29tcG9zaXRpbmdTY3JvbGxQb3NpdGlvbigpOwogI2VuZGlm
CiB9CkBAIC0xMzgsOCArMjMxLDI1IEBAIHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6
dXBkYXRlKGNvbnN0IFFSZWN0JiBkaXJ0eVJlY3QpCiAjZW5kaWYKIH0KIAordm9pZCBQYWdlQ2xp
ZW50UUdyYXBoaWNzV2lkZ2V0Ojp1cGRhdGVDb21wb3NpdGluZ1Njcm9sbFBvc2l0aW9uKCkKK3sK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikK
KyAgICAvLyBUaGlzIGlzIG5vdCBuZWVkZWQgaW4gdGV4dHVyZS1tYXBwZXIsIGJlY2F1c2Ugd2Ug
Z2V0IHRoZSBzY3JvbGwgcG9zaXRpb24gZnJvbSB0aGUgUVBhaW50ZXIuCisgICAgcmV0dXJuOwor
I2Vsc2UKKyAgICBpZiAocm9vdEdyYXBoaWNzTGF5ZXIgJiYgcGFnZSAmJiBwYWdlLT5tYWluRnJh
bWUoKSkgeworICAgICAgICBjb25zdCBRUG9pbnQgc2Nyb2xsUG9zaXRpb24gPSBwYWdlLT5tYWlu
RnJhbWUoKS0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgcm9vdEdyYXBoaWNzTGF5ZXIuZGF0
YSgpLT5zZXRQb3MoLXNjcm9sbFBvc2l0aW9uKTsKKyAgICB9CisjZW5kaWYKK30KKwogdm9pZCBQ
YWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpjcmVhdGVPckRlbGV0ZU92ZXJsYXkoKQogeworI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAg
IC8vIFdlIGRvbid0IHVzZSBhbiBvdmVybGF5IHdpdGggVGV4dHVyZU1hcHBlci4gSW5zdGVhZCwg
dGhlIG92ZXJsYXkgaXMgZHJhd24gaW5zaWRlIFFXZWJGcmFtZS4KKyAgICByZXR1cm47CisjZWxz
ZQogICAgIGJvb2wgdXNlT3ZlcmxheSA9IGZhbHNlOwogICAgIGlmICghdmlld1Jlc2l6ZXNUb0Nv
bnRlbnRzKSB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtMTYwLDYgKzI3
MCw3IEBAIHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6Y3JlYXRlT3JEZWxldGVPdmVy
bGF5KCkKICAgICAgICAgb3ZlcmxheS0+ZGVsZXRlTGF0ZXIoKTsKICAgICAgICAgb3ZlcmxheSA9
IDA7CiAgICAgfQorI2VuZGlmCiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CkBAIC0xNzEsNyArMjgyLDE4IEBAIHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c3lu
Y0xheWVycygpCiAgICAgfQogfQogCi12b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNl
dFJvb3RHcmFwaGljc0xheWVyKFFHcmFwaGljc0l0ZW0qIGxheWVyKQorI2lmIFVTRShURVhUVVJF
X01BUFBFUikKK3ZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9vdEdyYXBoaWNz
TGF5ZXIoVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIGxheWVyKQoreworICAgIGlmIChsYXll
cikgeworICAgICAgICBwbGF0Zm9ybUxheWVyUHJveHkgPSBuZXcgUGxhdGZvcm1MYXllclByb3h5
UXQocGFnZS0+bWFpbkZyYW1lKCksIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJDb250ZW50TGF5
ZXIqPihsYXllciksIDAsIHZpZXcpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGRlbGV0
ZSBwbGF0Zm9ybUxheWVyUHJveHk7CisgICAgcGxhdGZvcm1MYXllclByb3h5ID0gMDsKK30KKyNl
bHNlCit2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVy
KFFHcmFwaGljc09iamVjdCogbGF5ZXIpCiB7CiAgICAgaWYgKHJvb3RHcmFwaGljc0xheWVyKSB7
CiAgICAgICAgIHJvb3RHcmFwaGljc0xheWVyLmRhdGEoKS0+c2V0UGFyZW50SXRlbSgwKTsKQEAg
LTE3OSw3ICszMDEsNyBAQCB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNldFJvb3RH
cmFwaGljc0xheWVyKFFHcmFwaGljc0l0ZW0qIGxheWVyKQogICAgICAgICBRV2ViRnJhbWVQcml2
YXRlOjpjb3JlKHBhZ2UtPm1haW5GcmFtZSgpKS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0
ZVJlY3Vyc2l2ZSgpOwogICAgIH0KIAotICAgIHJvb3RHcmFwaGljc0xheWVyID0gbGF5ZXIgPyBs
YXllci0+dG9HcmFwaGljc09iamVjdCgpIDogMDsKKyAgICByb290R3JhcGhpY3NMYXllciA9IGxh
eWVyOwogCiAgICAgaWYgKGxheWVyKSB7CiAgICAgICAgIGxheWVyLT5zZXRGbGFnKFFHcmFwaGlj
c0l0ZW06Okl0ZW1DbGlwc0NoaWxkcmVuVG9TaGFwZSwgdHJ1ZSk7CkBAIC0xODksNiArMzExLDcg
QEAgdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcihR
R3JhcGhpY3NJdGVtKiBsYXllcikKICAgICB9CiAgICAgY3JlYXRlT3JEZWxldGVPdmVybGF5KCk7
CiB9CisjZW5kaWYKIAogdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjptYXJrRm9yU3lu
Yyhib29sIHNjaGVkdWxlU3luYykKIHsKQEAgLTE5NiwxNCArMzE5LDYgQEAgdm9pZCBQYWdlQ2xp
ZW50UUdyYXBoaWNzV2lkZ2V0OjptYXJrRm9yU3luYyhib29sIHNjaGVkdWxlU3luYykKICAgICBp
ZiAoc2NoZWR1bGVTeW5jKQogICAgICAgICBzeW5jTWV0YU1ldGhvZC5pbnZva2UodmlldywgUXQ6
OlF1ZXVlZENvbm5lY3Rpb24pOwogfQotCi12b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6
OnVwZGF0ZUNvbXBvc2l0aW5nU2Nyb2xsUG9zaXRpb24oKQotewotICAgIGlmIChyb290R3JhcGhp
Y3NMYXllciAmJiBwYWdlICYmIHBhZ2UtPm1haW5GcmFtZSgpKSB7Ci0gICAgICAgIGNvbnN0IFFQ
b2ludCBzY3JvbGxQb3NpdGlvbiA9IHBhZ2UtPm1haW5GcmFtZSgpLT5zY3JvbGxQb3NpdGlvbigp
OwotICAgICAgICByb290R3JhcGhpY3NMYXllci5kYXRhKCktPnNldFBvcygtc2Nyb2xsUG9zaXRp
b24pOwotICAgIH0KLX0KICNlbmRpZgogCiAjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUp
CkBAIC0zMTYsNyArNDMxLDcgQEAgUVJlY3RGIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6Ondp
bmRvd1JlY3QoKSBjb25zdAogICAgIGlmICghdmlldy0+c2NlbmUoKSkKICAgICAgICAgcmV0dXJu
IFFSZWN0RigpOwogCi0gICAgLy8gVGhlIHNjZW5lUmVjdCBpcyBhIGdvb2QgYXBwcm94aW1hdGlv
biBvZiB0aGUgc2l6ZSBvZiB0aGUgYXBwbGljYXRpb24sIGluZGVwZW5kZW50IG9mIHRoZSB2aWV3
LgorICAgIC8vIFRoZSBzY2VuZVJlY3QgaXMgYSBnb29kIGFwcHJveGltYXRpb24gb2YgdGhlIHNp
emUgb2YgdGhlIGFwcGxpY2F0aW9uLCBpbiBkZXBlbmRlbnQgb2YgdGhlIHZpZXcuCiAgICAgcmV0
dXJuIHZpZXctPnNjZW5lKCktPnNjZW5lUmVjdCgpOwogfQogCmRpZmYgLS1naXQgYS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmggYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvUGFnZUNsaWVudFF0LmgKaW5kZXggM2MzMmVjMS4uNTkzOTZkNiAxMDA2NDQKLS0tIGEvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oCisrKyBiL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuaApAQCAtNDMsMTMgKzQzLDIyIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgUGxhdGZvcm1MYXllclByb3h5UXQ7CitjbGFzcyBUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllcjsKKwogY2xhc3MgUGFnZUNsaWVudFFXaWRnZXQgOiBwdWJsaWMg
UVdlYlBhZ2VDbGllbnQgewogcHVibGljOgotICAgIFBhZ2VDbGllbnRRV2lkZ2V0KFFXaWRnZXQq
IHZpZXcpCi0gICAgICAgIDogdmlldyh2aWV3KQorICAgIFBhZ2VDbGllbnRRV2lkZ2V0KFFXaWRn
ZXQqIHYsIFFXZWJQYWdlICpwKQorICAgICAgICA6IHZpZXcodikKKyAgICAgICAgLCBwYWdlKHAp
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIp
CisgICAgICAgICwgc3luY1RpbWVyKHRoaXMsICZQYWdlQ2xpZW50UVdpZGdldDo6c3luY0xheWVy
cykKKyAgICAgICAgLCBwbGF0Zm9ybUxheWVyUHJveHkoMCkKKyNlbmRpZgogICAgIHsKICAgICAg
ICAgUV9BU1NFUlQodmlldyk7CiAgICAgfQorICAgIHZpcnR1YWwgflBhZ2VDbGllbnRRV2lkZ2V0
KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNRV2lkZ2V0Q2xpZW50KCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogCkBAIC03OCw2ICs4NywyMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBRUmVjdEYg
d2luZG93UmVjdCgpIGNvbnN0OwogCiAgICAgUVdpZGdldCogdmlldzsKKyAgICBRV2ViUGFnZSog
cGFnZTsKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVf
TUFQUEVSKQorICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllciogbGF5ZXIpOworICAgIHZpcnR1YWwgdm9pZCBtYXJrRm9yU3luYyhi
b29sIHNjaGVkdWxlU3luYyk7CisgICAgdm9pZCBzeW5jTGF5ZXJzKFRpbWVyPFBhZ2VDbGllbnRR
V2lkZ2V0PiopOworI2VuZGlmCisKKyAgICAvLyBRR3JhcGhpY3NXZWJWaWV3IGNhbiByZW5kZXIg
Y29tcG9zaXRlZCBsYXllcnMKKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIFRpbWVyPFBhZ2VDbGllbnRR
V2lkZ2V0PiBzeW5jVGltZXI7CisgICAgUGxhdGZvcm1MYXllclByb3h5UXQqIHBsYXRmb3JtTGF5
ZXJQcm94eTsKKyNlbmRpZgogfTsKIAogLy8gdGhlIG92ZXJsYXkgaXMgaGVyZSBmb3Igb25lIHJl
YXNvbiBvbmx5OiB0byBoYXZlIHRoZSBzY3JvbGwtYmFycyBhbmQgb3RoZXIKQEAgLTEyMSw2ICsx
NDUsOSBAQCBwdWJsaWM6CiAgICAgICAgICwgcGFnZShwKQogICAgICAgICAsIHZpZXdSZXNpemVz
VG9Db250ZW50cyhmYWxzZSkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaWYg
VVNFKFRFWFRVUkVfTUFQUEVSKQorICAgICAgICAsIHBsYXRmb3JtTGF5ZXJQcm94eSgwKQorI2Vu
ZGlmCiAgICAgICAgICwgc2hvdWxkU3luYyhmYWxzZSkKICNlbmRpZgogICAgICAgICAsIG92ZXJs
YXkoMCkKQEAgLTE2OCw3ICsxOTUsMTEgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgdmlydHVhbCB2b2lkIHNldFJvb3RHcmFwaGljc0xh
eWVyKFFHcmFwaGljc0l0ZW0qIGxheWVyKTsKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAg
dmlydHVhbCB2b2lkIHNldFJvb3RHcmFwaGljc0xheWVyKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyKiBsYXllcik7CisjZWxzZQorICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhpY3NMYXll
cihRR3JhcGhpY3NPYmplY3QqIGxheWVyKTsKKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBtYXJr
Rm9yU3luYyhib29sIHNjaGVkdWxlU3luYyk7CiAgICAgdm9pZCB1cGRhdGVDb21wb3NpdGluZ1Nj
cm9sbFBvc2l0aW9uKCk7CiAgICAgdm9pZCBzeW5jTGF5ZXJzKCk7CkBAIC0xODQsOCArMjE1LDEx
IEBAIHB1YmxpYzoKICAgICBib29sIHZpZXdSZXNpemVzVG9Db250ZW50czsKIAogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgUGxh
dGZvcm1MYXllclByb3h5UXQqIHBsYXRmb3JtTGF5ZXJQcm94eTsKKyNlbHNlCiAgICAgUVdlYWtQ
b2ludGVyPFFHcmFwaGljc09iamVjdD4gcm9vdEdyYXBoaWNzTGF5ZXI7Ci0KKyNlbmRpZgogICAg
IC8vIHdlIGhhdmUgdG8gZmx1c2ggcXVpdGUgb2Z0ZW4sIHNvIHdlIHVzZSBhIG1ldGEtbWV0aG9k
IGluc3RlYWQgb2YgUVRpbWVyOjpzaW5nbGVTaG90IGZvciBwdXR0aW5nIHRoZSBldmVudCBpbiB0
aGUgcXVldWUKICAgICBRTWV0YU1ldGhvZCBzeW5jTWV0YU1ldGhvZDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70365</attachid>
            <date>2010-10-09 12:54:05 -0700</date>
            <delta_ts>2010-10-10 07:20:56 -0700</delta_ts>
            <desc>Patch 5: have QWebFrame render the layer it got from TextureMapper</desc>
            <filename>patch-texmap-rendering.diff</filename>
            <type>text/plain</type>
            <size>6199</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcWdyYXBoaWNzd2Vidmlldy5jcHAgYi9XZWJLaXQv
cXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwCmluZGV4IGM0MzkyOTQuLjc5YTkwMTMgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9xdC9BcGkvcWdyYXBoaWNzd2Vidmlldy5jcHAKKysrIGIvV2ViS2l0L3F0
L0FwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcApAQCAtMjk4LDcgKzI5OCw3IEBAIHZvaWQgUUdyYXBo
aWNzV2ViVmlldzo6cGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTdHlsZU9wdGlvbkdy
YXBoaWNzSXRlbSoKICAgICAgICAgcmV0dXJuOwogICAgIH0gCiAjZW5kaWYKLSNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAm
JiAhVVNFKFRFWFRVUkVfTUFQUEVSKQogICAgIHBhZ2UoKS0+bWFpbkZyYW1lKCktPnJlbmRlcihw
YWludGVyLCBkLT5vdmVybGF5KCkgPyBRV2ViRnJhbWU6OkNvbnRlbnRzTGF5ZXIgOiBRV2ViRnJh
bWU6OkFsbExheWVycywgb3B0aW9uLT5leHBvc2VkUmVjdC50b0FsaWduZWRSZWN0KCkpOwogI2Vs
c2UKICAgICBwYWdlKCktPm1haW5GcmFtZSgpLT5yZW5kZXIocGFpbnRlciwgUVdlYkZyYW1lOjpB
bGxMYXllcnMsIG9wdGlvbi0+ZXhwb3NlZFJlY3QudG9SZWN0KCkpOwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwIGIvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCmlu
ZGV4IDE3OTEwOTYuLjFiZjBmYTAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1l
LmNwcAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKQEAgLTk2LDYgKzk2LDkgQEAK
ICNpbmNsdWRlICJydW50aW1lX29iamVjdC5oIgogI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgog
I2VuZGlmCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2luY2x1ZGUgInRleG1hcC9UZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllci5oIgorI2VuZGlmCiAjaW5jbHVkZSAid3RmL0hhc2hNYXAuaCIK
ICNpbmNsdWRlIDxRTXVsdGlNYXA+CiAjaW5jbHVkZSA8cWRlYnVnLmg+CkBAIC0yOTksNiArMzAy
LDE0IEBAIHZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6cmVuZGVyRnJvbVRpbGVkQmFja2luZ1N0b3Jl
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uCiAKICAgICAgICAgcGFpbnRlci0+cmVzdG9y
ZSgpOwogICAgIH0KKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhU
VVJFX01BUFBFUikKKyAgICAvLyBUZXh0dXJlTWFwcGVyIG1pZ2h0IHVzZSByYXcgT3BlbkdMIHNv
bWUgb3RoZXIgYmFja2VuZC4gT24gcmFzdGVyIHRoaXMgZG9lc24ndCBoYXZlIGFueSBlZmZlY3Qg
YW55d2F5LgorICAgIHBhaW50ZXItPmJlZ2luTmF0aXZlUGFpbnRpbmcoKTsKKyAgICBpZiAocm9v
dEdyYXBoaWNzTGF5ZXIpCisgICAgICAgIHJvb3RHcmFwaGljc0xheWVyLT5wYWludChjb250ZXh0
LCB2aWV3LT5zaXplKCksIHZpZXctPmZyYW1lUmVjdCgpLCBJbnRSZWN0KGNsaXAuYm91bmRpbmdS
ZWN0KCkpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBwYWludGVyLT5vcGFjaXR5KCkpOworICAg
IHBhaW50ZXItPmVuZE5hdGl2ZVBhaW50aW5nKCk7CisgICAgcmVuZGVyUmVsYXRpdmVDb29yZHMo
Y29udGV4dCwgKFFXZWJGcmFtZTo6UmVuZGVyTGF5ZXIpKFFXZWJGcmFtZTo6U2Nyb2xsQmFyTGF5
ZXIgfCBRV2ViRnJhbWU6OlBhbkljb25MYXllciksIGNsaXApOworI2VuZGlmCiB9CiAjZW5kaWYK
IApAQCAtMzE2LDE4ICszMjcsMTggQEAgdm9pZCBRV2ViRnJhbWVQcml2YXRlOjpyZW5kZXJSZWxh
dGl2ZUNvb3JkcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFFXZWJGcmFtZToKICAgICBXZWJD
b3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpOwogICAgIHZpZXctPnVwZGF0ZUxh
eW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUoKTsKIAotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgdmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFFSZWN0JiBjbGlwUmVjdCA9
IHZlY3Rvci5hdChpKTsKKyAgICBpZiAobGF5ZXIgJiBRV2ViRnJhbWU6OkNvbnRlbnRzTGF5ZXIp
IHsKKyAgICAgICAgcGFpbnRlci0+c2F2ZSgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgY29uc3QgUVJlY3QmIGNsaXBSZWN0
ID0gdmVjdG9yLmF0KGkpOwogCi0gICAgICAgIFFSZWN0IGludGVyc2VjdGVkUmVjdCA9IGNsaXBS
ZWN0LmludGVyc2VjdGVkKHZpZXctPmZyYW1lUmVjdCgpKTsKKyAgICAgICAgICAgIFFSZWN0IGlu
dGVyc2VjdGVkUmVjdCA9IGNsaXBSZWN0LmludGVyc2VjdGVkKHZpZXctPmZyYW1lUmVjdCgpKTsK
IAotICAgICAgICBwYWludGVyLT5zYXZlKCk7Ci0gICAgICAgIHBhaW50ZXItPnNldENsaXBSZWN0
KGNsaXBSZWN0LCBRdDo6SW50ZXJzZWN0Q2xpcCk7CisgICAgICAgICAgICBwYWludGVyLT5zZXRD
bGlwUmVjdChjbGlwUmVjdCwgUXQ6OkludGVyc2VjdENsaXApOwogCi0gICAgICAgIGludCB4ID0g
dmlldy0+eCgpOwotICAgICAgICBpbnQgeSA9IHZpZXctPnkoKTsKKyAgICAgICAgICAgIGludCB4
ID0gdmlldy0+eCgpOworICAgICAgICAgICAgaW50IHkgPSB2aWV3LT55KCk7CiAKLSAgICAgICAg
aWYgKGxheWVyICYgUVdlYkZyYW1lOjpDb250ZW50c0xheWVyKSB7CiAgICAgICAgICAgICBjb250
ZXh0LT5zYXZlKCk7CiAKICAgICAgICAgICAgIGludCBzY3JvbGxYID0gdmlldy0+c2Nyb2xsWCgp
OwpAQCAtMzQ0LDI3ICszNTUsNTIgQEAgdm9pZCBRV2ViRnJhbWVQcml2YXRlOjpyZW5kZXJSZWxh
dGl2ZUNvb3JkcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFFXZWJGcmFtZToKIAogICAgICAg
ICAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogICAgICAgICB9CisgICAgICAgIHBhaW50ZXItPnJl
c3RvcmUoKTsKIAotICAgICAgICBpZiAobGF5ZXIgJiBRV2ViRnJhbWU6OlNjcm9sbEJhckxheWVy
Ci0gICAgICAgICAgICAmJiAhdmlldy0+c2Nyb2xsYmFyc1N1cHByZXNzZWQoKQotICAgICAgICAg
ICAgJiYgKHZpZXctPmhvcml6b250YWxTY3JvbGxiYXIoKSB8fCB2aWV3LT52ZXJ0aWNhbFNjcm9s
bGJhcigpKSkgewotICAgICAgICAgICAgY29udGV4dC0+c2F2ZSgpOworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgICAgICBpZiAocm9v
dEdyYXBoaWNzTGF5ZXIgKSB7CisgICAgICAgICAgICBwYWludGVyLT5zYXZlKCk7CisgICAgICAg
ICAgICBwYWludGVyLT5iZWdpbk5hdGl2ZVBhaW50aW5nKCk7CisgICAgICAgICAgICByb290R3Jh
cGhpY3NMYXllci0+cGFpbnQoY29udGV4dCwgdmlldy0+c2l6ZSgpLCB2aWV3LT5mcmFtZVJlY3Qo
KSwgSW50UmVjdChjbGlwLmJvdW5kaW5nUmVjdCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+b3BhY2l0eSgpKTsKKyAgICAgICAgICAgIHBhaW50ZXItPmVuZE5hdGl2ZVBhaW50
aW5nKCk7CisgICAgICAgICAgICBwYWludGVyLT5yZXN0b3JlKCk7CisgICAgICAgIH0KKyNlbmRp
ZgorICAgIH0KKyAgICBpZiAobGF5ZXIgJiAoUVdlYkZyYW1lOjpQYW5JY29uTGF5ZXIgfCBRV2Vi
RnJhbWU6OlNjcm9sbEJhckxheWVyKSkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZl
Y3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgY29uc3QgUVJlY3QmIGNsaXBSZWN0ID0g
dmVjdG9yLmF0KGkpOwogCi0gICAgICAgICAgICBRUmVjdCByZWN0ID0gaW50ZXJzZWN0ZWRSZWN0
OwotICAgICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKHgsIHkpOwotICAgICAgICAgICAgcmVj
dC50cmFuc2xhdGUoLXgsIC15KTsKKyAgICAgICAgICAgIFFSZWN0IGludGVyc2VjdGVkUmVjdCA9
IGNsaXBSZWN0LmludGVyc2VjdGVkKHZpZXctPmZyYW1lUmVjdCgpKTsKIAotICAgICAgICAgICAg
dmlldy0+cGFpbnRTY3JvbGxiYXJzKGNvbnRleHQsIHJlY3QpOworICAgICAgICAgICAgcGFpbnRl
ci0+c2F2ZSgpOworICAgICAgICAgICAgcGFpbnRlci0+c2V0Q2xpcFJlY3QoY2xpcFJlY3QsIFF0
OjpJbnRlcnNlY3RDbGlwKTsKIAotICAgICAgICAgICAgY29udGV4dC0+cmVzdG9yZSgpOwotICAg
ICAgICB9CisgICAgICAgICAgICBpbnQgeCA9IHZpZXctPngoKTsKKyAgICAgICAgICAgIGludCB5
ID0gdmlldy0+eSgpOworCisgICAgICAgICAgICBpZiAobGF5ZXIgJiBRV2ViRnJhbWU6OlNjcm9s
bEJhckxheWVyCisgICAgICAgICAgICAgICAgJiYgIXZpZXctPnNjcm9sbGJhcnNTdXBwcmVzc2Vk
KCkKKyAgICAgICAgICAgICAgICAmJiAodmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpIHx8IHZp
ZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCkpKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2F2
ZSgpOworCisgICAgICAgICAgICAgICAgUVJlY3QgcmVjdCA9IGludGVyc2VjdGVkUmVjdDsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoeCwgeSk7CisgICAgICAgICAgICAgICAg
cmVjdC50cmFuc2xhdGUoLXgsIC15KTsKKworICAgICAgICAgICAgICAgIHZpZXctPnBhaW50U2Ny
b2xsYmFycyhjb250ZXh0LCByZWN0KTsKKworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlc3Rv
cmUoKTsKKyAgICAgICAgICAgIH0KIAogI2lmIEVOQUJMRShQQU5fU0NST0xMSU5HKQotICAgICAg
ICBpZiAobGF5ZXIgJiBRV2ViRnJhbWU6OlBhbkljb25MYXllcikKLSAgICAgICAgICAgIHZpZXct
PnBhaW50UGFuU2Nyb2xsSWNvbihjb250ZXh0KTsKKyAgICAgICAgICAgIGlmIChsYXllciAmIFFX
ZWJGcmFtZTo6UGFuSWNvbkxheWVyKQorICAgICAgICAgICAgICAgIHZpZXctPnBhaW50UGFuU2Ny
b2xsSWNvbihjb250ZXh0KTsKICNlbmRpZgogCi0gICAgICAgIHBhaW50ZXItPnJlc3RvcmUoKTsK
KyAgICAgICAgICAgIHBhaW50ZXItPnJlc3RvcmUoKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApk
aWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5k
ZXggMzQ4ZWZlMC4uNjgyZTIyNCAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0NoYW5nZUxvZworKysg
Yi9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTAtMTAtMDkgIE5vJ2Ft
IFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVGV4bWFwXSBbUXRdIFRleHR1cmUgbWFw
cGVyIGluaXRpYWwgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ3MDcwCisKKyAgICAgICAgQWxsb3cgcmVuZGVyaW5nIG9mIGFj
Y2VsZXJhdGVkLWNvbXBvc2l0aW5nIHdpdGggVGV4dHVyZU1hcHBlciwgaW5zaWRlIGEgUVdlYkZy
YW1lLiBUaGUgZnJhbWUgd2lsbCByZW5kZXIgdGhlIHJlZ3VsYXIgY29udGVudCwKKyAgICAgICAg
ZWl0aGVyIG5vcm1hbGx5IG9yIHRocm91Z2ggdGlsZWQgYmFja2luZ3N0b3JlLCB0aGVuIGxldCB0
aGUgVGV4dHVyZU1hcHBlciBsYXllciByZW5kZXIgaXRzZWxmIHRvIHRoZSBhY3RpdmUgY29udGV4
dCwgYW5kCisgICAgICAgIHRoZW4gcmVuZGVyIHRoZSBzY3JvbGxiYXIgYW5kIHBhbiBpY29uLiBU
aGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB3aGljaCB1
c2VzIGFkZGl0aW9uYWwgUUdyYXBoaWNzSXRlbXMgZm9yIEFDCisgICAgICAgIGFuZCB0aGUgc2Ny
b2xsYmFyIG92ZXJsYXkuCisKKyAgICAgICAgKiBBcGkvcWdyYXBoaWNzd2Vidmlldy5jcHA6Cisg
ICAgICAgIChRR3JhcGhpY3NXZWJWaWV3OjpwYWludCk6CisgICAgICAgICogQXBpL3F3ZWJmcmFt
ZS5jcHA6CisgICAgICAgIChRV2ViRnJhbWVQcml2YXRlOjpyZW5kZXJGcm9tVGlsZWRCYWNraW5n
U3RvcmUpOgorICAgICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6cmVuZGVyUmVsYXRpdmVDb29yZHMp
OgorCiAyMDEwLTEwLTAzICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCg==
</data>
<flag name="review"
          id="60206"
          type_id="1"
          status="-"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70374</attachid>
            <date>2010-10-09 14:42:55 -0700</date>
            <delta_ts>2010-10-14 09:53:16 -0700</delta_ts>
            <desc>Patch 2: stub for media layer implementation.</desc>
            <filename>patch-texmap-media.diff</filename>
            <type>text/plain</type>
            <size>5577</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OGM0YzcyYS4uODAzMmM5MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMC0xMC0wOSAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5p
dGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDcwNzAKKworICAgICAgICBUaGlzIHBhdGNoIGVuYWJsZXMgY29tcGlsYXRp
b24gb2YgVGV4dHVyZU1hcHBlciB3aXRoIE1lZGlhLiBJdCBoYXMgYW4gaW5pdGlhbCBub24td29y
a2luZyBpbXBsZW1lbnRhdGlvbiBvZiBhIHZpZGVvIGxheWVyLCB0byBiZSBpbnRlZ3JhdGVkCisg
ICAgICAgIG9uY2Ugb3RoZXIgcGFydHMgb2YgVGV4dHVyZU1hcHBlciBhcmUgZnVsbHkgd29ya2lu
Zy4KKworICAgICAgICBObyBuZXcgdGVzdHM6IHRoaXMgaXMgbmV3IGltcGxlbWVudGF0aW9uIHRo
YXQncyBub3QgZW5hYmxlZCB5ZXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9N
ZWRpYVBsYXllclByaXZhdGVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
VmlkZW9MYXllclF0OjpUZXh0dXJlTWFwcGVyVmlkZW9MYXllclF0KToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJWaWRlb0xheWVyUXQ6OnNldFBsYXRmb3JtTGF5ZXJDbGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclZpZGVvTGF5ZXJRdDo6cGFpbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclZpZGVvTGF5ZXJRdDo6c2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRdDo6YWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnBsYXRm
b3JtTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJp
dmF0ZVF0Lmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRdDo6c3VwcG9y
dHNBY2NlbGVyYXRlZFJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVRdDo6YWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnBsYXRmb3JtTGF5ZXIpOgorCiAyMDEwLTEwLTA1
ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwCmluZGV4IGZkYjAyYWQuLjlmNGE4
MGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQ
cml2YXRlUXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5
ZXJQcml2YXRlUXQuY3BwCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8UVBhaW50ZXI+CiAj
aW5jbHVkZSA8UVBvaW50PgogI2luY2x1ZGUgPFFSZWN0PgorI2luY2x1ZGUgPFFTdHlsZU9wdGlv
bkdyYXBoaWNzSXRlbT4KICNpbmNsdWRlIDxRVGltZT4KICNpbmNsdWRlIDxRVGltZXI+CiAjaW5j
bHVkZSA8UVVybD4KQEAgLTUwLDYgKzUxLDEwIEBACiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgi
CisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNjAxLDcgKzYwNiw0MSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpyZXBhaW50KCkK
ICAgICBtX3dlYkNvcmVQbGF5ZXItPnJlcGFpbnQoKTsKIH0KIAotI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShU
RVhUVVJFX01BUFBFUikKKworY2xhc3MgVGV4dHVyZU1hcHBlclZpZGVvTGF5ZXJRdCA6IHB1Ymxp
YyB2aXJ0dWFsIFRleHR1cmVNYXBwZXJWaWRlb0xheWVyIHsKK3B1YmxpYzoKKyAgICBUZXh0dXJl
TWFwcGVyVmlkZW9MYXllclF0KFFHcmFwaGljc1ZpZGVvSXRlbSogdmlkZW9JdGVtKQorICAgICAg
ICA6IG1fdmlkZW9JdGVtKHZpZGVvSXRlbSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIHNldFBsYXRmb3JtTGF5ZXJDbGllbnQoVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50KiBjbGll
bnQpCisgICAgeworICAgICAgICBtX2NsaWVudCA9IGNsaWVudDsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAg
aWYgKCFtX3ZpZGVvSXRlbSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBRU3R5bGVP
cHRpb25HcmFwaGljc0l0ZW0gb3B0OworICAgICAgICBvcHQuZXhwb3NlZFJlY3QgPSBtX3ZpZGVv
SXRlbS5kYXRhKCktPnNjZW5lQm91bmRpbmdSZWN0KCk7CisgICAgICAgIG9wdC5yZWN0ID0gb3B0
LmV4cG9zZWRSZWN0LnRvUmVjdCgpOworICAgICAgICBtX3ZpZGVvSXRlbS5kYXRhKCktPnBhaW50
KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCAmb3B0KTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IEludFNpemUgc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92aWRlb0l0ZW0g
PyBJbnRTaXplKG1fdmlkZW9JdGVtLmRhdGEoKS0+c2l6ZSgpLndpZHRoKCksIG1fdmlkZW9JdGVt
LmRhdGEoKS0+c2l6ZSgpLmhlaWdodCgpKSA6IEludFNpemUoKTsKKyAgICB9CisKKyAgICBRV2Vh
a1BvaW50ZXI8UUdyYXBoaWNzVmlkZW9JdGVtPiBtX3ZpZGVvSXRlbTsKKyAgICBUZXh0dXJlTWFw
cGVyTGF5ZXJDbGllbnQqIG1fY2xpZW50OworfTsKKworCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZVF0OjphY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpCiB7CiAgICAgTWVkaWFQbGF5
ZXJDbGllbnQqIGNsaWVudCA9IG1fd2ViQ29yZVBsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKTsK
QEAgLTYxMSwxNCArNjUwLDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OmFjY2VsZXJh
dGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCkKIAogICAgIG1fY29tcG9zaXRlZCA9IGNvbXBvc2l0
ZWQ7CiAgICAgaWYgKGNvbXBvc2l0ZWQpCi0gICAgICAgIG1fdmlkZW9TY2VuZS0+cmVtb3ZlSXRl
bShtX3ZpZGVvSXRlbSk7Ci0gICAgZWxzZQotICAgICAgICBtX3ZpZGVvU2NlbmUtPmFkZEl0ZW0o
bV92aWRlb0l0ZW0pOworICAgICAgICBtX3BsYXRmb3JtTGF5ZXIgPSBuZXcgVGV4dHVyZU1hcHBl
clZpZGVvTGF5ZXJRdChtX3ZpZGVvSXRlbSk7CiB9CiAKIFBsYXRmb3JtTGF5ZXIqIE1lZGlhUGxh
eWVyUHJpdmF0ZVF0OjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb21w
b3NpdGVkID8gbV92aWRlb0l0ZW0gOiAwOworICAgIHJldHVybiBtX2NvbXBvc2l0ZWQgPyBtX3Bs
YXRmb3JtTGF5ZXIuZ2V0KCkgOiAwOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaAppbmRleCBiYTg1ZjhmLi45
M2M5ZDFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxh
eWVyUHJpdmF0ZVF0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBs
YXllclByaXZhdGVRdC5oCkBAIC0zMyw2ICszMyw4IEBAIFFUX0VORF9OQU1FU1BBQ0UKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBUZXh0dXJlTWFwcGVyVmlkZW9MYXllcjsKKwogY2xh
c3MgTWVkaWFQbGF5ZXJQcml2YXRlUXQgOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIE1lZGlhUGxh
eWVyUHJpdmF0ZUludGVyZmFjZSB7CiAKICAgICBRX09CSkVDVApAQCAtOTEsMTIgKzkzLDE4IEBA
IHB1YmxpYzoKICAgICBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaWYgVVNFKFRFWFRV
UkVfTUFQUEVSKQogICAgIC8vIHdoZXRoZXIgYWNjZWxlcmF0ZWQgcmVuZGVyaW5nIGlzIHN1cHBv
cnRlZCBieSB0aGUgbWVkaWEgZW5naW5lIGZvciB0aGUgY3VycmVudCBtZWRpYS4KICAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KICAgICAvLyBjYWxsZWQgd2hlbiB0aGUgcmVuZGVyaW5nIHN5c3RlbSBmbGlwcyB0aGUg
aW50byBvciBvdXQgb2YgYWNjZWxlcmF0ZWQgcmVuZGVyaW5nIG1vZGUuCiAgICAgdmlydHVhbCB2
b2lkIGFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCk7CiAgICAgLy8gcmV0dXJucyBh
biBvYmplY3QgdGhhdCBjYW4gYmUgZGlyZWN0bHkgY29tcG9zaXRlZCB2aWEgR3JhcGhpY3NMYXll
clF0IChlc3NlbnRpYWxseSBhIFFHcmFwaGljc0l0ZW0qKQogICAgIHZpcnR1YWwgUGxhdGZvcm1M
YXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OworI2Vsc2UKKyAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dmlydHVhbCB2b2lkIGFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCkgeyB9CisgICAg
dmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gMDsg
fQorI2VuZGlmCiAjZW5kaWYKIAogICAgIHZpcnR1YWwgUGxhdGZvcm1NZWRpYSBwbGF0Zm9ybU1l
ZGlhKCkgY29uc3Q7CkBAIC0xMjUsNiArMTMzLDkgQEAgcHJpdmF0ZToKICAgICBRTWVkaWFQbGF5
ZXJDb250cm9sKiBtX21lZGlhUGxheWVyQ29udHJvbDsKICAgICBRR3JhcGhpY3NWaWRlb0l0ZW0q
IG1fdmlkZW9JdGVtOwogICAgIFFHcmFwaGljc1NjZW5lKiBtX3ZpZGVvU2NlbmU7CisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgT3du
UHRyPFRleHR1cmVNYXBwZXJWaWRlb0xheWVyPiBtX3BsYXRmb3JtTGF5ZXI7CisjZW5kaWYKIAog
ICAgIG11dGFibGUgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBtX25ldHdvcmtTdGF0ZTsKICAg
ICBtdXRhYmxlIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70377</attachid>
            <date>2010-10-09 15:25:52 -0700</date>
            <delta_ts>2010-10-10 07:15:41 -0700</delta_ts>
            <desc>Patch 4: glue layer (PageClientQt) opt-in for TextureMapper</desc>
            <filename>patch-texmap-glue-2.diff</filename>
            <type>text/plain</type>
            <size>18062</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OGM0YzcyYS4uNGZkNjVmZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0xMC0wOSAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5p
dGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDcwNzAKKworICAgICAgICBHbHVlIGxheWVyIChXZWJDb3JlU3VwcG9ydCkg
Y2hhbmdlcyB0byBhbGxvdyBjb25uZWN0aW5nIFRleHR1cmVNYXBwZXIgdG8gYSBRdCBQYWdlQ2xp
ZW50LCBpLmUuCisgICAgICAgIGEgUVdlYlZpZXcgb3IgYSBRR3JhcGhpY3NXZWJWaWV3LiBUaGlz
IGVuYWJsZXMgdGhlIG5ldyB0eXBlLCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciwgdG8gYmUg
cmVjb2duaXplZCBib3RoIGJ5CisgICAgICAgIHRoZSBjb21wb3NpdG9yIGFuZCBieSB0aGUgcGFn
ZSBjbGllbnQuCisgICAgICAgIE5vdGUgdGhhdCB0aGlzIGlzIHRlbXBvcmFyaWx5IGFuIG9wdC1p
biwgdW5kZXIgVVNFKFRFWFRVUkVfTUFQUEVSKQorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gV0lQ
IG9uIGEgbmV3IGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NMYXllci5oOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50Lmg6
CisgICAgICAgIChRV2ViUGFnZUNsaWVudDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIpOgorCiAyMDEw
LTEwLTA1ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NMYXllci5oCmluZGV4IGFkNGQwNTYuLmM4MTUxMWQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCkBAIC01NywxMSArNTcsMTcgQEAgdHlwZWRl
ZiBXS0NBQ0ZMYXllciBQbGF0Zm9ybUxheWVyOwogdHlwZWRlZiB2b2lkKiBOYXRpdmVMYXllcjsK
IH0KICNlbGlmIFBMQVRGT1JNKFFUKQotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBRR3JhcGhp
Y3NJdGVtOwotUVRfRU5EX05BTUVTUEFDRQotdHlwZWRlZiBRR3JhcGhpY3NJdGVtIFBsYXRmb3Jt
TGF5ZXI7Ci10eXBlZGVmIFFHcmFwaGljc0l0ZW0qIE5hdGl2ZUxheWVyOworI2lmIFVTRShURVhU
VVJFX01BUFBFUikKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyOwordHlwZWRlZiBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciBQbGF0Zm9ybUxh
eWVyOwordHlwZWRlZiBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogTmF0aXZlTGF5ZXI7Cit9
OworI2Vsc2UKK2NsYXNzIFFHcmFwaGljc09iamVjdDsKK3R5cGVkZWYgUUdyYXBoaWNzT2JqZWN0
IFBsYXRmb3JtTGF5ZXI7Cit0eXBlZGVmIFFHcmFwaGljc09iamVjdCogTmF0aXZlTGF5ZXI7Cisj
ZW5kaWYKICNlbGlmIFBMQVRGT1JNKENIUk9NSVVNKQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgTGF5ZXJDaHJvbWl1bTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVdlYlBh
Z2VDbGllbnQuaCBiL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVdlYlBhZ2VDbGllbnQuaAppbmRleCA5
MzAxY2Q1Li4zOGNlODYzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FXZWJQYWdl
Q2xpZW50LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oCkBAIC0z
Miw4ICszMiwxNSBAQAogCiAjaW5jbHVkZSA8UVJlY3Q+CiAKKyNpZiBVU0UoVEVYVFVSRV9NQVBQ
RVIpCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
cjsKK307CisjZWxzZQorY2xhc3MgUUdyYXBoaWNzT2JqZWN0OworI2VuZGlmCisKIFFUX0JFR0lO
X05BTUVTUEFDRQotY2xhc3MgUUdyYXBoaWNzSXRlbTsKIGNsYXNzIFFTdHlsZTsKIFFUX0VORF9O
QU1FU1BBQ0UKIApAQCAtNDksNyArNTYsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBp
bnB1dE1ldGhvZEVuYWJsZWQoKSBjb25zdCA9IDA7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogICAgIC8vIHRoaXMgZ2V0cyBjYWxsZWQgd2hlbiB3ZSBzdGFydC9zdG9wIGNvbXBv
c2l0aW5nLgotICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihRR3JhcGhpY3NJ
dGVtKiBsYXllcikge30KKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgdmlydHVhbCB2b2lk
IHNldFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
KiBsYXllcikgeyB9CisjZWxzZQorICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhpY3NMYXll
cihRR3JhcGhpY3NPYmplY3QqIGxheWVyKSB7IH0KKyNlbmRpZgogCiAgICAgLy8gdGhpcyBnZXRz
IGNhbGxlZCB3aGVuIHRoZSBjb21wb3NpdG9yIHdhbnRzIHVzIHRvIHN5bmMgdGhlIGxheWVycwog
ICAgIC8vIGlmIHNjaGVkdWxlU3luYyBpcyB0cnVlLCB3ZSBzY2hlZHVsZSBhIHN5bmMgb3Vyc2Vs
dmVzLiBvdGhlcndpc2UsCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5oIGIv
V2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuaAppbmRleCBlNzhmYjA3Li5hNTk4YTU2IDEwMDY0NAot
LS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5oCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYmZy
YW1lLmgKQEAgLTU2LDYgKzU2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFdp
ZGdldFByaXZhdGU7CiAgICAgY2xhc3MgRnJhbWVMb2FkZXJDbGllbnRRdDsKICAgICBjbGFzcyBD
aHJvbWVDbGllbnRRdDsKKyAgICBjbGFzcyBQbGF0Zm9ybUxheWVyUHJveHlRdDsKIH0KIGNsYXNz
IFFXZWJGcmFtZURhdGE7CiBjbGFzcyBRV2ViSGl0VGVzdFJlc3VsdFByaXZhdGU7CkBAIC0yMzEs
NiArMjMyLDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6V2lkZ2V0UHJp
dmF0ZTsKICAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDsKICAg
ICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ7CisgICAgZnJpZW5kIGNsYXNz
IFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXJQcm94eVF0OwogICAgIFFXZWJGcmFtZVByaXZhdGUgKmQ7
CiB9OwogCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmggYi9XZWJLaXQv
cXQvQXBpL3F3ZWJmcmFtZV9wLmgKaW5kZXggNWJhM2Y1Mi4uMjAzNGU0ZCAxMDA2NDQKLS0tIGEv
V2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1l
X3AuaApAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRnJh
bWVWaWV3OwogICAgIGNsYXNzIEhUTUxGcmFtZU93bmVyRWxlbWVudDsKICAgICBjbGFzcyBTY3Jv
bGxiYXI7CisgICAgY2xhc3MgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjsKIH0KIGNsYXNzIFFX
ZWJQYWdlOwogCkBAIC03Miw2ICs3Myw5IEBAIHB1YmxpYzoKICAgICAgICAgLCBhbGxvd3NTY3Jv
bGxpbmcodHJ1ZSkKICAgICAgICAgLCBtYXJnaW5XaWR0aCgtMSkKICAgICAgICAgLCBtYXJnaW5I
ZWlnaHQoLTEpCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVS
RV9NQVBQRVIpCisgICAgICAgICwgcm9vdEdyYXBoaWNzTGF5ZXIoMCkKKyNlbmRpZgogICAgICAg
ICAsIHpvb21UZXh0T25seShmYWxzZSkKICAgICAgICAge30KICAgICB2b2lkIGluaXQoUVdlYkZy
YW1lKiBxZnJhbWUsIFFXZWJGcmFtZURhdGEqIGZyYW1lRGF0YSk7CkBAIC0xMDIsNiArMTA2LDkg
QEAgcHVibGljOgogICAgIGJvb2wgYWxsb3dzU2Nyb2xsaW5nOwogICAgIGludCBtYXJnaW5XaWR0
aDsKICAgICBpbnQgbWFyZ2luSGVpZ2h0OworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDb250
ZW50TGF5ZXIqIHJvb3RHcmFwaGljc0xheWVyOworI2VuZGlmCiAgICAgYm9vbCB6b29tVGV4dE9u
bHk7CiB9OwogCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcCBiL1dlYktp
dC9xdC9BcGkvcXdlYnBhZ2UuY3BwCmluZGV4IDE0Mzk0NjguLmY2YjY3NTQgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2Uu
Y3BwCkBAIC0xOTgzLDcgKzE5ODMsNyBAQCB2b2lkIFFXZWJQYWdlOjpzZXRWaWV3KFFXaWRnZXQq
IHZpZXcpCiAgICAgfQogCiAgICAgaWYgKHZpZXcpCi0gICAgICAgIGQtPmNsaWVudCA9IG5ldyBQ
YWdlQ2xpZW50UVdpZGdldCh2aWV3KTsKKyAgICAgICAgZC0+Y2xpZW50ID0gbmV3IFBhZ2VDbGll
bnRRV2lkZ2V0KHZpZXcsIHRoaXMpOwogfQogCiAvKiEKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9D
aGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDM0OGVmZTAuLmMyZmQ2ZTAgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDQ2IEBACisyMDEwLTEwLTA5ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2Vu
dGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW1RleG1hcF0gW1F0XSBUZXh0dXJlIG1hcHBlciBpbml0aWFsIGltcGxlbWVudGF0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzA3
MAorCisKKyAgICAgICAgR2x1ZSBsYXllciAoV2ViQ29yZVN1cHBvcnQpIGNoYW5nZXMgdG8gYWxs
b3cgY29ubmVjdGluZyBUZXh0dXJlTWFwcGVyIHRvIGEgUXQgUGFnZUNsaWVudCwgaS5lLgorICAg
ICAgICBhIFFXZWJWaWV3IG9yIGEgUUdyYXBoaWNzV2ViVmlldy4gVGhpcyBlbmFibGVzIHRoZSBu
ZXcgdHlwZSwgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIsIHRvIGJlIHJlY29nbml6ZWQgYm90
aCBieQorICAgICAgICB0aGUgY29tcG9zaXRvciBhbmQgYnkgdGhlIHBhZ2UgY2xpZW50LgorICAg
ICAgICBOb3RlIHRoYXQgdGhpcyBpcyB0ZW1wb3JhcmlseSBhbiBvcHQtaW4sIHVuZGVyIFVTRShU
RVhUVVJFX01BUFBFUikKKworICAgICAgICAqIEFwaS9xd2ViZnJhbWUuaDoKKyAgICAgICAgKiBB
cGkvcXdlYmZyYW1lX3AuaDoKKyAgICAgICAgKFFXZWJGcmFtZVByaXZhdGU6OlFXZWJGcmFtZVBy
aXZhdGUpOgorICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFnZTo6
c2V0Vmlldyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVy
KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1MYXllclByb3h5UXQ6OlBsYXRmb3JtTGF5ZXJQcm94eVF0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXJQcm94eVF0Ojp+UGxhdGZvcm1MYXllclByb3h5
UXQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1MYXllclByb3h5UXQ6OmV2ZW50RmlsdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXJQcm94eVF0OjpzZXROZWVkc0Rpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1MYXllclByb3h5UXQ6OnNldE5lZWRzRGlz
cGxheUluUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUxheWVyUHJveHlRdDo6c2V0
U2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFXaWRnZXQ6OnNldFJv
b3RHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRV2lkZ2V0Ojpt
YXJrRm9yU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UVdpZGdldDo6c3luY0xh
eWVycyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UVdpZGdldDo6flBhZ2VDbGllbnRR
V2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6On5Q
YWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRR
R3JhcGhpY3NXaWRnZXQ6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdy
YXBoaWNzV2lkZ2V0Ojp1cGRhdGVDb21wb3NpdGluZ1Njcm9sbFBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OmNyZWF0ZU9yRGVsZXRlT3Zlcmxh
eSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290
R3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lk
Z2V0OjptYXJrRm9yU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNz
V2lkZ2V0Ojp3aW5kb3dSZWN0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50
UXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRV2lkZ2V0OjpQYWdlQ2xpZW50UVdp
ZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UVdpZGdldDo6YWxsb3dzQWNjZWxl
cmF0ZWRDb21wb3NpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNz
V2lkZ2V0OjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0KToKKwogMjAxMC0xMC0wMyAgTm8nYW0g
Um9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudFF0LmNwcCBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRRdC5jcHAKaW5kZXggOWZiYzVlNS4uMmY1M2RjZiAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAorKysgYi9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllclF0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NMYXllci5oIgogI2VuZGlmCiAjaW5jbHVkZSAiR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xp
ZW50UXQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCkBAIC01OTAsNyArNTkwLDcgQEAg
dm9pZCBDaHJvbWVDbGllbnRRdDo6Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZv
ckZyYW1lKEZyYW1lKiBmcmFtZSwgR2UKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OmF0dGFjaFJvb3RH
cmFwaGljc0xheWVyKEZyYW1lKiBmcmFtZSwgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikK
IHsKICAgICBpZiAocGxhdGZvcm1QYWdlQ2xpZW50KCkpCi0gICAgICAgIHBsYXRmb3JtUGFnZUNs
aWVudCgpLT5zZXRSb290R3JhcGhpY3NMYXllcihncmFwaGljc0xheWVyID8gZ3JhcGhpY3NMYXll
ci0+bmF0aXZlTGF5ZXIoKSA6IDApOworICAgICAgICBwbGF0Zm9ybVBhZ2VDbGllbnQoKS0+c2V0
Um9vdEdyYXBoaWNzTGF5ZXIoZ3JhcGhpY3NMYXllciA/IGdyYXBoaWNzTGF5ZXItPnBsYXRmb3Jt
TGF5ZXIoKSA6IDApOwogfQogCiB2b2lkIENocm9tZUNsaWVudFF0OjpzZXROZWVkc09uZVNob3RE
cmF3aW5nU3luY2hyb25pemF0aW9uKCkKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9QYWdlQ2xpZW50UXQuY3BwIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGll
bnRRdC5jcHAKaW5kZXggOWYxMTQ5Ni4uNzg2MGYzMyAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAKKysrIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1BhZ2VDbGllbnRRdC5jcHAKQEAgLTIxLDEyICsyMSw5OSBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogCiAjaW5jbHVkZSAiUGFnZUNsaWVudFF0LmgiCisjaW5jbHVkZSAidGV4bWFwL1RleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCiAKICNpZiBkZWZpbmVkKFFfV1NfWDExKQogI2luY2x1
ZGUgPFFYMTFJbmZvPgogI2VuZGlmCiAKKyNpZmRlZiBRVF9PUEVOR0xfTElCCisjaW5jbHVkZSA8
UUdMV2lkZ2V0PgorI2VuZGlmCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCitjbGFzcyBQbGF0Zm9ybUxh
eWVyUHJveHlRdCA6IHB1YmxpYyBRT2JqZWN0LCBwdWJsaWMgdmlydHVhbCBUZXh0dXJlTWFwcGVy
TGF5ZXJDbGllbnQgeworcHVibGljOgorICAgIFBsYXRmb3JtTGF5ZXJQcm94eVF0KFFXZWJGcmFt
ZSogZnJhbWUsIFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIqIGxheWVyLCBRV2lkZ2V0KiB3aWRn
ZXQgPSAwLCBRR3JhcGhpY3NPYmplY3QqIGdyYXBoaWNzT2JqZWN0ID0gMCkKKyAgICAgICAgOiBR
T2JqZWN0KHdpZGdldCA/IChRT2JqZWN0Kil3aWRnZXQgOiAoUU9iamVjdCopZ3JhcGhpY3NPYmpl
Y3QpCisgICAgICAgICwgbV93aWRnZXQod2lkZ2V0KQorICAgICAgICAsIG1fZ3JhcGhpY3NJdGVt
KGdyYXBoaWNzT2JqZWN0KQorICAgICAgICAsIG1fZnJhbWUoZnJhbWUpCisgICAgICAgICwgbV9s
YXllcihsYXllcikKKyAgICB7CisgICAgICAgIGlmIChtX2xheWVyKQorICAgICAgICAgICAgbV9s
YXllci0+c2V0UGxhdGZvcm1MYXllckNsaWVudCh0aGlzKTsKKyAgICAgICAgbV9mcmFtZS0+ZC0+
cm9vdEdyYXBoaWNzTGF5ZXIgPSBtX2xheWVyOworICAgICAgICBpZiAobV93aWRnZXQpCisgICAg
ICAgICAgICBtX3dpZGdldC0+aW5zdGFsbEV2ZW50RmlsdGVyKHRoaXMpOworICAgIH0KKworICAg
IH5QbGF0Zm9ybUxheWVyUHJveHlRdCgpCisgICAgeworICAgICAgICBpZiAobV9sYXllcikKKyAg
ICAgICAgICAgIG1fbGF5ZXItPnNldFBsYXRmb3JtTGF5ZXJDbGllbnQoMCk7CisgICAgICAgIGlm
IChtX2ZyYW1lLT5kKQorICAgICAgICAgICAgbV9mcmFtZS0+ZC0+cm9vdEdyYXBoaWNzTGF5ZXIg
PSAwOworICAgIH0KKworICAgIC8vIFdlIGRvbid0IHdhbnQgYSBodWdlIHJlZ2lvbi1jbGlwIG9u
IHRoZSBjb21wb3NpdGluZyBsYXllcnM7IGluc3RlYWQgd2UgdW5pdGUgdGhlIHJlY3RhbmdsZXMg
dG9nZXRoZXIKKyAgICAvLyBhbmQgY2xlYXIgdGhlbSB3aGVuIHRoZSBwYWludCBhY3R1YWxseSBv
Y2N1cnMuCisgICAgYm9vbCBldmVudEZpbHRlcihRT2JqZWN0KiBvYmplY3QsIFFFdmVudCogZXZl
bnQpCisgICAgeworICAgICAgICBpZiAob2JqZWN0ID09IG1fd2lkZ2V0ICYmIGV2ZW50LT50eXBl
KCkgPT0gUUV2ZW50OjpQYWludCkKKyAgICAgICAgICAgIG1fZGlydHlSZWN0ID0gUVJlY3QoKTsK
KyAgICAgICAgcmV0dXJuIFFPYmplY3Q6OmV2ZW50RmlsdGVyKG9iamVjdCwgZXZlbnQpOworICAg
IH0KKworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCkKKyAgICB7CisgICAgICAgIGlmIChtX3dp
ZGdldCkKKyAgICAgICAgICAgIG1fd2lkZ2V0LT51cGRhdGUoKTsKKyAgICAgICAgZWxzZSBpZiAo
bV9ncmFwaGljc0l0ZW0pCisgICAgICAgICAgICBtX2dyYXBoaWNzSXRlbS0+dXBkYXRlKCk7Cisg
ICAgfQorCisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCkKKyAgICB7CisgICAgICAgIGlmIChtX2dyYXBoaWNzSXRlbSkgeworICAgICAgICAgICAgbV9n
cmFwaGljc0l0ZW0tPnVwZGF0ZShRUmVjdEYocmVjdCkpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIG1fZGlydHlSZWN0IHw9IHJlY3Q7CisgICAgICAgIG1fd2lkZ2V0
LT51cGRhdGUobV9kaXJ0eVJlY3QpOworICAgIH0KKworICAgIHZvaWQgc2V0U2l6ZUNoYW5nZWQo
Y29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKKyAgICB7CisgICAgfQorCisgICAgUVJlY3QgbV9kaXJ0
eVJlY3Q7CisgICAgUVdpZGdldCogbV93aWRnZXQ7CisgICAgUUdyYXBoaWNzSXRlbSogbV9ncmFw
aGljc0l0ZW07CisgICAgUVdlYkZyYW1lKiBtX2ZyYW1lOworICAgIFRleHR1cmVNYXBwZXJDb250
ZW50TGF5ZXIqIG1fbGF5ZXI7Cit9OworCit2b2lkIFBhZ2VDbGllbnRRV2lkZ2V0OjpzZXRSb290
R3JhcGhpY3NMYXllcihUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogbGF5ZXIpCit7CisgICAg
aWYgKGxheWVyKSB7CisgICAgICAgIHBsYXRmb3JtTGF5ZXJQcm94eSA9IG5ldyBQbGF0Zm9ybUxh
eWVyUHJveHlRdChwYWdlLT5tYWluRnJhbWUoKSwgc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckNv
bnRlbnRMYXllcio+KGxheWVyKSwgdmlldyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
ZGVsZXRlIHBsYXRmb3JtTGF5ZXJQcm94eTsKKyAgICBwbGF0Zm9ybUxheWVyUHJveHkgPSAwOwor
fQorCit2b2lkIFBhZ2VDbGllbnRRV2lkZ2V0OjptYXJrRm9yU3luYyhib29sIHNjaGVkdWxlU3lu
YykKK3sKKyAgICBzeW5jVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIFBhZ2VDbGll
bnRRV2lkZ2V0OjpzeW5jTGF5ZXJzKFRpbWVyPFBhZ2VDbGllbnRRV2lkZ2V0PiopCit7CisgICAg
UVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShwYWdlLT5tYWluRnJhbWUoKSktPnZpZXcoKS0+c3luY0Nv
bXBvc2l0aW5nU3RhdGVSZWN1cnNpdmUoKTsKK30KKyNlbmRpZgogCiB2b2lkIFBhZ2VDbGllbnRR
V2lkZ2V0OjpzY3JvbGwoaW50IGR4LCBpbnQgZHksIGNvbnN0IFFSZWN0JiByZWN0VG9TY3JvbGwp
CiB7CkBAIC0xMDMsMjMgKzE5MCwyNyBAQCBRUmVjdEYgUGFnZUNsaWVudFFXaWRnZXQ6OndpbmRv
d1JlY3QoKSBjb25zdAogICAgIHJldHVybiBRUmVjdEYodmlldy0+d2luZG93KCktPmdlb21ldHJ5
KCkpOwogfQogCitQYWdlQ2xpZW50UVdpZGdldDo6flBhZ2VDbGllbnRRV2lkZ2V0KCkKK3sKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyAg
ICBkZWxldGUgcGxhdGZvcm1MYXllclByb3h5OworI2VuZGlmCit9CisKIFBhZ2VDbGllbnRRR3Jh
cGhpY3NXaWRnZXQ6On5QYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0KCkKIHsKLSAgICBkZWxldGUg
b3ZlcmxheTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKCFyb290
R3JhcGhpY3NMYXllcikKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIHdlIGRvbid0IG5lZWQgdG8g
ZGVsZXRlIHRoZSByb290IGdyYXBoaWNzIGxheWVyLiBUaGUgbGlmZWN5Y2xlIGlzIG1hbmFnZWQg
aW4gR3JhcGhpY3NMYXllclF0LmNwcC4KLSAgICByb290R3JhcGhpY3NMYXllci5kYXRhKCktPnNl
dFBhcmVudEl0ZW0oMCk7Ci0gICAgdmlldy0+c2NlbmUoKS0+cmVtb3ZlSXRlbShyb290R3JhcGhp
Y3NMYXllci5kYXRhKCkpOworICAgIGRlbGV0ZSBvdmVybGF5OworI2lmIFVTRShURVhUVVJFX01B
UFBFUikKKyAgICBkZWxldGUgcGxhdGZvcm1MYXllclByb3h5OworI2VuZGlmCiAjZW5kaWYKIH0K
IAogdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzY3JvbGwoaW50IGR4LCBpbnQgZHks
IGNvbnN0IFFSZWN0JiByZWN0VG9TY3JvbGwpCiB7CiAgICAgdmlldy0+c2Nyb2xsKHFyZWFsKGR4
KSwgcXJlYWwoZHkpLCByZWN0VG9TY3JvbGwpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgIVVTRShURVhUVVJF
X01BUFBFUikKICAgICB1cGRhdGVDb21wb3NpdGluZ1Njcm9sbFBvc2l0aW9uKCk7CiAjZW5kaWYK
IH0KQEAgLTEzOCw4ICsyMjksMjEgQEAgdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojp1
cGRhdGUoY29uc3QgUVJlY3QmIGRpcnR5UmVjdCkKICNlbmRpZgogfQogCit2b2lkIFBhZ2VDbGll
bnRRR3JhcGhpY3NXaWRnZXQ6OnVwZGF0ZUNvbXBvc2l0aW5nU2Nyb2xsUG9zaXRpb24oKQorewor
Ly8gVGhpcyBpcyBub3QgbmVlZGVkIGluIHRleHR1cmUtbWFwcGVyLCBiZWNhdXNlIHdlIGdldCB0
aGUgc2Nyb2xsIHBvc2l0aW9uIGZyb20gdGhlIFFQYWludGVyLgorI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykgJiYgIVVTRShURVhUVVJFX01BUFBFUikKKyAgICBpZiAocm9vdEdyYXBo
aWNzTGF5ZXIgJiYgcGFnZSAmJiBwYWdlLT5tYWluRnJhbWUoKSkgeworICAgICAgICBjb25zdCBR
UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSBwYWdlLT5tYWluRnJhbWUoKS0+c2Nyb2xsUG9zaXRpb24o
KTsKKyAgICAgICAgcm9vdEdyYXBoaWNzTGF5ZXIuZGF0YSgpLT5zZXRQb3MoLXNjcm9sbFBvc2l0
aW9uKTsKKyAgICB9CisjZW5kaWYKK30KKwogdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0
OjpjcmVhdGVPckRlbGV0ZU92ZXJsYXkoKQogeworICAgIC8vIFdlIGRvbid0IHVzZSBhbiBvdmVy
bGF5IHdpdGggVGV4dHVyZU1hcHBlci4gSW5zdGVhZCwgdGhlIG92ZXJsYXkgaXMgZHJhd24gaW5z
aWRlIFFXZWJGcmFtZS4KKyNpZiAhVVNFKFRFWFRVUkVfTUFQUEVSKQogICAgIGJvb2wgdXNlT3Zl
cmxheSA9IGZhbHNlOwogICAgIGlmICghdmlld1Jlc2l6ZXNUb0NvbnRlbnRzKSB7CiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtMTYwLDYgKzI2NCw3IEBAIHZvaWQgUGFnZUNs
aWVudFFHcmFwaGljc1dpZGdldDo6Y3JlYXRlT3JEZWxldGVPdmVybGF5KCkKICAgICAgICAgb3Zl
cmxheS0+ZGVsZXRlTGF0ZXIoKTsKICAgICAgICAgb3ZlcmxheSA9IDA7CiAgICAgfQorI2VuZGlm
IC8vICFVU0UoVEVYVFVSRV9NQVBQRVIpCiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCkBAIC0xNzEsNyArMjc2LDE4IEBAIHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdl
dDo6c3luY0xheWVycygpCiAgICAgfQogfQogCi12b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRn
ZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKFFHcmFwaGljc0l0ZW0qIGxheWVyKQorI2lmIFVTRShU
RVhUVVJFX01BUFBFUikKK3ZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9vdEdy
YXBoaWNzTGF5ZXIoVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIGxheWVyKQoreworICAgIGlm
IChsYXllcikgeworICAgICAgICBwbGF0Zm9ybUxheWVyUHJveHkgPSBuZXcgUGxhdGZvcm1MYXll
clByb3h5UXQocGFnZS0+bWFpbkZyYW1lKCksIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJDb250
ZW50TGF5ZXIqPihsYXllciksIDAsIHZpZXcpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGRlbGV0ZSBwbGF0Zm9ybUxheWVyUHJveHk7CisgICAgcGxhdGZvcm1MYXllclByb3h5ID0gMDsK
K30KKyNlbHNlCit2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNldFJvb3RHcmFwaGlj
c0xheWVyKFFHcmFwaGljc09iamVjdCogbGF5ZXIpCiB7CiAgICAgaWYgKHJvb3RHcmFwaGljc0xh
eWVyKSB7CiAgICAgICAgIHJvb3RHcmFwaGljc0xheWVyLmRhdGEoKS0+c2V0UGFyZW50SXRlbSgw
KTsKQEAgLTE3OSw3ICsyOTUsNyBAQCB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNl
dFJvb3RHcmFwaGljc0xheWVyKFFHcmFwaGljc0l0ZW0qIGxheWVyKQogICAgICAgICBRV2ViRnJh
bWVQcml2YXRlOjpjb3JlKHBhZ2UtPm1haW5GcmFtZSgpKS0+dmlldygpLT5zeW5jQ29tcG9zaXRp
bmdTdGF0ZVJlY3Vyc2l2ZSgpOwogICAgIH0KIAotICAgIHJvb3RHcmFwaGljc0xheWVyID0gbGF5
ZXIgPyBsYXllci0+dG9HcmFwaGljc09iamVjdCgpIDogMDsKKyAgICByb290R3JhcGhpY3NMYXll
ciA9IGxheWVyOwogCiAgICAgaWYgKGxheWVyKSB7CiAgICAgICAgIGxheWVyLT5zZXRGbGFnKFFH
cmFwaGljc0l0ZW06Okl0ZW1DbGlwc0NoaWxkcmVuVG9TaGFwZSwgdHJ1ZSk7CkBAIC0xODksNiAr
MzA1LDcgQEAgdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NM
YXllcihRR3JhcGhpY3NJdGVtKiBsYXllcikKICAgICB9CiAgICAgY3JlYXRlT3JEZWxldGVPdmVy
bGF5KCk7CiB9CisjZW5kaWYKIAogdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjptYXJr
Rm9yU3luYyhib29sIHNjaGVkdWxlU3luYykKIHsKQEAgLTE5NiwxNCArMzEzLDYgQEAgdm9pZCBQ
YWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjptYXJrRm9yU3luYyhib29sIHNjaGVkdWxlU3luYykK
ICAgICBpZiAoc2NoZWR1bGVTeW5jKQogICAgICAgICBzeW5jTWV0YU1ldGhvZC5pbnZva2Uodmll
dywgUXQ6OlF1ZXVlZENvbm5lY3Rpb24pOwogfQotCi12b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NX
aWRnZXQ6OnVwZGF0ZUNvbXBvc2l0aW5nU2Nyb2xsUG9zaXRpb24oKQotewotICAgIGlmIChyb290
R3JhcGhpY3NMYXllciAmJiBwYWdlICYmIHBhZ2UtPm1haW5GcmFtZSgpKSB7Ci0gICAgICAgIGNv
bnN0IFFQb2ludCBzY3JvbGxQb3NpdGlvbiA9IHBhZ2UtPm1haW5GcmFtZSgpLT5zY3JvbGxQb3Np
dGlvbigpOwotICAgICAgICByb290R3JhcGhpY3NMYXllci5kYXRhKCktPnNldFBvcygtc2Nyb2xs
UG9zaXRpb24pOwotICAgIH0KLX0KICNlbmRpZgogCiAjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdf
U1RPUkUpCkBAIC0zMTYsNyArNDI1LDcgQEAgUVJlY3RGIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRn
ZXQ6OndpbmRvd1JlY3QoKSBjb25zdAogICAgIGlmICghdmlldy0+c2NlbmUoKSkKICAgICAgICAg
cmV0dXJuIFFSZWN0RigpOwogCi0gICAgLy8gVGhlIHNjZW5lUmVjdCBpcyBhIGdvb2QgYXBwcm94
aW1hdGlvbiBvZiB0aGUgc2l6ZSBvZiB0aGUgYXBwbGljYXRpb24sIGluZGVwZW5kZW50IG9mIHRo
ZSB2aWV3LgorICAgIC8vIFRoZSBzY2VuZVJlY3QgaXMgYSBnb29kIGFwcHJveGltYXRpb24gb2Yg
dGhlIHNpemUgb2YgdGhlIGFwcGxpY2F0aW9uLCBpbiBkZXBlbmRlbnQgb2YgdGhlIHZpZXcuCiAg
ICAgcmV0dXJuIHZpZXctPnNjZW5lKCktPnNjZW5lUmVjdCgpOwogfQogCmRpZmYgLS1naXQgYS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmggYi9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvUGFnZUNsaWVudFF0LmgKaW5kZXggM2MzMmVjMS4uNTkzOTZkNiAxMDA2NDQKLS0t
IGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oCisrKyBiL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuaApAQCAtNDMsMTMgKzQzLDIyIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgUGxhdGZvcm1MYXllclByb3h5UXQ7CitjbGFzcyBU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcjsKKwogY2xhc3MgUGFnZUNsaWVudFFXaWRnZXQgOiBw
dWJsaWMgUVdlYlBhZ2VDbGllbnQgewogcHVibGljOgotICAgIFBhZ2VDbGllbnRRV2lkZ2V0KFFX
aWRnZXQqIHZpZXcpCi0gICAgICAgIDogdmlldyh2aWV3KQorICAgIFBhZ2VDbGllbnRRV2lkZ2V0
KFFXaWRnZXQqIHYsIFFXZWJQYWdlICpwKQorICAgICAgICA6IHZpZXcodikKKyAgICAgICAgLCBw
YWdlKHApCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9N
QVBQRVIpCisgICAgICAgICwgc3luY1RpbWVyKHRoaXMsICZQYWdlQ2xpZW50UVdpZGdldDo6c3lu
Y0xheWVycykKKyAgICAgICAgLCBwbGF0Zm9ybUxheWVyUHJveHkoMCkKKyNlbmRpZgogICAgIHsK
ICAgICAgICAgUV9BU1NFUlQodmlldyk7CiAgICAgfQorICAgIHZpcnR1YWwgflBhZ2VDbGllbnRR
V2lkZ2V0KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNRV2lkZ2V0Q2xpZW50KCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogCkBAIC03OCw2ICs4NywyMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBR
UmVjdEYgd2luZG93UmVjdCgpIGNvbnN0OwogCiAgICAgUVdpZGdldCogdmlldzsKKyAgICBRV2Vi
UGFnZSogcGFnZTsKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRF
WFRVUkVfTUFQUEVSKQorICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllciogbGF5ZXIpOworICAgIHZpcnR1YWwgdm9pZCBtYXJrRm9y
U3luYyhib29sIHNjaGVkdWxlU3luYyk7CisgICAgdm9pZCBzeW5jTGF5ZXJzKFRpbWVyPFBhZ2VD
bGllbnRRV2lkZ2V0PiopOworI2VuZGlmCisKKyAgICAvLyBRR3JhcGhpY3NXZWJWaWV3IGNhbiBy
ZW5kZXIgY29tcG9zaXRlZCBsYXllcnMKKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIFRpbWVyPFBhZ2VD
bGllbnRRV2lkZ2V0PiBzeW5jVGltZXI7CisgICAgUGxhdGZvcm1MYXllclByb3h5UXQqIHBsYXRm
b3JtTGF5ZXJQcm94eTsKKyNlbmRpZgogfTsKIAogLy8gdGhlIG92ZXJsYXkgaXMgaGVyZSBmb3Ig
b25lIHJlYXNvbiBvbmx5OiB0byBoYXZlIHRoZSBzY3JvbGwtYmFycyBhbmQgb3RoZXIKQEAgLTEy
MSw2ICsxNDUsOSBAQCBwdWJsaWM6CiAgICAgICAgICwgcGFnZShwKQogICAgICAgICAsIHZpZXdS
ZXNpemVzVG9Db250ZW50cyhmYWxzZSkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgICAgICAsIHBsYXRmb3JtTGF5ZXJQcm94eSgw
KQorI2VuZGlmCiAgICAgICAgICwgc2hvdWxkU3luYyhmYWxzZSkKICNlbmRpZgogICAgICAgICAs
IG92ZXJsYXkoMCkKQEAgLTE2OCw3ICsxOTUsMTEgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgdmlydHVhbCB2b2lkIHNldFJvb3RHcmFw
aGljc0xheWVyKFFHcmFwaGljc0l0ZW0qIGxheWVyKTsKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIp
CisgICAgdmlydHVhbCB2b2lkIHNldFJvb3RHcmFwaGljc0xheWVyKFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyKiBsYXllcik7CisjZWxzZQorICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhp
Y3NMYXllcihRR3JhcGhpY3NPYmplY3QqIGxheWVyKTsKKyNlbmRpZgogICAgIHZpcnR1YWwgdm9p
ZCBtYXJrRm9yU3luYyhib29sIHNjaGVkdWxlU3luYyk7CiAgICAgdm9pZCB1cGRhdGVDb21wb3Np
dGluZ1Njcm9sbFBvc2l0aW9uKCk7CiAgICAgdm9pZCBzeW5jTGF5ZXJzKCk7CkBAIC0xODQsOCAr
MjE1LDExIEBAIHB1YmxpYzoKICAgICBib29sIHZpZXdSZXNpemVzVG9Db250ZW50czsKIAogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisg
ICAgUGxhdGZvcm1MYXllclByb3h5UXQqIHBsYXRmb3JtTGF5ZXJQcm94eTsKKyNlbHNlCiAgICAg
UVdlYWtQb2ludGVyPFFHcmFwaGljc09iamVjdD4gcm9vdEdyYXBoaWNzTGF5ZXI7Ci0KKyNlbmRp
ZgogICAgIC8vIHdlIGhhdmUgdG8gZmx1c2ggcXVpdGUgb2Z0ZW4sIHNvIHdlIHVzZSBhIG1ldGEt
bWV0aG9kIGluc3RlYWQgb2YgUVRpbWVyOjpzaW5nbGVTaG90IGZvciBwdXR0aW5nIHRoZSBldmVu
dCBpbiB0aGUgcXVldWUKICAgICBRTWV0YU1ldGhvZCBzeW5jTWV0YU1ldGhvZDsKIAo=
</data>
<flag name="review"
          id="60219"
          type_id="1"
          status="-"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70401</attachid>
            <date>2010-10-10 07:15:41 -0700</date>
            <delta_ts>2010-10-25 10:42:59 -0700</delta_ts>
            <desc>Patch 4: glue layer (PageClientQt) opt-in for TextureMapper</desc>
            <filename>patch-texmap-glue-3.diff</filename>
            <type>text/plain</type>
            <size>19063</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OGM0YzcyYS4uNGZkNjVmZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0xMC0wOSAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5p
dGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDcwNzAKKworICAgICAgICBHbHVlIGxheWVyIChXZWJDb3JlU3VwcG9ydCkg
Y2hhbmdlcyB0byBhbGxvdyBjb25uZWN0aW5nIFRleHR1cmVNYXBwZXIgdG8gYSBRdCBQYWdlQ2xp
ZW50LCBpLmUuCisgICAgICAgIGEgUVdlYlZpZXcgb3IgYSBRR3JhcGhpY3NXZWJWaWV3LiBUaGlz
IGVuYWJsZXMgdGhlIG5ldyB0eXBlLCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciwgdG8gYmUg
cmVjb2duaXplZCBib3RoIGJ5CisgICAgICAgIHRoZSBjb21wb3NpdG9yIGFuZCBieSB0aGUgcGFn
ZSBjbGllbnQuCisgICAgICAgIE5vdGUgdGhhdCB0aGlzIGlzIHRlbXBvcmFyaWx5IGFuIG9wdC1p
biwgdW5kZXIgVVNFKFRFWFRVUkVfTUFQUEVSKQorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gV0lQ
IG9uIGEgbmV3IGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NMYXllci5oOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50Lmg6
CisgICAgICAgIChRV2ViUGFnZUNsaWVudDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIpOgorCiAyMDEw
LTEwLTA1ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NMYXllci5oCmluZGV4IGFkNGQwNTYuLmM4MTUxMWQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCkBAIC01NywxMSArNTcsMTcgQEAgdHlwZWRl
ZiBXS0NBQ0ZMYXllciBQbGF0Zm9ybUxheWVyOwogdHlwZWRlZiB2b2lkKiBOYXRpdmVMYXllcjsK
IH0KICNlbGlmIFBMQVRGT1JNKFFUKQotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBRR3JhcGhp
Y3NJdGVtOwotUVRfRU5EX05BTUVTUEFDRQotdHlwZWRlZiBRR3JhcGhpY3NJdGVtIFBsYXRmb3Jt
TGF5ZXI7Ci10eXBlZGVmIFFHcmFwaGljc0l0ZW0qIE5hdGl2ZUxheWVyOworI2lmIFVTRShURVhU
VVJFX01BUFBFUikKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyOwordHlwZWRlZiBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciBQbGF0Zm9ybUxh
eWVyOwordHlwZWRlZiBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogTmF0aXZlTGF5ZXI7Cit9
OworI2Vsc2UKK2NsYXNzIFFHcmFwaGljc09iamVjdDsKK3R5cGVkZWYgUUdyYXBoaWNzT2JqZWN0
IFBsYXRmb3JtTGF5ZXI7Cit0eXBlZGVmIFFHcmFwaGljc09iamVjdCogTmF0aXZlTGF5ZXI7Cisj
ZW5kaWYKICNlbGlmIFBMQVRGT1JNKENIUk9NSVVNKQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgTGF5ZXJDaHJvbWl1bTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVdlYlBh
Z2VDbGllbnQuaCBiL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVdlYlBhZ2VDbGllbnQuaAppbmRleCA5
MzAxY2Q1Li4zOGNlODYzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FXZWJQYWdl
Q2xpZW50LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oCkBAIC0z
Miw4ICszMiwxNSBAQAogCiAjaW5jbHVkZSA8UVJlY3Q+CiAKKyNpZiBVU0UoVEVYVFVSRV9NQVBQ
RVIpCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
cjsKK307CisjZWxzZQorY2xhc3MgUUdyYXBoaWNzT2JqZWN0OworI2VuZGlmCisKIFFUX0JFR0lO
X05BTUVTUEFDRQotY2xhc3MgUUdyYXBoaWNzSXRlbTsKIGNsYXNzIFFTdHlsZTsKIFFUX0VORF9O
QU1FU1BBQ0UKIApAQCAtNDksNyArNTYsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBp
bnB1dE1ldGhvZEVuYWJsZWQoKSBjb25zdCA9IDA7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogICAgIC8vIHRoaXMgZ2V0cyBjYWxsZWQgd2hlbiB3ZSBzdGFydC9zdG9wIGNvbXBv
c2l0aW5nLgotICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihRR3JhcGhpY3NJ
dGVtKiBsYXllcikge30KKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgdmlydHVhbCB2b2lk
IHNldFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
KiBsYXllcikgeyB9CisjZWxzZQorICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhpY3NMYXll
cihRR3JhcGhpY3NPYmplY3QqIGxheWVyKSB7IH0KKyNlbmRpZgogCiAgICAgLy8gdGhpcyBnZXRz
IGNhbGxlZCB3aGVuIHRoZSBjb21wb3NpdG9yIHdhbnRzIHVzIHRvIHN5bmMgdGhlIGxheWVycwog
ICAgIC8vIGlmIHNjaGVkdWxlU3luYyBpcyB0cnVlLCB3ZSBzY2hlZHVsZSBhIHN5bmMgb3Vyc2Vs
dmVzLiBvdGhlcndpc2UsCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5oIGIv
V2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuaAppbmRleCBlNzhmYjA3Li5hNTk4YTU2IDEwMDY0NAot
LS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5oCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYmZy
YW1lLmgKQEAgLTU2LDYgKzU2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFdp
ZGdldFByaXZhdGU7CiAgICAgY2xhc3MgRnJhbWVMb2FkZXJDbGllbnRRdDsKICAgICBjbGFzcyBD
aHJvbWVDbGllbnRRdDsKKyAgICBjbGFzcyBQbGF0Zm9ybUxheWVyUHJveHlRdDsKIH0KIGNsYXNz
IFFXZWJGcmFtZURhdGE7CiBjbGFzcyBRV2ViSGl0VGVzdFJlc3VsdFByaXZhdGU7CkBAIC0yMzEs
NiArMjMyLDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6V2lkZ2V0UHJp
dmF0ZTsKICAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDsKICAg
ICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ7CisgICAgZnJpZW5kIGNsYXNz
IFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXJQcm94eVF0OwogICAgIFFXZWJGcmFtZVByaXZhdGUgKmQ7
CiB9OwogCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmggYi9XZWJLaXQv
cXQvQXBpL3F3ZWJmcmFtZV9wLmgKaW5kZXggNWJhM2Y1Mi4uMjAzNGU0ZCAxMDA2NDQKLS0tIGEv
V2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1l
X3AuaApAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRnJh
bWVWaWV3OwogICAgIGNsYXNzIEhUTUxGcmFtZU93bmVyRWxlbWVudDsKICAgICBjbGFzcyBTY3Jv
bGxiYXI7CisgICAgY2xhc3MgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjsKIH0KIGNsYXNzIFFX
ZWJQYWdlOwogCkBAIC03Miw2ICs3Myw5IEBAIHB1YmxpYzoKICAgICAgICAgLCBhbGxvd3NTY3Jv
bGxpbmcodHJ1ZSkKICAgICAgICAgLCBtYXJnaW5XaWR0aCgtMSkKICAgICAgICAgLCBtYXJnaW5I
ZWlnaHQoLTEpCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVS
RV9NQVBQRVIpCisgICAgICAgICwgcm9vdEdyYXBoaWNzTGF5ZXIoMCkKKyNlbmRpZgogICAgICAg
ICAsIHpvb21UZXh0T25seShmYWxzZSkKICAgICAgICAge30KICAgICB2b2lkIGluaXQoUVdlYkZy
YW1lKiBxZnJhbWUsIFFXZWJGcmFtZURhdGEqIGZyYW1lRGF0YSk7CkBAIC0xMDIsNiArMTA2LDkg
QEAgcHVibGljOgogICAgIGJvb2wgYWxsb3dzU2Nyb2xsaW5nOwogICAgIGludCBtYXJnaW5XaWR0
aDsKICAgICBpbnQgbWFyZ2luSGVpZ2h0OworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDb250
ZW50TGF5ZXIqIHJvb3RHcmFwaGljc0xheWVyOworI2VuZGlmCiAgICAgYm9vbCB6b29tVGV4dE9u
bHk7CiB9OwogCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcCBiL1dlYktp
dC9xdC9BcGkvcXdlYnBhZ2UuY3BwCmluZGV4IDE0Mzk0NjguLmY2YjY3NTQgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2Uu
Y3BwCkBAIC0xOTgzLDcgKzE5ODMsNyBAQCB2b2lkIFFXZWJQYWdlOjpzZXRWaWV3KFFXaWRnZXQq
IHZpZXcpCiAgICAgfQogCiAgICAgaWYgKHZpZXcpCi0gICAgICAgIGQtPmNsaWVudCA9IG5ldyBQ
YWdlQ2xpZW50UVdpZGdldCh2aWV3KTsKKyAgICAgICAgZC0+Y2xpZW50ID0gbmV3IFBhZ2VDbGll
bnRRV2lkZ2V0KHZpZXcsIHRoaXMpOwogfQogCiAvKiEKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9D
aGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDM0OGVmZTAuLmMyZmQ2ZTAgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDQ2IEBACisyMDEwLTEwLTA5ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2Vu
dGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW1RleG1hcF0gW1F0XSBUZXh0dXJlIG1hcHBlciBpbml0aWFsIGltcGxlbWVudGF0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzA3
MAorCisKKyAgICAgICAgR2x1ZSBsYXllciAoV2ViQ29yZVN1cHBvcnQpIGNoYW5nZXMgdG8gYWxs
b3cgY29ubmVjdGluZyBUZXh0dXJlTWFwcGVyIHRvIGEgUXQgUGFnZUNsaWVudCwgaS5lLgorICAg
ICAgICBhIFFXZWJWaWV3IG9yIGEgUUdyYXBoaWNzV2ViVmlldy4gVGhpcyBlbmFibGVzIHRoZSBu
ZXcgdHlwZSwgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIsIHRvIGJlIHJlY29nbml6ZWQgYm90
aCBieQorICAgICAgICB0aGUgY29tcG9zaXRvciBhbmQgYnkgdGhlIHBhZ2UgY2xpZW50LgorICAg
ICAgICBOb3RlIHRoYXQgdGhpcyBpcyB0ZW1wb3JhcmlseSBhbiBvcHQtaW4sIHVuZGVyIFVTRShU
RVhUVVJFX01BUFBFUikKKworICAgICAgICAqIEFwaS9xd2ViZnJhbWUuaDoKKyAgICAgICAgKiBB
cGkvcXdlYmZyYW1lX3AuaDoKKyAgICAgICAgKFFXZWJGcmFtZVByaXZhdGU6OlFXZWJGcmFtZVBy
aXZhdGUpOgorICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFnZTo6
c2V0Vmlldyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVy
KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1MYXllclByb3h5UXQ6OlBsYXRmb3JtTGF5ZXJQcm94eVF0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXJQcm94eVF0Ojp+UGxhdGZvcm1MYXllclByb3h5
UXQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1MYXllclByb3h5UXQ6OmV2ZW50RmlsdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXJQcm94eVF0OjpzZXROZWVkc0Rpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1MYXllclByb3h5UXQ6OnNldE5lZWRzRGlz
cGxheUluUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUxheWVyUHJveHlRdDo6c2V0
U2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFXaWRnZXQ6OnNldFJv
b3RHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRV2lkZ2V0Ojpt
YXJrRm9yU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UVdpZGdldDo6c3luY0xh
eWVycyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UVdpZGdldDo6flBhZ2VDbGllbnRR
V2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6On5Q
YWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRR
R3JhcGhpY3NXaWRnZXQ6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdy
YXBoaWNzV2lkZ2V0Ojp1cGRhdGVDb21wb3NpdGluZ1Njcm9sbFBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OmNyZWF0ZU9yRGVsZXRlT3Zlcmxh
eSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290
R3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lk
Z2V0OjptYXJrRm9yU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNz
V2lkZ2V0Ojp3aW5kb3dSZWN0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50
UXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRV2lkZ2V0OjpQYWdlQ2xpZW50UVdp
ZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UVdpZGdldDo6YWxsb3dzQWNjZWxl
cmF0ZWRDb21wb3NpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNz
V2lkZ2V0OjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0KToKKwogMjAxMC0xMC0wMyAgTm8nYW0g
Um9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudFF0LmNwcCBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRRdC5jcHAKaW5kZXggOWZiYzVlNS4uMmY1M2RjZiAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAorKysgYi9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllclF0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NMYXllci5oIgogI2VuZGlmCiAjaW5jbHVkZSAiR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xp
ZW50UXQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCkBAIC01OTAsNyArNTkwLDcgQEAg
dm9pZCBDaHJvbWVDbGllbnRRdDo6Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZv
ckZyYW1lKEZyYW1lKiBmcmFtZSwgR2UKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OmF0dGFjaFJvb3RH
cmFwaGljc0xheWVyKEZyYW1lKiBmcmFtZSwgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikK
IHsKICAgICBpZiAocGxhdGZvcm1QYWdlQ2xpZW50KCkpCi0gICAgICAgIHBsYXRmb3JtUGFnZUNs
aWVudCgpLT5zZXRSb290R3JhcGhpY3NMYXllcihncmFwaGljc0xheWVyID8gZ3JhcGhpY3NMYXll
ci0+bmF0aXZlTGF5ZXIoKSA6IDApOworICAgICAgICBwbGF0Zm9ybVBhZ2VDbGllbnQoKS0+c2V0
Um9vdEdyYXBoaWNzTGF5ZXIoZ3JhcGhpY3NMYXllciA/IGdyYXBoaWNzTGF5ZXItPnBsYXRmb3Jt
TGF5ZXIoKSA6IDApOwogfQogCiB2b2lkIENocm9tZUNsaWVudFF0OjpzZXROZWVkc09uZVNob3RE
cmF3aW5nU3luY2hyb25pemF0aW9uKCkKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9QYWdlQ2xpZW50UXQuY3BwIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGll
bnRRdC5jcHAKaW5kZXggOWYxMTQ5Ni4uMTE4MmI4NiAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAKKysrIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1BhZ2VDbGllbnRRdC5jcHAKQEAgLTIxLDEzICsyMSwxMjggQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKIAogI2luY2x1ZGUgIlBhZ2VDbGllbnRRdC5oIgorI2luY2x1ZGUgInRleG1hcC9UZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgogCiAjaWYgZGVmaW5lZChRX1dTX1gxMSkKICNpbmNs
dWRlIDxRWDExSW5mbz4KICNlbmRpZgogCisjaWZkZWYgUVRfT1BFTkdMX0xJQgorI2luY2x1ZGUg
PFFHTFdpZGdldD4KKyNlbmRpZgogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpICAgIAorY2xhc3MgUGxh
dGZvcm1MYXllclByb3h5UXQgOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIHZpcnR1YWwgVGV4dHVy
ZU1hcHBlckxheWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBQbGF0Zm9ybUxheWVyUHJveHlRdChR
V2ViRnJhbWUqIGZyYW1lLCBUZXh0dXJlTWFwcGVyQ29udGVudExheWVyKiBsYXllciwgUU9iamVj
dCogb2JqZWN0KQorICAgICAgICA6IFFPYmplY3Qob2JqZWN0KQorICAgICAgICAsIG1fZnJhbWUo
ZnJhbWUpCisgICAgICAgICwgbV9sYXllcihsYXllcikKKyAgICB7CisgICAgICAgIGlmIChtX2xh
eWVyKQorICAgICAgICAgICAgbV9sYXllci0+c2V0UGxhdGZvcm1MYXllckNsaWVudCh0aGlzKTsK
KyAgICAgICAgbV9mcmFtZS0+ZC0+cm9vdEdyYXBoaWNzTGF5ZXIgPSBtX2xheWVyOworICAgIH0K
KworICAgIHZpcnR1YWwgflBsYXRmb3JtTGF5ZXJQcm94eVF0KCkKKyAgICB7CisgICAgICAgIGlm
IChtX2xheWVyKQorICAgICAgICAgICAgbV9sYXllci0+c2V0UGxhdGZvcm1MYXllckNsaWVudCgw
KTsKKyAgICAgICAgaWYgKG1fZnJhbWUtPmQpCisgICAgICAgICAgICBtX2ZyYW1lLT5kLT5yb290
R3JhcGhpY3NMYXllciA9IDA7CisgICAgfQorCisgICAgdm9pZCBzZXRTaXplQ2hhbmdlZChjb25z
dCBJbnRTaXplJiBuZXdTaXplKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUVdlYkZy
YW1lKiBtX2ZyYW1lOworICAgIFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIqIG1fbGF5ZXI7Cit9
OworCitjbGFzcyBQbGF0Zm9ybUxheWVyUHJveHlRV2lkZ2V0IDogcHVibGljIFBsYXRmb3JtTGF5
ZXJQcm94eVF0IHsKK3B1YmxpYzoKKyAgICBQbGF0Zm9ybUxheWVyUHJveHlRV2lkZ2V0KFFXZWJG
cmFtZSogZnJhbWUsIFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIqIGxheWVyLCBRV2lkZ2V0KiB3
aWRnZXQpCisgICAgICAgIDogUGxhdGZvcm1MYXllclByb3h5UXQoZnJhbWUsIGxheWVyLCB3aWRn
ZXQpCisgICAgICAgICwgbV93aWRnZXQod2lkZ2V0KQorICAgIHsKKyAgICAgICAgaWYgKG1fd2lk
Z2V0KQorICAgICAgICAgICAgbV93aWRnZXQtPmluc3RhbGxFdmVudEZpbHRlcih0aGlzKTsKKyAg
ICB9CisKKyAgICAvLyBXZSBkb24ndCB3YW50IGEgaHVnZSByZWdpb24tY2xpcCBvbiB0aGUgY29t
cG9zaXRpbmcgbGF5ZXJzOyBpbnN0ZWFkIHdlIHVuaXRlIHRoZSByZWN0YW5nbGVzIHRvZ2V0aGVy
CisgICAgLy8gYW5kIGNsZWFyIHRoZW0gd2hlbiB0aGUgcGFpbnQgYWN0dWFsbHkgb2NjdXJzLgor
ICAgIGJvb2wgZXZlbnRGaWx0ZXIoUU9iamVjdCogb2JqZWN0LCBRRXZlbnQqIGV2ZW50KQorICAg
IHsKKyAgICAgICAgaWYgKG9iamVjdCA9PSBtX3dpZGdldCAmJiBldmVudC0+dHlwZSgpID09IFFF
dmVudDo6UGFpbnQpCisgICAgICAgICAgICBtX2RpcnR5UmVjdCA9IFFSZWN0KCk7CisgICAgICAg
IHJldHVybiBRT2JqZWN0OjpldmVudEZpbHRlcihvYmplY3QsIGV2ZW50KTsKKyAgICB9CisKKyAg
ICB2b2lkIHNldE5lZWRzRGlzcGxheSgpCisgICAgeworICAgICAgICBpZiAobV93aWRnZXQpCisg
ICAgICAgICAgICBtX3dpZGdldC0+dXBkYXRlKCk7CisgICAgfQorCisgICAgdm9pZCBzZXROZWVk
c0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIG1fZGly
dHlSZWN0IHw9IHJlY3Q7CisgICAgICAgIG1fd2lkZ2V0LT51cGRhdGUobV9kaXJ0eVJlY3QpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBRUmVjdCBtX2RpcnR5UmVjdDsKKyAgICBRV2lkZ2V0KiBt
X3dpZGdldDsKK307CisKK2NsYXNzIFBsYXRmb3JtTGF5ZXJQcm94eVFHcmFwaGljc09iamVjdCA6
IHB1YmxpYyBQbGF0ZnJvbUxheWVyUHJveHlRdCB7CitwdWJsaWM6CisgICAgUGxhdGZvcm1MYXll
clByb3h5UUdyYXBoaWNzV2lkZ2V0KFFXZWJGcmFtZSogZnJhbWUsIFRleHR1cmVNYXBwZXJDb250
ZW50TGF5ZXIqIGxheWVyLCBRR3JhcGhpY3NPYmplY3QqIG9iamVjdCkKKyAgICAgICAgOiBRT2Jq
ZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX2dyYXBoaWNzSXRlbShncmFwaGljc09iamVjdCkKKyAg
ICB7CisgICAgfQorCisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKQorICAgIHsKKyAgICAgICAg
aWYgKG1fZ3JhcGhpY3NJdGVtKQorICAgICAgICAgICAgbV9ncmFwaGljc0l0ZW0tPnVwZGF0ZSgp
OworICAgIH0KKworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QpCisgICAgeworICAgICAgICBpZiAobV9ncmFwaGljc0l0ZW0pCisgICAgICAgICAgICBt
X2dyYXBoaWNzSXRlbS0+dXBkYXRlKFFSZWN0RihyZWN0KSk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIFFHcmFwaGljc0l0ZW0qIG1fZ3JhcGhpY3NJdGVtOworfTsKKwordm9pZCBQYWdlQ2xpZW50
UVdpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIq
IGxheWVyKQoreworICAgIGlmIChsYXllcikgeworICAgICAgICBwbGF0Zm9ybUxheWVyUHJveHkg
PSBuZXcgUGxhdGZvcm1MYXllclByb3h5UVdpZGdldChwYWdlLT5tYWluRnJhbWUoKSwgc3RhdGlj
X2Nhc3Q8VGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcio+KGxheWVyKSwgdmlldyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgZGVsZXRlIHBsYXRmb3JtTGF5ZXJQcm94eTsKKyAgICBwbGF0
Zm9ybUxheWVyUHJveHkgPSAwOworfQorCit2b2lkIFBhZ2VDbGllbnRRV2lkZ2V0OjptYXJrRm9y
U3luYyhib29sIHNjaGVkdWxlU3luYykKK3sKKyAgICBzeW5jVGltZXIuc3RhcnRPbmVTaG90KDAp
OworfQorCit2b2lkIFBhZ2VDbGllbnRRV2lkZ2V0OjpzeW5jTGF5ZXJzKFRpbWVyPFBhZ2VDbGll
bnRRV2lkZ2V0PiopCit7CisgICAgUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShwYWdlLT5tYWluRnJh
bWUoKSktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVSZWN1cnNpdmUoKTsKK30KKyNlbmRp
ZgorCiB2b2lkIFBhZ2VDbGllbnRRV2lkZ2V0OjpzY3JvbGwoaW50IGR4LCBpbnQgZHksIGNvbnN0
IFFSZWN0JiByZWN0VG9TY3JvbGwpCiB7CiAgICAgdmlldy0+c2Nyb2xsKHFyZWFsKGR4KSwgcXJl
YWwoZHkpLCByZWN0VG9TY3JvbGwpOwpAQCAtMTAzLDIzICsyMTgsMjcgQEAgUVJlY3RGIFBhZ2VD
bGllbnRRV2lkZ2V0Ojp3aW5kb3dSZWN0KCkgY29uc3QKICAgICByZXR1cm4gUVJlY3RGKHZpZXct
PndpbmRvdygpLT5nZW9tZXRyeSgpKTsKIH0KIAorUGFnZUNsaWVudFFXaWRnZXQ6On5QYWdlQ2xp
ZW50UVdpZGdldCgpCit7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0Uo
VEVYVFVSRV9NQVBQRVIpCisgICAgZGVsZXRlIHBsYXRmb3JtTGF5ZXJQcm94eTsKKyNlbmRpZgor
fQorCiBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojp+UGFnZUNsaWVudFFHcmFwaGljc1dpZGdl
dCgpCiB7Ci0gICAgZGVsZXRlIG92ZXJsYXk7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQotICAgIGlmICghcm9vdEdyYXBoaWNzTGF5ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICAv
LyB3ZSBkb24ndCBuZWVkIHRvIGRlbGV0ZSB0aGUgcm9vdCBncmFwaGljcyBsYXllci4gVGhlIGxp
ZmVjeWNsZSBpcyBtYW5hZ2VkIGluIEdyYXBoaWNzTGF5ZXJRdC5jcHAuCi0gICAgcm9vdEdyYXBo
aWNzTGF5ZXIuZGF0YSgpLT5zZXRQYXJlbnRJdGVtKDApOwotICAgIHZpZXctPnNjZW5lKCktPnJl
bW92ZUl0ZW0ocm9vdEdyYXBoaWNzTGF5ZXIuZGF0YSgpKTsKKyAgICBkZWxldGUgb3ZlcmxheTsK
KyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgZGVsZXRlIHBsYXRmb3JtTGF5ZXJQcm94eTsK
KyNlbmRpZgogI2VuZGlmCiB9CiAKIHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2Ny
b2xsKGludCBkeCwgaW50IGR5LCBjb25zdCBRUmVjdCYgcmVjdFRvU2Nyb2xsKQogewogICAgIHZp
ZXctPnNjcm9sbChxcmVhbChkeCksIHFyZWFsKGR5KSwgcmVjdFRvU2Nyb2xsKTsKLQotI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpICYmICFVU0UoVEVYVFVSRV9NQVBQRVIpCiAgICAgdXBkYXRlQ29tcG9zaXRpbmdTY3JvbGxQ
b3NpdGlvbigpOwogI2VuZGlmCiB9CkBAIC0xMzgsOCArMjU3LDIxIEBAIHZvaWQgUGFnZUNsaWVu
dFFHcmFwaGljc1dpZGdldDo6dXBkYXRlKGNvbnN0IFFSZWN0JiBkaXJ0eVJlY3QpCiAjZW5kaWYK
IH0KIAordm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojp1cGRhdGVDb21wb3NpdGluZ1Nj
cm9sbFBvc2l0aW9uKCkKK3sKKy8vIFRoaXMgaXMgbm90IG5lZWRlZCBpbiB0ZXh0dXJlLW1hcHBl
ciwgYmVjYXVzZSB3ZSBnZXQgdGhlIHNjcm9sbCBwb3NpdGlvbiBmcm9tIHRoZSBRUGFpbnRlci4K
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmICFVU0UoVEVYVFVSRV9NQVBQRVIp
CisgICAgaWYgKHJvb3RHcmFwaGljc0xheWVyICYmIHBhZ2UgJiYgcGFnZS0+bWFpbkZyYW1lKCkp
IHsKKyAgICAgICAgY29uc3QgUVBvaW50IHNjcm9sbFBvc2l0aW9uID0gcGFnZS0+bWFpbkZyYW1l
KCktPnNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIHJvb3RHcmFwaGljc0xheWVyLmRhdGEoKS0+
c2V0UG9zKC1zY3JvbGxQb3NpdGlvbik7CisgICAgfQorI2VuZGlmCit9CisKIHZvaWQgUGFnZUNs
aWVudFFHcmFwaGljc1dpZGdldDo6Y3JlYXRlT3JEZWxldGVPdmVybGF5KCkKIHsKKyAgICAvLyBX
ZSBkb24ndCB1c2UgYW4gb3ZlcmxheSB3aXRoIFRleHR1cmVNYXBwZXIuIEluc3RlYWQsIHRoZSBv
dmVybGF5IGlzIGRyYXduIGluc2lkZSBRV2ViRnJhbWUuCisjaWYgIVVTRShURVhUVVJFX01BUFBF
UikKICAgICBib29sIHVzZU92ZXJsYXkgPSBmYWxzZTsKICAgICBpZiAoIXZpZXdSZXNpemVzVG9D
b250ZW50cykgewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTE2MCw2ICsy
OTIsNyBAQCB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OmNyZWF0ZU9yRGVsZXRlT3Zl
cmxheSgpCiAgICAgICAgIG92ZXJsYXktPmRlbGV0ZUxhdGVyKCk7CiAgICAgICAgIG92ZXJsYXkg
PSAwOwogICAgIH0KKyNlbmRpZiAvLyAhVVNFKFRFWFRVUkVfTUFQUEVSKQogfQogCiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtMTcxLDcgKzMwNCwxOCBAQCB2b2lkIFBhZ2VD
bGllbnRRR3JhcGhpY3NXaWRnZXQ6OnN5bmNMYXllcnMoKQogICAgIH0KIH0KIAotdm9pZCBQYWdl
Q2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcihRR3JhcGhpY3NJdGVt
KiBsYXllcikKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCit2b2lkIFBhZ2VDbGllbnRRR3JhcGhp
Y3NXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
KiBsYXllcikKK3sKKyAgICBpZiAobGF5ZXIpIHsKKyAgICAgICAgcGxhdGZvcm1MYXllclByb3h5
ID0gbmV3IFBsYXRmb3JtTGF5ZXJQcm94eVFHcmFwaGljc09iamVjdChwYWdlLT5tYWluRnJhbWUo
KSwgc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcio+KGxheWVyKSwgMCwgdmll
dyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZGVsZXRlIHBsYXRmb3JtTGF5ZXJQcm94
eTsKKyAgICBwbGF0Zm9ybUxheWVyUHJveHkgPSAwOworfQorI2Vsc2UKK3ZvaWQgUGFnZUNsaWVu
dFFHcmFwaGljc1dpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoUUdyYXBoaWNzT2JqZWN0KiBs
YXllcikKIHsKICAgICBpZiAocm9vdEdyYXBoaWNzTGF5ZXIpIHsKICAgICAgICAgcm9vdEdyYXBo
aWNzTGF5ZXIuZGF0YSgpLT5zZXRQYXJlbnRJdGVtKDApOwpAQCAtMTc5LDcgKzMyMyw3IEBAIHZv
aWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoUUdyYXBo
aWNzSXRlbSogbGF5ZXIpCiAgICAgICAgIFFXZWJGcmFtZVByaXZhdGU6OmNvcmUocGFnZS0+bWFp
bkZyYW1lKCkpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlUmVjdXJzaXZlKCk7CiAgICAg
fQogCi0gICAgcm9vdEdyYXBoaWNzTGF5ZXIgPSBsYXllciA/IGxheWVyLT50b0dyYXBoaWNzT2Jq
ZWN0KCkgOiAwOworICAgIHJvb3RHcmFwaGljc0xheWVyID0gbGF5ZXI7CiAKICAgICBpZiAobGF5
ZXIpIHsKICAgICAgICAgbGF5ZXItPnNldEZsYWcoUUdyYXBoaWNzSXRlbTo6SXRlbUNsaXBzQ2hp
bGRyZW5Ub1NoYXBlLCB0cnVlKTsKQEAgLTE4OSw2ICszMzMsNyBAQCB2b2lkIFBhZ2VDbGllbnRR
R3JhcGhpY3NXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKFFHcmFwaGljc0l0ZW0qIGxheWVy
KQogICAgIH0KICAgICBjcmVhdGVPckRlbGV0ZU92ZXJsYXkoKTsKIH0KKyNlbmRpZgogCiB2b2lk
IFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6Om1hcmtGb3JTeW5jKGJvb2wgc2NoZWR1bGVTeW5j
KQogewpAQCAtMTk2LDE0ICszNDEsNiBAQCB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6
Om1hcmtGb3JTeW5jKGJvb2wgc2NoZWR1bGVTeW5jKQogICAgIGlmIChzY2hlZHVsZVN5bmMpCiAg
ICAgICAgIHN5bmNNZXRhTWV0aG9kLmludm9rZSh2aWV3LCBRdDo6UXVldWVkQ29ubmVjdGlvbik7
CiB9Ci0KLXZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6dXBkYXRlQ29tcG9zaXRpbmdT
Y3JvbGxQb3NpdGlvbigpCi17Ci0gICAgaWYgKHJvb3RHcmFwaGljc0xheWVyICYmIHBhZ2UgJiYg
cGFnZS0+bWFpbkZyYW1lKCkpIHsKLSAgICAgICAgY29uc3QgUVBvaW50IHNjcm9sbFBvc2l0aW9u
ID0gcGFnZS0+bWFpbkZyYW1lKCktPnNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgICAgIHJvb3RHcmFw
aGljc0xheWVyLmRhdGEoKS0+c2V0UG9zKC1zY3JvbGxQb3NpdGlvbik7Ci0gICAgfQotfQogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKZGlmZiAtLWdpdCBhL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuaCBiL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9QYWdlQ2xpZW50UXQuaAppbmRleCAzYzMyZWMxLi42NGU1ZjhiIDEwMDY0NAotLS0gYS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmgKKysrIGIvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oCkBAIC00MSwxNSArNDEsMjkgQEAKIAogI2luY2x1
ZGUgPFNldHRpbmdzLmg+CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVT
RShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFBhZ2VDbGll
bnRRV2lkZ2V0IDogcHVibGljIFFXZWJQYWdlQ2xpZW50IHsKK2NsYXNzIFBhZ2VDbGllbnRRV2lk
Z2V0IDogcHVibGljIFFXZWJQYWdlQ2xpZW50CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgICAgICwgcHVibGljIHZpcnR1YWwgVGV4
dHVyZU1hcHBlckxheWVyQ2xpZW50CisjZW5kaWYKK3sKIHB1YmxpYzoKLSAgICBQYWdlQ2xpZW50
UVdpZGdldChRV2lkZ2V0KiB2aWV3KQotICAgICAgICA6IHZpZXcodmlldykKKyAgICBQYWdlQ2xp
ZW50UVdpZGdldChRV2lkZ2V0KiBuZXdWaWV3LCBRV2ViUGFnZSogbmV3UGFnZSkKKyAgICAgICAg
OiB2aWV3KG5ld1ZpZXcpCisgICAgICAgICwgcGFnZShuZXdQYWdlKQorI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgICAgICAsIHN5bmNU
aW1lcih0aGlzLCAmUGFnZUNsaWVudFFXaWRnZXQ6OnN5bmNMYXllcnMpCisgICAgICAgICwgcGxh
dGZvcm1MYXllclByb3h5KDApCisjZW5kaWYKICAgICB7CiAgICAgICAgIFFfQVNTRVJUKHZpZXcp
OwogICAgIH0KKyAgICB2aXJ0dWFsIH5QYWdlQ2xpZW50UVdpZGdldCgpOwogCiAgICAgdmlydHVh
bCBib29sIGlzUVdpZGdldENsaWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIApAQCAtNzgs
NiArOTIsMjEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUVJlY3RGIHdpbmRvd1JlY3QoKSBjb25z
dDsKIAogICAgIFFXaWRnZXQqIHZpZXc7CisgICAgUVdlYlBhZ2UqIHBhZ2U7CisKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Um9vdEdyYXBoaWNzTGF5ZXIoVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIq
IGxheWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0ZvclN5bmMoYm9vbCBzY2hlZHVsZVN5bmMp
OworICAgIHZvaWQgc3luY0xheWVycyhUaW1lcjxQYWdlQ2xpZW50UVdpZGdldD4qKTsKKyNlbmRp
ZgorCisgICAgLy8gUUdyYXBoaWNzV2ViVmlldyBjYW4gcmVuZGVyIGNvbXBvc2l0ZWQgbGF5ZXJz
CisgICAgdmlydHVhbCBib29sIGFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVT
RShURVhUVVJFX01BUFBFUikKKyAgICBUaW1lcjxQYWdlQ2xpZW50UVdpZGdldD4gc3luY1RpbWVy
OworICAgIFBsYXRmb3JtTGF5ZXJQcm94eVF0KiBwbGF0Zm9ybUxheWVyUHJveHk7CisjZW5kaWYK
IH07CiAKIC8vIHRoZSBvdmVybGF5IGlzIGhlcmUgZm9yIG9uZSByZWFzb24gb25seTogdG8gaGF2
ZSB0aGUgc2Nyb2xsLWJhcnMgYW5kIG90aGVyCkBAIC0xMTQsMTMgKzE0MywyMCBAQCBjbGFzcyBR
R3JhcGhpY3NJdGVtT3ZlcmxheSA6IHB1YmxpYyBRR3JhcGhpY3NPYmplY3QgewogfTsKIAogCi1j
bGFzcyBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0IDogcHVibGljIFFXZWJQYWdlQ2xpZW50IHsK
K2NsYXNzIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQgOiBwdWJsaWMgUVdlYlBhZ2VDbGllbnQK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikK
KyAgICAgICAgLCBwdWJsaWMgdmlydHVhbCBUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQKKyNlbmRp
ZgorewogcHVibGljOgotICAgIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQoUUdyYXBoaWNzV2Vi
VmlldyogdiwgUVdlYlBhZ2UqIHApCi0gICAgICAgIDogdmlldyh2KQotICAgICAgICAsIHBhZ2Uo
cCkKKyAgICBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0KFFHcmFwaGljc1dlYlZpZXcqIG5ld1Zp
ZXcsIFFXZWJQYWdlKiBuZXdQYWdlKQorICAgICAgICA6IHZpZXcobmV3VmlldykKKyAgICAgICAg
LCBwYWdlKG5ld1BhZ2UpCiAgICAgICAgICwgdmlld1Jlc2l6ZXNUb0NvbnRlbnRzKGZhbHNlKQog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIp
CisgICAgICAgICwgcGxhdGZvcm1MYXllclByb3h5KDApCisjZW5kaWYKICAgICAgICAgLCBzaG91
bGRTeW5jKGZhbHNlKQogI2VuZGlmCiAgICAgICAgICwgb3ZlcmxheSgwKQpAQCAtMTY4LDcgKzIw
NCwxMSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Um9vdEdyYXBoaWNzTGF5ZXIoUUdyYXBoaWNzSXRlbSog
bGF5ZXIpOworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Um9v
dEdyYXBoaWNzTGF5ZXIoVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIGxheWVyKTsKKyNlbHNl
CisgICAgdmlydHVhbCB2b2lkIHNldFJvb3RHcmFwaGljc0xheWVyKFFHcmFwaGljc09iamVjdCog
bGF5ZXIpOworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIG1hcmtGb3JTeW5jKGJvb2wgc2NoZWR1
bGVTeW5jKTsKICAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5nU2Nyb2xsUG9zaXRpb24oKTsKICAg
ICB2b2lkIHN5bmNMYXllcnMoKTsKQEAgLTE4NCw4ICsyMjQsMTEgQEAgcHVibGljOgogICAgIGJv
b2wgdmlld1Jlc2l6ZXNUb0NvbnRlbnRzOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBQbGF0Zm9ybUxheWVyUHJveHlRdCog
cGxhdGZvcm1MYXllclByb3h5OworI2Vsc2UKICAgICBRV2Vha1BvaW50ZXI8UUdyYXBoaWNzT2Jq
ZWN0PiByb290R3JhcGhpY3NMYXllcjsKLQorI2VuZGlmCiAgICAgLy8gd2UgaGF2ZSB0byBmbHVz
aCBxdWl0ZSBvZnRlbiwgc28gd2UgdXNlIGEgbWV0YS1tZXRob2QgaW5zdGVhZCBvZiBRVGltZXI6
OnNpbmdsZVNob3QgZm9yIHB1dHRpbmcgdGhlIGV2ZW50IGluIHRoZSBxdWV1ZQogICAgIFFNZXRh
TWV0aG9kIHN5bmNNZXRhTWV0aG9kOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70402</attachid>
            <date>2010-10-10 07:20:56 -0700</date>
            <delta_ts>2010-10-14 10:31:52 -0700</delta_ts>
            <desc>Patch 5: have QWebFrame render the layer it got from TextureMapper</desc>
            <filename>patch-texmap-rendering-2.diff</filename>
            <type>text/plain</type>
            <size>6243</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcWdyYXBoaWNzd2Vidmlldy5jcHAgYi9XZWJLaXQv
cXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwCmluZGV4IGM0MzkyOTQuLjc5YTkwMTMgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9xdC9BcGkvcWdyYXBoaWNzd2Vidmlldy5jcHAKKysrIGIvV2ViS2l0L3F0
L0FwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcApAQCAtMjk4LDcgKzI5OCw3IEBAIHZvaWQgUUdyYXBo
aWNzV2ViVmlldzo6cGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTdHlsZU9wdGlvbkdy
YXBoaWNzSXRlbSoKICAgICAgICAgcmV0dXJuOwogICAgIH0gCiAjZW5kaWYKLSNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAm
JiAhVVNFKFRFWFRVUkVfTUFQUEVSKQogICAgIHBhZ2UoKS0+bWFpbkZyYW1lKCktPnJlbmRlcihw
YWludGVyLCBkLT5vdmVybGF5KCkgPyBRV2ViRnJhbWU6OkNvbnRlbnRzTGF5ZXIgOiBRV2ViRnJh
bWU6OkFsbExheWVycywgb3B0aW9uLT5leHBvc2VkUmVjdC50b0FsaWduZWRSZWN0KCkpOwogI2Vs
c2UKICAgICBwYWdlKCktPm1haW5GcmFtZSgpLT5yZW5kZXIocGFpbnRlciwgUVdlYkZyYW1lOjpB
bGxMYXllcnMsIG9wdGlvbi0+ZXhwb3NlZFJlY3QudG9SZWN0KCkpOwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwIGIvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCmlu
ZGV4IDE3OTEwOTYuLjQ5ZDE3YzkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1l
LmNwcAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKQEAgLTk2LDYgKzk2LDkgQEAK
ICNpbmNsdWRlICJydW50aW1lX29iamVjdC5oIgogI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgog
I2VuZGlmCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2luY2x1ZGUgInRleG1hcC9UZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllci5oIgorI2VuZGlmCiAjaW5jbHVkZSAid3RmL0hhc2hNYXAuaCIK
ICNpbmNsdWRlIDxRTXVsdGlNYXA+CiAjaW5jbHVkZSA8cWRlYnVnLmg+CkBAIC0yOTksNiArMzAy
LDE2IEBAIHZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6cmVuZGVyRnJvbVRpbGVkQmFja2luZ1N0b3Jl
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uCiAKICAgICAgICAgcGFpbnRlci0+cmVzdG9y
ZSgpOwogICAgIH0KKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhU
VVJFX01BUFBFUikKKyAgICAvLyBUZXh0dXJlTWFwcGVyIG1pZ2h0IHVzZSByYXcgT3BlbkdMIG9y
IHNvbWUgb3RoZXIgYmFja2VuZCB0aGF0IHJlcXVpcmVzIG5hdGl2ZSBwYWludGluZy4gT24gcmFz
dGVyIHRoaXMgZG9lc24ndCBoYXZlIGFueSBlZmZlY3QuCisgICAgaWYgKHJvb3RHcmFwaGljc0xh
eWVyKSB7CisgICAgICAgIHBhaW50ZXItPmJlZ2luTmF0aXZlUGFpbnRpbmcoKTsKKyAgICAgICAg
cm9vdEdyYXBoaWNzTGF5ZXItPnBhaW50KGNvbnRleHQsIHZpZXctPnNpemUoKSwgdmlldy0+ZnJh
bWVSZWN0KCksIEludFJlY3QoY2xpcC5ib3VuZGluZ1JlY3QoKSksIFRyYW5zZm9ybWF0aW9uTWF0
cml4KCksIHBhaW50ZXItPm9wYWNpdHkoKSk7CisgICAgICAgIHBhaW50ZXItPmVuZE5hdGl2ZVBh
aW50aW5nKCk7CisgICAgfQorCisgICAgcmVuZGVyUmVsYXRpdmVDb29yZHMoY29udGV4dCwgKFFX
ZWJGcmFtZTo6UmVuZGVyTGF5ZXIpKFFXZWJGcmFtZTo6U2Nyb2xsQmFyTGF5ZXIgfCBRV2ViRnJh
bWU6OlBhbkljb25MYXllciksIGNsaXApOworI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAtMzE2LDE4
ICszMjksMTggQEAgdm9pZCBRV2ViRnJhbWVQcml2YXRlOjpyZW5kZXJSZWxhdGl2ZUNvb3JkcyhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFFXZWJGcmFtZToKICAgICBXZWJDb3JlOjpGcmFtZVZp
ZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpOwogICAgIHZpZXctPnVwZGF0ZUxheW91dEFuZFN0eWxl
SWZOZWVkZWRSZWN1cnNpdmUoKTsKIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmVjdG9yLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFFSZWN0JiBjbGlwUmVjdCA9IHZlY3Rvci5hdChp
KTsKKyAgICBpZiAobGF5ZXIgJiBRV2ViRnJhbWU6OkNvbnRlbnRzTGF5ZXIpIHsKKyAgICAgICAg
cGFpbnRlci0+c2F2ZSgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZlY3Rvci5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgY29uc3QgUVJlY3QmIGNsaXBSZWN0ID0gdmVjdG9yLmF0
KGkpOwogCi0gICAgICAgIFFSZWN0IGludGVyc2VjdGVkUmVjdCA9IGNsaXBSZWN0LmludGVyc2Vj
dGVkKHZpZXctPmZyYW1lUmVjdCgpKTsKKyAgICAgICAgICAgIFFSZWN0IGludGVyc2VjdGVkUmVj
dCA9IGNsaXBSZWN0LmludGVyc2VjdGVkKHZpZXctPmZyYW1lUmVjdCgpKTsKIAotICAgICAgICBw
YWludGVyLT5zYXZlKCk7Ci0gICAgICAgIHBhaW50ZXItPnNldENsaXBSZWN0KGNsaXBSZWN0LCBR
dDo6SW50ZXJzZWN0Q2xpcCk7CisgICAgICAgICAgICBwYWludGVyLT5zZXRDbGlwUmVjdChjbGlw
UmVjdCwgUXQ6OkludGVyc2VjdENsaXApOwogCi0gICAgICAgIGludCB4ID0gdmlldy0+eCgpOwot
ICAgICAgICBpbnQgeSA9IHZpZXctPnkoKTsKKyAgICAgICAgICAgIGludCB4ID0gdmlldy0+eCgp
OworICAgICAgICAgICAgaW50IHkgPSB2aWV3LT55KCk7CiAKLSAgICAgICAgaWYgKGxheWVyICYg
UVdlYkZyYW1lOjpDb250ZW50c0xheWVyKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5zYXZlKCk7
CiAKICAgICAgICAgICAgIGludCBzY3JvbGxYID0gdmlldy0+c2Nyb2xsWCgpOwpAQCAtMzQ0LDI3
ICszNTcsNTIgQEAgdm9pZCBRV2ViRnJhbWVQcml2YXRlOjpyZW5kZXJSZWxhdGl2ZUNvb3JkcyhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFFXZWJGcmFtZToKIAogICAgICAgICAgICAgY29udGV4
dC0+cmVzdG9yZSgpOwogICAgICAgICB9CisgICAgICAgIHBhaW50ZXItPnJlc3RvcmUoKTsKIAot
ICAgICAgICBpZiAobGF5ZXIgJiBRV2ViRnJhbWU6OlNjcm9sbEJhckxheWVyCi0gICAgICAgICAg
ICAmJiAhdmlldy0+c2Nyb2xsYmFyc1N1cHByZXNzZWQoKQotICAgICAgICAgICAgJiYgKHZpZXct
Pmhvcml6b250YWxTY3JvbGxiYXIoKSB8fCB2aWV3LT52ZXJ0aWNhbFNjcm9sbGJhcigpKSkgewot
ICAgICAgICAgICAgY29udGV4dC0+c2F2ZSgpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgICAgICBpZiAocm9vdEdyYXBoaWNzTGF5
ZXIpIHsKKyAgICAgICAgICAgIHBhaW50ZXItPnNhdmUoKTsKKyAgICAgICAgICAgIHBhaW50ZXIt
PmJlZ2luTmF0aXZlUGFpbnRpbmcoKTsKKyAgICAgICAgICAgIHJvb3RHcmFwaGljc0xheWVyLT5w
YWludChjb250ZXh0LCB2aWV3LT5zaXplKCksIHZpZXctPmZyYW1lUmVjdCgpLCBJbnRSZWN0KGNs
aXAuYm91bmRpbmdSZWN0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5vcGFj
aXR5KCkpOworICAgICAgICAgICAgcGFpbnRlci0+ZW5kTmF0aXZlUGFpbnRpbmcoKTsKKyAgICAg
ICAgICAgIHBhaW50ZXItPnJlc3RvcmUoKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorICAg
IGlmIChsYXllciAmIChRV2ViRnJhbWU6OlBhbkljb25MYXllciB8IFFXZWJGcmFtZTo6U2Nyb2xs
QmFyTGF5ZXIpKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBjb25zdCBRUmVjdCYgY2xpcFJlY3QgPSB2ZWN0b3IuYXQoaSk7
CiAKLSAgICAgICAgICAgIFFSZWN0IHJlY3QgPSBpbnRlcnNlY3RlZFJlY3Q7Ci0gICAgICAgICAg
ICBjb250ZXh0LT50cmFuc2xhdGUoeCwgeSk7Ci0gICAgICAgICAgICByZWN0LnRyYW5zbGF0ZSgt
eCwgLXkpOworICAgICAgICAgICAgUVJlY3QgaW50ZXJzZWN0ZWRSZWN0ID0gY2xpcFJlY3QuaW50
ZXJzZWN0ZWQodmlldy0+ZnJhbWVSZWN0KCkpOwogCi0gICAgICAgICAgICB2aWV3LT5wYWludFNj
cm9sbGJhcnMoY29udGV4dCwgcmVjdCk7CisgICAgICAgICAgICBwYWludGVyLT5zYXZlKCk7Cisg
ICAgICAgICAgICBwYWludGVyLT5zZXRDbGlwUmVjdChjbGlwUmVjdCwgUXQ6OkludGVyc2VjdENs
aXApOwogCi0gICAgICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgICAgIH0KKyAgICAg
ICAgICAgIGludCB4ID0gdmlldy0+eCgpOworICAgICAgICAgICAgaW50IHkgPSB2aWV3LT55KCk7
CisKKyAgICAgICAgICAgIGlmIChsYXllciAmIFFXZWJGcmFtZTo6U2Nyb2xsQmFyTGF5ZXIKKyAg
ICAgICAgICAgICAgICAmJiAhdmlldy0+c2Nyb2xsYmFyc1N1cHByZXNzZWQoKQorICAgICAgICAg
ICAgICAgICYmICh2aWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgfHwgdmlldy0+dmVydGljYWxT
Y3JvbGxiYXIoKSkpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zYXZlKCk7CisKKyAgICAg
ICAgICAgICAgICBRUmVjdCByZWN0ID0gaW50ZXJzZWN0ZWRSZWN0OworICAgICAgICAgICAgICAg
IGNvbnRleHQtPnRyYW5zbGF0ZSh4LCB5KTsKKyAgICAgICAgICAgICAgICByZWN0LnRyYW5zbGF0
ZSgteCwgLXkpOworCisgICAgICAgICAgICAgICAgdmlldy0+cGFpbnRTY3JvbGxiYXJzKGNvbnRl
eHQsIHJlY3QpOworCisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVzdG9yZSgpOworICAgICAg
ICAgICAgfQogCiAjaWYgRU5BQkxFKFBBTl9TQ1JPTExJTkcpCi0gICAgICAgIGlmIChsYXllciAm
IFFXZWJGcmFtZTo6UGFuSWNvbkxheWVyKQotICAgICAgICAgICAgdmlldy0+cGFpbnRQYW5TY3Jv
bGxJY29uKGNvbnRleHQpOworICAgICAgICAgICAgaWYgKGxheWVyICYgUVdlYkZyYW1lOjpQYW5J
Y29uTGF5ZXIpCisgICAgICAgICAgICAgICAgdmlldy0+cGFpbnRQYW5TY3JvbGxJY29uKGNvbnRl
eHQpOwogI2VuZGlmCiAKLSAgICAgICAgcGFpbnRlci0+cmVzdG9yZSgpOworICAgICAgICAgICAg
cGFpbnRlci0+cmVzdG9yZSgpOworICAgICAgICB9CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCAzNDhlZmUwLi42
ODJlMjI0IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9xdC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0xMC0wOSAgTm8nYW0gUm9zZW50aGFsICA8
bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5pdGlhbCBp
bXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDcwNzAKKworICAgICAgICBBbGxvdyByZW5kZXJpbmcgb2YgYWNjZWxlcmF0ZWQtY29t
cG9zaXRpbmcgd2l0aCBUZXh0dXJlTWFwcGVyLCBpbnNpZGUgYSBRV2ViRnJhbWUuIFRoZSBmcmFt
ZSB3aWxsIHJlbmRlciB0aGUgcmVndWxhciBjb250ZW50LAorICAgICAgICBlaXRoZXIgbm9ybWFs
bHkgb3IgdGhyb3VnaCB0aWxlZCBiYWNraW5nc3RvcmUsIHRoZW4gbGV0IHRoZSBUZXh0dXJlTWFw
cGVyIGxheWVyIHJlbmRlciBpdHNlbGYgdG8gdGhlIGFjdGl2ZSBjb250ZXh0LCBhbmQKKyAgICAg
ICAgdGhlbiByZW5kZXIgdGhlIHNjcm9sbGJhciBhbmQgcGFuIGljb24uIFRoaXMgaXMgZGlmZmVy
ZW50IGZyb20gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHdoaWNoIHVzZXMgYWRkaXRpb25h
bCBRR3JhcGhpY3NJdGVtcyBmb3IgQUMKKyAgICAgICAgYW5kIHRoZSBzY3JvbGxiYXIgb3Zlcmxh
eS4KKworICAgICAgICAqIEFwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKFFHcmFw
aGljc1dlYlZpZXc6OnBhaW50KToKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1lLmNwcDoKKyAgICAg
ICAgKFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlckZyb21UaWxlZEJhY2tpbmdTdG9yZSk6CisgICAg
ICAgIChRV2ViRnJhbWVQcml2YXRlOjpyZW5kZXJSZWxhdGl2ZUNvb3Jkcyk6CisKIDIwMTAtMTAt
MDMgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71767</attachid>
            <date>2010-10-25 10:42:59 -0700</date>
            <delta_ts>2010-10-25 10:44:10 -0700</delta_ts>
            <desc>Patch 4: glue layer (PageClientQt) opt-in for TextureMapper</desc>
            <filename>patch-47070.diff</filename>
            <type>text/plain</type>
            <size>17658</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzU2ZmE4ZC4uZjhmZjIwZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0xMC0yNSAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5p
dGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDcwNzAKKworICAgICAgICBHbHVlIGxheWVyIChXZWJDb3JlU3VwcG9ydCkg
Y2hhbmdlcyB0byBhbGxvdyBjb25uZWN0aW5nIFRleHR1cmVNYXBwZXIgdG8gYSBRdCBQYWdlQ2xp
ZW50LCBpLmUuCisgICAgICAgIGEgUVdlYlZpZXcgb3IgYSBRR3JhcGhpY3NXZWJWaWV3LiBUaGlz
IGVuYWJsZXMgdGhlIG5ldyB0eXBlLCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciwgdG8gYmUg
cmVjb2duaXplZCBib3RoIGJ5CisgICAgICAgIHRoZSBjb21wb3NpdG9yIGFuZCBieSB0aGUgcGFn
ZSBjbGllbnQuCisgICAgICAgIE5vdGUgdGhhdCB0aGlzIGlzIHRlbXBvcmFyaWx5IGFuIG9wdC1p
biwgdW5kZXIgVVNFKFRFWFRVUkVfTUFQUEVSKQorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gV0lQ
IG9uIGEgbmV3IGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NMYXllci5oOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50Lmg6
CisgICAgICAgIChRV2ViUGFnZUNsaWVudDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIpOgorCiAyMDEw
LTEwLTI0ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KQEAgLTc2MDUzLDcgKzc2MDcxLDcgQEAKIAog
ICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEuCiAKLSAgICAgICAgQnVn
wqA0MTM0MCAtIFtHU3RyZWFtZXJdIFN1YnRsZSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgc2Vla3MK
KyAgICAgICAgQnVnIDQxMzQwIC0gW0dTdHJlYW1lcl0gU3VidGxlIHJhY2UgY29uZGl0aW9uIGR1
cmluZyBzZWVrcwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDEzNDAKIAogICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRX
ZWJTb3VyY2VHU3RyZWFtZXIuY3BwOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0xheWVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
TGF5ZXIuaAppbmRleCBhZDRkMDU2Li5hNDc2MDU0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzTGF5ZXIuaApAQCAtNTcsMTEgKzU3LDE5IEBAIHR5cGVkZWYgV0tDQUNGTGF5
ZXIgUGxhdGZvcm1MYXllcjsKIHR5cGVkZWYgdm9pZCogTmF0aXZlTGF5ZXI7CiB9CiAjZWxpZiBQ
TEFURk9STShRVCkKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCituYW1lc3BhY2UgV2ViQ29yZSB7
CitjbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcjsKK3R5cGVkZWYgVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXIgUGxhdGZvcm1MYXllcjsKK3R5cGVkZWYgVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXIqIE5hdGl2ZUxheWVyOworfTsKKyNlbHNlCiBRVF9CRUdJTl9OQU1FU1BBQ0UKLWNs
YXNzIFFHcmFwaGljc0l0ZW07CitjbGFzcyBRR3JhcGhpY3NPYmplY3Q7CiBRVF9FTkRfTkFNRVNQ
QUNFCi10eXBlZGVmIFFHcmFwaGljc0l0ZW0gUGxhdGZvcm1MYXllcjsKLXR5cGVkZWYgUUdyYXBo
aWNzSXRlbSogTmF0aXZlTGF5ZXI7Cit0eXBlZGVmIFFHcmFwaGljc09iamVjdCBQbGF0Zm9ybUxh
eWVyOwordHlwZWRlZiBRR3JhcGhpY3NPYmplY3QqIE5hdGl2ZUxheWVyOworI2VuZGlmCiAjZWxp
ZiBQTEFURk9STShDSFJPTUlVTSkKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIExheWVyQ2hy
b21pdW07CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50Lmgg
Yi9XZWJDb3JlL3BsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50LmgKaW5kZXggZjVkOGMxYi4uOTVh
ZTg4YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVdlYlBhZ2VDbGllbnQuaApAQCAtMzAsMTEgKzMwLDE0
IEBACiAjaW5jbHVkZSA8UUN1cnNvcj4KICNlbmRpZgogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorI2luY2x1ZGUgPEdyYXBoaWNzTGF5ZXIuaD4KKyNlbmRpZgorCiAjaW5jbHVk
ZSA8UVBhbGV0dGU+CiAjaW5jbHVkZSA8UVJlY3Q+CiAKIFFUX0JFR0lOX05BTUVTUEFDRQotY2xh
c3MgUUdyYXBoaWNzSXRlbTsKIGNsYXNzIFFTdHlsZTsKIFFUX0VORF9OQU1FU1BBQ0UKIApAQCAt
NDksOCArNTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kRW5h
YmxlZChib29sIGVuYWJsZSkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpbnB1dE1ldGhvZEVuYWJs
ZWQoKSBjb25zdCA9IDA7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIC8v
IHRoaXMgZ2V0cyBjYWxsZWQgd2hlbiB3ZSBzdGFydC9zdG9wIGNvbXBvc2l0aW5nLgotICAgIHZp
cnR1YWwgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihRR3JhcGhpY3NJdGVtKiBsYXllcikge30K
KyAgICB2aXJ0dWFsIHZvaWQgc2V0Um9vdEdyYXBoaWNzTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5
ZXIpIHsgfQogCiAgICAgLy8gdGhpcyBnZXRzIGNhbGxlZCB3aGVuIHRoZSBjb21wb3NpdG9yIHdh
bnRzIHVzIHRvIHN5bmMgdGhlIGxheWVycwogICAgIC8vIGlmIHNjaGVkdWxlU3luYyBpcyB0cnVl
LCB3ZSBzY2hlZHVsZSBhIHN5bmMgb3Vyc2VsdmVzLiBvdGhlcndpc2UsCmRpZmYgLS1naXQgYS9X
ZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5oIGIvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuaAppbmRl
eCBlNzhmYjA3Li5hNTk4YTU2IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5o
CisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmgKQEAgLTU2LDYgKzU2LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFdpZGdldFByaXZhdGU7CiAgICAgY2xhc3MgRnJhbWVM
b2FkZXJDbGllbnRRdDsKICAgICBjbGFzcyBDaHJvbWVDbGllbnRRdDsKKyAgICBjbGFzcyBQbGF0
Zm9ybUxheWVyUHJveHlRdDsKIH0KIGNsYXNzIFFXZWJGcmFtZURhdGE7CiBjbGFzcyBRV2ViSGl0
VGVzdFJlc3VsdFByaXZhdGU7CkBAIC0yMzEsNiArMjMyLDcgQEAgcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgV2ViQ29yZTo6V2lkZ2V0UHJpdmF0ZTsKICAgICBmcmllbmQgY2xhc3MgV2ViQ29y
ZTo6RnJhbWVMb2FkZXJDbGllbnRRdDsKICAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6Q2hyb21l
Q2xpZW50UXQ7CisgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXJQcm94eVF0
OwogICAgIFFXZWJGcmFtZVByaXZhdGUgKmQ7CiB9OwogCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQv
QXBpL3F3ZWJmcmFtZV9wLmggYi9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmgKaW5kZXggNzkx
ODdhYi4uNTY2MGJkMSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oCisr
KyBiL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaApAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRnJhbWVWaWV3OwogICAgIGNsYXNzIEhUTUxGcmFtZU93
bmVyRWxlbWVudDsKICAgICBjbGFzcyBTY3JvbGxiYXI7CisgICAgY2xhc3MgVGV4dHVyZU1hcHBl
ckNvbnRlbnRMYXllcjsKIH0KIGNsYXNzIFFXZWJQYWdlOwogCkBAIC03Miw2ICs3Myw5IEBAIHB1
YmxpYzoKICAgICAgICAgLCBhbGxvd3NTY3JvbGxpbmcodHJ1ZSkKICAgICAgICAgLCBtYXJnaW5X
aWR0aCgtMSkKICAgICAgICAgLCBtYXJnaW5IZWlnaHQoLTEpCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgICAgICwgcm9vdEdyYXBo
aWNzTGF5ZXIoMCkKKyNlbmRpZgogICAgICAgICAsIHpvb21UZXh0T25seShmYWxzZSkKICAgICAg
ICAge30KICAgICB2b2lkIGluaXQoUVdlYkZyYW1lKiBxZnJhbWUsIFFXZWJGcmFtZURhdGEqIGZy
YW1lRGF0YSk7CkBAIC0xMDAsNiArMTA0LDkgQEAgcHVibGljOgogICAgIGJvb2wgYWxsb3dzU2Ny
b2xsaW5nOwogICAgIGludCBtYXJnaW5XaWR0aDsKICAgICBpbnQgbWFyZ2luSGVpZ2h0OworI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAg
IFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIqIHJvb3RHcmFwaGljc0xheWVyOwor
I2VuZGlmCiAgICAgYm9vbCB6b29tVGV4dE9ubHk7CiB9OwogCmRpZmYgLS1naXQgYS9XZWJLaXQv
cXQvQXBpL3F3ZWJwYWdlLmNwcCBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCmluZGV4IDIx
NzdiNDEuLmVhYmFiNjkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCisr
KyBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCkBAIC0xODUwLDcgKzE4NTAsNyBAQCB2b2lk
IFFXZWJQYWdlOjpzZXRWaWV3KFFXaWRnZXQqIHZpZXcpCiAgICAgfQogCiAgICAgaWYgKHZpZXcp
Ci0gICAgICAgIGQtPmNsaWVudCA9IG5ldyBQYWdlQ2xpZW50UVdpZGdldCh2aWV3KTsKKyAgICAg
ICAgZC0+Y2xpZW50ID0gbmV3IFBhZ2VDbGllbnRRV2lkZ2V0KHZpZXcsIHRoaXMpOwogfQogCiAv
KiEKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9n
CmluZGV4IDk3MGIwOWQuLmE4MmI5ZDIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9DaGFuZ2VMb2cK
KysrIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEwLTEwLTI1ICBO
bydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1RleG1hcF0gW1F0XSBUZXh0dXJl
IG1hcHBlciBpbml0aWFsIGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzA3MAorCisgICAgICAgIEdsdWUgbGF5ZXIgKFdlYkNv
cmVTdXBwb3J0KSBjaGFuZ2VzIHRvIGFsbG93IGNvbm5lY3RpbmcgVGV4dHVyZU1hcHBlciB0byBh
IFF0IFBhZ2VDbGllbnQsIGkuZS4KKyAgICAgICAgYSBRV2ViVmlldyBvciBhIFFHcmFwaGljc1dl
YlZpZXcuIFRoaXMgZW5hYmxlcyB0aGUgbmV3IHR5cGUsIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyLCB0byBiZSByZWNvZ25pemVkIGJvdGggYnkKKyAgICAgICAgdGhlIGNvbXBvc2l0b3IgYW5k
IGJ5IHRoZSBwYWdlIGNsaWVudC4KKyAgICAgICAgTm90ZSB0aGF0IHRoaXMgaXMgdGVtcG9yYXJp
bHkgYW4gb3B0LWluLCB1bmRlciBVU0UoVEVYVFVSRV9NQVBQRVIpCisKKyAgICAgICAgKiBBcGkv
cXdlYmZyYW1lLmg6CisgICAgICAgICogQXBpL3F3ZWJmcmFtZV9wLmg6CisgICAgICAgIChRV2Vi
RnJhbWVQcml2YXRlOjpRV2ViRnJhbWVQcml2YXRlKToKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2Uu
Y3BwOgorICAgICAgICAoUVdlYlBhZ2U6OnNldFZpZXcpOgorICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0
OjphdHRhY2hSb290R3JhcGhpY3NMYXllcik6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGFn
ZUNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXJQcm94eVF0OjpQ
bGF0Zm9ybUxheWVyUHJveHlRdCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUxheWVyUHJv
eHlRdDo6flBsYXRmb3JtTGF5ZXJQcm94eVF0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
TGF5ZXJQcm94eVF0OjpzZXRTaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUxheWVyUHJveHlRV2lkZ2V0OjpQbGF0Zm9ybUxheWVyUHJveHlRV2lkZ2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXJQcm94eVFXaWRnZXQ6OmV2ZW50RmlsdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXJQcm94eVFXaWRnZXQ6OnNldE5lZWRzRGlzcGxheSk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUxheWVyUHJveHlRV2lkZ2V0OjpzZXROZWVkc0Rp
c3BsYXlJblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1MYXllclByb3h5UUdyYXBo
aWNzT2JqZWN0OjpQbGF0Zm9ybUxheWVyUHJveHlRR3JhcGhpY3NXaWRnZXQpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1MYXllclByb3h5UUdyYXBoaWNzT2JqZWN0OjpzZXROZWVkc0Rpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1MYXllclByb3h5UUdyYXBoaWNzT2JqZWN0
OjpzZXROZWVkc0Rpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFX
aWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGll
bnRRV2lkZ2V0OjptYXJrRm9yU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UVdp
ZGdldDo6c3luY0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNz
V2lkZ2V0Ojp1cGRhdGVDb21wb3NpdGluZ1Njcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OmNyZWF0ZU9yRGVsZXRlT3ZlcmxheSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290R3JhcGhp
Y3NMYXllcik6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UVdpZGdldDo6UGFnZUNsaWVudFFXaWRnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFXaWRnZXQ6OmFsbG93c0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6UGFn
ZUNsaWVudFFHcmFwaGljc1dpZGdldCk6CisKIDIwMTAtMTAtMjIgIFNhbSBXZWluaWcgIDxzYW1A
d2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCmRpZmYg
LS1naXQgYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwIGIvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAppbmRleCBiZmUyOWE5Li5m
MGQzOTAzIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
UXQuY3BwCisrKyBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAK
QEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHZW9s
b2NhdGlvbi5oIgogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSNpbmNsdWRlICJH
cmFwaGljc0xheWVyUXQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjZW5kaWYKICNp
bmNsdWRlICJHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oIgogI2luY2x1ZGUgIkhpdFRl
c3RSZXN1bHQuaCIKQEAgLTU5MSw3ICs1OTEsNyBAQCB2b2lkIENocm9tZUNsaWVudFF0OjpjYW5j
ZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUoRnJhbWUqIGZyYW1lLCBHZQog
dm9pZCBDaHJvbWVDbGllbnRRdDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZyYW1l
LCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQogewogICAgIGlmIChwbGF0Zm9ybVBhZ2VD
bGllbnQoKSkKLSAgICAgICAgcGxhdGZvcm1QYWdlQ2xpZW50KCktPnNldFJvb3RHcmFwaGljc0xh
eWVyKGdyYXBoaWNzTGF5ZXIgPyBncmFwaGljc0xheWVyLT5uYXRpdmVMYXllcigpIDogMCk7Cisg
ICAgICAgIHBsYXRmb3JtUGFnZUNsaWVudCgpLT5zZXRSb290R3JhcGhpY3NMYXllcihncmFwaGlj
c0xheWVyID8gZ3JhcGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigpIDogMCk7CiB9CiAKIHZvaWQg
Q2hyb21lQ2xpZW50UXQ6OnNldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb24oKQpk
aWZmIC0tZ2l0IGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAgYi9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcAppbmRleCA5YWEwMWEyLi40
ZTUxZjgxIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0
LmNwcAorKysgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcApAQCAt
MjEsMTMgKzIxLDEyNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSAiUGFnZUNs
aWVudFF0LmgiCisjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgi
CiAKICNpZiBkZWZpbmVkKFFfV1NfWDExKQogI2luY2x1ZGUgPFFYMTFJbmZvPgogI2VuZGlmCiAK
KyNpZmRlZiBRVF9PUEVOR0xfTElCCisjaW5jbHVkZSA8UUdMV2lkZ2V0PgorI2VuZGlmCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVT
RShURVhUVVJFX01BUFBFUikgICAgCitjbGFzcyBQbGF0Zm9ybUxheWVyUHJveHlRdCA6IHB1Ymxp
YyBRT2JqZWN0LCBwdWJsaWMgdmlydHVhbCBUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQgeworcHVi
bGljOgorICAgIFBsYXRmb3JtTGF5ZXJQcm94eVF0KFFXZWJGcmFtZSogZnJhbWUsIFRleHR1cmVN
YXBwZXJDb250ZW50TGF5ZXIqIGxheWVyLCBRT2JqZWN0KiBvYmplY3QpCisgICAgICAgIDogUU9i
amVjdChvYmplY3QpCisgICAgICAgICwgbV9mcmFtZShmcmFtZSkKKyAgICAgICAgLCBtX2xheWVy
KGxheWVyKQorICAgIHsKKyAgICAgICAgaWYgKG1fbGF5ZXIpCisgICAgICAgICAgICBtX2xheWVy
LT5zZXRQbGF0Zm9ybUxheWVyQ2xpZW50KHRoaXMpOworICAgICAgICBtX2ZyYW1lLT5kLT5yb290
R3JhcGhpY3NMYXllciA9IG1fbGF5ZXI7CisgICAgfQorCisgICAgdmlydHVhbCB+UGxhdGZvcm1M
YXllclByb3h5UXQoKQorICAgIHsKKyAgICAgICAgaWYgKG1fbGF5ZXIpCisgICAgICAgICAgICBt
X2xheWVyLT5zZXRQbGF0Zm9ybUxheWVyQ2xpZW50KDApOworICAgICAgICBpZiAobV9mcmFtZS0+
ZCkKKyAgICAgICAgICAgIG1fZnJhbWUtPmQtPnJvb3RHcmFwaGljc0xheWVyID0gMDsKKyAgICB9
CisKKyAgICAvLyBTaW5jZSB3ZSBqdXN0IHBhaW50IHRoZSBjb21wb3NpdGVkIHRyZWUgYW5kIG5l
dmVyIGNyZWF0ZSBhIHNwZWNpYWwgaXRlbSBmb3IgaXQsIHdlIGRvbid0IGhhdmUgdG8gaGFuZGxl
IGl0cyBzaXplIGNoYW5nZXMuCisgICAgdm9pZCBzZXRTaXplQ2hhbmdlZChjb25zdCBJbnRTaXpl
JikgeyB9CisKK3ByaXZhdGU6CisgICAgUVdlYkZyYW1lKiBtX2ZyYW1lOworICAgIFRleHR1cmVN
YXBwZXJDb250ZW50TGF5ZXIqIG1fbGF5ZXI7Cit9OworCitjbGFzcyBQbGF0Zm9ybUxheWVyUHJv
eHlRV2lkZ2V0IDogcHVibGljIFBsYXRmb3JtTGF5ZXJQcm94eVF0IHsKK3B1YmxpYzoKKyAgICBQ
bGF0Zm9ybUxheWVyUHJveHlRV2lkZ2V0KFFXZWJGcmFtZSogZnJhbWUsIFRleHR1cmVNYXBwZXJD
b250ZW50TGF5ZXIqIGxheWVyLCBRV2lkZ2V0KiB3aWRnZXQpCisgICAgICAgIDogUGxhdGZvcm1M
YXllclByb3h5UXQoZnJhbWUsIGxheWVyLCB3aWRnZXQpCisgICAgICAgICwgbV93aWRnZXQod2lk
Z2V0KQorICAgIHsKKyAgICAgICAgaWYgKG1fd2lkZ2V0KQorICAgICAgICAgICAgbV93aWRnZXQt
Pmluc3RhbGxFdmVudEZpbHRlcih0aGlzKTsKKyAgICB9CisKKyAgICAvLyBXZSBkb24ndCB3YW50
IGEgaHVnZSByZWdpb24tY2xpcCBvbiB0aGUgY29tcG9zaXRpbmcgbGF5ZXJzOyBpbnN0ZWFkIHdl
IHVuaXRlIHRoZSByZWN0YW5nbGVzIHRvZ2V0aGVyCisgICAgLy8gYW5kIGNsZWFyIHRoZW0gd2hl
biB0aGUgcGFpbnQgYWN0dWFsbHkgb2NjdXJzLgorICAgIGJvb2wgZXZlbnRGaWx0ZXIoUU9iamVj
dCogb2JqZWN0LCBRRXZlbnQqIGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKG9iamVjdCA9PSBt
X3dpZGdldCAmJiBldmVudC0+dHlwZSgpID09IFFFdmVudDo6UGFpbnQpCisgICAgICAgICAgICBt
X2RpcnR5UmVjdCA9IFFSZWN0KCk7CisgICAgICAgIHJldHVybiBRT2JqZWN0OjpldmVudEZpbHRl
cihvYmplY3QsIGV2ZW50KTsKKyAgICB9CisKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpCisg
ICAgeworICAgICAgICBpZiAobV93aWRnZXQpCisgICAgICAgICAgICBtX3dpZGdldC0+dXBkYXRl
KCk7CisgICAgfQorCisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVj
dCYgcmVjdCkKKyAgICB7CisgICAgICAgIG1fZGlydHlSZWN0IHw9IHJlY3Q7CisgICAgICAgIG1f
d2lkZ2V0LT51cGRhdGUobV9kaXJ0eVJlY3QpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBRUmVj
dCBtX2RpcnR5UmVjdDsKKyAgICBRV2lkZ2V0KiBtX3dpZGdldDsKK307CisKK2NsYXNzIFBsYXRm
b3JtTGF5ZXJQcm94eVFHcmFwaGljc09iamVjdCA6IHB1YmxpYyBQbGF0ZnJvbUxheWVyUHJveHlR
dCB7CitwdWJsaWM6CisgICAgUGxhdGZvcm1MYXllclByb3h5UUdyYXBoaWNzV2lkZ2V0KFFXZWJG
cmFtZSogZnJhbWUsIFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIqIGxheWVyLCBRR3JhcGhpY3NP
YmplY3QqIG9iamVjdCkKKyAgICAgICAgOiBRT2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX2dy
YXBoaWNzSXRlbShncmFwaGljc09iamVjdCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXkoKQorICAgIHsKKyAgICAgICAgaWYgKG1fZ3JhcGhpY3NJdGVtKQorICAgICAg
ICAgICAgbV9ncmFwaGljc0l0ZW0tPnVwZGF0ZSgpOworICAgIH0KKworICAgIHZvaWQgc2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICBpZiAo
bV9ncmFwaGljc0l0ZW0pCisgICAgICAgICAgICBtX2dyYXBoaWNzSXRlbS0+dXBkYXRlKFFSZWN0
RihyZWN0KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFFHcmFwaGljc0l0ZW0qIG1fZ3JhcGhp
Y3NJdGVtOworfTsKKwordm9pZCBQYWdlQ2xpZW50UVdpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5
ZXIoVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIGxheWVyKQoreworICAgIGlmIChsYXllcikg
eworICAgICAgICBwbGF0Zm9ybUxheWVyUHJveHkgPSBuZXcgUGxhdGZvcm1MYXllclByb3h5UVdp
ZGdldChwYWdlLT5tYWluRnJhbWUoKSwgc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckNvbnRlbnRM
YXllcio+KGxheWVyKSwgdmlldyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZGVsZXRl
IHBsYXRmb3JtTGF5ZXJQcm94eTsKKyAgICBwbGF0Zm9ybUxheWVyUHJveHkgPSAwOworfQorCit2
b2lkIFBhZ2VDbGllbnRRV2lkZ2V0OjptYXJrRm9yU3luYyhib29sIHNjaGVkdWxlU3luYykKK3sK
KyAgICBzeW5jVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIFBhZ2VDbGllbnRRV2lk
Z2V0OjpzeW5jTGF5ZXJzKFRpbWVyPFBhZ2VDbGllbnRRV2lkZ2V0PiopCit7CisgICAgUVdlYkZy
YW1lUHJpdmF0ZTo6Y29yZShwYWdlLT5tYWluRnJhbWUoKSktPnZpZXcoKS0+c3luY0NvbXBvc2l0
aW5nU3RhdGVSZWN1cnNpdmUoKTsKK30KKyNlbmRpZgorCiB2b2lkIFBhZ2VDbGllbnRRV2lkZ2V0
OjpzY3JvbGwoaW50IGR4LCBpbnQgZHksIGNvbnN0IFFSZWN0JiByZWN0VG9TY3JvbGwpCiB7CiAg
ICAgdmlldy0+c2Nyb2xsKHFyZWFsKGR4KSwgcXJlYWwoZHkpLCByZWN0VG9TY3JvbGwpOwpAQCAt
NTMsNiArMTY3LDEzIEBAIHZvaWQgUGFnZUNsaWVudFFXaWRnZXQ6OnNldElucHV0TWV0aG9kSGlu
dHMoUXQ6OklucHV0TWV0aG9kSGludHMgaGludHMpCiAgICAgdmlldy0+c2V0SW5wdXRNZXRob2RI
aW50cyhoaW50cyk7CiB9CiAKK1BhZ2VDbGllbnRRV2lkZ2V0Ojp+UGFnZUNsaWVudFFXaWRnZXQo
KQoreworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQorICAgIGRlbGV0ZSBwbGF0Zm9ybUxheWVyUHJveHk7CisjZW5kaWYKK30KKwogI2lmbmRl
ZiBRVF9OT19DVVJTT1IKIFFDdXJzb3IgUGFnZUNsaWVudFFXaWRnZXQ6OmN1cnNvcigpIGNvbnN0
CiB7CkBAIC0xMzQsNiArMjU1LDggQEAgdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojp1
cGRhdGUoY29uc3QgUVJlY3QmIGRpcnR5UmVjdCkKIAogdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNz
V2lkZ2V0OjpjcmVhdGVPckRlbGV0ZU92ZXJsYXkoKQogeworICAgIC8vIFdlIGRvbid0IHVzZSBh
biBvdmVybGF5IHdpdGggVGV4dHVyZU1hcHBlci4gSW5zdGVhZCwgdGhlIG92ZXJsYXkgaXMgZHJh
d24gaW5zaWRlIFFXZWJGcmFtZS4KKyNpZiAhVVNFKFRFWFRVUkVfTUFQUEVSKQogICAgIGJvb2wg
dXNlT3ZlcmxheSA9IGZhbHNlOwogICAgIGlmICghdmlld1Jlc2l6ZXNUb0NvbnRlbnRzKSB7CiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtMTU0LDYgKzI3Nyw3IEBAIHZvaWQg
UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6Y3JlYXRlT3JEZWxldGVPdmVybGF5KCkKICAgICAg
ICAgb3ZlcmxheS0+ZGVsZXRlTGF0ZXIoKTsKICAgICAgICAgb3ZlcmxheSA9IDA7CiAgICAgfQor
I2VuZGlmIC8vICFVU0UoVEVYVFVSRV9NQVBQRVIpCiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCkBAIC0xNjUsNyArMjg5LDE4IEBAIHZvaWQgUGFnZUNsaWVudFFHcmFwaGlj
c1dpZGdldDo6c3luY0xheWVycygpCiAgICAgfQogfQogCi12b2lkIFBhZ2VDbGllbnRRR3JhcGhp
Y3NXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKFFHcmFwaGljc0l0ZW0qIGxheWVyKQorI2lm
IFVTRShURVhUVVJFX01BUFBFUikKK3ZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0
Um9vdEdyYXBoaWNzTGF5ZXIoVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIGxheWVyKQorewor
ICAgIGlmIChsYXllcikgeworICAgICAgICBwbGF0Zm9ybUxheWVyUHJveHkgPSBuZXcgUGxhdGZv
cm1MYXllclByb3h5UUdyYXBoaWNzT2JqZWN0KHBhZ2UtPm1haW5GcmFtZSgpLCBzdGF0aWNfY2Fz
dDxUZXh0dXJlTWFwcGVyQ29udGVudExheWVyKj4obGF5ZXIpLCAwLCB2aWV3KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBkZWxldGUgcGxhdGZvcm1MYXllclByb3h5OworICAgIHBsYXRm
b3JtTGF5ZXJQcm94eSA9IDA7Cit9CisjZWxzZQordm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lk
Z2V0OjpzZXRSb290R3JhcGhpY3NMYXllcihRR3JhcGhpY3NPYmplY3QqIGxheWVyKQogewogICAg
IGlmIChyb290R3JhcGhpY3NMYXllcikgewogICAgICAgICByb290R3JhcGhpY3NMYXllci5kYXRh
KCktPnNldFBhcmVudEl0ZW0oMCk7CkBAIC0xNzMsNyArMzA4LDcgQEAgdm9pZCBQYWdlQ2xpZW50
UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcihRR3JhcGhpY3NJdGVtKiBsYXll
cikKICAgICAgICAgUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShwYWdlLT5tYWluRnJhbWUoKSktPnZp
ZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVSZWN1cnNpdmUoKTsKICAgICB9CiAKLSAgICByb290
R3JhcGhpY3NMYXllciA9IGxheWVyID8gbGF5ZXItPnRvR3JhcGhpY3NPYmplY3QoKSA6IDA7Cisg
ICAgcm9vdEdyYXBoaWNzTGF5ZXIgPSBsYXllcjsKIAogICAgIGlmIChsYXllcikgewogICAgICAg
ICBsYXllci0+c2V0RmxhZyhRR3JhcGhpY3NJdGVtOjpJdGVtQ2xpcHNDaGlsZHJlblRvU2hhcGUs
IHRydWUpOwpAQCAtMTgyLDYgKzMxNyw3IEBAIHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdl
dDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoUUdyYXBoaWNzSXRlbSogbGF5ZXIpCiAgICAgfQogICAg
IGNyZWF0ZU9yRGVsZXRlT3ZlcmxheSgpOwogfQorI2VuZGlmCiAKIHZvaWQgUGFnZUNsaWVudFFH
cmFwaGljc1dpZGdldDo6bWFya0ZvclN5bmMoYm9vbCBzY2hlZHVsZVN5bmMpCiB7CmRpZmYgLS1n
aXQgYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmggYi9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmgKaW5kZXggNzAxNGZkMi4uNmQ5ODlmYSAxMDA2
NDQKLS0tIGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oCisrKyBiL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuaApAQCAtNDEsMTUgKzQxLDI5IEBA
CiAKICNpbmNsdWRlIDxTZXR0aW5ncy5oPgogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBQYWdlQ2xpZW50UVdpZGdldCA6IHB1YmxpYyBRV2ViUGFnZUNsaWVudCB7CitjbGFzcyBQYWdl
Q2xpZW50UVdpZGdldCA6IHB1YmxpYyBRV2ViUGFnZUNsaWVudAorI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgICAgICAsIHB1YmxpYyB2
aXJ0dWFsIFRleHR1cmVNYXBwZXJMYXllckNsaWVudAorI2VuZGlmCit7CiBwdWJsaWM6Ci0gICAg
UGFnZUNsaWVudFFXaWRnZXQoUVdpZGdldCogdmlldykKLSAgICAgICAgOiB2aWV3KHZpZXcpCisg
ICAgUGFnZUNsaWVudFFXaWRnZXQoUVdpZGdldCogbmV3VmlldywgUVdlYlBhZ2UqIG5ld1BhZ2Up
CisgICAgICAgIDogdmlldyhuZXdWaWV3KQorICAgICAgICAsIHBhZ2UobmV3UGFnZSkKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICAg
ICAgLCBzeW5jVGltZXIodGhpcywgJlBhZ2VDbGllbnRRV2lkZ2V0OjpzeW5jTGF5ZXJzKQorICAg
ICAgICAsIHBsYXRmb3JtTGF5ZXJQcm94eSgwKQorI2VuZGlmCiAgICAgewogICAgICAgICBRX0FT
U0VSVCh2aWV3KTsKICAgICB9CisgICAgdmlydHVhbCB+UGFnZUNsaWVudFFXaWRnZXQoKTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBpc1FXaWRnZXRDbGllbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CiAKQEAgLTc4LDYgKzkyLDIxIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFFSZWN0RiB3aW5kb3dS
ZWN0KCkgY29uc3Q7CiAKICAgICBRV2lkZ2V0KiB2aWV3OworICAgIFFXZWJQYWdlKiBwYWdlOwor
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIp
CisgICAgdmlydHVhbCB2b2lkIHNldFJvb3RHcmFwaGljc0xheWVyKFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyKiBsYXllcik7CisgICAgdmlydHVhbCB2b2lkIG1hcmtGb3JTeW5jKGJvb2wgc2No
ZWR1bGVTeW5jKTsKKyAgICB2b2lkIHN5bmNMYXllcnMoVGltZXI8UGFnZUNsaWVudFFXaWRnZXQ+
Kik7CisjZW5kaWYKKworICAgIC8vIFFHcmFwaGljc1dlYlZpZXcgY2FuIHJlbmRlciBjb21wb3Np
dGVkIGxheWVycworICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5n
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgVGltZXI8UGFnZUNsaWVudFFXaWRnZXQ+
IHN5bmNUaW1lcjsKKyAgICBQbGF0Zm9ybUxheWVyUHJveHlRdCogcGxhdGZvcm1MYXllclByb3h5
OworI2VuZGlmCiB9OwogCiAvLyB0aGUgb3ZlcmxheSBpcyBoZXJlIGZvciBvbmUgcmVhc29uIG9u
bHk6IHRvIGhhdmUgdGhlIHNjcm9sbC1iYXJzIGFuZCBvdGhlcgpAQCAtMTE0LDEzICsxNDMsMjAg
QEAgY2xhc3MgUUdyYXBoaWNzSXRlbU92ZXJsYXkgOiBwdWJsaWMgUUdyYXBoaWNzT2JqZWN0IHsK
IH07CiAKIAotY2xhc3MgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCA6IHB1YmxpYyBRV2ViUGFn
ZUNsaWVudCB7CitjbGFzcyBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0IDogcHVibGljIFFXZWJQ
YWdlQ2xpZW50CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVS
RV9NQVBQRVIpCisgICAgICAgICwgcHVibGljIHZpcnR1YWwgVGV4dHVyZU1hcHBlckxheWVyQ2xp
ZW50CisjZW5kaWYKK3sKIHB1YmxpYzoKLSAgICBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0KFFH
cmFwaGljc1dlYlZpZXcqIHYsIFFXZWJQYWdlKiBwKQotICAgICAgICA6IHZpZXcodikKLSAgICAg
ICAgLCBwYWdlKHApCisgICAgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldChRR3JhcGhpY3NXZWJW
aWV3KiBuZXdWaWV3LCBRV2ViUGFnZSogbmV3UGFnZSkKKyAgICAgICAgOiB2aWV3KG5ld1ZpZXcp
CisgICAgICAgICwgcGFnZShuZXdQYWdlKQogICAgICAgICAsIHZpZXdSZXNpemVzVG9Db250ZW50
cyhmYWxzZSkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaWYgVVNFKFRFWFRV
UkVfTUFQUEVSKQorICAgICAgICAsIHBsYXRmb3JtTGF5ZXJQcm94eSgwKQorI2VuZGlmCiAgICAg
ICAgICwgc2hvdWxkU3luYyhmYWxzZSkKICNlbmRpZgogICAgICAgICAsIG92ZXJsYXkoMCkKQEAg
LTE2OCw3ICsyMDQsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Um9vdEdyYXBoaWNzTGF5ZXIoUUdyYXBo
aWNzSXRlbSogbGF5ZXIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihQ
bGF0Zm9ybUxheWVyKiBsYXllcik7CiAgICAgdmlydHVhbCB2b2lkIG1hcmtGb3JTeW5jKGJvb2wg
c2NoZWR1bGVTeW5jKTsKICAgICB2b2lkIHN5bmNMYXllcnMoKTsKIApAQCAtMTgzLDggKzIxOSwx
MSBAQCBwdWJsaWM6CiAgICAgYm9vbCB2aWV3UmVzaXplc1RvQ29udGVudHM7CiAKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIFBs
YXRmb3JtTGF5ZXJQcm94eVF0KiBwbGF0Zm9ybUxheWVyUHJveHk7CisjZWxzZQogICAgIFFXZWFr
UG9pbnRlcjxRR3JhcGhpY3NPYmplY3Q+IHJvb3RHcmFwaGljc0xheWVyOwotCisjZW5kaWYKICAg
ICAvLyB3ZSBoYXZlIHRvIGZsdXNoIHF1aXRlIG9mdGVuLCBzbyB3ZSB1c2UgYSBtZXRhLW1ldGhv
ZCBpbnN0ZWFkIG9mIFFUaW1lcjo6c2luZ2xlU2hvdCBmb3IgcHV0dGluZyB0aGUgZXZlbnQgaW4g
dGhlIHF1ZXVlCiAgICAgUU1ldGFNZXRob2Qgc3luY01ldGFNZXRob2Q7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71768</attachid>
            <date>2010-10-25 10:44:10 -0700</date>
            <delta_ts>2010-10-25 12:19:54 -0700</delta_ts>
            <desc>Patch 4: glue layer (PageClientQt) opt-in for TextureMapper</desc>
            <filename>patch-47070.diff</filename>
            <type>text/plain</type>
            <size>17323</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzU2ZmE4ZC4uZjhmZjIwZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0xMC0yNSAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5p
dGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDcwNzAKKworICAgICAgICBHbHVlIGxheWVyIChXZWJDb3JlU3VwcG9ydCkg
Y2hhbmdlcyB0byBhbGxvdyBjb25uZWN0aW5nIFRleHR1cmVNYXBwZXIgdG8gYSBRdCBQYWdlQ2xp
ZW50LCBpLmUuCisgICAgICAgIGEgUVdlYlZpZXcgb3IgYSBRR3JhcGhpY3NXZWJWaWV3LiBUaGlz
IGVuYWJsZXMgdGhlIG5ldyB0eXBlLCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciwgdG8gYmUg
cmVjb2duaXplZCBib3RoIGJ5CisgICAgICAgIHRoZSBjb21wb3NpdG9yIGFuZCBieSB0aGUgcGFn
ZSBjbGllbnQuCisgICAgICAgIE5vdGUgdGhhdCB0aGlzIGlzIHRlbXBvcmFyaWx5IGFuIG9wdC1p
biwgdW5kZXIgVVNFKFRFWFRVUkVfTUFQUEVSKQorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gV0lQ
IG9uIGEgbmV3IGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NMYXllci5oOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50Lmg6
CisgICAgICAgIChRV2ViUGFnZUNsaWVudDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIpOgorCiAyMDEw
LTEwLTI0ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmgKaW5kZXggYWQ0ZDA1Ni4uYTQ3NjA1NCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKQEAgLTU3LDExICs1NywxOSBAQCB0eXBlZGVmIFdL
Q0FDRkxheWVyIFBsYXRmb3JtTGF5ZXI7CiB0eXBlZGVmIHZvaWQqIE5hdGl2ZUxheWVyOwogfQog
I2VsaWYgUExBVEZPUk0oUVQpCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXI7Cit0eXBlZGVmIFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyIFBsYXRmb3JtTGF5ZXI7Cit0eXBlZGVmIFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyKiBOYXRpdmVMYXllcjsKK307CisjZWxzZQogUVRfQkVHSU5fTkFNRVNQ
QUNFCi1jbGFzcyBRR3JhcGhpY3NJdGVtOworY2xhc3MgUUdyYXBoaWNzT2JqZWN0OwogUVRfRU5E
X05BTUVTUEFDRQotdHlwZWRlZiBRR3JhcGhpY3NJdGVtIFBsYXRmb3JtTGF5ZXI7Ci10eXBlZGVm
IFFHcmFwaGljc0l0ZW0qIE5hdGl2ZUxheWVyOwordHlwZWRlZiBRR3JhcGhpY3NPYmplY3QgUGxh
dGZvcm1MYXllcjsKK3R5cGVkZWYgUUdyYXBoaWNzT2JqZWN0KiBOYXRpdmVMYXllcjsKKyNlbmRp
ZgogI2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBM
YXllckNocm9taXVtOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RV2ViUGFnZUNs
aWVudC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oCmluZGV4IGY1ZDhj
MWIuLjk1YWU4OGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVdlYlBhZ2VDbGll
bnQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50LmgKQEAgLTMwLDEx
ICszMCwxNCBAQAogI2luY2x1ZGUgPFFDdXJzb3I+CiAjZW5kaWYKIAorI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKyNpbmNsdWRlIDxHcmFwaGljc0xheWVyLmg+CisjZW5kaWYKKwog
I2luY2x1ZGUgPFFQYWxldHRlPgogI2luY2x1ZGUgPFFSZWN0PgogCiBRVF9CRUdJTl9OQU1FU1BB
Q0UKLWNsYXNzIFFHcmFwaGljc0l0ZW07CiBjbGFzcyBRU3R5bGU7CiBRVF9FTkRfTkFNRVNQQUNF
CiAKQEAgLTQ5LDggKzUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRJbnB1dE1l
dGhvZEVuYWJsZWQoYm9vbCBlbmFibGUpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaW5wdXRNZXRo
b2RFbmFibGVkKCkgY29uc3QgPSAwOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
LSAgICAvLyB0aGlzIGdldHMgY2FsbGVkIHdoZW4gd2Ugc3RhcnQvc3RvcCBjb21wb3NpdGluZy4K
LSAgICB2aXJ0dWFsIHZvaWQgc2V0Um9vdEdyYXBoaWNzTGF5ZXIoUUdyYXBoaWNzSXRlbSogbGF5
ZXIpIHt9CisgICAgdmlydHVhbCB2b2lkIHNldFJvb3RHcmFwaGljc0xheWVyKFBsYXRmb3JtTGF5
ZXIqIGxheWVyKSB7IH0KIAogICAgIC8vIHRoaXMgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgY29tcG9z
aXRvciB3YW50cyB1cyB0byBzeW5jIHRoZSBsYXllcnMKICAgICAvLyBpZiBzY2hlZHVsZVN5bmMg
aXMgdHJ1ZSwgd2Ugc2NoZWR1bGUgYSBzeW5jIG91cnNlbHZlcy4gb3RoZXJ3aXNlLApkaWZmIC0t
Z2l0IGEvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuaCBiL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1l
LmgKaW5kZXggZTc4ZmIwNy4uYTU5OGE1NiAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2Vi
ZnJhbWUuaAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5oCkBAIC01Niw2ICs1Niw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBXaWRnZXRQcml2YXRlOwogICAgIGNsYXNz
IEZyYW1lTG9hZGVyQ2xpZW50UXQ7CiAgICAgY2xhc3MgQ2hyb21lQ2xpZW50UXQ7CisgICAgY2xh
c3MgUGxhdGZvcm1MYXllclByb3h5UXQ7CiB9CiBjbGFzcyBRV2ViRnJhbWVEYXRhOwogY2xhc3Mg
UVdlYkhpdFRlc3RSZXN1bHRQcml2YXRlOwpAQCAtMjMxLDYgKzIzMiw3IEBAIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OldpZGdldFByaXZhdGU7CiAgICAgZnJpZW5kIGNsYXNz
IFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ7CiAgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6
OkNocm9tZUNsaWVudFF0OworICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpQbGF0Zm9ybUxheWVy
UHJveHlRdDsKICAgICBRV2ViRnJhbWVQcml2YXRlICpkOwogfTsKIApkaWZmIC0tZ2l0IGEvV2Vi
S2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oIGIvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oCmlu
ZGV4IDc5MTg3YWIuLjU2NjBiZDEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1l
X3AuaAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmgKQEAgLTM4LDYgKzM4LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEZyYW1lVmlldzsKICAgICBjbGFzcyBIVE1M
RnJhbWVPd25lckVsZW1lbnQ7CiAgICAgY2xhc3MgU2Nyb2xsYmFyOworICAgIGNsYXNzIFRleHR1
cmVNYXBwZXJDb250ZW50TGF5ZXI7CiB9CiBjbGFzcyBRV2ViUGFnZTsKIApAQCAtNzIsNiArNzMs
OSBAQCBwdWJsaWM6CiAgICAgICAgICwgYWxsb3dzU2Nyb2xsaW5nKHRydWUpCiAgICAgICAgICwg
bWFyZ2luV2lkdGgoLTEpCiAgICAgICAgICwgbWFyZ2luSGVpZ2h0KC0xKQorI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgICAgICAsIHJv
b3RHcmFwaGljc0xheWVyKDApCisjZW5kaWYKICAgICAgICAgLCB6b29tVGV4dE9ubHkoZmFsc2Up
CiAgICAgICAgIHt9CiAgICAgdm9pZCBpbml0KFFXZWJGcmFtZSogcWZyYW1lLCBRV2ViRnJhbWVE
YXRhKiBmcmFtZURhdGEpOwpAQCAtMTAwLDYgKzEwNCw5IEBAIHB1YmxpYzoKICAgICBib29sIGFs
bG93c1Njcm9sbGluZzsKICAgICBpbnQgbWFyZ2luV2lkdGg7CiAgICAgaW50IG1hcmdpbkhlaWdo
dDsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBF
UikKKyAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ29udGVudExheWVyKiByb290R3JhcGhpY3NM
YXllcjsKKyNlbmRpZgogICAgIGJvb2wgem9vbVRleHRPbmx5OwogfTsKIApkaWZmIC0tZ2l0IGEv
V2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAgYi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcApp
bmRleCAyMTc3YjQxLi5lYWJhYjY5IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdl
LmNwcAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcApAQCAtMTg1MCw3ICsxODUwLDcg
QEAgdm9pZCBRV2ViUGFnZTo6c2V0VmlldyhRV2lkZ2V0KiB2aWV3KQogICAgIH0KIAogICAgIGlm
ICh2aWV3KQotICAgICAgICBkLT5jbGllbnQgPSBuZXcgUGFnZUNsaWVudFFXaWRnZXQodmlldyk7
CisgICAgICAgIGQtPmNsaWVudCA9IG5ldyBQYWdlQ2xpZW50UVdpZGdldCh2aWV3LCB0aGlzKTsK
IH0KIAogLyohCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvV2ViS2l0L3F0L0No
YW5nZUxvZwppbmRleCA5NzBiMDlkLi5hODJiOWQyIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQ2hh
bmdlTG9nCisrKyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAxMC0x
MC0yNSAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0g
VGV4dHVyZSBtYXBwZXIgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcwNzAKKworICAgICAgICBHbHVlIGxheWVy
IChXZWJDb3JlU3VwcG9ydCkgY2hhbmdlcyB0byBhbGxvdyBjb25uZWN0aW5nIFRleHR1cmVNYXBw
ZXIgdG8gYSBRdCBQYWdlQ2xpZW50LCBpLmUuCisgICAgICAgIGEgUVdlYlZpZXcgb3IgYSBRR3Jh
cGhpY3NXZWJWaWV3LiBUaGlzIGVuYWJsZXMgdGhlIG5ldyB0eXBlLCBUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllciwgdG8gYmUgcmVjb2duaXplZCBib3RoIGJ5CisgICAgICAgIHRoZSBjb21wb3Np
dG9yIGFuZCBieSB0aGUgcGFnZSBjbGllbnQuCisgICAgICAgIE5vdGUgdGhhdCB0aGlzIGlzIHRl
bXBvcmFyaWx5IGFuIG9wdC1pbiwgdW5kZXIgVVNFKFRFWFRVUkVfTUFQUEVSKQorCisgICAgICAg
ICogQXBpL3F3ZWJmcmFtZS5oOgorICAgICAgICAqIEFwaS9xd2ViZnJhbWVfcC5oOgorICAgICAg
ICAoUVdlYkZyYW1lUHJpdmF0ZTo6UVdlYkZyYW1lUHJpdmF0ZSk6CisgICAgICAgICogQXBpL3F3
ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQYWdlOjpzZXRWaWV3KToKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVD
bGllbnRRdDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L1BhZ2VDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUxheWVyUHJv
eHlRdDo6UGxhdGZvcm1MYXllclByb3h5UXQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1M
YXllclByb3h5UXQ6On5QbGF0Zm9ybUxheWVyUHJveHlRdCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUxheWVyUHJveHlRdDo6c2V0U2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1MYXllclByb3h5UVdpZGdldDo6UGxhdGZvcm1MYXllclByb3h5UVdpZGdldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUxheWVyUHJveHlRV2lkZ2V0OjpldmVudEZpbHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUxheWVyUHJveHlRV2lkZ2V0OjpzZXROZWVkc0Rp
c3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1MYXllclByb3h5UVdpZGdldDo6c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXJQcm94
eVFHcmFwaGljc09iamVjdDo6UGxhdGZvcm1MYXllclByb3h5UUdyYXBoaWNzV2lkZ2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXJQcm94eVFHcmFwaGljc09iamVjdDo6c2V0TmVl
ZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXJQcm94eVFHcmFwaGlj
c09iamVjdDo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VD
bGllbnRRV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlQ2xpZW50UVdpZGdldDo6bWFya0ZvclN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNs
aWVudFFXaWRnZXQ6OnN5bmNMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFH
cmFwaGljc1dpZGdldDo6dXBkYXRlQ29tcG9zaXRpbmdTY3JvbGxQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpjcmVhdGVPckRlbGV0ZU92ZXJs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9v
dEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5o
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFXaWRnZXQ6OlBhZ2VDbGllbnRRV2lkZ2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRV2lkZ2V0OjphbGxvd3NBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRn
ZXQ6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQpOgorCiAyMDEwLTEwLTIyICBTYW0gV2Vpbmln
ICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29u
LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNw
cCBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAKaW5kZXggYmZl
MjlhOS4uZjBkMzkwMyAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudFF0LmNwcAorKysgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
UXQuY3BwCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVk
ZSAiR2VvbG9jYXRpb24uaCIKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0jaW5j
bHVkZSAiR3JhcGhpY3NMYXllclF0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2Vu
ZGlmCiAjaW5jbHVkZSAiR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuaCIKICNpbmNsdWRl
ICJIaXRUZXN0UmVzdWx0LmgiCkBAIC01OTEsNyArNTkxLDcgQEAgdm9pZCBDaHJvbWVDbGllbnRR
dDo6Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKEZyYW1lKiBmcmFt
ZSwgR2UKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1l
KiBmcmFtZSwgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKIHsKICAgICBpZiAocGxhdGZv
cm1QYWdlQ2xpZW50KCkpCi0gICAgICAgIHBsYXRmb3JtUGFnZUNsaWVudCgpLT5zZXRSb290R3Jh
cGhpY3NMYXllcihncmFwaGljc0xheWVyID8gZ3JhcGhpY3NMYXllci0+bmF0aXZlTGF5ZXIoKSA6
IDApOworICAgICAgICBwbGF0Zm9ybVBhZ2VDbGllbnQoKS0+c2V0Um9vdEdyYXBoaWNzTGF5ZXIo
Z3JhcGhpY3NMYXllciA/IGdyYXBoaWNzTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IDApOwogfQog
CiB2b2lkIENocm9tZUNsaWVudFF0OjpzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0
aW9uKCkKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQu
Y3BwIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAKaW5kZXggOWFh
MDFhMi4uNGU1MWY4MSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VD
bGllbnRRdC5jcHAKKysrIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5j
cHAKQEAgLTIxLDEzICsyMSwxMjcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2luY2x1ZGUg
IlBhZ2VDbGllbnRRdC5oIgorI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllci5oIgogCiAjaWYgZGVmaW5lZChRX1dTX1gxMSkKICNpbmNsdWRlIDxRWDExSW5mbz4KICNl
bmRpZgogCisjaWZkZWYgUVRfT1BFTkdMX0xJQgorI2luY2x1ZGUgPFFHTFdpZGdldD4KKyNlbmRp
ZgogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpICAgIAorY2xhc3MgUGxhdGZvcm1MYXllclByb3h5UXQg
OiBwdWJsaWMgUU9iamVjdCwgcHVibGljIHZpcnR1YWwgVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50
IHsKK3B1YmxpYzoKKyAgICBQbGF0Zm9ybUxheWVyUHJveHlRdChRV2ViRnJhbWUqIGZyYW1lLCBU
ZXh0dXJlTWFwcGVyQ29udGVudExheWVyKiBsYXllciwgUU9iamVjdCogb2JqZWN0KQorICAgICAg
ICA6IFFPYmplY3Qob2JqZWN0KQorICAgICAgICAsIG1fZnJhbWUoZnJhbWUpCisgICAgICAgICwg
bV9sYXllcihsYXllcikKKyAgICB7CisgICAgICAgIGlmIChtX2xheWVyKQorICAgICAgICAgICAg
bV9sYXllci0+c2V0UGxhdGZvcm1MYXllckNsaWVudCh0aGlzKTsKKyAgICAgICAgbV9mcmFtZS0+
ZC0+cm9vdEdyYXBoaWNzTGF5ZXIgPSBtX2xheWVyOworICAgIH0KKworICAgIHZpcnR1YWwgflBs
YXRmb3JtTGF5ZXJQcm94eVF0KCkKKyAgICB7CisgICAgICAgIGlmIChtX2xheWVyKQorICAgICAg
ICAgICAgbV9sYXllci0+c2V0UGxhdGZvcm1MYXllckNsaWVudCgwKTsKKyAgICAgICAgaWYgKG1f
ZnJhbWUtPmQpCisgICAgICAgICAgICBtX2ZyYW1lLT5kLT5yb290R3JhcGhpY3NMYXllciA9IDA7
CisgICAgfQorCisgICAgLy8gU2luY2Ugd2UganVzdCBwYWludCB0aGUgY29tcG9zaXRlZCB0cmVl
IGFuZCBuZXZlciBjcmVhdGUgYSBzcGVjaWFsIGl0ZW0gZm9yIGl0LCB3ZSBkb24ndCBoYXZlIHRv
IGhhbmRsZSBpdHMgc2l6ZSBjaGFuZ2VzLgorICAgIHZvaWQgc2V0U2l6ZUNoYW5nZWQoY29uc3Qg
SW50U2l6ZSYpIHsgfQorCitwcml2YXRlOgorICAgIFFXZWJGcmFtZSogbV9mcmFtZTsKKyAgICBU
ZXh0dXJlTWFwcGVyQ29udGVudExheWVyKiBtX2xheWVyOworfTsKKworY2xhc3MgUGxhdGZvcm1M
YXllclByb3h5UVdpZGdldCA6IHB1YmxpYyBQbGF0Zm9ybUxheWVyUHJveHlRdCB7CitwdWJsaWM6
CisgICAgUGxhdGZvcm1MYXllclByb3h5UVdpZGdldChRV2ViRnJhbWUqIGZyYW1lLCBUZXh0dXJl
TWFwcGVyQ29udGVudExheWVyKiBsYXllciwgUVdpZGdldCogd2lkZ2V0KQorICAgICAgICA6IFBs
YXRmb3JtTGF5ZXJQcm94eVF0KGZyYW1lLCBsYXllciwgd2lkZ2V0KQorICAgICAgICAsIG1fd2lk
Z2V0KHdpZGdldCkKKyAgICB7CisgICAgICAgIGlmIChtX3dpZGdldCkKKyAgICAgICAgICAgIG1f
d2lkZ2V0LT5pbnN0YWxsRXZlbnRGaWx0ZXIodGhpcyk7CisgICAgfQorCisgICAgLy8gV2UgZG9u
J3Qgd2FudCBhIGh1Z2UgcmVnaW9uLWNsaXAgb24gdGhlIGNvbXBvc2l0aW5nIGxheWVyczsgaW5z
dGVhZCB3ZSB1bml0ZSB0aGUgcmVjdGFuZ2xlcyB0b2dldGhlcgorICAgIC8vIGFuZCBjbGVhciB0
aGVtIHdoZW4gdGhlIHBhaW50IGFjdHVhbGx5IG9jY3Vycy4KKyAgICBib29sIGV2ZW50RmlsdGVy
KFFPYmplY3QqIG9iamVjdCwgUUV2ZW50KiBldmVudCkKKyAgICB7CisgICAgICAgIGlmIChvYmpl
Y3QgPT0gbV93aWRnZXQgJiYgZXZlbnQtPnR5cGUoKSA9PSBRRXZlbnQ6OlBhaW50KQorICAgICAg
ICAgICAgbV9kaXJ0eVJlY3QgPSBRUmVjdCgpOworICAgICAgICByZXR1cm4gUU9iamVjdDo6ZXZl
bnRGaWx0ZXIob2JqZWN0LCBldmVudCk7CisgICAgfQorCisgICAgdm9pZCBzZXROZWVkc0Rpc3Bs
YXkoKQorICAgIHsKKyAgICAgICAgaWYgKG1fd2lkZ2V0KQorICAgICAgICAgICAgbV93aWRnZXQt
PnVwZGF0ZSgpOworICAgIH0KKworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0
IEludFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICBtX2RpcnR5UmVjdCB8PSByZWN0OworICAg
ICAgICBtX3dpZGdldC0+dXBkYXRlKG1fZGlydHlSZWN0KTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgUVJlY3QgbV9kaXJ0eVJlY3Q7CisgICAgUVdpZGdldCogbV93aWRnZXQ7Cit9OworCitjbGFz
cyBQbGF0Zm9ybUxheWVyUHJveHlRR3JhcGhpY3NPYmplY3QgOiBwdWJsaWMgUGxhdGZyb21MYXll
clByb3h5UXQgeworcHVibGljOgorICAgIFBsYXRmb3JtTGF5ZXJQcm94eVFHcmFwaGljc1dpZGdl
dChRV2ViRnJhbWUqIGZyYW1lLCBUZXh0dXJlTWFwcGVyQ29udGVudExheWVyKiBsYXllciwgUUdy
YXBoaWNzT2JqZWN0KiBvYmplY3QpCisgICAgICAgIDogUU9iamVjdChvYmplY3QpCisgICAgICAg
ICwgbV9ncmFwaGljc0l0ZW0oZ3JhcGhpY3NPYmplY3QpCisgICAgeworICAgIH0KKworICAgIHZv
aWQgc2V0TmVlZHNEaXNwbGF5KCkKKyAgICB7CisgICAgICAgIGlmIChtX2dyYXBoaWNzSXRlbSkK
KyAgICAgICAgICAgIG1fZ3JhcGhpY3NJdGVtLT51cGRhdGUoKTsKKyAgICB9CisKKyAgICB2b2lk
IHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAg
ICAgaWYgKG1fZ3JhcGhpY3NJdGVtKQorICAgICAgICAgICAgbV9ncmFwaGljc0l0ZW0tPnVwZGF0
ZShRUmVjdEYocmVjdCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBRR3JhcGhpY3NJdGVtKiBt
X2dyYXBoaWNzSXRlbTsKK307CisKK3ZvaWQgUGFnZUNsaWVudFFXaWRnZXQ6OnNldFJvb3RHcmFw
aGljc0xheWVyKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBsYXllcikKK3sKKyAgICBpZiAo
bGF5ZXIpIHsKKyAgICAgICAgcGxhdGZvcm1MYXllclByb3h5ID0gbmV3IFBsYXRmb3JtTGF5ZXJQ
cm94eVFXaWRnZXQocGFnZS0+bWFpbkZyYW1lKCksIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJD
b250ZW50TGF5ZXIqPihsYXllciksIHZpZXcpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGRlbGV0ZSBwbGF0Zm9ybUxheWVyUHJveHk7CisgICAgcGxhdGZvcm1MYXllclByb3h5ID0gMDsK
K30KKwordm9pZCBQYWdlQ2xpZW50UVdpZGdldDo6bWFya0ZvclN5bmMoYm9vbCBzY2hlZHVsZVN5
bmMpCit7CisgICAgc3luY1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBQYWdlQ2xp
ZW50UVdpZGdldDo6c3luY0xheWVycyhUaW1lcjxQYWdlQ2xpZW50UVdpZGdldD4qKQoreworICAg
IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUocGFnZS0+bWFpbkZyYW1lKCkpLT52aWV3KCktPnN5bmND
b21wb3NpdGluZ1N0YXRlUmVjdXJzaXZlKCk7Cit9CisjZW5kaWYKKwogdm9pZCBQYWdlQ2xpZW50
UVdpZGdldDo6c2Nyb2xsKGludCBkeCwgaW50IGR5LCBjb25zdCBRUmVjdCYgcmVjdFRvU2Nyb2xs
KQogewogICAgIHZpZXctPnNjcm9sbChxcmVhbChkeCksIHFyZWFsKGR5KSwgcmVjdFRvU2Nyb2xs
KTsKQEAgLTUzLDYgKzE2NywxMyBAQCB2b2lkIFBhZ2VDbGllbnRRV2lkZ2V0OjpzZXRJbnB1dE1l
dGhvZEhpbnRzKFF0OjpJbnB1dE1ldGhvZEhpbnRzIGhpbnRzKQogICAgIHZpZXctPnNldElucHV0
TWV0aG9kSGludHMoaGludHMpOwogfQogCitQYWdlQ2xpZW50UVdpZGdldDo6flBhZ2VDbGllbnRR
V2lkZ2V0KCkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhU
VVJFX01BUFBFUikKKyAgICBkZWxldGUgcGxhdGZvcm1MYXllclByb3h5OworI2VuZGlmCit9CisK
ICNpZm5kZWYgUVRfTk9fQ1VSU09SCiBRQ3Vyc29yIFBhZ2VDbGllbnRRV2lkZ2V0OjpjdXJzb3Io
KSBjb25zdAogewpAQCAtMTM0LDYgKzI1NSw4IEBAIHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dp
ZGdldDo6dXBkYXRlKGNvbnN0IFFSZWN0JiBkaXJ0eVJlY3QpCiAKIHZvaWQgUGFnZUNsaWVudFFH
cmFwaGljc1dpZGdldDo6Y3JlYXRlT3JEZWxldGVPdmVybGF5KCkKIHsKKyAgICAvLyBXZSBkb24n
dCB1c2UgYW4gb3ZlcmxheSB3aXRoIFRleHR1cmVNYXBwZXIuIEluc3RlYWQsIHRoZSBvdmVybGF5
IGlzIGRyYXduIGluc2lkZSBRV2ViRnJhbWUuCisjaWYgIVVTRShURVhUVVJFX01BUFBFUikKICAg
ICBib29sIHVzZU92ZXJsYXkgPSBmYWxzZTsKICAgICBpZiAoIXZpZXdSZXNpemVzVG9Db250ZW50
cykgewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTE1NCw2ICsyNzcsNyBA
QCB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OmNyZWF0ZU9yRGVsZXRlT3ZlcmxheSgp
CiAgICAgICAgIG92ZXJsYXktPmRlbGV0ZUxhdGVyKCk7CiAgICAgICAgIG92ZXJsYXkgPSAwOwog
ICAgIH0KKyNlbmRpZiAvLyAhVVNFKFRFWFRVUkVfTUFQUEVSKQogfQogCiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtMTY1LDcgKzI4OSwxOCBAQCB2b2lkIFBhZ2VDbGllbnRR
R3JhcGhpY3NXaWRnZXQ6OnN5bmNMYXllcnMoKQogICAgIH0KIH0KIAotdm9pZCBQYWdlQ2xpZW50
UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcihRR3JhcGhpY3NJdGVtKiBsYXll
cikKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCit2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRn
ZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBsYXll
cikKK3sKKyAgICBpZiAobGF5ZXIpIHsKKyAgICAgICAgcGxhdGZvcm1MYXllclByb3h5ID0gbmV3
IFBsYXRmb3JtTGF5ZXJQcm94eVFHcmFwaGljc09iamVjdChwYWdlLT5tYWluRnJhbWUoKSwgc3Rh
dGljX2Nhc3Q8VGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcio+KGxheWVyKSwgMCwgdmlldyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZGVsZXRlIHBsYXRmb3JtTGF5ZXJQcm94eTsKKyAg
ICBwbGF0Zm9ybUxheWVyUHJveHkgPSAwOworfQorI2Vsc2UKK3ZvaWQgUGFnZUNsaWVudFFHcmFw
aGljc1dpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoUUdyYXBoaWNzT2JqZWN0KiBsYXllcikK
IHsKICAgICBpZiAocm9vdEdyYXBoaWNzTGF5ZXIpIHsKICAgICAgICAgcm9vdEdyYXBoaWNzTGF5
ZXIuZGF0YSgpLT5zZXRQYXJlbnRJdGVtKDApOwpAQCAtMTczLDcgKzMwOCw3IEBAIHZvaWQgUGFn
ZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoUUdyYXBoaWNzSXRl
bSogbGF5ZXIpCiAgICAgICAgIFFXZWJGcmFtZVByaXZhdGU6OmNvcmUocGFnZS0+bWFpbkZyYW1l
KCkpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlUmVjdXJzaXZlKCk7CiAgICAgfQogCi0g
ICAgcm9vdEdyYXBoaWNzTGF5ZXIgPSBsYXllciA/IGxheWVyLT50b0dyYXBoaWNzT2JqZWN0KCkg
OiAwOworICAgIHJvb3RHcmFwaGljc0xheWVyID0gbGF5ZXI7CiAKICAgICBpZiAobGF5ZXIpIHsK
ICAgICAgICAgbGF5ZXItPnNldEZsYWcoUUdyYXBoaWNzSXRlbTo6SXRlbUNsaXBzQ2hpbGRyZW5U
b1NoYXBlLCB0cnVlKTsKQEAgLTE4Miw2ICszMTcsNyBAQCB2b2lkIFBhZ2VDbGllbnRRR3JhcGhp
Y3NXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKFFHcmFwaGljc0l0ZW0qIGxheWVyKQogICAg
IH0KICAgICBjcmVhdGVPckRlbGV0ZU92ZXJsYXkoKTsKIH0KKyNlbmRpZgogCiB2b2lkIFBhZ2VD
bGllbnRRR3JhcGhpY3NXaWRnZXQ6Om1hcmtGb3JTeW5jKGJvb2wgc2NoZWR1bGVTeW5jKQogewpk
aWZmIC0tZ2l0IGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oIGIvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oCmluZGV4IDcwMTRmZDIuLjZkOTg5
ZmEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuaAor
KysgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmgKQEAgLTQxLDE1ICs0
MSwyOSBAQAogCiAjaW5jbHVkZSA8U2V0dGluZ3MuaD4KIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2luY2x1ZGUgInRleG1hcC9UZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgUGFnZUNsaWVudFFXaWRnZXQgOiBwdWJsaWMgUVdlYlBhZ2VDbGllbnQgeworY2xh
c3MgUGFnZUNsaWVudFFXaWRnZXQgOiBwdWJsaWMgUVdlYlBhZ2VDbGllbnQKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICAgICAgLCBw
dWJsaWMgdmlydHVhbCBUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQKKyNlbmRpZgorewogcHVibGlj
OgotICAgIFBhZ2VDbGllbnRRV2lkZ2V0KFFXaWRnZXQqIHZpZXcpCi0gICAgICAgIDogdmlldyh2
aWV3KQorICAgIFBhZ2VDbGllbnRRV2lkZ2V0KFFXaWRnZXQqIG5ld1ZpZXcsIFFXZWJQYWdlKiBu
ZXdQYWdlKQorICAgICAgICA6IHZpZXcobmV3VmlldykKKyAgICAgICAgLCBwYWdlKG5ld1BhZ2Up
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIp
CisgICAgICAgICwgc3luY1RpbWVyKHRoaXMsICZQYWdlQ2xpZW50UVdpZGdldDo6c3luY0xheWVy
cykKKyAgICAgICAgLCBwbGF0Zm9ybUxheWVyUHJveHkoMCkKKyNlbmRpZgogICAgIHsKICAgICAg
ICAgUV9BU1NFUlQodmlldyk7CiAgICAgfQorICAgIHZpcnR1YWwgflBhZ2VDbGllbnRRV2lkZ2V0
KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNRV2lkZ2V0Q2xpZW50KCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogCkBAIC03OCw2ICs5MiwyMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBRUmVjdEYg
d2luZG93UmVjdCgpIGNvbnN0OwogCiAgICAgUVdpZGdldCogdmlldzsKKyAgICBRV2ViUGFnZSog
cGFnZTsKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVf
TUFQUEVSKQorICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllciogbGF5ZXIpOworICAgIHZpcnR1YWwgdm9pZCBtYXJrRm9yU3luYyhi
b29sIHNjaGVkdWxlU3luYyk7CisgICAgdm9pZCBzeW5jTGF5ZXJzKFRpbWVyPFBhZ2VDbGllbnRR
V2lkZ2V0PiopOworI2VuZGlmCisKKyAgICAvLyBRR3JhcGhpY3NXZWJWaWV3IGNhbiByZW5kZXIg
Y29tcG9zaXRlZCBsYXllcnMKKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIFRpbWVyPFBhZ2VDbGllbnRR
V2lkZ2V0PiBzeW5jVGltZXI7CisgICAgUGxhdGZvcm1MYXllclByb3h5UXQqIHBsYXRmb3JtTGF5
ZXJQcm94eTsKKyNlbmRpZgogfTsKIAogLy8gdGhlIG92ZXJsYXkgaXMgaGVyZSBmb3Igb25lIHJl
YXNvbiBvbmx5OiB0byBoYXZlIHRoZSBzY3JvbGwtYmFycyBhbmQgb3RoZXIKQEAgLTExNCwxMyAr
MTQzLDIwIEBAIGNsYXNzIFFHcmFwaGljc0l0ZW1PdmVybGF5IDogcHVibGljIFFHcmFwaGljc09i
amVjdCB7CiB9OwogCiAKLWNsYXNzIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQgOiBwdWJsaWMg
UVdlYlBhZ2VDbGllbnQgeworY2xhc3MgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCA6IHB1Ymxp
YyBRV2ViUGFnZUNsaWVudAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNF
KFRFWFRVUkVfTUFQUEVSKQorICAgICAgICAsIHB1YmxpYyB2aXJ0dWFsIFRleHR1cmVNYXBwZXJM
YXllckNsaWVudAorI2VuZGlmCit7CiBwdWJsaWM6Ci0gICAgUGFnZUNsaWVudFFHcmFwaGljc1dp
ZGdldChRR3JhcGhpY3NXZWJWaWV3KiB2LCBRV2ViUGFnZSogcCkKLSAgICAgICAgOiB2aWV3KHYp
Ci0gICAgICAgICwgcGFnZShwKQorICAgIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQoUUdyYXBo
aWNzV2ViVmlldyogbmV3VmlldywgUVdlYlBhZ2UqIG5ld1BhZ2UpCisgICAgICAgIDogdmlldyhu
ZXdWaWV3KQorICAgICAgICAsIHBhZ2UobmV3UGFnZSkKICAgICAgICAgLCB2aWV3UmVzaXplc1Rv
Q29udGVudHMoZmFsc2UpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIFVT
RShURVhUVVJFX01BUFBFUikKKyAgICAgICAgLCBwbGF0Zm9ybUxheWVyUHJveHkoMCkKKyNlbmRp
ZgogICAgICAgICAsIHNob3VsZFN5bmMoZmFsc2UpCiAjZW5kaWYKICAgICAgICAgLCBvdmVybGF5
KDApCkBAIC0xNjgsNyArMjA0LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCi0gICAgdmlydHVhbCB2b2lkIHNldFJvb3RHcmFwaGljc0xheWVy
KFFHcmFwaGljc0l0ZW0qIGxheWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Um9vdEdyYXBoaWNz
TGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIpOwogICAgIHZpcnR1YWwgdm9pZCBtYXJrRm9yU3lu
Yyhib29sIHNjaGVkdWxlU3luYyk7CiAgICAgdm9pZCBzeW5jTGF5ZXJzKCk7CiAKQEAgLTE4Myw4
ICsyMTksMTEgQEAgcHVibGljOgogICAgIGJvb2wgdmlld1Jlc2l6ZXNUb0NvbnRlbnRzOwogCiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIFVTRShURVhUVVJFX01BUFBFUikK
KyAgICBQbGF0Zm9ybUxheWVyUHJveHlRdCogcGxhdGZvcm1MYXllclByb3h5OworI2Vsc2UKICAg
ICBRV2Vha1BvaW50ZXI8UUdyYXBoaWNzT2JqZWN0PiByb290R3JhcGhpY3NMYXllcjsKLQorI2Vu
ZGlmCiAgICAgLy8gd2UgaGF2ZSB0byBmbHVzaCBxdWl0ZSBvZnRlbiwgc28gd2UgdXNlIGEgbWV0
YS1tZXRob2QgaW5zdGVhZCBvZiBRVGltZXI6OnNpbmdsZVNob3QgZm9yIHB1dHRpbmcgdGhlIGV2
ZW50IGluIHRoZSBxdWV1ZQogICAgIFFNZXRhTWV0aG9kIHN5bmNNZXRhTWV0aG9kOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71780</attachid>
            <date>2010-10-25 12:19:54 -0700</date>
            <delta_ts>2010-10-25 13:43:54 -0700</delta_ts>
            <desc>Patch 4: glue layer (PageClientQt) opt-in for TextureMapper</desc>
            <filename>patch-47070.diff</filename>
            <type>text/plain</type>
            <size>17363</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzU2ZmE4ZC4uZjhmZjIwZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0xMC0yNSAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5p
dGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDcwNzAKKworICAgICAgICBHbHVlIGxheWVyIChXZWJDb3JlU3VwcG9ydCkg
Y2hhbmdlcyB0byBhbGxvdyBjb25uZWN0aW5nIFRleHR1cmVNYXBwZXIgdG8gYSBRdCBQYWdlQ2xp
ZW50LCBpLmUuCisgICAgICAgIGEgUVdlYlZpZXcgb3IgYSBRR3JhcGhpY3NXZWJWaWV3LiBUaGlz
IGVuYWJsZXMgdGhlIG5ldyB0eXBlLCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciwgdG8gYmUg
cmVjb2duaXplZCBib3RoIGJ5CisgICAgICAgIHRoZSBjb21wb3NpdG9yIGFuZCBieSB0aGUgcGFn
ZSBjbGllbnQuCisgICAgICAgIE5vdGUgdGhhdCB0aGlzIGlzIHRlbXBvcmFyaWx5IGFuIG9wdC1p
biwgdW5kZXIgVVNFKFRFWFRVUkVfTUFQUEVSKQorCisgICAgICAgIE5vIG5ldyB0ZXN0czogdGhl
IGV4aXN0aW5nIHRlc3RzIHVuZGVyIExheW91dFRlc3RzL2NvbXBvc2l0aW5nIGFscmVhZHkgY292
ZXIgdGhpcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oOgorICAgICAgICAoUVdlYlBh
Z2VDbGllbnQ6OnNldFJvb3RHcmFwaGljc0xheWVyKToKKwogMjAxMC0xMC0yNCAgUGF2ZWwgRmVs
ZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW1v
dGh5IEhhdGNoZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCmlu
ZGV4IGFkNGQwNTYuLmE0NzYwNTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NMYXllci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllci5oCkBAIC01NywxMSArNTcsMTkgQEAgdHlwZWRlZiBXS0NBQ0ZMYXllciBQbGF0Zm9y
bUxheWVyOwogdHlwZWRlZiB2b2lkKiBOYXRpdmVMYXllcjsKIH0KICNlbGlmIFBMQVRGT1JNKFFU
KQorI2lmIFVTRShURVhUVVJFX01BUFBFUikKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyOwordHlwZWRlZiBUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllciBQbGF0Zm9ybUxheWVyOwordHlwZWRlZiBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciog
TmF0aXZlTGF5ZXI7Cit9OworI2Vsc2UKIFFUX0JFR0lOX05BTUVTUEFDRQotY2xhc3MgUUdyYXBo
aWNzSXRlbTsKK2NsYXNzIFFHcmFwaGljc09iamVjdDsKIFFUX0VORF9OQU1FU1BBQ0UKLXR5cGVk
ZWYgUUdyYXBoaWNzSXRlbSBQbGF0Zm9ybUxheWVyOwotdHlwZWRlZiBRR3JhcGhpY3NJdGVtKiBO
YXRpdmVMYXllcjsKK3R5cGVkZWYgUUdyYXBoaWNzT2JqZWN0IFBsYXRmb3JtTGF5ZXI7Cit0eXBl
ZGVmIFFHcmFwaGljc09iamVjdCogTmF0aXZlTGF5ZXI7CisjZW5kaWYKICNlbGlmIFBMQVRGT1JN
KENIUk9NSVVNKQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgTGF5ZXJDaHJvbWl1bTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVdlYlBhZ2VDbGllbnQuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vcXQvUVdlYlBhZ2VDbGllbnQuaAppbmRleCBmNWQ4YzFiLi45NWFlODhjIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50LmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oCkBAIC0zMCwxMSArMzAsMTQgQEAKICNpbmNs
dWRlIDxRQ3Vyc29yPgogI2VuZGlmCiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisjaW5jbHVkZSA8R3JhcGhpY3NMYXllci5oPgorI2VuZGlmCisKICNpbmNsdWRlIDxRUGFsZXR0
ZT4KICNpbmNsdWRlIDxRUmVjdD4KIAogUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBRR3JhcGhp
Y3NJdGVtOwogY2xhc3MgUVN0eWxlOwogUVRfRU5EX05BTUVTUEFDRQogCkBAIC00OSw4ICs1Miw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RFbmFibGVkKGJvb2wg
ZW5hYmxlKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGlucHV0TWV0aG9kRW5hYmxlZCgpIGNvbnN0
ID0gMDsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgLy8gdGhpcyBnZXRz
IGNhbGxlZCB3aGVuIHdlIHN0YXJ0L3N0b3AgY29tcG9zaXRpbmcuCi0gICAgdmlydHVhbCB2b2lk
IHNldFJvb3RHcmFwaGljc0xheWVyKFFHcmFwaGljc0l0ZW0qIGxheWVyKSB7fQorICAgIHZpcnR1
YWwgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihQbGF0Zm9ybUxheWVyKiBsYXllcikgeyB9CiAK
ICAgICAvLyB0aGlzIGdldHMgY2FsbGVkIHdoZW4gdGhlIGNvbXBvc2l0b3Igd2FudHMgdXMgdG8g
c3luYyB0aGUgbGF5ZXJzCiAgICAgLy8gaWYgc2NoZWR1bGVTeW5jIGlzIHRydWUsIHdlIHNjaGVk
dWxlIGEgc3luYyBvdXJzZWx2ZXMuIG90aGVyd2lzZSwKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9B
cGkvcXdlYmZyYW1lLmggYi9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5oCmluZGV4IGU3OGZiMDcu
LmE1OThhNTYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmgKKysrIGIvV2Vi
S2l0L3F0L0FwaS9xd2ViZnJhbWUuaApAQCAtNTYsNiArNTYsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgV2lkZ2V0UHJpdmF0ZTsKICAgICBjbGFzcyBGcmFtZUxvYWRlckNsaWVu
dFF0OwogICAgIGNsYXNzIENocm9tZUNsaWVudFF0OworICAgIGNsYXNzIFBsYXRmb3JtTGF5ZXJQ
cm94eVF0OwogfQogY2xhc3MgUVdlYkZyYW1lRGF0YTsKIGNsYXNzIFFXZWJIaXRUZXN0UmVzdWx0
UHJpdmF0ZTsKQEAgLTIzMSw2ICsyMzIsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBX
ZWJDb3JlOjpXaWRnZXRQcml2YXRlOwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudFF0OwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDsK
KyAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6UGxhdGZvcm1MYXllclByb3h5UXQ7CiAgICAgUVdl
YkZyYW1lUHJpdmF0ZSAqZDsKIH07CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYmZy
YW1lX3AuaCBiL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaAppbmRleCA3OTE4N2FiLi41NjYw
YmQxIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmgKKysrIGIvV2ViS2l0
L3F0L0FwaS9xd2ViZnJhbWVfcC5oCkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBGcmFtZVZpZXc7CiAgICAgY2xhc3MgSFRNTEZyYW1lT3duZXJFbGVtZW50
OwogICAgIGNsYXNzIFNjcm9sbGJhcjsKKyAgICBjbGFzcyBUZXh0dXJlTWFwcGVyQ29udGVudExh
eWVyOwogfQogY2xhc3MgUVdlYlBhZ2U7CiAKQEAgLTcyLDYgKzczLDkgQEAgcHVibGljOgogICAg
ICAgICAsIGFsbG93c1Njcm9sbGluZyh0cnVlKQogICAgICAgICAsIG1hcmdpbldpZHRoKC0xKQog
ICAgICAgICAsIG1hcmdpbkhlaWdodCgtMSkKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICAgICAgLCByb290R3JhcGhpY3NMYXllcigw
KQorI2VuZGlmCiAgICAgICAgICwgem9vbVRleHRPbmx5KGZhbHNlKQogICAgICAgICB7fQogICAg
IHZvaWQgaW5pdChRV2ViRnJhbWUqIHFmcmFtZSwgUVdlYkZyYW1lRGF0YSogZnJhbWVEYXRhKTsK
QEAgLTEwMCw2ICsxMDQsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBhbGxvd3NTY3JvbGxpbmc7CiAg
ICAgaW50IG1hcmdpbldpZHRoOwogICAgIGludCBtYXJnaW5IZWlnaHQ7CisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckNvbnRlbnRMYXllciogcm9vdEdyYXBoaWNzTGF5ZXI7CisjZW5kaWYKICAg
ICBib29sIHpvb21UZXh0T25seTsKIH07CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdl
YnBhZ2UuY3BwIGIvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKaW5kZXggMjE3N2I0MS4uZWFi
YWI2OSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKKysrIGIvV2ViS2l0
L3F0L0FwaS9xd2VicGFnZS5jcHAKQEAgLTE4NTAsNyArMTg1MCw3IEBAIHZvaWQgUVdlYlBhZ2U6
OnNldFZpZXcoUVdpZGdldCogdmlldykKICAgICB9CiAKICAgICBpZiAodmlldykKLSAgICAgICAg
ZC0+Y2xpZW50ID0gbmV3IFBhZ2VDbGllbnRRV2lkZ2V0KHZpZXcpOworICAgICAgICBkLT5jbGll
bnQgPSBuZXcgUGFnZUNsaWVudFFXaWRnZXQodmlldywgdGhpcyk7CiB9CiAKIC8qIQpkaWZmIC0t
Z2l0IGEvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggOTcw
YjA5ZC4uYTgyYjlkMiAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9XZWJL
aXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTAtMTAtMjUgIE5vJ2FtIFJvc2Vu
dGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVGV4bWFwXSBbUXRdIFRleHR1cmUgbWFwcGVyIGlu
aXRpYWwgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ3MDcwCisKKyAgICAgICAgR2x1ZSBsYXllciAoV2ViQ29yZVN1cHBvcnQp
IGNoYW5nZXMgdG8gYWxsb3cgY29ubmVjdGluZyBUZXh0dXJlTWFwcGVyIHRvIGEgUXQgUGFnZUNs
aWVudCwgaS5lLgorICAgICAgICBhIFFXZWJWaWV3IG9yIGEgUUdyYXBoaWNzV2ViVmlldy4gVGhp
cyBlbmFibGVzIHRoZSBuZXcgdHlwZSwgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIsIHRvIGJl
IHJlY29nbml6ZWQgYm90aCBieQorICAgICAgICB0aGUgY29tcG9zaXRvciBhbmQgYnkgdGhlIHBh
Z2UgY2xpZW50LgorICAgICAgICBOb3RlIHRoYXQgdGhpcyBpcyB0ZW1wb3JhcmlseSBhbiBvcHQt
aW4sIHVuZGVyIFVTRShURVhUVVJFX01BUFBFUikKKworICAgICAgICAqIEFwaS9xd2ViZnJhbWUu
aDoKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1lX3AuaDoKKyAgICAgICAgKFFXZWJGcmFtZVByaXZh
dGU6OlFXZWJGcmFtZVByaXZhdGUpOgorICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAg
ICAgIChRV2ViUGFnZTo6c2V0Vmlldyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21l
Q2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OmF0dGFjaFJv
b3RHcmFwaGljc0xheWVyKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1MYXllclByb3h5UXQ6OlBsYXRmb3JtTGF5
ZXJQcm94eVF0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXJQcm94eVF0Ojp+UGxh
dGZvcm1MYXllclByb3h5UXQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1MYXllclByb3h5
UXQ6OnNldFNpemVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXJQcm94
eVFXaWRnZXQ6OlBsYXRmb3JtTGF5ZXJQcm94eVFXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1MYXllclByb3h5UVdpZGdldDo6ZXZlbnRGaWx0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1MYXllclByb3h5UVdpZGdldDo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXJQcm94eVFXaWRnZXQ6OnNldE5lZWRzRGlzcGxheUluUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUxheWVyUHJveHlRR3JhcGhpY3NPYmplY3Q6
OlBsYXRmb3JtTGF5ZXJQcm94eVFHcmFwaGljc1dpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUxheWVyUHJveHlRR3JhcGhpY3NPYmplY3Q6OnNldE5lZWRzRGlzcGxheSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUxheWVyUHJveHlRR3JhcGhpY3NPYmplY3Q6OnNldE5lZWRz
RGlzcGxheUluUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UVdpZGdldDo6c2V0
Um9vdEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFXaWRnZXQ6
Om1hcmtGb3JTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRV2lkZ2V0OjpzeW5j
TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnVw
ZGF0ZUNvbXBvc2l0aW5nU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNs
aWVudFFHcmFwaGljc1dpZGdldDo6Y3JlYXRlT3JEZWxldGVPdmVybGF5KToKKyAgICAgICAgKFdl
YkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKToK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2VDbGllbnRRV2lkZ2V0OjpQYWdlQ2xpZW50UVdpZGdldCk6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlQ2xpZW50UVdpZGdldDo6YWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpQYWdlQ2xpZW50UUdy
YXBoaWNzV2lkZ2V0KToKKwogMjAxMC0xMC0yMiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KZGlmZiAtLWdpdCBhL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAgYi9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCmluZGV4IGJmZTI5YTkuLmYwZDM5MDMgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAKKysr
IGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcApAQCAtMzksNyAr
MzksNyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uLmgi
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXJRdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNlbmRpZgogI2luY2x1ZGUgIkdl
b2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5o
IgpAQCAtNTkxLDcgKzU5MSw3IEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OmNhbmNlbEdlb2xvY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZShGcmFtZSogZnJhbWUsIEdlCiB2b2lkIENocm9t
ZUNsaWVudFF0OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNz
TGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCiB7CiAgICAgaWYgKHBsYXRmb3JtUGFnZUNsaWVudCgpKQot
ICAgICAgICBwbGF0Zm9ybVBhZ2VDbGllbnQoKS0+c2V0Um9vdEdyYXBoaWNzTGF5ZXIoZ3JhcGhp
Y3NMYXllciA/IGdyYXBoaWNzTGF5ZXItPm5hdGl2ZUxheWVyKCkgOiAwKTsKKyAgICAgICAgcGxh
dGZvcm1QYWdlQ2xpZW50KCktPnNldFJvb3RHcmFwaGljc0xheWVyKGdyYXBoaWNzTGF5ZXIgPyBn
cmFwaGljc0xheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiAwKTsKIH0KIAogdm9pZCBDaHJvbWVDbGll
bnRRdDo6c2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigpCmRpZmYgLS1naXQg
YS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcCBiL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCmluZGV4IDlhYTAxYTIuLjRlNTFmODEgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCisrKyBi
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCkBAIC0yMSwxMyArMjEs
MTI3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlICJQYWdlQ2xpZW50UXQuaCIK
KyNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKIAogI2lmIGRl
ZmluZWQoUV9XU19YMTEpCiAjaW5jbHVkZSA8UVgxMUluZm8+CiAjZW5kaWYKIAorI2lmZGVmIFFU
X09QRU5HTF9MSUIKKyNpbmNsdWRlIDxRR0xXaWRnZXQ+CisjZW5kaWYKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVf
TUFQUEVSKSAgICAKK2NsYXNzIFBsYXRmb3JtTGF5ZXJQcm94eVF0IDogcHVibGljIFFPYmplY3Qs
IHB1YmxpYyB2aXJ0dWFsIFRleHR1cmVNYXBwZXJMYXllckNsaWVudCB7CitwdWJsaWM6CisgICAg
UGxhdGZvcm1MYXllclByb3h5UXQoUVdlYkZyYW1lKiBmcmFtZSwgVGV4dHVyZU1hcHBlckNvbnRl
bnRMYXllciogbGF5ZXIsIFFPYmplY3QqIG9iamVjdCkKKyAgICAgICAgOiBRT2JqZWN0KG9iamVj
dCkKKyAgICAgICAgLCBtX2ZyYW1lKGZyYW1lKQorICAgICAgICAsIG1fbGF5ZXIobGF5ZXIpCisg
ICAgeworICAgICAgICBpZiAobV9sYXllcikKKyAgICAgICAgICAgIG1fbGF5ZXItPnNldFBsYXRm
b3JtTGF5ZXJDbGllbnQodGhpcyk7CisgICAgICAgIG1fZnJhbWUtPmQtPnJvb3RHcmFwaGljc0xh
eWVyID0gbV9sYXllcjsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5QbGF0Zm9ybUxheWVyUHJveHlR
dCgpCisgICAgeworICAgICAgICBpZiAobV9sYXllcikKKyAgICAgICAgICAgIG1fbGF5ZXItPnNl
dFBsYXRmb3JtTGF5ZXJDbGllbnQoMCk7CisgICAgICAgIGlmIChtX2ZyYW1lLT5kKQorICAgICAg
ICAgICAgbV9mcmFtZS0+ZC0+cm9vdEdyYXBoaWNzTGF5ZXIgPSAwOworICAgIH0KKworICAgIC8v
IFNpbmNlIHdlIGp1c3QgcGFpbnQgdGhlIGNvbXBvc2l0ZWQgdHJlZSBhbmQgbmV2ZXIgY3JlYXRl
IGEgc3BlY2lhbCBpdGVtIGZvciBpdCwgd2UgZG9uJ3QgaGF2ZSB0byBoYW5kbGUgaXRzIHNpemUg
Y2hhbmdlcy4KKyAgICB2b2lkIHNldFNpemVDaGFuZ2VkKGNvbnN0IEludFNpemUmKSB7IH0KKwor
cHJpdmF0ZToKKyAgICBRV2ViRnJhbWUqIG1fZnJhbWU7CisgICAgVGV4dHVyZU1hcHBlckNvbnRl
bnRMYXllciogbV9sYXllcjsKK307CisKK2NsYXNzIFBsYXRmb3JtTGF5ZXJQcm94eVFXaWRnZXQg
OiBwdWJsaWMgUGxhdGZvcm1MYXllclByb3h5UXQgeworcHVibGljOgorICAgIFBsYXRmb3JtTGF5
ZXJQcm94eVFXaWRnZXQoUVdlYkZyYW1lKiBmcmFtZSwgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXll
ciogbGF5ZXIsIFFXaWRnZXQqIHdpZGdldCkKKyAgICAgICAgOiBQbGF0Zm9ybUxheWVyUHJveHlR
dChmcmFtZSwgbGF5ZXIsIHdpZGdldCkKKyAgICAgICAgLCBtX3dpZGdldCh3aWRnZXQpCisgICAg
eworICAgICAgICBpZiAobV93aWRnZXQpCisgICAgICAgICAgICBtX3dpZGdldC0+aW5zdGFsbEV2
ZW50RmlsdGVyKHRoaXMpOworICAgIH0KKworICAgIC8vIFdlIGRvbid0IHdhbnQgYSBodWdlIHJl
Z2lvbi1jbGlwIG9uIHRoZSBjb21wb3NpdGluZyBsYXllcnM7IGluc3RlYWQgd2UgdW5pdGUgdGhl
IHJlY3RhbmdsZXMgdG9nZXRoZXIKKyAgICAvLyBhbmQgY2xlYXIgdGhlbSB3aGVuIHRoZSBwYWlu
dCBhY3R1YWxseSBvY2N1cnMuCisgICAgYm9vbCBldmVudEZpbHRlcihRT2JqZWN0KiBvYmplY3Qs
IFFFdmVudCogZXZlbnQpCisgICAgeworICAgICAgICBpZiAob2JqZWN0ID09IG1fd2lkZ2V0ICYm
IGV2ZW50LT50eXBlKCkgPT0gUUV2ZW50OjpQYWludCkKKyAgICAgICAgICAgIG1fZGlydHlSZWN0
ID0gUVJlY3QoKTsKKyAgICAgICAgcmV0dXJuIFFPYmplY3Q6OmV2ZW50RmlsdGVyKG9iamVjdCwg
ZXZlbnQpOworICAgIH0KKworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCkKKyAgICB7CisgICAg
ICAgIGlmIChtX3dpZGdldCkKKyAgICAgICAgICAgIG1fd2lkZ2V0LT51cGRhdGUoKTsKKyAgICB9
CisKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQor
ICAgIHsKKyAgICAgICAgbV9kaXJ0eVJlY3QgfD0gcmVjdDsKKyAgICAgICAgbV93aWRnZXQtPnVw
ZGF0ZShtX2RpcnR5UmVjdCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFFSZWN0IG1fZGlydHlS
ZWN0OworICAgIFFXaWRnZXQqIG1fd2lkZ2V0OworfTsKKworY2xhc3MgUGxhdGZvcm1MYXllclBy
b3h5UUdyYXBoaWNzT2JqZWN0IDogcHVibGljIFBsYXRmcm9tTGF5ZXJQcm94eVF0IHsKK3B1Ymxp
YzoKKyAgICBQbGF0Zm9ybUxheWVyUHJveHlRR3JhcGhpY3NXaWRnZXQoUVdlYkZyYW1lKiBmcmFt
ZSwgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllciogbGF5ZXIsIFFHcmFwaGljc09iamVjdCogb2Jq
ZWN0KQorICAgICAgICA6IFFPYmplY3Qob2JqZWN0KQorICAgICAgICAsIG1fZ3JhcGhpY3NJdGVt
KGdyYXBoaWNzT2JqZWN0KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxh
eSgpCisgICAgeworICAgICAgICBpZiAobV9ncmFwaGljc0l0ZW0pCisgICAgICAgICAgICBtX2dy
YXBoaWNzSXRlbS0+dXBkYXRlKCk7CisgICAgfQorCisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJ
blJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIGlmIChtX2dyYXBoaWNz
SXRlbSkKKyAgICAgICAgICAgIG1fZ3JhcGhpY3NJdGVtLT51cGRhdGUoUVJlY3RGKHJlY3QpKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgUUdyYXBoaWNzSXRlbSogbV9ncmFwaGljc0l0ZW07Cit9
OworCit2b2lkIFBhZ2VDbGllbnRRV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcihUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllciogbGF5ZXIpCit7CisgICAgaWYgKGxheWVyKSB7CisgICAgICAg
IHBsYXRmb3JtTGF5ZXJQcm94eSA9IG5ldyBQbGF0Zm9ybUxheWVyUHJveHlRV2lkZ2V0KHBhZ2Ut
Pm1haW5GcmFtZSgpLCBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyQ29udGVudExheWVyKj4obGF5
ZXIpLCB2aWV3KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkZWxldGUgcGxhdGZvcm1M
YXllclByb3h5OworICAgIHBsYXRmb3JtTGF5ZXJQcm94eSA9IDA7Cit9CisKK3ZvaWQgUGFnZUNs
aWVudFFXaWRnZXQ6Om1hcmtGb3JTeW5jKGJvb2wgc2NoZWR1bGVTeW5jKQoreworICAgIHN5bmNU
aW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudFFXaWRnZXQ6OnN5bmNM
YXllcnMoVGltZXI8UGFnZUNsaWVudFFXaWRnZXQ+KikKK3sKKyAgICBRV2ViRnJhbWVQcml2YXRl
Ojpjb3JlKHBhZ2UtPm1haW5GcmFtZSgpKS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZVJl
Y3Vyc2l2ZSgpOworfQorI2VuZGlmCisKIHZvaWQgUGFnZUNsaWVudFFXaWRnZXQ6OnNjcm9sbChp
bnQgZHgsIGludCBkeSwgY29uc3QgUVJlY3QmIHJlY3RUb1Njcm9sbCkKIHsKICAgICB2aWV3LT5z
Y3JvbGwocXJlYWwoZHgpLCBxcmVhbChkeSksIHJlY3RUb1Njcm9sbCk7CkBAIC01Myw2ICsxNjcs
MTMgQEAgdm9pZCBQYWdlQ2xpZW50UVdpZGdldDo6c2V0SW5wdXRNZXRob2RIaW50cyhRdDo6SW5w
dXRNZXRob2RIaW50cyBoaW50cykKICAgICB2aWV3LT5zZXRJbnB1dE1ldGhvZEhpbnRzKGhpbnRz
KTsKIH0KIAorUGFnZUNsaWVudFFXaWRnZXQ6On5QYWdlQ2xpZW50UVdpZGdldCgpCit7CisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAg
ZGVsZXRlIHBsYXRmb3JtTGF5ZXJQcm94eTsKKyNlbmRpZgorfQorCiAjaWZuZGVmIFFUX05PX0NV
UlNPUgogUUN1cnNvciBQYWdlQ2xpZW50UVdpZGdldDo6Y3Vyc29yKCkgY29uc3QKIHsKQEAgLTEz
NCw2ICsyNTUsOCBAQCB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnVwZGF0ZShjb25z
dCBRUmVjdCYgZGlydHlSZWN0KQogCiB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OmNy
ZWF0ZU9yRGVsZXRlT3ZlcmxheSgpCiB7CisgICAgLy8gV2UgZG9uJ3QgdXNlIGFuIG92ZXJsYXkg
d2l0aCBUZXh0dXJlTWFwcGVyLiBJbnN0ZWFkLCB0aGUgb3ZlcmxheSBpcyBkcmF3biBpbnNpZGUg
UVdlYkZyYW1lLgorI2lmICFVU0UoVEVYVFVSRV9NQVBQRVIpCiAgICAgYm9vbCB1c2VPdmVybGF5
ID0gZmFsc2U7CiAgICAgaWYgKCF2aWV3UmVzaXplc1RvQ29udGVudHMpIHsKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC0xNTQsNiArMjc3LDcgQEAgdm9pZCBQYWdlQ2xpZW50
UUdyYXBoaWNzV2lkZ2V0OjpjcmVhdGVPckRlbGV0ZU92ZXJsYXkoKQogICAgICAgICBvdmVybGF5
LT5kZWxldGVMYXRlcigpOwogICAgICAgICBvdmVybGF5ID0gMDsKICAgICB9CisjZW5kaWYgLy8g
IVVTRShURVhUVVJFX01BUFBFUikKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKQEAgLTE2NSw3ICsyODksMTggQEAgdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojpz
eW5jTGF5ZXJzKCkKICAgICB9CiB9CiAKLXZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6
c2V0Um9vdEdyYXBoaWNzTGF5ZXIoUUdyYXBoaWNzSXRlbSogbGF5ZXIpCisjaWYgVVNFKFRFWFRV
UkVfTUFQUEVSKQordm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290R3JhcGhp
Y3NMYXllcihUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogbGF5ZXIpCit7CisgICAgaWYgKGxh
eWVyKSB7CisgICAgICAgIHBsYXRmb3JtTGF5ZXJQcm94eSA9IG5ldyBQbGF0Zm9ybUxheWVyUHJv
eHlRR3JhcGhpY3NPYmplY3QocGFnZS0+bWFpbkZyYW1lKCksIHN0YXRpY19jYXN0PFRleHR1cmVN
YXBwZXJDb250ZW50TGF5ZXIqPihsYXllciksIDAsIHZpZXcpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGRlbGV0ZSBwbGF0Zm9ybUxheWVyUHJveHk7CisgICAgcGxhdGZvcm1MYXllclBy
b3h5ID0gMDsKK30KKyNlbHNlCit2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNldFJv
b3RHcmFwaGljc0xheWVyKFFHcmFwaGljc09iamVjdCogbGF5ZXIpCiB7CiAgICAgaWYgKHJvb3RH
cmFwaGljc0xheWVyKSB7CiAgICAgICAgIHJvb3RHcmFwaGljc0xheWVyLmRhdGEoKS0+c2V0UGFy
ZW50SXRlbSgwKTsKQEAgLTE3Myw3ICszMDgsNyBAQCB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NX
aWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKFFHcmFwaGljc0l0ZW0qIGxheWVyKQogICAgICAg
ICBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKHBhZ2UtPm1haW5GcmFtZSgpKS0+dmlldygpLT5zeW5j
Q29tcG9zaXRpbmdTdGF0ZVJlY3Vyc2l2ZSgpOwogICAgIH0KIAotICAgIHJvb3RHcmFwaGljc0xh
eWVyID0gbGF5ZXIgPyBsYXllci0+dG9HcmFwaGljc09iamVjdCgpIDogMDsKKyAgICByb290R3Jh
cGhpY3NMYXllciA9IGxheWVyOwogCiAgICAgaWYgKGxheWVyKSB7CiAgICAgICAgIGxheWVyLT5z
ZXRGbGFnKFFHcmFwaGljc0l0ZW06Okl0ZW1DbGlwc0NoaWxkcmVuVG9TaGFwZSwgdHJ1ZSk7CkBA
IC0xODIsNiArMzE3LDcgQEAgdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290
R3JhcGhpY3NMYXllcihRR3JhcGhpY3NJdGVtKiBsYXllcikKICAgICB9CiAgICAgY3JlYXRlT3JE
ZWxldGVPdmVybGF5KCk7CiB9CisjZW5kaWYKIAogdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lk
Z2V0OjptYXJrRm9yU3luYyhib29sIHNjaGVkdWxlU3luYykKIHsKZGlmZiAtLWdpdCBhL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuaCBiL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9QYWdlQ2xpZW50UXQuaAppbmRleCA3MDE0ZmQyLi42ZDk4OWZhIDEwMDY0NAotLS0gYS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmgKKysrIGIvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oCkBAIC00MSwxNSArNDEsMjkgQEAKIAogI2luY2x1
ZGUgPFNldHRpbmdzLmg+CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVT
RShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFBhZ2VDbGll
bnRRV2lkZ2V0IDogcHVibGljIFFXZWJQYWdlQ2xpZW50IHsKK2NsYXNzIFBhZ2VDbGllbnRRV2lk
Z2V0IDogcHVibGljIFFXZWJQYWdlQ2xpZW50CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgICAgICwgcHVibGljIHZpcnR1YWwgVGV4
dHVyZU1hcHBlckxheWVyQ2xpZW50CisjZW5kaWYKK3sKIHB1YmxpYzoKLSAgICBQYWdlQ2xpZW50
UVdpZGdldChRV2lkZ2V0KiB2aWV3KQotICAgICAgICA6IHZpZXcodmlldykKKyAgICBQYWdlQ2xp
ZW50UVdpZGdldChRV2lkZ2V0KiBuZXdWaWV3LCBRV2ViUGFnZSogbmV3UGFnZSkKKyAgICAgICAg
OiB2aWV3KG5ld1ZpZXcpCisgICAgICAgICwgcGFnZShuZXdQYWdlKQorI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgICAgICAsIHN5bmNU
aW1lcih0aGlzLCAmUGFnZUNsaWVudFFXaWRnZXQ6OnN5bmNMYXllcnMpCisgICAgICAgICwgcGxh
dGZvcm1MYXllclByb3h5KDApCisjZW5kaWYKICAgICB7CiAgICAgICAgIFFfQVNTRVJUKHZpZXcp
OwogICAgIH0KKyAgICB2aXJ0dWFsIH5QYWdlQ2xpZW50UVdpZGdldCgpOwogCiAgICAgdmlydHVh
bCBib29sIGlzUVdpZGdldENsaWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIApAQCAtNzgs
NiArOTIsMjEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUVJlY3RGIHdpbmRvd1JlY3QoKSBjb25z
dDsKIAogICAgIFFXaWRnZXQqIHZpZXc7CisgICAgUVdlYlBhZ2UqIHBhZ2U7CisKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Um9vdEdyYXBoaWNzTGF5ZXIoVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIq
IGxheWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0ZvclN5bmMoYm9vbCBzY2hlZHVsZVN5bmMp
OworICAgIHZvaWQgc3luY0xheWVycyhUaW1lcjxQYWdlQ2xpZW50UVdpZGdldD4qKTsKKyNlbmRp
ZgorCisgICAgLy8gUUdyYXBoaWNzV2ViVmlldyBjYW4gcmVuZGVyIGNvbXBvc2l0ZWQgbGF5ZXJz
CisgICAgdmlydHVhbCBib29sIGFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVT
RShURVhUVVJFX01BUFBFUikKKyAgICBUaW1lcjxQYWdlQ2xpZW50UVdpZGdldD4gc3luY1RpbWVy
OworICAgIFBsYXRmb3JtTGF5ZXJQcm94eVF0KiBwbGF0Zm9ybUxheWVyUHJveHk7CisjZW5kaWYK
IH07CiAKIC8vIHRoZSBvdmVybGF5IGlzIGhlcmUgZm9yIG9uZSByZWFzb24gb25seTogdG8gaGF2
ZSB0aGUgc2Nyb2xsLWJhcnMgYW5kIG90aGVyCkBAIC0xMTQsMTMgKzE0MywyMCBAQCBjbGFzcyBR
R3JhcGhpY3NJdGVtT3ZlcmxheSA6IHB1YmxpYyBRR3JhcGhpY3NPYmplY3QgewogfTsKIAogCi1j
bGFzcyBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0IDogcHVibGljIFFXZWJQYWdlQ2xpZW50IHsK
K2NsYXNzIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQgOiBwdWJsaWMgUVdlYlBhZ2VDbGllbnQK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikK
KyAgICAgICAgLCBwdWJsaWMgdmlydHVhbCBUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQKKyNlbmRp
ZgorewogcHVibGljOgotICAgIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQoUUdyYXBoaWNzV2Vi
VmlldyogdiwgUVdlYlBhZ2UqIHApCi0gICAgICAgIDogdmlldyh2KQotICAgICAgICAsIHBhZ2Uo
cCkKKyAgICBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0KFFHcmFwaGljc1dlYlZpZXcqIG5ld1Zp
ZXcsIFFXZWJQYWdlKiBuZXdQYWdlKQorICAgICAgICA6IHZpZXcobmV3VmlldykKKyAgICAgICAg
LCBwYWdlKG5ld1BhZ2UpCiAgICAgICAgICwgdmlld1Jlc2l6ZXNUb0NvbnRlbnRzKGZhbHNlKQog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIp
CisgICAgICAgICwgcGxhdGZvcm1MYXllclByb3h5KDApCisjZW5kaWYKICAgICAgICAgLCBzaG91
bGRTeW5jKGZhbHNlKQogI2VuZGlmCiAgICAgICAgICwgb3ZlcmxheSgwKQpAQCAtMTY4LDcgKzIw
NCw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQotICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihRR3JhcGhpY3NJdGVtKiBs
YXllcik7CisgICAgdmlydHVhbCB2b2lkIHNldFJvb3RHcmFwaGljc0xheWVyKFBsYXRmb3JtTGF5
ZXIqIGxheWVyKTsKICAgICB2aXJ0dWFsIHZvaWQgbWFya0ZvclN5bmMoYm9vbCBzY2hlZHVsZVN5
bmMpOwogICAgIHZvaWQgc3luY0xheWVycygpOwogCkBAIC0xODMsOCArMjE5LDExIEBAIHB1Ymxp
YzoKICAgICBib29sIHZpZXdSZXNpemVzVG9Db250ZW50czsKIAogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgUGxhdGZvcm1MYXll
clByb3h5UXQqIHBsYXRmb3JtTGF5ZXJQcm94eTsKKyNlbHNlCiAgICAgUVdlYWtQb2ludGVyPFFH
cmFwaGljc09iamVjdD4gcm9vdEdyYXBoaWNzTGF5ZXI7Ci0KKyNlbmRpZgogICAgIC8vIHdlIGhh
dmUgdG8gZmx1c2ggcXVpdGUgb2Z0ZW4sIHNvIHdlIHVzZSBhIG1ldGEtbWV0aG9kIGluc3RlYWQg
b2YgUVRpbWVyOjpzaW5nbGVTaG90IGZvciBwdXR0aW5nIHRoZSBldmVudCBpbiB0aGUgcXVldWUK
ICAgICBRTWV0YU1ldGhvZCBzeW5jTWV0YU1ldGhvZDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72246</attachid>
            <date>2010-10-28 15:30:38 -0700</date>
            <delta_ts>2010-10-28 15:31:29 -0700</delta_ts>
            <desc>Build fix</desc>
            <filename>patch-build.diff</filename>
            <type>text/plain</type>
            <size>9477</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ODZiODc4NS4uOWQ0ZTc5YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMC0xMC0yOCAgTm9hbSBSb3NlbnRo
YWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQXJp
eWEgSGlkYXlhdC4KKworICAgICAgICBbVGV4bWFwXSBbUXRdIFRleHR1cmUgbWFwcGVyIGluaXRp
YWwgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ3MDcwCisKKyAgICAgICAgQnVpbGQgZml4LCBzb21lIHdyb25nIGNoYW5nZXMg
c2xpcHBlZCBpbnRvIHRoZSBwcmV2aW91cyBwYXRjaC4KKyAgICAgICAgTm8gbmV3IHRlc3RzOiBi
dWlsZCBmaXguCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnNldENvbnRlbnRzVG9JbWFnZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjp1cGxvYWRU
ZXh0dXJlRnJvbUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6
OnBhaW50UmVjdXJzaXZlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5o
OgorICAgICAgICAoUVdlYlBhZ2VDbGllbnQ6OnNldFJvb3RHcmFwaGljc0xheWVyKToKKwogMjAx
MC0xMC0yOCAgTWlraGFpbCBOYWdhbm92ICA8bW5hZ2Fub3ZAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtDaHJvbWl1bSBjbGFuZ10gVW5yZXZpZXdlZC4gRml4IGZvcndhcmQgZGVjbGFyYXRpb24g
b2YgJ3N0cnVjdCBGaWxlTWV0YWRhdGEnLgpAQCAtNzg5NzQsNyArNzg5OTMsNyBAQAogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YS4KIAotICAgICAgICBCdWfCoDQx
MzQwIC0gW0dTdHJlYW1lcl0gU3VidGxlIHJhY2UgY29uZGl0aW9uIGR1cmluZyBzZWVrcworICAg
ICAgICBCdWcgNDEzNDAgLSBbR1N0cmVhbWVyXSBTdWJ0bGUgcmFjZSBjb25kaXRpb24gZHVyaW5n
IHNlZWtzCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
MTM0MAogCiAgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNv
dXJjZUdTdHJlYW1lci5jcHA6CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzTGF5ZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5oCmluZGV4IGE0NzYwNTQuLjk5MWNhMzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NMYXllci5oCkBAIC00MCw2ICs0MCwxMCBAQAogI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVS
KQorI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgorI2VuZGlm
CisKICNpZiBQTEFURk9STShNQUMpCiAjaWZkZWYgX19PQkpDX18KIEBjbGFzcyBXZWJMYXllcjsK
QEAgLTY3LDggKzcxLDEwIEBAIHR5cGVkZWYgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIE5h
dGl2ZUxheWVyOwogUVRfQkVHSU5fTkFNRVNQQUNFCiBjbGFzcyBRR3JhcGhpY3NPYmplY3Q7CiBR
VF9FTkRfTkFNRVNQQUNFCituYW1lc3BhY2UgV2ViQ29yZSB7CiB0eXBlZGVmIFFHcmFwaGljc09i
amVjdCBQbGF0Zm9ybUxheWVyOwogdHlwZWRlZiBRR3JhcGhpY3NPYmplY3QqIE5hdGl2ZUxheWVy
OworfQogI2VuZGlmCiAjZWxpZiBQTEFURk9STShDSFJPTUlVTSkKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVN
YXBwZXJHTC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFw
cGVyR0wuY3BwCmluZGV4IDU2NjJmMjEuLjk2NjY1NmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMjksNyArMjks
NyBAQAogCiAjaWYgZGVmaW5lZChURVhNQVBfT1BFTkdMX0VTXzIpCiAjaW5jbHVkZSA8R0xFUzIv
Z2wyLmg+Ci0jZWxpZiBQTEFURk9STShNQUMpCisjZWxpZiBPUyhNQUNfT1NfWCkKICNpbmNsdWRl
IDxnbC5oPgogI2Vsc2UKICNpbmNsdWRlIDxHTC9nbC5oPgpAQCAtNjUsNyArNjUsNyBAQCBleHRl
cm4gIkMiIHsKICAgICB2b2lkIGdsQnVmZmVyU3ViRGF0YShHTGVudW0sIEdMc2l6ZWlwdHIsIEdM
c2l6ZWlwdHIsIGNvbnN0IEdMdm9pZCopOwogICAgIHZvaWQgZ2xHZXRQcm9ncmFtSW5mb0xvZyhH
THVpbnQgcHJvZ3JhbSwgR0xzaXplaSwgR0xzaXplaSosIEdMY2hhciopOwogCi0jaWYgIVBMQVRG
T1JNKE1BQykKKyNpZiAhT1MoTUFDX09TX1gpCiAgICAgR0xpbnQgZ2xHZXRVbmlmb3JtTG9jYXRp
b24oR0x1aW50LCBjb25zdCBHTGNoYXIqKTsKICAgICBHTGludCBnbEJpbmRBdHRyaWJMb2NhdGlv
bihHTHVpbnQsIEdMdWludCwgY29uc3QgR0xjaGFyKik7CiAjZW5kaWYKQEAgLTQ1OSw3ICs0NTks
NyBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFn
ZSkKICAgICAgICAgbV9pbWFnZSA9IG5hdGl2ZUltYWdlOwogICAgICAgICBpZiAoIWZvdW5kKSB7
CiAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChiZWdpblBhaW50KEludFJlY3Qo
MCwgMCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKSkpOwot
ICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIERldmljZUNvbG9yU3BhY2UsIElu
dFBvaW50KDAsIDApLCBDb21wb3NpdGVDb3B5KTsKKyAgICAgICAgICAgIGNvbnRleHQuZHJhd0lt
YWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCgwLCAwKSwgQ29tcG9zaXRl
Q29weSk7CiAgICAgICAgICAgICBlbmRQYWludCgpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIuY3BwCmluZGV4IGNmOTBjYjEuLjA1N2JjZmMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5jcHAKQEAgLTY4Myw3ICs2ODMsNiBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjp1cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1h
cHBlciwgYwogICAgICAgICB8fCAoIW1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5ICYmIG1f
Y3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdC5pc0VtcHR5KCkgJiYgIW5lZWRzUmVzZXQp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBXVEY6OlN0b3BXYXRjaCBzdG9wV2F0Y2g7CiAgICAg
SW50UmVjdCBkaXJ0eVJlY3QgPSBJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUu
aGVpZ2h0KCkpOwogICAgIGlmICghbmVlZHNSZXNldCAmJiAhbV9jdXJyZW50Q29udGVudC5uZWVk
c0Rpc3BsYXkpCiAgICAgICAgIGRpcnR5UmVjdC5pbnRlcnNlY3QobV9jdXJyZW50Q29udGVudC5u
ZWVkc0Rpc3BsYXlSZWN0KTsKQEAgLTcwMSwxNSArNzAwLDYgQEAgdm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6dXBsb2FkVGV4dHVyZUZyb21Db250ZW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBw
ZXIsIGMKICAgICAgICAgbV9sYXllci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29udGV4
dCwgZGlydHlSZWN0KTsKICAgICB9CiAgICAgbV90ZXh0dXJlLT5lbmRQYWludCgpOwotICAgIHsK
LSNpZiAwCi0gICAgICAgIExPRygiW1RleHR1cmVNYXBwZXJdIFJlLXJlbmRlciglZCkgbGF5ZXIo
JXApICVkOjolZDo6JWQgKCVkeCVkKSBbJWRtc11cbiIsICsrcmVuZGVyQ291bnQsIHRoaXMsCi0g
ICAgICAgICAgICAgICBuZWVkc1Jlc2V0LCBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSwg
IW1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdC5pc0VtcHR5KCksCi0gICAgICAgICAg
ICAgICBkaXJ0eVJlY3Qud2lkdGgoKSwgZGlydHlSZWN0LmhlaWdodCgpLCBpbnQoc3RvcFdhdGNo
LmVsYXBzZWQoKSAqIDEwMDApKTsKLSAgICAgICAgc3RhdGljIGludCByZW5kZXJDb3VudCA9IDA7
Ci0gICAgICAgIG1fdGV4dHVyZS0+c2F2ZShTdHJpbmcoKS5mb3JtYXQoIi90bXAvbGF5ZXJfJWQu
cG5nIiwgcmVuZGVyQ291bnQpKTsKLSNlbmRpZgotICAgIH0KICAgICBtX2N1cnJlbnRDb250ZW50
Lm5lZWRzRGlzcGxheSA9IGZhbHNlOwogCiB9CkBAIC03MzksOCArNzI5LDYgQEAgdm9pZCBUZXh0
dXJlTWFwcGVyTm9kZTo6cGFpbnRTZWxmKGNvbnN0IFRleG1hcFBhaW50T3B0aW9ucyYgb3B0aW9u
cykKIAogdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRSZWN1cnNpdmUoVGV4bWFwUGFpbnRP
cHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgV1RGOjpTdG9wV2F0Y2ggc3RvcFdhdGNoOwotCiAgICAg
Ym9vbCBpc0RpcnR5ID0gbV9zdGF0ZS5kaXJ0eTsKICAgICBtX3N0YXRlLmRpcnR5ID0gZmFsc2U7
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVdlYlBhZ2VDbGllbnQuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vcXQvUVdlYlBhZ2VDbGllbnQuaAppbmRleCA5NWFlODhjLi5kOGY0MTcx
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50LmgKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oCkBAIC01Miw3ICs1Miw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RFbmFibGVkKGJvb2wgZW5hYmxl
KSA9IDA7CiAgICAgdmlydHVhbCBib29sIGlucHV0TWV0aG9kRW5hYmxlZCgpIGNvbnN0ID0gMDsK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgdmlydHVhbCB2b2lkIHNldFJv
b3RHcmFwaGljc0xheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0Um9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6UGxhdGZvcm1MYXllciogbGF5ZXIpIHsg
fQogCiAgICAgLy8gdGhpcyBnZXRzIGNhbGxlZCB3aGVuIHRoZSBjb21wb3NpdG9yIHdhbnRzIHVz
IHRvIHN5bmMgdGhlIGxheWVycwogICAgIC8vIGlmIHNjaGVkdWxlU3luYyBpcyB0cnVlLCB3ZSBz
Y2hlZHVsZSBhIHN5bmMgb3Vyc2VsdmVzLiBvdGhlcndpc2UsCmRpZmYgLS1naXQgYS9XZWJLaXQv
cXQvQ2hhbmdlTG9nIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCA2NTdkOTljLi4xY2Y3OGQy
IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9xdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMC0xMC0yOCAgTm9hbSBSb3NlbnRoYWwgIDxub2FtLnJv
c2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQXJpeWEgSGlkYXlhdC4K
KworICAgICAgICBbVGV4bWFwXSBbUXRdIFRleHR1cmUgbWFwcGVyIGluaXRpYWwgaW1wbGVtZW50
YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3
MDcwCisKKyAgICAgICAgQnVpbGQgZml4LAorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGFn
ZUNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXJQcm94eVFHcmFw
aGljc09iamVjdDo6UGxhdGZvcm1MYXllclByb3h5UUdyYXBoaWNzT2JqZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6On5QYWdlQ2xpZW50UUdyYXBoaWNz
V2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNl
dFJvb3RHcmFwaGljc0xheWVyKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50
UXQuaDoKKwogMjAxMC0xMC0yOCAgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRo
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KZGlmZiAt
LWdpdCBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwIGIvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAKaW5kZXggNGU1MWY4MS4uNGQ0MmMz
OSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAK
KysrIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAKQEAgLTk3LDEx
ICs5NywxMSBAQCBwcml2YXRlOgogICAgIFFXaWRnZXQqIG1fd2lkZ2V0OwogfTsKIAotY2xhc3Mg
UGxhdGZvcm1MYXllclByb3h5UUdyYXBoaWNzT2JqZWN0IDogcHVibGljIFBsYXRmcm9tTGF5ZXJQ
cm94eVF0IHsKK2NsYXNzIFBsYXRmb3JtTGF5ZXJQcm94eVFHcmFwaGljc09iamVjdCA6IHB1Ymxp
YyBQbGF0Zm9ybUxheWVyUHJveHlRdCB7CiBwdWJsaWM6Ci0gICAgUGxhdGZvcm1MYXllclByb3h5
UUdyYXBoaWNzV2lkZ2V0KFFXZWJGcmFtZSogZnJhbWUsIFRleHR1cmVNYXBwZXJDb250ZW50TGF5
ZXIqIGxheWVyLCBRR3JhcGhpY3NPYmplY3QqIG9iamVjdCkKLSAgICAgICAgOiBRT2JqZWN0KG9i
amVjdCkKLSAgICAgICAgLCBtX2dyYXBoaWNzSXRlbShncmFwaGljc09iamVjdCkKKyAgICBQbGF0
Zm9ybUxheWVyUHJveHlRR3JhcGhpY3NPYmplY3QoUVdlYkZyYW1lKiBmcmFtZSwgVGV4dHVyZU1h
cHBlckNvbnRlbnRMYXllciogbGF5ZXIsIFFHcmFwaGljc09iamVjdCogb2JqZWN0KQorICAgICAg
ICA6IFBsYXRmb3JtTGF5ZXJQcm94eVF0KGZyYW1lLCBsYXllciwgb2JqZWN0KQorICAgICAgICAs
IG1fZ3JhcGhpY3NJdGVtKG9iamVjdCkKICAgICB7CiAgICAgfQogCkBAIC0yMjgsMTIgKzIyOCwx
NiBAQCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojp+UGFnZUNsaWVudFFHcmFwaGljc1dpZGdl
dCgpCiB7CiAgICAgZGVsZXRlIG92ZXJsYXk7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBkZWxldGUgcGxhdGZvcm1MYXllclBy
b3h5OworI2Vsc2UKICAgICBpZiAoIXJvb3RHcmFwaGljc0xheWVyKQogICAgICAgICByZXR1cm47
CiAgICAgLy8gd2UgZG9uJ3QgbmVlZCB0byBkZWxldGUgdGhlIHJvb3QgZ3JhcGhpY3MgbGF5ZXIu
IFRoZSBsaWZlY3ljbGUgaXMgbWFuYWdlZCBpbiBHcmFwaGljc0xheWVyUXQuY3BwLgogICAgIHJv
b3RHcmFwaGljc0xheWVyLmRhdGEoKS0+c2V0UGFyZW50SXRlbSgwKTsKICAgICB2aWV3LT5zY2Vu
ZSgpLT5yZW1vdmVJdGVtKHJvb3RHcmFwaGljc0xheWVyLmRhdGEoKSk7CiAjZW5kaWYKKyNlbmRp
ZgogfQogCiB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNjcm9sbChpbnQgZHgsIGlu
dCBkeSwgY29uc3QgUVJlY3QmIHJlY3RUb1Njcm9sbCkKQEAgLTI5Myw3ICsyOTcsNyBAQCB2b2lk
IFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnN5bmNMYXllcnMoKQogdm9pZCBQYWdlQ2xpZW50
UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcihUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllciogbGF5ZXIpCiB7CiAgICAgaWYgKGxheWVyKSB7Ci0gICAgICAgIHBsYXRmb3JtTGF5
ZXJQcm94eSA9IG5ldyBQbGF0Zm9ybUxheWVyUHJveHlRR3JhcGhpY3NPYmplY3QocGFnZS0+bWFp
bkZyYW1lKCksIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIqPihsYXllciks
IDAsIHZpZXcpOworICAgICAgICBwbGF0Zm9ybUxheWVyUHJveHkgPSBuZXcgUGxhdGZvcm1MYXll
clByb3h5UUdyYXBoaWNzT2JqZWN0KHBhZ2UtPm1haW5GcmFtZSgpLCBzdGF0aWNfY2FzdDxUZXh0
dXJlTWFwcGVyQ29udGVudExheWVyKj4obGF5ZXIpLCB2aWV3KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBkZWxldGUgcGxhdGZvcm1MYXllclByb3h5OwpkaWZmIC0tZ2l0IGEvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1BhZ2VDbGllbnRRdC5oCmluZGV4IDZkOTg5ZmEuLjkyNGQyYTcgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuaAorKysgYi9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmgKQEAgLTQ3LDExICs0Nyw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgUGFnZUNsaWVudFFXaWRnZXQgOiBwdWJsaWMgUVdlYlBhZ2VD
bGllbnQKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01B
UFBFUikKLSAgICAgICAgLCBwdWJsaWMgdmlydHVhbCBUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQK
LSNlbmRpZgoteworY2xhc3MgUGFnZUNsaWVudFFXaWRnZXQgOiBwdWJsaWMgUVdlYlBhZ2VDbGll
bnQgewogcHVibGljOgogICAgIFBhZ2VDbGllbnRRV2lkZ2V0KFFXaWRnZXQqIG5ld1ZpZXcsIFFX
ZWJQYWdlKiBuZXdQYWdlKQogICAgICAgICA6IHZpZXcobmV3VmlldykKQEAgLTE0MywxMSArMTM5
LDcgQEAgY2xhc3MgUUdyYXBoaWNzSXRlbU92ZXJsYXkgOiBwdWJsaWMgUUdyYXBoaWNzT2JqZWN0
IHsKIH07CiAKIAotY2xhc3MgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCA6IHB1YmxpYyBRV2Vi
UGFnZUNsaWVudAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRV
UkVfTUFQUEVSKQotICAgICAgICAsIHB1YmxpYyB2aXJ0dWFsIFRleHR1cmVNYXBwZXJMYXllckNs
aWVudAotI2VuZGlmCi17CitjbGFzcyBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0IDogcHVibGlj
IFFXZWJQYWdlQ2xpZW50IHsKIHB1YmxpYzoKICAgICBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0
KFFHcmFwaGljc1dlYlZpZXcqIG5ld1ZpZXcsIFFXZWJQYWdlKiBuZXdQYWdlKQogICAgICAgICA6
IHZpZXcobmV3VmlldykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72247</attachid>
            <date>2010-10-28 15:32:16 -0700</date>
            <delta_ts>2010-10-28 15:57:47 -0700</delta_ts>
            <desc>Build fix</desc>
            <filename>patch-build.diff</filename>
            <type>text/plain</type>
            <size>9142</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ODZiODc4NS4uOWQ0ZTc5YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMC0xMC0yOCAgTm9hbSBSb3NlbnRo
YWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQXJp
eWEgSGlkYXlhdC4KKworICAgICAgICBbVGV4bWFwXSBbUXRdIFRleHR1cmUgbWFwcGVyIGluaXRp
YWwgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ3MDcwCisKKyAgICAgICAgQnVpbGQgZml4LCBzb21lIHdyb25nIGNoYW5nZXMg
c2xpcHBlZCBpbnRvIHRoZSBwcmV2aW91cyBwYXRjaC4KKyAgICAgICAgTm8gbmV3IHRlc3RzOiBi
dWlsZCBmaXguCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnNldENvbnRlbnRzVG9JbWFnZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjp1cGxvYWRU
ZXh0dXJlRnJvbUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6
OnBhaW50UmVjdXJzaXZlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5o
OgorICAgICAgICAoUVdlYlBhZ2VDbGllbnQ6OnNldFJvb3RHcmFwaGljc0xheWVyKToKKwogMjAx
MC0xMC0yOCAgTWlraGFpbCBOYWdhbm92ICA8bW5hZ2Fub3ZAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtDaHJvbWl1bSBjbGFuZ10gVW5yZXZpZXdlZC4gRml4IGZvcndhcmQgZGVjbGFyYXRpb24g
b2YgJ3N0cnVjdCBGaWxlTWV0YWRhdGEnLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0xheWVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXIuaAppbmRleCBhNDc2MDU0Li45OTFjYTMyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzTGF5ZXIuaApAQCAtNDAsNiArNDAsMTAgQEAKICNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAorI2lmIFVTRShURVhUVVJF
X01BUFBFUikKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIK
KyNlbmRpZgorCiAjaWYgUExBVEZPUk0oTUFDKQogI2lmZGVmIF9fT0JKQ19fCiBAY2xhc3MgV2Vi
TGF5ZXI7CkBAIC02Nyw4ICs3MSwxMCBAQCB0eXBlZGVmIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyKiBOYXRpdmVMYXllcjsKIFFUX0JFR0lOX05BTUVTUEFDRQogY2xhc3MgUUdyYXBoaWNzT2Jq
ZWN0OwogUVRfRU5EX05BTUVTUEFDRQorbmFtZXNwYWNlIFdlYkNvcmUgewogdHlwZWRlZiBRR3Jh
cGhpY3NPYmplY3QgUGxhdGZvcm1MYXllcjsKIHR5cGVkZWYgUUdyYXBoaWNzT2JqZWN0KiBOYXRp
dmVMYXllcjsKK30KICNlbmRpZgogI2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9U
ZXh0dXJlTWFwcGVyR0wuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4
dHVyZU1hcHBlckdMLmNwcAppbmRleCA1NjYyZjIxLi45NjY2NTZiIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTI5
LDcgKzI5LDcgQEAKIAogI2lmIGRlZmluZWQoVEVYTUFQX09QRU5HTF9FU18yKQogI2luY2x1ZGUg
PEdMRVMyL2dsMi5oPgotI2VsaWYgUExBVEZPUk0oTUFDKQorI2VsaWYgT1MoTUFDX09TX1gpCiAj
aW5jbHVkZSA8Z2wuaD4KICNlbHNlCiAjaW5jbHVkZSA8R0wvZ2wuaD4KQEAgLTY1LDcgKzY1LDcg
QEAgZXh0ZXJuICJDIiB7CiAgICAgdm9pZCBnbEJ1ZmZlclN1YkRhdGEoR0xlbnVtLCBHTHNpemVp
cHRyLCBHTHNpemVpcHRyLCBjb25zdCBHTHZvaWQqKTsKICAgICB2b2lkIGdsR2V0UHJvZ3JhbUlu
Zm9Mb2coR0x1aW50IHByb2dyYW0sIEdMc2l6ZWksIEdMc2l6ZWkqLCBHTGNoYXIqKTsKIAotI2lm
ICFQTEFURk9STShNQUMpCisjaWYgIU9TKE1BQ19PU19YKQogICAgIEdMaW50IGdsR2V0VW5pZm9y
bUxvY2F0aW9uKEdMdWludCwgY29uc3QgR0xjaGFyKik7CiAgICAgR0xpbnQgZ2xCaW5kQXR0cmli
TG9jYXRpb24oR0x1aW50LCBHTHVpbnQsIGNvbnN0IEdMY2hhciopOwogI2VuZGlmCkBAIC00NTks
NyArNDU5LDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnNldENvbnRlbnRzVG9JbWFnZShJbWFn
ZSogaW1hZ2UpCiAgICAgICAgIG1faW1hZ2UgPSBuYXRpdmVJbWFnZTsKICAgICAgICAgaWYgKCFm
b3VuZCkgewogICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoYmVnaW5QYWludChJ
bnRSZWN0KDAsIDAsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQo
KSkpKTsKLSAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGltYWdlLCBEZXZpY2VDb2xvclNw
YWNlLCBJbnRQb2ludCgwLCAwKSwgQ29tcG9zaXRlQ29weSk7CisgICAgICAgICAgICBjb250ZXh0
LmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQoMCwgMCksIENv
bXBvc2l0ZUNvcHkpOwogICAgICAgICAgICAgZW5kUGFpbnQoKTsKICAgICAgICAgfQogICAgIH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAppbmRleCBjZjkwY2IxLi4wNTdiY2ZjIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCkBAIC02ODMsNyArNjgzLDYgQEAgdm9pZCBUZXh0
dXJlTWFwcGVyTm9kZTo6dXBsb2FkVGV4dHVyZUZyb21Db250ZW50KFRleHR1cmVNYXBwZXIqIHRl
eHR1cmVNYXBwZXIsIGMKICAgICAgICAgfHwgKCFtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxh
eSAmJiBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QuaXNFbXB0eSgpICYmICFuZWVk
c1Jlc2V0KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV1RGOjpTdG9wV2F0Y2ggc3RvcFdhdGNo
OwogICAgIEludFJlY3QgZGlydHlSZWN0ID0gSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwg
bV9zaXplLmhlaWdodCgpKTsKICAgICBpZiAoIW5lZWRzUmVzZXQgJiYgIW1fY3VycmVudENvbnRl
bnQubmVlZHNEaXNwbGF5KQogICAgICAgICBkaXJ0eVJlY3QuaW50ZXJzZWN0KG1fY3VycmVudENv
bnRlbnQubmVlZHNEaXNwbGF5UmVjdCk7CkBAIC03MDEsMTUgKzcwMCw2IEBAIHZvaWQgVGV4dHVy
ZU1hcHBlck5vZGU6OnVwbG9hZFRleHR1cmVGcm9tQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0
dXJlTWFwcGVyLCBjCiAgICAgICAgIG1fbGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRz
KGNvbnRleHQsIGRpcnR5UmVjdCk7CiAgICAgfQogICAgIG1fdGV4dHVyZS0+ZW5kUGFpbnQoKTsK
LSAgICB7Ci0jaWYgMAotICAgICAgICBMT0coIltUZXh0dXJlTWFwcGVyXSBSZS1yZW5kZXIoJWQp
IGxheWVyKCVwKSAlZDo6JWQ6OiVkICglZHglZCkgWyVkbXNdXG4iLCArK3JlbmRlckNvdW50LCB0
aGlzLAotICAgICAgICAgICAgICAgbmVlZHNSZXNldCwgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rp
c3BsYXksICFtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QuaXNFbXB0eSgpLAotICAg
ICAgICAgICAgICAgZGlydHlSZWN0LndpZHRoKCksIGRpcnR5UmVjdC5oZWlnaHQoKSwgaW50KHN0
b3BXYXRjaC5lbGFwc2VkKCkgKiAxMDAwKSk7Ci0gICAgICAgIHN0YXRpYyBpbnQgcmVuZGVyQ291
bnQgPSAwOwotICAgICAgICBtX3RleHR1cmUtPnNhdmUoU3RyaW5nKCkuZm9ybWF0KCIvdG1wL2xh
eWVyXyVkLnBuZyIsIHJlbmRlckNvdW50KSk7Ci0jZW5kaWYKLSAgICB9CiAgICAgbV9jdXJyZW50
Q29udGVudC5uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKIAogfQpAQCAtNzM5LDggKzcyOSw2IEBAIHZv
aWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50U2VsZihjb25zdCBUZXhtYXBQYWludE9wdGlvbnMm
IG9wdGlvbnMpCiAKIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50UmVjdXJzaXZlKFRleG1h
cFBhaW50T3B0aW9ucyBvcHRpb25zKQogewotICAgIFdURjo6U3RvcFdhdGNoIHN0b3BXYXRjaDsK
LQogICAgIGJvb2wgaXNEaXJ0eSA9IG1fc3RhdGUuZGlydHk7CiAgICAgbV9zdGF0ZS5kaXJ0eSA9
IGZhbHNlOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50
LmggYi9XZWJDb3JlL3BsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50LmgKaW5kZXggOTVhZTg4Yy4u
ZDhmNDE3MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5o
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVdlYlBhZ2VDbGllbnQuaApAQCAtNTIsNyArNTIs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kRW5hYmxlZChib29s
IGVuYWJsZSkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpbnB1dE1ldGhvZEVuYWJsZWQoKSBjb25z
dCA9IDA7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRSb290R3JhcGhpY3NMYXllcihQbGF0Zm9ybUxheWVyKiBsYXllcikgeyB9CisgICAgdmly
dHVhbCB2b2lkIHNldFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqIGxh
eWVyKSB7IH0KIAogICAgIC8vIHRoaXMgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgY29tcG9zaXRvciB3
YW50cyB1cyB0byBzeW5jIHRoZSBsYXllcnMKICAgICAvLyBpZiBzY2hlZHVsZVN5bmMgaXMgdHJ1
ZSwgd2Ugc2NoZWR1bGUgYSBzeW5jIG91cnNlbHZlcy4gb3RoZXJ3aXNlLApkaWZmIC0tZ2l0IGEv
V2ViS2l0L3F0L0NoYW5nZUxvZyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggNjU3ZDk5Yy4u
MWNmNzhkMiAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvcXQv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTAtMTAtMjggIE5vYW0gUm9zZW50aGFsICA8
bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IEFyaXlhIEhp
ZGF5YXQuCisKKyAgICAgICAgW1RleG1hcF0gW1F0XSBUZXh0dXJlIG1hcHBlciBpbml0aWFsIGlt
cGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NzA3MAorCisgICAgICAgIEJ1aWxkIGZpeCwKKworICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L1BhZ2VDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUxheWVyUHJv
eHlRR3JhcGhpY3NPYmplY3Q6OlBsYXRmb3JtTGF5ZXJQcm94eVFHcmFwaGljc09iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojp+UGFnZUNsaWVudFFH
cmFwaGljc1dpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lk
Z2V0OjpzZXRSb290R3JhcGhpY3NMYXllcik6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGFn
ZUNsaWVudFF0Lmg6CisKIDIwMTAtMTAtMjggIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8
a2VubmV0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcu
CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcCBi
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCmluZGV4IDRlNTFmODEu
LjRkNDJjMzkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50
UXQuY3BwCisrKyBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCkBA
IC05NywxMSArOTcsMTEgQEAgcHJpdmF0ZToKICAgICBRV2lkZ2V0KiBtX3dpZGdldDsKIH07CiAK
LWNsYXNzIFBsYXRmb3JtTGF5ZXJQcm94eVFHcmFwaGljc09iamVjdCA6IHB1YmxpYyBQbGF0ZnJv
bUxheWVyUHJveHlRdCB7CitjbGFzcyBQbGF0Zm9ybUxheWVyUHJveHlRR3JhcGhpY3NPYmplY3Qg
OiBwdWJsaWMgUGxhdGZvcm1MYXllclByb3h5UXQgewogcHVibGljOgotICAgIFBsYXRmb3JtTGF5
ZXJQcm94eVFHcmFwaGljc1dpZGdldChRV2ViRnJhbWUqIGZyYW1lLCBUZXh0dXJlTWFwcGVyQ29u
dGVudExheWVyKiBsYXllciwgUUdyYXBoaWNzT2JqZWN0KiBvYmplY3QpCi0gICAgICAgIDogUU9i
amVjdChvYmplY3QpCi0gICAgICAgICwgbV9ncmFwaGljc0l0ZW0oZ3JhcGhpY3NPYmplY3QpCisg
ICAgUGxhdGZvcm1MYXllclByb3h5UUdyYXBoaWNzT2JqZWN0KFFXZWJGcmFtZSogZnJhbWUsIFRl
eHR1cmVNYXBwZXJDb250ZW50TGF5ZXIqIGxheWVyLCBRR3JhcGhpY3NPYmplY3QqIG9iamVjdCkK
KyAgICAgICAgOiBQbGF0Zm9ybUxheWVyUHJveHlRdChmcmFtZSwgbGF5ZXIsIG9iamVjdCkKKyAg
ICAgICAgLCBtX2dyYXBoaWNzSXRlbShvYmplY3QpCiAgICAgewogICAgIH0KIApAQCAtMjI4LDEy
ICsyMjgsMTYgQEAgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6flBhZ2VDbGllbnRRR3JhcGhp
Y3NXaWRnZXQoKQogewogICAgIGRlbGV0ZSBvdmVybGF5OwogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgZGVsZXRlIHBsYXRmb3Jt
TGF5ZXJQcm94eTsKKyNlbHNlCiAgICAgaWYgKCFyb290R3JhcGhpY3NMYXllcikKICAgICAgICAg
cmV0dXJuOwogICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gZGVsZXRlIHRoZSByb290IGdyYXBoaWNz
IGxheWVyLiBUaGUgbGlmZWN5Y2xlIGlzIG1hbmFnZWQgaW4gR3JhcGhpY3NMYXllclF0LmNwcC4K
ICAgICByb290R3JhcGhpY3NMYXllci5kYXRhKCktPnNldFBhcmVudEl0ZW0oMCk7CiAgICAgdmll
dy0+c2NlbmUoKS0+cmVtb3ZlSXRlbShyb290R3JhcGhpY3NMYXllci5kYXRhKCkpOwogI2VuZGlm
CisjZW5kaWYKIH0KIAogdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzY3JvbGwoaW50
IGR4LCBpbnQgZHksIGNvbnN0IFFSZWN0JiByZWN0VG9TY3JvbGwpCkBAIC0yOTMsNyArMjk3LDcg
QEAgdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzeW5jTGF5ZXJzKCkKIHZvaWQgUGFn
ZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXIqIGxheWVyKQogewogICAgIGlmIChsYXllcikgewotICAgICAgICBwbGF0
Zm9ybUxheWVyUHJveHkgPSBuZXcgUGxhdGZvcm1MYXllclByb3h5UUdyYXBoaWNzT2JqZWN0KHBh
Z2UtPm1haW5GcmFtZSgpLCBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyQ29udGVudExheWVyKj4o
bGF5ZXIpLCAwLCB2aWV3KTsKKyAgICAgICAgcGxhdGZvcm1MYXllclByb3h5ID0gbmV3IFBsYXRm
b3JtTGF5ZXJQcm94eVFHcmFwaGljc09iamVjdChwYWdlLT5tYWluRnJhbWUoKSwgc3RhdGljX2Nh
c3Q8VGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcio+KGxheWVyKSwgdmlldyk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgZGVsZXRlIHBsYXRmb3JtTGF5ZXJQcm94eTsKZGlmZiAtLWdpdCBh
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuaCBiL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuaAppbmRleCA2ZDk4OWZhLi45MjRkMmE3IDEwMDY0NAot
LS0gYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmgKKysrIGIvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oCkBAIC00NywxMSArNDcsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFBhZ2VDbGllbnRRV2lkZ2V0IDogcHVibGljIFFX
ZWJQYWdlQ2xpZW50Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVY
VFVSRV9NQVBQRVIpCi0gICAgICAgICwgcHVibGljIHZpcnR1YWwgVGV4dHVyZU1hcHBlckxheWVy
Q2xpZW50Ci0jZW5kaWYKLXsKK2NsYXNzIFBhZ2VDbGllbnRRV2lkZ2V0IDogcHVibGljIFFXZWJQ
YWdlQ2xpZW50IHsKIHB1YmxpYzoKICAgICBQYWdlQ2xpZW50UVdpZGdldChRV2lkZ2V0KiBuZXdW
aWV3LCBRV2ViUGFnZSogbmV3UGFnZSkKICAgICAgICAgOiB2aWV3KG5ld1ZpZXcpCkBAIC0xNDMs
MTEgKzEzOSw3IEBAIGNsYXNzIFFHcmFwaGljc0l0ZW1PdmVybGF5IDogcHVibGljIFFHcmFwaGlj
c09iamVjdCB7CiB9OwogCiAKLWNsYXNzIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQgOiBwdWJs
aWMgUVdlYlBhZ2VDbGllbnQKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVT
RShURVhUVVJFX01BUFBFUikKLSAgICAgICAgLCBwdWJsaWMgdmlydHVhbCBUZXh0dXJlTWFwcGVy
TGF5ZXJDbGllbnQKLSNlbmRpZgoteworY2xhc3MgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCA6
IHB1YmxpYyBRV2ViUGFnZUNsaWVudCB7CiBwdWJsaWM6CiAgICAgUGFnZUNsaWVudFFHcmFwaGlj
c1dpZGdldChRR3JhcGhpY3NXZWJWaWV3KiBuZXdWaWV3LCBRV2ViUGFnZSogbmV3UGFnZSkKICAg
ICAgICAgOiB2aWV3KG5ld1ZpZXcpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72346</attachid>
            <date>2010-10-29 10:30:17 -0700</date>
            <delta_ts>2010-10-31 18:39:46 -0700</delta_ts>
            <desc>Build fix for X11: Plugins</desc>
            <filename>patch-47070-plugins.diff</filename>
            <type>text/plain</type>
            <size>1658</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZWU2OTdkNi4uMGMxNDEzNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMC0xMC0yOSAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5p
dGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDcwNzAKKworICAgICAgICBCdWlsZCBmaXggZm9yIFgxMS4KKworICAgICAg
ICBObyBuZXcgdGVzdHM7IGJ1aWxkIGZpeC4KKworICAgICAgICAqIHBsdWdpbnMvcXQvUGx1Z2lu
Vmlld1F0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQpOgorCiAyMDEw
LTEwLTI5ICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblZp
ZXdRdC5jcHAKaW5kZXggOWI0ZTU5NS4uZmRiZTU1MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbHVn
aW5zL3F0L1BsdWdpblZpZXdRdC5jcHAKKysrIGIvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblZp
ZXdRdC5jcHAKQEAgLTc4NCw3ICs3ODQsNyBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0
VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycm9yKiByZQogCiB2
b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0j
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykgJiYgIVVTRShURVhUVVJFX01BUFBFUikKICAgICBpZiAobV9wbGF0Zm9ybUxheWVy
KSB7CiAgICAgICAgIG1fcGxhdGZvcm1MYXllci0+dXBkYXRlKFFSZWN0RihyZWN0KSk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTkxOCw3ICs5MTgsNyBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3Jt
U3RhcnQoKQogICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldCgwKTsKICAgICAgICAgbV9wbHVnaW5E
aXNwbGF5ID0gZ2V0UGx1Z2luRGlzcGxheSgpOwogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgIVVTRShURVhUVVJF
X01BUFBFUikKICAgICAgICAgaWYgKG1fcGFyZW50RnJhbWUtPnBhZ2UoKS0+Y2hyb21lKCktPmNs
aWVudCgpLT5hbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKICAgICAgICAgICAgICYmIG1f
cGFyZW50RnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKSAKICAgICAgICAgICAgICYmIG1fcGFyZW50
RnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQo
KSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72347</attachid>
            <date>2010-10-29 10:43:11 -0700</date>
            <delta_ts>2010-10-29 10:54:16 -0700</delta_ts>
            <desc>Patch: small refactor to allow WebKit2 and remove globals</desc>
            <filename>patch-47070-nocontext.diff</filename>
            <type>text/plain</type>
            <size>37823</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZWU2OTdkNi4uYmNjN2MxOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxMC0xMC0yOSAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5p
dGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDcwNzAKKworICAgICAgICBTb21lIHJlZmFjdG9yIGZvciB0ZXhtYXAgdG8g
ZW5hYmxlIFdlYktpdDI6IHJlbW92ZSBnbG9iYWxzLCBhbmQgYWxsb3cgVGV4dHVyZU1hcHBlciB0
byBleGlzdCB3aXRob3V0IGEgR3JhcGhpY3NDb250ZXh0LgorICAgICAgICBUaGlzIHdpbGwgYWxs
b3cgcmVuZGVyaW5nIHRoZSBUZXh0dXJlTWFwcGVyTm9kZSB0cmVlIHdpdGhvdXQgYW4gYWN0aXZl
IFFQYWludGVyLCBpbnRvIHRoZSBjdXJyZW50IEdMIGNvbnRleHQuCisgICAgICAgIE1vc3Qgb2Yg
dGhlIGNoYW5nZXMgc2ltcGx5IG1vdmUgdGhlIGdsb2JhcyBpbiBUZXh0dXJlTWFwcGVyR0wgaW50
byBtZW1iZXJzIG9mIHRoYXQgY2xhc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBPbGQgdGVz
dHMgaW4gTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcgY292ZXIgdGhpcy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6U2hhZGVySW5mbzo6Z2V0VW5pZm9ybUxvY2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTFByaXZhdGU6OlNoYWRlcklu
Zm86OmNyZWF0ZVNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckdMUHJpdmF0ZTo6RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZXBvc2l0b3J5OjpmaW5kT3JDcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6RGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2VSZXBvc2l0b3J5OjpkZXJlZik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0xQcml2YXRlOjpEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnk6OkRp
cmVjdGx5Q29tcG9zaXRlZEltYWdlUmVwb3NpdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0xQcml2YXRlOjpEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnk6On5E
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckdMUHJpdmF0ZTo6VGV4dHVyZU1hcHBlckdMUHJpdmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcFRleHR1cmVHTDo6c2V0Q29udGVudHNUb0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcFRleHR1cmVHTDo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
R0w6On5UZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjpvYnRhaW5DdXJyZW50Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
R0w6OmJpbmRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6cGFp
bnRUb1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZVRl
eHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVy
R0wuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclF0OjpUZXh0dXJlTWFwcGVyUXQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclF0OjpzZXRHcmFwaGljc0NvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJOb2RlOjp1cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpzZXRHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlcjo6c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpzZXRUZXh0RHJhd2luZ01vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjp0ZXh0RHJhd2luZ01vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6VGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ29udGVudExheWVyOjpwYWludCk6CisKIDIwMTAt
MTAtMjkgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAKaW5kZXggOTY2NjU2Yi4u
ZTJjOGY3NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4
dHVyZU1hcHBlckdMLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9U
ZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0zMSw5ICszMSwxNCBAQAogI2luY2x1ZGUgPEdMRVMyL2ds
Mi5oPgogI2VsaWYgT1MoTUFDX09TX1gpCiAjaW5jbHVkZSA8Z2wuaD4KKyNpbmNsdWRlIDxBR0wv
YWdsLmg+CiAjZWxzZQorI2lmIE9TKFVOSVgpCisjaW5jbHVkZSA8R0wvZ2x4Lmg+CisjZW5kaWYK
ICNpbmNsdWRlIDxHTC9nbC5oPgogI2VuZGlmCisjaW5jbHVkZSA8R0wvZ2x4Lmg+CiAKICNpZm5k
ZWYgVEVYTUFQX09QRU5HTF9FUzIKIGV4dGVybiAiQyIgewpAQCAtNzQsNiArNzksMTYgQEAgZXh0
ZXJuICJDIiB7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmIE9TKE1BQ19PU19YKQordHlw
ZWRlZiBBR0xDb250ZXh0IEdMQ29udGV4dEhhbmRsZTsKKyNlbGlmIE9TKFVOSVgpCisgICAgc3Ry
dWN0IEdMWENvbnRleHRIYW5kbGUgeworICAgICAgICBEcmF3YWJsZSBkcmF3YWJsZTsKKyAgICAg
ICAgR0xYQ29udGV4dCBjb250ZXh0OworICAgIH07CisgICAgdHlwZWRlZiBHTFhDb250ZXh0SGFu
ZGxlIEdMQ29udGV4dEhhbmRsZTsKKyNlbmRpZgorCiBpbmxpbmUgc3RhdGljIHZvaWQgZGVidWdH
TENvbW1hbmQoY29uc3QgY2hhciogY29tbWFuZCwgaW50IGxpbmUpCiB7CiAgICAgY29uc3QgR0xl
bnVtIGVyciA9IGdsR2V0RXJyb3IoKTsKQEAgLTkwLDYgKzEwNSwxMjEgQEAgaW5saW5lIHN0YXRp
YyB2b2lkIGRlYnVnR0xDb21tYW5kKGNvbnN0IGNoYXIqIGNvbW1hbmQsIGludCBsaW5lKQogI2Rl
ZmluZSBHTF9DTUQoeCkgeAogI2VuZGlmCiAKK3N0cnVjdCBUZXh0dXJlTWFwcGVyR0xQcml2YXRl
IHsKKyAgICBzdGF0aWMgc3RydWN0IFNoYWRlckluZm8geworICAgICAgICBlbnVtIFNoYWRlclBy
b2dyYW1JbmRleCB7CisgICAgICAgICAgICBTaW1wbGVQcm9ncmFtLAorICAgICAgICAgICAgT3Bh
Y2l0eUFuZE1hc2tQcm9ncmFtLAorICAgICAgICAgICAgVGFyZ2V0UHJvZ3JhbSwKKyAgICAgICAg
ICAgIE51bVByb2dyYW1zCisgICAgICAgIH07CisKKyAgICAgICAgZW51bSBTaGFkZXJWYXJpYWJs
ZUluZGV4IHsKKyAgICAgICAgICAgIEluTWF0cml4VmFyaWFibGUsCisgICAgICAgICAgICBJblNv
dXJjZU1hdHJpeFZhcmlhYmxlLAorICAgICAgICAgICAgSW5NYXNrTWF0cml4VmFyaWFibGUsCisg
ICAgICAgICAgICBJblZlcnRleFZhcmlhYmxlLAorCisgICAgICAgICAgICBPcGFjaXR5VmFyaWFi
bGUsCisgICAgICAgICAgICBTb3VyY2VUZXh0dXJlVmFyaWFibGUsCisgICAgICAgICAgICBNYXNr
VGV4dHVyZVZhcmlhYmxlLAorICAgICAgICAgICAgTnVtVmFyaWFibGVzCisgICAgICAgIH07CisK
KyAgICAgICAgc3RydWN0IFByb2dyYW1JbmZvIHsKKyAgICAgICAgICAgIEdMdWludCBpZDsKKyAg
ICAgICAgICAgIEdMaW50IHZhcnNbTnVtVmFyaWFibGVzXTsKKyAgICAgICAgfTsKKworICAgICAg
ICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oU2hhZGVyUHJvZ3JhbUluZGV4IHByb2csIFNoYWRl
clZhcmlhYmxlSW5kZXggdmFyLCBjb25zdCBjaGFyKiBuYW1lKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gcHJvZ3JhbXNbcHJvZ10udmFyc1t2YXJdID0gZ2xHZXRVbmlmb3JtTG9jYXRp
b24ocHJvZ3JhbXNbcHJvZ10uaWQsIG5hbWUpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBj
cmVhdGVTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3Qg
Y2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UsIFNoYWRlclByb2dyYW1JbmRleCBpbmRleCkKKyAg
ICAgICAgeworICAgICAgICAgICAgR0x1aW50IHZlcnRleFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVy
KEdMX1ZFUlRFWF9TSEFERVIpOworICAgICAgICAgICAgR0x1aW50IGZyYWdtZW50U2hhZGVyID0g
Z2xDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKKyAgICAgICAgICAgIEdMX0NNRChn
bFNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2UsIDApKQor
ICAgICAgICAgICAgR0xfQ01EKGdsU2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCAxLCAmZnJh
Z21lbnRTaGFkZXJTb3VyY2UsIDApKQorICAgICAgICAgICAgR0x1aW50IHByb2dyYW1JRCA9IGds
Q3JlYXRlUHJvZ3JhbSgpOworICAgICAgICAgICAgR0xfQ01EKGdsQ29tcGlsZVNoYWRlcih2ZXJ0
ZXhTaGFkZXIpKQorICAgICAgICAgICAgR0xfQ01EKGdsQ29tcGlsZVNoYWRlcihmcmFnbWVudFNo
YWRlcikpCisgICAgICAgICAgICBHTF9DTUQoZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2ZXJ0
ZXhTaGFkZXIpKQorICAgICAgICAgICAgR0xfQ01EKGdsQXR0YWNoU2hhZGVyKHByb2dyYW1JRCwg
ZnJhZ21lbnRTaGFkZXIpKQorICAgICAgICAgICAgR0xfQ01EKGdsQmluZEF0dHJpYkxvY2F0aW9u
KHByb2dyYW1JRCwgMCwgIkluVmVydGV4IikpCisgICAgICAgICAgICBHTF9DTUQoZ2xMaW5rUHJv
Z3JhbShwcm9ncmFtSUQpKQorICAgICAgICAgICAgcHJvZ3JhbXNbaW5kZXhdLmlkID0gcHJvZ3Jh
bUlEOworICAgICAgICAgICAgY2hhciBpbmZvTG9nWzEwMjRdOworICAgICAgICAgICAgaW50IGxl
bjsKKyAgICAgICAgICAgIEdMX0NNRChnbEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW1JRCwgMTAy
NCwgJmxlbiwgaW5mb0xvZykpOworICAgICAgICB9CisKKyAgICAgICAgUHJvZ3JhbUluZm8gcHJv
Z3JhbXNbTnVtUHJvZ3JhbXNdOworCisgICAgfSBzaGFkZXJJbmZvOworCisgICAgc3RydWN0IERp
cmVjdGx5Q29tcG9zaXRlZEltYWdlUmVwb3NpdG9yeSB7CisgICAgICAgIHN0cnVjdCBFbnRyeSB7
CisgICAgICAgICAgICBHTHVpbnQgdGV4dHVyZTsKKyAgICAgICAgICAgIGludCByZWZDb3VudDsK
KyAgICAgICAgfTsKKyAgICAgICAgSGFzaE1hcDxOYXRpdmVJbWFnZVB0ciwgRW50cnk+IGltYWdl
VG9UZXh0dXJlOworCisgICAgICAgIEdMdWludCBmaW5kT3JDcmVhdGUoTmF0aXZlSW1hZ2VQdHIg
aW1hZ2UsIGJvb2wmIGZvdW5kKQorICAgICAgICB7CisgICAgICAgICAgICBIYXNoTWFwPE5hdGl2
ZUltYWdlUHRyLCBFbnRyeT46Oml0ZXJhdG9yIGl0ID0gaW1hZ2VUb1RleHR1cmUuZmluZChpbWFn
ZSk7CisgICAgICAgICAgICBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgaWYgKGl0ICE9IGlt
YWdlVG9UZXh0dXJlLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgaXQtPnNlY29uZC5yZWZDb3Vu
dCsrOworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gaXQtPnNlY29uZC50ZXh0dXJlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRW50cnkg
ZW50cnk7CisgICAgICAgICAgICBHTF9DTUQoZ2xHZW5UZXh0dXJlcygxLCAmZW50cnkudGV4dHVy
ZSkpOworICAgICAgICAgICAgZW50cnkucmVmQ291bnQgPSAxOworICAgICAgICAgICAgaW1hZ2VU
b1RleHR1cmUuYWRkKGltYWdlLCBlbnRyeSk7CisgICAgICAgICAgICByZXR1cm4gZW50cnkudGV4
dHVyZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgZGVyZWYoTmF0aXZlSW1hZ2VQdHIgaW1h
Z2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIsIEVudHJ5
Pjo6aXRlcmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5maW5kKGltYWdlKTsKKyAgICAgICAgICAg
IGlmIChpdCAhPSBpbWFnZVRvVGV4dHVyZS5lbmQoKSkgeworICAgICAgICAgICAgICAgIGlmIChp
dC0+c2Vjb25kLnJlZkNvdW50IDwgMikgeworICAgICAgICAgICAgICAgICAgICBpbWFnZVRvVGV4
dHVyZS5yZW1vdmUoaXQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKworICAgICAgICBEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnkoKQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB+RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VS
ZXBvc2l0b3J5KCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChIYXNoTWFwPE5hdGl2ZUlt
YWdlUHRyLCBFbnRyeT46Oml0ZXJhdG9yIGl0ID0gaW1hZ2VUb1RleHR1cmUuYmVnaW4oKTsgaXQg
IT0gaW1hZ2VUb1RleHR1cmUuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgICAgICBHTHVpbnQg
dGV4dHVyZSA9IGl0LT5zZWNvbmQudGV4dHVyZTsKKyAgICAgICAgICAgICAgICBpZiAodGV4dHVy
ZSkKKyAgICAgICAgICAgICAgICAgICAgR0xfQ01EKGdsRGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1
cmUpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAgfSBkaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZXM7CisKKyAgICBUZXh0dXJlTWFwcGVyR0xQcml2YXRlKCkKKyAgICAgICAgOiBjdXJy
ZW50UHJvZ3JhbShUZXh0dXJlTWFwcGVyR0xQcml2YXRlOjpTaGFkZXJJbmZvOjpUYXJnZXRQcm9n
cmFtKQorICAgIHsgfQorCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcHJvamVjdGlvbk1hdHJp
eDsKKyAgICBpbnQgY3VycmVudFByb2dyYW07CisgICAgR0xDb250ZXh0SGFuZGxlIGNvbnRleHRI
YW5kbGU7Cit9OworCitUZXh0dXJlTWFwcGVyR0xQcml2YXRlOjpTaGFkZXJJbmZvIFRleHR1cmVN
YXBwZXJHTFByaXZhdGU6OnNoYWRlckluZm87CisKIGNsYXNzIEJpdG1hcFRleHR1cmVHTCA6IHB1
YmxpYyBCaXRtYXBUZXh0dXJlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgp
OwpAQCAtMTExLDYgKzI0MSw3IEBAIHByaXZhdGU6CiAgICAgR0x1aW50IG1fZmJvOwogICAgIElu
dFNpemUgbV9hY3R1YWxTaXplOwogICAgIGJvb2wgbV9zdXJmYWNlTmVlZHNSZXNldDsKKyAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlckdMPiBtX3RleHR1cmVNYXBwZXI7CiAgICAgQml0bWFwVGV4dHVy
ZUdMKCkKICAgICAgICAgOiBtX2lkKDApCiAgICAgICAgICwgbV9pbWFnZSgwKQpAQCAtMTIzLDcy
ICsyNTQsMjEgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlckdMOwog
fTsKIAotc3RhdGljIHN0cnVjdCBUZXhtYXBTaGFkZXJJbmZvIHsKLSAgICBlbnVtIFNoYWRlclBy
b2dyYW1JbmRleCB7Ci0gICAgICAgIFNpbXBsZVByb2dyYW0sCi0gICAgICAgIE9wYWNpdHlBbmRN
YXNrUHJvZ3JhbSwKLSAgICAgICAgVGFyZ2V0UHJvZ3JhbSwKLSAgICAgICAgTnVtUHJvZ3JhbXMK
LSAgICB9OwotCi0gICAgZW51bSBTaGFkZXJWYXJpYWJsZUluZGV4IHsKLSAgICAgICAgSW5NYXRy
aXhWYXJpYWJsZSwKLSAgICAgICAgSW5Tb3VyY2VNYXRyaXhWYXJpYWJsZSwKLSAgICAgICAgSW5N
YXNrTWF0cml4VmFyaWFibGUsCi0gICAgICAgIEluVmVydGV4VmFyaWFibGUsCiAKLSAgICAgICAg
T3BhY2l0eVZhcmlhYmxlLAotICAgICAgICBTb3VyY2VUZXh0dXJlVmFyaWFibGUsCi0gICAgICAg
IE1hc2tUZXh0dXJlVmFyaWFibGUsCi0gICAgICAgIE51bVZhcmlhYmxlcwotICAgIH07Ci0KLSAg
ICBzdHJ1Y3QgUHJvZ3JhbUluZm8gewotICAgICAgICBHTHVpbnQgaWQ7Ci0gICAgICAgIEdMaW50
IHZhcnNbTnVtVmFyaWFibGVzXTsKLSAgICB9OwotCi0gICAgR0xpbnQgZ2V0VW5pZm9ybUxvY2F0
aW9uKFNoYWRlclByb2dyYW1JbmRleCBwcm9nLCBTaGFkZXJWYXJpYWJsZUluZGV4IHZhciwgY29u
c3QgY2hhciogbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBwcm9ncmFtc1twcm9nXS52YXJz
W3Zhcl0gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtc1twcm9nXS5pZCwgbmFtZSk7Ci0g
ICAgfQotCi0gICAgdm9pZCBjcmVhdGVTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRleFNo
YWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UsIFNoYWRlclByb2dy
YW1JbmRleCBpbmRleCkKLSAgICB7Ci0gICAgICAgIEdMdWludCB2ZXJ0ZXhTaGFkZXIgPSBnbENy
ZWF0ZVNoYWRlcihHTF9WRVJURVhfU0hBREVSKTsKLSAgICAgICAgR0x1aW50IGZyYWdtZW50U2hh
ZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKLSAgICAgICAgR0xfQ01E
KGdsU2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgMSwgJnZlcnRleFNoYWRlclNvdXJjZSwgMCkp
Ci0gICAgICAgIEdMX0NNRChnbFNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgMSwgJmZyYWdt
ZW50U2hhZGVyU291cmNlLCAwKSkKLSAgICAgICAgR0x1aW50IHByb2dyYW1JRCA9IGdsQ3JlYXRl
UHJvZ3JhbSgpOwotICAgICAgICBHTF9DTUQoZ2xDb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcikp
Ci0gICAgICAgIEdMX0NNRChnbENvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpKQotICAgICAg
ICBHTF9DTUQoZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2ZXJ0ZXhTaGFkZXIpKQotICAgICAg
ICBHTF9DTUQoZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNoYWRlcikpCi0gICAg
ICAgIEdMX0NNRChnbEJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsIDAsICJJblZlcnRleCIp
KQotICAgICAgICBHTF9DTUQoZ2xMaW5rUHJvZ3JhbShwcm9ncmFtSUQpKQotICAgICAgICBwcm9n
cmFtc1tpbmRleF0uaWQgPSBwcm9ncmFtSUQ7Ci0gICAgICAgIGNoYXIgaW5mb0xvZ1sxMDI0XTsK
LSAgICAgICAgaW50IGxlbjsKLSAgICAgICAgR0xfQ01EKGdsR2V0UHJvZ3JhbUluZm9Mb2cocHJv
Z3JhbUlELCAxMDI0LCAmbGVuLCBpbmZvTG9nKSk7Ci0gICAgfQotCi0gICAgUHJvZ3JhbUluZm8g
cHJvZ3JhbXNbTnVtUHJvZ3JhbXNdOwotCi19IGdTaGFkZXJJbmZvOwogCiAjZGVmaW5lIFRFWE1B
UF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihwcm9nLCB2YXIpIFwKLSAgICAgICAgICAgIGlmIChn
U2hhZGVySW5mby5nZXRVbmlmb3JtTG9jYXRpb24oVGV4bWFwU2hhZGVySW5mbzo6cHJvZyMjUHJv
Z3JhbSwgVGV4bWFwU2hhZGVySW5mbzo6dmFyIyNWYXJpYWJsZSwgI3ZhcikgPCAwKSBcCisgICAg
ICAgICAgICBpZiAocHZ0LT5zaGFkZXJJbmZvLmdldFVuaWZvcm1Mb2NhdGlvbihUZXh0dXJlTWFw
cGVyR0xQcml2YXRlOjpTaGFkZXJJbmZvOjpwcm9nIyNQcm9ncmFtLCBUZXh0dXJlTWFwcGVyR0xQ
cml2YXRlOjpTaGFkZXJJbmZvOjp2YXIjI1ZhcmlhYmxlLCAjdmFyKSA8IDApIFwKICAgICAgICAg
ICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZG4ndCBmaW5kIHZhcmlhYmxlICIjdmFyIiBpbiBw
cm9ncmFtICIjcHJvZyJcbiIpOwotI2RlZmluZSBURVhNQVBfQlVJTERfU0hBREVSKHByb2dyYW0p
IGdTaGFkZXJJbmZvLmNyZWF0ZVNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNlIyNwcm9n
cmFtLCBmcmFnbWVudFNoYWRlclNvdXJjZSMjcHJvZ3JhbSwgVGV4bWFwU2hhZGVySW5mbzo6cHJv
Z3JhbSMjUHJvZ3JhbSk7CisjZGVmaW5lIFRFWE1BUF9CVUlMRF9TSEFERVIocHJvZ3JhbSkgcHZ0
LT5zaGFkZXJJbmZvLmNyZWF0ZVNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNlIyNwcm9n
cmFtLCBmcmFnbWVudFNoYWRlclNvdXJjZSMjcHJvZ3JhbSwgVGV4dHVyZU1hcHBlckdMUHJpdmF0
ZTo6U2hhZGVySW5mbzo6cHJvZ3JhbSMjUHJvZ3JhbSk7CiAKLVRleHR1cmVNYXBwZXJHTDo6VGV4
dHVyZU1hcHBlckdMKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLSAgICA6IFRleHR1cmVNYXBw
ZXIoY29udGV4dCkKLSAgICAsIG1fY3VycmVudFByb2dyYW0oVGV4bWFwU2hhZGVySW5mbzo6VGFy
Z2V0UHJvZ3JhbSkKK1RleHR1cmVNYXBwZXJHTDo6VGV4dHVyZU1hcHBlckdMKCkKKyAgICA6IHB2
dChuZXcgVGV4dHVyZU1hcHBlckdMUHJpdmF0ZSkKIHsKLSAgICBzdGF0aWMgYm9vbCBzaGFkZXJz
Q29tcGlsZWQgPSBmYWxzZTsKLSAgICBpZiAoc2hhZGVyc0NvbXBpbGVkKQorICAgIG9idGFpbkN1
cnJlbnRDb250ZXh0KCk7CisgICAgc3RhdGljIGJvb2wgY29tcGlsZWRTaGFkZXJzID0gZmFsc2U7
CisgICAgaWYgKGNvbXBpbGVkU2hhZGVycykKICAgICAgICAgcmV0dXJuOwotICAgIHNoYWRlcnND
b21waWxlZCA9IHRydWU7CisgICAgY29tcGlsZWRTaGFkZXJzID0gdHJ1ZTsKICNpZm5kZWYgVEVY
TUFQX09QRU5HTF9FUzIKICNkZWZpbmUgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlMgXAogICAg
ICIjZGVmaW5lIGxvd3BcbiNkZWZpbmUgaGlnaHBcbiIKQEAgLTI4NSwxOCArMzY1LDE4IEBAIHZv
aWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0
dXJlLCBjb25zdCBJbnRSZWN0JiB0CiAKICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wmIHRleHR1
cmVHTCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KHRleHR1cmUpOwogCi0g
ICAgVGV4bWFwU2hhZGVySW5mbzo6U2hhZGVyUHJvZ3JhbUluZGV4IHByb2dyYW07CisgICAgVGV4
dHVyZU1hcHBlckdMUHJpdmF0ZTo6U2hhZGVySW5mbzo6U2hhZGVyUHJvZ3JhbUluZGV4IHByb2dy
YW07CiAgICAgaWYgKG1hc2tUZXh0dXJlKQotICAgICAgICBwcm9ncmFtID0gVGV4bWFwU2hhZGVy
SW5mbzo6T3BhY2l0eUFuZE1hc2tQcm9ncmFtOworICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1h
cHBlckdMUHJpdmF0ZTo6U2hhZGVySW5mbzo6T3BhY2l0eUFuZE1hc2tQcm9ncmFtOwogICAgIGVs
c2UKLSAgICAgICAgcHJvZ3JhbSA9IFRleG1hcFNoYWRlckluZm86OlNpbXBsZVByb2dyYW07Cisg
ICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyR0xQcml2YXRlOjpTaGFkZXJJbmZvOjpTaW1w
bGVQcm9ncmFtOwogCi0gICAgY29uc3QgVGV4bWFwU2hhZGVySW5mbzo6UHJvZ3JhbUluZm8mIHBy
b2dyYW1JbmZvID0gZ1NoYWRlckluZm8ucHJvZ3JhbXNbcHJvZ3JhbV07Ci0gICAgaWYgKG1fY3Vy
cmVudFByb2dyYW0gIT0gcHJvZ3JhbSkgeworICAgIGNvbnN0IFRleHR1cmVNYXBwZXJHTFByaXZh
dGU6OlNoYWRlckluZm86OlByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbyA9IHB2dC0+c2hhZGVySW5m
by5wcm9ncmFtc1twcm9ncmFtXTsKKyAgICBpZiAocHZ0LT5jdXJyZW50UHJvZ3JhbSAhPSBwcm9n
cmFtKSB7CiAgICAgICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbUluZm8uaWQpKQotICAg
ICAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZ1NoYWRlckluZm8ucHJvZ3Jh
bXNbbV9jdXJyZW50UHJvZ3JhbV0udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblZlcnRleFZhcmlh
YmxlXSkpCi0gICAgICAgIG1fY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOwotICAgICAgICBHTF9D
TUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRl
ckluZm86OkluVmVydGV4VmFyaWFibGVdKSkKKyAgICAgICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KHB2dC0+c2hhZGVySW5mby5wcm9ncmFtc1twdnQtPmN1cnJlbnRQcm9ncmFt
XS52YXJzW1RleHR1cmVNYXBwZXJHTFByaXZhdGU6OlNoYWRlckluZm86OkluVmVydGV4VmFyaWFi
bGVdKSkKKyAgICAgICAgcHZ0LT5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07CisgICAgICAgIEdM
X0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1h
cHBlckdMUHJpdmF0ZTo6U2hhZGVySW5mbzo6SW5WZXJ0ZXhWYXJpYWJsZV0pKQogICAgIH0KIAog
ICAgIEdMX0NNRChnbERpc2FibGUoR0xfREVQVEhfVEVTVCkpCkBAIC0zMDgsNyArMzg4LDcgQEAg
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRl
eHR1cmUsIGNvbnN0IEludFJlY3QmIHQKICAgICBjb25zdCBHTGZsb2F0IHVuaXRSZWN0W10gPSB7
MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07CiAgICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRl
cigwLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHVuaXRSZWN0KSkKIAotICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KG1fcHJvamVjdGlvbk1h
dHJpeCkubXVsdExlZnQobW9kZWxWaWV3TWF0cml4KS5tdWx0TGVmdChUcmFuc2Zvcm1hdGlvbk1h
dHJpeCgKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1h
dHJpeChwdnQtPnByb2plY3Rpb25NYXRyaXgpLm11bHRMZWZ0KG1vZGVsVmlld01hdHJpeCkubXVs
dExlZnQoVHJhbnNmb3JtYXRpb25NYXRyaXgoCiAgICAgICAgICAgICB0YXJnZXRSZWN0LndpZHRo
KCksIDAsIDAsIDAsCiAgICAgICAgICAgICAwLCB0YXJnZXRSZWN0LmhlaWdodCgpLCAwLCAwLAog
ICAgICAgICAgICAgMCwgMCwgMSwgMCwKQEAgLTMyNCwxMCArNDA0LDEwIEBAIHZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25z
dCBJbnRSZWN0JiB0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgdGV4
dHVyZUdMLm1fcmVsYXRpdmVTaXplLmhlaWdodCgpLCAwLCAwLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgMCwgMCwgMX07Ci0gICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihw
cm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OkluTWF0cml4VmFyaWFibGVdLCAxLCBH
TF9GQUxTRSwgbTQpKQotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8u
dmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblNvdXJjZU1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFM
U0UsIG00c3JjKSkKLSAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbUluZm8udmFyc1tUZXht
YXBTaGFkZXJJbmZvOjpTb3VyY2VUZXh0dXJlVmFyaWFibGVdLCAwKSkKLSAgICBHTF9DTUQoZ2xV
bmlmb3JtMWYocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpPcGFjaXR5VmFyaWFi
bGVdLCBvcGFjaXR5KSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZv
LnZhcnNbVGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6U2hhZGVySW5mbzo6SW5NYXRyaXhWYXJpYWJs
ZV0sIDEsIEdMX0ZBTFNFLCBtNCkpCisgICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9n
cmFtSW5mby52YXJzW1RleHR1cmVNYXBwZXJHTFByaXZhdGU6OlNoYWRlckluZm86OkluU291cmNl
TWF0cml4VmFyaWFibGVdLCAxLCBHTF9GQUxTRSwgbTRzcmMpKQorICAgIEdMX0NNRChnbFVuaWZv
cm0xaShwcm9ncmFtSW5mby52YXJzW1RleHR1cmVNYXBwZXJHTFByaXZhdGU6OlNoYWRlckluZm86
OlNvdXJjZVRleHR1cmVWYXJpYWJsZV0sIDApKQorICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9n
cmFtSW5mby52YXJzW1RleHR1cmVNYXBwZXJHTFByaXZhdGU6OlNoYWRlckluZm86Ok9wYWNpdHlW
YXJpYWJsZV0sIG9wYWNpdHkpKQogCiAgICAgaWYgKG1hc2tUZXh0dXJlICYmIG1hc2tUZXh0dXJl
LT5pc1ZhbGlkKCkpIHsKICAgICAgICAgY29uc3QgQml0bWFwVGV4dHVyZUdMKiBtYXNrVGV4dHVy
ZUdMID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMKj4obWFza1RleHR1cmUpOwpA
QCAtMzM3LDggKzQxNyw4IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25z
dCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIG1hc2tUZXh0dXJlR0wtPm1fcmVsYXRpdmVT
aXplLmhlaWdodCgpLCAwLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLCAwLCAxLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCAwLCAwLCAxfTsKLSAgICAgICAgZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZh
cnNbVGV4bWFwU2hhZGVySW5mbzo6SW5NYXNrTWF0cml4VmFyaWFibGVdLCAxLCBHTF9GQUxTRSwg
bTRtYXNrKTsKLSAgICAgICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4
bWFwU2hhZGVySW5mbzo6TWFza1RleHR1cmVWYXJpYWJsZV0sIDEpKQorICAgICAgICBnbFVuaWZv
cm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xQcml2YXRlOjpTaGFk
ZXJJbmZvOjpJbk1hc2tNYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNG1hc2spOworICAg
ICAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xQ
cml2YXRlOjpTaGFkZXJJbmZvOjpNYXNrVGV4dHVyZVZhcmlhYmxlXSwgMSkpCiAgICAgICAgIEdM
X0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKQogICAgIH0KIApAQCAtNDAyLDQzICs0
ODIsNiBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6ZW5kUGFpbnQoKQogICAgIG1fYnVmZmVyLmNs
ZWFyKCk7CiB9CiAKLXN0cnVjdCBUZXhtYXBHTFNoYWRlclRleHR1cmVzIHsKLSAgICBzdHJ1Y3Qg
RW50cnkgewotICAgICAgICBHTHVpbnQgdGV4dHVyZTsKLSAgICAgICAgaW50IHJlZkNvdW50Owot
ICAgIH07Ci0gICAgSGFzaE1hcDxOYXRpdmVJbWFnZVB0ciwgRW50cnk+IGltYWdlVG9UZXh0dXJl
OwotICAgIEdMdWludCBmaW5kT3JDcmVhdGUoTmF0aXZlSW1hZ2VQdHIgaW1hZ2UsIGJvb2wmIGZv
dW5kKQotICAgIHsKLSAgICAgICAgSGFzaE1hcDxOYXRpdmVJbWFnZVB0ciwgRW50cnk+OjppdGVy
YXRvciBpdCA9IGltYWdlVG9UZXh0dXJlLmZpbmQoaW1hZ2UpOwotICAgICAgICBmb3VuZCA9IGZh
bHNlOwotICAgICAgICBpZiAoaXQgIT0gaW1hZ2VUb1RleHR1cmUuZW5kKCkpIHsKLSAgICAgICAg
ICAgIGl0LT5zZWNvbmQucmVmQ291bnQrKzsKLSAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAg
ICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kLnRleHR1cmU7Ci0gICAgICAgIH0KLSAgICAgICAg
RW50cnkgZW50cnk7Ci0gICAgICAgIEdMX0NNRChnbEdlblRleHR1cmVzKDEsICZlbnRyeS50ZXh0
dXJlKSk7Ci0gICAgICAgIGVudHJ5LnJlZkNvdW50ID0gMTsKLSAgICAgICAgaW1hZ2VUb1RleHR1
cmUuYWRkKGltYWdlLCBlbnRyeSk7Ci0gICAgICAgIHJldHVybiBlbnRyeS50ZXh0dXJlOwotICAg
IH0KLQotICAgIGJvb2wgZGVyZWYoTmF0aXZlSW1hZ2VQdHIgaW1hZ2UpCi0gICAgewotICAgICAg
ICBIYXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBFbnRyeT46Oml0ZXJhdG9yIGl0ID0gaW1hZ2VUb1Rl
eHR1cmUuZmluZChpbWFnZSk7Ci0gICAgICAgIGlmIChpdCAhPSBpbWFnZVRvVGV4dHVyZS5lbmQo
KSkgewotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQucmVmQ291bnQgPCAyKSB7Ci0gICAgICAg
ICAgICAgICAgaW1hZ2VUb1RleHR1cmUucmVtb3ZlKGl0KTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotfTsKLQotc3RhdGljIFRleG1hcEdMU2hhZGVyVGV4dHVyZXMgZ1RleHR1cmVSZXBv
c2l0b3J5OwotCiB2b2lkIEJpdG1hcFRleHR1cmVHTDo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdl
KiBpbWFnZSkKIHsKICAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSA9IGltYWdlID8gaW1h
Z2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgOiAwOwpAQCAtNDUxLDcgKzQ5NCw3IEBA
IHZvaWQgQml0bWFwVGV4dHVyZUdMOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQog
ICAgIGlmIChuYXRpdmVJbWFnZSA9PSBtX2ltYWdlKQogICAgICAgICByZXR1cm47CiAgICAgYm9v
bCBmb3VuZCA9IGZhbHNlOwotICAgIEdMdWludCBuZXdUZXh0dXJlSUQgPSBnVGV4dHVyZVJlcG9z
aXRvcnkuZmluZE9yQ3JlYXRlKG5hdGl2ZUltYWdlLCBmb3VuZCk7CisgICAgR0x1aW50IG5ld1Rl
eHR1cmVJRCA9IG1fdGV4dHVyZU1hcHBlci0+cHZ0LT5kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMu
ZmluZE9yQ3JlYXRlKG5hdGl2ZUltYWdlLCBmb3VuZCk7CiAgICAgaWYgKG5ld1RleHR1cmVJRCAh
PSBtX2lkKSB7CiAgICAgICAgIGRlc3Ryb3koKTsKICAgICAgICAgbV9pZCA9IG5ld1RleHR1cmVJ
RDsKQEAgLTQ2Nyw3ICs1MTAsNyBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6c2V0Q29udGVudHNU
b0ltYWdlKEltYWdlKiBpbWFnZSkKIAogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmRlc3Ryb3koKQog
ewotICAgIGlmIChtX2lkICYmICghbV9pbWFnZSB8fCAhZ1RleHR1cmVSZXBvc2l0b3J5LmRlcmVm
KG1faW1hZ2UpKSkKKyAgICBpZiAobV9pZCAmJiAoIW1faW1hZ2UgfHwgIW1fdGV4dHVyZU1hcHBl
ci0+cHZ0LT5kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZGVyZWYobV9pbWFnZSkpKQogICAgICAg
ICBHTF9DTUQoZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9pZCkpCiAgICAgaWYgKG1fZmJvKQogICAg
ICAgICBHTF9DTUQoZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKSkKQEAgLTQ5Niw4ICs1
MzksMzIgQEAgc3RhdGljIGlubGluZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjcmVhdGVQcm9qZWN0
aW9uTWF0cml4KGNvbnN0IEludFNpemUmIHNpemUsIGIKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLTEsIGZsaXAgPyAxIDogLTEsIDAsIDEpOwogfQogCi12b2lkIFRleHR1cmVNYXBw
ZXJHTDo6Y2xlYW51cCgpCitUZXh0dXJlTWFwcGVyR0w6On5UZXh0dXJlTWFwcGVyR0woKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGRlbGV0ZSBwdnQ7Cit9CisKK2Jvb2wgVGV4
dHVyZU1hcHBlckdMOjptYWtlQ29udGV4dEN1cnJlbnQoKQogeworI2lmIE9TKE1BQ19PU19YKQor
ICAgIHJldHVybiBhZ2xTZXRDdXJyZW50Q29udGV4dChwdnQtPmNvbnRleHRIYW5kbGUpOworI2Vs
aWYgT1MoVU5JWCkKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gWE9wZW5EaXNwbGF5KE5VTEwpOwor
ICAgIGlmICghZGlzcGxheSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnbFhN
YWtlQ3VycmVudChkaXNwbGF5LCBwdnQtPmNvbnRleHRIYW5kbGUuZHJhd2FibGUsIHB2dC0+Y29u
dGV4dEhhbmRsZS5jb250ZXh0KTsKKyNlbmRpZgorfQorCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6
b2J0YWluQ3VycmVudENvbnRleHQoKQoreworI2lmIE9TKE1BQ19PU19YKQorICAgIHB2dC0+Y29u
dGV4dEhhbmRsZSA9IGFnbEdldEN1cnJlbnRDb250ZXh0KCk7CisjZWxpZiBPUyhVTklYKQorICAg
IHB2dC0+Y29udGV4dEhhbmRsZS5kcmF3YWJsZSA9IGdsWEdldEN1cnJlbnREcmF3YWJsZSgpOwor
ICAgIHB2dC0+Y29udGV4dEhhbmRsZS5jb250ZXh0ID0gZ2xYR2V0Q3VycmVudENvbnRleHQoKTsK
KyNlbmRpZgogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmluZFN1cmZhY2UoQml0bWFwVGV4
dHVyZSAqc3VyZmFjZVBvaW50ZXIpCkBAIC01MjMsNyArNTkwLDcgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUgKnN1cmZhY2VQb2ludGVyKQogICAgIH0K
IAogICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAsIHN1cmZhY2UtPnNpemUoKS53aWR0aCgpLCBz
dXJmYWNlLT5zaXplKCkuaGVpZ2h0KCkpKQotICAgIG1fcHJvamVjdGlvbk1hdHJpeCA9IG1hdHJp
eDsKKyAgICBwdnQtPnByb2plY3Rpb25NYXRyaXggPSBtYXRyaXg7CiB9CiAKIHZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpzZXRDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC01NDMsOCArNjEwLDcg
QEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OnBhaW50VG9UYXJnZXQoY29uc3QgQml0bWFwVGV4dHVy
ZSYgYVN1cmZhY2UsIGNvbnN0IEludFNpemUKICAgICAgICAgICAgICAgICAgICAgICAgIHN1cmZh
Y2UubV9hY3R1YWxTaXplLndpZHRoKCksIDAsIDAsIDAsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCBzdXJmYWNlLm1fYWN0dWFsU2l6ZS5oZWlnaHQoKSwgMCwgMCwKICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsIDAsIDEsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdXJmYWNlLm9m
ZnNldCgpLngoKSwgc3VyZmFjZS5vZmZzZXQoKS55KCksIDAsIDEKLSAgICAgICAgICAgICAgICAp
CisgICAgICAgICAgICAgICAgICAgICAgICBzdXJmYWNlLm9mZnNldCgpLngoKSwgc3VyZmFjZS5v
ZmZzZXQoKS55KCksIDAsIDEpCiAgICAgICAgICAgICApOwogCiAgICAgY29uc3QgR0xmbG9hdCBt
NFtdID0gewpAQCAtNTYwLDE4ICs2MjYsMTggQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OnBhaW50
VG9UYXJnZXQoY29uc3QgQml0bWFwVGV4dHVyZSYgYVN1cmZhY2UsIGNvbnN0IEludFNpemUKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAxfTsKIAogICAgIC8v
IFdlIGFscmVhZHkgYmxlbmRlZCB0aGUgYWxwaGEgaW47IHRoZSByZXN1bHQgaXMgcHJlbXVsdGlw
bGllZC4KLSAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKGdTaGFkZXJJbmZvLnByb2dyYW1zW1RleG1h
cFNoYWRlckluZm86OlRhcmdldFByb2dyYW1dLmlkKSkKKyAgICBHTF9DTUQoZ2xVc2VQcm9ncmFt
KHB2dC0+c2hhZGVySW5mby5wcm9ncmFtc1tUZXh0dXJlTWFwcGVyR0xQcml2YXRlOjpTaGFkZXJJ
bmZvOjpUYXJnZXRQcm9ncmFtXS5pZCkpCiAgICAgR0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCAwKSkKICAgICBHTF9DTUQoZ2xWaWV3cG9ydCgwLCAwLCBzdXJmYWNlU2l6
ZS53aWR0aCgpLCBzdXJmYWNlU2l6ZS5oZWlnaHQoKSkpCiAgICAgR0xfQ01EKGdsRGlzYWJsZShH
TF9TVEVOQ0lMX1RFU1QpKQotICAgIGNvbnN0IFRleG1hcFNoYWRlckluZm86OlByb2dyYW1JbmZv
JiBwcm9ncmFtSW5mbyA9IGdTaGFkZXJJbmZvLnByb2dyYW1zW1RleG1hcFNoYWRlckluZm86OlRh
cmdldFByb2dyYW1dOwotICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9ncmFtSW5mby52YXJzW1Rl
eG1hcFNoYWRlckluZm86Ok9wYWNpdHlWYXJpYWJsZV0sIG9wYWNpdHkpKQorICAgIGNvbnN0IFRl
eHR1cmVNYXBwZXJHTFByaXZhdGU6OlNoYWRlckluZm86OlByb2dyYW1JbmZvJiBwcm9ncmFtSW5m
byA9IHB2dC0+c2hhZGVySW5mby5wcm9ncmFtc1tUZXh0dXJlTWFwcGVyR0xQcml2YXRlOjpTaGFk
ZXJJbmZvOjpUYXJnZXRQcm9ncmFtXTsKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbUlu
Zm8udmFyc1tUZXh0dXJlTWFwcGVyR0xQcml2YXRlOjpTaGFkZXJJbmZvOjpPcGFjaXR5VmFyaWFi
bGVdLCBvcGFjaXR5KSkKICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKSkK
ICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBzdXJmYWNlLm1faWQpKQot
ICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86
OlNvdXJjZVRleHR1cmVWYXJpYWJsZV0sIDApKQotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5WZXJ0ZXhWYXJp
YWJsZV0pKQotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tU
ZXhtYXBTaGFkZXJJbmZvOjpJbk1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00KSkKLSAg
ICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVy
SW5mbzo6SW5Tb3VyY2VNYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNHNyYykpCisgICAg
R0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMUHJpdmF0
ZTo6U2hhZGVySW5mbzo6U291cmNlVGV4dHVyZVZhcmlhYmxlXSwgMCkpCisgICAgR0xfQ01EKGds
RW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xQ
cml2YXRlOjpTaGFkZXJJbmZvOjpJblZlcnRleFZhcmlhYmxlXSkpCisgICAgR0xfQ01EKGdsVW5p
Zm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleHR1cmVNYXBwZXJHTFByaXZhdGU6OlNo
YWRlckluZm86OkluTWF0cml4VmFyaWFibGVdLCAxLCBHTF9GQUxTRSwgbTQpKQorICAgIEdMX0NN
RChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xQcml2
YXRlOjpTaGFkZXJJbmZvOjpJblNvdXJjZU1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00
c3JjKSkKICAgICBHTF9DTUQoZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCkpCiAgICAg
Y29uc3QgR0xmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9OwogICAg
IEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIoMCwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAw
LCB1bml0UmVjdCkpCkBAIC01ODAsMTUgKzY0NiwxNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6
cGFpbnRUb1RhcmdldChjb25zdCBCaXRtYXBUZXh0dXJlJiBhU3VyZmFjZSwgY29uc3QgSW50U2l6
ZQogICAgIHNldENsaXAodmlzaWJsZVJlY3QpOwogCiAgICAgR0xfQ01EKGdsRHJhd0FycmF5cyhH
TF9UUklBTkdMRV9GQU4sIDAsIDQpKQotICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJB
cnJheShwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OkluVmVydGV4VmFyaWFibGVd
KSkKKyAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbUluZm8udmFy
c1tUZXh0dXJlTWFwcGVyR0xQcml2YXRlOjpTaGFkZXJJbmZvOjpJblZlcnRleFZhcmlhYmxlXSkp
CiAgICAgR0xfQ01EKGdsVXNlUHJvZ3JhbSgwKSkKICAgICBHTF9DTUQoZ2xCaW5kQnVmZmVyKEdM
X0FSUkFZX0JVRkZFUiwgMCkpCi0gICAgbV9jdXJyZW50UHJvZ3JhbSA9IFRleG1hcFNoYWRlcklu
Zm86OlRhcmdldFByb2dyYW07CisgICAgcHZ0LT5jdXJyZW50UHJvZ3JhbSA9IFRleHR1cmVNYXBw
ZXJHTFByaXZhdGU6OlNoYWRlckluZm86OlRhcmdldFByb2dyYW07CiB9CiAKIFBhc3NSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0dXJlKCkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEJpdG1hcFRleHR1cmVHTCgpKTsKKyAgICBCaXRtYXBUZXh0dXJl
R0wqIHRleHR1cmUgPSBuZXcgQml0bWFwVGV4dHVyZUdMKCk7CisgICAgdGV4dHVyZS0+bV90ZXh0
dXJlTWFwcGVyID0gdGhpczsKKyAgICByZXR1cm4gYWRvcHRSZWYodGV4dHVyZSk7CiB9CiAKIH07
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFw
cGVyR0wuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJH
TC5oCmluZGV4IDdhMTJjNzIuLmQ2NjEwNGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCkBAIC0yOSwxMSArMjksMTMgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBUZXh0dXJlTWFwcGVyR0xQcml2YXRlOworCiAv
LyBBbiBPcGVuR0wtRVMyIGltcGxlbWVudGF0aW9uIG9mIFRleHR1cmVNYXBwZXIuCiBjbGFzcyBU
ZXh0dXJlTWFwcGVyR0wgOiBwdWJsaWMgVGV4dHVyZU1hcHBlciB7CiBwdWJsaWM6Ci0gICAgVGV4
dHVyZU1hcHBlckdMKEdyYXBoaWNzQ29udGV4dCogZ2MpOwotICAgIHZpcnR1YWwgflRleHR1cmVN
YXBwZXJHTCgpIHt9CisgICAgVGV4dHVyZU1hcHBlckdMKCk7CisgICAgdmlydHVhbCB+VGV4dHVy
ZU1hcHBlckdMKCk7CiAKICAgICAvLyByZWltcHMgZnJvbSBUZXh0dXJlTWFwcGVyCiAgICAgdmly
dHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0
IEludFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBv
cGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7CkBAIC00MywxMSArNDUs
MTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJl
PiBjcmVhdGVUZXh0dXJlKCk7CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiB0eXBlKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFudXAoKTsKKyAgICB2b2lkIG9idGFpbkN1cnJlbnRDb250
ZXh0KCk7CisgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAogcHJpdmF0ZToKLSAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3Byb2plY3Rpb25NYXRyaXg7Ci0gICAgaW50IG1fY3VycmVu
dFByb2dyYW07CisgICAgVGV4dHVyZU1hcHBlckdMUHJpdmF0ZSogcHZ0OworICAgIGZyaWVuZCBj
bGFzcyBCaXRtYXBUZXh0dXJlR0w7CiB9OwogCiAvLyBBbiBvZmZzY3JlZW4gYnVmZmVyIHRvIGJl
IHJlbmRlcmVkIGJ5IHNvZnR3YXJlLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9UZXh0dXJlTWFwcGVyUXQuY3BwCmluZGV4IDkyMzZkYWUuLjY3YTZjNzggMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAKQEAgLTU0LDgg
KzU0LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBCaXRt
YXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0
dXJlKiBtYXNrVGV4dHVyZSk7CiAgICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRl
eHR1cmUqIHN1cmZhY2UpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDbGlwKGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCop
OwogICAgIHZpcnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICBUZXh0dXJlTWFwcGVyUXQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KTsK
KyAgICBUZXh0dXJlTWFwcGVyUXQoKTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5cGUoKSBj
b25zdCB7IHJldHVybiAiVGV4dHVyZU1hcHBlclF0IjsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CiAKQEAgLTEyMywxMiArMTI0LDE1IEBA
IHZvaWQgVGV4dHVyZU1hcHBlclF0OjpzZXRDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAg
IHBhaW50ZXItPnNldENsaXBSZWN0KHJlY3QpOwogfQogCi1UZXh0dXJlTWFwcGVyUXQ6OlRleHR1
cmVNYXBwZXJRdChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi0gICAgOiBUZXh0dXJlTWFwcGVy
KGNvbnRleHQpCi0gICAgLCBtX3BhaW50ZXIoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpCi0g
ICAgLCBtX2N1cnJlbnRTdXJmYWNlKDApCitUZXh0dXJlTWFwcGVyUXQ6OlRleHR1cmVNYXBwZXJR
dCgpCisgICAgOiBtX2N1cnJlbnRTdXJmYWNlKDApCiB7Ci0gICAgVGV4dHVyZU1hcHBlclF0Ojpp
bml0aWFsaXplKG1fcGFpbnRlcik7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclF0OjpzZXRHcmFw
aGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIG1fcGFpbnRlciA9
IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIGluaXRpYWxpemUobV9wYWludGVyKTsK
IH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyUXQ6OmJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1
cmZhY2UpCkBAIC0xODEsMTAgKzE4NSwxMiBAQCB2b2lkIFRleHR1cmVNYXBwZXJRdDo6ZHJhd1Rl
eHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdAogUGFz
c1JlZlB0cjxUZXh0dXJlTWFwcGVyPiBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0KQogewogI2lmZGVmIFFUX09QRU5HTF9MSUIKLSAgICBpZiAoY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCktPnBhaW50RW5naW5lKCktPnR5cGUoKSA9PSBRUGFpbnRFbmdpbmU6
Ok9wZW5HTDIpCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlckdMKGNv
bnRleHQpKTsKKyAgICBpZiAoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnBhaW50RW5naW5l
KCktPnR5cGUoKSA9PSBRUGFpbnRFbmdpbmU6Ok9wZW5HTDIpIHsKKyAgICAgICAgVGV4dHVyZU1h
cHBlckdMKiB0ZXhtYXBHTCA9IG5ldyBUZXh0dXJlTWFwcGVyR0w7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZih0ZXhtYXBHTCk7CisgICAgfQogI2VuZGlmCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBUZXh0dXJlTWFwcGVyUXQoY29udGV4dCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4
dHVyZU1hcHBlclF0KTsKIH0KIAogCkBAIC0xOTQsNiArMjAwLDggQEAgUGFzc1JlZlB0cjxCaXRt
YXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVyUXQ6OmNyZWF0ZVRleHR1cmUoKQogfQogCiAjaWZkZWYg
UVRfT1BFTkdMX0xJQgorCisKIGNsYXNzIFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyUXQgOiBw
dWJsaWMgUkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXIgewogcHVibGljOgogICAgIHZpcnR1YWwg
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgcmVjdCwg
Ym9vbCBvcGFxdWUpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggMDU3YmNmYy4u
NTRlNmM3YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApAQCAtNDAsNyArNDAsNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdHJ1Y3QgVGV4bWFwUGFpbnRPcHRpb25zIHsKICAgICBC
aXRtYXBUZXh0dXJlKiBzdXJmYWNlOwogICAgIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXI7
Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0OwogICAgIFRleHR1cmVNYXBwZXJOb2RlKiBy
b290TGF5ZXI7CiAgICAgZmxvYXQgb3BhY2l0eTsKICAgICBJbnRSZWN0IHNjaXNzb3JSZWN0OwpA
QCAtMjE0LDcgKzIxMyw3IEBAIHB1YmxpYzoKICAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3NpemU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBzZXRQbGF0Zm9ybUxheWVyQ2xpZW50
KFRleHR1cmVNYXBwZXJMYXllckNsaWVudCopOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwg
Y29uc3QgSW50UmVjdCYgZXhwb3NlZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChUZXh0dXJl
TWFwcGVyKiwgY29uc3QgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6UGFpbnRPcHRpb25zJik7
CiAKICAgICBzdGF0aWMgVGV4dHVyZU1hcHBlck5vZGUqIHRvVGV4dHVyZU1hcHBlck5vZGUoR3Jh
cGhpY3NMYXllciopOwogcHVibGljOgpAQCAtMzk4LDcgKzM5Nyw3IEBAIGJvb2wgVGV4dHVyZU1h
cHBlck5vZGU6Omhhc1N1cmZhY2VEZXNjZW5kYW50cygpIGNvbnN0CiAKIH0KIAotdm9pZCBUZXh0
dXJlTWFwcGVyTm9kZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRT
aXplJiBzaXplLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0JiBleHBv
c2VkUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3Bh
Y2l0eSkKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50KFRleHR1cmVNYXBwZXIqIHRleHR1
cmVNYXBwZXIsIGNvbnN0IFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXI6OlBhaW50T3B0aW9ucyYg
b3B0aW9ucykKIHsKICAgICBBU1NFUlQobV9sYXllclR5cGUgPT0gUm9vdExheWVyKTsKICAgICBp
ZiAobV9zaXplLmlzRW1wdHkoKSkKQEAgLTQwOSw4ICs0MDgsNiBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNp
emUsIGNvbgogICAgICgiW1RleHR1cmVNYXBwZXJdIFJvb3RQYWludCEhXG4iKTsKICNlbmRpZgog
Ci0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXI+IHRleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVy
OjpjcmVhdGUoY29udGV4dCk7Ci0KICAgICBpZiAodGV4dHVyZU1hcHBlci0+dHlwZSgpICE9IG1f
bGFzdFRleHR1cmVNYXBwZXJUeXBlKQogICAgICAgICBnVGV4dHVyZU1hcHBlckNhY2hlLm1fZGF0
YS5jbGVhcigpOwogCkBAIC00MTgsMTYgKzQxNSwxNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2Rl
OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIGNv
bgogICAgIFRleG1hcFBhaW50T3B0aW9ucyBvcHQ7CiAgICAgb3B0Lm9wYWNpdHkgPSAxOwogICAg
IG9wdC5yb290TGF5ZXIgPSB0aGlzOwotICAgIG9wdC5zY2lzc29yUmVjdCA9IHRhcmdldFJlY3Q7
Ci0gICAgb3B0LnZpc2libGVSZWN0ID0gZXhwb3NlZFJlY3Q7Ci0gICAgb3B0LnRleHR1cmVNYXBw
ZXIgPSB0ZXh0dXJlTWFwcGVyLmdldCgpOwotICAgIG9wdC5jb250ZXh0ID0gdGV4dHVyZU1hcHBl
ci0+Z3JhcGhpY3NDb250ZXh0KCk7CisgICAgb3B0LnNjaXNzb3JSZWN0ID0gb3B0aW9ucy50YXJn
ZXRSZWN0OworICAgIG9wdC52aXNpYmxlUmVjdCA9IG9wdGlvbnMudmlzaWJsZVJlY3Q7CisgICAg
b3B0LnRleHR1cmVNYXBwZXIgPSB0ZXh0dXJlTWFwcGVyOwogICAgIG9wdC5zdXJmYWNlID0gMDsK
ICAgICBwYWludFJlY3Vyc2l2ZShvcHQpOwogCiAgICAgaWYgKHRleHR1cmVNYXBwZXItPmFsbG93
U3VyZmFjZUZvclJvb3QoKSB8fCBtX3N0YXRlLmhhc1N1cmZhY2VEZXNjZW5kYW50cykgewogICAg
ICAgICB0ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsKLSAgICAgICAgdGV4dHVyZU1hcHBl
ci0+cGFpbnRUb1RhcmdldCgqbV9zdXJmYWNlLmdldCgpLCBzaXplLCB0cmFuc2Zvcm0sIG9wYWNp
dHkgKiBtX3N0YXRlLm9wYWNpdHksIHRhcmdldFJlY3QpOworICAgICAgICB0ZXh0dXJlTWFwcGVy
LT5wYWludFRvVGFyZ2V0KCptX3N1cmZhY2UuZ2V0KCksIG9wdGlvbnMudmlld3BvcnRTaXplLCBv
cHRpb25zLnRyYW5zZm9ybSwgb3B0aW9ucy5vcGFjaXR5ICogbV9zdGF0ZS5vcGFjaXR5LCBvcHRp
b25zLnRhcmdldFJlY3QpOwogICAgIH0KICAgICBnVGV4dHVyZU1hcHBlckNhY2hlLnB1cmdlKCk7
CiB9CkBAIC02OTIsMTAgKzY4OCw5IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnVwbG9hZFRl
eHR1cmVGcm9tQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjCiAKICAgICB7
CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KG1fdGV4dHVyZS0+YmVnaW5QYWludChk
aXJ0eVJlY3QpKTsKLSAgICAgICAgaWYgKHRleHR1cmVNYXBwZXIgJiYgdGV4dHVyZU1hcHBlci0+
Z3JhcGhpY3NDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogb3JpZ2lu
YWxDb250ZXh0ID0gdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgICAgICAg
ICBjb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkob3JpZ2luYWxDb250ZXh0LT5p
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgICAgICAgICAgY29udGV4dC5zZXRUZXh0
RHJhd2luZ01vZGUob3JpZ2luYWxDb250ZXh0LT50ZXh0RHJhd2luZ01vZGUoKSk7CisgICAgICAg
IGlmICh0ZXh0dXJlTWFwcGVyKSB7CisgICAgICAgICAgICBjb250ZXh0LnNldEltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkodGV4dHVyZU1hcHBlci0+aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgp
KTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0VGV4dERyYXdpbmdNb2RlKHRleHR1cmVNYXBwZXIt
PnRleHREcmF3aW5nTW9kZSgpKTsKICAgICAgICAgfQogICAgICAgICBtX2xheWVyLT5wYWludEdy
YXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBkaXJ0eVJlY3QpOwogICAgIH0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaAppbmRleCAwM2Mx
YzZkLi4yNzZiMjAwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlci5oCkBAIC0xLDQgKzEsNCBAQAotLyoKKyAvKgogIENvcHlyaWdodCAoQykg
MjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKIAogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKQEAgLTk3LDIwICs5NywzMCBAQCBwdWJsaWM6CiAgICAgICAgIGRyYXdUZXh0dXJlKHRleHR1
cmUsIEludFJlY3QoMCwgMCwgdGV4dHVyZS5jb250ZW50U2l6ZSgpLndpZHRoKCksIHRleHR1cmUu
Y29udGVudFNpemUoKS5oZWlnaHQoKSksIG1hdHJpeCwgb3BhY2l0eSwgMCk7CiAgICAgfQogCisg
ICAgdmlydHVhbCB2b2lkIHNldEdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQqKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xpcChjb25zdCBJbnRSZWN0JikgPSAwOwogICAgIHZpcnR1
YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCkgPSAwOwogICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogdHlwZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cCgp
IHt9CiAKLSAgICBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gbV9nYzsKLSAgICB9CisgICAgdm9pZCBzZXRJbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpIHsgbV9pbnRlcnBvbGF0
aW9uUXVhbGl0eSA9IHF1YWxpdHk7IH0KKyAgICB2b2lkIHNldFRleHREcmF3aW5nTW9kZShpbnQg
bW9kZSkgeyBtX3RleHREcmF3aW5nTW9kZSA9IG1vZGU7IH0KKworICAgIEludGVycG9sYXRpb25R
dWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBtX2ludGVy
cG9sYXRpb25RdWFsaXR5OyB9CisgICAgaW50IHRleHREcmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdGV4dERyYXdpbmdNb2RlOyB9CisKKyAgICB2b2lkIHNldFZpZXdwb3J0U2l6ZShjb25z
dCBJbnRTaXplJik7CiAKIHByb3RlY3RlZDoKLSAgICBUZXh0dXJlTWFwcGVyKEdyYXBoaWNzQ29u
dGV4dCogZ2MpIDogbV9nYyhnYykge30KLSAgICBHcmFwaGljc0NvbnRleHQqIG1fZ2M7CisgICAg
VGV4dHVyZU1hcHBlcigpCisgICAgICAgIDogbV9pbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBv
bGF0aW9uRGVmYXVsdCkKKyAgICAgICAgLCBtX3RleHREcmF3aW5nTW9kZShjVGV4dEZpbGwpCisg
ICAge30KKworcHJpdmF0ZToKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2ludGVycG9sYXRp
b25RdWFsaXR5OworICAgIGludCBtX3RleHREcmF3aW5nTW9kZTsKIH07CiAKIH07CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXIuaAppbmRleCAyM2U5ZmM5Li5hMTU2ODFjIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5o
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyLmgKQEAgLTI1LDYgKzI1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
R3JhcGhpY3NDb250ZXh0OwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEludFNpemU7CitjbGFzcyBU
ZXh0dXJlTWFwcGVyOwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiAKIApAQCAtNTAsMTAg
KzUxLDE3IEBAIHB1YmxpYzoKIAogY2xhc3MgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllciA6IHB1
YmxpYyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciB7CiBwdWJsaWM6CisgICAgc3RydWN0IFBh
aW50T3B0aW9ucyB7CisgICAgICAgIEludFJlY3QgdmlzaWJsZVJlY3Q7CisgICAgICAgIEludFJl
Y3QgdGFyZ2V0UmVjdDsKKyAgICAgICAgSW50U2l6ZSB2aWV3cG9ydFNpemU7CisgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKKyAgICAgICAgZmxvYXQgb3BhY2l0eTsKKyAg
ICB9OworCiAgICAgdmlydHVhbCB2b2lkIHNldFBsYXRmb3JtTGF5ZXJDbGllbnQoVGV4dHVyZU1h
cHBlckxheWVyQ2xpZW50KikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qg
SW50UmVjdCYgZXhwb3NlZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zv
cm0sIGZsb2F0IG9wYWNpdHkpIHt9CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFRleHR1cmVNYXBw
ZXIqLCBjb25zdCBQYWludE9wdGlvbnMmKSB7fQogICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwVGV4dHVyZU1hcHBlcigpIHt9CiAg
ICAgdmlydHVhbCBUeXBlIGxheWVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIENvbnRlbnRMYXllcjsg
fQogfTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwIGIvV2ViS2l0
L3F0L0FwaS9xd2ViZnJhbWUuY3BwCmluZGV4IDM5ZTc0ZDkuLjE1ZDBiOTUgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFt
ZS5jcHAKQEAgLTk3LDYgKzk3LDcgQEAKICNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKICNlbmRp
ZgogI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBl
ci5oIgogI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgogI2Vu
ZGlmCiAjaW5jbHVkZSAid3RmL0hhc2hNYXAuaCIKQEAgLTI5NSwxOCArMjk2LDM3IEBAIHZvaWQg
UVdlYkZyYW1lUHJpdmF0ZTo6cmVuZGVyRnJvbVRpbGVkQmFja2luZ1N0b3JlKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uCiAgICAgICAgIHBhaW50ZXItPnJlc3RvcmUoKTsKICAgICB9CiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0g
ICAgLy8gVGV4dHVyZU1hcHBlciBtaWdodCB1c2UgcmF3IE9wZW5HTCBvciBzb21lIG90aGVyIGJh
Y2tlbmQgdGhhdCByZXF1aXJlcyBuYXRpdmUgcGFpbnRpbmcuIE9uIHJhc3RlciB0aGlzIGRvZXNu
J3QgaGF2ZSBhbnkgZWZmZWN0LgotICAgIGlmIChyb290R3JhcGhpY3NMYXllcikgewotICAgICAg
ICBwYWludGVyLT5iZWdpbk5hdGl2ZVBhaW50aW5nKCk7Ci0gICAgICAgIHJvb3RHcmFwaGljc0xh
eWVyLT5wYWludChjb250ZXh0LCB2aWV3LT5zaXplKCksIHZpZXctPmZyYW1lUmVjdCgpLCBJbnRS
ZWN0KGNsaXAuYm91bmRpbmdSZWN0KCkpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBwYWludGVy
LT5vcGFjaXR5KCkpOwotICAgICAgICBwYWludGVyLT5lbmROYXRpdmVQYWludGluZygpOwotICAg
IH0KLQorICAgIHJlbmRlckNvbXBvc2l0ZWRMYXllcnMoY29udGV4dCwgSW50UmVjdChjbGlwLmJv
dW5kaW5nUmVjdCgpKSk7CiAgICAgcmVuZGVyUmVsYXRpdmVDb29yZHMoY29udGV4dCwgKFFXZWJG
cmFtZTo6UmVuZGVyTGF5ZXIpKFFXZWJGcmFtZTo6U2Nyb2xsQmFyTGF5ZXIgfCBRV2ViRnJhbWU6
OlBhbkljb25MYXllciksIGNsaXApOwogI2VuZGlmCiB9CiAjZW5kaWYKIAorI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQordm9pZCBRV2ViRnJh
bWVQcml2YXRlOjpyZW5kZXJDb21wb3NpdGVkTGF5ZXJzKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgSW50UmVjdCYgY2xpcCkKK3sKKyAgICBpZiAoIXJvb3RHcmFwaGljc0xheWVyKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKCF0ZXh0dXJlTWFwcGVyKQorICAgICAgICB0ZXh0dXJl
TWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKGNvbnRleHQpOworICAgIHRleHR1cmVNYXBw
ZXItPnNldEdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICB0ZXh0dXJlTWFwcGVyLT5zZXRJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KGNvbnRleHQtPmltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkoKSk7CisgICAgdGV4dHVyZU1hcHBlci0+c2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQtPnRl
eHREcmF3aW5nTW9kZSgpKTsKKyAgICBRUGFpbnRlciogcGFpbnRlciA9IGNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpOworICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7CisgICAg
cGFpbnRlci0+c2F2ZSgpOworICAgIHBhaW50ZXItPmJlZ2luTmF0aXZlUGFpbnRpbmcoKTsKKyAg
ICBUZXh0dXJlTWFwcGVyQ29udGVudExheWVyOjpQYWludE9wdGlvbnMgb3B0aW9uczsKKyAgICBv
cHRpb25zLnZpc2libGVSZWN0ID0gY2xpcDsKKyAgICBvcHRpb25zLnRhcmdldFJlY3QgPSB2aWV3
LT5mcmFtZVJlY3QoKTsKKyAgICBvcHRpb25zLnZpZXdwb3J0U2l6ZSA9IHZpZXctPnNpemUoKTsK
KyAgICBvcHRpb25zLm9wYWNpdHkgPSBwYWludGVyLT5vcGFjaXR5KCk7CisgICAgcm9vdEdyYXBo
aWNzTGF5ZXItPnBhaW50KHRleHR1cmVNYXBwZXIuZ2V0KCksIG9wdGlvbnMpOworICAgIHBhaW50
ZXItPmVuZE5hdGl2ZVBhaW50aW5nKCk7CisgICAgcGFpbnRlci0+cmVzdG9yZSgpOworfQorI2Vu
ZGlmCisKIHZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6cmVuZGVyUmVsYXRpdmVDb29yZHMoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBRV2ViRnJhbWU6OlJlbmRlckxheWVyIGxheWVyLCBjb25zdCBR
UmVnaW9uJiBjbGlwKQogewogICAgIGlmICghZnJhbWUtPnZpZXcoKSB8fCAhZnJhbWUtPmNvbnRl
bnRSZW5kZXJlcigpKQpAQCAtMzQ5LDE3ICszNjksNyBAQCB2b2lkIFFXZWJGcmFtZVByaXZhdGU6
OnJlbmRlclJlbGF0aXZlQ29vcmRzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUVdlYkZyYW1l
OgogICAgICAgICAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogICAgICAgICB9CiAgICAgICAgIHBh
aW50ZXItPnJlc3RvcmUoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYg
VVNFKFRFWFRVUkVfTUFQUEVSKQotICAgICAgICBpZiAocm9vdEdyYXBoaWNzTGF5ZXIpIHsKLSAg
ICAgICAgICAgIHBhaW50ZXItPnNhdmUoKTsKLSAgICAgICAgICAgIHBhaW50ZXItPmJlZ2luTmF0
aXZlUGFpbnRpbmcoKTsKLSAgICAgICAgICAgIHJvb3RHcmFwaGljc0xheWVyLT5wYWludChjb250
ZXh0LCB2aWV3LT5zaXplKCksIHZpZXctPmZyYW1lUmVjdCgpLCBJbnRSZWN0KGNsaXAuYm91bmRp
bmdSZWN0KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4KCksIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5vcGFjaXR5KCkpOwot
ICAgICAgICAgICAgcGFpbnRlci0+ZW5kTmF0aXZlUGFpbnRpbmcoKTsKLSAgICAgICAgICAgIHBh
aW50ZXItPnJlc3RvcmUoKTsKLSAgICAgICAgfQotI2VuZGlmCisgICAgICAgIHJlbmRlckNvbXBv
c2l0ZWRMYXllcnMoY29udGV4dCwgSW50UmVjdChjbGlwLmJvdW5kaW5nUmVjdCgpKSk7CiAgICAg
fQogICAgIGlmIChsYXllciAmIChRV2ViRnJhbWU6OlBhbkljb25MYXllciB8IFFXZWJGcmFtZTo6
U2Nyb2xsQmFyTGF5ZXIpKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmVjdG9yLnNp
emUoKTsgKytpKSB7CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmggYi9X
ZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmgKaW5kZXggNTY2MGJkMS4uNjM0ZTIxYiAxMDA2NDQK
LS0tIGEvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oCisrKyBiL1dlYktpdC9xdC9BcGkvcXdl
YmZyYW1lX3AuaApAQCAtMzMsNiArMzMsMTAgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1
ZGUgIlZpZXdwb3J0QXJndW1lbnRzLmgiCiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBl
ci5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBGcmFtZUxvYWRl
ckNsaWVudFF0OwogICAgIGNsYXNzIEZyYW1lVmlldzsKQEAgLTk0LDYgKzk4LDkgQEAgcHVibGlj
OgogICAgIHZvaWQgcmVuZGVyRnJvbVRpbGVkQmFja2luZ1N0b3JlKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IFFSZWdpb24mIGNsaXApOwogI2VuZGlmCiAKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICB2b2lkIHJlbmRl
ckNvbXBvc2l0ZWRMYXllcnMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwKTsKKyNlbmRpZgogICAgIFFXZWJGcmFtZSAqcTsKICAg
ICBRdDo6U2Nyb2xsQmFyUG9saWN5IGhvcml6b250YWxTY3JvbGxCYXJQb2xpY3k7CiAgICAgUXQ6
OlNjcm9sbEJhclBvbGljeSB2ZXJ0aWNhbFNjcm9sbEJhclBvbGljeTsKQEAgLTEwNiw2ICsxMTMs
NyBAQCBwdWJsaWM6CiAgICAgaW50IG1hcmdpbkhlaWdodDsKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKICAgICBXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyQ29udGVudExheWVyKiByb290R3JhcGhpY3NMYXllcjsKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6VGV4dHVyZU1hcHBlcj4gdGV4dHVyZU1hcHBlcjsKICNlbmRpZgogICAgIGJvb2wgem9vbVRl
eHRPbmx5OwogfTsKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9XZWJLaXQvcXQv
Q2hhbmdlTG9nCmluZGV4IDIzNmIwNGUuLmQ1YTBhZmQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9D
aGFuZ2VMb2cKKysrIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEw
LTEwLTI5ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1RleG1hcF0gW1F0
XSBUZXh0dXJlIG1hcHBlciBpbml0aWFsIGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzA3MAorCisgICAgICAgIE1ha2UgdGhl
IFRleHR1cmVNYXBwZXIgY2xhc3MgYSBtZW1iZXIgb2YgUVdlYkZyYW1lUHJpdmF0ZSwgaW5zdGVh
ZCBvZiByZWNyZWF0aW5nIGl0IGZvciBlYWNoIHBhaW50LgorICAgICAgICBUaGlzIGFsbG93cyB1
c2luZyBUZXh0dXJlTWFwcGVyIHdpdGhvdXQgYW4gYWN0aXZlIFFQYWludGVyLCBhbmQgYWxsb3dz
IGNsZWFudXAgb2YgcmVzb3VyY2VzIHdoaWxlIGEgUVBhaW50ZXIgaXMgbm90IGFjdGl2ZS4KKwor
ICAgICAgICAqIEFwaS9xd2ViZnJhbWUuY3BwOgorICAgICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6
cmVuZGVyRnJvbVRpbGVkQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFFXZWJGcmFtZVByaXZhdGU6
OnJlbmRlckNvbXBvc2l0ZWRMYXllcnMpOgorICAgICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6cmVu
ZGVyUmVsYXRpdmVDb29yZHMpOgorICAgICAgICAqIEFwaS9xd2ViZnJhbWVfcC5oOgorCiAyMDEw
LTEwLTI4ICBOb2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBBcml5YSBIaWRheWF0Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72349</attachid>
            <date>2010-10-29 10:54:16 -0700</date>
            <delta_ts>2010-10-29 12:51:26 -0700</delta_ts>
            <desc>Patch: small refactor to allow WebKit2 and remove globals</desc>
            <filename>patch-47070-nocontext-2.diff</filename>
            <type>text/plain</type>
            <size>37771</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZWU2OTdkNi4uYmNjN2MxOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxMC0xMC0yOSAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5p
dGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDcwNzAKKworICAgICAgICBTb21lIHJlZmFjdG9yIGZvciB0ZXhtYXAgdG8g
ZW5hYmxlIFdlYktpdDI6IHJlbW92ZSBnbG9iYWxzLCBhbmQgYWxsb3cgVGV4dHVyZU1hcHBlciB0
byBleGlzdCB3aXRob3V0IGEgR3JhcGhpY3NDb250ZXh0LgorICAgICAgICBUaGlzIHdpbGwgYWxs
b3cgcmVuZGVyaW5nIHRoZSBUZXh0dXJlTWFwcGVyTm9kZSB0cmVlIHdpdGhvdXQgYW4gYWN0aXZl
IFFQYWludGVyLCBpbnRvIHRoZSBjdXJyZW50IEdMIGNvbnRleHQuCisgICAgICAgIE1vc3Qgb2Yg
dGhlIGNoYW5nZXMgc2ltcGx5IG1vdmUgdGhlIGdsb2JhcyBpbiBUZXh0dXJlTWFwcGVyR0wgaW50
byBtZW1iZXJzIG9mIHRoYXQgY2xhc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBPbGQgdGVz
dHMgaW4gTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcgY292ZXIgdGhpcy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6U2hhZGVySW5mbzo6Z2V0VW5pZm9ybUxvY2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTFByaXZhdGU6OlNoYWRlcklu
Zm86OmNyZWF0ZVNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckdMUHJpdmF0ZTo6RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZXBvc2l0b3J5OjpmaW5kT3JDcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6RGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2VSZXBvc2l0b3J5OjpkZXJlZik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0xQcml2YXRlOjpEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnk6OkRp
cmVjdGx5Q29tcG9zaXRlZEltYWdlUmVwb3NpdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0xQcml2YXRlOjpEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnk6On5E
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckdMUHJpdmF0ZTo6VGV4dHVyZU1hcHBlckdMUHJpdmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcFRleHR1cmVHTDo6c2V0Q29udGVudHNUb0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcFRleHR1cmVHTDo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
R0w6On5UZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjpvYnRhaW5DdXJyZW50Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
R0w6OmJpbmRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6cGFp
bnRUb1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZVRl
eHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVy
R0wuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclF0OjpUZXh0dXJlTWFwcGVyUXQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclF0OjpzZXRHcmFwaGljc0NvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJOb2RlOjp1cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpzZXRHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlcjo6c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpzZXRUZXh0RHJhd2luZ01vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjp0ZXh0RHJhd2luZ01vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6VGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ29udGVudExheWVyOjpwYWludCk6CisKIDIwMTAt
MTAtMjkgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAKaW5kZXggOTY2NjU2Yi4u
ZGI2NjI5NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4
dHVyZU1hcHBlckdMLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9U
ZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0zMCw4ICszMCwxMiBAQAogI2lmIGRlZmluZWQoVEVYTUFQ
X09QRU5HTF9FU18yKQogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogI2VsaWYgT1MoTUFDX09TX1gp
CisjaW5jbHVkZSA8QUdML2FnbC5oPgogI2luY2x1ZGUgPGdsLmg+CiAjZWxzZQorI2lmIE9TKFVO
SVgpCisjaW5jbHVkZSA8R0wvZ2x4Lmg+CisjZW5kaWYKICNpbmNsdWRlIDxHTC9nbC5oPgogI2Vu
ZGlmCiAKQEAgLTc0LDYgKzc4LDE2IEBAIGV4dGVybiAiQyIgewogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKKyNpZiBPUyhNQUNfT1NfWCkKK3R5cGVkZWYgQUdMQ29udGV4dCBHTENvbnRleHRIYW5k
bGU7CisjZWxpZiBPUyhVTklYKQorc3RydWN0IEdMWENvbnRleHRIYW5kbGUgeworICAgIERyYXdh
YmxlIGRyYXdhYmxlOworICAgIEdMWENvbnRleHQgY29udGV4dDsKK307Cit0eXBlZGVmIEdMWENv
bnRleHRIYW5kbGUgR0xDb250ZXh0SGFuZGxlOworI2VuZGlmCisKIGlubGluZSBzdGF0aWMgdm9p
ZCBkZWJ1Z0dMQ29tbWFuZChjb25zdCBjaGFyKiBjb21tYW5kLCBpbnQgbGluZSkKIHsKICAgICBj
b25zdCBHTGVudW0gZXJyID0gZ2xHZXRFcnJvcigpOwpAQCAtOTAsNiArMTA0LDEyMSBAQCBpbmxp
bmUgc3RhdGljIHZvaWQgZGVidWdHTENvbW1hbmQoY29uc3QgY2hhciogY29tbWFuZCwgaW50IGxp
bmUpCiAjZGVmaW5lIEdMX0NNRCh4KSB4CiAjZW5kaWYKIAorc3RydWN0IFRleHR1cmVNYXBwZXJH
TFByaXZhdGUgeworICAgIHN0YXRpYyBzdHJ1Y3QgU2hhZGVySW5mbyB7CisgICAgICAgIGVudW0g
U2hhZGVyUHJvZ3JhbUluZGV4IHsKKyAgICAgICAgICAgIFNpbXBsZVByb2dyYW0sCisgICAgICAg
ICAgICBPcGFjaXR5QW5kTWFza1Byb2dyYW0sCisgICAgICAgICAgICBUYXJnZXRQcm9ncmFtLAor
ICAgICAgICAgICAgTnVtUHJvZ3JhbXMKKyAgICAgICAgfTsKKworICAgICAgICBlbnVtIFNoYWRl
clZhcmlhYmxlSW5kZXggeworICAgICAgICAgICAgSW5NYXRyaXhWYXJpYWJsZSwKKyAgICAgICAg
ICAgIEluU291cmNlTWF0cml4VmFyaWFibGUsCisgICAgICAgICAgICBJbk1hc2tNYXRyaXhWYXJp
YWJsZSwKKyAgICAgICAgICAgIEluVmVydGV4VmFyaWFibGUsCisKKyAgICAgICAgICAgIE9wYWNp
dHlWYXJpYWJsZSwKKyAgICAgICAgICAgIFNvdXJjZVRleHR1cmVWYXJpYWJsZSwKKyAgICAgICAg
ICAgIE1hc2tUZXh0dXJlVmFyaWFibGUsCisgICAgICAgICAgICBOdW1WYXJpYWJsZXMKKyAgICAg
ICAgfTsKKworICAgICAgICBzdHJ1Y3QgUHJvZ3JhbUluZm8geworICAgICAgICAgICAgR0x1aW50
IGlkOworICAgICAgICAgICAgR0xpbnQgdmFyc1tOdW1WYXJpYWJsZXNdOworICAgICAgICB9Owor
CisgICAgICAgIEdMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihTaGFkZXJQcm9ncmFtSW5kZXggcHJv
ZywgU2hhZGVyVmFyaWFibGVJbmRleCB2YXIsIGNvbnN0IGNoYXIqIG5hbWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBwcm9ncmFtc1twcm9nXS52YXJzW3Zhcl0gPSBnbEdldFVuaWZv
cm1Mb2NhdGlvbihwcm9ncmFtc1twcm9nXS5pZCwgbmFtZSk7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIGNyZWF0ZVNoYWRlclByb2dyYW0oY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNl
LCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSwgU2hhZGVyUHJvZ3JhbUluZGV4IGlu
ZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBHTHVpbnQgdmVydGV4U2hhZGVyID0gZ2xDcmVh
dGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7CisgICAgICAgICAgICBHTHVpbnQgZnJhZ21lbnRT
aGFkZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9GUkFHTUVOVF9TSEFERVIpOworICAgICAgICAgICAg
R0xfQ01EKGdsU2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgMSwgJnZlcnRleFNoYWRlclNvdXJj
ZSwgMCkpCisgICAgICAgICAgICBHTF9DTUQoZ2xTaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIs
IDEsICZmcmFnbWVudFNoYWRlclNvdXJjZSwgMCkpCisgICAgICAgICAgICBHTHVpbnQgcHJvZ3Jh
bUlEID0gZ2xDcmVhdGVQcm9ncmFtKCk7CisgICAgICAgICAgICBHTF9DTUQoZ2xDb21waWxlU2hh
ZGVyKHZlcnRleFNoYWRlcikpCisgICAgICAgICAgICBHTF9DTUQoZ2xDb21waWxlU2hhZGVyKGZy
YWdtZW50U2hhZGVyKSkKKyAgICAgICAgICAgIEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9ncmFt
SUQsIHZlcnRleFNoYWRlcikpCisgICAgICAgICAgICBHTF9DTUQoZ2xBdHRhY2hTaGFkZXIocHJv
Z3JhbUlELCBmcmFnbWVudFNoYWRlcikpCisgICAgICAgICAgICBHTF9DTUQoZ2xCaW5kQXR0cmli
TG9jYXRpb24ocHJvZ3JhbUlELCAwLCAiSW5WZXJ0ZXgiKSkKKyAgICAgICAgICAgIEdMX0NNRChn
bExpbmtQcm9ncmFtKHByb2dyYW1JRCkpCisgICAgICAgICAgICBwcm9ncmFtc1tpbmRleF0uaWQg
PSBwcm9ncmFtSUQ7CisgICAgICAgICAgICBjaGFyIGluZm9Mb2dbMTAyNF07CisgICAgICAgICAg
ICBpbnQgbGVuOworICAgICAgICAgICAgR0xfQ01EKGdsR2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3Jh
bUlELCAxMDI0LCAmbGVuLCBpbmZvTG9nKSk7CisgICAgICAgIH0KKworICAgICAgICBQcm9ncmFt
SW5mbyBwcm9ncmFtc1tOdW1Qcm9ncmFtc107CisKKyAgICB9IHNoYWRlckluZm87CisKKyAgICBz
dHJ1Y3QgRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZXBvc2l0b3J5IHsKKyAgICAgICAgc3RydWN0
IEVudHJ5IHsKKyAgICAgICAgICAgIEdMdWludCB0ZXh0dXJlOworICAgICAgICAgICAgaW50IHJl
ZkNvdW50OworICAgICAgICB9OworICAgICAgICBIYXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBFbnRy
eT4gaW1hZ2VUb1RleHR1cmU7CisKKyAgICAgICAgR0x1aW50IGZpbmRPckNyZWF0ZShOYXRpdmVJ
bWFnZVB0ciBpbWFnZSwgYm9vbCYgZm91bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEhhc2hN
YXA8TmF0aXZlSW1hZ2VQdHIsIEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5m
aW5kKGltYWdlKTsKKyAgICAgICAgICAgIGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICBpZiAo
aXQgIT0gaW1hZ2VUb1RleHR1cmUuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBpdC0+c2Vjb25k
LnJlZkNvdW50Kys7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIHJldHVybiBpdC0+c2Vjb25kLnRleHR1cmU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBFbnRyeSBlbnRyeTsKKyAgICAgICAgICAgIEdMX0NNRChnbEdlblRleHR1cmVzKDEsICZlbnRy
eS50ZXh0dXJlKSk7CisgICAgICAgICAgICBlbnRyeS5yZWZDb3VudCA9IDE7CisgICAgICAgICAg
ICBpbWFnZVRvVGV4dHVyZS5hZGQoaW1hZ2UsIGVudHJ5KTsKKyAgICAgICAgICAgIHJldHVybiBl
bnRyeS50ZXh0dXJlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBkZXJlZihOYXRpdmVJbWFn
ZVB0ciBpbWFnZSkKKyAgICAgICAgeworICAgICAgICAgICAgSGFzaE1hcDxOYXRpdmVJbWFnZVB0
ciwgRW50cnk+OjppdGVyYXRvciBpdCA9IGltYWdlVG9UZXh0dXJlLmZpbmQoaW1hZ2UpOworICAg
ICAgICAgICAgaWYgKGl0ICE9IGltYWdlVG9UZXh0dXJlLmVuZCgpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGl0LT5zZWNvbmQucmVmQ291bnQgPCAyKSB7CisgICAgICAgICAgICAgICAgICAgIGlt
YWdlVG9UZXh0dXJlLnJlbW92ZShpdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIERpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVwb3Np
dG9yeSgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIH5EaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZVJlcG9zaXRvcnkoKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKEhhc2hNYXA8
TmF0aXZlSW1hZ2VQdHIsIEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5iZWdp
bigpOyBpdCAhPSBpbWFnZVRvVGV4dHVyZS5lbmQoKTsgKytpdCkgeworICAgICAgICAgICAgICAg
IEdMdWludCB0ZXh0dXJlID0gaXQtPnNlY29uZC50ZXh0dXJlOworICAgICAgICAgICAgICAgIGlm
ICh0ZXh0dXJlKQorICAgICAgICAgICAgICAgICAgICBHTF9DTUQoZ2xEZWxldGVUZXh0dXJlcygx
LCAmdGV4dHVyZSkpOworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICB9IGRpcmVjdGx5
Q29tcG9zaXRlZEltYWdlczsKKworICAgIFRleHR1cmVNYXBwZXJHTFByaXZhdGUoKQorICAgICAg
ICA6IGN1cnJlbnRQcm9ncmFtKFRleHR1cmVNYXBwZXJHTFByaXZhdGU6OlNoYWRlckluZm86OlRh
cmdldFByb2dyYW0pCisgICAgeyB9CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcm9qZWN0
aW9uTWF0cml4OworICAgIGludCBjdXJyZW50UHJvZ3JhbTsKKyAgICBHTENvbnRleHRIYW5kbGUg
Y29udGV4dEhhbmRsZTsKK307CisKK1RleHR1cmVNYXBwZXJHTFByaXZhdGU6OlNoYWRlckluZm8g
VGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6c2hhZGVySW5mbzsKKwogY2xhc3MgQml0bWFwVGV4dHVy
ZUdMIDogcHVibGljIEJpdG1hcFRleHR1cmUgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBk
ZXN0cm95KCk7CkBAIC0xMTEsNiArMjQwLDcgQEAgcHJpdmF0ZToKICAgICBHTHVpbnQgbV9mYm87
CiAgICAgSW50U2l6ZSBtX2FjdHVhbFNpemU7CiAgICAgYm9vbCBtX3N1cmZhY2VOZWVkc1Jlc2V0
OworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyR0w+IG1fdGV4dHVyZU1hcHBlcjsKICAgICBCaXRt
YXBUZXh0dXJlR0woKQogICAgICAgICA6IG1faWQoMCkKICAgICAgICAgLCBtX2ltYWdlKDApCkBA
IC0xMjMsNzIgKzI1MywyMSBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFw
cGVyR0w7CiB9OwogCi1zdGF0aWMgc3RydWN0IFRleG1hcFNoYWRlckluZm8gewotICAgIGVudW0g
U2hhZGVyUHJvZ3JhbUluZGV4IHsKLSAgICAgICAgU2ltcGxlUHJvZ3JhbSwKLSAgICAgICAgT3Bh
Y2l0eUFuZE1hc2tQcm9ncmFtLAotICAgICAgICBUYXJnZXRQcm9ncmFtLAotICAgICAgICBOdW1Q
cm9ncmFtcwotICAgIH07Ci0KLSAgICBlbnVtIFNoYWRlclZhcmlhYmxlSW5kZXggewotICAgICAg
ICBJbk1hdHJpeFZhcmlhYmxlLAotICAgICAgICBJblNvdXJjZU1hdHJpeFZhcmlhYmxlLAotICAg
ICAgICBJbk1hc2tNYXRyaXhWYXJpYWJsZSwKLSAgICAgICAgSW5WZXJ0ZXhWYXJpYWJsZSwKIAot
ICAgICAgICBPcGFjaXR5VmFyaWFibGUsCi0gICAgICAgIFNvdXJjZVRleHR1cmVWYXJpYWJsZSwK
LSAgICAgICAgTWFza1RleHR1cmVWYXJpYWJsZSwKLSAgICAgICAgTnVtVmFyaWFibGVzCi0gICAg
fTsKLQotICAgIHN0cnVjdCBQcm9ncmFtSW5mbyB7Ci0gICAgICAgIEdMdWludCBpZDsKLSAgICAg
ICAgR0xpbnQgdmFyc1tOdW1WYXJpYWJsZXNdOwotICAgIH07Ci0KLSAgICBHTGludCBnZXRVbmlm
b3JtTG9jYXRpb24oU2hhZGVyUHJvZ3JhbUluZGV4IHByb2csIFNoYWRlclZhcmlhYmxlSW5kZXgg
dmFyLCBjb25zdCBjaGFyKiBuYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHByb2dyYW1zW3By
b2ddLnZhcnNbdmFyXSA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1zW3Byb2ddLmlkLCBu
YW1lKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNyZWF0ZVNoYWRlclByb2dyYW0oY29uc3QgY2hhciog
dmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSwgU2hh
ZGVyUHJvZ3JhbUluZGV4IGluZGV4KQotICAgIHsKLSAgICAgICAgR0x1aW50IHZlcnRleFNoYWRl
ciA9IGdsQ3JlYXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIpOwotICAgICAgICBHTHVpbnQgZnJh
Z21lbnRTaGFkZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9GUkFHTUVOVF9TSEFERVIpOwotICAgICAg
ICBHTF9DTUQoZ2xTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAmdmVydGV4U2hhZGVyU291
cmNlLCAwKSkKLSAgICAgICAgR0xfQ01EKGdsU2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCAx
LCAmZnJhZ21lbnRTaGFkZXJTb3VyY2UsIDApKQotICAgICAgICBHTHVpbnQgcHJvZ3JhbUlEID0g
Z2xDcmVhdGVQcm9ncmFtKCk7Ci0gICAgICAgIEdMX0NNRChnbENvbXBpbGVTaGFkZXIodmVydGV4
U2hhZGVyKSkKLSAgICAgICAgR0xfQ01EKGdsQ29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcikp
Ci0gICAgICAgIEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIHZlcnRleFNoYWRlcikp
Ci0gICAgICAgIEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZyYWdtZW50U2hhZGVy
KSkKLSAgICAgICAgR0xfQ01EKGdsQmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgMCwgIklu
VmVydGV4IikpCi0gICAgICAgIEdMX0NNRChnbExpbmtQcm9ncmFtKHByb2dyYW1JRCkpCi0gICAg
ICAgIHByb2dyYW1zW2luZGV4XS5pZCA9IHByb2dyYW1JRDsKLSAgICAgICAgY2hhciBpbmZvTG9n
WzEwMjRdOwotICAgICAgICBpbnQgbGVuOwotICAgICAgICBHTF9DTUQoZ2xHZXRQcm9ncmFtSW5m
b0xvZyhwcm9ncmFtSUQsIDEwMjQsICZsZW4sIGluZm9Mb2cpKTsKLSAgICB9Ci0KLSAgICBQcm9n
cmFtSW5mbyBwcm9ncmFtc1tOdW1Qcm9ncmFtc107Ci0KLX0gZ1NoYWRlckluZm87CiAKICNkZWZp
bmUgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKHByb2csIHZhcikgXAotICAgICAgICAg
ICAgaWYgKGdTaGFkZXJJbmZvLmdldFVuaWZvcm1Mb2NhdGlvbihUZXhtYXBTaGFkZXJJbmZvOjpw
cm9nIyNQcm9ncmFtLCBUZXhtYXBTaGFkZXJJbmZvOjp2YXIjI1ZhcmlhYmxlLCAjdmFyKSA8IDAp
IFwKKyAgICAgICAgICAgIGlmIChwdnQtPnNoYWRlckluZm8uZ2V0VW5pZm9ybUxvY2F0aW9uKFRl
eHR1cmVNYXBwZXJHTFByaXZhdGU6OlNoYWRlckluZm86OnByb2cjI1Byb2dyYW0sIFRleHR1cmVN
YXBwZXJHTFByaXZhdGU6OlNoYWRlckluZm86OnZhciMjVmFyaWFibGUsICN2YXIpIDwgMCkgXAog
ICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkbid0IGZpbmQgdmFyaWFibGUgIiN2
YXIiIGluIHByb2dyYW0gIiNwcm9nIlxuIik7Ci0jZGVmaW5lIFRFWE1BUF9CVUlMRF9TSEFERVIo
cHJvZ3JhbSkgZ1NoYWRlckluZm8uY3JlYXRlU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3Vy
Y2UjI3Byb2dyYW0sIGZyYWdtZW50U2hhZGVyU291cmNlIyNwcm9ncmFtLCBUZXhtYXBTaGFkZXJJ
bmZvOjpwcm9ncmFtIyNQcm9ncmFtKTsKKyNkZWZpbmUgVEVYTUFQX0JVSUxEX1NIQURFUihwcm9n
cmFtKSBwdnQtPnNoYWRlckluZm8uY3JlYXRlU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3Vy
Y2UjI3Byb2dyYW0sIGZyYWdtZW50U2hhZGVyU291cmNlIyNwcm9ncmFtLCBUZXh0dXJlTWFwcGVy
R0xQcml2YXRlOjpTaGFkZXJJbmZvOjpwcm9ncmFtIyNQcm9ncmFtKTsKIAotVGV4dHVyZU1hcHBl
ckdMOjpUZXh0dXJlTWFwcGVyR0woR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQotICAgIDogVGV4
dHVyZU1hcHBlcihjb250ZXh0KQotICAgICwgbV9jdXJyZW50UHJvZ3JhbShUZXhtYXBTaGFkZXJJ
bmZvOjpUYXJnZXRQcm9ncmFtKQorVGV4dHVyZU1hcHBlckdMOjpUZXh0dXJlTWFwcGVyR0woKQor
ICAgIDogcHZ0KG5ldyBUZXh0dXJlTWFwcGVyR0xQcml2YXRlKQogewotICAgIHN0YXRpYyBib29s
IHNoYWRlcnNDb21waWxlZCA9IGZhbHNlOwotICAgIGlmIChzaGFkZXJzQ29tcGlsZWQpCisgICAg
b2J0YWluQ3VycmVudENvbnRleHQoKTsKKyAgICBzdGF0aWMgYm9vbCBjb21waWxlZFNoYWRlcnMg
PSBmYWxzZTsKKyAgICBpZiAoY29tcGlsZWRTaGFkZXJzKQogICAgICAgICByZXR1cm47Ci0gICAg
c2hhZGVyc0NvbXBpbGVkID0gdHJ1ZTsKKyAgICBjb21waWxlZFNoYWRlcnMgPSB0cnVlOwogI2lm
bmRlZiBURVhNQVBfT1BFTkdMX0VTMgogI2RlZmluZSBPRVMyX1BSRUNJU0lPTl9ERUZJTklUSU9O
UyBcCiAgICAgIiNkZWZpbmUgbG93cFxuI2RlZmluZSBoaWdocFxuIgpAQCAtMjg1LDE4ICszNjQs
MTggQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1
cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHQKIAogICAgIGNvbnN0IEJpdG1hcFRleHR1cmVH
TCYgdGV4dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4odGV4dHVy
ZSk7CiAKLSAgICBUZXhtYXBTaGFkZXJJbmZvOjpTaGFkZXJQcm9ncmFtSW5kZXggcHJvZ3JhbTsK
KyAgICBUZXh0dXJlTWFwcGVyR0xQcml2YXRlOjpTaGFkZXJJbmZvOjpTaGFkZXJQcm9ncmFtSW5k
ZXggcHJvZ3JhbTsKICAgICBpZiAobWFza1RleHR1cmUpCi0gICAgICAgIHByb2dyYW0gPSBUZXht
YXBTaGFkZXJJbmZvOjpPcGFjaXR5QW5kTWFza1Byb2dyYW07CisgICAgICAgIHByb2dyYW0gPSBU
ZXh0dXJlTWFwcGVyR0xQcml2YXRlOjpTaGFkZXJJbmZvOjpPcGFjaXR5QW5kTWFza1Byb2dyYW07
CiAgICAgZWxzZQotICAgICAgICBwcm9ncmFtID0gVGV4bWFwU2hhZGVySW5mbzo6U2ltcGxlUHJv
Z3JhbTsKKyAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJHTFByaXZhdGU6OlNoYWRlcklu
Zm86OlNpbXBsZVByb2dyYW07CiAKLSAgICBjb25zdCBUZXhtYXBTaGFkZXJJbmZvOjpQcm9ncmFt
SW5mbyYgcHJvZ3JhbUluZm8gPSBnU2hhZGVySW5mby5wcm9ncmFtc1twcm9ncmFtXTsKLSAgICBp
ZiAobV9jdXJyZW50UHJvZ3JhbSAhPSBwcm9ncmFtKSB7CisgICAgY29uc3QgVGV4dHVyZU1hcHBl
ckdMUHJpdmF0ZTo6U2hhZGVySW5mbzo6UHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvID0gcHZ0LT5z
aGFkZXJJbmZvLnByb2dyYW1zW3Byb2dyYW1dOworICAgIGlmIChwdnQtPmN1cnJlbnRQcm9ncmFt
ICE9IHByb2dyYW0pIHsKICAgICAgICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShwcm9ncmFtSW5mby5p
ZCkpCi0gICAgICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShnU2hhZGVySW5m
by5wcm9ncmFtc1ttX2N1cnJlbnRQcm9ncmFtXS52YXJzW1RleG1hcFNoYWRlckluZm86OkluVmVy
dGV4VmFyaWFibGVdKSkKLSAgICAgICAgbV9jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07Ci0gICAg
ICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW1JbmZvLnZhcnNbVGV4
bWFwU2hhZGVySW5mbzo6SW5WZXJ0ZXhWYXJpYWJsZV0pKQorICAgICAgICBHTF9DTUQoZ2xEaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkocHZ0LT5zaGFkZXJJbmZvLnByb2dyYW1zW3B2dC0+Y3VycmVu
dFByb2dyYW1dLnZhcnNbVGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6U2hhZGVySW5mbzo6SW5WZXJ0
ZXhWYXJpYWJsZV0pKQorICAgICAgICBwdnQtPmN1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTsKKyAg
ICAgICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbUluZm8udmFyc1tU
ZXh0dXJlTWFwcGVyR0xQcml2YXRlOjpTaGFkZXJJbmZvOjpJblZlcnRleFZhcmlhYmxlXSkpCiAg
ICAgfQogCiAgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKSkKQEAgLTMwOCw3ICsz
ODcsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4
dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdAogICAgIGNvbnN0IEdMZmxvYXQgdW5pdFJl
Y3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKICAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRy
aWJQb2ludGVyKDAsIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdW5pdFJlY3QpKQogCi0gICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgobV9wcm9q
ZWN0aW9uTWF0cml4KS5tdWx0TGVmdChtb2RlbFZpZXdNYXRyaXgpLm11bHRMZWZ0KFRyYW5zZm9y
bWF0aW9uTWF0cml4KAorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9y
bWF0aW9uTWF0cml4KHB2dC0+cHJvamVjdGlvbk1hdHJpeCkubXVsdExlZnQobW9kZWxWaWV3TWF0
cml4KS5tdWx0TGVmdChUcmFuc2Zvcm1hdGlvbk1hdHJpeCgKICAgICAgICAgICAgIHRhcmdldFJl
Y3Qud2lkdGgoKSwgMCwgMCwgMCwKICAgICAgICAgICAgIDAsIHRhcmdldFJlY3QuaGVpZ2h0KCks
IDAsIDAsCiAgICAgICAgICAgICAwLCAwLCAxLCAwLApAQCAtMzI0LDEwICs0MDMsMTAgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1
cmUsIGNvbnN0IEludFJlY3QmIHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCB0ZXh0dXJlR0wubV9yZWxhdGl2ZVNpemUuaGVpZ2h0KCksIDAsIDAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAxfTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0
cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5NYXRyaXhWYXJpYWJs
ZV0sIDEsIEdMX0ZBTFNFLCBtNCkpCi0gICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9n
cmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OkluU291cmNlTWF0cml4VmFyaWFibGVdLCAx
LCBHTF9GQUxTRSwgbTRzcmMpKQotICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtSW5mby52
YXJzW1RleG1hcFNoYWRlckluZm86OlNvdXJjZVRleHR1cmVWYXJpYWJsZV0sIDApKQotICAgIEdM
X0NNRChnbFVuaWZvcm0xZihwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86Ok9wYWNp
dHlWYXJpYWJsZV0sIG9wYWNpdHkpKQorICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJv
Z3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xQcml2YXRlOjpTaGFkZXJJbmZvOjpJbk1hdHJp
eFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00KSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4
NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6U2hhZGVySW5mbzo6
SW5Tb3VyY2VNYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNHNyYykpCisgICAgR0xfQ01E
KGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6U2hh
ZGVySW5mbzo6U291cmNlVGV4dHVyZVZhcmlhYmxlXSwgMCkpCisgICAgR0xfQ01EKGdsVW5pZm9y
bTFmKHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6U2hhZGVySW5mbzo6
T3BhY2l0eVZhcmlhYmxlXSwgb3BhY2l0eSkpCiAKICAgICBpZiAobWFza1RleHR1cmUgJiYgbWFz
a1RleHR1cmUtPmlzVmFsaWQoKSkgewogICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wqIG1h
c2tUZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wqPihtYXNrVGV4
dHVyZSk7CkBAIC0zMzcsOCArNDE2LDggQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0
dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgbWFza1RleHR1cmVHTC0+bV9y
ZWxhdGl2ZVNpemUuaGVpZ2h0KCksIDAsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIDAsIDEsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsIDAsIDAsIDF9OwotICAgICAgICBnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3Jh
bUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJbk1hc2tNYXRyaXhWYXJpYWJsZV0sIDEsIEdM
X0ZBTFNFLCBtNG1hc2spOwotICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbUluZm8u
dmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpNYXNrVGV4dHVyZVZhcmlhYmxlXSwgMSkpCisgICAgICAg
IGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleHR1cmVNYXBwZXJHTFByaXZh
dGU6OlNoYWRlckluZm86OkluTWFza01hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00bWFz
ayk7CisgICAgICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtSW5mby52YXJzW1RleHR1cmVN
YXBwZXJHTFByaXZhdGU6OlNoYWRlckluZm86Ok1hc2tUZXh0dXJlVmFyaWFibGVdLCAxKSkKICAg
ICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpCiAgICAgfQogCkBAIC00
MDIsNDMgKzQ4MSw2IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjplbmRQYWludCgpCiAgICAgbV9i
dWZmZXIuY2xlYXIoKTsKIH0KIAotc3RydWN0IFRleG1hcEdMU2hhZGVyVGV4dHVyZXMgewotICAg
IHN0cnVjdCBFbnRyeSB7Ci0gICAgICAgIEdMdWludCB0ZXh0dXJlOwotICAgICAgICBpbnQgcmVm
Q291bnQ7Ci0gICAgfTsKLSAgICBIYXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBFbnRyeT4gaW1hZ2VU
b1RleHR1cmU7Ci0gICAgR0x1aW50IGZpbmRPckNyZWF0ZShOYXRpdmVJbWFnZVB0ciBpbWFnZSwg
Ym9vbCYgZm91bmQpCi0gICAgewotICAgICAgICBIYXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBFbnRy
eT46Oml0ZXJhdG9yIGl0ID0gaW1hZ2VUb1RleHR1cmUuZmluZChpbWFnZSk7Ci0gICAgICAgIGZv
dW5kID0gZmFsc2U7Ci0gICAgICAgIGlmIChpdCAhPSBpbWFnZVRvVGV4dHVyZS5lbmQoKSkgewot
ICAgICAgICAgICAgaXQtPnNlY29uZC5yZWZDb3VudCsrOwotICAgICAgICAgICAgZm91bmQgPSB0
cnVlOwotICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQudGV4dHVyZTsKLSAgICAgICAgfQot
ICAgICAgICBFbnRyeSBlbnRyeTsKLSAgICAgICAgR0xfQ01EKGdsR2VuVGV4dHVyZXMoMSwgJmVu
dHJ5LnRleHR1cmUpKTsKLSAgICAgICAgZW50cnkucmVmQ291bnQgPSAxOwotICAgICAgICBpbWFn
ZVRvVGV4dHVyZS5hZGQoaW1hZ2UsIGVudHJ5KTsKLSAgICAgICAgcmV0dXJuIGVudHJ5LnRleHR1
cmU7Ci0gICAgfQotCi0gICAgYm9vbCBkZXJlZihOYXRpdmVJbWFnZVB0ciBpbWFnZSkKLSAgICB7
Ci0gICAgICAgIEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIsIEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBp
bWFnZVRvVGV4dHVyZS5maW5kKGltYWdlKTsKLSAgICAgICAgaWYgKGl0ICE9IGltYWdlVG9UZXh0
dXJlLmVuZCgpKSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5yZWZDb3VudCA8IDIpIHsK
LSAgICAgICAgICAgICAgICBpbWFnZVRvVGV4dHVyZS5yZW1vdmUoaXQpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci19OwotCi1zdGF0aWMgVGV4bWFwR0xTaGFkZXJUZXh0dXJlcyBnVGV4
dHVyZVJlcG9zaXRvcnk7Ci0KIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpzZXRDb250ZW50c1RvSW1h
Z2UoSW1hZ2UqIGltYWdlKQogewogICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlID0gaW1h
Z2UgPyBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSA6IDA7CkBAIC00NTEsNyAr
NDkzLDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSog
aW1hZ2UpCiAgICAgaWYgKG5hdGl2ZUltYWdlID09IG1faW1hZ2UpCiAgICAgICAgIHJldHVybjsK
ICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgR0x1aW50IG5ld1RleHR1cmVJRCA9IGdUZXh0
dXJlUmVwb3NpdG9yeS5maW5kT3JDcmVhdGUobmF0aXZlSW1hZ2UsIGZvdW5kKTsKKyAgICBHTHVp
bnQgbmV3VGV4dHVyZUlEID0gbV90ZXh0dXJlTWFwcGVyLT5wdnQtPmRpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlcy5maW5kT3JDcmVhdGUobmF0aXZlSW1hZ2UsIGZvdW5kKTsKICAgICBpZiAobmV3VGV4
dHVyZUlEICE9IG1faWQpIHsKICAgICAgICAgZGVzdHJveSgpOwogICAgICAgICBtX2lkID0gbmV3
VGV4dHVyZUlEOwpAQCAtNDY3LDcgKzUwOSw3IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpzZXRD
b250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQogCiB2b2lkIEJpdG1hcFRleHR1cmVHTDo6ZGVz
dHJveSgpCiB7Ci0gICAgaWYgKG1faWQgJiYgKCFtX2ltYWdlIHx8ICFnVGV4dHVyZVJlcG9zaXRv
cnkuZGVyZWYobV9pbWFnZSkpKQorICAgIGlmIChtX2lkICYmICghbV9pbWFnZSB8fCAhbV90ZXh0
dXJlTWFwcGVyLT5wdnQtPmRpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5kZXJlZihtX2ltYWdlKSkp
CiAgICAgICAgIEdMX0NNRChnbERlbGV0ZVRleHR1cmVzKDEsICZtX2lkKSkKICAgICBpZiAobV9m
Ym8pCiAgICAgICAgIEdMX0NNRChnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pKQpAQCAt
NDk2LDggKzUzOCwzMiBAQCBzdGF0aWMgaW5saW5lIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNyZWF0
ZVByb2plY3Rpb25NYXRyaXgoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAtMSwgZmxpcCA/IDEgOiAtMSwgMCwgMSk7CiB9CiAKLXZvaWQgVGV4
dHVyZU1hcHBlckdMOjpjbGVhbnVwKCkKK1RleHR1cmVNYXBwZXJHTDo6flRleHR1cmVNYXBwZXJH
TCgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZGVsZXRlIHB2dDsKK30KKwor
Ym9vbCBUZXh0dXJlTWFwcGVyR0w6Om1ha2VDb250ZXh0Q3VycmVudCgpCiB7CisjaWYgT1MoTUFD
X09TX1gpCisgICAgcmV0dXJuIGFnbFNldEN1cnJlbnRDb250ZXh0KHB2dC0+Y29udGV4dEhhbmRs
ZSk7CisjZWxpZiBPUyhVTklYKQorICAgIERpc3BsYXkqIGRpc3BsYXkgPSBYT3BlbkRpc3BsYXko
MCk7CisgICAgaWYgKCFkaXNwbGF5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IGdsWE1ha2VDdXJyZW50KGRpc3BsYXksIHB2dC0+Y29udGV4dEhhbmRsZS5kcmF3YWJsZSwgcHZ0
LT5jb250ZXh0SGFuZGxlLmNvbnRleHQpOworI2VuZGlmCit9CisKK3ZvaWQgVGV4dHVyZU1hcHBl
ckdMOjpvYnRhaW5DdXJyZW50Q29udGV4dCgpCit7CisjaWYgT1MoTUFDX09TX1gpCisgICAgcHZ0
LT5jb250ZXh0SGFuZGxlID0gYWdsR2V0Q3VycmVudENvbnRleHQoKTsKKyNlbGlmIE9TKFVOSVgp
CisgICAgcHZ0LT5jb250ZXh0SGFuZGxlLmRyYXdhYmxlID0gZ2xYR2V0Q3VycmVudERyYXdhYmxl
KCk7CisgICAgcHZ0LT5jb250ZXh0SGFuZGxlLmNvbnRleHQgPSBnbFhHZXRDdXJyZW50Q29udGV4
dCgpOworI2VuZGlmCiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiaW5kU3VyZmFjZShCaXRt
YXBUZXh0dXJlICpzdXJmYWNlUG9pbnRlcikKQEAgLTUyMyw3ICs1ODksNyBAQCB2b2lkIFRleHR1
cmVNYXBwZXJHTDo6YmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSAqc3VyZmFjZVBvaW50ZXIpCiAg
ICAgfQogCiAgICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwgc3VyZmFjZS0+c2l6ZSgpLndpZHRo
KCksIHN1cmZhY2UtPnNpemUoKS5oZWlnaHQoKSkpCi0gICAgbV9wcm9qZWN0aW9uTWF0cml4ID0g
bWF0cml4OworICAgIHB2dC0+cHJvamVjdGlvbk1hdHJpeCA9IG1hdHJpeDsKIH0KIAogdm9pZCBU
ZXh0dXJlTWFwcGVyR0w6OnNldENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTU0Myw4ICs2
MDksNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6cGFpbnRUb1RhcmdldChjb25zdCBCaXRtYXBU
ZXh0dXJlJiBhU3VyZmFjZSwgY29uc3QgSW50U2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAg
c3VyZmFjZS5tX2FjdHVhbFNpemUud2lkdGgoKSwgMCwgMCwgMCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsIHN1cmZhY2UubV9hY3R1YWxTaXplLmhlaWdodCgpLCAwLCAwLAogICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1cmZh
Y2Uub2Zmc2V0KCkueCgpLCBzdXJmYWNlLm9mZnNldCgpLnkoKSwgMCwgMQotICAgICAgICAgICAg
ICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1cmZhY2Uub2Zmc2V0KCkueCgpLCBzdXJm
YWNlLm9mZnNldCgpLnkoKSwgMCwgMSkKICAgICAgICAgICAgICk7CiAKICAgICBjb25zdCBHTGZs
b2F0IG00W10gPSB7CkBAIC01NjAsMTggKzYyNSwxOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6
cGFpbnRUb1RhcmdldChjb25zdCBCaXRtYXBUZXh0dXJlJiBhU3VyZmFjZSwgY29uc3QgSW50U2l6
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDF9OwogCiAg
ICAgLy8gV2UgYWxyZWFkeSBibGVuZGVkIHRoZSBhbHBoYSBpbjsgdGhlIHJlc3VsdCBpcyBwcmVt
dWx0aXBsaWVkLgotICAgIEdMX0NNRChnbFVzZVByb2dyYW0oZ1NoYWRlckluZm8ucHJvZ3JhbXNb
VGV4bWFwU2hhZGVySW5mbzo6VGFyZ2V0UHJvZ3JhbV0uaWQpKQorICAgIEdMX0NNRChnbFVzZVBy
b2dyYW0ocHZ0LT5zaGFkZXJJbmZvLnByb2dyYW1zW1RleHR1cmVNYXBwZXJHTFByaXZhdGU6OlNo
YWRlckluZm86OlRhcmdldFByb2dyYW1dLmlkKSkKICAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIDApKQogICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAsIHN1cmZh
Y2VTaXplLndpZHRoKCksIHN1cmZhY2VTaXplLmhlaWdodCgpKSkKICAgICBHTF9DTUQoZ2xEaXNh
YmxlKEdMX1NURU5DSUxfVEVTVCkpCi0gICAgY29uc3QgVGV4bWFwU2hhZGVySW5mbzo6UHJvZ3Jh
bUluZm8mIHByb2dyYW1JbmZvID0gZ1NoYWRlckluZm8ucHJvZ3JhbXNbVGV4bWFwU2hhZGVySW5m
bzo6VGFyZ2V0UHJvZ3JhbV07Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW1JbmZvLnZh
cnNbVGV4bWFwU2hhZGVySW5mbzo6T3BhY2l0eVZhcmlhYmxlXSwgb3BhY2l0eSkpCisgICAgY29u
c3QgVGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6U2hhZGVySW5mbzo6UHJvZ3JhbUluZm8mIHByb2dy
YW1JbmZvID0gcHZ0LT5zaGFkZXJJbmZvLnByb2dyYW1zW1RleHR1cmVNYXBwZXJHTFByaXZhdGU6
OlNoYWRlckluZm86OlRhcmdldFByb2dyYW1dOworICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9n
cmFtSW5mby52YXJzW1RleHR1cmVNYXBwZXJHTFByaXZhdGU6OlNoYWRlckluZm86Ok9wYWNpdHlW
YXJpYWJsZV0sIG9wYWNpdHkpKQogICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVS
RTApKQogICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHN1cmZhY2UubV9p
ZCkpCi0gICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVy
SW5mbzo6U291cmNlVGV4dHVyZVZhcmlhYmxlXSwgMCkpCi0gICAgR0xfQ01EKGdsRW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblZlcnRl
eFZhcmlhYmxlXSkpCi0gICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52
YXJzW1RleG1hcFNoYWRlckluZm86OkluTWF0cml4VmFyaWFibGVdLCAxLCBHTF9GQUxTRSwgbTQp
KQotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBT
aGFkZXJJbmZvOjpJblNvdXJjZU1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00c3JjKSkK
KyAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xQ
cml2YXRlOjpTaGFkZXJJbmZvOjpTb3VyY2VUZXh0dXJlVmFyaWFibGVdLCAwKSkKKyAgICBHTF9D
TUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtSW5mby52YXJzW1RleHR1cmVNYXBw
ZXJHTFByaXZhdGU6OlNoYWRlckluZm86OkluVmVydGV4VmFyaWFibGVdKSkKKyAgICBHTF9DTUQo
Z2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMUHJpdmF0
ZTo6U2hhZGVySW5mbzo6SW5NYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNCkpCisgICAg
R0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleHR1cmVNYXBwZXJH
TFByaXZhdGU6OlNoYWRlckluZm86OkluU291cmNlTWF0cml4VmFyaWFibGVdLCAxLCBHTF9GQUxT
RSwgbTRzcmMpKQogICAgIEdMX0NNRChnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCAwKSkK
ICAgICBjb25zdCBHTGZsb2F0IHVuaXRSZWN0W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07
CiAgICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcigwLCAyLCBHTF9GTE9BVCwgR0xfRkFM
U0UsIDAsIHVuaXRSZWN0KSkKQEAgLTU4MCwxNSArNjQ1LDE3IEBAIHZvaWQgVGV4dHVyZU1hcHBl
ckdMOjpwYWludFRvVGFyZ2V0KGNvbnN0IEJpdG1hcFRleHR1cmUmIGFTdXJmYWNlLCBjb25zdCBJ
bnRTaXplCiAgICAgc2V0Q2xpcCh2aXNpYmxlUmVjdCk7CiAKICAgICBHTF9DTUQoZ2xEcmF3QXJy
YXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpCi0gICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0
dHJpYkFycmF5KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5WZXJ0ZXhWYXJp
YWJsZV0pKQorICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtSW5m
by52YXJzW1RleHR1cmVNYXBwZXJHTFByaXZhdGU6OlNoYWRlckluZm86OkluVmVydGV4VmFyaWFi
bGVdKSkKICAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKDApKQogICAgIEdMX0NNRChnbEJpbmRCdWZm
ZXIoR0xfQVJSQVlfQlVGRkVSLCAwKSkKLSAgICBtX2N1cnJlbnRQcm9ncmFtID0gVGV4bWFwU2hh
ZGVySW5mbzo6VGFyZ2V0UHJvZ3JhbTsKKyAgICBwdnQtPmN1cnJlbnRQcm9ncmFtID0gVGV4dHVy
ZU1hcHBlckdMUHJpdmF0ZTo6U2hhZGVySW5mbzo6VGFyZ2V0UHJvZ3JhbTsKIH0KIAogUGFzc1Jl
ZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZVRleHR1cmUoKQogewot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQml0bWFwVGV4dHVyZUdMKCkpOworICAgIEJpdG1hcFRl
eHR1cmVHTCogdGV4dHVyZSA9IG5ldyBCaXRtYXBUZXh0dXJlR0woKTsKKyAgICB0ZXh0dXJlLT5t
X3RleHR1cmVNYXBwZXIgPSB0aGlzOworICAgIHJldHVybiBhZG9wdFJlZih0ZXh0dXJlKTsKIH0K
IAogfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1
cmVNYXBwZXJHTC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1h
cHBlckdMLmgKaW5kZXggN2ExMmM3Mi4uZDY2MTA0YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgKQEAgLTI5LDExICsyOSwxMyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFRleHR1cmVNYXBwZXJHTFByaXZhdGU7
CisKIC8vIEFuIE9wZW5HTC1FUzIgaW1wbGVtZW50YXRpb24gb2YgVGV4dHVyZU1hcHBlci4KIGNs
YXNzIFRleHR1cmVNYXBwZXJHTCA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyIHsKIHB1YmxpYzoKLSAg
ICBUZXh0dXJlTWFwcGVyR0woR3JhcGhpY3NDb250ZXh0KiBnYyk7Ci0gICAgdmlydHVhbCB+VGV4
dHVyZU1hcHBlckdMKCkge30KKyAgICBUZXh0dXJlTWFwcGVyR0woKTsKKyAgICB2aXJ0dWFsIH5U
ZXh0dXJlTWFwcGVyR0woKTsKIAogICAgIC8vIHJlaW1wcyBmcm9tIFRleHR1cmVNYXBwZXIKICAg
ICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwg
Y29uc3QgSW50UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZs
b2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKQEAgLTQzLDEx
ICs0NSwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGFsbG93U3VyZmFjZUZvclJvb3Qo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRl
eHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5cGUoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cCgpOworICAgIHZvaWQgb2J0YWluQ3VycmVu
dENvbnRleHQoKTsKKyAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCiBwcml2YXRlOgot
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcHJvamVjdGlvbk1hdHJpeDsKLSAgICBpbnQgbV9j
dXJyZW50UHJvZ3JhbTsKKyAgICBUZXh0dXJlTWFwcGVyR0xQcml2YXRlKiBwdnQ7CisgICAgZnJp
ZW5kIGNsYXNzIEJpdG1hcFRleHR1cmVHTDsKIH07CiAKIC8vIEFuIG9mZnNjcmVlbiBidWZmZXIg
dG8gYmUgcmVuZGVyZWQgYnkgc29mdHdhcmUuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAKaW5kZXggOTIzNmRhZS4uNjdhNmM3OCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcApAQCAt
NTQsOCArNTQsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0
IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1h
cFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKICAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0
bWFwVGV4dHVyZSogc3VyZmFjZSk7CiAgICAgdmlydHVhbCB2b2lkIHNldENsaXAoY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250
ZXh0Kik7CiAgICAgdmlydHVhbCBib29sIGFsbG93U3VyZmFjZUZvclJvb3QoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQotICAgIFRleHR1cmVNYXBwZXJRdChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQpOworICAgIFRleHR1cmVNYXBwZXJRdCgpOwogICAgIHZpcnR1YWwgY29uc3QgY2hhciogdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuICJUZXh0dXJlTWFwcGVyUXQiOyB9CiAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKIApAQCAtMTIzLDEyICsxMjQs
MTUgQEAgdm9pZCBUZXh0dXJlTWFwcGVyUXQ6OnNldENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCkK
ICAgICAgcGFpbnRlci0+c2V0Q2xpcFJlY3QocmVjdCk7CiB9CiAKLVRleHR1cmVNYXBwZXJRdDo6
VGV4dHVyZU1hcHBlclF0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLSAgICA6IFRleHR1cmVN
YXBwZXIoY29udGV4dCkKLSAgICAsIG1fcGFpbnRlcihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KSkKLSAgICAsIG1fY3VycmVudFN1cmZhY2UoMCkKK1RleHR1cmVNYXBwZXJRdDo6VGV4dHVyZU1h
cHBlclF0KCkKKyAgICA6IG1fY3VycmVudFN1cmZhY2UoMCkKIHsKLSAgICBUZXh0dXJlTWFwcGVy
UXQ6OmluaXRpYWxpemUobV9wYWludGVyKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyUXQ6OnNl
dEdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgbV9wYWlu
dGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgaW5pdGlhbGl6ZShtX3BhaW50
ZXIpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJRdDo6YmluZFN1cmZhY2UoQml0bWFwVGV4dHVy
ZSogc3VyZmFjZSkKQEAgLTE4MSwxMCArMTg1LDEyIEBAIHZvaWQgVGV4dHVyZU1hcHBlclF0Ojpk
cmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0
CiBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXI+IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQpCiB7CiAjaWZkZWYgUVRfT1BFTkdMX0xJQgotICAgIGlmIChjb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+cGFpbnRFbmdpbmUoKS0+dHlwZSgpID09IFFQYWludEVu
Z2luZTo6T3BlbkdMMikKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVy
R0woY29udGV4dCkpOworICAgIGlmIChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+cGFpbnRF
bmdpbmUoKS0+dHlwZSgpID09IFFQYWludEVuZ2luZTo6T3BlbkdMMikgeworICAgICAgICBUZXh0
dXJlTWFwcGVyR0wqIHRleG1hcEdMID0gbmV3IFRleHR1cmVNYXBwZXJHTDsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKHRleG1hcEdMKTsKKyAgICB9CiAjZW5kaWYKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFRleHR1cmVNYXBwZXJRdChjb250ZXh0KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBUZXh0dXJlTWFwcGVyUXQpOwogfQogCiAKQEAgLTE5NCw2ICsyMDAsOCBAQCBQYXNzUmVmUHRy
PEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXJRdDo6Y3JlYXRlVGV4dHVyZSgpCiB9CiAKICNp
ZmRlZiBRVF9PUEVOR0xfTElCCisKKwogY2xhc3MgUkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXJR
dCA6IHB1YmxpYyBSR0JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlciB7CiBwdWJsaWM6CiAgICAgdmly
dHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBy
ZWN0LCBib29sIG9wYXF1ZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAppbmRleCAwNTdi
Y2ZjLi41NGU2YzdhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCkBAIC00MCw3ICs0
MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0cnVjdCBUZXhtYXBQYWludE9wdGlvbnMgewog
ICAgIEJpdG1hcFRleHR1cmUqIHN1cmZhY2U7CiAgICAgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1h
cHBlcjsKLSAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQ7CiAgICAgVGV4dHVyZU1hcHBlck5v
ZGUqIHJvb3RMYXllcjsKICAgICBmbG9hdCBvcGFjaXR5OwogICAgIEludFJlY3Qgc2Npc3NvclJl
Y3Q7CkBAIC0yMTQsNyArMjEzLDcgQEAgcHVibGljOgogICAgIEludFNpemUgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHNldFBsYXRmb3JtTGF5ZXJD
bGllbnQoVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFNpemUmLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRS
ZWN0LCBjb25zdCBJbnRSZWN0JiBleHBvc2VkUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFRl
eHR1cmVNYXBwZXIqLCBjb25zdCBUZXh0dXJlTWFwcGVyQ29udGVudExheWVyOjpQYWludE9wdGlv
bnMmKTsKIAogICAgIHN0YXRpYyBUZXh0dXJlTWFwcGVyTm9kZSogdG9UZXh0dXJlTWFwcGVyTm9k
ZShHcmFwaGljc0xheWVyKik7CiBwdWJsaWM6CkBAIC0zOTgsNyArMzk3LDcgQEAgYm9vbCBUZXh0
dXJlTWFwcGVyTm9kZTo6aGFzU3VyZmFjZURlc2NlbmRhbnRzKCkgY29uc3QKIAogfQogCi12b2lk
IFRleHR1cmVNYXBwZXJOb2RlOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEludFNpemUmIHNpemUsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFJlY3Qm
IGV4cG9zZWRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9h
dCBvcGFjaXR5KQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnQoVGV4dHVyZU1hcHBlciog
dGV4dHVyZU1hcHBlciwgY29uc3QgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6UGFpbnRPcHRp
b25zJiBvcHRpb25zKQogewogICAgIEFTU0VSVChtX2xheWVyVHlwZSA9PSBSb290TGF5ZXIpOwog
ICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQpAQCAtNDA5LDggKzQwOCw2IEBAIHZvaWQgVGV4dHVy
ZU1hcHBlck5vZGU6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50U2l6
ZSYgc2l6ZSwgY29uCiAgICAgKCJbVGV4dHVyZU1hcHBlcl0gUm9vdFBhaW50ISFcbiIpOwogI2Vu
ZGlmCiAKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlcj4gdGV4dHVyZU1hcHBlciA9IFRleHR1cmVN
YXBwZXI6OmNyZWF0ZShjb250ZXh0KTsKLQogICAgIGlmICh0ZXh0dXJlTWFwcGVyLT50eXBlKCkg
IT0gbV9sYXN0VGV4dHVyZU1hcHBlclR5cGUpCiAgICAgICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUu
bV9kYXRhLmNsZWFyKCk7CiAKQEAgLTQxOCwxNiArNDE1LDE1IEBAIHZvaWQgVGV4dHVyZU1hcHBl
ck5vZGU6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6
ZSwgY29uCiAgICAgVGV4bWFwUGFpbnRPcHRpb25zIG9wdDsKICAgICBvcHQub3BhY2l0eSA9IDE7
CiAgICAgb3B0LnJvb3RMYXllciA9IHRoaXM7Ci0gICAgb3B0LnNjaXNzb3JSZWN0ID0gdGFyZ2V0
UmVjdDsKLSAgICBvcHQudmlzaWJsZVJlY3QgPSBleHBvc2VkUmVjdDsKLSAgICBvcHQudGV4dHVy
ZU1hcHBlciA9IHRleHR1cmVNYXBwZXIuZ2V0KCk7Ci0gICAgb3B0LmNvbnRleHQgPSB0ZXh0dXJl
TWFwcGVyLT5ncmFwaGljc0NvbnRleHQoKTsKKyAgICBvcHQuc2Npc3NvclJlY3QgPSBvcHRpb25z
LnRhcmdldFJlY3Q7CisgICAgb3B0LnZpc2libGVSZWN0ID0gb3B0aW9ucy52aXNpYmxlUmVjdDsK
KyAgICBvcHQudGV4dHVyZU1hcHBlciA9IHRleHR1cmVNYXBwZXI7CiAgICAgb3B0LnN1cmZhY2Ug
PSAwOwogICAgIHBhaW50UmVjdXJzaXZlKG9wdCk7CiAKICAgICBpZiAodGV4dHVyZU1hcHBlci0+
YWxsb3dTdXJmYWNlRm9yUm9vdCgpIHx8IG1fc3RhdGUuaGFzU3VyZmFjZURlc2NlbmRhbnRzKSB7
CiAgICAgICAgIHRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKDApOwotICAgICAgICB0ZXh0dXJl
TWFwcGVyLT5wYWludFRvVGFyZ2V0KCptX3N1cmZhY2UuZ2V0KCksIHNpemUsIHRyYW5zZm9ybSwg
b3BhY2l0eSAqIG1fc3RhdGUub3BhY2l0eSwgdGFyZ2V0UmVjdCk7CisgICAgICAgIHRleHR1cmVN
YXBwZXItPnBhaW50VG9UYXJnZXQoKm1fc3VyZmFjZS5nZXQoKSwgb3B0aW9ucy52aWV3cG9ydFNp
emUsIG9wdGlvbnMudHJhbnNmb3JtLCBvcHRpb25zLm9wYWNpdHkgKiBtX3N0YXRlLm9wYWNpdHks
IG9wdGlvbnMudGFyZ2V0UmVjdCk7CiAgICAgfQogICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUucHVy
Z2UoKTsKIH0KQEAgLTY5MiwxMCArNjg4LDkgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6dXBs
b2FkVGV4dHVyZUZyb21Db250ZW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGMKIAog
ICAgIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQobV90ZXh0dXJlLT5iZWdpblBh
aW50KGRpcnR5UmVjdCkpOwotICAgICAgICBpZiAodGV4dHVyZU1hcHBlciAmJiB0ZXh0dXJlTWFw
cGVyLT5ncmFwaGljc0NvbnRleHQoKSkgewotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBv
cmlnaW5hbENvbnRleHQgPSB0ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQoKTsKLSAgICAg
ICAgICAgIGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShvcmlnaW5hbENvbnRl
eHQtPmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LnNl
dFRleHREcmF3aW5nTW9kZShvcmlnaW5hbENvbnRleHQtPnRleHREcmF3aW5nTW9kZSgpKTsKKyAg
ICAgICAgaWYgKHRleHR1cmVNYXBwZXIpIHsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0SW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSh0ZXh0dXJlTWFwcGVyLT5pbWFnZUludGVycG9sYXRpb25RdWFs
aXR5KCkpOworICAgICAgICAgICAgY29udGV4dC5zZXRUZXh0RHJhd2luZ01vZGUodGV4dHVyZU1h
cHBlci0+dGV4dERyYXdpbmdNb2RlKCkpOwogICAgICAgICB9CiAgICAgICAgIG1fbGF5ZXItPnBh
aW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIGRpcnR5UmVjdCk7CiAgICAgfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCmluZGV4
IDAzYzFjNmQuLjI3NmIyMDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyLmgKQEAgLTEsNCArMSw0IEBACi0vKgorIC8qCiAgQ29weXJpZ2h0
IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQog
CiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgpAQCAtOTcsMjAgKzk3LDMwIEBAIHB1YmxpYzoKICAgICAgICAgZHJhd1RleHR1cmUo
dGV4dHVyZSwgSW50UmVjdCgwLCAwLCB0ZXh0dXJlLmNvbnRlbnRTaXplKCkud2lkdGgoKSwgdGV4
dHVyZS5jb250ZW50U2l6ZSgpLmhlaWdodCgpKSwgbWF0cml4LCBvcGFjaXR5LCAwKTsKICAgICB9
CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCop
IHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRDbGlwKGNvbnN0IEludFJlY3QmKSA9IDA7CiAgICAg
dmlydHVhbCBib29sIGFsbG93U3VyZmFjZUZvclJvb3QoKSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKSA9IDA7CiAgICAgdmly
dHVhbCBjb25zdCBjaGFyKiB0eXBlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjbGVh
bnVwKCkge30KIAotICAgIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX2djOwotICAgIH0KKyAgICB2b2lkIHNldEltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSkgeyBtX2ludGVy
cG9sYXRpb25RdWFsaXR5ID0gcXVhbGl0eTsgfQorICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2Rl
KGludCBtb2RlKSB7IG1fdGV4dERyYXdpbmdNb2RlID0gbW9kZTsgfQorCisgICAgSW50ZXJwb2xh
dGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
aW50ZXJwb2xhdGlvblF1YWxpdHk7IH0KKyAgICBpbnQgdGV4dERyYXdpbmdNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV90ZXh0RHJhd2luZ01vZGU7IH0KKworICAgIHZvaWQgc2V0Vmlld3BvcnRTaXpl
KGNvbnN0IEludFNpemUmKTsKIAogcHJvdGVjdGVkOgotICAgIFRleHR1cmVNYXBwZXIoR3JhcGhp
Y3NDb250ZXh0KiBnYykgOiBtX2djKGdjKSB7fQotICAgIEdyYXBoaWNzQ29udGV4dCogbV9nYzsK
KyAgICBUZXh0dXJlTWFwcGVyKCkKKyAgICAgICAgOiBtX2ludGVycG9sYXRpb25RdWFsaXR5KElu
dGVycG9sYXRpb25EZWZhdWx0KQorICAgICAgICAsIG1fdGV4dERyYXdpbmdNb2RlKGNUZXh0Rmls
bCkKKyAgICB7fQorCitwcml2YXRlOgorICAgIEludGVycG9sYXRpb25RdWFsaXR5IG1faW50ZXJw
b2xhdGlvblF1YWxpdHk7CisgICAgaW50IG1fdGV4dERyYXdpbmdNb2RlOwogfTsKIAogfTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllci5oCmluZGV4IDIzZTlmYzkuLmExNTY4MWMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXIuaApAQCAtMjUsNiArMjUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgSW50U2l6ZTsKK2Ns
YXNzIFRleHR1cmVNYXBwZXI7CiBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIAogCkBAIC01
MCwxMCArNTEsMTcgQEAgcHVibGljOgogCiBjbGFzcyBUZXh0dXJlTWFwcGVyQ29udGVudExheWVy
IDogcHVibGljIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyIHsKIHB1YmxpYzoKKyAgICBzdHJ1
Y3QgUGFpbnRPcHRpb25zIHsKKyAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdDsKKyAgICAgICAg
SW50UmVjdCB0YXJnZXRSZWN0OworICAgICAgICBJbnRTaXplIHZpZXdwb3J0U2l6ZTsKKyAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOworICAgICAgICBmbG9hdCBvcGFjaXR5
OworICAgIH07CisKICAgICB2aXJ0dWFsIHZvaWQgc2V0UGxhdGZvcm1MYXllckNsaWVudChUZXh0
dXJlTWFwcGVyTGF5ZXJDbGllbnQqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEludFNpemUmLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBj
b25zdCBJbnRSZWN0JiBleHBvc2VkUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRy
YW5zZm9ybSwgZmxvYXQgb3BhY2l0eSkge30KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoVGV4dHVy
ZU1hcHBlciosIGNvbnN0IFBhaW50T3B0aW9ucyYpIHt9CiAgICAgdmlydHVhbCBJbnRTaXplIHNp
emUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFudXBUZXh0dXJlTWFwcGVyKCkg
e30KICAgICB2aXJ0dWFsIFR5cGUgbGF5ZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gQ29udGVudExh
eWVyOyB9CiB9OwogCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAgYi9X
ZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKaW5kZXggMzllNzRkOS4uMTVkMGI5NSAxMDA2NDQK
LS0tIGEvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCisrKyBiL1dlYktpdC9xdC9BcGkvcXdl
YmZyYW1lLmNwcApAQCAtOTcsNiArOTcsNyBAQAogI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgog
I2VuZGlmCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2luY2x1ZGUgInRleG1hcC9UZXh0dXJl
TWFwcGVyLmgiCiAjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgi
CiAjZW5kaWYKICNpbmNsdWRlICJ3dGYvSGFzaE1hcC5oIgpAQCAtMjk1LDE4ICsyOTYsMzcgQEAg
dm9pZCBRV2ViRnJhbWVQcml2YXRlOjpyZW5kZXJGcm9tVGlsZWRCYWNraW5nU3RvcmUoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb24KICAgICAgICAgcGFpbnRlci0+cmVzdG9yZSgpOwogICAg
IH0KICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBF
UikKLSAgICAvLyBUZXh0dXJlTWFwcGVyIG1pZ2h0IHVzZSByYXcgT3BlbkdMIG9yIHNvbWUgb3Ro
ZXIgYmFja2VuZCB0aGF0IHJlcXVpcmVzIG5hdGl2ZSBwYWludGluZy4gT24gcmFzdGVyIHRoaXMg
ZG9lc24ndCBoYXZlIGFueSBlZmZlY3QuCi0gICAgaWYgKHJvb3RHcmFwaGljc0xheWVyKSB7Ci0g
ICAgICAgIHBhaW50ZXItPmJlZ2luTmF0aXZlUGFpbnRpbmcoKTsKLSAgICAgICAgcm9vdEdyYXBo
aWNzTGF5ZXItPnBhaW50KGNvbnRleHQsIHZpZXctPnNpemUoKSwgdmlldy0+ZnJhbWVSZWN0KCks
IEludFJlY3QoY2xpcC5ib3VuZGluZ1JlY3QoKSksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIHBh
aW50ZXItPm9wYWNpdHkoKSk7Ci0gICAgICAgIHBhaW50ZXItPmVuZE5hdGl2ZVBhaW50aW5nKCk7
Ci0gICAgfQotCisgICAgcmVuZGVyQ29tcG9zaXRlZExheWVycyhjb250ZXh0LCBJbnRSZWN0KGNs
aXAuYm91bmRpbmdSZWN0KCkpKTsKICAgICByZW5kZXJSZWxhdGl2ZUNvb3Jkcyhjb250ZXh0LCAo
UVdlYkZyYW1lOjpSZW5kZXJMYXllcikoUVdlYkZyYW1lOjpTY3JvbGxCYXJMYXllciB8IFFXZWJG
cmFtZTo6UGFuSWNvbkxheWVyKSwgY2xpcCk7CiAjZW5kaWYKIH0KICNlbmRpZgogCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCit2b2lkIFFX
ZWJGcmFtZVByaXZhdGU6OnJlbmRlckNvbXBvc2l0ZWRMYXllcnMoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBJbnRSZWN0JiBjbGlwKQoreworICAgIGlmICghcm9vdEdyYXBoaWNzTGF5
ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXRleHR1cmVNYXBwZXIpCisgICAgICAgIHRl
eHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoY29udGV4dCk7CisgICAgdGV4dHVy
ZU1hcHBlci0+c2V0R3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOworICAgIHRleHR1cmVNYXBwZXIt
PnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dC0+aW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSgpKTsKKyAgICB0ZXh0dXJlTWFwcGVyLT5zZXRUZXh0RHJhd2luZ01vZGUoY29udGV4
dC0+dGV4dERyYXdpbmdNb2RlKCkpOworICAgIFFQYWludGVyKiBwYWludGVyID0gY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCk7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsK
KyAgICBwYWludGVyLT5zYXZlKCk7CisgICAgcGFpbnRlci0+YmVnaW5OYXRpdmVQYWludGluZygp
OworICAgIFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXI6OlBhaW50T3B0aW9ucyBvcHRpb25zOwor
ICAgIG9wdGlvbnMudmlzaWJsZVJlY3QgPSBjbGlwOworICAgIG9wdGlvbnMudGFyZ2V0UmVjdCA9
IHZpZXctPmZyYW1lUmVjdCgpOworICAgIG9wdGlvbnMudmlld3BvcnRTaXplID0gdmlldy0+c2l6
ZSgpOworICAgIG9wdGlvbnMub3BhY2l0eSA9IHBhaW50ZXItPm9wYWNpdHkoKTsKKyAgICByb290
R3JhcGhpY3NMYXllci0+cGFpbnQodGV4dHVyZU1hcHBlci5nZXQoKSwgb3B0aW9ucyk7CisgICAg
cGFpbnRlci0+ZW5kTmF0aXZlUGFpbnRpbmcoKTsKKyAgICBwYWludGVyLT5yZXN0b3JlKCk7Cit9
CisjZW5kaWYKKwogdm9pZCBRV2ViRnJhbWVQcml2YXRlOjpyZW5kZXJSZWxhdGl2ZUNvb3JkcyhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFFXZWJGcmFtZTo6UmVuZGVyTGF5ZXIgbGF5ZXIsIGNv
bnN0IFFSZWdpb24mIGNsaXApCiB7CiAgICAgaWYgKCFmcmFtZS0+dmlldygpIHx8ICFmcmFtZS0+
Y29udGVudFJlbmRlcmVyKCkpCkBAIC0zNDksMTcgKzM2OSw3IEBAIHZvaWQgUVdlYkZyYW1lUHJp
dmF0ZTo6cmVuZGVyUmVsYXRpdmVDb29yZHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBRV2Vi
RnJhbWU6CiAgICAgICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgICAgIH0KICAgICAg
ICAgcGFpbnRlci0+cmVzdG9yZSgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgICAgIGlmIChyb290R3JhcGhpY3NMYXllcikg
ewotICAgICAgICAgICAgcGFpbnRlci0+c2F2ZSgpOwotICAgICAgICAgICAgcGFpbnRlci0+YmVn
aW5OYXRpdmVQYWludGluZygpOwotICAgICAgICAgICAgcm9vdEdyYXBoaWNzTGF5ZXItPnBhaW50
KGNvbnRleHQsIHZpZXctPnNpemUoKSwgdmlldy0+ZnJhbWVSZWN0KCksIEludFJlY3QoY2xpcC5i
b3VuZGluZ1JlY3QoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSwgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPm9wYWNpdHko
KSk7Ci0gICAgICAgICAgICBwYWludGVyLT5lbmROYXRpdmVQYWludGluZygpOwotICAgICAgICAg
ICAgcGFpbnRlci0+cmVzdG9yZSgpOwotICAgICAgICB9Ci0jZW5kaWYKKyAgICAgICAgcmVuZGVy
Q29tcG9zaXRlZExheWVycyhjb250ZXh0LCBJbnRSZWN0KGNsaXAuYm91bmRpbmdSZWN0KCkpKTsK
ICAgICB9CiAgICAgaWYgKGxheWVyICYgKFFXZWJGcmFtZTo6UGFuSWNvbkxheWVyIHwgUVdlYkZy
YW1lOjpTY3JvbGxCYXJMYXllcikpIHsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2ZWN0
b3Iuc2l6ZSgpOyArK2kpIHsKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3Au
aCBiL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaAppbmRleCA1NjYwYmQxLi42MzRlMjFiIDEw
MDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmgKKysrIGIvV2ViS2l0L3F0L0Fw
aS9xd2ViZnJhbWVfcC5oCkBAIC0zMyw2ICszMywxMCBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiVmlld3BvcnRBcmd1bWVudHMuaCIKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2luY2x1ZGUgInRleG1hcC9UZXh0dXJl
TWFwcGVyLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEZyYW1l
TG9hZGVyQ2xpZW50UXQ7CiAgICAgY2xhc3MgRnJhbWVWaWV3OwpAQCAtOTQsNiArOTgsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZW5kZXJGcm9tVGlsZWRCYWNraW5nU3RvcmUoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgUVJlZ2lvbiYgY2xpcCk7CiAjZW5kaWYKIAorI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIHZvaWQg
cmVuZGVyQ29tcG9zaXRlZExheWVycyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXApOworI2VuZGlmCiAgICAgUVdlYkZyYW1lICpx
OwogICAgIFF0OjpTY3JvbGxCYXJQb2xpY3kgaG9yaXpvbnRhbFNjcm9sbEJhclBvbGljeTsKICAg
ICBRdDo6U2Nyb2xsQmFyUG9saWN5IHZlcnRpY2FsU2Nyb2xsQmFyUG9saWN5OwpAQCAtMTA2LDYg
KzExMyw3IEBAIHB1YmxpYzoKICAgICBpbnQgbWFyZ2luSGVpZ2h0OwogI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQogICAgIFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJDb250ZW50TGF5ZXIqIHJvb3RHcmFwaGljc0xheWVyOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiB0ZXh0dXJlTWFwcGVyOwogI2VuZGlmCiAgICAgYm9vbCB6
b29tVGV4dE9ubHk7CiB9OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1dlYktp
dC9xdC9DaGFuZ2VMb2cKaW5kZXggMjM2YjA0ZS4uZDVhMGFmZCAxMDA2NDQKLS0tIGEvV2ViS2l0
L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTAtMTAtMjkgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVGV4bWFw
XSBbUXRdIFRleHR1cmUgbWFwcGVyIGluaXRpYWwgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MDcwCisKKyAgICAgICAgTWFr
ZSB0aGUgVGV4dHVyZU1hcHBlciBjbGFzcyBhIG1lbWJlciBvZiBRV2ViRnJhbWVQcml2YXRlLCBp
bnN0ZWFkIG9mIHJlY3JlYXRpbmcgaXQgZm9yIGVhY2ggcGFpbnQuCisgICAgICAgIFRoaXMgYWxs
b3dzIHVzaW5nIFRleHR1cmVNYXBwZXIgd2l0aG91dCBhbiBhY3RpdmUgUVBhaW50ZXIsIGFuZCBh
bGxvd3MgY2xlYW51cCBvZiByZXNvdXJjZXMgd2hpbGUgYSBRUGFpbnRlciBpcyBub3QgYWN0aXZl
LgorCisgICAgICAgICogQXBpL3F3ZWJmcmFtZS5jcHA6CisgICAgICAgIChRV2ViRnJhbWVQcml2
YXRlOjpyZW5kZXJGcm9tVGlsZWRCYWNraW5nU3RvcmUpOgorICAgICAgICAoUVdlYkZyYW1lUHJp
dmF0ZTo6cmVuZGVyQ29tcG9zaXRlZExheWVycyk6CisgICAgICAgIChRV2ViRnJhbWVQcml2YXRl
OjpyZW5kZXJSZWxhdGl2ZUNvb3Jkcyk6CisgICAgICAgICogQXBpL3F3ZWJmcmFtZV9wLmg6CisK
IDIwMTAtMTAtMjggIE5vYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFyaXlhIEhpZGF5YXQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72374</attachid>
            <date>2010-10-29 12:51:26 -0700</date>
            <delta_ts>2010-10-30 08:29:16 -0700</delta_ts>
            <desc>Patch: small refactor to allow WebKit2 and remove globals</desc>
            <filename>patch-47070-nocontext-3.diff</filename>
            <type>text/plain</type>
            <size>36788</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZWU2OTdkNi4uYmNjN2MxOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxMC0xMC0yOSAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5p
dGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDcwNzAKKworICAgICAgICBTb21lIHJlZmFjdG9yIGZvciB0ZXhtYXAgdG8g
ZW5hYmxlIFdlYktpdDI6IHJlbW92ZSBnbG9iYWxzLCBhbmQgYWxsb3cgVGV4dHVyZU1hcHBlciB0
byBleGlzdCB3aXRob3V0IGEgR3JhcGhpY3NDb250ZXh0LgorICAgICAgICBUaGlzIHdpbGwgYWxs
b3cgcmVuZGVyaW5nIHRoZSBUZXh0dXJlTWFwcGVyTm9kZSB0cmVlIHdpdGhvdXQgYW4gYWN0aXZl
IFFQYWludGVyLCBpbnRvIHRoZSBjdXJyZW50IEdMIGNvbnRleHQuCisgICAgICAgIE1vc3Qgb2Yg
dGhlIGNoYW5nZXMgc2ltcGx5IG1vdmUgdGhlIGdsb2JhcyBpbiBUZXh0dXJlTWFwcGVyR0wgaW50
byBtZW1iZXJzIG9mIHRoYXQgY2xhc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBPbGQgdGVz
dHMgaW4gTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcgY292ZXIgdGhpcy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6U2hhZGVySW5mbzo6Z2V0VW5pZm9ybUxvY2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTFByaXZhdGU6OlNoYWRlcklu
Zm86OmNyZWF0ZVNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckdMUHJpdmF0ZTo6RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZXBvc2l0b3J5OjpmaW5kT3JDcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6RGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2VSZXBvc2l0b3J5OjpkZXJlZik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0xQcml2YXRlOjpEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnk6OkRp
cmVjdGx5Q29tcG9zaXRlZEltYWdlUmVwb3NpdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0xQcml2YXRlOjpEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnk6On5E
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckdMUHJpdmF0ZTo6VGV4dHVyZU1hcHBlckdMUHJpdmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcFRleHR1cmVHTDo6c2V0Q29udGVudHNUb0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcFRleHR1cmVHTDo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
R0w6On5UZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjpvYnRhaW5DdXJyZW50Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
R0w6OmJpbmRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6cGFp
bnRUb1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZVRl
eHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVy
R0wuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclF0OjpUZXh0dXJlTWFwcGVyUXQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclF0OjpzZXRHcmFwaGljc0NvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJOb2RlOjp1cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpzZXRHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlcjo6c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpzZXRUZXh0RHJhd2luZ01vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjp0ZXh0RHJhd2luZ01vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6VGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ29udGVudExheWVyOjpwYWludCk6CisKIDIwMTAt
MTAtMjkgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAKaW5kZXggOTY2NjU2Yi4u
ZGI2NjI5NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4
dHVyZU1hcHBlckdMLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9U
ZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0zMCw4ICszMCwxMiBAQAogI2lmIGRlZmluZWQoVEVYTUFQ
X09QRU5HTF9FU18yKQogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogI2VsaWYgT1MoTUFDX09TX1gp
CisjaW5jbHVkZSA8QUdML2FnbC5oPgogI2luY2x1ZGUgPGdsLmg+CiAjZWxzZQorI2lmIE9TKFVO
SVgpCisjaW5jbHVkZSA8R0wvZ2x4Lmg+CisjZW5kaWYKICNpbmNsdWRlIDxHTC9nbC5oPgogI2Vu
ZGlmCiAKQEAgLTc0LDYgKzc4LDE2IEBAIGV4dGVybiAiQyIgewogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKKyNpZiBPUyhNQUNfT1NfWCkKK3R5cGVkZWYgQUdMQ29udGV4dCBHTENvbnRleHRIYW5k
bGU7CisjZWxpZiBPUyhVTklYKQorc3RydWN0IEdMWENvbnRleHRIYW5kbGUgeworICAgIERyYXdh
YmxlIGRyYXdhYmxlOworICAgIEdMWENvbnRleHQgY29udGV4dDsKK307Cit0eXBlZGVmIEdMWENv
bnRleHRIYW5kbGUgR0xDb250ZXh0SGFuZGxlOworI2VuZGlmCisKIGlubGluZSBzdGF0aWMgdm9p
ZCBkZWJ1Z0dMQ29tbWFuZChjb25zdCBjaGFyKiBjb21tYW5kLCBpbnQgbGluZSkKIHsKICAgICBj
b25zdCBHTGVudW0gZXJyID0gZ2xHZXRFcnJvcigpOwpAQCAtOTAsNiArMTA0LDEyMSBAQCBpbmxp
bmUgc3RhdGljIHZvaWQgZGVidWdHTENvbW1hbmQoY29uc3QgY2hhciogY29tbWFuZCwgaW50IGxp
bmUpCiAjZGVmaW5lIEdMX0NNRCh4KSB4CiAjZW5kaWYKIAorc3RydWN0IFRleHR1cmVNYXBwZXJH
TFByaXZhdGUgeworICAgIHN0YXRpYyBzdHJ1Y3QgU2hhZGVySW5mbyB7CisgICAgICAgIGVudW0g
U2hhZGVyUHJvZ3JhbUluZGV4IHsKKyAgICAgICAgICAgIFNpbXBsZVByb2dyYW0sCisgICAgICAg
ICAgICBPcGFjaXR5QW5kTWFza1Byb2dyYW0sCisgICAgICAgICAgICBUYXJnZXRQcm9ncmFtLAor
ICAgICAgICAgICAgTnVtUHJvZ3JhbXMKKyAgICAgICAgfTsKKworICAgICAgICBlbnVtIFNoYWRl
clZhcmlhYmxlSW5kZXggeworICAgICAgICAgICAgSW5NYXRyaXhWYXJpYWJsZSwKKyAgICAgICAg
ICAgIEluU291cmNlTWF0cml4VmFyaWFibGUsCisgICAgICAgICAgICBJbk1hc2tNYXRyaXhWYXJp
YWJsZSwKKyAgICAgICAgICAgIEluVmVydGV4VmFyaWFibGUsCisKKyAgICAgICAgICAgIE9wYWNp
dHlWYXJpYWJsZSwKKyAgICAgICAgICAgIFNvdXJjZVRleHR1cmVWYXJpYWJsZSwKKyAgICAgICAg
ICAgIE1hc2tUZXh0dXJlVmFyaWFibGUsCisgICAgICAgICAgICBOdW1WYXJpYWJsZXMKKyAgICAg
ICAgfTsKKworICAgICAgICBzdHJ1Y3QgUHJvZ3JhbUluZm8geworICAgICAgICAgICAgR0x1aW50
IGlkOworICAgICAgICAgICAgR0xpbnQgdmFyc1tOdW1WYXJpYWJsZXNdOworICAgICAgICB9Owor
CisgICAgICAgIEdMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihTaGFkZXJQcm9ncmFtSW5kZXggcHJv
ZywgU2hhZGVyVmFyaWFibGVJbmRleCB2YXIsIGNvbnN0IGNoYXIqIG5hbWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBwcm9ncmFtc1twcm9nXS52YXJzW3Zhcl0gPSBnbEdldFVuaWZv
cm1Mb2NhdGlvbihwcm9ncmFtc1twcm9nXS5pZCwgbmFtZSk7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIGNyZWF0ZVNoYWRlclByb2dyYW0oY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNl
LCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSwgU2hhZGVyUHJvZ3JhbUluZGV4IGlu
ZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBHTHVpbnQgdmVydGV4U2hhZGVyID0gZ2xDcmVh
dGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7CisgICAgICAgICAgICBHTHVpbnQgZnJhZ21lbnRT
aGFkZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9GUkFHTUVOVF9TSEFERVIpOworICAgICAgICAgICAg
R0xfQ01EKGdsU2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgMSwgJnZlcnRleFNoYWRlclNvdXJj
ZSwgMCkpCisgICAgICAgICAgICBHTF9DTUQoZ2xTaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIs
IDEsICZmcmFnbWVudFNoYWRlclNvdXJjZSwgMCkpCisgICAgICAgICAgICBHTHVpbnQgcHJvZ3Jh
bUlEID0gZ2xDcmVhdGVQcm9ncmFtKCk7CisgICAgICAgICAgICBHTF9DTUQoZ2xDb21waWxlU2hh
ZGVyKHZlcnRleFNoYWRlcikpCisgICAgICAgICAgICBHTF9DTUQoZ2xDb21waWxlU2hhZGVyKGZy
YWdtZW50U2hhZGVyKSkKKyAgICAgICAgICAgIEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9ncmFt
SUQsIHZlcnRleFNoYWRlcikpCisgICAgICAgICAgICBHTF9DTUQoZ2xBdHRhY2hTaGFkZXIocHJv
Z3JhbUlELCBmcmFnbWVudFNoYWRlcikpCisgICAgICAgICAgICBHTF9DTUQoZ2xCaW5kQXR0cmli
TG9jYXRpb24ocHJvZ3JhbUlELCAwLCAiSW5WZXJ0ZXgiKSkKKyAgICAgICAgICAgIEdMX0NNRChn
bExpbmtQcm9ncmFtKHByb2dyYW1JRCkpCisgICAgICAgICAgICBwcm9ncmFtc1tpbmRleF0uaWQg
PSBwcm9ncmFtSUQ7CisgICAgICAgICAgICBjaGFyIGluZm9Mb2dbMTAyNF07CisgICAgICAgICAg
ICBpbnQgbGVuOworICAgICAgICAgICAgR0xfQ01EKGdsR2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3Jh
bUlELCAxMDI0LCAmbGVuLCBpbmZvTG9nKSk7CisgICAgICAgIH0KKworICAgICAgICBQcm9ncmFt
SW5mbyBwcm9ncmFtc1tOdW1Qcm9ncmFtc107CisKKyAgICB9IHNoYWRlckluZm87CisKKyAgICBz
dHJ1Y3QgRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZXBvc2l0b3J5IHsKKyAgICAgICAgc3RydWN0
IEVudHJ5IHsKKyAgICAgICAgICAgIEdMdWludCB0ZXh0dXJlOworICAgICAgICAgICAgaW50IHJl
ZkNvdW50OworICAgICAgICB9OworICAgICAgICBIYXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBFbnRy
eT4gaW1hZ2VUb1RleHR1cmU7CisKKyAgICAgICAgR0x1aW50IGZpbmRPckNyZWF0ZShOYXRpdmVJ
bWFnZVB0ciBpbWFnZSwgYm9vbCYgZm91bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEhhc2hN
YXA8TmF0aXZlSW1hZ2VQdHIsIEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5m
aW5kKGltYWdlKTsKKyAgICAgICAgICAgIGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICBpZiAo
aXQgIT0gaW1hZ2VUb1RleHR1cmUuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBpdC0+c2Vjb25k
LnJlZkNvdW50Kys7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIHJldHVybiBpdC0+c2Vjb25kLnRleHR1cmU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBFbnRyeSBlbnRyeTsKKyAgICAgICAgICAgIEdMX0NNRChnbEdlblRleHR1cmVzKDEsICZlbnRy
eS50ZXh0dXJlKSk7CisgICAgICAgICAgICBlbnRyeS5yZWZDb3VudCA9IDE7CisgICAgICAgICAg
ICBpbWFnZVRvVGV4dHVyZS5hZGQoaW1hZ2UsIGVudHJ5KTsKKyAgICAgICAgICAgIHJldHVybiBl
bnRyeS50ZXh0dXJlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBkZXJlZihOYXRpdmVJbWFn
ZVB0ciBpbWFnZSkKKyAgICAgICAgeworICAgICAgICAgICAgSGFzaE1hcDxOYXRpdmVJbWFnZVB0
ciwgRW50cnk+OjppdGVyYXRvciBpdCA9IGltYWdlVG9UZXh0dXJlLmZpbmQoaW1hZ2UpOworICAg
ICAgICAgICAgaWYgKGl0ICE9IGltYWdlVG9UZXh0dXJlLmVuZCgpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGl0LT5zZWNvbmQucmVmQ291bnQgPCAyKSB7CisgICAgICAgICAgICAgICAgICAgIGlt
YWdlVG9UZXh0dXJlLnJlbW92ZShpdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIERpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVwb3Np
dG9yeSgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIH5EaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZVJlcG9zaXRvcnkoKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKEhhc2hNYXA8
TmF0aXZlSW1hZ2VQdHIsIEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5iZWdp
bigpOyBpdCAhPSBpbWFnZVRvVGV4dHVyZS5lbmQoKTsgKytpdCkgeworICAgICAgICAgICAgICAg
IEdMdWludCB0ZXh0dXJlID0gaXQtPnNlY29uZC50ZXh0dXJlOworICAgICAgICAgICAgICAgIGlm
ICh0ZXh0dXJlKQorICAgICAgICAgICAgICAgICAgICBHTF9DTUQoZ2xEZWxldGVUZXh0dXJlcygx
LCAmdGV4dHVyZSkpOworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICB9IGRpcmVjdGx5
Q29tcG9zaXRlZEltYWdlczsKKworICAgIFRleHR1cmVNYXBwZXJHTFByaXZhdGUoKQorICAgICAg
ICA6IGN1cnJlbnRQcm9ncmFtKFRleHR1cmVNYXBwZXJHTFByaXZhdGU6OlNoYWRlckluZm86OlRh
cmdldFByb2dyYW0pCisgICAgeyB9CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcm9qZWN0
aW9uTWF0cml4OworICAgIGludCBjdXJyZW50UHJvZ3JhbTsKKyAgICBHTENvbnRleHRIYW5kbGUg
Y29udGV4dEhhbmRsZTsKK307CisKK1RleHR1cmVNYXBwZXJHTFByaXZhdGU6OlNoYWRlckluZm8g
VGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6c2hhZGVySW5mbzsKKwogY2xhc3MgQml0bWFwVGV4dHVy
ZUdMIDogcHVibGljIEJpdG1hcFRleHR1cmUgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBk
ZXN0cm95KCk7CkBAIC0xMTEsNiArMjQwLDcgQEAgcHJpdmF0ZToKICAgICBHTHVpbnQgbV9mYm87
CiAgICAgSW50U2l6ZSBtX2FjdHVhbFNpemU7CiAgICAgYm9vbCBtX3N1cmZhY2VOZWVkc1Jlc2V0
OworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyR0w+IG1fdGV4dHVyZU1hcHBlcjsKICAgICBCaXRt
YXBUZXh0dXJlR0woKQogICAgICAgICA6IG1faWQoMCkKICAgICAgICAgLCBtX2ltYWdlKDApCkBA
IC0xMjMsNzIgKzI1MywyMSBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFw
cGVyR0w7CiB9OwogCi1zdGF0aWMgc3RydWN0IFRleG1hcFNoYWRlckluZm8gewotICAgIGVudW0g
U2hhZGVyUHJvZ3JhbUluZGV4IHsKLSAgICAgICAgU2ltcGxlUHJvZ3JhbSwKLSAgICAgICAgT3Bh
Y2l0eUFuZE1hc2tQcm9ncmFtLAotICAgICAgICBUYXJnZXRQcm9ncmFtLAotICAgICAgICBOdW1Q
cm9ncmFtcwotICAgIH07Ci0KLSAgICBlbnVtIFNoYWRlclZhcmlhYmxlSW5kZXggewotICAgICAg
ICBJbk1hdHJpeFZhcmlhYmxlLAotICAgICAgICBJblNvdXJjZU1hdHJpeFZhcmlhYmxlLAotICAg
ICAgICBJbk1hc2tNYXRyaXhWYXJpYWJsZSwKLSAgICAgICAgSW5WZXJ0ZXhWYXJpYWJsZSwKIAot
ICAgICAgICBPcGFjaXR5VmFyaWFibGUsCi0gICAgICAgIFNvdXJjZVRleHR1cmVWYXJpYWJsZSwK
LSAgICAgICAgTWFza1RleHR1cmVWYXJpYWJsZSwKLSAgICAgICAgTnVtVmFyaWFibGVzCi0gICAg
fTsKLQotICAgIHN0cnVjdCBQcm9ncmFtSW5mbyB7Ci0gICAgICAgIEdMdWludCBpZDsKLSAgICAg
ICAgR0xpbnQgdmFyc1tOdW1WYXJpYWJsZXNdOwotICAgIH07Ci0KLSAgICBHTGludCBnZXRVbmlm
b3JtTG9jYXRpb24oU2hhZGVyUHJvZ3JhbUluZGV4IHByb2csIFNoYWRlclZhcmlhYmxlSW5kZXgg
dmFyLCBjb25zdCBjaGFyKiBuYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHByb2dyYW1zW3By
b2ddLnZhcnNbdmFyXSA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1zW3Byb2ddLmlkLCBu
YW1lKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNyZWF0ZVNoYWRlclByb2dyYW0oY29uc3QgY2hhciog
dmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSwgU2hh
ZGVyUHJvZ3JhbUluZGV4IGluZGV4KQotICAgIHsKLSAgICAgICAgR0x1aW50IHZlcnRleFNoYWRl
ciA9IGdsQ3JlYXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIpOwotICAgICAgICBHTHVpbnQgZnJh
Z21lbnRTaGFkZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9GUkFHTUVOVF9TSEFERVIpOwotICAgICAg
ICBHTF9DTUQoZ2xTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAmdmVydGV4U2hhZGVyU291
cmNlLCAwKSkKLSAgICAgICAgR0xfQ01EKGdsU2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCAx
LCAmZnJhZ21lbnRTaGFkZXJTb3VyY2UsIDApKQotICAgICAgICBHTHVpbnQgcHJvZ3JhbUlEID0g
Z2xDcmVhdGVQcm9ncmFtKCk7Ci0gICAgICAgIEdMX0NNRChnbENvbXBpbGVTaGFkZXIodmVydGV4
U2hhZGVyKSkKLSAgICAgICAgR0xfQ01EKGdsQ29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcikp
Ci0gICAgICAgIEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIHZlcnRleFNoYWRlcikp
Ci0gICAgICAgIEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZyYWdtZW50U2hhZGVy
KSkKLSAgICAgICAgR0xfQ01EKGdsQmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgMCwgIklu
VmVydGV4IikpCi0gICAgICAgIEdMX0NNRChnbExpbmtQcm9ncmFtKHByb2dyYW1JRCkpCi0gICAg
ICAgIHByb2dyYW1zW2luZGV4XS5pZCA9IHByb2dyYW1JRDsKLSAgICAgICAgY2hhciBpbmZvTG9n
WzEwMjRdOwotICAgICAgICBpbnQgbGVuOwotICAgICAgICBHTF9DTUQoZ2xHZXRQcm9ncmFtSW5m
b0xvZyhwcm9ncmFtSUQsIDEwMjQsICZsZW4sIGluZm9Mb2cpKTsKLSAgICB9Ci0KLSAgICBQcm9n
cmFtSW5mbyBwcm9ncmFtc1tOdW1Qcm9ncmFtc107Ci0KLX0gZ1NoYWRlckluZm87CiAKICNkZWZp
bmUgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKHByb2csIHZhcikgXAotICAgICAgICAg
ICAgaWYgKGdTaGFkZXJJbmZvLmdldFVuaWZvcm1Mb2NhdGlvbihUZXhtYXBTaGFkZXJJbmZvOjpw
cm9nIyNQcm9ncmFtLCBUZXhtYXBTaGFkZXJJbmZvOjp2YXIjI1ZhcmlhYmxlLCAjdmFyKSA8IDAp
IFwKKyAgICAgICAgICAgIGlmIChwdnQtPnNoYWRlckluZm8uZ2V0VW5pZm9ybUxvY2F0aW9uKFRl
eHR1cmVNYXBwZXJHTFByaXZhdGU6OlNoYWRlckluZm86OnByb2cjI1Byb2dyYW0sIFRleHR1cmVN
YXBwZXJHTFByaXZhdGU6OlNoYWRlckluZm86OnZhciMjVmFyaWFibGUsICN2YXIpIDwgMCkgXAog
ICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkbid0IGZpbmQgdmFyaWFibGUgIiN2
YXIiIGluIHByb2dyYW0gIiNwcm9nIlxuIik7Ci0jZGVmaW5lIFRFWE1BUF9CVUlMRF9TSEFERVIo
cHJvZ3JhbSkgZ1NoYWRlckluZm8uY3JlYXRlU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3Vy
Y2UjI3Byb2dyYW0sIGZyYWdtZW50U2hhZGVyU291cmNlIyNwcm9ncmFtLCBUZXhtYXBTaGFkZXJJ
bmZvOjpwcm9ncmFtIyNQcm9ncmFtKTsKKyNkZWZpbmUgVEVYTUFQX0JVSUxEX1NIQURFUihwcm9n
cmFtKSBwdnQtPnNoYWRlckluZm8uY3JlYXRlU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3Vy
Y2UjI3Byb2dyYW0sIGZyYWdtZW50U2hhZGVyU291cmNlIyNwcm9ncmFtLCBUZXh0dXJlTWFwcGVy
R0xQcml2YXRlOjpTaGFkZXJJbmZvOjpwcm9ncmFtIyNQcm9ncmFtKTsKIAotVGV4dHVyZU1hcHBl
ckdMOjpUZXh0dXJlTWFwcGVyR0woR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQotICAgIDogVGV4
dHVyZU1hcHBlcihjb250ZXh0KQotICAgICwgbV9jdXJyZW50UHJvZ3JhbShUZXhtYXBTaGFkZXJJ
bmZvOjpUYXJnZXRQcm9ncmFtKQorVGV4dHVyZU1hcHBlckdMOjpUZXh0dXJlTWFwcGVyR0woKQor
ICAgIDogcHZ0KG5ldyBUZXh0dXJlTWFwcGVyR0xQcml2YXRlKQogewotICAgIHN0YXRpYyBib29s
IHNoYWRlcnNDb21waWxlZCA9IGZhbHNlOwotICAgIGlmIChzaGFkZXJzQ29tcGlsZWQpCisgICAg
b2J0YWluQ3VycmVudENvbnRleHQoKTsKKyAgICBzdGF0aWMgYm9vbCBjb21waWxlZFNoYWRlcnMg
PSBmYWxzZTsKKyAgICBpZiAoY29tcGlsZWRTaGFkZXJzKQogICAgICAgICByZXR1cm47Ci0gICAg
c2hhZGVyc0NvbXBpbGVkID0gdHJ1ZTsKKyAgICBjb21waWxlZFNoYWRlcnMgPSB0cnVlOwogI2lm
bmRlZiBURVhNQVBfT1BFTkdMX0VTMgogI2RlZmluZSBPRVMyX1BSRUNJU0lPTl9ERUZJTklUSU9O
UyBcCiAgICAgIiNkZWZpbmUgbG93cFxuI2RlZmluZSBoaWdocFxuIgpAQCAtMjg1LDE4ICszNjQs
MTggQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1
cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHQKIAogICAgIGNvbnN0IEJpdG1hcFRleHR1cmVH
TCYgdGV4dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4odGV4dHVy
ZSk7CiAKLSAgICBUZXhtYXBTaGFkZXJJbmZvOjpTaGFkZXJQcm9ncmFtSW5kZXggcHJvZ3JhbTsK
KyAgICBUZXh0dXJlTWFwcGVyR0xQcml2YXRlOjpTaGFkZXJJbmZvOjpTaGFkZXJQcm9ncmFtSW5k
ZXggcHJvZ3JhbTsKICAgICBpZiAobWFza1RleHR1cmUpCi0gICAgICAgIHByb2dyYW0gPSBUZXht
YXBTaGFkZXJJbmZvOjpPcGFjaXR5QW5kTWFza1Byb2dyYW07CisgICAgICAgIHByb2dyYW0gPSBU
ZXh0dXJlTWFwcGVyR0xQcml2YXRlOjpTaGFkZXJJbmZvOjpPcGFjaXR5QW5kTWFza1Byb2dyYW07
CiAgICAgZWxzZQotICAgICAgICBwcm9ncmFtID0gVGV4bWFwU2hhZGVySW5mbzo6U2ltcGxlUHJv
Z3JhbTsKKyAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJHTFByaXZhdGU6OlNoYWRlcklu
Zm86OlNpbXBsZVByb2dyYW07CiAKLSAgICBjb25zdCBUZXhtYXBTaGFkZXJJbmZvOjpQcm9ncmFt
SW5mbyYgcHJvZ3JhbUluZm8gPSBnU2hhZGVySW5mby5wcm9ncmFtc1twcm9ncmFtXTsKLSAgICBp
ZiAobV9jdXJyZW50UHJvZ3JhbSAhPSBwcm9ncmFtKSB7CisgICAgY29uc3QgVGV4dHVyZU1hcHBl
ckdMUHJpdmF0ZTo6U2hhZGVySW5mbzo6UHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvID0gcHZ0LT5z
aGFkZXJJbmZvLnByb2dyYW1zW3Byb2dyYW1dOworICAgIGlmIChwdnQtPmN1cnJlbnRQcm9ncmFt
ICE9IHByb2dyYW0pIHsKICAgICAgICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShwcm9ncmFtSW5mby5p
ZCkpCi0gICAgICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShnU2hhZGVySW5m
by5wcm9ncmFtc1ttX2N1cnJlbnRQcm9ncmFtXS52YXJzW1RleG1hcFNoYWRlckluZm86OkluVmVy
dGV4VmFyaWFibGVdKSkKLSAgICAgICAgbV9jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07Ci0gICAg
ICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW1JbmZvLnZhcnNbVGV4
bWFwU2hhZGVySW5mbzo6SW5WZXJ0ZXhWYXJpYWJsZV0pKQorICAgICAgICBHTF9DTUQoZ2xEaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkocHZ0LT5zaGFkZXJJbmZvLnByb2dyYW1zW3B2dC0+Y3VycmVu
dFByb2dyYW1dLnZhcnNbVGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6U2hhZGVySW5mbzo6SW5WZXJ0
ZXhWYXJpYWJsZV0pKQorICAgICAgICBwdnQtPmN1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTsKKyAg
ICAgICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbUluZm8udmFyc1tU
ZXh0dXJlTWFwcGVyR0xQcml2YXRlOjpTaGFkZXJJbmZvOjpJblZlcnRleFZhcmlhYmxlXSkpCiAg
ICAgfQogCiAgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKSkKQEAgLTMwOCw3ICsz
ODcsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4
dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdAogICAgIGNvbnN0IEdMZmxvYXQgdW5pdFJl
Y3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKICAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRy
aWJQb2ludGVyKDAsIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdW5pdFJlY3QpKQogCi0gICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgobV9wcm9q
ZWN0aW9uTWF0cml4KS5tdWx0TGVmdChtb2RlbFZpZXdNYXRyaXgpLm11bHRMZWZ0KFRyYW5zZm9y
bWF0aW9uTWF0cml4KAorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9y
bWF0aW9uTWF0cml4KHB2dC0+cHJvamVjdGlvbk1hdHJpeCkubXVsdExlZnQobW9kZWxWaWV3TWF0
cml4KS5tdWx0TGVmdChUcmFuc2Zvcm1hdGlvbk1hdHJpeCgKICAgICAgICAgICAgIHRhcmdldFJl
Y3Qud2lkdGgoKSwgMCwgMCwgMCwKICAgICAgICAgICAgIDAsIHRhcmdldFJlY3QuaGVpZ2h0KCks
IDAsIDAsCiAgICAgICAgICAgICAwLCAwLCAxLCAwLApAQCAtMzI0LDEwICs0MDMsMTAgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1
cmUsIGNvbnN0IEludFJlY3QmIHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCB0ZXh0dXJlR0wubV9yZWxhdGl2ZVNpemUuaGVpZ2h0KCksIDAsIDAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAxfTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0
cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5NYXRyaXhWYXJpYWJs
ZV0sIDEsIEdMX0ZBTFNFLCBtNCkpCi0gICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9n
cmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OkluU291cmNlTWF0cml4VmFyaWFibGVdLCAx
LCBHTF9GQUxTRSwgbTRzcmMpKQotICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtSW5mby52
YXJzW1RleG1hcFNoYWRlckluZm86OlNvdXJjZVRleHR1cmVWYXJpYWJsZV0sIDApKQotICAgIEdM
X0NNRChnbFVuaWZvcm0xZihwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86Ok9wYWNp
dHlWYXJpYWJsZV0sIG9wYWNpdHkpKQorICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJv
Z3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xQcml2YXRlOjpTaGFkZXJJbmZvOjpJbk1hdHJp
eFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00KSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4
NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6U2hhZGVySW5mbzo6
SW5Tb3VyY2VNYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNHNyYykpCisgICAgR0xfQ01E
KGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6U2hh
ZGVySW5mbzo6U291cmNlVGV4dHVyZVZhcmlhYmxlXSwgMCkpCisgICAgR0xfQ01EKGdsVW5pZm9y
bTFmKHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6U2hhZGVySW5mbzo6
T3BhY2l0eVZhcmlhYmxlXSwgb3BhY2l0eSkpCiAKICAgICBpZiAobWFza1RleHR1cmUgJiYgbWFz
a1RleHR1cmUtPmlzVmFsaWQoKSkgewogICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wqIG1h
c2tUZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wqPihtYXNrVGV4
dHVyZSk7CkBAIC0zMzcsOCArNDE2LDggQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0
dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgbWFza1RleHR1cmVHTC0+bV9y
ZWxhdGl2ZVNpemUuaGVpZ2h0KCksIDAsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIDAsIDEsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsIDAsIDAsIDF9OwotICAgICAgICBnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3Jh
bUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJbk1hc2tNYXRyaXhWYXJpYWJsZV0sIDEsIEdM
X0ZBTFNFLCBtNG1hc2spOwotICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbUluZm8u
dmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpNYXNrVGV4dHVyZVZhcmlhYmxlXSwgMSkpCisgICAgICAg
IGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleHR1cmVNYXBwZXJHTFByaXZh
dGU6OlNoYWRlckluZm86OkluTWFza01hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00bWFz
ayk7CisgICAgICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtSW5mby52YXJzW1RleHR1cmVN
YXBwZXJHTFByaXZhdGU6OlNoYWRlckluZm86Ok1hc2tUZXh0dXJlVmFyaWFibGVdLCAxKSkKICAg
ICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpCiAgICAgfQogCkBAIC00
MDIsNDMgKzQ4MSw2IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjplbmRQYWludCgpCiAgICAgbV9i
dWZmZXIuY2xlYXIoKTsKIH0KIAotc3RydWN0IFRleG1hcEdMU2hhZGVyVGV4dHVyZXMgewotICAg
IHN0cnVjdCBFbnRyeSB7Ci0gICAgICAgIEdMdWludCB0ZXh0dXJlOwotICAgICAgICBpbnQgcmVm
Q291bnQ7Ci0gICAgfTsKLSAgICBIYXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBFbnRyeT4gaW1hZ2VU
b1RleHR1cmU7Ci0gICAgR0x1aW50IGZpbmRPckNyZWF0ZShOYXRpdmVJbWFnZVB0ciBpbWFnZSwg
Ym9vbCYgZm91bmQpCi0gICAgewotICAgICAgICBIYXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBFbnRy
eT46Oml0ZXJhdG9yIGl0ID0gaW1hZ2VUb1RleHR1cmUuZmluZChpbWFnZSk7Ci0gICAgICAgIGZv
dW5kID0gZmFsc2U7Ci0gICAgICAgIGlmIChpdCAhPSBpbWFnZVRvVGV4dHVyZS5lbmQoKSkgewot
ICAgICAgICAgICAgaXQtPnNlY29uZC5yZWZDb3VudCsrOwotICAgICAgICAgICAgZm91bmQgPSB0
cnVlOwotICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQudGV4dHVyZTsKLSAgICAgICAgfQot
ICAgICAgICBFbnRyeSBlbnRyeTsKLSAgICAgICAgR0xfQ01EKGdsR2VuVGV4dHVyZXMoMSwgJmVu
dHJ5LnRleHR1cmUpKTsKLSAgICAgICAgZW50cnkucmVmQ291bnQgPSAxOwotICAgICAgICBpbWFn
ZVRvVGV4dHVyZS5hZGQoaW1hZ2UsIGVudHJ5KTsKLSAgICAgICAgcmV0dXJuIGVudHJ5LnRleHR1
cmU7Ci0gICAgfQotCi0gICAgYm9vbCBkZXJlZihOYXRpdmVJbWFnZVB0ciBpbWFnZSkKLSAgICB7
Ci0gICAgICAgIEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIsIEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBp
bWFnZVRvVGV4dHVyZS5maW5kKGltYWdlKTsKLSAgICAgICAgaWYgKGl0ICE9IGltYWdlVG9UZXh0
dXJlLmVuZCgpKSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5yZWZDb3VudCA8IDIpIHsK
LSAgICAgICAgICAgICAgICBpbWFnZVRvVGV4dHVyZS5yZW1vdmUoaXQpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci19OwotCi1zdGF0aWMgVGV4bWFwR0xTaGFkZXJUZXh0dXJlcyBnVGV4
dHVyZVJlcG9zaXRvcnk7Ci0KIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpzZXRDb250ZW50c1RvSW1h
Z2UoSW1hZ2UqIGltYWdlKQogewogICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlID0gaW1h
Z2UgPyBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSA6IDA7CkBAIC00NTEsNyAr
NDkzLDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSog
aW1hZ2UpCiAgICAgaWYgKG5hdGl2ZUltYWdlID09IG1faW1hZ2UpCiAgICAgICAgIHJldHVybjsK
ICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgR0x1aW50IG5ld1RleHR1cmVJRCA9IGdUZXh0
dXJlUmVwb3NpdG9yeS5maW5kT3JDcmVhdGUobmF0aXZlSW1hZ2UsIGZvdW5kKTsKKyAgICBHTHVp
bnQgbmV3VGV4dHVyZUlEID0gbV90ZXh0dXJlTWFwcGVyLT5wdnQtPmRpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlcy5maW5kT3JDcmVhdGUobmF0aXZlSW1hZ2UsIGZvdW5kKTsKICAgICBpZiAobmV3VGV4
dHVyZUlEICE9IG1faWQpIHsKICAgICAgICAgZGVzdHJveSgpOwogICAgICAgICBtX2lkID0gbmV3
VGV4dHVyZUlEOwpAQCAtNDY3LDcgKzUwOSw3IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpzZXRD
b250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQogCiB2b2lkIEJpdG1hcFRleHR1cmVHTDo6ZGVz
dHJveSgpCiB7Ci0gICAgaWYgKG1faWQgJiYgKCFtX2ltYWdlIHx8ICFnVGV4dHVyZVJlcG9zaXRv
cnkuZGVyZWYobV9pbWFnZSkpKQorICAgIGlmIChtX2lkICYmICghbV9pbWFnZSB8fCAhbV90ZXh0
dXJlTWFwcGVyLT5wdnQtPmRpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5kZXJlZihtX2ltYWdlKSkp
CiAgICAgICAgIEdMX0NNRChnbERlbGV0ZVRleHR1cmVzKDEsICZtX2lkKSkKICAgICBpZiAobV9m
Ym8pCiAgICAgICAgIEdMX0NNRChnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pKQpAQCAt
NDk2LDggKzUzOCwzMiBAQCBzdGF0aWMgaW5saW5lIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNyZWF0
ZVByb2plY3Rpb25NYXRyaXgoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAtMSwgZmxpcCA/IDEgOiAtMSwgMCwgMSk7CiB9CiAKLXZvaWQgVGV4
dHVyZU1hcHBlckdMOjpjbGVhbnVwKCkKK1RleHR1cmVNYXBwZXJHTDo6flRleHR1cmVNYXBwZXJH
TCgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZGVsZXRlIHB2dDsKK30KKwor
Ym9vbCBUZXh0dXJlTWFwcGVyR0w6Om1ha2VDb250ZXh0Q3VycmVudCgpCiB7CisjaWYgT1MoTUFD
X09TX1gpCisgICAgcmV0dXJuIGFnbFNldEN1cnJlbnRDb250ZXh0KHB2dC0+Y29udGV4dEhhbmRs
ZSk7CisjZWxpZiBPUyhVTklYKQorICAgIERpc3BsYXkqIGRpc3BsYXkgPSBYT3BlbkRpc3BsYXko
MCk7CisgICAgaWYgKCFkaXNwbGF5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IGdsWE1ha2VDdXJyZW50KGRpc3BsYXksIHB2dC0+Y29udGV4dEhhbmRsZS5kcmF3YWJsZSwgcHZ0
LT5jb250ZXh0SGFuZGxlLmNvbnRleHQpOworI2VuZGlmCit9CisKK3ZvaWQgVGV4dHVyZU1hcHBl
ckdMOjpvYnRhaW5DdXJyZW50Q29udGV4dCgpCit7CisjaWYgT1MoTUFDX09TX1gpCisgICAgcHZ0
LT5jb250ZXh0SGFuZGxlID0gYWdsR2V0Q3VycmVudENvbnRleHQoKTsKKyNlbGlmIE9TKFVOSVgp
CisgICAgcHZ0LT5jb250ZXh0SGFuZGxlLmRyYXdhYmxlID0gZ2xYR2V0Q3VycmVudERyYXdhYmxl
KCk7CisgICAgcHZ0LT5jb250ZXh0SGFuZGxlLmNvbnRleHQgPSBnbFhHZXRDdXJyZW50Q29udGV4
dCgpOworI2VuZGlmCiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiaW5kU3VyZmFjZShCaXRt
YXBUZXh0dXJlICpzdXJmYWNlUG9pbnRlcikKQEAgLTUyMyw3ICs1ODksNyBAQCB2b2lkIFRleHR1
cmVNYXBwZXJHTDo6YmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSAqc3VyZmFjZVBvaW50ZXIpCiAg
ICAgfQogCiAgICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwgc3VyZmFjZS0+c2l6ZSgpLndpZHRo
KCksIHN1cmZhY2UtPnNpemUoKS5oZWlnaHQoKSkpCi0gICAgbV9wcm9qZWN0aW9uTWF0cml4ID0g
bWF0cml4OworICAgIHB2dC0+cHJvamVjdGlvbk1hdHJpeCA9IG1hdHJpeDsKIH0KIAogdm9pZCBU
ZXh0dXJlTWFwcGVyR0w6OnNldENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTU0Myw4ICs2
MDksNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6cGFpbnRUb1RhcmdldChjb25zdCBCaXRtYXBU
ZXh0dXJlJiBhU3VyZmFjZSwgY29uc3QgSW50U2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAg
c3VyZmFjZS5tX2FjdHVhbFNpemUud2lkdGgoKSwgMCwgMCwgMCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsIHN1cmZhY2UubV9hY3R1YWxTaXplLmhlaWdodCgpLCAwLCAwLAogICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1cmZh
Y2Uub2Zmc2V0KCkueCgpLCBzdXJmYWNlLm9mZnNldCgpLnkoKSwgMCwgMQotICAgICAgICAgICAg
ICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1cmZhY2Uub2Zmc2V0KCkueCgpLCBzdXJm
YWNlLm9mZnNldCgpLnkoKSwgMCwgMSkKICAgICAgICAgICAgICk7CiAKICAgICBjb25zdCBHTGZs
b2F0IG00W10gPSB7CkBAIC01NjAsMTggKzYyNSwxOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6
cGFpbnRUb1RhcmdldChjb25zdCBCaXRtYXBUZXh0dXJlJiBhU3VyZmFjZSwgY29uc3QgSW50U2l6
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDF9OwogCiAg
ICAgLy8gV2UgYWxyZWFkeSBibGVuZGVkIHRoZSBhbHBoYSBpbjsgdGhlIHJlc3VsdCBpcyBwcmVt
dWx0aXBsaWVkLgotICAgIEdMX0NNRChnbFVzZVByb2dyYW0oZ1NoYWRlckluZm8ucHJvZ3JhbXNb
VGV4bWFwU2hhZGVySW5mbzo6VGFyZ2V0UHJvZ3JhbV0uaWQpKQorICAgIEdMX0NNRChnbFVzZVBy
b2dyYW0ocHZ0LT5zaGFkZXJJbmZvLnByb2dyYW1zW1RleHR1cmVNYXBwZXJHTFByaXZhdGU6OlNo
YWRlckluZm86OlRhcmdldFByb2dyYW1dLmlkKSkKICAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIDApKQogICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAsIHN1cmZh
Y2VTaXplLndpZHRoKCksIHN1cmZhY2VTaXplLmhlaWdodCgpKSkKICAgICBHTF9DTUQoZ2xEaXNh
YmxlKEdMX1NURU5DSUxfVEVTVCkpCi0gICAgY29uc3QgVGV4bWFwU2hhZGVySW5mbzo6UHJvZ3Jh
bUluZm8mIHByb2dyYW1JbmZvID0gZ1NoYWRlckluZm8ucHJvZ3JhbXNbVGV4bWFwU2hhZGVySW5m
bzo6VGFyZ2V0UHJvZ3JhbV07Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW1JbmZvLnZh
cnNbVGV4bWFwU2hhZGVySW5mbzo6T3BhY2l0eVZhcmlhYmxlXSwgb3BhY2l0eSkpCisgICAgY29u
c3QgVGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6U2hhZGVySW5mbzo6UHJvZ3JhbUluZm8mIHByb2dy
YW1JbmZvID0gcHZ0LT5zaGFkZXJJbmZvLnByb2dyYW1zW1RleHR1cmVNYXBwZXJHTFByaXZhdGU6
OlNoYWRlckluZm86OlRhcmdldFByb2dyYW1dOworICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9n
cmFtSW5mby52YXJzW1RleHR1cmVNYXBwZXJHTFByaXZhdGU6OlNoYWRlckluZm86Ok9wYWNpdHlW
YXJpYWJsZV0sIG9wYWNpdHkpKQogICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVS
RTApKQogICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHN1cmZhY2UubV9p
ZCkpCi0gICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVy
SW5mbzo6U291cmNlVGV4dHVyZVZhcmlhYmxlXSwgMCkpCi0gICAgR0xfQ01EKGdsRW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblZlcnRl
eFZhcmlhYmxlXSkpCi0gICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52
YXJzW1RleG1hcFNoYWRlckluZm86OkluTWF0cml4VmFyaWFibGVdLCAxLCBHTF9GQUxTRSwgbTQp
KQotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBT
aGFkZXJJbmZvOjpJblNvdXJjZU1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00c3JjKSkK
KyAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xQ
cml2YXRlOjpTaGFkZXJJbmZvOjpTb3VyY2VUZXh0dXJlVmFyaWFibGVdLCAwKSkKKyAgICBHTF9D
TUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtSW5mby52YXJzW1RleHR1cmVNYXBw
ZXJHTFByaXZhdGU6OlNoYWRlckluZm86OkluVmVydGV4VmFyaWFibGVdKSkKKyAgICBHTF9DTUQo
Z2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMUHJpdmF0
ZTo6U2hhZGVySW5mbzo6SW5NYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNCkpCisgICAg
R0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleHR1cmVNYXBwZXJH
TFByaXZhdGU6OlNoYWRlckluZm86OkluU291cmNlTWF0cml4VmFyaWFibGVdLCAxLCBHTF9GQUxT
RSwgbTRzcmMpKQogICAgIEdMX0NNRChnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCAwKSkK
ICAgICBjb25zdCBHTGZsb2F0IHVuaXRSZWN0W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07
CiAgICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcigwLCAyLCBHTF9GTE9BVCwgR0xfRkFM
U0UsIDAsIHVuaXRSZWN0KSkKQEAgLTU4MCwxNSArNjQ1LDE3IEBAIHZvaWQgVGV4dHVyZU1hcHBl
ckdMOjpwYWludFRvVGFyZ2V0KGNvbnN0IEJpdG1hcFRleHR1cmUmIGFTdXJmYWNlLCBjb25zdCBJ
bnRTaXplCiAgICAgc2V0Q2xpcCh2aXNpYmxlUmVjdCk7CiAKICAgICBHTF9DTUQoZ2xEcmF3QXJy
YXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpCi0gICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0
dHJpYkFycmF5KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5WZXJ0ZXhWYXJp
YWJsZV0pKQorICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtSW5m
by52YXJzW1RleHR1cmVNYXBwZXJHTFByaXZhdGU6OlNoYWRlckluZm86OkluVmVydGV4VmFyaWFi
bGVdKSkKICAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKDApKQogICAgIEdMX0NNRChnbEJpbmRCdWZm
ZXIoR0xfQVJSQVlfQlVGRkVSLCAwKSkKLSAgICBtX2N1cnJlbnRQcm9ncmFtID0gVGV4bWFwU2hh
ZGVySW5mbzo6VGFyZ2V0UHJvZ3JhbTsKKyAgICBwdnQtPmN1cnJlbnRQcm9ncmFtID0gVGV4dHVy
ZU1hcHBlckdMUHJpdmF0ZTo6U2hhZGVySW5mbzo6VGFyZ2V0UHJvZ3JhbTsKIH0KIAogUGFzc1Jl
ZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZVRleHR1cmUoKQogewot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQml0bWFwVGV4dHVyZUdMKCkpOworICAgIEJpdG1hcFRl
eHR1cmVHTCogdGV4dHVyZSA9IG5ldyBCaXRtYXBUZXh0dXJlR0woKTsKKyAgICB0ZXh0dXJlLT5t
X3RleHR1cmVNYXBwZXIgPSB0aGlzOworICAgIHJldHVybiBhZG9wdFJlZih0ZXh0dXJlKTsKIH0K
IAogfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1
cmVNYXBwZXJHTC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1h
cHBlckdMLmgKaW5kZXggN2ExMmM3Mi4uZDY2MTA0YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgKQEAgLTI5LDExICsyOSwxMyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFRleHR1cmVNYXBwZXJHTFByaXZhdGU7
CisKIC8vIEFuIE9wZW5HTC1FUzIgaW1wbGVtZW50YXRpb24gb2YgVGV4dHVyZU1hcHBlci4KIGNs
YXNzIFRleHR1cmVNYXBwZXJHTCA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyIHsKIHB1YmxpYzoKLSAg
ICBUZXh0dXJlTWFwcGVyR0woR3JhcGhpY3NDb250ZXh0KiBnYyk7Ci0gICAgdmlydHVhbCB+VGV4
dHVyZU1hcHBlckdMKCkge30KKyAgICBUZXh0dXJlTWFwcGVyR0woKTsKKyAgICB2aXJ0dWFsIH5U
ZXh0dXJlTWFwcGVyR0woKTsKIAogICAgIC8vIHJlaW1wcyBmcm9tIFRleHR1cmVNYXBwZXIKICAg
ICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwg
Y29uc3QgSW50UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZs
b2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKQEAgLTQzLDEx
ICs0NSwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGFsbG93U3VyZmFjZUZvclJvb3Qo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRl
eHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5cGUoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cCgpOworICAgIHZvaWQgb2J0YWluQ3VycmVu
dENvbnRleHQoKTsKKyAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCiBwcml2YXRlOgot
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcHJvamVjdGlvbk1hdHJpeDsKLSAgICBpbnQgbV9j
dXJyZW50UHJvZ3JhbTsKKyAgICBUZXh0dXJlTWFwcGVyR0xQcml2YXRlKiBwdnQ7CisgICAgZnJp
ZW5kIGNsYXNzIEJpdG1hcFRleHR1cmVHTDsKIH07CiAKIC8vIEFuIG9mZnNjcmVlbiBidWZmZXIg
dG8gYmUgcmVuZGVyZWQgYnkgc29mdHdhcmUuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAKaW5kZXggOTIzNmRhZS4uNjdhNmM3OCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcApAQCAt
NTQsOCArNTQsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0
IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1h
cFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKICAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0
bWFwVGV4dHVyZSogc3VyZmFjZSk7CiAgICAgdmlydHVhbCB2b2lkIHNldENsaXAoY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250
ZXh0Kik7CiAgICAgdmlydHVhbCBib29sIGFsbG93U3VyZmFjZUZvclJvb3QoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQotICAgIFRleHR1cmVNYXBwZXJRdChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQpOworICAgIFRleHR1cmVNYXBwZXJRdCgpOwogICAgIHZpcnR1YWwgY29uc3QgY2hhciogdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuICJUZXh0dXJlTWFwcGVyUXQiOyB9CiAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKIApAQCAtMTIzLDEyICsxMjQs
MTUgQEAgdm9pZCBUZXh0dXJlTWFwcGVyUXQ6OnNldENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCkK
ICAgICAgcGFpbnRlci0+c2V0Q2xpcFJlY3QocmVjdCk7CiB9CiAKLVRleHR1cmVNYXBwZXJRdDo6
VGV4dHVyZU1hcHBlclF0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLSAgICA6IFRleHR1cmVN
YXBwZXIoY29udGV4dCkKLSAgICAsIG1fcGFpbnRlcihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KSkKLSAgICAsIG1fY3VycmVudFN1cmZhY2UoMCkKK1RleHR1cmVNYXBwZXJRdDo6VGV4dHVyZU1h
cHBlclF0KCkKKyAgICA6IG1fY3VycmVudFN1cmZhY2UoMCkKIHsKLSAgICBUZXh0dXJlTWFwcGVy
UXQ6OmluaXRpYWxpemUobV9wYWludGVyKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyUXQ6OnNl
dEdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgbV9wYWlu
dGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgaW5pdGlhbGl6ZShtX3BhaW50
ZXIpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJRdDo6YmluZFN1cmZhY2UoQml0bWFwVGV4dHVy
ZSogc3VyZmFjZSkKQEAgLTE4MSwxMCArMTg1LDEyIEBAIHZvaWQgVGV4dHVyZU1hcHBlclF0Ojpk
cmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0
CiBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXI+IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQpCiB7CiAjaWZkZWYgUVRfT1BFTkdMX0xJQgotICAgIGlmIChjb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+cGFpbnRFbmdpbmUoKS0+dHlwZSgpID09IFFQYWludEVu
Z2luZTo6T3BlbkdMMikKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVy
R0woY29udGV4dCkpOworICAgIGlmIChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+cGFpbnRF
bmdpbmUoKS0+dHlwZSgpID09IFFQYWludEVuZ2luZTo6T3BlbkdMMikgeworICAgICAgICBUZXh0
dXJlTWFwcGVyR0wqIHRleG1hcEdMID0gbmV3IFRleHR1cmVNYXBwZXJHTDsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKHRleG1hcEdMKTsKKyAgICB9CiAjZW5kaWYKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFRleHR1cmVNYXBwZXJRdChjb250ZXh0KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBUZXh0dXJlTWFwcGVyUXQpOwogfQogCiAKQEAgLTE5NCw2ICsyMDAsOCBAQCBQYXNzUmVmUHRy
PEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXJRdDo6Y3JlYXRlVGV4dHVyZSgpCiB9CiAKICNp
ZmRlZiBRVF9PUEVOR0xfTElCCisKKwogY2xhc3MgUkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXJR
dCA6IHB1YmxpYyBSR0JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlciB7CiBwdWJsaWM6CiAgICAgdmly
dHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiBy
ZWN0LCBib29sIG9wYXF1ZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAppbmRleCAwNTdi
Y2ZjLi41NGU2YzdhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCkBAIC00MCw3ICs0
MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0cnVjdCBUZXhtYXBQYWludE9wdGlvbnMgewog
ICAgIEJpdG1hcFRleHR1cmUqIHN1cmZhY2U7CiAgICAgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1h
cHBlcjsKLSAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQ7CiAgICAgVGV4dHVyZU1hcHBlck5v
ZGUqIHJvb3RMYXllcjsKICAgICBmbG9hdCBvcGFjaXR5OwogICAgIEludFJlY3Qgc2Npc3NvclJl
Y3Q7CkBAIC0yMTQsNyArMjEzLDcgQEAgcHVibGljOgogICAgIEludFNpemUgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHNldFBsYXRmb3JtTGF5ZXJD
bGllbnQoVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFNpemUmLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRS
ZWN0LCBjb25zdCBJbnRSZWN0JiBleHBvc2VkUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFRl
eHR1cmVNYXBwZXIqLCBjb25zdCBUZXh0dXJlTWFwcGVyQ29udGVudExheWVyOjpQYWludE9wdGlv
bnMmKTsKIAogICAgIHN0YXRpYyBUZXh0dXJlTWFwcGVyTm9kZSogdG9UZXh0dXJlTWFwcGVyTm9k
ZShHcmFwaGljc0xheWVyKik7CiBwdWJsaWM6CkBAIC0zOTgsNyArMzk3LDcgQEAgYm9vbCBUZXh0
dXJlTWFwcGVyTm9kZTo6aGFzU3VyZmFjZURlc2NlbmRhbnRzKCkgY29uc3QKIAogfQogCi12b2lk
IFRleHR1cmVNYXBwZXJOb2RlOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEludFNpemUmIHNpemUsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFJlY3Qm
IGV4cG9zZWRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9h
dCBvcGFjaXR5KQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnQoVGV4dHVyZU1hcHBlciog
dGV4dHVyZU1hcHBlciwgY29uc3QgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6UGFpbnRPcHRp
b25zJiBvcHRpb25zKQogewogICAgIEFTU0VSVChtX2xheWVyVHlwZSA9PSBSb290TGF5ZXIpOwog
ICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQpAQCAtNDA5LDggKzQwOCw2IEBAIHZvaWQgVGV4dHVy
ZU1hcHBlck5vZGU6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50U2l6
ZSYgc2l6ZSwgY29uCiAgICAgKCJbVGV4dHVyZU1hcHBlcl0gUm9vdFBhaW50ISFcbiIpOwogI2Vu
ZGlmCiAKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlcj4gdGV4dHVyZU1hcHBlciA9IFRleHR1cmVN
YXBwZXI6OmNyZWF0ZShjb250ZXh0KTsKLQogICAgIGlmICh0ZXh0dXJlTWFwcGVyLT50eXBlKCkg
IT0gbV9sYXN0VGV4dHVyZU1hcHBlclR5cGUpCiAgICAgICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUu
bV9kYXRhLmNsZWFyKCk7CiAKQEAgLTQxOCwxNiArNDE1LDE1IEBAIHZvaWQgVGV4dHVyZU1hcHBl
ck5vZGU6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6
ZSwgY29uCiAgICAgVGV4bWFwUGFpbnRPcHRpb25zIG9wdDsKICAgICBvcHQub3BhY2l0eSA9IDE7
CiAgICAgb3B0LnJvb3RMYXllciA9IHRoaXM7Ci0gICAgb3B0LnNjaXNzb3JSZWN0ID0gdGFyZ2V0
UmVjdDsKLSAgICBvcHQudmlzaWJsZVJlY3QgPSBleHBvc2VkUmVjdDsKLSAgICBvcHQudGV4dHVy
ZU1hcHBlciA9IHRleHR1cmVNYXBwZXIuZ2V0KCk7Ci0gICAgb3B0LmNvbnRleHQgPSB0ZXh0dXJl
TWFwcGVyLT5ncmFwaGljc0NvbnRleHQoKTsKKyAgICBvcHQuc2Npc3NvclJlY3QgPSBvcHRpb25z
LnRhcmdldFJlY3Q7CisgICAgb3B0LnZpc2libGVSZWN0ID0gb3B0aW9ucy52aXNpYmxlUmVjdDsK
KyAgICBvcHQudGV4dHVyZU1hcHBlciA9IHRleHR1cmVNYXBwZXI7CiAgICAgb3B0LnN1cmZhY2Ug
PSAwOwogICAgIHBhaW50UmVjdXJzaXZlKG9wdCk7CiAKICAgICBpZiAodGV4dHVyZU1hcHBlci0+
YWxsb3dTdXJmYWNlRm9yUm9vdCgpIHx8IG1fc3RhdGUuaGFzU3VyZmFjZURlc2NlbmRhbnRzKSB7
CiAgICAgICAgIHRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKDApOwotICAgICAgICB0ZXh0dXJl
TWFwcGVyLT5wYWludFRvVGFyZ2V0KCptX3N1cmZhY2UuZ2V0KCksIHNpemUsIHRyYW5zZm9ybSwg
b3BhY2l0eSAqIG1fc3RhdGUub3BhY2l0eSwgdGFyZ2V0UmVjdCk7CisgICAgICAgIHRleHR1cmVN
YXBwZXItPnBhaW50VG9UYXJnZXQoKm1fc3VyZmFjZS5nZXQoKSwgb3B0aW9ucy52aWV3cG9ydFNp
emUsIG9wdGlvbnMudHJhbnNmb3JtLCBvcHRpb25zLm9wYWNpdHkgKiBtX3N0YXRlLm9wYWNpdHks
IG9wdGlvbnMudGFyZ2V0UmVjdCk7CiAgICAgfQogICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUucHVy
Z2UoKTsKIH0KQEAgLTY5MiwxMCArNjg4LDkgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6dXBs
b2FkVGV4dHVyZUZyb21Db250ZW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGMKIAog
ICAgIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQobV90ZXh0dXJlLT5iZWdpblBh
aW50KGRpcnR5UmVjdCkpOwotICAgICAgICBpZiAodGV4dHVyZU1hcHBlciAmJiB0ZXh0dXJlTWFw
cGVyLT5ncmFwaGljc0NvbnRleHQoKSkgewotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBv
cmlnaW5hbENvbnRleHQgPSB0ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQoKTsKLSAgICAg
ICAgICAgIGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShvcmlnaW5hbENvbnRl
eHQtPmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LnNl
dFRleHREcmF3aW5nTW9kZShvcmlnaW5hbENvbnRleHQtPnRleHREcmF3aW5nTW9kZSgpKTsKKyAg
ICAgICAgaWYgKHRleHR1cmVNYXBwZXIpIHsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0SW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSh0ZXh0dXJlTWFwcGVyLT5pbWFnZUludGVycG9sYXRpb25RdWFs
aXR5KCkpOworICAgICAgICAgICAgY29udGV4dC5zZXRUZXh0RHJhd2luZ01vZGUodGV4dHVyZU1h
cHBlci0+dGV4dERyYXdpbmdNb2RlKCkpOwogICAgICAgICB9CiAgICAgICAgIG1fbGF5ZXItPnBh
aW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIGRpcnR5UmVjdCk7CiAgICAgfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCmluZGV4
IDAzYzFjNmQuLjI3NmIyMDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyLmgKQEAgLTEsNCArMSw0IEBACi0vKgorIC8qCiAgQ29weXJpZ2h0
IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQog
CiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgpAQCAtOTcsMjAgKzk3LDMwIEBAIHB1YmxpYzoKICAgICAgICAgZHJhd1RleHR1cmUo
dGV4dHVyZSwgSW50UmVjdCgwLCAwLCB0ZXh0dXJlLmNvbnRlbnRTaXplKCkud2lkdGgoKSwgdGV4
dHVyZS5jb250ZW50U2l6ZSgpLmhlaWdodCgpKSwgbWF0cml4LCBvcGFjaXR5LCAwKTsKICAgICB9
CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCop
IHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRDbGlwKGNvbnN0IEludFJlY3QmKSA9IDA7CiAgICAg
dmlydHVhbCBib29sIGFsbG93U3VyZmFjZUZvclJvb3QoKSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKSA9IDA7CiAgICAgdmly
dHVhbCBjb25zdCBjaGFyKiB0eXBlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjbGVh
bnVwKCkge30KIAotICAgIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX2djOwotICAgIH0KKyAgICB2b2lkIHNldEltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSkgeyBtX2ludGVy
cG9sYXRpb25RdWFsaXR5ID0gcXVhbGl0eTsgfQorICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2Rl
KGludCBtb2RlKSB7IG1fdGV4dERyYXdpbmdNb2RlID0gbW9kZTsgfQorCisgICAgSW50ZXJwb2xh
dGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
aW50ZXJwb2xhdGlvblF1YWxpdHk7IH0KKyAgICBpbnQgdGV4dERyYXdpbmdNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV90ZXh0RHJhd2luZ01vZGU7IH0KKworICAgIHZvaWQgc2V0Vmlld3BvcnRTaXpl
KGNvbnN0IEludFNpemUmKTsKIAogcHJvdGVjdGVkOgotICAgIFRleHR1cmVNYXBwZXIoR3JhcGhp
Y3NDb250ZXh0KiBnYykgOiBtX2djKGdjKSB7fQotICAgIEdyYXBoaWNzQ29udGV4dCogbV9nYzsK
KyAgICBUZXh0dXJlTWFwcGVyKCkKKyAgICAgICAgOiBtX2ludGVycG9sYXRpb25RdWFsaXR5KElu
dGVycG9sYXRpb25EZWZhdWx0KQorICAgICAgICAsIG1fdGV4dERyYXdpbmdNb2RlKGNUZXh0Rmls
bCkKKyAgICB7fQorCitwcml2YXRlOgorICAgIEludGVycG9sYXRpb25RdWFsaXR5IG1faW50ZXJw
b2xhdGlvblF1YWxpdHk7CisgICAgaW50IG1fdGV4dERyYXdpbmdNb2RlOwogfTsKIAogfTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllci5oCmluZGV4IDIzZTlmYzkuLmExNTY4MWMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXIuaApAQCAtMjUsNiArMjUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgSW50U2l6ZTsKK2Ns
YXNzIFRleHR1cmVNYXBwZXI7CiBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIAogCkBAIC01
MCwxMCArNTEsMTcgQEAgcHVibGljOgogCiBjbGFzcyBUZXh0dXJlTWFwcGVyQ29udGVudExheWVy
IDogcHVibGljIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyIHsKIHB1YmxpYzoKKyAgICBzdHJ1
Y3QgUGFpbnRPcHRpb25zIHsKKyAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdDsKKyAgICAgICAg
SW50UmVjdCB0YXJnZXRSZWN0OworICAgICAgICBJbnRTaXplIHZpZXdwb3J0U2l6ZTsKKyAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOworICAgICAgICBmbG9hdCBvcGFjaXR5
OworICAgIH07CisKICAgICB2aXJ0dWFsIHZvaWQgc2V0UGxhdGZvcm1MYXllckNsaWVudChUZXh0
dXJlTWFwcGVyTGF5ZXJDbGllbnQqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEludFNpemUmLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBj
b25zdCBJbnRSZWN0JiBleHBvc2VkUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRy
YW5zZm9ybSwgZmxvYXQgb3BhY2l0eSkge30KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoVGV4dHVy
ZU1hcHBlciosIGNvbnN0IFBhaW50T3B0aW9ucyYpIHt9CiAgICAgdmlydHVhbCBJbnRTaXplIHNp
emUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFudXBUZXh0dXJlTWFwcGVyKCkg
e30KICAgICB2aXJ0dWFsIFR5cGUgbGF5ZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gQ29udGVudExh
eWVyOyB9CiB9OwogCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAgYi9X
ZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKaW5kZXggMzllNzRkOS4uYjQxYTkxMSAxMDA2NDQK
LS0tIGEvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCisrKyBiL1dlYktpdC9xdC9BcGkvcXdl
YmZyYW1lLmNwcApAQCAtOTcsNiArOTcsNyBAQAogI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgog
I2VuZGlmCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2luY2x1ZGUgInRleG1hcC9UZXh0dXJl
TWFwcGVyLmgiCiAjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgi
CiAjZW5kaWYKICNpbmNsdWRlICJ3dGYvSGFzaE1hcC5oIgpAQCAtMjk1LDE4ICsyOTYsMzcgQEAg
dm9pZCBRV2ViRnJhbWVQcml2YXRlOjpyZW5kZXJGcm9tVGlsZWRCYWNraW5nU3RvcmUoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb24KICAgICAgICAgcGFpbnRlci0+cmVzdG9yZSgpOwogICAg
IH0KICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBF
UikKLSAgICAvLyBUZXh0dXJlTWFwcGVyIG1pZ2h0IHVzZSByYXcgT3BlbkdMIG9yIHNvbWUgb3Ro
ZXIgYmFja2VuZCB0aGF0IHJlcXVpcmVzIG5hdGl2ZSBwYWludGluZy4gT24gcmFzdGVyIHRoaXMg
ZG9lc24ndCBoYXZlIGFueSBlZmZlY3QuCi0gICAgaWYgKHJvb3RHcmFwaGljc0xheWVyKSB7Ci0g
ICAgICAgIHBhaW50ZXItPmJlZ2luTmF0aXZlUGFpbnRpbmcoKTsKLSAgICAgICAgcm9vdEdyYXBo
aWNzTGF5ZXItPnBhaW50KGNvbnRleHQsIHZpZXctPnNpemUoKSwgdmlldy0+ZnJhbWVSZWN0KCks
IEludFJlY3QoY2xpcC5ib3VuZGluZ1JlY3QoKSksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIHBh
aW50ZXItPm9wYWNpdHkoKSk7Ci0gICAgICAgIHBhaW50ZXItPmVuZE5hdGl2ZVBhaW50aW5nKCk7
Ci0gICAgfQotCisgICAgcmVuZGVyQ29tcG9zaXRlZExheWVycyhjb250ZXh0LCBJbnRSZWN0KGNs
aXAuYm91bmRpbmdSZWN0KCkpKTsKICAgICByZW5kZXJSZWxhdGl2ZUNvb3Jkcyhjb250ZXh0LCAo
UVdlYkZyYW1lOjpSZW5kZXJMYXllcikoUVdlYkZyYW1lOjpTY3JvbGxCYXJMYXllciB8IFFXZWJG
cmFtZTo6UGFuSWNvbkxheWVyKSwgY2xpcCk7CiAjZW5kaWYKIH0KICNlbmRpZgogCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCit2b2lkIFFX
ZWJGcmFtZVByaXZhdGU6OnJlbmRlckNvbXBvc2l0ZWRMYXllcnMoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBJbnRSZWN0JiBjbGlwKQoreworICAgIGlmICghcm9vdEdyYXBoaWNzTGF5
ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXRleHR1cmVNYXBwZXIpCisgICAgICAgIHRl
eHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoY29udGV4dCk7CisgICAgdGV4dHVy
ZU1hcHBlci0+c2V0R3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOworICAgIHRleHR1cmVNYXBwZXIt
PnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dC0+aW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSgpKTsKKyAgICB0ZXh0dXJlTWFwcGVyLT5zZXRUZXh0RHJhd2luZ01vZGUoY29udGV4
dC0+dGV4dERyYXdpbmdNb2RlKCkpOworICAgIFFQYWludGVyKiBwYWludGVyID0gY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCk7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsK
KyAgICBwYWludGVyLT5zYXZlKCk7CisgICAgcGFpbnRlci0+YmVnaW5OYXRpdmVQYWludGluZygp
OworICAgIFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXI6OlBhaW50T3B0aW9ucyBvcHRpb25zOwor
ICAgIG9wdGlvbnMudmlzaWJsZVJlY3QgPSBjbGlwOworICAgIG9wdGlvbnMudGFyZ2V0UmVjdCA9
IHZpZXctPmZyYW1lUmVjdCgpOworICAgIG9wdGlvbnMudmlld3BvcnRTaXplID0gdmlldy0+c2l6
ZSgpOworICAgIG9wdGlvbnMub3BhY2l0eSA9IHBhaW50ZXItPm9wYWNpdHkoKTsKKyAgICByb290
R3JhcGhpY3NMYXllci0+cGFpbnQodGV4dHVyZU1hcHBlci5nZXQoKSwgb3B0aW9ucyk7CisgICAg
cGFpbnRlci0+ZW5kTmF0aXZlUGFpbnRpbmcoKTsKKyAgICBwYWludGVyLT5yZXN0b3JlKCk7Cit9
CisjZW5kaWYKKwogdm9pZCBRV2ViRnJhbWVQcml2YXRlOjpyZW5kZXJSZWxhdGl2ZUNvb3JkcyhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFFXZWJGcmFtZTo6UmVuZGVyTGF5ZXIgbGF5ZXIsIGNv
bnN0IFFSZWdpb24mIGNsaXApCiB7CiAgICAgaWYgKCFmcmFtZS0+dmlldygpIHx8ICFmcmFtZS0+
Y29udGVudFJlbmRlcmVyKCkpCkBAIC0zNDksMTYgKzM2OSw4IEBAIHZvaWQgUVdlYkZyYW1lUHJp
dmF0ZTo6cmVuZGVyUmVsYXRpdmVDb29yZHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBRV2Vi
RnJhbWU6CiAgICAgICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgICAgIH0KICAgICAg
ICAgcGFpbnRlci0+cmVzdG9yZSgpOwotCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgICAgIGlmIChyb290R3JhcGhpY3NMYXllcikg
ewotICAgICAgICAgICAgcGFpbnRlci0+c2F2ZSgpOwotICAgICAgICAgICAgcGFpbnRlci0+YmVn
aW5OYXRpdmVQYWludGluZygpOwotICAgICAgICAgICAgcm9vdEdyYXBoaWNzTGF5ZXItPnBhaW50
KGNvbnRleHQsIHZpZXctPnNpemUoKSwgdmlldy0+ZnJhbWVSZWN0KCksIEludFJlY3QoY2xpcC5i
b3VuZGluZ1JlY3QoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSwgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPm9wYWNpdHko
KSk7Ci0gICAgICAgICAgICBwYWludGVyLT5lbmROYXRpdmVQYWludGluZygpOwotICAgICAgICAg
ICAgcGFpbnRlci0+cmVzdG9yZSgpOwotICAgICAgICB9CisgICAgICAgIHJlbmRlckNvbXBvc2l0
ZWRMYXllcnMoY29udGV4dCwgSW50UmVjdChjbGlwLmJvdW5kaW5nUmVjdCgpKSk7CiAjZW5kaWYK
ICAgICB9CiAgICAgaWYgKGxheWVyICYgKFFXZWJGcmFtZTo6UGFuSWNvbkxheWVyIHwgUVdlYkZy
YW1lOjpTY3JvbGxCYXJMYXllcikpIHsKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYmZy
YW1lX3AuaCBiL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaAppbmRleCA1NjYwYmQxLi42MzRl
MjFiIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmgKKysrIGIvV2ViS2l0
L3F0L0FwaS9xd2ViZnJhbWVfcC5oCkBAIC0zMyw2ICszMywxMCBAQAogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiVmlld3BvcnRBcmd1bWVudHMuaCIKIAorI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2luY2x1ZGUgInRleG1hcC9U
ZXh0dXJlTWFwcGVyLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNz
IEZyYW1lTG9hZGVyQ2xpZW50UXQ7CiAgICAgY2xhc3MgRnJhbWVWaWV3OwpAQCAtOTQsNiArOTgs
OSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW5kZXJGcm9tVGlsZWRCYWNraW5nU3RvcmUoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgUVJlZ2lvbiYgY2xpcCk7CiAjZW5kaWYKIAorI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAg
IHZvaWQgcmVuZGVyQ29tcG9zaXRlZExheWVycyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXApOworI2VuZGlmCiAgICAgUVdlYkZy
YW1lICpxOwogICAgIFF0OjpTY3JvbGxCYXJQb2xpY3kgaG9yaXpvbnRhbFNjcm9sbEJhclBvbGlj
eTsKICAgICBRdDo6U2Nyb2xsQmFyUG9saWN5IHZlcnRpY2FsU2Nyb2xsQmFyUG9saWN5OwpAQCAt
MTA2LDYgKzExMyw3IEBAIHB1YmxpYzoKICAgICBpbnQgbWFyZ2luSGVpZ2h0OwogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQogICAgIFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIqIHJvb3RHcmFwaGljc0xheWVyOworICAgIFJl
ZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiB0ZXh0dXJlTWFwcGVyOwogI2VuZGlmCiAgICAg
Ym9vbCB6b29tVGV4dE9ubHk7CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72436</attachid>
            <date>2010-10-30 08:29:16 -0700</date>
            <delta_ts>2010-10-30 08:33:04 -0700</delta_ts>
            <desc>Revised after Kenneth&apos;s comments</desc>
            <filename>patch-47070-10.diff</filename>
            <type>text/plain</type>
            <size>36363</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWQ0ZTc5YS4uZDA4YzkyYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxMC0xMC0yOSAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5p
dGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDcwNzAKKworICAgICAgICBTb21lIHJlZmFjdG9yIGZvciB0ZXhtYXAgdG8g
ZW5hYmxlIFdlYktpdDI6IHJlbW92ZSBnbG9iYWxzLCBhbmQgYWxsb3cgVGV4dHVyZU1hcHBlciB0
byBleGlzdCB3aXRob3V0IGEgR3JhcGhpY3NDb250ZXh0LgorICAgICAgICBUaGlzIHdpbGwgYWxs
b3cgcmVuZGVyaW5nIHRoZSBUZXh0dXJlTWFwcGVyTm9kZSB0cmVlIHdpdGhvdXQgYW4gYWN0aXZl
IFFQYWludGVyLCBpbnRvIHRoZSBjdXJyZW50IEdMIGNvbnRleHQuCisgICAgICAgIE1vc3Qgb2Yg
dGhlIGNoYW5nZXMgc2ltcGx5IG1vdmUgdGhlIGdsb2JhcyBpbiBUZXh0dXJlTWFwcGVyR0wgaW50
byBtZW1iZXJzIG9mIHRoYXQgY2xhc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBPbGQgdGVz
dHMgaW4gTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcgY292ZXIgdGhpcy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6U2hhZGVySW5mbzo6Z2V0VW5pZm9ybUxvY2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTFByaXZhdGU6OlNoYWRlcklu
Zm86OmNyZWF0ZVNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckdMUHJpdmF0ZTo6RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZXBvc2l0b3J5OjpmaW5kT3JDcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6RGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2VSZXBvc2l0b3J5OjpkZXJlZik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0xQcml2YXRlOjpEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnk6OkRp
cmVjdGx5Q29tcG9zaXRlZEltYWdlUmVwb3NpdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0xQcml2YXRlOjpEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnk6On5E
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckdMUHJpdmF0ZTo6VGV4dHVyZU1hcHBlckdMUHJpdmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcFRleHR1cmVHTDo6c2V0Q29udGVudHNUb0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcFRleHR1cmVHTDo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
R0w6On5UZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjpvYnRhaW5DdXJyZW50Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
R0w6OmJpbmRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6cGFp
bnRUb1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZVRl
eHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVy
R0wuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclF0OjpUZXh0dXJlTWFwcGVyUXQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclF0OjpzZXRHcmFwaGljc0NvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJOb2RlOjp1cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpzZXRHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlcjo6c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpzZXRUZXh0RHJhd2luZ01vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjp0ZXh0RHJhd2luZ01vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6VGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ29udGVudExheWVyOjpwYWludCk6CisKIDIwMTAt
MTAtMjggIE5vYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEFyaXlhIEhpZGF5YXQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCA5NjY2NTZiLi42MDE1
ODU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJl
TWFwcGVyR0wuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1
cmVNYXBwZXJHTC5jcHAKQEAgLTMwLDggKzMwLDEyIEBACiAjaWYgZGVmaW5lZChURVhNQVBfT1BF
TkdMX0VTXzIpCiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAjZWxpZiBPUyhNQUNfT1NfWCkKKyNp
bmNsdWRlIDxBR0wvYWdsLmg+CiAjaW5jbHVkZSA8Z2wuaD4KICNlbHNlCisjaWYgT1MoVU5JWCkK
KyNpbmNsdWRlIDxHTC9nbHguaD4KKyNlbmRpZgogI2luY2x1ZGUgPEdML2dsLmg+CiAjZW5kaWYK
IApAQCAtOTAsNiArOTQsMTMyIEBAIGlubGluZSBzdGF0aWMgdm9pZCBkZWJ1Z0dMQ29tbWFuZChj
b25zdCBjaGFyKiBjb21tYW5kLCBpbnQgbGluZSkKICNkZWZpbmUgR0xfQ01EKHgpIHgKICNlbmRp
ZgogCitzdGF0aWMgY29uc3QgR0x1aW50IGdJblZlcnRleEF0dHJpYnV0ZUluZGV4ID0gMDsKKwor
c3RydWN0IFRleHR1cmVNYXBwZXJHTERhdGEgeworICAgIHN0YXRpYyBzdHJ1Y3QgU2hhZGVySW5m
byB7CisgICAgICAgIGVudW0gU2hhZGVyUHJvZ3JhbUluZGV4IHsKKyAgICAgICAgICAgIFNpbXBs
ZVByb2dyYW0sCisgICAgICAgICAgICBPcGFjaXR5QW5kTWFza1Byb2dyYW0sCisgICAgICAgICAg
ICBUYXJnZXRQcm9ncmFtLAorCisgICAgICAgICAgICBQcm9ncmFtQ291bnQKKyAgICAgICAgfTsK
KworICAgICAgICBlbnVtIFNoYWRlclZhcmlhYmxlSW5kZXggeworICAgICAgICAgICAgSW5NYXRy
aXhWYXJpYWJsZSwKKyAgICAgICAgICAgIEluU291cmNlTWF0cml4VmFyaWFibGUsCisgICAgICAg
ICAgICBJbk1hc2tNYXRyaXhWYXJpYWJsZSwKKyAgICAgICAgICAgIE9wYWNpdHlWYXJpYWJsZSwK
KyAgICAgICAgICAgIFNvdXJjZVRleHR1cmVWYXJpYWJsZSwKKyAgICAgICAgICAgIE1hc2tUZXh0
dXJlVmFyaWFibGUsCisKKyAgICAgICAgICAgIFZhcmlhYmxlQ291bnQKKyAgICAgICAgfTsKKwor
ICAgICAgICBzdHJ1Y3QgUHJvZ3JhbUluZm8geworICAgICAgICAgICAgR0x1aW50IGlkOworICAg
ICAgICAgICAgR0xpbnQgdmFyc1tWYXJpYWJsZUNvdW50XTsKKyAgICAgICAgfTsKKworICAgICAg
ICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oU2hhZGVyUHJvZ3JhbUluZGV4IHByb2csIFNoYWRl
clZhcmlhYmxlSW5kZXggdmFyLCBjb25zdCBjaGFyKiBuYW1lKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gcHJvZ3JhbXNbcHJvZ10udmFyc1t2YXJdID0gZ2xHZXRVbmlmb3JtTG9jYXRp
b24ocHJvZ3JhbXNbcHJvZ10uaWQsIG5hbWUpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBj
cmVhdGVTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3Qg
Y2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UsIFNoYWRlclByb2dyYW1JbmRleCBpbmRleCkKKyAg
ICAgICAgeworICAgICAgICAgICAgR0x1aW50IHZlcnRleFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVy
KEdMX1ZFUlRFWF9TSEFERVIpOworICAgICAgICAgICAgR0x1aW50IGZyYWdtZW50U2hhZGVyID0g
Z2xDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKKyAgICAgICAgICAgIEdMX0NNRChn
bFNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2UsIDApKQor
ICAgICAgICAgICAgR0xfQ01EKGdsU2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCAxLCAmZnJh
Z21lbnRTaGFkZXJTb3VyY2UsIDApKQorICAgICAgICAgICAgR0x1aW50IHByb2dyYW1JRCA9IGds
Q3JlYXRlUHJvZ3JhbSgpOworICAgICAgICAgICAgR0xfQ01EKGdsQ29tcGlsZVNoYWRlcih2ZXJ0
ZXhTaGFkZXIpKQorICAgICAgICAgICAgR0xfQ01EKGdsQ29tcGlsZVNoYWRlcihmcmFnbWVudFNo
YWRlcikpCisgICAgICAgICAgICBHTF9DTUQoZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2ZXJ0
ZXhTaGFkZXIpKQorICAgICAgICAgICAgR0xfQ01EKGdsQXR0YWNoU2hhZGVyKHByb2dyYW1JRCwg
ZnJhZ21lbnRTaGFkZXIpKQorICAgICAgICAgICAgR0xfQ01EKGdsQmluZEF0dHJpYkxvY2F0aW9u
KHByb2dyYW1JRCwgZ0luVmVydGV4QXR0cmlidXRlSW5kZXgsICJJblZlcnRleCIpKQorICAgICAg
ICAgICAgR0xfQ01EKGdsTGlua1Byb2dyYW0ocHJvZ3JhbUlEKSkKKyAgICAgICAgICAgIHByb2dy
YW1zW2luZGV4XS5pZCA9IHByb2dyYW1JRDsKKyNpZmRlZiBQUklOVF9QUk9HUkFNX0lORk9fTE9H
CisgICAgICAgICAgICBjaGFyIGluZm9Mb2dbMTAyNF07CisgICAgICAgICAgICBpbnQgbGVuOwor
ICAgICAgICAgICAgR0xfQ01EKGdsR2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbUlELCAxMDI0LCAm
bGVuLCBpbmZvTG9nKSk7CisgICAgICAgICAgICBMT0coR3JhcGhpY3MsICJDb21waWxlZCBwcm9n
cmFtIGZvciB0ZXh0dXJlIG1hcHBlci4gTG9nOiAlc1xuIiwgaW5mb0xvZyk7CisjZW5kaWYKKyAg
ICAgICAgfQorCisgICAgICAgIFByb2dyYW1JbmZvIHByb2dyYW1zW1Byb2dyYW1Db3VudF07CisK
KyAgICB9IHNoYWRlckluZm87CisKKyAgICBzdHJ1Y3QgRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VS
ZXBvc2l0b3J5IHsKKyAgICAgICAgc3RydWN0IEVudHJ5IHsKKyAgICAgICAgICAgIEdMdWludCB0
ZXh0dXJlOworICAgICAgICAgICAgaW50IHJlZkNvdW50OworICAgICAgICB9OworICAgICAgICBI
YXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBFbnRyeT4gaW1hZ2VUb1RleHR1cmU7CisKKyAgICAgICAg
R0x1aW50IGZpbmRPckNyZWF0ZShOYXRpdmVJbWFnZVB0ciBpbWFnZSwgYm9vbCYgZm91bmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIsIEVudHJ5Pjo6aXRl
cmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5maW5kKGltYWdlKTsKKyAgICAgICAgICAgIGZvdW5k
ID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoaXQgIT0gaW1hZ2VUb1RleHR1cmUuZW5kKCkpIHsK
KyAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLnJlZkNvdW50Kys7CisgICAgICAgICAgICAgICAg
Zm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kLnRleHR1cmU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBFbnRyeSBlbnRyeTsKKyAgICAgICAgICAgIEdM
X0NNRChnbEdlblRleHR1cmVzKDEsICZlbnRyeS50ZXh0dXJlKSk7CisgICAgICAgICAgICBlbnRy
eS5yZWZDb3VudCA9IDE7CisgICAgICAgICAgICBpbWFnZVRvVGV4dHVyZS5hZGQoaW1hZ2UsIGVu
dHJ5KTsKKyAgICAgICAgICAgIHJldHVybiBlbnRyeS50ZXh0dXJlOworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBkZXJlZihOYXRpdmVJbWFnZVB0ciBpbWFnZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgSGFzaE1hcDxOYXRpdmVJbWFnZVB0ciwgRW50cnk+OjppdGVyYXRvciBpdCA9IGltYWdl
VG9UZXh0dXJlLmZpbmQoaW1hZ2UpOworICAgICAgICAgICAgaWYgKGl0ICE9IGltYWdlVG9UZXh0
dXJlLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQucmVmQ291bnQgPCAy
KSB7CisgICAgICAgICAgICAgICAgICAgIGltYWdlVG9UZXh0dXJlLnJlbW92ZShpdCk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIERp
cmVjdGx5Q29tcG9zaXRlZEltYWdlUmVwb3NpdG9yeSgpCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIH5EaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnkoKQorICAgICAgICB7
CisgICAgICAgICAgICBmb3IgKEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIsIEVudHJ5Pjo6aXRlcmF0
b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5iZWdpbigpOyBpdCAhPSBpbWFnZVRvVGV4dHVyZS5lbmQo
KTsgKytpdCkgeworICAgICAgICAgICAgICAgIEdMdWludCB0ZXh0dXJlID0gaXQtPnNlY29uZC50
ZXh0dXJlOworICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlKQorICAgICAgICAgICAgICAgICAg
ICBHTF9DTUQoZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSkpOworICAgICAgICAgICAgfQor
CisgICAgICAgIH0KKyAgICB9IGRpcmVjdGx5Q29tcG9zaXRlZEltYWdlczsKKworICAgIFRleHR1
cmVNYXBwZXJHTERhdGEoKQorICAgICAgICA6IGN1cnJlbnRQcm9ncmFtKFRleHR1cmVNYXBwZXJH
TERhdGE6OlNoYWRlckluZm86OlRhcmdldFByb2dyYW0pCisgICAgeyB9CisKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBwcm9qZWN0aW9uTWF0cml4OworICAgIGludCBjdXJyZW50UHJvZ3JhbTsK
KworI2lmIE9TKE1BQ19PU19YKQorICAgIEFHTENvbnRleHQgYWdsQ29udGV4dDsKKyNlbGlmIE9T
KFVOSVgpCisgICAgRHJhd2FibGUgZ2x4RHJhd2FibGU7CisgICAgR0xYQ29udGV4dCBnbHhDb250
ZXh0OworI2VuZGlmCit9OworCitUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvIFRleHR1
cmVNYXBwZXJHTERhdGE6OnNoYWRlckluZm87CisKIGNsYXNzIEJpdG1hcFRleHR1cmVHTCA6IHB1
YmxpYyBCaXRtYXBUZXh0dXJlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgp
OwpAQCAtMTExLDYgKzI0MSw3IEBAIHByaXZhdGU6CiAgICAgR0x1aW50IG1fZmJvOwogICAgIElu
dFNpemUgbV9hY3R1YWxTaXplOwogICAgIGJvb2wgbV9zdXJmYWNlTmVlZHNSZXNldDsKKyAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlckdMPiBtX3RleHR1cmVNYXBwZXI7CiAgICAgQml0bWFwVGV4dHVy
ZUdMKCkKICAgICAgICAgOiBtX2lkKDApCiAgICAgICAgICwgbV9pbWFnZSgwKQpAQCAtMTIzLDcy
ICsyNTQsMjEgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlckdMOwog
fTsKIAotc3RhdGljIHN0cnVjdCBUZXhtYXBTaGFkZXJJbmZvIHsKLSAgICBlbnVtIFNoYWRlclBy
b2dyYW1JbmRleCB7Ci0gICAgICAgIFNpbXBsZVByb2dyYW0sCi0gICAgICAgIE9wYWNpdHlBbmRN
YXNrUHJvZ3JhbSwKLSAgICAgICAgVGFyZ2V0UHJvZ3JhbSwKLSAgICAgICAgTnVtUHJvZ3JhbXMK
LSAgICB9OwotCi0gICAgZW51bSBTaGFkZXJWYXJpYWJsZUluZGV4IHsKLSAgICAgICAgSW5NYXRy
aXhWYXJpYWJsZSwKLSAgICAgICAgSW5Tb3VyY2VNYXRyaXhWYXJpYWJsZSwKLSAgICAgICAgSW5N
YXNrTWF0cml4VmFyaWFibGUsCi0gICAgICAgIEluVmVydGV4VmFyaWFibGUsCiAKLSAgICAgICAg
T3BhY2l0eVZhcmlhYmxlLAotICAgICAgICBTb3VyY2VUZXh0dXJlVmFyaWFibGUsCi0gICAgICAg
IE1hc2tUZXh0dXJlVmFyaWFibGUsCi0gICAgICAgIE51bVZhcmlhYmxlcwotICAgIH07Ci0KLSAg
ICBzdHJ1Y3QgUHJvZ3JhbUluZm8gewotICAgICAgICBHTHVpbnQgaWQ7Ci0gICAgICAgIEdMaW50
IHZhcnNbTnVtVmFyaWFibGVzXTsKLSAgICB9OwotCi0gICAgR0xpbnQgZ2V0VW5pZm9ybUxvY2F0
aW9uKFNoYWRlclByb2dyYW1JbmRleCBwcm9nLCBTaGFkZXJWYXJpYWJsZUluZGV4IHZhciwgY29u
c3QgY2hhciogbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBwcm9ncmFtc1twcm9nXS52YXJz
W3Zhcl0gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtc1twcm9nXS5pZCwgbmFtZSk7Ci0g
ICAgfQotCi0gICAgdm9pZCBjcmVhdGVTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRleFNo
YWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UsIFNoYWRlclByb2dy
YW1JbmRleCBpbmRleCkKLSAgICB7Ci0gICAgICAgIEdMdWludCB2ZXJ0ZXhTaGFkZXIgPSBnbENy
ZWF0ZVNoYWRlcihHTF9WRVJURVhfU0hBREVSKTsKLSAgICAgICAgR0x1aW50IGZyYWdtZW50U2hh
ZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKLSAgICAgICAgR0xfQ01E
KGdsU2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgMSwgJnZlcnRleFNoYWRlclNvdXJjZSwgMCkp
Ci0gICAgICAgIEdMX0NNRChnbFNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgMSwgJmZyYWdt
ZW50U2hhZGVyU291cmNlLCAwKSkKLSAgICAgICAgR0x1aW50IHByb2dyYW1JRCA9IGdsQ3JlYXRl
UHJvZ3JhbSgpOwotICAgICAgICBHTF9DTUQoZ2xDb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcikp
Ci0gICAgICAgIEdMX0NNRChnbENvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpKQotICAgICAg
ICBHTF9DTUQoZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2ZXJ0ZXhTaGFkZXIpKQotICAgICAg
ICBHTF9DTUQoZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNoYWRlcikpCi0gICAg
ICAgIEdMX0NNRChnbEJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsIDAsICJJblZlcnRleCIp
KQotICAgICAgICBHTF9DTUQoZ2xMaW5rUHJvZ3JhbShwcm9ncmFtSUQpKQotICAgICAgICBwcm9n
cmFtc1tpbmRleF0uaWQgPSBwcm9ncmFtSUQ7Ci0gICAgICAgIGNoYXIgaW5mb0xvZ1sxMDI0XTsK
LSAgICAgICAgaW50IGxlbjsKLSAgICAgICAgR0xfQ01EKGdsR2V0UHJvZ3JhbUluZm9Mb2cocHJv
Z3JhbUlELCAxMDI0LCAmbGVuLCBpbmZvTG9nKSk7Ci0gICAgfQotCi0gICAgUHJvZ3JhbUluZm8g
cHJvZ3JhbXNbTnVtUHJvZ3JhbXNdOwotCi19IGdTaGFkZXJJbmZvOwogCiAjZGVmaW5lIFRFWE1B
UF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihwcm9nLCB2YXIpIFwKLSAgICAgICAgICAgIGlmIChn
U2hhZGVySW5mby5nZXRVbmlmb3JtTG9jYXRpb24oVGV4bWFwU2hhZGVySW5mbzo6cHJvZyMjUHJv
Z3JhbSwgVGV4bWFwU2hhZGVySW5mbzo6dmFyIyNWYXJpYWJsZSwgI3ZhcikgPCAwKSBcCisgICAg
ICAgICAgICBpZiAobV9kYXRhLT5zaGFkZXJJbmZvLmdldFVuaWZvcm1Mb2NhdGlvbihUZXh0dXJl
TWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpwcm9nIyNQcm9ncmFtLCBUZXh0dXJlTWFwcGVyR0xE
YXRhOjpTaGFkZXJJbmZvOjp2YXIjI1ZhcmlhYmxlLCAjdmFyKSA8IDApIFwKICAgICAgICAgICAg
ICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZG4ndCBmaW5kIHZhcmlhYmxlICIjdmFyIiBpbiBwcm9n
cmFtICIjcHJvZyJcbiIpOwotI2RlZmluZSBURVhNQVBfQlVJTERfU0hBREVSKHByb2dyYW0pIGdT
aGFkZXJJbmZvLmNyZWF0ZVNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNlIyNwcm9ncmFt
LCBmcmFnbWVudFNoYWRlclNvdXJjZSMjcHJvZ3JhbSwgVGV4bWFwU2hhZGVySW5mbzo6cHJvZ3Jh
bSMjUHJvZ3JhbSk7CisjZGVmaW5lIFRFWE1BUF9CVUlMRF9TSEFERVIocHJvZ3JhbSkgbV9kYXRh
LT5zaGFkZXJJbmZvLmNyZWF0ZVNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNlIyNwcm9n
cmFtLCBmcmFnbWVudFNoYWRlclNvdXJjZSMjcHJvZ3JhbSwgVGV4dHVyZU1hcHBlckdMRGF0YTo6
U2hhZGVySW5mbzo6cHJvZ3JhbSMjUHJvZ3JhbSk7CiAKLVRleHR1cmVNYXBwZXJHTDo6VGV4dHVy
ZU1hcHBlckdMKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLSAgICA6IFRleHR1cmVNYXBwZXIo
Y29udGV4dCkKLSAgICAsIG1fY3VycmVudFByb2dyYW0oVGV4bWFwU2hhZGVySW5mbzo6VGFyZ2V0
UHJvZ3JhbSkKK1RleHR1cmVNYXBwZXJHTDo6VGV4dHVyZU1hcHBlckdMKCkKKyAgICA6IG1fZGF0
YShuZXcgVGV4dHVyZU1hcHBlckdMRGF0YSkKIHsKLSAgICBzdGF0aWMgYm9vbCBzaGFkZXJzQ29t
cGlsZWQgPSBmYWxzZTsKLSAgICBpZiAoc2hhZGVyc0NvbXBpbGVkKQorICAgIG9idGFpbkN1cnJl
bnRDb250ZXh0KCk7CisgICAgc3RhdGljIGJvb2wgY29tcGlsZWRTaGFkZXJzID0gZmFsc2U7Cisg
ICAgaWYgKGNvbXBpbGVkU2hhZGVycykKICAgICAgICAgcmV0dXJuOwotICAgIHNoYWRlcnNDb21w
aWxlZCA9IHRydWU7CisgICAgY29tcGlsZWRTaGFkZXJzID0gdHJ1ZTsKICNpZm5kZWYgVEVYTUFQ
X09QRU5HTF9FUzIKICNkZWZpbmUgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlMgXAogICAgICIj
ZGVmaW5lIGxvd3BcbiNkZWZpbmUgaGlnaHBcbiIKQEAgLTI4NSwxOCArMzY1LDE4IEBAIHZvaWQg
VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJl
LCBjb25zdCBJbnRSZWN0JiB0CiAKICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wmIHRleHR1cmVH
TCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KHRleHR1cmUpOwogCi0gICAg
VGV4bWFwU2hhZGVySW5mbzo6U2hhZGVyUHJvZ3JhbUluZGV4IHByb2dyYW07CisgICAgVGV4dHVy
ZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6U2hhZGVyUHJvZ3JhbUluZGV4IHByb2dyYW07CiAg
ICAgaWYgKG1hc2tUZXh0dXJlKQotICAgICAgICBwcm9ncmFtID0gVGV4bWFwU2hhZGVySW5mbzo6
T3BhY2l0eUFuZE1hc2tQcm9ncmFtOworICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlckdM
RGF0YTo6U2hhZGVySW5mbzo6T3BhY2l0eUFuZE1hc2tQcm9ncmFtOwogICAgIGVsc2UKLSAgICAg
ICAgcHJvZ3JhbSA9IFRleG1hcFNoYWRlckluZm86OlNpbXBsZVByb2dyYW07CisgICAgICAgIHBy
b2dyYW0gPSBUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpTaW1wbGVQcm9ncmFtOwog
Ci0gICAgY29uc3QgVGV4bWFwU2hhZGVySW5mbzo6UHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvID0g
Z1NoYWRlckluZm8ucHJvZ3JhbXNbcHJvZ3JhbV07Ci0gICAgaWYgKG1fY3VycmVudFByb2dyYW0g
IT0gcHJvZ3JhbSkgeworICAgIGNvbnN0IFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86
OlByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbyA9IG1fZGF0YS0+c2hhZGVySW5mby5wcm9ncmFtc1tw
cm9ncmFtXTsKKyAgICBpZiAobV9kYXRhLT5jdXJyZW50UHJvZ3JhbSAhPSBwcm9ncmFtKSB7CiAg
ICAgICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbUluZm8uaWQpKQotICAgICAgICBHTF9D
TUQoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZ1NoYWRlckluZm8ucHJvZ3JhbXNbbV9jdXJy
ZW50UHJvZ3JhbV0udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblZlcnRleFZhcmlhYmxlXSkpCi0g
ICAgICAgIG1fY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOwotICAgICAgICBHTF9DTUQoZ2xFbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86Oklu
VmVydGV4VmFyaWFibGVdKSkKKyAgICAgICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KGdJblZlcnRleEF0dHJpYnV0ZUluZGV4KSkKKyAgICAgICAgbV9kYXRhLT5jdXJyZW50UHJv
Z3JhbSA9IHByb2dyYW07CisgICAgICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KGdJblZlcnRleEF0dHJpYnV0ZUluZGV4KSkKICAgICB9CiAKICAgICBHTF9DTUQoZ2xEaXNhYmxl
KEdMX0RFUFRIX1RFU1QpKQpAQCAtMzA4LDcgKzM4OCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdM
OjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0
JiB0CiAgICAgY29uc3QgR0xmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAs
IDF9OwogICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIoMCwgMiwgR0xfRkxPQVQsIEdM
X0ZBTFNFLCAwLCB1bml0UmVjdCkpCiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgg
PSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtX3Byb2plY3Rpb25NYXRyaXgpLm11bHRMZWZ0KG1vZGVs
Vmlld01hdHJpeCkubXVsdExlZnQoVHJhbnNmb3JtYXRpb25NYXRyaXgoCisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgobV9kYXRhLT5wcm9qZWN0
aW9uTWF0cml4KS5tdWx0TGVmdChtb2RlbFZpZXdNYXRyaXgpLm11bHRMZWZ0KFRyYW5zZm9ybWF0
aW9uTWF0cml4KAogICAgICAgICAgICAgdGFyZ2V0UmVjdC53aWR0aCgpLCAwLCAwLCAwLAogICAg
ICAgICAgICAgMCwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgMCwgMCwKICAgICAgICAgICAgIDAsIDAs
IDEsIDAsCkBAIC0zMjQsMTAgKzQwNCwxMCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1Rl
eHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHRleHR1cmVHTC5tX3JlbGF0aXZl
U2l6ZS5oZWlnaHQoKSwgMCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCAwLCAxLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAs
IDAsIDF9OwotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tU
ZXhtYXBTaGFkZXJJbmZvOjpJbk1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00KSkKLSAg
ICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVy
SW5mbzo6SW5Tb3VyY2VNYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNHNyYykpCi0gICAg
R0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6U291
cmNlVGV4dHVyZVZhcmlhYmxlXSwgMCkpCi0gICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW1J
bmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6T3BhY2l0eVZhcmlhYmxlXSwgb3BhY2l0eSkpCisg
ICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleHR1cmVNYXBw
ZXJHTERhdGE6OlNoYWRlckluZm86OkluTWF0cml4VmFyaWFibGVdLCAxLCBHTF9GQUxTRSwgbTQp
KQorICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJl
TWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpJblNvdXJjZU1hdHJpeFZhcmlhYmxlXSwgMSwgR0xf
RkFMU0UsIG00c3JjKSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbUluZm8udmFyc1tU
ZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpTb3VyY2VUZXh0dXJlVmFyaWFibGVdLCAw
KSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVy
R0xEYXRhOjpTaGFkZXJJbmZvOjpPcGFjaXR5VmFyaWFibGVdLCBvcGFjaXR5KSkKIAogICAgIGlm
IChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpKSB7CiAgICAgICAgIGNvbnN0
IEJpdG1hcFRleHR1cmVHTCogbWFza1RleHR1cmVHTCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1h
cFRleHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsKQEAgLTMzNyw4ICs0MTcsOCBAQCB2b2lkIFRleHR1
cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29u
c3QgSW50UmVjdCYgdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LCBtYXNrVGV4dHVyZUdMLT5tX3JlbGF0aXZlU2l6ZS5oZWlnaHQoKSwgMCwgMCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMX07Ci0gICAgICAgIGdsVW5p
Zm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OkluTWFza01h
dHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00bWFzayk7Ci0gICAgICAgIEdMX0NNRChnbFVu
aWZvcm0xaShwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86Ok1hc2tUZXh0dXJlVmFy
aWFibGVdLCAxKSkKKyAgICAgICAgZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNb
VGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6SW5NYXNrTWF0cml4VmFyaWFibGVdLCAx
LCBHTF9GQUxTRSwgbTRtYXNrKTsKKyAgICAgICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW1J
bmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6TWFza1RleHR1cmVWYXJp
YWJsZV0sIDEpKQogICAgICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKSkK
ICAgICB9CiAKQEAgLTQwMiw0MyArNDgyLDYgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmVuZFBh
aW50KCkKICAgICBtX2J1ZmZlci5jbGVhcigpOwogfQogCi1zdHJ1Y3QgVGV4bWFwR0xTaGFkZXJU
ZXh0dXJlcyB7Ci0gICAgc3RydWN0IEVudHJ5IHsKLSAgICAgICAgR0x1aW50IHRleHR1cmU7Ci0g
ICAgICAgIGludCByZWZDb3VudDsKLSAgICB9OwotICAgIEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIs
IEVudHJ5PiBpbWFnZVRvVGV4dHVyZTsKLSAgICBHTHVpbnQgZmluZE9yQ3JlYXRlKE5hdGl2ZUlt
YWdlUHRyIGltYWdlLCBib29sJiBmb3VuZCkKLSAgICB7Ci0gICAgICAgIEhhc2hNYXA8TmF0aXZl
SW1hZ2VQdHIsIEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5maW5kKGltYWdl
KTsKLSAgICAgICAgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGl0ICE9IGltYWdlVG9UZXh0
dXJlLmVuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLnJlZkNvdW50Kys7Ci0gICAgICAg
ICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZC50ZXh0dXJl
OwotICAgICAgICB9Ci0gICAgICAgIEVudHJ5IGVudHJ5OwotICAgICAgICBHTF9DTUQoZ2xHZW5U
ZXh0dXJlcygxLCAmZW50cnkudGV4dHVyZSkpOwotICAgICAgICBlbnRyeS5yZWZDb3VudCA9IDE7
Ci0gICAgICAgIGltYWdlVG9UZXh0dXJlLmFkZChpbWFnZSwgZW50cnkpOwotICAgICAgICByZXR1
cm4gZW50cnkudGV4dHVyZTsKLSAgICB9Ci0KLSAgICBib29sIGRlcmVmKE5hdGl2ZUltYWdlUHRy
IGltYWdlKQotICAgIHsKLSAgICAgICAgSGFzaE1hcDxOYXRpdmVJbWFnZVB0ciwgRW50cnk+Ojpp
dGVyYXRvciBpdCA9IGltYWdlVG9UZXh0dXJlLmZpbmQoaW1hZ2UpOwotICAgICAgICBpZiAoaXQg
IT0gaW1hZ2VUb1RleHR1cmUuZW5kKCkpIHsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLnJl
ZkNvdW50IDwgMikgewotICAgICAgICAgICAgICAgIGltYWdlVG9UZXh0dXJlLnJlbW92ZShpdCk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX07Ci0KLXN0YXRpYyBUZXhtYXBHTFNoYWRl
clRleHR1cmVzIGdUZXh0dXJlUmVwb3NpdG9yeTsKLQogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnNl
dENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiB7CiAgICAgTmF0aXZlSW1hZ2VQdHIgbmF0
aXZlSW1hZ2UgPSBpbWFnZSA/IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIDog
MDsKQEAgLTQ1MSw3ICs0OTQsNyBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6c2V0Q29udGVudHNU
b0ltYWdlKEltYWdlKiBpbWFnZSkKICAgICBpZiAobmF0aXZlSW1hZ2UgPT0gbV9pbWFnZSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICBHTHVpbnQgbmV3VGV4
dHVyZUlEID0gZ1RleHR1cmVSZXBvc2l0b3J5LmZpbmRPckNyZWF0ZShuYXRpdmVJbWFnZSwgZm91
bmQpOworICAgIEdMdWludCBuZXdUZXh0dXJlSUQgPSBtX3RleHR1cmVNYXBwZXItPm1fZGF0YS0+
ZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmRPckNyZWF0ZShuYXRpdmVJbWFnZSwgZm91bmQp
OwogICAgIGlmIChuZXdUZXh0dXJlSUQgIT0gbV9pZCkgewogICAgICAgICBkZXN0cm95KCk7CiAg
ICAgICAgIG1faWQgPSBuZXdUZXh0dXJlSUQ7CkBAIC00NjcsNyArNTEwLDcgQEAgdm9pZCBCaXRt
YXBUZXh0dXJlR0w6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiAKIHZvaWQgQml0
bWFwVGV4dHVyZUdMOjpkZXN0cm95KCkKIHsKLSAgICBpZiAobV9pZCAmJiAoIW1faW1hZ2UgfHwg
IWdUZXh0dXJlUmVwb3NpdG9yeS5kZXJlZihtX2ltYWdlKSkpCisgICAgaWYgKG1faWQgJiYgKCFt
X2ltYWdlIHx8ICFtX3RleHR1cmVNYXBwZXItPm1fZGF0YS0+ZGlyZWN0bHlDb21wb3NpdGVkSW1h
Z2VzLmRlcmVmKG1faW1hZ2UpKSkKICAgICAgICAgR0xfQ01EKGdsRGVsZXRlVGV4dHVyZXMoMSwg
Jm1faWQpKQogICAgIGlmIChtX2ZibykKICAgICAgICAgR0xfQ01EKGdsRGVsZXRlRnJhbWVidWZm
ZXJzKDEsICZtX2ZibykpCkBAIC00OTYsOCArNTM5LDMyIEBAIHN0YXRpYyBpbmxpbmUgVHJhbnNm
b3JtYXRpb25NYXRyaXggY3JlYXRlUHJvamVjdGlvbk1hdHJpeChjb25zdCBJbnRTaXplJiBzaXpl
LCBiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCBmbGlwID8gMSA6IC0xLCAw
LCAxKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmNsZWFudXAoKQorVGV4dHVyZU1hcHBl
ckdMOjp+VGV4dHVyZU1hcHBlckdMKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBkZWxldGUgbV9kYXRhOworfQorCitib29sIFRleHR1cmVNYXBwZXJHTDo6bWFrZUNvbnRleHRD
dXJyZW50KCkKIHsKKyNpZiBPUyhNQUNfT1NfWCkKKyAgICByZXR1cm4gYWdsU2V0Q3VycmVudENv
bnRleHQobV9kYXRhLT5hZ2xDb250ZXh0KTsKKyNlbGlmIE9TKFVOSVgpCisgICAgRGlzcGxheSog
ZGlzcGxheSA9IFhPcGVuRGlzcGxheSgwKTsKKyAgICBpZiAoIWRpc3BsYXkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2xYTWFrZUN1cnJlbnQoZGlzcGxheSwgbV9kYXRhLT5n
bHhEcmF3YWJsZSwgbV9kYXRhLT5nbHhDb250ZXh0KTsKKyNlbmRpZgorfQorCit2b2lkIFRleHR1
cmVNYXBwZXJHTDo6b2J0YWluQ3VycmVudENvbnRleHQoKQoreworI2lmIE9TKE1BQ19PU19YKQor
ICAgIG1fZGF0YS0+YWdsQ29udGV4dCA9IGFnbEdldEN1cnJlbnRDb250ZXh0KCk7CisjZWxpZiBP
UyhVTklYKQorICAgIG1fZGF0YS0+Z2x4RHJhd2FibGUgPSBnbFhHZXRDdXJyZW50RHJhd2FibGUo
KTsKKyAgICBtX2RhdGEtPmdseENvbnRleHQgPSBnbFhHZXRDdXJyZW50Q29udGV4dCgpOworI2Vu
ZGlmCiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJl
ICpzdXJmYWNlUG9pbnRlcikKQEAgLTUyMyw3ICs1OTAsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJH
TDo6YmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSAqc3VyZmFjZVBvaW50ZXIpCiAgICAgfQogCiAg
ICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwgc3VyZmFjZS0+c2l6ZSgpLndpZHRoKCksIHN1cmZh
Y2UtPnNpemUoKS5oZWlnaHQoKSkpCi0gICAgbV9wcm9qZWN0aW9uTWF0cml4ID0gbWF0cml4Owor
ICAgIG1fZGF0YS0+cHJvamVjdGlvbk1hdHJpeCA9IG1hdHJpeDsKIH0KIAogdm9pZCBUZXh0dXJl
TWFwcGVyR0w6OnNldENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTU0Myw4ICs2MTAsNyBA
QCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6cGFpbnRUb1RhcmdldChjb25zdCBCaXRtYXBUZXh0dXJl
JiBhU3VyZmFjZSwgY29uc3QgSW50U2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgc3VyZmFj
ZS5tX2FjdHVhbFNpemUud2lkdGgoKSwgMCwgMCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAg
IDAsIHN1cmZhY2UubV9hY3R1YWxTaXplLmhlaWdodCgpLCAwLCAwLAogICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgMCwgMSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1cmZhY2Uub2Zm
c2V0KCkueCgpLCBzdXJmYWNlLm9mZnNldCgpLnkoKSwgMCwgMQotICAgICAgICAgICAgICAgICkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN1cmZhY2Uub2Zmc2V0KCkueCgpLCBzdXJmYWNlLm9m
ZnNldCgpLnkoKSwgMCwgMSkKICAgICAgICAgICAgICk7CiAKICAgICBjb25zdCBHTGZsb2F0IG00
W10gPSB7CkBAIC01NjAsMTggKzYyNiwxOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6cGFpbnRU
b1RhcmdldChjb25zdCBCaXRtYXBUZXh0dXJlJiBhU3VyZmFjZSwgY29uc3QgSW50U2l6ZQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDF9OwogCiAgICAgLy8g
V2UgYWxyZWFkeSBibGVuZGVkIHRoZSBhbHBoYSBpbjsgdGhlIHJlc3VsdCBpcyBwcmVtdWx0aXBs
aWVkLgotICAgIEdMX0NNRChnbFVzZVByb2dyYW0oZ1NoYWRlckluZm8ucHJvZ3JhbXNbVGV4bWFw
U2hhZGVySW5mbzo6VGFyZ2V0UHJvZ3JhbV0uaWQpKQorICAgIEdMX0NNRChnbFVzZVByb2dyYW0o
bV9kYXRhLT5zaGFkZXJJbmZvLnByb2dyYW1zW1RleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlcklu
Zm86OlRhcmdldFByb2dyYW1dLmlkKSkKICAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIDApKQogICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAsIHN1cmZhY2VTaXpl
LndpZHRoKCksIHN1cmZhY2VTaXplLmhlaWdodCgpKSkKICAgICBHTF9DTUQoZ2xEaXNhYmxlKEdM
X1NURU5DSUxfVEVTVCkpCi0gICAgY29uc3QgVGV4bWFwU2hhZGVySW5mbzo6UHJvZ3JhbUluZm8m
IHByb2dyYW1JbmZvID0gZ1NoYWRlckluZm8ucHJvZ3JhbXNbVGV4bWFwU2hhZGVySW5mbzo6VGFy
Z2V0UHJvZ3JhbV07Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW1JbmZvLnZhcnNbVGV4
bWFwU2hhZGVySW5mbzo6T3BhY2l0eVZhcmlhYmxlXSwgb3BhY2l0eSkpCisgICAgY29uc3QgVGV4
dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6UHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvID0g
bV9kYXRhLT5zaGFkZXJJbmZvLnByb2dyYW1zW1RleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlcklu
Zm86OlRhcmdldFByb2dyYW1dOworICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9ncmFtSW5mby52
YXJzW1RleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86Ok9wYWNpdHlWYXJpYWJsZV0sIG9w
YWNpdHkpKQogICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKQogICAgIEdM
X0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHN1cmZhY2UubV9pZCkpCi0gICAgR0xf
Q01EKGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6U291cmNl
VGV4dHVyZVZhcmlhYmxlXSwgMCkpCi0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJy
YXkocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblZlcnRleFZhcmlhYmxlXSkp
Ci0gICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleG1hcFNo
YWRlckluZm86OkluTWF0cml4VmFyaWFibGVdLCAxLCBHTF9GQUxTRSwgbTQpKQotICAgIEdMX0NN
RChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJ
blNvdXJjZU1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00c3JjKSkKKyAgICBHTF9DTUQo
Z2xVbmlmb3JtMWkocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJ
bmZvOjpTb3VyY2VUZXh0dXJlVmFyaWFibGVdLCAwKSkKKyAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheShnSW5WZXJ0ZXhBdHRyaWJ1dGVJbmRleCkpCisgICAgR0xfQ01EKGdsVW5p
Zm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRl
ckluZm86OkluTWF0cml4VmFyaWFibGVdLCAxLCBHTF9GQUxTRSwgbTQpKQorICAgIEdMX0NNRChn
bFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xEYXRhOjpT
aGFkZXJJbmZvOjpJblNvdXJjZU1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00c3JjKSkK
ICAgICBHTF9DTUQoZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCkpCiAgICAgY29uc3Qg
R0xmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9OwogICAgIEdMX0NN
RChnbFZlcnRleEF0dHJpYlBvaW50ZXIoMCwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB1bml0
UmVjdCkpCkBAIC01ODAsMTUgKzY0NiwxNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6cGFpbnRU
b1RhcmdldChjb25zdCBCaXRtYXBUZXh0dXJlJiBhU3VyZmFjZSwgY29uc3QgSW50U2l6ZQogICAg
IHNldENsaXAodmlzaWJsZVJlY3QpOwogCiAgICAgR0xfQ01EKGdsRHJhd0FycmF5cyhHTF9UUklB
TkdMRV9GQU4sIDAsIDQpKQotICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShw
cm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OkluVmVydGV4VmFyaWFibGVdKSkKKyAg
ICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoMCkpCiAgICAgR0xfQ01EKGdsVXNl
UHJvZ3JhbSgwKSkKICAgICBHTF9DTUQoZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCkp
Ci0gICAgbV9jdXJyZW50UHJvZ3JhbSA9IFRleG1hcFNoYWRlckluZm86OlRhcmdldFByb2dyYW07
CisgICAgbV9kYXRhLT5jdXJyZW50UHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRl
ckluZm86OlRhcmdldFByb2dyYW07CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4
dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0dXJlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEJpdG1hcFRleHR1cmVHTCgpKTsKKyAgICBCaXRtYXBUZXh0dXJlR0wqIHRleHR1cmUgPSBuZXcg
Qml0bWFwVGV4dHVyZUdMKCk7CisgICAgdGV4dHVyZS0+bV90ZXh0dXJlTWFwcGVyID0gdGhpczsK
KyAgICByZXR1cm4gYWRvcHRSZWYodGV4dHVyZSk7CiB9CiAKIH07CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCmluZGV4IDdhMTJjNzIu
LmJmN2I1NTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1Rl
eHR1cmVNYXBwZXJHTC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1Rl
eHR1cmVNYXBwZXJHTC5oCkBAIC0yOSwxMSArMjksMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitjbGFzcyBUZXh0dXJlTWFwcGVyR0xEYXRhOworCiAvLyBBbiBPcGVuR0wtRVMyIGltcGxl
bWVudGF0aW9uIG9mIFRleHR1cmVNYXBwZXIuCiBjbGFzcyBUZXh0dXJlTWFwcGVyR0wgOiBwdWJs
aWMgVGV4dHVyZU1hcHBlciB7CiBwdWJsaWM6Ci0gICAgVGV4dHVyZU1hcHBlckdMKEdyYXBoaWNz
Q29udGV4dCogZ2MpOwotICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJHTCgpIHt9CisgICAgVGV4
dHVyZU1hcHBlckdMKCk7CisgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlckdMKCk7CiAKICAgICAv
LyByZWltcHMgZnJvbSBUZXh0dXJlTWFwcGVyCiAgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJl
KGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3QmLCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBU
ZXh0dXJlKiBtYXNrVGV4dHVyZSk7CkBAIC00MywxMSArNDUsMTIgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CiAg
ICAgdmlydHVhbCBjb25zdCBjaGFyKiB0eXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGNs
ZWFudXAoKTsKKyAgICB2b2lkIG9idGFpbkN1cnJlbnRDb250ZXh0KCk7CisgICAgYm9vbCBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKIAogcHJpdmF0ZToKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
X3Byb2plY3Rpb25NYXRyaXg7Ci0gICAgaW50IG1fY3VycmVudFByb2dyYW07CisgICAgVGV4dHVy
ZU1hcHBlckdMRGF0YSogbV9kYXRhOworICAgIGZyaWVuZCBjbGFzcyBCaXRtYXBUZXh0dXJlR0w7
CiB9OwogCiAvLyBBbiBvZmZzY3JlZW4gYnVmZmVyIHRvIGJlIHJlbmRlcmVkIGJ5IHNvZnR3YXJl
LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVy
UXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3Bw
CmluZGV4IDkyMzZkYWUuLjY3YTZjNzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAKQEAgLTU0LDggKzU0LDkgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBj
b25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0
cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7CiAg
ICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRDbGlwKGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCopOwogICAgIHZpcnR1YWwgYm9vbCBh
bGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBUZXh0dXJl
TWFwcGVyUXQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KTsKKyAgICBUZXh0dXJlTWFwcGVyUXQo
KTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5cGUoKSBjb25zdCB7IHJldHVybiAiVGV4dHVy
ZU1hcHBlclF0IjsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVh
dGVUZXh0dXJlKCk7CiAKQEAgLTEyMywxMiArMTI0LDE1IEBAIHZvaWQgVGV4dHVyZU1hcHBlclF0
OjpzZXRDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgIHBhaW50ZXItPnNldENsaXBSZWN0
KHJlY3QpOwogfQogCi1UZXh0dXJlTWFwcGVyUXQ6OlRleHR1cmVNYXBwZXJRdChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQpCi0gICAgOiBUZXh0dXJlTWFwcGVyKGNvbnRleHQpCi0gICAgLCBtX3Bh
aW50ZXIoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpCi0gICAgLCBtX2N1cnJlbnRTdXJmYWNl
KDApCitUZXh0dXJlTWFwcGVyUXQ6OlRleHR1cmVNYXBwZXJRdCgpCisgICAgOiBtX2N1cnJlbnRT
dXJmYWNlKDApCiB7Ci0gICAgVGV4dHVyZU1hcHBlclF0Ojppbml0aWFsaXplKG1fcGFpbnRlcik7
Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclF0OjpzZXRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0KQoreworICAgIG1fcGFpbnRlciA9IGNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpOworICAgIGluaXRpYWxpemUobV9wYWludGVyKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFw
cGVyUXQ6OmJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpCkBAIC0xODEsMTAgKzE4
NSwxMiBAQCB2b2lkIFRleHR1cmVNYXBwZXJRdDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4
dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdAogUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVy
PiBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQogewogI2lm
ZGVmIFFUX09QRU5HTF9MSUIKLSAgICBpZiAoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnBh
aW50RW5naW5lKCktPnR5cGUoKSA9PSBRUGFpbnRFbmdpbmU6Ok9wZW5HTDIpCi0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlckdMKGNvbnRleHQpKTsKKyAgICBpZiAoY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnBhaW50RW5naW5lKCktPnR5cGUoKSA9PSBRUGFpbnRF
bmdpbmU6Ok9wZW5HTDIpIHsKKyAgICAgICAgVGV4dHVyZU1hcHBlckdMKiB0ZXhtYXBHTCA9IG5l
dyBUZXh0dXJlTWFwcGVyR0w7CisgICAgICAgIHJldHVybiBhZG9wdFJlZih0ZXhtYXBHTCk7Cisg
ICAgfQogI2VuZGlmCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyUXQoY29u
dGV4dCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclF0KTsKIH0KIAog
CkBAIC0xOTQsNiArMjAwLDggQEAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFw
cGVyUXQ6OmNyZWF0ZVRleHR1cmUoKQogfQogCiAjaWZkZWYgUVRfT1BFTkdMX0xJQgorCisKIGNs
YXNzIFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyUXQgOiBwdWJsaWMgUkdCQTMyUHJlbXVsdGlt
cGxpZWRCdWZmZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgcmVjdCwgYm9vbCBvcGFxdWUpCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggMDU3YmNmYy4uNTRlNmM3YSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyLmNwcApAQCAtNDAsNyArNDAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBzdHJ1Y3QgVGV4bWFwUGFpbnRPcHRpb25zIHsKICAgICBCaXRtYXBUZXh0dXJlKiBzdXJmYWNl
OwogICAgIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXI7Ci0gICAgR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0OwogICAgIFRleHR1cmVNYXBwZXJOb2RlKiByb290TGF5ZXI7CiAgICAgZmxvYXQg
b3BhY2l0eTsKICAgICBJbnRSZWN0IHNjaXNzb3JSZWN0OwpAQCAtMjE0LDcgKzIxMyw3IEBAIHB1
YmxpYzoKICAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KIAogICAg
IHZpcnR1YWwgdm9pZCBzZXRQbGF0Zm9ybUxheWVyQ2xpZW50KFRleHR1cmVNYXBwZXJMYXllckNs
aWVudCopOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJ
bnRTaXplJiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UmVjdCYgZXhwb3Nl
ZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNp
dHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChUZXh0dXJlTWFwcGVyKiwgY29uc3QgVGV4dHVy
ZU1hcHBlckNvbnRlbnRMYXllcjo6UGFpbnRPcHRpb25zJik7CiAKICAgICBzdGF0aWMgVGV4dHVy
ZU1hcHBlck5vZGUqIHRvVGV4dHVyZU1hcHBlck5vZGUoR3JhcGhpY3NMYXllciopOwogcHVibGlj
OgpAQCAtMzk4LDcgKzM5Nyw3IEBAIGJvb2wgVGV4dHVyZU1hcHBlck5vZGU6Omhhc1N1cmZhY2VE
ZXNjZW5kYW50cygpIGNvbnN0CiAKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBJbnRS
ZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0JiBleHBvc2VkUmVjdCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSkKK3ZvaWQgVGV4dHVyZU1h
cHBlck5vZGU6OnBhaW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IFRleHR1
cmVNYXBwZXJDb250ZW50TGF5ZXI6OlBhaW50T3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBBU1NF
UlQobV9sYXllclR5cGUgPT0gUm9vdExheWVyKTsKICAgICBpZiAobV9zaXplLmlzRW1wdHkoKSkK
QEAgLTQwOSw4ICs0MDgsNiBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbgogICAgICgiW1RleHR1
cmVNYXBwZXJdIFJvb3RQYWludCEhXG4iKTsKICNlbmRpZgogCi0gICAgUmVmUHRyPFRleHR1cmVN
YXBwZXI+IHRleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoY29udGV4dCk7Ci0K
ICAgICBpZiAodGV4dHVyZU1hcHBlci0+dHlwZSgpICE9IG1fbGFzdFRleHR1cmVNYXBwZXJUeXBl
KQogICAgICAgICBnVGV4dHVyZU1hcHBlckNhY2hlLm1fZGF0YS5jbGVhcigpOwogCkBAIC00MTgs
MTYgKzQxNSwxNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbgogICAgIFRleG1hcFBhaW50T3B0
aW9ucyBvcHQ7CiAgICAgb3B0Lm9wYWNpdHkgPSAxOwogICAgIG9wdC5yb290TGF5ZXIgPSB0aGlz
OwotICAgIG9wdC5zY2lzc29yUmVjdCA9IHRhcmdldFJlY3Q7Ci0gICAgb3B0LnZpc2libGVSZWN0
ID0gZXhwb3NlZFJlY3Q7Ci0gICAgb3B0LnRleHR1cmVNYXBwZXIgPSB0ZXh0dXJlTWFwcGVyLmdl
dCgpOwotICAgIG9wdC5jb250ZXh0ID0gdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0KCk7
CisgICAgb3B0LnNjaXNzb3JSZWN0ID0gb3B0aW9ucy50YXJnZXRSZWN0OworICAgIG9wdC52aXNp
YmxlUmVjdCA9IG9wdGlvbnMudmlzaWJsZVJlY3Q7CisgICAgb3B0LnRleHR1cmVNYXBwZXIgPSB0
ZXh0dXJlTWFwcGVyOwogICAgIG9wdC5zdXJmYWNlID0gMDsKICAgICBwYWludFJlY3Vyc2l2ZShv
cHQpOwogCiAgICAgaWYgKHRleHR1cmVNYXBwZXItPmFsbG93U3VyZmFjZUZvclJvb3QoKSB8fCBt
X3N0YXRlLmhhc1N1cmZhY2VEZXNjZW5kYW50cykgewogICAgICAgICB0ZXh0dXJlTWFwcGVyLT5i
aW5kU3VyZmFjZSgwKTsKLSAgICAgICAgdGV4dHVyZU1hcHBlci0+cGFpbnRUb1RhcmdldCgqbV9z
dXJmYWNlLmdldCgpLCBzaXplLCB0cmFuc2Zvcm0sIG9wYWNpdHkgKiBtX3N0YXRlLm9wYWNpdHks
IHRhcmdldFJlY3QpOworICAgICAgICB0ZXh0dXJlTWFwcGVyLT5wYWludFRvVGFyZ2V0KCptX3N1
cmZhY2UuZ2V0KCksIG9wdGlvbnMudmlld3BvcnRTaXplLCBvcHRpb25zLnRyYW5zZm9ybSwgb3B0
aW9ucy5vcGFjaXR5ICogbV9zdGF0ZS5vcGFjaXR5LCBvcHRpb25zLnRhcmdldFJlY3QpOwogICAg
IH0KICAgICBnVGV4dHVyZU1hcHBlckNhY2hlLnB1cmdlKCk7CiB9CkBAIC02OTIsMTAgKzY4OCw5
IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnVwbG9hZFRleHR1cmVGcm9tQ29udGVudChUZXh0
dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjCiAKICAgICB7CiAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dCBjb250ZXh0KG1fdGV4dHVyZS0+YmVnaW5QYWludChkaXJ0eVJlY3QpKTsKLSAgICAgICAg
aWYgKHRleHR1cmVNYXBwZXIgJiYgdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0KCkpIHsK
LSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogb3JpZ2luYWxDb250ZXh0ID0gdGV4dHVyZU1h
cHBlci0+Z3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgICAgICAgICBjb250ZXh0LnNldEltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHkob3JpZ2luYWxDb250ZXh0LT5pbWFnZUludGVycG9sYXRpb25RdWFs
aXR5KCkpOwotICAgICAgICAgICAgY29udGV4dC5zZXRUZXh0RHJhd2luZ01vZGUob3JpZ2luYWxD
b250ZXh0LT50ZXh0RHJhd2luZ01vZGUoKSk7CisgICAgICAgIGlmICh0ZXh0dXJlTWFwcGVyKSB7
CisgICAgICAgICAgICBjb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkodGV4dHVy
ZU1hcHBlci0+aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICAgICAgICAgIGNvbnRl
eHQuc2V0VGV4dERyYXdpbmdNb2RlKHRleHR1cmVNYXBwZXItPnRleHREcmF3aW5nTW9kZSgpKTsK
ICAgICAgICAgfQogICAgICAgICBtX2xheWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhj
b250ZXh0LCBkaXJ0eVJlY3QpOwogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaAppbmRleCAwM2MxYzZkLi4yNzZiMjAwIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCkBAIC0x
LDQgKzEsNCBAQAotLyoKKyAvKgogIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKIAogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTk3LDIwICs5NywzMCBA
QCBwdWJsaWM6CiAgICAgICAgIGRyYXdUZXh0dXJlKHRleHR1cmUsIEludFJlY3QoMCwgMCwgdGV4
dHVyZS5jb250ZW50U2l6ZSgpLndpZHRoKCksIHRleHR1cmUuY29udGVudFNpemUoKS5oZWlnaHQo
KSksIG1hdHJpeCwgb3BhY2l0eSwgMCk7CiAgICAgfQogCisgICAgdmlydHVhbCB2b2lkIHNldEdy
YXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0
Q2xpcChjb25zdCBJbnRSZWN0JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VG
b3JSb290KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJl
PiBjcmVhdGVUZXh0dXJlKCkgPSAwOwogICAgIHZpcnR1YWwgY29uc3QgY2hhciogdHlwZSgpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cCgpIHt9CiAKLSAgICBHcmFwaGljc0Nv
bnRleHQqIGdyYXBoaWNzQ29udGV4dCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9n
YzsKLSAgICB9CisgICAgdm9pZCBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9s
YXRpb25RdWFsaXR5IHF1YWxpdHkpIHsgbV9pbnRlcnBvbGF0aW9uUXVhbGl0eSA9IHF1YWxpdHk7
IH0KKyAgICB2b2lkIHNldFRleHREcmF3aW5nTW9kZShpbnQgbW9kZSkgeyBtX3RleHREcmF3aW5n
TW9kZSA9IG1vZGU7IH0KKworICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBtX2ludGVycG9sYXRpb25RdWFsaXR5OyB9Cisg
ICAgaW50IHRleHREcmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dERyYXdpbmdNb2Rl
OyB9CisKKyAgICB2b2lkIHNldFZpZXdwb3J0U2l6ZShjb25zdCBJbnRTaXplJik7CiAKIHByb3Rl
Y3RlZDoKLSAgICBUZXh0dXJlTWFwcGVyKEdyYXBoaWNzQ29udGV4dCogZ2MpIDogbV9nYyhnYykg
e30KLSAgICBHcmFwaGljc0NvbnRleHQqIG1fZ2M7CisgICAgVGV4dHVyZU1hcHBlcigpCisgICAg
ICAgIDogbV9pbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uRGVmYXVsdCkKKyAgICAg
ICAgLCBtX3RleHREcmF3aW5nTW9kZShjVGV4dEZpbGwpCisgICAge30KKworcHJpdmF0ZToKKyAg
ICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2ludGVycG9sYXRpb25RdWFsaXR5OworICAgIGludCBt
X3RleHREcmF3aW5nTW9kZTsKIH07CiAKIH07CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaAppbmRl
eCAyM2U5ZmM5Li5hMTU2ODFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKQEAgLTI1LDYg
KzI1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xh
c3MgSW50UmVjdDsKIGNsYXNzIEludFNpemU7CitjbGFzcyBUZXh0dXJlTWFwcGVyOwogY2xhc3Mg
VHJhbnNmb3JtYXRpb25NYXRyaXg7CiAKIApAQCAtNTAsMTAgKzUxLDE3IEBAIHB1YmxpYzoKIAog
Y2xhc3MgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllciA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllciB7CiBwdWJsaWM6CisgICAgc3RydWN0IFBhaW50T3B0aW9ucyB7CisgICAgICAg
IEludFJlY3QgdmlzaWJsZVJlY3Q7CisgICAgICAgIEludFJlY3QgdGFyZ2V0UmVjdDsKKyAgICAg
ICAgSW50U2l6ZSB2aWV3cG9ydFNpemU7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRy
YW5zZm9ybTsKKyAgICAgICAgZmxvYXQgb3BhY2l0eTsKKyAgICB9OworCiAgICAgdmlydHVhbCB2
b2lkIHNldFBsYXRmb3JtTGF5ZXJDbGllbnQoVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50KikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRTaXpl
JiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UmVjdCYgZXhwb3NlZFJlY3Qs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHkpIHt9
CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFRleHR1cmVNYXBwZXIqLCBjb25zdCBQYWludE9wdGlv
bnMmKSB7fQogICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBjbGVhbnVwVGV4dHVyZU1hcHBlcigpIHt9CiAgICAgdmlydHVhbCBUeXBlIGxheWVy
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIENvbnRlbnRMYXllcjsgfQogfTsKIApkaWZmIC0tZ2l0IGEv
V2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwIGIvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3Bw
CmluZGV4IDM5ZTc0ZDkuLmI0MWE5MTEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYmZy
YW1lLmNwcAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKQEAgLTk3LDYgKzk3LDcg
QEAKICNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKICNlbmRpZgogI2lmIFVTRShURVhUVVJFX01B
UFBFUikKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgInRleG1h
cC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgogI2VuZGlmCiAjaW5jbHVkZSAid3RmL0hh
c2hNYXAuaCIKQEAgLTI5NSwxOCArMjk2LDM3IEBAIHZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6cmVu
ZGVyRnJvbVRpbGVkQmFja2luZ1N0b3JlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uCiAg
ICAgICAgIHBhaW50ZXItPnJlc3RvcmUoKTsKICAgICB9CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgLy8gVGV4dHVyZU1hcHBlciBt
aWdodCB1c2UgcmF3IE9wZW5HTCBvciBzb21lIG90aGVyIGJhY2tlbmQgdGhhdCByZXF1aXJlcyBu
YXRpdmUgcGFpbnRpbmcuIE9uIHJhc3RlciB0aGlzIGRvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0Lgot
ICAgIGlmIChyb290R3JhcGhpY3NMYXllcikgewotICAgICAgICBwYWludGVyLT5iZWdpbk5hdGl2
ZVBhaW50aW5nKCk7Ci0gICAgICAgIHJvb3RHcmFwaGljc0xheWVyLT5wYWludChjb250ZXh0LCB2
aWV3LT5zaXplKCksIHZpZXctPmZyYW1lUmVjdCgpLCBJbnRSZWN0KGNsaXAuYm91bmRpbmdSZWN0
KCkpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBwYWludGVyLT5vcGFjaXR5KCkpOwotICAgICAg
ICBwYWludGVyLT5lbmROYXRpdmVQYWludGluZygpOwotICAgIH0KLQorICAgIHJlbmRlckNvbXBv
c2l0ZWRMYXllcnMoY29udGV4dCwgSW50UmVjdChjbGlwLmJvdW5kaW5nUmVjdCgpKSk7CiAgICAg
cmVuZGVyUmVsYXRpdmVDb29yZHMoY29udGV4dCwgKFFXZWJGcmFtZTo6UmVuZGVyTGF5ZXIpKFFX
ZWJGcmFtZTo6U2Nyb2xsQmFyTGF5ZXIgfCBRV2ViRnJhbWU6OlBhbkljb25MYXllciksIGNsaXAp
OwogI2VuZGlmCiB9CiAjZW5kaWYKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykg
JiYgVVNFKFRFWFRVUkVfTUFQUEVSKQordm9pZCBRV2ViRnJhbWVQcml2YXRlOjpyZW5kZXJDb21w
b3NpdGVkTGF5ZXJzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgY2xp
cCkKK3sKKyAgICBpZiAoIXJvb3RHcmFwaGljc0xheWVyKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKCF0ZXh0dXJlTWFwcGVyKQorICAgICAgICB0ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBl
cjo6Y3JlYXRlKGNvbnRleHQpOworICAgIHRleHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4
dChjb250ZXh0KTsKKyAgICB0ZXh0dXJlTWFwcGVyLT5zZXRJbWFnZUludGVycG9sYXRpb25RdWFs
aXR5KGNvbnRleHQtPmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAgdGV4dHVyZU1h
cHBlci0+c2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQtPnRleHREcmF3aW5nTW9kZSgpKTsKKyAg
ICBRUGFpbnRlciogcGFpbnRlciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIEZy
YW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7CisgICAgcGFpbnRlci0+c2F2ZSgpOworICAg
IHBhaW50ZXItPmJlZ2luTmF0aXZlUGFpbnRpbmcoKTsKKyAgICBUZXh0dXJlTWFwcGVyQ29udGVu
dExheWVyOjpQYWludE9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRpb25zLnZpc2libGVSZWN0ID0g
Y2xpcDsKKyAgICBvcHRpb25zLnRhcmdldFJlY3QgPSB2aWV3LT5mcmFtZVJlY3QoKTsKKyAgICBv
cHRpb25zLnZpZXdwb3J0U2l6ZSA9IHZpZXctPnNpemUoKTsKKyAgICBvcHRpb25zLm9wYWNpdHkg
PSBwYWludGVyLT5vcGFjaXR5KCk7CisgICAgcm9vdEdyYXBoaWNzTGF5ZXItPnBhaW50KHRleHR1
cmVNYXBwZXIuZ2V0KCksIG9wdGlvbnMpOworICAgIHBhaW50ZXItPmVuZE5hdGl2ZVBhaW50aW5n
KCk7CisgICAgcGFpbnRlci0+cmVzdG9yZSgpOworfQorI2VuZGlmCisKIHZvaWQgUVdlYkZyYW1l
UHJpdmF0ZTo6cmVuZGVyUmVsYXRpdmVDb29yZHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBR
V2ViRnJhbWU6OlJlbmRlckxheWVyIGxheWVyLCBjb25zdCBRUmVnaW9uJiBjbGlwKQogewogICAg
IGlmICghZnJhbWUtPnZpZXcoKSB8fCAhZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQpAQCAtMzQ5
LDE2ICszNjksOCBAQCB2b2lkIFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlclJlbGF0aXZlQ29vcmRz
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUVdlYkZyYW1lOgogICAgICAgICAgICAgY29udGV4
dC0+cmVzdG9yZSgpOwogICAgICAgICB9CiAgICAgICAgIHBhaW50ZXItPnJlc3RvcmUoKTsKLQog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQot
ICAgICAgICBpZiAocm9vdEdyYXBoaWNzTGF5ZXIpIHsKLSAgICAgICAgICAgIHBhaW50ZXItPnNh
dmUoKTsKLSAgICAgICAgICAgIHBhaW50ZXItPmJlZ2luTmF0aXZlUGFpbnRpbmcoKTsKLSAgICAg
ICAgICAgIHJvb3RHcmFwaGljc0xheWVyLT5wYWludChjb250ZXh0LCB2aWV3LT5zaXplKCksIHZp
ZXctPmZyYW1lUmVjdCgpLCBJbnRSZWN0KGNsaXAuYm91bmRpbmdSZWN0KCkpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5vcGFjaXR5KCkpOwotICAgICAgICAgICAgcGFpbnRlci0+
ZW5kTmF0aXZlUGFpbnRpbmcoKTsKLSAgICAgICAgICAgIHBhaW50ZXItPnJlc3RvcmUoKTsKLSAg
ICAgICAgfQorICAgICAgICByZW5kZXJDb21wb3NpdGVkTGF5ZXJzKGNvbnRleHQsIEludFJlY3Qo
Y2xpcC5ib3VuZGluZ1JlY3QoKSkpOwogI2VuZGlmCiAgICAgfQogICAgIGlmIChsYXllciAmIChR
V2ViRnJhbWU6OlBhbkljb25MYXllciB8IFFXZWJGcmFtZTo6U2Nyb2xsQmFyTGF5ZXIpKSB7CmRp
ZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmggYi9XZWJLaXQvcXQvQXBpL3F3
ZWJmcmFtZV9wLmgKaW5kZXggNTY2MGJkMS4uNjM0ZTIxYiAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0
L0FwaS9xd2ViZnJhbWVfcC5oCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaApAQCAt
MzMsNiArMzMsMTAgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlZpZXdwb3J0QXJn
dW1lbnRzLmgiCiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhU
VVJFX01BUFBFUikKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlci5oIgorI2VuZGlmCisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBGcmFtZUxvYWRlckNsaWVudFF0OwogICAg
IGNsYXNzIEZyYW1lVmlldzsKQEAgLTk0LDYgKzk4LDkgQEAgcHVibGljOgogICAgIHZvaWQgcmVu
ZGVyRnJvbVRpbGVkQmFja2luZ1N0b3JlKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IFFSZWdpb24mIGNsaXApOwogI2VuZGlmCiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICB2b2lkIHJlbmRlckNvbXBvc2l0ZWRMYXll
cnMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBjbGlwKTsKKyNlbmRpZgogICAgIFFXZWJGcmFtZSAqcTsKICAgICBRdDo6U2Nyb2xsQmFy
UG9saWN5IGhvcml6b250YWxTY3JvbGxCYXJQb2xpY3k7CiAgICAgUXQ6OlNjcm9sbEJhclBvbGlj
eSB2ZXJ0aWNhbFNjcm9sbEJhclBvbGljeTsKQEAgLTEwNiw2ICsxMTMsNyBAQCBwdWJsaWM6CiAg
ICAgaW50IG1hcmdpbkhlaWdodDsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYm
IFVTRShURVhUVVJFX01BUFBFUikKICAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ29udGVudExh
eWVyKiByb290R3JhcGhpY3NMYXllcjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBl
cj4gdGV4dHVyZU1hcHBlcjsKICNlbmRpZgogICAgIGJvb2wgem9vbVRleHRPbmx5OwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72437</attachid>
            <date>2010-10-30 08:33:04 -0700</date>
            <delta_ts>2010-11-10 14:03:38 -0800</delta_ts>
            <desc>Revised after Kenneth&apos;s comments</desc>
            <filename>patch-47070-10.diff</filename>
            <type>text/plain</type>
            <size>36087</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWQ0ZTc5YS4uZDA4YzkyYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxMC0xMC0yOSAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5p
dGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDcwNzAKKworICAgICAgICBTb21lIHJlZmFjdG9yIGZvciB0ZXhtYXAgdG8g
ZW5hYmxlIFdlYktpdDI6IHJlbW92ZSBnbG9iYWxzLCBhbmQgYWxsb3cgVGV4dHVyZU1hcHBlciB0
byBleGlzdCB3aXRob3V0IGEgR3JhcGhpY3NDb250ZXh0LgorICAgICAgICBUaGlzIHdpbGwgYWxs
b3cgcmVuZGVyaW5nIHRoZSBUZXh0dXJlTWFwcGVyTm9kZSB0cmVlIHdpdGhvdXQgYW4gYWN0aXZl
IFFQYWludGVyLCBpbnRvIHRoZSBjdXJyZW50IEdMIGNvbnRleHQuCisgICAgICAgIE1vc3Qgb2Yg
dGhlIGNoYW5nZXMgc2ltcGx5IG1vdmUgdGhlIGdsb2JhcyBpbiBUZXh0dXJlTWFwcGVyR0wgaW50
byBtZW1iZXJzIG9mIHRoYXQgY2xhc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBPbGQgdGVz
dHMgaW4gTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcgY292ZXIgdGhpcy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6U2hhZGVySW5mbzo6Z2V0VW5pZm9ybUxvY2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTFByaXZhdGU6OlNoYWRlcklu
Zm86OmNyZWF0ZVNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckdMUHJpdmF0ZTo6RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZXBvc2l0b3J5OjpmaW5kT3JDcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6RGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2VSZXBvc2l0b3J5OjpkZXJlZik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0xQcml2YXRlOjpEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnk6OkRp
cmVjdGx5Q29tcG9zaXRlZEltYWdlUmVwb3NpdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0xQcml2YXRlOjpEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnk6On5E
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckdMUHJpdmF0ZTo6VGV4dHVyZU1hcHBlckdMUHJpdmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcFRleHR1cmVHTDo6c2V0Q29udGVudHNUb0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcFRleHR1cmVHTDo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
R0w6On5UZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjpvYnRhaW5DdXJyZW50Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
R0w6OmJpbmRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6cGFp
bnRUb1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZVRl
eHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVy
R0wuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclF0OjpUZXh0dXJlTWFwcGVyUXQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclF0OjpzZXRHcmFwaGljc0NvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJOb2RlOjp1cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpzZXRHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlcjo6c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpzZXRUZXh0RHJhd2luZ01vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjp0ZXh0RHJhd2luZ01vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6VGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ29udGVudExheWVyOjpwYWludCk6CisKIDIwMTAt
MTAtMjggIE5vYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEFyaXlhIEhpZGF5YXQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCA5NjY2NTZiLi42MDE1
ODU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJl
TWFwcGVyR0wuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1
cmVNYXBwZXJHTC5jcHAKQEAgLTMwLDggKzMwLDEyIEBACiAjaWYgZGVmaW5lZChURVhNQVBfT1BF
TkdMX0VTXzIpCiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAjZWxpZiBPUyhNQUNfT1NfWCkKKyNp
bmNsdWRlIDxBR0wvYWdsLmg+CiAjaW5jbHVkZSA8Z2wuaD4KICNlbHNlCisjaWYgT1MoVU5JWCkK
KyNpbmNsdWRlIDxHTC9nbHguaD4KKyNlbmRpZgogI2luY2x1ZGUgPEdML2dsLmg+CiAjZW5kaWYK
IApAQCAtOTAsNiArOTQsMTMyIEBAIGlubGluZSBzdGF0aWMgdm9pZCBkZWJ1Z0dMQ29tbWFuZChj
b25zdCBjaGFyKiBjb21tYW5kLCBpbnQgbGluZSkKICNkZWZpbmUgR0xfQ01EKHgpIHgKICNlbmRp
ZgogCitzdGF0aWMgY29uc3QgR0x1aW50IGdJblZlcnRleEF0dHJpYnV0ZUluZGV4ID0gMDsKKwor
c3RydWN0IFRleHR1cmVNYXBwZXJHTERhdGEgeworICAgIHN0YXRpYyBzdHJ1Y3QgU2hhZGVySW5m
byB7CisgICAgICAgIGVudW0gU2hhZGVyUHJvZ3JhbUluZGV4IHsKKyAgICAgICAgICAgIFNpbXBs
ZVByb2dyYW0sCisgICAgICAgICAgICBPcGFjaXR5QW5kTWFza1Byb2dyYW0sCisgICAgICAgICAg
ICBUYXJnZXRQcm9ncmFtLAorCisgICAgICAgICAgICBQcm9ncmFtQ291bnQKKyAgICAgICAgfTsK
KworICAgICAgICBlbnVtIFNoYWRlclZhcmlhYmxlSW5kZXggeworICAgICAgICAgICAgSW5NYXRy
aXhWYXJpYWJsZSwKKyAgICAgICAgICAgIEluU291cmNlTWF0cml4VmFyaWFibGUsCisgICAgICAg
ICAgICBJbk1hc2tNYXRyaXhWYXJpYWJsZSwKKyAgICAgICAgICAgIE9wYWNpdHlWYXJpYWJsZSwK
KyAgICAgICAgICAgIFNvdXJjZVRleHR1cmVWYXJpYWJsZSwKKyAgICAgICAgICAgIE1hc2tUZXh0
dXJlVmFyaWFibGUsCisKKyAgICAgICAgICAgIFZhcmlhYmxlQ291bnQKKyAgICAgICAgfTsKKwor
ICAgICAgICBzdHJ1Y3QgUHJvZ3JhbUluZm8geworICAgICAgICAgICAgR0x1aW50IGlkOworICAg
ICAgICAgICAgR0xpbnQgdmFyc1tWYXJpYWJsZUNvdW50XTsKKyAgICAgICAgfTsKKworICAgICAg
ICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oU2hhZGVyUHJvZ3JhbUluZGV4IHByb2csIFNoYWRl
clZhcmlhYmxlSW5kZXggdmFyLCBjb25zdCBjaGFyKiBuYW1lKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gcHJvZ3JhbXNbcHJvZ10udmFyc1t2YXJdID0gZ2xHZXRVbmlmb3JtTG9jYXRp
b24ocHJvZ3JhbXNbcHJvZ10uaWQsIG5hbWUpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBj
cmVhdGVTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3Qg
Y2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UsIFNoYWRlclByb2dyYW1JbmRleCBpbmRleCkKKyAg
ICAgICAgeworICAgICAgICAgICAgR0x1aW50IHZlcnRleFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVy
KEdMX1ZFUlRFWF9TSEFERVIpOworICAgICAgICAgICAgR0x1aW50IGZyYWdtZW50U2hhZGVyID0g
Z2xDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKKyAgICAgICAgICAgIEdMX0NNRChn
bFNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2UsIDApKQor
ICAgICAgICAgICAgR0xfQ01EKGdsU2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCAxLCAmZnJh
Z21lbnRTaGFkZXJTb3VyY2UsIDApKQorICAgICAgICAgICAgR0x1aW50IHByb2dyYW1JRCA9IGds
Q3JlYXRlUHJvZ3JhbSgpOworICAgICAgICAgICAgR0xfQ01EKGdsQ29tcGlsZVNoYWRlcih2ZXJ0
ZXhTaGFkZXIpKQorICAgICAgICAgICAgR0xfQ01EKGdsQ29tcGlsZVNoYWRlcihmcmFnbWVudFNo
YWRlcikpCisgICAgICAgICAgICBHTF9DTUQoZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2ZXJ0
ZXhTaGFkZXIpKQorICAgICAgICAgICAgR0xfQ01EKGdsQXR0YWNoU2hhZGVyKHByb2dyYW1JRCwg
ZnJhZ21lbnRTaGFkZXIpKQorICAgICAgICAgICAgR0xfQ01EKGdsQmluZEF0dHJpYkxvY2F0aW9u
KHByb2dyYW1JRCwgZ0luVmVydGV4QXR0cmlidXRlSW5kZXgsICJJblZlcnRleCIpKQorICAgICAg
ICAgICAgR0xfQ01EKGdsTGlua1Byb2dyYW0ocHJvZ3JhbUlEKSkKKyAgICAgICAgICAgIHByb2dy
YW1zW2luZGV4XS5pZCA9IHByb2dyYW1JRDsKKyNpZmRlZiBQUklOVF9QUk9HUkFNX0lORk9fTE9H
CisgICAgICAgICAgICBjaGFyIGluZm9Mb2dbMTAyNF07CisgICAgICAgICAgICBpbnQgbGVuOwor
ICAgICAgICAgICAgR0xfQ01EKGdsR2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbUlELCAxMDI0LCAm
bGVuLCBpbmZvTG9nKSk7CisgICAgICAgICAgICBMT0coR3JhcGhpY3MsICJDb21waWxlZCBwcm9n
cmFtIGZvciB0ZXh0dXJlIG1hcHBlci4gTG9nOiAlc1xuIiwgaW5mb0xvZyk7CisjZW5kaWYKKyAg
ICAgICAgfQorCisgICAgICAgIFByb2dyYW1JbmZvIHByb2dyYW1zW1Byb2dyYW1Db3VudF07CisK
KyAgICB9IHNoYWRlckluZm87CisKKyAgICBzdHJ1Y3QgRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VS
ZXBvc2l0b3J5IHsKKyAgICAgICAgc3RydWN0IEVudHJ5IHsKKyAgICAgICAgICAgIEdMdWludCB0
ZXh0dXJlOworICAgICAgICAgICAgaW50IHJlZkNvdW50OworICAgICAgICB9OworICAgICAgICBI
YXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBFbnRyeT4gaW1hZ2VUb1RleHR1cmU7CisKKyAgICAgICAg
R0x1aW50IGZpbmRPckNyZWF0ZShOYXRpdmVJbWFnZVB0ciBpbWFnZSwgYm9vbCYgZm91bmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIsIEVudHJ5Pjo6aXRl
cmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5maW5kKGltYWdlKTsKKyAgICAgICAgICAgIGZvdW5k
ID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoaXQgIT0gaW1hZ2VUb1RleHR1cmUuZW5kKCkpIHsK
KyAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLnJlZkNvdW50Kys7CisgICAgICAgICAgICAgICAg
Zm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kLnRleHR1cmU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBFbnRyeSBlbnRyeTsKKyAgICAgICAgICAgIEdM
X0NNRChnbEdlblRleHR1cmVzKDEsICZlbnRyeS50ZXh0dXJlKSk7CisgICAgICAgICAgICBlbnRy
eS5yZWZDb3VudCA9IDE7CisgICAgICAgICAgICBpbWFnZVRvVGV4dHVyZS5hZGQoaW1hZ2UsIGVu
dHJ5KTsKKyAgICAgICAgICAgIHJldHVybiBlbnRyeS50ZXh0dXJlOworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBkZXJlZihOYXRpdmVJbWFnZVB0ciBpbWFnZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgSGFzaE1hcDxOYXRpdmVJbWFnZVB0ciwgRW50cnk+OjppdGVyYXRvciBpdCA9IGltYWdl
VG9UZXh0dXJlLmZpbmQoaW1hZ2UpOworICAgICAgICAgICAgaWYgKGl0ICE9IGltYWdlVG9UZXh0
dXJlLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQucmVmQ291bnQgPCAy
KSB7CisgICAgICAgICAgICAgICAgICAgIGltYWdlVG9UZXh0dXJlLnJlbW92ZShpdCk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIERp
cmVjdGx5Q29tcG9zaXRlZEltYWdlUmVwb3NpdG9yeSgpCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIH5EaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnkoKQorICAgICAgICB7
CisgICAgICAgICAgICBmb3IgKEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIsIEVudHJ5Pjo6aXRlcmF0
b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5iZWdpbigpOyBpdCAhPSBpbWFnZVRvVGV4dHVyZS5lbmQo
KTsgKytpdCkgeworICAgICAgICAgICAgICAgIEdMdWludCB0ZXh0dXJlID0gaXQtPnNlY29uZC50
ZXh0dXJlOworICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlKQorICAgICAgICAgICAgICAgICAg
ICBHTF9DTUQoZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSkpOworICAgICAgICAgICAgfQor
CisgICAgICAgIH0KKyAgICB9IGRpcmVjdGx5Q29tcG9zaXRlZEltYWdlczsKKworICAgIFRleHR1
cmVNYXBwZXJHTERhdGEoKQorICAgICAgICA6IGN1cnJlbnRQcm9ncmFtKFRleHR1cmVNYXBwZXJH
TERhdGE6OlNoYWRlckluZm86OlRhcmdldFByb2dyYW0pCisgICAgeyB9CisKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBwcm9qZWN0aW9uTWF0cml4OworICAgIGludCBjdXJyZW50UHJvZ3JhbTsK
KworI2lmIE9TKE1BQ19PU19YKQorICAgIEFHTENvbnRleHQgYWdsQ29udGV4dDsKKyNlbGlmIE9T
KFVOSVgpCisgICAgRHJhd2FibGUgZ2x4RHJhd2FibGU7CisgICAgR0xYQ29udGV4dCBnbHhDb250
ZXh0OworI2VuZGlmCit9OworCitUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvIFRleHR1
cmVNYXBwZXJHTERhdGE6OnNoYWRlckluZm87CisKIGNsYXNzIEJpdG1hcFRleHR1cmVHTCA6IHB1
YmxpYyBCaXRtYXBUZXh0dXJlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgp
OwpAQCAtMTExLDYgKzI0MSw3IEBAIHByaXZhdGU6CiAgICAgR0x1aW50IG1fZmJvOwogICAgIElu
dFNpemUgbV9hY3R1YWxTaXplOwogICAgIGJvb2wgbV9zdXJmYWNlTmVlZHNSZXNldDsKKyAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlckdMPiBtX3RleHR1cmVNYXBwZXI7CiAgICAgQml0bWFwVGV4dHVy
ZUdMKCkKICAgICAgICAgOiBtX2lkKDApCiAgICAgICAgICwgbV9pbWFnZSgwKQpAQCAtMTIzLDcy
ICsyNTQsMjEgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlckdMOwog
fTsKIAotc3RhdGljIHN0cnVjdCBUZXhtYXBTaGFkZXJJbmZvIHsKLSAgICBlbnVtIFNoYWRlclBy
b2dyYW1JbmRleCB7Ci0gICAgICAgIFNpbXBsZVByb2dyYW0sCi0gICAgICAgIE9wYWNpdHlBbmRN
YXNrUHJvZ3JhbSwKLSAgICAgICAgVGFyZ2V0UHJvZ3JhbSwKLSAgICAgICAgTnVtUHJvZ3JhbXMK
LSAgICB9OwotCi0gICAgZW51bSBTaGFkZXJWYXJpYWJsZUluZGV4IHsKLSAgICAgICAgSW5NYXRy
aXhWYXJpYWJsZSwKLSAgICAgICAgSW5Tb3VyY2VNYXRyaXhWYXJpYWJsZSwKLSAgICAgICAgSW5N
YXNrTWF0cml4VmFyaWFibGUsCi0gICAgICAgIEluVmVydGV4VmFyaWFibGUsCiAKLSAgICAgICAg
T3BhY2l0eVZhcmlhYmxlLAotICAgICAgICBTb3VyY2VUZXh0dXJlVmFyaWFibGUsCi0gICAgICAg
IE1hc2tUZXh0dXJlVmFyaWFibGUsCi0gICAgICAgIE51bVZhcmlhYmxlcwotICAgIH07Ci0KLSAg
ICBzdHJ1Y3QgUHJvZ3JhbUluZm8gewotICAgICAgICBHTHVpbnQgaWQ7Ci0gICAgICAgIEdMaW50
IHZhcnNbTnVtVmFyaWFibGVzXTsKLSAgICB9OwotCi0gICAgR0xpbnQgZ2V0VW5pZm9ybUxvY2F0
aW9uKFNoYWRlclByb2dyYW1JbmRleCBwcm9nLCBTaGFkZXJWYXJpYWJsZUluZGV4IHZhciwgY29u
c3QgY2hhciogbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBwcm9ncmFtc1twcm9nXS52YXJz
W3Zhcl0gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtc1twcm9nXS5pZCwgbmFtZSk7Ci0g
ICAgfQotCi0gICAgdm9pZCBjcmVhdGVTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRleFNo
YWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UsIFNoYWRlclByb2dy
YW1JbmRleCBpbmRleCkKLSAgICB7Ci0gICAgICAgIEdMdWludCB2ZXJ0ZXhTaGFkZXIgPSBnbENy
ZWF0ZVNoYWRlcihHTF9WRVJURVhfU0hBREVSKTsKLSAgICAgICAgR0x1aW50IGZyYWdtZW50U2hh
ZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKLSAgICAgICAgR0xfQ01E
KGdsU2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgMSwgJnZlcnRleFNoYWRlclNvdXJjZSwgMCkp
Ci0gICAgICAgIEdMX0NNRChnbFNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgMSwgJmZyYWdt
ZW50U2hhZGVyU291cmNlLCAwKSkKLSAgICAgICAgR0x1aW50IHByb2dyYW1JRCA9IGdsQ3JlYXRl
UHJvZ3JhbSgpOwotICAgICAgICBHTF9DTUQoZ2xDb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcikp
Ci0gICAgICAgIEdMX0NNRChnbENvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpKQotICAgICAg
ICBHTF9DTUQoZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2ZXJ0ZXhTaGFkZXIpKQotICAgICAg
ICBHTF9DTUQoZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNoYWRlcikpCi0gICAg
ICAgIEdMX0NNRChnbEJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsIDAsICJJblZlcnRleCIp
KQotICAgICAgICBHTF9DTUQoZ2xMaW5rUHJvZ3JhbShwcm9ncmFtSUQpKQotICAgICAgICBwcm9n
cmFtc1tpbmRleF0uaWQgPSBwcm9ncmFtSUQ7Ci0gICAgICAgIGNoYXIgaW5mb0xvZ1sxMDI0XTsK
LSAgICAgICAgaW50IGxlbjsKLSAgICAgICAgR0xfQ01EKGdsR2V0UHJvZ3JhbUluZm9Mb2cocHJv
Z3JhbUlELCAxMDI0LCAmbGVuLCBpbmZvTG9nKSk7Ci0gICAgfQotCi0gICAgUHJvZ3JhbUluZm8g
cHJvZ3JhbXNbTnVtUHJvZ3JhbXNdOwotCi19IGdTaGFkZXJJbmZvOwogCiAjZGVmaW5lIFRFWE1B
UF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihwcm9nLCB2YXIpIFwKLSAgICAgICAgICAgIGlmIChn
U2hhZGVySW5mby5nZXRVbmlmb3JtTG9jYXRpb24oVGV4bWFwU2hhZGVySW5mbzo6cHJvZyMjUHJv
Z3JhbSwgVGV4bWFwU2hhZGVySW5mbzo6dmFyIyNWYXJpYWJsZSwgI3ZhcikgPCAwKSBcCisgICAg
ICAgICAgICBpZiAobV9kYXRhLT5zaGFkZXJJbmZvLmdldFVuaWZvcm1Mb2NhdGlvbihUZXh0dXJl
TWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpwcm9nIyNQcm9ncmFtLCBUZXh0dXJlTWFwcGVyR0xE
YXRhOjpTaGFkZXJJbmZvOjp2YXIjI1ZhcmlhYmxlLCAjdmFyKSA8IDApIFwKICAgICAgICAgICAg
ICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZG4ndCBmaW5kIHZhcmlhYmxlICIjdmFyIiBpbiBwcm9n
cmFtICIjcHJvZyJcbiIpOwotI2RlZmluZSBURVhNQVBfQlVJTERfU0hBREVSKHByb2dyYW0pIGdT
aGFkZXJJbmZvLmNyZWF0ZVNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNlIyNwcm9ncmFt
LCBmcmFnbWVudFNoYWRlclNvdXJjZSMjcHJvZ3JhbSwgVGV4bWFwU2hhZGVySW5mbzo6cHJvZ3Jh
bSMjUHJvZ3JhbSk7CisjZGVmaW5lIFRFWE1BUF9CVUlMRF9TSEFERVIocHJvZ3JhbSkgbV9kYXRh
LT5zaGFkZXJJbmZvLmNyZWF0ZVNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNlIyNwcm9n
cmFtLCBmcmFnbWVudFNoYWRlclNvdXJjZSMjcHJvZ3JhbSwgVGV4dHVyZU1hcHBlckdMRGF0YTo6
U2hhZGVySW5mbzo6cHJvZ3JhbSMjUHJvZ3JhbSk7CiAKLVRleHR1cmVNYXBwZXJHTDo6VGV4dHVy
ZU1hcHBlckdMKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLSAgICA6IFRleHR1cmVNYXBwZXIo
Y29udGV4dCkKLSAgICAsIG1fY3VycmVudFByb2dyYW0oVGV4bWFwU2hhZGVySW5mbzo6VGFyZ2V0
UHJvZ3JhbSkKK1RleHR1cmVNYXBwZXJHTDo6VGV4dHVyZU1hcHBlckdMKCkKKyAgICA6IG1fZGF0
YShuZXcgVGV4dHVyZU1hcHBlckdMRGF0YSkKIHsKLSAgICBzdGF0aWMgYm9vbCBzaGFkZXJzQ29t
cGlsZWQgPSBmYWxzZTsKLSAgICBpZiAoc2hhZGVyc0NvbXBpbGVkKQorICAgIG9idGFpbkN1cnJl
bnRDb250ZXh0KCk7CisgICAgc3RhdGljIGJvb2wgY29tcGlsZWRTaGFkZXJzID0gZmFsc2U7Cisg
ICAgaWYgKGNvbXBpbGVkU2hhZGVycykKICAgICAgICAgcmV0dXJuOwotICAgIHNoYWRlcnNDb21w
aWxlZCA9IHRydWU7CisgICAgY29tcGlsZWRTaGFkZXJzID0gdHJ1ZTsKICNpZm5kZWYgVEVYTUFQ
X09QRU5HTF9FUzIKICNkZWZpbmUgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlMgXAogICAgICIj
ZGVmaW5lIGxvd3BcbiNkZWZpbmUgaGlnaHBcbiIKQEAgLTI4NSwxOCArMzY1LDE4IEBAIHZvaWQg
VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJl
LCBjb25zdCBJbnRSZWN0JiB0CiAKICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wmIHRleHR1cmVH
TCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KHRleHR1cmUpOwogCi0gICAg
VGV4bWFwU2hhZGVySW5mbzo6U2hhZGVyUHJvZ3JhbUluZGV4IHByb2dyYW07CisgICAgVGV4dHVy
ZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6U2hhZGVyUHJvZ3JhbUluZGV4IHByb2dyYW07CiAg
ICAgaWYgKG1hc2tUZXh0dXJlKQotICAgICAgICBwcm9ncmFtID0gVGV4bWFwU2hhZGVySW5mbzo6
T3BhY2l0eUFuZE1hc2tQcm9ncmFtOworICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlckdM
RGF0YTo6U2hhZGVySW5mbzo6T3BhY2l0eUFuZE1hc2tQcm9ncmFtOwogICAgIGVsc2UKLSAgICAg
ICAgcHJvZ3JhbSA9IFRleG1hcFNoYWRlckluZm86OlNpbXBsZVByb2dyYW07CisgICAgICAgIHBy
b2dyYW0gPSBUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpTaW1wbGVQcm9ncmFtOwog
Ci0gICAgY29uc3QgVGV4bWFwU2hhZGVySW5mbzo6UHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvID0g
Z1NoYWRlckluZm8ucHJvZ3JhbXNbcHJvZ3JhbV07Ci0gICAgaWYgKG1fY3VycmVudFByb2dyYW0g
IT0gcHJvZ3JhbSkgeworICAgIGNvbnN0IFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86
OlByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbyA9IG1fZGF0YS0+c2hhZGVySW5mby5wcm9ncmFtc1tw
cm9ncmFtXTsKKyAgICBpZiAobV9kYXRhLT5jdXJyZW50UHJvZ3JhbSAhPSBwcm9ncmFtKSB7CiAg
ICAgICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbUluZm8uaWQpKQotICAgICAgICBHTF9D
TUQoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZ1NoYWRlckluZm8ucHJvZ3JhbXNbbV9jdXJy
ZW50UHJvZ3JhbV0udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblZlcnRleFZhcmlhYmxlXSkpCi0g
ICAgICAgIG1fY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOwotICAgICAgICBHTF9DTUQoZ2xFbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86Oklu
VmVydGV4VmFyaWFibGVdKSkKKyAgICAgICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KGdJblZlcnRleEF0dHJpYnV0ZUluZGV4KSkKKyAgICAgICAgbV9kYXRhLT5jdXJyZW50UHJv
Z3JhbSA9IHByb2dyYW07CisgICAgICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KGdJblZlcnRleEF0dHJpYnV0ZUluZGV4KSkKICAgICB9CiAKICAgICBHTF9DTUQoZ2xEaXNhYmxl
KEdMX0RFUFRIX1RFU1QpKQpAQCAtMzA4LDcgKzM4OCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdM
OjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0
JiB0CiAgICAgY29uc3QgR0xmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAs
IDF9OwogICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIoMCwgMiwgR0xfRkxPQVQsIEdM
X0ZBTFNFLCAwLCB1bml0UmVjdCkpCiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgg
PSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtX3Byb2plY3Rpb25NYXRyaXgpLm11bHRMZWZ0KG1vZGVs
Vmlld01hdHJpeCkubXVsdExlZnQoVHJhbnNmb3JtYXRpb25NYXRyaXgoCisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgobV9kYXRhLT5wcm9qZWN0
aW9uTWF0cml4KS5tdWx0TGVmdChtb2RlbFZpZXdNYXRyaXgpLm11bHRMZWZ0KFRyYW5zZm9ybWF0
aW9uTWF0cml4KAogICAgICAgICAgICAgdGFyZ2V0UmVjdC53aWR0aCgpLCAwLCAwLCAwLAogICAg
ICAgICAgICAgMCwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgMCwgMCwKICAgICAgICAgICAgIDAsIDAs
IDEsIDAsCkBAIC0zMjQsMTAgKzQwNCwxMCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1Rl
eHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHRleHR1cmVHTC5tX3JlbGF0aXZl
U2l6ZS5oZWlnaHQoKSwgMCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCAwLCAxLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAs
IDAsIDF9OwotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tU
ZXhtYXBTaGFkZXJJbmZvOjpJbk1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00KSkKLSAg
ICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVy
SW5mbzo6SW5Tb3VyY2VNYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNHNyYykpCi0gICAg
R0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6U291
cmNlVGV4dHVyZVZhcmlhYmxlXSwgMCkpCi0gICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW1J
bmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6T3BhY2l0eVZhcmlhYmxlXSwgb3BhY2l0eSkpCisg
ICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleHR1cmVNYXBw
ZXJHTERhdGE6OlNoYWRlckluZm86OkluTWF0cml4VmFyaWFibGVdLCAxLCBHTF9GQUxTRSwgbTQp
KQorICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJl
TWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpJblNvdXJjZU1hdHJpeFZhcmlhYmxlXSwgMSwgR0xf
RkFMU0UsIG00c3JjKSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbUluZm8udmFyc1tU
ZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpTb3VyY2VUZXh0dXJlVmFyaWFibGVdLCAw
KSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVy
R0xEYXRhOjpTaGFkZXJJbmZvOjpPcGFjaXR5VmFyaWFibGVdLCBvcGFjaXR5KSkKIAogICAgIGlm
IChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpKSB7CiAgICAgICAgIGNvbnN0
IEJpdG1hcFRleHR1cmVHTCogbWFza1RleHR1cmVHTCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1h
cFRleHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsKQEAgLTMzNyw4ICs0MTcsOCBAQCB2b2lkIFRleHR1
cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29u
c3QgSW50UmVjdCYgdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LCBtYXNrVGV4dHVyZUdMLT5tX3JlbGF0aXZlU2l6ZS5oZWlnaHQoKSwgMCwgMCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMX07Ci0gICAgICAgIGdsVW5p
Zm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OkluTWFza01h
dHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00bWFzayk7Ci0gICAgICAgIEdMX0NNRChnbFVu
aWZvcm0xaShwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86Ok1hc2tUZXh0dXJlVmFy
aWFibGVdLCAxKSkKKyAgICAgICAgZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNb
VGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6SW5NYXNrTWF0cml4VmFyaWFibGVdLCAx
LCBHTF9GQUxTRSwgbTRtYXNrKTsKKyAgICAgICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW1J
bmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6TWFza1RleHR1cmVWYXJp
YWJsZV0sIDEpKQogICAgICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKSkK
ICAgICB9CiAKQEAgLTQwMiw0MyArNDgyLDYgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmVuZFBh
aW50KCkKICAgICBtX2J1ZmZlci5jbGVhcigpOwogfQogCi1zdHJ1Y3QgVGV4bWFwR0xTaGFkZXJU
ZXh0dXJlcyB7Ci0gICAgc3RydWN0IEVudHJ5IHsKLSAgICAgICAgR0x1aW50IHRleHR1cmU7Ci0g
ICAgICAgIGludCByZWZDb3VudDsKLSAgICB9OwotICAgIEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIs
IEVudHJ5PiBpbWFnZVRvVGV4dHVyZTsKLSAgICBHTHVpbnQgZmluZE9yQ3JlYXRlKE5hdGl2ZUlt
YWdlUHRyIGltYWdlLCBib29sJiBmb3VuZCkKLSAgICB7Ci0gICAgICAgIEhhc2hNYXA8TmF0aXZl
SW1hZ2VQdHIsIEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5maW5kKGltYWdl
KTsKLSAgICAgICAgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGl0ICE9IGltYWdlVG9UZXh0
dXJlLmVuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLnJlZkNvdW50Kys7Ci0gICAgICAg
ICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZC50ZXh0dXJl
OwotICAgICAgICB9Ci0gICAgICAgIEVudHJ5IGVudHJ5OwotICAgICAgICBHTF9DTUQoZ2xHZW5U
ZXh0dXJlcygxLCAmZW50cnkudGV4dHVyZSkpOwotICAgICAgICBlbnRyeS5yZWZDb3VudCA9IDE7
Ci0gICAgICAgIGltYWdlVG9UZXh0dXJlLmFkZChpbWFnZSwgZW50cnkpOwotICAgICAgICByZXR1
cm4gZW50cnkudGV4dHVyZTsKLSAgICB9Ci0KLSAgICBib29sIGRlcmVmKE5hdGl2ZUltYWdlUHRy
IGltYWdlKQotICAgIHsKLSAgICAgICAgSGFzaE1hcDxOYXRpdmVJbWFnZVB0ciwgRW50cnk+Ojpp
dGVyYXRvciBpdCA9IGltYWdlVG9UZXh0dXJlLmZpbmQoaW1hZ2UpOwotICAgICAgICBpZiAoaXQg
IT0gaW1hZ2VUb1RleHR1cmUuZW5kKCkpIHsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLnJl
ZkNvdW50IDwgMikgewotICAgICAgICAgICAgICAgIGltYWdlVG9UZXh0dXJlLnJlbW92ZShpdCk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX07Ci0KLXN0YXRpYyBUZXhtYXBHTFNoYWRl
clRleHR1cmVzIGdUZXh0dXJlUmVwb3NpdG9yeTsKLQogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnNl
dENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiB7CiAgICAgTmF0aXZlSW1hZ2VQdHIgbmF0
aXZlSW1hZ2UgPSBpbWFnZSA/IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIDog
MDsKQEAgLTQ1MSw3ICs0OTQsNyBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6c2V0Q29udGVudHNU
b0ltYWdlKEltYWdlKiBpbWFnZSkKICAgICBpZiAobmF0aXZlSW1hZ2UgPT0gbV9pbWFnZSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICBHTHVpbnQgbmV3VGV4
dHVyZUlEID0gZ1RleHR1cmVSZXBvc2l0b3J5LmZpbmRPckNyZWF0ZShuYXRpdmVJbWFnZSwgZm91
bmQpOworICAgIEdMdWludCBuZXdUZXh0dXJlSUQgPSBtX3RleHR1cmVNYXBwZXItPm1fZGF0YS0+
ZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmRPckNyZWF0ZShuYXRpdmVJbWFnZSwgZm91bmQp
OwogICAgIGlmIChuZXdUZXh0dXJlSUQgIT0gbV9pZCkgewogICAgICAgICBkZXN0cm95KCk7CiAg
ICAgICAgIG1faWQgPSBuZXdUZXh0dXJlSUQ7CkBAIC00NjcsNyArNTEwLDcgQEAgdm9pZCBCaXRt
YXBUZXh0dXJlR0w6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiAKIHZvaWQgQml0
bWFwVGV4dHVyZUdMOjpkZXN0cm95KCkKIHsKLSAgICBpZiAobV9pZCAmJiAoIW1faW1hZ2UgfHwg
IWdUZXh0dXJlUmVwb3NpdG9yeS5kZXJlZihtX2ltYWdlKSkpCisgICAgaWYgKG1faWQgJiYgKCFt
X2ltYWdlIHx8ICFtX3RleHR1cmVNYXBwZXItPm1fZGF0YS0+ZGlyZWN0bHlDb21wb3NpdGVkSW1h
Z2VzLmRlcmVmKG1faW1hZ2UpKSkKICAgICAgICAgR0xfQ01EKGdsRGVsZXRlVGV4dHVyZXMoMSwg
Jm1faWQpKQogICAgIGlmIChtX2ZibykKICAgICAgICAgR0xfQ01EKGdsRGVsZXRlRnJhbWVidWZm
ZXJzKDEsICZtX2ZibykpCkBAIC00OTYsOCArNTM5LDMyIEBAIHN0YXRpYyBpbmxpbmUgVHJhbnNm
b3JtYXRpb25NYXRyaXggY3JlYXRlUHJvamVjdGlvbk1hdHJpeChjb25zdCBJbnRTaXplJiBzaXpl
LCBiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCBmbGlwID8gMSA6IC0xLCAw
LCAxKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmNsZWFudXAoKQorVGV4dHVyZU1hcHBl
ckdMOjp+VGV4dHVyZU1hcHBlckdMKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBkZWxldGUgbV9kYXRhOworfQorCitib29sIFRleHR1cmVNYXBwZXJHTDo6bWFrZUNvbnRleHRD
dXJyZW50KCkKIHsKKyNpZiBPUyhNQUNfT1NfWCkKKyAgICByZXR1cm4gYWdsU2V0Q3VycmVudENv
bnRleHQobV9kYXRhLT5hZ2xDb250ZXh0KTsKKyNlbGlmIE9TKFVOSVgpCisgICAgRGlzcGxheSog
ZGlzcGxheSA9IFhPcGVuRGlzcGxheSgwKTsKKyAgICBpZiAoIWRpc3BsYXkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2xYTWFrZUN1cnJlbnQoZGlzcGxheSwgbV9kYXRhLT5n
bHhEcmF3YWJsZSwgbV9kYXRhLT5nbHhDb250ZXh0KTsKKyNlbmRpZgorfQorCit2b2lkIFRleHR1
cmVNYXBwZXJHTDo6b2J0YWluQ3VycmVudENvbnRleHQoKQoreworI2lmIE9TKE1BQ19PU19YKQor
ICAgIG1fZGF0YS0+YWdsQ29udGV4dCA9IGFnbEdldEN1cnJlbnRDb250ZXh0KCk7CisjZWxpZiBP
UyhVTklYKQorICAgIG1fZGF0YS0+Z2x4RHJhd2FibGUgPSBnbFhHZXRDdXJyZW50RHJhd2FibGUo
KTsKKyAgICBtX2RhdGEtPmdseENvbnRleHQgPSBnbFhHZXRDdXJyZW50Q29udGV4dCgpOworI2Vu
ZGlmCiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJl
ICpzdXJmYWNlUG9pbnRlcikKQEAgLTUyMyw3ICs1OTAsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJH
TDo6YmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSAqc3VyZmFjZVBvaW50ZXIpCiAgICAgfQogCiAg
ICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwgc3VyZmFjZS0+c2l6ZSgpLndpZHRoKCksIHN1cmZh
Y2UtPnNpemUoKS5oZWlnaHQoKSkpCi0gICAgbV9wcm9qZWN0aW9uTWF0cml4ID0gbWF0cml4Owor
ICAgIG1fZGF0YS0+cHJvamVjdGlvbk1hdHJpeCA9IG1hdHJpeDsKIH0KIAogdm9pZCBUZXh0dXJl
TWFwcGVyR0w6OnNldENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTU0Myw4ICs2MTAsNyBA
QCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6cGFpbnRUb1RhcmdldChjb25zdCBCaXRtYXBUZXh0dXJl
JiBhU3VyZmFjZSwgY29uc3QgSW50U2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgc3VyZmFj
ZS5tX2FjdHVhbFNpemUud2lkdGgoKSwgMCwgMCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAg
IDAsIHN1cmZhY2UubV9hY3R1YWxTaXplLmhlaWdodCgpLCAwLCAwLAogICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgMCwgMSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1cmZhY2Uub2Zm
c2V0KCkueCgpLCBzdXJmYWNlLm9mZnNldCgpLnkoKSwgMCwgMQotICAgICAgICAgICAgICAgICkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN1cmZhY2Uub2Zmc2V0KCkueCgpLCBzdXJmYWNlLm9m
ZnNldCgpLnkoKSwgMCwgMSkKICAgICAgICAgICAgICk7CiAKICAgICBjb25zdCBHTGZsb2F0IG00
W10gPSB7CkBAIC01NjAsMTggKzYyNiwxOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6cGFpbnRU
b1RhcmdldChjb25zdCBCaXRtYXBUZXh0dXJlJiBhU3VyZmFjZSwgY29uc3QgSW50U2l6ZQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDF9OwogCiAgICAgLy8g
V2UgYWxyZWFkeSBibGVuZGVkIHRoZSBhbHBoYSBpbjsgdGhlIHJlc3VsdCBpcyBwcmVtdWx0aXBs
aWVkLgotICAgIEdMX0NNRChnbFVzZVByb2dyYW0oZ1NoYWRlckluZm8ucHJvZ3JhbXNbVGV4bWFw
U2hhZGVySW5mbzo6VGFyZ2V0UHJvZ3JhbV0uaWQpKQorICAgIEdMX0NNRChnbFVzZVByb2dyYW0o
bV9kYXRhLT5zaGFkZXJJbmZvLnByb2dyYW1zW1RleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlcklu
Zm86OlRhcmdldFByb2dyYW1dLmlkKSkKICAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIDApKQogICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAsIHN1cmZhY2VTaXpl
LndpZHRoKCksIHN1cmZhY2VTaXplLmhlaWdodCgpKSkKICAgICBHTF9DTUQoZ2xEaXNhYmxlKEdM
X1NURU5DSUxfVEVTVCkpCi0gICAgY29uc3QgVGV4bWFwU2hhZGVySW5mbzo6UHJvZ3JhbUluZm8m
IHByb2dyYW1JbmZvID0gZ1NoYWRlckluZm8ucHJvZ3JhbXNbVGV4bWFwU2hhZGVySW5mbzo6VGFy
Z2V0UHJvZ3JhbV07Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW1JbmZvLnZhcnNbVGV4
bWFwU2hhZGVySW5mbzo6T3BhY2l0eVZhcmlhYmxlXSwgb3BhY2l0eSkpCisgICAgY29uc3QgVGV4
dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6UHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvID0g
bV9kYXRhLT5zaGFkZXJJbmZvLnByb2dyYW1zW1RleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlcklu
Zm86OlRhcmdldFByb2dyYW1dOworICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9ncmFtSW5mby52
YXJzW1RleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86Ok9wYWNpdHlWYXJpYWJsZV0sIG9w
YWNpdHkpKQogICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKQogICAgIEdM
X0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHN1cmZhY2UubV9pZCkpCi0gICAgR0xf
Q01EKGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6U291cmNl
VGV4dHVyZVZhcmlhYmxlXSwgMCkpCi0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJy
YXkocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblZlcnRleFZhcmlhYmxlXSkp
Ci0gICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleG1hcFNo
YWRlckluZm86OkluTWF0cml4VmFyaWFibGVdLCAxLCBHTF9GQUxTRSwgbTQpKQotICAgIEdMX0NN
RChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJ
blNvdXJjZU1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00c3JjKSkKKyAgICBHTF9DTUQo
Z2xVbmlmb3JtMWkocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJ
bmZvOjpTb3VyY2VUZXh0dXJlVmFyaWFibGVdLCAwKSkKKyAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheShnSW5WZXJ0ZXhBdHRyaWJ1dGVJbmRleCkpCisgICAgR0xfQ01EKGdsVW5p
Zm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRl
ckluZm86OkluTWF0cml4VmFyaWFibGVdLCAxLCBHTF9GQUxTRSwgbTQpKQorICAgIEdMX0NNRChn
bFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xEYXRhOjpT
aGFkZXJJbmZvOjpJblNvdXJjZU1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00c3JjKSkK
ICAgICBHTF9DTUQoZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCkpCiAgICAgY29uc3Qg
R0xmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9OwogICAgIEdMX0NN
RChnbFZlcnRleEF0dHJpYlBvaW50ZXIoMCwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB1bml0
UmVjdCkpCkBAIC01ODAsMTUgKzY0NiwxNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6cGFpbnRU
b1RhcmdldChjb25zdCBCaXRtYXBUZXh0dXJlJiBhU3VyZmFjZSwgY29uc3QgSW50U2l6ZQogICAg
IHNldENsaXAodmlzaWJsZVJlY3QpOwogCiAgICAgR0xfQ01EKGdsRHJhd0FycmF5cyhHTF9UUklB
TkdMRV9GQU4sIDAsIDQpKQotICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShw
cm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OkluVmVydGV4VmFyaWFibGVdKSkKKyAg
ICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoMCkpCiAgICAgR0xfQ01EKGdsVXNl
UHJvZ3JhbSgwKSkKICAgICBHTF9DTUQoZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCkp
Ci0gICAgbV9jdXJyZW50UHJvZ3JhbSA9IFRleG1hcFNoYWRlckluZm86OlRhcmdldFByb2dyYW07
CisgICAgbV9kYXRhLT5jdXJyZW50UHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRl
ckluZm86OlRhcmdldFByb2dyYW07CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4
dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0dXJlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEJpdG1hcFRleHR1cmVHTCgpKTsKKyAgICBCaXRtYXBUZXh0dXJlR0wqIHRleHR1cmUgPSBuZXcg
Qml0bWFwVGV4dHVyZUdMKCk7CisgICAgdGV4dHVyZS0+bV90ZXh0dXJlTWFwcGVyID0gdGhpczsK
KyAgICByZXR1cm4gYWRvcHRSZWYodGV4dHVyZSk7CiB9CiAKIH07CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCmluZGV4IDdhMTJjNzIu
LmJmN2I1NTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1Rl
eHR1cmVNYXBwZXJHTC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1Rl
eHR1cmVNYXBwZXJHTC5oCkBAIC0yOSwxMSArMjksMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitjbGFzcyBUZXh0dXJlTWFwcGVyR0xEYXRhOworCiAvLyBBbiBPcGVuR0wtRVMyIGltcGxl
bWVudGF0aW9uIG9mIFRleHR1cmVNYXBwZXIuCiBjbGFzcyBUZXh0dXJlTWFwcGVyR0wgOiBwdWJs
aWMgVGV4dHVyZU1hcHBlciB7CiBwdWJsaWM6Ci0gICAgVGV4dHVyZU1hcHBlckdMKEdyYXBoaWNz
Q29udGV4dCogZ2MpOwotICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJHTCgpIHt9CisgICAgVGV4
dHVyZU1hcHBlckdMKCk7CisgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlckdMKCk7CiAKICAgICAv
LyByZWltcHMgZnJvbSBUZXh0dXJlTWFwcGVyCiAgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJl
KGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3QmLCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBU
ZXh0dXJlKiBtYXNrVGV4dHVyZSk7CkBAIC00MywxMSArNDUsMTIgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CiAg
ICAgdmlydHVhbCBjb25zdCBjaGFyKiB0eXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGNs
ZWFudXAoKTsKKyAgICB2b2lkIG9idGFpbkN1cnJlbnRDb250ZXh0KCk7CisgICAgYm9vbCBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKIAogcHJpdmF0ZToKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
X3Byb2plY3Rpb25NYXRyaXg7Ci0gICAgaW50IG1fY3VycmVudFByb2dyYW07CisgICAgVGV4dHVy
ZU1hcHBlckdMRGF0YSogbV9kYXRhOworICAgIGZyaWVuZCBjbGFzcyBCaXRtYXBUZXh0dXJlR0w7
CiB9OwogCiAvLyBBbiBvZmZzY3JlZW4gYnVmZmVyIHRvIGJlIHJlbmRlcmVkIGJ5IHNvZnR3YXJl
LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVy
UXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3Bw
CmluZGV4IDkyMzZkYWUuLjY3YTZjNzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAKQEAgLTU0LDggKzU0LDkgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBj
b25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0
cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7CiAg
ICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRDbGlwKGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCopOwogICAgIHZpcnR1YWwgYm9vbCBh
bGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBUZXh0dXJl
TWFwcGVyUXQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KTsKKyAgICBUZXh0dXJlTWFwcGVyUXQo
KTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5cGUoKSBjb25zdCB7IHJldHVybiAiVGV4dHVy
ZU1hcHBlclF0IjsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVh
dGVUZXh0dXJlKCk7CiAKQEAgLTEyMywxMiArMTI0LDE1IEBAIHZvaWQgVGV4dHVyZU1hcHBlclF0
OjpzZXRDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgIHBhaW50ZXItPnNldENsaXBSZWN0
KHJlY3QpOwogfQogCi1UZXh0dXJlTWFwcGVyUXQ6OlRleHR1cmVNYXBwZXJRdChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQpCi0gICAgOiBUZXh0dXJlTWFwcGVyKGNvbnRleHQpCi0gICAgLCBtX3Bh
aW50ZXIoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpCi0gICAgLCBtX2N1cnJlbnRTdXJmYWNl
KDApCitUZXh0dXJlTWFwcGVyUXQ6OlRleHR1cmVNYXBwZXJRdCgpCisgICAgOiBtX2N1cnJlbnRT
dXJmYWNlKDApCiB7Ci0gICAgVGV4dHVyZU1hcHBlclF0Ojppbml0aWFsaXplKG1fcGFpbnRlcik7
Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclF0OjpzZXRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0KQoreworICAgIG1fcGFpbnRlciA9IGNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpOworICAgIGluaXRpYWxpemUobV9wYWludGVyKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFw
cGVyUXQ6OmJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpCkBAIC0xODEsMTAgKzE4
NSwxMiBAQCB2b2lkIFRleHR1cmVNYXBwZXJRdDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4
dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdAogUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVy
PiBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQogewogI2lm
ZGVmIFFUX09QRU5HTF9MSUIKLSAgICBpZiAoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnBh
aW50RW5naW5lKCktPnR5cGUoKSA9PSBRUGFpbnRFbmdpbmU6Ok9wZW5HTDIpCi0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlckdMKGNvbnRleHQpKTsKKyAgICBpZiAoY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnBhaW50RW5naW5lKCktPnR5cGUoKSA9PSBRUGFpbnRF
bmdpbmU6Ok9wZW5HTDIpIHsKKyAgICAgICAgVGV4dHVyZU1hcHBlckdMKiB0ZXhtYXBHTCA9IG5l
dyBUZXh0dXJlTWFwcGVyR0w7CisgICAgICAgIHJldHVybiBhZG9wdFJlZih0ZXhtYXBHTCk7Cisg
ICAgfQogI2VuZGlmCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyUXQoY29u
dGV4dCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclF0KTsKIH0KIAog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggMDU3YmNmYy4uNTRlNmM3YSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApAQCAtNDAsNyArNDAsNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBzdHJ1Y3QgVGV4bWFwUGFpbnRPcHRpb25zIHsKICAgICBCaXRtYXBUZXh0dXJl
KiBzdXJmYWNlOwogICAgIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXI7Ci0gICAgR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0OwogICAgIFRleHR1cmVNYXBwZXJOb2RlKiByb290TGF5ZXI7CiAg
ICAgZmxvYXQgb3BhY2l0eTsKICAgICBJbnRSZWN0IHNjaXNzb3JSZWN0OwpAQCAtMjE0LDcgKzIx
Myw3IEBAIHB1YmxpYzoKICAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7
IH0KIAogICAgIHZpcnR1YWwgdm9pZCBzZXRQbGF0Zm9ybUxheWVyQ2xpZW50KFRleHR1cmVNYXBw
ZXJMYXllckNsaWVudCopOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UmVj
dCYgZXhwb3NlZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZs
b2F0IG9wYWNpdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChUZXh0dXJlTWFwcGVyKiwgY29u
c3QgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6UGFpbnRPcHRpb25zJik7CiAKICAgICBzdGF0
aWMgVGV4dHVyZU1hcHBlck5vZGUqIHRvVGV4dHVyZU1hcHBlck5vZGUoR3JhcGhpY3NMYXllciop
OwogcHVibGljOgpAQCAtMzk4LDcgKzM5Nyw3IEBAIGJvb2wgVGV4dHVyZU1hcHBlck5vZGU6Omhh
c1N1cmZhY2VEZXNjZW5kYW50cygpIGNvbnN0CiAKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9k
ZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplLCBj
b25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0JiBleHBvc2VkUmVjdCwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSkKK3ZvaWQg
VGV4dHVyZU1hcHBlck5vZGU6OnBhaW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNv
bnN0IFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXI6OlBhaW50T3B0aW9ucyYgb3B0aW9ucykKIHsK
ICAgICBBU1NFUlQobV9sYXllclR5cGUgPT0gUm9vdExheWVyKTsKICAgICBpZiAobV9zaXplLmlz
RW1wdHkoKSkKQEAgLTQwOSw4ICs0MDgsNiBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWlu
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbgogICAg
ICgiW1RleHR1cmVNYXBwZXJdIFJvb3RQYWludCEhXG4iKTsKICNlbmRpZgogCi0gICAgUmVmUHRy
PFRleHR1cmVNYXBwZXI+IHRleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoY29u
dGV4dCk7Ci0KICAgICBpZiAodGV4dHVyZU1hcHBlci0+dHlwZSgpICE9IG1fbGFzdFRleHR1cmVN
YXBwZXJUeXBlKQogICAgICAgICBnVGV4dHVyZU1hcHBlckNhY2hlLm1fZGF0YS5jbGVhcigpOwog
CkBAIC00MTgsMTYgKzQxNSwxNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbgogICAgIFRleG1h
cFBhaW50T3B0aW9ucyBvcHQ7CiAgICAgb3B0Lm9wYWNpdHkgPSAxOwogICAgIG9wdC5yb290TGF5
ZXIgPSB0aGlzOwotICAgIG9wdC5zY2lzc29yUmVjdCA9IHRhcmdldFJlY3Q7Ci0gICAgb3B0LnZp
c2libGVSZWN0ID0gZXhwb3NlZFJlY3Q7Ci0gICAgb3B0LnRleHR1cmVNYXBwZXIgPSB0ZXh0dXJl
TWFwcGVyLmdldCgpOwotICAgIG9wdC5jb250ZXh0ID0gdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3ND
b250ZXh0KCk7CisgICAgb3B0LnNjaXNzb3JSZWN0ID0gb3B0aW9ucy50YXJnZXRSZWN0OworICAg
IG9wdC52aXNpYmxlUmVjdCA9IG9wdGlvbnMudmlzaWJsZVJlY3Q7CisgICAgb3B0LnRleHR1cmVN
YXBwZXIgPSB0ZXh0dXJlTWFwcGVyOwogICAgIG9wdC5zdXJmYWNlID0gMDsKICAgICBwYWludFJl
Y3Vyc2l2ZShvcHQpOwogCiAgICAgaWYgKHRleHR1cmVNYXBwZXItPmFsbG93U3VyZmFjZUZvclJv
b3QoKSB8fCBtX3N0YXRlLmhhc1N1cmZhY2VEZXNjZW5kYW50cykgewogICAgICAgICB0ZXh0dXJl
TWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsKLSAgICAgICAgdGV4dHVyZU1hcHBlci0+cGFpbnRUb1Rh
cmdldCgqbV9zdXJmYWNlLmdldCgpLCBzaXplLCB0cmFuc2Zvcm0sIG9wYWNpdHkgKiBtX3N0YXRl
Lm9wYWNpdHksIHRhcmdldFJlY3QpOworICAgICAgICB0ZXh0dXJlTWFwcGVyLT5wYWludFRvVGFy
Z2V0KCptX3N1cmZhY2UuZ2V0KCksIG9wdGlvbnMudmlld3BvcnRTaXplLCBvcHRpb25zLnRyYW5z
Zm9ybSwgb3B0aW9ucy5vcGFjaXR5ICogbV9zdGF0ZS5vcGFjaXR5LCBvcHRpb25zLnRhcmdldFJl
Y3QpOwogICAgIH0KICAgICBnVGV4dHVyZU1hcHBlckNhY2hlLnB1cmdlKCk7CiB9CkBAIC02OTIs
MTAgKzY4OCw5IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnVwbG9hZFRleHR1cmVGcm9tQ29u
dGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjCiAKICAgICB7CiAgICAgICAgIEdy
YXBoaWNzQ29udGV4dCBjb250ZXh0KG1fdGV4dHVyZS0+YmVnaW5QYWludChkaXJ0eVJlY3QpKTsK
LSAgICAgICAgaWYgKHRleHR1cmVNYXBwZXIgJiYgdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250
ZXh0KCkpIHsKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogb3JpZ2luYWxDb250ZXh0ID0g
dGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgICAgICAgICBjb250ZXh0LnNl
dEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkob3JpZ2luYWxDb250ZXh0LT5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KCkpOwotICAgICAgICAgICAgY29udGV4dC5zZXRUZXh0RHJhd2luZ01vZGUo
b3JpZ2luYWxDb250ZXh0LT50ZXh0RHJhd2luZ01vZGUoKSk7CisgICAgICAgIGlmICh0ZXh0dXJl
TWFwcGVyKSB7CisgICAgICAgICAgICBjb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkodGV4dHVyZU1hcHBlci0+aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICAgICAg
ICAgIGNvbnRleHQuc2V0VGV4dERyYXdpbmdNb2RlKHRleHR1cmVNYXBwZXItPnRleHREcmF3aW5n
TW9kZSgpKTsKICAgICAgICAgfQogICAgICAgICBtX2xheWVyLT5wYWludEdyYXBoaWNzTGF5ZXJD
b250ZW50cyhjb250ZXh0LCBkaXJ0eVJlY3QpOwogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaAppbmRleCAwM2MxYzZkLi4yNzZiMjAw
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ci5oCkBAIC0xLDQgKzEsNCBAQAotLyoKKyAvKgogIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKIAogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTk3LDIw
ICs5NywzMCBAQCBwdWJsaWM6CiAgICAgICAgIGRyYXdUZXh0dXJlKHRleHR1cmUsIEludFJlY3Qo
MCwgMCwgdGV4dHVyZS5jb250ZW50U2l6ZSgpLndpZHRoKCksIHRleHR1cmUuY29udGVudFNpemUo
KS5oZWlnaHQoKSksIG1hdHJpeCwgb3BhY2l0eSwgMCk7CiAgICAgfQogCisgICAgdmlydHVhbCB2
b2lkIHNldEdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQqKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgc2V0Q2xpcChjb25zdCBJbnRSZWN0JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBhbGxv
d1N1cmZhY2VGb3JSb290KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRt
YXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCkgPSAwOwogICAgIHZpcnR1YWwgY29uc3QgY2hhciog
dHlwZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cCgpIHt9CiAKLSAgICBH
cmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9nYzsKLSAgICB9CisgICAgdm9pZCBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KEludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpIHsgbV9pbnRlcnBvbGF0aW9uUXVhbGl0eSA9
IHF1YWxpdHk7IH0KKyAgICB2b2lkIHNldFRleHREcmF3aW5nTW9kZShpbnQgbW9kZSkgeyBtX3Rl
eHREcmF3aW5nTW9kZSA9IG1vZGU7IH0KKworICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBtX2ludGVycG9sYXRpb25RdWFs
aXR5OyB9CisgICAgaW50IHRleHREcmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dERy
YXdpbmdNb2RlOyB9CisKKyAgICB2b2lkIHNldFZpZXdwb3J0U2l6ZShjb25zdCBJbnRTaXplJik7
CiAKIHByb3RlY3RlZDoKLSAgICBUZXh0dXJlTWFwcGVyKEdyYXBoaWNzQ29udGV4dCogZ2MpIDog
bV9nYyhnYykge30KLSAgICBHcmFwaGljc0NvbnRleHQqIG1fZ2M7CisgICAgVGV4dHVyZU1hcHBl
cigpCisgICAgICAgIDogbV9pbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uRGVmYXVs
dCkKKyAgICAgICAgLCBtX3RleHREcmF3aW5nTW9kZShjVGV4dEZpbGwpCisgICAge30KKworcHJp
dmF0ZToKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2ludGVycG9sYXRpb25RdWFsaXR5Owor
ICAgIGludCBtX3RleHREcmF3aW5nTW9kZTsKIH07CiAKIH07CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXIuaAppbmRleCAyM2U5ZmM5Li5hMTU2ODFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgK
QEAgLTI1LDYgKzI1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR3JhcGhpY3NDb250
ZXh0OwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEludFNpemU7CitjbGFzcyBUZXh0dXJlTWFwcGVy
OwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiAKIApAQCAtNTAsMTAgKzUxLDE3IEBAIHB1
YmxpYzoKIAogY2xhc3MgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllciA6IHB1YmxpYyBUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllciB7CiBwdWJsaWM6CisgICAgc3RydWN0IFBhaW50T3B0aW9ucyB7
CisgICAgICAgIEludFJlY3QgdmlzaWJsZVJlY3Q7CisgICAgICAgIEludFJlY3QgdGFyZ2V0UmVj
dDsKKyAgICAgICAgSW50U2l6ZSB2aWV3cG9ydFNpemU7CisgICAgICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHRyYW5zZm9ybTsKKyAgICAgICAgZmxvYXQgb3BhY2l0eTsKKyAgICB9OworCiAgICAg
dmlydHVhbCB2b2lkIHNldFBsYXRmb3JtTGF5ZXJDbGllbnQoVGV4dHVyZU1hcHBlckxheWVyQ2xp
ZW50KikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UmVjdCYgZXhw
b3NlZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9w
YWNpdHkpIHt9CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFRleHR1cmVNYXBwZXIqLCBjb25zdCBQ
YWludE9wdGlvbnMmKSB7fQogICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwVGV4dHVyZU1hcHBlcigpIHt9CiAgICAgdmlydHVhbCBU
eXBlIGxheWVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIENvbnRlbnRMYXllcjsgfQogfTsKIApkaWZm
IC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwIGIvV2ViS2l0L3F0L0FwaS9xd2Vi
ZnJhbWUuY3BwCmluZGV4IDM5ZTc0ZDkuLmI0MWE5MTEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9B
cGkvcXdlYmZyYW1lLmNwcAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKQEAgLTk3
LDYgKzk3LDcgQEAKICNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKICNlbmRpZgogI2lmIFVTRShU
RVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlci5oIgogI2luY2x1
ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgogI2VuZGlmCiAjaW5jbHVk
ZSAid3RmL0hhc2hNYXAuaCIKQEAgLTI5NSwxOCArMjk2LDM3IEBAIHZvaWQgUVdlYkZyYW1lUHJp
dmF0ZTo6cmVuZGVyRnJvbVRpbGVkQmFja2luZ1N0b3JlKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uCiAgICAgICAgIHBhaW50ZXItPnJlc3RvcmUoKTsKICAgICB9CiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgLy8gVGV4dHVy
ZU1hcHBlciBtaWdodCB1c2UgcmF3IE9wZW5HTCBvciBzb21lIG90aGVyIGJhY2tlbmQgdGhhdCBy
ZXF1aXJlcyBuYXRpdmUgcGFpbnRpbmcuIE9uIHJhc3RlciB0aGlzIGRvZXNuJ3QgaGF2ZSBhbnkg
ZWZmZWN0LgotICAgIGlmIChyb290R3JhcGhpY3NMYXllcikgewotICAgICAgICBwYWludGVyLT5i
ZWdpbk5hdGl2ZVBhaW50aW5nKCk7Ci0gICAgICAgIHJvb3RHcmFwaGljc0xheWVyLT5wYWludChj
b250ZXh0LCB2aWV3LT5zaXplKCksIHZpZXctPmZyYW1lUmVjdCgpLCBJbnRSZWN0KGNsaXAuYm91
bmRpbmdSZWN0KCkpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBwYWludGVyLT5vcGFjaXR5KCkp
OwotICAgICAgICBwYWludGVyLT5lbmROYXRpdmVQYWludGluZygpOwotICAgIH0KLQorICAgIHJl
bmRlckNvbXBvc2l0ZWRMYXllcnMoY29udGV4dCwgSW50UmVjdChjbGlwLmJvdW5kaW5nUmVjdCgp
KSk7CiAgICAgcmVuZGVyUmVsYXRpdmVDb29yZHMoY29udGV4dCwgKFFXZWJGcmFtZTo6UmVuZGVy
TGF5ZXIpKFFXZWJGcmFtZTo6U2Nyb2xsQmFyTGF5ZXIgfCBRV2ViRnJhbWU6OlBhbkljb25MYXll
ciksIGNsaXApOwogI2VuZGlmCiB9CiAjZW5kaWYKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQordm9pZCBRV2ViRnJhbWVQcml2YXRlOjpy
ZW5kZXJDb21wb3NpdGVkTGF5ZXJzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50
UmVjdCYgY2xpcCkKK3sKKyAgICBpZiAoIXJvb3RHcmFwaGljc0xheWVyKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKCF0ZXh0dXJlTWFwcGVyKQorICAgICAgICB0ZXh0dXJlTWFwcGVyID0gVGV4
dHVyZU1hcHBlcjo6Y3JlYXRlKGNvbnRleHQpOworICAgIHRleHR1cmVNYXBwZXItPnNldEdyYXBo
aWNzQ29udGV4dChjb250ZXh0KTsKKyAgICB0ZXh0dXJlTWFwcGVyLT5zZXRJbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KGNvbnRleHQtPmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAg
dGV4dHVyZU1hcHBlci0+c2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQtPnRleHREcmF3aW5nTW9k
ZSgpKTsKKyAgICBRUGFpbnRlciogcGFpbnRlciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
OworICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7CisgICAgcGFpbnRlci0+c2F2
ZSgpOworICAgIHBhaW50ZXItPmJlZ2luTmF0aXZlUGFpbnRpbmcoKTsKKyAgICBUZXh0dXJlTWFw
cGVyQ29udGVudExheWVyOjpQYWludE9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRpb25zLnZpc2li
bGVSZWN0ID0gY2xpcDsKKyAgICBvcHRpb25zLnRhcmdldFJlY3QgPSB2aWV3LT5mcmFtZVJlY3Qo
KTsKKyAgICBvcHRpb25zLnZpZXdwb3J0U2l6ZSA9IHZpZXctPnNpemUoKTsKKyAgICBvcHRpb25z
Lm9wYWNpdHkgPSBwYWludGVyLT5vcGFjaXR5KCk7CisgICAgcm9vdEdyYXBoaWNzTGF5ZXItPnBh
aW50KHRleHR1cmVNYXBwZXIuZ2V0KCksIG9wdGlvbnMpOworICAgIHBhaW50ZXItPmVuZE5hdGl2
ZVBhaW50aW5nKCk7CisgICAgcGFpbnRlci0+cmVzdG9yZSgpOworfQorI2VuZGlmCisKIHZvaWQg
UVdlYkZyYW1lUHJpdmF0ZTo6cmVuZGVyUmVsYXRpdmVDb29yZHMoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBRV2ViRnJhbWU6OlJlbmRlckxheWVyIGxheWVyLCBjb25zdCBRUmVnaW9uJiBjbGlw
KQogewogICAgIGlmICghZnJhbWUtPnZpZXcoKSB8fCAhZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigp
KQpAQCAtMzQ5LDE2ICszNjksOCBAQCB2b2lkIFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlclJlbGF0
aXZlQ29vcmRzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUVdlYkZyYW1lOgogICAgICAgICAg
ICAgY29udGV4dC0+cmVzdG9yZSgpOwogICAgICAgICB9CiAgICAgICAgIHBhaW50ZXItPnJlc3Rv
cmUoKTsKLQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVf
TUFQUEVSKQotICAgICAgICBpZiAocm9vdEdyYXBoaWNzTGF5ZXIpIHsKLSAgICAgICAgICAgIHBh
aW50ZXItPnNhdmUoKTsKLSAgICAgICAgICAgIHBhaW50ZXItPmJlZ2luTmF0aXZlUGFpbnRpbmco
KTsKLSAgICAgICAgICAgIHJvb3RHcmFwaGljc0xheWVyLT5wYWludChjb250ZXh0LCB2aWV3LT5z
aXplKCksIHZpZXctPmZyYW1lUmVjdCgpLCBJbnRSZWN0KGNsaXAuYm91bmRpbmdSZWN0KCkpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
KCksIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5vcGFjaXR5KCkpOwotICAgICAgICAgICAg
cGFpbnRlci0+ZW5kTmF0aXZlUGFpbnRpbmcoKTsKLSAgICAgICAgICAgIHBhaW50ZXItPnJlc3Rv
cmUoKTsKLSAgICAgICAgfQorICAgICAgICByZW5kZXJDb21wb3NpdGVkTGF5ZXJzKGNvbnRleHQs
IEludFJlY3QoY2xpcC5ib3VuZGluZ1JlY3QoKSkpOwogI2VuZGlmCiAgICAgfQogICAgIGlmIChs
YXllciAmIChRV2ViRnJhbWU6OlBhbkljb25MYXllciB8IFFXZWJGcmFtZTo6U2Nyb2xsQmFyTGF5
ZXIpKSB7CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmggYi9XZWJLaXQv
cXQvQXBpL3F3ZWJmcmFtZV9wLmgKaW5kZXggNTY2MGJkMS4uNjM0ZTIxYiAxMDA2NDQKLS0tIGEv
V2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1l
X3AuaApAQCAtMzMsNiArMzMsMTAgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlZp
ZXdwb3J0QXJndW1lbnRzLmgiCiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYm
IFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlci5oIgor
I2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBGcmFtZUxvYWRlckNsaWVu
dFF0OwogICAgIGNsYXNzIEZyYW1lVmlldzsKQEAgLTk0LDYgKzk4LDkgQEAgcHVibGljOgogICAg
IHZvaWQgcmVuZGVyRnJvbVRpbGVkQmFja2luZ1N0b3JlKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IFFSZWdpb24mIGNsaXApOwogI2VuZGlmCiAKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICB2b2lkIHJlbmRlckNvbXBv
c2l0ZWRMYXllcnMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiBjbGlwKTsKKyNlbmRpZgogICAgIFFXZWJGcmFtZSAqcTsKICAgICBRdDo6
U2Nyb2xsQmFyUG9saWN5IGhvcml6b250YWxTY3JvbGxCYXJQb2xpY3k7CiAgICAgUXQ6OlNjcm9s
bEJhclBvbGljeSB2ZXJ0aWNhbFNjcm9sbEJhclBvbGljeTsKQEAgLTEwNiw2ICsxMTMsNyBAQCBw
dWJsaWM6CiAgICAgaW50IG1hcmdpbkhlaWdodDsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKICAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
Q29udGVudExheWVyKiByb290R3JhcGhpY3NMYXllcjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGV4
dHVyZU1hcHBlcj4gdGV4dHVyZU1hcHBlcjsKICNlbmRpZgogICAgIGJvb2wgem9vbVRleHRPbmx5
OwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72457</attachid>
            <date>2010-10-31 08:39:53 -0700</date>
            <delta_ts>2010-10-31 20:21:40 -0700</delta_ts>
            <desc>Same as reviewed patch, fixed the new line and space glitch</desc>
            <filename>patch-47070-11.diff</filename>
            <type>text/plain</type>
            <size>36811</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWQ0ZTc5YS4uMGNkYzQ2MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxMC0xMC0yOSAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IEtl
bm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVy
ZSBtYXBwZXIgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcwNzAKKworICAgICAgICBTb21lIHJlZmFjdG9yIGZv
ciB0ZXhtYXAgdG8gZW5hYmxlIFdlYktpdDI6IHJlbW92ZSBnbG9iYWxzLCBhbmQgYWxsb3cgVGV4
dHVyZU1hcHBlciB0byBleGlzdCB3aXRob3V0IGEgR3JhcGhpY3NDb250ZXh0LgorICAgICAgICBU
aGlzIHdpbGwgYWxsb3cgcmVuZGVyaW5nIHRoZSBUZXh0dXJlTWFwcGVyTm9kZSB0cmVlIHdpdGhv
dXQgYW4gYWN0aXZlIFFQYWludGVyLCBpbnRvIHRoZSBjdXJyZW50IEdMIGNvbnRleHQuCisgICAg
ICAgIE1vc3Qgb2YgdGhlIGNoYW5nZXMgc2ltcGx5IG1vdmUgdGhlIGdsb2JhcyBpbiBUZXh0dXJl
TWFwcGVyR0wgaW50byBtZW1iZXJzIG9mIHRoYXQgY2xhc3MuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLiBPbGQgdGVzdHMgaW4gTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcgY292ZXIgdGhpcy4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6U2hhZGVySW5mbzo6Z2V0
VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTFByaXZh
dGU6OlNoYWRlckluZm86OmNyZWF0ZVNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZXBvc2l0b3J5
OjpmaW5kT3JDcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMUHJpdmF0
ZTo6RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZXBvc2l0b3J5OjpkZXJlZik6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xQcml2YXRlOjpEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJl
cG9zaXRvcnk6OkRpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVwb3NpdG9yeSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xQcml2YXRlOjpEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJl
cG9zaXRvcnk6On5EaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnkpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMUHJpdmF0ZTo6VGV4dHVyZU1hcHBlckdMUHJpdmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6c2V0Q29udGVudHNUb0ltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyR0w6On5UZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckdMOjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckdMOjpvYnRhaW5DdXJyZW50Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyR0w6OmJpbmRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJHTDo6cGFpbnRUb1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
R0w6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9U
ZXh0dXJlTWFwcGVyR0wuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJl
TWFwcGVyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclF0OjpUZXh0dXJl
TWFwcGVyUXQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclF0OjpzZXRHcmFwaGlj
c0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjp1cGxvYWRUZXh0dXJlRnJvbUNvbnRl
bnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpzZXRHcmFwaGljc0NvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpzZXRUZXh0RHJhd2luZ01v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6aW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjp0ZXh0RHJhd2luZ01v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6VGV4dHVyZU1hcHBlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ29udGVudExheWVyOjpwYWlu
dCk6CisKIDIwMTAtMTAtMjggIE5vYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFyaXlhIEhpZGF5YXQuCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCA5
NjY2NTZiLi42MDE1ODU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTMwLDggKzMwLDEyIEBACiAjaWYgZGVmaW5l
ZChURVhNQVBfT1BFTkdMX0VTXzIpCiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAjZWxpZiBPUyhN
QUNfT1NfWCkKKyNpbmNsdWRlIDxBR0wvYWdsLmg+CiAjaW5jbHVkZSA8Z2wuaD4KICNlbHNlCisj
aWYgT1MoVU5JWCkKKyNpbmNsdWRlIDxHTC9nbHguaD4KKyNlbmRpZgogI2luY2x1ZGUgPEdML2ds
Lmg+CiAjZW5kaWYKIApAQCAtOTAsNiArOTQsMTMyIEBAIGlubGluZSBzdGF0aWMgdm9pZCBkZWJ1
Z0dMQ29tbWFuZChjb25zdCBjaGFyKiBjb21tYW5kLCBpbnQgbGluZSkKICNkZWZpbmUgR0xfQ01E
KHgpIHgKICNlbmRpZgogCitzdGF0aWMgY29uc3QgR0x1aW50IGdJblZlcnRleEF0dHJpYnV0ZUlu
ZGV4ID0gMDsKKworc3RydWN0IFRleHR1cmVNYXBwZXJHTERhdGEgeworICAgIHN0YXRpYyBzdHJ1
Y3QgU2hhZGVySW5mbyB7CisgICAgICAgIGVudW0gU2hhZGVyUHJvZ3JhbUluZGV4IHsKKyAgICAg
ICAgICAgIFNpbXBsZVByb2dyYW0sCisgICAgICAgICAgICBPcGFjaXR5QW5kTWFza1Byb2dyYW0s
CisgICAgICAgICAgICBUYXJnZXRQcm9ncmFtLAorCisgICAgICAgICAgICBQcm9ncmFtQ291bnQK
KyAgICAgICAgfTsKKworICAgICAgICBlbnVtIFNoYWRlclZhcmlhYmxlSW5kZXggeworICAgICAg
ICAgICAgSW5NYXRyaXhWYXJpYWJsZSwKKyAgICAgICAgICAgIEluU291cmNlTWF0cml4VmFyaWFi
bGUsCisgICAgICAgICAgICBJbk1hc2tNYXRyaXhWYXJpYWJsZSwKKyAgICAgICAgICAgIE9wYWNp
dHlWYXJpYWJsZSwKKyAgICAgICAgICAgIFNvdXJjZVRleHR1cmVWYXJpYWJsZSwKKyAgICAgICAg
ICAgIE1hc2tUZXh0dXJlVmFyaWFibGUsCisKKyAgICAgICAgICAgIFZhcmlhYmxlQ291bnQKKyAg
ICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgUHJvZ3JhbUluZm8geworICAgICAgICAgICAgR0x1
aW50IGlkOworICAgICAgICAgICAgR0xpbnQgdmFyc1tWYXJpYWJsZUNvdW50XTsKKyAgICAgICAg
fTsKKworICAgICAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oU2hhZGVyUHJvZ3JhbUluZGV4
IHByb2csIFNoYWRlclZhcmlhYmxlSW5kZXggdmFyLCBjb25zdCBjaGFyKiBuYW1lKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gcHJvZ3JhbXNbcHJvZ10udmFyc1t2YXJdID0gZ2xHZXRV
bmlmb3JtTG9jYXRpb24ocHJvZ3JhbXNbcHJvZ10uaWQsIG5hbWUpOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBjcmVhdGVTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNv
dXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UsIFNoYWRlclByb2dyYW1JbmRl
eCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgR0x1aW50IHZlcnRleFNoYWRlciA9IGds
Q3JlYXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIpOworICAgICAgICAgICAgR0x1aW50IGZyYWdt
ZW50U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKKyAgICAgICAg
ICAgIEdMX0NNRChnbFNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJT
b3VyY2UsIDApKQorICAgICAgICAgICAgR0xfQ01EKGdsU2hhZGVyU291cmNlKGZyYWdtZW50U2hh
ZGVyLCAxLCAmZnJhZ21lbnRTaGFkZXJTb3VyY2UsIDApKQorICAgICAgICAgICAgR0x1aW50IHBy
b2dyYW1JRCA9IGdsQ3JlYXRlUHJvZ3JhbSgpOworICAgICAgICAgICAgR0xfQ01EKGdsQ29tcGls
ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpKQorICAgICAgICAgICAgR0xfQ01EKGdsQ29tcGlsZVNoYWRl
cihmcmFnbWVudFNoYWRlcikpCisgICAgICAgICAgICBHTF9DTUQoZ2xBdHRhY2hTaGFkZXIocHJv
Z3JhbUlELCB2ZXJ0ZXhTaGFkZXIpKQorICAgICAgICAgICAgR0xfQ01EKGdsQXR0YWNoU2hhZGVy
KHByb2dyYW1JRCwgZnJhZ21lbnRTaGFkZXIpKQorICAgICAgICAgICAgR0xfQ01EKGdsQmluZEF0
dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgZ0luVmVydGV4QXR0cmlidXRlSW5kZXgsICJJblZlcnRl
eCIpKQorICAgICAgICAgICAgR0xfQ01EKGdsTGlua1Byb2dyYW0ocHJvZ3JhbUlEKSkKKyAgICAg
ICAgICAgIHByb2dyYW1zW2luZGV4XS5pZCA9IHByb2dyYW1JRDsKKyNpZmRlZiBQUklOVF9QUk9H
UkFNX0lORk9fTE9HCisgICAgICAgICAgICBjaGFyIGluZm9Mb2dbMTAyNF07CisgICAgICAgICAg
ICBpbnQgbGVuOworICAgICAgICAgICAgR0xfQ01EKGdsR2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3Jh
bUlELCAxMDI0LCAmbGVuLCBpbmZvTG9nKSk7CisgICAgICAgICAgICBMT0coR3JhcGhpY3MsICJD
b21waWxlZCBwcm9ncmFtIGZvciB0ZXh0dXJlIG1hcHBlci4gTG9nOiAlc1xuIiwgaW5mb0xvZyk7
CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIFByb2dyYW1JbmZvIHByb2dyYW1zW1Byb2dy
YW1Db3VudF07CisKKyAgICB9IHNoYWRlckluZm87CisKKyAgICBzdHJ1Y3QgRGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2VSZXBvc2l0b3J5IHsKKyAgICAgICAgc3RydWN0IEVudHJ5IHsKKyAgICAgICAg
ICAgIEdMdWludCB0ZXh0dXJlOworICAgICAgICAgICAgaW50IHJlZkNvdW50OworICAgICAgICB9
OworICAgICAgICBIYXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBFbnRyeT4gaW1hZ2VUb1RleHR1cmU7
CisKKyAgICAgICAgR0x1aW50IGZpbmRPckNyZWF0ZShOYXRpdmVJbWFnZVB0ciBpbWFnZSwgYm9v
bCYgZm91bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIs
IEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5maW5kKGltYWdlKTsKKyAgICAg
ICAgICAgIGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoaXQgIT0gaW1hZ2VUb1RleHR1
cmUuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLnJlZkNvdW50Kys7CisgICAg
ICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiBpdC0+c2Vj
b25kLnRleHR1cmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBFbnRyeSBlbnRyeTsKKyAg
ICAgICAgICAgIEdMX0NNRChnbEdlblRleHR1cmVzKDEsICZlbnRyeS50ZXh0dXJlKSk7CisgICAg
ICAgICAgICBlbnRyeS5yZWZDb3VudCA9IDE7CisgICAgICAgICAgICBpbWFnZVRvVGV4dHVyZS5h
ZGQoaW1hZ2UsIGVudHJ5KTsKKyAgICAgICAgICAgIHJldHVybiBlbnRyeS50ZXh0dXJlOworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBkZXJlZihOYXRpdmVJbWFnZVB0ciBpbWFnZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgSGFzaE1hcDxOYXRpdmVJbWFnZVB0ciwgRW50cnk+OjppdGVyYXRv
ciBpdCA9IGltYWdlVG9UZXh0dXJlLmZpbmQoaW1hZ2UpOworICAgICAgICAgICAgaWYgKGl0ICE9
IGltYWdlVG9UZXh0dXJlLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQu
cmVmQ291bnQgPCAyKSB7CisgICAgICAgICAgICAgICAgICAgIGltYWdlVG9UZXh0dXJlLnJlbW92
ZShpdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
CisgICAgICAgIERpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVwb3NpdG9yeSgpCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIH5EaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnko
KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIsIEVu
dHJ5Pjo6aXRlcmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5iZWdpbigpOyBpdCAhPSBpbWFnZVRv
VGV4dHVyZS5lbmQoKTsgKytpdCkgeworICAgICAgICAgICAgICAgIEdMdWludCB0ZXh0dXJlID0g
aXQtPnNlY29uZC50ZXh0dXJlOworICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlKQorICAgICAg
ICAgICAgICAgICAgICBHTF9DTUQoZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSkpOworICAg
ICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICB9IGRpcmVjdGx5Q29tcG9zaXRlZEltYWdlczsK
KworICAgIFRleHR1cmVNYXBwZXJHTERhdGEoKQorICAgICAgICA6IGN1cnJlbnRQcm9ncmFtKFRl
eHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86OlRhcmdldFByb2dyYW0pCisgICAgeyB9CisK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcm9qZWN0aW9uTWF0cml4OworICAgIGludCBjdXJy
ZW50UHJvZ3JhbTsKKworI2lmIE9TKE1BQ19PU19YKQorICAgIEFHTENvbnRleHQgYWdsQ29udGV4
dDsKKyNlbGlmIE9TKFVOSVgpCisgICAgRHJhd2FibGUgZ2x4RHJhd2FibGU7CisgICAgR0xYQ29u
dGV4dCBnbHhDb250ZXh0OworI2VuZGlmCit9OworCitUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFk
ZXJJbmZvIFRleHR1cmVNYXBwZXJHTERhdGE6OnNoYWRlckluZm87CisKIGNsYXNzIEJpdG1hcFRl
eHR1cmVHTCA6IHB1YmxpYyBCaXRtYXBUZXh0dXJlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgZGVzdHJveSgpOwpAQCAtMTExLDYgKzI0MSw3IEBAIHByaXZhdGU6CiAgICAgR0x1aW50IG1f
ZmJvOwogICAgIEludFNpemUgbV9hY3R1YWxTaXplOwogICAgIGJvb2wgbV9zdXJmYWNlTmVlZHNS
ZXNldDsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlckdMPiBtX3RleHR1cmVNYXBwZXI7CiAgICAg
Qml0bWFwVGV4dHVyZUdMKCkKICAgICAgICAgOiBtX2lkKDApCiAgICAgICAgICwgbV9pbWFnZSgw
KQpAQCAtMTIzLDcyICsyNTQsMjEgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgVGV4dHVy
ZU1hcHBlckdMOwogfTsKIAotc3RhdGljIHN0cnVjdCBUZXhtYXBTaGFkZXJJbmZvIHsKLSAgICBl
bnVtIFNoYWRlclByb2dyYW1JbmRleCB7Ci0gICAgICAgIFNpbXBsZVByb2dyYW0sCi0gICAgICAg
IE9wYWNpdHlBbmRNYXNrUHJvZ3JhbSwKLSAgICAgICAgVGFyZ2V0UHJvZ3JhbSwKLSAgICAgICAg
TnVtUHJvZ3JhbXMKLSAgICB9OwotCi0gICAgZW51bSBTaGFkZXJWYXJpYWJsZUluZGV4IHsKLSAg
ICAgICAgSW5NYXRyaXhWYXJpYWJsZSwKLSAgICAgICAgSW5Tb3VyY2VNYXRyaXhWYXJpYWJsZSwK
LSAgICAgICAgSW5NYXNrTWF0cml4VmFyaWFibGUsCi0gICAgICAgIEluVmVydGV4VmFyaWFibGUs
CiAKLSAgICAgICAgT3BhY2l0eVZhcmlhYmxlLAotICAgICAgICBTb3VyY2VUZXh0dXJlVmFyaWFi
bGUsCi0gICAgICAgIE1hc2tUZXh0dXJlVmFyaWFibGUsCi0gICAgICAgIE51bVZhcmlhYmxlcwot
ICAgIH07Ci0KLSAgICBzdHJ1Y3QgUHJvZ3JhbUluZm8gewotICAgICAgICBHTHVpbnQgaWQ7Ci0g
ICAgICAgIEdMaW50IHZhcnNbTnVtVmFyaWFibGVzXTsKLSAgICB9OwotCi0gICAgR0xpbnQgZ2V0
VW5pZm9ybUxvY2F0aW9uKFNoYWRlclByb2dyYW1JbmRleCBwcm9nLCBTaGFkZXJWYXJpYWJsZUlu
ZGV4IHZhciwgY29uc3QgY2hhciogbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBwcm9ncmFt
c1twcm9nXS52YXJzW3Zhcl0gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtc1twcm9nXS5p
ZCwgbmFtZSk7Ci0gICAgfQotCi0gICAgdm9pZCBjcmVhdGVTaGFkZXJQcm9ncmFtKGNvbnN0IGNo
YXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2Us
IFNoYWRlclByb2dyYW1JbmRleCBpbmRleCkKLSAgICB7Ci0gICAgICAgIEdMdWludCB2ZXJ0ZXhT
aGFkZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9WRVJURVhfU0hBREVSKTsKLSAgICAgICAgR0x1aW50
IGZyYWdtZW50U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKLSAg
ICAgICAgR0xfQ01EKGdsU2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgMSwgJnZlcnRleFNoYWRl
clNvdXJjZSwgMCkpCi0gICAgICAgIEdMX0NNRChnbFNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRl
ciwgMSwgJmZyYWdtZW50U2hhZGVyU291cmNlLCAwKSkKLSAgICAgICAgR0x1aW50IHByb2dyYW1J
RCA9IGdsQ3JlYXRlUHJvZ3JhbSgpOwotICAgICAgICBHTF9DTUQoZ2xDb21waWxlU2hhZGVyKHZl
cnRleFNoYWRlcikpCi0gICAgICAgIEdMX0NNRChnbENvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFk
ZXIpKQotICAgICAgICBHTF9DTUQoZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2ZXJ0ZXhTaGFk
ZXIpKQotICAgICAgICBHTF9DTUQoZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNo
YWRlcikpCi0gICAgICAgIEdMX0NNRChnbEJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsIDAs
ICJJblZlcnRleCIpKQotICAgICAgICBHTF9DTUQoZ2xMaW5rUHJvZ3JhbShwcm9ncmFtSUQpKQot
ICAgICAgICBwcm9ncmFtc1tpbmRleF0uaWQgPSBwcm9ncmFtSUQ7Ci0gICAgICAgIGNoYXIgaW5m
b0xvZ1sxMDI0XTsKLSAgICAgICAgaW50IGxlbjsKLSAgICAgICAgR0xfQ01EKGdsR2V0UHJvZ3Jh
bUluZm9Mb2cocHJvZ3JhbUlELCAxMDI0LCAmbGVuLCBpbmZvTG9nKSk7Ci0gICAgfQotCi0gICAg
UHJvZ3JhbUluZm8gcHJvZ3JhbXNbTnVtUHJvZ3JhbXNdOwotCi19IGdTaGFkZXJJbmZvOwogCiAj
ZGVmaW5lIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihwcm9nLCB2YXIpIFwKLSAgICAg
ICAgICAgIGlmIChnU2hhZGVySW5mby5nZXRVbmlmb3JtTG9jYXRpb24oVGV4bWFwU2hhZGVySW5m
bzo6cHJvZyMjUHJvZ3JhbSwgVGV4bWFwU2hhZGVySW5mbzo6dmFyIyNWYXJpYWJsZSwgI3Zhcikg
PCAwKSBcCisgICAgICAgICAgICBpZiAobV9kYXRhLT5zaGFkZXJJbmZvLmdldFVuaWZvcm1Mb2Nh
dGlvbihUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpwcm9nIyNQcm9ncmFtLCBUZXh0
dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjp2YXIjI1ZhcmlhYmxlLCAjdmFyKSA8IDApIFwK
ICAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZG4ndCBmaW5kIHZhcmlhYmxlICIj
dmFyIiBpbiBwcm9ncmFtICIjcHJvZyJcbiIpOwotI2RlZmluZSBURVhNQVBfQlVJTERfU0hBREVS
KHByb2dyYW0pIGdTaGFkZXJJbmZvLmNyZWF0ZVNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291
cmNlIyNwcm9ncmFtLCBmcmFnbWVudFNoYWRlclNvdXJjZSMjcHJvZ3JhbSwgVGV4bWFwU2hhZGVy
SW5mbzo6cHJvZ3JhbSMjUHJvZ3JhbSk7CisjZGVmaW5lIFRFWE1BUF9CVUlMRF9TSEFERVIocHJv
Z3JhbSkgbV9kYXRhLT5zaGFkZXJJbmZvLmNyZWF0ZVNoYWRlclByb2dyYW0odmVydGV4U2hhZGVy
U291cmNlIyNwcm9ncmFtLCBmcmFnbWVudFNoYWRlclNvdXJjZSMjcHJvZ3JhbSwgVGV4dHVyZU1h
cHBlckdMRGF0YTo6U2hhZGVySW5mbzo6cHJvZ3JhbSMjUHJvZ3JhbSk7CiAKLVRleHR1cmVNYXBw
ZXJHTDo6VGV4dHVyZU1hcHBlckdMKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLSAgICA6IFRl
eHR1cmVNYXBwZXIoY29udGV4dCkKLSAgICAsIG1fY3VycmVudFByb2dyYW0oVGV4bWFwU2hhZGVy
SW5mbzo6VGFyZ2V0UHJvZ3JhbSkKK1RleHR1cmVNYXBwZXJHTDo6VGV4dHVyZU1hcHBlckdMKCkK
KyAgICA6IG1fZGF0YShuZXcgVGV4dHVyZU1hcHBlckdMRGF0YSkKIHsKLSAgICBzdGF0aWMgYm9v
bCBzaGFkZXJzQ29tcGlsZWQgPSBmYWxzZTsKLSAgICBpZiAoc2hhZGVyc0NvbXBpbGVkKQorICAg
IG9idGFpbkN1cnJlbnRDb250ZXh0KCk7CisgICAgc3RhdGljIGJvb2wgY29tcGlsZWRTaGFkZXJz
ID0gZmFsc2U7CisgICAgaWYgKGNvbXBpbGVkU2hhZGVycykKICAgICAgICAgcmV0dXJuOwotICAg
IHNoYWRlcnNDb21waWxlZCA9IHRydWU7CisgICAgY29tcGlsZWRTaGFkZXJzID0gdHJ1ZTsKICNp
Zm5kZWYgVEVYTUFQX09QRU5HTF9FUzIKICNkZWZpbmUgT0VTMl9QUkVDSVNJT05fREVGSU5JVElP
TlMgXAogICAgICIjZGVmaW5lIGxvd3BcbiNkZWZpbmUgaGlnaHBcbiIKQEAgLTI4NSwxOCArMzY1
LDE4IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0
dXJlJiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0CiAKICAgICBjb25zdCBCaXRtYXBUZXh0dXJl
R0wmIHRleHR1cmVHTCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KHRleHR1
cmUpOwogCi0gICAgVGV4bWFwU2hhZGVySW5mbzo6U2hhZGVyUHJvZ3JhbUluZGV4IHByb2dyYW07
CisgICAgVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6U2hhZGVyUHJvZ3JhbUluZGV4
IHByb2dyYW07CiAgICAgaWYgKG1hc2tUZXh0dXJlKQotICAgICAgICBwcm9ncmFtID0gVGV4bWFw
U2hhZGVySW5mbzo6T3BhY2l0eUFuZE1hc2tQcm9ncmFtOworICAgICAgICBwcm9ncmFtID0gVGV4
dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6T3BhY2l0eUFuZE1hc2tQcm9ncmFtOwogICAg
IGVsc2UKLSAgICAgICAgcHJvZ3JhbSA9IFRleG1hcFNoYWRlckluZm86OlNpbXBsZVByb2dyYW07
CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpTaW1w
bGVQcm9ncmFtOwogCi0gICAgY29uc3QgVGV4bWFwU2hhZGVySW5mbzo6UHJvZ3JhbUluZm8mIHBy
b2dyYW1JbmZvID0gZ1NoYWRlckluZm8ucHJvZ3JhbXNbcHJvZ3JhbV07Ci0gICAgaWYgKG1fY3Vy
cmVudFByb2dyYW0gIT0gcHJvZ3JhbSkgeworICAgIGNvbnN0IFRleHR1cmVNYXBwZXJHTERhdGE6
OlNoYWRlckluZm86OlByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbyA9IG1fZGF0YS0+c2hhZGVySW5m
by5wcm9ncmFtc1twcm9ncmFtXTsKKyAgICBpZiAobV9kYXRhLT5jdXJyZW50UHJvZ3JhbSAhPSBw
cm9ncmFtKSB7CiAgICAgICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbUluZm8uaWQpKQot
ICAgICAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZ1NoYWRlckluZm8ucHJv
Z3JhbXNbbV9jdXJyZW50UHJvZ3JhbV0udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblZlcnRleFZh
cmlhYmxlXSkpCi0gICAgICAgIG1fY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOwotICAgICAgICBH
TF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtSW5mby52YXJzW1RleG1hcFNo
YWRlckluZm86OkluVmVydGV4VmFyaWFibGVdKSkKKyAgICAgICAgR0xfQ01EKGdsRGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5KGdJblZlcnRleEF0dHJpYnV0ZUluZGV4KSkKKyAgICAgICAgbV9kYXRh
LT5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07CisgICAgICAgIEdMX0NNRChnbEVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5KGdJblZlcnRleEF0dHJpYnV0ZUluZGV4KSkKICAgICB9CiAKICAgICBHTF9D
TUQoZ2xEaXNhYmxlKEdMX0RFUFRIX1RFU1QpKQpAQCAtMzA4LDcgKzM4OCw3IEBAIHZvaWQgVGV4
dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBj
b25zdCBJbnRSZWN0JiB0CiAgICAgY29uc3QgR0xmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEs
IDAsIDEsIDEsIDAsIDF9OwogICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIoMCwgMiwg
R0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB1bml0UmVjdCkpCiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBtYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtX3Byb2plY3Rpb25NYXRyaXgpLm11
bHRMZWZ0KG1vZGVsVmlld01hdHJpeCkubXVsdExlZnQoVHJhbnNmb3JtYXRpb25NYXRyaXgoCisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgobV9k
YXRhLT5wcm9qZWN0aW9uTWF0cml4KS5tdWx0TGVmdChtb2RlbFZpZXdNYXRyaXgpLm11bHRMZWZ0
KFRyYW5zZm9ybWF0aW9uTWF0cml4KAogICAgICAgICAgICAgdGFyZ2V0UmVjdC53aWR0aCgpLCAw
LCAwLCAwLAogICAgICAgICAgICAgMCwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgMCwgMCwKICAgICAg
ICAgICAgIDAsIDAsIDEsIDAsCkBAIC0zMjQsMTAgKzQwNCwxMCBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50
UmVjdCYgdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHRleHR1cmVH
TC5tX3JlbGF0aXZlU2l6ZS5oZWlnaHQoKSwgMCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCAwLCAxLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsIDAsIDAsIDF9OwotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3Jh
bUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJbk1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFM
U0UsIG00KSkKLSAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNb
VGV4bWFwU2hhZGVySW5mbzo6SW5Tb3VyY2VNYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBt
NHNyYykpCi0gICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hh
ZGVySW5mbzo6U291cmNlVGV4dHVyZVZhcmlhYmxlXSwgMCkpCi0gICAgR0xfQ01EKGdsVW5pZm9y
bTFmKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6T3BhY2l0eVZhcmlhYmxlXSwg
b3BhY2l0eSkpCisgICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJz
W1RleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86OkluTWF0cml4VmFyaWFibGVdLCAxLCBH
TF9GQUxTRSwgbTQpKQorICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8u
dmFyc1tUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpJblNvdXJjZU1hdHJpeFZhcmlh
YmxlXSwgMSwgR0xfRkFMU0UsIG00c3JjKSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3Jh
bUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpTb3VyY2VUZXh0dXJl
VmFyaWFibGVdLCAwKSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbUluZm8udmFyc1tU
ZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpPcGFjaXR5VmFyaWFibGVdLCBvcGFjaXR5
KSkKIAogICAgIGlmIChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpKSB7CiAg
ICAgICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCogbWFza1RleHR1cmVHTCA9IHN0YXRpY19jYXN0
PGNvbnN0IEJpdG1hcFRleHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsKQEAgLTMzNyw4ICs0MTcsOCBA
QCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYg
dGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLCBtYXNrVGV4dHVyZUdMLT5tX3JlbGF0aXZlU2l6ZS5oZWlnaHQoKSwgMCwg
MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMX07Ci0g
ICAgICAgIGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlcklu
Zm86OkluTWFza01hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00bWFzayk7Ci0gICAgICAg
IEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86Ok1h
c2tUZXh0dXJlVmFyaWFibGVdLCAxKSkKKyAgICAgICAgZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dy
YW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6SW5NYXNrTWF0cml4
VmFyaWFibGVdLCAxLCBHTF9GQUxTRSwgbTRtYXNrKTsKKyAgICAgICAgR0xfQ01EKGdsVW5pZm9y
bTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6TWFz
a1RleHR1cmVWYXJpYWJsZV0sIDEpKQogICAgICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdM
X1RFWFRVUkUwKSkKICAgICB9CiAKQEAgLTQwMiw0MyArNDgyLDYgQEAgdm9pZCBCaXRtYXBUZXh0
dXJlR0w6OmVuZFBhaW50KCkKICAgICBtX2J1ZmZlci5jbGVhcigpOwogfQogCi1zdHJ1Y3QgVGV4
bWFwR0xTaGFkZXJUZXh0dXJlcyB7Ci0gICAgc3RydWN0IEVudHJ5IHsKLSAgICAgICAgR0x1aW50
IHRleHR1cmU7Ci0gICAgICAgIGludCByZWZDb3VudDsKLSAgICB9OwotICAgIEhhc2hNYXA8TmF0
aXZlSW1hZ2VQdHIsIEVudHJ5PiBpbWFnZVRvVGV4dHVyZTsKLSAgICBHTHVpbnQgZmluZE9yQ3Jl
YXRlKE5hdGl2ZUltYWdlUHRyIGltYWdlLCBib29sJiBmb3VuZCkKLSAgICB7Ci0gICAgICAgIEhh
c2hNYXA8TmF0aXZlSW1hZ2VQdHIsIEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVy
ZS5maW5kKGltYWdlKTsKLSAgICAgICAgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGl0ICE9
IGltYWdlVG9UZXh0dXJlLmVuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLnJlZkNvdW50
Kys7Ci0gICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gaXQtPnNl
Y29uZC50ZXh0dXJlOwotICAgICAgICB9Ci0gICAgICAgIEVudHJ5IGVudHJ5OwotICAgICAgICBH
TF9DTUQoZ2xHZW5UZXh0dXJlcygxLCAmZW50cnkudGV4dHVyZSkpOwotICAgICAgICBlbnRyeS5y
ZWZDb3VudCA9IDE7Ci0gICAgICAgIGltYWdlVG9UZXh0dXJlLmFkZChpbWFnZSwgZW50cnkpOwot
ICAgICAgICByZXR1cm4gZW50cnkudGV4dHVyZTsKLSAgICB9Ci0KLSAgICBib29sIGRlcmVmKE5h
dGl2ZUltYWdlUHRyIGltYWdlKQotICAgIHsKLSAgICAgICAgSGFzaE1hcDxOYXRpdmVJbWFnZVB0
ciwgRW50cnk+OjppdGVyYXRvciBpdCA9IGltYWdlVG9UZXh0dXJlLmZpbmQoaW1hZ2UpOwotICAg
ICAgICBpZiAoaXQgIT0gaW1hZ2VUb1RleHR1cmUuZW5kKCkpIHsKLSAgICAgICAgICAgIGlmIChp
dC0+c2Vjb25kLnJlZkNvdW50IDwgMikgewotICAgICAgICAgICAgICAgIGltYWdlVG9UZXh0dXJl
LnJlbW92ZShpdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX07Ci0KLXN0YXRpYyBU
ZXhtYXBHTFNoYWRlclRleHR1cmVzIGdUZXh0dXJlUmVwb3NpdG9yeTsKLQogdm9pZCBCaXRtYXBU
ZXh0dXJlR0w6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiB7CiAgICAgTmF0aXZl
SW1hZ2VQdHIgbmF0aXZlSW1hZ2UgPSBpbWFnZSA/IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpIDogMDsKQEAgLTQ1MSw3ICs0OTQsNyBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6
c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKICAgICBpZiAobmF0aXZlSW1hZ2UgPT0g
bV9pbWFnZSkKICAgICAgICAgcmV0dXJuOwogICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICBH
THVpbnQgbmV3VGV4dHVyZUlEID0gZ1RleHR1cmVSZXBvc2l0b3J5LmZpbmRPckNyZWF0ZShuYXRp
dmVJbWFnZSwgZm91bmQpOworICAgIEdMdWludCBuZXdUZXh0dXJlSUQgPSBtX3RleHR1cmVNYXBw
ZXItPm1fZGF0YS0+ZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmRPckNyZWF0ZShuYXRpdmVJ
bWFnZSwgZm91bmQpOwogICAgIGlmIChuZXdUZXh0dXJlSUQgIT0gbV9pZCkgewogICAgICAgICBk
ZXN0cm95KCk7CiAgICAgICAgIG1faWQgPSBuZXdUZXh0dXJlSUQ7CkBAIC00NjcsNyArNTEwLDcg
QEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2Up
CiAKIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpkZXN0cm95KCkKIHsKLSAgICBpZiAobV9pZCAmJiAo
IW1faW1hZ2UgfHwgIWdUZXh0dXJlUmVwb3NpdG9yeS5kZXJlZihtX2ltYWdlKSkpCisgICAgaWYg
KG1faWQgJiYgKCFtX2ltYWdlIHx8ICFtX3RleHR1cmVNYXBwZXItPm1fZGF0YS0+ZGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2VzLmRlcmVmKG1faW1hZ2UpKSkKICAgICAgICAgR0xfQ01EKGdsRGVsZXRl
VGV4dHVyZXMoMSwgJm1faWQpKQogICAgIGlmIChtX2ZibykKICAgICAgICAgR0xfQ01EKGdsRGVs
ZXRlRnJhbWVidWZmZXJzKDEsICZtX2ZibykpCkBAIC00OTYsOCArNTM5LDMyIEBAIHN0YXRpYyBp
bmxpbmUgVHJhbnNmb3JtYXRpb25NYXRyaXggY3JlYXRlUHJvamVjdGlvbk1hdHJpeChjb25zdCBJ
bnRTaXplJiBzaXplLCBiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCBmbGlw
ID8gMSA6IC0xLCAwLCAxKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmNsZWFudXAoKQor
VGV4dHVyZU1hcHBlckdMOjp+VGV4dHVyZU1hcHBlckdMKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBkZWxldGUgbV9kYXRhOworfQorCitib29sIFRleHR1cmVNYXBwZXJHTDo6
bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKKyNpZiBPUyhNQUNfT1NfWCkKKyAgICByZXR1cm4gYWds
U2V0Q3VycmVudENvbnRleHQobV9kYXRhLT5hZ2xDb250ZXh0KTsKKyNlbGlmIE9TKFVOSVgpCisg
ICAgRGlzcGxheSogZGlzcGxheSA9IFhPcGVuRGlzcGxheSgwKTsKKyAgICBpZiAoIWRpc3BsYXkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2xYTWFrZUN1cnJlbnQoZGlzcGxh
eSwgbV9kYXRhLT5nbHhEcmF3YWJsZSwgbV9kYXRhLT5nbHhDb250ZXh0KTsKKyNlbmRpZgorfQor
Cit2b2lkIFRleHR1cmVNYXBwZXJHTDo6b2J0YWluQ3VycmVudENvbnRleHQoKQoreworI2lmIE9T
KE1BQ19PU19YKQorICAgIG1fZGF0YS0+YWdsQ29udGV4dCA9IGFnbEdldEN1cnJlbnRDb250ZXh0
KCk7CisjZWxpZiBPUyhVTklYKQorICAgIG1fZGF0YS0+Z2x4RHJhd2FibGUgPSBnbFhHZXRDdXJy
ZW50RHJhd2FibGUoKTsKKyAgICBtX2RhdGEtPmdseENvbnRleHQgPSBnbFhHZXRDdXJyZW50Q29u
dGV4dCgpOworI2VuZGlmCiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiaW5kU3VyZmFjZShC
aXRtYXBUZXh0dXJlICpzdXJmYWNlUG9pbnRlcikKQEAgLTUyMyw3ICs1OTAsNyBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJHTDo6YmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSAqc3VyZmFjZVBvaW50ZXIp
CiAgICAgfQogCiAgICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwgc3VyZmFjZS0+c2l6ZSgpLndp
ZHRoKCksIHN1cmZhY2UtPnNpemUoKS5oZWlnaHQoKSkpCi0gICAgbV9wcm9qZWN0aW9uTWF0cml4
ID0gbWF0cml4OworICAgIG1fZGF0YS0+cHJvamVjdGlvbk1hdHJpeCA9IG1hdHJpeDsKIH0KIAog
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OnNldENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTU0
Myw4ICs2MTAsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6cGFpbnRUb1RhcmdldChjb25zdCBC
aXRtYXBUZXh0dXJlJiBhU3VyZmFjZSwgY29uc3QgSW50U2l6ZQogICAgICAgICAgICAgICAgICAg
ICAgICAgc3VyZmFjZS5tX2FjdHVhbFNpemUud2lkdGgoKSwgMCwgMCwgMCwKICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIHN1cmZhY2UubV9hY3R1YWxTaXplLmhlaWdodCgpLCAwLCAwLAogICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAg
IHN1cmZhY2Uub2Zmc2V0KCkueCgpLCBzdXJmYWNlLm9mZnNldCgpLnkoKSwgMCwgMQotICAgICAg
ICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1cmZhY2Uub2Zmc2V0KCkueCgp
LCBzdXJmYWNlLm9mZnNldCgpLnkoKSwgMCwgMSkKICAgICAgICAgICAgICk7CiAKICAgICBjb25z
dCBHTGZsb2F0IG00W10gPSB7CkBAIC01NjAsMTggKzYyNiwxOCBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJHTDo6cGFpbnRUb1RhcmdldChjb25zdCBCaXRtYXBUZXh0dXJlJiBhU3VyZmFjZSwgY29uc3Qg
SW50U2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDF9
OwogCiAgICAgLy8gV2UgYWxyZWFkeSBibGVuZGVkIHRoZSBhbHBoYSBpbjsgdGhlIHJlc3VsdCBp
cyBwcmVtdWx0aXBsaWVkLgotICAgIEdMX0NNRChnbFVzZVByb2dyYW0oZ1NoYWRlckluZm8ucHJv
Z3JhbXNbVGV4bWFwU2hhZGVySW5mbzo6VGFyZ2V0UHJvZ3JhbV0uaWQpKQorICAgIEdMX0NNRChn
bFVzZVByb2dyYW0obV9kYXRhLT5zaGFkZXJJbmZvLnByb2dyYW1zW1RleHR1cmVNYXBwZXJHTERh
dGE6OlNoYWRlckluZm86OlRhcmdldFByb2dyYW1dLmlkKSkKICAgICBHTF9DTUQoZ2xCaW5kRnJh
bWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApKQogICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAs
IHN1cmZhY2VTaXplLndpZHRoKCksIHN1cmZhY2VTaXplLmhlaWdodCgpKSkKICAgICBHTF9DTUQo
Z2xEaXNhYmxlKEdMX1NURU5DSUxfVEVTVCkpCi0gICAgY29uc3QgVGV4bWFwU2hhZGVySW5mbzo6
UHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvID0gZ1NoYWRlckluZm8ucHJvZ3JhbXNbVGV4bWFwU2hh
ZGVySW5mbzo6VGFyZ2V0UHJvZ3JhbV07Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW1J
bmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6T3BhY2l0eVZhcmlhYmxlXSwgb3BhY2l0eSkpCisg
ICAgY29uc3QgVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6UHJvZ3JhbUluZm8mIHBy
b2dyYW1JbmZvID0gbV9kYXRhLT5zaGFkZXJJbmZvLnByb2dyYW1zW1RleHR1cmVNYXBwZXJHTERh
dGE6OlNoYWRlckluZm86OlRhcmdldFByb2dyYW1dOworICAgIEdMX0NNRChnbFVuaWZvcm0xZihw
cm9ncmFtSW5mby52YXJzW1RleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86Ok9wYWNpdHlW
YXJpYWJsZV0sIG9wYWNpdHkpKQogICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVS
RTApKQogICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHN1cmZhY2UubV9p
ZCkpCi0gICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVy
SW5mbzo6U291cmNlVGV4dHVyZVZhcmlhYmxlXSwgMCkpCi0gICAgR0xfQ01EKGdsRW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblZlcnRl
eFZhcmlhYmxlXSkpCi0gICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52
YXJzW1RleG1hcFNoYWRlckluZm86OkluTWF0cml4VmFyaWFibGVdLCAxLCBHTF9GQUxTRSwgbTQp
KQotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBT
aGFkZXJJbmZvOjpJblNvdXJjZU1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00c3JjKSkK
KyAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xE
YXRhOjpTaGFkZXJJbmZvOjpTb3VyY2VUZXh0dXJlVmFyaWFibGVdLCAwKSkKKyAgICBHTF9DTUQo
Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShnSW5WZXJ0ZXhBdHRyaWJ1dGVJbmRleCkpCisgICAg
R0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleHR1cmVNYXBwZXJH
TERhdGE6OlNoYWRlckluZm86OkluTWF0cml4VmFyaWFibGVdLCAxLCBHTF9GQUxTRSwgbTQpKQor
ICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFw
cGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpJblNvdXJjZU1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFM
U0UsIG00c3JjKSkKICAgICBHTF9DTUQoZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCkp
CiAgICAgY29uc3QgR0xmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9
OwogICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIoMCwgMiwgR0xfRkxPQVQsIEdMX0ZB
TFNFLCAwLCB1bml0UmVjdCkpCkBAIC01ODAsMTUgKzY0NiwxNyBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJHTDo6cGFpbnRUb1RhcmdldChjb25zdCBCaXRtYXBUZXh0dXJlJiBhU3VyZmFjZSwgY29uc3Qg
SW50U2l6ZQogICAgIHNldENsaXAodmlzaWJsZVJlY3QpOwogCiAgICAgR0xfQ01EKGdsRHJhd0Fy
cmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpKQotICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OkluVmVydGV4VmFy
aWFibGVdKSkKKyAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoMCkpCiAgICAg
R0xfQ01EKGdsVXNlUHJvZ3JhbSgwKSkKICAgICBHTF9DTUQoZ2xCaW5kQnVmZmVyKEdMX0FSUkFZ
X0JVRkZFUiwgMCkpCi0gICAgbV9jdXJyZW50UHJvZ3JhbSA9IFRleG1hcFNoYWRlckluZm86OlRh
cmdldFByb2dyYW07CisgICAgbV9kYXRhLT5jdXJyZW50UHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJH
TERhdGE6OlNoYWRlckluZm86OlRhcmdldFByb2dyYW07CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0dXJlKCkKIHsKLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEJpdG1hcFRleHR1cmVHTCgpKTsKKyAgICBCaXRtYXBUZXh0dXJlR0wqIHRl
eHR1cmUgPSBuZXcgQml0bWFwVGV4dHVyZUdMKCk7CisgICAgdGV4dHVyZS0+bV90ZXh0dXJlTWFw
cGVyID0gdGhpczsKKyAgICByZXR1cm4gYWRvcHRSZWYodGV4dHVyZSk7CiB9CiAKIH07CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCmlu
ZGV4IDdhMTJjNzIuLmJmN2I1NTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCkBAIC0yOSwxMSArMjksMTMgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCitjbGFzcyBUZXh0dXJlTWFwcGVyR0xEYXRhOworCiAvLyBBbiBPcGVu
R0wtRVMyIGltcGxlbWVudGF0aW9uIG9mIFRleHR1cmVNYXBwZXIuCiBjbGFzcyBUZXh0dXJlTWFw
cGVyR0wgOiBwdWJsaWMgVGV4dHVyZU1hcHBlciB7CiBwdWJsaWM6Ci0gICAgVGV4dHVyZU1hcHBl
ckdMKEdyYXBoaWNzQ29udGV4dCogZ2MpOwotICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJHTCgp
IHt9CisgICAgVGV4dHVyZU1hcHBlckdMKCk7CisgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlckdM
KCk7CiAKICAgICAvLyByZWltcHMgZnJvbSBUZXh0dXJlTWFwcGVyCiAgICAgdmlydHVhbCB2b2lk
IGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3Qm
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBj
b25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7CkBAIC00MywxMSArNDUsMTIgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVU
ZXh0dXJlKCk7CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiB0eXBlKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCB2b2lkIGNsZWFudXAoKTsKKyAgICB2b2lkIG9idGFpbkN1cnJlbnRDb250ZXh0KCk7Cisg
ICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAogcHJpdmF0ZToKLSAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBtX3Byb2plY3Rpb25NYXRyaXg7Ci0gICAgaW50IG1fY3VycmVudFByb2dyYW07
CisgICAgVGV4dHVyZU1hcHBlckdMRGF0YSogbV9kYXRhOworICAgIGZyaWVuZCBjbGFzcyBCaXRt
YXBUZXh0dXJlR0w7CiB9OwogCiAvLyBBbiBvZmZzY3JlZW4gYnVmZmVyIHRvIGJlIHJlbmRlcmVk
IGJ5IHNvZnR3YXJlLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9U
ZXh0dXJlTWFwcGVyUXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJl
TWFwcGVyUXQuY3BwCmluZGV4IDkyMzZkYWUuLjFjM2ExYzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAKQEAgLTU0LDggKzU0LDkgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJl
JiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNr
VGV4dHVyZSk7CiAgICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1
cmZhY2UpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDbGlwKGNvbnN0IEludFJlY3QmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCopOwogICAgIHZp
cnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICBUZXh0dXJlTWFwcGVyUXQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KTsKKyAgICBUZXh0
dXJlTWFwcGVyUXQoKTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5cGUoKSBjb25zdCB7IHJl
dHVybiAiVGV4dHVyZU1hcHBlclF0IjsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBU
ZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CiAKQEAgLTEyMywxMiArMTI0LDE1IEBAIHZvaWQgVGV4
dHVyZU1hcHBlclF0OjpzZXRDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgIHBhaW50ZXIt
PnNldENsaXBSZWN0KHJlY3QpOwogfQogCi1UZXh0dXJlTWFwcGVyUXQ6OlRleHR1cmVNYXBwZXJR
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi0gICAgOiBUZXh0dXJlTWFwcGVyKGNvbnRleHQp
Ci0gICAgLCBtX3BhaW50ZXIoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpCi0gICAgLCBtX2N1
cnJlbnRTdXJmYWNlKDApCitUZXh0dXJlTWFwcGVyUXQ6OlRleHR1cmVNYXBwZXJRdCgpCisgICAg
OiBtX2N1cnJlbnRTdXJmYWNlKDApCiB7Ci0gICAgVGV4dHVyZU1hcHBlclF0Ojppbml0aWFsaXpl
KG1fcGFpbnRlcik7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclF0OjpzZXRHcmFwaGljc0NvbnRl
eHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIG1fcGFpbnRlciA9IGNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpOworICAgIGluaXRpYWxpemUobV9wYWludGVyKTsKIH0KIAogdm9p
ZCBUZXh0dXJlTWFwcGVyUXQ6OmJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpCkBA
IC0xODEsMTAgKzE4NSwxMiBAQCB2b2lkIFRleHR1cmVNYXBwZXJRdDo6ZHJhd1RleHR1cmUoY29u
c3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdAogUGFzc1JlZlB0cjxU
ZXh0dXJlTWFwcGVyPiBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0KQogewogI2lmZGVmIFFUX09QRU5HTF9MSUIKLSAgICBpZiAoY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCktPnBhaW50RW5naW5lKCktPnR5cGUoKSA9PSBRUGFpbnRFbmdpbmU6Ok9wZW5HTDIp
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlckdMKGNvbnRleHQpKTsK
KyAgICBpZiAoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnBhaW50RW5naW5lKCktPnR5cGUo
KSA9PSBRUGFpbnRFbmdpbmU6Ok9wZW5HTDIpIHsKKyAgICAgICAgVGV4dHVyZU1hcHBlckdMKiB0
ZXhtYXBHTCA9IG5ldyBUZXh0dXJlTWFwcGVyR0w7CisgICAgICAgIHJldHVybiBhZG9wdFJlZih0
ZXhtYXBHTCk7CisgICAgfQogI2VuZGlmCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJl
TWFwcGVyUXQoY29udGV4dCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBl
clF0KTsKIH0KIAogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggMDU3YmNmYy4u
NTRlNmM3YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApAQCAtNDAsNyArNDAsNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdHJ1Y3QgVGV4bWFwUGFpbnRPcHRpb25zIHsKICAgICBC
aXRtYXBUZXh0dXJlKiBzdXJmYWNlOwogICAgIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXI7
Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0OwogICAgIFRleHR1cmVNYXBwZXJOb2RlKiBy
b290TGF5ZXI7CiAgICAgZmxvYXQgb3BhY2l0eTsKICAgICBJbnRSZWN0IHNjaXNzb3JSZWN0OwpA
QCAtMjE0LDcgKzIxMyw3IEBAIHB1YmxpYzoKICAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3NpemU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBzZXRQbGF0Zm9ybUxheWVyQ2xpZW50
KFRleHR1cmVNYXBwZXJMYXllckNsaWVudCopOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwg
Y29uc3QgSW50UmVjdCYgZXhwb3NlZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChUZXh0dXJl
TWFwcGVyKiwgY29uc3QgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6UGFpbnRPcHRpb25zJik7
CiAKICAgICBzdGF0aWMgVGV4dHVyZU1hcHBlck5vZGUqIHRvVGV4dHVyZU1hcHBlck5vZGUoR3Jh
cGhpY3NMYXllciopOwogcHVibGljOgpAQCAtMzk4LDcgKzM5Nyw3IEBAIGJvb2wgVGV4dHVyZU1h
cHBlck5vZGU6Omhhc1N1cmZhY2VEZXNjZW5kYW50cygpIGNvbnN0CiAKIH0KIAotdm9pZCBUZXh0
dXJlTWFwcGVyTm9kZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRT
aXplJiBzaXplLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0JiBleHBv
c2VkUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3Bh
Y2l0eSkKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50KFRleHR1cmVNYXBwZXIqIHRleHR1
cmVNYXBwZXIsIGNvbnN0IFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXI6OlBhaW50T3B0aW9ucyYg
b3B0aW9ucykKIHsKICAgICBBU1NFUlQobV9sYXllclR5cGUgPT0gUm9vdExheWVyKTsKICAgICBp
ZiAobV9zaXplLmlzRW1wdHkoKSkKQEAgLTQwOSw4ICs0MDgsNiBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNp
emUsIGNvbgogICAgICgiW1RleHR1cmVNYXBwZXJdIFJvb3RQYWludCEhXG4iKTsKICNlbmRpZgog
Ci0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXI+IHRleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVy
OjpjcmVhdGUoY29udGV4dCk7Ci0KICAgICBpZiAodGV4dHVyZU1hcHBlci0+dHlwZSgpICE9IG1f
bGFzdFRleHR1cmVNYXBwZXJUeXBlKQogICAgICAgICBnVGV4dHVyZU1hcHBlckNhY2hlLm1fZGF0
YS5jbGVhcigpOwogCkBAIC00MTgsMTYgKzQxNSwxNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2Rl
OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIGNv
bgogICAgIFRleG1hcFBhaW50T3B0aW9ucyBvcHQ7CiAgICAgb3B0Lm9wYWNpdHkgPSAxOwogICAg
IG9wdC5yb290TGF5ZXIgPSB0aGlzOwotICAgIG9wdC5zY2lzc29yUmVjdCA9IHRhcmdldFJlY3Q7
Ci0gICAgb3B0LnZpc2libGVSZWN0ID0gZXhwb3NlZFJlY3Q7Ci0gICAgb3B0LnRleHR1cmVNYXBw
ZXIgPSB0ZXh0dXJlTWFwcGVyLmdldCgpOwotICAgIG9wdC5jb250ZXh0ID0gdGV4dHVyZU1hcHBl
ci0+Z3JhcGhpY3NDb250ZXh0KCk7CisgICAgb3B0LnNjaXNzb3JSZWN0ID0gb3B0aW9ucy50YXJn
ZXRSZWN0OworICAgIG9wdC52aXNpYmxlUmVjdCA9IG9wdGlvbnMudmlzaWJsZVJlY3Q7CisgICAg
b3B0LnRleHR1cmVNYXBwZXIgPSB0ZXh0dXJlTWFwcGVyOwogICAgIG9wdC5zdXJmYWNlID0gMDsK
ICAgICBwYWludFJlY3Vyc2l2ZShvcHQpOwogCiAgICAgaWYgKHRleHR1cmVNYXBwZXItPmFsbG93
U3VyZmFjZUZvclJvb3QoKSB8fCBtX3N0YXRlLmhhc1N1cmZhY2VEZXNjZW5kYW50cykgewogICAg
ICAgICB0ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsKLSAgICAgICAgdGV4dHVyZU1hcHBl
ci0+cGFpbnRUb1RhcmdldCgqbV9zdXJmYWNlLmdldCgpLCBzaXplLCB0cmFuc2Zvcm0sIG9wYWNp
dHkgKiBtX3N0YXRlLm9wYWNpdHksIHRhcmdldFJlY3QpOworICAgICAgICB0ZXh0dXJlTWFwcGVy
LT5wYWludFRvVGFyZ2V0KCptX3N1cmZhY2UuZ2V0KCksIG9wdGlvbnMudmlld3BvcnRTaXplLCBv
cHRpb25zLnRyYW5zZm9ybSwgb3B0aW9ucy5vcGFjaXR5ICogbV9zdGF0ZS5vcGFjaXR5LCBvcHRp
b25zLnRhcmdldFJlY3QpOwogICAgIH0KICAgICBnVGV4dHVyZU1hcHBlckNhY2hlLnB1cmdlKCk7
CiB9CkBAIC02OTIsMTAgKzY4OCw5IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnVwbG9hZFRl
eHR1cmVGcm9tQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjCiAKICAgICB7
CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KG1fdGV4dHVyZS0+YmVnaW5QYWludChk
aXJ0eVJlY3QpKTsKLSAgICAgICAgaWYgKHRleHR1cmVNYXBwZXIgJiYgdGV4dHVyZU1hcHBlci0+
Z3JhcGhpY3NDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogb3JpZ2lu
YWxDb250ZXh0ID0gdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgICAgICAg
ICBjb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkob3JpZ2luYWxDb250ZXh0LT5p
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgICAgICAgICAgY29udGV4dC5zZXRUZXh0
RHJhd2luZ01vZGUob3JpZ2luYWxDb250ZXh0LT50ZXh0RHJhd2luZ01vZGUoKSk7CisgICAgICAg
IGlmICh0ZXh0dXJlTWFwcGVyKSB7CisgICAgICAgICAgICBjb250ZXh0LnNldEltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkodGV4dHVyZU1hcHBlci0+aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgp
KTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0VGV4dERyYXdpbmdNb2RlKHRleHR1cmVNYXBwZXIt
PnRleHREcmF3aW5nTW9kZSgpKTsKICAgICAgICAgfQogICAgICAgICBtX2xheWVyLT5wYWludEdy
YXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBkaXJ0eVJlY3QpOwogICAgIH0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaAppbmRleCAwM2Mx
YzZkLi44OTg5OWMwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlci5oCkBAIC05NywyMCArOTcsMzAgQEAgcHVibGljOgogICAgICAgICBkcmF3
VGV4dHVyZSh0ZXh0dXJlLCBJbnRSZWN0KDAsIDAsIHRleHR1cmUuY29udGVudFNpemUoKS53aWR0
aCgpLCB0ZXh0dXJlLmNvbnRlbnRTaXplKCkuaGVpZ2h0KCkpLCBtYXRyaXgsIG9wYWNpdHksIDAp
OwogICAgIH0KIAorICAgIHZpcnR1YWwgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3ND
b250ZXh0KikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldENsaXAoY29uc3QgSW50UmVjdCYpID0g
MDsKICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9vdCgpIGNvbnN0ID0gMDsKICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpID0gMDsK
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5cGUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGNsZWFudXAoKSB7fQogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZ2M7Ci0gICAgfQorICAgIHZvaWQgc2V0
SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7
IG1faW50ZXJwb2xhdGlvblF1YWxpdHkgPSBxdWFsaXR5OyB9CisgICAgdm9pZCBzZXRUZXh0RHJh
d2luZ01vZGUoaW50IG1vZGUpIHsgbV90ZXh0RHJhd2luZ01vZGUgPSBtb2RlOyB9CisKKyAgICBJ
bnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnRlcnBvbGF0aW9uUXVhbGl0eTsgfQorICAgIGludCB0ZXh0RHJhd2luZ01vZGUo
KSBjb25zdCB7IHJldHVybiBtX3RleHREcmF3aW5nTW9kZTsgfQorCisgICAgdm9pZCBzZXRWaWV3
cG9ydFNpemUoY29uc3QgSW50U2l6ZSYpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgVGV4dHVyZU1hcHBl
cihHcmFwaGljc0NvbnRleHQqIGdjKSA6IG1fZ2MoZ2MpIHt9Ci0gICAgR3JhcGhpY3NDb250ZXh0
KiBtX2djOworICAgIFRleHR1cmVNYXBwZXIoKQorICAgICAgICA6IG1faW50ZXJwb2xhdGlvblF1
YWxpdHkoSW50ZXJwb2xhdGlvbkRlZmF1bHQpCisgICAgICAgICwgbV90ZXh0RHJhd2luZ01vZGUo
Y1RleHRGaWxsKQorICAgIHt9CisKK3ByaXZhdGU6CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkg
bV9pbnRlcnBvbGF0aW9uUXVhbGl0eTsKKyAgICBpbnQgbV90ZXh0RHJhd2luZ01vZGU7CiB9Owog
CiB9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKaW5kZXggMjNlOWZjOS4uYTE1NjgxYyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCkBAIC0yNSw2ICsyNSw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBJbnRT
aXplOworY2xhc3MgVGV4dHVyZU1hcHBlcjsKIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4Owog
CiAKQEAgLTUwLDEwICs1MSwxNyBAQCBwdWJsaWM6CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJDb250
ZW50TGF5ZXIgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIgewogcHVibGljOgor
ICAgIHN0cnVjdCBQYWludE9wdGlvbnMgeworICAgICAgICBJbnRSZWN0IHZpc2libGVSZWN0Owor
ICAgICAgICBJbnRSZWN0IHRhcmdldFJlY3Q7CisgICAgICAgIEludFNpemUgdmlld3BvcnRTaXpl
OworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CisgICAgICAgIGZsb2F0
IG9wYWNpdHk7CisgICAgfTsKKwogICAgIHZpcnR1YWwgdm9pZCBzZXRQbGF0Zm9ybUxheWVyQ2xp
ZW50KFRleHR1cmVNYXBwZXJMYXllckNsaWVudCopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFJlY3QmIHRhcmdl
dFJlY3QsIGNvbnN0IEludFJlY3QmIGV4cG9zZWRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5KSB7fQorICAgIHZpcnR1YWwgdm9pZCBwYWlu
dChUZXh0dXJlTWFwcGVyKiwgY29uc3QgUGFpbnRPcHRpb25zJikge30KICAgICB2aXJ0dWFsIElu
dFNpemUgc2l6ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFRleHR1cmVN
YXBwZXIoKSB7fQogICAgIHZpcnR1YWwgVHlwZSBsYXllclR5cGUoKSBjb25zdCB7IHJldHVybiBD
b250ZW50TGF5ZXI7IH0KIH07CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1l
LmNwcCBiL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAppbmRleCAzOWU3NGQ5Li5mZTY1YmU2
IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKKysrIGIvV2ViS2l0L3F0
L0FwaS9xd2ViZnJhbWUuY3BwCkBAIC05Nyw2ICs5Nyw3IEBACiAjaW5jbHVkZSAicnVudGltZV9y
b290LmgiCiAjZW5kaWYKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaW5jbHVkZSAidGV4bWFw
L1RleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXIuaCIKICNlbmRpZgogI2luY2x1ZGUgInd0Zi9IYXNoTWFwLmgiCkBAIC0yOTQsMTkgKzI5
NSw0MSBAQCB2b2lkIFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlckZyb21UaWxlZEJhY2tpbmdTdG9y
ZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbgogCiAgICAgICAgIHBhaW50ZXItPnJlc3Rv
cmUoKTsKICAgICB9Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVY
VFVSRV9NQVBQRVIpCi0gICAgLy8gVGV4dHVyZU1hcHBlciBtaWdodCB1c2UgcmF3IE9wZW5HTCBv
ciBzb21lIG90aGVyIGJhY2tlbmQgdGhhdCByZXF1aXJlcyBuYXRpdmUgcGFpbnRpbmcuIE9uIHJh
c3RlciB0aGlzIGRvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0LgotICAgIGlmIChyb290R3JhcGhpY3NM
YXllcikgewotICAgICAgICBwYWludGVyLT5iZWdpbk5hdGl2ZVBhaW50aW5nKCk7Ci0gICAgICAg
IHJvb3RHcmFwaGljc0xheWVyLT5wYWludChjb250ZXh0LCB2aWV3LT5zaXplKCksIHZpZXctPmZy
YW1lUmVjdCgpLCBJbnRSZWN0KGNsaXAuYm91bmRpbmdSZWN0KCkpLCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCgpLCBwYWludGVyLT5vcGFjaXR5KCkpOwotICAgICAgICBwYWludGVyLT5lbmROYXRpdmVQ
YWludGluZygpOwotICAgIH0KIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYg
VVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIHJlbmRlckNvbXBvc2l0ZWRMYXllcnMoY29udGV4dCwg
SW50UmVjdChjbGlwLmJvdW5kaW5nUmVjdCgpKSk7CiAgICAgcmVuZGVyUmVsYXRpdmVDb29yZHMo
Y29udGV4dCwgKFFXZWJGcmFtZTo6UmVuZGVyTGF5ZXIpKFFXZWJGcmFtZTo6U2Nyb2xsQmFyTGF5
ZXIgfCBRV2ViRnJhbWU6OlBhbkljb25MYXllciksIGNsaXApOwogI2VuZGlmCiB9CiAjZW5kaWYK
IAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVS
KQordm9pZCBRV2ViRnJhbWVQcml2YXRlOjpyZW5kZXJDb21wb3NpdGVkTGF5ZXJzKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgY2xpcCkKK3sKKyAgICBpZiAoIXJvb3RH
cmFwaGljc0xheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXRleHR1cmVNYXBwZXIp
CisgICAgICAgIHRleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoY29udGV4dCk7
CisKKyAgICB0ZXh0dXJlTWFwcGVyLT5zZXRHcmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAg
dGV4dHVyZU1hcHBlci0+c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LT5pbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5KCkpOworICAgIHRleHR1cmVNYXBwZXItPnNldFRleHREcmF3
aW5nTW9kZShjb250ZXh0LT50ZXh0RHJhd2luZ01vZGUoKSk7CisgICAgUVBhaW50ZXIqIHBhaW50
ZXIgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBm
cmFtZS0+dmlldygpOworICAgIHBhaW50ZXItPnNhdmUoKTsKKyAgICBwYWludGVyLT5iZWdpbk5h
dGl2ZVBhaW50aW5nKCk7CisgICAgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6UGFpbnRPcHRp
b25zIG9wdGlvbnM7CisgICAgb3B0aW9ucy52aXNpYmxlUmVjdCA9IGNsaXA7CisgICAgb3B0aW9u
cy50YXJnZXRSZWN0ID0gdmlldy0+ZnJhbWVSZWN0KCk7CisgICAgb3B0aW9ucy52aWV3cG9ydFNp
emUgPSB2aWV3LT5zaXplKCk7CisgICAgb3B0aW9ucy5vcGFjaXR5ID0gcGFpbnRlci0+b3BhY2l0
eSgpOworICAgIHJvb3RHcmFwaGljc0xheWVyLT5wYWludCh0ZXh0dXJlTWFwcGVyLmdldCgpLCBv
cHRpb25zKTsKKyAgICBwYWludGVyLT5lbmROYXRpdmVQYWludGluZygpOworICAgIHBhaW50ZXIt
PnJlc3RvcmUoKTsKK30KKyNlbmRpZgorCiB2b2lkIFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlclJl
bGF0aXZlQ29vcmRzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUVdlYkZyYW1lOjpSZW5kZXJM
YXllciBsYXllciwgY29uc3QgUVJlZ2lvbiYgY2xpcCkKIHsKICAgICBpZiAoIWZyYW1lLT52aWV3
KCkgfHwgIWZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkKQEAgLTM0OSwxNiArMzcyLDggQEAgdm9p
ZCBRV2ViRnJhbWVQcml2YXRlOjpyZW5kZXJSZWxhdGl2ZUNvb3JkcyhHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIFFXZWJGcmFtZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKICAg
ICAgICAgfQogICAgICAgICBwYWludGVyLT5yZXN0b3JlKCk7Ci0KICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKLSAgICAgICAgaWYgKHJvb3RH
cmFwaGljc0xheWVyKSB7Ci0gICAgICAgICAgICBwYWludGVyLT5zYXZlKCk7Ci0gICAgICAgICAg
ICBwYWludGVyLT5iZWdpbk5hdGl2ZVBhaW50aW5nKCk7Ci0gICAgICAgICAgICByb290R3JhcGhp
Y3NMYXllci0+cGFpbnQoY29udGV4dCwgdmlldy0+c2l6ZSgpLCB2aWV3LT5mcmFtZVJlY3QoKSwg
SW50UmVjdChjbGlwLmJvdW5kaW5nUmVjdCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBjb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKS0+b3BhY2l0eSgpKTsKLSAgICAgICAgICAgIHBhaW50ZXItPmVuZE5hdGl2ZVBhaW50aW5n
KCk7Ci0gICAgICAgICAgICBwYWludGVyLT5yZXN0b3JlKCk7Ci0gICAgICAgIH0KKyAgICAgICAg
cmVuZGVyQ29tcG9zaXRlZExheWVycyhjb250ZXh0LCBJbnRSZWN0KGNsaXAuYm91bmRpbmdSZWN0
KCkpKTsKICNlbmRpZgogICAgIH0KICAgICBpZiAobGF5ZXIgJiAoUVdlYkZyYW1lOjpQYW5JY29u
TGF5ZXIgfCBRV2ViRnJhbWU6OlNjcm9sbEJhckxheWVyKSkgewpkaWZmIC0tZ2l0IGEvV2ViS2l0
L3F0L0FwaS9xd2ViZnJhbWVfcC5oIGIvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oCmluZGV4
IDU2NjBiZDEuLjYzNGUyMWIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3Au
aAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmgKQEAgLTMzLDYgKzMzLDEwIEBACiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJWaWV3cG9ydEFyZ3VtZW50cy5oIgogCisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaW5j
bHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgRnJhbWVMb2FkZXJDbGllbnRRdDsKICAgICBjbGFzcyBGcmFtZVZpZXc7
CkBAIC05NCw2ICs5OCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbmRlckZyb21UaWxlZEJhY2tp
bmdTdG9yZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBRUmVnaW9uJiBjbGlwKTsK
ICNlbmRpZgogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVS
RV9NQVBQRVIpCisgICAgdm9pZCByZW5kZXJDb21wb3NpdGVkTGF5ZXJzKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcCk7CisjZW5k
aWYKICAgICBRV2ViRnJhbWUgKnE7CiAgICAgUXQ6OlNjcm9sbEJhclBvbGljeSBob3Jpem9udGFs
U2Nyb2xsQmFyUG9saWN5OwogICAgIFF0OjpTY3JvbGxCYXJQb2xpY3kgdmVydGljYWxTY3JvbGxC
YXJQb2xpY3k7CkBAIC0xMDYsNiArMTEzLDcgQEAgcHVibGljOgogICAgIGludCBtYXJnaW5IZWln
aHQ7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQ
RVIpCiAgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNvbnRlbnRMYXllciogcm9vdEdyYXBoaWNz
TGF5ZXI7CisgICAgUmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+IHRleHR1cmVNYXBwZXI7
CiAjZW5kaWYKICAgICBib29sIHpvb21UZXh0T25seTsKIH07CmRpZmYgLS1naXQgYS9XZWJLaXQv
cXQvQ2hhbmdlTG9nIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCAxY2Y3OGQyLi4xNzYxOGNh
IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9xdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMC0xMC0zMSAgTm9hbSBSb3NlbnRoYWwgIDxub2FtLnJv
c2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBD
aHJpc3RpYW5zZW4uCisKKyAgICAgICAgW1RleG1hcF0gW1F0XSBUZXh0dXJlIG1hcHBlciBpbml0
aWFsIGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00NzA3MAorCisgICAgICAgIFRleHR1cmVNYXBwZXIgY2FuIG5vdyByZW5kZXIg
d2l0aG91dCBhbiBhY3RpdmUgR3JhcGhpY3NDb250ZXh0LCBhZGp1c3QgUVdlYkZyYW1lIHRvIHRo
ZSBuZXcgQVBJLgorCisgICAgICAgICogQXBpL3F3ZWJmcmFtZS5jcHA6CisgICAgICAgIChRV2Vi
RnJhbWVQcml2YXRlOjpyZW5kZXJGcm9tVGlsZWRCYWNraW5nU3RvcmUpOgorICAgICAgICAoUVdl
YkZyYW1lUHJpdmF0ZTo6cmVuZGVyQ29tcG9zaXRlZExheWVycyk6CisgICAgICAgIChRV2ViRnJh
bWVQcml2YXRlOjpyZW5kZXJSZWxhdGl2ZUNvb3Jkcyk6CisgICAgICAgICogQXBpL3F3ZWJmcmFt
ZV9wLmg6CisKIDIwMTAtMTAtMjggIE5vYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9r
aWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFyaXlhIEhpZGF5YXQuCg==
</data>
<flag name="commit-queue"
          id="62713"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72483</attachid>
            <date>2010-10-31 20:21:40 -0700</date>
            <delta_ts>2010-11-10 14:03:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch-47070-11.diff</filename>
            <type>text/plain</type>
            <size>37088</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWQ0ZTc5YS4uMGM5OTU2OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAxMC0xMC0zMSAgTm9hbSBSb3NlbnRo
YWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW1RleG1hcF0gW1F0XSBUZXh0dXJlIG1hcHBlciBpbml0
aWFsIGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00NzA3MAorCisgICAgICAgIFNvbWUgcmVmYWN0b3IgZm9yIHRleG1hcCB0byBl
bmFibGUgV2ViS2l0MjogcmVtb3ZlIGdsb2JhbHMsIGFuZCBhbGxvdyBUZXh0dXJlTWFwcGVyIHRv
IGV4aXN0IHdpdGhvdXQgYSBHcmFwaGljc0NvbnRleHQuCisgICAgICAgIFRoaXMgd2lsbCBhbGxv
dyByZW5kZXJpbmcgdGhlIFRleHR1cmVNYXBwZXJOb2RlIHRyZWUgd2l0aG91dCBhbiBhY3RpdmUg
UVBhaW50ZXIsIGludG8gdGhlIGN1cnJlbnQgR0wgY29udGV4dC4KKyAgICAgICAgTW9zdCBvZiB0
aGUgY2hhbmdlcyBzaW1wbHkgbW92ZSB0aGUgZ2xvYmFzIGluIFRleHR1cmVNYXBwZXJHTCBpbnRv
IG1lbWJlcnMgb2YgdGhhdCBjbGFzcy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIE9sZCB0ZXN0
cyBpbiBMYXlvdXRUZXN0cy9jb21wb3NpdGluZyBjb3ZlciB0aGlzLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpnZXRVbmlmb3JtTG9jYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6Y3Jl
YXRlU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRh
OjpEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnk6OmZpbmRPckNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpEaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZVJlcG9zaXRvcnk6OmRlcmVmKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERh
dGE6OkRpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVwb3NpdG9yeTo6RGlyZWN0bHlDb21wb3NpdGVk
SW1hZ2VSZXBvc2l0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6
OkRpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVwb3NpdG9yeTo6fkRpcmVjdGx5Q29tcG9zaXRlZElt
YWdlUmVwb3NpdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpU
ZXh0dXJlTWFwcGVyR0xEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6
VGV4dHVyZU1hcHBlckdMKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJh
d1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpzZXRDb250ZW50
c1RvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpkZXN0cm95KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6flRleHR1cmVNYXBwZXJHTCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6Om1ha2VDb250ZXh0Q3VycmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6Om9idGFpbkN1cnJlbnRDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6YmluZFN1cmZhY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpwYWludFRvVGFyZ2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMOjpkYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9U
ZXh0dXJlTWFwcGVyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclF0OjpU
ZXh0dXJlTWFwcGVyUXQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclF0OjpzZXRH
cmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6Y3JlYXRl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnBhaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjp1cGxvYWRUZXh0dXJlRnJv
bUNvbnRlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpzZXRHcmFwaGljc0NvbnRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6c2V0SW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpzZXRUZXh0RHJh
d2luZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6aW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjp0ZXh0RHJh
d2luZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6VGV4dHVyZU1hcHBl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ29udGVudExheWVy
OjpwYWludCk6CisKIDIwMTAtMTAtMjggIE5vYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxA
bm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFyaXlhIEhpZGF5YXQuCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcApp
bmRleCA5NjY2NTZiLi5mYTYyZDFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTMwLDggKzMwLDEyIEBACiAjaWYg
ZGVmaW5lZChURVhNQVBfT1BFTkdMX0VTXzIpCiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAjZWxp
ZiBPUyhNQUNfT1NfWCkKKyNpbmNsdWRlIDxBR0wvYWdsLmg+CiAjaW5jbHVkZSA8Z2wuaD4KICNl
bHNlCisjaWYgT1MoVU5JWCkKKyNpbmNsdWRlIDxHTC9nbHguaD4KKyNlbmRpZgogI2luY2x1ZGUg
PEdML2dsLmg+CiAjZW5kaWYKIApAQCAtOTAsNiArOTQsMTMyIEBAIGlubGluZSBzdGF0aWMgdm9p
ZCBkZWJ1Z0dMQ29tbWFuZChjb25zdCBjaGFyKiBjb21tYW5kLCBpbnQgbGluZSkKICNkZWZpbmUg
R0xfQ01EKHgpIHgKICNlbmRpZgogCitzdGF0aWMgY29uc3QgR0x1aW50IGdJblZlcnRleEF0dHJp
YnV0ZUluZGV4ID0gMDsKKworc3RydWN0IFRleHR1cmVNYXBwZXJHTERhdGEgeworICAgIHN0YXRp
YyBzdHJ1Y3QgU2hhZGVySW5mbyB7CisgICAgICAgIGVudW0gU2hhZGVyUHJvZ3JhbUluZGV4IHsK
KyAgICAgICAgICAgIFNpbXBsZVByb2dyYW0sCisgICAgICAgICAgICBPcGFjaXR5QW5kTWFza1By
b2dyYW0sCisgICAgICAgICAgICBUYXJnZXRQcm9ncmFtLAorCisgICAgICAgICAgICBQcm9ncmFt
Q291bnQKKyAgICAgICAgfTsKKworICAgICAgICBlbnVtIFNoYWRlclZhcmlhYmxlSW5kZXggewor
ICAgICAgICAgICAgSW5NYXRyaXhWYXJpYWJsZSwKKyAgICAgICAgICAgIEluU291cmNlTWF0cml4
VmFyaWFibGUsCisgICAgICAgICAgICBJbk1hc2tNYXRyaXhWYXJpYWJsZSwKKyAgICAgICAgICAg
IE9wYWNpdHlWYXJpYWJsZSwKKyAgICAgICAgICAgIFNvdXJjZVRleHR1cmVWYXJpYWJsZSwKKyAg
ICAgICAgICAgIE1hc2tUZXh0dXJlVmFyaWFibGUsCisKKyAgICAgICAgICAgIFZhcmlhYmxlQ291
bnQKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgUHJvZ3JhbUluZm8geworICAgICAgICAg
ICAgR0x1aW50IGlkOworICAgICAgICAgICAgR0xpbnQgdmFyc1tWYXJpYWJsZUNvdW50XTsKKyAg
ICAgICAgfTsKKworICAgICAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oU2hhZGVyUHJvZ3Jh
bUluZGV4IHByb2csIFNoYWRlclZhcmlhYmxlSW5kZXggdmFyLCBjb25zdCBjaGFyKiBuYW1lKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcHJvZ3JhbXNbcHJvZ10udmFyc1t2YXJdID0g
Z2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbXNbcHJvZ10uaWQsIG5hbWUpOworICAgICAgICB9
CisKKyAgICAgICAgdm9pZCBjcmVhdGVTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRleFNo
YWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UsIFNoYWRlclByb2dy
YW1JbmRleCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgR0x1aW50IHZlcnRleFNoYWRl
ciA9IGdsQ3JlYXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIpOworICAgICAgICAgICAgR0x1aW50
IGZyYWdtZW50U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKKyAg
ICAgICAgICAgIEdMX0NNRChnbFNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhT
aGFkZXJTb3VyY2UsIDApKQorICAgICAgICAgICAgR0xfQ01EKGdsU2hhZGVyU291cmNlKGZyYWdt
ZW50U2hhZGVyLCAxLCAmZnJhZ21lbnRTaGFkZXJTb3VyY2UsIDApKQorICAgICAgICAgICAgR0x1
aW50IHByb2dyYW1JRCA9IGdsQ3JlYXRlUHJvZ3JhbSgpOworICAgICAgICAgICAgR0xfQ01EKGds
Q29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpKQorICAgICAgICAgICAgR0xfQ01EKGdsQ29tcGls
ZVNoYWRlcihmcmFnbWVudFNoYWRlcikpCisgICAgICAgICAgICBHTF9DTUQoZ2xBdHRhY2hTaGFk
ZXIocHJvZ3JhbUlELCB2ZXJ0ZXhTaGFkZXIpKQorICAgICAgICAgICAgR0xfQ01EKGdsQXR0YWNo
U2hhZGVyKHByb2dyYW1JRCwgZnJhZ21lbnRTaGFkZXIpKQorICAgICAgICAgICAgR0xfQ01EKGds
QmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgZ0luVmVydGV4QXR0cmlidXRlSW5kZXgsICJJ
blZlcnRleCIpKQorICAgICAgICAgICAgR0xfQ01EKGdsTGlua1Byb2dyYW0ocHJvZ3JhbUlEKSkK
KyAgICAgICAgICAgIHByb2dyYW1zW2luZGV4XS5pZCA9IHByb2dyYW1JRDsKKyNpZmRlZiBQUklO
VF9QUk9HUkFNX0lORk9fTE9HCisgICAgICAgICAgICBjaGFyIGluZm9Mb2dbMTAyNF07CisgICAg
ICAgICAgICBpbnQgbGVuOworICAgICAgICAgICAgR0xfQ01EKGdsR2V0UHJvZ3JhbUluZm9Mb2co
cHJvZ3JhbUlELCAxMDI0LCAmbGVuLCBpbmZvTG9nKSk7CisgICAgICAgICAgICBMT0coR3JhcGhp
Y3MsICJDb21waWxlZCBwcm9ncmFtIGZvciB0ZXh0dXJlIG1hcHBlci4gTG9nOiAlc1xuIiwgaW5m
b0xvZyk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIFByb2dyYW1JbmZvIHByb2dyYW1z
W1Byb2dyYW1Db3VudF07CisKKyAgICB9IHNoYWRlckluZm87CisKKyAgICBzdHJ1Y3QgRGlyZWN0
bHlDb21wb3NpdGVkSW1hZ2VSZXBvc2l0b3J5IHsKKyAgICAgICAgc3RydWN0IEVudHJ5IHsKKyAg
ICAgICAgICAgIEdMdWludCB0ZXh0dXJlOworICAgICAgICAgICAgaW50IHJlZkNvdW50OworICAg
ICAgICB9OworICAgICAgICBIYXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBFbnRyeT4gaW1hZ2VUb1Rl
eHR1cmU7CisKKyAgICAgICAgR0x1aW50IGZpbmRPckNyZWF0ZShOYXRpdmVJbWFnZVB0ciBpbWFn
ZSwgYm9vbCYgZm91bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEhhc2hNYXA8TmF0aXZlSW1h
Z2VQdHIsIEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5maW5kKGltYWdlKTsK
KyAgICAgICAgICAgIGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoaXQgIT0gaW1hZ2VU
b1RleHR1cmUuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLnJlZkNvdW50Kys7
CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiBp
dC0+c2Vjb25kLnRleHR1cmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBFbnRyeSBlbnRy
eTsKKyAgICAgICAgICAgIEdMX0NNRChnbEdlblRleHR1cmVzKDEsICZlbnRyeS50ZXh0dXJlKSk7
CisgICAgICAgICAgICBlbnRyeS5yZWZDb3VudCA9IDE7CisgICAgICAgICAgICBpbWFnZVRvVGV4
dHVyZS5hZGQoaW1hZ2UsIGVudHJ5KTsKKyAgICAgICAgICAgIHJldHVybiBlbnRyeS50ZXh0dXJl
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBkZXJlZihOYXRpdmVJbWFnZVB0ciBpbWFnZSkK
KyAgICAgICAgeworICAgICAgICAgICAgSGFzaE1hcDxOYXRpdmVJbWFnZVB0ciwgRW50cnk+Ojpp
dGVyYXRvciBpdCA9IGltYWdlVG9UZXh0dXJlLmZpbmQoaW1hZ2UpOworICAgICAgICAgICAgaWYg
KGl0ICE9IGltYWdlVG9UZXh0dXJlLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGl0LT5z
ZWNvbmQucmVmQ291bnQgPCAyKSB7CisgICAgICAgICAgICAgICAgICAgIGltYWdlVG9UZXh0dXJl
LnJlbW92ZShpdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIERpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVwb3NpdG9yeSgpCisgICAg
ICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIH5EaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9z
aXRvcnkoKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKEhhc2hNYXA8TmF0aXZlSW1hZ2VQ
dHIsIEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5iZWdpbigpOyBpdCAhPSBp
bWFnZVRvVGV4dHVyZS5lbmQoKTsgKytpdCkgeworICAgICAgICAgICAgICAgIEdMdWludCB0ZXh0
dXJlID0gaXQtPnNlY29uZC50ZXh0dXJlOworICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlKQor
ICAgICAgICAgICAgICAgICAgICBHTF9DTUQoZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSkp
OworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICB9IGRpcmVjdGx5Q29tcG9zaXRlZElt
YWdlczsKKworICAgIFRleHR1cmVNYXBwZXJHTERhdGEoKQorICAgICAgICA6IGN1cnJlbnRQcm9n
cmFtKFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86OlRhcmdldFByb2dyYW0pCisgICAg
eyB9CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcm9qZWN0aW9uTWF0cml4OworICAgIGlu
dCBjdXJyZW50UHJvZ3JhbTsKKworI2lmIE9TKE1BQ19PU19YKQorICAgIEFHTENvbnRleHQgYWds
Q29udGV4dDsKKyNlbGlmIE9TKFVOSVgpCisgICAgRHJhd2FibGUgZ2x4RHJhd2FibGU7CisgICAg
R0xYQ29udGV4dCBnbHhDb250ZXh0OworI2VuZGlmCit9OworCitUZXh0dXJlTWFwcGVyR0xEYXRh
OjpTaGFkZXJJbmZvIFRleHR1cmVNYXBwZXJHTERhdGE6OnNoYWRlckluZm87CisKIGNsYXNzIEJp
dG1hcFRleHR1cmVHTCA6IHB1YmxpYyBCaXRtYXBUZXh0dXJlIHsKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgZGVzdHJveSgpOwpAQCAtMTExLDYgKzI0MSw3IEBAIHByaXZhdGU6CiAgICAgR0x1
aW50IG1fZmJvOwogICAgIEludFNpemUgbV9hY3R1YWxTaXplOwogICAgIGJvb2wgbV9zdXJmYWNl
TmVlZHNSZXNldDsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlckdMPiBtX3RleHR1cmVNYXBwZXI7
CiAgICAgQml0bWFwVGV4dHVyZUdMKCkKICAgICAgICAgOiBtX2lkKDApCiAgICAgICAgICwgbV9p
bWFnZSgwKQpAQCAtMTIzLDcyICsyNTQsMjEgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
VGV4dHVyZU1hcHBlckdMOwogfTsKIAotc3RhdGljIHN0cnVjdCBUZXhtYXBTaGFkZXJJbmZvIHsK
LSAgICBlbnVtIFNoYWRlclByb2dyYW1JbmRleCB7Ci0gICAgICAgIFNpbXBsZVByb2dyYW0sCi0g
ICAgICAgIE9wYWNpdHlBbmRNYXNrUHJvZ3JhbSwKLSAgICAgICAgVGFyZ2V0UHJvZ3JhbSwKLSAg
ICAgICAgTnVtUHJvZ3JhbXMKLSAgICB9OwotCi0gICAgZW51bSBTaGFkZXJWYXJpYWJsZUluZGV4
IHsKLSAgICAgICAgSW5NYXRyaXhWYXJpYWJsZSwKLSAgICAgICAgSW5Tb3VyY2VNYXRyaXhWYXJp
YWJsZSwKLSAgICAgICAgSW5NYXNrTWF0cml4VmFyaWFibGUsCi0gICAgICAgIEluVmVydGV4VmFy
aWFibGUsCiAKLSAgICAgICAgT3BhY2l0eVZhcmlhYmxlLAotICAgICAgICBTb3VyY2VUZXh0dXJl
VmFyaWFibGUsCi0gICAgICAgIE1hc2tUZXh0dXJlVmFyaWFibGUsCi0gICAgICAgIE51bVZhcmlh
YmxlcwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUHJvZ3JhbUluZm8gewotICAgICAgICBHTHVpbnQg
aWQ7Ci0gICAgICAgIEdMaW50IHZhcnNbTnVtVmFyaWFibGVzXTsKLSAgICB9OwotCi0gICAgR0xp
bnQgZ2V0VW5pZm9ybUxvY2F0aW9uKFNoYWRlclByb2dyYW1JbmRleCBwcm9nLCBTaGFkZXJWYXJp
YWJsZUluZGV4IHZhciwgY29uc3QgY2hhciogbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBw
cm9ncmFtc1twcm9nXS52YXJzW3Zhcl0gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtc1tw
cm9nXS5pZCwgbmFtZSk7Ci0gICAgfQotCi0gICAgdm9pZCBjcmVhdGVTaGFkZXJQcm9ncmFtKGNv
bnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJT
b3VyY2UsIFNoYWRlclByb2dyYW1JbmRleCBpbmRleCkKLSAgICB7Ci0gICAgICAgIEdMdWludCB2
ZXJ0ZXhTaGFkZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9WRVJURVhfU0hBREVSKTsKLSAgICAgICAg
R0x1aW50IGZyYWdtZW50U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVS
KTsKLSAgICAgICAgR0xfQ01EKGdsU2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgMSwgJnZlcnRl
eFNoYWRlclNvdXJjZSwgMCkpCi0gICAgICAgIEdMX0NNRChnbFNoYWRlclNvdXJjZShmcmFnbWVu
dFNoYWRlciwgMSwgJmZyYWdtZW50U2hhZGVyU291cmNlLCAwKSkKLSAgICAgICAgR0x1aW50IHBy
b2dyYW1JRCA9IGdsQ3JlYXRlUHJvZ3JhbSgpOwotICAgICAgICBHTF9DTUQoZ2xDb21waWxlU2hh
ZGVyKHZlcnRleFNoYWRlcikpCi0gICAgICAgIEdMX0NNRChnbENvbXBpbGVTaGFkZXIoZnJhZ21l
bnRTaGFkZXIpKQotICAgICAgICBHTF9DTUQoZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2ZXJ0
ZXhTaGFkZXIpKQotICAgICAgICBHTF9DTUQoZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCBmcmFn
bWVudFNoYWRlcikpCi0gICAgICAgIEdMX0NNRChnbEJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFt
SUQsIDAsICJJblZlcnRleCIpKQotICAgICAgICBHTF9DTUQoZ2xMaW5rUHJvZ3JhbShwcm9ncmFt
SUQpKQotICAgICAgICBwcm9ncmFtc1tpbmRleF0uaWQgPSBwcm9ncmFtSUQ7Ci0gICAgICAgIGNo
YXIgaW5mb0xvZ1sxMDI0XTsKLSAgICAgICAgaW50IGxlbjsKLSAgICAgICAgR0xfQ01EKGdsR2V0
UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbUlELCAxMDI0LCAmbGVuLCBpbmZvTG9nKSk7Ci0gICAgfQot
Ci0gICAgUHJvZ3JhbUluZm8gcHJvZ3JhbXNbTnVtUHJvZ3JhbXNdOwotCi19IGdTaGFkZXJJbmZv
OwogCiAjZGVmaW5lIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihwcm9nLCB2YXIpIFwK
LSAgICAgICAgICAgIGlmIChnU2hhZGVySW5mby5nZXRVbmlmb3JtTG9jYXRpb24oVGV4bWFwU2hh
ZGVySW5mbzo6cHJvZyMjUHJvZ3JhbSwgVGV4bWFwU2hhZGVySW5mbzo6dmFyIyNWYXJpYWJsZSwg
I3ZhcikgPCAwKSBcCisgICAgICAgICAgICBpZiAoZGF0YSgpLnNoYWRlckluZm8uZ2V0VW5pZm9y
bUxvY2F0aW9uKFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86OnByb2cjI1Byb2dyYW0s
IFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86OnZhciMjVmFyaWFibGUsICN2YXIpIDwg
MCkgXAogICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkbid0IGZpbmQgdmFyaWFi
bGUgIiN2YXIiIGluIHByb2dyYW0gIiNwcm9nIlxuIik7Ci0jZGVmaW5lIFRFWE1BUF9CVUlMRF9T
SEFERVIocHJvZ3JhbSkgZ1NoYWRlckluZm8uY3JlYXRlU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFk
ZXJTb3VyY2UjI3Byb2dyYW0sIGZyYWdtZW50U2hhZGVyU291cmNlIyNwcm9ncmFtLCBUZXhtYXBT
aGFkZXJJbmZvOjpwcm9ncmFtIyNQcm9ncmFtKTsKKyNkZWZpbmUgVEVYTUFQX0JVSUxEX1NIQURF
Uihwcm9ncmFtKSBkYXRhKCkuc2hhZGVySW5mby5jcmVhdGVTaGFkZXJQcm9ncmFtKHZlcnRleFNo
YWRlclNvdXJjZSMjcHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXJTb3VyY2UjI3Byb2dyYW0sIFRleHR1
cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86OnByb2dyYW0jI1Byb2dyYW0pOwogCi1UZXh0dXJl
TWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi0gICAg
OiBUZXh0dXJlTWFwcGVyKGNvbnRleHQpCi0gICAgLCBtX2N1cnJlbnRQcm9ncmFtKFRleG1hcFNo
YWRlckluZm86OlRhcmdldFByb2dyYW0pCitUZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJH
TCgpCisgICAgOiBtX2RhdGEobmV3IFRleHR1cmVNYXBwZXJHTERhdGEpCiB7Ci0gICAgc3RhdGlj
IGJvb2wgc2hhZGVyc0NvbXBpbGVkID0gZmFsc2U7Ci0gICAgaWYgKHNoYWRlcnNDb21waWxlZCkK
KyAgICBvYnRhaW5DdXJyZW50Q29udGV4dCgpOworICAgIHN0YXRpYyBib29sIGNvbXBpbGVkU2hh
ZGVycyA9IGZhbHNlOworICAgIGlmIChjb21waWxlZFNoYWRlcnMpCiAgICAgICAgIHJldHVybjsK
LSAgICBzaGFkZXJzQ29tcGlsZWQgPSB0cnVlOworICAgIGNvbXBpbGVkU2hhZGVycyA9IHRydWU7
CiAjaWZuZGVmIFRFWE1BUF9PUEVOR0xfRVMyCiAjZGVmaW5lIE9FUzJfUFJFQ0lTSU9OX0RFRklO
SVRJT05TIFwKICAgICAiI2RlZmluZSBsb3dwXG4jZGVmaW5lIGhpZ2hwXG4iCkBAIC0yODUsMTgg
KzM2NSwxOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFw
VGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdAogCiAgICAgY29uc3QgQml0bWFwVGV4
dHVyZUdMJiB0ZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPih0
ZXh0dXJlKTsKIAotICAgIFRleG1hcFNoYWRlckluZm86OlNoYWRlclByb2dyYW1JbmRleCBwcm9n
cmFtOworICAgIFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86OlNoYWRlclByb2dyYW1J
bmRleCBwcm9ncmFtOwogICAgIGlmIChtYXNrVGV4dHVyZSkKLSAgICAgICAgcHJvZ3JhbSA9IFRl
eG1hcFNoYWRlckluZm86Ok9wYWNpdHlBbmRNYXNrUHJvZ3JhbTsKKyAgICAgICAgcHJvZ3JhbSA9
IFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86Ok9wYWNpdHlBbmRNYXNrUHJvZ3JhbTsK
ICAgICBlbHNlCi0gICAgICAgIHByb2dyYW0gPSBUZXhtYXBTaGFkZXJJbmZvOjpTaW1wbGVQcm9n
cmFtOworICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6
U2ltcGxlUHJvZ3JhbTsKIAotICAgIGNvbnN0IFRleG1hcFNoYWRlckluZm86OlByb2dyYW1JbmZv
JiBwcm9ncmFtSW5mbyA9IGdTaGFkZXJJbmZvLnByb2dyYW1zW3Byb2dyYW1dOwotICAgIGlmICht
X2N1cnJlbnRQcm9ncmFtICE9IHByb2dyYW0pIHsKKyAgICBjb25zdCBUZXh0dXJlTWFwcGVyR0xE
YXRhOjpTaGFkZXJJbmZvOjpQcm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8gPSBkYXRhKCkuc2hhZGVy
SW5mby5wcm9ncmFtc1twcm9ncmFtXTsKKyAgICBpZiAoZGF0YSgpLmN1cnJlbnRQcm9ncmFtICE9
IHByb2dyYW0pIHsKICAgICAgICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShwcm9ncmFtSW5mby5pZCkp
Ci0gICAgICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShnU2hhZGVySW5mby5w
cm9ncmFtc1ttX2N1cnJlbnRQcm9ncmFtXS52YXJzW1RleG1hcFNoYWRlckluZm86OkluVmVydGV4
VmFyaWFibGVdKSkKLSAgICAgICAgbV9jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07Ci0gICAgICAg
IEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFw
U2hhZGVySW5mbzo6SW5WZXJ0ZXhWYXJpYWJsZV0pKQorICAgICAgICBHTF9DTUQoZ2xEaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkoZ0luVmVydGV4QXR0cmlidXRlSW5kZXgpKQorICAgICAgICBkYXRh
KCkuY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOworICAgICAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheShnSW5WZXJ0ZXhBdHRyaWJ1dGVJbmRleCkpCiAgICAgfQogCiAgICAgR0xf
Q01EKGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKSkKQEAgLTMwOCw3ICszODgsNyBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwg
Y29uc3QgSW50UmVjdCYgdAogICAgIGNvbnN0IEdMZmxvYXQgdW5pdFJlY3RbXSA9IHswLCAwLCAx
LCAwLCAxLCAxLCAwLCAxfTsKICAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDIs
IEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdW5pdFJlY3QpKQogCi0gICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgobV9wcm9qZWN0aW9uTWF0cml4KS5t
dWx0TGVmdChtb2RlbFZpZXdNYXRyaXgpLm11bHRMZWZ0KFRyYW5zZm9ybWF0aW9uTWF0cml4KAor
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRh
dGEoKS5wcm9qZWN0aW9uTWF0cml4KS5tdWx0TGVmdChtb2RlbFZpZXdNYXRyaXgpLm11bHRMZWZ0
KFRyYW5zZm9ybWF0aW9uTWF0cml4KAogICAgICAgICAgICAgdGFyZ2V0UmVjdC53aWR0aCgpLCAw
LCAwLCAwLAogICAgICAgICAgICAgMCwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgMCwgMCwKICAgICAg
ICAgICAgIDAsIDAsIDEsIDAsCkBAIC0zMjQsMTAgKzQwNCwxMCBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50
UmVjdCYgdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHRleHR1cmVH
TC5tX3JlbGF0aXZlU2l6ZS5oZWlnaHQoKSwgMCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCAwLCAxLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsIDAsIDAsIDF9OwotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3Jh
bUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJbk1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFM
U0UsIG00KSkKLSAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNb
VGV4bWFwU2hhZGVySW5mbzo6SW5Tb3VyY2VNYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBt
NHNyYykpCi0gICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hh
ZGVySW5mbzo6U291cmNlVGV4dHVyZVZhcmlhYmxlXSwgMCkpCi0gICAgR0xfQ01EKGdsVW5pZm9y
bTFmKHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6T3BhY2l0eVZhcmlhYmxlXSwg
b3BhY2l0eSkpCisgICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJz
W1RleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86OkluTWF0cml4VmFyaWFibGVdLCAxLCBH
TF9GQUxTRSwgbTQpKQorICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8u
dmFyc1tUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpJblNvdXJjZU1hdHJpeFZhcmlh
YmxlXSwgMSwgR0xfRkFMU0UsIG00c3JjKSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3Jh
bUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpTb3VyY2VUZXh0dXJl
VmFyaWFibGVdLCAwKSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbUluZm8udmFyc1tU
ZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpPcGFjaXR5VmFyaWFibGVdLCBvcGFjaXR5
KSkKIAogICAgIGlmIChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpKSB7CiAg
ICAgICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCogbWFza1RleHR1cmVHTCA9IHN0YXRpY19jYXN0
PGNvbnN0IEJpdG1hcFRleHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsKQEAgLTMzNyw4ICs0MTcsOCBA
QCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYg
dGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLCBtYXNrVGV4dHVyZUdMLT5tX3JlbGF0aXZlU2l6ZS5oZWlnaHQoKSwgMCwg
MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMX07Ci0g
ICAgICAgIGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlcklu
Zm86OkluTWFza01hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00bWFzayk7Ci0gICAgICAg
IEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86Ok1h
c2tUZXh0dXJlVmFyaWFibGVdLCAxKSkKKyAgICAgICAgZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dy
YW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6SW5NYXNrTWF0cml4
VmFyaWFibGVdLCAxLCBHTF9GQUxTRSwgbTRtYXNrKTsKKyAgICAgICAgR0xfQ01EKGdsVW5pZm9y
bTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6TWFz
a1RleHR1cmVWYXJpYWJsZV0sIDEpKQogICAgICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdM
X1RFWFRVUkUwKSkKICAgICB9CiAKQEAgLTQwMiw0MyArNDgyLDYgQEAgdm9pZCBCaXRtYXBUZXh0
dXJlR0w6OmVuZFBhaW50KCkKICAgICBtX2J1ZmZlci5jbGVhcigpOwogfQogCi1zdHJ1Y3QgVGV4
bWFwR0xTaGFkZXJUZXh0dXJlcyB7Ci0gICAgc3RydWN0IEVudHJ5IHsKLSAgICAgICAgR0x1aW50
IHRleHR1cmU7Ci0gICAgICAgIGludCByZWZDb3VudDsKLSAgICB9OwotICAgIEhhc2hNYXA8TmF0
aXZlSW1hZ2VQdHIsIEVudHJ5PiBpbWFnZVRvVGV4dHVyZTsKLSAgICBHTHVpbnQgZmluZE9yQ3Jl
YXRlKE5hdGl2ZUltYWdlUHRyIGltYWdlLCBib29sJiBmb3VuZCkKLSAgICB7Ci0gICAgICAgIEhh
c2hNYXA8TmF0aXZlSW1hZ2VQdHIsIEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVy
ZS5maW5kKGltYWdlKTsKLSAgICAgICAgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGl0ICE9
IGltYWdlVG9UZXh0dXJlLmVuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLnJlZkNvdW50
Kys7Ci0gICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gaXQtPnNl
Y29uZC50ZXh0dXJlOwotICAgICAgICB9Ci0gICAgICAgIEVudHJ5IGVudHJ5OwotICAgICAgICBH
TF9DTUQoZ2xHZW5UZXh0dXJlcygxLCAmZW50cnkudGV4dHVyZSkpOwotICAgICAgICBlbnRyeS5y
ZWZDb3VudCA9IDE7Ci0gICAgICAgIGltYWdlVG9UZXh0dXJlLmFkZChpbWFnZSwgZW50cnkpOwot
ICAgICAgICByZXR1cm4gZW50cnkudGV4dHVyZTsKLSAgICB9Ci0KLSAgICBib29sIGRlcmVmKE5h
dGl2ZUltYWdlUHRyIGltYWdlKQotICAgIHsKLSAgICAgICAgSGFzaE1hcDxOYXRpdmVJbWFnZVB0
ciwgRW50cnk+OjppdGVyYXRvciBpdCA9IGltYWdlVG9UZXh0dXJlLmZpbmQoaW1hZ2UpOwotICAg
ICAgICBpZiAoaXQgIT0gaW1hZ2VUb1RleHR1cmUuZW5kKCkpIHsKLSAgICAgICAgICAgIGlmIChp
dC0+c2Vjb25kLnJlZkNvdW50IDwgMikgewotICAgICAgICAgICAgICAgIGltYWdlVG9UZXh0dXJl
LnJlbW92ZShpdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX07Ci0KLXN0YXRpYyBU
ZXhtYXBHTFNoYWRlclRleHR1cmVzIGdUZXh0dXJlUmVwb3NpdG9yeTsKLQogdm9pZCBCaXRtYXBU
ZXh0dXJlR0w6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiB7CiAgICAgTmF0aXZl
SW1hZ2VQdHIgbmF0aXZlSW1hZ2UgPSBpbWFnZSA/IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpIDogMDsKQEAgLTQ1MSw3ICs0OTQsNyBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6
c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKICAgICBpZiAobmF0aXZlSW1hZ2UgPT0g
bV9pbWFnZSkKICAgICAgICAgcmV0dXJuOwogICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICBH
THVpbnQgbmV3VGV4dHVyZUlEID0gZ1RleHR1cmVSZXBvc2l0b3J5LmZpbmRPckNyZWF0ZShuYXRp
dmVJbWFnZSwgZm91bmQpOworICAgIEdMdWludCBuZXdUZXh0dXJlSUQgPSBtX3RleHR1cmVNYXBw
ZXItPmRhdGEoKS5kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZmluZE9yQ3JlYXRlKG5hdGl2ZUlt
YWdlLCBmb3VuZCk7CiAgICAgaWYgKG5ld1RleHR1cmVJRCAhPSBtX2lkKSB7CiAgICAgICAgIGRl
c3Ryb3koKTsKICAgICAgICAgbV9pZCA9IG5ld1RleHR1cmVJRDsKQEAgLTQ2Nyw3ICs1MTAsNyBA
QCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkK
IAogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmRlc3Ryb3koKQogewotICAgIGlmIChtX2lkICYmICgh
bV9pbWFnZSB8fCAhZ1RleHR1cmVSZXBvc2l0b3J5LmRlcmVmKG1faW1hZ2UpKSkKKyAgICBpZiAo
bV9pZCAmJiAoIW1faW1hZ2UgfHwgIW1fdGV4dHVyZU1hcHBlci0+ZGF0YSgpLmRpcmVjdGx5Q29t
cG9zaXRlZEltYWdlcy5kZXJlZihtX2ltYWdlKSkpCiAgICAgICAgIEdMX0NNRChnbERlbGV0ZVRl
eHR1cmVzKDEsICZtX2lkKSkKICAgICBpZiAobV9mYm8pCiAgICAgICAgIEdMX0NNRChnbERlbGV0
ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pKQpAQCAtNDk2LDggKzUzOSwzMiBAQCBzdGF0aWMgaW5s
aW5lIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgoY29uc3QgSW50
U2l6ZSYgc2l6ZSwgYgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgZmxpcCA/
IDEgOiAtMSwgMCwgMSk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlckdMOjpjbGVhbnVwKCkKK1Rl
eHR1cmVNYXBwZXJHTDo6flRleHR1cmVNYXBwZXJHTCgpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgZGVsZXRlIG1fZGF0YTsKK30KKworYm9vbCBUZXh0dXJlTWFwcGVyR0w6Om1h
a2VDb250ZXh0Q3VycmVudCgpCiB7CisjaWYgT1MoTUFDX09TX1gpCisgICAgcmV0dXJuIGFnbFNl
dEN1cnJlbnRDb250ZXh0KGRhdGEoKS5hZ2xDb250ZXh0KTsKKyNlbGlmIE9TKFVOSVgpCisgICAg
RGlzcGxheSogZGlzcGxheSA9IFhPcGVuRGlzcGxheSgwKTsKKyAgICBpZiAoIWRpc3BsYXkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2xYTWFrZUN1cnJlbnQoZGlzcGxheSwg
ZGF0YSgpLmdseERyYXdhYmxlLCBkYXRhKCkuZ2x4Q29udGV4dCk7CisjZW5kaWYKK30KKwordm9p
ZCBUZXh0dXJlTWFwcGVyR0w6Om9idGFpbkN1cnJlbnRDb250ZXh0KCkKK3sKKyNpZiBPUyhNQUNf
T1NfWCkKKyAgICBkYXRhKCkuYWdsQ29udGV4dCA9IGFnbEdldEN1cnJlbnRDb250ZXh0KCk7Cisj
ZWxpZiBPUyhVTklYKQorICAgIGRhdGEoKS5nbHhEcmF3YWJsZSA9IGdsWEdldEN1cnJlbnREcmF3
YWJsZSgpOworICAgIGRhdGEoKS5nbHhDb250ZXh0ID0gZ2xYR2V0Q3VycmVudENvbnRleHQoKTsK
KyNlbmRpZgogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmluZFN1cmZhY2UoQml0bWFwVGV4
dHVyZSAqc3VyZmFjZVBvaW50ZXIpCkBAIC01MjMsNyArNTkwLDcgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUgKnN1cmZhY2VQb2ludGVyKQogICAgIH0K
IAogICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAsIHN1cmZhY2UtPnNpemUoKS53aWR0aCgpLCBz
dXJmYWNlLT5zaXplKCkuaGVpZ2h0KCkpKQotICAgIG1fcHJvamVjdGlvbk1hdHJpeCA9IG1hdHJp
eDsKKyAgICBkYXRhKCkucHJvamVjdGlvbk1hdHJpeCA9IG1hdHJpeDsKIH0KIAogdm9pZCBUZXh0
dXJlTWFwcGVyR0w6OnNldENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTU0Myw4ICs2MTAs
NyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6cGFpbnRUb1RhcmdldChjb25zdCBCaXRtYXBUZXh0
dXJlJiBhU3VyZmFjZSwgY29uc3QgSW50U2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgc3Vy
ZmFjZS5tX2FjdHVhbFNpemUud2lkdGgoKSwgMCwgMCwgMCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsIHN1cmZhY2UubV9hY3R1YWxTaXplLmhlaWdodCgpLCAwLCAwLAogICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgMCwgMSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1cmZhY2Uu
b2Zmc2V0KCkueCgpLCBzdXJmYWNlLm9mZnNldCgpLnkoKSwgMCwgMQotICAgICAgICAgICAgICAg
ICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1cmZhY2Uub2Zmc2V0KCkueCgpLCBzdXJmYWNl
Lm9mZnNldCgpLnkoKSwgMCwgMSkKICAgICAgICAgICAgICk7CiAKICAgICBjb25zdCBHTGZsb2F0
IG00W10gPSB7CkBAIC01NjAsMTggKzYyNiwxOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6cGFp
bnRUb1RhcmdldChjb25zdCBCaXRtYXBUZXh0dXJlJiBhU3VyZmFjZSwgY29uc3QgSW50U2l6ZQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDF9OwogCiAgICAg
Ly8gV2UgYWxyZWFkeSBibGVuZGVkIHRoZSBhbHBoYSBpbjsgdGhlIHJlc3VsdCBpcyBwcmVtdWx0
aXBsaWVkLgotICAgIEdMX0NNRChnbFVzZVByb2dyYW0oZ1NoYWRlckluZm8ucHJvZ3JhbXNbVGV4
bWFwU2hhZGVySW5mbzo6VGFyZ2V0UHJvZ3JhbV0uaWQpKQorICAgIEdMX0NNRChnbFVzZVByb2dy
YW0oZGF0YSgpLnNoYWRlckluZm8ucHJvZ3JhbXNbVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVy
SW5mbzo6VGFyZ2V0UHJvZ3JhbV0uaWQpKQogICAgIEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihH
TF9GUkFNRUJVRkZFUiwgMCkpCiAgICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwgc3VyZmFjZVNp
emUud2lkdGgoKSwgc3VyZmFjZVNpemUuaGVpZ2h0KCkpKQogICAgIEdMX0NNRChnbERpc2FibGUo
R0xfU1RFTkNJTF9URVNUKSkKLSAgICBjb25zdCBUZXhtYXBTaGFkZXJJbmZvOjpQcm9ncmFtSW5m
byYgcHJvZ3JhbUluZm8gPSBnU2hhZGVySW5mby5wcm9ncmFtc1tUZXhtYXBTaGFkZXJJbmZvOjpU
YXJnZXRQcm9ncmFtXTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbUluZm8udmFyc1tU
ZXhtYXBTaGFkZXJJbmZvOjpPcGFjaXR5VmFyaWFibGVdLCBvcGFjaXR5KSkKKyAgICBjb25zdCBU
ZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpQcm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8g
PSBkYXRhKCkuc2hhZGVySW5mby5wcm9ncmFtc1tUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJ
bmZvOjpUYXJnZXRQcm9ncmFtXTsKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbUluZm8u
dmFyc1tUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpPcGFjaXR5VmFyaWFibGVdLCBv
cGFjaXR5KSkKICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKSkKICAgICBH
TF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBzdXJmYWNlLm1faWQpKQotICAgIEdM
X0NNRChnbFVuaWZvcm0xaShwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OlNvdXJj
ZVRleHR1cmVWYXJpYWJsZV0sIDApKQotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5WZXJ0ZXhWYXJpYWJsZV0p
KQotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBT
aGFkZXJJbmZvOjpJbk1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00KSkKLSAgICBHTF9D
TUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6
SW5Tb3VyY2VNYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNHNyYykpCisgICAgR0xfQ01E
KGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVy
SW5mbzo6U291cmNlVGV4dHVyZVZhcmlhYmxlXSwgMCkpCisgICAgR0xfQ01EKGdsRW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkoZ0luVmVydGV4QXR0cmlidXRlSW5kZXgpKQorICAgIEdMX0NNRChnbFVu
aWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFk
ZXJJbmZvOjpJbk1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00KSkKKyAgICBHTF9DTUQo
Z2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0YTo6
U2hhZGVySW5mbzo6SW5Tb3VyY2VNYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNHNyYykp
CiAgICAgR0xfQ01EKGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDApKQogICAgIGNvbnN0
IEdMZmxvYXQgdW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKICAgICBHTF9D
TUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdW5p
dFJlY3QpKQpAQCAtNTgwLDE1ICs2NDYsMTcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OnBhaW50
VG9UYXJnZXQoY29uc3QgQml0bWFwVGV4dHVyZSYgYVN1cmZhY2UsIGNvbnN0IEludFNpemUKICAg
ICBzZXRDbGlwKHZpc2libGVSZWN0KTsKIAogICAgIEdMX0NNRChnbERyYXdBcnJheXMoR0xfVFJJ
QU5HTEVfRkFOLCAwLCA0KSkKLSAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXko
cHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblZlcnRleFZhcmlhYmxlXSkpCisg
ICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KDApKQogICAgIEdMX0NNRChnbFVz
ZVByb2dyYW0oMCkpCiAgICAgR0xfQ01EKGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDAp
KQotICAgIG1fY3VycmVudFByb2dyYW0gPSBUZXhtYXBTaGFkZXJJbmZvOjpUYXJnZXRQcm9ncmFt
OworICAgIGRhdGEoKS5jdXJyZW50UHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRl
ckluZm86OlRhcmdldFByb2dyYW07CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4
dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0dXJlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEJpdG1hcFRleHR1cmVHTCgpKTsKKyAgICBCaXRtYXBUZXh0dXJlR0wqIHRleHR1cmUgPSBuZXcg
Qml0bWFwVGV4dHVyZUdMKCk7CisgICAgdGV4dHVyZS0+bV90ZXh0dXJlTWFwcGVyID0gdGhpczsK
KyAgICByZXR1cm4gYWRvcHRSZWYodGV4dHVyZSk7CiB9CiAKIH07CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCmluZGV4IDdhMTJjNzIu
LmQwNTYwMWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1Rl
eHR1cmVNYXBwZXJHTC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1Rl
eHR1cmVNYXBwZXJHTC5oCkBAIC0yOSwxMSArMjksMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitjbGFzcyBUZXh0dXJlTWFwcGVyR0xEYXRhOworCiAvLyBBbiBPcGVuR0wtRVMyIGltcGxl
bWVudGF0aW9uIG9mIFRleHR1cmVNYXBwZXIuCiBjbGFzcyBUZXh0dXJlTWFwcGVyR0wgOiBwdWJs
aWMgVGV4dHVyZU1hcHBlciB7CiBwdWJsaWM6Ci0gICAgVGV4dHVyZU1hcHBlckdMKEdyYXBoaWNz
Q29udGV4dCogZ2MpOwotICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJHTCgpIHt9CisgICAgVGV4
dHVyZU1hcHBlckdMKCk7CisgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlckdMKCk7CiAKICAgICAv
LyByZWltcHMgZnJvbSBUZXh0dXJlTWFwcGVyCiAgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJl
KGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3QmLCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBU
ZXh0dXJlKiBtYXNrVGV4dHVyZSk7CkBAIC00MywxMSArNDUsMTMgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CiAg
ICAgdmlydHVhbCBjb25zdCBjaGFyKiB0eXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGNs
ZWFudXAoKTsKKyAgICB2b2lkIG9idGFpbkN1cnJlbnRDb250ZXh0KCk7CisgICAgYm9vbCBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKIAogcHJpdmF0ZToKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
X3Byb2plY3Rpb25NYXRyaXg7Ci0gICAgaW50IG1fY3VycmVudFByb2dyYW07CisgICAgaW5saW5l
IFRleHR1cmVNYXBwZXJHTERhdGEmIGRhdGEoKSB7IHJldHVybiAqbV9kYXRhOyB9CisgICAgVGV4
dHVyZU1hcHBlckdMRGF0YSogbV9kYXRhOworICAgIGZyaWVuZCBjbGFzcyBCaXRtYXBUZXh0dXJl
R0w7CiB9OwogCiAvLyBBbiBvZmZzY3JlZW4gYnVmZmVyIHRvIGJlIHJlbmRlcmVkIGJ5IHNvZnR3
YXJlLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFw
cGVyUXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQu
Y3BwCmluZGV4IDkyMzZkYWUuLjFjM2ExYzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAKQEAgLTU0LDggKzU0LDkgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJl
LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7
CiAgICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRDbGlwKGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCopOwogICAgIHZpcnR1YWwgYm9v
bCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBUZXh0
dXJlTWFwcGVyUXQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KTsKKyAgICBUZXh0dXJlTWFwcGVy
UXQoKTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5cGUoKSBjb25zdCB7IHJldHVybiAiVGV4
dHVyZU1hcHBlclF0IjsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBj
cmVhdGVUZXh0dXJlKCk7CiAKQEAgLTEyMywxMiArMTI0LDE1IEBAIHZvaWQgVGV4dHVyZU1hcHBl
clF0OjpzZXRDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgIHBhaW50ZXItPnNldENsaXBS
ZWN0KHJlY3QpOwogfQogCi1UZXh0dXJlTWFwcGVyUXQ6OlRleHR1cmVNYXBwZXJRdChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQpCi0gICAgOiBUZXh0dXJlTWFwcGVyKGNvbnRleHQpCi0gICAgLCBt
X3BhaW50ZXIoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpCi0gICAgLCBtX2N1cnJlbnRTdXJm
YWNlKDApCitUZXh0dXJlTWFwcGVyUXQ6OlRleHR1cmVNYXBwZXJRdCgpCisgICAgOiBtX2N1cnJl
bnRTdXJmYWNlKDApCiB7Ci0gICAgVGV4dHVyZU1hcHBlclF0Ojppbml0aWFsaXplKG1fcGFpbnRl
cik7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclF0OjpzZXRHcmFwaGljc0NvbnRleHQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIG1fcGFpbnRlciA9IGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpOworICAgIGluaXRpYWxpemUobV9wYWludGVyKTsKIH0KIAogdm9pZCBUZXh0dXJl
TWFwcGVyUXQ6OmJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpCkBAIC0xODEsMTAg
KzE4NSwxMiBAQCB2b2lkIFRleHR1cmVNYXBwZXJRdDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFw
VGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdAogUGFzc1JlZlB0cjxUZXh0dXJlTWFw
cGVyPiBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQogewog
I2lmZGVmIFFUX09QRU5HTF9MSUIKLSAgICBpZiAoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkt
PnBhaW50RW5naW5lKCktPnR5cGUoKSA9PSBRUGFpbnRFbmdpbmU6Ok9wZW5HTDIpCi0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlckdMKGNvbnRleHQpKTsKKyAgICBpZiAo
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnBhaW50RW5naW5lKCktPnR5cGUoKSA9PSBRUGFp
bnRFbmdpbmU6Ok9wZW5HTDIpIHsKKyAgICAgICAgVGV4dHVyZU1hcHBlckdMKiB0ZXhtYXBHTCA9
IG5ldyBUZXh0dXJlTWFwcGVyR0w7CisgICAgICAgIHJldHVybiBhZG9wdFJlZih0ZXhtYXBHTCk7
CisgICAgfQogI2VuZGlmCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyUXQo
Y29udGV4dCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclF0KTsKIH0K
IAogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggMDU3YmNmYy4uNTRlNmM3YSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApAQCAtNDAsNyArNDAsNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBzdHJ1Y3QgVGV4bWFwUGFpbnRPcHRpb25zIHsKICAgICBCaXRtYXBUZXh0
dXJlKiBzdXJmYWNlOwogICAgIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXI7Ci0gICAgR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0OwogICAgIFRleHR1cmVNYXBwZXJOb2RlKiByb290TGF5ZXI7
CiAgICAgZmxvYXQgb3BhY2l0eTsKICAgICBJbnRSZWN0IHNjaXNzb3JSZWN0OwpAQCAtMjE0LDcg
KzIxMyw3IEBAIHB1YmxpYzoKICAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBzZXRQbGF0Zm9ybUxheWVyQ2xpZW50KFRleHR1cmVN
YXBwZXJMYXllckNsaWVudCopOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50
UmVjdCYgZXhwb3NlZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0s
IGZsb2F0IG9wYWNpdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChUZXh0dXJlTWFwcGVyKiwg
Y29uc3QgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6UGFpbnRPcHRpb25zJik7CiAKICAgICBz
dGF0aWMgVGV4dHVyZU1hcHBlck5vZGUqIHRvVGV4dHVyZU1hcHBlck5vZGUoR3JhcGhpY3NMYXll
ciopOwogcHVibGljOgpAQCAtMzk4LDcgKzM5Nyw3IEBAIGJvb2wgVGV4dHVyZU1hcHBlck5vZGU6
Omhhc1N1cmZhY2VEZXNjZW5kYW50cygpIGNvbnN0CiAKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXpl
LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0JiBleHBvc2VkUmVjdCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSkKK3Zv
aWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIs
IGNvbnN0IFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXI6OlBhaW50T3B0aW9ucyYgb3B0aW9ucykK
IHsKICAgICBBU1NFUlQobV9sYXllclR5cGUgPT0gUm9vdExheWVyKTsKICAgICBpZiAobV9zaXpl
LmlzRW1wdHkoKSkKQEAgLTQwOSw4ICs0MDgsNiBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpw
YWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbgog
ICAgICgiW1RleHR1cmVNYXBwZXJdIFJvb3RQYWludCEhXG4iKTsKICNlbmRpZgogCi0gICAgUmVm
UHRyPFRleHR1cmVNYXBwZXI+IHRleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUo
Y29udGV4dCk7Ci0KICAgICBpZiAodGV4dHVyZU1hcHBlci0+dHlwZSgpICE9IG1fbGFzdFRleHR1
cmVNYXBwZXJUeXBlKQogICAgICAgICBnVGV4dHVyZU1hcHBlckNhY2hlLm1fZGF0YS5jbGVhcigp
OwogCkBAIC00MTgsMTYgKzQxNSwxNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbgogICAgIFRl
eG1hcFBhaW50T3B0aW9ucyBvcHQ7CiAgICAgb3B0Lm9wYWNpdHkgPSAxOwogICAgIG9wdC5yb290
TGF5ZXIgPSB0aGlzOwotICAgIG9wdC5zY2lzc29yUmVjdCA9IHRhcmdldFJlY3Q7Ci0gICAgb3B0
LnZpc2libGVSZWN0ID0gZXhwb3NlZFJlY3Q7Ci0gICAgb3B0LnRleHR1cmVNYXBwZXIgPSB0ZXh0
dXJlTWFwcGVyLmdldCgpOwotICAgIG9wdC5jb250ZXh0ID0gdGV4dHVyZU1hcHBlci0+Z3JhcGhp
Y3NDb250ZXh0KCk7CisgICAgb3B0LnNjaXNzb3JSZWN0ID0gb3B0aW9ucy50YXJnZXRSZWN0Owor
ICAgIG9wdC52aXNpYmxlUmVjdCA9IG9wdGlvbnMudmlzaWJsZVJlY3Q7CisgICAgb3B0LnRleHR1
cmVNYXBwZXIgPSB0ZXh0dXJlTWFwcGVyOwogICAgIG9wdC5zdXJmYWNlID0gMDsKICAgICBwYWlu
dFJlY3Vyc2l2ZShvcHQpOwogCiAgICAgaWYgKHRleHR1cmVNYXBwZXItPmFsbG93U3VyZmFjZUZv
clJvb3QoKSB8fCBtX3N0YXRlLmhhc1N1cmZhY2VEZXNjZW5kYW50cykgewogICAgICAgICB0ZXh0
dXJlTWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsKLSAgICAgICAgdGV4dHVyZU1hcHBlci0+cGFpbnRU
b1RhcmdldCgqbV9zdXJmYWNlLmdldCgpLCBzaXplLCB0cmFuc2Zvcm0sIG9wYWNpdHkgKiBtX3N0
YXRlLm9wYWNpdHksIHRhcmdldFJlY3QpOworICAgICAgICB0ZXh0dXJlTWFwcGVyLT5wYWludFRv
VGFyZ2V0KCptX3N1cmZhY2UuZ2V0KCksIG9wdGlvbnMudmlld3BvcnRTaXplLCBvcHRpb25zLnRy
YW5zZm9ybSwgb3B0aW9ucy5vcGFjaXR5ICogbV9zdGF0ZS5vcGFjaXR5LCBvcHRpb25zLnRhcmdl
dFJlY3QpOwogICAgIH0KICAgICBnVGV4dHVyZU1hcHBlckNhY2hlLnB1cmdlKCk7CiB9CkBAIC02
OTIsMTAgKzY4OCw5IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnVwbG9hZFRleHR1cmVGcm9t
Q29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjCiAKICAgICB7CiAgICAgICAg
IEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KG1fdGV4dHVyZS0+YmVnaW5QYWludChkaXJ0eVJlY3Qp
KTsKLSAgICAgICAgaWYgKHRleHR1cmVNYXBwZXIgJiYgdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3ND
b250ZXh0KCkpIHsKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogb3JpZ2luYWxDb250ZXh0
ID0gdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgICAgICAgICBjb250ZXh0
LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkob3JpZ2luYWxDb250ZXh0LT5pbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5KCkpOwotICAgICAgICAgICAgY29udGV4dC5zZXRUZXh0RHJhd2luZ01v
ZGUob3JpZ2luYWxDb250ZXh0LT50ZXh0RHJhd2luZ01vZGUoKSk7CisgICAgICAgIGlmICh0ZXh0
dXJlTWFwcGVyKSB7CisgICAgICAgICAgICBjb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHkodGV4dHVyZU1hcHBlci0+aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICAg
ICAgICAgIGNvbnRleHQuc2V0VGV4dERyYXdpbmdNb2RlKHRleHR1cmVNYXBwZXItPnRleHREcmF3
aW5nTW9kZSgpKTsKICAgICAgICAgfQogICAgICAgICBtX2xheWVyLT5wYWludEdyYXBoaWNzTGF5
ZXJDb250ZW50cyhjb250ZXh0LCBkaXJ0eVJlY3QpOwogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaAppbmRleCAwM2MxYzZkLi44OTg5
OWMwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlci5oCkBAIC05NywyMCArOTcsMzAgQEAgcHVibGljOgogICAgICAgICBkcmF3VGV4dHVyZSh0
ZXh0dXJlLCBJbnRSZWN0KDAsIDAsIHRleHR1cmUuY29udGVudFNpemUoKS53aWR0aCgpLCB0ZXh0
dXJlLmNvbnRlbnRTaXplKCkuaGVpZ2h0KCkpLCBtYXRyaXgsIG9wYWNpdHksIDApOwogICAgIH0K
IAorICAgIHZpcnR1YWwgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0Kikg
eyB9CiAgICAgdmlydHVhbCB2b2lkIHNldENsaXAoY29uc3QgSW50UmVjdCYpID0gMDsKICAgICB2
aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9vdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpID0gMDsKICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqIHR5cGUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFu
dXAoKSB7fQogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZ2M7Ci0gICAgfQorICAgIHZvaWQgc2V0SW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7IG1faW50ZXJw
b2xhdGlvblF1YWxpdHkgPSBxdWFsaXR5OyB9CisgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUo
aW50IG1vZGUpIHsgbV90ZXh0RHJhd2luZ01vZGUgPSBtb2RlOyB9CisKKyAgICBJbnRlcnBvbGF0
aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QgeyByZXR1cm4gbV9p
bnRlcnBvbGF0aW9uUXVhbGl0eTsgfQorICAgIGludCB0ZXh0RHJhd2luZ01vZGUoKSBjb25zdCB7
IHJldHVybiBtX3RleHREcmF3aW5nTW9kZTsgfQorCisgICAgdm9pZCBzZXRWaWV3cG9ydFNpemUo
Y29uc3QgSW50U2l6ZSYpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgVGV4dHVyZU1hcHBlcihHcmFwaGlj
c0NvbnRleHQqIGdjKSA6IG1fZ2MoZ2MpIHt9Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBtX2djOwor
ICAgIFRleHR1cmVNYXBwZXIoKQorICAgICAgICA6IG1faW50ZXJwb2xhdGlvblF1YWxpdHkoSW50
ZXJwb2xhdGlvbkRlZmF1bHQpCisgICAgICAgICwgbV90ZXh0RHJhd2luZ01vZGUoY1RleHRGaWxs
KQorICAgIHt9CisKK3ByaXZhdGU6CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgbV9pbnRlcnBv
bGF0aW9uUXVhbGl0eTsKKyAgICBpbnQgbV90ZXh0RHJhd2luZ01vZGU7CiB9OwogCiB9OwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyLmgKaW5kZXggMjNlOWZjOS4uYTE1NjgxYyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllci5oCkBAIC0yNSw2ICsyNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBJbnRTaXplOworY2xh
c3MgVGV4dHVyZU1hcHBlcjsKIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OwogCiAKQEAgLTUw
LDEwICs1MSwxNyBAQCBwdWJsaWM6CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIg
OiBwdWJsaWMgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIgewogcHVibGljOgorICAgIHN0cnVj
dCBQYWludE9wdGlvbnMgeworICAgICAgICBJbnRSZWN0IHZpc2libGVSZWN0OworICAgICAgICBJ
bnRSZWN0IHRhcmdldFJlY3Q7CisgICAgICAgIEludFNpemUgdmlld3BvcnRTaXplOworICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CisgICAgICAgIGZsb2F0IG9wYWNpdHk7
CisgICAgfTsKKwogICAgIHZpcnR1YWwgdm9pZCBzZXRQbGF0Zm9ybUxheWVyQ2xpZW50KFRleHR1
cmVNYXBwZXJMYXllckNsaWVudCopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNv
bnN0IEludFJlY3QmIGV4cG9zZWRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJh
bnNmb3JtLCBmbG9hdCBvcGFjaXR5KSB7fQorICAgIHZpcnR1YWwgdm9pZCBwYWludChUZXh0dXJl
TWFwcGVyKiwgY29uc3QgUGFpbnRPcHRpb25zJikge30KICAgICB2aXJ0dWFsIEludFNpemUgc2l6
ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFRleHR1cmVNYXBwZXIoKSB7
fQogICAgIHZpcnR1YWwgVHlwZSBsYXllclR5cGUoKSBjb25zdCB7IHJldHVybiBDb250ZW50TGF5
ZXI7IH0KIH07CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcCBiL1dl
YktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAppbmRleCAzOWU3NGQ5Li5mZTY1YmU2IDEwMDY0NAot
LS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2Vi
ZnJhbWUuY3BwCkBAIC05Nyw2ICs5Nyw3IEBACiAjaW5jbHVkZSAicnVudGltZV9yb290LmgiCiAj
ZW5kaWYKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVN
YXBwZXIuaCIKICNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIK
ICNlbmRpZgogI2luY2x1ZGUgInd0Zi9IYXNoTWFwLmgiCkBAIC0yOTQsMTkgKzI5NSw0MSBAQCB2
b2lkIFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlckZyb21UaWxlZEJhY2tpbmdTdG9yZShHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbgogCiAgICAgICAgIHBhaW50ZXItPnJlc3RvcmUoKTsKICAg
ICB9Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQ
RVIpCi0gICAgLy8gVGV4dHVyZU1hcHBlciBtaWdodCB1c2UgcmF3IE9wZW5HTCBvciBzb21lIG90
aGVyIGJhY2tlbmQgdGhhdCByZXF1aXJlcyBuYXRpdmUgcGFpbnRpbmcuIE9uIHJhc3RlciB0aGlz
IGRvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0LgotICAgIGlmIChyb290R3JhcGhpY3NMYXllcikgewot
ICAgICAgICBwYWludGVyLT5iZWdpbk5hdGl2ZVBhaW50aW5nKCk7Ci0gICAgICAgIHJvb3RHcmFw
aGljc0xheWVyLT5wYWludChjb250ZXh0LCB2aWV3LT5zaXplKCksIHZpZXctPmZyYW1lUmVjdCgp
LCBJbnRSZWN0KGNsaXAuYm91bmRpbmdSZWN0KCkpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBw
YWludGVyLT5vcGFjaXR5KCkpOwotICAgICAgICBwYWludGVyLT5lbmROYXRpdmVQYWludGluZygp
OwotICAgIH0KIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRV
UkVfTUFQUEVSKQorICAgIHJlbmRlckNvbXBvc2l0ZWRMYXllcnMoY29udGV4dCwgSW50UmVjdChj
bGlwLmJvdW5kaW5nUmVjdCgpKSk7CiAgICAgcmVuZGVyUmVsYXRpdmVDb29yZHMoY29udGV4dCwg
KFFXZWJGcmFtZTo6UmVuZGVyTGF5ZXIpKFFXZWJGcmFtZTo6U2Nyb2xsQmFyTGF5ZXIgfCBRV2Vi
RnJhbWU6OlBhbkljb25MYXllciksIGNsaXApOwogI2VuZGlmCiB9CiAjZW5kaWYKIAorI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQordm9pZCBR
V2ViRnJhbWVQcml2YXRlOjpyZW5kZXJDb21wb3NpdGVkTGF5ZXJzKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgSW50UmVjdCYgY2xpcCkKK3sKKyAgICBpZiAoIXJvb3RHcmFwaGljc0xh
eWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXRleHR1cmVNYXBwZXIpCisgICAgICAg
IHRleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoY29udGV4dCk7CisKKyAgICB0
ZXh0dXJlTWFwcGVyLT5zZXRHcmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgdGV4dHVyZU1h
cHBlci0+c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LT5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KCkpOworICAgIHRleHR1cmVNYXBwZXItPnNldFRleHREcmF3aW5nTW9kZShj
b250ZXh0LT50ZXh0RHJhd2luZ01vZGUoKSk7CisgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBjb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmll
dygpOworICAgIHBhaW50ZXItPnNhdmUoKTsKKyAgICBwYWludGVyLT5iZWdpbk5hdGl2ZVBhaW50
aW5nKCk7CisgICAgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6UGFpbnRPcHRpb25zIG9wdGlv
bnM7CisgICAgb3B0aW9ucy52aXNpYmxlUmVjdCA9IGNsaXA7CisgICAgb3B0aW9ucy50YXJnZXRS
ZWN0ID0gdmlldy0+ZnJhbWVSZWN0KCk7CisgICAgb3B0aW9ucy52aWV3cG9ydFNpemUgPSB2aWV3
LT5zaXplKCk7CisgICAgb3B0aW9ucy5vcGFjaXR5ID0gcGFpbnRlci0+b3BhY2l0eSgpOworICAg
IHJvb3RHcmFwaGljc0xheWVyLT5wYWludCh0ZXh0dXJlTWFwcGVyLmdldCgpLCBvcHRpb25zKTsK
KyAgICBwYWludGVyLT5lbmROYXRpdmVQYWludGluZygpOworICAgIHBhaW50ZXItPnJlc3RvcmUo
KTsKK30KKyNlbmRpZgorCiB2b2lkIFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlclJlbGF0aXZlQ29v
cmRzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUVdlYkZyYW1lOjpSZW5kZXJMYXllciBsYXll
ciwgY29uc3QgUVJlZ2lvbiYgY2xpcCkKIHsKICAgICBpZiAoIWZyYW1lLT52aWV3KCkgfHwgIWZy
YW1lLT5jb250ZW50UmVuZGVyZXIoKSkKQEAgLTM0OSwxNiArMzcyLDggQEAgdm9pZCBRV2ViRnJh
bWVQcml2YXRlOjpyZW5kZXJSZWxhdGl2ZUNvb3JkcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IFFXZWJGcmFtZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKICAgICAgICAgfQog
ICAgICAgICBwYWludGVyLT5yZXN0b3JlKCk7Ci0KICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKLSAgICAgICAgaWYgKHJvb3RHcmFwaGljc0xh
eWVyKSB7Ci0gICAgICAgICAgICBwYWludGVyLT5zYXZlKCk7Ci0gICAgICAgICAgICBwYWludGVy
LT5iZWdpbk5hdGl2ZVBhaW50aW5nKCk7Ci0gICAgICAgICAgICByb290R3JhcGhpY3NMYXllci0+
cGFpbnQoY29udGV4dCwgdmlldy0+c2l6ZSgpLCB2aWV3LT5mcmFtZVJlY3QoKSwgSW50UmVjdChj
bGlwLmJvdW5kaW5nUmVjdCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+b3Bh
Y2l0eSgpKTsKLSAgICAgICAgICAgIHBhaW50ZXItPmVuZE5hdGl2ZVBhaW50aW5nKCk7Ci0gICAg
ICAgICAgICBwYWludGVyLT5yZXN0b3JlKCk7Ci0gICAgICAgIH0KKyAgICAgICAgcmVuZGVyQ29t
cG9zaXRlZExheWVycyhjb250ZXh0LCBJbnRSZWN0KGNsaXAuYm91bmRpbmdSZWN0KCkpKTsKICNl
bmRpZgogICAgIH0KICAgICBpZiAobGF5ZXIgJiAoUVdlYkZyYW1lOjpQYW5JY29uTGF5ZXIgfCBR
V2ViRnJhbWU6OlNjcm9sbEJhckxheWVyKSkgewpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9x
d2ViZnJhbWVfcC5oIGIvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oCmluZGV4IDU2NjBiZDEu
LjYzNGUyMWIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaAorKysgYi9X
ZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmgKQEAgLTMzLDYgKzMzLDEwIEBACiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJWaWV3cG9ydEFyZ3VtZW50cy5oIgogCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaW5jbHVkZSAidGV4
bWFwL1RleHR1cmVNYXBwZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgRnJhbWVMb2FkZXJDbGllbnRRdDsKICAgICBjbGFzcyBGcmFtZVZpZXc7CkBAIC05NCw2
ICs5OCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbmRlckZyb21UaWxlZEJhY2tpbmdTdG9yZShX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBRUmVnaW9uJiBjbGlwKTsKICNlbmRpZgog
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIp
CisgICAgdm9pZCByZW5kZXJDb21wb3NpdGVkTGF5ZXJzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcCk7CisjZW5kaWYKICAgICBR
V2ViRnJhbWUgKnE7CiAgICAgUXQ6OlNjcm9sbEJhclBvbGljeSBob3Jpem9udGFsU2Nyb2xsQmFy
UG9saWN5OwogICAgIFF0OjpTY3JvbGxCYXJQb2xpY3kgdmVydGljYWxTY3JvbGxCYXJQb2xpY3k7
CkBAIC0xMDYsNiArMTEzLDcgQEAgcHVibGljOgogICAgIGludCBtYXJnaW5IZWlnaHQ7CiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAgICAg
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckNvbnRlbnRMYXllciogcm9vdEdyYXBoaWNzTGF5ZXI7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+IHRleHR1cmVNYXBwZXI7CiAjZW5kaWYK
ICAgICBib29sIHpvb21UZXh0T25seTsKIH07CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQ2hhbmdl
TG9nIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCAxY2Y3OGQyLi5kNjc3ZWM2IDEwMDY0NAot
LS0gYS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMCBAQAorMjAxMC0xMC0zMSAgTm9hbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBu
b2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgW1RleG1hcF0gW1F0XSBUZXh0dXJlIG1hcHBlciBpbml0aWFsIGltcGxlbWVudGF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzA3MAorCisg
ICAgICAgIFNvbWUgcmVmYWN0b3IgZm9yIHRleG1hcCB0byBlbmFibGUgV2ViS2l0MjogcmVtb3Zl
IGdsb2JhbHMsIGFuZCBhbGxvdyBUZXh0dXJlTWFwcGVyIHRvIGV4aXN0IHdpdGhvdXQgYSBHcmFw
aGljc0NvbnRleHQuCisgICAgICAgIFRoaXMgd2lsbCBhbGxvdyByZW5kZXJpbmcgdGhlIFRleHR1
cmVNYXBwZXJOb2RlIHRyZWUgd2l0aG91dCBhbiBhY3RpdmUgUVBhaW50ZXIsIGludG8gdGhlIGN1
cnJlbnQgR0wgY29udGV4dC4KKyAgICAgICAgTW9zdCBvZiB0aGUgY2hhbmdlcyBzaW1wbHkgbW92
ZSB0aGUgZ2xvYmFzIGluIFRleHR1cmVNYXBwZXJHTCBpbnRvIG1lbWJlcnMgb2YgdGhhdCBjbGFz
cy4KKworICAgICAgICAqIEFwaS9xd2ViZnJhbWUuY3BwOgorICAgICAgICAoUVdlYkZyYW1lUHJp
dmF0ZTo6cmVuZGVyRnJvbVRpbGVkQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFFXZWJGcmFtZVBy
aXZhdGU6OnJlbmRlckNvbXBvc2l0ZWRMYXllcnMpOgorICAgICAgICAoUVdlYkZyYW1lUHJpdmF0
ZTo6cmVuZGVyUmVsYXRpdmVDb29yZHMpOgorICAgICAgICAqIEFwaS9xd2ViZnJhbWVfcC5oOgor
CiAyMDEwLTEwLTI4ICBOb2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBBcml5YSBIaWRheWF0Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72762</attachid>
            <date>2010-11-02 16:21:42 -0700</date>
            <delta_ts>2010-11-02 21:41:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch-47070.diff</filename>
            <type>text/plain</type>
            <size>37474</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YmU1MjJhNy4uMGY0ZWNiYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNCArMSw1NCBAQAotMjAxMC0xMS0wMiAgQWRlbGUgUGV0ZXJz
b24gIDxhZGVsZUBhcHBsZS5jb20+CisgMjAxMC0xMC0zMSAgTm9hbSBSb3NlbnRoYWwgIDxub2Ft
LnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hk
ZSBDaHJpc3RpYW5zZW4uCisKKyAgICAgICAgW1RleG1hcF0gW1F0XSBUZXh0dXJlIG1hcHBlciBp
bml0aWFsIGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NzA3MAorCisgICAgICAgIFNvbWUgcmVmYWN0b3IgZm9yIHRleG1hcCB0
byBlbmFibGUgV2ViS2l0MjogcmVtb3ZlIGdsb2JhbHMsIGFuZCBhbGxvdyBUZXh0dXJlTWFwcGVy
IHRvIGV4aXN0IHdpdGhvdXQgYSBHcmFwaGljc0NvbnRleHQuCisgICAgICAgIFRoaXMgd2lsbCBh
bGxvdyByZW5kZXJpbmcgdGhlIFRleHR1cmVNYXBwZXJOb2RlIHRyZWUgd2l0aG91dCBhbiBhY3Rp
dmUgUVBhaW50ZXIsIGludG8gdGhlIGN1cnJlbnQgR0wgY29udGV4dC4KKyAgICAgICAgTW9zdCBv
ZiB0aGUgY2hhbmdlcyBzaW1wbHkgbW92ZSB0aGUgZ2xvYmFzIGluIFRleHR1cmVNYXBwZXJHTCBp
bnRvIG1lbWJlcnMgb2YgdGhhdCBjbGFzcy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIE9sZCB0
ZXN0cyBpbiBMYXlvdXRUZXN0cy9jb21wb3NpdGluZyBjb3ZlciB0aGlzLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpnZXRVbmlmb3JtTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6
Y3JlYXRlU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xE
YXRhOjpEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnk6OmZpbmRPckNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpEaXJlY3RseUNvbXBvc2l0ZWRJ
bWFnZVJlcG9zaXRvcnk6OmRlcmVmKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJH
TERhdGE6OkRpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVwb3NpdG9yeTo6RGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VSZXBvc2l0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERh
dGE6OkRpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVwb3NpdG9yeTo6fkRpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlUmVwb3NpdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRh
OjpUZXh0dXJlTWFwcGVyR0xEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJH
TDo6VGV4dHVyZU1hcHBlckdMKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6
ZHJhd1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpzZXRDb250
ZW50c1RvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpkZXN0cm95
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6flRleHR1cmVNYXBwZXJHTCk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6Om1ha2VDb250ZXh0Q3VycmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6Om9idGFpbkN1cnJlbnRDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6YmluZFN1cmZhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpwYWludFRvVGFyZ2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckdMOjpkYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9UZXh0dXJlTWFwcGVyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclF0
OjpUZXh0dXJlTWFwcGVyUXQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclF0Ojpz
ZXRHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnBh
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjp1cGxvYWRUZXh0dXJl
RnJvbUNvbnRlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpzZXRHcmFwaGljc0Nv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6c2V0SW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpzZXRUZXh0
RHJhd2luZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6aW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjp0ZXh0
RHJhd2luZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6VGV4dHVyZU1h
cHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ29udGVudExh
eWVyOjpwYWludCk6CisKKyAyMDEwLTExLTAyICBBZGVsZSBQZXRlcnNvbiAgPGFkZWxlQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW50IFRhbXVyYS4KIApAQCAtODIyODMsNyAr
ODIzMzMsNyBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YS4K
IAotICAgICAgICBCdWfCoDQxMzQwIC0gW0dTdHJlYW1lcl0gU3VidGxlIHJhY2UgY29uZGl0aW9u
IGR1cmluZyBzZWVrcworICAgICAgICBCdWcgNDEzNDAgLSBbR1N0cmVhbWVyXSBTdWJ0bGUgcmFj
ZSBjb25kaXRpb24gZHVyaW5nIHNlZWtzCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00MTM0MAogCiAgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHA6CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCA2NTI3Y2U0
Li40MWJjZmM0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9U
ZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTMwLDggKzMwLDEyIEBACiAjaWYgZGVmaW5lZChURVhN
QVBfT1BFTkdMX0VTXzIpCiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAjZWxpZiBPUyhNQUNfT1Nf
WCkKKyNpbmNsdWRlIDxBR0wvYWdsLmg+CiAjaW5jbHVkZSA8Z2wuaD4KICNlbHNlCisjaWYgT1Mo
VU5JWCkKKyNpbmNsdWRlIDxHTC9nbHguaD4KKyNlbmRpZgogI2luY2x1ZGUgPEdML2dsLmg+CiAj
ZW5kaWYKIApAQCAtOTAsNiArOTQsMTMyIEBAIGlubGluZSBzdGF0aWMgdm9pZCBkZWJ1Z0dMQ29t
bWFuZChjb25zdCBjaGFyKiBjb21tYW5kLCBpbnQgbGluZSkKICNkZWZpbmUgR0xfQ01EKHgpIHgK
ICNlbmRpZgogCitzdGF0aWMgY29uc3QgR0x1aW50IGdJblZlcnRleEF0dHJpYnV0ZUluZGV4ID0g
MDsKKworc3RydWN0IFRleHR1cmVNYXBwZXJHTERhdGEgeworICAgIHN0YXRpYyBzdHJ1Y3QgU2hh
ZGVySW5mbyB7CisgICAgICAgIGVudW0gU2hhZGVyUHJvZ3JhbUluZGV4IHsKKyAgICAgICAgICAg
IFNpbXBsZVByb2dyYW0sCisgICAgICAgICAgICBPcGFjaXR5QW5kTWFza1Byb2dyYW0sCisgICAg
ICAgICAgICBUYXJnZXRQcm9ncmFtLAorCisgICAgICAgICAgICBQcm9ncmFtQ291bnQKKyAgICAg
ICAgfTsKKworICAgICAgICBlbnVtIFNoYWRlclZhcmlhYmxlSW5kZXggeworICAgICAgICAgICAg
SW5NYXRyaXhWYXJpYWJsZSwKKyAgICAgICAgICAgIEluU291cmNlTWF0cml4VmFyaWFibGUsCisg
ICAgICAgICAgICBJbk1hc2tNYXRyaXhWYXJpYWJsZSwKKyAgICAgICAgICAgIE9wYWNpdHlWYXJp
YWJsZSwKKyAgICAgICAgICAgIFNvdXJjZVRleHR1cmVWYXJpYWJsZSwKKyAgICAgICAgICAgIE1h
c2tUZXh0dXJlVmFyaWFibGUsCisKKyAgICAgICAgICAgIFZhcmlhYmxlQ291bnQKKyAgICAgICAg
fTsKKworICAgICAgICBzdHJ1Y3QgUHJvZ3JhbUluZm8geworICAgICAgICAgICAgR0x1aW50IGlk
OworICAgICAgICAgICAgR0xpbnQgdmFyc1tWYXJpYWJsZUNvdW50XTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oU2hhZGVyUHJvZ3JhbUluZGV4IHByb2cs
IFNoYWRlclZhcmlhYmxlSW5kZXggdmFyLCBjb25zdCBjaGFyKiBuYW1lKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gcHJvZ3JhbXNbcHJvZ10udmFyc1t2YXJdID0gZ2xHZXRVbmlmb3Jt
TG9jYXRpb24ocHJvZ3JhbXNbcHJvZ10uaWQsIG5hbWUpOworICAgICAgICB9CisKKyAgICAgICAg
dm9pZCBjcmVhdGVTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwg
Y29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UsIFNoYWRlclByb2dyYW1JbmRleCBpbmRl
eCkKKyAgICAgICAgeworICAgICAgICAgICAgR0x1aW50IHZlcnRleFNoYWRlciA9IGdsQ3JlYXRl
U2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIpOworICAgICAgICAgICAgR0x1aW50IGZyYWdtZW50U2hh
ZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKKyAgICAgICAgICAgIEdM
X0NNRChnbFNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2Us
IDApKQorICAgICAgICAgICAgR0xfQ01EKGdsU2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCAx
LCAmZnJhZ21lbnRTaGFkZXJTb3VyY2UsIDApKQorICAgICAgICAgICAgR0x1aW50IHByb2dyYW1J
RCA9IGdsQ3JlYXRlUHJvZ3JhbSgpOworICAgICAgICAgICAgR0xfQ01EKGdsQ29tcGlsZVNoYWRl
cih2ZXJ0ZXhTaGFkZXIpKQorICAgICAgICAgICAgR0xfQ01EKGdsQ29tcGlsZVNoYWRlcihmcmFn
bWVudFNoYWRlcikpCisgICAgICAgICAgICBHTF9DTUQoZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlE
LCB2ZXJ0ZXhTaGFkZXIpKQorICAgICAgICAgICAgR0xfQ01EKGdsQXR0YWNoU2hhZGVyKHByb2dy
YW1JRCwgZnJhZ21lbnRTaGFkZXIpKQorICAgICAgICAgICAgR0xfQ01EKGdsQmluZEF0dHJpYkxv
Y2F0aW9uKHByb2dyYW1JRCwgZ0luVmVydGV4QXR0cmlidXRlSW5kZXgsICJJblZlcnRleCIpKQor
ICAgICAgICAgICAgR0xfQ01EKGdsTGlua1Byb2dyYW0ocHJvZ3JhbUlEKSkKKyAgICAgICAgICAg
IHByb2dyYW1zW2luZGV4XS5pZCA9IHByb2dyYW1JRDsKKyNpZmRlZiBQUklOVF9QUk9HUkFNX0lO
Rk9fTE9HCisgICAgICAgICAgICBjaGFyIGluZm9Mb2dbMTAyNF07CisgICAgICAgICAgICBpbnQg
bGVuOworICAgICAgICAgICAgR0xfQ01EKGdsR2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbUlELCAx
MDI0LCAmbGVuLCBpbmZvTG9nKSk7CisgICAgICAgICAgICBMT0coR3JhcGhpY3MsICJDb21waWxl
ZCBwcm9ncmFtIGZvciB0ZXh0dXJlIG1hcHBlci4gTG9nOiAlc1xuIiwgaW5mb0xvZyk7CisjZW5k
aWYKKyAgICAgICAgfQorCisgICAgICAgIFByb2dyYW1JbmZvIHByb2dyYW1zW1Byb2dyYW1Db3Vu
dF07CisKKyAgICB9IHNoYWRlckluZm87CisKKyAgICBzdHJ1Y3QgRGlyZWN0bHlDb21wb3NpdGVk
SW1hZ2VSZXBvc2l0b3J5IHsKKyAgICAgICAgc3RydWN0IEVudHJ5IHsKKyAgICAgICAgICAgIEdM
dWludCB0ZXh0dXJlOworICAgICAgICAgICAgaW50IHJlZkNvdW50OworICAgICAgICB9OworICAg
ICAgICBIYXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBFbnRyeT4gaW1hZ2VUb1RleHR1cmU7CisKKyAg
ICAgICAgR0x1aW50IGZpbmRPckNyZWF0ZShOYXRpdmVJbWFnZVB0ciBpbWFnZSwgYm9vbCYgZm91
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIsIEVudHJ5
Pjo6aXRlcmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5maW5kKGltYWdlKTsKKyAgICAgICAgICAg
IGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoaXQgIT0gaW1hZ2VUb1RleHR1cmUuZW5k
KCkpIHsKKyAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLnJlZkNvdW50Kys7CisgICAgICAgICAg
ICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kLnRl
eHR1cmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBFbnRyeSBlbnRyeTsKKyAgICAgICAg
ICAgIEdMX0NNRChnbEdlblRleHR1cmVzKDEsICZlbnRyeS50ZXh0dXJlKSk7CisgICAgICAgICAg
ICBlbnRyeS5yZWZDb3VudCA9IDE7CisgICAgICAgICAgICBpbWFnZVRvVGV4dHVyZS5hZGQoaW1h
Z2UsIGVudHJ5KTsKKyAgICAgICAgICAgIHJldHVybiBlbnRyeS50ZXh0dXJlOworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBkZXJlZihOYXRpdmVJbWFnZVB0ciBpbWFnZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgSGFzaE1hcDxOYXRpdmVJbWFnZVB0ciwgRW50cnk+OjppdGVyYXRvciBpdCA9
IGltYWdlVG9UZXh0dXJlLmZpbmQoaW1hZ2UpOworICAgICAgICAgICAgaWYgKGl0ICE9IGltYWdl
VG9UZXh0dXJlLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQucmVmQ291
bnQgPCAyKSB7CisgICAgICAgICAgICAgICAgICAgIGltYWdlVG9UZXh0dXJlLnJlbW92ZShpdCk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIERpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVwb3NpdG9yeSgpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIH5EaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnkoKQorICAg
ICAgICB7CisgICAgICAgICAgICBmb3IgKEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIsIEVudHJ5Pjo6
aXRlcmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5iZWdpbigpOyBpdCAhPSBpbWFnZVRvVGV4dHVy
ZS5lbmQoKTsgKytpdCkgeworICAgICAgICAgICAgICAgIEdMdWludCB0ZXh0dXJlID0gaXQtPnNl
Y29uZC50ZXh0dXJlOworICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlKQorICAgICAgICAgICAg
ICAgICAgICBHTF9DTUQoZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgIH0KKyAgICB9IGRpcmVjdGx5Q29tcG9zaXRlZEltYWdlczsKKworICAg
IFRleHR1cmVNYXBwZXJHTERhdGEoKQorICAgICAgICA6IGN1cnJlbnRQcm9ncmFtKFRleHR1cmVN
YXBwZXJHTERhdGE6OlNoYWRlckluZm86OlRhcmdldFByb2dyYW0pCisgICAgeyB9CisKKyAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBwcm9qZWN0aW9uTWF0cml4OworICAgIGludCBjdXJyZW50UHJv
Z3JhbTsKKworI2lmIE9TKE1BQ19PU19YKQorICAgIEFHTENvbnRleHQgYWdsQ29udGV4dDsKKyNl
bGlmIE9TKFVOSVgpCisgICAgRHJhd2FibGUgZ2x4RHJhd2FibGU7CisgICAgR0xYQ29udGV4dCBn
bHhDb250ZXh0OworI2VuZGlmCit9OworCitUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZv
IFRleHR1cmVNYXBwZXJHTERhdGE6OnNoYWRlckluZm87CisKIGNsYXNzIEJpdG1hcFRleHR1cmVH
TCA6IHB1YmxpYyBCaXRtYXBUZXh0dXJlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVz
dHJveSgpOwpAQCAtMTExLDYgKzI0MSw3IEBAIHByaXZhdGU6CiAgICAgR0x1aW50IG1fZmJvOwog
ICAgIEludFNpemUgbV9hY3R1YWxTaXplOwogICAgIGJvb2wgbV9zdXJmYWNlTmVlZHNSZXNldDsK
KyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlckdMPiBtX3RleHR1cmVNYXBwZXI7CiAgICAgQml0bWFw
VGV4dHVyZUdMKCkKICAgICAgICAgOiBtX2lkKDApCiAgICAgICAgICwgbV9pbWFnZSgwKQpAQCAt
MTIzLDY0ICsyNTQsMTUgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBl
ckdMOwogfTsKIAotc3RhdGljIHN0cnVjdCBUZXhtYXBTaGFkZXJJbmZvIHsKLSAgICBlbnVtIFNo
YWRlclByb2dyYW1JbmRleCB7Ci0gICAgICAgIFNpbXBsZVByb2dyYW0sCi0gICAgICAgIE9wYWNp
dHlBbmRNYXNrUHJvZ3JhbSwKLSAgICAgICAgVGFyZ2V0UHJvZ3JhbSwKLSAgICAgICAgTnVtUHJv
Z3JhbXMKLSAgICB9OwotCi0gICAgZW51bSBTaGFkZXJWYXJpYWJsZUluZGV4IHsKLSAgICAgICAg
SW5NYXRyaXhWYXJpYWJsZSwKLSAgICAgICAgSW5Tb3VyY2VNYXRyaXhWYXJpYWJsZSwKLSAgICAg
ICAgSW5NYXNrTWF0cml4VmFyaWFibGUsCi0gICAgICAgIEluVmVydGV4VmFyaWFibGUsCi0KLSAg
ICAgICAgT3BhY2l0eVZhcmlhYmxlLAotICAgICAgICBTb3VyY2VUZXh0dXJlVmFyaWFibGUsCi0g
ICAgICAgIE1hc2tUZXh0dXJlVmFyaWFibGUsCi0gICAgICAgIE51bVZhcmlhYmxlcwotICAgIH07
Ci0KLSAgICBzdHJ1Y3QgUHJvZ3JhbUluZm8gewotICAgICAgICBHTHVpbnQgaWQ7Ci0gICAgICAg
IEdMaW50IHZhcnNbTnVtVmFyaWFibGVzXTsKLSAgICB9OwotCi0gICAgR0xpbnQgZ2V0VW5pZm9y
bUxvY2F0aW9uKFNoYWRlclByb2dyYW1JbmRleCBwcm9nLCBTaGFkZXJWYXJpYWJsZUluZGV4IHZh
ciwgY29uc3QgY2hhciogbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBwcm9ncmFtc1twcm9n
XS52YXJzW3Zhcl0gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtc1twcm9nXS5pZCwgbmFt
ZSk7Ci0gICAgfQotCi0gICAgdm9pZCBjcmVhdGVTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZl
cnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UsIFNoYWRl
clByb2dyYW1JbmRleCBpbmRleCkKLSAgICB7Ci0gICAgICAgIEdMdWludCB2ZXJ0ZXhTaGFkZXIg
PSBnbENyZWF0ZVNoYWRlcihHTF9WRVJURVhfU0hBREVSKTsKLSAgICAgICAgR0x1aW50IGZyYWdt
ZW50U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKLSAgICAgICAg
R0xfQ01EKGdsU2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgMSwgJnZlcnRleFNoYWRlclNvdXJj
ZSwgMCkpCi0gICAgICAgIEdMX0NNRChnbFNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgMSwg
JmZyYWdtZW50U2hhZGVyU291cmNlLCAwKSkKLSAgICAgICAgR0x1aW50IHByb2dyYW1JRCA9IGds
Q3JlYXRlUHJvZ3JhbSgpOwotICAgICAgICBHTF9DTUQoZ2xDb21waWxlU2hhZGVyKHZlcnRleFNo
YWRlcikpCi0gICAgICAgIEdMX0NNRChnbENvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpKQot
ICAgICAgICBHTF9DTUQoZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2ZXJ0ZXhTaGFkZXIpKQot
ICAgICAgICBHTF9DTUQoZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNoYWRlcikp
Ci0gICAgICAgIEdMX0NNRChnbEJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsIDAsICJJblZl
cnRleCIpKQotICAgICAgICBHTF9DTUQoZ2xMaW5rUHJvZ3JhbShwcm9ncmFtSUQpKQotICAgICAg
ICBwcm9ncmFtc1tpbmRleF0uaWQgPSBwcm9ncmFtSUQ7Ci0gICAgfQotCi0gICAgUHJvZ3JhbUlu
Zm8gcHJvZ3JhbXNbTnVtUHJvZ3JhbXNdOwotCi19IGdTaGFkZXJJbmZvOwotCiAjZGVmaW5lIFRF
WE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihwcm9nLCB2YXIpIFwKLSAgICAgICAgICAgIGlm
IChnU2hhZGVySW5mby5nZXRVbmlmb3JtTG9jYXRpb24oVGV4bWFwU2hhZGVySW5mbzo6cHJvZyMj
UHJvZ3JhbSwgVGV4bWFwU2hhZGVySW5mbzo6dmFyIyNWYXJpYWJsZSwgI3ZhcikgPCAwKSBcCi0g
ICAgICAgICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGRuJ3QgZmluZCB2YXJpYWJsZSAiI3Zh
ciIgaW4gcHJvZ3JhbSAiI3Byb2ciXG4iKTsKLSNkZWZpbmUgVEVYTUFQX0JVSUxEX1NIQURFUihw
cm9ncmFtKSBnU2hhZGVySW5mby5jcmVhdGVTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJj
ZSMjcHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXJTb3VyY2UjI3Byb2dyYW0sIFRleG1hcFNoYWRlcklu
Zm86OnByb2dyYW0jI1Byb2dyYW0pOworICAgIGlmIChUZXh0dXJlTWFwcGVyR0xEYXRhOjpzaGFk
ZXJJbmZvLmdldFVuaWZvcm1Mb2NhdGlvbihUZXh0dXJlTWFwcGVyR0xEYXRhOjpzaGFkZXJJbmZv
LnByb2cjI1Byb2dyYW0sIFRleHR1cmVNYXBwZXJHTERhdGE6OnNoYWRlckluZm8udmFyIyNWYXJp
YWJsZSwgI3ZhcikgPCAwKSBcCisgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkbid0IGZpbmQg
dmFyaWFibGUgIiN2YXIiIGluIHByb2dyYW0gIiNwcm9nIlxuIik7CiAKLVRleHR1cmVNYXBwZXJH
TDo6VGV4dHVyZU1hcHBlckdMKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLSAgICA6IFRleHR1
cmVNYXBwZXIoY29udGV4dCkKLSAgICAsIG1fY3VycmVudFByb2dyYW0oVGV4bWFwU2hhZGVySW5m
bzo6VGFyZ2V0UHJvZ3JhbSkKKyNkZWZpbmUgVEVYTUFQX0JVSUxEX1NIQURFUihwcm9ncmFtKSBc
CisgICAgVGV4dHVyZU1hcHBlckdMRGF0YTo6c2hhZGVySW5mby5jcmVhdGVTaGFkZXJQcm9ncmFt
KHZlcnRleFNoYWRlclNvdXJjZSMjcHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXJTb3VyY2UjI3Byb2dy
YW0sIFRleHR1cmVNYXBwZXJHTERhdGE6OnNoYWRlckluZm8ucHJvZ3JhbSMjUHJvZ3JhbSk7CisK
K1RleHR1cmVNYXBwZXJHTDo6VGV4dHVyZU1hcHBlckdMKCkKKyAgICA6IG1fZGF0YShuZXcgVGV4
dHVyZU1hcHBlckdMRGF0YSkKIHsKICAgICBzdGF0aWMgYm9vbCBzaGFkZXJzQ29tcGlsZWQgPSBm
YWxzZTsKICAgICBpZiAoc2hhZGVyc0NvbXBpbGVkKQpAQCAtMjgyLDE4ICszNjQsMTggQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1
cmUsIGNvbnN0IEludFJlY3QmIHQKIAogICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCYgdGV4dHVy
ZUdMID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4odGV4dHVyZSk7CiAKLSAg
ICBUZXhtYXBTaGFkZXJJbmZvOjpTaGFkZXJQcm9ncmFtSW5kZXggcHJvZ3JhbTsKKyAgICBUZXh0
dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpTaGFkZXJQcm9ncmFtSW5kZXggcHJvZ3JhbTsK
ICAgICBpZiAobWFza1RleHR1cmUpCi0gICAgICAgIHByb2dyYW0gPSBUZXhtYXBTaGFkZXJJbmZv
OjpPcGFjaXR5QW5kTWFza1Byb2dyYW07CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVy
R0xEYXRhOjpTaGFkZXJJbmZvOjpPcGFjaXR5QW5kTWFza1Byb2dyYW07CiAgICAgZWxzZQotICAg
ICAgICBwcm9ncmFtID0gVGV4bWFwU2hhZGVySW5mbzo6U2ltcGxlUHJvZ3JhbTsKKyAgICAgICAg
cHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86OlNpbXBsZVByb2dyYW07
CiAKLSAgICBjb25zdCBUZXhtYXBTaGFkZXJJbmZvOjpQcm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8g
PSBnU2hhZGVySW5mby5wcm9ncmFtc1twcm9ncmFtXTsKLSAgICBpZiAobV9jdXJyZW50UHJvZ3Jh
bSAhPSBwcm9ncmFtKSB7CisgICAgY29uc3QgVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5m
bzo6UHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvID0gZGF0YSgpLnNoYWRlckluZm8ucHJvZ3JhbXNb
cHJvZ3JhbV07CisgICAgaWYgKGRhdGEoKS5jdXJyZW50UHJvZ3JhbSAhPSBwcm9ncmFtKSB7CiAg
ICAgICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbUluZm8uaWQpKQotICAgICAgICBHTF9D
TUQoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZ1NoYWRlckluZm8ucHJvZ3JhbXNbbV9jdXJy
ZW50UHJvZ3JhbV0udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJblZlcnRleFZhcmlhYmxlXSkpCi0g
ICAgICAgIG1fY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOwotICAgICAgICBHTF9DTUQoZ2xFbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86Oklu
VmVydGV4VmFyaWFibGVdKSkKKyAgICAgICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KGdJblZlcnRleEF0dHJpYnV0ZUluZGV4KSkKKyAgICAgICAgZGF0YSgpLmN1cnJlbnRQcm9n
cmFtID0gcHJvZ3JhbTsKKyAgICAgICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXko
Z0luVmVydGV4QXR0cmlidXRlSW5kZXgpKQogICAgIH0KIAogICAgIEdMX0NNRChnbERpc2FibGUo
R0xfREVQVEhfVEVTVCkpCkBAIC0zMDUsNyArMzg3LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6
OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3Qm
IHQKICAgICBjb25zdCBHTGZsb2F0IHVuaXRSZWN0W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwg
MX07CiAgICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcigwLCAyLCBHTF9GTE9BVCwgR0xf
RkFMU0UsIDAsIHVuaXRSZWN0KSkKIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9
IFRyYW5zZm9ybWF0aW9uTWF0cml4KG1fcHJvamVjdGlvbk1hdHJpeCkubXVsdExlZnQobW9kZWxW
aWV3TWF0cml4KS5tdWx0TGVmdChUcmFuc2Zvcm1hdGlvbk1hdHJpeCgKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBtYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChkYXRhKCkucHJvamVjdGlv
bk1hdHJpeCkubXVsdExlZnQobW9kZWxWaWV3TWF0cml4KS5tdWx0TGVmdChUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgKICAgICAgICAgICAgIHRhcmdldFJlY3Qud2lkdGgoKSwgMCwgMCwgMCwKICAgICAg
ICAgICAgIDAsIHRhcmdldFJlY3QuaGVpZ2h0KCksIDAsIDAsCiAgICAgICAgICAgICAwLCAwLCAx
LCAwLApAQCAtMzIxLDEwICs0MDMsMTAgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0
dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCB0ZXh0dXJlR0wubV9yZWxhdGl2ZVNp
emUuaGVpZ2h0KCksIDAsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCwgMCwgMSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAw
LCAxfTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4
bWFwU2hhZGVySW5mbzo6SW5NYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNCkpCi0gICAg
R0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlcklu
Zm86OkluU291cmNlTWF0cml4VmFyaWFibGVdLCAxLCBHTF9GQUxTRSwgbTRzcmMpKQotICAgIEdM
X0NNRChnbFVuaWZvcm0xaShwcm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OlNvdXJj
ZVRleHR1cmVWYXJpYWJsZV0sIDApKQotICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9ncmFtSW5m
by52YXJzW1RleG1hcFNoYWRlckluZm86Ok9wYWNpdHlWYXJpYWJsZV0sIG9wYWNpdHkpKQorICAg
IEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVy
R0xEYXRhOjpTaGFkZXJJbmZvOjpJbk1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00KSkK
KyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1h
cHBlckdMRGF0YTo6U2hhZGVySW5mbzo6SW5Tb3VyY2VNYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZB
TFNFLCBtNHNyYykpCisgICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4
dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6U291cmNlVGV4dHVyZVZhcmlhYmxlXSwgMCkp
CisgICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdM
RGF0YTo6U2hhZGVySW5mbzo6T3BhY2l0eVZhcmlhYmxlXSwgb3BhY2l0eSkpCiAKICAgICBpZiAo
bWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQoKSkgewogICAgICAgICBjb25zdCBC
aXRtYXBUZXh0dXJlR0wqIG1hc2tUZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBU
ZXh0dXJlR0wqPihtYXNrVGV4dHVyZSk7CkBAIC0zMzQsOCArNDE2LDggQEAgdm9pZCBUZXh0dXJl
TWFwcGVyR0w6OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0
IEludFJlY3QmIHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwg
bWFza1RleHR1cmVHTC0+bV9yZWxhdGl2ZVNpemUuaGVpZ2h0KCksIDAsIDAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDF9OwotICAgICAgICBnbFVuaWZv
cm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJbk1hc2tNYXRy
aXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNG1hc2spOwotICAgICAgICBHTF9DTUQoZ2xVbmlm
b3JtMWkocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpNYXNrVGV4dHVyZVZhcmlh
YmxlXSwgMSkpCisgICAgICAgIGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1Rl
eHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86OkluTWFza01hdHJpeFZhcmlhYmxlXSwgMSwg
R0xfRkFMU0UsIG00bWFzayk7CisgICAgICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtSW5m
by52YXJzW1RleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86Ok1hc2tUZXh0dXJlVmFyaWFi
bGVdLCAxKSkKICAgICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpCiAg
ICAgfQogCkBAIC0zOTksNDMgKzQ4MSw2IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjplbmRQYWlu
dCgpCiAgICAgbV9idWZmZXIuY2xlYXIoKTsKIH0KIAotc3RydWN0IFRleG1hcEdMU2hhZGVyVGV4
dHVyZXMgewotICAgIHN0cnVjdCBFbnRyeSB7Ci0gICAgICAgIEdMdWludCB0ZXh0dXJlOwotICAg
ICAgICBpbnQgcmVmQ291bnQ7Ci0gICAgfTsKLSAgICBIYXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBF
bnRyeT4gaW1hZ2VUb1RleHR1cmU7Ci0gICAgR0x1aW50IGZpbmRPckNyZWF0ZShOYXRpdmVJbWFn
ZVB0ciBpbWFnZSwgYm9vbCYgZm91bmQpCi0gICAgewotICAgICAgICBIYXNoTWFwPE5hdGl2ZUlt
YWdlUHRyLCBFbnRyeT46Oml0ZXJhdG9yIGl0ID0gaW1hZ2VUb1RleHR1cmUuZmluZChpbWFnZSk7
Ci0gICAgICAgIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgIGlmIChpdCAhPSBpbWFnZVRvVGV4dHVy
ZS5lbmQoKSkgewotICAgICAgICAgICAgaXQtPnNlY29uZC5yZWZDb3VudCsrOwotICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQudGV4dHVyZTsK
LSAgICAgICAgfQotICAgICAgICBFbnRyeSBlbnRyeTsKLSAgICAgICAgR0xfQ01EKGdsR2VuVGV4
dHVyZXMoMSwgJmVudHJ5LnRleHR1cmUpKTsKLSAgICAgICAgZW50cnkucmVmQ291bnQgPSAxOwot
ICAgICAgICBpbWFnZVRvVGV4dHVyZS5hZGQoaW1hZ2UsIGVudHJ5KTsKLSAgICAgICAgcmV0dXJu
IGVudHJ5LnRleHR1cmU7Ci0gICAgfQotCi0gICAgYm9vbCBkZXJlZihOYXRpdmVJbWFnZVB0ciBp
bWFnZSkKLSAgICB7Ci0gICAgICAgIEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIsIEVudHJ5Pjo6aXRl
cmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5maW5kKGltYWdlKTsKLSAgICAgICAgaWYgKGl0ICE9
IGltYWdlVG9UZXh0dXJlLmVuZCgpKSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5yZWZD
b3VudCA8IDIpIHsKLSAgICAgICAgICAgICAgICBpbWFnZVRvVGV4dHVyZS5yZW1vdmUoaXQpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19OwotCi1zdGF0aWMgVGV4bWFwR0xTaGFkZXJU
ZXh0dXJlcyBnVGV4dHVyZVJlcG9zaXRvcnk7Ci0KIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpzZXRD
b250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQogewogICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2
ZUltYWdlID0gaW1hZ2UgPyBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSA6IDA7
CkBAIC00NDgsNyArNDkzLDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnNldENvbnRlbnRzVG9J
bWFnZShJbWFnZSogaW1hZ2UpCiAgICAgaWYgKG5hdGl2ZUltYWdlID09IG1faW1hZ2UpCiAgICAg
ICAgIHJldHVybjsKICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgR0x1aW50IG5ld1RleHR1
cmVJRCA9IGdUZXh0dXJlUmVwb3NpdG9yeS5maW5kT3JDcmVhdGUobmF0aXZlSW1hZ2UsIGZvdW5k
KTsKKyAgICBHTHVpbnQgbmV3VGV4dHVyZUlEID0gbV90ZXh0dXJlTWFwcGVyLT5kYXRhKCkuZGly
ZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmRPckNyZWF0ZShuYXRpdmVJbWFnZSwgZm91bmQpOwog
ICAgIGlmIChuZXdUZXh0dXJlSUQgIT0gbV9pZCkgewogICAgICAgICBkZXN0cm95KCk7CiAgICAg
ICAgIG1faWQgPSBuZXdUZXh0dXJlSUQ7CkBAIC00NjQsNyArNTA5LDcgQEAgdm9pZCBCaXRtYXBU
ZXh0dXJlR0w6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiAKIHZvaWQgQml0bWFw
VGV4dHVyZUdMOjpkZXN0cm95KCkKIHsKLSAgICBpZiAobV9pZCAmJiAoIW1faW1hZ2UgfHwgIWdU
ZXh0dXJlUmVwb3NpdG9yeS5kZXJlZihtX2ltYWdlKSkpCisgICAgaWYgKG1faWQgJiYgKCFtX2lt
YWdlIHx8ICFtX3RleHR1cmVNYXBwZXItPmRhdGEoKS5kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMu
ZGVyZWYobV9pbWFnZSkpKQogICAgICAgICBHTF9DTUQoZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9p
ZCkpCiAgICAgaWYgKG1fZmJvKQogICAgICAgICBHTF9DTUQoZ2xEZWxldGVGcmFtZWJ1ZmZlcnMo
MSwgJm1fZmJvKSkKQEAgLTQ5Myw4ICs1MzgsMzIgQEAgc3RhdGljIGlubGluZSBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KGNvbnN0IEludFNpemUmIHNpemUsIGIK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIGZsaXAgPyAxIDogLTEsIDAsIDEp
OwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJHTDo6Y2xlYW51cCgpCitUZXh0dXJlTWFwcGVyR0w6
On5UZXh0dXJlTWFwcGVyR0woKQogeworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGRl
bGV0ZSBtX2RhdGE7Cit9CisKK2Jvb2wgVGV4dHVyZU1hcHBlckdMOjptYWtlQ29udGV4dEN1cnJl
bnQoKQoreworI2lmIE9TKE1BQ19PU19YKQorICAgIHJldHVybiBhZ2xTZXRDdXJyZW50Q29udGV4
dChkYXRhKCkuYWdsQ29udGV4dCk7CisjZWxpZiBPUyhVTklYKQorICAgIERpc3BsYXkqIGRpc3Bs
YXkgPSBYT3BlbkRpc3BsYXkoMCk7CisgICAgaWYgKCFkaXNwbGF5KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIGdsWE1ha2VDdXJyZW50KGRpc3BsYXksIGRhdGEoKS5nbHhEcmF3
YWJsZSwgZGF0YSgpLmdseENvbnRleHQpOworI2VuZGlmCit9CisKK3ZvaWQgVGV4dHVyZU1hcHBl
ckdMOjpvYnRhaW5DdXJyZW50Q29udGV4dCgpCit7CisjaWYgT1MoTUFDX09TX1gpCisgICAgZGF0
YSgpLmFnbENvbnRleHQgPSBhZ2xHZXRDdXJyZW50Q29udGV4dCgpOworI2VsaWYgT1MoVU5JWCkK
KyAgICBkYXRhKCkuZ2x4RHJhd2FibGUgPSBnbFhHZXRDdXJyZW50RHJhd2FibGUoKTsKKyAgICBk
YXRhKCkuZ2x4Q29udGV4dCA9IGdsWEdldEN1cnJlbnRDb250ZXh0KCk7CisjZW5kaWYKIH0KIAog
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUgKnN1cmZhY2VQ
b2ludGVyKQpAQCAtNTAzLDYgKzU3Miw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiaW5kU3Vy
ZmFjZShCaXRtYXBUZXh0dXJlICpzdXJmYWNlUG9pbnRlcikKIAogICAgIGlmICghc3VyZmFjZSkK
ICAgICAgICAgcmV0dXJuOworCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gY3Jl
YXRlUHJvamVjdGlvbk1hdHJpeChzdXJmYWNlLT5zaXplKCksIGZhbHNlKTsKICAgICBtYXRyaXgu
dHJhbnNsYXRlKC1zdXJmYWNlLT5vZmZzZXQoKS54KCksIC1zdXJmYWNlLT5vZmZzZXQoKS55KCkp
OwogCkBAIC01MjAsNyArNTkwLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJpbmRTdXJmYWNl
KEJpdG1hcFRleHR1cmUgKnN1cmZhY2VQb2ludGVyKQogICAgIH0KIAogICAgIEdMX0NNRChnbFZp
ZXdwb3J0KDAsIDAsIHN1cmZhY2UtPnNpemUoKS53aWR0aCgpLCBzdXJmYWNlLT5zaXplKCkuaGVp
Z2h0KCkpKQotICAgIG1fcHJvamVjdGlvbk1hdHJpeCA9IG1hdHJpeDsKKyAgICBkYXRhKCkucHJv
amVjdGlvbk1hdHJpeCA9IG1hdHJpeDsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OnNldENs
aXAoY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTU0MCw4ICs2MTAsNyBAQCB2b2lkIFRleHR1cmVN
YXBwZXJHTDo6cGFpbnRUb1RhcmdldChjb25zdCBCaXRtYXBUZXh0dXJlJiBhU3VyZmFjZSwgY29u
c3QgSW50U2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgc3VyZmFjZS5tX2FjdHVhbFNpemUu
d2lkdGgoKSwgMCwgMCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHN1cmZhY2UubV9h
Y3R1YWxTaXplLmhlaWdodCgpLCAwLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwg
MSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1cmZhY2Uub2Zmc2V0KCkueCgpLCBzdXJm
YWNlLm9mZnNldCgpLnkoKSwgMCwgMQotICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN1cmZhY2Uub2Zmc2V0KCkueCgpLCBzdXJmYWNlLm9mZnNldCgpLnkoKSwgMCwg
MSkKICAgICAgICAgICAgICk7CiAKICAgICBjb25zdCBHTGZsb2F0IG00W10gPSB7CkBAIC01NTcs
MTggKzYyNiwxOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6cGFpbnRUb1RhcmdldChjb25zdCBC
aXRtYXBUZXh0dXJlJiBhU3VyZmFjZSwgY29uc3QgSW50U2l6ZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDF9OwogCiAgICAgLy8gV2UgYWxyZWFkeSBibGVu
ZGVkIHRoZSBhbHBoYSBpbjsgdGhlIHJlc3VsdCBpcyBwcmVtdWx0aXBsaWVkLgotICAgIEdMX0NN
RChnbFVzZVByb2dyYW0oZ1NoYWRlckluZm8ucHJvZ3JhbXNbVGV4bWFwU2hhZGVySW5mbzo6VGFy
Z2V0UHJvZ3JhbV0uaWQpKQorICAgIEdMX0NNRChnbFVzZVByb2dyYW0oZGF0YSgpLnNoYWRlcklu
Zm8ucHJvZ3JhbXNbVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6VGFyZ2V0UHJvZ3Jh
bV0uaWQpKQogICAgIEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCkp
CiAgICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwgc3VyZmFjZVNpemUud2lkdGgoKSwgc3VyZmFj
ZVNpemUuaGVpZ2h0KCkpKQogICAgIEdMX0NNRChnbERpc2FibGUoR0xfU1RFTkNJTF9URVNUKSkK
LSAgICBjb25zdCBUZXhtYXBTaGFkZXJJbmZvOjpQcm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8gPSBn
U2hhZGVySW5mby5wcm9ncmFtc1tUZXhtYXBTaGFkZXJJbmZvOjpUYXJnZXRQcm9ncmFtXTsKLSAg
ICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpP
cGFjaXR5VmFyaWFibGVdLCBvcGFjaXR5KSkKKyAgICBjb25zdCBUZXh0dXJlTWFwcGVyR0xEYXRh
OjpTaGFkZXJJbmZvOjpQcm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8gPSBkYXRhKCkuc2hhZGVySW5m
by5wcm9ncmFtc1tUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpUYXJnZXRQcm9ncmFt
XTsKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVy
R0xEYXRhOjpTaGFkZXJJbmZvOjpPcGFjaXR5VmFyaWFibGVdLCBvcGFjaXR5KSkKICAgICBHTF9D
TUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKSkKICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVy
ZShHTF9URVhUVVJFXzJELCBzdXJmYWNlLm1faWQpKQotICAgIEdMX0NNRChnbFVuaWZvcm0xaShw
cm9ncmFtSW5mby52YXJzW1RleG1hcFNoYWRlckluZm86OlNvdXJjZVRleHR1cmVWYXJpYWJsZV0s
IDApKQotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW1JbmZvLnZh
cnNbVGV4bWFwU2hhZGVySW5mbzo6SW5WZXJ0ZXhWYXJpYWJsZV0pKQotICAgIEdMX0NNRChnbFVu
aWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXhtYXBTaGFkZXJJbmZvOjpJbk1hdHJp
eFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00KSkKLSAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4
NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4bWFwU2hhZGVySW5mbzo6SW5Tb3VyY2VNYXRyaXhWYXJp
YWJsZV0sIDEsIEdMX0ZBTFNFLCBtNHNyYykpCisgICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dy
YW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6U291cmNlVGV4dHVy
ZVZhcmlhYmxlXSwgMCkpCisgICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZ0lu
VmVydGV4QXR0cmlidXRlSW5kZXgpKQorICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJv
Z3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpJbk1hdHJpeFZh
cmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00KSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2
KHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6SW5Tb3Vy
Y2VNYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNHNyYykpCiAgICAgR0xfQ01EKGdsQmlu
ZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDApKQogICAgIGNvbnN0IEdMZmxvYXQgdW5pdFJlY3Rb
XSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKICAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQ
b2ludGVyKDAsIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdW5pdFJlY3QpKQpAQCAtNTc3LDE1
ICs2NDYsMTcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OnBhaW50VG9UYXJnZXQoY29uc3QgQml0
bWFwVGV4dHVyZSYgYVN1cmZhY2UsIGNvbnN0IEludFNpemUKICAgICBzZXRDbGlwKHZpc2libGVS
ZWN0KTsKIAogICAgIEdMX0NNRChnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KSkK
LSAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbUluZm8udmFyc1tU
ZXhtYXBTaGFkZXJJbmZvOjpJblZlcnRleFZhcmlhYmxlXSkpCisgICAgR0xfQ01EKGdsRGlzYWJs
ZVZlcnRleEF0dHJpYkFycmF5KDApKQogICAgIEdMX0NNRChnbFVzZVByb2dyYW0oMCkpCiAgICAg
R0xfQ01EKGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDApKQotICAgIG1fY3VycmVudFBy
b2dyYW0gPSBUZXhtYXBTaGFkZXJJbmZvOjpUYXJnZXRQcm9ncmFtOworICAgIGRhdGEoKS5jdXJy
ZW50UHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86OlRhcmdldFByb2dy
YW07CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlckdMOjpjcmVh
dGVUZXh0dXJlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJpdG1hcFRleHR1cmVHTCgp
KTsKKyAgICBCaXRtYXBUZXh0dXJlR0wqIHRleHR1cmUgPSBuZXcgQml0bWFwVGV4dHVyZUdMKCk7
CisgICAgdGV4dHVyZS0+bV90ZXh0dXJlTWFwcGVyID0gdGhpczsKKyAgICByZXR1cm4gYWRvcHRS
ZWYodGV4dHVyZSk7CiB9CiAKIH07CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCmluZGV4IDdhMTJjNzIuLmQwNTYwMWQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCkBA
IC0yOSwxMSArMjksMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBUZXh0dXJl
TWFwcGVyR0xEYXRhOworCiAvLyBBbiBPcGVuR0wtRVMyIGltcGxlbWVudGF0aW9uIG9mIFRleHR1
cmVNYXBwZXIuCiBjbGFzcyBUZXh0dXJlTWFwcGVyR0wgOiBwdWJsaWMgVGV4dHVyZU1hcHBlciB7
CiBwdWJsaWM6Ci0gICAgVGV4dHVyZU1hcHBlckdMKEdyYXBoaWNzQ29udGV4dCogZ2MpOwotICAg
IHZpcnR1YWwgflRleHR1cmVNYXBwZXJHTCgpIHt9CisgICAgVGV4dHVyZU1hcHBlckdMKCk7Cisg
ICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlckdMKCk7CiAKICAgICAvLyByZWltcHMgZnJvbSBUZXh0
dXJlTWFwcGVyCiAgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1
cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVy
ZSk7CkBAIC00MywxMSArNDUsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBhbGxvd1N1
cmZhY2VGb3JSb290KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CiAgICAgdmlydHVhbCBjb25zdCBj
aGFyKiB0eXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFudXAoKTsKKyAgICB2b2lk
IG9idGFpbkN1cnJlbnRDb250ZXh0KCk7CisgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
IAogcHJpdmF0ZToKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3Byb2plY3Rpb25NYXRyaXg7
Ci0gICAgaW50IG1fY3VycmVudFByb2dyYW07CisgICAgaW5saW5lIFRleHR1cmVNYXBwZXJHTERh
dGEmIGRhdGEoKSB7IHJldHVybiAqbV9kYXRhOyB9CisgICAgVGV4dHVyZU1hcHBlckdMRGF0YSog
bV9kYXRhOworICAgIGZyaWVuZCBjbGFzcyBCaXRtYXBUZXh0dXJlR0w7CiB9OwogCiAvLyBBbiBv
ZmZzY3JlZW4gYnVmZmVyIHRvIGJlIHJlbmRlcmVkIGJ5IHNvZnR3YXJlLgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwCmluZGV4IDkyMzZkYWUu
LjFjM2ExYzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVy
ZU1hcHBlclF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVN
YXBwZXJRdC5jcHAKQEAgLTU0LDggKzU0LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBk
cmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0
YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFj
aXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7CiAgICAgdmlydHVhbCB2b2lk
IGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRDbGlwKGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250
ZXh0KEdyYXBoaWNzQ29udGV4dCopOwogICAgIHZpcnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JS
b290KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBUZXh0dXJlTWFwcGVyUXQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0KTsKKyAgICBUZXh0dXJlTWFwcGVyUXQoKTsKICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIHR5cGUoKSBjb25zdCB7IHJldHVybiAiVGV4dHVyZU1hcHBlclF0IjsgfQog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CiAK
QEAgLTEyMywxMiArMTI0LDE1IEBAIHZvaWQgVGV4dHVyZU1hcHBlclF0OjpzZXRDbGlwKGNvbnN0
IEludFJlY3QmIHJlY3QpCiAgICAgIHBhaW50ZXItPnNldENsaXBSZWN0KHJlY3QpOwogfQogCi1U
ZXh0dXJlTWFwcGVyUXQ6OlRleHR1cmVNYXBwZXJRdChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQp
Ci0gICAgOiBUZXh0dXJlTWFwcGVyKGNvbnRleHQpCi0gICAgLCBtX3BhaW50ZXIoY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCkpCi0gICAgLCBtX2N1cnJlbnRTdXJmYWNlKDApCitUZXh0dXJlTWFw
cGVyUXQ6OlRleHR1cmVNYXBwZXJRdCgpCisgICAgOiBtX2N1cnJlbnRTdXJmYWNlKDApCiB7Ci0g
ICAgVGV4dHVyZU1hcHBlclF0Ojppbml0aWFsaXplKG1fcGFpbnRlcik7Cit9CisKK3ZvaWQgVGV4
dHVyZU1hcHBlclF0OjpzZXRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
KQoreworICAgIG1fcGFpbnRlciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIGlu
aXRpYWxpemUobV9wYWludGVyKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyUXQ6OmJpbmRTdXJm
YWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpCkBAIC0xODEsMTAgKzE4NSwxMiBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJRdDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwg
Y29uc3QgSW50UmVjdCYgdAogUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyPiBUZXh0dXJlTWFwcGVy
OjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQogewogI2lmZGVmIFFUX09QRU5HTF9M
SUIKLSAgICBpZiAoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnBhaW50RW5naW5lKCktPnR5
cGUoKSA9PSBRUGFpbnRFbmdpbmU6Ok9wZW5HTDIpCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVGV4dHVyZU1hcHBlckdMKGNvbnRleHQpKTsKKyAgICBpZiAoY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCktPnBhaW50RW5naW5lKCktPnR5cGUoKSA9PSBRUGFpbnRFbmdpbmU6Ok9wZW5HTDIp
IHsKKyAgICAgICAgVGV4dHVyZU1hcHBlckdMKiB0ZXhtYXBHTCA9IG5ldyBUZXh0dXJlTWFwcGVy
R0w7CisgICAgICAgIHJldHVybiBhZG9wdFJlZih0ZXhtYXBHTCk7CisgICAgfQogI2VuZGlmCi0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyUXQoY29udGV4dCkpOworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclF0KTsKIH0KIAogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
ci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlci5jcHAKaW5kZXggMDU3YmNmYy4uNTRlNmM3YSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3Bw
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyLmNwcApAQCAtNDAsNyArNDAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdHJ1
Y3QgVGV4bWFwUGFpbnRPcHRpb25zIHsKICAgICBCaXRtYXBUZXh0dXJlKiBzdXJmYWNlOwogICAg
IFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXI7Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0OwogICAgIFRleHR1cmVNYXBwZXJOb2RlKiByb290TGF5ZXI7CiAgICAgZmxvYXQgb3BhY2l0
eTsKICAgICBJbnRSZWN0IHNjaXNzb3JSZWN0OwpAQCAtMjE0LDcgKzIxMyw3IEBAIHB1YmxpYzoK
ICAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KIAogICAgIHZpcnR1
YWwgdm9pZCBzZXRQbGF0Zm9ybUxheWVyQ2xpZW50KFRleHR1cmVNYXBwZXJMYXllckNsaWVudCop
OwotICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRTaXpl
JiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UmVjdCYgZXhwb3NlZFJlY3Qs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHkpOwor
ICAgIHZpcnR1YWwgdm9pZCBwYWludChUZXh0dXJlTWFwcGVyKiwgY29uc3QgVGV4dHVyZU1hcHBl
ckNvbnRlbnRMYXllcjo6UGFpbnRPcHRpb25zJik7CiAKICAgICBzdGF0aWMgVGV4dHVyZU1hcHBl
ck5vZGUqIHRvVGV4dHVyZU1hcHBlck5vZGUoR3JhcGhpY3NMYXllciopOwogcHVibGljOgpAQCAt
Mzk4LDcgKzM5Nyw3IEBAIGJvb2wgVGV4dHVyZU1hcHBlck5vZGU6Omhhc1N1cmZhY2VEZXNjZW5k
YW50cygpIGNvbnN0CiAKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBJbnRSZWN0JiB0
YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0JiBleHBvc2VkUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSkKK3ZvaWQgVGV4dHVyZU1hcHBlck5v
ZGU6OnBhaW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IFRleHR1cmVNYXBw
ZXJDb250ZW50TGF5ZXI6OlBhaW50T3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBBU1NFUlQobV9s
YXllclR5cGUgPT0gUm9vdExheWVyKTsKICAgICBpZiAobV9zaXplLmlzRW1wdHkoKSkKQEAgLTQw
OSw4ICs0MDgsNiBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbgogICAgICgiW1RleHR1cmVNYXBw
ZXJdIFJvb3RQYWludCEhXG4iKTsKICNlbmRpZgogCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXI+
IHRleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoY29udGV4dCk7Ci0KICAgICBp
ZiAodGV4dHVyZU1hcHBlci0+dHlwZSgpICE9IG1fbGFzdFRleHR1cmVNYXBwZXJUeXBlKQogICAg
ICAgICBnVGV4dHVyZU1hcHBlckNhY2hlLm1fZGF0YS5jbGVhcigpOwogCkBAIC00MTgsMTYgKzQx
NSwxNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbgogICAgIFRleG1hcFBhaW50T3B0aW9ucyBv
cHQ7CiAgICAgb3B0Lm9wYWNpdHkgPSAxOwogICAgIG9wdC5yb290TGF5ZXIgPSB0aGlzOwotICAg
IG9wdC5zY2lzc29yUmVjdCA9IHRhcmdldFJlY3Q7Ci0gICAgb3B0LnZpc2libGVSZWN0ID0gZXhw
b3NlZFJlY3Q7Ci0gICAgb3B0LnRleHR1cmVNYXBwZXIgPSB0ZXh0dXJlTWFwcGVyLmdldCgpOwot
ICAgIG9wdC5jb250ZXh0ID0gdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0KCk7CisgICAg
b3B0LnNjaXNzb3JSZWN0ID0gb3B0aW9ucy50YXJnZXRSZWN0OworICAgIG9wdC52aXNpYmxlUmVj
dCA9IG9wdGlvbnMudmlzaWJsZVJlY3Q7CisgICAgb3B0LnRleHR1cmVNYXBwZXIgPSB0ZXh0dXJl
TWFwcGVyOwogICAgIG9wdC5zdXJmYWNlID0gMDsKICAgICBwYWludFJlY3Vyc2l2ZShvcHQpOwog
CiAgICAgaWYgKHRleHR1cmVNYXBwZXItPmFsbG93U3VyZmFjZUZvclJvb3QoKSB8fCBtX3N0YXRl
Lmhhc1N1cmZhY2VEZXNjZW5kYW50cykgewogICAgICAgICB0ZXh0dXJlTWFwcGVyLT5iaW5kU3Vy
ZmFjZSgwKTsKLSAgICAgICAgdGV4dHVyZU1hcHBlci0+cGFpbnRUb1RhcmdldCgqbV9zdXJmYWNl
LmdldCgpLCBzaXplLCB0cmFuc2Zvcm0sIG9wYWNpdHkgKiBtX3N0YXRlLm9wYWNpdHksIHRhcmdl
dFJlY3QpOworICAgICAgICB0ZXh0dXJlTWFwcGVyLT5wYWludFRvVGFyZ2V0KCptX3N1cmZhY2Uu
Z2V0KCksIG9wdGlvbnMudmlld3BvcnRTaXplLCBvcHRpb25zLnRyYW5zZm9ybSwgb3B0aW9ucy5v
cGFjaXR5ICogbV9zdGF0ZS5vcGFjaXR5LCBvcHRpb25zLnRhcmdldFJlY3QpOwogICAgIH0KICAg
ICBnVGV4dHVyZU1hcHBlckNhY2hlLnB1cmdlKCk7CiB9CkBAIC02OTIsMTAgKzY4OCw5IEBAIHZv
aWQgVGV4dHVyZU1hcHBlck5vZGU6OnVwbG9hZFRleHR1cmVGcm9tQ29udGVudChUZXh0dXJlTWFw
cGVyKiB0ZXh0dXJlTWFwcGVyLCBjCiAKICAgICB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBj
b250ZXh0KG1fdGV4dHVyZS0+YmVnaW5QYWludChkaXJ0eVJlY3QpKTsKLSAgICAgICAgaWYgKHRl
eHR1cmVNYXBwZXIgJiYgdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0KCkpIHsKLSAgICAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dCogb3JpZ2luYWxDb250ZXh0ID0gdGV4dHVyZU1hcHBlci0+
Z3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgICAgICAgICBjb250ZXh0LnNldEltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkob3JpZ2luYWxDb250ZXh0LT5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkp
OwotICAgICAgICAgICAgY29udGV4dC5zZXRUZXh0RHJhd2luZ01vZGUob3JpZ2luYWxDb250ZXh0
LT50ZXh0RHJhd2luZ01vZGUoKSk7CisgICAgICAgIGlmICh0ZXh0dXJlTWFwcGVyKSB7CisgICAg
ICAgICAgICBjb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkodGV4dHVyZU1hcHBl
ci0+aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0
VGV4dERyYXdpbmdNb2RlKHRleHR1cmVNYXBwZXItPnRleHREcmF3aW5nTW9kZSgpKTsKICAgICAg
ICAgfQogICAgICAgICBtX2xheWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0
LCBkaXJ0eVJlY3QpOwogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXIuaAppbmRleCAwM2MxYzZkLi44OTg5OWMwIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCkBAIC05NywyMCAr
OTcsMzAgQEAgcHVibGljOgogICAgICAgICBkcmF3VGV4dHVyZSh0ZXh0dXJlLCBJbnRSZWN0KDAs
IDAsIHRleHR1cmUuY29udGVudFNpemUoKS53aWR0aCgpLCB0ZXh0dXJlLmNvbnRlbnRTaXplKCku
aGVpZ2h0KCkpLCBtYXRyaXgsIG9wYWNpdHksIDApOwogICAgIH0KIAorICAgIHZpcnR1YWwgdm9p
ZCBzZXRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KikgeyB9CiAgICAgdmlydHVhbCB2
b2lkIHNldENsaXAoY29uc3QgSW50UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dT
dXJmYWNlRm9yUm9vdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpID0gMDsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5
cGUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFudXAoKSB7fQogCi0gICAgR3Jh
cGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fZ2M7Ci0gICAgfQorICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJ
bnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7IG1faW50ZXJwb2xhdGlvblF1YWxpdHkgPSBx
dWFsaXR5OyB9CisgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoaW50IG1vZGUpIHsgbV90ZXh0
RHJhd2luZ01vZGUgPSBtb2RlOyB9CisKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcnBvbGF0aW9uUXVhbGl0
eTsgfQorICAgIGludCB0ZXh0RHJhd2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3RleHREcmF3
aW5nTW9kZTsgfQorCisgICAgdm9pZCBzZXRWaWV3cG9ydFNpemUoY29uc3QgSW50U2l6ZSYpOwog
CiBwcm90ZWN0ZWQ6Ci0gICAgVGV4dHVyZU1hcHBlcihHcmFwaGljc0NvbnRleHQqIGdjKSA6IG1f
Z2MoZ2MpIHt9Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBtX2djOworICAgIFRleHR1cmVNYXBwZXIo
KQorICAgICAgICA6IG1faW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvbkRlZmF1bHQp
CisgICAgICAgICwgbV90ZXh0RHJhd2luZ01vZGUoY1RleHRGaWxsKQorICAgIHt9CisKK3ByaXZh
dGU6CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgbV9pbnRlcnBvbGF0aW9uUXVhbGl0eTsKKyAg
ICBpbnQgbV90ZXh0RHJhd2luZ01vZGU7CiB9OwogCiB9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
LmgKaW5kZXggMjNlOWZjOS4uYTE1NjgxYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCkBA
IC0yNSw2ICsyNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBJbnRTaXplOworY2xhc3MgVGV4dHVyZU1hcHBlcjsK
IGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OwogCiAKQEAgLTUwLDEwICs1MSwxNyBAQCBwdWJs
aWM6CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIgOiBwdWJsaWMgVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXIgewogcHVibGljOgorICAgIHN0cnVjdCBQYWludE9wdGlvbnMgewor
ICAgICAgICBJbnRSZWN0IHZpc2libGVSZWN0OworICAgICAgICBJbnRSZWN0IHRhcmdldFJlY3Q7
CisgICAgICAgIEludFNpemUgdmlld3BvcnRTaXplOworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB0cmFuc2Zvcm07CisgICAgICAgIGZsb2F0IG9wYWNpdHk7CisgICAgfTsKKwogICAgIHZp
cnR1YWwgdm9pZCBzZXRQbGF0Zm9ybUxheWVyQ2xpZW50KFRleHR1cmVNYXBwZXJMYXllckNsaWVu
dCopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
SW50U2l6ZSYsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFJlY3QmIGV4cG9z
ZWRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFj
aXR5KSB7fQorICAgIHZpcnR1YWwgdm9pZCBwYWludChUZXh0dXJlTWFwcGVyKiwgY29uc3QgUGFp
bnRPcHRpb25zJikge30KICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgY2xlYW51cFRleHR1cmVNYXBwZXIoKSB7fQogICAgIHZpcnR1YWwgVHlw
ZSBsYXllclR5cGUoKSBjb25zdCB7IHJldHVybiBDb250ZW50TGF5ZXI7IH0KIH07CiAKZGlmZiAt
LWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcCBiL1dlYktpdC9xdC9BcGkvcXdlYmZy
YW1lLmNwcAppbmRleCAzOWU3NGQ5Li5mZTY1YmU2IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBp
L3F3ZWJmcmFtZS5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCkBAIC05Nyw2
ICs5Nyw3IEBACiAjaW5jbHVkZSAicnVudGltZV9yb290LmgiCiAjZW5kaWYKICNpZiBVU0UoVEVY
VFVSRV9NQVBQRVIpCisjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRl
ICJ0ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKICNlbmRpZgogI2luY2x1ZGUg
Ind0Zi9IYXNoTWFwLmgiCkBAIC0yOTQsMTkgKzI5NSw0MSBAQCB2b2lkIFFXZWJGcmFtZVByaXZh
dGU6OnJlbmRlckZyb21UaWxlZEJhY2tpbmdTdG9yZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbgogCiAgICAgICAgIHBhaW50ZXItPnJlc3RvcmUoKTsKICAgICB9Ci0jaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgLy8gVGV4dHVy
ZU1hcHBlciBtaWdodCB1c2UgcmF3IE9wZW5HTCBvciBzb21lIG90aGVyIGJhY2tlbmQgdGhhdCBy
ZXF1aXJlcyBuYXRpdmUgcGFpbnRpbmcuIE9uIHJhc3RlciB0aGlzIGRvZXNuJ3QgaGF2ZSBhbnkg
ZWZmZWN0LgotICAgIGlmIChyb290R3JhcGhpY3NMYXllcikgewotICAgICAgICBwYWludGVyLT5i
ZWdpbk5hdGl2ZVBhaW50aW5nKCk7Ci0gICAgICAgIHJvb3RHcmFwaGljc0xheWVyLT5wYWludChj
b250ZXh0LCB2aWV3LT5zaXplKCksIHZpZXctPmZyYW1lUmVjdCgpLCBJbnRSZWN0KGNsaXAuYm91
bmRpbmdSZWN0KCkpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBwYWludGVyLT5vcGFjaXR5KCkp
OwotICAgICAgICBwYWludGVyLT5lbmROYXRpdmVQYWludGluZygpOwotICAgIH0KIAorI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIHJl
bmRlckNvbXBvc2l0ZWRMYXllcnMoY29udGV4dCwgSW50UmVjdChjbGlwLmJvdW5kaW5nUmVjdCgp
KSk7CiAgICAgcmVuZGVyUmVsYXRpdmVDb29yZHMoY29udGV4dCwgKFFXZWJGcmFtZTo6UmVuZGVy
TGF5ZXIpKFFXZWJGcmFtZTo6U2Nyb2xsQmFyTGF5ZXIgfCBRV2ViRnJhbWU6OlBhbkljb25MYXll
ciksIGNsaXApOwogI2VuZGlmCiB9CiAjZW5kaWYKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQordm9pZCBRV2ViRnJhbWVQcml2YXRlOjpy
ZW5kZXJDb21wb3NpdGVkTGF5ZXJzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50
UmVjdCYgY2xpcCkKK3sKKyAgICBpZiAoIXJvb3RHcmFwaGljc0xheWVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoIXRleHR1cmVNYXBwZXIpCisgICAgICAgIHRleHR1cmVNYXBwZXIgPSBU
ZXh0dXJlTWFwcGVyOjpjcmVhdGUoY29udGV4dCk7CisKKyAgICB0ZXh0dXJlTWFwcGVyLT5zZXRH
cmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgdGV4dHVyZU1hcHBlci0+c2V0SW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LT5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpOwor
ICAgIHRleHR1cmVNYXBwZXItPnNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LT50ZXh0RHJhd2lu
Z01vZGUoKSk7CisgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKTsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpOworICAgIHBhaW50ZXIt
PnNhdmUoKTsKKyAgICBwYWludGVyLT5iZWdpbk5hdGl2ZVBhaW50aW5nKCk7CisgICAgVGV4dHVy
ZU1hcHBlckNvbnRlbnRMYXllcjo6UGFpbnRPcHRpb25zIG9wdGlvbnM7CisgICAgb3B0aW9ucy52
aXNpYmxlUmVjdCA9IGNsaXA7CisgICAgb3B0aW9ucy50YXJnZXRSZWN0ID0gdmlldy0+ZnJhbWVS
ZWN0KCk7CisgICAgb3B0aW9ucy52aWV3cG9ydFNpemUgPSB2aWV3LT5zaXplKCk7CisgICAgb3B0
aW9ucy5vcGFjaXR5ID0gcGFpbnRlci0+b3BhY2l0eSgpOworICAgIHJvb3RHcmFwaGljc0xheWVy
LT5wYWludCh0ZXh0dXJlTWFwcGVyLmdldCgpLCBvcHRpb25zKTsKKyAgICBwYWludGVyLT5lbmRO
YXRpdmVQYWludGluZygpOworICAgIHBhaW50ZXItPnJlc3RvcmUoKTsKK30KKyNlbmRpZgorCiB2
b2lkIFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlclJlbGF0aXZlQ29vcmRzKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgUVdlYkZyYW1lOjpSZW5kZXJMYXllciBsYXllciwgY29uc3QgUVJlZ2lvbiYg
Y2xpcCkKIHsKICAgICBpZiAoIWZyYW1lLT52aWV3KCkgfHwgIWZyYW1lLT5jb250ZW50UmVuZGVy
ZXIoKSkKQEAgLTM0OSwxNiArMzcyLDggQEAgdm9pZCBRV2ViRnJhbWVQcml2YXRlOjpyZW5kZXJS
ZWxhdGl2ZUNvb3JkcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFFXZWJGcmFtZToKICAgICAg
ICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKICAgICAgICAgfQogICAgICAgICBwYWludGVyLT5y
ZXN0b3JlKCk7Ci0KICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhU
VVJFX01BUFBFUikKLSAgICAgICAgaWYgKHJvb3RHcmFwaGljc0xheWVyKSB7Ci0gICAgICAgICAg
ICBwYWludGVyLT5zYXZlKCk7Ci0gICAgICAgICAgICBwYWludGVyLT5iZWdpbk5hdGl2ZVBhaW50
aW5nKCk7Ci0gICAgICAgICAgICByb290R3JhcGhpY3NMYXllci0+cGFpbnQoY29udGV4dCwgdmll
dy0+c2l6ZSgpLCB2aWV3LT5mcmFtZVJlY3QoKSwgSW50UmVjdChjbGlwLmJvdW5kaW5nUmVjdCgp
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCgpLCBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+b3BhY2l0eSgpKTsKLSAgICAgICAg
ICAgIHBhaW50ZXItPmVuZE5hdGl2ZVBhaW50aW5nKCk7Ci0gICAgICAgICAgICBwYWludGVyLT5y
ZXN0b3JlKCk7Ci0gICAgICAgIH0KKyAgICAgICAgcmVuZGVyQ29tcG9zaXRlZExheWVycyhjb250
ZXh0LCBJbnRSZWN0KGNsaXAuYm91bmRpbmdSZWN0KCkpKTsKICNlbmRpZgogICAgIH0KICAgICBp
ZiAobGF5ZXIgJiAoUVdlYkZyYW1lOjpQYW5JY29uTGF5ZXIgfCBRV2ViRnJhbWU6OlNjcm9sbEJh
ckxheWVyKSkgewpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oIGIvV2Vi
S2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oCmluZGV4IDU2NjBiZDEuLjYzNGUyMWIgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJm
cmFtZV9wLmgKQEAgLTMzLDYgKzMzLDEwIEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJWaWV3cG9ydEFyZ3VtZW50cy5oIgogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXIu
aCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRnJhbWVMb2FkZXJD
bGllbnRRdDsKICAgICBjbGFzcyBGcmFtZVZpZXc7CkBAIC05NCw2ICs5OCw5IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHJlbmRlckZyb21UaWxlZEJhY2tpbmdTdG9yZShXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBRUmVnaW9uJiBjbGlwKTsKICNlbmRpZgogCisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgdm9pZCByZW5kZXJD
b21wb3NpdGVkTGF5ZXJzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgY2xpcCk7CisjZW5kaWYKICAgICBRV2ViRnJhbWUgKnE7CiAgICAg
UXQ6OlNjcm9sbEJhclBvbGljeSBob3Jpem9udGFsU2Nyb2xsQmFyUG9saWN5OwogICAgIFF0OjpT
Y3JvbGxCYXJQb2xpY3kgdmVydGljYWxTY3JvbGxCYXJQb2xpY3k7CkBAIC0xMDYsNiArMTEzLDcg
QEAgcHVibGljOgogICAgIGludCBtYXJnaW5IZWlnaHQ7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAgICAgV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckNvbnRlbnRMYXllciogcm9vdEdyYXBoaWNzTGF5ZXI7CisgICAgUmVmUHRyPFdlYkNvcmU6
OlRleHR1cmVNYXBwZXI+IHRleHR1cmVNYXBwZXI7CiAjZW5kaWYKICAgICBib29sIHpvb21UZXh0
T25seTsKIH07CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvV2ViS2l0L3F0L0No
YW5nZUxvZwppbmRleCAzMjBmYzg4Li5lYjhlM2NlIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQ2hh
bmdlTG9nCisrKyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0x
MS0wMiAgTm9hbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCisKKyAgICAgICAgU29t
ZSByZWZhY3RvciBmb3IgdGV4bWFwIHRvIGVuYWJsZSBXZWJLaXQyOiByZW1vdmUgZ2xvYmFscywg
YW5kIGFsbG93IFRleHR1cmVNYXBwZXIgdG8gZXhpc3Qgd2l0aG91dCBhIEdyYXBoaWNzQ29udGV4
dC4KKyAgICAgICAgVGhpcyB3aWxsIGFsbG93IHJlbmRlcmluZyB0aGUgVGV4dHVyZU1hcHBlck5v
ZGUgdHJlZSB3aXRob3V0IGFuIGFjdGl2ZSBRUGFpbnRlciwgaW50byB0aGUgY3VycmVudCBHTCBj
b250ZXh0LgorICAgICAgICBNb3N0IG9mIHRoZSBjaGFuZ2VzIHNpbXBseSBtb3ZlIHRoZSBnbG9i
YXMgaW4gVGV4dHVyZU1hcHBlckdMIGludG8gbWVtYmVycyBvZiB0aGF0IGNsYXNzLgorCisgICAg
ICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcwNzAKKwor
ICAgICAgICAqIEFwaS9xd2ViZnJhbWUuY3BwOgorICAgICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6
cmVuZGVyRnJvbVRpbGVkQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFFXZWJGcmFtZVByaXZhdGU6
OnJlbmRlckNvbXBvc2l0ZWRMYXllcnMpOgorICAgICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6cmVu
ZGVyUmVsYXRpdmVDb29yZHMpOgorICAgICAgICAqIEFwaS9xd2ViZnJhbWVfcC5oOgorCiAyMDEw
LTExLTAxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73160</attachid>
            <date>2010-11-05 20:30:57 -0700</date>
            <delta_ts>2010-11-10 14:03:54 -0800</delta_ts>
            <desc>Prepare TextureMapper to be thread safe</desc>
            <filename>patch-47070-thread.diff</filename>
            <type>text/plain</type>
            <size>117649</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1ZTNjZGNjLi41ZTI4Mzg0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMTEt
MDUgIE5vYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4
dHVyZSBtYXBwZXIgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcwNzAKKworICAgICAgICBBZGRlZCBhIHRlc3Qg
dGhhdCBpbmNsdWRlcyBzZXZlcmFsIGNvbXBvc2l0ZWQgbGF5ZXJzLCBjb250YWluaW5nIHBpeGVs
IGRhdGEgdGhhdCdzIGxhcmdlcgorICAgICAgICB0aGFuIDI0TUIsIHdoaWNoIGlzIHRoZSBkZWZh
dWx0IHZhbHVlIGZvciBUZXh0dXJlTWFwcGVyJ3MgY2FjaGUuIFRoaXMgdGVzdHMgdGhlIHZpZGVv
IG1lbW9yeQorICAgICAgICBjZWlsaW5nIGZ1bmN0aW9uYWxpdHkgb2YgVGV4dHVyZU1hcHBlciwg
YXMgcHVyZ2luZyB0aGF0IGNhY2hlIHdvdWxkIGtpY2sgaW4gd2hlIHJ1bm5pbmcgdGhpcyB0ZXN0
LgorCisgICAgICAgICogY29tcG9zaXRpbmcvbGF5ZXItY3JlYXRpb24vbWFueS1sYXllcnMuaHRt
bDogQWRkZWQuCisKIDIwMTAtMTEtMDUgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2NvbXBvc2l0aW5nL2xheWVyLWNyZWF0aW9uL21hbnktbGF5ZXJzLmh0bWwgYi9MYXlvdXRU
ZXN0cy9jb21wb3NpdGluZy9sYXllci1jcmVhdGlvbi9tYW55LWxheWVycy5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MmU4ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9jb21wb3NpdGluZy9sYXllci1jcmVhdGlvbi9tYW55LWxheWVycy5odG1sCkBA
IC0wLDAgKzEsODEgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0
LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9v
c2UuZHRkIj4KKworPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+CisgIDxtZXRhIGh0dHAtZXF1aXY9
IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKyAgPHRp
dGxlPnVudGl0bGVkPC90aXRsZT4KKyAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2Ny
ZWVuIj4KKworICAgIC50aWxlIHsKKyAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0
ZVooMCk7CisgICAgICAgIHdpZHRoOiAxMDI0cHg7CisgICAgICAgIGhlaWdodDogMTAyNHB4Owor
ICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsKKyAgICAgICAgcG9zaXRpb246IGFic29s
dXRlOworICAgICAgICBvcGFjaXR5OiAwLjE7CisgICAgfQorCisgICAgI3JlZCB7CisgICAgICAg
IGJhY2tncm91bmQtY29sb3I6IHJlZDsKKyAgICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAg
ICAgICBsZWZ0OiAwcHg7CisgICAgICAgIHRvcDogMHB4OworICAgICAgICB3aWR0aDogODAwcHg7
CisgICAgICAgIGhlaWdodDogNjAwcHg7CisgICAgfQorCisgICAgI2NvbnRhaW5lciB0ZCB7Cisg
ICAgICAgIHdpZHRoOiA1MHB4OworICAgIH0KKworICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+
CisgICAgPGRpdiBpZD0idGVzdGVyIj4KKyAgICA8L2Rpdj4KKyAgICA8dGFibGUgaWQ9ImNvbnRh
aW5lciI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICA8
ZGl2IGNsYXNzPSJ0aWxlIj4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+Cisg
ICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGlsZSI+CisgICAgICAgICAgICA8L3RkPgorICAg
ICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbGUiPgorICAgICAg
ICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNz
PSJ0aWxlIj4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAg
ICAgICAgPGRpdiBjbGFzcz0idGlsZSI+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAg
PHRkPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbGUiPgorICAgICAgICAgICAgPC90
ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlIj4K
KyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgPGRp
diBjbGFzcz0idGlsZSI+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAg
ICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbGUiPgorICAgICAgICAgICAgPC90ZD4KKyAgICAg
ICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlIj4KKyAgICAgICAg
ICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0i
dGlsZSI+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAg
ICAgIDxkaXYgY2xhc3M9InRpbGUiPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0
ZD4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlIj4KKyAgICAgICAgICAgIDwvdGQ+
CisgICAgICAgIDwvdHI+CisgICAgPC90YWJsZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDY5MGJkZi4u
Yzg1MTZlZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAxMC0xMS0wNSAgTm9hbSBSb3NlbnRoYWwgIDxub2Ft
LnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgW1RleG1hcF0gW1F0XSBUZXh0dXJlIG1hcHBlciBpbml0aWFsIGltcGxl
bWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00NzA3MAorCisgICAgICAgIE1ha2UgdGhlIG5lY2Vzc2FyeSBjaGFuZ2VzIGluIFRleHR1cmVN
YXBwZXJOb2RlIGluIHByZXBhcmF0aW9uIG9mIG1ha2luZyBpdCBwb3NzaWJsZSB0byBwYWludCBp
dAorICAgICAgICBmcm9tIGEgZGlmZmVyZW50IHRocmVhZC4KKyAgICAgICAgVGhlIG1haW4gcHJv
YmxlbWF0aWMgcGFydCB3YXMgdGhlIGNhY2hlLCB3aGljaCBtYWRlIGl0IHNvIHRoYXQgdGV4dHVy
ZXMgY2FuIGJlY29tZSBpbnZhbGlkIGFuZCBoYXZlIHRvCisgICAgICAgIGJlIHJlcmVuZGVyZWQg
ZnJvbSBjb250ZW50IGR1cmluZyBwYWludC4gVGhpcyBpcyBzb2x2ZWQgaGVyZSBieSBjcmVhdGlu
ZyBhIHBhY2svdW5wYWNrIGZ1bmN0aW9uIGZvcgorICAgICAgICB0ZXh0dXJlcywgd2hpY2ggbGV0
cyBhIHRleHR1cmUgYXJjaGl2ZSBpdHMgZGF0YSBhd2F5IGZyb20gdmlkZW8gbWVtb3J5LCBvciBk
byB3aGF0ZXZlciB0aGUgcGxhdGZvcm0KKyAgICAgICAgdGhpbmtzIGlzIHJpZ2h0IGZvciBmcmVl
aW5nIG1lbW9yeSB3aXRob3V0IG5lZWRpbmcgdG8gcmUtcmVuZGVyIGFnYWluIGZyb20gY29udGVu
dCAod2hpY2ggY2Fubm90IGJlCisgICAgICAgIG1hZGUgdGhyZWFkIHNhZmUpLgorCisgICAgICAg
IEFmdGVyIHRoaXMgY2hhbmdlLCBUZXh0dXJlTWFwcGVyTm9kZSBtb3ZlZCB0byBpdHMgb3duIGZp
bGUsIGFuZCBoYXMgMiBlbnRyeSBwb2ludHM6IHBhaW50IGFuZCBzeW5jQ29tcG9zaXRpbmdTdGF0
ZS4KKyAgICAgICAgVGhlIGlkZWEgaXMgdGhhdCBzeW5jQ29tcG9zaXRpbmdTdGF0ZSBoYXMgdG8g
YmUgY2FsbGVkIGluIHRoZSBVSSB0aHJlYWQsIHBhaW50IGNhbiBiZSBjYWxsZWQgZnJvbSBhIGRp
ZmZlcmVudAorICAgICAgICB0aHJlYWQsIGFuZCB0aGV5IHNob3VsZCBibG9jayBlYWNoIG90aGVy
LgorCisgICAgICAgIFRoZSBuZXcgdGVzdCB0ZXN0cyB0aGUgY2FjaGUgY29kZS1wYXRoLCB0byBz
aG93IHRoYXQgdGhlIHBhY2svdW5wYWNrIHRlY2huaXF1ZSB3b3JrcyBmb3IgY2FzZXMgd2hlcmUg
aXQKKyAgICAgICAga2lja3MgaW4uCisKKworICAgICAgICBUZXN0OiBjb21wb3NpdGluZy9sYXll
ci1jcmVhdGlvbi9tYW55LWxheWVycy5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6fkJpdG1hcFRleHR1cmVHTCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OkJpdG1hcFRleHR1cmVHTCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmg6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
VGV4dHVyZU1hcHBlclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVRdDo6
cGFjayk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlUXQ6OnVucGFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwVGV4dHVyZVF0OjpCaXRtYXBUZXh0dXJlUXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5oOiBBZGRlZC4KKwogMjAxMC0xMS0wNSAgQWRhbSBC
YXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2Vp
ZGVsLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5w
cm8KaW5kZXggMThmNDBjNC4uNGY3NzQwYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBy
bworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0zODU4LDExICszODU4LDE1IEBAIHdpbjMy
OiF3aW4zMi1nKysqOmNvbnRhaW5zKFFNQUtFX0hPU1QuYXJjaCwgeDg2XzY0KTp7CiBjb250YWlu
cyhDT05GSUcsIHRleG1hcCkgewogICAgIERFRklORVMgKz0gV1RGX1VTRV9URVhUVVJFX01BUFBF
Uj0xCiAgICAgSEVBREVSUyArPSBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1
cmVNYXBwZXJRdC5oIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlci5oIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJOb2RlLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXIuaAogCiAgICAgU09VUkNFUyArPSBcCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwIFwKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAogCiAgICAgY29u
dGFpbnMoUVRfQ09ORklHLCBvcGVuZ2wpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDQxYmNmYzQuLjAzZjliN2Mg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBw
ZXJHTC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1h
cHBlckdMLmNwcApAQCAtMjI5LDYgKzIyOSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7
CiAgICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRl
bnRzVG9JbWFnZShJbWFnZSopOworICAgIH5CaXRtYXBUZXh0dXJlR0woKSB7IGRlc3Ryb3koKTsg
fQogCiBwcml2YXRlOgogICAgIEdMdWludCBtX2lkOwpAQCAtMjQxLDEzICsyNDIsMTQgQEAgcHJp
dmF0ZToKICAgICBHTHVpbnQgbV9mYm87CiAgICAgSW50U2l6ZSBtX2FjdHVhbFNpemU7CiAgICAg
Ym9vbCBtX3N1cmZhY2VOZWVkc1Jlc2V0OwotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyR0w+IG1f
dGV4dHVyZU1hcHBlcjsKKyAgICBUZXh0dXJlTWFwcGVyR0wqIG1fdGV4dHVyZU1hcHBlcjsKICAg
ICBCaXRtYXBUZXh0dXJlR0woKQogICAgICAgICA6IG1faWQoMCkKICAgICAgICAgLCBtX2ltYWdl
KDApCiAgICAgICAgICwgbV9vcGFxdWUoZmFsc2UpCiAgICAgICAgICwgbV9mYm8oMCkKICAgICAg
ICAgLCBtX3N1cmZhY2VOZWVkc1Jlc2V0KHRydWUpCisgICAgICAgICwgbV90ZXh0dXJlTWFwcGVy
KDApCiAgICAgewogICAgIH0KIApAQCAtMjY1LDYgKzI2Nyw3IEBAIFRleHR1cmVNYXBwZXJHTDo6
VGV4dHVyZU1hcHBlckdMKCkKICAgICA6IG1fZGF0YShuZXcgVGV4dHVyZU1hcHBlckdMRGF0YSkK
IHsKICAgICBzdGF0aWMgYm9vbCBzaGFkZXJzQ29tcGlsZWQgPSBmYWxzZTsKKyAgICBvYnRhaW5D
dXJyZW50Q29udGV4dCgpOwogICAgIGlmIChzaGFkZXJzQ29tcGlsZWQpCiAgICAgICAgIHJldHVy
bjsKICAgICBzaGFkZXJzQ29tcGlsZWQgPSB0cnVlOwpAQCAtNDE2LDEyICs0MTksMTEgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1
cmUsIGNvbnN0IEludFJlY3QmIHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgbWFza1RleHR1cmVHTC0+bV9yZWxhdGl2ZVNpemUuaGVpZ2h0KCksIDAsIDAsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDF9OwotICAgICAg
ICBnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xEYXRh
OjpTaGFkZXJJbmZvOjpJbk1hc2tNYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNG1hc2sp
OworICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4
dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6SW5NYXNrTWF0cml4VmFyaWFibGVdLCAxLCBH
TF9GQUxTRSwgbTRtYXNrKSk7CiAgICAgICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtSW5m
by52YXJzW1RleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86Ok1hc2tUZXh0dXJlVmFyaWFi
bGVdLCAxKSkKICAgICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpCiAg
ICAgfQogCi0KICAgICBpZiAodGV4dHVyZUdMLm1fb3BhcXVlICYmIG9wYWNpdHkgPiAwLjk5ICYm
ICFtYXNrVGV4dHVyZSkKICAgICAgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9CTEVORCkpCiAgICAg
ZWxzZSB7CkBAIC00MzIsNyArNDM0LDYgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0
dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHQKICAgICBH
TF9DTUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpCiB9CiAKLQogY29uc3Qg
Y2hhciogVGV4dHVyZU1hcHBlckdMOjp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gIk9wZW5H
TCI7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJl
TWFwcGVyR0wuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBw
ZXJHTC5oCmluZGV4IGQwNTYwMWQuLjgwMzVhYmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCkBAIC00Nyw2ICs0NywxMCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiB0eXBlKCkgY29uc3Q7CiAgICAgdm9pZCBv
YnRhaW5DdXJyZW50Q29udGV4dCgpOwogICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlckdMPiBjcmVhdGUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG5ldyBUZXh0dXJlTWFwcGVyR0w7CisgICAgfQogCiBwcml2YXRlOgogICAg
IGlubGluZSBUZXh0dXJlTWFwcGVyR0xEYXRhJiBkYXRhKCkgeyByZXR1cm4gKm1fZGF0YTsgfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwCmlu
ZGV4IDFjM2ExYzcuLjZmZGQ3ZGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L1RleHR1cmVNYXBwZXJRdC5jcHAKQEAgLTE4LDcgKzE4LDcgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyUXQuaCIKIAogI2luY2x1ZGUgPFF0Q29yZS9xZGVidWcuaD4KICNpbmNs
dWRlIDxRdEd1aS9xcGFpbnRlbmdpbmUuaD4KQEAgLTMwLDQ2ICszMCw2IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgQml0bWFwVGV4dHVyZVF0IDogcHVibGljIEJpdG1hcFRleHR1
cmUgewotICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVyUXQ7Ci1wdWJsaWM6Ci0gICAgQml0
bWFwVGV4dHVyZVF0KCkge30KLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwotICAgIHZpcnR1
YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZShtX3BpeG1hcC53aWR0aCgp
LCBtX3BpeG1hcC5oZWlnaHQoKSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoY29uc3QgSW50
U2l6ZSYsIGJvb2wgb3BhcXVlKTsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7Ci0gICAgdmlydHVhbCB2b2lk
IGVuZFBhaW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSop
OwotICAgIHZpcnR1YWwgYm9vbCBzYXZlKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0gICAgdmlydHVh
bCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAhbV9waXhtYXAuaXNOdWxsKCk7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgYWxsb3dPZmZsaW5lVGV4dHVyZVVwbG9hZCgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KLSAgICBJbnRSZWN0IHNvdXJjZVJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0
KDAsIDAsIGNvbnRlbnRTaXplKCkud2lkdGgoKSwgY29udGVudFNpemUoKS5oZWlnaHQoKSk7IH0K
LXByaXZhdGU6Ci0gICAgUVBhaW50ZXIgbV9wYWludGVyOwotICAgIFFQaXhtYXAgbV9waXhtYXA7
Ci19OwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyUXQgOiBwdWJsaWMgVGV4dHVyZU1hcHBlciB7Ci1w
dWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUm
IHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tU
ZXh0dXJlKTsKLSAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3Vy
ZmFjZSk7Ci0gICAgdmlydHVhbCB2b2lkIHNldENsaXAoY29uc3QgSW50UmVjdCYpOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0Kik7Ci0gICAgdmly
dHVhbCBib29sIGFsbG93U3VyZmFjZUZvclJvb3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQot
ICAgIFRleHR1cmVNYXBwZXJRdCgpOwotICAgIHZpcnR1YWwgY29uc3QgY2hhciogdHlwZSgpIGNv
bnN0IHsgcmV0dXJuICJUZXh0dXJlTWFwcGVyUXQiOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRy
PEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKLQotICAgIHN0YXRpYyB2b2lkIGluaXRp
YWxpemUoUVBhaW50ZXIqIHBhaW50ZXIpCi0gICAgewotICAgICAgICBwYWludGVyLT5zZXRSZW5k
ZXJIaW50cyhRUGFpbnRlcjo6QW50aWFsaWFzaW5nIHwgUVBhaW50ZXI6OlNtb290aFBpeG1hcFRy
YW5zZm9ybSwgZmFsc2UpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBRUGFpbnRlciogbV9wYWlu
dGVyOwotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlUXQ+IG1fY3VycmVudFN1cmZhY2U7Ci19Owot
CiB2b2lkIEJpdG1hcFRleHR1cmVRdDo6ZGVzdHJveSgpCiB7CiAgICAgaWYgKG1fcGl4bWFwLnBh
aW50aW5nQWN0aXZlKCkpCkBAIC0xMTgsNiArNzgsMjYgQEAgdm9pZCBCaXRtYXBUZXh0dXJlUXQ6
OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiAgICAgbV9waXhtYXAgPSAqcGl4bWFw
OwogfQogCit2b2lkIEJpdG1hcFRleHR1cmVRdDo6cGFjaygpCit7CisgICAgaWYgKG1fcGl4bWFw
LmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2ltYWdlID0gbV9waXhtYXAudG9J
bWFnZSgpOworICAgIG1fcGl4bWFwID0gUVBpeG1hcCgpOworICAgIG1faXNQYWNrZWQgPSB0cnVl
OworfQorCit2b2lkIEJpdG1hcFRleHR1cmVRdDo6dW5wYWNrKCkKK3sKKyAgICBtX2lzUGFja2Vk
ID0gZmFsc2U7CisgICAgaWYgKG1faW1hZ2UuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fcGl4bWFwID0gUVBpeG1hcDo6ZnJvbUltYWdlKG1faW1hZ2UpOworICAgIG1faW1hZ2Ug
PSBRSW1hZ2UoKTsKK30KKwogdm9pZCBUZXh0dXJlTWFwcGVyUXQ6OnNldENsaXAoY29uc3QgSW50
UmVjdCYgcmVjdCkKIHsKICAgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBtX2N1cnJlbnRTdXJmYWNl
ID8gJm1fY3VycmVudFN1cmZhY2UtPm1fcGFpbnRlciA6IG1fcGFpbnRlcjsKQEAgLTE4MiwyMyAr
MTYyLDI2IEBAIHZvaWQgVGV4dHVyZU1hcHBlclF0OjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBU
ZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0CiAgICAgcGFpbnRlci0+c2V0T3BhY2l0
eShwcmV2T3BhY2l0eSk7CiB9CiAKLVBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlcj4gVGV4dHVyZU1h
cHBlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK1Bhc3NPd25QdHI8VGV4dHVy
ZU1hcHBlcj4gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkK
IHsKICNpZmRlZiBRVF9PUEVOR0xfTElCCi0gICAgaWYgKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLT5wYWludEVuZ2luZSgpLT50eXBlKCkgPT0gUVBhaW50RW5naW5lOjpPcGVuR0wyKSB7Ci0g
ICAgICAgIFRleHR1cmVNYXBwZXJHTCogdGV4bWFwR0wgPSBuZXcgVGV4dHVyZU1hcHBlckdMOwot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYodGV4bWFwR0wpOwotICAgIH0KKyAgICBpZiAoY29udGV4
dCAmJiBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+cGFpbnRFbmdpbmUoKS0+dHlwZSgpID09
IFFQYWludEVuZ2luZTo6T3BlbkdMMikKKyAgICAgICAgcmV0dXJuIG5ldyBUZXh0dXJlTWFwcGVy
R0w7CiAjZW5kaWYKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJRdCk7Cisg
ICAgcmV0dXJuIG5ldyBUZXh0dXJlTWFwcGVyUXQ7CiB9CiAKLQogUGFzc1JlZlB0cjxCaXRtYXBU
ZXh0dXJlPiBUZXh0dXJlTWFwcGVyUXQ6OmNyZWF0ZVRleHR1cmUoKQogewogICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQml0bWFwVGV4dHVyZVF0KCkpOwogfQogCitCaXRtYXBUZXh0dXJlUXQ6OkJp
dG1hcFRleHR1cmVRdCgpCisgICAgOiBtX2lzUGFja2VkKGZhbHNlKQoreworCit9CisKICNpZmRl
ZiBRVF9PUEVOR0xfTElCCiBjbGFzcyBSR0JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlclF0IDogcHVi
bGljIFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyIHsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmggYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjQ4NjhjNGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisg
Q29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAidGV4bWFwL1RleHR1
cmVNYXBwZXIuaCIKKworI2lmbmRlZiBUZXh0dXJlTWFwcGVyUXRfaAorI2RlZmluZSBUZXh0dXJl
TWFwcGVyUXRfaAorbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCaXRtYXBUZXh0dXJlUXQg
OiBwdWJsaWMgQml0bWFwVGV4dHVyZSB7CisgICAgZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJR
dDsKK3B1YmxpYzoKKyAgICBCaXRtYXBUZXh0dXJlUXQoKTsKKyAgICB+Qml0bWFwVGV4dHVyZVF0
KCkgeyBkZXN0cm95KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOworICAgIHZpcnR1
YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZShtX3BpeG1hcC53aWR0aCgp
LCBtX3BpeG1hcC5oZWlnaHQoKSk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoY29uc3QgSW50
U2l6ZSYsIGJvb2wgb3BhcXVlKTsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CisgICAgdmlydHVhbCB2b2lk
IGVuZFBhaW50KCk7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSop
OworICAgIHZpcnR1YWwgYm9vbCBzYXZlKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgdmlydHVh
bCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAhbV9waXhtYXAuaXNOdWxsKCkgfHwgIW1f
aW1hZ2UuaXNOdWxsKCk7IH0KKyAgICBJbnRSZWN0IHNvdXJjZVJlY3QoKSBjb25zdCB7IHJldHVy
biBJbnRSZWN0KDAsIDAsIGNvbnRlbnRTaXplKCkud2lkdGgoKSwgY29udGVudFNpemUoKS5oZWln
aHQoKSk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFjaygpOworICAgIHZpcnR1YWwgdm9pZCB1bnBh
Y2soKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNQYWNrZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUGFj
a2VkOyB9CisKK3ByaXZhdGU6CisgICAgUVBhaW50ZXIgbV9wYWludGVyOworICAgIFFQaXhtYXAg
bV9waXhtYXA7CisgICAgUUltYWdlIG1faW1hZ2U7CisgICAgYm9vbCBtX2lzUGFja2VkOworfTsK
KworY2xhc3MgVGV4dHVyZU1hcHBlclF0IDogcHVibGljIFRleHR1cmVNYXBwZXIgeworcHVibGlj
OgorICAgIFRleHR1cmVNYXBwZXJRdCgpOworCisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJl
KGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3Qs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0
IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZh
Y2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSk7CisgICAgdmlydHVhbCB2b2lkIHNldENsaXAoY29u
c3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQoR3JhcGhp
Y3NDb250ZXh0Kik7CisgICAgdmlydHVhbCBib29sIGFsbG93U3VyZmFjZUZvclJvb3QoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJl
PiBjcmVhdGVUZXh0dXJlKCk7CisKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKFFQYWludGVy
KiBwYWludGVyKQorICAgIHsKKyAgICAgICAgcGFpbnRlci0+c2V0UmVuZGVySGludHMoUVBhaW50
ZXI6OkFudGlhbGlhc2luZyB8IFFQYWludGVyOjpTbW9vdGhQaXhtYXBUcmFuc2Zvcm0sIGZhbHNl
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiBjcmVhdGUo
KSB7IHJldHVybiBuZXcgVGV4dHVyZU1hcHBlclF0OyB9CisKK3ByaXZhdGU6CisgICAgUVBhaW50
ZXIqIG1fcGFpbnRlcjsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZVF0PiBtX2N1cnJlbnRTdXJm
YWNlOworfTsKKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKaW5kZXgg
NTRlNmM3YS4uNDY5ODIzOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApAQCAtMjAs
MTA3MiArMjAsMzYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5oIgogCi0jaW5jbHVkZSAiQ3VycmVudFRpbWUuaCIKLSNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJI
YXNoTWFwLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJSZWZDb3VudGVkLmgiCi0j
aW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRp
b25zLmgiCi0jaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVk
ZSAiVW5pdEJlemllci5oIgotCi0jZGVmaW5lIERFQlVHX1RFWE1BUF9GUFMgMAorI2luY2x1ZGUg
IlRleHR1cmVNYXBwZXJOb2RlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IFRl
eG1hcFBhaW50T3B0aW9ucyB7Ci0gICAgQml0bWFwVGV4dHVyZSogc3VyZmFjZTsKLSAgICBUZXh0
dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyOwotICAgIFRleHR1cmVNYXBwZXJOb2RlKiByb290TGF5
ZXI7Ci0gICAgZmxvYXQgb3BhY2l0eTsKLSAgICBJbnRSZWN0IHNjaXNzb3JSZWN0OwotICAgIElu
dFJlY3QgdmlzaWJsZVJlY3Q7Ci0gICAgYm9vbCBpc1N1cmZhY2U7Ci19OwotY2xhc3MgVGV4dHVy
ZU1hcHBlckNhY2hlIHsKLXB1YmxpYzoKLSAgICB2b2lkIG1hcmsoQml0bWFwVGV4dHVyZSogdGV4
dHVyZSk7Ci0KLSAgICBjbGFzcyBFbnRyeSB7Ci0gICAgcHVibGljOgotICAgICAgICBSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gdGV4dHVyZTsKLSAgICAgICAgRW50cnkoKSA6IHByZXZpb3VzQ29zdCgw
KSB7IH0KLSAgICAgICAgaW5saW5lIGludCBjYWxjdWxhdGVDb3N0KCkgY29uc3QKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKCF0ZXh0dXJlIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBjb25zdCBJbnRTaXplIHRleHR1cmVT
aXplID0gdGV4dHVyZS0+c2l6ZSgpOwotICAgICAgICAgICAgLy8gYW4gaW1hZ2UncyBjb3N0IGlu
IGJ5dGVzIGlzIHdpZHRoICogaGVpZ2h0ICogYnl0ZXMgcGVyIHBpeGVsICg0KS4KLSAgICAgICAg
ICAgIHJldHVybiB0ZXh0dXJlU2l6ZS53aWR0aCgpICogdGV4dHVyZVNpemUuaGVpZ2h0KCkgKiA0
OwotICAgICAgICB9Ci0gICAgICAgIEVudHJ5KEJpdG1hcFRleHR1cmUqIG5ld1RleHR1cmUpCi0g
ICAgICAgICAgICA6IHRleHR1cmUobmV3VGV4dHVyZSkKLSAgICAgICAgewotICAgICAgICB9Ci0g
ICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFbnRyeSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJu
IHRleHR1cmUgPT0gb3RoZXIudGV4dHVyZTsgfQotICAgICAgICBpbnQgcHJldmlvdXNDb3N0Owot
ICAgIH07Ci0KLSAgICBUZXh0dXJlTWFwcGVyQ2FjaGUoKSA6IG1fdG90YWxDb3N0KDApIHt9Ci0K
LSAgICB2b2lkIHB1cmdlKCk7Ci0gICAgVmVjdG9yPEVudHJ5PiBtX2RhdGE7Ci0gICAgaW50IG1f
dG90YWxDb3N0OwotI2lmbmRlZiBURVhNQVBfVEVYVFVSRV9DQUNIRV9LQlMKLSNkZWZpbmUgVEVY
TUFQX1RFWFRVUkVfQ0FDSEVfS0JTIDI0ICogMTAyNAotI2VuZGlmCi0gICAgc3RhdGljIGNvbnN0
IGludCBNYXhDb3N0ID0gVEVYTUFQX1RFWFRVUkVfQ0FDSEVfS0JTICogMTAyNDsKLSAgICBzdGF0
aWMgY29uc3QgaW50IFB1cmdlQW1vdW50ID0gTWF4Q29zdCAvIDQ7Ci19OwotCi0KLXZvaWQgVGV4
dHVyZU1hcHBlckNhY2hlOjpwdXJnZSgpCi17Ci0gICAgLy8gSWYgdGhpcyBpcyBpbiB0aGUgR0wg
aW1wbGVtZW50YXRpb24sIHdlIG5lZWQgYW4gYWN0aXZlIEdMIGNvbnRleHQsIGJlY2F1c2Ugd2Ug
bWlnaHQgY2FsbCBnbERlbGV0ZVRleHR1cmVzLgotICAgIGNvbnN0IGludCBzaXplID0gbV9kYXRh
LnNpemUoKTsKLQotICAgIGlmIChtX3RvdGFsQ29zdCA8PSBUZXh0dXJlTWFwcGVyQ2FjaGU6Ok1h
eENvc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEVuc3VyZSB0aGF0IHdlIGhhdmUgdGhl
IHJpZ2h0IGNvdW50LiBJdCBtaWdodCBiZSBpbmFjY3VyYXRlIGlmIGNvbnRlbnQgY2hhbmdlZCBz
aXplLgotICAgIC8vIFdlIG9ubHkgZG8gdGhpcyB3aGVuIHdlJ3JlIGFjdHVhbGx5IHJlYWR5IHRv
IHB1cmdlLgotICAgIG1fdG90YWxDb3N0ID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNp
emU7ICsraSkKLSAgICAgICAgbV90b3RhbENvc3QgKz0gbV9kYXRhW2ldLmNhbGN1bGF0ZUNvc3Qo
KTsKLQotICAgIGZvciAoaW50IGkgPSBzaXplLTE7IGkgPj0gMCAmJiBtX3RvdGFsQ29zdCA+IFRl
eHR1cmVNYXBwZXJDYWNoZTo6TWF4Q29zdCAtIFRleHR1cmVNYXBwZXJDYWNoZTo6UHVyZ2VBbW91
bnQ7IC0taSkgewotICAgICAgICBFbnRyeSYgZW50cnkgPSBtX2RhdGFbaV07Ci0gICAgICAgIGlm
IChlbnRyeS50ZXh0dXJlLT5pc0xvY2tlZCgpIHx8ICFlbnRyeS50ZXh0dXJlLT5pc1ZhbGlkKCkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV90b3RhbENvc3QgLT0gZW50cnkucHJl
dmlvdXNDb3N0OwotICAgICAgICBlbnRyeS50ZXh0dXJlLT5kZXN0cm95KCk7Ci0gICAgICAgIG1f
ZGF0YS5yZW1vdmUoaSk7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmVNYXBwZXJDYWNoZTo6bWFy
ayhCaXRtYXBUZXh0dXJlKiB0ZXh0dXJlKQotewotICAgIGlmICghdGV4dHVyZSB8fCAhdGV4dHVy
ZS0+aXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBFbnRyeSBlbnRyeSh0ZXh0dXJl
KTsKLSAgICBzaXplX3QgaW5kZXggPSBtX2RhdGEuZmluZChlbnRyeSk7Ci0gICAgaWYgKCFpbmRl
eCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGluZGV4IDwgbV9kYXRhLnNpemUoKSkgCi0g
ICAgICAgIG1fZGF0YS5yZW1vdmUoaW5kZXgpOwotICAgIGNvbnN0IGludCBjb3N0ID0gZW50cnku
Y2FsY3VsYXRlQ29zdCgpOwotICAgIG1fdG90YWxDb3N0IC09IGVudHJ5LnByZXZpb3VzQ29zdDsK
LSAgICBtX3RvdGFsQ29zdCArPSAoZW50cnkucHJldmlvdXNDb3N0ID0gY29zdCk7Ci0gICAgbV9k
YXRhLnByZXBlbmQoZW50cnkpOwotfQotCi1UZXh0dXJlTWFwcGVyQ2FjaGUgZ1RleHR1cmVNYXBw
ZXJDYWNoZTsKLQotY2xhc3MgVGV4dHVyZU1hcHBlckNhY2hlTG9jayB7Ci1wdWJsaWM6Ci0gICAg
VGV4dHVyZU1hcHBlckNhY2hlTG9jayhCaXRtYXBUZXh0dXJlKiB0ZXh0dXJlKSA6IG1fdGV4dHVy
ZSh0ZXh0dXJlKQotICAgIHsKLSAgICAgICAgaWYgKG1fdGV4dHVyZSkKLSAgICAgICAgICAgIG1f
dGV4dHVyZS0+bG9jaygpOwotICAgIH0KLSAgICB+VGV4dHVyZU1hcHBlckNhY2hlTG9jaygpCi0g
ICAgewotICAgICAgICBpZiAobV90ZXh0dXJlKQotICAgICAgICAgICAgbV90ZXh0dXJlLT51bmxv
Y2soKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1fdGV4
dHVyZTsKLX07Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJOb2RlIDogcHVibGljIFRleHR1cmVNYXBw
ZXJDb250ZW50TGF5ZXIgewotCi1wdWJsaWM6Ci0gICAgLy8gVGhpcyBzZXQgb2YgZmxhZ3MgaGVs
cCB1cyBkZWZlciB3aGljaCBwcm9wZXJ0aWVzIG9mIHRoZSBsYXllciBoYXZlIGJlZW4KLSAgICAv
LyBtb2RpZmllZCBieSB0aGUgY29tcG9zaXRvciwgc28gd2UgY2FuIGtub3cgd2hhdCB0byBsb29r
IGZvciBpbiB0aGUgbmV4dCBmbHVzaC4KLSAgICBlbnVtIENoYW5nZU1hc2sgewotICAgICAgICBO
b0NoYW5nZXMgPSAgICAgICAgICAgICAgICAgMCwKLQotICAgICAgICBQYXJlbnRDaGFuZ2UgPSAg
ICAgICAgICAgICAgKDFMIDw8IDApLAotICAgICAgICBDaGlsZHJlbkNoYW5nZSA9ICAgICAgICAg
ICAgKDFMIDw8IDEpLAotICAgICAgICBNYXNrTGF5ZXJDaGFuZ2UgPSAgICAgICAgICAgKDFMIDw8
IDIpLAotICAgICAgICBQb3NpdGlvbkNoYW5nZSA9ICAgICAgICAgICAgKDFMIDw8IDMpLAotCi0g
ICAgICAgIEFuY2hvclBvaW50Q2hhbmdlID0gICAgICAgICAoMUwgPDwgNCksCi0gICAgICAgIFNp
emVDaGFuZ2UgID0gICAgICAgICAgICAgICAoMUwgPDwgNSksCi0gICAgICAgIFRyYW5zZm9ybUNo
YW5nZSA9ICAgICAgICAgICAoMUwgPDwgNiksCi0gICAgICAgIENvbnRlbnRDaGFuZ2UgPSAgICAg
ICAgICAgICAoMUwgPDwgNyksCi0KLSAgICAgICAgQ29udGVudHNPcmllbnRhdGlvbkNoYW5nZSA9
ICgxTCA8PCA5KSwKLSAgICAgICAgT3BhY2l0eUNoYW5nZSA9ICAgICAgICAgICAgICgxTCA8PCAx
MCksCi0gICAgICAgIENvbnRlbnRzUmVjdENoYW5nZSA9ICAgICAgICAoMUwgPDwgMTEpLAotCi0g
ICAgICAgIFByZXNlcnZlczNEQ2hhbmdlID0gICAgICAgICAoMUwgPDwgMTIpLAotICAgICAgICBN
YXNrc1RvQm91bmRzQ2hhbmdlID0gICAgICAgKDFMIDw8IDEzKSwKLSAgICAgICAgRHJhd3NDb250
ZW50Q2hhbmdlID0gICAgICAgICgxTCA8PCAxNCksCi0gICAgICAgIENvbnRlbnRzT3BhcXVlQ2hh
bmdlID0gICAgICAoMUwgPDwgMTUpLAotCi0gICAgICAgIEJhY2tmYWNlVmlzaWJpbGl0eUNoYW5n
ZSA9ICAoMUwgPDwgMTYpLAotICAgICAgICBDaGlsZHJlblRyYW5zZm9ybUNoYW5nZSA9ICAgKDFM
IDw8IDE3KSwKLSAgICAgICAgRGlzcGxheUNoYW5nZSA9ICAgICAgICAgICAgICgxTCA8PCAxOCks
Ci0gICAgICAgIEJhY2tncm91bmRDb2xvckNoYW5nZSA9ICAgICAoMUwgPDwgMTkpLAotCi0gICAg
ICAgIFJlcGxpY2FMYXllckNoYW5nZSA9ICAgICAgICAoMUwgPDwgMjApCi0gICAgfTsKLQotICAg
IC8vIFRoZSBjb21wb3NpdG9yIGxldHMgdXMgc3BlY2lhbC1jYXNlIGltYWdlcyBhbmQgY29sb3Jz
LCBzbyB3ZSB0cnkgdG8gZG8gc28uCi0gICAgZW51bSBTdGF0aWNDb250ZW50VHlwZSB7IEhUTUxD
b250ZW50VHlwZSwgRGlyZWN0SW1hZ2VDb250ZW50VHlwZSwgQ29sb3JDb250ZW50VHlwZSwgTWVk
aWFDb250ZW50VHlwZSwgQ2FudmFzM0RDb250ZW50VHlwZX07Ci0KLSAgICBUZXh0dXJlTWFwcGVy
Tm9kZSogcm9vdExheWVyKCk7Ci0KLSAgICBUZXh0dXJlTWFwcGVyTm9kZShHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlciogbmV3TGF5ZXIpOwotICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJOb2Rl
KCk7Ci0KLSAgICB2b2lkIGNsZWFyRGlyZWN0SW1hZ2UoKTsKLSAgICB2b2lkIGNvbXB1dGVUcmFu
c2Zvcm1hdGlvbnMoKTsKLSAgICBJbnRTaXplIG5lYXJlc3RTdXJmYWNlU2l6ZSgpIGNvbnN0Owot
ICAgIHZvaWQgY29tcHV0ZVJlcGxpY2FUcmFuc2Zvcm0oKTsKLSAgICB2b2lkIGNvbXB1dGVMYXll
clR5cGUoKTsKLSAgICB2b2lkIGNvbXB1dGVMb2NhbFRyYW5zZm9ybSgpOwotICAgIHZvaWQgZmxh
dHRlblRvMkRTcGFjZUlmTmVjZXNzYXJ5KCk7Ci0gICAgdm9pZCBpbml0aWFsaXplVGV4dHVyZU1h
cHBlcihUZXh0dXJlTWFwcGVyKik7Ci0gICAgdm9pZCBpbnZhbGlkYXRlVHJhbnNmb3JtKCk7Ci0g
ICAgdm9pZCBub3RpZnlDaGFuZ2UoQ2hhbmdlTWFzayk7Ci0gICAgdm9pZCBzeW5jQ29tcG9zaXRp
bmdTdGF0ZShib29sIHJlY3Vyc2UpOwotICAgIHZvaWQgcGVyZm9ybVBvc3RTeW5jT3BlcmF0aW9u
cygpOwotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3Bs
YXlJblJlY3QoSW50UmVjdCk7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFudXBUZXh0dXJlTWFwcGVy
KCk7Ci0KLSAgICB2b2lkIHBhaW50UmVjdXJzaXZlKFRleG1hcFBhaW50T3B0aW9ucyBvcHRpb25z
KTsKLSAgICB2b2lkIHBhaW50U2VsZihjb25zdCBUZXhtYXBQYWludE9wdGlvbnMmIG9wdGlvbnMp
OwotICAgIHZvaWQgdXBsb2FkVGV4dHVyZUZyb21Db250ZW50KFRleHR1cmVNYXBwZXIqIHRleHR1
cmVNYXBwZXIsIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0KTsKLQotICAgIGludCBjb3VudERl
c2NlbmRhbnRzV2l0aENvbnRlbnQoKSBjb25zdDsKLSAgICBib29sIGhhc1N1cmZhY2VEZXNjZW5k
YW50cygpIGNvbnN0OwotCi0gICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UGxhdGZvcm1MYXllckNsaWVudChUZXh0dXJlTWFw
cGVyTGF5ZXJDbGllbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoVGV4dHVyZU1hcHBlcios
IGNvbnN0IFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXI6OlBhaW50T3B0aW9ucyYpOwotCi0gICAg
c3RhdGljIFRleHR1cmVNYXBwZXJOb2RlKiB0b1RleHR1cmVNYXBwZXJOb2RlKEdyYXBoaWNzTGF5
ZXIqKTsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogbV9sYXllcjsK
LSAgICBjb25zdCBjaGFyKiBtX2xhc3RUZXh0dXJlTWFwcGVyVHlwZTsKLSAgICBSZWZQdHI8VGV4
dHVyZU1hcHBlcj4gbV9sYXN0VGV4dHVyZU1hcHBlcjsKLSAgICBzdHJ1Y3QgVHJhbnNmb3JtRGF0
YSB7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGJhc2UsIHRhcmdldCwgcmVwbGljYSwg
Zm9yRGVzY2VuZGFudHMsIHBlcnNwZWN0aXZlLCBsb2NhbDsKLSAgICAgICAgSW50UmVjdCB0YXJn
ZXRCb3VuZGluZ1JlY3Q7Ci0gICAgICAgIGZsb2F0IGNlbnRlclo7Ci0gICAgICAgIGJvb2wgZGly
dHksIGxvY2FsRGlydHksIHBlcnNwZWN0aXZlRGlydHk7Ci0gICAgICAgIEludFJlY3QgYm91bmRp
bmdSZWN0RnJvbVJvb3Q7Ci0gICAgICAgIFRyYW5zZm9ybURhdGEoKSA6IGRpcnR5KHRydWUpLCBs
b2NhbERpcnR5KHRydWUpLCBwZXJzcGVjdGl2ZURpcnR5KHRydWUpIHsgfQotICAgIH07Ci0KLSAg
ICBUcmFuc2Zvcm1EYXRhIG1fdHJhbnNmb3JtczsKLQotICAgIGVudW0gTGF5ZXJUeXBlIHsKLSAg
ICAgICAgRGVmYXVsdExheWVyLAotICAgICAgICBSb290TGF5ZXIsCi0gICAgICAgIFNjaXNzb3JM
YXllciwKLSAgICAgICAgQ2xpcExheWVyLAotICAgICAgICBUcmFuc3BhcmVuY3lMYXllcgotICAg
IH07Ci0KLSAgICBMYXllclR5cGUgbV9sYXllclR5cGU7Ci0KLSAgICBzdHJ1Y3QgQ29udGVudERh
dGEgewotICAgICAgICBJbnRSZWN0IG5lZWRzRGlzcGxheVJlY3Q7Ci0gICAgICAgIGJvb2wgbmVl
ZHNEaXNwbGF5OwotICAgICAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3I7Ci0KLSAgICAgICAgU3Rh
dGljQ29udGVudFR5cGUgY29udGVudFR5cGU7Ci0gICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2U7
Ci0gICAgICAgIFRleHR1cmVNYXBwZXJWaWRlb0xheWVyKiBtZWRpYTsKLQotICAgICAgICBDb250
ZW50RGF0YSgpCi0gICAgICAgICAgICA6IG5lZWRzRGlzcGxheShmYWxzZSkKLSAgICAgICAgICAg
ICwgY29udGVudFR5cGUoSFRNTENvbnRlbnRUeXBlKQotICAgICAgICAgICAgLCBpbWFnZSgwKQot
ICAgICAgICAgICAgLCBtZWRpYSgwKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgIH07Ci0K
LSAgICBpbmxpbmUgSW50UmVjdCB0YXJnZXRSZWN0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSA/IGVu
dGlyZVJlY3QoKSA6IG1fc3RhdGUuY29udGVudHNSZWN0OwotICAgIH0KLQotICAgIGlubGluZSBJ
bnRSZWN0IGVudGlyZVJlY3QoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIEludFJlY3Qo
MCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgaW5s
aW5lIEludFJlY3QgcmVwbGljYVJlY3QoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
bGF5ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVyID8gSW50UmVjdCgwLCAwLCBtX25lYXJlc3RT
dXJmYWNlU2l6ZS53aWR0aCgpLCBtX25lYXJlc3RTdXJmYWNlU2l6ZS5oZWlnaHQoKSkgOiBlbnRp
cmVSZWN0KCk7Ci0gICAgfQotCi0gICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1fdGV4dHVyZTsK
LSAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbV9zdXJmYWNlLCBtX3JlcGxpY2FTdXJmYWNlOwot
Ci0gICAgQ29udGVudERhdGEgbV9wZW5kaW5nQ29udGVudDsKLSAgICBDb250ZW50RGF0YSBtX2N1
cnJlbnRDb250ZW50OwotCi0gICAgVmVjdG9yPFRleHR1cmVNYXBwZXJOb2RlKj4gbV9jaGlsZHJl
bjsKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSogbV9wYXJlbnQ7Ci0gICAgVGV4dHVyZU1hcHBlck5v
ZGUqIG1fZWZmZWN0VGFyZ2V0OwotICAgIGludCBtX2NoYW5nZU1hc2s7Ci0gICAgSW50U2l6ZSBt
X3NpemUsIG1fbmVhcmVzdFN1cmZhY2VTaXplOwotICAgIFN0cmluZyBtX25hbWU7Ci0gICAgVGV4
dHVyZU1hcHBlckxheWVyQ2xpZW50KiBtX3BsYXRmb3JtQ2xpZW50OwotCi0gICAgc3RydWN0IFN0
YXRlIHsKLSAgICAgICAgRmxvYXRQb2ludCBwb3M7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBhbmNo
b3JQb2ludDsKLSAgICAgICAgRmxvYXRTaXplIHNpemU7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHRyYW5zZm9ybTsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRyZW5U
cmFuc2Zvcm07Ci0gICAgICAgIENvbG9yIGJhY2tncm91bmRDb2xvcjsKLSAgICAgICAgQ29sb3Ig
Y3VycmVudENvbG9yOwotICAgICAgICBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5h
dGVzT3JpZW50YXRpb24gZ2VvT3JpZW50YXRpb247Ci0gICAgICAgIEdyYXBoaWNzTGF5ZXI6OkNv
bXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBjb250ZW50c09yaWVudGF0aW9uOwotICAg
ICAgICBmbG9hdCBvcGFjaXR5OwotICAgICAgICBJbnRSZWN0IGNvbnRlbnRzUmVjdDsKLSAgICAg
ICAgaW50IGRlc2NlbmRhbnRzV2l0aENvbnRlbnQ7Ci0gICAgICAgIFRleHR1cmVNYXBwZXJOb2Rl
KiBtYXNrTGF5ZXI7Ci0gICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiByZXBsaWNhTGF5ZXI7Ci0g
ICAgICAgIGJvb2wgcHJlc2VydmVzM0Q7Ci0gICAgICAgIGJvb2wgbWFza3NUb0JvdW5kczsKLSAg
ICAgICAgYm9vbCBkcmF3c0NvbnRlbnQ7Ci0gICAgICAgIGJvb2wgY29udGVudHNPcGFxdWU7Ci0g
ICAgICAgIGJvb2wgYmFja2ZhY2VWaXNpYmlsaXR5OwotICAgICAgICBib29sIHZpc2libGU7Ci0g
ICAgICAgIGJvb2wgZGlydHk7Ci0gICAgICAgIGJvb2wgdGlsZWQ7Ci0gICAgICAgIGJvb2wgaGFz
U3VyZmFjZURlc2NlbmRhbnRzOwotCi0gICAgICAgIFN0YXRlKCkKLSAgICAgICAgICAgIDogb3Bh
Y2l0eSgxLmYpCi0gICAgICAgICAgICAsIGRlc2NlbmRhbnRzV2l0aENvbnRlbnQoMCkKLSAgICAg
ICAgICAgICwgbWFza0xheWVyKDApCi0gICAgICAgICAgICAsIHJlcGxpY2FMYXllcigwKQotICAg
ICAgICAgICAgLCBwcmVzZXJ2ZXMzRChmYWxzZSkKLSAgICAgICAgICAgICwgbWFza3NUb0JvdW5k
cyhmYWxzZSkKLSAgICAgICAgICAgICwgZHJhd3NDb250ZW50KGZhbHNlKQotICAgICAgICAgICAg
LCBjb250ZW50c09wYXF1ZShmYWxzZSkKLSAgICAgICAgICAgICwgYmFja2ZhY2VWaXNpYmlsaXR5
KGZhbHNlKQotICAgICAgICAgICAgLCB2aXNpYmxlKHRydWUpCi0gICAgICAgICAgICAsIGRpcnR5
KHRydWUpCi0gICAgICAgICAgICAsIHRpbGVkKGZhbHNlKQotICAgICAgICAgICAgLCBoYXNTdXJm
YWNlRGVzY2VuZGFudHMoZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgIH07Ci0gICAg
U3RhdGUgbV9zdGF0ZTsKLX07Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldE5lZWRzRGlz
cGxheUluUmVjdChJbnRSZWN0IHJlY3QpCi17Ci0gICAgaWYgKG1fcGxhdGZvcm1DbGllbnQpIHsK
LSAgICAgICAgaWYgKG1fc3RhdGUuaGFzU3VyZmFjZURlc2NlbmRhbnRzKSB7Ci0gICAgICAgICAg
ICBtX3BsYXRmb3JtQ2xpZW50LT5zZXROZWVkc0Rpc3BsYXkoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICByZWN0LmludGVyc2VjdChJbnRSZWN0KDAsIDAsIG1fc2l6
ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgp
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3BsYXRmb3JtQ2xpZW50LT5zZXROZWVk
c0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
IW1fcGFyZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhcmVudC0+c2V0TmVlZHNEaXNw
bGF5SW5SZWN0KHJlY3QpOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzZXROZWVkc0Rp
c3BsYXkoKQotewotICAgIGlmIChtX2VmZmVjdFRhcmdldCkKLSAgICAgICAgbV9lZmZlY3RUYXJn
ZXQtPnNldE5lZWRzRGlzcGxheSgpOwotICAgIGlmIChtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRp
bmdSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX3N0YXRlLmRyYXdz
Q29udGVudCB8fCBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlICE9IEhUTUxDb250ZW50VHlw
ZSkKLSAgICAgICAgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KG1fdHJhbnNmb3Jtcy50YXJnZXRCb3Vu
ZGluZ1JlY3QpOwotfQotCi0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldFBsYXRmb3JtTGF5
ZXJDbGllbnQoVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgbV9wbGF0
Zm9ybUNsaWVudCA9IGNsaWVudDsKLX0KLQotc3RhdGljIGludCBjb21wYXJlR3JhcGhpY3NMYXll
cnNaVmFsdWUoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKLXsKLSAgICB0eXBlZGVmIGNv
bnN0IFRleHR1cmVNYXBwZXJOb2RlKiBOb2RlUHRyOwotICAgIGNvbnN0IE5vZGVQdHIqIG5vZGVB
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgTm9kZVB0cio+KGEpOwotICAgIGNvbnN0IE5vZGVQdHIqIG5v
ZGVCID0gc3RhdGljX2Nhc3Q8Y29uc3QgTm9kZVB0cio+KGIpOwotICAgIHJldHVybiBpbnQoKCgq
bm9kZUEpLT5tX3RyYW5zZm9ybXMuY2VudGVyWiAtICgqbm9kZUIpLT5tX3RyYW5zZm9ybXMuY2Vu
dGVyWikgKiAxMDAwKTsKLX0KLWlubGluZSBzdGF0aWMgdm9pZCBzb3J0QnlaT3JkZXIoVmVjdG9y
PFRleHR1cmVNYXBwZXJOb2RlKiA+JiBhcnJheSwgaW50IGZpcnN0LCBpbnQgbGFzdCkKLXsKLSAg
ICBxc29ydChhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgc2l6ZW9mKFRleHR1cmVNYXBwZXJO
b2RlKiksIGNvbXBhcmVHcmFwaGljc0xheWVyc1pWYWx1ZSk7Ci19Ci0KLWJvb2wgVGV4dHVyZU1h
cHBlck5vZGU6Omhhc1N1cmZhY2VEZXNjZW5kYW50cygpIGNvbnN0Ci17Ci0gICAgaWYgKG1fbGF5
ZXJUeXBlID09IENsaXBMYXllciB8fCBtX2xheWVyVHlwZSA9PSBUcmFuc3BhcmVuY3lMYXllciB8
fCBtX3N0YXRlLnJlcGxpY2FMYXllcikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY29uc3Qg
aW50IHNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNp
emU7ICsraSkgewotICAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIGNoaWxkID0gbV9jaGls
ZHJlbltpXSkgewotICAgICAgICAgICAgaWYgKGNoaWxkLT5oYXNTdXJmYWNlRGVzY2VuZGFudHMo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci0KLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnQoVGV4dHVy
ZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6
UGFpbnRPcHRpb25zJiBvcHRpb25zKQotewotICAgIEFTU0VSVChtX2xheWVyVHlwZSA9PSBSb290
TGF5ZXIpOwotICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSNp
ZiAwCi0gICAgV1RGOjpTdG9wV2F0Y2ggc3RvcFdhdGNoOwotICAgICgiW1RleHR1cmVNYXBwZXJd
IFJvb3RQYWludCEhXG4iKTsKLSNlbmRpZgotCi0gICAgaWYgKHRleHR1cmVNYXBwZXItPnR5cGUo
KSAhPSBtX2xhc3RUZXh0dXJlTWFwcGVyVHlwZSkKLSAgICAgICAgZ1RleHR1cmVNYXBwZXJDYWNo
ZS5tX2RhdGEuY2xlYXIoKTsKLQotICAgIG1fbGFzdFRleHR1cmVNYXBwZXIgPSB0ZXh0dXJlTWFw
cGVyOwotICAgIFRleG1hcFBhaW50T3B0aW9ucyBvcHQ7Ci0gICAgb3B0Lm9wYWNpdHkgPSAxOwot
ICAgIG9wdC5yb290TGF5ZXIgPSB0aGlzOwotICAgIG9wdC5zY2lzc29yUmVjdCA9IG9wdGlvbnMu
dGFyZ2V0UmVjdDsKLSAgICBvcHQudmlzaWJsZVJlY3QgPSBvcHRpb25zLnZpc2libGVSZWN0Owot
ICAgIG9wdC50ZXh0dXJlTWFwcGVyID0gdGV4dHVyZU1hcHBlcjsKLSAgICBvcHQuc3VyZmFjZSA9
IDA7Ci0gICAgcGFpbnRSZWN1cnNpdmUob3B0KTsKLQotICAgIGlmICh0ZXh0dXJlTWFwcGVyLT5h
bGxvd1N1cmZhY2VGb3JSb290KCkgfHwgbV9zdGF0ZS5oYXNTdXJmYWNlRGVzY2VuZGFudHMpIHsK
LSAgICAgICAgdGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UoMCk7Ci0gICAgICAgIHRleHR1cmVN
YXBwZXItPnBhaW50VG9UYXJnZXQoKm1fc3VyZmFjZS5nZXQoKSwgb3B0aW9ucy52aWV3cG9ydFNp
emUsIG9wdGlvbnMudHJhbnNmb3JtLCBvcHRpb25zLm9wYWNpdHkgKiBtX3N0YXRlLm9wYWNpdHks
IG9wdGlvbnMudGFyZ2V0UmVjdCk7Ci0gICAgfQotICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUucHVy
Z2UoKTsKLX0KLQotaW50IFRleHR1cmVNYXBwZXJOb2RlOjpjb3VudERlc2NlbmRhbnRzV2l0aENv
bnRlbnQoKSBjb25zdAotewotICAgIGlmICghbV9zdGF0ZS52aXNpYmxlIHx8IG1fc3RhdGUub3Bh
Y2l0eSA8IDAuMDAxKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpbnQgZGVzY2VuZGFudHNXaXRo
Q29udGVudCA9IChtX3N0YXRlLmRyYXdzQ29udGVudCB8fCBtX2N1cnJlbnRDb250ZW50LmNvbnRl
bnRUeXBlICE9IEhUTUxDb250ZW50VHlwZSkgPyAxIDogMDsKLQotICAgIGNvbnN0IGludCBzaXpl
ID0gbV9jaGlsZHJlbi5zaXplKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKLSAgICAgICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiBjaGlsZCA9IG1fY2hpbGRyZW5baV0p
Ci0gICAgICAgICAgICBkZXNjZW5kYW50c1dpdGhDb250ZW50ICs9IGNoaWxkLT5jb3VudERlc2Nl
bmRhbnRzV2l0aENvbnRlbnQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGVzY2VuZGFudHNXaXRo
Q29udGVudDsKLX0KLQotaW5saW5lIFRleHR1cmVNYXBwZXJOb2RlKiBUZXh0dXJlTWFwcGVyTm9k
ZTo6dG9UZXh0dXJlTWFwcGVyTm9kZShHcmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAgICByZXR1
cm4gbGF5ZXIgPyBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcio+KGxheWVy
KS0+bV9ub2RlLmdldCgpIDogMDsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0
ZUxheWVyVHlwZSgpCi17Ci0gICAgLy8gY2FsY3VsYXRlIGxheWVyIHR5cGUuIEEgbGF5ZXIgY2Fu
IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotICAgIC8vICBSb290TGF5ZXI6IHRoZSB0b3AgbGV2
ZWwuIERyYXdzIHRvIGEgZnJhbWVidWZmZXIsIGFuZCB0aGUgdGFyZ2V0IHRleHR1cmUgZHJhd3Mg
aW50byB0aGUgdmlld3BvcnQuCi0gICAgLy8gICAgICAgICAgICBvbmx5IG9uZSBsYXllciBpcyB0
aGUgcm9vdCBsYXllci4KLSAgICAvLyAgU2Npc3NvckxheWVyOiBkcmF3cyB0byB0aGUgY3VycmVu
dCBmcmFtZWJ1ZmZlciwgYW5kIGFwcGxpZXMgYW4gZXh0cmEgc2Npc3NvciBiZWZvcmUgZHJhd2lu
ZyBpdHMgY2hpbGRyZW4uCi0gICAgLy8gICAgICAgICAgICAgICAgQSBzY2lzc29yIGxheWVyIGlz
IGEgbGF5ZXIgd2l0aCBjaGlsZHJlbiB0aGF0IG1hc2tzIHRvIGJvdW5kcywgaXMgbm90IGEgdHJh
bnNwYXJlbmN5IGxheWVyLCBhbmQgaGFzIGEgcmVjdGFuZ3VsYXIgY2xpcC4KLSAgICAvLyAgQ2xp
cExheWVyOiBjcmVhdGVzIGEgbmV3IGZyYW1lYnVmZmVyLCB0aGUgc2l6ZSBvZiB0aGUgbGF5ZXIs
IGFuZCB0aGVuIHBhaW50cyBpdCB0byB0aGUgZW5jbG9zaW5nIEJpdG1hcFRleHR1cmUgd2l0aCB0
aGUgbGF5ZXIncyB0cmFuc2Zvcm0vb3BhY2l0eS4KLSAgICAvLyAgICAgICAgICAgICAgQSBjbGlw
IGxheWVyIGlzIGEgbGF5ZXIgdGhhdCBtYXNrcyB0byBib3VuZHMsIGRvZXNuJ3QgcHJlc2VydmUg
M0QsIGhhcyBjaGlsZHJlbiwgYW5kIGhhcyBhIHRyYW5zcGFyZW5jeS9tYXNrIG9yIGEgbm9uLXJl
Y3Rhbmd1bGFyIHRyYW5zZm9ybS4KLSAgICAvLyAgVHJhbnNwYXJlbmN5TGF5ZXI6IGNyZWF0ZXMg
YSBuZXcgZnJhbWVidWZmZXIgaWRldGljYWwgaW4gc2l6ZSB0byB0aGUgY3VycmVudCBmcmFtZWJ1
ZmZlci4gVGhlbiBkcmF3cyB0aGUgZmIncyB0ZXh0dXJlIHRvIHRoZSBjdXJyZW50IGZyYW1lYnVm
ZmVyIHdpdGggaWRlbnRpdHkgdHJhbnNmb3JtLgotICAgIC8vICAgICAgICAgICAgICAgICAgICAg
VXNlZCBmb3IgbGF5ZXJzIHdpdGggY2hpbGRyZW4gYW5kIHRyYW5zcGFyZW5jeS9tYXNrIHRoYXQg
cHJlc2VydmUgM0Qgb3IgZG9uJ3QgbWFzayB0byBib3VuZHMuCi0gICAgLy8gIERlZmF1bHRMYXll
cjogZHJhd3MgaXRzZWxmIGFuZCBpdHMgY2hpbGRyZW4gZGlyZWN0bHkgdG8gdGhlIGN1cnJlbnQg
ZnJhbWVidWZmZXIuCi0gICAgLy8gICAgICAgICAgICAgICAgYW55IGxheWVyIHRoYXQgZG9lc24n
dCBjb25mb3JtIHRvIHRoZSBvdGhlciBydWxlcyBpcyBhIERlZmF1bHRMYXllci4KLQotICAgIGNv
bnN0IGJvb2wgc2VsZkhhc0NvbnRlbnQgPSBtX3N0YXRlLmRyYXdzQ29udGVudCB8fCAobV9jdXJy
ZW50Q29udGVudC5jb250ZW50VHlwZSAhPSBIVE1MQ29udGVudFR5cGUpOwotICAgIGNvbnN0IGJv
b2wgaGFzRGVzY2VuZGFudHNXaXRoQ29udGVudCA9IG1fc3RhdGUuZGVzY2VuZGFudHNXaXRoQ29u
dGVudCAtIChzZWxmSGFzQ29udGVudCA/IDEgOiAwKTsKLSAgICBjb25zdCBib29sIGhhc1RyYW5z
cGFyZW5jeSA9IG1fc3RhdGUub3BhY2l0eSA8IDAuOTkgfHwgbV9zdGF0ZS5tYXNrTGF5ZXI7Ci0g
ICAgY29uc3QgYm9vbCBoYXNSZXBsaWNhID0gbV9zdGF0ZS5yZXBsaWNhTGF5ZXI7Ci0gICAgbV9s
YXllclR5cGUgPSBEZWZhdWx0TGF5ZXI7Ci0KLSAgICAvLyBMYXllciBoYXMgbm8gcGFyZW50LCBp
dCBtdXN0IGJlIGEgcm9vdCBsYXllci4KLSAgICBpZiAoIW1fcGFyZW50ICYmICFtX2VmZmVjdFRh
cmdldCkgewotICAgICAgICBtX2xheWVyVHlwZSA9IFJvb3RMYXllcjsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIC8vIEEgbGF5ZXIgd2l0aCBubyBjb250ZW50cyBpcyBhbHdheXMgYSBk
ZWZhdWx0IGxheWVyLgotICAgIGlmICghbV9zdGF0ZS5kZXNjZW5kYW50c1dpdGhDb250ZW50KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBBIGxheWVyIHdpdGggY29udGVudC1kZXNjZW5kYW50
cyBhbmQgYSBtYXNrIGlzIGFsd2F5cyBhIGNsaXAgbGF5ZXIuCi0gICAgaWYgKGhhc0Rlc2NlbmRh
bnRzV2l0aENvbnRlbnQgJiYgbV9zdGF0ZS5tYXNrTGF5ZXIpIHsKLSAgICAgICAgbV9sYXllclR5
cGUgPSBDbGlwTGF5ZXI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBBIG1hc2tz
LXRvIGJvdW5kcyBsYXllciBjYW4gYmUgYSBjbGlwIG9yIGEgc2Npc3NvciBsYXllci4gSXQncyBh
IHNjaXNzb3IgbGF5ZXIgb25seSBpZiBpdCBoYXMgYSB0cml2aWFsIGNsaXAgKGlkZW50aXR5IG9y
IHRyYW5zbGF0aW9uKSwgb3IgaWYgaXQgaGFzIHRyYW5zcGFyZW5jeS4KLSAgICAvLyBUaGF0J3Mg
YmVjYXVzZSBhIENsaXBMYXllciB3b3VsZCBjcmVhdGUgYW4gaW50ZXJtZWRpYXRlIGRyYXdpbmcg
c3VyZmFjZSAoRkIpIC0gd2Ugd2FudCB0byBsaW1pdCBpdCB0byB3aGVuIGl0J3MgYWN0dWFsbHkg
bmVjZXNzYXJ5LCBpLmUuIHRyYW5zcGFyZW5jeSBvciBub24tdHJpdmlhbCBjbGlwLgotICAgIGlm
IChtX3N0YXRlLm1hc2tzVG9Cb3VuZHMgJiYgaGFzRGVzY2VuZGFudHNXaXRoQ29udGVudCkgewot
ICAgICAgICBpZiAoaGFzVHJhbnNwYXJlbmN5IHx8ICFtX3N0YXRlLnRyYW5zZm9ybS5pc0lkZW50
aXR5T3JUcmFuc2xhdGlvbigpIHx8IG1fcGFyZW50LT5tX3N0YXRlLnByZXNlcnZlczNEKQotICAg
ICAgICAgICAgbV9sYXllclR5cGUgPSBDbGlwTGF5ZXI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG1fbGF5ZXJUeXBlID0gU2Npc3NvckxheWVyOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gV2UgdXNlIGEgdHJhbnNwYXJlbmN5IGxheWVyIHdoZW4gd2UgaGF2ZSB0d28gb2Yg
dGhlIGZvbGxvd2luZyAzOiByZXBsaWNhLCB0cmFuc3BhcmVuY3ksIGRlc2NlbmRhbnRzIHdpdGgg
Y29udGVudHMuCi0gICAgaWYgKChoYXNSZXBsaWNhICYmIGhhc0Rlc2NlbmRhbnRzV2l0aENvbnRl
bnQpIHx8IChoYXNSZXBsaWNhICYmIGhhc1RyYW5zcGFyZW5jeSkgfHwgKGhhc1RyYW5zcGFyZW5j
eSAmJiBtX3N0YXRlLmRlc2NlbmRhbnRzV2l0aENvbnRlbnQgPiAxKSkKLSAgICAgICAgbV9sYXll
clR5cGUgPSBUcmFuc3BhcmVuY3lMYXllcjsKLX0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6Omlu
aXRpYWxpemVUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCi17Ci0g
ICAgaWYgKHRleHR1cmVNYXBwZXItPnR5cGUoKSA9PSBtX2xhc3RUZXh0dXJlTWFwcGVyVHlwZSkK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fc3VyZmFjZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRl
eHR1cmUoKTsKLSAgICBtX3JlcGxpY2FTdXJmYWNlID0gdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4
dHVyZSgpOwotICAgIG1fdGV4dHVyZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsK
LSAgICBnVGV4dHVyZU1hcHBlckNhY2hlLm1hcmsobV90ZXh0dXJlLmdldCgpKTsKLSAgICBtX2xh
c3RUZXh0dXJlTWFwcGVyVHlwZSA9IHRleHR1cmVNYXBwZXItPnR5cGUoKTsKLX0KLQotVGV4dHVy
ZU1hcHBlck5vZGU6OlRleHR1cmVNYXBwZXJOb2RlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
KiBuZXdMYXllcikKLSAgICA6IG1fbGF5ZXIobmV3TGF5ZXIpCi0gICAgLCBtX2xhc3RUZXh0dXJl
TWFwcGVyVHlwZSgwKQotICAgICwgbV9sYXN0VGV4dHVyZU1hcHBlcigwKQotICAgICwgbV9sYXll
clR5cGUoRGVmYXVsdExheWVyKQotICAgICwgbV9zdXJmYWNlKDApCi0gICAgLCBtX3BhcmVudCgw
KQotICAgICwgbV9lZmZlY3RUYXJnZXQoMCkKLSAgICAsIG1fY2hhbmdlTWFzayhOb0NoYW5nZXMp
Ci0gICAgLCBtX3BsYXRmb3JtQ2xpZW50KDApCi17Ci0KLX0KLQotVGV4dHVyZU1hcHBlck5vZGUq
IFRleHR1cmVNYXBwZXJOb2RlOjpyb290TGF5ZXIoKQotewotICAgIGlmIChtX2VmZmVjdFRhcmdl
dCkKLSAgICAgICAgcmV0dXJuIG1fZWZmZWN0VGFyZ2V0LT5yb290TGF5ZXIoKTsKLSAgICBpZiAo
bV9wYXJlbnQpCi0gICAgICAgIHJldHVybiBtX3BhcmVudC0+cm9vdExheWVyKCk7Ci0gICAgcmV0
dXJuIHRoaXM7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmludmFsaWRhdGVUcmFuc2Zv
cm0oKQotewotICAgIG1fdHJhbnNmb3Jtcy5kaXJ0eSA9IHRydWU7Ci0gICAgaWYgKG1fbGF5ZXJU
eXBlICE9IENsaXBMYXllcikKLSAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IHRydWU7Ci0gICAgaWYg
KG1fc3RhdGUucmVwbGljYUxheWVyKQotICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+aW52
YWxpZGF0ZVRyYW5zZm9ybSgpOwotICAgIGNvbnN0IGludCBzaXplID0gbV9jaGlsZHJlbi5zaXpl
KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKFRl
eHR1cmVNYXBwZXJOb2RlKiBsYXllciA9IG1fY2hpbGRyZW5baV0pCi0gICAgICAgICAgICBsYXll
ci0+aW52YWxpZGF0ZVRyYW5zZm9ybSgpOwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6Y29tcHV0ZUxvY2FsVHJhbnNmb3JtKCkKLXsKLSAgICBpZiAoIW1fdHJhbnNmb3Jtcy5s
b2NhbERpcnR5KQotICAgICAgICByZXR1cm47Ci0gICAgY29uc3QgZmxvYXQgb3JpZ2luWCA9IG1f
c3RhdGUuYW5jaG9yUG9pbnQueCgpICogbV9zaXplLndpZHRoKCk7Ci0gICAgY29uc3QgZmxvYXQg
b3JpZ2luWSA9IG1fc3RhdGUuYW5jaG9yUG9pbnQueSgpICogbV9zaXplLmhlaWdodCgpOwotICAg
IG1fdHJhbnNmb3Jtcy5sb2NhbCA9Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KCkKLSAg
ICAgICAgLnRyYW5zbGF0ZTNkKG9yaWdpblggKyBtX3N0YXRlLnBvcy54KCksIG9yaWdpblkgKyBt
X3N0YXRlLnBvcy55KCksIG1fc3RhdGUuYW5jaG9yUG9pbnQueigpKQotICAgICAgICAubXVsdExl
ZnQobV9zdGF0ZS50cmFuc2Zvcm0pCi0gICAgICAgIC50cmFuc2xhdGUzZCgtb3JpZ2luWCwgLW9y
aWdpblksIC1tX3N0YXRlLmFuY2hvclBvaW50LnooKSk7Ci0gICAgbV90cmFuc2Zvcm1zLmxvY2Fs
RGlydHkgPSBmYWxzZTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6ZmxhdHRlblRvMkRT
cGFjZUlmTmVjZXNzYXJ5KCkKLXsKLSAgICBpZiAobV9zdGF0ZS5wcmVzZXJ2ZXMzRCkKLSAgICAg
ICAgcmV0dXJuOwotICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNMTMoMCk7Ci0g
ICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE0yMygwKTsKLSAgICBtX3RyYW5zZm9y
bXMuZm9yRGVzY2VuZGFudHMuc2V0TTMxKDApOwotICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5k
YW50cy5zZXRNMzIoMCk7Ci0gICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE0zMygx
KTsKLSAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTM0KDApOwotICAgIG1fdHJh
bnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNNDMoMCk7Ci19Ci0KLUludFNpemUgVGV4dHVyZU1h
cHBlck5vZGU6Om5lYXJlc3RTdXJmYWNlU2l6ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fbGF5ZXJU
eXBlID09IENsaXBMYXllciB8fCBtX2xheWVyVHlwZSA9PSBSb290TGF5ZXIpCi0gICAgICAgIHJl
dHVybiBtX3N1cmZhY2UgJiYgIW1fc3VyZmFjZS0+c2l6ZSgpLmlzRW1wdHkoKSA/IG1fc3VyZmFj
ZS0+c2l6ZSgpIDogbV9zaXplOwotICAgIHJldHVybiBtX3BhcmVudC0+bmVhcmVzdFN1cmZhY2VT
aXplKCk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVSZXBsaWNhVHJhbnNm
b3JtKCkKLXsKLSAgICBpZiAoIW1fc3RhdGUucmVwbGljYUxheWVyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX25lYXJlc3RTdXJmYWNlU2l6ZSA9IG5lYXJlc3RTdXJmYWNlU2l6ZSgpOwotCi0g
ICAgaWYgKG1fbGF5ZXJUeXBlICE9IFRyYW5zcGFyZW5jeUxheWVyKSB7Ci0gICAgICAgIG1fdHJh
bnNmb3Jtcy5yZXBsaWNhID0gVHJhbnNmb3JtYXRpb25NYXRyaXgobV90cmFuc2Zvcm1zLnRhcmdl
dCkubXVsdExlZnQobV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fdHJhbnNmb3Jtcy5sb2NhbCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb25zdCBmbG9hdCBvcmlnaW5YID0gbV90cmFu
c2Zvcm1zLnRhcmdldC5tNDEoKTsKLSAgICBjb25zdCBmbG9hdCBvcmlnaW5ZID0gbV90cmFuc2Zv
cm1zLnRhcmdldC5tNDIoKTsKLSAgICBtX3RyYW5zZm9ybXMucmVwbGljYSA9Ci0gICAgICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpCi0gICAgICAgICAgICAgICAgLnRyYW5zbGF0ZShvcmln
aW5YLCBvcmlnaW5ZKQotICAgICAgICAgICAgICAgIC5tdWx0TGVmdChtX3N0YXRlLnJlcGxpY2FM
YXllci0+bV90cmFuc2Zvcm1zLmxvY2FsKQotICAgICAgICAgICAgICAgIC50cmFuc2xhdGUoLW9y
aWdpblgsIC1vcmlnaW5ZKTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVRy
YW5zZm9ybWF0aW9ucygpCi17Ci0gICAgaWYgKCFtX3RyYW5zZm9ybXMuZGlydHkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fdHJhbnNmb3Jtcy5kaXJ0eSA9IGZhbHNlOwotICAgIGlmICgobV9z
aXplLmlzRW1wdHkoKSAmJiBtX3N0YXRlLm1hc2tzVG9Cb3VuZHMpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBUZXh0dXJlTWFwcGVyTm9kZSogcGFyZW50ID0gbV9wYXJlbnQ7Ci0gICAgY29tcHV0
ZUxvY2FsVHJhbnNmb3JtKCk7Ci0KLSAgICBtX3RyYW5zZm9ybXMudGFyZ2V0ID0gVHJhbnNmb3Jt
YXRpb25NYXRyaXgocGFyZW50ID8gcGFyZW50LT5tX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMg
OiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKS5tdWx0TGVmdChtX3RyYW5zZm9ybXMubG9jYWwpOwot
ICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cyA9IChtX2xheWVyVHlwZSA9PSBDbGlwTGF5
ZXIgPyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpIDogbV90cmFuc2Zvcm1zLnRhcmdldCk7Ci0KLSAg
ICBpZiAobV9lZmZlY3RUYXJnZXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdHJhbnNmb3Jt
cy50YXJnZXRCb3VuZGluZ1JlY3QgPSBJbnRSZWN0KG1fdHJhbnNmb3Jtcy50YXJnZXQubWFwUmVj
dChlbnRpcmVSZWN0KCkpKTsKLSAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCi0gICAgICAg
IG1fc3RhdGUucmVwbGljYUxheWVyLT5jb21wdXRlVHJhbnNmb3JtYXRpb25zKCk7Ci0KLSAgICBm
bGF0dGVuVG8yRFNwYWNlSWZOZWNlc3NhcnkoKTsKLQotICAgIGlmICghbV9zdGF0ZS5iYWNrZmFj
ZVZpc2liaWxpdHkgJiYgbV90cmFuc2Zvcm1zLnRhcmdldC5pbnZlcnNlKCkubTMzKCkgPCAwKSB7
Ci0gICAgICAgIG1fc3RhdGUudmlzaWJsZSA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIG1fc3RhdGUudmlzaWJsZSA9IHRydWU7Ci0KLSAgICBpZiAocGFyZW50ICYmIHBhcmVu
dC0+bV9zdGF0ZS5wcmVzZXJ2ZXMzRCkKLSAgICAgICAgbV90cmFuc2Zvcm1zLmNlbnRlclogPSBt
X3RyYW5zZm9ybXMudGFyZ2V0Lm1hcFBvaW50KEZsb2F0UG9pbnQzRChtX3NpemUud2lkdGgoKSAv
IDIsIG1fc2l6ZS5oZWlnaHQoKSAvIDIsIDApKS56KCk7Ci0KLSAgICBpZiAoIW1fY2hpbGRyZW4u
c2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9zdGF0ZS5jaGlsZHJlblRyYW5z
Zm9ybS5pc0lkZW50aXR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IEZsb2F0UG9p
bnQgY2VudGVyUG9pbnQgPSBGbG9hdFBvaW50KG1fc2l6ZS53aWR0aCgpIC8gMiwgbV9zaXplLmhl
aWdodCgpIC8gMik7Ci0gICAgaWYgKG1fdHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZURpcnR5KQotICAg
ICAgICBtX3RyYW5zZm9ybXMucGVyc3BlY3RpdmUgPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpCi0g
ICAgICAgICAgICAudHJhbnNsYXRlKGNlbnRlclBvaW50LngoKSwgY2VudGVyUG9pbnQueSgpKQot
ICAgICAgICAgICAgLm11bHRMZWZ0KG1fc3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm0pCi0gICAgICAg
ICAgICAudHJhbnNsYXRlKC1jZW50ZXJQb2ludC54KCksIC1jZW50ZXJQb2ludC55KCkpOwotICAg
IG1fdHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZURpcnR5ID0gZmFsc2U7Ci0gICAgbV90cmFuc2Zvcm1z
LmZvckRlc2NlbmRhbnRzLm11bHRMZWZ0KG1fdHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZSk7Ci19Ci0K
LXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnVwbG9hZFRleHR1cmVGcm9tQ29udGVudChUZXh0dXJl
TWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCkKLXsKLSAg
ICBpZiAobV9zaXplLmlzRW1wdHkoKSB8fCAhbV9sYXllcikgewotICAgICAgICBtX3RleHR1cmUt
PmRlc3Ryb3koKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX2N1cnJlbnRD
b250ZW50LmNvbnRlbnRUeXBlID09IERpcmVjdEltYWdlQ29udGVudFR5cGUpIHsKLSAgICAgICAg
aWYgKG1fY3VycmVudENvbnRlbnQuaW1hZ2UpCi0gICAgICAgICAgICBtX3RleHR1cmUtPnNldENv
bnRlbnRzVG9JbWFnZShtX2N1cnJlbnRDb250ZW50LmltYWdlLmdldCgpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IE1l
ZGlhQ29udGVudFR5cGUpIHsKLSAgICAgICAgaWYgKCFtX2N1cnJlbnRDb250ZW50Lm1lZGlhKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3RleHR1cmUtPnJlc2V0KG1fc2l6ZSwgdHJ1
ZSk7Ci0gICAgICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQgPSBt
X3RleHR1cmUtPmJlZ2luUGFpbnRNZWRpYSgpOwotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29u
dGV4dChwbGF0Zm9ybUNvbnRleHQpOwotICAgICAgICBtX2N1cnJlbnRDb250ZW50Lm1lZGlhLT5w
YWludCgmY29udGV4dCk7Ci0gICAgICAgIG1fdGV4dHVyZS0+ZW5kUGFpbnQoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGNvbnN0IGJvb2wgbmVlZHNSZXNldCA9IChtX3RleHR1cmUt
PmNvbnRlbnRTaXplKCkgIT0gbV9zaXplKSB8fCAhbV90ZXh0dXJlLT5pc1ZhbGlkKCk7Ci0gICAg
aWYgKChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlICE9IEhUTUxDb250ZW50VHlwZSkKLSAg
ICAgICAgfHwgKCFtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSAmJiBtX2N1cnJlbnRDb250
ZW50Lm5lZWRzRGlzcGxheVJlY3QuaXNFbXB0eSgpICYmICFuZWVkc1Jlc2V0KSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgSW50UmVjdCBkaXJ0eVJlY3QgPSBJbnRSZWN0KDAsIDAsIG1fc2l6ZS53
aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotICAgIGlmICghbmVlZHNSZXNldCAmJiAhbV9jdXJy
ZW50Q29udGVudC5uZWVkc0Rpc3BsYXkpCi0gICAgICAgIGRpcnR5UmVjdC5pbnRlcnNlY3QobV9j
dXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0KTsKLSAgICBpZiAobmVlZHNSZXNldCkKLSAg
ICAgICAgbV90ZXh0dXJlLT5yZXNldChtX3NpemUsIG1fc3RhdGUuY29udGVudHNPcGFxdWUpOwot
ICAgIG1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCA9IEludFJlY3QoKTsKLQotICAg
IHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQobV90ZXh0dXJlLT5iZWdpblBhaW50
KGRpcnR5UmVjdCkpOwotICAgICAgICBpZiAodGV4dHVyZU1hcHBlcikgewotICAgICAgICAgICAg
Y29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KHRleHR1cmVNYXBwZXItPmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LnNldFRleHREcmF3
aW5nTW9kZSh0ZXh0dXJlTWFwcGVyLT50ZXh0RHJhd2luZ01vZGUoKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgbV9sYXllci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29udGV4dCwgZGlydHlS
ZWN0KTsKLSAgICB9Ci0gICAgbV90ZXh0dXJlLT5lbmRQYWludCgpOwotICAgIG1fY3VycmVudENv
bnRlbnQubmVlZHNEaXNwbGF5ID0gZmFsc2U7Ci0KLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9k
ZTo6cGFpbnRTZWxmKGNvbnN0IFRleG1hcFBhaW50T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBp
ZiAoIW1fbGF5ZXIgfHwgbV9zaXplLmlzRW1wdHkoKSB8fCAoIW1fc3RhdGUuZHJhd3NDb250ZW50
ICYmIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1hc2tUZXh0dXJlID0g
bV9zdGF0ZS5tYXNrTGF5ZXIgPyBtX3N0YXRlLm1hc2tMYXllci0+bV90ZXh0dXJlIDogMDsKLSAg
ICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gcmVwbGljYU1hc2tUZXh0dXJlID0gMDsKLSAgICBpZiAo
bV9zdGF0ZS5yZXBsaWNhTGF5ZXIgJiYgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUubWFz
a0xheWVyKQotICAgICAgICByZXBsaWNhTWFza1RleHR1cmUgPSBtX3N0YXRlLnJlcGxpY2FMYXll
ci0+bV9zdGF0ZS5tYXNrTGF5ZXItPm1fdGV4dHVyZTsKLQotICAgIGNvbnN0IGZsb2F0IG9wYWNp
dHkgPSBvcHRpb25zLmlzU3VyZmFjZSA/IDEgOiBvcHRpb25zLm9wYWNpdHk7Ci0KLSAgICB1cGxv
YWRUZXh0dXJlRnJvbUNvbnRlbnQob3B0aW9ucy50ZXh0dXJlTWFwcGVyLCBvcHRpb25zLnZpc2li
bGVSZWN0KTsKLSAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIgJiYgIW9wdGlvbnMuaXNTdXJm
YWNlKQotICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCptX3RleHR1
cmUuZ2V0KCksIHJlcGxpY2FSZWN0KCksIG1fdHJhbnNmb3Jtcy5yZXBsaWNhLAotICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wYWNpdHkgKiBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5v
cGFjaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxpY2FNYXNrVGV4dHVyZSA/IHJl
cGxpY2FNYXNrVGV4dHVyZS5nZXQoKSA6IG1hc2tUZXh0dXJlLmdldCgpKTsKLQotICAgIGNvbnN0
IEludFJlY3QgcmVjdCA9IG1fbGF5ZXJUeXBlID09IENsaXBMYXllciA/IGVudGlyZVJlY3QoKSA6
IHRhcmdldFJlY3QoKTsKLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0g
PSBtX2xheWVyVHlwZSA9PSBDbGlwTGF5ZXIgPyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpIDogbV90
cmFuc2Zvcm1zLnRhcmdldDsKLSAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJl
KCptX3RleHR1cmUuZ2V0KCksIHJlY3QsIHRyYW5zZm9ybSwgb3BhY2l0eSwgb3B0aW9ucy5pc1N1
cmZhY2UgPyAwIDogbWFza1RleHR1cmUuZ2V0KCkpOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJO
b2RlOjpwYWludFJlY3Vyc2l2ZShUZXhtYXBQYWludE9wdGlvbnMgb3B0aW9ucykKLXsKLSAgICBi
b29sIGlzRGlydHkgPSBtX3N0YXRlLmRpcnR5OwotICAgIG1fc3RhdGUuZGlydHkgPSBmYWxzZTsK
LQotICAgIGlmICgobV9zaXplLmlzRW1wdHkoKSAmJiAobV9zdGF0ZS5tYXNrc1RvQm91bmRzCi0g
ICAgICAgIHx8IG1fY2hpbGRyZW4uaXNFbXB0eSgpKSkgfHwgIW1fc3RhdGUudmlzaWJsZSB8fCBv
cHRpb25zLm9wYWNpdHkgPCAwLjAxIHx8IG1fc3RhdGUub3BhY2l0eSA8IDAuMDEpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGluaXRpYWxpemVUZXh0dXJlTWFwcGVyKG9wdGlvbnMudGV4dHVyZU1h
cHBlcik7Ci0gICAgY29tcHV0ZVJlcGxpY2FUcmFuc2Zvcm0oKTsKLQotICAgIGlmIChtX3N0YXRl
Lm1hc2tMYXllcikgewotICAgICAgICBtX3N0YXRlLm1hc2tMYXllci0+aW5pdGlhbGl6ZVRleHR1
cmVNYXBwZXIob3B0aW9ucy50ZXh0dXJlTWFwcGVyKTsKLSAgICAgICAgbV9zdGF0ZS5tYXNrTGF5
ZXItPm1fc3RhdGUuZGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobV9zdGF0ZS5yZXBs
aWNhTGF5ZXIpIHsKLSAgICAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPmluaXRpYWxpemVUZXh0
dXJlTWFwcGVyKG9wdGlvbnMudGV4dHVyZU1hcHBlcik7Ci0gICAgICAgIG1fc3RhdGUucmVwbGlj
YUxheWVyLT5tX3N0YXRlLmRpcnR5ID0gZmFsc2U7Ci0gICAgICAgIGlmIChtX3N0YXRlLnJlcGxp
Y2FMYXllci0+bV9zdGF0ZS5tYXNrTGF5ZXIpIHsKLSAgICAgICAgICAgIG1fc3RhdGUucmVwbGlj
YUxheWVyLT5tX3N0YXRlLm1hc2tMYXllci0+aW5pdGlhbGl6ZVRleHR1cmVNYXBwZXIob3B0aW9u
cy50ZXh0dXJlTWFwcGVyKTsKLSAgICAgICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0
YXRlLm1hc2tMYXllci0+bV9zdGF0ZS5kaXJ0eSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgVGV4dHVyZU1hcHBlck5vZGUqIHJlcGxpY2EgPSBtX3N0YXRlLnJlcGxpY2FMYXllcjsK
LSAgICBjb25zdCBib29sIGlzU3VyZmFjZSA9IChtX2xheWVyVHlwZSA9PSBDbGlwTGF5ZXIKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2xheWVyVHlwZSA9PSBUcmFuc3BhcmVuY3lM
YXllcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChtX2xheWVyVHlwZSA9PSBSb290
TGF5ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKG9wdGlvbnMudGV4dHVy
ZU1hcHBlci0+YWxsb3dTdXJmYWNlRm9yUm9vdCgpIHx8IG1fc3RhdGUuaGFzU3VyZmFjZURlc2Nl
bmRhbnRzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKLSAgICBpZiAoaXNT
dXJmYWNlKQotICAgICAgICB1cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQob3B0aW9ucy50ZXh0dXJl
TWFwcGVyLCBvcHRpb25zLnZpc2libGVSZWN0KTsKLSAgICBjb25zdCBJbnRSZWN0IGJvdW5kaW5n
UmVjdGZyb21OZWFyZXN0U3VyZmFjZSA9IG1fdHJhbnNmb3Jtcy50YXJnZXRCb3VuZGluZ1JlY3Q7
Ci0KLSAgICBvcHRpb25zLm9wYWNpdHkgKj0gbV9zdGF0ZS5vcGFjaXR5OwotCi0gICAgVGV4bWFw
UGFpbnRPcHRpb25zIG9wdGlvbnNGb3JEZXNjZW5kYW50cyhvcHRpb25zKTsKLSAgICBvcHRpb25z
Rm9yRGVzY2VuZGFudHMub3BhY2l0eSA9IGlzU3VyZmFjZSA/IDEgOiBvcHRpb25zLm9wYWNpdHk7
Ci0gICAgb3B0aW9ucy5pc1N1cmZhY2UgPSBpc1N1cmZhY2U7Ci0KLSAgICBpZiAobV9sYXllclR5
cGUgPT0gQ2xpcExheWVyKSB7Ci0gICAgICAgIG9wdGlvbnNGb3JEZXNjZW5kYW50cy52aXNpYmxl
UmVjdCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkudHJhbnNsYXRlKC1ib3VuZGluZ1JlY3Rmcm9t
TmVhcmVzdFN1cmZhY2UueCgpLCAtYm91bmRpbmdSZWN0ZnJvbU5lYXJlc3RTdXJmYWNlLnkoKSku
bWFwUmVjdChvcHRpb25zLnZpc2libGVSZWN0KTsKLSAgICAgICAgb3B0aW9uc0ZvckRlc2NlbmRh
bnRzLnNjaXNzb3JSZWN0ID0gSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhl
aWdodCgpKTsKLSAgICB9Ci0KLSAgICBpZiAobV9sYXllclR5cGUgPT0gU2Npc3NvckxheWVyKQot
ICAgICAgICBvcHRpb25zRm9yRGVzY2VuZGFudHMuc2Npc3NvclJlY3QuaW50ZXJzZWN0KG1fdHJh
bnNmb3Jtcy50YXJnZXRCb3VuZGluZ1JlY3QpOwotICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+
c2V0Q2xpcChvcHRpb25zRm9yRGVzY2VuZGFudHMuc2Npc3NvclJlY3QpOwotCi0gICAgVGV4dHVy
ZU1hcHBlckNhY2hlTG9jayhtX3RleHR1cmUuZ2V0KCkpOwotICAgIFRleHR1cmVNYXBwZXJDYWNo
ZUxvY2sobV9zdXJmYWNlLmdldCgpKTsKLSAgICBUZXh0dXJlTWFwcGVyQ2FjaGVMb2NrKG1fcmVw
bGljYVN1cmZhY2UuZ2V0KCkpOwotCi0gICAgZ1RleHR1cmVNYXBwZXJDYWNoZS5wdXJnZSgpOwot
Ci0gICAgaWYgKGlzU3VyZmFjZSkgewotICAgICAgICBBU1NFUlQobV9zdXJmYWNlKTsKLSAgICAg
ICAgaWYgKCFtX3N1cmZhY2UtPmlzVmFsaWQoKSkKLSAgICAgICAgICAgIGlzRGlydHkgPSB0cnVl
OwotICAgICAgICBpZiAobV9zdGF0ZS50aWxlZCkgewotICAgICAgICAgICAgbV9zdXJmYWNlLT5y
ZXNldChvcHRpb25zLnZpc2libGVSZWN0LnNpemUoKSk7Ci0gICAgICAgICAgICBtX3N1cmZhY2Ut
PnNldE9mZnNldChvcHRpb25zLnZpc2libGVSZWN0LmxvY2F0aW9uKCkpOwotICAgICAgICB9IGVs
c2UgaWYgKGlzRGlydHkpCi0gICAgICAgICAgICBtX3N1cmZhY2UtPnJlc2V0KG1fbGF5ZXJUeXBl
ID09IFRyYW5zcGFyZW5jeUxheWVyID8gb3B0aW9ucy5zdXJmYWNlLT5zaXplKCkgOiBtX3NpemUp
OwotICAgICAgICBnVGV4dHVyZU1hcHBlckNhY2hlLm1hcmsobV9zdXJmYWNlLmdldCgpKTsKLSAg
ICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShtX3N1cmZhY2UuZ2V0KCkp
OwotCi0gICAgICAgIG9wdGlvbnNGb3JEZXNjZW5kYW50cy5zdXJmYWNlID0gbV9zdXJmYWNlLmdl
dCgpOwotICAgIH0gZWxzZSBpZiAobV9zdXJmYWNlKQotICAgICAgICBtX3N1cmZhY2UtPmRlc3Ry
b3koKTsKLQotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBtYXNrVGV4dHVyZTsKLSAgICBSZWZQ
dHI8Qml0bWFwVGV4dHVyZT4gcmVwbGljYU1hc2tUZXh0dXJlOwotICAgIGlmIChUZXh0dXJlTWFw
cGVyTm9kZSogbWFzayA9IG1fc3RhdGUubWFza0xheWVyKSB7Ci0gICAgICAgIG1hc2stPnVwbG9h
ZFRleHR1cmVGcm9tQ29udGVudChvcHRpb25zLnRleHR1cmVNYXBwZXIsIG9wdGlvbnMudmlzaWJs
ZVJlY3QpOwotICAgICAgICBtYXNrVGV4dHVyZSA9IG1hc2stPm1fdGV4dHVyZTsKLSAgICB9Ci0K
LSAgICBpZiAocmVwbGljYSAmJiByZXBsaWNhLT5tX3N0YXRlLm1hc2tMYXllcikgewotICAgICAg
ICByZXBsaWNhLT5tX3N0YXRlLm1hc2tMYXllci0+dXBsb2FkVGV4dHVyZUZyb21Db250ZW50KG9w
dGlvbnMudGV4dHVyZU1hcHBlciwgb3B0aW9ucy52aXNpYmxlUmVjdCk7Ci0gICAgICAgIHJlcGxp
Y2FNYXNrVGV4dHVyZSA9IHJlcGxpY2EtPm1fc3RhdGUubWFza0xheWVyLT5tX3RleHR1cmU7Ci0g
ICAgfQotCi0gICAgaW50IGNoaWxkcmVuU2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOwotICAgIGlm
IChpc0RpcnR5IHx8ICFpc1N1cmZhY2UgfHwgbV9zdGF0ZS50aWxlZCB8fCAhbV9zdXJmYWNlLT5p
c1ZhbGlkKCkpIHsKLSAgICAgICAgYm9vbCBkaWRQYWludFNlbGYgPSBmYWxzZTsKLSAgICAgICAg
aWYgKCFtX3N0YXRlLnByZXNlcnZlczNEIHx8IG1fY2hpbGRyZW4uaXNFbXB0eSgpKSB7Ci0gICAg
ICAgICAgICBwYWludFNlbGYob3B0aW9ucyk7Ci0gICAgICAgICAgICBkaWRQYWludFNlbGYgPSB0
cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fY2hpbGRyZW4uaXNFbXB0eSgpICYmICFp
c1N1cmZhY2UpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKG1fbGF5ZXJUeXBl
ID09IFNjaXNzb3JMYXllcikKLSAgICAgICAgICAgIG9wdGlvbnNGb3JEZXNjZW5kYW50cy5zY2lz
c29yUmVjdC5pbnRlcnNlY3QobV90cmFuc2Zvcm1zLnRhcmdldC5tYXBSZWN0KEludFJlY3QoMCwg
MCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpKTsKLQotICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNoaWxkcmVuU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBUZXh0dXJlTWFw
cGVyTm9kZSogbGF5ZXIgPSBtX2NoaWxkcmVuW2ldOwotICAgICAgICAgICAgaWYgKCFsYXllcikK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKCFkaWRQYWludFNl
bGYgJiYgbGF5ZXItPm1fdHJhbnNmb3Jtcy5jZW50ZXJaID49IDApIHsKLSAgICAgICAgICAgICAg
ICBwYWludFNlbGYob3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgZGlkUGFpbnRTZWxmID0gdHJ1
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxheWVyLT5wYWludFJlY3Vyc2l2ZShvcHRp
b25zRm9yRGVzY2VuZGFudHMpOwotICAgICAgICAgICAgaWYgKGlzU3VyZmFjZSkgewotICAgICAg
ICAgICAgICAgIEFTU0VSVChtX3N1cmZhY2UpOwotICAgICAgICAgICAgICAgIGdUZXh0dXJlTWFw
cGVyQ2FjaGUubWFyayhtX3N1cmZhY2UuZ2V0KCkpOwotICAgICAgICAgICAgICAgIG9wdGlvbnMu
dGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UobV9zdXJmYWNlLmdldCgpKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIWRpZFBhaW50U2VsZikgewotICAgICAgICAgICAg
cGFpbnRTZWxmKG9wdGlvbnMpOwotICAgICAgICAgICAgZGlkUGFpbnRTZWxmID0gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChtX2xheWVyVHlwZSA9PSBSb290TGF5ZXIgfHwgbV9s
YXllclR5cGUgPT0gRGVmYXVsdExheWVyIHx8IG1fbGF5ZXJUeXBlID09IFNjaXNzb3JMYXllcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fc3VyZmFjZSk7Ci0gICAgQml0bWFwVGV4
dHVyZSYgdGV4dHVyZSA9ICptX3N1cmZhY2UuZ2V0KCk7Ci0gICAgaWYgKHJlcGxpY2EpIHsKLSAg
ICAgICAgQVNTRVJUKG1fcmVwbGljYVN1cmZhY2UpOwotICAgICAgICBtX3JlcGxpY2FTdXJmYWNl
LT5yZXNldChvcHRpb25zLnN1cmZhY2UtPnNpemUoKSk7Ci0gICAgICAgIG1fcmVwbGljYVN1cmZh
Y2UtPnNldE9mZnNldChvcHRpb25zLnN1cmZhY2UtPm9mZnNldCgpKTsKLSAgICAgICAgZ1RleHR1
cmVNYXBwZXJDYWNoZS5tYXJrKG1fcmVwbGljYVN1cmZhY2UuZ2V0KCkpOwotICAgICAgICBvcHRp
b25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKG1fcmVwbGljYVN1cmZhY2UuZ2V0KCkpOwot
ICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKHRleHR1cmUsIHJlcGxp
Y2FSZWN0KCksIG1fdHJhbnNmb3Jtcy5yZXBsaWNhLCByZXBsaWNhLT5tX3N0YXRlLm9wYWNpdHks
IHJlcGxpY2FNYXNrVGV4dHVyZSA/IHJlcGxpY2FNYXNrVGV4dHVyZS5nZXQoKSA6IG1hc2tUZXh0
dXJlLmdldCgpKTsKLSAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSh0
ZXh0dXJlLCBJbnRSZWN0KEludFBvaW50KDAsIDApLCBvcHRpb25zLnN1cmZhY2UtPnNpemUoKSks
IFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIDEuMGYsIG1hc2tUZXh0dXJlLmdldCgpKTsKLSAgICAg
ICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShvcHRpb25zLnN1cmZhY2UpOwot
ICAgICAgICBnVGV4dHVyZU1hcHBlckNhY2hlLm1hcmsob3B0aW9ucy5zdXJmYWNlKTsKLSAgICAg
ICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqbV9yZXBsaWNhU3VyZmFjZS5n
ZXQoKSwgSW50UmVjdChJbnRQb2ludCgwLCAwKSwgb3B0aW9ucy5zdXJmYWNlLT5zaXplKCkpLCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBvcHRpb25zLm9wYWNpdHksIDApOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShvcHRp
b25zLnN1cmZhY2UpOwotICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUodGV4
dHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9sYXllclR5cGUgPT0gVHJhbnNw
YXJlbmN5TGF5ZXIgPyBJbnRSZWN0KEludFBvaW50KDAsIDApLCBvcHRpb25zLnN1cmZhY2UtPnNp
emUoKSkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fbGF5ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVy
ID8gVHJhbnNmb3JtYXRpb25NYXRyaXgoKSA6IG1fdHJhbnNmb3Jtcy50YXJnZXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub3BhY2l0eSwgbWFza1RleHR1cmUuZ2V0KCkp
OwotICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUubWFyaygmdGV4dHVyZSk7Ci19Ci0KLXZvaWQgVGV4
dHVyZU1hcHBlck5vZGU6OmNsZWFudXBUZXh0dXJlTWFwcGVyKCkKLXsKLSAgICBpZiAobV90ZXh0
dXJlKQotICAgICAgICBtX3RleHR1cmUtPmRlc3Ryb3koKTsKLSAgICBpZiAobV9zdXJmYWNlKQot
ICAgICAgICBtX3N1cmZhY2UtPmRlc3Ryb3koKTsKLSAgICBpZiAobV9yZXBsaWNhU3VyZmFjZSkK
LSAgICAgICAgbV9yZXBsaWNhU3VyZmFjZS0+ZGVzdHJveSgpOwotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9jaGlsZHJlbltp
XSkKLSAgICAgICAgICAgIG1fY2hpbGRyZW5baV0tPmNsZWFudXBUZXh0dXJlTWFwcGVyKCk7Ci0g
ICAgfQotICAgIGlmIChtX2xhc3RUZXh0dXJlTWFwcGVyKQotICAgICAgICBtX2xhc3RUZXh0dXJl
TWFwcGVyLT5jbGVhbnVwKCk7Ci19Ci0KLVRleHR1cmVNYXBwZXJOb2RlOjp+VGV4dHVyZU1hcHBl
ck5vZGUoKQorR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OkdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKKyAgICA6IEdyYXBoaWNzTGF5ZXIo
Y2xpZW50KQorICAgICwgbV9ub2RlKG5ldyBUZXh0dXJlTWFwcGVyTm9kZSgpKQorICAgICwgbV9j
aGFuZ2VNYXNrKDApCiB7Ci0gICAgc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgewotICAgICAgICBj
b25zdCBpbnQgY2hpbGRyZW5TaXplID0gbV9jaGlsZHJlbi5zaXplKCk7Ci0gICAgICAgIGZvciAo
aW50IGkgPSBjaGlsZHJlblNpemUtMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgICAgIEFTU0VS
VChtX2NoaWxkcmVuW2ldLT5tX3BhcmVudCA9PSB0aGlzKTsKLSAgICAgICAgICAgIG1fY2hpbGRy
ZW5baV0tPm1fcGFyZW50ID0gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAobV9wYXJlbnQp
Ci0gICAgICAgIG1fcGFyZW50LT5tX2NoaWxkcmVuLnJlbW92ZShtX3BhcmVudC0+bV9jaGlsZHJl
bi5maW5kKHRoaXMpKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6bm90aWZ5Q2hhbmdl
KENoYW5nZU1hc2sgY2hhbmdlTWFzaykKK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
Om5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hhbmdlTWFzayBjaGFuZ2VNYXNrKQog
ewogICAgIG1fY2hhbmdlTWFzayB8PSBjaGFuZ2VNYXNrOwotICAgIGlmICghbV9sYXllci0+Y2xp
ZW50KCkpCisgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fbGF5ZXIt
PmNsaWVudCgpLT5ub3RpZnlTeW5jUmVxdWlyZWQobV9sYXllcik7Ci19Ci0KLXZvaWQgVGV4dHVy
ZU1hcHBlck5vZGU6OnBlcmZvcm1Qb3N0U3luY09wZXJhdGlvbnMoKQotewotICAgIGNvbnN0IExh
eWVyVHlwZSBwcmV2TGF5ZXJUeXBlID0gbV9sYXllclR5cGU7Ci0gICAgY29tcHV0ZUxheWVyVHlw
ZSgpOwotICAgIGlmIChwcmV2TGF5ZXJUeXBlICE9IG1fbGF5ZXJUeXBlKQotICAgICAgICBtX3N0
YXRlLmRpcnR5ID0gdHJ1ZTsKLSAgICBpZiAobV90cmFuc2Zvcm1zLmRpcnR5KQotICAgICAgICBz
ZXROZWVkc0Rpc3BsYXkoKTsKLQotICAgIGNvbXB1dGVUcmFuc2Zvcm1hdGlvbnMoKTsKLSAgICBp
ZiAobV9zdGF0ZS5tYXNrTGF5ZXIgJiYgIW1fc3RhdGUuZGlydHkpCi0gICAgICAgIG1fc3RhdGUu
ZGlydHkgPSBtX3N0YXRlLm1hc2tMYXllci0+bV9zdGF0ZS5kaXJ0eTsKLSAgICBpZiAobV9zdGF0
ZS5yZXBsaWNhTGF5ZXIgJiYgIW1fc3RhdGUuZGlydHkpCi0gICAgICAgIG1fc3RhdGUuZGlydHkg
PSBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5kaXJ0eTsKLQotICAgIGNvbnN0IGludCBz
aXplID0gbV9jaGlsZHJlbi5zaXplKCk7Ci0KLSAgICBmb3IgKGludCBpID0gc2l6ZSAtIDE7IGkg
Pj0gMDsgLS1pKSB7Ci0gICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBsYXllciA9IG1fY2hpbGRy
ZW5baV07Ci0KLSAgICAgICAgbGF5ZXItPnBlcmZvcm1Qb3N0U3luY09wZXJhdGlvbnMoKTsKLSAg
ICAgICAgaWYgKCFtX3N0YXRlLmRpcnR5KQotICAgICAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IGxh
eWVyLT5tX3N0YXRlLmRpcnR5OwotICAgIH0KLSAgICBtX3N0YXRlLmhhc1N1cmZhY2VEZXNjZW5k
YW50cyA9IGhhc1N1cmZhY2VEZXNjZW5kYW50cygpOwotICAgIGlmIChtX3N0YXRlLmRpcnR5KQot
ICAgICAgICBtX3N0YXRlLmRlc2NlbmRhbnRzV2l0aENvbnRlbnQgPSBjb3VudERlc2NlbmRhbnRz
V2l0aENvbnRlbnQoKTsKLQotICAgIGlmIChtX3N0YXRlLnByZXNlcnZlczNEKQotICAgICAgICBz
b3J0QnlaT3JkZXIobV9jaGlsZHJlbiwgMCwgc2l6ZSk7Ci0gICAgaWYgKG1fc3RhdGUuZGlydHkp
IAotICAgICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBjbGllbnQoKS0+bm90aWZ5U3luY1Jl
cXVpcmVkKHRoaXMpOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRp
bmdTdGF0ZShib29sIHJlY3Vyc2UpCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpk
aWRTeW5jaHJvbml6ZSgpCiB7Ci0gICAgYm9vbCBuZWVkc1RvSW52YWxpZGF0ZVRyYW5zZm9ybSA9
IGZhbHNlOwotCi0gICAgaWYgKCFtX2xheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9jaGFuZ2VNYXNrID09IE5vQ2hhbmdlcykKLSAgICAgICAgZ290byBhZnRlckN1cnJlbnRMYXll
clN5bmM7Ci0KLSAgICBzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICBpZiAobV9wYXJlbnQpCi0gICAg
ICAgIG1fcGFyZW50LT5tX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmIChtX2N1cnJlbnRD
b250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSAmJiAobV9jaGFuZ2VNYXNrICYg
UGFyZW50Q2hhbmdlKSkgewotICAgICAgICAvLyBUaGUgV2ViQ29yZSBjb21wb3NpdG9yIG1hbmFn
ZXMgaXRlbSBvd25lcnNoaXAuIFdlIGhhdmUgdG8gbWFrZSBzdXJlIGdyYXBoaWNzdmlldyBkb2Vz
bid0Ci0gICAgICAgIC8vIHRyeSB0byBzbmF0Y2ggdGhhdCBvd25lcnNoaXAuCi0KLSAgICAgICAg
aWYgKCFtX2xheWVyLT5wYXJlbnQoKSkKLSAgICAgICAgICAgIG1fcGFyZW50ID0gMDsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbV9wYXJlbnQgPSB0b1RleHR1cmVNYXBwZXJOb2RlKG1fbGF5
ZXItPnBhcmVudCgpKTsKLQotICAgICAgICBpZiAoIW1fbGF5ZXItPnBhcmVudCgpICYmIG1fcGFy
ZW50KSB7Ci0gICAgICAgICAgICBzaXplX3QgaW5kZXggPSBtX3BhcmVudC0+bV9jaGlsZHJlbi5m
aW5kKHRoaXMpOwotICAgICAgICAgICAgbV9wYXJlbnQtPm1fY2hpbGRyZW4ucmVtb3ZlKGluZGV4
KTsKLSAgICAgICAgfQotCi0gICAgfQotCi0gICAgaWYgKG1fY2hhbmdlTWFzayAmIENoaWxkcmVu
Q2hhbmdlKSB7Ci0gICAgICAgIG1fY2hpbGRyZW4uY2xlYXIoKTsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2xheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
ICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIGNoaWxkID0gdG9UZXh0dXJlTWFwcGVyTm9kZSht
X2xheWVyLT5jaGlsZHJlbigpW2ldKSkgewotICAgICAgICAgICAgICAgIGlmICghY2hpbGQpCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIG1fY2hpbGRyZW4u
YXBwZW5kKGNoaWxkKTsKLSAgICAgICAgICAgICAgICBjaGlsZC0+bV9wYXJlbnQgPSB0aGlzOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1fc3RhdGUuZGlydHkgPSB0cnVlOwot
ICAgIH0KLQotICAgIGlmIChtX2NoYW5nZU1hc2sgJiAoU2l6ZUNoYW5nZSB8IENvbnRlbnRzUmVj
dENoYW5nZSkpIHsKLSAgICAgICAgSW50U2l6ZSB3YW50ZWRTaXplID0gSW50U2l6ZShtX2xheWVy
LT5zaXplKCkud2lkdGgoKSwgbV9sYXllci0+c2l6ZSgpLmhlaWdodCgpKTsKLSAgICAgICAgaWYg
KHdhbnRlZFNpemUuaXNFbXB0eSgpICYmIG1fcGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGUgPT0g
SFRNTENvbnRlbnRUeXBlKQotICAgICAgICAgICAgd2FudGVkU2l6ZSA9IEludFNpemUobV9sYXll
ci0+Y29udGVudHNSZWN0KCkud2lkdGgoKSwgbV9sYXllci0+Y29udGVudHNSZWN0KCkuaGVpZ2h0
KCkpOwotCi0gICAgICAgIGlmICh3YW50ZWRTaXplICE9IG1fc2l6ZSkgewotICAgICAgICAgICAg
bV9zaXplID0gSW50U2l6ZSh3YW50ZWRTaXplLndpZHRoKCksIHdhbnRlZFNpemUuaGVpZ2h0KCkp
OwotICAgICAgICAgICAgaWYgKG1fcGxhdGZvcm1DbGllbnQpCi0gICAgICAgICAgICAgICAgbV9w
bGF0Zm9ybUNsaWVudC0+c2V0U2l6ZUNoYW5nZWQobV9zaXplKTsKLSAgICAgICAgICAgIGNvbnN0
IGJvb2wgbmVlZHNUaWxpbmcgPSBtX3NpemUud2lkdGgoKSA+IDIwMDAgfHwgbV9zaXplLmhlaWdo
dCgpID4gMjAwMDsKLSAgICAgICAgICAgIGlmIChtX3N0YXRlLnRpbGVkICE9IG5lZWRzVGlsaW5n
KQotICAgICAgICAgICAgICAgIG1fc3RhdGUudGlsZWQgPSBuZWVkc1RpbGluZzsKLSAgICAgICAg
ICAgIG1fc3RhdGUuZGlydHkgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1f
Y2hhbmdlTWFzayAmIE1hc2tMYXllckNoYW5nZSkgewotICAgICAgIGlmIChUZXh0dXJlTWFwcGVy
Tm9kZSogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJOb2RlKG1fbGF5ZXItPm1hc2tMYXllcigpKSkK
LSAgICAgICAgICAgbGF5ZXItPm1fZWZmZWN0VGFyZ2V0ID0gdGhpczsKLSAgICB9Ci0KLSAgICBp
ZiAobV9jaGFuZ2VNYXNrICYgUmVwbGljYUxheWVyQ2hhbmdlKSB7Ci0gICAgICAgaWYgKFRleHR1
cmVNYXBwZXJOb2RlKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlck5vZGUobV9sYXllci0+cmVwbGlj
YUxheWVyKCkpKQotICAgICAgICAgICBsYXllci0+bV9lZmZlY3RUYXJnZXQgPSB0aGlzOwotICAg
IH0KLQotICAgIGlmIChtX2NoYW5nZU1hc2sgJiAoVHJhbnNmb3JtQ2hhbmdlIHwgU2l6ZUNoYW5n
ZSB8IEFuY2hvclBvaW50Q2hhbmdlIHwgUG9zaXRpb25DaGFuZ2UpKQotICAgICAgICBtX3RyYW5z
Zm9ybXMubG9jYWxEaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAobV9jaGFuZ2VNYXNrICYgKENoaWxk
cmVuVHJhbnNmb3JtQ2hhbmdlIHwgU2l6ZUNoYW5nZSkpCi0gICAgICAgIG1fdHJhbnNmb3Jtcy5w
ZXJzcGVjdGl2ZURpcnR5ID0gdHJ1ZTsKLQotICAgIGlmIChtX2NoYW5nZU1hc2sgJiAoQ2hpbGRy
ZW5UcmFuc2Zvcm1DaGFuZ2UgfCBQcmVzZXJ2ZXMzRENoYW5nZSB8IFRyYW5zZm9ybUNoYW5nZSB8
IEFuY2hvclBvaW50Q2hhbmdlIHwgU2l6ZUNoYW5nZSB8IENvbnRlbnRzUmVjdENoYW5nZSB8IEJh
Y2tmYWNlVmlzaWJpbGl0eUNoYW5nZSB8IFBvc2l0aW9uQ2hhbmdlIHwgTWFza0xheWVyQ2hhbmdl
IHwgRHJhd3NDb250ZW50Q2hhbmdlIHwgQ29udGVudENoYW5nZSB8IFJlcGxpY2FMYXllckNoYW5n
ZSkpICAgIHsKLSAgICAgICAgLy8gRHVlIHRvIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB3
YXkgV2ViQ29yZSBoYW5kbGVzIHRyYW5zZm9ybXMgYW5kIHRoZSB3YXkgUXQgaGFuZGxlcyB0cmFu
c2Zvcm1zLAotICAgICAgICAvLyBhbGwgdGhlc2UgZWxlbWVudHMgYWZmZWN0IHRoZSB0cmFuc2Zv
cm1zIG9mIGFsbCB0aGUgZGVzY2VuZGFudHMuCi0gICAgICAgIG5lZWRzVG9JbnZhbGlkYXRlVHJh
bnNmb3JtID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobV9jaGFuZ2VNYXNrICYgRGlzcGxheUNo
YW5nZSkgCi0gICAgICAgIG1fc3RhdGUuZGlydHkgPSB0cnVlOwotCi0gICAgbV9zdGF0ZS5tYXNr
TGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJOb2RlKG1fbGF5ZXItPm1hc2tMYXllcigpKTsKLSAgICBt
X3N0YXRlLnJlcGxpY2FMYXllciA9IHRvVGV4dHVyZU1hcHBlck5vZGUobV9sYXllci0+cmVwbGlj
YUxheWVyKCkpOwotICAgIG1fc3RhdGUucG9zID0gbV9sYXllci0+cG9zaXRpb24oKTsKLSAgICBt
X3N0YXRlLmFuY2hvclBvaW50ID0gbV9sYXllci0+YW5jaG9yUG9pbnQoKTsKLSAgICBtX3N0YXRl
LnNpemUgPSBtX2xheWVyLT5zaXplKCk7Ci0gICAgbV9zdGF0ZS50cmFuc2Zvcm0gPSBtX2xheWVy
LT50cmFuc2Zvcm0oKTsKLSAgICBtX3N0YXRlLmNvbnRlbnRzUmVjdCA9IG1fbGF5ZXItPmNvbnRl
bnRzUmVjdCgpOwotICAgIG1fc3RhdGUub3BhY2l0eSA9IG1fbGF5ZXItPm9wYWNpdHkoKTsKLSAg
ICBtX3N0YXRlLmNvbnRlbnRzUmVjdCA9IG1fbGF5ZXItPmNvbnRlbnRzUmVjdCgpOwotICAgIG1f
c3RhdGUucHJlc2VydmVzM0QgPSBtX2xheWVyLT5wcmVzZXJ2ZXMzRCgpOwotICAgIG1fc3RhdGUu
bWFza3NUb0JvdW5kcyA9IG1fbGF5ZXItPm1hc2tzVG9Cb3VuZHMoKTsKLSAgICBtX3N0YXRlLmRy
YXdzQ29udGVudCA9IG1fbGF5ZXItPmRyYXdzQ29udGVudCgpOwotICAgIG1fc3RhdGUuY29udGVu
dHNPcGFxdWUgPSBtX2xheWVyLT5jb250ZW50c09wYXF1ZSgpOwotICAgIG1fc3RhdGUuYmFja2Zh
Y2VWaXNpYmlsaXR5ID0gbV9sYXllci0+YmFja2ZhY2VWaXNpYmlsaXR5KCk7Ci0gICAgbV9zdGF0
ZS5jaGlsZHJlblRyYW5zZm9ybSA9IG1fbGF5ZXItPmNoaWxkcmVuVHJhbnNmb3JtKCk7Ci0gICAg
bV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9IG1fcGVuZGluZ0NvbnRlbnQuY29udGVudFR5
cGU7Ci0gICAgbV9jdXJyZW50Q29udGVudC5pbWFnZSA9IG1fcGVuZGluZ0NvbnRlbnQuaW1hZ2U7
Ci0gICAgbV9jdXJyZW50Q29udGVudC5tZWRpYSA9IG1fcGVuZGluZ0NvbnRlbnQubWVkaWE7Ci0g
ICAgbV9jdXJyZW50Q29udGVudC5iYWNrZ3JvdW5kQ29sb3IgPSBtX3BlbmRpbmdDb250ZW50LmJh
Y2tncm91bmRDb2xvcjsKLSAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSA9IG1fY3Vy
cmVudENvbnRlbnQubmVlZHNEaXNwbGF5IHx8IG1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5
OwotICAgIG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdC51bml0ZShtX3BlbmRpbmdD
b250ZW50Lm5lZWRzRGlzcGxheVJlY3QpOworICAgIG1fc3luY1F1ZXVlZCA9IGZhbHNlOworICAg
IG1fY2hhbmdlTWFzayA9IDA7CiAgICAgbV9wZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXkgPSBm
YWxzZTsKICAgICBtX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QgPSBJbnRSZWN0KCk7
Ci0gICAgbV9jaGFuZ2VNYXNrID0gTm9DaGFuZ2VzOwotICAgIGFmdGVyQ3VycmVudExheWVyU3lu
YzoKLSAgICBpZiAobmVlZHNUb0ludmFsaWRhdGVUcmFuc2Zvcm0pCi0gICAgICAgIGludmFsaWRh
dGVUcmFuc2Zvcm0oKTsKLQotICAgIGlmIChtX3N0YXRlLm1hc2tMYXllcikgewotICAgICAgICBt
X3N0YXRlLm1hc2tMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGUoZmFsc2UpOwotICAgICAgICBp
ZiAobV9zdGF0ZS5tYXNrTGF5ZXItPm1fc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX3N0
YXRlLm1hc2tMYXllci0+bV9zaXplID0gbV9zaXplOwotICAgIH0KLQotICAgIGlmIChtX3N0YXRl
LnJlcGxpY2FMYXllcikKLSAgICAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPnN5bmNDb21wb3Np
dGluZ1N0YXRlKGZhbHNlKTsKLQotI2lmIDAKLSAgICBpZiAobV9zdGF0ZS5kaXJ0eSAmJiBtX3Rl
eHR1cmUgJiYgbV90ZXh0dXJlLT5hbGxvd09mZmxpbmVUZXh0dXJlVXBsb2FkKCkpCi0gICAgICAg
IHVwbG9hZFRleHR1cmVGcm9tQ29udGVudCgwKTsKLSNlbmRpZgotCi0gICAgaWYgKCFyZWN1cnNl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBpbnQgY2hpbGRyZW5TaXplID0gbV9jaGls
ZHJlbi5zaXplKCk7Ci0gICAgZm9yIChpbnQgaSA9IGNoaWxkcmVuU2l6ZS0xOyBpID49IDA7IC0t
aSkKLSAgICAgICAgbV9jaGlsZHJlbltpXS0+c3luY0NvbXBvc2l0aW5nU3RhdGUodHJ1ZSk7Ci19
Ci0KLUdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCi0gICAgOiBHcmFwaGljc0xheWVyKGNsaWVu
dCkKLSAgICAsIG1fbm9kZShuZXcgVGV4dHVyZU1hcHBlck5vZGUodGhpcykpCi17CiB9CiAKIHZv
aWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1l
KQogewotICAgIG1fbm9kZS0+bV9uYW1lID0gbmFtZTsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRO
YW1lKG5hbWUpOwogfQogCiBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6fkdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyKCkKQEAgLTEwOTYsMjUgKzYwLDI1IEBAIEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyOjp+R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoKQogKi8KIHZvaWQgR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxheSgpCiB7Ci0gICAgbV9ub2RlLT5t
X3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheSA9IHRydWU7Ci0gICAgbV9ub2RlLT5ub3RpZnlD
aGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkRpc3BsYXlDaGFuZ2UpOworICAgIG1fcGVuZGluZ0Nv
bnRlbnQubmVlZHNEaXNwbGF5ID0gdHJ1ZTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBl
ck5vZGU6OkRpc3BsYXlDaGFuZ2UpOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkK
ICovCiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROZWVkc0Rpc3BsYXlJblJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChtX25vZGUtPm1fcGVuZGluZ0Nv
bnRlbnQubmVlZHNEaXNwbGF5KQorICAgIGlmIChtX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxh
eSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5uZWVkc0Rp
c3BsYXlSZWN0LnVuaXRlKEludFJlY3QocmVjdCkpOwotICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdl
KFRleHR1cmVNYXBwZXJOb2RlOjpEaXNwbGF5Q2hhbmdlKTsKKyAgICBtX3BlbmRpbmdDb250ZW50
Lm5lZWRzRGlzcGxheVJlY3QudW5pdGUoSW50UmVjdChyZWN0KSk7CisgICAgbm90aWZ5Q2hhbmdl
KFRleHR1cmVNYXBwZXJOb2RlOjpEaXNwbGF5Q2hhbmdlKTsKIH0KIAogLyogXHJlaW1wIChHcmFw
aGljc0xheWVyLmgpCiAqLwogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0UGFy
ZW50KEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewotICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRl
eHR1cmVNYXBwZXJOb2RlOjpQYXJlbnRDaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJl
TWFwcGVyTm9kZTo6UGFyZW50Q2hhbmdlKTsKICAgICBHcmFwaGljc0xheWVyOjpzZXRQYXJlbnQo
bGF5ZXIpOwogfQogCkBAIC0xMTIyLDcgKzg2LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcjo6c2V0UGFyZW50KEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogKi8KIGJvb2wgR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OnNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xh
eWVyKj4mIGNoaWxkcmVuKQogewotICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBw
ZXJOb2RlOjpDaGlsZHJlbkNoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJO
b2RlOjpDaGlsZHJlbkNoYW5nZSk7CiAgICAgcmV0dXJuIEdyYXBoaWNzTGF5ZXI6OnNldENoaWxk
cmVuKGNoaWxkcmVuKTsKIH0KIApAQCAtMTEzMCw3ICs5NCw3IEBAIGJvb2wgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OnNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4m
IGNoaWxkCiAqLwogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGQoR3Jh
cGhpY3NMYXllciogbGF5ZXIpCiB7Ci0gICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1h
cHBlck5vZGU6OkNoaWxkcmVuQ2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBl
ck5vZGU6OkNoaWxkcmVuQ2hhbmdlKTsKICAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZChsYXll
cik7CiB9CiAKQEAgLTExMzksNyArMTAzLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6YWRkQ2hpbGQoR3JhcGhpY3NMYXllciogbGF5ZXIpCiB2b2lkIEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyOjphZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllciogbGF5ZXIsIGludCBp
bmRleCkKIHsKICAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgobGF5ZXIsIGluZGV4
KTsKLSAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5D
aGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFu
Z2UpOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKQEAgLTExNDcsNyArMTExLDcg
QEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRBdEluZGV4KEdyYXBo
aWNzTGF5ZXIqIGxheWVyLCBpbnQgaW5kZXgKIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI6OmFkZENoaWxkQWJvdmUoR3JhcGhpY3NMYXllciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNp
YmxpbmcpCiB7CiAgICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUobGF5ZXIsIHNpYmxp
bmcpOwotICAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRy
ZW5DaGFuZ2UpOworICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNoaWxkcmVu
Q2hhbmdlKTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCkBAIC0xMTU2LDcgKzEy
MCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkQmVsb3coR3Jh
cGhpY3NMYXllciogbGF5ZXIsIEdyYXBoaWNzTGF5CiB7CiAKICAgICBHcmFwaGljc0xheWVyOjph
ZGRDaGlsZEJlbG93KGxheWVyLCBzaWJsaW5nKTsKLSAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShU
ZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShUZXh0
dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNz
TGF5ZXIuaCkKQEAgLTExNjQsMTAgKzEyOCw5IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXI6OmFkZENoaWxkQmVsb3coR3JhcGhpY3NMYXllciogbGF5ZXIsIEdyYXBoaWNzTGF5CiBi
b29sIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpyZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXll
ciogb2xkQ2hpbGQsIEdyYXBoaWNzTGF5ZXIqIG5ld0NoaWxkKQogewogICAgIGlmIChHcmFwaGlj
c0xheWVyOjpyZXBsYWNlQ2hpbGQob2xkQ2hpbGQsIG5ld0NoaWxkKSkgewotICAgICAgICBtX25v
ZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOworICAg
ICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNoaWxkcmVuQ2hhbmdlKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0x
MTc3LDcgKzE0MCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnJlbW92ZUZy
b21QYXJlbnQoKQogewogICAgIGlmICghcGFyZW50KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBt
X25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6UGFyZW50Q2hhbmdlKTsKKyAg
ICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlBhcmVudENoYW5nZSk7CiAgICAgR3Jh
cGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpOwogfQogCkBAIC0xMTg4LDcgKzE1MSw3IEBA
IHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE1hc2tMYXllcihHcmFwaGljc0xh
eWVyKiB2YWx1ZSkKICAgICBpZiAodmFsdWUgPT0gbWFza0xheWVyKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBHcmFwaGljc0xheWVyOjpzZXRNYXNrTGF5ZXIodmFsdWUpOwotICAgIG1fbm9kZS0+
bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpNYXNrTGF5ZXJDaGFuZ2UpOworICAgIG5v
dGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6TWFza0xheWVyQ2hhbmdlKTsKIH0KIAogCkBA
IC0xMTk5LDcgKzE2Miw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldFJl
cGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqIHZhbHVlKQogICAgIGlmICh2YWx1ZSA9PSBy
ZXBsaWNhTGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldFJl
cGxpY2F0ZWRCeUxheWVyKHZhbHVlKTsKLSAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJl
TWFwcGVyTm9kZTo6UmVwbGljYUxheWVyQ2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVy
ZU1hcHBlck5vZGU6OlJlcGxpY2FMYXllckNoYW5nZSk7CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhp
Y3NMYXllci5oKQpAQCAtMTIwOSw3ICsxNzIsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyOjpzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiB2YWx1ZSkKICAgICBpZiAodmFs
dWUgPT0gcG9zaXRpb24oKSkKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dFBvc2l0aW9uKHZhbHVlKTsKLSAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVy
Tm9kZTo6UG9zaXRpb25DaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9k
ZTo6UG9zaXRpb25DaGFuZ2UpOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKQEAg
LTEyMTksNyArMTgyLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0QW5j
aG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKICAgICBpZiAodmFsdWUgPT0gYW5j
aG9yUG9pbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldEFuY2hv
clBvaW50KHZhbHVlKTsKLSAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9k
ZTo6QW5jaG9yUG9pbnRDaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9k
ZTo6QW5jaG9yUG9pbnRDaGFuZ2UpOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkK
QEAgLTEyMzAsNyArMTkzLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0
U2l6ZShjb25zdCBGbG9hdFNpemUmIHZhbHVlKQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFw
aGljc0xheWVyOjpzZXRTaXplKHZhbHVlKTsKLSAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0
dXJlTWFwcGVyTm9kZTo6U2l6ZUNoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBw
ZXJOb2RlOjpTaXplQ2hhbmdlKTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCkBA
IC0xMjQxLDcgKzIwNCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldFRy
YW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdmFsdWUpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIEdyYXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybSh2YWx1ZSk7Ci0gICAgbV9ub2Rl
LT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlRyYW5zZm9ybUNoYW5nZSk7CisgICAg
bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpUcmFuc2Zvcm1DaGFuZ2UpOwogfQogCiAv
KiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKQEAgLTEyNTEsNyArMjE0LDcgQEAgdm9pZCBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgKICAgICBpZiAodmFsdWUgPT0gY2hpbGRyZW5UcmFuc2Zvcm0oKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuVHJhbnNmb3JtKHZh
bHVlKTsKLSAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRy
ZW5UcmFuc2Zvcm1DaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6
Q2hpbGRyZW5UcmFuc2Zvcm1DaGFuZ2UpOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIu
aCkKQEAgLTEyNjEsNyArMjI0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6
c2V0UHJlc2VydmVzM0QoYm9vbCB2YWx1ZSkKICAgICBpZiAodmFsdWUgPT0gcHJlc2VydmVzM0Qo
KSkKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldFByZXNlcnZlczNEKHZh
bHVlKTsKLSAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6UHJlc2Vy
dmVzM0RDaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6UHJlc2Vy
dmVzM0RDaGFuZ2UpOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKQEAgLTEyNzEs
NyArMjM0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TWFza3NUb0Jv
dW5kcyhib29sIHZhbHVlKQogICAgIGlmICh2YWx1ZSA9PSBtYXNrc1RvQm91bmRzKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICBHcmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKHZhbHVlKTsK
LSAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6TWFza3NUb0JvdW5k
c0NoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpNYXNrc1RvQm91
bmRzQ2hhbmdlKTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCkBAIC0xMjgwLDcg
KzI0Myw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldERyYXdzQ29udGVu
dChib29sIHZhbHVlKQogewogICAgIGlmICh2YWx1ZSA9PSBkcmF3c0NvbnRlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpE
cmF3c0NvbnRlbnRDaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6
RHJhd3NDb250ZW50Q2hhbmdlKTsKICAgICBHcmFwaGljc0xheWVyOjpzZXREcmF3c0NvbnRlbnQo
dmFsdWUpOwogfQogCkBAIC0xMjg4LDIyICsyNTEsMjIgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcjo6c2V0RHJhd3NDb250ZW50KGJvb2wgdmFsdWUpCiAqLwogdm9pZCBHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiB2YWx1
ZSkKIHsKLSAgICBpZiAodmFsdWUgPT0gbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50LmJhY2tncm91
bmRDb2xvcikKKyAgICBpZiAodmFsdWUgPT0gbV9wZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5kQ29s
b3IpCiAgICAgICAgIHJldHVybjsKLSAgICBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQuYmFja2dy
b3VuZENvbG9yID0gdmFsdWU7CisgICAgbV9wZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5kQ29sb3Ig
PSB2YWx1ZTsKICAgICBHcmFwaGljc0xheWVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IodmFsdWUpOwot
ICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpCYWNrZ3JvdW5kQ29s
b3JDaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6QmFja2dyb3Vu
ZENvbG9yQ2hhbmdlKTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCiAqLwogdm9p
ZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6Y2xlYXJCYWNrZ3JvdW5kQ29sb3IoKQogewot
ICAgIGlmICghbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xvci5pc1ZhbGlk
KCkpCisgICAgaWYgKCFtX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQuYmFja2dyb3Vu
ZENvbG9yID0gQ29sb3IoKTsKKyAgICBtX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xvciA9
IENvbG9yKCk7CiAgICAgR3JhcGhpY3NMYXllcjo6Y2xlYXJCYWNrZ3JvdW5kQ29sb3IoKTsKLSAg
ICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6QmFja2dyb3VuZENvbG9y
Q2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkJhY2tncm91bmRD
b2xvckNoYW5nZSk7CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQpAQCAtMTMxMiw3
ICsyNzUsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c09w
YXF1ZShib29sIHZhbHVlKQogewogICAgIGlmICh2YWx1ZSA9PSBjb250ZW50c09wYXF1ZSgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5v
ZGU6OkNvbnRlbnRzT3BhcXVlQ2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBl
ck5vZGU6OkNvbnRlbnRzT3BhcXVlQ2hhbmdlKTsKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250
ZW50c09wYXF1ZSh2YWx1ZSk7CiB9CiAKQEAgLTEzMjMsNyArMjg2LDcgQEAgdm9pZCBHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wgdmFsdWUpCiAg
ICAgaWYgKHZhbHVlID09IGJhY2tmYWNlVmlzaWJpbGl0eSgpKQogICAgICAgICByZXR1cm47CiAg
ICAgR3JhcGhpY3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KHZhbHVlKTsKLSAgICBtX25v
ZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6QmFja2ZhY2VWaXNpYmlsaXR5Q2hh
bmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkJhY2tmYWNlVmlzaWJp
bGl0eUNoYW5nZSk7CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQpAQCAtMTMzMyw3
ICsyOTYsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRPcGFjaXR5KGZs
b2F0IHZhbHVlKQogICAgIGlmICh2YWx1ZSA9PSBvcGFjaXR5KCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBHcmFwaGljc0xheWVyOjpzZXRPcGFjaXR5KHZhbHVlKTsKLSAgICBtX25vZGUtPm5vdGlm
eUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6T3BhY2l0eUNoYW5nZSk7CisgICAgbm90aWZ5Q2hh
bmdlKFRleHR1cmVNYXBwZXJOb2RlOjpPcGFjaXR5Q2hhbmdlKTsKIH0KIAogLyogXHJlaW1wIChH
cmFwaGljc0xheWVyLmgpCkBAIC0xMzQzLDE2ICszMDYsMTYgQEAgdm9pZCBHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHZhbHVlKQogICAg
IGlmICh2YWx1ZSA9PSBjb250ZW50c1JlY3QoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBo
aWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdCh2YWx1ZSk7Ci0gICAgbV9ub2RlLT5ub3RpZnlDaGFu
Z2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRzUmVjdENoYW5nZSk7CisgICAgbm90aWZ5Q2hh
bmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50c1JlY3RDaGFuZ2UpOwogfQogCiAvKiBccmVp
bXAgKEdyYXBoaWNzTGF5ZXIuaCkKICovCiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
OjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQogewotICAgIG1fbm9kZS0+bm90aWZ5
Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50Q2hhbmdlKTsKLSAgICBtX25vZGUtPm1f
cGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGUgPSBpbWFnZSA/IFRleHR1cmVNYXBwZXJOb2RlOjpE
aXJlY3RJbWFnZUNvbnRlbnRUeXBlIDogVGV4dHVyZU1hcHBlck5vZGU6OkhUTUxDb250ZW50VHlw
ZTsKLSAgICBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQuaW1hZ2UgPSBpbWFnZTsKKyAgICBub3Rp
ZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRDaGFuZ2UpOworICAgIG1fcGVuZGlu
Z0NvbnRlbnQuY29udGVudFR5cGUgPSBpbWFnZSA/IFRleHR1cmVNYXBwZXJOb2RlOjpEaXJlY3RJ
bWFnZUNvbnRlbnRUeXBlIDogVGV4dHVyZU1hcHBlck5vZGU6OkhUTUxDb250ZW50VHlwZTsKKyAg
ICBtX3BlbmRpbmdDb250ZW50LmltYWdlID0gaW1hZ2U7CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0
Q29udGVudHNUb0ltYWdlKGltYWdlKTsKIH0KIApAQCAtMTM2MCw5ICszMjMsOSBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdl
KQogKi8KIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzQmFja2dy
b3VuZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBtX25vZGUtPm5vdGlmeUNoYW5n
ZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudENoYW5nZSk7Ci0gICAgbV9ub2RlLT5tX3BlbmRp
bmdDb250ZW50LmNvbnRlbnRUeXBlID0gVGV4dHVyZU1hcHBlck5vZGU6OkNvbG9yQ29udGVudFR5
cGU7Ci0gICAgbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xvciA9IGNvbG9y
OworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudENoYW5nZSk7Cisg
ICAgbV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSA9IFRleHR1cmVNYXBwZXJOb2RlOjpDb2xv
ckNvbnRlbnRUeXBlOworICAgIG1fcGVuZGluZ0NvbnRlbnQuYmFja2dyb3VuZENvbG9yID0gY29s
b3I7CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNCYWNrZ3JvdW5kQ29sb3IoY29sb3Ip
OwogfQogCkBAIC0xMzcwLDEyICszMzMsMTIgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6c2V0Q29udGVudHNCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogdm9p
ZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3Jt
TGF5ZXIqIG1lZGlhKQogewogICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9NZWRpYSht
ZWRpYSk7Ci0gICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRl
bnRDaGFuZ2UpOwotICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSA9IG1l
ZGlhID8gVGV4dHVyZU1hcHBlck5vZGU6Ok1lZGlhQ29udGVudFR5cGUgOiBUZXh0dXJlTWFwcGVy
Tm9kZTo6SFRNTENvbnRlbnRUeXBlOworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9k
ZTo6Q29udGVudENoYW5nZSk7CisgICAgbV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSA9IG1l
ZGlhID8gVGV4dHVyZU1hcHBlck5vZGU6Ok1lZGlhQ29udGVudFR5cGUgOiBUZXh0dXJlTWFwcGVy
Tm9kZTo6SFRNTENvbnRlbnRUeXBlOwogICAgIGlmIChtZWRpYSkKLSAgICAgICAgbV9ub2RlLT5t
X3BlbmRpbmdDb250ZW50Lm1lZGlhID0gc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlclZpZGVvTGF5
ZXIqPihtZWRpYSk7CisgICAgICAgIG1fcGVuZGluZ0NvbnRlbnQubWVkaWEgPSBzdGF0aWNfY2Fz
dDxUZXh0dXJlTWFwcGVyVmlkZW9MYXllcio+KG1lZGlhKTsKICAgICBlbHNlCi0gICAgICAgIG1f
bm9kZS0+bV9wZW5kaW5nQ29udGVudC5tZWRpYSA9IDA7CisgICAgICAgIG1fcGVuZGluZ0NvbnRl
bnQubWVkaWEgPSAwOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKQEAgLTEzODQs
NyArMzQ3LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNP
cmllbnRhdGlvbihDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3IKIHsKICAgICBpZiAoY29udGVudHNP
cmllbnRhdGlvbigpID09IG9yaWVudGF0aW9uKQogICAgICAgICByZXR1cm47Ci0gICAgbV9ub2Rl
LT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRzT3JpZW50YXRpb25DaGFu
Z2UpOworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudHNPcmllbnRh
dGlvbkNoYW5nZSk7CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcmllbnRhdGlvbihv
cmllbnRhdGlvbik7CiB9CiAKQEAgLTEzOTIsMTcgKzM1NSwxNCBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c09yaWVudGF0aW9uKENvbXBvc2l0aW5nQ29vcmRp
bmF0ZXNPcgogKi8KIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnN5bmNDb21wb3Np
dGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCiB7Ci0gICAgbV9ub2RlLT5zeW5jQ29tcG9zaXRp
bmdTdGF0ZShmYWxzZSk7Ci0gICAgbV9ub2RlLT5wZXJmb3JtUG9zdFN5bmNPcGVyYXRpb25zKCk7
CisgICAgbV9ub2RlLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSh0aGlzLCBmYWxzZSk7CiB9CiAKIC8q
IFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQogKi8KIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlKCkKIHsKLSAgICBHcmFwaGljc0xheWVyOjpzeW5j
Q29tcG9zaXRpbmdTdGF0ZSgpOwotICAgIG1fbm9kZS0+c3luY0NvbXBvc2l0aW5nU3RhdGUodHJ1
ZSk7Ci0gICAgbV9ub2RlLT5wZXJmb3JtUG9zdFN5bmNPcGVyYXRpb25zKCk7CisgICAgbV9ub2Rl
LT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSh0aGlzLCB0cnVlKTsKIH0KIAogLyogXHJlaW1wIChHcmFw
aGljc0xheWVyLmgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaAppbmRleCAzNmViZDc0Li44NWZh
M2VlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKQEAgLTI0LDEzICsyNCwxMiBAQAogI2lu
Y2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTm9kZS5oIgogCiAj
aWYgRU5BQkxFKDNEX0NBTlZBUykKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2Vu
ZGlmCiAKLSNkZWZpbmUgRU5BQkxFX1RFWE1BUF9BTklNQVRJT04gMAotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJOb2RlOwpAQCAtODUsMTIgKzg0LDI0IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIE5hdGl2ZUxheWVyIG5hdGl2ZUxheWVyKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50
U2l6ZSYgLypib3hTaXplKi8sIGNvbnN0IEFuaW1hdGlvbiosCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIC8qa2V5ZnJhbWVzTmFtZSovLCBkb3VibGUgLyp0aW1l
T2Zmc2V0Ki8pIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGFkZEFuaW1hdGlv
bihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUmIC8qYm94U2l6ZSovLCBj
b25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmIC8qa2V5ZnJhbWVzTmFtZSovLCBkb3VibGUg
Lyp0aW1lT2Zmc2V0Ki8pIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2b2lkIG5vdGlmeUNoYW5n
ZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hhbmdlTWFzayBjaGFuZ2VNYXNrKTsKKyAgICBpbmxpbmUg
VGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnREYXRhJiBwZW5kaW5nQ29udGVudCgpIHsgcmV0dXJu
IG1fcGVuZGluZ0NvbnRlbnQ7IH0KKyAgICBpbmxpbmUgaW50IGNoYW5nZU1hc2soKSBjb25zdCB7
IHJldHVybiBtX2NoYW5nZU1hc2s7IH0KKyAgICB2b2lkIGRpZFN5bmNocm9uaXplKCk7CiAKIHBy
aXZhdGU6CiAgICAgT3duUHRyPFRleHR1cmVNYXBwZXJOb2RlPiBtX25vZGU7CisgICAgYm9vbCBt
X3N5bmNRdWV1ZWQ7CisgICAgaW50IG1fY2hhbmdlTWFzazsKKyAgICBUZXh0dXJlTWFwcGVyTm9k
ZTo6Q29udGVudERhdGEgbV9wZW5kaW5nQ29udGVudDsKIH07CiAKK2lubGluZSBzdGF0aWMgR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIqIHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoR3Jh
cGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyKj4obGF5ZXIpOworfQorCiB9CiAjZW5kaWYgLy8gR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXJfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlci5oCmluZGV4IDg5ODk5YzAuLjI1MDEyNWIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKQEAgLTU3LDYgKzU3LDEw
IEBAIHB1YmxpYzoKICAgICAgICAgbV9jb250ZW50U2l6ZSA9IHNpemU7CiAgICAgfQogCisgICAg
dmlydHVhbCB2b2lkIHBhY2soKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdW5wYWNrKCkgeyB9Cisg
ICAgdmlydHVhbCBib29sIGlzUGFja2VkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwogICAg
IHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVj
dCYgZGlydHlSZWN0KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCkgPSAwOwogICAg
IHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnRNZWRpYSgpCkBAIC03
Miw2ICs3Niw5IEBAIHB1YmxpYzoKICAgICBpbmxpbmUgSW50U2l6ZSBjb250ZW50U2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGVudFNpemU7IH0KICAgICBpbmxpbmUgdm9pZCBzZXRPZmZzZXQo
Y29uc3QgSW50UG9pbnQmIG8pIHsgbV9vZmZzZXQgPSBvOyB9CiAgICAgaW5saW5lIEludFBvaW50
IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisKK3Byb3RlY3RlZDoKKwogcHJp
dmF0ZToKICAgICBpbnQgbV9sb2NrQ291bnQ7CiAgICAgSW50U2l6ZSBtX2NvbnRlbnRTaXplOwpA
QCAtODEsMTEgKzg4LDExIEBAIHByaXZhdGU6CiAKIC8vIEEgImNvbnRleHQiIGNsYXNzIHVzZWQg
dG8gZW5jYXBzdWxhdGUgYWNjZWxlcmF0ZWQgdGV4dHVyZSBtYXBwaW5nIGZ1bmN0aW9uczogaS5l
LiBkcmF3aW5nIGEgdGV4dHVyZQogLy8gb250byB0aGUgc2NyZWVuIG9yIGludG8gYW5vdGhlciB0
ZXh0dXJlIHdpdGggYSBzcGVjaWZpZWQgdHJhbnNmb3JtLCBvcGFjaXR5IGFuZCBtYXNrLgotY2xh
c3MgVGV4dHVyZU1hcHBlciA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmVNYXBwZXI+IHsKK2Ns
YXNzIFRleHR1cmVNYXBwZXIgewogICAgIGZyaWVuZCBjbGFzcyBCaXRtYXBUZXh0dXJlOwogCiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlcj4gY3JlYXRlKEdyYXBo
aWNzQ29udGV4dCopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVNYXBwZXI+IGNyZWF0
ZShHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCA9IDApOwogICAgIHZpcnR1YWwgflRl
eHR1cmVNYXBwZXIoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBC
aXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBtYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBmbG9hdCBv
cGFjaXR5ID0gMS4wZiwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUgPSAwKSA9IDA7
CkBAIC0xMDEsOCArMTA4LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRDbGlwKGNv
bnN0IEludFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGFsbG93U3VyZmFjZUZvclJvb3Qo
KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0
ZVRleHR1cmUoKSA9IDA7Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiB0eXBlKCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwKCkge30KIAogICAgIHZvaWQgc2V0SW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7IG1faW50ZXJw
b2xhdGlvblF1YWxpdHkgPSBxdWFsaXR5OyB9CiAgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUo
aW50IG1vZGUpIHsgbV90ZXh0RHJhd2luZ01vZGUgPSBtb2RlOyB9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY3OTU4NgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcApA
QCAtMCwwICsxLDg3NSBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTm9kZS5oIgorCisj
aW5jbHVkZSAiR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBUZXh0dXJlTWFwcGVyQ2FjaGUgeworcHVibGljOgorICAgIHZvaWQgbWFy
ayhCaXRtYXBUZXh0dXJlKiB0ZXh0dXJlKTsKKworICAgIGNsYXNzIEVudHJ5IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlOworICAgICAgICBFbnRy
eSgpIDogcHJldmlvdXNDb3N0KDApIHsgfQorICAgICAgICBpbmxpbmUgaW50IGNhbGN1bGF0ZUNv
c3QoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIXRleHR1cmUgfHwgIXRleHR1
cmUtPmlzVmFsaWQoKSB8fCB0ZXh0dXJlLT5pc1BhY2tlZCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgY29uc3QgSW50U2l6ZSB0ZXh0dXJlU2l6ZSA9IHRleHR1cmUt
PnNpemUoKTsKKyAgICAgICAgICAgIC8vIEFuIGltYWdlJ3MgY29zdCBpbiBieXRlcyBpcyB3aWR0
aCAqIGhlaWdodCAqIGJ5dGVzIHBlciBwaXhlbCAoNCkuCisgICAgICAgICAgICByZXR1cm4gdGV4
dHVyZVNpemUud2lkdGgoKSAqIHRleHR1cmVTaXplLmhlaWdodCgpICogNDsKKyAgICAgICAgfQor
ICAgICAgICBFbnRyeShCaXRtYXBUZXh0dXJlKiBuZXdUZXh0dXJlKQorICAgICAgICAgICAgOiB0
ZXh0dXJlKG5ld1RleHR1cmUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgRW50cnkmIG90aGVyKSBjb25zdCB7IHJldHVybiB0ZXh0dXJlID09IG90
aGVyLnRleHR1cmU7IH0KKyAgICAgICAgaW50IHByZXZpb3VzQ29zdDsKKyAgICB9OworCisgICAg
VGV4dHVyZU1hcHBlckNhY2hlKCkKKyAgICAgICAgOiBtX3RvdGFsQ29zdCgwKQorICAgIHsKKyAg
ICB9CisKKyAgICB2b2lkIHB1cmdlKCk7CisgICAgVmVjdG9yPEVudHJ5PiBtX2RhdGE7CisgICAg
aW50IG1fdG90YWxDb3N0OworI2lmbmRlZiBURVhNQVBfVEVYVFVSRV9DQUNIRV9LQlMKKyNkZWZp
bmUgVEVYTUFQX1RFWFRVUkVfQ0FDSEVfS0JTIDI0ICogMTAyNAorI2VuZGlmCisgICAgc3RhdGlj
IGNvbnN0IGludCBNYXhDb3N0ID0gVEVYTUFQX1RFWFRVUkVfQ0FDSEVfS0JTICogMTAyNDsKKyAg
ICBzdGF0aWMgY29uc3QgaW50IFB1cmdlQW1vdW50ID0gTWF4Q29zdCAvIDQ7Cit9OworCisKK3Zv
aWQgVGV4dHVyZU1hcHBlckNhY2hlOjpwdXJnZSgpCit7CisgICAgY29uc3QgaW50IHNpemUgPSBt
X2RhdGEuc2l6ZSgpOworCisgICAgaWYgKG1fdG90YWxDb3N0IDw9IFRleHR1cmVNYXBwZXJDYWNo
ZTo6TWF4Q29zdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRW5zdXJlIHRoYXQgd2UgaGF2
ZSB0aGUgcmlnaHQgY291bnQuIEl0IG1pZ2h0IGJlIGluYWNjdXJhdGUgaWYgY29udGVudCBjaGFu
Z2VkIHNpemUuCisgICAgLy8gV2Ugb25seSBkbyB0aGlzIHdoZW4gd2UncmUgYWN0dWFsbHkgcmVh
ZHkgdG8gcHVyZ2UuCisgICAgbV90b3RhbENvc3QgPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKQorICAgICAgICBtX3RvdGFsQ29zdCArPSBtX2RhdGFbaV0uY2FsY3VsYXRl
Q29zdCgpOworCisKKyAgICBmb3IgKGludCBpID0gc2l6ZS0xOyBpID49IDAgJiYgbV90b3RhbENv
c3QgPiBUZXh0dXJlTWFwcGVyQ2FjaGU6Ok1heENvc3QgLSBUZXh0dXJlTWFwcGVyQ2FjaGU6OlB1
cmdlQW1vdW50OyAtLWkpIHsKKyAgICAgICAgRW50cnkmIGVudHJ5ID0gbV9kYXRhW2ldOworICAg
ICAgICBpZiAoZW50cnkudGV4dHVyZS0+aXNMb2NrZWQoKSB8fCAhZW50cnkudGV4dHVyZS0+aXNW
YWxpZCgpIHx8IGVudHJ5LnRleHR1cmUtPmlzUGFja2VkKCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgbV90b3RhbENvc3QgLT0gZW50cnkucHJldmlvdXNDb3N0OworICAgICAgICBl
bnRyeS50ZXh0dXJlLT5wYWNrKCk7CisgICAgICAgIG1fZGF0YS5yZW1vdmUoaSk7CisgICAgfQor
fQorCit2b2lkIFRleHR1cmVNYXBwZXJDYWNoZTo6bWFyayhCaXRtYXBUZXh0dXJlKiB0ZXh0dXJl
KQoreworICAgIGlmICghdGV4dHVyZSB8fCAhdGV4dHVyZS0+aXNWYWxpZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBFbnRyeSBlbnRyeSh0ZXh0dXJlKTsKKyAgICBzaXplX3QgaW5kZXggPSBt
X2RhdGEuZmluZChlbnRyeSk7CisgICAgaWYgKCFpbmRleCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaW50IHByZXZpb3VzQ29zdCA9IDA7CisKKyAgICBpZiAoaW5kZXggPCBtX2RhdGEuc2l6ZSgp
KSB7CisgICAgICAgIHByZXZpb3VzQ29zdCA9IG1fZGF0YVtpbmRleF0ucHJldmlvdXNDb3N0Owor
ICAgICAgICBtX2RhdGEucmVtb3ZlKGluZGV4KTsKKyAgICB9CisgICAgY29uc3QgaW50IGNvc3Qg
PSBlbnRyeS5jYWxjdWxhdGVDb3N0KCk7CisgICAgbV90b3RhbENvc3QgLT0gcHJldmlvdXNDb3N0
OworICAgIG1fdG90YWxDb3N0ICs9IChlbnRyeS5wcmV2aW91c0Nvc3QgPSBjb3N0KTsKKyAgICBt
X2RhdGEucHJlcGVuZChlbnRyeSk7Cit9CisKK2NsYXNzIFRleHR1cmVNYXBwZXJDYWNoZUxvY2sg
eworcHVibGljOgorICAgIFRleHR1cmVNYXBwZXJDYWNoZUxvY2soQml0bWFwVGV4dHVyZSogdGV4
dHVyZSkgOiBtX3RleHR1cmUodGV4dHVyZSkKKyAgICB7CisgICAgICAgIGlmIChtX3RleHR1cmUp
CisgICAgICAgICAgICBtX3RleHR1cmUtPmxvY2soKTsKKyAgICB9CisgICAgflRleHR1cmVNYXBw
ZXJDYWNoZUxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgICAg
IG1fdGV4dHVyZS0+dW5sb2NrKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlZlB0cjxCaXRt
YXBUZXh0dXJlPiBtX3RleHR1cmU7Cit9OworCisKK1RleHR1cmVNYXBwZXJDYWNoZSogVGV4dHVy
ZU1hcHBlck5vZGU6OmNhY2hlKCkKK3sKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogcm9vdCA9IHJv
b3RMYXllcigpOworICAgIGlmICghcm9vdCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFy
b290LT5tX2NhY2hlKQorICAgICAgICByb290LT5tX2NhY2hlID0gbmV3IFRleHR1cmVNYXBwZXJD
YWNoZTsKKyAgICByZXR1cm4gcm9vdC0+bV9jYWNoZTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEludFJlY3QgcmVjdCkKK3sKKyAgICBpZiAobV9w
bGF0Zm9ybUNsaWVudCkgeworICAgICAgICBpZiAobV9zdGF0ZS5oYXNTdXJmYWNlRGVzY2VuZGFu
dHMpIHsKKyAgICAgICAgICAgIG1fcGxhdGZvcm1DbGllbnQtPnNldE5lZWRzRGlzcGxheSgpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJlY3QuaW50ZXJzZWN0KElu
dFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICBp
ZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fcGxhdGZv
cm1DbGllbnQtPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmICghbV9wYXJlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGFy
ZW50LT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBl
ck5vZGU6OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAgaWYgKG1fZWZmZWN0VGFyZ2V0KQorICAg
ICAgICBtX2VmZmVjdFRhcmdldC0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgaWYgKG1fdHJhbnNm
b3Jtcy50YXJnZXRCb3VuZGluZ1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKG1fc3RhdGUuZHJhd3NDb250ZW50IHx8IG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUg
IT0gSFRNTENvbnRlbnRUeXBlKQorICAgICAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3QobV90cmFu
c2Zvcm1zLnRhcmdldEJvdW5kaW5nUmVjdCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6
OnNldFBsYXRmb3JtTGF5ZXJDbGllbnQoVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50KiBjbGllbnQp
Cit7CisgICAgbV9wbGF0Zm9ybUNsaWVudCA9IGNsaWVudDsKK30KKworaW50IFRleHR1cmVNYXBw
ZXJOb2RlOjpjb21wYXJlR3JhcGhpY3NMYXllcnNaVmFsdWUoY29uc3Qgdm9pZCogYSwgY29uc3Qg
dm9pZCogYikKK3sKKyAgICB0eXBlZGVmIGNvbnN0IFRleHR1cmVNYXBwZXJOb2RlKiBOb2RlUHRy
OworICAgIGNvbnN0IE5vZGVQdHIqIG5vZGVBID0gc3RhdGljX2Nhc3Q8Y29uc3QgTm9kZVB0cio+
KGEpOworICAgIGNvbnN0IE5vZGVQdHIqIG5vZGVCID0gc3RhdGljX2Nhc3Q8Y29uc3QgTm9kZVB0
cio+KGIpOworICAgIHJldHVybiBpbnQoKCgqbm9kZUEpLT5tX3RyYW5zZm9ybXMuY2VudGVyWiAt
ICgqbm9kZUIpLT5tX3RyYW5zZm9ybXMuY2VudGVyWikgKiAxMDAwKTsKK30KKwordm9pZCBUZXh0
dXJlTWFwcGVyTm9kZTo6c29ydEJ5Wk9yZGVyKFZlY3RvcjxUZXh0dXJlTWFwcGVyTm9kZSogPiYg
YXJyYXksIGludCBmaXJzdCwgaW50IGxhc3QpCit7CisgICAgcXNvcnQoYXJyYXkuZGF0YSgpLCBh
cnJheS5zaXplKCksIHNpemVvZihUZXh0dXJlTWFwcGVyTm9kZSopLCBUZXh0dXJlTWFwcGVyTm9k
ZTo6Y29tcGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKTsKK30KKworYm9vbCBUZXh0dXJlTWFwcGVy
Tm9kZTo6aGFzU3VyZmFjZURlc2NlbmRhbnRzKCkgY29uc3QKK3sKKyAgICBpZiAobV9sYXllclR5
cGUgPT0gQ2xpcExheWVyIHx8IG1fbGF5ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVyIHx8IG1f
c3RhdGUucmVwbGljYUxheWVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjb25zdCBpbnQg
c2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7CisgICAgICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSogY2hpbGQgPSBtX2NoaWxkcmVu
W2ldKSB7CisgICAgICAgICAgICBpZiAoY2hpbGQtPmhhc1N1cmZhY2VEZXNjZW5kYW50cygpKQor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKworaW50IFRleHR1cmVNYXBwZXJOb2RlOjpjb3VudERlc2NlbmRhbnRzV2l0
aENvbnRlbnQoKSBjb25zdAoreworICAgIGlmICghbV9zdGF0ZS52aXNpYmxlIHx8IG1fc3RhdGUu
b3BhY2l0eSA8IDAuMDAxKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpbnQgZGVzY2VuZGFudHNX
aXRoQ29udGVudCA9IChtX3N0YXRlLmRyYXdzQ29udGVudCB8fCBtX2N1cnJlbnRDb250ZW50LmNv
bnRlbnRUeXBlICE9IEhUTUxDb250ZW50VHlwZSkgPyAxIDogMDsKKworICAgIGNvbnN0IGludCBz
aXplID0gbV9jaGlsZHJlbi5zaXplKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyAr
K2kpIHsKKyAgICAgICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiBjaGlsZCA9IG1fY2hpbGRyZW5b
aV0pCisgICAgICAgICAgICBkZXNjZW5kYW50c1dpdGhDb250ZW50ICs9IGNoaWxkLT5jb3VudERl
c2NlbmRhbnRzV2l0aENvbnRlbnQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGVzY2VuZGFudHNX
aXRoQ29udGVudDsKK30KKworVGV4dHVyZU1hcHBlck5vZGUqIFRleHR1cmVNYXBwZXJOb2RlOjp0
b1RleHR1cmVNYXBwZXJOb2RlKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIHJldHVybiBs
YXllciA/IHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJOb2RlKj4obGF5ZXItPnBsYXRmb3JtTGF5
ZXIoKSkgOiAwOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlTGF5ZXJUeXBl
KCkKK3sKKyAgICBjb25zdCBib29sIHNlbGZIYXNDb250ZW50ID0gbV9zdGF0ZS5kcmF3c0NvbnRl
bnQgfHwgKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgIT0gSFRNTENvbnRlbnRUeXBlKTsK
KyAgICBjb25zdCBib29sIGhhc0Rlc2NlbmRhbnRzV2l0aENvbnRlbnQgPSBtX3N0YXRlLmRlc2Nl
bmRhbnRzV2l0aENvbnRlbnQgLSAoc2VsZkhhc0NvbnRlbnQgPyAxIDogMCk7CisgICAgY29uc3Qg
Ym9vbCBoYXNUcmFuc3BhcmVuY3kgPSBtX3N0YXRlLm9wYWNpdHkgPCAwLjk5IHx8IG1fc3RhdGUu
bWFza0xheWVyOworICAgIGNvbnN0IGJvb2wgaGFzUmVwbGljYSA9IG1fc3RhdGUucmVwbGljYUxh
eWVyOworCisgICAgLy8gIERlZmF1bHRMYXllcjogZHJhd3MgaXRzZWxmIGFuZCBpdHMgY2hpbGRy
ZW4gZGlyZWN0bHkgdG8gdGhlIGN1cnJlbnQgZnJhbWVidWZmZXIuCisgICAgLy8gICAgICAgICAg
ICAgICAgYW55IGxheWVyIHRoYXQgZG9lc24ndCBjb25mb3JtIHRvIHRoZSBvdGhlciBydWxlcyBp
cyBhIERlZmF1bHRMYXllci4KKyAgICBtX2xheWVyVHlwZSA9IERlZmF1bHRMYXllcjsKKworICAg
IC8vICBSb290TGF5ZXI6IHRoZSB0b3AgbGV2ZWwuIERyYXdzIHRvIGEgZnJhbWVidWZmZXIsIGFu
ZCB0aGUgdGFyZ2V0IHRleHR1cmUgZHJhd3MgaW50byB0aGUgdmlld3BvcnQuCisgICAgLy8gICAg
ICAgICAgICBvbmx5IG9uZSBsYXllciBpcyB0aGUgcm9vdCBsYXllci4KKyAgICBpZiAoIW1fcGFy
ZW50ICYmICFtX2VmZmVjdFRhcmdldCkgeworICAgICAgICBtX2xheWVyVHlwZSA9IFJvb3RMYXll
cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEEgbGF5ZXIgd2l0aCBubyBjb250
ZW50cyBpcyBhbHdheXMgYSBkZWZhdWx0IGxheWVyLgorICAgIGlmICghbV9zdGF0ZS5kZXNjZW5k
YW50c1dpdGhDb250ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyAgQ2xpcExheWVyOiBj
cmVhdGVzIGEgbmV3IGZyYW1lYnVmZmVyLCB0aGUgc2l6ZSBvZiB0aGUgbGF5ZXIsIGFuZCB0aGVu
IHBhaW50cyBpdCB0byB0aGUgZW5jbG9zaW5nIEJpdG1hcFRleHR1cmUgd2l0aCB0aGUgbGF5ZXIn
cyB0cmFuc2Zvcm0vb3BhY2l0eS4KKyAgICAvLyAgICAgICAgICAgICAgQSBjbGlwIGxheWVyIGlz
IGEgbGF5ZXIgdGhhdCBtYXNrcyB0byBib3VuZHMsIGRvZXNuJ3QgcHJlc2VydmUgM0QsIGhhcyBj
aGlsZHJlbiwgYW5kIGhhcyBhIHRyYW5zcGFyZW5jeS9tYXNrIG9yIGEgbm9uLXJlY3Rhbmd1bGFy
IHRyYW5zZm9ybS4KKyAgICBpZiAoaGFzRGVzY2VuZGFudHNXaXRoQ29udGVudCAmJiBtX3N0YXRl
Lm1hc2tMYXllcikgeworICAgICAgICBtX2xheWVyVHlwZSA9IENsaXBMYXllcjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vICBTY2lzc29yTGF5ZXI6IGRyYXdzIHRvIHRoZSBjdXJy
ZW50IGZyYW1lYnVmZmVyLCBhbmQgYXBwbGllcyBhbiBleHRyYSBzY2lzc29yIGJlZm9yZSBkcmF3
aW5nIGl0cyBjaGlsZHJlbi4KKyAgICAvLyAgICAgICAgICAgICAgICBBIHNjaXNzb3IgbGF5ZXIg
aXMgYSBsYXllciB3aXRoIGNoaWxkcmVuIHRoYXQgbWFza3MgdG8gYm91bmRzLCBpcyBub3QgYSB0
cmFuc3BhcmVuY3kgbGF5ZXIsIGFuZCBoYXMgYSByZWN0YW5ndWxhciBjbGlwLgorICAgIGlmICht
X3N0YXRlLm1hc2tzVG9Cb3VuZHMgJiYgaGFzRGVzY2VuZGFudHNXaXRoQ29udGVudCkgeworICAg
ICAgICBpZiAoaGFzVHJhbnNwYXJlbmN5IHx8ICFtX3N0YXRlLnRyYW5zZm9ybS5pc0lkZW50aXR5
T3JUcmFuc2xhdGlvbigpIHx8IG1fcGFyZW50LT5tX3N0YXRlLnByZXNlcnZlczNEKQorICAgICAg
ICAgICAgbV9sYXllclR5cGUgPSBDbGlwTGF5ZXI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1fbGF5ZXJUeXBlID0gU2Npc3NvckxheWVyOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gIFRyYW5zcGFyZW5jeUxheWVyOiBjcmVhdGVzIGEgbmV3IGZyYW1lYnVmZmVyIGlkZXRp
Y2FsIGluIHNpemUgdG8gdGhlIGN1cnJlbnQgZnJhbWVidWZmZXIuIFRoZW4gZHJhd3MgdGhlIGZi
J3MgdGV4dHVyZSB0byB0aGUgY3VycmVudCBmcmFtZWJ1ZmZlciB3aXRoIGlkZW50aXR5IHRyYW5z
Zm9ybS4KKyAgICAvLyAgICAgICAgICAgICAgICAgICAgIFVzZWQgZm9yIGxheWVycyB3aXRoIGNo
aWxkcmVuIGFuZCB0cmFuc3BhcmVuY3kvbWFzayB0aGF0IHByZXNlcnZlIDNEIG9yIGRvbid0IG1h
c2sgdG8gYm91bmRzLgorICAgIGlmICgoaGFzUmVwbGljYSAmJiBoYXNEZXNjZW5kYW50c1dpdGhD
b250ZW50KSB8fCAoaGFzUmVwbGljYSAmJiBoYXNUcmFuc3BhcmVuY3kpIHx8IChoYXNUcmFuc3Bh
cmVuY3kgJiYgbV9zdGF0ZS5kZXNjZW5kYW50c1dpdGhDb250ZW50ID4gMSkpCisgICAgICAgIG1f
bGF5ZXJUeXBlID0gVHJhbnNwYXJlbmN5TGF5ZXI7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5v
ZGU6OmluaXRpYWxpemVUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIp
Cit7CisgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc3VyZmFjZSA9
IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICBtX3JlcGxpY2FTdXJmYWNlID0g
dGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOworICAgIG1fdGV4dHVyZSA9IHRleHR1cmVN
YXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICBjYWNoZSgpLT5tYXJrKG1fdGV4dHVyZS5nZXQo
KSk7Cit9CisKK1RleHR1cmVNYXBwZXJOb2RlOjpUZXh0dXJlTWFwcGVyTm9kZSgpCisgICAgOiBt
X2xheWVyVHlwZShEZWZhdWx0TGF5ZXIpCisgICAgLCBtX3N1cmZhY2UoMCkKKyAgICAsIG1fcGFy
ZW50KDApCisgICAgLCBtX2VmZmVjdFRhcmdldCgwKQorICAgICwgbV9wbGF0Zm9ybUNsaWVudCgw
KQorICAgICwgbV9jYWNoZSgwKQoreworfQorCitUZXh0dXJlTWFwcGVyTm9kZSogVGV4dHVyZU1h
cHBlck5vZGU6OnJvb3RMYXllcigpCit7CisgICAgaWYgKG1fZWZmZWN0VGFyZ2V0KQorICAgICAg
ICByZXR1cm4gbV9lZmZlY3RUYXJnZXQtPnJvb3RMYXllcigpOworICAgIGlmIChtX3BhcmVudCkK
KyAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5yb290TGF5ZXIoKTsKKyAgICByZXR1cm4gdGhpczsK
K30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6aW52YWxpZGF0ZVRyYW5zZm9ybSgpCit7Cisg
ICAgbV90cmFuc2Zvcm1zLmRpcnR5ID0gdHJ1ZTsKKyAgICBpZiAobV9sYXllclR5cGUgIT0gQ2xp
cExheWVyKQorICAgICAgICBtX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKKyAgICBpZiAobV9zdGF0ZS5y
ZXBsaWNhTGF5ZXIpCisgICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5pbnZhbGlkYXRlVHJh
bnNmb3JtKCk7CisgICAgY29uc3QgaW50IHNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBpZiAoVGV4dHVyZU1hcHBl
ck5vZGUqIGxheWVyID0gbV9jaGlsZHJlbltpXSkKKyAgICAgICAgICAgIGxheWVyLT5pbnZhbGlk
YXRlVHJhbnNmb3JtKCk7CisgICAgfQorfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21w
dXRlTG9jYWxUcmFuc2Zvcm0oKQoreworICAgIGlmICghbV90cmFuc2Zvcm1zLmxvY2FsRGlydHkp
CisgICAgICAgIHJldHVybjsKKyAgICBjb25zdCBmbG9hdCBvcmlnaW5YID0gbV9zdGF0ZS5hbmNo
b3JQb2ludC54KCkgKiBtX3NpemUud2lkdGgoKTsKKyAgICBjb25zdCBmbG9hdCBvcmlnaW5ZID0g
bV9zdGF0ZS5hbmNob3JQb2ludC55KCkgKiBtX3NpemUuaGVpZ2h0KCk7CisgICAgbV90cmFuc2Zv
cm1zLmxvY2FsID0KKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoKQorICAgICAgICAudHJh
bnNsYXRlM2Qob3JpZ2luWCArIG1fc3RhdGUucG9zLngoKSwgb3JpZ2luWSArIG1fc3RhdGUucG9z
LnkoKSwgbV9zdGF0ZS5hbmNob3JQb2ludC56KCkpCisgICAgICAgIC5tdWx0TGVmdChtX3N0YXRl
LnRyYW5zZm9ybSkKKyAgICAgICAgLnRyYW5zbGF0ZTNkKC1vcmlnaW5YLCAtb3JpZ2luWSwgLW1f
c3RhdGUuYW5jaG9yUG9pbnQueigpKTsKKyAgICBtX3RyYW5zZm9ybXMubG9jYWxEaXJ0eSA9IGZh
bHNlOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpmbGF0dGVuVG8yRFNwYWNlSWZOZWNl
c3NhcnkoKQoreworICAgIGlmIChtX3N0YXRlLnByZXNlcnZlczNEKQorICAgICAgICByZXR1cm47
CisgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE0xMygwKTsKKyAgICBtX3RyYW5z
Zm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTIzKDApOworICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNj
ZW5kYW50cy5zZXRNMzEoMCk7CisgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE0z
MigwKTsKKyAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTMzKDEpOworICAgIG1f
dHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNMzQoMCk7CisgICAgbV90cmFuc2Zvcm1zLmZv
ckRlc2NlbmRhbnRzLnNldE00MygwKTsKK30KKworSW50U2l6ZSBUZXh0dXJlTWFwcGVyTm9kZTo6
bmVhcmVzdFN1cmZhY2VTaXplKCkgY29uc3QKK3sKKyAgICBpZiAobV9sYXllclR5cGUgPT0gQ2xp
cExheWVyIHx8IG1fbGF5ZXJUeXBlID09IFJvb3RMYXllcikKKyAgICAgICAgcmV0dXJuIG1fc3Vy
ZmFjZSAmJiAhbV9zdXJmYWNlLT5zaXplKCkuaXNFbXB0eSgpID8gbV9zdXJmYWNlLT5zaXplKCkg
OiBtX3NpemU7CisgICAgcmV0dXJuIG1fcGFyZW50LT5uZWFyZXN0U3VyZmFjZVNpemUoKTsKK30K
Kwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVJlcGxpY2FUcmFuc2Zvcm0oKQorewor
ICAgIGlmICghbV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
bmVhcmVzdFN1cmZhY2VTaXplID0gbmVhcmVzdFN1cmZhY2VTaXplKCk7CisKKyAgICBpZiAobV9s
YXllclR5cGUgIT0gVHJhbnNwYXJlbmN5TGF5ZXIpIHsKKyAgICAgICAgbV90cmFuc2Zvcm1zLnJl
cGxpY2EgPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtX3RyYW5zZm9ybXMudGFyZ2V0KS5tdWx0TGVm
dChtX3N0YXRlLnJlcGxpY2FMYXllci0+bV90cmFuc2Zvcm1zLmxvY2FsKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGNvbnN0IGZsb2F0IG9yaWdpblggPSBtX3RyYW5zZm9ybXMudGFy
Z2V0Lm00MSgpOworICAgIGNvbnN0IGZsb2F0IG9yaWdpblkgPSBtX3RyYW5zZm9ybXMudGFyZ2V0
Lm00MigpOworICAgIG1fdHJhbnNmb3Jtcy5yZXBsaWNhID0KKyAgICAgICAgICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4KCkKKyAgICAgICAgICAgICAgICAudHJhbnNsYXRlKG9yaWdpblgsIG9yaWdp
blkpCisgICAgICAgICAgICAgICAgLm11bHRMZWZ0KG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3Ry
YW5zZm9ybXMubG9jYWwpCisgICAgICAgICAgICAgICAgLnRyYW5zbGF0ZSgtb3JpZ2luWCwgLW9y
aWdpblkpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlVHJhbnNmb3JtYXRp
b25zKCkKK3sKKyAgICBpZiAoIW1fdHJhbnNmb3Jtcy5kaXJ0eSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV90cmFuc2Zvcm1zLmRpcnR5ID0gZmFsc2U7CisgICAgaWYgKChtX3NpemUuaXNFbXB0
eSgpICYmIG1fc3RhdGUubWFza3NUb0JvdW5kcykpCisgICAgICAgIHJldHVybjsKKworICAgIFRl
eHR1cmVNYXBwZXJOb2RlKiBwYXJlbnQgPSBtX3BhcmVudDsKKyAgICBjb21wdXRlTG9jYWxUcmFu
c2Zvcm0oKTsKKworICAgIG1fdHJhbnNmb3Jtcy50YXJnZXQgPSBUcmFuc2Zvcm1hdGlvbk1hdHJp
eChwYXJlbnQgPyBwYXJlbnQtPm1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cyA6IFRyYW5zZm9y
bWF0aW9uTWF0cml4KCkpLm11bHRMZWZ0KG1fdHJhbnNmb3Jtcy5sb2NhbCk7CisgICAgbV90cmFu
c2Zvcm1zLmZvckRlc2NlbmRhbnRzID0gKG1fbGF5ZXJUeXBlID09IENsaXBMYXllciA/IFRyYW5z
Zm9ybWF0aW9uTWF0cml4KCkgOiBtX3RyYW5zZm9ybXMudGFyZ2V0KTsKKworICAgIGlmIChtX2Vm
ZmVjdFRhcmdldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90cmFuc2Zvcm1zLnRhcmdldEJv
dW5kaW5nUmVjdCA9IEludFJlY3QobV90cmFuc2Zvcm1zLnRhcmdldC5tYXBSZWN0KGVudGlyZVJl
Y3QoKSkpOworICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllcikKKyAgICAgICAgbV9zdGF0ZS5y
ZXBsaWNhTGF5ZXItPmNvbXB1dGVUcmFuc2Zvcm1hdGlvbnMoKTsKKworICAgIGZsYXR0ZW5UbzJE
U3BhY2VJZk5lY2Vzc2FyeSgpOworCisgICAgaWYgKCFtX3N0YXRlLmJhY2tmYWNlVmlzaWJpbGl0
eSAmJiBtX3RyYW5zZm9ybXMudGFyZ2V0LmludmVyc2UoKS5tMzMoKSA8IDApIHsKKyAgICAgICAg
bV9zdGF0ZS52aXNpYmxlID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9z
dGF0ZS52aXNpYmxlID0gdHJ1ZTsKKworICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5tX3N0YXRl
LnByZXNlcnZlczNEKQorICAgICAgICBtX3RyYW5zZm9ybXMuY2VudGVyWiA9IG1fdHJhbnNmb3Jt
cy50YXJnZXQubWFwUG9pbnQoRmxvYXRQb2ludDNEKG1fc2l6ZS53aWR0aCgpIC8gMiwgbV9zaXpl
LmhlaWdodCgpIC8gMiwgMCkpLnooKTsKKworICAgIGlmICghbV9jaGlsZHJlbi5zaXplKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3N0YXRlLmNoaWxkcmVuVHJhbnNmb3JtLmlzSWRl
bnRpdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgRmxvYXRQb2ludCBjZW50ZXJQ
b2ludCA9IEZsb2F0UG9pbnQobV9zaXplLndpZHRoKCkgLyAyLCBtX3NpemUuaGVpZ2h0KCkgLyAy
KTsKKyAgICBpZiAobV90cmFuc2Zvcm1zLnBlcnNwZWN0aXZlRGlydHkpCisgICAgICAgIG1fdHJh
bnNmb3Jtcy5wZXJzcGVjdGl2ZSA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkKKyAgICAgICAgICAg
IC50cmFuc2xhdGUoY2VudGVyUG9pbnQueCgpLCBjZW50ZXJQb2ludC55KCkpCisgICAgICAgICAg
ICAubXVsdExlZnQobV9zdGF0ZS5jaGlsZHJlblRyYW5zZm9ybSkKKyAgICAgICAgICAgIC50cmFu
c2xhdGUoLWNlbnRlclBvaW50LngoKSwgLWNlbnRlclBvaW50LnkoKSk7CisgICAgbV90cmFuc2Zv
cm1zLnBlcnNwZWN0aXZlRGlydHkgPSBmYWxzZTsKKyAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2Vu
ZGFudHMubXVsdExlZnQobV90cmFuc2Zvcm1zLnBlcnNwZWN0aXZlKTsKK30KKwordm9pZCBUZXh0
dXJlTWFwcGVyTm9kZTo6dXBsb2FkVGV4dHVyZUZyb21Db250ZW50KFRleHR1cmVNYXBwZXIqIHRl
eHR1cmVNYXBwZXIsIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBHcmFwaGljc0xheWVyKiBs
YXllcikKK3sKKyAgICBpZiAobV9zaXplLmlzRW1wdHkoKSB8fCAhbGF5ZXIpIHsKKyAgICAgICAg
bV90ZXh0dXJlLT5kZXN0cm95KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
bV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlKSB7
CisgICAgICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmltYWdlKQorICAgICAgICAgICAgbV90ZXh0
dXJlLT5zZXRDb250ZW50c1RvSW1hZ2UobV9jdXJyZW50Q29udGVudC5pbWFnZS5nZXQoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50
VHlwZSA9PSBNZWRpYUNvbnRlbnRUeXBlKSB7CisgICAgICAgIGlmICghbV9jdXJyZW50Q29udGVu
dC5tZWRpYSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV90ZXh0dXJlLT5yZXNldCht
X3NpemUsIHRydWUpOworICAgICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1D
b250ZXh0ID0gbV90ZXh0dXJlLT5iZWdpblBhaW50TWVkaWEoKTsKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0IGNvbnRleHQocGxhdGZvcm1Db250ZXh0KTsKKyAgICAgICAgbV9jdXJyZW50Q29udGVu
dC5tZWRpYS0+cGFpbnQoJmNvbnRleHQpOworICAgICAgICBtX3RleHR1cmUtPmVuZFBhaW50KCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBib29sIG5lZWRzUmVzZXQgPSAo
bV90ZXh0dXJlLT5jb250ZW50U2l6ZSgpICE9IG1fc2l6ZSkgfHwgIW1fdGV4dHVyZS0+aXNWYWxp
ZCgpOworICAgIGlmICgobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSAhPSBIVE1MQ29udGVu
dFR5cGUpCisgICAgICAgIHx8ICghbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgJiYgbV9j
dXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0LmlzRW1wdHkoKSAmJiAhbmVlZHNSZXNldCkp
CisgICAgICAgIHJldHVybjsKKworICAgIEludFJlY3QgZGlydHlSZWN0ID0gSW50UmVjdCgwLCAw
LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICBpZiAoIW5lZWRzUmVzZXQg
JiYgIW1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5KQorICAgICAgICBkaXJ0eVJlY3QuaW50
ZXJzZWN0KG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCk7CisKKyAgICBpZiAobmVl
ZHNSZXNldCkKKyAgICAgICAgbV90ZXh0dXJlLT5yZXNldChtX3NpemUsIG1fc3RhdGUuY29udGVu
dHNPcGFxdWUpOworCisgICAgeworICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChtX3Rl
eHR1cmUtPmJlZ2luUGFpbnQoZGlydHlSZWN0KSk7CisgICAgICAgIGlmICh0ZXh0dXJlTWFwcGVy
KSB7CisgICAgICAgICAgICBjb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkodGV4
dHVyZU1hcHBlci0+aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICAgICAgICAgIGNv
bnRleHQuc2V0VGV4dERyYXdpbmdNb2RlKHRleHR1cmVNYXBwZXItPnRleHREcmF3aW5nTW9kZSgp
KTsKKyAgICAgICAgfQorICAgICAgICBsYXllci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMo
Y29udGV4dCwgZGlydHlSZWN0KTsKKyAgICB9CisgICAgbV90ZXh0dXJlLT5lbmRQYWludCgpOwor
ICAgIG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5ID0gZmFsc2U7Cit9CisKKwordm9pZCBU
ZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnQoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29u
c3QgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6UGFpbnRPcHRpb25zJiBvcHRpb25zKQorewor
ICAgIEFTU0VSVChtX2xheWVyVHlwZSA9PSBSb290TGF5ZXIpOworICAgIGlmIChtX3NpemUuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBUZXhtYXBQYWludE9wdGlvbnMgb3B0Owor
ICAgIG9wdC5vcGFjaXR5ID0gMTsKKyAgICBvcHQucm9vdExheWVyID0gdGhpczsKKyAgICBvcHQu
c2Npc3NvclJlY3QgPSBvcHRpb25zLnRhcmdldFJlY3Q7CisgICAgb3B0LnZpc2libGVSZWN0ID0g
b3B0aW9ucy52aXNpYmxlUmVjdDsKKyAgICBvcHQudGV4dHVyZU1hcHBlciA9IHRleHR1cmVNYXBw
ZXI7CisgICAgb3B0LnN1cmZhY2UgPSAwOworICAgIG9wdC5jYWNoZSA9IG1fY2FjaGU7CisgICAg
cGFpbnRSZWN1cnNpdmUob3B0KTsKKworICAgIGlmICh0ZXh0dXJlTWFwcGVyLT5hbGxvd1N1cmZh
Y2VGb3JSb290KCkgfHwgbV9zdGF0ZS5oYXNTdXJmYWNlRGVzY2VuZGFudHMpIHsKKyAgICAgICAg
dGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UoMCk7CisgICAgICAgIHRleHR1cmVNYXBwZXItPnBh
aW50VG9UYXJnZXQoKm1fc3VyZmFjZS5nZXQoKSwgb3B0aW9ucy52aWV3cG9ydFNpemUsIG9wdGlv
bnMudHJhbnNmb3JtLCBvcHRpb25zLm9wYWNpdHkgKiBtX3N0YXRlLm9wYWNpdHksIG9wdGlvbnMu
dGFyZ2V0UmVjdCk7CisgICAgfQorICAgIG1fY2FjaGUtPnB1cmdlKCk7Cit9CisKK3ZvaWQgVGV4
dHVyZU1hcHBlck5vZGU6OnBhaW50U2VsZihjb25zdCBUZXhtYXBQYWludE9wdGlvbnMmIG9wdGlv
bnMpCit7CisgICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkgfHwgKCFtX3N0YXRlLmRyYXdzQ29udGVu
dCAmJiBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiByZXBsaWNhTWFza1Rl
eHR1cmU7CisgICAgbV90ZXh0dXJlLT51bnBhY2soKTsKKworICAgIFJlZlB0cjxCaXRtYXBUZXh0
dXJlPiBtYXNrVGV4dHVyZSA9IG1fc3RhdGUubWFza0xheWVyID8gbV9zdGF0ZS5tYXNrTGF5ZXIt
Pm1fdGV4dHVyZSA6IDA7CisgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyICYmIG1fc3RhdGUu
cmVwbGljYUxheWVyLT5tX3N0YXRlLm1hc2tMYXllcikKKyAgICAgICAgcmVwbGljYU1hc2tUZXh0
dXJlID0gbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUubWFza0xheWVyLT5tX3RleHR1cmU7
CisKKyAgICBpZiAobWFza1RleHR1cmUpCisgICAgICAgIG1hc2tUZXh0dXJlLT51bnBhY2soKTsK
KworICAgIGlmIChyZXBsaWNhTWFza1RleHR1cmUpCisgICAgICAgIHJlcGxpY2FNYXNrVGV4dHVy
ZS0+dW5wYWNrKCk7CisKKyAgICBjb25zdCBmbG9hdCBvcGFjaXR5ID0gb3B0aW9ucy5pc1N1cmZh
Y2UgPyAxIDogb3B0aW9ucy5vcGFjaXR5OworCisgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVy
ICYmICFvcHRpb25zLmlzU3VyZmFjZSkKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5k
cmF3VGV4dHVyZSgqbV90ZXh0dXJlLmdldCgpLCByZXBsaWNhUmVjdCgpLCBtX3RyYW5zZm9ybXMu
cmVwbGljYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5ICogbV9zdGF0ZS5yZXBs
aWNhTGF5ZXItPm1fc3RhdGUub3BhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXBs
aWNhTWFza1RleHR1cmUgPyByZXBsaWNhTWFza1RleHR1cmUuZ2V0KCkgOiBtYXNrVGV4dHVyZS5n
ZXQoKSk7CisKKyAgICBjb25zdCBJbnRSZWN0IHJlY3QgPSBtX2xheWVyVHlwZSA9PSBDbGlwTGF5
ZXIgPyBlbnRpcmVSZWN0KCkgOiB0YXJnZXRSZWN0KCk7CisgICAgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXggdHJhbnNmb3JtID0gbV9sYXllclR5cGUgPT0gQ2xpcExheWVyID8gVHJhbnNmb3Jt
YXRpb25NYXRyaXgoKSA6IG1fdHJhbnNmb3Jtcy50YXJnZXQ7CisgICAgb3B0aW9ucy50ZXh0dXJl
TWFwcGVyLT5kcmF3VGV4dHVyZSgqbV90ZXh0dXJlLmdldCgpLCByZWN0LCB0cmFuc2Zvcm0sIG9w
YWNpdHksIG9wdGlvbnMuaXNTdXJmYWNlID8gMCA6IG1hc2tUZXh0dXJlLmdldCgpKTsKKyAgICBv
cHRpb25zLmNhY2hlLT5tYXJrKG1fdGV4dHVyZS5nZXQoKSk7Cit9CisKK2Jvb2wgVGV4dHVyZU1h
cHBlck5vZGU6OnBhaW50UmVwbGljYShjb25zdCBUZXhtYXBQYWludE9wdGlvbnMmIG9wdGlvbnMp
Cit7CisgICAgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSA9ICptX3N1cmZhY2UuZ2V0KCk7CisgICAg
VGV4dHVyZU1hcHBlck5vZGUqIHJlcGxpY2EgPSBtX3N0YXRlLnJlcGxpY2FMYXllcjsKKyAgICBS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4gbWFza1RleHR1cmU7CisgICAgaWYgKFRleHR1cmVNYXBwZXJO
b2RlKiBtYXNrID0gbV9zdGF0ZS5tYXNrTGF5ZXIpCisgICAgICAgIG1hc2tUZXh0dXJlID0gbWFz
ay0+bV90ZXh0dXJlOworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiByZXBsaWNhTWFza1RleHR1
cmU7CisgICAgaWYgKCFyZXBsaWNhKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
cmVwbGljYSAmJiByZXBsaWNhLT5tX3N0YXRlLm1hc2tMYXllcikKKyAgICAgICAgcmVwbGljYU1h
c2tUZXh0dXJlID0gcmVwbGljYS0+bV9zdGF0ZS5tYXNrTGF5ZXItPm1fdGV4dHVyZTsKKworICAg
IGlmIChyZXBsaWNhTWFza1RleHR1cmUpCisgICAgICAgIHJlcGxpY2FNYXNrVGV4dHVyZS0+dW5w
YWNrKCk7CisgICAgQVNTRVJUKG1fcmVwbGljYVN1cmZhY2UpOworICAgIG1fcmVwbGljYVN1cmZh
Y2UtPnJlc2V0KG9wdGlvbnMuc3VyZmFjZS0+c2l6ZSgpKTsKKyAgICBtX3JlcGxpY2FTdXJmYWNl
LT5zZXRPZmZzZXQob3B0aW9ucy5zdXJmYWNlLT5vZmZzZXQoKSk7CisgICAgb3B0aW9ucy5jYWNo
ZS0+bWFyayhtX3JlcGxpY2FTdXJmYWNlLmdldCgpKTsKKyAgICBvcHRpb25zLnRleHR1cmVNYXBw
ZXItPmJpbmRTdXJmYWNlKG1fcmVwbGljYVN1cmZhY2UuZ2V0KCkpOworICAgIG9wdGlvbnMudGV4
dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUodGV4dHVyZSwgcmVwbGljYVJlY3QoKSwgbV90cmFuc2Zv
cm1zLnJlcGxpY2EsIHJlcGxpY2EtPm1fc3RhdGUub3BhY2l0eSwgcmVwbGljYU1hc2tUZXh0dXJl
ID8gcmVwbGljYU1hc2tUZXh0dXJlLmdldCgpIDogbWFza1RleHR1cmUuZ2V0KCkpOworICAgIG9w
dGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUodGV4dHVyZSwgSW50UmVjdChJbnRQb2lu
dCgwLCAwKSwgb3B0aW9ucy5zdXJmYWNlLT5zaXplKCkpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
LCAxLjBmLCBtYXNrVGV4dHVyZS5nZXQoKSk7CisgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5i
aW5kU3VyZmFjZShvcHRpb25zLnN1cmZhY2UpOworICAgIG9wdGlvbnMuY2FjaGUtPm1hcmsob3B0
aW9ucy5zdXJmYWNlKTsKKyAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCpt
X3JlcGxpY2FTdXJmYWNlLmdldCgpLCBJbnRSZWN0KEludFBvaW50KDAsIDApLCBvcHRpb25zLnN1
cmZhY2UtPnNpemUoKSksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIG9wdGlvbnMub3BhY2l0eSwg
MCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50
U3VyZmFjZShjb25zdCBUZXhtYXBQYWludE9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgaWYgKG1f
bGF5ZXJUeXBlID09IFJvb3RMYXllciB8fCBtX2xheWVyVHlwZSA9PSBEZWZhdWx0TGF5ZXIgfHwg
bV9sYXllclR5cGUgPT0gU2Npc3NvckxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQ
dHI8Qml0bWFwVGV4dHVyZT4gbWFza1RleHR1cmU7CisgICAgaWYgKFRleHR1cmVNYXBwZXJOb2Rl
KiBtYXNrID0gbV9zdGF0ZS5tYXNrTGF5ZXIpCisgICAgICAgIG1hc2tUZXh0dXJlID0gbWFzay0+
bV90ZXh0dXJlOworCisgICAgQVNTRVJUKG1fc3VyZmFjZSk7CisgICAgQml0bWFwVGV4dHVyZSYg
dGV4dHVyZSA9ICptX3N1cmZhY2UuZ2V0KCk7CisgICAgaWYgKG1hc2tUZXh0dXJlKQorICAgICAg
ICBtYXNrVGV4dHVyZS0+dW5wYWNrKCk7CisgICAgdGV4dHVyZS51bnBhY2soKTsKKworICAgIGlm
IChwYWludFJlcGxpY2Eob3B0aW9ucykpCisgICAgICAgIHJldHVybjsKKworICAgIG9wdGlvbnMu
dGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2Uob3B0aW9ucy5zdXJmYWNlKTsKKyAgICBvcHRpb25z
LnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKHRleHR1cmUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fbGF5ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVyID8gSW50UmVjdChJbnRQ
b2ludCgwLCAwKSwgb3B0aW9ucy5zdXJmYWNlLT5zaXplKCkpIDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGFyZ2V0UmVjdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2xheWVyVHlwZSA9PSBUcmFuc3BhcmVuY3lMYXllciA/IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkg
OiBtX3RyYW5zZm9ybXMudGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRp
b25zLm9wYWNpdHksIG1hc2tUZXh0dXJlLmdldCgpKTsKKyAgICBvcHRpb25zLmNhY2hlLT5tYXJr
KCZ0ZXh0dXJlKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRTZWxmQW5kQ2hp
bGRyZW4oY29uc3QgVGV4bWFwUGFpbnRPcHRpb25zJiBvcHRpb25zLCBUZXhtYXBQYWludE9wdGlv
bnMmIG9wdGlvbnNGb3JEZXNjZW5kYW50cykKK3sKKyAgICBib29sIGRpZFBhaW50U2VsZiA9IGZh
bHNlOworICAgIGlmICghbV9zdGF0ZS5wcmVzZXJ2ZXMzRCB8fCBtX2NoaWxkcmVuLmlzRW1wdHko
KSkgeworICAgICAgICBwYWludFNlbGYob3B0aW9ucyk7CisgICAgICAgIGRpZFBhaW50U2VsZiA9
IHRydWU7CisgICAgfQorCisgICAgaWYgKG1fY2hpbGRyZW4uaXNFbXB0eSgpICYmICFvcHRpb25z
LmlzU3VyZmFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fbGF5ZXJUeXBlID09IFNj
aXNzb3JMYXllcikKKyAgICAgICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLnNjaXNzb3JSZWN0Lmlu
dGVyc2VjdChtX3RyYW5zZm9ybXMudGFyZ2V0Lm1hcFJlY3QoSW50UmVjdCgwLCAwLCBtX3NpemUu
d2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBt
X2NoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBsYXll
ciA9IG1fY2hpbGRyZW5baV07CisgICAgICAgIGlmICghbGF5ZXIpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBpZiAoIWRpZFBhaW50U2VsZiAmJiBsYXllci0+bV90cmFuc2Zvcm1z
LmNlbnRlclogPj0gMCkgeworICAgICAgICAgICAgcGFpbnRTZWxmKG9wdGlvbnMpOworICAgICAg
ICAgICAgZGlkUGFpbnRTZWxmID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBsYXllci0+cGFp
bnRSZWN1cnNpdmUob3B0aW9uc0ZvckRlc2NlbmRhbnRzKTsKKyAgICAgICAgaWYgKG9wdGlvbnMu
aXNTdXJmYWNlKSB7CisgICAgICAgICAgICBBU1NFUlQobV9zdXJmYWNlKTsKKyAgICAgICAgICAg
IG9wdGlvbnMuY2FjaGUtPm1hcmsobV9zdXJmYWNlLmdldCgpKTsKKyAgICAgICAgICAgIG9wdGlv
bnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UobV9zdXJmYWNlLmdldCgpKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBpZiAoIWRpZFBhaW50U2VsZikgeworICAgICAgICBwYWludFNlbGYob3B0
aW9ucyk7CisgICAgICAgIGRpZFBhaW50U2VsZiA9IHRydWU7CisgICAgfQorfQorCit2b2lkIFRl
eHR1cmVNYXBwZXJOb2RlOjpwYWludFJlY3Vyc2l2ZShUZXhtYXBQYWludE9wdGlvbnMgb3B0aW9u
cykKK3sKKyAgICBib29sIGlzRGlydHkgPSBtX3N0YXRlLmRpcnR5OworICAgIG1fc3RhdGUuZGly
dHkgPSBmYWxzZTsKKworICAgIGlmICgobV9zaXplLmlzRW1wdHkoKSAmJiAobV9zdGF0ZS5tYXNr
c1RvQm91bmRzCisgICAgICAgIHx8IG1fY2hpbGRyZW4uaXNFbXB0eSgpKSkgfHwgIW1fc3RhdGUu
dmlzaWJsZSB8fCBvcHRpb25zLm9wYWNpdHkgPCAwLjAxIHx8IG1fc3RhdGUub3BhY2l0eSA8IDAu
MDEpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbXB1dGVSZXBsaWNhVHJhbnNmb3JtKCk7CisK
KyAgICBpZiAobV9zdGF0ZS5tYXNrTGF5ZXIpCisgICAgICAgIG1fc3RhdGUubWFza0xheWVyLT5t
X3N0YXRlLmRpcnR5ID0gZmFsc2U7CisKKyAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpIHsK
KyAgICAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUuZGlydHkgPSBmYWxzZTsKKyAg
ICAgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRlLm1hc2tMYXllcikKKyAgICAg
ICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRlLm1hc2tMYXllci0+bV9zdGF0ZS5k
aXJ0eSA9IGZhbHNlOworICAgIH0KKworICAgIGNvbnN0IGJvb2wgaXNTdXJmYWNlID0gKG1fbGF5
ZXJUeXBlID09IENsaXBMYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fbGF5
ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fHwgKG1fbGF5ZXJUeXBlID09IFJvb3RMYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiAob3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5hbGxvd1N1cmZhY2VGb3JSb290KCkgfHwg
bV9zdGF0ZS5oYXNTdXJmYWNlRGVzY2VuZGFudHMpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICkpOworCisgICAgY29uc3QgSW50UmVjdCBib3VuZGluZ1JlY3Rmcm9tTmVhcmVzdFN1
cmZhY2UgPSBtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0OworCisgICAgb3B0aW9ucy5v
cGFjaXR5ICo9IG1fc3RhdGUub3BhY2l0eTsKKworICAgIFRleG1hcFBhaW50T3B0aW9ucyBvcHRp
b25zRm9yRGVzY2VuZGFudHMob3B0aW9ucyk7CisgICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLm9w
YWNpdHkgPSBpc1N1cmZhY2UgPyAxIDogb3B0aW9ucy5vcGFjaXR5OworICAgIG9wdGlvbnMuaXNT
dXJmYWNlID0gaXNTdXJmYWNlOworCisgICAgaWYgKG1fbGF5ZXJUeXBlID09IENsaXBMYXllcikg
eworICAgICAgICBvcHRpb25zRm9yRGVzY2VuZGFudHMudmlzaWJsZVJlY3QgPSBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgpLnRyYW5zbGF0ZSgtYm91bmRpbmdSZWN0ZnJvbU5lYXJlc3RTdXJmYWNlLngo
KSwgLWJvdW5kaW5nUmVjdGZyb21OZWFyZXN0U3VyZmFjZS55KCkpLm1hcFJlY3Qob3B0aW9ucy52
aXNpYmxlUmVjdCk7CisgICAgICAgIG9wdGlvbnNGb3JEZXNjZW5kYW50cy5zY2lzc29yUmVjdCA9
IEludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgfQor
CisgICAgaWYgKG1fbGF5ZXJUeXBlID09IFNjaXNzb3JMYXllcikKKyAgICAgICAgb3B0aW9uc0Zv
ckRlc2NlbmRhbnRzLnNjaXNzb3JSZWN0LmludGVyc2VjdChtX3RyYW5zZm9ybXMudGFyZ2V0Qm91
bmRpbmdSZWN0KTsKKyAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPnNldENsaXAob3B0aW9uc0Zv
ckRlc2NlbmRhbnRzLnNjaXNzb3JSZWN0KTsKKworICAgIFRleHR1cmVNYXBwZXJDYWNoZUxvY2so
bV90ZXh0dXJlLmdldCgpKTsKKyAgICBUZXh0dXJlTWFwcGVyQ2FjaGVMb2NrKG1fc3VyZmFjZS5n
ZXQoKSk7CisgICAgVGV4dHVyZU1hcHBlckNhY2hlTG9jayhtX3JlcGxpY2FTdXJmYWNlLmdldCgp
KTsKKworICAgIG9wdGlvbnMuY2FjaGUtPnB1cmdlKCk7CisKKyAgICBpZiAoaXNTdXJmYWNlKSB7
CisgICAgICAgIEFTU0VSVChtX3N1cmZhY2UpOworICAgICAgICBpZiAoIW1fc3VyZmFjZS0+aXNW
YWxpZCgpKQorICAgICAgICAgICAgaXNEaXJ0eSA9IHRydWU7CisgICAgICAgIGlmIChtX3N0YXRl
LnRpbGVkKSB7CisgICAgICAgICAgICBtX3N1cmZhY2UtPnJlc2V0KG9wdGlvbnMudmlzaWJsZVJl
Y3Quc2l6ZSgpKTsKKyAgICAgICAgICAgIG1fc3VyZmFjZS0+c2V0T2Zmc2V0KG9wdGlvbnMudmlz
aWJsZVJlY3QubG9jYXRpb24oKSk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNEaXJ0eSkKKyAgICAg
ICAgICAgIG1fc3VyZmFjZS0+cmVzZXQobV9sYXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIg
PyBvcHRpb25zLnN1cmZhY2UtPnNpemUoKSA6IG1fc2l6ZSk7CisgICAgICAgIG9wdGlvbnMuY2Fj
aGUtPm1hcmsobV9zdXJmYWNlLmdldCgpKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVy
LT5iaW5kU3VyZmFjZShtX3N1cmZhY2UuZ2V0KCkpOworICAgICAgICBvcHRpb25zRm9yRGVzY2Vu
ZGFudHMuc3VyZmFjZSA9IG1fc3VyZmFjZS5nZXQoKTsKKyAgICB9IGVsc2UgaWYgKG1fc3VyZmFj
ZSkKKyAgICAgICAgbV9zdXJmYWNlLT5kZXN0cm95KCk7CisKKyAgICBpZiAoaXNEaXJ0eSB8fCAh
aXNTdXJmYWNlIHx8IG1fc3RhdGUudGlsZWQgfHwgIW1fc3VyZmFjZS0+aXNWYWxpZCgpKQorICAg
ICAgICBwYWludFNlbGZBbmRDaGlsZHJlbihvcHRpb25zLCBvcHRpb25zRm9yRGVzY2VuZGFudHMp
OworCisgICAgcGFpbnRTdXJmYWNlKG9wdGlvbnMpOworfQorCitUZXh0dXJlTWFwcGVyTm9kZTo6
flRleHR1cmVNYXBwZXJOb2RlKCkKK3sKKyAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICB7Cisg
ICAgICAgIGNvbnN0IGludCBjaGlsZHJlblNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKKyAgICAg
ICAgZm9yIChpbnQgaSA9IGNoaWxkcmVuU2l6ZS0xOyBpID49IDA7IC0taSkgeworICAgICAgICAg
ICAgQVNTRVJUKG1fY2hpbGRyZW5baV0tPm1fcGFyZW50ID09IHRoaXMpOworICAgICAgICAgICAg
bV9jaGlsZHJlbltpXS0+bV9wYXJlbnQgPSAwOworICAgICAgICB9CisgICAgfQorICAgIGlmICht
X3BhcmVudCkKKyAgICAgICAgbV9wYXJlbnQtPm1fY2hpbGRyZW4ucmVtb3ZlKG1fcGFyZW50LT5t
X2NoaWxkcmVuLmZpbmQodGhpcykpOworICAgIGlmIChtX2NhY2hlKQorICAgICAgICBkZWxldGUg
bV9jYWNoZTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGVyZm9ybVBvc3RTeW5jT3Bl
cmF0aW9ucygpCit7CisgICAgY29uc3QgTGF5ZXJUeXBlIHByZXZMYXllclR5cGUgPSBtX2xheWVy
VHlwZTsKKyAgICBjb21wdXRlTGF5ZXJUeXBlKCk7CisgICAgaWYgKHByZXZMYXllclR5cGUgIT0g
bV9sYXllclR5cGUpCisgICAgICAgIG1fc3RhdGUuZGlydHkgPSB0cnVlOworICAgIGlmIChtX3Ry
YW5zZm9ybXMuZGlydHkpCisgICAgICAgIHNldE5lZWRzRGlzcGxheSgpOworCisgICAgY29tcHV0
ZVRyYW5zZm9ybWF0aW9ucygpOworICAgIGlmIChtX3N0YXRlLm1hc2tMYXllciAmJiAhbV9zdGF0
ZS5kaXJ0eSkKKyAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IG1fc3RhdGUubWFza0xheWVyLT5tX3N0
YXRlLmRpcnR5OworICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllciAmJiAhbV9zdGF0ZS5kaXJ0
eSkKKyAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRl
LmRpcnR5OworCisgICAgY29uc3QgaW50IHNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKKworICAg
IGZvciAoaW50IGkgPSBzaXplIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgVGV4dHVyZU1h
cHBlck5vZGUqIGxheWVyID0gbV9jaGlsZHJlbltpXTsKKworICAgICAgICBsYXllci0+cGVyZm9y
bVBvc3RTeW5jT3BlcmF0aW9ucygpOworICAgICAgICBpZiAoIW1fc3RhdGUuZGlydHkpCisgICAg
ICAgICAgICBtX3N0YXRlLmRpcnR5ID0gbGF5ZXItPm1fc3RhdGUuZGlydHk7CisgICAgfQorICAg
IG1fc3RhdGUuaGFzU3VyZmFjZURlc2NlbmRhbnRzID0gaGFzU3VyZmFjZURlc2NlbmRhbnRzKCk7
CisgICAgaWYgKG1fc3RhdGUuZGlydHkpCisgICAgICAgIG1fc3RhdGUuZGVzY2VuZGFudHNXaXRo
Q29udGVudCA9IGNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCgpOworCisgICAgaWYgKG1fc3Rh
dGUucHJlc2VydmVzM0QpCisgICAgICAgIHNvcnRCeVpPcmRlcihtX2NoaWxkcmVuLCAwLCBzaXpl
KTsKKyAgICBpZiAobV9zdGF0ZS5kaXJ0eSkKKyAgICAgICAgc2V0TmVlZHNEaXNwbGF5KCk7Cit9
CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlKEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljc0xheWVyLCBib29sIHJlY3Vyc2UpCit7CisgICAg
VGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciA9IHJvb3RMYXllcigpLT5tX3BsYXRmb3JtQ2xp
ZW50LT50ZXh0dXJlTWFwcGVyKCk7CisgICAgc3luY0NvbXBvc2l0aW5nU3RhdGVJbnRlcm5hbChn
cmFwaGljc0xheWVyLCByZWN1cnNlLCB0ZXh0dXJlTWFwcGVyKTsKKyAgICBwZXJmb3JtUG9zdFN5
bmNPcGVyYXRpb25zKCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3Np
dGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpY3NMYXllciwg
VGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKK3sKKyAgICBjb25zdCBpbnQgY2hhbmdlTWFz
ayA9IGdyYXBoaWNzTGF5ZXItPmNoYW5nZU1hc2soKTsKKyAgICBpbml0aWFsaXplVGV4dHVyZU1h
cHBlcih0ZXh0dXJlTWFwcGVyKTsKKyAgICBjb25zdCBUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVu
dERhdGEmIHBlbmRpbmdDb250ZW50ID0gZ3JhcGhpY3NMYXllci0+cGVuZGluZ0NvbnRlbnQoKTsK
KyAgICBpZiAoY2hhbmdlTWFzayA9PSBOb0NoYW5nZXMgJiYgcGVuZGluZ0NvbnRlbnQubmVlZHNE
aXNwbGF5UmVjdC5pc0VtcHR5KCkgJiYgIXBlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgaWYgKG1fcGFyZW50
KQorICAgICAgICBtX3BhcmVudC0+bV9zdGF0ZS5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAobV9j
dXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUgJiYgKGNoYW5nZU1h
c2sgJiBQYXJlbnRDaGFuZ2UpKSB7CisgICAgICAgIC8vIFRoZSBXZWJDb3JlIGNvbXBvc2l0b3Ig
bWFuYWdlcyBpdGVtIG93bmVyc2hpcC4gV2UgaGF2ZSB0byBtYWtlIHN1cmUgZ3JhcGhpY3N2aWV3
IGRvZXNuJ3QKKyAgICAgICAgLy8gdHJ5IHRvIHNuYXRjaCB0aGF0IG93bmVyc2hpcC4KKworICAg
ICAgICBpZiAoIWdyYXBoaWNzTGF5ZXItPnBhcmVudCgpKQorICAgICAgICAgICAgbV9wYXJlbnQg
PSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3BhcmVudCA9IHRvVGV4dHVyZU1hcHBl
ck5vZGUoZ3JhcGhpY3NMYXllci0+cGFyZW50KCkpOworCisgICAgICAgIGlmICghZ3JhcGhpY3NM
YXllci0+cGFyZW50KCkgJiYgbV9wYXJlbnQpIHsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleCA9
IG1fcGFyZW50LT5tX2NoaWxkcmVuLmZpbmQodGhpcyk7CisgICAgICAgICAgICBtX3BhcmVudC0+
bV9jaGlsZHJlbi5yZW1vdmUoaW5kZXgpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNo
YW5nZU1hc2sgJiBDaGlsZHJlbkNoYW5nZSkgeworICAgICAgICBtX2NoaWxkcmVuLmNsZWFyKCk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW4o
KS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiBjaGls
ZCA9IHRvVGV4dHVyZU1hcHBlck5vZGUoZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW4oKVtpXSkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIWNoaWxkKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChjaGlsZCk7CisgICAgICAgICAg
ICAgICAgY2hpbGQtPm1fcGFyZW50ID0gdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBtX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoY2hhbmdlTWFz
ayAmIChTaXplQ2hhbmdlIHwgQ29udGVudHNSZWN0Q2hhbmdlKSkgeworICAgICAgICBJbnRTaXpl
IHdhbnRlZFNpemUgPSBJbnRTaXplKGdyYXBoaWNzTGF5ZXItPnNpemUoKS53aWR0aCgpLCBncmFw
aGljc0xheWVyLT5zaXplKCkuaGVpZ2h0KCkpOworICAgICAgICBpZiAod2FudGVkU2l6ZS5pc0Vt
cHR5KCkgJiYgcGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlKQor
ICAgICAgICAgICAgd2FudGVkU2l6ZSA9IEludFNpemUoZ3JhcGhpY3NMYXllci0+Y29udGVudHNS
ZWN0KCkud2lkdGgoKSwgZ3JhcGhpY3NMYXllci0+Y29udGVudHNSZWN0KCkuaGVpZ2h0KCkpOwor
CisgICAgICAgIGlmICh3YW50ZWRTaXplICE9IG1fc2l6ZSkgeworICAgICAgICAgICAgbV9zaXpl
ID0gSW50U2l6ZSh3YW50ZWRTaXplLndpZHRoKCksIHdhbnRlZFNpemUuaGVpZ2h0KCkpOworICAg
ICAgICAgICAgaWYgKG1fcGxhdGZvcm1DbGllbnQpCisgICAgICAgICAgICAgICAgbV9wbGF0Zm9y
bUNsaWVudC0+c2V0U2l6ZUNoYW5nZWQobV9zaXplKTsKKyAgICAgICAgICAgIGNvbnN0IGJvb2wg
bmVlZHNUaWxpbmcgPSBtX3NpemUud2lkdGgoKSA+IDIwMDAgfHwgbV9zaXplLmhlaWdodCgpID4g
MjAwMDsKKyAgICAgICAgICAgIGlmIChtX3N0YXRlLnRpbGVkICE9IG5lZWRzVGlsaW5nKQorICAg
ICAgICAgICAgICAgIG1fc3RhdGUudGlsZWQgPSBuZWVkc1RpbGluZzsKKyAgICAgICAgICAgIG1f
c3RhdGUuZGlydHkgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNoYW5nZU1h
c2sgJiBNYXNrTGF5ZXJDaGFuZ2UpIHsKKyAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIGxh
eWVyID0gdG9UZXh0dXJlTWFwcGVyTm9kZShncmFwaGljc0xheWVyLT5tYXNrTGF5ZXIoKSkpCisg
ICAgICAgICAgIGxheWVyLT5tX2VmZmVjdFRhcmdldCA9IHRoaXM7CisgICAgfQorCisgICAgaWYg
KGNoYW5nZU1hc2sgJiBSZXBsaWNhTGF5ZXJDaGFuZ2UpIHsKKyAgICAgICBpZiAoVGV4dHVyZU1h
cHBlck5vZGUqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTm9kZShncmFwaGljc0xheWVyLT5yZXBs
aWNhTGF5ZXIoKSkpCisgICAgICAgICAgIGxheWVyLT5tX2VmZmVjdFRhcmdldCA9IHRoaXM7Cisg
ICAgfQorCisgICAgaWYgKGNoYW5nZU1hc2sgJiAoVHJhbnNmb3JtQ2hhbmdlIHwgU2l6ZUNoYW5n
ZSB8IEFuY2hvclBvaW50Q2hhbmdlIHwgUG9zaXRpb25DaGFuZ2UpKQorICAgICAgICBtX3RyYW5z
Zm9ybXMubG9jYWxEaXJ0eSA9IHRydWU7CisKKyAgICBpZiAoY2hhbmdlTWFzayAmIChDaGlsZHJl
blRyYW5zZm9ybUNoYW5nZSB8IFNpemVDaGFuZ2UpKQorICAgICAgICBtX3RyYW5zZm9ybXMucGVy
c3BlY3RpdmVEaXJ0eSA9IHRydWU7CisKKyAgICBpZiAoY2hhbmdlTWFzayAmIChDaGlsZHJlblRy
YW5zZm9ybUNoYW5nZSB8IFByZXNlcnZlczNEQ2hhbmdlIHwgVHJhbnNmb3JtQ2hhbmdlIHwgQW5j
aG9yUG9pbnRDaGFuZ2UgfCBTaXplQ2hhbmdlIHwgQ29udGVudHNSZWN0Q2hhbmdlIHwgQmFja2Zh
Y2VWaXNpYmlsaXR5Q2hhbmdlIHwgUG9zaXRpb25DaGFuZ2UgfCBNYXNrTGF5ZXJDaGFuZ2UgfCBE
cmF3c0NvbnRlbnRDaGFuZ2UgfCBDb250ZW50Q2hhbmdlIHwgUmVwbGljYUxheWVyQ2hhbmdlKSkg
ICAgeworICAgICAgICAvLyBEdWUgdG8gdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHdheSBX
ZWJDb3JlIGhhbmRsZXMgdHJhbnNmb3JtcyBhbmQgdGhlIHdheSBRdCBoYW5kbGVzIHRyYW5zZm9y
bXMsCisgICAgICAgIC8vIGFsbCB0aGVzZSBlbGVtZW50cyBhZmZlY3QgdGhlIHRyYW5zZm9ybXMg
b2YgYWxsIHRoZSBkZXNjZW5kYW50cy4KKyAgICAgICAgaW52YWxpZGF0ZVRyYW5zZm9ybSgpOwor
ICAgIH0KKworICAgIGlmIChjaGFuZ2VNYXNrICYgRGlzcGxheUNoYW5nZSkKKyAgICAgICAgbV9z
dGF0ZS5kaXJ0eSA9IHRydWU7CisKKyAgICBtX3N0YXRlLm1hc2tMYXllciA9IHRvVGV4dHVyZU1h
cHBlck5vZGUoZ3JhcGhpY3NMYXllci0+bWFza0xheWVyKCkpOworICAgIG1fc3RhdGUucmVwbGlj
YUxheWVyID0gdG9UZXh0dXJlTWFwcGVyTm9kZShncmFwaGljc0xheWVyLT5yZXBsaWNhTGF5ZXIo
KSk7CisgICAgbV9zdGF0ZS5wb3MgPSBncmFwaGljc0xheWVyLT5wb3NpdGlvbigpOworICAgIG1f
c3RhdGUuYW5jaG9yUG9pbnQgPSBncmFwaGljc0xheWVyLT5hbmNob3JQb2ludCgpOworICAgIG1f
c3RhdGUuc2l6ZSA9IGdyYXBoaWNzTGF5ZXItPnNpemUoKTsKKyAgICBtX3N0YXRlLnRyYW5zZm9y
bSA9IGdyYXBoaWNzTGF5ZXItPnRyYW5zZm9ybSgpOworICAgIG1fc3RhdGUuY29udGVudHNSZWN0
ID0gZ3JhcGhpY3NMYXllci0+Y29udGVudHNSZWN0KCk7CisgICAgbV9zdGF0ZS5vcGFjaXR5ID0g
Z3JhcGhpY3NMYXllci0+b3BhY2l0eSgpOworICAgIG1fc3RhdGUuY29udGVudHNSZWN0ID0gZ3Jh
cGhpY3NMYXllci0+Y29udGVudHNSZWN0KCk7CisgICAgbV9zdGF0ZS5wcmVzZXJ2ZXMzRCA9IGdy
YXBoaWNzTGF5ZXItPnByZXNlcnZlczNEKCk7CisgICAgbV9zdGF0ZS5tYXNrc1RvQm91bmRzID0g
Z3JhcGhpY3NMYXllci0+bWFza3NUb0JvdW5kcygpOworICAgIG1fc3RhdGUuZHJhd3NDb250ZW50
ID0gZ3JhcGhpY3NMYXllci0+ZHJhd3NDb250ZW50KCk7CisgICAgbV9zdGF0ZS5jb250ZW50c09w
YXF1ZSA9IGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRzT3BhcXVlKCk7CisgICAgbV9zdGF0ZS5iYWNr
ZmFjZVZpc2liaWxpdHkgPSBncmFwaGljc0xheWVyLT5iYWNrZmFjZVZpc2liaWxpdHkoKTsKKyAg
ICBtX3N0YXRlLmNoaWxkcmVuVHJhbnNmb3JtID0gZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW5UcmFu
c2Zvcm0oKTsKKyAgICBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID0gcGVuZGluZ0NvbnRl
bnQuY29udGVudFR5cGU7CisgICAgbV9jdXJyZW50Q29udGVudC5pbWFnZSA9IHBlbmRpbmdDb250
ZW50LmltYWdlOworICAgIG1fY3VycmVudENvbnRlbnQubWVkaWEgPSBwZW5kaW5nQ29udGVudC5t
ZWRpYTsKKyAgICBtX2N1cnJlbnRDb250ZW50LmJhY2tncm91bmRDb2xvciA9IHBlbmRpbmdDb250
ZW50LmJhY2tncm91bmRDb2xvcjsKKyAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSA9
IG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5IHx8IHBlbmRpbmdDb250ZW50Lm5lZWRzRGlz
cGxheTsKKyAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QudW5pdGUocGVuZGlu
Z0NvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCk7CisKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9k
ZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVJbnRlcm5hbChHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
ciogZ3JhcGhpY3NMYXllciwgYm9vbCByZWN1cnNlLCBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFw
cGVyKQoreworICAgIHN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihncmFwaGljc0xheWVyLCB0ZXh0
dXJlTWFwcGVyKTsKKworICAgIGdyYXBoaWNzTGF5ZXItPmRpZFN5bmNocm9uaXplKCk7CisKKyAg
ICBpZiAobV9zdGF0ZS5tYXNrTGF5ZXIpIHsKKyAgICAgICAgbV9zdGF0ZS5tYXNrTGF5ZXItPnN5
bmNDb21wb3NpdGluZ1N0YXRlSW50ZXJuYWwodG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihn
cmFwaGljc0xheWVyLT5tYXNrTGF5ZXIoKSksIGZhbHNlLCB0ZXh0dXJlTWFwcGVyKTsKKyAgICAg
ICAgaWYgKG1fc3RhdGUubWFza0xheWVyLT5tX3NpemUuaXNFbXB0eSgpKQorICAgICAgICAgICAg
bV9zdGF0ZS5tYXNrTGF5ZXItPm1fc2l6ZSA9IG1fc2l6ZTsKKyAgICB9CisKKyAgICBpZiAobV9z
dGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5zeW5jQ29t
cG9zaXRpbmdTdGF0ZUludGVybmFsKHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoZ3JhcGhp
Y3NMYXllci0+cmVwbGljYUxheWVyKCkpLCBmYWxzZSwgdGV4dHVyZU1hcHBlcik7CisKKyAgICBp
ZiAobV9zdGF0ZS5kaXJ0eSkKKyAgICAgICAgdXBsb2FkVGV4dHVyZUZyb21Db250ZW50KHRleHR1
cmVNYXBwZXIsIG1fc3RhdGUudmlzaWJsZVJlY3QsIGdyYXBoaWNzTGF5ZXIpOworCisgICAgbV9j
dXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0ID0gSW50UmVjdCgpOworICAgIG1fY3VycmVu
dENvbnRlbnQubmVlZHNEaXNwbGF5ID0gZmFsc2U7CisKKyAgICBpZiAoIXJlY3Vyc2UpCisgICAg
ICAgIHJldHVybjsKKworICAgIFZlY3RvcjxHcmFwaGljc0xheWVyKj4gY2hpbGRyZW4gPSBncmFw
aGljc0xheWVyLT5jaGlsZHJlbigpOworICAgIGZvciAoaW50IGkgPSBjaGlsZHJlbi5zaXplKCkg
LSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRv
VGV4dHVyZU1hcHBlck5vZGUoY2hpbGRyZW5baV0pOworICAgICAgICBpZiAoIW5vZGUpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbm9kZS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbnRl
cm5hbCh0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGNoaWxkcmVuW2ldKSwgdHJ1ZSwgdGV4
dHVyZU1hcHBlcik7CisgICAgfQorfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi45Njk0MDQzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaApAQCAtMCwwICsxLDI1MiBAQAor
LyoKKyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgVGV4dHVyZU1h
cHBlck5vZGVfaAorI2RlZmluZSBUZXh0dXJlTWFwcGVyTm9kZV9oCisKKyNpbmNsdWRlICJDdXJy
ZW50VGltZS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJIYXNoTWFwLmgi
CisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAi
VGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgi
CisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCisj
aW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiVW5pdEJl
emllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHR1cmVNYXBwZXJOb2Rl
OworY2xhc3MgVGV4dHVyZU1hcHBlckNhY2hlOworY2xhc3MgR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXI7CisKK3N0cnVjdCBUZXhtYXBQYWludE9wdGlvbnMgeworICAgIEJpdG1hcFRleHR1cmUq
IHN1cmZhY2U7CisgICAgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcjsKKyAgICBUZXh0dXJl
TWFwcGVyTm9kZSogcm9vdExheWVyOworICAgIGZsb2F0IG9wYWNpdHk7CisgICAgSW50UmVjdCBz
Y2lzc29yUmVjdDsKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0OworICAgIGJvb2wgaXNTdXJmYWNl
OworICAgIFRleHR1cmVNYXBwZXJDYWNoZSogY2FjaGU7Cit9OworCitjbGFzcyBUZXh0dXJlTWFw
cGVyTm9kZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyQ29udGVudExheWVyIHsKKworcHVibGljOgor
ICAgIC8vIFRoaXMgc2V0IG9mIGZsYWdzIGhlbHAgdXMgZGVmZXIgd2hpY2ggcHJvcGVydGllcyBv
ZiB0aGUgbGF5ZXIgaGF2ZSBiZWVuCisgICAgLy8gbW9kaWZpZWQgYnkgdGhlIGNvbXBvc2l0b3Is
IHNvIHdlIGNhbiBrbm93IHdoYXQgdG8gbG9vayBmb3IgaW4gdGhlIG5leHQgZmx1c2guCisgICAg
ZW51bSBDaGFuZ2VNYXNrIHsKKyAgICAgICAgTm9DaGFuZ2VzID0gICAgICAgICAgICAgICAgIDAs
CisKKyAgICAgICAgUGFyZW50Q2hhbmdlID0gICAgICAgICAgICAgICgxTCA8PCAwKSwKKyAgICAg
ICAgQ2hpbGRyZW5DaGFuZ2UgPSAgICAgICAgICAgICgxTCA8PCAxKSwKKyAgICAgICAgTWFza0xh
eWVyQ2hhbmdlID0gICAgICAgICAgICgxTCA8PCAyKSwKKyAgICAgICAgUG9zaXRpb25DaGFuZ2Ug
PSAgICAgICAgICAgICgxTCA8PCAzKSwKKworICAgICAgICBBbmNob3JQb2ludENoYW5nZSA9ICAg
ICAgICAgKDFMIDw8IDQpLAorICAgICAgICBTaXplQ2hhbmdlICA9ICAgICAgICAgICAgICAgKDFM
IDw8IDUpLAorICAgICAgICBUcmFuc2Zvcm1DaGFuZ2UgPSAgICAgICAgICAgKDFMIDw8IDYpLAor
ICAgICAgICBDb250ZW50Q2hhbmdlID0gICAgICAgICAgICAgKDFMIDw8IDcpLAorCisgICAgICAg
IENvbnRlbnRzT3JpZW50YXRpb25DaGFuZ2UgPSAoMUwgPDwgOSksCisgICAgICAgIE9wYWNpdHlD
aGFuZ2UgPSAgICAgICAgICAgICAoMUwgPDwgMTApLAorICAgICAgICBDb250ZW50c1JlY3RDaGFu
Z2UgPSAgICAgICAgKDFMIDw8IDExKSwKKworICAgICAgICBQcmVzZXJ2ZXMzRENoYW5nZSA9ICAg
ICAgICAgKDFMIDw8IDEyKSwKKyAgICAgICAgTWFza3NUb0JvdW5kc0NoYW5nZSA9ICAgICAgICgx
TCA8PCAxMyksCisgICAgICAgIERyYXdzQ29udGVudENoYW5nZSA9ICAgICAgICAoMUwgPDwgMTQp
LAorICAgICAgICBDb250ZW50c09wYXF1ZUNoYW5nZSA9ICAgICAgKDFMIDw8IDE1KSwKKworICAg
ICAgICBCYWNrZmFjZVZpc2liaWxpdHlDaGFuZ2UgPSAgKDFMIDw8IDE2KSwKKyAgICAgICAgQ2hp
bGRyZW5UcmFuc2Zvcm1DaGFuZ2UgPSAgICgxTCA8PCAxNyksCisgICAgICAgIERpc3BsYXlDaGFu
Z2UgPSAgICAgICAgICAgICAoMUwgPDwgMTgpLAorICAgICAgICBCYWNrZ3JvdW5kQ29sb3JDaGFu
Z2UgPSAgICAgKDFMIDw8IDE5KSwKKworICAgICAgICBSZXBsaWNhTGF5ZXJDaGFuZ2UgPSAgICAg
ICAgKDFMIDw8IDIwKQorICAgIH07CisgICAgLy8gVGhlIGNvbXBvc2l0b3IgbGV0cyB1cyBzcGVj
aWFsLWNhc2UgaW1hZ2VzIGFuZCBjb2xvcnMsIHNvIHdlIHRyeSB0byBkbyBzby4KKyAgICBlbnVt
IENvbnRlbnRUeXBlIHsgSFRNTENvbnRlbnRUeXBlLCBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlLCBD
b2xvckNvbnRlbnRUeXBlLCBNZWRpYUNvbnRlbnRUeXBlLCBDYW52YXMzRENvbnRlbnRUeXBlfTsK
KyAgICBzdHJ1Y3QgQ29udGVudERhdGEgeworICAgICAgICBJbnRSZWN0IG5lZWRzRGlzcGxheVJl
Y3Q7CisgICAgICAgIGJvb2wgbmVlZHNEaXNwbGF5OworICAgICAgICBDb2xvciBiYWNrZ3JvdW5k
Q29sb3I7CisKKyAgICAgICAgQ29udGVudFR5cGUgY29udGVudFR5cGU7CisgICAgICAgIFJlZlB0
cjxJbWFnZT4gaW1hZ2U7CisgICAgICAgIFRleHR1cmVNYXBwZXJWaWRlb0xheWVyKiBtZWRpYTsK
KworICAgICAgICBDb250ZW50RGF0YSgpCisgICAgICAgICAgICA6IG5lZWRzRGlzcGxheShmYWxz
ZSkKKyAgICAgICAgICAgICwgY29udGVudFR5cGUoSFRNTENvbnRlbnRUeXBlKQorICAgICAgICAg
ICAgLCBpbWFnZSgwKQorICAgICAgICAgICAgLCBtZWRpYSgwKQorICAgICAgICB7CisgICAgICAg
IH0KKyAgICB9OworCisKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSgpOworICAgIHZpcnR1YWwgflRl
eHR1cmVNYXBwZXJOb2RlKCk7CisKKyAgICB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlKEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiwgYm9vbCByZWN1cnNpdmUpOworCitwcm90ZWN0ZWQ6Cisg
ICAgLy8gUmVpbXBzIGZyb20gVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcgorICAgIHZpcnR1YWwg
SW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgdmlydHVhbCB2b2lk
IHNldFBsYXRmb3JtTGF5ZXJDbGllbnQoVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50Kik7CisgICAg
dmlydHVhbCB2b2lkIHBhaW50KFRleHR1cmVNYXBwZXIqLCBjb25zdCBUZXh0dXJlTWFwcGVyQ29u
dGVudExheWVyOjpQYWludE9wdGlvbnMmKTsKKworcHJpdmF0ZToKKyAgICBUZXh0dXJlTWFwcGVy
Tm9kZSogcm9vdExheWVyKCk7CisgICAgdm9pZCBjbGVhckRpcmVjdEltYWdlKCk7CisgICAgdm9p
ZCBjb21wdXRlVHJhbnNmb3JtYXRpb25zKCk7CisgICAgSW50U2l6ZSBuZWFyZXN0U3VyZmFjZVNp
emUoKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVSZXBsaWNhVHJhbnNmb3JtKCk7CisgICAgdm9p
ZCBjb21wdXRlTGF5ZXJUeXBlKCk7CisgICAgdm9pZCBjb21wdXRlTG9jYWxUcmFuc2Zvcm0oKTsK
KyAgICB2b2lkIGZsYXR0ZW5UbzJEU3BhY2VJZk5lY2Vzc2FyeSgpOworICAgIHZvaWQgaW5pdGlh
bGl6ZVRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciopOworICAgIHZvaWQgaW52YWxpZGF0ZVRy
YW5zZm9ybSgpOworICAgIHZvaWQgbm90aWZ5Q2hhbmdlKENoYW5nZU1hc2spOworICAgIHZvaWQg
c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoSW50UmVj
dCk7CisgICAgdm9pZCBwZXJmb3JtUG9zdFN5bmNPcGVyYXRpb25zKCk7CisgICAgdm9pZCBzeW5j
Q29tcG9zaXRpbmdTdGF0ZUludGVybmFsKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiwgYm9v
bCByZWN1cnNpdmUsIFRleHR1cmVNYXBwZXIqKTsKKyAgICB2b2lkIHN5bmNDb21wb3NpdGluZ1N0
YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpY3NMYXllciwgVGV4dHVy
ZU1hcHBlciogdGV4dHVyZU1hcHBlcik7CisgICAgVGV4dHVyZU1hcHBlckNhY2hlKiBjYWNoZSgp
OworCisgICAgdm9pZCBwYWludFJlY3Vyc2l2ZShUZXhtYXBQYWludE9wdGlvbnMgb3B0aW9ucyk7
CisgICAgYm9vbCBwYWludFJlcGxpY2EoY29uc3QgVGV4bWFwUGFpbnRPcHRpb25zJiBvcHRpb25z
KTsKKyAgICB2b2lkIHBhaW50U3VyZmFjZShjb25zdCBUZXhtYXBQYWludE9wdGlvbnMmIG9wdGlv
bnMpOworICAgIHZvaWQgcGFpbnRTZWxmKGNvbnN0IFRleG1hcFBhaW50T3B0aW9ucyYgb3B0aW9u
cyk7CisgICAgdm9pZCBwYWludFNlbGZBbmRDaGlsZHJlbihjb25zdCBUZXhtYXBQYWludE9wdGlv
bnMmIG9wdGlvbnMsIFRleG1hcFBhaW50T3B0aW9ucyYgb3B0aW9uc0ZvckRlc2NlbmRhbnRzKTsK
KyAgICB2b2lkIHVwbG9hZFRleHR1cmVGcm9tQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJl
TWFwcGVyLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgR3JhcGhpY3NMYXllciogbGF5ZXIp
OworCisgICAgaW50IGNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCgpIGNvbnN0OworICAgIGJv
b2wgaGFzU3VyZmFjZURlc2NlbmRhbnRzKCkgY29uc3Q7CisKKyAgICBUZXh0dXJlTWFwcGVyKiB0
ZXh0dXJlTWFwcGVyKCk7CisKKworICAgIHN0YXRpYyBUZXh0dXJlTWFwcGVyTm9kZSogdG9UZXh0
dXJlTWFwcGVyTm9kZShHcmFwaGljc0xheWVyKik7CisgICAgc3RhdGljIGludCBjb21wYXJlR3Jh
cGhpY3NMYXllcnNaVmFsdWUoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYik7CisgICAgc3Rh
dGljIHZvaWQgc29ydEJ5Wk9yZGVyKFZlY3RvcjxUZXh0dXJlTWFwcGVyTm9kZSogPiYgYXJyYXks
IGludCBmaXJzdCwgaW50IGxhc3QpOworICAgIHN0cnVjdCBUcmFuc2Zvcm1EYXRhIHsKKyAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYmFzZSwgdGFyZ2V0LCByZXBsaWNhLCBmb3JEZXNjZW5k
YW50cywgcGVyc3BlY3RpdmUsIGxvY2FsOworICAgICAgICBJbnRSZWN0IHRhcmdldEJvdW5kaW5n
UmVjdDsKKyAgICAgICAgZmxvYXQgY2VudGVyWjsKKyAgICAgICAgYm9vbCBkaXJ0eSwgbG9jYWxE
aXJ0eSwgcGVyc3BlY3RpdmVEaXJ0eTsKKyAgICAgICAgSW50UmVjdCBib3VuZGluZ1JlY3RGcm9t
Um9vdDsKKyAgICAgICAgVHJhbnNmb3JtRGF0YSgpIDogZGlydHkodHJ1ZSksIGxvY2FsRGlydHko
dHJ1ZSksIHBlcnNwZWN0aXZlRGlydHkodHJ1ZSkgeyB9CisgICAgfTsKKworICAgIFRyYW5zZm9y
bURhdGEgbV90cmFuc2Zvcm1zOworCisgICAgZW51bSBMYXllclR5cGUgeworICAgICAgICBEZWZh
dWx0TGF5ZXIsCisgICAgICAgIFJvb3RMYXllciwKKyAgICAgICAgU2Npc3NvckxheWVyLAorICAg
ICAgICBDbGlwTGF5ZXIsCisgICAgICAgIFRyYW5zcGFyZW5jeUxheWVyCisgICAgfTsKKworICAg
IExheWVyVHlwZSBtX2xheWVyVHlwZTsKKworICAgIGlubGluZSBJbnRSZWN0IHRhcmdldFJlY3Qo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5
cGUgPT0gSFRNTENvbnRlbnRUeXBlID8gZW50aXJlUmVjdCgpIDogbV9zdGF0ZS5jb250ZW50c1Jl
Y3Q7CisgICAgfQorCisgICAgaW5saW5lIEludFJlY3QgZW50aXJlUmVjdCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhl
aWdodCgpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSW50UmVjdCByZXBsaWNhUmVjdCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9sYXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIg
PyBJbnRSZWN0KDAsIDAsIG1fbmVhcmVzdFN1cmZhY2VTaXplLndpZHRoKCksIG1fbmVhcmVzdFN1
cmZhY2VTaXplLmhlaWdodCgpKSA6IGVudGlyZVJlY3QoKTsKKyAgICB9CisKKyAgICBSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gbV90ZXh0dXJlOworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBtX3N1
cmZhY2UsIG1fcmVwbGljYVN1cmZhY2U7CisKKyAgICBDb250ZW50RGF0YSBtX2N1cnJlbnRDb250
ZW50OworCisgICAgVmVjdG9yPFRleHR1cmVNYXBwZXJOb2RlKj4gbV9jaGlsZHJlbjsKKyAgICBU
ZXh0dXJlTWFwcGVyTm9kZSogbV9wYXJlbnQ7CisgICAgVGV4dHVyZU1hcHBlck5vZGUqIG1fZWZm
ZWN0VGFyZ2V0OworICAgIEludFNpemUgbV9zaXplLCBtX25lYXJlc3RTdXJmYWNlU2l6ZTsKKyAg
ICBTdHJpbmcgbV9uYW1lOworICAgIFRleHR1cmVNYXBwZXJMYXllckNsaWVudCogbV9wbGF0Zm9y
bUNsaWVudDsKKworICAgIHN0cnVjdCBTdGF0ZSB7CisgICAgICAgIEZsb2F0UG9pbnQgcG9zOwor
ICAgICAgICBGbG9hdFBvaW50M0QgYW5jaG9yUG9pbnQ7CisgICAgICAgIEZsb2F0U2l6ZSBzaXpl
OworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CisgICAgICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGNoaWxkcmVuVHJhbnNmb3JtOworICAgICAgICBDb2xvciBiYWNrZ3Jv
dW5kQ29sb3I7CisgICAgICAgIENvbG9yIGN1cnJlbnRDb2xvcjsKKyAgICAgICAgR3JhcGhpY3NM
YXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIGdlb09yaWVudGF0aW9uOwor
ICAgICAgICBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24g
Y29udGVudHNPcmllbnRhdGlvbjsKKyAgICAgICAgZmxvYXQgb3BhY2l0eTsKKyAgICAgICAgSW50
UmVjdCBjb250ZW50c1JlY3Q7CisgICAgICAgIGludCBkZXNjZW5kYW50c1dpdGhDb250ZW50Owor
ICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbWFza0xheWVyOworICAgICAgICBUZXh0dXJlTWFw
cGVyTm9kZSogcmVwbGljYUxheWVyOworICAgICAgICBib29sIHByZXNlcnZlczNEOworICAgICAg
ICBib29sIG1hc2tzVG9Cb3VuZHM7CisgICAgICAgIGJvb2wgZHJhd3NDb250ZW50OworICAgICAg
ICBib29sIGNvbnRlbnRzT3BhcXVlOworICAgICAgICBib29sIGJhY2tmYWNlVmlzaWJpbGl0eTsK
KyAgICAgICAgYm9vbCB2aXNpYmxlOworICAgICAgICBib29sIGRpcnR5OworICAgICAgICBib29s
IHRpbGVkOworICAgICAgICBib29sIGhhc1N1cmZhY2VEZXNjZW5kYW50czsKKyAgICAgICAgSW50
UmVjdCB2aXNpYmxlUmVjdDsKKworICAgICAgICBTdGF0ZSgpCisgICAgICAgICAgICA6IG9wYWNp
dHkoMS5mKQorICAgICAgICAgICAgLCBkZXNjZW5kYW50c1dpdGhDb250ZW50KDApCisgICAgICAg
ICAgICAsIG1hc2tMYXllcigwKQorICAgICAgICAgICAgLCByZXBsaWNhTGF5ZXIoMCkKKyAgICAg
ICAgICAgICwgcHJlc2VydmVzM0QoZmFsc2UpCisgICAgICAgICAgICAsIG1hc2tzVG9Cb3VuZHMo
ZmFsc2UpCisgICAgICAgICAgICAsIGRyYXdzQ29udGVudChmYWxzZSkKKyAgICAgICAgICAgICwg
Y29udGVudHNPcGFxdWUoZmFsc2UpCisgICAgICAgICAgICAsIGJhY2tmYWNlVmlzaWJpbGl0eShm
YWxzZSkKKyAgICAgICAgICAgICwgdmlzaWJsZSh0cnVlKQorICAgICAgICAgICAgLCBkaXJ0eSh0
cnVlKQorICAgICAgICAgICAgLCB0aWxlZChmYWxzZSkKKyAgICAgICAgICAgICwgaGFzU3VyZmFj
ZURlc2NlbmRhbnRzKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
U3RhdGUgbV9zdGF0ZTsKKyAgICBUZXh0dXJlTWFwcGVyQ2FjaGUqIG1fY2FjaGU7Cit9OworCit9
CisjZW5kaWYgLy8gVGV4dHVyZU1hcHBlck5vZGVfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgK
aW5kZXggYTE1NjgxYy4uMmEzOGI5MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCkBAIC0z
Niw2ICszNiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVj
dCYgcmVjdCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplQ2hhbmdlZChjb25zdCBJbnRT
aXplJikgPSAwOworICAgIHZpcnR1YWwgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcigpID0g
MDsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyIHsKZGlmZiAtLWdpdCBh
L1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcCBiL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNw
cAppbmRleCA2M2NkN2Y3Li43ZDQyM2Q1IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJm
cmFtZS5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCkBAIC0zMDksOSArMzA5
LDYgQEAgdm9pZCBRV2ViRnJhbWVQcml2YXRlOjpyZW5kZXJDb21wb3NpdGVkTGF5ZXJzKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW4KICAgICBpZiAoIXJvb3RHcmFwaGljc0xheWVy
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIXRleHR1cmVNYXBwZXIpCi0gICAgICAgIHRl
eHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoY29udGV4dCk7Ci0KICAgICB0ZXh0
dXJlTWFwcGVyLT5zZXRHcmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAgICAgdGV4dHVyZU1hcHBl
ci0+c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LT5pbWFnZUludGVycG9sYXRp
b25RdWFsaXR5KCkpOwogICAgIHRleHR1cmVNYXBwZXItPnNldFRleHREcmF3aW5nTW9kZShjb250
ZXh0LT50ZXh0RHJhd2luZ01vZGUoKSk7CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJm
cmFtZV9wLmggYi9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmgKaW5kZXggNjM0ZTIxYi4uN2Mw
ZDIzNSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oCisrKyBiL1dlYktp
dC9xdC9BcGkvcXdlYmZyYW1lX3AuaApAQCAtMTEzLDcgKzExMyw3IEBAIHB1YmxpYzoKICAgICBp
bnQgbWFyZ2luSGVpZ2h0OwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNF
KFRFWFRVUkVfTUFQUEVSKQogICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIq
IHJvb3RHcmFwaGljc0xheWVyOwotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiB0
ZXh0dXJlTWFwcGVyOworICAgIE93blB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiB0ZXh0dXJl
TWFwcGVyOwogI2VuZGlmCiAgICAgYm9vbCB6b29tVGV4dE9ubHk7CiB9OwpkaWZmIC0tZ2l0IGEv
V2ViS2l0L3F0L0NoYW5nZUxvZyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggYmMwMDVkMi4u
OWI0NjU5OSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvcXQv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTAtMTEtMDUgIE5vYW0gUm9zZW50aGFsICA8
bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5pdGlhbCBp
bXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDcwNzAKKworICAgICAgICBSZW9yZ2FuaXplZCB0aGUgdGV4dHVyZU1hcHBlciB0byBi
ZSBhIG1lbWJlciBvZiBRV2ViRnJhbWVQcml2YXRlLCB0byBoZWxwIHdpdGggbWFraW5nCisgICAg
ICAgIFRleHR1cmVNYXBwZXIgdGhyZWFkLXNhZmUuCisKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1l
LmNwcDoKKyAgICAgICAgKFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlckNvbXBvc2l0ZWRMYXllcnMp
OgorICAgICAgICAqIEFwaS9xd2ViZnJhbWVfcC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L1BhZ2VDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUxheWVyUHJveHlR
dDo6c2V0VGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUxheWVyUHJv
eHlRdDo6dGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUxheWVyUHJv
eHlRV2lkZ2V0OjpQbGF0Zm9ybUxheWVyUHJveHlRV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtTGF5ZXJQcm94eVFHcmFwaGljc09iamVjdDo6UGxhdGZvcm1MYXllclByb3h5UUdy
YXBoaWNzT2JqZWN0KToKKwogMjAxMC0xMS0wNSAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpkaWZmIC0tZ2l0IGEv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAgYi9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcAppbmRleCA0ZDQyYzM5Li45ZmE1YmY3IDEwMDY0
NAotLS0gYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcAorKysgYi9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcApAQCAtMjEsMTUgKzIxLDE5
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlICJQYWdlQ2xpZW50UXQuaCIKKyNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyUXQuaCIKICNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXIuaCIKLQorI2luY2x1ZGUgPFFHcmFwaGljc1NjZW5lPgorI2luY2x1ZGUg
PFFHcmFwaGljc1ZpZXc+CiAjaWYgZGVmaW5lZChRX1dTX1gxMSkKICNpbmNsdWRlIDxRWDExSW5m
bz4KICNlbmRpZgogCiAjaWZkZWYgUVRfT1BFTkdMX0xJQgorI2luY2x1ZGUgIm9wZW5nbC9UZXh0
dXJlTWFwcGVyR0wuaCIKICNpbmNsdWRlIDxRR0xXaWRnZXQ+CiAjZW5kaWYKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVY
VFVSRV9NQVBQRVIpICAgIApAQCAtNDUsNiArNDksMTEgQEAgcHVibGljOgogICAgICAgICBtX2Zy
YW1lLT5kLT5yb290R3JhcGhpY3NMYXllciA9IG1fbGF5ZXI7CiAgICAgfQogCisgICAgdm9pZCBz
ZXRUZXh0dXJlTWFwcGVyKFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gdGV4dHVyZU1hcHBlcikK
KyAgICB7CisgICAgICAgIG1fZnJhbWUtPmQtPnRleHR1cmVNYXBwZXIgPSB0ZXh0dXJlTWFwcGVy
OworICAgIH0KKwogICAgIHZpcnR1YWwgflBsYXRmb3JtTGF5ZXJQcm94eVF0KCkKICAgICB7CiAg
ICAgICAgIGlmIChtX2xheWVyKQpAQCAtNTMsNiArNjIsMTEgQEAgcHVibGljOgogICAgICAgICAg
ICAgbV9mcmFtZS0+ZC0+cm9vdEdyYXBoaWNzTGF5ZXIgPSAwOwogICAgIH0KIAorICAgIHZpcnR1
YWwgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcigpCisgICAgeworICAgICAgICByZXR1cm4g
bV9mcmFtZS0+ZC0+dGV4dHVyZU1hcHBlci5nZXQoKTsKKyAgICB9CisKICAgICAvLyBTaW5jZSB3
ZSBqdXN0IHBhaW50IHRoZSBjb21wb3NpdGVkIHRyZWUgYW5kIG5ldmVyIGNyZWF0ZSBhIHNwZWNp
YWwgaXRlbSBmb3IgaXQsIHdlIGRvbid0IGhhdmUgdG8gaGFuZGxlIGl0cyBzaXplIGNoYW5nZXMu
CiAgICAgdm9pZCBzZXRTaXplQ2hhbmdlZChjb25zdCBJbnRTaXplJikgeyB9CiAKQEAgLTY5LDYg
KzgzLDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChtX3dpZGdldCkKICAgICAgICAg
ICAgIG1fd2lkZ2V0LT5pbnN0YWxsRXZlbnRGaWx0ZXIodGhpcyk7CisKKyAgICAgICAgaWYgKHRl
eHR1cmVNYXBwZXIoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzZXRUZXh0dXJl
TWFwcGVyKFRleHR1cmVNYXBwZXJRdDo6Y3JlYXRlKCkpOwogICAgIH0KIAogICAgIC8vIFdlIGRv
bid0IHdhbnQgYSBodWdlIHJlZ2lvbi1jbGlwIG9uIHRoZSBjb21wb3NpdGluZyBsYXllcnM7IGlu
c3RlYWQgd2UgdW5pdGUgdGhlIHJlY3RhbmdsZXMgdG9nZXRoZXIKQEAgLTEwMyw2ICsxMjIsMTcg
QEAgcHVibGljOgogICAgICAgICA6IFBsYXRmb3JtTGF5ZXJQcm94eVF0KGZyYW1lLCBsYXllciwg
b2JqZWN0KQogICAgICAgICAsIG1fZ3JhcGhpY3NJdGVtKG9iamVjdCkKICAgICB7CisgICAgICAg
IGlmICh0ZXh0dXJlTWFwcGVyKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyNpZmRlZiBRVF9P
UEVOR0xfTElCCisgICAgICAgIFFHcmFwaGljc1ZpZXcqIHZpZXcgPSBvYmplY3QtPnNjZW5lKCkt
PnZpZXdzKClbMF07CisgICAgICAgIGlmICh2aWV3ICYmIHZpZXctPnZpZXdwb3J0KCkgJiYgdmll
dy0+dmlld3BvcnQoKS0+aW5oZXJpdHMoIlFHTFdpZGdldCIpKSB7CisgICAgICAgICAgICBzZXRU
ZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgc2V0VGV4dHVyZU1hcHBlcihUZXh0dXJl
TWFwcGVyUXQ6OmNyZWF0ZSgpKTsKICAgICB9CiAKICAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73244</attachid>
            <date>2010-11-08 08:59:36 -0800</date>
            <delta_ts>2010-11-08 10:08:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>47070.diff</filename>
            <type>text/plain</type>
            <size>117716</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBiZTk4ZjFkLi5kZmI0MTk1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMTEt
MDggIE5vYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgorCisgICAgICAgIFtUZXht
YXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcwNzAKKworICAgICAgICBB
ZGRlZCBhIHRlc3QgdGhhdCBpbmNsdWRlcyBzZXZlcmFsIGNvbXBvc2l0ZWQgbGF5ZXJzLCBjb250
YWluaW5nIHBpeGVsIGRhdGEgdGhhdCdzIGxhcmdlcgorICAgICAgICB0aGFuIDI0TUIsIHdoaWNo
IGlzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBUZXh0dXJlTWFwcGVyJ3MgY2FjaGUuIFRoaXMgdGVz
dHMgdGhlIHZpZGVvIG1lbW9yeQorICAgICAgICBjZWlsaW5nIGZ1bmN0aW9uYWxpdHkgb2YgVGV4
dHVyZU1hcHBlciwgYXMgcHVyZ2luZyB0aGF0IGNhY2hlIHdvdWxkIGtpY2sgaW4gd2hlIHJ1bm5p
bmcgdGhpcyB0ZXN0LgorCisgICAgICAgICogY29tcG9zaXRpbmcvbGF5ZXItY3JlYXRpb24vbWFu
eS1sYXllcnMuaHRtbDogQWRkZWQuCisKIDIwMTAtMTEtMDggIENzYWJhIE9zenRyb2dvbmFjICA8
b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFVwZGF0ZSBleHBlY3RhdGlv
bnMuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9sYXllci1jcmVhdGlvbi9t
YW55LWxheWVycy5odG1sIGIvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvbGF5ZXItY3JlYXRpb24v
bWFueS1sYXllcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODJl
OGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvbGF5ZXItY3Jl
YXRpb24vbWFueS1sYXllcnMuaHRtbApAQCAtMCwwICsxLDgxIEBACis8IURPQ1RZUEUgaHRtbCBQ
VUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICAgImh0dHA6
Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+CisKKzxodG1sIGxhbmc9ImVuIj4KKzxo
ZWFkPgorICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRt
bDsgY2hhcnNldD11dGYtOCI+CisgIDx0aXRsZT51bnRpdGxlZDwvdGl0bGU+CisgIDxzdHlsZSB0
eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+CisKKyAgICAudGlsZSB7CisgICAgICAgIC13
ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOworICAgICAgICB3aWR0aDogMTAyNHB4Owor
ICAgICAgICBoZWlnaHQ6IDEwMjRweDsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47
CisgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgb3BhY2l0eTogMC4xOworICAg
IH0KKyAgICAKKyAgICAjcmVkIHsgCisgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKKyAg
ICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAgICBsZWZ0OiAwcHg7CisgICAgICAgIHRv
cDogMHB4OworICAgICAgICB3aWR0aDogODAwcHg7CisgICAgICAgIGhlaWdodDogNjAwcHg7Cisg
ICAgfQorCisgICAgI2NvbnRhaW5lciB0ZCB7CisgICAgICAgIHdpZHRoOiA1MHB4OworICAgIH0K
KyAgICAKKyAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxkaXYgaWQ9InRlc3RlciI+
CisgICAgPC9kaXY+CisgICAgPHRhYmxlIGlkPSJjb250YWluZXIiPgorICAgICAgICA8dHI+Cisg
ICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGlsZSI+CisgICAg
ICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgIDxkaXYgY2xh
c3M9InRpbGUiPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAg
ICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlIj4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAg
ICA8dGQ+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGlsZSI+CisgICAgICAgICAgICA8
L3RkPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbGUi
PgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICA8
ZGl2IGNsYXNzPSJ0aWxlIj4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+Cisg
ICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGlsZSI+CisgICAgICAgICAgICA8L3RkPgorICAg
ICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbGUiPgorICAgICAg
ICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNz
PSJ0aWxlIj4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAg
ICAgICAgPGRpdiBjbGFzcz0idGlsZSI+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAg
PHRkPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbGUiPgorICAgICAgICAgICAgPC90
ZD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlIj4K
KyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgPGRp
diBjbGFzcz0idGlsZSI+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICA8L3RyPgorICAgIDwv
dGFibGU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDFlNDg2NDMuLjY5ZjU5N2MgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAK
KzIwMTAtMTEtMDggIE5vYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgorCisgICAg
ICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBwZXIgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcwNzAKKwor
ICAgICAgICBNYWtlIHRoZSBuZWNlc3NhcnkgY2hhbmdlcyBpbiBUZXh0dXJlTWFwcGVyTm9kZSBp
biBwcmVwYXJhdGlvbiBvZiBtYWtpbmcgaXQgcG9zc2libGUgdG8gcGFpbnQgaXQKKyAgICAgICAg
ZnJvbSBhIGRpZmZlcmVudCB0aHJlYWQuCisgICAgICAgIFRoZSBtYWluIHByb2JsZW1hdGljIHBh
cnQgd2FzIHRoZSBjYWNoZSwgd2hpY2ggbWFkZSBpdCBzbyB0aGF0IHRleHR1cmVzIGNhbiBiZWNv
bWUgaW52YWxpZCBhbmQgaGF2ZSB0bworICAgICAgICBiZSByZXJlbmRlcmVkIGZyb20gY29udGVu
dCBkdXJpbmcgcGFpbnQuIFRoaXMgaXMgc29sdmVkIGhlcmUgYnkgY3JlYXRpbmcgYSBwYWNrL3Vu
cGFjayBmdW5jdGlvbiBmb3IKKyAgICAgICAgdGV4dHVyZXMsIHdoaWNoIGxldHMgYSB0ZXh0dXJl
IGFyY2hpdmUgaXRzIGRhdGEgYXdheSBmcm9tIHZpZGVvIG1lbW9yeSwgb3IgZG8gd2hhdGV2ZXIg
dGhlIHBsYXRmb3JtCisgICAgICAgIHRoaW5rcyBpcyByaWdodCBmb3IgZnJlZWluZyBtZW1vcnkg
d2l0aG91dCBuZWVkaW5nIHRvIHJlLXJlbmRlciBhZ2FpbiBmcm9tIGNvbnRlbnQgKHdoaWNoIGNh
bm5vdCBiZQorICAgICAgICBtYWRlIHRocmVhZCBzYWZlKS4KKworICAgICAgICBBZnRlciB0aGlz
IGNoYW5nZSwgVGV4dHVyZU1hcHBlck5vZGUgbW92ZWQgdG8gaXRzIG93biBmaWxlLCBhbmQgaGFz
IDIgZW50cnkgcG9pbnRzOiBwYWludCBhbmQgc3luY0NvbXBvc2l0aW5nU3RhdGUuCisgICAgICAg
IFRoZSBpZGVhIGlzIHRoYXQgc3luY0NvbXBvc2l0aW5nU3RhdGUgaGFzIHRvIGJlIGNhbGxlZCBp
biB0aGUgVUkgdGhyZWFkLCBwYWludCBjYW4gYmUgY2FsbGVkIGZyb20gYSBkaWZmZXJlbnQKKyAg
ICAgICAgdGhyZWFkLCBhbmQgdGhleSBzaG91bGQgYmxvY2sgZWFjaCBvdGhlci4KKworICAgICAg
ICBUaGUgbmV3IHRlc3QgdGVzdHMgdGhlIGNhY2hlIGNvZGUtcGF0aCwgdG8gc2hvdyB0aGF0IHRo
ZSBwYWNrL3VucGFjayB0ZWNobmlxdWUgd29ya3MgZm9yIGNhc2VzIHdoZXJlIGl0CisgICAgICAg
IGtpY2tzIGluLgorCisgICAgICAgIFRlc3Q6IGNvbXBvc2l0aW5nL2xheWVyLWNyZWF0aW9uL21h
bnktbGF5ZXJzLmh0bWwKKworICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwVGV4dHVyZUdMOjp+Qml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFRleHR1cmVHTDo6Qml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJHTDo6VGV4dHVyZU1hcHBlckdMKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9UZXh0dXJlTWFwcGVyR0wuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJH
TDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVy
UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZVF0OjpwYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVRdDo6dW5wYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJl
UXQ6OkJpdG1hcFRleHR1cmVRdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4
dHVyZU1hcHBlclF0Lmg6IEFkZGVkLgorCiAyMDEwLTExLTA4ICBBZGFtIFJvYmVuICA8YXJvYmVu
QGFwcGxlLmNvbT4KIAogICAgICAgICBXaW5kb3dzIFJlbGVhc2UgYnVpbGQgZml4IGFmdGVyIHI3
MTUxNApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5w
cm8KaW5kZXggM2QzMGFhNi4uN2E5OGExZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBy
bworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0zODU3LDExICszODU3LDE1IEBAIHdpbjMy
OiF3aW4zMi1nKysqOmNvbnRhaW5zKFFNQUtFX0hPU1QuYXJjaCwgeDg2XzY0KTp7CiBjb250YWlu
cyhDT05GSUcsIHRleG1hcCkgewogICAgIERFRklORVMgKz0gV1RGX1VTRV9URVhUVVJFX01BUFBF
Uj0xCiAgICAgSEVBREVSUyArPSBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1
cmVNYXBwZXJRdC5oIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlci5oIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJOb2RlLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXIuaAogCiAgICAgU09VUkNFUyArPSBcCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwIFwKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAogCiAgICAgY29u
dGFpbnMoUVRfQ09ORklHLCBvcGVuZ2wpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDQxYmNmYzQuLjAzZjliN2Mg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBw
ZXJHTC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1h
cHBlckdMLmNwcApAQCAtMjI5LDYgKzIyOSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7
CiAgICAgdmlydHVhbCB2b2lkIGVuZFBhaW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRl
bnRzVG9JbWFnZShJbWFnZSopOworICAgIH5CaXRtYXBUZXh0dXJlR0woKSB7IGRlc3Ryb3koKTsg
fQogCiBwcml2YXRlOgogICAgIEdMdWludCBtX2lkOwpAQCAtMjQxLDEzICsyNDIsMTQgQEAgcHJp
dmF0ZToKICAgICBHTHVpbnQgbV9mYm87CiAgICAgSW50U2l6ZSBtX2FjdHVhbFNpemU7CiAgICAg
Ym9vbCBtX3N1cmZhY2VOZWVkc1Jlc2V0OwotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyR0w+IG1f
dGV4dHVyZU1hcHBlcjsKKyAgICBUZXh0dXJlTWFwcGVyR0wqIG1fdGV4dHVyZU1hcHBlcjsKICAg
ICBCaXRtYXBUZXh0dXJlR0woKQogICAgICAgICA6IG1faWQoMCkKICAgICAgICAgLCBtX2ltYWdl
KDApCiAgICAgICAgICwgbV9vcGFxdWUoZmFsc2UpCiAgICAgICAgICwgbV9mYm8oMCkKICAgICAg
ICAgLCBtX3N1cmZhY2VOZWVkc1Jlc2V0KHRydWUpCisgICAgICAgICwgbV90ZXh0dXJlTWFwcGVy
KDApCiAgICAgewogICAgIH0KIApAQCAtMjY1LDYgKzI2Nyw3IEBAIFRleHR1cmVNYXBwZXJHTDo6
VGV4dHVyZU1hcHBlckdMKCkKICAgICA6IG1fZGF0YShuZXcgVGV4dHVyZU1hcHBlckdMRGF0YSkK
IHsKICAgICBzdGF0aWMgYm9vbCBzaGFkZXJzQ29tcGlsZWQgPSBmYWxzZTsKKyAgICBvYnRhaW5D
dXJyZW50Q29udGV4dCgpOwogICAgIGlmIChzaGFkZXJzQ29tcGlsZWQpCiAgICAgICAgIHJldHVy
bjsKICAgICBzaGFkZXJzQ29tcGlsZWQgPSB0cnVlOwpAQCAtNDE2LDEyICs0MTksMTEgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1
cmUsIGNvbnN0IEludFJlY3QmIHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgbWFza1RleHR1cmVHTC0+bV9yZWxhdGl2ZVNpemUuaGVpZ2h0KCksIDAsIDAsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDF9OwotICAgICAg
ICBnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xEYXRh
OjpTaGFkZXJJbmZvOjpJbk1hc2tNYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNG1hc2sp
OworICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4
dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6SW5NYXNrTWF0cml4VmFyaWFibGVdLCAxLCBH
TF9GQUxTRSwgbTRtYXNrKSk7CiAgICAgICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtSW5m
by52YXJzW1RleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86Ok1hc2tUZXh0dXJlVmFyaWFi
bGVdLCAxKSkKICAgICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpCiAg
ICAgfQogCi0KICAgICBpZiAodGV4dHVyZUdMLm1fb3BhcXVlICYmIG9wYWNpdHkgPiAwLjk5ICYm
ICFtYXNrVGV4dHVyZSkKICAgICAgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9CTEVORCkpCiAgICAg
ZWxzZSB7CkBAIC00MzIsNyArNDM0LDYgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0
dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHQKICAgICBH
TF9DTUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpCiB9CiAKLQogY29uc3Qg
Y2hhciogVGV4dHVyZU1hcHBlckdMOjp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gIk9wZW5H
TCI7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJl
TWFwcGVyR0wuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBw
ZXJHTC5oCmluZGV4IGQwNTYwMWQuLjgwMzVhYmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCkBAIC00Nyw2ICs0NywxMCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiB0eXBlKCkgY29uc3Q7CiAgICAgdm9pZCBv
YnRhaW5DdXJyZW50Q29udGV4dCgpOwogICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlckdMPiBjcmVhdGUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG5ldyBUZXh0dXJlTWFwcGVyR0w7CisgICAgfQogCiBwcml2YXRlOgogICAg
IGlubGluZSBUZXh0dXJlTWFwcGVyR0xEYXRhJiBkYXRhKCkgeyByZXR1cm4gKm1fZGF0YTsgfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwCmlu
ZGV4IDFjM2ExYzcuLjZmZGQ3ZGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L1RleHR1cmVNYXBwZXJRdC5jcHAKQEAgLTE4LDcgKzE4LDcgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyUXQuaCIKIAogI2luY2x1ZGUgPFF0Q29yZS9xZGVidWcuaD4KICNpbmNs
dWRlIDxRdEd1aS9xcGFpbnRlbmdpbmUuaD4KQEAgLTMwLDQ2ICszMCw2IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgQml0bWFwVGV4dHVyZVF0IDogcHVibGljIEJpdG1hcFRleHR1
cmUgewotICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVyUXQ7Ci1wdWJsaWM6Ci0gICAgQml0
bWFwVGV4dHVyZVF0KCkge30KLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwotICAgIHZpcnR1
YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZShtX3BpeG1hcC53aWR0aCgp
LCBtX3BpeG1hcC5oZWlnaHQoKSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoY29uc3QgSW50
U2l6ZSYsIGJvb2wgb3BhcXVlKTsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7Ci0gICAgdmlydHVhbCB2b2lk
IGVuZFBhaW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSop
OwotICAgIHZpcnR1YWwgYm9vbCBzYXZlKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0gICAgdmlydHVh
bCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAhbV9waXhtYXAuaXNOdWxsKCk7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgYWxsb3dPZmZsaW5lVGV4dHVyZVVwbG9hZCgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KLSAgICBJbnRSZWN0IHNvdXJjZVJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0
KDAsIDAsIGNvbnRlbnRTaXplKCkud2lkdGgoKSwgY29udGVudFNpemUoKS5oZWlnaHQoKSk7IH0K
LXByaXZhdGU6Ci0gICAgUVBhaW50ZXIgbV9wYWludGVyOwotICAgIFFQaXhtYXAgbV9waXhtYXA7
Ci19OwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyUXQgOiBwdWJsaWMgVGV4dHVyZU1hcHBlciB7Ci1w
dWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUm
IHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tU
ZXh0dXJlKTsKLSAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3Vy
ZmFjZSk7Ci0gICAgdmlydHVhbCB2b2lkIHNldENsaXAoY29uc3QgSW50UmVjdCYpOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0Kik7Ci0gICAgdmly
dHVhbCBib29sIGFsbG93U3VyZmFjZUZvclJvb3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQot
ICAgIFRleHR1cmVNYXBwZXJRdCgpOwotICAgIHZpcnR1YWwgY29uc3QgY2hhciogdHlwZSgpIGNv
bnN0IHsgcmV0dXJuICJUZXh0dXJlTWFwcGVyUXQiOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRy
PEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKLQotICAgIHN0YXRpYyB2b2lkIGluaXRp
YWxpemUoUVBhaW50ZXIqIHBhaW50ZXIpCi0gICAgewotICAgICAgICBwYWludGVyLT5zZXRSZW5k
ZXJIaW50cyhRUGFpbnRlcjo6QW50aWFsaWFzaW5nIHwgUVBhaW50ZXI6OlNtb290aFBpeG1hcFRy
YW5zZm9ybSwgZmFsc2UpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBRUGFpbnRlciogbV9wYWlu
dGVyOwotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlUXQ+IG1fY3VycmVudFN1cmZhY2U7Ci19Owot
CiB2b2lkIEJpdG1hcFRleHR1cmVRdDo6ZGVzdHJveSgpCiB7CiAgICAgaWYgKG1fcGl4bWFwLnBh
aW50aW5nQWN0aXZlKCkpCkBAIC0xMTgsNiArNzgsMjYgQEAgdm9pZCBCaXRtYXBUZXh0dXJlUXQ6
OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiAgICAgbV9waXhtYXAgPSAqcGl4bWFw
OwogfQogCit2b2lkIEJpdG1hcFRleHR1cmVRdDo6cGFjaygpCit7CisgICAgaWYgKG1fcGl4bWFw
LmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2ltYWdlID0gbV9waXhtYXAudG9J
bWFnZSgpOworICAgIG1fcGl4bWFwID0gUVBpeG1hcCgpOworICAgIG1faXNQYWNrZWQgPSB0cnVl
OworfQorCit2b2lkIEJpdG1hcFRleHR1cmVRdDo6dW5wYWNrKCkKK3sKKyAgICBtX2lzUGFja2Vk
ID0gZmFsc2U7CisgICAgaWYgKG1faW1hZ2UuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fcGl4bWFwID0gUVBpeG1hcDo6ZnJvbUltYWdlKG1faW1hZ2UpOworICAgIG1faW1hZ2Ug
PSBRSW1hZ2UoKTsKK30KKwogdm9pZCBUZXh0dXJlTWFwcGVyUXQ6OnNldENsaXAoY29uc3QgSW50
UmVjdCYgcmVjdCkKIHsKICAgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBtX2N1cnJlbnRTdXJmYWNl
ID8gJm1fY3VycmVudFN1cmZhY2UtPm1fcGFpbnRlciA6IG1fcGFpbnRlcjsKQEAgLTE4MiwyMyAr
MTYyLDI2IEBAIHZvaWQgVGV4dHVyZU1hcHBlclF0OjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBU
ZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0CiAgICAgcGFpbnRlci0+c2V0T3BhY2l0
eShwcmV2T3BhY2l0eSk7CiB9CiAKLVBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlcj4gVGV4dHVyZU1h
cHBlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK1Bhc3NPd25QdHI8VGV4dHVy
ZU1hcHBlcj4gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkK
IHsKICNpZmRlZiBRVF9PUEVOR0xfTElCCi0gICAgaWYgKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLT5wYWludEVuZ2luZSgpLT50eXBlKCkgPT0gUVBhaW50RW5naW5lOjpPcGVuR0wyKSB7Ci0g
ICAgICAgIFRleHR1cmVNYXBwZXJHTCogdGV4bWFwR0wgPSBuZXcgVGV4dHVyZU1hcHBlckdMOwot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYodGV4bWFwR0wpOwotICAgIH0KKyAgICBpZiAoY29udGV4
dCAmJiBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+cGFpbnRFbmdpbmUoKS0+dHlwZSgpID09
IFFQYWludEVuZ2luZTo6T3BlbkdMMikKKyAgICAgICAgcmV0dXJuIG5ldyBUZXh0dXJlTWFwcGVy
R0w7CiAjZW5kaWYKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJRdCk7Cisg
ICAgcmV0dXJuIG5ldyBUZXh0dXJlTWFwcGVyUXQ7CiB9CiAKLQogUGFzc1JlZlB0cjxCaXRtYXBU
ZXh0dXJlPiBUZXh0dXJlTWFwcGVyUXQ6OmNyZWF0ZVRleHR1cmUoKQogewogICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQml0bWFwVGV4dHVyZVF0KCkpOwogfQogCitCaXRtYXBUZXh0dXJlUXQ6OkJp
dG1hcFRleHR1cmVRdCgpCisgICAgOiBtX2lzUGFja2VkKGZhbHNlKQoreworCit9CisKICNpZmRl
ZiBRVF9PUEVOR0xfTElCCiBjbGFzcyBSR0JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlclF0IDogcHVi
bGljIFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyIHsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmggYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmUxN2I5NjgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisg
Q29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAidGV4bWFwL1RleHR1
cmVNYXBwZXIuaCIKKworI2lmbmRlZiBUZXh0dXJlTWFwcGVyUXRfaAorI2RlZmluZSBUZXh0dXJl
TWFwcGVyUXRfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJpdG1hcFRleHR1cmVR
dCA6IHB1YmxpYyBCaXRtYXBUZXh0dXJlIHsKKyAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBl
clF0OworcHVibGljOgorICAgIEJpdG1hcFRleHR1cmVRdCgpOworICAgIH5CaXRtYXBUZXh0dXJl
UXQoKSB7IGRlc3Ryb3koKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CisgICAgdmly
dHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKG1fcGl4bWFwLndpZHRo
KCksIG1fcGl4bWFwLmhlaWdodCgpKTsgfQorICAgIHZpcnR1YWwgdm9pZCByZXNldChjb25zdCBJ
bnRTaXplJiwgYm9vbCBvcGFxdWUpOworICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKKyAgICB2aXJ0dWFsIHZv
aWQgZW5kUGFpbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdl
Kik7CisgICAgdmlydHVhbCBib29sIHNhdmUoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuICFtX3BpeG1hcC5pc051bGwoKSB8fCAh
bV9pbWFnZS5pc051bGwoKTsgfQorICAgIEludFJlY3Qgc291cmNlUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIEludFJlY3QoMCwgMCwgY29udGVudFNpemUoKS53aWR0aCgpLCBjb250ZW50U2l6ZSgpLmhl
aWdodCgpKTsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWNrKCk7CisgICAgdmlydHVhbCB2b2lkIHVu
cGFjaygpOworICAgIHZpcnR1YWwgYm9vbCBpc1BhY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNQ
YWNrZWQ7IH0KKworcHJpdmF0ZToKKyAgICBRUGFpbnRlciBtX3BhaW50ZXI7CisgICAgUVBpeG1h
cCBtX3BpeG1hcDsKKyAgICBRSW1hZ2UgbV9pbWFnZTsKKyAgICBib29sIG1faXNQYWNrZWQ7Cit9
OworCitjbGFzcyBUZXh0dXJlTWFwcGVyUXQgOiBwdWJsaWMgVGV4dHVyZU1hcHBlciB7CitwdWJs
aWM6CisgICAgVGV4dHVyZU1hcHBlclF0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1
cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVj
dCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29u
c3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpOworICAgIHZpcnR1YWwgdm9pZCBiaW5kU3Vy
ZmFjZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xpcChj
b25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNldEdyYXBoaWNzQ29udGV4dChHcmFw
aGljc0NvbnRleHQqKTsKKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9vdCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1
cmU+IGNyZWF0ZVRleHR1cmUoKTsKKworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoUVBhaW50
ZXIqIHBhaW50ZXIpCisgICAgeworICAgICAgICBwYWludGVyLT5zZXRSZW5kZXJIaW50cyhRUGFp
bnRlcjo6QW50aWFsaWFzaW5nIHwgUVBhaW50ZXI6OlNtb290aFBpeG1hcFRyYW5zZm9ybSwgZmFs
c2UpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVNYXBwZXI+IGNyZWF0
ZSgpIHsgcmV0dXJuIG5ldyBUZXh0dXJlTWFwcGVyUXQ7IH0KKworcHJpdmF0ZToKKyAgICBRUGFp
bnRlciogbV9wYWludGVyOworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlUXQ+IG1fY3VycmVudFN1
cmZhY2U7Cit9OworCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAppbmRl
eCA1NGU2YzdhLi40Njk4MjM5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCkBAIC0y
MCwxMDcyICsyMCwzNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyLmgiCiAKLSNpbmNsdWRlICJDdXJyZW50VGltZS5oIgotI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
Ikhhc2hNYXAuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIK
LSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXIuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJh
dGlvbnMuaCIKLSNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNs
dWRlICJVbml0QmV6aWVyLmgiCi0KLSNkZWZpbmUgREVCVUdfVEVYTUFQX0ZQUyAwCisjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlck5vZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1Y3Qg
VGV4bWFwUGFpbnRPcHRpb25zIHsKLSAgICBCaXRtYXBUZXh0dXJlKiBzdXJmYWNlOwotICAgIFRl
eHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXI7Ci0gICAgVGV4dHVyZU1hcHBlck5vZGUqIHJvb3RM
YXllcjsKLSAgICBmbG9hdCBvcGFjaXR5OwotICAgIEludFJlY3Qgc2Npc3NvclJlY3Q7Ci0gICAg
SW50UmVjdCB2aXNpYmxlUmVjdDsKLSAgICBib29sIGlzU3VyZmFjZTsKLX07Ci1jbGFzcyBUZXh0
dXJlTWFwcGVyQ2FjaGUgewotcHVibGljOgotICAgIHZvaWQgbWFyayhCaXRtYXBUZXh0dXJlKiB0
ZXh0dXJlKTsKLQotICAgIGNsYXNzIEVudHJ5IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFJlZlB0
cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlOwotICAgICAgICBFbnRyeSgpIDogcHJldmlvdXNDb3N0
KDApIHsgfQotICAgICAgICBpbmxpbmUgaW50IGNhbGN1bGF0ZUNvc3QoKSBjb25zdAotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAoIXRleHR1cmUgfHwgIXRleHR1cmUtPmlzVmFsaWQoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGNvbnN0IEludFNpemUgdGV4dHVy
ZVNpemUgPSB0ZXh0dXJlLT5zaXplKCk7Ci0gICAgICAgICAgICAvLyBhbiBpbWFnZSdzIGNvc3Qg
aW4gYnl0ZXMgaXMgd2lkdGggKiBoZWlnaHQgKiBieXRlcyBwZXIgcGl4ZWwgKDQpLgotICAgICAg
ICAgICAgcmV0dXJuIHRleHR1cmVTaXplLndpZHRoKCkgKiB0ZXh0dXJlU2l6ZS5oZWlnaHQoKSAq
IDQ7Ci0gICAgICAgIH0KLSAgICAgICAgRW50cnkoQml0bWFwVGV4dHVyZSogbmV3VGV4dHVyZSkK
LSAgICAgICAgICAgIDogdGV4dHVyZShuZXdUZXh0dXJlKQotICAgICAgICB7Ci0gICAgICAgIH0K
LSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEVudHJ5JiBvdGhlcikgY29uc3QgeyByZXR1
cm4gdGV4dHVyZSA9PSBvdGhlci50ZXh0dXJlOyB9Ci0gICAgICAgIGludCBwcmV2aW91c0Nvc3Q7
Ci0gICAgfTsKLQotICAgIFRleHR1cmVNYXBwZXJDYWNoZSgpIDogbV90b3RhbENvc3QoMCkge30K
LQotICAgIHZvaWQgcHVyZ2UoKTsKLSAgICBWZWN0b3I8RW50cnk+IG1fZGF0YTsKLSAgICBpbnQg
bV90b3RhbENvc3Q7Ci0jaWZuZGVmIFRFWE1BUF9URVhUVVJFX0NBQ0hFX0tCUwotI2RlZmluZSBU
RVhNQVBfVEVYVFVSRV9DQUNIRV9LQlMgMjQgKiAxMDI0Ci0jZW5kaWYKLSAgICBzdGF0aWMgY29u
c3QgaW50IE1heENvc3QgPSBURVhNQVBfVEVYVFVSRV9DQUNIRV9LQlMgKiAxMDI0OwotICAgIHN0
YXRpYyBjb25zdCBpbnQgUHVyZ2VBbW91bnQgPSBNYXhDb3N0IC8gNDsKLX07Ci0KLQotdm9pZCBU
ZXh0dXJlTWFwcGVyQ2FjaGU6OnB1cmdlKCkKLXsKLSAgICAvLyBJZiB0aGlzIGlzIGluIHRoZSBH
TCBpbXBsZW1lbnRhdGlvbiwgd2UgbmVlZCBhbiBhY3RpdmUgR0wgY29udGV4dCwgYmVjYXVzZSB3
ZSBtaWdodCBjYWxsIGdsRGVsZXRlVGV4dHVyZXMuCi0gICAgY29uc3QgaW50IHNpemUgPSBtX2Rh
dGEuc2l6ZSgpOwotCi0gICAgaWYgKG1fdG90YWxDb3N0IDw9IFRleHR1cmVNYXBwZXJDYWNoZTo6
TWF4Q29zdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRW5zdXJlIHRoYXQgd2UgaGF2ZSB0
aGUgcmlnaHQgY291bnQuIEl0IG1pZ2h0IGJlIGluYWNjdXJhdGUgaWYgY29udGVudCBjaGFuZ2Vk
IHNpemUuCi0gICAgLy8gV2Ugb25seSBkbyB0aGlzIHdoZW4gd2UncmUgYWN0dWFsbHkgcmVhZHkg
dG8gcHVyZ2UuCi0gICAgbV90b3RhbENvc3QgPSAwOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQotICAgICAgICBtX3RvdGFsQ29zdCArPSBtX2RhdGFbaV0uY2FsY3VsYXRlQ29z
dCgpOwotCi0gICAgZm9yIChpbnQgaSA9IHNpemUtMTsgaSA+PSAwICYmIG1fdG90YWxDb3N0ID4g
VGV4dHVyZU1hcHBlckNhY2hlOjpNYXhDb3N0IC0gVGV4dHVyZU1hcHBlckNhY2hlOjpQdXJnZUFt
b3VudDsgLS1pKSB7Ci0gICAgICAgIEVudHJ5JiBlbnRyeSA9IG1fZGF0YVtpXTsKLSAgICAgICAg
aWYgKGVudHJ5LnRleHR1cmUtPmlzTG9ja2VkKCkgfHwgIWVudHJ5LnRleHR1cmUtPmlzVmFsaWQo
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBtX3RvdGFsQ29zdCAtPSBlbnRyeS5w
cmV2aW91c0Nvc3Q7Ci0gICAgICAgIGVudHJ5LnRleHR1cmUtPmRlc3Ryb3koKTsKLSAgICAgICAg
bV9kYXRhLnJlbW92ZShpKTsKLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlckNhY2hlOjpt
YXJrKEJpdG1hcFRleHR1cmUqIHRleHR1cmUpCi17Ci0gICAgaWYgKCF0ZXh0dXJlIHx8ICF0ZXh0
dXJlLT5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEVudHJ5IGVudHJ5KHRleHR1
cmUpOwotICAgIHNpemVfdCBpbmRleCA9IG1fZGF0YS5maW5kKGVudHJ5KTsKLSAgICBpZiAoIWlu
ZGV4KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaW5kZXggPCBtX2RhdGEuc2l6ZSgpKSAK
LSAgICAgICAgbV9kYXRhLnJlbW92ZShpbmRleCk7Ci0gICAgY29uc3QgaW50IGNvc3QgPSBlbnRy
eS5jYWxjdWxhdGVDb3N0KCk7Ci0gICAgbV90b3RhbENvc3QgLT0gZW50cnkucHJldmlvdXNDb3N0
OwotICAgIG1fdG90YWxDb3N0ICs9IChlbnRyeS5wcmV2aW91c0Nvc3QgPSBjb3N0KTsKLSAgICBt
X2RhdGEucHJlcGVuZChlbnRyeSk7Ci19Ci0KLVRleHR1cmVNYXBwZXJDYWNoZSBnVGV4dHVyZU1h
cHBlckNhY2hlOwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyQ2FjaGVMb2NrIHsKLXB1YmxpYzoKLSAg
ICBUZXh0dXJlTWFwcGVyQ2FjaGVMb2NrKEJpdG1hcFRleHR1cmUqIHRleHR1cmUpIDogbV90ZXh0
dXJlKHRleHR1cmUpCi0gICAgewotICAgICAgICBpZiAobV90ZXh0dXJlKQotICAgICAgICAgICAg
bV90ZXh0dXJlLT5sb2NrKCk7Ci0gICAgfQotICAgIH5UZXh0dXJlTWFwcGVyQ2FjaGVMb2NrKCkK
LSAgICB7Ci0gICAgICAgIGlmIChtX3RleHR1cmUpCi0gICAgICAgICAgICBtX3RleHR1cmUtPnVu
bG9jaygpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbV90
ZXh0dXJlOwotfTsKLQotY2xhc3MgVGV4dHVyZU1hcHBlck5vZGUgOiBwdWJsaWMgVGV4dHVyZU1h
cHBlckNvbnRlbnRMYXllciB7Ci0KLXB1YmxpYzoKLSAgICAvLyBUaGlzIHNldCBvZiBmbGFncyBo
ZWxwIHVzIGRlZmVyIHdoaWNoIHByb3BlcnRpZXMgb2YgdGhlIGxheWVyIGhhdmUgYmVlbgotICAg
IC8vIG1vZGlmaWVkIGJ5IHRoZSBjb21wb3NpdG9yLCBzbyB3ZSBjYW4ga25vdyB3aGF0IHRvIGxv
b2sgZm9yIGluIHRoZSBuZXh0IGZsdXNoLgotICAgIGVudW0gQ2hhbmdlTWFzayB7Ci0gICAgICAg
IE5vQ2hhbmdlcyA9ICAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgIFBhcmVudENoYW5nZSA9
ICAgICAgICAgICAgICAoMUwgPDwgMCksCi0gICAgICAgIENoaWxkcmVuQ2hhbmdlID0gICAgICAg
ICAgICAoMUwgPDwgMSksCi0gICAgICAgIE1hc2tMYXllckNoYW5nZSA9ICAgICAgICAgICAoMUwg
PDwgMiksCi0gICAgICAgIFBvc2l0aW9uQ2hhbmdlID0gICAgICAgICAgICAoMUwgPDwgMyksCi0K
LSAgICAgICAgQW5jaG9yUG9pbnRDaGFuZ2UgPSAgICAgICAgICgxTCA8PCA0KSwKLSAgICAgICAg
U2l6ZUNoYW5nZSAgPSAgICAgICAgICAgICAgICgxTCA8PCA1KSwKLSAgICAgICAgVHJhbnNmb3Jt
Q2hhbmdlID0gICAgICAgICAgICgxTCA8PCA2KSwKLSAgICAgICAgQ29udGVudENoYW5nZSA9ICAg
ICAgICAgICAgICgxTCA8PCA3KSwKLQotICAgICAgICBDb250ZW50c09yaWVudGF0aW9uQ2hhbmdl
ID0gKDFMIDw8IDkpLAotICAgICAgICBPcGFjaXR5Q2hhbmdlID0gICAgICAgICAgICAgKDFMIDw8
IDEwKSwKLSAgICAgICAgQ29udGVudHNSZWN0Q2hhbmdlID0gICAgICAgICgxTCA8PCAxMSksCi0K
LSAgICAgICAgUHJlc2VydmVzM0RDaGFuZ2UgPSAgICAgICAgICgxTCA8PCAxMiksCi0gICAgICAg
IE1hc2tzVG9Cb3VuZHNDaGFuZ2UgPSAgICAgICAoMUwgPDwgMTMpLAotICAgICAgICBEcmF3c0Nv
bnRlbnRDaGFuZ2UgPSAgICAgICAgKDFMIDw8IDE0KSwKLSAgICAgICAgQ29udGVudHNPcGFxdWVD
aGFuZ2UgPSAgICAgICgxTCA8PCAxNSksCi0KLSAgICAgICAgQmFja2ZhY2VWaXNpYmlsaXR5Q2hh
bmdlID0gICgxTCA8PCAxNiksCi0gICAgICAgIENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlID0gICAo
MUwgPDwgMTcpLAotICAgICAgICBEaXNwbGF5Q2hhbmdlID0gICAgICAgICAgICAgKDFMIDw8IDE4
KSwKLSAgICAgICAgQmFja2dyb3VuZENvbG9yQ2hhbmdlID0gICAgICgxTCA8PCAxOSksCi0KLSAg
ICAgICAgUmVwbGljYUxheWVyQ2hhbmdlID0gICAgICAgICgxTCA8PCAyMCkKLSAgICB9OwotCi0g
ICAgLy8gVGhlIGNvbXBvc2l0b3IgbGV0cyB1cyBzcGVjaWFsLWNhc2UgaW1hZ2VzIGFuZCBjb2xv
cnMsIHNvIHdlIHRyeSB0byBkbyBzby4KLSAgICBlbnVtIFN0YXRpY0NvbnRlbnRUeXBlIHsgSFRN
TENvbnRlbnRUeXBlLCBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlLCBDb2xvckNvbnRlbnRUeXBlLCBN
ZWRpYUNvbnRlbnRUeXBlLCBDYW52YXMzRENvbnRlbnRUeXBlfTsKLQotICAgIFRleHR1cmVNYXBw
ZXJOb2RlKiByb290TGF5ZXIoKTsKLQotICAgIFRleHR1cmVNYXBwZXJOb2RlKEdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyKiBuZXdMYXllcik7Ci0gICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlck5v
ZGUoKTsKLQotICAgIHZvaWQgY2xlYXJEaXJlY3RJbWFnZSgpOwotICAgIHZvaWQgY29tcHV0ZVRy
YW5zZm9ybWF0aW9ucygpOwotICAgIEludFNpemUgbmVhcmVzdFN1cmZhY2VTaXplKCkgY29uc3Q7
Ci0gICAgdm9pZCBjb21wdXRlUmVwbGljYVRyYW5zZm9ybSgpOwotICAgIHZvaWQgY29tcHV0ZUxh
eWVyVHlwZSgpOwotICAgIHZvaWQgY29tcHV0ZUxvY2FsVHJhbnNmb3JtKCk7Ci0gICAgdm9pZCBm
bGF0dGVuVG8yRFNwYWNlSWZOZWNlc3NhcnkoKTsKLSAgICB2b2lkIGluaXRpYWxpemVUZXh0dXJl
TWFwcGVyKFRleHR1cmVNYXBwZXIqKTsKLSAgICB2b2lkIGludmFsaWRhdGVUcmFuc2Zvcm0oKTsK
LSAgICB2b2lkIG5vdGlmeUNoYW5nZShDaGFuZ2VNYXNrKTsKLSAgICB2b2lkIHN5bmNDb21wb3Np
dGluZ1N0YXRlKGJvb2wgcmVjdXJzZSk7Ci0gICAgdm9pZCBwZXJmb3JtUG9zdFN5bmNPcGVyYXRp
b25zKCk7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICB2b2lkIHNldE5lZWRzRGlz
cGxheUluUmVjdChJbnRSZWN0KTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFRleHR1cmVNYXBw
ZXIoKTsKLQotICAgIHZvaWQgcGFpbnRSZWN1cnNpdmUoVGV4bWFwUGFpbnRPcHRpb25zIG9wdGlv
bnMpOwotICAgIHZvaWQgcGFpbnRTZWxmKGNvbnN0IFRleG1hcFBhaW50T3B0aW9ucyYgb3B0aW9u
cyk7Ci0gICAgdm9pZCB1cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQoVGV4dHVyZU1hcHBlciogdGV4
dHVyZU1hcHBlciwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpOwotCi0gICAgaW50IGNvdW50
RGVzY2VuZGFudHNXaXRoQ29udGVudCgpIGNvbnN0OwotICAgIGJvb2wgaGFzU3VyZmFjZURlc2Nl
bmRhbnRzKCkgY29uc3Q7Ci0KLSAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBzZXRQbGF0Zm9ybUxheWVyQ2xpZW50KFRleHR1cmVN
YXBwZXJMYXllckNsaWVudCopOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChUZXh0dXJlTWFwcGVy
KiwgY29uc3QgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6UGFpbnRPcHRpb25zJik7Ci0KLSAg
ICBzdGF0aWMgVGV4dHVyZU1hcHBlck5vZGUqIHRvVGV4dHVyZU1hcHBlck5vZGUoR3JhcGhpY3NM
YXllciopOwotcHVibGljOgotICAgIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBtX2xheWVy
OwotICAgIGNvbnN0IGNoYXIqIG1fbGFzdFRleHR1cmVNYXBwZXJUeXBlOwotICAgIFJlZlB0cjxU
ZXh0dXJlTWFwcGVyPiBtX2xhc3RUZXh0dXJlTWFwcGVyOwotICAgIHN0cnVjdCBUcmFuc2Zvcm1E
YXRhIHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYmFzZSwgdGFyZ2V0LCByZXBsaWNh
LCBmb3JEZXNjZW5kYW50cywgcGVyc3BlY3RpdmUsIGxvY2FsOwotICAgICAgICBJbnRSZWN0IHRh
cmdldEJvdW5kaW5nUmVjdDsKLSAgICAgICAgZmxvYXQgY2VudGVyWjsKLSAgICAgICAgYm9vbCBk
aXJ0eSwgbG9jYWxEaXJ0eSwgcGVyc3BlY3RpdmVEaXJ0eTsKLSAgICAgICAgSW50UmVjdCBib3Vu
ZGluZ1JlY3RGcm9tUm9vdDsKLSAgICAgICAgVHJhbnNmb3JtRGF0YSgpIDogZGlydHkodHJ1ZSks
IGxvY2FsRGlydHkodHJ1ZSksIHBlcnNwZWN0aXZlRGlydHkodHJ1ZSkgeyB9Ci0gICAgfTsKLQot
ICAgIFRyYW5zZm9ybURhdGEgbV90cmFuc2Zvcm1zOwotCi0gICAgZW51bSBMYXllclR5cGUgewot
ICAgICAgICBEZWZhdWx0TGF5ZXIsCi0gICAgICAgIFJvb3RMYXllciwKLSAgICAgICAgU2Npc3Nv
ckxheWVyLAotICAgICAgICBDbGlwTGF5ZXIsCi0gICAgICAgIFRyYW5zcGFyZW5jeUxheWVyCi0g
ICAgfTsKLQotICAgIExheWVyVHlwZSBtX2xheWVyVHlwZTsKLQotICAgIHN0cnVjdCBDb250ZW50
RGF0YSB7Ci0gICAgICAgIEludFJlY3QgbmVlZHNEaXNwbGF5UmVjdDsKLSAgICAgICAgYm9vbCBu
ZWVkc0Rpc3BsYXk7Ci0gICAgICAgIENvbG9yIGJhY2tncm91bmRDb2xvcjsKLQotICAgICAgICBT
dGF0aWNDb250ZW50VHlwZSBjb250ZW50VHlwZTsKLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFn
ZTsKLSAgICAgICAgVGV4dHVyZU1hcHBlclZpZGVvTGF5ZXIqIG1lZGlhOwotCi0gICAgICAgIENv
bnRlbnREYXRhKCkKLSAgICAgICAgICAgIDogbmVlZHNEaXNwbGF5KGZhbHNlKQotICAgICAgICAg
ICAgLCBjb250ZW50VHlwZShIVE1MQ29udGVudFR5cGUpCi0gICAgICAgICAgICAsIGltYWdlKDAp
Ci0gICAgICAgICAgICAsIG1lZGlhKDApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgfTsK
LQotICAgIGlubGluZSBJbnRSZWN0IHRhcmdldFJlY3QoKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlID8g
ZW50aXJlUmVjdCgpIDogbV9zdGF0ZS5jb250ZW50c1JlY3Q7Ci0gICAgfQotCi0gICAgaW5saW5l
IEludFJlY3QgZW50aXJlUmVjdCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gSW50UmVj
dCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICBp
bmxpbmUgSW50UmVjdCByZXBsaWNhUmVjdCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9sYXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIgPyBJbnRSZWN0KDAsIDAsIG1fbmVhcmVz
dFN1cmZhY2VTaXplLndpZHRoKCksIG1fbmVhcmVzdFN1cmZhY2VTaXplLmhlaWdodCgpKSA6IGVu
dGlyZVJlY3QoKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbV90ZXh0dXJl
OwotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBtX3N1cmZhY2UsIG1fcmVwbGljYVN1cmZhY2U7
Ci0KLSAgICBDb250ZW50RGF0YSBtX3BlbmRpbmdDb250ZW50OwotICAgIENvbnRlbnREYXRhIG1f
Y3VycmVudENvbnRlbnQ7Ci0KLSAgICBWZWN0b3I8VGV4dHVyZU1hcHBlck5vZGUqPiBtX2NoaWxk
cmVuOwotICAgIFRleHR1cmVNYXBwZXJOb2RlKiBtX3BhcmVudDsKLSAgICBUZXh0dXJlTWFwcGVy
Tm9kZSogbV9lZmZlY3RUYXJnZXQ7Ci0gICAgaW50IG1fY2hhbmdlTWFzazsKLSAgICBJbnRTaXpl
IG1fc2l6ZSwgbV9uZWFyZXN0U3VyZmFjZVNpemU7Ci0gICAgU3RyaW5nIG1fbmFtZTsKLSAgICBU
ZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQqIG1fcGxhdGZvcm1DbGllbnQ7Ci0KLSAgICBzdHJ1Y3Qg
U3RhdGUgewotICAgICAgICBGbG9hdFBvaW50IHBvczsKLSAgICAgICAgRmxvYXRQb2ludDNEIGFu
Y2hvclBvaW50OwotICAgICAgICBGbG9hdFNpemUgc2l6ZTsKLSAgICAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggdHJhbnNmb3JtOwotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZHJl
blRyYW5zZm9ybTsKLSAgICAgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOwotICAgICAgICBDb2xv
ciBjdXJyZW50Q29sb3I7Ci0gICAgICAgIEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0ZXNPcmllbnRhdGlvbiBnZW9PcmllbnRhdGlvbjsKLSAgICAgICAgR3JhcGhpY3NMYXllcjo6
Q29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIGNvbnRlbnRzT3JpZW50YXRpb247Ci0g
ICAgICAgIGZsb2F0IG9wYWNpdHk7Ci0gICAgICAgIEludFJlY3QgY29udGVudHNSZWN0OwotICAg
ICAgICBpbnQgZGVzY2VuZGFudHNXaXRoQ29udGVudDsKLSAgICAgICAgVGV4dHVyZU1hcHBlck5v
ZGUqIG1hc2tMYXllcjsKLSAgICAgICAgVGV4dHVyZU1hcHBlck5vZGUqIHJlcGxpY2FMYXllcjsK
LSAgICAgICAgYm9vbCBwcmVzZXJ2ZXMzRDsKLSAgICAgICAgYm9vbCBtYXNrc1RvQm91bmRzOwot
ICAgICAgICBib29sIGRyYXdzQ29udGVudDsKLSAgICAgICAgYm9vbCBjb250ZW50c09wYXF1ZTsK
LSAgICAgICAgYm9vbCBiYWNrZmFjZVZpc2liaWxpdHk7Ci0gICAgICAgIGJvb2wgdmlzaWJsZTsK
LSAgICAgICAgYm9vbCBkaXJ0eTsKLSAgICAgICAgYm9vbCB0aWxlZDsKLSAgICAgICAgYm9vbCBo
YXNTdXJmYWNlRGVzY2VuZGFudHM7Ci0KLSAgICAgICAgU3RhdGUoKQotICAgICAgICAgICAgOiBv
cGFjaXR5KDEuZikKLSAgICAgICAgICAgICwgZGVzY2VuZGFudHNXaXRoQ29udGVudCgwKQotICAg
ICAgICAgICAgLCBtYXNrTGF5ZXIoMCkKLSAgICAgICAgICAgICwgcmVwbGljYUxheWVyKDApCi0g
ICAgICAgICAgICAsIHByZXNlcnZlczNEKGZhbHNlKQotICAgICAgICAgICAgLCBtYXNrc1RvQm91
bmRzKGZhbHNlKQotICAgICAgICAgICAgLCBkcmF3c0NvbnRlbnQoZmFsc2UpCi0gICAgICAgICAg
ICAsIGNvbnRlbnRzT3BhcXVlKGZhbHNlKQotICAgICAgICAgICAgLCBiYWNrZmFjZVZpc2liaWxp
dHkoZmFsc2UpCi0gICAgICAgICAgICAsIHZpc2libGUodHJ1ZSkKLSAgICAgICAgICAgICwgZGly
dHkodHJ1ZSkKLSAgICAgICAgICAgICwgdGlsZWQoZmFsc2UpCi0gICAgICAgICAgICAsIGhhc1N1
cmZhY2VEZXNjZW5kYW50cyhmYWxzZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgfTsKLSAg
ICBTdGF0ZSBtX3N0YXRlOwotfTsKLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KEludFJlY3QgcmVjdCkKLXsKLSAgICBpZiAobV9wbGF0Zm9ybUNsaWVudCkg
ewotICAgICAgICBpZiAobV9zdGF0ZS5oYXNTdXJmYWNlRGVzY2VuZGFudHMpIHsKLSAgICAgICAg
ICAgIG1fcGxhdGZvcm1DbGllbnQtPnNldE5lZWRzRGlzcGxheSgpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIHJlY3QuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgbV9z
aXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICBpZiAocmVjdC5pc0VtcHR5
KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fcGxhdGZvcm1DbGllbnQtPnNldE5l
ZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
ICghbV9wYXJlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGFyZW50LT5zZXROZWVkc0Rp
c3BsYXlJblJlY3QocmVjdCk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldE5lZWRz
RGlzcGxheSgpCi17Ci0gICAgaWYgKG1fZWZmZWN0VGFyZ2V0KQotICAgICAgICBtX2VmZmVjdFRh
cmdldC0+c2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgaWYgKG1fdHJhbnNmb3Jtcy50YXJnZXRCb3Vu
ZGluZ1JlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fc3RhdGUuZHJh
d3NDb250ZW50IHx8IG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgIT0gSFRNTENvbnRlbnRU
eXBlKQotICAgICAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3QobV90cmFuc2Zvcm1zLnRhcmdldEJv
dW5kaW5nUmVjdCk7Ci19Ci0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0UGxhdGZvcm1M
YXllckNsaWVudChUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQqIGNsaWVudCkKLXsKLSAgICBtX3Bs
YXRmb3JtQ2xpZW50ID0gY2xpZW50OwotfQotCi1zdGF0aWMgaW50IGNvbXBhcmVHcmFwaGljc0xh
eWVyc1pWYWx1ZShjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQotewotICAgIHR5cGVkZWYg
Y29uc3QgVGV4dHVyZU1hcHBlck5vZGUqIE5vZGVQdHI7Ci0gICAgY29uc3QgTm9kZVB0ciogbm9k
ZUEgPSBzdGF0aWNfY2FzdDxjb25zdCBOb2RlUHRyKj4oYSk7Ci0gICAgY29uc3QgTm9kZVB0ciog
bm9kZUIgPSBzdGF0aWNfY2FzdDxjb25zdCBOb2RlUHRyKj4oYik7Ci0gICAgcmV0dXJuIGludCgo
KCpub2RlQSktPm1fdHJhbnNmb3Jtcy5jZW50ZXJaIC0gKCpub2RlQiktPm1fdHJhbnNmb3Jtcy5j
ZW50ZXJaKSAqIDEwMDApOwotfQotaW5saW5lIHN0YXRpYyB2b2lkIHNvcnRCeVpPcmRlcihWZWN0
b3I8VGV4dHVyZU1hcHBlck5vZGUqID4mIGFycmF5LCBpbnQgZmlyc3QsIGludCBsYXN0KQotewot
ICAgIHFzb3J0KGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBzaXplb2YoVGV4dHVyZU1hcHBl
ck5vZGUqKSwgY29tcGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKTsKLX0KLQotYm9vbCBUZXh0dXJl
TWFwcGVyTm9kZTo6aGFzU3VyZmFjZURlc2NlbmRhbnRzKCkgY29uc3QKLXsKLSAgICBpZiAobV9s
YXllclR5cGUgPT0gQ2xpcExheWVyIHx8IG1fbGF5ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVy
IHx8IG1fc3RhdGUucmVwbGljYUxheWVyKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjb25z
dCBpbnQgc2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSogY2hpbGQgPSBtX2No
aWxkcmVuW2ldKSB7Ci0gICAgICAgICAgICBpZiAoY2hpbGQtPmhhc1N1cmZhY2VEZXNjZW5kYW50
cygpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLQotfQotCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludChUZXh0
dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBUZXh0dXJlTWFwcGVyQ29udGVudExheWVy
OjpQYWludE9wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgQVNTRVJUKG1fbGF5ZXJUeXBlID09IFJv
b3RMYXllcik7Ci0gICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQot
I2lmIDAKLSAgICBXVEY6OlN0b3BXYXRjaCBzdG9wV2F0Y2g7Ci0gICAgKCJbVGV4dHVyZU1hcHBl
cl0gUm9vdFBhaW50ISFcbiIpOwotI2VuZGlmCi0KLSAgICBpZiAodGV4dHVyZU1hcHBlci0+dHlw
ZSgpICE9IG1fbGFzdFRleHR1cmVNYXBwZXJUeXBlKQotICAgICAgICBnVGV4dHVyZU1hcHBlckNh
Y2hlLm1fZGF0YS5jbGVhcigpOwotCi0gICAgbV9sYXN0VGV4dHVyZU1hcHBlciA9IHRleHR1cmVN
YXBwZXI7Ci0gICAgVGV4bWFwUGFpbnRPcHRpb25zIG9wdDsKLSAgICBvcHQub3BhY2l0eSA9IDE7
Ci0gICAgb3B0LnJvb3RMYXllciA9IHRoaXM7Ci0gICAgb3B0LnNjaXNzb3JSZWN0ID0gb3B0aW9u
cy50YXJnZXRSZWN0OwotICAgIG9wdC52aXNpYmxlUmVjdCA9IG9wdGlvbnMudmlzaWJsZVJlY3Q7
Ci0gICAgb3B0LnRleHR1cmVNYXBwZXIgPSB0ZXh0dXJlTWFwcGVyOwotICAgIG9wdC5zdXJmYWNl
ID0gMDsKLSAgICBwYWludFJlY3Vyc2l2ZShvcHQpOwotCi0gICAgaWYgKHRleHR1cmVNYXBwZXIt
PmFsbG93U3VyZmFjZUZvclJvb3QoKSB8fCBtX3N0YXRlLmhhc1N1cmZhY2VEZXNjZW5kYW50cykg
ewotICAgICAgICB0ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsKLSAgICAgICAgdGV4dHVy
ZU1hcHBlci0+cGFpbnRUb1RhcmdldCgqbV9zdXJmYWNlLmdldCgpLCBvcHRpb25zLnZpZXdwb3J0
U2l6ZSwgb3B0aW9ucy50cmFuc2Zvcm0sIG9wdGlvbnMub3BhY2l0eSAqIG1fc3RhdGUub3BhY2l0
eSwgb3B0aW9ucy50YXJnZXRSZWN0KTsKLSAgICB9Ci0gICAgZ1RleHR1cmVNYXBwZXJDYWNoZS5w
dXJnZSgpOwotfQotCi1pbnQgVGV4dHVyZU1hcHBlck5vZGU6OmNvdW50RGVzY2VuZGFudHNXaXRo
Q29udGVudCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3N0YXRlLnZpc2libGUgfHwgbV9zdGF0ZS5v
cGFjaXR5IDwgMC4wMDEpCi0gICAgICAgIHJldHVybiAwOwotICAgIGludCBkZXNjZW5kYW50c1dp
dGhDb250ZW50ID0gKG1fc3RhdGUuZHJhd3NDb250ZW50IHx8IG1fY3VycmVudENvbnRlbnQuY29u
dGVudFR5cGUgIT0gSFRNTENvbnRlbnRUeXBlKSA/IDEgOiAwOwotCi0gICAgY29uc3QgaW50IHNp
emUgPSBtX2NoaWxkcmVuLnNpemUoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsr
aSkgewotICAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIGNoaWxkID0gbV9jaGlsZHJlbltp
XSkKLSAgICAgICAgICAgIGRlc2NlbmRhbnRzV2l0aENvbnRlbnQgKz0gY2hpbGQtPmNvdW50RGVz
Y2VuZGFudHNXaXRoQ29udGVudCgpOwotICAgIH0KLQotICAgIHJldHVybiBkZXNjZW5kYW50c1dp
dGhDb250ZW50OwotfQotCi1pbmxpbmUgVGV4dHVyZU1hcHBlck5vZGUqIFRleHR1cmVNYXBwZXJO
b2RlOjp0b1RleHR1cmVNYXBwZXJOb2RlKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQotewotICAgIHJl
dHVybiBsYXllciA/IHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKj4obGF5
ZXIpLT5tX25vZGUuZ2V0KCkgOiAwOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21w
dXRlTGF5ZXJUeXBlKCkKLXsKLSAgICAvLyBjYWxjdWxhdGUgbGF5ZXIgdHlwZS4gQSBsYXllciBj
YW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0gICAgLy8gIFJvb3RMYXllcjogdGhlIHRvcCBs
ZXZlbC4gRHJhd3MgdG8gYSBmcmFtZWJ1ZmZlciwgYW5kIHRoZSB0YXJnZXQgdGV4dHVyZSBkcmF3
cyBpbnRvIHRoZSB2aWV3cG9ydC4KLSAgICAvLyAgICAgICAgICAgIG9ubHkgb25lIGxheWVyIGlz
IHRoZSByb290IGxheWVyLgotICAgIC8vICBTY2lzc29yTGF5ZXI6IGRyYXdzIHRvIHRoZSBjdXJy
ZW50IGZyYW1lYnVmZmVyLCBhbmQgYXBwbGllcyBhbiBleHRyYSBzY2lzc29yIGJlZm9yZSBkcmF3
aW5nIGl0cyBjaGlsZHJlbi4KLSAgICAvLyAgICAgICAgICAgICAgICBBIHNjaXNzb3IgbGF5ZXIg
aXMgYSBsYXllciB3aXRoIGNoaWxkcmVuIHRoYXQgbWFza3MgdG8gYm91bmRzLCBpcyBub3QgYSB0
cmFuc3BhcmVuY3kgbGF5ZXIsIGFuZCBoYXMgYSByZWN0YW5ndWxhciBjbGlwLgotICAgIC8vICBD
bGlwTGF5ZXI6IGNyZWF0ZXMgYSBuZXcgZnJhbWVidWZmZXIsIHRoZSBzaXplIG9mIHRoZSBsYXll
ciwgYW5kIHRoZW4gcGFpbnRzIGl0IHRvIHRoZSBlbmNsb3NpbmcgQml0bWFwVGV4dHVyZSB3aXRo
IHRoZSBsYXllcidzIHRyYW5zZm9ybS9vcGFjaXR5LgotICAgIC8vICAgICAgICAgICAgICBBIGNs
aXAgbGF5ZXIgaXMgYSBsYXllciB0aGF0IG1hc2tzIHRvIGJvdW5kcywgZG9lc24ndCBwcmVzZXJ2
ZSAzRCwgaGFzIGNoaWxkcmVuLCBhbmQgaGFzIGEgdHJhbnNwYXJlbmN5L21hc2sgb3IgYSBub24t
cmVjdGFuZ3VsYXIgdHJhbnNmb3JtLgotICAgIC8vICBUcmFuc3BhcmVuY3lMYXllcjogY3JlYXRl
cyBhIG5ldyBmcmFtZWJ1ZmZlciBpZGV0aWNhbCBpbiBzaXplIHRvIHRoZSBjdXJyZW50IGZyYW1l
YnVmZmVyLiBUaGVuIGRyYXdzIHRoZSBmYidzIHRleHR1cmUgdG8gdGhlIGN1cnJlbnQgZnJhbWVi
dWZmZXIgd2l0aCBpZGVudGl0eSB0cmFuc2Zvcm0uCi0gICAgLy8gICAgICAgICAgICAgICAgICAg
ICBVc2VkIGZvciBsYXllcnMgd2l0aCBjaGlsZHJlbiBhbmQgdHJhbnNwYXJlbmN5L21hc2sgdGhh
dCBwcmVzZXJ2ZSAzRCBvciBkb24ndCBtYXNrIHRvIGJvdW5kcy4KLSAgICAvLyAgRGVmYXVsdExh
eWVyOiBkcmF3cyBpdHNlbGYgYW5kIGl0cyBjaGlsZHJlbiBkaXJlY3RseSB0byB0aGUgY3VycmVu
dCBmcmFtZWJ1ZmZlci4KLSAgICAvLyAgICAgICAgICAgICAgICBhbnkgbGF5ZXIgdGhhdCBkb2Vz
bid0IGNvbmZvcm0gdG8gdGhlIG90aGVyIHJ1bGVzIGlzIGEgRGVmYXVsdExheWVyLgotCi0gICAg
Y29uc3QgYm9vbCBzZWxmSGFzQ29udGVudCA9IG1fc3RhdGUuZHJhd3NDb250ZW50IHx8IChtX2N1
cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlICE9IEhUTUxDb250ZW50VHlwZSk7Ci0gICAgY29uc3Qg
Ym9vbCBoYXNEZXNjZW5kYW50c1dpdGhDb250ZW50ID0gbV9zdGF0ZS5kZXNjZW5kYW50c1dpdGhD
b250ZW50IC0gKHNlbGZIYXNDb250ZW50ID8gMSA6IDApOwotICAgIGNvbnN0IGJvb2wgaGFzVHJh
bnNwYXJlbmN5ID0gbV9zdGF0ZS5vcGFjaXR5IDwgMC45OSB8fCBtX3N0YXRlLm1hc2tMYXllcjsK
LSAgICBjb25zdCBib29sIGhhc1JlcGxpY2EgPSBtX3N0YXRlLnJlcGxpY2FMYXllcjsKLSAgICBt
X2xheWVyVHlwZSA9IERlZmF1bHRMYXllcjsKLQotICAgIC8vIExheWVyIGhhcyBubyBwYXJlbnQs
IGl0IG11c3QgYmUgYSByb290IGxheWVyLgotICAgIGlmICghbV9wYXJlbnQgJiYgIW1fZWZmZWN0
VGFyZ2V0KSB7Ci0gICAgICAgIG1fbGF5ZXJUeXBlID0gUm9vdExheWVyOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgLy8gQSBsYXllciB3aXRoIG5vIGNvbnRlbnRzIGlzIGFsd2F5cyBh
IGRlZmF1bHQgbGF5ZXIuCi0gICAgaWYgKCFtX3N0YXRlLmRlc2NlbmRhbnRzV2l0aENvbnRlbnQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEEgbGF5ZXIgd2l0aCBjb250ZW50LWRlc2NlbmRh
bnRzIGFuZCBhIG1hc2sgaXMgYWx3YXlzIGEgY2xpcCBsYXllci4KLSAgICBpZiAoaGFzRGVzY2Vu
ZGFudHNXaXRoQ29udGVudCAmJiBtX3N0YXRlLm1hc2tMYXllcikgewotICAgICAgICBtX2xheWVy
VHlwZSA9IENsaXBMYXllcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEEgbWFz
a3MtdG8gYm91bmRzIGxheWVyIGNhbiBiZSBhIGNsaXAgb3IgYSBzY2lzc29yIGxheWVyLiBJdCdz
IGEgc2Npc3NvciBsYXllciBvbmx5IGlmIGl0IGhhcyBhIHRyaXZpYWwgY2xpcCAoaWRlbnRpdHkg
b3IgdHJhbnNsYXRpb24pLCBvciBpZiBpdCBoYXMgdHJhbnNwYXJlbmN5LgotICAgIC8vIFRoYXQn
cyBiZWNhdXNlIGEgQ2xpcExheWVyIHdvdWxkIGNyZWF0ZSBhbiBpbnRlcm1lZGlhdGUgZHJhd2lu
ZyBzdXJmYWNlIChGQikgLSB3ZSB3YW50IHRvIGxpbWl0IGl0IHRvIHdoZW4gaXQncyBhY3R1YWxs
eSBuZWNlc3NhcnksIGkuZS4gdHJhbnNwYXJlbmN5IG9yIG5vbi10cml2aWFsIGNsaXAuCi0gICAg
aWYgKG1fc3RhdGUubWFza3NUb0JvdW5kcyAmJiBoYXNEZXNjZW5kYW50c1dpdGhDb250ZW50KSB7
Ci0gICAgICAgIGlmIChoYXNUcmFuc3BhcmVuY3kgfHwgIW1fc3RhdGUudHJhbnNmb3JtLmlzSWRl
bnRpdHlPclRyYW5zbGF0aW9uKCkgfHwgbV9wYXJlbnQtPm1fc3RhdGUucHJlc2VydmVzM0QpCi0g
ICAgICAgICAgICBtX2xheWVyVHlwZSA9IENsaXBMYXllcjsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgbV9sYXllclR5cGUgPSBTY2lzc29yTGF5ZXI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICAvLyBXZSB1c2UgYSB0cmFuc3BhcmVuY3kgbGF5ZXIgd2hlbiB3ZSBoYXZlIHR3byBv
ZiB0aGUgZm9sbG93aW5nIDM6IHJlcGxpY2EsIHRyYW5zcGFyZW5jeSwgZGVzY2VuZGFudHMgd2l0
aCBjb250ZW50cy4KLSAgICBpZiAoKGhhc1JlcGxpY2EgJiYgaGFzRGVzY2VuZGFudHNXaXRoQ29u
dGVudCkgfHwgKGhhc1JlcGxpY2EgJiYgaGFzVHJhbnNwYXJlbmN5KSB8fCAoaGFzVHJhbnNwYXJl
bmN5ICYmIG1fc3RhdGUuZGVzY2VuZGFudHNXaXRoQ29udGVudCA+IDEpKQotICAgICAgICBtX2xh
eWVyVHlwZSA9IFRyYW5zcGFyZW5jeUxheWVyOwotfQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6
aW5pdGlhbGl6ZVRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKLXsK
LSAgICBpZiAodGV4dHVyZU1hcHBlci0+dHlwZSgpID09IG1fbGFzdFRleHR1cmVNYXBwZXJUeXBl
KQotICAgICAgICByZXR1cm47Ci0gICAgbV9zdXJmYWNlID0gdGV4dHVyZU1hcHBlci0+Y3JlYXRl
VGV4dHVyZSgpOwotICAgIG1fcmVwbGljYVN1cmZhY2UgPSB0ZXh0dXJlTWFwcGVyLT5jcmVhdGVU
ZXh0dXJlKCk7Ci0gICAgbV90ZXh0dXJlID0gdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgp
OwotICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUubWFyayhtX3RleHR1cmUuZ2V0KCkpOwotICAgIG1f
bGFzdFRleHR1cmVNYXBwZXJUeXBlID0gdGV4dHVyZU1hcHBlci0+dHlwZSgpOwotfQotCi1UZXh0
dXJlTWFwcGVyTm9kZTo6VGV4dHVyZU1hcHBlck5vZGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIqIG5ld0xheWVyKQotICAgIDogbV9sYXllcihuZXdMYXllcikKLSAgICAsIG1fbGFzdFRleHR1
cmVNYXBwZXJUeXBlKDApCi0gICAgLCBtX2xhc3RUZXh0dXJlTWFwcGVyKDApCi0gICAgLCBtX2xh
eWVyVHlwZShEZWZhdWx0TGF5ZXIpCi0gICAgLCBtX3N1cmZhY2UoMCkKLSAgICAsIG1fcGFyZW50
KDApCi0gICAgLCBtX2VmZmVjdFRhcmdldCgwKQotICAgICwgbV9jaGFuZ2VNYXNrKE5vQ2hhbmdl
cykKLSAgICAsIG1fcGxhdGZvcm1DbGllbnQoMCkKLXsKLQotfQotCi1UZXh0dXJlTWFwcGVyTm9k
ZSogVGV4dHVyZU1hcHBlck5vZGU6OnJvb3RMYXllcigpCi17Ci0gICAgaWYgKG1fZWZmZWN0VGFy
Z2V0KQotICAgICAgICByZXR1cm4gbV9lZmZlY3RUYXJnZXQtPnJvb3RMYXllcigpOwotICAgIGlm
IChtX3BhcmVudCkKLSAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5yb290TGF5ZXIoKTsKLSAgICBy
ZXR1cm4gdGhpczsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6aW52YWxpZGF0ZVRyYW5z
Zm9ybSgpCi17Ci0gICAgbV90cmFuc2Zvcm1zLmRpcnR5ID0gdHJ1ZTsKLSAgICBpZiAobV9sYXll
clR5cGUgIT0gQ2xpcExheWVyKQotICAgICAgICBtX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKLSAgICBp
ZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCi0gICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5p
bnZhbGlkYXRlVHJhbnNmb3JtKCk7Ci0gICAgY29uc3QgaW50IHNpemUgPSBtX2NoaWxkcmVuLnNp
emUoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAo
VGV4dHVyZU1hcHBlck5vZGUqIGxheWVyID0gbV9jaGlsZHJlbltpXSkKLSAgICAgICAgICAgIGxh
eWVyLT5pbnZhbGlkYXRlVHJhbnNmb3JtKCk7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjpjb21wdXRlTG9jYWxUcmFuc2Zvcm0oKQotewotICAgIGlmICghbV90cmFuc2Zvcm1z
LmxvY2FsRGlydHkpCi0gICAgICAgIHJldHVybjsKLSAgICBjb25zdCBmbG9hdCBvcmlnaW5YID0g
bV9zdGF0ZS5hbmNob3JQb2ludC54KCkgKiBtX3NpemUud2lkdGgoKTsKLSAgICBjb25zdCBmbG9h
dCBvcmlnaW5ZID0gbV9zdGF0ZS5hbmNob3JQb2ludC55KCkgKiBtX3NpemUuaGVpZ2h0KCk7Ci0g
ICAgbV90cmFuc2Zvcm1zLmxvY2FsID0KLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoKQot
ICAgICAgICAudHJhbnNsYXRlM2Qob3JpZ2luWCArIG1fc3RhdGUucG9zLngoKSwgb3JpZ2luWSAr
IG1fc3RhdGUucG9zLnkoKSwgbV9zdGF0ZS5hbmNob3JQb2ludC56KCkpCi0gICAgICAgIC5tdWx0
TGVmdChtX3N0YXRlLnRyYW5zZm9ybSkKLSAgICAgICAgLnRyYW5zbGF0ZTNkKC1vcmlnaW5YLCAt
b3JpZ2luWSwgLW1fc3RhdGUuYW5jaG9yUG9pbnQueigpKTsKLSAgICBtX3RyYW5zZm9ybXMubG9j
YWxEaXJ0eSA9IGZhbHNlOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpmbGF0dGVuVG8y
RFNwYWNlSWZOZWNlc3NhcnkoKQotewotICAgIGlmIChtX3N0YXRlLnByZXNlcnZlczNEKQotICAg
ICAgICByZXR1cm47Ci0gICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE0xMygwKTsK
LSAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTIzKDApOwotICAgIG1fdHJhbnNm
b3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNMzEoMCk7Ci0gICAgbV90cmFuc2Zvcm1zLmZvckRlc2Nl
bmRhbnRzLnNldE0zMigwKTsKLSAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTMz
KDEpOwotICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNMzQoMCk7Ci0gICAgbV90
cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE00MygwKTsKLX0KLQotSW50U2l6ZSBUZXh0dXJl
TWFwcGVyTm9kZTo6bmVhcmVzdFN1cmZhY2VTaXplKCkgY29uc3QKLXsKLSAgICBpZiAobV9sYXll
clR5cGUgPT0gQ2xpcExheWVyIHx8IG1fbGF5ZXJUeXBlID09IFJvb3RMYXllcikKLSAgICAgICAg
cmV0dXJuIG1fc3VyZmFjZSAmJiAhbV9zdXJmYWNlLT5zaXplKCkuaXNFbXB0eSgpID8gbV9zdXJm
YWNlLT5zaXplKCkgOiBtX3NpemU7Ci0gICAgcmV0dXJuIG1fcGFyZW50LT5uZWFyZXN0U3VyZmFj
ZVNpemUoKTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVJlcGxpY2FUcmFu
c2Zvcm0oKQotewotICAgIGlmICghbV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fbmVhcmVzdFN1cmZhY2VTaXplID0gbmVhcmVzdFN1cmZhY2VTaXplKCk7Ci0K
LSAgICBpZiAobV9sYXllclR5cGUgIT0gVHJhbnNwYXJlbmN5TGF5ZXIpIHsKLSAgICAgICAgbV90
cmFuc2Zvcm1zLnJlcGxpY2EgPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtX3RyYW5zZm9ybXMudGFy
Z2V0KS5tdWx0TGVmdChtX3N0YXRlLnJlcGxpY2FMYXllci0+bV90cmFuc2Zvcm1zLmxvY2FsKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnN0IGZsb2F0IG9yaWdpblggPSBtX3Ry
YW5zZm9ybXMudGFyZ2V0Lm00MSgpOwotICAgIGNvbnN0IGZsb2F0IG9yaWdpblkgPSBtX3RyYW5z
Zm9ybXMudGFyZ2V0Lm00MigpOwotICAgIG1fdHJhbnNmb3Jtcy5yZXBsaWNhID0KLSAgICAgICAg
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KCkKLSAgICAgICAgICAgICAgICAudHJhbnNsYXRlKG9y
aWdpblgsIG9yaWdpblkpCi0gICAgICAgICAgICAgICAgLm11bHRMZWZ0KG1fc3RhdGUucmVwbGlj
YUxheWVyLT5tX3RyYW5zZm9ybXMubG9jYWwpCi0gICAgICAgICAgICAgICAgLnRyYW5zbGF0ZSgt
b3JpZ2luWCwgLW9yaWdpblkpOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRl
VHJhbnNmb3JtYXRpb25zKCkKLXsKLSAgICBpZiAoIW1fdHJhbnNmb3Jtcy5kaXJ0eSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV90cmFuc2Zvcm1zLmRpcnR5ID0gZmFsc2U7Ci0gICAgaWYgKCht
X3NpemUuaXNFbXB0eSgpICYmIG1fc3RhdGUubWFza3NUb0JvdW5kcykpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFRleHR1cmVNYXBwZXJOb2RlKiBwYXJlbnQgPSBtX3BhcmVudDsKLSAgICBjb21w
dXRlTG9jYWxUcmFuc2Zvcm0oKTsKLQotICAgIG1fdHJhbnNmb3Jtcy50YXJnZXQgPSBUcmFuc2Zv
cm1hdGlvbk1hdHJpeChwYXJlbnQgPyBwYXJlbnQtPm1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50
cyA6IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpLm11bHRMZWZ0KG1fdHJhbnNmb3Jtcy5sb2NhbCk7
Ci0gICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzID0gKG1fbGF5ZXJUeXBlID09IENsaXBM
YXllciA/IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkgOiBtX3RyYW5zZm9ybXMudGFyZ2V0KTsKLQot
ICAgIGlmIChtX2VmZmVjdFRhcmdldCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV90cmFuc2Zv
cm1zLnRhcmdldEJvdW5kaW5nUmVjdCA9IEludFJlY3QobV90cmFuc2Zvcm1zLnRhcmdldC5tYXBS
ZWN0KGVudGlyZVJlY3QoKSkpOwotICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllcikKLSAgICAg
ICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPmNvbXB1dGVUcmFuc2Zvcm1hdGlvbnMoKTsKLQotICAg
IGZsYXR0ZW5UbzJEU3BhY2VJZk5lY2Vzc2FyeSgpOwotCi0gICAgaWYgKCFtX3N0YXRlLmJhY2tm
YWNlVmlzaWJpbGl0eSAmJiBtX3RyYW5zZm9ybXMudGFyZ2V0LmludmVyc2UoKS5tMzMoKSA8IDAp
IHsKLSAgICAgICAgbV9zdGF0ZS52aXNpYmxlID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgbV9zdGF0ZS52aXNpYmxlID0gdHJ1ZTsKLQotICAgIGlmIChwYXJlbnQgJiYgcGFy
ZW50LT5tX3N0YXRlLnByZXNlcnZlczNEKQotICAgICAgICBtX3RyYW5zZm9ybXMuY2VudGVyWiA9
IG1fdHJhbnNmb3Jtcy50YXJnZXQubWFwUG9pbnQoRmxvYXRQb2ludDNEKG1fc2l6ZS53aWR0aCgp
IC8gMiwgbV9zaXplLmhlaWdodCgpIC8gMiwgMCkpLnooKTsKLQotICAgIGlmICghbV9jaGlsZHJl
bi5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3N0YXRlLmNoaWxkcmVuVHJh
bnNmb3JtLmlzSWRlbnRpdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgRmxvYXRQ
b2ludCBjZW50ZXJQb2ludCA9IEZsb2F0UG9pbnQobV9zaXplLndpZHRoKCkgLyAyLCBtX3NpemUu
aGVpZ2h0KCkgLyAyKTsKLSAgICBpZiAobV90cmFuc2Zvcm1zLnBlcnNwZWN0aXZlRGlydHkpCi0g
ICAgICAgIG1fdHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZSA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkK
LSAgICAgICAgICAgIC50cmFuc2xhdGUoY2VudGVyUG9pbnQueCgpLCBjZW50ZXJQb2ludC55KCkp
Ci0gICAgICAgICAgICAubXVsdExlZnQobV9zdGF0ZS5jaGlsZHJlblRyYW5zZm9ybSkKLSAgICAg
ICAgICAgIC50cmFuc2xhdGUoLWNlbnRlclBvaW50LngoKSwgLWNlbnRlclBvaW50LnkoKSk7Ci0g
ICAgbV90cmFuc2Zvcm1zLnBlcnNwZWN0aXZlRGlydHkgPSBmYWxzZTsKLSAgICBtX3RyYW5zZm9y
bXMuZm9yRGVzY2VuZGFudHMubXVsdExlZnQobV90cmFuc2Zvcm1zLnBlcnNwZWN0aXZlKTsKLX0K
LQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6dXBsb2FkVGV4dHVyZUZyb21Db250ZW50KFRleHR1
cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0KQotewot
ICAgIGlmIChtX3NpemUuaXNFbXB0eSgpIHx8ICFtX2xheWVyKSB7Ci0gICAgICAgIG1fdGV4dHVy
ZS0+ZGVzdHJveSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fY3VycmVu
dENvbnRlbnQuY29udGVudFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSkgewotICAgICAg
ICBpZiAobV9jdXJyZW50Q29udGVudC5pbWFnZSkKLSAgICAgICAgICAgIG1fdGV4dHVyZS0+c2V0
Q29udGVudHNUb0ltYWdlKG1fY3VycmVudENvbnRlbnQuaW1hZ2UuZ2V0KCkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0g
TWVkaWFDb250ZW50VHlwZSkgewotICAgICAgICBpZiAoIW1fY3VycmVudENvbnRlbnQubWVkaWEp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fdGV4dHVyZS0+cmVzZXQobV9zaXplLCB0
cnVlKTsKLSAgICAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCA9
IG1fdGV4dHVyZS0+YmVnaW5QYWludE1lZGlhKCk7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBj
b250ZXh0KHBsYXRmb3JtQ29udGV4dCk7Ci0gICAgICAgIG1fY3VycmVudENvbnRlbnQubWVkaWEt
PnBhaW50KCZjb250ZXh0KTsKLSAgICAgICAgbV90ZXh0dXJlLT5lbmRQYWludCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgY29uc3QgYm9vbCBuZWVkc1Jlc2V0ID0gKG1fdGV4dHVy
ZS0+Y29udGVudFNpemUoKSAhPSBtX3NpemUpIHx8ICFtX3RleHR1cmUtPmlzVmFsaWQoKTsKLSAg
ICBpZiAoKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgIT0gSFRNTENvbnRlbnRUeXBlKQot
ICAgICAgICB8fCAoIW1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5ICYmIG1fY3VycmVudENv
bnRlbnQubmVlZHNEaXNwbGF5UmVjdC5pc0VtcHR5KCkgJiYgIW5lZWRzUmVzZXQpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IEludFJlY3QoMCwgMCwgbV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgaWYgKCFuZWVkc1Jlc2V0ICYmICFtX2N1
cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSkKLSAgICAgICAgZGlydHlSZWN0LmludGVyc2VjdCht
X2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QpOwotICAgIGlmIChuZWVkc1Jlc2V0KQot
ICAgICAgICBtX3RleHR1cmUtPnJlc2V0KG1fc2l6ZSwgbV9zdGF0ZS5jb250ZW50c09wYXF1ZSk7
Ci0gICAgbV9wZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXlSZWN0ID0gSW50UmVjdCgpOwotCi0g
ICAgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChtX3RleHR1cmUtPmJlZ2luUGFp
bnQoZGlydHlSZWN0KSk7Ci0gICAgICAgIGlmICh0ZXh0dXJlTWFwcGVyKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkodGV4dHVyZU1hcHBlci0+aW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICAgICAgICAgIGNvbnRleHQuc2V0VGV4dERy
YXdpbmdNb2RlKHRleHR1cmVNYXBwZXItPnRleHREcmF3aW5nTW9kZSgpKTsKLSAgICAgICAgfQot
ICAgICAgICBtX2xheWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBkaXJ0
eVJlY3QpOwotICAgIH0KLSAgICBtX3RleHR1cmUtPmVuZFBhaW50KCk7Ci0gICAgbV9jdXJyZW50
Q29udGVudC5uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKLQotfQotCi12b2lkIFRleHR1cmVNYXBwZXJO
b2RlOjpwYWludFNlbGYoY29uc3QgVGV4bWFwUGFpbnRPcHRpb25zJiBvcHRpb25zKQotewotICAg
IGlmICghbV9sYXllciB8fCBtX3NpemUuaXNFbXB0eSgpIHx8ICghbV9zdGF0ZS5kcmF3c0NvbnRl
bnQgJiYgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbWFza1RleHR1cmUg
PSBtX3N0YXRlLm1hc2tMYXllciA/IG1fc3RhdGUubWFza0xheWVyLT5tX3RleHR1cmUgOiAwOwot
ICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiByZXBsaWNhTWFza1RleHR1cmUgPSAwOwotICAgIGlm
IChtX3N0YXRlLnJlcGxpY2FMYXllciAmJiBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5t
YXNrTGF5ZXIpCi0gICAgICAgIHJlcGxpY2FNYXNrVGV4dHVyZSA9IG1fc3RhdGUucmVwbGljYUxh
eWVyLT5tX3N0YXRlLm1hc2tMYXllci0+bV90ZXh0dXJlOwotCi0gICAgY29uc3QgZmxvYXQgb3Bh
Y2l0eSA9IG9wdGlvbnMuaXNTdXJmYWNlID8gMSA6IG9wdGlvbnMub3BhY2l0eTsKLQotICAgIHVw
bG9hZFRleHR1cmVGcm9tQ29udGVudChvcHRpb25zLnRleHR1cmVNYXBwZXIsIG9wdGlvbnMudmlz
aWJsZVJlY3QpOwotICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllciAmJiAhb3B0aW9ucy5pc1N1
cmZhY2UpCi0gICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUoKm1fdGV4
dHVyZS5nZXQoKSwgcmVwbGljYVJlY3QoKSwgbV90cmFuc2Zvcm1zLnJlcGxpY2EsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgb3BhY2l0eSAqIG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRl
Lm9wYWNpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGljYU1hc2tUZXh0dXJlID8g
cmVwbGljYU1hc2tUZXh0dXJlLmdldCgpIDogbWFza1RleHR1cmUuZ2V0KCkpOwotCi0gICAgY29u
c3QgSW50UmVjdCByZWN0ID0gbV9sYXllclR5cGUgPT0gQ2xpcExheWVyID8gZW50aXJlUmVjdCgp
IDogdGFyZ2V0UmVjdCgpOwotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9y
bSA9IG1fbGF5ZXJUeXBlID09IENsaXBMYXllciA/IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkgOiBt
X3RyYW5zZm9ybXMudGFyZ2V0OwotICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1
cmUoKm1fdGV4dHVyZS5nZXQoKSwgcmVjdCwgdHJhbnNmb3JtLCBvcGFjaXR5LCBvcHRpb25zLmlz
U3VyZmFjZSA/IDAgOiBtYXNrVGV4dHVyZS5nZXQoKSk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBl
ck5vZGU6OnBhaW50UmVjdXJzaXZlKFRleG1hcFBhaW50T3B0aW9ucyBvcHRpb25zKQotewotICAg
IGJvb2wgaXNEaXJ0eSA9IG1fc3RhdGUuZGlydHk7Ci0gICAgbV9zdGF0ZS5kaXJ0eSA9IGZhbHNl
OwotCi0gICAgaWYgKChtX3NpemUuaXNFbXB0eSgpICYmIChtX3N0YXRlLm1hc2tzVG9Cb3VuZHMK
LSAgICAgICAgfHwgbV9jaGlsZHJlbi5pc0VtcHR5KCkpKSB8fCAhbV9zdGF0ZS52aXNpYmxlIHx8
IG9wdGlvbnMub3BhY2l0eSA8IDAuMDEgfHwgbV9zdGF0ZS5vcGFjaXR5IDwgMC4wMSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaW5pdGlhbGl6ZVRleHR1cmVNYXBwZXIob3B0aW9ucy50ZXh0dXJl
TWFwcGVyKTsKLSAgICBjb21wdXRlUmVwbGljYVRyYW5zZm9ybSgpOwotCi0gICAgaWYgKG1fc3Rh
dGUubWFza0xheWVyKSB7Ci0gICAgICAgIG1fc3RhdGUubWFza0xheWVyLT5pbml0aWFsaXplVGV4
dHVyZU1hcHBlcihvcHRpb25zLnRleHR1cmVNYXBwZXIpOwotICAgICAgICBtX3N0YXRlLm1hc2tM
YXllci0+bV9zdGF0ZS5kaXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtX3N0YXRlLnJl
cGxpY2FMYXllcikgewotICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+aW5pdGlhbGl6ZVRl
eHR1cmVNYXBwZXIob3B0aW9ucy50ZXh0dXJlTWFwcGVyKTsKLSAgICAgICAgbV9zdGF0ZS5yZXBs
aWNhTGF5ZXItPm1fc3RhdGUuZGlydHkgPSBmYWxzZTsKLSAgICAgICAgaWYgKG1fc3RhdGUucmVw
bGljYUxheWVyLT5tX3N0YXRlLm1hc2tMYXllcikgewotICAgICAgICAgICAgbV9zdGF0ZS5yZXBs
aWNhTGF5ZXItPm1fc3RhdGUubWFza0xheWVyLT5pbml0aWFsaXplVGV4dHVyZU1hcHBlcihvcHRp
b25zLnRleHR1cmVNYXBwZXIpOwotICAgICAgICAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1f
c3RhdGUubWFza0xheWVyLT5tX3N0YXRlLmRpcnR5ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBUZXh0dXJlTWFwcGVyTm9kZSogcmVwbGljYSA9IG1fc3RhdGUucmVwbGljYUxheWVy
OwotICAgIGNvbnN0IGJvb2wgaXNTdXJmYWNlID0gKG1fbGF5ZXJUeXBlID09IENsaXBMYXllcgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fbGF5ZXJUeXBlID09IFRyYW5zcGFyZW5j
eUxheWVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKG1fbGF5ZXJUeXBlID09IFJv
b3RMYXllcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAob3B0aW9ucy50ZXh0
dXJlTWFwcGVyLT5hbGxvd1N1cmZhY2VGb3JSb290KCkgfHwgbV9zdGF0ZS5oYXNTdXJmYWNlRGVz
Y2VuZGFudHMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpOwotICAgIGlmIChp
c1N1cmZhY2UpCi0gICAgICAgIHVwbG9hZFRleHR1cmVGcm9tQ29udGVudChvcHRpb25zLnRleHR1
cmVNYXBwZXIsIG9wdGlvbnMudmlzaWJsZVJlY3QpOwotICAgIGNvbnN0IEludFJlY3QgYm91bmRp
bmdSZWN0ZnJvbU5lYXJlc3RTdXJmYWNlID0gbV90cmFuc2Zvcm1zLnRhcmdldEJvdW5kaW5nUmVj
dDsKLQotICAgIG9wdGlvbnMub3BhY2l0eSAqPSBtX3N0YXRlLm9wYWNpdHk7Ci0KLSAgICBUZXht
YXBQYWludE9wdGlvbnMgb3B0aW9uc0ZvckRlc2NlbmRhbnRzKG9wdGlvbnMpOwotICAgIG9wdGlv
bnNGb3JEZXNjZW5kYW50cy5vcGFjaXR5ID0gaXNTdXJmYWNlID8gMSA6IG9wdGlvbnMub3BhY2l0
eTsKLSAgICBvcHRpb25zLmlzU3VyZmFjZSA9IGlzU3VyZmFjZTsKLQotICAgIGlmIChtX2xheWVy
VHlwZSA9PSBDbGlwTGF5ZXIpIHsKLSAgICAgICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLnZpc2li
bGVSZWN0ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKS50cmFuc2xhdGUoLWJvdW5kaW5nUmVjdGZy
b21OZWFyZXN0U3VyZmFjZS54KCksIC1ib3VuZGluZ1JlY3Rmcm9tTmVhcmVzdFN1cmZhY2UueSgp
KS5tYXBSZWN0KG9wdGlvbnMudmlzaWJsZVJlY3QpOwotICAgICAgICBvcHRpb25zRm9yRGVzY2Vu
ZGFudHMuc2Npc3NvclJlY3QgPSBJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUu
aGVpZ2h0KCkpOwotICAgIH0KLQotICAgIGlmIChtX2xheWVyVHlwZSA9PSBTY2lzc29yTGF5ZXIp
Ci0gICAgICAgIG9wdGlvbnNGb3JEZXNjZW5kYW50cy5zY2lzc29yUmVjdC5pbnRlcnNlY3QobV90
cmFuc2Zvcm1zLnRhcmdldEJvdW5kaW5nUmVjdCk7Ci0gICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVy
LT5zZXRDbGlwKG9wdGlvbnNGb3JEZXNjZW5kYW50cy5zY2lzc29yUmVjdCk7Ci0KLSAgICBUZXh0
dXJlTWFwcGVyQ2FjaGVMb2NrKG1fdGV4dHVyZS5nZXQoKSk7Ci0gICAgVGV4dHVyZU1hcHBlckNh
Y2hlTG9jayhtX3N1cmZhY2UuZ2V0KCkpOwotICAgIFRleHR1cmVNYXBwZXJDYWNoZUxvY2sobV9y
ZXBsaWNhU3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBnVGV4dHVyZU1hcHBlckNhY2hlLnB1cmdlKCk7
Ci0KLSAgICBpZiAoaXNTdXJmYWNlKSB7Ci0gICAgICAgIEFTU0VSVChtX3N1cmZhY2UpOwotICAg
ICAgICBpZiAoIW1fc3VyZmFjZS0+aXNWYWxpZCgpKQotICAgICAgICAgICAgaXNEaXJ0eSA9IHRy
dWU7Ci0gICAgICAgIGlmIChtX3N0YXRlLnRpbGVkKSB7Ci0gICAgICAgICAgICBtX3N1cmZhY2Ut
PnJlc2V0KG9wdGlvbnMudmlzaWJsZVJlY3Quc2l6ZSgpKTsKLSAgICAgICAgICAgIG1fc3VyZmFj
ZS0+c2V0T2Zmc2V0KG9wdGlvbnMudmlzaWJsZVJlY3QubG9jYXRpb24oKSk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoaXNEaXJ0eSkKLSAgICAgICAgICAgIG1fc3VyZmFjZS0+cmVzZXQobV9sYXllclR5
cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIgPyBvcHRpb25zLnN1cmZhY2UtPnNpemUoKSA6IG1fc2l6
ZSk7Ci0gICAgICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUubWFyayhtX3N1cmZhY2UuZ2V0KCkpOwot
ICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKG1fc3VyZmFjZS5nZXQo
KSk7Ci0KLSAgICAgICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLnN1cmZhY2UgPSBtX3N1cmZhY2Uu
Z2V0KCk7Ci0gICAgfSBlbHNlIGlmIChtX3N1cmZhY2UpCi0gICAgICAgIG1fc3VyZmFjZS0+ZGVz
dHJveSgpOwotCi0gICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1hc2tUZXh0dXJlOwotICAgIFJl
ZlB0cjxCaXRtYXBUZXh0dXJlPiByZXBsaWNhTWFza1RleHR1cmU7Ci0gICAgaWYgKFRleHR1cmVN
YXBwZXJOb2RlKiBtYXNrID0gbV9zdGF0ZS5tYXNrTGF5ZXIpIHsKLSAgICAgICAgbWFzay0+dXBs
b2FkVGV4dHVyZUZyb21Db250ZW50KG9wdGlvbnMudGV4dHVyZU1hcHBlciwgb3B0aW9ucy52aXNp
YmxlUmVjdCk7Ci0gICAgICAgIG1hc2tUZXh0dXJlID0gbWFzay0+bV90ZXh0dXJlOwotICAgIH0K
LQotICAgIGlmIChyZXBsaWNhICYmIHJlcGxpY2EtPm1fc3RhdGUubWFza0xheWVyKSB7Ci0gICAg
ICAgIHJlcGxpY2EtPm1fc3RhdGUubWFza0xheWVyLT51cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQo
b3B0aW9ucy50ZXh0dXJlTWFwcGVyLCBvcHRpb25zLnZpc2libGVSZWN0KTsKLSAgICAgICAgcmVw
bGljYU1hc2tUZXh0dXJlID0gcmVwbGljYS0+bV9zdGF0ZS5tYXNrTGF5ZXItPm1fdGV4dHVyZTsK
LSAgICB9Ci0KLSAgICBpbnQgY2hpbGRyZW5TaXplID0gbV9jaGlsZHJlbi5zaXplKCk7Ci0gICAg
aWYgKGlzRGlydHkgfHwgIWlzU3VyZmFjZSB8fCBtX3N0YXRlLnRpbGVkIHx8ICFtX3N1cmZhY2Ut
PmlzVmFsaWQoKSkgewotICAgICAgICBib29sIGRpZFBhaW50U2VsZiA9IGZhbHNlOwotICAgICAg
ICBpZiAoIW1fc3RhdGUucHJlc2VydmVzM0QgfHwgbV9jaGlsZHJlbi5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgICAgIHBhaW50U2VsZihvcHRpb25zKTsKLSAgICAgICAgICAgIGRpZFBhaW50U2VsZiA9
IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9jaGlsZHJlbi5pc0VtcHR5KCkgJiYg
IWlzU3VyZmFjZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAobV9sYXllclR5
cGUgPT0gU2Npc3NvckxheWVyKQotICAgICAgICAgICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLnNj
aXNzb3JSZWN0LmludGVyc2VjdChtX3RyYW5zZm9ybXMudGFyZ2V0Lm1hcFJlY3QoSW50UmVjdCgw
LCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSkpOwotCi0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY2hpbGRyZW5TaXplOyArK2kpIHsKLSAgICAgICAgICAgIFRleHR1cmVN
YXBwZXJOb2RlKiBsYXllciA9IG1fY2hpbGRyZW5baV07Ci0gICAgICAgICAgICBpZiAoIWxheWVy
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBpZiAoIWRpZFBhaW50
U2VsZiAmJiBsYXllci0+bV90cmFuc2Zvcm1zLmNlbnRlclogPj0gMCkgewotICAgICAgICAgICAg
ICAgIHBhaW50U2VsZihvcHRpb25zKTsKLSAgICAgICAgICAgICAgICBkaWRQYWludFNlbGYgPSB0
cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGF5ZXItPnBhaW50UmVjdXJzaXZlKG9w
dGlvbnNGb3JEZXNjZW5kYW50cyk7Ci0gICAgICAgICAgICBpZiAoaXNTdXJmYWNlKSB7Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUKG1fc3VyZmFjZSk7Ci0gICAgICAgICAgICAgICAgZ1RleHR1cmVN
YXBwZXJDYWNoZS5tYXJrKG1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgb3B0aW9u
cy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShtX3N1cmZhY2UuZ2V0KCkpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghZGlkUGFpbnRTZWxmKSB7Ci0gICAgICAgICAg
ICBwYWludFNlbGYob3B0aW9ucyk7Ci0gICAgICAgICAgICBkaWRQYWludFNlbGYgPSB0cnVlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1fbGF5ZXJUeXBlID09IFJvb3RMYXllciB8fCBt
X2xheWVyVHlwZSA9PSBEZWZhdWx0TGF5ZXIgfHwgbV9sYXllclR5cGUgPT0gU2Npc3NvckxheWVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9zdXJmYWNlKTsKLSAgICBCaXRtYXBU
ZXh0dXJlJiB0ZXh0dXJlID0gKm1fc3VyZmFjZS5nZXQoKTsKLSAgICBpZiAocmVwbGljYSkgewot
ICAgICAgICBBU1NFUlQobV9yZXBsaWNhU3VyZmFjZSk7Ci0gICAgICAgIG1fcmVwbGljYVN1cmZh
Y2UtPnJlc2V0KG9wdGlvbnMuc3VyZmFjZS0+c2l6ZSgpKTsKLSAgICAgICAgbV9yZXBsaWNhU3Vy
ZmFjZS0+c2V0T2Zmc2V0KG9wdGlvbnMuc3VyZmFjZS0+b2Zmc2V0KCkpOwotICAgICAgICBnVGV4
dHVyZU1hcHBlckNhY2hlLm1hcmsobV9yZXBsaWNhU3VyZmFjZS5nZXQoKSk7Ci0gICAgICAgIG9w
dGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UobV9yZXBsaWNhU3VyZmFjZS5nZXQoKSk7
Ci0gICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUodGV4dHVyZSwgcmVw
bGljYVJlY3QoKSwgbV90cmFuc2Zvcm1zLnJlcGxpY2EsIHJlcGxpY2EtPm1fc3RhdGUub3BhY2l0
eSwgcmVwbGljYU1hc2tUZXh0dXJlID8gcmVwbGljYU1hc2tUZXh0dXJlLmdldCgpIDogbWFza1Rl
eHR1cmUuZ2V0KCkpOwotICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJl
KHRleHR1cmUsIEludFJlY3QoSW50UG9pbnQoMCwgMCksIG9wdGlvbnMuc3VyZmFjZS0+c2l6ZSgp
KSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgMS4wZiwgbWFza1RleHR1cmUuZ2V0KCkpOwotICAg
ICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKG9wdGlvbnMuc3VyZmFjZSk7
Ci0gICAgICAgIGdUZXh0dXJlTWFwcGVyQ2FjaGUubWFyayhvcHRpb25zLnN1cmZhY2UpOwotICAg
ICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCptX3JlcGxpY2FTdXJmYWNl
LmdldCgpLCBJbnRSZWN0KEludFBvaW50KDAsIDApLCBvcHRpb25zLnN1cmZhY2UtPnNpemUoKSks
IFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIG9wdGlvbnMub3BhY2l0eSwgMCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKG9w
dGlvbnMuc3VyZmFjZSk7Ci0gICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSh0
ZXh0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xheWVyVHlwZSA9PSBUcmFu
c3BhcmVuY3lMYXllciA/IEludFJlY3QoSW50UG9pbnQoMCwgMCksIG9wdGlvbnMuc3VyZmFjZS0+
c2l6ZSgpKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFJlY3QoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9sYXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5
ZXIgPyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpIDogbV90cmFuc2Zvcm1zLnRhcmdldCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vcGFjaXR5LCBtYXNrVGV4dHVyZS5nZXQo
KSk7Ci0gICAgZ1RleHR1cmVNYXBwZXJDYWNoZS5tYXJrKCZ0ZXh0dXJlKTsKLX0KLQotdm9pZCBU
ZXh0dXJlTWFwcGVyTm9kZTo6Y2xlYW51cFRleHR1cmVNYXBwZXIoKQotewotICAgIGlmIChtX3Rl
eHR1cmUpCi0gICAgICAgIG1fdGV4dHVyZS0+ZGVzdHJveSgpOwotICAgIGlmIChtX3N1cmZhY2Up
Ci0gICAgICAgIG1fc3VyZmFjZS0+ZGVzdHJveSgpOwotICAgIGlmIChtX3JlcGxpY2FTdXJmYWNl
KQotICAgICAgICBtX3JlcGxpY2FTdXJmYWNlLT5kZXN0cm95KCk7Ci0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2NoaWxkcmVu
W2ldKQotICAgICAgICAgICAgbV9jaGlsZHJlbltpXS0+Y2xlYW51cFRleHR1cmVNYXBwZXIoKTsK
LSAgICB9Ci0gICAgaWYgKG1fbGFzdFRleHR1cmVNYXBwZXIpCi0gICAgICAgIG1fbGFzdFRleHR1
cmVNYXBwZXItPmNsZWFudXAoKTsKLX0KLQotVGV4dHVyZU1hcHBlck5vZGU6On5UZXh0dXJlTWFw
cGVyTm9kZSgpCitHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6R3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQorICAgIDogR3JhcGhpY3NMYXll
cihjbGllbnQpCisgICAgLCBtX25vZGUobmV3IFRleHR1cmVNYXBwZXJOb2RlKCkpCisgICAgLCBt
X2NoYW5nZU1hc2soMCkKIHsKLSAgICBzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICB7Ci0gICAgICAg
IGNvbnN0IGludCBjaGlsZHJlblNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKLSAgICAgICAgZm9y
IChpbnQgaSA9IGNoaWxkcmVuU2l6ZS0xOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgQVNT
RVJUKG1fY2hpbGRyZW5baV0tPm1fcGFyZW50ID09IHRoaXMpOwotICAgICAgICAgICAgbV9jaGls
ZHJlbltpXS0+bV9wYXJlbnQgPSAwOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChtX3BhcmVu
dCkKLSAgICAgICAgbV9wYXJlbnQtPm1fY2hpbGRyZW4ucmVtb3ZlKG1fcGFyZW50LT5tX2NoaWxk
cmVuLmZpbmQodGhpcykpOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpub3RpZnlDaGFu
Z2UoQ2hhbmdlTWFzayBjaGFuZ2VNYXNrKQordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cjo6bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDaGFuZ2VNYXNrIGNoYW5nZU1hc2sp
CiB7CiAgICAgbV9jaGFuZ2VNYXNrIHw9IGNoYW5nZU1hc2s7Ci0gICAgaWYgKCFtX2xheWVyLT5j
bGllbnQoKSkKKyAgICBpZiAoIWNsaWVudCgpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9sYXll
ci0+Y2xpZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZChtX2xheWVyKTsKLX0KLQotdm9pZCBUZXh0
dXJlTWFwcGVyTm9kZTo6cGVyZm9ybVBvc3RTeW5jT3BlcmF0aW9ucygpCi17Ci0gICAgY29uc3Qg
TGF5ZXJUeXBlIHByZXZMYXllclR5cGUgPSBtX2xheWVyVHlwZTsKLSAgICBjb21wdXRlTGF5ZXJU
eXBlKCk7Ci0gICAgaWYgKHByZXZMYXllclR5cGUgIT0gbV9sYXllclR5cGUpCi0gICAgICAgIG1f
c3RhdGUuZGlydHkgPSB0cnVlOwotICAgIGlmIChtX3RyYW5zZm9ybXMuZGlydHkpCi0gICAgICAg
IHNldE5lZWRzRGlzcGxheSgpOwotCi0gICAgY29tcHV0ZVRyYW5zZm9ybWF0aW9ucygpOwotICAg
IGlmIChtX3N0YXRlLm1hc2tMYXllciAmJiAhbV9zdGF0ZS5kaXJ0eSkKLSAgICAgICAgbV9zdGF0
ZS5kaXJ0eSA9IG1fc3RhdGUubWFza0xheWVyLT5tX3N0YXRlLmRpcnR5OwotICAgIGlmIChtX3N0
YXRlLnJlcGxpY2FMYXllciAmJiAhbV9zdGF0ZS5kaXJ0eSkKLSAgICAgICAgbV9zdGF0ZS5kaXJ0
eSA9IG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRlLmRpcnR5OwotCi0gICAgY29uc3QgaW50
IHNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKLQotICAgIGZvciAoaW50IGkgPSBzaXplIC0gMTsg
aSA+PSAwOyAtLWkpIHsKLSAgICAgICAgVGV4dHVyZU1hcHBlck5vZGUqIGxheWVyID0gbV9jaGls
ZHJlbltpXTsKLQotICAgICAgICBsYXllci0+cGVyZm9ybVBvc3RTeW5jT3BlcmF0aW9ucygpOwot
ICAgICAgICBpZiAoIW1fc3RhdGUuZGlydHkpCi0gICAgICAgICAgICBtX3N0YXRlLmRpcnR5ID0g
bGF5ZXItPm1fc3RhdGUuZGlydHk7Ci0gICAgfQotICAgIG1fc3RhdGUuaGFzU3VyZmFjZURlc2Nl
bmRhbnRzID0gaGFzU3VyZmFjZURlc2NlbmRhbnRzKCk7Ci0gICAgaWYgKG1fc3RhdGUuZGlydHkp
Ci0gICAgICAgIG1fc3RhdGUuZGVzY2VuZGFudHNXaXRoQ29udGVudCA9IGNvdW50RGVzY2VuZGFu
dHNXaXRoQ29udGVudCgpOwotCi0gICAgaWYgKG1fc3RhdGUucHJlc2VydmVzM0QpCi0gICAgICAg
IHNvcnRCeVpPcmRlcihtX2NoaWxkcmVuLCAwLCBzaXplKTsKLSAgICBpZiAobV9zdGF0ZS5kaXJ0
eSkgCi0gICAgICAgIHNldE5lZWRzRGlzcGxheSgpOworICAgIGNsaWVudCgpLT5ub3RpZnlTeW5j
UmVxdWlyZWQodGhpcyk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3Np
dGluZ1N0YXRlKGJvb2wgcmVjdXJzZSkKK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OmRpZFN5bmNocm9uaXplKCkKIHsKLSAgICBib29sIG5lZWRzVG9JbnZhbGlkYXRlVHJhbnNmb3Jt
ID0gZmFsc2U7Ci0KLSAgICBpZiAoIW1fbGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2NoYW5nZU1hc2sgPT0gTm9DaGFuZ2VzKQotICAgICAgICBnb3RvIGFmdGVyQ3VycmVudExh
eWVyU3luYzsKLQotICAgIHNldE5lZWRzRGlzcGxheSgpOwotICAgIGlmIChtX3BhcmVudCkKLSAg
ICAgICAgbV9wYXJlbnQtPm1fc3RhdGUuZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKG1fY3VycmVu
dENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlICYmIChtX2NoYW5nZU1hc2sg
JiBQYXJlbnRDaGFuZ2UpKSB7Ci0gICAgICAgIC8vIFRoZSBXZWJDb3JlIGNvbXBvc2l0b3IgbWFu
YWdlcyBpdGVtIG93bmVyc2hpcC4gV2UgaGF2ZSB0byBtYWtlIHN1cmUgZ3JhcGhpY3N2aWV3IGRv
ZXNuJ3QKLSAgICAgICAgLy8gdHJ5IHRvIHNuYXRjaCB0aGF0IG93bmVyc2hpcC4KLQotICAgICAg
ICBpZiAoIW1fbGF5ZXItPnBhcmVudCgpKQotICAgICAgICAgICAgbV9wYXJlbnQgPSAwOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtX3BhcmVudCA9IHRvVGV4dHVyZU1hcHBlck5vZGUobV9s
YXllci0+cGFyZW50KCkpOwotCi0gICAgICAgIGlmICghbV9sYXllci0+cGFyZW50KCkgJiYgbV9w
YXJlbnQpIHsKLSAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IG1fcGFyZW50LT5tX2NoaWxkcmVu
LmZpbmQodGhpcyk7Ci0gICAgICAgICAgICBtX3BhcmVudC0+bV9jaGlsZHJlbi5yZW1vdmUoaW5k
ZXgpOwotICAgICAgICB9Ci0KLSAgICB9Ci0KLSAgICBpZiAobV9jaGFuZ2VNYXNrICYgQ2hpbGRy
ZW5DaGFuZ2UpIHsKLSAgICAgICAgbV9jaGlsZHJlbi5jbGVhcigpOwotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSogY2hpbGQgPSB0b1RleHR1cmVNYXBwZXJOb2Rl
KG1fbGF5ZXItPmNoaWxkcmVuKClbaV0pKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjaGlsZCkK
LSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgbV9jaGlsZHJl
bi5hcHBlbmQoY2hpbGQpOwotICAgICAgICAgICAgICAgIGNoaWxkLT5tX3BhcmVudCA9IHRoaXM7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IHRydWU7
Ci0gICAgfQotCi0gICAgaWYgKG1fY2hhbmdlTWFzayAmIChTaXplQ2hhbmdlIHwgQ29udGVudHNS
ZWN0Q2hhbmdlKSkgewotICAgICAgICBJbnRTaXplIHdhbnRlZFNpemUgPSBJbnRTaXplKG1fbGF5
ZXItPnNpemUoKS53aWR0aCgpLCBtX2xheWVyLT5zaXplKCkuaGVpZ2h0KCkpOwotICAgICAgICBp
ZiAod2FudGVkU2l6ZS5pc0VtcHR5KCkgJiYgbV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSA9
PSBIVE1MQ29udGVudFR5cGUpCi0gICAgICAgICAgICB3YW50ZWRTaXplID0gSW50U2l6ZShtX2xh
eWVyLT5jb250ZW50c1JlY3QoKS53aWR0aCgpLCBtX2xheWVyLT5jb250ZW50c1JlY3QoKS5oZWln
aHQoKSk7Ci0KLSAgICAgICAgaWYgKHdhbnRlZFNpemUgIT0gbV9zaXplKSB7Ci0gICAgICAgICAg
ICBtX3NpemUgPSBJbnRTaXplKHdhbnRlZFNpemUud2lkdGgoKSwgd2FudGVkU2l6ZS5oZWlnaHQo
KSk7Ci0gICAgICAgICAgICBpZiAobV9wbGF0Zm9ybUNsaWVudCkKLSAgICAgICAgICAgICAgICBt
X3BsYXRmb3JtQ2xpZW50LT5zZXRTaXplQ2hhbmdlZChtX3NpemUpOwotICAgICAgICAgICAgY29u
c3QgYm9vbCBuZWVkc1RpbGluZyA9IG1fc2l6ZS53aWR0aCgpID4gMjAwMCB8fCBtX3NpemUuaGVp
Z2h0KCkgPiAyMDAwOwotICAgICAgICAgICAgaWYgKG1fc3RhdGUudGlsZWQgIT0gbmVlZHNUaWxp
bmcpCi0gICAgICAgICAgICAgICAgbV9zdGF0ZS50aWxlZCA9IG5lZWRzVGlsaW5nOwotICAgICAg
ICAgICAgbV9zdGF0ZS5kaXJ0eSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
bV9jaGFuZ2VNYXNrICYgTWFza0xheWVyQ2hhbmdlKSB7Ci0gICAgICAgaWYgKFRleHR1cmVNYXBw
ZXJOb2RlKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlck5vZGUobV9sYXllci0+bWFza0xheWVyKCkp
KQotICAgICAgICAgICBsYXllci0+bV9lZmZlY3RUYXJnZXQgPSB0aGlzOwotICAgIH0KLQotICAg
IGlmIChtX2NoYW5nZU1hc2sgJiBSZXBsaWNhTGF5ZXJDaGFuZ2UpIHsKLSAgICAgICBpZiAoVGV4
dHVyZU1hcHBlck5vZGUqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTm9kZShtX2xheWVyLT5yZXBs
aWNhTGF5ZXIoKSkpCi0gICAgICAgICAgIGxheWVyLT5tX2VmZmVjdFRhcmdldCA9IHRoaXM7Ci0g
ICAgfQotCi0gICAgaWYgKG1fY2hhbmdlTWFzayAmIChUcmFuc2Zvcm1DaGFuZ2UgfCBTaXplQ2hh
bmdlIHwgQW5jaG9yUG9pbnRDaGFuZ2UgfCBQb3NpdGlvbkNoYW5nZSkpCi0gICAgICAgIG1fdHJh
bnNmb3Jtcy5sb2NhbERpcnR5ID0gdHJ1ZTsKLQotICAgIGlmIChtX2NoYW5nZU1hc2sgJiAoQ2hp
bGRyZW5UcmFuc2Zvcm1DaGFuZ2UgfCBTaXplQ2hhbmdlKSkKLSAgICAgICAgbV90cmFuc2Zvcm1z
LnBlcnNwZWN0aXZlRGlydHkgPSB0cnVlOwotCi0gICAgaWYgKG1fY2hhbmdlTWFzayAmIChDaGls
ZHJlblRyYW5zZm9ybUNoYW5nZSB8IFByZXNlcnZlczNEQ2hhbmdlIHwgVHJhbnNmb3JtQ2hhbmdl
IHwgQW5jaG9yUG9pbnRDaGFuZ2UgfCBTaXplQ2hhbmdlIHwgQ29udGVudHNSZWN0Q2hhbmdlIHwg
QmFja2ZhY2VWaXNpYmlsaXR5Q2hhbmdlIHwgUG9zaXRpb25DaGFuZ2UgfCBNYXNrTGF5ZXJDaGFu
Z2UgfCBEcmF3c0NvbnRlbnRDaGFuZ2UgfCBDb250ZW50Q2hhbmdlIHwgUmVwbGljYUxheWVyQ2hh
bmdlKSkgICAgewotICAgICAgICAvLyBEdWUgdG8gdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhl
IHdheSBXZWJDb3JlIGhhbmRsZXMgdHJhbnNmb3JtcyBhbmQgdGhlIHdheSBRdCBoYW5kbGVzIHRy
YW5zZm9ybXMsCi0gICAgICAgIC8vIGFsbCB0aGVzZSBlbGVtZW50cyBhZmZlY3QgdGhlIHRyYW5z
Zm9ybXMgb2YgYWxsIHRoZSBkZXNjZW5kYW50cy4KLSAgICAgICAgbmVlZHNUb0ludmFsaWRhdGVU
cmFuc2Zvcm0gPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChtX2NoYW5nZU1hc2sgJiBEaXNwbGF5
Q2hhbmdlKSAKLSAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IHRydWU7Ci0KLSAgICBtX3N0YXRlLm1h
c2tMYXllciA9IHRvVGV4dHVyZU1hcHBlck5vZGUobV9sYXllci0+bWFza0xheWVyKCkpOwotICAg
IG1fc3RhdGUucmVwbGljYUxheWVyID0gdG9UZXh0dXJlTWFwcGVyTm9kZShtX2xheWVyLT5yZXBs
aWNhTGF5ZXIoKSk7Ci0gICAgbV9zdGF0ZS5wb3MgPSBtX2xheWVyLT5wb3NpdGlvbigpOwotICAg
IG1fc3RhdGUuYW5jaG9yUG9pbnQgPSBtX2xheWVyLT5hbmNob3JQb2ludCgpOwotICAgIG1fc3Rh
dGUuc2l6ZSA9IG1fbGF5ZXItPnNpemUoKTsKLSAgICBtX3N0YXRlLnRyYW5zZm9ybSA9IG1fbGF5
ZXItPnRyYW5zZm9ybSgpOwotICAgIG1fc3RhdGUuY29udGVudHNSZWN0ID0gbV9sYXllci0+Y29u
dGVudHNSZWN0KCk7Ci0gICAgbV9zdGF0ZS5vcGFjaXR5ID0gbV9sYXllci0+b3BhY2l0eSgpOwot
ICAgIG1fc3RhdGUuY29udGVudHNSZWN0ID0gbV9sYXllci0+Y29udGVudHNSZWN0KCk7Ci0gICAg
bV9zdGF0ZS5wcmVzZXJ2ZXMzRCA9IG1fbGF5ZXItPnByZXNlcnZlczNEKCk7Ci0gICAgbV9zdGF0
ZS5tYXNrc1RvQm91bmRzID0gbV9sYXllci0+bWFza3NUb0JvdW5kcygpOwotICAgIG1fc3RhdGUu
ZHJhd3NDb250ZW50ID0gbV9sYXllci0+ZHJhd3NDb250ZW50KCk7Ci0gICAgbV9zdGF0ZS5jb250
ZW50c09wYXF1ZSA9IG1fbGF5ZXItPmNvbnRlbnRzT3BhcXVlKCk7Ci0gICAgbV9zdGF0ZS5iYWNr
ZmFjZVZpc2liaWxpdHkgPSBtX2xheWVyLT5iYWNrZmFjZVZpc2liaWxpdHkoKTsKLSAgICBtX3N0
YXRlLmNoaWxkcmVuVHJhbnNmb3JtID0gbV9sYXllci0+Y2hpbGRyZW5UcmFuc2Zvcm0oKTsKLSAg
ICBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID0gbV9wZW5kaW5nQ29udGVudC5jb250ZW50
VHlwZTsKLSAgICBtX2N1cnJlbnRDb250ZW50LmltYWdlID0gbV9wZW5kaW5nQ29udGVudC5pbWFn
ZTsKLSAgICBtX2N1cnJlbnRDb250ZW50Lm1lZGlhID0gbV9wZW5kaW5nQ29udGVudC5tZWRpYTsK
LSAgICBtX2N1cnJlbnRDb250ZW50LmJhY2tncm91bmRDb2xvciA9IG1fcGVuZGluZ0NvbnRlbnQu
YmFja2dyb3VuZENvbG9yOwotICAgIG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5ID0gbV9j
dXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgfHwgbV9wZW5kaW5nQ29udGVudC5uZWVkc0Rpc3Bs
YXk7Ci0gICAgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0LnVuaXRlKG1fcGVuZGlu
Z0NvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCk7CisgICAgbV9zeW5jUXVldWVkID0gZmFsc2U7Cisg
ICAgbV9jaGFuZ2VNYXNrID0gMDsKICAgICBtX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheSA9
IGZhbHNlOwogICAgIG1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCA9IEludFJlY3Qo
KTsKLSAgICBtX2NoYW5nZU1hc2sgPSBOb0NoYW5nZXM7Ci0gICAgYWZ0ZXJDdXJyZW50TGF5ZXJT
eW5jOgotICAgIGlmIChuZWVkc1RvSW52YWxpZGF0ZVRyYW5zZm9ybSkKLSAgICAgICAgaW52YWxp
ZGF0ZVRyYW5zZm9ybSgpOwotCi0gICAgaWYgKG1fc3RhdGUubWFza0xheWVyKSB7Ci0gICAgICAg
IG1fc3RhdGUubWFza0xheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShmYWxzZSk7Ci0gICAgICAg
IGlmIChtX3N0YXRlLm1hc2tMYXllci0+bV9zaXplLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1f
c3RhdGUubWFza0xheWVyLT5tX3NpemUgPSBtX3NpemU7Ci0gICAgfQotCi0gICAgaWYgKG1fc3Rh
dGUucmVwbGljYUxheWVyKQotICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+c3luY0NvbXBv
c2l0aW5nU3RhdGUoZmFsc2UpOwotCi0jaWYgMAotICAgIGlmIChtX3N0YXRlLmRpcnR5ICYmIG1f
dGV4dHVyZSAmJiBtX3RleHR1cmUtPmFsbG93T2ZmbGluZVRleHR1cmVVcGxvYWQoKSkKLSAgICAg
ICAgdXBsb2FkVGV4dHVyZUZyb21Db250ZW50KDApOwotI2VuZGlmCi0KLSAgICBpZiAoIXJlY3Vy
c2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IGludCBjaGlsZHJlblNpemUgPSBtX2No
aWxkcmVuLnNpemUoKTsKLSAgICBmb3IgKGludCBpID0gY2hpbGRyZW5TaXplLTE7IGkgPj0gMDsg
LS1pKQotICAgICAgICBtX2NoaWxkcmVuW2ldLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSh0cnVlKTsK
LX0KLQotR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKLSAgICA6IEdyYXBoaWNzTGF5ZXIoY2xp
ZW50KQotICAgICwgbV9ub2RlKG5ldyBUZXh0dXJlTWFwcGVyTm9kZSh0aGlzKSkKLXsKIH0KIAog
dm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TmFtZShjb25zdCBTdHJpbmcmIG5h
bWUpCiB7Ci0gICAgbV9ub2RlLT5tX25hbWUgPSBuYW1lOworICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dE5hbWUobmFtZSk7CiB9CiAKIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjp+R3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIoKQpAQCAtMTA5NiwyNSArNjAsMjUgQEAgR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXI6On5HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcigpCiAqLwogdm9pZCBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TmVlZHNEaXNwbGF5KCkKIHsKLSAgICBtX25vZGUt
Pm1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5ID0gdHJ1ZTsKLSAgICBtX25vZGUtPm5vdGlm
eUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6RGlzcGxheUNoYW5nZSk7CisgICAgbV9wZW5kaW5n
Q29udGVudC5uZWVkc0Rpc3BsYXkgPSB0cnVlOworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFw
cGVyTm9kZTo6RGlzcGxheUNoYW5nZSk7CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5o
KQogKi8KIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxheUlu
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKG1fbm9kZS0+bV9wZW5kaW5n
Q29udGVudC5uZWVkc0Rpc3BsYXkpCisgICAgaWYgKG1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNw
bGF5KQogICAgICAgICByZXR1cm47Ci0gICAgbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50Lm5lZWRz
RGlzcGxheVJlY3QudW5pdGUoSW50UmVjdChyZWN0KSk7Ci0gICAgbV9ub2RlLT5ub3RpZnlDaGFu
Z2UoVGV4dHVyZU1hcHBlck5vZGU6OkRpc3BsYXlDaGFuZ2UpOworICAgIG1fcGVuZGluZ0NvbnRl
bnQubmVlZHNEaXNwbGF5UmVjdC51bml0ZShJbnRSZWN0KHJlY3QpKTsKKyAgICBub3RpZnlDaGFu
Z2UoVGV4dHVyZU1hcHBlck5vZGU6OkRpc3BsYXlDaGFuZ2UpOwogfQogCiAvKiBccmVpbXAgKEdy
YXBoaWNzTGF5ZXIuaCkKICovCiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRQ
YXJlbnQoR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7Ci0gICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2Uo
VGV4dHVyZU1hcHBlck5vZGU6OlBhcmVudENoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1
cmVNYXBwZXJOb2RlOjpQYXJlbnRDaGFuZ2UpOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldFBhcmVu
dChsYXllcik7CiB9CiAKQEAgLTExMjIsNyArODYsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyOjpzZXRQYXJlbnQoR3JhcGhpY3NMYXllciogbGF5ZXIpCiAqLwogYm9vbCBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNz
TGF5ZXIqPiYgY2hpbGRyZW4pCiB7Ci0gICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1h
cHBlck5vZGU6OkNoaWxkcmVuQ2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBl
ck5vZGU6OkNoaWxkcmVuQ2hhbmdlKTsKICAgICByZXR1cm4gR3JhcGhpY3NMYXllcjo6c2V0Q2hp
bGRyZW4oY2hpbGRyZW4pOwogfQogCkBAIC0xMTMwLDcgKzk0LDcgQEAgYm9vbCBHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcjo6c2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIq
PiYgY2hpbGQKICovCiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRDaGlsZChH
cmFwaGljc0xheWVyKiBsYXllcikKIHsKLSAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJl
TWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFw
cGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOwogICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkKGxh
eWVyKTsKIH0KIApAQCAtMTEzOSw3ICsxMDMsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyOjphZGRDaGlsZChHcmFwaGljc0xheWVyKiBsYXllcikKIHZvaWQgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OmFkZENoaWxkQXRJbmRleChHcmFwaGljc0xheWVyKiBsYXllciwgaW50
IGluZGV4KQogewogICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChsYXllciwgaW5k
ZXgpOwotICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDaGlsZHJl
bkNoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDaGlsZHJlbkNo
YW5nZSk7CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQpAQCAtMTE0Nyw3ICsxMTEs
NyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRDaGlsZEF0SW5kZXgoR3Jh
cGhpY3NMYXllciogbGF5ZXIsIGludCBpbmRleAogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6YWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciog
c2libGluZykKIHsKICAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZShsYXllciwgc2li
bGluZyk7Ci0gICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDaGls
ZHJlbkNoYW5nZSk7CisgICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRy
ZW5DaGFuZ2UpOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKQEAgLTExNTYsNyAr
MTIwLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRCZWxvdyhH
cmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXkKIHsKIAogICAgIEdyYXBoaWNzTGF5ZXI6
OmFkZENoaWxkQmVsb3cobGF5ZXIsIHNpYmxpbmcpOwotICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdl
KFRleHR1cmVNYXBwZXJOb2RlOjpDaGlsZHJlbkNoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRl
eHR1cmVNYXBwZXJOb2RlOjpDaGlsZHJlbkNoYW5nZSk7CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhp
Y3NMYXllci5oKQpAQCAtMTE2NCwxMCArMTI4LDkgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcjo6YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXkK
IGJvb2wgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnJlcGxhY2VDaGlsZChHcmFwaGljc0xh
eWVyKiBvbGRDaGlsZCwgR3JhcGhpY3NMYXllciogbmV3Q2hpbGQpCiB7CiAgICAgaWYgKEdyYXBo
aWNzTGF5ZXI6OnJlcGxhY2VDaGlsZChvbGRDaGlsZCwgbmV3Q2hpbGQpKSB7Ci0gICAgICAgIG1f
bm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDaGlsZHJlbkNoYW5nZSk7Cisg
ICAgICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAg
LTExNzcsNyArMTQwLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cmVtb3Zl
RnJvbVBhcmVudCgpCiB7CiAgICAgaWYgKCFwYXJlbnQoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpQYXJlbnRDaGFuZ2UpOwor
ICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6UGFyZW50Q2hhbmdlKTsKICAgICBH
cmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCk7CiB9CiAKQEAgLTExODgsNyArMTUxLDcg
QEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TWFza0xheWVyKEdyYXBoaWNz
TGF5ZXIqIHZhbHVlKQogICAgIGlmICh2YWx1ZSA9PSBtYXNrTGF5ZXIoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcih2YWx1ZSk7Ci0gICAgbV9ub2Rl
LT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6Ok1hc2tMYXllckNoYW5nZSk7CisgICAg
bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpNYXNrTGF5ZXJDaGFuZ2UpOwogfQogCiAK
QEAgLTExOTksNyArMTYyLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0
UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciogdmFsdWUpCiAgICAgaWYgKHZhbHVlID09
IHJlcGxpY2FMYXllcigpKQogICAgICAgICByZXR1cm47CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0
UmVwbGljYXRlZEJ5TGF5ZXIodmFsdWUpOwotICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1
cmVNYXBwZXJOb2RlOjpSZXBsaWNhTGF5ZXJDaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShUZXh0
dXJlTWFwcGVyTm9kZTo6UmVwbGljYUxheWVyQ2hhbmdlKTsKIH0KIAogLyogXHJlaW1wIChHcmFw
aGljc0xheWVyLmgpCkBAIC0xMjA5LDcgKzE3Miw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHZhbHVlKQogICAgIGlmICh2
YWx1ZSA9PSBwb3NpdGlvbigpKQogICAgICAgICByZXR1cm47CiAgICAgR3JhcGhpY3NMYXllcjo6
c2V0UG9zaXRpb24odmFsdWUpOwotICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBw
ZXJOb2RlOjpQb3NpdGlvbkNoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJO
b2RlOjpQb3NpdGlvbkNoYW5nZSk7CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQpA
QCAtMTIxOSw3ICsxODIsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRB
bmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHZhbHVlKQogICAgIGlmICh2YWx1ZSA9PSBh
bmNob3JQb2ludCgpKQogICAgICAgICByZXR1cm47CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0QW5j
aG9yUG9pbnQodmFsdWUpOwotICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJO
b2RlOjpBbmNob3JQb2ludENoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJO
b2RlOjpBbmNob3JQb2ludENoYW5nZSk7CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5o
KQpAQCAtMTIzMCw3ICsxOTMsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpz
ZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgdmFsdWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdy
YXBoaWNzTGF5ZXI6OnNldFNpemUodmFsdWUpOwotICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRl
eHR1cmVNYXBwZXJOb2RlOjpTaXplQ2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1h
cHBlck5vZGU6OlNpemVDaGFuZ2UpOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkK
QEAgLTEyNDEsNyArMjA0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0
VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB2YWx1ZSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKHZhbHVlKTsKLSAgICBtX25v
ZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6VHJhbnNmb3JtQ2hhbmdlKTsKKyAg
ICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlRyYW5zZm9ybUNoYW5nZSk7CiB9CiAK
IC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQpAQCAtMTI1MSw3ICsyMTQsNyBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeAogICAgIGlmICh2YWx1ZSA9PSBjaGlsZHJlblRyYW5zZm9ybSgpKQog
ICAgICAgICByZXR1cm47CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0o
dmFsdWUpOwotICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDaGls
ZHJlblRyYW5zZm9ybUNoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2Rl
OjpDaGlsZHJlblRyYW5zZm9ybUNoYW5nZSk7CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXll
ci5oKQpAQCAtMTI2MSw3ICsyMjQsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
OjpzZXRQcmVzZXJ2ZXMzRChib29sIHZhbHVlKQogICAgIGlmICh2YWx1ZSA9PSBwcmVzZXJ2ZXMz
RCgpKQogICAgICAgICByZXR1cm47CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0Qo
dmFsdWUpOwotICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpQcmVz
ZXJ2ZXMzRENoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpQcmVz
ZXJ2ZXMzRENoYW5nZSk7CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQpAQCAtMTI3
MSw3ICsyMzQsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRNYXNrc1Rv
Qm91bmRzKGJvb2wgdmFsdWUpCiAgICAgaWYgKHZhbHVlID09IG1hc2tzVG9Cb3VuZHMoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHModmFsdWUp
OwotICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpNYXNrc1RvQm91
bmRzQ2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6Ok1hc2tzVG9C
b3VuZHNDaGFuZ2UpOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKQEAgLTEyODAs
NyArMjQzLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0RHJhd3NDb250
ZW50KGJvb2wgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlID09IGRyYXdzQ29udGVudCgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6
OkRyYXdzQ29udGVudENoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2Rl
OjpEcmF3c0NvbnRlbnRDaGFuZ2UpOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29udGVu
dCh2YWx1ZSk7CiB9CiAKQEAgLTEyODgsMjIgKzI1MSwyMiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyOjpzZXREcmF3c0NvbnRlbnQoYm9vbCB2YWx1ZSkKICovCiB2b2lkIEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIHZh
bHVlKQogewotICAgIGlmICh2YWx1ZSA9PSBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQuYmFja2dy
b3VuZENvbG9yKQorICAgIGlmICh2YWx1ZSA9PSBtX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRD
b2xvcikKICAgICAgICAgcmV0dXJuOwotICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5iYWNr
Z3JvdW5kQ29sb3IgPSB2YWx1ZTsKKyAgICBtX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xv
ciA9IHZhbHVlOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tncm91bmRDb2xvcih2YWx1ZSk7
Ci0gICAgbV9ub2RlLT5ub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkJhY2tncm91bmRD
b2xvckNoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpCYWNrZ3Jv
dW5kQ29sb3JDaGFuZ2UpOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKICovCiB2
b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpjbGVhckJhY2tncm91bmRDb2xvcigpCiB7
Ci0gICAgaWYgKCFtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQuYmFja2dyb3VuZENvbG9yLmlzVmFs
aWQoKSkKKyAgICBpZiAoIW1fcGVuZGluZ0NvbnRlbnQuYmFja2dyb3VuZENvbG9yLmlzVmFsaWQo
KSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5iYWNrZ3Jv
dW5kQ29sb3IgPSBDb2xvcigpOworICAgIG1fcGVuZGluZ0NvbnRlbnQuYmFja2dyb3VuZENvbG9y
ID0gQ29sb3IoKTsKICAgICBHcmFwaGljc0xheWVyOjpjbGVhckJhY2tncm91bmRDb2xvcigpOwot
ICAgIG1fbm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpCYWNrZ3JvdW5kQ29s
b3JDaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6QmFja2dyb3Vu
ZENvbG9yQ2hhbmdlKTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCkBAIC0xMzEy
LDcgKzI3NSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRz
T3BhcXVlKGJvb2wgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlID09IGNvbnRlbnRzT3BhcXVlKCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVy
Tm9kZTo6Q29udGVudHNPcGFxdWVDaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFw
cGVyTm9kZTo6Q29udGVudHNPcGFxdWVDaGFuZ2UpOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldENv
bnRlbnRzT3BhcXVlKHZhbHVlKTsKIH0KIApAQCAtMTMyMyw3ICsyODYsNyBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkoYm9vbCB2YWx1ZSkK
ICAgICBpZiAodmFsdWUgPT0gYmFja2ZhY2VWaXNpYmlsaXR5KCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBHcmFwaGljc0xheWVyOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkodmFsdWUpOwotICAgIG1f
bm9kZS0+bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpCYWNrZmFjZVZpc2liaWxpdHlD
aGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6QmFja2ZhY2VWaXNp
YmlsaXR5Q2hhbmdlKTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCkBAIC0xMzMz
LDcgKzI5Niw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE9wYWNpdHko
ZmxvYXQgdmFsdWUpCiAgICAgaWYgKHZhbHVlID09IG9wYWNpdHkoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkodmFsdWUpOwotICAgIG1fbm9kZS0+bm90
aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpPcGFjaXR5Q2hhbmdlKTsKKyAgICBub3RpZnlD
aGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6Ok9wYWNpdHlDaGFuZ2UpOwogfQogCiAvKiBccmVpbXAg
KEdyYXBoaWNzTGF5ZXIuaCkKQEAgLTEzNDMsMTYgKzMwNiwxNiBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgdmFsdWUpCiAg
ICAgaWYgKHZhbHVlID09IGNvbnRlbnRzUmVjdCgpKQogICAgICAgICByZXR1cm47CiAgICAgR3Jh
cGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KHZhbHVlKTsKLSAgICBtX25vZGUtPm5vdGlmeUNo
YW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudHNSZWN0Q2hhbmdlKTsKKyAgICBub3RpZnlD
aGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRzUmVjdENoYW5nZSk7CiB9CiAKIC8qIFxy
ZWltcCAoR3JhcGhpY3NMYXllci5oKQogKi8KIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiB7Ci0gICAgbV9ub2RlLT5ub3Rp
ZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRDaGFuZ2UpOwotICAgIG1fbm9kZS0+
bV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSA9IGltYWdlID8gVGV4dHVyZU1hcHBlck5vZGU6
OkRpcmVjdEltYWdlQ29udGVudFR5cGUgOiBUZXh0dXJlTWFwcGVyTm9kZTo6SFRNTENvbnRlbnRU
eXBlOwotICAgIG1fbm9kZS0+bV9wZW5kaW5nQ29udGVudC5pbWFnZSA9IGltYWdlOworICAgIG5v
dGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudENoYW5nZSk7CisgICAgbV9wZW5k
aW5nQ29udGVudC5jb250ZW50VHlwZSA9IGltYWdlID8gVGV4dHVyZU1hcHBlck5vZGU6OkRpcmVj
dEltYWdlQ29udGVudFR5cGUgOiBUZXh0dXJlTWFwcGVyTm9kZTo6SFRNTENvbnRlbnRUeXBlOwor
ICAgIG1fcGVuZGluZ0NvbnRlbnQuaW1hZ2UgPSBpbWFnZTsKICAgICBHcmFwaGljc0xheWVyOjpz
ZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UpOwogfQogCkBAIC0xMzYwLDkgKzMyMyw5IEBAIHZvaWQg
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1h
Z2UpCiAqLwogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNCYWNr
Z3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIG1fbm9kZS0+bm90aWZ5Q2hh
bmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50Q2hhbmdlKTsKLSAgICBtX25vZGUtPm1fcGVu
ZGluZ0NvbnRlbnQuY29udGVudFR5cGUgPSBUZXh0dXJlTWFwcGVyTm9kZTo6Q29sb3JDb250ZW50
VHlwZTsKLSAgICBtX25vZGUtPm1fcGVuZGluZ0NvbnRlbnQuYmFja2dyb3VuZENvbG9yID0gY29s
b3I7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50Q2hhbmdlKTsK
KyAgICBtX3BlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlID0gVGV4dHVyZU1hcHBlck5vZGU6OkNv
bG9yQ29udGVudFR5cGU7CisgICAgbV9wZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5kQ29sb3IgPSBj
b2xvcjsKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c0JhY2tncm91bmRDb2xvcihjb2xv
cik7CiB9CiAKQEAgLTEzNzAsMTIgKzMzMywxMiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyOjpzZXRDb250ZW50c0JhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB2
b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZv
cm1MYXllciogbWVkaWEpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb01lZGlh
KG1lZGlhKTsKLSAgICBtX25vZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29u
dGVudENoYW5nZSk7Ci0gICAgbV9ub2RlLT5tX3BlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlID0g
bWVkaWEgPyBUZXh0dXJlTWFwcGVyTm9kZTo6TWVkaWFDb250ZW50VHlwZSA6IFRleHR1cmVNYXBw
ZXJOb2RlOjpIVE1MQ29udGVudFR5cGU7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJO
b2RlOjpDb250ZW50Q2hhbmdlKTsKKyAgICBtX3BlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlID0g
bWVkaWEgPyBUZXh0dXJlTWFwcGVyTm9kZTo6TWVkaWFDb250ZW50VHlwZSA6IFRleHR1cmVNYXBw
ZXJOb2RlOjpIVE1MQ29udGVudFR5cGU7CiAgICAgaWYgKG1lZGlhKQotICAgICAgICBtX25vZGUt
Pm1fcGVuZGluZ0NvbnRlbnQubWVkaWEgPSBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyVmlkZW9M
YXllcio+KG1lZGlhKTsKKyAgICAgICAgbV9wZW5kaW5nQ29udGVudC5tZWRpYSA9IHN0YXRpY19j
YXN0PFRleHR1cmVNYXBwZXJWaWRlb0xheWVyKj4obWVkaWEpOwogICAgIGVsc2UKLSAgICAgICAg
bV9ub2RlLT5tX3BlbmRpbmdDb250ZW50Lm1lZGlhID0gMDsKKyAgICAgICAgbV9wZW5kaW5nQ29u
dGVudC5tZWRpYSA9IDA7CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQpAQCAtMTM4
NCw3ICszNDcsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50
c09yaWVudGF0aW9uKENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcgogewogICAgIGlmIChjb250ZW50
c09yaWVudGF0aW9uKCkgPT0gb3JpZW50YXRpb24pCiAgICAgICAgIHJldHVybjsKLSAgICBtX25v
ZGUtPm5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudHNPcmllbnRhdGlvbkNo
YW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50c09yaWVu
dGF0aW9uQ2hhbmdlKTsKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09yaWVudGF0aW9u
KG9yaWVudGF0aW9uKTsKIH0KIApAQCAtMTM5MiwxNyArMzU1LDE0IEBAIHZvaWQgR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzT3JpZW50YXRpb24oQ29tcG9zaXRpbmdDb29y
ZGluYXRlc09yCiAqLwogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c3luY0NvbXBv
c2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKIHsKLSAgICBtX25vZGUtPnN5bmNDb21wb3Np
dGluZ1N0YXRlKGZhbHNlKTsKLSAgICBtX25vZGUtPnBlcmZvcm1Qb3N0U3luY09wZXJhdGlvbnMo
KTsKKyAgICBtX25vZGUtPnN5bmNDb21wb3NpdGluZ1N0YXRlKHRoaXMsIGZhbHNlKTsKIH0KIAog
LyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCiAqLwogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcjo6c3luY0NvbXBvc2l0aW5nU3RhdGUoKQogewotICAgIEdyYXBoaWNzTGF5ZXI6OnN5
bmNDb21wb3NpdGluZ1N0YXRlKCk7Ci0gICAgbV9ub2RlLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSh0
cnVlKTsKLSAgICBtX25vZGUtPnBlcmZvcm1Qb3N0U3luY09wZXJhdGlvbnMoKTsKKyAgICBtX25v
ZGUtPnN5bmNDb21wb3NpdGluZ1N0YXRlKHRoaXMsIHRydWUpOwogfQogCiAvKiBccmVpbXAgKEdy
YXBoaWNzTGF5ZXIuaCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCmluZGV4IDM2ZWJkNzQuLjg1
ZmEzZWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaApAQCAtMjQsMTMgKzI0LDEyIEBACiAj
aW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDbGllbnQu
aCIKICNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJOb2RlLmgiCiAK
ICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAj
ZW5kaWYKIAotI2RlZmluZSBFTkFCTEVfVEVYTUFQX0FOSU1BVElPTiAwCi0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgVGV4dHVyZU1hcHBlck5vZGU7CkBAIC04NSwxMiArODQsMjQgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgTmF0aXZlTGF5ZXIgbmF0aXZlTGF5ZXIoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKIAotICAgIHZp
cnR1YWwgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJ
bnRTaXplJiAvKmJveFNpemUqLywgY29uc3QgQW5pbWF0aW9uKiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgLyprZXlmcmFtZXNOYW1lKi8sIGRvdWJsZSAvKnRp
bWVPZmZzZXQqLykgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0
aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgLypib3hTaXplKi8s
IGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgLyprZXlmcmFtZXNOYW1lKi8sIGRvdWJs
ZSAvKnRpbWVPZmZzZXQqLykgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZvaWQgbm90aWZ5Q2hh
bmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDaGFuZ2VNYXNrIGNoYW5nZU1hc2spOworICAgIGlubGlu
ZSBUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudERhdGEmIHBlbmRpbmdDb250ZW50KCkgeyByZXR1
cm4gbV9wZW5kaW5nQ29udGVudDsgfQorICAgIGlubGluZSBpbnQgY2hhbmdlTWFzaygpIGNvbnN0
IHsgcmV0dXJuIG1fY2hhbmdlTWFzazsgfQorICAgIHZvaWQgZGlkU3luY2hyb25pemUoKTsKIAog
cHJpdmF0ZToKICAgICBPd25QdHI8VGV4dHVyZU1hcHBlck5vZGU+IG1fbm9kZTsKKyAgICBib29s
IG1fc3luY1F1ZXVlZDsKKyAgICBpbnQgbV9jaGFuZ2VNYXNrOworICAgIFRleHR1cmVNYXBwZXJO
b2RlOjpDb250ZW50RGF0YSBtX3BlbmRpbmdDb250ZW50OwogfTsKIAoraW5saW5lIHN0YXRpYyBH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogdG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihH
cmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIqPihsYXllcik7Cit9CisKIH0KICNlbmRpZiAvLyBHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyLmgKaW5kZXggODk4OTljMC4uMjUwMTI1YiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaApAQCAtNTcsNiArNTcs
MTAgQEAgcHVibGljOgogICAgICAgICBtX2NvbnRlbnRTaXplID0gc2l6ZTsKICAgICB9CiAKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFjaygpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1bnBhY2soKSB7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgaXNQYWNrZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCiAg
ICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludChjb25zdCBJbnRS
ZWN0JiBkaXJ0eVJlY3QpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnQoKSA9IDA7CiAg
ICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogYmVnaW5QYWludE1lZGlhKCkKQEAg
LTcyLDYgKzc2LDkgQEAgcHVibGljOgogICAgIGlubGluZSBJbnRTaXplIGNvbnRlbnRTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9jb250ZW50U2l6ZTsgfQogICAgIGlubGluZSB2b2lkIHNldE9mZnNl
dChjb25zdCBJbnRQb2ludCYgbykgeyBtX29mZnNldCA9IG87IH0KICAgICBpbmxpbmUgSW50UG9p
bnQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKworcHJvdGVjdGVkOgorCiBw
cml2YXRlOgogICAgIGludCBtX2xvY2tDb3VudDsKICAgICBJbnRTaXplIG1fY29udGVudFNpemU7
CkBAIC04MSwxMSArODgsMTEgQEAgcHJpdmF0ZToKIAogLy8gQSAiY29udGV4dCIgY2xhc3MgdXNl
ZCB0byBlbmNhcHN1bGF0ZSBhY2NlbGVyYXRlZCB0ZXh0dXJlIG1hcHBpbmcgZnVuY3Rpb25zOiBp
LmUuIGRyYXdpbmcgYSB0ZXh0dXJlCiAvLyBvbnRvIHRoZSBzY3JlZW4gb3IgaW50byBhbm90aGVy
IHRleHR1cmUgd2l0aCBhIHNwZWNpZmllZCB0cmFuc2Zvcm0sIG9wYWNpdHkgYW5kIG1hc2suCi1j
bGFzcyBUZXh0dXJlTWFwcGVyIDogcHVibGljIFJlZkNvdW50ZWQ8VGV4dHVyZU1hcHBlcj4gewor
Y2xhc3MgVGV4dHVyZU1hcHBlciB7CiAgICAgZnJpZW5kIGNsYXNzIEJpdG1hcFRleHR1cmU7CiAK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyPiBjcmVhdGUoR3Jh
cGhpY3NDb250ZXh0Kik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gY3Jl
YXRlKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0ID0gMCk7CiAgICAgdmlydHVhbCB+
VGV4dHVyZU1hcHBlcigpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0
IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHRhcmdldCwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGZsb2F0
IG9wYWNpdHkgPSAxLjBmLCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSA9IDApID0g
MDsKQEAgLTEwMSw4ICsxMDgsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldENsaXAo
Y29uc3QgSW50UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9v
dCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3Jl
YXRlVGV4dHVyZSgpID0gMDsKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5cGUoKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFudXAoKSB7fQogCiAgICAgdm9pZCBzZXRJbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpIHsgbV9pbnRl
cnBvbGF0aW9uUXVhbGl0eSA9IHF1YWxpdHk7IH0KICAgICB2b2lkIHNldFRleHREcmF3aW5nTW9k
ZShpbnQgbW9kZSkgeyBtX3RleHREcmF3aW5nTW9kZSA9IG1vZGU7IH0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTA1MWY5Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3Bw
CkBAIC0wLDAgKzEsODc3IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJOb2RlLmgiCisK
KyNpbmNsdWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFRleHR1cmVNYXBwZXJDYWNoZSB7CitwdWJsaWM6CisgICAgdm9pZCBt
YXJrKEJpdG1hcFRleHR1cmUqIHRleHR1cmUpOworCisgICAgY2xhc3MgRW50cnkgeworICAgIHB1
YmxpYzoKKyAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmU7CisgICAgICAgIEVu
dHJ5KCkgOiBwcmV2aW91c0Nvc3QoMCkgeyB9CisgICAgICAgIGlubGluZSBpbnQgY29tcHV0ZUNv
c3QoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIXRleHR1cmUgfHwgIXRleHR1
cmUtPmlzVmFsaWQoKSB8fCB0ZXh0dXJlLT5pc1BhY2tlZCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgY29uc3QgSW50U2l6ZSB0ZXh0dXJlU2l6ZSA9IHRleHR1cmUt
PnNpemUoKTsKKyAgICAgICAgICAgIC8vIEFuIGltYWdlJ3MgY29zdCBpbiBieXRlcyBpcyB3aWR0
aCAqIGhlaWdodCAqIGJ5dGVzIHBlciBwaXhlbCAoNCkuCisgICAgICAgICAgICByZXR1cm4gdGV4
dHVyZVNpemUud2lkdGgoKSAqIHRleHR1cmVTaXplLmhlaWdodCgpICogNDsKKyAgICAgICAgfQor
ICAgICAgICBFbnRyeShCaXRtYXBUZXh0dXJlKiBuZXdUZXh0dXJlKQorICAgICAgICAgICAgOiB0
ZXh0dXJlKG5ld1RleHR1cmUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgRW50cnkmIG90aGVyKSBjb25zdCB7IHJldHVybiB0ZXh0dXJlID09IG90
aGVyLnRleHR1cmU7IH0KKyAgICAgICAgaW50IHByZXZpb3VzQ29zdDsKKyAgICB9OworCisgICAg
VGV4dHVyZU1hcHBlckNhY2hlKCkKKyAgICAgICAgOiBtX3RvdGFsQ29zdCgwKQorICAgIHsKKyAg
ICB9CisKKyAgICB2b2lkIHB1cmdlKCk7CisgICAgVmVjdG9yPEVudHJ5PiBtX2RhdGE7CisgICAg
aW50IG1fdG90YWxDb3N0OworI2lmbmRlZiBURVhNQVBfVEVYVFVSRV9DQUNIRV9LQlMKKyNkZWZp
bmUgVEVYTUFQX1RFWFRVUkVfQ0FDSEVfS0JTIDI0ICogMTAyNAorI2VuZGlmCisgICAgc3RhdGlj
IGNvbnN0IGludCBNYXhDb3N0ID0gVEVYTUFQX1RFWFRVUkVfQ0FDSEVfS0JTICogMTAyNDsKKyAg
ICBzdGF0aWMgY29uc3QgaW50IFB1cmdlQW1vdW50ID0gTWF4Q29zdCAvIDQ7Cit9OworCisKK3Zv
aWQgVGV4dHVyZU1hcHBlckNhY2hlOjpwdXJnZSgpCit7CisgICAgY29uc3QgaW50IHNpemUgPSBt
X2RhdGEuc2l6ZSgpOworCisgICAgaWYgKG1fdG90YWxDb3N0IDw9IFRleHR1cmVNYXBwZXJDYWNo
ZTo6TWF4Q29zdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRW5zdXJlIHRoYXQgd2UgaGF2
ZSB0aGUgcmlnaHQgY291bnQuIEl0IG1pZ2h0IGJlIGluYWNjdXJhdGUgaWYgY29udGVudCBjaGFu
Z2VkIHNpemUuCisgICAgLy8gV2Ugb25seSBkbyB0aGlzIHdoZW4gd2UncmUgYWN0dWFsbHkgcmVh
ZHkgdG8gcHVyZ2UuCisgICAgbV90b3RhbENvc3QgPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKQorICAgICAgICBtX3RvdGFsQ29zdCArPSBtX2RhdGFbaV0uY29tcHV0ZUNv
c3QoKTsKKworICAgIGZvciAoaW50IGkgPSBzaXplLTE7IGkgPj0gMCAmJiBtX3RvdGFsQ29zdCA+
IFRleHR1cmVNYXBwZXJDYWNoZTo6TWF4Q29zdCAtIFRleHR1cmVNYXBwZXJDYWNoZTo6UHVyZ2VB
bW91bnQ7IC0taSkgeworICAgICAgICBFbnRyeSYgZW50cnkgPSBtX2RhdGFbaV07CisgICAgICAg
IGlmIChlbnRyeS50ZXh0dXJlLT5pc0xvY2tlZCgpIHx8ICFlbnRyeS50ZXh0dXJlLT5pc1ZhbGlk
KCkgfHwgZW50cnkudGV4dHVyZS0+aXNQYWNrZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBtX3RvdGFsQ29zdCAtPSBlbnRyeS5wcmV2aW91c0Nvc3Q7CisgICAgICAgIGVudHJ5
LnRleHR1cmUtPnBhY2soKTsKKyAgICAgICAgbV9kYXRhLnJlbW92ZShpKTsKKyAgICB9Cit9CisK
K3ZvaWQgVGV4dHVyZU1hcHBlckNhY2hlOjptYXJrKEJpdG1hcFRleHR1cmUqIHRleHR1cmUpCit7
CisgICAgaWYgKCF0ZXh0dXJlIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIEVudHJ5IGVudHJ5KHRleHR1cmUpOworICAgIHNpemVfdCBpbmRleCA9IG1fZGF0
YS5maW5kKGVudHJ5KTsKKyAgICBpZiAoIWluZGV4KQorICAgICAgICByZXR1cm47CisKKyAgICBp
bnQgcHJldmlvdXNDb3N0ID0gMDsKKworICAgIGlmIChpbmRleCA8IG1fZGF0YS5zaXplKCkpIHsK
KyAgICAgICAgcHJldmlvdXNDb3N0ID0gbV9kYXRhW2luZGV4XS5wcmV2aW91c0Nvc3Q7CisgICAg
ICAgIG1fZGF0YS5yZW1vdmUoaW5kZXgpOworICAgIH0KKyAgICBjb25zdCBpbnQgY29zdCA9IGVu
dHJ5LmNvbXB1dGVDb3N0KCk7CisgICAgbV90b3RhbENvc3QgLT0gcHJldmlvdXNDb3N0OworICAg
IG1fdG90YWxDb3N0ICs9IChlbnRyeS5wcmV2aW91c0Nvc3QgPSBjb3N0KTsKKyAgICBtX2RhdGEu
cHJlcGVuZChlbnRyeSk7Cit9CisKK2NsYXNzIFRleHR1cmVNYXBwZXJDYWNoZUxvY2sgeworcHVi
bGljOgorICAgIFRleHR1cmVNYXBwZXJDYWNoZUxvY2soQml0bWFwVGV4dHVyZSogdGV4dHVyZSkg
OiBtX3RleHR1cmUodGV4dHVyZSkKKyAgICB7CisgICAgICAgIGlmIChtX3RleHR1cmUpCisgICAg
ICAgICAgICBtX3RleHR1cmUtPmxvY2soKTsKKyAgICB9CisgICAgflRleHR1cmVNYXBwZXJDYWNo
ZUxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgICAgIG1fdGV4
dHVyZS0+dW5sb2NrKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlZlB0cjxCaXRtYXBUZXh0
dXJlPiBtX3RleHR1cmU7Cit9OworCisKK1RleHR1cmVNYXBwZXJDYWNoZSogVGV4dHVyZU1hcHBl
ck5vZGU6OmNhY2hlKCkKK3sKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogcm9vdCA9IHJvb3RMYXll
cigpOworICAgIGlmICghcm9vdCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFyb290LT5t
X2NhY2hlKQorICAgICAgICByb290LT5tX2NhY2hlID0gbmV3IFRleHR1cmVNYXBwZXJDYWNoZTsK
KyAgICByZXR1cm4gcm9vdC0+bV9jYWNoZTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEludFJlY3QgcmVjdCkKK3sKKyAgICBpZiAobV9wbGF0Zm9y
bUNsaWVudCkgeworICAgICAgICBpZiAobV9zdGF0ZS5oYXNTdXJmYWNlRGVzY2VuZGFudHMpIHsK
KyAgICAgICAgICAgIG1fcGxhdGZvcm1DbGllbnQtPnNldE5lZWRzRGlzcGxheSgpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJlY3QuaW50ZXJzZWN0KEludFJlY3Qo
MCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICBpZiAocmVj
dC5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fcGxhdGZvcm1DbGll
bnQtPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmICghbV9wYXJlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGFyZW50LT5z
ZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6
OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAgaWYgKG1fZWZmZWN0VGFyZ2V0KQorICAgICAgICBt
X2VmZmVjdFRhcmdldC0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgaWYgKG1fdHJhbnNmb3Jtcy50
YXJnZXRCb3VuZGluZ1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1f
c3RhdGUuZHJhd3NDb250ZW50IHx8IG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgIT0gSFRN
TENvbnRlbnRUeXBlKQorICAgICAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3QobV90cmFuc2Zvcm1z
LnRhcmdldEJvdW5kaW5nUmVjdCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldFBs
YXRmb3JtTGF5ZXJDbGllbnQoVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50KiBjbGllbnQpCit7Cisg
ICAgbV9wbGF0Zm9ybUNsaWVudCA9IGNsaWVudDsKK30KKworaW50IFRleHR1cmVNYXBwZXJOb2Rl
Ojpjb21wYXJlR3JhcGhpY3NMYXllcnNaVmFsdWUoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCog
YikKK3sKKyAgICB0eXBlZGVmIGNvbnN0IFRleHR1cmVNYXBwZXJOb2RlKiBOb2RlUHRyOworICAg
IGNvbnN0IE5vZGVQdHIqIG5vZGVBID0gc3RhdGljX2Nhc3Q8Y29uc3QgTm9kZVB0cio+KGEpOwor
ICAgIGNvbnN0IE5vZGVQdHIqIG5vZGVCID0gc3RhdGljX2Nhc3Q8Y29uc3QgTm9kZVB0cio+KGIp
OworICAgIHJldHVybiBpbnQoKCgqbm9kZUEpLT5tX3RyYW5zZm9ybXMuY2VudGVyWiAtICgqbm9k
ZUIpLT5tX3RyYW5zZm9ybXMuY2VudGVyWikgKiAxMDAwKTsKK30KKwordm9pZCBUZXh0dXJlTWFw
cGVyTm9kZTo6c29ydEJ5Wk9yZGVyKFZlY3RvcjxUZXh0dXJlTWFwcGVyTm9kZSogPiYgYXJyYXks
IGludCBmaXJzdCwgaW50IGxhc3QpCit7CisgICAgcXNvcnQoYXJyYXkuZGF0YSgpLCBhcnJheS5z
aXplKCksIHNpemVvZihUZXh0dXJlTWFwcGVyTm9kZSopLCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29t
cGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKTsKK30KKworYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6
aGFzU3VyZmFjZURlc2NlbmRhbnRzKCkgY29uc3QKK3sKKyAgICBpZiAobV9sYXllclR5cGUgPT0g
Q2xpcExheWVyIHx8IG1fbGF5ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVyIHx8IG1fc3RhdGUu
cmVwbGljYUxheWVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNvbnN0IGludCBzaXpl
ID0gbV9jaGlsZHJlbi5zaXplKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKKyAgICAgICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiBjaGlsZCA9IG1fY2hpbGRyZW5baV0p
IHsKKyAgICAgICAgICAgIGlmIChjaGlsZC0+aGFzU3VyZmFjZURlc2NlbmRhbnRzKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitpbnQgVGV4dHVyZU1hcHBlck5vZGU6OmNvdW50RGVzY2VuZGFudHNXaXRoQ29u
dGVudCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3N0YXRlLnZpc2libGUgfHwgbV9zdGF0ZS5vcGFj
aXR5IDwgMC4wMDEpCisgICAgICAgIHJldHVybiAwOworCisgICAgaW50IGRlc2NlbmRhbnRzV2l0
aENvbnRlbnQgPSAobV9zdGF0ZS5kcmF3c0NvbnRlbnQgfHwgbV9jdXJyZW50Q29udGVudC5jb250
ZW50VHlwZSAhPSBIVE1MQ29udGVudFR5cGUpID8gMSA6IDA7CisKKyAgICBjb25zdCBpbnQgc2l6
ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7CisgICAgICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSogY2hpbGQgPSBtX2NoaWxkcmVuW2ld
KQorICAgICAgICAgICAgZGVzY2VuZGFudHNXaXRoQ29udGVudCArPSBjaGlsZC0+Y291bnREZXNj
ZW5kYW50c1dpdGhDb250ZW50KCk7CisgICAgfQorCisgICAgcmV0dXJuIGRlc2NlbmRhbnRzV2l0
aENvbnRlbnQ7Cit9CisKK1RleHR1cmVNYXBwZXJOb2RlKiBUZXh0dXJlTWFwcGVyTm9kZTo6dG9U
ZXh0dXJlTWFwcGVyTm9kZShHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICByZXR1cm4gbGF5
ZXIgPyBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyTm9kZSo+KGxheWVyLT5wbGF0Zm9ybUxheWVy
KCkpIDogMDsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZUxheWVyVHlwZSgp
Cit7CisgICAgY29uc3QgYm9vbCBzZWxmSGFzQ29udGVudCA9IG1fc3RhdGUuZHJhd3NDb250ZW50
IHx8IChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlICE9IEhUTUxDb250ZW50VHlwZSk7Cisg
ICAgY29uc3QgYm9vbCBoYXNEZXNjZW5kYW50c1dpdGhDb250ZW50ID0gbV9zdGF0ZS5kZXNjZW5k
YW50c1dpdGhDb250ZW50IC0gKHNlbGZIYXNDb250ZW50ID8gMSA6IDApOworICAgIGNvbnN0IGJv
b2wgaGFzVHJhbnNwYXJlbmN5ID0gbV9zdGF0ZS5vcGFjaXR5IDwgMC45OSB8fCBtX3N0YXRlLm1h
c2tMYXllcjsKKyAgICBjb25zdCBib29sIGhhc1JlcGxpY2EgPSBtX3N0YXRlLnJlcGxpY2FMYXll
cjsKKworICAgIC8vICBEZWZhdWx0TGF5ZXI6IGRyYXdzIGl0c2VsZiBhbmQgaXRzIGNoaWxkcmVu
IGRpcmVjdGx5IHRvIHRoZSBjdXJyZW50IGZyYW1lYnVmZmVyLgorICAgIC8vICAgICAgICAgICAg
ICAgIGFueSBsYXllciB0aGF0IGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgb3RoZXIgcnVsZXMgaXMg
YSBEZWZhdWx0TGF5ZXIuCisgICAgbV9sYXllclR5cGUgPSBEZWZhdWx0TGF5ZXI7CisKKyAgICAv
LyAgUm9vdExheWVyOiB0aGUgdG9wIGxldmVsLiBEcmF3cyB0byBhIGZyYW1lYnVmZmVyLCBhbmQg
dGhlIHRhcmdldCB0ZXh0dXJlIGRyYXdzIGludG8gdGhlIHZpZXdwb3J0LgorICAgIC8vICAgICAg
ICAgICAgb25seSBvbmUgbGF5ZXIgaXMgdGhlIHJvb3QgbGF5ZXIuCisgICAgaWYgKCFtX3BhcmVu
dCAmJiAhbV9lZmZlY3RUYXJnZXQpIHsKKyAgICAgICAgbV9sYXllclR5cGUgPSBSb290TGF5ZXI7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBIGxheWVyIHdpdGggbm8gY29udGVu
dHMgaXMgYWx3YXlzIGEgZGVmYXVsdCBsYXllci4KKyAgICBpZiAoIW1fc3RhdGUuZGVzY2VuZGFu
dHNXaXRoQ29udGVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gIENsaXBMYXllcjogY3Jl
YXRlcyBhIG5ldyBmcmFtZWJ1ZmZlciwgdGhlIHNpemUgb2YgdGhlIGxheWVyLCBhbmQgdGhlbiBw
YWludHMgaXQgdG8gdGhlIGVuY2xvc2luZyBCaXRtYXBUZXh0dXJlIHdpdGggdGhlIGxheWVyJ3Mg
dHJhbnNmb3JtL29wYWNpdHkuCisgICAgLy8gICAgICAgICAgICAgIEEgY2xpcCBsYXllciBpcyBh
IGxheWVyIHRoYXQgbWFza3MgdG8gYm91bmRzLCBkb2Vzbid0IHByZXNlcnZlIDNELCBoYXMgY2hp
bGRyZW4sIGFuZCBoYXMgYSB0cmFuc3BhcmVuY3kvbWFzayBvciBhIG5vbi1yZWN0YW5ndWxhciB0
cmFuc2Zvcm0uCisgICAgaWYgKGhhc0Rlc2NlbmRhbnRzV2l0aENvbnRlbnQgJiYgbV9zdGF0ZS5t
YXNrTGF5ZXIpIHsKKyAgICAgICAgbV9sYXllclR5cGUgPSBDbGlwTGF5ZXI7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyAgU2Npc3NvckxheWVyOiBkcmF3cyB0byB0aGUgY3VycmVu
dCBmcmFtZWJ1ZmZlciwgYW5kIGFwcGxpZXMgYW4gZXh0cmEgc2Npc3NvciBiZWZvcmUgZHJhd2lu
ZyBpdHMgY2hpbGRyZW4uCisgICAgLy8gICAgICAgICAgICAgICAgQSBzY2lzc29yIGxheWVyIGlz
IGEgbGF5ZXIgd2l0aCBjaGlsZHJlbiB0aGF0IG1hc2tzIHRvIGJvdW5kcywgaXMgbm90IGEgdHJh
bnNwYXJlbmN5IGxheWVyLCBhbmQgaGFzIGEgcmVjdGFuZ3VsYXIgY2xpcC4KKyAgICBpZiAobV9z
dGF0ZS5tYXNrc1RvQm91bmRzICYmIGhhc0Rlc2NlbmRhbnRzV2l0aENvbnRlbnQpIHsKKyAgICAg
ICAgaWYgKGhhc1RyYW5zcGFyZW5jeSB8fCAhbV9zdGF0ZS50cmFuc2Zvcm0uaXNJZGVudGl0eU9y
VHJhbnNsYXRpb24oKSB8fCBtX3BhcmVudC0+bV9zdGF0ZS5wcmVzZXJ2ZXMzRCkKKyAgICAgICAg
ICAgIG1fbGF5ZXJUeXBlID0gQ2xpcExheWVyOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
X2xheWVyVHlwZSA9IFNjaXNzb3JMYXllcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vICBUcmFuc3BhcmVuY3lMYXllcjogY3JlYXRlcyBhIG5ldyBmcmFtZWJ1ZmZlciBpZGV0aWNh
bCBpbiBzaXplIHRvIHRoZSBjdXJyZW50IGZyYW1lYnVmZmVyLiBUaGVuIGRyYXdzIHRoZSBmYidz
IHRleHR1cmUgdG8gdGhlIGN1cnJlbnQgZnJhbWVidWZmZXIgd2l0aCBpZGVudGl0eSB0cmFuc2Zv
cm0uCisgICAgLy8gICAgICAgICAgICAgICAgICAgICBVc2VkIGZvciBsYXllcnMgd2l0aCBjaGls
ZHJlbiBhbmQgdHJhbnNwYXJlbmN5L21hc2sgdGhhdCBwcmVzZXJ2ZSAzRCBvciBkb24ndCBtYXNr
IHRvIGJvdW5kcy4KKyAgICBpZiAoKGhhc1JlcGxpY2EgJiYgaGFzRGVzY2VuZGFudHNXaXRoQ29u
dGVudCkgfHwgKGhhc1JlcGxpY2EgJiYgaGFzVHJhbnNwYXJlbmN5KSB8fCAoaGFzVHJhbnNwYXJl
bmN5ICYmIG1fc3RhdGUuZGVzY2VuZGFudHNXaXRoQ29udGVudCA+IDEpKQorICAgICAgICBtX2xh
eWVyVHlwZSA9IFRyYW5zcGFyZW5jeUxheWVyOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2Rl
Ojppbml0aWFsaXplVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQor
eworICAgIGlmIChtX3RleHR1cmUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3N1cmZhY2UgPSB0
ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CisgICAgbV9yZXBsaWNhU3VyZmFjZSA9IHRl
eHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICBtX3RleHR1cmUgPSB0ZXh0dXJlTWFw
cGVyLT5jcmVhdGVUZXh0dXJlKCk7CisgICAgY2FjaGUoKS0+bWFyayhtX3RleHR1cmUuZ2V0KCkp
OworfQorCitUZXh0dXJlTWFwcGVyTm9kZTo6VGV4dHVyZU1hcHBlck5vZGUoKQorICAgIDogbV9s
YXllclR5cGUoRGVmYXVsdExheWVyKQorICAgICwgbV9zdXJmYWNlKDApCisgICAgLCBtX3BhcmVu
dCgwKQorICAgICwgbV9lZmZlY3RUYXJnZXQoMCkKKyAgICAsIG1fcGxhdGZvcm1DbGllbnQoMCkK
KyAgICAsIG1fY2FjaGUoMCkKK3sKK30KKworVGV4dHVyZU1hcHBlck5vZGUqIFRleHR1cmVNYXBw
ZXJOb2RlOjpyb290TGF5ZXIoKQoreworICAgIGlmIChtX2VmZmVjdFRhcmdldCkKKyAgICAgICAg
cmV0dXJuIG1fZWZmZWN0VGFyZ2V0LT5yb290TGF5ZXIoKTsKKyAgICBpZiAobV9wYXJlbnQpCisg
ICAgICAgIHJldHVybiBtX3BhcmVudC0+cm9vdExheWVyKCk7CisgICAgcmV0dXJuIHRoaXM7Cit9
CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmludmFsaWRhdGVUcmFuc2Zvcm0oKQoreworICAg
IG1fdHJhbnNmb3Jtcy5kaXJ0eSA9IHRydWU7CisgICAgaWYgKG1fbGF5ZXJUeXBlICE9IENsaXBM
YXllcikKKyAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IHRydWU7CisgICAgaWYgKG1fc3RhdGUucmVw
bGljYUxheWVyKQorICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+aW52YWxpZGF0ZVRyYW5z
Zm9ybSgpOworICAgIGNvbnN0IGludCBzaXplID0gbV9jaGlsZHJlbi5zaXplKCk7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgaWYgKFRleHR1cmVNYXBwZXJO
b2RlKiBsYXllciA9IG1fY2hpbGRyZW5baV0pCisgICAgICAgICAgICBsYXllci0+aW52YWxpZGF0
ZVRyYW5zZm9ybSgpOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0
ZUxvY2FsVHJhbnNmb3JtKCkKK3sKKyAgICBpZiAoIW1fdHJhbnNmb3Jtcy5sb2NhbERpcnR5KQor
ICAgICAgICByZXR1cm47CisgICAgY29uc3QgZmxvYXQgb3JpZ2luWCA9IG1fc3RhdGUuYW5jaG9y
UG9pbnQueCgpICogbV9zaXplLndpZHRoKCk7CisgICAgY29uc3QgZmxvYXQgb3JpZ2luWSA9IG1f
c3RhdGUuYW5jaG9yUG9pbnQueSgpICogbV9zaXplLmhlaWdodCgpOworICAgIG1fdHJhbnNmb3Jt
cy5sb2NhbCA9CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KCkKKyAgICAgICAgLnRyYW5z
bGF0ZTNkKG9yaWdpblggKyBtX3N0YXRlLnBvcy54KCksIG9yaWdpblkgKyBtX3N0YXRlLnBvcy55
KCksIG1fc3RhdGUuYW5jaG9yUG9pbnQueigpKQorICAgICAgICAubXVsdExlZnQobV9zdGF0ZS50
cmFuc2Zvcm0pCisgICAgICAgIC50cmFuc2xhdGUzZCgtb3JpZ2luWCwgLW9yaWdpblksIC1tX3N0
YXRlLmFuY2hvclBvaW50LnooKSk7CisgICAgbV90cmFuc2Zvcm1zLmxvY2FsRGlydHkgPSBmYWxz
ZTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6ZmxhdHRlblRvMkRTcGFjZUlmTmVjZXNz
YXJ5KCkKK3sKKyAgICBpZiAobV9zdGF0ZS5wcmVzZXJ2ZXMzRCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE0xMygwKTsKKyAgICBtX3RyYW5z
Zm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTIzKDApOworICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNj
ZW5kYW50cy5zZXRNMzEoMCk7CisgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE0z
MigwKTsKKyAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTMzKDEpOworICAgIG1f
dHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNMzQoMCk7CisgICAgbV90cmFuc2Zvcm1zLmZv
ckRlc2NlbmRhbnRzLnNldE00MygwKTsKK30KKworSW50U2l6ZSBUZXh0dXJlTWFwcGVyTm9kZTo6
bmVhcmVzdFN1cmZhY2VTaXplKCkgY29uc3QKK3sKKyAgICBpZiAobV9sYXllclR5cGUgPT0gQ2xp
cExheWVyIHx8IG1fbGF5ZXJUeXBlID09IFJvb3RMYXllcikKKyAgICAgICAgcmV0dXJuIG1fc3Vy
ZmFjZSAmJiAhbV9zdXJmYWNlLT5zaXplKCkuaXNFbXB0eSgpID8gbV9zdXJmYWNlLT5zaXplKCkg
OiBtX3NpemU7CisgICAgcmV0dXJuIG1fcGFyZW50LT5uZWFyZXN0U3VyZmFjZVNpemUoKTsKK30K
Kwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVJlcGxpY2FUcmFuc2Zvcm0oKQorewor
ICAgIGlmICghbV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
bmVhcmVzdFN1cmZhY2VTaXplID0gbmVhcmVzdFN1cmZhY2VTaXplKCk7CisKKyAgICBpZiAobV9s
YXllclR5cGUgIT0gVHJhbnNwYXJlbmN5TGF5ZXIpIHsKKyAgICAgICAgbV90cmFuc2Zvcm1zLnJl
cGxpY2EgPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtX3RyYW5zZm9ybXMudGFyZ2V0KS5tdWx0TGVm
dChtX3N0YXRlLnJlcGxpY2FMYXllci0+bV90cmFuc2Zvcm1zLmxvY2FsKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGNvbnN0IGZsb2F0IG9yaWdpblggPSBtX3RyYW5zZm9ybXMudGFy
Z2V0Lm00MSgpOworICAgIGNvbnN0IGZsb2F0IG9yaWdpblkgPSBtX3RyYW5zZm9ybXMudGFyZ2V0
Lm00MigpOworICAgIG1fdHJhbnNmb3Jtcy5yZXBsaWNhID0KKyAgICAgICAgICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4KCkKKyAgICAgICAgICAgICAgICAudHJhbnNsYXRlKG9yaWdpblgsIG9yaWdp
blkpCisgICAgICAgICAgICAgICAgLm11bHRMZWZ0KG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3Ry
YW5zZm9ybXMubG9jYWwpCisgICAgICAgICAgICAgICAgLnRyYW5zbGF0ZSgtb3JpZ2luWCwgLW9y
aWdpblkpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlVHJhbnNmb3JtYXRp
b25zKCkKK3sKKyAgICBpZiAoIW1fdHJhbnNmb3Jtcy5kaXJ0eSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV90cmFuc2Zvcm1zLmRpcnR5ID0gZmFsc2U7CisgICAgaWYgKChtX3NpemUuaXNFbXB0
eSgpICYmIG1fc3RhdGUubWFza3NUb0JvdW5kcykpCisgICAgICAgIHJldHVybjsKKworICAgIFRl
eHR1cmVNYXBwZXJOb2RlKiBwYXJlbnQgPSBtX3BhcmVudDsKKyAgICBjb21wdXRlTG9jYWxUcmFu
c2Zvcm0oKTsKKworICAgIG1fdHJhbnNmb3Jtcy50YXJnZXQgPSBUcmFuc2Zvcm1hdGlvbk1hdHJp
eChwYXJlbnQgPyBwYXJlbnQtPm1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cyA6IFRyYW5zZm9y
bWF0aW9uTWF0cml4KCkpLm11bHRMZWZ0KG1fdHJhbnNmb3Jtcy5sb2NhbCk7CisgICAgbV90cmFu
c2Zvcm1zLmZvckRlc2NlbmRhbnRzID0gKG1fbGF5ZXJUeXBlID09IENsaXBMYXllciA/IFRyYW5z
Zm9ybWF0aW9uTWF0cml4KCkgOiBtX3RyYW5zZm9ybXMudGFyZ2V0KTsKKworICAgIGlmIChtX2Vm
ZmVjdFRhcmdldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90cmFuc2Zvcm1zLnRhcmdldEJv
dW5kaW5nUmVjdCA9IEludFJlY3QobV90cmFuc2Zvcm1zLnRhcmdldC5tYXBSZWN0KGVudGlyZVJl
Y3QoKSkpOworICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllcikKKyAgICAgICAgbV9zdGF0ZS5y
ZXBsaWNhTGF5ZXItPmNvbXB1dGVUcmFuc2Zvcm1hdGlvbnMoKTsKKworICAgIGZsYXR0ZW5UbzJE
U3BhY2VJZk5lY2Vzc2FyeSgpOworCisgICAgaWYgKCFtX3N0YXRlLmJhY2tmYWNlVmlzaWJpbGl0
eSAmJiBtX3RyYW5zZm9ybXMudGFyZ2V0LmludmVyc2UoKS5tMzMoKSA8IDApIHsKKyAgICAgICAg
bV9zdGF0ZS52aXNpYmxlID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9z
dGF0ZS52aXNpYmxlID0gdHJ1ZTsKKworICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5tX3N0YXRl
LnByZXNlcnZlczNEKQorICAgICAgICBtX3RyYW5zZm9ybXMuY2VudGVyWiA9IG1fdHJhbnNmb3Jt
cy50YXJnZXQubWFwUG9pbnQoRmxvYXRQb2ludDNEKG1fc2l6ZS53aWR0aCgpIC8gMiwgbV9zaXpl
LmhlaWdodCgpIC8gMiwgMCkpLnooKTsKKworICAgIGlmICghbV9jaGlsZHJlbi5zaXplKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3N0YXRlLmNoaWxkcmVuVHJhbnNmb3JtLmlzSWRl
bnRpdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgRmxvYXRQb2ludCBjZW50ZXJQ
b2ludCA9IEZsb2F0UG9pbnQobV9zaXplLndpZHRoKCkgLyAyLCBtX3NpemUuaGVpZ2h0KCkgLyAy
KTsKKyAgICBpZiAobV90cmFuc2Zvcm1zLnBlcnNwZWN0aXZlRGlydHkpCisgICAgICAgIG1fdHJh
bnNmb3Jtcy5wZXJzcGVjdGl2ZSA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkKKyAgICAgICAgICAg
IC50cmFuc2xhdGUoY2VudGVyUG9pbnQueCgpLCBjZW50ZXJQb2ludC55KCkpCisgICAgICAgICAg
ICAubXVsdExlZnQobV9zdGF0ZS5jaGlsZHJlblRyYW5zZm9ybSkKKyAgICAgICAgICAgIC50cmFu
c2xhdGUoLWNlbnRlclBvaW50LngoKSwgLWNlbnRlclBvaW50LnkoKSk7CisgICAgbV90cmFuc2Zv
cm1zLnBlcnNwZWN0aXZlRGlydHkgPSBmYWxzZTsKKyAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2Vu
ZGFudHMubXVsdExlZnQobV90cmFuc2Zvcm1zLnBlcnNwZWN0aXZlKTsKK30KKwordm9pZCBUZXh0
dXJlTWFwcGVyTm9kZTo6dXBsb2FkVGV4dHVyZUZyb21Db250ZW50KFRleHR1cmVNYXBwZXIqIHRl
eHR1cmVNYXBwZXIsIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBHcmFwaGljc0xheWVyKiBs
YXllcikKK3sKKyAgICBpZiAobV9zaXplLmlzRW1wdHkoKSB8fCAhbGF5ZXIpIHsKKyAgICAgICAg
bV90ZXh0dXJlLT5kZXN0cm95KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
bV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlKSB7
CisgICAgICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmltYWdlKQorICAgICAgICAgICAgbV90ZXh0
dXJlLT5zZXRDb250ZW50c1RvSW1hZ2UobV9jdXJyZW50Q29udGVudC5pbWFnZS5nZXQoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50
VHlwZSA9PSBNZWRpYUNvbnRlbnRUeXBlKSB7CisgICAgICAgIGlmICghbV9jdXJyZW50Q29udGVu
dC5tZWRpYSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV90ZXh0dXJlLT5yZXNldCht
X3NpemUsIHRydWUpOworICAgICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1D
b250ZXh0ID0gbV90ZXh0dXJlLT5iZWdpblBhaW50TWVkaWEoKTsKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0IGNvbnRleHQocGxhdGZvcm1Db250ZXh0KTsKKyAgICAgICAgbV9jdXJyZW50Q29udGVu
dC5tZWRpYS0+cGFpbnQoJmNvbnRleHQpOworICAgICAgICBtX3RleHR1cmUtPmVuZFBhaW50KCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBib29sIG5lZWRzUmVzZXQgPSAo
bV90ZXh0dXJlLT5jb250ZW50U2l6ZSgpICE9IG1fc2l6ZSkgfHwgIW1fdGV4dHVyZS0+aXNWYWxp
ZCgpOworICAgIGlmICgobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSAhPSBIVE1MQ29udGVu
dFR5cGUpCisgICAgICAgIHx8ICghbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgJiYgbV9j
dXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0LmlzRW1wdHkoKSAmJiAhbmVlZHNSZXNldCkp
CisgICAgICAgIHJldHVybjsKKworICAgIEludFJlY3QgZGlydHlSZWN0ID0gSW50UmVjdCgwLCAw
LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICBpZiAoIW5lZWRzUmVzZXQg
JiYgIW1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5KQorICAgICAgICBkaXJ0eVJlY3QuaW50
ZXJzZWN0KG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCk7CisKKyAgICBpZiAobmVl
ZHNSZXNldCkKKyAgICAgICAgbV90ZXh0dXJlLT5yZXNldChtX3NpemUsIG1fc3RhdGUuY29udGVu
dHNPcGFxdWUpOworCisgICAgeworICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChtX3Rl
eHR1cmUtPmJlZ2luUGFpbnQoZGlydHlSZWN0KSk7CisgICAgICAgIGlmICh0ZXh0dXJlTWFwcGVy
KSB7CisgICAgICAgICAgICBjb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkodGV4
dHVyZU1hcHBlci0+aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICAgICAgICAgIGNv
bnRleHQuc2V0VGV4dERyYXdpbmdNb2RlKHRleHR1cmVNYXBwZXItPnRleHREcmF3aW5nTW9kZSgp
KTsKKyAgICAgICAgfQorICAgICAgICBsYXllci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMo
Y29udGV4dCwgZGlydHlSZWN0KTsKKyAgICB9CisgICAgbV90ZXh0dXJlLT5lbmRQYWludCgpOwor
ICAgIG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5ID0gZmFsc2U7Cit9CisKKwordm9pZCBU
ZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnQoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29u
c3QgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6UGFpbnRPcHRpb25zJiBvcHRpb25zKQorewor
ICAgIEFTU0VSVChtX2xheWVyVHlwZSA9PSBSb290TGF5ZXIpOworICAgIGlmIChtX3NpemUuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBUZXhtYXBQYWludE9wdGlvbnMgb3B0Owor
ICAgIG9wdC5vcGFjaXR5ID0gMTsKKyAgICBvcHQucm9vdExheWVyID0gdGhpczsKKyAgICBvcHQu
c2Npc3NvclJlY3QgPSBvcHRpb25zLnRhcmdldFJlY3Q7CisgICAgb3B0LnZpc2libGVSZWN0ID0g
b3B0aW9ucy52aXNpYmxlUmVjdDsKKyAgICBvcHQudGV4dHVyZU1hcHBlciA9IHRleHR1cmVNYXBw
ZXI7CisgICAgb3B0LnN1cmZhY2UgPSAwOworICAgIG9wdC5jYWNoZSA9IG1fY2FjaGU7CisgICAg
cGFpbnRSZWN1cnNpdmUob3B0KTsKKworICAgIGlmICh0ZXh0dXJlTWFwcGVyLT5hbGxvd1N1cmZh
Y2VGb3JSb290KCkgfHwgbV9zdGF0ZS5oYXNTdXJmYWNlRGVzY2VuZGFudHMpIHsKKyAgICAgICAg
dGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UoMCk7CisgICAgICAgIHRleHR1cmVNYXBwZXItPnBh
aW50VG9UYXJnZXQoKm1fc3VyZmFjZS5nZXQoKSwgb3B0aW9ucy52aWV3cG9ydFNpemUsIG9wdGlv
bnMudHJhbnNmb3JtLCBvcHRpb25zLm9wYWNpdHkgKiBtX3N0YXRlLm9wYWNpdHksIG9wdGlvbnMu
dGFyZ2V0UmVjdCk7CisgICAgfQorICAgIG1fY2FjaGUtPnB1cmdlKCk7Cit9CisKK3ZvaWQgVGV4
dHVyZU1hcHBlck5vZGU6OnBhaW50U2VsZihjb25zdCBUZXhtYXBQYWludE9wdGlvbnMmIG9wdGlv
bnMpCit7CisgICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkgfHwgKCFtX3N0YXRlLmRyYXdzQ29udGVu
dCAmJiBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiByZXBsaWNhTWFza1Rl
eHR1cmU7CisgICAgbV90ZXh0dXJlLT51bnBhY2soKTsKKworICAgIFJlZlB0cjxCaXRtYXBUZXh0
dXJlPiBtYXNrVGV4dHVyZSA9IG1fc3RhdGUubWFza0xheWVyID8gbV9zdGF0ZS5tYXNrTGF5ZXIt
Pm1fdGV4dHVyZSA6IDA7CisgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyICYmIG1fc3RhdGUu
cmVwbGljYUxheWVyLT5tX3N0YXRlLm1hc2tMYXllcikKKyAgICAgICAgcmVwbGljYU1hc2tUZXh0
dXJlID0gbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUubWFza0xheWVyLT5tX3RleHR1cmU7
CisKKyAgICBpZiAobWFza1RleHR1cmUpCisgICAgICAgIG1hc2tUZXh0dXJlLT51bnBhY2soKTsK
KworICAgIGlmIChyZXBsaWNhTWFza1RleHR1cmUpCisgICAgICAgIHJlcGxpY2FNYXNrVGV4dHVy
ZS0+dW5wYWNrKCk7CisKKyAgICBjb25zdCBmbG9hdCBvcGFjaXR5ID0gb3B0aW9ucy5pc1N1cmZh
Y2UgPyAxIDogb3B0aW9ucy5vcGFjaXR5OworCisgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVy
ICYmICFvcHRpb25zLmlzU3VyZmFjZSkKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5k
cmF3VGV4dHVyZSgqbV90ZXh0dXJlLmdldCgpLCByZXBsaWNhUmVjdCgpLCBtX3RyYW5zZm9ybXMu
cmVwbGljYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5ICogbV9zdGF0ZS5yZXBs
aWNhTGF5ZXItPm1fc3RhdGUub3BhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXBs
aWNhTWFza1RleHR1cmUgPyByZXBsaWNhTWFza1RleHR1cmUuZ2V0KCkgOiBtYXNrVGV4dHVyZS5n
ZXQoKSk7CisKKyAgICBjb25zdCBJbnRSZWN0IHJlY3QgPSBtX2xheWVyVHlwZSA9PSBDbGlwTGF5
ZXIgPyBlbnRpcmVSZWN0KCkgOiB0YXJnZXRSZWN0KCk7CisgICAgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXggdHJhbnNmb3JtID0gbV9sYXllclR5cGUgPT0gQ2xpcExheWVyID8gVHJhbnNmb3Jt
YXRpb25NYXRyaXgoKSA6IG1fdHJhbnNmb3Jtcy50YXJnZXQ7CisgICAgb3B0aW9ucy50ZXh0dXJl
TWFwcGVyLT5kcmF3VGV4dHVyZSgqbV90ZXh0dXJlLmdldCgpLCByZWN0LCB0cmFuc2Zvcm0sIG9w
YWNpdHksIG9wdGlvbnMuaXNTdXJmYWNlID8gMCA6IG1hc2tUZXh0dXJlLmdldCgpKTsKKyAgICBv
cHRpb25zLmNhY2hlLT5tYXJrKG1fdGV4dHVyZS5nZXQoKSk7Cit9CisKK2Jvb2wgVGV4dHVyZU1h
cHBlck5vZGU6OnBhaW50UmVwbGljYShjb25zdCBUZXhtYXBQYWludE9wdGlvbnMmIG9wdGlvbnMp
Cit7CisgICAgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSA9ICptX3N1cmZhY2UuZ2V0KCk7CisgICAg
VGV4dHVyZU1hcHBlck5vZGUqIHJlcGxpY2EgPSBtX3N0YXRlLnJlcGxpY2FMYXllcjsKKyAgICBS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4gbWFza1RleHR1cmU7CisgICAgaWYgKFRleHR1cmVNYXBwZXJO
b2RlKiBtYXNrID0gbV9zdGF0ZS5tYXNrTGF5ZXIpCisgICAgICAgIG1hc2tUZXh0dXJlID0gbWFz
ay0+bV90ZXh0dXJlOworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiByZXBsaWNhTWFza1RleHR1
cmU7CisgICAgaWYgKCFyZXBsaWNhKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
cmVwbGljYSAmJiByZXBsaWNhLT5tX3N0YXRlLm1hc2tMYXllcikKKyAgICAgICAgcmVwbGljYU1h
c2tUZXh0dXJlID0gcmVwbGljYS0+bV9zdGF0ZS5tYXNrTGF5ZXItPm1fdGV4dHVyZTsKKworICAg
IGlmIChyZXBsaWNhTWFza1RleHR1cmUpCisgICAgICAgIHJlcGxpY2FNYXNrVGV4dHVyZS0+dW5w
YWNrKCk7CisgICAgQVNTRVJUKG1fcmVwbGljYVN1cmZhY2UpOworICAgIG1fcmVwbGljYVN1cmZh
Y2UtPnJlc2V0KG9wdGlvbnMuc3VyZmFjZS0+c2l6ZSgpKTsKKyAgICBtX3JlcGxpY2FTdXJmYWNl
LT5zZXRPZmZzZXQob3B0aW9ucy5zdXJmYWNlLT5vZmZzZXQoKSk7CisgICAgb3B0aW9ucy5jYWNo
ZS0+bWFyayhtX3JlcGxpY2FTdXJmYWNlLmdldCgpKTsKKyAgICBvcHRpb25zLnRleHR1cmVNYXBw
ZXItPmJpbmRTdXJmYWNlKG1fcmVwbGljYVN1cmZhY2UuZ2V0KCkpOworICAgIG9wdGlvbnMudGV4
dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUodGV4dHVyZSwgcmVwbGljYVJlY3QoKSwgbV90cmFuc2Zv
cm1zLnJlcGxpY2EsIHJlcGxpY2EtPm1fc3RhdGUub3BhY2l0eSwgcmVwbGljYU1hc2tUZXh0dXJl
ID8gcmVwbGljYU1hc2tUZXh0dXJlLmdldCgpIDogbWFza1RleHR1cmUuZ2V0KCkpOworICAgIG9w
dGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUodGV4dHVyZSwgSW50UmVjdChJbnRQb2lu
dCgwLCAwKSwgb3B0aW9ucy5zdXJmYWNlLT5zaXplKCkpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
LCAxLjBmLCBtYXNrVGV4dHVyZS5nZXQoKSk7CisgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5i
aW5kU3VyZmFjZShvcHRpb25zLnN1cmZhY2UpOworICAgIG9wdGlvbnMuY2FjaGUtPm1hcmsob3B0
aW9ucy5zdXJmYWNlKTsKKyAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCpt
X3JlcGxpY2FTdXJmYWNlLmdldCgpLCBJbnRSZWN0KEludFBvaW50KDAsIDApLCBvcHRpb25zLnN1
cmZhY2UtPnNpemUoKSksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIG9wdGlvbnMub3BhY2l0eSwg
MCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50
U3VyZmFjZShjb25zdCBUZXhtYXBQYWludE9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgaWYgKG1f
bGF5ZXJUeXBlID09IFJvb3RMYXllciB8fCBtX2xheWVyVHlwZSA9PSBEZWZhdWx0TGF5ZXIgfHwg
bV9sYXllclR5cGUgPT0gU2Npc3NvckxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQ
dHI8Qml0bWFwVGV4dHVyZT4gbWFza1RleHR1cmU7CisgICAgaWYgKFRleHR1cmVNYXBwZXJOb2Rl
KiBtYXNrID0gbV9zdGF0ZS5tYXNrTGF5ZXIpCisgICAgICAgIG1hc2tUZXh0dXJlID0gbWFzay0+
bV90ZXh0dXJlOworCisgICAgQVNTRVJUKG1fc3VyZmFjZSk7CisgICAgQml0bWFwVGV4dHVyZSYg
dGV4dHVyZSA9ICptX3N1cmZhY2UuZ2V0KCk7CisgICAgaWYgKG1hc2tUZXh0dXJlKQorICAgICAg
ICBtYXNrVGV4dHVyZS0+dW5wYWNrKCk7CisgICAgdGV4dHVyZS51bnBhY2soKTsKKworICAgIGlm
IChwYWludFJlcGxpY2Eob3B0aW9ucykpCisgICAgICAgIHJldHVybjsKKworICAgIG9wdGlvbnMu
dGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2Uob3B0aW9ucy5zdXJmYWNlKTsKKyAgICBvcHRpb25z
LnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKHRleHR1cmUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fbGF5ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVyID8gSW50UmVjdChJbnRQ
b2ludCgwLCAwKSwgb3B0aW9ucy5zdXJmYWNlLT5zaXplKCkpIDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGFyZ2V0UmVjdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2xheWVyVHlwZSA9PSBUcmFuc3BhcmVuY3lMYXllciA/IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkg
OiBtX3RyYW5zZm9ybXMudGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRp
b25zLm9wYWNpdHksIG1hc2tUZXh0dXJlLmdldCgpKTsKKyAgICBvcHRpb25zLmNhY2hlLT5tYXJr
KCZ0ZXh0dXJlKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRTZWxmQW5kQ2hp
bGRyZW4oY29uc3QgVGV4bWFwUGFpbnRPcHRpb25zJiBvcHRpb25zLCBUZXhtYXBQYWludE9wdGlv
bnMmIG9wdGlvbnNGb3JEZXNjZW5kYW50cykKK3sKKyAgICBib29sIGRpZFBhaW50U2VsZiA9IGZh
bHNlOworICAgIGlmICghbV9zdGF0ZS5wcmVzZXJ2ZXMzRCB8fCBtX2NoaWxkcmVuLmlzRW1wdHko
KSkgeworICAgICAgICBwYWludFNlbGYob3B0aW9ucyk7CisgICAgICAgIGRpZFBhaW50U2VsZiA9
IHRydWU7CisgICAgfQorCisgICAgaWYgKG1fY2hpbGRyZW4uaXNFbXB0eSgpICYmICFvcHRpb25z
LmlzU3VyZmFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fbGF5ZXJUeXBlID09IFNj
aXNzb3JMYXllcikKKyAgICAgICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLnNjaXNzb3JSZWN0Lmlu
dGVyc2VjdChtX3RyYW5zZm9ybXMudGFyZ2V0Lm1hcFJlY3QoSW50UmVjdCgwLCAwLCBtX3NpemUu
d2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBt
X2NoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBsYXll
ciA9IG1fY2hpbGRyZW5baV07CisgICAgICAgIGlmICghbGF5ZXIpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBpZiAoIWRpZFBhaW50U2VsZiAmJiBsYXllci0+bV90cmFuc2Zvcm1z
LmNlbnRlclogPj0gMCkgeworICAgICAgICAgICAgcGFpbnRTZWxmKG9wdGlvbnMpOworICAgICAg
ICAgICAgZGlkUGFpbnRTZWxmID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBsYXllci0+cGFp
bnRSZWN1cnNpdmUob3B0aW9uc0ZvckRlc2NlbmRhbnRzKTsKKyAgICAgICAgaWYgKG9wdGlvbnMu
aXNTdXJmYWNlKSB7CisgICAgICAgICAgICBBU1NFUlQobV9zdXJmYWNlKTsKKyAgICAgICAgICAg
IG9wdGlvbnMuY2FjaGUtPm1hcmsobV9zdXJmYWNlLmdldCgpKTsKKyAgICAgICAgICAgIG9wdGlv
bnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UobV9zdXJmYWNlLmdldCgpKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBpZiAoIWRpZFBhaW50U2VsZikgeworICAgICAgICBwYWludFNlbGYob3B0
aW9ucyk7CisgICAgICAgIGRpZFBhaW50U2VsZiA9IHRydWU7CisgICAgfQorfQorCit2b2lkIFRl
eHR1cmVNYXBwZXJOb2RlOjpwYWludFJlY3Vyc2l2ZShUZXhtYXBQYWludE9wdGlvbnMgb3B0aW9u
cykKK3sKKyAgICBib29sIGlzRGlydHkgPSBtX3N0YXRlLmRpcnR5OworICAgIG1fc3RhdGUuZGly
dHkgPSBmYWxzZTsKKworICAgIGlmICgobV9zaXplLmlzRW1wdHkoKSAmJiAobV9zdGF0ZS5tYXNr
c1RvQm91bmRzCisgICAgICAgIHx8IG1fY2hpbGRyZW4uaXNFbXB0eSgpKSkgfHwgIW1fc3RhdGUu
dmlzaWJsZSB8fCBvcHRpb25zLm9wYWNpdHkgPCAwLjAxIHx8IG1fc3RhdGUub3BhY2l0eSA8IDAu
MDEpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbXB1dGVSZXBsaWNhVHJhbnNmb3JtKCk7CisK
KyAgICBpZiAobV9zdGF0ZS5tYXNrTGF5ZXIpCisgICAgICAgIG1fc3RhdGUubWFza0xheWVyLT5t
X3N0YXRlLmRpcnR5ID0gZmFsc2U7CisKKyAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpIHsK
KyAgICAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUuZGlydHkgPSBmYWxzZTsKKyAg
ICAgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRlLm1hc2tMYXllcikKKyAgICAg
ICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRlLm1hc2tMYXllci0+bV9zdGF0ZS5k
aXJ0eSA9IGZhbHNlOworICAgIH0KKworICAgIGNvbnN0IGJvb2wgaXNTdXJmYWNlID0gKG1fbGF5
ZXJUeXBlID09IENsaXBMYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fbGF5
ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fHwgKG1fbGF5ZXJUeXBlID09IFJvb3RMYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiAob3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5hbGxvd1N1cmZhY2VGb3JSb290KCkgfHwg
bV9zdGF0ZS5oYXNTdXJmYWNlRGVzY2VuZGFudHMpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICkpOworCisgICAgY29uc3QgSW50UmVjdCBib3VuZGluZ1JlY3Rmcm9tTmVhcmVzdFN1
cmZhY2UgPSBtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0OworCisgICAgb3B0aW9ucy5v
cGFjaXR5ICo9IG1fc3RhdGUub3BhY2l0eTsKKworICAgIFRleG1hcFBhaW50T3B0aW9ucyBvcHRp
b25zRm9yRGVzY2VuZGFudHMob3B0aW9ucyk7CisgICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLm9w
YWNpdHkgPSBpc1N1cmZhY2UgPyAxIDogb3B0aW9ucy5vcGFjaXR5OworICAgIG9wdGlvbnMuaXNT
dXJmYWNlID0gaXNTdXJmYWNlOworCisgICAgaWYgKG1fbGF5ZXJUeXBlID09IENsaXBMYXllcikg
eworICAgICAgICBvcHRpb25zRm9yRGVzY2VuZGFudHMudmlzaWJsZVJlY3QgPSBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgpLnRyYW5zbGF0ZSgtYm91bmRpbmdSZWN0ZnJvbU5lYXJlc3RTdXJmYWNlLngo
KSwgLWJvdW5kaW5nUmVjdGZyb21OZWFyZXN0U3VyZmFjZS55KCkpLm1hcFJlY3Qob3B0aW9ucy52
aXNpYmxlUmVjdCk7CisgICAgICAgIG9wdGlvbnNGb3JEZXNjZW5kYW50cy5zY2lzc29yUmVjdCA9
IEludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgfQor
CisgICAgaWYgKG1fbGF5ZXJUeXBlID09IFNjaXNzb3JMYXllcikKKyAgICAgICAgb3B0aW9uc0Zv
ckRlc2NlbmRhbnRzLnNjaXNzb3JSZWN0LmludGVyc2VjdChtX3RyYW5zZm9ybXMudGFyZ2V0Qm91
bmRpbmdSZWN0KTsKKyAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPnNldENsaXAob3B0aW9uc0Zv
ckRlc2NlbmRhbnRzLnNjaXNzb3JSZWN0KTsKKworICAgIFRleHR1cmVNYXBwZXJDYWNoZUxvY2so
bV90ZXh0dXJlLmdldCgpKTsKKyAgICBUZXh0dXJlTWFwcGVyQ2FjaGVMb2NrKG1fc3VyZmFjZS5n
ZXQoKSk7CisgICAgVGV4dHVyZU1hcHBlckNhY2hlTG9jayhtX3JlcGxpY2FTdXJmYWNlLmdldCgp
KTsKKworICAgIG9wdGlvbnMuY2FjaGUtPnB1cmdlKCk7CisKKyAgICBpZiAoaXNTdXJmYWNlKSB7
CisgICAgICAgIEFTU0VSVChtX3N1cmZhY2UpOworICAgICAgICBpZiAoIW1fc3VyZmFjZS0+aXNW
YWxpZCgpKQorICAgICAgICAgICAgaXNEaXJ0eSA9IHRydWU7CisgICAgICAgIGlmIChtX3N0YXRl
LnRpbGVkKSB7CisgICAgICAgICAgICBtX3N1cmZhY2UtPnJlc2V0KG9wdGlvbnMudmlzaWJsZVJl
Y3Quc2l6ZSgpKTsKKyAgICAgICAgICAgIG1fc3VyZmFjZS0+c2V0T2Zmc2V0KG9wdGlvbnMudmlz
aWJsZVJlY3QubG9jYXRpb24oKSk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNEaXJ0eSkKKyAgICAg
ICAgICAgIG1fc3VyZmFjZS0+cmVzZXQobV9sYXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIg
PyBvcHRpb25zLnN1cmZhY2UtPnNpemUoKSA6IG1fc2l6ZSk7CisgICAgICAgIG9wdGlvbnMuY2Fj
aGUtPm1hcmsobV9zdXJmYWNlLmdldCgpKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVy
LT5iaW5kU3VyZmFjZShtX3N1cmZhY2UuZ2V0KCkpOworICAgICAgICBvcHRpb25zRm9yRGVzY2Vu
ZGFudHMuc3VyZmFjZSA9IG1fc3VyZmFjZS5nZXQoKTsKKyAgICB9IGVsc2UgaWYgKG1fc3VyZmFj
ZSkKKyAgICAgICAgbV9zdXJmYWNlLT5kZXN0cm95KCk7CisKKyAgICBpZiAoaXNEaXJ0eSB8fCAh
aXNTdXJmYWNlIHx8IG1fc3RhdGUudGlsZWQgfHwgIW1fc3VyZmFjZS0+aXNWYWxpZCgpKQorICAg
ICAgICBwYWludFNlbGZBbmRDaGlsZHJlbihvcHRpb25zLCBvcHRpb25zRm9yRGVzY2VuZGFudHMp
OworCisgICAgcGFpbnRTdXJmYWNlKG9wdGlvbnMpOworfQorCitUZXh0dXJlTWFwcGVyTm9kZTo6
flRleHR1cmVNYXBwZXJOb2RlKCkKK3sKKyAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICB7Cisg
ICAgICAgIGNvbnN0IGludCBjaGlsZHJlblNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKKyAgICAg
ICAgZm9yIChpbnQgaSA9IGNoaWxkcmVuU2l6ZS0xOyBpID49IDA7IC0taSkgeworICAgICAgICAg
ICAgQVNTRVJUKG1fY2hpbGRyZW5baV0tPm1fcGFyZW50ID09IHRoaXMpOworICAgICAgICAgICAg
bV9jaGlsZHJlbltpXS0+bV9wYXJlbnQgPSAwOworICAgICAgICB9CisgICAgfQorICAgIGlmICht
X3BhcmVudCkKKyAgICAgICAgbV9wYXJlbnQtPm1fY2hpbGRyZW4ucmVtb3ZlKG1fcGFyZW50LT5t
X2NoaWxkcmVuLmZpbmQodGhpcykpOworICAgIGlmIChtX2NhY2hlKQorICAgICAgICBkZWxldGUg
bV9jYWNoZTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGVyZm9ybVBvc3RTeW5jT3Bl
cmF0aW9ucygpCit7CisgICAgY29uc3QgTGF5ZXJUeXBlIHByZXZMYXllclR5cGUgPSBtX2xheWVy
VHlwZTsKKyAgICBjb21wdXRlTGF5ZXJUeXBlKCk7CisgICAgaWYgKHByZXZMYXllclR5cGUgIT0g
bV9sYXllclR5cGUpCisgICAgICAgIG1fc3RhdGUuZGlydHkgPSB0cnVlOworICAgIGlmIChtX3Ry
YW5zZm9ybXMuZGlydHkpCisgICAgICAgIHNldE5lZWRzRGlzcGxheSgpOworCisgICAgY29tcHV0
ZVRyYW5zZm9ybWF0aW9ucygpOworICAgIGlmIChtX3N0YXRlLm1hc2tMYXllciAmJiAhbV9zdGF0
ZS5kaXJ0eSkKKyAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IG1fc3RhdGUubWFza0xheWVyLT5tX3N0
YXRlLmRpcnR5OworICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllciAmJiAhbV9zdGF0ZS5kaXJ0
eSkKKyAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRl
LmRpcnR5OworCisgICAgY29uc3QgaW50IHNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKKworICAg
IGZvciAoaW50IGkgPSBzaXplIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgVGV4dHVyZU1h
cHBlck5vZGUqIGxheWVyID0gbV9jaGlsZHJlbltpXTsKKworICAgICAgICBsYXllci0+cGVyZm9y
bVBvc3RTeW5jT3BlcmF0aW9ucygpOworICAgICAgICBpZiAoIW1fc3RhdGUuZGlydHkpCisgICAg
ICAgICAgICBtX3N0YXRlLmRpcnR5ID0gbGF5ZXItPm1fc3RhdGUuZGlydHk7CisgICAgfQorICAg
IG1fc3RhdGUuaGFzU3VyZmFjZURlc2NlbmRhbnRzID0gaGFzU3VyZmFjZURlc2NlbmRhbnRzKCk7
CisgICAgaWYgKG1fc3RhdGUuZGlydHkpCisgICAgICAgIG1fc3RhdGUuZGVzY2VuZGFudHNXaXRo
Q29udGVudCA9IGNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCgpOworCisgICAgaWYgKG1fc3Rh
dGUucHJlc2VydmVzM0QpCisgICAgICAgIHNvcnRCeVpPcmRlcihtX2NoaWxkcmVuLCAwLCBzaXpl
KTsKKyAgICBpZiAobV9zdGF0ZS5kaXJ0eSkKKyAgICAgICAgc2V0TmVlZHNEaXNwbGF5KCk7Cit9
CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlKEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljc0xheWVyLCBib29sIHJlY3Vyc2UpCit7CisgICAg
VGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciA9IHJvb3RMYXllcigpLT5tX3BsYXRmb3JtQ2xp
ZW50LT50ZXh0dXJlTWFwcGVyKCk7CisgICAgc3luY0NvbXBvc2l0aW5nU3RhdGVJbnRlcm5hbChn
cmFwaGljc0xheWVyLCByZWN1cnNlLCB0ZXh0dXJlTWFwcGVyKTsKKyAgICBwZXJmb3JtUG9zdFN5
bmNPcGVyYXRpb25zKCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3Np
dGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpY3NMYXllciwg
VGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKK3sKKyAgICBjb25zdCBpbnQgY2hhbmdlTWFz
ayA9IGdyYXBoaWNzTGF5ZXItPmNoYW5nZU1hc2soKTsKKyAgICBpbml0aWFsaXplVGV4dHVyZU1h
cHBlcih0ZXh0dXJlTWFwcGVyKTsKKyAgICBjb25zdCBUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVu
dERhdGEmIHBlbmRpbmdDb250ZW50ID0gZ3JhcGhpY3NMYXllci0+cGVuZGluZ0NvbnRlbnQoKTsK
KyAgICBpZiAoY2hhbmdlTWFzayA9PSBOb0NoYW5nZXMgJiYgcGVuZGluZ0NvbnRlbnQubmVlZHNE
aXNwbGF5UmVjdC5pc0VtcHR5KCkgJiYgIXBlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgaWYgKG1fcGFyZW50
KQorICAgICAgICBtX3BhcmVudC0+bV9zdGF0ZS5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAobV9j
dXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUgJiYgKGNoYW5nZU1h
c2sgJiBQYXJlbnRDaGFuZ2UpKSB7CisgICAgICAgIC8vIFRoZSBXZWJDb3JlIGNvbXBvc2l0b3Ig
bWFuYWdlcyBpdGVtIG93bmVyc2hpcC4gV2UgaGF2ZSB0byBtYWtlIHN1cmUgZ3JhcGhpY3N2aWV3
IGRvZXNuJ3QKKyAgICAgICAgLy8gdHJ5IHRvIHNuYXRjaCB0aGF0IG93bmVyc2hpcC4KKworICAg
ICAgICBpZiAoIWdyYXBoaWNzTGF5ZXItPnBhcmVudCgpKQorICAgICAgICAgICAgbV9wYXJlbnQg
PSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3BhcmVudCA9IHRvVGV4dHVyZU1hcHBl
ck5vZGUoZ3JhcGhpY3NMYXllci0+cGFyZW50KCkpOworCisgICAgICAgIGlmICghZ3JhcGhpY3NM
YXllci0+cGFyZW50KCkgJiYgbV9wYXJlbnQpIHsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleCA9
IG1fcGFyZW50LT5tX2NoaWxkcmVuLmZpbmQodGhpcyk7CisgICAgICAgICAgICBtX3BhcmVudC0+
bV9jaGlsZHJlbi5yZW1vdmUoaW5kZXgpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNo
YW5nZU1hc2sgJiBDaGlsZHJlbkNoYW5nZSkgeworICAgICAgICBtX2NoaWxkcmVuLmNsZWFyKCk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW4o
KS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiBjaGls
ZCA9IHRvVGV4dHVyZU1hcHBlck5vZGUoZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW4oKVtpXSkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIWNoaWxkKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChjaGlsZCk7CisgICAgICAgICAg
ICAgICAgY2hpbGQtPm1fcGFyZW50ID0gdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBtX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoY2hhbmdlTWFz
ayAmIChTaXplQ2hhbmdlIHwgQ29udGVudHNSZWN0Q2hhbmdlKSkgeworICAgICAgICBJbnRTaXpl
IHdhbnRlZFNpemUgPSBJbnRTaXplKGdyYXBoaWNzTGF5ZXItPnNpemUoKS53aWR0aCgpLCBncmFw
aGljc0xheWVyLT5zaXplKCkuaGVpZ2h0KCkpOworICAgICAgICBpZiAod2FudGVkU2l6ZS5pc0Vt
cHR5KCkgJiYgcGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlKQor
ICAgICAgICAgICAgd2FudGVkU2l6ZSA9IEludFNpemUoZ3JhcGhpY3NMYXllci0+Y29udGVudHNS
ZWN0KCkud2lkdGgoKSwgZ3JhcGhpY3NMYXllci0+Y29udGVudHNSZWN0KCkuaGVpZ2h0KCkpOwor
CisgICAgICAgIGlmICh3YW50ZWRTaXplICE9IG1fc2l6ZSkgeworICAgICAgICAgICAgbV9zaXpl
ID0gSW50U2l6ZSh3YW50ZWRTaXplLndpZHRoKCksIHdhbnRlZFNpemUuaGVpZ2h0KCkpOworICAg
ICAgICAgICAgaWYgKG1fcGxhdGZvcm1DbGllbnQpCisgICAgICAgICAgICAgICAgbV9wbGF0Zm9y
bUNsaWVudC0+c2V0U2l6ZUNoYW5nZWQobV9zaXplKTsKKyAgICAgICAgICAgIGNvbnN0IGJvb2wg
bmVlZHNUaWxpbmcgPSBtX3NpemUud2lkdGgoKSA+IDIwMDAgfHwgbV9zaXplLmhlaWdodCgpID4g
MjAwMDsKKyAgICAgICAgICAgIGlmIChtX3N0YXRlLnRpbGVkICE9IG5lZWRzVGlsaW5nKQorICAg
ICAgICAgICAgICAgIG1fc3RhdGUudGlsZWQgPSBuZWVkc1RpbGluZzsKKyAgICAgICAgICAgIG1f
c3RhdGUuZGlydHkgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNoYW5nZU1h
c2sgJiBNYXNrTGF5ZXJDaGFuZ2UpIHsKKyAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIGxh
eWVyID0gdG9UZXh0dXJlTWFwcGVyTm9kZShncmFwaGljc0xheWVyLT5tYXNrTGF5ZXIoKSkpCisg
ICAgICAgICAgIGxheWVyLT5tX2VmZmVjdFRhcmdldCA9IHRoaXM7CisgICAgfQorCisgICAgaWYg
KGNoYW5nZU1hc2sgJiBSZXBsaWNhTGF5ZXJDaGFuZ2UpIHsKKyAgICAgICBpZiAoVGV4dHVyZU1h
cHBlck5vZGUqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTm9kZShncmFwaGljc0xheWVyLT5yZXBs
aWNhTGF5ZXIoKSkpCisgICAgICAgICAgIGxheWVyLT5tX2VmZmVjdFRhcmdldCA9IHRoaXM7Cisg
ICAgfQorCisgICAgaWYgKGNoYW5nZU1hc2sgJiAoVHJhbnNmb3JtQ2hhbmdlIHwgU2l6ZUNoYW5n
ZSB8IEFuY2hvclBvaW50Q2hhbmdlIHwgUG9zaXRpb25DaGFuZ2UpKQorICAgICAgICBtX3RyYW5z
Zm9ybXMubG9jYWxEaXJ0eSA9IHRydWU7CisKKyAgICBpZiAoY2hhbmdlTWFzayAmIChDaGlsZHJl
blRyYW5zZm9ybUNoYW5nZSB8IFNpemVDaGFuZ2UpKQorICAgICAgICBtX3RyYW5zZm9ybXMucGVy
c3BlY3RpdmVEaXJ0eSA9IHRydWU7CisKKyAgICBpZiAoY2hhbmdlTWFzayAmIChDaGlsZHJlblRy
YW5zZm9ybUNoYW5nZSB8IFByZXNlcnZlczNEQ2hhbmdlIHwgVHJhbnNmb3JtQ2hhbmdlIHwgQW5j
aG9yUG9pbnRDaGFuZ2UgfCBTaXplQ2hhbmdlIHwgQ29udGVudHNSZWN0Q2hhbmdlIHwgQmFja2Zh
Y2VWaXNpYmlsaXR5Q2hhbmdlIHwgUG9zaXRpb25DaGFuZ2UgfCBNYXNrTGF5ZXJDaGFuZ2UgfCBE
cmF3c0NvbnRlbnRDaGFuZ2UgfCBDb250ZW50Q2hhbmdlIHwgUmVwbGljYUxheWVyQ2hhbmdlKSkg
ICAgeworICAgICAgICAvLyBEdWUgdG8gdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHdheSBX
ZWJDb3JlIGhhbmRsZXMgdHJhbnNmb3JtcyBhbmQgdGhlIHdheSBRdCBoYW5kbGVzIHRyYW5zZm9y
bXMsCisgICAgICAgIC8vIGFsbCB0aGVzZSBlbGVtZW50cyBhZmZlY3QgdGhlIHRyYW5zZm9ybXMg
b2YgYWxsIHRoZSBkZXNjZW5kYW50cy4KKyAgICAgICAgaW52YWxpZGF0ZVRyYW5zZm9ybSgpOwor
ICAgIH0KKworICAgIGlmIChjaGFuZ2VNYXNrICYgRGlzcGxheUNoYW5nZSkKKyAgICAgICAgbV9z
dGF0ZS5kaXJ0eSA9IHRydWU7CisKKyAgICBtX3N0YXRlLm1hc2tMYXllciA9IHRvVGV4dHVyZU1h
cHBlck5vZGUoZ3JhcGhpY3NMYXllci0+bWFza0xheWVyKCkpOworICAgIG1fc3RhdGUucmVwbGlj
YUxheWVyID0gdG9UZXh0dXJlTWFwcGVyTm9kZShncmFwaGljc0xheWVyLT5yZXBsaWNhTGF5ZXIo
KSk7CisgICAgbV9zdGF0ZS5wb3MgPSBncmFwaGljc0xheWVyLT5wb3NpdGlvbigpOworICAgIG1f
c3RhdGUuYW5jaG9yUG9pbnQgPSBncmFwaGljc0xheWVyLT5hbmNob3JQb2ludCgpOworICAgIG1f
c3RhdGUuc2l6ZSA9IGdyYXBoaWNzTGF5ZXItPnNpemUoKTsKKyAgICBtX3N0YXRlLnRyYW5zZm9y
bSA9IGdyYXBoaWNzTGF5ZXItPnRyYW5zZm9ybSgpOworICAgIG1fc3RhdGUuY29udGVudHNSZWN0
ID0gZ3JhcGhpY3NMYXllci0+Y29udGVudHNSZWN0KCk7CisgICAgbV9zdGF0ZS5vcGFjaXR5ID0g
Z3JhcGhpY3NMYXllci0+b3BhY2l0eSgpOworICAgIG1fc3RhdGUuY29udGVudHNSZWN0ID0gZ3Jh
cGhpY3NMYXllci0+Y29udGVudHNSZWN0KCk7CisgICAgbV9zdGF0ZS5wcmVzZXJ2ZXMzRCA9IGdy
YXBoaWNzTGF5ZXItPnByZXNlcnZlczNEKCk7CisgICAgbV9zdGF0ZS5tYXNrc1RvQm91bmRzID0g
Z3JhcGhpY3NMYXllci0+bWFza3NUb0JvdW5kcygpOworICAgIG1fc3RhdGUuZHJhd3NDb250ZW50
ID0gZ3JhcGhpY3NMYXllci0+ZHJhd3NDb250ZW50KCk7CisgICAgbV9zdGF0ZS5jb250ZW50c09w
YXF1ZSA9IGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRzT3BhcXVlKCk7CisgICAgbV9zdGF0ZS5iYWNr
ZmFjZVZpc2liaWxpdHkgPSBncmFwaGljc0xheWVyLT5iYWNrZmFjZVZpc2liaWxpdHkoKTsKKyAg
ICBtX3N0YXRlLmNoaWxkcmVuVHJhbnNmb3JtID0gZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW5UcmFu
c2Zvcm0oKTsKKyAgICBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID0gcGVuZGluZ0NvbnRl
bnQuY29udGVudFR5cGU7CisgICAgbV9jdXJyZW50Q29udGVudC5pbWFnZSA9IHBlbmRpbmdDb250
ZW50LmltYWdlOworICAgIG1fY3VycmVudENvbnRlbnQubWVkaWEgPSBwZW5kaW5nQ29udGVudC5t
ZWRpYTsKKyAgICBtX2N1cnJlbnRDb250ZW50LmJhY2tncm91bmRDb2xvciA9IHBlbmRpbmdDb250
ZW50LmJhY2tncm91bmRDb2xvcjsKKyAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSA9
IG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5IHx8IHBlbmRpbmdDb250ZW50Lm5lZWRzRGlz
cGxheTsKKyAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QudW5pdGUocGVuZGlu
Z0NvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCk7CisKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9k
ZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVJbnRlcm5hbChHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
ciogZ3JhcGhpY3NMYXllciwgYm9vbCByZWN1cnNlLCBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFw
cGVyKQoreworICAgIHN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihncmFwaGljc0xheWVyLCB0ZXh0
dXJlTWFwcGVyKTsKKworICAgIGdyYXBoaWNzTGF5ZXItPmRpZFN5bmNocm9uaXplKCk7CisKKyAg
ICBpZiAobV9zdGF0ZS5tYXNrTGF5ZXIpIHsKKyAgICAgICAgbV9zdGF0ZS5tYXNrTGF5ZXItPnN5
bmNDb21wb3NpdGluZ1N0YXRlSW50ZXJuYWwodG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihn
cmFwaGljc0xheWVyLT5tYXNrTGF5ZXIoKSksIGZhbHNlLCB0ZXh0dXJlTWFwcGVyKTsKKyAgICAg
ICAgaWYgKG1fc3RhdGUubWFza0xheWVyLT5tX3NpemUuaXNFbXB0eSgpKQorICAgICAgICAgICAg
bV9zdGF0ZS5tYXNrTGF5ZXItPm1fc2l6ZSA9IG1fc2l6ZTsKKyAgICB9CisKKyAgICBpZiAobV9z
dGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5zeW5jQ29t
cG9zaXRpbmdTdGF0ZUludGVybmFsKHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoZ3JhcGhp
Y3NMYXllci0+cmVwbGljYUxheWVyKCkpLCBmYWxzZSwgdGV4dHVyZU1hcHBlcik7CisKKyAgICBp
ZiAobV9zdGF0ZS5kaXJ0eSkKKyAgICAgICAgdXBsb2FkVGV4dHVyZUZyb21Db250ZW50KHRleHR1
cmVNYXBwZXIsIG1fc3RhdGUudmlzaWJsZVJlY3QsIGdyYXBoaWNzTGF5ZXIpOworCisgICAgbV9j
dXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0ID0gSW50UmVjdCgpOworICAgIG1fY3VycmVu
dENvbnRlbnQubmVlZHNEaXNwbGF5ID0gZmFsc2U7CisKKyAgICBpZiAoIXJlY3Vyc2UpCisgICAg
ICAgIHJldHVybjsKKworICAgIFZlY3RvcjxHcmFwaGljc0xheWVyKj4gY2hpbGRyZW4gPSBncmFw
aGljc0xheWVyLT5jaGlsZHJlbigpOworICAgIGZvciAoaW50IGkgPSBjaGlsZHJlbi5zaXplKCkg
LSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRv
VGV4dHVyZU1hcHBlck5vZGUoY2hpbGRyZW5baV0pOworICAgICAgICBpZiAoIW5vZGUpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbm9kZS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbnRl
cm5hbCh0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGNoaWxkcmVuW2ldKSwgdHJ1ZSwgdGV4
dHVyZU1hcHBlcik7CisgICAgfQorfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi45Njk0MDQzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaApAQCAtMCwwICsxLDI1MiBAQAor
LyoKKyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgVGV4dHVyZU1h
cHBlck5vZGVfaAorI2RlZmluZSBUZXh0dXJlTWFwcGVyTm9kZV9oCisKKyNpbmNsdWRlICJDdXJy
ZW50VGltZS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJIYXNoTWFwLmgi
CisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAi
VGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgi
CisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCisj
aW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiVW5pdEJl
emllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHR1cmVNYXBwZXJOb2Rl
OworY2xhc3MgVGV4dHVyZU1hcHBlckNhY2hlOworY2xhc3MgR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXI7CisKK3N0cnVjdCBUZXhtYXBQYWludE9wdGlvbnMgeworICAgIEJpdG1hcFRleHR1cmUq
IHN1cmZhY2U7CisgICAgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcjsKKyAgICBUZXh0dXJl
TWFwcGVyTm9kZSogcm9vdExheWVyOworICAgIGZsb2F0IG9wYWNpdHk7CisgICAgSW50UmVjdCBz
Y2lzc29yUmVjdDsKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0OworICAgIGJvb2wgaXNTdXJmYWNl
OworICAgIFRleHR1cmVNYXBwZXJDYWNoZSogY2FjaGU7Cit9OworCitjbGFzcyBUZXh0dXJlTWFw
cGVyTm9kZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyQ29udGVudExheWVyIHsKKworcHVibGljOgor
ICAgIC8vIFRoaXMgc2V0IG9mIGZsYWdzIGhlbHAgdXMgZGVmZXIgd2hpY2ggcHJvcGVydGllcyBv
ZiB0aGUgbGF5ZXIgaGF2ZSBiZWVuCisgICAgLy8gbW9kaWZpZWQgYnkgdGhlIGNvbXBvc2l0b3Is
IHNvIHdlIGNhbiBrbm93IHdoYXQgdG8gbG9vayBmb3IgaW4gdGhlIG5leHQgZmx1c2guCisgICAg
ZW51bSBDaGFuZ2VNYXNrIHsKKyAgICAgICAgTm9DaGFuZ2VzID0gICAgICAgICAgICAgICAgIDAs
CisKKyAgICAgICAgUGFyZW50Q2hhbmdlID0gICAgICAgICAgICAgICgxTCA8PCAwKSwKKyAgICAg
ICAgQ2hpbGRyZW5DaGFuZ2UgPSAgICAgICAgICAgICgxTCA8PCAxKSwKKyAgICAgICAgTWFza0xh
eWVyQ2hhbmdlID0gICAgICAgICAgICgxTCA8PCAyKSwKKyAgICAgICAgUG9zaXRpb25DaGFuZ2Ug
PSAgICAgICAgICAgICgxTCA8PCAzKSwKKworICAgICAgICBBbmNob3JQb2ludENoYW5nZSA9ICAg
ICAgICAgKDFMIDw8IDQpLAorICAgICAgICBTaXplQ2hhbmdlICA9ICAgICAgICAgICAgICAgKDFM
IDw8IDUpLAorICAgICAgICBUcmFuc2Zvcm1DaGFuZ2UgPSAgICAgICAgICAgKDFMIDw8IDYpLAor
ICAgICAgICBDb250ZW50Q2hhbmdlID0gICAgICAgICAgICAgKDFMIDw8IDcpLAorCisgICAgICAg
IENvbnRlbnRzT3JpZW50YXRpb25DaGFuZ2UgPSAoMUwgPDwgOSksCisgICAgICAgIE9wYWNpdHlD
aGFuZ2UgPSAgICAgICAgICAgICAoMUwgPDwgMTApLAorICAgICAgICBDb250ZW50c1JlY3RDaGFu
Z2UgPSAgICAgICAgKDFMIDw8IDExKSwKKworICAgICAgICBQcmVzZXJ2ZXMzRENoYW5nZSA9ICAg
ICAgICAgKDFMIDw8IDEyKSwKKyAgICAgICAgTWFza3NUb0JvdW5kc0NoYW5nZSA9ICAgICAgICgx
TCA8PCAxMyksCisgICAgICAgIERyYXdzQ29udGVudENoYW5nZSA9ICAgICAgICAoMUwgPDwgMTQp
LAorICAgICAgICBDb250ZW50c09wYXF1ZUNoYW5nZSA9ICAgICAgKDFMIDw8IDE1KSwKKworICAg
ICAgICBCYWNrZmFjZVZpc2liaWxpdHlDaGFuZ2UgPSAgKDFMIDw8IDE2KSwKKyAgICAgICAgQ2hp
bGRyZW5UcmFuc2Zvcm1DaGFuZ2UgPSAgICgxTCA8PCAxNyksCisgICAgICAgIERpc3BsYXlDaGFu
Z2UgPSAgICAgICAgICAgICAoMUwgPDwgMTgpLAorICAgICAgICBCYWNrZ3JvdW5kQ29sb3JDaGFu
Z2UgPSAgICAgKDFMIDw8IDE5KSwKKworICAgICAgICBSZXBsaWNhTGF5ZXJDaGFuZ2UgPSAgICAg
ICAgKDFMIDw8IDIwKQorICAgIH07CisgICAgLy8gVGhlIGNvbXBvc2l0b3IgbGV0cyB1cyBzcGVj
aWFsLWNhc2UgaW1hZ2VzIGFuZCBjb2xvcnMsIHNvIHdlIHRyeSB0byBkbyBzby4KKyAgICBlbnVt
IENvbnRlbnRUeXBlIHsgSFRNTENvbnRlbnRUeXBlLCBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlLCBD
b2xvckNvbnRlbnRUeXBlLCBNZWRpYUNvbnRlbnRUeXBlLCBDYW52YXMzRENvbnRlbnRUeXBlfTsK
KyAgICBzdHJ1Y3QgQ29udGVudERhdGEgeworICAgICAgICBJbnRSZWN0IG5lZWRzRGlzcGxheVJl
Y3Q7CisgICAgICAgIGJvb2wgbmVlZHNEaXNwbGF5OworICAgICAgICBDb2xvciBiYWNrZ3JvdW5k
Q29sb3I7CisKKyAgICAgICAgQ29udGVudFR5cGUgY29udGVudFR5cGU7CisgICAgICAgIFJlZlB0
cjxJbWFnZT4gaW1hZ2U7CisgICAgICAgIFRleHR1cmVNYXBwZXJWaWRlb0xheWVyKiBtZWRpYTsK
KworICAgICAgICBDb250ZW50RGF0YSgpCisgICAgICAgICAgICA6IG5lZWRzRGlzcGxheShmYWxz
ZSkKKyAgICAgICAgICAgICwgY29udGVudFR5cGUoSFRNTENvbnRlbnRUeXBlKQorICAgICAgICAg
ICAgLCBpbWFnZSgwKQorICAgICAgICAgICAgLCBtZWRpYSgwKQorICAgICAgICB7CisgICAgICAg
IH0KKyAgICB9OworCisKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSgpOworICAgIHZpcnR1YWwgflRl
eHR1cmVNYXBwZXJOb2RlKCk7CisKKyAgICB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlKEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiwgYm9vbCByZWN1cnNpdmUpOworCitwcm90ZWN0ZWQ6Cisg
ICAgLy8gUmVpbXBzIGZyb20gVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcgorICAgIHZpcnR1YWwg
SW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgdmlydHVhbCB2b2lk
IHNldFBsYXRmb3JtTGF5ZXJDbGllbnQoVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50Kik7CisgICAg
dmlydHVhbCB2b2lkIHBhaW50KFRleHR1cmVNYXBwZXIqLCBjb25zdCBUZXh0dXJlTWFwcGVyQ29u
dGVudExheWVyOjpQYWludE9wdGlvbnMmKTsKKworcHJpdmF0ZToKKyAgICBUZXh0dXJlTWFwcGVy
Tm9kZSogcm9vdExheWVyKCk7CisgICAgdm9pZCBjbGVhckRpcmVjdEltYWdlKCk7CisgICAgdm9p
ZCBjb21wdXRlVHJhbnNmb3JtYXRpb25zKCk7CisgICAgSW50U2l6ZSBuZWFyZXN0U3VyZmFjZVNp
emUoKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVSZXBsaWNhVHJhbnNmb3JtKCk7CisgICAgdm9p
ZCBjb21wdXRlTGF5ZXJUeXBlKCk7CisgICAgdm9pZCBjb21wdXRlTG9jYWxUcmFuc2Zvcm0oKTsK
KyAgICB2b2lkIGZsYXR0ZW5UbzJEU3BhY2VJZk5lY2Vzc2FyeSgpOworICAgIHZvaWQgaW5pdGlh
bGl6ZVRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciopOworICAgIHZvaWQgaW52YWxpZGF0ZVRy
YW5zZm9ybSgpOworICAgIHZvaWQgbm90aWZ5Q2hhbmdlKENoYW5nZU1hc2spOworICAgIHZvaWQg
c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoSW50UmVj
dCk7CisgICAgdm9pZCBwZXJmb3JtUG9zdFN5bmNPcGVyYXRpb25zKCk7CisgICAgdm9pZCBzeW5j
Q29tcG9zaXRpbmdTdGF0ZUludGVybmFsKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiwgYm9v
bCByZWN1cnNpdmUsIFRleHR1cmVNYXBwZXIqKTsKKyAgICB2b2lkIHN5bmNDb21wb3NpdGluZ1N0
YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpY3NMYXllciwgVGV4dHVy
ZU1hcHBlciogdGV4dHVyZU1hcHBlcik7CisgICAgVGV4dHVyZU1hcHBlckNhY2hlKiBjYWNoZSgp
OworCisgICAgdm9pZCBwYWludFJlY3Vyc2l2ZShUZXhtYXBQYWludE9wdGlvbnMgb3B0aW9ucyk7
CisgICAgYm9vbCBwYWludFJlcGxpY2EoY29uc3QgVGV4bWFwUGFpbnRPcHRpb25zJiBvcHRpb25z
KTsKKyAgICB2b2lkIHBhaW50U3VyZmFjZShjb25zdCBUZXhtYXBQYWludE9wdGlvbnMmIG9wdGlv
bnMpOworICAgIHZvaWQgcGFpbnRTZWxmKGNvbnN0IFRleG1hcFBhaW50T3B0aW9ucyYgb3B0aW9u
cyk7CisgICAgdm9pZCBwYWludFNlbGZBbmRDaGlsZHJlbihjb25zdCBUZXhtYXBQYWludE9wdGlv
bnMmIG9wdGlvbnMsIFRleG1hcFBhaW50T3B0aW9ucyYgb3B0aW9uc0ZvckRlc2NlbmRhbnRzKTsK
KyAgICB2b2lkIHVwbG9hZFRleHR1cmVGcm9tQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJl
TWFwcGVyLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgR3JhcGhpY3NMYXllciogbGF5ZXIp
OworCisgICAgaW50IGNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCgpIGNvbnN0OworICAgIGJv
b2wgaGFzU3VyZmFjZURlc2NlbmRhbnRzKCkgY29uc3Q7CisKKyAgICBUZXh0dXJlTWFwcGVyKiB0
ZXh0dXJlTWFwcGVyKCk7CisKKworICAgIHN0YXRpYyBUZXh0dXJlTWFwcGVyTm9kZSogdG9UZXh0
dXJlTWFwcGVyTm9kZShHcmFwaGljc0xheWVyKik7CisgICAgc3RhdGljIGludCBjb21wYXJlR3Jh
cGhpY3NMYXllcnNaVmFsdWUoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYik7CisgICAgc3Rh
dGljIHZvaWQgc29ydEJ5Wk9yZGVyKFZlY3RvcjxUZXh0dXJlTWFwcGVyTm9kZSogPiYgYXJyYXks
IGludCBmaXJzdCwgaW50IGxhc3QpOworICAgIHN0cnVjdCBUcmFuc2Zvcm1EYXRhIHsKKyAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYmFzZSwgdGFyZ2V0LCByZXBsaWNhLCBmb3JEZXNjZW5k
YW50cywgcGVyc3BlY3RpdmUsIGxvY2FsOworICAgICAgICBJbnRSZWN0IHRhcmdldEJvdW5kaW5n
UmVjdDsKKyAgICAgICAgZmxvYXQgY2VudGVyWjsKKyAgICAgICAgYm9vbCBkaXJ0eSwgbG9jYWxE
aXJ0eSwgcGVyc3BlY3RpdmVEaXJ0eTsKKyAgICAgICAgSW50UmVjdCBib3VuZGluZ1JlY3RGcm9t
Um9vdDsKKyAgICAgICAgVHJhbnNmb3JtRGF0YSgpIDogZGlydHkodHJ1ZSksIGxvY2FsRGlydHko
dHJ1ZSksIHBlcnNwZWN0aXZlRGlydHkodHJ1ZSkgeyB9CisgICAgfTsKKworICAgIFRyYW5zZm9y
bURhdGEgbV90cmFuc2Zvcm1zOworCisgICAgZW51bSBMYXllclR5cGUgeworICAgICAgICBEZWZh
dWx0TGF5ZXIsCisgICAgICAgIFJvb3RMYXllciwKKyAgICAgICAgU2Npc3NvckxheWVyLAorICAg
ICAgICBDbGlwTGF5ZXIsCisgICAgICAgIFRyYW5zcGFyZW5jeUxheWVyCisgICAgfTsKKworICAg
IExheWVyVHlwZSBtX2xheWVyVHlwZTsKKworICAgIGlubGluZSBJbnRSZWN0IHRhcmdldFJlY3Qo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5
cGUgPT0gSFRNTENvbnRlbnRUeXBlID8gZW50aXJlUmVjdCgpIDogbV9zdGF0ZS5jb250ZW50c1Jl
Y3Q7CisgICAgfQorCisgICAgaW5saW5lIEludFJlY3QgZW50aXJlUmVjdCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhl
aWdodCgpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSW50UmVjdCByZXBsaWNhUmVjdCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9sYXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIg
PyBJbnRSZWN0KDAsIDAsIG1fbmVhcmVzdFN1cmZhY2VTaXplLndpZHRoKCksIG1fbmVhcmVzdFN1
cmZhY2VTaXplLmhlaWdodCgpKSA6IGVudGlyZVJlY3QoKTsKKyAgICB9CisKKyAgICBSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gbV90ZXh0dXJlOworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBtX3N1
cmZhY2UsIG1fcmVwbGljYVN1cmZhY2U7CisKKyAgICBDb250ZW50RGF0YSBtX2N1cnJlbnRDb250
ZW50OworCisgICAgVmVjdG9yPFRleHR1cmVNYXBwZXJOb2RlKj4gbV9jaGlsZHJlbjsKKyAgICBU
ZXh0dXJlTWFwcGVyTm9kZSogbV9wYXJlbnQ7CisgICAgVGV4dHVyZU1hcHBlck5vZGUqIG1fZWZm
ZWN0VGFyZ2V0OworICAgIEludFNpemUgbV9zaXplLCBtX25lYXJlc3RTdXJmYWNlU2l6ZTsKKyAg
ICBTdHJpbmcgbV9uYW1lOworICAgIFRleHR1cmVNYXBwZXJMYXllckNsaWVudCogbV9wbGF0Zm9y
bUNsaWVudDsKKworICAgIHN0cnVjdCBTdGF0ZSB7CisgICAgICAgIEZsb2F0UG9pbnQgcG9zOwor
ICAgICAgICBGbG9hdFBvaW50M0QgYW5jaG9yUG9pbnQ7CisgICAgICAgIEZsb2F0U2l6ZSBzaXpl
OworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CisgICAgICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGNoaWxkcmVuVHJhbnNmb3JtOworICAgICAgICBDb2xvciBiYWNrZ3Jv
dW5kQ29sb3I7CisgICAgICAgIENvbG9yIGN1cnJlbnRDb2xvcjsKKyAgICAgICAgR3JhcGhpY3NM
YXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIGdlb09yaWVudGF0aW9uOwor
ICAgICAgICBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24g
Y29udGVudHNPcmllbnRhdGlvbjsKKyAgICAgICAgZmxvYXQgb3BhY2l0eTsKKyAgICAgICAgSW50
UmVjdCBjb250ZW50c1JlY3Q7CisgICAgICAgIGludCBkZXNjZW5kYW50c1dpdGhDb250ZW50Owor
ICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbWFza0xheWVyOworICAgICAgICBUZXh0dXJlTWFw
cGVyTm9kZSogcmVwbGljYUxheWVyOworICAgICAgICBib29sIHByZXNlcnZlczNEOworICAgICAg
ICBib29sIG1hc2tzVG9Cb3VuZHM7CisgICAgICAgIGJvb2wgZHJhd3NDb250ZW50OworICAgICAg
ICBib29sIGNvbnRlbnRzT3BhcXVlOworICAgICAgICBib29sIGJhY2tmYWNlVmlzaWJpbGl0eTsK
KyAgICAgICAgYm9vbCB2aXNpYmxlOworICAgICAgICBib29sIGRpcnR5OworICAgICAgICBib29s
IHRpbGVkOworICAgICAgICBib29sIGhhc1N1cmZhY2VEZXNjZW5kYW50czsKKyAgICAgICAgSW50
UmVjdCB2aXNpYmxlUmVjdDsKKworICAgICAgICBTdGF0ZSgpCisgICAgICAgICAgICA6IG9wYWNp
dHkoMS5mKQorICAgICAgICAgICAgLCBkZXNjZW5kYW50c1dpdGhDb250ZW50KDApCisgICAgICAg
ICAgICAsIG1hc2tMYXllcigwKQorICAgICAgICAgICAgLCByZXBsaWNhTGF5ZXIoMCkKKyAgICAg
ICAgICAgICwgcHJlc2VydmVzM0QoZmFsc2UpCisgICAgICAgICAgICAsIG1hc2tzVG9Cb3VuZHMo
ZmFsc2UpCisgICAgICAgICAgICAsIGRyYXdzQ29udGVudChmYWxzZSkKKyAgICAgICAgICAgICwg
Y29udGVudHNPcGFxdWUoZmFsc2UpCisgICAgICAgICAgICAsIGJhY2tmYWNlVmlzaWJpbGl0eShm
YWxzZSkKKyAgICAgICAgICAgICwgdmlzaWJsZSh0cnVlKQorICAgICAgICAgICAgLCBkaXJ0eSh0
cnVlKQorICAgICAgICAgICAgLCB0aWxlZChmYWxzZSkKKyAgICAgICAgICAgICwgaGFzU3VyZmFj
ZURlc2NlbmRhbnRzKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
U3RhdGUgbV9zdGF0ZTsKKyAgICBUZXh0dXJlTWFwcGVyQ2FjaGUqIG1fY2FjaGU7Cit9OworCit9
CisjZW5kaWYgLy8gVGV4dHVyZU1hcHBlck5vZGVfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgK
aW5kZXggYTE1NjgxYy4uMmEzOGI5MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCkBAIC0z
Niw2ICszNiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVj
dCYgcmVjdCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplQ2hhbmdlZChjb25zdCBJbnRT
aXplJikgPSAwOworICAgIHZpcnR1YWwgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcigpID0g
MDsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyIHsKZGlmZiAtLWdpdCBh
L1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcCBiL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNw
cAppbmRleCA2M2NkN2Y3Li43ZDQyM2Q1IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJm
cmFtZS5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCkBAIC0zMDksOSArMzA5
LDYgQEAgdm9pZCBRV2ViRnJhbWVQcml2YXRlOjpyZW5kZXJDb21wb3NpdGVkTGF5ZXJzKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW4KICAgICBpZiAoIXJvb3RHcmFwaGljc0xheWVy
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIXRleHR1cmVNYXBwZXIpCi0gICAgICAgIHRl
eHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoY29udGV4dCk7Ci0KICAgICB0ZXh0
dXJlTWFwcGVyLT5zZXRHcmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAgICAgdGV4dHVyZU1hcHBl
ci0+c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LT5pbWFnZUludGVycG9sYXRp
b25RdWFsaXR5KCkpOwogICAgIHRleHR1cmVNYXBwZXItPnNldFRleHREcmF3aW5nTW9kZShjb250
ZXh0LT50ZXh0RHJhd2luZ01vZGUoKSk7CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJm
cmFtZV9wLmggYi9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmgKaW5kZXggNjM0ZTIxYi4uN2Mw
ZDIzNSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oCisrKyBiL1dlYktp
dC9xdC9BcGkvcXdlYmZyYW1lX3AuaApAQCAtMTEzLDcgKzExMyw3IEBAIHB1YmxpYzoKICAgICBp
bnQgbWFyZ2luSGVpZ2h0OwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNF
KFRFWFRVUkVfTUFQUEVSKQogICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIq
IHJvb3RHcmFwaGljc0xheWVyOwotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiB0
ZXh0dXJlTWFwcGVyOworICAgIE93blB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiB0ZXh0dXJl
TWFwcGVyOwogI2VuZGlmCiAgICAgYm9vbCB6b29tVGV4dE9ubHk7CiB9OwpkaWZmIC0tZ2l0IGEv
V2ViS2l0L3F0L0NoYW5nZUxvZyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggODcyZWFkMS4u
OGJhOWE1YyAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvcXQv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTAtMTEtMDggIE5vYW0gUm9zZW50aGFsICA8
bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGgg
Um9oZGUgQ2hyaXN0aWFuc2VuLgorCisgICAgICAgIFtUZXhtYXBdIFtRdF0gVGV4dHVyZSBtYXBw
ZXIgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDcwNzAKKworICAgICAgICBSZW9yZ2FuaXplZCB0aGUgdGV4dHVy
ZU1hcHBlciB0byBiZSBhIG1lbWJlciBvZiBRV2ViRnJhbWVQcml2YXRlLCB0byBoZWxwIHdpdGgg
bWFraW5nCisgICAgICAgIFRleHR1cmVNYXBwZXIgdGhyZWFkLXNhZmUuCisKKyAgICAgICAgKiBB
cGkvcXdlYmZyYW1lLmNwcDoKKyAgICAgICAgKFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlckNvbXBv
c2l0ZWRMYXllcnMpOgorICAgICAgICAqIEFwaS9xd2ViZnJhbWVfcC5oOgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUxheWVyUHJveHlRdDo6c2V0VGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUxheWVyUHJveHlRdDo6dGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUxheWVyUHJveHlRV2lkZ2V0OjpQbGF0Zm9ybUxheWVyUHJveHlRV2lkZ2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXJQcm94eVFHcmFwaGljc09iamVjdDo6UGxhdGZvcm1M
YXllclByb3h5UUdyYXBoaWNzT2JqZWN0KToKKwogMjAxMC0xMS0wNyAgQWRhbSBCYXJ0aCAgPGFi
YXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZm
IC0tZ2l0IGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAgYi9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcAppbmRleCA0ZDQyYzM5Li45ZmE1
YmY3IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNw
cAorKysgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcApAQCAtMjEs
MTUgKzIxLDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlICJQYWdlQ2xpZW50
UXQuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUXQuaCIKICNpbmNsdWRlICJ0ZXhtYXAvVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKLQorI2luY2x1ZGUgPFFHcmFwaGljc1NjZW5lPgor
I2luY2x1ZGUgPFFHcmFwaGljc1ZpZXc+CiAjaWYgZGVmaW5lZChRX1dTX1gxMSkKICNpbmNsdWRl
IDxRWDExSW5mbz4KICNlbmRpZgogCiAjaWZkZWYgUVRfT1BFTkdMX0xJQgorI2luY2x1ZGUgIm9w
ZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCIKICNpbmNsdWRlIDxRR0xXaWRnZXQ+CiAjZW5kaWYKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAm
JiBVU0UoVEVYVFVSRV9NQVBQRVIpICAgIApAQCAtNDUsNiArNDksMTEgQEAgcHVibGljOgogICAg
ICAgICBtX2ZyYW1lLT5kLT5yb290R3JhcGhpY3NMYXllciA9IG1fbGF5ZXI7CiAgICAgfQogCisg
ICAgdm9pZCBzZXRUZXh0dXJlTWFwcGVyKFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gdGV4dHVy
ZU1hcHBlcikKKyAgICB7CisgICAgICAgIG1fZnJhbWUtPmQtPnRleHR1cmVNYXBwZXIgPSB0ZXh0
dXJlTWFwcGVyOworICAgIH0KKwogICAgIHZpcnR1YWwgflBsYXRmb3JtTGF5ZXJQcm94eVF0KCkK
ICAgICB7CiAgICAgICAgIGlmIChtX2xheWVyKQpAQCAtNTMsNiArNjIsMTEgQEAgcHVibGljOgog
ICAgICAgICAgICAgbV9mcmFtZS0+ZC0+cm9vdEdyYXBoaWNzTGF5ZXIgPSAwOwogICAgIH0KIAor
ICAgIHZpcnR1YWwgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcigpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9mcmFtZS0+ZC0+dGV4dHVyZU1hcHBlci5nZXQoKTsKKyAgICB9CisKICAgICAv
LyBTaW5jZSB3ZSBqdXN0IHBhaW50IHRoZSBjb21wb3NpdGVkIHRyZWUgYW5kIG5ldmVyIGNyZWF0
ZSBhIHNwZWNpYWwgaXRlbSBmb3IgaXQsIHdlIGRvbid0IGhhdmUgdG8gaGFuZGxlIGl0cyBzaXpl
IGNoYW5nZXMuCiAgICAgdm9pZCBzZXRTaXplQ2hhbmdlZChjb25zdCBJbnRTaXplJikgeyB9CiAK
QEAgLTY5LDYgKzgzLDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChtX3dpZGdldCkK
ICAgICAgICAgICAgIG1fd2lkZ2V0LT5pbnN0YWxsRXZlbnRGaWx0ZXIodGhpcyk7CisKKyAgICAg
ICAgaWYgKHRleHR1cmVNYXBwZXIoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBz
ZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXJRdDo6Y3JlYXRlKCkpOwogICAgIH0KIAogICAg
IC8vIFdlIGRvbid0IHdhbnQgYSBodWdlIHJlZ2lvbi1jbGlwIG9uIHRoZSBjb21wb3NpdGluZyBs
YXllcnM7IGluc3RlYWQgd2UgdW5pdGUgdGhlIHJlY3RhbmdsZXMgdG9nZXRoZXIKQEAgLTEwMyw2
ICsxMjIsMTcgQEAgcHVibGljOgogICAgICAgICA6IFBsYXRmb3JtTGF5ZXJQcm94eVF0KGZyYW1l
LCBsYXllciwgb2JqZWN0KQogICAgICAgICAsIG1fZ3JhcGhpY3NJdGVtKG9iamVjdCkKICAgICB7
CisgICAgICAgIGlmICh0ZXh0dXJlTWFwcGVyKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyNp
ZmRlZiBRVF9PUEVOR0xfTElCCisgICAgICAgIFFHcmFwaGljc1ZpZXcqIHZpZXcgPSBvYmplY3Qt
PnNjZW5lKCktPnZpZXdzKClbMF07CisgICAgICAgIGlmICh2aWV3ICYmIHZpZXctPnZpZXdwb3J0
KCkgJiYgdmlldy0+dmlld3BvcnQoKS0+aW5oZXJpdHMoIlFHTFdpZGdldCIpKSB7CisgICAgICAg
ICAgICBzZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgc2V0VGV4dHVyZU1hcHBl
cihUZXh0dXJlTWFwcGVyUXQ6OmNyZWF0ZSgpKTsKICAgICB9CiAKICAgICB2b2lkIHNldE5lZWRz
RGlzcGxheSgpCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>