<?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>101291</bug_id>
          
          <creation_ts>2012-11-05 18:40:13 -0800</creation_ts>
          <short_desc>[EFL] Refactor GraphicsContext3DEFL</short_desc>
          <delta_ts>2012-11-24 09:36:48 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>102619</dependson>
    
    <dependson>102687</dependson>
    
    <dependson>103179</dependson>
          <blocked>101286</blocked>
    
    <blocked>102991</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Kalyan">kalyan.kondapally</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dino</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hw1008.kim</cc>
    
    <cc>igor.oliveira</cc>
    
    <cc>jesus</cc>
    
    <cc>jussi.kukkonen</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>mrobinson</cc>
    
    <cc>noam</cc>
    
    <cc>ostap73</cc>
    
    <cc>rakuco</cc>
    
    <cc>sakari.poussa</cc>
    
    <cc>tmpsantos</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yael</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>759145</commentid>
    <comment_count>0</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-05 18:40:13 -0800</bug_when>
    <thetext>Refactor GraphicsContext3DEFL class

To help with the following things:
1) Easy Context Management for different render types.
2) To be able to easily add support for different gl backends.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759151</commentid>
    <comment_count>1</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-11-05 18:48:29 -0800</bug_when>
    <thetext>Please add [EFL] prefix for EFL bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759322</commentid>
    <comment_count>2</comment_count>
      <attachid>172498</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-06 00:00:08 -0800</bug_when>
    <thetext>Created attachment 172498
initial patch

First draft.

Support for Evas is not yet there. Idea is to get some initial feedback. This patch includes the interface(GLNativeContext) and an example implementation(GLXContextWrapper).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759337</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-06 00:19:44 -0800</bug_when>
    <thetext>Attachment 172498 did not pass style-queue:

Source/WebCore/platform/graphics/efl/GLNativeContext.h:21:  #ifndef header guard has wrong style, please use: GLNativeContext_h  [build/header_guard] [5]
Source/WebCore/platform/graphics/efl/GLNativeContext.h:24:  Header file should not contain WebCore config.h. Should be: alphabetically sorted.  [build/include_order] [4]
Source/WebCore/platform/graphics/efl/GLNativeContext.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/graphics/efl/GLNativeContext.h:28:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/graphics/efl/GLNativeContext.h:36:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/platform/graphics/efl/GLNativeContext.h:40:  The parameter name &quot;renderStyle&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/efl/GLNativeContext.h:40:  Missing space after ,  [whitespace/comma] [3]
Source/WebCore/platform/graphics/efl/GLNativeContext.h:40:  Extra space between static and PassOwnPtr  [whitespace/declaration] [3]
Source/WebCore/platform/graphics/efl/GLNativeContext.h:62:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebCore/platform/graphics/efl/GLNativeContext.h:69:  Missing space after ,  [whitespace/comma] [3]
Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:21:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:22:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:33:  Missing space after ,  [whitespace/comma] [3]
Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:42:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:43:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:47:  Missing space after ,  [whitespace/comma] [3]
Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:120:  Missing space after ,  [whitespace/comma] [3]
Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:122:  Missing space after ,  [whitespace/comma] [3]
Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:181:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebCore/platform/graphics/efl/GLXContextWrapper.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/platform/graphics/efl/GLXContextWrapper.cpp:81:  Missing space after ,  [whitespace/comma] [3]
Source/WebCore/platform/graphics/efl/GLXContextWrapper.cpp:83:  Missing space after ,  [whitespace/comma] [3]
Source/WebCore/platform/graphics/efl/GLXContextWrapper.cpp:84:  Missing space after ,  [whitespace/comma] [3]
Source/WebCore/platform/graphics/efl/GLXContextWrapper.cpp:86:  Declaration has space between type name and * in GLContextGLX *sharedContext  [whitespace/declaration] [3]
Source/WebCore/platform/graphics/efl/GLXContextWrapper.cpp:89:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/graphics/efl/GLXContextWrapper.cpp:139:  Extra space between return and m_platformContext  [whitespace/declaration] [3]
Source/WebCore/platform/graphics/efl/GLXContextWrapper.cpp:145:  Extra space before ) in if  [whitespace/parens] [5]
Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.h:49:  The parameter name &quot;pageClient&quot; adds no information,Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/PlatformEfl.cmake&apos;, u&apos;Sourc...&quot; exit_code: 1
 so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:55:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:42:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:57:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:60:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:218:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/platform/graphics/efl/GLXContextWrapper.h:26:  #ifndef header guard has wrong style, please use: GLXContextWrapper_h  [build/header_guard] [5]
Source/WebCore/platform/graphics/efl/GLXContextWrapper.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/graphics/efl/GLXContextWrapper.h:42:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/graphics/efl/GLXContextWrapper.h:44:  &quot;GL/glx.h&quot; already included at Source/WebCore/platform/graphics/efl/GLXContextWrapper.h:31  [build/include] [4]
Source/WebCore/platform/graphics/efl/GLXContextWrapper.h:52:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/platform/graphics/efl/GLXContextWrapper.h:58:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/platform/graphics/efl/GLXContextWrapper.h:64:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/platform/graphics/efl/GLXContextWrapper.h:76:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/platform/graphics/efl/GLXContextWrapper.h:79:  Missing space after ,  [whitespace/comma] [3]
Total errors found: 44 in 8 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>759338</commentid>
    <comment_count>4</comment_count>
      <attachid>172498</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-11-06 00:20:30 -0800</bug_when>
    <thetext>Comment on attachment 172498
initial patch

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

&gt; Source/WebCore/PlatformEfl.cmake:301
&gt; +    platform/graphics/efl/GLXContextWrapper.cpp

What for platform that don&apos;t have X at all? Say wayland?

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:23
&gt; +#include &quot;config.h&quot;
&gt; +#include &lt;wtf/MainThread.h&gt;
&gt; +#include &quot;GLNativeContext.h&quot;
&gt; +#include &quot;GLXContextWrapper.h&quot;

Thsi is not correct. Check style guide

#include &quot;config.h&quot;
#include &quot;GLNativeContext.h&quot;

#include the rest

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:33
&gt; +PassOwnPtr&lt;GLNativeContext&gt; GLNativeContext::createContext(GraphicsContext3D::RenderStyle renderStyle,uint64_t windowHandle,bool useSharedContext)

space before bool, uint64_t etc. Someone should fix the style checker if it is not catching this

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:43
&gt; +    if (!success) {
&gt; +         return nullptr;
&gt; +    }

no need for braces

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:47
&gt; +        if (OwnPtr&lt;GLNativeContext&gt; glxContext  = GLNativeContext::createOffScreenContext(useSharedContext ? GLNativeContext::sharedOffScreenContext():0,windowHandle))

no double space before ==, space before windowHandle

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:51
&gt; +        if (OwnPtr&lt;GLNativeContext&gt; glxContext  = GLNativeContext::createCurrentContextWrapper())

same

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:66
&gt; +    return sharing.get();

sharing? m_sharedInstance ?

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:120
&gt; +PassOwnPtr&lt;GLNativeContext&gt; GLNativeContext::createOffScreenContext(GLNativeContext* sharingContext,uint64_t windowHandle)

space issue

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:122
&gt; +    OwnPtr&lt;GLNativeContext&gt; glxContext = adoptPtr(new GLXOffScreenContextWrapper(sharingContext,windowHandle));

same

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:137
&gt; +// FIXME: This should be a thread local eventually if we
&gt; +// want to support using GLNativeContexts from multiple threads.

a local thread? what do you mean with that?

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:159
&gt; +bool GLNativeContext::pushContext()
&gt; +{
&gt; +    ASSERT(isMainThread());
&gt; +    gCurrentContext = this;
&gt; +    return true;
&gt; +}

That doesnt look like a stack, so why it is called push? interface? comment?

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:177
&gt; +void GLNativeContext::swapBuffers()
&gt; +{
&gt; +    ASSERT(isMainThread());
&gt; +}

comment needed

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:184
&gt; +
&gt; +
&gt; +

too many newlines

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.h:40
&gt; +    static  PassOwnPtr&lt;GLNativeContext&gt; createContext(GraphicsContext3D::RenderStyle renderStyle,uint64_t windowHandle = 0,bool useSharedContext = false);

You should really fix all this style :)

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.h:58
&gt; +    // Make Context as current. It does nothing if it is already current.

These comments add no value, the name is already descriptive

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.h:62
&gt; +    //Taken from cairo port.

What does that mean? Don&apos;t we need them? :)

&gt; Source/WebCore/platform/graphics/efl/GLXContextWrapper.cpp:32
&gt; +#include &quot;GLXContextWrapper.h&quot;
&gt; +
&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +
&gt; +GLXContextWrapper::GLXContextWrapper()

excessive newlines

&gt; Source/WebCore/platform/graphics/efl/GLXContextWrapper.cpp:33
&gt; +    :GLNativeContext()

space after :

&gt; Source/WebCore/platform/graphics/efl/GLXContextWrapper.cpp:35
&gt; +

remove newline

&gt; Source/WebCore/platform/graphics/efl/GLXContextWrapper.cpp:40
&gt; +#if USE(EGL)

isn&apos;t this GLX? Why that name of the class then

&gt; Source/WebCore/platform/graphics/efl/GLXContextWrapper.cpp:41
&gt; +    return eglGetCurrentSurface (EGL_DRAW);

no space before (

&gt; Source/WebCore/platform/graphics/efl/GLXContextWrapper.cpp:107
&gt; +    doPopContext();

not webkit style naming

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:-139
&gt; -    Evas_GL_Config config = {
&gt; -        EVAS_GL_RGBA_8888,
&gt; -        EVAS_GL_DEPTH_BIT_8,
&gt; -        EVAS_GL_STENCIL_NONE, // FIXME: set EVAS_GL_STENCIL_BIT_8 after fixing Evas_GL bug.
&gt; -        EVAS_GL_OPTIONS_NONE,
&gt; -        EVAS_GL_MULTISAMPLE_NONE
&gt; -    };
&gt; -

All this code is not needed anymore?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759359</commentid>
    <comment_count>5</comment_count>
      <attachid>172498</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-11-06 00:58:29 -0800</bug_when>
    <thetext>Comment on attachment 172498
initial patch

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

This patch is also missing a ChangeLog.

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:73
&gt; +// Because of driver bugs, exiting the program when there are active pbuffers
&gt; +// can crash the X server (this has been observed with the official Nvidia drivers).
&gt; +// We need to ensure that we clean everything up on exit. There are several reasons
&gt; +// that GraphicsContext3Ds will still be alive at exit, including user error (memory
&gt; +// leaks) and the page cache. In any case, we don&apos;t want the X server to crash.

This part doesn&apos;t make much sense to me. atexit() in libraries is a very dangerous thing to use, especially given that you don&apos;t know in which order your handlers are called. (what if the nvidia driver also installs atexit() handlers?)

Besides, the process can crash at any time and then it would bring down the x server, too -&gt; I don&apos;t think we should try to work around bugs in the X server.

(JMHO, feel free to ignore)

&gt; Source/WebCore/platform/graphics/efl/GLXContextWrapper.cpp:54
&gt; +PlatformNativeContext GLXContextWrapper::currentNativeContext()
&gt; +{
&gt; +#if USE(EGL)
&gt; +    return eglGetCurrentContext();
&gt; +#else
&gt; +    return glXGetCurrentContext();
&gt; +#endif
&gt; +}

It seems wrong to me to mix EGL and GLX code in a file/class that has GLX in its name. They are different APIs (serving similar purposes, but they are not the same)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759369</commentid>
    <comment_count>6</comment_count>
      <attachid>172498</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-11-06 01:19:58 -0800</bug_when>
    <thetext>Comment on attachment 172498
initial patch

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

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:65
&gt; +    DEFINE_STATIC_LOCAL(OwnPtr&lt;GLNativeContext&gt;, sharing, (createOffScreenContext()));

why OwnPtr here?

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:111
&gt; +    for (size_t i = 0; i &lt; contextList.size(); ++i)

re-calculating the size each time?

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.h:46
&gt; +    virtual PlatformGraphicsContext3D handle() = 0;

const method?

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.h:49
&gt; +    virtual bool isCurrentContext() = 0;

const method?

&gt; Source/WebCore/platform/graphics/efl/GLXContextWrapper.h:87
&gt; +    void doPopContext();

do we really need this method? isn&apos;t popContex enough?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759580</commentid>
    <comment_count>7</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-06 06:00:29 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 172498 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=172498&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/PlatformEfl.cmake:301
&gt; &gt; +    platform/graphics/efl/GLXContextWrapper.cpp
&gt; 
&gt; What for platform that don&apos;t have X at all? Say wayland?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:23
&gt; &gt; +#include &quot;config.h&quot;
&gt; &gt; +#include &lt;wtf/MainThread.h&gt;
&gt; &gt; +#include &quot;GLNativeContext.h&quot;
&gt; &gt; +#include &quot;GLXContextWrapper.h&quot;
&gt; 
&gt; Thsi is not correct. Check style guide
&gt; 
&gt; #include &quot;config.h&quot;
&gt; #include &quot;GLNativeContext.h&quot;
&gt; 
&gt; #include the rest
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:33
&gt; &gt; +PassOwnPtr&lt;GLNativeContext&gt; GLNativeContext::createContext(GraphicsContext3D::RenderStyle renderStyle,uint64_t windowHandle,bool useSharedContext)
&gt; 
&gt; space before bool, uint64_t etc. Someone should fix the style checker if it is not catching this
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:43
&gt; &gt; +    if (!success) {
&gt; &gt; +         return nullptr;
&gt; &gt; +    }
&gt; 
&gt; no need for braces
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:47
&gt; &gt; +        if (OwnPtr&lt;GLNativeContext&gt; glxContext  = GLNativeContext::createOffScreenContext(useSharedContext ? GLNativeContext::sharedOffScreenContext():0,windowHandle))
&gt; 
&gt; no double space before ==, space before windowHandle
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:51
&gt; &gt; +        if (OwnPtr&lt;GLNativeContext&gt; glxContext  = GLNativeContext::createCurrentContextWrapper())
&gt; 
&gt; same
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:66
&gt; &gt; +    return sharing.get();
&gt; 
&gt; sharing? m_sharedInstance ?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:120
&gt; &gt; +PassOwnPtr&lt;GLNativeContext&gt; GLNativeContext::createOffScreenContext(GLNativeContext* sharingContext,uint64_t windowHandle)
&gt; 
&gt; space issue
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:122
&gt; &gt; +    OwnPtr&lt;GLNativeContext&gt; glxContext = adoptPtr(new GLXOffScreenContextWrapper(sharingContext,windowHandle));
&gt; 
&gt; same
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:137
&gt; &gt; +// FIXME: This should be a thread local eventually if we
&gt; &gt; +// want to support using GLNativeContexts from multiple threads.
&gt; 
&gt; a local thread? what do you mean with that?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:159
&gt; &gt; +bool GLNativeContext::pushContext()
&gt; &gt; +{
&gt; &gt; +    ASSERT(isMainThread());
&gt; &gt; +    gCurrentContext = this;
&gt; &gt; +    return true;
&gt; &gt; +}
&gt; 
&gt; That doesnt look like a stack, so why it is called push? interface? comment?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:177
&gt; &gt; +void GLNativeContext::swapBuffers()
&gt; &gt; +{
&gt; &gt; +    ASSERT(isMainThread());
&gt; &gt; +}
&gt; 
&gt; comment needed
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:184
&gt; &gt; +
&gt; &gt; +
&gt; &gt; +
&gt; 
&gt; too many newlines
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeContext.h:40
&gt; &gt; +    static  PassOwnPtr&lt;GLNativeContext&gt; createContext(GraphicsContext3D::RenderStyle renderStyle,uint64_t windowHandle = 0,bool useSharedContext = false);
&gt; 
&gt; You should really fix all this style :)
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeContext.h:58
&gt; &gt; +    // Make Context as current. It does nothing if it is already current.
&gt; 
&gt; These comments add no value, the name is already descriptive
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeContext.h:62
&gt; &gt; +    //Taken from cairo port.
&gt; 
&gt; What does that mean? Don&apos;t we need them? :)
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLXContextWrapper.cpp:32
&gt; &gt; +#include &quot;GLXContextWrapper.h&quot;
&gt; &gt; +
&gt; &gt; +
&gt; &gt; +namespace WebCore {
&gt; &gt; +
&gt; &gt; +
&gt; &gt; +GLXContextWrapper::GLXContextWrapper()
&gt; 
&gt; excessive newlines
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLXContextWrapper.cpp:33
&gt; &gt; +    :GLNativeContext()
&gt; 
&gt; space after :
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLXContextWrapper.cpp:35
&gt; &gt; +
&gt; 
&gt; remove newline
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLXContextWrapper.cpp:40
&gt; &gt; +#if USE(EGL)
&gt; 
&gt; isn&apos;t this GLX? Why that name of the class then
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLXContextWrapper.cpp:41
&gt; &gt; +    return eglGetCurrentSurface (EGL_DRAW);
&gt; 
&gt; no space before (
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLXContextWrapper.cpp:107
&gt; &gt; +    doPopContext();
&gt; 
&gt; not webkit style naming
&gt; 

Please ignore the style checks for now. This was more to see if the approach would be good enough for us. All the things will be fixed in the next patch. 

&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:-139
&gt; &gt; -    Evas_GL_Config config = {
&gt; &gt; -        EVAS_GL_RGBA_8888,
&gt; &gt; -        EVAS_GL_DEPTH_BIT_8,
&gt; &gt; -        EVAS_GL_STENCIL_NONE, // FIXME: set EVAS_GL_STENCIL_BIT_8 after fixing Evas_GL bug.
&gt; &gt; -        EVAS_GL_OPTIONS_NONE,
&gt; &gt; -        EVAS_GL_MULTISAMPLE_NONE
&gt; &gt; -    };
&gt; &gt; -
&gt; 
&gt; All this code is not needed anymore?

This would come back with evas implementation, otherwise no it is not needed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759581</commentid>
    <comment_count>8</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-06 06:02:32 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 172498 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=172498&amp;action=review
&gt; 
&gt; This patch is also missing a ChangeLog.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:73
&gt; &gt; +// Because of driver bugs, exiting the program when there are active pbuffers
&gt; &gt; +// can crash the X server (this has been observed with the official Nvidia drivers).
&gt; &gt; +// We need to ensure that we clean everything up on exit. There are several reasons
&gt; &gt; +// that GraphicsContext3Ds will still be alive at exit, including user error (memory
&gt; &gt; +// leaks) and the page cache. In any case, we don&apos;t want the X server to crash.
&gt; 
&gt; This part doesn&apos;t make much sense to me. atexit() in libraries is a very dangerous thing to use, especially given that you don&apos;t know in which order your handlers are called. (what if the nvidia driver also installs atexit() handlers?)
&gt; 
&gt; Besides, the process can crash at any time and then it would bring down the x server, too -&gt; I don&apos;t think we should try to work around bugs in the X server.
&gt; 
&gt; (JMHO, feel free to ignore)
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLXContextWrapper.cpp:54
&gt; &gt; +PlatformNativeContext GLXContextWrapper::currentNativeContext()
&gt; &gt; +{
&gt; &gt; +#if USE(EGL)
&gt; &gt; +    return eglGetCurrentContext();
&gt; &gt; +#else
&gt; &gt; +    return glXGetCurrentContext();
&gt; &gt; +#endif
&gt; &gt; +}
&gt; 
&gt; It seems wrong to me to mix EGL and GLX code in a file/class that has GLX in its name. They are different APIs (serving similar purposes, but they are not the same)

k, will seperate them to different classes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764362</commentid>
    <comment_count>9</comment_count>
      <attachid>173639</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-12 06:44:24 -0800</bug_when>
    <thetext>Created attachment 173639
patch

GraphicsContext3DEFL would create the surface and context as needed. We don&apos;t recreate the surface when resized. Contexts are created with  glXCreateContextAttribsARB(if supported) else fallback to glxCreateNewContext. Implemented partial support for EXT_robustness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764379</commentid>
    <comment_count>10</comment_count>
      <attachid>173639</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-11-12 07:04:17 -0800</bug_when>
    <thetext>Comment on attachment 173639
patch

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

Jsut a quick look though, many style issues, should be easy to fix. The changelog needs so info on what you changed, what the different classes represents etc

&gt; Source/WebCore/ChangeLog:37
&gt; +        (WebCore::GLNativeContext::destroy):
&gt; +        * platform/graphics/efl/GLNativeContext.h: Added.
&gt; +        (WebCore):
&gt; +        (GLNativeContext):
&gt; +        * platform/graphics/efl/GLNativeSurface.cpp: Added.
&gt; +        (WebCore):
&gt; +        (WebCore::GLNativeSurface::createOffscreenSurface):
&gt; +        (WebCore::GLNativeSurface::createTransportSurface):
&gt; +        (WebCore:::m_sharedDisplay):

For such big changes we normally add comments here to say what changed and why

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:26
&gt; +#include &quot;config.h&quot;

After the config include the next include must be the header file for the cpp

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:30
&gt; +#include &quot;GLNativeContext.h&quot;

ie this one

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:38
&gt; +PassOwnPtr&lt;GLNativeContext&gt; GLNativeContext::createContext(GraphicsContext3D::RenderStyle renderStyle)

I don&apos;t like Style so much, rather Mode. Style means CSS normally

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:41
&gt; +{
&gt; +
&gt; +    static bool initializedShims = false;

unneeded newline

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:44
&gt; +    if (!initializedShims) {

didInitializeShims

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:47
&gt; +        glGetGraphicsResetStatusARB = (PFNGLGETGRAPHICSRESETSTATUSARBPROC)glXGetProcAddressARB((const GLubyte*)&quot;glGetGraphicsResetStatusARB&quot;);

We should probably use C++ casts here

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:68
&gt; +    }
&gt; +    return nullptr;
&gt; +}

i would add newline before retunr

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:106
&gt; +    if (surface &amp;&amp; !surface-&gt;handle().isValid())
&gt; +        return false;

In this case you dont need to relase anything? or set m_currentContext to 0?

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:117
&gt; +    } else  if (platformMakeCurrent(surface)) {

no double space before if

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:202
&gt; +#endif
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +

wow unneeded newlines

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.h:41
&gt; +class GLNativeContext {
&gt; +
&gt; +    WTF_MAKE_NONCOPYABLE(GLNativeContext);
&gt; +public:

I would add WTF... to the top

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.h:48
&gt; +    enum NativeContextReset {
&gt; +        NativeCONTEXT_NO_ERROR = 0,
&gt; +        NativeCONTEXT_GUILTY_CONTEXT_RESET = 0x8253,
&gt; +        NativeCONTEXT_INNOCENT_CONTEXT_RESET = 0x8254,
&gt; +        NativeCONTEXT_UNKNOWN_CONTEXT_RESET = 0x8255,
&gt; +    };

any comment to where these numbers come from?

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.h:60
&gt; +    // Makes this and surface as current context and drawable.
&gt; +    // Calling this function with no surface is same as calling releaseCurrent.
&gt; +    // Does nothing if this is already current Context.
&gt; +    bool makeCurrent(GLNativeSurface* = 0);

Why isn&apos;t an ASSERT better? ie. forcing people to actually use releaseCurrent

&gt; Source/WebCore/platform/graphics/efl/GLNativeSurface.cpp:38
&gt; +namespace WebCore {
&gt; +
&gt; +
&gt; +PassRefPtr&lt;GLNativeSurface&gt; GLNativeSurface::createOffscreenSurface()

only one newline

&gt; Source/WebCore/platform/graphics/efl/GLNativeSurface.cpp:43
&gt; +        return surface;

.release() no?

&gt; Source/WebCore/platform/graphics/efl/GLNativeSurface.cpp:98
&gt; +void GLNativeSurface::copyTexture(uint32_t texture, const IntRect&amp; sourceRect)
&gt; +{
&gt; +
&gt; +    if (!m_fboId)

no newline here!

&gt; Source/WebCore/platform/graphics/efl/GLNativeSurface.cpp:128
&gt; +void GLNativeSurface::setGeometry(const IntRect&amp;  newRect)

no double newline before newRect

&gt; Source/WebCore/platform/graphics/efl/GLNativeSurface.h:71
&gt; +    // Returns Geometry of surface.
&gt; +    const IntRect&amp; geometry() const;
&gt; +
&gt; +    // Get the underlying platform specific surface handle.
&gt; +    GraphicsSurfaceToken handle() const;
&gt; +
&gt; +    platformDisplay sharedDisplay() const;
&gt; +
&gt; +    // Swaps front and back buffers. This has no effect for single buffered surfaces.
&gt; +    virtual void swapBuffers();
&gt; +
&gt; +    // If Supported, Copies contents of texture to back buffer.
&gt; +    virtual void copyTexture(uint32_t texture, const IntRect&amp; sourceRect);
&gt; +
&gt; +    // Resizes the viewPort on supported implementations.
&gt; +    virtual void setGeometry(const IntRect&amp; newRect);

These comments are mostly useless or self explanatory

&gt; Source/WebCore/platform/graphics/efl/GLXContextWrapper.cpp:102
&gt; +    if (config) {
&gt; +
&gt; +        initializeARBExtensions();

No if/for/while etc content can start with newline

&gt; Source/WebCore/platform/graphics/efl/GLXContextWrapper.cpp:109
&gt; +            m_supportsRobustContextCreation = true;

I wonder if we can find a better name

&gt; Source/WebCore/platform/graphics/efl/GLXContextWrapper.cpp:163
&gt; +#endif
&gt; +
&gt; +
&gt; +

newlines...

&gt; Source/WebCore/platform/graphics/efl/GLXContextWrapper.h:33
&gt; +class GLXCurrentContextWrapper :public GLNativeContext {

space after :

&gt; Source/WebCore/platform/graphics/efl/GLXSurface.cpp:48
&gt; +    :GLNativeSurface()

space after :

&gt; Source/WebCore/platform/graphics/efl/GLXSurface.h:39
&gt; +class SharedResources {

why not share from RefCounted?

&gt; Source/WebCore/platform/graphics/efl/GLXSurface.h:45
&gt; +    SharedResources()
&gt; +    {
&gt; +        ++m_refCount;
&gt; +    }
&gt; +

instead of this!

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:105
&gt; +        m_contextLostCallback-&gt;onContextLost();

we dont use on, what about contextDidReset() or so</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764417</commentid>
    <comment_count>11</comment_count>
      <attachid>173639</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-11-12 07:43:10 -0800</bug_when>
    <thetext>Comment on attachment 173639
patch

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

&gt; Source/WebCore/PlatformEfl.cmake:288
&gt; +    platform/graphics/efl/GLXSurface.cpp
&gt; +    platform/graphics/efl/GLXContextWrapper.cpp

Why not put these in platform/graphics/glx?

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:28
&gt; +#if USE(3D_GRAPHICS) || USE(ACCELERATED_COMPOSITING)

Are both really needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764430</commentid>
    <comment_count>12</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-12 07:59:49 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 173639 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=173639&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/PlatformEfl.cmake:288
&gt; &gt; +    platform/graphics/efl/GLXSurface.cpp
&gt; &gt; +    platform/graphics/efl/GLXContextWrapper.cpp
&gt; Why not put these in platform/graphics/glx?

will move it under glx

&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:28
&gt; &gt; +#if USE(3D_GRAPHICS) || USE(ACCELERATED_COMPOSITING)
&gt; 
&gt; Are both really needed?

USE(ACCELERATED_COMPOSITING) should be enough I guess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764440</commentid>
    <comment_count>13</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-12 08:13:49 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; (From update of attachment 173639 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=173639&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/PlatformEfl.cmake:288
&gt; &gt; &gt; +    platform/graphics/efl/GLXSurface.cpp
&gt; &gt; &gt; +    platform/graphics/efl/GLXContextWrapper.cpp
&gt; &gt; Why not put these in platform/graphics/glx?
&gt; 
&gt; will move it under glx

I started to think if platform/graphics/surfaces/glx is a better place??</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767099</commentid>
    <comment_count>14</comment_count>
      <attachid>174209</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-14 11:27:10 -0800</bug_when>
    <thetext>Created attachment 174209
patch

Review changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767110</commentid>
    <comment_count>15</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-14 11:32:06 -0800</bug_when>
    <thetext>Review flags not added yet, there seems to be issue of applying the patch(from cwt analysis). Working on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767271</commentid>
    <comment_count>16</comment_count>
      <attachid>174209</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-11-14 13:54:20 -0800</bug_when>
    <thetext>Comment on attachment 174209
patch

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

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:38
&gt; +static PFNGLGETGRAPHICSRESETSTATUSARBPROC  glGetGraphicsResetStatusARB = 0;

remove double space before gl

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:44
&gt; +    static bool initializedShims = false;
&gt; +    static bool didInitializeShims = true;

why both?

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:155
&gt; +bool GLNativeContext::isContextLost() const
&gt; +{
&gt; +    return m_contextLost;
&gt; +}

isValid ?

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:166
&gt; +PlatformNativeContext GLNativeContext::handle() const

It is confusing that the class is called GL*NativeContext* but this handle() returns the PlatformNativeContext.

Should the class just be called GLContext? Better name?

&gt; Source/WebCore/platform/graphics/efl/GLNativeContext.h:72
&gt; +    // Destroys any gl resources associated with this context.

GL

&gt; Source/WebCore/platform/graphics/efl/GLNativeSurface.cpp:47
&gt; +#if HAVE(GLX)
&gt; +    OwnPtr&lt;GLNativeSurface&gt; surface =  adoptPtr(new GLXPBuffer());
&gt; +
&gt; +    if (surface-&gt;handle().isValid())
&gt; +        return surface.release();
&gt; +#endif

Later this will handle EGL?

&gt; Source/WebCore/platform/graphics/efl/GLNativeSurface.cpp:92
&gt; +PlatformSurfaceConfig GLNativeSurface::surfaceConfig()

::configuration()

&gt; Source/WebCore/platform/graphics/efl/GLNativeSurface.h:43
&gt; +public:
&gt; +

I would move public: down one line and remove the next newline

&gt; Source/WebCore/platform/graphics/efl/GLNativeSurface.h:47
&gt; +    // Create a GL surface used for offsreen rendering. The results can be transported

*screen* (spelling)

&gt; Source/WebCore/platform/graphics/efl/GLNativeSurface.h:79
&gt; +    bool m_RestoreNeeded;

non capital r!

&gt; Source/WebCore/platform/graphics/efl/GLNativeSurface.h:85
&gt; +    PlatformNativeSurface m_drawable;
&gt; +
&gt; +};

remove newline

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:170
&gt; +    m_private-&gt;freeResources();

releaseResources() ?

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:46
&gt; +    , m_PendingSurfaceResize(false)

non capital P!

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:71
&gt; +            freeResources();

releaseResources()

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:119
&gt; +        m_contextLostCallback-&gt;onContextLost();

We dont use on_ something... didLooseContext

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.h:39
&gt; +static long X11Redirect = 1L &lt;&lt; 9;

Where does this come from? comment?

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.h:41
&gt; +class SharedResources : public WTF::RefCountedBase {

SharedX11Resources?

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.h:48
&gt; +            m_staticSharedResource =  new SharedResources();

no double space before new

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.h:125
&gt; +        // Didnt find any visual supporting alpha, select the first available config.

Did not *</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767726</commentid>
    <comment_count>17</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-14 22:16:40 -0800</bug_when>
    <thetext>
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:119
&gt; &gt; +        m_contextLostCallback-&gt;onContextLost();
&gt; 
&gt; We dont use on_ something... didLooseContext
&gt; 

This is a call back interface provided by graphicscontext3d.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767731</commentid>
    <comment_count>18</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-14 22:26:53 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 174209 [details])



&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeSurface.cpp:47
&gt; &gt; +#if HAVE(GLX)
&gt; &gt; +    OwnPtr&lt;GLNativeSurface&gt; surface =  adoptPtr(new GLXPBuffer());
&gt; &gt; +
&gt; &gt; +    if (surface-&gt;handle().isValid())
&gt; &gt; +        return surface.release();
&gt; &gt; +#endif
&gt; 
&gt; Later this will handle EGL?
&gt; 

Yes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767753</commentid>
    <comment_count>19</comment_count>
      <attachid>174209</attachid>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2012-11-14 23:00:34 -0800</bug_when>
    <thetext>Comment on attachment 174209
patch

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

&gt; Source/WebCore/ChangeLog:12
&gt; +

Please, explain in the changelog why you are removing the Evas code and adding a bunch of code to handle the context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768866</commentid>
    <comment_count>20</comment_count>
      <attachid>174596</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-15 20:00:27 -0800</bug_when>
    <thetext>Created attachment 174596
rebasedpatch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768869</commentid>
    <comment_count>21</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-15 20:08:01 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 174209 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174209&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:38
&gt; &gt; +static PFNGLGETGRAPHICSRESETSTATUSARBPROC  glGetGraphicsResetStatusARB = 0;
&gt; 
&gt; remove double space before gl
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:44
&gt; &gt; +    static bool initializedShims = false;
&gt; &gt; +    static bool didInitializeShims = true;
&gt; 
&gt; why both?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:155
&gt; &gt; +bool GLNativeContext::isContextLost() const
&gt; &gt; +{
&gt; &gt; +    return m_contextLost;
&gt; &gt; +}
&gt; 
&gt; isValid ?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeContext.cpp:166
&gt; &gt; +PlatformNativeContext GLNativeContext::handle() const
&gt; 
&gt; It is confusing that the class is called GL*NativeContext* but this handle() returns the PlatformNativeContext.
&gt; 
&gt; Should the class just be called GLContext? Better name?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeContext.h:72
&gt; &gt; +    // Destroys any gl resources associated with this context.
&gt; 
&gt; GL
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeSurface.cpp:47
&gt; &gt; +#if HAVE(GLX)
&gt; &gt; +    OwnPtr&lt;GLNativeSurface&gt; surface =  adoptPtr(new GLXPBuffer());
&gt; &gt; +
&gt; &gt; +    if (surface-&gt;handle().isValid())
&gt; &gt; +        return surface.release();
&gt; &gt; +#endif
&gt; 
&gt; Later this will handle EGL?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeSurface.cpp:92
&gt; &gt; +PlatformSurfaceConfig GLNativeSurface::surfaceConfig()
&gt; 
&gt; ::configuration()
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeSurface.h:43
&gt; &gt; +public:
&gt; &gt; +
&gt; 
&gt; I would move public: down one line and remove the next newline
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeSurface.h:47
&gt; &gt; +    // Create a GL surface used for offsreen rendering. The results can be transported
&gt; 
&gt; *screen* (spelling)
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeSurface.h:79
&gt; &gt; +    bool m_RestoreNeeded;
&gt; 
&gt; non capital r!
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLNativeSurface.h:85
&gt; &gt; +    PlatformNativeSurface m_drawable;
&gt; &gt; +
&gt; &gt; +};
&gt; 
&gt; remove newline
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:170
&gt; &gt; +    m_private-&gt;freeResources();
&gt; 
&gt; releaseResources() ?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:46
&gt; &gt; +    , m_PendingSurfaceResize(false)
&gt; 
&gt; non capital P!
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:71
&gt; &gt; +            freeResources();
&gt; 
&gt; releaseResources()

changed 
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:119

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.h:41
&gt; &gt; +class SharedResources : public WTF::RefCountedBase {
&gt; 
&gt; SharedX11Resources?

changed 
 
 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.h:125
&gt; &gt; +        // Didnt find any visual supporting alpha, select the first available config.
&gt; 
&gt; Did not *
fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768870</commentid>
    <comment_count>22</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-15 20:08:59 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 174209 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174209&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +
&gt; 
&gt; Please, explain in the changelog why you are removing the Evas code and adding a bunch of code to handle the context.

Updated the ChangeLog as to why this change would help us.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768874</commentid>
    <comment_count>23</comment_count>
      <attachid>174596</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-15 20:23:10 -0800</bug_when>
    <thetext>Comment on attachment 174596
rebasedpatch

Attachment 174596 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14857477</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768910</commentid>
    <comment_count>24</comment_count>
      <attachid>174596</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-11-15 21:33:08 -0800</bug_when>
    <thetext>Comment on attachment 174596
rebasedpatch

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

It seems to me there are still nits.

&gt; Source/WebCore/platform/graphics/efl/GLSurface.cpp:27
&gt; +

Don&apos;t need to add a new line.

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:118
&gt; +        // FIXME: restore context

restore -&gt; Restore

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXContext.cpp:27
&gt; +

ditto.

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXContext.cpp:46
&gt; +    if (initialized)

I don&apos;t understand this condition well. Could you explain why you need to add this check ?

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXContext.cpp:53
&gt; +// GLXOffScreenContext

ditto.

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXContext.cpp:59
&gt; +

ditto.

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXContext.cpp:74
&gt; +    if (config) {

I think early return is better for this case.

e.g)

if (!config)
    return false;

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXContext.cpp:94
&gt; +

ditto.

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:27
&gt; +

ditto.

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:75
&gt; +// GLXTransportSurface

I don&apos;t know why we need to add this comment. There is no information.

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:85
&gt; +

ditto.

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:124
&gt; +

Generally, AFAIK, WebKit doesn&apos;t like to add a new line in front of checking for null.

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:129
&gt; +    XSetWindowAttributes a;

Can&apos;t use more meaningful name ?

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:158
&gt; +

ditto.

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:166
&gt; +// GLX PBUFFER SURFACE

ditto.

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:176
&gt; +

ditto.

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:183
&gt; +

ditto.

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:207
&gt; +

ditto.

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.h:104
&gt; +        for (int i = 0; i &lt; numReturned; ++i) {

Is unsigned better ?

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.h:123
&gt; +        // Didnot find any visual supporting alpha, select the first available config.

Didnot -&gt; Did not ?

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.h:151
&gt; +                m_pbufferfbConfig =  temp[0];

Two spaces between &apos;=&apos; and &apos;temp[0]&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768912</commentid>
    <comment_count>25</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-11-15 21:34:11 -0800</bug_when>
    <thetext>CC&apos;ing Hyowon,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768917</commentid>
    <comment_count>26</comment_count>
      <attachid>174605</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-15 21:38:35 -0800</bug_when>
    <thetext>Created attachment 174605
Added missing file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768918</commentid>
    <comment_count>27</comment_count>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2012-11-15 21:39:19 -0800</bug_when>
    <thetext>The idea about optimization is really interesting, however my concern here is about maintainability of the code. Image if each vendor implemented different extensions inside WebKit, it would be a big mess.
However If the reviewers decided that this patch is a good idea  I believe this code should live inside graphics/opengl. It is also interesting for GTK guys.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768921</commentid>
    <comment_count>28</comment_count>
      <attachid>174605</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-15 21:48:02 -0800</bug_when>
    <thetext>Comment on attachment 174605
Added missing file

Attachment 174605 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14859220</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768954</commentid>
    <comment_count>29</comment_count>
      <attachid>174605</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-11-15 23:07:48 -0800</bug_when>
    <thetext>Comment on attachment 174605
Added missing file

Seems to me like this patch contains a lot of valuable things, but that it should be broken up to a few smaller patch. e.g. the use of glGetGraphicsResetStatusARB can be added in a different patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768973</commentid>
    <comment_count>30</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-11-15 23:58:21 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; The idea about optimization is really interesting, however my concern here is about maintainability of the code. Image if each vendor implemented different extensions inside WebKit, it would be a big mess.
&gt; However If the reviewers decided that this patch is a good idea  I believe this code should live inside graphics/opengl. It is also interesting for GTK guys.

I believe it is a good idea. I don&apos;t believe the extension use will run out of hand, they will be used where it makes a performance difference and the best place to make use of them is in WebKit.

I agree that graphics/opengl is a better place for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768987</commentid>
    <comment_count>31</comment_count>
      <attachid>174621</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-16 00:20:08 -0800</bug_when>
    <thetext>Created attachment 174621
review fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768992</commentid>
    <comment_count>32</comment_count>
      <attachid>174621</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-11-16 00:24:30 -0800</bug_when>
    <thetext>Comment on attachment 174621
review fixes

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

&gt; Source/WebCore/platform/graphics/efl/GLContext.h:1
&gt; +/*

Will you move these to say Source/WebCore/platform/graphics/opengl/GLContext.h ?

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:100
&gt; +{
&gt; +    if (m_drawable) {
&gt; +        if (m_restoreNeeded) {
&gt; +            GLint oldFBO;
&gt; +            glGetIntegerv(GL_FRAMEBUFFER_BINDING, &amp;oldFBO);
&gt; +            glBindFramebuffer(GL_FRAMEBUFFER, 0);
&gt; +            glXSwapBuffers(sharedDisplay(), m_drawable);
&gt; +            glBindFramebuffer(GL_FRAMEBUFFER, oldFBO);
&gt; +        } else
&gt; +            glXSwapBuffers(sharedDisplay(), m_drawable);
&gt; +    }
&gt; +}

This we write as 

if (!m_drawable)
    return;

...

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:179
&gt; +    return pBufferConfig();

pBufferConfiguration then, or just rename this to config() then. We need to be consistent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768994</commentid>
    <comment_count>33</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-16 00:31:30 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 174596 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174596&amp;action=review
&gt; 
&gt; It seems to me there are still nits.

Fixed all the headers

&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXContext.cpp:46
&gt; &gt; +    if (initialized)
&gt; 
&gt; I don&apos;t understand this condition well. Could you explain why you need to add this check ?
It acts as a guard check to prevent us from querying the function pointer more than once. 


&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXContext.cpp:53
&gt; &gt; +// GLXOffScreenContext
&gt; 
&gt; ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXContext.cpp:59
&gt; &gt; +
&gt; 
&gt; ditto.

These where meant to indicate start of a new class implementation. Removed them anyway.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXContext.cpp:74
&gt; &gt; +    if (config) {
&gt; 
&gt; I think early return is better for this case.
&gt; 
&gt; e.g)
&gt; 
&gt; if (!config)
&gt;     return false;

I would prefer as it is now, since we need to also handle the case when we have a valid configuration but context creation fails. 

&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXContext.cpp:94
&gt; &gt; +
&gt; 
&gt; ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:27
&gt; &gt; +
&gt; 
&gt; ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:75
&gt; &gt; +// GLXTransportSurface
&gt; 
&gt; I don&apos;t know why we need to add this comment. There is no information.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:85
&gt; &gt; +
&gt; 
&gt; ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:124
&gt; &gt; +
&gt; 
&gt; Generally, AFAIK, WebKit doesn&apos;t like to add a new line in front of checking for null.
k Fixed.

&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:129
&gt; &gt; +    XSetWindowAttributes a;
&gt; 
&gt; Can&apos;t use more meaningful name ?

fixed

&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:158
&gt; &gt; +
&gt; 
&gt; ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:166
&gt; &gt; +// GLX PBUFFER SURFACE
&gt; 
&gt; ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:176
&gt; &gt; +
&gt; 
&gt; ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:183
&gt; &gt; +
&gt; 
&gt; ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:207
&gt; &gt; +
&gt; 
&gt; ditto.

fixed

&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.h:104
&gt; &gt; +        for (int i = 0; i &lt; numReturned; ++i) {
&gt; 
&gt; Is unsigned better ?

No, as numReturned is of type int. glXChooseFBConfig accepts only int type.

&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.h:123
&gt; &gt; +        // Didnot find any visual supporting alpha, select the first available config.
&gt; 
&gt; Didnot -&gt; Did not ?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.h:151
&gt; &gt; +                m_pbufferfbConfig =  temp[0];
&gt; 
&gt; Two spaces between &apos;=&apos; and &apos;temp[0]&apos;

fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769006</commentid>
    <comment_count>34</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-16 00:54:28 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #27)
&gt; &gt; The idea about optimization is really interesting, however my concern here is about maintainability of the code. Image if each vendor implemented different extensions inside WebKit, it would be a big mess.
&gt; &gt; However If the reviewers decided that this patch is a good idea  I believe this code should live inside graphics/opengl. It is also interesting for GTK guys.
&gt; 
&gt; I believe it is a good idea. I don&apos;t believe the extension use will run out of hand, they will be used where it makes a performance difference and the best place to make use of them is in WebKit.
&gt; 
&gt; I agree that graphics/opengl is a better place for this.

Agreed. I will make the needed change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769024</commentid>
    <comment_count>35</comment_count>
      <attachid>174621</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-16 01:17:53 -0800</bug_when>
    <thetext>Comment on attachment 174621
review fixes

Attachment 174621 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14873048</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769036</commentid>
    <comment_count>36</comment_count>
    <who name="Hyowon Kim">hw1008.kim</who>
    <bug_when>2012-11-16 01:35:56 -0800</bug_when>
    <thetext>I think this refactoring is a good approach.
But all Evas_GL related codes would be removed from GraphicsContext3D.
Evas_GL is necessary In WebKit1 and for the UI process in WebKit2.
To be able to use it, another bug is needed, isn&apos;t it? 
(This patch seems to be too huge to also cover it.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769041</commentid>
    <comment_count>37</comment_count>
      <attachid>174621</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-16 01:50:08 -0800</bug_when>
    <thetext>Comment on attachment 174621
review fixes

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

New failing tests:
inspector-protocol/debugger-terminate-dedicated-worker-while-paused.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770074</commentid>
    <comment_count>38</comment_count>
      <attachid>174840</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-17 21:43:41 -0800</bug_when>
    <thetext>Created attachment 174840
review changes

Following Changes are included:
1)Moved GLContext and GLSurface from platform/graphics/efl to platform/graphics/opengl
2)Renamed GLContext and GLSurface as GLPlatformContext and GLPlatformSurface respectively.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770075</commentid>
    <comment_count>39</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-17 21:50:21 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; (From update of attachment 174621 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174621&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GLContext.h:1
&gt; &gt; +/*
&gt; 
&gt; Will you move these to say Source/WebCore/platform/graphics/opengl/GLContext.h ?

done 

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:100
&gt; &gt; +{
&gt; &gt; +    if (m_drawable) {
&gt; &gt; +        if (m_restoreNeeded) {
&gt; &gt; +            GLint oldFBO;
&gt; &gt; +            glGetIntegerv(GL_FRAMEBUFFER_BINDING, &amp;oldFBO);
&gt; &gt; +            glBindFramebuffer(GL_FRAMEBUFFER, 0);
&gt; &gt; +            glXSwapBuffers(sharedDisplay(), m_drawable);
&gt; &gt; +            glBindFramebuffer(GL_FRAMEBUFFER, oldFBO);
&gt; &gt; +        } else
&gt; &gt; +            glXSwapBuffers(sharedDisplay(), m_drawable);
&gt; &gt; +    }
&gt; &gt; +}
&gt; 
&gt; This we write as 
&gt; 
&gt; if (!m_drawable)
&gt;     return;
&gt; 
 fixed 

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:179
&gt; &gt; +    return pBufferConfig();
&gt; 
&gt; pBufferConfiguration then, or just rename this to config() then. We need to be consistent

fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770076</commentid>
    <comment_count>40</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-17 21:51:19 -0800</bug_when>
    <thetext>(In reply to comment #36)
&gt; I think this refactoring is a good approach.
&gt; But all Evas_GL related codes would be removed from GraphicsContext3D.
&gt; Evas_GL is necessary In WebKit1 and for the UI process in WebKit2.
&gt; To be able to use it, another bug is needed, isn&apos;t it? 
&gt; (This patch seems to be too huge to also cover it.)

Yes, I will open another bug for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770150</commentid>
    <comment_count>41</comment_count>
      <attachid>174840</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-18 10:34:12 -0800</bug_when>
    <thetext>Comment on attachment 174840
review changes

Clearing flags on attachment: 174840

Committed r135074: &lt;http://trac.webkit.org/changeset/135074&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770151</commentid>
    <comment_count>42</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-18 10:34:21 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770190</commentid>
    <comment_count>43</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-18 14:59:29 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 102619</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770197</commentid>
    <comment_count>44</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-11-18 15:09:54 -0800</bug_when>
    <thetext>(In reply to comment #43)
&gt; Re-opened since this is blocked by bug 102619

For the backtrace, see, for example, &lt;http://build.webkit.org/builders/EFL%20Linux%2064-bit%20Debug%20WK2/builds/6041/steps/layout-test/logs/stdio&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770279</commentid>
    <comment_count>45</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-18 19:16:31 -0800</bug_when>
    <thetext>(In reply to comment #44)
&gt; (In reply to comment #43)
&gt; &gt; Re-opened since this is blocked by bug 102619
&gt; 
&gt; For the backtrace, see, for example, &lt;http://build.webkit.org/builders/EFL%20Linux%2064-bit%20Debug%20WK2/builds/6041/steps/layout-test/logs/stdio&gt;.

K, working on it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770679</commentid>
    <comment_count>46</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-19 06:37:22 -0800</bug_when>
    <thetext>(In reply to comment #45)
&gt; (In reply to comment #44)
&gt; &gt; (In reply to comment #43)
&gt; &gt; &gt; Re-opened since this is blocked by bug 102619
&gt; &gt; 
&gt; &gt; For the backtrace, see, for example, &lt;http://build.webkit.org/builders/EFL%20Linux%2064-bit%20Debug%20WK2/builds/6041/steps/layout-test/logs/stdio&gt;.
&gt; 
&gt; K, working on it


Investigation so far has revealed that the issue is with how we detect GLX support.

It seems HAVE_GLX is enabled automatically if WebGL is enabled (in OptionEfl.cmake which is wrong too). If WebGL is not enabled than we never enable it. Currently WebGL is not enabled by default. Working on a patch for correctly detecting GLX support. I will create a separate issue for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771174</commentid>
    <comment_count>47</comment_count>
      <attachid>174840</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-11-19 16:32:16 -0800</bug_when>
    <thetext>Comment on attachment 174840
review changes

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

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:51
&gt; +    if  (!m_platformContext)

Two spaces in &quot;if  (!m_&quot;

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:113
&gt; +    bool returnValue = m_platformContext-&gt;makeCurrent(m_platformSurface.get());

Why do you use local variable here? Is below example more clear? I wonder if there is any reason.

 if (m_contextLostCallback &amp;&amp; !m_platformContext-&gt;isValid()) {
     m_contextLostCallback-&gt;onContextLost();
     return false;
 }

 return m_platformContext-&gt;makeCurrent(m_platformSurface.get());

&gt; Source/WebCore/platform/graphics/opengl/GLPlatformContext.cpp:107
&gt; +    m_contextLost = false;

I think 127 line is more proper place for this.

&gt; Source/WebCore/platform/graphics/opengl/GLPlatformContext.cpp:117
&gt; +    bool returnValue = false;

If possible, I think we should not use local variable for return.

&gt; Source/WebCore/platform/graphics/opengl/GLPlatformContext.cpp:122
&gt; +        returnValue = true;

Can&apos;t we return here ? Because, it looks there is no process related to this logic below.

&gt; Source/WebCore/platform/graphics/opengl/GLPlatformContext.cpp:125
&gt; +        returnValue = true;

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771522</commentid>
    <comment_count>48</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-19 22:25:28 -0800</bug_when>
    <thetext>(In reply to comment #47)
&gt; (From update of attachment 174840 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174840&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:51
&gt; &gt; +    if  (!m_platformContext)
&gt; 
&gt; Two spaces in &quot;if  (!m_&quot;

k will fix this

&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:113
&gt; &gt; +    bool returnValue = m_platformContext-&gt;makeCurrent(m_platformSurface.get());
&gt; 
&gt; Why do you use local variable here? Is below example more clear? I wonder if there is any reason.
&gt; 
&gt;  if (m_contextLostCallback &amp;&amp; !m_platformContext-&gt;isValid()) {
&gt;      m_contextLostCallback-&gt;onContextLost();
&gt;      return false;
&gt;  }

This would be fine if we always had a valid call back function. This might not be true when GraphicsContext3D is used by a class other than WebGLGraphicsContext3D. We might end up in a situation where a callback is not set up. I.e in Webkit1 AcceleratedCompositingContextEfl creates GraphicsContex3D, GraphicsContex3D is also used by Texture Mapper to create a temporary wrapper for current Context.

&gt;  return m_platformContext-&gt;makeCurrent(m_platformSurface.get());
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/opengl/GLPlatformContext.cpp:107
&gt; &gt; +    m_contextLost = false;
&gt; 
&gt; I think 127 line is more proper place for this.

No, we use this value to define if a context is valid or not (isValid() function). Thus, it would be a safe bet to reset it always.
 
&gt; &gt; Source/WebCore/platform/graphics/opengl/GLPlatformContext.cpp:117
&gt; &gt; +    bool returnValue = false;
&gt; 
&gt; If possible, I think we should not use local variable for return.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/opengl/GLPlatformContext.cpp:122
&gt; &gt; +        returnValue = true;
&gt; 
&gt; Can&apos;t we return here ? Because, it looks there is no process related to this logic below.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/opengl/GLPlatformContext.cpp:125
&gt; &gt; +        returnValue = true;
&gt; 
&gt; ditto.

We cannot return here, since we query for the current status of the context after making it current. We can get rid of  the local variable though. We can return the value of isValid() directly in makeCurrent.
bool GLPlatformContext::makeCurrent(GLPlatformSurface* surface)
{
...
...
return isValid();
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771536</commentid>
    <comment_count>49</comment_count>
      <attachid>174840</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-11-19 22:52:18 -0800</bug_when>
    <thetext>Comment on attachment 174840
review changes

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:113
&gt;&gt;&gt; +    bool returnValue = m_platformContext-&gt;makeCurrent(m_platformSurface.get());
&gt;&gt; 
&gt;&gt; Why do you use local variable here? Is below example more clear? I wonder if there is any reason.
&gt;&gt; 
&gt;&gt;  if (m_contextLostCallback &amp;&amp; !m_platformContext-&gt;isValid()) {
&gt;&gt;      m_contextLostCallback-&gt;onContextLost();
&gt;&gt;      return false;
&gt;&gt;  }
&gt;&gt; 
&gt;&gt;  return m_platformContext-&gt;makeCurrent(m_platformSurface.get());
&gt; 
&gt; This would be fine if we always had a valid call back function. This might not be true when GraphicsContext3D is used by a class other than WebGLGraphicsContext3D. We might end up in a situation where a callback is not set up. I.e in Webkit1 AcceleratedCompositingContextEfl creates GraphicsContex3D, GraphicsContex3D is also used by Texture Mapper to create a temporary wrapper for current Context.

Can other classes use this function now ? If not, I&apos;d like to recommend to use early return with &quot;FIXME:&quot;. Then, you can fix this again when other classes start to use this function. How do you think ?

&gt;&gt;&gt; Source/WebCore/platform/graphics/opengl/GLPlatformContext.cpp:117
&gt;&gt;&gt; +    bool returnValue = false;
&gt;&gt; 
&gt;&gt; If possible, I think we should not use local variable for return.
&gt; 
&gt; We cannot return here, since we query for the current status of the context after making it current. We can get rid of  the local variable though. We can return the value of isValid() directly in makeCurrent.
&gt; bool GLPlatformContext::makeCurrent(GLPlatformSurface* surface)
&gt; {
&gt; ...
&gt; ...
&gt; return isValid();
&gt; }

isValid() looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771557</commentid>
    <comment_count>50</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-19 23:08:36 -0800</bug_when>
    <thetext>(In reply to comment #49)
&gt; (From update of attachment 174840 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174840&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:113
&gt; &gt;&gt;&gt; +    bool returnValue = m_platformContext-&gt;makeCurrent(m_platformSurface.get());
&gt; &gt;&gt; 
&gt; &gt;&gt; Why do you use local variable here? Is below example more clear? I wonder if there is any reason.
&gt; &gt;&gt; 
&gt; &gt;&gt;  if (m_contextLostCallback &amp;&amp; !m_platformContext-&gt;isValid()) {
&gt; &gt;&gt;      m_contextLostCallback-&gt;onContextLost();
&gt; &gt;&gt;      return false;
&gt; &gt;&gt;  }
&gt; &gt;&gt; 
&gt; &gt;&gt;  return m_platformContext-&gt;makeCurrent(m_platformSurface.get());
&gt; &gt; 
&gt; &gt; This would be fine if we always had a valid call back function. This might not be true when GraphicsContext3D is used by a class other than WebGLGraphicsContext3D. We might end up in a situation where a callback is not set up. I.e in Webkit1 AcceleratedCompositingContextEfl creates GraphicsContex3D, GraphicsContex3D is also used by Texture Mapper to create a temporary wrapper for current Context.
&gt; 
&gt; Can other classes use this function now ? If not, I&apos;d like to recommend to use early return with &quot;FIXME:&quot;. Then, you can fix this again when other classes start to use this function. How do you think ?
&gt; 

What this function basically does is as follows:
It makes the context and surface associated with the GraphicsContext3D as the current GL Context and Drawable. Thus, it would be used frequently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771573</commentid>
    <comment_count>51</comment_count>
      <attachid>174840</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-11-19 23:32:08 -0800</bug_when>
    <thetext>Comment on attachment 174840
review changes

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:113
&gt;&gt;&gt;&gt;&gt; +    bool returnValue = m_platformContext-&gt;makeCurrent(m_platformSurface.get());
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Why do you use local variable here? Is below example more clear? I wonder if there is any reason.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;  if (m_contextLostCallback &amp;&amp; !m_platformContext-&gt;isValid()) {
&gt;&gt;&gt;&gt;      m_contextLostCallback-&gt;onContextLost();
&gt;&gt;&gt;&gt;      return false;
&gt;&gt;&gt;&gt;  }
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;  return m_platformContext-&gt;makeCurrent(m_platformSurface.get());
&gt;&gt;&gt; 
&gt;&gt;&gt; This would be fine if we always had a valid call back function. This might not be true when GraphicsContext3D is used by a class other than WebGLGraphicsContext3D. We might end up in a situation where a callback is not set up. I.e in Webkit1 AcceleratedCompositingContextEfl creates GraphicsContex3D, GraphicsContex3D is also used by Texture Mapper to create a temporary wrapper for current Context.
&gt;&gt; 
&gt;&gt; Can other classes use this function now ? If not, I&apos;d like to recommend to use early return with &quot;FIXME:&quot;. Then, you can fix this again when other classes start to use this function. How do you think ?
&gt; 
&gt; What this function basically does is as follows:
&gt; It makes the context and surface associated with the GraphicsContext3D as the current GL Context and Drawable. Thus, it would be used frequently.

If so, I don&apos;t object to use as it is. But, I still don&apos;t like to use bool returnValue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771635</commentid>
    <comment_count>52</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-20 00:21:04 -0800</bug_when>
    <thetext>(In reply to comment #51)
&gt; (From update of attachment 174840 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174840&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:113
&gt; &gt;&gt;&gt;&gt;&gt; +    bool returnValue = m_platformContext-&gt;makeCurrent(m_platformSurface.get());
&gt; &gt;&gt;&gt;&gt; 
&gt; &gt;&gt;&gt;&gt; Why do you use local variable here? Is below example more clear? I wonder if there is any reason.
&gt; &gt;&gt;&gt;&gt; 
&gt; &gt;&gt;&gt;&gt;  if (m_contextLostCallback &amp;&amp; !m_platformContext-&gt;isValid()) {
&gt; &gt;&gt;&gt;&gt;      m_contextLostCallback-&gt;onContextLost();
&gt; &gt;&gt;&gt;&gt;      return false;
&gt; &gt;&gt;&gt;&gt;  }
&gt; &gt;&gt;&gt;&gt; 
&gt; &gt;&gt;&gt;&gt;  return m_platformContext-&gt;makeCurrent(m_platformSurface.get());
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; This would be fine if we always had a valid call back function. This might not be true when GraphicsContext3D is used by a class other than WebGLGraphicsContext3D. We might end up in a situation where a callback is not set up. I.e in Webkit1 AcceleratedCompositingContextEfl creates GraphicsContex3D, GraphicsContex3D is also used by Texture Mapper to create a temporary wrapper for current Context.
&gt; &gt;&gt; 
&gt; &gt;&gt; Can other classes use this function now ? If not, I&apos;d like to recommend to use early return with &quot;FIXME:&quot;. Then, you can fix this again when other classes start to use this function. How do you think ?
&gt; &gt; 
&gt; &gt; What this function basically does is as follows:
&gt; &gt; It makes the context and surface associated with the GraphicsContext3D as the current GL Context and Drawable. Thus, it would be used frequently.
&gt; 
&gt; If so, I don&apos;t object to use as it is. But, I still don&apos;t like to use bool returnValue.

&gt; &gt;&gt;&gt;&gt;  if (m_contextLostCallback &amp;&amp; !m_platformContext-&gt;isValid()) {
&gt; &gt;&gt;&gt;&gt;      m_contextLostCallback-&gt;onContextLost();
&gt; &gt;&gt;&gt;&gt;      return false;
&gt; &gt;&gt;&gt;&gt;  }
&gt; &gt;&gt;&gt;&gt; 
&gt; &gt;&gt;&gt;&gt;  return m_platformContext-&gt;makeCurrent(m_platformSurface.get());

Sorry, I didnt check this properly before. This is completely wrong. We need to first make the context current before checking the status(if we have a valid context or not). 
so basically it goes as follows:
1)Make the context current with the given surface.    i.e. m_platformContext-&gt;makeCurrent(m_platformSurface.get())
2)Check if the first step succeeded and we still have a valid context.
3)return true if the above two conditions are met else false

If the changes are done in PlatformContext(as discussed above to return isValid()), then steps 1 and 2 are merged into one.

Than we have something like:
bool GraphicsContext3DPrivate::makeContextCurrent()
{
    bool success = m_platformContext-&gt;makeCurrent(m_platformSurface.get());

    if (!success &amp;&amp; m_contextLostCallback) {
        m_contextLostCallback-&gt;onContextLost();
        // FIXME: Restore context
    }

    return success;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771646</commentid>
    <comment_count>53</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-11-20 00:42:28 -0800</bug_when>
    <thetext>(In reply to comment #52)
t());
 
&gt; Sorry, I didnt check this properly before. This is completely wrong. We need to first make the context current before checking the status(if we have a valid context or not). 
&gt; so basically it goes as follows:
&gt; 1)Make the context current with the given surface.    i.e. m_platformContext-&gt;makeCurrent(m_platformSurface.get())
&gt; 2)Check if the first step succeeded and we still have a valid context.
&gt; 3)return true if the above two conditions are met else false
&gt; 
&gt; If the changes are done in PlatformContext(as discussed above to return isValid()), then steps 1 and 2 are merged into one.
&gt; 
&gt; Than we have something like:
&gt; bool GraphicsContext3DPrivate::makeContextCurrent()
&gt; {
&gt;     bool success = m_platformContext-&gt;makeCurrent(m_platformSurface.get());
&gt; 
&gt;     if (!success &amp;&amp; m_contextLostCallback) {
&gt;         m_contextLostCallback-&gt;onContextLost();
&gt;         // FIXME: Restore context
&gt;     }
&gt; 
&gt;     return success;
&gt; }

Yes, this code make sense now. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771648</commentid>
    <comment_count>54</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-20 00:44:47 -0800</bug_when>
    <thetext>(In reply to comment #53)
&gt; (In reply to comment #52)
&gt; t());
&gt; 
&gt; &gt; Sorry, I didnt check this properly before. This is completely wrong. We need to first make the context current before checking the status(if we have a valid context or not). 
&gt; &gt; so basically it goes as follows:
&gt; &gt; 1)Make the context current with the given surface.    i.e. m_platformContext-&gt;makeCurrent(m_platformSurface.get())
&gt; &gt; 2)Check if the first step succeeded and we still have a valid context.
&gt; &gt; 3)return true if the above two conditions are met else false
&gt; &gt; 
&gt; &gt; If the changes are done in PlatformContext(as discussed above to return isValid()), then steps 1 and 2 are merged into one.
&gt; &gt; 
&gt; &gt; Than we have something like:
&gt; &gt; bool GraphicsContext3DPrivate::makeContextCurrent()
&gt; &gt; {
&gt; &gt;     bool success = m_platformContext-&gt;makeCurrent(m_platformSurface.get());
&gt; &gt; 
&gt; &gt;     if (!success &amp;&amp; m_contextLostCallback) {
&gt; &gt;         m_contextLostCallback-&gt;onContextLost();
&gt; &gt;         // FIXME: Restore context
&gt; &gt;     }
&gt; &gt; 
&gt; &gt;     return success;
&gt; &gt; }
&gt; 
&gt; Yes, this code make sense now. Thanks.

Unable to make a context current and a context being reset are two different things. We need to explicitly check for both and I don&apos;t feel right to merge them into one

Something like this would be more fool proof:

bool GraphicsContext3DPrivate::makeContextCurrent()
{
    bool success = m_platformContext-&gt;makeCurrent(m_platformSurface.get());

    if (!success &amp;&amp; !m_platformContext-&gt;isValid() &amp;&amp; m_contextLostCallback) {
        m_contextLostCallback-&gt;onContextLost();
        // FIXME: Restore context
    }

    return success;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772383</commentid>
    <comment_count>55</comment_count>
      <attachid>175321</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-11-20 19:16:37 -0800</bug_when>
    <thetext>Created attachment 175321
review changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773514</commentid>
    <comment_count>56</comment_count>
      <attachid>175321</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-21 20:12:17 -0800</bug_when>
    <thetext>Comment on attachment 175321
review changes

Clearing flags on attachment: 175321

Committed r135468: &lt;http://trac.webkit.org/changeset/135468&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773515</commentid>
    <comment_count>57</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-21 20:12:25 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773643</commentid>
    <comment_count>58</comment_count>
    <who name="Jussi Kukkonen (jku)">jussi.kukkonen</who>
    <bug_when>2012-11-21 23:48:35 -0800</bug_when>
    <thetext>wk2 build bots broke after this. I assume it&apos;s related.

[ 81%] Building CXX object Source/WebCore/CMakeFiles/webcore_efl.dir/__/__/DerivedSources/WebCore/InspectorBackendDispatcher.cpp.o
In file included from /home/buildslave-1/webkit-buildslave/efl-linux-64-debug-wk2/build/Source/WebCore/platform/graphics/opengl/GLPlatformSurface.cpp:32:0:
/home/buildslave-1/webkit-buildslave/efl-linux-64-debug-wk2/build/Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.h:33:39: fatal error: X11/extensions/Xcomposite.h: No such file or directory
compilation terminated.
[ 81%] Building CXX object Source/WebCore/CMakeFiles/webcore_efl.dir/__/__/DerivedSources/WebCore/InspectorFrontend.cpp.o
[ 81%] Building CXX object Source/WebCore/CMakeFiles/webcore_efl.dir/__/__/DerivedSources/WebCore/InspectorTypeBuilder.cpp.o
[ 81%] Building CXX object Source/WebCore/CMakeFiles/webcore_efl.dir/__/__/DerivedSources/WebCore/ColorData.cpp.o
In file included from /home/buildslave-1/webkit-buildslave/efl-linux-64-debug-wk2/build/Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:27:0:
/home/buildslave-1/webkit-buildslave/efl-linux-64-debug-wk2/build/Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.h:33:39: fatal error: X11/extensions/Xcomposite.h: No such file or directory
compilation terminated.
[ 81%] Building CXX object Source/WebCore/CMakeFiles/webcore_efl.dir/__/__/DerivedSources/WebCore/HTMLEntityTable.cpp.o
[ 81%] Building CXX object Source/WebCore/CMakeFiles/webcore_efl.dir/__/__/DerivedSources/WebCore/CSSPropertyNames.cpp.o
[ 81%] Building CXX object Source/WebCore/CMakeFiles/webcore_efl.dir/__/__/DerivedSources/WebCore/CSSValueKeywords.cpp.o
[ 81%] Building CXX object Source/WebCore/CMakeFiles/webcore_efl.dir/__/__/DerivedSources/WebCore/UserAgentStyleSheetsData.cpp.o
[ 81%] Building CXX object Source/WebCore/CMakeFiles/webcore_efl.dir/__/__/DerivedSources/WebCore/CSSGrammar.cpp.o
[ 81%] [ 81%] make[2]: *** [Source/WebCore/CMakeFiles/webcore_efl.dir/platform/graphics/opengl/GLPlatformSurface.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
Building CXX object Source/WebCore/CMakeFiles/webcore_efl.dir/__/__/DerivedSources/WebCore/XPathGrammar.cpp.o
Building CXX object Source/WebCore/CMakeFiles/webcore_efl.dir/__/__/DerivedSources/WebCore/HTMLNames.cpp.o
make[2]: *** [Source/WebCore/CMakeFiles/webcore_efl.dir/platform/graphics/surfaces/glx/GLXSurface.cpp.o] Error 1
make[1]: *** [Source/WebCore/CMakeFiles/webcore_efl.dir/all] Error 2
make: *** [all] Error 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774203</commentid>
    <comment_count>59</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-11-22 21:40:30 -0800</bug_when>
    <thetext>(In reply to comment #58)
&gt; wk2 build bots broke after this. I assume it&apos;s related.
&gt; 
&gt; [ 81%] Building CXX object Source/WebCore/CMakeFiles/webcore_efl.dir/__/__/DerivedSources/WebCore/InspectorBackendDispatcher.cpp.o
&gt; In file included from /home/buildslave-1/webkit-buildslave/efl-linux-64-debug-wk2/build/Source/WebCore/platform/graphics/opengl/GLPlatformSurface.cpp:32:0:
&gt; /home/buildslave-1/webkit-buildslave/efl-linux-64-debug-wk2/build/Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.h:33:39: fatal error: X11/extensions/Xcomposite.h: No such file or directory
&gt; compilation terminated.
&gt; [ 81%] Building CXX object Source/WebCore/CMakeFiles/webcore_efl.dir/__/__/DerivedSources/WebCore/InspectorFrontend.cpp.o
&gt; [ 81%] Building CXX object Source/WebCore/CMakeFiles/webcore_efl.dir/__/__/DerivedSources/WebCore/InspectorTypeBuilder.cpp.o
&gt; [ 81%] Building CXX object Source/WebCore/CMakeFiles/webcore_efl.dir/__/__/DerivedSources/WebCore/ColorData.cpp.o
&gt; In file included from /home/buildslave-1/webkit-buildslave/efl-linux-64-debug-wk2/build/Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:27:0:
&gt; /home/buildslave-1/webkit-buildslave/efl-linux-64-debug-wk2/build/Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.h:33:39: fatal error: X11/extensions/Xcomposite.h: No such file or directory
&gt; compilation terminated.
&gt; [ 81%] Building CXX object Source/WebCore/CMakeFiles/webcore_efl.dir/__/__/DerivedSources/WebCore/HTMLEntityTable.cpp.o
&gt; [ 81%] Building CXX object Source/WebCore/CMakeFiles/webcore_efl.dir/__/__/DerivedSources/WebCore/CSSPropertyNames.cpp.o
&gt; [ 81%] Building CXX object Source/WebCore/CMakeFiles/webcore_efl.dir/__/__/DerivedSources/WebCore/CSSValueKeywords.cpp.o
&gt; [ 81%] Building CXX object Source/WebCore/CMakeFiles/webcore_efl.dir/__/__/DerivedSources/WebCore/UserAgentStyleSheetsData.cpp.o
&gt; [ 81%] Building CXX object Source/WebCore/CMakeFiles/webcore_efl.dir/__/__/DerivedSources/WebCore/CSSGrammar.cpp.o
&gt; [ 81%] [ 81%] make[2]: *** [Source/WebCore/CMakeFiles/webcore_efl.dir/platform/graphics/opengl/GLPlatformSurface.cpp.o] Error 1
&gt; make[2]: *** Waiting for unfinished jobs....
&gt; Building CXX object Source/WebCore/CMakeFiles/webcore_efl.dir/__/__/DerivedSources/WebCore/XPathGrammar.cpp.o
&gt; Building CXX object Source/WebCore/CMakeFiles/webcore_efl.dir/__/__/DerivedSources/WebCore/HTMLNames.cpp.o
&gt; make[2]: *** [Source/WebCore/CMakeFiles/webcore_efl.dir/platform/graphics/surfaces/glx/GLXSurface.cpp.o] Error 1
&gt; make[1]: *** [Source/WebCore/CMakeFiles/webcore_efl.dir/all] Error 2
&gt; make: *** [all] Error 2

This build breaks were disappeared after installing libxcomposite-dev</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172498</attachid>
            <date>2012-11-06 00:00:08 -0800</date>
            <delta_ts>2012-11-12 06:44:24 -0800</delta_ts>
            <desc>initial patch</desc>
            <filename>initial.patch</filename>
            <type>text/plain</type>
            <size>33590</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggNzVkNjQzZC4uMzY1YmRlMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1FZmwuY21ha2UKQEAgLTI4NiwxMiArMjg2LDE5IEBAIElGIChXVEZfVVNFXzNEX0dS
QVBISUNTKQogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wiCiAg
ICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzIgogICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAiCisgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dyYXBoaWNzL2VmbCIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3Jh
cGhpY3MvZ2x4IgogICApCiAgIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL09wZW5HTFNoaW1zLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0RyYXdpbmdCdWZmZXJDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhp
Y3NDb250ZXh0M0RFZmwuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HTENvbnRleHQu
Y3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0RUdMLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2VmbC9HTE5hdGl2ZUNvbnRleHQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dMWENv
bnRleHRXcmFwcGVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
M0RPcGVuR0wuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0wuY3BwCkBAIC0zMDMsNiArMzEwLDcgQEAgSUYgKFdURl9VU0VfM0RfR1JBUEhJ
Q1MpCiAgICkKIEVORElGICgpCiAKKwogQUREX0RFRklOSVRJT05TKC1EREFUQV9ESVI9IiR7Q01B
S0VfSU5TVEFMTF9QUkVGSVh9LyR7REFUQV9JTlNUQUxMX0RJUn0iKQogCiBJRiAoRU5BQkxFX1dF
Ql9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Vm
bC9HTE5hdGl2ZUNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWZsL0dMTmF0aXZlQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMDljOGE3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2VmbC9HTE5hdGl2ZUNvbnRleHQuY3BwCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICog
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBJZ2FsaWEsIFMuTC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNs
dWRlICJHTE5hdGl2ZUNvbnRleHQuaCIKKyNpbmNsdWRlICJHTFhDb250ZXh0V3JhcHBlci5oIgor
I2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjaWYgVVNFKE9QRU5HTF9FU18yKQorI2luY2x1ZGUg
IkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCisjZWxzZQorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9w
ZW5HTC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxHTE5h
dGl2ZUNvbnRleHQ+IEdMTmF0aXZlQ29udGV4dDo6Y3JlYXRlQ29udGV4dChHcmFwaGljc0NvbnRl
eHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUsdWludDY0X3Qgd2luZG93SGFuZGxlLGJvb2wg
dXNlU2hhcmVkQ29udGV4dCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZFNoaW1zID0g
ZmFsc2U7CisgICAgc3RhdGljIGJvb2wgc3VjY2VzcyA9IHRydWU7CisgICAgaWYgKCFpbml0aWFs
aXplZFNoaW1zKSB7CisgICAgICAgIHN1Y2Nlc3MgPSBpbml0aWFsaXplT3BlbkdMU2hpbXMoKTsK
KyAgICAgICAgaW5pdGlhbGl6ZWRTaGltcyA9IHRydWU7CisgICAgfQorICAgIGlmICghc3VjY2Vz
cykgeworICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgc3dpdGNoIChyZW5k
ZXJTdHlsZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlck9mZnNjcmVlbjoK
KyAgICAgICAgaWYgKE93blB0cjxHTE5hdGl2ZUNvbnRleHQ+IGdseENvbnRleHQgID0gR0xOYXRp
dmVDb250ZXh0OjpjcmVhdGVPZmZTY3JlZW5Db250ZXh0KHVzZVNoYXJlZENvbnRleHQgPyBHTE5h
dGl2ZUNvbnRleHQ6OnNoYXJlZE9mZlNjcmVlbkNvbnRleHQoKTowLHdpbmRvd0hhbmRsZSkpCisg
ICAgICAgICAgICByZXR1cm4gZ2x4Q29udGV4dC5yZWxlYXNlKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclRvQ3VycmVudEdMQ29udGV4dDoKKyAg
ICAgICAgaWYgKE93blB0cjxHTE5hdGl2ZUNvbnRleHQ+IGdseENvbnRleHQgID0gR0xOYXRpdmVD
b250ZXh0OjpjcmVhdGVDdXJyZW50Q29udGV4dFdyYXBwZXIoKSkKKyAgICAgICAgICAgIHJldHVy
biBnbHhDb250ZXh0LnJlbGVhc2UoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3c6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKKworR0xOYXRpdmVDb250ZXh0KiBHTE5hdGl2ZUNvbnRleHQ6OnNoYXJlZE9mZlNjcmVl
bkNvbnRleHQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChPd25QdHI8R0xOYXRpdmVDb250ZXh0Piwgc2hhcmluZywgKGNyZWF0ZU9mZlNj
cmVlbkNvbnRleHQoKSkpOworICAgIHJldHVybiBzaGFyaW5nLmdldCgpOworfQorCisvLyBCZWNh
dXNlIG9mIGRyaXZlciBidWdzLCBleGl0aW5nIHRoZSBwcm9ncmFtIHdoZW4gdGhlcmUgYXJlIGFj
dGl2ZSBwYnVmZmVycworLy8gY2FuIGNyYXNoIHRoZSBYIHNlcnZlciAodGhpcyBoYXMgYmVlbiBv
YnNlcnZlZCB3aXRoIHRoZSBvZmZpY2lhbCBOdmlkaWEgZHJpdmVycykuCisvLyBXZSBuZWVkIHRv
IGVuc3VyZSB0aGF0IHdlIGNsZWFuIGV2ZXJ5dGhpbmcgdXAgb24gZXhpdC4gVGhlcmUgYXJlIHNl
dmVyYWwgcmVhc29ucworLy8gdGhhdCBHcmFwaGljc0NvbnRleHQzRHMgd2lsbCBzdGlsbCBiZSBh
bGl2ZSBhdCBleGl0LCBpbmNsdWRpbmcgdXNlciBlcnJvciAobWVtb3J5CisvLyBsZWFrcykgYW5k
IHRoZSBwYWdlIGNhY2hlLiBJbiBhbnkgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0aGUgWCBzZXJ2ZXIg
dG8gY3Jhc2guCit0eXBlZGVmIFZlY3RvcjxHTE5hdGl2ZUNvbnRleHQqPiBBY3RpdmVDb250ZXh0
TGlzdDsKK3N0YXRpYyBBY3RpdmVDb250ZXh0TGlzdCYgYWN0aXZlQ29udGV4dExpc3QoKQorewor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoQWN0aXZlQ29udGV4dExpc3QsIGFjdGl2ZUNvbnRleHRz
LCAoKSk7CisgICAgcmV0dXJuIGFjdGl2ZUNvbnRleHRzOworfQorCit2b2lkIEdMTmF0aXZlQ29u
dGV4dDo6YWRkQWN0aXZlQ29udGV4dChHTE5hdGl2ZUNvbnRleHQqIGNvbnRleHQpCit7CisgICAg
c3RhdGljIGJvb2wgYWRkZWRBdEV4aXRIYW5kbGVyID0gZmFsc2U7CisgICAgaWYgKCFhZGRlZEF0
RXhpdEhhbmRsZXIpIHsKKyAgICAgICAgYXRleGl0KCZHTE5hdGl2ZUNvbnRleHQ6OmNsZWFudXBB
Y3RpdmVDb250ZXh0c0F0RXhpdCk7CisgICAgICAgIGFkZGVkQXRFeGl0SGFuZGxlciA9IHRydWU7
CisgICAgfQorICAgIGFjdGl2ZUNvbnRleHRMaXN0KCkuYXBwZW5kKGNvbnRleHQpOworfQorCitz
dGF0aWMgYm9vbCBnQ2xlYW5pbmdVcEF0RXhpdCA9IGZhbHNlOworCit2b2lkIEdMTmF0aXZlQ29u
dGV4dDo6cmVtb3ZlQWN0aXZlQ29udGV4dChHTE5hdGl2ZUNvbnRleHQqIGNvbnRleHQpCit7Cisg
ICAgLy8gSWYgd2UgYXJlIGNsZWFuaW5nIHVwIHRoZSBjb250ZXh0IGxpc3QgYXQgZXhpdCwgZG9u
J3QgYm90aGVyIHJlbW92aW5nIHRoZSBjb250ZXh0CisgICAgLy8gZnJvbSB0aGUgbGlzdCwgc2lu
Y2Ugd2UgZG9uJ3Qgd2FudCB0byBtb2RpZnkgdGhlIGxpc3Qgd2hpbGUgaXQncyBiZWluZyBpdGVy
YXRlZC4KKyAgICBpZiAoZ0NsZWFuaW5nVXBBdEV4aXQpCisgICAgICAgIHJldHVybjsKKworICAg
IEFjdGl2ZUNvbnRleHRMaXN0JiBjb250ZXh0TGlzdCA9IGFjdGl2ZUNvbnRleHRMaXN0KCk7Cisg
ICAgc2l6ZV90IGkgPSBjb250ZXh0TGlzdC5maW5kKGNvbnRleHQpOworICAgIGlmIChpICE9IG5v
dEZvdW5kKQorICAgICAgICBjb250ZXh0TGlzdC5yZW1vdmUoaSk7Cit9CisKK3ZvaWQgR0xOYXRp
dmVDb250ZXh0OjpjbGVhbnVwQWN0aXZlQ29udGV4dHNBdEV4aXQoKQoreworICAgIGdDbGVhbmlu
Z1VwQXRFeGl0ID0gdHJ1ZTsKKworICAgIEFjdGl2ZUNvbnRleHRMaXN0JiBjb250ZXh0TGlzdCA9
IGFjdGl2ZUNvbnRleHRMaXN0KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb250ZXh0
TGlzdC5zaXplKCk7ICsraSkKKyAgICAgICAgZGVsZXRlIGNvbnRleHRMaXN0W2ldOworfQorCitH
TE5hdGl2ZUNvbnRleHQ6OkdMTmF0aXZlQ29udGV4dCgpCit7CisgICAgYWRkQWN0aXZlQ29udGV4
dCh0aGlzKTsKK30KKworUGFzc093blB0cjxHTE5hdGl2ZUNvbnRleHQ+IEdMTmF0aXZlQ29udGV4
dDo6Y3JlYXRlT2ZmU2NyZWVuQ29udGV4dChHTE5hdGl2ZUNvbnRleHQqIHNoYXJpbmdDb250ZXh0
LHVpbnQ2NF90IHdpbmRvd0hhbmRsZSkKK3sKKyAgICBPd25QdHI8R0xOYXRpdmVDb250ZXh0PiBn
bHhDb250ZXh0ID0gYWRvcHRQdHIobmV3IEdMWE9mZlNjcmVlbkNvbnRleHRXcmFwcGVyKHNoYXJp
bmdDb250ZXh0LHdpbmRvd0hhbmRsZSkpOworICAgIGlmIChnbHhDb250ZXh0LT5oYW5kbGUoKSkK
KyAgICAgICAgcmV0dXJuIGdseENvbnRleHQucmVsZWFzZSgpOworICAgIHJldHVybiBudWxscHRy
OworfQorCitQYXNzT3duUHRyPEdMTmF0aXZlQ29udGV4dD4gR0xOYXRpdmVDb250ZXh0OjpjcmVh
dGVDdXJyZW50Q29udGV4dFdyYXBwZXIoKQoreworICAgIE93blB0cjxHTE5hdGl2ZUNvbnRleHQ+
IGdseENvbnRleHQgPSBhZG9wdFB0cihuZXcgR0xYQ3VycmVudENvbnRleHRXcmFwcGVyKCkpOwor
ICAgIGlmIChnbHhDb250ZXh0LT5oYW5kbGUoKSkKKyAgICAgICAgcmV0dXJuIGdseENvbnRleHQu
cmVsZWFzZSgpOworICAgIHJldHVybiBudWxscHRyOworfQorCisvLyBGSVhNRTogVGhpcyBzaG91
bGQgYmUgYSB0aHJlYWQgbG9jYWwgZXZlbnR1YWxseSBpZiB3ZQorLy8gd2FudCB0byBzdXBwb3J0
IHVzaW5nIEdMTmF0aXZlQ29udGV4dHMgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLgorc3RhdGljIEdM
TmF0aXZlQ29udGV4dCogZ0N1cnJlbnRDb250ZXh0ID0gMDsKKworR0xOYXRpdmVDb250ZXh0Ojp+
R0xOYXRpdmVDb250ZXh0KCkKK3sKKyAgICBpZiAodGhpcyA9PSBnQ3VycmVudENvbnRleHQpCisg
ICAgICAgIGdDdXJyZW50Q29udGV4dCA9IDA7CisgICAgcmVtb3ZlQWN0aXZlQ29udGV4dCh0aGlz
KTsKK30KKworYm9vbCBHTE5hdGl2ZUNvbnRleHQ6Om1ha2VDdXJyZW50SWZOZWVkZWQoKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgZ0N1cnJlbnRDb250ZXh0ID0gdGhpczsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHTE5hdGl2ZUNvbnRleHQ6OnB1c2hDb250ZXh0
KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGdDdXJyZW50Q29udGV4dCA9
IHRoaXM7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR0xOYXRpdmVDb250ZXh0Ojpwb3BD
b250ZXh0KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmICh0aGlzID09
IGdDdXJyZW50Q29udGV4dCkKKyAgICAgICAgZ0N1cnJlbnRDb250ZXh0ID0gMDsKK30KKworR0xO
YXRpdmVDb250ZXh0KiBHTE5hdGl2ZUNvbnRleHQ6OmdldEN1cnJlbnQoKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgcmV0dXJuIGdDdXJyZW50Q29udGV4dDsKK30KKwordm9p
ZCBHTE5hdGl2ZUNvbnRleHQ6OnN3YXBCdWZmZXJzKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKy8vI2VuZGlmIC8vIFVTRShP
UEVOR0wpCisKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9lZmwvR0xOYXRpdmVDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9lZmwvR0xOYXRpdmVDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYzhkOGUzYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2VmbC9HTE5hdGl2ZUNvbnRleHQuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwg
Q29ycG9yYXRpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUKKyAqICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaWZuZGVm
IEdMTmF0aXZlQ29udGV4dF9ICisjZGVmaW5lIEdMTmF0aXZlQ29udGV4dF9ICisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgorI2luY2x1ZGUgPEdML2dsLmg+CisjaW5jbHVkZSA8R0wvZ2xleHQuaD4K
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorCisvLyBFbmNhcHN1bGF0ZXMgYW4gT3Bl
bkdMIGNvbnRleHQsIGhpZGluZyBwbGF0Zm9ybSBzcGVjaWZpYyBtYW5hZ2VtZW50LgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdMTmF0aXZlQ29udGV4dAoreworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEdMTmF0aXZlQ29udGV4dCk7CitwdWJsaWM6CisKKyAgICBzdGF0aWMgIFBh
c3NPd25QdHI8R0xOYXRpdmVDb250ZXh0PiBjcmVhdGVDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNE
OjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSx1aW50NjRfdCB3aW5kb3dIYW5kbGUgPSAwLGJvb2wg
dXNlU2hhcmVkQ29udGV4dCA9IGZhbHNlKTsKKworICAgIEdMTmF0aXZlQ29udGV4dCgpOworICAg
IHZpcnR1YWwgfkdMTmF0aXZlQ29udGV4dCgpOworCisgICAgLy8gUmV0dXJucyB1bmRlcmx5aW5n
IHBsYXRmb3JtIHNwZWNpZmljIGNvbnRleHQgaGFuZGxlLgorICAgIHZpcnR1YWwgUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQzRCBoYW5kbGUoKSA9IDA7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYg
aXQgaXMgY3VycmVudCBjb250ZXh0LgorICAgIHZpcnR1YWwgYm9vbCBpc0N1cnJlbnRDb250ZXh0
KCkgPSAwOworCisgICAgLy8gU2F2ZXMgdGhlIGN1cnJlbnQgZHJhd2FibGUgYW5kIGNvbnRleHQg
YmVmb3JlIHRyeWluZyB0byBtYWtlIGl0c2VsZiBjdXJyZW50IGNvbnRleHQuCisgICAgLy8gSXQg
aGFzIG5vIGVmZmVjdCBpZiB0aGlzIGlzIGFscmVhZHkgY3VycmVudCBDb250ZXh0LgorICAgIHZp
cnR1YWwgYm9vbCBwdXNoQ29udGV4dCgpOworCisgICAgLy8gUmVzdG9yZXMgbGFzdCBzYXZlZCBj
b250ZXh0IHN0YXRlLgorICAgIHZpcnR1YWwgdm9pZCBwb3BDb250ZXh0KCk7CisKKyAgICAvLyBN
YWtlIENvbnRleHQgYXMgY3VycmVudC4gSXQgZG9lcyBub3RoaW5nIGlmIGl0IGlzIGFscmVhZHkg
Y3VycmVudC4KKyAgICB2aXJ0dWFsIGJvb2wgbWFrZUN1cnJlbnRJZk5lZWRlZCgpOworICAgIHZp
cnR1YWwgdm9pZCBzd2FwQnVmZmVycygpOworCisgICAgLy9UYWtlbiBmcm9tIGNhaXJvIHBvcnQu
CisgICAgc3RhdGljIEdMTmF0aXZlQ29udGV4dCogZ2V0Q3VycmVudCgpOworICAgIHN0YXRpYyBH
TE5hdGl2ZUNvbnRleHQqIHNoYXJlZE9mZlNjcmVlbkNvbnRleHQoKTsKKyAgICBzdGF0aWMgdm9p
ZCBhZGRBY3RpdmVDb250ZXh0KEdMTmF0aXZlQ29udGV4dCopOworICAgIHN0YXRpYyB2b2lkIHJl
bW92ZUFjdGl2ZUNvbnRleHQoR0xOYXRpdmVDb250ZXh0Kik7CisgICAgc3RhdGljIHZvaWQgY2xl
YW51cEFjdGl2ZUNvbnRleHRzQXRFeGl0KCk7Citwcml2YXRlOgorICAgIHN0YXRpYyBQYXNzT3du
UHRyPEdMTmF0aXZlQ29udGV4dD4gY3JlYXRlT2ZmU2NyZWVuQ29udGV4dChHTE5hdGl2ZUNvbnRl
eHQqIHNoYXJpbmcgPSAwLHVpbnQ2NF90IHdpbmRvd0hhbmRsZSA9IDApOworICAgIHN0YXRpYyBQ
YXNzT3duUHRyPEdMTmF0aXZlQ29udGV4dD4gY3JlYXRlQ3VycmVudENvbnRleHRXcmFwcGVyKCk7
CisKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBHTE5hdGl2ZUNvbnRl
eHRfSAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwv
R0xYQ29udGV4dFdyYXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWZsL0dMWENvbnRleHRXcmFwcGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi43MjdmYWFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZWZsL0dMWENvbnRleHRXcmFwcGVyLmNwcApAQCAtMCwwICsxLDE1NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIkdMWENvbnRleHRXcmFwcGVyLmgiCisKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisKK0dMWENvbnRleHRXcmFwcGVyOjpHTFhDb250ZXh0V3JhcHBl
cigpCisgICAgOkdMTmF0aXZlQ29udGV4dCgpCit7CisKK30KKworUGxhdGZvcm1OYXRpdmVTdXJm
YWNlIEdMWENvbnRleHRXcmFwcGVyOjpjdXJyZW50TmF0aXZlRHJhd2FibGUoKQoreworI2lmIFVT
RShFR0wpCisgICAgcmV0dXJuIGVnbEdldEN1cnJlbnRTdXJmYWNlIChFR0xfRFJBVyk7CisjZWxz
ZQorICAgIHJldHVybiBnbFhHZXRDdXJyZW50RHJhd2FibGUoKTsKKyNlbmRpZgorfQorCitQbGF0
Zm9ybU5hdGl2ZUNvbnRleHQgR0xYQ29udGV4dFdyYXBwZXI6OmN1cnJlbnROYXRpdmVDb250ZXh0
KCkKK3sKKyNpZiBVU0UoRUdMKQorICAgIHJldHVybiBlZ2xHZXRDdXJyZW50Q29udGV4dCgpOwor
I2Vsc2UKKyAgICByZXR1cm4gZ2xYR2V0Q3VycmVudENvbnRleHQoKTsKKyNlbmRpZgorfQorCitH
TFhDdXJyZW50Q29udGV4dFdyYXBwZXI6OkdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcigpCisgICAg
OkdMWENvbnRleHRXcmFwcGVyKCkKK3sKKyNpZiBVU0UoRUdMKQorICAgIG1fY29udGV4dEhhbmRs
ZSA9IGVnbEdldEN1cnJlbnRDb250ZXh0KCk7CisjZWxzZQorICAgIG1fY29udGV4dEhhbmRsZSA9
IGdsWEdldEN1cnJlbnRDb250ZXh0KCk7CisjZW5kaWYKK30KKworR0xYQ3VycmVudENvbnRleHRX
cmFwcGVyOjp+R0xYQ3VycmVudENvbnRleHRXcmFwcGVyKCkKK3sKKworfQorCitQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dDNEIEdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcjo6aGFuZGxlKCkKK3sKKyAg
ICByZXR1cm4gbV9jb250ZXh0SGFuZGxlOworfQorCitib29sIEdMWEN1cnJlbnRDb250ZXh0V3Jh
cHBlcjo6aXNDdXJyZW50Q29udGV4dCgpCit7CisgICAgcmV0dXJuIG1fY29udGV4dEhhbmRsZSA9
PSBjdXJyZW50TmF0aXZlQ29udGV4dCgpOworfQorCitHTFhPZmZTY3JlZW5Db250ZXh0V3JhcHBl
cjo6R0xYT2ZmU2NyZWVuQ29udGV4dFdyYXBwZXIoR0xOYXRpdmVDb250ZXh0KiBzaGFyaW5nQ29u
dGV4dCx1aW50NjRfdCB3aW5kb3dIYW5kbGUpCisgICAgOkdMWENvbnRleHRXcmFwcGVyKCkKKyAg
ICAsbV9kZXRhY2hlZENvbnRleHRIYW5kbGUoMCkKKyAgICAsbV9kZXRhY2hlZERyYXdhYmxlKDAp
Cit7CisgICAgR0xDb250ZXh0R0xYICpzaGFyZWRDb250ZXh0ID0gMDsKKyAgICBpZiAoc2hhcmlu
Z0NvbnRleHQpCisgICAgICAgIHNoYXJlZENvbnRleHQgPSBzdGF0aWNfY2FzdDxHTFhPZmZTY3Jl
ZW5Db250ZXh0V3JhcHBlcio+KHNoYXJpbmdDb250ZXh0KS0+bV9wbGF0Zm9ybUNvbnRleHQuZ2V0
KCk7CisgICAgaWYgKHdpbmRvd0hhbmRsZSA9PSAwKSB7CisjaWYgVVNFKEVHTCkKKyAgICAgICAg
bV9wbGF0Zm9ybUNvbnRleHQgPSBHTENvbnRleHRFR0w6OmNyZWF0ZUNvbnRleHQoMCwgc2hhcmVk
Q29udGV4dCk7CisjZWxzZQorICAgICAgICBtX3BsYXRmb3JtQ29udGV4dCA9IEdMQ29udGV4dEdM
WDo6Y3JlYXRlQ29udGV4dCgwLCBzaGFyZWRDb250ZXh0KTsKKyNlbmRpZgorICAgIH0gZWxzZSB7
CisjaWYgVVNFKEVHTCkKKyAgICAgICAgbV9wbGF0Zm9ybUNvbnRleHQgPSBHTENvbnRleHRFR0w6
OmNyZWF0ZVdpbmRvd0NvbnRleHQod2luZG93SGFuZGxlLCBzaGFyZWRDb250ZXh0KTsKKyNlbHNl
CisgICAgICAgIG1fcGxhdGZvcm1Db250ZXh0ID0gR0xDb250ZXh0R0xYOjpjcmVhdGVDb250ZXh0
KHdpbmRvd0hhbmRsZSwgc2hhcmVkQ29udGV4dCk7CisjZW5kaWYKKworICAgIH0KK30KKworR0xY
T2ZmU2NyZWVuQ29udGV4dFdyYXBwZXI6On5HTFhPZmZTY3JlZW5Db250ZXh0V3JhcHBlcigpCit7
CisgICAgZG9Qb3BDb250ZXh0KCk7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR0xY
T2ZmU2NyZWVuQ29udGV4dFdyYXBwZXI6OmhhbmRsZSgpCit7CisgICAgcmV0dXJuIG1fcGxhdGZv
cm1Db250ZXh0ID8gbV9wbGF0Zm9ybUNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIDogMDsKK30K
KworYm9vbCBHTFhPZmZTY3JlZW5Db250ZXh0V3JhcHBlcjo6aXNDdXJyZW50Q29udGV4dCgpCit7
CisgICAgcmV0dXJuIGhhbmRsZSgpID09IGN1cnJlbnROYXRpdmVDb250ZXh0KCk7Cit9CisKK2Jv
b2wgR0xYT2ZmU2NyZWVuQ29udGV4dFdyYXBwZXI6OnB1c2hDb250ZXh0KCkKK3sKKyAgICBHTE5h
dGl2ZUNvbnRleHQ6OnB1c2hDb250ZXh0KCk7CisgICAgaWYgKCFpc0N1cnJlbnRDb250ZXh0KCkp
IHsKKyAgICAgICAgbV9kZXRhY2hlZERyYXdhYmxlID0gY3VycmVudE5hdGl2ZURyYXdhYmxlKCk7
CisgICAgICAgIG1fZGV0YWNoZWRDb250ZXh0SGFuZGxlID0gY3VycmVudE5hdGl2ZUNvbnRleHQo
KTsKKyAgICAgICAgcmV0dXJuIG1fcGxhdGZvcm1Db250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR0xYT2ZmU2NyZWVuQ29udGV4
dFdyYXBwZXI6OnBvcENvbnRleHQoKQoreworICAgIGRvUG9wQ29udGV4dCgpOworfQorCitib29s
IEdMWE9mZlNjcmVlbkNvbnRleHRXcmFwcGVyOjptYWtlQ3VycmVudElmTmVlZGVkKCkKK3sKKyAg
ICBHTE5hdGl2ZUNvbnRleHQ6Om1ha2VDdXJyZW50SWZOZWVkZWQoKTsKKyAgICByZXR1cm4gIG1f
cGxhdGZvcm1Db250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKwordm9pZCBHTFhPZmZT
Y3JlZW5Db250ZXh0V3JhcHBlcjo6ZG9Qb3BDb250ZXh0KCkKK3sKKyAgICBHTE5hdGl2ZUNvbnRl
eHQ6OnBvcENvbnRleHQoKTsKKyAgICBpZiAoaXNDdXJyZW50Q29udGV4dCgpICYmIG1fZGV0YWNo
ZWRDb250ZXh0SGFuZGxlICYmIG1fZGV0YWNoZWRDb250ZXh0SGFuZGxlICE9IGhhbmRsZSgpICkK
KyNpZiBVU0UoRUdMKQorICAgICAgICBlZ2xNYWtlQ3VycmVudChHTENvbnRleHRFR0w6OnNoYXJl
ZEVHTERpc3BsYXkoKSwgbV9kZXRhY2hlZERyYXdhYmxlLCBtX2RldGFjaGVkQ29udGV4dEhhbmRs
ZSk7CisjZWxzZQorICAgICAgICBnbFhNYWtlQ3VycmVudChHTENvbnRleHQ6OnNoYXJlZFgxMURp
c3BsYXkoKSwgbV9kZXRhY2hlZERyYXdhYmxlLCBtX2RldGFjaGVkQ29udGV4dEhhbmRsZSk7Cisj
ZW5kaWYKKyAgICBtX2RldGFjaGVkRHJhd2FibGUgPSAwOworICAgIG1fZGV0YWNoZWRDb250ZXh0
SGFuZGxlID0gMDsKK30KKworfQorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2VmbC9HTFhDb250ZXh0V3JhcHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZWZsL0dMWENvbnRleHRXcmFwcGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uOTk3ODI2MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HTFhDb250ZXh0V3JhcHBlci5oCkBAIC0wLDAgKzEs
OTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR0xYQ09OVEVYV1JBUFBFUl9ICisj
ZGVmaW5lIEdMWENPTlRFWFdSQVBQRVJfSAorCisjaW5jbHVkZSAiR0xOYXRpdmVDb250ZXh0Lmgi
CisjaW5jbHVkZSA8R0wvZ2xleHQuaD4KKyNpbmNsdWRlIDxHTC9nbHguaD4KKyNpbmNsdWRlICJH
TENvbnRleHQuaCIKKyNpZiBVU0UoRUdMKQorI2luY2x1ZGUgIkdMQ29udGV4dEVHTC5oIgordHlw
ZWRlZiBFR0xDb250ZXh0IFBsYXRmb3JtTmF0aXZlQ29udGV4dDsKK3R5cGVkZWYgRUdMU3VyZmFj
ZSBQbGF0Zm9ybU5hdGl2ZVN1cmZhY2U7CisjZWxzZQorI2luY2x1ZGUgIkdMQ29udGV4dEdMWC5o
IgorI2luY2x1ZGUgPFgxMS9YYXRvbS5oPgorI2luY2x1ZGUgPFgxMS9YbGliLmg+CisjaW5jbHVk
ZSA8WDExL2V4dGVuc2lvbnMvWFNobS5oPgorI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hyZW5k
ZXIuaD4KKyNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YY29tcG9zaXRlLmg+CisjaW5jbHVkZSA8
R0wvZ2x4Lmg+Cit0eXBlZGVmIEdMWENvbnRleHQgUGxhdGZvcm1OYXRpdmVDb250ZXh0OwordHlw
ZWRlZiBHTFhEcmF3YWJsZSBQbGF0Zm9ybU5hdGl2ZVN1cmZhY2U7CisjZW5kaWYKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBHTFhDb250ZXh0V3JhcHBlciA6cHVibGljIEdMTmF0aXZl
Q29udGV4dAoreworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdMWENvbnRleHRXcmFwcGVyKTsK
K3B1YmxpYzoKKyAgICBHTFhDb250ZXh0V3JhcHBlcigpOworICAgIHZpcnR1YWwgfkdMWENvbnRl
eHRXcmFwcGVyKCkgeyB9CisgICAgdmlydHVhbCBQbGF0Zm9ybU5hdGl2ZVN1cmZhY2UgY3VycmVu
dE5hdGl2ZURyYXdhYmxlKCk7CisgICAgdmlydHVhbCBQbGF0Zm9ybU5hdGl2ZUNvbnRleHQgY3Vy
cmVudE5hdGl2ZUNvbnRleHQoKSA7CisgICAgdmlydHVhbCBib29sIGlzQ3VycmVudENvbnRleHQo
KSA9IDA7CisgICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIGhhbmRsZSgpID0g
MDsKK307CisKK2NsYXNzIEdMWEN1cnJlbnRDb250ZXh0V3JhcHBlciA6cHVibGljIEdMWENvbnRl
eHRXcmFwcGVyCit7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR0xYQ3VycmVudENvbnRleHRX
cmFwcGVyKTsKK3B1YmxpYzoKKyAgICBHTFhDdXJyZW50Q29udGV4dFdyYXBwZXIoKTsKKyAgICB2
aXJ0dWFsIH5HTFhDdXJyZW50Q29udGV4dFdyYXBwZXIoKTsKKyAgICB2aXJ0dWFsIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0QgaGFuZGxlKCk7CisgICAgdmlydHVhbCBib29sIGlzQ3VycmVudENv
bnRleHQoKTsKK3ByaXZhdGU6CisgICAgUGxhdGZvcm1OYXRpdmVDb250ZXh0IG1fY29udGV4dEhh
bmRsZTsKK307CisKK2NsYXNzIEdMWE9mZlNjcmVlbkNvbnRleHRXcmFwcGVyIDpwdWJsaWMgR0xY
Q29udGV4dFdyYXBwZXIKK3sKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHTFhPZmZTY3JlZW5D
b250ZXh0V3JhcHBlcik7CitwdWJsaWM6CisgICAgR0xYT2ZmU2NyZWVuQ29udGV4dFdyYXBwZXIo
R0xOYXRpdmVDb250ZXh0KiBzaGFyaW5nLHVpbnQ2NF90IHdpbmRvd0hhbmRsZSk7CisgICAgdmly
dHVhbCB+R0xYT2ZmU2NyZWVuQ29udGV4dFdyYXBwZXIoKTsKKyAgICB2aXJ0dWFsIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0QgaGFuZGxlKCk7CisgICAgdmlydHVhbCBib29sIGlzQ3VycmVudENv
bnRleHQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgcHVzaENvbnRleHQoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcG9wQ29udGV4dCgpOworICAgIHZpcnR1YWwgYm9vbCBtYWtlQ3VycmVudElmTmVlZGVkKCk7
Citwcml2YXRlOgorICAgIHZvaWQgZG9Qb3BDb250ZXh0KCk7CisgICAgUGxhdGZvcm1OYXRpdmVD
b250ZXh0IG1fZGV0YWNoZWRDb250ZXh0SGFuZGxlOworICAgIFBsYXRmb3JtTmF0aXZlU3VyZmFj
ZSBtX2RldGFjaGVkRHJhd2FibGU7CisgICAgT3duUHRyPEdMQ29udGV4dEdMWD4gbV9wbGF0Zm9y
bUNvbnRleHQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBHTFhDVVJSRU5UQ09OVEVYV1JBUFBFUl9I
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFw
aGljc0NvbnRleHQzREVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9l
ZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCmluZGV4IGVmMWUzMTUuLjUyODA2Y2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRl
eHQzREVmbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dy
YXBoaWNzQ29udGV4dDNERWZsLmNwcApAQCAtMjUsMTAgKzI1LDggQEAKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRFByaXZhdGUuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlIDxHTC9nbHguaD4KLQorI2luY2x1ZGUg
Ik9wZW5HTFNoaW1zLmgiCiAjaWYgVVNFKE9QRU5HTF9FU18yKQogI2luY2x1ZGUgIkV4dGVuc2lv
bnMzRE9wZW5HTEVTLmgiCiAjZWxzZQpAQCAtMzksNiArMzcsMTAgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBo
b3N0V2luZG93LCBSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKIHsKKyAgICBpZiAocmVuZGVyU3R5
bGUgPT0gUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpIHsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorCiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYo
bmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCByZW5kZXJTdHlsZSkpOwog
ICAgIHJldHVybiBjb250ZXh0LT5tX3ByaXZhdGUgPyBjb250ZXh0LnJlbGVhc2UoKSA6IDA7CiB9
CkBAIC01MiwxMCArNTQsMTAgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNE
KEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICAsIG1fdGV4
dHVyZSgwKQogICAgICwgbV9jb21wb3NpdG9yVGV4dHVyZSgwKQogICAgICwgbV9mYm8oMCkKLSNp
ZiBVU0UoT1BFTkdMX0VTXzIpCisgICAgI2lmIFVTRShPUEVOR0xfRVNfMikKICAgICAsIG1fZGVw
dGhCdWZmZXIoMCkKICAgICAsIG1fc3RlbmNpbEJ1ZmZlcigwKQotI2VuZGlmCisgICAgI2VuZGlm
CiAgICAgLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcigwKQogICAgICwgbV9sYXllckNvbXBvc2l0ZWQo
ZmFsc2UpCiAgICAgLCBtX2ludGVybmFsQ29sb3JGb3JtYXQoMCkKQEAgLTY3LDI5ICs2OSwxMiBA
QCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaQogICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVy
KDApCiAgICAgLCBtX3ByaXZhdGUoYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZSh0aGlzLCBob3N0V2luZG93LCByZW5kZXJTdHlsZSkpKQogewotICAgIHZhbGlkYXRlQXR0cmli
dXRlcygpOwotCi0gICAgaWYgKCFtX3ByaXZhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0
YXRpYyBib29sIGluaXRpYWxpemVkU2hpbXMgPSBmYWxzZTsKLSAgICBzdGF0aWMgYm9vbCBzdWNj
ZXNzID0gdHJ1ZTsKLSAgICBpZiAoIWluaXRpYWxpemVkU2hpbXMpIHsKLSAgICAgICAgc3VjY2Vz
cyA9IGluaXRpYWxpemVPcGVuR0xTaGltcygpOwotICAgICAgICBpbml0aWFsaXplZFNoaW1zID0g
dHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCFzdWNjZXNzKSB7CisgICAgaWYgKCFtX3ByaXZhdGUgfHwg
IW1fcHJpdmF0ZS0+bV9wbGF0Zm9ybUNvbnRleHQgfHwgIW1fcHJpdmF0ZS0+bV9wbGF0Zm9ybUNv
bnRleHQtPnB1c2hDb250ZXh0KCkpIHsKICAgICAgICAgbV9wcml2YXRlID0gbnVsbHB0cjsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJUb0N1
cnJlbnRHTENvbnRleHQpIHsKLSAgICAgICAgLy8gRXZhcyBkb2Vzbid0IGFsbG93IGluY2x1ZGlu
ZyBnbCBoZWFkZXJzIGFuZCBFdmFzX0dMIGhlYWRlcnMgYXQgdGhlIHNhbWUgdGltZSwKLSAgICAg
ICAgLy8gc28gd2UgbmVlZCB0byBxdWVyeSB0aGUgY3VycmVudCBnbCBjb250ZXh0L3N1cmZhY2Ug
aGVyZSBpbnN0ZWFkIG9mIGluIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS4KLSAgICAgICAgdm9p
ZCogY3VycmVudENvbnRleHQgPSAodm9pZCopZ2xYR2V0Q3VycmVudENvbnRleHQoKTsKLSAgICAg
ICAgdm9pZCogY3VycmVudFN1cmZhY2UgPSAodm9pZCopZ2xYR2V0Q3VycmVudERyYXdhYmxlKCk7
Ci0gICAgICAgIG1fcHJpdmF0ZS0+c2V0Q3VycmVudEdMQ29udGV4dChjdXJyZW50Q29udGV4dCwg
Y3VycmVudFN1cmZhY2UpOwotICAgIH0KKyAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKIAogICAg
IGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJPZmZzY3JlZW4pIHsKICAgICAgICAgLy8gQ3JlYXRl
IGJ1ZmZlcnMgZm9yIHRoZSBjYW52YXMgRkJPLgpAQCAtMTQ3LDI5ICsxMzIsMjUgQEAgR3JhcGhp
Y3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIGF0dHJzLCBIb3N0V2kKICAgICBnbEVuYWJsZShHTF9QT0lOVF9TUFJJVEUpOwogICAgIGds
RW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUpOwogI2VuZGlmCisgICAgZ2xDbGVh
ckNvbG9yKDAuMCwgMC4wLCAwLjAsIDAuMCk7CisgICAgbV9wcml2YXRlLT5tX3BsYXRmb3JtQ29u
dGV4dC0+cG9wQ29udGV4dCgpOwogfQogCiBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29u
dGV4dDNEKCkKIHsKICAgICBpZiAobV9yZW5kZXJTdHlsZSA9PSBSZW5kZXJUb0N1cnJlbnRHTENv
bnRleHQgfHwgIW1fcHJpdmF0ZSkKICAgICAgICAgcmV0dXJuOwotCiAgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CiAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLQogICAgIGlm
IChtX2F0dHJzLmFudGlhbGlhcykgewogICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwg
Jm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0KICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNp
bCB8fCBtX2F0dHJzLmRlcHRoKQogICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEs
ICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLQogICAgICAgICBnbERlbGV0ZUZy
YW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CiAgICAgfSBlbHNlIGlmIChtX2F0dHJz
LnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkgewotCiAjaWYgVVNFKE9QRU5HTF9FU18yKQogICAg
ICAgICBpZiAobV9hdHRycy5kZXB0aCkKICAgICAgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVy
cygxLCAmbV9kZXB0aEJ1ZmZlcik7Ci0KICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKICAg
ICAgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9zdGVuY2lsQnVmZmVyKTsKICNl
bmRpZgpAQCAtMTgwLDEyICsxNjEsMTYgQEAgR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0Nv
bnRleHQzRCgpCiAKIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0M0Q6
OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKQogeworICAgIGlmICghbV9wcml2YXRlKQorICAg
ICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gbV9wcml2YXRlLT5wbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dDNEKCk7CiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBQbGF0Zm9y
bUxheWVyKiBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7CisgICAg
aWYgKCFtX3ByaXZhdGUpCisgICAgICAgIHJldHVybiAwOwogI2lmIFVTRShURVhUVVJFX01BUFBF
Ul9HTCkKICAgICByZXR1cm4gbV9wcml2YXRlLmdldCgpOwogI2Vsc2UKQEAgLTE5OSwxMCArMTg0
LDYgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKICAg
ICBpZiAoIW1fcHJpdmF0ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fcmVu
ZGVyU3R5bGUgPT0gUmVuZGVyVG9DdXJyZW50R0xDb250ZXh0KQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQogICAgIHJldHVybiBtX3ByaXZhdGUtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogfQogCkBA
IC0yMzQsNyArMjE1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRUb0NhbnZhcyhj
b25zdCB1bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVscywgaW50IGltYWcKICAgICBjb250ZXh0LT5z
YXZlKCk7CiAKICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZVN1cmZhY2UgPSBhZG9w
dFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKLSAgICAgICAgY29uc3Rf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4oaW1hZ2VQaXhlbHMpLCBDQUlST19GT1JNQVRfQVJHQjMyLCBp
bWFnZVdpZHRoLCBpbWFnZUhlaWdodCwgaW1hZ2VXaWR0aCAqIDQpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfY2FzdDx1bnNp
Z25lZCBjaGFyKj4oaW1hZ2VQaXhlbHMpLCBDQUlST19GT1JNQVRfQVJHQjMyLCBpbWFnZVdpZHRo
LCBpbWFnZUhlaWdodCwgaW1hZ2VXaWR0aCAqIDQpKTsKIAogICAgIC8vIE9wZW5HTCBrZWVwcyB0
aGUgcGl4ZWxzIHN0b3JlZCBib3R0b20gdXAsIHNvIHdlIG5lZWQgdG8gZmxpcCB0aGUgaW1hZ2Ug
aGVyZS4KICAgICBjYWlyb190cmFuc2xhdGUoY3IsIDAsIGltYWdlSGVpZ2h0KTsKQEAgLTI1MSw3
ICsyMzIsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFzKGNvbnN0IHVu
c2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBpbnQgaW1hZwogI2lmIFVTRShHUkFQSElDU19TVVJG
QUNFKQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlR3JhcGhpY3NTdXJmYWNlcyhjb25z
dCBJbnRTaXplJiBzaXplKQogewotICAgIG1fcHJpdmF0ZS0+Y3JlYXRlR3JhcGhpY3NTdXJmYWNl
cyhzaXplKTsKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3ByaXZhdGUtPmNyZWF0ZUdy
YXBoaWNzU3VyZmFjZXMoc2l6ZSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlLmNwcAppbmRleCA2MmQwYTZlLi45YTMwZWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDEy
IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9y
YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI2LDcy
ICsyNywzNiBAQAogI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSA8RWNv
cmVfRXZhcy5oPgotI2luY2x1ZGUgPEV2YXNfR0wuaD4KICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaWYgVVNFKE9QRU5HTF9FU18y
KQorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgorI2Vs
c2UKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBo
aWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKICAgICA6IG1fY29udGV4dChj
b250ZXh0KQogICAgICwgbV9ob3N0V2luZG93KGhvc3RXaW5kb3cpCi0gICAgLCBtX2V2YXNHTCgw
KQotICAgICwgbV9ldmFzR0xDb250ZXh0KDApCi0gICAgLCBtX2V2YXNHTFN1cmZhY2UoMCkKLSAg
ICAsIG1fZ2xDb250ZXh0KDApCi0gICAgLCBtX2dsU3VyZmFjZSgwKQotICAgICwgbV9hcGkoMCkK
ICAgICAsIG1fcmVuZGVyU3R5bGUocmVuZGVyU3R5bGUpCisgICAgLCBtX1N1cmZhY2VSZXNpemUo
ZmFsc2UpCiB7Ci0gICAgaWYgKHJlbmRlclN0eWxlID09IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5k
ZXJUb0N1cnJlbnRHTENvbnRleHQpCi0gICAgICAgIHJldHVybjsKKyAgICBtX3BsYXRmb3JtQ29u
dGV4dCA9IEdMTmF0aXZlQ29udGV4dDo6Y3JlYXRlQ29udGV4dChyZW5kZXJTdHlsZSk7CiAKLSAg
ICBpZiAobV9ob3N0V2luZG93ICYmIG1faG9zdFdpbmRvdy0+cGxhdGZvcm1QYWdlQ2xpZW50KCkp
IHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIGNvZGUgcGF0aCBmb3IgV2ViS2l0
MS4KLSAgICAgICAgLy8gR2V0IEV2YXMgb2JqZWN0IGZyb20gcGxhdGZvcm1QYWdlQ2xpZW50IGFu
ZCBzZXQgRXZhc0dMIHJlbGF0ZWQgbWVtYmVycy4KKyAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0
KSB7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBGb3IgV2ViS2l0Miwgd2UgbmVl
ZCB0byBjcmVhdGUgYSBkdW1teSBlY29yZUV2YXMgb2JqZWN0IGZvciB0aGUgV2ViUHJvY2VzcyBp
biBvcmRlciB0byB1c2UgRXZhc0dMIEFQSXMuCi0jaWZkZWYgSEFWRV9FQ09SRV9YCi0gICAgZWNv
cmVfZXZhc19pbml0KCk7Ci0gICAgbV9lY29yZUV2YXMgPSBhZG9wdFB0cihlY29yZV9ldmFzX2ds
X3gxMV9uZXcoMCwgMCwgMCwgMCwgMSwgMSkpOwotICAgIGlmICghbV9lY29yZUV2YXMpCi0gICAg
ICAgIHJldHVybjsKLSNlbHNlCi0gICAgcmV0dXJuOwotI2VuZGlmCi0KLSAgICBFdmFzKiBldmFz
ID0gZWNvcmVfZXZhc19nZXQobV9lY29yZUV2YXMuZ2V0KCkpOwotICAgIGlmICghZXZhcykKKyAg
ICBpZiAocmVuZGVyU3R5bGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclRvQ3VycmVudEdM
Q29udGV4dCkgewogICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDcmVhdGUgYSBuZXcgRXZhc19H
TCBvYmplY3QgZm9yIGdsIHJlbmRlcmluZyBvbiBlZmwuCi0gICAgbV9ldmFzR0wgPSBldmFzX2ds
X25ldyhldmFzKTsKLSAgICBpZiAoIW1fZXZhc0dMKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBHZXQgdGhlIEFQSSBmb3IgcmVuZGVyaW5nIHVzaW5nIE9wZW5HTC4KLSAgICAvLyBUaGlzIHJl
dHVybnMgYSBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyBhbGwgdGhlIE9wZW5HTCBmdW5jdGlvbnMg
d2UgY2FuIHVzZSB0byByZW5kZXIgaW4gRXZhcwotICAgIG1fYXBpID0gZXZhc19nbF9hcGlfZ2V0
KG1fZXZhc0dMKTsKLSAgICBpZiAoIW1fYXBpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBD
cmVhdGUgYSBjb250ZXh0Ci0gICAgbV9ldmFzR0xDb250ZXh0ID0gZXZhc19nbF9jb250ZXh0X2Ny
ZWF0ZShtX2V2YXNHTCwgMCk7Ci0gICAgaWYgKCFtX2V2YXNHTENvbnRleHQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIENyZWF0ZSBhIHN1cmZhY2UKLSAgICBpZiAoIWNyZWF0ZVN1cmZhY2Uo
MCwgcmVuZGVyU3R5bGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0
V2luZG93KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgfQogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgSW50U2l6ZSBzdXJmYWNlU2l6
ZShtX2NvbnRleHQtPm1fY3VycmVudFdpZHRoLCBtX2NvbnRleHQtPm1fY3VycmVudEhlaWdodCk7
CiAgICAgbV9zdXJmYWNlRmxhZ3MgPSBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzVGV4dHVyZVRh
cmdldCB8IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nOworICAgIEludFNpemUgc3Vy
ZmFjZVNpemUobV9jb250ZXh0LT5tX2N1cnJlbnRXaWR0aCwgbV9jb250ZXh0LT5tX2N1cnJlbnRI
ZWlnaHQpOwogICAgIGlmICghc3VyZmFjZVNpemUuaXNFbXB0eSgpKQogICAgICAgICBtX2dyYXBo
aWNzU3VyZmFjZSA9IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKHN1cmZhY2VTaXplLCBtX3N1cmZh
Y2VGbGFncyk7CiAjZW5kaWYKQEAgLTk5LDc5ICs2NCwzMSBAQCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCwgSAogCiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6On5HcmFwaGljc0NvbnRleHQzRFByaXZh
dGUoKQogewotICAgIGlmICghbV9ldmFzR0wpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2V2YXNHTFN1cmZhY2UpCi0gICAgICAgIGV2YXNfZ2xfc3VyZmFjZV9kZXN0cm95KG1fZXZhc0dM
LCBtX2V2YXNHTFN1cmZhY2UpOwotCi0gICAgaWYgKG1fZXZhc0dMQ29udGV4dCkKLSAgICAgICAg
ZXZhc19nbF9jb250ZXh0X2Rlc3Ryb3kobV9ldmFzR0wsIG1fZXZhc0dMQ29udGV4dCk7Ci0KLSAg
ICBldmFzX2dsX2ZyZWUobV9ldmFzR0wpOwotCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0g
ICAgbV9ncmFwaGljc1N1cmZhY2UuY2xlYXIoKTsKLSNlbmRpZgotfQotCi1ib29sIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlU3VyZmFjZShQYWdlQ2xpZW50RWZsKiBwYWdlQ2xpZW50
LCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQotewotICAgIC8vIElmIFJlbmRlclN0
eWxlIGlzIFJlbmRlck9mZnNjcmVlbiwgd2Ugd2lsbCBiZSByZW5kZXJpbmcgdG8gYSBGQk8sCi0g
ICAgLy8gc28gRXZhc19HTF9TdXJmYWNlIGhhcyBhIDF4MSBkdW1teSBzdXJmYWNlLgotICAgIGlu
dCB3aWR0aCA9IDE7Ci0gICAgaW50IGhlaWdodCA9IDE7Ci0KLSAgICAvLyBCdXQsIGluIGNhc2Ug
b2YgUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3csIHdlIGhhdmUgdG8gcmVuZGVyIHRvIGEgcmVu
ZGVyIHRhcmdldCBzdXJmYWNlIHdpdGggdGhlIHNhbWUgc2l6ZSBhcyBvdXIgd2ViVmlldy4KLSAg
ICBpZiAocmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpIHsKLSAgICAgICAgaWYgKCFwYWdlQ2xp
ZW50KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAvLyBGSVhNRTogR2V0IGdl
b21ldHJ5IG9mIHdlYlZpZXcgYW5kIHNldCBzaXplIG9mIHRhcmdldCBzdXJmYWNlLgotICAgIH0K
LQotICAgIEV2YXNfR0xfQ29uZmlnIGNvbmZpZyA9IHsKLSAgICAgICAgRVZBU19HTF9SR0JBXzg4
ODgsCi0gICAgICAgIEVWQVNfR0xfREVQVEhfQklUXzgsCi0gICAgICAgIEVWQVNfR0xfU1RFTkNJ
TF9OT05FLCAvLyBGSVhNRTogc2V0IEVWQVNfR0xfU1RFTkNJTF9CSVRfOCBhZnRlciBmaXhpbmcg
RXZhc19HTCBidWcuCi0gICAgICAgIEVWQVNfR0xfT1BUSU9OU19OT05FLAotICAgICAgICBFVkFT
X0dMX01VTFRJU0FNUExFX05PTkUKLSAgICB9OwotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IEV2YXNf
R0xfU3VyZmFjZSBvYmplY3QKLSAgICBtX2V2YXNHTFN1cmZhY2UgPSBldmFzX2dsX3N1cmZhY2Vf
Y3JlYXRlKG1fZXZhc0dMLCAmY29uZmlnLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBpZiAoIW1fZXZh
c0dMU3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQotICAgIGlmIChyZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykgewotICAg
ICAgICBFdmFzX05hdGl2ZV9TdXJmYWNlIG5hdGl2ZVN1cmZhY2U7Ci0gICAgICAgIC8vIEZpbGwg
aW4gdGhlIE5hdGl2ZSBTdXJmYWNlIGluZm9ybWF0aW9uIGZyb20gdGhlIGdpdmVuIEV2YXMgR0wg
c3VyZmFjZS4KLSAgICAgICAgZXZhc19nbF9uYXRpdmVfc3VyZmFjZV9nZXQobV9ldmFzR0wsIG1f
ZXZhc0dMU3VyZmFjZSwgJm5hdGl2ZVN1cmZhY2UpOwotCi0gICAgICAgIC8vIEZJWE1FOiBDcmVh
dGUgYW5kIHNwZWNpYWxseSBzZXQgdXAgYSBldmFzX29iamVjdCB3aGljaCBhY3QgYXMgdGhlIHJl
bmRlciB0YXJnZXIgc3VyZmFjZS4KLSAgICB9CisgICAgaWYgKG1fZ3JhcGhpY3NTdXJmYWNlKQor
ICAgICAgICBtX2dyYXBoaWNzU3VyZmFjZS5jbGVhcigpOwogI2VuZGlmCi0KLSAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnNldEN1cnJlbnRHTENv
bnRleHQodm9pZCogY29udGV4dCwgdm9pZCogc3VyZmFjZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpjcmVhdGVTdXJmYWNlKFBhZ2VDbGllbnRFZmwqIHBhZ2VDbGllbnQsIGJvb2wg
cmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCiB7Ci0gICAgbV9nbENvbnRleHQgPSBjb250ZXh0
OwotICAgIG1fZ2xTdXJmYWNlID0gc3VyZmFjZTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQog
CiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fcmVuZGVyU3R5bGUg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclRvQ3VycmVudEdMQ29udGV4dCkKLSAgICAgICAg
cmV0dXJuIG1fZ2xDb250ZXh0OworICAgIGlmIChtX3BsYXRmb3JtQ29udGV4dCkKKyAgICAgICAg
cmV0dXJuIG1fcGxhdGZvcm1Db250ZXh0LT5oYW5kbGUoKTsKKworICAgIGlmIChHTE5hdGl2ZUNv
bnRleHQ6OmdldEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMTmF0aXZlQ29udGV4dDo6Z2V0
Q3VycmVudCgpLT5oYW5kbGUoKTsKIAotICAgIHJldHVybiBtX2V2YXNHTENvbnRleHQ7CisgICAg
cmV0dXJuIDA7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYWtlQ29udGV4
dEN1cnJlbnQoKQogewotICAgIHJldHVybiBldmFzX2dsX21ha2VfY3VycmVudChtX2V2YXNHTCwg
bV9ldmFzR0xTdXJmYWNlLCBtX2V2YXNHTENvbnRleHQpOworICAgIHJldHVybiBtX3BsYXRmb3Jt
Q29udGV4dCA/IG1fcGxhdGZvcm1Db250ZXh0LT5tYWtlQ3VycmVudElmTmVlZGVkKCkgOiBmYWxz
ZTsKIH0KIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKQEAgLTE4NCw2ICsxMDEsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVy
ZU1hcHBlciosIGNvbnN0IEZsb2F0UgogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQogdm9pZCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzU3VyZmFjZXMoY29uc3QgSW50
U2l6ZSYgc2l6ZSkKIHsKKyAgICBtX1N1cmZhY2VSZXNpemUgPSB0cnVlOwogICAgIGlmIChzaXpl
LmlzRW1wdHkoKSkKICAgICAgICAgbV9ncmFwaGljc1N1cmZhY2UuY2xlYXIoKTsKICAgICBlbHNl
CkBAIC0xOTIsMTcgKzExMCwyNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3Jl
YXRlR3JhcGhpY3NTdXJmYWNlcyhjb25zdCBJbnRTaXplJiBzaXplKQogCiB1aW50MzJfdCBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpCiB7Ci0gICAgaWYg
KCFtX2dyYXBoaWNzU3VyZmFjZSkKKyAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0IHx8ICFtX2dy
YXBoaWNzU3VyZmFjZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAobV9jb250ZXh0LT5tX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICBt
X3BsYXRmb3JtQ29udGV4dC0+cHVzaENvbnRleHQoKTsKKyAgICAgICAgbV9jb250ZXh0LT5yZXNv
bHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7CisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9jb250ZXh0LT5tX2JvdW5kRkJPKTsK
KyAgICAgICAgbV9wbGF0Zm9ybUNvbnRleHQtPnBvcENvbnRleHQoKTsKKyAgICB9CisKICAgICBt
X2dyYXBoaWNzU3VyZmFjZS0+Y29weUZyb21UZXh0dXJlKG1fY29udGV4dC0+bV90ZXh0dXJlLCBJ
bnRSZWN0KDAsIDAsIG1fY29udGV4dC0+bV9jdXJyZW50V2lkdGgsIG1fY29udGV4dC0+bV9jdXJy
ZW50SGVpZ2h0KSk7Ci0gICAgcmV0dXJuIG1fZ3JhcGhpY3NTdXJmYWNlLT5zd2FwQnVmZmVycygp
OworICAgIHVpbnQzMl90IHQgPSAgbV9ncmFwaGljc1N1cmZhY2UtPnN3YXBCdWZmZXJzKCk7Cisg
ICAgcmV0dXJuIHQ7CiB9CiAKIEdyYXBoaWNzU3VyZmFjZVRva2VuIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKSBjb25zdAogewotICAgIHJldHVybiBtX2dy
YXBoaWNzU3VyZmFjZS0+ZXhwb3J0VG9rZW4oKTsKKyAgICBpZiAobV9ncmFwaGljc1N1cmZhY2Up
CisgICAgICAgIHJldHVybiBtX2dyYXBoaWNzU3VyZmFjZS0+ZXhwb3J0VG9rZW4oKTsKKyAgICBy
ZXR1cm4gR3JhcGhpY3NTdXJmYWNlVG9rZW4oKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlLmgKaW5kZXggMWFlNDM1MS4uZTE2Yjk3NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUuaApAQCAtMjEsNiArMjEsNyBAQAogI2RlZmluZSBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGVfaAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQogI2luY2x1ZGUg
PHRleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oPgpAQCAtMjgsMTQgKzI5LDkgQEAK
IAogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQogI2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFjZS5o
IgorI2luY2x1ZGUgIkdMTmF0aXZlQ29udGV4dC5oIgogI2VuZGlmCiAKLXR5cGVkZWYgc3RydWN0
IF9FdmFzX0dMICAgICAgICAgICAgICAgRXZhc19HTDsKLXR5cGVkZWYgc3RydWN0IF9FdmFzX0dM
X1N1cmZhY2UgICAgICAgRXZhc19HTF9TdXJmYWNlOwotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xf
Q29udGV4dCAgICAgICBFdmFzX0dMX0NvbnRleHQ7Ci10eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9D
b25maWcgICAgICAgIEV2YXNfR0xfQ29uZmlnOwotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfQVBJ
ICAgICAgICAgICBFdmFzX0dMX0FQSTsKLQogY2xhc3MgUGFnZUNsaWVudEVmbDsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNTAsNiArNDYsOCBAQCBwdWJsaWM6CiAKICAgICBQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dDNEIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdDsKIAorICAg
IHZvaWQgY3JlYXRlU3VyZmFjZShQYWdlQ2xpZW50RWZsKiBwYWdlQ2xpZW50LCBib29sIHJlbmRl
ckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKICAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAjZW5kaWYKQEAg
LTYzLDggKzYxLDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBib29sIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGJvb2wgY3JlYXRlU3VyZmFjZShQYWdlQ2xpZW50RWZsKiwgYm9vbCByZW5k
ZXJEaXJlY3RseVRvRXZhc0dMT2JqZWN0KTsKLSAgICB2b2lkIHNldEN1cnJlbnRHTENvbnRleHQo
dm9pZCosIHZvaWQqKTsKKyAgICBib29sIGNyZWF0ZVN1cmZhY2UoKTsKIAogICAgIEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKICAgICBHcmFwaGljc0NvbnRleHQz
RCogbV9jb250ZXh0OwpAQCAtNzIsMTggKzY5LDEyIEBAIHB1YmxpYzoKICNpZiBVU0UoR1JBUEhJ
Q1NfU1VSRkFDRSkKICAgICBHcmFwaGljc1N1cmZhY2U6OkZsYWdzIG1fc3VyZmFjZUZsYWdzOwog
ICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IG1fZ3JhcGhpY3NTdXJmYWNlOworICAgIE93blB0
cjxHTE5hdGl2ZUNvbnRleHQ+IG1fcGxhdGZvcm1Db250ZXh0OwogI2VuZGlmCiAKICAgICBMaXN0
SGFzaFNldDxHQzNEZW51bT4gbV9zeW50aGV0aWNFcnJvcnM7Ci0KLSAgICBPd25QdHI8RWNvcmVf
RXZhcz4gbV9lY29yZUV2YXM7Ci0gICAgRXZhc19HTCogbV9ldmFzR0w7Ci0gICAgRXZhc19HTF9D
b250ZXh0KiBtX2V2YXNHTENvbnRleHQ7Ci0gICAgRXZhc19HTF9TdXJmYWNlKiBtX2V2YXNHTFN1
cmZhY2U7Ci0gICAgdm9pZCogbV9nbENvbnRleHQ7Ci0gICAgdm9pZCogbV9nbFN1cmZhY2U7Ci0g
ICAgRXZhc19HTF9BUEkqIG1fYXBpOwogICAgIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHls
ZSBtX3JlbmRlclN0eWxlOworICAgIGJvb2wgbV9TdXJmYWNlUmVzaXplOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173639</attachid>
            <date>2012-11-12 06:44:24 -0800</date>
            <delta_ts>2012-11-14 11:27:10 -0800</delta_ts>
            <desc>patch</desc>
            <filename>context3drefactor.patch</filename>
            <type>text/plain</type>
            <size>60289</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1MDMzNzE3Li40ODFkNDk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTE3
IEBACisyMDEyLTExLTExICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGlu
dGVsLmNvbT4KKworICAgICAgICBbRUZMXSBSZWZhY3RvciBHcmFwaGljc0NvbnRleHQzREVGTC4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTI5MS4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3Rv
ciBHcmFwaGljc0NvbnRleHQzREVGTCBjbGFzcy4gVG8gaGVscCB3aXRoIHRoZSBmb2xsb3dpbmcg
dGhpbmdzOgorICAgICAgICAxKSBFYXN5IENvbnRleHQgTWFuYWdlbWVudCBmb3IgZGlmZmVyZW50
IHJlbmRlciB0eXBlcy4KKyAgICAgICAgMikgVG8gYmUgYWJsZSB0byBlYXNpbHkgYWRkIHN1cHBv
cnQgZm9yIGRpZmZlcmVudCBnbCBiYWNrZW5kcy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HTE5hdGl2ZUNvbnRleHQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R0xOYXRpdmVD
b250ZXh0OjpjcmVhdGVDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdMTmF0aXZlQ29udGV4
dDo6Y3JlYXRlT2ZmU2NyZWVuQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHTE5hdGl2ZUNv
bnRleHQ6OmNyZWF0ZUN1cnJlbnRDb250ZXh0V3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpt
X3N1cHBvcnRzUm9idXN0Q29udGV4dENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdMTmF0
aXZlQ29udGV4dDo6fkdMTmF0aXZlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHTE5hdGl2
ZUNvbnRleHQ6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdMTmF0aXZlQ29udGV4
dDo6aXNDb250ZXh0TG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpHTE5hdGl2ZUNvbnRleHQ6OnJl
bGVhc2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdMTmF0aXZlQ29udGV4dDo6aGFuZGxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdMTmF0aXZlQ29udGV4dDo6aXNDdXJyZW50Q29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpHTE5hdGl2ZUNvbnRleHQ6OmluaXRpYWxpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6R0xOYXRpdmVDb250ZXh0OjpnZXRDdXJyZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkdMTmF0aXZlQ29udGV4dDo6cGxhdGZvcm1NYWtlQ3VycmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpHTE5hdGl2ZUNvbnRleHQ6OnBsYXRmb3JtUmVsZWFzZUN1cnJlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6R0xOYXRpdmVDb250ZXh0OjpkZXN0cm95KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9lZmwvR0xOYXRpdmVDb250ZXh0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChHTE5hdGl2ZUNvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2VmbC9HTE5hdGl2ZVN1cmZhY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R0xOYXRpdmVTdXJmYWNlOjpjcmVhdGVPZmZzY3JlZW5TdXJmYWNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdMTmF0aXZlU3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjo6bV9zaGFyZWREaXNwbGF5KToKKyAgICAgICAgKFdlYkNv
cmU6OkdMTmF0aXZlU3VyZmFjZTo6fkdMTmF0aXZlU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHTE5hdGl2ZVN1cmZhY2U6OmhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpHTE5hdGl2ZVN1
cmZhY2U6Omdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdMTmF0aXZlU3VyZmFjZTo6c2hh
cmVkRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHTE5hdGl2ZVN1cmZhY2U6OnN1cmZhY2VD
b25maWcpOgorICAgICAgICAoV2ViQ29yZTo6R0xOYXRpdmVTdXJmYWNlOjpzd2FwQnVmZmVycyk6
CisgICAgICAgIChXZWJDb3JlOjpHTE5hdGl2ZVN1cmZhY2U6OmNvcHlUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdMTmF0aXZlU3VyZmFjZTo6c2V0R2VvbWV0cnkpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2VmbC9HTE5hdGl2ZVN1cmZhY2UuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKEdMTmF0aXZlU3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZWZsL0dMWENvbnRleHRXcmFwcGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OjpHTE5hdGl2ZUNvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6R0xYQ3VycmVudENvbnRleHRXcmFwcGVyOjp+R0xYQ3VycmVudENvbnRleHRXcmFwcGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcjo6aXNDdXJyZW50
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHTFhDdXJyZW50Q29udGV4dFdyYXBwZXI6OmN1
cnJlbnRBY3RpdmVDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Om1fZGlzcGxheSk6CisgICAg
ICAgIChXZWJDb3JlOjpHTFhDb250ZXh0V3JhcHBlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHTFhDb250ZXh0V3JhcHBlcjo6fkdMWENvbnRleHRXcmFwcGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdMWENvbnRleHRXcmFwcGVyOjpwbGF0Zm9ybU1ha2VDdXJyZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdMWENvbnRleHRXcmFwcGVyOjpwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkdMWENvbnRleHRXcmFwcGVyOjpjdXJyZW50QWN0aXZlQ29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpHTFhDb250ZXh0V3JhcHBlcjo6ZnJlZVJlc291cmNlcyk6
CisgICAgICAgIChXZWJDb3JlOjpHTFhDb250ZXh0V3JhcHBlcjo6ZGVzdHJveSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dMWENvbnRleHRXcmFwcGVyLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dMWFN1cmZh
Y2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6OkdM
TmF0aXZlU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFhTdXJmYWNlOjp+R0xYU3VyZmFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFhTdXJmYWNlOjp2aXN1YWxJbmZvKToKKyAgICAgICAg
KFdlYkNvcmU6OkdMWFN1cmZhY2U6OnhXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0xYU3Vy
ZmFjZTo6cEJ1ZmZlckNvbmZpZyk6CisgICAgICAgIChXZWJDb3JlOjpHTFhTdXJmYWNlOjp0cmFu
c3BvcnRTdXJmYWNlQ29uZmlnKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFN1cmZhY2U6OmlzWFJl
bmRlckV4dGVuc2lvblN1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjo6R0xYU3VyZmFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpHTFhUcmFuc3BvcnRTdXJmYWNlOjp+R0xYVHJhbnNwb3J0U3Vy
ZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFhUcmFuc3BvcnRTdXJmYWNlOjpzdXJmYWNlQ29u
ZmlnKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OnN3YXBCdWZmZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OnNldEdlb21ldHJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OmluaXRpYWxpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6R0xYUEJ1ZmZlcjo6fkdMWFBCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R0xYUEJ1ZmZlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFhQQnVmZmVy
OjpzdXJmYWNlQ29uZmlnKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xYU3Vy
ZmFjZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU2hhcmVkUmVzb3Vy
Y2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFJlc291cmNlczo6U2hhcmVkUmVzb3VyY2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFJlc291cmNlczo6Z2V0WFdpbmRvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFyZWRSZXNvdXJjZXM6OmRpc3BsYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhcmVkUmVzb3VyY2VzOjp2aXN1YWxJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJl
ZFJlc291cmNlczo6Y3JlYXRlQ29uZmlnKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFJlc291
cmNlczo6flNoYXJlZFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRSZXNvdXJj
ZXM6OnBCdWZmZXJDb250ZXh0Q29uZmlnKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFJlc291
cmNlczo6c3VyZmFjZUNvbnRleHRDb25maWcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkUmVz
b3VyY2VzOjppc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2FsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp+R3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6Y3JlYXRlU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OnNldENvbnRleHRMb3N0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFrZUNvbnRleHRDdXJyZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3Jh
cGhpY3NTdXJmYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OmNvcHlUb0dyYXBoaWNzU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmdyYXBoaWNzU3VyZmFjZVRva2VuKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmg6CisgICAgICAgIChHcmFw
aGljc0NvbnRleHQzRFByaXZhdGUpOgorCiAyMDEyLTExLTA3ICBUaWFuY2hlbmcgSmlhbmcgIDx0
aWppYW5nQHJpbS5jb20+CgogICAgICAgICBbQmxhY2tCZXJyeV0gVXBkYXRlIEJCMTAgZm9ybSB0
aGVtZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggNTgyYWYwNS4uOGY4MzdjMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTI4Miw2ICsyODIsMTAgQEAgSUYgKFdURl9VU0Vf
M0RfR1JBUEhJQ1MpCiAgIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL09wZW5HTFNoaW1zLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Ry
YXdpbmdCdWZmZXJDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xOYXRpdmVD
b250ZXh0LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HTE5hdGl2ZVN1cmZhY2UuY3Bw
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dMWFN1cmZhY2UuY3BwCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZWZsL0dMWENvbnRleHRXcmFwcGVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9lZmwv
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9lZmwvR0xOYXRpdmVDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2VmbC9HTE5hdGl2ZUNvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjFiNjc0ODgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xOYXRpdmVDb250ZXh0LmNwcApAQCAtMCwwICsx
LDIwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
VVNFKDNEX0dSQVBISUNTKSB8fCBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNs
dWRlICJHTE5hdGl2ZUNvbnRleHQuaCIKKworI2luY2x1ZGUgIkdMWENvbnRleHRXcmFwcGVyLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFBGTkdMR0VUR1JBUEhJQ1NSRVNFVFNU
QVRVU0FSQlBST0MgIGdsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQiA9IDA7CisKK1Bhc3NPd25Q
dHI8R0xOYXRpdmVDb250ZXh0PiBHTE5hdGl2ZUNvbnRleHQ6OmNyZWF0ZUNvbnRleHQoR3JhcGhp
Y3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQoreworCisgICAgc3RhdGljIGJv
b2wgaW5pdGlhbGl6ZWRTaGltcyA9IGZhbHNlOworICAgIHN0YXRpYyBib29sIHN1Y2Nlc3MgPSB0
cnVlOworCisgICAgaWYgKCFpbml0aWFsaXplZFNoaW1zKSB7CisgICAgICAgIHN1Y2Nlc3MgPSBp
bml0aWFsaXplT3BlbkdMU2hpbXMoKTsKKworICAgICAgICBnbEdldEdyYXBoaWNzUmVzZXRTdGF0
dXNBUkIgPSAoUEZOR0xHRVRHUkFQSElDU1JFU0VUU1RBVFVTQVJCUFJPQylnbFhHZXRQcm9jQWRk
cmVzc0FSQigoY29uc3QgR0x1Ynl0ZSopImdsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQiIpOwor
ICAgICAgICBpbml0aWFsaXplZFNoaW1zID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIXN1Y2Nl
c3MpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc3dpdGNoIChyZW5kZXJTdHlsZSkg
eworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlck9mZnNjcmVlbjoKKyAgICAgICAg
aWYgKE93blB0cjxHTE5hdGl2ZUNvbnRleHQ+IGdseENvbnRleHQgID0gR0xOYXRpdmVDb250ZXh0
OjpjcmVhdGVPZmZTY3JlZW5Db250ZXh0KCkpCisgICAgICAgICAgICByZXR1cm4gZ2x4Q29udGV4
dC5yZWxlYXNlKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJlbmRlclRvQ3VycmVudEdMQ29udGV4dDoKKyAgICAgICAgaWYgKE93blB0cjxHTE5hdGl2ZUNv
bnRleHQ+IGdseENvbnRleHQgID0gR0xOYXRpdmVDb250ZXh0OjpjcmVhdGVDdXJyZW50Q29udGV4
dFdyYXBwZXIoKSkKKyAgICAgICAgICAgIHJldHVybiBnbHhDb250ZXh0LnJlbGVhc2UoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlU
b0hvc3RXaW5kb3c6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1Bhc3NPd25QdHI8R0xOYXRpdmVD
b250ZXh0PiBHTE5hdGl2ZUNvbnRleHQ6OmNyZWF0ZU9mZlNjcmVlbkNvbnRleHQoKQoreworICAg
IE93blB0cjxHTE5hdGl2ZUNvbnRleHQ+IGdseENvbnRleHQgPSBhZG9wdFB0cihuZXcgR0xYQ29u
dGV4dFdyYXBwZXIoKSk7CisgICAgcmV0dXJuIGdseENvbnRleHQucmVsZWFzZSgpOworfQorCitQ
YXNzT3duUHRyPEdMTmF0aXZlQ29udGV4dD4gR0xOYXRpdmVDb250ZXh0OjpjcmVhdGVDdXJyZW50
Q29udGV4dFdyYXBwZXIoKQoreworICAgIE93blB0cjxHTE5hdGl2ZUNvbnRleHQ+IGdseENvbnRl
eHQgPSBhZG9wdFB0cihuZXcgR0xYQ3VycmVudENvbnRleHRXcmFwcGVyKCkpOworCisgICAgaWYg
KGdseENvbnRleHQtPmhhbmRsZSgpKQorICAgICAgICByZXR1cm4gZ2x4Q29udGV4dC5yZWxlYXNl
KCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIEdMTmF0aXZlQ29udGV4dCog
bV9DdXJyZW50Q29udGV4dCA9IDA7CisKK0dMTmF0aXZlQ29udGV4dDo6R0xOYXRpdmVDb250ZXh0
KCkKKyAgICA6IG1fY29udGV4dEhhbmRsZSgwKQorICAgICwgbV9zdXBwb3J0c1JvYnVzdENvbnRl
eHRDcmVhdGlvbihmYWxzZSkKK3sKKworfQorCitHTE5hdGl2ZUNvbnRleHQ6On5HTE5hdGl2ZUNv
bnRleHQoKQoreworICAgIGlmICh0aGlzID09IG1fQ3VycmVudENvbnRleHQpCisgICAgICAgIG1f
Q3VycmVudENvbnRleHQgPSAwOworfQorCitib29sIEdMTmF0aXZlQ29udGV4dDo6bWFrZUN1cnJl
bnQoR0xOYXRpdmVTdXJmYWNlKiBzdXJmYWNlKQoreworICAgIG1fY29udGV4dExvc3QgPSBmYWxz
ZTsKKworICAgIGlmIChzdXJmYWNlICYmICFzdXJmYWNlLT5oYW5kbGUoKS5pc1ZhbGlkKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChpc0N1cnJlbnRDb250ZXh0KCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgYm9vbCByZXR1cm5WYWx1ZSA9IGZhbHNlOworCisgICAg
aWYgKCFzdXJmYWNlKSB7CisgICAgICAgIG1fQ3VycmVudENvbnRleHQgPSAwOworICAgICAgICBw
bGF0Zm9ybVJlbGVhc2VDdXJyZW50KCk7CisgICAgICAgIHJldHVyblZhbHVlID0gIHRydWU7Cisg
ICAgfSBlbHNlICBpZiAocGxhdGZvcm1NYWtlQ3VycmVudChzdXJmYWNlKSkgeworICAgICAgICBt
X0N1cnJlbnRDb250ZXh0ID0gdGhpczsKKyAgICAgICAgcmV0dXJuVmFsdWUgPSAgdHJ1ZTsKKyAg
ICB9CisKKyAgICBpZiAobV9zdXBwb3J0c1JvYnVzdENvbnRleHRDcmVhdGlvbiAmJiBnbEdldEdy
YXBoaWNzUmVzZXRTdGF0dXNBUkIpIHsKKyAgICAgICAgR0xlbnVtIHN0YXR1cyA9IGdsR2V0R3Jh
cGhpY3NSZXNldFN0YXR1c0FSQigpOworCisgICAgICAgIHN3aXRjaCAoc3RhdHVzKSB7CisgICAg
ICAgIGNhc2UgTmF0aXZlQ09OVEVYVF9OT19FUlJPUjoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIE5hdGl2ZUNPTlRFWFRfR1VJTFRZX0NPTlRFWFRfUkVTRVQ6CisgICAgICAgICAg
ICBtX2NvbnRleHRMb3N0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE5hdGl2ZUNPTlRFWFRfSU5OT0NFTlRfQ09OVEVYVF9SRVNFVDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIE5hdGl2ZUNPTlRFWFRfVU5LTk9XTl9DT05URVhUX1JFU0VUOgorICAg
ICAgICAgICAgbV9jb250ZXh0TG9zdCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiByZXR1cm5WYWx1ZTsKK30KKworYm9vbCBHTE5hdGl2
ZUNvbnRleHQ6OmlzQ29udGV4dExvc3QoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHRM
b3N0OworfQorCit2b2lkIEdMTmF0aXZlQ29udGV4dDo6cmVsZWFzZUN1cnJlbnQoKQoreworICAg
IGlmICghaXNDdXJyZW50Q29udGV4dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX0N1cnJl
bnRDb250ZXh0ID0gMDsKKyAgICBwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KCk7Cit9CisKK1BsYXRm
b3JtTmF0aXZlQ29udGV4dCBHTE5hdGl2ZUNvbnRleHQ6OmhhbmRsZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fY29udGV4dEhhbmRsZTsKK30KKworYm9vbCBHTE5hdGl2ZUNvbnRleHQ6OmlzQ3Vy
cmVudENvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHRIYW5kbGUgPT0gY3Vy
cmVudEFjdGl2ZUNvbnRleHQoKTsKK30KKworYm9vbCBHTE5hdGl2ZUNvbnRleHQ6OmluaXRpYWxp
emUoR0xOYXRpdmVTdXJmYWNlKikKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR0xOYXRpdmVD
b250ZXh0KiBHTE5hdGl2ZUNvbnRleHQ6OmdldEN1cnJlbnQoKQoreworICAgIHJldHVybiBtX0N1
cnJlbnRDb250ZXh0OworfQorCitib29sIEdMTmF0aXZlQ29udGV4dDo6cGxhdGZvcm1NYWtlQ3Vy
cmVudChHTE5hdGl2ZVN1cmZhY2UqKQoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdM
TmF0aXZlQ29udGV4dDo6cGxhdGZvcm1SZWxlYXNlQ3VycmVudCgpCit7CisKK30KKwordm9pZCBH
TE5hdGl2ZUNvbnRleHQ6OmRlc3Ryb3koKQoreworICAgIG1fY29udGV4dEhhbmRsZSA9IDA7Cisg
ICAgbV9zdXBwb3J0c1JvYnVzdENvbnRleHRDcmVhdGlvbiA9IGZhbHNlOworCisgICAgaWYgKHRo
aXMgPT0gbV9DdXJyZW50Q29udGV4dCkKKyAgICAgICAgbV9DdXJyZW50Q29udGV4dCA9IDA7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKworCisKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dMTmF0aXZlQ29udGV4dC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dMTmF0aXZlQ29udGV4dC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNWNmMDMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xOYXRpdmVDb250
ZXh0LmgKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBD
b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHTE5h
dGl2ZUNvbnRleHRfaAorI2RlZmluZSBHTE5hdGl2ZUNvbnRleHRfaAorCisjaW5jbHVkZSAiR0xY
RGVmcy5oIgorI2luY2x1ZGUgIkdMTmF0aXZlU3VyZmFjZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKKy8vIEVuY2Fwc3VsYXRl
cyBhbiBPcGVuR0wgY29udGV4dCBhbmQgZHJhd2FibGUsIGhpZGluZyBwbGF0Zm9ybSBzcGVjaWZp
YyBtYW5hZ2VtZW50LgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdMTmF0aXZlQ29u
dGV4dCB7CisKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHTE5hdGl2ZUNvbnRleHQpOworcHVi
bGljOgorCisgICAgZW51bSBOYXRpdmVDb250ZXh0UmVzZXQgeworICAgICAgICBOYXRpdmVDT05U
RVhUX05PX0VSUk9SID0gMCwKKyAgICAgICAgTmF0aXZlQ09OVEVYVF9HVUlMVFlfQ09OVEVYVF9S
RVNFVCA9IDB4ODI1MywKKyAgICAgICAgTmF0aXZlQ09OVEVYVF9JTk5PQ0VOVF9DT05URVhUX1JF
U0VUID0gMHg4MjU0LAorICAgICAgICBOYXRpdmVDT05URVhUX1VOS05PV05fQ09OVEVYVF9SRVNF
VCA9IDB4ODI1NSwKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NPd25QdHI8R0xOYXRpdmVDb250
ZXh0PiBjcmVhdGVDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSk7CisKKyAg
ICBHTE5hdGl2ZUNvbnRleHQoKTsKKyAgICB2aXJ0dWFsIH5HTE5hdGl2ZUNvbnRleHQoKTsKKwor
ICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplKEdMTmF0aXZlU3VyZmFjZSopOworCisgICAgLy8g
TWFrZXMgdGhpcyBhbmQgc3VyZmFjZSBhcyBjdXJyZW50IGNvbnRleHQgYW5kIGRyYXdhYmxlLgor
ICAgIC8vIENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIG5vIHN1cmZhY2UgaXMgc2FtZSBhcyBj
YWxsaW5nIHJlbGVhc2VDdXJyZW50LgorICAgIC8vIERvZXMgbm90aGluZyBpZiB0aGlzIGlzIGFs
cmVhZHkgY3VycmVudCBDb250ZXh0LgorICAgIGJvb2wgbWFrZUN1cnJlbnQoR0xOYXRpdmVTdXJm
YWNlKiA9IDApOworCisgICAgLy8gU2V0cyBDdXJyZW50IENvbnRleHQgYW5kIERyYXdhYmxlIGFz
IE51bGwuCisgICAgLy8gRG9lc24ndCBoYXZlIGFueSBlZmZlY3QgaWYgdGhpcyBpcyBub3QgdGhl
IGN1cnJlbnQgQ29udGV4dC4KKyAgICB2b2lkIHJlbGVhc2VDdXJyZW50KCk7CisKKyAgICAvLyBS
ZXR1cm5zIHVuZGVybHlpbmcgcGxhdGZvcm0gc3BlY2lmaWMgY29udGV4dCBoYW5kbGUuCisgICAg
UGxhdGZvcm1OYXRpdmVDb250ZXh0IGhhbmRsZSgpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoaXMgaXMgdGhlIGN1cnJlbnQgY29udGV4dC4KKyAgICB2aXJ0dWFsIGJvb2wgaXND
dXJyZW50Q29udGV4dCgpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgY29u
dGV4dCBoYXMgYmVlbiByZXNldC4KKyAgICBib29sIGlzQ29udGV4dExvc3QoKSBjb25zdDsKKwor
ICAgIC8vIERlc3Ryb3lzIHRoaXMgY29udGV4dCBhbmQgc2V0cyB0aGUgY3VycmVudCBjb250ZXh0
IGFzIG51bGwuCisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKKworICAgIHN0YXRpYyBHTE5h
dGl2ZUNvbnRleHQqIGdldEN1cnJlbnQoKTsKKworcHJvdGVjdGVkOgorICAgIC8vIFJldHVybnMg
Y3VycmVudCBhY3RpdmUgR0wgQ29udGV4dC4gSXQgbmVlZCBub3QgYmUgc2FtZSBhcyBoYW5kbGUu
CisgICAgdmlydHVhbCBQbGF0Zm9ybU5hdGl2ZUNvbnRleHQgY3VycmVudEFjdGl2ZUNvbnRleHQo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtTWFrZUN1cnJlbnQoR0xOYXRp
dmVTdXJmYWNlKik7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtUmVsZWFzZUN1cnJlbnQoKTsK
KyAgICBQbGF0Zm9ybU5hdGl2ZUNvbnRleHQgbV9jb250ZXh0SGFuZGxlOworICAgIGJvb2wgbV9z
dXBwb3J0c1JvYnVzdENvbnRleHRDcmVhdGlvbjsKKyAgICBib29sIG1fY29udGV4dExvc3Q7CisK
K3ByaXZhdGU6CisgICAgc3RhdGljIFBhc3NPd25QdHI8R0xOYXRpdmVDb250ZXh0PiBjcmVhdGVP
ZmZTY3JlZW5Db250ZXh0KCk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8R0xOYXRpdmVDb250ZXh0
PiBjcmVhdGVDdXJyZW50Q29udGV4dFdyYXBwZXIoKTsKKworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorI2VuZGlmIC8vIEdMTmF0aXZlQ29udGV4dF9ICisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HTE5hdGl2ZVN1cmZhY2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dMTmF0aXZlU3VyZmFjZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRkZmU4YgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HTE5hdGl2ZVN1cmZhY2Uu
Y3BwCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBVU0UoM0RfR1JBUEhJQ1MpIHx8IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKworI2luY2x1ZGUgIkdMTmF0aXZlU3VyZmFjZS5oIgorCisjaW5jbHVkZSAiR0xYU3Vy
ZmFjZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworCitQYXNzUmVmUHRyPEdMTmF0aXZlU3VyZmFjZT4gR0xOYXRpdmVTdXJmYWNlOjpjcmVh
dGVPZmZzY3JlZW5TdXJmYWNlKCkKK3sKKyAgICBSZWZQdHI8R0xOYXRpdmVTdXJmYWNlPiBzdXJm
YWNlID0gIGFkb3B0UmVmKG5ldyBHTFhQQnVmZmVyKCkpOworCisgICAgaWYgKHN1cmZhY2UtPmhh
bmRsZSgpLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHN1cmZhY2U7CisKKyAgICByZXR1cm4g
UGFzc1JlZlB0cjxHTE5hdGl2ZVN1cmZhY2U+KCk7Cit9CisKK1Bhc3NSZWZQdHI8R0xOYXRpdmVT
dXJmYWNlPiBHTE5hdGl2ZVN1cmZhY2U6OmNyZWF0ZVRyYW5zcG9ydFN1cmZhY2UoKQoreworICAg
IFJlZlB0cjxHTE5hdGl2ZVN1cmZhY2U+IHN1cmZhY2UgPSAgYWRvcHRSZWYobmV3IEdMWFRyYW5z
cG9ydFN1cmZhY2UoKSk7CisKKyAgICBpZiAoc3VyZmFjZS0+aGFuZGxlKCkuaXNWYWxpZCgpKQor
ICAgICAgICByZXR1cm4gc3VyZmFjZTsKKworICAgIHJldHVybiBQYXNzUmVmUHRyPEdMTmF0aXZl
U3VyZmFjZT4oKTsKK30KKworR0xOYXRpdmVTdXJmYWNlOjpHTE5hdGl2ZVN1cmZhY2UoKQorICAg
IDogbV9mYm9JZCgwKQorICAgICwgbV9zaGFyZWREaXNwbGF5KDApCit7CisKK30KKworR0xOYXRp
dmVTdXJmYWNlOjp+R0xOYXRpdmVTdXJmYWNlKCkKK3sKKworfQorCitHcmFwaGljc1N1cmZhY2VU
b2tlbiBHTE5hdGl2ZVN1cmZhY2U6OmhhbmRsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEdyYXBo
aWNzU3VyZmFjZVRva2VuKG1fZHJhd2FibGUpOworfQorCitjb25zdCBJbnRSZWN0JiBHTE5hdGl2
ZVN1cmZhY2U6Omdlb21ldHJ5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZWN0OworfQorCitw
bGF0Zm9ybURpc3BsYXkgR0xOYXRpdmVTdXJmYWNlOjpzaGFyZWREaXNwbGF5KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9zaGFyZWREaXNwbGF5OworfQorCitQbGF0Zm9ybVN1cmZhY2VDb25maWcg
R0xOYXRpdmVTdXJmYWNlOjpzdXJmYWNlQ29uZmlnKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwor
dm9pZCBHTE5hdGl2ZVN1cmZhY2U6OnN3YXBCdWZmZXJzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIEdMTmF0aXZlU3VyZmFjZTo6Y29weVRleHR1cmUodWludDMyX3QgdGV4
dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkKK3sKKworICAgIGlmICghbV9mYm9JZCkK
KyAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvSWQpOworCisKKyAgICBpbnQgeCA9
IHNvdXJjZVJlY3QueCgpOworICAgIGludCB5ID0gc291cmNlUmVjdC55KCk7CisgICAgaW50IHdp
ZHRoID0gc291cmNlUmVjdC53aWR0aCgpOworICAgIGludCBoZWlnaHQgPSBzb3VyY2VSZWN0Lmhl
aWdodCgpOworCisgICAgZ2xQdXNoQXR0cmliKEdMX0NPTE9SX0JVRkZFUl9CSVQpOworCisgICAg
R0xpbnQgcHJldmlvdXNGQk87CisgICAgZ2xHZXRJbnRlZ2VydihHTF9GUkFNRUJVRkZFUl9CSU5E
SU5HLCAmcHJldmlvdXNGQk8pOworCisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfUkVBRF9GUkFN
RUJVRkZFUiwgbV9mYm9JZCk7CisKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRl
eHR1cmUpOworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfUkVBRF9GUkFNRUJVRkZFUiwg
R0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIHRleHR1cmUsIDApOworCisgICAg
Z2xCaW5kRnJhbWVidWZmZXIoR0xfRFJBV19GUkFNRUJVRkZFUiwgMCk7CisKKyAgICBnbEJsaXRG
cmFtZWJ1ZmZlcih4LCB5LCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9D
T0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOworCisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUy
RChHTF9SRUFEX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8y
RCwgMCwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICBnbEJp
bmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgcHJldmlvdXNGQk8pOworCisgICAgZ2xQb3BB
dHRyaWIoKTsKK30KKwordm9pZCBHTE5hdGl2ZVN1cmZhY2U6OnNldEdlb21ldHJ5KGNvbnN0IElu
dFJlY3QmICBuZXdSZWN0KQoreworICAgIG1fcmVjdCA9IG5ld1JlY3Q7Cit9CisKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xO
YXRpdmVTdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xO
YXRpdmVTdXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFkOWUw
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Vm
bC9HTE5hdGl2ZVN1cmZhY2UuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEdMTmF0aXZlU3VyZmFjZV9oCisjZGVmaW5lIEdMTmF0aXZlU3VyZmFjZV9oCisK
KyNpbmNsdWRlICJHTFhEZWZzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1N1cmZhY2VUb2tlbi5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorCisvLyBFbmNhcHN1bGF0ZXMgYSBzdXJmYWNlIHRoYXQgY2FuIGJlIHJlbmRlcmVkIHRvIHdp
dGggR0wsIGhpZGluZyBwbGF0Zm9ybQorLy8gc3BlY2lmaWMgbWFuYWdlbWVudC4KK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgR0xOYXRpdmVTdXJmYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8
R0xOYXRpdmVTdXJmYWNlPiB7CisKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHTE5hdGl2ZVN1
cmZhY2UpOworCitwdWJsaWM6CisKKyAgICAvLyBDcmVhdGUgYSBHTCBzdXJmYWNlIHVzZWQgZm9y
IG9mZnNjcmVlbiByZW5kZXJpbmcuCisgICAgc3RhdGljIFBhc3NSZWZQdHI8R0xOYXRpdmVTdXJm
YWNlPiBjcmVhdGVPZmZzY3JlZW5TdXJmYWNlKCk7CisKKyAgICAvLyBDcmVhdGUgYSBHTCBzdXJm
YWNlIHVzZWQgZm9yIG9mZnNyZWVuIHJlbmRlcmluZy4gVGhlIHJlc3VsdHMgY2FuIGJlIHRyYW5z
cG9ydGVkCisgICAgLy8gdG8gdGhlIFVJIHByb2Nlc3MgZm9yIGRpc3BsYXkuCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8R0xOYXRpdmVTdXJmYWNlPiBjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKCk7CisK
KyAgICBHTE5hdGl2ZVN1cmZhY2UoKTsKKyAgICB2aXJ0dWFsIH5HTE5hdGl2ZVN1cmZhY2UoKTsK
KworICAgIC8vIFJldHVybnMgR2VvbWV0cnkgb2Ygc3VyZmFjZS4KKyAgICBjb25zdCBJbnRSZWN0
JiBnZW9tZXRyeSgpIGNvbnN0OworCisgICAgLy8gR2V0IHRoZSB1bmRlcmx5aW5nIHBsYXRmb3Jt
IHNwZWNpZmljIHN1cmZhY2UgaGFuZGxlLgorICAgIEdyYXBoaWNzU3VyZmFjZVRva2VuIGhhbmRs
ZSgpIGNvbnN0OworCisgICAgcGxhdGZvcm1EaXNwbGF5IHNoYXJlZERpc3BsYXkoKSBjb25zdDsK
KworICAgIC8vIFN3YXBzIGZyb250IGFuZCBiYWNrIGJ1ZmZlcnMuIFRoaXMgaGFzIG5vIGVmZmVj
dCBmb3Igc2luZ2xlIGJ1ZmZlcmVkIHN1cmZhY2VzLgorICAgIHZpcnR1YWwgdm9pZCBzd2FwQnVm
ZmVycygpOworCisgICAgLy8gSWYgU3VwcG9ydGVkLCBDb3BpZXMgY29udGVudHMgb2YgdGV4dHVy
ZSB0byBiYWNrIGJ1ZmZlci4KKyAgICB2aXJ0dWFsIHZvaWQgY29weVRleHR1cmUodWludDMyX3Qg
dGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCk7CisKKyAgICAvLyBSZXNpemVzIHRo
ZSB2aWV3UG9ydCBvbiBzdXBwb3J0ZWQgaW1wbGVtZW50YXRpb25zLgorICAgIHZpcnR1YWwgdm9p
ZCBzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JiBuZXdSZWN0KTsKKworICAgIHZpcnR1YWwgUGxh
dGZvcm1TdXJmYWNlQ29uZmlnIHN1cmZhY2VDb25maWcoKTsKKworcHJvdGVjdGVkOgorICAgIElu
dFJlY3QgbV9yZWN0OworICAgIEdMdWludCBtX2Zib0lkOworICAgIHBsYXRmb3JtRGlzcGxheSBt
X3NoYXJlZERpc3BsYXk7CisgICAgUGxhdGZvcm1OYXRpdmVTdXJmYWNlIG1fZHJhd2FibGU7Cit9
OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZWZsL0dMWENvbnRleHRXcmFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2VmbC9HTFhDb250ZXh0V3JhcHBlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNjU1MzJmNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HTFhDb250ZXh0V3JhcHBlci5jcHAKQEAgLTAsMCArMSwx
NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVT
RSgzRF9HUkFQSElDUykgfHwgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVk
ZSAiR0xYQ29udGV4dFdyYXBwZXIuaCIKKworI2luY2x1ZGUgPFgxMS9YLmg+CisjaW5jbHVkZSA8
WDExL1h1dGlsLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEdMWENvbnRl
eHQgKCpHTFhDUkVBVEVDT05URVhUQVRUUklCU0FSQlBST0MpKERpc3BsYXkqLCBHTFhGQkNvbmZp
ZywgR0xYQ29udGV4dCwgQm9vbCwgY29uc3QgaW50Kik7CitzdGF0aWMgR0xYQ1JFQVRFQ09OVEVY
VEFUVFJJQlNBUkJQUk9DIGdsWENyZWF0ZUNvbnRleHRBdHRyaWJzQVJCID0gMDsKKworc3RhdGlj
IGludCBBdHRyaWJzW10gPSB7CisgICAgR0xYX0NPTlRFWFRfUkVTRVRfTk9USUZJQ0FUSU9OX1NU
UkFURUdZX0FSQiwKKyAgICBHTFhfTE9TRV9DT05URVhUX09OX1JFU0VUX0FSQiwKKyAgICAwIH07
CisKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVBUkJFeHRlbnNpb25zKCkKK3sKKyAgICBzdGF0aWMg
Ym9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworCisgICAgaWYgKGluaXRpYWxpemVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpbml0aWFsaXplZCA9IHRydWU7CisgICAgZ2xYQ3JlYXRlQ29udGV4
dEF0dHJpYnNBUkIgPSAoR0xYQ1JFQVRFQ09OVEVYVEFUVFJJQlNBUkJQUk9DKWdsWEdldFByb2NB
ZGRyZXNzKChjb25zdCBHTHVieXRlKikiZ2xYQ3JlYXRlQ29udGV4dEF0dHJpYnNBUkIiKTsKK30K
KworR0xYQ3VycmVudENvbnRleHRXcmFwcGVyOjpHTFhDdXJyZW50Q29udGV4dFdyYXBwZXIoKQor
ICAgIDpHTE5hdGl2ZUNvbnRleHQoKQoreworICAgIG1fY29udGV4dEhhbmRsZSA9IGdsWEdldEN1
cnJlbnRDb250ZXh0KCk7Cit9CisKK0dMWEN1cnJlbnRDb250ZXh0V3JhcHBlcjo6fkdMWEN1cnJl
bnRDb250ZXh0V3JhcHBlcigpCit7CisKK30KKworYm9vbCBHTFhDdXJyZW50Q29udGV4dFdyYXBw
ZXI6OmlzQ3VycmVudENvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitQ
bGF0Zm9ybU5hdGl2ZUNvbnRleHQgR0xYQ3VycmVudENvbnRleHRXcmFwcGVyOjpjdXJyZW50QWN0
aXZlQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdsWEdldEN1cnJlbnRDb250ZXh0KCk7
Cit9CisKKworLy8gR0xYQ29udGV4dFdyYXBwZXIKKworR0xYQ29udGV4dFdyYXBwZXI6OkdMWENv
bnRleHRXcmFwcGVyKCkKKyAgICA6R0xOYXRpdmVDb250ZXh0KCkKKyAgICAsIG1fZGlzcGxheSgw
KQoreworCit9CisKK2Jvb2wgR0xYQ29udGV4dFdyYXBwZXI6OmluaXRpYWxpemUoR0xOYXRpdmVT
dXJmYWNlKiBzdXJmYWNlKQoreworICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgbV9kaXNwbGF5ID0gc3VyZmFjZS0+c2hhcmVkRGlzcGxheSgpOworCisgICAg
aWYgKCFtX2Rpc3BsYXkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdMWEZCQ29uZmln
IGNvbmZpZyA9IHN1cmZhY2UtPnN1cmZhY2VDb25maWcoKTsKKworICAgIGlmIChjb25maWcpIHsK
KworICAgICAgICBpbml0aWFsaXplQVJCRXh0ZW5zaW9ucygpOworCisgICAgICAgIC8vIENyZWF0
ZSBHTFggY29udGV4dCBmb3IgT3BlbkdMIHJlbmRlcmluZworICAgICAgICBpZiAoZ2xYQ3JlYXRl
Q29udGV4dEF0dHJpYnNBUkIpCisgICAgICAgICAgICBtX2NvbnRleHRIYW5kbGUgPSBnbFhDcmVh
dGVDb250ZXh0QXR0cmlic0FSQihtX2Rpc3BsYXksIGNvbmZpZywgMCwgdHJ1ZSwgQXR0cmlicyk7
CisKKyAgICAgICAgaWYgKG1fY29udGV4dEhhbmRsZSkKKyAgICAgICAgICAgIG1fc3VwcG9ydHNS
b2J1c3RDb250ZXh0Q3JlYXRpb24gPSB0cnVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
X2NvbnRleHRIYW5kbGUgPSBnbFhDcmVhdGVOZXdDb250ZXh0KG1fZGlzcGxheSwgY29uZmlnLCBH
TFhfUkdCQV9UWVBFLCAwLCB0cnVlKTsKKworICAgICAgICBpZiAobV9jb250ZXh0SGFuZGxlKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
CitHTFhDb250ZXh0V3JhcHBlcjo6fkdMWENvbnRleHRXcmFwcGVyKCkKK3sKKworfQorCitib29s
IEdMWENvbnRleHRXcmFwcGVyOjpwbGF0Zm9ybU1ha2VDdXJyZW50KEdMTmF0aXZlU3VyZmFjZSog
c3VyZmFjZSkKK3sKKyAgICByZXR1cm4gZ2xYTWFrZUN1cnJlbnQoc3VyZmFjZS0+c2hhcmVkRGlz
cGxheSgpLCBzdXJmYWNlLT5oYW5kbGUoKS5mcm9udEJ1ZmZlckhhbmRsZSwgbV9jb250ZXh0SGFu
ZGxlKTsKK30KKwordm9pZCBHTFhDb250ZXh0V3JhcHBlcjo6cGxhdGZvcm1SZWxlYXNlQ3VycmVu
dCgpCit7CisgICAgZ2xYTWFrZUN1cnJlbnQobV9kaXNwbGF5LCAwLCAwKTsKK30KKworUGxhdGZv
cm1OYXRpdmVDb250ZXh0IEdMWENvbnRleHRXcmFwcGVyOjpjdXJyZW50QWN0aXZlQ29udGV4dCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGdsWEdldEN1cnJlbnRDb250ZXh0KCk7Cit9CisKK3ZvaWQg
R0xYQ29udGV4dFdyYXBwZXI6OmZyZWVSZXNvdXJjZXMoKQoreworICAgIGlmIChtX2NvbnRleHRI
YW5kbGUpIHsKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCAwKTsKKyAgICAgICAgZ2xYTWFrZUN1cnJlbnQobV9kaXNwbGF5LCBOb25lLCBOb25lKTsKKyAg
ICAgICAgZ2xYRGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBtX2NvbnRleHRIYW5kbGUpOworICAg
IH0KKworICAgIG1fY29udGV4dEhhbmRsZSA9IDA7CisgICAgbV9kaXNwbGF5ID0gMDsKK30KKwor
dm9pZCBHTFhDb250ZXh0V3JhcHBlcjo6ZGVzdHJveSgpCit7CisgICAgZnJlZVJlc291cmNlcygp
OworICAgIEdMTmF0aXZlQ29udGV4dDo6ZGVzdHJveSgpOworfQorCit9CisKKyNlbmRpZgorCisK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dMWENv
bnRleHRXcmFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xY
Q29udGV4dFdyYXBwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWU3
ODE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWZsL0dMWENvbnRleHRXcmFwcGVyLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBHTFhDb250ZXh0V3JhcHBlcl9oCisjZGVmaW5lIEdMWENvbnRleHRXcmFw
cGVyX2gKKworI2luY2x1ZGUgIkdMTmF0aXZlQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEdMWEN1cnJlbnRDb250ZXh0V3JhcHBlciA6cHVibGljIEdMTmF0aXZlQ29u
dGV4dCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR0xYQ3VycmVudENvbnRleHRXcmFwcGVy
KTsKK3B1YmxpYzoKKyAgICBHTFhDdXJyZW50Q29udGV4dFdyYXBwZXIoKTsKKyAgICB2aXJ0dWFs
IH5HTFhDdXJyZW50Q29udGV4dFdyYXBwZXIoKTsKKyAgICBib29sIGlzQ3VycmVudENvbnRleHQo
KSBjb25zdDsKKyAgICBQbGF0Zm9ybU5hdGl2ZUNvbnRleHQgY3VycmVudEFjdGl2ZUNvbnRleHQo
KSBjb25zdDsKK307CisKK2NsYXNzIEdMWENvbnRleHRXcmFwcGVyIDpwdWJsaWMgR0xOYXRpdmVD
b250ZXh0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHTFhDb250ZXh0V3JhcHBlcik7Citw
dWJsaWM6CisgICAgR0xYQ29udGV4dFdyYXBwZXIoKTsKKyAgICB2aXJ0dWFsIH5HTFhDb250ZXh0
V3JhcHBlcigpOworICAgIGJvb2wgaW5pdGlhbGl6ZShHTE5hdGl2ZVN1cmZhY2UqKTsKKyAgICBi
b29sIHBsYXRmb3JtTWFrZUN1cnJlbnQoR0xOYXRpdmVTdXJmYWNlKik7CisgICAgdm9pZCBwbGF0
Zm9ybVJlbGVhc2VDdXJyZW50KCk7CisgICAgdm9pZCBkZXN0cm95KCk7CisgICAgUGxhdGZvcm1O
YXRpdmVDb250ZXh0IGN1cnJlbnRBY3RpdmVDb250ZXh0KCkgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBmcmVlUmVzb3VyY2VzKCk7CisgICAgRGlzcGxheSogbV9kaXNwbGF5OworfTsKKwor
fQorCisjZW5kaWYgLy8gR0xYQ1VSUkVOVENPTlRFWFdSQVBQRVJfSAorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xYRGVmcy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dMWERlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi40ZDhlMTc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dMWERlZnMuaApAQCAtMCwwICsxLDQ5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdMWERlZnNfaAorI2RlZmluZSBHTFhEZWZzX2gKKwor
I2luY2x1ZGUgPEdML2dsLmg+CisjaW5jbHVkZSA8R0wvZ2xleHQuaD4KKyNpbmNsdWRlIDxHTC9n
bHguaD4KKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorCisjaWYgVVNFKE9QRU5HTF9FU18yKQor
I2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCisjZWxzZQorI2luY2x1ZGUgIkV4dGVu
c2lvbnMzRE9wZW5HTC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRl
ZiBHTFhDb250ZXh0IFBsYXRmb3JtTmF0aXZlQ29udGV4dDsKK3R5cGVkZWYgRGlzcGxheSogcGxh
dGZvcm1EaXNwbGF5OwordHlwZWRlZiBHTFhGQkNvbmZpZyBQbGF0Zm9ybVN1cmZhY2VDb25maWc7
Cit0eXBlZGVmIEdMWERyYXdhYmxlIFBsYXRmb3JtTmF0aXZlU3VyZmFjZTsKKworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HTFhT
dXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HTFhTdXJm
YWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTZhOWM0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dMWFN1
cmZhY2UuY3BwCkBAIC0wLDAgKzEsMTg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElu
dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoM0RfR1JBUEhJQ1MpIHx8IFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKworI2luY2x1ZGUgIkdMWFN1cmZhY2UuaCIKKworI2luY2x1ZGUgPFgxMS9Y
Lmg+CisjaW5jbHVkZSA8WDExL1h1dGlsLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworaW50
IFNoYXJlZFJlc291cmNlczo6bV9yZWZDb3VudCA9IDA7Citib29sIFNoYXJlZFJlc291cmNlczo6
bV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24gPSBmYWxzZTsKK1dpbmRvdyBTaGFyZWRSZXNvdXJj
ZXM6Om1fd2luZG93ID0gMDsKK0Rpc3BsYXkqIFNoYXJlZFJlc291cmNlczo6bV9kaXNwbGF5ID0g
MDsKK0dMWEZCQ29uZmlnIFNoYXJlZFJlc291cmNlczo6bV9wYnVmZmVyZmJDb25maWcgPSAwOwor
R0xYRkJDb25maWcgU2hhcmVkUmVzb3VyY2VzOjptX3N1cmZhY2VDb250ZXh0ZmJDb25maWcgPSAw
OworWFZpc3VhbEluZm8qIFNoYXJlZFJlc291cmNlczo6bV9WaXN1YWxJbmZvID0gMDsKKworc3Rh
dGljIGNvbnN0IGludCBwYnVmZmVyQXR0cmlidXRlc1tdID0geyBHTFhfUEJVRkZFUl9XSURUSCwg
MSwgR0xYX1BCVUZGRVJfSEVJR0hULCAxLCAwIH07CisKK0dMWFN1cmZhY2U6OkdMWFN1cmZhY2Uo
KQorICAgIDpHTE5hdGl2ZVN1cmZhY2UoKQoreworICAgIG1fc2hhcmVkRGlzcGxheSA9IG1fc2hh
cmVkUmVzb3VyY2VzLmRpc3BsYXkoKTsKK30KKworR0xYU3VyZmFjZTo6fkdMWFN1cmZhY2UoKQor
eworCit9CisKK1hWaXN1YWxJbmZvKiBHTFhTdXJmYWNlOjp2aXN1YWxJbmZvKCkKK3sKKyAgICBy
ZXR1cm4gbV9zaGFyZWRSZXNvdXJjZXMudmlzdWFsSW5mbygpOworfQorCitXaW5kb3cgR0xYU3Vy
ZmFjZTo6eFdpbmRvdygpCit7CisgICAgcmV0dXJuIG1fc2hhcmVkUmVzb3VyY2VzLmdldFhXaW5k
b3coKTsKK30KKworR0xYRkJDb25maWcgR0xYU3VyZmFjZTo6cEJ1ZmZlckNvbmZpZygpCit7Cisg
ICAgcmV0dXJuIG1fc2hhcmVkUmVzb3VyY2VzLnBCdWZmZXJDb250ZXh0Q29uZmlnKCk7Cit9CisK
K0dMWEZCQ29uZmlnIEdMWFN1cmZhY2U6OnRyYW5zcG9ydFN1cmZhY2VDb25maWcoKQoreworICAg
IHJldHVybiBtX3NoYXJlZFJlc291cmNlcy5zdXJmYWNlQ29udGV4dENvbmZpZygpOworfQorCiti
b29sIEdMWFN1cmZhY2U6OmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpCit7CisgICAgcmV0
dXJuIG1fc2hhcmVkUmVzb3VyY2VzLmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpOworfQor
CisKKy8vIEdMWFRyYW5zcG9ydFN1cmZhY2UKKworR0xYVHJhbnNwb3J0U3VyZmFjZTo6R0xYVHJh
bnNwb3J0U3VyZmFjZSgpCisgICAgOkdMWFN1cmZhY2UoKQoreworICAgIGluaXRpYWxpemUoKTsK
K30KKworR0xYVHJhbnNwb3J0U3VyZmFjZTo6fkdMWFRyYW5zcG9ydFN1cmZhY2UoKQoreworICAg
IGlmIChtX2Zib0lkKQorICAgICAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm9JZCk7
Cit9CisKK1BsYXRmb3JtU3VyZmFjZUNvbmZpZyBHTFhUcmFuc3BvcnRTdXJmYWNlOjpzdXJmYWNl
Q29uZmlnKCkKK3sKKyAgICByZXR1cm4gdHJhbnNwb3J0U3VyZmFjZUNvbmZpZygpOworfQorCit2
b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2U6OnN3YXBCdWZmZXJzKCkKK3sKKyAgICBpZiAobV9kcmF3
YWJsZSkgeworICAgICAgICBHTGludCBvbGRGQk87CisgICAgICAgIGdsR2V0SW50ZWdlcnYoR0xf
RlJBTUVCVUZGRVJfQklORElORywgJm9sZEZCTyk7CisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVy
KEdMX0ZSQU1FQlVGRkVSLCAwKTsKKyAgICAgICAgZ2xYU3dhcEJ1ZmZlcnMoc2hhcmVkRGlzcGxh
eSgpLCBtX2RyYXdhYmxlKTsKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZG
RVIsIG9sZEZCTyk7CisgICAgfQorfQorCit2b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2U6OnNldEdl
b21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCit7CisgICAgR0xOYXRpdmVTdXJmYWNlOjpz
ZXRHZW9tZXRyeShuZXdSZWN0KTsKKyAgICBpbnQgd2lkdGggPSBuZXdSZWN0LndpZHRoKCk7Cisg
ICAgaW50IGhlaWdodCA9IG5ld1JlY3QuaGVpZ2h0KCk7CisgICAgWFJlc2l6ZVdpbmRvdyhzaGFy
ZWREaXNwbGF5KCksIG1fZHJhd2FibGUsIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdMWFRy
YW5zcG9ydFN1cmZhY2U6OmluaXRpYWxpemUoKQoreworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBz
aGFyZWREaXNwbGF5KCk7CisgICAgR0xYRkJDb25maWcgY29uZmlnID0gdHJhbnNwb3J0U3VyZmFj
ZUNvbmZpZygpOworCisgICAgaWYgKCFjb25maWcpCisgICAgICAgIHJldHVybjsKKworICAgIFhW
aXN1YWxJbmZvKiB2aXNJbmZvID0gIHZpc3VhbEluZm8oKTsKKworICAgIGlmICghdmlzSW5mbykK
KyAgICAgICAgcmV0dXJuOworCisgICAgQ29sb3JtYXAgY21hcCA9IFhDcmVhdGVDb2xvcm1hcChk
aXNwbGF5LCB4V2luZG93KCksIHZpc0luZm8tPnZpc3VhbCwgQWxsb2NOb25lKTsKKyAgICBYU2V0
V2luZG93QXR0cmlidXRlcyBhOworICAgIGEuYmFja2dyb3VuZF9waXhlbCA9IFdoaXRlUGl4ZWwo
ZGlzcGxheSwgMCk7CisgICAgYS5ib3JkZXJfcGl4ZWwgPSBCbGFja1BpeGVsKGRpc3BsYXksIDAp
OworICAgIGEuY29sb3JtYXAgPSBjbWFwOworICAgIG1fZHJhd2FibGUgID0gWENyZWF0ZVdpbmRv
dyhkaXNwbGF5LCB4V2luZG93KCksIDAsIDAsIDEsIDEsIDAsIHZpc0luZm8tPmRlcHRoLCBJbnB1
dE91dHB1dCwgdmlzSW5mby0+dmlzdWFsLCBDV0JhY2tQaXhlbCB8IENXQm9yZGVyUGl4ZWwgfCBD
V0NvbG9ybWFwLCAmYSk7CisKKyAgICBpZiAoIW1fZHJhd2FibGUpCisgICAgICAgIHJldHVybjsK
KworICAgIFhTZXRXaW5kb3dCYWNrZ3JvdW5kUGl4bWFwKGRpc3BsYXksIG1fZHJhd2FibGUsIDAp
OworICAgIFhDb21wb3NpdGVSZWRpcmVjdFdpbmRvdyhkaXNwbGF5LCBtX2RyYXdhYmxlLCBDb21w
b3NpdGVSZWRpcmVjdE1hbnVhbCk7CisKKyAgICBpZiAoaXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9y
dGVkKCkpCisgICAgICAgIFhNYXBXaW5kb3coZGlzcGxheSwgbV9kcmF3YWJsZSk7Cit9CisKKy8v
IEdMWCBQQlVGRkVSIFNVUkZBQ0UKKworR0xYUEJ1ZmZlcjo6R0xYUEJ1ZmZlcigpCisgICAgOkdM
WFN1cmZhY2UoKQoreworICAgIGluaXRpYWxpemUoKTsKK30KKworR0xYUEJ1ZmZlcjo6fkdMWFBC
dWZmZXIoKQoreworICAgIGlmIChtX2RyYXdhYmxlKSB7CisgICAgICAgIGdsWERlc3Ryb3lQYnVm
ZmVyKHNoYXJlZERpc3BsYXkoKSwgbV9kcmF3YWJsZSk7CisgICAgICAgIG1fZHJhd2FibGUgPSAw
OworICAgIH0KK30KKwordm9pZCBHTFhQQnVmZmVyOjppbml0aWFsaXplKCkKK3sKKyAgICBEaXNw
bGF5KiBkaXNwbGF5ID0gc2hhcmVkRGlzcGxheSgpOworICAgIEdMWEZCQ29uZmlnIGNvbmZpZyA9
IHBCdWZmZXJDb25maWcoKTsKKworICAgIGlmICghY29uZmlnKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2RyYXdhYmxlID0gZ2xYQ3JlYXRlUGJ1ZmZlcihkaXNwbGF5LCBjb25maWcsIHBidWZm
ZXJBdHRyaWJ1dGVzKTsKK30KKworUGxhdGZvcm1TdXJmYWNlQ29uZmlnIEdMWFBCdWZmZXI6OnN1
cmZhY2VDb25maWcoKQoreworICAgIHJldHVybiBwQnVmZmVyQ29uZmlnKCk7Cit9CisKK30KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwv
R0xYU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dMWFN1
cmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDhkM2ZiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dMWFN1
cmZhY2UuaApAQCAtMCwwICsxLDIzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRl
bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBH
TFhTdXJmYWNlX2gKKyNkZWZpbmUgR0xYU3VyZmFjZV9oCisKKyNpbmNsdWRlICJHTE5hdGl2ZVN1
cmZhY2UuaCIKKworI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hjb21wb3NpdGUuaD4KKyNpbmNs
dWRlIDxYMTEvZXh0ZW5zaW9ucy9YcmVuZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RhdGljIGxvbmcgWDExUmVkaXJlY3QgPSAxTCA8PCA5OworCisKK2NsYXNzIFNoYXJlZFJlc291
cmNlcyB7CitwdWJsaWM6CisgICAgU2hhcmVkUmVzb3VyY2VzKCkKKyAgICB7CisgICAgICAgICsr
bV9yZWZDb3VudDsKKyAgICB9CisKKyAgICBXaW5kb3cgZ2V0WFdpbmRvdygpCisgICAgeworICAg
ICAgICBpZiAoIW1fd2luZG93KSB7CisgICAgICAgICAgICBEaXNwbGF5KiBkcHkgPSBkaXNwbGF5
KCk7CisgICAgICAgICAgICBtX3dpbmRvdyA9IFhDcmVhdGVTaW1wbGVXaW5kb3coZHB5LCBYRGVm
YXVsdFJvb3RXaW5kb3coZHB5KSwgLTEsIC0xLCAxLCAxLCAwLCBCbGFja1BpeGVsKGRweSwgMCks
IFdoaXRlUGl4ZWwoZHB5LCAwKSk7CisgICAgICAgICAgICBYU2V0V2luZG93QXR0cmlidXRlcyBh
dHRyaWJ1dGVzOworICAgICAgICAgICAgYXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IHRy
dWU7CisgICAgICAgICAgICBYQ2hhbmdlV2luZG93QXR0cmlidXRlcyhkcHksIG1fd2luZG93LCBY
MTFSZWRpcmVjdCwgJmF0dHJpYnV0ZXMpOworICAgICAgICAgICAgLy8gTWFwIHdpbmRvdyB0byB0
aGUgc2NyZWVuCisgICAgICAgICAgICBYTWFwV2luZG93KGRweSwgbV93aW5kb3cpOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIG1fd2luZG93OworICAgIH0KKworICAgIERpc3BsYXkqIGRp
c3BsYXkoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2Rpc3BsYXkpCisgICAgICAgICAgICBtX2Rp
c3BsYXkgPSBYT3BlbkRpc3BsYXkoMCk7CisKKyAgICAgICAgcmV0dXJuIG1fZGlzcGxheTsKKyAg
ICB9CisKKyAgICBYVmlzdWFsSW5mbyogdmlzdWFsSW5mbygpCisgICAgeworICAgICAgICBpZiAo
IW1fVmlzdWFsSW5mbykgeworICAgICAgICAgICAgR0xYRkJDb25maWcgY29uZmlnID0gc3VyZmFj
ZUNvbnRleHRDb25maWcoKTsKKyAgICAgICAgICAgIG1fVmlzdWFsSW5mbyA9IGdsWEdldFZpc3Vh
bEZyb21GQkNvbmZpZyhkaXNwbGF5KCksIGNvbmZpZyk7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gbV9WaXN1YWxJbmZvOworICAgIH0KKworICAgIEdMWEZCQ29uZmlnIGNyZWF0ZUNvbmZp
Zyhjb25zdCBpbnQgYXR0cmlidXRlc1tdKQorICAgIHsKKyAgICAgICAgaW50IG51bVJldHVybmVk
OworICAgICAgICBHTFhGQkNvbmZpZyogdGVtcCA9IGdsWENob29zZUZCQ29uZmlnKGRpc3BsYXko
KSwgRGVmYXVsdFNjcmVlbihkaXNwbGF5KCkpLCBhdHRyaWJ1dGVzLCAmbnVtUmV0dXJuZWQpOwor
CisgICAgICAgIEdMWEZCQ29uZmlnIHNlbGVjdGVkQ29uZmlnID0gMDsKKworICAgICAgICBpZiAo
bnVtUmV0dXJuZWQpCisgICAgICAgICAgICBzZWxlY3RlZENvbmZpZyA9IHRlbXBbMF07CisKKyAg
ICAgICAgWEZyZWUodGVtcCk7CisKKyAgICAgICAgcmV0dXJuIHNlbGVjdGVkQ29uZmlnOworICAg
IH0KKworICAgIH5TaGFyZWRSZXNvdXJjZXMoKQorICAgIHsKKyAgICAgICAgaWYgKC0tbV9yZWZD
b3VudCB8fCAhbV9kaXNwbGF5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICht
X3dpbmRvdykgeworICAgICAgICAgICAgWFVubWFwV2luZG93KG1fZGlzcGxheSwgbV93aW5kb3cp
OworICAgICAgICAgICAgWERlc3Ryb3lXaW5kb3cobV9kaXNwbGF5LCBtX3dpbmRvdyk7CisgICAg
ICAgICAgICBtX3dpbmRvdyA9IDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9wYnVmZmVy
ZmJDb25maWcpCisgICAgICAgICAgICBtX3BidWZmZXJmYkNvbmZpZyA9IDA7CisKKyAgICAgICAg
aWYgKG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZykKKyAgICAgICAgICAgIG1fc3VyZmFjZUNvbnRl
eHRmYkNvbmZpZyA9IDA7CisKKworICAgICAgICBpZiAobV9WaXN1YWxJbmZvKSB7CisgICAgICAg
ICAgICBYRnJlZShtX1Zpc3VhbEluZm8pOworICAgICAgICAgICAgbV9WaXN1YWxJbmZvID0gMDsK
KyAgICAgICAgfQorCisgICAgICAgIFhDbG9zZURpc3BsYXkobV9kaXNwbGF5KTsKKyAgICAgICAg
bV9kaXNwbGF5ID0gMDsKKyAgICB9CisKKyAgICBHTFhGQkNvbmZpZyBwQnVmZmVyQ29udGV4dENv
bmZpZygpCisgICAgeworICAgICAgICBpZiAoIW1fcGJ1ZmZlcmZiQ29uZmlnKSB7CisgICAgICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IGF0dHJpYnV0ZXNbXSA9IHsKKyAgICAgICAgICAgICAgICBH
TFhfTEVWRUwsIDAsCisgICAgICAgICAgICAgICAgR0xYX0RSQVdBQkxFX1RZUEUsIEdMWF9QQlVG
RkVSX0JJVCwKKyAgICAgICAgICAgICAgICBHTFhfUkVOREVSX1RZUEUsICAgR0xYX1JHQkFfQklU
LAorICAgICAgICAgICAgICAgIEdMWF9SRURfU0laRSwgICAgICAxLAorICAgICAgICAgICAgICAg
IEdMWF9HUkVFTl9TSVpFLCAgICAxLAorICAgICAgICAgICAgICAgIEdMWF9CTFVFX1NJWkUsICAg
ICAxLAorICAgICAgICAgICAgICAgIEdMWF9ET1VCTEVCVUZGRVIsICBHTF9GQUxTRSwKKyAgICAg
ICAgICAgICAgICBOb25lCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBtX3BidWZmZXJm
YkNvbmZpZyA9ICBjcmVhdGVDb25maWcoYXR0cmlidXRlcyk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gbV9wYnVmZmVyZmJDb25maWc7CisgICAgfQorCisgICAgR0xYRkJDb25maWcgc3Vy
ZmFjZUNvbnRleHRDb25maWcoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3N1cmZhY2VDb250ZXh0
ZmJDb25maWcpIHsKKworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGludCBhdHRyaWJ1dGVzW10g
PSB7CisgICAgICAgICAgICAgICAgR0xYX0xFVkVMLCAwLAorICAgICAgICAgICAgICAgIEdMWF9E
UkFXQUJMRV9UWVBFLCBHTFhfV0lORE9XX0JJVCwKKyAgICAgICAgICAgICAgICBHTFhfUkVOREVS
X1RZUEUsICAgR0xYX1JHQkFfQklULAorICAgICAgICAgICAgICAgIEdMWF9CTFVFX1NJWkUsIDEs
CisgICAgICAgICAgICAgICAgR0xYX0dSRUVOX1NJWkUsIDEsCisgICAgICAgICAgICAgICAgR0xY
X1JFRF9TSVpFLCAxLAorICAgICAgICAgICAgICAgIEdMWF9ET1VCTEVCVUZGRVIsICBUcnVlLAor
ICAgICAgICAgICAgICAgIDAKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGludCBldmVu
dEJhc2VwLCBlcnJvckJhc2VwOworICAgICAgICAgICAgbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNp
b24gPSBYUmVuZGVyUXVlcnlFeHRlbnNpb24oZGlzcGxheSgpLCAmZXZlbnRCYXNlcCwgJmVycm9y
QmFzZXApOworCisgICAgICAgICAgICBtX3N1cmZhY2VDb250ZXh0ZmJDb25maWcgPSBjcmVhdGVD
b25maWcoYXR0cmlidXRlcyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV9zdXJmYWNl
Q29udGV4dGZiQ29uZmlnOworICAgIH0KKworICAgIGJvb2wgaXNYUmVuZGVyRXh0ZW5zaW9uU3Vw
cG9ydGVkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lv
bjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGludCBtX3JlZkNvdW50OworICAgIHN0
YXRpYyBib29sIG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uOworICAgIHN0YXRpYyBXaW5kb3cg
bV93aW5kb3c7CisgICAgc3RhdGljIERpc3BsYXkqIG1fZGlzcGxheTsKKyAgICBzdGF0aWMgR0xY
RkJDb25maWcgbV9wYnVmZmVyZmJDb25maWc7CisgICAgc3RhdGljIEdMWEZCQ29uZmlnIG1fc3Vy
ZmFjZUNvbnRleHRmYkNvbmZpZzsKKyAgICBzdGF0aWMgWFZpc3VhbEluZm8qIG1fVmlzdWFsSW5m
bzsKK307CisKK2NsYXNzIEdMWFN1cmZhY2U6IHB1YmxpYyBHTE5hdGl2ZVN1cmZhY2UgeworCisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR0xYU3VyZmFjZSk7CisKK3B1YmxpYzoKKyAgICBHTFhT
dXJmYWNlKCk7CisgICAgdmlydHVhbCB+R0xYU3VyZmFjZSgpOworCitwcm90ZWN0ZWQ6CisgICAg
WFZpc3VhbEluZm8qIHZpc3VhbEluZm8oKTsKKyAgICBXaW5kb3cgeFdpbmRvdygpOworICAgIEdM
WEZCQ29uZmlnIHBCdWZmZXJDb25maWcoKTsKKyAgICBHTFhGQkNvbmZpZyB0cmFuc3BvcnRTdXJm
YWNlQ29uZmlnKCk7CisgICAgYm9vbCBpc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKTsKKwor
cHJpdmF0ZToKKyAgICBTaGFyZWRSZXNvdXJjZXMgbV9zaGFyZWRSZXNvdXJjZXM7Cit9OworCitj
bGFzcyBHTFhUcmFuc3BvcnRTdXJmYWNlOiBwdWJsaWMgR0xYU3VyZmFjZSB7CisKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShHTFhUcmFuc3BvcnRTdXJmYWNlKTsKKworcHVibGljOgorICAgIEdM
WFRyYW5zcG9ydFN1cmZhY2UoKTsKKyAgICB2aXJ0dWFsIH5HTFhUcmFuc3BvcnRTdXJmYWNlKCk7
CisKKyAgICBQbGF0Zm9ybVN1cmZhY2VDb25maWcgc3VyZmFjZUNvbmZpZygpOworICAgIHZvaWQg
c3dhcEJ1ZmZlcnMoKTsKKyAgICB2b2lkIHNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1Jl
Y3QpOworCitwcml2YXRlOgorICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworfTsKKworY2xhc3MgR0xY
UEJ1ZmZlcjogcHVibGljIEdMWFN1cmZhY2UgeworCisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
R0xYUEJ1ZmZlcik7CisKK3B1YmxpYzoKKyAgICBHTFhQQnVmZmVyKCk7CisgICAgdmlydHVhbCB+
R0xYUEJ1ZmZlcigpOworCisgICAgUGxhdGZvcm1TdXJmYWNlQ29uZmlnIHN1cmZhY2VDb25maWco
KTsKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXplKCk7Cit9OworCit9CisKKyNlbmRpZgor
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFw
aGljc0NvbnRleHQzREVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9l
ZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCmluZGV4IGVmMWUzMTUuLjA3NWJlNTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRl
eHQzREVmbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dy
YXBoaWNzQ29udGV4dDNERWZsLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0
IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgSW50
ZWwgQ29ycG9yYXRpb24uCgogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjcsNyArMjgsNiBAQAogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgotI2luY2x1ZGUgPEdML2dseC5oPgoKICNpZiBV
U0UoT1BFTkdMX0VTXzIpCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMRVMuaCIKQEAgLTM5
LDYgKzM5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewoKIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIFJlbmRlclN0eWxlIHJlbmRlclN0
eWxlKQogeworICAgIGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRv
dykKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNv
bnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMsIGhvc3RXaW5kb3cs
IHJlbmRlclN0eWxlKSk7CiAgICAgcmV0dXJuIGNvbnRleHQtPm1fcHJpdmF0ZSA/IGNvbnRleHQu
cmVsZWFzZSgpIDogMDsKIH0KQEAgLTY3LDI5ICs3MCwxMiBAQCBHcmFwaGljc0NvbnRleHQzRDo6
R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhv
c3RXaQogICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCiAgICAgLCBtX3ByaXZhdGUo
YWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSh0aGlzLCBob3N0V2luZG93LCBy
ZW5kZXJTdHlsZSkpKQogewotICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwotCi0gICAgaWYgKCFt
X3ByaXZhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVk
U2hpbXMgPSBmYWxzZTsKLSAgICBzdGF0aWMgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAgICBpZiAo
IWluaXRpYWxpemVkU2hpbXMpIHsKLSAgICAgICAgc3VjY2VzcyA9IGluaXRpYWxpemVPcGVuR0xT
aGltcygpOwotICAgICAgICBpbml0aWFsaXplZFNoaW1zID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYg
KCFzdWNjZXNzKSB7CisgICAgaWYgKCFtX3ByaXZhdGUgfHwgIW1fcHJpdmF0ZS0+bV9wbGF0Zm9y
bUNvbnRleHQpIHsKICAgICAgICAgbV9wcml2YXRlID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KCi0gICAgaWYgKHJlbmRlclN0eWxlID09IFJlbmRlclRvQ3VycmVudEdMQ29udGV4
dCkgewotICAgICAgICAvLyBFdmFzIGRvZXNuJ3QgYWxsb3cgaW5jbHVkaW5nIGdsIGhlYWRlcnMg
YW5kIEV2YXNfR0wgaGVhZGVycyBhdCB0aGUgc2FtZSB0aW1lLAotICAgICAgICAvLyBzbyB3ZSBu
ZWVkIHRvIHF1ZXJ5IHRoZSBjdXJyZW50IGdsIGNvbnRleHQvc3VyZmFjZSBoZXJlIGluc3RlYWQg
b2YgaW4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLgotICAgICAgICB2b2lkKiBjdXJyZW50Q29u
dGV4dCA9ICh2b2lkKilnbFhHZXRDdXJyZW50Q29udGV4dCgpOwotICAgICAgICB2b2lkKiBjdXJy
ZW50U3VyZmFjZSA9ICh2b2lkKilnbFhHZXRDdXJyZW50RHJhd2FibGUoKTsKLSAgICAgICAgbV9w
cml2YXRlLT5zZXRDdXJyZW50R0xDb250ZXh0KGN1cnJlbnRDb250ZXh0LCBjdXJyZW50U3VyZmFj
ZSk7Ci0gICAgfQorICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwoKICAgICBpZiAocmVuZGVyU3R5
bGUgPT0gUmVuZGVyT2Zmc2NyZWVuKSB7CiAgICAgICAgIC8vIENyZWF0ZSBidWZmZXJzIGZvciB0
aGUgY2FudmFzIEZCTy4KQEAgLTE0NywyOSArMTMzLDI0IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpH
cmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9z
dFdpCiAgICAgZ2xFbmFibGUoR0xfUE9JTlRfU1BSSVRFKTsKICAgICBnbEVuYWJsZShHTF9WRVJU
RVhfUFJPR1JBTV9QT0lOVF9TSVpFKTsKICNlbmRpZgorICAgIGdsQ2xlYXJDb2xvcigwLjAsIDAu
MCwgMC4wLCAwLjApOwogfQoKIEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0Qo
KQogewogICAgIGlmIChtX3JlbmRlclN0eWxlID09IFJlbmRlclRvQ3VycmVudEdMQ29udGV4dCB8
fCAhbV9wcml2YXRlKQogICAgICAgICByZXR1cm47Ci0KICAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotCiAgICAgaWYgKG1fYXR0
cnMuYW50aWFsaWFzKSB7CiAgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0
aXNhbXBsZUNvbG9yQnVmZmVyKTsKLQogICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1f
YXR0cnMuZGVwdGgpCiAgICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVs
dGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotCiAgICAgICAgIGdsRGVsZXRlRnJhbWVidWZm
ZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKICAgICB9IGVsc2UgaWYgKG1fYXR0cnMuc3RlbmNp
bCB8fCBtX2F0dHJzLmRlcHRoKSB7Ci0KICNpZiBVU0UoT1BFTkdMX0VTXzIpCiAgICAgICAgIGlm
IChtX2F0dHJzLmRlcHRoKQogICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZt
X2RlcHRoQnVmZmVyKTsKLQogICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKQogICAgICAgICAg
ICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOwogI2VuZGlmCkBA
IC0xODYsNiArMTY3LDcgQEAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRl
eHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQogUGxhdGZvcm1MYXllciogR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5
ZXIoKSBjb25zdAogeworCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQogICAgIHJldHVybiBt
X3ByaXZhdGUuZ2V0KCk7CiAjZWxzZQpAQCAtMTk3LDEyICsxNzksNiBAQCBQbGF0Zm9ybUxheWVy
KiBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CgogYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKLSAgICBpZiAoIW1fcHJpdmF0ZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fcmVuZGVyU3R5bGUgPT0gUmVuZGVy
VG9DdXJyZW50R0xDb250ZXh0KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQogICAgIHJldHVybiBt
X3ByaXZhdGUtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogfQoKQEAgLTIxNSw5ICsxOTEsOSBAQCBi
b29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxpYW50KCkgY29uc3QKICNlbmRpZgog
fQoKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2FsbGJhY2soUGFzc093
blB0cjxDb250ZXh0TG9zdENhbGxiYWNrPikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldENv
bnRleHRMb3N0Q2FsbGJhY2soUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6Q29udGV4dExv
c3RDYWxsYmFjaz4gY2FsbGJhY2spCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX3By
aXZhdGUtPnNldENvbnRleHRMb3N0Q2FsbGJhY2soY2FsbGJhY2spOwogfQoKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnNldEVycm9yTWVzc2FnZUNhbGxiYWNrKFBhc3NPd25QdHI8RXJyb3JNZXNz
YWdlQ2FsbGJhY2s+KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAppbmRleCA2MmQw
YTZlLi40MzlhZGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcApAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uCgogICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjAsMTU4ICsyMSw5MiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgoKICNpZiBVU0Uo
M0RfR1JBUEhJQ1MpIHx8IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgoKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJIb3N0V2luZG93LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgotI2luY2x1ZGUgPEVjb3JlX0V2YXMu
aD4KLSNpbmNsdWRlIDxFdmFzX0dMLmg+CiAjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgoKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisjaW5j
bHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisjZWxzZQorI2lu
Y2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewoKIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0LCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRl
eHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkK
ICAgICAsIG1faG9zdFdpbmRvdyhob3N0V2luZG93KQotICAgICwgbV9ldmFzR0woMCkKLSAgICAs
IG1fZXZhc0dMQ29udGV4dCgwKQotICAgICwgbV9ldmFzR0xTdXJmYWNlKDApCi0gICAgLCBtX2ds
Q29udGV4dCgwKQotICAgICwgbV9nbFN1cmZhY2UoMCkKLSAgICAsIG1fYXBpKDApCiAgICAgLCBt
X3JlbmRlclN0eWxlKHJlbmRlclN0eWxlKQorICAgICwgbV9QZW5kaW5nU3VyZmFjZVJlc2l6ZShm
YWxzZSkKIHsKLSAgICBpZiAocmVuZGVyU3R5bGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRl
clRvQ3VycmVudEdMQ29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKG1faG9zdFdp
bmRvdyAmJiBtX2hvc3RXaW5kb3ctPnBsYXRmb3JtUGFnZUNsaWVudCgpKSB7CiAgICAgICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBjb2RlIHBhdGggZm9yIFdlYktpdDEuCiAgICAgICAgIC8v
IEdldCBFdmFzIG9iamVjdCBmcm9tIHBsYXRmb3JtUGFnZUNsaWVudCBhbmQgc2V0IEV2YXNHTCBy
ZWxhdGVkIG1lbWJlcnMuCiAgICAgICAgIHJldHVybjsKICAgICB9CgotICAgIC8vIEZvciBXZWJL
aXQyLCB3ZSBuZWVkIHRvIGNyZWF0ZSBhIGR1bW15IGVjb3JlRXZhcyBvYmplY3QgZm9yIHRoZSBX
ZWJQcm9jZXNzIGluIG9yZGVyIHRvIHVzZSBFdmFzR0wgQVBJcy4KLSNpZmRlZiBIQVZFX0VDT1JF
X1gKLSAgICBlY29yZV9ldmFzX2luaXQoKTsKLSAgICBtX2Vjb3JlRXZhcyA9IGFkb3B0UHRyKGVj
b3JlX2V2YXNfZ2xfeDExX25ldygwLCAwLCAwLCAwLCAxLCAxKSk7Ci0gICAgaWYgKCFtX2Vjb3Jl
RXZhcykKLSAgICAgICAgcmV0dXJuOwotI2Vsc2UKLSAgICByZXR1cm47Ci0jZW5kaWYKLQotICAg
IEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX2Vjb3JlRXZhcy5nZXQoKSk7Ci0gICAgaWYg
KCFldmFzKQotICAgICAgICByZXR1cm47CisgICAgbV9wbGF0Zm9ybUNvbnRleHQgPSBHTE5hdGl2
ZUNvbnRleHQ6OmNyZWF0ZUNvbnRleHQocmVuZGVyU3R5bGUpOwoKLSAgICAvLyBDcmVhdGUgYSBu
ZXcgRXZhc19HTCBvYmplY3QgZm9yIGdsIHJlbmRlcmluZyBvbiBlZmwuCi0gICAgbV9ldmFzR0wg
PSBldmFzX2dsX25ldyhldmFzKTsKLSAgICBpZiAoIW1fZXZhc0dMKQorICAgIGlmICAoIW1fcGxh
dGZvcm1Db250ZXh0KQogICAgICAgICByZXR1cm47CgotICAgIC8vIEdldCB0aGUgQVBJIGZvciBy
ZW5kZXJpbmcgdXNpbmcgT3BlbkdMLgotICAgIC8vIFRoaXMgcmV0dXJucyBhIHN0cnVjdHVyZSB0
aGF0IGNvbnRhaW5zIGFsbCB0aGUgT3BlbkdMIGZ1bmN0aW9ucyB3ZSBjYW4gdXNlIHRvIHJlbmRl
ciBpbiBFdmFzCi0gICAgbV9hcGkgPSBldmFzX2dsX2FwaV9nZXQobV9ldmFzR0wpOwotICAgIGlm
ICghbV9hcGkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENyZWF0ZSBhIGNvbnRleHQKLSAg
ICBtX2V2YXNHTENvbnRleHQgPSBldmFzX2dsX2NvbnRleHRfY3JlYXRlKG1fZXZhc0dMLCAwKTsK
LSAgICBpZiAoIW1fZXZhc0dMQ29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ3Jl
YXRlIGEgc3VyZmFjZQotICAgIGlmICghY3JlYXRlU3VyZmFjZSgwLCByZW5kZXJTdHlsZSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQorICAgIGlmIChyZW5kZXJTdHls
ZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyT2Zmc2NyZWVuKSB7CiAjaWYgVVNFKEdSQVBI
SUNTX1NVUkZBQ0UpCi0gICAgSW50U2l6ZSBzdXJmYWNlU2l6ZShtX2NvbnRleHQtPm1fY3VycmVu
dFdpZHRoLCBtX2NvbnRleHQtPm1fY3VycmVudEhlaWdodCk7Ci0gICAgbV9zdXJmYWNlRmxhZ3Mg
PSBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzVGV4dHVyZVRhcmdldCB8IEdyYXBoaWNzU3VyZmFj
ZTo6U3VwcG9ydHNTaGFyaW5nOwotICAgIGlmICghc3VyZmFjZVNpemUuaXNFbXB0eSgpKQotICAg
ICAgICBtX2dyYXBoaWNzU3VyZmFjZSA9IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKHN1cmZhY2VT
aXplLCBtX3N1cmZhY2VGbGFncyk7CisgICAgICAgIG1fcGxhdGZvcm1TdXJmYWNlID0gR0xOYXRp
dmVTdXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKCk7CisjZWxzZQorICAgICAgICBtX3Bs
YXRmb3JtU3VyZmFjZSA9IEdMTmF0aXZlU3VyZmFjZTo6Y3JlYXRlT2ZmU2NyZWVuU3VyZmFjZSgp
OwogI2VuZGlmCisgICAgICAgIGlmICghbV9wbGF0Zm9ybVN1cmZhY2UpIHsKKyAgICAgICAgICAg
IG1fcGxhdGZvcm1Db250ZXh0ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICghbV9wbGF0Zm9ybUNvbnRleHQtPmluaXRpYWxpemUobV9wbGF0
Zm9ybVN1cmZhY2UuZ2V0KCkpIHx8ICFtX3BsYXRmb3JtQ29udGV4dC0+bWFrZUN1cnJlbnQobV9w
bGF0Zm9ybVN1cmZhY2UuZ2V0KCkpIHx8IG1fcGxhdGZvcm1Db250ZXh0LT5pc0NvbnRleHRMb3N0
KCkpIHsKKyAgICAgICAgICAgIG1fcGxhdGZvcm1Db250ZXh0ID0gbnVsbHB0cjsKKyAgICAgICAg
ICAgIG1fcGxhdGZvcm1TdXJmYWNlLmNsZWFyKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgbV9zdXJmYWNlSGFuZGxlID0gbV9wbGF0Zm9ybVN1cmZhY2UtPmhhbmRsZSgpOworICAgIH0K
IH0KCiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6On5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUo
KQogewotICAgIGlmICghbV9ldmFzR0wpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2V2
YXNHTFN1cmZhY2UpCi0gICAgICAgIGV2YXNfZ2xfc3VyZmFjZV9kZXN0cm95KG1fZXZhc0dMLCBt
X2V2YXNHTFN1cmZhY2UpOwotCi0gICAgaWYgKG1fZXZhc0dMQ29udGV4dCkKLSAgICAgICAgZXZh
c19nbF9jb250ZXh0X2Rlc3Ryb3kobV9ldmFzR0wsIG1fZXZhc0dMQ29udGV4dCk7Ci0KLSAgICBl
dmFzX2dsX2ZyZWUobV9ldmFzR0wpOwotCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAg
bV9ncmFwaGljc1N1cmZhY2UuY2xlYXIoKTsKLSNlbmRpZgorICAgIG1fcGxhdGZvcm1TdXJmYWNl
LmNsZWFyKCk7CiB9CgotYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZVN1cmZh
Y2UoUGFnZUNsaWVudEVmbCogcGFnZUNsaWVudCwgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdp
bmRvdykKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVTdXJmYWNlKFBhZ2VD
bGllbnRFZmwqLCBib29sKQogewotICAgIC8vIElmIFJlbmRlclN0eWxlIGlzIFJlbmRlck9mZnNj
cmVlbiwgd2Ugd2lsbCBiZSByZW5kZXJpbmcgdG8gYSBGQk8sCi0gICAgLy8gc28gRXZhc19HTF9T
dXJmYWNlIGhhcyBhIDF4MSBkdW1teSBzdXJmYWNlLgotICAgIGludCB3aWR0aCA9IDE7Ci0gICAg
aW50IGhlaWdodCA9IDE7Ci0KLSAgICAvLyBCdXQsIGluIGNhc2Ugb2YgUmVuZGVyRGlyZWN0bHlU
b0hvc3RXaW5kb3csIHdlIGhhdmUgdG8gcmVuZGVyIHRvIGEgcmVuZGVyIHRhcmdldCBzdXJmYWNl
IHdpdGggdGhlIHNhbWUgc2l6ZSBhcyBvdXIgd2ViVmlldy4KLSAgICBpZiAocmVuZGVyRGlyZWN0
bHlUb0hvc3RXaW5kb3cpIHsKLSAgICAgICAgaWYgKCFwYWdlQ2xpZW50KQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAvLyBGSVhNRTogR2V0IGdlb21ldHJ5IG9mIHdlYlZpZXcg
YW5kIHNldCBzaXplIG9mIHRhcmdldCBzdXJmYWNlLgotICAgIH0KLQotICAgIEV2YXNfR0xfQ29u
ZmlnIGNvbmZpZyA9IHsKLSAgICAgICAgRVZBU19HTF9SR0JBXzg4ODgsCi0gICAgICAgIEVWQVNf
R0xfREVQVEhfQklUXzgsCi0gICAgICAgIEVWQVNfR0xfU1RFTkNJTF9OT05FLCAvLyBGSVhNRTog
c2V0IEVWQVNfR0xfU1RFTkNJTF9CSVRfOCBhZnRlciBmaXhpbmcgRXZhc19HTCBidWcuCi0gICAg
ICAgIEVWQVNfR0xfT1BUSU9OU19OT05FLAotICAgICAgICBFVkFTX0dMX01VTFRJU0FNUExFX05P
TkUKLSAgICB9OwotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IEV2YXNfR0xfU3VyZmFjZSBvYmplY3QK
LSAgICBtX2V2YXNHTFN1cmZhY2UgPSBldmFzX2dsX3N1cmZhY2VfY3JlYXRlKG1fZXZhc0dMLCAm
Y29uZmlnLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBpZiAoIW1fZXZhc0dMU3VyZmFjZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAg
IGlmIChyZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykgewotICAgICAgICBFdmFzX05hdGl2ZV9T
dXJmYWNlIG5hdGl2ZVN1cmZhY2U7Ci0gICAgICAgIC8vIEZpbGwgaW4gdGhlIE5hdGl2ZSBTdXJm
YWNlIGluZm9ybWF0aW9uIGZyb20gdGhlIGdpdmVuIEV2YXMgR0wgc3VyZmFjZS4KLSAgICAgICAg
ZXZhc19nbF9uYXRpdmVfc3VyZmFjZV9nZXQobV9ldmFzR0wsIG1fZXZhc0dMU3VyZmFjZSwgJm5h
dGl2ZVN1cmZhY2UpOwotCi0gICAgICAgIC8vIEZJWE1FOiBDcmVhdGUgYW5kIHNwZWNpYWxseSBz
ZXQgdXAgYSBldmFzX29iamVjdCB3aGljaCBhY3QgYXMgdGhlIHJlbmRlciB0YXJnZXIgc3VyZmFj
ZS4KLSAgICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiB0cnVlOworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQoKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpzZXRDdXJyZW50R0xDb250ZXh0KHZvaWQqIGNvbnRleHQsIHZvaWQqIHN1cmZhY2UpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6c2V0Q29udGV4dExvc3RDYWxsYmFjayhQYXNzT3du
UHRyPEdyYXBoaWNzQ29udGV4dDNEOjpDb250ZXh0TG9zdENhbGxiYWNrPiBjYWxsQmFjaykKIHsK
LSAgICBtX2dsQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgbV9nbFN1cmZhY2UgPSBzdXJmYWNlOwor
ICAgIG1fY29udGV4dExvc3RDYWxsYmFjayA9IGNhbGxCYWNrOwogfQoKIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dDNEKCkgY29uc3QKIHsKLSAgICBpZiAobV9yZW5kZXJTdHlsZSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6UmVuZGVyVG9DdXJyZW50R0xDb250ZXh0KQotICAgICAgICByZXR1cm4gbV9nbENvbnRl
eHQ7Ci0KLSAgICByZXR1cm4gbV9ldmFzR0xDb250ZXh0OworICAgIHJldHVybiBtX3BsYXRmb3Jt
Q29udGV4dC0+aGFuZGxlKCk7CiB9CgogYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om1h
a2VDb250ZXh0Q3VycmVudCgpCiB7Ci0gICAgcmV0dXJuIGV2YXNfZ2xfbWFrZV9jdXJyZW50KG1f
ZXZhc0dMLCBtX2V2YXNHTFN1cmZhY2UsIG1fZXZhc0dMQ29udGV4dCk7CisgICAgYm9vbCByZXR1
cm5WYWx1ZSA9IG1fcGxhdGZvcm1Db250ZXh0LT5tYWtlQ3VycmVudChtX3BsYXRmb3JtU3VyZmFj
ZS5nZXQoKSk7CisKKyAgICBpZiAobV9jb250ZXh0TG9zdENhbGxiYWNrICYmIG1fcGxhdGZvcm1D
b250ZXh0LT5pc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgbV9jb250ZXh0TG9zdENhbGxiYWNr
LT5vbkNvbnRleHRMb3N0KCk7CisgICAgICAgIC8vIFRPRE86IHJlc3RvcmUgY29udGV4dAorICAg
IH0KKworICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVS
X0dMKQpAQCAtMTgyLDI3ICsxMTcsMzkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqLCBjb25zdCBGbG9hdFIKICNlbmRp
ZgoKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpjcmVhdGVHcmFwaGljc1N1cmZhY2VzKGNvbnN0IEludFNpemUmIHNpemUpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NTdXJmYWNlcyhjb25zdCBJbnRT
aXplJikKIHsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIG1fZ3JhcGhpY3NTdXJm
YWNlLmNsZWFyKCk7Ci0gICAgZWxzZQotICAgICAgICBtX2dyYXBoaWNzU3VyZmFjZSA9IEdyYXBo
aWNzU3VyZmFjZTo6Y3JlYXRlKHNpemUsIG1fc3VyZmFjZUZsYWdzKTsKKyAgICBtX1BlbmRpbmdT
dXJmYWNlUmVzaXplID0gdHJ1ZTsKIH0KCiB1aW50MzJfdCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpCiB7Ci0gICAgaWYgKCFtX2dyYXBoaWNzU3VyZmFj
ZSkKKyAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0IHx8ICFtX3BsYXRmb3JtU3VyZmFjZS5nZXQo
KSB8fCBtX3BsYXRmb3JtQ29udGV4dC0+aXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4g
MDsKCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9ncmFwaGljc1N1cmZhY2UtPmNv
cHlGcm9tVGV4dHVyZShtX2NvbnRleHQtPm1fdGV4dHVyZSwgSW50UmVjdCgwLCAwLCBtX2NvbnRl
eHQtPm1fY3VycmVudFdpZHRoLCBtX2NvbnRleHQtPm1fY3VycmVudEhlaWdodCkpOwotICAgIHJl
dHVybiBtX2dyYXBoaWNzU3VyZmFjZS0+c3dhcEJ1ZmZlcnMoKTsKKyAgICBpZiAobV9QZW5kaW5n
U3VyZmFjZVJlc2l6ZSkgeworICAgICAgICBtX1BlbmRpbmdTdXJmYWNlUmVzaXplID0gZmFsc2U7
CisgICAgICAgIG1fcGxhdGZvcm1TdXJmYWNlLT5zZXRHZW9tZXRyeShJbnRSZWN0KDAsIDAsIG1f
Y29udGV4dC0+bV9jdXJyZW50V2lkdGgsIG1fY29udGV4dC0+bV9jdXJyZW50SGVpZ2h0KSk7Cisg
ICAgfQorCisgICAgaWYgKG1fY29udGV4dC0+bV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAg
bV9wbGF0Zm9ybUNvbnRleHQtPm1ha2VDdXJyZW50KG1fcGxhdGZvcm1TdXJmYWNlLmdldCgpKTsK
KyNpZiAhVVNFKE9QRU5HTF9FU18yKQorICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9SRUFE
X0ZSQU1FQlVGRkVSX0VYVCwgbV9jb250ZXh0LT5tX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAg
Z2xCaW5kRnJhbWVidWZmZXIoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fY29udGV4dC0+bV9m
Ym8pOworICAgICAgICBnbEJsaXRGcmFtZWJ1ZmZlcigwLCAwLCBtX2NvbnRleHQtPm1fY3VycmVu
dFdpZHRoLCBtX2NvbnRleHQtPm1fY3VycmVudEhlaWdodCwgMCwgMCwgbV9jb250ZXh0LT5tX2N1
cnJlbnRXaWR0aCwgbV9jb250ZXh0LT5tX2N1cnJlbnRIZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9C
SVQsIEdMX0xJTkVBUik7CisjZW5kaWYKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2NvbnRleHQtPm1fYm91bmRGQk8pOworICAgIH0K
KworICAgIG1fcGxhdGZvcm1TdXJmYWNlLT5jb3B5VGV4dHVyZShtX2NvbnRleHQtPm1fdGV4dHVy
ZSwgSW50UmVjdCgwLCAwLCBtX2NvbnRleHQtPm1fY3VycmVudFdpZHRoLCBtX2NvbnRleHQtPm1f
Y3VycmVudEhlaWdodCkpOworICAgIG1fcGxhdGZvcm1TdXJmYWNlLT5zd2FwQnVmZmVycygpOwor
ICAgIHJldHVybiAwOwogfQoKIEdyYXBoaWNzU3VyZmFjZVRva2VuIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKSBjb25zdAogewotICAgIHJldHVybiBtX2dy
YXBoaWNzU3VyZmFjZS0+ZXhwb3J0VG9rZW4oKTsKKyAgICByZXR1cm4gbV9zdXJmYWNlSGFuZGxl
OwogfQogI2VuZGlmCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCmluZGV4IDFhZTQzNTEu
LjM0MjAwMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Vm
bC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgKQEAgLTEsNSArMSw2IEBA
CiAvKgogICAgIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgICAgQ29w
eXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLgoKICAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTI3LDE0ICsyOCwxMSBAQAogI2VuZGlmCgogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotI2lu
Y2x1ZGUgIkdyYXBoaWNzU3VyZmFjZS5oIgorI2luY2x1ZGUgIkdMTmF0aXZlU3VyZmFjZS5oIgog
I2VuZGlmCgotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0wgICAgICAgICAgICAgICBFdmFzX0dMOwot
dHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfU3VyZmFjZSAgICAgICBFdmFzX0dMX1N1cmZhY2U7Ci10
eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9Db250ZXh0ICAgICAgIEV2YXNfR0xfQ29udGV4dDsKLXR5
cGVkZWYgc3RydWN0IF9FdmFzX0dMX0NvbmZpZyAgICAgICAgRXZhc19HTF9Db25maWc7Ci10eXBl
ZGVmIHN0cnVjdCBfRXZhc19HTF9BUEkgICAgICAgICAgIEV2YXNfR0xfQVBJOworI2luY2x1ZGUg
IkdMTmF0aXZlQ29udGV4dC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CgogY2xhc3Mg
UGFnZUNsaWVudEVmbDsKCkBAIC00OCw4ICs0NiwxMiBAQCBwdWJsaWM6CiAgICAgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgSG9zdFdpbmRvdyosIEdyYXBoaWNz
Q29udGV4dDNEOjpSZW5kZXJTdHlsZSk7CiAgICAgfkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgp
OwoKKyAgICBib29sIGNyZWF0ZVN1cmZhY2UoUGFnZUNsaWVudEVmbCosIGJvb2wpOworCiAgICAg
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29u
c3Q7CgorICAgIHZvaWQgc2V0Q29udGV4dExvc3RDYWxsYmFjayhQYXNzT3duUHRyPEdyYXBoaWNz
Q29udGV4dDNEOjpDb250ZXh0TG9zdENhbGxiYWNrPiAgY2FsbEJhY2spOworCiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIo
KSBjb25zdDsKICNlbmRpZgpAQCAtNjMsMjcgKzY1LDIxIEBAIHB1YmxpYzoKICNlbmRpZgoKICAg
ICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGJvb2wgY3JlYXRlU3VyZmFjZShQYWdl
Q2xpZW50RWZsKiwgYm9vbCByZW5kZXJEaXJlY3RseVRvRXZhc0dMT2JqZWN0KTsKLSAgICB2b2lk
IHNldEN1cnJlbnRHTENvbnRleHQodm9pZCosIHZvaWQqKTsKKyAgICBib29sIGNyZWF0ZVN1cmZh
Y2UoKTsKCiAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwog
ICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CiAgICAgSG9zdFdpbmRvdyogbV9ob3N0
V2luZG93OwogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIEdyYXBoaWNzU3VyZmFjZTo6
RmxhZ3MgbV9zdXJmYWNlRmxhZ3M7Ci0gICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gbV9ncmFw
aGljc1N1cmZhY2U7CisgICAgT3duUHRyPEdMTmF0aXZlQ29udGV4dD4gbV9wbGF0Zm9ybUNvbnRl
eHQ7CisgICAgUmVmUHRyPEdMTmF0aXZlU3VyZmFjZT4gbV9wbGF0Zm9ybVN1cmZhY2U7CisgICAg
R3JhcGhpY3NTdXJmYWNlVG9rZW4gbV9zdXJmYWNlSGFuZGxlOwogI2VuZGlmCgorICAgIE93blB0
cjxHcmFwaGljc0NvbnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjaz4gbV9jb250ZXh0TG9zdENh
bGxiYWNrOwogICAgIExpc3RIYXNoU2V0PEdDM0RlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsKLQot
ICAgIE93blB0cjxFY29yZV9FdmFzPiBtX2Vjb3JlRXZhczsKLSAgICBFdmFzX0dMKiBtX2V2YXNH
TDsKLSAgICBFdmFzX0dMX0NvbnRleHQqIG1fZXZhc0dMQ29udGV4dDsKLSAgICBFdmFzX0dMX1N1
cmZhY2UqIG1fZXZhc0dMU3VyZmFjZTsKLSAgICB2b2lkKiBtX2dsQ29udGV4dDsKLSAgICB2b2lk
KiBtX2dsU3VyZmFjZTsKLSAgICBFdmFzX0dMX0FQSSogbV9hcGk7CiAgICAgR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlclN0eWxlIG1fcmVuZGVyU3R5bGU7CisgICAgYm9vbCBtX1BlbmRpbmdTdXJm
YWNlUmVzaXplOwogfTsKCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174209</attachid>
            <date>2012-11-14 11:27:10 -0800</date>
            <delta_ts>2012-11-15 20:00:27 -0800</delta_ts>
            <desc>patch</desc>
            <filename>latestGLXChanges.patch</filename>
            <type>text/plain</type>
            <size>66315</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzMmJhZWFiLi5jMzVmM2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQy
IEBACisyMDEyLTExLTE0ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGlu
dGVsLmNvbT4KKworICAgICAgICBbRUZMXSBSZWZhY3RvciBHcmFwaGljc0NvbnRleHQzREVGTC4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTI5MS4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIGludHJvZHVjZXMgdHdvIG5ldyBjbGFzc2VzIEdMTmF0aXZlQ29udGV4dCBhbmQgR0xOYXRp
dmVTdXJmYWNlLgorICAgICAgICBUaGVzZSBjbGFzc2VzIGVuY2Fwc3VsYXRlIEdMIGNvbnRleHQg
YW5kIGRyYXdhYmxlIGhpZGluZyBwbGF0Zm9ybQorICAgICAgICBzcGVjaWZpYyBtYW5hZ2VtZW50
LiBUaGlzIG1ha2VzIGl0IGVhc3kgZm9yIGFkZGluZyBzdXBwb3J0IGZvciBkaWZmZXJlbnQgYmFj
ayBlbmRzCisgICAgICAgIGluIEdyYXBoaWNzQ29udGV4dDNERUZMLiBUaGlzIHBhdGNoIGFsc28g
YWRkcyBHTFggc3VwcG9ydC4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorCisgICAg
ICAgIEdMTmF0aXZlQ29udGV4dCBlbmNhcHN1bGF0ZXMgR0wgY29udGV4dCBoaWRpbmcgcGxhdGZv
cm0gc3BlY2lmaWMgbWFuYWdlbWVudC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9lZmwv
R0xOYXRpdmVDb250ZXh0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdMTmF0aXZlQ29udGV4dDo6Y3JlYXRlQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpHTE5hdGl2ZUNvbnRleHQ6OmNyZWF0ZU9mZlNjcmVlbkNvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6R0xOYXRpdmVDb250ZXh0OjpjcmVhdGVDdXJyZW50Q29udGV4dFdyYXBwZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R0xOYXRpdmVDb250ZXh0OjpHTE5hdGl2ZUNvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6R0xOYXRpdmVDb250ZXh0Ojp+R0xOYXRpdmVDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdMTmF0aXZlQ29udGV4dDo6bWFrZUN1cnJlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6R0xOYXRpdmVDb250ZXh0Ojppc0NvbnRleHRMb3N0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdMTmF0aXZlQ29udGV4dDo6cmVsZWFzZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R0xO
YXRpdmVDb250ZXh0OjpoYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6R0xOYXRpdmVDb250ZXh0
Ojppc0N1cnJlbnRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdMTmF0aXZlQ29udGV4dDo6
aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHTE5hdGl2ZUNvbnRleHQ6OmdldEN1cnJl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6R0xOYXRpdmVDb250ZXh0OjpwbGF0Zm9ybU1ha2VDdXJy
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdMTmF0aXZlQ29udGV4dDo6cGxhdGZvcm1SZWxlYXNl
Q3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHTE5hdGl2ZUNvbnRleHQ6OmRlc3Ryb3kpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HTE5hdGl2ZUNvbnRleHQuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEdMTmF0aXZlQ29udGV4dCk6CisKKyAgICAg
ICAgR0xOYXRpdmVTdXJmYWNlIGVuY2Fwc3VsYXRlcyBHTCBzdXJmYWNlIGhpZGluZyBwbGF0Zm9y
bSBzcGVjaWZpYyBtYW5hZ2VtZW50LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9H
TE5hdGl2ZVN1cmZhY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6R0xOYXRpdmVTdXJmYWNlOjpjcmVhdGVPZmZzY3JlZW5TdXJmYWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdMTmF0aXZlU3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHTE5hdGl2ZVN1cmZhY2U6OkdMTmF0aXZlU3VyZmFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHTE5hdGl2ZVN1cmZhY2U6On5HTE5hdGl2ZVN1cmZhY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R0xOYXRpdmVTdXJmYWNlOjpoYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6
R0xOYXRpdmVTdXJmYWNlOjpnZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpHTE5hdGl2ZVN1
cmZhY2U6OnNoYXJlZERpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6R0xOYXRpdmVTdXJmYWNl
OjpzdXJmYWNlQ29uZmlnKToKKyAgICAgICAgKFdlYkNvcmU6OkdMTmF0aXZlU3VyZmFjZTo6c3dh
cEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R0xOYXRpdmVTdXJmYWNlOjpjb3B5VGV4dHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHTE5hdGl2ZVN1cmZhY2U6OnVwZGF0ZUNvbnRlbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdMTmF0aXZlU3VyZmFjZTo6c2V0R2VvbWV0cnkpOgorICAgICAg
ICAoV2ViQ29yZTo6R0xOYXRpdmVTdXJmYWNlOjpkZXN0cm95KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9lZmwvR0xOYXRpdmVTdXJmYWNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChHTE5hdGl2ZVN1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2VmbC9HTFhEZWZzLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisKKyAgICAgICAg
TmVlZGVkIGNoYW5nZXMgaW4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlIHRvIHRha2UgR0xOYXRp
dmVDb250ZXh0IGFuZCBHTE5hdGl2ZVN1cmZhY2UgaW50byB1c2UuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6c2V0Q29udGV4dExvc3RDYWxsYmFjayk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6On5HcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpmcmVlUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6Y3JlYXRlU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OnNldENvbnRleHRMb3N0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFrZUNvbnRleHRD
dXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3Jl
YXRlR3JhcGhpY3NTdXJmYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OmNvcHlUb0dyYXBoaWNzU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OmdyYXBoaWNzU3VyZmFjZVRva2VuKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmg6CisgICAgICAg
IChHcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorCisgICAgICAgIEdMWCBJbXBsZW1lbnRhdGlv
bi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dFdy
YXBwZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
aW5pdGlhbGl6ZUFSQkV4dGVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6R0xYQ29udGV4dFdy
YXBwZXI6OkdMWENvbnRleHRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWENvbnRleHRX
cmFwcGVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWENvbnRleHRXcmFwcGVy
Ojp+R0xYQ29udGV4dFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6R0xYQ29udGV4dFdyYXBw
ZXI6OmlzQ3VycmVudENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R0xYQ29udGV4dFdyYXBw
ZXI6OnBsYXRmb3JtTWFrZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R0xYQ29udGV4dFdy
YXBwZXI6OnBsYXRmb3JtUmVsZWFzZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R0xYQ29u
dGV4dFdyYXBwZXI6OmZyZWVSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6R0xYQ29udGV4
dFdyYXBwZXI6OmRlc3Ryb3kpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2dseC9HTFhDb250ZXh0V3JhcHBlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoR0xYQ3VycmVudENvbnRleHRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWEN1
cnJlbnRDb250ZXh0V3JhcHBlcjo6R0xYQ3VycmVudENvbnRleHRXcmFwcGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcjo6fkdMWEN1cnJlbnRDb250ZXh0V3Jh
cHBlcik6CisgICAgICAgIChHTFhDb250ZXh0V3JhcHBlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R0xYU3VyZmFjZTo6R0xYU3VyZmFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHTFhTdXJmYWNlOjp+R0xYU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHTFhTdXJmYWNlOjp2aXN1YWxJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFN1cmZhY2U6
OnhXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0xYU3VyZmFjZTo6cEJ1ZmZlckNvbmZpZyk6
CisgICAgICAgIChXZWJDb3JlOjpHTFhTdXJmYWNlOjp0cmFuc3BvcnRTdXJmYWNlQ29uZmlnKToK
KyAgICAgICAgKFdlYkNvcmU6OkdMWFN1cmZhY2U6OmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpHTFhUcmFuc3BvcnRTdXJmYWNlOjpHTFhUcmFuc3BvcnRT
dXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6On5HTFhUcmFu
c3BvcnRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OnN1
cmZhY2VDb25maWcpOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6c3dh
cEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6c2V0R2Vv
bWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6aW5pdGlhbGl6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFhUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OmZyZWVSZXNvdXJjZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6OkdMWFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R0xYUEJ1ZmZl
cjo6fkdMWFBCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R0xYUEJ1ZmZlcjo6aW5pdGlhbGl6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFhQQnVmZmVyOjpzdXJmYWNlQ29uZmlnKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdMWFBCdWZmZXI6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6R0xY
UEJ1ZmZlcjo6ZnJlZVJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFNoYXJlZFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRSZXNvdXJjZXM6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRSZXNvdXJjZXM6OmRlcmVmKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZFJlc291cmNlczo6Z2V0WFdpbmRvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFyZWRSZXNvdXJjZXM6OmRpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
cmVkUmVzb3VyY2VzOjp2aXN1YWxJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFJlc291
cmNlczo6Y3JlYXRlQ29uZmlnKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFJlc291cmNlczo6
cEJ1ZmZlckNvbnRleHRDb25maWcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkUmVzb3VyY2Vz
OjpzdXJmYWNlQ29udGV4dENvbmZpZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRSZXNvdXJj
ZXM6OmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFy
ZWRSZXNvdXJjZXM6OlNoYXJlZFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRS
ZXNvdXJjZXM6On5TaGFyZWRSZXNvdXJjZXMpOgorICAgICAgICAoR0xYU3VyZmFjZSk6CisgICAg
ICAgIChHTFhUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAgICAgKEdMWFBCdWZmZXIpOgorCiAyMDEy
LTExLTEzICBFdWdlbmUgS2x5dWNobmlrb3YgIDxldXN0YXMuYnVnQGdtYWlsLmNvbT4KIAogICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBKc0RvYy1hbm5vdGF0ZSBLZXlib2FyZFNob3J0Y3V0cwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCA1ODJhZjA1Li5kYTE0NmE5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUVmbC5jbWFrZQpAQCAtMjc3LDExICsyNzcsMTQgQEAgSUYgKFdURl9VU0VfM0RfR1JBUEhJ
Q1MpCiAgIExJU1QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wiCiAgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9nbHgiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcCIKICAgKQogICBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9EcmF3aW5nQnVmZmVyQ2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dM
TmF0aXZlQ29udGV4dC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xOYXRpdmVTdXJm
YWNlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCkBA
IC0yODksNiArMjkyLDggQEAgSUYgKFdURl9VU0VfM0RfR1JBUEhJQ1MpCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuY3BwCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHRXcmFwcGVyLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL3F0L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HTE5hdGl2ZUNvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dMTmF0aXZlQ29udGV4dC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI3M2YyMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HTE5hdGl2ZUNvbnRleHQu
Y3BwCkBAIC0wLDAgKzEsMjA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJHTE5hdGl2ZUNvbnRleHQuaCIKKworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKworI2lmIEhBVkUoR0xYKQorI2luY2x1ZGUgIkdMWENvbnRleHRX
cmFwcGVyLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgUEZOR0xH
RVRHUkFQSElDU1JFU0VUU1RBVFVTQVJCUFJPQyAgZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJC
ID0gMDsKK3N0YXRpYyBHTE5hdGl2ZUNvbnRleHQqIG1fQ3VycmVudENvbnRleHQgPSAwOworCitQ
YXNzT3duUHRyPEdMTmF0aXZlQ29udGV4dD4gR0xOYXRpdmVDb250ZXh0OjpjcmVhdGVDb250ZXh0
KEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKK3sKKyAgICBzdGF0
aWMgYm9vbCBpbml0aWFsaXplZFNoaW1zID0gZmFsc2U7CisgICAgc3RhdGljIGJvb2wgZGlkSW5p
dGlhbGl6ZVNoaW1zID0gdHJ1ZTsKKworICAgIGlmICghaW5pdGlhbGl6ZWRTaGltcykgeworICAg
ICAgICBkaWRJbml0aWFsaXplU2hpbXMgPSBpbml0aWFsaXplT3BlbkdMU2hpbXMoKTsKKyNpZiBI
QVZFKEdMWCkKKyAgICAgICAgZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCID0gcmVpbnRlcnBy
ZXRfY2FzdDxQRk5HTEdFVEdSQVBISUNTUkVTRVRTVEFUVVNBUkJQUk9DPihnbFhHZXRQcm9jQWRk
cmVzc0FSQihyZWludGVycHJldF9jYXN0PGNvbnN0IEdMdWJ5dGUqPigiZ2xHZXRHcmFwaGljc1Jl
c2V0U3RhdHVzQVJCIikpKTsKKyNlbmRpZgorICAgICAgICBkaWRJbml0aWFsaXplU2hpbXMgPSB0
cnVlOworICAgIH0KKworICAgIGlmICghZGlkSW5pdGlhbGl6ZVNoaW1zKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIHN3aXRjaCAocmVuZGVyU3R5bGUpIHsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSZW5kZXJPZmZzY3JlZW46CisgICAgICAgIGlmIChPd25QdHI8R0xOYXRp
dmVDb250ZXh0PiBnbHhDb250ZXh0ICA9IEdMTmF0aXZlQ29udGV4dDo6Y3JlYXRlT2ZmU2NyZWVu
Q29udGV4dCgpKQorICAgICAgICAgICAgcmV0dXJuIGdseENvbnRleHQucmVsZWFzZSgpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJUb0N1cnJlbnRH
TENvbnRleHQ6CisgICAgICAgIGlmIChPd25QdHI8R0xOYXRpdmVDb250ZXh0PiBnbHhDb250ZXh0
ICA9IEdMTmF0aXZlQ29udGV4dDo6Y3JlYXRlQ3VycmVudENvbnRleHRXcmFwcGVyKCkpCisgICAg
ICAgICAgICByZXR1cm4gZ2x4Q29udGV4dC5yZWxlYXNlKCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK1Bhc3NPd25QdHI8R0xOYXRpdmVDb250ZXh0PiBHTE5hdGl2
ZUNvbnRleHQ6OmNyZWF0ZU9mZlNjcmVlbkNvbnRleHQoKQoreworI2lmIEhBVkUoR0xYKQorICAg
IE93blB0cjxHTE5hdGl2ZUNvbnRleHQ+IGdseENvbnRleHQgPSBhZG9wdFB0cihuZXcgR0xYQ29u
dGV4dFdyYXBwZXIoKSk7CisgICAgcmV0dXJuIGdseENvbnRleHQucmVsZWFzZSgpOworI2VuZGlm
CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUGFzc093blB0cjxHTE5hdGl2ZUNvbnRleHQ+
IEdMTmF0aXZlQ29udGV4dDo6Y3JlYXRlQ3VycmVudENvbnRleHRXcmFwcGVyKCkKK3sKKyNpZiBI
QVZFKEdMWCkKKyAgICBPd25QdHI8R0xOYXRpdmVDb250ZXh0PiBnbHhDb250ZXh0ID0gYWRvcHRQ
dHIobmV3IEdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcigpKTsKKyAgICByZXR1cm4gZ2x4Q29udGV4
dC5yZWxlYXNlKCk7CisjZW5kaWYKKworICAgIHJldHVybiBudWxscHRyOworfQorCitHTE5hdGl2
ZUNvbnRleHQ6OkdMTmF0aXZlQ29udGV4dCgpCisgICAgOiBtX2NvbnRleHRIYW5kbGUoMCkKKyAg
ICAsIG1fcmVzZXRMb3N0Q29udGV4dChmYWxzZSkKK3sKKworfQorCitHTE5hdGl2ZUNvbnRleHQ6
On5HTE5hdGl2ZUNvbnRleHQoKQoreworICAgIGlmICh0aGlzID09IG1fQ3VycmVudENvbnRleHQp
CisgICAgICAgIG1fQ3VycmVudENvbnRleHQgPSAwOworfQorCitib29sIEdMTmF0aXZlQ29udGV4
dDo6bWFrZUN1cnJlbnQoR0xOYXRpdmVTdXJmYWNlKiBzdXJmYWNlKQoreworICAgIG1fY29udGV4
dExvc3QgPSBmYWxzZTsKKworICAgIGlmIChzdXJmYWNlICYmICFzdXJmYWNlLT5oYW5kbGUoKS5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgbV9DdXJyZW50Q29udGV4dCA9IDA7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoaXNDdXJyZW50Q29udGV4dCgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBmYWxzZTsKKworICAgIGlmICgh
c3VyZmFjZSkgeworICAgICAgICBtX0N1cnJlbnRDb250ZXh0ID0gMDsKKyAgICAgICAgcGxhdGZv
cm1SZWxlYXNlQ3VycmVudCgpOworICAgICAgICByZXR1cm5WYWx1ZSA9ICB0cnVlOworICAgIH0g
ZWxzZSBpZiAocGxhdGZvcm1NYWtlQ3VycmVudChzdXJmYWNlKSkgeworICAgICAgICBtX0N1cnJl
bnRDb250ZXh0ID0gdGhpczsKKyAgICAgICAgcmV0dXJuVmFsdWUgPSAgdHJ1ZTsKKyAgICB9CisK
KyAgICBpZiAobV9yZXNldExvc3RDb250ZXh0ICYmIGdsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0FS
QikgeworICAgICAgICBHTGVudW0gc3RhdHVzID0gZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJC
KCk7CisKKyAgICAgICAgc3dpdGNoIChzdGF0dXMpIHsKKyAgICAgICAgY2FzZSBOYXRpdmVDT05U
RVhUX05PX0VSUk9SOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTmF0aXZlQ09O
VEVYVF9HVUlMVFlfQ09OVEVYVF9SRVNFVDoKKyAgICAgICAgICAgIG1fY29udGV4dExvc3QgPSB0
cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTmF0aXZlQ09OVEVYVF9JTk5P
Q0VOVF9DT05URVhUX1JFU0VUOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTmF0
aXZlQ09OVEVYVF9VTktOT1dOX0NPTlRFWFRfUkVTRVQ6CisgICAgICAgICAgICBtX2NvbnRleHRM
b3N0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7
Cit9CisKK2Jvb2wgR0xOYXRpdmVDb250ZXh0Ojppc0NvbnRleHRMb3N0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9jb250ZXh0TG9zdDsKK30KKwordm9pZCBHTE5hdGl2ZUNvbnRleHQ6OnJlbGVh
c2VDdXJyZW50KCkKK3sKKyAgICBpZiAoIWlzQ3VycmVudENvbnRleHQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9DdXJyZW50Q29udGV4dCA9IDA7CisgICAgcGxhdGZvcm1SZWxlYXNlQ3Vy
cmVudCgpOworfQorCitQbGF0Zm9ybU5hdGl2ZUNvbnRleHQgR0xOYXRpdmVDb250ZXh0OjpoYW5k
bGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHRIYW5kbGU7Cit9CisKK2Jvb2wgR0xO
YXRpdmVDb250ZXh0Ojppc0N1cnJlbnRDb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBHTE5hdGl2ZUNvbnRleHQ6OmluaXRpYWxpemUoR0xOYXRpdmVTdXJmYWNl
KikKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR0xOYXRpdmVDb250ZXh0KiBHTE5hdGl2ZUNv
bnRleHQ6OmdldEN1cnJlbnQoKQoreworICAgIHJldHVybiBtX0N1cnJlbnRDb250ZXh0OworfQor
Citib29sIEdMTmF0aXZlQ29udGV4dDo6cGxhdGZvcm1NYWtlQ3VycmVudChHTE5hdGl2ZVN1cmZh
Y2UqKQoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdMTmF0aXZlQ29udGV4dDo6cGxh
dGZvcm1SZWxlYXNlQ3VycmVudCgpCit7CisKK30KKwordm9pZCBHTE5hdGl2ZUNvbnRleHQ6OmRl
c3Ryb3koKQoreworICAgIG1fY29udGV4dEhhbmRsZSA9IDA7CisgICAgbV9yZXNldExvc3RDb250
ZXh0ID0gZmFsc2U7CisKKyAgICBpZiAodGhpcyA9PSBtX0N1cnJlbnRDb250ZXh0KQorICAgICAg
ICBtX0N1cnJlbnRDb250ZXh0ID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9H
TE5hdGl2ZUNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9H
TE5hdGl2ZUNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGIx
Y2MzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWZsL0dMTmF0aXZlQ29udGV4dC5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgR0xOYXRpdmVDb250ZXh0X2gKKyNkZWZpbmUgR0xOYXRpdmVDb250ZXh0X2gK
KworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkdMTmF0aXZl
U3VyZmFjZS5oIgorI2luY2x1ZGUgIkdMWERlZnMuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCisvLyBFbmNhcHN1bGF0ZXMgYW4g
T3BlbkdMIGNvbnRleHQgYW5kIGRyYXdhYmxlLCBoaWRpbmcgcGxhdGZvcm0gc3BlY2lmaWMgbWFu
YWdlbWVudC4KK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR0xOYXRpdmVDb250ZXh0IHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHTE5hdGl2ZUNvbnRleHQpOworcHVibGljOgorCisg
ICAgLy8gRnJvbSBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L2dsZXMvZXh0ZW5zaW9u
cy9FWFQvRVhUX3JvYnVzdG5lc3MudHh0CisgICAgZW51bSBOYXRpdmVDb250ZXh0UmVzZXQgewor
ICAgICAgICBOYXRpdmVDT05URVhUX05PX0VSUk9SID0gMHgwMDAwLAorICAgICAgICBOYXRpdmVD
T05URVhUX0dVSUxUWV9DT05URVhUX1JFU0VUID0gMHg4MjUzLAorICAgICAgICBOYXRpdmVDT05U
RVhUX0lOTk9DRU5UX0NPTlRFWFRfUkVTRVQgPSAweDgyNTQsCisgICAgICAgIE5hdGl2ZUNPTlRF
WFRfVU5LTk9XTl9DT05URVhUX1JFU0VUID0gMHg4MjU1LAorICAgIH07CisKKyAgICBzdGF0aWMg
UGFzc093blB0cjxHTE5hdGl2ZUNvbnRleHQ+IGNyZWF0ZUNvbnRleHQoR3JhcGhpY3NDb250ZXh0
M0Q6OlJlbmRlclN0eWxlKTsKKworICAgIHZpcnR1YWwgfkdMTmF0aXZlQ29udGV4dCgpOworCisg
ICAgdmlydHVhbCBib29sIGluaXRpYWxpemUoR0xOYXRpdmVTdXJmYWNlKik7CisKKyAgICAvLyBN
YWtlcyB0aGlzIGFuZCBzdXJmYWNlIGFzIGN1cnJlbnQgY29udGV4dCBhbmQgZHJhd2FibGUuCisg
ICAgLy8gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggbm8gc3VyZmFjZSBpcyBzYW1lIGFzIGNh
bGxpbmcgcmVsZWFzZUN1cnJlbnQuCisgICAgLy8gRG9lcyBub3RoaW5nIGlmIHRoaXMgaXMgYWxy
ZWFkeSBjdXJyZW50IENvbnRleHQuCisgICAgYm9vbCBtYWtlQ3VycmVudChHTE5hdGl2ZVN1cmZh
Y2UqID0gMCk7CisKKyAgICAvLyBTZXRzIEN1cnJlbnQgQ29udGV4dCBhbmQgRHJhd2FibGUgYXMg
TnVsbC4KKyAgICAvLyBEb2Vzbid0IGhhdmUgYW55IGVmZmVjdCBpZiB0aGlzIGlzIG5vdCB0aGUg
Y3VycmVudCBDb250ZXh0LgorICAgIHZvaWQgcmVsZWFzZUN1cnJlbnQoKTsKKworICAgIFBsYXRm
b3JtTmF0aXZlQ29udGV4dCBoYW5kbGUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBpc0N1
cnJlbnRDb250ZXh0KCkgY29uc3Q7CisKKyAgICBib29sIGlzQ29udGV4dExvc3QoKSBjb25zdDsK
KworICAgIC8vIERlc3Ryb3lzIGFueSBnbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMg
Y29udGV4dC4KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOworCisgICAgc3RhdGljIEdMTmF0
aXZlQ29udGV4dCogZ2V0Q3VycmVudCgpOworCitwcm90ZWN0ZWQ6CisgICAgR0xOYXRpdmVDb250
ZXh0KCk7CisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtTWFrZUN1cnJlbnQoR0xOYXRpdmVTdXJm
YWNlKik7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtUmVsZWFzZUN1cnJlbnQoKTsKKyAgICBQ
bGF0Zm9ybU5hdGl2ZUNvbnRleHQgbV9jb250ZXh0SGFuZGxlOworICAgIGJvb2wgbV9yZXNldExv
c3RDb250ZXh0OworICAgIGJvb2wgbV9jb250ZXh0TG9zdDsKKworcHJpdmF0ZToKKyAgICBzdGF0
aWMgUGFzc093blB0cjxHTE5hdGl2ZUNvbnRleHQ+IGNyZWF0ZU9mZlNjcmVlbkNvbnRleHQoKTsK
KyAgICBzdGF0aWMgUGFzc093blB0cjxHTE5hdGl2ZUNvbnRleHQ+IGNyZWF0ZUN1cnJlbnRDb250
ZXh0V3JhcHBlcigpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKwor
I2VuZGlmIC8vIEdMTmF0aXZlQ29udGV4dF9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xOYXRpdmVTdXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HTE5hdGl2ZVN1cmZhY2UuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZjYzZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xOYXRpdmVTdXJmYWNlLmNwcApAQCAtMCww
ICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiR0xOYXRpdmVTdXJmYWNlLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisKKyNpZiBIQVZFKEdMWCkKKyNpbmNsdWRlICJHTFhTdXJmYWNlLmgiCisjZW5kaWYK
KworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UGFzc093blB0cjxHTE5hdGl2ZVN1cmZhY2U+IEdMTmF0aXZlU3VyZmFjZTo6Y3JlYXRlT2Zmc2Ny
ZWVuU3VyZmFjZSgpCit7CisjaWYgSEFWRShHTFgpCisgICAgT3duUHRyPEdMTmF0aXZlU3VyZmFj
ZT4gc3VyZmFjZSA9ICBhZG9wdFB0cihuZXcgR0xYUEJ1ZmZlcigpKTsKKworICAgIGlmIChzdXJm
YWNlLT5oYW5kbGUoKS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBzdXJmYWNlLnJlbGVhc2Uo
KTsKKyNlbmRpZgorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1Bhc3NPd25QdHI8R0xOYXRp
dmVTdXJmYWNlPiBHTE5hdGl2ZVN1cmZhY2U6OmNyZWF0ZVRyYW5zcG9ydFN1cmZhY2UoKQorewor
I2lmIEhBVkUoR0xYKQorICAgIE93blB0cjxHTE5hdGl2ZVN1cmZhY2U+IHN1cmZhY2UgPSAgYWRv
cHRQdHIobmV3IEdMWFRyYW5zcG9ydFN1cmZhY2UoKSk7CisKKyAgICBpZiAoc3VyZmFjZS0+aGFu
ZGxlKCkuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gc3VyZmFjZS5yZWxlYXNlKCk7CisjZW5k
aWYKKworICAgIHJldHVybiBudWxscHRyOworfQorCitHTE5hdGl2ZVN1cmZhY2U6OkdMTmF0aXZl
U3VyZmFjZSgpCisgICAgOiBtX1Jlc3RvcmVOZWVkZWQodHJ1ZSkKKyAgICAsIG1fZmJvSWQoMCkK
KyAgICAsIG1fc2hhcmVkRGlzcGxheSgwKQoreworCit9CisKK0dMTmF0aXZlU3VyZmFjZTo6fkdM
TmF0aXZlU3VyZmFjZSgpCit7CisKK30KKworR3JhcGhpY3NTdXJmYWNlVG9rZW4gR0xOYXRpdmVT
dXJmYWNlOjpoYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBHcmFwaGljc1N1cmZhY2VUb2tl
bihtX2RyYXdhYmxlKTsKK30KKworY29uc3QgSW50UmVjdCYgR0xOYXRpdmVTdXJmYWNlOjpnZW9t
ZXRyeSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVjdDsKK30KKworcGxhdGZvcm1EaXNwbGF5
IEdMTmF0aXZlU3VyZmFjZTo6c2hhcmVkRGlzcGxheSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
c2hhcmVkRGlzcGxheTsKK30KKworUGxhdGZvcm1TdXJmYWNlQ29uZmlnIEdMTmF0aXZlU3VyZmFj
ZTo6c3VyZmFjZUNvbmZpZygpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgR0xOYXRpdmVT
dXJmYWNlOjpzd2FwQnVmZmVycygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBHTE5hdGl2ZVN1cmZhY2U6OmNvcHlUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QpCit7CisgICAgaWYgKCFtX2Zib0lkKQorICAgICAgICBnbEdlbkZy
YW1lYnVmZmVycygxLCAmbV9mYm9JZCk7CisKKyAgICBtX1Jlc3RvcmVOZWVkZWQgPSB0cnVlOwor
ICAgIGludCB4ID0gc291cmNlUmVjdC54KCk7CisgICAgaW50IHkgPSBzb3VyY2VSZWN0LnkoKTsK
KyAgICBpbnQgd2lkdGggPSBzb3VyY2VSZWN0LndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IHNv
dXJjZVJlY3QuaGVpZ2h0KCk7CisKKyAgICBnbFB1c2hBdHRyaWIoR0xfQ09MT1JfQlVGRkVSX0JJ
VCk7CisKKyAgICBHTGludCBwcmV2aW91c0ZCTzsKKyAgICBnbEdldEludGVnZXJ2KEdMX0ZSQU1F
QlVGRkVSX0JJTkRJTkcsICZwcmV2aW91c0ZCTyk7CisKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihH
TF9SRUFEX0ZSQU1FQlVGRkVSLCBtX2Zib0lkKTsKKworICAgIGdsQmluZFRleHR1cmUoR0xfVEVY
VFVSRV8yRCwgdGV4dHVyZSk7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9SRUFEX0ZS
QU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgdGV4dHVyZSwg
MCk7CisKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9EUkFXX0ZSQU1FQlVGRkVSLCAwKTsKKwor
ICAgIGdsQmxpdEZyYW1lYnVmZmVyKHgsIHksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CisKKyAgICBnbEZyYW1lYnVm
ZmVyVGV4dHVyZTJEKEdMX1JFQURfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBH
TF9URVhUVVJFXzJELCAwLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDAp
OworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBwcmV2aW91c0ZCTyk7CisK
KyAgICBnbFBvcEF0dHJpYigpOworfQorCit2b2lkIEdMTmF0aXZlU3VyZmFjZTo6dXBkYXRlQ29u
dGVudHModWludDMyX3QgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3Qg
R0x1aW50IGJpbmRGYm9JZCkKK3sKKyAgICBtX1Jlc3RvcmVOZWVkZWQgPSBmYWxzZTsKKworICAg
IGlmICghbV9mYm9JZCkKKyAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvSWQpOwor
CisgICAgaW50IHggPSBzb3VyY2VSZWN0LngoKTsKKyAgICBpbnQgeSA9IHNvdXJjZVJlY3QueSgp
OworICAgIGludCB3aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0g
c291cmNlUmVjdC5oZWlnaHQoKTsKKworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX1JFQURfRlJB
TUVCVUZGRVIsIG1fZmJvSWQpOworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4
dHVyZSk7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9SRUFEX0ZSQU1FQlVGRkVSLCBH
TF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgdGV4dHVyZSwgMCk7CisgICAgZ2xC
aW5kRnJhbWVidWZmZXIoR0xfRFJBV19GUkFNRUJVRkZFUiwgMCk7CisgICAgZ2xCbGl0RnJhbWVi
dWZmZXIoeCwgeSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgR0xfQ09MT1Jf
QlVGRkVSX0JJVCwgR0xfTElORUFSKTsKKyAgICBzd2FwQnVmZmVycygpOworICAgIGdsRnJhbWVi
dWZmZXJUZXh0dXJlMkQoR0xfUkVBRF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAs
IEdMX1RFWFRVUkVfMkQsIDAsIDApOworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
MCk7CisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGJpbmRGYm9JZCk7Cit9
CisKK3ZvaWQgR0xOYXRpdmVTdXJmYWNlOjpzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JiBuZXdS
ZWN0KQoreworICAgIG1fcmVjdCA9IG5ld1JlY3Q7Cit9CisKK3ZvaWQgR0xOYXRpdmVTdXJmYWNl
OjpkZXN0cm95KCkKK3sKKyAgICBtX3JlY3QgPSBJbnRSZWN0KCk7CisKKyAgICBpZiAobV9mYm9J
ZCkKKyAgICAgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvSWQpOworCisgICAgbV9m
Ym9JZCA9IDA7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xOYXRpdmVTdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xOYXRpdmVTdXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZDc0NTExZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HTE5hdGl2ZVN1cmZhY2UuaApAQCAtMCwwICsxLDkx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdMTmF0aXZlU3VyZmFjZV9oCisjZGVm
aW5lIEdMTmF0aXZlU3VyZmFjZV9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisKKyNpbmNsdWRlICJHTFhEZWZzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlVG9rZW4u
aCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorCisvLyBFbmNhcHN1bGF0ZXMgYSBzdXJmYWNlIHRoYXQgY2FuIGJlIHJlbmRlcmVkIHRv
IHdpdGggR0wsIGhpZGluZyBwbGF0Zm9ybQorLy8gc3BlY2lmaWMgbWFuYWdlbWVudC4KK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR0xOYXRpdmVTdXJmYWNlIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShHTE5hdGl2ZVN1cmZhY2UpOworcHVibGljOgorCisgICAgLy8gQ3JlYXRlIGEg
R0wgc3VyZmFjZSB1c2VkIGZvciBvZmZzY3JlZW4gcmVuZGVyaW5nLgorICAgIHN0YXRpYyBQYXNz
T3duUHRyPEdMTmF0aXZlU3VyZmFjZT4gY3JlYXRlT2Zmc2NyZWVuU3VyZmFjZSgpOworCisgICAg
Ly8gQ3JlYXRlIGEgR0wgc3VyZmFjZSB1c2VkIGZvciBvZmZzcmVlbiByZW5kZXJpbmcuIFRoZSBy
ZXN1bHRzIGNhbiBiZSB0cmFuc3BvcnRlZAorICAgIC8vIHRvIHRoZSBVSSBwcm9jZXNzIGZvciBk
aXNwbGF5LgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEdMTmF0aXZlU3VyZmFjZT4gY3JlYXRlVHJh
bnNwb3J0U3VyZmFjZSgpOworCisgICAgdmlydHVhbCB+R0xOYXRpdmVTdXJmYWNlKCk7CisKKyAg
ICBjb25zdCBJbnRSZWN0JiBnZW9tZXRyeSgpIGNvbnN0OworCisgICAgLy8gR2V0IHRoZSB1bmRl
cmx5aW5nIHBsYXRmb3JtIHNwZWNpZmljIHN1cmZhY2UgaGFuZGxlLgorICAgIEdyYXBoaWNzU3Vy
ZmFjZVRva2VuIGhhbmRsZSgpIGNvbnN0OworCisgICAgcGxhdGZvcm1EaXNwbGF5IHNoYXJlZERp
c3BsYXkoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBzd2FwQnVmZmVycygpOworCisgICAg
dmlydHVhbCB2b2lkIGNvcHlUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QpOworCisgICAgLy8gQ29udmVuaWVuY2UgRnVuY3Rpb24gdG8gdXBkYXRlIHN1
cmZhY2UgYmFja2J1ZmZlciB3aXRoIHRleHR1cmUgY29udGVudHMgYW5kIHJlc3RvcmUgY3VycmVu
dCBGQk8uCisgICAgLy8gRnVuY3Rpb24gZG9lcyB0aGUgZm9sbG93aW5nKGluIG9yZGVyKToKKyAg
ICAvLyBhKUJsaXRzIHRleHR1cmUgY29udGVudHMgdG8gYmFjayBidWZmZXIuCisgICAgLy8gYilD
YWxscyBTd2FwIEJ1ZmZlcnMuCisgICAgLy8gYylTZXRzIGN1cnJlbnQgRkJPIGFzIGJpbmRGYm9J
ZC4KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHModWludDMyX3QgdGV4dHVyZSwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgR0x1aW50IGJpbmRGYm9JZCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCk7CisKKyAgICB2
aXJ0dWFsIFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBzdXJmYWNlQ29uZmlnKCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgZGVzdHJveSgpOworCitwcm90ZWN0ZWQ6CisgICAgR0xOYXRpdmVTdXJmYWNlKCk7
CisgICAgYm9vbCBtX1Jlc3RvcmVOZWVkZWQ7CisgICAgSW50UmVjdCBtX3JlY3Q7CisgICAgR0x1
aW50IG1fZmJvSWQ7CisgICAgcGxhdGZvcm1EaXNwbGF5IG1fc2hhcmVkRGlzcGxheTsKKyAgICBQ
bGF0Zm9ybU5hdGl2ZVN1cmZhY2UgbV9kcmF3YWJsZTsKKworfTsKKworfQorCisjZW5kaWYKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwv
R0xYRGVmcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dMWERlZnMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDBhMDcyCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dMWERlZnMuaApA
QCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0
aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdMWERlZnNfaAor
I2RlZmluZSBHTFhEZWZzX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwor
I2lmIFVTRShPUEVOR0xfRVNfMikKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xFUy5oIgor
I2Vsc2UKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKKyNlbmRpZgorCisjaW5jbHVk
ZSAiT3BlbkdMU2hpbXMuaCIKKworI2luY2x1ZGUgPEdML2dsLmg+CisjaW5jbHVkZSA8R0wvZ2xl
eHQuaD4KKyNpZiBIQVZFKEdMWCkKKyNpbmNsdWRlIDxHTC9nbHguaD4KKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyNpZiBIQVZFKEdMWCkKK3R5cGVkZWYgR0xYQ29udGV4dCBQbGF0
Zm9ybU5hdGl2ZUNvbnRleHQ7Cit0eXBlZGVmIERpc3BsYXkqIHBsYXRmb3JtRGlzcGxheTsKK3R5
cGVkZWYgR0xYRkJDb25maWcgUGxhdGZvcm1TdXJmYWNlQ29uZmlnOwordHlwZWRlZiBHTFhEcmF3
YWJsZSBQbGF0Zm9ybU5hdGl2ZVN1cmZhY2U7CisjZWxzZQordHlwZWRlZiB2b2lkKiBQbGF0Zm9y
bU5hdGl2ZUNvbnRleHQ7Cit0eXBlZGVmIHZvaWQqIHBsYXRmb3JtRGlzcGxheTsKK3R5cGVkZWYg
dm9pZCogUGxhdGZvcm1TdXJmYWNlQ29uZmlnOwordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybU5hdGl2
ZVN1cmZhY2U7CisjZW5kaWYKKworfQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4
dDNERWZsLmNwcAppbmRleCBlZjFlMzE1Li5hZGMwMGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVm
bC5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5n
IEVsZWN0cm9uaWNzCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLgog
CiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNyw3ICsyOCw2IEBACiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKICNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29u
dGV4dENhaXJvLmgiCi0jaW5jbHVkZSA8R0wvZ2x4Lmg+CiAKICNpZiBVU0UoT1BFTkdMX0VTXzIp
CiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMRVMuaCIKQEAgLTM5LDYgKzM5LDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBI
b3N0V2luZG93KiBob3N0V2luZG93LCBSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKIHsKKyAgICBp
ZiAocmVuZGVyU3R5bGUgPT0gUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCisgICAgICAgIHJl
dHVybiAwOworCiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRS
ZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCByZW5kZXJTdHlsZSkp
OwogICAgIHJldHVybiBjb250ZXh0LT5tX3ByaXZhdGUgPyBjb250ZXh0LnJlbGVhc2UoKSA6IDA7
CiB9CkBAIC02NywyOSArNzAsMTIgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4
dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICAsIG1f
bXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQogICAgICwgbV9wcml2YXRlKGFkb3B0UHRyKG5ldyBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGUodGhpcywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUpKSkK
IHsKLSAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKLQotICAgIGlmICghbV9wcml2YXRlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZFNoaW1zID0gZmFsc2U7
Ci0gICAgc3RhdGljIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0gICAgaWYgKCFpbml0aWFsaXplZFNo
aW1zKSB7Ci0gICAgICAgIHN1Y2Nlc3MgPSBpbml0aWFsaXplT3BlbkdMU2hpbXMoKTsKLSAgICAg
ICAgaW5pdGlhbGl6ZWRTaGltcyA9IHRydWU7Ci0gICAgfQotICAgIGlmICghc3VjY2Vzcykgewor
ICAgIGlmICghbV9wcml2YXRlIHx8ICFtX3ByaXZhdGUtPm1fcGxhdGZvcm1Db250ZXh0KSB7CiAg
ICAgICAgIG1fcHJpdmF0ZSA9IG51bGxwdHI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBpZiAocmVuZGVyU3R5bGUgPT0gUmVuZGVyVG9DdXJyZW50R0xDb250ZXh0KSB7Ci0gICAgICAg
IC8vIEV2YXMgZG9lc24ndCBhbGxvdyBpbmNsdWRpbmcgZ2wgaGVhZGVycyBhbmQgRXZhc19HTCBo
ZWFkZXJzIGF0IHRoZSBzYW1lIHRpbWUsCi0gICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gcXVlcnkg
dGhlIGN1cnJlbnQgZ2wgY29udGV4dC9zdXJmYWNlIGhlcmUgaW5zdGVhZCBvZiBpbiBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUuCi0gICAgICAgIHZvaWQqIGN1cnJlbnRDb250ZXh0ID0gKHZvaWQq
KWdsWEdldEN1cnJlbnRDb250ZXh0KCk7Ci0gICAgICAgIHZvaWQqIGN1cnJlbnRTdXJmYWNlID0g
KHZvaWQqKWdsWEdldEN1cnJlbnREcmF3YWJsZSgpOwotICAgICAgICBtX3ByaXZhdGUtPnNldEN1
cnJlbnRHTENvbnRleHQoY3VycmVudENvbnRleHQsIGN1cnJlbnRTdXJmYWNlKTsKLSAgICB9Cisg
ICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CiAKICAgICBpZiAocmVuZGVyU3R5bGUgPT0gUmVuZGVy
T2Zmc2NyZWVuKSB7CiAgICAgICAgIC8vIENyZWF0ZSBidWZmZXJzIGZvciB0aGUgY2FudmFzIEZC
Ty4KQEAgLTE0NywxNCArMTMzLDE5IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRl
eHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpCiAgICAgZ2xF
bmFibGUoR0xfUE9JTlRfU1BSSVRFKTsKICAgICBnbEVuYWJsZShHTF9WRVJURVhfUFJPR1JBTV9Q
T0lOVF9TSVpFKTsKICNlbmRpZgorICAgIGdsQ2xlYXJDb2xvcigwLjAsIDAuMCwgMC4wLCAwLjAp
OwogfQogCiBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKIHsKLSAgICBp
ZiAobV9yZW5kZXJTdHlsZSA9PSBSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQgfHwgIW1fcHJpdmF0
ZSkKKyAgICBpZiAoIW1fcHJpdmF0ZSB8fCAhbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9mYm8pIHsK
KyAgICAgICAgbV9wcml2YXRlLT5mcmVlUmVzb3VyY2VzKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwogCiAgICAgaWYgKG1f
YXR0cnMuYW50aWFsaWFzKSB7CkBAIC0xNjUsNyArMTU2LDYgQEAgR3JhcGhpY3NDb250ZXh0M0Q6
On5HcmFwaGljc0NvbnRleHQzRCgpCiAKICAgICAgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwg
Jm1fbXVsdGlzYW1wbGVGQk8pOwogICAgIH0gZWxzZSBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1f
YXR0cnMuZGVwdGgpIHsKLQogI2lmIFVTRShPUEVOR0xfRVNfMikKICAgICAgICAgaWYgKG1fYXR0
cnMuZGVwdGgpCiAgICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhC
dWZmZXIpOwpAQCAtMTc1LDcgKzE2NSw5IEBAIEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3ND
b250ZXh0M0QoKQogI2VuZGlmCiAgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9k
ZXB0aFN0ZW5jaWxCdWZmZXIpOwogICAgIH0KKwogICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEs
ICZtX2Zibyk7CisgICAgbV9wcml2YXRlLT5mcmVlUmVzb3VyY2VzKCk7CiB9CiAKIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0M0QoKQpAQCAtMTg2LDYgKzE3OCw3IEBAIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3Jh
cGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKQogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKIFBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dDNEOjpw
bGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKKwogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAg
ICByZXR1cm4gbV9wcml2YXRlLmdldCgpOwogI2Vsc2UKQEAgLTE5NywxMiArMTkwLDYgQEAgUGxh
dGZvcm1MYXllciogR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogCiBi
b29sIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQoKQogewotICAgIGlmICgh
bV9wcml2YXRlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9yZW5kZXJTdHls
ZSA9PSBSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCiAg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiB9CiAKQEAgLTIxNSw5
ICsyMDIsOSBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxpYW50KCkgY29u
c3QKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzZXRDb250ZXh0TG9zdENh
bGxiYWNrKFBhc3NPd25QdHI8Q29udGV4dExvc3RDYWxsYmFjaz4pCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpzZXRDb250ZXh0TG9zdENhbGxiYWNrKFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0
M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2s+IGNhbGxiYWNrKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgbV9wcml2YXRlLT5zZXRDb250ZXh0TG9zdENhbGxiYWNrKGNhbGxiYWNrKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2soUGFzc093
blB0cjxFcnJvck1lc3NhZ2VDYWxsYmFjaz4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUu
Y3BwCmluZGV4IDYyZDBhNmUuLjYxM2ZjMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZh
dGUuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3Vu
ZyBFbGVjdHJvbmljcworICAgIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4K
IAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTksMTU5ICsyMCwxMDcgQEAKIAogI2luY2x1ZGUgImNv
bmZpZy5oIgogCi0jaWYgVVNFKDNEX0dSQVBISUNTKSB8fCBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAKKyNpZiBVU0Uo
M0RfR1JBUEhJQ1MpIHx8IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKICNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5j
bHVkZSA8RWNvcmVfRXZhcy5oPgotI2luY2x1ZGUgPEV2YXNfR0wuaD4KICNpbmNsdWRlIDx3dGYv
T3duQXJyYXlQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKKyNpZiBVU0Uo
T1BFTkdMX0VTXzIpCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wy
ZXh0Lmg+CisjZWxzZQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjZW5kaWYKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgSG9zdFdpbmRvdyogaG9zdFdp
bmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogICAgIDog
bV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2hvc3RXaW5kb3coaG9zdFdpbmRvdykKLSAgICAs
IG1fZXZhc0dMKDApCi0gICAgLCBtX2V2YXNHTENvbnRleHQoMCkKLSAgICAsIG1fZXZhc0dMU3Vy
ZmFjZSgwKQotICAgICwgbV9nbENvbnRleHQoMCkKLSAgICAsIG1fZ2xTdXJmYWNlKDApCi0gICAg
LCBtX2FwaSgwKQotICAgICwgbV9yZW5kZXJTdHlsZShyZW5kZXJTdHlsZSkKKyAgICAsIG1fUGVu
ZGluZ1N1cmZhY2VSZXNpemUoZmFsc2UpCiB7Ci0gICAgaWYgKHJlbmRlclN0eWxlID09IEdyYXBo
aWNzQ29udGV4dDNEOjpSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQpCi0gICAgICAgIHJldHVybjsK
LQogICAgIGlmIChtX2hvc3RXaW5kb3cgJiYgbV9ob3N0V2luZG93LT5wbGF0Zm9ybVBhZ2VDbGll
bnQoKSkgewogICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgY29kZSBwYXRoIGZvciBX
ZWJLaXQxLgogICAgICAgICAvLyBHZXQgRXZhcyBvYmplY3QgZnJvbSBwbGF0Zm9ybVBhZ2VDbGll
bnQgYW5kIHNldCBFdmFzR0wgcmVsYXRlZCBtZW1iZXJzLgogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgLy8gRm9yIFdlYktpdDIsIHdlIG5lZWQgdG8gY3JlYXRlIGEgZHVtbXkgZWNvcmVF
dmFzIG9iamVjdCBmb3IgdGhlIFdlYlByb2Nlc3MgaW4gb3JkZXIgdG8gdXNlIEV2YXNHTCBBUElz
LgotI2lmZGVmIEhBVkVfRUNPUkVfWAotICAgIGVjb3JlX2V2YXNfaW5pdCgpOwotICAgIG1fZWNv
cmVFdmFzID0gYWRvcHRQdHIoZWNvcmVfZXZhc19nbF94MTFfbmV3KDAsIDAsIDAsIDAsIDEsIDEp
KTsKLSAgICBpZiAoIW1fZWNvcmVFdmFzKQotICAgICAgICByZXR1cm47Ci0jZWxzZQotICAgIHJl
dHVybjsKLSNlbmRpZgorICAgIG1fcGxhdGZvcm1Db250ZXh0ID0gR0xOYXRpdmVDb250ZXh0Ojpj
cmVhdGVDb250ZXh0KHJlbmRlclN0eWxlKTsKIAotICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFz
X2dldChtX2Vjb3JlRXZhcy5nZXQoKSk7Ci0gICAgaWYgKCFldmFzKQorICAgIGlmICAoIW1fcGxh
dGZvcm1Db250ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBDcmVhdGUgYSBuZXcgRXZh
c19HTCBvYmplY3QgZm9yIGdsIHJlbmRlcmluZyBvbiBlZmwuCi0gICAgbV9ldmFzR0wgPSBldmFz
X2dsX25ldyhldmFzKTsKLSAgICBpZiAoIW1fZXZhc0dMKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBHZXQgdGhlIEFQSSBmb3IgcmVuZGVyaW5nIHVzaW5nIE9wZW5HTC4KLSAgICAvLyBUaGlz
IHJldHVybnMgYSBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyBhbGwgdGhlIE9wZW5HTCBmdW5jdGlv
bnMgd2UgY2FuIHVzZSB0byByZW5kZXIgaW4gRXZhcwotICAgIG1fYXBpID0gZXZhc19nbF9hcGlf
Z2V0KG1fZXZhc0dMKTsKLSAgICBpZiAoIW1fYXBpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBDcmVhdGUgYSBjb250ZXh0Ci0gICAgbV9ldmFzR0xDb250ZXh0ID0gZXZhc19nbF9jb250ZXh0
X2NyZWF0ZShtX2V2YXNHTCwgMCk7Ci0gICAgaWYgKCFtX2V2YXNHTENvbnRleHQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIENyZWF0ZSBhIHN1cmZhY2UKLSAgICBpZiAoIWNyZWF0ZVN1cmZh
Y2UoMCwgcmVuZGVyU3R5bGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9I
b3N0V2luZG93KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0KKyAgICBpZiAocmVuZGVyU3R5bGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlck9mZnNj
cmVlbikgewogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIEludFNpemUgc3VyZmFjZVNp
emUobV9jb250ZXh0LT5tX2N1cnJlbnRXaWR0aCwgbV9jb250ZXh0LT5tX2N1cnJlbnRIZWlnaHQp
OwotICAgIG1fc3VyZmFjZUZsYWdzID0gR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1RleHR1cmVU
YXJnZXQgfCBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzU2hhcmluZzsKLSAgICBpZiAoIXN1cmZh
Y2VTaXplLmlzRW1wdHkoKSkKLSAgICAgICAgbV9ncmFwaGljc1N1cmZhY2UgPSBHcmFwaGljc1N1
cmZhY2U6OmNyZWF0ZShzdXJmYWNlU2l6ZSwgbV9zdXJmYWNlRmxhZ3MpOworICAgICAgICBtX3Bs
YXRmb3JtU3VyZmFjZSA9IEdMTmF0aXZlU3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZSgp
OworI2Vsc2UKKyAgICAgICAgbV9wbGF0Zm9ybVN1cmZhY2UgPSBHTE5hdGl2ZVN1cmZhY2U6OmNy
ZWF0ZU9mZlNjcmVlblN1cmZhY2UoKTsKICNlbmRpZgorICAgICAgICBpZiAoIW1fcGxhdGZvcm1T
dXJmYWNlKSB7CisgICAgICAgICAgICBtX3BsYXRmb3JtQ29udGV4dCA9IG51bGxwdHI7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1fcGxhdGZvcm1Db250
ZXh0LT5pbml0aWFsaXplKG1fcGxhdGZvcm1TdXJmYWNlLmdldCgpKSB8fCAhbV9wbGF0Zm9ybUNv
bnRleHQtPm1ha2VDdXJyZW50KG1fcGxhdGZvcm1TdXJmYWNlLmdldCgpKSkgeworICAgICAgICAg
ICAgZnJlZVJlc291cmNlcygpOworICAgICAgICAgICAgbV9wbGF0Zm9ybUNvbnRleHQgPSBudWxs
cHRyOworICAgICAgICAgICAgbV9wbGF0Zm9ybVN1cmZhY2UgPSBudWxscHRyOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIG1fc3VyZmFjZUhhbmRsZSA9IG1fcGxhdGZvcm1TdXJmYWNlLT5o
YW5kbGUoKTsKKyAgICB9CiB9CiAKIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6fkdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZSgpCiB7Ci0gICAgaWYgKCFtX2V2YXNHTCkKLSAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKG1fZXZhc0dMU3VyZmFjZSkKLSAgICAgICAgZXZhc19nbF9zdXJmYWNlX2Rl
c3Ryb3kobV9ldmFzR0wsIG1fZXZhc0dMU3VyZmFjZSk7Cit9CiAKLSAgICBpZiAobV9ldmFzR0xD
b250ZXh0KQotICAgICAgICBldmFzX2dsX2NvbnRleHRfZGVzdHJveShtX2V2YXNHTCwgbV9ldmFz
R0xDb250ZXh0KTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpmcmVlUmVzb3VyY2Vz
KCkKK3sKKyAgICAvLyBSZWxlYXNlIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kIGRyYXdhYmxlIG9u
bHkgYWZ0ZXIgZGVzdHJveWluZyBhbnkgYXNzb2NpYXRlZCBnbCByZXNvdXJjZXMuCisgICAgaWYg
KG1fcGxhdGZvcm1Db250ZXh0KQorICAgICAgICBtX3BsYXRmb3JtQ29udGV4dC0+ZGVzdHJveSgp
OwogCi0gICAgZXZhc19nbF9mcmVlKG1fZXZhc0dMKTsKKyAgICBpZiAobV9wbGF0Zm9ybVN1cmZh
Y2UpCisgICAgICAgIG1fcGxhdGZvcm1TdXJmYWNlLT5kZXN0cm95KCk7CiAKLSNpZiBVU0UoR1JB
UEhJQ1NfU1VSRkFDRSkKLSAgICBtX2dyYXBoaWNzU3VyZmFjZS5jbGVhcigpOwotI2VuZGlmCisg
ICAgaWYgKG1fcGxhdGZvcm1Db250ZXh0KQorICAgICAgICBtX3BsYXRmb3JtQ29udGV4dC0+cmVs
ZWFzZUN1cnJlbnQoKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0
ZVN1cmZhY2UoUGFnZUNsaWVudEVmbCogcGFnZUNsaWVudCwgYm9vbCByZW5kZXJEaXJlY3RseVRv
SG9zdFdpbmRvdykKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVTdXJmYWNl
KFBhZ2VDbGllbnRFZmwqLCBib29sKQogewotICAgIC8vIElmIFJlbmRlclN0eWxlIGlzIFJlbmRl
ck9mZnNjcmVlbiwgd2Ugd2lsbCBiZSByZW5kZXJpbmcgdG8gYSBGQk8sCi0gICAgLy8gc28gRXZh
c19HTF9TdXJmYWNlIGhhcyBhIDF4MSBkdW1teSBzdXJmYWNlLgotICAgIGludCB3aWR0aCA9IDE7
Ci0gICAgaW50IGhlaWdodCA9IDE7Ci0KLSAgICAvLyBCdXQsIGluIGNhc2Ugb2YgUmVuZGVyRGly
ZWN0bHlUb0hvc3RXaW5kb3csIHdlIGhhdmUgdG8gcmVuZGVyIHRvIGEgcmVuZGVyIHRhcmdldCBz
dXJmYWNlIHdpdGggdGhlIHNhbWUgc2l6ZSBhcyBvdXIgd2ViVmlldy4KLSAgICBpZiAocmVuZGVy
RGlyZWN0bHlUb0hvc3RXaW5kb3cpIHsKLSAgICAgICAgaWYgKCFwYWdlQ2xpZW50KQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAvLyBGSVhNRTogR2V0IGdlb21ldHJ5IG9mIHdl
YlZpZXcgYW5kIHNldCBzaXplIG9mIHRhcmdldCBzdXJmYWNlLgotICAgIH0KLQotICAgIEV2YXNf
R0xfQ29uZmlnIGNvbmZpZyA9IHsKLSAgICAgICAgRVZBU19HTF9SR0JBXzg4ODgsCi0gICAgICAg
IEVWQVNfR0xfREVQVEhfQklUXzgsCi0gICAgICAgIEVWQVNfR0xfU1RFTkNJTF9OT05FLCAvLyBG
SVhNRTogc2V0IEVWQVNfR0xfU1RFTkNJTF9CSVRfOCBhZnRlciBmaXhpbmcgRXZhc19HTCBidWcu
Ci0gICAgICAgIEVWQVNfR0xfT1BUSU9OU19OT05FLAotICAgICAgICBFVkFTX0dMX01VTFRJU0FN
UExFX05PTkUKLSAgICB9OwotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IEV2YXNfR0xfU3VyZmFjZSBv
YmplY3QKLSAgICBtX2V2YXNHTFN1cmZhY2UgPSBldmFzX2dsX3N1cmZhY2VfY3JlYXRlKG1fZXZh
c0dMLCAmY29uZmlnLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBpZiAoIW1fZXZhc0dMU3VyZmFjZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQotICAgIGlmIChyZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykgewotICAgICAgICBFdmFzX05h
dGl2ZV9TdXJmYWNlIG5hdGl2ZVN1cmZhY2U7Ci0gICAgICAgIC8vIEZpbGwgaW4gdGhlIE5hdGl2
ZSBTdXJmYWNlIGluZm9ybWF0aW9uIGZyb20gdGhlIGdpdmVuIEV2YXMgR0wgc3VyZmFjZS4KLSAg
ICAgICAgZXZhc19nbF9uYXRpdmVfc3VyZmFjZV9nZXQobV9ldmFzR0wsIG1fZXZhc0dMU3VyZmFj
ZSwgJm5hdGl2ZVN1cmZhY2UpOwotCi0gICAgICAgIC8vIEZJWE1FOiBDcmVhdGUgYW5kIHNwZWNp
YWxseSBzZXQgdXAgYSBldmFzX29iamVjdCB3aGljaCBhY3QgYXMgdGhlIHJlbmRlciB0YXJnZXIg
c3VyZmFjZS4KLSAgICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiB0cnVlOworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6c2V0Q3VycmVudEdMQ29udGV4dCh2b2lkKiBjb250ZXh0LCB2b2lkKiBzdXJmYWNl
KQordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnNldENvbnRleHRMb3N0Q2FsbGJhY2so
UGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjaz4gY2FsbEJh
Y2spCiB7Ci0gICAgbV9nbENvbnRleHQgPSBjb250ZXh0OwotICAgIG1fZ2xTdXJmYWNlID0gc3Vy
ZmFjZTsKKyAgICBtX2NvbnRleHRMb3N0Q2FsbGJhY2sgPSBjYWxsQmFjazsKIH0KIAogUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0M0QoKSBjb25zdAogewotICAgIGlmIChtX3JlbmRlclN0eWxlID09IEdyYXBo
aWNzQ29udGV4dDNEOjpSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQpCi0gICAgICAgIHJldHVybiBt
X2dsQ29udGV4dDsKLQotICAgIHJldHVybiBtX2V2YXNHTENvbnRleHQ7CisgICAgcmV0dXJuIG1f
cGxhdGZvcm1Db250ZXh0LT5oYW5kbGUoKTsKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6Om1ha2VDb250ZXh0Q3VycmVudCgpCiB7Ci0gICAgcmV0dXJuIGV2YXNfZ2xfbWFrZV9j
dXJyZW50KG1fZXZhc0dMLCBtX2V2YXNHTFN1cmZhY2UsIG1fZXZhc0dMQ29udGV4dCk7CisgICAg
Ym9vbCByZXR1cm5WYWx1ZSA9IG1fcGxhdGZvcm1Db250ZXh0LT5tYWtlQ3VycmVudChtX3BsYXRm
b3JtU3VyZmFjZS5nZXQoKSk7CisKKyAgICBpZiAobV9jb250ZXh0TG9zdENhbGxiYWNrICYmIG1f
cGxhdGZvcm1Db250ZXh0LT5pc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgcmV0dXJuVmFsdWUg
PSBmYWxzZTsKKyAgICAgICAgbV9jb250ZXh0TG9zdENhbGxiYWNrLT5vbkNvbnRleHRMb3N0KCk7
CisgICAgICAgIC8vIEZJWE1FOiByZXN0b3JlIGNvbnRleHQKKyAgICB9CisKKyAgICByZXR1cm4g
cmV0dXJuVmFsdWU7CiB9CiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCkBAIC0xODIsMjcg
KzEzMSwzNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRUb1RleHR1cmVN
YXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UgogI2VuZGlmCiAKICNpZiBVU0UoR1JB
UEhJQ1NfU1VSRkFDRSkKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFw
aGljc1N1cmZhY2VzKGNvbnN0IEludFNpemUmIHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NTdXJmYWNlcyhjb25zdCBJbnRTaXplJikKIHsKLSAgICBp
ZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIG1fZ3JhcGhpY3NTdXJmYWNlLmNsZWFyKCk7Ci0g
ICAgZWxzZQotICAgICAgICBtX2dyYXBoaWNzU3VyZmFjZSA9IEdyYXBoaWNzU3VyZmFjZTo6Y3Jl
YXRlKHNpemUsIG1fc3VyZmFjZUZsYWdzKTsKKyAgICBtX1BlbmRpbmdTdXJmYWNlUmVzaXplID0g
dHJ1ZTsKIH0KIAogdWludDMyX3QgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjb3B5VG9HcmFw
aGljc1N1cmZhY2UoKQogewotICAgIGlmICghbV9ncmFwaGljc1N1cmZhY2UpCisgICAgaWYgKCFt
X3BsYXRmb3JtQ29udGV4dCB8fCBtX3BsYXRmb3JtQ29udGV4dC0+aXNDb250ZXh0TG9zdCgpKQog
ICAgICAgICByZXR1cm4gMDsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fZ3Jh
cGhpY3NTdXJmYWNlLT5jb3B5RnJvbVRleHR1cmUobV9jb250ZXh0LT5tX3RleHR1cmUsIEludFJl
Y3QoMCwgMCwgbV9jb250ZXh0LT5tX2N1cnJlbnRXaWR0aCwgbV9jb250ZXh0LT5tX2N1cnJlbnRI
ZWlnaHQpKTsKLSAgICByZXR1cm4gbV9ncmFwaGljc1N1cmZhY2UtPnN3YXBCdWZmZXJzKCk7Cisg
ICAgaWYgKG1fUGVuZGluZ1N1cmZhY2VSZXNpemUpIHsKKyAgICAgICAgbV9QZW5kaW5nU3VyZmFj
ZVJlc2l6ZSA9IGZhbHNlOworICAgICAgICBtX3BsYXRmb3JtU3VyZmFjZS0+c2V0R2VvbWV0cnko
SW50UmVjdCgwLCAwLCBtX2NvbnRleHQtPm1fY3VycmVudFdpZHRoLCBtX2NvbnRleHQtPm1fY3Vy
cmVudEhlaWdodCkpOworICAgIH0KKworICAgIGlmIChtX2NvbnRleHQtPm1fYXR0cnMuYW50aWFs
aWFzKSB7CisgICAgICAgIG1fcGxhdGZvcm1Db250ZXh0LT5tYWtlQ3VycmVudChtX3BsYXRmb3Jt
U3VyZmFjZS5nZXQoKSk7CisjaWYgIVVTRShPUEVOR0xfRVNfMikKKyAgICAgICAgZ2xCaW5kRnJh
bWVidWZmZXIoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1fY29udGV4dC0+bV9tdWx0aXNhbXBs
ZUZCTyk7CisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhU
LCBtX2NvbnRleHQtPm1fZmJvKTsKKyAgICAgICAgZ2xCbGl0RnJhbWVidWZmZXIoMCwgMCwgbV9j
b250ZXh0LT5tX2N1cnJlbnRXaWR0aCwgbV9jb250ZXh0LT5tX2N1cnJlbnRIZWlnaHQsIDAsIDAs
IG1fY29udGV4dC0+bV9jdXJyZW50V2lkdGgsIG1fY29udGV4dC0+bV9jdXJyZW50SGVpZ2h0LCBH
TF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOworI2VuZGlmCisgICAgfQorCisgICAgbV9w
bGF0Zm9ybVN1cmZhY2UtPnVwZGF0ZUNvbnRlbnRzKG1fY29udGV4dC0+bV90ZXh0dXJlLCBJbnRS
ZWN0KDAsIDAsIG1fY29udGV4dC0+bV9jdXJyZW50V2lkdGgsIG1fY29udGV4dC0+bV9jdXJyZW50
SGVpZ2h0KSwgbV9jb250ZXh0LT5tX2JvdW5kRkJPKTsKKyAgICByZXR1cm4gMDsKIH0KIAogR3Jh
cGhpY3NTdXJmYWNlVG9rZW4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpncmFwaGljc1N1cmZh
Y2VUb2tlbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZ3JhcGhpY3NTdXJmYWNlLT5leHBvcnRU
b2tlbigpOworICAgIHJldHVybiBtX3N1cmZhY2VIYW5kbGU7CiB9CiAjZW5kaWYKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZS5oCmluZGV4IDFhZTQzNTEuLjU2N2ZmMzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFBy
aXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAo
QykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIEludGVs
IENvcnBvcmF0aW9uLgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw2ICsyMSw4IEBACiAjaWZu
ZGVmIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZV9oCiAjZGVmaW5lIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZV9oCiAKKyNpZiBVU0UoM0RfR1JBUEhJQ1MpIHx8IFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKwogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKICNpZiBVU0UoVEVY
VFVSRV9NQVBQRVJfR0wpCkBAIC0yNywxNCArMzAsMTEgQEAKICNlbmRpZgogCiAjaWYgVVNFKEdS
QVBISUNTX1NVUkZBQ0UpCi0jaW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlLmgiCisjaW5jbHVkZSAi
R0xOYXRpdmVTdXJmYWNlLmgiCiAjZW5kaWYKIAotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0wgICAg
ICAgICAgICAgICBFdmFzX0dMOwotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfU3VyZmFjZSAgICAg
ICBFdmFzX0dMX1N1cmZhY2U7Ci10eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9Db250ZXh0ICAgICAg
IEV2YXNfR0xfQ29udGV4dDsKLXR5cGVkZWYgc3RydWN0IF9FdmFzX0dMX0NvbmZpZyAgICAgICAg
RXZhc19HTF9Db25maWc7Ci10eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9BUEkgICAgICAgICAgIEV2
YXNfR0xfQVBJOworI2luY2x1ZGUgIkdMTmF0aXZlQ29udGV4dC5oIgorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CiAKIGNsYXNzIFBhZ2VDbGllbnRFZmw7CiAKQEAgLTQ4LDggKzQ4LDEyIEBA
IHB1YmxpYzoKICAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0Qq
LCBIb3N0V2luZG93KiwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlKTsKICAgICB+R3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlKCk7CiAKKyAgICBib29sIGNyZWF0ZVN1cmZhY2UoUGFnZUNs
aWVudEVmbCosIGJvb2wpOworCiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7CiAKKyAgICB2b2lkIHNldENvbnRleHRMb3N0Q2Fs
bGJhY2soUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjaz4g
IGNhbGxCYWNrKTsKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBQbGF0
Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAjZW5kaWYKQEAgLTYzLDI5ICs2Nywy
NSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgYm9vbCBjcmVhdGVTdXJmYWNlKFBhZ2VDbGllbnRFZmwqLCBib29sIHJlbmRlckRpcmVjdGx5
VG9FdmFzR0xPYmplY3QpOwotICAgIHZvaWQgc2V0Q3VycmVudEdMQ29udGV4dCh2b2lkKiwgdm9p
ZCopOworICAgIGJvb2wgY3JlYXRlU3VyZmFjZSgpOworICAgIHZvaWQgZnJlZVJlc291cmNlcygp
OwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwogICAg
IEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CiAgICAgSG9zdFdpbmRvdyogbV9ob3N0V2lu
ZG93OwogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIEdyYXBoaWNzU3VyZmFjZTo6Rmxh
Z3MgbV9zdXJmYWNlRmxhZ3M7Ci0gICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gbV9ncmFwaGlj
c1N1cmZhY2U7CisgICAgT3duUHRyPEdMTmF0aXZlQ29udGV4dD4gbV9wbGF0Zm9ybUNvbnRleHQ7
CisgICAgT3duUHRyPEdMTmF0aXZlU3VyZmFjZT4gbV9wbGF0Zm9ybVN1cmZhY2U7CisgICAgR3Jh
cGhpY3NTdXJmYWNlVG9rZW4gbV9zdXJmYWNlSGFuZGxlOwogI2VuZGlmCiAKKyAgICBPd25QdHI8
R3JhcGhpY3NDb250ZXh0M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2s+IG1fY29udGV4dExvc3RDYWxs
YmFjazsKICAgICBMaXN0SGFzaFNldDxHQzNEZW51bT4gbV9zeW50aGV0aWNFcnJvcnM7Ci0KLSAg
ICBPd25QdHI8RWNvcmVfRXZhcz4gbV9lY29yZUV2YXM7Ci0gICAgRXZhc19HTCogbV9ldmFzR0w7
Ci0gICAgRXZhc19HTF9Db250ZXh0KiBtX2V2YXNHTENvbnRleHQ7Ci0gICAgRXZhc19HTF9TdXJm
YWNlKiBtX2V2YXNHTFN1cmZhY2U7Ci0gICAgdm9pZCogbV9nbENvbnRleHQ7Ci0gICAgdm9pZCog
bV9nbFN1cmZhY2U7Ci0gICAgRXZhc19HTF9BUEkqIG1fYXBpOwotICAgIEdyYXBoaWNzQ29udGV4
dDNEOjpSZW5kZXJTdHlsZSBtX3JlbmRlclN0eWxlOworICAgIGJvb2wgbV9QZW5kaW5nU3VyZmFj
ZVJlc2l6ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEdyYXBo
aWNzTGF5ZXJFZmxfaAorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHRXcmFwcGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0
V3JhcHBlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUyY2Q3NAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2dseC9HTFhDb250ZXh0V3JhcHBlci5jcHAKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkdMWENvbnRleHRX
cmFwcGVyLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEhBVkUoR0xY
KQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgR0xYQ29udGV4dCAoKkdMWENSRUFU
RUNPTlRFWFRBVFRSSUJTQVJCUFJPQykoRGlzcGxheSosIEdMWEZCQ29uZmlnLCBHTFhDb250ZXh0
LCBCb29sLCBjb25zdCBpbnQqKTsKK3N0YXRpYyBHTFhDUkVBVEVDT05URVhUQVRUUklCU0FSQlBS
T0MgZ2xYQ3JlYXRlQ29udGV4dEF0dHJpYnNBUkIgPSAwOworCitzdGF0aWMgaW50IEF0dHJpYnNb
XSA9IHsKKyAgICBHTFhfQ09OVEVYVF9SRVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1lfQVJCLAor
ICAgIEdMWF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfQVJCLAorICAgIDAgfTsKKworc3RhdGljIHZv
aWQgaW5pdGlhbGl6ZUFSQkV4dGVuc2lvbnMoKQoreworICAgIHN0YXRpYyBib29sIGluaXRpYWxp
emVkID0gZmFsc2U7CisKKyAgICBpZiAoaW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICBnbFhDcmVhdGVDb250ZXh0QXR0cmlic0FSQiA9
IHJlaW50ZXJwcmV0X2Nhc3Q8R0xYQ1JFQVRFQ09OVEVYVEFUVFJJQlNBUkJQUk9DPihnbFhHZXRQ
cm9jQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0IEdMdWJ5dGUqPigiZ2xYQ3JlYXRlQ29u
dGV4dEF0dHJpYnNBUkIiKSkpOworfQorCisvLyBHTFhDb250ZXh0V3JhcHBlcgorCitHTFhDb250
ZXh0V3JhcHBlcjo6R0xYQ29udGV4dFdyYXBwZXIoKQorICAgIDogR0xOYXRpdmVDb250ZXh0KCkK
KyAgICAsIG1fZGlzcGxheSgwKQoreworCit9CisKK2Jvb2wgR0xYQ29udGV4dFdyYXBwZXI6Omlu
aXRpYWxpemUoR0xOYXRpdmVTdXJmYWNlKiBzdXJmYWNlKQoreworICAgIGlmICghc3VyZmFjZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9kaXNwbGF5ID0gc3VyZmFjZS0+c2hhcmVk
RGlzcGxheSgpOworCisgICAgaWYgKCFtX2Rpc3BsYXkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIEdMWEZCQ29uZmlnIGNvbmZpZyA9IHN1cmZhY2UtPnN1cmZhY2VDb25maWcoKTsKKwor
ICAgIGlmIChjb25maWcpIHsKKyAgICAgICAgaW5pdGlhbGl6ZUFSQkV4dGVuc2lvbnMoKTsKKwor
ICAgICAgICBpZiAoZ2xYQ3JlYXRlQ29udGV4dEF0dHJpYnNBUkIpCisgICAgICAgICAgICBtX2Nv
bnRleHRIYW5kbGUgPSBnbFhDcmVhdGVDb250ZXh0QXR0cmlic0FSQihtX2Rpc3BsYXksIGNvbmZp
ZywgMCwgdHJ1ZSwgQXR0cmlicyk7CisKKyAgICAgICAgaWYgKG1fY29udGV4dEhhbmRsZSkKKyAg
ICAgICAgICAgIG1fcmVzZXRMb3N0Q29udGV4dCA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1fY29udGV4dEhhbmRsZSA9IGdsWENyZWF0ZU5ld0NvbnRleHQobV9kaXNwbGF5LCBj
b25maWcsIEdMWF9SR0JBX1RZUEUsIDAsIHRydWUpOworCisgICAgICAgIGlmIChtX2NvbnRleHRI
YW5kbGUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK0dMWENvbnRleHRXcmFwcGVyOjp+R0xYQ29udGV4dFdyYXBwZXIoKQoreworCit9
CisKK2Jvb2wgR0xYQ29udGV4dFdyYXBwZXI6OmlzQ3VycmVudENvbnRleHQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2NvbnRleHRIYW5kbGUgPT0gZ2xYR2V0Q3VycmVudENvbnRleHQoKTsKK30K
KworYm9vbCBHTFhDb250ZXh0V3JhcHBlcjo6cGxhdGZvcm1NYWtlQ3VycmVudChHTE5hdGl2ZVN1
cmZhY2UqIHN1cmZhY2UpCit7CisgICAgcmV0dXJuIGdsWE1ha2VDdXJyZW50KHN1cmZhY2UtPnNo
YXJlZERpc3BsYXkoKSwgc3VyZmFjZS0+aGFuZGxlKCkuZnJvbnRCdWZmZXJIYW5kbGUsIG1fY29u
dGV4dEhhbmRsZSk7Cit9CisKK3ZvaWQgR0xYQ29udGV4dFdyYXBwZXI6OnBsYXRmb3JtUmVsZWFz
ZUN1cnJlbnQoKQoreworICAgIGdsWE1ha2VDdXJyZW50KG1fZGlzcGxheSwgMCwgMCk7Cit9CisK
K3ZvaWQgR0xYQ29udGV4dFdyYXBwZXI6OmZyZWVSZXNvdXJjZXMoKQoreworICAgIGlmIChtX2Nv
bnRleHRIYW5kbGUpCisgICAgICAgIGdsWERlc3Ryb3lDb250ZXh0KG1fZGlzcGxheSwgbV9jb250
ZXh0SGFuZGxlKTsKKworICAgIG1fY29udGV4dEhhbmRsZSA9IDA7CisgICAgbV9kaXNwbGF5ID0g
MDsKK30KKwordm9pZCBHTFhDb250ZXh0V3JhcHBlcjo6ZGVzdHJveSgpCit7CisgICAgZnJlZVJl
c291cmNlcygpOworICAgIEdMTmF0aXZlQ29udGV4dDo6ZGVzdHJveSgpOworfQorCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L0dMWENvbnRleHRXcmFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dFdyYXBwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5iYmU1MWU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHRXcmFwcGVyLmgKQEAg
LTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHTFhDb250ZXh0V3Jh
cHBlcl9oCisjZGVmaW5lIEdMWENvbnRleHRXcmFwcGVyX2gKKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykgJiYgSEFWRShHTFgpCisKKyNpbmNsdWRlICJHTE5hdGl2ZUNvbnRleHQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHTFhDdXJyZW50Q29udGV4dFdyYXBw
ZXIgOiBwdWJsaWMgR0xOYXRpdmVDb250ZXh0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShH
TFhDdXJyZW50Q29udGV4dFdyYXBwZXIpOworcHVibGljOgorICAgIEdMWEN1cnJlbnRDb250ZXh0
V3JhcHBlcigpCisgICAgICAgIDogR0xOYXRpdmVDb250ZXh0KCkKKyAgICB7CisgICAgICAgIG1f
Y29udGV4dEhhbmRsZSA9IGdsWEdldEN1cnJlbnRDb250ZXh0KCk7CisgICAgfQorCisgICAgdmly
dHVhbCB+R0xYQ3VycmVudENvbnRleHRXcmFwcGVyKCkgeyB9Cit9OworCitjbGFzcyBHTFhDb250
ZXh0V3JhcHBlciA6IHB1YmxpYyBHTE5hdGl2ZUNvbnRleHQgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEdMWENvbnRleHRXcmFwcGVyKTsKK3B1YmxpYzoKKyAgICBHTFhDb250ZXh0V3JhcHBl
cigpOworICAgIHZpcnR1YWwgfkdMWENvbnRleHRXcmFwcGVyKCk7CisgICAgYm9vbCBpbml0aWFs
aXplKEdMTmF0aXZlU3VyZmFjZSopOworICAgIGJvb2wgcGxhdGZvcm1NYWtlQ3VycmVudChHTE5h
dGl2ZVN1cmZhY2UqKTsKKyAgICB2b2lkIHBsYXRmb3JtUmVsZWFzZUN1cnJlbnQoKTsKKyAgICB2
b2lkIGRlc3Ryb3koKTsKKyAgICBib29sIGlzQ3VycmVudENvbnRleHQoKSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICB2b2lkIGZyZWVSZXNvdXJjZXMoKTsKKyAgICBEaXNwbGF5KiBtX2Rpc3BsYXk7
Cit9OworCit9CisKKyNlbmRpZiAvLyBHTFhDVVJSRU5UQ09OVEVYV1JBUFBFUl9ICisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L0dMWFN1cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmU1OTk4MjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKQEAgLTAsMCArMSwyMTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkdMWFN1
cmZhY2UuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgSEFWRShHTFgp
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2hhcmVkUmVzb3VyY2VzKiBTaGFyZWRSZXNvdXJj
ZXM6Om1fc3RhdGljU2hhcmVkUmVzb3VyY2UgPSAwOworCitzdGF0aWMgY29uc3QgaW50IHBidWZm
ZXJBdHRyaWJ1dGVzW10gPSB7IEdMWF9QQlVGRkVSX1dJRFRILCAxLCBHTFhfUEJVRkZFUl9IRUlH
SFQsIDEsIDAgfTsKKworR0xYU3VyZmFjZTo6R0xYU3VyZmFjZSgpCisgICAgOiBHTE5hdGl2ZVN1
cmZhY2UoKQoreworICAgIG1fc2hhcmVkUmVzb3VyY2VzID0gU2hhcmVkUmVzb3VyY2VzOjpjcmVh
dGUoKTsKKyAgICBtX3NoYXJlZERpc3BsYXkgPSBtX3NoYXJlZFJlc291cmNlcy0+ZGlzcGxheSgp
OworfQorCitHTFhTdXJmYWNlOjp+R0xYU3VyZmFjZSgpCit7CisKK30KKworWFZpc3VhbEluZm8q
IEdMWFN1cmZhY2U6OnZpc3VhbEluZm8oKQoreworICAgIHJldHVybiBtX3NoYXJlZFJlc291cmNl
cy0+dmlzdWFsSW5mbygpOworfQorCitXaW5kb3cgR0xYU3VyZmFjZTo6eFdpbmRvdygpCit7Cisg
ICAgcmV0dXJuIG1fc2hhcmVkUmVzb3VyY2VzLT5nZXRYV2luZG93KCk7Cit9CisKK0dMWEZCQ29u
ZmlnIEdMWFN1cmZhY2U6OnBCdWZmZXJDb25maWcoKQoreworICAgIHJldHVybiBtX3NoYXJlZFJl
c291cmNlcy0+cEJ1ZmZlckNvbnRleHRDb25maWcoKTsKK30KKworR0xYRkJDb25maWcgR0xYU3Vy
ZmFjZTo6dHJhbnNwb3J0U3VyZmFjZUNvbmZpZygpCit7CisgICAgcmV0dXJuIG1fc2hhcmVkUmVz
b3VyY2VzLT5zdXJmYWNlQ29udGV4dENvbmZpZygpOworfQorCitib29sIEdMWFN1cmZhY2U6Omlz
WFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpCit7CisgICAgcmV0dXJuIG1fc2hhcmVkUmVzb3Vy
Y2VzLT5pc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKTsKK30KKworLy8gR0xYVHJhbnNwb3J0
U3VyZmFjZQorCitHTFhUcmFuc3BvcnRTdXJmYWNlOjpHTFhUcmFuc3BvcnRTdXJmYWNlKCkKKyAg
ICA6IEdMWFN1cmZhY2UoKQoreworICAgIGluaXRpYWxpemUoKTsKK30KKworR0xYVHJhbnNwb3J0
U3VyZmFjZTo6fkdMWFRyYW5zcG9ydFN1cmZhY2UoKQoreworCit9CisKK1BsYXRmb3JtU3VyZmFj
ZUNvbmZpZyBHTFhUcmFuc3BvcnRTdXJmYWNlOjpzdXJmYWNlQ29uZmlnKCkKK3sKKyAgICByZXR1
cm4gdHJhbnNwb3J0U3VyZmFjZUNvbmZpZygpOworfQorCit2b2lkIEdMWFRyYW5zcG9ydFN1cmZh
Y2U6OnN3YXBCdWZmZXJzKCkKK3sKKyAgICBpZiAobV9kcmF3YWJsZSkgeworICAgICAgICBpZiAo
bV9SZXN0b3JlTmVlZGVkKSB7CisgICAgICAgICAgICBHTGludCBvbGRGQk87CisgICAgICAgICAg
ICBnbEdldEludGVnZXJ2KEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcsICZvbGRGQk8pOworICAgICAg
ICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOworICAgICAgICAgICAg
Z2xYU3dhcEJ1ZmZlcnMoc2hhcmVkRGlzcGxheSgpLCBtX2RyYXdhYmxlKTsKKyAgICAgICAgICAg
IGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBvbGRGQk8pOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIGdsWFN3YXBCdWZmZXJzKHNoYXJlZERpc3BsYXkoKSwgbV9kcmF3YWJs
ZSk7CisgICAgfQorfQorCit2b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2U6OnNldEdlb21ldHJ5KGNv
bnN0IEludFJlY3QmIG5ld1JlY3QpCit7CisgICAgR0xOYXRpdmVTdXJmYWNlOjpzZXRHZW9tZXRy
eShuZXdSZWN0KTsKKyAgICBpbnQgd2lkdGggPSBuZXdSZWN0LndpZHRoKCk7CisgICAgaW50IGhl
aWdodCA9IG5ld1JlY3QuaGVpZ2h0KCk7CisgICAgWFJlc2l6ZVdpbmRvdyhzaGFyZWREaXNwbGF5
KCksIG1fZHJhd2FibGUsIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdMWFRyYW5zcG9ydFN1
cmZhY2U6OmluaXRpYWxpemUoKQoreworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBzaGFyZWREaXNw
bGF5KCk7CisgICAgR0xYRkJDb25maWcgY29uZmlnID0gdHJhbnNwb3J0U3VyZmFjZUNvbmZpZygp
OworCisgICAgaWYgKCFjb25maWcpCisgICAgICAgIHJldHVybjsKKworICAgIFhWaXN1YWxJbmZv
KiB2aXNJbmZvID0gIHZpc3VhbEluZm8oKTsKKworICAgIGlmICghdmlzSW5mbykKKyAgICAgICAg
cmV0dXJuOworCisgICAgQ29sb3JtYXAgY21hcCA9IFhDcmVhdGVDb2xvcm1hcChkaXNwbGF5LCB4
V2luZG93KCksIHZpc0luZm8tPnZpc3VhbCwgQWxsb2NOb25lKTsKKyAgICBYU2V0V2luZG93QXR0
cmlidXRlcyBhOworICAgIGEuYmFja2dyb3VuZF9waXhlbCA9IFdoaXRlUGl4ZWwoZGlzcGxheSwg
MCk7CisgICAgYS5ib3JkZXJfcGl4ZWwgPSBCbGFja1BpeGVsKGRpc3BsYXksIDApOworICAgIGEu
Y29sb3JtYXAgPSBjbWFwOworICAgIG1fZHJhd2FibGUgID0gWENyZWF0ZVdpbmRvdyhkaXNwbGF5
LCB4V2luZG93KCksIDAsIDAsIDEsIDEsIDAsIHZpc0luZm8tPmRlcHRoLCBJbnB1dE91dHB1dCwg
dmlzSW5mby0+dmlzdWFsLCBDV0JhY2tQaXhlbCB8IENXQm9yZGVyUGl4ZWwgfCBDV0NvbG9ybWFw
LCAmYSk7CisKKyAgICBpZiAoIW1fZHJhd2FibGUpCisgICAgICAgIHJldHVybjsKKworICAgIFhT
ZXRXaW5kb3dCYWNrZ3JvdW5kUGl4bWFwKGRpc3BsYXksIG1fZHJhd2FibGUsIDApOworICAgIFhD
b21wb3NpdGVSZWRpcmVjdFdpbmRvdyhkaXNwbGF5LCBtX2RyYXdhYmxlLCBDb21wb3NpdGVSZWRp
cmVjdE1hbnVhbCk7CisKKyAgICBpZiAoaXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkpCisg
ICAgICAgIFhNYXBXaW5kb3coZGlzcGxheSwgbV9kcmF3YWJsZSk7Cit9CisKK3ZvaWQgR0xYVHJh
bnNwb3J0U3VyZmFjZTo6ZGVzdHJveSgpCit7CisgICAgZnJlZVJlc291cmNlcygpOworICAgIEdM
TmF0aXZlU3VyZmFjZTo6ZGVzdHJveSgpOworfQorCit2b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2U6
OmZyZWVSZXNvdXJjZXMoKQoreworICAgIGlmICghbV9kcmF3YWJsZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgR0xOYXRpdmVTdXJmYWNlOjpkZXN0cm95KCk7CisgICAgRGlzcGxheSogZGlzcGxh
eSA9IHNoYXJlZERpc3BsYXkoKTsKKworICAgIGlmICghZGlzcGxheSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgWERlc3Ryb3lXaW5kb3coZGlzcGxheSwgbV9kcmF3YWJsZSk7CisgICAgbV9kcmF3
YWJsZSA9IDA7Cit9CisKKy8vIEdMWCBQQlVGRkVSIFNVUkZBQ0UKKworR0xYUEJ1ZmZlcjo6R0xY
UEJ1ZmZlcigpCisgICAgOkdMWFN1cmZhY2UoKQoreworICAgIGluaXRpYWxpemUoKTsKK30KKwor
R0xYUEJ1ZmZlcjo6fkdMWFBCdWZmZXIoKQoreworCit9CisKK3ZvaWQgR0xYUEJ1ZmZlcjo6aW5p
dGlhbGl6ZSgpCit7CisgICAgRGlzcGxheSogZGlzcGxheSA9IHNoYXJlZERpc3BsYXkoKTsKKyAg
ICBHTFhGQkNvbmZpZyBjb25maWcgPSBwQnVmZmVyQ29uZmlnKCk7CisKKyAgICBpZiAoIWNvbmZp
ZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kcmF3YWJsZSA9IGdsWENyZWF0ZVBidWZmZXIo
ZGlzcGxheSwgY29uZmlnLCBwYnVmZmVyQXR0cmlidXRlcyk7Cit9CisKK1BsYXRmb3JtU3VyZmFj
ZUNvbmZpZyBHTFhQQnVmZmVyOjpzdXJmYWNlQ29uZmlnKCkKK3sKKyAgICByZXR1cm4gcEJ1ZmZl
ckNvbmZpZygpOworfQorCit2b2lkIEdMWFBCdWZmZXI6OmRlc3Ryb3koKQoreworICAgIGZyZWVS
ZXNvdXJjZXMoKTsKK30KKwordm9pZCBHTFhQQnVmZmVyOjpmcmVlUmVzb3VyY2VzKCkKK3sKKyAg
ICBpZiAoIW1fZHJhd2FibGUpCisgICAgICAgIHJldHVybjsKKworICAgIEdMTmF0aXZlU3VyZmFj
ZTo6ZGVzdHJveSgpOworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBzaGFyZWREaXNwbGF5KCk7CisK
KyAgICBpZiAoIWRpc3BsYXkpCisgICAgICAgIHJldHVybjsKKworICAgIGdsWERlc3Ryb3lQYnVm
ZmVyKGRpc3BsYXksIG1fZHJhd2FibGUpOworICAgIG1fZHJhd2FibGUgPSAwOworfQorCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNTNkYmFjNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmgKQEAgLTAsMCArMSwyOTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR0xYU3VyZmFjZV9oCisjZGVmaW5lIEdMWFN1cmZh
Y2VfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBIQVZFKEdMWCkKKwor
I2luY2x1ZGUgIkdMTmF0aXZlU3VyZmFjZS5oIgorCisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMv
WGNvbXBvc2l0ZS5oPgorI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hyZW5kZXIuaD4KKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
bG9uZyBYMTFSZWRpcmVjdCA9IDFMIDw8IDk7CisKK2NsYXNzIFNoYXJlZFJlc291cmNlcyA6IHB1
YmxpYyBXVEY6OlJlZkNvdW50ZWRCYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTaGFy
ZWRSZXNvdXJjZXMpOworcHVibGljOgorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkUmVz
b3VyY2VzPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3N0YXRpY1NoYXJlZFJlc291
cmNlKQorICAgICAgICAgICAgbV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9ICBuZXcgU2hhcmVkUmVz
b3VyY2VzKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fc3RhdGljU2hhcmVkUmVzb3Vy
Y2UtPnJlZigpOworCisgICAgICAgIHJldHVybiBhZG9wdFJlZihtX3N0YXRpY1NoYXJlZFJlc291
cmNlKTsKKyAgICB9CisKKyAgICB2b2lkIGRlcmVmKCkKKyAgICB7CisgICAgICAgIGlmIChkZXJl
ZkJhc2UoKSkgeworICAgICAgICAgICAgbV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9IDA7CisgICAg
ICAgICAgICBkZWxldGUgdGhpczsKKyAgICAgICAgfQorICAgIH0KKworICAgIFdpbmRvdyBnZXRY
V2luZG93KCkKKyAgICB7CisgICAgICAgIGlmICghbV93aW5kb3cpIHsKKyAgICAgICAgICAgIERp
c3BsYXkqIGRweSA9IGRpc3BsYXkoKTsKKyAgICAgICAgICAgIG1fd2luZG93ID0gWENyZWF0ZVNp
bXBsZVdpbmRvdyhkcHksIFhEZWZhdWx0Um9vdFdpbmRvdyhkcHkpLCAtMSwgLTEsIDEsIDEsIDAs
IEJsYWNrUGl4ZWwoZHB5LCAwKSwgV2hpdGVQaXhlbChkcHksIDApKTsKKyAgICAgICAgICAgIFhT
ZXRXaW5kb3dBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7CisgICAgICAgICAgICBhdHRyaWJ1dGVzLm92
ZXJyaWRlX3JlZGlyZWN0ID0gdHJ1ZTsKKyAgICAgICAgICAgIFhDaGFuZ2VXaW5kb3dBdHRyaWJ1
dGVzKGRweSwgbV93aW5kb3csIFgxMVJlZGlyZWN0LCAmYXR0cmlidXRlcyk7CisgICAgICAgICAg
ICAvLyBNYXAgd2luZG93IHRvIHRoZSBzY3JlZW4KKyAgICAgICAgICAgIFhNYXBXaW5kb3coZHB5
LCBtX3dpbmRvdyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV93aW5kb3c7CisgICAg
fQorCisgICAgRGlzcGxheSogZGlzcGxheSgpCisgICAgeworICAgICAgICBpZiAoIW1fZGlzcGxh
eSkKKyAgICAgICAgICAgIG1fZGlzcGxheSA9IFhPcGVuRGlzcGxheSgwKTsKKworICAgICAgICBy
ZXR1cm4gbV9kaXNwbGF5OworICAgIH0KKworICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvKCkK
KyAgICB7CisgICAgICAgIGlmICghbV9WaXN1YWxJbmZvKQorICAgICAgICAgICAgc3VyZmFjZUNv
bnRleHRDb25maWcoKTsKKworICAgICAgICByZXR1cm4gbV9WaXN1YWxJbmZvOworICAgIH0KKwor
ICAgIEdMWEZCQ29uZmlnIGNyZWF0ZUNvbmZpZyhjb25zdCBpbnQgYXR0cmlidXRlc1tdKQorICAg
IHsKKyAgICAgICAgaW50IG51bVJldHVybmVkOworICAgICAgICBtX1Zpc3VhbEluZm8gPSAwOwor
ICAgICAgICBHTFhGQkNvbmZpZyogdGVtcCA9IGdsWENob29zZUZCQ29uZmlnKGRpc3BsYXkoKSwg
RGVmYXVsdFNjcmVlbihkaXNwbGF5KCkpLCBhdHRyaWJ1dGVzLCAmbnVtUmV0dXJuZWQpOworCisg
ICAgICAgIGlmICghbnVtUmV0dXJuZWQpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAg
ICBHTFhGQkNvbmZpZyBzZWxlY3RlZENvbmZpZyA9IDA7CisgICAgICAgIGJvb2wgZm91bmQgPSBm
YWxzZTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVJldHVybmVkOyArK2kpIHsK
KyAgICAgICAgICAgIG1fVmlzdWFsSW5mbyA9IGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyhkaXNw
bGF5KCksIHRlbXBbaV0pOworCisgICAgICAgICAgICBpZiAoIW1fVmlzdWFsSW5mbykKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKG1fc3VwcG9ydHNYUmVuZGVy
RXh0ZW5zaW9uKSB7CisgICAgICAgICAgICAgICAgWFJlbmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9
IFhSZW5kZXJGaW5kVmlzdWFsRm9ybWF0KGRpc3BsYXkoKSwgbV9WaXN1YWxJbmZvLT52aXN1YWwp
OworICAgICAgICAgICAgICAgIGlmIChmb3JtYXQgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNr
ID4gMCkgeworICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvbmZpZyA9IHRlbXBbaV07Cisg
ICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChtX1Zpc3VhbElu
Zm8tPmRlcHRoID09IDMyKSB7CisgICAgICAgICAgICAgICAgc2VsZWN0ZWRDb25maWcgPSB0ZW1w
W2ldOworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIC8vIERpZG50IGZpbmQgYW55IHZpc3VhbCBzdXBwb3J0aW5nIGFscGhh
LCBzZWxlY3QgdGhlIGZpcnN0IGF2YWlsYWJsZSBjb25maWcuCisgICAgICAgIGlmICghZm91bmQp
IHsKKyAgICAgICAgICAgIHNlbGVjdGVkQ29uZmlnID0gdGVtcFswXTsKKyAgICAgICAgICAgIG1f
VmlzdWFsSW5mbyA9IGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyhtX2Rpc3BsYXksIHRlbXBbMF0p
OworICAgICAgICB9CisKKyAgICAgICAgWEZyZWUodGVtcCk7CisKKyAgICAgICAgcmV0dXJuIHNl
bGVjdGVkQ29uZmlnOworICAgIH0KKworICAgIEdMWEZCQ29uZmlnIHBCdWZmZXJDb250ZXh0Q29u
ZmlnKCkKKyAgICB7CisgICAgICAgIGlmICghbV9wYnVmZmVyZmJDb25maWcpIHsKKyAgICAgICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgYXR0cmlidXRlc1tdID0geworICAgICAgICAgICAgICAgIEdM
WF9MRVZFTCwgMCwKKyAgICAgICAgICAgICAgICBHTFhfRFJBV0FCTEVfVFlQRSwgR0xYX1BCVUZG
RVJfQklULAorICAgICAgICAgICAgICAgIEdMWF9SRU5ERVJfVFlQRSwgICBHTFhfUkdCQV9CSVQs
CisgICAgICAgICAgICAgICAgR0xYX1JFRF9TSVpFLCAgICAgIDEsCisgICAgICAgICAgICAgICAg
R0xYX0dSRUVOX1NJWkUsICAgIDEsCisgICAgICAgICAgICAgICAgR0xYX0JMVUVfU0laRSwgICAg
IDEsCisgICAgICAgICAgICAgICAgR0xYX0RPVUJMRUJVRkZFUiwgIEdMX0ZBTFNFLAorICAgICAg
ICAgICAgICAgIE5vbmUKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGludCBudW1SZXR1
cm5lZDsKKyAgICAgICAgICAgIEdMWEZCQ29uZmlnKiB0ZW1wID0gZ2xYQ2hvb3NlRkJDb25maWco
ZGlzcGxheSgpLCBEZWZhdWx0U2NyZWVuKGRpc3BsYXkoKSksIGF0dHJpYnV0ZXMsICZudW1SZXR1
cm5lZCk7CisgICAgICAgICAgICBpZiAobnVtUmV0dXJuZWQpCisgICAgICAgICAgICAgICAgbV9w
YnVmZmVyZmJDb25maWcgPSAgdGVtcFswXTsKKyAgICAgICAgICAgIFhGcmVlKHRlbXApOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1fcGJ1ZmZlcmZiQ29uZmlnOworICAgIH0KKworICAg
IEdMWEZCQ29uZmlnIHN1cmZhY2VDb250ZXh0Q29uZmlnKCkKKyAgICB7CisgICAgICAgIGlmICgh
bV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnKSB7CisgICAgICAgICAgICBzdGF0aWMgaW50IGF0dHJp
YnV0ZXNbXSA9IHsKKyAgICAgICAgICAgICAgICBHTFhfTEVWRUwsIDAsCisgICAgICAgICAgICAg
ICAgR0xYX0RSQVdBQkxFX1RZUEUsIEdMWF9XSU5ET1dfQklULAorICAgICAgICAgICAgICAgIEdM
WF9SRU5ERVJfVFlQRSwgICBHTFhfUkdCQV9CSVQsCisgICAgICAgICAgICAgICAgR0xYX1JFRF9T
SVpFLCAgICAgIDEsCisgICAgICAgICAgICAgICAgR0xYX0dSRUVOX1NJWkUsICAgIDEsCisgICAg
ICAgICAgICAgICAgR0xYX0JMVUVfU0laRSwgICAgIDEsCisgICAgICAgICAgICAgICAgR0xYX0FM
UEhBX1NJWkUsICAgIDEsCisgICAgICAgICAgICAgICAgR0xYX0RFUFRIX1NJWkUsICAgIDEsCisg
ICAgICAgICAgICAgICAgR0xYX1hfVklTVUFMX1RZUEUsIEdMWF9UUlVFX0NPTE9SLAorICAgICAg
ICAgICAgICAgIEdMWF9ET1VCTEVCVUZGRVIsICBUcnVlLAorICAgICAgICAgICAgICAgIE5vbmUK
KyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGludCBldmVudEJhc2VwLCBlcnJvckJhc2Vw
OworICAgICAgICAgICAgbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24gPSBYUmVuZGVyUXVlcnlF
eHRlbnNpb24oZGlzcGxheSgpLCAmZXZlbnRCYXNlcCwgJmVycm9yQmFzZXApOworCisgICAgICAg
ICAgICBtX3N1cmZhY2VDb250ZXh0ZmJDb25maWcgPSBjcmVhdGVDb25maWcoYXR0cmlidXRlcyk7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnOwor
ICAgIH0KKworICAgIGJvb2wgaXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbjsKKyAgICB9CisKK3ByaXZh
dGU6CisKKyAgICBTaGFyZWRSZXNvdXJjZXMoKQorICAgICAgICA6IG1fc3VwcG9ydHNYUmVuZGVy
RXh0ZW5zaW9uKGZhbHNlKQorICAgICAgICAsIG1fbWFya0ZvckRlbGV0aW9uKGZhbHNlKQorICAg
ICAgICAsIG1fd2luZG93KDApCisgICAgICAgICwgbV9kaXNwbGF5KDApCisgICAgICAgICwgbV9w
YnVmZmVyZmJDb25maWcoMCkKKyAgICAgICAgLCBtX3N1cmZhY2VDb250ZXh0ZmJDb25maWcoMCkK
KyAgICAgICAgLCBtX1Zpc3VhbEluZm8oMCkKKyAgICB7CisKKyAgICB9CisKKyAgICB+U2hhcmVk
UmVzb3VyY2VzKCkKKyAgICB7CisgICAgICAgIGlmICghbV9kaXNwbGF5KQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGlmIChtX3dpbmRvdykgeworICAgICAgICAgICAgWFVubWFwV2lu
ZG93KG1fZGlzcGxheSwgbV93aW5kb3cpOworICAgICAgICAgICAgWERlc3Ryb3lXaW5kb3cobV9k
aXNwbGF5LCBtX3dpbmRvdyk7CisgICAgICAgICAgICBtX3dpbmRvdyA9IDA7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobV9wYnVmZmVyZmJDb25maWcpCisgICAgICAgICAgICBtX3BidWZmZXJm
YkNvbmZpZyA9IDA7CisKKyAgICAgICAgaWYgKG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZykKKyAg
ICAgICAgICAgIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZyA9IDA7CisKKyAgICAgICAgaWYgKG1f
VmlzdWFsSW5mbykgeworICAgICAgICAgICAgWEZyZWUobV9WaXN1YWxJbmZvKTsKKyAgICAgICAg
ICAgIG1fVmlzdWFsSW5mbyA9IDA7CisgICAgICAgIH0KKworICAgICAgICBYQ2xvc2VEaXNwbGF5
KG1fZGlzcGxheSk7CisgICAgICAgIG1fZGlzcGxheSA9IDA7CisgICAgfQorCisgICAgc3RhdGlj
IFNoYXJlZFJlc291cmNlcyogbV9zdGF0aWNTaGFyZWRSZXNvdXJjZTsKKyAgICBib29sIG1fc3Vw
cG9ydHNYUmVuZGVyRXh0ZW5zaW9uOworICAgIGJvb2wgbV9tYXJrRm9yRGVsZXRpb247CisgICAg
V2luZG93IG1fd2luZG93OworICAgIERpc3BsYXkqIG1fZGlzcGxheTsKKyAgICBHTFhGQkNvbmZp
ZyBtX3BidWZmZXJmYkNvbmZpZzsKKyAgICBHTFhGQkNvbmZpZyBtX3N1cmZhY2VDb250ZXh0ZmJD
b25maWc7CisgICAgWFZpc3VhbEluZm8qIG1fVmlzdWFsSW5mbzsKK307CisKK2NsYXNzIEdMWFN1
cmZhY2UgOiBwdWJsaWMgR0xOYXRpdmVTdXJmYWNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShHTFhTdXJmYWNlKTsKK3B1YmxpYzoKKyAgICBHTFhTdXJmYWNlKCk7CisgICAgdmlydHVhbCB+
R0xYU3VyZmFjZSgpOworCitwcm90ZWN0ZWQ6CisgICAgWFZpc3VhbEluZm8qIHZpc3VhbEluZm8o
KTsKKyAgICBXaW5kb3cgeFdpbmRvdygpOworICAgIEdMWEZCQ29uZmlnIHBCdWZmZXJDb25maWco
KTsKKyAgICBHTFhGQkNvbmZpZyB0cmFuc3BvcnRTdXJmYWNlQ29uZmlnKCk7CisgICAgYm9vbCBp
c1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8U2hh
cmVkUmVzb3VyY2VzPiBtX3NoYXJlZFJlc291cmNlczsKK307CisKK2NsYXNzIEdMWFRyYW5zcG9y
dFN1cmZhY2UgOiBwdWJsaWMgR0xYU3VyZmFjZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
R0xYVHJhbnNwb3J0U3VyZmFjZSk7CitwdWJsaWM6CisgICAgR0xYVHJhbnNwb3J0U3VyZmFjZSgp
OworICAgIHZpcnR1YWwgfkdMWFRyYW5zcG9ydFN1cmZhY2UoKTsKKyAgICBQbGF0Zm9ybVN1cmZh
Y2VDb25maWcgc3VyZmFjZUNvbmZpZygpOworICAgIHZvaWQgc3dhcEJ1ZmZlcnMoKTsKKyAgICB2
b2lkIHNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpOworICAgIHZvaWQgZGVzdHJv
eSgpOworCitwcml2YXRlOgorICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIHZvaWQgZnJlZVJl
c291cmNlcygpOworfTsKKworY2xhc3MgR0xYUEJ1ZmZlciA6IHB1YmxpYyBHTFhTdXJmYWNlIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHTFhQQnVmZmVyKTsKK3B1YmxpYzoKKyAgICBHTFhQ
QnVmZmVyKCk7CisgICAgdmlydHVhbCB+R0xYUEJ1ZmZlcigpOworICAgIFBsYXRmb3JtU3VyZmFj
ZUNvbmZpZyBzdXJmYWNlQ29uZmlnKCk7CisgICAgdm9pZCBkZXN0cm95KCk7CisKK3ByaXZhdGU6
CisgICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAgdm9pZCBmcmVlUmVzb3VyY2VzKCk7Cit9Owor
Cit9CisKKyNlbmRpZgorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174596</attachid>
            <date>2012-11-15 20:00:27 -0800</date>
            <delta_ts>2012-11-15 21:38:35 -0800</delta_ts>
            <desc>rebasedpatch</desc>
            <filename>rebased.patch</filename>
            <type>text/plain</type>
            <size>65102</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDU1OWQxYjEuLjIxODBiOTAgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3NCBAQAorMjAx
Mi0xMS0xNSAgS29uZGFwYWxseSBLYWx5YW4gIDxrYWx5YW4ua29uZGFwYWxseUBpbnRlbC5jb20+
CisKKyAgICAgICAgW0VGTF0gUmVmYWN0b3IgR3JhcGhpY3NDb250ZXh0M0RFRkwuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDEyOTEuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0
M0RFZmwgY3JlYXRlcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUsIHdoaWNoIGFjdHMgYXMgaXRz
IHBsYXRmb3JtIExheWVyLgorICAgICAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUgbmVlZHMg
dG8gaGFuZGxlIHRoZSBmb2xsb3dpbmcgY2FzZXM6CisgICAgICAgIDEpIFRvIHByb3ZpZGUgYW4g
b2ZmLXNjcmVlbiBidWZmZXIgZm9yIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW9uLgorICAgICAgICAy
KSBSZW5kZXIgdG8gYSBjdXJyZW50IGNvbnRleHQuCisgICAgICAgIDMpIFRvIHJlbmRlciBkaXJl
Y3RseSB0byBob3N0IHdpbmRvdy4gKGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLikKKworICAgICAg
ICBCZWZvcmUgdGhpcyBwYXRjaCBFdmFzIHdhcyB1c2VkIHRvIHByb3ZpZGUgdXMgYW4gb2ZmLXNj
cmVlbiBjb250ZXh0IGFuZCBidWZmZXIuIEdMWCB3YXMgdXNlZCBpbgorICAgICAgICB0aGUgb3Ro
ZXIgc3VwcG9ydGVkIGNhc2UuIEV2YXMgYWN0cyBhcyBhIGdsdWUgbGF5ZXIgdG8gcHJvdmlkZSB1
cyB3aXRoIGFwcHJvcHJpYXRlCisgICAgICAgIEdMIGJpbmRpbmdzIChPcGVuR0wgZnVuY3Rpb25z
KSwgR0wgY29udGV4dCBhbmQgZHJhd2FibGUgKHN1cmZhY2Uvb2Zmc2NyZWVuYnVmZmVyKS4KKyAg
ICAgICAgSG93ZXZlciwgcHJpbWl0aXZlIHJlbmRlcmluZyBpcyBoYW5kbGVkIGJ5IFRleHR1cmVN
YXBwZXIgYW5kIE9wZW5HTFNoaW1zIGlzIHVzZWQgdG8gbG9hZCB0aGUgbmVlZGVkIEdMIGZ1bmN0
aW9ucy4KKworICAgICAgICBJdCB3b3VsZCBiZSBmb3Igb3VyIGFkdmFudGFnZSB0byBiZSBhYmxl
IHRvIHRha2UgaW4gdG8gdXNlIGFueSBvcHRpbWlzYXRpb25zL2V4dGVuc2lvbnMKKyAgICAgICAg
cHJvdmlkZWQgYnkgdW5kZXJseWluZyBkcml2ZXJzLCBzcGVjaWZpYyB0byBhIHBsYXRmb3JtIChl
LmcuIEdMWF9NRVNBX2NvcHlfc3ViX2J1ZmZlciBldGMuKS4KKyAgICAgICAgVGhpcyBwYXRjaCBp
bnRyb2R1Y2VzIGFuIGFic3RyYWN0aW9uIGxheWVyIHRvIG1ha2UgaXQgZWFzeSB0byBhZGQgc3Vw
cG9ydCBmb3IgYW55IEdMIGJhY2tlbmQgKEdMWCwgRUdMIGV0Yy4pCisgICAgICAgIGFuZCBkbyBh
bnkgcGxhdGZvcm0gc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBhcyBuZWVkZWQgd2l0aG91dCBjb21w
bGljYXRpbmcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlIGNsYXNzLgorICAgICAgICBUd28gbmV3
IGNsYXNzZXMgYXJlIGFkZGVkIHdpdGggdGhpcyBpbXBsZW1lbnRhdGlvbiwgR0xDb250ZXh0IGFu
ZCBHTFN1cmZhY2UuCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSB3b3VsZCBjcmVh
dGUgYW5kIG93biBhIEdMQ29udGV4dCBhbmQgR0xTdXJmYWNlLgorCisgICAgICAgIEdMQ29udGV4
dCBlbmNhcHN1bGF0ZXMgYW4gT3BlbkdMIGNvbnRleHQgaGlkaW5nIGFueSBwbGF0Zm9ybSBzcGVj
aWZpYyBtYW5hZ2VtZW50LgorICAgICAgICBJdCB1c2VzIEdMIGV4dGVuc2lvbiBBUkJfcm9idXN0
bmVzcyAod2hlbiBhdmFpbGFibGUpIHRvIGRldGVjdCBkcml2ZXIgcmVzZXRzLgorICAgICAgICBJ
dCBkZWZpbmVzIGEgc2ltcGxlIGludGVyZmFjZSBmb3IgdGhpbmdzIHRoYXQgbmVlZCB0byBiZSBo
YW5kbGVkIGJ5IHRoZSBjb250ZXh0LiBTdXBwb3J0CisgICAgICAgIGZvciBtdWx0aS10aHJlYWRl
ZCB1c2FnZSBhbmQgc2hhcmVkIGNvbnRleHQtZ3JvdXAgd291bGQgYmUgYWRkZWQgbGF0ZXIuCisK
KyAgICAgICAgR0xTdXJmYWNlIGVuY2Fwc3VsYXRlcyBhbiBPcGVuR0wgZHJhd2FibGUgaGlkaW5n
IGFueSBwbGF0Zm9ybSBzcGVjaWZpYyBtYW5hZ2VtZW50LgorICAgICAgICBJdCBkZWZpbmVzIGEg
c2ltcGxlIGludGVyZmFjZSBmb3IgdGhpbmdzIHRoYXQgbmVlZCB0byBiZSBoYW5kbGVkIGJ5IHRo
ZSBzdXJmYWNlLgorICAgICAgICBJdCBjcmVhdGVzIGFuIG9mZi1zY3JlZW4gcmVuZGVyaW5nIGFy
ZWEuIEFueSBHTENvbnRleHQgKGNvbXBhdGlibGUgd2l0aCB0aGUgc3VyZmFjZSkKKyAgICAgICAg
Y2FuIGJlIHVzZWQgdG8gcmVuZGVyIGludG8gdGhpcyBvZmYtc2NyZWVuIGFyZWEuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBhbHNvIGFkZHMgR0xYIGltcGxlbWVudGF0aW9uLiBUbyBrZWVwIHRoZSBw
YXRjaCB0byBtaW5pbXVtIEVHTCBzdXBwb3J0IHdvdWxkIGJlIGFkZGVkIGluIGFub3RoZXIgY2hh
bmdlc2V0LgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZWZsL0dMQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpHTENvbnRleHQ6OmNyZWF0ZUNvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6R0xDb250ZXh0OjpjcmVhdGVPZmZTY3JlZW5Db250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdMQ29udGV4dDo6Y3JlYXRlQ3VycmVudENvbnRleHRXcmFwcGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdMQ29udGV4dDo6R0xDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdMQ29u
dGV4dDo6fkdMQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHTENvbnRleHQ6Om1ha2VDdXJy
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdMQ29udGV4dDo6aXNWYWxpZCk6CisgICAgICAgIChX
ZWJDb3JlOjpHTENvbnRleHQ6OnJlbGVhc2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdM
Q29udGV4dDo6aGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMQ29udGV4dDo6aXNDdXJyZW50
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHTENvbnRleHQ6OmluaXRpYWxpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6R0xDb250ZXh0OjpnZXRDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkdMQ29udGV4dDo6cGxhdGZvcm1NYWtlQ3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHTENv
bnRleHQ6OnBsYXRmb3JtUmVsZWFzZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R0xDb250
ZXh0OjpkZXN0cm95KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xDb250ZXh0
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChHTENvbnRleHQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HTFN1cmZhY2UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R0xTdXJmYWNlOjpjcmVhdGVPZmZzY3Jl
ZW5TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMU3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0
U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFN1cmZhY2U6OkdMU3VyZmFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHTFN1cmZhY2U6On5HTFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
R0xTdXJmYWNlOjpoYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6R0xTdXJmYWNlOjpnZW9tZXRy
eSk6CisgICAgICAgIChXZWJDb3JlOjpHTFN1cmZhY2U6OnNoYXJlZERpc3BsYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6R0xTdXJmYWNlOjpjb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkdMU3VyZmFjZTo6c3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R0xTdXJmYWNlOjpj
b3B5VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFN1cmZhY2U6OnVwZGF0ZUNvbnRlbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdMU3VyZmFjZTo6c2V0R2VvbWV0cnkpOgorICAgICAgICAo
V2ViQ29yZTo6R0xTdXJmYWNlOjpkZXN0cm95KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9lZmwvR0xTdXJmYWNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChH
TFN1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRl
eHQzREVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQz
RCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4
dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1
cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRM
b3N0Q2FsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cmVsZWFzZVJlc291cmNlcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZVN1cmZh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzZXRDb250
ZXh0TG9zdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzU3VyZmFjZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjb3B5VG9HcmFwaGlj
c1N1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpn
cmFwaGljc1N1cmZhY2VUb2tlbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oOgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlKToKKyAgICAgICAgICAgIEdMWE9mZlNjcmVlbkNvbnRleHQgY3JlYXRlcyBhbiBvZmYtc2Ny
ZWVuIGNvbnRleHQuIFRoaXMgaXMgdXNlZCB3aGVuCisgICAgICAgICAgICByZW5kZXJzdHlsZSBp
cyBSZW5kZXJPZmZzY3JlZW4uCisgICAgICAgICAgICBJdCB1c2VzIEdMIGV4dGVuc2lvbiBHTFhf
QVJCX2NyZWF0ZV9jb250ZXh0ICh3aGVuIGF2YWlsYWJsZSkKKyAgICAgICAgICAgIHRvIGNyZWF0
ZSBhIGNvbnRleHQgZWxzZSBmYWxscyBiYWNrIHRvIHVzZSBnbFhDcmVhdGVOZXdDb250ZXh0Lgor
CisgICAgICAgICAgICBHTFhDdXJyZW50Q29udGV4dFdyYXBwZXIgYWN0cyBhcyBhIHdyYXBwZXIg
Zm9yIGN1cnJlbnQgY29udGV4dC4KKyAgICAgICAgICAgIFRoaXMgaXMgdXNlZCB3aGVuIHJlbmRl
cnN0eWxlIGlzIFJlbmRlclRvQ3VycmVudEdMQ29udGV4dC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplQVJCRXh0ZW5zaW9ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpHTFhPZmZTY3JlZW5Db250ZXh0OjpHTFhPZmZTY3JlZW5Db250ZXh0KToK
KyAgICAgICAgICAgIEluaXRpYWxpemVzIHRoZSBHTCBjb250ZXh0IHRvIGJlIGNvbXBhdGlibGUg
d2l0aCB0aGUgZ2l2ZW4gc3VyZmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkdMWE9mZlNjcmVlbkNv
bnRleHQ6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6R0xYT2ZmU2NyZWVuQ29udGV4
dDo6fkdMWE9mZlNjcmVlbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R0xYT2ZmU2NyZWVu
Q29udGV4dDo6aXNDdXJyZW50Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHTFhPZmZTY3Jl
ZW5Db250ZXh0OjpwbGF0Zm9ybU1ha2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWE9m
ZlNjcmVlbkNvbnRleHQ6OnBsYXRmb3JtUmVsZWFzZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6R0xYT2ZmU2NyZWVuQ29udGV4dDo6ZnJlZVJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpHTFhPZmZTY3JlZW5Db250ZXh0OjpkZXN0cm95KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoR0xYQ3VycmVudENvbnRleHRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcjo6R0xYQ3VycmVudENvbnRleHRXcmFwcGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcjo6fkdMWEN1cnJlbnRDb250
ZXh0V3JhcHBlcik6CisgICAgICAgIChHTFhPZmZTY3JlZW5Db250ZXh0KToKKyAgICAgICAgICAg
IEdMWFBCdWZmZXIsIENyZWF0ZXMgYSBHTCBzdXJmYWNlIChQQnVmZmVyKSB1c2VkIGZvciBvZmZz
Y3JlZW4gcmVuZGVyaW5nLgorICAgICAgICAgICAgQW55IEdMQ29udGV4dCB0aGF0IHdhcyBjcmVh
dGVkIHdpdGggcmVzcGVjdCB0byBjb25maWd1cmF0aW9uIGNhbiBiZSB1c2VkCisgICAgICAgICAg
ICB0byByZW5kZXIgaW50byB0aGlzLgorCisgICAgICAgICAgICBHTFhUcmFuc3BvcnRTdXJmYWNl
IGNyZWF0ZXMgV2luZG93IGFuZCB1c2VzIGl0IGFzIGFuIG9mZi1zY3JlZW4gc3VyZmFjZS4KKyAg
ICAgICAgICAgIEFueSBHTENvbnRleHQgdGhhdCB3YXMgY3JlYXRlZCB3aXRoIHJlc3BlY3QgdG8g
Y29uZmlndXJhdGlvbiBjYW4gYmUgdXNlZAorICAgICAgICAgICAgdG8gcmVuZGVyIGludG8gdGhp
cy4KKyAgICAgICAgICAgIFRoaXMgaXMgdXNlZCB3aGVuIGNvbnRlbnRzIG9mIHRoZSBidWZmZXIg
YXJlIHRvIGJlIHByb3ZpZGVkIHRvIFVJIFByb2Nlc3MKKyAgICAgICAgICAgIGZvciBkaXNwbGF5
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFN1cmZh
Y2U6OkdMWFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R0xYU3VyZmFjZTo6fkdMWFN1cmZh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6R0xYU3VyZmFjZTo6dmlzdWFsSW5mbyk6CisgICAgICAg
IChXZWJDb3JlOjpHTFhTdXJmYWNlOjp4V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFN1
cmZhY2U6OnBCdWZmZXJDb25maWcpOgorICAgICAgICAoV2ViQ29yZTo6R0xYU3VyZmFjZTo6dHJh
bnNwb3J0U3VyZmFjZUNvbmZpZyk6CisgICAgICAgIChXZWJDb3JlOjpHTFhTdXJmYWNlOjppc1hS
ZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0
U3VyZmFjZTo6R0xYVHJhbnNwb3J0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFhUcmFu
c3BvcnRTdXJmYWNlOjp+R0xYVHJhbnNwb3J0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpH
TFhUcmFuc3BvcnRTdXJmYWNlOjpjb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdM
WFRyYW5zcG9ydFN1cmZhY2U6OnN3YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRy
YW5zcG9ydFN1cmZhY2U6OnNldEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5z
cG9ydFN1cmZhY2U6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0
U3VyZmFjZTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpHTFhUcmFuc3BvcnRTdXJmYWNl
OjpmcmVlUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OjpHTFhTdXJmYWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdMWFBCdWZmZXI6On5HTFhQQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdMWFBCdWZmZXI6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6R0xYUEJ1ZmZlcjo6
Y29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHTFhQQnVmZmVyOjpkZXN0cm95KToK
KyAgICAgICAgKFdlYkNvcmU6OkdMWFBCdWZmZXI6OmZyZWVSZXNvdXJjZXMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTaGFyZWRYMTFSZXNvdXJjZXMpOgorICAgICAgICAg
ICAgQ3JlYXRlcyBYIHJlc291cmNlcyB3aGljaCBhcmUgc2hhcmVkIGJldHdlZW4gc3VyZmFjZSBh
bmQgY29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJlc291cmNlczo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJlc291cmNlczo6ZGVyZWYpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkWDExUmVzb3VyY2VzOjpnZXRYV2luZG93KToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZFgxMVJlc291cmNlczo6ZGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpT
aGFyZWRYMTFSZXNvdXJjZXM6OnZpc3VhbEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVk
WDExUmVzb3VyY2VzOjpjcmVhdGVDb25maWcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkWDEx
UmVzb3VyY2VzOjpwQnVmZmVyQ29udGV4dENvbmZpZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFy
ZWRYMTFSZXNvdXJjZXM6OnN1cmZhY2VDb250ZXh0Q29uZmlnKToKKyAgICAgICAgKFdlYkNvcmU6
OlNoYXJlZFgxMVJlc291cmNlczo6aXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJlc291cmNlczo6U2hhcmVkWDExUmVzb3VyY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJlc291cmNlczo6flNoYXJlZFgxMVJlc291cmNlcyk6
CisgICAgICAgIChHTFhTdXJmYWNlKToKKyAgICAgICAgKEdMWFRyYW5zcG9ydFN1cmZhY2UpOgor
ICAgICAgICAoR0xYUEJ1ZmZlcik6CisKIDIwMTItMTEtMTUgIEtlbmljaGkgSXNoaWJhc2hpICA8
YmFzaGlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE1ha2UgT3BlblR5cGVWZXJ0aWNhbERhdGEg
YmUgcmVmLWNvdW50ZWQKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFr
ZSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCA1ODJhZjA1Li40NGJhNWIz
IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIFNvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0yNzcsMTEgKzI3NywxNCBAQCBJRiAoV1RGX1VT
RV8zRF9HUkFQSElDUykKICAgTElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVT
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbCIKICAgICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMiCisgICAgIiR7V0VCQ09SRV9E
SVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseCIKICAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwIgogICApCiAgIExJU1QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNoaW1zLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0RyYXdpbmdCdWZmZXJDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9lZmwvR0xDb250ZXh0LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HTFN1cmZh
Y2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKQEAg
LTI4OSw2ICsyOTIsOCBAQCBJRiAoV1RGX1VTRV8zRF9HUkFQSElDUykKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5jcHAKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9xdC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dMQ29udGV4dC5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZWZsL0dMQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZmFmMWFiOAotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9lZmwvR0xDb250ZXh0LmNwcApAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiR0xDb250ZXh0Lmgi
CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpZiBIQVZFKEdMWCkKKyNp
bmNsdWRlICJHTFhDb250ZXh0LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dGF0aWMgUEZOR0xHRVRHUkFQSElDU1JFU0VUU1RBVFVTQVJCUFJPQyBnbEdldEdyYXBoaWNzUmVz
ZXRTdGF0dXNBUkIgPSAwOworc3RhdGljIEdMQ29udGV4dCogbV9jdXJyZW50Q29udGV4dCA9IDA7
CisKK1Bhc3NPd25QdHI8R0xDb250ZXh0PiBHTENvbnRleHQ6OmNyZWF0ZUNvbnRleHQoR3JhcGhp
Y3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQoreworICAgIHN0YXRpYyBib29s
IGluaXRpYWxpemVkU2hpbXMgPSBmYWxzZTsKKworICAgIGlmICghaW5pdGlhbGl6ZWRTaGltcykg
eworICAgICAgICBpbml0aWFsaXplZFNoaW1zID0gaW5pdGlhbGl6ZU9wZW5HTFNoaW1zKCk7Cisj
aWYgSEFWRShHTFgpCisgICAgICAgIGdsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8UEZOR0xHRVRHUkFQSElDU1JFU0VUU1RBVFVTQVJCUFJPQz4oZ2xYR2V0UHJv
Y0FkZHJlc3NBUkIocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHVieXRlKj4oImdsR2V0R3JhcGhp
Y3NSZXNldFN0YXR1c0FSQiIpKSk7CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAoIWluaXRpYWxp
emVkU2hpbXMpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc3dpdGNoIChyZW5kZXJT
dHlsZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlck9mZnNjcmVlbjoKKyAg
ICAgICAgaWYgKE93blB0cjxHTENvbnRleHQ+IGdseENvbnRleHQgID0gR0xDb250ZXh0OjpjcmVh
dGVPZmZTY3JlZW5Db250ZXh0KCkpCisgICAgICAgICAgICByZXR1cm4gZ2x4Q29udGV4dC5yZWxl
YXNlKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRl
clRvQ3VycmVudEdMQ29udGV4dDoKKyAgICAgICAgaWYgKE93blB0cjxHTENvbnRleHQ+IGdseENv
bnRleHQgID0gR0xDb250ZXh0OjpjcmVhdGVDdXJyZW50Q29udGV4dFdyYXBwZXIoKSkKKyAgICAg
ICAgICAgIHJldHVybiBnbHhDb250ZXh0LnJlbGVhc2UoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3c6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKworUGFzc093blB0cjxHTENvbnRleHQ+IEdMQ29udGV4dDo6Y3Jl
YXRlT2ZmU2NyZWVuQ29udGV4dCgpCit7CisjaWYgSEFWRShHTFgpCisgICAgT3duUHRyPEdMQ29u
dGV4dD4gZ2x4Q29udGV4dCA9IGFkb3B0UHRyKG5ldyBHTFhPZmZTY3JlZW5Db250ZXh0KCkpOwor
ICAgIHJldHVybiBnbHhDb250ZXh0LnJlbGVhc2UoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK1Bhc3NPd25QdHI8R0xDb250ZXh0PiBHTENvbnRleHQ6OmNyZWF0ZUN1cnJl
bnRDb250ZXh0V3JhcHBlcigpCit7CisjaWYgSEFWRShHTFgpCisgICAgT3duUHRyPEdMQ29udGV4
dD4gZ2x4Q29udGV4dCA9IGFkb3B0UHRyKG5ldyBHTFhDdXJyZW50Q29udGV4dFdyYXBwZXIoKSk7
CisgICAgcmV0dXJuIGdseENvbnRleHQucmVsZWFzZSgpOworI2VuZGlmCisKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworR0xDb250ZXh0OjpHTENvbnRleHQoKQorICAgIDogbV9jb250ZXh0SGFu
ZGxlKDApCisgICAgLCBtX3Jlc2V0TG9zdENvbnRleHQoZmFsc2UpCit7CisKK30KKworR0xDb250
ZXh0Ojp+R0xDb250ZXh0KCkKK3sKKyAgICBpZiAodGhpcyA9PSBtX2N1cnJlbnRDb250ZXh0KQor
ICAgICAgICBtX2N1cnJlbnRDb250ZXh0ID0gMDsKK30KKworYm9vbCBHTENvbnRleHQ6Om1ha2VD
dXJyZW50KEdMU3VyZmFjZSogc3VyZmFjZSkKK3sKKyAgICBtX2NvbnRleHRMb3N0ID0gZmFsc2U7
CisKKyAgICBpZiAoc3VyZmFjZSAmJiAhc3VyZmFjZS0+aGFuZGxlKCkuaXNWYWxpZCgpKSB7Cisg
ICAgICAgIG1fY3VycmVudENvbnRleHQgPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKGlzQ3VycmVudENvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBib29sIHJldHVyblZhbHVlID0gZmFsc2U7CisKKyAgICBpZiAoIXN1cmZhY2UpIHsKKyAg
ICAgICAgbV9jdXJyZW50Q29udGV4dCA9IDA7CisgICAgICAgIHBsYXRmb3JtUmVsZWFzZUN1cnJl
bnQoKTsKKyAgICAgICAgcmV0dXJuVmFsdWUgPSAgdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKHBsYXRm
b3JtTWFrZUN1cnJlbnQoc3VyZmFjZSkpIHsKKyAgICAgICAgbV9jdXJyZW50Q29udGV4dCA9IHRo
aXM7CisgICAgICAgIHJldHVyblZhbHVlID0gIHRydWU7CisgICAgfQorCisgICAgaWYgKG1fcmVz
ZXRMb3N0Q29udGV4dCAmJiBnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIpIHsKKyAgICAgICAg
R0xlbnVtIHN0YXR1cyA9IGdsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpOworCisgICAgICAg
IHN3aXRjaCAoc3RhdHVzKSB7CisgICAgICAgIGNhc2UgTmF0aXZlQ09OVEVYVF9OT19FUlJPUjoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5hdGl2ZUNPTlRFWFRfR1VJTFRZX0NP
TlRFWFRfUkVTRVQ6CisgICAgICAgICAgICBtX2NvbnRleHRMb3N0ID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIE5hdGl2ZUNPTlRFWFRfSU5OT0NFTlRfQ09OVEVYVF9S
RVNFVDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5hdGl2ZUNPTlRFWFRfVU5L
Tk9XTl9DT05URVhUX1JFU0VUOgorICAgICAgICAgICAgbV9jb250ZXh0TG9zdCA9IHRydWU7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJldHVyblZhbHVlOworfQorCitib29sIEdM
Q29udGV4dDo6aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dEhhbmRsZSAm
JiAhbV9jb250ZXh0TG9zdDsKK30KKwordm9pZCBHTENvbnRleHQ6OnJlbGVhc2VDdXJyZW50KCkK
K3sKKyAgICBpZiAoIWlzQ3VycmVudENvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9jdXJyZW50Q29udGV4dCA9IDA7CisgICAgcGxhdGZvcm1SZWxlYXNlQ3VycmVudCgpOworfQor
CitQbGF0Zm9ybUNvbnRleHQgR0xDb250ZXh0OjpoYW5kbGUoKSBjb25zdAoreworICAgIHJldHVy
biBtX2NvbnRleHRIYW5kbGU7Cit9CisKK2Jvb2wgR0xDb250ZXh0Ojppc0N1cnJlbnRDb250ZXh0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHTENvbnRleHQ6OmluaXRp
YWxpemUoR0xTdXJmYWNlKikKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR0xDb250ZXh0KiBH
TENvbnRleHQ6OmdldEN1cnJlbnQoKQoreworICAgIHJldHVybiBtX2N1cnJlbnRDb250ZXh0Owor
fQorCitib29sIEdMQ29udGV4dDo6cGxhdGZvcm1NYWtlQ3VycmVudChHTFN1cmZhY2UqKQorewor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdMQ29udGV4dDo6cGxhdGZvcm1SZWxlYXNlQ3Vy
cmVudCgpCit7CisKK30KKwordm9pZCBHTENvbnRleHQ6OmRlc3Ryb3koKQoreworICAgIG1fY29u
dGV4dEhhbmRsZSA9IDA7CisgICAgbV9yZXNldExvc3RDb250ZXh0ID0gZmFsc2U7CisKKyAgICBp
ZiAodGhpcyA9PSBtX2N1cnJlbnRDb250ZXh0KQorICAgICAgICBtX2N1cnJlbnRDb250ZXh0ID0g
MDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xDb250ZXh0LmggU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dMQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmE4YTI3ZTEKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dMQ29udGV4dC5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgR0xDb250ZXh0X2gKKyNkZWZpbmUgR0xDb250ZXh0X2gK
KworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkdMRGVmcy5o
IgorI2luY2x1ZGUgIkdMU3VyZmFjZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKKy8vIEVuY2Fwc3VsYXRlcyBhbiBPcGVuR0wg
Y29udGV4dCBhbmQgZHJhd2FibGUsIGhpZGluZyBwbGF0Zm9ybSBzcGVjaWZpYyBtYW5hZ2VtZW50
LgorbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHTENvbnRleHQgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEdMQ29udGV4dCk7CisKK3B1YmxpYzoKKyAgICAvLyBGcm9tIGh0dHA6Ly93
d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvZ2xlcy9leHRlbnNpb25zL0VYVC9FWFRfcm9idXN0bmVz
cy50eHQKKyAgICBlbnVtIE5hdGl2ZUNvbnRleHRSZXNldCB7CisgICAgICAgIE5hdGl2ZUNPTlRF
WFRfTk9fRVJST1IgPSAweDAwMDAsCisgICAgICAgIE5hdGl2ZUNPTlRFWFRfR1VJTFRZX0NPTlRF
WFRfUkVTRVQgPSAweDgyNTMsCisgICAgICAgIE5hdGl2ZUNPTlRFWFRfSU5OT0NFTlRfQ09OVEVY
VF9SRVNFVCA9IDB4ODI1NCwKKyAgICAgICAgTmF0aXZlQ09OVEVYVF9VTktOT1dOX0NPTlRFWFRf
UkVTRVQgPSAweDgyNTUsCisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPEdMQ29udGV4
dD4gY3JlYXRlQ29udGV4dChHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUpOworCisgICAg
dmlydHVhbCB+R0xDb250ZXh0KCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZShHTFN1
cmZhY2UqKTsKKworICAgIC8vIE1ha2VzIHRoaXMgYW5kIHN1cmZhY2UgYXMgY3VycmVudCBjb250
ZXh0IGFuZCBkcmF3YWJsZS4KKyAgICAvLyBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBubyBz
dXJmYWNlIGlzIHNhbWUgYXMgY2FsbGluZyByZWxlYXNlQ3VycmVudC4KKyAgICAvLyBEb2VzIG5v
dGhpbmcgaWYgdGhpcyBpcyBhbHJlYWR5IGN1cnJlbnQgQ29udGV4dC4KKyAgICBib29sIG1ha2VD
dXJyZW50KEdMU3VyZmFjZSogPSAwKTsKKworICAgIC8vIFNldHMgQ3VycmVudCBDb250ZXh0IGFu
ZCBEcmF3YWJsZSBhcyBOdWxsLgorICAgIC8vIERvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0IGlmIHRo
aXMgaXMgbm90IHRoZSBjdXJyZW50IENvbnRleHQuCisgICAgdm9pZCByZWxlYXNlQ3VycmVudCgp
OworCisgICAgUGxhdGZvcm1Db250ZXh0IGhhbmRsZSgpIGNvbnN0OworCisgICAgdmlydHVhbCBi
b29sIGlzQ3VycmVudENvbnRleHQoKSBjb25zdDsKKworICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0
OworCisgICAgLy8gRGVzdHJveXMgYW55IEdMIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhp
cyBjb250ZXh0LgorICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CisKKyAgICBzdGF0aWMgR0xD
b250ZXh0KiBnZXRDdXJyZW50KCk7CisKK3Byb3RlY3RlZDoKKyAgICBHTENvbnRleHQoKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1NYWtlQ3VycmVudChHTFN1cmZhY2UqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcGxhdGZvcm1SZWxlYXNlQ3VycmVudCgpOworICAgIFBsYXRmb3JtQ29udGV4dCBt
X2NvbnRleHRIYW5kbGU7CisgICAgYm9vbCBtX3Jlc2V0TG9zdENvbnRleHQ7CisgICAgYm9vbCBt
X2NvbnRleHRMb3N0OworCitwcml2YXRlOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEdMQ29udGV4
dD4gY3JlYXRlT2ZmU2NyZWVuQ29udGV4dCgpOworICAgIHN0YXRpYyBQYXNzT3duUHRyPEdMQ29u
dGV4dD4gY3JlYXRlQ3VycmVudENvbnRleHRXcmFwcGVyKCk7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gR0xOYXRpdmVDb250ZXh0X0gKZGlmZiAt
LWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xTdXJmYWNlLmNwcCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xTdXJmYWNlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDFmNTc1Ci0tLSAvZGV2L251bGwKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HTFN1cmZhY2UuY3BwCkBAIC0wLDAg
KzEsMTc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJHTFN1cmZhY2UuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
KworI2lmIEhBVkUoR0xYKQorI2luY2x1ZGUgIkdMWFN1cmZhY2UuaCIKKyNlbmRpZgorCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3du
UHRyPEdMU3VyZmFjZT4gR0xTdXJmYWNlOjpjcmVhdGVPZmZzY3JlZW5TdXJmYWNlKCkKK3sKKyNp
ZiBIQVZFKEdMWCkKKyAgICBPd25QdHI8R0xTdXJmYWNlPiBzdXJmYWNlID0gIGFkb3B0UHRyKG5l
dyBHTFhQQnVmZmVyKCkpOworCisgICAgaWYgKHN1cmZhY2UtPmhhbmRsZSgpLmlzVmFsaWQoKSkK
KyAgICAgICAgcmV0dXJuIHN1cmZhY2UucmVsZWFzZSgpOworI2VuZGlmCisKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworUGFzc093blB0cjxHTFN1cmZhY2U+IEdMU3VyZmFjZTo6Y3JlYXRlVHJh
bnNwb3J0U3VyZmFjZSgpCit7CisjaWYgSEFWRShHTFgpCisgICAgT3duUHRyPEdMU3VyZmFjZT4g
c3VyZmFjZSA9ICBhZG9wdFB0cihuZXcgR0xYVHJhbnNwb3J0U3VyZmFjZSgpKTsKKworICAgIGlm
IChzdXJmYWNlLT5oYW5kbGUoKS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBzdXJmYWNlLnJl
bGVhc2UoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0dMU3VyZmFjZTo6
R0xTdXJmYWNlKCkKKyAgICA6IG1fcmVzdG9yZU5lZWRlZCh0cnVlKQorICAgICwgbV9mYm9JZCgw
KQorICAgICwgbV9zaGFyZWREaXNwbGF5KDApCit7CisKK30KKworR0xTdXJmYWNlOjp+R0xTdXJm
YWNlKCkKK3sKKworfQorCitHcmFwaGljc1N1cmZhY2VUb2tlbiBHTFN1cmZhY2U6OmhhbmRsZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIEdyYXBoaWNzU3VyZmFjZVRva2VuKG1fZHJhd2FibGUpOwor
fQorCitjb25zdCBJbnRSZWN0JiBHTFN1cmZhY2U6Omdlb21ldHJ5KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9yZWN0OworfQorCitQbGF0Zm9ybURpc3BsYXkgR0xTdXJmYWNlOjpzaGFyZWREaXNw
bGF5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zaGFyZWREaXNwbGF5OworfQorCitQbGF0Zm9y
bVN1cmZhY2VDb25maWcgR0xTdXJmYWNlOjpjb25maWd1cmF0aW9uKCkKK3sKKyAgICByZXR1cm4g
MDsKK30KKwordm9pZCBHTFN1cmZhY2U6OnN3YXBCdWZmZXJzKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIEdMU3VyZmFjZTo6Y29weVRleHR1cmUodWludDMyX3QgdGV4dHVy
ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkKK3sKKyAgICBpZiAoIW1fZmJvSWQpCisgICAg
ICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2Zib0lkKTsKKworICAgIG1fcmVzdG9yZU5lZWRl
ZCA9IHRydWU7CisgICAgaW50IHggPSBzb3VyY2VSZWN0LngoKTsKKyAgICBpbnQgeSA9IHNvdXJj
ZVJlY3QueSgpOworICAgIGludCB3aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGgoKTsKKyAgICBpbnQg
aGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQoKTsKKworICAgIGdsUHVzaEF0dHJpYihHTF9DT0xP
Ul9CVUZGRVJfQklUKTsKKworICAgIEdMaW50IHByZXZpb3VzRkJPOworICAgIGdsR2V0SW50ZWdl
cnYoR0xfRlJBTUVCVUZGRVJfQklORElORywgJnByZXZpb3VzRkJPKTsKKworICAgIGdsQmluZEZy
YW1lYnVmZmVyKEdMX1JFQURfRlJBTUVCVUZGRVIsIG1fZmJvSWQpOworCisgICAgZ2xCaW5kVGV4
dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJE
KEdMX1JFQURfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJE
LCB0ZXh0dXJlLCAwKTsKKworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0RSQVdfRlJBTUVCVUZG
RVIsIDApOworCisgICAgZ2xCbGl0RnJhbWVidWZmZXIoeCwgeSwgd2lkdGgsIGhlaWdodCwgeCwg
eSwgd2lkdGgsIGhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKKworICAg
IGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfUkVBRF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRU
QUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIDAsIDApOworICAgIGdsQmluZFRleHR1cmUoR0xfVEVY
VFVSRV8yRCwgMCk7CisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIHByZXZp
b3VzRkJPKTsKKworICAgIGdsUG9wQXR0cmliKCk7Cit9CisKK3ZvaWQgR0xTdXJmYWNlOjp1cGRh
dGVDb250ZW50cyh1aW50MzJfdCB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBj
b25zdCBHTHVpbnQgYmluZEZib0lkKQoreworICAgIG1fcmVzdG9yZU5lZWRlZCA9IGZhbHNlOwor
CisgICAgaWYgKCFtX2Zib0lkKQorICAgICAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm9J
ZCk7CisKKyAgICBpbnQgeCA9IHNvdXJjZVJlY3QueCgpOworICAgIGludCB5ID0gc291cmNlUmVj
dC55KCk7CisgICAgaW50IHdpZHRoID0gc291cmNlUmVjdC53aWR0aCgpOworICAgIGludCBoZWln
aHQgPSBzb3VyY2VSZWN0LmhlaWdodCgpOworCisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfUkVB
RF9GUkFNRUJVRkZFUiwgbV9mYm9JZCk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJE
LCB0ZXh0dXJlKTsKKyAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX1JFQURfRlJBTUVCVUZG
RVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCB0ZXh0dXJlLCAwKTsKKyAg
ICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9EUkFXX0ZSQU1FQlVGRkVSLCAwKTsKKyAgICBnbEJsaXRG
cmFtZWJ1ZmZlcih4LCB5LCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9D
T0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOworICAgIHN3YXBCdWZmZXJzKCk7CisgICAgZ2xG
cmFtZWJ1ZmZlclRleHR1cmUyRChHTF9SRUFEX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hN
RU5UMCwgR0xfVEVYVFVSRV8yRCwgMCwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCAwKTsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgYmluZEZib0lk
KTsKK30KKwordm9pZCBHTFN1cmZhY2U6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1Jl
Y3QpCit7CisgICAgbV9yZWN0ID0gbmV3UmVjdDsKK30KKwordm9pZCBHTFN1cmZhY2U6OmRlc3Ry
b3koKQoreworICAgIG1fcmVjdCA9IEludFJlY3QoKTsKKworICAgIGlmIChtX2Zib0lkKQorICAg
ICAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm9JZCk7CisKKyAgICBtX2Zib0lkID0g
MDsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9lZmwvR0xTdXJmYWNlLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWZsL0dMU3VyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MmQy
MGMKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZs
L0dMU3VyZmFjZS5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgR0xTdXJmYWNlX2gKKyNkZWZpbmUgR0xTdXJmYWNlX2gKKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkdMRGVmcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
U3VyZmFjZVRva2VuLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KKworLy8gRW5jYXBzdWxhdGVzIGEgc3VyZmFjZSB0aGF0IGNhbiBi
ZSByZW5kZXJlZCB0byB3aXRoIEdMLCBoaWRpbmcgcGxhdGZvcm0KKy8vIHNwZWNpZmljIG1hbmFn
ZW1lbnQuCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdMU3VyZmFjZSB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoR0xTdXJmYWNlKTsKKworcHVibGljOgorICAgIC8vIENyZWF0ZSBh
IEdMIHN1cmZhY2UgdXNlZCBmb3Igb2Zmc2NyZWVuIHJlbmRlcmluZy4KKyAgICBzdGF0aWMgUGFz
c093blB0cjxHTFN1cmZhY2U+IGNyZWF0ZU9mZnNjcmVlblN1cmZhY2UoKTsKKworICAgIC8vIENy
ZWF0ZSBhIEdMIHN1cmZhY2UgdXNlZCBmb3Igb2Zmc2NyZWVuIHJlbmRlcmluZy4gVGhlIHJlc3Vs
dHMgY2FuIGJlIHRyYW5zcG9ydGVkCisgICAgLy8gdG8gdGhlIFVJIHByb2Nlc3MgZm9yIGRpc3Bs
YXkuCisgICAgc3RhdGljIFBhc3NPd25QdHI8R0xTdXJmYWNlPiBjcmVhdGVUcmFuc3BvcnRTdXJm
YWNlKCk7CisKKyAgICB2aXJ0dWFsIH5HTFN1cmZhY2UoKTsKKworICAgIGNvbnN0IEludFJlY3Qm
IGdlb21ldHJ5KCkgY29uc3Q7CisKKyAgICAvLyBHZXQgdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0g
c3BlY2lmaWMgc3VyZmFjZSBoYW5kbGUuCisgICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4gaGFuZGxl
KCkgY29uc3Q7CisKKyAgICBQbGF0Zm9ybURpc3BsYXkgc2hhcmVkRGlzcGxheSgpIGNvbnN0Owor
CisgICAgdmlydHVhbCB2b2lkIHN3YXBCdWZmZXJzKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29w
eVRleHR1cmUodWludDMyX3QgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCk7CisK
KyAgICAvLyBDb252ZW5pZW5jZSBGdW5jdGlvbiB0byB1cGRhdGUgc3VyZmFjZSBiYWNrYnVmZmVy
IHdpdGggdGV4dHVyZSBjb250ZW50cyBhbmQgcmVzdG9yZSBjdXJyZW50IEZCTy4KKyAgICAvLyBG
dW5jdGlvbiBkb2VzIHRoZSBmb2xsb3dpbmcoaW4gb3JkZXIpOgorICAgIC8vIGEpQmxpdHMgdGV4
dHVyZSBjb250ZW50cyB0byBiYWNrIGJ1ZmZlci4KKyAgICAvLyBiKUNhbGxzIFN3YXAgQnVmZmVy
cy4KKyAgICAvLyBjKVNldHMgY3VycmVudCBGQk8gYXMgYmluZEZib0lkLgorICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVDb250ZW50cyh1aW50MzJfdCB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBHTHVpbnQgYmluZEZib0lkKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRH
ZW9tZXRyeShjb25zdCBJbnRSZWN0JiBuZXdSZWN0KTsKKworICAgIHZpcnR1YWwgUGxhdGZvcm1T
dXJmYWNlQ29uZmlnIGNvbmZpZ3VyYXRpb24oKTsKKworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95
KCk7CisKK3Byb3RlY3RlZDoKKyAgICBHTFN1cmZhY2UoKTsKKyAgICBib29sIG1fcmVzdG9yZU5l
ZWRlZDsKKyAgICBJbnRSZWN0IG1fcmVjdDsKKyAgICBHTHVpbnQgbV9mYm9JZDsKKyAgICBQbGF0
Zm9ybURpc3BsYXkgbV9zaGFyZWREaXNwbGF5OworICAgIFBsYXRmb3JtU3VyZmFjZSBtX2RyYXdh
YmxlOworfTsKKworfQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCmlu
ZGV4IGQxMzkxMzAuLmNkNDBkODggMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCkBAIC0xLDUgKzEs
NiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICAg
IENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMTgsNiArMTksNyBAQAogKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKIAogI2lmIFVTRSgzRF9HUkFQSElDUykgfHwgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtMzksNiArNDEsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpj
cmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhv
c3RXaW5kb3csIFJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogeworICAgIGlmIChyZW5kZXJTdHls
ZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKKyAgICAgICAgcmV0dXJuIDA7CisKICAg
ICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhp
Y3NDb250ZXh0M0QoYXR0cnMsIGhvc3RXaW5kb3csIHJlbmRlclN0eWxlKSk7CiAgICAgcmV0dXJu
IGNvbnRleHQtPm1fcHJpdmF0ZSA/IGNvbnRleHQucmVsZWFzZSgpIDogMDsKIH0KQEAgLTY3LDI5
ICs3MiwxMiBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaQogICAgICwgbV9tdWx0aXNhbXBsZUNv
bG9yQnVmZmVyKDApCiAgICAgLCBtX3ByaXZhdGUoYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZSh0aGlzLCBob3N0V2luZG93LCByZW5kZXJTdHlsZSkpKQogewotICAgIHZhbGlk
YXRlQXR0cmlidXRlcygpOwotCi0gICAgaWYgKCFtX3ByaXZhdGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkU2hpbXMgPSBmYWxzZTsKLSAgICBzdGF0aWMg
Ym9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAgICBpZiAoIWluaXRpYWxpemVkU2hpbXMpIHsKLSAgICAg
ICAgc3VjY2VzcyA9IGluaXRpYWxpemVPcGVuR0xTaGltcygpOwotICAgICAgICBpbml0aWFsaXpl
ZFNoaW1zID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCFzdWNjZXNzKSB7CisgICAgaWYgKCFtX3By
aXZhdGUgfHwgIW1fcHJpdmF0ZS0+bV9wbGF0Zm9ybUNvbnRleHQpIHsKICAgICAgICAgbV9wcml2
YXRlID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChyZW5kZXJT
dHlsZSA9PSBSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQpIHsKLSAgICAgICAgLy8gRXZhcyBkb2Vz
bid0IGFsbG93IGluY2x1ZGluZyBnbCBoZWFkZXJzIGFuZCBFdmFzX0dMIGhlYWRlcnMgYXQgdGhl
IHNhbWUgdGltZSwKLSAgICAgICAgLy8gc28gd2UgbmVlZCB0byBxdWVyeSB0aGUgY3VycmVudCBn
bCBjb250ZXh0L3N1cmZhY2UgaGVyZSBpbnN0ZWFkIG9mIGluIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZS4KLSAgICAgICAgdm9pZCogY3VycmVudENvbnRleHQgPSAodm9pZCopZ2xYR2V0Q3VycmVu
dENvbnRleHQoKTsKLSAgICAgICAgdm9pZCogY3VycmVudFN1cmZhY2UgPSAodm9pZCopZ2xYR2V0
Q3VycmVudERyYXdhYmxlKCk7Ci0gICAgICAgIG1fcHJpdmF0ZS0+c2V0Q3VycmVudEdMQ29udGV4
dChjdXJyZW50Q29udGV4dCwgY3VycmVudFN1cmZhY2UpOwotICAgIH0KKyAgICB2YWxpZGF0ZUF0
dHJpYnV0ZXMoKTsKIAogICAgIGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJPZmZzY3JlZW4pIHsK
ICAgICAgICAgLy8gQ3JlYXRlIGJ1ZmZlcnMgZm9yIHRoZSBjYW52YXMgRkJPLgpAQCAtMTQ3LDE0
ICsxMzUsMTkgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICBnbEVuYWJsZShHTF9QT0lO
VF9TUFJJVEUpOwogICAgIGdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUpOwog
I2VuZGlmCisgICAgZ2xDbGVhckNvbG9yKDAuMCwgMC4wLCAwLjAsIDAuMCk7CiB9CiAKIEdyYXBo
aWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQogewotICAgIGlmIChtX3JlbmRlclN0
eWxlID09IFJlbmRlclRvQ3VycmVudEdMQ29udGV4dCB8fCAhbV9wcml2YXRlKQorICAgIGlmICgh
bV9wcml2YXRlIHx8ICFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2ZibykgeworICAgICAgICBtX3By
aXZhdGUtPnJlbGVhc2VSZXNvdXJjZXMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAg
IGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CiAKICAgICBpZiAobV9hdHRycy5hbnRp
YWxpYXMpIHsKQEAgLTE2NSw3ICsxNTgsNiBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNz
Q29udGV4dDNEKCkKIAogICAgICAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNh
bXBsZUZCTyk7CiAgICAgfSBlbHNlIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0
aCkgewotCiAjaWYgVVNFKE9QRU5HTF9FU18yKQogICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkK
ICAgICAgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aEJ1ZmZlcik7CkBA
IC0xNzUsNyArMTY3LDkgQEAgR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgp
CiAjZW5kaWYKICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNp
bEJ1ZmZlcik7CiAgICAgfQorCiAgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsK
KyAgICBtX3ByaXZhdGUtPnJlbGVhc2VSZXNvdXJjZXMoKTsKIH0KIAogUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgp
CkBAIC0xOTcsMTIgKzE5MSw2IEBAIFBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dDNEOjpw
bGF0Zm9ybUxheWVyKCkgY29uc3QKIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRl
eHRDdXJyZW50KCkKIHsKLSAgICBpZiAoIW1fcHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKG1fcmVuZGVyU3R5bGUgPT0gUmVuZGVyVG9DdXJyZW50R0xDb250ZXh0KQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQogICAgIHJldHVybiBtX3ByaXZhdGUtPm1ha2VDb250ZXh0
Q3VycmVudCgpOwogfQogCkBAIC0yMTUsOSArMjAzLDkgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQz
RDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0CiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6c2V0Q29udGV4dExvc3RDYWxsYmFjayhQYXNzT3duUHRyPENvbnRleHRMb3N0Q2Fs
bGJhY2s+KSAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2FsbGJhY2so
UGFzc093blB0cjxDb250ZXh0TG9zdENhbGxiYWNrPiBjYWxsQmFjaykKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIG1fcHJpdmF0ZS0+c2V0Q29udGV4dExvc3RDYWxsYmFjayhjYWxsQmFj
ayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldEVycm9yTWVzc2FnZUNhbGxiYWNr
KFBhc3NPd25QdHI8RXJyb3JNZXNzYWdlQ2FsbGJhY2s+KSAKZGlmZiAtLWdpdCBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlLmNwcAppbmRleCA2MmQwYTZlLi4wZjkxYTkyIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZh
dGUuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3Vu
ZyBFbGVjdHJvbmljcworICAgIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4K
IAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTksMTU5ICsyMCwxMDUgQEAKIAogI2luY2x1ZGUgImNv
bmZpZy5oIgogCi0jaWYgVVNFKDNEX0dSQVBISUNTKSB8fCBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAKKyNpZiBVU0Uo
M0RfR1JBUEhJQ1MpIHx8IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKICNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5j
bHVkZSA8RWNvcmVfRXZhcy5oPgotI2luY2x1ZGUgPEV2YXNfR0wuaD4KLSNpbmNsdWRlIDx3dGYv
T3duQXJyYXlQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBVU0Uo
T1BFTkdMX0VTXzIpCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wy
ZXh0Lmg+CisjZWxzZQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjZW5kaWYKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgSG9zdFdpbmRvdyogaG9zdFdp
bmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogICAgIDog
bV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2hvc3RXaW5kb3coaG9zdFdpbmRvdykKLSAgICAs
IG1fZXZhc0dMKDApCi0gICAgLCBtX2V2YXNHTENvbnRleHQoMCkKLSAgICAsIG1fZXZhc0dMU3Vy
ZmFjZSgwKQotICAgICwgbV9nbENvbnRleHQoMCkKLSAgICAsIG1fZ2xTdXJmYWNlKDApCi0gICAg
LCBtX2FwaSgwKQotICAgICwgbV9yZW5kZXJTdHlsZShyZW5kZXJTdHlsZSkKKyAgICAsIG1fcGVu
ZGluZ1N1cmZhY2VSZXNpemUoZmFsc2UpCiB7Ci0gICAgaWYgKHJlbmRlclN0eWxlID09IEdyYXBo
aWNzQ29udGV4dDNEOjpSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQpCi0gICAgICAgIHJldHVybjsK
LQogICAgIGlmIChtX2hvc3RXaW5kb3cgJiYgbV9ob3N0V2luZG93LT5wbGF0Zm9ybVBhZ2VDbGll
bnQoKSkgewogICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgY29kZSBwYXRoIGZvciBX
ZWJLaXQxLgogICAgICAgICAvLyBHZXQgRXZhcyBvYmplY3QgZnJvbSBwbGF0Zm9ybVBhZ2VDbGll
bnQgYW5kIHNldCBFdmFzR0wgcmVsYXRlZCBtZW1iZXJzLgogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgLy8gRm9yIFdlYktpdDIsIHdlIG5lZWQgdG8gY3JlYXRlIGEgZHVtbXkgZWNvcmVF
dmFzIG9iamVjdCBmb3IgdGhlIFdlYlByb2Nlc3MgaW4gb3JkZXIgdG8gdXNlIEV2YXNHTCBBUElz
LgotI2lmZGVmIEhBVkVfRUNPUkVfWAotICAgIGVjb3JlX2V2YXNfaW5pdCgpOwotICAgIG1fZWNv
cmVFdmFzID0gYWRvcHRQdHIoZWNvcmVfZXZhc19nbF94MTFfbmV3KDAsIDAsIDAsIDAsIDEsIDEp
KTsKLSAgICBpZiAoIW1fZWNvcmVFdmFzKQotICAgICAgICByZXR1cm47Ci0jZWxzZQotICAgIHJl
dHVybjsKLSNlbmRpZgorICAgIG1fcGxhdGZvcm1Db250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVD
b250ZXh0KHJlbmRlclN0eWxlKTsKIAotICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldCht
X2Vjb3JlRXZhcy5nZXQoKSk7Ci0gICAgaWYgKCFldmFzKQorICAgIGlmICAoIW1fcGxhdGZvcm1D
b250ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBDcmVhdGUgYSBuZXcgRXZhc19HTCBv
YmplY3QgZm9yIGdsIHJlbmRlcmluZyBvbiBlZmwuCi0gICAgbV9ldmFzR0wgPSBldmFzX2dsX25l
dyhldmFzKTsKLSAgICBpZiAoIW1fZXZhc0dMKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBH
ZXQgdGhlIEFQSSBmb3IgcmVuZGVyaW5nIHVzaW5nIE9wZW5HTC4KLSAgICAvLyBUaGlzIHJldHVy
bnMgYSBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyBhbGwgdGhlIE9wZW5HTCBmdW5jdGlvbnMgd2Ug
Y2FuIHVzZSB0byByZW5kZXIgaW4gRXZhcwotICAgIG1fYXBpID0gZXZhc19nbF9hcGlfZ2V0KG1f
ZXZhc0dMKTsKLSAgICBpZiAoIW1fYXBpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDcmVh
dGUgYSBjb250ZXh0Ci0gICAgbV9ldmFzR0xDb250ZXh0ID0gZXZhc19nbF9jb250ZXh0X2NyZWF0
ZShtX2V2YXNHTCwgMCk7Ci0gICAgaWYgKCFtX2V2YXNHTENvbnRleHQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIENyZWF0ZSBhIHN1cmZhY2UKLSAgICBpZiAoIWNyZWF0ZVN1cmZhY2UoMCwg
cmVuZGVyU3R5bGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2lu
ZG93KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KKyAg
ICBpZiAocmVuZGVyU3R5bGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlck9mZnNjcmVlbikg
ewogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIEludFNpemUgc3VyZmFjZVNpemUobV9j
b250ZXh0LT5tX2N1cnJlbnRXaWR0aCwgbV9jb250ZXh0LT5tX2N1cnJlbnRIZWlnaHQpOwotICAg
IG1fc3VyZmFjZUZsYWdzID0gR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1RleHR1cmVUYXJnZXQg
fCBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzU2hhcmluZzsKLSAgICBpZiAoIXN1cmZhY2VTaXpl
LmlzRW1wdHkoKSkKLSAgICAgICAgbV9ncmFwaGljc1N1cmZhY2UgPSBHcmFwaGljc1N1cmZhY2U6
OmNyZWF0ZShzdXJmYWNlU2l6ZSwgbV9zdXJmYWNlRmxhZ3MpOworICAgICAgICBtX3BsYXRmb3Jt
U3VyZmFjZSA9IEdMU3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZSgpOworI2Vsc2UKKyAg
ICAgICAgbV9wbGF0Zm9ybVN1cmZhY2UgPSBHTFN1cmZhY2U6OmNyZWF0ZU9mZlNjcmVlblN1cmZh
Y2UoKTsKICNlbmRpZgorICAgICAgICBpZiAoIW1fcGxhdGZvcm1TdXJmYWNlKSB7CisgICAgICAg
ICAgICBtX3BsYXRmb3JtQ29udGV4dCA9IG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0LT5pbml0aWFsaXplKG1f
cGxhdGZvcm1TdXJmYWNlLmdldCgpKSB8fCAhbV9wbGF0Zm9ybUNvbnRleHQtPm1ha2VDdXJyZW50
KG1fcGxhdGZvcm1TdXJmYWNlLmdldCgpKSkgeworICAgICAgICAgICAgcmVsZWFzZVJlc291cmNl
cygpOworICAgICAgICAgICAgbV9wbGF0Zm9ybUNvbnRleHQgPSBudWxscHRyOworICAgICAgICAg
ICAgbV9wbGF0Zm9ybVN1cmZhY2UgPSBudWxscHRyOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIG1fc3VyZmFjZUhhbmRsZSA9IG1fcGxhdGZvcm1TdXJmYWNlLT5oYW5kbGUoKTsKKyAgICB9
CiB9CiAKIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZSgpCiB7Ci0gICAgaWYgKCFtX2V2YXNHTCkKLSAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1f
ZXZhc0dMU3VyZmFjZSkKLSAgICAgICAgZXZhc19nbF9zdXJmYWNlX2Rlc3Ryb3kobV9ldmFzR0ws
IG1fZXZhc0dMU3VyZmFjZSk7Cit9CiAKLSAgICBpZiAobV9ldmFzR0xDb250ZXh0KQotICAgICAg
ICBldmFzX2dsX2NvbnRleHRfZGVzdHJveShtX2V2YXNHTCwgbV9ldmFzR0xDb250ZXh0KTsKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpyZWxlYXNlUmVzb3VyY2VzKCkKK3sKKyAgICAv
LyBSZWxlYXNlIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kIGRyYXdhYmxlIG9ubHkgYWZ0ZXIgZGVz
dHJveWluZyBhbnkgYXNzb2NpYXRlZCBnbCByZXNvdXJjZXMuCisgICAgaWYgKG1fcGxhdGZvcm1D
b250ZXh0KQorICAgICAgICBtX3BsYXRmb3JtQ29udGV4dC0+ZGVzdHJveSgpOwogCi0gICAgZXZh
c19nbF9mcmVlKG1fZXZhc0dMKTsKKyAgICBpZiAobV9wbGF0Zm9ybVN1cmZhY2UpCisgICAgICAg
IG1fcGxhdGZvcm1TdXJmYWNlLT5kZXN0cm95KCk7CiAKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKLSAgICBtX2dyYXBoaWNzU3VyZmFjZS5jbGVhcigpOwotI2VuZGlmCisgICAgaWYgKG1fcGxh
dGZvcm1Db250ZXh0KQorICAgICAgICBtX3BsYXRmb3JtQ29udGV4dC0+cmVsZWFzZUN1cnJlbnQo
KTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZVN1cmZhY2UoUGFn
ZUNsaWVudEVmbCogcGFnZUNsaWVudCwgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykK
K2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVTdXJmYWNlKFBhZ2VDbGllbnRF
ZmwqLCBib29sKQogewotICAgIC8vIElmIFJlbmRlclN0eWxlIGlzIFJlbmRlck9mZnNjcmVlbiwg
d2Ugd2lsbCBiZSByZW5kZXJpbmcgdG8gYSBGQk8sCi0gICAgLy8gc28gRXZhc19HTF9TdXJmYWNl
IGhhcyBhIDF4MSBkdW1teSBzdXJmYWNlLgotICAgIGludCB3aWR0aCA9IDE7Ci0gICAgaW50IGhl
aWdodCA9IDE7Ci0KLSAgICAvLyBCdXQsIGluIGNhc2Ugb2YgUmVuZGVyRGlyZWN0bHlUb0hvc3RX
aW5kb3csIHdlIGhhdmUgdG8gcmVuZGVyIHRvIGEgcmVuZGVyIHRhcmdldCBzdXJmYWNlIHdpdGgg
dGhlIHNhbWUgc2l6ZSBhcyBvdXIgd2ViVmlldy4KLSAgICBpZiAocmVuZGVyRGlyZWN0bHlUb0hv
c3RXaW5kb3cpIHsKLSAgICAgICAgaWYgKCFwYWdlQ2xpZW50KQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAvLyBGSVhNRTogR2V0IGdlb21ldHJ5IG9mIHdlYlZpZXcgYW5kIHNl
dCBzaXplIG9mIHRhcmdldCBzdXJmYWNlLgotICAgIH0KLQotICAgIEV2YXNfR0xfQ29uZmlnIGNv
bmZpZyA9IHsKLSAgICAgICAgRVZBU19HTF9SR0JBXzg4ODgsCi0gICAgICAgIEVWQVNfR0xfREVQ
VEhfQklUXzgsCi0gICAgICAgIEVWQVNfR0xfU1RFTkNJTF9OT05FLCAvLyBGSVhNRTogc2V0IEVW
QVNfR0xfU1RFTkNJTF9CSVRfOCBhZnRlciBmaXhpbmcgRXZhc19HTCBidWcuCi0gICAgICAgIEVW
QVNfR0xfT1BUSU9OU19OT05FLAotICAgICAgICBFVkFTX0dMX01VTFRJU0FNUExFX05PTkUKLSAg
ICB9OwotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IEV2YXNfR0xfU3VyZmFjZSBvYmplY3QKLSAgICBt
X2V2YXNHTFN1cmZhY2UgPSBldmFzX2dsX3N1cmZhY2VfY3JlYXRlKG1fZXZhc0dMLCAmY29uZmln
LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBpZiAoIW1fZXZhc0dMU3VyZmFjZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlmIChy
ZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykgewotICAgICAgICBFdmFzX05hdGl2ZV9TdXJmYWNl
IG5hdGl2ZVN1cmZhY2U7Ci0gICAgICAgIC8vIEZpbGwgaW4gdGhlIE5hdGl2ZSBTdXJmYWNlIGlu
Zm9ybWF0aW9uIGZyb20gdGhlIGdpdmVuIEV2YXMgR0wgc3VyZmFjZS4KLSAgICAgICAgZXZhc19n
bF9uYXRpdmVfc3VyZmFjZV9nZXQobV9ldmFzR0wsIG1fZXZhc0dMU3VyZmFjZSwgJm5hdGl2ZVN1
cmZhY2UpOwotCi0gICAgICAgIC8vIEZJWE1FOiBDcmVhdGUgYW5kIHNwZWNpYWxseSBzZXQgdXAg
YSBldmFzX29iamVjdCB3aGljaCBhY3QgYXMgdGhlIHJlbmRlciB0YXJnZXIgc3VyZmFjZS4KLSAg
ICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiB0cnVlOworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6c2V0
Q3VycmVudEdMQ29udGV4dCh2b2lkKiBjb250ZXh0LCB2b2lkKiBzdXJmYWNlKQordm9pZCBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OnNldENvbnRleHRMb3N0Q2FsbGJhY2soUGFzc093blB0cjxH
cmFwaGljc0NvbnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjaz4gY2FsbEJhY2spCiB7Ci0gICAg
bV9nbENvbnRleHQgPSBjb250ZXh0OwotICAgIG1fZ2xTdXJmYWNlID0gc3VyZmFjZTsKKyAgICBt
X2NvbnRleHRMb3N0Q2FsbGJhY2sgPSBjYWxsQmFjazsKIH0KIAogUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
M0QoKSBjb25zdAogewotICAgIGlmIChtX3JlbmRlclN0eWxlID09IEdyYXBoaWNzQ29udGV4dDNE
OjpSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQpCi0gICAgICAgIHJldHVybiBtX2dsQ29udGV4dDsK
LQotICAgIHJldHVybiBtX2V2YXNHTENvbnRleHQ7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1Db250
ZXh0LT5oYW5kbGUoKTsKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om1ha2VD
b250ZXh0Q3VycmVudCgpCiB7Ci0gICAgcmV0dXJuIGV2YXNfZ2xfbWFrZV9jdXJyZW50KG1fZXZh
c0dMLCBtX2V2YXNHTFN1cmZhY2UsIG1fZXZhc0dMQ29udGV4dCk7CisgICAgYm9vbCByZXR1cm5W
YWx1ZSA9IG1fcGxhdGZvcm1Db250ZXh0LT5tYWtlQ3VycmVudChtX3BsYXRmb3JtU3VyZmFjZS5n
ZXQoKSk7CisKKyAgICBpZiAobV9jb250ZXh0TG9zdENhbGxiYWNrICYmICFtX3BsYXRmb3JtQ29u
dGV4dC0+aXNWYWxpZCgpKSB7CisgICAgICAgIHJldHVyblZhbHVlID0gZmFsc2U7CisgICAgICAg
IG1fY29udGV4dExvc3RDYWxsYmFjay0+b25Db250ZXh0TG9zdCgpOworICAgICAgICAvLyBGSVhN
RTogcmVzdG9yZSBjb250ZXh0CisgICAgfQorCisgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQog
CiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQpAQCAtMTgyLDI3ICsxMjksMzYgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBw
ZXIqLCBjb25zdCBGbG9hdFIKICNlbmRpZgogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NTdXJmYWNlcyhjb25z
dCBJbnRTaXplJiBzaXplKQordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdy
YXBoaWNzU3VyZmFjZXMoY29uc3QgSW50U2l6ZSYpCiB7Ci0gICAgaWYgKHNpemUuaXNFbXB0eSgp
KQotICAgICAgICBtX2dyYXBoaWNzU3VyZmFjZS5jbGVhcigpOwotICAgIGVsc2UKLSAgICAgICAg
bV9ncmFwaGljc1N1cmZhY2UgPSBHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZShzaXplLCBtX3N1cmZh
Y2VGbGFncyk7CisgICAgbV9wZW5kaW5nU3VyZmFjZVJlc2l6ZSA9IHRydWU7CiB9CiAKIHVpbnQz
Ml90IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y29weVRvR3JhcGhpY3NTdXJmYWNlKCkKIHsK
LSAgICBpZiAoIW1fZ3JhcGhpY3NTdXJmYWNlKQorICAgIGlmICghbV9wbGF0Zm9ybUNvbnRleHQg
fHwgIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIG1fZ3JhcGhpY3NTdXJmYWNlLT5jb3B5RnJvbVRleHR1cmUo
bV9jb250ZXh0LT5tX3RleHR1cmUsIEludFJlY3QoMCwgMCwgbV9jb250ZXh0LT5tX2N1cnJlbnRX
aWR0aCwgbV9jb250ZXh0LT5tX2N1cnJlbnRIZWlnaHQpKTsKLSAgICByZXR1cm4gbV9ncmFwaGlj
c1N1cmZhY2UtPnN3YXBCdWZmZXJzKCk7CisgICAgaWYgKG1fcGVuZGluZ1N1cmZhY2VSZXNpemUp
IHsKKyAgICAgICAgbV9wZW5kaW5nU3VyZmFjZVJlc2l6ZSA9IGZhbHNlOworICAgICAgICBtX3Bs
YXRmb3JtU3VyZmFjZS0+c2V0R2VvbWV0cnkoSW50UmVjdCgwLCAwLCBtX2NvbnRleHQtPm1fY3Vy
cmVudFdpZHRoLCBtX2NvbnRleHQtPm1fY3VycmVudEhlaWdodCkpOworICAgIH0KKworICAgIGlm
IChtX2NvbnRleHQtPm1fYXR0cnMuYW50aWFsaWFzKSB7CisjaWYgIVVTRShPUEVOR0xfRVNfMikK
KyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1fY29u
dGV4dC0+bV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0RS
QVdfRlJBTUVCVUZGRVJfRVhULCBtX2NvbnRleHQtPm1fZmJvKTsKKyAgICAgICAgZ2xCbGl0RnJh
bWVidWZmZXIoMCwgMCwgbV9jb250ZXh0LT5tX2N1cnJlbnRXaWR0aCwgbV9jb250ZXh0LT5tX2N1
cnJlbnRIZWlnaHQsIDAsIDAsIG1fY29udGV4dC0+bV9jdXJyZW50V2lkdGgsIG1fY29udGV4dC0+
bV9jdXJyZW50SGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOworI2VuZGlm
CisgICAgfQorCisgICAgbV9wbGF0Zm9ybVN1cmZhY2UtPnVwZGF0ZUNvbnRlbnRzKG1fY29udGV4
dC0+bV90ZXh0dXJlLCBJbnRSZWN0KDAsIDAsIG1fY29udGV4dC0+bV9jdXJyZW50V2lkdGgsIG1f
Y29udGV4dC0+bV9jdXJyZW50SGVpZ2h0KSwgbV9jb250ZXh0LT5tX2JvdW5kRkJPKTsKKyAgICBy
ZXR1cm4gMDsKIH0KIAogR3JhcGhpY3NTdXJmYWNlVG9rZW4gR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpncmFwaGljc1N1cmZhY2VUb2tlbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZ3JhcGhp
Y3NTdXJmYWNlLT5leHBvcnRUb2tlbigpOworICAgIHJldHVybiBtX3N1cmZhY2VIYW5kbGU7CiB9
CiAjZW5kaWYKIApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Vm
bC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgKaW5kZXggMWFlNDM1MS4uOWE5YzAx
YiAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUuaAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAgICBD
b3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICAgIENvcHlyaWdodCAoQykg
MjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsNiArMjEs
OCBAQAogI2lmbmRlZiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGVfaAogI2RlZmluZSBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGVfaAogCisjaWYgVVNFKDNEX0dSQVBISUNTKSB8fCBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogCiAj
aWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQpAQCAtMjcsMTQgKzMwLDExIEBACiAjZW5kaWYKIAog
I2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotI2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFjZS5oIgor
I2luY2x1ZGUgIkdMU3VyZmFjZS5oIgogI2VuZGlmCiAKLXR5cGVkZWYgc3RydWN0IF9FdmFzX0dM
ICAgICAgICAgICAgICAgRXZhc19HTDsKLXR5cGVkZWYgc3RydWN0IF9FdmFzX0dMX1N1cmZhY2Ug
ICAgICAgRXZhc19HTF9TdXJmYWNlOwotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfQ29udGV4dCAg
ICAgICBFdmFzX0dMX0NvbnRleHQ7Ci10eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9Db25maWcgICAg
ICAgIEV2YXNfR0xfQ29uZmlnOwotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfQVBJICAgICAgICAg
ICBFdmFzX0dMX0FQSTsKKyNpbmNsdWRlICJHTENvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgogCiBjbGFzcyBQYWdlQ2xpZW50RWZsOwogCkBAIC00OCw4ICs0OCwxMiBAQCBw
dWJsaWM6CiAgICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiwg
SG9zdFdpbmRvdyosIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSk7CiAgICAgfkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZSgpOwogCisgICAgYm9vbCBjcmVhdGVTdXJmYWNlKFBhZ2VDbGll
bnRFZmwqLCBib29sKTsKKwogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1H
cmFwaGljc0NvbnRleHQzRCgpIGNvbnN0OwogCisgICAgdm9pZCBzZXRDb250ZXh0TG9zdENhbGxi
YWNrKFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2s+ICBj
YWxsQmFjayk7CisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgUGxhdGZv
cm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogI2VuZGlmCkBAIC02MywyOSArNjcsMjUg
QEAgcHVibGljOgogI2VuZGlmCiAKICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IGJvb2wgY3JlYXRlU3VyZmFjZShQYWdlQ2xpZW50RWZsKiwgYm9vbCByZW5kZXJEaXJlY3RseVRv
RXZhc0dMT2JqZWN0KTsKLSAgICB2b2lkIHNldEN1cnJlbnRHTENvbnRleHQodm9pZCosIHZvaWQq
KTsKKyAgICBib29sIGNyZWF0ZVN1cmZhY2UoKTsKKyAgICB2b2lkIHJlbGVhc2VSZXNvdXJjZXMo
KTsKIAogICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKICAg
ICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwogICAgIEhvc3RXaW5kb3cqIG1faG9zdFdp
bmRvdzsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBHcmFwaGljc1N1cmZhY2U6OkZs
YWdzIG1fc3VyZmFjZUZsYWdzOwotICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IG1fZ3JhcGhp
Y3NTdXJmYWNlOworICAgIE93blB0cjxHTENvbnRleHQ+IG1fcGxhdGZvcm1Db250ZXh0OworICAg
IE93blB0cjxHTFN1cmZhY2U+IG1fcGxhdGZvcm1TdXJmYWNlOworICAgIEdyYXBoaWNzU3VyZmFj
ZVRva2VuIG1fc3VyZmFjZUhhbmRsZTsKICNlbmRpZgogCisgICAgT3duUHRyPEdyYXBoaWNzQ29u
dGV4dDNEOjpDb250ZXh0TG9zdENhbGxiYWNrPiBtX2NvbnRleHRMb3N0Q2FsbGJhY2s7CiAgICAg
TGlzdEhhc2hTZXQ8R0MzRGVudW0+IG1fc3ludGhldGljRXJyb3JzOwotCi0gICAgT3duUHRyPEVj
b3JlX0V2YXM+IG1fZWNvcmVFdmFzOwotICAgIEV2YXNfR0wqIG1fZXZhc0dMOwotICAgIEV2YXNf
R0xfQ29udGV4dCogbV9ldmFzR0xDb250ZXh0OwotICAgIEV2YXNfR0xfU3VyZmFjZSogbV9ldmFz
R0xTdXJmYWNlOwotICAgIHZvaWQqIG1fZ2xDb250ZXh0OwotICAgIHZvaWQqIG1fZ2xTdXJmYWNl
OwotICAgIEV2YXNfR0xfQVBJKiBtX2FwaTsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVy
U3R5bGUgbV9yZW5kZXJTdHlsZTsKKyAgICBib29sIG1fcGVuZGluZ1N1cmZhY2VSZXNpemU7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBHcmFwaGljc0xheWVyRWZs
X2gKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjNlYTE3NzMKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuY3BwCkBAIC0wLDAg
KzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJHTFhDb250ZXh0LmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
ICYmIEhBVkUoR0xYKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgR0xYQ29udGV4
dCAoKkdMWENSRUFURUNPTlRFWFRBVFRSSUJTQVJCUFJPQykoRGlzcGxheSosIEdMWEZCQ29uZmln
LCBHTFhDb250ZXh0LCBCb29sLCBjb25zdCBpbnQqKTsKK3N0YXRpYyBHTFhDUkVBVEVDT05URVhU
QVRUUklCU0FSQlBST0MgZ2xYQ3JlYXRlQ29udGV4dEF0dHJpYnNBUkIgPSAwOworCitzdGF0aWMg
aW50IEF0dHJpYnNbXSA9IHsKKyAgICBHTFhfQ09OVEVYVF9SRVNFVF9OT1RJRklDQVRJT05fU1RS
QVRFR1lfQVJCLAorICAgIEdMWF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfQVJCLAorICAgIDAgfTsK
Kworc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUFSQkV4dGVuc2lvbnMoKQoreworICAgIHN0YXRpYyBi
b29sIGluaXRpYWxpemVkID0gZmFsc2U7CisKKyAgICBpZiAoaW5pdGlhbGl6ZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICBnbFhDcmVhdGVDb250ZXh0
QXR0cmlic0FSQiA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0xYQ1JFQVRFQ09OVEVYVEFUVFJJQlNBUkJQ
Uk9DPihnbFhHZXRQcm9jQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0IEdMdWJ5dGUqPigi
Z2xYQ3JlYXRlQ29udGV4dEF0dHJpYnNBUkIiKSkpOworfQorCisvLyBHTFhPZmZTY3JlZW5Db250
ZXh0CisKK0dMWE9mZlNjcmVlbkNvbnRleHQ6OkdMWE9mZlNjcmVlbkNvbnRleHQoKQorICAgIDog
R0xDb250ZXh0KCkKKyAgICAsIG1fZGlzcGxheSgwKQoreworCit9CisKK2Jvb2wgR0xYT2ZmU2Ny
ZWVuQ29udGV4dDo6aW5pdGlhbGl6ZShHTFN1cmZhY2UqIHN1cmZhY2UpCit7CisgICAgaWYgKCFz
dXJmYWNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2Rpc3BsYXkgPSBzdXJmYWNl
LT5zaGFyZWREaXNwbGF5KCk7CisKKyAgICBpZiAoIW1fZGlzcGxheSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgR0xYRkJDb25maWcgY29uZmlnID0gc3VyZmFjZS0+Y29uZmlndXJhdGlv
bigpOworCisgICAgaWYgKGNvbmZpZykgeworICAgICAgICBpbml0aWFsaXplQVJCRXh0ZW5zaW9u
cygpOworCisgICAgICAgIGlmIChnbFhDcmVhdGVDb250ZXh0QXR0cmlic0FSQikKKyAgICAgICAg
ICAgIG1fY29udGV4dEhhbmRsZSA9IGdsWENyZWF0ZUNvbnRleHRBdHRyaWJzQVJCKG1fZGlzcGxh
eSwgY29uZmlnLCAwLCB0cnVlLCBBdHRyaWJzKTsKKworICAgICAgICBpZiAobV9jb250ZXh0SGFu
ZGxlKQorICAgICAgICAgICAgbV9yZXNldExvc3RDb250ZXh0ID0gdHJ1ZTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZ2xYQ3JlYXRlTmV3Q29udGV4dChtX2Rp
c3BsYXksIGNvbmZpZywgR0xYX1JHQkFfVFlQRSwgMCwgdHJ1ZSk7CisKKyAgICAgICAgaWYgKG1f
Y29udGV4dEhhbmRsZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworR0xYT2ZmU2NyZWVuQ29udGV4dDo6fkdMWE9mZlNjcmVlbkNvbnRl
eHQoKQoreworCit9CisKK2Jvb2wgR0xYT2ZmU2NyZWVuQ29udGV4dDo6aXNDdXJyZW50Q29udGV4
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dEhhbmRsZSA9PSBnbFhHZXRDdXJyZW50
Q29udGV4dCgpOworfQorCitib29sIEdMWE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRmb3JtTWFrZUN1
cnJlbnQoR0xTdXJmYWNlKiBzdXJmYWNlKQoreworICAgIHJldHVybiBnbFhNYWtlQ3VycmVudChz
dXJmYWNlLT5zaGFyZWREaXNwbGF5KCksIHN1cmZhY2UtPmhhbmRsZSgpLmZyb250QnVmZmVySGFu
ZGxlLCBtX2NvbnRleHRIYW5kbGUpOworfQorCit2b2lkIEdMWE9mZlNjcmVlbkNvbnRleHQ6OnBs
YXRmb3JtUmVsZWFzZUN1cnJlbnQoKQoreworICAgIGdsWE1ha2VDdXJyZW50KG1fZGlzcGxheSwg
MCwgMCk7Cit9CisKK3ZvaWQgR0xYT2ZmU2NyZWVuQ29udGV4dDo6ZnJlZVJlc291cmNlcygpCit7
CisgICAgaWYgKG1fY29udGV4dEhhbmRsZSkKKyAgICAgICAgZ2xYRGVzdHJveUNvbnRleHQobV9k
aXNwbGF5LCBtX2NvbnRleHRIYW5kbGUpOworCisgICAgbV9jb250ZXh0SGFuZGxlID0gMDsKKyAg
ICBtX2Rpc3BsYXkgPSAwOworfQorCit2b2lkIEdMWE9mZlNjcmVlbkNvbnRleHQ6OmRlc3Ryb3ko
KQoreworICAgIGZyZWVSZXNvdXJjZXMoKTsKKyAgICBHTENvbnRleHQ6OmRlc3Ryb3koKTsKK30K
KworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYWE0MTIzNAotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR0xYQ29udGV4dF9oCisjZGVmaW5lIEdMWENvbnRl
eHRfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBIQVZFKEdMWCkKKwor
I2luY2x1ZGUgIkdMQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdM
WEN1cnJlbnRDb250ZXh0V3JhcHBlciA6IHB1YmxpYyBHTENvbnRleHQgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcik7CisKK3B1YmxpYzoKKyAgICBH
TFhDdXJyZW50Q29udGV4dFdyYXBwZXIoKQorICAgICAgICA6IEdMQ29udGV4dCgpCisgICAgewor
ICAgICAgICBtX2NvbnRleHRIYW5kbGUgPSBnbFhHZXRDdXJyZW50Q29udGV4dCgpOworICAgIH0K
KworICAgIHZpcnR1YWwgfkdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcigpIHsgfQorfTsKKworY2xh
c3MgR0xYT2ZmU2NyZWVuQ29udGV4dCA6IHB1YmxpYyBHTENvbnRleHQgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEdMWE9mZlNjcmVlbkNvbnRleHQpOworCitwdWJsaWM6CisgICAgR0xYT2Zm
U2NyZWVuQ29udGV4dCgpOworICAgIHZpcnR1YWwgfkdMWE9mZlNjcmVlbkNvbnRleHQoKTsKKyAg
ICBib29sIGluaXRpYWxpemUoR0xTdXJmYWNlKik7CisgICAgYm9vbCBwbGF0Zm9ybU1ha2VDdXJy
ZW50KEdMU3VyZmFjZSopOworICAgIHZvaWQgcGxhdGZvcm1SZWxlYXNlQ3VycmVudCgpOworICAg
IHZvaWQgZGVzdHJveSgpOworICAgIGJvb2wgaXNDdXJyZW50Q29udGV4dCgpIGNvbnN0OworCitw
cml2YXRlOgorICAgIHZvaWQgZnJlZVJlc291cmNlcygpOworICAgIERpc3BsYXkqIG1fZGlzcGxh
eTsKK307CisKK30KKworI2VuZGlmIC8vIEdMWENVUlJFTlRDT05URVhXUkFQUEVSX0gKKworI2Vu
ZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L0dMWFN1cmZhY2UuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2dseC9HTFhTdXJmYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li45ZmE0NmMxCi0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcApAQCAtMCwwICsxLDIxNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiR0xYU3VyZmFj
ZS5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBIQVZFKEdMWCkKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitTaGFyZWRYMTFSZXNvdXJjZXMqIFNoYXJlZFgxMVJlc291
cmNlczo6bV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9IDA7CisKK3N0YXRpYyBjb25zdCBpbnQgcGJ1
ZmZlckF0dHJpYnV0ZXNbXSA9IHsgR0xYX1BCVUZGRVJfV0lEVEgsIDEsIEdMWF9QQlVGRkVSX0hF
SUdIVCwgMSwgMCB9OworCitHTFhTdXJmYWNlOjpHTFhTdXJmYWNlKCkKKyAgICA6IEdMU3VyZmFj
ZSgpCit7CisgICAgbV9zaGFyZWRSZXNvdXJjZXMgPSBTaGFyZWRYMTFSZXNvdXJjZXM6OmNyZWF0
ZSgpOworICAgIG1fc2hhcmVkRGlzcGxheSA9IG1fc2hhcmVkUmVzb3VyY2VzLT5kaXNwbGF5KCk7
Cit9CisKK0dMWFN1cmZhY2U6On5HTFhTdXJmYWNlKCkKK3sKKworfQorCitYVmlzdWFsSW5mbyog
R0xYU3VyZmFjZTo6dmlzdWFsSW5mbygpCit7CisgICAgcmV0dXJuIG1fc2hhcmVkUmVzb3VyY2Vz
LT52aXN1YWxJbmZvKCk7Cit9CisKK1dpbmRvdyBHTFhTdXJmYWNlOjp4V2luZG93KCkKK3sKKyAg
ICByZXR1cm4gbV9zaGFyZWRSZXNvdXJjZXMtPmdldFhXaW5kb3coKTsKK30KKworR0xYRkJDb25m
aWcgR0xYU3VyZmFjZTo6cEJ1ZmZlckNvbmZpZygpCit7CisgICAgcmV0dXJuIG1fc2hhcmVkUmVz
b3VyY2VzLT5wQnVmZmVyQ29udGV4dENvbmZpZygpOworfQorCitHTFhGQkNvbmZpZyBHTFhTdXJm
YWNlOjp0cmFuc3BvcnRTdXJmYWNlQ29uZmlnKCkKK3sKKyAgICByZXR1cm4gbV9zaGFyZWRSZXNv
dXJjZXMtPnN1cmZhY2VDb250ZXh0Q29uZmlnKCk7Cit9CisKK2Jvb2wgR0xYU3VyZmFjZTo6aXNY
UmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkKK3sKKyAgICByZXR1cm4gbV9zaGFyZWRSZXNvdXJj
ZXMtPmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpOworfQorCisvLyBHTFhUcmFuc3BvcnRT
dXJmYWNlCisKK0dMWFRyYW5zcG9ydFN1cmZhY2U6OkdMWFRyYW5zcG9ydFN1cmZhY2UoKQorICAg
IDogR0xYU3VyZmFjZSgpCit7CisgICAgaW5pdGlhbGl6ZSgpOworfQorCitHTFhUcmFuc3BvcnRT
dXJmYWNlOjp+R0xYVHJhbnNwb3J0U3VyZmFjZSgpCit7CisKK30KKworUGxhdGZvcm1TdXJmYWNl
Q29uZmlnIEdMWFRyYW5zcG9ydFN1cmZhY2U6OmNvbmZpZ3VyYXRpb24oKQoreworICAgIHJldHVy
biB0cmFuc3BvcnRTdXJmYWNlQ29uZmlnKCk7Cit9CisKK3ZvaWQgR0xYVHJhbnNwb3J0U3VyZmFj
ZTo6c3dhcEJ1ZmZlcnMoKQoreworICAgIGlmIChtX2RyYXdhYmxlKSB7CisgICAgICAgIGlmICht
X3Jlc3RvcmVOZWVkZWQpIHsKKyAgICAgICAgICAgIEdMaW50IG9sZEZCTzsKKyAgICAgICAgICAg
IGdsR2V0SW50ZWdlcnYoR0xfRlJBTUVCVUZGRVJfQklORElORywgJm9sZEZCTyk7CisgICAgICAg
ICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7CisgICAgICAgICAgICBn
bFhTd2FwQnVmZmVycyhzaGFyZWREaXNwbGF5KCksIG1fZHJhd2FibGUpOworICAgICAgICAgICAg
Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG9sZEZCTyk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgZ2xYU3dhcEJ1ZmZlcnMoc2hhcmVkRGlzcGxheSgpLCBtX2RyYXdhYmxl
KTsKKyAgICB9Cit9CisKK3ZvaWQgR0xYVHJhbnNwb3J0U3VyZmFjZTo6c2V0R2VvbWV0cnkoY29u
c3QgSW50UmVjdCYgbmV3UmVjdCkKK3sKKyAgICBHTFN1cmZhY2U6OnNldEdlb21ldHJ5KG5ld1Jl
Y3QpOworICAgIGludCB3aWR0aCA9IG5ld1JlY3Qud2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0g
bmV3UmVjdC5oZWlnaHQoKTsKKyAgICBYUmVzaXplV2luZG93KHNoYXJlZERpc3BsYXkoKSwgbV9k
cmF3YWJsZSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR0xYVHJhbnNwb3J0U3VyZmFjZTo6
aW5pdGlhbGl6ZSgpCit7CisgICAgRGlzcGxheSogZGlzcGxheSA9IHNoYXJlZERpc3BsYXkoKTsK
KyAgICBHTFhGQkNvbmZpZyBjb25maWcgPSB0cmFuc3BvcnRTdXJmYWNlQ29uZmlnKCk7CisKKyAg
ICBpZiAoIWNvbmZpZykKKyAgICAgICAgcmV0dXJuOworCisgICAgWFZpc3VhbEluZm8qIHZpc0lu
Zm8gPSAgdmlzdWFsSW5mbygpOworCisgICAgaWYgKCF2aXNJbmZvKQorICAgICAgICByZXR1cm47
CisKKyAgICBDb2xvcm1hcCBjbWFwID0gWENyZWF0ZUNvbG9ybWFwKGRpc3BsYXksIHhXaW5kb3co
KSwgdmlzSW5mby0+dmlzdWFsLCBBbGxvY05vbmUpOworICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVz
IGE7CisgICAgYS5iYWNrZ3JvdW5kX3BpeGVsID0gV2hpdGVQaXhlbChkaXNwbGF5LCAwKTsKKyAg
ICBhLmJvcmRlcl9waXhlbCA9IEJsYWNrUGl4ZWwoZGlzcGxheSwgMCk7CisgICAgYS5jb2xvcm1h
cCA9IGNtYXA7CisgICAgbV9kcmF3YWJsZSAgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXksIHhXaW5k
b3coKSwgMCwgMCwgMSwgMSwgMCwgdmlzSW5mby0+ZGVwdGgsIElucHV0T3V0cHV0LCB2aXNJbmZv
LT52aXN1YWwsIENXQmFja1BpeGVsIHwgQ1dCb3JkZXJQaXhlbCB8IENXQ29sb3JtYXAsICZhKTsK
KworICAgIGlmICghbV9kcmF3YWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgWFNldFdpbmRv
d0JhY2tncm91bmRQaXhtYXAoZGlzcGxheSwgbV9kcmF3YWJsZSwgMCk7CisgICAgWENvbXBvc2l0
ZVJlZGlyZWN0V2luZG93KGRpc3BsYXksIG1fZHJhd2FibGUsIENvbXBvc2l0ZVJlZGlyZWN0TWFu
dWFsKTsKKworICAgIGlmIChpc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSkKKyAgICAgICAg
WE1hcFdpbmRvdyhkaXNwbGF5LCBtX2RyYXdhYmxlKTsKK30KKwordm9pZCBHTFhUcmFuc3BvcnRT
dXJmYWNlOjpkZXN0cm95KCkKK3sKKyAgICBmcmVlUmVzb3VyY2VzKCk7CisgICAgR0xTdXJmYWNl
OjpkZXN0cm95KCk7Cit9CisKK3ZvaWQgR0xYVHJhbnNwb3J0U3VyZmFjZTo6ZnJlZVJlc291cmNl
cygpCit7CisgICAgaWYgKCFtX2RyYXdhYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBHTFN1
cmZhY2U6OmRlc3Ryb3koKTsKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gc2hhcmVkRGlzcGxheSgp
OworCisgICAgaWYgKCFkaXNwbGF5KQorICAgICAgICByZXR1cm47CisKKyAgICBYRGVzdHJveVdp
bmRvdyhkaXNwbGF5LCBtX2RyYXdhYmxlKTsKKyAgICBtX2RyYXdhYmxlID0gMDsKK30KKworLy8g
R0xYIFBCVUZGRVIgU1VSRkFDRQorCitHTFhQQnVmZmVyOjpHTFhQQnVmZmVyKCkKKyAgICA6R0xY
U3VyZmFjZSgpCit7CisgICAgaW5pdGlhbGl6ZSgpOworfQorCitHTFhQQnVmZmVyOjp+R0xYUEJ1
ZmZlcigpCit7CisKK30KKwordm9pZCBHTFhQQnVmZmVyOjppbml0aWFsaXplKCkKK3sKKyAgICBE
aXNwbGF5KiBkaXNwbGF5ID0gc2hhcmVkRGlzcGxheSgpOworICAgIEdMWEZCQ29uZmlnIGNvbmZp
ZyA9IHBCdWZmZXJDb25maWcoKTsKKworICAgIGlmICghY29uZmlnKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2RyYXdhYmxlID0gZ2xYQ3JlYXRlUGJ1ZmZlcihkaXNwbGF5LCBjb25maWcsIHBi
dWZmZXJBdHRyaWJ1dGVzKTsKK30KKworUGxhdGZvcm1TdXJmYWNlQ29uZmlnIEdMWFBCdWZmZXI6
OmNvbmZpZ3VyYXRpb24oKQoreworICAgIHJldHVybiBwQnVmZmVyQ29uZmlnKCk7Cit9CisKK3Zv
aWQgR0xYUEJ1ZmZlcjo6ZGVzdHJveSgpCit7CisgICAgZnJlZVJlc291cmNlcygpOworfQorCit2
b2lkIEdMWFBCdWZmZXI6OmZyZWVSZXNvdXJjZXMoKQoreworICAgIGlmICghbV9kcmF3YWJsZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgR0xTdXJmYWNlOjpkZXN0cm95KCk7CisgICAgRGlzcGxh
eSogZGlzcGxheSA9IHNoYXJlZERpc3BsYXkoKTsKKworICAgIGlmICghZGlzcGxheSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZ2xYRGVzdHJveVBidWZmZXIoZGlzcGxheSwgbV9kcmF3YWJsZSk7
CisgICAgbV9kcmF3YWJsZSA9IDA7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNDVhZDAKLS0tIC9kZXYvbnVsbAor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZh
Y2UuaApAQCAtMCwwICsxLDI5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBD
b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHTFhT
dXJmYWNlX2gKKyNkZWZpbmUgR0xYU3VyZmFjZV9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpICYmIEhBVkUoR0xYKQorCisjaW5jbHVkZSAiR0xTdXJmYWNlLmgiCisKKyNpbmNs
dWRlIDxYMTEvZXh0ZW5zaW9ucy9YY29tcG9zaXRlLmg+CisjaW5jbHVkZSA8WDExL2V4dGVuc2lv
bnMvWHJlbmRlci5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFNoYXJlZFgxMVJlc291cmNlcyA6IHB1YmxpYyBXVEY6OlJlZkNv
dW50ZWRCYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTaGFyZWRYMTFSZXNvdXJjZXMp
OworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkWDExUmVzb3VyY2VzPiBj
cmVhdGUoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3N0YXRpY1NoYXJlZFJlc291cmNlKQorICAg
ICAgICAgICAgbV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9ICBuZXcgU2hhcmVkWDExUmVzb3VyY2Vz
KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fc3RhdGljU2hhcmVkUmVzb3VyY2UtPnJl
ZigpOworCisgICAgICAgIHJldHVybiBhZG9wdFJlZihtX3N0YXRpY1NoYXJlZFJlc291cmNlKTsK
KyAgICB9CisKKyAgICB2b2lkIGRlcmVmKCkKKyAgICB7CisgICAgICAgIGlmIChkZXJlZkJhc2Uo
KSkgeworICAgICAgICAgICAgbV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9IDA7CisgICAgICAgICAg
ICBkZWxldGUgdGhpczsKKyAgICAgICAgfQorICAgIH0KKworICAgIFdpbmRvdyBnZXRYV2luZG93
KCkKKyAgICB7CisgICAgICAgIGlmICghbV93aW5kb3cpIHsKKyAgICAgICAgICAgIERpc3BsYXkq
IGRweSA9IGRpc3BsYXkoKTsKKyAgICAgICAgICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIGF0dHJp
YnV0ZXM7CisgICAgICAgICAgICBhdHRyaWJ1dGVzLm92ZXJyaWRlX3JlZGlyZWN0ID0gdHJ1ZTsK
KyAgICAgICAgICAgIG1fd2luZG93ID0gWENyZWF0ZVNpbXBsZVdpbmRvdyhkcHksIFhEZWZhdWx0
Um9vdFdpbmRvdyhkcHkpLCAtMSwgLTEsIDEsIDEsIDAsIEJsYWNrUGl4ZWwoZHB5LCAwKSwgV2hp
dGVQaXhlbChkcHksIDApKTsKKyAgICAgICAgICAgIC8vIEZyb20gaHR0cDovL3Ryb25jaGUuY29t
L2d1aS94L3hsaWIvd2luZG93L2F0dHJpYnV0ZXMvCisgICAgICAgICAgICBYQ2hhbmdlV2luZG93
QXR0cmlidXRlcyhkcHksIG1fd2luZG93LCBDV092ZXJyaWRlUmVkaXJlY3QsICZhdHRyaWJ1dGVz
KTsKKyAgICAgICAgICAgIFhNYXBXaW5kb3coZHB5LCBtX3dpbmRvdyk7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gbV93aW5kb3c7CisgICAgfQorCisgICAgRGlzcGxheSogZGlzcGxheSgp
CisgICAgeworICAgICAgICBpZiAoIW1fZGlzcGxheSkKKyAgICAgICAgICAgIG1fZGlzcGxheSA9
IFhPcGVuRGlzcGxheSgwKTsKKworICAgICAgICByZXR1cm4gbV9kaXNwbGF5OworICAgIH0KKwor
ICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvKCkKKyAgICB7CisgICAgICAgIGlmICghbV9WaXN1
YWxJbmZvKQorICAgICAgICAgICAgc3VyZmFjZUNvbnRleHRDb25maWcoKTsKKworICAgICAgICBy
ZXR1cm4gbV9WaXN1YWxJbmZvOworICAgIH0KKworICAgIEdMWEZCQ29uZmlnIGNyZWF0ZUNvbmZp
Zyhjb25zdCBpbnQgYXR0cmlidXRlc1tdKQorICAgIHsKKyAgICAgICAgaW50IG51bVJldHVybmVk
OworICAgICAgICBtX1Zpc3VhbEluZm8gPSAwOworICAgICAgICBHTFhGQkNvbmZpZyogdGVtcCA9
IGdsWENob29zZUZCQ29uZmlnKGRpc3BsYXkoKSwgRGVmYXVsdFNjcmVlbihkaXNwbGF5KCkpLCBh
dHRyaWJ1dGVzLCAmbnVtUmV0dXJuZWQpOworCisgICAgICAgIGlmICghbnVtUmV0dXJuZWQpCisg
ICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBHTFhGQkNvbmZpZyBzZWxlY3RlZENvbmZp
ZyA9IDA7CisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG51bVJldHVybmVkOyArK2kpIHsKKyAgICAgICAgICAgIG1fVmlzdWFsSW5mbyA9
IGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyhkaXNwbGF5KCksIHRlbXBbaV0pOworCisgICAgICAg
ICAgICBpZiAoIW1fVmlzdWFsSW5mbykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICAgICAgaWYgKG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uKSB7CisgICAgICAgICAgICAg
ICAgWFJlbmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFsRm9ybWF0KGRp
c3BsYXkoKSwgbV9WaXN1YWxJbmZvLT52aXN1YWwpOworICAgICAgICAgICAgICAgIGlmIChmb3Jt
YXQgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrID4gMCkgeworICAgICAgICAgICAgICAgICAg
ICBzZWxlY3RlZENvbmZpZyA9IHRlbXBbaV07CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIGlmIChtX1Zpc3VhbEluZm8tPmRlcHRoID09IDMyKSB7CisgICAgICAg
ICAgICAgICAgc2VsZWN0ZWRDb25maWcgPSB0ZW1wW2ldOworICAgICAgICAgICAgICAgIGZvdW5k
ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIERpZG5vdCBm
aW5kIGFueSB2aXN1YWwgc3VwcG9ydGluZyBhbHBoYSwgc2VsZWN0IHRoZSBmaXJzdCBhdmFpbGFi
bGUgY29uZmlnLgorICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICBzZWxlY3RlZENv
bmZpZyA9IHRlbXBbMF07CisgICAgICAgICAgICBtX1Zpc3VhbEluZm8gPSBnbFhHZXRWaXN1YWxG
cm9tRkJDb25maWcobV9kaXNwbGF5LCB0ZW1wWzBdKTsKKyAgICAgICAgfQorCisgICAgICAgIFhG
cmVlKHRlbXApOworCisgICAgICAgIHJldHVybiBzZWxlY3RlZENvbmZpZzsKKyAgICB9CisKKyAg
ICBHTFhGQkNvbmZpZyBwQnVmZmVyQ29udGV4dENvbmZpZygpCisgICAgeworICAgICAgICBpZiAo
IW1fcGJ1ZmZlcmZiQ29uZmlnKSB7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgaW50IGF0dHJp
YnV0ZXNbXSA9IHsKKyAgICAgICAgICAgICAgICBHTFhfTEVWRUwsIDAsCisgICAgICAgICAgICAg
ICAgR0xYX0RSQVdBQkxFX1RZUEUsIEdMWF9QQlVGRkVSX0JJVCwKKyAgICAgICAgICAgICAgICBH
TFhfUkVOREVSX1RZUEUsICAgR0xYX1JHQkFfQklULAorICAgICAgICAgICAgICAgIEdMWF9SRURf
U0laRSwgICAgICAxLAorICAgICAgICAgICAgICAgIEdMWF9HUkVFTl9TSVpFLCAgICAxLAorICAg
ICAgICAgICAgICAgIEdMWF9CTFVFX1NJWkUsICAgICAxLAorICAgICAgICAgICAgICAgIEdMWF9E
T1VCTEVCVUZGRVIsICBHTF9GQUxTRSwKKyAgICAgICAgICAgICAgICBOb25lCisgICAgICAgICAg
ICB9OworCisgICAgICAgICAgICBpbnQgbnVtUmV0dXJuZWQ7CisgICAgICAgICAgICBHTFhGQkNv
bmZpZyogdGVtcCA9IGdsWENob29zZUZCQ29uZmlnKGRpc3BsYXkoKSwgRGVmYXVsdFNjcmVlbihk
aXNwbGF5KCkpLCBhdHRyaWJ1dGVzLCAmbnVtUmV0dXJuZWQpOworICAgICAgICAgICAgaWYgKG51
bVJldHVybmVkKQorICAgICAgICAgICAgICAgIG1fcGJ1ZmZlcmZiQ29uZmlnID0gIHRlbXBbMF07
CisgICAgICAgICAgICBYRnJlZSh0ZW1wKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBt
X3BidWZmZXJmYkNvbmZpZzsKKyAgICB9CisKKyAgICBHTFhGQkNvbmZpZyBzdXJmYWNlQ29udGV4
dENvbmZpZygpCisgICAgeworICAgICAgICBpZiAoIW1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZykg
eworICAgICAgICAgICAgc3RhdGljIGludCBhdHRyaWJ1dGVzW10gPSB7CisgICAgICAgICAgICAg
ICAgR0xYX0xFVkVMLCAwLAorICAgICAgICAgICAgICAgIEdMWF9EUkFXQUJMRV9UWVBFLCBHTFhf
V0lORE9XX0JJVCwKKyAgICAgICAgICAgICAgICBHTFhfUkVOREVSX1RZUEUsICAgR0xYX1JHQkFf
QklULAorICAgICAgICAgICAgICAgIEdMWF9SRURfU0laRSwgICAgICAxLAorICAgICAgICAgICAg
ICAgIEdMWF9HUkVFTl9TSVpFLCAgICAxLAorICAgICAgICAgICAgICAgIEdMWF9CTFVFX1NJWkUs
ICAgICAxLAorICAgICAgICAgICAgICAgIEdMWF9BTFBIQV9TSVpFLCAgICAxLAorICAgICAgICAg
ICAgICAgIEdMWF9ERVBUSF9TSVpFLCAgICAxLAorICAgICAgICAgICAgICAgIEdMWF9YX1ZJU1VB
TF9UWVBFLCBHTFhfVFJVRV9DT0xPUiwKKyAgICAgICAgICAgICAgICBHTFhfRE9VQkxFQlVGRkVS
LCAgVHJ1ZSwKKyAgICAgICAgICAgICAgICBOb25lCisgICAgICAgICAgICB9OworCisgICAgICAg
ICAgICBpbnQgZXZlbnRCYXNlcCwgZXJyb3JCYXNlcDsKKyAgICAgICAgICAgIG1fc3VwcG9ydHNY
UmVuZGVyRXh0ZW5zaW9uID0gWFJlbmRlclF1ZXJ5RXh0ZW5zaW9uKGRpc3BsYXkoKSwgJmV2ZW50
QmFzZXAsICZlcnJvckJhc2VwKTsKKworICAgICAgICAgICAgbV9zdXJmYWNlQ29udGV4dGZiQ29u
ZmlnID0gY3JlYXRlQ29uZmlnKGF0dHJpYnV0ZXMpOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZzsKKyAgICB9CisKKyAgICBib29sIGlzWFJlbmRl
ckV4dGVuc2lvblN1cHBvcnRlZCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9zdXBwb3J0c1hS
ZW5kZXJFeHRlbnNpb247CisgICAgfQorCitwcml2YXRlOgorICAgIFNoYXJlZFgxMVJlc291cmNl
cygpCisgICAgICAgIDogbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24oZmFsc2UpCisgICAgICAg
ICwgbV9tYXJrRm9yRGVsZXRpb24oZmFsc2UpCisgICAgICAgICwgbV93aW5kb3coMCkKKyAgICAg
ICAgLCBtX2Rpc3BsYXkoMCkKKyAgICAgICAgLCBtX3BidWZmZXJmYkNvbmZpZygwKQorICAgICAg
ICAsIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZygwKQorICAgICAgICAsIG1fVmlzdWFsSW5mbygw
KQorICAgIHsKKworICAgIH0KKworICAgIH5TaGFyZWRYMTFSZXNvdXJjZXMoKQorICAgIHsKKyAg
ICAgICAgaWYgKCFtX2Rpc3BsYXkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYg
KG1fd2luZG93KSB7CisgICAgICAgICAgICBYVW5tYXBXaW5kb3cobV9kaXNwbGF5LCBtX3dpbmRv
dyk7CisgICAgICAgICAgICBYRGVzdHJveVdpbmRvdyhtX2Rpc3BsYXksIG1fd2luZG93KTsKKyAg
ICAgICAgICAgIG1fd2luZG93ID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3BidWZm
ZXJmYkNvbmZpZykKKyAgICAgICAgICAgIG1fcGJ1ZmZlcmZiQ29uZmlnID0gMDsKKworICAgICAg
ICBpZiAobV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnKQorICAgICAgICAgICAgbV9zdXJmYWNlQ29u
dGV4dGZiQ29uZmlnID0gMDsKKworICAgICAgICBpZiAobV9WaXN1YWxJbmZvKSB7CisgICAgICAg
ICAgICBYRnJlZShtX1Zpc3VhbEluZm8pOworICAgICAgICAgICAgbV9WaXN1YWxJbmZvID0gMDsK
KyAgICAgICAgfQorCisgICAgICAgIFhDbG9zZURpc3BsYXkobV9kaXNwbGF5KTsKKyAgICAgICAg
bV9kaXNwbGF5ID0gMDsKKyAgICB9CisKKyAgICBzdGF0aWMgU2hhcmVkWDExUmVzb3VyY2VzKiBt
X3N0YXRpY1NoYXJlZFJlc291cmNlOworICAgIGJvb2wgbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNp
b247CisgICAgYm9vbCBtX21hcmtGb3JEZWxldGlvbjsKKyAgICBXaW5kb3cgbV93aW5kb3c7Cisg
ICAgRGlzcGxheSogbV9kaXNwbGF5OworICAgIEdMWEZCQ29uZmlnIG1fcGJ1ZmZlcmZiQ29uZmln
OworICAgIEdMWEZCQ29uZmlnIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZzsKKyAgICBYVmlzdWFs
SW5mbyogbV9WaXN1YWxJbmZvOworfTsKKworY2xhc3MgR0xYU3VyZmFjZSA6IHB1YmxpYyBHTFN1
cmZhY2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdMWFN1cmZhY2UpOworCitwdWJsaWM6
CisgICAgR0xYU3VyZmFjZSgpOworICAgIHZpcnR1YWwgfkdMWFN1cmZhY2UoKTsKKworcHJvdGVj
dGVkOgorICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvKCk7CisgICAgV2luZG93IHhXaW5kb3co
KTsKKyAgICBHTFhGQkNvbmZpZyBwQnVmZmVyQ29uZmlnKCk7CisgICAgR0xYRkJDb25maWcgdHJh
bnNwb3J0U3VyZmFjZUNvbmZpZygpOworICAgIGJvb2wgaXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9y
dGVkKCk7CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPFNoYXJlZFgxMVJlc291cmNlcz4gbV9zaGFy
ZWRSZXNvdXJjZXM7Cit9OworCitjbGFzcyBHTFhUcmFuc3BvcnRTdXJmYWNlIDogcHVibGljIEdM
WFN1cmZhY2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdMWFRyYW5zcG9ydFN1cmZhY2Up
OworCitwdWJsaWM6CisgICAgR0xYVHJhbnNwb3J0U3VyZmFjZSgpOworICAgIHZpcnR1YWwgfkdM
WFRyYW5zcG9ydFN1cmZhY2UoKTsKKyAgICBQbGF0Zm9ybVN1cmZhY2VDb25maWcgY29uZmlndXJh
dGlvbigpOworICAgIHZvaWQgc3dhcEJ1ZmZlcnMoKTsKKyAgICB2b2lkIHNldEdlb21ldHJ5KGNv
bnN0IEludFJlY3QmIG5ld1JlY3QpOworICAgIHZvaWQgZGVzdHJveSgpOworCitwcml2YXRlOgor
ICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIHZvaWQgZnJlZVJlc291cmNlcygpOworfTsKKwor
Y2xhc3MgR0xYUEJ1ZmZlciA6IHB1YmxpYyBHTFhTdXJmYWNlIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShHTFhQQnVmZmVyKTsKKworcHVibGljOgorICAgIEdMWFBCdWZmZXIoKTsKKyAgICB2
aXJ0dWFsIH5HTFhQQnVmZmVyKCk7CisgICAgUGxhdGZvcm1TdXJmYWNlQ29uZmlnIGNvbmZpZ3Vy
YXRpb24oKTsKKyAgICB2b2lkIGRlc3Ryb3koKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGluaXRp
YWxpemUoKTsKKyAgICB2b2lkIGZyZWVSZXNvdXJjZXMoKTsKK307CisKK30KKworI2VuZGlmCisK
KyNlbmRpZgo=
</data>
<flag name="commit-queue"
          id="189717"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174605</attachid>
            <date>2012-11-15 21:38:35 -0800</date>
            <delta_ts>2012-11-16 00:20:08 -0800</delta_ts>
            <desc>Added missing file</desc>
            <filename>rebased2.patch</filename>
            <type>text/plain</type>
            <size>67602</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDA1MjgwMGYuLjNlNDZhZmUgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3NCBAQAorMjAx
Mi0xMS0xNSAgS29uZGFwYWxseSBLYWx5YW4gIDxrYWx5YW4ua29uZGFwYWxseUBpbnRlbC5jb20+
CisKKyAgICAgICAgW0VGTF0gUmVmYWN0b3IgR3JhcGhpY3NDb250ZXh0M0RFRkwuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDEyOTEuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0
M0RFZmwgY3JlYXRlcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUsIHdoaWNoIGFjdHMgYXMgaXRz
IHBsYXRmb3JtIExheWVyLgorICAgICAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUgbmVlZHMg
dG8gaGFuZGxlIHRoZSBmb2xsb3dpbmcgY2FzZXM6CisgICAgICAgIDEpIFRvIHByb3ZpZGUgYW4g
b2ZmLXNjcmVlbiBidWZmZXIgZm9yIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW9uLgorICAgICAgICAy
KSBSZW5kZXIgdG8gYSBjdXJyZW50IGNvbnRleHQuCisgICAgICAgIDMpIFRvIHJlbmRlciBkaXJl
Y3RseSB0byBob3N0IHdpbmRvdy4gKGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLikKKworICAgICAg
ICBCZWZvcmUgdGhpcyBwYXRjaCBFdmFzIHdhcyB1c2VkIHRvIHByb3ZpZGUgdXMgYW4gb2ZmLXNj
cmVlbiBjb250ZXh0IGFuZCBidWZmZXIuIEdMWCB3YXMgdXNlZCBpbgorICAgICAgICB0aGUgb3Ro
ZXIgc3VwcG9ydGVkIGNhc2UuIEV2YXMgYWN0cyBhcyBhIGdsdWUgbGF5ZXIgdG8gcHJvdmlkZSB1
cyB3aXRoIGFwcHJvcHJpYXRlCisgICAgICAgIEdMIGJpbmRpbmdzIChPcGVuR0wgZnVuY3Rpb25z
KSwgR0wgY29udGV4dCBhbmQgZHJhd2FibGUgKHN1cmZhY2Uvb2Zmc2NyZWVuYnVmZmVyKS4KKyAg
ICAgICAgSG93ZXZlciwgcHJpbWl0aXZlIHJlbmRlcmluZyBpcyBoYW5kbGVkIGJ5IFRleHR1cmVN
YXBwZXIgYW5kIE9wZW5HTFNoaW1zIGlzIHVzZWQgdG8gbG9hZCB0aGUgbmVlZGVkIEdMIGZ1bmN0
aW9ucy4KKworICAgICAgICBJdCB3b3VsZCBiZSBmb3Igb3VyIGFkdmFudGFnZSB0byBiZSBhYmxl
IHRvIHRha2UgaW4gdG8gdXNlIGFueSBvcHRpbWlzYXRpb25zL2V4dGVuc2lvbnMKKyAgICAgICAg
cHJvdmlkZWQgYnkgdW5kZXJseWluZyBkcml2ZXJzLCBzcGVjaWZpYyB0byBhIHBsYXRmb3JtIChl
LmcuIEdMWF9NRVNBX2NvcHlfc3ViX2J1ZmZlciBldGMuKS4KKyAgICAgICAgVGhpcyBwYXRjaCBp
bnRyb2R1Y2VzIGFuIGFic3RyYWN0aW9uIGxheWVyIHRvIG1ha2UgaXQgZWFzeSB0byBhZGQgc3Vw
cG9ydCBmb3IgYW55IEdMIGJhY2tlbmQgKEdMWCwgRUdMIGV0Yy4pCisgICAgICAgIGFuZCBkbyBh
bnkgcGxhdGZvcm0gc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBhcyBuZWVkZWQgd2l0aG91dCBjb21w
bGljYXRpbmcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlIGNsYXNzLgorICAgICAgICBUd28gbmV3
IGNsYXNzZXMgYXJlIGFkZGVkIHdpdGggdGhpcyBpbXBsZW1lbnRhdGlvbiwgR0xDb250ZXh0IGFu
ZCBHTFN1cmZhY2UuCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSB3b3VsZCBjcmVh
dGUgYW5kIG93biBhIEdMQ29udGV4dCBhbmQgR0xTdXJmYWNlLgorCisgICAgICAgIEdMQ29udGV4
dCBlbmNhcHN1bGF0ZXMgYW4gT3BlbkdMIGNvbnRleHQgaGlkaW5nIGFueSBwbGF0Zm9ybSBzcGVj
aWZpYyBtYW5hZ2VtZW50LgorICAgICAgICBJdCB1c2VzIEdMIGV4dGVuc2lvbiBBUkJfcm9idXN0
bmVzcyAod2hlbiBhdmFpbGFibGUpIHRvIGRldGVjdCBkcml2ZXIgcmVzZXRzLgorICAgICAgICBJ
dCBkZWZpbmVzIGEgc2ltcGxlIGludGVyZmFjZSBmb3IgdGhpbmdzIHRoYXQgbmVlZCB0byBiZSBo
YW5kbGVkIGJ5IHRoZSBjb250ZXh0LiBTdXBwb3J0CisgICAgICAgIGZvciBtdWx0aS10aHJlYWRl
ZCB1c2FnZSBhbmQgc2hhcmVkIGNvbnRleHQtZ3JvdXAgd291bGQgYmUgYWRkZWQgbGF0ZXIuCisK
KyAgICAgICAgR0xTdXJmYWNlIGVuY2Fwc3VsYXRlcyBhbiBPcGVuR0wgZHJhd2FibGUgaGlkaW5n
IGFueSBwbGF0Zm9ybSBzcGVjaWZpYyBtYW5hZ2VtZW50LgorICAgICAgICBJdCBkZWZpbmVzIGEg
c2ltcGxlIGludGVyZmFjZSBmb3IgdGhpbmdzIHRoYXQgbmVlZCB0byBiZSBoYW5kbGVkIGJ5IHRo
ZSBzdXJmYWNlLgorICAgICAgICBJdCBjcmVhdGVzIGFuIG9mZi1zY3JlZW4gcmVuZGVyaW5nIGFy
ZWEuIEFueSBHTENvbnRleHQgKGNvbXBhdGlibGUgd2l0aCB0aGUgc3VyZmFjZSkKKyAgICAgICAg
Y2FuIGJlIHVzZWQgdG8gcmVuZGVyIGludG8gdGhpcyBvZmYtc2NyZWVuIGFyZWEuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBhbHNvIGFkZHMgR0xYIGltcGxlbWVudGF0aW9uLiBUbyBrZWVwIHRoZSBw
YXRjaCB0byBtaW5pbXVtIEVHTCBzdXBwb3J0IHdvdWxkIGJlIGFkZGVkIGluIGFub3RoZXIgY2hh
bmdlc2V0LgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZWZsL0dMQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpHTENvbnRleHQ6OmNyZWF0ZUNvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6R0xDb250ZXh0OjpjcmVhdGVPZmZTY3JlZW5Db250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdMQ29udGV4dDo6Y3JlYXRlQ3VycmVudENvbnRleHRXcmFwcGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdMQ29udGV4dDo6R0xDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdMQ29u
dGV4dDo6fkdMQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHTENvbnRleHQ6Om1ha2VDdXJy
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdMQ29udGV4dDo6aXNWYWxpZCk6CisgICAgICAgIChX
ZWJDb3JlOjpHTENvbnRleHQ6OnJlbGVhc2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdM
Q29udGV4dDo6aGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMQ29udGV4dDo6aXNDdXJyZW50
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHTENvbnRleHQ6OmluaXRpYWxpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6R0xDb250ZXh0OjpnZXRDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkdMQ29udGV4dDo6cGxhdGZvcm1NYWtlQ3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHTENv
bnRleHQ6OnBsYXRmb3JtUmVsZWFzZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R0xDb250
ZXh0OjpkZXN0cm95KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xDb250ZXh0
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChHTENvbnRleHQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HTFN1cmZhY2UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R0xTdXJmYWNlOjpjcmVhdGVPZmZzY3Jl
ZW5TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMU3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0
U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFN1cmZhY2U6OkdMU3VyZmFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHTFN1cmZhY2U6On5HTFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
R0xTdXJmYWNlOjpoYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6R0xTdXJmYWNlOjpnZW9tZXRy
eSk6CisgICAgICAgIChXZWJDb3JlOjpHTFN1cmZhY2U6OnNoYXJlZERpc3BsYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6R0xTdXJmYWNlOjpjb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkdMU3VyZmFjZTo6c3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R0xTdXJmYWNlOjpj
b3B5VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFN1cmZhY2U6OnVwZGF0ZUNvbnRlbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdMU3VyZmFjZTo6c2V0R2VvbWV0cnkpOgorICAgICAgICAo
V2ViQ29yZTo6R0xTdXJmYWNlOjpkZXN0cm95KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9lZmwvR0xTdXJmYWNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChH
TFN1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRl
eHQzREVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQz
RCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4
dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1
cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRM
b3N0Q2FsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cmVsZWFzZVJlc291cmNlcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZVN1cmZh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzZXRDb250
ZXh0TG9zdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzU3VyZmFjZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjb3B5VG9HcmFwaGlj
c1N1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpn
cmFwaGljc1N1cmZhY2VUb2tlbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oOgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlKToKKyAgICAgICAgICAgIEdMWE9mZlNjcmVlbkNvbnRleHQgY3JlYXRlcyBhbiBvZmYtc2Ny
ZWVuIGNvbnRleHQuIFRoaXMgaXMgdXNlZCB3aGVuCisgICAgICAgICAgICByZW5kZXJzdHlsZSBp
cyBSZW5kZXJPZmZzY3JlZW4uCisgICAgICAgICAgICBJdCB1c2VzIEdMIGV4dGVuc2lvbiBHTFhf
QVJCX2NyZWF0ZV9jb250ZXh0ICh3aGVuIGF2YWlsYWJsZSkKKyAgICAgICAgICAgIHRvIGNyZWF0
ZSBhIGNvbnRleHQgZWxzZSBmYWxscyBiYWNrIHRvIHVzZSBnbFhDcmVhdGVOZXdDb250ZXh0Lgor
CisgICAgICAgICAgICBHTFhDdXJyZW50Q29udGV4dFdyYXBwZXIgYWN0cyBhcyBhIHdyYXBwZXIg
Zm9yIGN1cnJlbnQgY29udGV4dC4KKyAgICAgICAgICAgIFRoaXMgaXMgdXNlZCB3aGVuIHJlbmRl
cnN0eWxlIGlzIFJlbmRlclRvQ3VycmVudEdMQ29udGV4dC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplQVJCRXh0ZW5zaW9ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpHTFhPZmZTY3JlZW5Db250ZXh0OjpHTFhPZmZTY3JlZW5Db250ZXh0KToK
KyAgICAgICAgICAgIEluaXRpYWxpemVzIHRoZSBHTCBjb250ZXh0IHRvIGJlIGNvbXBhdGlibGUg
d2l0aCB0aGUgZ2l2ZW4gc3VyZmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkdMWE9mZlNjcmVlbkNv
bnRleHQ6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6R0xYT2ZmU2NyZWVuQ29udGV4
dDo6fkdMWE9mZlNjcmVlbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R0xYT2ZmU2NyZWVu
Q29udGV4dDo6aXNDdXJyZW50Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHTFhPZmZTY3Jl
ZW5Db250ZXh0OjpwbGF0Zm9ybU1ha2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWE9m
ZlNjcmVlbkNvbnRleHQ6OnBsYXRmb3JtUmVsZWFzZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6R0xYT2ZmU2NyZWVuQ29udGV4dDo6ZnJlZVJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpHTFhPZmZTY3JlZW5Db250ZXh0OjpkZXN0cm95KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoR0xYQ3VycmVudENvbnRleHRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcjo6R0xYQ3VycmVudENvbnRleHRXcmFwcGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcjo6fkdMWEN1cnJlbnRDb250
ZXh0V3JhcHBlcik6CisgICAgICAgIChHTFhPZmZTY3JlZW5Db250ZXh0KToKKyAgICAgICAgICAg
IEdMWFBCdWZmZXIsIENyZWF0ZXMgYSBHTCBzdXJmYWNlIChQQnVmZmVyKSB1c2VkIGZvciBvZmZz
Y3JlZW4gcmVuZGVyaW5nLgorICAgICAgICAgICAgQW55IEdMQ29udGV4dCB0aGF0IHdhcyBjcmVh
dGVkIHdpdGggcmVzcGVjdCB0byBjb25maWd1cmF0aW9uIGNhbiBiZSB1c2VkCisgICAgICAgICAg
ICB0byByZW5kZXIgaW50byB0aGlzLgorCisgICAgICAgICAgICBHTFhUcmFuc3BvcnRTdXJmYWNl
IGNyZWF0ZXMgV2luZG93IGFuZCB1c2VzIGl0IGFzIGFuIG9mZi1zY3JlZW4gc3VyZmFjZS4KKyAg
ICAgICAgICAgIEFueSBHTENvbnRleHQgdGhhdCB3YXMgY3JlYXRlZCB3aXRoIHJlc3BlY3QgdG8g
Y29uZmlndXJhdGlvbiBjYW4gYmUgdXNlZAorICAgICAgICAgICAgdG8gcmVuZGVyIGludG8gdGhp
cy4KKyAgICAgICAgICAgIFRoaXMgaXMgdXNlZCB3aGVuIGNvbnRlbnRzIG9mIHRoZSBidWZmZXIg
YXJlIHRvIGJlIHByb3ZpZGVkIHRvIFVJIFByb2Nlc3MKKyAgICAgICAgICAgIGZvciBkaXNwbGF5
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFN1cmZh
Y2U6OkdMWFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R0xYU3VyZmFjZTo6fkdMWFN1cmZh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6R0xYU3VyZmFjZTo6dmlzdWFsSW5mbyk6CisgICAgICAg
IChXZWJDb3JlOjpHTFhTdXJmYWNlOjp4V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFN1
cmZhY2U6OnBCdWZmZXJDb25maWcpOgorICAgICAgICAoV2ViQ29yZTo6R0xYU3VyZmFjZTo6dHJh
bnNwb3J0U3VyZmFjZUNvbmZpZyk6CisgICAgICAgIChXZWJDb3JlOjpHTFhTdXJmYWNlOjppc1hS
ZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0
U3VyZmFjZTo6R0xYVHJhbnNwb3J0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFhUcmFu
c3BvcnRTdXJmYWNlOjp+R0xYVHJhbnNwb3J0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpH
TFhUcmFuc3BvcnRTdXJmYWNlOjpjb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdM
WFRyYW5zcG9ydFN1cmZhY2U6OnN3YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRy
YW5zcG9ydFN1cmZhY2U6OnNldEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5z
cG9ydFN1cmZhY2U6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0
U3VyZmFjZTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpHTFhUcmFuc3BvcnRTdXJmYWNl
OjpmcmVlUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OjpHTFhTdXJmYWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdMWFBCdWZmZXI6On5HTFhQQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdMWFBCdWZmZXI6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6R0xYUEJ1ZmZlcjo6
Y29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHTFhQQnVmZmVyOjpkZXN0cm95KToK
KyAgICAgICAgKFdlYkNvcmU6OkdMWFBCdWZmZXI6OmZyZWVSZXNvdXJjZXMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTaGFyZWRYMTFSZXNvdXJjZXMpOgorICAgICAgICAg
ICAgQ3JlYXRlcyBYIHJlc291cmNlcyB3aGljaCBhcmUgc2hhcmVkIGJldHdlZW4gc3VyZmFjZSBh
bmQgY29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJlc291cmNlczo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJlc291cmNlczo6ZGVyZWYpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkWDExUmVzb3VyY2VzOjpnZXRYV2luZG93KToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZFgxMVJlc291cmNlczo6ZGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpT
aGFyZWRYMTFSZXNvdXJjZXM6OnZpc3VhbEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVk
WDExUmVzb3VyY2VzOjpjcmVhdGVDb25maWcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkWDEx
UmVzb3VyY2VzOjpwQnVmZmVyQ29udGV4dENvbmZpZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFy
ZWRYMTFSZXNvdXJjZXM6OnN1cmZhY2VDb250ZXh0Q29uZmlnKToKKyAgICAgICAgKFdlYkNvcmU6
OlNoYXJlZFgxMVJlc291cmNlczo6aXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJlc291cmNlczo6U2hhcmVkWDExUmVzb3VyY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJlc291cmNlczo6flNoYXJlZFgxMVJlc291cmNlcyk6
CisgICAgICAgIChHTFhTdXJmYWNlKToKKyAgICAgICAgKEdMWFRyYW5zcG9ydFN1cmZhY2UpOgor
ICAgICAgICAoR0xYUEJ1ZmZlcik6CisKIDIwMTItMTEtMTUgIFZpYXRjaGVzbGF2IE9zdGFwZW5r
byAgPHYub3N0YXBlbmtvQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtUZXhNYXBdW0NhaXJvXVtR
dF0gUmVmYWN0b3IgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cygpLgpkaWZmIC0tZ2l0
IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
RWZsLmNtYWtlCmluZGV4IDU4MmFmMDUuLjQ0YmE1YjMgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UK
QEAgLTI3NywxMSArMjc3LDE0IEBAIElGIChXVEZfVVNFXzNEX0dSQVBISUNTKQogICBMSVNUKEFQ
UEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcyIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZ2x4IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAi
CiAgICkKICAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvT3BlbkdMU2hpbXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRHJhd2luZ0J1
ZmZlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HTENvbnRleHQuY3BwCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dMU3VyZmFjZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcApAQCAtMjg5LDYgKzI5Miw4IEBAIElGIChXVEZf
VVNFXzNEX0dSQVBISUNTKQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0M0RPcGVuR0xDb21tb24uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
R3JhcGhpY3NTdXJmYWNlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9H
TFhTdXJmYWNlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250
ZXh0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL3F0L0dyYXBoaWNzU3VyZmFj
ZUdMWC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5jcHAKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xD
b250ZXh0LmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xDb250ZXh0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWYxYWI4Ci0tLSAvZGV2
L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HTENvbnRleHQu
Y3BwCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJHTENvbnRleHQuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKworI2lmIEhBVkUoR0xYKQorI2luY2x1ZGUgIkdMWENvbnRleHQuaCIKKyNl
bmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBQRk5HTEdFVEdSQVBISUNTUkVT
RVRTVEFUVVNBUkJQUk9DIGdsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQiA9IDA7CitzdGF0aWMg
R0xDb250ZXh0KiBtX2N1cnJlbnRDb250ZXh0ID0gMDsKKworUGFzc093blB0cjxHTENvbnRleHQ+
IEdMQ29udGV4dDo6Y3JlYXRlQ29udGV4dChHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUg
cmVuZGVyU3R5bGUpCit7CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWRTaGltcyA9IGZhbHNl
OworCisgICAgaWYgKCFpbml0aWFsaXplZFNoaW1zKSB7CisgICAgICAgIGluaXRpYWxpemVkU2hp
bXMgPSBpbml0aWFsaXplT3BlbkdMU2hpbXMoKTsKKyNpZiBIQVZFKEdMWCkKKyAgICAgICAgZ2xH
ZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEdFVEdSQVBI
SUNTUkVTRVRTVEFUVVNBUkJQUk9DPihnbFhHZXRQcm9jQWRkcmVzc0FSQihyZWludGVycHJldF9j
YXN0PGNvbnN0IEdMdWJ5dGUqPigiZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCIikpKTsKKyNl
bmRpZgorICAgIH0KKworICAgIGlmICghaW5pdGlhbGl6ZWRTaGltcykKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBzd2l0Y2ggKHJlbmRlclN0eWxlKSB7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UmVuZGVyT2Zmc2NyZWVuOgorICAgICAgICBpZiAoT3duUHRyPEdMQ29udGV4
dD4gZ2x4Q29udGV4dCAgPSBHTENvbnRleHQ6OmNyZWF0ZU9mZlNjcmVlbkNvbnRleHQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBnbHhDb250ZXh0LnJlbGVhc2UoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyVG9DdXJyZW50R0xDb250ZXh0OgorICAg
ICAgICBpZiAoT3duUHRyPEdMQ29udGV4dD4gZ2x4Q29udGV4dCAgPSBHTENvbnRleHQ6OmNyZWF0
ZUN1cnJlbnRDb250ZXh0V3JhcHBlcigpKQorICAgICAgICAgICAgcmV0dXJuIGdseENvbnRleHQu
cmVsZWFzZSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
ZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdzoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCitQYXNz
T3duUHRyPEdMQ29udGV4dD4gR0xDb250ZXh0OjpjcmVhdGVPZmZTY3JlZW5Db250ZXh0KCkKK3sK
KyNpZiBIQVZFKEdMWCkKKyAgICBPd25QdHI8R0xDb250ZXh0PiBnbHhDb250ZXh0ID0gYWRvcHRQ
dHIobmV3IEdMWE9mZlNjcmVlbkNvbnRleHQoKSk7CisgICAgcmV0dXJuIGdseENvbnRleHQucmVs
ZWFzZSgpOworI2VuZGlmCisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUGFzc093blB0cjxH
TENvbnRleHQ+IEdMQ29udGV4dDo6Y3JlYXRlQ3VycmVudENvbnRleHRXcmFwcGVyKCkKK3sKKyNp
ZiBIQVZFKEdMWCkKKyAgICBPd25QdHI8R0xDb250ZXh0PiBnbHhDb250ZXh0ID0gYWRvcHRQdHIo
bmV3IEdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcigpKTsKKyAgICByZXR1cm4gZ2x4Q29udGV4dC5y
ZWxlYXNlKCk7CisjZW5kaWYKKworICAgIHJldHVybiBudWxscHRyOworfQorCitHTENvbnRleHQ6
OkdMQ29udGV4dCgpCisgICAgOiBtX2NvbnRleHRIYW5kbGUoMCkKKyAgICAsIG1fcmVzZXRMb3N0
Q29udGV4dChmYWxzZSkKK3sKKworfQorCitHTENvbnRleHQ6On5HTENvbnRleHQoKQoreworICAg
IGlmICh0aGlzID09IG1fY3VycmVudENvbnRleHQpCisgICAgICAgIG1fY3VycmVudENvbnRleHQg
PSAwOworfQorCitib29sIEdMQ29udGV4dDo6bWFrZUN1cnJlbnQoR0xTdXJmYWNlKiBzdXJmYWNl
KQoreworICAgIG1fY29udGV4dExvc3QgPSBmYWxzZTsKKworICAgIGlmIChzdXJmYWNlICYmICFz
dXJmYWNlLT5oYW5kbGUoKS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgbV9jdXJyZW50Q29udGV4dCA9
IDA7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoaXNDdXJyZW50Q29u
dGV4dCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBm
YWxzZTsKKworICAgIGlmICghc3VyZmFjZSkgeworICAgICAgICBtX2N1cnJlbnRDb250ZXh0ID0g
MDsKKyAgICAgICAgcGxhdGZvcm1SZWxlYXNlQ3VycmVudCgpOworICAgICAgICByZXR1cm5WYWx1
ZSA9ICB0cnVlOworICAgIH0gZWxzZSBpZiAocGxhdGZvcm1NYWtlQ3VycmVudChzdXJmYWNlKSkg
eworICAgICAgICBtX2N1cnJlbnRDb250ZXh0ID0gdGhpczsKKyAgICAgICAgcmV0dXJuVmFsdWUg
PSAgdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9yZXNldExvc3RDb250ZXh0ICYmIGdsR2V0R3Jh
cGhpY3NSZXNldFN0YXR1c0FSQikgeworICAgICAgICBHTGVudW0gc3RhdHVzID0gZ2xHZXRHcmFw
aGljc1Jlc2V0U3RhdHVzQVJCKCk7CisKKyAgICAgICAgc3dpdGNoIChzdGF0dXMpIHsKKyAgICAg
ICAgY2FzZSBOYXRpdmVDT05URVhUX05PX0VSUk9SOgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgTmF0aXZlQ09OVEVYVF9HVUlMVFlfQ09OVEVYVF9SRVNFVDoKKyAgICAgICAgICAg
IG1fY29udGV4dExvc3QgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
TmF0aXZlQ09OVEVYVF9JTk5PQ0VOVF9DT05URVhUX1JFU0VUOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTmF0aXZlQ09OVEVYVF9VTktOT1dOX0NPTlRFWFRfUkVTRVQ6CisgICAg
ICAgICAgICBtX2NvbnRleHRMb3N0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gcmV0dXJuVmFsdWU7Cit9CisKK2Jvb2wgR0xDb250ZXh0Ojppc1ZhbGlkKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9jb250ZXh0SGFuZGxlICYmICFtX2NvbnRleHRMb3N0OworfQorCit2
b2lkIEdMQ29udGV4dDo6cmVsZWFzZUN1cnJlbnQoKQoreworICAgIGlmICghaXNDdXJyZW50Q29u
dGV4dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1cnJlbnRDb250ZXh0ID0gMDsKKyAg
ICBwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KCk7Cit9CisKK1BsYXRmb3JtQ29udGV4dCBHTENvbnRl
eHQ6OmhhbmRsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dEhhbmRsZTsKK30KKwor
Ym9vbCBHTENvbnRleHQ6OmlzQ3VycmVudENvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIEdMQ29udGV4dDo6aW5pdGlhbGl6ZShHTFN1cmZhY2UqKQoreworICAg
IHJldHVybiB0cnVlOworfQorCitHTENvbnRleHQqIEdMQ29udGV4dDo6Z2V0Q3VycmVudCgpCit7
CisgICAgcmV0dXJuIG1fY3VycmVudENvbnRleHQ7Cit9CisKK2Jvb2wgR0xDb250ZXh0OjpwbGF0
Zm9ybU1ha2VDdXJyZW50KEdMU3VyZmFjZSopCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgR0xDb250ZXh0OjpwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KCkKK3sKKworfQorCit2b2lkIEdM
Q29udGV4dDo6ZGVzdHJveSgpCit7CisgICAgbV9jb250ZXh0SGFuZGxlID0gMDsKKyAgICBtX3Jl
c2V0TG9zdENvbnRleHQgPSBmYWxzZTsKKworICAgIGlmICh0aGlzID09IG1fY3VycmVudENvbnRl
eHQpCisgICAgICAgIG1fY3VycmVudENvbnRleHQgPSAwOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2VmbC9HTENvbnRleHQuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwv
R0xDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhMjdlMQot
LS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xD
b250ZXh0LmgKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRl
bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBH
TENvbnRleHRfaAorI2RlZmluZSBHTENvbnRleHRfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorCisjaW5jbHVkZSAiR0xEZWZzLmgiCisjaW5jbHVkZSAiR0xTdXJmYWNlLmgi
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KKworLy8gRW5jYXBzdWxhdGVzIGFuIE9wZW5HTCBjb250ZXh0IGFuZCBkcmF3YWJsZSwgaGlk
aW5nIHBsYXRmb3JtIHNwZWNpZmljIG1hbmFnZW1lbnQuCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEdMQ29udGV4dCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR0xDb250ZXh0KTsK
KworcHVibGljOgorICAgIC8vIEZyb20gaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS9n
bGVzL2V4dGVuc2lvbnMvRVhUL0VYVF9yb2J1c3RuZXNzLnR4dAorICAgIGVudW0gTmF0aXZlQ29u
dGV4dFJlc2V0IHsKKyAgICAgICAgTmF0aXZlQ09OVEVYVF9OT19FUlJPUiA9IDB4MDAwMCwKKyAg
ICAgICAgTmF0aXZlQ09OVEVYVF9HVUlMVFlfQ09OVEVYVF9SRVNFVCA9IDB4ODI1MywKKyAgICAg
ICAgTmF0aXZlQ09OVEVYVF9JTk5PQ0VOVF9DT05URVhUX1JFU0VUID0gMHg4MjU0LAorICAgICAg
ICBOYXRpdmVDT05URVhUX1VOS05PV05fQ09OVEVYVF9SRVNFVCA9IDB4ODI1NSwKKyAgICB9Owor
CisgICAgc3RhdGljIFBhc3NPd25QdHI8R0xDb250ZXh0PiBjcmVhdGVDb250ZXh0KEdyYXBoaWNz
Q29udGV4dDNEOjpSZW5kZXJTdHlsZSk7CisKKyAgICB2aXJ0dWFsIH5HTENvbnRleHQoKTsKKwor
ICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplKEdMU3VyZmFjZSopOworCisgICAgLy8gTWFrZXMg
dGhpcyBhbmQgc3VyZmFjZSBhcyBjdXJyZW50IGNvbnRleHQgYW5kIGRyYXdhYmxlLgorICAgIC8v
IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIG5vIHN1cmZhY2UgaXMgc2FtZSBhcyBjYWxsaW5n
IHJlbGVhc2VDdXJyZW50LgorICAgIC8vIERvZXMgbm90aGluZyBpZiB0aGlzIGlzIGFscmVhZHkg
Y3VycmVudCBDb250ZXh0LgorICAgIGJvb2wgbWFrZUN1cnJlbnQoR0xTdXJmYWNlKiA9IDApOwor
CisgICAgLy8gU2V0cyBDdXJyZW50IENvbnRleHQgYW5kIERyYXdhYmxlIGFzIE51bGwuCisgICAg
Ly8gRG9lc24ndCBoYXZlIGFueSBlZmZlY3QgaWYgdGhpcyBpcyBub3QgdGhlIGN1cnJlbnQgQ29u
dGV4dC4KKyAgICB2b2lkIHJlbGVhc2VDdXJyZW50KCk7CisKKyAgICBQbGF0Zm9ybUNvbnRleHQg
aGFuZGxlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDdXJyZW50Q29udGV4dCgpIGNv
bnN0OworCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CisKKyAgICAvLyBEZXN0cm95cyBhbnkg
R0wgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbnRleHQuCisgICAgdmlydHVhbCB2
b2lkIGRlc3Ryb3koKTsKKworICAgIHN0YXRpYyBHTENvbnRleHQqIGdldEN1cnJlbnQoKTsKKwor
cHJvdGVjdGVkOgorICAgIEdMQ29udGV4dCgpOworICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybU1h
a2VDdXJyZW50KEdMU3VyZmFjZSopOworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybVJlbGVhc2VD
dXJyZW50KCk7CisgICAgUGxhdGZvcm1Db250ZXh0IG1fY29udGV4dEhhbmRsZTsKKyAgICBib29s
IG1fcmVzZXRMb3N0Q29udGV4dDsKKyAgICBib29sIG1fY29udGV4dExvc3Q7CisKK3ByaXZhdGU6
CisgICAgc3RhdGljIFBhc3NPd25QdHI8R0xDb250ZXh0PiBjcmVhdGVPZmZTY3JlZW5Db250ZXh0
KCk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8R0xDb250ZXh0PiBjcmVhdGVDdXJyZW50Q29udGV4
dFdyYXBwZXIoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNl
bmRpZiAvLyBHTE5hdGl2ZUNvbnRleHRfSApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2VmbC9HTERlZnMuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9lZmwvR0xEZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUzNmEx
MQotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwv
R0xEZWZzLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRl
bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBH
TERlZnNfaAorI2RlZmluZSBHTERlZnNfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorCisjaWYgVVNFKE9QRU5HTF9FU18yKQorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5H
TEVTLmgiCisjZWxzZQorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgorI2VuZGlmCisK
KyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorCisjaW5jbHVkZSA8R0wvZ2wuaD4KKyNpbmNsdWRl
IDxHTC9nbGV4dC5oPgorI2lmIEhBVkUoR0xYKQorI2luY2x1ZGUgPEdML2dseC5oPgorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEhBVkUoR0xYKQordHlwZWRlZiBHTFhDb250
ZXh0IFBsYXRmb3JtQ29udGV4dDsKK3R5cGVkZWYgRGlzcGxheSogUGxhdGZvcm1EaXNwbGF5Owor
dHlwZWRlZiBHTFhGQkNvbmZpZyBQbGF0Zm9ybVN1cmZhY2VDb25maWc7Cit0eXBlZGVmIEdMWERy
YXdhYmxlIFBsYXRmb3JtU3VyZmFjZTsKKyNlbHNlCit0eXBlZGVmIHZvaWQqIFBsYXRmb3JtQ29u
dGV4dDsKK3R5cGVkZWYgdm9pZCogUGxhdGZvcm1EaXNwbGF5OwordHlwZWRlZiB2b2lkKiBQbGF0
Zm9ybVN1cmZhY2VDb25maWc7Cit0eXBlZGVmIHZvaWQqIFBsYXRmb3JtU3VyZmFjZTsKKyNlbmRp
ZgorCit9CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9lZmwvR0xTdXJmYWNlLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9lZmwvR0xTdXJmYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi45ZDFmNTc1Ci0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2VmbC9HTFN1cmZhY2UuY3BwCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJHTFN1cmZhY2UuaCIKKwor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2lmIEhBVkUoR0xYKQorI2luY2x1
ZGUgIkdMWFN1cmZhY2UuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRyPEdMU3VyZmFjZT4gR0xTdXJmYWNl
OjpjcmVhdGVPZmZzY3JlZW5TdXJmYWNlKCkKK3sKKyNpZiBIQVZFKEdMWCkKKyAgICBPd25QdHI8
R0xTdXJmYWNlPiBzdXJmYWNlID0gIGFkb3B0UHRyKG5ldyBHTFhQQnVmZmVyKCkpOworCisgICAg
aWYgKHN1cmZhY2UtPmhhbmRsZSgpLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHN1cmZhY2Uu
cmVsZWFzZSgpOworI2VuZGlmCisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUGFzc093blB0
cjxHTFN1cmZhY2U+IEdMU3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZSgpCit7CisjaWYg
SEFWRShHTFgpCisgICAgT3duUHRyPEdMU3VyZmFjZT4gc3VyZmFjZSA9ICBhZG9wdFB0cihuZXcg
R0xYVHJhbnNwb3J0U3VyZmFjZSgpKTsKKworICAgIGlmIChzdXJmYWNlLT5oYW5kbGUoKS5pc1Zh
bGlkKCkpCisgICAgICAgIHJldHVybiBzdXJmYWNlLnJlbGVhc2UoKTsKKyNlbmRpZgorCisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK0dMU3VyZmFjZTo6R0xTdXJmYWNlKCkKKyAgICA6IG1fcmVz
dG9yZU5lZWRlZCh0cnVlKQorICAgICwgbV9mYm9JZCgwKQorICAgICwgbV9zaGFyZWREaXNwbGF5
KDApCit7CisKK30KKworR0xTdXJmYWNlOjp+R0xTdXJmYWNlKCkKK3sKKworfQorCitHcmFwaGlj
c1N1cmZhY2VUb2tlbiBHTFN1cmZhY2U6OmhhbmRsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEdy
YXBoaWNzU3VyZmFjZVRva2VuKG1fZHJhd2FibGUpOworfQorCitjb25zdCBJbnRSZWN0JiBHTFN1
cmZhY2U6Omdlb21ldHJ5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZWN0OworfQorCitQbGF0
Zm9ybURpc3BsYXkgR0xTdXJmYWNlOjpzaGFyZWREaXNwbGF5KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9zaGFyZWREaXNwbGF5OworfQorCitQbGF0Zm9ybVN1cmZhY2VDb25maWcgR0xTdXJmYWNl
Ojpjb25maWd1cmF0aW9uKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBHTFN1cmZhY2U6
OnN3YXBCdWZmZXJzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdMU3Vy
ZmFjZTo6Y29weVRleHR1cmUodWludDMyX3QgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCkKK3sKKyAgICBpZiAoIW1fZmJvSWQpCisgICAgICAgIGdsR2VuRnJhbWVidWZmZXJzKDEs
ICZtX2Zib0lkKTsKKworICAgIG1fcmVzdG9yZU5lZWRlZCA9IHRydWU7CisgICAgaW50IHggPSBz
b3VyY2VSZWN0LngoKTsKKyAgICBpbnQgeSA9IHNvdXJjZVJlY3QueSgpOworICAgIGludCB3aWR0
aCA9IHNvdXJjZVJlY3Qud2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0gc291cmNlUmVjdC5oZWln
aHQoKTsKKworICAgIGdsUHVzaEF0dHJpYihHTF9DT0xPUl9CVUZGRVJfQklUKTsKKworICAgIEdM
aW50IHByZXZpb3VzRkJPOworICAgIGdsR2V0SW50ZWdlcnYoR0xfRlJBTUVCVUZGRVJfQklORElO
RywgJnByZXZpb3VzRkJPKTsKKworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX1JFQURfRlJBTUVC
VUZGRVIsIG1fZmJvSWQpOworCisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0
dXJlKTsKKyAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX1JFQURfRlJBTUVCVUZGRVIsIEdM
X0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCB0ZXh0dXJlLCAwKTsKKworICAgIGds
QmluZEZyYW1lYnVmZmVyKEdMX0RSQVdfRlJBTUVCVUZGRVIsIDApOworCisgICAgZ2xCbGl0RnJh
bWVidWZmZXIoeCwgeSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgR0xfQ09M
T1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKKworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQo
R0xfUkVBRF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQs
IDAsIDApOworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisgICAgZ2xCaW5k
RnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIHByZXZpb3VzRkJPKTsKKworICAgIGdsUG9wQXR0
cmliKCk7Cit9CisKK3ZvaWQgR0xTdXJmYWNlOjp1cGRhdGVDb250ZW50cyh1aW50MzJfdCB0ZXh0
dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBHTHVpbnQgYmluZEZib0lkKQor
eworICAgIG1fcmVzdG9yZU5lZWRlZCA9IGZhbHNlOworCisgICAgaWYgKCFtX2Zib0lkKQorICAg
ICAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm9JZCk7CisKKyAgICBpbnQgeCA9IHNvdXJj
ZVJlY3QueCgpOworICAgIGludCB5ID0gc291cmNlUmVjdC55KCk7CisgICAgaW50IHdpZHRoID0g
c291cmNlUmVjdC53aWR0aCgpOworICAgIGludCBoZWlnaHQgPSBzb3VyY2VSZWN0LmhlaWdodCgp
OworCisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfUkVBRF9GUkFNRUJVRkZFUiwgbV9mYm9JZCk7
CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICBnbEZyYW1l
YnVmZmVyVGV4dHVyZTJEKEdMX1JFQURfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQw
LCBHTF9URVhUVVJFXzJELCB0ZXh0dXJlLCAwKTsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9E
UkFXX0ZSQU1FQlVGRkVSLCAwKTsKKyAgICBnbEJsaXRGcmFtZWJ1ZmZlcih4LCB5LCB3aWR0aCwg
aGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5F
QVIpOworICAgIHN3YXBCdWZmZXJzKCk7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9S
RUFEX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgMCwg
MCk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICBnbEJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgYmluZEZib0lkKTsKK30KKwordm9pZCBHTFN1cmZhY2U6
OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCit7CisgICAgbV9yZWN0ID0gbmV3
UmVjdDsKK30KKwordm9pZCBHTFN1cmZhY2U6OmRlc3Ryb3koKQoreworICAgIG1fcmVjdCA9IElu
dFJlY3QoKTsKKworICAgIGlmIChtX2Zib0lkKQorICAgICAgICBnbERlbGV0ZUZyYW1lYnVmZmVy
cygxLCAmbV9mYm9JZCk7CisKKyAgICBtX2Zib0lkID0gMDsKK30KKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xTdXJmYWNlLmgg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dMU3VyZmFjZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MmQyMGMKLS0tIC9kZXYvbnVsbAorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dMU3VyZmFjZS5oCkBAIC0wLDAgKzEs
OTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR0xTdXJmYWNlX2gKKyNkZWZpbmUg
R0xTdXJmYWNlX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1
ZGUgIkdMRGVmcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFjZVRva2VuLmgiCisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworLy8g
RW5jYXBzdWxhdGVzIGEgc3VyZmFjZSB0aGF0IGNhbiBiZSByZW5kZXJlZCB0byB3aXRoIEdMLCBo
aWRpbmcgcGxhdGZvcm0KKy8vIHNwZWNpZmljIG1hbmFnZW1lbnQuCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEdMU3VyZmFjZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR0xTdXJm
YWNlKTsKKworcHVibGljOgorICAgIC8vIENyZWF0ZSBhIEdMIHN1cmZhY2UgdXNlZCBmb3Igb2Zm
c2NyZWVuIHJlbmRlcmluZy4KKyAgICBzdGF0aWMgUGFzc093blB0cjxHTFN1cmZhY2U+IGNyZWF0
ZU9mZnNjcmVlblN1cmZhY2UoKTsKKworICAgIC8vIENyZWF0ZSBhIEdMIHN1cmZhY2UgdXNlZCBm
b3Igb2Zmc2NyZWVuIHJlbmRlcmluZy4gVGhlIHJlc3VsdHMgY2FuIGJlIHRyYW5zcG9ydGVkCisg
ICAgLy8gdG8gdGhlIFVJIHByb2Nlc3MgZm9yIGRpc3BsYXkuCisgICAgc3RhdGljIFBhc3NPd25Q
dHI8R0xTdXJmYWNlPiBjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKCk7CisKKyAgICB2aXJ0dWFsIH5H
TFN1cmZhY2UoKTsKKworICAgIGNvbnN0IEludFJlY3QmIGdlb21ldHJ5KCkgY29uc3Q7CisKKyAg
ICAvLyBHZXQgdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0gc3BlY2lmaWMgc3VyZmFjZSBoYW5kbGUu
CisgICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4gaGFuZGxlKCkgY29uc3Q7CisKKyAgICBQbGF0Zm9y
bURpc3BsYXkgc2hhcmVkRGlzcGxheSgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIHN3YXBC
dWZmZXJzKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29weVRleHR1cmUodWludDMyX3QgdGV4dHVy
ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCk7CisKKyAgICAvLyBDb252ZW5pZW5jZSBGdW5j
dGlvbiB0byB1cGRhdGUgc3VyZmFjZSBiYWNrYnVmZmVyIHdpdGggdGV4dHVyZSBjb250ZW50cyBh
bmQgcmVzdG9yZSBjdXJyZW50IEZCTy4KKyAgICAvLyBGdW5jdGlvbiBkb2VzIHRoZSBmb2xsb3dp
bmcoaW4gb3JkZXIpOgorICAgIC8vIGEpQmxpdHMgdGV4dHVyZSBjb250ZW50cyB0byBiYWNrIGJ1
ZmZlci4KKyAgICAvLyBiKUNhbGxzIFN3YXAgQnVmZmVycy4KKyAgICAvLyBjKVNldHMgY3VycmVu
dCBGQk8gYXMgYmluZEZib0lkLgorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyh1aW50
MzJfdCB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBHTHVpbnQgYmlu
ZEZib0lkKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JiBu
ZXdSZWN0KTsKKworICAgIHZpcnR1YWwgUGxhdGZvcm1TdXJmYWNlQ29uZmlnIGNvbmZpZ3VyYXRp
b24oKTsKKworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CisKK3Byb3RlY3RlZDoKKyAgICBH
TFN1cmZhY2UoKTsKKyAgICBib29sIG1fcmVzdG9yZU5lZWRlZDsKKyAgICBJbnRSZWN0IG1fcmVj
dDsKKyAgICBHTHVpbnQgbV9mYm9JZDsKKyAgICBQbGF0Zm9ybURpc3BsYXkgbV9zaGFyZWREaXNw
bGF5OworICAgIFBsYXRmb3JtU3VyZmFjZSBtX2RyYXdhYmxlOworfTsKKworfQorCisjZW5kaWYK
KworI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZs
L0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCmluZGV4IGQxMzkxMzAuLjZlMTdkNmQgMTAw
NjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250
ZXh0M0RFZmwuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3Jh
cGhpY3NDb250ZXh0M0RFZmwuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQg
KEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICAgIENvcHlyaWdodCAoQykgMjAxMiBJbnRl
bCBDb3Jwb3JhdGlvbi4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTgsNiArMTksNyBAQAogKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
IAogI2lmIFVTRSgzRF9HUkFQSElDUykgfHwgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpA
QCAtMjcsNyArMjksNiBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAi
T3BlbkdMU2hpbXMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgotI2luY2x1
ZGUgPEdML2dseC5oPgogCiAjaWYgVVNFKE9QRU5HTF9FU18yKQogI2luY2x1ZGUgIkV4dGVuc2lv
bnMzRE9wZW5HTEVTLmgiCkBAIC0zOSw2ICs0MCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
UGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShH
cmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRv
dywgUmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiB7CisgICAgaWYgKHJlbmRlclN0eWxlID09IFJl
bmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQorICAgICAgICByZXR1cm4gMDsKKwogICAgIFJlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRl
eHQzRChhdHRycywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUpKTsKICAgICByZXR1cm4gY29udGV4
dC0+bV9wcml2YXRlID8gY29udGV4dC5yZWxlYXNlKCkgOiAwOwogfQpAQCAtNjcsMjkgKzcxLDEy
IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpCiAgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZm
ZXIoMCkKICAgICAsIG1fcHJpdmF0ZShhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlKHRoaXMsIGhvc3RXaW5kb3csIHJlbmRlclN0eWxlKSkpCiB7Ci0gICAgdmFsaWRhdGVBdHRy
aWJ1dGVzKCk7Ci0KLSAgICBpZiAoIW1fcHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
c3RhdGljIGJvb2wgaW5pdGlhbGl6ZWRTaGltcyA9IGZhbHNlOwotICAgIHN0YXRpYyBib29sIHN1
Y2Nlc3MgPSB0cnVlOwotICAgIGlmICghaW5pdGlhbGl6ZWRTaGltcykgewotICAgICAgICBzdWNj
ZXNzID0gaW5pdGlhbGl6ZU9wZW5HTFNoaW1zKCk7Ci0gICAgICAgIGluaXRpYWxpemVkU2hpbXMg
PSB0cnVlOwotICAgIH0KLSAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICBpZiAoIW1fcHJpdmF0ZSB8
fCAhbV9wcml2YXRlLT5tX3BsYXRmb3JtQ29udGV4dCkgewogICAgICAgICBtX3ByaXZhdGUgPSBu
dWxscHRyOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHJlbmRlclN0eWxlID09
IFJlbmRlclRvQ3VycmVudEdMQ29udGV4dCkgewotICAgICAgICAvLyBFdmFzIGRvZXNuJ3QgYWxs
b3cgaW5jbHVkaW5nIGdsIGhlYWRlcnMgYW5kIEV2YXNfR0wgaGVhZGVycyBhdCB0aGUgc2FtZSB0
aW1lLAotICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIHF1ZXJ5IHRoZSBjdXJyZW50IGdsIGNvbnRl
eHQvc3VyZmFjZSBoZXJlIGluc3RlYWQgb2YgaW4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLgot
ICAgICAgICB2b2lkKiBjdXJyZW50Q29udGV4dCA9ICh2b2lkKilnbFhHZXRDdXJyZW50Q29udGV4
dCgpOwotICAgICAgICB2b2lkKiBjdXJyZW50U3VyZmFjZSA9ICh2b2lkKilnbFhHZXRDdXJyZW50
RHJhd2FibGUoKTsKLSAgICAgICAgbV9wcml2YXRlLT5zZXRDdXJyZW50R0xDb250ZXh0KGN1cnJl
bnRDb250ZXh0LCBjdXJyZW50U3VyZmFjZSk7Ci0gICAgfQorICAgIHZhbGlkYXRlQXR0cmlidXRl
cygpOwogCiAgICAgaWYgKHJlbmRlclN0eWxlID09IFJlbmRlck9mZnNjcmVlbikgewogICAgICAg
ICAvLyBDcmVhdGUgYnVmZmVycyBmb3IgdGhlIGNhbnZhcyBGQk8uCkBAIC0xNDcsMTQgKzEzNCwx
OSBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0
M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaQogICAgIGdsRW5hYmxlKEdMX1BPSU5UX1NQUklU
RSk7CiAgICAgZ2xFbmFibGUoR0xfVkVSVEVYX1BST0dSQU1fUE9JTlRfU0laRSk7CiAjZW5kaWYK
KyAgICBnbENsZWFyQ29sb3IoMC4wLCAwLjAsIDAuMCwgMC4wKTsKIH0KIAogR3JhcGhpY3NDb250
ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiB7Ci0gICAgaWYgKG1fcmVuZGVyU3R5bGUgPT0g
UmVuZGVyVG9DdXJyZW50R0xDb250ZXh0IHx8ICFtX3ByaXZhdGUpCisgICAgaWYgKCFtX3ByaXZh
dGUgfHwgIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fZmJvKSB7CisgICAgICAgIG1fcHJpdmF0ZS0+
cmVsZWFzZVJlc291cmNlcygpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgZ2xEZWxl
dGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKIAogICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykg
ewpAQCAtMTY1LDcgKzE1Nyw2IEBAIEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0
M0QoKQogCiAgICAgICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJP
KTsKICAgICB9IGVsc2UgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSB7Ci0K
ICNpZiBVU0UoT1BFTkdMX0VTXzIpCiAgICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKQogICAgICAg
ICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKQEAgLTE3NSw3
ICsxNjYsOSBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKICNlbmRp
ZgogICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVy
KTsKICAgICB9CisKICAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pOworICAgIG1f
cHJpdmF0ZS0+cmVsZWFzZVJlc291cmNlcygpOwogfQogCiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkKQEAgLTE5
NywxMiArMTkwLDYgQEAgUGxhdGZvcm1MYXllciogR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3Jt
TGF5ZXIoKSBjb25zdAogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJl
bnQoKQogewotICAgIGlmICghbV9wcml2YXRlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAobV9yZW5kZXJTdHlsZSA9PSBSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CiB9CiAKQEAgLTIxNSw5ICsyMDIsOSBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0dM
RVMyQ29tcGxpYW50KCkgY29uc3QKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpzZXRDb250ZXh0TG9zdENhbGxiYWNrKFBhc3NPd25QdHI8Q29udGV4dExvc3RDYWxsYmFjaz4p
IAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29udGV4dExvc3RDYWxsYmFjayhQYXNzT3du
UHRyPENvbnRleHRMb3N0Q2FsbGJhY2s+IGNhbGxCYWNrKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgbV9wcml2YXRlLT5zZXRDb250ZXh0TG9zdENhbGxiYWNrKGNhbGxCYWNrKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2soUGFzc093
blB0cjxFcnJvck1lc3NhZ2VDYWxsYmFjaz4pIApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3Bw
CmluZGV4IDYyZDBhNmUuLjBmOTFhOTIgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAK
QEAgLTEsNSArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0
cm9uaWNzCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLgogCiAgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0xOSwxNTkgKzIwLDEwNSBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAKLSNpZiBVU0UoM0RfR1JBUEhJQ1MpIHx8IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKIAorI2lmIFVTRSgzRF9HUkFQ
SElDUykgfHwgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlIDxF
Y29yZV9FdmFzLmg+Ci0jaW5jbHVkZSA8RXZhc19HTC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25BcnJh
eVB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIFVTRShPUEVOR0xf
RVNfMikKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4K
KyNlbHNlCisjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBIb3N0V2luZG93KiBob3N0V2luZG93LCBH
cmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiAgICAgOiBtX2NvbnRl
eHQoY29udGV4dCkKICAgICAsIG1faG9zdFdpbmRvdyhob3N0V2luZG93KQotICAgICwgbV9ldmFz
R0woMCkKLSAgICAsIG1fZXZhc0dMQ29udGV4dCgwKQotICAgICwgbV9ldmFzR0xTdXJmYWNlKDAp
Ci0gICAgLCBtX2dsQ29udGV4dCgwKQotICAgICwgbV9nbFN1cmZhY2UoMCkKLSAgICAsIG1fYXBp
KDApCi0gICAgLCBtX3JlbmRlclN0eWxlKHJlbmRlclN0eWxlKQorICAgICwgbV9wZW5kaW5nU3Vy
ZmFjZVJlc2l6ZShmYWxzZSkKIHsKLSAgICBpZiAocmVuZGVyU3R5bGUgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlclRvQ3VycmVudEdMQ29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAg
aWYgKG1faG9zdFdpbmRvdyAmJiBtX2hvc3RXaW5kb3ctPnBsYXRmb3JtUGFnZUNsaWVudCgpKSB7
CiAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBjb2RlIHBhdGggZm9yIFdlYktpdDEu
CiAgICAgICAgIC8vIEdldCBFdmFzIG9iamVjdCBmcm9tIHBsYXRmb3JtUGFnZUNsaWVudCBhbmQg
c2V0IEV2YXNHTCByZWxhdGVkIG1lbWJlcnMuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICAvLyBGb3IgV2ViS2l0Miwgd2UgbmVlZCB0byBjcmVhdGUgYSBkdW1teSBlY29yZUV2YXMgb2Jq
ZWN0IGZvciB0aGUgV2ViUHJvY2VzcyBpbiBvcmRlciB0byB1c2UgRXZhc0dMIEFQSXMuCi0jaWZk
ZWYgSEFWRV9FQ09SRV9YCi0gICAgZWNvcmVfZXZhc19pbml0KCk7Ci0gICAgbV9lY29yZUV2YXMg
PSBhZG9wdFB0cihlY29yZV9ldmFzX2dsX3gxMV9uZXcoMCwgMCwgMCwgMCwgMSwgMSkpOwotICAg
IGlmICghbV9lY29yZUV2YXMpCi0gICAgICAgIHJldHVybjsKLSNlbHNlCi0gICAgcmV0dXJuOwot
I2VuZGlmCisgICAgbV9wbGF0Zm9ybUNvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZUNvbnRleHQo
cmVuZGVyU3R5bGUpOwogCi0gICAgRXZhcyogZXZhcyA9IGVjb3JlX2V2YXNfZ2V0KG1fZWNvcmVF
dmFzLmdldCgpKTsKLSAgICBpZiAoIWV2YXMpCisgICAgaWYgICghbV9wbGF0Zm9ybUNvbnRleHQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIENyZWF0ZSBhIG5ldyBFdmFzX0dMIG9iamVjdCBm
b3IgZ2wgcmVuZGVyaW5nIG9uIGVmbC4KLSAgICBtX2V2YXNHTCA9IGV2YXNfZ2xfbmV3KGV2YXMp
OwotICAgIGlmICghbV9ldmFzR0wpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEdldCB0aGUg
QVBJIGZvciByZW5kZXJpbmcgdXNpbmcgT3BlbkdMLgotICAgIC8vIFRoaXMgcmV0dXJucyBhIHN0
cnVjdHVyZSB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgT3BlbkdMIGZ1bmN0aW9ucyB3ZSBjYW4gdXNl
IHRvIHJlbmRlciBpbiBFdmFzCi0gICAgbV9hcGkgPSBldmFzX2dsX2FwaV9nZXQobV9ldmFzR0wp
OwotICAgIGlmICghbV9hcGkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENyZWF0ZSBhIGNv
bnRleHQKLSAgICBtX2V2YXNHTENvbnRleHQgPSBldmFzX2dsX2NvbnRleHRfY3JlYXRlKG1fZXZh
c0dMLCAwKTsKLSAgICBpZiAoIW1fZXZhc0dMQ29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gQ3JlYXRlIGEgc3VyZmFjZQotICAgIGlmICghY3JlYXRlU3VyZmFjZSgwLCByZW5kZXJT
dHlsZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQorICAgIGlmIChy
ZW5kZXJTdHlsZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyT2Zmc2NyZWVuKSB7CiAjaWYg
VVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgSW50U2l6ZSBzdXJmYWNlU2l6ZShtX2NvbnRleHQt
Pm1fY3VycmVudFdpZHRoLCBtX2NvbnRleHQtPm1fY3VycmVudEhlaWdodCk7Ci0gICAgbV9zdXJm
YWNlRmxhZ3MgPSBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzVGV4dHVyZVRhcmdldCB8IEdyYXBo
aWNzU3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nOwotICAgIGlmICghc3VyZmFjZVNpemUuaXNFbXB0
eSgpKQotICAgICAgICBtX2dyYXBoaWNzU3VyZmFjZSA9IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRl
KHN1cmZhY2VTaXplLCBtX3N1cmZhY2VGbGFncyk7CisgICAgICAgIG1fcGxhdGZvcm1TdXJmYWNl
ID0gR0xTdXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKCk7CisjZWxzZQorICAgICAgICBt
X3BsYXRmb3JtU3VyZmFjZSA9IEdMU3VyZmFjZTo6Y3JlYXRlT2ZmU2NyZWVuU3VyZmFjZSgpOwog
I2VuZGlmCisgICAgICAgIGlmICghbV9wbGF0Zm9ybVN1cmZhY2UpIHsKKyAgICAgICAgICAgIG1f
cGxhdGZvcm1Db250ZXh0ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICghbV9wbGF0Zm9ybUNvbnRleHQtPmluaXRpYWxpemUobV9wbGF0Zm9y
bVN1cmZhY2UuZ2V0KCkpIHx8ICFtX3BsYXRmb3JtQ29udGV4dC0+bWFrZUN1cnJlbnQobV9wbGF0
Zm9ybVN1cmZhY2UuZ2V0KCkpKSB7CisgICAgICAgICAgICByZWxlYXNlUmVzb3VyY2VzKCk7Cisg
ICAgICAgICAgICBtX3BsYXRmb3JtQ29udGV4dCA9IG51bGxwdHI7CisgICAgICAgICAgICBtX3Bs
YXRmb3JtU3VyZmFjZSA9IG51bGxwdHI7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9z
dXJmYWNlSGFuZGxlID0gbV9wbGF0Zm9ybVN1cmZhY2UtPmhhbmRsZSgpOworICAgIH0KIH0KIAog
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCkKIHsK
LSAgICBpZiAoIW1fZXZhc0dMKQotICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9ldmFzR0xT
dXJmYWNlKQotICAgICAgICBldmFzX2dsX3N1cmZhY2VfZGVzdHJveShtX2V2YXNHTCwgbV9ldmFz
R0xTdXJmYWNlKTsKK30KIAotICAgIGlmIChtX2V2YXNHTENvbnRleHQpCi0gICAgICAgIGV2YXNf
Z2xfY29udGV4dF9kZXN0cm95KG1fZXZhc0dMLCBtX2V2YXNHTENvbnRleHQpOwordm9pZCBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OnJlbGVhc2VSZXNvdXJjZXMoKQoreworICAgIC8vIFJlbGVh
c2UgdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgZHJhd2FibGUgb25seSBhZnRlciBkZXN0cm95aW5n
IGFueSBhc3NvY2lhdGVkIGdsIHJlc291cmNlcy4KKyAgICBpZiAobV9wbGF0Zm9ybUNvbnRleHQp
CisgICAgICAgIG1fcGxhdGZvcm1Db250ZXh0LT5kZXN0cm95KCk7CiAKLSAgICBldmFzX2dsX2Zy
ZWUobV9ldmFzR0wpOworICAgIGlmIChtX3BsYXRmb3JtU3VyZmFjZSkKKyAgICAgICAgbV9wbGF0
Zm9ybVN1cmZhY2UtPmRlc3Ryb3koKTsKIAotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAg
IG1fZ3JhcGhpY3NTdXJmYWNlLmNsZWFyKCk7Ci0jZW5kaWYKKyAgICBpZiAobV9wbGF0Zm9ybUNv
bnRleHQpCisgICAgICAgIG1fcGxhdGZvcm1Db250ZXh0LT5yZWxlYXNlQ3VycmVudCgpOwogfQog
Ci1ib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlU3VyZmFjZShQYWdlQ2xpZW50
RWZsKiBwYWdlQ2xpZW50LCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQorYm9vbCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZVN1cmZhY2UoUGFnZUNsaWVudEVmbCosIGJv
b2wpCiB7Ci0gICAgLy8gSWYgUmVuZGVyU3R5bGUgaXMgUmVuZGVyT2Zmc2NyZWVuLCB3ZSB3aWxs
IGJlIHJlbmRlcmluZyB0byBhIEZCTywKLSAgICAvLyBzbyBFdmFzX0dMX1N1cmZhY2UgaGFzIGEg
MXgxIGR1bW15IHN1cmZhY2UuCi0gICAgaW50IHdpZHRoID0gMTsKLSAgICBpbnQgaGVpZ2h0ID0g
MTsKLQotICAgIC8vIEJ1dCwgaW4gY2FzZSBvZiBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdywg
d2UgaGF2ZSB0byByZW5kZXIgdG8gYSByZW5kZXIgdGFyZ2V0IHN1cmZhY2Ugd2l0aCB0aGUgc2Ft
ZSBzaXplIGFzIG91ciB3ZWJWaWV3LgotICAgIGlmIChyZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRv
dykgewotICAgICAgICBpZiAoIXBhZ2VDbGllbnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIC8vIEZJWE1FOiBHZXQgZ2VvbWV0cnkgb2Ygd2ViVmlldyBhbmQgc2V0IHNpemUg
b2YgdGFyZ2V0IHN1cmZhY2UuCi0gICAgfQotCi0gICAgRXZhc19HTF9Db25maWcgY29uZmlnID0g
ewotICAgICAgICBFVkFTX0dMX1JHQkFfODg4OCwKLSAgICAgICAgRVZBU19HTF9ERVBUSF9CSVRf
OCwKLSAgICAgICAgRVZBU19HTF9TVEVOQ0lMX05PTkUsIC8vIEZJWE1FOiBzZXQgRVZBU19HTF9T
VEVOQ0lMX0JJVF84IGFmdGVyIGZpeGluZyBFdmFzX0dMIGJ1Zy4KLSAgICAgICAgRVZBU19HTF9P
UFRJT05TX05PTkUsCi0gICAgICAgIEVWQVNfR0xfTVVMVElTQU1QTEVfTk9ORQotICAgIH07Ci0K
LSAgICAvLyBDcmVhdGUgYSBuZXcgRXZhc19HTF9TdXJmYWNlIG9iamVjdAotICAgIG1fZXZhc0dM
U3VyZmFjZSA9IGV2YXNfZ2xfc3VyZmFjZV9jcmVhdGUobV9ldmFzR0wsICZjb25maWcsIHdpZHRo
LCBoZWlnaHQpOwotICAgIGlmICghbV9ldmFzR0xTdXJmYWNlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKHJlbmRlckRp
cmVjdGx5VG9Ib3N0V2luZG93KSB7Ci0gICAgICAgIEV2YXNfTmF0aXZlX1N1cmZhY2UgbmF0aXZl
U3VyZmFjZTsKLSAgICAgICAgLy8gRmlsbCBpbiB0aGUgTmF0aXZlIFN1cmZhY2UgaW5mb3JtYXRp
b24gZnJvbSB0aGUgZ2l2ZW4gRXZhcyBHTCBzdXJmYWNlLgotICAgICAgICBldmFzX2dsX25hdGl2
ZV9zdXJmYWNlX2dldChtX2V2YXNHTCwgbV9ldmFzR0xTdXJmYWNlLCAmbmF0aXZlU3VyZmFjZSk7
Ci0KLSAgICAgICAgLy8gRklYTUU6IENyZWF0ZSBhbmQgc3BlY2lhbGx5IHNldCB1cCBhIGV2YXNf
b2JqZWN0IHdoaWNoIGFjdCBhcyB0aGUgcmVuZGVyIHRhcmdlciBzdXJmYWNlLgotICAgIH0KLSNl
bmRpZgotCi0gICAgcmV0dXJuIHRydWU7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzZXRDdXJyZW50
R0xDb250ZXh0KHZvaWQqIGNvbnRleHQsIHZvaWQqIHN1cmZhY2UpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6c2V0Q29udGV4dExvc3RDYWxsYmFjayhQYXNzT3duUHRyPEdyYXBoaWNz
Q29udGV4dDNEOjpDb250ZXh0TG9zdENhbGxiYWNrPiBjYWxsQmFjaykKIHsKLSAgICBtX2dsQ29u
dGV4dCA9IGNvbnRleHQ7Ci0gICAgbV9nbFN1cmZhY2UgPSBzdXJmYWNlOworICAgIG1fY29udGV4
dExvc3RDYWxsYmFjayA9IGNhbGxCYWNrOwogfQogCiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNE
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNv
bnN0CiB7Ci0gICAgaWYgKG1fcmVuZGVyU3R5bGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRl
clRvQ3VycmVudEdMQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIG1fZ2xDb250ZXh0OwotCi0gICAg
cmV0dXJuIG1fZXZhc0dMQ29udGV4dDsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybUNvbnRleHQtPmhh
bmRsZSgpOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFrZUNvbnRleHRD
dXJyZW50KCkKIHsKLSAgICByZXR1cm4gZXZhc19nbF9tYWtlX2N1cnJlbnQobV9ldmFzR0wsIG1f
ZXZhc0dMU3VyZmFjZSwgbV9ldmFzR0xDb250ZXh0KTsKKyAgICBib29sIHJldHVyblZhbHVlID0g
bV9wbGF0Zm9ybUNvbnRleHQtPm1ha2VDdXJyZW50KG1fcGxhdGZvcm1TdXJmYWNlLmdldCgpKTsK
KworICAgIGlmIChtX2NvbnRleHRMb3N0Q2FsbGJhY2sgJiYgIW1fcGxhdGZvcm1Db250ZXh0LT5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgcmV0dXJuVmFsdWUgPSBmYWxzZTsKKyAgICAgICAgbV9jb250
ZXh0TG9zdENhbGxiYWNrLT5vbkNvbnRleHRMb3N0KCk7CisgICAgICAgIC8vIEZJWE1FOiByZXN0
b3JlIGNvbnRleHQKKyAgICB9CisKKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKICNpZiBV
U0UoVEVYVFVSRV9NQVBQRVJfR0wpCkBAIC0xODIsMjcgKzEyOSwzNiBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNv
bnN0IEZsb2F0UgogI2VuZGlmCiAKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc1N1cmZhY2VzKGNvbnN0IEludFNp
emUmIHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NT
dXJmYWNlcyhjb25zdCBJbnRTaXplJikKIHsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAg
ICAgIG1fZ3JhcGhpY3NTdXJmYWNlLmNsZWFyKCk7Ci0gICAgZWxzZQotICAgICAgICBtX2dyYXBo
aWNzU3VyZmFjZSA9IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKHNpemUsIG1fc3VyZmFjZUZsYWdz
KTsKKyAgICBtX3BlbmRpbmdTdXJmYWNlUmVzaXplID0gdHJ1ZTsKIH0KIAogdWludDMyX3QgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpjb3B5VG9HcmFwaGljc1N1cmZhY2UoKQogewotICAgIGlm
ICghbV9ncmFwaGljc1N1cmZhY2UpCisgICAgaWYgKCFtX3BsYXRmb3JtQ29udGV4dCB8fCAhbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgbV9ncmFwaGljc1N1cmZhY2UtPmNvcHlGcm9tVGV4dHVyZShtX2NvbnRl
eHQtPm1fdGV4dHVyZSwgSW50UmVjdCgwLCAwLCBtX2NvbnRleHQtPm1fY3VycmVudFdpZHRoLCBt
X2NvbnRleHQtPm1fY3VycmVudEhlaWdodCkpOwotICAgIHJldHVybiBtX2dyYXBoaWNzU3VyZmFj
ZS0+c3dhcEJ1ZmZlcnMoKTsKKyAgICBpZiAobV9wZW5kaW5nU3VyZmFjZVJlc2l6ZSkgeworICAg
ICAgICBtX3BlbmRpbmdTdXJmYWNlUmVzaXplID0gZmFsc2U7CisgICAgICAgIG1fcGxhdGZvcm1T
dXJmYWNlLT5zZXRHZW9tZXRyeShJbnRSZWN0KDAsIDAsIG1fY29udGV4dC0+bV9jdXJyZW50V2lk
dGgsIG1fY29udGV4dC0+bV9jdXJyZW50SGVpZ2h0KSk7CisgICAgfQorCisgICAgaWYgKG1fY29u
dGV4dC0+bV9hdHRycy5hbnRpYWxpYXMpIHsKKyNpZiAhVVNFKE9QRU5HTF9FU18yKQorICAgICAg
ICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9jb250ZXh0LT5t
X211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRFJBV19GUkFN
RUJVRkZFUl9FWFQsIG1fY29udGV4dC0+bV9mYm8pOworICAgICAgICBnbEJsaXRGcmFtZWJ1ZmZl
cigwLCAwLCBtX2NvbnRleHQtPm1fY3VycmVudFdpZHRoLCBtX2NvbnRleHQtPm1fY3VycmVudEhl
aWdodCwgMCwgMCwgbV9jb250ZXh0LT5tX2N1cnJlbnRXaWR0aCwgbV9jb250ZXh0LT5tX2N1cnJl
bnRIZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CisjZW5kaWYKKyAgICB9
CisKKyAgICBtX3BsYXRmb3JtU3VyZmFjZS0+dXBkYXRlQ29udGVudHMobV9jb250ZXh0LT5tX3Rl
eHR1cmUsIEludFJlY3QoMCwgMCwgbV9jb250ZXh0LT5tX2N1cnJlbnRXaWR0aCwgbV9jb250ZXh0
LT5tX2N1cnJlbnRIZWlnaHQpLCBtX2NvbnRleHQtPm1fYm91bmRGQk8pOworICAgIHJldHVybiAw
OwogfQogCiBHcmFwaGljc1N1cmZhY2VUb2tlbiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Omdy
YXBoaWNzU3VyZmFjZVRva2VuKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9ncmFwaGljc1N1cmZh
Y2UtPmV4cG9ydFRva2VuKCk7CisgICAgcmV0dXJuIG1fc3VyZmFjZUhhbmRsZTsKIH0KICNlbmRp
ZgogCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZS5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Vm
bC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAppbmRleCAxYWU0MzUxLi45YTljMDFiIDEwMDY0
NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZS5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICAgIENvcHlyaWdo
dCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIElu
dGVsIENvcnBvcmF0aW9uLgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw2ICsyMSw4IEBACiAj
aWZuZGVmIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZV9oCiAjZGVmaW5lIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZV9oCiAKKyNpZiBVU0UoM0RfR1JBUEhJQ1MpIHx8IFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKwogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKICNpZiBVU0Uo
VEVYVFVSRV9NQVBQRVJfR0wpCkBAIC0yNywxNCArMzAsMTEgQEAKICNlbmRpZgogCiAjaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCi0jaW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlLmgiCisjaW5jbHVk
ZSAiR0xTdXJmYWNlLmgiCiAjZW5kaWYKIAotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0wgICAgICAg
ICAgICAgICBFdmFzX0dMOwotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfU3VyZmFjZSAgICAgICBF
dmFzX0dMX1N1cmZhY2U7Ci10eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9Db250ZXh0ICAgICAgIEV2
YXNfR0xfQ29udGV4dDsKLXR5cGVkZWYgc3RydWN0IF9FdmFzX0dMX0NvbmZpZyAgICAgICAgRXZh
c19HTF9Db25maWc7Ci10eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9BUEkgICAgICAgICAgIEV2YXNf
R0xfQVBJOworI2luY2x1ZGUgIkdMQ29udGV4dC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CiAKIGNsYXNzIFBhZ2VDbGllbnRFZmw7CiAKQEAgLTQ4LDggKzQ4LDEyIEBAIHB1YmxpYzoK
ICAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBIb3N0V2lu
ZG93KiwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlKTsKICAgICB+R3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlKCk7CiAKKyAgICBib29sIGNyZWF0ZVN1cmZhY2UoUGFnZUNsaWVudEVmbCos
IGJvb2wpOworCiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEKCkgY29uc3Q7CiAKKyAgICB2b2lkIHNldENvbnRleHRMb3N0Q2FsbGJhY2soUGFz
c093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjaz4gIGNhbGxCYWNr
KTsKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBQbGF0Zm9ybUxheWVy
KiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAjZW5kaWYKQEAgLTYzLDI5ICs2NywyNSBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgYm9vbCBj
cmVhdGVTdXJmYWNlKFBhZ2VDbGllbnRFZmwqLCBib29sIHJlbmRlckRpcmVjdGx5VG9FdmFzR0xP
YmplY3QpOwotICAgIHZvaWQgc2V0Q3VycmVudEdMQ29udGV4dCh2b2lkKiwgdm9pZCopOworICAg
IGJvb2wgY3JlYXRlU3VyZmFjZSgpOworICAgIHZvaWQgcmVsZWFzZVJlc291cmNlcygpOwogCiAg
ICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwogICAgIEdyYXBo
aWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CiAgICAgSG9zdFdpbmRvdyogbV9ob3N0V2luZG93Owog
I2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIEdyYXBoaWNzU3VyZmFjZTo6RmxhZ3MgbV9z
dXJmYWNlRmxhZ3M7Ci0gICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gbV9ncmFwaGljc1N1cmZh
Y2U7CisgICAgT3duUHRyPEdMQ29udGV4dD4gbV9wbGF0Zm9ybUNvbnRleHQ7CisgICAgT3duUHRy
PEdMU3VyZmFjZT4gbV9wbGF0Zm9ybVN1cmZhY2U7CisgICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4g
bV9zdXJmYWNlSGFuZGxlOwogI2VuZGlmCiAKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q6
OkNvbnRleHRMb3N0Q2FsbGJhY2s+IG1fY29udGV4dExvc3RDYWxsYmFjazsKICAgICBMaXN0SGFz
aFNldDxHQzNEZW51bT4gbV9zeW50aGV0aWNFcnJvcnM7Ci0KLSAgICBPd25QdHI8RWNvcmVfRXZh
cz4gbV9lY29yZUV2YXM7Ci0gICAgRXZhc19HTCogbV9ldmFzR0w7Ci0gICAgRXZhc19HTF9Db250
ZXh0KiBtX2V2YXNHTENvbnRleHQ7Ci0gICAgRXZhc19HTF9TdXJmYWNlKiBtX2V2YXNHTFN1cmZh
Y2U7Ci0gICAgdm9pZCogbV9nbENvbnRleHQ7Ci0gICAgdm9pZCogbV9nbFN1cmZhY2U7Ci0gICAg
RXZhc19HTF9BUEkqIG1fYXBpOwotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSBt
X3JlbmRlclN0eWxlOworICAgIGJvb2wgbV9wZW5kaW5nU3VyZmFjZVJlc2l6ZTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEdyYXBoaWNzTGF5ZXJFZmxfaAorI2Vu
ZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uM2VhMTc3MwotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKQEAgLTAsMCArMSwxMjkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
IkdMWENvbnRleHQuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgSEFW
RShHTFgpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBHTFhDb250ZXh0ICgqR0xY
Q1JFQVRFQ09OVEVYVEFUVFJJQlNBUkJQUk9DKShEaXNwbGF5KiwgR0xYRkJDb25maWcsIEdMWENv
bnRleHQsIEJvb2wsIGNvbnN0IGludCopOworc3RhdGljIEdMWENSRUFURUNPTlRFWFRBVFRSSUJT
QVJCUFJPQyBnbFhDcmVhdGVDb250ZXh0QXR0cmlic0FSQiA9IDA7CisKK3N0YXRpYyBpbnQgQXR0
cmlic1tdID0geworICAgIEdMWF9DT05URVhUX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9B
UkIsCisgICAgR0xYX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9BUkIsCisgICAgMCB9OworCitzdGF0
aWMgdm9pZCBpbml0aWFsaXplQVJCRXh0ZW5zaW9ucygpCit7CisgICAgc3RhdGljIGJvb2wgaW5p
dGlhbGl6ZWQgPSBmYWxzZTsKKworICAgIGlmIChpbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIGdsWENyZWF0ZUNvbnRleHRBdHRyaWJz
QVJCID0gcmVpbnRlcnByZXRfY2FzdDxHTFhDUkVBVEVDT05URVhUQVRUUklCU0FSQlBST0M+KGds
WEdldFByb2NBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KCJnbFhDcmVh
dGVDb250ZXh0QXR0cmlic0FSQiIpKSk7Cit9CisKKy8vIEdMWE9mZlNjcmVlbkNvbnRleHQKKwor
R0xYT2ZmU2NyZWVuQ29udGV4dDo6R0xYT2ZmU2NyZWVuQ29udGV4dCgpCisgICAgOiBHTENvbnRl
eHQoKQorICAgICwgbV9kaXNwbGF5KDApCit7CisKK30KKworYm9vbCBHTFhPZmZTY3JlZW5Db250
ZXh0Ojppbml0aWFsaXplKEdMU3VyZmFjZSogc3VyZmFjZSkKK3sKKyAgICBpZiAoIXN1cmZhY2Up
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fZGlzcGxheSA9IHN1cmZhY2UtPnNoYXJl
ZERpc3BsYXkoKTsKKworICAgIGlmICghbV9kaXNwbGF5KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBHTFhGQkNvbmZpZyBjb25maWcgPSBzdXJmYWNlLT5jb25maWd1cmF0aW9uKCk7CisK
KyAgICBpZiAoY29uZmlnKSB7CisgICAgICAgIGluaXRpYWxpemVBUkJFeHRlbnNpb25zKCk7CisK
KyAgICAgICAgaWYgKGdsWENyZWF0ZUNvbnRleHRBdHRyaWJzQVJCKQorICAgICAgICAgICAgbV9j
b250ZXh0SGFuZGxlID0gZ2xYQ3JlYXRlQ29udGV4dEF0dHJpYnNBUkIobV9kaXNwbGF5LCBjb25m
aWcsIDAsIHRydWUsIEF0dHJpYnMpOworCisgICAgICAgIGlmIChtX2NvbnRleHRIYW5kbGUpCisg
ICAgICAgICAgICBtX3Jlc2V0TG9zdENvbnRleHQgPSB0cnVlOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtX2NvbnRleHRIYW5kbGUgPSBnbFhDcmVhdGVOZXdDb250ZXh0KG1fZGlzcGxheSwg
Y29uZmlnLCBHTFhfUkdCQV9UWVBFLCAwLCB0cnVlKTsKKworICAgICAgICBpZiAobV9jb250ZXh0
SGFuZGxlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitHTFhPZmZTY3JlZW5Db250ZXh0Ojp+R0xYT2ZmU2NyZWVuQ29udGV4dCgpCit7
CisKK30KKworYm9vbCBHTFhPZmZTY3JlZW5Db250ZXh0Ojppc0N1cnJlbnRDb250ZXh0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0SGFuZGxlID09IGdsWEdldEN1cnJlbnRDb250ZXh0
KCk7Cit9CisKK2Jvb2wgR0xYT2ZmU2NyZWVuQ29udGV4dDo6cGxhdGZvcm1NYWtlQ3VycmVudChH
TFN1cmZhY2UqIHN1cmZhY2UpCit7CisgICAgcmV0dXJuIGdsWE1ha2VDdXJyZW50KHN1cmZhY2Ut
PnNoYXJlZERpc3BsYXkoKSwgc3VyZmFjZS0+aGFuZGxlKCkuZnJvbnRCdWZmZXJIYW5kbGUsIG1f
Y29udGV4dEhhbmRsZSk7Cit9CisKK3ZvaWQgR0xYT2ZmU2NyZWVuQ29udGV4dDo6cGxhdGZvcm1S
ZWxlYXNlQ3VycmVudCgpCit7CisgICAgZ2xYTWFrZUN1cnJlbnQobV9kaXNwbGF5LCAwLCAwKTsK
K30KKwordm9pZCBHTFhPZmZTY3JlZW5Db250ZXh0OjpmcmVlUmVzb3VyY2VzKCkKK3sKKyAgICBp
ZiAobV9jb250ZXh0SGFuZGxlKQorICAgICAgICBnbFhEZXN0cm95Q29udGV4dChtX2Rpc3BsYXks
IG1fY29udGV4dEhhbmRsZSk7CisKKyAgICBtX2NvbnRleHRIYW5kbGUgPSAwOworICAgIG1fZGlz
cGxheSA9IDA7Cit9CisKK3ZvaWQgR0xYT2ZmU2NyZWVuQ29udGV4dDo6ZGVzdHJveSgpCit7Cisg
ICAgZnJlZVJlc291cmNlcygpOworICAgIEdMQ29udGV4dDo6ZGVzdHJveSgpOworfQorCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2dseC9HTFhDb250ZXh0LmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZ2x4L0dMWENvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hYTQxMjM0Ci0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBHTFhDb250ZXh0X2gKKyNkZWZpbmUgR0xYQ29udGV4dF9oCisK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEhBVkUoR0xYKQorCisjaW5jbHVk
ZSAiR0xDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR0xYQ3VycmVu
dENvbnRleHRXcmFwcGVyIDogcHVibGljIEdMQ29udGV4dCB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoR0xYQ3VycmVudENvbnRleHRXcmFwcGVyKTsKKworcHVibGljOgorICAgIEdMWEN1cnJl
bnRDb250ZXh0V3JhcHBlcigpCisgICAgICAgIDogR0xDb250ZXh0KCkKKyAgICB7CisgICAgICAg
IG1fY29udGV4dEhhbmRsZSA9IGdsWEdldEN1cnJlbnRDb250ZXh0KCk7CisgICAgfQorCisgICAg
dmlydHVhbCB+R0xYQ3VycmVudENvbnRleHRXcmFwcGVyKCkgeyB9Cit9OworCitjbGFzcyBHTFhP
ZmZTY3JlZW5Db250ZXh0IDogcHVibGljIEdMQ29udGV4dCB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoR0xYT2ZmU2NyZWVuQ29udGV4dCk7CisKK3B1YmxpYzoKKyAgICBHTFhPZmZTY3JlZW5D
b250ZXh0KCk7CisgICAgdmlydHVhbCB+R0xYT2ZmU2NyZWVuQ29udGV4dCgpOworICAgIGJvb2wg
aW5pdGlhbGl6ZShHTFN1cmZhY2UqKTsKKyAgICBib29sIHBsYXRmb3JtTWFrZUN1cnJlbnQoR0xT
dXJmYWNlKik7CisgICAgdm9pZCBwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KCk7CisgICAgdm9pZCBk
ZXN0cm95KCk7CisgICAgYm9vbCBpc0N1cnJlbnRDb250ZXh0KCkgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgdm9pZCBmcmVlUmVzb3VyY2VzKCk7CisgICAgRGlzcGxheSogbV9kaXNwbGF5OworfTsK
KworfQorCisjZW5kaWYgLy8gR0xYQ1VSUkVOVENPTlRFWFdSQVBQRVJfSAorCisjZW5kaWYKZGlm
ZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xY
U3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L0dMWFN1cmZhY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYTQ2
YzEKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCkBAIC0wLDAgKzEsMjE3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJHTFhTdXJmYWNlLmgiCisK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEhBVkUoR0xYKQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1NoYXJlZFgxMVJlc291cmNlcyogU2hhcmVkWDExUmVzb3VyY2VzOjpt
X3N0YXRpY1NoYXJlZFJlc291cmNlID0gMDsKKworc3RhdGljIGNvbnN0IGludCBwYnVmZmVyQXR0
cmlidXRlc1tdID0geyBHTFhfUEJVRkZFUl9XSURUSCwgMSwgR0xYX1BCVUZGRVJfSEVJR0hULCAx
LCAwIH07CisKK0dMWFN1cmZhY2U6OkdMWFN1cmZhY2UoKQorICAgIDogR0xTdXJmYWNlKCkKK3sK
KyAgICBtX3NoYXJlZFJlc291cmNlcyA9IFNoYXJlZFgxMVJlc291cmNlczo6Y3JlYXRlKCk7Cisg
ICAgbV9zaGFyZWREaXNwbGF5ID0gbV9zaGFyZWRSZXNvdXJjZXMtPmRpc3BsYXkoKTsKK30KKwor
R0xYU3VyZmFjZTo6fkdMWFN1cmZhY2UoKQoreworCit9CisKK1hWaXN1YWxJbmZvKiBHTFhTdXJm
YWNlOjp2aXN1YWxJbmZvKCkKK3sKKyAgICByZXR1cm4gbV9zaGFyZWRSZXNvdXJjZXMtPnZpc3Vh
bEluZm8oKTsKK30KKworV2luZG93IEdMWFN1cmZhY2U6OnhXaW5kb3coKQoreworICAgIHJldHVy
biBtX3NoYXJlZFJlc291cmNlcy0+Z2V0WFdpbmRvdygpOworfQorCitHTFhGQkNvbmZpZyBHTFhT
dXJmYWNlOjpwQnVmZmVyQ29uZmlnKCkKK3sKKyAgICByZXR1cm4gbV9zaGFyZWRSZXNvdXJjZXMt
PnBCdWZmZXJDb250ZXh0Q29uZmlnKCk7Cit9CisKK0dMWEZCQ29uZmlnIEdMWFN1cmZhY2U6OnRy
YW5zcG9ydFN1cmZhY2VDb25maWcoKQoreworICAgIHJldHVybiBtX3NoYXJlZFJlc291cmNlcy0+
c3VyZmFjZUNvbnRleHRDb25maWcoKTsKK30KKworYm9vbCBHTFhTdXJmYWNlOjppc1hSZW5kZXJF
eHRlbnNpb25TdXBwb3J0ZWQoKQoreworICAgIHJldHVybiBtX3NoYXJlZFJlc291cmNlcy0+aXNY
UmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCk7Cit9CisKKy8vIEdMWFRyYW5zcG9ydFN1cmZhY2UK
KworR0xYVHJhbnNwb3J0U3VyZmFjZTo6R0xYVHJhbnNwb3J0U3VyZmFjZSgpCisgICAgOiBHTFhT
dXJmYWNlKCkKK3sKKyAgICBpbml0aWFsaXplKCk7Cit9CisKK0dMWFRyYW5zcG9ydFN1cmZhY2U6
On5HTFhUcmFuc3BvcnRTdXJmYWNlKCkKK3sKKworfQorCitQbGF0Zm9ybVN1cmZhY2VDb25maWcg
R0xYVHJhbnNwb3J0U3VyZmFjZTo6Y29uZmlndXJhdGlvbigpCit7CisgICAgcmV0dXJuIHRyYW5z
cG9ydFN1cmZhY2VDb25maWcoKTsKK30KKwordm9pZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpzd2Fw
QnVmZmVycygpCit7CisgICAgaWYgKG1fZHJhd2FibGUpIHsKKyAgICAgICAgaWYgKG1fcmVzdG9y
ZU5lZWRlZCkgeworICAgICAgICAgICAgR0xpbnQgb2xkRkJPOworICAgICAgICAgICAgZ2xHZXRJ
bnRlZ2VydihHTF9GUkFNRUJVRkZFUl9CSU5ESU5HLCAmb2xkRkJPKTsKKyAgICAgICAgICAgIGds
QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKTsKKyAgICAgICAgICAgIGdsWFN3YXBC
dWZmZXJzKHNoYXJlZERpc3BsYXkoKSwgbV9kcmF3YWJsZSk7CisgICAgICAgICAgICBnbEJpbmRG
cmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgb2xkRkJPKTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBnbFhTd2FwQnVmZmVycyhzaGFyZWREaXNwbGF5KCksIG1fZHJhd2FibGUpOworICAg
IH0KK30KKwordm9pZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpzZXRHZW9tZXRyeShjb25zdCBJbnRS
ZWN0JiBuZXdSZWN0KQoreworICAgIEdMU3VyZmFjZTo6c2V0R2VvbWV0cnkobmV3UmVjdCk7Cisg
ICAgaW50IHdpZHRoID0gbmV3UmVjdC53aWR0aCgpOworICAgIGludCBoZWlnaHQgPSBuZXdSZWN0
LmhlaWdodCgpOworICAgIFhSZXNpemVXaW5kb3coc2hhcmVkRGlzcGxheSgpLCBtX2RyYXdhYmxl
LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjppbml0aWFs
aXplKCkKK3sKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gc2hhcmVkRGlzcGxheSgpOworICAgIEdM
WEZCQ29uZmlnIGNvbmZpZyA9IHRyYW5zcG9ydFN1cmZhY2VDb25maWcoKTsKKworICAgIGlmICgh
Y29uZmlnKQorICAgICAgICByZXR1cm47CisKKyAgICBYVmlzdWFsSW5mbyogdmlzSW5mbyA9ICB2
aXN1YWxJbmZvKCk7CisKKyAgICBpZiAoIXZpc0luZm8pCisgICAgICAgIHJldHVybjsKKworICAg
IENvbG9ybWFwIGNtYXAgPSBYQ3JlYXRlQ29sb3JtYXAoZGlzcGxheSwgeFdpbmRvdygpLCB2aXNJ
bmZvLT52aXN1YWwsIEFsbG9jTm9uZSk7CisgICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgYTsKKyAg
ICBhLmJhY2tncm91bmRfcGl4ZWwgPSBXaGl0ZVBpeGVsKGRpc3BsYXksIDApOworICAgIGEuYm9y
ZGVyX3BpeGVsID0gQmxhY2tQaXhlbChkaXNwbGF5LCAwKTsKKyAgICBhLmNvbG9ybWFwID0gY21h
cDsKKyAgICBtX2RyYXdhYmxlICA9IFhDcmVhdGVXaW5kb3coZGlzcGxheSwgeFdpbmRvdygpLCAw
LCAwLCAxLCAxLCAwLCB2aXNJbmZvLT5kZXB0aCwgSW5wdXRPdXRwdXQsIHZpc0luZm8tPnZpc3Vh
bCwgQ1dCYWNrUGl4ZWwgfCBDV0JvcmRlclBpeGVsIHwgQ1dDb2xvcm1hcCwgJmEpOworCisgICAg
aWYgKCFtX2RyYXdhYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBYU2V0V2luZG93QmFja2dy
b3VuZFBpeG1hcChkaXNwbGF5LCBtX2RyYXdhYmxlLCAwKTsKKyAgICBYQ29tcG9zaXRlUmVkaXJl
Y3RXaW5kb3coZGlzcGxheSwgbV9kcmF3YWJsZSwgQ29tcG9zaXRlUmVkaXJlY3RNYW51YWwpOwor
CisgICAgaWYgKGlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpKQorICAgICAgICBYTWFwV2lu
ZG93KGRpc3BsYXksIG1fZHJhd2FibGUpOworfQorCit2b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2U6
OmRlc3Ryb3koKQoreworICAgIGZyZWVSZXNvdXJjZXMoKTsKKyAgICBHTFN1cmZhY2U6OmRlc3Ry
b3koKTsKK30KKwordm9pZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpmcmVlUmVzb3VyY2VzKCkKK3sK
KyAgICBpZiAoIW1fZHJhd2FibGUpCisgICAgICAgIHJldHVybjsKKworICAgIEdMU3VyZmFjZTo6
ZGVzdHJveSgpOworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBzaGFyZWREaXNwbGF5KCk7CisKKyAg
ICBpZiAoIWRpc3BsYXkpCisgICAgICAgIHJldHVybjsKKworICAgIFhEZXN0cm95V2luZG93KGRp
c3BsYXksIG1fZHJhd2FibGUpOworICAgIG1fZHJhd2FibGUgPSAwOworfQorCisvLyBHTFggUEJV
RkZFUiBTVVJGQUNFCisKK0dMWFBCdWZmZXI6OkdMWFBCdWZmZXIoKQorICAgIDpHTFhTdXJmYWNl
KCkKK3sKKyAgICBpbml0aWFsaXplKCk7Cit9CisKK0dMWFBCdWZmZXI6On5HTFhQQnVmZmVyKCkK
K3sKKworfQorCit2b2lkIEdMWFBCdWZmZXI6OmluaXRpYWxpemUoKQoreworICAgIERpc3BsYXkq
IGRpc3BsYXkgPSBzaGFyZWREaXNwbGF5KCk7CisgICAgR0xYRkJDb25maWcgY29uZmlnID0gcEJ1
ZmZlckNvbmZpZygpOworCisgICAgaWYgKCFjb25maWcpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fZHJhd2FibGUgPSBnbFhDcmVhdGVQYnVmZmVyKGRpc3BsYXksIGNvbmZpZywgcGJ1ZmZlckF0
dHJpYnV0ZXMpOworfQorCitQbGF0Zm9ybVN1cmZhY2VDb25maWcgR0xYUEJ1ZmZlcjo6Y29uZmln
dXJhdGlvbigpCit7CisgICAgcmV0dXJuIHBCdWZmZXJDb25maWcoKTsKK30KKwordm9pZCBHTFhQ
QnVmZmVyOjpkZXN0cm95KCkKK3sKKyAgICBmcmVlUmVzb3VyY2VzKCk7Cit9CisKK3ZvaWQgR0xY
UEJ1ZmZlcjo6ZnJlZVJlc291cmNlcygpCit7CisgICAgaWYgKCFtX2RyYXdhYmxlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBHTFN1cmZhY2U6OmRlc3Ryb3koKTsKKyAgICBEaXNwbGF5KiBkaXNw
bGF5ID0gc2hhcmVkRGlzcGxheSgpOworCisgICAgaWYgKCFkaXNwbGF5KQorICAgICAgICByZXR1
cm47CisKKyAgICBnbFhEZXN0cm95UGJ1ZmZlcihkaXNwbGF5LCBtX2RyYXdhYmxlKTsKKyAgICBt
X2RyYXdhYmxlID0gMDsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk3ODA4MwotLS0gL2Rldi9udWxsCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oCkBA
IC0wLDAgKzEsMjkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0
aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdMWFN1cmZhY2Vf
aAorI2RlZmluZSBHTFhTdXJmYWNlX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykgJiYgSEFWRShHTFgpCisKKyNpbmNsdWRlICJHTFN1cmZhY2UuaCIKKworI2luY2x1ZGUgPFgx
MS9leHRlbnNpb25zL1hjb21wb3NpdGUuaD4KKyNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YcmVu
ZGVyLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgU2hhcmVkWDExUmVzb3VyY2VzIDogcHVibGljIFdURjo6UmVmQ291bnRlZEJh
c2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNoYXJlZFgxMVJlc291cmNlcyk7CisKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRYMTFSZXNvdXJjZXM+IGNyZWF0ZSgp
CisgICAgeworICAgICAgICBpZiAoIW1fc3RhdGljU2hhcmVkUmVzb3VyY2UpCisgICAgICAgICAg
ICBtX3N0YXRpY1NoYXJlZFJlc291cmNlID0gbmV3IFNoYXJlZFgxMVJlc291cmNlcygpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX3N0YXRpY1NoYXJlZFJlc291cmNlLT5yZWYoKTsKKwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobV9zdGF0aWNTaGFyZWRSZXNvdXJjZSk7CisgICAgfQor
CisgICAgdm9pZCBkZXJlZigpCisgICAgeworICAgICAgICBpZiAoZGVyZWZCYXNlKCkpIHsKKyAg
ICAgICAgICAgIG1fc3RhdGljU2hhcmVkUmVzb3VyY2UgPSAwOworICAgICAgICAgICAgZGVsZXRl
IHRoaXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBXaW5kb3cgZ2V0WFdpbmRvdygpCisgICAg
eworICAgICAgICBpZiAoIW1fd2luZG93KSB7CisgICAgICAgICAgICBEaXNwbGF5KiBkcHkgPSBk
aXNwbGF5KCk7CisgICAgICAgICAgICBYU2V0V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGVzOwor
ICAgICAgICAgICAgYXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IHRydWU7CisgICAgICAg
ICAgICBtX3dpbmRvdyA9IFhDcmVhdGVTaW1wbGVXaW5kb3coZHB5LCBYRGVmYXVsdFJvb3RXaW5k
b3coZHB5KSwgLTEsIC0xLCAxLCAxLCAwLCBCbGFja1BpeGVsKGRweSwgMCksIFdoaXRlUGl4ZWwo
ZHB5LCAwKSk7CisgICAgICAgICAgICAvLyBGcm9tIGh0dHA6Ly90cm9uY2hlLmNvbS9ndWkveC94
bGliL3dpbmRvdy9hdHRyaWJ1dGVzLworICAgICAgICAgICAgWENoYW5nZVdpbmRvd0F0dHJpYnV0
ZXMoZHB5LCBtX3dpbmRvdywgQ1dPdmVycmlkZVJlZGlyZWN0LCAmYXR0cmlidXRlcyk7CisgICAg
ICAgICAgICBYTWFwV2luZG93KGRweSwgbV93aW5kb3cpOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIG1fd2luZG93OworICAgIH0KKworICAgIERpc3BsYXkqIGRpc3BsYXkoKQorICAgIHsK
KyAgICAgICAgaWYgKCFtX2Rpc3BsYXkpCisgICAgICAgICAgICBtX2Rpc3BsYXkgPSBYT3BlbkRp
c3BsYXkoMCk7CisKKyAgICAgICAgcmV0dXJuIG1fZGlzcGxheTsKKyAgICB9CisKKyAgICBYVmlz
dWFsSW5mbyogdmlzdWFsSW5mbygpCisgICAgeworICAgICAgICBpZiAoIW1fVmlzdWFsSW5mbykK
KyAgICAgICAgICAgIHN1cmZhY2VDb250ZXh0Q29uZmlnKCk7CisKKyAgICAgICAgcmV0dXJuIG1f
VmlzdWFsSW5mbzsKKyAgICB9CisKKyAgICBHTFhGQkNvbmZpZyBjcmVhdGVDb25maWcoY29uc3Qg
aW50IGF0dHJpYnV0ZXNbXSkKKyAgICB7CisgICAgICAgIGludCBudW1SZXR1cm5lZDsKKyAgICAg
ICAgbV9WaXN1YWxJbmZvID0gMDsKKyAgICAgICAgR0xYRkJDb25maWcqIHRlbXAgPSBnbFhDaG9v
c2VGQkNvbmZpZyhkaXNwbGF5KCksIERlZmF1bHRTY3JlZW4oZGlzcGxheSgpKSwgYXR0cmlidXRl
cywgJm51bVJldHVybmVkKTsKKworICAgICAgICBpZiAoIW51bVJldHVybmVkKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICAgICAgR0xYRkJDb25maWcgc2VsZWN0ZWRDb25maWcgPSAwOwor
ICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBudW1SZXR1cm5lZDsgKytpKSB7CisgICAgICAgICAgICBtX1Zpc3VhbEluZm8gPSBnbFhHZXRW
aXN1YWxGcm9tRkJDb25maWcoZGlzcGxheSgpLCB0ZW1wW2ldKTsKKworICAgICAgICAgICAgaWYg
KCFtX1Zpc3VhbEluZm8pCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAg
IGlmIChtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbikgeworICAgICAgICAgICAgICAgIFhSZW5k
ZXJQaWN0Rm9ybWF0KiBmb3JtYXQgPSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdChkaXNwbGF5KCks
IG1fVmlzdWFsSW5mby0+dmlzdWFsKTsKKyAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ICYmIGZv
cm1hdC0+ZGlyZWN0LmFscGhhTWFzayA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0
ZWRDb25maWcgPSB0ZW1wW2ldOworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSBpZiAobV9WaXN1YWxJbmZvLT5kZXB0aCA9PSAzMikgeworICAgICAgICAgICAgICAg
IHNlbGVjdGVkQ29uZmlnID0gdGVtcFtpXTsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBEaWRub3QgZmluZCBhbnkg
dmlzdWFsIHN1cHBvcnRpbmcgYWxwaGEsIHNlbGVjdCB0aGUgZmlyc3QgYXZhaWxhYmxlIGNvbmZp
Zy4KKyAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgc2VsZWN0ZWRDb25maWcgPSB0
ZW1wWzBdOworICAgICAgICAgICAgbV9WaXN1YWxJbmZvID0gZ2xYR2V0VmlzdWFsRnJvbUZCQ29u
ZmlnKG1fZGlzcGxheSwgdGVtcFswXSk7CisgICAgICAgIH0KKworICAgICAgICBYRnJlZSh0ZW1w
KTsKKworICAgICAgICByZXR1cm4gc2VsZWN0ZWRDb25maWc7CisgICAgfQorCisgICAgR0xYRkJD
b25maWcgcEJ1ZmZlckNvbnRleHRDb25maWcoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3BidWZm
ZXJmYkNvbmZpZykgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGludCBhdHRyaWJ1dGVzW10g
PSB7CisgICAgICAgICAgICAgICAgR0xYX0xFVkVMLCAwLAorICAgICAgICAgICAgICAgIEdMWF9E
UkFXQUJMRV9UWVBFLCBHTFhfUEJVRkZFUl9CSVQsCisgICAgICAgICAgICAgICAgR0xYX1JFTkRF
Ul9UWVBFLCAgIEdMWF9SR0JBX0JJVCwKKyAgICAgICAgICAgICAgICBHTFhfUkVEX1NJWkUsICAg
ICAgMSwKKyAgICAgICAgICAgICAgICBHTFhfR1JFRU5fU0laRSwgICAgMSwKKyAgICAgICAgICAg
ICAgICBHTFhfQkxVRV9TSVpFLCAgICAgMSwKKyAgICAgICAgICAgICAgICBHTFhfRE9VQkxFQlVG
RkVSLCAgR0xfRkFMU0UsCisgICAgICAgICAgICAgICAgTm9uZQorICAgICAgICAgICAgfTsKKwor
ICAgICAgICAgICAgaW50IG51bVJldHVybmVkOworICAgICAgICAgICAgR0xYRkJDb25maWcqIHRl
bXAgPSBnbFhDaG9vc2VGQkNvbmZpZyhkaXNwbGF5KCksIERlZmF1bHRTY3JlZW4oZGlzcGxheSgp
KSwgYXR0cmlidXRlcywgJm51bVJldHVybmVkKTsKKyAgICAgICAgICAgIGlmIChudW1SZXR1cm5l
ZCkKKyAgICAgICAgICAgICAgICBtX3BidWZmZXJmYkNvbmZpZyA9ICB0ZW1wWzBdOworICAgICAg
ICAgICAgWEZyZWUodGVtcCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV9wYnVmZmVy
ZmJDb25maWc7CisgICAgfQorCisgICAgR0xYRkJDb25maWcgc3VyZmFjZUNvbnRleHRDb25maWco
KQorICAgIHsKKyAgICAgICAgaWYgKCFtX3N1cmZhY2VDb250ZXh0ZmJDb25maWcpIHsKKyAgICAg
ICAgICAgIHN0YXRpYyBpbnQgYXR0cmlidXRlc1tdID0geworICAgICAgICAgICAgICAgIEdMWF9M
RVZFTCwgMCwKKyAgICAgICAgICAgICAgICBHTFhfRFJBV0FCTEVfVFlQRSwgR0xYX1dJTkRPV19C
SVQsCisgICAgICAgICAgICAgICAgR0xYX1JFTkRFUl9UWVBFLCAgIEdMWF9SR0JBX0JJVCwKKyAg
ICAgICAgICAgICAgICBHTFhfUkVEX1NJWkUsICAgICAgMSwKKyAgICAgICAgICAgICAgICBHTFhf
R1JFRU5fU0laRSwgICAgMSwKKyAgICAgICAgICAgICAgICBHTFhfQkxVRV9TSVpFLCAgICAgMSwK
KyAgICAgICAgICAgICAgICBHTFhfQUxQSEFfU0laRSwgICAgMSwKKyAgICAgICAgICAgICAgICBH
TFhfREVQVEhfU0laRSwgICAgMSwKKyAgICAgICAgICAgICAgICBHTFhfWF9WSVNVQUxfVFlQRSwg
R0xYX1RSVUVfQ09MT1IsCisgICAgICAgICAgICAgICAgR0xYX0RPVUJMRUJVRkZFUiwgIFRydWUs
CisgICAgICAgICAgICAgICAgTm9uZQorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaW50
IGV2ZW50QmFzZXAsIGVycm9yQmFzZXA7CisgICAgICAgICAgICBtX3N1cHBvcnRzWFJlbmRlckV4
dGVuc2lvbiA9IFhSZW5kZXJRdWVyeUV4dGVuc2lvbihkaXNwbGF5KCksICZldmVudEJhc2VwLCAm
ZXJyb3JCYXNlcCk7CisKKyAgICAgICAgICAgIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZyA9IGNy
ZWF0ZUNvbmZpZyhhdHRyaWJ1dGVzKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtX3N1
cmZhY2VDb250ZXh0ZmJDb25maWc7CisgICAgfQorCisgICAgYm9vbCBpc1hSZW5kZXJFeHRlbnNp
b25TdXBwb3J0ZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3VwcG9ydHNYUmVuZGVyRXh0
ZW5zaW9uOworICAgIH0KKworcHJpdmF0ZToKKyAgICBTaGFyZWRYMTFSZXNvdXJjZXMoKQorICAg
ICAgICA6IG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uKGZhbHNlKQorICAgICAgICAsIG1fbWFy
a0ZvckRlbGV0aW9uKGZhbHNlKQorICAgICAgICAsIG1fd2luZG93KDApCisgICAgICAgICwgbV9k
aXNwbGF5KDApCisgICAgICAgICwgbV9wYnVmZmVyZmJDb25maWcoMCkKKyAgICAgICAgLCBtX3N1
cmZhY2VDb250ZXh0ZmJDb25maWcoMCkKKyAgICAgICAgLCBtX1Zpc3VhbEluZm8oMCkKKyAgICB7
CisKKyAgICB9CisKKyAgICB+U2hhcmVkWDExUmVzb3VyY2VzKCkKKyAgICB7CisgICAgICAgIGlm
ICghbV9kaXNwbGF5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChtX3dpbmRv
dykgeworICAgICAgICAgICAgWFVubWFwV2luZG93KG1fZGlzcGxheSwgbV93aW5kb3cpOworICAg
ICAgICAgICAgWERlc3Ryb3lXaW5kb3cobV9kaXNwbGF5LCBtX3dpbmRvdyk7CisgICAgICAgICAg
ICBtX3dpbmRvdyA9IDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9wYnVmZmVyZmJDb25m
aWcpCisgICAgICAgICAgICBtX3BidWZmZXJmYkNvbmZpZyA9IDA7CisKKyAgICAgICAgaWYgKG1f
c3VyZmFjZUNvbnRleHRmYkNvbmZpZykKKyAgICAgICAgICAgIG1fc3VyZmFjZUNvbnRleHRmYkNv
bmZpZyA9IDA7CisKKyAgICAgICAgaWYgKG1fVmlzdWFsSW5mbykgeworICAgICAgICAgICAgWEZy
ZWUobV9WaXN1YWxJbmZvKTsKKyAgICAgICAgICAgIG1fVmlzdWFsSW5mbyA9IDA7CisgICAgICAg
IH0KKworICAgICAgICBYQ2xvc2VEaXNwbGF5KG1fZGlzcGxheSk7CisgICAgICAgIG1fZGlzcGxh
eSA9IDA7CisgICAgfQorCisgICAgc3RhdGljIFNoYXJlZFgxMVJlc291cmNlcyogbV9zdGF0aWNT
aGFyZWRSZXNvdXJjZTsKKyAgICBib29sIG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uOworICAg
IGJvb2wgbV9tYXJrRm9yRGVsZXRpb247CisgICAgV2luZG93IG1fd2luZG93OworICAgIERpc3Bs
YXkqIG1fZGlzcGxheTsKKyAgICBHTFhGQkNvbmZpZyBtX3BidWZmZXJmYkNvbmZpZzsKKyAgICBH
TFhGQkNvbmZpZyBtX3N1cmZhY2VDb250ZXh0ZmJDb25maWc7CisgICAgWFZpc3VhbEluZm8qIG1f
VmlzdWFsSW5mbzsKK307CisKK2NsYXNzIEdMWFN1cmZhY2UgOiBwdWJsaWMgR0xTdXJmYWNlIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHTFhTdXJmYWNlKTsKKworcHVibGljOgorICAgIEdM
WFN1cmZhY2UoKTsKKyAgICB2aXJ0dWFsIH5HTFhTdXJmYWNlKCk7CisKK3Byb3RlY3RlZDoKKyAg
ICBYVmlzdWFsSW5mbyogdmlzdWFsSW5mbygpOworICAgIFdpbmRvdyB4V2luZG93KCk7CisgICAg
R0xYRkJDb25maWcgcEJ1ZmZlckNvbmZpZygpOworICAgIEdMWEZCQ29uZmlnIHRyYW5zcG9ydFN1
cmZhY2VDb25maWcoKTsKKyAgICBib29sIGlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpOwor
Citwcml2YXRlOgorICAgIFJlZlB0cjxTaGFyZWRYMTFSZXNvdXJjZXM+IG1fc2hhcmVkUmVzb3Vy
Y2VzOworfTsKKworY2xhc3MgR0xYVHJhbnNwb3J0U3VyZmFjZSA6IHB1YmxpYyBHTFhTdXJmYWNl
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHTFhUcmFuc3BvcnRTdXJmYWNlKTsKKworcHVi
bGljOgorICAgIEdMWFRyYW5zcG9ydFN1cmZhY2UoKTsKKyAgICB2aXJ0dWFsIH5HTFhUcmFuc3Bv
cnRTdXJmYWNlKCk7CisgICAgUGxhdGZvcm1TdXJmYWNlQ29uZmlnIGNvbmZpZ3VyYXRpb24oKTsK
KyAgICB2b2lkIHN3YXBCdWZmZXJzKCk7CisgICAgdm9pZCBzZXRHZW9tZXRyeShjb25zdCBJbnRS
ZWN0JiBuZXdSZWN0KTsKKyAgICB2b2lkIGRlc3Ryb3koKTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IGluaXRpYWxpemUoKTsKKyAgICB2b2lkIGZyZWVSZXNvdXJjZXMoKTsKK307CisKK2NsYXNzIEdM
WFBCdWZmZXIgOiBwdWJsaWMgR0xYU3VyZmFjZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
R0xYUEJ1ZmZlcik7CisKK3B1YmxpYzoKKyAgICBHTFhQQnVmZmVyKCk7CisgICAgdmlydHVhbCB+
R0xYUEJ1ZmZlcigpOworICAgIFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBjb25maWd1cmF0aW9uKCk7
CisgICAgdm9pZCBkZXN0cm95KCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXplKCk7
CisgICAgdm9pZCBmcmVlUmVzb3VyY2VzKCk7Cit9OworCit9CisKKyNlbmRpZgorCisjZW5kaWYK
</data>
<flag name="commit-queue"
          id="189734"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174621</attachid>
            <date>2012-11-16 00:20:08 -0800</date>
            <delta_ts>2012-11-17 21:43:41 -0800</delta_ts>
            <desc>review fixes</desc>
            <filename>rebased2.patch</filename>
            <type>text/plain</type>
            <size>67364</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGM2ZThkZTEuLjBkMWVhZDEgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3NCBAQAorMjAx
Mi0xMS0xNSAgS29uZGFwYWxseSBLYWx5YW4gIDxrYWx5YW4ua29uZGFwYWxseUBpbnRlbC5jb20+
CisKKyAgICAgICAgW0VGTF0gUmVmYWN0b3IgR3JhcGhpY3NDb250ZXh0M0RFRkwuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDEyOTEuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0
M0RFZmwgY3JlYXRlcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUsIHdoaWNoIGFjdHMgYXMgaXRz
IHBsYXRmb3JtIExheWVyLgorICAgICAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUgbmVlZHMg
dG8gaGFuZGxlIHRoZSBmb2xsb3dpbmcgY2FzZXM6CisgICAgICAgIDEpIFRvIHByb3ZpZGUgYW4g
b2ZmLXNjcmVlbiBidWZmZXIgZm9yIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW9uLgorICAgICAgICAy
KSBSZW5kZXIgdG8gYSBjdXJyZW50IGNvbnRleHQuCisgICAgICAgIDMpIFRvIHJlbmRlciBkaXJl
Y3RseSB0byBob3N0IHdpbmRvdy4gKGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLikKKworICAgICAg
ICBCZWZvcmUgdGhpcyBwYXRjaCBFdmFzIHdhcyB1c2VkIHRvIHByb3ZpZGUgdXMgYW4gb2ZmLXNj
cmVlbiBjb250ZXh0IGFuZCBidWZmZXIuIEdMWCB3YXMgdXNlZCBpbgorICAgICAgICB0aGUgb3Ro
ZXIgc3VwcG9ydGVkIGNhc2UuIEV2YXMgYWN0cyBhcyBhIGdsdWUgbGF5ZXIgdG8gcHJvdmlkZSB1
cyB3aXRoIGFwcHJvcHJpYXRlCisgICAgICAgIEdMIGJpbmRpbmdzIChPcGVuR0wgZnVuY3Rpb25z
KSwgR0wgY29udGV4dCBhbmQgZHJhd2FibGUgKHN1cmZhY2Uvb2Zmc2NyZWVuYnVmZmVyKS4KKyAg
ICAgICAgSG93ZXZlciwgcHJpbWl0aXZlIHJlbmRlcmluZyBpcyBoYW5kbGVkIGJ5IFRleHR1cmVN
YXBwZXIgYW5kIE9wZW5HTFNoaW1zIGlzIHVzZWQgdG8gbG9hZCB0aGUgbmVlZGVkIEdMIGZ1bmN0
aW9ucy4KKworICAgICAgICBJdCB3b3VsZCBiZSBmb3Igb3VyIGFkdmFudGFnZSB0byBiZSBhYmxl
IHRvIHRha2UgaW4gdG8gdXNlIGFueSBvcHRpbWlzYXRpb25zL2V4dGVuc2lvbnMKKyAgICAgICAg
cHJvdmlkZWQgYnkgdW5kZXJseWluZyBkcml2ZXJzLCBzcGVjaWZpYyB0byBhIHBsYXRmb3JtIChl
LmcuIEdMWF9NRVNBX2NvcHlfc3ViX2J1ZmZlciBldGMuKS4KKyAgICAgICAgVGhpcyBwYXRjaCBp
bnRyb2R1Y2VzIGFuIGFic3RyYWN0aW9uIGxheWVyIHRvIG1ha2UgaXQgZWFzeSB0byBhZGQgc3Vw
cG9ydCBmb3IgYW55IEdMIGJhY2tlbmQgKEdMWCwgRUdMIGV0Yy4pCisgICAgICAgIGFuZCBkbyBh
bnkgcGxhdGZvcm0gc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBhcyBuZWVkZWQgd2l0aG91dCBjb21w
bGljYXRpbmcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlIGNsYXNzLgorICAgICAgICBUd28gbmV3
IGNsYXNzZXMgYXJlIGFkZGVkIHdpdGggdGhpcyBpbXBsZW1lbnRhdGlvbiwgR0xDb250ZXh0IGFu
ZCBHTFN1cmZhY2UuCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSB3b3VsZCBjcmVh
dGUgYW5kIG93biBhIEdMQ29udGV4dCBhbmQgR0xTdXJmYWNlLgorCisgICAgICAgIEdMQ29udGV4
dCBlbmNhcHN1bGF0ZXMgYW4gT3BlbkdMIGNvbnRleHQgaGlkaW5nIGFueSBwbGF0Zm9ybSBzcGVj
aWZpYyBtYW5hZ2VtZW50LgorICAgICAgICBJdCB1c2VzIEdMIGV4dGVuc2lvbiBBUkJfcm9idXN0
bmVzcyAod2hlbiBhdmFpbGFibGUpIHRvIGRldGVjdCBkcml2ZXIgcmVzZXRzLgorICAgICAgICBJ
dCBkZWZpbmVzIGEgc2ltcGxlIGludGVyZmFjZSBmb3IgdGhpbmdzIHRoYXQgbmVlZCB0byBiZSBo
YW5kbGVkIGJ5IHRoZSBjb250ZXh0LiBTdXBwb3J0CisgICAgICAgIGZvciBtdWx0aS10aHJlYWRl
ZCB1c2FnZSBhbmQgc2hhcmVkIGNvbnRleHQtZ3JvdXAgd291bGQgYmUgYWRkZWQgbGF0ZXIuCisK
KyAgICAgICAgR0xTdXJmYWNlIGVuY2Fwc3VsYXRlcyBhbiBPcGVuR0wgZHJhd2FibGUgaGlkaW5n
IGFueSBwbGF0Zm9ybSBzcGVjaWZpYyBtYW5hZ2VtZW50LgorICAgICAgICBJdCBkZWZpbmVzIGEg
c2ltcGxlIGludGVyZmFjZSBmb3IgdGhpbmdzIHRoYXQgbmVlZCB0byBiZSBoYW5kbGVkIGJ5IHRo
ZSBzdXJmYWNlLgorICAgICAgICBJdCBjcmVhdGVzIGFuIG9mZi1zY3JlZW4gcmVuZGVyaW5nIGFy
ZWEuIEFueSBHTENvbnRleHQgKGNvbXBhdGlibGUgd2l0aCB0aGUgc3VyZmFjZSkKKyAgICAgICAg
Y2FuIGJlIHVzZWQgdG8gcmVuZGVyIGludG8gdGhpcyBvZmYtc2NyZWVuIGFyZWEuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBhbHNvIGFkZHMgR0xYIGltcGxlbWVudGF0aW9uLiBUbyBrZWVwIHRoZSBw
YXRjaCB0byBtaW5pbXVtIEVHTCBzdXBwb3J0IHdvdWxkIGJlIGFkZGVkIGluIGFub3RoZXIgY2hh
bmdlc2V0LgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZWZsL0dMQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpHTENvbnRleHQ6OmNyZWF0ZUNvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6R0xDb250ZXh0OjpjcmVhdGVPZmZTY3JlZW5Db250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdMQ29udGV4dDo6Y3JlYXRlQ3VycmVudENvbnRleHRXcmFwcGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdMQ29udGV4dDo6R0xDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdMQ29u
dGV4dDo6fkdMQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHTENvbnRleHQ6Om1ha2VDdXJy
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdMQ29udGV4dDo6aXNWYWxpZCk6CisgICAgICAgIChX
ZWJDb3JlOjpHTENvbnRleHQ6OnJlbGVhc2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdM
Q29udGV4dDo6aGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMQ29udGV4dDo6aXNDdXJyZW50
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHTENvbnRleHQ6OmluaXRpYWxpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6R0xDb250ZXh0OjpnZXRDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkdMQ29udGV4dDo6cGxhdGZvcm1NYWtlQ3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHTENv
bnRleHQ6OnBsYXRmb3JtUmVsZWFzZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R0xDb250
ZXh0OjpkZXN0cm95KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xDb250ZXh0
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChHTENvbnRleHQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HTFN1cmZhY2UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R0xTdXJmYWNlOjpjcmVhdGVPZmZzY3Jl
ZW5TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMU3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0
U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFN1cmZhY2U6OkdMU3VyZmFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHTFN1cmZhY2U6On5HTFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
R0xTdXJmYWNlOjpoYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6R0xTdXJmYWNlOjpnZW9tZXRy
eSk6CisgICAgICAgIChXZWJDb3JlOjpHTFN1cmZhY2U6OnNoYXJlZERpc3BsYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6R0xTdXJmYWNlOjpjb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkdMU3VyZmFjZTo6c3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R0xTdXJmYWNlOjpj
b3B5VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFN1cmZhY2U6OnVwZGF0ZUNvbnRlbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdMU3VyZmFjZTo6c2V0R2VvbWV0cnkpOgorICAgICAgICAo
V2ViQ29yZTo6R0xTdXJmYWNlOjpkZXN0cm95KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9lZmwvR0xTdXJmYWNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChH
TFN1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRl
eHQzREVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQz
RCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4
dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1
cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRM
b3N0Q2FsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cmVsZWFzZVJlc291cmNlcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZVN1cmZh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzZXRDb250
ZXh0TG9zdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzU3VyZmFjZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjb3B5VG9HcmFwaGlj
c1N1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpn
cmFwaGljc1N1cmZhY2VUb2tlbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oOgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlKToKKyAgICAgICAgICAgIEdMWE9mZlNjcmVlbkNvbnRleHQgY3JlYXRlcyBhbiBvZmYtc2Ny
ZWVuIGNvbnRleHQuIFRoaXMgaXMgdXNlZCB3aGVuCisgICAgICAgICAgICByZW5kZXJzdHlsZSBp
cyBSZW5kZXJPZmZzY3JlZW4uCisgICAgICAgICAgICBJdCB1c2VzIEdMIGV4dGVuc2lvbiBHTFhf
QVJCX2NyZWF0ZV9jb250ZXh0ICh3aGVuIGF2YWlsYWJsZSkKKyAgICAgICAgICAgIHRvIGNyZWF0
ZSBhIGNvbnRleHQgZWxzZSBmYWxscyBiYWNrIHRvIHVzZSBnbFhDcmVhdGVOZXdDb250ZXh0Lgor
CisgICAgICAgICAgICBHTFhDdXJyZW50Q29udGV4dFdyYXBwZXIgYWN0cyBhcyBhIHdyYXBwZXIg
Zm9yIGN1cnJlbnQgY29udGV4dC4KKyAgICAgICAgICAgIFRoaXMgaXMgdXNlZCB3aGVuIHJlbmRl
cnN0eWxlIGlzIFJlbmRlclRvQ3VycmVudEdMQ29udGV4dC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplQVJCRXh0ZW5zaW9ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpHTFhPZmZTY3JlZW5Db250ZXh0OjpHTFhPZmZTY3JlZW5Db250ZXh0KToK
KyAgICAgICAgICAgIEluaXRpYWxpemVzIHRoZSBHTCBjb250ZXh0IHRvIGJlIGNvbXBhdGlibGUg
d2l0aCB0aGUgZ2l2ZW4gc3VyZmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkdMWE9mZlNjcmVlbkNv
bnRleHQ6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6R0xYT2ZmU2NyZWVuQ29udGV4
dDo6fkdMWE9mZlNjcmVlbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R0xYT2ZmU2NyZWVu
Q29udGV4dDo6aXNDdXJyZW50Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHTFhPZmZTY3Jl
ZW5Db250ZXh0OjpwbGF0Zm9ybU1ha2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWE9m
ZlNjcmVlbkNvbnRleHQ6OnBsYXRmb3JtUmVsZWFzZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6R0xYT2ZmU2NyZWVuQ29udGV4dDo6ZnJlZVJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpHTFhPZmZTY3JlZW5Db250ZXh0OjpkZXN0cm95KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoR0xYQ3VycmVudENvbnRleHRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcjo6R0xYQ3VycmVudENvbnRleHRXcmFwcGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcjo6fkdMWEN1cnJlbnRDb250
ZXh0V3JhcHBlcik6CisgICAgICAgIChHTFhPZmZTY3JlZW5Db250ZXh0KToKKyAgICAgICAgICAg
IEdMWFBCdWZmZXIsIENyZWF0ZXMgYSBHTCBzdXJmYWNlIChQQnVmZmVyKSB1c2VkIGZvciBvZmZz
Y3JlZW4gcmVuZGVyaW5nLgorICAgICAgICAgICAgQW55IEdMQ29udGV4dCB0aGF0IHdhcyBjcmVh
dGVkIHdpdGggcmVzcGVjdCB0byBjb25maWd1cmF0aW9uIGNhbiBiZSB1c2VkCisgICAgICAgICAg
ICB0byByZW5kZXIgaW50byB0aGlzLgorCisgICAgICAgICAgICBHTFhUcmFuc3BvcnRTdXJmYWNl
IGNyZWF0ZXMgV2luZG93IGFuZCB1c2VzIGl0IGFzIGFuIG9mZi1zY3JlZW4gc3VyZmFjZS4KKyAg
ICAgICAgICAgIEFueSBHTENvbnRleHQgdGhhdCB3YXMgY3JlYXRlZCB3aXRoIHJlc3BlY3QgdG8g
Y29uZmlndXJhdGlvbiBjYW4gYmUgdXNlZAorICAgICAgICAgICAgdG8gcmVuZGVyIGludG8gdGhp
cy4KKyAgICAgICAgICAgIFRoaXMgaXMgdXNlZCB3aGVuIGNvbnRlbnRzIG9mIHRoZSBidWZmZXIg
YXJlIHRvIGJlIHByb3ZpZGVkIHRvIFVJIFByb2Nlc3MKKyAgICAgICAgICAgIGZvciBkaXNwbGF5
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFN1cmZh
Y2U6OkdMWFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R0xYU3VyZmFjZTo6fkdMWFN1cmZh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6R0xYU3VyZmFjZTo6dmlzdWFsSW5mbyk6CisgICAgICAg
IChXZWJDb3JlOjpHTFhTdXJmYWNlOjp4V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFN1
cmZhY2U6OnBCdWZmZXJDb25maWcpOgorICAgICAgICAoV2ViQ29yZTo6R0xYU3VyZmFjZTo6dHJh
bnNwb3J0U3VyZmFjZUNvbmZpZyk6CisgICAgICAgIChXZWJDb3JlOjpHTFhTdXJmYWNlOjppc1hS
ZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0
U3VyZmFjZTo6R0xYVHJhbnNwb3J0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFhUcmFu
c3BvcnRTdXJmYWNlOjp+R0xYVHJhbnNwb3J0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpH
TFhUcmFuc3BvcnRTdXJmYWNlOjpjb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdM
WFRyYW5zcG9ydFN1cmZhY2U6OnN3YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRy
YW5zcG9ydFN1cmZhY2U6OnNldEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5z
cG9ydFN1cmZhY2U6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0
U3VyZmFjZTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpHTFhUcmFuc3BvcnRTdXJmYWNl
OjpmcmVlUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OjpHTFhTdXJmYWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdMWFBCdWZmZXI6On5HTFhQQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdMWFBCdWZmZXI6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6R0xYUEJ1ZmZlcjo6
Y29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHTFhQQnVmZmVyOjpkZXN0cm95KToK
KyAgICAgICAgKFdlYkNvcmU6OkdMWFBCdWZmZXI6OmZyZWVSZXNvdXJjZXMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTaGFyZWRYMTFSZXNvdXJjZXMpOgorICAgICAgICAg
ICAgQ3JlYXRlcyBYIHJlc291cmNlcyB3aGljaCBhcmUgc2hhcmVkIGJldHdlZW4gc3VyZmFjZSBh
bmQgY29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJlc291cmNlczo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJlc291cmNlczo6ZGVyZWYpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkWDExUmVzb3VyY2VzOjpnZXRYV2luZG93KToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZFgxMVJlc291cmNlczo6ZGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpT
aGFyZWRYMTFSZXNvdXJjZXM6OnZpc3VhbEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVk
WDExUmVzb3VyY2VzOjpjcmVhdGVDb25maWcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkWDEx
UmVzb3VyY2VzOjpwQnVmZmVyQ29udGV4dENvbmZpZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFy
ZWRYMTFSZXNvdXJjZXM6OnN1cmZhY2VDb250ZXh0Q29uZmlnKToKKyAgICAgICAgKFdlYkNvcmU6
OlNoYXJlZFgxMVJlc291cmNlczo6aXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJlc291cmNlczo6U2hhcmVkWDExUmVzb3VyY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJlc291cmNlczo6flNoYXJlZFgxMVJlc291cmNlcyk6
CisgICAgICAgIChHTFhTdXJmYWNlKToKKyAgICAgICAgKEdMWFRyYW5zcG9ydFN1cmZhY2UpOgor
ICAgICAgICAoR0xYUEJ1ZmZlcik6CisKIDIwMTItMTEtMTUgIEplciBOb2JsZSAgPGplci5ub2Js
ZUBhcHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2ggYXQgV2ViQ29yZTo6UGx1Z2luRGF0YTo6cGx1
Z2luRmlsZUZvck1pbWVUeXBlIGNvbnN0ICsgMzgKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUVmbC5jbWFrZSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCA1
ODJhZjA1Li40NGJhNWIzIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21h
a2UKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0yNzcsMTEgKzI3Nywx
NCBAQCBJRiAoV1RGX1VTRV8zRF9HUkFQSElDUykKICAgTElTVChBUFBFTkQgV2ViQ29yZV9JTkNM
VURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMiCisg
ICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseCIKICAgICAi
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwIgogICApCiAgIExJU1QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNoaW1zLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0RyYXdpbmdCdWZmZXJDYWlyby5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xDb250ZXh0LmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2VmbC9HTFN1cmZhY2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNz
Q29udGV4dDNERWZsLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMz
RE9wZW5HTC5jcHAKQEAgLTI4OSw2ICsyOTIsOCBAQCBJRiAoV1RGX1VTRV8zRF9HUkFQSElDUykK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29t
bW9uLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9xdC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCmRpZmYgLS1naXQg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dMQ29udGV4dC5jcHAgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dMQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc2YWM5NAotLS0gL2Rldi9udWxsCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xDb250ZXh0LmNwcApAQCAtMCwwICsxLDIw
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkdMQ29udGV4dC5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaWYg
SEFWRShHTFgpCisjaW5jbHVkZSAiR0xYQ29udGV4dC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIFBGTkdMR0VUR1JBUEhJQ1NSRVNFVFNUQVRVU0FSQlBST0MgZ2xH
ZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCID0gMDsKK3N0YXRpYyBHTENvbnRleHQqIG1fY3VycmVu
dENvbnRleHQgPSAwOworCitQYXNzT3duUHRyPEdMQ29udGV4dD4gR0xDb250ZXh0OjpjcmVhdGVD
b250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKK3sKKyAg
ICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZFNoaW1zID0gZmFsc2U7CisKKyAgICBpZiAoIWluaXRp
YWxpemVkU2hpbXMpIHsKKyAgICAgICAgaW5pdGlhbGl6ZWRTaGltcyA9IGluaXRpYWxpemVPcGVu
R0xTaGltcygpOworI2lmIEhBVkUoR0xYKQorICAgICAgICBnbEdldEdyYXBoaWNzUmVzZXRTdGF0
dXNBUkIgPSByZWludGVycHJldF9jYXN0PFBGTkdMR0VUR1JBUEhJQ1NSRVNFVFNUQVRVU0FSQlBS
T0M+KGdsWEdldFByb2NBZGRyZXNzQVJCKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+
KCJnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIiKSkpOworI2VuZGlmCisgICAgfQorCisgICAg
aWYgKCFpbml0aWFsaXplZFNoaW1zKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHN3
aXRjaCAocmVuZGVyU3R5bGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJP
ZmZzY3JlZW46CisgICAgICAgIGlmIChPd25QdHI8R0xDb250ZXh0PiBnbHhDb250ZXh0ID0gR0xD
b250ZXh0OjpjcmVhdGVPZmZTY3JlZW5Db250ZXh0KCkpCisgICAgICAgICAgICByZXR1cm4gZ2x4
Q29udGV4dC5yZWxlYXNlKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlclRvQ3VycmVudEdMQ29udGV4dDoKKyAgICAgICAgaWYgKE93blB0cjxHTENv
bnRleHQ+IGdseENvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZUN1cnJlbnRDb250ZXh0V3JhcHBl
cigpKQorICAgICAgICAgICAgcmV0dXJuIGdseENvbnRleHQucmVsZWFzZSgpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdp
bmRvdzoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCitQYXNzT3duUHRyPEdMQ29udGV4dD4gR0xD
b250ZXh0OjpjcmVhdGVPZmZTY3JlZW5Db250ZXh0KCkKK3sKKyNpZiBIQVZFKEdMWCkKKyAgICBP
d25QdHI8R0xDb250ZXh0PiBnbHhDb250ZXh0ID0gYWRvcHRQdHIobmV3IEdMWE9mZlNjcmVlbkNv
bnRleHQoKSk7CisgICAgcmV0dXJuIGdseENvbnRleHQucmVsZWFzZSgpOworI2VuZGlmCisKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKworUGFzc093blB0cjxHTENvbnRleHQ+IEdMQ29udGV4dDo6
Y3JlYXRlQ3VycmVudENvbnRleHRXcmFwcGVyKCkKK3sKKyNpZiBIQVZFKEdMWCkKKyAgICBPd25Q
dHI8R0xDb250ZXh0PiBnbHhDb250ZXh0ID0gYWRvcHRQdHIobmV3IEdMWEN1cnJlbnRDb250ZXh0
V3JhcHBlcigpKTsKKyAgICByZXR1cm4gZ2x4Q29udGV4dC5yZWxlYXNlKCk7CisjZW5kaWYKKwor
ICAgIHJldHVybiBudWxscHRyOworfQorCitHTENvbnRleHQ6OkdMQ29udGV4dCgpCisgICAgOiBt
X2NvbnRleHRIYW5kbGUoMCkKKyAgICAsIG1fcmVzZXRMb3N0Q29udGV4dChmYWxzZSkKK3sKKwor
fQorCitHTENvbnRleHQ6On5HTENvbnRleHQoKQoreworICAgIGlmICh0aGlzID09IG1fY3VycmVu
dENvbnRleHQpCisgICAgICAgIG1fY3VycmVudENvbnRleHQgPSAwOworfQorCitib29sIEdMQ29u
dGV4dDo6bWFrZUN1cnJlbnQoR0xTdXJmYWNlKiBzdXJmYWNlKQoreworICAgIG1fY29udGV4dExv
c3QgPSBmYWxzZTsKKworICAgIGlmIChzdXJmYWNlICYmICFzdXJmYWNlLT5oYW5kbGUoKS5pc1Zh
bGlkKCkpIHsKKyAgICAgICAgbV9jdXJyZW50Q29udGV4dCA9IDA7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAoaXNDdXJyZW50Q29udGV4dCgpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBmYWxzZTsKKworICAgIGlmICghc3Vy
ZmFjZSkgeworICAgICAgICBtX2N1cnJlbnRDb250ZXh0ID0gMDsKKyAgICAgICAgcGxhdGZvcm1S
ZWxlYXNlQ3VycmVudCgpOworICAgICAgICByZXR1cm5WYWx1ZSA9ICB0cnVlOworICAgIH0gZWxz
ZSBpZiAocGxhdGZvcm1NYWtlQ3VycmVudChzdXJmYWNlKSkgeworICAgICAgICBtX2N1cnJlbnRD
b250ZXh0ID0gdGhpczsKKyAgICAgICAgcmV0dXJuVmFsdWUgPSAgdHJ1ZTsKKyAgICB9CisKKyAg
ICBpZiAobV9yZXNldExvc3RDb250ZXh0ICYmIGdsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQikg
eworICAgICAgICBHTGVudW0gc3RhdHVzID0gZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCk7
CisKKyAgICAgICAgc3dpdGNoIChzdGF0dXMpIHsKKyAgICAgICAgY2FzZSBOYXRpdmVDT05URVhU
X05PX0VSUk9SOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTmF0aXZlQ09OVEVY
VF9HVUlMVFlfQ09OVEVYVF9SRVNFVDoKKyAgICAgICAgICAgIG1fY29udGV4dExvc3QgPSB0cnVl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTmF0aXZlQ09OVEVYVF9JTk5PQ0VO
VF9DT05URVhUX1JFU0VUOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTmF0aXZl
Q09OVEVYVF9VTktOT1dOX0NPTlRFWFRfUkVTRVQ6CisgICAgICAgICAgICBtX2NvbnRleHRMb3N0
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7Cit9
CisKK2Jvb2wgR0xDb250ZXh0Ojppc1ZhbGlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250
ZXh0SGFuZGxlICYmICFtX2NvbnRleHRMb3N0OworfQorCit2b2lkIEdMQ29udGV4dDo6cmVsZWFz
ZUN1cnJlbnQoKQoreworICAgIGlmICghaXNDdXJyZW50Q29udGV4dCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2N1cnJlbnRDb250ZXh0ID0gMDsKKyAgICBwbGF0Zm9ybVJlbGVhc2VDdXJy
ZW50KCk7Cit9CisKK1BsYXRmb3JtQ29udGV4dCBHTENvbnRleHQ6OmhhbmRsZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fY29udGV4dEhhbmRsZTsKK30KKworYm9vbCBHTENvbnRleHQ6OmlzQ3Vy
cmVudENvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdMQ29u
dGV4dDo6aW5pdGlhbGl6ZShHTFN1cmZhY2UqKQoreworICAgIHJldHVybiB0cnVlOworfQorCitH
TENvbnRleHQqIEdMQ29udGV4dDo6Z2V0Q3VycmVudCgpCit7CisgICAgcmV0dXJuIG1fY3VycmVu
dENvbnRleHQ7Cit9CisKK2Jvb2wgR0xDb250ZXh0OjpwbGF0Zm9ybU1ha2VDdXJyZW50KEdMU3Vy
ZmFjZSopCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR0xDb250ZXh0OjpwbGF0Zm9y
bVJlbGVhc2VDdXJyZW50KCkKK3sKKworfQorCit2b2lkIEdMQ29udGV4dDo6ZGVzdHJveSgpCit7
CisgICAgbV9jb250ZXh0SGFuZGxlID0gMDsKKyAgICBtX3Jlc2V0TG9zdENvbnRleHQgPSBmYWxz
ZTsKKworICAgIGlmICh0aGlzID09IG1fY3VycmVudENvbnRleHQpCisgICAgICAgIG1fY3VycmVu
dENvbnRleHQgPSAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HTENvbnRleHQuaCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xDb250ZXh0LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhMjdlMQotLS0gL2Rldi9udWxsCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xDb250ZXh0LmgKQEAgLTAsMCArMSw5
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHTENvbnRleHRfaAorI2RlZmluZSBH
TENvbnRleHRfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVk
ZSAiR0xEZWZzLmgiCisjaW5jbHVkZSAiR0xTdXJmYWNlLmgiCisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworLy8gRW5jYXBzdWxhdGVz
IGFuIE9wZW5HTCBjb250ZXh0IGFuZCBkcmF3YWJsZSwgaGlkaW5nIHBsYXRmb3JtIHNwZWNpZmlj
IG1hbmFnZW1lbnQuCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdMQ29udGV4dCB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR0xDb250ZXh0KTsKKworcHVibGljOgorICAgIC8vIEZy
b20gaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS9nbGVzL2V4dGVuc2lvbnMvRVhUL0VY
VF9yb2J1c3RuZXNzLnR4dAorICAgIGVudW0gTmF0aXZlQ29udGV4dFJlc2V0IHsKKyAgICAgICAg
TmF0aXZlQ09OVEVYVF9OT19FUlJPUiA9IDB4MDAwMCwKKyAgICAgICAgTmF0aXZlQ09OVEVYVF9H
VUlMVFlfQ09OVEVYVF9SRVNFVCA9IDB4ODI1MywKKyAgICAgICAgTmF0aXZlQ09OVEVYVF9JTk5P
Q0VOVF9DT05URVhUX1JFU0VUID0gMHg4MjU0LAorICAgICAgICBOYXRpdmVDT05URVhUX1VOS05P
V05fQ09OVEVYVF9SRVNFVCA9IDB4ODI1NSwKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NPd25Q
dHI8R0xDb250ZXh0PiBjcmVhdGVDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHls
ZSk7CisKKyAgICB2aXJ0dWFsIH5HTENvbnRleHQoKTsKKworICAgIHZpcnR1YWwgYm9vbCBpbml0
aWFsaXplKEdMU3VyZmFjZSopOworCisgICAgLy8gTWFrZXMgdGhpcyBhbmQgc3VyZmFjZSBhcyBj
dXJyZW50IGNvbnRleHQgYW5kIGRyYXdhYmxlLgorICAgIC8vIENhbGxpbmcgdGhpcyBmdW5jdGlv
biB3aXRoIG5vIHN1cmZhY2UgaXMgc2FtZSBhcyBjYWxsaW5nIHJlbGVhc2VDdXJyZW50LgorICAg
IC8vIERvZXMgbm90aGluZyBpZiB0aGlzIGlzIGFscmVhZHkgY3VycmVudCBDb250ZXh0LgorICAg
IGJvb2wgbWFrZUN1cnJlbnQoR0xTdXJmYWNlKiA9IDApOworCisgICAgLy8gU2V0cyBDdXJyZW50
IENvbnRleHQgYW5kIERyYXdhYmxlIGFzIE51bGwuCisgICAgLy8gRG9lc24ndCBoYXZlIGFueSBl
ZmZlY3QgaWYgdGhpcyBpcyBub3QgdGhlIGN1cnJlbnQgQ29udGV4dC4KKyAgICB2b2lkIHJlbGVh
c2VDdXJyZW50KCk7CisKKyAgICBQbGF0Zm9ybUNvbnRleHQgaGFuZGxlKCkgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNDdXJyZW50Q29udGV4dCgpIGNvbnN0OworCisgICAgYm9vbCBpc1Zh
bGlkKCkgY29uc3Q7CisKKyAgICAvLyBEZXN0cm95cyBhbnkgR0wgcmVzb3VyY2VzIGFzc29jaWF0
ZWQgd2l0aCB0aGlzIGNvbnRleHQuCisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKKworICAg
IHN0YXRpYyBHTENvbnRleHQqIGdldEN1cnJlbnQoKTsKKworcHJvdGVjdGVkOgorICAgIEdMQ29u
dGV4dCgpOworICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybU1ha2VDdXJyZW50KEdMU3VyZmFjZSop
OworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KCk7CisgICAgUGxhdGZv
cm1Db250ZXh0IG1fY29udGV4dEhhbmRsZTsKKyAgICBib29sIG1fcmVzZXRMb3N0Q29udGV4dDsK
KyAgICBib29sIG1fY29udGV4dExvc3Q7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFBhc3NPd25Q
dHI8R0xDb250ZXh0PiBjcmVhdGVPZmZTY3JlZW5Db250ZXh0KCk7CisgICAgc3RhdGljIFBhc3NP
d25QdHI8R0xDb250ZXh0PiBjcmVhdGVDdXJyZW50Q29udGV4dFdyYXBwZXIoKTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBHTE5hdGl2ZUNvbnRl
eHRfSApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HTERl
ZnMuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xEZWZzLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUzNmExMQotLS0gL2Rldi9udWxsCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xEZWZzLmgKQEAgLTAsMCArMSw2
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHTERlZnNfaAorI2RlZmluZSBHTERl
ZnNfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaWYgVVNFKE9QRU5H
TF9FU18yKQorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCisjZWxzZQorI2luY2x1
ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJPcGVuR0xTaGlt
cy5oIgorCisjaW5jbHVkZSA8R0wvZ2wuaD4KKyNpbmNsdWRlIDxHTC9nbGV4dC5oPgorI2lmIEhB
VkUoR0xYKQorI2luY2x1ZGUgPEdML2dseC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworI2lmIEhBVkUoR0xYKQordHlwZWRlZiBHTFhDb250ZXh0IFBsYXRmb3JtQ29udGV4dDsK
K3R5cGVkZWYgRGlzcGxheSogUGxhdGZvcm1EaXNwbGF5OwordHlwZWRlZiBHTFhGQkNvbmZpZyBQ
bGF0Zm9ybVN1cmZhY2VDb25maWc7Cit0eXBlZGVmIEdMWERyYXdhYmxlIFBsYXRmb3JtU3VyZmFj
ZTsKKyNlbHNlCit0eXBlZGVmIHZvaWQqIFBsYXRmb3JtQ29udGV4dDsKK3R5cGVkZWYgdm9pZCog
UGxhdGZvcm1EaXNwbGF5OwordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybVN1cmZhY2VDb25maWc7Cit0
eXBlZGVmIHZvaWQqIFBsYXRmb3JtU3VyZmFjZTsKKyNlbmRpZgorCit9CisKKyNlbmRpZgorCisj
ZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xT
dXJmYWNlLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR0xTdXJmYWNl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDkzMjRiCi0tLSAvZGV2
L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HTFN1cmZhY2Uu
Y3BwCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiR0xTdXJmYWNlLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisKKyNpZiBIQVZFKEdMWCkKKyNpbmNsdWRlICJHTFhTdXJmYWNlLmgiCisjZW5k
aWYKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUGFzc093blB0cjxHTFN1cmZhY2U+IEdMU3VyZmFjZTo6Y3JlYXRlT2Zmc2NyZWVuU3VyZmFj
ZSgpCit7CisjaWYgSEFWRShHTFgpCisgICAgT3duUHRyPEdMU3VyZmFjZT4gc3VyZmFjZSA9IGFk
b3B0UHRyKG5ldyBHTFhQQnVmZmVyKCkpOworCisgICAgaWYgKHN1cmZhY2UtPmhhbmRsZSgpLmlz
VmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHN1cmZhY2UucmVsZWFzZSgpOworI2VuZGlmCisKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKworUGFzc093blB0cjxHTFN1cmZhY2U+IEdMU3VyZmFjZTo6
Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZSgpCit7CisjaWYgSEFWRShHTFgpCisgICAgT3duUHRyPEdM
U3VyZmFjZT4gc3VyZmFjZSA9IGFkb3B0UHRyKG5ldyBHTFhUcmFuc3BvcnRTdXJmYWNlKCkpOwor
CisgICAgaWYgKHN1cmZhY2UtPmhhbmRsZSgpLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHN1
cmZhY2UucmVsZWFzZSgpOworI2VuZGlmCisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworR0xT
dXJmYWNlOjpHTFN1cmZhY2UoKQorICAgIDogbV9yZXN0b3JlTmVlZGVkKHRydWUpCisgICAgLCBt
X2Zib0lkKDApCisgICAgLCBtX3NoYXJlZERpc3BsYXkoMCkKK3sKKworfQorCitHTFN1cmZhY2U6
On5HTFN1cmZhY2UoKQoreworCit9CisKK0dyYXBoaWNzU3VyZmFjZVRva2VuIEdMU3VyZmFjZTo6
aGFuZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gR3JhcGhpY3NTdXJmYWNlVG9rZW4obV9kcmF3
YWJsZSk7Cit9CisKK2NvbnN0IEludFJlY3QmIEdMU3VyZmFjZTo6Z2VvbWV0cnkoKSBjb25zdAor
eworICAgIHJldHVybiBtX3JlY3Q7Cit9CisKK1BsYXRmb3JtRGlzcGxheSBHTFN1cmZhY2U6OnNo
YXJlZERpc3BsYXkoKSBjb25zdAoreworICAgIHJldHVybiBtX3NoYXJlZERpc3BsYXk7Cit9CisK
K1BsYXRmb3JtU3VyZmFjZUNvbmZpZyBHTFN1cmZhY2U6OmNvbmZpZ3VyYXRpb24oKQoreworICAg
IHJldHVybiAwOworfQorCit2b2lkIEdMU3VyZmFjZTo6c3dhcEJ1ZmZlcnMoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR0xTdXJmYWNlOjpjb3B5VGV4dHVyZSh1aW50MzJf
dCB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KQoreworICAgIGlmICghbV9mYm9J
ZCkKKyAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvSWQpOworCisgICAgbV9yZXN0
b3JlTmVlZGVkID0gdHJ1ZTsKKyAgICBpbnQgeCA9IHNvdXJjZVJlY3QueCgpOworICAgIGludCB5
ID0gc291cmNlUmVjdC55KCk7CisgICAgaW50IHdpZHRoID0gc291cmNlUmVjdC53aWR0aCgpOwor
ICAgIGludCBoZWlnaHQgPSBzb3VyY2VSZWN0LmhlaWdodCgpOworCisgICAgZ2xQdXNoQXR0cmli
KEdMX0NPTE9SX0JVRkZFUl9CSVQpOworCisgICAgR0xpbnQgcHJldmlvdXNGQk87CisgICAgZ2xH
ZXRJbnRlZ2VydihHTF9GUkFNRUJVRkZFUl9CSU5ESU5HLCAmcHJldmlvdXNGQk8pOworCisgICAg
Z2xCaW5kRnJhbWVidWZmZXIoR0xfUkVBRF9GUkFNRUJVRkZFUiwgbV9mYm9JZCk7CisKKyAgICBn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmUpOworICAgIGdsRnJhbWVidWZmZXJU
ZXh0dXJlMkQoR0xfUkVBRF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RF
WFRVUkVfMkQsIHRleHR1cmUsIDApOworCisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRFJBV19G
UkFNRUJVRkZFUiwgMCk7CisKKyAgICBnbEJsaXRGcmFtZWJ1ZmZlcih4LCB5LCB3aWR0aCwgaGVp
Z2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIp
OworCisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9SRUFEX0ZSQU1FQlVGRkVSLCBHTF9D
T0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgMCwgMCk7CisgICAgZ2xCaW5kVGV4dHVy
ZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZF
UiwgcHJldmlvdXNGQk8pOworCisgICAgZ2xQb3BBdHRyaWIoKTsKK30KKwordm9pZCBHTFN1cmZh
Y2U6OnVwZGF0ZUNvbnRlbnRzKHVpbnQzMl90IHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEdMdWludCBiaW5kRmJvSWQpCit7CisgICAgbV9yZXN0b3JlTmVlZGVkID0g
ZmFsc2U7CisKKyAgICBpZiAoIW1fZmJvSWQpCisgICAgICAgIGdsR2VuRnJhbWVidWZmZXJzKDEs
ICZtX2Zib0lkKTsKKworICAgIGludCB4ID0gc291cmNlUmVjdC54KCk7CisgICAgaW50IHkgPSBz
b3VyY2VSZWN0LnkoKTsKKyAgICBpbnQgd2lkdGggPSBzb3VyY2VSZWN0LndpZHRoKCk7CisgICAg
aW50IGhlaWdodCA9IHNvdXJjZVJlY3QuaGVpZ2h0KCk7CisKKyAgICBnbEJpbmRGcmFtZWJ1ZmZl
cihHTF9SRUFEX0ZSQU1FQlVGRkVSLCBtX2Zib0lkKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfMkQsIHRleHR1cmUpOworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfUkVBRF9G
UkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIHRleHR1cmUs
IDApOworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0RSQVdfRlJBTUVCVUZGRVIsIDApOworICAg
IGdsQmxpdEZyYW1lYnVmZmVyKHgsIHksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHdpZHRoLCBoZWln
aHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CisgICAgc3dhcEJ1ZmZlcnMoKTsK
KyAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX1JFQURfRlJBTUVCVUZGRVIsIEdMX0NPTE9S
X0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCAwLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIDApOworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBi
aW5kRmJvSWQpOworfQorCit2b2lkIEdMU3VyZmFjZTo6c2V0R2VvbWV0cnkoY29uc3QgSW50UmVj
dCYgbmV3UmVjdCkKK3sKKyAgICBtX3JlY3QgPSBuZXdSZWN0OworfQorCit2b2lkIEdMU3VyZmFj
ZTo6ZGVzdHJveSgpCit7CisgICAgbV9yZWN0ID0gSW50UmVjdCgpOworCisgICAgaWYgKG1fZmJv
SWQpCisgICAgICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zib0lkKTsKKworICAgIG1f
ZmJvSWQgPSAwOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2VmbC9HTFN1cmZhY2UuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9lZmwvR0xTdXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMDQ5MTRjNQotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9lZmwvR0xTdXJmYWNlLmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBHTFN1cmZhY2VfaAorI2RlZmluZSBHTFN1cmZhY2VfaAorCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiR0xEZWZzLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NTdXJmYWNlVG9rZW4uaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCisvLyBFbmNhcHN1bGF0ZXMgYSBzdXJmYWNlIHRo
YXQgY2FuIGJlIHJlbmRlcmVkIHRvIHdpdGggR0wsIGhpZGluZyBwbGF0Zm9ybQorLy8gc3BlY2lm
aWMgbWFuYWdlbWVudC4KK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR0xTdXJmYWNlIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHTFN1cmZhY2UpOworCitwdWJsaWM6CisgICAgLy8g
Q3JlYXRlcyBhIEdMIHN1cmZhY2UgdXNlZCBmb3Igb2Zmc2NyZWVuIHJlbmRlcmluZy4KKyAgICBz
dGF0aWMgUGFzc093blB0cjxHTFN1cmZhY2U+IGNyZWF0ZU9mZnNjcmVlblN1cmZhY2UoKTsKKwor
ICAgIC8vIENyZWF0ZXMgYSBHTCBzdXJmYWNlIHVzZWQgZm9yIG9mZnNjcmVlbiByZW5kZXJpbmcu
IFRoZSByZXN1bHRzIGNhbiBiZSB0cmFuc3BvcnRlZAorICAgIC8vIHRvIHRoZSBVSSBwcm9jZXNz
IGZvciBkaXNwbGF5LgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEdMU3VyZmFjZT4gY3JlYXRlVHJh
bnNwb3J0U3VyZmFjZSgpOworCisgICAgdmlydHVhbCB+R0xTdXJmYWNlKCk7CisKKyAgICBjb25z
dCBJbnRSZWN0JiBnZW9tZXRyeSgpIGNvbnN0OworCisgICAgLy8gR2V0IHRoZSB1bmRlcmx5aW5n
IHBsYXRmb3JtIHNwZWNpZmljIHN1cmZhY2UgaGFuZGxlLgorICAgIEdyYXBoaWNzU3VyZmFjZVRv
a2VuIGhhbmRsZSgpIGNvbnN0OworCisgICAgUGxhdGZvcm1EaXNwbGF5IHNoYXJlZERpc3BsYXko
KSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBzd2FwQnVmZmVycygpOworCisgICAgdmlydHVh
bCB2b2lkIGNvcHlUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QpOworCisgICAgLy8gQ29udmVuaWVuY2UgRnVuY3Rpb24gdG8gdXBkYXRlIHN1cmZhY2Ug
YmFja2J1ZmZlciB3aXRoIHRleHR1cmUgY29udGVudHMgYW5kIHJlc3RvcmUgY3VycmVudCBGQk8u
CisgICAgLy8gRnVuY3Rpb24gZG9lcyB0aGUgZm9sbG93aW5nKGluIG9yZGVyKToKKyAgICAvLyBh
KUJsaXRzIHRleHR1cmUgY29udGVudHMgdG8gYmFjayBidWZmZXIuCisgICAgLy8gYilDYWxscyBT
d2FwIEJ1ZmZlcnMuCisgICAgLy8gYylTZXRzIGN1cnJlbnQgRkJPIGFzIGJpbmRGYm9JZC4KKyAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHModWludDMyX3QgdGV4dHVyZSwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgR0x1aW50IGJpbmRGYm9JZCk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCk7CisKKyAgICB2aXJ0dWFs
IFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBjb25maWd1cmF0aW9uKCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgZGVzdHJveSgpOworCitwcm90ZWN0ZWQ6CisgICAgR0xTdXJmYWNlKCk7CisgICAgYm9vbCBt
X3Jlc3RvcmVOZWVkZWQ7CisgICAgSW50UmVjdCBtX3JlY3Q7CisgICAgR0x1aW50IG1fZmJvSWQ7
CisgICAgUGxhdGZvcm1EaXNwbGF5IG1fc2hhcmVkRGlzcGxheTsKKyAgICBQbGF0Zm9ybVN1cmZh
Y2UgbV9kcmF3YWJsZTsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5j
cHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNE
RWZsLmNwcAppbmRleCBkMTM5MTMwLi4yZTJhNDkzIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcAorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcApA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ry
b25pY3MKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI3LDcgKzI4LDYgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fp
cm8uaCIKLSNpbmNsdWRlIDxHTC9nbHguaD4KIAogI2lmIFVTRShPUEVOR0xfRVNfMikKICNpbmNs
dWRlICJFeHRlbnNpb25zM0RPcGVuR0xFUy5oIgpAQCAtMzksNiArMzksOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4
dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5k
b3cqIGhvc3RXaW5kb3csIFJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogeworICAgIGlmIChyZW5k
ZXJTdHlsZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKKyAgICAgICAgcmV0dXJuIDA7
CisKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcg
R3JhcGhpY3NDb250ZXh0M0QoYXR0cnMsIGhvc3RXaW5kb3csIHJlbmRlclN0eWxlKSk7CiAgICAg
cmV0dXJuIGNvbnRleHQtPm1fcHJpdmF0ZSA/IGNvbnRleHQucmVsZWFzZSgpIDogMDsKIH0KQEAg
LTY3LDI5ICs3MCwxMiBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaQogICAgICwgbV9tdWx0aXNh
bXBsZUNvbG9yQnVmZmVyKDApCiAgICAgLCBtX3ByaXZhdGUoYWRvcHRQdHIobmV3IEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZSh0aGlzLCBob3N0V2luZG93LCByZW5kZXJTdHlsZSkpKQogewotICAg
IHZhbGlkYXRlQXR0cmlidXRlcygpOwotCi0gICAgaWYgKCFtX3ByaXZhdGUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkU2hpbXMgPSBmYWxzZTsKLSAgICBz
dGF0aWMgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAgICBpZiAoIWluaXRpYWxpemVkU2hpbXMpIHsK
LSAgICAgICAgc3VjY2VzcyA9IGluaXRpYWxpemVPcGVuR0xTaGltcygpOwotICAgICAgICBpbml0
aWFsaXplZFNoaW1zID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCFzdWNjZXNzKSB7CisgICAgaWYg
KCFtX3ByaXZhdGUgfHwgIW1fcHJpdmF0ZS0+bV9wbGF0Zm9ybUNvbnRleHQpIHsKICAgICAgICAg
bV9wcml2YXRlID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChy
ZW5kZXJTdHlsZSA9PSBSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQpIHsKLSAgICAgICAgLy8gRXZh
cyBkb2Vzbid0IGFsbG93IGluY2x1ZGluZyBnbCBoZWFkZXJzIGFuZCBFdmFzX0dMIGhlYWRlcnMg
YXQgdGhlIHNhbWUgdGltZSwKLSAgICAgICAgLy8gc28gd2UgbmVlZCB0byBxdWVyeSB0aGUgY3Vy
cmVudCBnbCBjb250ZXh0L3N1cmZhY2UgaGVyZSBpbnN0ZWFkIG9mIGluIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZS4KLSAgICAgICAgdm9pZCogY3VycmVudENvbnRleHQgPSAodm9pZCopZ2xYR2V0
Q3VycmVudENvbnRleHQoKTsKLSAgICAgICAgdm9pZCogY3VycmVudFN1cmZhY2UgPSAodm9pZCop
Z2xYR2V0Q3VycmVudERyYXdhYmxlKCk7Ci0gICAgICAgIG1fcHJpdmF0ZS0+c2V0Q3VycmVudEdM
Q29udGV4dChjdXJyZW50Q29udGV4dCwgY3VycmVudFN1cmZhY2UpOwotICAgIH0KKyAgICB2YWxp
ZGF0ZUF0dHJpYnV0ZXMoKTsKIAogICAgIGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJPZmZzY3Jl
ZW4pIHsKICAgICAgICAgLy8gQ3JlYXRlIGJ1ZmZlcnMgZm9yIHRoZSBjYW52YXMgRkJPLgpAQCAt
MTQ3LDE0ICsxMzMsMTkgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICBnbEVuYWJsZShH
TF9QT0lOVF9TUFJJVEUpOwogICAgIGdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJ
WkUpOwogI2VuZGlmCisgICAgZ2xDbGVhckNvbG9yKDAuMCwgMC4wLCAwLjAsIDAuMCk7CiB9CiAK
IEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQogewotICAgIGlmIChtX3Jl
bmRlclN0eWxlID09IFJlbmRlclRvQ3VycmVudEdMQ29udGV4dCB8fCAhbV9wcml2YXRlKQorICAg
IGlmICghbV9wcml2YXRlIHx8ICFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2ZibykgeworICAgICAg
ICBtX3ByaXZhdGUtPnJlbGVhc2VSZXNvdXJjZXMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KwogICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CiAKICAgICBpZiAobV9hdHRy
cy5hbnRpYWxpYXMpIHsKQEAgLTE2NSw3ICsxNTYsNiBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdy
YXBoaWNzQ29udGV4dDNEKCkKIAogICAgICAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9t
dWx0aXNhbXBsZUZCTyk7CiAgICAgfSBlbHNlIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRy
cy5kZXB0aCkgewotCiAjaWYgVVNFKE9QRU5HTF9FU18yKQogICAgICAgICBpZiAobV9hdHRycy5k
ZXB0aCkKICAgICAgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aEJ1ZmZl
cik7CkBAIC0xNzUsNyArMTY1LDkgQEAgR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRl
eHQzRCgpCiAjZW5kaWYKICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRo
U3RlbmNpbEJ1ZmZlcik7CiAgICAgfQorCiAgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1f
ZmJvKTsKKyAgICBtX3ByaXZhdGUtPnJlbGVhc2VSZXNvdXJjZXMoKTsKIH0KIAogUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQzRCgpCkBAIC0xOTcsMTIgKzE4OSw2IEBAIFBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4
dDNEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bWFr
ZUNvbnRleHRDdXJyZW50KCkKIHsKLSAgICBpZiAoIW1fcHJpdmF0ZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKG1fcmVuZGVyU3R5bGUgPT0gUmVuZGVyVG9DdXJyZW50R0xDb250
ZXh0KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQogICAgIHJldHVybiBtX3ByaXZhdGUtPm1ha2VD
b250ZXh0Q3VycmVudCgpOwogfQogCkBAIC0yMTUsOSArMjAxLDkgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0CiAjZW5kaWYKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6c2V0Q29udGV4dExvc3RDYWxsYmFjayhQYXNzT3duUHRyPENvbnRleHRM
b3N0Q2FsbGJhY2s+KSAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2Fs
bGJhY2soUGFzc093blB0cjxDb250ZXh0TG9zdENhbGxiYWNrPiBjYWxsQmFjaykKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIG1fcHJpdmF0ZS0+c2V0Q29udGV4dExvc3RDYWxsYmFjayhj
YWxsQmFjayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldEVycm9yTWVzc2FnZUNh
bGxiYWNrKFBhc3NPd25QdHI8RXJyb3JNZXNzYWdlQ2FsbGJhY2s+KSAKZGlmZiAtLWdpdCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
LmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlLmNwcAppbmRleCA2MmQwYTZlLi5kZDFhMWY1IDEwMDY0NAotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQz
RFByaXZhdGUuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMTIg
U2Ftc3VuZyBFbGVjdHJvbmljcworICAgIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3Jh
dGlvbi4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTgsMTYwICsxOSwxMDQgQEAKICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIK
IAogI2lmIFVTRSgzRF9HUkFQSElDUykgfHwgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgogCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlIDxF
Y29yZV9FdmFzLmg+Ci0jaW5jbHVkZSA8RXZhc19HTC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25BcnJh
eVB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIFVTRShPUEVOR0xf
RVNfMikKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4K
KyNlbHNlCisjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBIb3N0V2luZG93KiBob3N0V2luZG93LCBH
cmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiAgICAgOiBtX2NvbnRl
eHQoY29udGV4dCkKICAgICAsIG1faG9zdFdpbmRvdyhob3N0V2luZG93KQotICAgICwgbV9ldmFz
R0woMCkKLSAgICAsIG1fZXZhc0dMQ29udGV4dCgwKQotICAgICwgbV9ldmFzR0xTdXJmYWNlKDAp
Ci0gICAgLCBtX2dsQ29udGV4dCgwKQotICAgICwgbV9nbFN1cmZhY2UoMCkKLSAgICAsIG1fYXBp
KDApCi0gICAgLCBtX3JlbmRlclN0eWxlKHJlbmRlclN0eWxlKQorICAgICwgbV9wZW5kaW5nU3Vy
ZmFjZVJlc2l6ZShmYWxzZSkKIHsKLSAgICBpZiAocmVuZGVyU3R5bGUgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlclRvQ3VycmVudEdMQ29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAg
aWYgKG1faG9zdFdpbmRvdyAmJiBtX2hvc3RXaW5kb3ctPnBsYXRmb3JtUGFnZUNsaWVudCgpKSB7
CiAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBjb2RlIHBhdGggZm9yIFdlYktpdDEu
CiAgICAgICAgIC8vIEdldCBFdmFzIG9iamVjdCBmcm9tIHBsYXRmb3JtUGFnZUNsaWVudCBhbmQg
c2V0IEV2YXNHTCByZWxhdGVkIG1lbWJlcnMuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICAvLyBGb3IgV2ViS2l0Miwgd2UgbmVlZCB0byBjcmVhdGUgYSBkdW1teSBlY29yZUV2YXMgb2Jq
ZWN0IGZvciB0aGUgV2ViUHJvY2VzcyBpbiBvcmRlciB0byB1c2UgRXZhc0dMIEFQSXMuCi0jaWZk
ZWYgSEFWRV9FQ09SRV9YCi0gICAgZWNvcmVfZXZhc19pbml0KCk7Ci0gICAgbV9lY29yZUV2YXMg
PSBhZG9wdFB0cihlY29yZV9ldmFzX2dsX3gxMV9uZXcoMCwgMCwgMCwgMCwgMSwgMSkpOwotICAg
IGlmICghbV9lY29yZUV2YXMpCi0gICAgICAgIHJldHVybjsKLSNlbHNlCi0gICAgcmV0dXJuOwot
I2VuZGlmCi0KLSAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV9lY29yZUV2YXMuZ2V0
KCkpOwotICAgIGlmICghZXZhcykKKyAgICBtX3BsYXRmb3JtQ29udGV4dCA9IEdMQ29udGV4dDo6
Y3JlYXRlQ29udGV4dChyZW5kZXJTdHlsZSk7CisgICAgaWYgICghbV9wbGF0Zm9ybUNvbnRleHQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIENyZWF0ZSBhIG5ldyBFdmFzX0dMIG9iamVjdCBm
b3IgZ2wgcmVuZGVyaW5nIG9uIGVmbC4KLSAgICBtX2V2YXNHTCA9IGV2YXNfZ2xfbmV3KGV2YXMp
OwotICAgIGlmICghbV9ldmFzR0wpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEdldCB0aGUg
QVBJIGZvciByZW5kZXJpbmcgdXNpbmcgT3BlbkdMLgotICAgIC8vIFRoaXMgcmV0dXJucyBhIHN0
cnVjdHVyZSB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgT3BlbkdMIGZ1bmN0aW9ucyB3ZSBjYW4gdXNl
IHRvIHJlbmRlciBpbiBFdmFzCi0gICAgbV9hcGkgPSBldmFzX2dsX2FwaV9nZXQobV9ldmFzR0wp
OwotICAgIGlmICghbV9hcGkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENyZWF0ZSBhIGNv
bnRleHQKLSAgICBtX2V2YXNHTENvbnRleHQgPSBldmFzX2dsX2NvbnRleHRfY3JlYXRlKG1fZXZh
c0dMLCAwKTsKLSAgICBpZiAoIW1fZXZhc0dMQ29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gQ3JlYXRlIGEgc3VyZmFjZQotICAgIGlmICghY3JlYXRlU3VyZmFjZSgwLCByZW5kZXJT
dHlsZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQorICAgIGlmIChy
ZW5kZXJTdHlsZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyT2Zmc2NyZWVuKSB7CiAjaWYg
VVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgSW50U2l6ZSBzdXJmYWNlU2l6ZShtX2NvbnRleHQt
Pm1fY3VycmVudFdpZHRoLCBtX2NvbnRleHQtPm1fY3VycmVudEhlaWdodCk7Ci0gICAgbV9zdXJm
YWNlRmxhZ3MgPSBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzVGV4dHVyZVRhcmdldCB8IEdyYXBo
aWNzU3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nOwotICAgIGlmICghc3VyZmFjZVNpemUuaXNFbXB0
eSgpKQotICAgICAgICBtX2dyYXBoaWNzU3VyZmFjZSA9IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRl
KHN1cmZhY2VTaXplLCBtX3N1cmZhY2VGbGFncyk7CisgICAgICAgIG1fcGxhdGZvcm1TdXJmYWNl
ID0gR0xTdXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKCk7CisjZWxzZQorICAgICAgICBt
X3BsYXRmb3JtU3VyZmFjZSA9IEdMU3VyZmFjZTo6Y3JlYXRlT2ZmU2NyZWVuU3VyZmFjZSgpOwog
I2VuZGlmCisgICAgICAgIGlmICghbV9wbGF0Zm9ybVN1cmZhY2UpIHsKKyAgICAgICAgICAgIG1f
cGxhdGZvcm1Db250ZXh0ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICghbV9wbGF0Zm9ybUNvbnRleHQtPmluaXRpYWxpemUobV9wbGF0Zm9y
bVN1cmZhY2UuZ2V0KCkpIHx8ICFtX3BsYXRmb3JtQ29udGV4dC0+bWFrZUN1cnJlbnQobV9wbGF0
Zm9ybVN1cmZhY2UuZ2V0KCkpKSB7CisgICAgICAgICAgICByZWxlYXNlUmVzb3VyY2VzKCk7Cisg
ICAgICAgICAgICBtX3BsYXRmb3JtQ29udGV4dCA9IG51bGxwdHI7CisgICAgICAgICAgICBtX3Bs
YXRmb3JtU3VyZmFjZSA9IG51bGxwdHI7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9z
dXJmYWNlSGFuZGxlID0gbV9wbGF0Zm9ybVN1cmZhY2UtPmhhbmRsZSgpOworICAgIH0KIH0KIAog
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCkKIHsK
LSAgICBpZiAoIW1fZXZhc0dMKQotICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9ldmFzR0xT
dXJmYWNlKQotICAgICAgICBldmFzX2dsX3N1cmZhY2VfZGVzdHJveShtX2V2YXNHTCwgbV9ldmFz
R0xTdXJmYWNlKTsKK30KIAotICAgIGlmIChtX2V2YXNHTENvbnRleHQpCi0gICAgICAgIGV2YXNf
Z2xfY29udGV4dF9kZXN0cm95KG1fZXZhc0dMLCBtX2V2YXNHTENvbnRleHQpOwordm9pZCBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OnJlbGVhc2VSZXNvdXJjZXMoKQoreworICAgIC8vIFJlbGVh
c2UgdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgZHJhd2FibGUgb25seSBhZnRlciBkZXN0cm95aW5n
IGFueSBhc3NvY2lhdGVkIGdsIHJlc291cmNlcy4KKyAgICBpZiAobV9wbGF0Zm9ybUNvbnRleHQp
CisgICAgICAgIG1fcGxhdGZvcm1Db250ZXh0LT5kZXN0cm95KCk7CiAKLSAgICBldmFzX2dsX2Zy
ZWUobV9ldmFzR0wpOworICAgIGlmIChtX3BsYXRmb3JtU3VyZmFjZSkKKyAgICAgICAgbV9wbGF0
Zm9ybVN1cmZhY2UtPmRlc3Ryb3koKTsKIAotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAg
IG1fZ3JhcGhpY3NTdXJmYWNlLmNsZWFyKCk7Ci0jZW5kaWYKKyAgICBpZiAobV9wbGF0Zm9ybUNv
bnRleHQpCisgICAgICAgIG1fcGxhdGZvcm1Db250ZXh0LT5yZWxlYXNlQ3VycmVudCgpOwogfQog
Ci1ib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlU3VyZmFjZShQYWdlQ2xpZW50
RWZsKiBwYWdlQ2xpZW50LCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQorYm9vbCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZVN1cmZhY2UoUGFnZUNsaWVudEVmbCosIGJv
b2wpCiB7Ci0gICAgLy8gSWYgUmVuZGVyU3R5bGUgaXMgUmVuZGVyT2Zmc2NyZWVuLCB3ZSB3aWxs
IGJlIHJlbmRlcmluZyB0byBhIEZCTywKLSAgICAvLyBzbyBFdmFzX0dMX1N1cmZhY2UgaGFzIGEg
MXgxIGR1bW15IHN1cmZhY2UuCi0gICAgaW50IHdpZHRoID0gMTsKLSAgICBpbnQgaGVpZ2h0ID0g
MTsKLQotICAgIC8vIEJ1dCwgaW4gY2FzZSBvZiBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdywg
d2UgaGF2ZSB0byByZW5kZXIgdG8gYSByZW5kZXIgdGFyZ2V0IHN1cmZhY2Ugd2l0aCB0aGUgc2Ft
ZSBzaXplIGFzIG91ciB3ZWJWaWV3LgotICAgIGlmIChyZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRv
dykgewotICAgICAgICBpZiAoIXBhZ2VDbGllbnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIC8vIEZJWE1FOiBHZXQgZ2VvbWV0cnkgb2Ygd2ViVmlldyBhbmQgc2V0IHNpemUg
b2YgdGFyZ2V0IHN1cmZhY2UuCi0gICAgfQotCi0gICAgRXZhc19HTF9Db25maWcgY29uZmlnID0g
ewotICAgICAgICBFVkFTX0dMX1JHQkFfODg4OCwKLSAgICAgICAgRVZBU19HTF9ERVBUSF9CSVRf
OCwKLSAgICAgICAgRVZBU19HTF9TVEVOQ0lMX05PTkUsIC8vIEZJWE1FOiBzZXQgRVZBU19HTF9T
VEVOQ0lMX0JJVF84IGFmdGVyIGZpeGluZyBFdmFzX0dMIGJ1Zy4KLSAgICAgICAgRVZBU19HTF9P
UFRJT05TX05PTkUsCi0gICAgICAgIEVWQVNfR0xfTVVMVElTQU1QTEVfTk9ORQotICAgIH07Ci0K
LSAgICAvLyBDcmVhdGUgYSBuZXcgRXZhc19HTF9TdXJmYWNlIG9iamVjdAotICAgIG1fZXZhc0dM
U3VyZmFjZSA9IGV2YXNfZ2xfc3VyZmFjZV9jcmVhdGUobV9ldmFzR0wsICZjb25maWcsIHdpZHRo
LCBoZWlnaHQpOwotICAgIGlmICghbV9ldmFzR0xTdXJmYWNlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKHJlbmRlckRp
cmVjdGx5VG9Ib3N0V2luZG93KSB7Ci0gICAgICAgIEV2YXNfTmF0aXZlX1N1cmZhY2UgbmF0aXZl
U3VyZmFjZTsKLSAgICAgICAgLy8gRmlsbCBpbiB0aGUgTmF0aXZlIFN1cmZhY2UgaW5mb3JtYXRp
b24gZnJvbSB0aGUgZ2l2ZW4gRXZhcyBHTCBzdXJmYWNlLgotICAgICAgICBldmFzX2dsX25hdGl2
ZV9zdXJmYWNlX2dldChtX2V2YXNHTCwgbV9ldmFzR0xTdXJmYWNlLCAmbmF0aXZlU3VyZmFjZSk7
Ci0KLSAgICAgICAgLy8gRklYTUU6IENyZWF0ZSBhbmQgc3BlY2lhbGx5IHNldCB1cCBhIGV2YXNf
b2JqZWN0IHdoaWNoIGFjdCBhcyB0aGUgcmVuZGVyIHRhcmdlciBzdXJmYWNlLgotICAgIH0KLSNl
bmRpZgotCi0gICAgcmV0dXJuIHRydWU7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzZXRDdXJyZW50
R0xDb250ZXh0KHZvaWQqIGNvbnRleHQsIHZvaWQqIHN1cmZhY2UpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6c2V0Q29udGV4dExvc3RDYWxsYmFjayhQYXNzT3duUHRyPEdyYXBoaWNz
Q29udGV4dDNEOjpDb250ZXh0TG9zdENhbGxiYWNrPiBjYWxsQmFjaykKIHsKLSAgICBtX2dsQ29u
dGV4dCA9IGNvbnRleHQ7Ci0gICAgbV9nbFN1cmZhY2UgPSBzdXJmYWNlOworICAgIG1fY29udGV4
dExvc3RDYWxsYmFjayA9IGNhbGxCYWNrOwogfQogCiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNE
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNv
bnN0CiB7Ci0gICAgaWYgKG1fcmVuZGVyU3R5bGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRl
clRvQ3VycmVudEdMQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIG1fZ2xDb250ZXh0OwotCi0gICAg
cmV0dXJuIG1fZXZhc0dMQ29udGV4dDsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybUNvbnRleHQtPmhh
bmRsZSgpOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFrZUNvbnRleHRD
dXJyZW50KCkKIHsKLSAgICByZXR1cm4gZXZhc19nbF9tYWtlX2N1cnJlbnQobV9ldmFzR0wsIG1f
ZXZhc0dMU3VyZmFjZSwgbV9ldmFzR0xDb250ZXh0KTsKKyAgICBib29sIHJldHVyblZhbHVlID0g
bV9wbGF0Zm9ybUNvbnRleHQtPm1ha2VDdXJyZW50KG1fcGxhdGZvcm1TdXJmYWNlLmdldCgpKTsK
KworICAgIGlmIChtX2NvbnRleHRMb3N0Q2FsbGJhY2sgJiYgIW1fcGxhdGZvcm1Db250ZXh0LT5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgcmV0dXJuVmFsdWUgPSBmYWxzZTsKKyAgICAgICAgbV9jb250
ZXh0TG9zdENhbGxiYWNrLT5vbkNvbnRleHRMb3N0KCk7CisgICAgICAgIC8vIEZJWE1FOiBSZXN0
b3JlIGNvbnRleHQKKyAgICB9CisKKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKICNpZiBV
U0UoVEVYVFVSRV9NQVBQRVJfR0wpCkBAIC0xODIsMjcgKzEyNywzNiBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNv
bnN0IEZsb2F0UgogI2VuZGlmCiAKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc1N1cmZhY2VzKGNvbnN0IEludFNp
emUmIHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NT
dXJmYWNlcyhjb25zdCBJbnRTaXplJikKIHsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAg
ICAgIG1fZ3JhcGhpY3NTdXJmYWNlLmNsZWFyKCk7Ci0gICAgZWxzZQotICAgICAgICBtX2dyYXBo
aWNzU3VyZmFjZSA9IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKHNpemUsIG1fc3VyZmFjZUZsYWdz
KTsKKyAgICBtX3BlbmRpbmdTdXJmYWNlUmVzaXplID0gdHJ1ZTsKIH0KIAogdWludDMyX3QgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpjb3B5VG9HcmFwaGljc1N1cmZhY2UoKQogewotICAgIGlm
ICghbV9ncmFwaGljc1N1cmZhY2UpCisgICAgaWYgKCFtX3BsYXRmb3JtQ29udGV4dCB8fCAhbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgbV9ncmFwaGljc1N1cmZhY2UtPmNvcHlGcm9tVGV4dHVyZShtX2NvbnRl
eHQtPm1fdGV4dHVyZSwgSW50UmVjdCgwLCAwLCBtX2NvbnRleHQtPm1fY3VycmVudFdpZHRoLCBt
X2NvbnRleHQtPm1fY3VycmVudEhlaWdodCkpOwotICAgIHJldHVybiBtX2dyYXBoaWNzU3VyZmFj
ZS0+c3dhcEJ1ZmZlcnMoKTsKKyAgICBpZiAobV9wZW5kaW5nU3VyZmFjZVJlc2l6ZSkgeworICAg
ICAgICBtX3BlbmRpbmdTdXJmYWNlUmVzaXplID0gZmFsc2U7CisgICAgICAgIG1fcGxhdGZvcm1T
dXJmYWNlLT5zZXRHZW9tZXRyeShJbnRSZWN0KDAsIDAsIG1fY29udGV4dC0+bV9jdXJyZW50V2lk
dGgsIG1fY29udGV4dC0+bV9jdXJyZW50SGVpZ2h0KSk7CisgICAgfQorCisgICAgaWYgKG1fY29u
dGV4dC0+bV9hdHRycy5hbnRpYWxpYXMpIHsKKyNpZiAhVVNFKE9QRU5HTF9FU18yKQorICAgICAg
ICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9jb250ZXh0LT5t
X211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRFJBV19GUkFN
RUJVRkZFUl9FWFQsIG1fY29udGV4dC0+bV9mYm8pOworICAgICAgICBnbEJsaXRGcmFtZWJ1ZmZl
cigwLCAwLCBtX2NvbnRleHQtPm1fY3VycmVudFdpZHRoLCBtX2NvbnRleHQtPm1fY3VycmVudEhl
aWdodCwgMCwgMCwgbV9jb250ZXh0LT5tX2N1cnJlbnRXaWR0aCwgbV9jb250ZXh0LT5tX2N1cnJl
bnRIZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CisjZW5kaWYKKyAgICB9
CisKKyAgICBtX3BsYXRmb3JtU3VyZmFjZS0+dXBkYXRlQ29udGVudHMobV9jb250ZXh0LT5tX3Rl
eHR1cmUsIEludFJlY3QoMCwgMCwgbV9jb250ZXh0LT5tX2N1cnJlbnRXaWR0aCwgbV9jb250ZXh0
LT5tX2N1cnJlbnRIZWlnaHQpLCBtX2NvbnRleHQtPm1fYm91bmRGQk8pOworICAgIHJldHVybiAw
OwogfQogCiBHcmFwaGljc1N1cmZhY2VUb2tlbiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Omdy
YXBoaWNzU3VyZmFjZVRva2VuKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9ncmFwaGljc1N1cmZh
Y2UtPmV4cG9ydFRva2VuKCk7CisgICAgcmV0dXJuIG1fc3VyZmFjZUhhbmRsZTsKIH0KICNlbmRp
ZgogCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZS5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Vm
bC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAppbmRleCAxYWU0MzUxLi45YTljMDFiIDEwMDY0
NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZS5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICAgIENvcHlyaWdo
dCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIElu
dGVsIENvcnBvcmF0aW9uLgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw2ICsyMSw4IEBACiAj
aWZuZGVmIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZV9oCiAjZGVmaW5lIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZV9oCiAKKyNpZiBVU0UoM0RfR1JBUEhJQ1MpIHx8IFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKwogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKICNpZiBVU0Uo
VEVYVFVSRV9NQVBQRVJfR0wpCkBAIC0yNywxNCArMzAsMTEgQEAKICNlbmRpZgogCiAjaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCi0jaW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlLmgiCisjaW5jbHVk
ZSAiR0xTdXJmYWNlLmgiCiAjZW5kaWYKIAotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0wgICAgICAg
ICAgICAgICBFdmFzX0dMOwotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfU3VyZmFjZSAgICAgICBF
dmFzX0dMX1N1cmZhY2U7Ci10eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9Db250ZXh0ICAgICAgIEV2
YXNfR0xfQ29udGV4dDsKLXR5cGVkZWYgc3RydWN0IF9FdmFzX0dMX0NvbmZpZyAgICAgICAgRXZh
c19HTF9Db25maWc7Ci10eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9BUEkgICAgICAgICAgIEV2YXNf
R0xfQVBJOworI2luY2x1ZGUgIkdMQ29udGV4dC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CiAKIGNsYXNzIFBhZ2VDbGllbnRFZmw7CiAKQEAgLTQ4LDggKzQ4LDEyIEBAIHB1YmxpYzoK
ICAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBIb3N0V2lu
ZG93KiwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlKTsKICAgICB+R3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlKCk7CiAKKyAgICBib29sIGNyZWF0ZVN1cmZhY2UoUGFnZUNsaWVudEVmbCos
IGJvb2wpOworCiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEKCkgY29uc3Q7CiAKKyAgICB2b2lkIHNldENvbnRleHRMb3N0Q2FsbGJhY2soUGFz
c093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjaz4gIGNhbGxCYWNr
KTsKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBQbGF0Zm9ybUxheWVy
KiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAjZW5kaWYKQEAgLTYzLDI5ICs2NywyNSBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgYm9vbCBj
cmVhdGVTdXJmYWNlKFBhZ2VDbGllbnRFZmwqLCBib29sIHJlbmRlckRpcmVjdGx5VG9FdmFzR0xP
YmplY3QpOwotICAgIHZvaWQgc2V0Q3VycmVudEdMQ29udGV4dCh2b2lkKiwgdm9pZCopOworICAg
IGJvb2wgY3JlYXRlU3VyZmFjZSgpOworICAgIHZvaWQgcmVsZWFzZVJlc291cmNlcygpOwogCiAg
ICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwogICAgIEdyYXBo
aWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CiAgICAgSG9zdFdpbmRvdyogbV9ob3N0V2luZG93Owog
I2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIEdyYXBoaWNzU3VyZmFjZTo6RmxhZ3MgbV9z
dXJmYWNlRmxhZ3M7Ci0gICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gbV9ncmFwaGljc1N1cmZh
Y2U7CisgICAgT3duUHRyPEdMQ29udGV4dD4gbV9wbGF0Zm9ybUNvbnRleHQ7CisgICAgT3duUHRy
PEdMU3VyZmFjZT4gbV9wbGF0Zm9ybVN1cmZhY2U7CisgICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4g
bV9zdXJmYWNlSGFuZGxlOwogI2VuZGlmCiAKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q6
OkNvbnRleHRMb3N0Q2FsbGJhY2s+IG1fY29udGV4dExvc3RDYWxsYmFjazsKICAgICBMaXN0SGFz
aFNldDxHQzNEZW51bT4gbV9zeW50aGV0aWNFcnJvcnM7Ci0KLSAgICBPd25QdHI8RWNvcmVfRXZh
cz4gbV9lY29yZUV2YXM7Ci0gICAgRXZhc19HTCogbV9ldmFzR0w7Ci0gICAgRXZhc19HTF9Db250
ZXh0KiBtX2V2YXNHTENvbnRleHQ7Ci0gICAgRXZhc19HTF9TdXJmYWNlKiBtX2V2YXNHTFN1cmZh
Y2U7Ci0gICAgdm9pZCogbV9nbENvbnRleHQ7Ci0gICAgdm9pZCogbV9nbFN1cmZhY2U7Ci0gICAg
RXZhc19HTF9BUEkqIG1fYXBpOwotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSBt
X3JlbmRlclN0eWxlOworICAgIGJvb2wgbV9wZW5kaW5nU3VyZmFjZVJlc2l6ZTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEdyYXBoaWNzTGF5ZXJFZmxfaAorI2Vu
ZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNDBlYzljOAotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKQEAgLTAsMCArMSwxMjMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJH
TFhDb250ZXh0LmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEhBVkUo
R0xYKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgR0xYQ29udGV4dCAoKkdMWENS
RUFURUNPTlRFWFRBVFRSSUJTQVJCUFJPQykoRGlzcGxheSosIEdMWEZCQ29uZmlnLCBHTFhDb250
ZXh0LCBCb29sLCBjb25zdCBpbnQqKTsKK3N0YXRpYyBHTFhDUkVBVEVDT05URVhUQVRUUklCU0FS
QlBST0MgZ2xYQ3JlYXRlQ29udGV4dEF0dHJpYnNBUkIgPSAwOworCitzdGF0aWMgaW50IEF0dHJp
YnNbXSA9IHsKKyAgICBHTFhfQ09OVEVYVF9SRVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1lfQVJC
LAorICAgIEdMWF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfQVJCLAorICAgIDAgfTsKKworc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZUFSQkV4dGVuc2lvbnMoKQoreworICAgIHN0YXRpYyBib29sIGluaXRp
YWxpemVkID0gZmFsc2U7CisKKyAgICBpZiAoaW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICBnbFhDcmVhdGVDb250ZXh0QXR0cmlic0FS
QiA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0xYQ1JFQVRFQ09OVEVYVEFUVFJJQlNBUkJQUk9DPihnbFhH
ZXRQcm9jQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0IEdMdWJ5dGUqPigiZ2xYQ3JlYXRl
Q29udGV4dEF0dHJpYnNBUkIiKSkpOworfQorCitHTFhPZmZTY3JlZW5Db250ZXh0OjpHTFhPZmZT
Y3JlZW5Db250ZXh0KCkKKyAgICA6IEdMQ29udGV4dCgpCisgICAgLCBtX2Rpc3BsYXkoMCkKK3sK
K30KKworYm9vbCBHTFhPZmZTY3JlZW5Db250ZXh0Ojppbml0aWFsaXplKEdMU3VyZmFjZSogc3Vy
ZmFjZSkKK3sKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IG1fZGlzcGxheSA9IHN1cmZhY2UtPnNoYXJlZERpc3BsYXkoKTsKKyAgICBpZiAoIW1fZGlzcGxh
eSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR0xYRkJDb25maWcgY29uZmlnID0gc3Vy
ZmFjZS0+Y29uZmlndXJhdGlvbigpOworCisgICAgaWYgKGNvbmZpZykgeworICAgICAgICBpbml0
aWFsaXplQVJCRXh0ZW5zaW9ucygpOworCisgICAgICAgIGlmIChnbFhDcmVhdGVDb250ZXh0QXR0
cmlic0FSQikKKyAgICAgICAgICAgIG1fY29udGV4dEhhbmRsZSA9IGdsWENyZWF0ZUNvbnRleHRB
dHRyaWJzQVJCKG1fZGlzcGxheSwgY29uZmlnLCAwLCB0cnVlLCBBdHRyaWJzKTsKKworICAgICAg
ICBpZiAobV9jb250ZXh0SGFuZGxlKQorICAgICAgICAgICAgbV9yZXNldExvc3RDb250ZXh0ID0g
dHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZ2xYQ3Jl
YXRlTmV3Q29udGV4dChtX2Rpc3BsYXksIGNvbmZpZywgR0xYX1JHQkFfVFlQRSwgMCwgdHJ1ZSk7
CisKKyAgICAgICAgaWYgKG1fY29udGV4dEhhbmRsZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworR0xYT2ZmU2NyZWVuQ29udGV4dDo6
fkdMWE9mZlNjcmVlbkNvbnRleHQoKQoreworfQorCitib29sIEdMWE9mZlNjcmVlbkNvbnRleHQ6
OmlzQ3VycmVudENvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHRIYW5kbGUg
PT0gZ2xYR2V0Q3VycmVudENvbnRleHQoKTsKK30KKworYm9vbCBHTFhPZmZTY3JlZW5Db250ZXh0
OjpwbGF0Zm9ybU1ha2VDdXJyZW50KEdMU3VyZmFjZSogc3VyZmFjZSkKK3sKKyAgICByZXR1cm4g
Z2xYTWFrZUN1cnJlbnQoc3VyZmFjZS0+c2hhcmVkRGlzcGxheSgpLCBzdXJmYWNlLT5oYW5kbGUo
KS5mcm9udEJ1ZmZlckhhbmRsZSwgbV9jb250ZXh0SGFuZGxlKTsKK30KKwordm9pZCBHTFhPZmZT
Y3JlZW5Db250ZXh0OjpwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KCkKK3sKKyAgICBnbFhNYWtlQ3Vy
cmVudChtX2Rpc3BsYXksIDAsIDApOworfQorCit2b2lkIEdMWE9mZlNjcmVlbkNvbnRleHQ6OmZy
ZWVSZXNvdXJjZXMoKQoreworICAgIGlmIChtX2NvbnRleHRIYW5kbGUpCisgICAgICAgIGdsWERl
c3Ryb3lDb250ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0SGFuZGxlKTsKKworICAgIG1fY29udGV4
dEhhbmRsZSA9IDA7CisgICAgbV9kaXNwbGF5ID0gMDsKK30KKwordm9pZCBHTFhPZmZTY3JlZW5D
b250ZXh0OjpkZXN0cm95KCkKK3sKKyAgICBmcmVlUmVzb3VyY2VzKCk7CisgICAgR0xDb250ZXh0
OjpkZXN0cm95KCk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuaCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNDEyMzQKLS0tIC9kZXYvbnVsbAorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuaApAQCAt
MCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdMWENvbnRleHRfaAor
I2RlZmluZSBHTFhDb250ZXh0X2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykg
JiYgSEFWRShHTFgpCisKKyNpbmNsdWRlICJHTENvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBHTFhDdXJyZW50Q29udGV4dFdyYXBwZXIgOiBwdWJsaWMgR0xDb250ZXh0
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHTFhDdXJyZW50Q29udGV4dFdyYXBwZXIpOwor
CitwdWJsaWM6CisgICAgR0xYQ3VycmVudENvbnRleHRXcmFwcGVyKCkKKyAgICAgICAgOiBHTENv
bnRleHQoKQorICAgIHsKKyAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZ2xYR2V0Q3VycmVudENv
bnRleHQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5HTFhDdXJyZW50Q29udGV4dFdyYXBwZXIo
KSB7IH0KK307CisKK2NsYXNzIEdMWE9mZlNjcmVlbkNvbnRleHQgOiBwdWJsaWMgR0xDb250ZXh0
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHTFhPZmZTY3JlZW5Db250ZXh0KTsKKworcHVi
bGljOgorICAgIEdMWE9mZlNjcmVlbkNvbnRleHQoKTsKKyAgICB2aXJ0dWFsIH5HTFhPZmZTY3Jl
ZW5Db250ZXh0KCk7CisgICAgYm9vbCBpbml0aWFsaXplKEdMU3VyZmFjZSopOworICAgIGJvb2wg
cGxhdGZvcm1NYWtlQ3VycmVudChHTFN1cmZhY2UqKTsKKyAgICB2b2lkIHBsYXRmb3JtUmVsZWFz
ZUN1cnJlbnQoKTsKKyAgICB2b2lkIGRlc3Ryb3koKTsKKyAgICBib29sIGlzQ3VycmVudENvbnRl
eHQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIGZyZWVSZXNvdXJjZXMoKTsKKyAgICBE
aXNwbGF5KiBtX2Rpc3BsYXk7Cit9OworCit9CisKKyNlbmRpZiAvLyBHTFhDVVJSRU5UQ09OVEVY
V1JBUFBFUl9ICisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uOWViMzY2ZQotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKQEAgLTAsMCAr
MSwyMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJHTFhTdXJmYWNlLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYm
IEhBVkUoR0xYKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NoYXJlZFgxMVJlc291cmNlcyog
U2hhcmVkWDExUmVzb3VyY2VzOjptX3N0YXRpY1NoYXJlZFJlc291cmNlID0gMDsKKworc3RhdGlj
IGNvbnN0IGludCBwYnVmZmVyQXR0cmlidXRlc1tdID0geyBHTFhfUEJVRkZFUl9XSURUSCwgMSwg
R0xYX1BCVUZGRVJfSEVJR0hULCAxLCAwIH07CisKK0dMWFN1cmZhY2U6OkdMWFN1cmZhY2UoKQor
ICAgIDogR0xTdXJmYWNlKCkKK3sKKyAgICBtX3NoYXJlZFJlc291cmNlcyA9IFNoYXJlZFgxMVJl
c291cmNlczo6Y3JlYXRlKCk7CisgICAgbV9zaGFyZWREaXNwbGF5ID0gbV9zaGFyZWRSZXNvdXJj
ZXMtPmRpc3BsYXkoKTsKK30KKworR0xYU3VyZmFjZTo6fkdMWFN1cmZhY2UoKQoreworfQorCitY
VmlzdWFsSW5mbyogR0xYU3VyZmFjZTo6dmlzdWFsSW5mbygpCit7CisgICAgcmV0dXJuIG1fc2hh
cmVkUmVzb3VyY2VzLT52aXN1YWxJbmZvKCk7Cit9CisKK1dpbmRvdyBHTFhTdXJmYWNlOjp4V2lu
ZG93KCkKK3sKKyAgICByZXR1cm4gbV9zaGFyZWRSZXNvdXJjZXMtPmdldFhXaW5kb3coKTsKK30K
KworR0xYRkJDb25maWcgR0xYU3VyZmFjZTo6cEJ1ZmZlckNvbmZpZygpCit7CisgICAgcmV0dXJu
IG1fc2hhcmVkUmVzb3VyY2VzLT5wQnVmZmVyQ29udGV4dENvbmZpZygpOworfQorCitHTFhGQkNv
bmZpZyBHTFhTdXJmYWNlOjp0cmFuc3BvcnRTdXJmYWNlQ29uZmlnKCkKK3sKKyAgICByZXR1cm4g
bV9zaGFyZWRSZXNvdXJjZXMtPnN1cmZhY2VDb250ZXh0Q29uZmlnKCk7Cit9CisKK2Jvb2wgR0xY
U3VyZmFjZTo6aXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkKK3sKKyAgICByZXR1cm4gbV9z
aGFyZWRSZXNvdXJjZXMtPmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpOworfQorCitHTFhU
cmFuc3BvcnRTdXJmYWNlOjpHTFhUcmFuc3BvcnRTdXJmYWNlKCkKKyAgICA6IEdMWFN1cmZhY2Uo
KQoreworICAgIGluaXRpYWxpemUoKTsKK30KKworR0xYVHJhbnNwb3J0U3VyZmFjZTo6fkdMWFRy
YW5zcG9ydFN1cmZhY2UoKQoreworfQorCitQbGF0Zm9ybVN1cmZhY2VDb25maWcgR0xYVHJhbnNw
b3J0U3VyZmFjZTo6Y29uZmlndXJhdGlvbigpCit7CisgICAgcmV0dXJuIHRyYW5zcG9ydFN1cmZh
Y2VDb25maWcoKTsKK30KKwordm9pZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpzd2FwQnVmZmVycygp
Cit7CisgICAgaWYgKG1fZHJhd2FibGUpIHsKKyAgICAgICAgaWYgKG1fcmVzdG9yZU5lZWRlZCkg
eworICAgICAgICAgICAgR0xpbnQgb2xkRkJPOworICAgICAgICAgICAgZ2xHZXRJbnRlZ2VydihH
TF9GUkFNRUJVRkZFUl9CSU5ESU5HLCAmb2xkRkJPKTsKKyAgICAgICAgICAgIGdsQmluZEZyYW1l
YnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKTsKKyAgICAgICAgICAgIGdsWFN3YXBCdWZmZXJzKHNo
YXJlZERpc3BsYXkoKSwgbV9kcmF3YWJsZSk7CisgICAgICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZl
cihHTF9GUkFNRUJVRkZFUiwgb2xkRkJPKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBn
bFhTd2FwQnVmZmVycyhzaGFyZWREaXNwbGF5KCksIG1fZHJhd2FibGUpOworICAgIH0KK30KKwor
dm9pZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JiBuZXdS
ZWN0KQoreworICAgIEdMU3VyZmFjZTo6c2V0R2VvbWV0cnkobmV3UmVjdCk7CisgICAgaW50IHdp
ZHRoID0gbmV3UmVjdC53aWR0aCgpOworICAgIGludCBoZWlnaHQgPSBuZXdSZWN0LmhlaWdodCgp
OworICAgIFhSZXNpemVXaW5kb3coc2hhcmVkRGlzcGxheSgpLCBtX2RyYXdhYmxlLCB3aWR0aCwg
aGVpZ2h0KTsKK30KKwordm9pZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjppbml0aWFsaXplKCkKK3sK
KyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gc2hhcmVkRGlzcGxheSgpOworICAgIEdMWEZCQ29uZmln
IGNvbmZpZyA9IHRyYW5zcG9ydFN1cmZhY2VDb25maWcoKTsKKyAgICBpZiAoIWNvbmZpZykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgWFZpc3VhbEluZm8qIHZpc0luZm8gPSAgdmlzdWFsSW5mbygp
OworICAgIGlmICghdmlzSW5mbykKKyAgICAgICAgcmV0dXJuOworCisgICAgQ29sb3JtYXAgY21h
cCA9IFhDcmVhdGVDb2xvcm1hcChkaXNwbGF5LCB4V2luZG93KCksIHZpc0luZm8tPnZpc3VhbCwg
QWxsb2NOb25lKTsKKyAgICBYU2V0V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGU7CisgICAgYXR0
cmlidXRlLmJhY2tncm91bmRfcGl4ZWwgPSBXaGl0ZVBpeGVsKGRpc3BsYXksIDApOworICAgIGF0
dHJpYnV0ZS5ib3JkZXJfcGl4ZWwgPSBCbGFja1BpeGVsKGRpc3BsYXksIDApOworICAgIGF0dHJp
YnV0ZS5jb2xvcm1hcCA9IGNtYXA7CisgICAgbV9kcmF3YWJsZSAgPSBYQ3JlYXRlV2luZG93KGRp
c3BsYXksIHhXaW5kb3coKSwgMCwgMCwgMSwgMSwgMCwgdmlzSW5mby0+ZGVwdGgsIElucHV0T3V0
cHV0LCB2aXNJbmZvLT52aXN1YWwsIENXQmFja1BpeGVsIHwgQ1dCb3JkZXJQaXhlbCB8IENXQ29s
b3JtYXAsICZhdHRyaWJ1dGUpOworICAgIGlmICghbV9kcmF3YWJsZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgWFNldFdpbmRvd0JhY2tncm91bmRQaXhtYXAoZGlzcGxheSwgbV9kcmF3YWJsZSwg
MCk7CisgICAgWENvbXBvc2l0ZVJlZGlyZWN0V2luZG93KGRpc3BsYXksIG1fZHJhd2FibGUsIENv
bXBvc2l0ZVJlZGlyZWN0TWFudWFsKTsKKworICAgIGlmIChpc1hSZW5kZXJFeHRlbnNpb25TdXBw
b3J0ZWQoKSkKKyAgICAgICAgWE1hcFdpbmRvdyhkaXNwbGF5LCBtX2RyYXdhYmxlKTsKK30KKwor
dm9pZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95KCkKK3sKKyAgICBmcmVlUmVzb3VyY2Vz
KCk7CisgICAgR0xTdXJmYWNlOjpkZXN0cm95KCk7Cit9CisKK3ZvaWQgR0xYVHJhbnNwb3J0U3Vy
ZmFjZTo6ZnJlZVJlc291cmNlcygpCit7CisgICAgaWYgKCFtX2RyYXdhYmxlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBHTFN1cmZhY2U6OmRlc3Ryb3koKTsKKyAgICBEaXNwbGF5KiBkaXNwbGF5
ID0gc2hhcmVkRGlzcGxheSgpOworICAgIGlmICghZGlzcGxheSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgWERlc3Ryb3lXaW5kb3coZGlzcGxheSwgbV9kcmF3YWJsZSk7CisgICAgbV9kcmF3YWJs
ZSA9IDA7Cit9CisKK0dMWFBCdWZmZXI6OkdMWFBCdWZmZXIoKQorICAgIDogR0xYU3VyZmFjZSgp
Cit7CisgICAgaW5pdGlhbGl6ZSgpOworfQorCitHTFhQQnVmZmVyOjp+R0xYUEJ1ZmZlcigpCit7
Cit9CisKK3ZvaWQgR0xYUEJ1ZmZlcjo6aW5pdGlhbGl6ZSgpCit7CisgICAgRGlzcGxheSogZGlz
cGxheSA9IHNoYXJlZERpc3BsYXkoKTsKKyAgICBHTFhGQkNvbmZpZyBjb25maWcgPSBwQnVmZmVy
Q29uZmlnKCk7CisgICAgaWYgKCFjb25maWcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZHJh
d2FibGUgPSBnbFhDcmVhdGVQYnVmZmVyKGRpc3BsYXksIGNvbmZpZywgcGJ1ZmZlckF0dHJpYnV0
ZXMpOworfQorCitQbGF0Zm9ybVN1cmZhY2VDb25maWcgR0xYUEJ1ZmZlcjo6Y29uZmlndXJhdGlv
bigpCit7CisgICAgcmV0dXJuIHBCdWZmZXJDb25maWcoKTsKK30KKwordm9pZCBHTFhQQnVmZmVy
OjpkZXN0cm95KCkKK3sKKyAgICBmcmVlUmVzb3VyY2VzKCk7Cit9CisKK3ZvaWQgR0xYUEJ1ZmZl
cjo6ZnJlZVJlc291cmNlcygpCit7CisgICAgaWYgKCFtX2RyYXdhYmxlKQorICAgICAgICByZXR1
cm47CisKKyAgICBHTFN1cmZhY2U6OmRlc3Ryb3koKTsKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0g
c2hhcmVkRGlzcGxheSgpOworICAgIGlmICghZGlzcGxheSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZ2xYRGVzdHJveVBidWZmZXIoZGlzcGxheSwgbV9kcmF3YWJsZSk7CisgICAgbV9kcmF3YWJs
ZSA9IDA7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmFlOWY1ZDIKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaApAQCAtMCwwICsx
LDI4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHTFhTdXJmYWNlX2gKKyNkZWZp
bmUgR0xYU3VyZmFjZV9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEhB
VkUoR0xYKQorCisjaW5jbHVkZSAiR0xTdXJmYWNlLmgiCisKKyNpbmNsdWRlIDxYMTEvZXh0ZW5z
aW9ucy9YY29tcG9zaXRlLmg+CisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWHJlbmRlci5oPgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFNoYXJlZFgxMVJlc291cmNlcyA6IHB1YmxpYyBXVEY6OlJlZkNvdW50ZWRCYXNlIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShTaGFyZWRYMTFSZXNvdXJjZXMpOworCitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkWDExUmVzb3VyY2VzPiBjcmVhdGUoKQorICAgIHsK
KyAgICAgICAgaWYgKCFtX3N0YXRpY1NoYXJlZFJlc291cmNlKQorICAgICAgICAgICAgbV9zdGF0
aWNTaGFyZWRSZXNvdXJjZSA9IG5ldyBTaGFyZWRYMTFSZXNvdXJjZXMoKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbV9zdGF0aWNTaGFyZWRSZXNvdXJjZS0+cmVmKCk7CisKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG1fc3RhdGljU2hhcmVkUmVzb3VyY2UpOworICAgIH0KKworICAgIHZv
aWQgZGVyZWYoKQorICAgIHsKKyAgICAgICAgaWYgKGRlcmVmQmFzZSgpKSB7CisgICAgICAgICAg
ICBtX3N0YXRpY1NoYXJlZFJlc291cmNlID0gMDsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzOwor
ICAgICAgICB9CisgICAgfQorCisgICAgV2luZG93IGdldFhXaW5kb3coKQorICAgIHsKKyAgICAg
ICAgaWYgKCFtX3dpbmRvdykgeworICAgICAgICAgICAgRGlzcGxheSogZHB5ID0gZGlzcGxheSgp
OworICAgICAgICAgICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgYXR0cmlidXRlczsKKyAgICAgICAg
ICAgIGF0dHJpYnV0ZXMub3ZlcnJpZGVfcmVkaXJlY3QgPSB0cnVlOworICAgICAgICAgICAgbV93
aW5kb3cgPSBYQ3JlYXRlU2ltcGxlV2luZG93KGRweSwgWERlZmF1bHRSb290V2luZG93KGRweSks
IC0xLCAtMSwgMSwgMSwgMCwgQmxhY2tQaXhlbChkcHksIDApLCBXaGl0ZVBpeGVsKGRweSwgMCkp
OworICAgICAgICAgICAgLy8gRnJvbSBodHRwOi8vdHJvbmNoZS5jb20vZ3VpL3gveGxpYi93aW5k
b3cvYXR0cmlidXRlcy8KKyAgICAgICAgICAgIFhDaGFuZ2VXaW5kb3dBdHRyaWJ1dGVzKGRweSwg
bV93aW5kb3csIENXT3ZlcnJpZGVSZWRpcmVjdCwgJmF0dHJpYnV0ZXMpOworICAgICAgICAgICAg
WE1hcFdpbmRvdyhkcHksIG1fd2luZG93KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBt
X3dpbmRvdzsKKyAgICB9CisKKyAgICBEaXNwbGF5KiBkaXNwbGF5KCkKKyAgICB7CisgICAgICAg
IGlmICghbV9kaXNwbGF5KQorICAgICAgICAgICAgbV9kaXNwbGF5ID0gWE9wZW5EaXNwbGF5KDAp
OworCisgICAgICAgIHJldHVybiBtX2Rpc3BsYXk7CisgICAgfQorCisgICAgWFZpc3VhbEluZm8q
IHZpc3VhbEluZm8oKQorICAgIHsKKyAgICAgICAgaWYgKCFtX1Zpc3VhbEluZm8pCisgICAgICAg
ICAgICBzdXJmYWNlQ29udGV4dENvbmZpZygpOworCisgICAgICAgIHJldHVybiBtX1Zpc3VhbElu
Zm87CisgICAgfQorCisgICAgR0xYRkJDb25maWcgY3JlYXRlQ29uZmlnKGNvbnN0IGludCBhdHRy
aWJ1dGVzW10pCisgICAgeworICAgICAgICBpbnQgbnVtUmV0dXJuZWQ7CisgICAgICAgIG1fVmlz
dWFsSW5mbyA9IDA7CisgICAgICAgIEdMWEZCQ29uZmlnKiB0ZW1wID0gZ2xYQ2hvb3NlRkJDb25m
aWcoZGlzcGxheSgpLCBEZWZhdWx0U2NyZWVuKGRpc3BsYXkoKSksIGF0dHJpYnV0ZXMsICZudW1S
ZXR1cm5lZCk7CisKKyAgICAgICAgaWYgKCFudW1SZXR1cm5lZCkKKyAgICAgICAgICAgIHJldHVy
biAwOworCisgICAgICAgIEdMWEZCQ29uZmlnIHNlbGVjdGVkQ29uZmlnID0gMDsKKyAgICAgICAg
Ym9vbCBmb3VuZCA9IGZhbHNlOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUmV0
dXJuZWQ7ICsraSkgeworICAgICAgICAgICAgbV9WaXN1YWxJbmZvID0gZ2xYR2V0VmlzdWFsRnJv
bUZCQ29uZmlnKGRpc3BsYXkoKSwgdGVtcFtpXSk7CisgICAgICAgICAgICBpZiAoIW1fVmlzdWFs
SW5mbykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKG1fc3Vw
cG9ydHNYUmVuZGVyRXh0ZW5zaW9uKSB7CisgICAgICAgICAgICAgICAgWFJlbmRlclBpY3RGb3Jt
YXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFsRm9ybWF0KGRpc3BsYXkoKSwgbV9WaXN1YWxJ
bmZvLT52aXN1YWwpOworICAgICAgICAgICAgICAgIGlmIChmb3JtYXQgJiYgZm9ybWF0LT5kaXJl
Y3QuYWxwaGFNYXNrID4gMCkgeworICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvbmZpZyA9
IHRlbXBbaV07CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlm
IChtX1Zpc3VhbEluZm8tPmRlcHRoID09IDMyKSB7CisgICAgICAgICAgICAgICAgc2VsZWN0ZWRD
b25maWcgPSB0ZW1wW2ldOworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIERpZCBub3QgZmluZCBhbnkgdmlzdWFsIHN1
cHBvcnRpbmcgYWxwaGEsIHNlbGVjdCB0aGUgZmlyc3QgYXZhaWxhYmxlIGNvbmZpZy4KKyAgICAg
ICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgc2VsZWN0ZWRDb25maWcgPSB0ZW1wWzBdOwor
ICAgICAgICAgICAgbV9WaXN1YWxJbmZvID0gZ2xYR2V0VmlzdWFsRnJvbUZCQ29uZmlnKG1fZGlz
cGxheSwgdGVtcFswXSk7CisgICAgICAgIH0KKworICAgICAgICBYRnJlZSh0ZW1wKTsKKworICAg
ICAgICByZXR1cm4gc2VsZWN0ZWRDb25maWc7CisgICAgfQorCisgICAgR0xYRkJDb25maWcgcEJ1
ZmZlckNvbnRleHRDb25maWcoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3BidWZmZXJmYkNvbmZp
ZykgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGludCBhdHRyaWJ1dGVzW10gPSB7CisgICAg
ICAgICAgICAgICAgR0xYX0xFVkVMLCAwLAorICAgICAgICAgICAgICAgIEdMWF9EUkFXQUJMRV9U
WVBFLCBHTFhfUEJVRkZFUl9CSVQsCisgICAgICAgICAgICAgICAgR0xYX1JFTkRFUl9UWVBFLCAg
IEdMWF9SR0JBX0JJVCwKKyAgICAgICAgICAgICAgICBHTFhfUkVEX1NJWkUsICAgICAgMSwKKyAg
ICAgICAgICAgICAgICBHTFhfR1JFRU5fU0laRSwgICAgMSwKKyAgICAgICAgICAgICAgICBHTFhf
QkxVRV9TSVpFLCAgICAgMSwKKyAgICAgICAgICAgICAgICBHTFhfRE9VQkxFQlVGRkVSLCAgR0xf
RkFMU0UsCisgICAgICAgICAgICAgICAgTm9uZQorICAgICAgICAgICAgfTsKKworICAgICAgICAg
ICAgaW50IG51bVJldHVybmVkOworICAgICAgICAgICAgR0xYRkJDb25maWcqIHRlbXAgPSBnbFhD
aG9vc2VGQkNvbmZpZyhkaXNwbGF5KCksIERlZmF1bHRTY3JlZW4oZGlzcGxheSgpKSwgYXR0cmli
dXRlcywgJm51bVJldHVybmVkKTsKKyAgICAgICAgICAgIGlmIChudW1SZXR1cm5lZCkKKyAgICAg
ICAgICAgICAgICBtX3BidWZmZXJmYkNvbmZpZyA9IHRlbXBbMF07CisgICAgICAgICAgICBYRnJl
ZSh0ZW1wKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtX3BidWZmZXJmYkNvbmZpZzsK
KyAgICB9CisKKyAgICBHTFhGQkNvbmZpZyBzdXJmYWNlQ29udGV4dENvbmZpZygpCisgICAgewor
ICAgICAgICBpZiAoIW1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZykgeworICAgICAgICAgICAgc3Rh
dGljIGludCBhdHRyaWJ1dGVzW10gPSB7CisgICAgICAgICAgICAgICAgR0xYX0xFVkVMLCAwLAor
ICAgICAgICAgICAgICAgIEdMWF9EUkFXQUJMRV9UWVBFLCBHTFhfV0lORE9XX0JJVCwKKyAgICAg
ICAgICAgICAgICBHTFhfUkVOREVSX1RZUEUsICAgR0xYX1JHQkFfQklULAorICAgICAgICAgICAg
ICAgIEdMWF9SRURfU0laRSwgICAgICAxLAorICAgICAgICAgICAgICAgIEdMWF9HUkVFTl9TSVpF
LCAgICAxLAorICAgICAgICAgICAgICAgIEdMWF9CTFVFX1NJWkUsICAgICAxLAorICAgICAgICAg
ICAgICAgIEdMWF9BTFBIQV9TSVpFLCAgICAxLAorICAgICAgICAgICAgICAgIEdMWF9ERVBUSF9T
SVpFLCAgICAxLAorICAgICAgICAgICAgICAgIEdMWF9YX1ZJU1VBTF9UWVBFLCBHTFhfVFJVRV9D
T0xPUiwKKyAgICAgICAgICAgICAgICBHTFhfRE9VQkxFQlVGRkVSLCAgVHJ1ZSwKKyAgICAgICAg
ICAgICAgICBOb25lCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBpbnQgZXZlbnRCYXNl
cCwgZXJyb3JCYXNlcDsKKyAgICAgICAgICAgIG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uID0g
WFJlbmRlclF1ZXJ5RXh0ZW5zaW9uKGRpc3BsYXkoKSwgJmV2ZW50QmFzZXAsICZlcnJvckJhc2Vw
KTsKKworICAgICAgICAgICAgbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnID0gY3JlYXRlQ29uZmln
KGF0dHJpYnV0ZXMpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1fc3VyZmFjZUNvbnRl
eHRmYkNvbmZpZzsKKyAgICB9CisKKyAgICBib29sIGlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRl
ZCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb247Cisg
ICAgfQorCitwcml2YXRlOgorICAgIFNoYXJlZFgxMVJlc291cmNlcygpCisgICAgICAgIDogbV9z
dXBwb3J0c1hSZW5kZXJFeHRlbnNpb24oZmFsc2UpCisgICAgICAgICwgbV9tYXJrRm9yRGVsZXRp
b24oZmFsc2UpCisgICAgICAgICwgbV93aW5kb3coMCkKKyAgICAgICAgLCBtX2Rpc3BsYXkoMCkK
KyAgICAgICAgLCBtX3BidWZmZXJmYkNvbmZpZygwKQorICAgICAgICAsIG1fc3VyZmFjZUNvbnRl
eHRmYkNvbmZpZygwKQorICAgICAgICAsIG1fVmlzdWFsSW5mbygwKQorICAgIHsKKworICAgIH0K
KworICAgIH5TaGFyZWRYMTFSZXNvdXJjZXMoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2Rpc3Bs
YXkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKG1fd2luZG93KSB7CisgICAg
ICAgICAgICBYVW5tYXBXaW5kb3cobV9kaXNwbGF5LCBtX3dpbmRvdyk7CisgICAgICAgICAgICBY
RGVzdHJveVdpbmRvdyhtX2Rpc3BsYXksIG1fd2luZG93KTsKKyAgICAgICAgICAgIG1fd2luZG93
ID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3BidWZmZXJmYkNvbmZpZykKKyAgICAg
ICAgICAgIG1fcGJ1ZmZlcmZiQ29uZmlnID0gMDsKKworICAgICAgICBpZiAobV9zdXJmYWNlQ29u
dGV4dGZiQ29uZmlnKQorICAgICAgICAgICAgbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnID0gMDsK
KworICAgICAgICBpZiAobV9WaXN1YWxJbmZvKSB7CisgICAgICAgICAgICBYRnJlZShtX1Zpc3Vh
bEluZm8pOworICAgICAgICAgICAgbV9WaXN1YWxJbmZvID0gMDsKKyAgICAgICAgfQorCisgICAg
ICAgIFhDbG9zZURpc3BsYXkobV9kaXNwbGF5KTsKKyAgICAgICAgbV9kaXNwbGF5ID0gMDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgU2hhcmVkWDExUmVzb3VyY2VzKiBtX3N0YXRpY1NoYXJlZFJlc291
cmNlOworICAgIGJvb2wgbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb247CisgICAgYm9vbCBtX21h
cmtGb3JEZWxldGlvbjsKKyAgICBXaW5kb3cgbV93aW5kb3c7CisgICAgRGlzcGxheSogbV9kaXNw
bGF5OworICAgIEdMWEZCQ29uZmlnIG1fcGJ1ZmZlcmZiQ29uZmlnOworICAgIEdMWEZCQ29uZmln
IG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZzsKKyAgICBYVmlzdWFsSW5mbyogbV9WaXN1YWxJbmZv
OworfTsKKworY2xhc3MgR0xYU3VyZmFjZSA6IHB1YmxpYyBHTFN1cmZhY2UgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEdMWFN1cmZhY2UpOworCitwdWJsaWM6CisgICAgR0xYU3VyZmFjZSgp
OworICAgIHZpcnR1YWwgfkdMWFN1cmZhY2UoKTsKKworcHJvdGVjdGVkOgorICAgIFhWaXN1YWxJ
bmZvKiB2aXN1YWxJbmZvKCk7CisgICAgV2luZG93IHhXaW5kb3coKTsKKyAgICBHTFhGQkNvbmZp
ZyBwQnVmZmVyQ29uZmlnKCk7CisgICAgR0xYRkJDb25maWcgdHJhbnNwb3J0U3VyZmFjZUNvbmZp
ZygpOworICAgIGJvb2wgaXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCk7CisKK3ByaXZhdGU6
CisgICAgUmVmUHRyPFNoYXJlZFgxMVJlc291cmNlcz4gbV9zaGFyZWRSZXNvdXJjZXM7Cit9Owor
CitjbGFzcyBHTFhUcmFuc3BvcnRTdXJmYWNlIDogcHVibGljIEdMWFN1cmZhY2UgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEdMWFRyYW5zcG9ydFN1cmZhY2UpOworCitwdWJsaWM6CisgICAg
R0xYVHJhbnNwb3J0U3VyZmFjZSgpOworICAgIHZpcnR1YWwgfkdMWFRyYW5zcG9ydFN1cmZhY2Uo
KTsKKyAgICBQbGF0Zm9ybVN1cmZhY2VDb25maWcgY29uZmlndXJhdGlvbigpOworICAgIHZvaWQg
c3dhcEJ1ZmZlcnMoKTsKKyAgICB2b2lkIHNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1Jl
Y3QpOworICAgIHZvaWQgZGVzdHJveSgpOworCitwcml2YXRlOgorICAgIHZvaWQgaW5pdGlhbGl6
ZSgpOworICAgIHZvaWQgZnJlZVJlc291cmNlcygpOworfTsKKworY2xhc3MgR0xYUEJ1ZmZlciA6
IHB1YmxpYyBHTFhTdXJmYWNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHTFhQQnVmZmVy
KTsKKworcHVibGljOgorICAgIEdMWFBCdWZmZXIoKTsKKyAgICB2aXJ0dWFsIH5HTFhQQnVmZmVy
KCk7CisgICAgUGxhdGZvcm1TdXJmYWNlQ29uZmlnIGNvbmZpZ3VyYXRpb24oKTsKKyAgICB2b2lk
IGRlc3Ryb3koKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKKyAgICB2b2lk
IGZyZWVSZXNvdXJjZXMoKTsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZgo=
</data>
<flag name="commit-queue"
          id="189764"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174840</attachid>
            <date>2012-11-17 21:43:41 -0800</date>
            <delta_ts>2012-11-20 19:16:37 -0800</delta_ts>
            <desc>review changes</desc>
            <filename>reviewfixes.patch</filename>
            <type>text/plain</type>
            <size>68622</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDBjYWUzMmEuLmNkZTIzNmEgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3MiBAQAorMjAx
Mi0xMS0xNyAgS29uZGFwYWxseSBLYWx5YW4gIDxrYWx5YW4ua29uZGFwYWxseUBpbnRlbC5jb20+
CisKKyAgICAgICAgW0VGTF0gUmVmYWN0b3IgR3JhcGhpY3NDb250ZXh0M0RFRkwuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDEyOTEuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0
M0RFZmwgY3JlYXRlcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUsIHdoaWNoIGFjdHMgYXMgaXRz
IHBsYXRmb3JtIExheWVyLgorICAgICAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUgbmVlZHMg
dG8gaGFuZGxlIHRoZSBmb2xsb3dpbmcgY2FzZXM6CisgICAgICAgIDEpIFRvIHByb3ZpZGUgYW4g
b2ZmLXNjcmVlbiBidWZmZXIgZm9yIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW9uLgorICAgICAgICAy
KSBSZW5kZXIgdG8gYSBjdXJyZW50IGNvbnRleHQuCisgICAgICAgIDMpIFRvIHJlbmRlciBkaXJl
Y3RseSB0byBob3N0IHdpbmRvdy4gKGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLikKKworICAgICAg
ICBCZWZvcmUgdGhpcyBwYXRjaCBFdmFzIHdhcyB1c2VkIHRvIHByb3ZpZGUgdXMgYW4gb2ZmLXNj
cmVlbiBjb250ZXh0IGFuZCBidWZmZXIuIEdMWCB3YXMgdXNlZCBpbgorICAgICAgICB0aGUgb3Ro
ZXIgc3VwcG9ydGVkIGNhc2UuIEV2YXMgYWN0cyBhcyBhIGdsdWUgbGF5ZXIgdG8gcHJvdmlkZSB1
cyB3aXRoIGFwcHJvcHJpYXRlCisgICAgICAgIEdMIGJpbmRpbmdzIChPcGVuR0wgZnVuY3Rpb25z
KSwgR0wgY29udGV4dCBhbmQgZHJhd2FibGUgKHN1cmZhY2Uvb2Zmc2NyZWVuYnVmZmVyKS4KKyAg
ICAgICAgSG93ZXZlciwgcHJpbWl0aXZlIHJlbmRlcmluZyBpcyBoYW5kbGVkIGJ5IFRleHR1cmVN
YXBwZXIgYW5kIE9wZW5HTFNoaW1zIGlzIHVzZWQgdG8gbG9hZCB0aGUgbmVlZGVkIEdMIGZ1bmN0
aW9ucy4KKworICAgICAgICBJdCB3b3VsZCBiZSBmb3Igb3VyIGFkdmFudGFnZSB0byBiZSBhYmxl
IHRvIHRha2UgaW4gdG8gdXNlIGFueSBvcHRpbWlzYXRpb25zL2V4dGVuc2lvbnMKKyAgICAgICAg
cHJvdmlkZWQgYnkgdW5kZXJseWluZyBkcml2ZXJzLCBzcGVjaWZpYyB0byBhIHBsYXRmb3JtIChl
LmcuIEdMWF9NRVNBX2NvcHlfc3ViX2J1ZmZlciBldGMuKS4KKyAgICAgICAgVGhpcyBwYXRjaCBp
bnRyb2R1Y2VzIGFuIGFic3RyYWN0aW9uIGxheWVyIHRvIG1ha2UgaXQgZWFzeSB0byBhZGQgc3Vw
cG9ydCBmb3IgYW55IEdMIGJhY2tlbmQgKEdMWCwgRUdMIGV0Yy4pCisgICAgICAgIGFuZCBkbyBh
bnkgcGxhdGZvcm0gc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBhcyBuZWVkZWQgd2l0aG91dCBjb21w
bGljYXRpbmcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlIGNsYXNzLgorICAgICAgICBUd28gbmV3
IGNsYXNzZXMgYXJlIGFkZGVkIHdpdGggdGhpcyBpbXBsZW1lbnRhdGlvbiwgR0xQbGF0Zm9ybUNv
bnRleHQgYW5kIEdMUGxhdGZvcm1TdXJmYWNlLgorICAgICAgICBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGUgd291bGQgY3JlYXRlIGFuZCBvd24gYSBHTFBsYXRmb3JtQ29udGV4dCBhbmQgR0xQbGF0
Zm9ybVN1cmZhY2UuCisKKyAgICAgICAgR0xQbGF0Zm9ybUNvbnRleHQgZW5jYXBzdWxhdGVzIGFu
IE9wZW5HTCBjb250ZXh0IGhpZGluZyBhbnkgcGxhdGZvcm0gc3BlY2lmaWMgbWFuYWdlbWVudC4K
KyAgICAgICAgSXQgdXNlcyBHTCBleHRlbnNpb24gQVJCX3JvYnVzdG5lc3MgKHdoZW4gYXZhaWxh
YmxlKSB0byBkZXRlY3QgZHJpdmVyIHJlc2V0cy4KKyAgICAgICAgSXQgZGVmaW5lcyBhIHNpbXBs
ZSBpbnRlcmZhY2UgZm9yIHRoaW5ncyB0aGF0IG5lZWQgdG8gYmUgaGFuZGxlZCBieSB0aGUgY29u
dGV4dC4gU3VwcG9ydAorICAgICAgICBmb3IgbXVsdGktdGhyZWFkZWQgdXNhZ2UgYW5kIHNoYXJl
ZCBjb250ZXh0LWdyb3VwIHdvdWxkIGJlIGFkZGVkIGxhdGVyLgorCisgICAgICAgIEdMUGxhdGZv
cm1TdXJmYWNlIGVuY2Fwc3VsYXRlcyBhbiBPcGVuR0wgZHJhd2FibGUgaGlkaW5nIGFueSBwbGF0
Zm9ybSBzcGVjaWZpYyBtYW5hZ2VtZW50LgorICAgICAgICBJdCBkZWZpbmVzIGEgc2ltcGxlIGlu
dGVyZmFjZSBmb3IgdGhpbmdzIHRoYXQgbmVlZCB0byBiZSBoYW5kbGVkIGJ5IHRoZSBzdXJmYWNl
LgorICAgICAgICBJdCBjcmVhdGVzIGFuIG9mZi1zY3JlZW4gcmVuZGVyaW5nIGFyZWEuIEFueSBH
TFBsYXRmb3JtQ29udGV4dCAoY29tcGF0aWJsZSB3aXRoIHRoZSBzdXJmYWNlKQorICAgICAgICBj
YW4gYmUgdXNlZCB0byByZW5kZXIgaW50byB0aGlzIG9mZi1zY3JlZW4gYXJlYS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGFsc28gYWRkcyBHTFggaW1wbGVtZW50YXRpb24uIFRvIGtlZXAgdGhlIHBh
dGNoIHRvIG1pbmltdW0gRUdMIHN1cHBvcnQgd291bGQgYmUgYWRkZWQgaW4gYW5vdGhlciBjaGFu
Z2VzZXQuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpzZXRDb250ZXh0TG9zdENhbGxiYWNrKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlKToKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZSk6CisgICAgICAgIChHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnJlbGVhc2VS
ZXNvdXJjZXMpOgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzZXRDb250ZXh0
TG9zdENhbGxiYWNrKToKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAgIChHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmNyZWF0ZUdyYXBoaWNzU3VyZmFjZXMpOgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpjb3B5VG9HcmFwaGljc1N1cmZhY2UpOgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpncmFwaGljc1N1cmZhY2VUb2tlbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oOgorICAgICAgICAoR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xEZWZz
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1Db250ZXh0OjpjcmVhdGVDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1Db250ZXh0OjpjcmVhdGVPZmZTY3JlZW5Db250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1Db250ZXh0OjpjcmVhdGVDdXJyZW50
Q29udGV4dFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybUNvbnRleHQ6OkdM
UGxhdGZvcm1Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1Db250ZXh0Ojp+
R0xQbGF0Zm9ybUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybUNvbnRleHQ6
Om1ha2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1Db250ZXh0Ojppc1Zh
bGlkKToKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1Db250ZXh0OjpyZWxlYXNlQ3VycmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpHTFBsYXRmb3JtQ29udGV4dDo6aGFuZGxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1Db250ZXh0Ojppc0N1cnJlbnRDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1Db250ZXh0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkdMUGxhdGZvcm1Db250ZXh0OjpnZXRDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkdMUGxhdGZvcm1Db250ZXh0OjpwbGF0Zm9ybU1ha2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkdMUGxhdGZvcm1Db250ZXh0OjpwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdMUGxhdGZvcm1Db250ZXh0OjpkZXN0cm95KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKEdMUGxhdGZvcm1Db250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybVN1cmZhY2U6OmNyZWF0ZU9m
ZnNjcmVlblN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybVN1cmZhY2U6OmNy
ZWF0ZVRyYW5zcG9ydFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybVN1cmZh
Y2U6OkdMUGxhdGZvcm1TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1TdXJm
YWNlOjp+R0xQbGF0Zm9ybVN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybVN1
cmZhY2U6OmhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFBsYXRmb3JtU3VyZmFjZTo6Z2Vv
bWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybVN1cmZhY2U6OnNoYXJlZERpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybVN1cmZhY2U6OmNvbmZpZ3VyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybVN1cmZhY2U6OnN3YXBCdWZmZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1TdXJmYWNlOjpjb3B5VGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHTFBsYXRmb3JtU3VyZmFjZTo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6R0xQbGF0Zm9ybVN1cmZhY2U6OnNldEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNv
cmU6OkdMUGxhdGZvcm1TdXJmYWNlOjpkZXN0cm95KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKEdMUGxhdGZvcm1TdXJmYWNlKToKKyAgICAgICAgICAgIEdMWE9mZlNjcmVl
bkNvbnRleHQgY3JlYXRlcyBhbiBvZmYtc2NyZWVuIGNvbnRleHQuIFRoaXMgaXMgdXNlZCB3aGVu
CisgICAgICAgICAgICByZW5kZXJzdHlsZSBpcyBSZW5kZXJPZmZzY3JlZW4uCisgICAgICAgICAg
ICBJdCB1c2VzIEdMIGV4dGVuc2lvbiBHTFhfQVJCX2NyZWF0ZV9jb250ZXh0ICh3aGVuIGF2YWls
YWJsZSkKKyAgICAgICAgICAgIHRvIGNyZWF0ZSBhIGNvbnRleHQgZWxzZSBmYWxscyBiYWNrIHRv
IHVzZSBnbFhDcmVhdGVOZXdDb250ZXh0LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2dseC9HTFhDb250ZXh0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVBUkJFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OkdMWE9mZlNjcmVlbkNvbnRleHQ6OkdMWE9mZlNjcmVlbkNvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6R0xYT2ZmU2NyZWVuQ29udGV4dDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHTFhPZmZTY3JlZW5Db250ZXh0Ojp+R0xYT2ZmU2NyZWVuQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpHTFhPZmZTY3JlZW5Db250ZXh0Ojppc0N1cnJlbnRDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdMWE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRmb3JtTWFrZUN1cnJlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R0xYT2ZmU2NyZWVuQ29udGV4dDo6cGxhdGZvcm1SZWxlYXNlQ3Vy
cmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHTFhPZmZTY3JlZW5Db250ZXh0OjpmcmVlUmVzb3Vy
Y2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWE9mZlNjcmVlbkNvbnRleHQ6OmRlc3Ryb3kpOgor
ICAgICAgICAgICAgR0xYQ3VycmVudENvbnRleHRXcmFwcGVyIGFjdHMgYXMgYSB3cmFwcGVyIGZv
ciBjdXJyZW50IGNvbnRleHQuCisgICAgICAgICAgICBUaGlzIGlzIHVzZWQgd2hlbiByZW5kZXJz
dHlsZSBpcyBSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKEdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHTFhDdXJyZW50Q29udGV4dFdyYXBwZXI6OkdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHTFhDdXJyZW50Q29udGV4dFdyYXBwZXI6On5HTFhDdXJyZW50Q29u
dGV4dFdyYXBwZXIpOgorICAgICAgICAoR0xYT2ZmU2NyZWVuQ29udGV4dCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R0xYU3VyZmFjZTo6R0xYU3VyZmFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFhTdXJmYWNlOjp+R0xYU3VyZmFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHTFhTdXJmYWNlOjp2aXN1YWxJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkdM
WFN1cmZhY2U6OnhXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0xYU3VyZmFjZTo6cEJ1ZmZl
ckNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R0xYU3VyZmFjZTo6dHJhbnNwb3J0
U3VyZmFjZUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R0xYU3VyZmFjZTo6aXNY
UmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKToKKyAgICAgICAgICAgIEdMWFRyYW5zcG9ydFN1cmZh
Y2UgY3JlYXRlcyBXaW5kb3cgYW5kIHVzZXMgaXQgYXMgYW4gb2ZmLXNjcmVlbiBzdXJmYWNlLgor
ICAgICAgICAgICAgQW55IEdMQ29udGV4dCB0aGF0IHdhcyBjcmVhdGVkIHdpdGggcmVzcGVjdCB0
byBjb25maWd1cmF0aW9uIGNhbiBiZSB1c2VkCisgICAgICAgICAgICB0byByZW5kZXIgaW50byB0
aGlzLgorICAgICAgICAgICAgVGhpcyBpcyB1c2VkIHdoZW4gY29udGVudHMgb2YgdGhlIGJ1ZmZl
ciBhcmUgdG8gYmUgcHJvdmlkZWQgdG8gVUkgUHJvY2VzcworICAgICAgICAgICAgZm9yIGRpc3Bs
YXkuCisgICAgICAgIChXZWJDb3JlOjpHTFhUcmFuc3BvcnRTdXJmYWNlOjpHTFhUcmFuc3BvcnRT
dXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6On5HTFhUcmFu
c3BvcnRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OmNv
bmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6c3dh
cEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6c2V0R2Vv
bWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6aW5pdGlhbGl6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFhUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OmZyZWVSZXNvdXJjZXMpOgorICAg
ICAgICAgICBHTFhQQnVmZmVyLCBDcmVhdGVzIGEgR0wgc3VyZmFjZSAoUEJ1ZmZlcikgdXNlZCBm
b3Igb2Zmc2NyZWVuIHJlbmRlcmluZy4KKyAgICAgICAgICAgQW55IEdMQ29udGV4dCB0aGF0IHdh
cyBjcmVhdGVkIHdpdGggcmVzcGVjdCB0byBjb25maWd1cmF0aW9uIGNhbiBiZSB1c2VkCisgICAg
ICAgICAgIHRvIHJlbmRlciBpbnRvIHRoaXMuCisgICAgICAgIChXZWJDb3JlOjpHTFhQQnVmZmVy
OjpHTFhQQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFBCdWZmZXI6On5HTFhQQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFBCdWZmZXI6OmluaXRpYWxpemUpOgorICAgICAgICAo
V2ViQ29yZTo6R0xYUEJ1ZmZlcjo6Y29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
TFhQQnVmZmVyOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFBCdWZmZXI6OmZyZWVS
ZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhT
dXJmYWNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICAgICBDcmVhdGVz
IFggcmVzb3VyY2VzIHdoaWNoIGFyZSBzaGFyZWQgYmV0d2VlbiBzdXJmYWNlIGFuZCBjb250ZXh0
LgorICAgICAgICAoU2hhcmVkWDExUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJl
ZFgxMVJlc291cmNlczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJlc291
cmNlczo6ZGVyZWYpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkWDExUmVzb3VyY2VzOjpnZXRY
V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJlc291cmNlczo6ZGlzcGxheSk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRYMTFSZXNvdXJjZXM6OnZpc3VhbEluZm8pOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkWDExUmVzb3VyY2VzOjpjcmVhdGVDb25maWcpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkWDExUmVzb3VyY2VzOjpwQnVmZmVyQ29udGV4dENvbmZpZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRYMTFSZXNvdXJjZXM6OnN1cmZhY2VDb250ZXh0Q29uZmln
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJlc291cmNlczo6aXNYUmVuZGVyRXh0ZW5z
aW9uU3VwcG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJlc291cmNlczo6U2hh
cmVkWDExUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJlc291cmNlczo6
flNoYXJlZFgxMVJlc291cmNlcyk6CisgICAgICAgIChHTFhTdXJmYWNlKToKKyAgICAgICAgKEdM
WFRyYW5zcG9ydFN1cmZhY2UpOgorICAgICAgICAoR0xYUEJ1ZmZlcik6CisKIDIwMTItMTEtMTcg
IFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmVkdWNl
IHRoZSBjcmF6eSBudW1iZXIgb2YgcGFyYW1ldGVycyB0byBSZW5kZXJMYXllciBjbGlwLXJlY3Qg
ZnVuY3Rpb25zCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggNTgyYWYwNS4uMmNkNjY5OSAxMDA2
NDQKLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBTb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMjc3LDYgKzI3Nyw3IEBAIElGIChXVEZfVVNFXzNEX0dS
QVBISUNTKQogICBMSVNUKEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAi
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsIgogICAgICIke1dFQkNPUkVf
RElSfS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcyIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAiCiAgICkKICAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCkBA
IC0yODYsOSArMjg3LDEzIEBAIElGIChXVEZfVVNFXzNEX0dSQVBISUNTKQogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L0dMWENvbnRleHQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvcXQv
R3JhcGhpY3NTdXJmYWNlR0xYLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyR0wuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyLmNwcApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcAppbmRleCBkMTM5MTMwLi4y
ZTJhNDkzIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dy
YXBoaWNzQ29udGV4dDNERWZsLmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgICAg
Q29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAgICBDb3B5cmlnaHQgKEMp
IDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI3LDcgKzI4
LDYgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIk9wZW5HTFNoaW1z
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlIDxHTC9nbHgu
aD4KIAogI2lmIFVTRShPUEVOR0xfRVNfMikKICNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xF
Uy5oIgpAQCAtMzksNiArMzksOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250
ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIFJlbmRlclN0
eWxlIHJlbmRlclN0eWxlKQogeworICAgIGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJEaXJlY3Rs
eVRvSG9zdFdpbmRvdykKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMs
IGhvc3RXaW5kb3csIHJlbmRlclN0eWxlKSk7CiAgICAgcmV0dXJuIGNvbnRleHQtPm1fcHJpdmF0
ZSA/IGNvbnRleHQucmVsZWFzZSgpIDogMDsKIH0KQEAgLTY3LDI5ICs3MCwxMiBAQCBHcmFwaGlj
c0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMgYXR0cnMsIEhvc3RXaQogICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCiAgICAg
LCBtX3ByaXZhdGUoYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSh0aGlzLCBo
b3N0V2luZG93LCByZW5kZXJTdHlsZSkpKQogewotICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwot
Ci0gICAgaWYgKCFtX3ByaXZhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0YXRpYyBib29s
IGluaXRpYWxpemVkU2hpbXMgPSBmYWxzZTsKLSAgICBzdGF0aWMgYm9vbCBzdWNjZXNzID0gdHJ1
ZTsKLSAgICBpZiAoIWluaXRpYWxpemVkU2hpbXMpIHsKLSAgICAgICAgc3VjY2VzcyA9IGluaXRp
YWxpemVPcGVuR0xTaGltcygpOwotICAgICAgICBpbml0aWFsaXplZFNoaW1zID0gdHJ1ZTsKLSAg
ICB9Ci0gICAgaWYgKCFzdWNjZXNzKSB7CisgICAgaWYgKCFtX3ByaXZhdGUgfHwgIW1fcHJpdmF0
ZS0+bV9wbGF0Zm9ybUNvbnRleHQpIHsKICAgICAgICAgbV9wcml2YXRlID0gbnVsbHB0cjsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJUb0N1
cnJlbnRHTENvbnRleHQpIHsKLSAgICAgICAgLy8gRXZhcyBkb2Vzbid0IGFsbG93IGluY2x1ZGlu
ZyBnbCBoZWFkZXJzIGFuZCBFdmFzX0dMIGhlYWRlcnMgYXQgdGhlIHNhbWUgdGltZSwKLSAgICAg
ICAgLy8gc28gd2UgbmVlZCB0byBxdWVyeSB0aGUgY3VycmVudCBnbCBjb250ZXh0L3N1cmZhY2Ug
aGVyZSBpbnN0ZWFkIG9mIGluIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS4KLSAgICAgICAgdm9p
ZCogY3VycmVudENvbnRleHQgPSAodm9pZCopZ2xYR2V0Q3VycmVudENvbnRleHQoKTsKLSAgICAg
ICAgdm9pZCogY3VycmVudFN1cmZhY2UgPSAodm9pZCopZ2xYR2V0Q3VycmVudERyYXdhYmxlKCk7
Ci0gICAgICAgIG1fcHJpdmF0ZS0+c2V0Q3VycmVudEdMQ29udGV4dChjdXJyZW50Q29udGV4dCwg
Y3VycmVudFN1cmZhY2UpOwotICAgIH0KKyAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKIAogICAg
IGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJPZmZzY3JlZW4pIHsKICAgICAgICAgLy8gQ3JlYXRl
IGJ1ZmZlcnMgZm9yIHRoZSBjYW52YXMgRkJPLgpAQCAtMTQ3LDE0ICsxMzMsMTkgQEAgR3JhcGhp
Y3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIGF0dHJzLCBIb3N0V2kKICAgICBnbEVuYWJsZShHTF9QT0lOVF9TUFJJVEUpOwogICAgIGds
RW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUpOwogI2VuZGlmCisgICAgZ2xDbGVh
ckNvbG9yKDAuMCwgMC4wLCAwLjAsIDAuMCk7CiB9CiAKIEdyYXBoaWNzQ29udGV4dDNEOjp+R3Jh
cGhpY3NDb250ZXh0M0QoKQogewotICAgIGlmIChtX3JlbmRlclN0eWxlID09IFJlbmRlclRvQ3Vy
cmVudEdMQ29udGV4dCB8fCAhbV9wcml2YXRlKQorICAgIGlmICghbV9wcml2YXRlIHx8ICFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtX2ZibykgeworICAgICAgICBtX3ByaXZhdGUtPnJlbGVhc2VSZXNv
dXJjZXMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGdsRGVsZXRlVGV4dHVyZXMo
MSwgJm1fdGV4dHVyZSk7CiAKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKQEAgLTE2NSw3
ICsxNTYsNiBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKIAogICAg
ICAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CiAgICAgfSBl
bHNlIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkgewotCiAjaWYgVVNFKE9Q
RU5HTF9FU18yKQogICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkKICAgICAgICAgICAgIGdsRGVs
ZXRlUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aEJ1ZmZlcik7CkBAIC0xNzUsNyArMTY1LDkgQEAg
R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiAjZW5kaWYKICAgICAgICAg
Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CiAgICAgfQor
CiAgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKKyAgICBtX3ByaXZhdGUtPnJl
bGVhc2VSZXNvdXJjZXMoKTsKIH0KIAogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGlj
c0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpCkBAIC0xOTcsMTIgKzE4OSw2
IEBAIFBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKCkgY29u
c3QKIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKLSAg
ICBpZiAoIW1fcHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fcmVu
ZGVyU3R5bGUgPT0gUmVuZGVyVG9DdXJyZW50R0xDb250ZXh0KQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQogICAgIHJldHVybiBtX3ByaXZhdGUtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogfQogCkBA
IC0yMTUsOSArMjAxLDkgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMkNvbXBsaWFu
dCgpIGNvbnN0CiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29udGV4
dExvc3RDYWxsYmFjayhQYXNzT3duUHRyPENvbnRleHRMb3N0Q2FsbGJhY2s+KSAKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2FsbGJhY2soUGFzc093blB0cjxDb250ZXh0
TG9zdENhbGxiYWNrPiBjYWxsQmFjaykKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1f
cHJpdmF0ZS0+c2V0Q29udGV4dExvc3RDYWxsYmFjayhjYWxsQmFjayk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnNldEVycm9yTWVzc2FnZUNhbGxiYWNrKFBhc3NPd25QdHI8RXJyb3JN
ZXNzYWdlQ2FsbGJhY2s+KSAKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAppbmRleCA2MmQw
YTZlLi4xMjhkY2JiIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCkBAIC0xLDUgKzEs
NiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICAg
IENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMTgsMTYwICsxOSwxMDYgQEAKICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKIAogI2lmIFVTRSgzRF9HUkFQSElDUykg
fHwgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZS5oIgogCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
SG9zdFdpbmRvdy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlIDxFY29yZV9FdmFzLmg+Ci0jaW5jbHVkZSA8
RXZhc19HTC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworI2lmIFVTRShPUEVOR0xfRVNfMikKKyNpbmNsdWRlIDxHTEVTMi9n
bDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKyNlbHNlCisjaW5jbHVkZSAiT3BlbkdM
U2hpbXMuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVy
U3R5bGUgcmVuZGVyU3R5bGUpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1faG9z
dFdpbmRvdyhob3N0V2luZG93KQotICAgICwgbV9ldmFzR0woMCkKLSAgICAsIG1fZXZhc0dMQ29u
dGV4dCgwKQotICAgICwgbV9ldmFzR0xTdXJmYWNlKDApCi0gICAgLCBtX2dsQ29udGV4dCgwKQot
ICAgICwgbV9nbFN1cmZhY2UoMCkKLSAgICAsIG1fYXBpKDApCi0gICAgLCBtX3JlbmRlclN0eWxl
KHJlbmRlclN0eWxlKQorICAgICwgbV9wZW5kaW5nU3VyZmFjZVJlc2l6ZShmYWxzZSkKIHsKLSAg
ICBpZiAocmVuZGVyU3R5bGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclRvQ3VycmVudEdM
Q29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKG1faG9zdFdpbmRvdyAmJiBtX2hv
c3RXaW5kb3ctPnBsYXRmb3JtUGFnZUNsaWVudCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcyBjb2RlIHBhdGggZm9yIFdlYktpdDEuCiAgICAgICAgIC8vIEdldCBFdmFzIG9i
amVjdCBmcm9tIHBsYXRmb3JtUGFnZUNsaWVudCBhbmQgc2V0IEV2YXNHTCByZWxhdGVkIG1lbWJl
cnMuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBGb3IgV2ViS2l0Miwgd2UgbmVl
ZCB0byBjcmVhdGUgYSBkdW1teSBlY29yZUV2YXMgb2JqZWN0IGZvciB0aGUgV2ViUHJvY2VzcyBp
biBvcmRlciB0byB1c2UgRXZhc0dMIEFQSXMuCi0jaWZkZWYgSEFWRV9FQ09SRV9YCi0gICAgZWNv
cmVfZXZhc19pbml0KCk7Ci0gICAgbV9lY29yZUV2YXMgPSBhZG9wdFB0cihlY29yZV9ldmFzX2ds
X3gxMV9uZXcoMCwgMCwgMCwgMCwgMSwgMSkpOwotICAgIGlmICghbV9lY29yZUV2YXMpCisgICAg
bV9wbGF0Zm9ybUNvbnRleHQgPSBHTFBsYXRmb3JtQ29udGV4dDo6Y3JlYXRlQ29udGV4dChyZW5k
ZXJTdHlsZSk7CisgICAgaWYgICghbV9wbGF0Zm9ybUNvbnRleHQpCiAgICAgICAgIHJldHVybjsK
KworICAgIGlmIChyZW5kZXJTdHlsZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyT2Zmc2Ny
ZWVuKSB7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgICAgIG1fcGxhdGZvcm1TdXJm
YWNlID0gR0xQbGF0Zm9ybVN1cmZhY2U6OmNyZWF0ZVRyYW5zcG9ydFN1cmZhY2UoKTsKICNlbHNl
Ci0gICAgcmV0dXJuOworICAgICAgICBtX3BsYXRmb3JtU3VyZmFjZSA9IEdMUGxhdGZvcm1TdXJm
YWNlOjpjcmVhdGVPZmZzY3JlZW5TdXJmYWNlKCk7CiAjZW5kaWYKLQotICAgIEV2YXMqIGV2YXMg
PSBlY29yZV9ldmFzX2dldChtX2Vjb3JlRXZhcy5nZXQoKSk7Ci0gICAgaWYgKCFldmFzKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBDcmVhdGUgYSBuZXcgRXZhc19HTCBvYmplY3QgZm9yIGds
IHJlbmRlcmluZyBvbiBlZmwuCi0gICAgbV9ldmFzR0wgPSBldmFzX2dsX25ldyhldmFzKTsKLSAg
ICBpZiAoIW1fZXZhc0dMKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBHZXQgdGhlIEFQSSBm
b3IgcmVuZGVyaW5nIHVzaW5nIE9wZW5HTC4KLSAgICAvLyBUaGlzIHJldHVybnMgYSBzdHJ1Y3R1
cmUgdGhhdCBjb250YWlucyBhbGwgdGhlIE9wZW5HTCBmdW5jdGlvbnMgd2UgY2FuIHVzZSB0byBy
ZW5kZXIgaW4gRXZhcwotICAgIG1fYXBpID0gZXZhc19nbF9hcGlfZ2V0KG1fZXZhc0dMKTsKLSAg
ICBpZiAoIW1fYXBpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDcmVhdGUgYSBjb250ZXh0
Ci0gICAgbV9ldmFzR0xDb250ZXh0ID0gZXZhc19nbF9jb250ZXh0X2NyZWF0ZShtX2V2YXNHTCwg
MCk7Ci0gICAgaWYgKCFtX2V2YXNHTENvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IENyZWF0ZSBhIHN1cmZhY2UKLSAgICBpZiAoIWNyZWF0ZVN1cmZhY2UoMCwgcmVuZGVyU3R5bGUg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KKyAgICAgICAgaWYgKCFt
X3BsYXRmb3JtU3VyZmFjZSkgeworICAgICAgICAgICAgbV9wbGF0Zm9ybUNvbnRleHQgPSBudWxs
cHRyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX3Bs
YXRmb3JtQ29udGV4dC0+aW5pdGlhbGl6ZShtX3BsYXRmb3JtU3VyZmFjZS5nZXQoKSkgfHwgIW1f
cGxhdGZvcm1Db250ZXh0LT5tYWtlQ3VycmVudChtX3BsYXRmb3JtU3VyZmFjZS5nZXQoKSkpIHsK
KyAgICAgICAgICAgIHJlbGVhc2VSZXNvdXJjZXMoKTsKKyAgICAgICAgICAgIG1fcGxhdGZvcm1D
b250ZXh0ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIG1fcGxhdGZvcm1TdXJmYWNlID0gbnVsbHB0
cjsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBJbnRTaXplIHN1cmZhY2VTaXplKG1f
Y29udGV4dC0+bV9jdXJyZW50V2lkdGgsIG1fY29udGV4dC0+bV9jdXJyZW50SGVpZ2h0KTsKLSAg
ICBtX3N1cmZhY2VGbGFncyA9IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNUZXh0dXJlVGFyZ2V0
IHwgR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1NoYXJpbmc7Ci0gICAgaWYgKCFzdXJmYWNlU2l6
ZS5pc0VtcHR5KCkpCi0gICAgICAgIG1fZ3JhcGhpY3NTdXJmYWNlID0gR3JhcGhpY3NTdXJmYWNl
OjpjcmVhdGUoc3VyZmFjZVNpemUsIG1fc3VyZmFjZUZsYWdzKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBtX3N1cmZhY2VIYW5kbGUgPSBHcmFwaGljc1N1cmZhY2VUb2tlbihtX3BsYXRm
b3JtU3VyZmFjZS0+aGFuZGxlKCkpOworI2Vsc2UKKyAgICAgICAgfQogI2VuZGlmCisgICAgfQog
fQogCiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6On5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUo
KQogewotICAgIGlmICghbV9ldmFzR0wpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2V2
YXNHTFN1cmZhY2UpCi0gICAgICAgIGV2YXNfZ2xfc3VyZmFjZV9kZXN0cm95KG1fZXZhc0dMLCBt
X2V2YXNHTFN1cmZhY2UpOworfQogCi0gICAgaWYgKG1fZXZhc0dMQ29udGV4dCkKLSAgICAgICAg
ZXZhc19nbF9jb250ZXh0X2Rlc3Ryb3kobV9ldmFzR0wsIG1fZXZhc0dMQ29udGV4dCk7Cit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cmVsZWFzZVJlc291cmNlcygpCit7CisgICAgLy8g
UmVsZWFzZSB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBkcmF3YWJsZSBvbmx5IGFmdGVyIGRlc3Ry
b3lpbmcgYW55IGFzc29jaWF0ZWQgZ2wgcmVzb3VyY2VzLgorICAgIGlmIChtX3BsYXRmb3JtQ29u
dGV4dCkKKyAgICAgICAgbV9wbGF0Zm9ybUNvbnRleHQtPmRlc3Ryb3koKTsKIAotICAgIGV2YXNf
Z2xfZnJlZShtX2V2YXNHTCk7CisgICAgaWYgKG1fcGxhdGZvcm1TdXJmYWNlKQorICAgICAgICBt
X3BsYXRmb3JtU3VyZmFjZS0+ZGVzdHJveSgpOwogCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
Ci0gICAgbV9ncmFwaGljc1N1cmZhY2UuY2xlYXIoKTsKLSNlbmRpZgorICAgIGlmIChtX3BsYXRm
b3JtQ29udGV4dCkKKyAgICAgICAgbV9wbGF0Zm9ybUNvbnRleHQtPnJlbGVhc2VDdXJyZW50KCk7
CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVTdXJmYWNlKFBhZ2VD
bGllbnRFZmwqIHBhZ2VDbGllbnQsIGJvb2wgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCiti
b29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlU3VyZmFjZShQYWdlQ2xpZW50RWZs
KiwgYm9vbCkKIHsKLSAgICAvLyBJZiBSZW5kZXJTdHlsZSBpcyBSZW5kZXJPZmZzY3JlZW4sIHdl
IHdpbGwgYmUgcmVuZGVyaW5nIHRvIGEgRkJPLAotICAgIC8vIHNvIEV2YXNfR0xfU3VyZmFjZSBo
YXMgYSAxeDEgZHVtbXkgc3VyZmFjZS4KLSAgICBpbnQgd2lkdGggPSAxOwotICAgIGludCBoZWln
aHQgPSAxOwotCi0gICAgLy8gQnV0LCBpbiBjYXNlIG9mIFJlbmRlckRpcmVjdGx5VG9Ib3N0V2lu
ZG93LCB3ZSBoYXZlIHRvIHJlbmRlciB0byBhIHJlbmRlciB0YXJnZXQgc3VyZmFjZSB3aXRoIHRo
ZSBzYW1lIHNpemUgYXMgb3VyIHdlYlZpZXcuCi0gICAgaWYgKHJlbmRlckRpcmVjdGx5VG9Ib3N0
V2luZG93KSB7Ci0gICAgICAgIGlmICghcGFnZUNsaWVudCkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgLy8gRklYTUU6IEdldCBnZW9tZXRyeSBvZiB3ZWJWaWV3IGFuZCBzZXQg
c2l6ZSBvZiB0YXJnZXQgc3VyZmFjZS4KLSAgICB9Ci0KLSAgICBFdmFzX0dMX0NvbmZpZyBjb25m
aWcgPSB7Ci0gICAgICAgIEVWQVNfR0xfUkdCQV84ODg4LAotICAgICAgICBFVkFTX0dMX0RFUFRI
X0JJVF84LAotICAgICAgICBFVkFTX0dMX1NURU5DSUxfTk9ORSwgLy8gRklYTUU6IHNldCBFVkFT
X0dMX1NURU5DSUxfQklUXzggYWZ0ZXIgZml4aW5nIEV2YXNfR0wgYnVnLgotICAgICAgICBFVkFT
X0dMX09QVElPTlNfTk9ORSwKLSAgICAgICAgRVZBU19HTF9NVUxUSVNBTVBMRV9OT05FCi0gICAg
fTsKLQotICAgIC8vIENyZWF0ZSBhIG5ldyBFdmFzX0dMX1N1cmZhY2Ugb2JqZWN0Ci0gICAgbV9l
dmFzR0xTdXJmYWNlID0gZXZhc19nbF9zdXJmYWNlX2NyZWF0ZShtX2V2YXNHTCwgJmNvbmZpZywg
d2lkdGgsIGhlaWdodCk7Ci0gICAgaWYgKCFtX2V2YXNHTFN1cmZhY2UpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAocmVu
ZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpIHsKLSAgICAgICAgRXZhc19OYXRpdmVfU3VyZmFjZSBu
YXRpdmVTdXJmYWNlOwotICAgICAgICAvLyBGaWxsIGluIHRoZSBOYXRpdmUgU3VyZmFjZSBpbmZv
cm1hdGlvbiBmcm9tIHRoZSBnaXZlbiBFdmFzIEdMIHN1cmZhY2UuCi0gICAgICAgIGV2YXNfZ2xf
bmF0aXZlX3N1cmZhY2VfZ2V0KG1fZXZhc0dMLCBtX2V2YXNHTFN1cmZhY2UsICZuYXRpdmVTdXJm
YWNlKTsKLQotICAgICAgICAvLyBGSVhNRTogQ3JlYXRlIGFuZCBzcGVjaWFsbHkgc2V0IHVwIGEg
ZXZhc19vYmplY3Qgd2hpY2ggYWN0IGFzIHRoZSByZW5kZXIgdGFyZ2VyIHN1cmZhY2UuCi0gICAg
fQotI2VuZGlmCi0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnNldEN1
cnJlbnRHTENvbnRleHQodm9pZCogY29udGV4dCwgdm9pZCogc3VyZmFjZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpzZXRDb250ZXh0TG9zdENhbGxiYWNrKFBhc3NPd25QdHI8R3Jh
cGhpY3NDb250ZXh0M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2s+IGNhbGxCYWNrKQogewotICAgIG1f
Z2xDb250ZXh0ID0gY29udGV4dDsKLSAgICBtX2dsU3VyZmFjZSA9IHN1cmZhY2U7CisgICAgbV9j
b250ZXh0TG9zdENhbGxiYWNrID0gY2FsbEJhY2s7CiB9CiAKIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0M0QgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNE
KCkgY29uc3QKIHsKLSAgICBpZiAobV9yZW5kZXJTdHlsZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
UmVuZGVyVG9DdXJyZW50R0xDb250ZXh0KQotICAgICAgICByZXR1cm4gbV9nbENvbnRleHQ7Ci0K
LSAgICByZXR1cm4gbV9ldmFzR0xDb250ZXh0OworICAgIHJldHVybiBtX3BsYXRmb3JtQ29udGV4
dC0+aGFuZGxlKCk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYWtlQ29u
dGV4dEN1cnJlbnQoKQogewotICAgIHJldHVybiBldmFzX2dsX21ha2VfY3VycmVudChtX2V2YXNH
TCwgbV9ldmFzR0xTdXJmYWNlLCBtX2V2YXNHTENvbnRleHQpOworICAgIGJvb2wgcmV0dXJuVmFs
dWUgPSBtX3BsYXRmb3JtQ29udGV4dC0+bWFrZUN1cnJlbnQobV9wbGF0Zm9ybVN1cmZhY2UuZ2V0
KCkpOworCisgICAgaWYgKG1fY29udGV4dExvc3RDYWxsYmFjayAmJiAhbV9wbGF0Zm9ybUNvbnRl
eHQtPmlzVmFsaWQoKSkgeworICAgICAgICByZXR1cm5WYWx1ZSA9IGZhbHNlOworICAgICAgICBt
X2NvbnRleHRMb3N0Q2FsbGJhY2stPm9uQ29udGV4dExvc3QoKTsKKyAgICAgICAgLy8gRklYTUU6
IFJlc3RvcmUgY29udGV4dAorICAgIH0KKworICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAog
I2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKQEAgLTE4MiwyNyArMTI5LDM2IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVy
KiwgY29uc3QgRmxvYXRSCiAjZW5kaWYKIAogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzU3VyZmFjZXMoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFw
aGljc1N1cmZhY2VzKGNvbnN0IEludFNpemUmKQogewotICAgIGlmIChzaXplLmlzRW1wdHkoKSkK
LSAgICAgICAgbV9ncmFwaGljc1N1cmZhY2UuY2xlYXIoKTsKLSAgICBlbHNlCi0gICAgICAgIG1f
Z3JhcGhpY3NTdXJmYWNlID0gR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoc2l6ZSwgbV9zdXJmYWNl
RmxhZ3MpOworICAgIG1fcGVuZGluZ1N1cmZhY2VSZXNpemUgPSB0cnVlOwogfQogCiB1aW50MzJf
dCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpCiB7Ci0g
ICAgaWYgKCFtX2dyYXBoaWNzU3VyZmFjZSkKKyAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0IHx8
ICFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBtX2dyYXBoaWNzU3VyZmFjZS0+Y29weUZyb21UZXh0dXJlKG1f
Y29udGV4dC0+bV90ZXh0dXJlLCBJbnRSZWN0KDAsIDAsIG1fY29udGV4dC0+bV9jdXJyZW50V2lk
dGgsIG1fY29udGV4dC0+bV9jdXJyZW50SGVpZ2h0KSk7Ci0gICAgcmV0dXJuIG1fZ3JhcGhpY3NT
dXJmYWNlLT5zd2FwQnVmZmVycygpOworICAgIGlmIChtX3BlbmRpbmdTdXJmYWNlUmVzaXplKSB7
CisgICAgICAgIG1fcGVuZGluZ1N1cmZhY2VSZXNpemUgPSBmYWxzZTsKKyAgICAgICAgbV9wbGF0
Zm9ybVN1cmZhY2UtPnNldEdlb21ldHJ5KEludFJlY3QoMCwgMCwgbV9jb250ZXh0LT5tX2N1cnJl
bnRXaWR0aCwgbV9jb250ZXh0LT5tX2N1cnJlbnRIZWlnaHQpKTsKKyAgICB9CisKKyAgICBpZiAo
bV9jb250ZXh0LT5tX2F0dHJzLmFudGlhbGlhcykgeworI2lmICFVU0UoT1BFTkdMX0VTXzIpCisg
ICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX1JFQURfRlJBTUVCVUZGRVJfRVhULCBtX2NvbnRl
eHQtPm1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9EUkFX
X0ZSQU1FQlVGRkVSX0VYVCwgbV9jb250ZXh0LT5tX2Zibyk7CisgICAgICAgIGdsQmxpdEZyYW1l
YnVmZmVyKDAsIDAsIG1fY29udGV4dC0+bV9jdXJyZW50V2lkdGgsIG1fY29udGV4dC0+bV9jdXJy
ZW50SGVpZ2h0LCAwLCAwLCBtX2NvbnRleHQtPm1fY3VycmVudFdpZHRoLCBtX2NvbnRleHQtPm1f
Y3VycmVudEhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKKyNlbmRpZgor
ICAgIH0KKworICAgIG1fcGxhdGZvcm1TdXJmYWNlLT51cGRhdGVDb250ZW50cyhtX2NvbnRleHQt
Pm1fdGV4dHVyZSwgSW50UmVjdCgwLCAwLCBtX2NvbnRleHQtPm1fY3VycmVudFdpZHRoLCBtX2Nv
bnRleHQtPm1fY3VycmVudEhlaWdodCksIG1fY29udGV4dC0+bV9ib3VuZEZCTyk7CisgICAgcmV0
dXJuIDA7CiB9CiAKIEdyYXBoaWNzU3VyZmFjZVRva2VuIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKSBjb25zdAogewotICAgIHJldHVybiBtX2dyYXBoaWNz
U3VyZmFjZS0+ZXhwb3J0VG9rZW4oKTsKKyAgICByZXR1cm4gbV9zdXJmYWNlSGFuZGxlOwogfQog
I2VuZGlmCiAKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwv
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCmluZGV4IDFhZTQzNTEuLmZhZWMwMzYg
MTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlLmgKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Vm
bC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgICAgQ29w
eXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MTIgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDYgKzIxLDgg
QEAKICNpZm5kZWYgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlX2gKICNkZWZpbmUgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlX2gKIAorI2lmIFVTRSgzRF9HUkFQSElDUykgfHwgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKIAogI2lm
IFVTRShURVhUVVJFX01BUFBFUl9HTCkKQEAgLTI3LDE0ICszMCwxMSBAQAogI2VuZGlmCiAKICNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSNpbmNsdWRlICJHcmFwaGljc1N1cmZhY2UuaCIKKyNp
bmNsdWRlICJHTFBsYXRmb3JtU3VyZmFjZS5oIgogI2VuZGlmCiAKLXR5cGVkZWYgc3RydWN0IF9F
dmFzX0dMICAgICAgICAgICAgICAgRXZhc19HTDsKLXR5cGVkZWYgc3RydWN0IF9FdmFzX0dMX1N1
cmZhY2UgICAgICAgRXZhc19HTF9TdXJmYWNlOwotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfQ29u
dGV4dCAgICAgICBFdmFzX0dMX0NvbnRleHQ7Ci10eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9Db25m
aWcgICAgICAgIEV2YXNfR0xfQ29uZmlnOwotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfQVBJICAg
ICAgICAgICBFdmFzX0dMX0FQSTsKKyNpbmNsdWRlICJHTFBsYXRmb3JtQ29udGV4dC5oIgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIGNsYXNzIFBhZ2VDbGllbnRFZmw7CiAKQEAgLTQ4
LDggKzQ4LDkgQEAgcHVibGljOgogICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGlj
c0NvbnRleHQzRCosIEhvc3RXaW5kb3cqLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUp
OwogICAgIH5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUoKTsKIAorICAgIGJvb2wgY3JlYXRlU3Vy
ZmFjZShQYWdlQ2xpZW50RWZsKiwgYm9vbCk7CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQz
RCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7Ci0KKyAgICB2b2lkIHNldENvbnRl
eHRMb3N0Q2FsbGJhY2soUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6Q29udGV4dExvc3RD
YWxsYmFjaz4gIGNhbGxCYWNrKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAg
ICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogI2VuZGlmCkBAIC02MSwz
MSArNjIsMjMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgR3JhcGhpY3NTdXJmYWNlVG9rZW4gZ3Jh
cGhpY3NTdXJmYWNlVG9rZW4oKSBjb25zdDsKICAgICB2b2lkIGNyZWF0ZUdyYXBoaWNzU3VyZmFj
ZXMoY29uc3QgSW50U2l6ZSYpOwogI2VuZGlmCi0KICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGJvb2wgY3JlYXRlU3VyZmFjZShQYWdlQ2xpZW50RWZsKiwgYm9vbCByZW5kZXJE
aXJlY3RseVRvRXZhc0dMT2JqZWN0KTsKLSAgICB2b2lkIHNldEN1cnJlbnRHTENvbnRleHQodm9p
ZCosIHZvaWQqKTsKLQorICAgIHZvaWQgcmVsZWFzZVJlc291cmNlcygpOwogICAgIEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKICAgICBHcmFwaGljc0NvbnRleHQz
RCogbV9jb250ZXh0OwogICAgIEhvc3RXaW5kb3cqIG1faG9zdFdpbmRvdzsKKyAgICBPd25QdHI8
R0xQbGF0Zm9ybUNvbnRleHQ+IG1fcGxhdGZvcm1Db250ZXh0OworICAgIE93blB0cjxHTFBsYXRm
b3JtU3VyZmFjZT4gbV9wbGF0Zm9ybVN1cmZhY2U7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
Ci0gICAgR3JhcGhpY3NTdXJmYWNlOjpGbGFncyBtX3N1cmZhY2VGbGFnczsKLSAgICBSZWZQdHI8
R3JhcGhpY3NTdXJmYWNlPiBtX2dyYXBoaWNzU3VyZmFjZTsKKyAgICBHcmFwaGljc1N1cmZhY2VU
b2tlbiBtX3N1cmZhY2VIYW5kbGU7CiAjZW5kaWYKLQorICAgIE93blB0cjxHcmFwaGljc0NvbnRl
eHQzRDo6Q29udGV4dExvc3RDYWxsYmFjaz4gbV9jb250ZXh0TG9zdENhbGxiYWNrOwogICAgIExp
c3RIYXNoU2V0PEdDM0RlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsKLQotICAgIE93blB0cjxFY29y
ZV9FdmFzPiBtX2Vjb3JlRXZhczsKLSAgICBFdmFzX0dMKiBtX2V2YXNHTDsKLSAgICBFdmFzX0dM
X0NvbnRleHQqIG1fZXZhc0dMQ29udGV4dDsKLSAgICBFdmFzX0dMX1N1cmZhY2UqIG1fZXZhc0dM
U3VyZmFjZTsKLSAgICB2b2lkKiBtX2dsQ29udGV4dDsKLSAgICB2b2lkKiBtX2dsU3VyZmFjZTsK
LSAgICBFdmFzX0dMX0FQSSogbV9hcGk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0
eWxlIG1fcmVuZGVyU3R5bGU7CisgICAgYm9vbCBtX3BlbmRpbmdTdXJmYWNlUmVzaXplOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gR3JhcGhpY3NMYXllckVmbF9o
CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dMRGVmcy5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HTERlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTM2YTEx
Ci0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HTERlZnMuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElu
dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IEdMRGVmc19oCisjZGVmaW5lIEdMRGVmc19oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3Bl
bkdMRVMuaCIKKyNlbHNlCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCisjZW5kaWYK
KworI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisKKyNpbmNsdWRlIDxHTC9nbC5oPgorI2luY2x1
ZGUgPEdML2dsZXh0Lmg+CisjaWYgSEFWRShHTFgpCisjaW5jbHVkZSA8R0wvZ2x4Lmg+CisjZW5k
aWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgSEFWRShHTFgpCit0eXBlZGVmIEdMWENv
bnRleHQgUGxhdGZvcm1Db250ZXh0OwordHlwZWRlZiBEaXNwbGF5KiBQbGF0Zm9ybURpc3BsYXk7
Cit0eXBlZGVmIEdMWEZCQ29uZmlnIFBsYXRmb3JtU3VyZmFjZUNvbmZpZzsKK3R5cGVkZWYgR0xY
RHJhd2FibGUgUGxhdGZvcm1TdXJmYWNlOworI2Vsc2UKK3R5cGVkZWYgdm9pZCogUGxhdGZvcm1D
b250ZXh0OwordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybURpc3BsYXk7Cit0eXBlZGVmIHZvaWQqIFBs
YXRmb3JtU3VyZmFjZUNvbmZpZzsKK3R5cGVkZWYgdm9pZCogUGxhdGZvcm1TdXJmYWNlOworI2Vu
ZGlmCisKK30KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5jcHAgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWFiNjk1Ci0tLSAvZGV2L251bGwKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5j
cHAKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29y
cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJHTFBsYXRmb3JtQ29udGV4dC5oIgorCisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorCisjaWYgSEFWRShHTFgpCisjaW5jbHVkZSAiR0xYQ29udGV4dC5o
IgorI2VuZGlmCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBQRk5HTEdFVEdSQVBISUNTUkVTRVRTVEFUVVNBUkJQUk9DIGdsR2V0
R3JhcGhpY3NSZXNldFN0YXR1c0FSQiA9IDA7CitzdGF0aWMgR0xQbGF0Zm9ybUNvbnRleHQqIG1f
Y3VycmVudENvbnRleHQgPSAwOworCitQYXNzT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBHTFBs
YXRmb3JtQ29udGV4dDo6Y3JlYXRlQ29udGV4dChHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5
bGUgcmVuZGVyU3R5bGUpCit7CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWRTaGltcyA9IGZh
bHNlOworCisgICAgaWYgKCFpbml0aWFsaXplZFNoaW1zKSB7CisgICAgICAgIGluaXRpYWxpemVk
U2hpbXMgPSBpbml0aWFsaXplT3BlbkdMU2hpbXMoKTsKKyNpZiBIQVZFKEdMWCkKKyAgICAgICAg
Z2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEdFVEdS
QVBISUNTUkVTRVRTVEFUVVNBUkJQUk9DPihnbFhHZXRQcm9jQWRkcmVzc0FSQihyZWludGVycHJl
dF9jYXN0PGNvbnN0IEdMdWJ5dGUqPigiZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCIikpKTsK
KyNlbmRpZgorICAgIH0KKworICAgIGlmICghaW5pdGlhbGl6ZWRTaGltcykKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBzd2l0Y2ggKHJlbmRlclN0eWxlKSB7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UmVuZGVyT2Zmc2NyZWVuOgorICAgICAgICBpZiAoT3duUHRyPEdMUGxh
dGZvcm1Db250ZXh0PiBnbHhDb250ZXh0ID0gR0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZU9mZlNj
cmVlbkNvbnRleHQoKSkKKyAgICAgICAgICAgIHJldHVybiBnbHhDb250ZXh0LnJlbGVhc2UoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyVG9DdXJy
ZW50R0xDb250ZXh0OgorICAgICAgICBpZiAoT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBnbHhD
b250ZXh0ID0gR0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZUN1cnJlbnRDb250ZXh0V3JhcHBlcigp
KQorICAgICAgICAgICAgcmV0dXJuIGdseENvbnRleHQucmVsZWFzZSgpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRv
dzoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIHJldHVybiBudWxscHRyOworfQorCitQYXNzT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0
PiBHTFBsYXRmb3JtQ29udGV4dDo6Y3JlYXRlT2ZmU2NyZWVuQ29udGV4dCgpCit7CisjaWYgSEFW
RShHTFgpCisgICAgT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBnbHhDb250ZXh0ID0gYWRvcHRQ
dHIobmV3IEdMWE9mZlNjcmVlbkNvbnRleHQoKSk7CisgICAgcmV0dXJuIGdseENvbnRleHQucmVs
ZWFzZSgpOworI2VuZGlmCisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUGFzc093blB0cjxH
TFBsYXRmb3JtQ29udGV4dD4gR0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZUN1cnJlbnRDb250ZXh0
V3JhcHBlcigpCit7CisjaWYgSEFWRShHTFgpCisgICAgT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0
PiBnbHhDb250ZXh0ID0gYWRvcHRQdHIobmV3IEdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcigpKTsK
KyAgICByZXR1cm4gZ2x4Q29udGV4dC5yZWxlYXNlKCk7CisjZW5kaWYKKworICAgIHJldHVybiBu
dWxscHRyOworfQorCitHTFBsYXRmb3JtQ29udGV4dDo6R0xQbGF0Zm9ybUNvbnRleHQoKQorICAg
IDogbV9jb250ZXh0SGFuZGxlKDApCisgICAgLCBtX3Jlc2V0TG9zdENvbnRleHQoZmFsc2UpCit7
Cit9CisKK0dMUGxhdGZvcm1Db250ZXh0Ojp+R0xQbGF0Zm9ybUNvbnRleHQoKQoreworICAgIGlm
ICh0aGlzID09IG1fY3VycmVudENvbnRleHQpCisgICAgICAgIG1fY3VycmVudENvbnRleHQgPSAw
OworfQorCitib29sIEdMUGxhdGZvcm1Db250ZXh0OjptYWtlQ3VycmVudChHTFBsYXRmb3JtU3Vy
ZmFjZSogc3VyZmFjZSkKK3sKKyAgICBtX2NvbnRleHRMb3N0ID0gZmFsc2U7CisKKyAgICBpZiAo
c3VyZmFjZSAmJiAhc3VyZmFjZS0+aGFuZGxlKCkpIHsKKyAgICAgICAgbV9jdXJyZW50Q29udGV4
dCA9IDA7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoaXNDdXJyZW50
Q29udGV4dCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGJvb2wgcmV0dXJuVmFsdWUg
PSBmYWxzZTsKKworICAgIGlmICghc3VyZmFjZSkgeworICAgICAgICBtX2N1cnJlbnRDb250ZXh0
ID0gMDsKKyAgICAgICAgcGxhdGZvcm1SZWxlYXNlQ3VycmVudCgpOworICAgICAgICByZXR1cm5W
YWx1ZSA9IHRydWU7CisgICAgfSBlbHNlIGlmIChwbGF0Zm9ybU1ha2VDdXJyZW50KHN1cmZhY2Up
KSB7CisgICAgICAgIG1fY3VycmVudENvbnRleHQgPSB0aGlzOworICAgICAgICByZXR1cm5WYWx1
ZSA9IHRydWU7CisgICAgfQorCisgICAgaWYgKG1fcmVzZXRMb3N0Q29udGV4dCAmJiBnbEdldEdy
YXBoaWNzUmVzZXRTdGF0dXNBUkIpIHsKKyAgICAgICAgR0xlbnVtIHN0YXR1cyA9IGdsR2V0R3Jh
cGhpY3NSZXNldFN0YXR1c0FSQigpOworCisgICAgICAgIHN3aXRjaCAoc3RhdHVzKSB7CisgICAg
ICAgIGNhc2UgUExBVEZPUk1DT05URVhUX05PX0VSUk9SOgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgUExBVEZPUk1DT05URVhUX0dVSUxUWV9DT05URVhUX1JFU0VUOgorICAgICAg
ICAgICAgbV9jb250ZXh0TG9zdCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBQTEFURk9STUNPTlRFWFRfSU5OT0NFTlRfQ09OVEVYVF9SRVNFVDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFBMQVRGT1JNQ09OVEVYVF9VTktOT1dOX0NPTlRFWFRfUkVT
RVQ6CisgICAgICAgICAgICBtX2NvbnRleHRMb3N0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7Cit9CisKK2Jvb2wgR0xQbGF0Zm9ybUNvbnRleHQ6
OmlzVmFsaWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHRIYW5kbGUgJiYgIW1fY29u
dGV4dExvc3Q7Cit9CisKK3ZvaWQgR0xQbGF0Zm9ybUNvbnRleHQ6OnJlbGVhc2VDdXJyZW50KCkK
K3sKKyAgICBpZiAoIWlzQ3VycmVudENvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9jdXJyZW50Q29udGV4dCA9IDA7CisgICAgcGxhdGZvcm1SZWxlYXNlQ3VycmVudCgpOworfQor
CitQbGF0Zm9ybUNvbnRleHQgR0xQbGF0Zm9ybUNvbnRleHQ6OmhhbmRsZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fY29udGV4dEhhbmRsZTsKK30KKworYm9vbCBHTFBsYXRmb3JtQ29udGV4dDo6
aXNDdXJyZW50Q29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
R0xQbGF0Zm9ybUNvbnRleHQ6OmluaXRpYWxpemUoR0xQbGF0Zm9ybVN1cmZhY2UqKQoreworICAg
IHJldHVybiB0cnVlOworfQorCitHTFBsYXRmb3JtQ29udGV4dCogR0xQbGF0Zm9ybUNvbnRleHQ6
OmdldEN1cnJlbnQoKQoreworICAgIHJldHVybiBtX2N1cnJlbnRDb250ZXh0OworfQorCitib29s
IEdMUGxhdGZvcm1Db250ZXh0OjpwbGF0Zm9ybU1ha2VDdXJyZW50KEdMUGxhdGZvcm1TdXJmYWNl
KikKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHTFBsYXRmb3JtQ29udGV4dDo6cGxh
dGZvcm1SZWxlYXNlQ3VycmVudCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBHTFBsYXRmb3JtQ29udGV4dDo6ZGVzdHJveSgpCit7CisgICAgbV9jb250ZXh0SGFuZGxlID0g
MDsKKyAgICBtX3Jlc2V0TG9zdENvbnRleHQgPSBmYWxzZTsKKworICAgIGlmICh0aGlzID09IG1f
Y3VycmVudENvbnRleHQpCisgICAgICAgIG1fY3VycmVudENvbnRleHQgPSAwOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5oIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NTliN2IKLS0tIC9kZXYvbnVsbAorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmgKQEAg
LTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHTFBsYXRmb3JtQ29u
dGV4dF9oCisjZGVmaW5lIEdMUGxhdGZvcm1Db250ZXh0X2gKKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkdMRGVmcy5oIgorI2luY2x1ZGUgIkdMUGxhdGZv
cm1TdXJmYWNlLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKworLy8gRW5jYXBzdWxhdGVzIGFuIE9wZW5HTCBjb250ZXh0LCBoaWRp
bmcgcGxhdGZvcm0gc3BlY2lmaWMgbWFuYWdlbWVudC4KK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgR0xQbGF0Zm9ybUNvbnRleHQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdMUGxh
dGZvcm1Db250ZXh0KTsKKworcHVibGljOgorICAgIC8vIEZyb20gaHR0cDovL3d3dy5raHJvbm9z
Lm9yZy9yZWdpc3RyeS9nbGVzL2V4dGVuc2lvbnMvRVhUL0VYVF9yb2J1c3RuZXNzLnR4dAorICAg
IGVudW0gUGxhdGZvcm1Db250ZXh0UmVzZXQgeworICAgICAgICBQTEFURk9STUNPTlRFWFRfTk9f
RVJST1IgPSAweDAwMDAsCisgICAgICAgIFBMQVRGT1JNQ09OVEVYVF9HVUlMVFlfQ09OVEVYVF9S
RVNFVCA9IDB4ODI1MywKKyAgICAgICAgUExBVEZPUk1DT05URVhUX0lOTk9DRU5UX0NPTlRFWFRf
UkVTRVQgPSAweDgyNTQsCisgICAgICAgIFBMQVRGT1JNQ09OVEVYVF9VTktOT1dOX0NPTlRFWFRf
UkVTRVQgPSAweDgyNTUsCisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPEdMUGxhdGZv
cm1Db250ZXh0PiBjcmVhdGVDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSk7
CisKKyAgICB2aXJ0dWFsIH5HTFBsYXRmb3JtQ29udGV4dCgpOworCisgICAgdmlydHVhbCBib29s
IGluaXRpYWxpemUoR0xQbGF0Zm9ybVN1cmZhY2UqKTsKKworICAgIC8vIE1ha2VzIHRoaXMgYW5k
IHN1cmZhY2UgYXMgY3VycmVudCBjb250ZXh0IGFuZCBkcmF3YWJsZS4KKyAgICAvLyBDYWxsaW5n
IHRoaXMgZnVuY3Rpb24gd2l0aCBubyBzdXJmYWNlIGlzIHNhbWUgYXMgY2FsbGluZyByZWxlYXNl
Q3VycmVudC4KKyAgICAvLyBEb2VzIG5vdGhpbmcgaWYgdGhpcyBpcyBhbHJlYWR5IGN1cnJlbnQg
Q29udGV4dC4KKyAgICBib29sIG1ha2VDdXJyZW50KEdMUGxhdGZvcm1TdXJmYWNlKiA9IDApOwor
CisgICAgLy8gU2V0cyBDdXJyZW50IENvbnRleHQgYW5kIERyYXdhYmxlIGFzIE51bGwuCisgICAg
Ly8gRG9lc24ndCBoYXZlIGFueSBlZmZlY3QgaWYgdGhpcyBpcyBub3QgdGhlIGN1cnJlbnQgQ29u
dGV4dC4KKyAgICB2b2lkIHJlbGVhc2VDdXJyZW50KCk7CisKKyAgICBQbGF0Zm9ybUNvbnRleHQg
aGFuZGxlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDdXJyZW50Q29udGV4dCgpIGNv
bnN0OworCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CisKKyAgICAvLyBEZXN0cm95cyBhbnkg
R0wgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbnRleHQuCisgICAgdmlydHVhbCB2
b2lkIGRlc3Ryb3koKTsKKworICAgIHN0YXRpYyBHTFBsYXRmb3JtQ29udGV4dCogZ2V0Q3VycmVu
dCgpOworCitwcm90ZWN0ZWQ6CisgICAgR0xQbGF0Zm9ybUNvbnRleHQoKTsKKyAgICB2aXJ0dWFs
IGJvb2wgcGxhdGZvcm1NYWtlQ3VycmVudChHTFBsYXRmb3JtU3VyZmFjZSopOworICAgIHZpcnR1
YWwgdm9pZCBwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KCk7CisgICAgUGxhdGZvcm1Db250ZXh0IG1f
Y29udGV4dEhhbmRsZTsKKyAgICBib29sIG1fcmVzZXRMb3N0Q29udGV4dDsKKyAgICBib29sIG1f
Y29udGV4dExvc3Q7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFBhc3NPd25QdHI8R0xQbGF0Zm9y
bUNvbnRleHQ+IGNyZWF0ZU9mZlNjcmVlbkNvbnRleHQoKTsKKyAgICBzdGF0aWMgUGFzc093blB0
cjxHTFBsYXRmb3JtQ29udGV4dD4gY3JlYXRlQ3VycmVudENvbnRleHRXcmFwcGVyKCk7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gR0xOYXRpdmVD
b250ZXh0X0gKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uODk0NGRjMAotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCkBAIC0wLDAgKzEsMTcyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR0xQ
bGF0Zm9ybVN1cmZhY2UuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwor
I2lmIEhBVkUoR0xYKQorI2luY2x1ZGUgIkdMWFN1cmZhY2UuaCIKKyNlbmRpZgorCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRy
PEdMUGxhdGZvcm1TdXJmYWNlPiBHTFBsYXRmb3JtU3VyZmFjZTo6Y3JlYXRlT2Zmc2NyZWVuU3Vy
ZmFjZSgpCit7CisjaWYgSEFWRShHTFgpCisgICAgT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBz
dXJmYWNlID0gYWRvcHRQdHIobmV3IEdMWFBCdWZmZXIoKSk7CisKKyAgICBpZiAoc3VyZmFjZS0+
aGFuZGxlKCkpCisgICAgICAgIHJldHVybiBzdXJmYWNlLnJlbGVhc2UoKTsKKyNlbmRpZgorCisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1Bhc3NPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IEdM
UGxhdGZvcm1TdXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKCkKK3sKKyNpZiBIQVZFKEdM
WCkKKyAgICBPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFB0cihuZXcg
R0xYVHJhbnNwb3J0U3VyZmFjZSgpKTsKKworICAgIGlmIChzdXJmYWNlLT5oYW5kbGUoKSkKKyAg
ICAgICAgcmV0dXJuIHN1cmZhY2UucmVsZWFzZSgpOworI2VuZGlmCisKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworR0xQbGF0Zm9ybVN1cmZhY2U6OkdMUGxhdGZvcm1TdXJmYWNlKCkKKyAgICA6
IG1fcmVzdG9yZU5lZWRlZCh0cnVlKQorICAgICwgbV9mYm9JZCgwKQorICAgICwgbV9zaGFyZWRE
aXNwbGF5KDApCisgICAgLCBtX2RyYXdhYmxlKDApCit7Cit9CisKK0dMUGxhdGZvcm1TdXJmYWNl
Ojp+R0xQbGF0Zm9ybVN1cmZhY2UoKQoreworfQorCitQbGF0Zm9ybVN1cmZhY2UgR0xQbGF0Zm9y
bVN1cmZhY2U6OmhhbmRsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZHJhd2FibGU7Cit9CisK
K2NvbnN0IEludFJlY3QmIEdMUGxhdGZvcm1TdXJmYWNlOjpnZW9tZXRyeSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcmVjdDsKK30KKworUGxhdGZvcm1EaXNwbGF5IEdMUGxhdGZvcm1TdXJmYWNl
OjpzaGFyZWREaXNwbGF5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zaGFyZWREaXNwbGF5Owor
fQorCitQbGF0Zm9ybVN1cmZhY2VDb25maWcgR0xQbGF0Zm9ybVN1cmZhY2U6OmNvbmZpZ3VyYXRp
b24oKQoreworICAgIHJldHVybiAwOworfQorCit2b2lkIEdMUGxhdGZvcm1TdXJmYWNlOjpzd2Fw
QnVmZmVycygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHTFBsYXRmb3Jt
U3VyZmFjZTo6Y29weVRleHR1cmUodWludDMyX3QgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCkKK3sKKyAgICBpZiAoIW1fZmJvSWQpCisgICAgICAgIGdsR2VuRnJhbWVidWZmZXJz
KDEsICZtX2Zib0lkKTsKKworICAgIG1fcmVzdG9yZU5lZWRlZCA9IHRydWU7CisgICAgaW50IHgg
PSBzb3VyY2VSZWN0LngoKTsKKyAgICBpbnQgeSA9IHNvdXJjZVJlY3QueSgpOworICAgIGludCB3
aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0gc291cmNlUmVjdC5o
ZWlnaHQoKTsKKworICAgIGdsUHVzaEF0dHJpYihHTF9DT0xPUl9CVUZGRVJfQklUKTsKKworICAg
IEdMaW50IHByZXZpb3VzRkJPOworICAgIGdsR2V0SW50ZWdlcnYoR0xfRlJBTUVCVUZGRVJfQklO
RElORywgJnByZXZpb3VzRkJPKTsKKworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX1JFQURfRlJB
TUVCVUZGRVIsIG1fZmJvSWQpOworCisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0
ZXh0dXJlKTsKKyAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX1JFQURfRlJBTUVCVUZGRVIs
IEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCB0ZXh0dXJlLCAwKTsKKworICAg
IGdsQmluZEZyYW1lYnVmZmVyKEdMX0RSQVdfRlJBTUVCVUZGRVIsIDApOworCisgICAgZ2xCbGl0
RnJhbWVidWZmZXIoeCwgeSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgR0xf
Q09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKKworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJl
MkQoR0xfUkVBRF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVf
MkQsIDAsIDApOworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisgICAgZ2xC
aW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIHByZXZpb3VzRkJPKTsKKworICAgIGdsUG9w
QXR0cmliKCk7Cit9CisKK3ZvaWQgR0xQbGF0Zm9ybVN1cmZhY2U6OnVwZGF0ZUNvbnRlbnRzKHVp
bnQzMl90IHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEdMdWludCBi
aW5kRmJvSWQpCit7CisgICAgbV9yZXN0b3JlTmVlZGVkID0gZmFsc2U7CisKKyAgICBpZiAoIW1f
ZmJvSWQpCisgICAgICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2Zib0lkKTsKKworICAgIGlu
dCB4ID0gc291cmNlUmVjdC54KCk7CisgICAgaW50IHkgPSBzb3VyY2VSZWN0LnkoKTsKKyAgICBp
bnQgd2lkdGggPSBzb3VyY2VSZWN0LndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IHNvdXJjZVJl
Y3QuaGVpZ2h0KCk7CisKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9SRUFEX0ZSQU1FQlVGRkVS
LCBtX2Zib0lkKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmUpOwor
ICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfUkVBRF9GUkFNRUJVRkZFUiwgR0xfQ09MT1Jf
QVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIHRleHR1cmUsIDApOworICAgIGdsQmluZEZyYW1l
YnVmZmVyKEdMX0RSQVdfRlJBTUVCVUZGRVIsIDApOworICAgIGdsQmxpdEZyYW1lYnVmZmVyKHgs
IHksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9C
SVQsIEdMX0xJTkVBUik7CisgICAgc3dhcEJ1ZmZlcnMoKTsKKyAgICBnbEZyYW1lYnVmZmVyVGV4
dHVyZTJEKEdMX1JFQURfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhU
VVJFXzJELCAwLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworICAg
IGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBiaW5kRmJvSWQpOworfQorCit2b2lk
IEdMUGxhdGZvcm1TdXJmYWNlOjpzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JiBuZXdSZWN0KQor
eworICAgIG1fcmVjdCA9IG5ld1JlY3Q7Cit9CisKK3ZvaWQgR0xQbGF0Zm9ybVN1cmZhY2U6OmRl
c3Ryb3koKQoreworICAgIG1fcmVjdCA9IEludFJlY3QoKTsKKworICAgIGlmIChtX2Zib0lkKQor
ICAgICAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm9JZCk7CisKKyAgICBtX2Zib0lk
ID0gMDsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuaCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5mMTA2NmI3Ci0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5oCkBAIC0wLDAg
KzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR0xQbGF0Zm9ybVN1cmZhY2Vf
aAorI2RlZmluZSBHTFBsYXRmb3JtU3VyZmFjZV9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisKKyNpbmNsdWRlICJHTERlZnMuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCisvLyBFbmNhcHN1bGF0ZXMgYSBz
dXJmYWNlIHRoYXQgY2FuIGJlIHJlbmRlcmVkIHRvIHdpdGggR0wsIGhpZGluZyBwbGF0Zm9ybQor
Ly8gc3BlY2lmaWMgbWFuYWdlbWVudC4KK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR0xQ
bGF0Zm9ybVN1cmZhY2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdMUGxhdGZvcm1TdXJm
YWNlKTsKKworcHVibGljOgorICAgIC8vIENyZWF0ZXMgYSBHTCBzdXJmYWNlIHVzZWQgZm9yIG9m
ZnNjcmVlbiByZW5kZXJpbmcuCisgICAgc3RhdGljIFBhc3NPd25QdHI8R0xQbGF0Zm9ybVN1cmZh
Y2U+IGNyZWF0ZU9mZnNjcmVlblN1cmZhY2UoKTsKKworICAgIC8vIENyZWF0ZXMgYSBHTCBzdXJm
YWNlIHVzZWQgZm9yIG9mZnNjcmVlbiByZW5kZXJpbmcuIFRoZSByZXN1bHRzIGNhbiBiZSB0cmFu
c3BvcnRlZAorICAgIC8vIHRvIHRoZSBVSSBwcm9jZXNzIGZvciBkaXNwbGF5LgorICAgIHN0YXRp
YyBQYXNzT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKCk7
CisKKyAgICB2aXJ0dWFsIH5HTFBsYXRmb3JtU3VyZmFjZSgpOworCisgICAgY29uc3QgSW50UmVj
dCYgZ2VvbWV0cnkoKSBjb25zdDsKKworICAgIC8vIEdldCB0aGUgdW5kZXJseWluZyBwbGF0Zm9y
bSBzcGVjaWZpYyBzdXJmYWNlIGhhbmRsZS4KKyAgICBQbGF0Zm9ybVN1cmZhY2UgaGFuZGxlKCkg
Y29uc3Q7CisKKyAgICBQbGF0Zm9ybURpc3BsYXkgc2hhcmVkRGlzcGxheSgpIGNvbnN0OworCisg
ICAgdmlydHVhbCB2b2lkIHN3YXBCdWZmZXJzKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29weVRl
eHR1cmUodWludDMyX3QgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCk7CisKKyAg
ICAvLyBDb252ZW5pZW5jZSBGdW5jdGlvbiB0byB1cGRhdGUgc3VyZmFjZSBiYWNrYnVmZmVyIHdp
dGggdGV4dHVyZSBjb250ZW50cyBhbmQgcmVzdG9yZSBjdXJyZW50IEZCTy4KKyAgICAvLyBGdW5j
dGlvbiBkb2VzIHRoZSBmb2xsb3dpbmcoaW4gb3JkZXIpOgorICAgIC8vIGEpQmxpdHMgdGV4dHVy
ZSBjb250ZW50cyB0byBiYWNrIGJ1ZmZlci4KKyAgICAvLyBiKUNhbGxzIFN3YXAgQnVmZmVycy4K
KyAgICAvLyBjKVNldHMgY3VycmVudCBGQk8gYXMgYmluZEZib0lkLgorICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVDb250ZW50cyh1aW50MzJfdCB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBHTHVpbnQgYmluZEZib0lkKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRHZW9t
ZXRyeShjb25zdCBJbnRSZWN0JiBuZXdSZWN0KTsKKworICAgIHZpcnR1YWwgUGxhdGZvcm1TdXJm
YWNlQ29uZmlnIGNvbmZpZ3VyYXRpb24oKTsKKworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7
CisKK3Byb3RlY3RlZDoKKyAgICBHTFBsYXRmb3JtU3VyZmFjZSgpOworICAgIGJvb2wgbV9yZXN0
b3JlTmVlZGVkOworICAgIEludFJlY3QgbV9yZWN0OworICAgIEdMdWludCBtX2Zib0lkOworICAg
IFBsYXRmb3JtRGlzcGxheSBtX3NoYXJlZERpc3BsYXk7CisgICAgUGxhdGZvcm1TdXJmYWNlIG1f
ZHJhd2FibGU7Cit9OworCit9CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NWYwNmMKLS0tIC9kZXYvbnVs
bAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENv
bnRleHQuY3BwCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElu
dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR0xYQ29udGV4dC5oIgorCisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKSAmJiBIQVZFKEdMWCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0
eXBlZGVmIEdMWENvbnRleHQgKCpHTFhDUkVBVEVDT05URVhUQVRUUklCU0FSQlBST0MpKERpc3Bs
YXkqLCBHTFhGQkNvbmZpZywgR0xYQ29udGV4dCwgQm9vbCwgY29uc3QgaW50Kik7CitzdGF0aWMg
R0xYQ1JFQVRFQ09OVEVYVEFUVFJJQlNBUkJQUk9DIGdsWENyZWF0ZUNvbnRleHRBdHRyaWJzQVJC
ID0gMDsKKworc3RhdGljIGludCBBdHRyaWJzW10gPSB7CisgICAgR0xYX0NPTlRFWFRfUkVTRVRf
Tk9USUZJQ0FUSU9OX1NUUkFURUdZX0FSQiwKKyAgICBHTFhfTE9TRV9DT05URVhUX09OX1JFU0VU
X0FSQiwKKyAgICAwIH07CisKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVBUkJFeHRlbnNpb25zKCkK
K3sKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworCisgICAgaWYgKGluaXRp
YWxpemVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpbml0aWFsaXplZCA9IHRydWU7CisgICAg
Z2xYQ3JlYXRlQ29udGV4dEF0dHJpYnNBUkIgPSByZWludGVycHJldF9jYXN0PEdMWENSRUFURUNP
TlRFWFRBVFRSSUJTQVJCUFJPQz4oZ2xYR2V0UHJvY0FkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBHTHVieXRlKj4oImdsWENyZWF0ZUNvbnRleHRBdHRyaWJzQVJCIikpKTsKK30KKworR0xY
T2ZmU2NyZWVuQ29udGV4dDo6R0xYT2ZmU2NyZWVuQ29udGV4dCgpCisgICAgOiBHTFBsYXRmb3Jt
Q29udGV4dCgpCisgICAgLCBtX2Rpc3BsYXkoMCkKK3sKK30KKworYm9vbCBHTFhPZmZTY3JlZW5D
b250ZXh0Ojppbml0aWFsaXplKEdMUGxhdGZvcm1TdXJmYWNlKiBzdXJmYWNlKQoreworICAgIGlm
ICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9kaXNwbGF5ID0gc3Vy
ZmFjZS0+c2hhcmVkRGlzcGxheSgpOworICAgIGlmICghbV9kaXNwbGF5KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBHTFhGQkNvbmZpZyBjb25maWcgPSBzdXJmYWNlLT5jb25maWd1cmF0
aW9uKCk7CisKKyAgICBpZiAoY29uZmlnKSB7CisgICAgICAgIGluaXRpYWxpemVBUkJFeHRlbnNp
b25zKCk7CisKKyAgICAgICAgaWYgKGdsWENyZWF0ZUNvbnRleHRBdHRyaWJzQVJCKQorICAgICAg
ICAgICAgbV9jb250ZXh0SGFuZGxlID0gZ2xYQ3JlYXRlQ29udGV4dEF0dHJpYnNBUkIobV9kaXNw
bGF5LCBjb25maWcsIDAsIHRydWUsIEF0dHJpYnMpOworCisgICAgICAgIGlmIChtX2NvbnRleHRI
YW5kbGUpCisgICAgICAgICAgICBtX3Jlc2V0TG9zdENvbnRleHQgPSB0cnVlOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX2NvbnRleHRIYW5kbGUgPSBnbFhDcmVhdGVOZXdDb250ZXh0KG1f
ZGlzcGxheSwgY29uZmlnLCBHTFhfUkdCQV9UWVBFLCAwLCB0cnVlKTsKKworICAgICAgICBpZiAo
bV9jb250ZXh0SGFuZGxlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitHTFhPZmZTY3JlZW5Db250ZXh0Ojp+R0xYT2ZmU2NyZWVuQ29u
dGV4dCgpCit7Cit9CisKK2Jvb2wgR0xYT2ZmU2NyZWVuQ29udGV4dDo6aXNDdXJyZW50Q29udGV4
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dEhhbmRsZSA9PSBnbFhHZXRDdXJyZW50
Q29udGV4dCgpOworfQorCitib29sIEdMWE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRmb3JtTWFrZUN1
cnJlbnQoR0xQbGF0Zm9ybVN1cmZhY2UqIHN1cmZhY2UpCit7CisgICAgcmV0dXJuIGdsWE1ha2VD
dXJyZW50KHN1cmZhY2UtPnNoYXJlZERpc3BsYXkoKSwgc3VyZmFjZS0+aGFuZGxlKCksIG1fY29u
dGV4dEhhbmRsZSk7Cit9CisKK3ZvaWQgR0xYT2ZmU2NyZWVuQ29udGV4dDo6cGxhdGZvcm1SZWxl
YXNlQ3VycmVudCgpCit7CisgICAgZ2xYTWFrZUN1cnJlbnQobV9kaXNwbGF5LCAwLCAwKTsKK30K
Kwordm9pZCBHTFhPZmZTY3JlZW5Db250ZXh0OjpmcmVlUmVzb3VyY2VzKCkKK3sKKyAgICBpZiAo
bV9jb250ZXh0SGFuZGxlKQorICAgICAgICBnbFhEZXN0cm95Q29udGV4dChtX2Rpc3BsYXksIG1f
Y29udGV4dEhhbmRsZSk7CisKKyAgICBtX2NvbnRleHRIYW5kbGUgPSAwOworICAgIG1fZGlzcGxh
eSA9IDA7Cit9CisKK3ZvaWQgR0xYT2ZmU2NyZWVuQ29udGV4dDo6ZGVzdHJveSgpCit7CisgICAg
ZnJlZVJlc291cmNlcygpOworICAgIEdMUGxhdGZvcm1Db250ZXh0OjpkZXN0cm95KCk7Cit9CisK
K30KKworI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjdjZmY4ZDUKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuaApAQCAtMCwwICsxLDY5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdMWENvbnRleHRfaAorI2RlZmluZSBHTFhDb250ZXh0
X2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgSEFWRShHTFgpCisKKyNp
bmNsdWRlICJHTFBsYXRmb3JtQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEdMWEN1cnJlbnRDb250ZXh0V3JhcHBlciA6IHB1YmxpYyBHTFBsYXRmb3JtQ29udGV4dCB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR0xYQ3VycmVudENvbnRleHRXcmFwcGVyKTsKKwor
cHVibGljOgorICAgIEdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcigpCisgICAgICAgIDogR0xQbGF0
Zm9ybUNvbnRleHQoKQorICAgIHsKKyAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZ2xYR2V0Q3Vy
cmVudENvbnRleHQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5HTFhDdXJyZW50Q29udGV4dFdy
YXBwZXIoKSB7IH0KK307CisKK2NsYXNzIEdMWE9mZlNjcmVlbkNvbnRleHQgOiBwdWJsaWMgR0xQ
bGF0Zm9ybUNvbnRleHQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdMWE9mZlNjcmVlbkNv
bnRleHQpOworCitwdWJsaWM6CisgICAgR0xYT2ZmU2NyZWVuQ29udGV4dCgpOworICAgIHZpcnR1
YWwgfkdMWE9mZlNjcmVlbkNvbnRleHQoKTsKKyAgICBib29sIGluaXRpYWxpemUoR0xQbGF0Zm9y
bVN1cmZhY2UqKTsKKyAgICBib29sIHBsYXRmb3JtTWFrZUN1cnJlbnQoR0xQbGF0Zm9ybVN1cmZh
Y2UqKTsKKyAgICB2b2lkIHBsYXRmb3JtUmVsZWFzZUN1cnJlbnQoKTsKKyAgICB2b2lkIGRlc3Ry
b3koKTsKKyAgICBib29sIGlzQ3VycmVudENvbnRleHQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICB2b2lkIGZyZWVSZXNvdXJjZXMoKTsKKyAgICBEaXNwbGF5KiBtX2Rpc3BsYXk7Cit9OworCit9
CisKKyNlbmRpZiAvLyBHTFhDVVJSRU5UQ09OVEVYV1JBUFBFUl9ICisKKyNlbmRpZgpkaWZmIC0t
Z2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJm
YWNlLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xY
U3VyZmFjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNiOWMxMAot
LS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvR0xYU3VyZmFjZS5jcHAKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHTFhTdXJmYWNlLmgiCisKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEhBVkUoR0xYKQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1NoYXJlZFgxMVJlc291cmNlcyogU2hhcmVkWDExUmVzb3VyY2VzOjptX3N0YXRp
Y1NoYXJlZFJlc291cmNlID0gMDsKKworc3RhdGljIGNvbnN0IGludCBwYnVmZmVyQXR0cmlidXRl
c1tdID0geyBHTFhfUEJVRkZFUl9XSURUSCwgMSwgR0xYX1BCVUZGRVJfSEVJR0hULCAxLCAwIH07
CisKK0dMWFN1cmZhY2U6OkdMWFN1cmZhY2UoKQorICAgIDogR0xQbGF0Zm9ybVN1cmZhY2UoKQor
eworICAgIG1fc2hhcmVkUmVzb3VyY2VzID0gU2hhcmVkWDExUmVzb3VyY2VzOjpjcmVhdGUoKTsK
KyAgICBtX3NoYXJlZERpc3BsYXkgPSBtX3NoYXJlZFJlc291cmNlcy0+ZGlzcGxheSgpOworfQor
CitHTFhTdXJmYWNlOjp+R0xYU3VyZmFjZSgpCit7Cit9CisKK1hWaXN1YWxJbmZvKiBHTFhTdXJm
YWNlOjp2aXN1YWxJbmZvKCkKK3sKKyAgICByZXR1cm4gbV9zaGFyZWRSZXNvdXJjZXMtPnZpc3Vh
bEluZm8oKTsKK30KKworV2luZG93IEdMWFN1cmZhY2U6OnhXaW5kb3coKQoreworICAgIHJldHVy
biBtX3NoYXJlZFJlc291cmNlcy0+Z2V0WFdpbmRvdygpOworfQorCitHTFhGQkNvbmZpZyBHTFhT
dXJmYWNlOjpwQnVmZmVyQ29uZmlndXJhdGlvbigpCit7CisgICAgcmV0dXJuIG1fc2hhcmVkUmVz
b3VyY2VzLT5wQnVmZmVyQ29udGV4dENvbmZpZygpOworfQorCitHTFhGQkNvbmZpZyBHTFhTdXJm
YWNlOjp0cmFuc3BvcnRTdXJmYWNlQ29uZmlndXJhdGlvbigpCit7CisgICAgcmV0dXJuIG1fc2hh
cmVkUmVzb3VyY2VzLT5zdXJmYWNlQ29udGV4dENvbmZpZygpOworfQorCitib29sIEdMWFN1cmZh
Y2U6OmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpCit7CisgICAgcmV0dXJuIG1fc2hhcmVk
UmVzb3VyY2VzLT5pc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKTsKK30KKworR0xYVHJhbnNw
b3J0U3VyZmFjZTo6R0xYVHJhbnNwb3J0U3VyZmFjZSgpCisgICAgOiBHTFhTdXJmYWNlKCkKK3sK
KyAgICBpbml0aWFsaXplKCk7Cit9CisKK0dMWFRyYW5zcG9ydFN1cmZhY2U6On5HTFhUcmFuc3Bv
cnRTdXJmYWNlKCkKK3sKK30KKworUGxhdGZvcm1TdXJmYWNlQ29uZmlnIEdMWFRyYW5zcG9ydFN1
cmZhY2U6OmNvbmZpZ3VyYXRpb24oKQoreworICAgIHJldHVybiB0cmFuc3BvcnRTdXJmYWNlQ29u
ZmlndXJhdGlvbigpOworfQorCit2b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2U6OnN3YXBCdWZmZXJz
KCkKK3sKKyAgICBpZiAoIW1fZHJhd2FibGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICht
X3Jlc3RvcmVOZWVkZWQpIHsKKyAgICAgICAgR0xpbnQgb2xkRkJPOworICAgICAgICBnbEdldElu
dGVnZXJ2KEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcsICZvbGRGQk8pOworICAgICAgICBnbEJpbmRG
cmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7CisgICAgICAgIGdsWFN3YXBCdWZmZXJzKHNo
YXJlZERpc3BsYXkoKSwgbV9kcmF3YWJsZSk7CisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCBvbGRGQk8pOworICAgIH0gZWxzZQorICAgICAgICBnbFhTd2FwQnVmZmVy
cyhzaGFyZWREaXNwbGF5KCksIG1fZHJhd2FibGUpOworfQorCit2b2lkIEdMWFRyYW5zcG9ydFN1
cmZhY2U6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCit7CisgICAgR0xQbGF0
Zm9ybVN1cmZhY2U6OnNldEdlb21ldHJ5KG5ld1JlY3QpOworICAgIGludCB3aWR0aCA9IG5ld1Jl
Y3Qud2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0gbmV3UmVjdC5oZWlnaHQoKTsKKyAgICBYUmVz
aXplV2luZG93KHNoYXJlZERpc3BsYXkoKSwgbV9kcmF3YWJsZSwgd2lkdGgsIGhlaWdodCk7Cit9
CisKK3ZvaWQgR0xYVHJhbnNwb3J0U3VyZmFjZTo6aW5pdGlhbGl6ZSgpCit7CisgICAgRGlzcGxh
eSogZGlzcGxheSA9IHNoYXJlZERpc3BsYXkoKTsKKyAgICBHTFhGQkNvbmZpZyBjb25maWcgPSB0
cmFuc3BvcnRTdXJmYWNlQ29uZmlndXJhdGlvbigpOworICAgIGlmICghY29uZmlnKQorICAgICAg
ICByZXR1cm47CisKKyAgICBYVmlzdWFsSW5mbyogdmlzSW5mbyA9IHZpc3VhbEluZm8oKTsKKyAg
ICBpZiAoIXZpc0luZm8pCisgICAgICAgIHJldHVybjsKKworICAgIENvbG9ybWFwIGNtYXAgPSBY
Q3JlYXRlQ29sb3JtYXAoZGlzcGxheSwgeFdpbmRvdygpLCB2aXNJbmZvLT52aXN1YWwsIEFsbG9j
Tm9uZSk7CisgICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgYXR0cmlidXRlOworICAgIGF0dHJpYnV0
ZS5iYWNrZ3JvdW5kX3BpeGVsID0gV2hpdGVQaXhlbChkaXNwbGF5LCAwKTsKKyAgICBhdHRyaWJ1
dGUuYm9yZGVyX3BpeGVsID0gQmxhY2tQaXhlbChkaXNwbGF5LCAwKTsKKyAgICBhdHRyaWJ1dGUu
Y29sb3JtYXAgPSBjbWFwOworICAgIG1fZHJhd2FibGUgID0gWENyZWF0ZVdpbmRvdyhkaXNwbGF5
LCB4V2luZG93KCksIDAsIDAsIDEsIDEsIDAsIHZpc0luZm8tPmRlcHRoLCBJbnB1dE91dHB1dCwg
dmlzSW5mby0+dmlzdWFsLCBDV0JhY2tQaXhlbCB8IENXQm9yZGVyUGl4ZWwgfCBDV0NvbG9ybWFw
LCAmYXR0cmlidXRlKTsKKyAgICBpZiAoIW1fZHJhd2FibGUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFhTZXRXaW5kb3dCYWNrZ3JvdW5kUGl4bWFwKGRpc3BsYXksIG1fZHJhd2FibGUsIDApOwor
ICAgIFhDb21wb3NpdGVSZWRpcmVjdFdpbmRvdyhkaXNwbGF5LCBtX2RyYXdhYmxlLCBDb21wb3Np
dGVSZWRpcmVjdE1hbnVhbCk7CisKKyAgICBpZiAoaXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVk
KCkpCisgICAgICAgIFhNYXBXaW5kb3coZGlzcGxheSwgbV9kcmF3YWJsZSk7Cit9CisKK3ZvaWQg
R0xYVHJhbnNwb3J0U3VyZmFjZTo6ZGVzdHJveSgpCit7CisgICAgZnJlZVJlc291cmNlcygpOwor
ICAgIEdMUGxhdGZvcm1TdXJmYWNlOjpkZXN0cm95KCk7Cit9CisKK3ZvaWQgR0xYVHJhbnNwb3J0
U3VyZmFjZTo6ZnJlZVJlc291cmNlcygpCit7CisgICAgaWYgKCFtX2RyYXdhYmxlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBHTFBsYXRmb3JtU3VyZmFjZTo6ZGVzdHJveSgpOworICAgIERpc3Bs
YXkqIGRpc3BsYXkgPSBzaGFyZWREaXNwbGF5KCk7CisgICAgaWYgKCFkaXNwbGF5KQorICAgICAg
ICByZXR1cm47CisKKyAgICBYRGVzdHJveVdpbmRvdyhkaXNwbGF5LCBtX2RyYXdhYmxlKTsKKyAg
ICBtX2RyYXdhYmxlID0gMDsKK30KKworR0xYUEJ1ZmZlcjo6R0xYUEJ1ZmZlcigpCisgICAgOiBH
TFhTdXJmYWNlKCkKK3sKKyAgICBpbml0aWFsaXplKCk7Cit9CisKK0dMWFBCdWZmZXI6On5HTFhQ
QnVmZmVyKCkKK3sKK30KKwordm9pZCBHTFhQQnVmZmVyOjppbml0aWFsaXplKCkKK3sKKyAgICBE
aXNwbGF5KiBkaXNwbGF5ID0gc2hhcmVkRGlzcGxheSgpOworICAgIEdMWEZCQ29uZmlnIGNvbmZp
ZyA9IHBCdWZmZXJDb25maWd1cmF0aW9uKCk7CisgICAgaWYgKCFjb25maWcpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fZHJhd2FibGUgPSBnbFhDcmVhdGVQYnVmZmVyKGRpc3BsYXksIGNvbmZp
ZywgcGJ1ZmZlckF0dHJpYnV0ZXMpOworfQorCitQbGF0Zm9ybVN1cmZhY2VDb25maWcgR0xYUEJ1
ZmZlcjo6Y29uZmlndXJhdGlvbigpCit7CisgICAgcmV0dXJuIHBCdWZmZXJDb25maWd1cmF0aW9u
KCk7Cit9CisKK3ZvaWQgR0xYUEJ1ZmZlcjo6ZGVzdHJveSgpCit7CisgICAgZnJlZVJlc291cmNl
cygpOworfQorCit2b2lkIEdMWFBCdWZmZXI6OmZyZWVSZXNvdXJjZXMoKQoreworICAgIGlmICgh
bV9kcmF3YWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR0xQbGF0Zm9ybVN1cmZhY2U6OmRl
c3Ryb3koKTsKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gc2hhcmVkRGlzcGxheSgpOworICAgIGlm
ICghZGlzcGxheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2xYRGVzdHJveVBidWZmZXIoZGlz
cGxheSwgbV9kcmF3YWJsZSk7CisgICAgbV9kcmF3YWJsZSA9IDA7Cit9CisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L0dMWFN1cmZhY2UuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgvR0xYU3VyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNzEz
OTcKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaApAQCAtMCwwICsxLDI4OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBHTFhTdXJmYWNlX2gKKyNkZWZpbmUgR0xYU3VyZmFjZV9oCisKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEhBVkUoR0xYKQorCisjaW5jbHVkZSAiR0xQ
bGF0Zm9ybVN1cmZhY2UuaCIKKworI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hjb21wb3NpdGUu
aD4KKyNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YcmVuZGVyLmg+CisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2hhcmVkWDExUmVz
b3VyY2VzIDogcHVibGljIFdURjo6UmVmQ291bnRlZEJhc2UgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFNoYXJlZFgxMVJlc291cmNlcyk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTaGFyZWRYMTFSZXNvdXJjZXM+IGNyZWF0ZSgpCisgICAgeworICAgICAgICBpZiAoIW1f
c3RhdGljU2hhcmVkUmVzb3VyY2UpCisgICAgICAgICAgICBtX3N0YXRpY1NoYXJlZFJlc291cmNl
ID0gbmV3IFNoYXJlZFgxMVJlc291cmNlcygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
X3N0YXRpY1NoYXJlZFJlc291cmNlLT5yZWYoKTsKKworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bV9zdGF0aWNTaGFyZWRSZXNvdXJjZSk7CisgICAgfQorCisgICAgdm9pZCBkZXJlZigpCisgICAg
eworICAgICAgICBpZiAoZGVyZWZCYXNlKCkpIHsKKyAgICAgICAgICAgIG1fc3RhdGljU2hhcmVk
UmVzb3VyY2UgPSAwOworICAgICAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBXaW5kb3cgZ2V0WFdpbmRvdygpCisgICAgeworICAgICAgICBpZiAoIW1fd2luZG93
KSB7CisgICAgICAgICAgICBEaXNwbGF5KiBkcHkgPSBkaXNwbGF5KCk7CisgICAgICAgICAgICBY
U2V0V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGVzOworICAgICAgICAgICAgYXR0cmlidXRlcy5v
dmVycmlkZV9yZWRpcmVjdCA9IHRydWU7CisgICAgICAgICAgICBtX3dpbmRvdyA9IFhDcmVhdGVT
aW1wbGVXaW5kb3coZHB5LCBYRGVmYXVsdFJvb3RXaW5kb3coZHB5KSwgLTEsIC0xLCAxLCAxLCAw
LCBCbGFja1BpeGVsKGRweSwgMCksIFdoaXRlUGl4ZWwoZHB5LCAwKSk7CisgICAgICAgICAgICAv
LyBGcm9tIGh0dHA6Ly90cm9uY2hlLmNvbS9ndWkveC94bGliL3dpbmRvdy9hdHRyaWJ1dGVzLwor
ICAgICAgICAgICAgWENoYW5nZVdpbmRvd0F0dHJpYnV0ZXMoZHB5LCBtX3dpbmRvdywgQ1dPdmVy
cmlkZVJlZGlyZWN0LCAmYXR0cmlidXRlcyk7CisgICAgICAgICAgICBYTWFwV2luZG93KGRweSwg
bV93aW5kb3cpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1fd2luZG93OworICAgIH0K
KworICAgIERpc3BsYXkqIGRpc3BsYXkoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2Rpc3BsYXkp
CisgICAgICAgICAgICBtX2Rpc3BsYXkgPSBYT3BlbkRpc3BsYXkoMCk7CisKKyAgICAgICAgcmV0
dXJuIG1fZGlzcGxheTsKKyAgICB9CisKKyAgICBYVmlzdWFsSW5mbyogdmlzdWFsSW5mbygpCisg
ICAgeworICAgICAgICBpZiAoIW1fVmlzdWFsSW5mbykKKyAgICAgICAgICAgIHN1cmZhY2VDb250
ZXh0Q29uZmlnKCk7CisKKyAgICAgICAgcmV0dXJuIG1fVmlzdWFsSW5mbzsKKyAgICB9CisKKyAg
ICBHTFhGQkNvbmZpZyBjcmVhdGVDb25maWcoY29uc3QgaW50IGF0dHJpYnV0ZXNbXSkKKyAgICB7
CisgICAgICAgIGludCBudW1SZXR1cm5lZDsKKyAgICAgICAgbV9WaXN1YWxJbmZvID0gMDsKKyAg
ICAgICAgR0xYRkJDb25maWcqIHRlbXAgPSBnbFhDaG9vc2VGQkNvbmZpZyhkaXNwbGF5KCksIERl
ZmF1bHRTY3JlZW4oZGlzcGxheSgpKSwgYXR0cmlidXRlcywgJm51bVJldHVybmVkKTsKKworICAg
ICAgICBpZiAoIW51bVJldHVybmVkKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAg
R0xYRkJDb25maWcgc2VsZWN0ZWRDb25maWcgPSAwOworICAgICAgICBib29sIGZvdW5kID0gZmFs
c2U7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1SZXR1cm5lZDsgKytpKSB7Cisg
ICAgICAgICAgICBtX1Zpc3VhbEluZm8gPSBnbFhHZXRWaXN1YWxGcm9tRkJDb25maWcoZGlzcGxh
eSgpLCB0ZW1wW2ldKTsKKyAgICAgICAgICAgIGlmICghbV9WaXN1YWxJbmZvKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAobV9zdXBwb3J0c1hSZW5kZXJFeHRl
bnNpb24pIHsKKyAgICAgICAgICAgICAgICBYUmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJl
bmRlckZpbmRWaXN1YWxGb3JtYXQoZGlzcGxheSgpLCBtX1Zpc3VhbEluZm8tPnZpc3VhbCk7Cisg
ICAgICAgICAgICAgICAgaWYgKGZvcm1hdCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2sgPiAw
KSB7CisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29uZmlnID0gdGVtcFtpXTsKKyAgICAg
ICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fVmlzdWFsSW5mby0+
ZGVwdGggPT0gMzIpIHsKKyAgICAgICAgICAgICAgICBzZWxlY3RlZENvbmZpZyA9IHRlbXBbaV07
CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgLy8gRGlkIG5vdCBmaW5kIGFueSB2aXN1YWwgc3VwcG9ydGluZyBhbHBoYSwg
c2VsZWN0IHRoZSBmaXJzdCBhdmFpbGFibGUgY29uZmlnLgorICAgICAgICBpZiAoIWZvdW5kKSB7
CisgICAgICAgICAgICBzZWxlY3RlZENvbmZpZyA9IHRlbXBbMF07CisgICAgICAgICAgICBtX1Zp
c3VhbEluZm8gPSBnbFhHZXRWaXN1YWxGcm9tRkJDb25maWcobV9kaXNwbGF5LCB0ZW1wWzBdKTsK
KyAgICAgICAgfQorCisgICAgICAgIFhGcmVlKHRlbXApOworCisgICAgICAgIHJldHVybiBzZWxl
Y3RlZENvbmZpZzsKKyAgICB9CisKKyAgICBHTFhGQkNvbmZpZyBwQnVmZmVyQ29udGV4dENvbmZp
ZygpCisgICAgeworICAgICAgICBpZiAoIW1fcGJ1ZmZlcmZiQ29uZmlnKSB7CisgICAgICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IGF0dHJpYnV0ZXNbXSA9IHsKKyAgICAgICAgICAgICAgICBHTFhf
TEVWRUwsIDAsCisgICAgICAgICAgICAgICAgR0xYX0RSQVdBQkxFX1RZUEUsIEdMWF9QQlVGRkVS
X0JJVCwKKyAgICAgICAgICAgICAgICBHTFhfUkVOREVSX1RZUEUsICAgR0xYX1JHQkFfQklULAor
ICAgICAgICAgICAgICAgIEdMWF9SRURfU0laRSwgICAgICAxLAorICAgICAgICAgICAgICAgIEdM
WF9HUkVFTl9TSVpFLCAgICAxLAorICAgICAgICAgICAgICAgIEdMWF9CTFVFX1NJWkUsICAgICAx
LAorICAgICAgICAgICAgICAgIEdMWF9ET1VCTEVCVUZGRVIsICBHTF9GQUxTRSwKKyAgICAgICAg
ICAgICAgICBOb25lCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBpbnQgbnVtUmV0dXJu
ZWQ7CisgICAgICAgICAgICBHTFhGQkNvbmZpZyogdGVtcCA9IGdsWENob29zZUZCQ29uZmlnKGRp
c3BsYXkoKSwgRGVmYXVsdFNjcmVlbihkaXNwbGF5KCkpLCBhdHRyaWJ1dGVzLCAmbnVtUmV0dXJu
ZWQpOworICAgICAgICAgICAgaWYgKG51bVJldHVybmVkKQorICAgICAgICAgICAgICAgIG1fcGJ1
ZmZlcmZiQ29uZmlnID0gdGVtcFswXTsKKyAgICAgICAgICAgIFhGcmVlKHRlbXApOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIG1fcGJ1ZmZlcmZiQ29uZmlnOworICAgIH0KKworICAgIEdM
WEZCQ29uZmlnIHN1cmZhY2VDb250ZXh0Q29uZmlnKCkKKyAgICB7CisgICAgICAgIGlmICghbV9z
dXJmYWNlQ29udGV4dGZiQ29uZmlnKSB7CisgICAgICAgICAgICBzdGF0aWMgaW50IGF0dHJpYnV0
ZXNbXSA9IHsKKyAgICAgICAgICAgICAgICBHTFhfTEVWRUwsIDAsCisgICAgICAgICAgICAgICAg
R0xYX0RSQVdBQkxFX1RZUEUsIEdMWF9XSU5ET1dfQklULAorICAgICAgICAgICAgICAgIEdMWF9S
RU5ERVJfVFlQRSwgICBHTFhfUkdCQV9CSVQsCisgICAgICAgICAgICAgICAgR0xYX1JFRF9TSVpF
LCAgICAgIDEsCisgICAgICAgICAgICAgICAgR0xYX0dSRUVOX1NJWkUsICAgIDEsCisgICAgICAg
ICAgICAgICAgR0xYX0JMVUVfU0laRSwgICAgIDEsCisgICAgICAgICAgICAgICAgR0xYX0FMUEhB
X1NJWkUsICAgIDEsCisgICAgICAgICAgICAgICAgR0xYX0RFUFRIX1NJWkUsICAgIDEsCisgICAg
ICAgICAgICAgICAgR0xYX1hfVklTVUFMX1RZUEUsIEdMWF9UUlVFX0NPTE9SLAorICAgICAgICAg
ICAgICAgIEdMWF9ET1VCTEVCVUZGRVIsICBUcnVlLAorICAgICAgICAgICAgICAgIE5vbmUKKyAg
ICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGludCBldmVudEJhc2VwLCBlcnJvckJhc2VwOwor
ICAgICAgICAgICAgbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24gPSBYUmVuZGVyUXVlcnlFeHRl
bnNpb24oZGlzcGxheSgpLCAmZXZlbnRCYXNlcCwgJmVycm9yQmFzZXApOworCisgICAgICAgICAg
ICBtX3N1cmZhY2VDb250ZXh0ZmJDb25maWcgPSBjcmVhdGVDb25maWcoYXR0cmlidXRlcyk7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnOworICAg
IH0KKworICAgIGJvb2wgaXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbjsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgU2hhcmVkWDExUmVzb3VyY2VzKCkKKyAgICAgICAgOiBtX3N1cHBvcnRzWFJlbmRlckV4
dGVuc2lvbihmYWxzZSkKKyAgICAgICAgLCBtX21hcmtGb3JEZWxldGlvbihmYWxzZSkKKyAgICAg
ICAgLCBtX3dpbmRvdygwKQorICAgICAgICAsIG1fZGlzcGxheSgwKQorICAgICAgICAsIG1fcGJ1
ZmZlcmZiQ29uZmlnKDApCisgICAgICAgICwgbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnKDApCisg
ICAgICAgICwgbV9WaXN1YWxJbmZvKDApCisgICAgeworICAgIH0KKworICAgIH5TaGFyZWRYMTFS
ZXNvdXJjZXMoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2Rpc3BsYXkpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgaWYgKG1fd2luZG93KSB7CisgICAgICAgICAgICBYVW5tYXBXaW5k
b3cobV9kaXNwbGF5LCBtX3dpbmRvdyk7CisgICAgICAgICAgICBYRGVzdHJveVdpbmRvdyhtX2Rp
c3BsYXksIG1fd2luZG93KTsKKyAgICAgICAgICAgIG1fd2luZG93ID0gMDsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChtX3BidWZmZXJmYkNvbmZpZykKKyAgICAgICAgICAgIG1fcGJ1ZmZlcmZi
Q29uZmlnID0gMDsKKworICAgICAgICBpZiAobV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnKQorICAg
ICAgICAgICAgbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnID0gMDsKKworICAgICAgICBpZiAobV9W
aXN1YWxJbmZvKSB7CisgICAgICAgICAgICBYRnJlZShtX1Zpc3VhbEluZm8pOworICAgICAgICAg
ICAgbV9WaXN1YWxJbmZvID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIFhDbG9zZURpc3BsYXko
bV9kaXNwbGF5KTsKKyAgICAgICAgbV9kaXNwbGF5ID0gMDsKKyAgICB9CisKKyAgICBzdGF0aWMg
U2hhcmVkWDExUmVzb3VyY2VzKiBtX3N0YXRpY1NoYXJlZFJlc291cmNlOworICAgIGJvb2wgbV9z
dXBwb3J0c1hSZW5kZXJFeHRlbnNpb247CisgICAgYm9vbCBtX21hcmtGb3JEZWxldGlvbjsKKyAg
ICBXaW5kb3cgbV93aW5kb3c7CisgICAgRGlzcGxheSogbV9kaXNwbGF5OworICAgIEdMWEZCQ29u
ZmlnIG1fcGJ1ZmZlcmZiQ29uZmlnOworICAgIEdMWEZCQ29uZmlnIG1fc3VyZmFjZUNvbnRleHRm
YkNvbmZpZzsKKyAgICBYVmlzdWFsSW5mbyogbV9WaXN1YWxJbmZvOworfTsKKworY2xhc3MgR0xY
U3VyZmFjZSA6IHB1YmxpYyBHTFBsYXRmb3JtU3VyZmFjZSB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoR0xYU3VyZmFjZSk7CisKK3B1YmxpYzoKKyAgICBHTFhTdXJmYWNlKCk7CisgICAgdmly
dHVhbCB+R0xYU3VyZmFjZSgpOworCitwcm90ZWN0ZWQ6CisgICAgWFZpc3VhbEluZm8qIHZpc3Vh
bEluZm8oKTsKKyAgICBXaW5kb3cgeFdpbmRvdygpOworICAgIEdMWEZCQ29uZmlnIHBCdWZmZXJD
b25maWd1cmF0aW9uKCk7CisgICAgR0xYRkJDb25maWcgdHJhbnNwb3J0U3VyZmFjZUNvbmZpZ3Vy
YXRpb24oKTsKKyAgICBib29sIGlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpOworCitwcml2
YXRlOgorICAgIFJlZlB0cjxTaGFyZWRYMTFSZXNvdXJjZXM+IG1fc2hhcmVkUmVzb3VyY2VzOwor
fTsKKworY2xhc3MgR0xYVHJhbnNwb3J0U3VyZmFjZSA6IHB1YmxpYyBHTFhTdXJmYWNlIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShHTFhUcmFuc3BvcnRTdXJmYWNlKTsKKworcHVibGljOgor
ICAgIEdMWFRyYW5zcG9ydFN1cmZhY2UoKTsKKyAgICB2aXJ0dWFsIH5HTFhUcmFuc3BvcnRTdXJm
YWNlKCk7CisgICAgUGxhdGZvcm1TdXJmYWNlQ29uZmlnIGNvbmZpZ3VyYXRpb24oKTsKKyAgICB2
b2lkIHN3YXBCdWZmZXJzKCk7CisgICAgdm9pZCBzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JiBu
ZXdSZWN0KTsKKyAgICB2b2lkIGRlc3Ryb3koKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGluaXRp
YWxpemUoKTsKKyAgICB2b2lkIGZyZWVSZXNvdXJjZXMoKTsKK307CisKK2NsYXNzIEdMWFBCdWZm
ZXIgOiBwdWJsaWMgR0xYU3VyZmFjZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR0xYUEJ1
ZmZlcik7CisKK3B1YmxpYzoKKyAgICBHTFhQQnVmZmVyKCk7CisgICAgdmlydHVhbCB+R0xYUEJ1
ZmZlcigpOworICAgIFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBjb25maWd1cmF0aW9uKCk7CisgICAg
dm9pZCBkZXN0cm95KCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAg
dm9pZCBmcmVlUmVzb3VyY2VzKCk7Cit9OworCit9CisKKyNlbmRpZgorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175321</attachid>
            <date>2012-11-20 19:16:37 -0800</date>
            <delta_ts>2012-11-21 20:12:17 -0800</delta_ts>
            <desc>review changes</desc>
            <filename>reviewchanges.patch</filename>
            <type>text/plain</type>
            <size>68434</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDgzMGYzYmQuLmY3MTQ0ZWUgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3MiBAQAorMjAx
Mi0xMS0xOSAgS29uZGFwYWxseSBLYWx5YW4gIDxrYWx5YW4ua29uZGFwYWxseUBpbnRlbC5jb20+
CisKKyAgICAgICAgW0VGTF0gUmVmYWN0b3IgR3JhcGhpY3NDb250ZXh0M0RFRkwuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDEyOTEuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0
M0RFZmwgY3JlYXRlcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUsIHdoaWNoIGFjdHMgYXMgaXRz
IHBsYXRmb3JtIExheWVyLgorICAgICAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUgbmVlZHMg
dG8gaGFuZGxlIHRoZSBmb2xsb3dpbmcgY2FzZXM6CisgICAgICAgIDEpIFRvIHByb3ZpZGUgYW4g
b2ZmLXNjcmVlbiBidWZmZXIgZm9yIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW9uLgorICAgICAgICAy
KSBSZW5kZXIgdG8gYSBjdXJyZW50IGNvbnRleHQuCisgICAgICAgIDMpIFRvIHJlbmRlciBkaXJl
Y3RseSB0byBob3N0IHdpbmRvdy4gKGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLikKKworICAgICAg
ICBCZWZvcmUgdGhpcyBwYXRjaCBFdmFzIHdhcyB1c2VkIHRvIHByb3ZpZGUgdXMgYW4gb2ZmLXNj
cmVlbiBjb250ZXh0IGFuZCBidWZmZXIuIEdMWCB3YXMgdXNlZCBpbgorICAgICAgICB0aGUgb3Ro
ZXIgc3VwcG9ydGVkIGNhc2UuIEV2YXMgYWN0cyBhcyBhIGdsdWUgbGF5ZXIgdG8gcHJvdmlkZSB1
cyB3aXRoIGFwcHJvcHJpYXRlCisgICAgICAgIEdMIGJpbmRpbmdzIChPcGVuR0wgZnVuY3Rpb25z
KSwgR0wgY29udGV4dCBhbmQgZHJhd2FibGUgKHN1cmZhY2Uvb2Zmc2NyZWVuYnVmZmVyKS4KKyAg
ICAgICAgSG93ZXZlciwgcHJpbWl0aXZlIHJlbmRlcmluZyBpcyBoYW5kbGVkIGJ5IFRleHR1cmVN
YXBwZXIgYW5kIE9wZW5HTFNoaW1zIGlzIHVzZWQgdG8gbG9hZCB0aGUgbmVlZGVkIEdMIGZ1bmN0
aW9ucy4KKworICAgICAgICBJdCB3b3VsZCBiZSBmb3Igb3VyIGFkdmFudGFnZSB0byBiZSBhYmxl
IHRvIHRha2UgaW4gdG8gdXNlIGFueSBvcHRpbWlzYXRpb25zL2V4dGVuc2lvbnMKKyAgICAgICAg
cHJvdmlkZWQgYnkgdW5kZXJseWluZyBkcml2ZXJzLCBzcGVjaWZpYyB0byBhIHBsYXRmb3JtIChl
LmcuIEdMWF9NRVNBX2NvcHlfc3ViX2J1ZmZlciBldGMuKS4KKyAgICAgICAgVGhpcyBwYXRjaCBp
bnRyb2R1Y2VzIGFuIGFic3RyYWN0aW9uIGxheWVyIHRvIG1ha2UgaXQgZWFzeSB0byBhZGQgc3Vw
cG9ydCBmb3IgYW55IEdMIGJhY2tlbmQgKEdMWCwgRUdMIGV0Yy4pCisgICAgICAgIGFuZCBkbyBh
bnkgcGxhdGZvcm0gc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBhcyBuZWVkZWQgd2l0aG91dCBjb21w
bGljYXRpbmcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlIGNsYXNzLgorICAgICAgICBUd28gbmV3
IGNsYXNzZXMgYXJlIGFkZGVkIHdpdGggdGhpcyBpbXBsZW1lbnRhdGlvbiwgR0xQbGF0Zm9ybUNv
bnRleHQgYW5kIEdMUGxhdGZvcm1TdXJmYWNlLgorICAgICAgICBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGUgd291bGQgY3JlYXRlIGFuZCBvd24gYSBHTFBsYXRmb3JtQ29udGV4dCBhbmQgR0xQbGF0
Zm9ybVN1cmZhY2UuCisKKyAgICAgICAgR0xQbGF0Zm9ybUNvbnRleHQgZW5jYXBzdWxhdGVzIGFu
IE9wZW5HTCBjb250ZXh0IGhpZGluZyBhbnkgcGxhdGZvcm0gc3BlY2lmaWMgbWFuYWdlbWVudC4K
KyAgICAgICAgSXQgdXNlcyBHTCBleHRlbnNpb24gQVJCX3JvYnVzdG5lc3MgKHdoZW4gYXZhaWxh
YmxlKSB0byBkZXRlY3QgZHJpdmVyIHJlc2V0cy4KKyAgICAgICAgSXQgZGVmaW5lcyBhIHNpbXBs
ZSBpbnRlcmZhY2UgZm9yIHRoaW5ncyB0aGF0IG5lZWQgdG8gYmUgaGFuZGxlZCBieSB0aGUgY29u
dGV4dC4gU3VwcG9ydAorICAgICAgICBmb3IgbXVsdGktdGhyZWFkZWQgdXNhZ2UgYW5kIHNoYXJl
ZCBjb250ZXh0LWdyb3VwIHdvdWxkIGJlIGFkZGVkIGxhdGVyLgorCisgICAgICAgIEdMUGxhdGZv
cm1TdXJmYWNlIGVuY2Fwc3VsYXRlcyBhbiBPcGVuR0wgZHJhd2FibGUgaGlkaW5nIGFueSBwbGF0
Zm9ybSBzcGVjaWZpYyBtYW5hZ2VtZW50LgorICAgICAgICBJdCBkZWZpbmVzIGEgc2ltcGxlIGlu
dGVyZmFjZSBmb3IgdGhpbmdzIHRoYXQgbmVlZCB0byBiZSBoYW5kbGVkIGJ5IHRoZSBzdXJmYWNl
LgorICAgICAgICBJdCBjcmVhdGVzIGFuIG9mZi1zY3JlZW4gcmVuZGVyaW5nIGFyZWEuIEFueSBH
TFBsYXRmb3JtQ29udGV4dCAoY29tcGF0aWJsZSB3aXRoIHRoZSBzdXJmYWNlKQorICAgICAgICBj
YW4gYmUgdXNlZCB0byByZW5kZXIgaW50byB0aGlzIG9mZi1zY3JlZW4gYXJlYS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGFsc28gYWRkcyBHTFggaW1wbGVtZW50YXRpb24uIFRvIGtlZXAgdGhlIHBh
dGNoIHRvIG1pbmltdW0gRUdMIHN1cHBvcnQgd291bGQgYmUgYWRkZWQgaW4gYW5vdGhlciBjaGFu
Z2VzZXQuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpzZXRDb250ZXh0TG9zdENhbGxiYWNrKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlKToKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZSk6CisgICAgICAgIChHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnJlbGVhc2VS
ZXNvdXJjZXMpOgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzZXRDb250ZXh0
TG9zdENhbGxiYWNrKToKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAgIChHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmNyZWF0ZUdyYXBoaWNzU3VyZmFjZXMpOgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpjb3B5VG9HcmFwaGljc1N1cmZhY2UpOgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpncmFwaGljc1N1cmZhY2VUb2tlbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oOgorICAgICAgICAoR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xEZWZz
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1Db250ZXh0OjpjcmVhdGVDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1Db250ZXh0OjpjcmVhdGVPZmZTY3JlZW5Db250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1Db250ZXh0OjpjcmVhdGVDdXJyZW50
Q29udGV4dFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybUNvbnRleHQ6OkdM
UGxhdGZvcm1Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1Db250ZXh0Ojp+
R0xQbGF0Zm9ybUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybUNvbnRleHQ6
Om1ha2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1Db250ZXh0Ojppc1Zh
bGlkKToKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1Db250ZXh0OjpyZWxlYXNlQ3VycmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpHTFBsYXRmb3JtQ29udGV4dDo6aGFuZGxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1Db250ZXh0Ojppc0N1cnJlbnRDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1Db250ZXh0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkdMUGxhdGZvcm1Db250ZXh0OjpnZXRDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkdMUGxhdGZvcm1Db250ZXh0OjpwbGF0Zm9ybU1ha2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkdMUGxhdGZvcm1Db250ZXh0OjpwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdMUGxhdGZvcm1Db250ZXh0OjpkZXN0cm95KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKEdMUGxhdGZvcm1Db250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybVN1cmZhY2U6OmNyZWF0ZU9m
ZnNjcmVlblN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybVN1cmZhY2U6OmNy
ZWF0ZVRyYW5zcG9ydFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybVN1cmZh
Y2U6OkdMUGxhdGZvcm1TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1TdXJm
YWNlOjp+R0xQbGF0Zm9ybVN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybVN1
cmZhY2U6OmhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFBsYXRmb3JtU3VyZmFjZTo6Z2Vv
bWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybVN1cmZhY2U6OnNoYXJlZERpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybVN1cmZhY2U6OmNvbmZpZ3VyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybVN1cmZhY2U6OnN3YXBCdWZmZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1TdXJmYWNlOjpjb3B5VGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHTFBsYXRmb3JtU3VyZmFjZTo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6R0xQbGF0Zm9ybVN1cmZhY2U6OnNldEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNv
cmU6OkdMUGxhdGZvcm1TdXJmYWNlOjpkZXN0cm95KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKEdMUGxhdGZvcm1TdXJmYWNlKToKKyAgICAgICAgICAgIEdMWE9mZlNjcmVl
bkNvbnRleHQgY3JlYXRlcyBhbiBvZmYtc2NyZWVuIGNvbnRleHQuIFRoaXMgaXMgdXNlZCB3aGVu
CisgICAgICAgICAgICByZW5kZXJzdHlsZSBpcyBSZW5kZXJPZmZzY3JlZW4uCisgICAgICAgICAg
ICBJdCB1c2VzIEdMIGV4dGVuc2lvbiBHTFhfQVJCX2NyZWF0ZV9jb250ZXh0ICh3aGVuIGF2YWls
YWJsZSkKKyAgICAgICAgICAgIHRvIGNyZWF0ZSBhIGNvbnRleHQgZWxzZSBmYWxscyBiYWNrIHRv
IHVzZSBnbFhDcmVhdGVOZXdDb250ZXh0LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2dseC9HTFhDb250ZXh0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVBUkJFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OkdMWE9mZlNjcmVlbkNvbnRleHQ6OkdMWE9mZlNjcmVlbkNvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6R0xYT2ZmU2NyZWVuQ29udGV4dDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHTFhPZmZTY3JlZW5Db250ZXh0Ojp+R0xYT2ZmU2NyZWVuQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpHTFhPZmZTY3JlZW5Db250ZXh0Ojppc0N1cnJlbnRDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdMWE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRmb3JtTWFrZUN1cnJlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R0xYT2ZmU2NyZWVuQ29udGV4dDo6cGxhdGZvcm1SZWxlYXNlQ3Vy
cmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHTFhPZmZTY3JlZW5Db250ZXh0OjpmcmVlUmVzb3Vy
Y2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWE9mZlNjcmVlbkNvbnRleHQ6OmRlc3Ryb3kpOgor
ICAgICAgICAgICAgR0xYQ3VycmVudENvbnRleHRXcmFwcGVyIGFjdHMgYXMgYSB3cmFwcGVyIGZv
ciBjdXJyZW50IGNvbnRleHQuCisgICAgICAgICAgICBUaGlzIGlzIHVzZWQgd2hlbiByZW5kZXJz
dHlsZSBpcyBSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKEdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHTFhDdXJyZW50Q29udGV4dFdyYXBwZXI6OkdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHTFhDdXJyZW50Q29udGV4dFdyYXBwZXI6On5HTFhDdXJyZW50Q29u
dGV4dFdyYXBwZXIpOgorICAgICAgICAoR0xYT2ZmU2NyZWVuQ29udGV4dCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R0xYU3VyZmFjZTo6R0xYU3VyZmFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFhTdXJmYWNlOjp+R0xYU3VyZmFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHTFhTdXJmYWNlOjp2aXN1YWxJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkdM
WFN1cmZhY2U6OnhXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0xYU3VyZmFjZTo6cEJ1ZmZl
ckNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R0xYU3VyZmFjZTo6dHJhbnNwb3J0
U3VyZmFjZUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R0xYU3VyZmFjZTo6aXNY
UmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKToKKyAgICAgICAgICAgIEdMWFRyYW5zcG9ydFN1cmZh
Y2UgY3JlYXRlcyBXaW5kb3cgYW5kIHVzZXMgaXQgYXMgYW4gb2ZmLXNjcmVlbiBzdXJmYWNlLgor
ICAgICAgICAgICAgQW55IEdMQ29udGV4dCB0aGF0IHdhcyBjcmVhdGVkIHdpdGggcmVzcGVjdCB0
byBjb25maWd1cmF0aW9uIGNhbiBiZSB1c2VkCisgICAgICAgICAgICB0byByZW5kZXIgaW50byB0
aGlzLgorICAgICAgICAgICAgVGhpcyBpcyB1c2VkIHdoZW4gY29udGVudHMgb2YgdGhlIGJ1ZmZl
ciBhcmUgdG8gYmUgcHJvdmlkZWQgdG8gVUkgUHJvY2VzcworICAgICAgICAgICAgZm9yIGRpc3Bs
YXkuCisgICAgICAgIChXZWJDb3JlOjpHTFhUcmFuc3BvcnRTdXJmYWNlOjpHTFhUcmFuc3BvcnRT
dXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6On5HTFhUcmFu
c3BvcnRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OmNv
bmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6c3dh
cEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6c2V0R2Vv
bWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6aW5pdGlhbGl6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFhUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OmZyZWVSZXNvdXJjZXMpOgorICAg
ICAgICAgICBHTFhQQnVmZmVyLCBDcmVhdGVzIGEgR0wgc3VyZmFjZSAoUEJ1ZmZlcikgdXNlZCBm
b3Igb2Zmc2NyZWVuIHJlbmRlcmluZy4KKyAgICAgICAgICAgQW55IEdMQ29udGV4dCB0aGF0IHdh
cyBjcmVhdGVkIHdpdGggcmVzcGVjdCB0byBjb25maWd1cmF0aW9uIGNhbiBiZSB1c2VkCisgICAg
ICAgICAgIHRvIHJlbmRlciBpbnRvIHRoaXMuCisgICAgICAgIChXZWJDb3JlOjpHTFhQQnVmZmVy
OjpHTFhQQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFBCdWZmZXI6On5HTFhQQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFBCdWZmZXI6OmluaXRpYWxpemUpOgorICAgICAgICAo
V2ViQ29yZTo6R0xYUEJ1ZmZlcjo6Y29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
TFhQQnVmZmVyOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFBCdWZmZXI6OmZyZWVS
ZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhT
dXJmYWNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICAgICBDcmVhdGVz
IFggcmVzb3VyY2VzIHdoaWNoIGFyZSBzaGFyZWQgYmV0d2VlbiBzdXJmYWNlIGFuZCBjb250ZXh0
LgorICAgICAgICAoU2hhcmVkWDExUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJl
ZFgxMVJlc291cmNlczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJlc291
cmNlczo6ZGVyZWYpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkWDExUmVzb3VyY2VzOjpnZXRY
V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJlc291cmNlczo6ZGlzcGxheSk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRYMTFSZXNvdXJjZXM6OnZpc3VhbEluZm8pOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkWDExUmVzb3VyY2VzOjpjcmVhdGVDb25maWcpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkWDExUmVzb3VyY2VzOjpwQnVmZmVyQ29udGV4dENvbmZpZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRYMTFSZXNvdXJjZXM6OnN1cmZhY2VDb250ZXh0Q29uZmln
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJlc291cmNlczo6aXNYUmVuZGVyRXh0ZW5z
aW9uU3VwcG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJlc291cmNlczo6U2hh
cmVkWDExUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJlc291cmNlczo6
flNoYXJlZFgxMVJlc291cmNlcyk6CisgICAgICAgIChHTFhTdXJmYWNlKToKKyAgICAgICAgKEdM
WFRyYW5zcG9ydFN1cmZhY2UpOgorICAgICAgICAoR0xYUEJ1ZmZlcik6CisKIDIwMTItMTEtMTkg
IEVsbGlvdHQgU3ByZWhuICA8ZXNwcmVobkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVtb3Zl
IHVubmVlZGVkIG51bGwgY2hlY2sgaW4gTm9kZVJlbmRlcmVyRmFjdG9yeTo6Y3JlYXRlUmVuZGVy
ZXJJZk5lZWRlZApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIFNv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IGNhOTI3MTAuLjY2MmJlNWEgMTAw
NjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTI1OSw2ICsyNTksNyBAQCBJRiAoV1RGX1VTRV8zRF9H
UkFQSElDUykKICAgTElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAg
IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbCIKICAgICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMiCisgICAgIiR7V0VCQ09SRV9ESVJ9L3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwIgogICApCiAgIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwpA
QCAtMjY4LDkgKzI2OSwxMyBAQCBJRiAoV1RGX1VTRV8zRF9HUkFQSElDUykKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2dseC9HTFhDb250ZXh0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL3F0
L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlci5jcHAKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKaW5kZXggZDEzOTEzMC4u
MmUyYTQ5MyAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9H
cmFwaGljc0NvbnRleHQzREVmbC5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICAg
IENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgICAgQ29weXJpZ2h0IChD
KSAyMDEyIEludGVsIENvcnBvcmF0aW9uLgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNyw3ICsy
OCw2IEBACiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJPcGVuR0xTaGlt
cy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSA8R0wvZ2x4
Lmg+CiAKICNpZiBVU0UoT1BFTkdMX0VTXzIpCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdM
RVMuaCIKQEAgLTM5LDYgKzM5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29u
dGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBSZW5kZXJT
dHlsZSByZW5kZXJTdHlsZSkKIHsKKyAgICBpZiAocmVuZGVyU3R5bGUgPT0gUmVuZGVyRGlyZWN0
bHlUb0hvc3RXaW5kb3cpCisgICAgICAgIHJldHVybiAwOworCiAgICAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJz
LCBob3N0V2luZG93LCByZW5kZXJTdHlsZSkpOwogICAgIHJldHVybiBjb250ZXh0LT5tX3ByaXZh
dGUgPyBjb250ZXh0LnJlbGVhc2UoKSA6IDA7CiB9CkBAIC02NywyOSArNzAsMTIgQEAgR3JhcGhp
Y3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIGF0dHJzLCBIb3N0V2kKICAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQogICAg
ICwgbV9wcml2YXRlKGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUodGhpcywg
aG9zdFdpbmRvdywgcmVuZGVyU3R5bGUpKSkKIHsKLSAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsK
LQotICAgIGlmICghbV9wcml2YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGF0aWMgYm9v
bCBpbml0aWFsaXplZFNoaW1zID0gZmFsc2U7Ci0gICAgc3RhdGljIGJvb2wgc3VjY2VzcyA9IHRy
dWU7Ci0gICAgaWYgKCFpbml0aWFsaXplZFNoaW1zKSB7Ci0gICAgICAgIHN1Y2Nlc3MgPSBpbml0
aWFsaXplT3BlbkdMU2hpbXMoKTsKLSAgICAgICAgaW5pdGlhbGl6ZWRTaGltcyA9IHRydWU7Ci0g
ICAgfQotICAgIGlmICghc3VjY2VzcykgeworICAgIGlmICghbV9wcml2YXRlIHx8ICFtX3ByaXZh
dGUtPm1fcGxhdGZvcm1Db250ZXh0KSB7CiAgICAgICAgIG1fcHJpdmF0ZSA9IG51bGxwdHI7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAocmVuZGVyU3R5bGUgPT0gUmVuZGVyVG9D
dXJyZW50R0xDb250ZXh0KSB7Ci0gICAgICAgIC8vIEV2YXMgZG9lc24ndCBhbGxvdyBpbmNsdWRp
bmcgZ2wgaGVhZGVycyBhbmQgRXZhc19HTCBoZWFkZXJzIGF0IHRoZSBzYW1lIHRpbWUsCi0gICAg
ICAgIC8vIHNvIHdlIG5lZWQgdG8gcXVlcnkgdGhlIGN1cnJlbnQgZ2wgY29udGV4dC9zdXJmYWNl
IGhlcmUgaW5zdGVhZCBvZiBpbiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuCi0gICAgICAgIHZv
aWQqIGN1cnJlbnRDb250ZXh0ID0gKHZvaWQqKWdsWEdldEN1cnJlbnRDb250ZXh0KCk7Ci0gICAg
ICAgIHZvaWQqIGN1cnJlbnRTdXJmYWNlID0gKHZvaWQqKWdsWEdldEN1cnJlbnREcmF3YWJsZSgp
OwotICAgICAgICBtX3ByaXZhdGUtPnNldEN1cnJlbnRHTENvbnRleHQoY3VycmVudENvbnRleHQs
IGN1cnJlbnRTdXJmYWNlKTsKLSAgICB9CisgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CiAKICAg
ICBpZiAocmVuZGVyU3R5bGUgPT0gUmVuZGVyT2Zmc2NyZWVuKSB7CiAgICAgICAgIC8vIENyZWF0
ZSBidWZmZXJzIGZvciB0aGUgY2FudmFzIEZCTy4KQEAgLTE0NywxNCArMTMzLDE5IEBAIEdyYXBo
aWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBhdHRycywgSG9zdFdpCiAgICAgZ2xFbmFibGUoR0xfUE9JTlRfU1BSSVRFKTsKICAgICBn
bEVuYWJsZShHTF9WRVJURVhfUFJPR1JBTV9QT0lOVF9TSVpFKTsKICNlbmRpZgorICAgIGdsQ2xl
YXJDb2xvcigwLjAsIDAuMCwgMC4wLCAwLjApOwogfQogCiBHcmFwaGljc0NvbnRleHQzRDo6fkdy
YXBoaWNzQ29udGV4dDNEKCkKIHsKLSAgICBpZiAobV9yZW5kZXJTdHlsZSA9PSBSZW5kZXJUb0N1
cnJlbnRHTENvbnRleHQgfHwgIW1fcHJpdmF0ZSkKKyAgICBpZiAoIW1fcHJpdmF0ZSB8fCAhbWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbV9mYm8pIHsKKyAgICAgICAgbV9wcml2YXRlLT5yZWxlYXNlUmVz
b3VyY2VzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBnbERlbGV0ZVRleHR1cmVz
KDEsICZtX3RleHR1cmUpOwogCiAgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CkBAIC0xNjUs
NyArMTU2LDYgQEAgR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiAKICAg
ICAgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOwogICAgIH0g
ZWxzZSBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpIHsKLQogI2lmIFVTRShP
UEVOR0xfRVNfMikKICAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgpCiAgICAgICAgICAgICBnbERl
bGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhCdWZmZXIpOwpAQCAtMTc1LDcgKzE2NSw5IEBA
IEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQogI2VuZGlmCiAgICAgICAg
IGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwogICAgIH0K
KwogICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CisgICAgbV9wcml2YXRlLT5y
ZWxlYXNlUmVzb3VyY2VzKCk7CiB9CiAKIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhp
Y3NDb250ZXh0M0Q6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKQpAQCAtMTk3LDEyICsxODks
NiBAQCBQbGF0Zm9ybUxheWVyKiBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcigpIGNv
bnN0CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCgpCiB7Ci0g
ICAgaWYgKCFtX3ByaXZhdGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX3Jl
bmRlclN0eWxlID09IFJlbmRlclRvQ3VycmVudEdMQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KICAgICByZXR1cm4gbV9wcml2YXRlLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKIH0KIApA
QCAtMjE1LDkgKzIwMSw5IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlh
bnQoKSBjb25zdAogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRl
eHRMb3N0Q2FsbGJhY2soUGFzc093blB0cjxDb250ZXh0TG9zdENhbGxiYWNrPikgCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpzZXRDb250ZXh0TG9zdENhbGxiYWNrKFBhc3NPd25QdHI8Q29udGV4
dExvc3RDYWxsYmFjaz4gY2FsbEJhY2spCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBt
X3ByaXZhdGUtPnNldENvbnRleHRMb3N0Q2FsbGJhY2soY2FsbEJhY2spOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpzZXRFcnJvck1lc3NhZ2VDYWxsYmFjayhQYXNzT3duUHRyPEVycm9y
TWVzc2FnZUNhbGxiYWNrPikgCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKaW5kZXggNjJk
MGE2ZS4uYzlmYzRhMCAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcApAQCAtMSw1ICsx
LDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTE4LDE2MCArMTksMTA4IEBACiAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAKICNpZiBVU0UoM0RfR1JBUEhJQ1Mp
IHx8IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUuaCIKIAotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
Ikhvc3RXaW5kb3cuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgotI2luY2x1ZGUg
PEV2YXNfR0wuaD4KLSNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisjaW5jbHVkZSA8R0xFUzIv
Z2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisjZWxzZQorI2luY2x1ZGUgIk9wZW5H
TFNoaW1zLmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRl
clN0eWxlIHJlbmRlclN0eWxlKQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2hv
c3RXaW5kb3coaG9zdFdpbmRvdykKLSAgICAsIG1fZXZhc0dMKDApCi0gICAgLCBtX2V2YXNHTENv
bnRleHQoMCkKLSAgICAsIG1fZXZhc0dMU3VyZmFjZSgwKQotICAgICwgbV9nbENvbnRleHQoMCkK
LSAgICAsIG1fZ2xTdXJmYWNlKDApCi0gICAgLCBtX2FwaSgwKQotICAgICwgbV9yZW5kZXJTdHls
ZShyZW5kZXJTdHlsZSkKKyAgICAsIG1fcGVuZGluZ1N1cmZhY2VSZXNpemUoZmFsc2UpCiB7Ci0g
ICAgaWYgKHJlbmRlclN0eWxlID09IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJUb0N1cnJlbnRH
TENvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmIChtX2hvc3RXaW5kb3cgJiYgbV9o
b3N0V2luZG93LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSkgewogICAgICAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRoaXMgY29kZSBwYXRoIGZvciBXZWJLaXQxLgogICAgICAgICAvLyBHZXQgRXZhcyBv
YmplY3QgZnJvbSBwbGF0Zm9ybVBhZ2VDbGllbnQgYW5kIHNldCBFdmFzR0wgcmVsYXRlZCBtZW1i
ZXJzLgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRm9yIFdlYktpdDIsIHdlIG5l
ZWQgdG8gY3JlYXRlIGEgZHVtbXkgZWNvcmVFdmFzIG9iamVjdCBmb3IgdGhlIFdlYlByb2Nlc3Mg
aW4gb3JkZXIgdG8gdXNlIEV2YXNHTCBBUElzLgotI2lmZGVmIEhBVkVfRUNPUkVfWAotICAgIGVj
b3JlX2V2YXNfaW5pdCgpOwotICAgIG1fZWNvcmVFdmFzID0gYWRvcHRQdHIoZWNvcmVfZXZhc19n
bF94MTFfbmV3KDAsIDAsIDAsIDAsIDEsIDEpKTsKLSAgICBpZiAoIW1fZWNvcmVFdmFzKQorICAg
IG1fcGxhdGZvcm1Db250ZXh0ID0gR0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZUNvbnRleHQocmVu
ZGVyU3R5bGUpOworICAgIGlmICghbV9wbGF0Zm9ybUNvbnRleHQpCiAgICAgICAgIHJldHVybjsK
KworICAgIGlmIChyZW5kZXJTdHlsZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyT2Zmc2Ny
ZWVuKSB7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgICAgIG1fcGxhdGZvcm1TdXJm
YWNlID0gR0xQbGF0Zm9ybVN1cmZhY2U6OmNyZWF0ZVRyYW5zcG9ydFN1cmZhY2UoKTsKICNlbHNl
Ci0gICAgcmV0dXJuOworICAgICAgICBtX3BsYXRmb3JtU3VyZmFjZSA9IEdMUGxhdGZvcm1TdXJm
YWNlOjpjcmVhdGVPZmZzY3JlZW5TdXJmYWNlKCk7CiAjZW5kaWYKLQotICAgIEV2YXMqIGV2YXMg
PSBlY29yZV9ldmFzX2dldChtX2Vjb3JlRXZhcy5nZXQoKSk7Ci0gICAgaWYgKCFldmFzKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBDcmVhdGUgYSBuZXcgRXZhc19HTCBvYmplY3QgZm9yIGds
IHJlbmRlcmluZyBvbiBlZmwuCi0gICAgbV9ldmFzR0wgPSBldmFzX2dsX25ldyhldmFzKTsKLSAg
ICBpZiAoIW1fZXZhc0dMKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBHZXQgdGhlIEFQSSBm
b3IgcmVuZGVyaW5nIHVzaW5nIE9wZW5HTC4KLSAgICAvLyBUaGlzIHJldHVybnMgYSBzdHJ1Y3R1
cmUgdGhhdCBjb250YWlucyBhbGwgdGhlIE9wZW5HTCBmdW5jdGlvbnMgd2UgY2FuIHVzZSB0byBy
ZW5kZXIgaW4gRXZhcwotICAgIG1fYXBpID0gZXZhc19nbF9hcGlfZ2V0KG1fZXZhc0dMKTsKLSAg
ICBpZiAoIW1fYXBpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDcmVhdGUgYSBjb250ZXh0
Ci0gICAgbV9ldmFzR0xDb250ZXh0ID0gZXZhc19nbF9jb250ZXh0X2NyZWF0ZShtX2V2YXNHTCwg
MCk7Ci0gICAgaWYgKCFtX2V2YXNHTENvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IENyZWF0ZSBhIHN1cmZhY2UKLSAgICBpZiAoIWNyZWF0ZVN1cmZhY2UoMCwgcmVuZGVyU3R5bGUg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KKyAgICAgICAgaWYgKCFt
X3BsYXRmb3JtU3VyZmFjZSkgeworICAgICAgICAgICAgbV9wbGF0Zm9ybUNvbnRleHQgPSBudWxs
cHRyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX3Bs
YXRmb3JtQ29udGV4dC0+aW5pdGlhbGl6ZShtX3BsYXRmb3JtU3VyZmFjZS5nZXQoKSkgfHwgIW1f
cGxhdGZvcm1Db250ZXh0LT5tYWtlQ3VycmVudChtX3BsYXRmb3JtU3VyZmFjZS5nZXQoKSkpIHsK
KyAgICAgICAgICAgIHJlbGVhc2VSZXNvdXJjZXMoKTsKKyAgICAgICAgICAgIG1fcGxhdGZvcm1D
b250ZXh0ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIG1fcGxhdGZvcm1TdXJmYWNlID0gbnVsbHB0
cjsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBJbnRTaXplIHN1cmZhY2VTaXplKG1f
Y29udGV4dC0+bV9jdXJyZW50V2lkdGgsIG1fY29udGV4dC0+bV9jdXJyZW50SGVpZ2h0KTsKLSAg
ICBtX3N1cmZhY2VGbGFncyA9IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNUZXh0dXJlVGFyZ2V0
IHwgR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1NoYXJpbmc7Ci0gICAgaWYgKCFzdXJmYWNlU2l6
ZS5pc0VtcHR5KCkpCi0gICAgICAgIG1fZ3JhcGhpY3NTdXJmYWNlID0gR3JhcGhpY3NTdXJmYWNl
OjpjcmVhdGUoc3VyZmFjZVNpemUsIG1fc3VyZmFjZUZsYWdzKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBtX3N1cmZhY2VIYW5kbGUgPSBHcmFwaGljc1N1cmZhY2VUb2tlbihtX3BsYXRm
b3JtU3VyZmFjZS0+aGFuZGxlKCkpOworI2Vsc2UKKyAgICAgICAgfQogI2VuZGlmCisgICAgfQog
fQogCiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6On5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUo
KQogewotICAgIGlmICghbV9ldmFzR0wpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2V2
YXNHTFN1cmZhY2UpCi0gICAgICAgIGV2YXNfZ2xfc3VyZmFjZV9kZXN0cm95KG1fZXZhc0dMLCBt
X2V2YXNHTFN1cmZhY2UpOworfQogCi0gICAgaWYgKG1fZXZhc0dMQ29udGV4dCkKLSAgICAgICAg
ZXZhc19nbF9jb250ZXh0X2Rlc3Ryb3kobV9ldmFzR0wsIG1fZXZhc0dMQ29udGV4dCk7Cit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cmVsZWFzZVJlc291cmNlcygpCit7CisgICAgLy8g
UmVsZWFzZSB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBkcmF3YWJsZSBvbmx5IGFmdGVyIGRlc3Ry
b3lpbmcgYW55IGFzc29jaWF0ZWQgZ2wgcmVzb3VyY2VzLgorICAgIGlmIChtX3BsYXRmb3JtQ29u
dGV4dCkKKyAgICAgICAgbV9wbGF0Zm9ybUNvbnRleHQtPmRlc3Ryb3koKTsKIAotICAgIGV2YXNf
Z2xfZnJlZShtX2V2YXNHTCk7CisgICAgaWYgKG1fcGxhdGZvcm1TdXJmYWNlKQorICAgICAgICBt
X3BsYXRmb3JtU3VyZmFjZS0+ZGVzdHJveSgpOwogCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
Ci0gICAgbV9ncmFwaGljc1N1cmZhY2UuY2xlYXIoKTsKLSNlbmRpZgorICAgIGlmIChtX3BsYXRm
b3JtQ29udGV4dCkKKyAgICAgICAgbV9wbGF0Zm9ybUNvbnRleHQtPnJlbGVhc2VDdXJyZW50KCk7
CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVTdXJmYWNlKFBhZ2VD
bGllbnRFZmwqIHBhZ2VDbGllbnQsIGJvb2wgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCiti
b29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlU3VyZmFjZShQYWdlQ2xpZW50RWZs
KiwgYm9vbCkKIHsKLSAgICAvLyBJZiBSZW5kZXJTdHlsZSBpcyBSZW5kZXJPZmZzY3JlZW4sIHdl
IHdpbGwgYmUgcmVuZGVyaW5nIHRvIGEgRkJPLAotICAgIC8vIHNvIEV2YXNfR0xfU3VyZmFjZSBo
YXMgYSAxeDEgZHVtbXkgc3VyZmFjZS4KLSAgICBpbnQgd2lkdGggPSAxOwotICAgIGludCBoZWln
aHQgPSAxOwotCi0gICAgLy8gQnV0LCBpbiBjYXNlIG9mIFJlbmRlckRpcmVjdGx5VG9Ib3N0V2lu
ZG93LCB3ZSBoYXZlIHRvIHJlbmRlciB0byBhIHJlbmRlciB0YXJnZXQgc3VyZmFjZSB3aXRoIHRo
ZSBzYW1lIHNpemUgYXMgb3VyIHdlYlZpZXcuCi0gICAgaWYgKHJlbmRlckRpcmVjdGx5VG9Ib3N0
V2luZG93KSB7Ci0gICAgICAgIGlmICghcGFnZUNsaWVudCkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgLy8gRklYTUU6IEdldCBnZW9tZXRyeSBvZiB3ZWJWaWV3IGFuZCBzZXQg
c2l6ZSBvZiB0YXJnZXQgc3VyZmFjZS4KLSAgICB9Ci0KLSAgICBFdmFzX0dMX0NvbmZpZyBjb25m
aWcgPSB7Ci0gICAgICAgIEVWQVNfR0xfUkdCQV84ODg4LAotICAgICAgICBFVkFTX0dMX0RFUFRI
X0JJVF84LAotICAgICAgICBFVkFTX0dMX1NURU5DSUxfTk9ORSwgLy8gRklYTUU6IHNldCBFVkFT
X0dMX1NURU5DSUxfQklUXzggYWZ0ZXIgZml4aW5nIEV2YXNfR0wgYnVnLgotICAgICAgICBFVkFT
X0dMX09QVElPTlNfTk9ORSwKLSAgICAgICAgRVZBU19HTF9NVUxUSVNBTVBMRV9OT05FCi0gICAg
fTsKLQotICAgIC8vIENyZWF0ZSBhIG5ldyBFdmFzX0dMX1N1cmZhY2Ugb2JqZWN0Ci0gICAgbV9l
dmFzR0xTdXJmYWNlID0gZXZhc19nbF9zdXJmYWNlX2NyZWF0ZShtX2V2YXNHTCwgJmNvbmZpZywg
d2lkdGgsIGhlaWdodCk7Ci0gICAgaWYgKCFtX2V2YXNHTFN1cmZhY2UpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAocmVu
ZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpIHsKLSAgICAgICAgRXZhc19OYXRpdmVfU3VyZmFjZSBu
YXRpdmVTdXJmYWNlOwotICAgICAgICAvLyBGaWxsIGluIHRoZSBOYXRpdmUgU3VyZmFjZSBpbmZv
cm1hdGlvbiBmcm9tIHRoZSBnaXZlbiBFdmFzIEdMIHN1cmZhY2UuCi0gICAgICAgIGV2YXNfZ2xf
bmF0aXZlX3N1cmZhY2VfZ2V0KG1fZXZhc0dMLCBtX2V2YXNHTFN1cmZhY2UsICZuYXRpdmVTdXJm
YWNlKTsKLQotICAgICAgICAvLyBGSVhNRTogQ3JlYXRlIGFuZCBzcGVjaWFsbHkgc2V0IHVwIGEg
ZXZhc19vYmplY3Qgd2hpY2ggYWN0IGFzIHRoZSByZW5kZXIgdGFyZ2VyIHN1cmZhY2UuCi0gICAg
fQotI2VuZGlmCi0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnNldEN1
cnJlbnRHTENvbnRleHQodm9pZCogY29udGV4dCwgdm9pZCogc3VyZmFjZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpzZXRDb250ZXh0TG9zdENhbGxiYWNrKFBhc3NPd25QdHI8R3Jh
cGhpY3NDb250ZXh0M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2s+IGNhbGxCYWNrKQogewotICAgIG1f
Z2xDb250ZXh0ID0gY29udGV4dDsKLSAgICBtX2dsU3VyZmFjZSA9IHN1cmZhY2U7CisgICAgbV9j
b250ZXh0TG9zdENhbGxiYWNrID0gY2FsbEJhY2s7CiB9CiAKIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0M0QgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNE
KCkgY29uc3QKIHsKLSAgICBpZiAobV9yZW5kZXJTdHlsZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
UmVuZGVyVG9DdXJyZW50R0xDb250ZXh0KQotICAgICAgICByZXR1cm4gbV9nbENvbnRleHQ7Ci0K
LSAgICByZXR1cm4gbV9ldmFzR0xDb250ZXh0OworICAgIHJldHVybiBtX3BsYXRmb3JtQ29udGV4
dC0+aGFuZGxlKCk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYWtlQ29u
dGV4dEN1cnJlbnQoKQogewotICAgIHJldHVybiBldmFzX2dsX21ha2VfY3VycmVudChtX2V2YXNH
TCwgbV9ldmFzR0xTdXJmYWNlLCBtX2V2YXNHTENvbnRleHQpOworICAgIGJvb2wgc3VjY2VzcyA9
IG1fcGxhdGZvcm1Db250ZXh0LT5tYWtlQ3VycmVudChtX3BsYXRmb3JtU3VyZmFjZS5nZXQoKSk7
CisKKyAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgLy8g
RklYTUU6IFJlc3RvcmUgY29udGV4dAorICAgICAgICBpZiAobV9jb250ZXh0TG9zdENhbGxiYWNr
KQorICAgICAgICAgICAgbV9jb250ZXh0TG9zdENhbGxiYWNrLT5vbkNvbnRleHRMb3N0KCk7CisK
KyAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBzdWNjZXNzOwog
fQogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQpAQCAtMTgyLDI3ICsxMzEsMzYgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVN
YXBwZXIqLCBjb25zdCBGbG9hdFIKICNlbmRpZgogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NTdXJmYWNlcyhj
b25zdCBJbnRTaXplJiBzaXplKQordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0
ZUdyYXBoaWNzU3VyZmFjZXMoY29uc3QgSW50U2l6ZSYpCiB7Ci0gICAgaWYgKHNpemUuaXNFbXB0
eSgpKQotICAgICAgICBtX2dyYXBoaWNzU3VyZmFjZS5jbGVhcigpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9ncmFwaGljc1N1cmZhY2UgPSBHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZShzaXplLCBtX3N1
cmZhY2VGbGFncyk7CisgICAgbV9wZW5kaW5nU3VyZmFjZVJlc2l6ZSA9IHRydWU7CiB9CiAKIHVp
bnQzMl90IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y29weVRvR3JhcGhpY3NTdXJmYWNlKCkK
IHsKLSAgICBpZiAoIW1fZ3JhcGhpY3NTdXJmYWNlKQorICAgIGlmICghbV9wbGF0Zm9ybUNvbnRl
eHQgfHwgIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fZ3JhcGhpY3NTdXJmYWNlLT5jb3B5RnJvbVRleHR1
cmUobV9jb250ZXh0LT5tX3RleHR1cmUsIEludFJlY3QoMCwgMCwgbV9jb250ZXh0LT5tX2N1cnJl
bnRXaWR0aCwgbV9jb250ZXh0LT5tX2N1cnJlbnRIZWlnaHQpKTsKLSAgICByZXR1cm4gbV9ncmFw
aGljc1N1cmZhY2UtPnN3YXBCdWZmZXJzKCk7CisgICAgaWYgKG1fcGVuZGluZ1N1cmZhY2VSZXNp
emUpIHsKKyAgICAgICAgbV9wZW5kaW5nU3VyZmFjZVJlc2l6ZSA9IGZhbHNlOworICAgICAgICBt
X3BsYXRmb3JtU3VyZmFjZS0+c2V0R2VvbWV0cnkoSW50UmVjdCgwLCAwLCBtX2NvbnRleHQtPm1f
Y3VycmVudFdpZHRoLCBtX2NvbnRleHQtPm1fY3VycmVudEhlaWdodCkpOworICAgIH0KKworICAg
IGlmIChtX2NvbnRleHQtPm1fYXR0cnMuYW50aWFsaWFzKSB7CisjaWYgIVVTRShPUEVOR0xfRVNf
MikKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1f
Y29udGV4dC0+bV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdM
X0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2NvbnRleHQtPm1fZmJvKTsKKyAgICAgICAgZ2xCbGl0
RnJhbWVidWZmZXIoMCwgMCwgbV9jb250ZXh0LT5tX2N1cnJlbnRXaWR0aCwgbV9jb250ZXh0LT5t
X2N1cnJlbnRIZWlnaHQsIDAsIDAsIG1fY29udGV4dC0+bV9jdXJyZW50V2lkdGgsIG1fY29udGV4
dC0+bV9jdXJyZW50SGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOworI2Vu
ZGlmCisgICAgfQorCisgICAgbV9wbGF0Zm9ybVN1cmZhY2UtPnVwZGF0ZUNvbnRlbnRzKG1fY29u
dGV4dC0+bV90ZXh0dXJlLCBJbnRSZWN0KDAsIDAsIG1fY29udGV4dC0+bV9jdXJyZW50V2lkdGgs
IG1fY29udGV4dC0+bV9jdXJyZW50SGVpZ2h0KSwgbV9jb250ZXh0LT5tX2JvdW5kRkJPKTsKKyAg
ICByZXR1cm4gMDsKIH0KIAogR3JhcGhpY3NTdXJmYWNlVG9rZW4gR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpncmFwaGljc1N1cmZhY2VUb2tlbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZ3Jh
cGhpY3NTdXJmYWNlLT5leHBvcnRUb2tlbigpOworICAgIHJldHVybiBtX3N1cmZhY2VIYW5kbGU7
CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgKaW5kZXggMWFlNDM1MS4uM2Q2
MGI0ZSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFw
aGljc0NvbnRleHQzRFByaXZhdGUuaAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAg
ICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICAgIENvcHlyaWdodCAo
QykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsMjEg
KzIxLDE2IEBACiAjaWZuZGVmIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZV9oCiAjZGVmaW5lIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZV9oCiAKKyNpZiBVU0UoM0RfR1JBUEhJQ1MpIHx8IFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKwogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAjaW5jbHVkZSA8dGV4bWFwL1RleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyLmg+CiAjZW5kaWYKIAotI2lmIFVTRShHUkFQSElDU19TVVJGQUNF
KQotI2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFjZS5oIgotI2VuZGlmCi0KLXR5cGVkZWYgc3RydWN0
IF9FdmFzX0dMICAgICAgICAgICAgICAgRXZhc19HTDsKLXR5cGVkZWYgc3RydWN0IF9FdmFzX0dM
X1N1cmZhY2UgICAgICAgRXZhc19HTF9TdXJmYWNlOwotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xf
Q29udGV4dCAgICAgICBFdmFzX0dMX0NvbnRleHQ7Ci10eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9D
b25maWcgICAgICAgIEV2YXNfR0xfQ29uZmlnOwotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfQVBJ
ICAgICAgICAgICBFdmFzX0dMX0FQSTsKKyNpbmNsdWRlICJHTFBsYXRmb3JtQ29udGV4dC5oIgor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIGNsYXNzIFBhZ2VDbGllbnRFZmw7CiAKQEAg
LTQ4LDggKzQ0LDkgQEAgcHVibGljOgogICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFw
aGljc0NvbnRleHQzRCosIEhvc3RXaW5kb3cqLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5
bGUpOwogICAgIH5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUoKTsKIAorICAgIGJvb2wgY3JlYXRl
U3VyZmFjZShQYWdlQ2xpZW50RWZsKiwgYm9vbCk7CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7Ci0KKyAgICB2b2lkIHNldENv
bnRleHRMb3N0Q2FsbGJhY2soUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6Q29udGV4dExv
c3RDYWxsYmFjaz4gIGNhbGxCYWNrKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogI2VuZGlmCkBAIC02
MSwzMSArNTgsMjMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgR3JhcGhpY3NTdXJmYWNlVG9rZW4g
Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKSBjb25zdDsKICAgICB2b2lkIGNyZWF0ZUdyYXBoaWNzU3Vy
ZmFjZXMoY29uc3QgSW50U2l6ZSYpOwogI2VuZGlmCi0KICAgICBib29sIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGJvb2wgY3JlYXRlU3VyZmFjZShQYWdlQ2xpZW50RWZsKiwgYm9vbCByZW5k
ZXJEaXJlY3RseVRvRXZhc0dMT2JqZWN0KTsKLSAgICB2b2lkIHNldEN1cnJlbnRHTENvbnRleHQo
dm9pZCosIHZvaWQqKTsKLQorICAgIHZvaWQgcmVsZWFzZVJlc291cmNlcygpOwogICAgIEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKICAgICBHcmFwaGljc0NvbnRl
eHQzRCogbV9jb250ZXh0OwogICAgIEhvc3RXaW5kb3cqIG1faG9zdFdpbmRvdzsKKyAgICBPd25Q
dHI8R0xQbGF0Zm9ybUNvbnRleHQ+IG1fcGxhdGZvcm1Db250ZXh0OworICAgIE93blB0cjxHTFBs
YXRmb3JtU3VyZmFjZT4gbV9wbGF0Zm9ybVN1cmZhY2U7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZB
Q0UpCi0gICAgR3JhcGhpY3NTdXJmYWNlOjpGbGFncyBtX3N1cmZhY2VGbGFnczsKLSAgICBSZWZQ
dHI8R3JhcGhpY3NTdXJmYWNlPiBtX2dyYXBoaWNzU3VyZmFjZTsKKyAgICBHcmFwaGljc1N1cmZh
Y2VUb2tlbiBtX3N1cmZhY2VIYW5kbGU7CiAjZW5kaWYKLQorICAgIE93blB0cjxHcmFwaGljc0Nv
bnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjaz4gbV9jb250ZXh0TG9zdENhbGxiYWNrOwogICAg
IExpc3RIYXNoU2V0PEdDM0RlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsKLQotICAgIE93blB0cjxF
Y29yZV9FdmFzPiBtX2Vjb3JlRXZhczsKLSAgICBFdmFzX0dMKiBtX2V2YXNHTDsKLSAgICBFdmFz
X0dMX0NvbnRleHQqIG1fZXZhc0dMQ29udGV4dDsKLSAgICBFdmFzX0dMX1N1cmZhY2UqIG1fZXZh
c0dMU3VyZmFjZTsKLSAgICB2b2lkKiBtX2dsQ29udGV4dDsKLSAgICB2b2lkKiBtX2dsU3VyZmFj
ZTsKLSAgICBFdmFzX0dMX0FQSSogbV9hcGk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRl
clN0eWxlIG1fcmVuZGVyU3R5bGU7CisgICAgYm9vbCBtX3BlbmRpbmdTdXJmYWNlUmVzaXplOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gR3JhcGhpY3NMYXllckVm
bF9oCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dMRGVmcy5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HTERlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTM2
YTExCi0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HTERlZnMuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIEdMRGVmc19oCisjZGVmaW5lIEdMRGVmc19oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNE
T3BlbkdMRVMuaCIKKyNlbHNlCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCisjZW5k
aWYKKworI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisKKyNpbmNsdWRlIDxHTC9nbC5oPgorI2lu
Y2x1ZGUgPEdML2dsZXh0Lmg+CisjaWYgSEFWRShHTFgpCisjaW5jbHVkZSA8R0wvZ2x4Lmg+Cisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgSEFWRShHTFgpCit0eXBlZGVmIEdM
WENvbnRleHQgUGxhdGZvcm1Db250ZXh0OwordHlwZWRlZiBEaXNwbGF5KiBQbGF0Zm9ybURpc3Bs
YXk7Cit0eXBlZGVmIEdMWEZCQ29uZmlnIFBsYXRmb3JtU3VyZmFjZUNvbmZpZzsKK3R5cGVkZWYg
R0xYRHJhd2FibGUgUGxhdGZvcm1TdXJmYWNlOworI2Vsc2UKK3R5cGVkZWYgdm9pZCogUGxhdGZv
cm1Db250ZXh0OwordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybURpc3BsYXk7Cit0eXBlZGVmIHZvaWQq
IFBsYXRmb3JtU3VyZmFjZUNvbmZpZzsKK3R5cGVkZWYgdm9pZCogUGxhdGZvcm1TdXJmYWNlOwor
I2VuZGlmCisKK30KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5jcHAgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2IzMDg0Ci0tLSAvZGV2L251bGwKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4
dC5jcHAKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwg
Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJHTFBsYXRmb3JtQ29udGV4dC5oIgorCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaWYgSEFWRShHTFgpCisjaW5jbHVkZSAiR0xYQ29udGV4
dC5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0YXRpYyBQRk5HTEdFVEdSQVBISUNTUkVTRVRTVEFUVVNBUkJQUk9DIGds
R2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQiA9IDA7CitzdGF0aWMgR0xQbGF0Zm9ybUNvbnRleHQq
IG1fY3VycmVudENvbnRleHQgPSAwOworCitQYXNzT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBH
TFBsYXRmb3JtQ29udGV4dDo6Y3JlYXRlQ29udGV4dChHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVy
U3R5bGUgcmVuZGVyU3R5bGUpCit7CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWRTaGltcyA9
IGZhbHNlOworCisgICAgaWYgKCFpbml0aWFsaXplZFNoaW1zKSB7CisgICAgICAgIGluaXRpYWxp
emVkU2hpbXMgPSBpbml0aWFsaXplT3BlbkdMU2hpbXMoKTsKKyNpZiBIQVZFKEdMWCkKKyAgICAg
ICAgZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEdF
VEdSQVBISUNTUkVTRVRTVEFUVVNBUkJQUk9DPihnbFhHZXRQcm9jQWRkcmVzc0FSQihyZWludGVy
cHJldF9jYXN0PGNvbnN0IEdMdWJ5dGUqPigiZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCIikp
KTsKKyNlbmRpZgorICAgIH0KKworICAgIGlmICghaW5pdGlhbGl6ZWRTaGltcykKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBzd2l0Y2ggKHJlbmRlclN0eWxlKSB7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UmVuZGVyT2Zmc2NyZWVuOgorICAgICAgICBpZiAoT3duUHRyPEdM
UGxhdGZvcm1Db250ZXh0PiBnbHhDb250ZXh0ID0gR0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZU9m
ZlNjcmVlbkNvbnRleHQoKSkKKyAgICAgICAgICAgIHJldHVybiBnbHhDb250ZXh0LnJlbGVhc2Uo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyVG9D
dXJyZW50R0xDb250ZXh0OgorICAgICAgICBpZiAoT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBn
bHhDb250ZXh0ID0gR0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZUN1cnJlbnRDb250ZXh0V3JhcHBl
cigpKQorICAgICAgICAgICAgcmV0dXJuIGdseENvbnRleHQucmVsZWFzZSgpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdp
bmRvdzoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCitQYXNzT3duUHRyPEdMUGxhdGZvcm1Db250
ZXh0PiBHTFBsYXRmb3JtQ29udGV4dDo6Y3JlYXRlT2ZmU2NyZWVuQ29udGV4dCgpCit7CisjaWYg
SEFWRShHTFgpCisgICAgT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBnbHhDb250ZXh0ID0gYWRv
cHRQdHIobmV3IEdMWE9mZlNjcmVlbkNvbnRleHQoKSk7CisgICAgcmV0dXJuIGdseENvbnRleHQu
cmVsZWFzZSgpOworI2VuZGlmCisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUGFzc093blB0
cjxHTFBsYXRmb3JtQ29udGV4dD4gR0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZUN1cnJlbnRDb250
ZXh0V3JhcHBlcigpCit7CisjaWYgSEFWRShHTFgpCisgICAgT3duUHRyPEdMUGxhdGZvcm1Db250
ZXh0PiBnbHhDb250ZXh0ID0gYWRvcHRQdHIobmV3IEdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcigp
KTsKKyAgICByZXR1cm4gZ2x4Q29udGV4dC5yZWxlYXNlKCk7CisjZW5kaWYKKworICAgIHJldHVy
biBudWxscHRyOworfQorCitHTFBsYXRmb3JtQ29udGV4dDo6R0xQbGF0Zm9ybUNvbnRleHQoKQor
ICAgIDogbV9jb250ZXh0SGFuZGxlKDApCisgICAgLCBtX3Jlc2V0TG9zdENvbnRleHQoZmFsc2Up
Cit7Cit9CisKK0dMUGxhdGZvcm1Db250ZXh0Ojp+R0xQbGF0Zm9ybUNvbnRleHQoKQoreworICAg
IGlmICh0aGlzID09IG1fY3VycmVudENvbnRleHQpCisgICAgICAgIG1fY3VycmVudENvbnRleHQg
PSAwOworfQorCitib29sIEdMUGxhdGZvcm1Db250ZXh0OjptYWtlQ3VycmVudChHTFBsYXRmb3Jt
U3VyZmFjZSogc3VyZmFjZSkKK3sKKyAgICBtX2NvbnRleHRMb3N0ID0gZmFsc2U7CisKKyAgICBp
ZiAoaXNDdXJyZW50Q29udGV4dCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIG1fY3Vy
cmVudENvbnRleHQgPSAwOworCisgICAgaWYgKCFzdXJmYWNlIHx8IChzdXJmYWNlICYmICFzdXJm
YWNlLT5oYW5kbGUoKSkpCisgICAgICAgIHBsYXRmb3JtUmVsZWFzZUN1cnJlbnQoKTsKKyAgICBl
bHNlIGlmIChwbGF0Zm9ybU1ha2VDdXJyZW50KHN1cmZhY2UpKQorICAgICAgICBtX2N1cnJlbnRD
b250ZXh0ID0gdGhpczsKKworICAgIGlmIChtX3Jlc2V0TG9zdENvbnRleHQgJiYgZ2xHZXRHcmFw
aGljc1Jlc2V0U3RhdHVzQVJCKSB7CisgICAgICAgIEdMZW51bSBzdGF0dXMgPSBnbEdldEdyYXBo
aWNzUmVzZXRTdGF0dXNBUkIoKTsKKworICAgICAgICBzd2l0Y2ggKHN0YXR1cykgeworICAgICAg
ICBjYXNlIFBMQVRGT1JNQ09OVEVYVF9OT19FUlJPUjoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFBMQVRGT1JNQ09OVEVYVF9HVUlMVFlfQ09OVEVYVF9SRVNFVDoKKyAgICAgICAg
ICAgIG1fY29udGV4dExvc3QgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgUExBVEZPUk1DT05URVhUX0lOTk9DRU5UX0NPTlRFWFRfUkVTRVQ6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBQTEFURk9STUNPTlRFWFRfVU5LTk9XTl9DT05URVhUX1JFU0VU
OgorICAgICAgICAgICAgbV9jb250ZXh0TG9zdCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIG1fY3VycmVudENvbnRleHQ7Cit9CisKK2Jvb2wgR0xQbGF0Zm9ybUNvbnRl
eHQ6OmlzVmFsaWQoKSBjb25zdAoreworICAgIHJldHVybiAhbV9jb250ZXh0TG9zdDsKK30KKwor
dm9pZCBHTFBsYXRmb3JtQ29udGV4dDo6cmVsZWFzZUN1cnJlbnQoKQoreworICAgIGlmICghaXND
dXJyZW50Q29udGV4dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1cnJlbnRDb250ZXh0
ID0gMDsKKyAgICBwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KCk7Cit9CisKK1BsYXRmb3JtQ29udGV4
dCBHTFBsYXRmb3JtQ29udGV4dDo6aGFuZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250
ZXh0SGFuZGxlOworfQorCitib29sIEdMUGxhdGZvcm1Db250ZXh0Ojppc0N1cnJlbnRDb250ZXh0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHTFBsYXRmb3JtQ29udGV4
dDo6aW5pdGlhbGl6ZShHTFBsYXRmb3JtU3VyZmFjZSopCit7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK0dMUGxhdGZvcm1Db250ZXh0KiBHTFBsYXRmb3JtQ29udGV4dDo6Z2V0Q3VycmVudCgpCit7
CisgICAgcmV0dXJuIG1fY3VycmVudENvbnRleHQ7Cit9CisKK2Jvb2wgR0xQbGF0Zm9ybUNvbnRl
eHQ6OnBsYXRmb3JtTWFrZUN1cnJlbnQoR0xQbGF0Zm9ybVN1cmZhY2UqKQoreworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIEdMUGxhdGZvcm1Db250ZXh0OjpwbGF0Zm9ybVJlbGVhc2VDdXJy
ZW50KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdMUGxhdGZvcm1Db250
ZXh0OjpkZXN0cm95KCkKK3sKKyAgICBtX2NvbnRleHRIYW5kbGUgPSAwOworICAgIG1fcmVzZXRM
b3N0Q29udGV4dCA9IGZhbHNlOworCisgICAgaWYgKHRoaXMgPT0gbV9jdXJyZW50Q29udGV4dCkK
KyAgICAgICAgbV9jdXJyZW50Q29udGV4dCA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMTk1OWI3YgotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQuaApAQCAtMCwwICsxLDk0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdMUGxhdGZvcm1Db250ZXh0X2gKKyNkZWZpbmUg
R0xQbGF0Zm9ybUNvbnRleHRfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
CisjaW5jbHVkZSAiR0xEZWZzLmgiCisjaW5jbHVkZSAiR0xQbGF0Zm9ybVN1cmZhY2UuaCIKKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgor
CisvLyBFbmNhcHN1bGF0ZXMgYW4gT3BlbkdMIGNvbnRleHQsIGhpZGluZyBwbGF0Zm9ybSBzcGVj
aWZpYyBtYW5hZ2VtZW50LgorbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHTFBsYXRmb3Jt
Q29udGV4dCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR0xQbGF0Zm9ybUNvbnRleHQpOwor
CitwdWJsaWM6CisgICAgLy8gRnJvbSBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L2ds
ZXMvZXh0ZW5zaW9ucy9FWFQvRVhUX3JvYnVzdG5lc3MudHh0CisgICAgZW51bSBQbGF0Zm9ybUNv
bnRleHRSZXNldCB7CisgICAgICAgIFBMQVRGT1JNQ09OVEVYVF9OT19FUlJPUiA9IDB4MDAwMCwK
KyAgICAgICAgUExBVEZPUk1DT05URVhUX0dVSUxUWV9DT05URVhUX1JFU0VUID0gMHg4MjUzLAor
ICAgICAgICBQTEFURk9STUNPTlRFWFRfSU5OT0NFTlRfQ09OVEVYVF9SRVNFVCA9IDB4ODI1NCwK
KyAgICAgICAgUExBVEZPUk1DT05URVhUX1VOS05PV05fQ09OVEVYVF9SRVNFVCA9IDB4ODI1NSwK
KyAgICB9OworCisgICAgc3RhdGljIFBhc3NPd25QdHI8R0xQbGF0Zm9ybUNvbnRleHQ+IGNyZWF0
ZUNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlKTsKKworICAgIHZpcnR1YWwg
fkdMUGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZShHTFBs
YXRmb3JtU3VyZmFjZSopOworCisgICAgLy8gTWFrZXMgdGhpcyBhbmQgc3VyZmFjZSBhcyBjdXJy
ZW50IGNvbnRleHQgYW5kIGRyYXdhYmxlLgorICAgIC8vIENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3
aXRoIG5vIHN1cmZhY2UgaXMgc2FtZSBhcyBjYWxsaW5nIHJlbGVhc2VDdXJyZW50LgorICAgIC8v
IERvZXMgbm90aGluZyBpZiB0aGlzIGlzIGFscmVhZHkgY3VycmVudCBDb250ZXh0LgorICAgIGJv
b2wgbWFrZUN1cnJlbnQoR0xQbGF0Zm9ybVN1cmZhY2UqID0gMCk7CisKKyAgICAvLyBTZXRzIEN1
cnJlbnQgQ29udGV4dCBhbmQgRHJhd2FibGUgYXMgTnVsbC4KKyAgICAvLyBEb2Vzbid0IGhhdmUg
YW55IGVmZmVjdCBpZiB0aGlzIGlzIG5vdCB0aGUgY3VycmVudCBDb250ZXh0LgorICAgIHZvaWQg
cmVsZWFzZUN1cnJlbnQoKTsKKworICAgIFBsYXRmb3JtQ29udGV4dCBoYW5kbGUoKSBjb25zdDsK
KworICAgIHZpcnR1YWwgYm9vbCBpc0N1cnJlbnRDb250ZXh0KCkgY29uc3Q7CisKKyAgICBib29s
IGlzVmFsaWQoKSBjb25zdDsKKworICAgIC8vIERlc3Ryb3lzIGFueSBHTCByZXNvdXJjZXMgYXNz
b2NpYXRlZCB3aXRoIHRoaXMgY29udGV4dC4KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwor
CisgICAgc3RhdGljIEdMUGxhdGZvcm1Db250ZXh0KiBnZXRDdXJyZW50KCk7CisKK3Byb3RlY3Rl
ZDoKKyAgICBHTFBsYXRmb3JtQ29udGV4dCgpOworICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybU1h
a2VDdXJyZW50KEdMUGxhdGZvcm1TdXJmYWNlKik7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3Jt
UmVsZWFzZUN1cnJlbnQoKTsKKyAgICBQbGF0Zm9ybUNvbnRleHQgbV9jb250ZXh0SGFuZGxlOwor
ICAgIGJvb2wgbV9yZXNldExvc3RDb250ZXh0OworICAgIGJvb2wgbV9jb250ZXh0TG9zdDsKKwor
cHJpdmF0ZToKKyAgICBzdGF0aWMgUGFzc093blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gY3JlYXRl
T2ZmU2NyZWVuQ29udGV4dCgpOworICAgIHN0YXRpYyBQYXNzT3duUHRyPEdMUGxhdGZvcm1Db250
ZXh0PiBjcmVhdGVDdXJyZW50Q29udGV4dFdyYXBwZXIoKTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBHTE5hdGl2ZUNvbnRleHRfSApkaWZmIC0t
Z2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3Vy
ZmFjZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZv
cm1TdXJmYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTQ0ZGMw
Ci0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HTFBsYXRmb3JtU3VyZmFjZS5jcHAKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHTFBsYXRmb3JtU3VyZmFjZS5o
IgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaWYgSEFWRShHTFgpCisj
aW5jbHVkZSAiR0xYU3VyZmFjZS5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8R0xQbGF0Zm9ybVN1cmZh
Y2U+IEdMUGxhdGZvcm1TdXJmYWNlOjpjcmVhdGVPZmZzY3JlZW5TdXJmYWNlKCkKK3sKKyNpZiBI
QVZFKEdMWCkKKyAgICBPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFB0
cihuZXcgR0xYUEJ1ZmZlcigpKTsKKworICAgIGlmIChzdXJmYWNlLT5oYW5kbGUoKSkKKyAgICAg
ICAgcmV0dXJuIHN1cmZhY2UucmVsZWFzZSgpOworI2VuZGlmCisKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKworUGFzc093blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gR0xQbGF0Zm9ybVN1cmZhY2U6
OmNyZWF0ZVRyYW5zcG9ydFN1cmZhY2UoKQoreworI2lmIEhBVkUoR0xYKQorICAgIE93blB0cjxH
TFBsYXRmb3JtU3VyZmFjZT4gc3VyZmFjZSA9IGFkb3B0UHRyKG5ldyBHTFhUcmFuc3BvcnRTdXJm
YWNlKCkpOworCisgICAgaWYgKHN1cmZhY2UtPmhhbmRsZSgpKQorICAgICAgICByZXR1cm4gc3Vy
ZmFjZS5yZWxlYXNlKCk7CisjZW5kaWYKKworICAgIHJldHVybiBudWxscHRyOworfQorCitHTFBs
YXRmb3JtU3VyZmFjZTo6R0xQbGF0Zm9ybVN1cmZhY2UoKQorICAgIDogbV9yZXN0b3JlTmVlZGVk
KHRydWUpCisgICAgLCBtX2Zib0lkKDApCisgICAgLCBtX3NoYXJlZERpc3BsYXkoMCkKKyAgICAs
IG1fZHJhd2FibGUoMCkKK3sKK30KKworR0xQbGF0Zm9ybVN1cmZhY2U6On5HTFBsYXRmb3JtU3Vy
ZmFjZSgpCit7Cit9CisKK1BsYXRmb3JtU3VyZmFjZSBHTFBsYXRmb3JtU3VyZmFjZTo6aGFuZGxl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kcmF3YWJsZTsKK30KKworY29uc3QgSW50UmVjdCYg
R0xQbGF0Zm9ybVN1cmZhY2U6Omdlb21ldHJ5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZWN0
OworfQorCitQbGF0Zm9ybURpc3BsYXkgR0xQbGF0Zm9ybVN1cmZhY2U6OnNoYXJlZERpc3BsYXko
KSBjb25zdAoreworICAgIHJldHVybiBtX3NoYXJlZERpc3BsYXk7Cit9CisKK1BsYXRmb3JtU3Vy
ZmFjZUNvbmZpZyBHTFBsYXRmb3JtU3VyZmFjZTo6Y29uZmlndXJhdGlvbigpCit7CisgICAgcmV0
dXJuIDA7Cit9CisKK3ZvaWQgR0xQbGF0Zm9ybVN1cmZhY2U6OnN3YXBCdWZmZXJzKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdMUGxhdGZvcm1TdXJmYWNlOjpjb3B5VGV4
dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KQoreworICAg
IGlmICghbV9mYm9JZCkKKyAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvSWQpOwor
CisgICAgbV9yZXN0b3JlTmVlZGVkID0gdHJ1ZTsKKyAgICBpbnQgeCA9IHNvdXJjZVJlY3QueCgp
OworICAgIGludCB5ID0gc291cmNlUmVjdC55KCk7CisgICAgaW50IHdpZHRoID0gc291cmNlUmVj
dC53aWR0aCgpOworICAgIGludCBoZWlnaHQgPSBzb3VyY2VSZWN0LmhlaWdodCgpOworCisgICAg
Z2xQdXNoQXR0cmliKEdMX0NPTE9SX0JVRkZFUl9CSVQpOworCisgICAgR0xpbnQgcHJldmlvdXNG
Qk87CisgICAgZ2xHZXRJbnRlZ2VydihHTF9GUkFNRUJVRkZFUl9CSU5ESU5HLCAmcHJldmlvdXNG
Qk8pOworCisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfUkVBRF9GUkFNRUJVRkZFUiwgbV9mYm9J
ZCk7CisKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmUpOworICAgIGds
RnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfUkVBRF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNI
TUVOVDAsIEdMX1RFWFRVUkVfMkQsIHRleHR1cmUsIDApOworCisgICAgZ2xCaW5kRnJhbWVidWZm
ZXIoR0xfRFJBV19GUkFNRUJVRkZFUiwgMCk7CisKKyAgICBnbEJsaXRGcmFtZWJ1ZmZlcih4LCB5
LCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklU
LCBHTF9MSU5FQVIpOworCisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9SRUFEX0ZSQU1F
QlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgMCwgMCk7CisgICAg
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihH
TF9GUkFNRUJVRkZFUiwgcHJldmlvdXNGQk8pOworCisgICAgZ2xQb3BBdHRyaWIoKTsKK30KKwor
dm9pZCBHTFBsYXRmb3JtU3VyZmFjZTo6dXBkYXRlQ29udGVudHModWludDMyX3QgdGV4dHVyZSwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgR0x1aW50IGJpbmRGYm9JZCkKK3sKKyAg
ICBtX3Jlc3RvcmVOZWVkZWQgPSBmYWxzZTsKKworICAgIGlmICghbV9mYm9JZCkKKyAgICAgICAg
Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvSWQpOworCisgICAgaW50IHggPSBzb3VyY2VSZWN0
LngoKTsKKyAgICBpbnQgeSA9IHNvdXJjZVJlY3QueSgpOworICAgIGludCB3aWR0aCA9IHNvdXJj
ZVJlY3Qud2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQoKTsKKwor
ICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX1JFQURfRlJBTUVCVUZGRVIsIG1fZmJvSWQpOworICAg
IGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4dHVyZSk7CisgICAgZ2xGcmFtZWJ1ZmZl
clRleHR1cmUyRChHTF9SRUFEX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xf
VEVYVFVSRV8yRCwgdGV4dHVyZSwgMCk7CisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRFJBV19G
UkFNRUJVRkZFUiwgMCk7CisgICAgZ2xCbGl0RnJhbWVidWZmZXIoeCwgeSwgd2lkdGgsIGhlaWdo
dCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsK
KyAgICBzd2FwQnVmZmVycygpOworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfUkVBRF9G
UkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIDAsIDApOwor
ICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisgICAgZ2xCaW5kRnJhbWVidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIGJpbmRGYm9JZCk7Cit9CisKK3ZvaWQgR0xQbGF0Zm9ybVN1cmZh
Y2U6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCit7CisgICAgbV9yZWN0ID0g
bmV3UmVjdDsKK30KKwordm9pZCBHTFBsYXRmb3JtU3VyZmFjZTo6ZGVzdHJveSgpCit7CisgICAg
bV9yZWN0ID0gSW50UmVjdCgpOworCisgICAgaWYgKG1fZmJvSWQpCisgICAgICAgIGdsRGVsZXRl
RnJhbWVidWZmZXJzKDEsICZtX2Zib0lkKTsKKworICAgIG1fZmJvSWQgPSAwOworfQorCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HTFBsYXRmb3JtU3VyZmFjZS5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmYxMDY2YjcKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBHTFBsYXRmb3JtU3VyZmFjZV9oCisjZGVmaW5lIEdMUGxh
dGZvcm1TdXJmYWNlX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2lu
Y2x1ZGUgIkdMRGVmcy5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CisKKy8vIEVuY2Fwc3VsYXRlcyBhIHN1cmZhY2UgdGhhdCBjYW4g
YmUgcmVuZGVyZWQgdG8gd2l0aCBHTCwgaGlkaW5nIHBsYXRmb3JtCisvLyBzcGVjaWZpYyBtYW5h
Z2VtZW50LgorbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHTFBsYXRmb3JtU3VyZmFjZSB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR0xQbGF0Zm9ybVN1cmZhY2UpOworCitwdWJsaWM6
CisgICAgLy8gQ3JlYXRlcyBhIEdMIHN1cmZhY2UgdXNlZCBmb3Igb2Zmc2NyZWVuIHJlbmRlcmlu
Zy4KKyAgICBzdGF0aWMgUGFzc093blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gY3JlYXRlT2Zmc2Ny
ZWVuU3VyZmFjZSgpOworCisgICAgLy8gQ3JlYXRlcyBhIEdMIHN1cmZhY2UgdXNlZCBmb3Igb2Zm
c2NyZWVuIHJlbmRlcmluZy4gVGhlIHJlc3VsdHMgY2FuIGJlIHRyYW5zcG9ydGVkCisgICAgLy8g
dG8gdGhlIFVJIHByb2Nlc3MgZm9yIGRpc3BsYXkuCisgICAgc3RhdGljIFBhc3NPd25QdHI8R0xQ
bGF0Zm9ybVN1cmZhY2U+IGNyZWF0ZVRyYW5zcG9ydFN1cmZhY2UoKTsKKworICAgIHZpcnR1YWwg
fkdMUGxhdGZvcm1TdXJmYWNlKCk7CisKKyAgICBjb25zdCBJbnRSZWN0JiBnZW9tZXRyeSgpIGNv
bnN0OworCisgICAgLy8gR2V0IHRoZSB1bmRlcmx5aW5nIHBsYXRmb3JtIHNwZWNpZmljIHN1cmZh
Y2UgaGFuZGxlLgorICAgIFBsYXRmb3JtU3VyZmFjZSBoYW5kbGUoKSBjb25zdDsKKworICAgIFBs
YXRmb3JtRGlzcGxheSBzaGFyZWREaXNwbGF5KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQg
c3dhcEJ1ZmZlcnMoKTsKKworICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4dHVyZSh1aW50MzJfdCB0
ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KTsKKworICAgIC8vIENvbnZlbmllbmNl
IEZ1bmN0aW9uIHRvIHVwZGF0ZSBzdXJmYWNlIGJhY2tidWZmZXIgd2l0aCB0ZXh0dXJlIGNvbnRl
bnRzIGFuZCByZXN0b3JlIGN1cnJlbnQgRkJPLgorICAgIC8vIEZ1bmN0aW9uIGRvZXMgdGhlIGZv
bGxvd2luZyhpbiBvcmRlcik6CisgICAgLy8gYSlCbGl0cyB0ZXh0dXJlIGNvbnRlbnRzIHRvIGJh
Y2sgYnVmZmVyLgorICAgIC8vIGIpQ2FsbHMgU3dhcCBCdWZmZXJzLgorICAgIC8vIGMpU2V0cyBj
dXJyZW50IEZCTyBhcyBiaW5kRmJvSWQuCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRz
KHVpbnQzMl90IHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEdMdWlu
dCBiaW5kRmJvSWQpOworCisgICAgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5KGNvbnN0IEludFJl
Y3QmIG5ld1JlY3QpOworCisgICAgdmlydHVhbCBQbGF0Zm9ybVN1cmZhY2VDb25maWcgY29uZmln
dXJhdGlvbigpOworCisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKKworcHJvdGVjdGVkOgor
ICAgIEdMUGxhdGZvcm1TdXJmYWNlKCk7CisgICAgYm9vbCBtX3Jlc3RvcmVOZWVkZWQ7CisgICAg
SW50UmVjdCBtX3JlY3Q7CisgICAgR0x1aW50IG1fZmJvSWQ7CisgICAgUGxhdGZvcm1EaXNwbGF5
IG1fc2hhcmVkRGlzcGxheTsKKyAgICBQbGF0Zm9ybVN1cmZhY2UgbV9kcmF3YWJsZTsKK307CisK
K30KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMjk1ZjA2YwotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKQEAgLTAs
MCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJHTFhDb250ZXh0LmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
ICYmIEhBVkUoR0xYKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgR0xYQ29udGV4
dCAoKkdMWENSRUFURUNPTlRFWFRBVFRSSUJTQVJCUFJPQykoRGlzcGxheSosIEdMWEZCQ29uZmln
LCBHTFhDb250ZXh0LCBCb29sLCBjb25zdCBpbnQqKTsKK3N0YXRpYyBHTFhDUkVBVEVDT05URVhU
QVRUUklCU0FSQlBST0MgZ2xYQ3JlYXRlQ29udGV4dEF0dHJpYnNBUkIgPSAwOworCitzdGF0aWMg
aW50IEF0dHJpYnNbXSA9IHsKKyAgICBHTFhfQ09OVEVYVF9SRVNFVF9OT1RJRklDQVRJT05fU1RS
QVRFR1lfQVJCLAorICAgIEdMWF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfQVJCLAorICAgIDAgfTsK
Kworc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUFSQkV4dGVuc2lvbnMoKQoreworICAgIHN0YXRpYyBi
b29sIGluaXRpYWxpemVkID0gZmFsc2U7CisKKyAgICBpZiAoaW5pdGlhbGl6ZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICBnbFhDcmVhdGVDb250ZXh0
QXR0cmlic0FSQiA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0xYQ1JFQVRFQ09OVEVYVEFUVFJJQlNBUkJQ
Uk9DPihnbFhHZXRQcm9jQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0IEdMdWJ5dGUqPigi
Z2xYQ3JlYXRlQ29udGV4dEF0dHJpYnNBUkIiKSkpOworfQorCitHTFhPZmZTY3JlZW5Db250ZXh0
OjpHTFhPZmZTY3JlZW5Db250ZXh0KCkKKyAgICA6IEdMUGxhdGZvcm1Db250ZXh0KCkKKyAgICAs
IG1fZGlzcGxheSgwKQoreworfQorCitib29sIEdMWE9mZlNjcmVlbkNvbnRleHQ6OmluaXRpYWxp
emUoR0xQbGF0Zm9ybVN1cmZhY2UqIHN1cmZhY2UpCit7CisgICAgaWYgKCFzdXJmYWNlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2Rpc3BsYXkgPSBzdXJmYWNlLT5zaGFyZWREaXNw
bGF5KCk7CisgICAgaWYgKCFtX2Rpc3BsYXkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEdMWEZCQ29uZmlnIGNvbmZpZyA9IHN1cmZhY2UtPmNvbmZpZ3VyYXRpb24oKTsKKworICAgIGlm
IChjb25maWcpIHsKKyAgICAgICAgaW5pdGlhbGl6ZUFSQkV4dGVuc2lvbnMoKTsKKworICAgICAg
ICBpZiAoZ2xYQ3JlYXRlQ29udGV4dEF0dHJpYnNBUkIpCisgICAgICAgICAgICBtX2NvbnRleHRI
YW5kbGUgPSBnbFhDcmVhdGVDb250ZXh0QXR0cmlic0FSQihtX2Rpc3BsYXksIGNvbmZpZywgMCwg
dHJ1ZSwgQXR0cmlicyk7CisKKyAgICAgICAgaWYgKG1fY29udGV4dEhhbmRsZSkKKyAgICAgICAg
ICAgIG1fcmVzZXRMb3N0Q29udGV4dCA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1fY29udGV4dEhhbmRsZSA9IGdsWENyZWF0ZU5ld0NvbnRleHQobV9kaXNwbGF5LCBjb25maWcs
IEdMWF9SR0JBX1RZUEUsIDAsIHRydWUpOworCisgICAgICAgIGlmIChtX2NvbnRleHRIYW5kbGUp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK0dMWE9mZlNjcmVlbkNvbnRleHQ6On5HTFhPZmZTY3JlZW5Db250ZXh0KCkKK3sKK30KKwor
Ym9vbCBHTFhPZmZTY3JlZW5Db250ZXh0Ojppc0N1cnJlbnRDb250ZXh0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9jb250ZXh0SGFuZGxlID09IGdsWEdldEN1cnJlbnRDb250ZXh0KCk7Cit9CisK
K2Jvb2wgR0xYT2ZmU2NyZWVuQ29udGV4dDo6cGxhdGZvcm1NYWtlQ3VycmVudChHTFBsYXRmb3Jt
U3VyZmFjZSogc3VyZmFjZSkKK3sKKyAgICByZXR1cm4gZ2xYTWFrZUN1cnJlbnQoc3VyZmFjZS0+
c2hhcmVkRGlzcGxheSgpLCBzdXJmYWNlLT5oYW5kbGUoKSwgbV9jb250ZXh0SGFuZGxlKTsKK30K
Kwordm9pZCBHTFhPZmZTY3JlZW5Db250ZXh0OjpwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KCkKK3sK
KyAgICBnbFhNYWtlQ3VycmVudChtX2Rpc3BsYXksIDAsIDApOworfQorCit2b2lkIEdMWE9mZlNj
cmVlbkNvbnRleHQ6OmZyZWVSZXNvdXJjZXMoKQoreworICAgIGlmIChtX2NvbnRleHRIYW5kbGUp
CisgICAgICAgIGdsWERlc3Ryb3lDb250ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0SGFuZGxlKTsK
KworICAgIG1fY29udGV4dEhhbmRsZSA9IDA7CisgICAgbV9kaXNwbGF5ID0gMDsKK30KKwordm9p
ZCBHTFhPZmZTY3JlZW5Db250ZXh0OjpkZXN0cm95KCkKK3sKKyAgICBmcmVlUmVzb3VyY2VzKCk7
CisgICAgR0xQbGF0Zm9ybUNvbnRleHQ6OmRlc3Ryb3koKTsKK30KKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xY
Q29udGV4dC5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9H
TFhDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NmZjhkNQot
LS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvR0xYQ29udGV4dC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgR0xYQ29udGV4dF9oCisjZGVmaW5lIEdMWENvbnRleHRfaAorCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBIQVZFKEdMWCkKKworI2luY2x1ZGUgIkdMUGxhdGZv
cm1Db250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR0xYQ3VycmVudENv
bnRleHRXcmFwcGVyIDogcHVibGljIEdMUGxhdGZvcm1Db250ZXh0IHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShHTFhDdXJyZW50Q29udGV4dFdyYXBwZXIpOworCitwdWJsaWM6CisgICAgR0xY
Q3VycmVudENvbnRleHRXcmFwcGVyKCkKKyAgICAgICAgOiBHTFBsYXRmb3JtQ29udGV4dCgpCisg
ICAgeworICAgICAgICBtX2NvbnRleHRIYW5kbGUgPSBnbFhHZXRDdXJyZW50Q29udGV4dCgpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgfkdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcigpIHsgfQorfTsK
KworY2xhc3MgR0xYT2ZmU2NyZWVuQ29udGV4dCA6IHB1YmxpYyBHTFBsYXRmb3JtQ29udGV4dCB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR0xYT2ZmU2NyZWVuQ29udGV4dCk7CisKK3B1Ymxp
YzoKKyAgICBHTFhPZmZTY3JlZW5Db250ZXh0KCk7CisgICAgdmlydHVhbCB+R0xYT2ZmU2NyZWVu
Q29udGV4dCgpOworICAgIGJvb2wgaW5pdGlhbGl6ZShHTFBsYXRmb3JtU3VyZmFjZSopOworICAg
IGJvb2wgcGxhdGZvcm1NYWtlQ3VycmVudChHTFBsYXRmb3JtU3VyZmFjZSopOworICAgIHZvaWQg
cGxhdGZvcm1SZWxlYXNlQ3VycmVudCgpOworICAgIHZvaWQgZGVzdHJveSgpOworICAgIGJvb2wg
aXNDdXJyZW50Q29udGV4dCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZvaWQgZnJlZVJlc291
cmNlcygpOworICAgIERpc3BsYXkqIG1fZGlzcGxheTsKK307CisKK30KKworI2VuZGlmIC8vIEdM
WENVUlJFTlRDT05URVhXUkFQUEVSX0gKKworI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2I5YzEwCi0tLSAvZGV2L251bGwKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNl
LmNwcApAQCAtMCwwICsxLDIwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBD
b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkdMWFN1cmZhY2UuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykgJiYgSEFWRShHTFgpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2hhcmVk
WDExUmVzb3VyY2VzKiBTaGFyZWRYMTFSZXNvdXJjZXM6Om1fc3RhdGljU2hhcmVkUmVzb3VyY2Ug
PSAwOworCitzdGF0aWMgY29uc3QgaW50IHBidWZmZXJBdHRyaWJ1dGVzW10gPSB7IEdMWF9QQlVG
RkVSX1dJRFRILCAxLCBHTFhfUEJVRkZFUl9IRUlHSFQsIDEsIDAgfTsKKworR0xYU3VyZmFjZTo6
R0xYU3VyZmFjZSgpCisgICAgOiBHTFBsYXRmb3JtU3VyZmFjZSgpCit7CisgICAgbV9zaGFyZWRS
ZXNvdXJjZXMgPSBTaGFyZWRYMTFSZXNvdXJjZXM6OmNyZWF0ZSgpOworICAgIG1fc2hhcmVkRGlz
cGxheSA9IG1fc2hhcmVkUmVzb3VyY2VzLT5kaXNwbGF5KCk7Cit9CisKK0dMWFN1cmZhY2U6On5H
TFhTdXJmYWNlKCkKK3sKK30KKworWFZpc3VhbEluZm8qIEdMWFN1cmZhY2U6OnZpc3VhbEluZm8o
KQoreworICAgIHJldHVybiBtX3NoYXJlZFJlc291cmNlcy0+dmlzdWFsSW5mbygpOworfQorCitX
aW5kb3cgR0xYU3VyZmFjZTo6eFdpbmRvdygpCit7CisgICAgcmV0dXJuIG1fc2hhcmVkUmVzb3Vy
Y2VzLT5nZXRYV2luZG93KCk7Cit9CisKK0dMWEZCQ29uZmlnIEdMWFN1cmZhY2U6OnBCdWZmZXJD
b25maWd1cmF0aW9uKCkKK3sKKyAgICByZXR1cm4gbV9zaGFyZWRSZXNvdXJjZXMtPnBCdWZmZXJD
b250ZXh0Q29uZmlnKCk7Cit9CisKK0dMWEZCQ29uZmlnIEdMWFN1cmZhY2U6OnRyYW5zcG9ydFN1
cmZhY2VDb25maWd1cmF0aW9uKCkKK3sKKyAgICByZXR1cm4gbV9zaGFyZWRSZXNvdXJjZXMtPnN1
cmZhY2VDb250ZXh0Q29uZmlnKCk7Cit9CisKK2Jvb2wgR0xYU3VyZmFjZTo6aXNYUmVuZGVyRXh0
ZW5zaW9uU3VwcG9ydGVkKCkKK3sKKyAgICByZXR1cm4gbV9zaGFyZWRSZXNvdXJjZXMtPmlzWFJl
bmRlckV4dGVuc2lvblN1cHBvcnRlZCgpOworfQorCitHTFhUcmFuc3BvcnRTdXJmYWNlOjpHTFhU
cmFuc3BvcnRTdXJmYWNlKCkKKyAgICA6IEdMWFN1cmZhY2UoKQoreworICAgIGluaXRpYWxpemUo
KTsKK30KKworR0xYVHJhbnNwb3J0U3VyZmFjZTo6fkdMWFRyYW5zcG9ydFN1cmZhY2UoKQorewor
fQorCitQbGF0Zm9ybVN1cmZhY2VDb25maWcgR0xYVHJhbnNwb3J0U3VyZmFjZTo6Y29uZmlndXJh
dGlvbigpCit7CisgICAgcmV0dXJuIHRyYW5zcG9ydFN1cmZhY2VDb25maWd1cmF0aW9uKCk7Cit9
CisKK3ZvaWQgR0xYVHJhbnNwb3J0U3VyZmFjZTo6c3dhcEJ1ZmZlcnMoKQoreworICAgIGlmICgh
bV9kcmF3YWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fcmVzdG9yZU5lZWRlZCkg
eworICAgICAgICBHTGludCBvbGRGQk87CisgICAgICAgIGdsR2V0SW50ZWdlcnYoR0xfRlJBTUVC
VUZGRVJfQklORElORywgJm9sZEZCTyk7CisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZS
QU1FQlVGRkVSLCAwKTsKKyAgICAgICAgZ2xYU3dhcEJ1ZmZlcnMoc2hhcmVkRGlzcGxheSgpLCBt
X2RyYXdhYmxlKTsKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG9s
ZEZCTyk7CisgICAgfSBlbHNlCisgICAgICAgIGdsWFN3YXBCdWZmZXJzKHNoYXJlZERpc3BsYXko
KSwgbV9kcmF3YWJsZSk7Cit9CisKK3ZvaWQgR0xYVHJhbnNwb3J0U3VyZmFjZTo6c2V0R2VvbWV0
cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkKK3sKKyAgICBHTFBsYXRmb3JtU3VyZmFjZTo6c2V0
R2VvbWV0cnkobmV3UmVjdCk7CisgICAgaW50IHdpZHRoID0gbmV3UmVjdC53aWR0aCgpOworICAg
IGludCBoZWlnaHQgPSBuZXdSZWN0LmhlaWdodCgpOworICAgIFhSZXNpemVXaW5kb3coc2hhcmVk
RGlzcGxheSgpLCBtX2RyYXdhYmxlLCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBHTFhUcmFu
c3BvcnRTdXJmYWNlOjppbml0aWFsaXplKCkKK3sKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gc2hh
cmVkRGlzcGxheSgpOworICAgIEdMWEZCQ29uZmlnIGNvbmZpZyA9IHRyYW5zcG9ydFN1cmZhY2VD
b25maWd1cmF0aW9uKCk7CisgICAgaWYgKCFjb25maWcpCisgICAgICAgIHJldHVybjsKKworICAg
IFhWaXN1YWxJbmZvKiB2aXNJbmZvID0gdmlzdWFsSW5mbygpOworICAgIGlmICghdmlzSW5mbykK
KyAgICAgICAgcmV0dXJuOworCisgICAgQ29sb3JtYXAgY21hcCA9IFhDcmVhdGVDb2xvcm1hcChk
aXNwbGF5LCB4V2luZG93KCksIHZpc0luZm8tPnZpc3VhbCwgQWxsb2NOb25lKTsKKyAgICBYU2V0
V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGU7CisgICAgYXR0cmlidXRlLmJhY2tncm91bmRfcGl4
ZWwgPSBXaGl0ZVBpeGVsKGRpc3BsYXksIDApOworICAgIGF0dHJpYnV0ZS5ib3JkZXJfcGl4ZWwg
PSBCbGFja1BpeGVsKGRpc3BsYXksIDApOworICAgIGF0dHJpYnV0ZS5jb2xvcm1hcCA9IGNtYXA7
CisgICAgbV9kcmF3YWJsZSA9IFhDcmVhdGVXaW5kb3coZGlzcGxheSwgeFdpbmRvdygpLCAwLCAw
LCAxLCAxLCAwLCB2aXNJbmZvLT5kZXB0aCwgSW5wdXRPdXRwdXQsIHZpc0luZm8tPnZpc3VhbCwg
Q1dCYWNrUGl4ZWwgfCBDV0JvcmRlclBpeGVsIHwgQ1dDb2xvcm1hcCwgJmF0dHJpYnV0ZSk7Cisg
ICAgaWYgKCFtX2RyYXdhYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBYU2V0V2luZG93QmFj
a2dyb3VuZFBpeG1hcChkaXNwbGF5LCBtX2RyYXdhYmxlLCAwKTsKKyAgICBYQ29tcG9zaXRlUmVk
aXJlY3RXaW5kb3coZGlzcGxheSwgbV9kcmF3YWJsZSwgQ29tcG9zaXRlUmVkaXJlY3RNYW51YWwp
OworCisgICAgaWYgKGlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpKQorICAgICAgICBYTWFw
V2luZG93KGRpc3BsYXksIG1fZHJhd2FibGUpOworfQorCit2b2lkIEdMWFRyYW5zcG9ydFN1cmZh
Y2U6OmRlc3Ryb3koKQoreworICAgIGZyZWVSZXNvdXJjZXMoKTsKKyAgICBHTFBsYXRmb3JtU3Vy
ZmFjZTo6ZGVzdHJveSgpOworfQorCit2b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2U6OmZyZWVSZXNv
dXJjZXMoKQoreworICAgIGlmICghbV9kcmF3YWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
R0xQbGF0Zm9ybVN1cmZhY2U6OmRlc3Ryb3koKTsKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gc2hh
cmVkRGlzcGxheSgpOworICAgIGlmICghZGlzcGxheSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
WERlc3Ryb3lXaW5kb3coZGlzcGxheSwgbV9kcmF3YWJsZSk7CisgICAgbV9kcmF3YWJsZSA9IDA7
Cit9CisKK0dMWFBCdWZmZXI6OkdMWFBCdWZmZXIoKQorICAgIDogR0xYU3VyZmFjZSgpCit7Cisg
ICAgaW5pdGlhbGl6ZSgpOworfQorCitHTFhQQnVmZmVyOjp+R0xYUEJ1ZmZlcigpCit7Cit9CisK
K3ZvaWQgR0xYUEJ1ZmZlcjo6aW5pdGlhbGl6ZSgpCit7CisgICAgRGlzcGxheSogZGlzcGxheSA9
IHNoYXJlZERpc3BsYXkoKTsKKyAgICBHTFhGQkNvbmZpZyBjb25maWcgPSBwQnVmZmVyQ29uZmln
dXJhdGlvbigpOworICAgIGlmICghY29uZmlnKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Ry
YXdhYmxlID0gZ2xYQ3JlYXRlUGJ1ZmZlcihkaXNwbGF5LCBjb25maWcsIHBidWZmZXJBdHRyaWJ1
dGVzKTsKK30KKworUGxhdGZvcm1TdXJmYWNlQ29uZmlnIEdMWFBCdWZmZXI6OmNvbmZpZ3VyYXRp
b24oKQoreworICAgIHJldHVybiBwQnVmZmVyQ29uZmlndXJhdGlvbigpOworfQorCit2b2lkIEdM
WFBCdWZmZXI6OmRlc3Ryb3koKQoreworICAgIGZyZWVSZXNvdXJjZXMoKTsKK30KKwordm9pZCBH
TFhQQnVmZmVyOjpmcmVlUmVzb3VyY2VzKCkKK3sKKyAgICBpZiAoIW1fZHJhd2FibGUpCisgICAg
ICAgIHJldHVybjsKKworICAgIEdMUGxhdGZvcm1TdXJmYWNlOjpkZXN0cm95KCk7CisgICAgRGlz
cGxheSogZGlzcGxheSA9IHNoYXJlZERpc3BsYXkoKTsKKyAgICBpZiAoIWRpc3BsYXkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGdsWERlc3Ryb3lQYnVmZmVyKGRpc3BsYXksIG1fZHJhd2FibGUp
OworICAgIG1fZHJhd2FibGUgPSAwOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmggU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDcxMzk3Ci0tLSAvZGV2L251bGwK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJm
YWNlLmgKQEAgLTAsMCArMSwyODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwg
Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR0xY
U3VyZmFjZV9oCisjZGVmaW5lIEdMWFN1cmZhY2VfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKSAmJiBIQVZFKEdMWCkKKworI2luY2x1ZGUgIkdMUGxhdGZvcm1TdXJmYWNlLmgi
CisKKyNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YY29tcG9zaXRlLmg+CisjaW5jbHVkZSA8WDEx
L2V4dGVuc2lvbnMvWHJlbmRlci5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNoYXJlZFgxMVJlc291cmNlcyA6IHB1YmxpYyBX
VEY6OlJlZkNvdW50ZWRCYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTaGFyZWRYMTFS
ZXNvdXJjZXMpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkWDExUmVz
b3VyY2VzPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3N0YXRpY1NoYXJlZFJlc291
cmNlKQorICAgICAgICAgICAgbV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9IG5ldyBTaGFyZWRYMTFS
ZXNvdXJjZXMoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9zdGF0aWNTaGFyZWRSZXNv
dXJjZS0+cmVmKCk7CisKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG1fc3RhdGljU2hhcmVkUmVz
b3VyY2UpOworICAgIH0KKworICAgIHZvaWQgZGVyZWYoKQorICAgIHsKKyAgICAgICAgaWYgKGRl
cmVmQmFzZSgpKSB7CisgICAgICAgICAgICBtX3N0YXRpY1NoYXJlZFJlc291cmNlID0gMDsKKyAg
ICAgICAgICAgIGRlbGV0ZSB0aGlzOworICAgICAgICB9CisgICAgfQorCisgICAgV2luZG93IGdl
dFhXaW5kb3coKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3dpbmRvdykgeworICAgICAgICAgICAg
RGlzcGxheSogZHB5ID0gZGlzcGxheSgpOworICAgICAgICAgICAgWFNldFdpbmRvd0F0dHJpYnV0
ZXMgYXR0cmlidXRlczsKKyAgICAgICAgICAgIGF0dHJpYnV0ZXMub3ZlcnJpZGVfcmVkaXJlY3Qg
PSB0cnVlOworICAgICAgICAgICAgbV93aW5kb3cgPSBYQ3JlYXRlU2ltcGxlV2luZG93KGRweSwg
WERlZmF1bHRSb290V2luZG93KGRweSksIC0xLCAtMSwgMSwgMSwgMCwgQmxhY2tQaXhlbChkcHks
IDApLCBXaGl0ZVBpeGVsKGRweSwgMCkpOworICAgICAgICAgICAgLy8gRnJvbSBodHRwOi8vdHJv
bmNoZS5jb20vZ3VpL3gveGxpYi93aW5kb3cvYXR0cmlidXRlcy8KKyAgICAgICAgICAgIFhDaGFu
Z2VXaW5kb3dBdHRyaWJ1dGVzKGRweSwgbV93aW5kb3csIENXT3ZlcnJpZGVSZWRpcmVjdCwgJmF0
dHJpYnV0ZXMpOworICAgICAgICAgICAgWE1hcFdpbmRvdyhkcHksIG1fd2luZG93KTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBtX3dpbmRvdzsKKyAgICB9CisKKyAgICBEaXNwbGF5KiBk
aXNwbGF5KCkKKyAgICB7CisgICAgICAgIGlmICghbV9kaXNwbGF5KQorICAgICAgICAgICAgbV9k
aXNwbGF5ID0gWE9wZW5EaXNwbGF5KDApOworCisgICAgICAgIHJldHVybiBtX2Rpc3BsYXk7Cisg
ICAgfQorCisgICAgWFZpc3VhbEluZm8qIHZpc3VhbEluZm8oKQorICAgIHsKKyAgICAgICAgaWYg
KCFtX1Zpc3VhbEluZm8pCisgICAgICAgICAgICBzdXJmYWNlQ29udGV4dENvbmZpZygpOworCisg
ICAgICAgIHJldHVybiBtX1Zpc3VhbEluZm87CisgICAgfQorCisgICAgR0xYRkJDb25maWcgY3Jl
YXRlQ29uZmlnKGNvbnN0IGludCBhdHRyaWJ1dGVzW10pCisgICAgeworICAgICAgICBpbnQgbnVt
UmV0dXJuZWQ7CisgICAgICAgIG1fVmlzdWFsSW5mbyA9IDA7CisgICAgICAgIEdMWEZCQ29uZmln
KiB0ZW1wID0gZ2xYQ2hvb3NlRkJDb25maWcoZGlzcGxheSgpLCBEZWZhdWx0U2NyZWVuKGRpc3Bs
YXkoKSksIGF0dHJpYnV0ZXMsICZudW1SZXR1cm5lZCk7CisKKyAgICAgICAgaWYgKCFudW1SZXR1
cm5lZCkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIEdMWEZCQ29uZmlnIHNlbGVj
dGVkQ29uZmlnID0gMDsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworCisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbnVtUmV0dXJuZWQ7ICsraSkgeworICAgICAgICAgICAgbV9WaXN1
YWxJbmZvID0gZ2xYR2V0VmlzdWFsRnJvbUZCQ29uZmlnKGRpc3BsYXkoKSwgdGVtcFtpXSk7Cisg
ICAgICAgICAgICBpZiAoIW1fVmlzdWFsSW5mbykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAgICAgaWYgKG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uKSB7CisgICAgICAg
ICAgICAgICAgWFJlbmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFsRm9y
bWF0KGRpc3BsYXkoKSwgbV9WaXN1YWxJbmZvLT52aXN1YWwpOworICAgICAgICAgICAgICAgIGlm
IChmb3JtYXQgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrID4gMCkgeworICAgICAgICAgICAg
ICAgICAgICBzZWxlY3RlZENvbmZpZyA9IHRlbXBbaV07CisgICAgICAgICAgICAgICAgICAgIGZv
dW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSBlbHNlIGlmIChtX1Zpc3VhbEluZm8tPmRlcHRoID09IDMyKSB7Cisg
ICAgICAgICAgICAgICAgc2VsZWN0ZWRDb25maWcgPSB0ZW1wW2ldOworICAgICAgICAgICAgICAg
IGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIERp
ZCBub3QgZmluZCBhbnkgdmlzdWFsIHN1cHBvcnRpbmcgYWxwaGEsIHNlbGVjdCB0aGUgZmlyc3Qg
YXZhaWxhYmxlIGNvbmZpZy4KKyAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgc2Vs
ZWN0ZWRDb25maWcgPSB0ZW1wWzBdOworICAgICAgICAgICAgbV9WaXN1YWxJbmZvID0gZ2xYR2V0
VmlzdWFsRnJvbUZCQ29uZmlnKG1fZGlzcGxheSwgdGVtcFswXSk7CisgICAgICAgIH0KKworICAg
ICAgICBYRnJlZSh0ZW1wKTsKKworICAgICAgICByZXR1cm4gc2VsZWN0ZWRDb25maWc7CisgICAg
fQorCisgICAgR0xYRkJDb25maWcgcEJ1ZmZlckNvbnRleHRDb25maWcoKQorICAgIHsKKyAgICAg
ICAgaWYgKCFtX3BidWZmZXJmYkNvbmZpZykgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBhdHRyaWJ1dGVzW10gPSB7CisgICAgICAgICAgICAgICAgR0xYX0xFVkVMLCAwLAorICAgICAg
ICAgICAgICAgIEdMWF9EUkFXQUJMRV9UWVBFLCBHTFhfUEJVRkZFUl9CSVQsCisgICAgICAgICAg
ICAgICAgR0xYX1JFTkRFUl9UWVBFLCAgIEdMWF9SR0JBX0JJVCwKKyAgICAgICAgICAgICAgICBH
TFhfUkVEX1NJWkUsICAgICAgMSwKKyAgICAgICAgICAgICAgICBHTFhfR1JFRU5fU0laRSwgICAg
MSwKKyAgICAgICAgICAgICAgICBHTFhfQkxVRV9TSVpFLCAgICAgMSwKKyAgICAgICAgICAgICAg
ICBHTFhfRE9VQkxFQlVGRkVSLCAgR0xfRkFMU0UsCisgICAgICAgICAgICAgICAgTm9uZQorICAg
ICAgICAgICAgfTsKKworICAgICAgICAgICAgaW50IG51bVJldHVybmVkOworICAgICAgICAgICAg
R0xYRkJDb25maWcqIHRlbXAgPSBnbFhDaG9vc2VGQkNvbmZpZyhkaXNwbGF5KCksIERlZmF1bHRT
Y3JlZW4oZGlzcGxheSgpKSwgYXR0cmlidXRlcywgJm51bVJldHVybmVkKTsKKyAgICAgICAgICAg
IGlmIChudW1SZXR1cm5lZCkKKyAgICAgICAgICAgICAgICBtX3BidWZmZXJmYkNvbmZpZyA9IHRl
bXBbMF07CisgICAgICAgICAgICBYRnJlZSh0ZW1wKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBtX3BidWZmZXJmYkNvbmZpZzsKKyAgICB9CisKKyAgICBHTFhGQkNvbmZpZyBzdXJmYWNl
Q29udGV4dENvbmZpZygpCisgICAgeworICAgICAgICBpZiAoIW1fc3VyZmFjZUNvbnRleHRmYkNv
bmZpZykgeworICAgICAgICAgICAgc3RhdGljIGludCBhdHRyaWJ1dGVzW10gPSB7CisgICAgICAg
ICAgICAgICAgR0xYX0xFVkVMLCAwLAorICAgICAgICAgICAgICAgIEdMWF9EUkFXQUJMRV9UWVBF
LCBHTFhfV0lORE9XX0JJVCwKKyAgICAgICAgICAgICAgICBHTFhfUkVOREVSX1RZUEUsICAgR0xY
X1JHQkFfQklULAorICAgICAgICAgICAgICAgIEdMWF9SRURfU0laRSwgICAgICAxLAorICAgICAg
ICAgICAgICAgIEdMWF9HUkVFTl9TSVpFLCAgICAxLAorICAgICAgICAgICAgICAgIEdMWF9CTFVF
X1NJWkUsICAgICAxLAorICAgICAgICAgICAgICAgIEdMWF9BTFBIQV9TSVpFLCAgICAxLAorICAg
ICAgICAgICAgICAgIEdMWF9ERVBUSF9TSVpFLCAgICAxLAorICAgICAgICAgICAgICAgIEdMWF9Y
X1ZJU1VBTF9UWVBFLCBHTFhfVFJVRV9DT0xPUiwKKyAgICAgICAgICAgICAgICBHTFhfRE9VQkxF
QlVGRkVSLCAgVHJ1ZSwKKyAgICAgICAgICAgICAgICBOb25lCisgICAgICAgICAgICB9OworCisg
ICAgICAgICAgICBpbnQgZXZlbnRCYXNlcCwgZXJyb3JCYXNlcDsKKyAgICAgICAgICAgIG1fc3Vw
cG9ydHNYUmVuZGVyRXh0ZW5zaW9uID0gWFJlbmRlclF1ZXJ5RXh0ZW5zaW9uKGRpc3BsYXkoKSwg
JmV2ZW50QmFzZXAsICZlcnJvckJhc2VwKTsKKworICAgICAgICAgICAgbV9zdXJmYWNlQ29udGV4
dGZiQ29uZmlnID0gY3JlYXRlQ29uZmlnKGF0dHJpYnV0ZXMpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZzsKKyAgICB9CisKKyAgICBib29sIGlz
WFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9zdXBw
b3J0c1hSZW5kZXJFeHRlbnNpb247CisgICAgfQorCitwcml2YXRlOgorICAgIFNoYXJlZFgxMVJl
c291cmNlcygpCisgICAgICAgIDogbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24oZmFsc2UpCisg
ICAgICAgICwgbV9tYXJrRm9yRGVsZXRpb24oZmFsc2UpCisgICAgICAgICwgbV93aW5kb3coMCkK
KyAgICAgICAgLCBtX2Rpc3BsYXkoMCkKKyAgICAgICAgLCBtX3BidWZmZXJmYkNvbmZpZygwKQor
ICAgICAgICAsIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZygwKQorICAgICAgICAsIG1fVmlzdWFs
SW5mbygwKQorICAgIHsKKyAgICB9CisKKyAgICB+U2hhcmVkWDExUmVzb3VyY2VzKCkKKyAgICB7
CisgICAgICAgIGlmICghbV9kaXNwbGF5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGlmIChtX3dpbmRvdykgeworICAgICAgICAgICAgWFVubWFwV2luZG93KG1fZGlzcGxheSwgbV93
aW5kb3cpOworICAgICAgICAgICAgWERlc3Ryb3lXaW5kb3cobV9kaXNwbGF5LCBtX3dpbmRvdyk7
CisgICAgICAgICAgICBtX3dpbmRvdyA9IDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9w
YnVmZmVyZmJDb25maWcpCisgICAgICAgICAgICBtX3BidWZmZXJmYkNvbmZpZyA9IDA7CisKKyAg
ICAgICAgaWYgKG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZykKKyAgICAgICAgICAgIG1fc3VyZmFj
ZUNvbnRleHRmYkNvbmZpZyA9IDA7CisKKyAgICAgICAgaWYgKG1fVmlzdWFsSW5mbykgeworICAg
ICAgICAgICAgWEZyZWUobV9WaXN1YWxJbmZvKTsKKyAgICAgICAgICAgIG1fVmlzdWFsSW5mbyA9
IDA7CisgICAgICAgIH0KKworICAgICAgICBYQ2xvc2VEaXNwbGF5KG1fZGlzcGxheSk7CisgICAg
ICAgIG1fZGlzcGxheSA9IDA7CisgICAgfQorCisgICAgc3RhdGljIFNoYXJlZFgxMVJlc291cmNl
cyogbV9zdGF0aWNTaGFyZWRSZXNvdXJjZTsKKyAgICBib29sIG1fc3VwcG9ydHNYUmVuZGVyRXh0
ZW5zaW9uOworICAgIGJvb2wgbV9tYXJrRm9yRGVsZXRpb247CisgICAgV2luZG93IG1fd2luZG93
OworICAgIERpc3BsYXkqIG1fZGlzcGxheTsKKyAgICBHTFhGQkNvbmZpZyBtX3BidWZmZXJmYkNv
bmZpZzsKKyAgICBHTFhGQkNvbmZpZyBtX3N1cmZhY2VDb250ZXh0ZmJDb25maWc7CisgICAgWFZp
c3VhbEluZm8qIG1fVmlzdWFsSW5mbzsKK307CisKK2NsYXNzIEdMWFN1cmZhY2UgOiBwdWJsaWMg
R0xQbGF0Zm9ybVN1cmZhY2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdMWFN1cmZhY2Up
OworCitwdWJsaWM6CisgICAgR0xYU3VyZmFjZSgpOworICAgIHZpcnR1YWwgfkdMWFN1cmZhY2Uo
KTsKKworcHJvdGVjdGVkOgorICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvKCk7CisgICAgV2lu
ZG93IHhXaW5kb3coKTsKKyAgICBHTFhGQkNvbmZpZyBwQnVmZmVyQ29uZmlndXJhdGlvbigpOwor
ICAgIEdMWEZCQ29uZmlnIHRyYW5zcG9ydFN1cmZhY2VDb25maWd1cmF0aW9uKCk7CisgICAgYm9v
bCBpc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8
U2hhcmVkWDExUmVzb3VyY2VzPiBtX3NoYXJlZFJlc291cmNlczsKK307CisKK2NsYXNzIEdMWFRy
YW5zcG9ydFN1cmZhY2UgOiBwdWJsaWMgR0xYU3VyZmFjZSB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoR0xYVHJhbnNwb3J0U3VyZmFjZSk7CisKK3B1YmxpYzoKKyAgICBHTFhUcmFuc3BvcnRT
dXJmYWNlKCk7CisgICAgdmlydHVhbCB+R0xYVHJhbnNwb3J0U3VyZmFjZSgpOworICAgIFBsYXRm
b3JtU3VyZmFjZUNvbmZpZyBjb25maWd1cmF0aW9uKCk7CisgICAgdm9pZCBzd2FwQnVmZmVycygp
OworICAgIHZvaWQgc2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCk7CisgICAgdm9p
ZCBkZXN0cm95KCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAgdm9p
ZCBmcmVlUmVzb3VyY2VzKCk7Cit9OworCitjbGFzcyBHTFhQQnVmZmVyIDogcHVibGljIEdMWFN1
cmZhY2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdMWFBCdWZmZXIpOworCitwdWJsaWM6
CisgICAgR0xYUEJ1ZmZlcigpOworICAgIHZpcnR1YWwgfkdMWFBCdWZmZXIoKTsKKyAgICBQbGF0
Zm9ybVN1cmZhY2VDb25maWcgY29uZmlndXJhdGlvbigpOworICAgIHZvaWQgZGVzdHJveSgpOwor
Citwcml2YXRlOgorICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIHZvaWQgZnJlZVJlc291cmNl
cygpOworfTsKKworfQorCisjZW5kaWYKKworI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>