<?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>86048</bug_id>
          
          <creation_ts>2012-05-09 18:09:35 -0700</creation_ts>
          <short_desc>[Texmap] Refactor TextureMapperShaderManager to be clearer</short_desc>
          <delta_ts>2012-10-16 13:47:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>99499</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Noam Rosenthal">noam</assigned_to>
          <cc>adrian.yanes</cc>
    
    <cc>igor.oliveira</cc>
    
    <cc>jturcotte</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>620131</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-05-09 18:09:35 -0700</bug_when>
    <thetext>[Texmap] Refactor TextureMapperShaderManager to be clearer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620136</commentid>
    <comment_count>1</comment_count>
      <attachid>141068</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-05-09 18:14:33 -0700</bug_when>
    <thetext>Created attachment 141068
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620168</commentid>
    <comment_count>2</comment_count>
      <attachid>141068</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-09 19:14:02 -0700</bug_when>
    <thetext>Comment on attachment 141068
Patch

Attachment 141068 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12664193</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620169</commentid>
    <comment_count>3</comment_count>
      <attachid>141068</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-09 19:16:29 -0700</bug_when>
    <thetext>Comment on attachment 141068
Patch

Attachment 141068 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12649898</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620179</commentid>
    <comment_count>4</comment_count>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2012-05-09 19:40:36 -0700</bug_when>
    <thetext>Would be interesting update the GTK build system.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620208</commentid>
    <comment_count>5</comment_count>
      <attachid>141068</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-05-09 20:56:26 -0700</bug_when>
    <thetext>Comment on attachment 141068
Patch

Clearing flag, some file is missing...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620619</commentid>
    <comment_count>6</comment_count>
      <attachid>141180</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-05-10 09:11:29 -0700</bug_when>
    <thetext>Created attachment 141180
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620776</commentid>
    <comment_count>7</comment_count>
      <attachid>141180</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-05-10 11:33:40 -0700</bug_when>
    <thetext>Comment on attachment 141180
Patch

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

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:-54
&gt; -#define GL_CMD(...) do { __VA_ARGS__; ASSERT_ARG(__VA_ARGS__, !glGetError()); } while (0)

Nothing important, but you shouldn&apos;t need to move that line inside the namespace.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:617
&gt; +        glActiveTexture(GL_TEXTURE1);
&gt; +        glBindTexture(GL_TEXTURE_2D, maskTextureGL-&gt;id());
&gt; +        glUniform1i(shader-&gt;getUniformLocation(MaskedShaderDefinition::Mask), 1);
&gt; +        glActiveTexture(GL_TEXTURE0);

GL_CMD(...)?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:767
&gt; +

Unneeded extra line.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:794
&gt; +    if (filter.getOperationType() &lt; FilterOperation::GRAYSCALE || filter.getOperationType() &gt; FilterOperation::CONTRAST) {

Please don&apos;t use &lt; or &gt; on enums, use a isColorizeFilter or something function returning a bool with a switch instead.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:802
&gt; +    GLuint vertexAttrib = shader-&gt;getAttributeLocation(ColorizeShaderDefinition::Position);
&gt; +    GLuint texCoordAttrib = shader-&gt;getAttributeLocation(ColorizeShaderDefinition::TexCoord);

I&apos;m not sure I understand the move of flattening all the shader logic in this method instead of something like having them inherit TextureMapperShader like before and let them initialize/cleanup their uniforms from parameters given to the object. Can you say what you mean by &quot;tightly integrated&quot;?
Isn&apos;t this going to become messy as we add more implemented shaders?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:809
&gt; +    glUniform1i(shader-&gt;getUniformLocation(ColorizeShaderDefinition::Texture), 0);
&gt; +    glUniform1i(shader-&gt;getUniformLocation(ColorizeShaderDefinition::FilterType), filter.getOperationType());
&gt; +    glUniform1f(shader-&gt;getUniformLocation(ColorizeShaderDefinition::FilterAmount), extractFilterAmount(filter));

GL_CMD(...)?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShader.cpp:26
&gt; +#include &quot;stdio.h&quot;

&lt;stdio.h&gt; instead of &quot;stdio.h (even though I&apos;m not sure of what it concretely changes)

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShader.cpp:48
&gt; +    if (len)
&gt; +        printf(&quot;Vertex shader log: %s\n&quot;, log);

Does this prints anything other than errors?
If yes please protect it by something like TEXTUREMAPPER_SHADER_LOG instead of NDEBUG with a define at the top, commented by default.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620789</commentid>
    <comment_count>8</comment_count>
      <attachid>141180</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-05-10 11:39:11 -0700</bug_when>
    <thetext>Comment on attachment 141180
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:802
&gt;&gt; +    GLuint texCoordAttrib = shader-&gt;getAttributeLocation(ColorizeShaderDefinition::TexCoord);
&gt; 
&gt; I&apos;m not sure I understand the move of flattening all the shader logic in this method instead of something like having them inherit TextureMapperShader like before and let them initialize/cleanup their uniforms from parameters given to the object. Can you say what you mean by &quot;tightly integrated&quot;?
&gt; Isn&apos;t this going to become messy as we add more implemented shaders?

It was becoming really messy to do filters in the old way... The problem was that for every addition in the shader&apos;s uniform etc. we had to add support in the different draw functions, and then add inappropriate abstractions like prepare().
The problem is that you can&apos;t really separate a shader and the command that draws it.

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShader.cpp:48
&gt;&gt; +        printf(&quot;Vertex shader log: %s\n&quot;, log);
&gt; 
&gt; Does this prints anything other than errors?
&gt; If yes please protect it by something like TEXTUREMAPPER_SHADER_LOG instead of NDEBUG with a define at the top, commented by default.

This only prints errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620827</commentid>
    <comment_count>9</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-05-10 12:03:13 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; It was becoming really messy to do filters in the old way... The problem was that for every addition in the shader&apos;s uniform etc. we had to add support in the different draw functions, and then add inappropriate abstractions like prepare().
&gt; The problem is that you can&apos;t really separate a shader and the command that draws it.

Ah ok.
How about something like letting shaders draw() themselves using the given source textures?
Else I guess we can add drawFiltered, drawColorized, drawBlured, etc. in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620836</commentid>
    <comment_count>10</comment_count>
      <attachid>141180</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-05-10 12:12:48 -0700</bug_when>
    <thetext>Comment on attachment 141180
Patch

Clearning flags - I need to rethink this a bit... I&apos;d hate to rewrite this abstraction yet again, so I&apos;d rather come up with the right approach now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737063</commentid>
    <comment_count>11</comment_count>
      <attachid>167614</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-08 14:40:41 -0700</bug_when>
    <thetext>Created attachment 167614
Patch

Trying to remove some of the TextureMapperShaderManager broiler-plate...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737064</commentid>
    <comment_count>12</comment_count>
      <attachid>167615</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-08 14:41:33 -0700</bug_when>
    <thetext>Created attachment 167615
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737089</commentid>
    <comment_count>13</comment_count>
      <attachid>167615</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-10-08 15:00:14 -0700</bug_when>
    <thetext>Comment on attachment 167615
Patch

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

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:732
&gt; +    default:
&gt; +        return TextureMapperShaderManager::Invalid;
&gt; +    }

ASSERT?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:780
&gt; +    // Normalize the kernel

nit

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:33
&gt; +TextureMapperShaderProgram::TextureMapperShaderProgram(PassRefPtr&lt;GraphicsContext3D&gt; context, const String&amp; vertex, const String&amp; fragment)

vertexSource? fragmentSource?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:49
&gt; +    m_context-&gt;linkProgram(m_id);
&gt; +    if (m_context-&gt;getError() == GraphicsContext3D::NO_ERROR)

newline before if , I would say, it is already hard to read the above code with no blocking

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:53
&gt; +    String log = m_context-&gt;getShaderInfoLog(m_vertexShader);
&gt; +    printf(&quot;Vertex shader log: %s\n&quot;, log.utf8().data());

maybe in debug only?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:99
&gt; +        : vertexShader(vertex ? String(ASCIILiteral(vertex)) : String())

Doesn&apos;t string have a constructor taking null? I guess CString does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737105</commentid>
    <comment_count>14</comment_count>
      <attachid>167615</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-08 15:10:16 -0700</bug_when>
    <thetext>Comment on attachment 167615
Patch

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

Just a couple nits after a quick look:

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:758
&gt; +#define GAUSSIAN_KERNEL_HALF_WIDTH 11
&gt; +#define GAUSSIAN_KERNEL_STEP 0.2

These should be static const int and float.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:62
&gt; +    HashMap&lt;const char*, GC3Duint&gt;::iterator it = m_variables.find(name);

Perhaps this HashMap should hold AtomicString rather than const char*?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737208</commentid>
    <comment_count>15</comment_count>
      <attachid>167641</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-08 16:31:12 -0700</bug_when>
    <thetext>Created attachment 167641
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737218</commentid>
    <comment_count>16</comment_count>
      <attachid>167645</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-08 16:42:23 -0700</bug_when>
    <thetext>Created attachment 167645
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737228</commentid>
    <comment_count>17</comment_count>
      <attachid>167648</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-08 16:54:04 -0700</bug_when>
    <thetext>Created attachment 167648
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737229</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-08 16:56:33 -0700</bug_when>
    <thetext>Attachment 167648 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:70:  Missing space before ( in switch(  [whitespace/parens] [5]
Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:274:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:275:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:279:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:759:  GAUSSIAN_KERNEL_HALF_WIDTH is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:760:  GAUSSIAN_KERNEL_STEP is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 7 in 4 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>737257</commentid>
    <comment_count>19</comment_count>
      <attachid>167648</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-08 17:24:15 -0700</bug_when>
    <thetext>Comment on attachment 167648
Patch

Attachment 167648 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14229319</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737265</commentid>
    <comment_count>20</comment_count>
      <attachid>167648</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-08 17:37:21 -0700</bug_when>
    <thetext>Comment on attachment 167648
Patch

Attachment 167648 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14205849</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737310</commentid>
    <comment_count>21</comment_count>
      <attachid>167666</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-08 18:30:52 -0700</bug_when>
    <thetext>Created attachment 167666
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737314</commentid>
    <comment_count>22</comment_count>
      <attachid>167666</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-08 18:35:30 -0700</bug_when>
    <thetext>Comment on attachment 167666
Patch

Attachment 167666 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14221482</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737317</commentid>
    <comment_count>23</comment_count>
      <attachid>167666</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-08 18:37:17 -0700</bug_when>
    <thetext>Comment on attachment 167666
Patch

Attachment 167666 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14238095</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737338</commentid>
    <comment_count>24</comment_count>
      <attachid>167669</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-08 18:55:10 -0700</bug_when>
    <thetext>Created attachment 167669
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737340</commentid>
    <comment_count>25</comment_count>
      <attachid>167669</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-08 18:59:31 -0700</bug_when>
    <thetext>Comment on attachment 167669
Patch

Attachment 167669 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14228447</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737342</commentid>
    <comment_count>26</comment_count>
      <attachid>167669</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-08 19:00:16 -0700</bug_when>
    <thetext>Comment on attachment 167669
Patch

Attachment 167669 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14214553</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737350</commentid>
    <comment_count>27</comment_count>
      <attachid>167672</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-08 19:14:21 -0700</bug_when>
    <thetext>Created attachment 167672
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743271</commentid>
    <comment_count>28</comment_count>
      <attachid>167672</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-16 10:36:59 -0700</bug_when>
    <thetext>Comment on attachment 167672
Patch

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

Nice, I just have a few small suggestions.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:56
&gt; +    String log = m_context-&gt;getShaderInfoLog(m_vertexShader);
&gt; +    printf(&quot;Vertex shader log: %s\n&quot;, log.utf8().data());
&gt; +    log = m_context-&gt;getShaderInfoLog(m_fragmentShader);
&gt; +    printf(&quot;Fragment shader log: %s\n&quot;, log.utf8().data());
&gt; +    log = m_context-&gt;getProgramInfoLog(m_id);
&gt; +    printf(&quot;Program log: %s\n&quot;, log.utf8().data());

It probably makes sense to use the WebCore log facilities here.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:109
&gt; +#define STRINGIFY(...) #__VA_ARGS__

This is a nit, but it would look a little bit cleaner if this was at the top of the file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743365</commentid>
    <comment_count>29</comment_count>
      <attachid>168989</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-16 11:44:42 -0700</bug_when>
    <thetext>Created attachment 168989
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743405</commentid>
    <comment_count>30</comment_count>
      <attachid>168989</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-16 12:13:49 -0700</bug_when>
    <thetext>Comment on attachment 168989
Patch for landing

Clearing flags on attachment: 168989

Committed r131485: &lt;http://trac.webkit.org/changeset/131485&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743406</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-16 12:13:55 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743511</commentid>
    <comment_count>32</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-10-16 13:47:36 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (From update of attachment 168989 [details])
&gt; Clearing flags on attachment: 168989
&gt; 
&gt; Committed r131485: &lt;http://trac.webkit.org/changeset/131485&gt;

It broke the build - https://bugs.webkit.org/show_bug.cgi?id=99499
Could you fix it please? (Sorry, but I have better todos than fixing
build issues before midnight.)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141068</attachid>
            <date>2012-05-09 18:14:33 -0700</date>
            <delta_ts>2012-05-10 09:11:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86048-20120509181420.patch</filename>
            <type>text/plain</type>
            <size>46509</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2NTQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGYxNjlkMDk2YWQxM2Rh
YzcyZTYzMGYyZDZhNzY3NjhkZDNlMjZkMy4uMmVlMTdjYTdmN2I1MGZkMGFiOWJiZjNkNDk0MjE0
YTRkN2FmMzBjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA1LTA5ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1RleG1h
cF0gUmVmYWN0b3IgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgdG8gYmUgY2xlYXJlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYwNDgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmVkIFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLCBhbmQgaW5zdGVhZCB1c2UgYSBUZXh0dXJlTWFwcGVyU2hh
ZGVyIGNsYXNzIHRoYXQgaG9sZHMKKyAgICAgICAgdGhlIHNoYWRlciBpbmZvcm1hdGlvbiBhbmQg
aXMgcmVzcG9uc2libGUgZm9yIGNsZWFudXAuCisKKyAgICAgICAgTW92ZWQgdGhlIGFjdHVhbCBz
aGFkZXIgZGF0YSBiYWNrIGludG8gVGV4dHVyZU1hcHBlckdMLCBhcyB0aGUgc2hhZGVycyBhcmUg
dGlnaHRseQorICAgICAgICBpbnRlZ3JhdGVkIHdpdGggdGhlIGRyYXdpbmcgY29kZS4KKworICAg
ICAgICBVc2Ugb25lIHNoYWRlciBmb3IgYWxsIHRoZSBjb2xvcml6ZSBmaWx0ZXJzLgorCisgICAg
ICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMgaW4gTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcg
YW5kIGNzczMvZmlsdGVycy4KKworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFNpbXBsZVNoYWRlckRlZmluaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlU2hhZGVyRGVmaW5pdGlvbjo6Z2V0KToKKyAgICAgICAgKE1hc2tlZFNoYWRlckRl
ZmluaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWFza2VkU2hhZGVyRGVmaW5pdGlvbjo6Z2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yaXplU2hhZGVyRGVmaW5pdGlvbjo6Z2V0KToKKyAg
ICAgICAgKFNoYXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xE
YXRhOjpTaGFyZWRHTERhdGE6OmNyZWF0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OmdldFNoYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OmV4
dHJhY3RGaWx0ZXJBbW91bnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpk
cmF3RmlsdGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdpbkNs
aXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmg6IFJlbW92ZWQuCisKIDIwMTItMDUtMDkg
IENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3Nh
Lm9yZz4KIAogICAgICAgICBTaW1wbGlmeSBDU1NQYXJzZXI6OnBhcnNlU2ltcGxlTGVuZ3RoVmFs
dWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkKaW5kZXggZTQ3YTMzNWQwMjhlODEzNGEzYjVmYThlOGU5Mjk0YmQxNGFl
N2UzZS4uMmNkZGQ3ZjY2MTUxOGQ3ZDg5ZTg3M2FjMDY3MDMxMzUzZjZhNmNhZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpCkBAIC00MTA4LDExICs0MTA4LDExIEBAIGNvbnRhaW5zKENPTkZJRywgdGV4bWFwKSB7CiAg
ICAgIXdpbjMyLSo6Y29udGFpbnMoUVRfQ09ORklHLCBvcGVuZ2wpIHsKICAgICAgICAgSEVBREVS
UyArPSBcCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckdMLmggXAotICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyLmgKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyU2hhZGVyLmgKIAogICAgICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwIFwKLSAgICAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5j
cHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hh
ZGVyLmNwcAogCiAgICAgICAgIENPTkZJRyArPSBvcGVuZ2wtc2hpbXMKICAgICAgICAgREVGSU5F
UyArPSBXVEZfVVNFX1RFWFRVUkVfTUFQUEVSX0dMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4
IGRmOWI4YjAzZTJjZTE4NjU0YjU0ZTM2NWJiMDQwNTgzNDBlMmQxMzQuLjU3MDVlZWUwZmIyOGZh
NDliYWZmOTc4NGZhZjk0ZDJiMjdlYTgxOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0y
Miw3ICsyMiw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJ
bWFnZS5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgiCisjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlclNoYWRlci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KQEAgLTUxLDggKzUx
LDIyMCBAQAogI2luY2x1ZGUgPGNhaXJvLmg+CiAjZW5kaWYKIAotI2RlZmluZSBHTF9DTUQoLi4u
KSBkbyB7IF9fVkFfQVJHU19fOyBBU1NFUlRfQVJHKF9fVkFfQVJHU19fLCAhZ2xHZXRFcnJvcigp
KTsgfSB3aGlsZSAoMCkKKyNpZm5kZWYgVEVYTUFQX09QRU5HTF9FU18yCisjZGVmaW5lIE9FUzJf
UFJFQ0lTSU9OX0RFRklOSVRJT05TIFwKKyAgICAiI2RlZmluZSBsb3dwXG4jZGVmaW5lIGhpZ2hw
XG4iCisjZGVmaW5lIE9FUzJfRlJBR01FTlRfU0hBREVSX0RFRkFVTFRfUFJFQ0lTSU9OCisjZWxz
ZQorI2RlZmluZSBPRVMyX1BSRUNJU0lPTl9ERUZJTklUSU9OUworI2RlZmluZSBPRVMyX0ZSQUdN
RU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJU0lPTiBcCisgICAgInByZWNpc2lvbiBtZWRpdW1wIGZs
b2F0OyBcbiIKKyNlbmRpZgorCisjZGVmaW5lIFZFUlRFWF9TSEFERVIoc3JjLi4uKSBPRVMyX1BS
RUNJU0lPTl9ERUZJTklUSU9OUyNzcmMKKyNkZWZpbmUgRlJBR01FTlRfU0hBREVSKHNyYy4uLikg
T0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlNcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE9FUzJfRlJBR01FTlRfU0hBREVSX0RFRkFVTFRfUFJFQ0lTSU9OXAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAjc3JjCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0
IFNpbXBsZVNoYWRlckRlZmluaXRpb24geworcHVibGljOgorICAgIGVudW0gQXR0cmlidXRlcyB7
IFBvc2l0aW9uIH07CisgICAgZW51bSBVbmlmb3JtcyB7IE1hdHJpeCwgU291cmNlTWF0cml4LCBB
bHBoYSwgVGV4dHVyZSB9OworCisgICAgc3RhdGljIGNvbnN0IFRleHR1cmVNYXBwZXJTaGFkZXI6
OkRlZmluaXRpb24mIGdldCgpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogYXR0
cmlidXRlc1tdID0geyAiYV9wb3NpdGlvbiIsIDAgfTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNo
YXIqIHVuaWZvcm1zW10gPSB7ICJ1X21hdHJpeCIsICJ1X3NvdXJjZU1hdHJpeCIsICJ1X2FscGhh
IiwgInVfdGV4dHVyZSIsIDAgfTsKKyAgICAgICAgc3RhdGljIFRleHR1cmVNYXBwZXJTaGFkZXI6
OkRlZmluaXRpb24gZGVmaW5pdGlvbiA9IHsKKyAgICAgICAgICAgIFZFUlRFWF9TSEFERVIoCisg
ICAgICAgICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4LCB1X3NvdXJjZU1hdHJpeDsKKyAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3Bvc2l0aW9uOworICAgICAgICAgICAgICAg
IHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOworICAgICAgICAgICAgICAgIHZvaWQgbWFp
bih2b2lkKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdl90ZXhDb29y
ZCA9IHZlYzIodV9zb3VyY2VNYXRyaXggKiBhX3Bvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICAg
ICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIGFfcG9zaXRpb247CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIEZSQUdNRU5UX1NIQURFUigKKyAgICAgICAg
ICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7CisgICAgICAgICAgICAgICAgdW5p
Zm9ybSBsb3dwIGZsb2F0IHVfYWxwaGE7CisgICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2
ZWMyIHZfdGV4Q29vcmQ7CisgICAgICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJl
MkQodV90ZXh0dXJlLCB2X3RleENvb3JkKTsKKyAgICAgICAgICAgICAgICAgICAgZ2xfRnJhZ0Nv
bG9yID0gdmVjNChjb2xvci5yZ2IgKiB1X2FscGhhLCBjb2xvci5hICogdV9hbHBoYSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGF0dHJpYnV0ZXMsIHVu
aWZvcm1zCisgICAgICAgIH07CisKKyAgICAgICAgcmV0dXJuIGRlZmluaXRpb247CisgICAgfQor
fTsKKworc3RydWN0IE1hc2tlZFNoYWRlckRlZmluaXRpb24geworcHVibGljOgorICAgIGVudW0g
QXR0cmlidXRlcyB7IFBvc2l0aW9uIH07CisgICAgZW51bSBVbmlmb3JtcyB7IE1hdHJpeCwgU291
cmNlTWF0cml4LCBBbHBoYSwgVGV4dHVyZSwgTWFzayB9OworCisgICAgc3RhdGljIGNvbnN0IFRl
eHR1cmVNYXBwZXJTaGFkZXI6OkRlZmluaXRpb24mIGdldCgpCisgICAgeworICAgICAgICBzdGF0
aWMgY29uc3QgY2hhciogYXR0cmlidXRlc1tdID0geyAiYV9wb3NpdGlvbiIsIDAgfTsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIHVuaWZvcm1zW10gPSB7ICJ1X21hdHJpeCIsICJ1X3NvdXJj
ZU1hdHJpeCIsICJ1X2FscGhhIiwgInVfdGV4dHVyZSIsIDAgfTsKKyAgICAgICAgc3RhdGljIFRl
eHR1cmVNYXBwZXJTaGFkZXI6OkRlZmluaXRpb24gZGVmaW5pdGlvbiA9IHsKKyAgICAgICAgICAg
IFZFUlRFWF9TSEFERVIoCisgICAgICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV9wb3NpdGlv
bjsKKyAgICAgICAgICAgICAgICB1bmlmb3JtIG1hdDQgdV9tYXRyaXgsIHVfc291cmNlTWF0cml4
OworICAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkLCB2X3RleENv
b3JkTWFzazsKKyAgICAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHZfdGV4Q29vcmQgPSB2ZWMyKHVfc291cmNlTWF0cml4
ICogYV9wb3NpdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHZfdGV4Q29vcmRNYXNrID0gdmVj
MihhX3Bvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X21hdHJp
eCAqIGFfcG9zaXRpb247CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgKSwKKyAgICAg
ICAgICAgIEZSQUdNRU5UX1NIQURFUigKKyAgICAgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIy
RCB1X3RleHR1cmUsIHVfbWFzazsKKyAgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQg
dV9hbHBoYTsKKyAgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZCwg
dl90ZXhDb29yZE1hc2s7CisgICAgICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJl
MkQodV90ZXh0dXJlLCB2X3RleENvb3JkKTsKKyAgICAgICAgICAgICAgICAgICAgbG93cCB2ZWM0
IG1hc2tDb2xvciA9IHRleHR1cmUyRCh1X21hc2ssIHZfdGV4Q29vcmRNYXNrKTsKKyAgICAgICAg
ICAgICAgICAgICAgbG93cCBmbG9hdCBmcmFnbWVudEFscGhhID0gdV9hbHBoYSAqIG1hc2tDb2xv
ci5hOworICAgICAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAq
IGZyYWdtZW50QWxwaGEsIGNvbG9yLmEgKiBmcmFnbWVudEFscGhhKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICApLAorICAgICAgICAgICAgYXR0cmlidXRlcywgdW5pZm9ybXMKKyAg
ICAgICAgfTsKKworICAgICAgICByZXR1cm4gZGVmaW5pdGlvbjsKKyAgICB9Cit9OworCisjaWYg
RU5BQkxFKENTU19GSUxURVJTKQorc3RydWN0IENvbG9yaXplU2hhZGVyRGVmaW5pdGlvbiAgewor
ICAgIGVudW0gQXR0cmlidXRlcyB7IFBvc2l0aW9uLCBUZXhDb29yZCB9OworICAgIGVudW0gVW5p
Zm9ybXMgeyBUZXh0dXJlLCBGaWx0ZXJUeXBlLCBGaWx0ZXJBbW91bnQgfTsKKyAgICBzdGF0aWMg
Y29uc3QgVGV4dHVyZU1hcHBlclNoYWRlcjo6RGVmaW5pdGlvbiYgZ2V0KCkKKyAgICB7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBhdHRyaWJ1dGVzW10gPSB7ICJhX3Bvc2l0aW9uIiwgImFf
dGV4Q29vcmQiLCAwIH07CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiB1bmlmb3Jtc1tdID0g
eyAidV90ZXh0dXJlIiwgInVfZmlsdGVyVHlwZSIsICJ1X2ZpbHRlckFtb3VudCIsIDAgfTsKKwor
ICAgICAgICBzdGF0aWMgVGV4dHVyZU1hcHBlclNoYWRlcjo6RGVmaW5pdGlvbiBkZWZpbml0aW9u
ID0geworICAgICAgICAgICAgVkVSVEVYX1NIQURFUigKKyAgICAgICAgICAgICAgICBhdHRyaWJ1
dGUgdmVjNCBhX3Bvc2l0aW9uOworICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdGV4
Q29vcmQ7CisgICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7Cisg
ICAgICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICB2X3RleENvb3JkID0gYV90ZXhDb29yZC54eTsKKyAgICAgICAgICAgICAg
ICAgICAgZ2xfUG9zaXRpb24gPSBhX3Bvc2l0aW9uOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICksCisgICAgICAgICAgICBGUkFHTUVOVF9TSEFERVIoCisgICAgICAgICAgICAgICAg
dW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlOworICAgICAgICAgICAgICAgIHVuaWZvcm0gbG93
cCBmbG9hdCB1X2ZpbHRlckFtb3VudDsKKyAgICAgICAgICAgICAgICB1bmlmb3JtIGludCB1X2Zp
bHRlclR5cGU7CisgICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7
CisgICAgICAgICAgICAgICAgY29uc3QgaW50IEdyYXlzY2FsZSAgPSAxOworICAgICAgICAgICAg
ICAgIGNvbnN0IGludCBTZXBpYSAgICAgID0gMjsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQg
U2F0dXJhdGUgICA9IDM7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IEh1ZVJvdGF0ZSAgPSA0
OworICAgICAgICAgICAgICAgIGNvbnN0IGludCBJbnZlcnQgICAgID0gNTsKKyAgICAgICAgICAg
ICAgICBjb25zdCBpbnQgT3BhY2l0eSAgICA9IDY7CisgICAgICAgICAgICAgICAgY29uc3QgaW50
IEJyaWdodG5lc3MgPSA3OworICAgICAgICAgICAgICAgIGNvbnN0IGludCBDb250cmFzdCAgID0g
ODsKKworICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBncmF5c2NhbGUobG93cCB2ZWM0IGNvbG9y
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbG93cCBmbG9hdCBhbW91
bnQgPSAxLjAgLSB1X2ZpbHRlckFtb3VudDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZl
YzQoKDAuMjEyNiArIDAuNzg3NCAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1MiAtIDAuNzE1
MiAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiAtIDAuMDcyMiAqIGFtb3VudCkgKiBjb2xv
ci5iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yMTI2IC0gMC4yMTI2ICog
YW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUyICsgMC4yODQ4ICogYW1vdW50KSAqIGNvbG9yLmcg
KyAoMC4wNzIyIC0gMC4wNzIyICogYW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICgwLjIxMjYgLSAwLjIxMjYgKiBhbW91bnQpICogY29sb3IuciArICgw
LjcxNTIgLSAwLjcxNTIgKiBhbW91bnQpICogY29sb3IuZyArICgwLjA3MjIgKyAwLjkyNzggKiBh
bW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3Iu
YSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbG93cCB2ZWM0IHNlcGlh
KGxvd3AgdmVjNCBjb2xvcikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGxvd3AgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9maWx0ZXJBbW91bnQ7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB2ZWM0KCgwLjM5MyArIDAuNjA3ICogYW1vdW50KSAqIGNvbG9yLnIgKyAo
MC43NjkgLSAwLjc2OSAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTg5IC0gMC4xODkgKiBhbW91
bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMzQ5IC0g
MC4zNDkgKiBhbW91bnQpICogY29sb3IuciArICgwLjY4NiArIDAuMzE0ICogYW1vdW50KSAqIGNv
bG9yLmcgKyAoMC4xNjggLSAwLjE2OCAqIGFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoMC4yNzIgLSAwLjI3MiAqIGFtb3VudCkgKiBjb2xvci5yICsg
KDAuNTM0IC0gMC41MzQgKiBhbW91bnQpICogY29sb3IuZyArICgwLjEzMSArIDAuODY5ICogYW1v
dW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLmEp
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBzYXR1cmF0
ZShsb3dwIHZlYzQgY29sb3IpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdmVjNCgoMC4yMTMgKyAwLjc4NyAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLnIg
KyAoMC43MTUgLSAwLjcxNSAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgLSAw
LjA3MiAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICgwLjIxMyAtIDAuMjEzICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuciArICgw
LjcxNSArIDAuMjg1ICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuZyArICgwLjA3MiAtIDAuMDcy
ICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKDAuMjEzIC0gMC4yMTMgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1
IC0gMC43MTUgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyICsgMC45MjggKiB1
X2ZpbHRlckFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb2xvci5hKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBsb3dwIHZl
YzQgaHVlUm90YXRlKGxvd3AgdmVjNCBjb2xvcikKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGhpZ2hwIGZsb2F0IGMgPSBjb3MocmFkaWFucyh1X2ZpbHRlckFtb3VudCkp
OworICAgICAgICAgICAgICAgICAgICBoaWdocCBmbG9hdCBzID0gc2luKHJhZGlhbnModV9maWx0
ZXJBbW91bnQpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29sb3IuciAqICgw
LjIxMyArIGMgKiAwLjc4NyAtIHMgKiAwLjIxMykgKyBjb2xvci5nICogKDAuNzE1IC0gYyAqIDAu
NzE1IC0gcyAqIDAuNzE1KSArIGNvbG9yLmIgKiAoMC4wNzIgLSBjICogMC4wNzIgKyBzICogMC45
MjgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5yICogKDAuMjEzIC0g
YyAqIDAuMjEzICsgcyAqIDAuMTQzKSArIGNvbG9yLmcgKiAoMC43MTUgKyBjICogMC4yODUgKyBz
ICogMC4xNDApICsgY29sb3IuYiAqICgwLjA3MiAtIGMgKiAwLjA3MiAtIHMgKiAwLjI4MyksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLnIgKiAoMC4yMTMgLSBjICogMC4y
MTMgLSBzICogMC43ODcpICsgIGNvbG9yLmcgKiAoMC43MTUgLSBjICogMC43MTUgKyBzICogMC43
MTUpICsgY29sb3IuYiAqICgwLjA3MiArIGMgKiAwLjkyOCArIHMgKiAwLjA3MiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLmEpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgaW52ZXJ0Q2hhbm5lbChsb3dwIGZsb2F0IG4pIHsg
cmV0dXJuICgxLjAgLSBuKSAqIHVfZmlsdGVyQW1vdW50ICsgbiAqICgxLjAgLSB1X2ZpbHRlckFt
b3VudCk7IH0KKworICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBpbnZlcnQobG93cCB2ZWM0IGNv
bG9yKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQo
aW52ZXJ0Q2hhbm5lbChjb2xvci5yKSwgaW52ZXJ0Q2hhbm5lbChjb2xvci5nKSwgaW52ZXJ0Q2hh
bm5lbChjb2xvci5iKSwgY29sb3IuYSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgbG93cCB2ZWM0IGJyaWdodG5lc3MobG93cCB2ZWM0IGNvbG9yKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29sb3IucmdiICogKDEuMCAr
IHVfZmlsdGVyQW1vdW50KSwgY29sb3IuYSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgbG93cCBmbG9hdCBjb250cmFzdENoYW5uZWwobG93cCBmbG9hdCBuKSB7IHJldHVy
biAobiAtIDAuNSkgKiB1X2ZpbHRlckFtb3VudCArIDAuNTsgfQorICAgICAgICAgICAgICAgIGxv
d3AgdmVjNCBjb250cmFzdChsb3dwIHZlYzQgY29sb3IpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdmVjNChjb250cmFzdENoYW5uZWwoY29sb3IuciksIGNv
bnRyYXN0Q2hhbm5lbChjb2xvci5nKSwgY29udHJhc3RDaGFubmVsKGNvbG9yLmIpLCBjb2xvci5h
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBsb3dwIHZlYzQgb3BhY2l0
eShsb3dwIHZlYzQgY29sb3IpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdmVjNChjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hICogdV9maWx0
ZXJBbW91bnQpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGxvd3AgZmxv
YXQgZmFjdG9yKGludCB0eXBlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZsb2F0KHR5cGUgPT0gdV9maWx0ZXJUeXBlKTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1X3RleHR1cmUs
IHZfdGV4Q29vcmQpOworICAgICAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSBmYWN0b3Io
R3JheXNjYWxlKSAqIGdyYXlzY2FsZShjb2xvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICsgZmFjdG9yKFNlcGlhKSAqIHNlcGlhKGNvbG9yKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKyBmYWN0b3IoU2F0dXJhdGUpICogc2F0dXJhdGUoY29sb3Ip
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGZhY3RvcihIdWVSb3RhdGUp
ICogaHVlUm90YXRlKGNvbG9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KyBmYWN0b3IoSW52ZXJ0KSAqIGludmVydChjb2xvcikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICsgZmFjdG9yKE9wYWNpdHkpICogb3BhY2l0eShjb2xvcikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZmFjdG9yKEJyaWdodG5lc3MpICogYnJpZ2h0
bmVzcyhjb2xvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZmFjdG9y
KENvbnRyYXN0KSAqIGNvbnRyYXN0KGNvbG9yKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICApLAorICAgICAgICAgICAgYXR0cmlidXRlcywgdW5pZm9ybXMKKyAgICAgICAgfTsKKyAg
ICAgICAgcmV0dXJuIGRlZmluaXRpb247CisgICAgfQorfTsKKyNlbmRpZgorCisjZGVmaW5lIEdM
X0NNRCguLi4pIGRvIHsgX19WQV9BUkdTX187IEFTU0VSVF9BUkcoX19WQV9BUkdTX18sICFnbEdl
dEVycm9yKCkpOyB9IHdoaWxlICgwKQorCiBzdHJ1Y3QgVGV4dHVyZU1hcHBlckdMRGF0YSB7CiAg
ICAgc3RydWN0IFNoYXJlZEdMRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJlZEdMRGF0YT4g
ewogI2lmIFBMQVRGT1JNKFFUKQpAQCAtMTE2LDkgKzMyOCwxNCBAQCBzdHJ1Y3QgVGV4dHVyZU1h
cHBlckdMRGF0YSB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZEdMRGF0
YShnZXRDdXJyZW50R0xDb250ZXh0KCkpKTsKICAgICAgICAgfQogCisgICAgICAgIGVudW0gU2hh
ZGVyVHlwZSB7CisgICAgICAgICAgICBOb1NoYWRlciwKKyAgICAgICAgICAgIFNpbXBsZVNoYWRl
ciwKKyAgICAgICAgICAgIE1hc2tlZFNoYWRlciwKKyAgICAgICAgICAgIENvbG9yaXplU2hhZGVy
CisgICAgICAgIH07CiAKIAotICAgICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlciB0ZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjsKIAogICAgICAgICBTaGFyZWRHTERhdGEoR0xDb250ZXh0
IGdsQ29udGV4dCkKICAgICAgICAgewpAQCAtMTM3LDYgKzM1NCwzOSBAQCBzdHJ1Y3QgVGV4dHVy
ZU1hcHBlckdMRGF0YSB7CiAgICAgICAgICAgICBBU1NFUlQoaXQgIT0gZW5kKTsKICAgICAgICAg
ICAgIGdsQ29udGV4dERhdGFNYXAoKS5yZW1vdmUoaXQpOwogICAgICAgICB9CisKKworICAgICAg
ICBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXI+IGNyZWF0ZVNoYWRlcihTaGFkZXJUeXBl
IHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAg
ICAgY2FzZSBTaW1wbGVTaGFkZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBw
ZXJTaGFkZXI6OmNyZWF0ZShTaW1wbGVTaGFkZXJEZWZpbml0aW9uOjpnZXQoKSk7CisgICAgICAg
ICAgICBjYXNlIE1hc2tlZFNoYWRlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gVGV4dHVyZU1h
cHBlclNoYWRlcjo6Y3JlYXRlKE1hc2tlZFNoYWRlckRlZmluaXRpb246OmdldCgpKTsKKyNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgICAgICAgICBjYXNlIENvbG9yaXplU2hhZGVyOgorICAg
ICAgICAgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyOjpjcmVhdGUoQ29sb3JpemVT
aGFkZXJEZWZpbml0aW9uOjpnZXQoKSk7CisjZW5kaWYKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
PiBnZXRTaGFkZXIoU2hhZGVyVHlwZSB0eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBIYXNo
TWFwPGludCwgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXI+ID46Oml0ZXJhdG9yIGl0ID0gc2hh
ZGVycy5maW5kKHR5cGUpOworICAgICAgICAgICAgaWYgKGl0ICE9IHNoYWRlcnMuZW5kKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisKKyAgICAgICAgICAgIFJlZlB0cjxU
ZXh0dXJlTWFwcGVyU2hhZGVyPiBzaGFkZXIgPSBjcmVhdGVTaGFkZXIodHlwZSk7CisKKyAgICAg
ICAgICAgIHNoYWRlcnMuYWRkKHR5cGUsIHNoYWRlcik7CisgICAgICAgICAgICByZXR1cm4gc2hh
ZGVyOworICAgICAgICB9CisKKyAgICAgICAgSGFzaE1hcDxpbnQsIFJlZlB0cjxUZXh0dXJlTWFw
cGVyU2hhZGVyPiA+IHNoYWRlcnM7CiAgICAgfTsKIAogICAgIFNoYXJlZEdMRGF0YSYgc2hhcmVk
R0xEYXRhKCkgY29uc3QKQEAgLTMxOSwxOSArNTY5LDIxIEBAIHZvaWQgVGV4dHVyZU1hcHBlckdM
OjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJl
Y3QmCiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJl
LCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJp
eCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCiB7Ci0g
ICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBzaGFkZXJJbmZvOworICAgIFJl
ZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyPiBzaGFkZXI7CisKICAgICBpZiAobWFza1RleHR1cmUp
Ci0gICAgICAgIHNoYWRlckluZm8gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6T3BhY2l0eUFuZE1hc2spOworICAgICAgICBzaGFkZXIgPSBkYXRhKCkuc2hhcmVkR0xEYXRh
KCkuZ2V0U2hhZGVyKFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6TWFza2VkU2hh
ZGVyKTsKICAgICBlbHNlCi0gICAgICAgIHNoYWRlckluZm8gPSBkYXRhKCkuc2hhcmVkR0xEYXRh
KCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6U2ltcGxlKTsKKyAgICAgICAgc2hhZGVyID0gZGF0YSgpLnNoYXJl
ZEdMRGF0YSgpLmdldFNoYWRlcihUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OlNp
bXBsZVNoYWRlcik7CiAKLSAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHNoYWRlckluZm8tPmlkKCkp
KTsKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJJbmZvLT52ZXJ0
ZXhBdHRyaWIoKSkpOworICAgIEdMdWludCB2ZXJ0ZXhBdHRyaWIgPSBzaGFkZXItPmdldEF0dHJp
YnV0ZUxvY2F0aW9uKFNpbXBsZVNoYWRlckRlZmluaXRpb246OlBvc2l0aW9uKTsKKyAgICBHTF9D
TUQoZ2xVc2VQcm9ncmFtKHNoYWRlci0+cHJvZ3JhbUlEKCkpKTsKKyAgICBHTF9DTUQoZ2xFbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheSh2ZXJ0ZXhBdHRyaWIpKTsKICAgICBHTF9DTUQoZ2xBY3RpdmVU
ZXh0dXJlKEdMX1RFWFRVUkUwKSk7CiAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgdGV4dHVyZSkpOwogICAgIEdMX0NNRChnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVS
LCAwKSk7CiAgICAgY29uc3QgR0xmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEsIDAsIDEsIDEs
IDAsIDF9OwotICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVySW5mby0+dmVy
dGV4QXR0cmliKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdW5pdFJlY3QpKTsKKyAgICBH
TF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHZlcnRleEF0dHJpYiwgMiwgR0xfRkxPQVQsIEdM
X0ZBTFNFLCAwLCB1bml0UmVjdCkpOwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4
ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpLm11bHRpcGx5
KG1vZGVsVmlld01hdHJpeCkubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgoCiAgICAgICAg
ICAgICB0YXJnZXRSZWN0LndpZHRoKCksIDAsIDAsIDAsCkBAIC0zNTIsMTEgKzYwNCwxOCBAQCB2
b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVyZSwgRmxhZ3Mg
ZmxhZ3MsIGNvbnN0IEludFNpemUmCiAgICAgICAgIDAsIDAsIDEsIDAsCiAgICAgICAgIDAsIChm
bGFncyAmIFNob3VsZEZsaXBUZXh0dXJlKSA/IDEgOiAwLCAwLCAxfTsKIAotICAgIEdMX0NNRChn
bFVuaWZvcm1NYXRyaXg0ZnYoc2hhZGVySW5mby0+bWF0cml4VmFyaWFibGUoKSwgMSwgR0xfRkFM
U0UsIG00KSk7Ci0gICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihzaGFkZXJJbmZvLT5zb3Vy
Y2VNYXRyaXhWYXJpYWJsZSgpLCAxLCBHTF9GQUxTRSwgbTRzcmMpKTsKLSAgICBHTF9DTUQoZ2xV
bmlmb3JtMWkoc2hhZGVySW5mby0+c291cmNlVGV4dHVyZVZhcmlhYmxlKCksIDApKTsKLQotICAg
IHNoYWRlckluZm8tPnByZXBhcmUob3BhY2l0eSwgbWFza1RleHR1cmUpOworICAgIEdMX0NNRChn
bFVuaWZvcm1NYXRyaXg0ZnYoc2hhZGVyLT5nZXRVbmlmb3JtTG9jYXRpb24oU2ltcGxlU2hhZGVy
RGVmaW5pdGlvbjo6TWF0cml4KSwgMSwgR0xfRkFMU0UsIG00KSk7CisgICAgR0xfQ01EKGdsVW5p
Zm9ybU1hdHJpeDRmdihzaGFkZXItPmdldFVuaWZvcm1Mb2NhdGlvbihTaW1wbGVTaGFkZXJEZWZp
bml0aW9uOjpTb3VyY2VNYXRyaXgpLCAxLCBHTF9GQUxTRSwgbTRzcmMpKTsKKyAgICBHTF9DTUQo
Z2xVbmlmb3JtMWkoc2hhZGVyLT5nZXRVbmlmb3JtTG9jYXRpb24oU2ltcGxlU2hhZGVyRGVmaW5p
dGlvbjo6VGV4dHVyZSksIDApKTsKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWYoc2hhZGVyLT5nZXRV
bmlmb3JtTG9jYXRpb24oU2ltcGxlU2hhZGVyRGVmaW5pdGlvbjo6QWxwaGEpLCBvcGFjaXR5KSk7
CisKKyAgICBpZiAobWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQoKSkgeworICAg
ICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wqIG1hc2tUZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxj
b25zdCBCaXRtYXBUZXh0dXJlR0wqPihtYXNrVGV4dHVyZSk7CisgICAgICAgIGdsQWN0aXZlVGV4
dHVyZShHTF9URVhUVVJFMSk7CisgICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
bWFza1RleHR1cmVHTC0+aWQoKSk7CisgICAgICAgIGdsVW5pZm9ybTFpKHNoYWRlci0+Z2V0VW5p
Zm9ybUxvY2F0aW9uKE1hc2tlZFNoYWRlckRlZmluaXRpb246Ok1hc2spLCAxKTsKKyAgICAgICAg
Z2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICB9CiAKICAgICBib29sIG5lZWRzQmxl
bmRpbmcgPSAoZmxhZ3MgJiBTdXBwb3J0c0JsZW5kaW5nKSB8fCBvcGFjaXR5IDwgMC45OSB8fCBt
YXNrVGV4dHVyZTsKIApAQCAtMzY3LDcgKzYyNiw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpk
cmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYK
ICAgICAgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9CTEVORCkpOwogCiAgICAgR0xfQ01EKGdsRHJh
d0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpKTsKLSAgICBHTF9DTUQoZ2xEaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkoc2hhZGVySW5mby0+dmVydGV4QXR0cmliKCkpKTsKKyAgICBHTF9DTUQo
Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodmVydGV4QXR0cmliKSk7CiB9CiAKIGNvbnN0IGNo
YXIqIFRleHR1cmVNYXBwZXJHTDo6dHlwZSgpIGNvbnN0CkBAIC01MDUsMjggKzc2NCw1NyBAQCB2
b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMoSW1hZ2UqIGltYWdlLCBjb25zdCBJ
bnRSZWN0JiB0YXJnZXRSZWN0LCBjbwogICAgIHVwZGF0ZUNvbnRlbnRzKGltYWdlRGF0YSwgdGFy
Z2V0UmVjdCwgb2Zmc2V0LCBieXRlc1BlckxpbmUpOwogfQogCisKICNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCitzdGF0aWMgZG91YmxlIGV4dHJhY3RGaWx0ZXJBbW91bnQoY29uc3QgRmlsdGVyT3Bl
cmF0aW9uJiBvcGVyYXRpb24pCit7CisgICAgc3dpdGNoIChvcGVyYXRpb24uZ2V0T3BlcmF0aW9u
VHlwZSgpKSB7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKKyAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVS
QVRFOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgorICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiY+KG9w
ZXJhdGlvbikuYW1vdW50KCk7CisKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgor
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgorICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpDT05UUkFTVDoKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0
ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpOworCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgVGV4dHVyZU1hcHBl
ckdMOjpkcmF3RmlsdGVyZWQoY29uc3QgQml0bWFwVGV4dHVyZSYgc291cmNlVGV4dHVyZSwgY29u
c3QgQml0bWFwVGV4dHVyZSYgY29udGVudFRleHR1cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbiYg
ZmlsdGVyKQogewogICAgIC8vIEZvciBzdGFuZGFyZCBmaWx0ZXJzLCB3ZSBhbHdheXMgZHJhdyB0
aGUgd2hvbGUgdGV4dHVyZSB3aXRob3V0IHRyYW5zZm9ybWF0aW9ucy4KLSAgICBSZWZQdHI8U3Rh
bmRhcmRGaWx0ZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlckZvckZpbHRlcihmaWx0ZXIpOwotICAgIGlm
ICghcHJvZ3JhbSkgeworICAgIGlmIChmaWx0ZXIuZ2V0T3BlcmF0aW9uVHlwZSgpIDwgRmlsdGVy
T3BlcmF0aW9uOjpHUkFZU0NBTEUgfHwgZmlsdGVyLmdldE9wZXJhdGlvblR5cGUoKSA+IEZpbHRl
ck9wZXJhdGlvbjo6Q09OVFJBU1QpIHsKICAgICAgICAgZHJhd1RleHR1cmUoc291cmNlVGV4dHVy
ZSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgc291cmNlVGV4dHVyZS5zaXplKCkpLCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCAxLCAwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIo
KSkpOwotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENv
b3JkQXR0cmliKCkpKTsKKworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyPiBzaGFkZXIg
PSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuZ2V0U2hhZGVyKFRleHR1cmVNYXBwZXJHTERhdGE6OlNo
YXJlZEdMRGF0YTo6Q29sb3JpemVTaGFkZXIpOworICAgIEdMX0NNRChnbFVzZVByb2dyYW0oc2hh
ZGVyLT5wcm9ncmFtSUQoKSkpOworICAgIEdMdWludCB2ZXJ0ZXhBdHRyaWIgPSBzaGFkZXItPmdl
dEF0dHJpYnV0ZUxvY2F0aW9uKENvbG9yaXplU2hhZGVyRGVmaW5pdGlvbjo6UG9zaXRpb24pOwor
ICAgIEdMdWludCB0ZXhDb29yZEF0dHJpYiA9IHNoYWRlci0+Z2V0QXR0cmlidXRlTG9jYXRpb24o
Q29sb3JpemVTaGFkZXJEZWZpbml0aW9uOjpUZXhDb29yZCk7CisgICAgR0xfQ01EKGdsRW5hYmxl
VmVydGV4QXR0cmliQXJyYXkodmVydGV4QXR0cmliKSk7CisgICAgR0xfQ01EKGdsRW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkodGV4Q29vcmRBdHRyaWIpKTsKICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0
dXJlKEdMX1RFWFRVUkUwKSk7CiAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oc291cmNlVGV4dHVyZSkuaWQo
KSkpOwotICAgIGdsVW5pZm9ybTFpKHByb2dyYW0tPnRleHR1cmVVbmlmb3JtKCksIDApOworICAg
IGdsVW5pZm9ybTFpKHNoYWRlci0+Z2V0VW5pZm9ybUxvY2F0aW9uKENvbG9yaXplU2hhZGVyRGVm
aW5pdGlvbjo6VGV4dHVyZSksIDApOworICAgIGdsVW5pZm9ybTFpKHNoYWRlci0+Z2V0VW5pZm9y
bUxvY2F0aW9uKENvbG9yaXplU2hhZGVyRGVmaW5pdGlvbjo6RmlsdGVyVHlwZSksIGZpbHRlci5n
ZXRPcGVyYXRpb25UeXBlKCkpOworICAgIGdsVW5pZm9ybTFmKHNoYWRlci0+Z2V0VW5pZm9ybUxv
Y2F0aW9uKENvbG9yaXplU2hhZGVyRGVmaW5pdGlvbjo6RmlsdGVyQW1vdW50KSwgZXh0cmFjdEZp
bHRlckFtb3VudChmaWx0ZXIpKTsKICAgICBjb25zdCBHTGZsb2F0IHRhcmdldFZlcnRpY2VzW10g
PSB7LTEsIC0xLCAxLCAtMSwgMSwgMSwgLTEsIDF9OwogICAgIGNvbnN0IEdMZmxvYXQgc291cmNl
VmVydGljZXNbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKLSAgICBHTF9DTUQoZ2xWZXJ0
ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleEF0dHJpYigpLCAyLCBHTF9GTE9BVCwgR0xf
RkFMU0UsIDAsIHRhcmdldFZlcnRpY2VzKSk7Ci0gICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9p
bnRlcihwcm9ncmFtLT50ZXhDb29yZEF0dHJpYigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAs
IHNvdXJjZVZlcnRpY2VzKSk7CisgICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcih2ZXJ0
ZXhBdHRyaWIsIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdGFyZ2V0VmVydGljZXMpKTsKKyAg
ICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHRleENvb3JkQXR0cmliLCAyLCBHTF9GTE9B
VCwgR0xfRkFMU0UsIDAsIHNvdXJjZVZlcnRpY2VzKSk7CiAgICAgR0xfQ01EKGdsRGlzYWJsZShH
TF9CTEVORCkpOwogICAgIEdMX0NNRChnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0
KSk7Ci0gICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRl
eEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dy
YW0tPnRleENvb3JkQXR0cmliKCkpKTsKKyAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmli
QXJyYXkodmVydGV4QXR0cmliKSk7CisgICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KHRleENvb3JkQXR0cmliKSk7CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gQml0
bWFwVGV4dHVyZUdMOjphcHBseUZpbHRlcnMoY29uc3QgQml0bWFwVGV4dHVyZSYgY29udGVudFRl
eHR1cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCkBAIC02ODYsMTIgKzk3NCwx
MyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgogCiAgICAgZGF0YSgpLmluaXRpYWxpemVTdGVu
Y2lsKCk7CiAKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHNoYWRlcklu
Zm8gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0
U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2ltcGxlKTsKKyAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlcj4gc2hhZGVyID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgp
LmdldFNoYWRlcihUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OlNpbXBsZVNoYWRl
cik7CiAKLSAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHNoYWRlckluZm8tPmlkKCkpKTsKLSAgICBH
TF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJJbmZvLT52ZXJ0ZXhBdHRyaWIo
KSkpOworICAgIEdMX0NNRChnbFVzZVByb2dyYW0oc2hhZGVyLT5wcm9ncmFtSUQoKSkpOworICAg
IEdMdWludCB2ZXJ0ZXhBdHRyaWIgPSBzaGFkZXItPmdldEF0dHJpYnV0ZUxvY2F0aW9uKFNpbXBs
ZVNoYWRlckRlZmluaXRpb246OlBvc2l0aW9uKTsKKyAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheSh2ZXJ0ZXhBdHRyaWIpKTsKICAgICBjb25zdCBHTGZsb2F0IHVuaXRSZWN0W10g
PSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07Ci0gICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9p
bnRlcihzaGFkZXJJbmZvLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAw
LCB1bml0UmVjdCkpOworICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIodmVydGV4QXR0
cmliLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHVuaXRSZWN0KSk7CiAKICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBtYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChkYXRhKCkucHJvamVj
dGlvbk1hdHJpeCkKICAgICAgICAgICAgIC5tdWx0aXBseShtb2RlbFZpZXdNYXRyaXgpCkBAIC03
MjUsMTcgKzEwMTQsMTcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb24KICAgICBHTF9DTUQoZ2xT
dGVuY2lsTWFzaygweGZmICYgfihzdGVuY2lsSW5kZXggLSAxKSkpOwogCiAgICAgLy8gRmlyc3Qg
Y2xlYXIgdGhlIGVudGlyZSBidWZmZXIgYXQgdGhlIGN1cnJlbnQgaW5kZXguCi0gICAgR0xfQ01E
KGdsVW5pZm9ybU1hdHJpeDRmdihzaGFkZXJJbmZvLT5tYXRyaXhWYXJpYWJsZSgpLCAxLCBHTF9G
QUxTRSwgbTRhbGwpKTsKKyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHNoYWRlci0+Z2V0
VW5pZm9ybUxvY2F0aW9uKFNpbXBsZVNoYWRlckRlZmluaXRpb246Ok1hdHJpeCksIDEsIEdMX0ZB
TFNFLCBtNGFsbCkpOwogICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9aRVJPLCBHTF9aRVJPLCBH
TF9aRVJPKSk7CiAgICAgR0xfQ01EKGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQp
KTsKIAogICAgIC8vIE5vdyBhcHBseSB0aGUgY3VycmVudCBpbmRleCB0byB0aGUgbmV3IHF1YWQu
CiAgICAgR0xfQ01EKGdsU3RlbmNpbE9wKEdMX1JFUExBQ0UsIEdMX1JFUExBQ0UsIEdMX1JFUExB
Q0UpKTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHNoYWRlckluZm8tPm1hdHJpeFZh
cmlhYmxlKCksIDEsIEdMX0ZBTFNFLCBtNCkpOworICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0
ZnYoc2hhZGVyLT5nZXRVbmlmb3JtTG9jYXRpb24oU2ltcGxlU2hhZGVyRGVmaW5pdGlvbjo6TWF0
cml4KSwgMSwgR0xfRkFMU0UsIG00KSk7CiAgICAgR0xfQ01EKGdsRHJhd0FycmF5cyhHTF9UUklB
TkdMRV9GQU4sIDAsIDQpKTsKIAogICAgIC8vIENsZWFyIHRoZSBzdGF0ZS4KLSAgICBHTF9DTUQo
Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVySW5mby0+dmVydGV4QXR0cmliKCkpKTsK
KyAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodmVydGV4QXR0cmliKSk7CiAg
ICAgR0xfQ01EKGdsU3RlbmNpbE1hc2soMCkpOwogCiAgICAgLy8gSW5jcmVhc2Ugc3RlbmNpbElu
ZGV4IGFuZCBhcHBseSBzdGVuY2lsIHRlc3RpbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc1OWM1ZjRj
YTE1Y2U3NWUxOTg1ZjJjNjZmYTJhOTc4MTk5NDcyOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NDI1ICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
Ci0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCIK
LQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVS
KQotCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotI2lmbmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKLSNkZWZpbmUgT0VTMl9QUkVDSVNJT05fREVG
SU5JVElPTlMgXAotICAgICIjZGVmaW5lIGxvd3BcbiNkZWZpbmUgaGlnaHBcbiIKLSNkZWZpbmUg
T0VTMl9GUkFHTUVOVF9TSEFERVJfREVGQVVMVF9QUkVDSVNJT04KLSNlbHNlCi0jZGVmaW5lIE9F
UzJfUFJFQ0lTSU9OX0RFRklOSVRJT05TCi0jZGVmaW5lIE9FUzJfRlJBR01FTlRfU0hBREVSX0RF
RkFVTFRfUFJFQ0lTSU9OIFwKLSAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7IFxuIgotI2Vu
ZGlmCi0KLSNkZWZpbmUgVkVSVEVYX1NIQURFUihzcmMuLi4pIE9FUzJfUFJFQ0lTSU9OX0RFRklO
SVRJT05TI3NyYwotI2RlZmluZSBGUkFHTUVOVF9TSEFERVIoc3JjLi4uKSBPRVMyX1BSRUNJU0lP
Tl9ERUZJTklUSU9OU1wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0VTMl9GUkFH
TUVOVF9TSEFERVJfREVGQVVMVF9QUkVDSVNJT05cCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICNzcmMKLQotc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlT3Bh
Y2l0eUFuZE1hc2sgPQotICAgIEZSQUdNRU5UX1NIQURFUigKLSAgICAgICAgdW5pZm9ybSBzYW1w
bGVyMkQgU291cmNlVGV4dHVyZSwgTWFza1RleHR1cmU7Ci0gICAgICAgIHVuaWZvcm0gbG93cCBm
bG9hdCBPcGFjaXR5OwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0VGV4Q29vcmRTb3Vy
Y2UsIE91dFRleENvb3JkTWFzazsKLSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRChTb3VyY2VUZXh0dXJlLCBP
dXRUZXhDb29yZFNvdXJjZSk7Ci0gICAgICAgICAgICBsb3dwIHZlYzQgbWFza0NvbG9yID0gdGV4
dHVyZTJEKE1hc2tUZXh0dXJlLCBPdXRUZXhDb29yZE1hc2spOwotICAgICAgICAgICAgbG93cCBm
bG9hdCBmcmFnbWVudEFscGhhID0gT3BhY2l0eSAqIG1hc2tDb2xvci5hOwotICAgICAgICAgICAg
Z2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBmcmFnbWVudEFscGhhLCBjb2xvci5hICog
ZnJhZ21lbnRBbHBoYSk7Ci0gICAgICAgIH0KLSAgICApOwotCi1zdGF0aWMgY29uc3QgY2hhciog
dmVydGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2sgPQotICAgIFZFUlRFWF9TSEFERVIoCi0g
ICAgICAgIHVuaWZvcm0gbWF0NCBJbk1hdHJpeCwgSW5Tb3VyY2VNYXRyaXg7Ci0gICAgICAgIGF0
dHJpYnV0ZSB2ZWM0IEluVmVydGV4OwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0VGV4
Q29vcmRTb3VyY2UsIE91dFRleENvb3JkTWFzazsKLSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIE91dFRleENvb3JkU291cmNlID0gdmVjMihJblNvdXJjZU1h
dHJpeCAqIEluVmVydGV4KTsKLSAgICAgICAgICAgIE91dFRleENvb3JkTWFzayA9IHZlYzIoSW5W
ZXJ0ZXgpOwotICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSBJbk1hdHJpeCAqIEluVmVydGV4Owot
ICAgICAgICB9Ci0gICAgKTsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291
cmNlU2ltcGxlID0KLSAgICBGUkFHTUVOVF9TSEFERVIoCi0gICAgICAgIHVuaWZvcm0gc2FtcGxl
cjJEIFNvdXJjZVRleHR1cmU7Ci0gICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCBPcGFjaXR5Owot
ICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0VGV4Q29vcmRTb3VyY2U7Ci0gICAgICAgIHZv
aWQgbWFpbih2b2lkKQotICAgICAgICB7Ci0gICAgICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0
ZXh0dXJlMkQoU291cmNlVGV4dHVyZSwgT3V0VGV4Q29vcmRTb3VyY2UpOwotICAgICAgICAgICAg
Z2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBPcGFjaXR5LCBjb2xvci5hICogT3BhY2l0
eSk7Ci0gICAgICAgIH0KLSAgICApOwotCi1zdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVy
U291cmNlU2ltcGxlID0KLSAgICBWRVJURVhfU0hBREVSKAotICAgICAgICB1bmlmb3JtIG1hdDQg
SW5NYXRyaXgsIEluU291cmNlTWF0cml4OwotICAgICAgICBhdHRyaWJ1dGUgdmVjNCBJblZlcnRl
eDsKLSAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIE91dFRleENvb3JkU291cmNlOwotICAgICAg
ICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgewotICAgICAgICAgICAgT3V0VGV4Q29vcmRTb3Vy
Y2UgPSB2ZWMyKEluU291cmNlTWF0cml4ICogSW5WZXJ0ZXgpOwotICAgICAgICAgICAgZ2xfUG9z
aXRpb24gPSBJbk1hdHJpeCAqIEluVmVydGV4OwotICAgICAgICB9Ci0gICAgKTsKLQotdm9pZCBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aW5pdGlhbGl6ZVByb2dyYW0oKQotewotICAgIGNv
bnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVByb2dyYW0gPSB2ZXJ0ZXhTaGFkZXJTb3VyY2Uo
KTsKLSAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVByb2dyYW0gPSBmcmFnbWVu
dFNoYWRlclNvdXJjZSgpOwotICAgIEdMdWludCB2ZXJ0ZXhTaGFkZXIgPSBnbENyZWF0ZVNoYWRl
cihHTF9WRVJURVhfU0hBREVSKTsKLSAgICBHTHVpbnQgZnJhZ21lbnRTaGFkZXIgPSBnbENyZWF0
ZVNoYWRlcihHTF9GUkFHTUVOVF9TSEFERVIpOwotICAgIGdsU2hhZGVyU291cmNlKHZlcnRleFNo
YWRlciwgMSwgJnZlcnRleFNoYWRlclNvdXJjZVByb2dyYW0sIDApOwotICAgIGdsU2hhZGVyU291
cmNlKGZyYWdtZW50U2hhZGVyLCAxLCAmZnJhZ21lbnRTaGFkZXJTb3VyY2VQcm9ncmFtLCAwKTsK
LSAgICBHTHVpbnQgcHJvZ3JhbUlEID0gZ2xDcmVhdGVQcm9ncmFtKCk7Ci0gICAgZ2xDb21waWxl
U2hhZGVyKHZlcnRleFNoYWRlcik7Ci0gICAgZ2xDb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVy
KTsKLSAgICBnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIHZlcnRleFNoYWRlcik7Ci0gICAgZ2xB
dHRhY2hTaGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNoYWRlcik7Ci0gICAgZ2xMaW5rUHJvZ3Jh
bShwcm9ncmFtSUQpOwotCi0gICAgbV92ZXJ0ZXhBdHRyaWIgPSBnbEdldEF0dHJpYkxvY2F0aW9u
KHByb2dyYW1JRCwgIkluVmVydGV4Iik7Ci0gICAgbV9pZCA9IHByb2dyYW1JRDsKLSAgICBtX3Zl
cnRleFNoYWRlciA9IHZlcnRleFNoYWRlcjsKLSAgICBtX2ZyYWdtZW50U2hhZGVyID0gZnJhZ21l
bnRTaGFkZXI7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmdldFVuaWZv
cm1Mb2NhdGlvbihHTGludCAmdmFyaWFibGUsIGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgdmFy
aWFibGUgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX2lkLCBuYW1lKTsKLSAgICBBU1NFUlQodmFy
aWFibGUgPj0gMCk7Ci19Ci0KLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp+VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0oKQotewotICAgIEdMdWludCBwcm9ncmFtSUQgPSBtX2lkOwotICAg
IGlmICghcHJvZ3JhbUlEKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnbERldGFjaFNoYWRlcihw
cm9ncmFtSUQsIG1fdmVydGV4U2hhZGVyKTsKLSAgICBnbERlbGV0ZVNoYWRlcihtX3ZlcnRleFNo
YWRlcik7Ci0gICAgZ2xEZXRhY2hTaGFkZXIocHJvZ3JhbUlELCBtX2ZyYWdtZW50U2hhZGVyKTsK
LSAgICBnbERlbGV0ZVNoYWRlcihtX2ZyYWdtZW50U2hhZGVyKTsKLSAgICBnbERlbGV0ZVByb2dy
YW0ocHJvZ3JhbUlEKTsKLX0KLQotUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVNpbXBsZT4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OmNyZWF0ZSgpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgp
KTsKLX0KLQotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OlRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU2ltcGxlKCkKLXsKLSAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwotICAgIGdl
dFVuaWZvcm1Mb2NhdGlvbihtX3NvdXJjZU1hdHJpeFZhcmlhYmxlLCAiSW5Tb3VyY2VNYXRyaXgi
KTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhWYXJpYWJsZSwgIkluTWF0cml4Iik7
Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNlVGV4dHVyZVZhcmlhYmxlLCAiU291cmNl
VGV4dHVyZSIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNpdHlWYXJpYWJsZSwgIk9w
YWNpdHkiKTsKLX0KLQotY29uc3QgY2hhciogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1w
bGU6OnZlcnRleFNoYWRlclNvdXJjZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHZlcnRleFNoYWRl
clNvdXJjZVNpbXBsZTsKLX0KLQotY29uc3QgY2hhciogVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1TaW1wbGU6OmZyYWdtZW50U2hhZGVyU291cmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZnJh
Z21lbnRTaGFkZXJTb3VyY2VTaW1wbGU7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1TaW1wbGU6OnByZXBhcmUoZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSog
bWFza1RleHR1cmUpCi17Ci0gICAgZ2xVbmlmb3JtMWYobV9vcGFjaXR5VmFyaWFibGUsIG9wYWNp
dHkpOwotfQotCi1QYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFu
ZE1hc2s+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OmNyZWF0ZSgp
Ci17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9w
YWNpdHlBbmRNYXNrKCkpOwotfQotCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlB
bmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKCkKLXsKLSAg
ICBpbml0aWFsaXplUHJvZ3JhbSgpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeFZh
cmlhYmxlLCAiSW5NYXRyaXgiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9zb3VyY2VNYXRy
aXhWYXJpYWJsZSwgIkluU291cmNlTWF0cml4Iik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1f
c291cmNlVGV4dHVyZVZhcmlhYmxlLCAiU291cmNlVGV4dHVyZSIpOwotICAgIGdldFVuaWZvcm1M
b2NhdGlvbihtX21hc2tUZXh0dXJlVmFyaWFibGUsICJNYXNrVGV4dHVyZSIpOwotICAgIGdldFVu
aWZvcm1Mb2NhdGlvbihtX29wYWNpdHlWYXJpYWJsZSwgIk9wYWNpdHkiKTsKLX0KLQotY29uc3Qg
Y2hhciogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6dmVydGV4U2hh
ZGVyU291cmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdmVydGV4U2hhZGVyU291cmNlT3BhY2l0
eUFuZE1hc2s7Ci19Ci0KLWNvbnN0IGNoYXIqIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3Bh
Y2l0eUFuZE1hc2s6OmZyYWdtZW50U2hhZGVyU291cmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
ZnJhZ21lbnRTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzazsKLX0KLQotdm9pZCBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpwcmVwYXJlKGZsb2F0IG9wYWNpdHksIGNv
bnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKQotewotICAgIGdsVW5pZm9ybTFmKG1fb3Bh
Y2l0eVZhcmlhYmxlLCBvcGFjaXR5KTsKLSAgICBpZiAoIW1hc2tUZXh0dXJlIHx8ICFtYXNrVGV4
dHVyZS0+aXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBCaXRtYXBUZXh0
dXJlR0wqIG1hc2tUZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wq
PihtYXNrVGV4dHVyZSk7Ci0gICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKTsKLSAgICBn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1hc2tUZXh0dXJlR0wtPmlkKCkpOwotICAgIGds
VW5pZm9ybTFpKG1fbWFza1RleHR1cmVWYXJpYWJsZSwgMSk7Ci0gICAgZ2xBY3RpdmVUZXh0dXJl
KEdMX1RFWFRVUkUwKTsKLX0KLQotVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyKCkKLXsKLSAgICBBU1NFUlQoaW5pdGlhbGl6ZU9wZW5HTFNoaW1z
KCkpOwotfQotCi1UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6flRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyKCkKLXsKLX0KLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLVN0YW5kYXJkRmls
dGVyUHJvZ3JhbTo6flN0YW5kYXJkRmlsdGVyUHJvZ3JhbSgpCi17Ci0gICAgZ2xEZXRhY2hTaGFk
ZXIobV9pZCwgbV92ZXJ0ZXhTaGFkZXIpOwotICAgIGdsRGVsZXRlU2hhZGVyKG1fdmVydGV4U2hh
ZGVyKTsKLSAgICBnbERldGFjaFNoYWRlcihtX2lkLCBtX2ZyYWdtZW50U2hhZGVyKTsKLSAgICBn
bERlbGV0ZVNoYWRlcihtX2ZyYWdtZW50U2hhZGVyKTsKLSAgICBnbERlbGV0ZVByb2dyYW0obV9p
ZCk7Ci19Ci0KLVN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZp
bHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlKQotICAgIDogbV9pZCgwKQotewotICAg
IGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSA9Ci0gICAgICAgICAgICBWRVJURVhfU0hB
REVSKAotICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwotICAgICAgICAg
ICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdGV4Q29vcmQ7Ci0gICAgICAgICAgICAgICAgdmFyeWlu
ZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7Ci0gICAgICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2X3RleENvb3JkID0gdmVj
MihhX3RleENvb3JkKTsKLSAgICAgICAgICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSBhX3ZlcnRl
eDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICApOwotCi0jZGVmaW5lIFNUQU5EQVJE
X0ZJTFRFUih4Li4uKSBcCi0gICAgICAgIE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJT05TXAotICAg
ICAgICBPRVMyX0ZSQUdNRU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJU0lPTlwKLSAgICAgICAgInZh
cnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkO1xuIlwKLSAgICAgICAgInVuaWZvcm0gaGlnaHAg
ZmxvYXQgdV9hbW91bnQ7XG4iXAotICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJl
O1xuIlwKLSAgICAgICAgI3hcCi0gICAgICAgICJ2b2lkIG1haW4odm9pZClcbiB7IGdsX0ZyYWdD
b2xvciA9IHNoYWRlKHRleHR1cmUyRCh1X3RleHR1cmUsIHZfdGV4Q29vcmQpKTsgfSIKLQotICAg
IGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlID0gMDsKLSAgICBzd2l0Y2ggKHR5cGUp
IHsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgotICAgICAgICBmcmFnbWVu
dFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKLSAgICAgICAgICAgIGxvd3AgdmVjNCBz
aGFkZShsb3dwIHZlYzQgY29sb3IpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbG93
cCBmbG9hdCBhbW91bnQgPSAxLjAgLSB1X2Ftb3VudDsKLSAgICAgICAgICAgICAgICByZXR1cm4g
dmVjNCgoMC4yMTI2ICsgMC43ODc0ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUyIC0gMC43
MTUyICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyIC0gMC4wNzIyICogYW1vdW50KSAqIGNv
bG9yLmIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjEyNiAtIDAuMjEyNiAqIGFt
b3VudCkgKiBjb2xvci5yICsgKDAuNzE1MiArIDAuMjg0OCAqIGFtb3VudCkgKiBjb2xvci5nICsg
KDAuMDcyMiAtIDAuMDcyMiAqIGFtb3VudCkgKiBjb2xvci5iLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICgwLjIxMjYgLSAwLjIxMjYgKiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIg
LSAwLjcxNTIgKiBhbW91bnQpICogY29sb3IuZyArICgwLjA3MjIgKyAwLjkyNzggKiBhbW91bnQp
ICogY29sb3IuYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5hKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OlNFUElBOgotICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJ
TFRFUigKLSAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbG93cCBmbG9hdCBhbW91bnQgPSAxLjAgLSB1X2Ft
b3VudDsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmVjNCgoMC4zOTMgKyAwLjYwNyAqIGFtb3Vu
dCkgKiBjb2xvci5yICsgKDAuNzY5IC0gMC43NjkgKiBhbW91bnQpICogY29sb3IuZyArICgwLjE4
OSAtIDAuMTg5ICogYW1vdW50KSAqIGNvbG9yLmIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKDAuMzQ5IC0gMC4zNDkgKiBhbW91bnQpICogY29sb3IuciArICgwLjY4NiArIDAuMzE0ICog
YW1vdW50KSAqIGNvbG9yLmcgKyAoMC4xNjggLSAwLjE2OCAqIGFtb3VudCkgKiBjb2xvci5iLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLjI3MiAtIDAuMjcyICogYW1vdW50KSAqIGNv
bG9yLnIgKyAoMC41MzQgLSAwLjUzNCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTMxICsgMC44
NjkgKiBhbW91bnQpICogY29sb3IuYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xv
ci5hKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgotICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJj
ZSA9IFNUQU5EQVJEX0ZJTFRFUigKLSAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZl
YzQgY29sb3IpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoKDAu
MjEzICsgMC43ODcgKiB1X2Ftb3VudCkgKiBjb2xvci5yICsgKDAuNzE1IC0gMC43MTUgKiB1X2Ft
b3VudCkgKiBjb2xvci5nICsgKDAuMDcyIC0gMC4wNzIgKiB1X2Ftb3VudCkgKiBjb2xvci5iLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLjIxMyAtIDAuMjEzICogdV9hbW91bnQpICog
Y29sb3IuciArICgwLjcxNSArIDAuMjg1ICogdV9hbW91bnQpICogY29sb3IuZyArICgwLjA3MiAt
IDAuMDcyICogdV9hbW91bnQpICogY29sb3IuYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoMC4yMTMgLSAwLjIxMyAqIHVfYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUgLSAwLjcxNSAq
IHVfYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgKyAwLjkyOCAqIHVfYW1vdW50KSAqIGNvbG9y
LmIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IuYSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpI
VUVfUk9UQVRFOgotICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRF
UigKLSAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaGlnaHAgZmxvYXQgcGkgPSAzLjE0MTU5MjY1MzU4OTc5
MzIzODQ2OwotICAgICAgICAgICAgICAgIGhpZ2hwIGZsb2F0IGMgPSBjb3ModV9hbW91bnQgKiBw
aSAvIDE4MC4wKTsKLSAgICAgICAgICAgICAgICBoaWdocCBmbG9hdCBzID0gc2luKHVfYW1vdW50
ICogcGkgLyAxODAuMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29sb3IuciAqICgw
LjIxMyArIGMgKiAwLjc4NyAtIHMgKiAwLjIxMykgKyBjb2xvci5nICogKDAuNzE1IC0gYyAqIDAu
NzE1IC0gcyAqIDAuNzE1KSArIGNvbG9yLmIgKiAoMC4wNzIgLSBjICogMC4wNzIgKyBzICogMC45
MjgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLnIgKiAoMC4yMTMgLSBjICog
MC4yMTMgKyBzICogMC4xNDMpICsgY29sb3IuZyAqICgwLjcxNSArIGMgKiAwLjI4NSArIHMgKiAw
LjE0MCkgKyBjb2xvci5iICogKDAuMDcyIC0gYyAqIDAuMDcyIC0gcyAqIDAuMjgzKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5yICogKDAuMjEzIC0gYyAqIDAuMjEzIC0gcyAq
IDAuNzg3KSArICBjb2xvci5nICogKDAuNzE1IC0gYyAqIDAuNzE1ICsgcyAqIDAuNzE1KSArIGNv
bG9yLmIgKiAoMC4wNzIgKyBjICogMC45MjggKyBzICogMC4wNzIpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbG9yLmEpOwotICAgICAgICAgICAgfQotICAgICAgICApOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgotICAgICAgICBmcmFn
bWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKLSAgICAgICAgICAgIGxvd3AgZmxv
YXQgaW52ZXJ0KGxvd3AgZmxvYXQgbikgeyByZXR1cm4gKDEuMCAtIG4pICogdV9hbW91bnQgKyBu
ICogKDEuMCAtIHVfYW1vdW50KTsgfQotICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3Ag
dmVjNCBjb2xvcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmVjNChp
bnZlcnQoY29sb3IuciksIGludmVydChjb2xvci5nKSwgaW52ZXJ0KGNvbG9yLmIpLCBjb2xvci5h
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNl
ID0gU1RBTkRBUkRfRklMVEVSKAotICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVj
NCBjb2xvcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmVjNChjb2xv
ci5yZ2IgKiAoMS4wICsgdV9hbW91bnQpLCBjb2xvci5hKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNU
OgotICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKLSAgICAg
ICAgICAgIGxvd3AgZmxvYXQgY29udHJhc3QobG93cCBmbG9hdCBuKSB7IHJldHVybiAobiAtIDAu
NSkgKiB1X2Ftb3VudCArIDAuNTsgfQotICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3Ag
dmVjNCBjb2xvcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmVjNChj
b250cmFzdChjb2xvci5yKSwgY29udHJhc3QoY29sb3IuZyksIGNvbnRyYXN0KGNvbG9yLmIpLCBj
b2xvci5hKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291
cmNlID0gU1RBTkRBUkRfRklMVEVSKAotICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3Ag
dmVjNCBjb2xvcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmVjNChj
b2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hICogdV9hbW91bnQpOwotICAgICAgICAg
ICAgfQotICAgICAgICApOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBpZiAoIWZyYWdtZW50U2hhZGVyU291cmNlKQotICAgICAgICBy
ZXR1cm47Ci0gICAgR0x1aW50IHZlcnRleFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdMX1ZFUlRF
WF9TSEFERVIpOwotICAgIEdMdWludCBmcmFnbWVudFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdM
X0ZSQUdNRU5UX1NIQURFUik7Ci0gICAgZ2xTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAm
dmVydGV4U2hhZGVyU291cmNlLCAwKTsKLSAgICBnbFNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRl
ciwgMSwgJmZyYWdtZW50U2hhZGVyU291cmNlLCAwKTsKLSAgICBHTGNoYXIgbG9nWzEwMF07Ci0g
ICAgR0xpbnQgbGVuOwotICAgIEdMdWludCBwcm9ncmFtSUQgPSBnbENyZWF0ZVByb2dyYW0oKTsK
LSAgICBnbENvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICBnbENvbXBpbGVTaGFkZXIo
ZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsR2V0U2hhZGVySW5mb0xvZyhmcmFnbWVudFNoYWRlciwg
MTAwLCAmbGVuLCBsb2cpOwotICAgIGdsQXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgdmVydGV4U2hh
ZGVyKTsKLSAgICBnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZyYWdtZW50U2hhZGVyKTsKLSAg
ICBnbExpbmtQcm9ncmFtKHByb2dyYW1JRCk7Ci0KLSAgICBtX3ZlcnRleEF0dHJpYiA9IGdsR2V0
QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiYV92ZXJ0ZXgiKTsKLSAgICBtX3RleENvb3JkQXR0
cmliID0gZ2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3RleENvb3JkIik7Ci0gICAg
bV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlE
LCAidV90ZXh0dXJlIik7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkdSQVlTQ0FMRToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6Ci0gICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpIVUVfUk9UQVRFOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6Ci0gICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkNPTlRSQVNUOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgotICAgICAgICBt
X3VuaWZvcm1Mb2NhdGlvbnMuYW1vdW50ID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlE
LCAidV9hbW91bnQiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIG1faWQgPSBwcm9ncmFtSUQ7Ci0gICAgbV92ZXJ0ZXhTaGFkZXIgPSB2
ZXJ0ZXhTaGFkZXI7Ci0gICAgbV9mcmFnbWVudFNoYWRlciA9IGZyYWdtZW50U2hhZGVyOwotfQot
Ci1QYXNzUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gU3RhbmRhcmRGaWx0ZXJQcm9ncmFt
OjpjcmVhdGUoRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUpCi17Ci0gICAgUmVm
UHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGFkb3B0UmVmKG5ldyBTdGFuZGFy
ZEZpbHRlclByb2dyYW0odHlwZSkpOwotICAgIGlmICghcHJvZ3JhbS0+bV9pZCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gcHJvZ3JhbTsKLX0KLQotdm9pZCBTdGFuZGFyZEZpbHRl
clByb2dyYW06OnByZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24pCi17Ci0g
ICAgZG91YmxlIGFtb3VudCA9IDA7Ci0gICAgc3dpdGNoIChvcGVyYXRpb24uZ2V0T3BlcmF0aW9u
VHlwZSgpKSB7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKLSAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVS
QVRFOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgotICAgICAgICBhbW91
bnQgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJj4o
b3BlcmF0aW9uKS5hbW91bnQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OklOVkVSVDoKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKLSAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246Ok9QQUNJVFk6Ci0gICAgICAgIGFtb3VudCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29t
cG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZ2xV
c2VQcm9ncmFtKG1faWQpOwotICAgIGdsVW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91
bnQsIGFtb3VudCk7Ci19Ci0KLVBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyRm9yRmlsdGVyKGNvbnN0IEZpbHRlck9w
ZXJhdGlvbiYgZmlsdGVyKQotewotICAgIFJlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IHBy
b2dyYW07Ci0gICAgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUgPSBmaWx0ZXIu
Z2V0T3BlcmF0aW9uVHlwZSgpOwotICAgIEZpbHRlck1hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBt
X2ZpbHRlck1hcC5maW5kKHR5cGUpOwotICAgIGlmIChpdGVyYXRvciA9PSBtX2ZpbHRlck1hcC5l
bmQoKSkgewotICAgICAgICBwcm9ncmFtID0gU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpjcmVhdGUo
dHlwZSk7Ci0gICAgICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0g
ICAgICAgIG1fZmlsdGVyTWFwLmFkZCh0eXBlLCBwcm9ncmFtKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgcHJvZ3JhbSA9IGl0ZXJhdG9yLT5zZWNvbmQ7Ci0KLSAgICBwcm9ncmFtLT5wcmVwYXJlKGZp
bHRlcik7Ci0gICAgcmV0dXJuIHByb2dyYW07Ci19Ci0KLSNlbmRpZgotfTsKLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkMDU5M2U2YzdmZDg5YzUzYWQ0ODhmMjQ0Y2MyMzBiY2MwOTY4MjUxLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTgwICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEyIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaWZuZGVmIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyX2gKLSNkZWZp
bmUgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXJfaAotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0KLSNpbmNsdWRlICJGbG9hdFF1YWQu
aCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIK
LSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotI2luY2x1
ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIEJpdG1hcFRleHR1cmU7Ci1jbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjsK
LQotY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gewotcHVibGljOgotICAgIEdMdWludCBpZCgpIHsg
cmV0dXJuIG1faWQ7IH0KLSAgICBHTHVpbnQgdmVydGV4QXR0cmliKCkgeyByZXR1cm4gbV92ZXJ0
ZXhBdHRyaWI7IH0KLQotICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCk7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBU
ZXh0dXJlKikgeyB9Ci0gICAgR0xpbnQgbWF0cml4VmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBt
X21hdHJpeFZhcmlhYmxlOyB9Ci0gICAgR0xpbnQgc291cmNlTWF0cml4VmFyaWFibGUoKSBjb25z
dCB7IHJldHVybiBtX3NvdXJjZU1hdHJpeFZhcmlhYmxlOyB9Ci0gICAgR0xpbnQgc291cmNlVGV4
dHVyZVZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VUZXh0dXJlVmFyaWFibGU7IH0K
LSAgICBHTGludCBvcGFjaXR5VmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHlWYXJp
YWJsZTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBnZXRVbmlmb3JtTG9jYXRpb24oR0xpbnQm
IHZhciwgY29uc3QgY2hhciogbmFtZSk7Ci0gICAgdm9pZCBpbml0aWFsaXplUHJvZ3JhbSgpOwot
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlKCkgY29uc3QgPSAwOwot
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UoKSBjb25zdCA9IDA7
Ci0KLSAgICBHTHVpbnQgbV9pZDsKLSAgICBHTHVpbnQgbV92ZXJ0ZXhBdHRyaWI7Ci0gICAgR0x1
aW50IG1fdmVydGV4U2hhZGVyOwotICAgIEdMdWludCBtX2ZyYWdtZW50U2hhZGVyOwotICAgIEdM
aW50IG1fbWF0cml4VmFyaWFibGU7Ci0gICAgR0xpbnQgbV9zb3VyY2VNYXRyaXhWYXJpYWJsZTsK
LSAgICBHTGludCBtX3NvdXJjZVRleHR1cmVWYXJpYWJsZTsKLSAgICBHTGludCBtX29wYWNpdHlW
YXJpYWJsZTsKLX07Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi1jbGFzcyBTdGFuZGFyZEZp
bHRlclByb2dyYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxTdGFuZGFyZEZpbHRlclByb2dyYW0+IHsK
LXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5TdGFuZGFyZEZpbHRlclByb2dyYW0oKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcHJlcGFyZShjb25zdCBGaWx0ZXJPcGVyYXRpb24mKTsKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IGNyZWF0ZShGaWx0ZXJPcGVyYXRpb246Ok9w
ZXJhdGlvblR5cGUpOwotICAgIEdMdWludCB2ZXJ0ZXhBdHRyaWIoKSBjb25zdCB7IHJldHVybiBt
X3ZlcnRleEF0dHJpYjsgfQotICAgIEdMdWludCB0ZXhDb29yZEF0dHJpYigpIGNvbnN0IHsgcmV0
dXJuIG1fdGV4Q29vcmRBdHRyaWI7IH0KLSAgICBHTHVpbnQgdGV4dHVyZVVuaWZvcm0oKSBjb25z
dCB7IHJldHVybiBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb247IH0KLXByaXZhdGU6Ci0gICAgU3Rh
bmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSk7Ci0gICAg
R0x1aW50IG1faWQ7Ci0gICAgR0x1aW50IG1fdmVydGV4U2hhZGVyOwotICAgIEdMdWludCBtX2Zy
YWdtZW50U2hhZGVyOwotICAgIEdMdWludCBtX3ZlcnRleEF0dHJpYjsKLSAgICBHTHVpbnQgbV90
ZXhDb29yZEF0dHJpYjsKLSAgICBHTHVpbnQgbV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uOwotICAg
IHVuaW9uIHsKLSAgICAgICAgR0x1aW50IGFtb3VudDsKLSAgICAgICAgR0x1aW50IHN0ZGRldjsK
LSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIEdMdWludCBzdGRkZXY7Ci0gICAgICAgICAg
ICBHTHVpbnQgY29sb3I7Ci0gICAgICAgICAgICBHTHVpbnQgb2Zmc2V0OwotICAgICAgICB9IHNo
YWRvdzsKLSAgICB9IG1fdW5pZm9ybUxvY2F0aW9uczsKLX07Ci0jZW5kaWYKLQotY2xhc3MgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU2ltcGxlPiBjcmVhdGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShm
bG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKik7Ci0KLXByaXZhdGU6Ci0gICAgdmly
dHVhbCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKCkgY29uc3Q7Ci0gICAgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1TaW1wbGUoKTsKLX07Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2sgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtT3BhY2l0eUFuZE1hc2s+IGNyZWF0ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJl
KGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqKTsKLSAgICBHTGludCBtYXNrVGV4
dHVyZVZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrVGV4dHVyZVZhcmlhYmxlOyB9Ci0K
LXByaXZhdGU6Ci0gICAgc3RhdGljIGludCBtX2NsYXNzSUQ7Ci0gICAgdmlydHVhbCBjb25zdCBj
aGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IGZyYWdtZW50U2hhZGVyU291cmNlKCkgY29uc3Q7Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1PcGFjaXR5QW5kTWFzaygpOwotICAgIEdMaW50IG1fbWFza1RleHR1cmVWYXJpYWJsZTsK
LX07Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIHsKLXB1YmxpYzoKLSAgICBl
bnVtIFNoYWRlclR5cGUgewotICAgICAgICBJbnZhbGlkID0gMCwgLy8gSGFzaE1hcHMgZG8gbm90
IGxpa2UgMCBhcyBhIGtleS4KLSAgICAgICAgU2ltcGxlLAotICAgICAgICBPcGFjaXR5QW5kTWFz
awotICAgIH07Ci0KLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpOwotICAgIHZpcnR1
YWwgflRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCi0gICAgUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IGdldFNoYWRlckZvckZp
bHRlcihjb25zdCBGaWx0ZXJPcGVyYXRpb24mKTsKLSNlbmRpZgotCi0gICAgUGFzc1JlZlB0cjxU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gZ2V0U2hhZGVyUHJvZ3JhbShTaGFkZXJUeXBlIHNo
YWRlclR5cGUpCi0gICAgewotICAgICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0+IHByb2dyYW07Ci0gICAgICAgIGlmIChzaGFkZXJUeXBlID09IEludmFsaWQpCi0gICAgICAg
ICAgICByZXR1cm4gcHJvZ3JhbTsKLQotICAgICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwLmZpbmQo
c2hhZGVyVHlwZSk7Ci0gICAgICAgIGlmIChpdCAhPSBtX3RleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtTWFwLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7Ci0KLSAgICAgICAg
c3dpdGNoIChzaGFkZXJUeXBlKSB7Ci0gICAgICAgIGNhc2UgU2ltcGxlOgotICAgICAgICAgICAg
cHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpjcmVhdGUoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9wYWNpdHlBbmRNYXNrOgotICAgICAgICAg
ICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OmNy
ZWF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW52YWxpZDoKLSAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIG1fdGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1NYXAuYWRkKHNoYWRlclR5cGUsIHByb2dyYW0pOwotICAgICAg
ICByZXR1cm4gcHJvZ3JhbTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoTWFw
PFNoYWRlclR5cGUsIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4sIERlZmF1bHRI
YXNoPGludD46Okhhc2gsIEhhc2hUcmFpdHM8aW50PiA+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtTWFwOwotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwIG1fdGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1NYXA7Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdHlwZWRl
ZiBIYXNoTWFwPEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgUmVmUHRyPFN0YW5kYXJk
RmlsdGVyUHJvZ3JhbT4sIERlZmF1bHRIYXNoPGludD46Okhhc2gsIEhhc2hUcmFpdHM8aW50PiA+
IEZpbHRlck1hcDsKLSAgICBGaWx0ZXJNYXAgbV9maWx0ZXJNYXA7Ci0jZW5kaWYKLQotfTsKLQot
fQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141180</attachid>
            <date>2012-05-10 09:11:29 -0700</date>
            <delta_ts>2012-10-08 14:40:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86048-20120510091113.patch</filename>
            <type>text/plain</type>
            <size>54056</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2NTQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGYxNjlkMDk2YWQxM2Rh
YzcyZTYzMGYyZDZhNzY3NjhkZDNlMjZkMy4uMmVlMTdjYTdmN2I1MGZkMGFiOWJiZjNkNDk0MjE0
YTRkN2FmMzBjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA1LTA5ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1RleG1h
cF0gUmVmYWN0b3IgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgdG8gYmUgY2xlYXJlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYwNDgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmVkIFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLCBhbmQgaW5zdGVhZCB1c2UgYSBUZXh0dXJlTWFwcGVyU2hh
ZGVyIGNsYXNzIHRoYXQgaG9sZHMKKyAgICAgICAgdGhlIHNoYWRlciBpbmZvcm1hdGlvbiBhbmQg
aXMgcmVzcG9uc2libGUgZm9yIGNsZWFudXAuCisKKyAgICAgICAgTW92ZWQgdGhlIGFjdHVhbCBz
aGFkZXIgZGF0YSBiYWNrIGludG8gVGV4dHVyZU1hcHBlckdMLCBhcyB0aGUgc2hhZGVycyBhcmUg
dGlnaHRseQorICAgICAgICBpbnRlZ3JhdGVkIHdpdGggdGhlIGRyYXdpbmcgY29kZS4KKworICAg
ICAgICBVc2Ugb25lIHNoYWRlciBmb3IgYWxsIHRoZSBjb2xvcml6ZSBmaWx0ZXJzLgorCisgICAg
ICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMgaW4gTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcg
YW5kIGNzczMvZmlsdGVycy4KKworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFNpbXBsZVNoYWRlckRlZmluaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlU2hhZGVyRGVmaW5pdGlvbjo6Z2V0KToKKyAgICAgICAgKE1hc2tlZFNoYWRlckRl
ZmluaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWFza2VkU2hhZGVyRGVmaW5pdGlvbjo6Z2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yaXplU2hhZGVyRGVmaW5pdGlvbjo6Z2V0KToKKyAg
ICAgICAgKFNoYXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xE
YXRhOjpTaGFyZWRHTERhdGE6OmNyZWF0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OmdldFNoYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OmV4
dHJhY3RGaWx0ZXJBbW91bnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpk
cmF3RmlsdGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdpbkNs
aXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmg6IFJlbW92ZWQuCisKIDIwMTItMDUtMDkg
IENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3Nh
Lm9yZz4KIAogICAgICAgICBTaW1wbGlmeSBDU1NQYXJzZXI6OnBhcnNlU2ltcGxlTGVuZ3RoVmFs
dWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggMjVhZTkzNDNiNTZiMzE3NDZi
YTc3YmVhYzViNmI3ZDYwMjczZTJhMy4uZWZiMTE1NjgxMmY1NThlNGMwZTQ2N2RlZWUzMTk1ZDYy
YTcxZTZkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC01OTkyLDggKzU5OTIs
OCBAQCBpZiBVU0VfVEVYVFVSRV9NQVBQRVJfR0wKIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmggXAorCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyLmNwcCBcCisJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXIu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9ybS5jcHAgXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5k
ZXggZTQ3YTMzNWQwMjhlODEzNGEzYjVmYThlOGU5Mjk0YmQxNGFlN2UzZS4uMmNkZGQ3ZjY2MTUx
OGQ3ZDg5ZTg3M2FjMDY3MDMxMzUzZjZhNmNhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC00MTA4LDExICs0
MTA4LDExIEBAIGNvbnRhaW5zKENPTkZJRywgdGV4bWFwKSB7CiAgICAgIXdpbjMyLSo6Y29udGFp
bnMoUVRfQ09ORklHLCBvcGVuZ2wpIHsKICAgICAgICAgSEVBREVSUyArPSBcCiAgICAgICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmggXAotICAgICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgK
KyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVy
LmgKIAogICAgICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwIFwKLSAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKKyAgICAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyLmNwcAogCiAgICAgICAg
IENPTkZJRyArPSBvcGVuZ2wtc2hpbXMKICAgICAgICAgREVGSU5FUyArPSBXVEZfVVNFX1RFWFRV
UkVfTUFQUEVSX0dMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMTg1NzRhYmYwY2ZhZjU2MzY1ZDEzNzRl
YmI3MDAzMTE3NDZkOGEyMS4uMDZmMTFmYzZkNGEwYzM3ZTUyMTMzYmFhNGUzZmZlMWYxZTA1MDQw
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDAyNyw4ICs0MDI3LDggQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXIuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyLmNwcCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXIuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0lkZW50aXR5VHJh
bnNmb3JtT3BlcmF0aW9uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5j
cHAKaW5kZXggZGY5YjhiMDNlMmNlMTg2NTRiNTRlMzY1YmIwNDA1ODM0MGUyZDEzNC4uNTcwNWVl
ZTBmYjI4ZmE0OWJhZmY5Nzg0ZmFmOTRkMmIyN2VhODE4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5j
cHAKQEAgLTIyLDcgKzIyLDcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCIK
KyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyU2hhZGVyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgpAQCAt
NTEsOCArNTEsMjIwIEBACiAjaW5jbHVkZSA8Y2Fpcm8uaD4KICNlbmRpZgogCi0jZGVmaW5lIEdM
X0NNRCguLi4pIGRvIHsgX19WQV9BUkdTX187IEFTU0VSVF9BUkcoX19WQV9BUkdTX18sICFnbEdl
dEVycm9yKCkpOyB9IHdoaWxlICgwKQorI2lmbmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKKyNkZWZp
bmUgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlMgXAorICAgICIjZGVmaW5lIGxvd3BcbiNkZWZp
bmUgaGlnaHBcbiIKKyNkZWZpbmUgT0VTMl9GUkFHTUVOVF9TSEFERVJfREVGQVVMVF9QUkVDSVNJ
T04KKyNlbHNlCisjZGVmaW5lIE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJT05TCisjZGVmaW5lIE9F
UzJfRlJBR01FTlRfU0hBREVSX0RFRkFVTFRfUFJFQ0lTSU9OIFwKKyAgICAicHJlY2lzaW9uIG1l
ZGl1bXAgZmxvYXQ7IFxuIgorI2VuZGlmCisKKyNkZWZpbmUgVkVSVEVYX1NIQURFUihzcmMuLi4p
IE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJT05TI3NyYworI2RlZmluZSBGUkFHTUVOVF9TSEFERVIo
c3JjLi4uKSBPRVMyX1BSRUNJU0lPTl9ERUZJTklUSU9OU1wKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgT0VTMl9GUkFHTUVOVF9TSEFERVJfREVGQVVMVF9QUkVDSVNJT05cCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICNzcmMKKwogbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdHJ1Y3QgU2ltcGxlU2hhZGVyRGVmaW5pdGlvbiB7CitwdWJsaWM6CisgICAgZW51bSBBdHRy
aWJ1dGVzIHsgUG9zaXRpb24gfTsKKyAgICBlbnVtIFVuaWZvcm1zIHsgTWF0cml4LCBTb3VyY2VN
YXRyaXgsIEFscGhhLCBUZXh0dXJlIH07CisKKyAgICBzdGF0aWMgY29uc3QgVGV4dHVyZU1hcHBl
clNoYWRlcjo6RGVmaW5pdGlvbiYgZ2V0KCkKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBhdHRyaWJ1dGVzW10gPSB7ICJhX3Bvc2l0aW9uIiwgMCB9OworICAgICAgICBzdGF0aWMg
Y29uc3QgY2hhciogdW5pZm9ybXNbXSA9IHsgInVfbWF0cml4IiwgInVfc291cmNlTWF0cml4Iiwg
InVfYWxwaGEiLCAidV90ZXh0dXJlIiwgMCB9OworICAgICAgICBzdGF0aWMgVGV4dHVyZU1hcHBl
clNoYWRlcjo6RGVmaW5pdGlvbiBkZWZpbml0aW9uID0geworICAgICAgICAgICAgVkVSVEVYX1NI
QURFUigKKyAgICAgICAgICAgICAgICB1bmlmb3JtIG1hdDQgdV9tYXRyaXgsIHVfc291cmNlTWF0
cml4OworICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb247CisgICAgICAg
ICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7CisgICAgICAgICAgICAgICAg
dm9pZCBtYWluKHZvaWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB2
X3RleENvb3JkID0gdmVjMih1X3NvdXJjZU1hdHJpeCAqIGFfcG9zaXRpb24pOworICAgICAgICAg
ICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogYV9wb3NpdGlvbjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICApLAorICAgICAgICAgICAgRlJBR01FTlRfU0hBREVSKAor
ICAgICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTsKKyAgICAgICAgICAg
ICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9hbHBoYTsKKyAgICAgICAgICAgICAgICB2YXJ5aW5n
IGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKKyAgICAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9
IHRleHR1cmUyRCh1X3RleHR1cmUsIHZfdGV4Q29vcmQpOworICAgICAgICAgICAgICAgICAgICBn
bF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIHVfYWxwaGEsIGNvbG9yLmEgKiB1X2FscGhh
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICApLAorICAgICAgICAgICAgYXR0cmli
dXRlcywgdW5pZm9ybXMKKyAgICAgICAgfTsKKworICAgICAgICByZXR1cm4gZGVmaW5pdGlvbjsK
KyAgICB9Cit9OworCitzdHJ1Y3QgTWFza2VkU2hhZGVyRGVmaW5pdGlvbiB7CitwdWJsaWM6Cisg
ICAgZW51bSBBdHRyaWJ1dGVzIHsgUG9zaXRpb24gfTsKKyAgICBlbnVtIFVuaWZvcm1zIHsgTWF0
cml4LCBTb3VyY2VNYXRyaXgsIEFscGhhLCBUZXh0dXJlLCBNYXNrIH07CisKKyAgICBzdGF0aWMg
Y29uc3QgVGV4dHVyZU1hcHBlclNoYWRlcjo6RGVmaW5pdGlvbiYgZ2V0KCkKKyAgICB7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBhdHRyaWJ1dGVzW10gPSB7ICJhX3Bvc2l0aW9uIiwgMCB9
OworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogdW5pZm9ybXNbXSA9IHsgInVfbWF0cml4Iiwg
InVfc291cmNlTWF0cml4IiwgInVfYWxwaGEiLCAidV90ZXh0dXJlIiwgMCB9OworICAgICAgICBz
dGF0aWMgVGV4dHVyZU1hcHBlclNoYWRlcjo6RGVmaW5pdGlvbiBkZWZpbml0aW9uID0geworICAg
ICAgICAgICAgVkVSVEVYX1NIQURFUigKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBh
X3Bvc2l0aW9uOworICAgICAgICAgICAgICAgIHVuaWZvcm0gbWF0NCB1X21hdHJpeCwgdV9zb3Vy
Y2VNYXRyaXg7CisgICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQs
IHZfdGV4Q29vcmRNYXNrOworICAgICAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdl90ZXhDb29yZCA9IHZlYzIodV9zb3Vy
Y2VNYXRyaXggKiBhX3Bvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgdl90ZXhDb29yZE1h
c2sgPSB2ZWMyKGFfcG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9
IHVfbWF0cml4ICogYV9wb3NpdGlvbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAp
LAorICAgICAgICAgICAgRlJBR01FTlRfU0hBREVSKAorICAgICAgICAgICAgICAgIHVuaWZvcm0g
c2FtcGxlcjJEIHVfdGV4dHVyZSwgdV9tYXNrOworICAgICAgICAgICAgICAgIHVuaWZvcm0gbG93
cCBmbG9hdCB1X2FscGhhOworICAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3Rl
eENvb3JkLCB2X3RleENvb3JkTWFzazsKKyAgICAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9
IHRleHR1cmUyRCh1X3RleHR1cmUsIHZfdGV4Q29vcmQpOworICAgICAgICAgICAgICAgICAgICBs
b3dwIHZlYzQgbWFza0NvbG9yID0gdGV4dHVyZTJEKHVfbWFzaywgdl90ZXhDb29yZE1hc2spOwor
ICAgICAgICAgICAgICAgICAgICBsb3dwIGZsb2F0IGZyYWdtZW50QWxwaGEgPSB1X2FscGhhICog
bWFza0NvbG9yLmE7CisgICAgICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29s
b3IucmdiICogZnJhZ21lbnRBbHBoYSwgY29sb3IuYSAqIGZyYWdtZW50QWxwaGEpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICksCisgICAgICAgICAgICBhdHRyaWJ1dGVzLCB1bmlm
b3JtcworICAgICAgICB9OworCisgICAgICAgIHJldHVybiBkZWZpbml0aW9uOworICAgIH0KK307
CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCitzdHJ1Y3QgQ29sb3JpemVTaGFkZXJEZWZpbml0
aW9uICB7CisgICAgZW51bSBBdHRyaWJ1dGVzIHsgUG9zaXRpb24sIFRleENvb3JkIH07CisgICAg
ZW51bSBVbmlmb3JtcyB7IFRleHR1cmUsIEZpbHRlclR5cGUsIEZpbHRlckFtb3VudCB9OworICAg
IHN0YXRpYyBjb25zdCBUZXh0dXJlTWFwcGVyU2hhZGVyOjpEZWZpbml0aW9uJiBnZXQoKQorICAg
IHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZXNbXSA9IHsgImFfcG9zaXRp
b24iLCAiYV90ZXhDb29yZCIsIDAgfTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHVuaWZv
cm1zW10gPSB7ICJ1X3RleHR1cmUiLCAidV9maWx0ZXJUeXBlIiwgInVfZmlsdGVyQW1vdW50Iiwg
MCB9OworCisgICAgICAgIHN0YXRpYyBUZXh0dXJlTWFwcGVyU2hhZGVyOjpEZWZpbml0aW9uIGRl
ZmluaXRpb24gPSB7CisgICAgICAgICAgICBWRVJURVhfU0hBREVSKAorICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb247CisgICAgICAgICAgICAgICAgYXR0cmlidXRlIHZl
YzQgYV90ZXhDb29yZDsKKyAgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhD
b29yZDsKKyAgICAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHZfdGV4Q29vcmQgPSBhX3RleENvb3JkLnh5OworICAgICAg
ICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IGFfcG9zaXRpb247CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIEZSQUdNRU5UX1NIQURFUigKKyAgICAgICAg
ICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7CisgICAgICAgICAgICAgICAgdW5p
Zm9ybSBsb3dwIGZsb2F0IHVfZmlsdGVyQW1vdW50OworICAgICAgICAgICAgICAgIHVuaWZvcm0g
aW50IHVfZmlsdGVyVHlwZTsKKyAgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90
ZXhDb29yZDsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgR3JheXNjYWxlICA9IDE7CisgICAg
ICAgICAgICAgICAgY29uc3QgaW50IFNlcGlhICAgICAgPSAyOworICAgICAgICAgICAgICAgIGNv
bnN0IGludCBTYXR1cmF0ZSAgID0gMzsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgSHVlUm90
YXRlICA9IDQ7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IEludmVydCAgICAgPSA1OworICAg
ICAgICAgICAgICAgIGNvbnN0IGludCBPcGFjaXR5ICAgID0gNjsKKyAgICAgICAgICAgICAgICBj
b25zdCBpbnQgQnJpZ2h0bmVzcyA9IDc7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IENvbnRy
YXN0ICAgPSA4OworCisgICAgICAgICAgICAgICAgbG93cCB2ZWM0IGdyYXlzY2FsZShsb3dwIHZl
YzQgY29sb3IpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBsb3dwIGZs
b2F0IGFtb3VudCA9IDEuMCAtIHVfZmlsdGVyQW1vdW50OworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdmVjNCgoMC4yMTI2ICsgMC43ODc0ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUy
IC0gMC43MTUyICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyIC0gMC4wNzIyICogYW1vdW50
KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLjIxMjYgLSAw
LjIxMjYgKiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIgKyAwLjI4NDggKiBhbW91bnQpICog
Y29sb3IuZyArICgwLjA3MjIgLSAwLjA3MjIgKiBhbW91bnQpICogY29sb3IuYiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjEyNiAtIDAuMjEyNiAqIGFtb3VudCkgKiBjb2xv
ci5yICsgKDAuNzE1MiAtIDAuNzE1MiAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiArIDAu
OTI3OCAqIGFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb2xvci5hKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBsb3dwIHZl
YzQgc2VwaWEobG93cCB2ZWM0IGNvbG9yKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgbG93cCBmbG9hdCBhbW91bnQgPSAxLjAgLSB1X2ZpbHRlckFtb3VudDsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoKDAuMzkzICsgMC42MDcgKiBhbW91bnQpICogY29s
b3IuciArICgwLjc2OSAtIDAuNzY5ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4xODkgLSAwLjE4
OSAqIGFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
MC4zNDkgLSAwLjM0OSAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNjg2ICsgMC4zMTQgKiBhbW91
bnQpICogY29sb3IuZyArICgwLjE2OCAtIDAuMTY4ICogYW1vdW50KSAqIGNvbG9yLmIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLjI3MiAtIDAuMjcyICogYW1vdW50KSAqIGNv
bG9yLnIgKyAoMC41MzQgLSAwLjUzNCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTMxICsgMC44
NjkgKiBhbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29sb3IuYSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbG93cCB2ZWM0
IHNhdHVyYXRlKGxvd3AgdmVjNCBjb2xvcikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB2ZWM0KCgwLjIxMyArIDAuNzg3ICogdV9maWx0ZXJBbW91bnQpICog
Y29sb3IuciArICgwLjcxNSAtIDAuNzE1ICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuZyArICgw
LjA3MiAtIDAuMDcyICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKDAuMjEzIC0gMC4yMTMgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xv
ci5yICsgKDAuNzE1ICsgMC4yODUgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcy
IC0gMC4wNzIgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoMC4yMTMgLSAwLjIxMyAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLnIg
KyAoMC43MTUgLSAwLjcxNSAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgKyAw
LjkyOCAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbG9yLmEpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGxvd3AgdmVjNCBodWVSb3RhdGUobG93cCB2ZWM0IGNvbG9yKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgaGlnaHAgZmxvYXQgYyA9IGNvcyhyYWRpYW5zKHVfZmlsdGVy
QW1vdW50KSk7CisgICAgICAgICAgICAgICAgICAgIGhpZ2hwIGZsb2F0IHMgPSBzaW4ocmFkaWFu
cyh1X2ZpbHRlckFtb3VudCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmVjNChjb2xv
ci5yICogKDAuMjEzICsgYyAqIDAuNzg3IC0gcyAqIDAuMjEzKSArIGNvbG9yLmcgKiAoMC43MTUg
LSBjICogMC43MTUgLSBzICogMC43MTUpICsgY29sb3IuYiAqICgwLjA3MiAtIGMgKiAwLjA3MiAr
IHMgKiAwLjkyOCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLnIgKiAo
MC4yMTMgLSBjICogMC4yMTMgKyBzICogMC4xNDMpICsgY29sb3IuZyAqICgwLjcxNSArIGMgKiAw
LjI4NSArIHMgKiAwLjE0MCkgKyBjb2xvci5iICogKDAuMDcyIC0gYyAqIDAuMDcyIC0gcyAqIDAu
MjgzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IuciAqICgwLjIxMyAt
IGMgKiAwLjIxMyAtIHMgKiAwLjc4NykgKyAgY29sb3IuZyAqICgwLjcxNSAtIGMgKiAwLjcxNSAr
IHMgKiAwLjcxNSkgKyBjb2xvci5iICogKDAuMDcyICsgYyAqIDAuOTI4ICsgcyAqIDAuMDcyKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IuYSk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgbG93cCBmbG9hdCBpbnZlcnRDaGFubmVsKGxvd3AgZmxv
YXQgbikgeyByZXR1cm4gKDEuMCAtIG4pICogdV9maWx0ZXJBbW91bnQgKyBuICogKDEuMCAtIHVf
ZmlsdGVyQW1vdW50KTsgfQorCisgICAgICAgICAgICAgICAgbG93cCB2ZWM0IGludmVydChsb3dw
IHZlYzQgY29sb3IpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdmVjNChpbnZlcnRDaGFubmVsKGNvbG9yLnIpLCBpbnZlcnRDaGFubmVsKGNvbG9yLmcpLCBp
bnZlcnRDaGFubmVsKGNvbG9yLmIpLCBjb2xvci5hKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBsb3dwIHZlYzQgYnJpZ2h0bmVzcyhsb3dwIHZlYzQgY29sb3IpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmVjNChjb2xvci5yZ2Ig
KiAoMS4wICsgdV9maWx0ZXJBbW91bnQpLCBjb2xvci5hKTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBsb3dwIGZsb2F0IGNvbnRyYXN0Q2hhbm5lbChsb3dwIGZsb2F0IG4p
IHsgcmV0dXJuIChuIC0gMC41KSAqIHVfZmlsdGVyQW1vdW50ICsgMC41OyB9CisgICAgICAgICAg
ICAgICAgbG93cCB2ZWM0IGNvbnRyYXN0KGxvd3AgdmVjNCBjb2xvcikKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0KGNvbnRyYXN0Q2hhbm5lbChjb2xv
ci5yKSwgY29udHJhc3RDaGFubmVsKGNvbG9yLmcpLCBjb250cmFzdENoYW5uZWwoY29sb3IuYiks
IGNvbG9yLmEpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGxvd3AgdmVj
NCBvcGFjaXR5KGxvd3AgdmVjNCBjb2xvcikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB2ZWM0KGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEg
KiB1X2ZpbHRlckFtb3VudCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
bG93cCBmbG9hdCBmYWN0b3IoaW50IHR5cGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmxvYXQodHlwZSA9PSB1X2ZpbHRlclR5cGUpOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVf
dGV4dHVyZSwgdl90ZXhDb29yZCk7CisgICAgICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9
IGZhY3RvcihHcmF5c2NhbGUpICogZ3JheXNjYWxlKGNvbG9yKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKyBmYWN0b3IoU2VwaWEpICogc2VwaWEoY29sb3IpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGZhY3RvcihTYXR1cmF0ZSkgKiBzYXR1cmF0
ZShjb2xvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZmFjdG9yKEh1
ZVJvdGF0ZSkgKiBodWVSb3RhdGUoY29sb3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICArIGZhY3RvcihJbnZlcnQpICogaW52ZXJ0KGNvbG9yKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKyBmYWN0b3IoT3BhY2l0eSkgKiBvcGFjaXR5KGNvbG9yKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBmYWN0b3IoQnJpZ2h0bmVzcykg
KiBicmlnaHRuZXNzKGNvbG9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KyBmYWN0b3IoQ29udHJhc3QpICogY29udHJhc3QoY29sb3IpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICksCisgICAgICAgICAgICBhdHRyaWJ1dGVzLCB1bmlmb3JtcworICAgICAg
ICB9OworICAgICAgICByZXR1cm4gZGVmaW5pdGlvbjsKKyAgICB9Cit9OworI2VuZGlmCisKKyNk
ZWZpbmUgR0xfQ01EKC4uLikgZG8geyBfX1ZBX0FSR1NfXzsgQVNTRVJUX0FSRyhfX1ZBX0FSR1Nf
XywgIWdsR2V0RXJyb3IoKSk7IH0gd2hpbGUgKDApCisKIHN0cnVjdCBUZXh0dXJlTWFwcGVyR0xE
YXRhIHsKICAgICBzdHJ1Y3QgU2hhcmVkR0xEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8U2hhcmVk
R0xEYXRhPiB7CiAjaWYgUExBVEZPUk0oUVQpCkBAIC0xMTYsOSArMzI4LDE0IEBAIHN0cnVjdCBU
ZXh0dXJlTWFwcGVyR0xEYXRhIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hh
cmVkR0xEYXRhKGdldEN1cnJlbnRHTENvbnRleHQoKSkpOwogICAgICAgICB9CiAKKyAgICAgICAg
ZW51bSBTaGFkZXJUeXBlIHsKKyAgICAgICAgICAgIE5vU2hhZGVyLAorICAgICAgICAgICAgU2lt
cGxlU2hhZGVyLAorICAgICAgICAgICAgTWFza2VkU2hhZGVyLAorICAgICAgICAgICAgQ29sb3Jp
emVTaGFkZXIKKyAgICAgICAgfTsKIAogCi0gICAgICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyIHRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOwogCiAgICAgICAgIFNoYXJlZEdMRGF0YShH
TENvbnRleHQgZ2xDb250ZXh0KQogICAgICAgICB7CkBAIC0xMzcsNiArMzU0LDM5IEBAIHN0cnVj
dCBUZXh0dXJlTWFwcGVyR0xEYXRhIHsKICAgICAgICAgICAgIEFTU0VSVChpdCAhPSBlbmQpOwog
ICAgICAgICAgICAgZ2xDb250ZXh0RGF0YU1hcCgpLnJlbW92ZShpdCk7CiAgICAgICAgIH0KKwor
CisgICAgICAgIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlcj4gY3JlYXRlU2hhZGVyKFNo
YWRlclR5cGUgdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgICAgICAgICBjYXNlIFNpbXBsZVNoYWRlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gVGV4
dHVyZU1hcHBlclNoYWRlcjo6Y3JlYXRlKFNpbXBsZVNoYWRlckRlZmluaXRpb246OmdldCgpKTsK
KyAgICAgICAgICAgIGNhc2UgTWFza2VkU2hhZGVyOgorICAgICAgICAgICAgICAgIHJldHVybiBU
ZXh0dXJlTWFwcGVyU2hhZGVyOjpjcmVhdGUoTWFza2VkU2hhZGVyRGVmaW5pdGlvbjo6Z2V0KCkp
OworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICAgICAgICAgIGNhc2UgQ29sb3JpemVTaGFk
ZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXI6OmNyZWF0ZShD
b2xvcml6ZVNoYWRlckRlZmluaXRpb246OmdldCgpKTsKKyNlbmRpZgorICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBQYXNzUmVmUHRyPFRleHR1cmVNYXBw
ZXJTaGFkZXI+IGdldFNoYWRlcihTaGFkZXJUeXBlIHR5cGUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEhhc2hNYXA8aW50LCBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlcj4gPjo6aXRlcmF0b3Ig
aXQgPSBzaGFkZXJzLmZpbmQodHlwZSk7CisgICAgICAgICAgICBpZiAoaXQgIT0gc2hhZGVycy5l
bmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKworICAgICAgICAgICAg
UmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXI+IHNoYWRlciA9IGNyZWF0ZVNoYWRlcih0eXBlKTsK
KworICAgICAgICAgICAgc2hhZGVycy5hZGQodHlwZSwgc2hhZGVyKTsKKyAgICAgICAgICAgIHJl
dHVybiBzaGFkZXI7CisgICAgICAgIH0KKworICAgICAgICBIYXNoTWFwPGludCwgUmVmUHRyPFRl
eHR1cmVNYXBwZXJTaGFkZXI+ID4gc2hhZGVyczsKICAgICB9OwogCiAgICAgU2hhcmVkR0xEYXRh
JiBzaGFyZWRHTERhdGEoKSBjb25zdApAQCAtMzE5LDE5ICs1NjksMjEgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyR0w6OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0
IEZsb2F0UmVjdCYKIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKHVpbnQzMl90
IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3Qg
RmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxW
aWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVy
ZSkKIHsKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHNoYWRlckluZm87
CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXI+IHNoYWRlcjsKKwogICAgIGlmIChtYXNr
VGV4dHVyZSkKLSAgICAgICAgc2hhZGVySW5mbyA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyOjpPcGFjaXR5QW5kTWFzayk7CisgICAgICAgIHNoYWRlciA9IGRhdGEoKS5zaGFy
ZWRHTERhdGEoKS5nZXRTaGFkZXIoVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpN
YXNrZWRTaGFkZXIpOwogICAgIGVsc2UKLSAgICAgICAgc2hhZGVySW5mbyA9IGRhdGEoKS5zaGFy
ZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaW1wbGUpOworICAgICAgICBzaGFkZXIgPSBkYXRh
KCkuc2hhcmVkR0xEYXRhKCkuZ2V0U2hhZGVyKFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdM
RGF0YTo6U2ltcGxlU2hhZGVyKTsKIAotICAgIEdMX0NNRChnbFVzZVByb2dyYW0oc2hhZGVySW5m
by0+aWQoKSkpOwotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlcklu
Zm8tPnZlcnRleEF0dHJpYigpKSk7CisgICAgR0x1aW50IHZlcnRleEF0dHJpYiA9IHNoYWRlci0+
Z2V0QXR0cmlidXRlTG9jYXRpb24oU2ltcGxlU2hhZGVyRGVmaW5pdGlvbjo6UG9zaXRpb24pOwor
ICAgIEdMX0NNRChnbFVzZVByb2dyYW0oc2hhZGVyLT5wcm9ncmFtSUQoKSkpOworICAgIEdMX0NN
RChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHZlcnRleEF0dHJpYikpOwogICAgIEdMX0NNRChn
bEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCB0ZXh0dXJlKSk7CiAgICAgR0xfQ01EKGdsQmluZEJ1ZmZlcihHTF9BUlJB
WV9CVUZGRVIsIDApKTsKICAgICBjb25zdCBHTGZsb2F0IHVuaXRSZWN0W10gPSB7MCwgMCwgMSwg
MCwgMSwgMSwgMCwgMX07Ci0gICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXJJ
bmZvLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB1bml0UmVjdCkp
OworICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIodmVydGV4QXR0cmliLCAyLCBHTF9G
TE9BVCwgR0xfRkFMU0UsIDAsIHVuaXRSZWN0KSk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChkYXRhKCkucHJvamVjdGlvbk1hdHJpeCku
bXVsdGlwbHkobW9kZWxWaWV3TWF0cml4KS5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgK
ICAgICAgICAgICAgIHRhcmdldFJlY3Qud2lkdGgoKSwgMCwgMCwgMCwKQEAgLTM1MiwxMSArNjA0
LDE4IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJl
LCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYKICAgICAgICAgMCwgMCwgMSwgMCwKICAgICAg
ICAgMCwgKGZsYWdzICYgU2hvdWxkRmxpcFRleHR1cmUpID8gMSA6IDAsIDAsIDF9OwogCi0gICAg
R0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihzaGFkZXJJbmZvLT5tYXRyaXhWYXJpYWJsZSgpLCAx
LCBHTF9GQUxTRSwgbTQpKTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHNoYWRlcklu
Zm8tPnNvdXJjZU1hdHJpeFZhcmlhYmxlKCksIDEsIEdMX0ZBTFNFLCBtNHNyYykpOwotICAgIEdM
X0NNRChnbFVuaWZvcm0xaShzaGFkZXJJbmZvLT5zb3VyY2VUZXh0dXJlVmFyaWFibGUoKSwgMCkp
OwotCi0gICAgc2hhZGVySW5mby0+cHJlcGFyZShvcGFjaXR5LCBtYXNrVGV4dHVyZSk7CisgICAg
R0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihzaGFkZXItPmdldFVuaWZvcm1Mb2NhdGlvbihTaW1w
bGVTaGFkZXJEZWZpbml0aW9uOjpNYXRyaXgpLCAxLCBHTF9GQUxTRSwgbTQpKTsKKyAgICBHTF9D
TUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHNoYWRlci0+Z2V0VW5pZm9ybUxvY2F0aW9uKFNpbXBsZVNo
YWRlckRlZmluaXRpb246OlNvdXJjZU1hdHJpeCksIDEsIEdMX0ZBTFNFLCBtNHNyYykpOworICAg
IEdMX0NNRChnbFVuaWZvcm0xaShzaGFkZXItPmdldFVuaWZvcm1Mb2NhdGlvbihTaW1wbGVTaGFk
ZXJEZWZpbml0aW9uOjpUZXh0dXJlKSwgMCkpOworICAgIEdMX0NNRChnbFVuaWZvcm0xZihzaGFk
ZXItPmdldFVuaWZvcm1Mb2NhdGlvbihTaW1wbGVTaGFkZXJEZWZpbml0aW9uOjpBbHBoYSksIG9w
YWNpdHkpKTsKKworICAgIGlmIChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgp
KSB7CisgICAgICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCogbWFza1RleHR1cmVHTCA9IHN0YXRp
Y19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsKKyAgICAgICAgZ2xB
Y3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKTsKKyAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCBtYXNrVGV4dHVyZUdMLT5pZCgpKTsKKyAgICAgICAgZ2xVbmlmb3JtMWkoc2hhZGVy
LT5nZXRVbmlmb3JtTG9jYXRpb24oTWFza2VkU2hhZGVyRGVmaW5pdGlvbjo6TWFzayksIDEpOwor
ICAgICAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApOworICAgIH0KIAogICAgIGJvb2wg
bmVlZHNCbGVuZGluZyA9IChmbGFncyAmIFN1cHBvcnRzQmxlbmRpbmcpIHx8IG9wYWNpdHkgPCAw
Ljk5IHx8IG1hc2tUZXh0dXJlOwogCkBAIC0zNjcsNyArNjI2LDcgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmRyYXdUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJ
bnRTaXplJgogICAgICAgICBHTF9DTUQoZ2xEaXNhYmxlKEdMX0JMRU5EKSk7CiAKICAgICBHTF9D
TUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpOwotICAgIEdMX0NNRChnbERp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJJbmZvLT52ZXJ0ZXhBdHRyaWIoKSkpOworICAg
IEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh2ZXJ0ZXhBdHRyaWIpKTsKIH0KIAog
Y29uc3QgY2hhciogVGV4dHVyZU1hcHBlckdMOjp0eXBlKCkgY29uc3QKQEAgLTUwNSwyOCArNzY0
LDU3IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhJbWFnZSogaW1hZ2Us
IGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvCiAgICAgdXBkYXRlQ29udGVudHMoaW1hZ2VE
YXRhLCB0YXJnZXRSZWN0LCBvZmZzZXQsIGJ5dGVzUGVyTGluZSk7CiB9CiAKKwogI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKK3N0YXRpYyBkb3VibGUgZXh0cmFjdEZpbHRlckFtb3VudChjb25zdCBG
aWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbikKK3sKKyAgICBzd2l0Y2ggKG9wZXJhdGlvbi5nZXRP
cGVyYXRpb25UeXBlKCkpIHsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgor
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6U0FUVVJBVEU6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0
aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKTsKKworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJ
TlZFUlQ6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6CisgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFD
SVRZOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFu
c2ZlckZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCk7CisKKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmRyYXdGaWx0ZXJlZChjb25zdCBCaXRtYXBUZXh0dXJlJiBzb3VyY2VUZXh0
dXJlLCBjb25zdCBCaXRtYXBUZXh0dXJlJiBjb250ZW50VGV4dHVyZSwgY29uc3QgRmlsdGVyT3Bl
cmF0aW9uJiBmaWx0ZXIpCiB7CiAgICAgLy8gRm9yIHN0YW5kYXJkIGZpbHRlcnMsIHdlIGFsd2F5
cyBkcmF3IHRoZSB3aG9sZSB0ZXh0dXJlIHdpdGhvdXQgdHJhbnNmb3JtYXRpb25zLgotICAgIFJl
ZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRh
KCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyRm9yRmlsdGVyKGZpbHRlcik7
Ci0gICAgaWYgKCFwcm9ncmFtKSB7CisgICAgaWYgKGZpbHRlci5nZXRPcGVyYXRpb25UeXBlKCkg
PCBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRSB8fCBmaWx0ZXIuZ2V0T3BlcmF0aW9uVHlwZSgp
ID4gRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVCkgewogICAgICAgICBkcmF3VGV4dHVyZShzb3Vy
Y2VUZXh0dXJlLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBzb3VyY2VUZXh0dXJlLnNp
emUoKSksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIDEsIDApOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRl
eEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3Jh
bS0+dGV4Q29vcmRBdHRyaWIoKSkpOworCisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXI+
IHNoYWRlciA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS5nZXRTaGFkZXIoVGV4dHVyZU1hcHBlckdM
RGF0YTo6U2hhcmVkR0xEYXRhOjpDb2xvcml6ZVNoYWRlcik7CisgICAgR0xfQ01EKGdsVXNlUHJv
Z3JhbShzaGFkZXItPnByb2dyYW1JRCgpKSk7CisgICAgR0x1aW50IHZlcnRleEF0dHJpYiA9IHNo
YWRlci0+Z2V0QXR0cmlidXRlTG9jYXRpb24oQ29sb3JpemVTaGFkZXJEZWZpbml0aW9uOjpQb3Np
dGlvbik7CisgICAgR0x1aW50IHRleENvb3JkQXR0cmliID0gc2hhZGVyLT5nZXRBdHRyaWJ1dGVM
b2NhdGlvbihDb2xvcml6ZVNoYWRlckRlZmluaXRpb246OlRleENvb3JkKTsKKyAgICBHTF9DTUQo
Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh2ZXJ0ZXhBdHRyaWIpKTsKKyAgICBHTF9DTUQoZ2xF
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh0ZXhDb29yZEF0dHJpYikpOwogICAgIEdMX0NNRChnbEFj
dGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9U
RVhUVVJFXzJELCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihzb3VyY2VUZXh0
dXJlKS5pZCgpKSk7Ci0gICAgZ2xVbmlmb3JtMWkocHJvZ3JhbS0+dGV4dHVyZVVuaWZvcm0oKSwg
MCk7CisgICAgZ2xVbmlmb3JtMWkoc2hhZGVyLT5nZXRVbmlmb3JtTG9jYXRpb24oQ29sb3JpemVT
aGFkZXJEZWZpbml0aW9uOjpUZXh0dXJlKSwgMCk7CisgICAgZ2xVbmlmb3JtMWkoc2hhZGVyLT5n
ZXRVbmlmb3JtTG9jYXRpb24oQ29sb3JpemVTaGFkZXJEZWZpbml0aW9uOjpGaWx0ZXJUeXBlKSwg
ZmlsdGVyLmdldE9wZXJhdGlvblR5cGUoKSk7CisgICAgZ2xVbmlmb3JtMWYoc2hhZGVyLT5nZXRV
bmlmb3JtTG9jYXRpb24oQ29sb3JpemVTaGFkZXJEZWZpbml0aW9uOjpGaWx0ZXJBbW91bnQpLCBl
eHRyYWN0RmlsdGVyQW1vdW50KGZpbHRlcikpOwogICAgIGNvbnN0IEdMZmxvYXQgdGFyZ2V0VmVy
dGljZXNbXSA9IHstMSwgLTEsIDEsIC0xLCAxLCAxLCAtMSwgMX07CiAgICAgY29uc3QgR0xmbG9h
dCBzb3VyY2VWZXJ0aWNlc1tdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9OwotICAgIEdMX0NN
RChnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4QXR0cmliKCksIDIsIEdMX0ZM
T0FULCBHTF9GQUxTRSwgMCwgdGFyZ2V0VmVydGljZXMpKTsKLSAgICBHTF9DTUQoZ2xWZXJ0ZXhB
dHRyaWJQb2ludGVyKHByb2dyYW0tPnRleENvb3JkQXR0cmliKCksIDIsIEdMX0ZMT0FULCBHTF9G
QUxTRSwgMCwgc291cmNlVmVydGljZXMpKTsKKyAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2lu
dGVyKHZlcnRleEF0dHJpYiwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB0YXJnZXRWZXJ0aWNl
cykpOworICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIodGV4Q29vcmRBdHRyaWIsIDIs
IEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgc291cmNlVmVydGljZXMpKTsKICAgICBHTF9DTUQoZ2xE
aXNhYmxlKEdMX0JMRU5EKSk7CiAgICAgR0xfQ01EKGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9G
QU4sIDAsIDQpKTsKLSAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3Jh
bS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJy
YXkocHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIoKSkpOworICAgIEdMX0NNRChnbERpc2FibGVWZXJ0
ZXhBdHRyaWJBcnJheSh2ZXJ0ZXhBdHRyaWIpKTsKKyAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkodGV4Q29vcmRBdHRyaWIpKTsKIH0KIAogUGFzc1JlZlB0cjxCaXRtYXBUZXh0
dXJlPiBCaXRtYXBUZXh0dXJlR0w6OmFwcGx5RmlsdGVycyhjb25zdCBCaXRtYXBUZXh0dXJlJiBj
b250ZW50VGV4dHVyZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKQEAgLTY4Niwx
MiArOTc0LDEzIEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uCiAKICAgICBkYXRhKCkuaW5pdGlh
bGl6ZVN0ZW5jaWwoKTsKIAotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4g
c2hhZGVySW5mbyA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaW1wbGUp
OworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyPiBzaGFkZXIgPSBkYXRhKCkuc2hhcmVk
R0xEYXRhKCkuZ2V0U2hhZGVyKFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6U2lt
cGxlU2hhZGVyKTsKIAotICAgIEdMX0NNRChnbFVzZVByb2dyYW0oc2hhZGVySW5mby0+aWQoKSkp
OwotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlckluZm8tPnZlcnRl
eEF0dHJpYigpKSk7CisgICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShzaGFkZXItPnByb2dyYW1JRCgp
KSk7CisgICAgR0x1aW50IHZlcnRleEF0dHJpYiA9IHNoYWRlci0+Z2V0QXR0cmlidXRlTG9jYXRp
b24oU2ltcGxlU2hhZGVyRGVmaW5pdGlvbjo6UG9zaXRpb24pOworICAgIEdMX0NNRChnbEVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KHZlcnRleEF0dHJpYikpOwogICAgIGNvbnN0IEdMZmxvYXQgdW5p
dFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKLSAgICBHTF9DTUQoZ2xWZXJ0ZXhB
dHRyaWJQb2ludGVyKHNoYWRlckluZm8tPnZlcnRleEF0dHJpYigpLCAyLCBHTF9GTE9BVCwgR0xf
RkFMU0UsIDAsIHVuaXRSZWN0KSk7CisgICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcih2
ZXJ0ZXhBdHRyaWIsIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdW5pdFJlY3QpKTsKIAogICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEo
KS5wcm9qZWN0aW9uTWF0cml4KQogICAgICAgICAgICAgLm11bHRpcGx5KG1vZGVsVmlld01hdHJp
eCkKQEAgLTcyNSwxNyArMTAxNCwxNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlw
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgogICAgIEdM
X0NNRChnbFN0ZW5jaWxNYXNrKDB4ZmYgJiB+KHN0ZW5jaWxJbmRleCAtIDEpKSk7CiAKICAgICAv
LyBGaXJzdCBjbGVhciB0aGUgZW50aXJlIGJ1ZmZlciBhdCB0aGUgY3VycmVudCBpbmRleC4KLSAg
ICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHNoYWRlckluZm8tPm1hdHJpeFZhcmlhYmxlKCks
IDEsIEdMX0ZBTFNFLCBtNGFsbCkpOworICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYoc2hh
ZGVyLT5nZXRVbmlmb3JtTG9jYXRpb24oU2ltcGxlU2hhZGVyRGVmaW5pdGlvbjo6TWF0cml4KSwg
MSwgR0xfRkFMU0UsIG00YWxsKSk7CiAgICAgR0xfQ01EKGdsU3RlbmNpbE9wKEdMX1pFUk8sIEdM
X1pFUk8sIEdMX1pFUk8pKTsKICAgICBHTF9DTUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZB
TiwgMCwgNCkpOwogCiAgICAgLy8gTm93IGFwcGx5IHRoZSBjdXJyZW50IGluZGV4IHRvIHRoZSBu
ZXcgcXVhZC4KICAgICBHTF9DTUQoZ2xTdGVuY2lsT3AoR0xfUkVQTEFDRSwgR0xfUkVQTEFDRSwg
R0xfUkVQTEFDRSkpOwotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYoc2hhZGVySW5mby0+
bWF0cml4VmFyaWFibGUoKSwgMSwgR0xfRkFMU0UsIG00KSk7CisgICAgR0xfQ01EKGdsVW5pZm9y
bU1hdHJpeDRmdihzaGFkZXItPmdldFVuaWZvcm1Mb2NhdGlvbihTaW1wbGVTaGFkZXJEZWZpbml0
aW9uOjpNYXRyaXgpLCAxLCBHTF9GQUxTRSwgbTQpKTsKICAgICBHTF9DTUQoZ2xEcmF3QXJyYXlz
KEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpOwogCiAgICAgLy8gQ2xlYXIgdGhlIHN0YXRlLgotICAg
IEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJJbmZvLT52ZXJ0ZXhBdHRy
aWIoKSkpOworICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh2ZXJ0ZXhBdHRy
aWIpKTsKICAgICBHTF9DTUQoZ2xTdGVuY2lsTWFzaygwKSk7CiAKICAgICAvLyBJbmNyZWFzZSBz
dGVuY2lsSW5kZXggYW5kIGFwcGx5IHN0ZW5jaWwgdGVzdGluZy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
U2hhZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jY2U1NWJiMGMzMjNhOWQyMGY1Y2IzNDY3OGI5OWFhMTQz
N2QyODdmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXIuY3BwCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisg
Q29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiVGV4dHVyZU1hcHBlclNoYWRlci5oIgorCisjaW5jbHVkZSAiT3BlbkdMU2hpbXMu
aCIKKworI2lmbmRlZiBOREVCVUcKKyNpbmNsdWRlICJzdGRpby5oIgorI2VuZGlmCisKKyNpZiBV
U0UoVEVYVFVSRV9NQVBQRVIpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVGV4dHVyZU1hcHBl
clNoYWRlcjo6VGV4dHVyZU1hcHBlclNoYWRlcihjb25zdCBEZWZpbml0aW9uJiBkZWZpbml0aW9u
KQoreworICAgIG1fdmVydGV4U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURF
Uik7CisgICAgbV9mcmFnbWVudFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NI
QURFUik7CisgICAgY29uc3QgY2hhciogdmVydGV4U291cmNlID0gZGVmaW5pdGlvbi52ZXJ0ZXhT
b3VyY2U7CisgICAgY29uc3QgY2hhciogZnJhZ21lbnRTb3VyY2UgPSBkZWZpbml0aW9uLmZyYWdt
ZW50U291cmNlOworICAgIGdsU2hhZGVyU291cmNlKG1fdmVydGV4U2hhZGVyLCAxLCAmdmVydGV4
U291cmNlLCAwKTsKKyAgICBnbFNoYWRlclNvdXJjZShtX2ZyYWdtZW50U2hhZGVyLCAxLCAmZnJh
Z21lbnRTb3VyY2UsIDApOworICAgIG1faWQgPSBnbENyZWF0ZVByb2dyYW0oKTsKKyAgICBnbENv
bXBpbGVTaGFkZXIobV92ZXJ0ZXhTaGFkZXIpOworI2lmbmRlZiBOREVCVUcKKyAgICBHTGNoYXIg
bG9nWzEwMF07CisgICAgR0xpbnQgbGVuID0gMDsKKyAgICBnbEdldFNoYWRlckluZm9Mb2cobV92
ZXJ0ZXhTaGFkZXIsIDEwMCwgJmxlbiwgbG9nKTsKKyAgICBpZiAobGVuKQorICAgICAgICBwcmlu
dGYoIlZlcnRleCBzaGFkZXIgbG9nOiAlc1xuIiwgbG9nKTsKKyNlbmRpZgorICAgIGdsQ29tcGls
ZVNoYWRlcihtX2ZyYWdtZW50U2hhZGVyKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgZ2xHZXRTaGFk
ZXJJbmZvTG9nKG1fZnJhZ21lbnRTaGFkZXIsIDEwMCwgJmxlbiwgbG9nKTsKKyAgICBpZiAobGVu
KQorICAgICAgICBwcmludGYoIkZyYWdtZW50IHNoYWRlciBsb2c6ICVzXG4iLCBsb2cpOworI2Vu
ZGlmCisgICAgZ2xBdHRhY2hTaGFkZXIobV9pZCwgbV92ZXJ0ZXhTaGFkZXIpOworICAgIGdsQXR0
YWNoU2hhZGVyKG1faWQsIG1fZnJhZ21lbnRTaGFkZXIpOworICAgIGdsTGlua1Byb2dyYW0obV9p
ZCk7CisjaWZuZGVmIE5ERUJVRworICAgIGdsR2V0UHJvZ3JhbUluZm9Mb2cobV9pZCwgMTAwLCAm
bGVuLCBsb2cpOworICAgIGlmIChsZW4pCisgICAgICAgIHByaW50ZigiUHJvZ3JhbSBsb2c6ICVz
XG4iLCBsb2cpOworI2VuZGlmCisKKyAgICBmb3IgKGNvbnN0IGNoYXIqKiBhdHRyaWIgPSBkZWZp
bml0aW9uLmF0dHJpYnV0ZXM7ICphdHRyaWI7ICsrYXR0cmliKQorICAgICAgICBtX2F0dHJpYnV0
ZXMuYXBwZW5kKGdsR2V0QXR0cmliTG9jYXRpb24obV9pZCwgKmF0dHJpYikpOworICAgIGZvciAo
Y29uc3QgY2hhcioqIHVuaWZvcm0gPSBkZWZpbml0aW9uLnVuaWZvcm1zOyAqdW5pZm9ybTsgKyt1
bmlmb3JtKQorICAgICAgICBtX3VuaWZvcm1zLmFwcGVuZChnbEdldFVuaWZvcm1Mb2NhdGlvbiht
X2lkLCAqdW5pZm9ybSkpOworfQorCitUZXh0dXJlTWFwcGVyU2hhZGVyOjp+VGV4dHVyZU1hcHBl
clNoYWRlcigpCit7CisgICAgaWYgKCFtX2lkKQorICAgICAgICByZXR1cm47CisKKyAgICBnbERl
dGFjaFNoYWRlcihtX2lkLCBtX3ZlcnRleFNoYWRlcik7CisgICAgZ2xEZWxldGVTaGFkZXIobV92
ZXJ0ZXhTaGFkZXIpOworICAgIGdsRGV0YWNoU2hhZGVyKG1faWQsIG1fZnJhZ21lbnRTaGFkZXIp
OworICAgIGdsRGVsZXRlU2hhZGVyKG1fZnJhZ21lbnRTaGFkZXIpOworICAgIGdsRGVsZXRlUHJv
Z3JhbShtX2lkKTsKK30KKworR0MzRHVpbnQgVGV4dHVyZU1hcHBlclNoYWRlcjo6Z2V0VW5pZm9y
bUxvY2F0aW9uKGludCBpbmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV91bmlmb3Jtcy5zaXpl
KCkgPiBpbmRleCk7CisgICAgcmV0dXJuIG1fdW5pZm9ybXNbaW5kZXhdOworfQorR0MzRHVpbnQg
VGV4dHVyZU1hcHBlclNoYWRlcjo6Z2V0QXR0cmlidXRlTG9jYXRpb24oaW50IGluZGV4KSBjb25z
dAoreworICAgIEFTU0VSVChtX2F0dHJpYnV0ZXMuc2l6ZSgpID4gaW5kZXgpOworICAgIHJldHVy
biBtX2F0dHJpYnV0ZXNbaW5kZXhdOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNo
YWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjMyMGUwYzcyNmY4N2MyMzU2MjllMDA2ZTgzZDk1NWJiNGEzZmI5
ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlci5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgQ29weXJp
Z2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
CisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFRleHR1cmVNYXBwZXJTaGFkZXJf
aAorI2RlZmluZSBUZXh0dXJlTWFwcGVyU2hhZGVyX2gKKworI2lmIFVTRShURVhUVVJFX01BUFBF
UikKKworI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgorI2luY2x1ZGUgIlJlZlB0ci5oIgor
I2luY2x1ZGUgIlZlY3Rvci5oIgorI2luY2x1ZGUgInRleHQvQ1N0cmluZy5oIgorI2luY2x1ZGUg
InRleHQvV1RGU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGV4dHVy
ZU1hcHBlclNoYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmVNYXBwZXJTaGFkZXI+IHsK
K3B1YmxpYzoKKyAgICBzdHJ1Y3QgRGVmaW5pdGlvbiB7CisgICAgICAgIGNvbnN0IGNoYXIqIHZl
cnRleFNvdXJjZTsKKyAgICAgICAgY29uc3QgY2hhciogZnJhZ21lbnRTb3VyY2U7CisgICAgICAg
IGNvbnN0IGNoYXIqKiBhdHRyaWJ1dGVzOworICAgICAgICBjb25zdCBjaGFyKiogdW5pZm9ybXM7
CisgICAgfTsKKworICAgIGlubGluZSBQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW1JRCgpIGNvbnN0
IHsgcmV0dXJuIG1faWQ7IH0KKyAgICBHQzNEdWludCBnZXRVbmlmb3JtTG9jYXRpb24oaW50IGlu
ZGV4KSBjb25zdDsKKyAgICBHQzNEdWludCBnZXRBdHRyaWJ1dGVMb2NhdGlvbihpbnQgaW5kZXgp
IGNvbnN0OworCisgICAgflRleHR1cmVNYXBwZXJTaGFkZXIoKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyPiBjcmVhdGUoY29uc3QgRGVmaW5pdGlvbiYgZGVmaW5p
dGlvbikgeyByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXIoZGVmaW5pdGlv
bikpOyB9CisKK3ByaXZhdGU6CisgICAgVGV4dHVyZU1hcHBlclNoYWRlcihjb25zdCBEZWZpbml0
aW9uJik7CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1faWQ7CisgICAgR0MzRHVpbnQgbV92ZXJ0
ZXhTaGFkZXI7CisgICAgR0MzRHVpbnQgbV9mcmFnbWVudFNoYWRlcjsKKyAgICBWZWN0b3I8R0Mz
RHVpbnQ+IG1fdW5pZm9ybXM7CisgICAgVmVjdG9yPEdDM0R1aW50PiBtX2F0dHJpYnV0ZXM7CisK
K307CisKK30KKworI2VuZGlmCisKKyNlbmRpZiAvLyBUZXh0dXJlTWFwcGVyU2hhZGVyX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBhNzU5YzVmNGNhMTVjZTc1ZTE5ODVmMmM2NmZhMmE5NzgxOTk0NzI4Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MjUgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIw
MTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlci5oIgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0KLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWZuZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgotI2Rl
ZmluZSBPRVMyX1BSRUNJU0lPTl9ERUZJTklUSU9OUyBcCi0gICAgIiNkZWZpbmUgbG93cFxuI2Rl
ZmluZSBoaWdocFxuIgotI2RlZmluZSBPRVMyX0ZSQUdNRU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJ
U0lPTgotI2Vsc2UKLSNkZWZpbmUgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlMKLSNkZWZpbmUg
T0VTMl9GUkFHTUVOVF9TSEFERVJfREVGQVVMVF9QUkVDSVNJT04gXAotICAgICJwcmVjaXNpb24g
bWVkaXVtcCBmbG9hdDsgXG4iCi0jZW5kaWYKLQotI2RlZmluZSBWRVJURVhfU0hBREVSKHNyYy4u
LikgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlMjc3JjCi0jZGVmaW5lIEZSQUdNRU5UX1NIQURF
UihzcmMuLi4pIE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJT05TXAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBPRVMyX0ZSQUdNRU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJU0lPTlwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3NyYwotCi1zdGF0aWMgY29uc3QgY2hhciog
ZnJhZ21lbnRTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9Ci0gICAgRlJBR01FTlRfU0hBREVS
KAotICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBTb3VyY2VUZXh0dXJlLCBNYXNrVGV4dHVyZTsK
LSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IE9wYWNpdHk7Ci0gICAgICAgIHZhcnlpbmcgaGln
aHAgdmVjMiBPdXRUZXhDb29yZFNvdXJjZSwgT3V0VGV4Q29vcmRNYXNrOwotICAgICAgICB2b2lk
IG1haW4odm9pZCkKLSAgICAgICAgewotICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4
dHVyZTJEKFNvdXJjZVRleHR1cmUsIE91dFRleENvb3JkU291cmNlKTsKLSAgICAgICAgICAgIGxv
d3AgdmVjNCBtYXNrQ29sb3IgPSB0ZXh0dXJlMkQoTWFza1RleHR1cmUsIE91dFRleENvb3JkTWFz
ayk7Ci0gICAgICAgICAgICBsb3dwIGZsb2F0IGZyYWdtZW50QWxwaGEgPSBPcGFjaXR5ICogbWFz
a0NvbG9yLmE7Ci0gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIGZy
YWdtZW50QWxwaGEsIGNvbG9yLmEgKiBmcmFnbWVudEFscGhhKTsKLSAgICAgICAgfQotICAgICk7
Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9
Ci0gICAgVkVSVEVYX1NIQURFUigKLSAgICAgICAgdW5pZm9ybSBtYXQ0IEluTWF0cml4LCBJblNv
dXJjZU1hdHJpeDsKLSAgICAgICAgYXR0cmlidXRlIHZlYzQgSW5WZXJ0ZXg7Ci0gICAgICAgIHZh
cnlpbmcgaGlnaHAgdmVjMiBPdXRUZXhDb29yZFNvdXJjZSwgT3V0VGV4Q29vcmRNYXNrOwotICAg
ICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgewotICAgICAgICAgICAgT3V0VGV4Q29vcmRT
b3VyY2UgPSB2ZWMyKEluU291cmNlTWF0cml4ICogSW5WZXJ0ZXgpOwotICAgICAgICAgICAgT3V0
VGV4Q29vcmRNYXNrID0gdmVjMihJblZlcnRleCk7Ci0gICAgICAgICAgICBnbF9Qb3NpdGlvbiA9
IEluTWF0cml4ICogSW5WZXJ0ZXg7Ci0gICAgICAgIH0KLSAgICApOwotCi1zdGF0aWMgY29uc3Qg
Y2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUgPQotICAgIEZSQUdNRU5UX1NIQURFUigK
LSAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgU291cmNlVGV4dHVyZTsKLSAgICAgICAgdW5pZm9y
bSBsb3dwIGZsb2F0IE9wYWNpdHk7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiBPdXRUZXhD
b29yZFNvdXJjZTsKLSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRChTb3VyY2VUZXh0dXJlLCBPdXRUZXhDb29y
ZFNvdXJjZSk7Ci0gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIE9w
YWNpdHksIGNvbG9yLmEgKiBPcGFjaXR5KTsKLSAgICAgICAgfQotICAgICk7Ci0KLXN0YXRpYyBj
b25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUgPQotICAgIFZFUlRFWF9TSEFERVIo
Ci0gICAgICAgIHVuaWZvcm0gbWF0NCBJbk1hdHJpeCwgSW5Tb3VyY2VNYXRyaXg7Ci0gICAgICAg
IGF0dHJpYnV0ZSB2ZWM0IEluVmVydGV4OwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0
VGV4Q29vcmRTb3VyY2U7Ci0gICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBPdXRUZXhDb29yZFNvdXJjZSA9IHZlYzIoSW5Tb3VyY2VNYXRyaXggKiBJblZlcnRl
eCk7Ci0gICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IEluTWF0cml4ICogSW5WZXJ0ZXg7Ci0gICAg
ICAgIH0KLSAgICApOwotCi12b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppbml0aWFs
aXplUHJvZ3JhbSgpCi17Ci0gICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlUHJvZ3Jh
bSA9IHZlcnRleFNoYWRlclNvdXJjZSgpOwotICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVy
U291cmNlUHJvZ3JhbSA9IGZyYWdtZW50U2hhZGVyU291cmNlKCk7Ci0gICAgR0x1aW50IHZlcnRl
eFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIpOwotICAgIEdMdWludCBm
cmFnbWVudFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NIQURFUik7Ci0gICAg
Z2xTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAmdmVydGV4U2hhZGVyU291cmNlUHJvZ3Jh
bSwgMCk7Ci0gICAgZ2xTaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIDEsICZmcmFnbWVudFNo
YWRlclNvdXJjZVByb2dyYW0sIDApOwotICAgIEdMdWludCBwcm9ncmFtSUQgPSBnbENyZWF0ZVBy
b2dyYW0oKTsKLSAgICBnbENvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICBnbENvbXBp
bGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsQXR0YWNoU2hhZGVyKHByb2dyYW1JRCwg
dmVydGV4U2hhZGVyKTsKLSAgICBnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZyYWdtZW50U2hh
ZGVyKTsKLSAgICBnbExpbmtQcm9ncmFtKHByb2dyYW1JRCk7Ci0KLSAgICBtX3ZlcnRleEF0dHJp
YiA9IGdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiSW5WZXJ0ZXgiKTsKLSAgICBtX2lk
ID0gcHJvZ3JhbUlEOwotICAgIG1fdmVydGV4U2hhZGVyID0gdmVydGV4U2hhZGVyOwotICAgIG1f
ZnJhZ21lbnRTaGFkZXIgPSBmcmFnbWVudFNoYWRlcjsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0aW9uKEdMaW50ICZ2YXJpYWJsZSwgY29uc3Qg
Y2hhciogbmFtZSkKLXsKLSAgICB2YXJpYWJsZSA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1faWQs
IG5hbWUpOwotICAgIEFTU0VSVCh2YXJpYWJsZSA+PSAwKTsKLX0KLQotVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW06On5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpCi17Ci0gICAgR0x1aW50
IHByb2dyYW1JRCA9IG1faWQ7Ci0gICAgaWYgKCFwcm9ncmFtSUQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGdsRGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgbV92ZXJ0ZXhTaGFkZXIpOwotICAgIGds
RGVsZXRlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKLSAgICBnbERldGFjaFNoYWRlcihwcm9ncmFt
SUQsIG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsRGVsZXRlU2hhZGVyKG1fZnJhZ21lbnRTaGFk
ZXIpOwotICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtSUQpOwotfQotCi1QYXNzUmVmUHRyPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlPiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVNpbXBsZTo6Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCkpOwotfQotCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKQotewotICAgIGluaXRp
YWxpemVQcm9ncmFtKCk7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNlTWF0cml4VmFy
aWFibGUsICJJblNvdXJjZU1hdHJpeCIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJp
eFZhcmlhYmxlLCAiSW5NYXRyaXgiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9zb3VyY2VU
ZXh0dXJlVmFyaWFibGUsICJTb3VyY2VUZXh0dXJlIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9u
KG1fb3BhY2l0eVZhcmlhYmxlLCAiT3BhY2l0eSIpOwotfQotCi1jb25zdCBjaGFyKiBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6dmVydGV4U2hhZGVyU291cmNlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gdmVydGV4U2hhZGVyU291cmNlU2ltcGxlOwotfQotCi1jb25zdCBjaGFyKiBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6ZnJhZ21lbnRTaGFkZXJTb3VyY2UoKSBj
b25zdAotewotICAgIHJldHVybiBmcmFnbWVudFNoYWRlclNvdXJjZVNpbXBsZTsKLX0KLQotdm9p
ZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6cHJlcGFyZShmbG9hdCBvcGFjaXR5
LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkKLXsKLSAgICBnbFVuaWZvcm0xZiht
X29wYWNpdHlWYXJpYWJsZSwgb3BhY2l0eSk7Ci19Ci0KLVBhc3NSZWZQdHI8VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaz4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1P
cGFjaXR5QW5kTWFzazo6Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soKSk7Ci19Ci0KLVRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
T3BhY2l0eUFuZE1hc2soKQotewotICAgIGluaXRpYWxpemVQcm9ncmFtKCk7Ci0gICAgZ2V0VW5p
Zm9ybUxvY2F0aW9uKG1fbWF0cml4VmFyaWFibGUsICJJbk1hdHJpeCIpOwotICAgIGdldFVuaWZv
cm1Mb2NhdGlvbihtX3NvdXJjZU1hdHJpeFZhcmlhYmxlLCAiSW5Tb3VyY2VNYXRyaXgiKTsKLSAg
ICBnZXRVbmlmb3JtTG9jYXRpb24obV9zb3VyY2VUZXh0dXJlVmFyaWFibGUsICJTb3VyY2VUZXh0
dXJlIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWFza1RleHR1cmVWYXJpYWJsZSwgIk1h
c2tUZXh0dXJlIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fb3BhY2l0eVZhcmlhYmxlLCAi
T3BhY2l0eSIpOwotfQotCi1jb25zdCBjaGFyKiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9w
YWNpdHlBbmRNYXNrOjp2ZXJ0ZXhTaGFkZXJTb3VyY2UoKSBjb25zdAotewotICAgIHJldHVybiB2
ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzazsKLX0KLQotY29uc3QgY2hhciogVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6ZnJhZ21lbnRTaGFkZXJTb3VyY2Uo
KSBjb25zdAotewotICAgIHJldHVybiBmcmFnbWVudFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNr
OwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OnBy
ZXBhcmUoZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCi17
Ci0gICAgZ2xVbmlmb3JtMWYobV9vcGFjaXR5VmFyaWFibGUsIG9wYWNpdHkpOwotICAgIGlmICgh
bWFza1RleHR1cmUgfHwgIW1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCogbWFza1RleHR1cmVHTCA9IHN0YXRpY19jYXN0
PGNvbnN0IEJpdG1hcFRleHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsKLSAgICBnbEFjdGl2ZVRleHR1
cmUoR0xfVEVYVFVSRTEpOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbWFza1Rl
eHR1cmVHTC0+aWQoKSk7Ci0gICAgZ2xVbmlmb3JtMWkobV9tYXNrVGV4dHVyZVZhcmlhYmxlLCAx
KTsKLSAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApOwotfQotCi1UZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKQotewotICAgIEFTU0VS
VChpbml0aWFsaXplT3BlbkdMU2hpbXMoKSk7Ci19Ci0KLVRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjp+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKQotewotfQotCi0jaWYgRU5BQkxFKENT
U19GSUxURVJTKQotU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp+U3RhbmRhcmRGaWx0ZXJQcm9ncmFt
KCkKLXsKLSAgICBnbERldGFjaFNoYWRlcihtX2lkLCBtX3ZlcnRleFNoYWRlcik7Ci0gICAgZ2xE
ZWxldGVTaGFkZXIobV92ZXJ0ZXhTaGFkZXIpOwotICAgIGdsRGV0YWNoU2hhZGVyKG1faWQsIG1f
ZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsRGVsZXRlU2hhZGVyKG1fZnJhZ21lbnRTaGFkZXIpOwot
ICAgIGdsRGVsZXRlUHJvZ3JhbShtX2lkKTsKLX0KLQotU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpT
dGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUp
Ci0gICAgOiBtX2lkKDApCi17Ci0gICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlID0K
LSAgICAgICAgICAgIFZFUlRFWF9TSEFERVIoCi0gICAgICAgICAgICAgICAgYXR0cmlidXRlIHZl
YzQgYV92ZXJ0ZXg7Ci0gICAgICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV90ZXhDb29yZDsK
LSAgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKLSAgICAgICAg
ICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHZfdGV4Q29vcmQgPSB2ZWMyKGFfdGV4Q29vcmQpOwotICAgICAgICAgICAgICAgICAg
ICBnbF9Qb3NpdGlvbiA9IGFfdmVydGV4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICk7Ci0KLSNkZWZpbmUgU1RBTkRBUkRfRklMVEVSKHguLi4pIFwKLSAgICAgICAgT0VTMl9QUkVD
SVNJT05fREVGSU5JVElPTlNcCi0gICAgICAgIE9FUzJfRlJBR01FTlRfU0hBREVSX0RFRkFVTFRf
UFJFQ0lTSU9OXAotICAgICAgICAidmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7XG4iXAot
ICAgICAgICAidW5pZm9ybSBoaWdocCBmbG9hdCB1X2Ftb3VudDtcbiJcCi0gICAgICAgICJ1bmlm
b3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7XG4iXAotICAgICAgICAjeFwKLSAgICAgICAgInZvaWQg
bWFpbih2b2lkKVxuIHsgZ2xfRnJhZ0NvbG9yID0gc2hhZGUodGV4dHVyZTJEKHVfdGV4dHVyZSwg
dl90ZXhDb29yZCkpOyB9IgotCi0gICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2Ug
PSAwOwotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZ
U0NBTEU6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAot
ICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBsb3dwIGZsb2F0IGFtb3VudCA9IDEuMCAtIHVfYW1vdW50Owot
ICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0KCgwLjIxMjYgKyAwLjc4NzQgKiBhbW91bnQpICog
Y29sb3IuciArICgwLjcxNTIgLSAwLjcxNTIgKiBhbW91bnQpICogY29sb3IuZyArICgwLjA3MjIg
LSAwLjA3MjIgKiBhbW91bnQpICogY29sb3IuYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoMC4yMTI2IC0gMC4yMTI2ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUyICsgMC4yODQ4
ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyIC0gMC4wNzIyICogYW1vdW50KSAqIGNvbG9y
LmIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjEyNiAtIDAuMjEyNiAqIGFtb3Vu
dCkgKiBjb2xvci5yICsgKDAuNzE1MiAtIDAuNzE1MiAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAu
MDcyMiArIDAuOTI3OCAqIGFtb3VudCkgKiBjb2xvci5iLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbG9yLmEpOwotICAgICAgICAgICAgfQotICAgICAgICApOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6Ci0gICAgICAgIGZyYWdtZW50U2hh
ZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAotICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRl
KGxvd3AgdmVjNCBjb2xvcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsb3dwIGZs
b2F0IGFtb3VudCA9IDEuMCAtIHVfYW1vdW50OwotICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0
KCgwLjM5MyArIDAuNjA3ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43NjkgLSAwLjc2OSAqIGFt
b3VudCkgKiBjb2xvci5nICsgKDAuMTg5IC0gMC4xODkgKiBhbW91bnQpICogY29sb3IuYiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4zNDkgLSAwLjM0OSAqIGFtb3VudCkgKiBjb2xv
ci5yICsgKDAuNjg2ICsgMC4zMTQgKiBhbW91bnQpICogY29sb3IuZyArICgwLjE2OCAtIDAuMTY4
ICogYW1vdW50KSAqIGNvbG9yLmIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjcy
IC0gMC4yNzIgKiBhbW91bnQpICogY29sb3IuciArICgwLjUzNCAtIDAuNTM0ICogYW1vdW50KSAq
IGNvbG9yLmcgKyAoMC4xMzEgKyAwLjg2OSAqIGFtb3VudCkgKiBjb2xvci5iLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbG9yLmEpOwotICAgICAgICAgICAgfQotICAgICAgICApOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6Ci0gICAg
ICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAotICAgICAgICAgICAg
bG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdmVjNCgoMC4yMTMgKyAwLjc4NyAqIHVfYW1vdW50KSAqIGNvbG9yLnIg
KyAoMC43MTUgLSAwLjcxNSAqIHVfYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgLSAwLjA3MiAq
IHVfYW1vdW50KSAqIGNvbG9yLmIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjEz
IC0gMC4yMTMgKiB1X2Ftb3VudCkgKiBjb2xvci5yICsgKDAuNzE1ICsgMC4yODUgKiB1X2Ftb3Vu
dCkgKiBjb2xvci5nICsgKDAuMDcyIC0gMC4wNzIgKiB1X2Ftb3VudCkgKiBjb2xvci5iLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICgwLjIxMyAtIDAuMjEzICogdV9hbW91bnQpICogY29s
b3IuciArICgwLjcxNSAtIDAuNzE1ICogdV9hbW91bnQpICogY29sb3IuZyArICgwLjA3MiArIDAu
OTI4ICogdV9hbW91bnQpICogY29sb3IuYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b2xvci5hKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVy
U291cmNlID0gU1RBTkRBUkRfRklMVEVSKAotICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxv
d3AgdmVjNCBjb2xvcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBoaWdocCBmbG9h
dCBwaSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDY7Ci0gICAgICAgICAgICAgICAgaGlnaHAgZmxv
YXQgYyA9IGNvcyh1X2Ftb3VudCAqIHBpIC8gMTgwLjApOwotICAgICAgICAgICAgICAgIGhpZ2hw
IGZsb2F0IHMgPSBzaW4odV9hbW91bnQgKiBwaSAvIDE4MC4wKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdmVjNChjb2xvci5yICogKDAuMjEzICsgYyAqIDAuNzg3IC0gcyAqIDAuMjEzKSArIGNv
bG9yLmcgKiAoMC43MTUgLSBjICogMC43MTUgLSBzICogMC43MTUpICsgY29sb3IuYiAqICgwLjA3
MiAtIGMgKiAwLjA3MiArIHMgKiAwLjkyOCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29sb3IuciAqICgwLjIxMyAtIGMgKiAwLjIxMyArIHMgKiAwLjE0MykgKyBjb2xvci5nICogKDAu
NzE1ICsgYyAqIDAuMjg1ICsgcyAqIDAuMTQwKSArIGNvbG9yLmIgKiAoMC4wNzIgLSBjICogMC4w
NzIgLSBzICogMC4yODMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLnIgKiAo
MC4yMTMgLSBjICogMC4yMTMgLSBzICogMC43ODcpICsgIGNvbG9yLmcgKiAoMC43MTUgLSBjICog
MC43MTUgKyBzICogMC43MTUpICsgY29sb3IuYiAqICgwLjA3MiArIGMgKiAwLjkyOCArIHMgKiAw
LjA3MiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IuYSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpJTlZFUlQ6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVS
KAotICAgICAgICAgICAgbG93cCBmbG9hdCBpbnZlcnQobG93cCBmbG9hdCBuKSB7IHJldHVybiAo
MS4wIC0gbikgKiB1X2Ftb3VudCArIG4gKiAoMS4wIC0gdV9hbW91bnQpOyB9Ci0gICAgICAgICAg
ICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiB2ZWM0KGludmVydChjb2xvci5yKSwgaW52ZXJ0KGNvbG9yLmcpLCBp
bnZlcnQoY29sb3IuYiksIGNvbG9yLmEpOwotICAgICAgICAgICAgfQotICAgICAgICApOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKLSAgICAg
ICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICBs
b3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiB2ZWM0KGNvbG9yLnJnYiAqICgxLjAgKyB1X2Ftb3VudCksIGNvbG9yLmEp
OwotICAgICAgICAgICAgfQotICAgICAgICApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0g
U1RBTkRBUkRfRklMVEVSKAotICAgICAgICAgICAgbG93cCBmbG9hdCBjb250cmFzdChsb3dwIGZs
b2F0IG4pIHsgcmV0dXJuIChuIC0gMC41KSAqIHVfYW1vdW50ICsgMC41OyB9Ci0gICAgICAgICAg
ICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiB2ZWM0KGNvbnRyYXN0KGNvbG9yLnIpLCBjb250cmFzdChjb2xvci5n
KSwgY29udHJhc3QoY29sb3IuYiksIGNvbG9yLmEpOwotICAgICAgICAgICAgfQotICAgICAgICAp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAg
ICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAg
ICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiB2ZWM0KGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEg
KiB1X2Ftb3VudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmICghZnJhZ21lbnRT
aGFkZXJTb3VyY2UpCi0gICAgICAgIHJldHVybjsKLSAgICBHTHVpbnQgdmVydGV4U2hhZGVyID0g
Z2xDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7Ci0gICAgR0x1aW50IGZyYWdtZW50U2hh
ZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKLSAgICBnbFNoYWRlclNv
dXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2UsIDApOwotICAgIGdsU2hh
ZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCAxLCAmZnJhZ21lbnRTaGFkZXJTb3VyY2UsIDApOwot
ICAgIEdMY2hhciBsb2dbMTAwXTsKLSAgICBHTGludCBsZW47Ci0gICAgR0x1aW50IHByb2dyYW1J
RCA9IGdsQ3JlYXRlUHJvZ3JhbSgpOwotICAgIGdsQ29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIp
OwotICAgIGdsQ29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Ci0gICAgZ2xHZXRTaGFkZXJJ
bmZvTG9nKGZyYWdtZW50U2hhZGVyLCAxMDAsICZsZW4sIGxvZyk7Ci0gICAgZ2xBdHRhY2hTaGFk
ZXIocHJvZ3JhbUlELCB2ZXJ0ZXhTaGFkZXIpOwotICAgIGdsQXR0YWNoU2hhZGVyKHByb2dyYW1J
RCwgZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsTGlua1Byb2dyYW0ocHJvZ3JhbUlEKTsKLQotICAg
IG1fdmVydGV4QXR0cmliID0gZ2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3ZlcnRl
eCIpOwotICAgIG1fdGV4Q29vcmRBdHRyaWIgPSBnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1J
RCwgImFfdGV4Q29vcmQiKTsKLSAgICBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBnbEdldFVu
aWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X3RleHR1cmUiKTsKLSAgICBzd2l0Y2ggKHR5cGUp
IHsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgotICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpTRVBJQToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6Ci0g
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6Ci0gICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OklOVkVSVDoKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKLSAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246Ok9QQUNJVFk6Ci0gICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQgPSBnbEdldFVu
aWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2Ftb3VudCIpOwotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgbV9pZCA9IHByb2dyYW1JRDsK
LSAgICBtX3ZlcnRleFNoYWRlciA9IHZlcnRleFNoYWRlcjsKLSAgICBtX2ZyYWdtZW50U2hhZGVy
ID0gZnJhZ21lbnRTaGFkZXI7Ci19Ci0KLVBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFt
PiBTdGFuZGFyZEZpbHRlclByb2dyYW06OmNyZWF0ZShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlv
blR5cGUgdHlwZSkKLXsKLSAgICBSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBwcm9ncmFt
ID0gYWRvcHRSZWYobmV3IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbSh0eXBlKSk7Ci0gICAgaWYgKCFw
cm9ncmFtLT5tX2lkKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBwcm9ncmFtOwot
fQotCi12b2lkIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6cHJlcGFyZShjb25zdCBGaWx0ZXJPcGVy
YXRpb24mIG9wZXJhdGlvbikKLXsKLSAgICBkb3VibGUgYW1vdW50ID0gMDsKLSAgICBzd2l0Y2gg
KG9wZXJhdGlvbi5nZXRPcGVyYXRpb25UeXBlKCkpIHsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6R1JBWVNDQUxFOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKLSAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhV
RV9ST1RBVEU6Ci0gICAgICAgIGFtb3VudCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JN
YXRyaXhGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgotICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpCUklHSFRORVNTOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoK
LSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAgYW1vdW50ID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiY+KG9w
ZXJhdGlvbikuYW1vdW50KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBnbFVzZVByb2dyYW0obV9pZCk7Ci0gICAgZ2xVbmlmb3JtMWYo
bV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCwgYW1vdW50KTsKLX0KLQotUGFzc1JlZlB0cjxTdGFu
ZGFyZEZpbHRlclByb2dyYW0+IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJG
b3JGaWx0ZXIoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXIpCi17Ci0gICAgUmVmUHRyPFN0
YW5kYXJkRmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbTsKLSAgICBGaWx0ZXJPcGVyYXRpb246Ok9wZXJh
dGlvblR5cGUgdHlwZSA9IGZpbHRlci5nZXRPcGVyYXRpb25UeXBlKCk7Ci0gICAgRmlsdGVyTWFw
OjppdGVyYXRvciBpdGVyYXRvciA9IG1fZmlsdGVyTWFwLmZpbmQodHlwZSk7Ci0gICAgaWYgKGl0
ZXJhdG9yID09IG1fZmlsdGVyTWFwLmVuZCgpKSB7Ci0gICAgICAgIHByb2dyYW0gPSBTdGFuZGFy
ZEZpbHRlclByb2dyYW06OmNyZWF0ZSh0eXBlKTsKLSAgICAgICAgaWYgKCFwcm9ncmFtKQotICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgbV9maWx0ZXJNYXAuYWRkKHR5cGUsIHByb2dy
YW0pOwotICAgIH0gZWxzZQotICAgICAgICBwcm9ncmFtID0gaXRlcmF0b3ItPnNlY29uZDsKLQot
ICAgIHByb2dyYW0tPnByZXBhcmUoZmlsdGVyKTsKLSAgICByZXR1cm4gcHJvZ3JhbTsKLX0KLQot
I2VuZGlmCi19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwNTkzZTZjN2ZkODljNTNhZDQ4OGYy
NDRjYzIzMGJjYzA5NjgyNTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotLyoK
LSBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXJfaAotI2RlZmluZSBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcl9oCi0K
LSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikK
LQotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRl
ICJPcGVuR0xTaGltcy5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCi0jaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgotI2VuZGlmCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQml0bWFwVGV4dHVyZTsKLWNsYXNzIFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bSA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiB7Ci1wdWJs
aWM6Ci0gICAgR0x1aW50IGlkKCkgeyByZXR1cm4gbV9pZDsgfQotICAgIEdMdWludCB2ZXJ0ZXhB
dHRyaWIoKSB7IHJldHVybiBtX3ZlcnRleEF0dHJpYjsgfQotCi0gICAgdmlydHVhbCB+VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0oKTsKLQotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKGZsb2F0
IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqKSB7IH0KLSAgICBHTGludCBtYXRyaXhWYXJp
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4VmFyaWFibGU7IH0KLSAgICBHTGludCBzb3Vy
Y2VNYXRyaXhWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlTWF0cml4VmFyaWFibGU7
IH0KLSAgICBHTGludCBzb3VyY2VUZXh0dXJlVmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBtX3Nv
dXJjZVRleHR1cmVWYXJpYWJsZTsgfQotICAgIEdMaW50IG9wYWNpdHlWYXJpYWJsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fb3BhY2l0eVZhcmlhYmxlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIGdl
dFVuaWZvcm1Mb2NhdGlvbihHTGludCYgdmFyLCBjb25zdCBjaGFyKiBuYW1lKTsKLSAgICB2b2lk
IGluaXRpYWxpemVQcm9ncmFtKCk7Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFk
ZXJTb3VyY2UoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBmcmFnbWVudFNo
YWRlclNvdXJjZSgpIGNvbnN0ID0gMDsKLQotICAgIEdMdWludCBtX2lkOwotICAgIEdMdWludCBt
X3ZlcnRleEF0dHJpYjsKLSAgICBHTHVpbnQgbV92ZXJ0ZXhTaGFkZXI7Ci0gICAgR0x1aW50IG1f
ZnJhZ21lbnRTaGFkZXI7Ci0gICAgR0xpbnQgbV9tYXRyaXhWYXJpYWJsZTsKLSAgICBHTGludCBt
X3NvdXJjZU1hdHJpeFZhcmlhYmxlOwotICAgIEdMaW50IG1fc291cmNlVGV4dHVyZVZhcmlhYmxl
OwotICAgIEdMaW50IG1fb3BhY2l0eVZhcmlhYmxlOwotfTsKLQotI2lmIEVOQUJMRShDU1NfRklM
VEVSUykKLWNsYXNzIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbSA6IHB1YmxpYyBSZWZDb3VudGVkPFN0
YW5kYXJkRmlsdGVyUHJvZ3JhbT4gewotcHVibGljOgotICAgIHZpcnR1YWwgflN0YW5kYXJkRmls
dGVyUHJvZ3JhbSgpOwotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKGNvbnN0IEZpbHRlck9wZXJh
dGlvbiYpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gY3Jl
YXRlKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSk7Ci0gICAgR0x1aW50IHZlcnRleEF0
dHJpYigpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGV4QXR0cmliOyB9Ci0gICAgR0x1aW50IHRleENv
b3JkQXR0cmliKCkgY29uc3QgeyByZXR1cm4gbV90ZXhDb29yZEF0dHJpYjsgfQotICAgIEdMdWlu
dCB0ZXh0dXJlVW5pZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlv
bjsgfQotcHJpdmF0ZToKLSAgICBTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9u
OjpPcGVyYXRpb25UeXBlKTsKLSAgICBHTHVpbnQgbV9pZDsKLSAgICBHTHVpbnQgbV92ZXJ0ZXhT
aGFkZXI7Ci0gICAgR0x1aW50IG1fZnJhZ21lbnRTaGFkZXI7Ci0gICAgR0x1aW50IG1fdmVydGV4
QXR0cmliOwotICAgIEdMdWludCBtX3RleENvb3JkQXR0cmliOwotICAgIEdMdWludCBtX3RleHR1
cmVVbmlmb3JtTG9jYXRpb247Ci0gICAgdW5pb24gewotICAgICAgICBHTHVpbnQgYW1vdW50Owot
ICAgICAgICBHTHVpbnQgc3RkZGV2OwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0x1
aW50IHN0ZGRldjsKLSAgICAgICAgICAgIEdMdWludCBjb2xvcjsKLSAgICAgICAgICAgIEdMdWlu
dCBvZmZzZXQ7Ci0gICAgICAgIH0gc2hhZG93OwotICAgIH0gbV91bmlmb3JtTG9jYXRpb25zOwot
fTsKLSNlbmRpZgotCi1jbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSA6IHB1
YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU+IGNyZWF0ZSgpOwotICAg
IHZpcnR1YWwgdm9pZCBwcmVwYXJlKGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUq
KTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJj
ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2Uo
KSBjb25zdDsKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgpOwotfTsKLQot
Y2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayA6IHB1YmxpYyBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaz4gY3JlYXRlKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHByZXBhcmUoZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVy
ZSopOwotICAgIEdMaW50IG1hc2tUZXh0dXJlVmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBtX21h
c2tUZXh0dXJlVmFyaWFibGU7IH0KLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgaW50IG1fY2xhc3NJ
RDsKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UoKSBjb25zdDsKLSAg
ICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKCk7Ci0gICAgR0xpbnQg
bV9tYXNrVGV4dHVyZVZhcmlhYmxlOwotfTsKLQotY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIgewotcHVibGljOgotICAgIGVudW0gU2hhZGVyVHlwZSB7Ci0gICAgICAgIEludmFsaWQg
PSAwLCAvLyBIYXNoTWFwcyBkbyBub3QgbGlrZSAwIGFzIGEga2V5LgotICAgICAgICBTaW1wbGUs
Ci0gICAgICAgIE9wYWNpdHlBbmRNYXNrCi0gICAgfTsKLQotICAgIFRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyKCk7Ci0gICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKTsK
LQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBQYXNzUmVmUHRyPFN0YW5kYXJkRmlsdGVy
UHJvZ3JhbT4gZ2V0U2hhZGVyRm9yRmlsdGVyKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYpOwotI2Vu
ZGlmCi0KLSAgICBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBnZXRTaGFk
ZXJQcm9ncmFtKFNoYWRlclR5cGUgc2hhZGVyVHlwZSkKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbTsKLSAgICAgICAgaWYgKHNoYWRlclR5
cGUgPT0gSW52YWxpZCkKLSAgICAgICAgICAgIHJldHVybiBwcm9ncmFtOwotCi0gICAgICAgIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOjppdGVyYXRvciBpdCA9IG1fdGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1NYXAuZmluZChzaGFkZXJUeXBlKTsKLSAgICAgICAgaWYgKGl0ICE9IG1f
dGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4g
aXQtPnNlY29uZDsKLQotICAgICAgICBzd2l0Y2ggKHNoYWRlclR5cGUpIHsKLSAgICAgICAgY2Fz
ZSBTaW1wbGU6Ci0gICAgICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1TaW1wbGU6OmNyZWF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT3Bh
Y2l0eUFuZE1hc2s6Ci0gICAgICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1PcGFjaXR5QW5kTWFzazo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBJbnZhbGlkOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgbV90ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcC5hZGQoc2hhZGVy
VHlwZSwgcHJvZ3JhbSk7Ci0gICAgICAgIHJldHVybiBwcm9ncmFtOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICB0eXBlZGVmIEhhc2hNYXA8U2hhZGVyVHlwZSwgUmVmUHRyPFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtPiwgRGVmYXVsdEhhc2g8aW50Pjo6SGFzaCwgSGFzaFRyYWl0czxpbnQ+ID4g
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA7Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1NYXAgbV90ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDsKLQotI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKLSAgICB0eXBlZGVmIEhhc2hNYXA8RmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRp
b25UeXBlLCBSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiwgRGVmYXVsdEhhc2g8aW50Pjo6
SGFzaCwgSGFzaFRyYWl0czxpbnQ+ID4gRmlsdGVyTWFwOwotICAgIEZpbHRlck1hcCBtX2ZpbHRl
ck1hcDsKLSNlbmRpZgotCi19OwotCi19Ci0KLSNlbmRpZgotCi0jZW5kaWYgLy8gVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXJfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167614</attachid>
            <date>2012-10-08 14:40:41 -0700</date>
            <delta_ts>2012-10-08 14:41:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>82754</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">Y29tbWl0IGQyM2VjMWQxNzc5MzQ2OGExZWI3MDczZDE5NzY0NTQ1NmYzZjljYjQKQXV0aG9yOiBO
b2FtIFJvc2VudGhhbCA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgpEYXRlOiAgIFNhdCBTZXAg
MjkgMTE6MzU6MzMgMjAxMiAtMDcwMAoKICAgIFRleHR1cmVNYXBwZXJTaGFkZXIKCmRpZmYgLS1n
aXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDU5ZTRhMTAuLmYzMWE5MmEgMTAwNjQ0Ci0t
LSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xLDYgKzEsNiBAQAogIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMKICMgTWFrZWZpbGUgZm9yIGJ1aWxkaW5nOiB3ZWJraXQKLSMgR2VuZXJhdGVkIGJ5
IHFtYWtlICgyLjAxYSkgKFF0IDUuMC4wKSBvbjogU3VuIFNlcCAxNiAxMDoyMTo1OSAyMDEyCisj
IEdlbmVyYXRlZCBieSBxbWFrZSAoMi4wMWEpIChRdCA1LjAuMCkgb246IFNhdCBTZXAgMjkgMTA6
MTQ6NTEgMjAxMgogIyBQcm9qZWN0OiAgV2ViS2l0LnBybwogIyBUZW1wbGF0ZTogc3ViZGlycwog
IyBDb21tYW5kOiAvVXNlcnMvbm9hbS9kZXBvdC9xdDUvcXRiYXNlL2Jpbi9xbWFrZSAtbyBNYWtl
ZmlsZSBXZWJLaXQucHJvCkBAIC00MTEsNiArNDExLDcgQEAgTWFrZWZpbGU6IFdlYktpdC5wcm8g
LnFtYWtlLmNvbmYgLnFtYWtlLmNhY2hlIC9Vc2Vycy9ub2FtL2RlcG90L3F0NS9xdGJhc2UvbWtz
cGUKIAkJL1VzZXJzL25vYW0vZGVwb3QvcXQ1L3F0YmFzZS9ta3NwZWNzL21vZHVsZXMvcXRfc3Fs
LnByaSBcCiAJCS9Vc2Vycy9ub2FtL2RlcG90L3F0NS9xdGJhc2UvbWtzcGVjcy9tb2R1bGVzLWlu
c3QvcXRfdGVzdGxpYi5wcmkgXAogCQkvVXNlcnMvbm9hbS9kZXBvdC9xdDUvcXRiYXNlL21rc3Bl
Y3MvbW9kdWxlcy9xdF90ZXN0bGliLnByaSBcCisJCS9Vc2Vycy9ub2FtL2RlcG90L3F0NS9xdGJh
c2UvbWtzcGVjcy9tb2R1bGVzL3F0X3dlYmtpdC5wcmkgXAogCQkvVXNlcnMvbm9hbS9kZXBvdC9x
dDUvcXRiYXNlL21rc3BlY3MvbW9kdWxlcy1pbnN0L3F0X3dpZGdldHMucHJpIFwKIAkJL1VzZXJz
L25vYW0vZGVwb3QvcXQ1L3F0YmFzZS9ta3NwZWNzL21vZHVsZXMvcXRfd2lkZ2V0cy5wcmkgXAog
CQkvVXNlcnMvbm9hbS9kZXBvdC9xdDUvcXRiYXNlL21rc3BlY3MvbW9kdWxlcy1pbnN0L3F0X3ht
bC5wcmkgXApAQCAtNDgyLDYgKzQ4Myw3IEBAIE1ha2VmaWxlOiBXZWJLaXQucHJvIC5xbWFrZS5j
b25mIC5xbWFrZS5jYWNoZSAvVXNlcnMvbm9hbS9kZXBvdC9xdDUvcXRiYXNlL21rc3BlCiAvVXNl
cnMvbm9hbS9kZXBvdC9xdDUvcXRiYXNlL21rc3BlY3MvbW9kdWxlcy9xdF9zcWwucHJpOgogL1Vz
ZXJzL25vYW0vZGVwb3QvcXQ1L3F0YmFzZS9ta3NwZWNzL21vZHVsZXMtaW5zdC9xdF90ZXN0bGli
LnByaToKIC9Vc2Vycy9ub2FtL2RlcG90L3F0NS9xdGJhc2UvbWtzcGVjcy9tb2R1bGVzL3F0X3Rl
c3RsaWIucHJpOgorL1VzZXJzL25vYW0vZGVwb3QvcXQ1L3F0YmFzZS9ta3NwZWNzL21vZHVsZXMv
cXRfd2Via2l0LnByaToKIC9Vc2Vycy9ub2FtL2RlcG90L3F0NS9xdGJhc2UvbWtzcGVjcy9tb2R1
bGVzLWluc3QvcXRfd2lkZ2V0cy5wcmk6CiAvVXNlcnMvbm9hbS9kZXBvdC9xdDUvcXRiYXNlL21r
c3BlY3MvbW9kdWxlcy9xdF93aWRnZXRzLnByaToKIC9Vc2Vycy9ub2FtL2RlcG90L3F0NS9xdGJh
c2UvbWtzcGVjcy9tb2R1bGVzLWluc3QvcXRfeG1sLnByaToKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmNTE4Mjli
Li45Yzc2YTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjQgQEAKKzIwMTItMTAtMDggIE5vYW0g
Um9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFtUZXhtYXBd
IFJlZmFjdG9yIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIHRvIGJlIGNsZWFyZXIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2MDQ4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJldmlvdXMgaW1wbGVt
ZW50YXRpb24gb2YgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgd2FzIHZlcnkgdmVyYm9zZSwg
Y2FsbGluZyBmb3IgdG9vCisgICAgICAgIG1hbnkgY2FzdHMgYW5kIGFtYmlndW91cyBvd25lcnNo
aXAuCisgICAgICAgIFRoaXMgcmVmYWN0b3IgZG9lcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAx
LiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSBpcyBvbmUgY2xhc3Mgd2l0aG91dCBzdWJjbGFz
c2VzLgorICAgICAgICAyLiBVbmlmb3JtL0F0dHJpYnV0ZSBhY2Nlc3NvcnMgYXJlIGdlbmVyYXRl
ZCBieSBzcGVjaWFsIG1hY3JvcyAoVEVYTUFQX0RFQ0xBUkVfLi4uKSB0aGF0CisgICAgICAgICAg
IGdlbmVyYXRlIGJvdGggdGhlIEMrKyBhY2Nlc3MgZnVuY3Rpb24sIGFzIHdlbGwgYXMgdGhlIEdM
U0wgbmFtZSBvZiB0aGUgdmFyaWFibGUuIFRoaXMKKyAgICAgICAgICAgYWxsb3dzIGFkZGluZy9y
ZW1vdmluZyB2YXJpYWJsZXMgZnJvbSBhIHNoYWRlciB3aXRob3V0IGFkZGluZyBicm9pbGVyLXBs
YXRlIGNvZGUgbGlrZQorICAgICAgICAgICBiZWZvcmUuCisKKyAgICAgICAgQWZ0ZXIgdGhpcyBj
aGFuZ2UgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgaGFzIG9ubHkgb25lIHJlc3BvbnNpYmls
aXR5IC0gZGVhbGluZyB3aXRoCisgICAgICAgIFRleHR1cmVNYXBwZXJHTCdzIGJ1aWx0LWluIHNo
YWRlcnMgYW5kIHRoZWlyIGxpZmVjeWNsZS4gUHJlcGFyaW5nIGZpbHRlcnMgZXRjLiBpcyBkb25l
CisgICAgICAgIGluIFRleHR1cmVNYXBwZXJHTC4KKworICAgICAgICBUaGlzIGlzIGEgcmVmYWN0
b3Igd2l0aG91dCBuZXcgZnVuY3Rpb25hbGl0eS4gSXQgaGFzIGJlZW4gdmVyaWZpZWQgdG8gbm90
IGJyZWFrIGFueSBleGlzdGluZworICAgICAgICByZWxldmFudCB0ZXN0LgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMOjpkcmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyR0w6OmRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJCKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckdMOjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0pOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXApOgorICAgICAgICAgICAgVXNlIHRoZSBN
QUNSTy1nZW5lcmF0ZWQgdW5pZm9ybSBhY2Nlc3NvcnMuCisKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6a2V5Rm9yRmlsdGVyVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpn
ZXRQYXNzZXNSZXF1aXJlZEZvckZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpnYXVzcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpnYXVzc2lhbktlcm5lbCk6CisgICAgICAgIChXZWJDb3JlOjpwcmVw
YXJlRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRy
YXdGaWx0ZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmFwcGx5Rmls
dGVycyk6CisgICAgICAgICAgICBNb3ZlIHRoZSBmaWx0ZXIgbG9naWMgdG8gVGV4dHVyZU1hcHBl
ckdMCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW06OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpnZXRMb2NhdGlvbik6CisgICAgICAgIChTaGFkZXJT
cGVjKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRlclNwZWM6OlNoYWRlclNwZWMpOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0U2hhZGVyU3BlYyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6On5UZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6
Z2V0U2hhZGVyUHJvZ3JhbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpwcm9ncmFtSUQpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmNyZWF0ZSk6CisgICAgICAg
IChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcik6CisgICAgICAgICAgICBTZWUgZGVzY3JpcHRpb24uCisKIDIwMTItMTAtMDUg
IERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KIAogICAgICAgICBTVkcgcmFkaWFsR3Jh
ZGllbnQgc2hvdWxkIHN1cHBvcnQgJ2ZyJyBmb3IgZm9jYWwgcmFkaXVzIChqdXN0IGxpa2UgQ2Fu
dmFzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCA4ZjBjNjhkLi4yODM1ZDY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmNwcApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMu
aCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKQEAgLTI2Niw3ICsyNjcsNyBAQCB2
b2lkIFRleHR1cmVNYXBwZXJHTDo6ZW5kUGFpbnRpbmcoKQogCiB2b2lkIFRleHR1cmVNYXBwZXJH
TDo6ZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmIHF1YWRUb0RyYXcsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBz
aGFkZXJQcm9ncmFtLCBHQzNEZW51bSBkcmF3aW5nTW9kZSwgYm9vbCBuZWVkc0JsZW5kaW5nKQog
ewotICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFt
LT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KHNoYWRlclByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwogICAgIG1fY29udGV4dDNELT5i
aW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDApOwogCiAgICAgY29u
c3QgR0MzRGZsb2F0IHF1YWRbXSA9IHsKQEAgLTI3NSw3ICsyNzYsNyBAQCB2b2lkIFRleHR1cmVN
YXBwZXJHTDo6ZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmIHF1YWRUb0RyYXcsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTQogICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVh
cmUucDMoKS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMygp
LnkoKSwKICAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnA0
KCkueCgpLCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDQoKS55KCkK
ICAgICB9OwotICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlclByb2dy
YW0tPnZlcnRleEF0dHJpYigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAw
LCBHQzNEaW50cHRyKHF1YWQpKTsKKyAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRl
cihzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHF1YWQpKTsKIAogICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0
cml4KS5tdWx0aXBseShtb2RlbFZpZXdNYXRyaXgpLm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0
cml4KAogICAgICAgICAgICAgcXVhZFRvRHJhdy5vcmlnaW5hbFRhcmdldFJlY3Qud2lkdGgoKSwg
MCwgMCwgMCwKQEAgLTI5Nyw3ICsyOTgsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1F1
YWQoY29uc3QgRHJhd1F1YWQmIHF1YWRUb0RyYXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTQogICAg
ICAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwogCiAg
ICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMoZHJhd2luZ01vZGUsIDAsIDQpOwotICAgIG1fY29u
dGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4QXR0
cmliKCkpOworICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVy
UHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpk
cmF3Qm9yZGVyKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgd2lkdGgsIGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJp
eCkKQEAgLTMwNSwxNSArMzA2LDEyIEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVy
KGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgd2lkdGgsIGNvbnN0IEZsb2F0UmVjCiAgICAgaWYg
KGNsaXBTdGFjaygpLmN1cnJlbnQoKS5zY2lzc29yQm94LmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcj4g
cHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5zb2xpZENvbG9yUHJvZ3JhbSgpOwotICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dy
YW0tPmlkKCkpOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3Jh
bSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRT
aGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTb2xpZENvbG9yKTsKKyAg
ICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CiAKLSAgICBm
bG9hdCBhbHBoYSA9IGNvbG9yLmFscGhhKCkgLyAyNTUuMDsKLSAgICBtX2NvbnRleHQzRC0+dW5p
Zm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
KGNvbG9yLnJlZCgpIC8gMjU1LjApICogYWxwaGEsCi0gICAgICAgICAgICAgICAgICAgICAgIChj
b2xvci5ncmVlbigpIC8gMjU1LjApICogYWxwaGEsCi0gICAgICAgICAgICAgICAgICAgICAgIChj
b2xvci5ibHVlKCkgLyAyNTUuMCkgKiBhbHBoYSwKLSAgICAgICAgICAgICAgICAgICAgICAgYWxw
aGEpOworICAgIGZsb2F0IHIsIGcsIGIsIGE7CisgICAgY29sb3IuZ2V0UkdCQShyLCBnLCBiLCBh
KTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwg
ciwgZywgYiwgYSk7CiAgICAgbV9jb250ZXh0M0QtPmxpbmVXaWR0aCh3aWR0aCk7CiAKICAgICBk
cmF3UXVhZCh0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0uZ2V0KCksIEdyYXBo
aWNzQ29udGV4dDNEOjpMSU5FX0xPT1AsIGNvbG9yLmhhc0FscGhhKCkpOwpAQCAtMzY4LDI3ICsz
NjYsMjUgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJCKHVp
bnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb24KIHsKICAgICBSZWZQdHI8VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0+IHByb2dyYW07CiAgICAgaWYgKG1hc2tUZXh0dXJlKQotICAgICAg
ICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJlY3RPcGFj
aXR5QW5kTWFzayk7CisgICAgICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6TWFza2VkUmVjdCk7CiAgICAgZWxzZQotICAgICAgICBwcm9ncmFtID0gZGF0
YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclBy
b2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJlY3RTaW1wbGUpOwotICAgIG1fY29u
dGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOworICAgICAgICBwcm9ncmFtID0gZGF0
YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclBy
b2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJlY3QpOworICAgIG1fY29udGV4dDNE
LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKIAotICAgIG1fY29udGV4dDNELT5l
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9j
b250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleExvY2F0aW9u
KCkpOwogICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFMCk7CiAgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFO
R0xFX0FSQiwgdGV4dHVyZSk7Ci0gICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5z
b3VyY2VUZXh0dXJlTG9jYXRpb24oKSwgMCk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShw
cm9ncmFtLT5zYW1wbGVyTG9jYXRpb24oKSwgMCk7CiAKICAgICBtX2NvbnRleHQzRC0+dW5pZm9y
bTFmKHByb2dyYW0tPmZsaXBMb2NhdGlvbigpLCAhIShmbGFncyAmIFNob3VsZEZsaXBUZXh0dXJl
KSk7CiAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0yZihwcm9ncmFtLT50ZXh0dXJlU2l6ZUxvY2F0
aW9uKCksIHRleHR1cmVTaXplLndpZHRoKCksIHRleHR1cmVTaXplLmhlaWdodCgpKTsKKyAgICBt
X2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpLCBvcGFjaXR5
KTsKIAotICAgIGlmIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1M
b2NhdGlvbihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSkpCi0gICAgICAgIG1fY29udGV4dDNE
LT51bmlmb3JtMWYocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkpOwotCi0gICAg
aWYgKG1hc2tUZXh0dXJlICYmIG1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkgJiYgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbS0+bWFza1RleHR1
cmVMb2NhdGlvbigpKSkgeworICAgIGlmIChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNW
YWxpZCgpKSB7CiAgICAgICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCogbWFza1RleHR1cmVHTCA9
IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsKICAgICAg
ICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUx
KTsKICAgICAgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBtYXNrVGV4dHVyZUdMLT5pZCgpKTsKLSAgICAgICAgbV9jb250ZXh0M0QtPnVu
aWZvcm0xaShwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCksIDEpOworICAgICAgICBtX2Nv
bnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPm1hc2tMb2NhdGlvbigpLCAxKTsKICAgICAgICAg
bV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsK
ICAgICB9CiAKQEAgLTQwNSwxMCArNDAxLDEwIEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3
VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYKIAog
ICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbTsKICAgICBpZiAo
bWFza1RleHR1cmUpCi0gICAgICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6T3BhY2l0eUFuZE1hc2spOworICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNo
YXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0o
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok1hc2tlZCk7CiAgICAgZWxzZQotICAgICAgICBw
cm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
LmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNpbXBsZSk7Ci0g
ICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7CisgICAgICAgIHByb2dy
YW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0
U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6RGVmYXVsdCk7CisgICAg
bV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogCiAgICAgZHJh
d1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKHByb2dyYW0uZ2V0KCksIHRleHR1cmUsIGZsYWdzLCB0
YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIG1hc2tUZXh0dXJlKTsKIH0KQEAg
LTUzNiw4ICs1MzIsOCBAQCBib29sIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVXaXRoQW50
aWFsaWFzaW5nKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLAogICAgIHF1YWRUb0VkZ2VB
cnJheShleHBhbmRlZFF1YWRJblNjcmVlblNwYWNlLCB0YXJnZXRRdWFkRWRnZXMpOwogICAgIHF1
YWRUb0VkZ2VBcnJheShpbmZsYXRlUXVhZChxdWFkSW5TY3JlZW5TcGFjZS5ib3VuZGluZ0JveCgp
LCAgaW5mbGF0aW9uRGlzdGFuY2UpLCB0YXJnZXRRdWFkRWRnZXMgKyAxMik7CiAKLSAgICBSZWZQ
dHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s+IHByb2dyYW0g
PSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuYW50aWFs
aWFzaW5nTm9NYXNrUHJvZ3JhbSgpOwotICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dy
YW0tPmlkKCkpOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3Jh
bSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRT
aGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpBbnRpYWxpYXNlZCk7Cisg
ICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogICAgIG1f
Y29udGV4dDNELT51bmlmb3JtM2Z2KHByb2dyYW0tPmV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5T
cGFjZUxvY2F0aW9uKCksIDgsIHRhcmdldFF1YWRFZGdlcyk7CiAKICAgICBkcmF3VGV4dHVyZWRR
dWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgdGV4dHVyZSwgZmxhZ3MsIERyYXdRdWFkKG9y
aWdpbmFsVGFyZ2V0UmVjdCwgZXhwYW5kZWRRdWFkSW5UZXh0dXJlQ29vcmRpbmF0ZXMpLCBtb2Rl
bFZpZXdNYXRyaXgsIG9wYWNpdHksIDAgLyogbWFza1RleHR1cmUgKi8pOwpAQCAtNTQ2LDIxICs1
NDIsMTkgQEAgYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2lu
Zyh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywKIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6
OmRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSog
cHJvZ3JhbSwgdWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IERyYXdRdWFkJiBx
dWFkVG9EcmF3LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBm
bG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkKIHsKLSAgICBt
X2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmli
KCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52
ZXJ0ZXhMb2NhdGlvbigpKTsKICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRTApOwogICAgIG1fY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZSk7Ci0gICAgbV9jb250ZXh0M0QtPnVu
aWZvcm0xaShwcm9ncmFtLT5zb3VyY2VUZXh0dXJlTG9jYXRpb24oKSwgMCk7CisgICAgbV9jb250
ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5zYW1wbGVyTG9jYXRpb24oKSwgMCk7CiAKICAgICBt
X2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPmZsaXBMb2NhdGlvbigpLCAhIShmbGFncyAm
IFNob3VsZEZsaXBUZXh0dXJlKSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xZihwcm9ncmFt
LT5vcGFjaXR5TG9jYXRpb24oKSwgb3BhY2l0eSk7CiAKLSAgICBpZiAoVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbS0+b3BhY2l0eUxvY2F0
aW9uKCkpKQotICAgICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPm9wYWNpdHlM
b2NhdGlvbigpLCBvcGFjaXR5KTsKLQotICAgIGlmIChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVy
ZS0+aXNWYWxpZCgpICYmIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppc1ZhbGlkVW5pZm9y
bUxvY2F0aW9uKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRpb24oKSkpIHsKKyAgICBpZiAobWFz
a1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQoKSkgewogICAgICAgICBjb25zdCBCaXRt
YXBUZXh0dXJlR0wqIG1hc2tUZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0
dXJlR0wqPihtYXNrVGV4dHVyZSk7CiAgICAgICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSk7CiAgICAgICAgIG1fY29udGV4dDNELT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbWFza1RleHR1cmVHTC0+aWQo
KSk7Ci0gICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+bWFza1RleHR1cmVM
b2NhdGlvbigpLCAxKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5t
YXNrTG9jYXRpb24oKSwgMSk7CiAgICAgICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgfQogCkBAIC03MDksMjcgKzcwMywxNzAg
QEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKEltYWdlKiBpbWFnZSwgY29u
c3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY28KIH0KIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykK
LXZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3RmlsdGVyZWQoY29uc3QgQml0bWFwVGV4dHVyZSYg
c291cmNlVGV4dHVyZSwgY29uc3QgQml0bWFwVGV4dHVyZSYgY29udGVudFRleHR1cmUsIGNvbnN0
IEZpbHRlck9wZXJhdGlvbiYgZmlsdGVyLCBpbnQgcGFzcykKKworc3RhdGljIFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpTaGFkZXJLZXkga2V5Rm9yRmlsdGVyVHlwZShGaWx0ZXJPcGVyYXRp
b246Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgorICAgICAgICByZXR1
cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkdyYXlzY2FsZUZpbHRlcjsKKyAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6U2VwaWFGaWx0ZXI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVS
QVRFOgorICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNhdHVyYXRl
RmlsdGVyOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgorICAgICAgICBy
ZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Okh1ZVJvdGF0ZUZpbHRlcjsKKyAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgorICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6OkludmVydEZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
QlJJR0hUTkVTUzoKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpC
cmlnaHRuZXNzRmlsdGVyOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKKyAg
ICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpDb250cmFzdEZpbHRlcjsK
KyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKKyAgICAgICAgcmV0dXJuIFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5RmlsdGVyOworICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpCTFVSOgorICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OkJsdXJGaWx0ZXI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOgorICAg
ICAgICByZXR1cm4gcGFzcyA/IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaGFkb3dGaWx0
ZXJQYXNzMiA6IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaGFkb3dGaWx0ZXJQYXNzMTsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OkludmFsaWQ7CisgICAgfQorfQorCitzdGF0aWMgdW5zaWduZWQgZ2V0UGFzc2VzUmVxdWlyZWRG
b3JGaWx0ZXIoRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUpCit7CisgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKKyAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNB
VFVSQVRFOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgorICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdI
VE5FU1M6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgorICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpPUEFDSVRZOgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6QkxVUjoKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6
CisgICAgICAgIC8vIFdlIHVzZSB0d28tcGFzc2VzICh2ZXJ0aWNhbCtob3Jpem9udGFsKSBmb3Ig
Ymx1ciBhbmQgZHJvcC1zaGFkb3cuCisgICAgICAgIHJldHVybiAyOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworLy8gQ3JlYXRlIGEgbm9ybWFsIGRpc3RyaWJ1
dGlvbiBvZiAyMSB2YWx1ZXMgYmV0d2VlbiAtMiBhbmQgMi4KKyNkZWZpbmUgR0FVU1NJQU5fS0VS
TkVMX0hBTEZfV0lEVEggMTEKKyNkZWZpbmUgR0FVU1NJQU5fS0VSTkVMX1NURVAgMC4yCisKK3N0
YXRpYyBpbmxpbmUgZmxvYXQgZ2F1c3MoZmxvYXQgeCkKK3sKKyAgICByZXR1cm4gZXhwKC0oeCAq
IHgpIC8gMi4pOworfQorCitzdGF0aWMgZmxvYXQqIGdhdXNzaWFuS2VybmVsKCkKK3sKKyAgICBz
dGF0aWMgYm9vbCBwcmVwYXJlZCA9IGZhbHNlOworICAgIHN0YXRpYyBmbG9hdCBrZXJuZWxbR0FV
U1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdID0gezAsIH07CisKKyAgICBpZiAocHJlcGFyZWQpCisg
ICAgICAgIHJldHVybiBrZXJuZWw7CisKKyAgICBrZXJuZWxbMF0gPSBnYXVzcygwKTsKKyAgICBm
bG9hdCBzdW0gPSBrZXJuZWxbMF07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IEdBVVNT
SUFOX0tFUk5FTF9IQUxGX1dJRFRIOyArK2kpIHsKKyAgICAgICAga2VybmVsW2ldID0gZ2F1c3Mo
aSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKTsKKyAgICAgICAgc3VtICs9IDIgKiBrZXJuZWxbaV07
CisgICAgfQorCisgICAgLy8gTm9ybWFsaXplIHRoZSBrZXJuZWwKKyAgICBmbG9hdCBzY2FsZSA9
IDEgLyBzdW07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdBVVNTSUFOX0tFUk5FTF9I
QUxGX1dJRFRIOyArK2kpCisgICAgICAgIGtlcm5lbFtpXSAqPSBzY2FsZTsKKworICAgIHByZXBh
cmVkID0gdHJ1ZTsKKyAgICByZXR1cm4ga2VybmVsOworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJl
RmlsdGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3Qg
RmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHBhc3MsIGNvbnN0IEludFNpemUm
IHNpemUsIEdDM0R1aW50IGNvbnRlbnRUZXh0dXJlKQoreworICAgIFJlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gY29udGV4dCA9IHByb2dyYW0tPmNvbnRleHQoKTsKKyAgICBjb250ZXh0LT51c2VQ
cm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKKworICAgIHN3aXRjaCAob3BlcmF0aW9uLmdl
dE9wZXJhdGlvblR5cGUoKSkgeworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6
CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpTQVRVUkFURToKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKKyAg
ICAgICAgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPmFtb3VudExvY2F0aW9uKCksIHN0YXRp
Y19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24p
LmFtb3VudCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklO
VkVSVDoKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKKyAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJ
VFk6CisgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT5hbW91bnRMb2NhdGlvbigp
LCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9u
Jj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpCTFVSOiB7CisgICAgICAgIGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mIGJs
dXIgPSBzdGF0aWNfY2FzdDxjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKTsK
KyAgICAgICAgRmxvYXRTaXplIHJhZGl1czsKKworICAgICAgICAvLyBCbHVyIGlzIGRvbmUgaW4g
dHdvIHBhc3NlcywgZmlyc3QgaG9yaXpvbnRhbGx5IGFuZCB0aGVuIHZlcnRpY2FsbHkuIFRoZSBz
YW1lIHNoYWRlciBpcyB1c2VkIGZvciBib3RoLgorICAgICAgICBpZiAocGFzcykKKyAgICAgICAg
ICAgIHJhZGl1cy5zZXRIZWlnaHQoZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyLnN0ZERldmlhdGlv
bigpLCBzaXplLmhlaWdodCgpKSAvIHNpemUuaGVpZ2h0KCkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICByYWRpdXMuc2V0V2lkdGgoZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyLnN0ZERldmlh
dGlvbigpLCBzaXplLndpZHRoKCkpIC8gc2l6ZS53aWR0aCgpKTsKKworICAgICAgICBjb250ZXh0
LT51bmlmb3JtMmYocHJvZ3JhbS0+Ymx1clJhZGl1c0xvY2F0aW9uKCksIHJhZGl1cy53aWR0aCgp
LCByYWRpdXMuaGVpZ2h0KCkpOworICAgICAgICBjb250ZXh0LT51bmlmb3JtMWZ2KHByb2dyYW0t
PmdhdXNzaWFuS2VybmVsTG9jYXRpb24oKSwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdh
dXNzaWFuS2VybmVsKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkRST1BfU0hBRE9XOiB7CisgICAgICAgIGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJP
cGVyYXRpb24mIHNoYWRvdyA9IHN0YXRpY19jYXN0PGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVy
YXRpb24mPihvcGVyYXRpb24pOworICAgICAgICBjb250ZXh0LT51bmlmb3JtMWZ2KHByb2dyYW0t
PmdhdXNzaWFuS2VybmVsTG9jYXRpb24oKSwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdh
dXNzaWFuS2VybmVsKCkpOworICAgICAgICBzd2l0Y2ggKHBhc3MpIHsKKyAgICAgICAgY2FzZSAw
OgorICAgICAgICAgICAgLy8gRmlyc3QgcGFzczogdmVydGljYWwgYWxwaGEgYmx1ci4KKyAgICAg
ICAgICAgIGNvbnRleHQtPnVuaWZvcm0yZihwcm9ncmFtLT5zaGFkb3dPZmZzZXRMb2NhdGlvbigp
LCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS54KCkpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSwgZmxv
YXQoc2hhZG93LmxvY2F0aW9uKCkueSgpKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT5ibHVyUmFkaXVzTG9jYXRpb24oKSwg
c2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHdl
IG5lZWQgdGhlIHNoYWRvdyBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBmb3IgY29tcG9z
aXRpbmcuCisgICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtMWYocHJvZ3JhbS0+Ymx1clJhZGl1
c0xvY2F0aW9uKCksIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkp
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkUxKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBjb250ZW50VGV4dHVyZSk7CisgICAgICAgICAgICBjb250ZXh0
LT51bmlmb3JtMWkocHJvZ3JhbS0+Y29udGVudFRleHR1cmVMb2NhdGlvbigpLCAxKTsKKyAgICAg
ICAgICAgIGZsb2F0IHIsIGcsIGIsIGE7CisgICAgICAgICAgICBzaGFkb3cuY29sb3IoKS5nZXRS
R0JBKHIsIGcsIGIsIGEpOworICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTRmKHByb2dyYW0t
PnNoYWRvd0NvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0ZpbHRlcmVkKGNv
bnN0IEJpdG1hcFRleHR1cmUmIHNhbXBsZXIsIGNvbnN0IEJpdG1hcFRleHR1cmUmIGNvbnRlbnRU
ZXh0dXJlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIGZpbHRlciwgaW50IHBhc3MpCiB7CiAgICAg
Ly8gRm9yIHN0YW5kYXJkIGZpbHRlcnMsIHdlIGFsd2F5cyBkcmF3IHRoZSB3aG9sZSB0ZXh0dXJl
IHdpdGhvdXQgdHJhbnNmb3JtYXRpb25zLgotICAgIFJlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dy
YW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuZ2V0U2hhZGVyRm9yRmlsdGVyKGZpbHRlciwgcGFzcyk7CisgICAgVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6OlNoYWRlcktleSBrZXkgPSBrZXlGb3JGaWx0ZXJUeXBlKGZpbHRlci5n
ZXRPcGVyYXRpb25UeXBlKCksIHBhc3MpOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKGtleSk7CiAgICAgQVNTRVJUKHByb2dyYW0pOwog
Ci0gICAgcHJvZ3JhbS0+cHJlcGFyZShmaWx0ZXIsIHBhc3MsIHNvdXJjZVRleHR1cmUuY29udGVu
dFNpemUoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oY29udGVudFRleHR1
cmUpLmlkKCkpOworICAgIHByZXBhcmVGaWx0ZXJQcm9ncmFtKHByb2dyYW0uZ2V0KCksIGZpbHRl
ciwgcGFzcywgc2FtcGxlci5jb250ZW50U2l6ZSgpLCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBU
ZXh0dXJlR0wmPihjb250ZW50VGV4dHVyZSkuaWQoKSk7CiAKLSAgICBtX2NvbnRleHQzRC0+ZW5h
YmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOwotICAgIG1fY29u
dGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT50ZXhDb29yZEF0dHJpYigp
KTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVy
dGV4TG9jYXRpb24oKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KHByb2dyYW0tPnRleENvb3JkTG9jYXRpb24oKSk7CiAgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKLSAgICBtX2NvbnRleHQzRC0+Ymlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHN0YXRpY19jYXN0PGNvbnN0
IEJpdG1hcFRleHR1cmVHTCY+KHNvdXJjZVRleHR1cmUpLmlkKCkpOwotICAgIG1fY29udGV4dDNE
LT51bmlmb3JtMWkocHJvZ3JhbS0+dGV4dHVyZVVuaWZvcm0oKSwgMCk7CisgICAgbV9jb250ZXh0
M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBzdGF0aWNfY2Fz
dDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihzYW1wbGVyKS5pZCgpKTsKKyAgICBtX2NvbnRleHQz
RC0+dW5pZm9ybTFpKHByb2dyYW0tPnNhbXBsZXJMb2NhdGlvbigpLCAwKTsKICAgICBjb25zdCBH
QzNEZmxvYXQgdGFyZ2V0VmVydGljZXNbXSA9IHstMSwgLTEsIDEsIC0xLCAxLCAxLCAtMSwgMX07
CiAgICAgY29uc3QgR0MzRGZsb2F0IHNvdXJjZVZlcnRpY2VzW10gPSB7MCwgMCwgMSwgMCwgMSwg
MSwgMCwgMX07Ci0gICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+
dmVydGV4QXR0cmliKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdD
M0RpbnRwdHIodGFyZ2V0VmVydGljZXMpKTsKLSAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmli
UG9pbnRlcihwcm9ncmFtLT50ZXhDb29yZEF0dHJpYigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHNvdXJjZVZlcnRpY2VzKSk7CisgICAgbV9jb250
ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSwgMiwg
R3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cih0YXJnZXRWZXJ0
aWNlcykpOworICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnRl
eENvb3JkTG9jYXRpb24oKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwg
R0MzRGludHB0cihzb3VyY2VWZXJ0aWNlcykpOwogICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CiAgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgNCk7Ci0gICAgbV9jb250ZXh0M0QtPmRp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7Ci0gICAgbV9j
b250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT50ZXhDb29yZEF0dHJp
YigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0t
PnZlcnRleExvY2F0aW9uKCkpOworICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmli
QXJyYXkocHJvZ3JhbS0+dGV4Q29vcmRMb2NhdGlvbigpKTsKIH0KIAogUGFzc1JlZlB0cjxCaXRt
YXBUZXh0dXJlPiBCaXRtYXBUZXh0dXJlR0w6OmFwcGx5RmlsdGVycyhUZXh0dXJlTWFwcGVyKiB0
ZXh0dXJlTWFwcGVyLCBjb25zdCBCaXRtYXBUZXh0dXJlJiBjb250ZW50VGV4dHVyZSwgY29uc3Qg
RmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKQEAgLTc0Myw3ICs4ODAsNyBAQCBQYXNzUmVmUHRy
PEJpdG1hcFRleHR1cmU+IEJpdG1hcFRleHR1cmVHTDo6YXBwbHlGaWx0ZXJzKFRleHR1cmVNYXBw
ZXIqIHRleHR1cmVNYQogICAgICAgICBjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZpbHRlciA9IGZp
bHRlcnMuYXQoaSk7CiAgICAgICAgIEFTU0VSVChmaWx0ZXIpOwogCi0gICAgICAgIGludCBudW1Q
YXNzZXMgPSB0ZXh0dXJlTWFwcGVyR0wtPmRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlci5nZXRQYXNzZXNSZXF1aXJlZEZvckZpbHRlcigqZmlsdGVyKTsKKyAg
ICAgICAgaW50IG51bVBhc3NlcyA9IGdldFBhc3Nlc1JlcXVpcmVkRm9yRmlsdGVyKGZpbHRlci0+
Z2V0T3BlcmF0aW9uVHlwZSgpKTsKICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBudW1QYXNz
ZXM7ICsraikgewogICAgICAgICAgICAgdGV4dHVyZU1hcHBlckdMLT5iaW5kU3VyZmFjZSh0YXJn
ZXQuZ2V0KCkpOwogICAgICAgICAgICAgdGV4dHVyZU1hcHBlckdMLT5kcmF3RmlsdGVyZWQoKGkg
fHwgaikgPyAqc291cmNlIDogY29udGVudFRleHR1cmUsIGNvbnRlbnRUZXh0dXJlLCAqZmlsdGVy
LCBqKTsKQEAgLTg5NCwxMiArMTAzMSwxMiBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5D
bGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgogCiAg
ICAgZGF0YSgpLmluaXRpYWxpemVTdGVuY2lsKCk7CiAKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6U2ltcGxlKTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHBy
b2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIu
Z2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6RGVmYXVsdCk7CiAK
LSAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKTsKLSAgICBtX2NvbnRl
eHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOwor
ICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKKyAgICBt
X2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4TG9jYXRp
b24oKSk7CiAgICAgY29uc3QgR0MzRGZsb2F0IHVuaXRSZWN0W10gPSB7MCwgMCwgMSwgMCwgMSwg
MSwgMCwgMX07Ci0gICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+
dmVydGV4QXR0cmliKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdD
M0RpbnRwdHIodW5pdFJlY3QpKTsKKyAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRl
cihwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQs
IGZhbHNlLCAwLCBHQzNEaW50cHRyKHVuaXRSZWN0KSk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBtYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChkYXRhKCkucHJvamVjdGlvbk1hdHJp
eCkKICAgICAgICAgICAgIC5tdWx0aXBseShtb2RlbFZpZXdNYXRyaXgpCkBAIC05NDMsNyArMTA4
MCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uCiAgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJh
eXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgNCk7CiAKICAgICAvLyBDbGVh
ciB0aGUgc3RhdGUuCi0gICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShw
cm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKICAgICBtX2NvbnRleHQzRC0+
c3RlbmNpbE1hc2soMCk7CiAKICAgICAvLyBJbmNyZWFzZSBzdGVuY2lsSW5kZXggYW5kIGFwcGx5
IHN0ZW5jaWwgdGVzdGluZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIu
Y3BwCmluZGV4IDczZDZmZWYuLjdiNGVmZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmNwcApAQCAtMzAsMjQ3ICszMCw1MyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLSNkZWZpbmUgU1RSSU5HSUZZKC4uLikgI19fVkFfQVJHU19fCi0KLXN0YXRpYyBjb25z
dCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrID0KLSAgICBTVFJJTkdJ
RlkoCi0gICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwotICAgICAgICB1bmlmb3JtIHNh
bXBsZXIyRCBzX3NvdXJjZTsKLSAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19tYXNrOwotICAg
ICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OwotICAgICAgICB2YXJ5aW5nIGhpZ2hw
IHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKLSAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfbWFz
a1RleENvb3JkOwotICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgewotICAgICAgICAg
ICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHNfc291cmNlLCB2X3NvdXJjZVRleENvb3Jk
KTsKLSAgICAgICAgICAgIGxvd3AgdmVjNCBtYXNrQ29sb3IgPSB0ZXh0dXJlMkQoc19tYXNrLCB2
X21hc2tUZXhDb29yZCk7Ci0gICAgICAgICAgICBsb3dwIGZsb2F0IGZyYWdtZW50QWxwaGEgPSB1
X29wYWNpdHkgKiBtYXNrQ29sb3IuYTsKLSAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQo
Y29sb3IucmdiICogZnJhZ21lbnRBbHBoYSwgY29sb3IuYSAqIGZyYWdtZW50QWxwaGEpOwotICAg
ICAgICB9Ci0gICAgKTsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNl
UmVjdE9wYWNpdHlBbmRNYXNrID0KLSAgICBTVFJJTkdJRlkoCi0gICAgICAgIHByZWNpc2lvbiBt
ZWRpdW1wIGZsb2F0OwotICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRFJlY3Qgc19zb3VyY2U7Ci0g
ICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX21hc2s7Ci0gICAgICAgIHVuaWZvcm0gbG93
cCBmbG9hdCB1X29wYWNpdHk7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRl
eENvb3JkOwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9tYXNrVGV4Q29vcmQ7Ci0gICAg
ICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICB7Ci0gICAgICAgICAgICBsb3dwIHZlYzQgY29s
b3IgPSB0ZXh0dXJlMkRSZWN0KHNfc291cmNlLCB2X3NvdXJjZVRleENvb3JkKTsKLSAgICAgICAg
ICAgIGxvd3AgdmVjNCBtYXNrQ29sb3IgPSB0ZXh0dXJlMkRSZWN0KHNfbWFzaywgdl9tYXNrVGV4
Q29vcmQpOwotICAgICAgICAgICAgbG93cCBmbG9hdCBmcmFnbWVudEFscGhhID0gdV9vcGFjaXR5
ICogbWFza0NvbG9yLmE7Ci0gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJn
YiAqIGZyYWdtZW50QWxwaGEsIGNvbG9yLmEgKiBmcmFnbWVudEFscGhhKTsKLSAgICAgICAgfQot
ICAgICk7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5k
TWFzayA9Ci0gICAgU1RSSU5HSUZZKAotICAgICAgICB1bmlmb3JtIG1hdDQgdV9tYXRyaXg7Ci0g
ICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X2ZsaXA7Ci0gICAgICAgIGF0dHJpYnV0ZSB2ZWM0
IGFfdmVydGV4OwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsK
LSAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfbWFza1RleENvb3JkOwotICAgICAgICB2b2lk
IG1haW4odm9pZCkKLSAgICAgICAgewotICAgICAgICAgICAgdl9zb3VyY2VUZXhDb29yZCA9IHZl
YzIoYV92ZXJ0ZXgueCwgbWl4KGFfdmVydGV4LnksIDEuIC0gYV92ZXJ0ZXgueSwgdV9mbGlwKSk7
Ci0gICAgICAgICAgICB2X21hc2tUZXhDb29yZCA9IHZlYzIoYV92ZXJ0ZXgpOwotICAgICAgICAg
ICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIGFfdmVydGV4OwotICAgICAgICB9Ci0gICAgKTsK
LQotc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlU2ltcGxlID0KLSAgICBT
VFJJTkdJRlkoCi0gICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwotICAgICAgICB1bmlm
b3JtIHNhbXBsZXIyRCBzX3NvdXJjZTsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3Bh
Y2l0eTsKLSAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAg
ICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICB7Ci0gICAgICAgICAgICBsb3dwIHZlYzQgY29s
b3IgPSB0ZXh0dXJlMkQoc19zb3VyY2UsIHZfc291cmNlVGV4Q29vcmQpOwotICAgICAgICAgICAg
Z2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiB1X29wYWNpdHksIGNvbG9yLmEgKiB1X29w
YWNpdHkpOwotICAgICAgICB9Ci0gICAgKTsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50
U2hhZGVyU291cmNlQW50aWFsaWFzaW5nTm9NYXNrID0KLSAgICBTVFJJTkdJRlkoCi0gICAgICAg
IHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwotICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3Nv
dXJjZTsKLSAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAg
ICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7Ci0gICAgICAgIHVuaWZvcm0gdmVjMyB1
X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs4XTsKLSAgICAgICAgdm9pZCBtYWluKCkK
LSAgICAgICAgewotICAgICAgICAgICAgdmVjNCBzYW1wbGVkQ29sb3IgPSB0ZXh0dXJlMkQoc19z
b3VyY2UsIGNsYW1wKHZfc291cmNlVGV4Q29vcmQsIDAuMCwgMS4wKSk7Ci0gICAgICAgICAgICB2
ZWMzIHBvcyA9IHZlYzMoZ2xfRnJhZ0Nvb3JkLnh5LCAxKTsKLQotICAgICAgICAgICAgLy8gVGhl
IGRhdGEgcGFzc2VkIGluIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlIGlzIG1lcmVs
eSB0aGUKLSAgICAgICAgICAgIC8vIHByZS1zY2FsZWQgY29lZmZlY2llbnRzIG9mIHRoZSBsaW5l
IGVxdWF0aW9ucyBkZXNjcmliaW5nIHRoZSBmb3VyIGVkZ2VzCi0gICAgICAgICAgICAvLyBvZiB0
aGUgZXhwYW5kZWQgcXVhZCBpbiBzY3JlZW4gc3BhY2UgYW5kIHRoZSByZWN0YW5ndWxhciBib3Vu
ZGluZyBib3gKLSAgICAgICAgICAgIC8vIG9mIHRoZSBleHBhbmRlZCBxdWFkLgotICAgICAgICAg
ICAgLy8KLSAgICAgICAgICAgIC8vIFdlIGFyZSBkb2luZyBhIHNpbXBsZSBkaXN0YW5jZSBjYWxj
dWxhdGlvbiBoZXJlIGFjY29yZGluZyB0byB0aGUgZm9ybXVsYToKLSAgICAgICAgICAgIC8vIChB
KnAueCArIEIqcC55ICsgQykgLyBzcXJ0KEFeMiArIEJeMikgPSBkaXN0YW5jZSBmcm9tIGxpbmUg
dG8gcAotICAgICAgICAgICAgLy8gTm90ZSB0aGF0IEEsIEIgYW5kIEMgaGF2ZSBhbHJlYWR5IGJl
ZW4gc2NhbGVkIGJ5IDEgLyBzcXJ0KEFeMiArIEJeMikuCi0gICAgICAgICAgICBmbG9hdCBhMCA9
IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVswXSwgcG9zKSwgMC4w
LCAxLjApOwotICAgICAgICAgICAgZmxvYXQgYTEgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRF
ZGdlc0luU2NyZWVuU3BhY2VbMV0sIHBvcyksIDAuMCwgMS4wKTsKLSAgICAgICAgICAgIGZsb2F0
IGEyID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzJdLCBwb3Mp
LCAwLjAsIDEuMCk7Ci0gICAgICAgICAgICBmbG9hdCBhMyA9IGNsYW1wKGRvdCh1X2V4cGFuZGVk
UXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVszXSwgcG9zKSwgMC4wLCAxLjApOwotICAgICAgICAgICAg
ZmxvYXQgYTQgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNF0s
IHBvcyksIDAuMCwgMS4wKTsKLSAgICAgICAgICAgIGZsb2F0IGE1ID0gY2xhbXAoZG90KHVfZXhw
YW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzVdLCBwb3MpLCAwLjAsIDEuMCk7Ci0gICAgICAg
ICAgICBmbG9hdCBhNiA9IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFj
ZVs2XSwgcG9zKSwgMC4wLCAxLjApOwotICAgICAgICAgICAgZmxvYXQgYTcgPSBjbGFtcChkb3Qo
dV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbN10sIHBvcyksIDAuMCwgMS4wKTsKLQot
ICAgICAgICAgICAgLy8gTm93IHdlIHdhbnQgdG8gcmVkdWNlIHRoZSBhbHBoYSB2YWx1ZSBvZiB0
aGUgZnJhZ21lbnQgaWYgaXQgaXMgY2xvc2UgdG8gdGhlCi0gICAgICAgICAgICAvLyBlZGdlcyBv
ZiB0aGUgZXhwYW5kZWQgcXVhZCAob3IgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYm94IC0tIHdoaWNo
IHNlZW1zIHRvIGJlCi0gICAgICAgICAgICAvLyBpbXBvcnRhbnQgZm9yIGJhY2tmYWNpbmcgcXVh
ZHMpLiBOb3RlIHRoYXQgd2UgYXJlIGNvbWJpbmluZyB0aGUgY29udHJpYnV0aW9uCi0gICAgICAg
ICAgICAvLyBmcm9tIHRoZSAodG9wIHx8IGJvdHRvbSkgYW5kIChsZWZ0IHx8IHJpZ2h0KSBlZGdl
IGJ5IHNpbXBseSBtdWx0aXBseWluZy4gVGhpcyBmb2xsb3dzCi0gICAgICAgICAgICAvLyB0aGUg
YXBwcm9hY2ggZGVzY3JpYmVkIGF0OiBodHRwOi8vaHR0cC5kZXZlbG9wZXIubnZpZGlhLmNvbS9H
UFVHZW1zMi9ncHVnZW1zMl9jaGFwdGVyMjIuaHRtbCwKLSAgICAgICAgICAgIC8vIGluIHRoaXMg
Y2FzZSB3aXRob3V0IHVzaW5nIEdhdXNzaWFuIHdlaWdodHMuCi0gICAgICAgICAgICBnbF9GcmFn
Q29sb3IgPSBzYW1wbGVkQ29sb3IgKiB1X29wYWNpdHkgKiBtaW4obWluKGEwLCBhMikgKiBtaW4o
YTEsIGEzKSwgbWluKGE0LCBhNikgKiBtaW4oYTUsIGE3KSk7Ci0gICAgICAgIH0KLSAgICApOwot
Ci1zdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0U2ltcGxlID0KLSAg
ICBTVFJJTkdJRlkoCi0gICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwotICAgICAgICB1
bmlmb3JtIHNhbXBsZXIyRFJlY3Qgc19zb3VyY2U7Ci0gICAgICAgIHVuaWZvcm0gbG93cCB2ZWMy
IHVfdGV4dHVyZVNpemU7Ci0gICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7Ci0g
ICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOwotICAgICAgICB2b2lk
IG1haW4odm9pZCkKLSAgICAgICAgewotICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4
dHVyZTJEUmVjdChzX3NvdXJjZSwgdV90ZXh0dXJlU2l6ZSAqIHZfc291cmNlVGV4Q29vcmQpOwot
ICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiB1X29wYWNpdHksIGNv
bG9yLmEgKiB1X29wYWNpdHkpOwotICAgICAgICB9Ci0gICAgKTsKLQotc3RhdGljIGNvbnN0IGNo
YXIqIHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSA9Ci0gICAgU1RSSU5HSUZZKAotICAgICAgICB1
bmlmb3JtIG1hdDQgdV9tYXRyaXg7Ci0gICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X2ZsaXA7
Ci0gICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwotICAgICAgICB2YXJ5aW5nIGhpZ2hw
IHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKLSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHZfc291cmNlVGV4Q29vcmQgPSB2ZWMyKGFfdmVydGV4LngsIG1peChh
X3ZlcnRleC55LCAxLiAtIGFfdmVydGV4LnksIHVfZmxpcCkpOwotICAgICAgICAgICAgZ2xfUG9z
aXRpb24gPSB1X21hdHJpeCAqIGFfdmVydGV4OwotICAgICAgICB9Ci0gICAgKTsKLQotc3RhdGlj
IGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNvbGlkQ29sb3IgPQotICAgIFNUUklOR0lG
WSgKLSAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OwotICAgICAgICBhdHRyaWJ1dGUgdmVj
NCBhX3ZlcnRleDsKLSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiBhX3ZlcnRleDsKLSAgICAgICAgfQotICAgICk7
Ci0KLQotc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlU29saWRDb2xvciA9
Ci0gICAgU1RSSU5HSUZZKAotICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSAgICAg
ICAgdW5pZm9ybSB2ZWM0IHVfY29sb3I7Ci0gICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB1X2NvbG9yOwotICAgICAgICB9Ci0gICAg
KTsKLQotUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I+IFRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpzb2xpZENvbG9yUHJvZ3JhbSgpCitUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwgY29uc3QgU3RyaW5nJiB2ZXJ0ZXgsIGNvbnN0IFN0
cmluZyYgZnJhZ21lbnQpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1faWQoMCkK
KyAgICAsIG1fdmVydGV4U2hhZGVyKDApCisgICAgLCBtX2ZyYWdtZW50U2hhZGVyKDApCiB7Ci0g
ICAgcmV0dXJuIHN0YXRpY19wb2ludGVyX2Nhc3Q8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1T
b2xpZENvbG9yPihnZXRTaGFkZXJQcm9ncmFtKFNvbGlkQ29sb3IpKTsKLX0KKyAgICBtX3ZlcnRl
eFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpWRVJU
RVhfU0hBREVSKTsKKyAgICBtX2ZyYWdtZW50U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFk
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUik7CisgICAgbV9jb250ZXh0LT5z
aGFkZXJTb3VyY2UobV92ZXJ0ZXhTaGFkZXIsIHZlcnRleCk7CisgICAgbV9jb250ZXh0LT5zaGFk
ZXJTb3VyY2UobV9mcmFnbWVudFNoYWRlciwgZnJhZ21lbnQpOworICAgIG1faWQgPSBtX2NvbnRl
eHQtPmNyZWF0ZVByb2dyYW0oKTsKKyAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIobV92ZXJ0
ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihtX2ZyYWdtZW50U2hhZGVy
KTsKKyAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihtX2lkLCBtX3ZlcnRleFNoYWRlcik7Cisg
ICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIobV9pZCwgbV9mcmFnbWVudFNoYWRlcik7CisgICAg
bV9jb250ZXh0LT5saW5rUHJvZ3JhbShtX2lkKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFcnJv
cigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikKKyAgICAgICAgcmV0dXJuOwogCi1Q
YXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrPiBU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6YW50aWFsaWFzaW5nTm9NYXNrUHJvZ3JhbSgpCi17
Ci0gICAgcmV0dXJuIHN0YXRpY19wb2ludGVyX2Nhc3Q8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1BbnRpYWxpYXNpbmdOb01hc2s+KGdldFNoYWRlclByb2dyYW0oQW50aWFsaWFzaW5nTm9NYXNr
KSk7CisgICAgU3RyaW5nIGxvZyA9IG1fY29udGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhtX3ZlcnRl
eFNoYWRlcik7CisgICAgcHJpbnRmKCJWZXJ0ZXggc2hhZGVyIGxvZzogJXNcbiIsIGxvZy51dGY4
KCkuZGF0YSgpKTsKKyAgICBsb2cgPSBtX2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cobV9mcmFn
bWVudFNoYWRlcik7CisgICAgcHJpbnRmKCJGcmFnbWVudCBzaGFkZXIgbG9nOiAlc1xuIiwgbG9n
LnV0ZjgoKS5kYXRhKCkpOworICAgIGxvZyA9IG1fY29udGV4dC0+Z2V0UHJvZ3JhbUluZm9Mb2co
bV9pZCk7CisgICAgcHJpbnRmKCJQcm9ncmFtIGxvZzogJXNcbiIsIGxvZy51dGY4KCkuZGF0YSgp
KTsKIH0KIAotUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlclByb2dyYW0oU2hhZGVyVHlwZSBzaGFkZXJUeXBl
KQorR0MzRHVpbnQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmdldExvY2F0aW9uKGNvbnN0
IGNoYXIqIG5hbWUsIFZhcmlhYmxlVHlwZSB0eXBlKQogewotICAgIFJlZlB0cjxUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbTsKLSAgICBpZiAoc2hhZGVyVHlwZSA9PSBJbnZhbGlk
KQotICAgICAgICByZXR1cm4gcHJvZ3JhbTsKLQotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtTWFwOjppdGVyYXRvciBpdCA9IG1fdGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAuZmlu
ZChzaGFkZXJUeXBlKTsKLSAgICBpZiAoaXQgIT0gbV90ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bU1hcC5lbmQoKSkKKyAgICBIYXNoTWFwPGNvbnN0IGNoYXIqLCBHQzNEdWludD46Oml0ZXJhdG9y
IGl0ID0gbV92YXJpYWJsZXMuZmluZChuYW1lKTsKKyAgICBpZiAoaXQgIT0gbV92YXJpYWJsZXMu
ZW5kKCkpCiAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOwotCi0gICAgc3dpdGNoIChzaGFkZXJU
eXBlKSB7Ci0gICAgY2FzZSBTaW1wbGU6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVNpbXBsZTo6Y3JlYXRlKG1fY29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgUmVjdFNpbXBsZToKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtUmVjdFNpbXBsZTo6Y3JlYXRlKG1fY29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQW50aWFsaWFzaW5nTm9NYXNrOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OmNyZWF0ZShtX2NvbnRleHQpOwor
ICAgIEdDM0R1aW50IGxvY2F0aW9uOworICAgIHN3aXRjaCh0eXBlKSB7CisgICAgY2FzZSBVbmlm
b3JtVmFyaWFibGU6CisgICAgICAgIGxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9j
YXRpb24obV9pZCwgU3RyaW5nKEFTQ0lJTGl0ZXJhbChuYW1lKSkpOwogICAgICAgICBicmVhazsK
LSAgICBjYXNlIE9wYWNpdHlBbmRNYXNrOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6Y3JlYXRlKG1fY29udGV4dCk7CisgICAgY2Fz
ZSBBdHRyaWJWYXJpYWJsZToKKyAgICAgICAgbG9jYXRpb24gPSBtX2NvbnRleHQtPmdldEF0dHJp
YkxvY2F0aW9uKG1faWQsIFN0cmluZyhBU0NJSUxpdGVyYWwobmFtZSkpKTsKICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBSZWN0T3BhY2l0eUFuZE1hc2s6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6Y3JlYXRlKG1fY29udGV4
dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU29saWRDb2xvcjoKLSAgICAgICAgcHJvZ3Jh
bSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6Y3JlYXRlKG1fY29udGV4
dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW52YWxpZDoKKyAgICBkZWZhdWx0OgogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIG1f
dGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAuYWRkKHNoYWRlclR5cGUsIHByb2dyYW0pOwot
ICAgIHJldHVybiBwcm9ncmFtOwotfQotCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0
IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3Vy
Y2UpCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1faWQoMCkKLSAgICAsIG1fdmVy
dGV4QXR0cmliKDApCi0gICAgLCBtX3ZlcnRleFNoYWRlcigwKQotICAgICwgbV9mcmFnbWVudFNo
YWRlcigwKQotICAgICwgbV9tYXRyaXhMb2NhdGlvbigtMSkKLSAgICAsIG1fZmxpcExvY2F0aW9u
KC0xKQotICAgICwgbV90ZXh0dXJlU2l6ZUxvY2F0aW9uKC0xKQotICAgICwgbV9zb3VyY2VUZXh0
dXJlTG9jYXRpb24oLTEpCi0gICAgLCBtX29wYWNpdHlMb2NhdGlvbigtMSkKLSAgICAsIG1fbWFz
a1RleHR1cmVMb2NhdGlvbigtMSkKLSAgICAsIG1fdmVydGV4U2hhZGVyU291cmNlKHZlcnRleFNo
YWRlclNvdXJjZSkKLSAgICAsIG1fZnJhZ21lbnRTaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXJT
b3VyY2UpCi17Ci19CiAKLXZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmluaXRpYWxp
emVQcm9ncmFtKCkKLXsKLSAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VQcm9ncmFt
ID0gdmVydGV4U2hhZGVyU291cmNlKCk7Ci0gICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJT
b3VyY2VQcm9ncmFtID0gZnJhZ21lbnRTaGFkZXJTb3VyY2UoKTsKLSAgICBQbGF0Zm9ybTNET2Jq
ZWN0IHZlcnRleFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4
dDNEOjpWRVJURVhfU0hBREVSKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGZyYWdtZW50U2hhZGVy
ID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NI
QURFUik7Ci0gICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCB2ZXJ0ZXhT
aGFkZXJTb3VyY2VQcm9ncmFtKTsKLSAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZShmcmFnbWVu
dFNoYWRlciwgZnJhZ21lbnRTaGFkZXJTb3VyY2VQcm9ncmFtKTsKLSAgICBQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW1JRCA9IG1fY29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOwotICAgIG1fY29udGV4
dC0+Y29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgIG1fY29udGV4dC0+Y29tcGlsZVNo
YWRlcihmcmFnbWVudFNoYWRlcik7Ci0KLSAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihwcm9n
cmFtSUQsIHZlcnRleFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIocHJvZ3Jh
bUlELCBmcmFnbWVudFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5saW5rUHJvZ3JhbShwcm9ncmFt
SUQpOwotCi0gICAgbV92ZXJ0ZXhBdHRyaWIgPSBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9u
KHByb2dyYW1JRCwgImFfdmVydGV4Iik7Ci0KLSAgICBtX2lkID0gcHJvZ3JhbUlEOwotICAgIG1f
dmVydGV4U2hhZGVyID0gdmVydGV4U2hhZGVyOwotICAgIG1fZnJhZ21lbnRTaGFkZXIgPSBmcmFn
bWVudFNoYWRlcjsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Z2V0VW5p
Zm9ybUxvY2F0aW9uKEdDM0RpbnQgJnZhcmlhYmxlLCBjb25zdCBjaGFyKiBuYW1lKQotewotICAg
IHZhcmlhYmxlID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9pZCwgbmFtZSk7Ci0g
ICAgQVNTRVJUKHZhcmlhYmxlID49IDApOworICAgIG1fdmFyaWFibGVzLmFkZChuYW1lLCBsb2Nh
dGlvbik7CisgICAgcmV0dXJuIGxvY2F0aW9uOwogfQogCiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbTo6flRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCkKQEAgLTI4NiwxMjAgKzkyLDE5MSBA
QCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6flRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
KCkKICAgICBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0ocHJvZ3JhbUlEKTsKIH0KIAotVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2lt
cGxlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNoYWRl
clNvdXJjZVNpbXBsZSkKLXsKLSAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwotICAgIGdldFVuaWZv
cm1Mb2NhdGlvbihtX2ZsaXBMb2NhdGlvbiwgInVfZmxpcCIpOwotICAgIGdldFVuaWZvcm1Mb2Nh
dGlvbihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRp
b24obV9zb3VyY2VUZXh0dXJlTG9jYXRpb24sICJzX3NvdXJjZSIpOwotICAgIGdldFVuaWZvcm1M
b2NhdGlvbihtX29wYWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0eSIpOwotfQorc3RydWN0IFNoYWRl
clNwZWMgeworICAgIFN0cmluZyB2ZXJ0ZXhTaGFkZXI7CisgICAgU3RyaW5nIGZyYWdtZW50U2hh
ZGVyOworICAgIFNoYWRlclNwZWMoY29uc3QgY2hhciogdmVydGV4ID0gMCwgY29uc3QgY2hhciog
ZnJhZ21lbnQgPSAwKQorICAgICAgICA6IHZlcnRleFNoYWRlcih2ZXJ0ZXggPyBTdHJpbmcoQVND
SUlMaXRlcmFsKHZlcnRleCkpIDogU3RyaW5nKCkpCisgICAgICAgICwgZnJhZ21lbnRTaGFkZXIo
ZnJhZ21lbnQgPyBTdHJpbmcoQVNDSUlMaXRlcmFsKGZyYWdtZW50KSkgOiBTdHJpbmcoKSkKKyAg
ICB7CisgICAgfQorfTsKIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQpCi0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhT
aGFkZXJTb3VyY2VTb2xpZENvbG9yLCBmcmFnbWVudFNoYWRlclNvdXJjZVNvbGlkQ29sb3IpCitz
dGF0aWMgdm9pZCBnZXRTaGFkZXJTcGVjKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaGFk
ZXJLZXkga2V5LCBTdHJpbmcmIHZlcnRleCwgU3RyaW5nJiBmcmFnbWVudCkKIHsKLSAgICBpbml0
aWFsaXplUHJvZ3JhbSgpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9u
LCAidV9tYXRyaXgiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9jb2xvckxvY2F0aW9uLCAi
dV9jb2xvciIpOwotfQorICAgIHN0YXRpYyBWZWN0b3I8U2hhZGVyU3BlYz4gc3BlY3MgPSBWZWN0
b3I8U2hhZGVyU3BlYz4oKTsKKyNkZWZpbmUgU1RSSU5HSUZZKC4uLikgI19fVkFfQVJHU19fCisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50T3BhY2l0eUFuZE1hc2sgPQorICAgICAgICBT
VFJJTkdJRlkoCisgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKKyAgICAgICAg
ICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc2FtcGxlcjsKKyAgICAgICAgICAgIHVuaWZvcm0gc2Ft
cGxlcjJEIHNfbWFzazsKKyAgICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7
CisgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKKyAgICAg
ICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X21hc2tUZXhDb29yZDsKKyAgICAgICAgICAgIHZv
aWQgbWFpbih2b2lkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBj
b2xvciA9IHRleHR1cmUyRChzX3NhbXBsZXIsIHZfc291cmNlVGV4Q29vcmQpOworICAgICAgICAg
ICAgICAgIGxvd3AgdmVjNCBtYXNrQ29sb3IgPSB0ZXh0dXJlMkQoc19tYXNrLCB2X21hc2tUZXhD
b29yZCk7CisgICAgICAgICAgICAgICAgbG93cCBmbG9hdCBmcmFnbWVudEFscGhhID0gdV9vcGFj
aXR5ICogbWFza0NvbG9yLmE7CisgICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChj
b2xvci5yZ2IgKiBmcmFnbWVudEFscGhhLCBjb2xvci5hICogZnJhZ21lbnRBbHBoYSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICk7CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNp
bXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0KQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4dCwg
dmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RTaW1wbGUp
Ci17Ci0gICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9t
YXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fZmxp
cExvY2F0aW9uLCAidV9mbGlwIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fdGV4dHVyZVNp
emVMb2NhdGlvbiwgInVfdGV4dHVyZVNpemUiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9z
b3VyY2VUZXh0dXJlTG9jYXRpb24sICJzX3NvdXJjZSIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlv
bihtX29wYWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0eSIpOwotfQorICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBmcmFnbWVudFJlY3RPcGFjaXR5QW5kTWFzayA9CisgICAgICAgIFNUUklOR0lGWSgKKyAg
ICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OworICAgICAgICAgICAgdW5pZm9ybSBz
YW1wbGVyMkRSZWN0IHNfc2FtcGxlcjsKKyAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVj
dCBzX21hc2s7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OworICAg
ICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CisgICAgICAgICAg
ICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9tYXNrVGV4Q29vcmQ7CisgICAgICAgICAgICB2b2lkIG1h
aW4odm9pZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsb3dwIHZlYzQgY29sb3Ig
PSB0ZXh0dXJlMkRSZWN0KHNfc2FtcGxlciwgdl9zb3VyY2VUZXhDb29yZCk7CisgICAgICAgICAg
ICAgICAgbG93cCB2ZWM0IG1hc2tDb2xvciA9IHRleHR1cmUyRFJlY3Qoc19tYXNrLCB2X21hc2tU
ZXhDb29yZCk7CisgICAgICAgICAgICAgICAgbG93cCBmbG9hdCBmcmFnbWVudEFscGhhID0gdV9v
cGFjaXR5ICogbWFza0NvbG9yLmE7CisgICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVj
NChjb2xvci5yZ2IgKiBmcmFnbWVudEFscGhhLCBjb2xvci5hICogZnJhZ21lbnRBbHBoYSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICk7CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3Bh
Y2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRTaGFk
ZXJTb3VyY2VPcGFjaXR5QW5kTWFzaykKLXsKLSAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwotICAg
IGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKLSAgICBn
ZXRVbmlmb3JtTG9jYXRpb24obV9mbGlwTG9jYXRpb24sICJ1X2ZsaXAiKTsKLSAgICBnZXRVbmlm
b3JtTG9jYXRpb24obV9zb3VyY2VUZXh0dXJlTG9jYXRpb24sICJzX3NvdXJjZSIpOwotICAgIGdl
dFVuaWZvcm1Mb2NhdGlvbihtX21hc2tUZXh0dXJlTG9jYXRpb24sICJzX21hc2siKTsKLSAgICBn
ZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9jYXRpb24sICJ1X29wYWNpdHkiKTsKLX0KKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4T3BhY2l0eUFuZE1hc2sgPQorICAgICAgICBTVFJJ
TkdJRlkoCisgICAgICAgICAgICB1bmlmb3JtIG1hdDQgdV9tYXRyaXg7CisgICAgICAgICAgICB1
bmlmb3JtIGxvd3AgZmxvYXQgdV9mbGlwOworICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92
ZXJ0ZXg7CisgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsK
KyAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X21hc2tUZXhDb29yZDsKKyAgICAgICAg
ICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZfc291
cmNlVGV4Q29vcmQgPSB2ZWMyKGFfdmVydGV4LngsIG1peChhX3ZlcnRleC55LCAxLiAtIGFfdmVy
dGV4LnksIHVfZmxpcCkpOworICAgICAgICAgICAgICAgIHZfbWFza1RleENvb3JkID0gdmVjMihh
X3ZlcnRleCk7CisgICAgICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIGFfdmVy
dGV4OworICAgICAgICAgICAgfQorICAgICAgICApOwogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3Bh
Y2l0eUFuZE1hc2soR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi0gICAgOiBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFz
aywgZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0T3BhY2l0eUFuZE1hc2spCi17Ci0gICAgaW5pdGlh
bGl6ZVByb2dyYW0oKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwg
InVfbWF0cml4Iik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fZmxpcExvY2F0aW9uLCAidV9m
bGlwIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNlVGV4dHVyZUxvY2F0aW9uLCAi
c19zb3VyY2UiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXNrVGV4dHVyZUxvY2F0aW9u
LCAic19tYXNrIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAi
dV9vcGFjaXR5Iik7Ci19CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2ltcGxlID0K
KyAgICAgICAgU1RSSU5HSUZZKAorICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7
CisgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBsZXI7CisgICAgICAgICAgICB1
bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OworICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2
ZWMyIHZfc291cmNlVGV4Q29vcmQ7CisgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQoc19z
YW1wbGVyLCB2X3NvdXJjZVRleENvb3JkKTsKKyAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3Ig
PSB2ZWM0KGNvbG9yLnJnYiAqIHVfb3BhY2l0eSwgY29sb3IuYSAqIHVfb3BhY2l0eSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICk7CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFs
aWFzaW5nTm9NYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFz
ayhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJT
b3VyY2VBbnRpYWxpYXNpbmdOb01hc2spCi17Ci0gICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKLSAg
ICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7Ci0gICAg
Z2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNlVGV4dHVyZUxvY2F0aW9uLCAic19zb3VyY2UiKTsK
LSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9jYXRpb24sICJ1X29wYWNpdHkiKTsK
LSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VM
b2NhdGlvbiwgInVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlIik7Ci0gICAgZ2V0VW5p
Zm9ybUxvY2F0aW9uKG1fZmxpcExvY2F0aW9uLCAidV9mbGlwIik7Ci19CisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGZyYWdtZW50QW50aWFsaWFzaW5nTm9NYXNrID0KKyAgICAgICAgU1RSSU5HSUZZ
KAorICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisgICAgICAgICAgICB1bmlm
b3JtIHNhbXBsZXIyRCBzX3NhbXBsZXI7CisgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIg
dl9zb3VyY2VUZXhDb29yZDsKKyAgICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNp
dHk7CisgICAgICAgICAgICB1bmlmb3JtIHZlYzMgdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVu
U3BhY2VbOF07CisgICAgICAgICAgICB2b2lkIG1haW4oKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHZlYzQgc2FtcGxlZENvbG9yID0gdGV4dHVyZTJEKHNfc2FtcGxlciwgY2xhbXAo
dl9zb3VyY2VUZXhDb29yZCwgMC4wLCAxLjApKTsKKyAgICAgICAgICAgICAgICB2ZWMzIHBvcyA9
IHZlYzMoZ2xfRnJhZ0Nvb3JkLnh5LCAxKTsKKworICAgICAgICAgICAgICAgIC8vIFRoZSBkYXRh
IHBhc3NlZCBpbiB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZSBpcyBtZXJlbHkgdGhl
CisgICAgICAgICAgICAgICAgLy8gcHJlLXNjYWxlZCBjb2VmZmVjaWVudHMgb2YgdGhlIGxpbmUg
ZXF1YXRpb25zIGRlc2NyaWJpbmcgdGhlIGZvdXIgZWRnZXMKKyAgICAgICAgICAgICAgICAvLyBv
ZiB0aGUgZXhwYW5kZWQgcXVhZCBpbiBzY3JlZW4gc3BhY2UgYW5kIHRoZSByZWN0YW5ndWxhciBi
b3VuZGluZyBib3gKKyAgICAgICAgICAgICAgICAvLyBvZiB0aGUgZXhwYW5kZWQgcXVhZC4KKyAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBkb2luZyBhIHNpbXBs
ZSBkaXN0YW5jZSBjYWxjdWxhdGlvbiBoZXJlIGFjY29yZGluZyB0byB0aGUgZm9ybXVsYToKKyAg
ICAgICAgICAgICAgICAvLyAoQSpwLnggKyBCKnAueSArIEMpIC8gc3FydChBXjIgKyBCXjIpID0g
ZGlzdGFuY2UgZnJvbSBsaW5lIHRvIHAKKyAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgQSwg
QiBhbmQgQyBoYXZlIGFscmVhZHkgYmVlbiBzY2FsZWQgYnkgMSAvIHNxcnQoQV4yICsgQl4yKS4K
KyAgICAgICAgICAgICAgICBmbG9hdCBhMCA9IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2Vz
SW5TY3JlZW5TcGFjZVswXSwgcG9zKSwgMC4wLCAxLjApOworICAgICAgICAgICAgICAgIGZsb2F0
IGExID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzFdLCBwb3Mp
LCAwLjAsIDEuMCk7CisgICAgICAgICAgICAgICAgZmxvYXQgYTIgPSBjbGFtcChkb3QodV9leHBh
bmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbMl0sIHBvcyksIDAuMCwgMS4wKTsKKyAgICAgICAg
ICAgICAgICBmbG9hdCBhMyA9IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5T
cGFjZVszXSwgcG9zKSwgMC4wLCAxLjApOworICAgICAgICAgICAgICAgIGZsb2F0IGE0ID0gY2xh
bXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzRdLCBwb3MpLCAwLjAsIDEu
MCk7CisgICAgICAgICAgICAgICAgZmxvYXQgYTUgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRF
ZGdlc0luU2NyZWVuU3BhY2VbNV0sIHBvcyksIDAuMCwgMS4wKTsKKyAgICAgICAgICAgICAgICBm
bG9hdCBhNiA9IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs2XSwg
cG9zKSwgMC4wLCAxLjApOworICAgICAgICAgICAgICAgIGZsb2F0IGE3ID0gY2xhbXAoZG90KHVf
ZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzddLCBwb3MpLCAwLjAsIDEuMCk7CisKKyAg
ICAgICAgICAgICAgICAvLyBOb3cgd2Ugd2FudCB0byByZWR1Y2UgdGhlIGFscGhhIHZhbHVlIG9m
IHRoZSBmcmFnbWVudCBpZiBpdCBpcyBjbG9zZSB0byB0aGUKKyAgICAgICAgICAgICAgICAvLyBl
ZGdlcyBvZiB0aGUgZXhwYW5kZWQgcXVhZCAob3IgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYm94IC0t
IHdoaWNoIHNlZW1zIHRvIGJlCisgICAgICAgICAgICAgICAgLy8gaW1wb3J0YW50IGZvciBiYWNr
ZmFjaW5nIHF1YWRzKS4gTm90ZSB0aGF0IHdlIGFyZSBjb21iaW5pbmcgdGhlIGNvbnRyaWJ1dGlv
bgorICAgICAgICAgICAgICAgIC8vIGZyb20gdGhlICh0b3AgfHwgYm90dG9tKSBhbmQgKGxlZnQg
fHwgcmlnaHQpIGVkZ2UgYnkgc2ltcGx5IG11bHRpcGx5aW5nLiBUaGlzIGZvbGxvd3MKKyAgICAg
ICAgICAgICAgICAvLyB0aGUgYXBwcm9hY2ggZGVzY3JpYmVkIGF0OiBodHRwOi8vaHR0cC5kZXZl
bG9wZXIubnZpZGlhLmNvbS9HUFVHZW1zMi9ncHVnZW1zMl9jaGFwdGVyMjIuaHRtbCwKKyAgICAg
ICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2l0aG91dCB1c2luZyBHYXVzc2lhbiB3ZWlnaHRz
LgorICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHNhbXBsZWRDb2xvciAqIHVfb3BhY2l0
eSAqIG1pbihtaW4oYTAsIGEyKSAqIG1pbihhMSwgYTMpLCBtaW4oYTQsIGE2KSAqIG1pbihhNSwg
YTcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKIAotVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0KQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi17Ci19CisgICAgc3RhdGljIGNvbnN0IGNo
YXIqIGZyYWdtZW50UmVjdFNpbXBsZSA9CisgICAgICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAg
IHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OworICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRS
ZWN0IHNfc2FtcGxlcjsKKyAgICAgICAgICAgIHVuaWZvcm0gbG93cCB2ZWMyIHNfc2FtcGxlclNp
emU7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OworICAgICAgICAg
ICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CisgICAgICAgICAgICB2b2lk
IG1haW4odm9pZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsb3dwIHZlYzQgY29s
b3IgPSB0ZXh0dXJlMkRSZWN0KHNfc2FtcGxlciwgc19zYW1wbGVyU2l6ZSAqIHZfc291cmNlVGV4
Q29vcmQpOworICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICog
dV9vcGFjaXR5LCBjb2xvci5hICogdV9vcGFjaXR5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
KTsKIAotVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6On5UZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcigpCi17Ci19CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNpbXBsZSA9CisgICAg
ICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAgIHVuaWZvcm0gbWF0NCB1X21hdHJpeDsKKyAgICAg
ICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X2ZsaXA7CisgICAgICAgICAgICBhdHRyaWJ1dGUg
dmVjNCBhX3ZlcnRleDsKKyAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRl
eENvb3JkOworICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgdl9zb3VyY2VUZXhDb29yZCA9IHZlYzIoYV92ZXJ0ZXgueCwgbWl4KGFfdmVy
dGV4LnksIDEuIC0gYV92ZXJ0ZXgueSwgdV9mbGlwKSk7CisgICAgICAgICAgICAgICAgZ2xfUG9z
aXRpb24gPSB1X21hdHJpeCAqIGFfdmVydGV4OworICAgICAgICAgICAgfQorICAgICAgICApOwog
Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhT
b2xpZENvbG9yID0KKyAgICAgICAgU1RSSU5HSUZZKAorICAgICAgICAgICAgdW5pZm9ybSBtYXQ0
IHVfbWF0cml4OworICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CisgICAgICAg
ICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbF9Q
b3NpdGlvbiA9IHVfbWF0cml4ICogYV92ZXJ0ZXg7CisgICAgICAgICAgICB9CisgICAgICAgICk7
CiAKLS8vIENyZWF0ZSBhIG5vcm1hbCBkaXN0cmlidXRpb24gb2YgMjEgdmFsdWVzIGJldHdlZW4g
LTIgYW5kIDIuCi0jZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIIDExCi0jZGVmaW5l
IEdBVVNTSUFOX0tFUk5FTF9TVEVQIDAuMgogCi1TdGFuZGFyZEZpbHRlclByb2dyYW06On5TdGFu
ZGFyZEZpbHRlclByb2dyYW0oKQotewotICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKG1faWQs
IG1fdmVydGV4U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcihtX3ZlcnRleFNo
YWRlcik7Ci0gICAgbV9jb250ZXh0LT5kZXRhY2hTaGFkZXIobV9pZCwgbV9mcmFnbWVudFNoYWRl
cik7Ci0gICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7Ci0gICAg
bV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKG1faWQpOwotfQorICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBmcmFnbWVudFNvbGlkQ29sb3IgPQorICAgICAgICBTVFJJTkdJRlkoCisgICAgICAgICAgICBw
cmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKKyAgICAgICAgICAgIHVuaWZvcm0gdmVjNCB1X2NvbG9y
OworICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZ2xfRnJhZ0NvbG9yID0gdV9jb2xvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsK
IAotU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1
bnNpZ25lZCBwYXNzKQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX2lkKDApCi17
Ci0gICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlID0KLSAgICAgICAgICAgIFNUUklO
R0lGWSgKLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKLSAgICAgICAg
ICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3RleENvb3JkOwotICAgICAgICAgICAgICAgIHZhcnlp
bmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOwotICAgICAgICAgICAgICAgIHZvaWQgbWFpbih2b2lk
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdl90ZXhDb29yZCA9IHZl
YzIoYV90ZXhDb29yZCk7Ci0gICAgICAgICAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gYV92ZXJ0
ZXg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgKTsKLQotI2RlZmluZSBTVEFOREFS
RF9GSUxURVIoLi4uKSBcCi0gICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiJcCi0g
ICAgICAgICJ2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDtcbiJcCi0gICAgICAgICJ1bmlm
b3JtIGhpZ2hwIGZsb2F0IHVfYW1vdW50O1xuIlwKLSAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJE
IHVfdGV4dHVyZTtcbiJcCi0gICAgICAgICNfX1ZBX0FSR1NfXyBcCi0gICAgICAgICJ2b2lkIG1h
aW4odm9pZClcbiB7IGdsX0ZyYWdDb2xvciA9IHNoYWRlKHRleHR1cmUyRCh1X3RleHR1cmUsIHZf
dGV4Q29vcmQpKTsgfSIKLQotICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlID0g
MDsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVND
QUxFOgotICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4RmlsdGVyID0KKyAgICAgICAgU1RSSU5HSUZZKAor
ICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CisgICAgICAgICAgICBhdHRyaWJ1
dGUgdmVjNCBhX3RleENvb3JkOworICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4
Q29vcmQ7CisgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICB2X3RleENvb3JkID0gdmVjMihhX3RleENvb3JkKTsKKyAgICAgICAgICAgICAg
ICBnbF9Qb3NpdGlvbiA9IGFfdmVydGV4OworICAgICAgICAgICAgfQorICAgICAgICApOworCisg
ICAgI2RlZmluZSBTVEFOREFSRF9GSUxURVIoLi4uKSBcCisgICAgICAgICAgICAicHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7XG4iXAorICAgICAgICAgICAgInZhcnlpbmcgaGlnaHAgdmVjMiB2X3Rl
eENvb3JkO1xuIlwKKyAgICAgICAgICAgICJ1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfYW1vdW50O1xu
IlwKKyAgICAgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBsZXI7XG4iXAorICAgICAg
ICAgICAgI19fVkFfQVJHU19fIFwKKyAgICAgICAgICAgICJ2b2lkIG1haW4odm9pZClcbiB7IGds
X0ZyYWdDb2xvciA9IHNoYWRlKHRleHR1cmUyRChzX3NhbXBsZXIsIHZfdGV4Q29vcmQpKTsgfSIK
KworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudEdyYXlzY2FsZUZpbHRlciA9CisgICAg
ICAgIFNUQU5EQVJEX0ZJTFRFUigKICAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZl
YzQgY29sb3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgbG93cCBmbG9hdCBhbW91
bnQgPSAxLjAgLSB1X2Ftb3VudDsKQEAgLTQwOSw5ICsyODYsOSBAQCBTdGFuZGFyZEZpbHRlclBy
b2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwg
RmlsdGVyTwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLmEpOwogICAgICAgICAg
ICAgfQogICAgICAgICApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6U0VQSUE6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVS
KAorCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2VwaWFGaWx0ZXIgPQorICAgICAg
ICBTVEFOREFSRF9GSUxURVIoCiAgICAgICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0
IGNvbG9yKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgYW1vdW50
ID0gMS4wIC0gdV9hbW91bnQ7CkBAIC00MjEsOSArMjk4LDkgQEAgU3RhbmRhcmRGaWx0ZXJQcm9n
cmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEZp
bHRlck8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5hKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OlNBVFVSQVRFOgotICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRF
UigKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNhdHVyYXRlRmlsdGVyID0KKyAg
ICAgICAgU1RBTkRBUkRfRklMVEVSKAogICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3Ag
dmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdmVjNCgo
MC4yMTMgKyAwLjc4NyAqIHVfYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUgLSAwLjcxNSAqIHVf
YW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgLSAwLjA3MiAqIHVfYW1vdW50KSAqIGNvbG9yLmIs
CkBAIC00MzIsOSArMzA5LDkgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRl
clByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEZpbHRlck8KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2xvci5hKTsKICAgICAgICAgICAgIH0KICAgICAgICAgKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6Ci0gICAg
ICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAorCisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIGZyYWdtZW50SHVlUm90YXRlRmlsdGVyID0KKyAgICAgICAgU1RBTkRBUkRf
RklMVEVSKAogICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBoaWdocCBmbG9hdCBwaSA9IDMuMTQxNTkyNjUz
NTg5NzkzMjM4NDY7CkBAIC00NDYsNTggKzMyMyw2MiBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06
OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRmlsdGVy
TwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLmEpOwogICAgICAgICAgICAgfQog
ICAgICAgICApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5W
RVJUOgotICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKKwor
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudEludmVydEZpbHRlciA9CisgICAgICAgIFNU
QU5EQVJEX0ZJTFRFUigKICAgICAgICAgICAgIGxvd3AgZmxvYXQgaW52ZXJ0KGxvd3AgZmxvYXQg
bikgeyByZXR1cm4gKDEuMCAtIG4pICogdV9hbW91bnQgKyBuICogKDEuMCAtIHVfYW1vdW50KTsg
fQogICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdmVjNChpbnZlcnQoY29sb3IuciksIGludmVy
dChjb2xvci5nKSwgaW52ZXJ0KGNvbG9yLmIpLCBjb2xvci5hKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdI
VE5FU1M6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAor
CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50QnJpZ2h0bmVzc0ZpbHRlciA9CisgICAg
ICAgIFNUQU5EQVJEX0ZJTFRFUigKICAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZl
YzQgY29sb3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29s
b3IucmdiICogKDEuMCArIHVfYW1vdW50KSwgY29sb3IuYSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFT
VDoKLSAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVEFOREFSRF9GSUxURVIoCisKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRDb250cmFzdEZpbHRlciA9CisgICAgICAgIFNU
QU5EQVJEX0ZJTFRFUigKICAgICAgICAgICAgIGxvd3AgZmxvYXQgY29udHJhc3QobG93cCBmbG9h
dCBuKSB7IHJldHVybiAobiAtIDAuNSkgKiB1X2Ftb3VudCArIDAuNTsgfQogICAgICAgICAgICAg
bG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gdmVjNChjb250cmFzdChjb2xvci5yKSwgY29udHJhc3QoY29sb3IuZyks
IGNvbnRyYXN0KGNvbG9yLmIpLCBjb2xvci5hKTsKICAgICAgICAgICAgIH0KICAgICAgICAgKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAg
ICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAorCisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIGZyYWdtZW50T3BhY2l0eUZpbHRlciA9CisgICAgICAgIFNUQU5EQVJEX0ZJ
TFRFUigKICAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29sb3IuciwgY29sb3IuZywg
Y29sb3IuYiwgY29sb3IuYSAqIHVfYW1vdW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6Ci0gICAgICAg
IGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RSSU5HSUZZKAorCisjZGVmaW5lIEJMVVJfQ09OU1RB
TlRTICIjZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIIDExXG4jZGVmaW5lIEdBVVNT
SUFOX0tFUk5FTF9TVEVQIDAuMlxuIgorCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50
Qmx1ckZpbHRlciA9CisgICAgICAgIEJMVVJfQ09OU1RBTlRTCisgICAgICAgIFNUUklOR0lGWSgK
KyAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5vcm1hbCBkaXN0cmlidXRpb24gb2YgMjEgdmFsdWVz
IGJldHdlZW4gLTIgYW5kIDIuCiAgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsK
ICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOwogICAgICAgICAgICAg
dW5pZm9ybSBsb3dwIHZlYzIgdV9ibHVyUmFkaXVzOwotICAgICAgICAgICAgdW5pZm9ybSBzYW1w
bGVyMkQgdV90ZXh0dXJlOworICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zYW1wbGVy
OwogICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFOX0tF
Uk5FTF9IQUxGX1dJRFRIXTsKIAogICAgICAgICAgICAgbG93cCB2ZWM0IHNhbXBsZUNvbG9yKGZs
b2F0IHJhZGl1cykKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB2ZWMyIGNvb3JkID0g
dl90ZXhDb29yZCArIHJhZGl1cyAqIHVfYmx1clJhZGl1czsKLSAgICAgICAgICAgICAgICByZXR1
cm4gdGV4dHVyZTJEKHVfdGV4dHVyZSwgY29vcmQpICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNv
b3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGV4dHVyZTJEKHNfc2FtcGxlciwgY29vcmQpICogZmxvYXQoY29vcmQueCA+
IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgdmVjNCBibHVyKCkKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICB2ZWM0IHRvdGFsID0gc2FtcGxlQ29sb3IoMCkgKiB1X2dhdXNzaWFuS2Vy
bmVsWzBdOworICAgICAgICAgICAgICAgIHZlYzQgdG90YWwgPSBzYW1wbGVDb2xvcigwLikgKiB1
X2dhdXNzaWFuS2VybmVsWzBdOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwg
R0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICB0
b3RhbCArPSBzYW1wbGVDb2xvcihmbG9hdChpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVf
Z2F1c3NpYW5LZXJuZWxbaV07CiAgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUNv
bG9yKGZsb2F0KC0xICogaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2Vy
bmVsW2ldOwpAQCAtNTExLDI4MiArMzkyLDEzMCBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0
YW5kYXJkRmlsdGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRmlsdGVyTwog
ICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IGJsdXIoKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1Bf
U0hBRE9XOgotICAgICAgICBzd2l0Y2ggKHBhc3MpIHsKLSAgICAgICAgY2FzZSAwOiB7Ci0gICAg
ICAgICAgICAvLyBGaXJzdCBwYXNzOiBob3Jpem9udGFsIGFscGhhIGJsdXIuCi0gICAgICAgICAg
ICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUUklOR0lGWSgKLSAgICAgICAgICAgICAgICBwcmVj
aXNpb24gbWVkaXVtcCBmbG9hdDsKLSAgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIg
dl90ZXhDb29yZDsKLSAgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9zaGFkb3dC
bHVyUmFkaXVzOwotICAgICAgICAgICAgICAgIHVuaWZvcm0gbG93cCB2ZWMyIHVfc2hhZG93T2Zm
c2V0OwotICAgICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTsKLSAgICAg
ICAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZ2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVM
X0hBTEZfV0lEVEhdOwotCi0gICAgICAgICAgICAgICAgbG93cCBmbG9hdCBzYW1wbGVBbHBoYShm
bG9hdCByYWRpdXMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2ZWMy
IGNvb3JkID0gdl90ZXhDb29yZCAtIHVfc2hhZG93T2Zmc2V0ICsgdmVjMihyYWRpdXMgKiB1X3No
YWRvd0JsdXJSYWRpdXMsIDAuKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHR1cmUy
RCh1X3RleHR1cmUsIGNvb3JkKS5hICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3JkLnkgPiAw
LiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBsb3dwIGZsb2F0IHNoYWRvd0JsdXJIb3Jpem9udGFsKCkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IHRvdGFsID0gc2FtcGxlQWxw
aGEoMCkgKiB1X2dhdXNzaWFuS2VybmVsWzBdOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKyspIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhhKGZsb2F0KGkpICogR0FVU1NJQU5f
S0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRvdGFsICs9IHNhbXBsZUFscGhhKGZsb2F0KC0xICogaSkgKiBHQVVTU0lBTl9LRVJORUxf
U1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwotICAgICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsOwotICAgICAgICAgICAgICAgIH0KKyAgICBz
dGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkb3dGaWx0ZXIxID0KKyAgICAgICAgQkxVUl9D
T05TVEFOVFMKKyAgICAgICAgU1RSSU5HSUZZKAorICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1
bXAgZmxvYXQ7CisgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKKyAg
ICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X2JsdXJSYWRpdXM7CisgICAgICAgICAgICB1
bmlmb3JtIGxvd3AgdmVjMiB1X3NoYWRvd09mZnNldDsKKyAgICAgICAgICAgIHVuaWZvcm0gc2Ft
cGxlcjJEIHNfc2FtcGxlcjsKKyAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9nYXVzc2lhbktl
cm5lbFtHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSF07CiAKLSAgICAgICAgICAgICAgICB2b2lk
IG1haW4odm9pZCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGdsX0Zy
YWdDb2xvciA9IHZlYzQoMS4sIDEuLCAxLiwgMS4pICogc2hhZG93Qmx1ckhvcml6b250YWwoKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICApOwotICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBsb3dwIGZsb2F0IHNhbXBsZUFscGhhKGZsb2F0IHJhZGl1cykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90ZXhDb29yZCAtIHVfc2hhZG93
T2Zmc2V0ICsgdmVjMihyYWRpdXMgKiB1X2JsdXJSYWRpdXMsIDAuKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdGV4dHVyZTJEKHNfc2FtcGxlciwgY29vcmQpLmEgKiBmbG9hdChjb29yZC54ID4g
MC4gJiYgY29vcmQueSA+IDAuICYmIGNvb3JkLnggPCAxLiAmJiBjb29yZC55IDwgMS4pOwogICAg
ICAgICAgICAgfQotICAgICAgICBjYXNlIDE6IHsKLSAgICAgICAgICAgIC8vIFNlY29uZCBwYXNz
OiB2ZXJ0aWNhbCBhbHBoYSBibHVyIGFuZCBjb21wb3NpdGUgd2l0aCBvcmlnaW4uCi0gICAgICAg
ICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUUklOR0lGWSgKLSAgICAgICAgICAgICAgICBw
cmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSAgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZl
YzIgdl90ZXhDb29yZDsKLSAgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9zaGFk
b3dCbHVyUmFkaXVzOwotICAgICAgICAgICAgICAgIHVuaWZvcm0gbG93cCB2ZWM0IHVfc2hhZG93
Q29sb3I7Ci0gICAgICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlOwotICAg
ICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVfY29udGVudFRleHR1cmU7Ci0gICAgICAg
ICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFOX0tFUk5FTF9I
QUxGX1dJRFRIXTsKLQotICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgc2FtcGxlQWxwaGEoZmxv
YXQgcikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZlYzIgY29vcmQg
PSB2X3RleENvb3JkICsgdmVjMigwLiwgciAqIHVfc2hhZG93Qmx1clJhZGl1cyk7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlMkQodV90ZXh0dXJlLCBjb29yZCkuYSAqIGZsb2F0
KGNvb3JkLnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkg
PCAxLik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbG93cCBmbG9hdCBz
aGFkb3dCbHVyVmVydGljYWwoKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgdG90YWwgPSBzYW1wbGVBbHBoYSgwKSAqIHVfZ2F1c3NpYW5LZXJuZWxbMF07Ci0g
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgR0FVU1NJQU5fS0VSTkVMX0hB
TEZfV0lEVEg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxl
QWxwaGEoZmxvYXQoaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVs
W2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQo
LTEgKiBpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07Ci0g
ICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG90YWw7
CisgICAgICAgICAgICBsb3dwIGZsb2F0IHNoYWRvd0JsdXJIb3Jpem9udGFsKCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBmbG9hdCB0b3RhbCA9IHNhbXBsZUFscGhhKDAuKSAqIHVf
Z2F1c3NpYW5LZXJuZWxbMF07CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBH
QVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRv
dGFsICs9IHNhbXBsZUFscGhhKGZsb2F0KGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9n
YXVzc2lhbktlcm5lbFtpXTsKKyAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxw
aGEoZmxvYXQoLTEgKiBpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJu
ZWxbaV07CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgbG93cCB2ZWM0IHNv
dXJjZU92ZXIobG93cCB2ZWM0IHNvdXJjZSwgbG93cCB2ZWM0IGRlc3RpbmF0aW9uKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ29tcG9zaXRlIHRoZSBzaGFkb3cg
d2l0aCB0aGUgb3JpZ2luYWwgdGV4dHVyZS4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNv
dXJjZSArIGRlc3RpbmF0aW9uICogKDEuIC0gc291cmNlLmEpOwotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICByZXR1cm4gdG90YWw7CisgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGdsX0ZyYWdDb2xvciA9IHNvdXJjZU92ZXIodGV4dHVyZTJEKHVfY29udGVudFRleHR1
cmUsIHZfdGV4Q29vcmQpLCBzaGFkb3dCbHVyVmVydGljYWwoKSAqIHVfc2hhZG93Q29sb3IpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4sIDEuLCAxLiwgMS4pICogc2hhZG93Qmx1ckhvcml6b250
YWwoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgICAgICApOwogCi0gICAgaWYgKCFm
cmFnbWVudFNoYWRlclNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotICAgIFBsYXRmb3JtM0RPYmpl
Y3QgdmVydGV4U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OlZFUlRFWF9TSEFERVIpOwotICAgIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIg
PSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hB
REVSKTsKLSAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIHZlcnRleFNo
YWRlclNvdXJjZSk7Ci0gICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIs
IGZyYWdtZW50U2hhZGVyU291cmNlKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW1JRCA9
IG1fY29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOwotICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRl
cih2ZXJ0ZXhTaGFkZXIpOwotICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihmcmFnbWVudFNo
YWRlcik7Ci0jaWYgIUxPR19ESVNBQkxFRAotICAgIFN0cmluZyBsb2c7Ci0gICAgbV9jb250ZXh0
LT5nZXRTaGFkZXJJbmZvTG9nKGZyYWdtZW50U2hhZGVyKTsKLSAgICBXVEZMb2coJkxvZ0NvbXBv
c2l0aW5nLCAiJXNcbiIsIGxvZy5hc2NpaSgpLmRhdGEoKSk7Ci0jZW5kaWYKLSAgICBtX2NvbnRl
eHQtPmF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIHZlcnRleFNoYWRlcik7Ci0gICAgbV9jb250ZXh0
LT5hdHRhY2hTaGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNoYWRlcik7Ci0gICAgbV9jb250ZXh0
LT5saW5rUHJvZ3JhbShwcm9ncmFtSUQpOwotCi0gICAgbV92ZXJ0ZXhBdHRyaWIgPSBtX2NvbnRl
eHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgImFfdmVydGV4Iik7Ci0gICAgbV90ZXhD
b29yZEF0dHJpYiA9IG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiYV90
ZXhDb29yZCIpOwotICAgIG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0
VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfdGV4dHVyZSIpOwotICAgIHN3aXRjaCAodHlw
ZSkgewotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6Ci0gICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OlNFUElBOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToK
LSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKLSAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6SU5WRVJUOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgot
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKLSAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6T1BBQ0lUWToKLSAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCA9IG1fY29u
dGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfYW1vdW50Iik7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgotICAgICAgICBtX3VuaWZv
cm1Mb2NhdGlvbnMuYmx1ci5yYWRpdXMgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtSUQsICJ1X2JsdXJSYWRpdXMiKTsKLSAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLmJs
dXIuZ2F1c3NpYW5LZXJuZWwgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFt
SUQsICJ1X2dhdXNzaWFuS2VybmVsIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKLSAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRv
dy5ibHVyUmFkaXVzID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAi
dV9zaGFkb3dCbHVyUmFkaXVzIik7Ci0gICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cu
Z2F1c3NpYW5LZXJuZWwgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQs
ICJ1X2dhdXNzaWFuS2VybmVsIik7Ci0gICAgICAgIGlmICghcGFzcykKLSAgICAgICAgICAgIG1f
dW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cub2Zmc2V0ID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9j
YXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dPZmZzZXQiKTsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIGNvbG9yIGFuZCB0aGUgY29udGVudCB0ZXh0dXJl
IGluIHRoZSBzZWNvbmQgcGFzcywgdGhlIGZpcnN0IHBhc3MgaXMgb25seSBhIGhvcml6b250YWwg
YWxwaGEgYmx1ci4KLSAgICAgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29sb3Ig
PSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X3NoYWRvd0NvbG9y
Iik7Ci0gICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbnRlbnRUZXh0dXJl
ID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9jb250ZW50VGV4
dHVyZSIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBtX2lkID0gcHJvZ3JhbUlEOwotICAgIG1fdmVydGV4U2hhZGVy
ID0gdmVydGV4U2hhZGVyOwotICAgIG1fZnJhZ21lbnRTaGFkZXIgPSBmcmFnbWVudFNoYWRlcjsK
LX0KKyAgICAvLyBTZWNvbmQgcGFzczogdmVydGljYWwgYWxwaGEgYmx1ciBhbmQgY29tcG9zaXRl
IHdpdGggb3JpZ2luLgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRvd0ZpbHRl
cjIgPQorICAgICAgICBCTFVSX0NPTlNUQU5UUworICAgICAgICBTVFJJTkdJRlkoCisgICAgICAg
ICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKKyAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAg
dmVjMiB2X3RleENvb3JkOworICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfYmx1clJh
ZGl1czsKKyAgICAgICAgICAgIHVuaWZvcm0gbG93cCB2ZWM0IHVfc2hhZG93Q29sb3I7CisgICAg
ICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBsZXI7CisgICAgICAgICAgICB1bmlmb3Jt
IHNhbXBsZXIyRCBzX2NvbnRlbnRUZXh0dXJlOworICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1
X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsKIAotUGFzc1JlZlB0
cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUg
dHlwZSwgdW5zaWduZWQgcGFzcykKLXsKLSAgICBSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFt
PiBwcm9ncmFtID0gYWRvcHRSZWYobmV3IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbShjb250ZXh0LCB0
eXBlLCBwYXNzKSk7Ci0gICAgaWYgKCFwcm9ncmFtLT5tX2lkKQotICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgIGxvd3AgZmxvYXQgc2FtcGxlQWxwaGEoZmxvYXQgcikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90ZXhDb29yZCArIHZlYzIoMC4sIHIg
KiB1X2JsdXJSYWRpdXMpOworICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlMkQoc19zYW1w
bGVyLCBjb29yZCkuYSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29v
cmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7CisgICAgICAgICAgICB9CiAKLSAgICByZXR1cm4g
cHJvZ3JhbTsKLX0KKyAgICAgICAgICAgIGxvd3AgZmxvYXQgc2hhZG93Qmx1clZlcnRpY2FsKCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmbG9hdCB0b3RhbCA9IHNhbXBsZUFscGhh
KDAuKSAqIHVfZ2F1c3NpYW5LZXJuZWxbMF07CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhhKGZsb2F0KGkpICogR0FVU1NJQU5fS0VSTkVMX1NU
RVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKKyAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0g
c2FtcGxlQWxwaGEoZmxvYXQoLTEgKiBpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1
c3NpYW5LZXJuZWxbaV07CisgICAgICAgICAgICAgICAgfQogCi1zdGF0aWMgaW5saW5lIGZsb2F0
IGdhdXNzKGZsb2F0IHgpCi17Ci0gICAgcmV0dXJuIGV4cCgtKHggKiB4KSAvIDIuKTsKLX0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gdG90YWw7CisgICAgICAgICAgICB9CiAKLXN0YXRpYyBmbG9h
dCogZ2F1c3NpYW5LZXJuZWwoKQotewotICAgIHN0YXRpYyBib29sIHByZXBhcmVkID0gZmFsc2U7
Ci0gICAgc3RhdGljIGZsb2F0IGtlcm5lbFtHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSF0gPSB7
MCwgfTsKKyAgICAgICAgICAgIGxvd3AgdmVjNCBzb3VyY2VPdmVyKGxvd3AgdmVjNCBzb3VyY2Us
IGxvd3AgdmVjNCBkZXN0aW5hdGlvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAv
LyBDb21wb3NpdGUgdGhlIHNoYWRvdyB3aXRoIHRoZSBvcmlnaW5hbCB0ZXh0dXJlLgorICAgICAg
ICAgICAgICAgIHJldHVybiBzb3VyY2UgKyBkZXN0aW5hdGlvbiAqICgxLiAtIHNvdXJjZS5hKTsK
KyAgICAgICAgICAgIH0KIAotICAgIGlmIChwcmVwYXJlZCkKLSAgICAgICAgcmV0dXJuIGtlcm5l
bDsKKyAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGdsX0ZyYWdDb2xvciA9IHNvdXJjZU92ZXIodGV4dHVyZTJEKHNfY29udGVudFRleHR1
cmUsIHZfdGV4Q29vcmQpLCBzaGFkb3dCbHVyVmVydGljYWwoKSAqIHVfc2hhZG93Q29sb3IpOwor
ICAgICAgICAgICAgfQorICAgICAgICApOwogCi0gICAga2VybmVsWzBdID0gZ2F1c3MoMCk7Ci0g
ICAgZmxvYXQgc3VtID0ga2VybmVsWzBdOwotICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBH
QVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgKytpKSB7Ci0gICAgICAgIGtlcm5lbFtpXSA9IGdh
dXNzKGkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCk7Ci0gICAgICAgIHN1bSArPSAyICoga2VybmVs
W2ldOworICAgIGlmIChzcGVjcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3BlY3MucmVzaXplKFRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpMYXN0RmlsdGVyKTsKKyAgICAgICAgc3BlY3NbVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkRlZmF1bHRdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhTaW1w
bGUsIGZyYWdtZW50U2ltcGxlKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6OlNvbGlkQ29sb3JdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhTb2xpZENvbG9yLCBmcmFnbWVu
dFNvbGlkQ29sb3IpOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6
UmVjdF0gPSBTaGFkZXJTcGVjKHZlcnRleFNpbXBsZSwgZnJhZ21lbnRSZWN0U2ltcGxlKTsKKyAg
ICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok1hc2tlZF0gPSBTaGFkZXJT
cGVjKHZlcnRleE9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudE9wYWNpdHlBbmRNYXNrKTsKKyAgICAg
ICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok1hc2tlZFJlY3RdID0gU2hhZGVy
U3BlYyh2ZXJ0ZXhPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRSZWN0T3BhY2l0eUFuZE1hc2spOwor
ICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QW50aWFsaWFzZWRdID0g
U2hhZGVyU3BlYyh2ZXJ0ZXhTaW1wbGUsIGZyYWdtZW50QW50aWFsaWFzaW5nTm9NYXNrKTsKKyAg
ICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkdyYXlzY2FsZUZpbHRlcl0g
PSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRHcmF5c2NhbGVGaWx0ZXIpOworICAg
ICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2VwaWFGaWx0ZXJdID0gU2hh
ZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50U2VwaWFGaWx0ZXIpOworICAgICAgICBzcGVj
c1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2F0dXJhdGVGaWx0ZXJdID0gU2hhZGVyU3Bl
Yyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50U2F0dXJhdGVGaWx0ZXIpOworICAgICAgICBzcGVjc1tU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6SHVlUm90YXRlRmlsdGVyXSA9IFNoYWRlclNwZWMo
dmVydGV4RmlsdGVyLCBmcmFnbWVudEh1ZVJvdGF0ZUZpbHRlcik7CisgICAgICAgIHNwZWNzW1Rl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpCcmlnaHRuZXNzRmlsdGVyXSA9IFNoYWRlclNwZWMo
dmVydGV4RmlsdGVyLCBmcmFnbWVudEJyaWdodG5lc3NGaWx0ZXIpOworICAgICAgICBzcGVjc1tU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Q29udHJhc3RGaWx0ZXJdID0gU2hhZGVyU3BlYyh2
ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50Q29udHJhc3RGaWx0ZXIpOworICAgICAgICBzcGVjc1tUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6SW52ZXJ0RmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4
RmlsdGVyLCBmcmFnbWVudEludmVydEZpbHRlcik7CisgICAgICAgIHNwZWNzW1RleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5RmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVy
LCBmcmFnbWVudE9wYWNpdHlGaWx0ZXIpOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6Qmx1ckZpbHRlcl0gPSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21l
bnRCbHVyRmlsdGVyKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OlNoYWRvd0ZpbHRlclBhc3MxXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudFNo
YWRvd0ZpbHRlcjEpOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6
U2hhZG93RmlsdGVyUGFzczJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50U2hh
ZG93RmlsdGVyMik7CiAgICAgfQogCi0gICAgLy8gTm9ybWFsaXplIHRoZSBrZXJuZWwKLSAgICBm
bG9hdCBzY2FsZSA9IDEgLyBzdW07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdBVVNT
SUFOX0tFUk5FTF9IQUxGX1dJRFRIOyArK2kpCi0gICAgICAgIGtlcm5lbFtpXSAqPSBzY2FsZTsK
LQotICAgIHByZXBhcmVkID0gdHJ1ZTsKLSAgICByZXR1cm4ga2VybmVsOworICAgIEFTU0VSVChz
cGVjcy5zaXplKCkgPiBrZXkpOworICAgIFNoYWRlclNwZWMmIHNwZWMgPSBzcGVjc1trZXldOwor
ICAgIHZlcnRleCA9IHNwZWMudmVydGV4U2hhZGVyOworICAgIGZyYWdtZW50ID0gc3BlYy5mcmFn
bWVudFNoYWRlcjsKIH0KIAotdm9pZCBTdGFuZGFyZEZpbHRlclByb2dyYW06OnByZXBhcmUoY29u
c3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHBhc3MsIGNvbnN0IEludFNp
emUmIHNpemUsIEdDM0R1aW50IGNvbnRlbnRUZXh0dXJlKQorVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiB7Ci0gICAgbV9jb250ZXh0LT51c2VQcm9n
cmFtKG1faWQpOwotICAgIHN3aXRjaCAob3BlcmF0aW9uLmdldE9wZXJhdGlvblR5cGUoKSkgewot
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6Ci0gICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OlNFUElBOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKLSAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKLSAgICAgICAgbV9jb250ZXh0LT51bmlm
b3JtMWYobV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWND
b2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgotICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05U
UkFTVDoKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAgbV9jb250
ZXh0LT51bmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCwgc3RhdGljX2Nhc3Q8Y29u
c3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1v
dW50KCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjog
ewotICAgICAgICBjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyID0gc3RhdGljX2Nhc3Q8
Y29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbik7Ci0gICAgICAgIEZsb2F0U2l6
ZSByYWRpdXM7Ci0KLSAgICAgICAgLy8gQmx1ciBpcyBkb25lIGluIHR3byBwYXNzZXMsIGZpcnN0
IGhvcml6b250YWxseSBhbmQgdGhlbiB2ZXJ0aWNhbGx5LiBUaGUgc2FtZSBzaGFkZXIgaXMgdXNl
ZCBmb3IgYm90aC4KLSAgICAgICAgaWYgKHBhc3MpCi0gICAgICAgICAgICByYWRpdXMuc2V0SGVp
Z2h0KGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ci5zdGREZXZpYXRpb24oKSwgc2l6ZS5oZWlnaHQo
KSkgLyBzaXplLmhlaWdodCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmFkaXVzLnNl
dFdpZHRoKGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ci5zdGREZXZpYXRpb24oKSwgc2l6ZS53aWR0
aCgpKSAvIHNpemUud2lkdGgoKSk7Ci0KLSAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMmYobV91
bmlmb3JtTG9jYXRpb25zLmJsdXIucmFkaXVzLCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdo
dCgpKTsKLSAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5i
bHVyLmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5L
ZXJuZWwoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAgY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlv
biYgc2hhZG93ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiY+
KG9wZXJhdGlvbik7Ci0gICAgICAgIHN3aXRjaCAocGFzcykgewotICAgICAgICBjYXNlIDA6Ci0g
ICAgICAgICAgICAvLyBGaXJzdCBwYXNzOiB2ZXJ0aWNhbCBhbHBoYSBibHVyLgotICAgICAgICAg
ICAgbV9jb250ZXh0LT51bmlmb3JtMmYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5vZmZzZXQs
IGZsb2F0KHNoYWRvdy5sb2NhdGlvbigpLngoKSkgLyBmbG9hdChzaXplLndpZHRoKCkpLCBmbG9h
dChzaGFkb3cubG9jYXRpb24oKS55KCkpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOwotICAgICAg
ICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5ibHVy
UmFkaXVzLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLndpZHRoKCkpKTsKLSAg
ICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93
LmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJu
ZWwoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAg
Ly8gU2Vjb25kIHBhc3M6IHdlIG5lZWQgdGhlIHNoYWRvdyBjb2xvciBhbmQgdGhlIGNvbnRlbnQg
dGV4dHVyZSBmb3IgY29tcG9zaXRpbmcuCi0gICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0x
ZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmJsdXJSYWRpdXMsIHNoYWRvdy5zdGREZXZpYXRp
b24oKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+dW5p
Zm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNzaWFuS2VybmVsLCBHQVVTU0lB
Tl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7Ci0gICAgICAgICAgICBtX2Nv
bnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKTsKLSAgICAg
ICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIGNvbnRlbnRUZXh0dXJlKTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKG1f
dW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29udGVudFRleHR1cmUsIDEpOwotICAgICAgICAgICAg
ZmxvYXQgciwgZywgYiwgYTsKLSAgICAgICAgICAgIHNoYWRvdy5jb2xvcigpLmdldFJHQkEociwg
ZywgYiwgYSk7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm00ZihtX3VuaWZvcm1Mb2Nh
dGlvbnMuc2hhZG93LmNvbG9yLCByLCBnLCBiLCBhKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBicmVh
azsKLSAgICB9CiB9CiAKLVBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyRm9yRmlsdGVyKGNvbnN0IEZpbHRlck9wZXJh
dGlvbiYgZmlsdGVyLCB1bnNpZ25lZCBwYXNzKQorVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
On5UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpCiB7Ci0gICAgUmVmUHRyPFN0YW5kYXJkRmls
dGVyUHJvZ3JhbT4gcHJvZ3JhbTsKLSAgICBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUg
dHlwZSA9IGZpbHRlci5nZXRPcGVyYXRpb25UeXBlKCk7Ci0gICAgaW50IGtleSA9IGludCh0eXBl
KSB8IChwYXNzIDw8IDE2KTsKLSAgICBGaWx0ZXJNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9m
aWx0ZXJNYXAuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciA9PSBtX2ZpbHRlck1hcC5lbmQo
KSkgewotICAgICAgICBwcm9ncmFtID0gU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpjcmVhdGUobV9j
b250ZXh0LCB0eXBlLCBwYXNzKTsKLSAgICAgICAgaWYgKCFwcm9ncmFtKQotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICAgICAgbV9maWx0ZXJNYXAuYWRkKGtleSwgcHJvZ3JhbSk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIHByb2dyYW0gPSBpdGVyYXRvci0+c2Vjb25kOwotCi0gICAgcmV0dXJu
IHByb2dyYW07CiB9CiAKLXVuc2lnbmVkIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRQ
YXNzZXNSZXF1aXJlZEZvckZpbHRlcihjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbikg
Y29uc3QKK1Bhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9ncmFtKFNoYWRlcktleSBrZXkpCiB7Ci0gICAg
c3dpdGNoIChvcGVyYXRpb24uZ2V0T3BlcmF0aW9uVHlwZSgpKSB7Ci0gICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkdSQVlTQ0FMRToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6Ci0g
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpIVUVfUk9UQVRFOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6Ci0gICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkNPTlRSQVNUOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgotICAgICAg
ICByZXR1cm4gMTsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKLSAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6Ci0gICAgICAgIC8vIFdlIHVzZSB0d28tcGFzc2Vz
ICh2ZXJ0aWNhbCtob3Jpem9udGFsKSBmb3IgYmx1ciBhbmQgZHJvcC1zaGFkb3cuCi0gICAgICAg
IHJldHVybiAyOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Byb2dyYW1zLmZp
bmQoa2V5KTsKKyAgICBpZiAoaXQgIT0gbV9wcm9ncmFtcy5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IGl0LT5zZWNvbmQ7CiAKKyAgICBTdHJpbmcgdmVydGV4U2hhZGVyOworICAgIFN0cmluZyBmcmFn
bWVudFNoYWRlcjsKKyAgICBnZXRTaGFkZXJTcGVjKGtleSwgdmVydGV4U2hhZGVyLCBmcmFnbWVu
dFNoYWRlcik7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFt
ID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmNyZWF0ZShtX2NvbnRleHQsIHZlcnRleFNo
YWRlciwgZnJhZ21lbnRTaGFkZXIpOworICAgIG1fcHJvZ3JhbXMuYWRkKGtleSwgcHJvZ3JhbSk7
CisgICAgcmV0dXJuIHByb2dyYW07CiB9Ci0KLSNlbmRpZgogfTsKIAogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCmluZGV4IDFmZmI3MTAuLjZiOTZjOGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCkBAIC0yMSwyMzMgKzIxLDEw
MiBAQAogI2lmbmRlZiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcl9oCiAjZGVmaW5lIFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyX2gKIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaWYg
VVNFKFRFWFRVUkVfTUFQUEVSKQogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5j
bHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgotI2luY2x1ZGUg
IlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0jaW5jbHVk
ZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgotI2VuZGlmCisjaW5jbHVkZSA8U3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQml0bWFwVGV4dHVyZTsKLWNsYXNzIFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOworI2RlZmluZSBURVhNQVBfREVDTEFSRV9WQVJJQUJMRShBY2Nl
c3NvciwgTmFtZSwgVHlwZSkgR0MzRHVpbnQgQWNjZXNzb3IjI0xvY2F0aW9uKCkgeyByZXR1cm4g
Z2V0TG9jYXRpb24oTmFtZSwgVHlwZSk7IH0KKyNkZWZpbmUgVEVYTUFQX0RFQ0xBUkVfVU5JRk9S
TShBY2Nlc3NvcikgVEVYTUFQX0RFQ0xBUkVfVkFSSUFCTEUoQWNjZXNzb3IsICJ1XyIjQWNjZXNz
b3IsIFVuaWZvcm1WYXJpYWJsZSkKKyNkZWZpbmUgVEVYTUFQX0RFQ0xBUkVfQVRUUklCVVRFKEFj
Y2Vzc29yKSBURVhNQVBfREVDTEFSRV9WQVJJQUJMRShBY2Nlc3NvciwgImFfIiNBY2Nlc3Nvciwg
QXR0cmliVmFyaWFibGUpCisjZGVmaW5lIFRFWE1BUF9ERUNMQVJFX1NBTVBMRVIoQWNjZXNzb3Ip
IFRFWE1BUF9ERUNMQVJFX1ZBUklBQkxFKEFjY2Vzc29yLCAic18iI0FjY2Vzc29yLCBVbmlmb3Jt
VmFyaWFibGUpCiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIDogcHVibGljIFJl
ZkNvdW50ZWQ8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHsKIHB1YmxpYzoKLSAgICBQbGF0
Zm9ybTNET2JqZWN0IGlkKCkgeyByZXR1cm4gbV9pZDsgfQotICAgIEdDM0R1aW50IHZlcnRleEF0
dHJpYigpIHsgcmV0dXJuIG1fdmVydGV4QXR0cmliOyB9CisgICAgUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtSUQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisgICAgR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gY3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdmVydGV4LCBjb25zdCBTdHJpbmcm
IGZyYWdtZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXgsIGZyYWdtZW50KSk7CisgICAgfQogCi0g
ICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBj
aGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNl
KTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpOwogCi0gICAgdmly
dHVhbCB2b2lkIHByZXBhcmUoZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSopIHsg
fQotICAgIEdDM0RpbnQgbWF0cml4TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hdHJpeExv
Y2F0aW9uOyB9Ci0gICAgR0MzRGludCBmbGlwTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Zs
aXBMb2NhdGlvbjsgfQotICAgIEdDM0RpbnQgdGV4dHVyZVNpemVMb2NhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fdGV4dHVyZVNpemVMb2NhdGlvbjsgfQotICAgIEdDM0RpbnQgc291cmNlVGV4dHVy
ZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VUZXh0dXJlTG9jYXRpb247IH0KLSAg
ICBHQzNEaW50IG1hc2tUZXh0dXJlTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hc2tUZXh0
dXJlTG9jYXRpb247IH0KLSAgICBHQzNEaW50IG9wYWNpdHlMb2NhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fb3BhY2l0eUxvY2F0aW9uOyB9Ci0KLSAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkVW5pZm9y
bUxvY2F0aW9uKEdDM0RpbnQgbG9jYXRpb24pIHsgcmV0dXJuIGxvY2F0aW9uID49IDA7IH0KLQot
cHJvdGVjdGVkOgotICAgIHZvaWQgZ2V0VW5pZm9ybUxvY2F0aW9uKEdDM0RpbnQmIHZhciwgY29u
c3QgY2hhciogbmFtZSk7Ci0gICAgdm9pZCBpbml0aWFsaXplUHJvZ3JhbSgpOwotICAgIHZpcnR1
YWwgdm9pZCBpbml0aWFsaXplKCkgeyB9Ci0gICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291
cmNlKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhTaGFkZXJTb3VyY2UuZGF0YSgpOyB9Ci0gICAg
Y29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2ZyYWdt
ZW50U2hhZGVyU291cmNlLmRhdGEoKTsgfQorICAgIFRFWE1BUF9ERUNMQVJFX0FUVFJJQlVURSh2
ZXJ0ZXgpCisgICAgVEVYTUFQX0RFQ0xBUkVfQVRUUklCVVRFKHRleENvb3JkKQogCi0gICAgR3Jh
cGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1faWQ7Ci0g
ICAgR0MzRHVpbnQgbV92ZXJ0ZXhBdHRyaWI7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX3ZlcnRl
eFNoYWRlcjsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZnJhZ21lbnRTaGFkZXI7Ci0gICAgR0Mz
RGludCBtX21hdHJpeExvY2F0aW9uOwotICAgIEdDM0RpbnQgbV9mbGlwTG9jYXRpb247Ci0gICAg
R0MzRGludCBtX3RleHR1cmVTaXplTG9jYXRpb247Ci0gICAgR0MzRGludCBtX3NvdXJjZVRleHR1
cmVMb2NhdGlvbjsKLSAgICBHQzNEaW50IG1fb3BhY2l0eUxvY2F0aW9uOwotICAgIEdDM0RpbnQg
bV9tYXNrVGV4dHVyZUxvY2F0aW9uOwotCi1wcml2YXRlOgotICAgIENTdHJpbmcgbV92ZXJ0ZXhT
aGFkZXJTb3VyY2U7Ci0gICAgQ1N0cmluZyBtX2ZyYWdtZW50U2hhZGVyU291cmNlOwotfTsKKyAg
ICBURVhNQVBfREVDTEFSRV9VTklGT1JNKG1hdHJpeCkKKyAgICBURVhNQVBfREVDTEFSRV9VTklG
T1JNKGZsaXApCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STSh0ZXh0dXJlU2l6ZSkKKyAgICBU
RVhNQVBfREVDTEFSRV9VTklGT1JNKG9wYWNpdHkpCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9S
TShjb2xvcikKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKGV4cGFuZGVkUXVhZEVkZ2VzSW5T
Y3JlZW5TcGFjZSkKKyAgICBURVhNQVBfREVDTEFSRV9TQU1QTEVSKHNhbXBsZXIpCisgICAgVEVY
TUFQX0RFQ0xBUkVfU0FNUExFUihtYXNrKQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQotY2xh
c3MgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtIDogcHVibGljIFJlZkNvdW50ZWQ8U3RhbmRhcmRGaWx0
ZXJQcm9ncmFtPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+U3RhbmRhcmRGaWx0ZXJQcm9ncmFt
KCk7Ci0gICAgdmlydHVhbCB2b2lkIHByZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiwgdW5z
aWduZWQgcGFzcywgY29uc3QgSW50U2l6ZSYsIEdDM0R1aW50IGNvbnRlbnRUZXh0dXJlKTsKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IGNyZWF0ZShHcmFwaGlj
c0NvbnRleHQzRCosIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgcGFz
cyk7Ci0gICAgR0MzRHVpbnQgdmVydGV4QXR0cmliKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhB
dHRyaWI7IH0KLSAgICBHQzNEdWludCB0ZXhDb29yZEF0dHJpYigpIGNvbnN0IHsgcmV0dXJuIG1f
dGV4Q29vcmRBdHRyaWI7IH0KLSAgICBHQzNEdWludCB0ZXh0dXJlVW5pZm9ybSgpIGNvbnN0IHsg
cmV0dXJuIG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlvbjsgfQotcHJvdGVjdGVkOgotICAgIEdyYXBo
aWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7Ci1wcml2YXRlOgotICAgIFN0YW5kYXJkRmlsdGVyUHJv
Z3JhbSgpOwotICAgIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCosIEZp
bHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgcGFzcyk7Ci0gICAgUGxhdGZv
cm0zRE9iamVjdCBtX2lkOwotICAgIFBsYXRmb3JtM0RPYmplY3QgbV92ZXJ0ZXhTaGFkZXI7Ci0g
ICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZyYWdtZW50U2hhZGVyOwotICAgIEdDM0R1aW50IG1fdmVy
dGV4QXR0cmliOwotICAgIEdDM0R1aW50IG1fdGV4Q29vcmRBdHRyaWI7Ci0gICAgR0MzRHVpbnQg
bV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uOwotICAgIHVuaW9uIHsKLSAgICAgICAgR0MzRHVpbnQg
YW1vdW50OwotCi0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBHQzNEdWludCByYWRpdXM7
Ci0gICAgICAgICAgICBHQzNEdWludCBnYXVzc2lhbktlcm5lbDsKLSAgICAgICAgfSBibHVyOwot
Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBHQzNEdWludCBibHVyUmFkaXVzOwotICAg
ICAgICAgICAgR0MzRHVpbnQgY29sb3I7Ci0gICAgICAgICAgICBHQzNEdWludCBvZmZzZXQ7Ci0g
ICAgICAgICAgICBHQzNEdWludCBjb250ZW50VGV4dHVyZTsKLSAgICAgICAgICAgIEdDM0R1aW50
IGdhdXNzaWFuS2VybmVsOwotICAgICAgICB9IHNoYWRvdzsKLSAgICB9IG1fdW5pZm9ybUxvY2F0
aW9uczsKLX07CisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShhbW91bnQpCisgICAgVEVYTUFQ
X0RFQ0xBUkVfVU5JRk9STShnYXVzc2lhbktlcm5lbCkKKyAgICBURVhNQVBfREVDTEFSRV9VTklG
T1JNKGJsdXJSYWRpdXMpCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShzaGFkb3dDb2xvcikK
KyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKHNoYWRvd09mZnNldCkKKyAgICBURVhNQVBfREVD
TEFSRV9TQU1QTEVSKGNvbnRlbnRUZXh0dXJlKQogI2VuZGlmCiAKLWNsYXNzIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtU2ltcGxlIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVNpbXBsZT4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBs
ZShjb250ZXh0KSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1TaW1wbGUoR3JhcGhpY3NDb250ZXh0M0QqKTsKLXByaXZhdGU6Ci0gICAgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKTsKLX07Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtUmVjdFNpbXBsZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1SZWN0U2ltcGxlPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
UmVjdFNpbXBsZShjb250ZXh0KSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlKEdyYXBoaWNzQ29udGV4dDNEKik7CiBwcml2YXRl
OgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSgpOwotfTsKLQotY2xh
c3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayA6IHB1YmxpYyBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaz4gY3JlYXRlKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKGNvbnRleHQpKTsKLSAgICB9
Ci0KLXByb3RlY3RlZDoKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRN
YXNrKEdyYXBoaWNzQ29udGV4dDNEKik7Ci1wcml2YXRlOgotICAgIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soKTsKLX07Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaz4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayhjb250ZXh0KSk7Ci0gICAgfQotCi1wcm90
ZWN0ZWQ6Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2so
R3JhcGhpY3NDb250ZXh0M0QqKTsKLXByaXZhdGU6Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soKTsKLX07Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtU29saWRDb2xvciA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1Tb2xpZENvbG9yPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29s
aWRDb2xvcihjb250ZXh0KSk7Ci0gICAgfQotCi0gICAgR0MzRGludCBjb2xvckxvY2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2xvckxvY2F0aW9uOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoR3JhcGhpY3NDb250ZXh0M0QqKTsKLXBy
aXZhdGU6Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yKCk7Ci0gICAg
R0MzRGludCBtX2NvbG9yTG9jYXRpb247Ci19OwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2soY29udGV4dCkpOwotICAgIH0KLQotICAgIEdD
M0RpbnQgZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb29yZGluYXRlc0xvY2F0aW9uKCkg
eyByZXR1cm4gbV9leHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNvcmRpbmF0ZXNMb2NhdGlv
bjsgfQotICAgIEdDM0RpbnQgZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb24o
KSB7IHJldHVybiBtX2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uOyB9Cisg
ICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4sIGNvbnN0IFN0cmluZyYgdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBTdHJpbmcmIGZyYWdt
ZW50U2hhZGVyU291cmNlKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fdmVydGV4U2hhZGVyOwor
ICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mcmFnbWVudFNoYWRlcjsKIAotcHJvdGVjdGVkOgotICAg
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrKEdyYXBoaWNzQ29u
dGV4dDNEKik7Ci1wcml2YXRlOgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFs
aWFzaW5nTm9NYXNrKCk7CisgICAgZW51bSBWYXJpYWJsZVR5cGUgeyBVbmlmb3JtVmFyaWFibGUs
IEF0dHJpYlZhcmlhYmxlIH07CisgICAgR0MzRHVpbnQgZ2V0TG9jYXRpb24oY29uc3QgY2hhcios
IFZhcmlhYmxlVHlwZSk7CiAKLSAgICBHQzNEaW50IG1fZXhwYW5kZWRRdWFkVmVydGljZXNJblRl
eHR1cmVDb3JkaW5hdGVzTG9jYXRpb247Ci0gICAgR0MzRGludCBtX2V4cGFuZGVkUXVhZEVkZ2Vz
SW5TY3JlZW5TcGFjZUxvY2F0aW9uOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9j
b250ZXh0OworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9pZDsKKyAgICBIYXNoTWFwPGNvbnN0IGNo
YXIqLCBHQzNEdWludD4gbV92YXJpYWJsZXM7CiB9OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlciB7CiBwdWJsaWM6Ci0gICAgZW51bSBTaGFkZXJUeXBlIHsKLSAgICAgICAgSW52
YWxpZCA9IDAsIC8vIEhhc2hNYXBzIGRvIG5vdCBsaWtlIDAgYXMgYSBrZXkuCi0gICAgICAgIFNp
bXBsZSwKLSAgICAgICAgQW50aWFsaWFzaW5nTm9NYXNrLAotICAgICAgICBSZWN0U2ltcGxlLAot
ICAgICAgICBPcGFjaXR5QW5kTWFzaywKLSAgICAgICAgUmVjdE9wYWNpdHlBbmRNYXNrLAotICAg
ICAgICBTb2xpZENvbG9yCisgICAgZW51bSBTaGFkZXJLZXkgeworICAgICAgICBJbnZhbGlkID0g
MCwKKyAgICAgICAgRGVmYXVsdCwKKyAgICAgICAgUmVjdCwKKyAgICAgICAgTWFza2VkLAorICAg
ICAgICBNYXNrZWRSZWN0LAorICAgICAgICBTb2xpZENvbG9yLAorICAgICAgICBBbnRpYWxpYXNl
ZCwKKyAgICAgICAgR3JheXNjYWxlRmlsdGVyLAorICAgICAgICBTZXBpYUZpbHRlciwKKyAgICAg
ICAgU2F0dXJhdGVGaWx0ZXIsCisgICAgICAgIEh1ZVJvdGF0ZUZpbHRlciwKKyAgICAgICAgQnJp
Z2h0bmVzc0ZpbHRlciwKKyAgICAgICAgQ29udHJhc3RGaWx0ZXIsCisgICAgICAgIE9wYWNpdHlG
aWx0ZXIsCisgICAgICAgIEludmVydEZpbHRlciwKKyAgICAgICAgQmx1ckZpbHRlciwKKyAgICAg
ICAgU2hhZG93RmlsdGVyUGFzczEsCisgICAgICAgIFNoYWRvd0ZpbHRlclBhc3MyLAorICAgICAg
ICBMYXN0RmlsdGVyCiAgICAgfTsKIAogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCkg
eyB9CiAgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoR3JhcGhpY3NDb250ZXh0M0QqKTsK
ICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpOwogCi0jaWYgRU5BQkxF
KENTU19GSUxURVJTKQotICAgIHVuc2lnbmVkIGdldFBhc3Nlc1JlcXVpcmVkRm9yRmlsdGVyKGNv
bnN0IEZpbHRlck9wZXJhdGlvbiYpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0
ZXJQcm9ncmFtPiBnZXRTaGFkZXJGb3JGaWx0ZXIoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiwgdW5z
aWduZWQgcGFzcyk7Ci0jZW5kaWYKLQotICAgIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0+IGdldFNoYWRlclByb2dyYW0oU2hhZGVyVHlwZSk7Ci0gICAgUGFzc1JlZlB0cjxU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I+IHNvbGlkQ29sb3JQcm9ncmFtKCk7
Ci0gICAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05v
TWFzaz4gYW50aWFsaWFzaW5nTm9NYXNrUHJvZ3JhbSgpOworICAgIFBhc3NSZWZQdHI8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0+IGdldFNoYWRlclByb2dyYW0oU2hhZGVyS2V5KTsKIAogcHJp
dmF0ZToKLSAgICB0eXBlZGVmIEhhc2hNYXA8U2hhZGVyVHlwZSwgUmVmUHRyPFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtPiwgRGVmYXVsdEhhc2g8aW50Pjo6SGFzaCwgSGFzaFRyYWl0czxpbnQ+
ID4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA7Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1NYXAgbV90ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDsKLSAgICBHcmFwaGlj
c0NvbnRleHQzRCogbV9jb250ZXh0OwotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHR5
cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+ID4gRmlsdGVy
TWFwOwotICAgIEZpbHRlck1hcCBtX2ZpbHRlck1hcDsKLSNlbmRpZgorICAgIHR5cGVkZWYgSGFz
aE1hcDxTaGFkZXJLZXksIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4sIERlZmF1
bHRIYXNoPGludD46Okhhc2gsIEhhc2hUcmFpdHM8aW50PiA+IFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtTWFwOworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwIG1fcHJvZ3JhbXM7
CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CiB9OwogCiB9Ci0KICNl
bmRpZgogCiAjZW5kaWYgLy8gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXJfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167615</attachid>
            <date>2012-10-08 14:41:33 -0700</date>
            <delta_ts>2012-10-08 16:31:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>81008</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmNTE4MjliLi45Yzc2YTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjQg
QEAKKzIwMTItMTAtMDggIE5vYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29t
PgorCisgICAgICAgIFtUZXhtYXBdIFJlZmFjdG9yIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
IHRvIGJlIGNsZWFyZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTg2MDQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUHJldmlvdXMgaW1wbGVtZW50YXRpb24gb2YgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXIgd2FzIHZlcnkgdmVyYm9zZSwgY2FsbGluZyBmb3IgdG9vCisgICAgICAgIG1hbnkgY2FzdHMg
YW5kIGFtYmlndW91cyBvd25lcnNoaXAuCisgICAgICAgIFRoaXMgcmVmYWN0b3IgZG9lcyB0aGUg
Zm9sbG93aW5nOgorICAgICAgICAxLiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSBpcyBvbmUg
Y2xhc3Mgd2l0aG91dCBzdWJjbGFzc2VzLgorICAgICAgICAyLiBVbmlmb3JtL0F0dHJpYnV0ZSBh
Y2Nlc3NvcnMgYXJlIGdlbmVyYXRlZCBieSBzcGVjaWFsIG1hY3JvcyAoVEVYTUFQX0RFQ0xBUkVf
Li4uKSB0aGF0CisgICAgICAgICAgIGdlbmVyYXRlIGJvdGggdGhlIEMrKyBhY2Nlc3MgZnVuY3Rp
b24sIGFzIHdlbGwgYXMgdGhlIEdMU0wgbmFtZSBvZiB0aGUgdmFyaWFibGUuIFRoaXMKKyAgICAg
ICAgICAgYWxsb3dzIGFkZGluZy9yZW1vdmluZyB2YXJpYWJsZXMgZnJvbSBhIHNoYWRlciB3aXRo
b3V0IGFkZGluZyBicm9pbGVyLXBsYXRlIGNvZGUgbGlrZQorICAgICAgICAgICBiZWZvcmUuCisK
KyAgICAgICAgQWZ0ZXIgdGhpcyBjaGFuZ2UgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgaGFz
IG9ubHkgb25lIHJlc3BvbnNpYmlsaXR5IC0gZGVhbGluZyB3aXRoCisgICAgICAgIFRleHR1cmVN
YXBwZXJHTCdzIGJ1aWx0LWluIHNoYWRlcnMgYW5kIHRoZWlyIGxpZmVjeWNsZS4gUHJlcGFyaW5n
IGZpbHRlcnMgZXRjLiBpcyBkb25lCisgICAgICAgIGluIFRleHR1cmVNYXBwZXJHTC4KKworICAg
ICAgICBUaGlzIGlzIGEgcmVmYWN0b3Igd2l0aG91dCBuZXcgZnVuY3Rpb25hbGl0eS4gSXQgaGFz
IGJlZW4gdmVyaWZpZWQgdG8gbm90IGJyZWFrIGFueSBleGlzdGluZworICAgICAgICByZWxldmFu
dCB0ZXN0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3UXVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJCKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZWRRdWFkV2l0aFBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXApOgor
ICAgICAgICAgICAgVXNlIHRoZSBNQUNSTy1nZW5lcmF0ZWQgdW5pZm9ybSBhY2Nlc3NvcnMuCisK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6a2V5Rm9yRmlsdGVyVHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpnZXRQYXNzZXNSZXF1aXJlZEZvckZpbHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpnYXVzcyk6CisgICAgICAgIChXZWJDb3JlOjpnYXVzc2lhbktlcm5lbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpwcmVwYXJlRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdGaWx0ZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBUZXh0dXJlR0w6OmFwcGx5RmlsdGVycyk6CisgICAgICAgICAgICBNb3ZlIHRoZSBmaWx0ZXIg
bG9naWMgdG8gVGV4dHVyZU1hcHBlckdMCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpnZXRMb2NhdGlv
bik6CisgICAgICAgIChTaGFkZXJTcGVjKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRlclNwZWM6
OlNoYWRlclNwZWMpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U2hhZGVyU3BlYyk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
On5UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyUHJvZ3JhbSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
Ojpwcm9ncmFtSUQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OmNyZWF0ZSk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisgICAg
ICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcik6CisgICAgICAgICAgICBTZWUgZGVzY3Jp
cHRpb24uCisKIDIwMTItMTAtMDUgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBTVkcgcmFkaWFsR3JhZGllbnQgc2hvdWxkIHN1cHBvcnQgJ2ZyJyBmb3IgZm9jYWwg
cmFkaXVzIChqdXN0IGxpa2UgQ2FudmFzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCA4ZjBj
NjhkLi4yODM1ZDY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMjMsNiArMjMsNyBAQAog
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNs
dWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2lu
Y2x1ZGUgIlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIK
QEAgLTI2Niw3ICsyNjcsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZW5kUGFpbnRpbmcoKQog
CiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmIHF1YWRUb0Ry
YXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtKiBzaGFkZXJQcm9ncmFtLCBHQzNEZW51bSBkcmF3aW5nTW9kZSwg
Ym9vbCBuZWVkc0JsZW5kaW5nKQogewotICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0Qt
PmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkp
OwogICAgIG1fY29udGV4dDNELT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9C
VUZGRVIsIDApOwogCiAgICAgY29uc3QgR0MzRGZsb2F0IHF1YWRbXSA9IHsKQEAgLTI3NSw3ICsy
NzYsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmIHF1
YWRUb0RyYXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTQogICAgICAgICBxdWFkVG9EcmF3LnRhcmdl
dFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDMoKS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1h
cHBlZFRvVW5pdFNxdWFyZS5wMygpLnkoKSwKICAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0
TWFwcGVkVG9Vbml0U3F1YXJlLnA0KCkueCgpLCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRU
b1VuaXRTcXVhcmUucDQoKS55KCkKICAgICB9OwotICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRy
aWJQb2ludGVyKHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigpLCAyLCBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHF1YWQpKTsKKyAgICBtX2NvbnRleHQz
RC0+dmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCAy
LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHF1YWQpKTsK
IAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4
KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KS5tdWx0aXBseShtb2RlbFZpZXdNYXRyaXgpLm11bHRp
cGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4KAogICAgICAgICAgICAgcXVhZFRvRHJhdy5vcmlnaW5h
bFRhcmdldFJlY3Qud2lkdGgoKSwgMCwgMCwgMCwKQEAgLTI5Nyw3ICsyOTgsNyBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJHTDo6ZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmIHF1YWRUb0RyYXcsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTQogICAgICAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkQpOwogCiAgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMoZHJhd2luZ01v
ZGUsIDAsIDQpOwotICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoc2hh
ZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7CiB9CiAKIHZv
aWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQg
d2lkdGgsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1vZGVsVmlld01hdHJpeCkKQEAgLTMwNSwxNSArMzA2LDEyIEBAIHZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgd2lkdGgsIGNv
bnN0IEZsb2F0UmVjCiAgICAgaWYgKGNsaXBTdGFjaygpLmN1cnJlbnQoKS5zY2lzc29yQm94Lmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtU29saWRDb2xvcj4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5zb2xpZENvbG9yUHJvZ3JhbSgpOwotICAgIG1fY29udGV4
dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpTb2xpZENvbG9yKTsKKyAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5w
cm9ncmFtSUQoKSk7CiAKLSAgICBmbG9hdCBhbHBoYSA9IGNvbG9yLmFscGhhKCkgLyAyNTUuMDsK
LSAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgKGNvbG9yLnJlZCgpIC8gMjU1LjApICogYWxwaGEsCi0gICAg
ICAgICAgICAgICAgICAgICAgIChjb2xvci5ncmVlbigpIC8gMjU1LjApICogYWxwaGEsCi0gICAg
ICAgICAgICAgICAgICAgICAgIChjb2xvci5ibHVlKCkgLyAyNTUuMCkgKiBhbHBoYSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgYWxwaGEpOworICAgIGZsb2F0IHIsIGcsIGIsIGE7CisgICAgY29s
b3IuZ2V0UkdCQShyLCBnLCBiLCBhKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTRmKHByb2dy
YW0tPmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgbV9jb250ZXh0M0QtPmxpbmVX
aWR0aCh3aWR0aCk7CiAKICAgICBkcmF3UXVhZCh0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgs
IHByb2dyYW0uZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1AsIGNvbG9yLmhhc0Fs
cGhhKCkpOwpAQCAtMzY4LDI3ICszNjYsMjUgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdU
ZXh0dXJlUmVjdGFuZ2xlQVJCKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb24KIHsK
ICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW07CiAgICAgaWYg
KG1hc2tUZXh0dXJlKQotICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OlJlY3RPcGFjaXR5QW5kTWFzayk7CisgICAgICAgIHByb2dyYW0gPSBkYXRh
KCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJv
Z3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6TWFza2VkUmVjdCk7CiAgICAgZWxzZQot
ICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJl
Y3RTaW1wbGUpOwotICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOwor
ICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJl
Y3QpOworICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsK
IAotICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0
ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHBy
b2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwogICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgdGV4dHVyZSk7Ci0gICAgbV9jb250ZXh0M0Qt
PnVuaWZvcm0xaShwcm9ncmFtLT5zb3VyY2VUZXh0dXJlTG9jYXRpb24oKSwgMCk7CisgICAgbV9j
b250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5zYW1wbGVyTG9jYXRpb24oKSwgMCk7CiAKICAg
ICBtX2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPmZsaXBMb2NhdGlvbigpLCAhIShmbGFn
cyAmIFNob3VsZEZsaXBUZXh0dXJlKSk7CiAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0yZihwcm9n
cmFtLT50ZXh0dXJlU2l6ZUxvY2F0aW9uKCksIHRleHR1cmVTaXplLndpZHRoKCksIHRleHR1cmVT
aXplLmhlaWdodCgpKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPm9wYWNp
dHlMb2NhdGlvbigpLCBvcGFjaXR5KTsKIAotICAgIGlmIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSkp
Ci0gICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9u
KCksIG9wYWNpdHkpOwotCi0gICAgaWYgKG1hc2tUZXh0dXJlICYmIG1hc2tUZXh0dXJlLT5pc1Zh
bGlkKCkgJiYgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRp
b24ocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpKSkgeworICAgIGlmIChtYXNrVGV4dHVy
ZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpKSB7CiAgICAgICAgIGNvbnN0IEJpdG1hcFRleHR1
cmVHTCogbWFza1RleHR1cmVHTCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCo+
KG1hc2tUZXh0dXJlKTsKICAgICAgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkUxKTsKICAgICAgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtYXNrVGV4dHVyZUdMLT5pZCgpKTsKLSAg
ICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9u
KCksIDEpOworICAgICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPm1hc2tMb2Nh
dGlvbigpLCAxKTsKICAgICAgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkUwKTsKICAgICB9CiAKQEAgLTQwNSwxMCArNDAxLDEwIEBAIHZvaWQg
VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFn
cywgY29uc3QgSW50U2l6ZSYKIAogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bT4gcHJvZ3JhbTsKICAgICBpZiAobWFza1RleHR1cmUpCi0gICAgICAgIHByb2dyYW0gPSBkYXRh
KCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJv
Z3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3BhY2l0eUFuZE1hc2spOworICAgICAg
ICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok1hc2tlZCk7
CiAgICAgZWxzZQotICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OlNpbXBsZSk7Ci0gICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+
aWQoKSk7CisgICAgICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6RGVmYXVsdCk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJv
Z3JhbUlEKCkpOwogCiAgICAgZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKHByb2dyYW0uZ2V0
KCksIHRleHR1cmUsIGZsYWdzLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHks
IG1hc2tUZXh0dXJlKTsKIH0KQEAgLTUzNiw4ICs1MzIsOCBAQCBib29sIFRleHR1cmVNYXBwZXJH
TDo6ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZs
YWdzLAogICAgIHF1YWRUb0VkZ2VBcnJheShleHBhbmRlZFF1YWRJblNjcmVlblNwYWNlLCB0YXJn
ZXRRdWFkRWRnZXMpOwogICAgIHF1YWRUb0VkZ2VBcnJheShpbmZsYXRlUXVhZChxdWFkSW5TY3Jl
ZW5TcGFjZS5ib3VuZGluZ0JveCgpLCAgaW5mbGF0aW9uRGlzdGFuY2UpLCB0YXJnZXRRdWFkRWRn
ZXMgKyAxMik7CiAKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxp
YXNpbmdOb01hc2s+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuYW50aWFsaWFzaW5nTm9NYXNrUHJvZ3JhbSgpOwotICAgIG1fY29udGV4
dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpBbnRpYWxpYXNlZCk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+
cHJvZ3JhbUlEKCkpOwogICAgIG1fY29udGV4dDNELT51bmlmb3JtM2Z2KHByb2dyYW0tPmV4cGFu
ZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uKCksIDgsIHRhcmdldFF1YWRFZGdlcyk7
CiAKICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgdGV4dHVy
ZSwgZmxhZ3MsIERyYXdRdWFkKG9yaWdpbmFsVGFyZ2V0UmVjdCwgZXhwYW5kZWRRdWFkSW5UZXh0
dXJlQ29vcmRpbmF0ZXMpLCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIDAgLyogbWFza1RleHR1
cmUgKi8pOwpAQCAtNTQ2LDIxICs1NDIsMTkgQEAgYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdU
ZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywKIAog
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbSogcHJvZ3JhbSwgdWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxh
Z3MsIGNvbnN0IERyYXdRdWFkJiBxdWFkVG9EcmF3LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBt
YXNrVGV4dHVyZSkKIHsKLSAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXko
cHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKICAgICBtX2NvbnRleHQzRC0+
YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwogICAgIG1fY29udGV4
dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZSk7
Ci0gICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5zb3VyY2VUZXh0dXJlTG9jYXRp
b24oKSwgMCk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5zYW1wbGVyTG9j
YXRpb24oKSwgMCk7CiAKICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPmZsaXBM
b2NhdGlvbigpLCAhIShmbGFncyAmIFNob3VsZEZsaXBUZXh0dXJlKSk7CisgICAgbV9jb250ZXh0
M0QtPnVuaWZvcm0xZihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSwgb3BhY2l0eSk7CiAKLSAg
ICBpZiAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24o
cHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCkpKQotICAgICAgICBtX2NvbnRleHQzRC0+dW5pZm9y
bTFmKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpLCBvcGFjaXR5KTsKLQotICAgIGlmIChtYXNr
VGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpICYmIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjppc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRp
b24oKSkpIHsKKyAgICBpZiAobWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQoKSkg
ewogICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wqIG1hc2tUZXh0dXJlR0wgPSBzdGF0aWNf
Y2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wqPihtYXNrVGV4dHVyZSk7CiAgICAgICAgIG1fY29u
dGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSk7CiAgICAg
ICAgIG1fY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgbWFza1RleHR1cmVHTC0+aWQoKSk7Ci0gICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWko
cHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpLCAxKTsKKyAgICAgICAgbV9jb250ZXh0M0Qt
PnVuaWZvcm0xaShwcm9ncmFtLT5tYXNrTG9jYXRpb24oKSwgMSk7CiAgICAgICAgIG1fY29udGV4
dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgfQog
CkBAIC03MDksMjcgKzcwMywxNzAgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRl
bnRzKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY28KIH0KIAogI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKLXZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3RmlsdGVyZWQo
Y29uc3QgQml0bWFwVGV4dHVyZSYgc291cmNlVGV4dHVyZSwgY29uc3QgQml0bWFwVGV4dHVyZSYg
Y29udGVudFRleHR1cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgZmlsdGVyLCBpbnQgcGFzcykK
Kworc3RhdGljIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaGFkZXJLZXkga2V5Rm9yRmls
dGVyVHlwZShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFz
cykKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JB
WVNDQUxFOgorICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkdyYXlz
Y2FsZUZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgICAgIHJl
dHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2VwaWFGaWx0ZXI7CisgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgorICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OlNhdHVyYXRlRmlsdGVyOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpI
VUVfUk9UQVRFOgorICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Okh1
ZVJvdGF0ZUZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgorICAgICAg
ICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkludmVydEZpbHRlcjsKKyAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKKyAgICAgICAgcmV0dXJuIFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjpCcmlnaHRuZXNzRmlsdGVyOworICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpDT05UUkFTVDoKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpDb250cmFzdEZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToK
KyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5RmlsdGVy
OworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgorICAgICAgICByZXR1cm4gVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXI6OkJsdXJGaWx0ZXI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkRST1BfU0hBRE9XOgorICAgICAgICByZXR1cm4gcGFzcyA/IFRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyOjpTaGFkb3dGaWx0ZXJQYXNzMiA6IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpTaGFkb3dGaWx0ZXJQYXNzMTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXI6OkludmFsaWQ7CisgICAgfQorfQorCitzdGF0aWMgdW5zaWdu
ZWQgZ2V0UGFzc2VzUmVxdWlyZWRGb3JGaWx0ZXIoRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25U
eXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkdSQVlTQ0FMRToKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpI
VUVfUk9UQVRFOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CisgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNP
TlRSQVNUOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgorICAgICAgICByZXR1
cm4gMTsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKKyAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6RFJPUF9TSEFET1c6CisgICAgICAgIC8vIFdlIHVzZSB0d28tcGFzc2VzICh2ZXJ0
aWNhbCtob3Jpem9udGFsKSBmb3IgYmx1ciBhbmQgZHJvcC1zaGFkb3cuCisgICAgICAgIHJldHVy
biAyOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworLy8gQ3Jl
YXRlIGEgbm9ybWFsIGRpc3RyaWJ1dGlvbiBvZiAyMSB2YWx1ZXMgYmV0d2VlbiAtMiBhbmQgMi4K
KyNkZWZpbmUgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEggMTEKKyNkZWZpbmUgR0FVU1NJQU5f
S0VSTkVMX1NURVAgMC4yCisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgZ2F1c3MoZmxvYXQgeCkKK3sK
KyAgICByZXR1cm4gZXhwKC0oeCAqIHgpIC8gMi4pOworfQorCitzdGF0aWMgZmxvYXQqIGdhdXNz
aWFuS2VybmVsKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBwcmVwYXJlZCA9IGZhbHNlOworICAgIHN0
YXRpYyBmbG9hdCBrZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdID0gezAsIH07CisK
KyAgICBpZiAocHJlcGFyZWQpCisgICAgICAgIHJldHVybiBrZXJuZWw7CisKKyAgICBrZXJuZWxb
MF0gPSBnYXVzcygwKTsKKyAgICBmbG9hdCBzdW0gPSBrZXJuZWxbMF07CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyArK2kpIHsKKyAgICAg
ICAga2VybmVsW2ldID0gZ2F1c3MoaSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKTsKKyAgICAgICAg
c3VtICs9IDIgKiBrZXJuZWxbaV07CisgICAgfQorCisgICAgLy8gTm9ybWFsaXplIHRoZSBrZXJu
ZWwKKyAgICBmbG9hdCBzY2FsZSA9IDEgLyBzdW07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyArK2kpCisgICAgICAgIGtlcm5lbFtpXSAq
PSBzY2FsZTsKKworICAgIHByZXBhcmVkID0gdHJ1ZTsKKyAgICByZXR1cm4ga2VybmVsOworfQor
CitzdGF0aWMgdm9pZCBwcmVwYXJlRmlsdGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbSogcHJvZ3JhbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVk
IHBhc3MsIGNvbnN0IEludFNpemUmIHNpemUsIEdDM0R1aW50IGNvbnRlbnRUZXh0dXJlKQorewor
ICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IHByb2dyYW0tPmNvbnRleHQo
KTsKKyAgICBjb250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKKworICAg
IHN3aXRjaCAob3BlcmF0aW9uLmdldE9wZXJhdGlvblR5cGUoKSkgeworICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpHUkFZU0NBTEU6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgor
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKKyAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6SFVFX1JPVEFURToKKyAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPmFt
b3VudExvY2F0aW9uKCksIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJP
cGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJ
R0hUTkVTUzoKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CisgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6CisgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZihwcm9n
cmFtLT5hbW91bnRMb2NhdGlvbigpLCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7CisgICAgICAgIGNvbnN0IEJs
dXJGaWx0ZXJPcGVyYXRpb24mIGJsdXIgPSBzdGF0aWNfY2FzdDxjb25zdCBCbHVyRmlsdGVyT3Bl
cmF0aW9uJj4ob3BlcmF0aW9uKTsKKyAgICAgICAgRmxvYXRTaXplIHJhZGl1czsKKworICAgICAg
ICAvLyBCbHVyIGlzIGRvbmUgaW4gdHdvIHBhc3NlcywgZmlyc3QgaG9yaXpvbnRhbGx5IGFuZCB0
aGVuIHZlcnRpY2FsbHkuIFRoZSBzYW1lIHNoYWRlciBpcyB1c2VkIGZvciBib3RoLgorICAgICAg
ICBpZiAocGFzcykKKyAgICAgICAgICAgIHJhZGl1cy5zZXRIZWlnaHQoZmxvYXRWYWx1ZUZvckxl
bmd0aChibHVyLnN0ZERldmlhdGlvbigpLCBzaXplLmhlaWdodCgpKSAvIHNpemUuaGVpZ2h0KCkp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICByYWRpdXMuc2V0V2lkdGgoZmxvYXRWYWx1ZUZv
ckxlbmd0aChibHVyLnN0ZERldmlhdGlvbigpLCBzaXplLndpZHRoKCkpIC8gc2l6ZS53aWR0aCgp
KTsKKworICAgICAgICBjb250ZXh0LT51bmlmb3JtMmYocHJvZ3JhbS0+Ymx1clJhZGl1c0xvY2F0
aW9uKCksIHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpOworICAgICAgICBjb250ZXh0
LT51bmlmb3JtMWZ2KHByb2dyYW0tPmdhdXNzaWFuS2VybmVsTG9jYXRpb24oKSwgR0FVU1NJQU5f
S0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7CisgICAgICAgIGNv
bnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24mIHNoYWRvdyA9IHN0YXRpY19jYXN0PGNvbnN0
IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pOworICAgICAgICBjb250ZXh0
LT51bmlmb3JtMWZ2KHByb2dyYW0tPmdhdXNzaWFuS2VybmVsTG9jYXRpb24oKSwgR0FVU1NJQU5f
S0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOworICAgICAgICBzd2l0Y2ggKHBh
c3MpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgLy8gRmlyc3QgcGFzczogdmVydGlj
YWwgYWxwaGEgYmx1ci4KKyAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0yZihwcm9ncmFtLT5z
aGFkb3dPZmZzZXRMb2NhdGlvbigpLCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS54KCkpIC8gZmxv
YXQoc2l6ZS53aWR0aCgpKSwgZmxvYXQoc2hhZG93LmxvY2F0aW9uKCkueSgpKSAvIGZsb2F0KHNp
emUuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT5i
bHVyUmFkaXVzTG9jYXRpb24oKSwgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS53
aWR0aCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAg
ICAgLy8gU2Vjb25kIHBhc3M6IHdlIG5lZWQgdGhlIHNoYWRvdyBjb2xvciBhbmQgdGhlIGNvbnRl
bnQgdGV4dHVyZSBmb3IgY29tcG9zaXRpbmcuCisgICAgICAgICAgICBjb250ZXh0LT51bmlmb3Jt
MWYocHJvZ3JhbS0+Ymx1clJhZGl1c0xvY2F0aW9uKCksIHNoYWRvdy5zdGREZXZpYXRpb24oKSAv
IGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmFjdGl2ZVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmJp
bmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBjb250ZW50VGV4dHVyZSk7
CisgICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+Y29udGVudFRleHR1cmVM
b2NhdGlvbigpLCAxKTsKKyAgICAgICAgICAgIGZsb2F0IHIsIGcsIGIsIGE7CisgICAgICAgICAg
ICBzaGFkb3cuY29sb3IoKS5nZXRSR0JBKHIsIGcsIGIsIGEpOworICAgICAgICAgICAgY29udGV4
dC0+dW5pZm9ybTRmKHByb2dyYW0tPnNoYWRvd0NvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFRleHR1cmVNYXBw
ZXJHTDo6ZHJhd0ZpbHRlcmVkKGNvbnN0IEJpdG1hcFRleHR1cmUmIHNhbXBsZXIsIGNvbnN0IEJp
dG1hcFRleHR1cmUmIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIGZpbHRl
ciwgaW50IHBhc3MpCiB7CiAgICAgLy8gRm9yIHN0YW5kYXJkIGZpbHRlcnMsIHdlIGFsd2F5cyBk
cmF3IHRoZSB3aG9sZSB0ZXh0dXJlIHdpdGhvdXQgdHJhbnNmb3JtYXRpb25zLgotICAgIFJlZlB0
cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCku
dGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyRm9yRmlsdGVyKGZpbHRlciwgcGFz
cyk7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNoYWRlcktleSBrZXkgPSBrZXlG
b3JGaWx0ZXJUeXBlKGZpbHRlci5nZXRPcGVyYXRpb25UeXBlKCksIHBhc3MpOworICAgIFJlZlB0
cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERh
dGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKGtleSk7CiAg
ICAgQVNTRVJUKHByb2dyYW0pOwogCi0gICAgcHJvZ3JhbS0+cHJlcGFyZShmaWx0ZXIsIHBhc3Ms
IHNvdXJjZVRleHR1cmUuY29udGVudFNpemUoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4
dHVyZUdMJj4oY29udGVudFRleHR1cmUpLmlkKCkpOworICAgIHByZXBhcmVGaWx0ZXJQcm9ncmFt
KHByb2dyYW0uZ2V0KCksIGZpbHRlciwgcGFzcywgc2FtcGxlci5jb250ZW50U2l6ZSgpLCBzdGF0
aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihjb250ZW50VGV4dHVyZSkuaWQoKSk7CiAK
LSAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4
QXR0cmliKCkpOwotICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9n
cmFtLT50ZXhDb29yZEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0
cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7CisgICAgbV9jb250ZXh0M0QtPmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3JkTG9jYXRpb24oKSk7CiAgICAg
bV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsK
LSAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KHNvdXJjZVRleHR1cmUpLmlk
KCkpOwotICAgIG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+dGV4dHVyZVVuaWZvcm0o
KSwgMCk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihzYW1wbGVyKS5p
ZCgpKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPnNhbXBsZXJMb2NhdGlv
bigpLCAwKTsKICAgICBjb25zdCBHQzNEZmxvYXQgdGFyZ2V0VmVydGljZXNbXSA9IHstMSwgLTEs
IDEsIC0xLCAxLCAxLCAtMSwgMX07CiAgICAgY29uc3QgR0MzRGZsb2F0IHNvdXJjZVZlcnRpY2Vz
W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07Ci0gICAgbV9jb250ZXh0M0QtPnZlcnRleEF0
dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4QXR0cmliKCksIDIsIEdyYXBoaWNzQ29udGV4dDNE
OjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIodGFyZ2V0VmVydGljZXMpKTsKLSAgICBtX2Nv
bnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT50ZXhDb29yZEF0dHJpYigpLCAy
LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHNvdXJjZVZl
cnRpY2VzKSk7CisgICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+
dmVydGV4TG9jYXRpb24oKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwg
R0MzRGludHB0cih0YXJnZXRWZXJ0aWNlcykpOworICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRy
aWJQb2ludGVyKHByb2dyYW0tPnRleENvb3JkTG9jYXRpb24oKSwgMiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cihzb3VyY2VWZXJ0aWNlcykpOwogICAgIG1f
Y29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CiAgICAgbV9jb250
ZXh0M0QtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgNCk7
Ci0gICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0
ZXhBdHRyaWIoKSk7Ci0gICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShw
cm9ncmFtLT50ZXhDb29yZEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOworICAgIG1fY29udGV4dDNE
LT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dGV4Q29vcmRMb2NhdGlvbigpKTsK
IH0KIAogUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBCaXRtYXBUZXh0dXJlR0w6OmFwcGx5Rmls
dGVycyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBCaXRtYXBUZXh0dXJlJiBj
b250ZW50VGV4dHVyZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKQEAgLTc0Myw3
ICs4ODAsNyBAQCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IEJpdG1hcFRleHR1cmVHTDo6YXBw
bHlGaWx0ZXJzKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYQogICAgICAgICBjb25zdCBGaWx0ZXJP
cGVyYXRpb24qIGZpbHRlciA9IGZpbHRlcnMuYXQoaSk7CiAgICAgICAgIEFTU0VSVChmaWx0ZXIp
OwogCi0gICAgICAgIGludCBudW1QYXNzZXMgPSB0ZXh0dXJlTWFwcGVyR0wtPmRhdGEoKS5zaGFy
ZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRQYXNzZXNSZXF1aXJlZEZv
ckZpbHRlcigqZmlsdGVyKTsKKyAgICAgICAgaW50IG51bVBhc3NlcyA9IGdldFBhc3Nlc1JlcXVp
cmVkRm9yRmlsdGVyKGZpbHRlci0+Z2V0T3BlcmF0aW9uVHlwZSgpKTsKICAgICAgICAgZm9yIChp
bnQgaiA9IDA7IGogPCBudW1QYXNzZXM7ICsraikgewogICAgICAgICAgICAgdGV4dHVyZU1hcHBl
ckdMLT5iaW5kU3VyZmFjZSh0YXJnZXQuZ2V0KCkpOwogICAgICAgICAgICAgdGV4dHVyZU1hcHBl
ckdMLT5kcmF3RmlsdGVyZWQoKGkgfHwgaikgPyAqc291cmNlIDogY29udGVudFRleHR1cmUsIGNv
bnRlbnRUZXh0dXJlLCAqZmlsdGVyLCBqKTsKQEAgLTg5NCwxMiArMTAzMSwxMiBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2Rl
bFZpZXdNYXRyaXgsIGNvbgogCiAgICAgZGF0YSgpLmluaXRpYWxpemVTdGVuY2lsKCk7CiAKLSAg
ICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hh
cmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2ltcGxlKTsKKyAgICBSZWZQdHI8VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6RGVmYXVsdCk7CiAKLSAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFt
LT5pZCgpKTsKLSAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3Jh
bS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0t
PnByb2dyYW1JRCgpKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXko
cHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7CiAgICAgY29uc3QgR0MzRGZsb2F0IHVuaXRSZWN0
W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07Ci0gICAgbV9jb250ZXh0M0QtPnZlcnRleEF0
dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4QXR0cmliKCksIDIsIEdyYXBoaWNzQ29udGV4dDNE
OjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIodW5pdFJlY3QpKTsKKyAgICBtX2NvbnRleHQz
RC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCAyLCBHcmFw
aGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHVuaXRSZWN0KSk7CiAK
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChk
YXRhKCkucHJvamVjdGlvbk1hdHJpeCkKICAgICAgICAgICAgIC5tdWx0aXBseShtb2RlbFZpZXdN
YXRyaXgpCkBAIC05NDMsNyArMTA4MCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNs
aXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uCiAgICAg
bV9jb250ZXh0M0QtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwg
MCwgNCk7CiAKICAgICAvLyBDbGVhciB0aGUgc3RhdGUuCi0gICAgbV9jb250ZXh0M0QtPmRpc2Fi
bGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250
ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigp
KTsKICAgICBtX2NvbnRleHQzRC0+c3RlbmNpbE1hc2soMCk7CiAKICAgICAvLyBJbmNyZWFzZSBz
dGVuY2lsSW5kZXggYW5kIGFwcGx5IHN0ZW5jaWwgdGVzdGluZy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCmluZGV4IDczZDZmZWYuLjdiNGVmZmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcApAQCAtMzAsMjQ3ICszMCw1MyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSNkZWZpbmUgU1RSSU5HSUZZKC4uLikgI19fVkFf
QVJHU19fCi0KLXN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZU9wYWNpdHlB
bmRNYXNrID0KLSAgICBTVFJJTkdJRlkoCi0gICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0
OwotICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NvdXJjZTsKLSAgICAgICAgdW5pZm9ybSBz
YW1wbGVyMkQgc19tYXNrOwotICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5Owot
ICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKLSAgICAgICAgdmFy
eWluZyBoaWdocCB2ZWMyIHZfbWFza1RleENvb3JkOwotICAgICAgICB2b2lkIG1haW4odm9pZCkK
LSAgICAgICAgewotICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHNfc291
cmNlLCB2X3NvdXJjZVRleENvb3JkKTsKLSAgICAgICAgICAgIGxvd3AgdmVjNCBtYXNrQ29sb3Ig
PSB0ZXh0dXJlMkQoc19tYXNrLCB2X21hc2tUZXhDb29yZCk7Ci0gICAgICAgICAgICBsb3dwIGZs
b2F0IGZyYWdtZW50QWxwaGEgPSB1X29wYWNpdHkgKiBtYXNrQ29sb3IuYTsKLSAgICAgICAgICAg
IGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogZnJhZ21lbnRBbHBoYSwgY29sb3IuYSAq
IGZyYWdtZW50QWxwaGEpOwotICAgICAgICB9Ci0gICAgKTsKLQotc3RhdGljIGNvbnN0IGNoYXIq
IGZyYWdtZW50U2hhZGVyU291cmNlUmVjdE9wYWNpdHlBbmRNYXNrID0KLSAgICBTVFJJTkdJRlko
Ci0gICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwotICAgICAgICB1bmlmb3JtIHNhbXBs
ZXIyRFJlY3Qgc19zb3VyY2U7Ci0gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX21hc2s7
Ci0gICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7Ci0gICAgICAgIHZhcnlpbmcg
aGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIg
dl9tYXNrVGV4Q29vcmQ7Ci0gICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkRSZWN0KHNfc291cmNlLCB2X3NvdXJj
ZVRleENvb3JkKTsKLSAgICAgICAgICAgIGxvd3AgdmVjNCBtYXNrQ29sb3IgPSB0ZXh0dXJlMkRS
ZWN0KHNfbWFzaywgdl9tYXNrVGV4Q29vcmQpOwotICAgICAgICAgICAgbG93cCBmbG9hdCBmcmFn
bWVudEFscGhhID0gdV9vcGFjaXR5ICogbWFza0NvbG9yLmE7Ci0gICAgICAgICAgICBnbF9GcmFn
Q29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIGZyYWdtZW50QWxwaGEsIGNvbG9yLmEgKiBmcmFnbWVu
dEFscGhhKTsKLSAgICAgICAgfQotICAgICk7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhT
aGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9Ci0gICAgU1RSSU5HSUZZKAotICAgICAgICB1bmlm
b3JtIG1hdDQgdV9tYXRyaXg7Ci0gICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X2ZsaXA7Ci0g
ICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZl
YzIgdl9zb3VyY2VUZXhDb29yZDsKLSAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfbWFza1Rl
eENvb3JkOwotICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgewotICAgICAgICAgICAg
dl9zb3VyY2VUZXhDb29yZCA9IHZlYzIoYV92ZXJ0ZXgueCwgbWl4KGFfdmVydGV4LnksIDEuIC0g
YV92ZXJ0ZXgueSwgdV9mbGlwKSk7Ci0gICAgICAgICAgICB2X21hc2tUZXhDb29yZCA9IHZlYzIo
YV92ZXJ0ZXgpOwotICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIGFfdmVydGV4
OwotICAgICAgICB9Ci0gICAgKTsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVy
U291cmNlU2ltcGxlID0KLSAgICBTVFJJTkdJRlkoCi0gICAgICAgIHByZWNpc2lvbiBtZWRpdW1w
IGZsb2F0OwotICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NvdXJjZTsKLSAgICAgICAgdW5p
Zm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKLSAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZf
c291cmNlVGV4Q29vcmQ7Ci0gICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQoc19zb3VyY2UsIHZfc291cmNlVGV4
Q29vcmQpOwotICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiB1X29w
YWNpdHksIGNvbG9yLmEgKiB1X29wYWNpdHkpOwotICAgICAgICB9Ci0gICAgKTsKLQotc3RhdGlj
IGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlQW50aWFsaWFzaW5nTm9NYXNrID0KLSAg
ICBTVFJJTkdJRlkoCi0gICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwotICAgICAgICB1
bmlmb3JtIHNhbXBsZXIyRCBzX3NvdXJjZTsKLSAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZf
c291cmNlVGV4Q29vcmQ7Ci0gICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7Ci0g
ICAgICAgIHVuaWZvcm0gdmVjMyB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs4XTsK
LSAgICAgICAgdm9pZCBtYWluKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmVjNCBzYW1wbGVk
Q29sb3IgPSB0ZXh0dXJlMkQoc19zb3VyY2UsIGNsYW1wKHZfc291cmNlVGV4Q29vcmQsIDAuMCwg
MS4wKSk7Ci0gICAgICAgICAgICB2ZWMzIHBvcyA9IHZlYzMoZ2xfRnJhZ0Nvb3JkLnh5LCAxKTsK
LQotICAgICAgICAgICAgLy8gVGhlIGRhdGEgcGFzc2VkIGluIHVfZXhwYW5kZWRRdWFkRWRnZXNJ
blNjcmVlblNwYWNlIGlzIG1lcmVseSB0aGUKLSAgICAgICAgICAgIC8vIHByZS1zY2FsZWQgY29l
ZmZlY2llbnRzIG9mIHRoZSBsaW5lIGVxdWF0aW9ucyBkZXNjcmliaW5nIHRoZSBmb3VyIGVkZ2Vz
Ci0gICAgICAgICAgICAvLyBvZiB0aGUgZXhwYW5kZWQgcXVhZCBpbiBzY3JlZW4gc3BhY2UgYW5k
IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBib3gKLSAgICAgICAgICAgIC8vIG9mIHRoZSBleHBh
bmRlZCBxdWFkLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFdlIGFyZSBkb2luZyBh
IHNpbXBsZSBkaXN0YW5jZSBjYWxjdWxhdGlvbiBoZXJlIGFjY29yZGluZyB0byB0aGUgZm9ybXVs
YToKLSAgICAgICAgICAgIC8vIChBKnAueCArIEIqcC55ICsgQykgLyBzcXJ0KEFeMiArIEJeMikg
PSBkaXN0YW5jZSBmcm9tIGxpbmUgdG8gcAotICAgICAgICAgICAgLy8gTm90ZSB0aGF0IEEsIEIg
YW5kIEMgaGF2ZSBhbHJlYWR5IGJlZW4gc2NhbGVkIGJ5IDEgLyBzcXJ0KEFeMiArIEJeMikuCi0g
ICAgICAgICAgICBmbG9hdCBhMCA9IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3Jl
ZW5TcGFjZVswXSwgcG9zKSwgMC4wLCAxLjApOwotICAgICAgICAgICAgZmxvYXQgYTEgPSBjbGFt
cChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbMV0sIHBvcyksIDAuMCwgMS4w
KTsKLSAgICAgICAgICAgIGZsb2F0IGEyID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJ
blNjcmVlblNwYWNlWzJdLCBwb3MpLCAwLjAsIDEuMCk7Ci0gICAgICAgICAgICBmbG9hdCBhMyA9
IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVszXSwgcG9zKSwgMC4w
LCAxLjApOwotICAgICAgICAgICAgZmxvYXQgYTQgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRF
ZGdlc0luU2NyZWVuU3BhY2VbNF0sIHBvcyksIDAuMCwgMS4wKTsKLSAgICAgICAgICAgIGZsb2F0
IGE1ID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzVdLCBwb3Mp
LCAwLjAsIDEuMCk7Ci0gICAgICAgICAgICBmbG9hdCBhNiA9IGNsYW1wKGRvdCh1X2V4cGFuZGVk
UXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs2XSwgcG9zKSwgMC4wLCAxLjApOwotICAgICAgICAgICAg
ZmxvYXQgYTcgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbN10s
IHBvcyksIDAuMCwgMS4wKTsKLQotICAgICAgICAgICAgLy8gTm93IHdlIHdhbnQgdG8gcmVkdWNl
IHRoZSBhbHBoYSB2YWx1ZSBvZiB0aGUgZnJhZ21lbnQgaWYgaXQgaXMgY2xvc2UgdG8gdGhlCi0g
ICAgICAgICAgICAvLyBlZGdlcyBvZiB0aGUgZXhwYW5kZWQgcXVhZCAob3IgcmVjdGFuZ3VsYXIg
Ym91bmRpbmcgYm94IC0tIHdoaWNoIHNlZW1zIHRvIGJlCi0gICAgICAgICAgICAvLyBpbXBvcnRh
bnQgZm9yIGJhY2tmYWNpbmcgcXVhZHMpLiBOb3RlIHRoYXQgd2UgYXJlIGNvbWJpbmluZyB0aGUg
Y29udHJpYnV0aW9uCi0gICAgICAgICAgICAvLyBmcm9tIHRoZSAodG9wIHx8IGJvdHRvbSkgYW5k
IChsZWZ0IHx8IHJpZ2h0KSBlZGdlIGJ5IHNpbXBseSBtdWx0aXBseWluZy4gVGhpcyBmb2xsb3dz
Ci0gICAgICAgICAgICAvLyB0aGUgYXBwcm9hY2ggZGVzY3JpYmVkIGF0OiBodHRwOi8vaHR0cC5k
ZXZlbG9wZXIubnZpZGlhLmNvbS9HUFVHZW1zMi9ncHVnZW1zMl9jaGFwdGVyMjIuaHRtbCwKLSAg
ICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB3aXRob3V0IHVzaW5nIEdhdXNzaWFuIHdlaWdodHMu
Ci0gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSBzYW1wbGVkQ29sb3IgKiB1X29wYWNpdHkgKiBt
aW4obWluKGEwLCBhMikgKiBtaW4oYTEsIGEzKSwgbWluKGE0LCBhNikgKiBtaW4oYTUsIGE3KSk7
Ci0gICAgICAgIH0KLSAgICApOwotCi1zdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJT
b3VyY2VSZWN0U2ltcGxlID0KLSAgICBTVFJJTkdJRlkoCi0gICAgICAgIHByZWNpc2lvbiBtZWRp
dW1wIGZsb2F0OwotICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRFJlY3Qgc19zb3VyY2U7Ci0gICAg
ICAgIHVuaWZvcm0gbG93cCB2ZWMyIHVfdGV4dHVyZVNpemU7Ci0gICAgICAgIHVuaWZvcm0gbG93
cCBmbG9hdCB1X29wYWNpdHk7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRl
eENvb3JkOwotICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgewotICAgICAgICAgICAg
bG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEUmVjdChzX3NvdXJjZSwgdV90ZXh0dXJlU2l6ZSAq
IHZfc291cmNlVGV4Q29vcmQpOwotICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xv
ci5yZ2IgKiB1X29wYWNpdHksIGNvbG9yLmEgKiB1X29wYWNpdHkpOwotICAgICAgICB9Ci0gICAg
KTsKLQotc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSA9Ci0gICAg
U1RSSU5HSUZZKAotICAgICAgICB1bmlmb3JtIG1hdDQgdV9tYXRyaXg7Ci0gICAgICAgIHVuaWZv
cm0gbG93cCBmbG9hdCB1X2ZsaXA7Ci0gICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4Owot
ICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKLSAgICAgICAgdm9p
ZCBtYWluKHZvaWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZfc291cmNlVGV4Q29vcmQgPSB2
ZWMyKGFfdmVydGV4LngsIG1peChhX3ZlcnRleC55LCAxLiAtIGFfdmVydGV4LnksIHVfZmxpcCkp
OwotICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIGFfdmVydGV4OwotICAgICAg
ICB9Ci0gICAgKTsKLQotc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNvbGlk
Q29sb3IgPQotICAgIFNUUklOR0lGWSgKLSAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4Owot
ICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKLSAgICAgICAgdm9pZCBtYWluKHZvaWQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiBhX3ZlcnRl
eDsKLSAgICAgICAgfQotICAgICk7Ci0KLQotc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hh
ZGVyU291cmNlU29saWRDb2xvciA9Ci0gICAgU1RSSU5HSUZZKAotICAgICAgICBwcmVjaXNpb24g
bWVkaXVtcCBmbG9hdDsKLSAgICAgICAgdW5pZm9ybSB2ZWM0IHVfY29sb3I7Ci0gICAgICAgIHZv
aWQgbWFpbih2b2lkKQotICAgICAgICB7Ci0gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB1X2Nv
bG9yOwotICAgICAgICB9Ci0gICAgKTsKLQotUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNvbGlkQ29sb3I+IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpzb2xpZENvbG9y
UHJvZ3JhbSgpCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwgY29uc3QgU3Ry
aW5nJiB2ZXJ0ZXgsIGNvbnN0IFN0cmluZyYgZnJhZ21lbnQpCisgICAgOiBtX2NvbnRleHQoY29u
dGV4dCkKKyAgICAsIG1faWQoMCkKKyAgICAsIG1fdmVydGV4U2hhZGVyKDApCisgICAgLCBtX2Zy
YWdtZW50U2hhZGVyKDApCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19wb2ludGVyX2Nhc3Q8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yPihnZXRTaGFkZXJQcm9ncmFtKFNvbGlkQ29s
b3IpKTsKLX0KKyAgICBtX3ZlcnRleFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdy
YXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKTsKKyAgICBtX2ZyYWdtZW50U2hhZGVyID0g
bV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURF
Uik7CisgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UobV92ZXJ0ZXhTaGFkZXIsIHZlcnRleCk7
CisgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UobV9mcmFnbWVudFNoYWRlciwgZnJhZ21lbnQp
OworICAgIG1faWQgPSBtX2NvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsKKyAgICBtX2NvbnRleHQt
PmNvbXBpbGVTaGFkZXIobV92ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+Y29tcGlsZVNo
YWRlcihtX2ZyYWdtZW50U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihtX2lk
LCBtX3ZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIobV9pZCwgbV9m
cmFnbWVudFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5saW5rUHJvZ3JhbShtX2lkKTsKKyAgICBp
ZiAobV9jb250ZXh0LT5nZXRFcnJvcigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikK
KyAgICAgICAgcmV0dXJuOwogCi1QYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
QW50aWFsaWFzaW5nTm9NYXNrPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6YW50aWFsaWFz
aW5nTm9NYXNrUHJvZ3JhbSgpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19wb2ludGVyX2Nhc3Q8VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s+KGdldFNoYWRlclByb2dy
YW0oQW50aWFsaWFzaW5nTm9NYXNrKSk7CisgICAgU3RyaW5nIGxvZyA9IG1fY29udGV4dC0+Z2V0
U2hhZGVySW5mb0xvZyhtX3ZlcnRleFNoYWRlcik7CisgICAgcHJpbnRmKCJWZXJ0ZXggc2hhZGVy
IGxvZzogJXNcbiIsIGxvZy51dGY4KCkuZGF0YSgpKTsKKyAgICBsb2cgPSBtX2NvbnRleHQtPmdl
dFNoYWRlckluZm9Mb2cobV9mcmFnbWVudFNoYWRlcik7CisgICAgcHJpbnRmKCJGcmFnbWVudCBz
aGFkZXIgbG9nOiAlc1xuIiwgbG9nLnV0ZjgoKS5kYXRhKCkpOworICAgIGxvZyA9IG1fY29udGV4
dC0+Z2V0UHJvZ3JhbUluZm9Mb2cobV9pZCk7CisgICAgcHJpbnRmKCJQcm9ncmFtIGxvZzogJXNc
biIsIGxvZy51dGY4KCkuZGF0YSgpKTsKIH0KIAotUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlclByb2dyYW0o
U2hhZGVyVHlwZSBzaGFkZXJUeXBlKQorR0MzRHVpbnQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OmdldExvY2F0aW9uKGNvbnN0IGNoYXIqIG5hbWUsIFZhcmlhYmxlVHlwZSB0eXBlKQogewot
ICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbTsKLSAgICBpZiAo
c2hhZGVyVHlwZSA9PSBJbnZhbGlkKQotICAgICAgICByZXR1cm4gcHJvZ3JhbTsKLQotICAgIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOjppdGVyYXRvciBpdCA9IG1fdGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1NYXAuZmluZChzaGFkZXJUeXBlKTsKLSAgICBpZiAoaXQgIT0gbV90ZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcC5lbmQoKSkKKyAgICBIYXNoTWFwPGNvbnN0IGNoYXIq
LCBHQzNEdWludD46Oml0ZXJhdG9yIGl0ID0gbV92YXJpYWJsZXMuZmluZChuYW1lKTsKKyAgICBp
ZiAoaXQgIT0gbV92YXJpYWJsZXMuZW5kKCkpCiAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOwot
Ci0gICAgc3dpdGNoIChzaGFkZXJUeXBlKSB7Ci0gICAgY2FzZSBTaW1wbGU6Ci0gICAgICAgIHBy
b2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6Y3JlYXRlKG1fY29udGV4
dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVjdFNpbXBsZToKLSAgICAgICAgcHJvZ3Jh
bSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6Y3JlYXRlKG1fY29udGV4
dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQW50aWFsaWFzaW5nTm9NYXNrOgotICAgICAg
ICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6
OmNyZWF0ZShtX2NvbnRleHQpOworICAgIEdDM0R1aW50IGxvY2F0aW9uOworICAgIHN3aXRjaCh0
eXBlKSB7CisgICAgY2FzZSBVbmlmb3JtVmFyaWFibGU6CisgICAgICAgIGxvY2F0aW9uID0gbV9j
b250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9pZCwgU3RyaW5nKEFTQ0lJTGl0ZXJhbChuYW1l
KSkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIE9wYWNpdHlBbmRNYXNrOgotICAgICAgICBw
cm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6Y3JlYXRl
KG1fY29udGV4dCk7CisgICAgY2FzZSBBdHRyaWJWYXJpYWJsZToKKyAgICAgICAgbG9jYXRpb24g
PSBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKG1faWQsIFN0cmluZyhBU0NJSUxpdGVyYWwo
bmFtZSkpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWN0T3BhY2l0eUFuZE1hc2s6Ci0g
ICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5k
TWFzazo6Y3JlYXRlKG1fY29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU29saWRD
b2xvcjoKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRD
b2xvcjo6Y3JlYXRlKG1fY29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW52YWxp
ZDoKKyAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
YnJlYWs7CiAgICAgfQotICAgIG1fdGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAuYWRkKHNo
YWRlclR5cGUsIHByb2dyYW0pOwotICAgIHJldHVybiBwcm9ncmFtOwotfQotCi1UZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hh
ciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAs
IG1faWQoMCkKLSAgICAsIG1fdmVydGV4QXR0cmliKDApCi0gICAgLCBtX3ZlcnRleFNoYWRlcigw
KQotICAgICwgbV9mcmFnbWVudFNoYWRlcigwKQotICAgICwgbV9tYXRyaXhMb2NhdGlvbigtMSkK
LSAgICAsIG1fZmxpcExvY2F0aW9uKC0xKQotICAgICwgbV90ZXh0dXJlU2l6ZUxvY2F0aW9uKC0x
KQotICAgICwgbV9zb3VyY2VUZXh0dXJlTG9jYXRpb24oLTEpCi0gICAgLCBtX29wYWNpdHlMb2Nh
dGlvbigtMSkKLSAgICAsIG1fbWFza1RleHR1cmVMb2NhdGlvbigtMSkKLSAgICAsIG1fdmVydGV4
U2hhZGVyU291cmNlKHZlcnRleFNoYWRlclNvdXJjZSkKLSAgICAsIG1fZnJhZ21lbnRTaGFkZXJT
b3VyY2UoZnJhZ21lbnRTaGFkZXJTb3VyY2UpCi17Ci19CiAKLXZvaWQgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW06OmluaXRpYWxpemVQcm9ncmFtKCkKLXsKLSAgICBjb25zdCBjaGFyKiB2ZXJ0
ZXhTaGFkZXJTb3VyY2VQcm9ncmFtID0gdmVydGV4U2hhZGVyU291cmNlKCk7Ci0gICAgY29uc3Qg
Y2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VQcm9ncmFtID0gZnJhZ21lbnRTaGFkZXJTb3VyY2Uo
KTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRl
U2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKTsKLSAgICBQbGF0Zm9ybTNE
T2JqZWN0IGZyYWdtZW50U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUik7Ci0gICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2Uo
dmVydGV4U2hhZGVyLCB2ZXJ0ZXhTaGFkZXJTb3VyY2VQcm9ncmFtKTsKLSAgICBtX2NvbnRleHQt
PnNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgZnJhZ21lbnRTaGFkZXJTb3VyY2VQcm9ncmFt
KTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW1JRCA9IG1fY29udGV4dC0+Y3JlYXRlUHJv
Z3JhbSgpOwotICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAg
IG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Ci0KLSAgICBtX2NvbnRl
eHQtPmF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIHZlcnRleFNoYWRlcik7Ci0gICAgbV9jb250ZXh0
LT5hdHRhY2hTaGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNoYWRlcik7Ci0gICAgbV9jb250ZXh0
LT5saW5rUHJvZ3JhbShwcm9ncmFtSUQpOwotCi0gICAgbV92ZXJ0ZXhBdHRyaWIgPSBtX2NvbnRl
eHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgImFfdmVydGV4Iik7Ci0KLSAgICBtX2lk
ID0gcHJvZ3JhbUlEOwotICAgIG1fdmVydGV4U2hhZGVyID0gdmVydGV4U2hhZGVyOwotICAgIG1f
ZnJhZ21lbnRTaGFkZXIgPSBmcmFnbWVudFNoYWRlcjsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0aW9uKEdDM0RpbnQgJnZhcmlhYmxlLCBjb25z
dCBjaGFyKiBuYW1lKQotewotICAgIHZhcmlhYmxlID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9j
YXRpb24obV9pZCwgbmFtZSk7Ci0gICAgQVNTRVJUKHZhcmlhYmxlID49IDApOworICAgIG1fdmFy
aWFibGVzLmFkZChuYW1lLCBsb2NhdGlvbik7CisgICAgcmV0dXJuIGxvY2F0aW9uOwogfQogCiBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6flRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCkK
QEAgLTI4NiwxMjAgKzkyLDE5MSBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6flRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCkKICAgICBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0ocHJv
Z3JhbUlEKTsKIH0KIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OlRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAg
IDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNl
U2ltcGxlLCBmcmFnbWVudFNoYWRlclNvdXJjZVNpbXBsZSkKLXsKLSAgICBpbml0aWFsaXplUHJv
Z3JhbSgpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX2ZsaXBMb2NhdGlvbiwgInVfZmxpcCIp
OwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsK
LSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9zb3VyY2VUZXh0dXJlTG9jYXRpb24sICJzX3NvdXJj
ZSIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0
eSIpOwotfQorc3RydWN0IFNoYWRlclNwZWMgeworICAgIFN0cmluZyB2ZXJ0ZXhTaGFkZXI7Cisg
ICAgU3RyaW5nIGZyYWdtZW50U2hhZGVyOworICAgIFNoYWRlclNwZWMoY29uc3QgY2hhciogdmVy
dGV4ID0gMCwgY29uc3QgY2hhciogZnJhZ21lbnQgPSAwKQorICAgICAgICA6IHZlcnRleFNoYWRl
cih2ZXJ0ZXggPyBTdHJpbmcoQVNDSUlMaXRlcmFsKHZlcnRleCkpIDogU3RyaW5nKCkpCisgICAg
ICAgICwgZnJhZ21lbnRTaGFkZXIoZnJhZ21lbnQgPyBTdHJpbmcoQVNDSUlMaXRlcmFsKGZyYWdt
ZW50KSkgOiBTdHJpbmcoKSkKKyAgICB7CisgICAgfQorfTsKIAotVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1Tb2xpZENvbG9yOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3Io
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VTb2xpZENvbG9yLCBmcmFnbWVudFNoYWRl
clNvdXJjZVNvbGlkQ29sb3IpCitzdGF0aWMgdm9pZCBnZXRTaGFkZXJTcGVjKFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpTaGFkZXJLZXkga2V5LCBTdHJpbmcmIHZlcnRleCwgU3RyaW5nJiBm
cmFnbWVudCkKIHsKLSAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwotICAgIGdldFVuaWZvcm1Mb2Nh
dGlvbihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRp
b24obV9jb2xvckxvY2F0aW9uLCAidV9jb2xvciIpOwotfQorICAgIHN0YXRpYyBWZWN0b3I8U2hh
ZGVyU3BlYz4gc3BlY3MgPSBWZWN0b3I8U2hhZGVyU3BlYz4oKTsKKyNkZWZpbmUgU1RSSU5HSUZZ
KC4uLikgI19fVkFfQVJHU19fCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50T3BhY2l0
eUFuZE1hc2sgPQorICAgICAgICBTVFJJTkdJRlkoCisgICAgICAgICAgICBwcmVjaXNpb24gbWVk
aXVtcCBmbG9hdDsKKyAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc2FtcGxlcjsKKyAg
ICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfbWFzazsKKyAgICAgICAgICAgIHVuaWZvcm0g
bG93cCBmbG9hdCB1X29wYWNpdHk7CisgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9z
b3VyY2VUZXhDb29yZDsKKyAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X21hc2tUZXhD
b29yZDsKKyAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRChzX3NhbXBsZXIsIHZfc291cmNl
VGV4Q29vcmQpOworICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBtYXNrQ29sb3IgPSB0ZXh0dXJl
MkQoc19tYXNrLCB2X21hc2tUZXhDb29yZCk7CisgICAgICAgICAgICAgICAgbG93cCBmbG9hdCBm
cmFnbWVudEFscGhhID0gdV9vcGFjaXR5ICogbWFza0NvbG9yLmE7CisgICAgICAgICAgICAgICAg
Z2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBmcmFnbWVudEFscGhhLCBjb2xvci5hICog
ZnJhZ21lbnRBbHBoYSk7CisgICAgICAgICAgICB9CisgICAgICAgICk7CiAKLVRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0
U2ltcGxlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIDogVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNo
YWRlclNvdXJjZVJlY3RTaW1wbGUpCi17Ci0gICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKLSAgICBn
ZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7Ci0gICAgZ2V0
VW5pZm9ybUxvY2F0aW9uKG1fZmxpcExvY2F0aW9uLCAidV9mbGlwIik7Ci0gICAgZ2V0VW5pZm9y
bUxvY2F0aW9uKG1fdGV4dHVyZVNpemVMb2NhdGlvbiwgInVfdGV4dHVyZVNpemUiKTsKLSAgICBn
ZXRVbmlmb3JtTG9jYXRpb24obV9zb3VyY2VUZXh0dXJlTG9jYXRpb24sICJzX3NvdXJjZSIpOwot
ICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0eSIpOwot
fQorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFJlY3RPcGFjaXR5QW5kTWFzayA9Cisg
ICAgICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0Owor
ICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfc2FtcGxlcjsKKyAgICAgICAgICAg
IHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX21hc2s7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3Ag
ZmxvYXQgdV9vcGFjaXR5OworICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNl
VGV4Q29vcmQ7CisgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9tYXNrVGV4Q29vcmQ7
CisgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkRSZWN0KHNfc2FtcGxlciwgdl9zb3VyY2VU
ZXhDb29yZCk7CisgICAgICAgICAgICAgICAgbG93cCB2ZWM0IG1hc2tDb2xvciA9IHRleHR1cmUy
RFJlY3Qoc19tYXNrLCB2X21hc2tUZXhDb29yZCk7CisgICAgICAgICAgICAgICAgbG93cCBmbG9h
dCBmcmFnbWVudEFscGhhID0gdV9vcGFjaXR5ICogbWFza0NvbG9yLmE7CisgICAgICAgICAgICAg
ICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBmcmFnbWVudEFscGhhLCBjb2xvci5h
ICogZnJhZ21lbnRBbHBoYSk7CisgICAgICAgICAgICB9CisgICAgICAgICk7CiAKLVRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtT3BhY2l0eUFuZE1hc2soR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi0gICAgOiBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5
QW5kTWFzaywgZnJhZ21lbnRTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzaykKLXsKLSAgICBpbml0
aWFsaXplUHJvZ3JhbSgpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9u
LCAidV9tYXRyaXgiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9mbGlwTG9jYXRpb24sICJ1
X2ZsaXAiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9zb3VyY2VUZXh0dXJlTG9jYXRpb24s
ICJzX3NvdXJjZSIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hc2tUZXh0dXJlTG9jYXRp
b24sICJzX21hc2siKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9jYXRpb24s
ICJ1X29wYWNpdHkiKTsKLX0KKyAgICBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4T3BhY2l0eUFu
ZE1hc2sgPQorICAgICAgICBTVFJJTkdJRlkoCisgICAgICAgICAgICB1bmlmb3JtIG1hdDQgdV9t
YXRyaXg7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9mbGlwOworICAgICAgICAg
ICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CisgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZl
YzIgdl9zb3VyY2VUZXhDb29yZDsKKyAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X21h
c2tUZXhDb29yZDsKKyAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHZfc291cmNlVGV4Q29vcmQgPSB2ZWMyKGFfdmVydGV4LngsIG1peChh
X3ZlcnRleC55LCAxLiAtIGFfdmVydGV4LnksIHVfZmxpcCkpOworICAgICAgICAgICAgICAgIHZf
bWFza1RleENvb3JkID0gdmVjMihhX3ZlcnRleCk7CisgICAgICAgICAgICAgICAgZ2xfUG9zaXRp
b24gPSB1X21hdHJpeCAqIGFfdmVydGV4OworICAgICAgICAgICAgfQorICAgICAgICApOwogCi1U
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQpCi0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFk
ZXJTb3VyY2VPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0T3BhY2l0eUFu
ZE1hc2spCi17Ci0gICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRp
b24obV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9u
KG1fZmxpcExvY2F0aW9uLCAidV9mbGlwIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291
cmNlVGV4dHVyZUxvY2F0aW9uLCAic19zb3VyY2UiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24o
bV9tYXNrVGV4dHVyZUxvY2F0aW9uLCAic19tYXNrIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9u
KG1fb3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5Iik7Ci19CisgICAgc3RhdGljIGNvbnN0IGNo
YXIqIGZyYWdtZW50U2ltcGxlID0KKyAgICAgICAgU1RSSU5HSUZZKAorICAgICAgICAgICAgcHJl
Y2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3Nh
bXBsZXI7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OworICAgICAg
ICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CisgICAgICAgICAgICB2
b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsb3dwIHZlYzQg
Y29sb3IgPSB0ZXh0dXJlMkQoc19zYW1wbGVyLCB2X3NvdXJjZVRleENvb3JkKTsKKyAgICAgICAg
ICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIHVfb3BhY2l0eSwgY29sb3Iu
YSAqIHVfb3BhY2l0eSk7CisgICAgICAgICAgICB9CisgICAgICAgICk7CiAKLVRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbUFudGlhbGlhc2luZ05vTWFzayhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLSAgICA6
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJjZVNp
bXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VBbnRpYWxpYXNpbmdOb01hc2spCi17Ci0gICAgaW5p
dGlhbGl6ZVByb2dyYW0oKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlv
biwgInVfbWF0cml4Iik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNlVGV4dHVyZUxv
Y2F0aW9uLCAic19zb3VyY2UiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9j
YXRpb24sICJ1X29wYWNpdHkiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9leHBhbmRlZFF1
YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbiwgInVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVl
blNwYWNlIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fZmxpcExvY2F0aW9uLCAidV9mbGlw
Iik7Ci19CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50QW50aWFsaWFzaW5nTm9NYXNr
ID0KKyAgICAgICAgU1RSSU5HSUZZKAorICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxv
YXQ7CisgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBsZXI7CisgICAgICAgICAg
ICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKKyAgICAgICAgICAgIHVuaWZv
cm0gbG93cCBmbG9hdCB1X29wYWNpdHk7CisgICAgICAgICAgICB1bmlmb3JtIHZlYzMgdV9leHBh
bmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbOF07CisgICAgICAgICAgICB2b2lkIG1haW4oKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZlYzQgc2FtcGxlZENvbG9yID0gdGV4dHVy
ZTJEKHNfc2FtcGxlciwgY2xhbXAodl9zb3VyY2VUZXhDb29yZCwgMC4wLCAxLjApKTsKKyAgICAg
ICAgICAgICAgICB2ZWMzIHBvcyA9IHZlYzMoZ2xfRnJhZ0Nvb3JkLnh5LCAxKTsKKworICAgICAg
ICAgICAgICAgIC8vIFRoZSBkYXRhIHBhc3NlZCBpbiB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3Jl
ZW5TcGFjZSBpcyBtZXJlbHkgdGhlCisgICAgICAgICAgICAgICAgLy8gcHJlLXNjYWxlZCBjb2Vm
ZmVjaWVudHMgb2YgdGhlIGxpbmUgZXF1YXRpb25zIGRlc2NyaWJpbmcgdGhlIGZvdXIgZWRnZXMK
KyAgICAgICAgICAgICAgICAvLyBvZiB0aGUgZXhwYW5kZWQgcXVhZCBpbiBzY3JlZW4gc3BhY2Ug
YW5kIHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBib3gKKyAgICAgICAgICAgICAgICAvLyBvZiB0
aGUgZXhwYW5kZWQgcXVhZC4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8v
IFdlIGFyZSBkb2luZyBhIHNpbXBsZSBkaXN0YW5jZSBjYWxjdWxhdGlvbiBoZXJlIGFjY29yZGlu
ZyB0byB0aGUgZm9ybXVsYToKKyAgICAgICAgICAgICAgICAvLyAoQSpwLnggKyBCKnAueSArIEMp
IC8gc3FydChBXjIgKyBCXjIpID0gZGlzdGFuY2UgZnJvbSBsaW5lIHRvIHAKKyAgICAgICAgICAg
ICAgICAvLyBOb3RlIHRoYXQgQSwgQiBhbmQgQyBoYXZlIGFscmVhZHkgYmVlbiBzY2FsZWQgYnkg
MSAvIHNxcnQoQV4yICsgQl4yKS4KKyAgICAgICAgICAgICAgICBmbG9hdCBhMCA9IGNsYW1wKGRv
dCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVswXSwgcG9zKSwgMC4wLCAxLjApOwor
ICAgICAgICAgICAgICAgIGZsb2F0IGExID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJ
blNjcmVlblNwYWNlWzFdLCBwb3MpLCAwLjAsIDEuMCk7CisgICAgICAgICAgICAgICAgZmxvYXQg
YTIgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbMl0sIHBvcyks
IDAuMCwgMS4wKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBhMyA9IGNsYW1wKGRvdCh1X2V4cGFu
ZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVszXSwgcG9zKSwgMC4wLCAxLjApOworICAgICAgICAg
ICAgICAgIGZsb2F0IGE0ID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNw
YWNlWzRdLCBwb3MpLCAwLjAsIDEuMCk7CisgICAgICAgICAgICAgICAgZmxvYXQgYTUgPSBjbGFt
cChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNV0sIHBvcyksIDAuMCwgMS4w
KTsKKyAgICAgICAgICAgICAgICBmbG9hdCBhNiA9IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVk
Z2VzSW5TY3JlZW5TcGFjZVs2XSwgcG9zKSwgMC4wLCAxLjApOworICAgICAgICAgICAgICAgIGZs
b2F0IGE3ID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzddLCBw
b3MpLCAwLjAsIDEuMCk7CisKKyAgICAgICAgICAgICAgICAvLyBOb3cgd2Ugd2FudCB0byByZWR1
Y2UgdGhlIGFscGhhIHZhbHVlIG9mIHRoZSBmcmFnbWVudCBpZiBpdCBpcyBjbG9zZSB0byB0aGUK
KyAgICAgICAgICAgICAgICAvLyBlZGdlcyBvZiB0aGUgZXhwYW5kZWQgcXVhZCAob3IgcmVjdGFu
Z3VsYXIgYm91bmRpbmcgYm94IC0tIHdoaWNoIHNlZW1zIHRvIGJlCisgICAgICAgICAgICAgICAg
Ly8gaW1wb3J0YW50IGZvciBiYWNrZmFjaW5nIHF1YWRzKS4gTm90ZSB0aGF0IHdlIGFyZSBjb21i
aW5pbmcgdGhlIGNvbnRyaWJ1dGlvbgorICAgICAgICAgICAgICAgIC8vIGZyb20gdGhlICh0b3Ag
fHwgYm90dG9tKSBhbmQgKGxlZnQgfHwgcmlnaHQpIGVkZ2UgYnkgc2ltcGx5IG11bHRpcGx5aW5n
LiBUaGlzIGZvbGxvd3MKKyAgICAgICAgICAgICAgICAvLyB0aGUgYXBwcm9hY2ggZGVzY3JpYmVk
IGF0OiBodHRwOi8vaHR0cC5kZXZlbG9wZXIubnZpZGlhLmNvbS9HUFVHZW1zMi9ncHVnZW1zMl9j
aGFwdGVyMjIuaHRtbCwKKyAgICAgICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2l0aG91dCB1
c2luZyBHYXVzc2lhbiB3ZWlnaHRzLgorICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHNh
bXBsZWRDb2xvciAqIHVfb3BhY2l0eSAqIG1pbihtaW4oYTAsIGEyKSAqIG1pbihhMSwgYTMpLCBt
aW4oYTQsIGE2KSAqIG1pbihhNSwgYTcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKIAot
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi17Ci19
CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50UmVjdFNpbXBsZSA9CisgICAgICAgIFNU
UklOR0lGWSgKKyAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OworICAgICAgICAg
ICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfc2FtcGxlcjsKKyAgICAgICAgICAgIHVuaWZvcm0g
bG93cCB2ZWMyIHNfc2FtcGxlclNpemU7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQg
dV9vcGFjaXR5OworICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29v
cmQ7CisgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkRSZWN0KHNfc2FtcGxlciwgc19zYW1w
bGVyU2l6ZSAqIHZfc291cmNlVGV4Q29vcmQpOworICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xv
ciA9IHZlYzQoY29sb3IucmdiICogdV9vcGFjaXR5LCBjb2xvci5hICogdV9vcGFjaXR5KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgKTsKIAotVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6On5U
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpCi17Ci19CisgICAgc3RhdGljIGNvbnN0IGNoYXIq
IHZlcnRleFNpbXBsZSA9CisgICAgICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAgIHVuaWZvcm0g
bWF0NCB1X21hdHJpeDsKKyAgICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X2ZsaXA7Cisg
ICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKKyAgICAgICAgICAgIHZhcnlpbmcg
aGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOworICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdl9zb3VyY2VUZXhDb29yZCA9IHZlYzIo
YV92ZXJ0ZXgueCwgbWl4KGFfdmVydGV4LnksIDEuIC0gYV92ZXJ0ZXgueSwgdV9mbGlwKSk7Cisg
ICAgICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIGFfdmVydGV4OworICAgICAg
ICAgICAgfQorICAgICAgICApOwogCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHN0YXRp
YyBjb25zdCBjaGFyKiB2ZXJ0ZXhTb2xpZENvbG9yID0KKyAgICAgICAgU1RSSU5HSUZZKAorICAg
ICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OworICAgICAgICAgICAgYXR0cmlidXRlIHZl
YzQgYV92ZXJ0ZXg7CisgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogYV92ZXJ0ZXg7CisgICAg
ICAgICAgICB9CisgICAgICAgICk7CiAKLS8vIENyZWF0ZSBhIG5vcm1hbCBkaXN0cmlidXRpb24g
b2YgMjEgdmFsdWVzIGJldHdlZW4gLTIgYW5kIDIuCi0jZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9I
QUxGX1dJRFRIIDExCi0jZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9TVEVQIDAuMgogCi1TdGFuZGFy
ZEZpbHRlclByb2dyYW06On5TdGFuZGFyZEZpbHRlclByb2dyYW0oKQotewotICAgIG1fY29udGV4
dC0+ZGV0YWNoU2hhZGVyKG1faWQsIG1fdmVydGV4U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmRl
bGV0ZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5kZXRhY2hTaGFkZXIo
bV9pZCwgbV9mcmFnbWVudFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIobV9m
cmFnbWVudFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKG1faWQpOwotfQor
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNvbGlkQ29sb3IgPQorICAgICAgICBTVFJJ
TkdJRlkoCisgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKKyAgICAgICAgICAg
IHVuaWZvcm0gdmVjNCB1X2NvbG9yOworICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdV9jb2xvcjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgKTsKIAotU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZp
bHRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEZpbHRlck9wZXJhdGlvbjo6
T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNzKQotICAgIDogbV9jb250ZXh0KGNvbnRl
eHQpCi0gICAgLCBtX2lkKDApCi17Ci0gICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNl
ID0KLSAgICAgICAgICAgIFNUUklOR0lGWSgKLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgdmVj
NCBhX3ZlcnRleDsKLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3RleENvb3JkOwot
ICAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOwotICAgICAgICAg
ICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgdl90ZXhDb29yZCA9IHZlYzIoYV90ZXhDb29yZCk7Ci0gICAgICAgICAgICAgICAgICAg
IGdsX1Bvc2l0aW9uID0gYV92ZXJ0ZXg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
KTsKLQotI2RlZmluZSBTVEFOREFSRF9GSUxURVIoLi4uKSBcCi0gICAgICAgICJwcmVjaXNpb24g
bWVkaXVtcCBmbG9hdDtcbiJcCi0gICAgICAgICJ2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29y
ZDtcbiJcCi0gICAgICAgICJ1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfYW1vdW50O1xuIlwKLSAgICAg
ICAgInVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcbiJcCi0gICAgICAgICNfX1ZBX0FSR1Nf
XyBcCi0gICAgICAgICJ2b2lkIG1haW4odm9pZClcbiB7IGdsX0ZyYWdDb2xvciA9IHNoYWRlKHRl
eHR1cmUyRCh1X3RleHR1cmUsIHZfdGV4Q29vcmQpKTsgfSIKLQotICAgIGNvbnN0IGNoYXIqIGZy
YWdtZW50U2hhZGVyU291cmNlID0gMDsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgotICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9
IFNUQU5EQVJEX0ZJTFRFUigKKyAgICBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4RmlsdGVyID0K
KyAgICAgICAgU1RSSU5HSUZZKAorICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7
CisgICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3RleENvb3JkOworICAgICAgICAgICAgdmFy
eWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7CisgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2X3RleENvb3JkID0gdmVjMihhX3RleENv
b3JkKTsKKyAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IGFfdmVydGV4OworICAgICAgICAg
ICAgfQorICAgICAgICApOworCisgICAgI2RlZmluZSBTVEFOREFSRF9GSUxURVIoLi4uKSBcCisg
ICAgICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iXAorICAgICAgICAgICAgInZh
cnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkO1xuIlwKKyAgICAgICAgICAgICJ1bmlmb3JtIGhp
Z2hwIGZsb2F0IHVfYW1vdW50O1xuIlwKKyAgICAgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCBz
X3NhbXBsZXI7XG4iXAorICAgICAgICAgICAgI19fVkFfQVJHU19fIFwKKyAgICAgICAgICAgICJ2
b2lkIG1haW4odm9pZClcbiB7IGdsX0ZyYWdDb2xvciA9IHNoYWRlKHRleHR1cmUyRChzX3NhbXBs
ZXIsIHZfdGV4Q29vcmQpKTsgfSIKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudEdy
YXlzY2FsZUZpbHRlciA9CisgICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKICAgICAgICAgICAgIGxv
d3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgbG93cCBmbG9hdCBhbW91bnQgPSAxLjAgLSB1X2Ftb3VudDsKQEAgLTQwOSw5ICsyODYs
OSBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwgRmlsdGVyTwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbG9yLmEpOwogICAgICAgICAgICAgfQogICAgICAgICApOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291
cmNlID0gU1RBTkRBUkRfRklMVEVSKAorCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50
U2VwaWFGaWx0ZXIgPQorICAgICAgICBTVEFOREFSRF9GSUxURVIoCiAgICAgICAgICAgICBsb3dw
IHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIGxvd3AgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9hbW91bnQ7CkBAIC00MjEsOSArMjk4LDkg
QEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsIEZpbHRlck8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b2xvci5hKTsKICAgICAgICAgICAgIH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgotICAgICAgICBmcmFnbWVudFNoYWRlclNv
dXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVu
dFNhdHVyYXRlRmlsdGVyID0KKyAgICAgICAgU1RBTkRBUkRfRklMVEVSKAogICAgICAgICAgICAg
bG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gdmVjNCgoMC4yMTMgKyAwLjc4NyAqIHVfYW1vdW50KSAqIGNvbG9yLnIg
KyAoMC43MTUgLSAwLjcxNSAqIHVfYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgLSAwLjA3MiAq
IHVfYW1vdW50KSAqIGNvbG9yLmIsCkBAIC00MzIsOSArMzA5LDkgQEAgU3RhbmRhcmRGaWx0ZXJQ
cm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQs
IEZpbHRlck8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5hKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkhVRV9ST1RBVEU6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRf
RklMVEVSKAorCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50SHVlUm90YXRlRmlsdGVy
ID0KKyAgICAgICAgU1RBTkRBUkRfRklMVEVSKAogICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRl
KGxvd3AgdmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBoaWdocCBm
bG9hdCBwaSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDY7CkBAIC00NDYsNTggKzMyMyw2MiBAQCBT
dGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCwgRmlsdGVyTwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9y
LmEpOwogICAgICAgICAgICAgfQogICAgICAgICApOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgotICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9
IFNUQU5EQVJEX0ZJTFRFUigKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudEludmVy
dEZpbHRlciA9CisgICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKICAgICAgICAgICAgIGxvd3AgZmxv
YXQgaW52ZXJ0KGxvd3AgZmxvYXQgbikgeyByZXR1cm4gKDEuMCAtIG4pICogdV9hbW91bnQgKyBu
ICogKDEuMCAtIHVfYW1vdW50KTsgfQogICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3Ag
dmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdmVjNChp
bnZlcnQoY29sb3IuciksIGludmVydChjb2xvci5nKSwgaW52ZXJ0KGNvbG9yLmIpLCBjb2xvci5h
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNl
ID0gU1RBTkRBUkRfRklMVEVSKAorCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50QnJp
Z2h0bmVzc0ZpbHRlciA9CisgICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKICAgICAgICAgICAgIGxv
d3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHZlYzQoY29sb3IucmdiICogKDEuMCArIHVfYW1vdW50KSwgY29sb3IuYSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKLSAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBT
VEFOREFSRF9GSUxURVIoCisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRDb250cmFz
dEZpbHRlciA9CisgICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKICAgICAgICAgICAgIGxvd3AgZmxv
YXQgY29udHJhc3QobG93cCBmbG9hdCBuKSB7IHJldHVybiAobiAtIDAuNSkgKiB1X2Ftb3VudCAr
IDAuNTsgfQogICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdmVjNChjb250cmFzdChjb2xvci5y
KSwgY29udHJhc3QoY29sb3IuZyksIGNvbnRyYXN0KGNvbG9yLmIpLCBjb2xvci5hKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRf
RklMVEVSKAorCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50T3BhY2l0eUZpbHRlciA9
CisgICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKICAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShs
b3dwIHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZl
YzQoY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSAqIHVfYW1vdW50KTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkJMVVI6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RSSU5HSUZZKAor
CisjZGVmaW5lIEJMVVJfQ09OU1RBTlRTICIjZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJ
RFRIIDExXG4jZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9TVEVQIDAuMlxuIgorCisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIGZyYWdtZW50Qmx1ckZpbHRlciA9CisgICAgICAgIEJMVVJfQ09OU1RBTlRT
CisgICAgICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5vcm1hbCBkaXN0
cmlidXRpb24gb2YgMjEgdmFsdWVzIGJldHdlZW4gLTIgYW5kIDIuCiAgICAgICAgICAgICBwcmVj
aXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3Rl
eENvb3JkOwogICAgICAgICAgICAgdW5pZm9ybSBsb3dwIHZlYzIgdV9ibHVyUmFkaXVzOwotICAg
ICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlOworICAgICAgICAgICAgdW5pZm9y
bSBzYW1wbGVyMkQgc19zYW1wbGVyOwogICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNz
aWFuS2VybmVsW0dBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsKIAogICAgICAgICAgICAgbG93
cCB2ZWM0IHNhbXBsZUNvbG9yKGZsb2F0IHJhZGl1cykKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICB2ZWMyIGNvb3JkID0gdl90ZXhDb29yZCArIHJhZGl1cyAqIHVfYmx1clJhZGl1czsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHVfdGV4dHVyZSwgY29vcmQpICogZmxv
YXQoY29vcmQueCA+IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQu
eSA8IDEuKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHNfc2FtcGxlciwgY29v
cmQpICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4g
JiYgY29vcmQueSA8IDEuKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgdmVjNCBibHVy
KCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2ZWM0IHRvdGFsID0gc2FtcGxlQ29s
b3IoMCkgKiB1X2dhdXNzaWFuS2VybmVsWzBdOworICAgICAgICAgICAgICAgIHZlYzQgdG90YWwg
PSBzYW1wbGVDb2xvcigwLikgKiB1X2dhdXNzaWFuS2VybmVsWzBdOwogICAgICAgICAgICAgICAg
IGZvciAoaW50IGkgPSAxOyBpIDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7IGkrKykgewog
ICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVDb2xvcihmbG9hdChpKSAqIEdBVVNT
SUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07CiAgICAgICAgICAgICAgICAg
ICAgIHRvdGFsICs9IHNhbXBsZUNvbG9yKGZsb2F0KC0xICogaSkgKiBHQVVTU0lBTl9LRVJORUxf
U1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwpAQCAtNTExLDI4MiArMzkyLDEzMCBAQCBTdGFu
ZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgRmlsdGVyTwogICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IGJsdXIo
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOgotICAgICAgICBzd2l0Y2ggKHBhc3MpIHsKLSAg
ICAgICAgY2FzZSAwOiB7Ci0gICAgICAgICAgICAvLyBGaXJzdCBwYXNzOiBob3Jpem9udGFsIGFs
cGhhIGJsdXIuCi0gICAgICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUUklOR0lGWSgK
LSAgICAgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSAgICAgICAgICAgICAg
ICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKLSAgICAgICAgICAgICAgICB1bmlmb3Jt
IGxvd3AgZmxvYXQgdV9zaGFkb3dCbHVyUmFkaXVzOwotICAgICAgICAgICAgICAgIHVuaWZvcm0g
bG93cCB2ZWMyIHVfc2hhZG93T2Zmc2V0OwotICAgICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxl
cjJEIHVfdGV4dHVyZTsKLSAgICAgICAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZ2F1c3NpYW5L
ZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdOwotCi0gICAgICAgICAgICAgICAgbG93
cCBmbG9hdCBzYW1wbGVBbHBoYShmbG9hdCByYWRpdXMpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90ZXhDb29yZCAtIHVfc2hhZG93T2Zmc2V0
ICsgdmVjMihyYWRpdXMgKiB1X3NoYWRvd0JsdXJSYWRpdXMsIDAuKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRleHR1cmUyRCh1X3RleHR1cmUsIGNvb3JkKS5hICogZmxvYXQoY29vcmQu
eCA+IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBsb3dwIGZsb2F0IHNoYWRvd0Js
dXJIb3Jpem9udGFsKCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZs
b2F0IHRvdGFsID0gc2FtcGxlQWxwaGEoMCkgKiB1X2dhdXNzaWFuS2VybmVsWzBdOwotICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJ
RFRIOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhh
KGZsb2F0KGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhhKGZsb2F0KC0xICog
aSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwotICAgICAg
ICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsOwotICAg
ICAgICAgICAgICAgIH0KKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkb3dGaWx0
ZXIxID0KKyAgICAgICAgQkxVUl9DT05TVEFOVFMKKyAgICAgICAgU1RSSU5HSUZZKAorICAgICAg
ICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hw
IHZlYzIgdl90ZXhDb29yZDsKKyAgICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X2JsdXJS
YWRpdXM7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVjMiB1X3NoYWRvd09mZnNldDsKKyAg
ICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc2FtcGxlcjsKKyAgICAgICAgICAgIHVuaWZv
cm0gZmxvYXQgdV9nYXVzc2lhbktlcm5lbFtHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSF07CiAK
LSAgICAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4sIDEuLCAxLiwgMS4pICogc2hh
ZG93Qmx1ckhvcml6b250YWwoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICApOwot
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBsb3dwIGZsb2F0IHNhbXBsZUFscGhhKGZs
b2F0IHJhZGl1cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2ZWMyIGNvb3JkID0g
dl90ZXhDb29yZCAtIHVfc2hhZG93T2Zmc2V0ICsgdmVjMihyYWRpdXMgKiB1X2JsdXJSYWRpdXMs
IDAuKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHNfc2FtcGxlciwgY29vcmQp
LmEgKiBmbG9hdChjb29yZC54ID4gMC4gJiYgY29vcmQueSA+IDAuICYmIGNvb3JkLnggPCAxLiAm
JiBjb29yZC55IDwgMS4pOwogICAgICAgICAgICAgfQotICAgICAgICBjYXNlIDE6IHsKLSAgICAg
ICAgICAgIC8vIFNlY29uZCBwYXNzOiB2ZXJ0aWNhbCBhbHBoYSBibHVyIGFuZCBjb21wb3NpdGUg
d2l0aCBvcmlnaW4uCi0gICAgICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUUklOR0lG
WSgKLSAgICAgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSAgICAgICAgICAg
ICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKLSAgICAgICAgICAgICAgICB1bmlm
b3JtIGxvd3AgZmxvYXQgdV9zaGFkb3dCbHVyUmFkaXVzOwotICAgICAgICAgICAgICAgIHVuaWZv
cm0gbG93cCB2ZWM0IHVfc2hhZG93Q29sb3I7Ci0gICAgICAgICAgICAgICAgdW5pZm9ybSBzYW1w
bGVyMkQgdV90ZXh0dXJlOwotICAgICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVfY29u
dGVudFRleHR1cmU7Ci0gICAgICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2Vy
bmVsW0dBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsKLQotICAgICAgICAgICAgICAgIGxvd3Ag
ZmxvYXQgc2FtcGxlQWxwaGEoZmxvYXQgcikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHZlYzIgY29vcmQgPSB2X3RleENvb3JkICsgdmVjMigwLiwgciAqIHVfc2hhZG93
Qmx1clJhZGl1cyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlMkQodV90ZXh0
dXJlLCBjb29yZCkuYSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29v
cmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgbG93cCBmbG9hdCBzaGFkb3dCbHVyVmVydGljYWwoKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgdG90YWwgPSBzYW1wbGVBbHBoYSgwKSAqIHVf
Z2F1c3NpYW5LZXJuZWxbMF07Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBp
IDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7IGkrKykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RF
UCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgdG90YWwg
Kz0gc2FtcGxlQWxwaGEoZmxvYXQoLTEgKiBpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVf
Z2F1c3NpYW5LZXJuZWxbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdG90YWw7CisgICAgICAgICAgICBsb3dwIGZsb2F0IHNoYWRvd0JsdXJI
b3Jpem9udGFsKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmbG9hdCB0b3RhbCA9
IHNhbXBsZUFscGhhKDAuKSAqIHVfZ2F1c3NpYW5LZXJuZWxbMF07CisgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhhKGZsb2F0KGkpICogR0FVU1NJ
QU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKKyAgICAgICAgICAgICAgICAg
ICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoLTEgKiBpKSAqIEdBVVNTSUFOX0tFUk5FTF9T
VEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgbG93cCB2ZWM0IHNvdXJjZU92ZXIobG93cCB2ZWM0IHNvdXJjZSwgbG93cCB2ZWM0
IGRlc3RpbmF0aW9uKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
Q29tcG9zaXRlIHRoZSBzaGFkb3cgd2l0aCB0aGUgb3JpZ2luYWwgdGV4dHVyZS4KLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHNvdXJjZSArIGRlc3RpbmF0aW9uICogKDEuIC0gc291cmNlLmEp
OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdG90YWw7CisgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHNvdXJjZU92ZXIodGV4
dHVyZTJEKHVfY29udGVudFRleHR1cmUsIHZfdGV4Q29vcmQpLCBzaGFkb3dCbHVyVmVydGljYWwo
KSAqIHVfc2hhZG93Q29sb3IpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICk7Ci0g
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4sIDEuLCAxLiwgMS4p
ICogc2hhZG93Qmx1ckhvcml6b250YWwoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAg
ICAgICApOwogCi0gICAgaWYgKCFmcmFnbWVudFNoYWRlclNvdXJjZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIFBsYXRmb3JtM0RPYmplY3QgdmVydGV4U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVT
aGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIpOwotICAgIFBsYXRmb3JtM0RP
YmplY3QgZnJhZ21lbnRTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBR01FTlRfU0hBREVSKTsKLSAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZSh2
ZXJ0ZXhTaGFkZXIsIHZlcnRleFNoYWRlclNvdXJjZSk7Ci0gICAgbV9jb250ZXh0LT5zaGFkZXJT
b3VyY2UoZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyU291cmNlKTsKLSAgICBQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW1JRCA9IG1fY29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOwotICAgIG1f
Y29udGV4dC0+Y29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgIG1fY29udGV4dC0+Y29t
cGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Ci0jaWYgIUxPR19ESVNBQkxFRAotICAgIFN0cmlu
ZyBsb2c7Ci0gICAgbV9jb250ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKGZyYWdtZW50U2hhZGVyKTsK
LSAgICBXVEZMb2coJkxvZ0NvbXBvc2l0aW5nLCAiJXNcbiIsIGxvZy5hc2NpaSgpLmRhdGEoKSk7
Ci0jZW5kaWYKLSAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIHZlcnRleFNo
YWRlcik7Ci0gICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNo
YWRlcik7Ci0gICAgbV9jb250ZXh0LT5saW5rUHJvZ3JhbShwcm9ncmFtSUQpOwotCi0gICAgbV92
ZXJ0ZXhBdHRyaWIgPSBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgImFf
dmVydGV4Iik7Ci0gICAgbV90ZXhDb29yZEF0dHJpYiA9IG1fY29udGV4dC0+Z2V0QXR0cmliTG9j
YXRpb24ocHJvZ3JhbUlELCAiYV90ZXhDb29yZCIpOwotICAgIG1fdGV4dHVyZVVuaWZvcm1Mb2Nh
dGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfdGV4dHVy
ZSIpOwotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZ
U0NBTEU6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgotICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpTQVRVUkFURToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFU
RToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgotICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpCUklHSFRORVNTOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoK
LSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAgbV91bmlmb3JtTG9j
YXRpb25zLmFtb3VudCA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwg
InVfYW1vdW50Iik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpC
TFVSOgotICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5yYWRpdXMgPSBtX2NvbnRleHQt
PmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2JsdXJSYWRpdXMiKTsKLSAgICAgICAg
bV91bmlmb3JtTG9jYXRpb25zLmJsdXIuZ2F1c3NpYW5LZXJuZWwgPSBtX2NvbnRleHQtPmdldFVu
aWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2dhdXNzaWFuS2VybmVsIik7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKLSAgICAgICAgbV91
bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzID0gbV9jb250ZXh0LT5nZXRVbmlmb3Jt
TG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dCbHVyUmFkaXVzIik7Ci0gICAgICAgIG1fdW5p
Zm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3NpYW5LZXJuZWwgPSBtX2NvbnRleHQtPmdldFVuaWZv
cm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2dhdXNzaWFuS2VybmVsIik7Ci0gICAgICAgIGlmICgh
cGFzcykKLSAgICAgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cub2Zmc2V0ID0gbV9j
b250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dPZmZzZXQiKTsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIGNvbG9yIGFu
ZCB0aGUgY29udGVudCB0ZXh0dXJlIGluIHRoZSBzZWNvbmQgcGFzcywgdGhlIGZpcnN0IHBhc3Mg
aXMgb25seSBhIGhvcml6b250YWwgYWxwaGEgYmx1ci4KLSAgICAgICAgICAgIG1fdW5pZm9ybUxv
Y2F0aW9ucy5zaGFkb3cuY29sb3IgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9n
cmFtSUQsICJ1X3NoYWRvd0NvbG9yIik7Ci0gICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMu
c2hhZG93LmNvbnRlbnRUZXh0dXJlID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJv
Z3JhbUlELCAidV9jb250ZW50VGV4dHVyZSIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBtX2lkID0gcHJvZ3JhbUlE
OwotICAgIG1fdmVydGV4U2hhZGVyID0gdmVydGV4U2hhZGVyOwotICAgIG1fZnJhZ21lbnRTaGFk
ZXIgPSBmcmFnbWVudFNoYWRlcjsKLX0KKyAgICAvLyBTZWNvbmQgcGFzczogdmVydGljYWwgYWxw
aGEgYmx1ciBhbmQgY29tcG9zaXRlIHdpdGggb3JpZ2luLgorICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBmcmFnbWVudFNoYWRvd0ZpbHRlcjIgPQorICAgICAgICBCTFVSX0NPTlNUQU5UUworICAgICAg
ICBTVFJJTkdJRlkoCisgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKKyAgICAg
ICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOworICAgICAgICAgICAgdW5pZm9y
bSBsb3dwIGZsb2F0IHVfYmx1clJhZGl1czsKKyAgICAgICAgICAgIHVuaWZvcm0gbG93cCB2ZWM0
IHVfc2hhZG93Q29sb3I7CisgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBsZXI7
CisgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX2NvbnRlbnRUZXh0dXJlOworICAgICAg
ICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFOX0tFUk5FTF9IQUxG
X1dJRFRIXTsKIAotUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IFN0YW5kYXJkRmls
dGVyUHJvZ3JhbTo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBGaWx0ZXJPcGVy
YXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKLXsKLSAgICBSZWZQdHI8
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBwcm9ncmFtID0gYWRvcHRSZWYobmV3IFN0YW5kYXJkRmls
dGVyUHJvZ3JhbShjb250ZXh0LCB0eXBlLCBwYXNzKSk7Ci0gICAgaWYgKCFwcm9ncmFtLT5tX2lk
KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGxvd3AgZmxvYXQgc2FtcGxlQWxwaGEo
ZmxvYXQgcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90
ZXhDb29yZCArIHZlYzIoMC4sIHIgKiB1X2JsdXJSYWRpdXMpOworICAgICAgICAgICAgICAgIHJl
dHVybiB0ZXh0dXJlMkQoc19zYW1wbGVyLCBjb29yZCkuYSAqIGZsb2F0KGNvb3JkLnggPiAwLiAm
JiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7CisgICAgICAg
ICAgICB9CiAKLSAgICByZXR1cm4gcHJvZ3JhbTsKLX0KKyAgICAgICAgICAgIGxvd3AgZmxvYXQg
c2hhZG93Qmx1clZlcnRpY2FsKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmbG9h
dCB0b3RhbCA9IHNhbXBsZUFscGhhKDAuKSAqIHVfZ2F1c3NpYW5LZXJuZWxbMF07CisgICAgICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsg
aSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhhKGZsb2F0KGkp
ICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKKyAgICAgICAg
ICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoLTEgKiBpKSAqIEdBVVNTSUFO
X0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07CisgICAgICAgICAgICAgICAgfQog
Ci1zdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNzKGZsb2F0IHgpCi17Ci0gICAgcmV0dXJuIGV4cCgt
KHggKiB4KSAvIDIuKTsKLX0KKyAgICAgICAgICAgICAgICByZXR1cm4gdG90YWw7CisgICAgICAg
ICAgICB9CiAKLXN0YXRpYyBmbG9hdCogZ2F1c3NpYW5LZXJuZWwoKQotewotICAgIHN0YXRpYyBi
b29sIHByZXBhcmVkID0gZmFsc2U7Ci0gICAgc3RhdGljIGZsb2F0IGtlcm5lbFtHQVVTU0lBTl9L
RVJORUxfSEFMRl9XSURUSF0gPSB7MCwgfTsKKyAgICAgICAgICAgIGxvd3AgdmVjNCBzb3VyY2VP
dmVyKGxvd3AgdmVjNCBzb3VyY2UsIGxvd3AgdmVjNCBkZXN0aW5hdGlvbikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAvLyBDb21wb3NpdGUgdGhlIHNoYWRvdyB3aXRoIHRoZSBvcmln
aW5hbCB0ZXh0dXJlLgorICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2UgKyBkZXN0aW5hdGlv
biAqICgxLiAtIHNvdXJjZS5hKTsKKyAgICAgICAgICAgIH0KIAotICAgIGlmIChwcmVwYXJlZCkK
LSAgICAgICAgcmV0dXJuIGtlcm5lbDsKKyAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHNvdXJjZU92ZXIodGV4
dHVyZTJEKHNfY29udGVudFRleHR1cmUsIHZfdGV4Q29vcmQpLCBzaGFkb3dCbHVyVmVydGljYWwo
KSAqIHVfc2hhZG93Q29sb3IpOworICAgICAgICAgICAgfQorICAgICAgICApOwogCi0gICAga2Vy
bmVsWzBdID0gZ2F1c3MoMCk7Ci0gICAgZmxvYXQgc3VtID0ga2VybmVsWzBdOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgKytpKSB7Ci0g
ICAgICAgIGtlcm5lbFtpXSA9IGdhdXNzKGkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCk7Ci0gICAg
ICAgIHN1bSArPSAyICoga2VybmVsW2ldOworICAgIGlmIChzcGVjcy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgc3BlY3MucmVzaXplKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpMYXN0RmlsdGVy
KTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkRlZmF1bHRdID0g
U2hhZGVyU3BlYyh2ZXJ0ZXhTaW1wbGUsIGZyYWdtZW50U2ltcGxlKTsKKyAgICAgICAgc3BlY3Nb
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNvbGlkQ29sb3JdID0gU2hhZGVyU3BlYyh2ZXJ0
ZXhTb2xpZENvbG9yLCBmcmFnbWVudFNvbGlkQ29sb3IpOworICAgICAgICBzcGVjc1tUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6UmVjdF0gPSBTaGFkZXJTcGVjKHZlcnRleFNpbXBsZSwgZnJh
Z21lbnRSZWN0U2ltcGxlKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6Ok1hc2tlZF0gPSBTaGFkZXJTcGVjKHZlcnRleE9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudE9w
YWNpdHlBbmRNYXNrKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
Ok1hc2tlZFJlY3RdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRS
ZWN0T3BhY2l0eUFuZE1hc2spOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6QW50aWFsaWFzZWRdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhTaW1wbGUsIGZyYWdtZW50QW50
aWFsaWFzaW5nTm9NYXNrKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6OkdyYXlzY2FsZUZpbHRlcl0gPSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRH
cmF5c2NhbGVGaWx0ZXIpOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6U2VwaWFGaWx0ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50U2VwaWFG
aWx0ZXIpOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2F0dXJh
dGVGaWx0ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50U2F0dXJhdGVGaWx0
ZXIpOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6SHVlUm90YXRl
RmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudEh1ZVJvdGF0ZUZpbHRl
cik7CisgICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpCcmlnaHRuZXNz
RmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudEJyaWdodG5lc3NGaWx0
ZXIpOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Q29udHJhc3RG
aWx0ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50Q29udHJhc3RGaWx0ZXIp
OworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6SW52ZXJ0RmlsdGVy
XSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudEludmVydEZpbHRlcik7CisgICAg
ICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5RmlsdGVyXSA9IFNo
YWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudE9wYWNpdHlGaWx0ZXIpOworICAgICAgICBz
cGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Qmx1ckZpbHRlcl0gPSBTaGFkZXJTcGVj
KHZlcnRleEZpbHRlciwgZnJhZ21lbnRCbHVyRmlsdGVyKTsKKyAgICAgICAgc3BlY3NbVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXI6OlNoYWRvd0ZpbHRlclBhc3MxXSA9IFNoYWRlclNwZWModmVy
dGV4RmlsdGVyLCBmcmFnbWVudFNoYWRvd0ZpbHRlcjEpOworICAgICAgICBzcGVjc1tUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6U2hhZG93RmlsdGVyUGFzczJdID0gU2hhZGVyU3BlYyh2ZXJ0
ZXhGaWx0ZXIsIGZyYWdtZW50U2hhZG93RmlsdGVyMik7CiAgICAgfQogCi0gICAgLy8gTm9ybWFs
aXplIHRoZSBrZXJuZWwKLSAgICBmbG9hdCBzY2FsZSA9IDEgLyBzdW07Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyArK2kpCi0gICAgICAg
IGtlcm5lbFtpXSAqPSBzY2FsZTsKLQotICAgIHByZXBhcmVkID0gdHJ1ZTsKLSAgICByZXR1cm4g
a2VybmVsOworICAgIEFTU0VSVChzcGVjcy5zaXplKCkgPiBrZXkpOworICAgIFNoYWRlclNwZWMm
IHNwZWMgPSBzcGVjc1trZXldOworICAgIHZlcnRleCA9IHNwZWMudmVydGV4U2hhZGVyOworICAg
IGZyYWdtZW50ID0gc3BlYy5mcmFnbWVudFNoYWRlcjsKIH0KIAotdm9pZCBTdGFuZGFyZEZpbHRl
clByb2dyYW06OnByZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24sIHVuc2ln
bmVkIHBhc3MsIGNvbnN0IEludFNpemUmIHNpemUsIEdDM0R1aW50IGNvbnRlbnRUZXh0dXJlKQor
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiB7Ci0g
ICAgbV9jb250ZXh0LT51c2VQcm9ncmFtKG1faWQpOwotICAgIHN3aXRjaCAob3BlcmF0aW9uLmdl
dE9wZXJhdGlvblR5cGUoKSkgewotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6
Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpTQVRVUkFURToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKLSAg
ICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCwgc3Rh
dGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlv
bikuYW1vdW50KCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
SU5WRVJUOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgotICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BB
Q0lUWToKLSAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLmFt
b3VudCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6QkxVUjogewotICAgICAgICBjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9u
JiBibHVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlv
bik7Ci0gICAgICAgIEZsb2F0U2l6ZSByYWRpdXM7Ci0KLSAgICAgICAgLy8gQmx1ciBpcyBkb25l
IGluIHR3byBwYXNzZXMsIGZpcnN0IGhvcml6b250YWxseSBhbmQgdGhlbiB2ZXJ0aWNhbGx5LiBU
aGUgc2FtZSBzaGFkZXIgaXMgdXNlZCBmb3IgYm90aC4KLSAgICAgICAgaWYgKHBhc3MpCi0gICAg
ICAgICAgICByYWRpdXMuc2V0SGVpZ2h0KGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ci5zdGREZXZp
YXRpb24oKSwgc2l6ZS5oZWlnaHQoKSkgLyBzaXplLmhlaWdodCgpKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgcmFkaXVzLnNldFdpZHRoKGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ci5zdGRE
ZXZpYXRpb24oKSwgc2l6ZS53aWR0aCgpKSAvIHNpemUud2lkdGgoKSk7Ci0KLSAgICAgICAgbV9j
b250ZXh0LT51bmlmb3JtMmYobV91bmlmb3JtTG9jYXRpb25zLmJsdXIucmFkaXVzLCByYWRpdXMu
d2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKTsKLSAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2
KG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxf
SEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAgY29uc3QgRHJv
cFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgc2hhZG93ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRHJvcFNo
YWRvd0ZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbik7Ci0gICAgICAgIHN3aXRjaCAocGFzcykg
ewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAvLyBGaXJzdCBwYXNzOiB2ZXJ0aWNhbCBh
bHBoYSBibHVyLgotICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMmYobV91bmlmb3JtTG9j
YXRpb25zLnNoYWRvdy5vZmZzZXQsIGZsb2F0KHNoYWRvdy5sb2NhdGlvbigpLngoKSkgLyBmbG9h
dChzaXplLndpZHRoKCkpLCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS55KCkpIC8gZmxvYXQoc2l6
ZS5oZWlnaHQoKSkpOwotICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWYobV91bmlmb3Jt
TG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9h
dChzaXplLndpZHRoKCkpKTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihtX3Vu
aWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFM
Rl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSAxOgotICAgICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHdlIG5lZWQgdGhlIHNoYWRvdyBj
b2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBmb3IgY29tcG9zaXRpbmcuCi0gICAgICAgICAg
ICBtX2NvbnRleHQtPnVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmJsdXJSYWRp
dXMsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKLSAgICAg
ICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93Lmdh
dXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwo
KSk7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkUxKTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbnRlbnRUZXh0dXJlKTsKLSAgICAgICAgICAgIG1f
Y29udGV4dC0+dW5pZm9ybTFpKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29udGVudFRleHR1
cmUsIDEpOwotICAgICAgICAgICAgZmxvYXQgciwgZywgYiwgYTsKLSAgICAgICAgICAgIHNoYWRv
dy5jb2xvcigpLmdldFJHQkEociwgZywgYiwgYSk7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnVu
aWZvcm00ZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbG9yLCByLCBnLCBiLCBhKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBk
ZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CiB9CiAKLVBhc3NSZWZQdHI8U3RhbmRhcmRG
aWx0ZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyRm9yRmls
dGVyKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgZmlsdGVyLCB1bnNpZ25lZCBwYXNzKQorVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXI6On5UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpCiB7Ci0g
ICAgUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbTsKLSAgICBGaWx0ZXJPcGVy
YXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSA9IGZpbHRlci5nZXRPcGVyYXRpb25UeXBlKCk7Ci0g
ICAgaW50IGtleSA9IGludCh0eXBlKSB8IChwYXNzIDw8IDE2KTsKLSAgICBGaWx0ZXJNYXA6Oml0
ZXJhdG9yIGl0ZXJhdG9yID0gbV9maWx0ZXJNYXAuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRv
ciA9PSBtX2ZpbHRlck1hcC5lbmQoKSkgewotICAgICAgICBwcm9ncmFtID0gU3RhbmRhcmRGaWx0
ZXJQcm9ncmFtOjpjcmVhdGUobV9jb250ZXh0LCB0eXBlLCBwYXNzKTsKLSAgICAgICAgaWYgKCFw
cm9ncmFtKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgbV9maWx0ZXJNYXAuYWRk
KGtleSwgcHJvZ3JhbSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHByb2dyYW0gPSBpdGVyYXRvci0+
c2Vjb25kOwotCi0gICAgcmV0dXJuIHByb2dyYW07CiB9CiAKLXVuc2lnbmVkIFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpnZXRQYXNzZXNSZXF1aXJlZEZvckZpbHRlcihjb25zdCBGaWx0ZXJP
cGVyYXRpb24mIG9wZXJhdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0+IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9ncmFtKFNo
YWRlcktleSBrZXkpCiB7Ci0gICAgc3dpdGNoIChvcGVyYXRpb24uZ2V0T3BlcmF0aW9uVHlwZSgp
KSB7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKLSAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6U0VQSUE6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgot
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgotICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpJTlZFUlQ6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6Ci0g
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpPUEFDSVRZOgotICAgICAgICByZXR1cm4gMTsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6QkxVUjoKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6Ci0gICAgICAg
IC8vIFdlIHVzZSB0d28tcGFzc2VzICh2ZXJ0aWNhbCtob3Jpem9udGFsKSBmb3IgYmx1ciBhbmQg
ZHJvcC1zaGFkb3cuCi0gICAgICAgIHJldHVybiAyOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDo6aXRlcmF0
b3IgaXQgPSBtX3Byb2dyYW1zLmZpbmQoa2V5KTsKKyAgICBpZiAoaXQgIT0gbV9wcm9ncmFtcy5l
bmQoKSkKKyAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CiAKKyAgICBTdHJpbmcgdmVydGV4U2hh
ZGVyOworICAgIFN0cmluZyBmcmFnbWVudFNoYWRlcjsKKyAgICBnZXRTaGFkZXJTcGVjKGtleSwg
dmVydGV4U2hhZGVyLCBmcmFnbWVudFNoYWRlcik7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmNyZWF0
ZShtX2NvbnRleHQsIHZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIpOworICAgIG1fcHJvZ3Jh
bXMuYWRkKGtleSwgcHJvZ3JhbSk7CisgICAgcmV0dXJuIHByb2dyYW07CiB9Ci0KLSNlbmRpZgog
fTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCmluZGV4
IDFmZmI3MTAuLjZiOTZjOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5oCkBAIC0yMSwyMzMgKzIxLDEwMiBAQAogI2lmbmRlZiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcl9oCiAjZGVmaW5lIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyX2gKIAotI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotCi0jaW5jbHVk
ZSAiRmxvYXRRdWFkLmgiCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJHTC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCi0jaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgotI2VuZGlmCisjaW5j
bHVkZSA8U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQml0bWFwVGV4
dHVyZTsKLWNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOworI2RlZmluZSBURVhNQVBf
REVDTEFSRV9WQVJJQUJMRShBY2Nlc3NvciwgTmFtZSwgVHlwZSkgR0MzRHVpbnQgQWNjZXNzb3Ij
I0xvY2F0aW9uKCkgeyByZXR1cm4gZ2V0TG9jYXRpb24oTmFtZSwgVHlwZSk7IH0KKyNkZWZpbmUg
VEVYTUFQX0RFQ0xBUkVfVU5JRk9STShBY2Nlc3NvcikgVEVYTUFQX0RFQ0xBUkVfVkFSSUFCTEUo
QWNjZXNzb3IsICJ1XyIjQWNjZXNzb3IsIFVuaWZvcm1WYXJpYWJsZSkKKyNkZWZpbmUgVEVYTUFQ
X0RFQ0xBUkVfQVRUUklCVVRFKEFjY2Vzc29yKSBURVhNQVBfREVDTEFSRV9WQVJJQUJMRShBY2Nl
c3NvciwgImFfIiNBY2Nlc3NvciwgQXR0cmliVmFyaWFibGUpCisjZGVmaW5lIFRFWE1BUF9ERUNM
QVJFX1NBTVBMRVIoQWNjZXNzb3IpIFRFWE1BUF9ERUNMQVJFX1ZBUklBQkxFKEFjY2Vzc29yLCAi
c18iI0FjY2Vzc29yLCBVbmlmb3JtVmFyaWFibGUpCiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtIDogcHVibGljIFJlZkNvdW50ZWQ8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+
IHsKIHB1YmxpYzoKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGlkKCkgeyByZXR1cm4gbV9pZDsgfQot
ICAgIEdDM0R1aW50IHZlcnRleEF0dHJpYigpIHsgcmV0dXJuIG1fdmVydGV4QXR0cmliOyB9Cisg
ICAgUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtSUQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9Cisg
ICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7
IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gY3Jl
YXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIGNvbnN0IFN0cmluZyYg
dmVydGV4LCBjb25zdCBTdHJpbmcmIGZyYWdtZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXgsIGZy
YWdtZW50KSk7CisgICAgfQogCi0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oR3JhcGhp
Y3NDb250ZXh0M0QqLCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIq
IGZyYWdtZW50U2hhZGVyU291cmNlKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbSgpOwogCi0gICAgdmlydHVhbCB2b2lkIHByZXBhcmUoZmxvYXQgb3BhY2l0eSwgY29u
c3QgQml0bWFwVGV4dHVyZSopIHsgfQotICAgIEdDM0RpbnQgbWF0cml4TG9jYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX21hdHJpeExvY2F0aW9uOyB9Ci0gICAgR0MzRGludCBmbGlwTG9jYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2ZsaXBMb2NhdGlvbjsgfQotICAgIEdDM0RpbnQgdGV4dHVyZVNp
emVMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZVNpemVMb2NhdGlvbjsgfQotICAg
IEdDM0RpbnQgc291cmNlVGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VU
ZXh0dXJlTG9jYXRpb247IH0KLSAgICBHQzNEaW50IG1hc2tUZXh0dXJlTG9jYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX21hc2tUZXh0dXJlTG9jYXRpb247IH0KLSAgICBHQzNEaW50IG9wYWNpdHlM
b2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eUxvY2F0aW9uOyB9Ci0KLSAgICBzdGF0
aWMgYm9vbCBpc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKEdDM0RpbnQgbG9jYXRpb24pIHsgcmV0dXJu
IGxvY2F0aW9uID49IDA7IH0KLQotcHJvdGVjdGVkOgotICAgIHZvaWQgZ2V0VW5pZm9ybUxvY2F0
aW9uKEdDM0RpbnQmIHZhciwgY29uc3QgY2hhciogbmFtZSk7Ci0gICAgdm9pZCBpbml0aWFsaXpl
UHJvZ3JhbSgpOwotICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKCkgeyB9Ci0gICAgY29uc3Qg
Y2hhciogdmVydGV4U2hhZGVyU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhTaGFkZXJT
b3VyY2UuZGF0YSgpOyB9Ci0gICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UoKSBj
b25zdCB7IHJldHVybiBtX2ZyYWdtZW50U2hhZGVyU291cmNlLmRhdGEoKTsgfQorICAgIFRFWE1B
UF9ERUNMQVJFX0FUVFJJQlVURSh2ZXJ0ZXgpCisgICAgVEVYTUFQX0RFQ0xBUkVfQVRUUklCVVRF
KHRleENvb3JkKQogCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKLSAgICBQbGF0
Zm9ybTNET2JqZWN0IG1faWQ7Ci0gICAgR0MzRHVpbnQgbV92ZXJ0ZXhBdHRyaWI7Ci0gICAgUGxh
dGZvcm0zRE9iamVjdCBtX3ZlcnRleFNoYWRlcjsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZnJh
Z21lbnRTaGFkZXI7Ci0gICAgR0MzRGludCBtX21hdHJpeExvY2F0aW9uOwotICAgIEdDM0RpbnQg
bV9mbGlwTG9jYXRpb247Ci0gICAgR0MzRGludCBtX3RleHR1cmVTaXplTG9jYXRpb247Ci0gICAg
R0MzRGludCBtX3NvdXJjZVRleHR1cmVMb2NhdGlvbjsKLSAgICBHQzNEaW50IG1fb3BhY2l0eUxv
Y2F0aW9uOwotICAgIEdDM0RpbnQgbV9tYXNrVGV4dHVyZUxvY2F0aW9uOwotCi1wcml2YXRlOgot
ICAgIENTdHJpbmcgbV92ZXJ0ZXhTaGFkZXJTb3VyY2U7Ci0gICAgQ1N0cmluZyBtX2ZyYWdtZW50
U2hhZGVyU291cmNlOwotfTsKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKG1hdHJpeCkKKyAg
ICBURVhNQVBfREVDTEFSRV9VTklGT1JNKGZsaXApCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9S
TSh0ZXh0dXJlU2l6ZSkKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKG9wYWNpdHkpCisgICAg
VEVYTUFQX0RFQ0xBUkVfVU5JRk9STShjb2xvcikKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JN
KGV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZSkKKyAgICBURVhNQVBfREVDTEFSRV9TQU1Q
TEVSKHNhbXBsZXIpCisgICAgVEVYTUFQX0RFQ0xBUkVfU0FNUExFUihtYXNrKQogCiAjaWYgRU5B
QkxFKENTU19GSUxURVJTKQotY2xhc3MgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtIDogcHVibGljIFJl
ZkNvdW50ZWQ8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKCk7Ci0gICAgdmlydHVhbCB2b2lkIHByZXBhcmUoY29uc3Qg
RmlsdGVyT3BlcmF0aW9uJiwgdW5zaWduZWQgcGFzcywgY29uc3QgSW50U2l6ZSYsIEdDM0R1aW50
IGNvbnRlbnRUZXh0dXJlKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRlclBy
b2dyYW0+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCosIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0
aW9uVHlwZSwgdW5zaWduZWQgcGFzcyk7Ci0gICAgR0MzRHVpbnQgdmVydGV4QXR0cmliKCkgY29u
c3QgeyByZXR1cm4gbV92ZXJ0ZXhBdHRyaWI7IH0KLSAgICBHQzNEdWludCB0ZXhDb29yZEF0dHJp
YigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4Q29vcmRBdHRyaWI7IH0KLSAgICBHQzNEdWludCB0ZXh0
dXJlVW5pZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlvbjsgfQot
cHJvdGVjdGVkOgotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7Ci1wcml2YXRlOgot
ICAgIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbSgpOwotICAgIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbShH
cmFwaGljc0NvbnRleHQzRCosIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgdW5zaWdu
ZWQgcGFzcyk7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2lkOwotICAgIFBsYXRmb3JtM0RPYmpl
Y3QgbV92ZXJ0ZXhTaGFkZXI7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZyYWdtZW50U2hhZGVy
OwotICAgIEdDM0R1aW50IG1fdmVydGV4QXR0cmliOwotICAgIEdDM0R1aW50IG1fdGV4Q29vcmRB
dHRyaWI7Ci0gICAgR0MzRHVpbnQgbV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uOwotICAgIHVuaW9u
IHsKLSAgICAgICAgR0MzRHVpbnQgYW1vdW50OwotCi0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAg
ICAgICBHQzNEdWludCByYWRpdXM7Ci0gICAgICAgICAgICBHQzNEdWludCBnYXVzc2lhbktlcm5l
bDsKLSAgICAgICAgfSBibHVyOwotCi0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBHQzNE
dWludCBibHVyUmFkaXVzOwotICAgICAgICAgICAgR0MzRHVpbnQgY29sb3I7Ci0gICAgICAgICAg
ICBHQzNEdWludCBvZmZzZXQ7Ci0gICAgICAgICAgICBHQzNEdWludCBjb250ZW50VGV4dHVyZTsK
LSAgICAgICAgICAgIEdDM0R1aW50IGdhdXNzaWFuS2VybmVsOwotICAgICAgICB9IHNoYWRvdzsK
LSAgICB9IG1fdW5pZm9ybUxvY2F0aW9uczsKLX07CisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9S
TShhbW91bnQpCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShnYXVzc2lhbktlcm5lbCkKKyAg
ICBURVhNQVBfREVDTEFSRV9VTklGT1JNKGJsdXJSYWRpdXMpCisgICAgVEVYTUFQX0RFQ0xBUkVf
VU5JRk9STShzaGFkb3dDb2xvcikKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKHNoYWRvd09m
ZnNldCkKKyAgICBURVhNQVBfREVDTEFSRV9TQU1QTEVSKGNvbnRlbnRUZXh0dXJlKQogI2VuZGlm
CiAKLWNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlIDogcHVibGljIFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZT4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVNpbXBsZShjb250ZXh0KSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0g
ICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoR3JhcGhpY3NDb250ZXh0M0QqKTsK
LXByaXZhdGU6Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKTsKLX07Ci0K
LWNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSA6IHB1YmxpYyBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlPiBjcmVhdGUoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZShjb250ZXh0KSk7Ci0gICAgfQotCi1wcm90
ZWN0ZWQ6Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlKEdyYXBoaWNz
Q29udGV4dDNEKik7CiBwcml2YXRlOgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVj
dFNpbXBsZSgpOwotfTsKLQotY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5
QW5kTWFzayA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5k
TWFzaz4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRN
YXNrKGNvbnRleHQpKTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKEdyYXBoaWNzQ29udGV4dDNEKik7Ci1wcml2YXRlOgot
ICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soKTsKLX07Ci0KLWNs
YXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrIDogcHVibGlj
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaz4gY3JlYXRl
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayhjb250
ZXh0KSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1SZWN0T3BhY2l0eUFuZE1hc2soR3JhcGhpY3NDb250ZXh0M0QqKTsKLXByaXZhdGU6Ci0gICAg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soKTsKLX07Ci0KLWNs
YXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvciA6IHB1YmxpYyBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcihjb250ZXh0KSk7Ci0gICAgfQotCi0gICAgR0Mz
RGludCBjb2xvckxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvckxvY2F0aW9uOyB9Ci0K
LXByb3RlY3RlZDoKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoR3Jh
cGhpY3NDb250ZXh0M0QqKTsKLXByaXZhdGU6Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1Tb2xpZENvbG9yKCk7Ci0gICAgR0MzRGludCBtX2NvbG9yTG9jYXRpb247Ci19OwotCi1jbGFz
cyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayA6IHB1YmxpYyBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s+IGNyZWF0ZShH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2soY29udGV4
dCkpOwotICAgIH0KLQotICAgIEdDM0RpbnQgZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVD
b29yZGluYXRlc0xvY2F0aW9uKCkgeyByZXR1cm4gbV9leHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4
dHVyZUNvcmRpbmF0ZXNMb2NhdGlvbjsgfQotICAgIEdDM0RpbnQgZXhwYW5kZWRRdWFkRWRnZXNJ
blNjcmVlblNwYWNlTG9jYXRpb24oKSB7IHJldHVybiBtX2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3Jl
ZW5TcGFjZUxvY2F0aW9uOyB9CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oUGFzc1Jl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIGNvbnN0IFN0cmluZyYgdmVydGV4U2hhZGVyU291cmNl
LCBjb25zdCBTdHJpbmcmIGZyYWdtZW50U2hhZGVyU291cmNlKTsKKyAgICBQbGF0Zm9ybTNET2Jq
ZWN0IG1fdmVydGV4U2hhZGVyOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mcmFnbWVudFNoYWRl
cjsKIAotcHJvdGVjdGVkOgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFz
aW5nTm9NYXNrKEdyYXBoaWNzQ29udGV4dDNEKik7Ci1wcml2YXRlOgotICAgIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrKCk7CisgICAgZW51bSBWYXJpYWJsZVR5
cGUgeyBVbmlmb3JtVmFyaWFibGUsIEF0dHJpYlZhcmlhYmxlIH07CisgICAgR0MzRHVpbnQgZ2V0
TG9jYXRpb24oY29uc3QgY2hhciosIFZhcmlhYmxlVHlwZSk7CiAKLSAgICBHQzNEaW50IG1fZXhw
YW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb3JkaW5hdGVzTG9jYXRpb247Ci0gICAgR0MzRGlu
dCBtX2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uOworICAgIFJlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9pZDsK
KyAgICBIYXNoTWFwPGNvbnN0IGNoYXIqLCBHQzNEdWludD4gbV92YXJpYWJsZXM7CiB9OwogCiBj
bGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlciB7CiBwdWJsaWM6Ci0gICAgZW51bSBTaGFk
ZXJUeXBlIHsKLSAgICAgICAgSW52YWxpZCA9IDAsIC8vIEhhc2hNYXBzIGRvIG5vdCBsaWtlIDAg
YXMgYSBrZXkuCi0gICAgICAgIFNpbXBsZSwKLSAgICAgICAgQW50aWFsaWFzaW5nTm9NYXNrLAot
ICAgICAgICBSZWN0U2ltcGxlLAotICAgICAgICBPcGFjaXR5QW5kTWFzaywKLSAgICAgICAgUmVj
dE9wYWNpdHlBbmRNYXNrLAotICAgICAgICBTb2xpZENvbG9yCisgICAgZW51bSBTaGFkZXJLZXkg
eworICAgICAgICBJbnZhbGlkID0gMCwKKyAgICAgICAgRGVmYXVsdCwKKyAgICAgICAgUmVjdCwK
KyAgICAgICAgTWFza2VkLAorICAgICAgICBNYXNrZWRSZWN0LAorICAgICAgICBTb2xpZENvbG9y
LAorICAgICAgICBBbnRpYWxpYXNlZCwKKyAgICAgICAgR3JheXNjYWxlRmlsdGVyLAorICAgICAg
ICBTZXBpYUZpbHRlciwKKyAgICAgICAgU2F0dXJhdGVGaWx0ZXIsCisgICAgICAgIEh1ZVJvdGF0
ZUZpbHRlciwKKyAgICAgICAgQnJpZ2h0bmVzc0ZpbHRlciwKKyAgICAgICAgQ29udHJhc3RGaWx0
ZXIsCisgICAgICAgIE9wYWNpdHlGaWx0ZXIsCisgICAgICAgIEludmVydEZpbHRlciwKKyAgICAg
ICAgQmx1ckZpbHRlciwKKyAgICAgICAgU2hhZG93RmlsdGVyUGFzczEsCisgICAgICAgIFNoYWRv
d0ZpbHRlclBhc3MyLAorICAgICAgICBMYXN0RmlsdGVyCiAgICAgfTsKIAogICAgIFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyKCkgeyB9CiAgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIo
R3JhcGhpY3NDb250ZXh0M0QqKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcigpOwogCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHVuc2lnbmVkIGdldFBhc3Nl
c1JlcXVpcmVkRm9yRmlsdGVyKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYpIGNvbnN0OwotICAgIFBh
c3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBnZXRTaGFkZXJGb3JGaWx0ZXIoY29uc3Qg
RmlsdGVyT3BlcmF0aW9uJiwgdW5zaWduZWQgcGFzcyk7Ci0jZW5kaWYKLQotICAgIFBhc3NSZWZQ
dHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IGdldFNoYWRlclByb2dyYW0oU2hhZGVyVHlw
ZSk7Ci0gICAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I+
IHNvbGlkQ29sb3JQcm9ncmFtKCk7Ci0gICAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzaz4gYW50aWFsaWFzaW5nTm9NYXNrUHJvZ3JhbSgpOwor
ICAgIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IGdldFNoYWRlclByb2dy
YW0oU2hhZGVyS2V5KTsKIAogcHJpdmF0ZToKLSAgICB0eXBlZGVmIEhhc2hNYXA8U2hhZGVyVHlw
ZSwgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiwgRGVmYXVsdEhhc2g8aW50Pjo6
SGFzaCwgSGFzaFRyYWl0czxpbnQ+ID4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA7Ci0g
ICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAgbV90ZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbU1hcDsKLSAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwotCi0jaWYgRU5BQkxF
KENTU19GSUxURVJTKQotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxTdGFuZGFyZEZp
bHRlclByb2dyYW0+ID4gRmlsdGVyTWFwOwotICAgIEZpbHRlck1hcCBtX2ZpbHRlck1hcDsKLSNl
bmRpZgorICAgIHR5cGVkZWYgSGFzaE1hcDxTaGFkZXJLZXksIFJlZlB0cjxUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbT4sIERlZmF1bHRIYXNoPGludD46Okhhc2gsIEhhc2hUcmFpdHM8aW50PiA+
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtTWFwIG1fcHJvZ3JhbXM7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2Nv
bnRleHQ7CiB9OwogCiB9Ci0KICNlbmRpZgogCiAjZW5kaWYgLy8gVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXJfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167641</attachid>
            <date>2012-10-08 16:31:12 -0700</date>
            <delta_ts>2012-10-08 16:42:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>81191</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmNTE4MjliLi45Yzc2YTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjQg
QEAKKzIwMTItMTAtMDggIE5vYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29t
PgorCisgICAgICAgIFtUZXhtYXBdIFJlZmFjdG9yIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
IHRvIGJlIGNsZWFyZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTg2MDQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUHJldmlvdXMgaW1wbGVtZW50YXRpb24gb2YgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXIgd2FzIHZlcnkgdmVyYm9zZSwgY2FsbGluZyBmb3IgdG9vCisgICAgICAgIG1hbnkgY2FzdHMg
YW5kIGFtYmlndW91cyBvd25lcnNoaXAuCisgICAgICAgIFRoaXMgcmVmYWN0b3IgZG9lcyB0aGUg
Zm9sbG93aW5nOgorICAgICAgICAxLiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSBpcyBvbmUg
Y2xhc3Mgd2l0aG91dCBzdWJjbGFzc2VzLgorICAgICAgICAyLiBVbmlmb3JtL0F0dHJpYnV0ZSBh
Y2Nlc3NvcnMgYXJlIGdlbmVyYXRlZCBieSBzcGVjaWFsIG1hY3JvcyAoVEVYTUFQX0RFQ0xBUkVf
Li4uKSB0aGF0CisgICAgICAgICAgIGdlbmVyYXRlIGJvdGggdGhlIEMrKyBhY2Nlc3MgZnVuY3Rp
b24sIGFzIHdlbGwgYXMgdGhlIEdMU0wgbmFtZSBvZiB0aGUgdmFyaWFibGUuIFRoaXMKKyAgICAg
ICAgICAgYWxsb3dzIGFkZGluZy9yZW1vdmluZyB2YXJpYWJsZXMgZnJvbSBhIHNoYWRlciB3aXRo
b3V0IGFkZGluZyBicm9pbGVyLXBsYXRlIGNvZGUgbGlrZQorICAgICAgICAgICBiZWZvcmUuCisK
KyAgICAgICAgQWZ0ZXIgdGhpcyBjaGFuZ2UgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgaGFz
IG9ubHkgb25lIHJlc3BvbnNpYmlsaXR5IC0gZGVhbGluZyB3aXRoCisgICAgICAgIFRleHR1cmVN
YXBwZXJHTCdzIGJ1aWx0LWluIHNoYWRlcnMgYW5kIHRoZWlyIGxpZmVjeWNsZS4gUHJlcGFyaW5n
IGZpbHRlcnMgZXRjLiBpcyBkb25lCisgICAgICAgIGluIFRleHR1cmVNYXBwZXJHTC4KKworICAg
ICAgICBUaGlzIGlzIGEgcmVmYWN0b3Igd2l0aG91dCBuZXcgZnVuY3Rpb25hbGl0eS4gSXQgaGFz
IGJlZW4gdmVyaWZpZWQgdG8gbm90IGJyZWFrIGFueSBleGlzdGluZworICAgICAgICByZWxldmFu
dCB0ZXN0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3UXVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJCKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZWRRdWFkV2l0aFBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXApOgor
ICAgICAgICAgICAgVXNlIHRoZSBNQUNSTy1nZW5lcmF0ZWQgdW5pZm9ybSBhY2Nlc3NvcnMuCisK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6a2V5Rm9yRmlsdGVyVHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpnZXRQYXNzZXNSZXF1aXJlZEZvckZpbHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpnYXVzcyk6CisgICAgICAgIChXZWJDb3JlOjpnYXVzc2lhbktlcm5lbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpwcmVwYXJlRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdGaWx0ZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBUZXh0dXJlR0w6OmFwcGx5RmlsdGVycyk6CisgICAgICAgICAgICBNb3ZlIHRoZSBmaWx0ZXIg
bG9naWMgdG8gVGV4dHVyZU1hcHBlckdMCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpnZXRMb2NhdGlv
bik6CisgICAgICAgIChTaGFkZXJTcGVjKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRlclNwZWM6
OlNoYWRlclNwZWMpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U2hhZGVyU3BlYyk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
On5UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyUHJvZ3JhbSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
Ojpwcm9ncmFtSUQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OmNyZWF0ZSk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisgICAg
ICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcik6CisgICAgICAgICAgICBTZWUgZGVzY3Jp
cHRpb24uCisKIDIwMTItMTAtMDUgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBTVkcgcmFkaWFsR3JhZGllbnQgc2hvdWxkIHN1cHBvcnQgJ2ZyJyBmb3IgZm9jYWwg
cmFkaXVzIChqdXN0IGxpa2UgQ2FudmFzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCA4ZjBj
NjhkLi44MTEwZDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMjMsNiArMjMsNyBAQAog
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNs
dWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2lu
Y2x1ZGUgIlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIK
QEAgLTI2Niw3ICsyNjcsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZW5kUGFpbnRpbmcoKQog
CiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmIHF1YWRUb0Ry
YXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtKiBzaGFkZXJQcm9ncmFtLCBHQzNEZW51bSBkcmF3aW5nTW9kZSwg
Ym9vbCBuZWVkc0JsZW5kaW5nKQogewotICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0Qt
PmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkp
OwogICAgIG1fY29udGV4dDNELT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9C
VUZGRVIsIDApOwogCiAgICAgY29uc3QgR0MzRGZsb2F0IHF1YWRbXSA9IHsKQEAgLTI3NSw3ICsy
NzYsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmIHF1
YWRUb0RyYXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTQogICAgICAgICBxdWFkVG9EcmF3LnRhcmdl
dFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDMoKS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1h
cHBlZFRvVW5pdFNxdWFyZS5wMygpLnkoKSwKICAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0
TWFwcGVkVG9Vbml0U3F1YXJlLnA0KCkueCgpLCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRU
b1VuaXRTcXVhcmUucDQoKS55KCkKICAgICB9OwotICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRy
aWJQb2ludGVyKHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigpLCAyLCBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHF1YWQpKTsKKyAgICBtX2NvbnRleHQz
RC0+dmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCAy
LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHF1YWQpKTsK
IAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4
KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KS5tdWx0aXBseShtb2RlbFZpZXdNYXRyaXgpLm11bHRp
cGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4KAogICAgICAgICAgICAgcXVhZFRvRHJhdy5vcmlnaW5h
bFRhcmdldFJlY3Qud2lkdGgoKSwgMCwgMCwgMCwKQEAgLTI5Nyw3ICsyOTgsNyBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJHTDo6ZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmIHF1YWRUb0RyYXcsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTQogICAgICAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkQpOwogCiAgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMoZHJhd2luZ01v
ZGUsIDAsIDQpOwotICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoc2hh
ZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7CiB9CiAKIHZv
aWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQg
d2lkdGgsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1vZGVsVmlld01hdHJpeCkKQEAgLTMwNSwxNSArMzA2LDEyIEBAIHZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgd2lkdGgsIGNv
bnN0IEZsb2F0UmVjCiAgICAgaWYgKGNsaXBTdGFjaygpLmN1cnJlbnQoKS5zY2lzc29yQm94Lmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtU29saWRDb2xvcj4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5zb2xpZENvbG9yUHJvZ3JhbSgpOwotICAgIG1fY29udGV4
dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpTb2xpZENvbG9yKTsKKyAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5w
cm9ncmFtSUQoKSk7CiAKLSAgICBmbG9hdCBhbHBoYSA9IGNvbG9yLmFscGhhKCkgLyAyNTUuMDsK
LSAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgKGNvbG9yLnJlZCgpIC8gMjU1LjApICogYWxwaGEsCi0gICAg
ICAgICAgICAgICAgICAgICAgIChjb2xvci5ncmVlbigpIC8gMjU1LjApICogYWxwaGEsCi0gICAg
ICAgICAgICAgICAgICAgICAgIChjb2xvci5ibHVlKCkgLyAyNTUuMCkgKiBhbHBoYSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgYWxwaGEpOworICAgIGZsb2F0IHIsIGcsIGIsIGE7CisgICAgY29s
b3IuZ2V0UkdCQShyLCBnLCBiLCBhKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTRmKHByb2dy
YW0tPmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgbV9jb250ZXh0M0QtPmxpbmVX
aWR0aCh3aWR0aCk7CiAKICAgICBkcmF3UXVhZCh0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgs
IHByb2dyYW0uZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1AsIGNvbG9yLmhhc0Fs
cGhhKCkpOwpAQCAtMzY4LDI3ICszNjYsMjUgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdU
ZXh0dXJlUmVjdGFuZ2xlQVJCKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb24KIHsK
ICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW07CiAgICAgaWYg
KG1hc2tUZXh0dXJlKQotICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OlJlY3RPcGFjaXR5QW5kTWFzayk7CisgICAgICAgIHByb2dyYW0gPSBkYXRh
KCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJv
Z3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6TWFza2VkUmVjdCk7CiAgICAgZWxzZQot
ICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJl
Y3RTaW1wbGUpOwotICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOwor
ICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJl
Y3QpOworICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsK
IAotICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0
ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHBy
b2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwogICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgdGV4dHVyZSk7Ci0gICAgbV9jb250ZXh0M0Qt
PnVuaWZvcm0xaShwcm9ncmFtLT5zb3VyY2VUZXh0dXJlTG9jYXRpb24oKSwgMCk7CisgICAgbV9j
b250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5zYW1wbGVyTG9jYXRpb24oKSwgMCk7CiAKICAg
ICBtX2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPmZsaXBMb2NhdGlvbigpLCAhIShmbGFn
cyAmIFNob3VsZEZsaXBUZXh0dXJlKSk7CiAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0yZihwcm9n
cmFtLT50ZXh0dXJlU2l6ZUxvY2F0aW9uKCksIHRleHR1cmVTaXplLndpZHRoKCksIHRleHR1cmVT
aXplLmhlaWdodCgpKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPm9wYWNp
dHlMb2NhdGlvbigpLCBvcGFjaXR5KTsKIAotICAgIGlmIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSkp
Ci0gICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9u
KCksIG9wYWNpdHkpOwotCi0gICAgaWYgKG1hc2tUZXh0dXJlICYmIG1hc2tUZXh0dXJlLT5pc1Zh
bGlkKCkgJiYgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRp
b24ocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpKSkgeworICAgIGlmIChtYXNrVGV4dHVy
ZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpKSB7CiAgICAgICAgIGNvbnN0IEJpdG1hcFRleHR1
cmVHTCogbWFza1RleHR1cmVHTCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCo+
KG1hc2tUZXh0dXJlKTsKICAgICAgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkUxKTsKICAgICAgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtYXNrVGV4dHVyZUdMLT5pZCgpKTsKLSAg
ICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9u
KCksIDEpOworICAgICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPm1hc2tMb2Nh
dGlvbigpLCAxKTsKICAgICAgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkUwKTsKICAgICB9CiAKQEAgLTQwNSwxMCArNDAxLDEwIEBAIHZvaWQg
VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFn
cywgY29uc3QgSW50U2l6ZSYKIAogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bT4gcHJvZ3JhbTsKICAgICBpZiAobWFza1RleHR1cmUpCi0gICAgICAgIHByb2dyYW0gPSBkYXRh
KCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJv
Z3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3BhY2l0eUFuZE1hc2spOworICAgICAg
ICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok1hc2tlZCk7
CiAgICAgZWxzZQotICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OlNpbXBsZSk7Ci0gICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+
aWQoKSk7CisgICAgICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6RGVmYXVsdCk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJv
Z3JhbUlEKCkpOwogCiAgICAgZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKHByb2dyYW0uZ2V0
KCksIHRleHR1cmUsIGZsYWdzLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHks
IG1hc2tUZXh0dXJlKTsKIH0KQEAgLTUzNiw4ICs1MzIsOCBAQCBib29sIFRleHR1cmVNYXBwZXJH
TDo6ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZs
YWdzLAogICAgIHF1YWRUb0VkZ2VBcnJheShleHBhbmRlZFF1YWRJblNjcmVlblNwYWNlLCB0YXJn
ZXRRdWFkRWRnZXMpOwogICAgIHF1YWRUb0VkZ2VBcnJheShpbmZsYXRlUXVhZChxdWFkSW5TY3Jl
ZW5TcGFjZS5ib3VuZGluZ0JveCgpLCAgaW5mbGF0aW9uRGlzdGFuY2UpLCB0YXJnZXRRdWFkRWRn
ZXMgKyAxMik7CiAKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxp
YXNpbmdOb01hc2s+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuYW50aWFsaWFzaW5nTm9NYXNrUHJvZ3JhbSgpOwotICAgIG1fY29udGV4
dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpBbnRpYWxpYXNlZCk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+
cHJvZ3JhbUlEKCkpOwogICAgIG1fY29udGV4dDNELT51bmlmb3JtM2Z2KHByb2dyYW0tPmV4cGFu
ZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uKCksIDgsIHRhcmdldFF1YWRFZGdlcyk7
CiAKICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgdGV4dHVy
ZSwgZmxhZ3MsIERyYXdRdWFkKG9yaWdpbmFsVGFyZ2V0UmVjdCwgZXhwYW5kZWRRdWFkSW5UZXh0
dXJlQ29vcmRpbmF0ZXMpLCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIDAgLyogbWFza1RleHR1
cmUgKi8pOwpAQCAtNTQ2LDIxICs1NDIsMTkgQEAgYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdU
ZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywKIAog
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbSogcHJvZ3JhbSwgdWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxh
Z3MsIGNvbnN0IERyYXdRdWFkJiBxdWFkVG9EcmF3LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBt
YXNrVGV4dHVyZSkKIHsKLSAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXko
cHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKICAgICBtX2NvbnRleHQzRC0+
YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwogICAgIG1fY29udGV4
dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZSk7
Ci0gICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5zb3VyY2VUZXh0dXJlTG9jYXRp
b24oKSwgMCk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5zYW1wbGVyTG9j
YXRpb24oKSwgMCk7CiAKICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPmZsaXBM
b2NhdGlvbigpLCAhIShmbGFncyAmIFNob3VsZEZsaXBUZXh0dXJlKSk7CisgICAgbV9jb250ZXh0
M0QtPnVuaWZvcm0xZihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSwgb3BhY2l0eSk7CiAKLSAg
ICBpZiAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24o
cHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCkpKQotICAgICAgICBtX2NvbnRleHQzRC0+dW5pZm9y
bTFmKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpLCBvcGFjaXR5KTsKLQotICAgIGlmIChtYXNr
VGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpICYmIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjppc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRp
b24oKSkpIHsKKyAgICBpZiAobWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQoKSkg
ewogICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wqIG1hc2tUZXh0dXJlR0wgPSBzdGF0aWNf
Y2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wqPihtYXNrVGV4dHVyZSk7CiAgICAgICAgIG1fY29u
dGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSk7CiAgICAg
ICAgIG1fY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgbWFza1RleHR1cmVHTC0+aWQoKSk7Ci0gICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWko
cHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpLCAxKTsKKyAgICAgICAgbV9jb250ZXh0M0Qt
PnVuaWZvcm0xaShwcm9ncmFtLT5tYXNrTG9jYXRpb24oKSwgMSk7CiAgICAgICAgIG1fY29udGV4
dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgfQog
CkBAIC03MDksMjcgKzcwMywxNzEgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRl
bnRzKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY28KIH0KIAogI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKLXZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3RmlsdGVyZWQo
Y29uc3QgQml0bWFwVGV4dHVyZSYgc291cmNlVGV4dHVyZSwgY29uc3QgQml0bWFwVGV4dHVyZSYg
Y29udGVudFRleHR1cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgZmlsdGVyLCBpbnQgcGFzcykK
Kworc3RhdGljIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaGFkZXJLZXkga2V5Rm9yRmls
dGVyVHlwZShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFz
cykKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JB
WVNDQUxFOgorICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkdyYXlz
Y2FsZUZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgICAgIHJl
dHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2VwaWFGaWx0ZXI7CisgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgorICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OlNhdHVyYXRlRmlsdGVyOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpI
VUVfUk9UQVRFOgorICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Okh1
ZVJvdGF0ZUZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgorICAgICAg
ICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkludmVydEZpbHRlcjsKKyAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKKyAgICAgICAgcmV0dXJuIFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjpCcmlnaHRuZXNzRmlsdGVyOworICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpDT05UUkFTVDoKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpDb250cmFzdEZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToK
KyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5RmlsdGVy
OworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgorICAgICAgICByZXR1cm4gVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXI6OkJsdXJGaWx0ZXI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkRST1BfU0hBRE9XOgorICAgICAgICByZXR1cm4gcGFzcyA/IFRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyOjpTaGFkb3dGaWx0ZXJQYXNzMiA6IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpTaGFkb3dGaWx0ZXJQYXNzMTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpJbnZh
bGlkOworICAgIH0KK30KKworc3RhdGljIHVuc2lnbmVkIGdldFBhc3Nlc1JlcXVpcmVkRm9yRmls
dGVyKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAo
dHlwZSkgeworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6CisgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OlNFUElBOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFU
RToKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKKyAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6SU5WRVJUOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNT
OgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKKyAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6T1BBQ0lUWToKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkJMVVI6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOgorICAg
ICAgICAvLyBXZSB1c2UgdHdvLXBhc3NlcyAodmVydGljYWwraG9yaXpvbnRhbCkgZm9yIGJsdXIg
YW5kIGRyb3Atc2hhZG93LgorICAgICAgICByZXR1cm4gMjsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gMDsKKyAgICB9Cit9CisKKy8vIENyZWF0ZSBhIG5vcm1hbCBkaXN0cmlidXRpb24g
b2YgMjEgdmFsdWVzIGJldHdlZW4gLTIgYW5kIDIuCitzdGF0aWMgY29uc3QgaW50IEdBVVNTSUFO
X0tFUk5FTF9IQUxGX1dJRFRIID0gMTE7CitzdGF0aWMgY29uc3QgZmxvYXQgR0FVU1NJQU5fS0VS
TkVMX1NURVAgPSAwLjI7CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgZ2F1c3MoZmxvYXQgeCkKK3sK
KyAgICByZXR1cm4gZXhwKC0oeCAqIHgpIC8gMi4pOworfQorCitzdGF0aWMgZmxvYXQqIGdhdXNz
aWFuS2VybmVsKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBwcmVwYXJlZCA9IGZhbHNlOworICAgIHN0
YXRpYyBmbG9hdCBrZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdID0gezAsIH07CisK
KyAgICBpZiAocHJlcGFyZWQpCisgICAgICAgIHJldHVybiBrZXJuZWw7CisKKyAgICBrZXJuZWxb
MF0gPSBnYXVzcygwKTsKKyAgICBmbG9hdCBzdW0gPSBrZXJuZWxbMF07CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyArK2kpIHsKKyAgICAg
ICAga2VybmVsW2ldID0gZ2F1c3MoaSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKTsKKyAgICAgICAg
c3VtICs9IDIgKiBrZXJuZWxbaV07CisgICAgfQorCisgICAgLy8gTm9ybWFsaXplIHRoZSBrZXJu
ZWwuCisgICAgZmxvYXQgc2NhbGUgPSAxIC8gc3VtOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgKytpKQorICAgICAgICBrZXJuZWxbaV0g
Kj0gc2NhbGU7CisKKyAgICBwcmVwYXJlZCA9IHRydWU7CisgICAgcmV0dXJuIGtlcm5lbDsKK30K
Kworc3RhdGljIHZvaWQgcHJlcGFyZUZpbHRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0qIHByb2dyYW0sIGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgb3BlcmF0aW9uLCB1bnNpZ25l
ZCBwYXNzLCBjb25zdCBJbnRTaXplJiBzaXplLCBHQzNEdWludCBjb250ZW50VGV4dHVyZSkKK3sK
KyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBwcm9ncmFtLT5jb250ZXh0
KCk7CisgICAgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CisKKyAg
ICBzd2l0Y2ggKG9wZXJhdGlvbi5nZXRPcGVyYXRpb25UeXBlKCkpIHsKKyAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6R1JBWVNDQUxFOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToK
KyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6CisgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkhVRV9ST1RBVEU6CisgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT5h
bW91bnRMb2NhdGlvbigpLCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJS
SUdIVE5FU1M6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgorICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgorICAgICAgICBjb250ZXh0LT51bmlmb3JtMWYocHJv
Z3JhbS0+YW1vdW50TG9jYXRpb24oKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogeworICAgICAgICBjb25zdCBC
bHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmx1ckZpbHRlck9w
ZXJhdGlvbiY+KG9wZXJhdGlvbik7CisgICAgICAgIEZsb2F0U2l6ZSByYWRpdXM7CisKKyAgICAg
ICAgLy8gQmx1ciBpcyBkb25lIGluIHR3byBwYXNzZXMsIGZpcnN0IGhvcml6b250YWxseSBhbmQg
dGhlbiB2ZXJ0aWNhbGx5LiBUaGUgc2FtZSBzaGFkZXIgaXMgdXNlZCBmb3IgYm90aC4KKyAgICAg
ICAgaWYgKHBhc3MpCisgICAgICAgICAgICByYWRpdXMuc2V0SGVpZ2h0KGZsb2F0VmFsdWVGb3JM
ZW5ndGgoYmx1ci5zdGREZXZpYXRpb24oKSwgc2l6ZS5oZWlnaHQoKSkgLyBzaXplLmhlaWdodCgp
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFkaXVzLnNldFdpZHRoKGZsb2F0VmFsdWVG
b3JMZW5ndGgoYmx1ci5zdGREZXZpYXRpb24oKSwgc2l6ZS53aWR0aCgpKSAvIHNpemUud2lkdGgo
KSk7CisKKyAgICAgICAgY29udGV4dC0+dW5pZm9ybTJmKHByb2dyYW0tPmJsdXJSYWRpdXNMb2Nh
dGlvbigpLCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKTsKKyAgICAgICAgY29udGV4
dC0+dW5pZm9ybTFmdihwcm9ncmFtLT5nYXVzc2lhbktlcm5lbExvY2F0aW9uKCksIEdBVVNTSUFO
X0tFUk5FTF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5lbCgpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzogeworICAgICAgICBj
b25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBzaGFkb3cgPSBzdGF0aWNfY2FzdDxjb25z
dCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKTsKKyAgICAgICAgY29udGV4
dC0+dW5pZm9ybTFmdihwcm9ncmFtLT5nYXVzc2lhbktlcm5lbExvY2F0aW9uKCksIEdBVVNTSUFO
X0tFUk5FTF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5lbCgpKTsKKyAgICAgICAgc3dpdGNoIChw
YXNzKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIC8vIEZpcnN0IHBhc3M6IHZlcnRp
Y2FsIGFscGhhIGJsdXIuCisgICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtMmYocHJvZ3JhbS0+
c2hhZG93T2Zmc2V0TG9jYXRpb24oKSwgZmxvYXQoc2hhZG93LmxvY2F0aW9uKCkueCgpKSAvIGZs
b2F0KHNpemUud2lkdGgoKSksIGZsb2F0KHNoYWRvdy5sb2NhdGlvbigpLnkoKSkgLyBmbG9hdChz
aXplLmhlaWdodCgpKSk7CisgICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtMWYocHJvZ3JhbS0+
Ymx1clJhZGl1c0xvY2F0aW9uKCksIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUu
d2lkdGgoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAg
ICAgIC8vIFNlY29uZCBwYXNzOiB3ZSBuZWVkIHRoZSBzaGFkb3cgY29sb3IgYW5kIHRoZSBjb250
ZW50IHRleHR1cmUgZm9yIGNvbXBvc2l0aW5nLgorICAgICAgICAgICAgY29udGV4dC0+dW5pZm9y
bTFmKHByb2dyYW0tPmJsdXJSYWRpdXNMb2NhdGlvbigpLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkg
LyBmbG9hdChzaXplLmhlaWdodCgpKSk7CisgICAgICAgICAgICBjb250ZXh0LT5hY3RpdmVUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSk7CisgICAgICAgICAgICBjb250ZXh0LT5i
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgY29udGVudFRleHR1cmUp
OworICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmNvbnRlbnRUZXh0dXJl
TG9jYXRpb24oKSwgMSk7CisgICAgICAgICAgICBmbG9hdCByLCBnLCBiLCBhOworICAgICAgICAg
ICAgc2hhZG93LmNvbG9yKCkuZ2V0UkdCQShyLCBnLCBiLCBhKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnVuaWZvcm00Zihwcm9ncmFtLT5zaGFkb3dDb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmRyYXdGaWx0ZXJlZChjb25zdCBCaXRtYXBUZXh0dXJlJiBzYW1wbGVyLCBjb25zdCBC
aXRtYXBUZXh0dXJlJiBjb250ZW50VGV4dHVyZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBmaWx0
ZXIsIGludCBwYXNzKQogewogICAgIC8vIEZvciBzdGFuZGFyZCBmaWx0ZXJzLCB3ZSBhbHdheXMg
ZHJhdyB0aGUgd2hvbGUgdGV4dHVyZSB3aXRob3V0IHRyYW5zZm9ybWF0aW9ucy4KLSAgICBSZWZQ
dHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgp
LnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlckZvckZpbHRlcihmaWx0ZXIsIHBh
c3MpOworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaGFkZXJLZXkga2V5ID0ga2V5
Rm9yRmlsdGVyVHlwZShmaWx0ZXIuZ2V0T3BlcmF0aW9uVHlwZSgpLCBwYXNzKTsKKyAgICBSZWZQ
dHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xE
YXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShrZXkpOwog
ICAgIEFTU0VSVChwcm9ncmFtKTsKIAotICAgIHByb2dyYW0tPnByZXBhcmUoZmlsdGVyLCBwYXNz
LCBzb3VyY2VUZXh0dXJlLmNvbnRlbnRTaXplKCksIHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRl
eHR1cmVHTCY+KGNvbnRlbnRUZXh0dXJlKS5pZCgpKTsKKyAgICBwcmVwYXJlRmlsdGVyUHJvZ3Jh
bShwcm9ncmFtLmdldCgpLCBmaWx0ZXIsIHBhc3MsIHNhbXBsZXIuY29udGVudFNpemUoKSwgc3Rh
dGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oY29udGVudFRleHR1cmUpLmlkKCkpOwog
Ci0gICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRl
eEF0dHJpYigpKTsKLSAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJv
Z3JhbS0+dGV4Q29vcmRBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOworICAgIG1fY29udGV4dDNELT5l
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT50ZXhDb29yZExvY2F0aW9uKCkpOwogICAg
IG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7
Ci0gICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihzb3VyY2VUZXh0dXJlKS5p
ZCgpKTsKLSAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPnRleHR1cmVVbmlmb3Jt
KCksIDApOworICAgIG1fY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oc2FtcGxlciku
aWQoKSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5zYW1wbGVyTG9jYXRp
b24oKSwgMCk7CiAgICAgY29uc3QgR0MzRGZsb2F0IHRhcmdldFZlcnRpY2VzW10gPSB7LTEsIC0x
LCAxLCAtMSwgMSwgMSwgLTEsIDF9OwogICAgIGNvbnN0IEdDM0RmbG9hdCBzb3VyY2VWZXJ0aWNl
c1tdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9OwotICAgIG1fY29udGV4dDNELT52ZXJ0ZXhB
dHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleEF0dHJpYigpLCAyLCBHcmFwaGljc0NvbnRleHQz
RDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHRhcmdldFZlcnRpY2VzKSk7Ci0gICAgbV9j
b250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIoKSwg
MiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cihzb3VyY2VW
ZXJ0aWNlcykpOworICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0t
PnZlcnRleExvY2F0aW9uKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAs
IEdDM0RpbnRwdHIodGFyZ2V0VmVydGljZXMpKTsKKyAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0
cmliUG9pbnRlcihwcm9ncmFtLT50ZXhDb29yZExvY2F0aW9uKCksIDIsIEdyYXBoaWNzQ29udGV4
dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIoc291cmNlVmVydGljZXMpKTsKICAgICBt
X2NvbnRleHQzRC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwogICAgIG1fY29u
dGV4dDNELT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIDAsIDQp
OwotICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVy
dGV4QXR0cmliKCkpOwotICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXko
cHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0
ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKKyAgICBtX2NvbnRleHQz
RC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3JkTG9jYXRpb24oKSk7
CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gQml0bWFwVGV4dHVyZUdMOjphcHBseUZp
bHRlcnMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgQml0bWFwVGV4dHVyZSYg
Y29udGVudFRleHR1cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCkBAIC03NDMs
NyArODgxLDcgQEAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBCaXRtYXBUZXh0dXJlR0w6OmFw
cGx5RmlsdGVycyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWEKICAgICAgICAgY29uc3QgRmlsdGVy
T3BlcmF0aW9uKiBmaWx0ZXIgPSBmaWx0ZXJzLmF0KGkpOwogICAgICAgICBBU1NFUlQoZmlsdGVy
KTsKIAotICAgICAgICBpbnQgbnVtUGFzc2VzID0gdGV4dHVyZU1hcHBlckdMLT5kYXRhKCkuc2hh
cmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0UGFzc2VzUmVxdWlyZWRG
b3JGaWx0ZXIoKmZpbHRlcik7CisgICAgICAgIGludCBudW1QYXNzZXMgPSBnZXRQYXNzZXNSZXF1
aXJlZEZvckZpbHRlcihmaWx0ZXItPmdldE9wZXJhdGlvblR5cGUoKSk7CiAgICAgICAgIGZvciAo
aW50IGogPSAwOyBqIDwgbnVtUGFzc2VzOyArK2opIHsKICAgICAgICAgICAgIHRleHR1cmVNYXBw
ZXJHTC0+YmluZFN1cmZhY2UodGFyZ2V0LmdldCgpKTsKICAgICAgICAgICAgIHRleHR1cmVNYXBw
ZXJHTC0+ZHJhd0ZpbHRlcmVkKChpIHx8IGopID8gKnNvdXJjZSA6IGNvbnRlbnRUZXh0dXJlLCBj
b250ZW50VGV4dHVyZSwgKmZpbHRlciwgaik7CkBAIC04OTQsMTIgKzEwMzIsMTIgQEAgdm9pZCBU
ZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9k
ZWxWaWV3TWF0cml4LCBjb24KIAogICAgIGRhdGEoKS5pbml0aWFsaXplU3RlbmNpbCgpOwogCi0g
ICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNo
YXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0o
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNpbXBsZSk7CisgICAgUmVmUHRyPFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OkRlZmF1bHQpOwogCi0gICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3Jh
bS0+aWQoKSk7Ci0gICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dy
YW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFt
LT5wcm9ncmFtSUQoKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KHByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwogICAgIGNvbnN0IEdDM0RmbG9hdCB1bml0UmVj
dFtdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9OwotICAgIG1fY29udGV4dDNELT52ZXJ0ZXhB
dHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleEF0dHJpYigpLCAyLCBHcmFwaGljc0NvbnRleHQz
RDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHVuaXRSZWN0KSk7CisgICAgbV9jb250ZXh0
M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSwgMiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cih1bml0UmVjdCkpOwog
CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgo
ZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpCiAgICAgICAgICAgICAubXVsdGlwbHkobW9kZWxWaWV3
TWF0cml4KQpAQCAtOTQzLDcgKzEwODEsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5D
bGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgogICAg
IG1fY29udGV4dDNELT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4s
IDAsIDQpOwogCiAgICAgLy8gQ2xlYXIgdGhlIHN0YXRlLgotICAgIG1fY29udGV4dDNELT5kaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29u
dGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4TG9jYXRpb24o
KSk7CiAgICAgbV9jb250ZXh0M0QtPnN0ZW5jaWxNYXNrKDApOwogCiAgICAgLy8gSW5jcmVhc2Ug
c3RlbmNpbEluZGV4IGFuZCBhcHBseSBzdGVuY2lsIHRlc3RpbmcuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAppbmRleCA3M2Q2ZmVmLi5jNjg1OGIwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKQEAgLTMwLDI0NyArMzAsNTcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jZGVmaW5lIFNUUklOR0lGWSguLi4pICNfX1ZB
X0FSR1NfXwotCi1zdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VPcGFjaXR5
QW5kTWFzayA9Ci0gICAgU1RSSU5HSUZZKAotICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9h
dDsKLSAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zb3VyY2U7Ci0gICAgICAgIHVuaWZvcm0g
c2FtcGxlcjJEIHNfbWFzazsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsK
LSAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAgICAgIHZh
cnlpbmcgaGlnaHAgdmVjMiB2X21hc2tUZXhDb29yZDsKLSAgICAgICAgdm9pZCBtYWluKHZvaWQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRChzX3Nv
dXJjZSwgdl9zb3VyY2VUZXhDb29yZCk7Ci0gICAgICAgICAgICBsb3dwIHZlYzQgbWFza0NvbG9y
ID0gdGV4dHVyZTJEKHNfbWFzaywgdl9tYXNrVGV4Q29vcmQpOwotICAgICAgICAgICAgbG93cCBm
bG9hdCBmcmFnbWVudEFscGhhID0gdV9vcGFjaXR5ICogbWFza0NvbG9yLmE7Ci0gICAgICAgICAg
ICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIGZyYWdtZW50QWxwaGEsIGNvbG9yLmEg
KiBmcmFnbWVudEFscGhhKTsKLSAgICAgICAgfQotICAgICk7Ci0KLXN0YXRpYyBjb25zdCBjaGFy
KiBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RPcGFjaXR5QW5kTWFzayA9Ci0gICAgU1RSSU5HSUZZ
KAotICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSAgICAgICAgdW5pZm9ybSBzYW1w
bGVyMkRSZWN0IHNfc291cmNlOwotICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRFJlY3Qgc19tYXNr
OwotICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OwotICAgICAgICB2YXJ5aW5n
IGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKLSAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMy
IHZfbWFza1RleENvb3JkOwotICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgewotICAg
ICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEUmVjdChzX3NvdXJjZSwgdl9zb3Vy
Y2VUZXhDb29yZCk7Ci0gICAgICAgICAgICBsb3dwIHZlYzQgbWFza0NvbG9yID0gdGV4dHVyZTJE
UmVjdChzX21hc2ssIHZfbWFza1RleENvb3JkKTsKLSAgICAgICAgICAgIGxvd3AgZmxvYXQgZnJh
Z21lbnRBbHBoYSA9IHVfb3BhY2l0eSAqIG1hc2tDb2xvci5hOwotICAgICAgICAgICAgZ2xfRnJh
Z0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBmcmFnbWVudEFscGhhLCBjb2xvci5hICogZnJhZ21l
bnRBbHBoYSk7Ci0gICAgICAgIH0KLSAgICApOwotCi1zdGF0aWMgY29uc3QgY2hhciogdmVydGV4
U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2sgPQotICAgIFNUUklOR0lGWSgKLSAgICAgICAgdW5p
Zm9ybSBtYXQ0IHVfbWF0cml4OwotICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9mbGlwOwot
ICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKLSAgICAgICAgdmFyeWluZyBoaWdocCB2
ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X21hc2tU
ZXhDb29yZDsKLSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHZfc291cmNlVGV4Q29vcmQgPSB2ZWMyKGFfdmVydGV4LngsIG1peChhX3ZlcnRleC55LCAxLiAt
IGFfdmVydGV4LnksIHVfZmxpcCkpOwotICAgICAgICAgICAgdl9tYXNrVGV4Q29vcmQgPSB2ZWMy
KGFfdmVydGV4KTsKLSAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiBhX3ZlcnRl
eDsKLSAgICAgICAgfQotICAgICk7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRl
clNvdXJjZVNpbXBsZSA9Ci0gICAgU1RSSU5HSUZZKAotICAgICAgICBwcmVjaXNpb24gbWVkaXVt
cCBmbG9hdDsKLSAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zb3VyY2U7Ci0gICAgICAgIHVu
aWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2
X3NvdXJjZVRleENvb3JkOwotICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgewotICAg
ICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHNfc291cmNlLCB2X3NvdXJjZVRl
eENvb3JkKTsKLSAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogdV9v
cGFjaXR5LCBjb2xvci5hICogdV9vcGFjaXR5KTsKLSAgICAgICAgfQotICAgICk7Ci0KLXN0YXRp
YyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZUFudGlhbGlhc2luZ05vTWFzayA9Ci0g
ICAgU1RSSU5HSUZZKAotICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSAgICAgICAg
dW5pZm9ybSBzYW1wbGVyMkQgc19zb3VyY2U7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2
X3NvdXJjZVRleENvb3JkOwotICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5Owot
ICAgICAgICB1bmlmb3JtIHZlYzMgdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbOF07
Ci0gICAgICAgIHZvaWQgbWFpbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZlYzQgc2FtcGxl
ZENvbG9yID0gdGV4dHVyZTJEKHNfc291cmNlLCBjbGFtcCh2X3NvdXJjZVRleENvb3JkLCAwLjAs
IDEuMCkpOwotICAgICAgICAgICAgdmVjMyBwb3MgPSB2ZWMzKGdsX0ZyYWdDb29yZC54eSwgMSk7
Ci0KLSAgICAgICAgICAgIC8vIFRoZSBkYXRhIHBhc3NlZCBpbiB1X2V4cGFuZGVkUXVhZEVkZ2Vz
SW5TY3JlZW5TcGFjZSBpcyBtZXJlbHkgdGhlCi0gICAgICAgICAgICAvLyBwcmUtc2NhbGVkIGNv
ZWZmZWNpZW50cyBvZiB0aGUgbGluZSBlcXVhdGlvbnMgZGVzY3JpYmluZyB0aGUgZm91ciBlZGdl
cwotICAgICAgICAgICAgLy8gb2YgdGhlIGV4cGFuZGVkIHF1YWQgaW4gc2NyZWVuIHNwYWNlIGFu
ZCB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYm94Ci0gICAgICAgICAgICAvLyBvZiB0aGUgZXhw
YW5kZWQgcXVhZC4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBXZSBhcmUgZG9pbmcg
YSBzaW1wbGUgZGlzdGFuY2UgY2FsY3VsYXRpb24gaGVyZSBhY2NvcmRpbmcgdG8gdGhlIGZvcm11
bGE6Ci0gICAgICAgICAgICAvLyAoQSpwLnggKyBCKnAueSArIEMpIC8gc3FydChBXjIgKyBCXjIp
ID0gZGlzdGFuY2UgZnJvbSBsaW5lIHRvIHAKLSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBBLCBC
IGFuZCBDIGhhdmUgYWxyZWFkeSBiZWVuIHNjYWxlZCBieSAxIC8gc3FydChBXjIgKyBCXjIpLgot
ICAgICAgICAgICAgZmxvYXQgYTAgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2Ny
ZWVuU3BhY2VbMF0sIHBvcyksIDAuMCwgMS4wKTsKLSAgICAgICAgICAgIGZsb2F0IGExID0gY2xh
bXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzFdLCBwb3MpLCAwLjAsIDEu
MCk7Ci0gICAgICAgICAgICBmbG9hdCBhMiA9IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2Vz
SW5TY3JlZW5TcGFjZVsyXSwgcG9zKSwgMC4wLCAxLjApOwotICAgICAgICAgICAgZmxvYXQgYTMg
PSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbM10sIHBvcyksIDAu
MCwgMS4wKTsKLSAgICAgICAgICAgIGZsb2F0IGE0ID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFk
RWRnZXNJblNjcmVlblNwYWNlWzRdLCBwb3MpLCAwLjAsIDEuMCk7Ci0gICAgICAgICAgICBmbG9h
dCBhNSA9IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs1XSwgcG9z
KSwgMC4wLCAxLjApOwotICAgICAgICAgICAgZmxvYXQgYTYgPSBjbGFtcChkb3QodV9leHBhbmRl
ZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNl0sIHBvcyksIDAuMCwgMS4wKTsKLSAgICAgICAgICAg
IGZsb2F0IGE3ID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzdd
LCBwb3MpLCAwLjAsIDEuMCk7Ci0KLSAgICAgICAgICAgIC8vIE5vdyB3ZSB3YW50IHRvIHJlZHVj
ZSB0aGUgYWxwaGEgdmFsdWUgb2YgdGhlIGZyYWdtZW50IGlmIGl0IGlzIGNsb3NlIHRvIHRoZQot
ICAgICAgICAgICAgLy8gZWRnZXMgb2YgdGhlIGV4cGFuZGVkIHF1YWQgKG9yIHJlY3Rhbmd1bGFy
IGJvdW5kaW5nIGJveCAtLSB3aGljaCBzZWVtcyB0byBiZQotICAgICAgICAgICAgLy8gaW1wb3J0
YW50IGZvciBiYWNrZmFjaW5nIHF1YWRzKS4gTm90ZSB0aGF0IHdlIGFyZSBjb21iaW5pbmcgdGhl
IGNvbnRyaWJ1dGlvbgotICAgICAgICAgICAgLy8gZnJvbSB0aGUgKHRvcCB8fCBib3R0b20pIGFu
ZCAobGVmdCB8fCByaWdodCkgZWRnZSBieSBzaW1wbHkgbXVsdGlwbHlpbmcuIFRoaXMgZm9sbG93
cwotICAgICAgICAgICAgLy8gdGhlIGFwcHJvYWNoIGRlc2NyaWJlZCBhdDogaHR0cDovL2h0dHAu
ZGV2ZWxvcGVyLm52aWRpYS5jb20vR1BVR2VtczIvZ3B1Z2VtczJfY2hhcHRlcjIyLmh0bWwsCi0g
ICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2l0aG91dCB1c2luZyBHYXVzc2lhbiB3ZWlnaHRz
LgotICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gc2FtcGxlZENvbG9yICogdV9vcGFjaXR5ICog
bWluKG1pbihhMCwgYTIpICogbWluKGExLCBhMyksIG1pbihhNCwgYTYpICogbWluKGE1LCBhNykp
OwotICAgICAgICB9Ci0gICAgKTsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVy
U291cmNlUmVjdFNpbXBsZSA9Ci0gICAgU1RSSU5HSUZZKAotICAgICAgICBwcmVjaXNpb24gbWVk
aXVtcCBmbG9hdDsKLSAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfc291cmNlOwotICAg
ICAgICB1bmlmb3JtIGxvd3AgdmVjMiB1X3RleHR1cmVTaXplOwotICAgICAgICB1bmlmb3JtIGxv
d3AgZmxvYXQgdV9vcGFjaXR5OwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VU
ZXhDb29yZDsKLSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRFJlY3Qoc19zb3VyY2UsIHVfdGV4dHVyZVNpemUg
KiB2X3NvdXJjZVRleENvb3JkKTsKLSAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29s
b3IucmdiICogdV9vcGFjaXR5LCBjb2xvci5hICogdV9vcGFjaXR5KTsKLSAgICAgICAgfQotICAg
ICk7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUgPQotICAg
IFNUUklOR0lGWSgKLSAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OwotICAgICAgICB1bmlm
b3JtIGxvd3AgZmxvYXQgdV9mbGlwOwotICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsK
LSAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAgICAgIHZv
aWQgbWFpbih2b2lkKQotICAgICAgICB7Ci0gICAgICAgICAgICB2X3NvdXJjZVRleENvb3JkID0g
dmVjMihhX3ZlcnRleC54LCBtaXgoYV92ZXJ0ZXgueSwgMS4gLSBhX3ZlcnRleC55LCB1X2ZsaXAp
KTsKLSAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiBhX3ZlcnRleDsKLSAgICAg
ICAgfQotICAgICk7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTb2xp
ZENvbG9yID0KLSAgICBTVFJJTkdJRlkoCi0gICAgICAgIHVuaWZvcm0gbWF0NCB1X21hdHJpeDsK
LSAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7Ci0gICAgICAgIHZvaWQgbWFpbih2b2lk
KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogYV92ZXJ0
ZXg7Ci0gICAgICAgIH0KLSAgICApOwotCi0KLXN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNo
YWRlclNvdXJjZVNvbGlkQ29sb3IgPQotICAgIFNUUklOR0lGWSgKLSAgICAgICAgcHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgIHVuaWZvcm0gdmVjNCB1X2NvbG9yOwotICAgICAgICB2
b2lkIG1haW4odm9pZCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdV9j
b2xvcjsKLSAgICAgICAgfQotICAgICk7Ci0KLVBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1Tb2xpZENvbG9yPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6c29saWRDb2xv
clByb2dyYW0oKQorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIGNvbnN0IFN0
cmluZyYgdmVydGV4LCBjb25zdCBTdHJpbmcmIGZyYWdtZW50KQorICAgIDogbV9jb250ZXh0KGNv
bnRleHQpCisgICAgLCBtX2lkKDApCisgICAgLCBtX3ZlcnRleFNoYWRlcigwKQorICAgICwgbV9m
cmFnbWVudFNoYWRlcigwKQogewotICAgIHJldHVybiBzdGF0aWNfcG9pbnRlcl9jYXN0PFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcj4oZ2V0U2hhZGVyUHJvZ3JhbShTb2xpZENv
bG9yKSk7Ci19CisgICAgbV92ZXJ0ZXhTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihH
cmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUik7CisgICAgbV9mcmFnbWVudFNoYWRlciA9
IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFE
RVIpOworICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKG1fdmVydGV4U2hhZGVyLCB2ZXJ0ZXgp
OworICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKG1fZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50
KTsKKyAgICBtX2lkID0gbV9jb250ZXh0LT5jcmVhdGVQcm9ncmFtKCk7CisgICAgbV9jb250ZXh0
LT5jb21waWxlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmNvbXBpbGVT
aGFkZXIobV9mcmFnbWVudFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIobV9p
ZCwgbV92ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKG1faWQsIG1f
ZnJhZ21lbnRTaGFkZXIpOworICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0obV9pZCk7CisKKyNp
Zm5kZWYgTkRFQlVHCisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXJyb3IoKSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6Tk9fRVJST1IpCisgICAgICAgIHJldHVybjsKIAotUGFzc1JlZlB0cjxUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzaz4gVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OmFudGlhbGlhc2luZ05vTWFza1Byb2dyYW0oKQotewotICAgIHJldHVybiBzdGF0
aWNfcG9pbnRlcl9jYXN0PFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9N
YXNrPihnZXRTaGFkZXJQcm9ncmFtKEFudGlhbGlhc2luZ05vTWFzaykpOworICAgIFN0cmluZyBs
b2cgPSBtX2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cobV92ZXJ0ZXhTaGFkZXIpOworICAgIHBy
aW50ZigiVmVydGV4IHNoYWRlciBsb2c6ICVzXG4iLCBsb2cudXRmOCgpLmRhdGEoKSk7CisgICAg
bG9nID0gbV9jb250ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKG1fZnJhZ21lbnRTaGFkZXIpOworICAg
IHByaW50ZigiRnJhZ21lbnQgc2hhZGVyIGxvZzogJXNcbiIsIGxvZy51dGY4KCkuZGF0YSgpKTsK
KyAgICBsb2cgPSBtX2NvbnRleHQtPmdldFByb2dyYW1JbmZvTG9nKG1faWQpOworICAgIHByaW50
ZigiUHJvZ3JhbSBsb2c6ICVzXG4iLCBsb2cudXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKIH0KIAot
UGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OmdldFNoYWRlclByb2dyYW0oU2hhZGVyVHlwZSBzaGFkZXJUeXBlKQorR0MzRHVp
bnQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmdldExvY2F0aW9uKGNvbnN0IHZvaWQqIGtl
eSwgY29uc3QgY2hhciogbmFtZSwgVmFyaWFibGVUeXBlIHR5cGUpCiB7Ci0gICAgUmVmUHRyPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtOwotICAgIGlmIChzaGFkZXJUeXBlID09
IEludmFsaWQpCi0gICAgICAgIHJldHVybiBwcm9ncmFtOwotCi0gICAgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1NYXA6Oml0ZXJhdG9yIGl0ID0gbV90ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bU1hcC5maW5kKHNoYWRlclR5cGUpOwotICAgIGlmIChpdCAhPSBtX3RleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtTWFwLmVuZCgpKQorICAgIEhhc2hNYXA8Y29uc3Qgdm9pZCosIEdDM0R1aW50Pjo6
aXRlcmF0b3IgaXQgPSBtX3ZhcmlhYmxlcy5maW5kKGtleSk7CisgICAgaWYgKGl0ICE9IG1fdmFy
aWFibGVzLmVuZCgpKQogICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKIAotICAgIHN3aXRjaCAo
c2hhZGVyVHlwZSkgewotICAgIGNhc2UgU2ltcGxlOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OmNyZWF0ZShtX2NvbnRleHQpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFJlY3RTaW1wbGU6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OmNyZWF0ZShtX2NvbnRleHQpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEFudGlhbGlhc2luZ05vTWFzazoKLSAgICAgICAgcHJvZ3JhbSA9IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrOjpjcmVhdGUobV9jb250
ZXh0KTsKKyAgICBHQzNEdWludCBsb2NhdGlvbjsKKyAgICBzd2l0Y2godHlwZSkgeworICAgIGNh
c2UgVW5pZm9ybVZhcmlhYmxlOgorICAgICAgICBsb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5p
Zm9ybUxvY2F0aW9uKG1faWQsIFN0cmluZyhBU0NJSUxpdGVyYWwobmFtZSkpKTsKICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBPcGFjaXR5QW5kTWFzazoKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OmNyZWF0ZShtX2NvbnRleHQpOwor
ICAgIGNhc2UgQXR0cmliVmFyaWFibGU6CisgICAgICAgIGxvY2F0aW9uID0gbV9jb250ZXh0LT5n
ZXRBdHRyaWJMb2NhdGlvbihtX2lkLCBTdHJpbmcoQVNDSUlMaXRlcmFsKG5hbWUpKSk7CiAgICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgUmVjdE9wYWNpdHlBbmRNYXNrOgotICAgICAgICBwcm9ncmFt
ID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OmNyZWF0ZSht
X2NvbnRleHQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNvbGlkQ29sb3I6Ci0gICAgICAg
IHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OmNyZWF0ZSht
X2NvbnRleHQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludmFsaWQ6CisgICAgZGVmYXVs
dDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwogICAgIH0K
LSAgICBtX3RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwLmFkZChzaGFkZXJUeXBlLCBwcm9n
cmFtKTsKLSAgICByZXR1cm4gcHJvZ3JhbTsKLX0KLQotVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hh
ZGVyU291cmNlKQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX2lkKDApCi0gICAg
LCBtX3ZlcnRleEF0dHJpYigwKQotICAgICwgbV92ZXJ0ZXhTaGFkZXIoMCkKLSAgICAsIG1fZnJh
Z21lbnRTaGFkZXIoMCkKLSAgICAsIG1fbWF0cml4TG9jYXRpb24oLTEpCi0gICAgLCBtX2ZsaXBM
b2NhdGlvbigtMSkKLSAgICAsIG1fdGV4dHVyZVNpemVMb2NhdGlvbigtMSkKLSAgICAsIG1fc291
cmNlVGV4dHVyZUxvY2F0aW9uKC0xKQotICAgICwgbV9vcGFjaXR5TG9jYXRpb24oLTEpCi0gICAg
LCBtX21hc2tUZXh0dXJlTG9jYXRpb24oLTEpCi0gICAgLCBtX3ZlcnRleFNoYWRlclNvdXJjZSh2
ZXJ0ZXhTaGFkZXJTb3VyY2UpCi0gICAgLCBtX2ZyYWdtZW50U2hhZGVyU291cmNlKGZyYWdtZW50
U2hhZGVyU291cmNlKQotewotfQogCi12b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpp
bml0aWFsaXplUHJvZ3JhbSgpCi17Ci0gICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNl
UHJvZ3JhbSA9IHZlcnRleFNoYWRlclNvdXJjZSgpOwotICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50
U2hhZGVyU291cmNlUHJvZ3JhbSA9IGZyYWdtZW50U2hhZGVyU291cmNlKCk7Ci0gICAgUGxhdGZv
cm0zRE9iamVjdCB2ZXJ0ZXhTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGlj
c0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUik7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBmcmFnbWVu
dFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFH
TUVOVF9TSEFERVIpOwotICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwg
dmVydGV4U2hhZGVyU291cmNlUHJvZ3JhbSk7Ci0gICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2Uo
ZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyU291cmNlUHJvZ3JhbSk7Ci0gICAgUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtSUQgPSBtX2NvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsKLSAgICBt
X2NvbnRleHQtPmNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmNv
bXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOwotCi0gICAgbV9jb250ZXh0LT5hdHRhY2hTaGFk
ZXIocHJvZ3JhbUlELCB2ZXJ0ZXhTaGFkZXIpOwotICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVy
KHByb2dyYW1JRCwgZnJhZ21lbnRTaGFkZXIpOwotICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0o
cHJvZ3JhbUlEKTsKLQotICAgIG1fdmVydGV4QXR0cmliID0gbV9jb250ZXh0LT5nZXRBdHRyaWJM
b2NhdGlvbihwcm9ncmFtSUQsICJhX3ZlcnRleCIpOwotCi0gICAgbV9pZCA9IHByb2dyYW1JRDsK
LSAgICBtX3ZlcnRleFNoYWRlciA9IHZlcnRleFNoYWRlcjsKLSAgICBtX2ZyYWdtZW50U2hhZGVy
ID0gZnJhZ21lbnRTaGFkZXI7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06
OmdldFVuaWZvcm1Mb2NhdGlvbihHQzNEaW50ICZ2YXJpYWJsZSwgY29uc3QgY2hhciogbmFtZSkK
LXsKLSAgICB2YXJpYWJsZSA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1faWQsIG5h
bWUpOwotICAgIEFTU0VSVCh2YXJpYWJsZSA+PSAwKTsKKyAgICBtX3ZhcmlhYmxlcy5hZGQoa2V5
LCBsb2NhdGlvbik7CisgICAgcmV0dXJuIGxvY2F0aW9uOwogfQogCiBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6flRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCkKQEAgLTI4NiwxMjAgKzk2
LDE5MSBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6flRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtKCkKICAgICBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0ocHJvZ3JhbUlEKTsKIH0KIAot
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtU2ltcGxlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIDogVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVu
dFNoYWRlclNvdXJjZVNpbXBsZSkKLXsKLSAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwotICAgIGdl
dFVuaWZvcm1Mb2NhdGlvbihtX2ZsaXBMb2NhdGlvbiwgInVfZmxpcCIpOwotICAgIGdldFVuaWZv
cm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKLSAgICBnZXRVbmlmb3Jt
TG9jYXRpb24obV9zb3VyY2VUZXh0dXJlTG9jYXRpb24sICJzX3NvdXJjZSIpOwotICAgIGdldFVu
aWZvcm1Mb2NhdGlvbihtX29wYWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0eSIpOwotfQorc3RydWN0
IFNoYWRlclNwZWMgeworICAgIFN0cmluZyB2ZXJ0ZXhTaGFkZXI7CisgICAgU3RyaW5nIGZyYWdt
ZW50U2hhZGVyOworICAgIFNoYWRlclNwZWMoY29uc3QgY2hhciogdmVydGV4ID0gMCwgY29uc3Qg
Y2hhciogZnJhZ21lbnQgPSAwKQorICAgICAgICA6IHZlcnRleFNoYWRlcih2ZXJ0ZXggPyBTdHJp
bmcoQVNDSUlMaXRlcmFsKHZlcnRleCkpIDogU3RyaW5nKCkpCisgICAgICAgICwgZnJhZ21lbnRT
aGFkZXIoZnJhZ21lbnQgPyBTdHJpbmcoQVNDSUlMaXRlcmFsKGZyYWdtZW50KSkgOiBTdHJpbmco
KSkKKyAgICB7CisgICAgfQorfTsKIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENv
bG9yOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQpCi0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2
ZXJ0ZXhTaGFkZXJTb3VyY2VTb2xpZENvbG9yLCBmcmFnbWVudFNoYWRlclNvdXJjZVNvbGlkQ29s
b3IpCitzdGF0aWMgdm9pZCBnZXRTaGFkZXJTcGVjKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpTaGFkZXJLZXkga2V5LCBTdHJpbmcmIHZlcnRleFNvdXJjZSwgU3RyaW5nJiBmcmFnbWVudFNv
dXJjZSkKIHsKLSAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlv
bihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24o
bV9jb2xvckxvY2F0aW9uLCAidV9jb2xvciIpOwotfQorICAgIHN0YXRpYyBWZWN0b3I8U2hhZGVy
U3BlYz4gc3BlY3MgPSBWZWN0b3I8U2hhZGVyU3BlYz4oKTsKKyNkZWZpbmUgU1RSSU5HSUZZKC4u
LikgI19fVkFfQVJHU19fCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50T3BhY2l0eUFu
ZE1hc2sgPQorICAgICAgICBTVFJJTkdJRlkoCisgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVt
cCBmbG9hdDsKKyAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc2FtcGxlcjsKKyAgICAg
ICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfbWFzazsKKyAgICAgICAgICAgIHVuaWZvcm0gbG93
cCBmbG9hdCB1X29wYWNpdHk7CisgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3Vy
Y2VUZXhDb29yZDsKKyAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X21hc2tUZXhDb29y
ZDsKKyAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRChzX3NhbXBsZXIsIHZfc291cmNlVGV4
Q29vcmQpOworICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBtYXNrQ29sb3IgPSB0ZXh0dXJlMkQo
c19tYXNrLCB2X21hc2tUZXhDb29yZCk7CisgICAgICAgICAgICAgICAgbG93cCBmbG9hdCBmcmFn
bWVudEFscGhhID0gdV9vcGFjaXR5ICogbWFza0NvbG9yLmE7CisgICAgICAgICAgICAgICAgZ2xf
RnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBmcmFnbWVudEFscGhhLCBjb2xvci5hICogZnJh
Z21lbnRBbHBoYSk7CisgICAgICAgICAgICB9CisgICAgICAgICk7CiAKLVRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2lt
cGxlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNoYWRl
clNvdXJjZVJlY3RTaW1wbGUpCi17Ci0gICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKLSAgICBnZXRV
bmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7Ci0gICAgZ2V0VW5p
Zm9ybUxvY2F0aW9uKG1fZmxpcExvY2F0aW9uLCAidV9mbGlwIik7Ci0gICAgZ2V0VW5pZm9ybUxv
Y2F0aW9uKG1fdGV4dHVyZVNpemVMb2NhdGlvbiwgInVfdGV4dHVyZVNpemUiKTsKLSAgICBnZXRV
bmlmb3JtTG9jYXRpb24obV9zb3VyY2VUZXh0dXJlTG9jYXRpb24sICJzX3NvdXJjZSIpOwotICAg
IGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0eSIpOwotfQor
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFJlY3RPcGFjaXR5QW5kTWFzayA9CisgICAg
ICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OworICAg
ICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfc2FtcGxlcjsKKyAgICAgICAgICAgIHVu
aWZvcm0gc2FtcGxlcjJEUmVjdCBzX21hc2s7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxv
YXQgdV9vcGFjaXR5OworICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4
Q29vcmQ7CisgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9tYXNrVGV4Q29vcmQ7Cisg
ICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkRSZWN0KHNfc2FtcGxlciwgdl9zb3VyY2VUZXhD
b29yZCk7CisgICAgICAgICAgICAgICAgbG93cCB2ZWM0IG1hc2tDb2xvciA9IHRleHR1cmUyRFJl
Y3Qoc19tYXNrLCB2X21hc2tUZXhDb29yZCk7CisgICAgICAgICAgICAgICAgbG93cCBmbG9hdCBm
cmFnbWVudEFscGhhID0gdV9vcGFjaXR5ICogbWFza0NvbG9yLmE7CisgICAgICAgICAgICAgICAg
Z2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBmcmFnbWVudEFscGhhLCBjb2xvci5hICog
ZnJhZ21lbnRBbHBoYSk7CisgICAgICAgICAgICB9CisgICAgICAgICk7CiAKLVRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
T3BhY2l0eUFuZE1hc2soR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi0gICAgOiBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5k
TWFzaywgZnJhZ21lbnRTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzaykKLXsKLSAgICBpbml0aWFs
aXplUHJvZ3JhbSgpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9uLCAi
dV9tYXRyaXgiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9mbGlwTG9jYXRpb24sICJ1X2Zs
aXAiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9zb3VyY2VUZXh0dXJlTG9jYXRpb24sICJz
X3NvdXJjZSIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hc2tUZXh0dXJlTG9jYXRpb24s
ICJzX21hc2siKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9jYXRpb24sICJ1
X29wYWNpdHkiKTsKLX0KKyAgICBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4T3BhY2l0eUFuZE1h
c2sgPQorICAgICAgICBTVFJJTkdJRlkoCisgICAgICAgICAgICB1bmlmb3JtIG1hdDQgdV9tYXRy
aXg7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9mbGlwOworICAgICAgICAgICAg
YXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CisgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIg
dl9zb3VyY2VUZXhDb29yZDsKKyAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X21hc2tU
ZXhDb29yZDsKKyAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHZfc291cmNlVGV4Q29vcmQgPSB2ZWMyKGFfdmVydGV4LngsIG1peChhX3Zl
cnRleC55LCAxLiAtIGFfdmVydGV4LnksIHVfZmxpcCkpOworICAgICAgICAgICAgICAgIHZfbWFz
a1RleENvb3JkID0gdmVjMihhX3ZlcnRleCk7CisgICAgICAgICAgICAgICAgZ2xfUG9zaXRpb24g
PSB1X21hdHJpeCAqIGFfdmVydGV4OworICAgICAgICAgICAgfQorICAgICAgICApOwogCi1UZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQp
Ci0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJT
b3VyY2VPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0T3BhY2l0eUFuZE1h
c2spCi17Ci0gICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24o
bV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1f
ZmxpcExvY2F0aW9uLCAidV9mbGlwIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNl
VGV4dHVyZUxvY2F0aW9uLCAic19zb3VyY2UiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9t
YXNrVGV4dHVyZUxvY2F0aW9uLCAic19tYXNrIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1f
b3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5Iik7Ci19CisgICAgc3RhdGljIGNvbnN0IGNoYXIq
IGZyYWdtZW50U2ltcGxlID0KKyAgICAgICAgU1RSSU5HSUZZKAorICAgICAgICAgICAgcHJlY2lz
aW9uIG1lZGl1bXAgZmxvYXQ7CisgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBs
ZXI7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OworICAgICAgICAg
ICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CisgICAgICAgICAgICB2b2lk
IG1haW4odm9pZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsb3dwIHZlYzQgY29s
b3IgPSB0ZXh0dXJlMkQoc19zYW1wbGVyLCB2X3NvdXJjZVRleENvb3JkKTsKKyAgICAgICAgICAg
ICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIHVfb3BhY2l0eSwgY29sb3IuYSAq
IHVfb3BhY2l0eSk7CisgICAgICAgICAgICB9CisgICAgICAgICk7CiAKLVRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bUFudGlhbGlhc2luZ05vTWFzayhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLSAgICA6IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJjZVNpbXBs
ZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VBbnRpYWxpYXNpbmdOb01hc2spCi17Ci0gICAgaW5pdGlh
bGl6ZVByb2dyYW0oKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwg
InVfbWF0cml4Iik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNlVGV4dHVyZUxvY2F0
aW9uLCAic19zb3VyY2UiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9jYXRp
b24sICJ1X29wYWNpdHkiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9leHBhbmRlZFF1YWRF
ZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbiwgInVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNw
YWNlIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fZmxpcExvY2F0aW9uLCAidV9mbGlwIik7
Ci19CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50QW50aWFsaWFzaW5nTm9NYXNrID0K
KyAgICAgICAgU1RSSU5HSUZZKAorICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7
CisgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBsZXI7CisgICAgICAgICAgICB2
YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKKyAgICAgICAgICAgIHVuaWZvcm0g
bG93cCBmbG9hdCB1X29wYWNpdHk7CisgICAgICAgICAgICB1bmlmb3JtIHZlYzMgdV9leHBhbmRl
ZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbOF07CisgICAgICAgICAgICB2b2lkIG1haW4oKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHZlYzQgc2FtcGxlZENvbG9yID0gdGV4dHVyZTJE
KHNfc2FtcGxlciwgY2xhbXAodl9zb3VyY2VUZXhDb29yZCwgMC4wLCAxLjApKTsKKyAgICAgICAg
ICAgICAgICB2ZWMzIHBvcyA9IHZlYzMoZ2xfRnJhZ0Nvb3JkLnh5LCAxKTsKKworICAgICAgICAg
ICAgICAgIC8vIFRoZSBkYXRhIHBhc3NlZCBpbiB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5T
cGFjZSBpcyBtZXJlbHkgdGhlCisgICAgICAgICAgICAgICAgLy8gcHJlLXNjYWxlZCBjb2VmZmVj
aWVudHMgb2YgdGhlIGxpbmUgZXF1YXRpb25zIGRlc2NyaWJpbmcgdGhlIGZvdXIgZWRnZXMKKyAg
ICAgICAgICAgICAgICAvLyBvZiB0aGUgZXhwYW5kZWQgcXVhZCBpbiBzY3JlZW4gc3BhY2UgYW5k
IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBib3gKKyAgICAgICAgICAgICAgICAvLyBvZiB0aGUg
ZXhwYW5kZWQgcXVhZC4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIFdl
IGFyZSBkb2luZyBhIHNpbXBsZSBkaXN0YW5jZSBjYWxjdWxhdGlvbiBoZXJlIGFjY29yZGluZyB0
byB0aGUgZm9ybXVsYToKKyAgICAgICAgICAgICAgICAvLyAoQSpwLnggKyBCKnAueSArIEMpIC8g
c3FydChBXjIgKyBCXjIpID0gZGlzdGFuY2UgZnJvbSBsaW5lIHRvIHAKKyAgICAgICAgICAgICAg
ICAvLyBOb3RlIHRoYXQgQSwgQiBhbmQgQyBoYXZlIGFscmVhZHkgYmVlbiBzY2FsZWQgYnkgMSAv
IHNxcnQoQV4yICsgQl4yKS4KKyAgICAgICAgICAgICAgICBmbG9hdCBhMCA9IGNsYW1wKGRvdCh1
X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVswXSwgcG9zKSwgMC4wLCAxLjApOworICAg
ICAgICAgICAgICAgIGZsb2F0IGExID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNj
cmVlblNwYWNlWzFdLCBwb3MpLCAwLjAsIDEuMCk7CisgICAgICAgICAgICAgICAgZmxvYXQgYTIg
PSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbMl0sIHBvcyksIDAu
MCwgMS4wKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBhMyA9IGNsYW1wKGRvdCh1X2V4cGFuZGVk
UXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVszXSwgcG9zKSwgMC4wLCAxLjApOworICAgICAgICAgICAg
ICAgIGZsb2F0IGE0ID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNl
WzRdLCBwb3MpLCAwLjAsIDEuMCk7CisgICAgICAgICAgICAgICAgZmxvYXQgYTUgPSBjbGFtcChk
b3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNV0sIHBvcyksIDAuMCwgMS4wKTsK
KyAgICAgICAgICAgICAgICBmbG9hdCBhNiA9IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2Vz
SW5TY3JlZW5TcGFjZVs2XSwgcG9zKSwgMC4wLCAxLjApOworICAgICAgICAgICAgICAgIGZsb2F0
IGE3ID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzddLCBwb3Mp
LCAwLjAsIDEuMCk7CisKKyAgICAgICAgICAgICAgICAvLyBOb3cgd2Ugd2FudCB0byByZWR1Y2Ug
dGhlIGFscGhhIHZhbHVlIG9mIHRoZSBmcmFnbWVudCBpZiBpdCBpcyBjbG9zZSB0byB0aGUKKyAg
ICAgICAgICAgICAgICAvLyBlZGdlcyBvZiB0aGUgZXhwYW5kZWQgcXVhZCAob3IgcmVjdGFuZ3Vs
YXIgYm91bmRpbmcgYm94IC0tIHdoaWNoIHNlZW1zIHRvIGJlCisgICAgICAgICAgICAgICAgLy8g
aW1wb3J0YW50IGZvciBiYWNrZmFjaW5nIHF1YWRzKS4gTm90ZSB0aGF0IHdlIGFyZSBjb21iaW5p
bmcgdGhlIGNvbnRyaWJ1dGlvbgorICAgICAgICAgICAgICAgIC8vIGZyb20gdGhlICh0b3AgfHwg
Ym90dG9tKSBhbmQgKGxlZnQgfHwgcmlnaHQpIGVkZ2UgYnkgc2ltcGx5IG11bHRpcGx5aW5nLiBU
aGlzIGZvbGxvd3MKKyAgICAgICAgICAgICAgICAvLyB0aGUgYXBwcm9hY2ggZGVzY3JpYmVkIGF0
OiBodHRwOi8vaHR0cC5kZXZlbG9wZXIubnZpZGlhLmNvbS9HUFVHZW1zMi9ncHVnZW1zMl9jaGFw
dGVyMjIuaHRtbCwKKyAgICAgICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2l0aG91dCB1c2lu
ZyBHYXVzc2lhbiB3ZWlnaHRzLgorICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHNhbXBs
ZWRDb2xvciAqIHVfb3BhY2l0eSAqIG1pbihtaW4oYTAsIGEyKSAqIG1pbihhMSwgYTMpLCBtaW4o
YTQsIGE2KSAqIG1pbihhNSwgYTcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKIAotVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi17Ci19Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50UmVjdFNpbXBsZSA9CisgICAgICAgIFNUUklO
R0lGWSgKKyAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OworICAgICAgICAgICAg
dW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfc2FtcGxlcjsKKyAgICAgICAgICAgIHVuaWZvcm0gbG93
cCB2ZWMyIHNfc2FtcGxlclNpemU7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9v
cGFjaXR5OworICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7
CisgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkRSZWN0KHNfc2FtcGxlciwgc19zYW1wbGVy
U2l6ZSAqIHZfc291cmNlVGV4Q29vcmQpOworICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9
IHZlYzQoY29sb3IucmdiICogdV9vcGFjaXR5LCBjb2xvci5hICogdV9vcGFjaXR5KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgKTsKIAotVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6On5UZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpCi17Ci19CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHZl
cnRleFNpbXBsZSA9CisgICAgICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAgIHVuaWZvcm0gbWF0
NCB1X21hdHJpeDsKKyAgICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X2ZsaXA7CisgICAg
ICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKKyAgICAgICAgICAgIHZhcnlpbmcgaGln
aHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOworICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdl9zb3VyY2VUZXhDb29yZCA9IHZlYzIoYV92
ZXJ0ZXgueCwgbWl4KGFfdmVydGV4LnksIDEuIC0gYV92ZXJ0ZXgueSwgdV9mbGlwKSk7CisgICAg
ICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIGFfdmVydGV4OworICAgICAgICAg
ICAgfQorICAgICAgICApOwogCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHN0YXRpYyBj
b25zdCBjaGFyKiB2ZXJ0ZXhTb2xpZENvbG9yID0KKyAgICAgICAgU1RSSU5HSUZZKAorICAgICAg
ICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OworICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQg
YV92ZXJ0ZXg7CisgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogYV92ZXJ0ZXg7CisgICAgICAg
ICAgICB9CisgICAgICAgICk7CiAKLS8vIENyZWF0ZSBhIG5vcm1hbCBkaXN0cmlidXRpb24gb2Yg
MjEgdmFsdWVzIGJldHdlZW4gLTIgYW5kIDIuCi0jZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9IQUxG
X1dJRFRIIDExCi0jZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9TVEVQIDAuMgogCi1TdGFuZGFyZEZp
bHRlclByb2dyYW06On5TdGFuZGFyZEZpbHRlclByb2dyYW0oKQotewotICAgIG1fY29udGV4dC0+
ZGV0YWNoU2hhZGVyKG1faWQsIG1fdmVydGV4U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmRlbGV0
ZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5kZXRhY2hTaGFkZXIobV9p
ZCwgbV9mcmFnbWVudFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIobV9mcmFn
bWVudFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKG1faWQpOwotfQorICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNvbGlkQ29sb3IgPQorICAgICAgICBTVFJJTkdJ
RlkoCisgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKKyAgICAgICAgICAgIHVu
aWZvcm0gdmVjNCB1X2NvbG9yOworICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdV9jb2xvcjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgKTsKIAotU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRl
clByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEZpbHRlck9wZXJhdGlvbjo6T3Bl
cmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNzKQotICAgIDogbV9jb250ZXh0KGNvbnRleHQp
Ci0gICAgLCBtX2lkKDApCi17Ci0gICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlID0K
LSAgICAgICAgICAgIFNUUklOR0lGWSgKLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBh
X3ZlcnRleDsKLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3RleENvb3JkOwotICAg
ICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOwotICAgICAgICAgICAg
ICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgdl90ZXhDb29yZCA9IHZlYzIoYV90ZXhDb29yZCk7Ci0gICAgICAgICAgICAgICAgICAgIGds
X1Bvc2l0aW9uID0gYV92ZXJ0ZXg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgKTsK
LQotI2RlZmluZSBTVEFOREFSRF9GSUxURVIoLi4uKSBcCi0gICAgICAgICJwcmVjaXNpb24gbWVk
aXVtcCBmbG9hdDtcbiJcCi0gICAgICAgICJ2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDtc
biJcCi0gICAgICAgICJ1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfYW1vdW50O1xuIlwKLSAgICAgICAg
InVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcbiJcCi0gICAgICAgICNfX1ZBX0FSR1NfXyBc
Ci0gICAgICAgICJ2b2lkIG1haW4odm9pZClcbiB7IGdsX0ZyYWdDb2xvciA9IHNoYWRlKHRleHR1
cmUyRCh1X3RleHR1cmUsIHZfdGV4Q29vcmQpKTsgfSIKLQotICAgIGNvbnN0IGNoYXIqIGZyYWdt
ZW50U2hhZGVyU291cmNlID0gMDsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6R1JBWVNDQUxFOgotICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNU
QU5EQVJEX0ZJTFRFUigKKyAgICBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4RmlsdGVyID0KKyAg
ICAgICAgU1RSSU5HSUZZKAorICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7Cisg
ICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3RleENvb3JkOworICAgICAgICAgICAgdmFyeWlu
ZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7CisgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2X3RleENvb3JkID0gdmVjMihhX3RleENvb3Jk
KTsKKyAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IGFfdmVydGV4OworICAgICAgICAgICAg
fQorICAgICAgICApOworCisgICAgI2RlZmluZSBTVEFOREFSRF9GSUxURVIoLi4uKSBcCisgICAg
ICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iXAorICAgICAgICAgICAgInZhcnlp
bmcgaGlnaHAgdmVjMiB2X3RleENvb3JkO1xuIlwKKyAgICAgICAgICAgICJ1bmlmb3JtIGhpZ2hw
IGZsb2F0IHVfYW1vdW50O1xuIlwKKyAgICAgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCBzX3Nh
bXBsZXI7XG4iXAorICAgICAgICAgICAgI19fVkFfQVJHU19fIFwKKyAgICAgICAgICAgICJ2b2lk
IG1haW4odm9pZClcbiB7IGdsX0ZyYWdDb2xvciA9IHNoYWRlKHRleHR1cmUyRChzX3NhbXBsZXIs
IHZfdGV4Q29vcmQpKTsgfSIKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudEdyYXlz
Y2FsZUZpbHRlciA9CisgICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKICAgICAgICAgICAgIGxvd3Ag
dmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgbG93cCBmbG9hdCBhbW91bnQgPSAxLjAgLSB1X2Ftb3VudDsKQEAgLTQwOSw5ICsyOTAsOSBA
QCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCwgRmlsdGVyTwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bG9yLmEpOwogICAgICAgICAgICAgfQogICAgICAgICApOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNl
ID0gU1RBTkRBUkRfRklMVEVSKAorCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2Vw
aWFGaWx0ZXIgPQorICAgICAgICBTVEFOREFSRF9GSUxURVIoCiAgICAgICAgICAgICBsb3dwIHZl
YzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IGxvd3AgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9hbW91bnQ7CkBAIC00MjEsOSArMzAyLDkgQEAg
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQsIEZpbHRlck8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xv
ci5hKTsKICAgICAgICAgICAgIH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgotICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJj
ZSA9IFNUQU5EQVJEX0ZJTFRFUigKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNh
dHVyYXRlRmlsdGVyID0KKyAgICAgICAgU1RBTkRBUkRfRklMVEVSKAogICAgICAgICAgICAgbG93
cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICByZXR1cm4gdmVjNCgoMC4yMTMgKyAwLjc4NyAqIHVfYW1vdW50KSAqIGNvbG9yLnIgKyAo
MC43MTUgLSAwLjcxNSAqIHVfYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgLSAwLjA3MiAqIHVf
YW1vdW50KSAqIGNvbG9yLmIsCkBAIC00MzIsOSArMzEzLDkgQEAgU3RhbmRhcmRGaWx0ZXJQcm9n
cmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEZp
bHRlck8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5hKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkhVRV9ST1RBVEU6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklM
VEVSKAorCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50SHVlUm90YXRlRmlsdGVyID0K
KyAgICAgICAgU1RBTkRBUkRfRklMVEVSKAogICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxv
d3AgdmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBoaWdocCBmbG9h
dCBwaSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDY7CkBAIC00NDYsNTggKzMyNyw2MiBAQCBTdGFu
ZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgRmlsdGVyTwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLmEp
OwogICAgICAgICAgICAgfQogICAgICAgICApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6SU5WRVJUOgotICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNU
QU5EQVJEX0ZJTFRFUigKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudEludmVydEZp
bHRlciA9CisgICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKICAgICAgICAgICAgIGxvd3AgZmxvYXQg
aW52ZXJ0KGxvd3AgZmxvYXQgbikgeyByZXR1cm4gKDEuMCAtIG4pICogdV9hbW91bnQgKyBuICog
KDEuMCAtIHVfYW1vdW50KTsgfQogICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVj
NCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdmVjNChpbnZl
cnQoY29sb3IuciksIGludmVydChjb2xvci5nKSwgaW52ZXJ0KGNvbG9yLmIpLCBjb2xvci5hKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0g
U1RBTkRBUkRfRklMVEVSKAorCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50QnJpZ2h0
bmVzc0ZpbHRlciA9CisgICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKICAgICAgICAgICAgIGxvd3Ag
dmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHZlYzQoY29sb3IucmdiICogKDEuMCArIHVfYW1vdW50KSwgY29sb3IuYSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpDT05UUkFTVDoKLSAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVEFO
REFSRF9GSUxURVIoCisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRDb250cmFzdEZp
bHRlciA9CisgICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKICAgICAgICAgICAgIGxvd3AgZmxvYXQg
Y29udHJhc3QobG93cCBmbG9hdCBuKSB7IHJldHVybiAobiAtIDAuNSkgKiB1X2Ftb3VudCArIDAu
NTsgfQogICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdmVjNChjb250cmFzdChjb2xvci5yKSwg
Y29udHJhc3QoY29sb3IuZyksIGNvbnRyYXN0KGNvbG9yLmIpLCBjb2xvci5hKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246Ok9QQUNJVFk6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklM
VEVSKAorCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50T3BhY2l0eUZpbHRlciA9Cisg
ICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKICAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dw
IHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQo
Y29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSAqIHVfYW1vdW50KTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkJMVVI6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RSSU5HSUZZKAorCisj
ZGVmaW5lIEJMVVJfQ09OU1RBTlRTICIjZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRI
IDExXG4jZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9TVEVQIDAuMlxuIgorCisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGZyYWdtZW50Qmx1ckZpbHRlciA9CisgICAgICAgIEJMVVJfQ09OU1RBTlRTCisg
ICAgICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5vcm1hbCBkaXN0cmli
dXRpb24gb2YgMjEgdmFsdWVzIGJldHdlZW4gLTIgYW5kIDIuCiAgICAgICAgICAgICBwcmVjaXNp
b24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENv
b3JkOwogICAgICAgICAgICAgdW5pZm9ybSBsb3dwIHZlYzIgdV9ibHVyUmFkaXVzOwotICAgICAg
ICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlOworICAgICAgICAgICAgdW5pZm9ybSBz
YW1wbGVyMkQgc19zYW1wbGVyOwogICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFu
S2VybmVsW0dBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsKIAogICAgICAgICAgICAgbG93cCB2
ZWM0IHNhbXBsZUNvbG9yKGZsb2F0IHJhZGl1cykKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICB2ZWMyIGNvb3JkID0gdl90ZXhDb29yZCArIHJhZGl1cyAqIHVfYmx1clJhZGl1czsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHVfdGV4dHVyZSwgY29vcmQpICogZmxvYXQo
Y29vcmQueCA+IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8
IDEuKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHNfc2FtcGxlciwgY29vcmQp
ICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYg
Y29vcmQueSA8IDEuKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgdmVjNCBibHVyKCkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2ZWM0IHRvdGFsID0gc2FtcGxlQ29sb3Io
MCkgKiB1X2dhdXNzaWFuS2VybmVsWzBdOworICAgICAgICAgICAgICAgIHZlYzQgdG90YWwgPSBz
YW1wbGVDb2xvcigwLikgKiB1X2dhdXNzaWFuS2VybmVsWzBdOwogICAgICAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAxOyBpIDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7IGkrKykgewogICAg
ICAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVDb2xvcihmbG9hdChpKSAqIEdBVVNTSUFO
X0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07CiAgICAgICAgICAgICAgICAgICAg
IHRvdGFsICs9IHNhbXBsZUNvbG9yKGZsb2F0KC0xICogaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RF
UCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwpAQCAtNTExLDI4MiArMzk2LDEzMCBAQCBTdGFuZGFy
ZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCwgRmlsdGVyTwogICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IGJsdXIoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOgotICAgICAgICBzd2l0Y2ggKHBhc3MpIHsKLSAgICAg
ICAgY2FzZSAwOiB7Ci0gICAgICAgICAgICAvLyBGaXJzdCBwYXNzOiBob3Jpem9udGFsIGFscGhh
IGJsdXIuCi0gICAgICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUUklOR0lGWSgKLSAg
ICAgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSAgICAgICAgICAgICAgICB2
YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKLSAgICAgICAgICAgICAgICB1bmlmb3JtIGxv
d3AgZmxvYXQgdV9zaGFkb3dCbHVyUmFkaXVzOwotICAgICAgICAgICAgICAgIHVuaWZvcm0gbG93
cCB2ZWMyIHVfc2hhZG93T2Zmc2V0OwotICAgICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJE
IHVfdGV4dHVyZTsKLSAgICAgICAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZ2F1c3NpYW5LZXJu
ZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdOwotCi0gICAgICAgICAgICAgICAgbG93cCBm
bG9hdCBzYW1wbGVBbHBoYShmbG9hdCByYWRpdXMpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90ZXhDb29yZCAtIHVfc2hhZG93T2Zmc2V0ICsg
dmVjMihyYWRpdXMgKiB1X3NoYWRvd0JsdXJSYWRpdXMsIDAuKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRleHR1cmUyRCh1X3RleHR1cmUsIGNvb3JkKS5hICogZmxvYXQoY29vcmQueCA+
IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBsb3dwIGZsb2F0IHNoYWRvd0JsdXJI
b3Jpem9udGFsKCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0
IHRvdGFsID0gc2FtcGxlQWxwaGEoMCkgKiB1X2dhdXNzaWFuS2VybmVsWzBdOwotICAgICAgICAg
ICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRI
OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhhKGZs
b2F0KGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhhKGZsb2F0KC0xICogaSkg
KiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwotICAgICAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsOwotICAgICAg
ICAgICAgICAgIH0KKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkb3dGaWx0ZXIx
ID0KKyAgICAgICAgQkxVUl9DT05TVEFOVFMKKyAgICAgICAgU1RSSU5HSUZZKAorICAgICAgICAg
ICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZl
YzIgdl90ZXhDb29yZDsKKyAgICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X2JsdXJSYWRp
dXM7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVjMiB1X3NoYWRvd09mZnNldDsKKyAgICAg
ICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc2FtcGxlcjsKKyAgICAgICAgICAgIHVuaWZvcm0g
ZmxvYXQgdV9nYXVzc2lhbktlcm5lbFtHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSF07CiAKLSAg
ICAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4sIDEuLCAxLiwgMS4pICogc2hhZG93
Qmx1ckhvcml6b250YWwoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICApOwotICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBsb3dwIGZsb2F0IHNhbXBsZUFscGhhKGZsb2F0
IHJhZGl1cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90
ZXhDb29yZCAtIHVfc2hhZG93T2Zmc2V0ICsgdmVjMihyYWRpdXMgKiB1X2JsdXJSYWRpdXMsIDAu
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHNfc2FtcGxlciwgY29vcmQpLmEg
KiBmbG9hdChjb29yZC54ID4gMC4gJiYgY29vcmQueSA+IDAuICYmIGNvb3JkLnggPCAxLiAmJiBj
b29yZC55IDwgMS4pOwogICAgICAgICAgICAgfQotICAgICAgICBjYXNlIDE6IHsKLSAgICAgICAg
ICAgIC8vIFNlY29uZCBwYXNzOiB2ZXJ0aWNhbCBhbHBoYSBibHVyIGFuZCBjb21wb3NpdGUgd2l0
aCBvcmlnaW4uCi0gICAgICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUUklOR0lGWSgK
LSAgICAgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSAgICAgICAgICAgICAg
ICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKLSAgICAgICAgICAgICAgICB1bmlmb3Jt
IGxvd3AgZmxvYXQgdV9zaGFkb3dCbHVyUmFkaXVzOwotICAgICAgICAgICAgICAgIHVuaWZvcm0g
bG93cCB2ZWM0IHVfc2hhZG93Q29sb3I7Ci0gICAgICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVy
MkQgdV90ZXh0dXJlOwotICAgICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVfY29udGVu
dFRleHR1cmU7Ci0gICAgICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVs
W0dBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsKLQotICAgICAgICAgICAgICAgIGxvd3AgZmxv
YXQgc2FtcGxlQWxwaGEoZmxvYXQgcikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHZlYzIgY29vcmQgPSB2X3RleENvb3JkICsgdmVjMigwLiwgciAqIHVfc2hhZG93Qmx1
clJhZGl1cyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlMkQodV90ZXh0dXJl
LCBjb29yZCkuYSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQu
eCA8IDEuICYmIGNvb3JkLnkgPCAxLik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgbG93cCBmbG9hdCBzaGFkb3dCbHVyVmVydGljYWwoKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgZmxvYXQgdG90YWwgPSBzYW1wbGVBbHBoYSgwKSAqIHVfZ2F1
c3NpYW5LZXJuZWxbMF07Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwg
R0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkg
KiB1X2dhdXNzaWFuS2VybmVsW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0g
c2FtcGxlQWxwaGEoZmxvYXQoLTEgKiBpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1
c3NpYW5LZXJuZWxbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdG90YWw7CisgICAgICAgICAgICBsb3dwIGZsb2F0IHNoYWRvd0JsdXJIb3Jp
em9udGFsKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmbG9hdCB0b3RhbCA9IHNh
bXBsZUFscGhhKDAuKSAqIHVfZ2F1c3NpYW5LZXJuZWxbMF07CisgICAgICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhhKGZsb2F0KGkpICogR0FVU1NJQU5f
S0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKKyAgICAgICAgICAgICAgICAgICAg
dG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoLTEgKiBpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQ
KSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgbG93cCB2ZWM0IHNvdXJjZU92ZXIobG93cCB2ZWM0IHNvdXJjZSwgbG93cCB2ZWM0IGRl
c3RpbmF0aW9uKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ29t
cG9zaXRlIHRoZSBzaGFkb3cgd2l0aCB0aGUgb3JpZ2luYWwgdGV4dHVyZS4KLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHNvdXJjZSArIGRlc3RpbmF0aW9uICogKDEuIC0gc291cmNlLmEpOwot
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdG90YWw7CisgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHNvdXJjZU92ZXIodGV4dHVy
ZTJEKHVfY29udGVudFRleHR1cmUsIHZfdGV4Q29vcmQpLCBzaGFkb3dCbHVyVmVydGljYWwoKSAq
IHVfc2hhZG93Q29sb3IpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICk7Ci0gICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4sIDEuLCAxLiwgMS4pICog
c2hhZG93Qmx1ckhvcml6b250YWwoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgICAg
ICApOwogCi0gICAgaWYgKCFmcmFnbWVudFNoYWRlclNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIFBsYXRmb3JtM0RPYmplY3QgdmVydGV4U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFk
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIpOwotICAgIFBsYXRmb3JtM0RPYmpl
Y3QgZnJhZ21lbnRTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBR01FTlRfU0hBREVSKTsKLSAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZSh2ZXJ0
ZXhTaGFkZXIsIHZlcnRleFNoYWRlclNvdXJjZSk7Ci0gICAgbV9jb250ZXh0LT5zaGFkZXJTb3Vy
Y2UoZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyU291cmNlKTsKLSAgICBQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW1JRCA9IG1fY29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOwotICAgIG1fY29u
dGV4dC0+Y29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgIG1fY29udGV4dC0+Y29tcGls
ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Ci0jaWYgIUxPR19ESVNBQkxFRAotICAgIFN0cmluZyBs
b2c7Ci0gICAgbV9jb250ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKGZyYWdtZW50U2hhZGVyKTsKLSAg
ICBXVEZMb2coJkxvZ0NvbXBvc2l0aW5nLCAiJXNcbiIsIGxvZy5hc2NpaSgpLmRhdGEoKSk7Ci0j
ZW5kaWYKLSAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIHZlcnRleFNoYWRl
cik7Ci0gICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNoYWRl
cik7Ci0gICAgbV9jb250ZXh0LT5saW5rUHJvZ3JhbShwcm9ncmFtSUQpOwotCi0gICAgbV92ZXJ0
ZXhBdHRyaWIgPSBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgImFfdmVy
dGV4Iik7Ci0gICAgbV90ZXhDb29yZEF0dHJpYiA9IG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRp
b24ocHJvZ3JhbUlELCAiYV90ZXhDb29yZCIpOwotICAgIG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlv
biA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfdGV4dHVyZSIp
OwotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NB
TEU6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgotICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpTQVRVUkFURToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToK
LSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpCUklHSFRORVNTOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKLSAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAgbV91bmlmb3JtTG9jYXRp
b25zLmFtb3VudCA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVf
YW1vdW50Iik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVS
OgotICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5yYWRpdXMgPSBtX2NvbnRleHQtPmdl
dFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2JsdXJSYWRpdXMiKTsKLSAgICAgICAgbV91
bmlmb3JtTG9jYXRpb25zLmJsdXIuZ2F1c3NpYW5LZXJuZWwgPSBtX2NvbnRleHQtPmdldFVuaWZv
cm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2dhdXNzaWFuS2VybmVsIik7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKLSAgICAgICAgbV91bmlm
b3JtTG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9j
YXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dCbHVyUmFkaXVzIik7Ci0gICAgICAgIG1fdW5pZm9y
bUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3NpYW5LZXJuZWwgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1M
b2NhdGlvbihwcm9ncmFtSUQsICJ1X2dhdXNzaWFuS2VybmVsIik7Ci0gICAgICAgIGlmICghcGFz
cykKLSAgICAgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cub2Zmc2V0ID0gbV9jb250
ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dPZmZzZXQiKTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIGNvbG9yIGFuZCB0
aGUgY29udGVudCB0ZXh0dXJlIGluIHRoZSBzZWNvbmQgcGFzcywgdGhlIGZpcnN0IHBhc3MgaXMg
b25seSBhIGhvcml6b250YWwgYWxwaGEgYmx1ci4KLSAgICAgICAgICAgIG1fdW5pZm9ybUxvY2F0
aW9ucy5zaGFkb3cuY29sb3IgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFt
SUQsICJ1X3NoYWRvd0NvbG9yIik7Ci0gICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hh
ZG93LmNvbnRlbnRUZXh0dXJlID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3Jh
bUlELCAidV9jb250ZW50VGV4dHVyZSIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBtX2lkID0gcHJvZ3JhbUlEOwot
ICAgIG1fdmVydGV4U2hhZGVyID0gdmVydGV4U2hhZGVyOwotICAgIG1fZnJhZ21lbnRTaGFkZXIg
PSBmcmFnbWVudFNoYWRlcjsKLX0KKyAgICAvLyBTZWNvbmQgcGFzczogdmVydGljYWwgYWxwaGEg
Ymx1ciBhbmQgY29tcG9zaXRlIHdpdGggb3JpZ2luLgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBm
cmFnbWVudFNoYWRvd0ZpbHRlcjIgPQorICAgICAgICBCTFVSX0NPTlNUQU5UUworICAgICAgICBT
VFJJTkdJRlkoCisgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKKyAgICAgICAg
ICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOworICAgICAgICAgICAgdW5pZm9ybSBs
b3dwIGZsb2F0IHVfYmx1clJhZGl1czsKKyAgICAgICAgICAgIHVuaWZvcm0gbG93cCB2ZWM0IHVf
c2hhZG93Q29sb3I7CisgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBsZXI7Cisg
ICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX2NvbnRlbnRUZXh0dXJlOworICAgICAgICAg
ICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFOX0tFUk5FTF9IQUxGX1dJ
RFRIXTsKIAotUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IFN0YW5kYXJkRmlsdGVy
UHJvZ3JhbTo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBGaWx0ZXJPcGVyYXRp
b246Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKLXsKLSAgICBSZWZQdHI8U3Rh
bmRhcmRGaWx0ZXJQcm9ncmFtPiBwcm9ncmFtID0gYWRvcHRSZWYobmV3IFN0YW5kYXJkRmlsdGVy
UHJvZ3JhbShjb250ZXh0LCB0eXBlLCBwYXNzKSk7Ci0gICAgaWYgKCFwcm9ncmFtLT5tX2lkKQot
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGxvd3AgZmxvYXQgc2FtcGxlQWxwaGEoZmxv
YXQgcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90ZXhD
b29yZCArIHZlYzIoMC4sIHIgKiB1X2JsdXJSYWRpdXMpOworICAgICAgICAgICAgICAgIHJldHVy
biB0ZXh0dXJlMkQoc19zYW1wbGVyLCBjb29yZCkuYSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBj
b29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7CisgICAgICAgICAg
ICB9CiAKLSAgICByZXR1cm4gcHJvZ3JhbTsKLX0KKyAgICAgICAgICAgIGxvd3AgZmxvYXQgc2hh
ZG93Qmx1clZlcnRpY2FsKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmbG9hdCB0
b3RhbCA9IHNhbXBsZUFscGhhKDAuKSAqIHVfZ2F1c3NpYW5LZXJuZWxbMF07CisgICAgICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgaSsr
KSB7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhhKGZsb2F0KGkpICog
R0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKKyAgICAgICAgICAg
ICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoLTEgKiBpKSAqIEdBVVNTSUFOX0tF
Uk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07CisgICAgICAgICAgICAgICAgfQogCi1z
dGF0aWMgaW5saW5lIGZsb2F0IGdhdXNzKGZsb2F0IHgpCi17Ci0gICAgcmV0dXJuIGV4cCgtKHgg
KiB4KSAvIDIuKTsKLX0KKyAgICAgICAgICAgICAgICByZXR1cm4gdG90YWw7CisgICAgICAgICAg
ICB9CiAKLXN0YXRpYyBmbG9hdCogZ2F1c3NpYW5LZXJuZWwoKQotewotICAgIHN0YXRpYyBib29s
IHByZXBhcmVkID0gZmFsc2U7Ci0gICAgc3RhdGljIGZsb2F0IGtlcm5lbFtHQVVTU0lBTl9LRVJO
RUxfSEFMRl9XSURUSF0gPSB7MCwgfTsKKyAgICAgICAgICAgIGxvd3AgdmVjNCBzb3VyY2VPdmVy
KGxvd3AgdmVjNCBzb3VyY2UsIGxvd3AgdmVjNCBkZXN0aW5hdGlvbikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAvLyBDb21wb3NpdGUgdGhlIHNoYWRvdyB3aXRoIHRoZSBvcmlnaW5h
bCB0ZXh0dXJlLgorICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2UgKyBkZXN0aW5hdGlvbiAq
ICgxLiAtIHNvdXJjZS5hKTsKKyAgICAgICAgICAgIH0KIAotICAgIGlmIChwcmVwYXJlZCkKLSAg
ICAgICAgcmV0dXJuIGtlcm5lbDsKKyAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHNvdXJjZU92ZXIodGV4dHVy
ZTJEKHNfY29udGVudFRleHR1cmUsIHZfdGV4Q29vcmQpLCBzaGFkb3dCbHVyVmVydGljYWwoKSAq
IHVfc2hhZG93Q29sb3IpOworICAgICAgICAgICAgfQorICAgICAgICApOwogCi0gICAga2VybmVs
WzBdID0gZ2F1c3MoMCk7Ci0gICAgZmxvYXQgc3VtID0ga2VybmVsWzBdOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgKytpKSB7Ci0gICAg
ICAgIGtlcm5lbFtpXSA9IGdhdXNzKGkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCk7Ci0gICAgICAg
IHN1bSArPSAyICoga2VybmVsW2ldOworICAgIGlmIChzcGVjcy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgc3BlY3MucmVzaXplKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpMYXN0RmlsdGVyKTsK
KyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkRlZmF1bHRdID0gU2hh
ZGVyU3BlYyh2ZXJ0ZXhTaW1wbGUsIGZyYWdtZW50U2ltcGxlKTsKKyAgICAgICAgc3BlY3NbVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNvbGlkQ29sb3JdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhT
b2xpZENvbG9yLCBmcmFnbWVudFNvbGlkQ29sb3IpOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6UmVjdF0gPSBTaGFkZXJTcGVjKHZlcnRleFNpbXBsZSwgZnJhZ21l
bnRSZWN0U2ltcGxlKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
Ok1hc2tlZF0gPSBTaGFkZXJTcGVjKHZlcnRleE9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudE9wYWNp
dHlBbmRNYXNrKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok1h
c2tlZFJlY3RdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRSZWN0
T3BhY2l0eUFuZE1hc2spOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6QW50aWFsaWFzZWRdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhTaW1wbGUsIGZyYWdtZW50QW50aWFs
aWFzaW5nTm9NYXNrKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OkdyYXlzY2FsZUZpbHRlcl0gPSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRHcmF5
c2NhbGVGaWx0ZXIpOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6
U2VwaWFGaWx0ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50U2VwaWFGaWx0
ZXIpOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2F0dXJhdGVG
aWx0ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50U2F0dXJhdGVGaWx0ZXIp
OworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6SHVlUm90YXRlRmls
dGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudEh1ZVJvdGF0ZUZpbHRlcik7
CisgICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpCcmlnaHRuZXNzRmls
dGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudEJyaWdodG5lc3NGaWx0ZXIp
OworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Q29udHJhc3RGaWx0
ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50Q29udHJhc3RGaWx0ZXIpOwor
ICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6SW52ZXJ0RmlsdGVyXSA9
IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudEludmVydEZpbHRlcik7CisgICAgICAg
IHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5RmlsdGVyXSA9IFNoYWRl
clNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudE9wYWNpdHlGaWx0ZXIpOworICAgICAgICBzcGVj
c1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Qmx1ckZpbHRlcl0gPSBTaGFkZXJTcGVjKHZl
cnRleEZpbHRlciwgZnJhZ21lbnRCbHVyRmlsdGVyKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OlNoYWRvd0ZpbHRlclBhc3MxXSA9IFNoYWRlclNwZWModmVydGV4
RmlsdGVyLCBmcmFnbWVudFNoYWRvd0ZpbHRlcjEpOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6U2hhZG93RmlsdGVyUGFzczJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhG
aWx0ZXIsIGZyYWdtZW50U2hhZG93RmlsdGVyMik7CiAgICAgfQogCi0gICAgLy8gTm9ybWFsaXpl
IHRoZSBrZXJuZWwKLSAgICBmbG9hdCBzY2FsZSA9IDEgLyBzdW07Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyArK2kpCi0gICAgICAgIGtl
cm5lbFtpXSAqPSBzY2FsZTsKLQotICAgIHByZXBhcmVkID0gdHJ1ZTsKLSAgICByZXR1cm4ga2Vy
bmVsOworICAgIEFTU0VSVChzcGVjcy5zaXplKCkgPiBrZXkpOworICAgIFNoYWRlclNwZWMmIHNw
ZWMgPSBzcGVjc1trZXldOworICAgIHZlcnRleFNvdXJjZSA9IHNwZWMudmVydGV4U2hhZGVyOwor
ICAgIGZyYWdtZW50U291cmNlID0gc3BlYy5mcmFnbWVudFNoYWRlcjsKIH0KIAotdm9pZCBTdGFu
ZGFyZEZpbHRlclByb2dyYW06OnByZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRp
b24sIHVuc2lnbmVkIHBhc3MsIGNvbnN0IEludFNpemUmIHNpemUsIEdDM0R1aW50IGNvbnRlbnRU
ZXh0dXJlKQorVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIDogbV9jb250ZXh0KGNvbnRl
eHQpCiB7Ci0gICAgbV9jb250ZXh0LT51c2VQcm9ncmFtKG1faWQpOwotICAgIHN3aXRjaCAob3Bl
cmF0aW9uLmdldE9wZXJhdGlvblR5cGUoKSkgewotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpH
UkFZU0NBTEU6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgotICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpTQVRVUkFURToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JP
VEFURToKLSAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLmFt
b3VudCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiY+
KG9wZXJhdGlvbikuYW1vdW50KCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6SU5WRVJUOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgot
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKLSAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6T1BBQ0lUWToKLSAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWYobV91bmlmb3JtTG9j
YXRpb25zLmFtb3VudCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZp
bHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogewotICAgICAgICBjb25zdCBCbHVyRmlsdGVy
T3BlcmF0aW9uJiBibHVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiY+
KG9wZXJhdGlvbik7Ci0gICAgICAgIEZsb2F0U2l6ZSByYWRpdXM7Ci0KLSAgICAgICAgLy8gQmx1
ciBpcyBkb25lIGluIHR3byBwYXNzZXMsIGZpcnN0IGhvcml6b250YWxseSBhbmQgdGhlbiB2ZXJ0
aWNhbGx5LiBUaGUgc2FtZSBzaGFkZXIgaXMgdXNlZCBmb3IgYm90aC4KLSAgICAgICAgaWYgKHBh
c3MpCi0gICAgICAgICAgICByYWRpdXMuc2V0SGVpZ2h0KGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1
ci5zdGREZXZpYXRpb24oKSwgc2l6ZS5oZWlnaHQoKSkgLyBzaXplLmhlaWdodCgpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgcmFkaXVzLnNldFdpZHRoKGZsb2F0VmFsdWVGb3JMZW5ndGgo
Ymx1ci5zdGREZXZpYXRpb24oKSwgc2l6ZS53aWR0aCgpKSAvIHNpemUud2lkdGgoKSk7Ci0KLSAg
ICAgICAgbV9jb250ZXh0LT51bmlmb3JtMmYobV91bmlmb3JtTG9jYXRpb25zLmJsdXIucmFkaXVz
LCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKTsKLSAgICAgICAgbV9jb250ZXh0LT51
bmlmb3JtMWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLmdhdXNzaWFuS2VybmVsLCBHQVVTU0lB
Tl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAg
Y29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgc2hhZG93ID0gc3RhdGljX2Nhc3Q8Y29u
c3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbik7Ci0gICAgICAgIHN3aXRj
aCAocGFzcykgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAvLyBGaXJzdCBwYXNzOiB2
ZXJ0aWNhbCBhbHBoYSBibHVyLgotICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMmYobV91
bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5vZmZzZXQsIGZsb2F0KHNoYWRvdy5sb2NhdGlvbigpLngo
KSkgLyBmbG9hdChzaXplLndpZHRoKCkpLCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS55KCkpIC8g
ZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWYo
bV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzLCBzaGFkb3cuc3RkRGV2aWF0aW9u
KCkgLyBmbG9hdChzaXplLndpZHRoKCkpKTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9y
bTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9L
RVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHdlIG5lZWQgdGhl
IHNoYWRvdyBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBmb3IgY29tcG9zaXRpbmcuCi0g
ICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93
LmJsdXJSYWRpdXMsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkp
KTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMu
c2hhZG93LmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3Np
YW5LZXJuZWwoKSk7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkUxKTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbnRlbnRUZXh0dXJlKTsKLSAgICAg
ICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29u
dGVudFRleHR1cmUsIDEpOwotICAgICAgICAgICAgZmxvYXQgciwgZywgYiwgYTsKLSAgICAgICAg
ICAgIHNoYWRvdy5jb2xvcigpLmdldFJHQkEociwgZywgYiwgYSk7Ci0gICAgICAgICAgICBtX2Nv
bnRleHQtPnVuaWZvcm00ZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbG9yLCByLCBnLCBi
LCBhKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CiB9CiAKLVBhc3NSZWZQdHI8
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hh
ZGVyRm9yRmlsdGVyKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgZmlsdGVyLCB1bnNpZ25lZCBwYXNz
KQorVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6On5UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cigpCiB7Ci0gICAgUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbTsKLSAgICBG
aWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSA9IGZpbHRlci5nZXRPcGVyYXRpb25U
eXBlKCk7Ci0gICAgaW50IGtleSA9IGludCh0eXBlKSB8IChwYXNzIDw8IDE2KTsKLSAgICBGaWx0
ZXJNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9maWx0ZXJNYXAuZmluZChrZXkpOwotICAgIGlm
IChpdGVyYXRvciA9PSBtX2ZpbHRlck1hcC5lbmQoKSkgewotICAgICAgICBwcm9ncmFtID0gU3Rh
bmRhcmRGaWx0ZXJQcm9ncmFtOjpjcmVhdGUobV9jb250ZXh0LCB0eXBlLCBwYXNzKTsKLSAgICAg
ICAgaWYgKCFwcm9ncmFtKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgbV9maWx0
ZXJNYXAuYWRkKGtleSwgcHJvZ3JhbSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHByb2dyYW0gPSBp
dGVyYXRvci0+c2Vjb25kOwotCi0gICAgcmV0dXJuIHByb2dyYW07CiB9CiAKLXVuc2lnbmVkIFRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRQYXNzZXNSZXF1aXJlZEZvckZpbHRlcihjb25z
dCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0+IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQ
cm9ncmFtKFNoYWRlcktleSBrZXkpCiB7Ci0gICAgc3dpdGNoIChvcGVyYXRpb24uZ2V0T3BlcmF0
aW9uVHlwZSgpKSB7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKLSAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNB
VFVSQVRFOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgotICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdI
VE5FU1M6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgotICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpPUEFDSVRZOgotICAgICAgICByZXR1cm4gMTsKLSAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6QkxVUjoKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6
Ci0gICAgICAgIC8vIFdlIHVzZSB0d28tcGFzc2VzICh2ZXJ0aWNhbCtob3Jpem9udGFsKSBmb3Ig
Ymx1ciBhbmQgZHJvcC1zaGFkb3cuCi0gICAgICAgIHJldHVybiAyOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1h
cDo6aXRlcmF0b3IgaXQgPSBtX3Byb2dyYW1zLmZpbmQoa2V5KTsKKyAgICBpZiAoaXQgIT0gbV9w
cm9ncmFtcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CiAKKyAgICBTdHJpbmcg
dmVydGV4U2hhZGVyOworICAgIFN0cmluZyBmcmFnbWVudFNoYWRlcjsKKyAgICBnZXRTaGFkZXJT
cGVjKGtleSwgdmVydGV4U2hhZGVyLCBmcmFnbWVudFNoYWRlcik7CisgICAgUmVmUHRyPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OmNyZWF0ZShtX2NvbnRleHQsIHZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIpOworICAg
IG1fcHJvZ3JhbXMuYWRkKGtleSwgcHJvZ3JhbSk7CisgICAgcmV0dXJuIHByb2dyYW07CiB9Ci0K
LSNlbmRpZgogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5oCmluZGV4IDFmZmI3MTAuLjEzOTlkODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlci5oCkBAIC0yMSwyMzMgKzIxLDEwMiBAQAogI2lmbmRlZiBUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcl9oCiAjZGVmaW5lIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyX2gKIAot
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQot
Ci0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUg
IlRleHR1cmVNYXBwZXJHTC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNp
ZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0jaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgotI2Vu
ZGlmCisjaW5jbHVkZSA8U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
Qml0bWFwVGV4dHVyZTsKLWNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOworI2RlZmlu
ZSBURVhNQVBfREVDTEFSRV9WQVJJQUJMRShBY2Nlc3NvciwgTmFtZSwgVHlwZSkgR0MzRHVpbnQg
QWNjZXNzb3IjI0xvY2F0aW9uKCkgeyBzdGF0aWMgY29uc3QgY2hhciogbmFtZSA9IE5hbWU7IHJl
dHVybiBnZXRMb2NhdGlvbihuYW1lLCBuYW1lLCBUeXBlKTsgfQorI2RlZmluZSBURVhNQVBfREVD
TEFSRV9VTklGT1JNKEFjY2Vzc29yKSBURVhNQVBfREVDTEFSRV9WQVJJQUJMRShBY2Nlc3Nvciwg
InVfIiNBY2Nlc3NvciwgVW5pZm9ybVZhcmlhYmxlKQorI2RlZmluZSBURVhNQVBfREVDTEFSRV9B
VFRSSUJVVEUoQWNjZXNzb3IpIFRFWE1BUF9ERUNMQVJFX1ZBUklBQkxFKEFjY2Vzc29yLCAiYV8i
I0FjY2Vzc29yLCBBdHRyaWJWYXJpYWJsZSkKKyNkZWZpbmUgVEVYTUFQX0RFQ0xBUkVfU0FNUExF
UihBY2Nlc3NvcikgVEVYTUFQX0RFQ0xBUkVfVkFSSUFCTEUoQWNjZXNzb3IsICJzXyIjQWNjZXNz
b3IsIFVuaWZvcm1WYXJpYWJsZSkKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0g
OiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gewogcHVibGlj
OgotICAgIFBsYXRmb3JtM0RPYmplY3QgaWQoKSB7IHJldHVybiBtX2lkOyB9Ci0gICAgR0MzRHVp
bnQgdmVydGV4QXR0cmliKCkgeyByZXR1cm4gbV92ZXJ0ZXhBdHRyaWI7IH0KKyAgICBQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW1JRCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKyAgICBHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBjcmVhdGUoUGFzc1Jl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwgY29uc3QgU3RyaW5nJiB2ZXJ0ZXgsIGNv
bnN0IFN0cmluZyYgZnJhZ21lbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleCwgZnJhZ21lbnQpKTsK
KyAgICB9CiAKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQz
RCosIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRT
aGFkZXJTb3VyY2UpOwogICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCk7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBU
ZXh0dXJlKikgeyB9Ci0gICAgR0MzRGludCBtYXRyaXhMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fbWF0cml4TG9jYXRpb247IH0KLSAgICBHQzNEaW50IGZsaXBMb2NhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fZmxpcExvY2F0aW9uOyB9Ci0gICAgR0MzRGludCB0ZXh0dXJlU2l6ZUxvY2F0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlU2l6ZUxvY2F0aW9uOyB9Ci0gICAgR0MzRGludCBz
b3VyY2VUZXh0dXJlTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVRleHR1cmVMb2Nh
dGlvbjsgfQotICAgIEdDM0RpbnQgbWFza1RleHR1cmVMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fbWFza1RleHR1cmVMb2NhdGlvbjsgfQotICAgIEdDM0RpbnQgb3BhY2l0eUxvY2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9vcGFjaXR5TG9jYXRpb247IH0KLQotICAgIHN0YXRpYyBib29sIGlz
VmFsaWRVbmlmb3JtTG9jYXRpb24oR0MzRGludCBsb2NhdGlvbikgeyByZXR1cm4gbG9jYXRpb24g
Pj0gMDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBnZXRVbmlmb3JtTG9jYXRpb24oR0MzRGlu
dCYgdmFyLCBjb25zdCBjaGFyKiBuYW1lKTsKLSAgICB2b2lkIGluaXRpYWxpemVQcm9ncmFtKCk7
Ci0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoKSB7IH0KLSAgICBjb25zdCBjaGFyKiB2ZXJ0
ZXhTaGFkZXJTb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRleFNoYWRlclNvdXJjZS5kYXRh
KCk7IH0KLSAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZnJhZ21lbnRTaGFkZXJTb3VyY2UuZGF0YSgpOyB9CisgICAgVEVYTUFQX0RFQ0xBUkVf
QVRUUklCVVRFKHZlcnRleCkKKyAgICBURVhNQVBfREVDTEFSRV9BVFRSSUJVVEUodGV4Q29vcmQp
CiAKLSAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwotICAgIFBsYXRmb3JtM0RPYmpl
Y3QgbV9pZDsKLSAgICBHQzNEdWludCBtX3ZlcnRleEF0dHJpYjsKLSAgICBQbGF0Zm9ybTNET2Jq
ZWN0IG1fdmVydGV4U2hhZGVyOwotICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mcmFnbWVudFNoYWRl
cjsKLSAgICBHQzNEaW50IG1fbWF0cml4TG9jYXRpb247Ci0gICAgR0MzRGludCBtX2ZsaXBMb2Nh
dGlvbjsKLSAgICBHQzNEaW50IG1fdGV4dHVyZVNpemVMb2NhdGlvbjsKLSAgICBHQzNEaW50IG1f
c291cmNlVGV4dHVyZUxvY2F0aW9uOwotICAgIEdDM0RpbnQgbV9vcGFjaXR5TG9jYXRpb247Ci0g
ICAgR0MzRGludCBtX21hc2tUZXh0dXJlTG9jYXRpb247Ci0KLXByaXZhdGU6Ci0gICAgQ1N0cmlu
ZyBtX3ZlcnRleFNoYWRlclNvdXJjZTsKLSAgICBDU3RyaW5nIG1fZnJhZ21lbnRTaGFkZXJTb3Vy
Y2U7Ci19OworICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0obWF0cml4KQorICAgIFRFWE1BUF9E
RUNMQVJFX1VOSUZPUk0oZmxpcCkKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKHRleHR1cmVT
aXplKQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0ob3BhY2l0eSkKKyAgICBURVhNQVBfREVD
TEFSRV9VTklGT1JNKGNvbG9yKQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oZXhwYW5kZWRR
dWFkRWRnZXNJblNjcmVlblNwYWNlKQorICAgIFRFWE1BUF9ERUNMQVJFX1NBTVBMRVIoc2FtcGxl
cikKKyAgICBURVhNQVBfREVDTEFSRV9TQU1QTEVSKG1hc2spCiAKICNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCi1jbGFzcyBTdGFuZGFyZEZpbHRlclByb2dyYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxT
dGFuZGFyZEZpbHRlclByb2dyYW0+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5TdGFuZGFyZEZp
bHRlclByb2dyYW0oKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShjb25zdCBGaWx0ZXJPcGVy
YXRpb24mLCB1bnNpZ25lZCBwYXNzLCBjb25zdCBJbnRTaXplJiwgR0MzRHVpbnQgY29udGVudFRl
eHR1cmUpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gY3Jl
YXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlLCB1
bnNpZ25lZCBwYXNzKTsKLSAgICBHQzNEdWludCB2ZXJ0ZXhBdHRyaWIoKSBjb25zdCB7IHJldHVy
biBtX3ZlcnRleEF0dHJpYjsgfQotICAgIEdDM0R1aW50IHRleENvb3JkQXR0cmliKCkgY29uc3Qg
eyByZXR1cm4gbV90ZXhDb29yZEF0dHJpYjsgfQotICAgIEdDM0R1aW50IHRleHR1cmVVbmlmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uOyB9Ci1wcm90ZWN0ZWQ6
Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKLXByaXZhdGU6Ci0gICAgU3RhbmRh
cmRGaWx0ZXJQcm9ncmFtKCk7Ci0gICAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEdyYXBoaWNzQ29u
dGV4dDNEKiwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlLCB1bnNpZ25lZCBwYXNzKTsK
LSAgICBQbGF0Zm9ybTNET2JqZWN0IG1faWQ7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX3ZlcnRl
eFNoYWRlcjsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZnJhZ21lbnRTaGFkZXI7Ci0gICAgR0Mz
RHVpbnQgbV92ZXJ0ZXhBdHRyaWI7Ci0gICAgR0MzRHVpbnQgbV90ZXhDb29yZEF0dHJpYjsKLSAg
ICBHQzNEdWludCBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb247Ci0gICAgdW5pb24gewotICAgICAg
ICBHQzNEdWludCBhbW91bnQ7Ci0KLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIEdDM0R1
aW50IHJhZGl1czsKLSAgICAgICAgICAgIEdDM0R1aW50IGdhdXNzaWFuS2VybmVsOwotICAgICAg
ICB9IGJsdXI7Ci0KLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIEdDM0R1aW50IGJsdXJS
YWRpdXM7Ci0gICAgICAgICAgICBHQzNEdWludCBjb2xvcjsKLSAgICAgICAgICAgIEdDM0R1aW50
IG9mZnNldDsKLSAgICAgICAgICAgIEdDM0R1aW50IGNvbnRlbnRUZXh0dXJlOwotICAgICAgICAg
ICAgR0MzRHVpbnQgZ2F1c3NpYW5LZXJuZWw7Ci0gICAgICAgIH0gc2hhZG93OwotICAgIH0gbV91
bmlmb3JtTG9jYXRpb25zOwotfTsKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKGFtb3VudCkK
KyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKGdhdXNzaWFuS2VybmVsKQorICAgIFRFWE1BUF9E
RUNMQVJFX1VOSUZPUk0oYmx1clJhZGl1cykKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKHNo
YWRvd0NvbG9yKQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oc2hhZG93T2Zmc2V0KQorICAg
IFRFWE1BUF9ERUNMQVJFX1NBTVBMRVIoY29udGVudFRleHR1cmUpCiAjZW5kaWYKIAotY2xhc3Mg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtU2ltcGxlPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtU2ltcGxlKGNvbnRleHQpKTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZShHcmFwaGljc0NvbnRleHQzRCopOwotcHJpdmF0ZToK
LSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgpOwotfTsKLQotY2xhc3MgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlIDogcHVibGljIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1SZWN0U2ltcGxlKGNvbnRleHQpKTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAg
ICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoR3JhcGhpY3NDb250ZXh0M0Qq
KTsKIHByaXZhdGU6Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlKCk7
Ci19OwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrIDog
cHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrPiBjcmVh
dGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soY29udGV4
dCkpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
T3BhY2l0eUFuZE1hc2soR3JhcGhpY3NDb250ZXh0M0QqKTsKLXByaXZhdGU6Ci0gICAgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpOwotfTsKLQotY2xhc3MgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2sgOiBwdWJsaWMgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrPiBjcmVhdGUoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKGNvbnRleHQpKTsKLSAg
ICB9Ci0KLXByb3RlY3RlZDoKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFj
aXR5QW5kTWFzayhHcmFwaGljc0NvbnRleHQzRCopOwotcHJpdmF0ZToKLSAgICBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaygpOwotfTsKLQotY2xhc3MgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1Tb2xpZENvbG9yKGNvbnRleHQpKTsKLSAgICB9Ci0KLSAgICBHQzNEaW50IGNvbG9y
TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbG9yTG9jYXRpb247IH0KLQotcHJvdGVjdGVk
OgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcihHcmFwaGljc0NvbnRl
eHQzRCopOwotcHJpdmF0ZToKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29s
b3IoKTsKLSAgICBHQzNEaW50IG1fY29sb3JMb2NhdGlvbjsKLX07Ci0KLWNsYXNzIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrIDogcHVibGljIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzaz4gY3JlYXRlKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayhjb250ZXh0KSk7Ci0gICAg
fQotCi0gICAgR0MzRGludCBleHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNvb3JkaW5hdGVz
TG9jYXRpb24oKSB7IHJldHVybiBtX2V4cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0dXJlQ29yZGlu
YXRlc0xvY2F0aW9uOyB9Ci0gICAgR0MzRGludCBleHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3Bh
Y2VMb2NhdGlvbigpIHsgcmV0dXJuIG1fZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9j
YXRpb247IH0KKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShQYXNzUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiwgY29uc3QgU3RyaW5nJiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IFN0
cmluZyYgZnJhZ21lbnRTaGFkZXJTb3VyY2UpOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV92ZXJ0
ZXhTaGFkZXI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZyYWdtZW50U2hhZGVyOwogCi1wcm90
ZWN0ZWQ6Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2so
R3JhcGhpY3NDb250ZXh0M0QqKTsKLXByaXZhdGU6Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1BbnRpYWxpYXNpbmdOb01hc2soKTsKKyAgICBlbnVtIFZhcmlhYmxlVHlwZSB7IFVuaWZv
cm1WYXJpYWJsZSwgQXR0cmliVmFyaWFibGUgfTsKKyAgICBHQzNEdWludCBnZXRMb2NhdGlvbihj
b25zdCB2b2lkKiBrZXksIGNvbnN0IGNoYXIqIG5hbWUsIFZhcmlhYmxlVHlwZSk7CiAKLSAgICBH
QzNEaW50IG1fZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb3JkaW5hdGVzTG9jYXRpb247
Ci0gICAgR0MzRGludCBtX2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uOwor
ICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OworICAgIFBsYXRmb3JtM0RP
YmplY3QgbV9pZDsKKyAgICBIYXNoTWFwPGNvbnN0IHZvaWQqLCBHQzNEdWludD4gbV92YXJpYWJs
ZXM7CiB9OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlciB7CiBwdWJsaWM6Ci0g
ICAgZW51bSBTaGFkZXJUeXBlIHsKLSAgICAgICAgSW52YWxpZCA9IDAsIC8vIEhhc2hNYXBzIGRv
IG5vdCBsaWtlIDAgYXMgYSBrZXkuCi0gICAgICAgIFNpbXBsZSwKLSAgICAgICAgQW50aWFsaWFz
aW5nTm9NYXNrLAotICAgICAgICBSZWN0U2ltcGxlLAotICAgICAgICBPcGFjaXR5QW5kTWFzaywK
LSAgICAgICAgUmVjdE9wYWNpdHlBbmRNYXNrLAotICAgICAgICBTb2xpZENvbG9yCisgICAgZW51
bSBTaGFkZXJLZXkgeworICAgICAgICBJbnZhbGlkID0gMCwKKyAgICAgICAgRGVmYXVsdCwKKyAg
ICAgICAgUmVjdCwKKyAgICAgICAgTWFza2VkLAorICAgICAgICBNYXNrZWRSZWN0LAorICAgICAg
ICBTb2xpZENvbG9yLAorICAgICAgICBBbnRpYWxpYXNlZCwKKyAgICAgICAgR3JheXNjYWxlRmls
dGVyLAorICAgICAgICBTZXBpYUZpbHRlciwKKyAgICAgICAgU2F0dXJhdGVGaWx0ZXIsCisgICAg
ICAgIEh1ZVJvdGF0ZUZpbHRlciwKKyAgICAgICAgQnJpZ2h0bmVzc0ZpbHRlciwKKyAgICAgICAg
Q29udHJhc3RGaWx0ZXIsCisgICAgICAgIE9wYWNpdHlGaWx0ZXIsCisgICAgICAgIEludmVydEZp
bHRlciwKKyAgICAgICAgQmx1ckZpbHRlciwKKyAgICAgICAgU2hhZG93RmlsdGVyUGFzczEsCisg
ICAgICAgIFNoYWRvd0ZpbHRlclBhc3MyLAorICAgICAgICBMYXN0RmlsdGVyCiAgICAgfTsKIAog
ICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCkgeyB9CiAgICAgVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXIoR3JhcGhpY3NDb250ZXh0M0QqKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcigpOwogCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHVuc2ln
bmVkIGdldFBhc3Nlc1JlcXVpcmVkRm9yRmlsdGVyKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYpIGNv
bnN0OwotICAgIFBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBnZXRTaGFkZXJGb3JG
aWx0ZXIoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiwgdW5zaWduZWQgcGFzcyk7Ci0jZW5kaWYKLQot
ICAgIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IGdldFNoYWRlclByb2dy
YW0oU2hhZGVyVHlwZSk7Ci0gICAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVNvbGlkQ29sb3I+IHNvbGlkQ29sb3JQcm9ncmFtKCk7Ci0gICAgUGFzc1JlZlB0cjxUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzaz4gYW50aWFsaWFzaW5nTm9NYXNr
UHJvZ3JhbSgpOworICAgIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IGdl
dFNoYWRlclByb2dyYW0oU2hhZGVyS2V5KTsKIAogcHJpdmF0ZToKLSAgICB0eXBlZGVmIEhhc2hN
YXA8U2hhZGVyVHlwZSwgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiwgRGVmYXVs
dEhhc2g8aW50Pjo6SGFzaCwgSGFzaFRyYWl0czxpbnQ+ID4gVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1NYXA7Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAgbV90ZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbU1hcDsKLSAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0Owot
Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0
cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+ID4gRmlsdGVyTWFwOwotICAgIEZpbHRlck1hcCBtX2Zp
bHRlck1hcDsKLSNlbmRpZgorICAgIHR5cGVkZWYgSGFzaE1hcDxTaGFkZXJLZXksIFJlZlB0cjxU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4sIERlZmF1bHRIYXNoPGludD46Okhhc2gsIEhhc2hU
cmFpdHM8aW50PiA+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOworICAgIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtTWFwIG1fcHJvZ3JhbXM7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBtX2NvbnRleHQ7CiB9OwogCiB9Ci0KICNlbmRpZgogCiAjZW5kaWYgLy8gVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXJfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167645</attachid>
            <date>2012-10-08 16:42:23 -0700</date>
            <delta_ts>2012-10-08 16:54:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>81168</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmNTE4MjliLi45Yzc2YTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjQg
QEAKKzIwMTItMTAtMDggIE5vYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29t
PgorCisgICAgICAgIFtUZXhtYXBdIFJlZmFjdG9yIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
IHRvIGJlIGNsZWFyZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTg2MDQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUHJldmlvdXMgaW1wbGVtZW50YXRpb24gb2YgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXIgd2FzIHZlcnkgdmVyYm9zZSwgY2FsbGluZyBmb3IgdG9vCisgICAgICAgIG1hbnkgY2FzdHMg
YW5kIGFtYmlndW91cyBvd25lcnNoaXAuCisgICAgICAgIFRoaXMgcmVmYWN0b3IgZG9lcyB0aGUg
Zm9sbG93aW5nOgorICAgICAgICAxLiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSBpcyBvbmUg
Y2xhc3Mgd2l0aG91dCBzdWJjbGFzc2VzLgorICAgICAgICAyLiBVbmlmb3JtL0F0dHJpYnV0ZSBh
Y2Nlc3NvcnMgYXJlIGdlbmVyYXRlZCBieSBzcGVjaWFsIG1hY3JvcyAoVEVYTUFQX0RFQ0xBUkVf
Li4uKSB0aGF0CisgICAgICAgICAgIGdlbmVyYXRlIGJvdGggdGhlIEMrKyBhY2Nlc3MgZnVuY3Rp
b24sIGFzIHdlbGwgYXMgdGhlIEdMU0wgbmFtZSBvZiB0aGUgdmFyaWFibGUuIFRoaXMKKyAgICAg
ICAgICAgYWxsb3dzIGFkZGluZy9yZW1vdmluZyB2YXJpYWJsZXMgZnJvbSBhIHNoYWRlciB3aXRo
b3V0IGFkZGluZyBicm9pbGVyLXBsYXRlIGNvZGUgbGlrZQorICAgICAgICAgICBiZWZvcmUuCisK
KyAgICAgICAgQWZ0ZXIgdGhpcyBjaGFuZ2UgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgaGFz
IG9ubHkgb25lIHJlc3BvbnNpYmlsaXR5IC0gZGVhbGluZyB3aXRoCisgICAgICAgIFRleHR1cmVN
YXBwZXJHTCdzIGJ1aWx0LWluIHNoYWRlcnMgYW5kIHRoZWlyIGxpZmVjeWNsZS4gUHJlcGFyaW5n
IGZpbHRlcnMgZXRjLiBpcyBkb25lCisgICAgICAgIGluIFRleHR1cmVNYXBwZXJHTC4KKworICAg
ICAgICBUaGlzIGlzIGEgcmVmYWN0b3Igd2l0aG91dCBuZXcgZnVuY3Rpb25hbGl0eS4gSXQgaGFz
IGJlZW4gdmVyaWZpZWQgdG8gbm90IGJyZWFrIGFueSBleGlzdGluZworICAgICAgICByZWxldmFu
dCB0ZXN0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3UXVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJCKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZWRRdWFkV2l0aFBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXApOgor
ICAgICAgICAgICAgVXNlIHRoZSBNQUNSTy1nZW5lcmF0ZWQgdW5pZm9ybSBhY2Nlc3NvcnMuCisK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6a2V5Rm9yRmlsdGVyVHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpnZXRQYXNzZXNSZXF1aXJlZEZvckZpbHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpnYXVzcyk6CisgICAgICAgIChXZWJDb3JlOjpnYXVzc2lhbktlcm5lbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpwcmVwYXJlRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdGaWx0ZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBUZXh0dXJlR0w6OmFwcGx5RmlsdGVycyk6CisgICAgICAgICAgICBNb3ZlIHRoZSBmaWx0ZXIg
bG9naWMgdG8gVGV4dHVyZU1hcHBlckdMCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpnZXRMb2NhdGlv
bik6CisgICAgICAgIChTaGFkZXJTcGVjKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRlclNwZWM6
OlNoYWRlclNwZWMpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U2hhZGVyU3BlYyk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
On5UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyUHJvZ3JhbSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
Ojpwcm9ncmFtSUQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OmNyZWF0ZSk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisgICAg
ICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcik6CisgICAgICAgICAgICBTZWUgZGVzY3Jp
cHRpb24uCisKIDIwMTItMTAtMDUgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBTVkcgcmFkaWFsR3JhZGllbnQgc2hvdWxkIHN1cHBvcnQgJ2ZyJyBmb3IgZm9jYWwg
cmFkaXVzIChqdXN0IGxpa2UgQ2FudmFzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCA4ZjBj
NjhkLi44MTEwZDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMjMsNiArMjMsNyBAQAog
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNs
dWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2lu
Y2x1ZGUgIlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIK
QEAgLTI2Niw3ICsyNjcsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZW5kUGFpbnRpbmcoKQog
CiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmIHF1YWRUb0Ry
YXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtKiBzaGFkZXJQcm9ncmFtLCBHQzNEZW51bSBkcmF3aW5nTW9kZSwg
Ym9vbCBuZWVkc0JsZW5kaW5nKQogewotICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0Qt
PmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkp
OwogICAgIG1fY29udGV4dDNELT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9C
VUZGRVIsIDApOwogCiAgICAgY29uc3QgR0MzRGZsb2F0IHF1YWRbXSA9IHsKQEAgLTI3NSw3ICsy
NzYsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmIHF1
YWRUb0RyYXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTQogICAgICAgICBxdWFkVG9EcmF3LnRhcmdl
dFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDMoKS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1h
cHBlZFRvVW5pdFNxdWFyZS5wMygpLnkoKSwKICAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0
TWFwcGVkVG9Vbml0U3F1YXJlLnA0KCkueCgpLCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRU
b1VuaXRTcXVhcmUucDQoKS55KCkKICAgICB9OwotICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRy
aWJQb2ludGVyKHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigpLCAyLCBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHF1YWQpKTsKKyAgICBtX2NvbnRleHQz
RC0+dmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCAy
LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHF1YWQpKTsK
IAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4
KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KS5tdWx0aXBseShtb2RlbFZpZXdNYXRyaXgpLm11bHRp
cGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4KAogICAgICAgICAgICAgcXVhZFRvRHJhdy5vcmlnaW5h
bFRhcmdldFJlY3Qud2lkdGgoKSwgMCwgMCwgMCwKQEAgLTI5Nyw3ICsyOTgsNyBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJHTDo6ZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmIHF1YWRUb0RyYXcsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTQogICAgICAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkQpOwogCiAgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMoZHJhd2luZ01v
ZGUsIDAsIDQpOwotICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoc2hh
ZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7CiB9CiAKIHZv
aWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQg
d2lkdGgsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1vZGVsVmlld01hdHJpeCkKQEAgLTMwNSwxNSArMzA2LDEyIEBAIHZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgd2lkdGgsIGNv
bnN0IEZsb2F0UmVjCiAgICAgaWYgKGNsaXBTdGFjaygpLmN1cnJlbnQoKS5zY2lzc29yQm94Lmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtU29saWRDb2xvcj4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5zb2xpZENvbG9yUHJvZ3JhbSgpOwotICAgIG1fY29udGV4
dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpTb2xpZENvbG9yKTsKKyAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5w
cm9ncmFtSUQoKSk7CiAKLSAgICBmbG9hdCBhbHBoYSA9IGNvbG9yLmFscGhhKCkgLyAyNTUuMDsK
LSAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgKGNvbG9yLnJlZCgpIC8gMjU1LjApICogYWxwaGEsCi0gICAg
ICAgICAgICAgICAgICAgICAgIChjb2xvci5ncmVlbigpIC8gMjU1LjApICogYWxwaGEsCi0gICAg
ICAgICAgICAgICAgICAgICAgIChjb2xvci5ibHVlKCkgLyAyNTUuMCkgKiBhbHBoYSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgYWxwaGEpOworICAgIGZsb2F0IHIsIGcsIGIsIGE7CisgICAgY29s
b3IuZ2V0UkdCQShyLCBnLCBiLCBhKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTRmKHByb2dy
YW0tPmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgbV9jb250ZXh0M0QtPmxpbmVX
aWR0aCh3aWR0aCk7CiAKICAgICBkcmF3UXVhZCh0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgs
IHByb2dyYW0uZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1AsIGNvbG9yLmhhc0Fs
cGhhKCkpOwpAQCAtMzY4LDI3ICszNjYsMjUgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdU
ZXh0dXJlUmVjdGFuZ2xlQVJCKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb24KIHsK
ICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW07CiAgICAgaWYg
KG1hc2tUZXh0dXJlKQotICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OlJlY3RPcGFjaXR5QW5kTWFzayk7CisgICAgICAgIHByb2dyYW0gPSBkYXRh
KCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJv
Z3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6TWFza2VkUmVjdCk7CiAgICAgZWxzZQot
ICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJl
Y3RTaW1wbGUpOwotICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOwor
ICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJl
Y3QpOworICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsK
IAotICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0
ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHBy
b2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwogICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgdGV4dHVyZSk7Ci0gICAgbV9jb250ZXh0M0Qt
PnVuaWZvcm0xaShwcm9ncmFtLT5zb3VyY2VUZXh0dXJlTG9jYXRpb24oKSwgMCk7CisgICAgbV9j
b250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5zYW1wbGVyTG9jYXRpb24oKSwgMCk7CiAKICAg
ICBtX2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPmZsaXBMb2NhdGlvbigpLCAhIShmbGFn
cyAmIFNob3VsZEZsaXBUZXh0dXJlKSk7CiAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0yZihwcm9n
cmFtLT50ZXh0dXJlU2l6ZUxvY2F0aW9uKCksIHRleHR1cmVTaXplLndpZHRoKCksIHRleHR1cmVT
aXplLmhlaWdodCgpKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPm9wYWNp
dHlMb2NhdGlvbigpLCBvcGFjaXR5KTsKIAotICAgIGlmIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSkp
Ci0gICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9u
KCksIG9wYWNpdHkpOwotCi0gICAgaWYgKG1hc2tUZXh0dXJlICYmIG1hc2tUZXh0dXJlLT5pc1Zh
bGlkKCkgJiYgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRp
b24ocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpKSkgeworICAgIGlmIChtYXNrVGV4dHVy
ZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpKSB7CiAgICAgICAgIGNvbnN0IEJpdG1hcFRleHR1
cmVHTCogbWFza1RleHR1cmVHTCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCo+
KG1hc2tUZXh0dXJlKTsKICAgICAgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkUxKTsKICAgICAgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtYXNrVGV4dHVyZUdMLT5pZCgpKTsKLSAg
ICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9u
KCksIDEpOworICAgICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPm1hc2tMb2Nh
dGlvbigpLCAxKTsKICAgICAgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkUwKTsKICAgICB9CiAKQEAgLTQwNSwxMCArNDAxLDEwIEBAIHZvaWQg
VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFn
cywgY29uc3QgSW50U2l6ZSYKIAogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bT4gcHJvZ3JhbTsKICAgICBpZiAobWFza1RleHR1cmUpCi0gICAgICAgIHByb2dyYW0gPSBkYXRh
KCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJv
Z3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3BhY2l0eUFuZE1hc2spOworICAgICAg
ICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok1hc2tlZCk7
CiAgICAgZWxzZQotICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OlNpbXBsZSk7Ci0gICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+
aWQoKSk7CisgICAgICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6RGVmYXVsdCk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJv
Z3JhbUlEKCkpOwogCiAgICAgZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKHByb2dyYW0uZ2V0
KCksIHRleHR1cmUsIGZsYWdzLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHks
IG1hc2tUZXh0dXJlKTsKIH0KQEAgLTUzNiw4ICs1MzIsOCBAQCBib29sIFRleHR1cmVNYXBwZXJH
TDo6ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZs
YWdzLAogICAgIHF1YWRUb0VkZ2VBcnJheShleHBhbmRlZFF1YWRJblNjcmVlblNwYWNlLCB0YXJn
ZXRRdWFkRWRnZXMpOwogICAgIHF1YWRUb0VkZ2VBcnJheShpbmZsYXRlUXVhZChxdWFkSW5TY3Jl
ZW5TcGFjZS5ib3VuZGluZ0JveCgpLCAgaW5mbGF0aW9uRGlzdGFuY2UpLCB0YXJnZXRRdWFkRWRn
ZXMgKyAxMik7CiAKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxp
YXNpbmdOb01hc2s+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuYW50aWFsaWFzaW5nTm9NYXNrUHJvZ3JhbSgpOwotICAgIG1fY29udGV4
dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpBbnRpYWxpYXNlZCk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+
cHJvZ3JhbUlEKCkpOwogICAgIG1fY29udGV4dDNELT51bmlmb3JtM2Z2KHByb2dyYW0tPmV4cGFu
ZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uKCksIDgsIHRhcmdldFF1YWRFZGdlcyk7
CiAKICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgdGV4dHVy
ZSwgZmxhZ3MsIERyYXdRdWFkKG9yaWdpbmFsVGFyZ2V0UmVjdCwgZXhwYW5kZWRRdWFkSW5UZXh0
dXJlQ29vcmRpbmF0ZXMpLCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIDAgLyogbWFza1RleHR1
cmUgKi8pOwpAQCAtNTQ2LDIxICs1NDIsMTkgQEAgYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdU
ZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywKIAog
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbSogcHJvZ3JhbSwgdWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxh
Z3MsIGNvbnN0IERyYXdRdWFkJiBxdWFkVG9EcmF3LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBt
YXNrVGV4dHVyZSkKIHsKLSAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXko
cHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKICAgICBtX2NvbnRleHQzRC0+
YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwogICAgIG1fY29udGV4
dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZSk7
Ci0gICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5zb3VyY2VUZXh0dXJlTG9jYXRp
b24oKSwgMCk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5zYW1wbGVyTG9j
YXRpb24oKSwgMCk7CiAKICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPmZsaXBM
b2NhdGlvbigpLCAhIShmbGFncyAmIFNob3VsZEZsaXBUZXh0dXJlKSk7CisgICAgbV9jb250ZXh0
M0QtPnVuaWZvcm0xZihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSwgb3BhY2l0eSk7CiAKLSAg
ICBpZiAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24o
cHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCkpKQotICAgICAgICBtX2NvbnRleHQzRC0+dW5pZm9y
bTFmKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpLCBvcGFjaXR5KTsKLQotICAgIGlmIChtYXNr
VGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpICYmIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjppc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRp
b24oKSkpIHsKKyAgICBpZiAobWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQoKSkg
ewogICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wqIG1hc2tUZXh0dXJlR0wgPSBzdGF0aWNf
Y2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wqPihtYXNrVGV4dHVyZSk7CiAgICAgICAgIG1fY29u
dGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSk7CiAgICAg
ICAgIG1fY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgbWFza1RleHR1cmVHTC0+aWQoKSk7Ci0gICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWko
cHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpLCAxKTsKKyAgICAgICAgbV9jb250ZXh0M0Qt
PnVuaWZvcm0xaShwcm9ncmFtLT5tYXNrTG9jYXRpb24oKSwgMSk7CiAgICAgICAgIG1fY29udGV4
dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgfQog
CkBAIC03MDksMjcgKzcwMywxNzEgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRl
bnRzKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY28KIH0KIAogI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKLXZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3RmlsdGVyZWQo
Y29uc3QgQml0bWFwVGV4dHVyZSYgc291cmNlVGV4dHVyZSwgY29uc3QgQml0bWFwVGV4dHVyZSYg
Y29udGVudFRleHR1cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgZmlsdGVyLCBpbnQgcGFzcykK
Kworc3RhdGljIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaGFkZXJLZXkga2V5Rm9yRmls
dGVyVHlwZShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFz
cykKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JB
WVNDQUxFOgorICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkdyYXlz
Y2FsZUZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgICAgIHJl
dHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2VwaWFGaWx0ZXI7CisgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgorICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OlNhdHVyYXRlRmlsdGVyOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpI
VUVfUk9UQVRFOgorICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Okh1
ZVJvdGF0ZUZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgorICAgICAg
ICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkludmVydEZpbHRlcjsKKyAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKKyAgICAgICAgcmV0dXJuIFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjpCcmlnaHRuZXNzRmlsdGVyOworICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpDT05UUkFTVDoKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpDb250cmFzdEZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToK
KyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5RmlsdGVy
OworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgorICAgICAgICByZXR1cm4gVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXI6OkJsdXJGaWx0ZXI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkRST1BfU0hBRE9XOgorICAgICAgICByZXR1cm4gcGFzcyA/IFRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyOjpTaGFkb3dGaWx0ZXJQYXNzMiA6IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpTaGFkb3dGaWx0ZXJQYXNzMTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpJbnZh
bGlkOworICAgIH0KK30KKworc3RhdGljIHVuc2lnbmVkIGdldFBhc3Nlc1JlcXVpcmVkRm9yRmls
dGVyKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAo
dHlwZSkgeworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6CisgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OlNFUElBOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFU
RToKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKKyAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6SU5WRVJUOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNT
OgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKKyAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6T1BBQ0lUWToKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkJMVVI6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOgorICAg
ICAgICAvLyBXZSB1c2UgdHdvLXBhc3NlcyAodmVydGljYWwraG9yaXpvbnRhbCkgZm9yIGJsdXIg
YW5kIGRyb3Atc2hhZG93LgorICAgICAgICByZXR1cm4gMjsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gMDsKKyAgICB9Cit9CisKKy8vIENyZWF0ZSBhIG5vcm1hbCBkaXN0cmlidXRpb24g
b2YgMjEgdmFsdWVzIGJldHdlZW4gLTIgYW5kIDIuCitzdGF0aWMgY29uc3QgaW50IEdBVVNTSUFO
X0tFUk5FTF9IQUxGX1dJRFRIID0gMTE7CitzdGF0aWMgY29uc3QgZmxvYXQgR0FVU1NJQU5fS0VS
TkVMX1NURVAgPSAwLjI7CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgZ2F1c3MoZmxvYXQgeCkKK3sK
KyAgICByZXR1cm4gZXhwKC0oeCAqIHgpIC8gMi4pOworfQorCitzdGF0aWMgZmxvYXQqIGdhdXNz
aWFuS2VybmVsKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBwcmVwYXJlZCA9IGZhbHNlOworICAgIHN0
YXRpYyBmbG9hdCBrZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdID0gezAsIH07CisK
KyAgICBpZiAocHJlcGFyZWQpCisgICAgICAgIHJldHVybiBrZXJuZWw7CisKKyAgICBrZXJuZWxb
MF0gPSBnYXVzcygwKTsKKyAgICBmbG9hdCBzdW0gPSBrZXJuZWxbMF07CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyArK2kpIHsKKyAgICAg
ICAga2VybmVsW2ldID0gZ2F1c3MoaSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKTsKKyAgICAgICAg
c3VtICs9IDIgKiBrZXJuZWxbaV07CisgICAgfQorCisgICAgLy8gTm9ybWFsaXplIHRoZSBrZXJu
ZWwuCisgICAgZmxvYXQgc2NhbGUgPSAxIC8gc3VtOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgKytpKQorICAgICAgICBrZXJuZWxbaV0g
Kj0gc2NhbGU7CisKKyAgICBwcmVwYXJlZCA9IHRydWU7CisgICAgcmV0dXJuIGtlcm5lbDsKK30K
Kworc3RhdGljIHZvaWQgcHJlcGFyZUZpbHRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0qIHByb2dyYW0sIGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgb3BlcmF0aW9uLCB1bnNpZ25l
ZCBwYXNzLCBjb25zdCBJbnRTaXplJiBzaXplLCBHQzNEdWludCBjb250ZW50VGV4dHVyZSkKK3sK
KyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBwcm9ncmFtLT5jb250ZXh0
KCk7CisgICAgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CisKKyAg
ICBzd2l0Y2ggKG9wZXJhdGlvbi5nZXRPcGVyYXRpb25UeXBlKCkpIHsKKyAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6R1JBWVNDQUxFOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToK
KyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6CisgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkhVRV9ST1RBVEU6CisgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT5h
bW91bnRMb2NhdGlvbigpLCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJS
SUdIVE5FU1M6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgorICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgorICAgICAgICBjb250ZXh0LT51bmlmb3JtMWYocHJv
Z3JhbS0+YW1vdW50TG9jYXRpb24oKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogeworICAgICAgICBjb25zdCBC
bHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmx1ckZpbHRlck9w
ZXJhdGlvbiY+KG9wZXJhdGlvbik7CisgICAgICAgIEZsb2F0U2l6ZSByYWRpdXM7CisKKyAgICAg
ICAgLy8gQmx1ciBpcyBkb25lIGluIHR3byBwYXNzZXMsIGZpcnN0IGhvcml6b250YWxseSBhbmQg
dGhlbiB2ZXJ0aWNhbGx5LiBUaGUgc2FtZSBzaGFkZXIgaXMgdXNlZCBmb3IgYm90aC4KKyAgICAg
ICAgaWYgKHBhc3MpCisgICAgICAgICAgICByYWRpdXMuc2V0SGVpZ2h0KGZsb2F0VmFsdWVGb3JM
ZW5ndGgoYmx1ci5zdGREZXZpYXRpb24oKSwgc2l6ZS5oZWlnaHQoKSkgLyBzaXplLmhlaWdodCgp
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFkaXVzLnNldFdpZHRoKGZsb2F0VmFsdWVG
b3JMZW5ndGgoYmx1ci5zdGREZXZpYXRpb24oKSwgc2l6ZS53aWR0aCgpKSAvIHNpemUud2lkdGgo
KSk7CisKKyAgICAgICAgY29udGV4dC0+dW5pZm9ybTJmKHByb2dyYW0tPmJsdXJSYWRpdXNMb2Nh
dGlvbigpLCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKTsKKyAgICAgICAgY29udGV4
dC0+dW5pZm9ybTFmdihwcm9ncmFtLT5nYXVzc2lhbktlcm5lbExvY2F0aW9uKCksIEdBVVNTSUFO
X0tFUk5FTF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5lbCgpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzogeworICAgICAgICBj
b25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBzaGFkb3cgPSBzdGF0aWNfY2FzdDxjb25z
dCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKTsKKyAgICAgICAgY29udGV4
dC0+dW5pZm9ybTFmdihwcm9ncmFtLT5nYXVzc2lhbktlcm5lbExvY2F0aW9uKCksIEdBVVNTSUFO
X0tFUk5FTF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5lbCgpKTsKKyAgICAgICAgc3dpdGNoIChw
YXNzKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIC8vIEZpcnN0IHBhc3M6IHZlcnRp
Y2FsIGFscGhhIGJsdXIuCisgICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtMmYocHJvZ3JhbS0+
c2hhZG93T2Zmc2V0TG9jYXRpb24oKSwgZmxvYXQoc2hhZG93LmxvY2F0aW9uKCkueCgpKSAvIGZs
b2F0KHNpemUud2lkdGgoKSksIGZsb2F0KHNoYWRvdy5sb2NhdGlvbigpLnkoKSkgLyBmbG9hdChz
aXplLmhlaWdodCgpKSk7CisgICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtMWYocHJvZ3JhbS0+
Ymx1clJhZGl1c0xvY2F0aW9uKCksIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUu
d2lkdGgoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAg
ICAgIC8vIFNlY29uZCBwYXNzOiB3ZSBuZWVkIHRoZSBzaGFkb3cgY29sb3IgYW5kIHRoZSBjb250
ZW50IHRleHR1cmUgZm9yIGNvbXBvc2l0aW5nLgorICAgICAgICAgICAgY29udGV4dC0+dW5pZm9y
bTFmKHByb2dyYW0tPmJsdXJSYWRpdXNMb2NhdGlvbigpLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkg
LyBmbG9hdChzaXplLmhlaWdodCgpKSk7CisgICAgICAgICAgICBjb250ZXh0LT5hY3RpdmVUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSk7CisgICAgICAgICAgICBjb250ZXh0LT5i
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgY29udGVudFRleHR1cmUp
OworICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmNvbnRlbnRUZXh0dXJl
TG9jYXRpb24oKSwgMSk7CisgICAgICAgICAgICBmbG9hdCByLCBnLCBiLCBhOworICAgICAgICAg
ICAgc2hhZG93LmNvbG9yKCkuZ2V0UkdCQShyLCBnLCBiLCBhKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnVuaWZvcm00Zihwcm9ncmFtLT5zaGFkb3dDb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmRyYXdGaWx0ZXJlZChjb25zdCBCaXRtYXBUZXh0dXJlJiBzYW1wbGVyLCBjb25zdCBC
aXRtYXBUZXh0dXJlJiBjb250ZW50VGV4dHVyZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBmaWx0
ZXIsIGludCBwYXNzKQogewogICAgIC8vIEZvciBzdGFuZGFyZCBmaWx0ZXJzLCB3ZSBhbHdheXMg
ZHJhdyB0aGUgd2hvbGUgdGV4dHVyZSB3aXRob3V0IHRyYW5zZm9ybWF0aW9ucy4KLSAgICBSZWZQ
dHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgp
LnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlckZvckZpbHRlcihmaWx0ZXIsIHBh
c3MpOworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaGFkZXJLZXkga2V5ID0ga2V5
Rm9yRmlsdGVyVHlwZShmaWx0ZXIuZ2V0T3BlcmF0aW9uVHlwZSgpLCBwYXNzKTsKKyAgICBSZWZQ
dHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xE
YXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShrZXkpOwog
ICAgIEFTU0VSVChwcm9ncmFtKTsKIAotICAgIHByb2dyYW0tPnByZXBhcmUoZmlsdGVyLCBwYXNz
LCBzb3VyY2VUZXh0dXJlLmNvbnRlbnRTaXplKCksIHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRl
eHR1cmVHTCY+KGNvbnRlbnRUZXh0dXJlKS5pZCgpKTsKKyAgICBwcmVwYXJlRmlsdGVyUHJvZ3Jh
bShwcm9ncmFtLmdldCgpLCBmaWx0ZXIsIHBhc3MsIHNhbXBsZXIuY29udGVudFNpemUoKSwgc3Rh
dGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oY29udGVudFRleHR1cmUpLmlkKCkpOwog
Ci0gICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRl
eEF0dHJpYigpKTsKLSAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJv
Z3JhbS0+dGV4Q29vcmRBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOworICAgIG1fY29udGV4dDNELT5l
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT50ZXhDb29yZExvY2F0aW9uKCkpOwogICAg
IG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7
Ci0gICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihzb3VyY2VUZXh0dXJlKS5p
ZCgpKTsKLSAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPnRleHR1cmVVbmlmb3Jt
KCksIDApOworICAgIG1fY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oc2FtcGxlciku
aWQoKSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5zYW1wbGVyTG9jYXRp
b24oKSwgMCk7CiAgICAgY29uc3QgR0MzRGZsb2F0IHRhcmdldFZlcnRpY2VzW10gPSB7LTEsIC0x
LCAxLCAtMSwgMSwgMSwgLTEsIDF9OwogICAgIGNvbnN0IEdDM0RmbG9hdCBzb3VyY2VWZXJ0aWNl
c1tdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9OwotICAgIG1fY29udGV4dDNELT52ZXJ0ZXhB
dHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleEF0dHJpYigpLCAyLCBHcmFwaGljc0NvbnRleHQz
RDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHRhcmdldFZlcnRpY2VzKSk7Ci0gICAgbV9j
b250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIoKSwg
MiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cihzb3VyY2VW
ZXJ0aWNlcykpOworICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0t
PnZlcnRleExvY2F0aW9uKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAs
IEdDM0RpbnRwdHIodGFyZ2V0VmVydGljZXMpKTsKKyAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0
cmliUG9pbnRlcihwcm9ncmFtLT50ZXhDb29yZExvY2F0aW9uKCksIDIsIEdyYXBoaWNzQ29udGV4
dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIoc291cmNlVmVydGljZXMpKTsKICAgICBt
X2NvbnRleHQzRC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwogICAgIG1fY29u
dGV4dDNELT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIDAsIDQp
OwotICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVy
dGV4QXR0cmliKCkpOwotICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXko
cHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0
ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKKyAgICBtX2NvbnRleHQz
RC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3JkTG9jYXRpb24oKSk7
CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gQml0bWFwVGV4dHVyZUdMOjphcHBseUZp
bHRlcnMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgQml0bWFwVGV4dHVyZSYg
Y29udGVudFRleHR1cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCkBAIC03NDMs
NyArODgxLDcgQEAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBCaXRtYXBUZXh0dXJlR0w6OmFw
cGx5RmlsdGVycyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWEKICAgICAgICAgY29uc3QgRmlsdGVy
T3BlcmF0aW9uKiBmaWx0ZXIgPSBmaWx0ZXJzLmF0KGkpOwogICAgICAgICBBU1NFUlQoZmlsdGVy
KTsKIAotICAgICAgICBpbnQgbnVtUGFzc2VzID0gdGV4dHVyZU1hcHBlckdMLT5kYXRhKCkuc2hh
cmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0UGFzc2VzUmVxdWlyZWRG
b3JGaWx0ZXIoKmZpbHRlcik7CisgICAgICAgIGludCBudW1QYXNzZXMgPSBnZXRQYXNzZXNSZXF1
aXJlZEZvckZpbHRlcihmaWx0ZXItPmdldE9wZXJhdGlvblR5cGUoKSk7CiAgICAgICAgIGZvciAo
aW50IGogPSAwOyBqIDwgbnVtUGFzc2VzOyArK2opIHsKICAgICAgICAgICAgIHRleHR1cmVNYXBw
ZXJHTC0+YmluZFN1cmZhY2UodGFyZ2V0LmdldCgpKTsKICAgICAgICAgICAgIHRleHR1cmVNYXBw
ZXJHTC0+ZHJhd0ZpbHRlcmVkKChpIHx8IGopID8gKnNvdXJjZSA6IGNvbnRlbnRUZXh0dXJlLCBj
b250ZW50VGV4dHVyZSwgKmZpbHRlciwgaik7CkBAIC04OTQsMTIgKzEwMzIsMTIgQEAgdm9pZCBU
ZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9k
ZWxWaWV3TWF0cml4LCBjb24KIAogICAgIGRhdGEoKS5pbml0aWFsaXplU3RlbmNpbCgpOwogCi0g
ICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNo
YXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0o
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNpbXBsZSk7CisgICAgUmVmUHRyPFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OkRlZmF1bHQpOwogCi0gICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3Jh
bS0+aWQoKSk7Ci0gICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dy
YW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFt
LT5wcm9ncmFtSUQoKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KHByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwogICAgIGNvbnN0IEdDM0RmbG9hdCB1bml0UmVj
dFtdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9OwotICAgIG1fY29udGV4dDNELT52ZXJ0ZXhB
dHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleEF0dHJpYigpLCAyLCBHcmFwaGljc0NvbnRleHQz
RDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHVuaXRSZWN0KSk7CisgICAgbV9jb250ZXh0
M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSwgMiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cih1bml0UmVjdCkpOwog
CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgo
ZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpCiAgICAgICAgICAgICAubXVsdGlwbHkobW9kZWxWaWV3
TWF0cml4KQpAQCAtOTQzLDcgKzEwODEsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5D
bGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgogICAg
IG1fY29udGV4dDNELT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4s
IDAsIDQpOwogCiAgICAgLy8gQ2xlYXIgdGhlIHN0YXRlLgotICAgIG1fY29udGV4dDNELT5kaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29u
dGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4TG9jYXRpb24o
KSk7CiAgICAgbV9jb250ZXh0M0QtPnN0ZW5jaWxNYXNrKDApOwogCiAgICAgLy8gSW5jcmVhc2Ug
c3RlbmNpbEluZGV4IGFuZCBhcHBseSBzdGVuY2lsIHRlc3RpbmcuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAppbmRleCA3M2Q2ZmVmLi43MzhiNzE0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKQEAgLTMwLDI0NyArMzAsNTcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jZGVmaW5lIFNUUklOR0lGWSguLi4pICNfX1ZB
X0FSR1NfXwotCi1zdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VPcGFjaXR5
QW5kTWFzayA9Ci0gICAgU1RSSU5HSUZZKAotICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9h
dDsKLSAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zb3VyY2U7Ci0gICAgICAgIHVuaWZvcm0g
c2FtcGxlcjJEIHNfbWFzazsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsK
LSAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAgICAgIHZh
cnlpbmcgaGlnaHAgdmVjMiB2X21hc2tUZXhDb29yZDsKLSAgICAgICAgdm9pZCBtYWluKHZvaWQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRChzX3Nv
dXJjZSwgdl9zb3VyY2VUZXhDb29yZCk7Ci0gICAgICAgICAgICBsb3dwIHZlYzQgbWFza0NvbG9y
ID0gdGV4dHVyZTJEKHNfbWFzaywgdl9tYXNrVGV4Q29vcmQpOwotICAgICAgICAgICAgbG93cCBm
bG9hdCBmcmFnbWVudEFscGhhID0gdV9vcGFjaXR5ICogbWFza0NvbG9yLmE7Ci0gICAgICAgICAg
ICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIGZyYWdtZW50QWxwaGEsIGNvbG9yLmEg
KiBmcmFnbWVudEFscGhhKTsKLSAgICAgICAgfQotICAgICk7Ci0KLXN0YXRpYyBjb25zdCBjaGFy
KiBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RPcGFjaXR5QW5kTWFzayA9Ci0gICAgU1RSSU5HSUZZ
KAotICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSAgICAgICAgdW5pZm9ybSBzYW1w
bGVyMkRSZWN0IHNfc291cmNlOwotICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRFJlY3Qgc19tYXNr
OwotICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OwotICAgICAgICB2YXJ5aW5n
IGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKLSAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMy
IHZfbWFza1RleENvb3JkOwotICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgewotICAg
ICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEUmVjdChzX3NvdXJjZSwgdl9zb3Vy
Y2VUZXhDb29yZCk7Ci0gICAgICAgICAgICBsb3dwIHZlYzQgbWFza0NvbG9yID0gdGV4dHVyZTJE
UmVjdChzX21hc2ssIHZfbWFza1RleENvb3JkKTsKLSAgICAgICAgICAgIGxvd3AgZmxvYXQgZnJh
Z21lbnRBbHBoYSA9IHVfb3BhY2l0eSAqIG1hc2tDb2xvci5hOwotICAgICAgICAgICAgZ2xfRnJh
Z0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBmcmFnbWVudEFscGhhLCBjb2xvci5hICogZnJhZ21l
bnRBbHBoYSk7Ci0gICAgICAgIH0KLSAgICApOwotCi1zdGF0aWMgY29uc3QgY2hhciogdmVydGV4
U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2sgPQotICAgIFNUUklOR0lGWSgKLSAgICAgICAgdW5p
Zm9ybSBtYXQ0IHVfbWF0cml4OwotICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9mbGlwOwot
ICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKLSAgICAgICAgdmFyeWluZyBoaWdocCB2
ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X21hc2tU
ZXhDb29yZDsKLSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHZfc291cmNlVGV4Q29vcmQgPSB2ZWMyKGFfdmVydGV4LngsIG1peChhX3ZlcnRleC55LCAxLiAt
IGFfdmVydGV4LnksIHVfZmxpcCkpOwotICAgICAgICAgICAgdl9tYXNrVGV4Q29vcmQgPSB2ZWMy
KGFfdmVydGV4KTsKLSAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiBhX3ZlcnRl
eDsKLSAgICAgICAgfQotICAgICk7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRl
clNvdXJjZVNpbXBsZSA9Ci0gICAgU1RSSU5HSUZZKAotICAgICAgICBwcmVjaXNpb24gbWVkaXVt
cCBmbG9hdDsKLSAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zb3VyY2U7Ci0gICAgICAgIHVu
aWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2
X3NvdXJjZVRleENvb3JkOwotICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgewotICAg
ICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHNfc291cmNlLCB2X3NvdXJjZVRl
eENvb3JkKTsKLSAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogdV9v
cGFjaXR5LCBjb2xvci5hICogdV9vcGFjaXR5KTsKLSAgICAgICAgfQotICAgICk7Ci0KLXN0YXRp
YyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZUFudGlhbGlhc2luZ05vTWFzayA9Ci0g
ICAgU1RSSU5HSUZZKAotICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSAgICAgICAg
dW5pZm9ybSBzYW1wbGVyMkQgc19zb3VyY2U7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2
X3NvdXJjZVRleENvb3JkOwotICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5Owot
ICAgICAgICB1bmlmb3JtIHZlYzMgdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbOF07
Ci0gICAgICAgIHZvaWQgbWFpbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZlYzQgc2FtcGxl
ZENvbG9yID0gdGV4dHVyZTJEKHNfc291cmNlLCBjbGFtcCh2X3NvdXJjZVRleENvb3JkLCAwLjAs
IDEuMCkpOwotICAgICAgICAgICAgdmVjMyBwb3MgPSB2ZWMzKGdsX0ZyYWdDb29yZC54eSwgMSk7
Ci0KLSAgICAgICAgICAgIC8vIFRoZSBkYXRhIHBhc3NlZCBpbiB1X2V4cGFuZGVkUXVhZEVkZ2Vz
SW5TY3JlZW5TcGFjZSBpcyBtZXJlbHkgdGhlCi0gICAgICAgICAgICAvLyBwcmUtc2NhbGVkIGNv
ZWZmZWNpZW50cyBvZiB0aGUgbGluZSBlcXVhdGlvbnMgZGVzY3JpYmluZyB0aGUgZm91ciBlZGdl
cwotICAgICAgICAgICAgLy8gb2YgdGhlIGV4cGFuZGVkIHF1YWQgaW4gc2NyZWVuIHNwYWNlIGFu
ZCB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYm94Ci0gICAgICAgICAgICAvLyBvZiB0aGUgZXhw
YW5kZWQgcXVhZC4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBXZSBhcmUgZG9pbmcg
YSBzaW1wbGUgZGlzdGFuY2UgY2FsY3VsYXRpb24gaGVyZSBhY2NvcmRpbmcgdG8gdGhlIGZvcm11
bGE6Ci0gICAgICAgICAgICAvLyAoQSpwLnggKyBCKnAueSArIEMpIC8gc3FydChBXjIgKyBCXjIp
ID0gZGlzdGFuY2UgZnJvbSBsaW5lIHRvIHAKLSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBBLCBC
IGFuZCBDIGhhdmUgYWxyZWFkeSBiZWVuIHNjYWxlZCBieSAxIC8gc3FydChBXjIgKyBCXjIpLgot
ICAgICAgICAgICAgZmxvYXQgYTAgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2Ny
ZWVuU3BhY2VbMF0sIHBvcyksIDAuMCwgMS4wKTsKLSAgICAgICAgICAgIGZsb2F0IGExID0gY2xh
bXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzFdLCBwb3MpLCAwLjAsIDEu
MCk7Ci0gICAgICAgICAgICBmbG9hdCBhMiA9IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2Vz
SW5TY3JlZW5TcGFjZVsyXSwgcG9zKSwgMC4wLCAxLjApOwotICAgICAgICAgICAgZmxvYXQgYTMg
PSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbM10sIHBvcyksIDAu
MCwgMS4wKTsKLSAgICAgICAgICAgIGZsb2F0IGE0ID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFk
RWRnZXNJblNjcmVlblNwYWNlWzRdLCBwb3MpLCAwLjAsIDEuMCk7Ci0gICAgICAgICAgICBmbG9h
dCBhNSA9IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs1XSwgcG9z
KSwgMC4wLCAxLjApOwotICAgICAgICAgICAgZmxvYXQgYTYgPSBjbGFtcChkb3QodV9leHBhbmRl
ZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNl0sIHBvcyksIDAuMCwgMS4wKTsKLSAgICAgICAgICAg
IGZsb2F0IGE3ID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzdd
LCBwb3MpLCAwLjAsIDEuMCk7Ci0KLSAgICAgICAgICAgIC8vIE5vdyB3ZSB3YW50IHRvIHJlZHVj
ZSB0aGUgYWxwaGEgdmFsdWUgb2YgdGhlIGZyYWdtZW50IGlmIGl0IGlzIGNsb3NlIHRvIHRoZQot
ICAgICAgICAgICAgLy8gZWRnZXMgb2YgdGhlIGV4cGFuZGVkIHF1YWQgKG9yIHJlY3Rhbmd1bGFy
IGJvdW5kaW5nIGJveCAtLSB3aGljaCBzZWVtcyB0byBiZQotICAgICAgICAgICAgLy8gaW1wb3J0
YW50IGZvciBiYWNrZmFjaW5nIHF1YWRzKS4gTm90ZSB0aGF0IHdlIGFyZSBjb21iaW5pbmcgdGhl
IGNvbnRyaWJ1dGlvbgotICAgICAgICAgICAgLy8gZnJvbSB0aGUgKHRvcCB8fCBib3R0b20pIGFu
ZCAobGVmdCB8fCByaWdodCkgZWRnZSBieSBzaW1wbHkgbXVsdGlwbHlpbmcuIFRoaXMgZm9sbG93
cwotICAgICAgICAgICAgLy8gdGhlIGFwcHJvYWNoIGRlc2NyaWJlZCBhdDogaHR0cDovL2h0dHAu
ZGV2ZWxvcGVyLm52aWRpYS5jb20vR1BVR2VtczIvZ3B1Z2VtczJfY2hhcHRlcjIyLmh0bWwsCi0g
ICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2l0aG91dCB1c2luZyBHYXVzc2lhbiB3ZWlnaHRz
LgotICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gc2FtcGxlZENvbG9yICogdV9vcGFjaXR5ICog
bWluKG1pbihhMCwgYTIpICogbWluKGExLCBhMyksIG1pbihhNCwgYTYpICogbWluKGE1LCBhNykp
OwotICAgICAgICB9Ci0gICAgKTsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVy
U291cmNlUmVjdFNpbXBsZSA9Ci0gICAgU1RSSU5HSUZZKAotICAgICAgICBwcmVjaXNpb24gbWVk
aXVtcCBmbG9hdDsKLSAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfc291cmNlOwotICAg
ICAgICB1bmlmb3JtIGxvd3AgdmVjMiB1X3RleHR1cmVTaXplOwotICAgICAgICB1bmlmb3JtIGxv
d3AgZmxvYXQgdV9vcGFjaXR5OwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VU
ZXhDb29yZDsKLSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRFJlY3Qoc19zb3VyY2UsIHVfdGV4dHVyZVNpemUg
KiB2X3NvdXJjZVRleENvb3JkKTsKLSAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29s
b3IucmdiICogdV9vcGFjaXR5LCBjb2xvci5hICogdV9vcGFjaXR5KTsKLSAgICAgICAgfQotICAg
ICk7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUgPQotICAg
IFNUUklOR0lGWSgKLSAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OwotICAgICAgICB1bmlm
b3JtIGxvd3AgZmxvYXQgdV9mbGlwOwotICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsK
LSAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAgICAgIHZv
aWQgbWFpbih2b2lkKQotICAgICAgICB7Ci0gICAgICAgICAgICB2X3NvdXJjZVRleENvb3JkID0g
dmVjMihhX3ZlcnRleC54LCBtaXgoYV92ZXJ0ZXgueSwgMS4gLSBhX3ZlcnRleC55LCB1X2ZsaXAp
KTsKLSAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiBhX3ZlcnRleDsKLSAgICAg
ICAgfQotICAgICk7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTb2xp
ZENvbG9yID0KLSAgICBTVFJJTkdJRlkoCi0gICAgICAgIHVuaWZvcm0gbWF0NCB1X21hdHJpeDsK
LSAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7Ci0gICAgICAgIHZvaWQgbWFpbih2b2lk
KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogYV92ZXJ0
ZXg7Ci0gICAgICAgIH0KLSAgICApOwotCi0KLXN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNo
YWRlclNvdXJjZVNvbGlkQ29sb3IgPQotICAgIFNUUklOR0lGWSgKLSAgICAgICAgcHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgIHVuaWZvcm0gdmVjNCB1X2NvbG9yOwotICAgICAgICB2
b2lkIG1haW4odm9pZCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdV9j
b2xvcjsKLSAgICAgICAgfQotICAgICk7Ci0KLVBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1Tb2xpZENvbG9yPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6c29saWRDb2xv
clByb2dyYW0oKQorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIGNvbnN0IFN0
cmluZyYgdmVydGV4LCBjb25zdCBTdHJpbmcmIGZyYWdtZW50KQorICAgIDogbV9jb250ZXh0KGNv
bnRleHQpCisgICAgLCBtX2lkKDApCisgICAgLCBtX3ZlcnRleFNoYWRlcigwKQorICAgICwgbV9m
cmFnbWVudFNoYWRlcigwKQogewotICAgIHJldHVybiBzdGF0aWNfcG9pbnRlcl9jYXN0PFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcj4oZ2V0U2hhZGVyUHJvZ3JhbShTb2xpZENv
bG9yKSk7Ci19CisgICAgbV92ZXJ0ZXhTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihH
cmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUik7CisgICAgbV9mcmFnbWVudFNoYWRlciA9
IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFE
RVIpOworICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKG1fdmVydGV4U2hhZGVyLCB2ZXJ0ZXgp
OworICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKG1fZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50
KTsKKyAgICBtX2lkID0gbV9jb250ZXh0LT5jcmVhdGVQcm9ncmFtKCk7CisgICAgbV9jb250ZXh0
LT5jb21waWxlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmNvbXBpbGVT
aGFkZXIobV9mcmFnbWVudFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIobV9p
ZCwgbV92ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKG1faWQsIG1f
ZnJhZ21lbnRTaGFkZXIpOworICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0obV9pZCk7CisKKyNp
Zm5kZWYgTkRFQlVHCisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXJyb3IoKSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6Tk9fRVJST1IpCisgICAgICAgIHJldHVybjsKIAotUGFzc1JlZlB0cjxUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzaz4gVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OmFudGlhbGlhc2luZ05vTWFza1Byb2dyYW0oKQotewotICAgIHJldHVybiBzdGF0
aWNfcG9pbnRlcl9jYXN0PFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9N
YXNrPihnZXRTaGFkZXJQcm9ncmFtKEFudGlhbGlhc2luZ05vTWFzaykpOworICAgIFN0cmluZyBs
b2cgPSBtX2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cobV92ZXJ0ZXhTaGFkZXIpOworICAgIHBy
aW50ZigiVmVydGV4IHNoYWRlciBsb2c6ICVzXG4iLCBsb2cudXRmOCgpLmRhdGEoKSk7CisgICAg
bG9nID0gbV9jb250ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKG1fZnJhZ21lbnRTaGFkZXIpOworICAg
IHByaW50ZigiRnJhZ21lbnQgc2hhZGVyIGxvZzogJXNcbiIsIGxvZy51dGY4KCkuZGF0YSgpKTsK
KyAgICBsb2cgPSBtX2NvbnRleHQtPmdldFByb2dyYW1JbmZvTG9nKG1faWQpOworICAgIHByaW50
ZigiUHJvZ3JhbSBsb2c6ICVzXG4iLCBsb2cudXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKIH0KIAot
UGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OmdldFNoYWRlclByb2dyYW0oU2hhZGVyVHlwZSBzaGFkZXJUeXBlKQorR0MzRHVp
bnQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmdldExvY2F0aW9uKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgVmFyaWFibGVUeXBlIHR5cGUpCiB7Ci0gICAgUmVmUHRyPFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtOwotICAgIGlmIChzaGFkZXJUeXBlID09IEludmFsaWQp
Ci0gICAgICAgIHJldHVybiBwcm9ncmFtOwotCi0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1NYXA6Oml0ZXJhdG9yIGl0ID0gbV90ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcC5maW5k
KHNoYWRlclR5cGUpOwotICAgIGlmIChpdCAhPSBtX3RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
TWFwLmVuZCgpKQorICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBHQzNEdWludD46Oml0ZXJhdG9y
IGl0ID0gbV92YXJpYWJsZXMuZmluZChuYW1lKTsKKyAgICBpZiAoaXQgIT0gbV92YXJpYWJsZXMu
ZW5kKCkpCiAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOwogCi0gICAgc3dpdGNoIChzaGFkZXJU
eXBlKSB7Ci0gICAgY2FzZSBTaW1wbGU6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVNpbXBsZTo6Y3JlYXRlKG1fY29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgUmVjdFNpbXBsZToKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtUmVjdFNpbXBsZTo6Y3JlYXRlKG1fY29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQW50aWFsaWFzaW5nTm9NYXNrOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OmNyZWF0ZShtX2NvbnRleHQpOwor
ICAgIEdDM0R1aW50IGxvY2F0aW9uOworICAgIHN3aXRjaCh0eXBlKSB7CisgICAgY2FzZSBVbmlm
b3JtVmFyaWFibGU6CisgICAgICAgIGxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9j
YXRpb24obV9pZCwgbmFtZSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgT3BhY2l0eUFuZE1h
c2s6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlB
bmRNYXNrOjpjcmVhdGUobV9jb250ZXh0KTsKKyAgICBjYXNlIEF0dHJpYlZhcmlhYmxlOgorICAg
ICAgICBsb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24obV9pZCwgbmFtZSk7
CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVjdE9wYWNpdHlBbmRNYXNrOgotICAgICAgICBw
cm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OmNy
ZWF0ZShtX2NvbnRleHQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNvbGlkQ29sb3I6Ci0g
ICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OmNy
ZWF0ZShtX2NvbnRleHQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludmFsaWQ6CisgICAg
ZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICBtX3RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwLmFkZChzaGFkZXJUeXBl
LCBwcm9ncmFtKTsKLSAgICByZXR1cm4gcHJvZ3JhbTsKLX0KLQotVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW06OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdt
ZW50U2hhZGVyU291cmNlKQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX2lkKDAp
Ci0gICAgLCBtX3ZlcnRleEF0dHJpYigwKQotICAgICwgbV92ZXJ0ZXhTaGFkZXIoMCkKLSAgICAs
IG1fZnJhZ21lbnRTaGFkZXIoMCkKLSAgICAsIG1fbWF0cml4TG9jYXRpb24oLTEpCi0gICAgLCBt
X2ZsaXBMb2NhdGlvbigtMSkKLSAgICAsIG1fdGV4dHVyZVNpemVMb2NhdGlvbigtMSkKLSAgICAs
IG1fc291cmNlVGV4dHVyZUxvY2F0aW9uKC0xKQotICAgICwgbV9vcGFjaXR5TG9jYXRpb24oLTEp
Ci0gICAgLCBtX21hc2tUZXh0dXJlTG9jYXRpb24oLTEpCi0gICAgLCBtX3ZlcnRleFNoYWRlclNv
dXJjZSh2ZXJ0ZXhTaGFkZXJTb3VyY2UpCi0gICAgLCBtX2ZyYWdtZW50U2hhZGVyU291cmNlKGZy
YWdtZW50U2hhZGVyU291cmNlKQotewotfQogCi12b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtOjppbml0aWFsaXplUHJvZ3JhbSgpCi17Ci0gICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVy
U291cmNlUHJvZ3JhbSA9IHZlcnRleFNoYWRlclNvdXJjZSgpOwotICAgIGNvbnN0IGNoYXIqIGZy
YWdtZW50U2hhZGVyU291cmNlUHJvZ3JhbSA9IGZyYWdtZW50U2hhZGVyU291cmNlKCk7Ci0gICAg
UGxhdGZvcm0zRE9iamVjdCB2ZXJ0ZXhTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihH
cmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUik7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBm
cmFnbWVudFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFHTUVOVF9TSEFERVIpOwotICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKHZlcnRleFNo
YWRlciwgdmVydGV4U2hhZGVyU291cmNlUHJvZ3JhbSk7Ci0gICAgbV9jb250ZXh0LT5zaGFkZXJT
b3VyY2UoZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyU291cmNlUHJvZ3JhbSk7Ci0gICAg
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtSUQgPSBtX2NvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsK
LSAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICBtX2NvbnRl
eHQtPmNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOwotCi0gICAgbV9jb250ZXh0LT5hdHRh
Y2hTaGFkZXIocHJvZ3JhbUlELCB2ZXJ0ZXhTaGFkZXIpOwotICAgIG1fY29udGV4dC0+YXR0YWNo
U2hhZGVyKHByb2dyYW1JRCwgZnJhZ21lbnRTaGFkZXIpOwotICAgIG1fY29udGV4dC0+bGlua1By
b2dyYW0ocHJvZ3JhbUlEKTsKLQotICAgIG1fdmVydGV4QXR0cmliID0gbV9jb250ZXh0LT5nZXRB
dHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3ZlcnRleCIpOwotCi0gICAgbV9pZCA9IHByb2dy
YW1JRDsKLSAgICBtX3ZlcnRleFNoYWRlciA9IHZlcnRleFNoYWRlcjsKLSAgICBtX2ZyYWdtZW50
U2hhZGVyID0gZnJhZ21lbnRTaGFkZXI7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW06OmdldFVuaWZvcm1Mb2NhdGlvbihHQzNEaW50ICZ2YXJpYWJsZSwgY29uc3QgY2hhciog
bmFtZSkKLXsKLSAgICB2YXJpYWJsZSA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1f
aWQsIG5hbWUpOwotICAgIEFTU0VSVCh2YXJpYWJsZSA+PSAwKTsKKyAgICBtX3ZhcmlhYmxlcy5h
ZGQobmFtZSwgbG9jYXRpb24pOworICAgIHJldHVybiBsb2NhdGlvbjsKIH0KIAogVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW06On5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpCkBAIC0yODYs
MTIwICs5NiwxOTEgQEAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06On5UZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbSgpCiAgICAgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKHByb2dyYW1JRCk7
CiB9CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVNpbXBsZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLSAgICA6IFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSwg
ZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUpCi17Ci0gICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsK
LSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9mbGlwTG9jYXRpb24sICJ1X2ZsaXAiKTsKLSAgICBn
ZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7Ci0gICAgZ2V0
VW5pZm9ybUxvY2F0aW9uKG1fc291cmNlVGV4dHVyZUxvY2F0aW9uLCAic19zb3VyY2UiKTsKLSAg
ICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9jYXRpb24sICJ1X29wYWNpdHkiKTsKLX0K
K3N0cnVjdCBTaGFkZXJTcGVjIHsKKyAgICBTdHJpbmcgdmVydGV4U2hhZGVyOworICAgIFN0cmlu
ZyBmcmFnbWVudFNoYWRlcjsKKyAgICBTaGFkZXJTcGVjKGNvbnN0IGNoYXIqIHZlcnRleCA9IDAs
IGNvbnN0IGNoYXIqIGZyYWdtZW50ID0gMCkKKyAgICAgICAgOiB2ZXJ0ZXhTaGFkZXIodmVydGV4
ID8gU3RyaW5nKEFTQ0lJTGl0ZXJhbCh2ZXJ0ZXgpKSA6IFN0cmluZygpKQorICAgICAgICAsIGZy
YWdtZW50U2hhZGVyKGZyYWdtZW50ID8gU3RyaW5nKEFTQ0lJTGl0ZXJhbChmcmFnbWVudCkpIDog
U3RyaW5nKCkpCisgICAgeworICAgIH0KK307CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
U29saWRDb2xvcjo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0KQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29u
dGV4dCwgdmVydGV4U2hhZGVyU291cmNlU29saWRDb2xvciwgZnJhZ21lbnRTaGFkZXJTb3VyY2VT
b2xpZENvbG9yKQorc3RhdGljIHZvaWQgZ2V0U2hhZGVyU3BlYyhUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6U2hhZGVyS2V5IGtleSwgU3RyaW5nJiB2ZXJ0ZXhTb3VyY2UsIFN0cmluZyYgZnJh
Z21lbnRTb3VyY2UpCiB7Ci0gICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKLSAgICBnZXRVbmlmb3Jt
TG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7Ci0gICAgZ2V0VW5pZm9ybUxv
Y2F0aW9uKG1fY29sb3JMb2NhdGlvbiwgInVfY29sb3IiKTsKLX0KKyAgICBzdGF0aWMgVmVjdG9y
PFNoYWRlclNwZWM+IHNwZWNzID0gVmVjdG9yPFNoYWRlclNwZWM+KCk7CisjZGVmaW5lIFNUUklO
R0lGWSguLi4pICNfX1ZBX0FSR1NfXworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudE9w
YWNpdHlBbmRNYXNrID0KKyAgICAgICAgU1RSSU5HSUZZKAorICAgICAgICAgICAgcHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7CisgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBsZXI7
CisgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX21hc2s7CisgICAgICAgICAgICB1bmlm
b3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OworICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMy
IHZfc291cmNlVGV4Q29vcmQ7CisgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9tYXNr
VGV4Q29vcmQ7CisgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQoc19zYW1wbGVyLCB2X3Nv
dXJjZVRleENvb3JkKTsKKyAgICAgICAgICAgICAgICBsb3dwIHZlYzQgbWFza0NvbG9yID0gdGV4
dHVyZTJEKHNfbWFzaywgdl9tYXNrVGV4Q29vcmQpOworICAgICAgICAgICAgICAgIGxvd3AgZmxv
YXQgZnJhZ21lbnRBbHBoYSA9IHVfb3BhY2l0eSAqIG1hc2tDb2xvci5hOworICAgICAgICAgICAg
ICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogZnJhZ21lbnRBbHBoYSwgY29sb3Iu
YSAqIGZyYWdtZW50QWxwaGEpOworICAgICAgICAgICAgfQorICAgICAgICApOwogCi1UZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
UmVjdFNpbXBsZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLSAgICA6IFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSwgZnJhZ21l
bnRTaGFkZXJTb3VyY2VSZWN0U2ltcGxlKQotewotICAgIGluaXRpYWxpemVQcm9ncmFtKCk7Ci0g
ICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwotICAg
IGdldFVuaWZvcm1Mb2NhdGlvbihtX2ZsaXBMb2NhdGlvbiwgInVfZmxpcCIpOwotICAgIGdldFVu
aWZvcm1Mb2NhdGlvbihtX3RleHR1cmVTaXplTG9jYXRpb24sICJ1X3RleHR1cmVTaXplIik7Ci0g
ICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNlVGV4dHVyZUxvY2F0aW9uLCAic19zb3VyY2Ui
KTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9jYXRpb24sICJ1X29wYWNpdHki
KTsKLX0KKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRSZWN0T3BhY2l0eUFuZE1hc2sg
PQorICAgICAgICBTVFJJTkdJRlkoCisgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9h
dDsKKyAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX3NhbXBsZXI7CisgICAgICAg
ICAgICB1bmlmb3JtIHNhbXBsZXIyRFJlY3Qgc19tYXNrOworICAgICAgICAgICAgdW5pZm9ybSBs
b3dwIGZsb2F0IHVfb3BhY2l0eTsKKyAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3Nv
dXJjZVRleENvb3JkOworICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfbWFza1RleENv
b3JkOworICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEUmVjdChzX3NhbXBsZXIsIHZfc291
cmNlVGV4Q29vcmQpOworICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBtYXNrQ29sb3IgPSB0ZXh0
dXJlMkRSZWN0KHNfbWFzaywgdl9tYXNrVGV4Q29vcmQpOworICAgICAgICAgICAgICAgIGxvd3Ag
ZmxvYXQgZnJhZ21lbnRBbHBoYSA9IHVfb3BhY2l0eSAqIG1hc2tDb2xvci5hOworICAgICAgICAg
ICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogZnJhZ21lbnRBbHBoYSwgY29s
b3IuYSAqIGZyYWdtZW50QWxwaGEpOworICAgICAgICAgICAgfQorICAgICAgICApOwogCi1UZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbU9wYWNpdHlBbmRNYXNrKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIDog
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlT3Bh
Y2l0eUFuZE1hc2ssIGZyYWdtZW50U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2spCi17Ci0gICAg
aW5pdGlhbGl6ZVByb2dyYW0oKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2Nh
dGlvbiwgInVfbWF0cml4Iik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fZmxpcExvY2F0aW9u
LCAidV9mbGlwIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNlVGV4dHVyZUxvY2F0
aW9uLCAic19zb3VyY2UiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXNrVGV4dHVyZUxv
Y2F0aW9uLCAic19tYXNrIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fb3BhY2l0eUxvY2F0
aW9uLCAidV9vcGFjaXR5Iik7Ci19CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleE9wYWNp
dHlBbmRNYXNrID0KKyAgICAgICAgU1RSSU5HSUZZKAorICAgICAgICAgICAgdW5pZm9ybSBtYXQ0
IHVfbWF0cml4OworICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfZmxpcDsKKyAgICAg
ICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OworICAgICAgICAgICAgdmFyeWluZyBoaWdo
cCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CisgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIg
dl9tYXNrVGV4Q29vcmQ7CisgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB2X3NvdXJjZVRleENvb3JkID0gdmVjMihhX3ZlcnRleC54LCBt
aXgoYV92ZXJ0ZXgueSwgMS4gLSBhX3ZlcnRleC55LCB1X2ZsaXApKTsKKyAgICAgICAgICAgICAg
ICB2X21hc2tUZXhDb29yZCA9IHZlYzIoYV92ZXJ0ZXgpOworICAgICAgICAgICAgICAgIGdsX1Bv
c2l0aW9uID0gdV9tYXRyaXggKiBhX3ZlcnRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsK
IAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OlRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0KQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4
U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdE9wYWNp
dHlBbmRNYXNrKQotewotICAgIGluaXRpYWxpemVQcm9ncmFtKCk7Ci0gICAgZ2V0VW5pZm9ybUxv
Y2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwotICAgIGdldFVuaWZvcm1Mb2Nh
dGlvbihtX2ZsaXBMb2NhdGlvbiwgInVfZmxpcCIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbiht
X3NvdXJjZVRleHR1cmVMb2NhdGlvbiwgInNfc291cmNlIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0
aW9uKG1fbWFza1RleHR1cmVMb2NhdGlvbiwgInNfbWFzayIpOwotICAgIGdldFVuaWZvcm1Mb2Nh
dGlvbihtX29wYWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0eSIpOwotfQorICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBmcmFnbWVudFNpbXBsZSA9CisgICAgICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAg
IHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OworICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQg
c19zYW1wbGVyOworICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKKyAg
ICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOworICAgICAgICAg
ICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbG93cCB2
ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHNfc2FtcGxlciwgdl9zb3VyY2VUZXhDb29yZCk7CisgICAg
ICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiB1X29wYWNpdHksIGNv
bG9yLmEgKiB1X29wYWNpdHkpOworICAgICAgICAgICAgfQorICAgICAgICApOwogCi1UZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2soR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi0g
ICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3Vy
Y2VTaW1wbGUsIGZyYWdtZW50U2hhZGVyU291cmNlQW50aWFsaWFzaW5nTm9NYXNrKQotewotICAg
IGluaXRpYWxpemVQcm9ncmFtKCk7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9j
YXRpb24sICJ1X21hdHJpeCIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX3NvdXJjZVRleHR1
cmVMb2NhdGlvbiwgInNfc291cmNlIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fb3BhY2l0
eUxvY2F0aW9uLCAidV9vcGFjaXR5Iik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fZXhwYW5k
ZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb24sICJ1X2V4cGFuZGVkUXVhZEVkZ2VzSW5T
Y3JlZW5TcGFjZSIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX2ZsaXBMb2NhdGlvbiwgInVf
ZmxpcCIpOwotfQorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudEFudGlhbGlhc2luZ05v
TWFzayA9CisgICAgICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1w
IGZsb2F0OworICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zYW1wbGVyOworICAgICAg
ICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CisgICAgICAgICAgICB1
bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OworICAgICAgICAgICAgdW5pZm9ybSB2ZWMzIHVf
ZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzhdOworICAgICAgICAgICAgdm9pZCBtYWlu
KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2ZWM0IHNhbXBsZWRDb2xvciA9IHRl
eHR1cmUyRChzX3NhbXBsZXIsIGNsYW1wKHZfc291cmNlVGV4Q29vcmQsIDAuMCwgMS4wKSk7Cisg
ICAgICAgICAgICAgICAgdmVjMyBwb3MgPSB2ZWMzKGdsX0ZyYWdDb29yZC54eSwgMSk7CisKKyAg
ICAgICAgICAgICAgICAvLyBUaGUgZGF0YSBwYXNzZWQgaW4gdV9leHBhbmRlZFF1YWRFZGdlc0lu
U2NyZWVuU3BhY2UgaXMgbWVyZWx5IHRoZQorICAgICAgICAgICAgICAgIC8vIHByZS1zY2FsZWQg
Y29lZmZlY2llbnRzIG9mIHRoZSBsaW5lIGVxdWF0aW9ucyBkZXNjcmliaW5nIHRoZSBmb3VyIGVk
Z2VzCisgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGV4cGFuZGVkIHF1YWQgaW4gc2NyZWVuIHNw
YWNlIGFuZCB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYm94CisgICAgICAgICAgICAgICAgLy8g
b2YgdGhlIGV4cGFuZGVkIHF1YWQuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICAvLyBXZSBhcmUgZG9pbmcgYSBzaW1wbGUgZGlzdGFuY2UgY2FsY3VsYXRpb24gaGVyZSBhY2Nv
cmRpbmcgdG8gdGhlIGZvcm11bGE6CisgICAgICAgICAgICAgICAgLy8gKEEqcC54ICsgQipwLnkg
KyBDKSAvIHNxcnQoQV4yICsgQl4yKSA9IGRpc3RhbmNlIGZyb20gbGluZSB0byBwCisgICAgICAg
ICAgICAgICAgLy8gTm90ZSB0aGF0IEEsIEIgYW5kIEMgaGF2ZSBhbHJlYWR5IGJlZW4gc2NhbGVk
IGJ5IDEgLyBzcXJ0KEFeMiArIEJeMikuCisgICAgICAgICAgICAgICAgZmxvYXQgYTAgPSBjbGFt
cChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbMF0sIHBvcyksIDAuMCwgMS4w
KTsKKyAgICAgICAgICAgICAgICBmbG9hdCBhMSA9IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVk
Z2VzSW5TY3JlZW5TcGFjZVsxXSwgcG9zKSwgMC4wLCAxLjApOworICAgICAgICAgICAgICAgIGZs
b2F0IGEyID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzJdLCBw
b3MpLCAwLjAsIDEuMCk7CisgICAgICAgICAgICAgICAgZmxvYXQgYTMgPSBjbGFtcChkb3QodV9l
eHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbM10sIHBvcyksIDAuMCwgMS4wKTsKKyAgICAg
ICAgICAgICAgICBmbG9hdCBhNCA9IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3Jl
ZW5TcGFjZVs0XSwgcG9zKSwgMC4wLCAxLjApOworICAgICAgICAgICAgICAgIGZsb2F0IGE1ID0g
Y2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzVdLCBwb3MpLCAwLjAs
IDEuMCk7CisgICAgICAgICAgICAgICAgZmxvYXQgYTYgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1
YWRFZGdlc0luU2NyZWVuU3BhY2VbNl0sIHBvcyksIDAuMCwgMS4wKTsKKyAgICAgICAgICAgICAg
ICBmbG9hdCBhNyA9IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs3
XSwgcG9zKSwgMC4wLCAxLjApOworCisgICAgICAgICAgICAgICAgLy8gTm93IHdlIHdhbnQgdG8g
cmVkdWNlIHRoZSBhbHBoYSB2YWx1ZSBvZiB0aGUgZnJhZ21lbnQgaWYgaXQgaXMgY2xvc2UgdG8g
dGhlCisgICAgICAgICAgICAgICAgLy8gZWRnZXMgb2YgdGhlIGV4cGFuZGVkIHF1YWQgKG9yIHJl
Y3Rhbmd1bGFyIGJvdW5kaW5nIGJveCAtLSB3aGljaCBzZWVtcyB0byBiZQorICAgICAgICAgICAg
ICAgIC8vIGltcG9ydGFudCBmb3IgYmFja2ZhY2luZyBxdWFkcykuIE5vdGUgdGhhdCB3ZSBhcmUg
Y29tYmluaW5nIHRoZSBjb250cmlidXRpb24KKyAgICAgICAgICAgICAgICAvLyBmcm9tIHRoZSAo
dG9wIHx8IGJvdHRvbSkgYW5kIChsZWZ0IHx8IHJpZ2h0KSBlZGdlIGJ5IHNpbXBseSBtdWx0aXBs
eWluZy4gVGhpcyBmb2xsb3dzCisgICAgICAgICAgICAgICAgLy8gdGhlIGFwcHJvYWNoIGRlc2Ny
aWJlZCBhdDogaHR0cDovL2h0dHAuZGV2ZWxvcGVyLm52aWRpYS5jb20vR1BVR2VtczIvZ3B1Z2Vt
czJfY2hhcHRlcjIyLmh0bWwsCisgICAgICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdpdGhv
dXQgdXNpbmcgR2F1c3NpYW4gd2VpZ2h0cy4KKyAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3Ig
PSBzYW1wbGVkQ29sb3IgKiB1X29wYWNpdHkgKiBtaW4obWluKGEwLCBhMikgKiBtaW4oYTEsIGEz
KSwgbWluKGE0LCBhNikgKiBtaW4oYTUsIGE3KSk7CisgICAgICAgICAgICB9CisgICAgICAgICk7
CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLSAgICA6IG1fY29udGV4dChjb250ZXh0KQot
ewotfQorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFJlY3RTaW1wbGUgPQorICAgICAg
ICBTVFJJTkdJRlkoCisgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKKyAgICAg
ICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX3NhbXBsZXI7CisgICAgICAgICAgICB1bmlm
b3JtIGxvd3AgdmVjMiBzX3NhbXBsZXJTaXplOworICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZs
b2F0IHVfb3BhY2l0eTsKKyAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRl
eENvb3JkOworICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEUmVjdChzX3NhbXBsZXIsIHNf
c2FtcGxlclNpemUgKiB2X3NvdXJjZVRleENvb3JkKTsKKyAgICAgICAgICAgICAgICBnbF9GcmFn
Q29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIHVfb3BhY2l0eSwgY29sb3IuYSAqIHVfb3BhY2l0eSk7
CisgICAgICAgICAgICB9CisgICAgICAgICk7CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
Ojp+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKQotewotfQorICAgIHN0YXRpYyBjb25zdCBj
aGFyKiB2ZXJ0ZXhTaW1wbGUgPQorICAgICAgICBTVFJJTkdJRlkoCisgICAgICAgICAgICB1bmlm
b3JtIG1hdDQgdV9tYXRyaXg7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9mbGlw
OworICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CisgICAgICAgICAgICB2YXJ5
aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKKyAgICAgICAgICAgIHZvaWQgbWFpbih2
b2lkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZfc291cmNlVGV4Q29vcmQgPSB2
ZWMyKGFfdmVydGV4LngsIG1peChhX3ZlcnRleC55LCAxLiAtIGFfdmVydGV4LnksIHVfZmxpcCkp
OworICAgICAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiBhX3ZlcnRleDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgKTsKIAotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBz
dGF0aWMgY29uc3QgY2hhciogdmVydGV4U29saWRDb2xvciA9CisgICAgICAgIFNUUklOR0lGWSgK
KyAgICAgICAgICAgIHVuaWZvcm0gbWF0NCB1X21hdHJpeDsKKyAgICAgICAgICAgIGF0dHJpYnV0
ZSB2ZWM0IGFfdmVydGV4OworICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIGFfdmVydGV4Owor
ICAgICAgICAgICAgfQorICAgICAgICApOwogCi0vLyBDcmVhdGUgYSBub3JtYWwgZGlzdHJpYnV0
aW9uIG9mIDIxIHZhbHVlcyBiZXR3ZWVuIC0yIGFuZCAyLgotI2RlZmluZSBHQVVTU0lBTl9LRVJO
RUxfSEFMRl9XSURUSCAxMQotI2RlZmluZSBHQVVTU0lBTl9LRVJORUxfU1RFUCAwLjIKIAotU3Rh
bmRhcmRGaWx0ZXJQcm9ncmFtOjp+U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKCkKLXsKLSAgICBtX2Nv
bnRleHQtPmRldGFjaFNoYWRlcihtX2lkLCBtX3ZlcnRleFNoYWRlcik7Ci0gICAgbV9jb250ZXh0
LT5kZWxldGVTaGFkZXIobV92ZXJ0ZXhTaGFkZXIpOwotICAgIG1fY29udGV4dC0+ZGV0YWNoU2hh
ZGVyKG1faWQsIG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVy
KG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShtX2lkKTsK
LX0KKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTb2xpZENvbG9yID0KKyAgICAgICAg
U1RSSU5HSUZZKAorICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisgICAgICAg
ICAgICB1bmlmb3JtIHZlYzQgdV9jb2xvcjsKKyAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHVfY29sb3I7Cisg
ICAgICAgICAgICB9CisgICAgICAgICk7CiAKLVN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRh
cmRGaWx0ZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBGaWx0ZXJPcGVyYXRp
b246Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKLSAgICA6IG1fY29udGV4dChj
b250ZXh0KQotICAgICwgbV9pZCgwKQotewotICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNv
dXJjZSA9Ci0gICAgICAgICAgICBTVFJJTkdJRlkoCi0gICAgICAgICAgICAgICAgYXR0cmlidXRl
IHZlYzQgYV92ZXJ0ZXg7Ci0gICAgICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV90ZXhDb29y
ZDsKLSAgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKLSAgICAg
ICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHZfdGV4Q29vcmQgPSB2ZWMyKGFfdGV4Q29vcmQpOwotICAgICAgICAgICAgICAg
ICAgICBnbF9Qb3NpdGlvbiA9IGFfdmVydGV4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICk7Ci0KLSNkZWZpbmUgU1RBTkRBUkRfRklMVEVSKC4uLikgXAotICAgICAgICAicHJlY2lz
aW9uIG1lZGl1bXAgZmxvYXQ7XG4iXAotICAgICAgICAidmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4
Q29vcmQ7XG4iXAotICAgICAgICAidW5pZm9ybSBoaWdocCBmbG9hdCB1X2Ftb3VudDtcbiJcCi0g
ICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7XG4iXAotICAgICAgICAjX19WQV9B
UkdTX18gXAotICAgICAgICAidm9pZCBtYWluKHZvaWQpXG4geyBnbF9GcmFnQ29sb3IgPSBzaGFk
ZSh0ZXh0dXJlMkQodV90ZXh0dXJlLCB2X3RleENvb3JkKSk7IH0iCi0KLSAgICBjb25zdCBjaGFy
KiBmcmFnbWVudFNoYWRlclNvdXJjZSA9IDA7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKLSAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3Vy
Y2UgPSBTVEFOREFSRF9GSUxURVIoCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleEZpbHRl
ciA9CisgICAgICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVy
dGV4OworICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV90ZXhDb29yZDsKKyAgICAgICAgICAg
IHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOworICAgICAgICAgICAgdm9pZCBtYWluKHZv
aWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdl90ZXhDb29yZCA9IHZlYzIoYV90
ZXhDb29yZCk7CisgICAgICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSBhX3ZlcnRleDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgKTsKKworICAgICNkZWZpbmUgU1RBTkRBUkRfRklMVEVSKC4uLikg
XAorICAgICAgICAgICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuIlwKKyAgICAgICAgICAg
ICJ2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDtcbiJcCisgICAgICAgICAgICAidW5pZm9y
bSBoaWdocCBmbG9hdCB1X2Ftb3VudDtcbiJcCisgICAgICAgICAgICAidW5pZm9ybSBzYW1wbGVy
MkQgc19zYW1wbGVyO1xuIlwKKyAgICAgICAgICAgICNfX1ZBX0FSR1NfXyBcCisgICAgICAgICAg
ICAidm9pZCBtYWluKHZvaWQpXG4geyBnbF9GcmFnQ29sb3IgPSBzaGFkZSh0ZXh0dXJlMkQoc19z
YW1wbGVyLCB2X3RleENvb3JkKSk7IH0iCisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21l
bnRHcmF5c2NhbGVGaWx0ZXIgPQorICAgICAgICBTVEFOREFSRF9GSUxURVIoCiAgICAgICAgICAg
ICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIGxvd3AgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9hbW91bnQ7CkBAIC00MDksOSAr
MjkwLDkgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEZpbHRlck8KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb2xvci5hKTsKICAgICAgICAgICAgIH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgotICAgICAgICBmcmFnbWVudFNoYWRl
clNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFn
bWVudFNlcGlhRmlsdGVyID0KKyAgICAgICAgU1RBTkRBUkRfRklMVEVSKAogICAgICAgICAgICAg
bG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICBsb3dwIGZsb2F0IGFtb3VudCA9IDEuMCAtIHVfYW1vdW50OwpAQCAtNDIxLDkgKzMw
Miw5IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0LCBGaWx0ZXJPCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29sb3IuYSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKLSAgICAgICAgZnJhZ21lbnRTaGFk
ZXJTb3VyY2UgPSBTVEFOREFSRF9GSUxURVIoCisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJh
Z21lbnRTYXR1cmF0ZUZpbHRlciA9CisgICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKICAgICAgICAg
ICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHZlYzQoKDAuMjEzICsgMC43ODcgKiB1X2Ftb3VudCkgKiBjb2xv
ci5yICsgKDAuNzE1IC0gMC43MTUgKiB1X2Ftb3VudCkgKiBjb2xvci5nICsgKDAuMDcyIC0gMC4w
NzIgKiB1X2Ftb3VudCkgKiBjb2xvci5iLApAQCAtNDMyLDkgKzMxMyw5IEBAIFN0YW5kYXJkRmls
dGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBGaWx0ZXJPCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IuYSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpIVUVfUk9UQVRFOgotICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5E
QVJEX0ZJTFRFUigKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudEh1ZVJvdGF0ZUZp
bHRlciA9CisgICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKICAgICAgICAgICAgIGxvd3AgdmVjNCBz
aGFkZShsb3dwIHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaGln
aHAgZmxvYXQgcGkgPSAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2OwpAQCAtNDQ2LDU4ICszMjcsNjIg
QEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsIEZpbHRlck8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b2xvci5hKTsKICAgICAgICAgICAgIH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKLSAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3Vy
Y2UgPSBTVEFOREFSRF9GSUxURVIoCisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRJ
bnZlcnRGaWx0ZXIgPQorICAgICAgICBTVEFOREFSRF9GSUxURVIoCiAgICAgICAgICAgICBsb3dw
IGZsb2F0IGludmVydChsb3dwIGZsb2F0IG4pIHsgcmV0dXJuICgxLjAgLSBuKSAqIHVfYW1vdW50
ICsgbiAqICgxLjAgLSB1X2Ftb3VudCk7IH0KICAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShs
b3dwIHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZl
YzQoaW52ZXJ0KGNvbG9yLnIpLCBpbnZlcnQoY29sb3IuZyksIGludmVydChjb2xvci5iKSwgY29s
b3IuYSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgotICAgICAgICBmcmFnbWVudFNoYWRlclNv
dXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVu
dEJyaWdodG5lc3NGaWx0ZXIgPQorICAgICAgICBTVEFOREFSRF9GSUxURVIoCiAgICAgICAgICAg
ICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHJldHVybiB2ZWM0KGNvbG9yLnJnYiAqICgxLjAgKyB1X2Ftb3VudCksIGNvbG9y
LmEpOwogICAgICAgICAgICAgfQogICAgICAgICApOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNl
ID0gU1RBTkRBUkRfRklMVEVSKAorCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50Q29u
dHJhc3RGaWx0ZXIgPQorICAgICAgICBTVEFOREFSRF9GSUxURVIoCiAgICAgICAgICAgICBsb3dw
IGZsb2F0IGNvbnRyYXN0KGxvd3AgZmxvYXQgbikgeyByZXR1cm4gKG4gLSAwLjUpICogdV9hbW91
bnQgKyAwLjU7IH0KICAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3Ip
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29udHJhc3QoY29s
b3IuciksIGNvbnRyYXN0KGNvbG9yLmcpLCBjb250cmFzdChjb2xvci5iKSwgY29sb3IuYSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpPUEFDSVRZOgotICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5E
QVJEX0ZJTFRFUigKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudE9wYWNpdHlGaWx0
ZXIgPQorICAgICAgICBTVEFOREFSRF9GSUxURVIoCiAgICAgICAgICAgICBsb3dwIHZlYzQgc2hh
ZGUobG93cCB2ZWM0IGNvbG9yKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVy
biB2ZWM0KGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgKiB1X2Ftb3VudCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpCTFVSOgotICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUUklOR0lG
WSgKKworI2RlZmluZSBCTFVSX0NPTlNUQU5UUyAiI2RlZmluZSBHQVVTU0lBTl9LRVJORUxfSEFM
Rl9XSURUSCAxMVxuI2RlZmluZSBHQVVTU0lBTl9LRVJORUxfU1RFUCAwLjJcbiIKKworICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudEJsdXJGaWx0ZXIgPQorICAgICAgICBCTFVSX0NPTlNU
QU5UUworICAgICAgICBTVFJJTkdJRlkoCisgICAgICAgICAgICAvLyBDcmVhdGUgYSBub3JtYWwg
ZGlzdHJpYnV0aW9uIG9mIDIxIHZhbHVlcyBiZXR3ZWVuIC0yIGFuZCAyLgogICAgICAgICAgICAg
cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIg
dl90ZXhDb29yZDsKICAgICAgICAgICAgIHVuaWZvcm0gbG93cCB2ZWMyIHVfYmx1clJhZGl1czsK
LSAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTsKKyAgICAgICAgICAgIHVu
aWZvcm0gc2FtcGxlcjJEIHNfc2FtcGxlcjsKICAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9n
YXVzc2lhbktlcm5lbFtHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSF07CiAKICAgICAgICAgICAg
IGxvd3AgdmVjNCBzYW1wbGVDb2xvcihmbG9hdCByYWRpdXMpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgdmVjMiBjb29yZCA9IHZfdGV4Q29vcmQgKyByYWRpdXMgKiB1X2JsdXJSYWRp
dXM7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRleHR1cmUyRCh1X3RleHR1cmUsIGNvb3JkKSAq
IGZsb2F0KGNvb3JkLnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNv
b3JkLnkgPCAxLik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRleHR1cmUyRChzX3NhbXBsZXIs
IGNvb3JkKSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8
IDEuICYmIGNvb3JkLnkgPCAxLik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHZlYzQg
Ymx1cigpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmVjNCB0b3RhbCA9IHNhbXBs
ZUNvbG9yKDApICogdV9nYXVzc2lhbktlcm5lbFswXTsKKyAgICAgICAgICAgICAgICB2ZWM0IHRv
dGFsID0gc2FtcGxlQ29sb3IoMC4pICogdV9nYXVzc2lhbktlcm5lbFswXTsKICAgICAgICAgICAg
ICAgICBmb3IgKGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKysp
IHsKICAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQ29sb3IoZmxvYXQoaSkgKiBH
QVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwogICAgICAgICAgICAg
ICAgICAgICB0b3RhbCArPSBzYW1wbGVDb2xvcihmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5fS0VS
TkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKQEAgLTUxMSwyODIgKzM5NiwxMzAgQEAg
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQsIEZpbHRlck8KICAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSBi
bHVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKLSAgICAgICAgc3dpdGNoIChwYXNzKSB7
Ci0gICAgICAgIGNhc2UgMDogewotICAgICAgICAgICAgLy8gRmlyc3QgcGFzczogaG9yaXpvbnRh
bCBhbHBoYSBibHVyLgotICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVFJJTkdJ
RlkoCi0gICAgICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgICAg
ICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7Ci0gICAgICAgICAgICAgICAgdW5p
Zm9ybSBsb3dwIGZsb2F0IHVfc2hhZG93Qmx1clJhZGl1czsKLSAgICAgICAgICAgICAgICB1bmlm
b3JtIGxvd3AgdmVjMiB1X3NoYWRvd09mZnNldDsKLSAgICAgICAgICAgICAgICB1bmlmb3JtIHNh
bXBsZXIyRCB1X3RleHR1cmU7Ci0gICAgICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNz
aWFuS2VybmVsW0dBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsKLQotICAgICAgICAgICAgICAg
IGxvd3AgZmxvYXQgc2FtcGxlQWxwaGEoZmxvYXQgcmFkaXVzKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgdmVjMiBjb29yZCA9IHZfdGV4Q29vcmQgLSB1X3NoYWRvd09m
ZnNldCArIHZlYzIocmFkaXVzICogdV9zaGFkb3dCbHVyUmFkaXVzLCAwLik7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0ZXh0dXJlMkQodV90ZXh0dXJlLCBjb29yZCkuYSAqIGZsb2F0KGNv
b3JkLnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAx
Lik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbG93cCBmbG9hdCBzaGFk
b3dCbHVySG9yaXpvbnRhbCgpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBmbG9hdCB0b3RhbCA9IHNhbXBsZUFscGhhKDApICogdV9nYXVzc2lhbktlcm5lbFswXTsKLSAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFM
Rl9XSURUSDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVB
bHBoYShmbG9hdChpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxb
aV07Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVBbHBoYShmbG9hdCgt
MSAqIGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKLSAg
ICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbDsK
LSAgICAgICAgICAgICAgICB9CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZG93
RmlsdGVyMSA9CisgICAgICAgIEJMVVJfQ09OU1RBTlRTCisgICAgICAgIFNUUklOR0lGWSgKKyAg
ICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OworICAgICAgICAgICAgdmFyeWluZyBo
aWdocCB2ZWMyIHZfdGV4Q29vcmQ7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9i
bHVyUmFkaXVzOworICAgICAgICAgICAgdW5pZm9ybSBsb3dwIHZlYzIgdV9zaGFkb3dPZmZzZXQ7
CisgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBsZXI7CisgICAgICAgICAgICB1
bmlmb3JtIGZsb2F0IHVfZ2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhd
OwogCi0gICAgICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuLCAxLiwgMS4sIDEuKSAq
IHNoYWRvd0JsdXJIb3Jpem9udGFsKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbG93cCBmbG9hdCBzYW1wbGVBbHBo
YShmbG9hdCByYWRpdXMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmVjMiBjb29y
ZCA9IHZfdGV4Q29vcmQgLSB1X3NoYWRvd09mZnNldCArIHZlYzIocmFkaXVzICogdV9ibHVyUmFk
aXVzLCAwLik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRleHR1cmUyRChzX3NhbXBsZXIsIGNv
b3JkKS5hICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwg
MS4gJiYgY29vcmQueSA8IDEuKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxOiB7Ci0g
ICAgICAgICAgICAvLyBTZWNvbmQgcGFzczogdmVydGljYWwgYWxwaGEgYmx1ciBhbmQgY29tcG9z
aXRlIHdpdGggb3JpZ2luLgotICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVFJJ
TkdJRlkoCi0gICAgICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAg
ICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7Ci0gICAgICAgICAgICAgICAg
dW5pZm9ybSBsb3dwIGZsb2F0IHVfc2hhZG93Qmx1clJhZGl1czsKLSAgICAgICAgICAgICAgICB1
bmlmb3JtIGxvd3AgdmVjNCB1X3NoYWRvd0NvbG9yOwotICAgICAgICAgICAgICAgIHVuaWZvcm0g
c2FtcGxlcjJEIHVfdGV4dHVyZTsKLSAgICAgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1
X2NvbnRlbnRUZXh0dXJlOwotICAgICAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9nYXVzc2lh
bktlcm5lbFtHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSF07Ci0KLSAgICAgICAgICAgICAgICBs
b3dwIGZsb2F0IHNhbXBsZUFscGhhKGZsb2F0IHIpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90ZXhDb29yZCArIHZlYzIoMC4sIHIgKiB1X3No
YWRvd0JsdXJSYWRpdXMpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHVf
dGV4dHVyZSwgY29vcmQpLmEgKiBmbG9hdChjb29yZC54ID4gMC4gJiYgY29vcmQueSA+IDAuICYm
IGNvb3JkLnggPCAxLiAmJiBjb29yZC55IDwgMS4pOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIGxvd3AgZmxvYXQgc2hhZG93Qmx1clZlcnRpY2FsKCkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IHRvdGFsID0gc2FtcGxlQWxwaGEoMCkg
KiB1X2dhdXNzaWFuS2VybmVsWzBdOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0g
MTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhhKGZsb2F0KGkpICogR0FVU1NJQU5fS0VSTkVM
X1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRv
dGFsICs9IHNhbXBsZUFscGhhKGZsb2F0KC0xICogaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkg
KiB1X2dhdXNzaWFuS2VybmVsW2ldOwotICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRvdGFsOworICAgICAgICAgICAgbG93cCBmbG9hdCBzaGFkb3dC
bHVySG9yaXpvbnRhbCgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmxvYXQgdG90
YWwgPSBzYW1wbGVBbHBoYSgwLikgKiB1X2dhdXNzaWFuS2VybmVsWzBdOworICAgICAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAxOyBpIDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7IGkrKykg
eworICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVBbHBoYShmbG9hdChpKSAqIEdB
VVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07CisgICAgICAgICAgICAg
ICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhhKGZsb2F0KC0xICogaSkgKiBHQVVTU0lBTl9LRVJO
RUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwogICAgICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgICAgIGxvd3AgdmVjNCBzb3VyY2VPdmVyKGxvd3AgdmVjNCBzb3VyY2UsIGxvd3Ag
dmVjNCBkZXN0aW5hdGlvbikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIENvbXBvc2l0ZSB0aGUgc2hhZG93IHdpdGggdGhlIG9yaWdpbmFsIHRleHR1cmUuCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2UgKyBkZXN0aW5hdGlvbiAqICgxLiAtIHNvdXJj
ZS5hKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsOwor
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSBzb3VyY2VPdmVy
KHRleHR1cmUyRCh1X2NvbnRlbnRUZXh0dXJlLCB2X3RleENvb3JkKSwgc2hhZG93Qmx1clZlcnRp
Y2FsKCkgKiB1X3NoYWRvd0NvbG9yKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAp
OwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuLCAxLiwgMS4s
IDEuKSAqIHNoYWRvd0JsdXJIb3Jpem9udGFsKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
KyAgICAgICAgKTsKIAotICAgIGlmICghZnJhZ21lbnRTaGFkZXJTb3VyY2UpCi0gICAgICAgIHJl
dHVybjsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRlciA9IG1fY29udGV4dC0+Y3Jl
YXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKTsKLSAgICBQbGF0Zm9y
bTNET2JqZWN0IGZyYWdtZW50U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUik7Ci0gICAgbV9jb250ZXh0LT5zaGFkZXJTb3Vy
Y2UodmVydGV4U2hhZGVyLCB2ZXJ0ZXhTaGFkZXJTb3VyY2UpOwotICAgIG1fY29udGV4dC0+c2hh
ZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNoYWRlclNvdXJjZSk7Ci0gICAgUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtSUQgPSBtX2NvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsKLSAg
ICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICBtX2NvbnRleHQt
PmNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOwotI2lmICFMT0dfRElTQUJMRUQKLSAgICBT
dHJpbmcgbG9nOwotICAgIG1fY29udGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhmcmFnbWVudFNoYWRl
cik7Ci0gICAgV1RGTG9nKCZMb2dDb21wb3NpdGluZywgIiVzXG4iLCBsb2cuYXNjaWkoKS5kYXRh
KCkpOwotI2VuZGlmCi0gICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2ZXJ0
ZXhTaGFkZXIpOwotICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgZnJhZ21l
bnRTaGFkZXIpOwotICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0ocHJvZ3JhbUlEKTsKLQotICAg
IG1fdmVydGV4QXR0cmliID0gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQs
ICJhX3ZlcnRleCIpOwotICAgIG1fdGV4Q29vcmRBdHRyaWIgPSBtX2NvbnRleHQtPmdldEF0dHJp
YkxvY2F0aW9uKHByb2dyYW1JRCwgImFfdGV4Q29vcmQiKTsKLSAgICBtX3RleHR1cmVVbmlmb3Jt
TG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X3Rl
eHR1cmUiKTsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
R1JBWVNDQUxFOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKLSAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9S
T1RBVEU6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKLSAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJB
U1Q6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIG1fdW5pZm9y
bUxvY2F0aW9ucy5hbW91bnQgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFt
SUQsICJ1X2Ftb3VudCIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6QkxVUjoKLSAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLmJsdXIucmFkaXVzID0gbV9jb250
ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9ibHVyUmFkaXVzIik7Ci0gICAg
ICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLmdhdXNzaWFuS2VybmVsID0gbV9jb250ZXh0LT5n
ZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9nYXVzc2lhbktlcm5lbCIpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6Ci0gICAgICAg
IG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1clJhZGl1cyA9IG1fY29udGV4dC0+Z2V0VW5p
Zm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfc2hhZG93Qmx1clJhZGl1cyIpOwotICAgICAgICBt
X3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNzaWFuS2VybmVsID0gbV9jb250ZXh0LT5nZXRV
bmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9nYXVzc2lhbktlcm5lbCIpOwotICAgICAgICBp
ZiAoIXBhc3MpCi0gICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93Lm9mZnNldCA9
IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfc2hhZG93T2Zmc2V0
Iik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRoZSBjb2xv
ciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBpbiB0aGUgc2Vjb25kIHBhc3MsIHRoZSBmaXJzdCBw
YXNzIGlzIG9ubHkgYSBob3Jpem9udGFsIGFscGhhIGJsdXIuCi0gICAgICAgICAgICBtX3VuaWZv
cm1Mb2NhdGlvbnMuc2hhZG93LmNvbG9yID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24o
cHJvZ3JhbUlELCAidV9zaGFkb3dDb2xvciIpOwotICAgICAgICAgICAgbV91bmlmb3JtTG9jYXRp
b25zLnNoYWRvdy5jb250ZW50VGV4dHVyZSA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9u
KHByb2dyYW1JRCwgInVfY29udGVudFRleHR1cmUiKTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgbV9pZCA9IHByb2dy
YW1JRDsKLSAgICBtX3ZlcnRleFNoYWRlciA9IHZlcnRleFNoYWRlcjsKLSAgICBtX2ZyYWdtZW50
U2hhZGVyID0gZnJhZ21lbnRTaGFkZXI7Ci19CisgICAgLy8gU2Vjb25kIHBhc3M6IHZlcnRpY2Fs
IGFscGhhIGJsdXIgYW5kIGNvbXBvc2l0ZSB3aXRoIG9yaWdpbi4KKyAgICBzdGF0aWMgY29uc3Qg
Y2hhciogZnJhZ21lbnRTaGFkb3dGaWx0ZXIyID0KKyAgICAgICAgQkxVUl9DT05TVEFOVFMKKyAg
ICAgICAgU1RSSU5HSUZZKAorICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cisg
ICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKKyAgICAgICAgICAgIHVu
aWZvcm0gbG93cCBmbG9hdCB1X2JsdXJSYWRpdXM7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3Ag
dmVjNCB1X3NoYWRvd0NvbG9yOworICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zYW1w
bGVyOworICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19jb250ZW50VGV4dHVyZTsKKyAg
ICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9nYXVzc2lhbktlcm5lbFtHQVVTU0lBTl9LRVJORUxf
SEFMRl9XSURUSF07CiAKLVBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBTdGFuZGFy
ZEZpbHRlclByb2dyYW06OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRmlsdGVy
T3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUsIHVuc2lnbmVkIHBhc3MpCi17Ci0gICAgUmVm
UHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGFkb3B0UmVmKG5ldyBTdGFuZGFy
ZEZpbHRlclByb2dyYW0oY29udGV4dCwgdHlwZSwgcGFzcykpOwotICAgIGlmICghcHJvZ3JhbS0+
bV9pZCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBsb3dwIGZsb2F0IHNhbXBsZUFs
cGhhKGZsb2F0IHIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmVjMiBjb29yZCA9
IHZfdGV4Q29vcmQgKyB2ZWMyKDAuLCByICogdV9ibHVyUmFkaXVzKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdGV4dHVyZTJEKHNfc2FtcGxlciwgY29vcmQpLmEgKiBmbG9hdChjb29yZC54ID4g
MC4gJiYgY29vcmQueSA+IDAuICYmIGNvb3JkLnggPCAxLiAmJiBjb29yZC55IDwgMS4pOworICAg
ICAgICAgICAgfQogCi0gICAgcmV0dXJuIHByb2dyYW07Ci19CisgICAgICAgICAgICBsb3dwIGZs
b2F0IHNoYWRvd0JsdXJWZXJ0aWNhbCgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ZmxvYXQgdG90YWwgPSBzYW1wbGVBbHBoYSgwLikgKiB1X2dhdXNzaWFuS2VybmVsWzBdOworICAg
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lE
VEg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVBbHBoYShmbG9h
dChpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07CisgICAg
ICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhhKGZsb2F0KC0xICogaSkgKiBHQVVT
U0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOworICAgICAgICAgICAgICAg
IH0KIAotc3RhdGljIGlubGluZSBmbG9hdCBnYXVzcyhmbG9hdCB4KQotewotICAgIHJldHVybiBl
eHAoLSh4ICogeCkgLyAyLik7Ci19CisgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsOworICAg
ICAgICAgICAgfQogCi1zdGF0aWMgZmxvYXQqIGdhdXNzaWFuS2VybmVsKCkKLXsKLSAgICBzdGF0
aWMgYm9vbCBwcmVwYXJlZCA9IGZhbHNlOwotICAgIHN0YXRpYyBmbG9hdCBrZXJuZWxbR0FVU1NJ
QU5fS0VSTkVMX0hBTEZfV0lEVEhdID0gezAsIH07CisgICAgICAgICAgICBsb3dwIHZlYzQgc291
cmNlT3Zlcihsb3dwIHZlYzQgc291cmNlLCBsb3dwIHZlYzQgZGVzdGluYXRpb24pCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgLy8gQ29tcG9zaXRlIHRoZSBzaGFkb3cgd2l0aCB0aGUg
b3JpZ2luYWwgdGV4dHVyZS4KKyAgICAgICAgICAgICAgICByZXR1cm4gc291cmNlICsgZGVzdGlu
YXRpb24gKiAoMS4gLSBzb3VyY2UuYSk7CisgICAgICAgICAgICB9CiAKLSAgICBpZiAocHJlcGFy
ZWQpCi0gICAgICAgIHJldHVybiBrZXJuZWw7CisgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSBzb3VyY2VPdmVy
KHRleHR1cmUyRChzX2NvbnRlbnRUZXh0dXJlLCB2X3RleENvb3JkKSwgc2hhZG93Qmx1clZlcnRp
Y2FsKCkgKiB1X3NoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKIAotICAg
IGtlcm5lbFswXSA9IGdhdXNzKDApOwotICAgIGZsb2F0IHN1bSA9IGtlcm5lbFswXTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7ICsraSkg
ewotICAgICAgICBrZXJuZWxbaV0gPSBnYXVzcyhpICogR0FVU1NJQU5fS0VSTkVMX1NURVApOwot
ICAgICAgICBzdW0gKz0gMiAqIGtlcm5lbFtpXTsKKyAgICBpZiAoc3BlY3MuaXNFbXB0eSgpKSB7
CisgICAgICAgIHNwZWNzLnJlc2l6ZShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6TGFzdEZp
bHRlcik7CisgICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpEZWZhdWx0
XSA9IFNoYWRlclNwZWModmVydGV4U2ltcGxlLCBmcmFnbWVudFNpbXBsZSk7CisgICAgICAgIHNw
ZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTb2xpZENvbG9yXSA9IFNoYWRlclNwZWMo
dmVydGV4U29saWRDb2xvciwgZnJhZ21lbnRTb2xpZENvbG9yKTsKKyAgICAgICAgc3BlY3NbVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJlY3RdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhTaW1wbGUs
IGZyYWdtZW50UmVjdFNpbXBsZSk7CisgICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyOjpNYXNrZWRdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhPcGFjaXR5QW5kTWFzaywgZnJhZ21l
bnRPcGFjaXR5QW5kTWFzayk7CisgICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpNYXNrZWRSZWN0XSA9IFNoYWRlclNwZWModmVydGV4T3BhY2l0eUFuZE1hc2ssIGZyYWdt
ZW50UmVjdE9wYWNpdHlBbmRNYXNrKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OkFudGlhbGlhc2VkXSA9IFNoYWRlclNwZWModmVydGV4U2ltcGxlLCBmcmFnbWVu
dEFudGlhbGlhc2luZ05vTWFzayk7CisgICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyOjpHcmF5c2NhbGVGaWx0ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdt
ZW50R3JheXNjYWxlRmlsdGVyKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6OlNlcGlhRmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudFNl
cGlhRmlsdGVyKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNh
dHVyYXRlRmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudFNhdHVyYXRl
RmlsdGVyKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Okh1ZVJv
dGF0ZUZpbHRlcl0gPSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRIdWVSb3RhdGVG
aWx0ZXIpOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QnJpZ2h0
bmVzc0ZpbHRlcl0gPSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRCcmlnaHRuZXNz
RmlsdGVyKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkNvbnRy
YXN0RmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudENvbnRyYXN0Rmls
dGVyKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkludmVydEZp
bHRlcl0gPSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRJbnZlcnRGaWx0ZXIpOwor
ICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3BhY2l0eUZpbHRlcl0g
PSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRPcGFjaXR5RmlsdGVyKTsKKyAgICAg
ICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkJsdXJGaWx0ZXJdID0gU2hhZGVy
U3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50Qmx1ckZpbHRlcik7CisgICAgICAgIHNwZWNzW1Rl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaGFkb3dGaWx0ZXJQYXNzMV0gPSBTaGFkZXJTcGVj
KHZlcnRleEZpbHRlciwgZnJhZ21lbnRTaGFkb3dGaWx0ZXIxKTsKKyAgICAgICAgc3BlY3NbVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNoYWRvd0ZpbHRlclBhc3MyXSA9IFNoYWRlclNwZWMo
dmVydGV4RmlsdGVyLCBmcmFnbWVudFNoYWRvd0ZpbHRlcjIpOwogICAgIH0KIAotICAgIC8vIE5v
cm1hbGl6ZSB0aGUga2VybmVsCi0gICAgZmxvYXQgc2NhbGUgPSAxIC8gc3VtOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgKytpKQotICAg
ICAgICBrZXJuZWxbaV0gKj0gc2NhbGU7Ci0KLSAgICBwcmVwYXJlZCA9IHRydWU7Ci0gICAgcmV0
dXJuIGtlcm5lbDsKKyAgICBBU1NFUlQoc3BlY3Muc2l6ZSgpID4ga2V5KTsKKyAgICBTaGFkZXJT
cGVjJiBzcGVjID0gc3BlY3Nba2V5XTsKKyAgICB2ZXJ0ZXhTb3VyY2UgPSBzcGVjLnZlcnRleFNo
YWRlcjsKKyAgICBmcmFnbWVudFNvdXJjZSA9IHNwZWMuZnJhZ21lbnRTaGFkZXI7CiB9CiAKLXZv
aWQgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpwcmVwYXJlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYg
b3BlcmF0aW9uLCB1bnNpZ25lZCBwYXNzLCBjb25zdCBJbnRTaXplJiBzaXplLCBHQzNEdWludCBj
b250ZW50VGV4dHVyZSkKK1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICA6IG1fY29udGV4
dChjb250ZXh0KQogewotICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShtX2lkKTsKLSAgICBzd2l0
Y2ggKG9wZXJhdGlvbi5nZXRPcGVyYXRpb25UeXBlKCkpIHsKLSAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6R1JBWVNDQUxFOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKLSAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkhVRV9ST1RBVEU6Ci0gICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0
aW9ucy5hbW91bnQsIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVy
YXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OklOVkVSVDoKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hU
TkVTUzoKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6Ci0gICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKG1fdW5p
Zm9ybUxvY2F0aW9ucy5hbW91bnQsIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJh
bnNmZXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKLSAgICAgICAgY29uc3QgQmx1
ckZpbHRlck9wZXJhdGlvbiYgYmx1ciA9IHN0YXRpY19jYXN0PGNvbnN0IEJsdXJGaWx0ZXJPcGVy
YXRpb24mPihvcGVyYXRpb24pOwotICAgICAgICBGbG9hdFNpemUgcmFkaXVzOwotCi0gICAgICAg
IC8vIEJsdXIgaXMgZG9uZSBpbiB0d28gcGFzc2VzLCBmaXJzdCBob3Jpem9udGFsbHkgYW5kIHRo
ZW4gdmVydGljYWxseS4gVGhlIHNhbWUgc2hhZGVyIGlzIHVzZWQgZm9yIGJvdGguCi0gICAgICAg
IGlmIChwYXNzKQotICAgICAgICAgICAgcmFkaXVzLnNldEhlaWdodChmbG9hdFZhbHVlRm9yTGVu
Z3RoKGJsdXIuc3RkRGV2aWF0aW9uKCksIHNpemUuaGVpZ2h0KCkpIC8gc2l6ZS5oZWlnaHQoKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJhZGl1cy5zZXRXaWR0aChmbG9hdFZhbHVlRm9y
TGVuZ3RoKGJsdXIuc3RkRGV2aWF0aW9uKCksIHNpemUud2lkdGgoKSkgLyBzaXplLndpZHRoKCkp
OwotCi0gICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVy
LnJhZGl1cywgcmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSk7Ci0gICAgICAgIG1fY29u
dGV4dC0+dW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5nYXVzc2lhbktlcm5lbCwg
R0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7Ci0g
ICAgICAgIGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24mIHNoYWRvdyA9IHN0YXRpY19j
YXN0PGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pOwotICAgICAg
ICBzd2l0Y2ggKHBhc3MpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgLy8gRmlyc3Qg
cGFzczogdmVydGljYWwgYWxwaGEgYmx1ci4KLSAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9y
bTJmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cub2Zmc2V0LCBmbG9hdChzaGFkb3cubG9jYXRp
b24oKS54KCkpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSwgZmxvYXQoc2hhZG93LmxvY2F0aW9uKCku
eSgpKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+dW5p
Zm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1clJhZGl1cywgc2hhZG93LnN0ZERl
dmlhdGlvbigpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSk7Ci0gICAgICAgICAgICBtX2NvbnRleHQt
PnVuaWZvcm0xZnYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5nYXVzc2lhbktlcm5lbCwgR0FV
U1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIC8vIFNlY29uZCBwYXNzOiB3ZSBu
ZWVkIHRoZSBzaGFkb3cgY29sb3IgYW5kIHRoZSBjb250ZW50IHRleHR1cmUgZm9yIGNvbXBvc2l0
aW5nLgotICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25z
LnNoYWRvdy5ibHVyUmFkaXVzLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLmhl
aWdodCgpKSk7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobV91bmlmb3JtTG9j
YXRpb25zLnNoYWRvdy5nYXVzc2lhbktlcm5lbCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgs
IGdhdXNzaWFuS2VybmVsKCkpOwotICAgICAgICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSk7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmJp
bmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBjb250ZW50VGV4dHVyZSk7
Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xaShtX3VuaWZvcm1Mb2NhdGlvbnMuc2hh
ZG93LmNvbnRlbnRUZXh0dXJlLCAxKTsKLSAgICAgICAgICAgIGZsb2F0IHIsIGcsIGIsIGE7Ci0g
ICAgICAgICAgICBzaGFkb3cuY29sb3IoKS5nZXRSR0JBKHIsIGcsIGIsIGEpOwotICAgICAgICAg
ICAgbV9jb250ZXh0LT51bmlmb3JtNGYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb2xvciwg
ciwgZywgYiwgYSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQogfQogCi1QYXNz
UmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OmdldFNoYWRlckZvckZpbHRlcihjb25zdCBGaWx0ZXJPcGVyYXRpb24mIGZpbHRlciwgdW5zaWdu
ZWQgcGFzcykKK1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjp+VGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIoKQogewotICAgIFJlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IHByb2dyYW07
Ci0gICAgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUgPSBmaWx0ZXIuZ2V0T3Bl
cmF0aW9uVHlwZSgpOwotICAgIGludCBrZXkgPSBpbnQodHlwZSkgfCAocGFzcyA8PCAxNik7Ci0g
ICAgRmlsdGVyTWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZmlsdGVyTWFwLmZpbmQoa2V5KTsK
LSAgICBpZiAoaXRlcmF0b3IgPT0gbV9maWx0ZXJNYXAuZW5kKCkpIHsKLSAgICAgICAgcHJvZ3Jh
bSA9IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKG1fY29udGV4dCwgdHlwZSwgcGFzcyk7
Ci0gICAgICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAg
IG1fZmlsdGVyTWFwLmFkZChrZXksIHByb2dyYW0pOwotICAgIH0gZWxzZQotICAgICAgICBwcm9n
cmFtID0gaXRlcmF0b3ItPnNlY29uZDsKLQotICAgIHJldHVybiBwcm9ncmFtOwogfQogCi11bnNp
Z25lZCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0UGFzc2VzUmVxdWlyZWRGb3JGaWx0
ZXIoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24pIGNvbnN0CitQYXNzUmVmUHRyPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0
U2hhZGVyUHJvZ3JhbShTaGFkZXJLZXkga2V5KQogewotICAgIHN3aXRjaCAob3BlcmF0aW9uLmdl
dE9wZXJhdGlvblR5cGUoKSkgewotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6
Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpTQVRVUkFURToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKLSAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpCUklHSFRORVNTOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKLSAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1Bf
U0hBRE9XOgotICAgICAgICAvLyBXZSB1c2UgdHdvLXBhc3NlcyAodmVydGljYWwraG9yaXpvbnRh
bCkgZm9yIGJsdXIgYW5kIGRyb3Atc2hhZG93LgotICAgICAgICByZXR1cm4gMjsKLSAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1NYXA6Oml0ZXJhdG9yIGl0ID0gbV9wcm9ncmFtcy5maW5kKGtleSk7CisgICAgaWYgKGl0
ICE9IG1fcHJvZ3JhbXMuZW5kKCkpCisgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOwogCisgICAg
U3RyaW5nIHZlcnRleFNoYWRlcjsKKyAgICBTdHJpbmcgZnJhZ21lbnRTaGFkZXI7CisgICAgZ2V0
U2hhZGVyU3BlYyhrZXksIHZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIpOworICAgIFJlZlB0
cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjpjcmVhdGUobV9jb250ZXh0LCB2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hhZGVy
KTsKKyAgICBtX3Byb2dyYW1zLmFkZChrZXksIHByb2dyYW0pOworICAgIHJldHVybiBwcm9ncmFt
OwogfQotCi0jZW5kaWYKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIuaAppbmRleCAxZmZiNzEwLi40ZTQ3YjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXIuaApAQCAtMjEsMjMzICsyMSwxMDMgQEAKICNpZm5kZWYgVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXJfaAogI2RlZmluZSBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cl9oCiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01B
UFBFUikKLQotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2lmIFVTRShURVhUVVJFX01BUFBFUikK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKICNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMu
aCIKLSNlbmRpZgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KKyNpbmNs
dWRlIDxTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBCaXRtYXBUZXh0
dXJlOwotY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI7CisjZGVmaW5lIFRFWE1BUF9E
RUNMQVJFX1ZBUklBQkxFKEFjY2Vzc29yLCBOYW1lLCBUeXBlKSBHQzNEdWludCBBY2Nlc3NvciMj
TG9jYXRpb24oKSB7IHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcgbmFtZShOYW1lKTsgcmV0dXJu
IGdldExvY2F0aW9uKG5hbWUsIFR5cGUpOyB9CisjZGVmaW5lIFRFWE1BUF9ERUNMQVJFX1VOSUZP
Uk0oQWNjZXNzb3IpIFRFWE1BUF9ERUNMQVJFX1ZBUklBQkxFKEFjY2Vzc29yLCAidV8iI0FjY2Vz
c29yLCBVbmlmb3JtVmFyaWFibGUpCisjZGVmaW5lIFRFWE1BUF9ERUNMQVJFX0FUVFJJQlVURShB
Y2Nlc3NvcikgVEVYTUFQX0RFQ0xBUkVfVkFSSUFCTEUoQWNjZXNzb3IsICJhXyIjQWNjZXNzb3Is
IEF0dHJpYlZhcmlhYmxlKQorI2RlZmluZSBURVhNQVBfREVDTEFSRV9TQU1QTEVSKEFjY2Vzc29y
KSBURVhNQVBfREVDTEFSRV9WQVJJQUJMRShBY2Nlc3NvciwgInNfIiNBY2Nlc3NvciwgVW5pZm9y
bVZhcmlhYmxlKQogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSA6IHB1YmxpYyBS
ZWZDb3VudGVkPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiB7CiBwdWJsaWM6Ci0gICAgUGxh
dGZvcm0zRE9iamVjdCBpZCgpIHsgcmV0dXJuIG1faWQ7IH0KLSAgICBHQzNEdWludCB2ZXJ0ZXhB
dHRyaWIoKSB7IHJldHVybiBtX3ZlcnRleEF0dHJpYjsgfQorICAgIFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbUlEKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IGNyZWF0ZShQYXNzUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHZlcnRleCwgY29uc3QgU3RyaW5n
JiBmcmFnbWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4LCBmcmFnbWVudCkpOworICAgIH0KIAot
ICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3Qg
Y2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJj
ZSk7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKTsKIAotICAgIHZp
cnR1YWwgdm9pZCBwcmVwYXJlKGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqKSB7
IH0KLSAgICBHQzNEaW50IG1hdHJpeExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhM
b2NhdGlvbjsgfQotICAgIEdDM0RpbnQgZmxpcExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9m
bGlwTG9jYXRpb247IH0KLSAgICBHQzNEaW50IHRleHR1cmVTaXplTG9jYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3RleHR1cmVTaXplTG9jYXRpb247IH0KLSAgICBHQzNEaW50IHNvdXJjZVRleHR1
cmVMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlVGV4dHVyZUxvY2F0aW9uOyB9Ci0g
ICAgR0MzRGludCBtYXNrVGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrVGV4
dHVyZUxvY2F0aW9uOyB9Ci0gICAgR0MzRGludCBvcGFjaXR5TG9jYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX29wYWNpdHlMb2NhdGlvbjsgfQotCi0gICAgc3RhdGljIGJvb2wgaXNWYWxpZFVuaWZv
cm1Mb2NhdGlvbihHQzNEaW50IGxvY2F0aW9uKSB7IHJldHVybiBsb2NhdGlvbiA+PSAwOyB9Ci0K
LXByb3RlY3RlZDoKLSAgICB2b2lkIGdldFVuaWZvcm1Mb2NhdGlvbihHQzNEaW50JiB2YXIsIGNv
bnN0IGNoYXIqIG5hbWUpOwotICAgIHZvaWQgaW5pdGlhbGl6ZVByb2dyYW0oKTsKLSAgICB2aXJ0
dWFsIHZvaWQgaW5pdGlhbGl6ZSgpIHsgfQotICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNv
dXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGV4U2hhZGVyU291cmNlLmRhdGEoKTsgfQotICAg
IGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9mcmFn
bWVudFNoYWRlclNvdXJjZS5kYXRhKCk7IH0KKyAgICBURVhNQVBfREVDTEFSRV9BVFRSSUJVVEUo
dmVydGV4KQorICAgIFRFWE1BUF9ERUNMQVJFX0FUVFJJQlVURSh0ZXhDb29yZCkKIAotICAgIEdy
YXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2lkOwot
ICAgIEdDM0R1aW50IG1fdmVydGV4QXR0cmliOwotICAgIFBsYXRmb3JtM0RPYmplY3QgbV92ZXJ0
ZXhTaGFkZXI7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZyYWdtZW50U2hhZGVyOwotICAgIEdD
M0RpbnQgbV9tYXRyaXhMb2NhdGlvbjsKLSAgICBHQzNEaW50IG1fZmxpcExvY2F0aW9uOwotICAg
IEdDM0RpbnQgbV90ZXh0dXJlU2l6ZUxvY2F0aW9uOwotICAgIEdDM0RpbnQgbV9zb3VyY2VUZXh0
dXJlTG9jYXRpb247Ci0gICAgR0MzRGludCBtX29wYWNpdHlMb2NhdGlvbjsKLSAgICBHQzNEaW50
IG1fbWFza1RleHR1cmVMb2NhdGlvbjsKLQotcHJpdmF0ZToKLSAgICBDU3RyaW5nIG1fdmVydGV4
U2hhZGVyU291cmNlOwotICAgIENTdHJpbmcgbV9mcmFnbWVudFNoYWRlclNvdXJjZTsKLX07Cisg
ICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShtYXRyaXgpCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5J
Rk9STShmbGlwKQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0odGV4dHVyZVNpemUpCisgICAg
VEVYTUFQX0RFQ0xBUkVfVU5JRk9STShvcGFjaXR5KQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZP
Uk0oY29sb3IpCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShleHBhbmRlZFF1YWRFZGdlc0lu
U2NyZWVuU3BhY2UpCisgICAgVEVYTUFQX0RFQ0xBUkVfU0FNUExFUihzYW1wbGVyKQorICAgIFRF
WE1BUF9ERUNMQVJFX1NBTVBMRVIobWFzaykKIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLWNs
YXNzIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbSA6IHB1YmxpYyBSZWZDb3VudGVkPFN0YW5kYXJkRmls
dGVyUHJvZ3JhbT4gewotcHVibGljOgotICAgIHZpcnR1YWwgflN0YW5kYXJkRmlsdGVyUHJvZ3Jh
bSgpOwotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYsIHVu
c2lnbmVkIHBhc3MsIGNvbnN0IEludFNpemUmLCBHQzNEdWludCBjb250ZW50VGV4dHVyZSk7Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBjcmVhdGUoR3JhcGhp
Y3NDb250ZXh0M0QqLCBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIHVuc2lnbmVkIHBh
c3MpOwotICAgIEdDM0R1aW50IHZlcnRleEF0dHJpYigpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGV4
QXR0cmliOyB9Ci0gICAgR0MzRHVpbnQgdGV4Q29vcmRBdHRyaWIoKSBjb25zdCB7IHJldHVybiBt
X3RleENvb3JkQXR0cmliOyB9Ci0gICAgR0MzRHVpbnQgdGV4dHVyZVVuaWZvcm0oKSBjb25zdCB7
IHJldHVybiBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb247IH0KLXByb3RlY3RlZDoKLSAgICBHcmFw
aGljc0NvbnRleHQzRCogbV9jb250ZXh0OwotcHJpdmF0ZToKLSAgICBTdGFuZGFyZEZpbHRlclBy
b2dyYW0oKTsKLSAgICBTdGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqLCBG
aWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIHVuc2lnbmVkIHBhc3MpOwotICAgIFBsYXRm
b3JtM0RPYmplY3QgbV9pZDsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fdmVydGV4U2hhZGVyOwot
ICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mcmFnbWVudFNoYWRlcjsKLSAgICBHQzNEdWludCBtX3Zl
cnRleEF0dHJpYjsKLSAgICBHQzNEdWludCBtX3RleENvb3JkQXR0cmliOwotICAgIEdDM0R1aW50
IG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlvbjsKLSAgICB1bmlvbiB7Ci0gICAgICAgIEdDM0R1aW50
IGFtb3VudDsKLQotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0MzRHVpbnQgcmFkaXVz
OwotICAgICAgICAgICAgR0MzRHVpbnQgZ2F1c3NpYW5LZXJuZWw7Ci0gICAgICAgIH0gYmx1cjsK
LQotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0MzRHVpbnQgYmx1clJhZGl1czsKLSAg
ICAgICAgICAgIEdDM0R1aW50IGNvbG9yOwotICAgICAgICAgICAgR0MzRHVpbnQgb2Zmc2V0Owot
ICAgICAgICAgICAgR0MzRHVpbnQgY29udGVudFRleHR1cmU7Ci0gICAgICAgICAgICBHQzNEdWlu
dCBnYXVzc2lhbktlcm5lbDsKLSAgICAgICAgfSBzaGFkb3c7Ci0gICAgfSBtX3VuaWZvcm1Mb2Nh
dGlvbnM7Ci19OworICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oYW1vdW50KQorICAgIFRFWE1B
UF9ERUNMQVJFX1VOSUZPUk0oZ2F1c3NpYW5LZXJuZWwpCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5J
Rk9STShibHVyUmFkaXVzKQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oc2hhZG93Q29sb3Ip
CisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShzaGFkb3dPZmZzZXQpCisgICAgVEVYTUFQX0RF
Q0xBUkVfU0FNUExFUihjb250ZW50VGV4dHVyZSkKICNlbmRpZgogCi1jbGFzcyBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1TaW1wbGU+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1w
bGUoY29udGV4dCkpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtU2ltcGxlKEdyYXBoaWNzQ29udGV4dDNEKik7Ci1wcml2YXRlOgotICAgIFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCk7Ci19OwotCi1jbGFzcyBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtUmVjdFNpbXBsZT4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVJlY3RTaW1wbGUoY29udGV4dCkpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZShHcmFwaGljc0NvbnRleHQzRCopOwogcHJpdmF0
ZToKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoKTsKLX07Ci0KLWNs
YXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2sgOiBwdWJsaWMgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s+IGNyZWF0ZShHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayhjb250ZXh0KSk7Ci0gICAg
fQotCi1wcm90ZWN0ZWQ6Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5k
TWFzayhHcmFwaGljc0NvbnRleHQzRCopOwotcHJpdmF0ZToKLSAgICBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKCk7Ci19OwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soY29udGV4dCkpOwotICAgIH0KLQotcHJv
dGVjdGVkOgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNr
KEdyYXBoaWNzQ29udGV4dDNEKik7Ci1wcml2YXRlOgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKCk7Ci19OwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVNvbGlkQ29sb3IgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0g
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtU29saWRDb2xvcj4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNv
bGlkQ29sb3IoY29udGV4dCkpOwotICAgIH0KLQotICAgIEdDM0RpbnQgY29sb3JMb2NhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fY29sb3JMb2NhdGlvbjsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yKEdyYXBoaWNzQ29udGV4dDNEKik7Ci1w
cml2YXRlOgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcigpOwotICAg
IEdDM0RpbnQgbV9jb2xvckxvY2F0aW9uOwotfTsKLQotY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2sgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrKGNvbnRleHQpKTsKLSAgICB9Ci0KLSAgICBH
QzNEaW50IGV4cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0dXJlQ29vcmRpbmF0ZXNMb2NhdGlvbigp
IHsgcmV0dXJuIG1fZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb3JkaW5hdGVzTG9jYXRp
b247IH0KLSAgICBHQzNEaW50IGV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9u
KCkgeyByZXR1cm4gbV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbjsgfQor
ICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+LCBjb25zdCBTdHJpbmcmIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgU3RyaW5nJiBmcmFn
bWVudFNoYWRlclNvdXJjZSk7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX3ZlcnRleFNoYWRlcjsK
KyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZnJhZ21lbnRTaGFkZXI7CiAKLXByb3RlY3RlZDoKLSAg
ICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayhHcmFwaGljc0Nv
bnRleHQzRCopOwotcHJpdmF0ZToKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlh
bGlhc2luZ05vTWFzaygpOworICAgIGVudW0gVmFyaWFibGVUeXBlIHsgVW5pZm9ybVZhcmlhYmxl
LCBBdHRyaWJWYXJpYWJsZSB9OworICAgIEdDM0R1aW50IGdldExvY2F0aW9uKGNvbnN0IEF0b21p
Y1N0cmluZyYsIFZhcmlhYmxlVHlwZSk7CiAKLSAgICBHQzNEaW50IG1fZXhwYW5kZWRRdWFkVmVy
dGljZXNJblRleHR1cmVDb3JkaW5hdGVzTG9jYXRpb247Ci0gICAgR0MzRGludCBtX2V4cGFuZGVk
UXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gbV9jb250ZXh0OworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9pZDsKKyAgICBIYXNoTWFw
PEF0b21pY1N0cmluZywgR0MzRHVpbnQ+IG1fdmFyaWFibGVzOwogfTsKIAogY2xhc3MgVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXIgewogcHVibGljOgotICAgIGVudW0gU2hhZGVyVHlwZSB7Ci0g
ICAgICAgIEludmFsaWQgPSAwLCAvLyBIYXNoTWFwcyBkbyBub3QgbGlrZSAwIGFzIGEga2V5Lgot
ICAgICAgICBTaW1wbGUsCi0gICAgICAgIEFudGlhbGlhc2luZ05vTWFzaywKLSAgICAgICAgUmVj
dFNpbXBsZSwKLSAgICAgICAgT3BhY2l0eUFuZE1hc2ssCi0gICAgICAgIFJlY3RPcGFjaXR5QW5k
TWFzaywKLSAgICAgICAgU29saWRDb2xvcgorICAgIGVudW0gU2hhZGVyS2V5IHsKKyAgICAgICAg
SW52YWxpZCA9IDAsCisgICAgICAgIERlZmF1bHQsCisgICAgICAgIFJlY3QsCisgICAgICAgIE1h
c2tlZCwKKyAgICAgICAgTWFza2VkUmVjdCwKKyAgICAgICAgU29saWRDb2xvciwKKyAgICAgICAg
QW50aWFsaWFzZWQsCisgICAgICAgIEdyYXlzY2FsZUZpbHRlciwKKyAgICAgICAgU2VwaWFGaWx0
ZXIsCisgICAgICAgIFNhdHVyYXRlRmlsdGVyLAorICAgICAgICBIdWVSb3RhdGVGaWx0ZXIsCisg
ICAgICAgIEJyaWdodG5lc3NGaWx0ZXIsCisgICAgICAgIENvbnRyYXN0RmlsdGVyLAorICAgICAg
ICBPcGFjaXR5RmlsdGVyLAorICAgICAgICBJbnZlcnRGaWx0ZXIsCisgICAgICAgIEJsdXJGaWx0
ZXIsCisgICAgICAgIFNoYWRvd0ZpbHRlclBhc3MxLAorICAgICAgICBTaGFkb3dGaWx0ZXJQYXNz
MiwKKyAgICAgICAgTGFzdEZpbHRlcgogICAgIH07CiAKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcigpIHsgfQogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKEdyYXBoaWNzQ29u
dGV4dDNEKik7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKTsKIAot
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB1bnNpZ25lZCBnZXRQYXNzZXNSZXF1aXJlZEZv
ckZpbHRlcihjb25zdCBGaWx0ZXJPcGVyYXRpb24mKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPFN0
YW5kYXJkRmlsdGVyUHJvZ3JhbT4gZ2V0U2hhZGVyRm9yRmlsdGVyKGNvbnN0IEZpbHRlck9wZXJh
dGlvbiYsIHVuc2lnbmVkIHBhc3MpOwotI2VuZGlmCi0KLSAgICBQYXNzUmVmUHRyPFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtPiBnZXRTaGFkZXJQcm9ncmFtKFNoYWRlclR5cGUpOwotICAgIFBh
c3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yPiBzb2xpZENvbG9y
UHJvZ3JhbSgpOwotICAgIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRp
YWxpYXNpbmdOb01hc2s+IGFudGlhbGlhc2luZ05vTWFza1Byb2dyYW0oKTsKKyAgICBQYXNzUmVm
UHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBnZXRTaGFkZXJQcm9ncmFtKFNoYWRlcktl
eSk7CiAKIHByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFNoYWRlclR5cGUsIFJlZlB0cjxU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4sIERlZmF1bHRIYXNoPGludD46Okhhc2gsIEhhc2hU
cmFpdHM8aW50PiA+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOwotICAgIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtTWFwIG1fdGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA7Ci0g
ICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKLQotI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKLSAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFt
PiA+IEZpbHRlck1hcDsKLSAgICBGaWx0ZXJNYXAgbV9maWx0ZXJNYXA7Ci0jZW5kaWYKKyAgICB0
eXBlZGVmIEhhc2hNYXA8U2hhZGVyS2V5LCBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0+LCBEZWZhdWx0SGFzaDxpbnQ+OjpIYXNoLCBIYXNoVHJhaXRzPGludD4gPiBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbU1hcDsKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcCBt
X3Byb2dyYW1zOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwogfTsK
IAogfQotCiAjZW5kaWYKIAogI2VuZGlmIC8vIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167648</attachid>
            <date>2012-10-08 16:54:04 -0700</date>
            <delta_ts>2012-10-08 18:30:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>81205</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlNDM1MmExLi5kM2E0YWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjQg
QEAKKzIwMTItMTAtMDggIE5vYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29t
PgorCisgICAgICAgIFtUZXhtYXBdIFJlZmFjdG9yIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
IHRvIGJlIGNsZWFyZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTg2MDQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUHJldmlvdXMgaW1wbGVtZW50YXRpb24gb2YgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXIgd2FzIHZlcnkgdmVyYm9zZSwgY2FsbGluZyBmb3IgdG9vCisgICAgICAgIG1hbnkgY2FzdHMg
YW5kIGFtYmlndW91cyBvd25lcnNoaXAuCisgICAgICAgIFRoaXMgcmVmYWN0b3IgZG9lcyB0aGUg
Zm9sbG93aW5nOgorICAgICAgICAxLiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSBpcyBvbmUg
Y2xhc3Mgd2l0aG91dCBzdWJjbGFzc2VzLgorICAgICAgICAyLiBVbmlmb3JtL0F0dHJpYnV0ZSBh
Y2Nlc3NvcnMgYXJlIGdlbmVyYXRlZCBieSBzcGVjaWFsIG1hY3JvcyAoVEVYTUFQX0RFQ0xBUkVf
Li4uKSB0aGF0CisgICAgICAgICAgIGdlbmVyYXRlIGJvdGggdGhlIEMrKyBhY2Nlc3MgZnVuY3Rp
b24sIGFzIHdlbGwgYXMgdGhlIEdMU0wgbmFtZSBvZiB0aGUgdmFyaWFibGUuIFRoaXMKKyAgICAg
ICAgICAgYWxsb3dzIGFkZGluZy9yZW1vdmluZyB2YXJpYWJsZXMgZnJvbSBhIHNoYWRlciB3aXRo
b3V0IGFkZGluZyBicm9pbGVyLXBsYXRlIGNvZGUgbGlrZQorICAgICAgICAgICBiZWZvcmUuCisK
KyAgICAgICAgQWZ0ZXIgdGhpcyBjaGFuZ2UgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgaGFz
IG9ubHkgb25lIHJlc3BvbnNpYmlsaXR5IC0gZGVhbGluZyB3aXRoCisgICAgICAgIFRleHR1cmVN
YXBwZXJHTCdzIGJ1aWx0LWluIHNoYWRlcnMgYW5kIHRoZWlyIGxpZmVjeWNsZS4gUHJlcGFyaW5n
IGZpbHRlcnMgZXRjLiBpcyBkb25lCisgICAgICAgIGluIFRleHR1cmVNYXBwZXJHTC4KKworICAg
ICAgICBUaGlzIGlzIGEgcmVmYWN0b3Igd2l0aG91dCBuZXcgZnVuY3Rpb25hbGl0eS4gSXQgaGFz
IGJlZW4gdmVyaWZpZWQgdG8gbm90IGJyZWFrIGFueSBleGlzdGluZworICAgICAgICByZWxldmFu
dCB0ZXN0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3UXVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJCKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZWRRdWFkV2l0aFBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXApOgor
ICAgICAgICAgICAgVXNlIHRoZSBNQUNSTy1nZW5lcmF0ZWQgdW5pZm9ybSBhY2Nlc3NvcnMuCisK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6a2V5Rm9yRmlsdGVyVHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpnZXRQYXNzZXNSZXF1aXJlZEZvckZpbHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpnYXVzcyk6CisgICAgICAgIChXZWJDb3JlOjpnYXVzc2lhbktlcm5lbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpwcmVwYXJlRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdGaWx0ZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBUZXh0dXJlR0w6OmFwcGx5RmlsdGVycyk6CisgICAgICAgICAgICBNb3ZlIHRoZSBmaWx0ZXIg
bG9naWMgdG8gVGV4dHVyZU1hcHBlckdMCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpnZXRMb2NhdGlv
bik6CisgICAgICAgIChTaGFkZXJTcGVjKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRlclNwZWM6
OlNoYWRlclNwZWMpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U2hhZGVyU3BlYyk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
On5UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyUHJvZ3JhbSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
Ojpwcm9ncmFtSUQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OmNyZWF0ZSk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisgICAg
ICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcik6CisgICAgICAgICAgICBTZWUgZGVzY3Jp
cHRpb24uCisKIDIwMTItMTAtMDggIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4K
IAogICAgICAgICBQb3N0LXIxMzAyMjYgQ2xlYW51cDogQ29tbWVudCBhIGNvbXBsaWNhdGVkIGlm
IHN0YXRlbWVudCBhbmQgbWFrZSBpdCBhIGhlbHBlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKaW5k
ZXggOTE2OWJmYi4uNGU4Y2Y4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTIzLDYgKzIz
LDcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlLmgi
CisjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIgogI2luY2x1ZGUgIlRp
bWVyLmgiCkBAIC0yNjYsNyArMjY3LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmVuZFBhaW50
aW5nKCkKIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdRdWFkKGNvbnN0IERyYXdRdWFkJiBx
dWFkVG9EcmF3LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSogc2hhZGVyUHJvZ3JhbSwgR0MzRGVudW0gZHJhd2lu
Z01vZGUsIGJvb2wgbmVlZHNCbGVuZGluZykKIHsKLSAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29u
dGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2Nh
dGlvbigpKTsKICAgICBtX2NvbnRleHQzRC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
QVJSQVlfQlVGRkVSLCAwKTsKIAogICAgIGNvbnN0IEdDM0RmbG9hdCBxdWFkW10gPSB7CkBAIC0y
NzUsNyArMjc2LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdRdWFkKGNvbnN0IERyYXdR
dWFkJiBxdWFkVG9EcmF3LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk0KICAgICAgICAgcXVhZFRvRHJh
dy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAzKCkueCgpLCBxdWFkVG9EcmF3LnRhcmdl
dFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDMoKS55KCksCiAgICAgICAgIHF1YWRUb0RyYXcudGFy
Z2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wNCgpLngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0
TWFwcGVkVG9Vbml0U3F1YXJlLnA0KCkueSgpCiAgICAgfTsKLSAgICBtX2NvbnRleHQzRC0+dmVy
dGV4QXR0cmliUG9pbnRlcihzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cihxdWFkKSk7CisgICAgbV9j
b250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRp
b24oKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cihx
dWFkKSk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBUcmFuc2Zvcm1hdGlv
bk1hdHJpeChkYXRhKCkucHJvamVjdGlvbk1hdHJpeCkubXVsdGlwbHkobW9kZWxWaWV3TWF0cml4
KS5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgKICAgICAgICAgICAgIHF1YWRUb0RyYXcu
b3JpZ2luYWxUYXJnZXRSZWN0LndpZHRoKCksIDAsIDAsIDAsCkBAIC0yOTcsNyArMjk4LDcgQEAg
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdRdWFkKGNvbnN0IERyYXdRdWFkJiBxdWFkVG9EcmF3
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk0KICAgICAgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKIAogICAgIG1fY29udGV4dDNELT5kcmF3QXJyYXlzKGRy
YXdpbmdNb2RlLCAwLCA0KTsKLSAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlz
YWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwog
fQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcihjb25zdCBDb2xvciYgY29sb3Is
IGZsb2F0IHdpZHRoLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgpCkBAIC0zMDUsMTUgKzMwNiwxMiBAQCB2b2lk
IFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcihjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHdp
ZHRoLCBjb25zdCBGbG9hdFJlYwogICAgIGlmIChjbGlwU3RhY2soKS5jdXJyZW50KCkuc2Npc3Nv
ckJveC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRh
KCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuc29saWRDb2xvclByb2dyYW0oKTsKLSAgICBt
X2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKTsKKyAgICBSZWZQdHI8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6U29saWRDb2xvcik7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJv
Z3JhbS0+cHJvZ3JhbUlEKCkpOwogCi0gICAgZmxvYXQgYWxwaGEgPSBjb2xvci5hbHBoYSgpIC8g
MjU1LjA7Ci0gICAgbV9jb250ZXh0M0QtPnVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxvY2F0aW9u
KCksCi0gICAgICAgICAgICAgICAgICAgICAgIChjb2xvci5yZWQoKSAvIDI1NS4wKSAqIGFscGhh
LAotICAgICAgICAgICAgICAgICAgICAgICAoY29sb3IuZ3JlZW4oKSAvIDI1NS4wKSAqIGFscGhh
LAotICAgICAgICAgICAgICAgICAgICAgICAoY29sb3IuYmx1ZSgpIC8gMjU1LjApICogYWxwaGEs
Ci0gICAgICAgICAgICAgICAgICAgICAgIGFscGhhKTsKKyAgICBmbG9hdCByLCBnLCBiLCBhOwor
ICAgIGNvbG9yLmdldFJHQkEociwgZywgYiwgYSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm00
Zihwcm9ncmFtLT5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgIG1fY29udGV4dDNE
LT5saW5lV2lkdGgod2lkdGgpOwogCiAgICAgZHJhd1F1YWQodGFyZ2V0UmVjdCwgbW9kZWxWaWV3
TWF0cml4LCBwcm9ncmFtLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6TElORV9MT09QLCBjb2xv
ci5oYXNBbHBoYSgpKTsKQEAgLTM2OCwyNyArMzY2LDI1IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdM
OjpkcmF3VGV4dHVyZVJlY3RhbmdsZUFSQih1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywg
Y29uCiB7CiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtOwog
ICAgIGlmIChtYXNrVGV4dHVyZSkKLSAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERh
dGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjpSZWN0T3BhY2l0eUFuZE1hc2spOworICAgICAgICBwcm9ncmFt
ID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNo
YWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok1hc2tlZFJlY3QpOwogICAg
IGVsc2UKLSAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpSZWN0U2ltcGxlKTsKLSAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5p
ZCgpKTsKKyAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpSZWN0KTsKKyAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFt
SUQoKSk7CiAKLSAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3Jh
bS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheShwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKICAgICBtX2NvbnRleHQzRC0+YWN0aXZl
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwogICAgIG1fY29udGV4dDNELT5i
aW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIHRleHR1cmUpOwotICAgIG1fY29u
dGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+c291cmNlVGV4dHVyZUxvY2F0aW9uKCksIDApOwor
ICAgIG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+c2FtcGxlckxvY2F0aW9uKCksIDAp
OwogCiAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xZihwcm9ncmFtLT5mbGlwTG9jYXRpb24oKSwg
ISEoZmxhZ3MgJiBTaG91bGRGbGlwVGV4dHVyZSkpOwogICAgIG1fY29udGV4dDNELT51bmlmb3Jt
MmYocHJvZ3JhbS0+dGV4dHVyZVNpemVMb2NhdGlvbigpLCB0ZXh0dXJlU2l6ZS53aWR0aCgpLCB0
ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xZihwcm9ncmFt
LT5vcGFjaXR5TG9jYXRpb24oKSwgb3BhY2l0eSk7CiAKLSAgICBpZiAoVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbS0+b3BhY2l0eUxvY2F0
aW9uKCkpKQotICAgICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPm9wYWNpdHlM
b2NhdGlvbigpLCBvcGFjaXR5KTsKLQotICAgIGlmIChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVy
ZS0+aXNWYWxpZCgpICYmIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppc1ZhbGlkVW5pZm9y
bUxvY2F0aW9uKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRpb24oKSkpIHsKKyAgICBpZiAobWFz
a1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQoKSkgewogICAgICAgICBjb25zdCBCaXRt
YXBUZXh0dXJlR0wqIG1hc2tUZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0
dXJlR0wqPihtYXNrVGV4dHVyZSk7CiAgICAgICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSk7CiAgICAgICAgIG1fY29udGV4dDNELT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbWFza1RleHR1cmVHTC0+aWQo
KSk7Ci0gICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+bWFza1RleHR1cmVM
b2NhdGlvbigpLCAxKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5t
YXNrTG9jYXRpb24oKSwgMSk7CiAgICAgICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgfQogCkBAIC00MDUsMTAgKzQwMSwxMCBA
QCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVyZSwgRmxh
Z3MgZmxhZ3MsIGNvbnN0IEludFNpemUmCiAKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0+IHByb2dyYW07CiAgICAgaWYgKG1hc2tUZXh0dXJlKQotICAgICAgICBwcm9ncmFt
ID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNo
YWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wYWNpdHlBbmRNYXNrKTsK
KyAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpN
YXNrZWQpOwogICAgIGVsc2UKLSAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEo
KS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpTaW1wbGUpOwotICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHBy
b2dyYW0tPmlkKCkpOworICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OkRlZmF1bHQpOworICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dy
YW0tPnByb2dyYW1JRCgpKTsKIAogICAgIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9n
cmFtLmdldCgpLCB0ZXh0dXJlLCBmbGFncywgdGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBv
cGFjaXR5LCBtYXNrVGV4dHVyZSk7CiB9CkBAIC01MzYsOCArNTMyLDggQEAgYm9vbCBUZXh0dXJl
TWFwcGVyR0w6OmRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJlLCBG
bGFncyBmbGFncywKICAgICBxdWFkVG9FZGdlQXJyYXkoZXhwYW5kZWRRdWFkSW5TY3JlZW5TcGFj
ZSwgdGFyZ2V0UXVhZEVkZ2VzKTsKICAgICBxdWFkVG9FZGdlQXJyYXkoaW5mbGF0ZVF1YWQocXVh
ZEluU2NyZWVuU3BhY2UuYm91bmRpbmdCb3goKSwgIGluZmxhdGlvbkRpc3RhbmNlKSwgdGFyZ2V0
UXVhZEVkZ2VzICsgMTIpOwogCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
QW50aWFsaWFzaW5nTm9NYXNrPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmFudGlhbGlhc2luZ05vTWFza1Byb2dyYW0oKTsKLSAgICBt
X2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKTsKKyAgICBSZWZQdHI8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6QW50aWFsaWFzZWQpOworICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHBy
b2dyYW0tPnByb2dyYW1JRCgpKTsKICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTNmdihwcm9ncmFt
LT5leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbigpLCA4LCB0YXJnZXRRdWFk
RWRnZXMpOwogCiAgICAgZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKHByb2dyYW0uZ2V0KCks
IHRleHR1cmUsIGZsYWdzLCBEcmF3UXVhZChvcmlnaW5hbFRhcmdldFJlY3QsIGV4cGFuZGVkUXVh
ZEluVGV4dHVyZUNvb3JkaW5hdGVzKSwgbW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5LCAwIC8qIG1h
c2tUZXh0dXJlICovKTsKQEAgLTU0NiwyMSArNTQyLDE5IEBAIGJvb2wgVGV4dHVyZU1hcHBlckdM
OjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxh
Z3MsCiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0o
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qIHByb2dyYW0sIHVpbnQzMl90IHRleHR1cmUsIEZs
YWdzIGZsYWdzLCBjb25zdCBEcmF3UXVhZCYgcXVhZFRvRHJhdywgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4
dHVyZSogbWFza1RleHR1cmUpCiB7Ci0gICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJp
YkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7CiAgICAgbV9jb250
ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKICAgICBt
X2NvbnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRl
eHR1cmUpOwotICAgIG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+c291cmNlVGV4dHVy
ZUxvY2F0aW9uKCksIDApOworICAgIG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+c2Ft
cGxlckxvY2F0aW9uKCksIDApOwogCiAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xZihwcm9ncmFt
LT5mbGlwTG9jYXRpb24oKSwgISEoZmxhZ3MgJiBTaG91bGRGbGlwVGV4dHVyZSkpOworICAgIG1f
Y29udGV4dDNELT51bmlmb3JtMWYocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkp
OwogCi0gICAgaWYgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppc1ZhbGlkVW5pZm9ybUxv
Y2F0aW9uKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpKSkKLSAgICAgICAgbV9jb250ZXh0M0Qt
PnVuaWZvcm0xZihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSwgb3BhY2l0eSk7Ci0KLSAgICBp
ZiAobWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQoKSAmJiBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLT5tYXNrVGV4dHVy
ZUxvY2F0aW9uKCkpKSB7CisgICAgaWYgKG1hc2tUZXh0dXJlICYmIG1hc2tUZXh0dXJlLT5pc1Zh
bGlkKCkpIHsKICAgICAgICAgY29uc3QgQml0bWFwVGV4dHVyZUdMKiBtYXNrVGV4dHVyZUdMID0g
c3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMKj4obWFza1RleHR1cmUpOwogICAgICAg
ICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEp
OwogICAgICAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIG1hc2tUZXh0dXJlR0wtPmlkKCkpOwotICAgICAgICBtX2NvbnRleHQzRC0+dW5p
Zm9ybTFpKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRpb24oKSwgMSk7CisgICAgICAgIG1fY29u
dGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+bWFza0xvY2F0aW9uKCksIDEpOwogICAgICAgICBt
X2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwog
ICAgIH0KIApAQCAtNzEwLDI3ICs3MDQsMTcxIEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRh
dGVDb250ZW50cyhJbWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvCiB9
CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0Zp
bHRlcmVkKGNvbnN0IEJpdG1hcFRleHR1cmUmIHNvdXJjZVRleHR1cmUsIGNvbnN0IEJpdG1hcFRl
eHR1cmUmIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIGZpbHRlciwgaW50
IHBhc3MpCisKK3N0YXRpYyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2hhZGVyS2V5IGtl
eUZvckZpbHRlclR5cGUoRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUsIHVuc2ln
bmVkIHBhc3MpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkdSQVlTQ0FMRToKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpHcmF5c2NhbGVGaWx0ZXI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgorICAg
ICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNlcGlhRmlsdGVyOworICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKKyAgICAgICAgcmV0dXJuIFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjpTYXR1cmF0ZUZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6SFVFX1JPVEFURToKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpIdWVSb3RhdGVGaWx0ZXI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoK
KyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpJbnZlcnRGaWx0ZXI7
CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6CisgICAgICAgIHJldHVybiBU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QnJpZ2h0bmVzc0ZpbHRlcjsKKyAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6Q29udHJhc3RGaWx0ZXI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9Q
QUNJVFk6CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3BhY2l0
eUZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKKyAgICAgICAgcmV0dXJu
IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpCbHVyRmlsdGVyOworICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIHBhc3MgPyBUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6U2hhZG93RmlsdGVyUGFzczIgOiBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6U2hhZG93RmlsdGVyUGFzczE7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6SW52YWxpZDsKKyAgICB9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBnZXRQYXNzZXNSZXF1aXJl
ZEZvckZpbHRlcihGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgorICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
U0FUVVJBVEU6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6CisgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJ
R0hUTkVTUzoKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CisgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpCTFVSOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURP
VzoKKyAgICAgICAgLy8gV2UgdXNlIHR3by1wYXNzZXMgKHZlcnRpY2FsK2hvcml6b250YWwpIGZv
ciBibHVyIGFuZCBkcm9wLXNoYWRvdy4KKyAgICAgICAgcmV0dXJuIDI7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCisvLyBDcmVhdGUgYSBub3JtYWwgZGlzdHJp
YnV0aW9uIG9mIDIxIHZhbHVlcyBiZXR3ZWVuIC0yIGFuZCAyLgorc3RhdGljIGNvbnN0IGludCBH
QVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCA9IDExOworc3RhdGljIGNvbnN0IGZsb2F0IEdBVVNT
SUFOX0tFUk5FTF9TVEVQID0gMC4yOworCitzdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNzKGZsb2F0
IHgpCit7CisgICAgcmV0dXJuIGV4cCgtKHggKiB4KSAvIDIuKTsKK30KKworc3RhdGljIGZsb2F0
KiBnYXVzc2lhbktlcm5lbCgpCit7CisgICAgc3RhdGljIGJvb2wgcHJlcGFyZWQgPSBmYWxzZTsK
KyAgICBzdGF0aWMgZmxvYXQga2VybmVsW0dBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXSA9IHsw
LCB9OworCisgICAgaWYgKHByZXBhcmVkKQorICAgICAgICByZXR1cm4ga2VybmVsOworCisgICAg
a2VybmVsWzBdID0gZ2F1c3MoMCk7CisgICAgZmxvYXQgc3VtID0ga2VybmVsWzBdOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgKytpKSB7
CisgICAgICAgIGtlcm5lbFtpXSA9IGdhdXNzKGkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCk7Cisg
ICAgICAgIHN1bSArPSAyICoga2VybmVsW2ldOworICAgIH0KKworICAgIC8vIE5vcm1hbGl6ZSB0
aGUga2VybmVsLgorICAgIGZsb2F0IHNjYWxlID0gMSAvIHN1bTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7ICsraSkKKyAgICAgICAga2Vy
bmVsW2ldICo9IHNjYWxlOworCisgICAgcHJlcGFyZWQgPSB0cnVlOworICAgIHJldHVybiBrZXJu
ZWw7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVGaWx0ZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiwg
dW5zaWduZWQgcGFzcywgY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRHVpbnQgY29udGVudFRleHR1
cmUpCit7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gcHJvZ3JhbS0+
Y29udGV4dCgpOworICAgIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkp
OworCisgICAgc3dpdGNoIChvcGVyYXRpb24uZ2V0T3BlcmF0aW9uVHlwZSgpKSB7CisgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
U0VQSUE6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgorICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgorICAgICAgICBjb250ZXh0LT51bmlmb3JtMWYocHJv
Z3JhbS0+YW1vdW50TG9jYXRpb24oKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJp
eEZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpCUklHSFRORVNTOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKKyAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKKyAgICAgICAgY29udGV4dC0+dW5pZm9y
bTFmKHByb2dyYW0tPmFtb3VudExvY2F0aW9uKCksIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29t
cG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKKyAgICAgICAg
Y29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1ciA9IHN0YXRpY19jYXN0PGNvbnN0IEJsdXJG
aWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pOworICAgICAgICBGbG9hdFNpemUgcmFkaXVzOwor
CisgICAgICAgIC8vIEJsdXIgaXMgZG9uZSBpbiB0d28gcGFzc2VzLCBmaXJzdCBob3Jpem9udGFs
bHkgYW5kIHRoZW4gdmVydGljYWxseS4gVGhlIHNhbWUgc2hhZGVyIGlzIHVzZWQgZm9yIGJvdGgu
CisgICAgICAgIGlmIChwYXNzKQorICAgICAgICAgICAgcmFkaXVzLnNldEhlaWdodChmbG9hdFZh
bHVlRm9yTGVuZ3RoKGJsdXIuc3RkRGV2aWF0aW9uKCksIHNpemUuaGVpZ2h0KCkpIC8gc2l6ZS5o
ZWlnaHQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhZGl1cy5zZXRXaWR0aChmbG9h
dFZhbHVlRm9yTGVuZ3RoKGJsdXIuc3RkRGV2aWF0aW9uKCksIHNpemUud2lkdGgoKSkgLyBzaXpl
LndpZHRoKCkpOworCisgICAgICAgIGNvbnRleHQtPnVuaWZvcm0yZihwcm9ncmFtLT5ibHVyUmFk
aXVzTG9jYXRpb24oKSwgcmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSk7CisgICAgICAg
IGNvbnRleHQtPnVuaWZvcm0xZnYocHJvZ3JhbS0+Z2F1c3NpYW5LZXJuZWxMb2NhdGlvbigpLCBH
QVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKKyAg
ICAgICAgY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgc2hhZG93ID0gc3RhdGljX2Nh
c3Q8Y29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbik7CisgICAgICAg
IGNvbnRleHQtPnVuaWZvcm0xZnYocHJvZ3JhbS0+Z2F1c3NpYW5LZXJuZWxMb2NhdGlvbigpLCBH
QVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7CisgICAgICAgIHN3
aXRjaCAocGFzcykgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAvLyBGaXJzdCBwYXNz
OiB2ZXJ0aWNhbCBhbHBoYSBibHVyLgorICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTJmKHBy
b2dyYW0tPnNoYWRvd09mZnNldExvY2F0aW9uKCksIGZsb2F0KHNoYWRvdy5sb2NhdGlvbigpLngo
KSkgLyBmbG9hdChzaXplLndpZHRoKCkpLCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS55KCkpIC8g
ZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmKHBy
b2dyYW0tPmJsdXJSYWRpdXNMb2NhdGlvbigpLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9h
dChzaXplLndpZHRoKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE6Cisg
ICAgICAgICAgICAvLyBTZWNvbmQgcGFzczogd2UgbmVlZCB0aGUgc2hhZG93IGNvbG9yIGFuZCB0
aGUgY29udGVudCB0ZXh0dXJlIGZvciBjb21wb3NpdGluZy4KKyAgICAgICAgICAgIGNvbnRleHQt
PnVuaWZvcm0xZihwcm9ncmFtLT5ibHVyUmFkaXVzTG9jYXRpb24oKSwgc2hhZG93LnN0ZERldmlh
dGlvbigpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICAgICAgY29udGV4dC0+YWN0
aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpOworICAgICAgICAgICAgY29u
dGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbnRlbnRU
ZXh0dXJlKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5jb250ZW50
VGV4dHVyZUxvY2F0aW9uKCksIDEpOworICAgICAgICAgICAgZmxvYXQgciwgZywgYiwgYTsKKyAg
ICAgICAgICAgIHNoYWRvdy5jb2xvcigpLmdldFJHQkEociwgZywgYiwgYSk7CisgICAgICAgICAg
ICBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+c2hhZG93Q29sb3JMb2NhdGlvbigpLCByLCBn
LCBiLCBhKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgVGV4
dHVyZU1hcHBlckdMOjpkcmF3RmlsdGVyZWQoY29uc3QgQml0bWFwVGV4dHVyZSYgc2FtcGxlciwg
Y29uc3QgQml0bWFwVGV4dHVyZSYgY29udGVudFRleHR1cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlv
biYgZmlsdGVyLCBpbnQgcGFzcykKIHsKICAgICAvLyBGb3Igc3RhbmRhcmQgZmlsdGVycywgd2Ug
YWx3YXlzIGRyYXcgdGhlIHdob2xlIHRleHR1cmUgd2l0aG91dCB0cmFuc2Zvcm1hdGlvbnMuCi0g
ICAgUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRH
TERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJGb3JGaWx0ZXIoZmls
dGVyLCBwYXNzKTsKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2hhZGVyS2V5IGtl
eSA9IGtleUZvckZpbHRlclR5cGUoZmlsdGVyLmdldE9wZXJhdGlvblR5cGUoKSwgcGFzcyk7Cisg
ICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNo
YXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0o
a2V5KTsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAKLSAgICBwcm9ncmFtLT5wcmVwYXJlKGZpbHRl
ciwgcGFzcywgc291cmNlVGV4dHVyZS5jb250ZW50U2l6ZSgpLCBzdGF0aWNfY2FzdDxjb25zdCBC
aXRtYXBUZXh0dXJlR0wmPihjb250ZW50VGV4dHVyZSkuaWQoKSk7CisgICAgcHJlcGFyZUZpbHRl
clByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgZmlsdGVyLCBwYXNzLCBzYW1wbGVyLmNvbnRlbnRTaXpl
KCksIHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KGNvbnRlbnRUZXh0dXJlKS5p
ZCgpKTsKIAotICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFt
LT52ZXJ0ZXhBdHRyaWIoKSk7Ci0gICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KHByb2dyYW0tPnRleENvb3JkQXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKKyAgICBtX2NvbnRl
eHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dGV4Q29vcmRMb2NhdGlvbigp
KTsKICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRTApOwotICAgIG1fY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oc291cmNlVGV4
dHVyZSkuaWQoKSk7Ci0gICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT50ZXh0dXJl
VW5pZm9ybSgpLCAwKTsKKyAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KHNh
bXBsZXIpLmlkKCkpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+c2FtcGxl
ckxvY2F0aW9uKCksIDApOwogICAgIGNvbnN0IEdDM0RmbG9hdCB0YXJnZXRWZXJ0aWNlc1tdID0g
ey0xLCAtMSwgMSwgLTEsIDEsIDEsIC0xLCAxfTsKICAgICBjb25zdCBHQzNEZmxvYXQgc291cmNl
VmVydGljZXNbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKLSAgICBtX2NvbnRleHQzRC0+
dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cih0YXJnZXRWZXJ0aWNlcykpOwot
ICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnRleENvb3JkQXR0
cmliKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIo
c291cmNlVmVydGljZXMpKTsKKyAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihw
cm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZh
bHNlLCAwLCBHQzNEaW50cHRyKHRhcmdldFZlcnRpY2VzKSk7CisgICAgbV9jb250ZXh0M0QtPnZl
cnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dGV4Q29vcmRMb2NhdGlvbigpLCAyLCBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHNvdXJjZVZlcnRpY2VzKSk7
CiAgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKICAg
ICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFO
LCAwLCA0KTsKLSAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dy
YW0tPnZlcnRleEF0dHJpYigpKTsKLSAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KHByb2dyYW0tPnRleENvb3JkQXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5kaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7CisgICAgbV9j
b250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT50ZXhDb29yZExvY2F0
aW9uKCkpOwogfQogCiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IEJpdG1hcFRleHR1cmVHTDo6
YXBwbHlGaWx0ZXJzKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IEJpdG1hcFRl
eHR1cmUmIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQpA
QCAtNzQ0LDcgKzg4Miw3IEBAIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gQml0bWFwVGV4dHVy
ZUdMOjphcHBseUZpbHRlcnMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hCiAgICAgICAgIGNvbnN0
IEZpbHRlck9wZXJhdGlvbiogZmlsdGVyID0gZmlsdGVycy5hdChpKTsKICAgICAgICAgQVNTRVJU
KGZpbHRlcik7CiAKLSAgICAgICAgaW50IG51bVBhc3NlcyA9IHRleHR1cmVNYXBwZXJHTC0+ZGF0
YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFBhc3Nlc1Jl
cXVpcmVkRm9yRmlsdGVyKCpmaWx0ZXIpOworICAgICAgICBpbnQgbnVtUGFzc2VzID0gZ2V0UGFz
c2VzUmVxdWlyZWRGb3JGaWx0ZXIoZmlsdGVyLT5nZXRPcGVyYXRpb25UeXBlKCkpOwogICAgICAg
ICBmb3IgKGludCBqID0gMDsgaiA8IG51bVBhc3NlczsgKytqKSB7CiAgICAgICAgICAgICB0ZXh0
dXJlTWFwcGVyR0wtPmJpbmRTdXJmYWNlKHRhcmdldC5nZXQoKSk7CiAgICAgICAgICAgICB0ZXh0
dXJlTWFwcGVyR0wtPmRyYXdGaWx0ZXJlZCgoaSB8fCBqKSA/ICpzb3VyY2UgOiBjb250ZW50VGV4
dHVyZSwgY29udGVudFRleHR1cmUsICpmaWx0ZXIsIGopOwpAQCAtODk1LDEyICsxMDMzLDEyIEBA
IHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1vZGVsVmlld01hdHJpeCwgY29uCiAKICAgICBkYXRhKCkuaW5pdGlhbGl6ZVN0ZW5jaWwo
KTsKIAotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRh
dGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQ
cm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaW1wbGUpOworICAgIFJlZlB0cjxU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEo
KS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpEZWZhdWx0KTsKIAotICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFt
KHByb2dyYW0tPmlkKCkpOwotICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0o
cHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKICAgICBjb25zdCBHQzNEZmxvYXQg
dW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKLSAgICBtX2NvbnRleHQzRC0+
dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cih1bml0UmVjdCkpOworICAgIG1f
Y29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleExvY2F0aW9uKCks
IDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIodW5pdFJl
Y3QpKTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9u
TWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KQogICAgICAgICAgICAgLm11bHRpcGx5KG1v
ZGVsVmlld01hdHJpeCkKQEAgLTk0NCw3ICsxMDgyLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6
OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBj
b24KICAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5H
TEVfRkFOLCAwLCA0KTsKIAogICAgIC8vIENsZWFyIHRoZSBzdGF0ZS4KLSAgICBtX2NvbnRleHQz
RC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAg
ICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleExv
Y2F0aW9uKCkpOwogICAgIG1fY29udGV4dDNELT5zdGVuY2lsTWFzaygwKTsKIAogICAgIC8vIElu
Y3JlYXNlIHN0ZW5jaWxJbmRleCBhbmQgYXBwbHkgc3RlbmNpbCB0ZXN0aW5nLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKaW5kZXggNWNhOGM5Ni4uNzM4YjcxNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCkBAIC0zMCwyNDcg
KzMwLDU3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2RlZmluZSBTVFJJTkdJRlkoLi4u
KSAjX19WQV9BUkdTX18KLQotc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNl
T3BhY2l0eUFuZE1hc2sgPQotICAgIFNUUklOR0lGWSgKLSAgICAgICAgcHJlY2lzaW9uIG1lZGl1
bXAgZmxvYXQ7Ci0gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc291cmNlOwotICAgICAgICB1
bmlmb3JtIHNhbXBsZXIyRCBzX21hc2s7Ci0gICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29w
YWNpdHk7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOwotICAg
ICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9tYXNrVGV4Q29vcmQ7Ci0gICAgICAgIHZvaWQgbWFp
bih2b2lkKQotICAgICAgICB7Ci0gICAgICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJl
MkQoc19zb3VyY2UsIHZfc291cmNlVGV4Q29vcmQpOwotICAgICAgICAgICAgbG93cCB2ZWM0IG1h
c2tDb2xvciA9IHRleHR1cmUyRChzX21hc2ssIHZfbWFza1RleENvb3JkKTsKLSAgICAgICAgICAg
IGxvd3AgZmxvYXQgZnJhZ21lbnRBbHBoYSA9IHVfb3BhY2l0eSAqIG1hc2tDb2xvci5hOwotICAg
ICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBmcmFnbWVudEFscGhhLCBj
b2xvci5hICogZnJhZ21lbnRBbHBoYSk7Ci0gICAgICAgIH0KLSAgICApOwotCi1zdGF0aWMgY29u
c3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0T3BhY2l0eUFuZE1hc2sgPQotICAgIFNU
UklOR0lGWSgKLSAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgIHVuaWZv
cm0gc2FtcGxlcjJEUmVjdCBzX3NvdXJjZTsKLSAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0
IHNfbWFzazsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKLSAgICAgICAg
dmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAgICAgIHZhcnlpbmcgaGln
aHAgdmVjMiB2X21hc2tUZXhDb29yZDsKLSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRFJlY3Qoc19zb3VyY2Us
IHZfc291cmNlVGV4Q29vcmQpOwotICAgICAgICAgICAgbG93cCB2ZWM0IG1hc2tDb2xvciA9IHRl
eHR1cmUyRFJlY3Qoc19tYXNrLCB2X21hc2tUZXhDb29yZCk7Ci0gICAgICAgICAgICBsb3dwIGZs
b2F0IGZyYWdtZW50QWxwaGEgPSB1X29wYWNpdHkgKiBtYXNrQ29sb3IuYTsKLSAgICAgICAgICAg
IGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogZnJhZ21lbnRBbHBoYSwgY29sb3IuYSAq
IGZyYWdtZW50QWxwaGEpOwotICAgICAgICB9Ci0gICAgKTsKLQotc3RhdGljIGNvbnN0IGNoYXIq
IHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrID0KLSAgICBTVFJJTkdJRlkoCi0gICAg
ICAgIHVuaWZvcm0gbWF0NCB1X21hdHJpeDsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVf
ZmxpcDsKLSAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7Ci0gICAgICAgIHZhcnlpbmcg
aGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIg
dl9tYXNrVGV4Q29vcmQ7Ci0gICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICB7Ci0gICAg
ICAgICAgICB2X3NvdXJjZVRleENvb3JkID0gdmVjMihhX3ZlcnRleC54LCBtaXgoYV92ZXJ0ZXgu
eSwgMS4gLSBhX3ZlcnRleC55LCB1X2ZsaXApKTsKLSAgICAgICAgICAgIHZfbWFza1RleENvb3Jk
ID0gdmVjMihhX3ZlcnRleCk7Ci0gICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICog
YV92ZXJ0ZXg7Ci0gICAgICAgIH0KLSAgICApOwotCi1zdGF0aWMgY29uc3QgY2hhciogZnJhZ21l
bnRTaGFkZXJTb3VyY2VTaW1wbGUgPQotICAgIFNUUklOR0lGWSgKLSAgICAgICAgcHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc291cmNlOwotICAg
ICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OwotICAgICAgICB2YXJ5aW5nIGhpZ2hw
IHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKLSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRChzX3NvdXJjZSwgdl9z
b3VyY2VUZXhDb29yZCk7Ci0gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJn
YiAqIHVfb3BhY2l0eSwgY29sb3IuYSAqIHVfb3BhY2l0eSk7Ci0gICAgICAgIH0KLSAgICApOwot
Ci1zdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VBbnRpYWxpYXNpbmdOb01h
c2sgPQotICAgIFNUUklOR0lGWSgKLSAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0g
ICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc291cmNlOwotICAgICAgICB2YXJ5aW5nIGhpZ2hw
IHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3Bh
Y2l0eTsKLSAgICAgICAgdW5pZm9ybSB2ZWMzIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNw
YWNlWzhdOwotICAgICAgICB2b2lkIG1haW4oKQotICAgICAgICB7Ci0gICAgICAgICAgICB2ZWM0
IHNhbXBsZWRDb2xvciA9IHRleHR1cmUyRChzX3NvdXJjZSwgY2xhbXAodl9zb3VyY2VUZXhDb29y
ZCwgMC4wLCAxLjApKTsKLSAgICAgICAgICAgIHZlYzMgcG9zID0gdmVjMyhnbF9GcmFnQ29vcmQu
eHksIDEpOwotCi0gICAgICAgICAgICAvLyBUaGUgZGF0YSBwYXNzZWQgaW4gdV9leHBhbmRlZFF1
YWRFZGdlc0luU2NyZWVuU3BhY2UgaXMgbWVyZWx5IHRoZQotICAgICAgICAgICAgLy8gcHJlLXNj
YWxlZCBjb2VmZmVjaWVudHMgb2YgdGhlIGxpbmUgZXF1YXRpb25zIGRlc2NyaWJpbmcgdGhlIGZv
dXIgZWRnZXMKLSAgICAgICAgICAgIC8vIG9mIHRoZSBleHBhbmRlZCBxdWFkIGluIHNjcmVlbiBz
cGFjZSBhbmQgdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGJveAotICAgICAgICAgICAgLy8gb2Yg
dGhlIGV4cGFuZGVkIHF1YWQuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gV2UgYXJl
IGRvaW5nIGEgc2ltcGxlIGRpc3RhbmNlIGNhbGN1bGF0aW9uIGhlcmUgYWNjb3JkaW5nIHRvIHRo
ZSBmb3JtdWxhOgotICAgICAgICAgICAgLy8gKEEqcC54ICsgQipwLnkgKyBDKSAvIHNxcnQoQV4y
ICsgQl4yKSA9IGRpc3RhbmNlIGZyb20gbGluZSB0byBwCi0gICAgICAgICAgICAvLyBOb3RlIHRo
YXQgQSwgQiBhbmQgQyBoYXZlIGFscmVhZHkgYmVlbiBzY2FsZWQgYnkgMSAvIHNxcnQoQV4yICsg
Ql4yKS4KLSAgICAgICAgICAgIGZsb2F0IGEwID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRn
ZXNJblNjcmVlblNwYWNlWzBdLCBwb3MpLCAwLjAsIDEuMCk7Ci0gICAgICAgICAgICBmbG9hdCBh
MSA9IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVsxXSwgcG9zKSwg
MC4wLCAxLjApOwotICAgICAgICAgICAgZmxvYXQgYTIgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1
YWRFZGdlc0luU2NyZWVuU3BhY2VbMl0sIHBvcyksIDAuMCwgMS4wKTsKLSAgICAgICAgICAgIGZs
b2F0IGEzID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzNdLCBw
b3MpLCAwLjAsIDEuMCk7Ci0gICAgICAgICAgICBmbG9hdCBhNCA9IGNsYW1wKGRvdCh1X2V4cGFu
ZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs0XSwgcG9zKSwgMC4wLCAxLjApOwotICAgICAgICAg
ICAgZmxvYXQgYTUgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2Vb
NV0sIHBvcyksIDAuMCwgMS4wKTsKLSAgICAgICAgICAgIGZsb2F0IGE2ID0gY2xhbXAoZG90KHVf
ZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzZdLCBwb3MpLCAwLjAsIDEuMCk7Ci0gICAg
ICAgICAgICBmbG9hdCBhNyA9IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5T
cGFjZVs3XSwgcG9zKSwgMC4wLCAxLjApOwotCi0gICAgICAgICAgICAvLyBOb3cgd2Ugd2FudCB0
byByZWR1Y2UgdGhlIGFscGhhIHZhbHVlIG9mIHRoZSBmcmFnbWVudCBpZiBpdCBpcyBjbG9zZSB0
byB0aGUKLSAgICAgICAgICAgIC8vIGVkZ2VzIG9mIHRoZSBleHBhbmRlZCBxdWFkIChvciByZWN0
YW5ndWxhciBib3VuZGluZyBib3ggLS0gd2hpY2ggc2VlbXMgdG8gYmUKLSAgICAgICAgICAgIC8v
IGltcG9ydGFudCBmb3IgYmFja2ZhY2luZyBxdWFkcykuIE5vdGUgdGhhdCB3ZSBhcmUgY29tYmlu
aW5nIHRoZSBjb250cmlidXRpb24KLSAgICAgICAgICAgIC8vIGZyb20gdGhlICh0b3AgfHwgYm90
dG9tKSBhbmQgKGxlZnQgfHwgcmlnaHQpIGVkZ2UgYnkgc2ltcGx5IG11bHRpcGx5aW5nLiBUaGlz
IGZvbGxvd3MKLSAgICAgICAgICAgIC8vIHRoZSBhcHByb2FjaCBkZXNjcmliZWQgYXQ6IGh0dHA6
Ly9odHRwLmRldmVsb3Blci5udmlkaWEuY29tL0dQVUdlbXMyL2dwdWdlbXMyX2NoYXB0ZXIyMi5o
dG1sLAotICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdpdGhvdXQgdXNpbmcgR2F1c3NpYW4g
d2VpZ2h0cy4KLSAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHNhbXBsZWRDb2xvciAqIHVfb3Bh
Y2l0eSAqIG1pbihtaW4oYTAsIGEyKSAqIG1pbihhMSwgYTMpLCBtaW4oYTQsIGE2KSAqIG1pbihh
NSwgYTcpKTsKLSAgICAgICAgfQotICAgICk7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVu
dFNoYWRlclNvdXJjZVJlY3RTaW1wbGUgPQotICAgIFNUUklOR0lGWSgKLSAgICAgICAgcHJlY2lz
aW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX3NvdXJj
ZTsKLSAgICAgICAgdW5pZm9ybSBsb3dwIHZlYzIgdV90ZXh0dXJlU2l6ZTsKLSAgICAgICAgdW5p
Zm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKLSAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZf
c291cmNlVGV4Q29vcmQ7Ci0gICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkRSZWN0KHNfc291cmNlLCB1X3RleHR1
cmVTaXplICogdl9zb3VyY2VUZXhDb29yZCk7Ci0gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2
ZWM0KGNvbG9yLnJnYiAqIHVfb3BhY2l0eSwgY29sb3IuYSAqIHVfb3BhY2l0eSk7Ci0gICAgICAg
IH0KLSAgICApOwotCi1zdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlU2ltcGxl
ID0KLSAgICBTVFJJTkdJRlkoCi0gICAgICAgIHVuaWZvcm0gbWF0NCB1X21hdHJpeDsKLSAgICAg
ICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfZmxpcDsKLSAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92
ZXJ0ZXg7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOwotICAg
ICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgewotICAgICAgICAgICAgdl9zb3VyY2VUZXhD
b29yZCA9IHZlYzIoYV92ZXJ0ZXgueCwgbWl4KGFfdmVydGV4LnksIDEuIC0gYV92ZXJ0ZXgueSwg
dV9mbGlwKSk7Ci0gICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogYV92ZXJ0ZXg7
Ci0gICAgICAgIH0KLSAgICApOwotCi1zdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291
cmNlU29saWRDb2xvciA9Ci0gICAgU1RSSU5HSUZZKAotICAgICAgICB1bmlmb3JtIG1hdDQgdV9t
YXRyaXg7Ci0gICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwotICAgICAgICB2b2lkIG1h
aW4odm9pZCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAq
IGFfdmVydGV4OwotICAgICAgICB9Ci0gICAgKTsKLQotCi1zdGF0aWMgY29uc3QgY2hhciogZnJh
Z21lbnRTaGFkZXJTb3VyY2VTb2xpZENvbG9yID0KLSAgICBTVFJJTkdJRlkoCi0gICAgICAgIHBy
ZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwotICAgICAgICB1bmlmb3JtIHZlYzQgdV9jb2xvcjsKLSAg
ICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsX0ZyYWdDb2xv
ciA9IHVfY29sb3I7Ci0gICAgICAgIH0KLSAgICApOwotCi1QYXNzUmVmUHRyPFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcj4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OnNv
bGlkQ29sb3JQcm9ncmFtKCkKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBj
b25zdCBTdHJpbmcmIHZlcnRleCwgY29uc3QgU3RyaW5nJiBmcmFnbWVudCkKKyAgICA6IG1fY29u
dGV4dChjb250ZXh0KQorICAgICwgbV9pZCgwKQorICAgICwgbV92ZXJ0ZXhTaGFkZXIoMCkKKyAg
ICAsIG1fZnJhZ21lbnRTaGFkZXIoMCkKIHsKLSAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2Fz
dDxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I+KGdldFNoYWRlclByb2dyYW0o
U29saWRDb2xvcikpOwotfQorICAgIG1fdmVydGV4U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVT
aGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIpOworICAgIG1fZnJhZ21lbnRT
aGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01F
TlRfU0hBREVSKTsKKyAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZShtX3ZlcnRleFNoYWRlciwg
dmVydGV4KTsKKyAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZShtX2ZyYWdtZW50U2hhZGVyLCBm
cmFnbWVudCk7CisgICAgbV9pZCA9IG1fY29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOworICAgIG1f
Y29udGV4dC0+Y29tcGlsZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5j
b21waWxlU2hhZGVyKG1fZnJhZ21lbnRTaGFkZXIpOworICAgIG1fY29udGV4dC0+YXR0YWNoU2hh
ZGVyKG1faWQsIG1fdmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlciht
X2lkLCBtX2ZyYWdtZW50U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmxpbmtQcm9ncmFtKG1faWQp
OworCisjaWZuZGVmIE5ERUJVRworICAgIGlmIChtX2NvbnRleHQtPmdldEVycm9yKCkgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQorICAgICAgICByZXR1cm47CiAKLVBhc3NSZWZQdHI8
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s+IFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjphbnRpYWxpYXNpbmdOb01hc2tQcm9ncmFtKCkKLXsKLSAgICByZXR1
cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlh
c2luZ05vTWFzaz4oZ2V0U2hhZGVyUHJvZ3JhbShBbnRpYWxpYXNpbmdOb01hc2spKTsKKyAgICBT
dHJpbmcgbG9nID0gbV9jb250ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKG1fdmVydGV4U2hhZGVyKTsK
KyAgICBwcmludGYoIlZlcnRleCBzaGFkZXIgbG9nOiAlc1xuIiwgbG9nLnV0ZjgoKS5kYXRhKCkp
OworICAgIGxvZyA9IG1fY29udGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhtX2ZyYWdtZW50U2hhZGVy
KTsKKyAgICBwcmludGYoIkZyYWdtZW50IHNoYWRlciBsb2c6ICVzXG4iLCBsb2cudXRmOCgpLmRh
dGEoKSk7CisgICAgbG9nID0gbV9jb250ZXh0LT5nZXRQcm9ncmFtSW5mb0xvZyhtX2lkKTsKKyAg
ICBwcmludGYoIlByb2dyYW0gbG9nOiAlc1xuIiwgbG9nLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlm
CiB9CiAKLVBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9ncmFtKFNoYWRlclR5cGUgc2hhZGVyVHlwZSkK
K0dDM0R1aW50IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpnZXRMb2NhdGlvbihjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIFZhcmlhYmxlVHlwZSB0eXBlKQogewotICAgIFJlZlB0cjxUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbTsKLSAgICBpZiAoc2hhZGVyVHlwZSA9PSBJ
bnZhbGlkKQotICAgICAgICByZXR1cm4gcHJvZ3JhbTsKLQotICAgIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtTWFwOjppdGVyYXRvciBpdCA9IG1fdGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1N
YXAuZmluZChzaGFkZXJUeXBlKTsKLSAgICBpZiAoaXQgIT0gbV90ZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKLQotICAgIHN3aXRj
aCAoc2hhZGVyVHlwZSkgewotICAgIGNhc2UgU2ltcGxlOgotICAgICAgICBwcm9ncmFtID0gVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OmNyZWF0ZShtX2NvbnRleHQpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFJlY3RTaW1wbGU6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OmNyZWF0ZShtX2NvbnRleHQpOworICAgIEhh
c2hNYXA8QXRvbWljU3RyaW5nLCBHQzNEdWludD46Oml0ZXJhdG9yIGl0ID0gbV92YXJpYWJsZXMu
ZmluZChuYW1lKTsKKyAgICBpZiAoaXQgIT0gbV92YXJpYWJsZXMuZW5kKCkpCisgICAgICAgIHJl
dHVybiBpdC0+c2Vjb25kOworCisgICAgR0MzRHVpbnQgbG9jYXRpb247CisgICAgc3dpdGNoKHR5
cGUpIHsKKyAgICBjYXNlIFVuaWZvcm1WYXJpYWJsZToKKyAgICAgICAgbG9jYXRpb24gPSBtX2Nv
bnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX2lkLCBuYW1lKTsKICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBBbnRpYWxpYXNpbmdOb01hc2s6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6Y3JlYXRlKG1fY29udGV4dCk7Cisg
ICAgY2FzZSBBdHRyaWJWYXJpYWJsZToKKyAgICAgICAgbG9jYXRpb24gPSBtX2NvbnRleHQtPmdl
dEF0dHJpYkxvY2F0aW9uKG1faWQsIG5hbWUpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIE9w
YWNpdHlBbmRNYXNrOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1PcGFjaXR5QW5kTWFzazo6Y3JlYXRlKG1fY29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgUmVjdE9wYWNpdHlBbmRNYXNrOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OmNyZWF0ZShtX2NvbnRleHQpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFNvbGlkQ29sb3I6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OmNyZWF0ZShtX2NvbnRleHQpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEludmFsaWQ6CisgICAgZGVmYXVsdDoKICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBtX3RleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtTWFwLmFkZChzaGFkZXJUeXBlLCBwcm9ncmFtKTsKLSAgICByZXR1
cm4gcHJvZ3JhbTsKLX0KLQotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBjaGFyKiB2
ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKQotICAg
IDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX2lkKDApCi0gICAgLCBtX3ZlcnRleEF0dHJp
YigwKQotICAgICwgbV92ZXJ0ZXhTaGFkZXIoMCkKLSAgICAsIG1fZnJhZ21lbnRTaGFkZXIoMCkK
LSAgICAsIG1fbWF0cml4TG9jYXRpb24oLTEpCi0gICAgLCBtX2ZsaXBMb2NhdGlvbigtMSkKLSAg
ICAsIG1fdGV4dHVyZVNpemVMb2NhdGlvbigtMSkKLSAgICAsIG1fc291cmNlVGV4dHVyZUxvY2F0
aW9uKC0xKQotICAgICwgbV9vcGFjaXR5TG9jYXRpb24oLTEpCi0gICAgLCBtX21hc2tUZXh0dXJl
TG9jYXRpb24oLTEpCi0gICAgLCBtX3ZlcnRleFNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXJTb3Vy
Y2UpCi0gICAgLCBtX2ZyYWdtZW50U2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyU291cmNlKQot
ewotfQogCi12b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppbml0aWFsaXplUHJvZ3Jh
bSgpCi17Ci0gICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlUHJvZ3JhbSA9IHZlcnRl
eFNoYWRlclNvdXJjZSgpOwotICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlUHJv
Z3JhbSA9IGZyYWdtZW50U2hhZGVyU291cmNlKCk7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCB2ZXJ0
ZXhTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6VkVS
VEVYX1NIQURFUik7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBmcmFnbWVudFNoYWRlciA9IG1fY29u
dGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpOwot
ICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgdmVydGV4U2hhZGVyU291
cmNlUHJvZ3JhbSk7Ci0gICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIs
IGZyYWdtZW50U2hhZGVyU291cmNlUHJvZ3JhbSk7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtSUQgPSBtX2NvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsKLSAgICBtX2NvbnRleHQtPmNvbXBp
bGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIoZnJh
Z21lbnRTaGFkZXIpOwotCi0gICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2
ZXJ0ZXhTaGFkZXIpOwotICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgZnJh
Z21lbnRTaGFkZXIpOwotICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0ocHJvZ3JhbUlEKTsKLQot
ICAgIG1fdmVydGV4QXR0cmliID0gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFt
SUQsICJhX3ZlcnRleCIpOwotCi0gICAgbV9pZCA9IHByb2dyYW1JRDsKLSAgICBtX3ZlcnRleFNo
YWRlciA9IHZlcnRleFNoYWRlcjsKLSAgICBtX2ZyYWdtZW50U2hhZGVyID0gZnJhZ21lbnRTaGFk
ZXI7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmdldFVuaWZvcm1Mb2Nh
dGlvbihHQzNEaW50ICZ2YXJpYWJsZSwgY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICB2YXJpYWJs
ZSA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1faWQsIG5hbWUpOwotICAgIEFTU0VS
VCh2YXJpYWJsZSA+PSAwKTsKKyAgICBtX3ZhcmlhYmxlcy5hZGQobmFtZSwgbG9jYXRpb24pOwor
ICAgIHJldHVybiBsb2NhdGlvbjsKIH0KIAogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06On5U
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpCkBAIC0yODYsMTIwICs5NiwxOTEgQEAgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW06On5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpCiAgICAg
bV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKHByb2dyYW1JRCk7CiB9CiAKLVRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZShHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
KGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VT
aW1wbGUpCi17Ci0gICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRp
b24obV9mbGlwTG9jYXRpb24sICJ1X2ZsaXAiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9t
YXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291
cmNlVGV4dHVyZUxvY2F0aW9uLCAic19zb3VyY2UiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24o
bV9vcGFjaXR5TG9jYXRpb24sICJ1X29wYWNpdHkiKTsKLX0KK3N0cnVjdCBTaGFkZXJTcGVjIHsK
KyAgICBTdHJpbmcgdmVydGV4U2hhZGVyOworICAgIFN0cmluZyBmcmFnbWVudFNoYWRlcjsKKyAg
ICBTaGFkZXJTcGVjKGNvbnN0IGNoYXIqIHZlcnRleCA9IDAsIGNvbnN0IGNoYXIqIGZyYWdtZW50
ID0gMCkKKyAgICAgICAgOiB2ZXJ0ZXhTaGFkZXIodmVydGV4ID8gU3RyaW5nKEFTQ0lJTGl0ZXJh
bCh2ZXJ0ZXgpKSA6IFN0cmluZygpKQorICAgICAgICAsIGZyYWdtZW50U2hhZGVyKGZyYWdtZW50
ID8gU3RyaW5nKEFTQ0lJTGl0ZXJhbChmcmFnbWVudCkpIDogU3RyaW5nKCkpCisgICAgeworICAg
IH0KK307CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQot
ICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291
cmNlU29saWRDb2xvciwgZnJhZ21lbnRTaGFkZXJTb3VyY2VTb2xpZENvbG9yKQorc3RhdGljIHZv
aWQgZ2V0U2hhZGVyU3BlYyhUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2hhZGVyS2V5IGtl
eSwgU3RyaW5nJiB2ZXJ0ZXhTb3VyY2UsIFN0cmluZyYgZnJhZ21lbnRTb3VyY2UpCiB7Ci0gICAg
aW5pdGlhbGl6ZVByb2dyYW0oKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2Nh
dGlvbiwgInVfbWF0cml4Iik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fY29sb3JMb2NhdGlv
biwgInVfY29sb3IiKTsKLX0KKyAgICBzdGF0aWMgVmVjdG9yPFNoYWRlclNwZWM+IHNwZWNzID0g
VmVjdG9yPFNoYWRlclNwZWM+KCk7CisjZGVmaW5lIFNUUklOR0lGWSguLi4pICNfX1ZBX0FSR1Nf
XworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudE9wYWNpdHlBbmRNYXNrID0KKyAgICAg
ICAgU1RSSU5HSUZZKAorICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisgICAg
ICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBsZXI7CisgICAgICAgICAgICB1bmlmb3Jt
IHNhbXBsZXIyRCBzX21hc2s7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFj
aXR5OworICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7Cisg
ICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9tYXNrVGV4Q29vcmQ7CisgICAgICAgICAg
ICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsb3dwIHZl
YzQgY29sb3IgPSB0ZXh0dXJlMkQoc19zYW1wbGVyLCB2X3NvdXJjZVRleENvb3JkKTsKKyAgICAg
ICAgICAgICAgICBsb3dwIHZlYzQgbWFza0NvbG9yID0gdGV4dHVyZTJEKHNfbWFzaywgdl9tYXNr
VGV4Q29vcmQpOworICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgZnJhZ21lbnRBbHBoYSA9IHVf
b3BhY2l0eSAqIG1hc2tDb2xvci5hOworICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZl
YzQoY29sb3IucmdiICogZnJhZ21lbnRBbHBoYSwgY29sb3IuYSAqIGZyYWdtZW50QWxwaGEpOwor
ICAgICAgICAgICAgfQorICAgICAgICApOwogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJl
Y3RTaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZShHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRl
eHQsIHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0U2lt
cGxlKQotewotICAgIGluaXRpYWxpemVQcm9ncmFtKCk7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9u
KG1fbWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbiht
X2ZsaXBMb2NhdGlvbiwgInVfZmxpcCIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX3RleHR1
cmVTaXplTG9jYXRpb24sICJ1X3RleHR1cmVTaXplIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9u
KG1fc291cmNlVGV4dHVyZUxvY2F0aW9uLCAic19zb3VyY2UiKTsKLSAgICBnZXRVbmlmb3JtTG9j
YXRpb24obV9vcGFjaXR5TG9jYXRpb24sICJ1X29wYWNpdHkiKTsKLX0KKyAgICBzdGF0aWMgY29u
c3QgY2hhciogZnJhZ21lbnRSZWN0T3BhY2l0eUFuZE1hc2sgPQorICAgICAgICBTVFJJTkdJRlko
CisgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKKyAgICAgICAgICAgIHVuaWZv
cm0gc2FtcGxlcjJEUmVjdCBzX3NhbXBsZXI7CisgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIy
RFJlY3Qgc19tYXNrOworICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsK
KyAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOworICAgICAg
ICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfbWFza1RleENvb3JkOworICAgICAgICAgICAgdm9p
ZCBtYWluKHZvaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbG93cCB2ZWM0IGNv
bG9yID0gdGV4dHVyZTJEUmVjdChzX3NhbXBsZXIsIHZfc291cmNlVGV4Q29vcmQpOworICAgICAg
ICAgICAgICAgIGxvd3AgdmVjNCBtYXNrQ29sb3IgPSB0ZXh0dXJlMkRSZWN0KHNfbWFzaywgdl9t
YXNrVGV4Q29vcmQpOworICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgZnJhZ21lbnRBbHBoYSA9
IHVfb3BhY2l0eSAqIG1hc2tDb2xvci5hOworICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9
IHZlYzQoY29sb3IucmdiICogZnJhZ21lbnRBbHBoYSwgY29sb3IuYSAqIGZyYWdtZW50QWxwaGEp
OworICAgICAgICAgICAgfQorICAgICAgICApOwogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bU9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNr
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50
U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2spCi17Ci0gICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsK
LSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7Ci0g
ICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fZmxpcExvY2F0aW9uLCAidV9mbGlwIik7Ci0gICAgZ2V0
VW5pZm9ybUxvY2F0aW9uKG1fc291cmNlVGV4dHVyZUxvY2F0aW9uLCAic19zb3VyY2UiKTsKLSAg
ICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXNrVGV4dHVyZUxvY2F0aW9uLCAic19tYXNrIik7Ci0g
ICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5Iik7Ci19
CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleE9wYWNpdHlBbmRNYXNrID0KKyAgICAgICAg
U1RSSU5HSUZZKAorICAgICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OworICAgICAgICAg
ICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfZmxpcDsKKyAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0
IGFfdmVydGV4OworICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29v
cmQ7CisgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9tYXNrVGV4Q29vcmQ7CisgICAg
ICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2
X3NvdXJjZVRleENvb3JkID0gdmVjMihhX3ZlcnRleC54LCBtaXgoYV92ZXJ0ZXgueSwgMS4gLSBh
X3ZlcnRleC55LCB1X2ZsaXApKTsKKyAgICAgICAgICAgICAgICB2X21hc2tUZXhDb29yZCA9IHZl
YzIoYV92ZXJ0ZXgpOworICAgICAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiBh
X3ZlcnRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKIAotVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVj
dE9wYWNpdHlBbmRNYXNrKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIDogVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlT3BhY2l0eUFu
ZE1hc2ssIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdE9wYWNpdHlBbmRNYXNrKQotewotICAgIGlu
aXRpYWxpemVQcm9ncmFtKCk7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRp
b24sICJ1X21hdHJpeCIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX2ZsaXBMb2NhdGlvbiwg
InVfZmxpcCIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX3NvdXJjZVRleHR1cmVMb2NhdGlv
biwgInNfc291cmNlIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWFza1RleHR1cmVMb2Nh
dGlvbiwgInNfbWFzayIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNpdHlMb2NhdGlv
biwgInVfb3BhY2l0eSIpOwotfQorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNpbXBs
ZSA9CisgICAgICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZs
b2F0OworICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zYW1wbGVyOworICAgICAgICAg
ICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKKyAgICAgICAgICAgIHZhcnlpbmcgaGln
aHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOworICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJE
KHNfc2FtcGxlciwgdl9zb3VyY2VUZXhDb29yZCk7CisgICAgICAgICAgICAgICAgZ2xfRnJhZ0Nv
bG9yID0gdmVjNChjb2xvci5yZ2IgKiB1X29wYWNpdHksIGNvbG9yLmEgKiB1X29wYWNpdHkpOwor
ICAgICAgICAgICAgfQorICAgICAgICApOwogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFu
dGlhbGlhc2luZ05vTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdO
b01hc2soR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi0gICAgOiBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUsIGZyYWdtZW50U2hh
ZGVyU291cmNlQW50aWFsaWFzaW5nTm9NYXNrKQotewotICAgIGluaXRpYWxpemVQcm9ncmFtKCk7
Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwot
ICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX3NvdXJjZVRleHR1cmVMb2NhdGlvbiwgInNfc291cmNl
Iik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5
Iik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNw
YWNlTG9jYXRpb24sICJ1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZSIpOwotICAgIGdl
dFVuaWZvcm1Mb2NhdGlvbihtX2ZsaXBMb2NhdGlvbiwgInVfZmxpcCIpOwotfQorICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBmcmFnbWVudEFudGlhbGlhc2luZ05vTWFzayA9CisgICAgICAgIFNUUklO
R0lGWSgKKyAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OworICAgICAgICAgICAg
dW5pZm9ybSBzYW1wbGVyMkQgc19zYW1wbGVyOworICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2
ZWMyIHZfc291cmNlVGV4Q29vcmQ7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9v
cGFjaXR5OworICAgICAgICAgICAgdW5pZm9ybSB2ZWMzIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNj
cmVlblNwYWNlWzhdOworICAgICAgICAgICAgdm9pZCBtYWluKCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICB2ZWM0IHNhbXBsZWRDb2xvciA9IHRleHR1cmUyRChzX3NhbXBsZXIsIGNs
YW1wKHZfc291cmNlVGV4Q29vcmQsIDAuMCwgMS4wKSk7CisgICAgICAgICAgICAgICAgdmVjMyBw
b3MgPSB2ZWMzKGdsX0ZyYWdDb29yZC54eSwgMSk7CisKKyAgICAgICAgICAgICAgICAvLyBUaGUg
ZGF0YSBwYXNzZWQgaW4gdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2UgaXMgbWVyZWx5
IHRoZQorICAgICAgICAgICAgICAgIC8vIHByZS1zY2FsZWQgY29lZmZlY2llbnRzIG9mIHRoZSBs
aW5lIGVxdWF0aW9ucyBkZXNjcmliaW5nIHRoZSBmb3VyIGVkZ2VzCisgICAgICAgICAgICAgICAg
Ly8gb2YgdGhlIGV4cGFuZGVkIHF1YWQgaW4gc2NyZWVuIHNwYWNlIGFuZCB0aGUgcmVjdGFuZ3Vs
YXIgYm91bmRpbmcgYm94CisgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGV4cGFuZGVkIHF1YWQu
CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBXZSBhcmUgZG9pbmcgYSBz
aW1wbGUgZGlzdGFuY2UgY2FsY3VsYXRpb24gaGVyZSBhY2NvcmRpbmcgdG8gdGhlIGZvcm11bGE6
CisgICAgICAgICAgICAgICAgLy8gKEEqcC54ICsgQipwLnkgKyBDKSAvIHNxcnQoQV4yICsgQl4y
KSA9IGRpc3RhbmNlIGZyb20gbGluZSB0byBwCisgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0
IEEsIEIgYW5kIEMgaGF2ZSBhbHJlYWR5IGJlZW4gc2NhbGVkIGJ5IDEgLyBzcXJ0KEFeMiArIEJe
MikuCisgICAgICAgICAgICAgICAgZmxvYXQgYTAgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRF
ZGdlc0luU2NyZWVuU3BhY2VbMF0sIHBvcyksIDAuMCwgMS4wKTsKKyAgICAgICAgICAgICAgICBm
bG9hdCBhMSA9IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVsxXSwg
cG9zKSwgMC4wLCAxLjApOworICAgICAgICAgICAgICAgIGZsb2F0IGEyID0gY2xhbXAoZG90KHVf
ZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzJdLCBwb3MpLCAwLjAsIDEuMCk7CisgICAg
ICAgICAgICAgICAgZmxvYXQgYTMgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2Ny
ZWVuU3BhY2VbM10sIHBvcyksIDAuMCwgMS4wKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBhNCA9
IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs0XSwgcG9zKSwgMC4w
LCAxLjApOworICAgICAgICAgICAgICAgIGZsb2F0IGE1ID0gY2xhbXAoZG90KHVfZXhwYW5kZWRR
dWFkRWRnZXNJblNjcmVlblNwYWNlWzVdLCBwb3MpLCAwLjAsIDEuMCk7CisgICAgICAgICAgICAg
ICAgZmxvYXQgYTYgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2Vb
Nl0sIHBvcyksIDAuMCwgMS4wKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBhNyA9IGNsYW1wKGRv
dCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs3XSwgcG9zKSwgMC4wLCAxLjApOwor
CisgICAgICAgICAgICAgICAgLy8gTm93IHdlIHdhbnQgdG8gcmVkdWNlIHRoZSBhbHBoYSB2YWx1
ZSBvZiB0aGUgZnJhZ21lbnQgaWYgaXQgaXMgY2xvc2UgdG8gdGhlCisgICAgICAgICAgICAgICAg
Ly8gZWRnZXMgb2YgdGhlIGV4cGFuZGVkIHF1YWQgKG9yIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGJv
eCAtLSB3aGljaCBzZWVtcyB0byBiZQorICAgICAgICAgICAgICAgIC8vIGltcG9ydGFudCBmb3Ig
YmFja2ZhY2luZyBxdWFkcykuIE5vdGUgdGhhdCB3ZSBhcmUgY29tYmluaW5nIHRoZSBjb250cmli
dXRpb24KKyAgICAgICAgICAgICAgICAvLyBmcm9tIHRoZSAodG9wIHx8IGJvdHRvbSkgYW5kIChs
ZWZ0IHx8IHJpZ2h0KSBlZGdlIGJ5IHNpbXBseSBtdWx0aXBseWluZy4gVGhpcyBmb2xsb3dzCisg
ICAgICAgICAgICAgICAgLy8gdGhlIGFwcHJvYWNoIGRlc2NyaWJlZCBhdDogaHR0cDovL2h0dHAu
ZGV2ZWxvcGVyLm52aWRpYS5jb20vR1BVR2VtczIvZ3B1Z2VtczJfY2hhcHRlcjIyLmh0bWwsCisg
ICAgICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdpdGhvdXQgdXNpbmcgR2F1c3NpYW4gd2Vp
Z2h0cy4KKyAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSBzYW1wbGVkQ29sb3IgKiB1X29w
YWNpdHkgKiBtaW4obWluKGEwLCBhMikgKiBtaW4oYTEsIGEzKSwgbWluKGE0LCBhNikgKiBtaW4o
YTUsIGE3KSk7CisgICAgICAgICAgICB9CisgICAgICAgICk7CiAKLVRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcihHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCkKLSAgICA6IG1fY29udGV4dChjb250ZXh0KQotewotfQorICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBmcmFnbWVudFJlY3RTaW1wbGUgPQorICAgICAgICBTVFJJTkdJRlkoCisgICAgICAg
ICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKKyAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxl
cjJEUmVjdCBzX3NhbXBsZXI7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVjMiBzX3NhbXBs
ZXJTaXplOworICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKKyAgICAg
ICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOworICAgICAgICAgICAg
dm9pZCBtYWluKHZvaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbG93cCB2ZWM0
IGNvbG9yID0gdGV4dHVyZTJEUmVjdChzX3NhbXBsZXIsIHNfc2FtcGxlclNpemUgKiB2X3NvdXJj
ZVRleENvb3JkKTsKKyAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJn
YiAqIHVfb3BhY2l0eSwgY29sb3IuYSAqIHVfb3BhY2l0eSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICk7CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjp+VGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIoKQotewotfQorICAgIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaW1wbGUgPQor
ICAgICAgICBTVFJJTkdJRlkoCisgICAgICAgICAgICB1bmlmb3JtIG1hdDQgdV9tYXRyaXg7Cisg
ICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9mbGlwOworICAgICAgICAgICAgYXR0cmli
dXRlIHZlYzQgYV92ZXJ0ZXg7CisgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3Vy
Y2VUZXhDb29yZDsKKyAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHZfc291cmNlVGV4Q29vcmQgPSB2ZWMyKGFfdmVydGV4LngsIG1peChh
X3ZlcnRleC55LCAxLiAtIGFfdmVydGV4LnksIHVfZmxpcCkpOworICAgICAgICAgICAgICAgIGds
X1Bvc2l0aW9uID0gdV9tYXRyaXggKiBhX3ZlcnRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
KTsKIAotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBzdGF0aWMgY29uc3QgY2hhciogdmVy
dGV4U29saWRDb2xvciA9CisgICAgICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAgIHVuaWZvcm0g
bWF0NCB1X21hdHJpeDsKKyAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OworICAg
ICAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Z2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIGFfdmVydGV4OworICAgICAgICAgICAgfQorICAgICAg
ICApOwogCi0vLyBDcmVhdGUgYSBub3JtYWwgZGlzdHJpYnV0aW9uIG9mIDIxIHZhbHVlcyBiZXR3
ZWVuIC0yIGFuZCAyLgotI2RlZmluZSBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCAxMQotI2Rl
ZmluZSBHQVVTU0lBTl9LRVJORUxfU1RFUCAwLjIKIAotU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp+
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKCkKLXsKLSAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlciht
X2lkLCBtX3ZlcnRleFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIobV92ZXJ0
ZXhTaGFkZXIpOwotICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKG1faWQsIG1fZnJhZ21lbnRT
aGFkZXIpOwotICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKG1fZnJhZ21lbnRTaGFkZXIpOwot
ICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShtX2lkKTsKLX0KKyAgICBzdGF0aWMgY29uc3Qg
Y2hhciogZnJhZ21lbnRTb2xpZENvbG9yID0KKyAgICAgICAgU1RSSU5HSUZZKAorICAgICAgICAg
ICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisgICAgICAgICAgICB1bmlmb3JtIHZlYzQgdV9j
b2xvcjsKKyAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHVfY29sb3I7CisgICAgICAgICAgICB9CisgICAgICAg
ICk7CiAKLVN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0LCBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlw
ZSwgdW5zaWduZWQgcGFzcykKLSAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAgICwgbV9pZCgw
KQotewotICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSA9Ci0gICAgICAgICAgICBT
VFJJTkdJRlkoCi0gICAgICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7Ci0gICAg
ICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV90ZXhDb29yZDsKLSAgICAgICAgICAgICAgICB2
YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKLSAgICAgICAgICAgICAgICB2b2lkIG1haW4o
dm9pZCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZfdGV4Q29vcmQg
PSB2ZWMyKGFfdGV4Q29vcmQpOwotICAgICAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IGFf
dmVydGV4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICk7Ci0KLSNkZWZpbmUgU1RB
TkRBUkRfRklMVEVSKC4uLikgXAotICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4i
XAotICAgICAgICAidmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7XG4iXAotICAgICAgICAi
dW5pZm9ybSBoaWdocCBmbG9hdCB1X2Ftb3VudDtcbiJcCi0gICAgICAgICJ1bmlmb3JtIHNhbXBs
ZXIyRCB1X3RleHR1cmU7XG4iXAotICAgICAgICAjX19WQV9BUkdTX18gXAotICAgICAgICAidm9p
ZCBtYWluKHZvaWQpXG4geyBnbF9GcmFnQ29sb3IgPSBzaGFkZSh0ZXh0dXJlMkQodV90ZXh0dXJl
LCB2X3RleENvb3JkKSk7IH0iCi0KLSAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJj
ZSA9IDA7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdS
QVlTQ0FMRToKLSAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVEFOREFSRF9GSUxURVIo
CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleEZpbHRlciA9CisgICAgICAgIFNUUklOR0lG
WSgKKyAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OworICAgICAgICAgICAgYXR0
cmlidXRlIHZlYzQgYV90ZXhDb29yZDsKKyAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2
X3RleENvb3JkOworICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgdl90ZXhDb29yZCA9IHZlYzIoYV90ZXhDb29yZCk7CisgICAgICAgICAg
ICAgICAgZ2xfUG9zaXRpb24gPSBhX3ZlcnRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsK
KworICAgICNkZWZpbmUgU1RBTkRBUkRfRklMVEVSKC4uLikgXAorICAgICAgICAgICAgInByZWNp
c2lvbiBtZWRpdW1wIGZsb2F0O1xuIlwKKyAgICAgICAgICAgICJ2YXJ5aW5nIGhpZ2hwIHZlYzIg
dl90ZXhDb29yZDtcbiJcCisgICAgICAgICAgICAidW5pZm9ybSBoaWdocCBmbG9hdCB1X2Ftb3Vu
dDtcbiJcCisgICAgICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgc19zYW1wbGVyO1xuIlwKKyAg
ICAgICAgICAgICNfX1ZBX0FSR1NfXyBcCisgICAgICAgICAgICAidm9pZCBtYWluKHZvaWQpXG4g
eyBnbF9GcmFnQ29sb3IgPSBzaGFkZSh0ZXh0dXJlMkQoc19zYW1wbGVyLCB2X3RleENvb3JkKSk7
IH0iCisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRHcmF5c2NhbGVGaWx0ZXIgPQor
ICAgICAgICBTVEFOREFSRF9GSUxURVIoCiAgICAgICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93
cCB2ZWM0IGNvbG9yKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQg
YW1vdW50ID0gMS4wIC0gdV9hbW91bnQ7CkBAIC00MDksOSArMjkwLDkgQEAgU3RhbmRhcmRGaWx0
ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQsIEZpbHRlck8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5hKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OlNFUElBOgotICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJ
TFRFUigKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNlcGlhRmlsdGVyID0KKyAg
ICAgICAgU1RBTkRBUkRfRklMVEVSKAogICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3Ag
dmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBsb3dwIGZsb2F0IGFt
b3VudCA9IDEuMCAtIHVfYW1vdW50OwpAQCAtNDIxLDkgKzMwMiw5IEBAIFN0YW5kYXJkRmlsdGVy
UHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBGaWx0ZXJPCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IuYSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpTQVRVUkFURToKLSAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVEFOREFSRF9G
SUxURVIoCisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTYXR1cmF0ZUZpbHRlciA9
CisgICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKICAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShs
b3dwIHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZl
YzQoKDAuMjEzICsgMC43ODcgKiB1X2Ftb3VudCkgKiBjb2xvci5yICsgKDAuNzE1IC0gMC43MTUg
KiB1X2Ftb3VudCkgKiBjb2xvci5nICsgKDAuMDcyIC0gMC4wNzIgKiB1X2Ftb3VudCkgKiBjb2xv
ci5iLApAQCAtNDMyLDkgKzMxMyw5IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRG
aWx0ZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBGaWx0ZXJPCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29sb3IuYSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgot
ICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKKworICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudEh1ZVJvdGF0ZUZpbHRlciA9CisgICAgICAgIFNUQU5E
QVJEX0ZJTFRFUigKICAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3Ip
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaGlnaHAgZmxvYXQgcGkgPSAzLjE0MTU5
MjY1MzU4OTc5MzIzODQ2OwpAQCAtNDQ2LDU4ICszMjcsNjIgQEAgU3RhbmRhcmRGaWx0ZXJQcm9n
cmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEZp
bHRlck8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5hKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OklOVkVSVDoKLSAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVEFOREFSRF9GSUxURVIo
CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRJbnZlcnRGaWx0ZXIgPQorICAgICAg
ICBTVEFOREFSRF9GSUxURVIoCiAgICAgICAgICAgICBsb3dwIGZsb2F0IGludmVydChsb3dwIGZs
b2F0IG4pIHsgcmV0dXJuICgxLjAgLSBuKSAqIHVfYW1vdW50ICsgbiAqICgxLjAgLSB1X2Ftb3Vu
dCk7IH0KICAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoaW52ZXJ0KGNvbG9yLnIpLCBp
bnZlcnQoY29sb3IuZyksIGludmVydChjb2xvci5iKSwgY29sb3IuYSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpC
UklHSFRORVNTOgotICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRF
UigKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudEJyaWdodG5lc3NGaWx0ZXIgPQor
ICAgICAgICBTVEFOREFSRF9GSUxURVIoCiAgICAgICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93
cCB2ZWM0IGNvbG9yKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0
KGNvbG9yLnJnYiAqICgxLjAgKyB1X2Ftb3VudCksIGNvbG9yLmEpOwogICAgICAgICAgICAgfQog
ICAgICAgICApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09O
VFJBU1Q6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAor
CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50Q29udHJhc3RGaWx0ZXIgPQorICAgICAg
ICBTVEFOREFSRF9GSUxURVIoCiAgICAgICAgICAgICBsb3dwIGZsb2F0IGNvbnRyYXN0KGxvd3Ag
ZmxvYXQgbikgeyByZXR1cm4gKG4gLSAwLjUpICogdV9hbW91bnQgKyAwLjU7IH0KICAgICAgICAg
ICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29udHJhc3QoY29sb3IuciksIGNvbnRyYXN0KGNvbG9y
LmcpLCBjb250cmFzdChjb2xvci5iKSwgY29sb3IuYSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgot
ICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKKworICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudE9wYWNpdHlGaWx0ZXIgPQorICAgICAgICBTVEFOREFS
RF9GSUxURVIoCiAgICAgICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0KGNvbG9yLnIsIGNvbG9y
LmcsIGNvbG9yLmIsIGNvbG9yLmEgKiB1X2Ftb3VudCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgotICAg
ICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUUklOR0lGWSgKKworI2RlZmluZSBCTFVSX0NP
TlNUQU5UUyAiI2RlZmluZSBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCAxMVxuI2RlZmluZSBH
QVVTU0lBTl9LRVJORUxfU1RFUCAwLjJcbiIKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFn
bWVudEJsdXJGaWx0ZXIgPQorICAgICAgICBCTFVSX0NPTlNUQU5UUworICAgICAgICBTVFJJTkdJ
RlkoCisgICAgICAgICAgICAvLyBDcmVhdGUgYSBub3JtYWwgZGlzdHJpYnV0aW9uIG9mIDIxIHZh
bHVlcyBiZXR3ZWVuIC0yIGFuZCAyLgogICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxv
YXQ7CiAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKICAgICAgICAg
ICAgIHVuaWZvcm0gbG93cCB2ZWMyIHVfYmx1clJhZGl1czsKLSAgICAgICAgICAgIHVuaWZvcm0g
c2FtcGxlcjJEIHVfdGV4dHVyZTsKKyAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc2Ft
cGxlcjsKICAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9nYXVzc2lhbktlcm5lbFtHQVVTU0lB
Tl9LRVJORUxfSEFMRl9XSURUSF07CiAKICAgICAgICAgICAgIGxvd3AgdmVjNCBzYW1wbGVDb2xv
cihmbG9hdCByYWRpdXMpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdmVjMiBjb29y
ZCA9IHZfdGV4Q29vcmQgKyByYWRpdXMgKiB1X2JsdXJSYWRpdXM7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHRleHR1cmUyRCh1X3RleHR1cmUsIGNvb3JkKSAqIGZsb2F0KGNvb3JkLnggPiAwLiAm
JiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRleHR1cmUyRChzX3NhbXBsZXIsIGNvb3JkKSAqIGZsb2F0KGNvb3Jk
LnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHZlYzQgYmx1cigpCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgdmVjNCB0b3RhbCA9IHNhbXBsZUNvbG9yKDApICogdV9nYXVzc2lh
bktlcm5lbFswXTsKKyAgICAgICAgICAgICAgICB2ZWM0IHRvdGFsID0gc2FtcGxlQ29sb3IoMC4p
ICogdV9nYXVzc2lhbktlcm5lbFswXTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsg
aSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKyspIHsKICAgICAgICAgICAgICAgICAg
ICAgdG90YWwgKz0gc2FtcGxlQ29sb3IoZmxvYXQoaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkg
KiB1X2dhdXNzaWFuS2VybmVsW2ldOwogICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1w
bGVDb2xvcihmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lh
bktlcm5lbFtpXTsKQEAgLTUxMSwyODIgKzM5NiwxMzAgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFt
OjpTdGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEZpbHRl
ck8KICAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSBibHVyKCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpE
Uk9QX1NIQURPVzoKLSAgICAgICAgc3dpdGNoIChwYXNzKSB7Ci0gICAgICAgIGNhc2UgMDogewot
ICAgICAgICAgICAgLy8gRmlyc3QgcGFzczogaG9yaXpvbnRhbCBhbHBoYSBibHVyLgotICAgICAg
ICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVFJJTkdJRlkoCi0gICAgICAgICAgICAgICAg
cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2
ZWMyIHZfdGV4Q29vcmQ7Ci0gICAgICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfc2hh
ZG93Qmx1clJhZGl1czsKLSAgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVjMiB1X3NoYWRv
d09mZnNldDsKLSAgICAgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7Ci0g
ICAgICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFOX0tF
Uk5FTF9IQUxGX1dJRFRIXTsKLQotICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgc2FtcGxlQWxw
aGEoZmxvYXQgcmFkaXVzKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
dmVjMiBjb29yZCA9IHZfdGV4Q29vcmQgLSB1X3NoYWRvd09mZnNldCArIHZlYzIocmFkaXVzICog
dV9zaGFkb3dCbHVyUmFkaXVzLCAwLik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0
dXJlMkQodV90ZXh0dXJlLCBjb29yZCkuYSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBjb29yZC55
ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7Ci0gICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgbG93cCBmbG9hdCBzaGFkb3dCbHVySG9yaXpvbnRhbCgpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBmbG9hdCB0b3RhbCA9IHNhbXBs
ZUFscGhhKDApICogdV9nYXVzc2lhbktlcm5lbFswXTsKLSAgICAgICAgICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVBbHBoYShmbG9hdChpKSAqIEdBVVNT
SUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB0b3RhbCArPSBzYW1wbGVBbHBoYShmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5fS0VS
TkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbDsKLSAgICAgICAgICAgICAgICB9Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZG93RmlsdGVyMSA9CisgICAgICAgIEJM
VVJfQ09OU1RBTlRTCisgICAgICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAgIHByZWNpc2lvbiBt
ZWRpdW1wIGZsb2F0OworICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7
CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9ibHVyUmFkaXVzOworICAgICAgICAg
ICAgdW5pZm9ybSBsb3dwIHZlYzIgdV9zaGFkb3dPZmZzZXQ7CisgICAgICAgICAgICB1bmlmb3Jt
IHNhbXBsZXIyRCBzX3NhbXBsZXI7CisgICAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZ2F1c3Np
YW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdOwogCi0gICAgICAgICAgICAgICAg
dm9pZCBtYWluKHZvaWQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBn
bF9GcmFnQ29sb3IgPSB2ZWM0KDEuLCAxLiwgMS4sIDEuKSAqIHNoYWRvd0JsdXJIb3Jpem9udGFs
KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgbG93cCBmbG9hdCBzYW1wbGVBbHBoYShmbG9hdCByYWRpdXMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgdmVjMiBjb29yZCA9IHZfdGV4Q29vcmQgLSB1X3No
YWRvd09mZnNldCArIHZlYzIocmFkaXVzICogdV9ibHVyUmFkaXVzLCAwLik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRleHR1cmUyRChzX3NhbXBsZXIsIGNvb3JkKS5hICogZmxvYXQoY29vcmQu
eCA+IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxOiB7Ci0gICAgICAgICAgICAvLyBTZWNvbmQg
cGFzczogdmVydGljYWwgYWxwaGEgYmx1ciBhbmQgY29tcG9zaXRlIHdpdGggb3JpZ2luLgotICAg
ICAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVFJJTkdJRlkoCi0gICAgICAgICAgICAg
ICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgICAgICAgICAgdmFyeWluZyBoaWdo
cCB2ZWMyIHZfdGV4Q29vcmQ7Ci0gICAgICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVf
c2hhZG93Qmx1clJhZGl1czsKLSAgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVjNCB1X3No
YWRvd0NvbG9yOwotICAgICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTsK
LSAgICAgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1X2NvbnRlbnRUZXh0dXJlOwotICAg
ICAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9nYXVzc2lhbktlcm5lbFtHQVVTU0lBTl9LRVJO
RUxfSEFMRl9XSURUSF07Ci0KLSAgICAgICAgICAgICAgICBsb3dwIGZsb2F0IHNhbXBsZUFscGhh
KGZsb2F0IHIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2ZWMyIGNv
b3JkID0gdl90ZXhDb29yZCArIHZlYzIoMC4sIHIgKiB1X3NoYWRvd0JsdXJSYWRpdXMpOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHVfdGV4dHVyZSwgY29vcmQpLmEgKiBm
bG9hdChjb29yZC54ID4gMC4gJiYgY29vcmQueSA+IDAuICYmIGNvb3JkLnggPCAxLiAmJiBjb29y
ZC55IDwgMS4pOwotICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGxvd3AgZmxv
YXQgc2hhZG93Qmx1clZlcnRpY2FsKCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGZsb2F0IHRvdGFsID0gc2FtcGxlQWxwaGEoMCkgKiB1X2dhdXNzaWFuS2VybmVsWzBd
OwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5F
TF9IQUxGX1dJRFRIOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNh
bXBsZUFscGhhKGZsb2F0KGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktl
cm5lbFtpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhhKGZs
b2F0KC0xICogaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ld
OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRv
dGFsOworICAgICAgICAgICAgbG93cCBmbG9hdCBzaGFkb3dCbHVySG9yaXpvbnRhbCgpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZmxvYXQgdG90YWwgPSBzYW1wbGVBbHBoYSgwLikg
KiB1X2dhdXNzaWFuS2VybmVsWzBdOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBp
IDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7IGkrKykgeworICAgICAgICAgICAgICAgICAg
ICB0b3RhbCArPSBzYW1wbGVBbHBoYShmbG9hdChpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAq
IHVfZ2F1c3NpYW5LZXJuZWxbaV07CisgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBs
ZUFscGhhKGZsb2F0KC0xICogaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFu
S2VybmVsW2ldOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGxvd3AgdmVj
NCBzb3VyY2VPdmVyKGxvd3AgdmVjNCBzb3VyY2UsIGxvd3AgdmVjNCBkZXN0aW5hdGlvbikKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIENvbXBvc2l0ZSB0aGUgc2hh
ZG93IHdpdGggdGhlIG9yaWdpbmFsIHRleHR1cmUuCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBzb3VyY2UgKyBkZXN0aW5hdGlvbiAqICgxLiAtIHNvdXJjZS5hKTsKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsOworICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSBzb3VyY2VPdmVyKHRleHR1cmUyRCh1X2NvbnRlbnRU
ZXh0dXJlLCB2X3RleENvb3JkKSwgc2hhZG93Qmx1clZlcnRpY2FsKCkgKiB1X3NoYWRvd0NvbG9y
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICApOwotICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuLCAxLiwgMS4sIDEuKSAqIHNoYWRvd0JsdXJIb3Jp
em9udGFsKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICAgICAgKTsKIAotICAgIGlm
ICghZnJhZ21lbnRTaGFkZXJTb3VyY2UpCi0gICAgICAgIHJldHVybjsKLSAgICBQbGF0Zm9ybTNE
T2JqZWN0IHZlcnRleFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpWRVJURVhfU0hBREVSKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGZyYWdtZW50U2hh
ZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5U
X1NIQURFUik7Ci0gICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCB2ZXJ0
ZXhTaGFkZXJTb3VyY2UpOwotICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKGZyYWdtZW50U2hh
ZGVyLCBmcmFnbWVudFNoYWRlclNvdXJjZSk7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
SUQgPSBtX2NvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsKLSAgICBtX2NvbnRleHQtPmNvbXBpbGVT
aGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIoZnJhZ21l
bnRTaGFkZXIpOwotI2lmICFMT0dfRElTQUJMRUQKLSAgICBTdHJpbmcgbG9nOwotICAgIG1fY29u
dGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhmcmFnbWVudFNoYWRlcik7Ci0gICAgV1RGTG9nKCZMb2dD
b21wb3NpdGluZywgIiVzXG4iLCBsb2cuYXNjaWkoKS5kYXRhKCkpOwotI2VuZGlmCi0gICAgbV9j
b250ZXh0LT5hdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2ZXJ0ZXhTaGFkZXIpOwotICAgIG1fY29u
dGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgZnJhZ21lbnRTaGFkZXIpOwotICAgIG1fY29u
dGV4dC0+bGlua1Byb2dyYW0ocHJvZ3JhbUlEKTsKLQotICAgIG1fdmVydGV4QXR0cmliID0gbV9j
b250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3ZlcnRleCIpOwotICAgIG1f
dGV4Q29vcmRBdHRyaWIgPSBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwg
ImFfdGV4Q29vcmQiKTsKLSAgICBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBtX2NvbnRleHQt
PmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X3RleHR1cmUiKTsKLSAgICBzd2l0Y2gg
KHR5cGUpIHsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgotICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJB
VEU6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6Ci0gICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OklOVkVSVDoKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVT
UzoKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6Ci0gICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQgPSBt
X2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2Ftb3VudCIpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKLSAgICAgICAgbV91
bmlmb3JtTG9jYXRpb25zLmJsdXIucmFkaXVzID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRp
b24ocHJvZ3JhbUlELCAidV9ibHVyUmFkaXVzIik7Ci0gICAgICAgIG1fdW5pZm9ybUxvY2F0aW9u
cy5ibHVyLmdhdXNzaWFuS2VybmVsID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJv
Z3JhbUlELCAidV9nYXVzc2lhbktlcm5lbCIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6Ci0gICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5z
aGFkb3cuYmx1clJhZGl1cyA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1J
RCwgInVfc2hhZG93Qmx1clJhZGl1cyIpOwotICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hh
ZG93LmdhdXNzaWFuS2VybmVsID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3Jh
bUlELCAidV9nYXVzc2lhbktlcm5lbCIpOwotICAgICAgICBpZiAoIXBhc3MpCi0gICAgICAgICAg
ICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93Lm9mZnNldCA9IG1fY29udGV4dC0+Z2V0VW5pZm9y
bUxvY2F0aW9uKHByb2dyYW1JRCwgInVfc2hhZG93T2Zmc2V0Iik7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRoZSBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4
dHVyZSBpbiB0aGUgc2Vjb25kIHBhc3MsIHRoZSBmaXJzdCBwYXNzIGlzIG9ubHkgYSBob3Jpem9u
dGFsIGFscGhhIGJsdXIuCi0gICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNv
bG9yID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dD
b2xvciIpOwotICAgICAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb250ZW50VGV4
dHVyZSA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfY29udGVu
dFRleHR1cmUiKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgbV9pZCA9IHByb2dyYW1JRDsKLSAgICBtX3ZlcnRleFNo
YWRlciA9IHZlcnRleFNoYWRlcjsKLSAgICBtX2ZyYWdtZW50U2hhZGVyID0gZnJhZ21lbnRTaGFk
ZXI7Ci19CisgICAgLy8gU2Vjb25kIHBhc3M6IHZlcnRpY2FsIGFscGhhIGJsdXIgYW5kIGNvbXBv
c2l0ZSB3aXRoIG9yaWdpbi4KKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkb3dG
aWx0ZXIyID0KKyAgICAgICAgQkxVUl9DT05TVEFOVFMKKyAgICAgICAgU1RSSU5HSUZZKAorICAg
ICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisgICAgICAgICAgICB2YXJ5aW5nIGhp
Z2hwIHZlYzIgdl90ZXhDb29yZDsKKyAgICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X2Js
dXJSYWRpdXM7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVjNCB1X3NoYWRvd0NvbG9yOwor
ICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zYW1wbGVyOworICAgICAgICAgICAgdW5p
Zm9ybSBzYW1wbGVyMkQgc19jb250ZW50VGV4dHVyZTsKKyAgICAgICAgICAgIHVuaWZvcm0gZmxv
YXQgdV9nYXVzc2lhbktlcm5lbFtHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSF07CiAKLVBhc3NS
ZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBTdGFuZGFyZEZpbHRlclByb2dyYW06OmNyZWF0
ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25U
eXBlIHR5cGUsIHVuc2lnbmVkIHBhc3MpCi17Ci0gICAgUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJv
Z3JhbT4gcHJvZ3JhbSA9IGFkb3B0UmVmKG5ldyBTdGFuZGFyZEZpbHRlclByb2dyYW0oY29udGV4
dCwgdHlwZSwgcGFzcykpOwotICAgIGlmICghcHJvZ3JhbS0+bV9pZCkKLSAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICBsb3dwIGZsb2F0IHNhbXBsZUFscGhhKGZsb2F0IHIpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgdmVjMiBjb29yZCA9IHZfdGV4Q29vcmQgKyB2ZWMyKDAu
LCByICogdV9ibHVyUmFkaXVzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHNf
c2FtcGxlciwgY29vcmQpLmEgKiBmbG9hdChjb29yZC54ID4gMC4gJiYgY29vcmQueSA+IDAuICYm
IGNvb3JkLnggPCAxLiAmJiBjb29yZC55IDwgMS4pOworICAgICAgICAgICAgfQogCi0gICAgcmV0
dXJuIHByb2dyYW07Ci19CisgICAgICAgICAgICBsb3dwIGZsb2F0IHNoYWRvd0JsdXJWZXJ0aWNh
bCgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmxvYXQgdG90YWwgPSBzYW1wbGVB
bHBoYSgwLikgKiB1X2dhdXNzaWFuS2VybmVsWzBdOworICAgICAgICAgICAgICAgIGZvciAoaW50
IGkgPSAxOyBpIDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7IGkrKykgeworICAgICAgICAg
ICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVBbHBoYShmbG9hdChpKSAqIEdBVVNTSUFOX0tFUk5F
TF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07CisgICAgICAgICAgICAgICAgICAgIHRvdGFs
ICs9IHNhbXBsZUFscGhhKGZsb2F0KC0xICogaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1
X2dhdXNzaWFuS2VybmVsW2ldOworICAgICAgICAgICAgICAgIH0KIAotc3RhdGljIGlubGluZSBm
bG9hdCBnYXVzcyhmbG9hdCB4KQotewotICAgIHJldHVybiBleHAoLSh4ICogeCkgLyAyLik7Ci19
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsOworICAgICAgICAgICAgfQogCi1zdGF0aWMg
ZmxvYXQqIGdhdXNzaWFuS2VybmVsKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBwcmVwYXJlZCA9IGZh
bHNlOwotICAgIHN0YXRpYyBmbG9hdCBrZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhd
ID0gezAsIH07CisgICAgICAgICAgICBsb3dwIHZlYzQgc291cmNlT3Zlcihsb3dwIHZlYzQgc291
cmNlLCBsb3dwIHZlYzQgZGVzdGluYXRpb24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgLy8gQ29tcG9zaXRlIHRoZSBzaGFkb3cgd2l0aCB0aGUgb3JpZ2luYWwgdGV4dHVyZS4KKyAg
ICAgICAgICAgICAgICByZXR1cm4gc291cmNlICsgZGVzdGluYXRpb24gKiAoMS4gLSBzb3VyY2Uu
YSk7CisgICAgICAgICAgICB9CiAKLSAgICBpZiAocHJlcGFyZWQpCi0gICAgICAgIHJldHVybiBr
ZXJuZWw7CisgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSBzb3VyY2VPdmVyKHRleHR1cmUyRChzX2NvbnRlbnRU
ZXh0dXJlLCB2X3RleENvb3JkKSwgc2hhZG93Qmx1clZlcnRpY2FsKCkgKiB1X3NoYWRvd0NvbG9y
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKIAotICAgIGtlcm5lbFswXSA9IGdhdXNzKDAp
OwotICAgIGZsb2F0IHN1bSA9IGtlcm5lbFswXTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7ICsraSkgewotICAgICAgICBrZXJuZWxbaV0g
PSBnYXVzcyhpICogR0FVU1NJQU5fS0VSTkVMX1NURVApOwotICAgICAgICBzdW0gKz0gMiAqIGtl
cm5lbFtpXTsKKyAgICBpZiAoc3BlY3MuaXNFbXB0eSgpKSB7CisgICAgICAgIHNwZWNzLnJlc2l6
ZShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6TGFzdEZpbHRlcik7CisgICAgICAgIHNwZWNz
W1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpEZWZhdWx0XSA9IFNoYWRlclNwZWModmVydGV4
U2ltcGxlLCBmcmFnbWVudFNpbXBsZSk7CisgICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyOjpTb2xpZENvbG9yXSA9IFNoYWRlclNwZWModmVydGV4U29saWRDb2xvciwgZnJh
Z21lbnRTb2xpZENvbG9yKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6OlJlY3RdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhTaW1wbGUsIGZyYWdtZW50UmVjdFNpbXBsZSk7
CisgICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpNYXNrZWRdID0gU2hh
ZGVyU3BlYyh2ZXJ0ZXhPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRPcGFjaXR5QW5kTWFzayk7Cisg
ICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpNYXNrZWRSZWN0XSA9IFNo
YWRlclNwZWModmVydGV4T3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50UmVjdE9wYWNpdHlBbmRNYXNr
KTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkFudGlhbGlhc2Vk
XSA9IFNoYWRlclNwZWModmVydGV4U2ltcGxlLCBmcmFnbWVudEFudGlhbGlhc2luZ05vTWFzayk7
CisgICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpHcmF5c2NhbGVGaWx0
ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50R3JheXNjYWxlRmlsdGVyKTsK
KyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNlcGlhRmlsdGVyXSA9
IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudFNlcGlhRmlsdGVyKTsKKyAgICAgICAg
c3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNhdHVyYXRlRmlsdGVyXSA9IFNoYWRl
clNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudFNhdHVyYXRlRmlsdGVyKTsKKyAgICAgICAgc3Bl
Y3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Okh1ZVJvdGF0ZUZpbHRlcl0gPSBTaGFkZXJT
cGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRIdWVSb3RhdGVGaWx0ZXIpOworICAgICAgICBzcGVj
c1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QnJpZ2h0bmVzc0ZpbHRlcl0gPSBTaGFkZXJT
cGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRCcmlnaHRuZXNzRmlsdGVyKTsKKyAgICAgICAgc3Bl
Y3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkNvbnRyYXN0RmlsdGVyXSA9IFNoYWRlclNw
ZWModmVydGV4RmlsdGVyLCBmcmFnbWVudENvbnRyYXN0RmlsdGVyKTsKKyAgICAgICAgc3BlY3Nb
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkludmVydEZpbHRlcl0gPSBTaGFkZXJTcGVjKHZl
cnRleEZpbHRlciwgZnJhZ21lbnRJbnZlcnRGaWx0ZXIpOworICAgICAgICBzcGVjc1tUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6T3BhY2l0eUZpbHRlcl0gPSBTaGFkZXJTcGVjKHZlcnRleEZp
bHRlciwgZnJhZ21lbnRPcGFjaXR5RmlsdGVyKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6OkJsdXJGaWx0ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZy
YWdtZW50Qmx1ckZpbHRlcik7CisgICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpTaGFkb3dGaWx0ZXJQYXNzMV0gPSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21l
bnRTaGFkb3dGaWx0ZXIxKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6OlNoYWRvd0ZpbHRlclBhc3MyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVu
dFNoYWRvd0ZpbHRlcjIpOwogICAgIH0KIAotICAgIC8vIE5vcm1hbGl6ZSB0aGUga2VybmVsCi0g
ICAgZmxvYXQgc2NhbGUgPSAxIC8gc3VtOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBH
QVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgKytpKQotICAgICAgICBrZXJuZWxbaV0gKj0gc2Nh
bGU7Ci0KLSAgICBwcmVwYXJlZCA9IHRydWU7Ci0gICAgcmV0dXJuIGtlcm5lbDsKKyAgICBBU1NF
UlQoc3BlY3Muc2l6ZSgpID4ga2V5KTsKKyAgICBTaGFkZXJTcGVjJiBzcGVjID0gc3BlY3Nba2V5
XTsKKyAgICB2ZXJ0ZXhTb3VyY2UgPSBzcGVjLnZlcnRleFNoYWRlcjsKKyAgICBmcmFnbWVudFNv
dXJjZSA9IHNwZWMuZnJhZ21lbnRTaGFkZXI7CiB9CiAKLXZvaWQgU3RhbmRhcmRGaWx0ZXJQcm9n
cmFtOjpwcmVwYXJlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgb3BlcmF0aW9uLCB1bnNpZ25lZCBw
YXNzLCBjb25zdCBJbnRTaXplJiBzaXplLCBHQzNEdWludCBjb250ZW50VGV4dHVyZSkKK1RleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcihHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQogewotICAgIG1f
Y29udGV4dC0+dXNlUHJvZ3JhbShtX2lkKTsKLSAgICBzd2l0Y2ggKG9wZXJhdGlvbi5nZXRPcGVy
YXRpb25UeXBlKCkpIHsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgotICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
U0FUVVJBVEU6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6Ci0gICAgICAg
IG1fY29udGV4dC0+dW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQsIHN0YXRpY19j
YXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFt
b3VudCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVS
VDoKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKLSAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6Q09OVFJBU1Q6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6
Ci0gICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQs
IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24m
PihvcGVyYXRpb24pLmFtb3VudCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkJMVVI6IHsKLSAgICAgICAgY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1
ciA9IHN0YXRpY19jYXN0PGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pOwot
ICAgICAgICBGbG9hdFNpemUgcmFkaXVzOwotCi0gICAgICAgIC8vIEJsdXIgaXMgZG9uZSBpbiB0
d28gcGFzc2VzLCBmaXJzdCBob3Jpem9udGFsbHkgYW5kIHRoZW4gdmVydGljYWxseS4gVGhlIHNh
bWUgc2hhZGVyIGlzIHVzZWQgZm9yIGJvdGguCi0gICAgICAgIGlmIChwYXNzKQotICAgICAgICAg
ICAgcmFkaXVzLnNldEhlaWdodChmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXIuc3RkRGV2aWF0aW9u
KCksIHNpemUuaGVpZ2h0KCkpIC8gc2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHJhZGl1cy5zZXRXaWR0aChmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXIuc3RkRGV2aWF0
aW9uKCksIHNpemUud2lkdGgoKSkgLyBzaXplLndpZHRoKCkpOwotCi0gICAgICAgIG1fY29udGV4
dC0+dW5pZm9ybTJmKG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLnJhZGl1cywgcmFkaXVzLndpZHRo
KCksIHJhZGl1cy5oZWlnaHQoKSk7Ci0gICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihtX3Vu
aWZvcm1Mb2NhdGlvbnMuYmx1ci5nYXVzc2lhbktlcm5lbCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZf
V0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7Ci0gICAgICAgIGNvbnN0IERyb3BTaGFk
b3dGaWx0ZXJPcGVyYXRpb24mIHNoYWRvdyA9IHN0YXRpY19jYXN0PGNvbnN0IERyb3BTaGFkb3dG
aWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pOwotICAgICAgICBzd2l0Y2ggKHBhc3MpIHsKLSAg
ICAgICAgY2FzZSAwOgotICAgICAgICAgICAgLy8gRmlyc3QgcGFzczogdmVydGljYWwgYWxwaGEg
Ymx1ci4KLSAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKG1fdW5pZm9ybUxvY2F0aW9u
cy5zaGFkb3cub2Zmc2V0LCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS54KCkpIC8gZmxvYXQoc2l6
ZS53aWR0aCgpKSwgZmxvYXQoc2hhZG93LmxvY2F0aW9uKCkueSgpKSAvIGZsb2F0KHNpemUuaGVp
Z2h0KCkpKTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0
aW9ucy5zaGFkb3cuYmx1clJhZGl1cywgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6
ZS53aWR0aCgpKSk7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobV91bmlmb3Jt
TG9jYXRpb25zLnNoYWRvdy5nYXVzc2lhbktlcm5lbCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lE
VEgsIGdhdXNzaWFuS2VybmVsKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
MToKLSAgICAgICAgICAgIC8vIFNlY29uZCBwYXNzOiB3ZSBuZWVkIHRoZSBzaGFkb3cgY29sb3Ig
YW5kIHRoZSBjb250ZW50IHRleHR1cmUgZm9yIGNvbXBvc2l0aW5nLgotICAgICAgICAgICAgbV9j
b250ZXh0LT51bmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzLCBz
aGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLmhlaWdodCgpKSk7Ci0gICAgICAgICAg
ICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5nYXVzc2lh
bktlcm5lbCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOwot
ICAgICAgICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFMSk7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBjb250ZW50VGV4dHVyZSk7Ci0gICAgICAgICAgICBtX2NvbnRl
eHQtPnVuaWZvcm0xaShtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbnRlbnRUZXh0dXJlLCAx
KTsKLSAgICAgICAgICAgIGZsb2F0IHIsIGcsIGIsIGE7Ci0gICAgICAgICAgICBzaGFkb3cuY29s
b3IoKS5nZXRSR0JBKHIsIGcsIGIsIGEpOwotICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3Jt
NGYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb2xvciwgciwgZywgYiwgYSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQogfQogCi1QYXNzUmVmUHRyPFN0YW5kYXJkRmlsdGVy
UHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlckZvckZpbHRlcihj
b25zdCBGaWx0ZXJPcGVyYXRpb24mIGZpbHRlciwgdW5zaWduZWQgcGFzcykKK1RleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjp+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKQogewotICAgIFJl
ZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IHByb2dyYW07Ci0gICAgRmlsdGVyT3BlcmF0aW9u
OjpPcGVyYXRpb25UeXBlIHR5cGUgPSBmaWx0ZXIuZ2V0T3BlcmF0aW9uVHlwZSgpOwotICAgIGlu
dCBrZXkgPSBpbnQodHlwZSkgfCAocGFzcyA8PCAxNik7Ci0gICAgRmlsdGVyTWFwOjppdGVyYXRv
ciBpdGVyYXRvciA9IG1fZmlsdGVyTWFwLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3IgPT0g
bV9maWx0ZXJNYXAuZW5kKCkpIHsKLSAgICAgICAgcHJvZ3JhbSA9IFN0YW5kYXJkRmlsdGVyUHJv
Z3JhbTo6Y3JlYXRlKG1fY29udGV4dCwgdHlwZSwgcGFzcyk7Ci0gICAgICAgIGlmICghcHJvZ3Jh
bSkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIG1fZmlsdGVyTWFwLmFkZChrZXks
IHByb2dyYW0pOwotICAgIH0gZWxzZQotICAgICAgICBwcm9ncmFtID0gaXRlcmF0b3ItPnZhbHVl
OwotCi0gICAgcmV0dXJuIHByb2dyYW07CiB9CiAKLXVuc2lnbmVkIFRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyOjpnZXRQYXNzZXNSZXF1aXJlZEZvckZpbHRlcihjb25zdCBGaWx0ZXJPcGVyYXRp
b24mIG9wZXJhdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0+IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9ncmFtKFNoYWRlcktl
eSBrZXkpCiB7Ci0gICAgc3dpdGNoIChvcGVyYXRpb24uZ2V0T3BlcmF0aW9uVHlwZSgpKSB7Ci0g
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKLSAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6U0VQSUE6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgotICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpJTlZFUlQ6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6Ci0gICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpP
UEFDSVRZOgotICAgICAgICByZXR1cm4gMTsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxV
UjoKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6Ci0gICAgICAgIC8vIFdl
IHVzZSB0d28tcGFzc2VzICh2ZXJ0aWNhbCtob3Jpem9udGFsKSBmb3IgYmx1ciBhbmQgZHJvcC1z
aGFkb3cuCi0gICAgICAgIHJldHVybiAyOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLQorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOjppdGVyYXRvciBp
dCA9IG1fcHJvZ3JhbXMuZmluZChrZXkpOworICAgIGlmIChpdCAhPSBtX3Byb2dyYW1zLmVuZCgp
KQorICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKworICAgIFN0cmluZyB2ZXJ0ZXhTaGFkZXI7
CisgICAgU3RyaW5nIGZyYWdtZW50U2hhZGVyOworICAgIGdldFNoYWRlclNwZWMoa2V5LCB2ZXJ0
ZXhTaGFkZXIsIGZyYWdtZW50U2hhZGVyKTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0+IHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKG1f
Y29udGV4dCwgdmVydGV4U2hhZGVyLCBmcmFnbWVudFNoYWRlcik7CisgICAgbV9wcm9ncmFtcy5h
ZGQoa2V5LCBwcm9ncmFtKTsKKyAgICByZXR1cm4gcHJvZ3JhbTsKIH0KLQotI2VuZGlmCiB9Owog
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKaW5kZXggMWZm
YjcxMC4uNGU0N2IzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgK
QEAgLTIxLDIzMyArMjEsMTAzIEBACiAjaWZuZGVmIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
X2gKICNkZWZpbmUgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXJfaAogCi0jaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0KLSNpbmNsdWRlICJG
bG9hdFF1YWQuaCIKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ckdMLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykKLSNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCi0jZW5kaWYKKyNpbmNsdWRl
IDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8U3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQml0bWFwVGV4dHVyZTsKLWNsYXNzIFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOworI2RlZmluZSBURVhNQVBfREVDTEFSRV9WQVJJQUJMRShBY2Nl
c3NvciwgTmFtZSwgVHlwZSkgR0MzRHVpbnQgQWNjZXNzb3IjI0xvY2F0aW9uKCkgeyBzdGF0aWMg
Y29uc3QgQXRvbWljU3RyaW5nIG5hbWUoTmFtZSk7IHJldHVybiBnZXRMb2NhdGlvbihuYW1lLCBU
eXBlKTsgfQorI2RlZmluZSBURVhNQVBfREVDTEFSRV9VTklGT1JNKEFjY2Vzc29yKSBURVhNQVBf
REVDTEFSRV9WQVJJQUJMRShBY2Nlc3NvciwgInVfIiNBY2Nlc3NvciwgVW5pZm9ybVZhcmlhYmxl
KQorI2RlZmluZSBURVhNQVBfREVDTEFSRV9BVFRSSUJVVEUoQWNjZXNzb3IpIFRFWE1BUF9ERUNM
QVJFX1ZBUklBQkxFKEFjY2Vzc29yLCAiYV8iI0FjY2Vzc29yLCBBdHRyaWJWYXJpYWJsZSkKKyNk
ZWZpbmUgVEVYTUFQX0RFQ0xBUkVfU0FNUExFUihBY2Nlc3NvcikgVEVYTUFQX0RFQ0xBUkVfVkFS
SUFCTEUoQWNjZXNzb3IsICJzXyIjQWNjZXNzb3IsIFVuaWZvcm1WYXJpYWJsZSkKIAogY2xhc3Mg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbT4gewogcHVibGljOgotICAgIFBsYXRmb3JtM0RPYmplY3QgaWQoKSB7
IHJldHVybiBtX2lkOyB9Ci0gICAgR0MzRHVpbnQgdmVydGV4QXR0cmliKCkgeyByZXR1cm4gbV92
ZXJ0ZXhBdHRyaWI7IH0KKyAgICBQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW1JRCgpIGNvbnN0IHsg
cmV0dXJuIG1faWQ7IH0KKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpIHsgcmV0dXJu
IG1fY29udGV4dC5nZXQoKTsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtPiBjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4
dCwgY29uc3QgU3RyaW5nJiB2ZXJ0ZXgsIGNvbnN0IFN0cmluZyYgZnJhZ21lbnQpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNv
bnRleHQsIHZlcnRleCwgZnJhZ21lbnQpKTsKKyAgICB9CiAKLSAgICBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNv
dXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpOwogICAgIHZpcnR1YWwgflRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShm
bG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKikgeyB9Ci0gICAgR0MzRGludCBtYXRy
aXhMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4TG9jYXRpb247IH0KLSAgICBHQzNE
aW50IGZsaXBMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmxpcExvY2F0aW9uOyB9Ci0gICAg
R0MzRGludCB0ZXh0dXJlU2l6ZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlU2l6
ZUxvY2F0aW9uOyB9Ci0gICAgR0MzRGludCBzb3VyY2VUZXh0dXJlTG9jYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3NvdXJjZVRleHR1cmVMb2NhdGlvbjsgfQotICAgIEdDM0RpbnQgbWFza1RleHR1
cmVMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFza1RleHR1cmVMb2NhdGlvbjsgfQotICAg
IEdDM0RpbnQgb3BhY2l0eUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5TG9jYXRp
b247IH0KLQotICAgIHN0YXRpYyBib29sIGlzVmFsaWRVbmlmb3JtTG9jYXRpb24oR0MzRGludCBs
b2NhdGlvbikgeyByZXR1cm4gbG9jYXRpb24gPj0gMDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9p
ZCBnZXRVbmlmb3JtTG9jYXRpb24oR0MzRGludCYgdmFyLCBjb25zdCBjaGFyKiBuYW1lKTsKLSAg
ICB2b2lkIGluaXRpYWxpemVQcm9ncmFtKCk7Ci0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUo
KSB7IH0KLSAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UoKSBjb25zdCB7IHJldHVy
biBtX3ZlcnRleFNoYWRlclNvdXJjZS5kYXRhKCk7IH0KLSAgICBjb25zdCBjaGFyKiBmcmFnbWVu
dFNoYWRlclNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhZ21lbnRTaGFkZXJTb3VyY2UuZGF0
YSgpOyB9CisgICAgVEVYTUFQX0RFQ0xBUkVfQVRUUklCVVRFKHZlcnRleCkKKyAgICBURVhNQVBf
REVDTEFSRV9BVFRSSUJVVEUodGV4Q29vcmQpCiAKLSAgICBHcmFwaGljc0NvbnRleHQzRCogbV9j
b250ZXh0OwotICAgIFBsYXRmb3JtM0RPYmplY3QgbV9pZDsKLSAgICBHQzNEdWludCBtX3ZlcnRl
eEF0dHJpYjsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fdmVydGV4U2hhZGVyOwotICAgIFBsYXRm
b3JtM0RPYmplY3QgbV9mcmFnbWVudFNoYWRlcjsKLSAgICBHQzNEaW50IG1fbWF0cml4TG9jYXRp
b247Ci0gICAgR0MzRGludCBtX2ZsaXBMb2NhdGlvbjsKLSAgICBHQzNEaW50IG1fdGV4dHVyZVNp
emVMb2NhdGlvbjsKLSAgICBHQzNEaW50IG1fc291cmNlVGV4dHVyZUxvY2F0aW9uOwotICAgIEdD
M0RpbnQgbV9vcGFjaXR5TG9jYXRpb247Ci0gICAgR0MzRGludCBtX21hc2tUZXh0dXJlTG9jYXRp
b247Ci0KLXByaXZhdGU6Ci0gICAgQ1N0cmluZyBtX3ZlcnRleFNoYWRlclNvdXJjZTsKLSAgICBD
U3RyaW5nIG1fZnJhZ21lbnRTaGFkZXJTb3VyY2U7Ci19OworICAgIFRFWE1BUF9ERUNMQVJFX1VO
SUZPUk0obWF0cml4KQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oZmxpcCkKKyAgICBURVhN
QVBfREVDTEFSRV9VTklGT1JNKHRleHR1cmVTaXplKQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZP
Uk0ob3BhY2l0eSkKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKGNvbG9yKQorICAgIFRFWE1B
UF9ERUNMQVJFX1VOSUZPUk0oZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlKQorICAgIFRF
WE1BUF9ERUNMQVJFX1NBTVBMRVIoc2FtcGxlcikKKyAgICBURVhNQVBfREVDTEFSRV9TQU1QTEVS
KG1hc2spCiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi1jbGFzcyBTdGFuZGFyZEZpbHRlclBy
b2dyYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxTdGFuZGFyZEZpbHRlclByb2dyYW0+IHsKLXB1Ymxp
YzoKLSAgICB2aXJ0dWFsIH5TdGFuZGFyZEZpbHRlclByb2dyYW0oKTsKLSAgICB2aXJ0dWFsIHZv
aWQgcHJlcGFyZShjb25zdCBGaWx0ZXJPcGVyYXRpb24mLCB1bnNpZ25lZCBwYXNzLCBjb25zdCBJ
bnRTaXplJiwgR0MzRHVpbnQgY29udGVudFRleHR1cmUpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgRmlsdGVy
T3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlLCB1bnNpZ25lZCBwYXNzKTsKLSAgICBHQzNEdWludCB2
ZXJ0ZXhBdHRyaWIoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRleEF0dHJpYjsgfQotICAgIEdDM0R1
aW50IHRleENvb3JkQXR0cmliKCkgY29uc3QgeyByZXR1cm4gbV90ZXhDb29yZEF0dHJpYjsgfQot
ICAgIEdDM0R1aW50IHRleHR1cmVVbmlmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlVW5p
Zm9ybUxvY2F0aW9uOyB9Ci1wcm90ZWN0ZWQ6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29u
dGV4dDsKLXByaXZhdGU6Ci0gICAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKCk7Ci0gICAgU3RhbmRh
cmRGaWx0ZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiwgRmlsdGVyT3BlcmF0aW9uOjpPcGVy
YXRpb25UeXBlLCB1bnNpZ25lZCBwYXNzKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1faWQ7Ci0g
ICAgUGxhdGZvcm0zRE9iamVjdCBtX3ZlcnRleFNoYWRlcjsKLSAgICBQbGF0Zm9ybTNET2JqZWN0
IG1fZnJhZ21lbnRTaGFkZXI7Ci0gICAgR0MzRHVpbnQgbV92ZXJ0ZXhBdHRyaWI7Ci0gICAgR0Mz
RHVpbnQgbV90ZXhDb29yZEF0dHJpYjsKLSAgICBHQzNEdWludCBtX3RleHR1cmVVbmlmb3JtTG9j
YXRpb247Ci0gICAgdW5pb24gewotICAgICAgICBHQzNEdWludCBhbW91bnQ7Ci0KLSAgICAgICAg
c3RydWN0IHsKLSAgICAgICAgICAgIEdDM0R1aW50IHJhZGl1czsKLSAgICAgICAgICAgIEdDM0R1
aW50IGdhdXNzaWFuS2VybmVsOwotICAgICAgICB9IGJsdXI7Ci0KLSAgICAgICAgc3RydWN0IHsK
LSAgICAgICAgICAgIEdDM0R1aW50IGJsdXJSYWRpdXM7Ci0gICAgICAgICAgICBHQzNEdWludCBj
b2xvcjsKLSAgICAgICAgICAgIEdDM0R1aW50IG9mZnNldDsKLSAgICAgICAgICAgIEdDM0R1aW50
IGNvbnRlbnRUZXh0dXJlOwotICAgICAgICAgICAgR0MzRHVpbnQgZ2F1c3NpYW5LZXJuZWw7Ci0g
ICAgICAgIH0gc2hhZG93OwotICAgIH0gbV91bmlmb3JtTG9jYXRpb25zOwotfTsKKyAgICBURVhN
QVBfREVDTEFSRV9VTklGT1JNKGFtb3VudCkKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKGdh
dXNzaWFuS2VybmVsKQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oYmx1clJhZGl1cykKKyAg
ICBURVhNQVBfREVDTEFSRV9VTklGT1JNKHNoYWRvd0NvbG9yKQorICAgIFRFWE1BUF9ERUNMQVJF
X1VOSUZPUk0oc2hhZG93T2Zmc2V0KQorICAgIFRFWE1BUF9ERUNMQVJFX1NBTVBMRVIoY29udGVu
dFRleHR1cmUpCiAjZW5kaWYKIAotY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1w
bGUgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewotcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlPiBjcmVhdGUo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKGNvbnRleHQpKTsKLSAgICB9
Ci0KLXByb3RlY3RlZDoKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZShHcmFw
aGljc0NvbnRleHQzRCopOwotcHJpdmF0ZToKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVNpbXBsZSgpOwotfTsKLQotY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2lt
cGxlIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU+IGNy
ZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlKGNvbnRleHQp
KTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJl
Y3RTaW1wbGUoR3JhcGhpY3NDb250ZXh0M0QqKTsKIHByaXZhdGU6Ci0gICAgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1SZWN0U2ltcGxlKCk7Ci19OwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbU9wYWNpdHlBbmRNYXNrPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtT3BhY2l0eUFuZE1hc2soY29udGV4dCkpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAg
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soR3JhcGhpY3NDb250ZXh0
M0QqKTsKLXByaXZhdGU6Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5k
TWFzaygpOwotfTsKLQotY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0
eUFuZE1hc2sgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewotcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNp
dHlBbmRNYXNrPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9w
YWNpdHlBbmRNYXNrKGNvbnRleHQpKTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayhHcmFwaGljc0NvbnRleHQzRCop
OwotcHJpdmF0ZToKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5k
TWFzaygpOwotfTsKLQotY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9y
IDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I+IGNyZWF0
ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yKGNvbnRleHQpKTsK
LSAgICB9Ci0KLSAgICBHQzNEaW50IGNvbG9yTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Nv
bG9yTG9jYXRpb247IH0KLQotcHJvdGVjdGVkOgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtU29saWRDb2xvcihHcmFwaGljc0NvbnRleHQzRCopOwotcHJpdmF0ZToKLSAgICBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoKTsKLSAgICBHQzNEaW50IG1fY29sb3JMb2Nh
dGlvbjsKLX07Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5n
Tm9NYXNrIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2lu
Z05vTWFzaz4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlh
c2luZ05vTWFzayhjb250ZXh0KSk7Ci0gICAgfQotCi0gICAgR0MzRGludCBleHBhbmRlZFF1YWRW
ZXJ0aWNlc0luVGV4dHVyZUNvb3JkaW5hdGVzTG9jYXRpb24oKSB7IHJldHVybiBtX2V4cGFuZGVk
UXVhZFZlcnRpY2VzSW5UZXh0dXJlQ29yZGluYXRlc0xvY2F0aW9uOyB9Ci0gICAgR0MzRGludCBl
eHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbigpIHsgcmV0dXJuIG1fZXhwYW5k
ZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb247IH0KKyAgICBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgY29uc3QgU3RyaW5nJiB2
ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IFN0cmluZyYgZnJhZ21lbnRTaGFkZXJTb3VyY2UpOwor
ICAgIFBsYXRmb3JtM0RPYmplY3QgbV92ZXJ0ZXhTaGFkZXI7CisgICAgUGxhdGZvcm0zRE9iamVj
dCBtX2ZyYWdtZW50U2hhZGVyOwogCi1wcm90ZWN0ZWQ6Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2soR3JhcGhpY3NDb250ZXh0M0QqKTsKLXByaXZhdGU6
Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2soKTsKKyAg
ICBlbnVtIFZhcmlhYmxlVHlwZSB7IFVuaWZvcm1WYXJpYWJsZSwgQXR0cmliVmFyaWFibGUgfTsK
KyAgICBHQzNEdWludCBnZXRMb2NhdGlvbihjb25zdCBBdG9taWNTdHJpbmcmLCBWYXJpYWJsZVR5
cGUpOwogCi0gICAgR0MzRGludCBtX2V4cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0dXJlQ29yZGlu
YXRlc0xvY2F0aW9uOwotICAgIEdDM0RpbnQgbV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3Bh
Y2VMb2NhdGlvbjsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKKyAg
ICBQbGF0Zm9ybTNET2JqZWN0IG1faWQ7CisgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIEdDM0R1
aW50PiBtX3ZhcmlhYmxlczsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
IHsKIHB1YmxpYzoKLSAgICBlbnVtIFNoYWRlclR5cGUgewotICAgICAgICBJbnZhbGlkID0gMCwg
Ly8gSGFzaE1hcHMgZG8gbm90IGxpa2UgMCBhcyBhIGtleS4KLSAgICAgICAgU2ltcGxlLAotICAg
ICAgICBBbnRpYWxpYXNpbmdOb01hc2ssCi0gICAgICAgIFJlY3RTaW1wbGUsCi0gICAgICAgIE9w
YWNpdHlBbmRNYXNrLAotICAgICAgICBSZWN0T3BhY2l0eUFuZE1hc2ssCi0gICAgICAgIFNvbGlk
Q29sb3IKKyAgICBlbnVtIFNoYWRlcktleSB7CisgICAgICAgIEludmFsaWQgPSAwLAorICAgICAg
ICBEZWZhdWx0LAorICAgICAgICBSZWN0LAorICAgICAgICBNYXNrZWQsCisgICAgICAgIE1hc2tl
ZFJlY3QsCisgICAgICAgIFNvbGlkQ29sb3IsCisgICAgICAgIEFudGlhbGlhc2VkLAorICAgICAg
ICBHcmF5c2NhbGVGaWx0ZXIsCisgICAgICAgIFNlcGlhRmlsdGVyLAorICAgICAgICBTYXR1cmF0
ZUZpbHRlciwKKyAgICAgICAgSHVlUm90YXRlRmlsdGVyLAorICAgICAgICBCcmlnaHRuZXNzRmls
dGVyLAorICAgICAgICBDb250cmFzdEZpbHRlciwKKyAgICAgICAgT3BhY2l0eUZpbHRlciwKKyAg
ICAgICAgSW52ZXJ0RmlsdGVyLAorICAgICAgICBCbHVyRmlsdGVyLAorICAgICAgICBTaGFkb3dG
aWx0ZXJQYXNzMSwKKyAgICAgICAgU2hhZG93RmlsdGVyUGFzczIsCisgICAgICAgIExhc3RGaWx0
ZXIKICAgICB9OwogCiAgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKSB7IH0KICAgICBU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcihHcmFwaGljc0NvbnRleHQzRCopOwogICAgIHZpcnR1
YWwgflRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCk7CiAKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCi0gICAgdW5zaWduZWQgZ2V0UGFzc2VzUmVxdWlyZWRGb3JGaWx0ZXIoY29uc3QgRmlsdGVy
T3BlcmF0aW9uJikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+
IGdldFNoYWRlckZvckZpbHRlcihjb25zdCBGaWx0ZXJPcGVyYXRpb24mLCB1bnNpZ25lZCBwYXNz
KTsKLSNlbmRpZgotCi0gICAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4g
Z2V0U2hhZGVyUHJvZ3JhbShTaGFkZXJUeXBlKTsKLSAgICBQYXNzUmVmUHRyPFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcj4gc29saWRDb2xvclByb2dyYW0oKTsKLSAgICBQYXNz
UmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrPiBhbnRp
YWxpYXNpbmdOb01hc2tQcm9ncmFtKCk7CisgICAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbT4gZ2V0U2hhZGVyUHJvZ3JhbShTaGFkZXJLZXkpOwogCiBwcml2YXRlOgotICAg
IHR5cGVkZWYgSGFzaE1hcDxTaGFkZXJUeXBlLCBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0+LCBEZWZhdWx0SGFzaDxpbnQ+OjpIYXNoLCBIYXNoVHJhaXRzPGludD4gPiBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDsKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1h
cCBtX3RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOwotICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBtX2NvbnRleHQ7Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdHlwZWRlZiBIYXNo
TWFwPGludCwgUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gPiBGaWx0ZXJNYXA7Ci0gICAg
RmlsdGVyTWFwIG1fZmlsdGVyTWFwOwotI2VuZGlmCisgICAgdHlwZWRlZiBIYXNoTWFwPFNoYWRl
cktleSwgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiwgRGVmYXVsdEhhc2g8aW50
Pjo6SGFzaCwgSGFzaFRyYWl0czxpbnQ+ID4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA7
CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAgbV9wcm9ncmFtczsKKyAgICBSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKIH07CiAKIH0KLQogI2VuZGlmCiAKICNl
bmRpZiAvLyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167666</attachid>
            <date>2012-10-08 18:30:52 -0700</date>
            <delta_ts>2012-10-08 18:55:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86048-20121009042952.patch</filename>
            <type>text/plain</type>
            <size>81240</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQzNTJhMTZiYTAzNmU5
ZDMwZjkwNTdjNTkyNDIxZGU0MDE4YWIwNy4uZDNhNGFjZjAxNzVmNjM1NmRiZjE2NTRjMTE3Zjhi
YThkYWM2Y2NjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDEyLTEwLTA4ICBOb2Ft
IFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBbVGV4bWFw
XSBSZWZhY3RvciBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlciB0byBiZSBjbGVhcmVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjA0OAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByZXZpb3VzIGltcGxl
bWVudGF0aW9uIG9mIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIHdhcyB2ZXJ5IHZlcmJvc2Us
IGNhbGxpbmcgZm9yIHRvbworICAgICAgICBtYW55IGNhc3RzIGFuZCBhbWJpZ3VvdXMgb3duZXJz
aGlwLgorICAgICAgICBUaGlzIHJlZmFjdG9yIGRvZXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAg
MS4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gaXMgb25lIGNsYXNzIHdpdGhvdXQgc3ViY2xh
c3Nlcy4KKyAgICAgICAgMi4gVW5pZm9ybS9BdHRyaWJ1dGUgYWNjZXNzb3JzIGFyZSBnZW5lcmF0
ZWQgYnkgc3BlY2lhbCBtYWNyb3MgKFRFWE1BUF9ERUNMQVJFXy4uLikgdGhhdAorICAgICAgICAg
ICBnZW5lcmF0ZSBib3RoIHRoZSBDKysgYWNjZXNzIGZ1bmN0aW9uLCBhcyB3ZWxsIGFzIHRoZSBH
TFNMIG5hbWUgb2YgdGhlIHZhcmlhYmxlLiBUaGlzCisgICAgICAgICAgIGFsbG93cyBhZGRpbmcv
cmVtb3ZpbmcgdmFyaWFibGVzIGZyb20gYSBzaGFkZXIgd2l0aG91dCBhZGRpbmcgYnJvaWxlci1w
bGF0ZSBjb2RlIGxpa2UKKyAgICAgICAgICAgYmVmb3JlLgorCisgICAgICAgIEFmdGVyIHRoaXMg
Y2hhbmdlIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIGhhcyBvbmx5IG9uZSByZXNwb25zaWJp
bGl0eSAtIGRlYWxpbmcgd2l0aAorICAgICAgICBUZXh0dXJlTWFwcGVyR0wncyBidWlsdC1pbiBz
aGFkZXJzIGFuZCB0aGVpciBsaWZlY3ljbGUuIFByZXBhcmluZyBmaWx0ZXJzIGV0Yy4gaXMgZG9u
ZQorICAgICAgICBpbiBUZXh0dXJlTWFwcGVyR0wuCisKKyAgICAgICAgVGhpcyBpcyBhIHJlZmFj
dG9yIHdpdGhvdXQgbmV3IGZ1bmN0aW9uYWxpdHkuIEl0IGhhcyBiZWVuIHZlcmlmaWVkIHRvIG5v
dCBicmVhayBhbnkgZXhpc3RpbmcKKyAgICAgICAgcmVsZXZhbnQgdGVzdC4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckdMOjpkcmF3VGV4dHVyZVJlY3RhbmdsZUFSQik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJHTDo6ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKToKKyAgICAgICAgICAgIFVzZSB0aGUg
TUFDUk8tZ2VuZXJhdGVkIHVuaWZvcm0gYWNjZXNzb3JzLgorCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OmtleUZvckZpbHRlclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0UGFzc2VzUmVxdWlyZWRGb3JGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Z2F1c3MpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2F1c3NpYW5LZXJuZWwpOgorICAgICAgICAoV2ViQ29yZTo6cHJl
cGFyZUZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpk
cmF3RmlsdGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjphcHBseUZp
bHRlcnMpOgorICAgICAgICAgICAgTW92ZSB0aGUgZmlsdGVyIGxvZ2ljIHRvIFRleHR1cmVNYXBw
ZXJHTAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Z2V0TG9jYXRpb24pOgorICAgICAgICAoU2hhZGVy
U3BlYyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkZXJTcGVjOjpTaGFkZXJTcGVjKToKKyAgICAg
ICAgKFdlYkNvcmU6OmdldFNoYWRlclNwZWMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjp+VGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OmdldFNoYWRlclByb2dyYW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6cHJvZ3JhbUlEKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpjb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpjcmVhdGUpOgorICAgICAg
ICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0pOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXIpOgorICAgICAgICAgICAgU2VlIGRlc2NyaXB0aW9uLgorCiAyMDEyLTEwLTA4
ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUG9zdC1yMTMw
MjI2IENsZWFudXA6IENvbW1lbnQgYSBjb21wbGljYXRlZCBpZiBzdGF0ZW1lbnQgYW5kIG1ha2Ug
aXQgYSBoZWxwZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDkxNjliZmIwOWIzNmFlMjhi
NDg3MTY1ZjEzNzBiODNjOTIyMGEwM2IuLjZmMzI5MTg3ZTE5NzQ4MDcxNzczMTBjNGNiOWNmY2Y5
NDg1Y2RmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUg
Ikxlbmd0aEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCIKICNpbmNsdWRlICJUaW1lci5oIgpAQCAt
MjY2LDcgKzI2Nyw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjplbmRQYWludGluZygpCiAKIHZv
aWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYgcXVhZFRvRHJhdywg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0qIHNoYWRlclByb2dyYW0sIEdDM0RlbnVtIGRyYXdpbmdNb2RlLCBib29s
IG5lZWRzQmxlbmRpbmcpCiB7Ci0gICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5h
YmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7CiAg
ICAgbV9jb250ZXh0M0QtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZF
UiwgMCk7CiAKICAgICBjb25zdCBHQzNEZmxvYXQgcXVhZFtdID0gewpAQCAtMjc1LDcgKzI3Niw3
IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYgcXVhZFRv
RHJhdywgY29uc3QgVHJhbnNmb3JtYXRpb25NCiAgICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVj
dE1hcHBlZFRvVW5pdFNxdWFyZS5wMygpLngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVk
VG9Vbml0U3F1YXJlLnAzKCkueSgpLAogICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBw
ZWRUb1VuaXRTcXVhcmUucDQoKS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5p
dFNxdWFyZS5wNCgpLnkoKQogICAgIH07Ci0gICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBv
aW50ZXIoc2hhZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmliKCksIDIsIEdyYXBoaWNzQ29udGV4dDNE
OjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIocXVhZCkpOworICAgIG1fY29udGV4dDNELT52
ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlclByb2dyYW0tPnZlcnRleExvY2F0aW9uKCksIDIsIEdy
YXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIocXVhZCkpOwogCiAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0
YSgpLnByb2plY3Rpb25NYXRyaXgpLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkubXVsdGlwbHko
VHJhbnNmb3JtYXRpb25NYXRyaXgoCiAgICAgICAgICAgICBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFy
Z2V0UmVjdC53aWR0aCgpLCAwLCAwLCAwLApAQCAtMjk3LDcgKzI5OCw3IEBAIHZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYgcXVhZFRvRHJhdywgY29uc3QgVHJh
bnNmb3JtYXRpb25NCiAgICAgICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4
dDNEOjpCTEVORCk7CiAKICAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhkcmF3aW5nTW9kZSwg
MCwgNCk7Ci0gICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQ
cm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKIH0KIAogdm9pZCBU
ZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCB3aWR0
aCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbW9kZWxWaWV3TWF0cml4KQpAQCAtMzA1LDE1ICszMDYsMTIgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCB3aWR0aCwgY29uc3Qg
RmxvYXRSZWMKICAgICBpZiAoY2xpcFN0YWNrKCkuY3VycmVudCgpLnNjaXNzb3JCb3guaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1Tb2xpZENvbG9yPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyLnNvbGlkQ29sb3JQcm9ncmFtKCk7Ci0gICAgbV9jb250ZXh0M0Qt
PnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OlNvbGlkQ29sb3IpOworICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dy
YW1JRCgpKTsKIAotICAgIGZsb2F0IGFscGhhID0gY29sb3IuYWxwaGEoKSAvIDI1NS4wOwotICAg
IG1fY29udGV4dDNELT51bmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLAotICAgICAg
ICAgICAgICAgICAgICAgICAoY29sb3IucmVkKCkgLyAyNTUuMCkgKiBhbHBoYSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgKGNvbG9yLmdyZWVuKCkgLyAyNTUuMCkgKiBhbHBoYSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgKGNvbG9yLmJsdWUoKSAvIDI1NS4wKSAqIGFscGhhLAotICAgICAgICAg
ICAgICAgICAgICAgICBhbHBoYSk7CisgICAgZmxvYXQgciwgZywgYiwgYTsKKyAgICBjb2xvci5n
ZXRSR0JBKHIsIGcsIGIsIGEpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtNGYocHJvZ3JhbS0+
Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICBtX2NvbnRleHQzRC0+bGluZVdpZHRo
KHdpZHRoKTsKIAogICAgIGRyYXdRdWFkKHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgcHJv
Z3JhbS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9PUCwgY29sb3IuaGFzQWxwaGEo
KSk7CkBAIC0zNjgsMjcgKzM2NiwyNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1
cmVSZWN0YW5nbGVBUkIodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbgogewogICAg
IFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbTsKICAgICBpZiAobWFz
a1RleHR1cmUpCi0gICAgICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6UmVjdE9wYWNpdHlBbmRNYXNrKTsKKyAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5z
aGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFt
KFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpNYXNrZWRSZWN0KTsKICAgICBlbHNlCi0gICAg
ICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6UmVjdFNp
bXBsZSk7Ci0gICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7CisgICAg
ICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6UmVjdCk7
CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogCi0g
ICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0
dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3Jh
bS0+dmVydGV4TG9jYXRpb24oKSk7CiAgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKICAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUo
R0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCB0ZXh0dXJlKTsKLSAgICBtX2NvbnRleHQzRC0+dW5p
Zm9ybTFpKHByb2dyYW0tPnNvdXJjZVRleHR1cmVMb2NhdGlvbigpLCAwKTsKKyAgICBtX2NvbnRl
eHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPnNhbXBsZXJMb2NhdGlvbigpLCAwKTsKIAogICAgIG1f
Y29udGV4dDNELT51bmlmb3JtMWYocHJvZ3JhbS0+ZmxpcExvY2F0aW9uKCksICEhKGZsYWdzICYg
U2hvdWxkRmxpcFRleHR1cmUpKTsKICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTJmKHByb2dyYW0t
PnRleHR1cmVTaXplTG9jYXRpb24oKSwgdGV4dHVyZVNpemUud2lkdGgoKSwgdGV4dHVyZVNpemUu
aGVpZ2h0KCkpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYocHJvZ3JhbS0+b3BhY2l0eUxv
Y2F0aW9uKCksIG9wYWNpdHkpOwogCi0gICAgaWYgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
Ojppc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpKSkKLSAg
ICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xZihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSwg
b3BhY2l0eSk7Ci0KLSAgICBpZiAobWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQo
KSAmJiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCkpKSB7CisgICAgaWYgKG1hc2tUZXh0dXJlICYm
IG1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkpIHsKICAgICAgICAgY29uc3QgQml0bWFwVGV4dHVyZUdM
KiBtYXNrVGV4dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMKj4obWFz
a1RleHR1cmUpOwogICAgICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRTEpOwogICAgICAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1hc2tUZXh0dXJlR0wtPmlkKCkpOwotICAgICAg
ICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRpb24oKSwg
MSk7CisgICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+bWFza0xvY2F0aW9u
KCksIDEpOwogICAgICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRTApOwogICAgIH0KIApAQCAtNDA1LDEwICs0MDEsMTAgQEAgdm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBj
b25zdCBJbnRTaXplJgogCiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBw
cm9ncmFtOwogICAgIGlmIChtYXNrVGV4dHVyZSkKLSAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5z
aGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFt
KFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5QW5kTWFzayk7CisgICAgICAgIHBy
b2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIu
Z2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6TWFza2VkKTsKICAg
ICBlbHNlCi0gICAgICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6U2ltcGxlKTsKLSAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgp
KTsKKyAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpEZWZhdWx0KTsKKyAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFt
SUQoKSk7CiAKICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwg
dGV4dHVyZSwgZmxhZ3MsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgbWFz
a1RleHR1cmUpOwogfQpAQCAtNTM2LDggKzUzMiw4IEBAIGJvb2wgVGV4dHVyZU1hcHBlckdMOjpk
cmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3Ms
CiAgICAgcXVhZFRvRWRnZUFycmF5KGV4cGFuZGVkUXVhZEluU2NyZWVuU3BhY2UsIHRhcmdldFF1
YWRFZGdlcyk7CiAgICAgcXVhZFRvRWRnZUFycmF5KGluZmxhdGVRdWFkKHF1YWRJblNjcmVlblNw
YWNlLmJvdW5kaW5nQm94KCksICBpbmZsYXRpb25EaXN0YW5jZSksIHRhcmdldFF1YWRFZGdlcyAr
IDEyKTsKIAotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2lu
Z05vTWFzaz4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlci5hbnRpYWxpYXNpbmdOb01hc2tQcm9ncmFtKCk7Ci0gICAgbV9jb250ZXh0M0Qt
PnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OkFudGlhbGlhc2VkKTsKKyAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9n
cmFtSUQoKSk7CiAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0zZnYocHJvZ3JhbS0+ZXhwYW5kZWRR
dWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb24oKSwgOCwgdGFyZ2V0UXVhZEVkZ2VzKTsKIAog
ICAgIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCB0ZXh0dXJlLCBm
bGFncywgRHJhd1F1YWQob3JpZ2luYWxUYXJnZXRSZWN0LCBleHBhbmRlZFF1YWRJblRleHR1cmVD
b29yZGluYXRlcyksIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgMCAvKiBtYXNrVGV4dHVyZSAq
Lyk7CkBAIC01NDYsMjEgKzU0MiwxOSBAQCBib29sIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1
cmVXaXRoQW50aWFsaWFzaW5nKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLAogCiB2b2lk
IFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCB1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywg
Y29uc3QgRHJhd1F1YWQmIHF1YWRUb0RyYXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
b2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tU
ZXh0dXJlKQogewotICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9n
cmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJp
YkFycmF5KHByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwogICAgIG1fY29udGV4dDNELT5hY3Rp
dmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgbV9jb250ZXh0M0Qt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlKTsKLSAg
ICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPnNvdXJjZVRleHR1cmVMb2NhdGlvbigp
LCAwKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPnNhbXBsZXJMb2NhdGlv
bigpLCAwKTsKIAogICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYocHJvZ3JhbS0+ZmxpcExvY2F0
aW9uKCksICEhKGZsYWdzICYgU2hvdWxkRmxpcFRleHR1cmUpKTsKKyAgICBtX2NvbnRleHQzRC0+
dW5pZm9ybTFmKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpLCBvcGFjaXR5KTsKIAotICAgIGlm
IChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihwcm9n
cmFtLT5vcGFjaXR5TG9jYXRpb24oKSkpCi0gICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYo
cHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkpOwotCi0gICAgaWYgKG1hc2tUZXh0
dXJlICYmIG1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkgJiYgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigp
KSkgeworICAgIGlmIChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpKSB7CiAg
ICAgICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCogbWFza1RleHR1cmVHTCA9IHN0YXRpY19jYXN0
PGNvbnN0IEJpdG1hcFRleHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsKICAgICAgICAgbV9jb250ZXh0
M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKTsKICAgICAgICAg
bV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBt
YXNrVGV4dHVyZUdMLT5pZCgpKTsKLSAgICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9n
cmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCksIDEpOworICAgICAgICBtX2NvbnRleHQzRC0+dW5p
Zm9ybTFpKHByb2dyYW0tPm1hc2tMb2NhdGlvbigpLCAxKTsKICAgICAgICAgbV9jb250ZXh0M0Qt
PmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKICAgICB9CiAKQEAg
LTcxMCwyNyArNzA0LDE3MSBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMo
SW1hZ2UqIGltYWdlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjbwogfQogCiAjaWYgRU5B
QkxFKENTU19GSUxURVJTKQotdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdGaWx0ZXJlZChjb25z
dCBCaXRtYXBUZXh0dXJlJiBzb3VyY2VUZXh0dXJlLCBjb25zdCBCaXRtYXBUZXh0dXJlJiBjb250
ZW50VGV4dHVyZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXIsIGludCBwYXNzKQorCitz
dGF0aWMgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNoYWRlcktleSBrZXlGb3JGaWx0ZXJU
eXBlKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNzKQor
eworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NB
TEU6CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6R3JheXNjYWxl
RmlsdGVyOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKKyAgICAgICAgcmV0dXJu
IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTZXBpYUZpbHRlcjsKKyAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6U0FUVVJBVEU6CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6U2F0dXJhdGVGaWx0ZXI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9S
T1RBVEU6CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6SHVlUm90
YXRlRmlsdGVyOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CisgICAgICAgIHJl
dHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6SW52ZXJ0RmlsdGVyOworICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgorICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6OkJyaWdodG5lc3NGaWx0ZXI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkNPTlRSQVNUOgorICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OkNvbnRyYXN0RmlsdGVyOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgorICAg
ICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wYWNpdHlGaWx0ZXI7Cisg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6Qmx1ckZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
RFJPUF9TSEFET1c6CisgICAgICAgIHJldHVybiBwYXNzID8gVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6OlNoYWRvd0ZpbHRlclBhc3MyIDogVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNo
YWRvd0ZpbHRlclBhc3MxOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkludmFsaWQ7
CisgICAgfQorfQorCitzdGF0aWMgdW5zaWduZWQgZ2V0UGFzc2VzUmVxdWlyZWRGb3JGaWx0ZXIo
RmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKKyAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6U0VQSUE6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgor
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgorICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpJTlZFUlQ6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6Cisg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpPUEFDSVRZOgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6QkxVUjoKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6CisgICAgICAg
IC8vIFdlIHVzZSB0d28tcGFzc2VzICh2ZXJ0aWNhbCtob3Jpem9udGFsKSBmb3IgYmx1ciBhbmQg
ZHJvcC1zaGFkb3cuCisgICAgICAgIHJldHVybiAyOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KK30KKworLy8gQ3JlYXRlIGEgbm9ybWFsIGRpc3RyaWJ1dGlvbiBvZiAy
MSB2YWx1ZXMgYmV0d2VlbiAtMiBhbmQgMi4KK3N0YXRpYyBjb25zdCBpbnQgR2F1c3NpYW5LZXJu
ZWxIYWxmV2lkdGggPSAxMTsKK3N0YXRpYyBjb25zdCBmbG9hdCBHYXVzc2lhbktlcm5lbFN0ZXAg
PSAwLjI7CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgZ2F1c3MoZmxvYXQgeCkKK3sKKyAgICByZXR1
cm4gZXhwKC0oeCAqIHgpIC8gMi4pOworfQorCitzdGF0aWMgZmxvYXQqIGdhdXNzaWFuS2VybmVs
KCkKK3sKKyAgICBzdGF0aWMgYm9vbCBwcmVwYXJlZCA9IGZhbHNlOworICAgIHN0YXRpYyBmbG9h
dCBrZXJuZWxbR2F1c3NpYW5LZXJuZWxIYWxmV2lkdGhdID0gezAsIH07CisKKyAgICBpZiAocHJl
cGFyZWQpCisgICAgICAgIHJldHVybiBrZXJuZWw7CisKKyAgICBrZXJuZWxbMF0gPSBnYXVzcygw
KTsKKyAgICBmbG9hdCBzdW0gPSBrZXJuZWxbMF07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsg
aSA8IEdhdXNzaWFuS2VybmVsSGFsZldpZHRoOyArK2kpIHsKKyAgICAgICAga2VybmVsW2ldID0g
Z2F1c3MoaSAqIEdhdXNzaWFuS2VybmVsU3RlcCk7CisgICAgICAgIHN1bSArPSAyICoga2VybmVs
W2ldOworICAgIH0KKworICAgIC8vIE5vcm1hbGl6ZSB0aGUga2VybmVsLgorICAgIGZsb2F0IHNj
YWxlID0gMSAvIHN1bTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2F1c3NpYW5LZXJu
ZWxIYWxmV2lkdGg7ICsraSkKKyAgICAgICAga2VybmVsW2ldICo9IHNjYWxlOworCisgICAgcHJl
cGFyZWQgPSB0cnVlOworICAgIHJldHVybiBrZXJuZWw7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBh
cmVGaWx0ZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCBjb25z
dCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiwgdW5zaWduZWQgcGFzcywgY29uc3QgSW50U2l6
ZSYgc2l6ZSwgR0MzRHVpbnQgY29udGVudFRleHR1cmUpCit7CisgICAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBjb250ZXh0ID0gcHJvZ3JhbS0+Y29udGV4dCgpOworICAgIGNvbnRleHQtPnVz
ZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOworCisgICAgc3dpdGNoIChvcGVyYXRpb24u
Z2V0T3BlcmF0aW9uVHlwZSgpKSB7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FM
RToKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OlNBVFVSQVRFOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgor
ICAgICAgICBjb250ZXh0LT51bmlmb3JtMWYocHJvZ3JhbS0+YW1vdW50TG9jYXRpb24oKSwgc3Rh
dGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlv
bikuYW1vdW50KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
SU5WRVJUOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgorICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BB
Q0lUWToKKyAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPmFtb3VudExvY2F0aW9u
KCksIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkJMVVI6IHsKKyAgICAgICAgY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiYg
Ymx1ciA9IHN0YXRpY19jYXN0PGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24p
OworICAgICAgICBGbG9hdFNpemUgcmFkaXVzOworCisgICAgICAgIC8vIEJsdXIgaXMgZG9uZSBp
biB0d28gcGFzc2VzLCBmaXJzdCBob3Jpem9udGFsbHkgYW5kIHRoZW4gdmVydGljYWxseS4gVGhl
IHNhbWUgc2hhZGVyIGlzIHVzZWQgZm9yIGJvdGguCisgICAgICAgIGlmIChwYXNzKQorICAgICAg
ICAgICAgcmFkaXVzLnNldEhlaWdodChmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXIuc3RkRGV2aWF0
aW9uKCksIHNpemUuaGVpZ2h0KCkpIC8gc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHJhZGl1cy5zZXRXaWR0aChmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXIuc3RkRGV2
aWF0aW9uKCksIHNpemUud2lkdGgoKSkgLyBzaXplLndpZHRoKCkpOworCisgICAgICAgIGNvbnRl
eHQtPnVuaWZvcm0yZihwcm9ncmFtLT5ibHVyUmFkaXVzTG9jYXRpb24oKSwgcmFkaXVzLndpZHRo
KCksIHJhZGl1cy5oZWlnaHQoKSk7CisgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZnYocHJvZ3Jh
bS0+Z2F1c3NpYW5LZXJuZWxMb2NhdGlvbigpLCBHYXVzc2lhbktlcm5lbEhhbGZXaWR0aCwgZ2F1
c3NpYW5LZXJuZWwoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKKyAgICAgICAgY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9w
ZXJhdGlvbiYgc2hhZG93ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJh
dGlvbiY+KG9wZXJhdGlvbik7CisgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZnYocHJvZ3JhbS0+
Z2F1c3NpYW5LZXJuZWxMb2NhdGlvbigpLCBHYXVzc2lhbktlcm5lbEhhbGZXaWR0aCwgZ2F1c3Np
YW5LZXJuZWwoKSk7CisgICAgICAgIHN3aXRjaCAocGFzcykgeworICAgICAgICBjYXNlIDA6Cisg
ICAgICAgICAgICAvLyBGaXJzdCBwYXNzOiB2ZXJ0aWNhbCBhbHBoYSBibHVyLgorICAgICAgICAg
ICAgY29udGV4dC0+dW5pZm9ybTJmKHByb2dyYW0tPnNoYWRvd09mZnNldExvY2F0aW9uKCksIGZs
b2F0KHNoYWRvdy5sb2NhdGlvbigpLngoKSkgLyBmbG9hdChzaXplLndpZHRoKCkpLCBmbG9hdChz
aGFkb3cubG9jYXRpb24oKS55KCkpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICAg
ICAgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPmJsdXJSYWRpdXNMb2NhdGlvbigpLCBzaGFk
b3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLndpZHRoKCkpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAvLyBTZWNvbmQgcGFzczogd2UgbmVl
ZCB0aGUgc2hhZG93IGNvbG9yIGFuZCB0aGUgY29udGVudCB0ZXh0dXJlIGZvciBjb21wb3NpdGlu
Zy4KKyAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT5ibHVyUmFkaXVzTG9j
YXRpb24oKSwgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOwor
ICAgICAgICAgICAgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRTEpOworICAgICAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIGNvbnRlbnRUZXh0dXJlKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnVu
aWZvcm0xaShwcm9ncmFtLT5jb250ZW50VGV4dHVyZUxvY2F0aW9uKCksIDEpOworICAgICAgICAg
ICAgZmxvYXQgciwgZywgYiwgYTsKKyAgICAgICAgICAgIHNoYWRvdy5jb2xvcigpLmdldFJHQkEo
ciwgZywgYiwgYSk7CisgICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+c2hh
ZG93Q29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3RmlsdGVyZWQoY29uc3Qg
Qml0bWFwVGV4dHVyZSYgc2FtcGxlciwgY29uc3QgQml0bWFwVGV4dHVyZSYgY29udGVudFRleHR1
cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgZmlsdGVyLCBpbnQgcGFzcykKIHsKICAgICAvLyBG
b3Igc3RhbmRhcmQgZmlsdGVycywgd2UgYWx3YXlzIGRyYXcgdGhlIHdob2xlIHRleHR1cmUgd2l0
aG91dCB0cmFuc2Zvcm1hdGlvbnMuCi0gICAgUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4g
cHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5nZXRTaGFkZXJGb3JGaWx0ZXIoZmlsdGVyLCBwYXNzKTsKKyAgICBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6U2hhZGVyS2V5IGtleSA9IGtleUZvckZpbHRlclR5cGUoZmlsdGVyLmdldE9w
ZXJhdGlvblR5cGUoKSwgcGFzcyk7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyLmdldFNoYWRlclByb2dyYW0oa2V5KTsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAKLSAg
ICBwcm9ncmFtLT5wcmVwYXJlKGZpbHRlciwgcGFzcywgc291cmNlVGV4dHVyZS5jb250ZW50U2l6
ZSgpLCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihjb250ZW50VGV4dHVyZSku
aWQoKSk7CisgICAgcHJlcGFyZUZpbHRlclByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgZmlsdGVyLCBw
YXNzLCBzYW1wbGVyLmNvbnRlbnRTaXplKCksIHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1
cmVHTCY+KGNvbnRlbnRUZXh0dXJlKS5pZCgpKTsKIAotICAgIG1fY29udGV4dDNELT5lbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7Ci0gICAgbV9jb250ZXh0
M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3JkQXR0cmliKCkpOwor
ICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhM
b2NhdGlvbigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJv
Z3JhbS0+dGV4Q29vcmRMb2NhdGlvbigpKTsKICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwotICAgIG1fY29udGV4dDNELT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0
bWFwVGV4dHVyZUdMJj4oc291cmNlVGV4dHVyZSkuaWQoKSk7Ci0gICAgbV9jb250ZXh0M0QtPnVu
aWZvcm0xaShwcm9ncmFtLT50ZXh0dXJlVW5pZm9ybSgpLCAwKTsKKyAgICBtX2NvbnRleHQzRC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHN0YXRpY19jYXN0PGNv
bnN0IEJpdG1hcFRleHR1cmVHTCY+KHNhbXBsZXIpLmlkKCkpOworICAgIG1fY29udGV4dDNELT51
bmlmb3JtMWkocHJvZ3JhbS0+c2FtcGxlckxvY2F0aW9uKCksIDApOwogICAgIGNvbnN0IEdDM0Rm
bG9hdCB0YXJnZXRWZXJ0aWNlc1tdID0gey0xLCAtMSwgMSwgLTEsIDEsIDEsIC0xLCAxfTsKICAg
ICBjb25zdCBHQzNEZmxvYXQgc291cmNlVmVydGljZXNbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAw
LCAxfTsKLSAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0
ZXhBdHRyaWIoKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGlu
dHB0cih0YXJnZXRWZXJ0aWNlcykpOwotICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2lu
dGVyKHByb2dyYW0tPnRleENvb3JkQXR0cmliKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIoc291cmNlVmVydGljZXMpKTsKKyAgICBtX2NvbnRleHQz
RC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCAyLCBHcmFw
aGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHRhcmdldFZlcnRpY2Vz
KSk7CisgICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dGV4Q29v
cmRMb2NhdGlvbigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNE
aW50cHRyKHNvdXJjZVZlcnRpY2VzKSk7CiAgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OkJMRU5EKTsKICAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhHcmFwaGlj
c0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCAwLCA0KTsKLSAgICBtX2NvbnRleHQzRC0+ZGlzYWJs
ZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKLSAgICBtX2NvbnRl
eHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3JkQXR0cmliKCkp
OworICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVy
dGV4TG9jYXRpb24oKSk7CisgICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eShwcm9ncmFtLT50ZXhDb29yZExvY2F0aW9uKCkpOwogfQogCiBQYXNzUmVmUHRyPEJpdG1hcFRl
eHR1cmU+IEJpdG1hcFRleHR1cmVHTDo6YXBwbHlGaWx0ZXJzKFRleHR1cmVNYXBwZXIqIHRleHR1
cmVNYXBwZXIsIGNvbnN0IEJpdG1hcFRleHR1cmUmIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQpAQCAtNzQ0LDcgKzg4Miw3IEBAIFBhc3NSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gQml0bWFwVGV4dHVyZUdMOjphcHBseUZpbHRlcnMoVGV4dHVyZU1hcHBlciog
dGV4dHVyZU1hCiAgICAgICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZmlsdGVyID0gZmlsdGVy
cy5hdChpKTsKICAgICAgICAgQVNTRVJUKGZpbHRlcik7CiAKLSAgICAgICAgaW50IG51bVBhc3Nl
cyA9IHRleHR1cmVNYXBwZXJHTC0+ZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmdldFBhc3Nlc1JlcXVpcmVkRm9yRmlsdGVyKCpmaWx0ZXIpOworICAgICAg
ICBpbnQgbnVtUGFzc2VzID0gZ2V0UGFzc2VzUmVxdWlyZWRGb3JGaWx0ZXIoZmlsdGVyLT5nZXRP
cGVyYXRpb25UeXBlKCkpOwogICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG51bVBhc3Nlczsg
KytqKSB7CiAgICAgICAgICAgICB0ZXh0dXJlTWFwcGVyR0wtPmJpbmRTdXJmYWNlKHRhcmdldC5n
ZXQoKSk7CiAgICAgICAgICAgICB0ZXh0dXJlTWFwcGVyR0wtPmRyYXdGaWx0ZXJlZCgoaSB8fCBq
KSA/ICpzb3VyY2UgOiBjb250ZW50VGV4dHVyZSwgY29udGVudFRleHR1cmUsICpmaWx0ZXIsIGop
OwpAQCAtODk1LDEyICsxMDMzLDEyIEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uCiAKICAgICBk
YXRhKCkuaW5pdGlhbGl6ZVN0ZW5jaWwoKTsKIAotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpTaW1wbGUpOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3Jh
bSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRT
aGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpEZWZhdWx0KTsKIAotICAg
IG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOwotICAgIG1fY29udGV4dDNE
LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAg
bV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOworICAgIG1fY29u
dGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigp
KTsKICAgICBjb25zdCBHQzNEZmxvYXQgdW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAw
LCAxfTsKLSAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0
ZXhBdHRyaWIoKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGlu
dHB0cih1bml0UmVjdCkpOworICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHBy
b2dyYW0tPnZlcnRleExvY2F0aW9uKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFs
c2UsIDAsIEdDM0RpbnRwdHIodW5pdFJlY3QpKTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KQog
ICAgICAgICAgICAgLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkKQEAgLTk0NCw3ICsxMDgyLDcg
QEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb24KICAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhH
cmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCAwLCA0KTsKIAogICAgIC8vIENsZWFyIHRo
ZSBzdGF0ZS4KLSAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dy
YW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KHByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwogICAgIG1fY29udGV4dDNELT5zdGVu
Y2lsTWFzaygwKTsKIAogICAgIC8vIEluY3JlYXNlIHN0ZW5jaWxJbmRleCBhbmQgYXBwbHkgc3Rl
bmNpbCB0ZXN0aW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAK
aW5kZXggNWNhOGM5NmJmZTQ1Mjk1MmI0M2I2NDIzODUxYjFmYzgzNWQ3MzlmYi4uOTI3NjNhMzBi
NDA3OGQ3NzAyMDU4NjBlZmM1MzdkY2RjMTZlNTNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXIuY3BwCkBAIC0zMCwyNDcgKzMwLDU3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotI2RlZmluZSBTVFJJTkdJRlkoLi4uKSAjX19WQV9BUkdTX18KLQotc3RhdGlj
IGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2sgPQotICAgIFNU
UklOR0lGWSgKLSAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgIHVuaWZv
cm0gc2FtcGxlcjJEIHNfc291cmNlOwotICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX21hc2s7
Ci0gICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7Ci0gICAgICAgIHZhcnlpbmcg
aGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIg
dl9tYXNrVGV4Q29vcmQ7Ci0gICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQoc19zb3VyY2UsIHZfc291cmNlVGV4
Q29vcmQpOwotICAgICAgICAgICAgbG93cCB2ZWM0IG1hc2tDb2xvciA9IHRleHR1cmUyRChzX21h
c2ssIHZfbWFza1RleENvb3JkKTsKLSAgICAgICAgICAgIGxvd3AgZmxvYXQgZnJhZ21lbnRBbHBo
YSA9IHVfb3BhY2l0eSAqIG1hc2tDb2xvci5hOwotICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0g
dmVjNChjb2xvci5yZ2IgKiBmcmFnbWVudEFscGhhLCBjb2xvci5hICogZnJhZ21lbnRBbHBoYSk7
Ci0gICAgICAgIH0KLSAgICApOwotCi1zdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJT
b3VyY2VSZWN0T3BhY2l0eUFuZE1hc2sgPQotICAgIFNUUklOR0lGWSgKLSAgICAgICAgcHJlY2lz
aW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX3NvdXJj
ZTsKLSAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfbWFzazsKLSAgICAgICAgdW5pZm9y
bSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKLSAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291
cmNlVGV4Q29vcmQ7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X21hc2tUZXhDb29yZDsK
LSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvd3AgdmVj
NCBjb2xvciA9IHRleHR1cmUyRFJlY3Qoc19zb3VyY2UsIHZfc291cmNlVGV4Q29vcmQpOwotICAg
ICAgICAgICAgbG93cCB2ZWM0IG1hc2tDb2xvciA9IHRleHR1cmUyRFJlY3Qoc19tYXNrLCB2X21h
c2tUZXhDb29yZCk7Ci0gICAgICAgICAgICBsb3dwIGZsb2F0IGZyYWdtZW50QWxwaGEgPSB1X29w
YWNpdHkgKiBtYXNrQ29sb3IuYTsKLSAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29s
b3IucmdiICogZnJhZ21lbnRBbHBoYSwgY29sb3IuYSAqIGZyYWdtZW50QWxwaGEpOwotICAgICAg
ICB9Ci0gICAgKTsKLQotc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZU9wYWNp
dHlBbmRNYXNrID0KLSAgICBTVFJJTkdJRlkoCi0gICAgICAgIHVuaWZvcm0gbWF0NCB1X21hdHJp
eDsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfZmxpcDsKLSAgICAgICAgYXR0cmlidXRl
IHZlYzQgYV92ZXJ0ZXg7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENv
b3JkOwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9tYXNrVGV4Q29vcmQ7Ci0gICAgICAg
IHZvaWQgbWFpbih2b2lkKQotICAgICAgICB7Ci0gICAgICAgICAgICB2X3NvdXJjZVRleENvb3Jk
ID0gdmVjMihhX3ZlcnRleC54LCBtaXgoYV92ZXJ0ZXgueSwgMS4gLSBhX3ZlcnRleC55LCB1X2Zs
aXApKTsKLSAgICAgICAgICAgIHZfbWFza1RleENvb3JkID0gdmVjMihhX3ZlcnRleCk7Ci0gICAg
ICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogYV92ZXJ0ZXg7Ci0gICAgICAgIH0KLSAg
ICApOwotCi1zdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUgPQot
ICAgIFNUUklOR0lGWSgKLSAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAg
IHVuaWZvcm0gc2FtcGxlcjJEIHNfc291cmNlOwotICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQg
dV9vcGFjaXR5OwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsK
LSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvd3AgdmVj
NCBjb2xvciA9IHRleHR1cmUyRChzX3NvdXJjZSwgdl9zb3VyY2VUZXhDb29yZCk7Ci0gICAgICAg
ICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIHVfb3BhY2l0eSwgY29sb3IuYSAq
IHVfb3BhY2l0eSk7Ci0gICAgICAgIH0KLSAgICApOwotCi1zdGF0aWMgY29uc3QgY2hhciogZnJh
Z21lbnRTaGFkZXJTb3VyY2VBbnRpYWxpYXNpbmdOb01hc2sgPQotICAgIFNUUklOR0lGWSgKLSAg
ICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJE
IHNfc291cmNlOwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsK
LSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKLSAgICAgICAgdW5pZm9ybSB2
ZWMzIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzhdOwotICAgICAgICB2b2lkIG1h
aW4oKQotICAgICAgICB7Ci0gICAgICAgICAgICB2ZWM0IHNhbXBsZWRDb2xvciA9IHRleHR1cmUy
RChzX3NvdXJjZSwgY2xhbXAodl9zb3VyY2VUZXhDb29yZCwgMC4wLCAxLjApKTsKLSAgICAgICAg
ICAgIHZlYzMgcG9zID0gdmVjMyhnbF9GcmFnQ29vcmQueHksIDEpOwotCi0gICAgICAgICAgICAv
LyBUaGUgZGF0YSBwYXNzZWQgaW4gdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2UgaXMg
bWVyZWx5IHRoZQotICAgICAgICAgICAgLy8gcHJlLXNjYWxlZCBjb2VmZmVjaWVudHMgb2YgdGhl
IGxpbmUgZXF1YXRpb25zIGRlc2NyaWJpbmcgdGhlIGZvdXIgZWRnZXMKLSAgICAgICAgICAgIC8v
IG9mIHRoZSBleHBhbmRlZCBxdWFkIGluIHNjcmVlbiBzcGFjZSBhbmQgdGhlIHJlY3Rhbmd1bGFy
IGJvdW5kaW5nIGJveAotICAgICAgICAgICAgLy8gb2YgdGhlIGV4cGFuZGVkIHF1YWQuCi0gICAg
ICAgICAgICAvLwotICAgICAgICAgICAgLy8gV2UgYXJlIGRvaW5nIGEgc2ltcGxlIGRpc3RhbmNl
IGNhbGN1bGF0aW9uIGhlcmUgYWNjb3JkaW5nIHRvIHRoZSBmb3JtdWxhOgotICAgICAgICAgICAg
Ly8gKEEqcC54ICsgQipwLnkgKyBDKSAvIHNxcnQoQV4yICsgQl4yKSA9IGRpc3RhbmNlIGZyb20g
bGluZSB0byBwCi0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgQSwgQiBhbmQgQyBoYXZlIGFscmVh
ZHkgYmVlbiBzY2FsZWQgYnkgMSAvIHNxcnQoQV4yICsgQl4yKS4KLSAgICAgICAgICAgIGZsb2F0
IGEwID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzBdLCBwb3Mp
LCAwLjAsIDEuMCk7Ci0gICAgICAgICAgICBmbG9hdCBhMSA9IGNsYW1wKGRvdCh1X2V4cGFuZGVk
UXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVsxXSwgcG9zKSwgMC4wLCAxLjApOwotICAgICAgICAgICAg
ZmxvYXQgYTIgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbMl0s
IHBvcyksIDAuMCwgMS4wKTsKLSAgICAgICAgICAgIGZsb2F0IGEzID0gY2xhbXAoZG90KHVfZXhw
YW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzNdLCBwb3MpLCAwLjAsIDEuMCk7Ci0gICAgICAg
ICAgICBmbG9hdCBhNCA9IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFj
ZVs0XSwgcG9zKSwgMC4wLCAxLjApOwotICAgICAgICAgICAgZmxvYXQgYTUgPSBjbGFtcChkb3Qo
dV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNV0sIHBvcyksIDAuMCwgMS4wKTsKLSAg
ICAgICAgICAgIGZsb2F0IGE2ID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVl
blNwYWNlWzZdLCBwb3MpLCAwLjAsIDEuMCk7Ci0gICAgICAgICAgICBmbG9hdCBhNyA9IGNsYW1w
KGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs3XSwgcG9zKSwgMC4wLCAxLjAp
OwotCi0gICAgICAgICAgICAvLyBOb3cgd2Ugd2FudCB0byByZWR1Y2UgdGhlIGFscGhhIHZhbHVl
IG9mIHRoZSBmcmFnbWVudCBpZiBpdCBpcyBjbG9zZSB0byB0aGUKLSAgICAgICAgICAgIC8vIGVk
Z2VzIG9mIHRoZSBleHBhbmRlZCBxdWFkIChvciByZWN0YW5ndWxhciBib3VuZGluZyBib3ggLS0g
d2hpY2ggc2VlbXMgdG8gYmUKLSAgICAgICAgICAgIC8vIGltcG9ydGFudCBmb3IgYmFja2ZhY2lu
ZyBxdWFkcykuIE5vdGUgdGhhdCB3ZSBhcmUgY29tYmluaW5nIHRoZSBjb250cmlidXRpb24KLSAg
ICAgICAgICAgIC8vIGZyb20gdGhlICh0b3AgfHwgYm90dG9tKSBhbmQgKGxlZnQgfHwgcmlnaHQp
IGVkZ2UgYnkgc2ltcGx5IG11bHRpcGx5aW5nLiBUaGlzIGZvbGxvd3MKLSAgICAgICAgICAgIC8v
IHRoZSBhcHByb2FjaCBkZXNjcmliZWQgYXQ6IGh0dHA6Ly9odHRwLmRldmVsb3Blci5udmlkaWEu
Y29tL0dQVUdlbXMyL2dwdWdlbXMyX2NoYXB0ZXIyMi5odG1sLAotICAgICAgICAgICAgLy8gaW4g
dGhpcyBjYXNlIHdpdGhvdXQgdXNpbmcgR2F1c3NpYW4gd2VpZ2h0cy4KLSAgICAgICAgICAgIGds
X0ZyYWdDb2xvciA9IHNhbXBsZWRDb2xvciAqIHVfb3BhY2l0eSAqIG1pbihtaW4oYTAsIGEyKSAq
IG1pbihhMSwgYTMpLCBtaW4oYTQsIGE2KSAqIG1pbihhNSwgYTcpKTsKLSAgICAgICAgfQotICAg
ICk7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RTaW1wbGUg
PQotICAgIFNUUklOR0lGWSgKLSAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAg
ICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX3NvdXJjZTsKLSAgICAgICAgdW5pZm9ybSBsb3dw
IHZlYzIgdV90ZXh0dXJlU2l6ZTsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0
eTsKLSAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAgICAg
IHZvaWQgbWFpbih2b2lkKQotICAgICAgICB7Ci0gICAgICAgICAgICBsb3dwIHZlYzQgY29sb3Ig
PSB0ZXh0dXJlMkRSZWN0KHNfc291cmNlLCB1X3RleHR1cmVTaXplICogdl9zb3VyY2VUZXhDb29y
ZCk7Ci0gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIHVfb3BhY2l0
eSwgY29sb3IuYSAqIHVfb3BhY2l0eSk7Ci0gICAgICAgIH0KLSAgICApOwotCi1zdGF0aWMgY29u
c3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlU2ltcGxlID0KLSAgICBTVFJJTkdJRlkoCi0gICAg
ICAgIHVuaWZvcm0gbWF0NCB1X21hdHJpeDsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVf
ZmxpcDsKLSAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7Ci0gICAgICAgIHZhcnlpbmcg
aGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOwotICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAg
ICAgICAgewotICAgICAgICAgICAgdl9zb3VyY2VUZXhDb29yZCA9IHZlYzIoYV92ZXJ0ZXgueCwg
bWl4KGFfdmVydGV4LnksIDEuIC0gYV92ZXJ0ZXgueSwgdV9mbGlwKSk7Ci0gICAgICAgICAgICBn
bF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogYV92ZXJ0ZXg7Ci0gICAgICAgIH0KLSAgICApOwotCi1z
dGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlU29saWRDb2xvciA9Ci0gICAgU1RS
SU5HSUZZKAotICAgICAgICB1bmlmb3JtIG1hdDQgdV9tYXRyaXg7Ci0gICAgICAgIGF0dHJpYnV0
ZSB2ZWM0IGFfdmVydGV4OwotICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgewotICAg
ICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIGFfdmVydGV4OwotICAgICAgICB9Ci0g
ICAgKTsKLQotCi1zdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VTb2xpZENv
bG9yID0KLSAgICBTVFJJTkdJRlkoCi0gICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0Owot
ICAgICAgICB1bmlmb3JtIHZlYzQgdV9jb2xvcjsKLSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHVfY29sb3I7Ci0gICAgICAgIH0K
LSAgICApOwotCi1QYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xv
cj4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OnNvbGlkQ29sb3JQcm9ncmFtKCkKK1RleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShQYXNzUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHZlcnRleCwgY29u
c3QgU3RyaW5nJiBmcmFnbWVudCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9p
ZCgwKQorICAgICwgbV92ZXJ0ZXhTaGFkZXIoMCkKKyAgICAsIG1fZnJhZ21lbnRTaGFkZXIoMCkK
IHsKLSAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVNvbGlkQ29sb3I+KGdldFNoYWRlclByb2dyYW0oU29saWRDb2xvcikpOwotfQorICAgIG1f
dmVydGV4U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OlZFUlRFWF9TSEFERVIpOworICAgIG1fZnJhZ21lbnRTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0
ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSKTsKKyAgICBtX2NvbnRl
eHQtPnNoYWRlclNvdXJjZShtX3ZlcnRleFNoYWRlciwgdmVydGV4KTsKKyAgICBtX2NvbnRleHQt
PnNoYWRlclNvdXJjZShtX2ZyYWdtZW50U2hhZGVyLCBmcmFnbWVudCk7CisgICAgbV9pZCA9IG1f
Y29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOworICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlciht
X3ZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVyKG1fZnJhZ21lbnRT
aGFkZXIpOworICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKG1faWQsIG1fdmVydGV4U2hhZGVy
KTsKKyAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihtX2lkLCBtX2ZyYWdtZW50U2hhZGVyKTsK
KyAgICBtX2NvbnRleHQtPmxpbmtQcm9ncmFtKG1faWQpOworCisjaWZuZGVmIE5ERUJVRworICAg
IGlmIChtX2NvbnRleHQtPmdldEVycm9yKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9S
KQorICAgICAgICByZXR1cm47CiAKLVBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1BbnRpYWxpYXNpbmdOb01hc2s+IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjphbnRpYWxp
YXNpbmdOb01hc2tQcm9ncmFtKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzaz4oZ2V0U2hhZGVyUHJv
Z3JhbShBbnRpYWxpYXNpbmdOb01hc2spKTsKKyAgICBTdHJpbmcgbG9nID0gbV9jb250ZXh0LT5n
ZXRTaGFkZXJJbmZvTG9nKG1fdmVydGV4U2hhZGVyKTsKKyAgICBwcmludGYoIlZlcnRleCBzaGFk
ZXIgbG9nOiAlc1xuIiwgbG9nLnV0ZjgoKS5kYXRhKCkpOworICAgIGxvZyA9IG1fY29udGV4dC0+
Z2V0U2hhZGVySW5mb0xvZyhtX2ZyYWdtZW50U2hhZGVyKTsKKyAgICBwcmludGYoIkZyYWdtZW50
IHNoYWRlciBsb2c6ICVzXG4iLCBsb2cudXRmOCgpLmRhdGEoKSk7CisgICAgbG9nID0gbV9jb250
ZXh0LT5nZXRQcm9ncmFtSW5mb0xvZyhtX2lkKTsKKyAgICBwcmludGYoIlByb2dyYW0gbG9nOiAl
c1xuIiwgbG9nLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCiB9CiAKLVBhc3NSZWZQdHI8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0+IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFk
ZXJQcm9ncmFtKFNoYWRlclR5cGUgc2hhZGVyVHlwZSkKK0dDM0R1aW50IFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtOjpnZXRMb2NhdGlvbihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFZhcmlh
YmxlVHlwZSB0eXBlKQogewotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4g
cHJvZ3JhbTsKLSAgICBpZiAoc2hhZGVyVHlwZSA9PSBJbnZhbGlkKQotICAgICAgICByZXR1cm4g
cHJvZ3JhbTsKLQotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOjppdGVyYXRvciBp
dCA9IG1fdGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAuZmluZChzaGFkZXJUeXBlKTsKLSAg
ICBpZiAoaXQgIT0gbV90ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcC5lbmQoKSkKKyAgICBI
YXNoTWFwPEF0b21pY1N0cmluZywgR0MzRHVpbnQ+OjppdGVyYXRvciBpdCA9IG1fdmFyaWFibGVz
LmZpbmQobmFtZSk7CisgICAgaWYgKGl0ICE9IG1fdmFyaWFibGVzLmVuZCgpKQogICAgICAgICBy
ZXR1cm4gaXQtPnZhbHVlOwogCi0gICAgc3dpdGNoIChzaGFkZXJUeXBlKSB7Ci0gICAgY2FzZSBT
aW1wbGU6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBs
ZTo6Y3JlYXRlKG1fY29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVjdFNpbXBs
ZToKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBs
ZTo6Y3JlYXRlKG1fY29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQW50aWFsaWFz
aW5nTm9NYXNrOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1B
bnRpYWxpYXNpbmdOb01hc2s6OmNyZWF0ZShtX2NvbnRleHQpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIE9wYWNpdHlBbmRNYXNrOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6Y3JlYXRlKG1fY29udGV4dCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgUmVjdE9wYWNpdHlBbmRNYXNrOgotICAgICAgICBwcm9ncmFtID0gVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OmNyZWF0ZShtX2NvbnRl
eHQpOworICAgIEdDM0R1aW50IGxvY2F0aW9uOworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNh
c2UgVW5pZm9ybVZhcmlhYmxlOgorICAgICAgICBsb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5p
Zm9ybUxvY2F0aW9uKG1faWQsIG5hbWUpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIFNvbGlk
Q29sb3I6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlk
Q29sb3I6OmNyZWF0ZShtX2NvbnRleHQpOworICAgIGNhc2UgQXR0cmliVmFyaWFibGU6CisgICAg
ICAgIGxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihtX2lkLCBuYW1lKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnZhbGlkOgorICAgIGRlZmF1bHQ6CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKICAgICB9Ci0gICAgbV90ZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcC5hZGQoc2hhZGVyVHlwZSwgcHJvZ3JhbSk7Ci0gICAg
cmV0dXJuIHByb2dyYW07Ci19CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgY2hh
ciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSkK
LSAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAgICwgbV9pZCgwKQotICAgICwgbV92ZXJ0ZXhB
dHRyaWIoMCkKLSAgICAsIG1fdmVydGV4U2hhZGVyKDApCi0gICAgLCBtX2ZyYWdtZW50U2hhZGVy
KDApCi0gICAgLCBtX21hdHJpeExvY2F0aW9uKC0xKQotICAgICwgbV9mbGlwTG9jYXRpb24oLTEp
Ci0gICAgLCBtX3RleHR1cmVTaXplTG9jYXRpb24oLTEpCi0gICAgLCBtX3NvdXJjZVRleHR1cmVM
b2NhdGlvbigtMSkKLSAgICAsIG1fb3BhY2l0eUxvY2F0aW9uKC0xKQotICAgICwgbV9tYXNrVGV4
dHVyZUxvY2F0aW9uKC0xKQotICAgICwgbV92ZXJ0ZXhTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVy
U291cmNlKQotICAgICwgbV9mcmFnbWVudFNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlclNvdXJj
ZSkKLXsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aW5pdGlhbGl6ZVBy
b2dyYW0oKQotewotICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVByb2dyYW0gPSB2
ZXJ0ZXhTaGFkZXJTb3VyY2UoKTsKLSAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJj
ZVByb2dyYW0gPSBmcmFnbWVudFNoYWRlclNvdXJjZSgpOwotICAgIFBsYXRmb3JtM0RPYmplY3Qg
dmVydGV4U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OlZFUlRFWF9TSEFERVIpOwotICAgIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIgPSBt
X2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVS
KTsKLSAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIHZlcnRleFNoYWRl
clNvdXJjZVByb2dyYW0pOwotICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKGZyYWdtZW50U2hh
ZGVyLCBmcmFnbWVudFNoYWRlclNvdXJjZVByb2dyYW0pOwotICAgIFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbUlEID0gbV9jb250ZXh0LT5jcmVhdGVQcm9ncmFtKCk7Ci0gICAgbV9jb250ZXh0LT5j
b21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVy
KGZyYWdtZW50U2hhZGVyKTsKLQotICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW1J
RCwgdmVydGV4U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihwcm9ncmFtSUQs
IGZyYWdtZW50U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmxpbmtQcm9ncmFtKHByb2dyYW1JRCk7
Ci0KLSAgICBtX3ZlcnRleEF0dHJpYiA9IG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24ocHJv
Z3JhbUlELCAiYV92ZXJ0ZXgiKTsKLQotICAgIG1faWQgPSBwcm9ncmFtSUQ7Ci0gICAgbV92ZXJ0
ZXhTaGFkZXIgPSB2ZXJ0ZXhTaGFkZXI7Ci0gICAgbV9mcmFnbWVudFNoYWRlciA9IGZyYWdtZW50
U2hhZGVyOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpnZXRVbmlmb3Jt
TG9jYXRpb24oR0MzRGludCAmdmFyaWFibGUsIGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgdmFy
aWFibGUgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX2lkLCBuYW1lKTsKLSAgICBB
U1NFUlQodmFyaWFibGUgPj0gMCk7CisgICAgbV92YXJpYWJsZXMuYWRkKG5hbWUsIGxvY2F0aW9u
KTsKKyAgICByZXR1cm4gbG9jYXRpb247CiB9CiAKIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
Ojp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKQpAQCAtMjg2LDEyMCArOTYsMTkwIEBAIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKQog
ICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFtSUQpOwogfQogCi1UZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUsIGZyYWdtZW50U2hhZGVyU291
cmNlU2ltcGxlKQotewotICAgIGluaXRpYWxpemVQcm9ncmFtKCk7Ci0gICAgZ2V0VW5pZm9ybUxv
Y2F0aW9uKG1fZmxpcExvY2F0aW9uLCAidV9mbGlwIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9u
KG1fbWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbiht
X3NvdXJjZVRleHR1cmVMb2NhdGlvbiwgInNfc291cmNlIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0
aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5Iik7Ci19CitzdHJ1Y3QgU2hhZGVyU3Bl
YyB7CisgICAgU3RyaW5nIHZlcnRleFNoYWRlcjsKKyAgICBTdHJpbmcgZnJhZ21lbnRTaGFkZXI7
CisgICAgU2hhZGVyU3BlYyhjb25zdCBjaGFyKiB2ZXJ0ZXggPSAwLCBjb25zdCBjaGFyKiBmcmFn
bWVudCA9IDApCisgICAgICAgIDogdmVydGV4U2hhZGVyKHZlcnRleCA/IFN0cmluZyhBU0NJSUxp
dGVyYWwodmVydGV4KSkgOiBTdHJpbmcoKSkKKyAgICAgICAgLCBmcmFnbWVudFNoYWRlcihmcmFn
bWVudCA/IFN0cmluZyhBU0NJSUxpdGVyYWwoZnJhZ21lbnQpKSA6IFN0cmluZygpKQorICAgIHsK
KyAgICB9Cit9OwogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OlRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRl
clNvdXJjZVNvbGlkQ29sb3IsIGZyYWdtZW50U2hhZGVyU291cmNlU29saWRDb2xvcikKK3N0YXRp
YyB2b2lkIGdldFNoYWRlclNwZWMoVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNoYWRlcktl
eSBrZXksIFN0cmluZyYgdmVydGV4U291cmNlLCBTdHJpbmcmIGZyYWdtZW50U291cmNlKQogewot
ICAgIGluaXRpYWxpemVQcm9ncmFtKCk7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4
TG9jYXRpb24sICJ1X21hdHJpeCIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX2NvbG9yTG9j
YXRpb24sICJ1X2NvbG9yIik7Ci19CisgICAgc3RhdGljIFZlY3RvcjxTaGFkZXJTcGVjPiBzcGVj
cyA9IFZlY3RvcjxTaGFkZXJTcGVjPigpOworI2RlZmluZSBTVFJJTkdJRlkoLi4uKSAjX19WQV9B
UkdTX18KKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRPcGFjaXR5QW5kTWFzayA9Cisg
ICAgICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0Owor
ICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zYW1wbGVyOworICAgICAgICAgICAgdW5p
Zm9ybSBzYW1wbGVyMkQgc19tYXNrOworICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVf
b3BhY2l0eTsKKyAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3Jk
OworICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfbWFza1RleENvb3JkOworICAgICAg
ICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbG93
cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHNfc2FtcGxlciwgdl9zb3VyY2VUZXhDb29yZCk7Cisg
ICAgICAgICAgICAgICAgbG93cCB2ZWM0IG1hc2tDb2xvciA9IHRleHR1cmUyRChzX21hc2ssIHZf
bWFza1RleENvb3JkKTsKKyAgICAgICAgICAgICAgICBsb3dwIGZsb2F0IGZyYWdtZW50QWxwaGEg
PSB1X29wYWNpdHkgKiBtYXNrQ29sb3IuYTsKKyAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3Ig
PSB2ZWM0KGNvbG9yLnJnYiAqIGZyYWdtZW50QWxwaGEsIGNvbG9yLmEgKiBmcmFnbWVudEFscGhh
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1SZWN0U2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQpCi0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShj
b250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUsIGZyYWdtZW50U2hhZGVyU291cmNlUmVj
dFNpbXBsZSkKLXsKLSAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwotICAgIGdldFVuaWZvcm1Mb2Nh
dGlvbihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRp
b24obV9mbGlwTG9jYXRpb24sICJ1X2ZsaXAiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV90
ZXh0dXJlU2l6ZUxvY2F0aW9uLCAidV90ZXh0dXJlU2l6ZSIpOwotICAgIGdldFVuaWZvcm1Mb2Nh
dGlvbihtX3NvdXJjZVRleHR1cmVMb2NhdGlvbiwgInNfc291cmNlIik7Ci0gICAgZ2V0VW5pZm9y
bUxvY2F0aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5Iik7Ci19CisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIGZyYWdtZW50UmVjdE9wYWNpdHlBbmRNYXNrID0KKyAgICAgICAgU1RSSU5H
SUZZKAorICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisgICAgICAgICAgICB1
bmlmb3JtIHNhbXBsZXIyRFJlY3Qgc19zYW1wbGVyOworICAgICAgICAgICAgdW5pZm9ybSBzYW1w
bGVyMkRSZWN0IHNfbWFzazsKKyAgICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNp
dHk7CisgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKKyAg
ICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X21hc2tUZXhDb29yZDsKKyAgICAgICAgICAg
IHZvaWQgbWFpbih2b2lkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxvd3AgdmVj
NCBjb2xvciA9IHRleHR1cmUyRFJlY3Qoc19zYW1wbGVyLCB2X3NvdXJjZVRleENvb3JkKTsKKyAg
ICAgICAgICAgICAgICBsb3dwIHZlYzQgbWFza0NvbG9yID0gdGV4dHVyZTJEUmVjdChzX21hc2ss
IHZfbWFza1RleENvb3JkKTsKKyAgICAgICAgICAgICAgICBsb3dwIGZsb2F0IGZyYWdtZW50QWxw
aGEgPSB1X29wYWNpdHkgKiBtYXNrQ29sb3IuYTsKKyAgICAgICAgICAgICAgICBnbF9GcmFnQ29s
b3IgPSB2ZWM0KGNvbG9yLnJnYiAqIGZyYWdtZW50QWxwaGEsIGNvbG9yLmEgKiBmcmFnbWVudEFs
cGhhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKIAotVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1PcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5k
TWFzayhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrLCBmcmFn
bWVudFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrKQotewotICAgIGluaXRpYWxpemVQcm9ncmFt
KCk7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIp
OwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX2ZsaXBMb2NhdGlvbiwgInVfZmxpcCIpOwotICAg
IGdldFVuaWZvcm1Mb2NhdGlvbihtX3NvdXJjZVRleHR1cmVMb2NhdGlvbiwgInNfc291cmNlIik7
Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWFza1RleHR1cmVMb2NhdGlvbiwgInNfbWFzayIp
OwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0eSIp
OwotfQorICAgIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhPcGFjaXR5QW5kTWFzayA9CisgICAg
ICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAgIHVuaWZvcm0gbWF0NCB1X21hdHJpeDsKKyAgICAg
ICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X2ZsaXA7CisgICAgICAgICAgICBhdHRyaWJ1dGUg
dmVjNCBhX3ZlcnRleDsKKyAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRl
eENvb3JkOworICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfbWFza1RleENvb3JkOwor
ICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgdl9zb3VyY2VUZXhDb29yZCA9IHZlYzIoYV92ZXJ0ZXgueCwgbWl4KGFfdmVydGV4LnksIDEu
IC0gYV92ZXJ0ZXgueSwgdV9mbGlwKSk7CisgICAgICAgICAgICAgICAgdl9tYXNrVGV4Q29vcmQg
PSB2ZWMyKGFfdmVydGV4KTsKKyAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4
ICogYV92ZXJ0ZXg7CisgICAgICAgICAgICB9CisgICAgICAgICk7CiAKLVRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVJlY3RPcGFjaXR5QW5kTWFzayhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLSAgICA6IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJjZU9wYWNp
dHlBbmRNYXNrLCBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RPcGFjaXR5QW5kTWFzaykKLXsKLSAg
ICBpbml0aWFsaXplUHJvZ3JhbSgpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeExv
Y2F0aW9uLCAidV9tYXRyaXgiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9mbGlwTG9jYXRp
b24sICJ1X2ZsaXAiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9zb3VyY2VUZXh0dXJlTG9j
YXRpb24sICJzX3NvdXJjZSIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hc2tUZXh0dXJl
TG9jYXRpb24sICJzX21hc2siKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9j
YXRpb24sICJ1X29wYWNpdHkiKTsKLX0KKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRT
aW1wbGUgPQorICAgICAgICBTVFJJTkdJRlkoCisgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVt
cCBmbG9hdDsKKyAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc2FtcGxlcjsKKyAgICAg
ICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7CisgICAgICAgICAgICB2YXJ5aW5n
IGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKKyAgICAgICAgICAgIHZvaWQgbWFpbih2b2lk
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1
cmUyRChzX3NhbXBsZXIsIHZfc291cmNlVGV4Q29vcmQpOworICAgICAgICAgICAgICAgIGdsX0Zy
YWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogdV9vcGFjaXR5LCBjb2xvci5hICogdV9vcGFjaXR5
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1BbnRpYWxpYXNpbmdOb01hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFz
aW5nTm9NYXNrKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIDogVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVu
dFNoYWRlclNvdXJjZUFudGlhbGlhc2luZ05vTWFzaykKLXsKLSAgICBpbml0aWFsaXplUHJvZ3Jh
bSgpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgi
KTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9zb3VyY2VUZXh0dXJlTG9jYXRpb24sICJzX3Nv
dXJjZSIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNpdHlMb2NhdGlvbiwgInVfb3Bh
Y2l0eSIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3Jl
ZW5TcGFjZUxvY2F0aW9uLCAidV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2UiKTsKLSAg
ICBnZXRVbmlmb3JtTG9jYXRpb24obV9mbGlwTG9jYXRpb24sICJ1X2ZsaXAiKTsKLX0KKyAgICBz
dGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRBbnRpYWxpYXNpbmdOb01hc2sgPQorICAgICAgICBT
VFJJTkdJRlkoCisgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKKyAgICAgICAg
ICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc2FtcGxlcjsKKyAgICAgICAgICAgIHZhcnlpbmcgaGln
aHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOworICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0
IHVfb3BhY2l0eTsKKyAgICAgICAgICAgIHVuaWZvcm0gdmVjMyB1X2V4cGFuZGVkUXVhZEVkZ2Vz
SW5TY3JlZW5TcGFjZVs4XTsKKyAgICAgICAgICAgIHZvaWQgbWFpbigpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgdmVjNCBzYW1wbGVkQ29sb3IgPSB0ZXh0dXJlMkQoc19zYW1wbGVy
LCBjbGFtcCh2X3NvdXJjZVRleENvb3JkLCAwLjAsIDEuMCkpOworICAgICAgICAgICAgICAgIHZl
YzMgcG9zID0gdmVjMyhnbF9GcmFnQ29vcmQueHksIDEpOworCisgICAgICAgICAgICAgICAgLy8g
VGhlIGRhdGEgcGFzc2VkIGluIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlIGlzIG1l
cmVseSB0aGUKKyAgICAgICAgICAgICAgICAvLyBwcmUtc2NhbGVkIGNvZWZmZWNpZW50cyBvZiB0
aGUgbGluZSBlcXVhdGlvbnMgZGVzY3JpYmluZyB0aGUgZm91ciBlZGdlcworICAgICAgICAgICAg
ICAgIC8vIG9mIHRoZSBleHBhbmRlZCBxdWFkIGluIHNjcmVlbiBzcGFjZSBhbmQgdGhlIHJlY3Rh
bmd1bGFyIGJvdW5kaW5nIGJveAorICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBleHBhbmRlZCBx
dWFkLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gV2UgYXJlIGRvaW5n
IGEgc2ltcGxlIGRpc3RhbmNlIGNhbGN1bGF0aW9uIGhlcmUgYWNjb3JkaW5nIHRvIHRoZSBmb3Jt
dWxhOgorICAgICAgICAgICAgICAgIC8vIChBKnAueCArIEIqcC55ICsgQykgLyBzcXJ0KEFeMiAr
IEJeMikgPSBkaXN0YW5jZSBmcm9tIGxpbmUgdG8gcAorICAgICAgICAgICAgICAgIC8vIE5vdGUg
dGhhdCBBLCBCIGFuZCBDIGhhdmUgYWxyZWFkeSBiZWVuIHNjYWxlZCBieSAxIC8gc3FydChBXjIg
KyBCXjIpLgorICAgICAgICAgICAgICAgIGZsb2F0IGEwID0gY2xhbXAoZG90KHVfZXhwYW5kZWRR
dWFkRWRnZXNJblNjcmVlblNwYWNlWzBdLCBwb3MpLCAwLjAsIDEuMCk7CisgICAgICAgICAgICAg
ICAgZmxvYXQgYTEgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2Vb
MV0sIHBvcyksIDAuMCwgMS4wKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBhMiA9IGNsYW1wKGRv
dCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVsyXSwgcG9zKSwgMC4wLCAxLjApOwor
ICAgICAgICAgICAgICAgIGZsb2F0IGEzID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJ
blNjcmVlblNwYWNlWzNdLCBwb3MpLCAwLjAsIDEuMCk7CisgICAgICAgICAgICAgICAgZmxvYXQg
YTQgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNF0sIHBvcyks
IDAuMCwgMS4wKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBhNSA9IGNsYW1wKGRvdCh1X2V4cGFu
ZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs1XSwgcG9zKSwgMC4wLCAxLjApOworICAgICAgICAg
ICAgICAgIGZsb2F0IGE2ID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNw
YWNlWzZdLCBwb3MpLCAwLjAsIDEuMCk7CisgICAgICAgICAgICAgICAgZmxvYXQgYTcgPSBjbGFt
cChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbN10sIHBvcyksIDAuMCwgMS4w
KTsKKworICAgICAgICAgICAgICAgIC8vIE5vdyB3ZSB3YW50IHRvIHJlZHVjZSB0aGUgYWxwaGEg
dmFsdWUgb2YgdGhlIGZyYWdtZW50IGlmIGl0IGlzIGNsb3NlIHRvIHRoZQorICAgICAgICAgICAg
ICAgIC8vIGVkZ2VzIG9mIHRoZSBleHBhbmRlZCBxdWFkIChvciByZWN0YW5ndWxhciBib3VuZGlu
ZyBib3ggLS0gd2hpY2ggc2VlbXMgdG8gYmUKKyAgICAgICAgICAgICAgICAvLyBpbXBvcnRhbnQg
Zm9yIGJhY2tmYWNpbmcgcXVhZHMpLiBOb3RlIHRoYXQgd2UgYXJlIGNvbWJpbmluZyB0aGUgY29u
dHJpYnV0aW9uCisgICAgICAgICAgICAgICAgLy8gZnJvbSB0aGUgKHRvcCB8fCBib3R0b20pIGFu
ZCAobGVmdCB8fCByaWdodCkgZWRnZSBieSBzaW1wbHkgbXVsdGlwbHlpbmcuIFRoaXMgZm9sbG93
cworICAgICAgICAgICAgICAgIC8vIHRoZSBhcHByb2FjaCBkZXNjcmliZWQgYXQ6IGh0dHA6Ly9o
dHRwLmRldmVsb3Blci5udmlkaWEuY29tL0dQVUdlbXMyL2dwdWdlbXMyX2NoYXB0ZXIyMi5odG1s
LAorICAgICAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB3aXRob3V0IHVzaW5nIEdhdXNzaWFu
IHdlaWdodHMuCisgICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gc2FtcGxlZENvbG9yICog
dV9vcGFjaXR5ICogbWluKG1pbihhMCwgYTIpICogbWluKGExLCBhMyksIG1pbihhNCwgYTYpICog
bWluKGE1LCBhNykpOworICAgICAgICAgICAgfQorICAgICAgICApOwogCi1UZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQpCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKLXsKLX0KKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogZnJhZ21lbnRSZWN0U2ltcGxlID0KKyAgICAgICAgU1RSSU5HSUZZKAorICAg
ICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisgICAgICAgICAgICB1bmlmb3JtIHNh
bXBsZXIyRFJlY3Qgc19zYW1wbGVyOworICAgICAgICAgICAgdW5pZm9ybSBsb3dwIHZlYzIgc19z
YW1wbGVyU2l6ZTsKKyAgICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7Cisg
ICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKKyAgICAgICAg
ICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxvd3Ag
dmVjNCBjb2xvciA9IHRleHR1cmUyRFJlY3Qoc19zYW1wbGVyLCBzX3NhbXBsZXJTaXplICogdl9z
b3VyY2VUZXhDb29yZCk7CisgICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xv
ci5yZ2IgKiB1X29wYWNpdHksIGNvbG9yLmEgKiB1X29wYWNpdHkpOworICAgICAgICAgICAgfQor
ICAgICAgICApOwogCi1UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6flRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyKCkKLXsKLX0KKyAgICBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2ltcGxl
ID0KKyAgICAgICAgU1RSSU5HSUZZKAorICAgICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4
OworICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfZmxpcDsKKyAgICAgICAgICAgIGF0
dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OworICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZf
c291cmNlVGV4Q29vcmQ7CisgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB2X3NvdXJjZVRleENvb3JkID0gdmVjMihhX3ZlcnRleC54LCBt
aXgoYV92ZXJ0ZXgueSwgMS4gLSBhX3ZlcnRleC55LCB1X2ZsaXApKTsKKyAgICAgICAgICAgICAg
ICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogYV92ZXJ0ZXg7CisgICAgICAgICAgICB9CisgICAg
ICAgICk7CiAKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgc3RhdGljIGNvbnN0IGNoYXIq
IHZlcnRleFNvbGlkQ29sb3IgPQorICAgICAgICBTVFJJTkdJRlkoCisgICAgICAgICAgICB1bmlm
b3JtIG1hdDQgdV9tYXRyaXg7CisgICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsK
KyAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiBhX3ZlcnRleDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgKTsKIAotLy8gQ3JlYXRlIGEgbm9ybWFsIGRpc3RyaWJ1dGlvbiBvZiAyMSB2YWx1ZXMg
YmV0d2VlbiAtMiBhbmQgMi4KLSNkZWZpbmUgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEggMTEK
LSNkZWZpbmUgR0FVU1NJQU5fS0VSTkVMX1NURVAgMC4yCiAKLVN0YW5kYXJkRmlsdGVyUHJvZ3Jh
bTo6flN0YW5kYXJkRmlsdGVyUHJvZ3JhbSgpCi17Ci0gICAgbV9jb250ZXh0LT5kZXRhY2hTaGFk
ZXIobV9pZCwgbV92ZXJ0ZXhTaGFkZXIpOwotICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKG1f
dmVydGV4U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihtX2lkLCBtX2ZyYWdt
ZW50U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcihtX2ZyYWdtZW50U2hhZGVy
KTsKLSAgICBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0obV9pZCk7Ci19CisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGZyYWdtZW50U29saWRDb2xvciA9CisgICAgICAgIFNUUklOR0lGWSgKKyAgICAg
ICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OworICAgICAgICAgICAgdW5pZm9ybSB2ZWM0
IHVfY29sb3I7CisgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB1X2NvbG9yOworICAgICAgICAgICAgfQorICAg
ICAgICApOwogCi1TdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBl
IHR5cGUsIHVuc2lnbmVkIHBhc3MpCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1f
aWQoMCkKLXsKLSAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPQotICAgICAgICAg
ICAgU1RSSU5HSUZZKAotICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4Owot
ICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdGV4Q29vcmQ7Ci0gICAgICAgICAgICAg
ICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7Ci0gICAgICAgICAgICAgICAgdm9pZCBt
YWluKHZvaWQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2X3RleENv
b3JkID0gdmVjMihhX3RleENvb3JkKTsKLSAgICAgICAgICAgICAgICAgICAgZ2xfUG9zaXRpb24g
PSBhX3ZlcnRleDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICApOworICAgIHN0YXRp
YyBjb25zdCBjaGFyKiB2ZXJ0ZXhGaWx0ZXIgPQorICAgICAgICBTVFJJTkdJRlkoCisgICAgICAg
ICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKKyAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0
IGFfdGV4Q29vcmQ7CisgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsK
KyAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHZfdGV4Q29vcmQgPSB2ZWMyKGFfdGV4Q29vcmQpOworICAgICAgICAgICAgICAgIGdsX1Bv
c2l0aW9uID0gYV92ZXJ0ZXg7CisgICAgICAgICAgICB9CisgICAgICAgICk7CiAKICNkZWZpbmUg
U1RBTkRBUkRfRklMVEVSKC4uLikgXAogICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7
XG4iXAogICAgICAgICAidmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7XG4iXAogICAgICAg
ICAidW5pZm9ybSBoaWdocCBmbG9hdCB1X2Ftb3VudDtcbiJcCi0gICAgICAgICJ1bmlmb3JtIHNh
bXBsZXIyRCB1X3RleHR1cmU7XG4iXAotICAgICAgICAjX19WQV9BUkdTX18gXAotICAgICAgICAi
dm9pZCBtYWluKHZvaWQpXG4geyBnbF9GcmFnQ29sb3IgPSBzaGFkZSh0ZXh0dXJlMkQodV90ZXh0
dXJlLCB2X3RleENvb3JkKSk7IH0iCisgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBs
ZXI7XG4iI19fVkFfQVJHU19fIFwKKyAgICAgICAgInZvaWQgbWFpbih2b2lkKVxuIHsgZ2xfRnJh
Z0NvbG9yID0gc2hhZGUodGV4dHVyZTJEKHNfc2FtcGxlciwgdl90ZXhDb29yZCkpOyB9IgogCi0g
ICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSAwOwotICAgIHN3aXRjaCAodHlw
ZSkgewotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6Ci0gICAgICAgIGZyYWdt
ZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAorICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBmcmFnbWVudEdyYXlzY2FsZUZpbHRlciA9CisgICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKICAg
ICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgbG93cCBmbG9hdCBhbW91bnQgPSAxLjAgLSB1X2Ftb3VudDsKQEAg
LTQwOSw5ICsyODksOSBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJv
Z3JhbShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRmlsdGVyTwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbG9yLmEpOwogICAgICAgICAgICAgfQogICAgICAgICApOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6Ci0gICAgICAgIGZyYWdt
ZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAorCisgICAgc3RhdGljIGNvbnN0IGNo
YXIqIGZyYWdtZW50U2VwaWFGaWx0ZXIgPQorICAgICAgICBTVEFOREFSRF9GSUxURVIoCiAgICAg
ICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9hbW91bnQ7CkBAIC00
MjEsOSArMzAxLDkgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dy
YW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEZpbHRlck8KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb2xvci5hKTsKICAgICAgICAgICAgIH0KICAgICAgICAgKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgotICAgICAgICBmcmFn
bWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKKworICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBmcmFnbWVudFNhdHVyYXRlRmlsdGVyID0KKyAgICAgICAgU1RBTkRBUkRfRklMVEVSKAog
ICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gdmVjNCgoMC4yMTMgKyAwLjc4NyAqIHVfYW1vdW50
KSAqIGNvbG9yLnIgKyAoMC43MTUgLSAwLjcxNSAqIHVfYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4w
NzIgLSAwLjA3MiAqIHVfYW1vdW50KSAqIGNvbG9yLmIsCkBAIC00MzIsOSArMzEyLDkgQEAgU3Rh
bmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIEZpbHRlck8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5h
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNl
ID0gU1RBTkRBUkRfRklMVEVSKAorCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50SHVl
Um90YXRlRmlsdGVyID0KKyAgICAgICAgU1RBTkRBUkRfRklMVEVSKAogICAgICAgICAgICAgbG93
cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICBoaWdocCBmbG9hdCBwaSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDY7CkBAIC00NDYsNTgg
KzMyNiw2MiBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRmlsdGVyTwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbG9yLmEpOwogICAgICAgICAgICAgfQogICAgICAgICApOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgotICAgICAgICBmcmFnbWVudFNo
YWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBm
cmFnbWVudEludmVydEZpbHRlciA9CisgICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKICAgICAgICAg
ICAgIGxvd3AgZmxvYXQgaW52ZXJ0KGxvd3AgZmxvYXQgbikgeyByZXR1cm4gKDEuMCAtIG4pICog
dV9hbW91bnQgKyBuICogKDEuMCAtIHVfYW1vdW50KTsgfQogICAgICAgICAgICAgbG93cCB2ZWM0
IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdmVjNChpbnZlcnQoY29sb3IuciksIGludmVydChjb2xvci5nKSwgaW52ZXJ0KGNvbG9y
LmIpLCBjb2xvci5hKTsKICAgICAgICAgICAgIH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6Ci0gICAgICAgIGZyYWdtZW50
U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAorCisgICAgc3RhdGljIGNvbnN0IGNoYXIq
IGZyYWdtZW50QnJpZ2h0bmVzc0ZpbHRlciA9CisgICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKICAg
ICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29sb3IucmdiICogKDEuMCArIHVfYW1vdW50
KSwgY29sb3IuYSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKLSAgICAgICAgZnJhZ21lbnRTaGFk
ZXJTb3VyY2UgPSBTVEFOREFSRF9GSUxURVIoCisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJh
Z21lbnRDb250cmFzdEZpbHRlciA9CisgICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKICAgICAgICAg
ICAgIGxvd3AgZmxvYXQgY29udHJhc3QobG93cCBmbG9hdCBuKSB7IHJldHVybiAobiAtIDAuNSkg
KiB1X2Ftb3VudCArIDAuNTsgfQogICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVj
NCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdmVjNChjb250
cmFzdChjb2xvci5yKSwgY29udHJhc3QoY29sb3IuZyksIGNvbnRyYXN0KGNvbG9yLmIpLCBjb2xv
ci5hKTsKICAgICAgICAgICAgIH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNl
ID0gU1RBTkRBUkRfRklMVEVSKAorCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50T3Bh
Y2l0eUZpbHRlciA9CisgICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKICAgICAgICAgICAgIGxvd3Ag
dmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHZlYzQoY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSAqIHVfYW1v
dW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0g
U1RSSU5HSUZZKAorCisjZGVmaW5lIEJMVVJfQ09OU1RBTlRTICIjZGVmaW5lIEdBVVNTSUFOX0tF
Uk5FTF9IQUxGX1dJRFRIIDExXG4jZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9TVEVQIDAuMlxuIgor
CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50Qmx1ckZpbHRlciA9CisgICAgICAgIEJM
VVJfQ09OU1RBTlRTCisgICAgICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAgIC8vIENyZWF0ZSBh
IG5vcm1hbCBkaXN0cmlidXRpb24gb2YgMjEgdmFsdWVzIGJldHdlZW4gLTIgYW5kIDIuCiAgICAg
ICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgICAgIHZhcnlpbmcgaGln
aHAgdmVjMiB2X3RleENvb3JkOwogICAgICAgICAgICAgdW5pZm9ybSBsb3dwIHZlYzIgdV9ibHVy
UmFkaXVzOwotICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlOworICAgICAg
ICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zYW1wbGVyOwogICAgICAgICAgICAgdW5pZm9ybSBm
bG9hdCB1X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsKIAogICAg
ICAgICAgICAgbG93cCB2ZWM0IHNhbXBsZUNvbG9yKGZsb2F0IHJhZGl1cykKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90ZXhDb29yZCArIHJhZGl1cyAqIHVf
Ymx1clJhZGl1czsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHVfdGV4dHVyZSwg
Y29vcmQpICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwg
MS4gJiYgY29vcmQueSA8IDEuKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHNf
c2FtcGxlciwgY29vcmQpICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBj
b29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgdmVjNCBibHVyKCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2ZWM0IHRvdGFs
ID0gc2FtcGxlQ29sb3IoMCkgKiB1X2dhdXNzaWFuS2VybmVsWzBdOworICAgICAgICAgICAgICAg
IHZlYzQgdG90YWwgPSBzYW1wbGVDb2xvcigwLikgKiB1X2dhdXNzaWFuS2VybmVsWzBdOwogICAg
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lE
VEg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVDb2xvcihmbG9h
dChpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07CiAgICAg
ICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUNvbG9yKGZsb2F0KC0xICogaSkgKiBHQVVT
U0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwpAQCAtNTExLDI4MiArMzk1
LDEzMCBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgRmlsdGVyTwogICAgICAgICAgICAgICAgIGdsX0ZyYWdD
b2xvciA9IGJsdXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOgotICAgICAgICBzd2l0Y2gg
KHBhc3MpIHsKLSAgICAgICAgY2FzZSAwOiB7Ci0gICAgICAgICAgICAvLyBGaXJzdCBwYXNzOiBo
b3Jpem9udGFsIGFscGhhIGJsdXIuCi0gICAgICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9
IFNUUklOR0lGWSgKLSAgICAgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSAg
ICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKLSAgICAgICAgICAg
ICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9zaGFkb3dCbHVyUmFkaXVzOwotICAgICAgICAgICAg
ICAgIHVuaWZvcm0gbG93cCB2ZWMyIHVfc2hhZG93T2Zmc2V0OwotICAgICAgICAgICAgICAgIHVu
aWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTsKLSAgICAgICAgICAgICAgICB1bmlmb3JtIGZsb2F0
IHVfZ2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdOwotCi0gICAgICAg
ICAgICAgICAgbG93cCBmbG9hdCBzYW1wbGVBbHBoYShmbG9hdCByYWRpdXMpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90ZXhDb29yZCAtIHVf
c2hhZG93T2Zmc2V0ICsgdmVjMihyYWRpdXMgKiB1X3NoYWRvd0JsdXJSYWRpdXMsIDAuKTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHR1cmUyRCh1X3RleHR1cmUsIGNvb3JkKS5hICog
ZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29v
cmQueSA8IDEuKTsKLSAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBsb3dwIGZs
b2F0IHNoYWRvd0JsdXJIb3Jpem9udGFsKCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGZsb2F0IHRvdGFsID0gc2FtcGxlQWxwaGEoMCkgKiB1X2dhdXNzaWFuS2VybmVs
WzBdOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tF
Uk5FTF9IQUxGX1dJRFRIOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9
IHNhbXBsZUFscGhhKGZsb2F0KGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lh
bktlcm5lbFtpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhh
KGZsb2F0KC0xICogaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVs
W2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRvdGFsOwotICAgICAgICAgICAgICAgIH0KKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21l
bnRTaGFkb3dGaWx0ZXIxID0KKyAgICAgICAgQkxVUl9DT05TVEFOVFMKKyAgICAgICAgU1RSSU5H
SUZZKAorICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisgICAgICAgICAgICB2
YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKKyAgICAgICAgICAgIHVuaWZvcm0gbG93cCBm
bG9hdCB1X2JsdXJSYWRpdXM7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVjMiB1X3NoYWRv
d09mZnNldDsKKyAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc2FtcGxlcjsKKyAgICAg
ICAgICAgIHVuaWZvcm0gZmxvYXQgdV9nYXVzc2lhbktlcm5lbFtHQVVTU0lBTl9LRVJORUxfSEFM
Rl9XSURUSF07CiAKLSAgICAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4sIDEuLCAx
LiwgMS4pICogc2hhZG93Qmx1ckhvcml6b250YWwoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICApOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBsb3dwIGZsb2F0IHNh
bXBsZUFscGhhKGZsb2F0IHJhZGl1cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2
ZWMyIGNvb3JkID0gdl90ZXhDb29yZCAtIHVfc2hhZG93T2Zmc2V0ICsgdmVjMihyYWRpdXMgKiB1
X2JsdXJSYWRpdXMsIDAuKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHNfc2Ft
cGxlciwgY29vcmQpLmEgKiBmbG9hdChjb29yZC54ID4gMC4gJiYgY29vcmQueSA+IDAuICYmIGNv
b3JkLnggPCAxLiAmJiBjb29yZC55IDwgMS4pOwogICAgICAgICAgICAgfQotICAgICAgICBjYXNl
IDE6IHsKLSAgICAgICAgICAgIC8vIFNlY29uZCBwYXNzOiB2ZXJ0aWNhbCBhbHBoYSBibHVyIGFu
ZCBjb21wb3NpdGUgd2l0aCBvcmlnaW4uCi0gICAgICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJj
ZSA9IFNUUklOR0lGWSgKLSAgICAgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsK
LSAgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKLSAgICAgICAg
ICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9zaGFkb3dCbHVyUmFkaXVzOwotICAgICAgICAg
ICAgICAgIHVuaWZvcm0gbG93cCB2ZWM0IHVfc2hhZG93Q29sb3I7Ci0gICAgICAgICAgICAgICAg
dW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlOwotICAgICAgICAgICAgICAgIHVuaWZvcm0gc2Ft
cGxlcjJEIHVfY29udGVudFRleHR1cmU7Ci0gICAgICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1
X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsKLQotICAgICAgICAg
ICAgICAgIGxvd3AgZmxvYXQgc2FtcGxlQWxwaGEoZmxvYXQgcikKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHZlYzIgY29vcmQgPSB2X3RleENvb3JkICsgdmVjMigwLiwg
ciAqIHVfc2hhZG93Qmx1clJhZGl1cyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0
dXJlMkQodV90ZXh0dXJlLCBjb29yZCkuYSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBjb29yZC55
ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgbG93cCBmbG9hdCBzaGFkb3dCbHVyVmVydGljYWwoKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgdG90YWwgPSBzYW1wbGVB
bHBoYSgwKSAqIHVfZ2F1c3NpYW5LZXJuZWxbMF07Ci0gICAgICAgICAgICAgICAgICAgIGZvciAo
aW50IGkgPSAxOyBpIDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7IGkrKykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoaSkgKiBHQVVTU0lB
Tl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwotICAgICAgICAgICAgICAgICAg
ICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoLTEgKiBpKSAqIEdBVVNTSUFOX0tFUk5F
TF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG90YWw7Ci0gICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgbG93cCB2ZWM0IHNvdXJjZU92ZXIobG93cCB2ZWM0IHNvdXJjZSwgbG93
cCB2ZWM0IGRlc3RpbmF0aW9uKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gQ29tcG9zaXRlIHRoZSBzaGFkb3cgd2l0aCB0aGUgb3JpZ2luYWwgdGV4dHVyZS4KLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZSArIGRlc3RpbmF0aW9uICogKDEuIC0gc291
cmNlLmEpOworICAgICAgICAgICAgbG93cCBmbG9hdCBzaGFkb3dCbHVySG9yaXpvbnRhbCgpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmxvYXQgdG90YWwgPSBzYW1wbGVBbHBoYSgw
LikgKiB1X2dhdXNzaWFuS2VybmVsWzBdOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAx
OyBpIDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7IGkrKykgeworICAgICAgICAgICAgICAg
ICAgICB0b3RhbCArPSBzYW1wbGVBbHBoYShmbG9hdChpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQ
KSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07CisgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNh
bXBsZUFscGhhKGZsb2F0KC0xICogaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNz
aWFuS2VybmVsW2ldOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHZvaWQg
bWFpbih2b2lkKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZ2xfRnJh
Z0NvbG9yID0gc291cmNlT3Zlcih0ZXh0dXJlMkQodV9jb250ZW50VGV4dHVyZSwgdl90ZXhDb29y
ZCksIHNoYWRvd0JsdXJWZXJ0aWNhbCgpICogdV9zaGFkb3dDb2xvcik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IHJldHVybiB0b3RhbDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQogCi0gICAgaWYgKCFmcmFn
bWVudFNoYWRlclNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotICAgIFBsYXRmb3JtM0RPYmplY3Qg
dmVydGV4U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OlZFUlRFWF9TSEFERVIpOwotICAgIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIgPSBt
X2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVS
KTsKLSAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIHZlcnRleFNoYWRl
clNvdXJjZSk7Ci0gICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIGZy
YWdtZW50U2hhZGVyU291cmNlKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW1JRCA9IG1f
Y29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOwotICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcih2
ZXJ0ZXhTaGFkZXIpOwotICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRl
cik7Ci0jaWYgIUxPR19ESVNBQkxFRAotICAgIFN0cmluZyBsb2c7Ci0gICAgbV9jb250ZXh0LT5n
ZXRTaGFkZXJJbmZvTG9nKGZyYWdtZW50U2hhZGVyKTsKLSAgICBXVEZMb2coJkxvZ0NvbXBvc2l0
aW5nLCAiJXNcbiIsIGxvZy5hc2NpaSgpLmRhdGEoKSk7Ci0jZW5kaWYKLSAgICBtX2NvbnRleHQt
PmF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIHZlcnRleFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5h
dHRhY2hTaGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5s
aW5rUHJvZ3JhbShwcm9ncmFtSUQpOworICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLiwgMS4sIDEu
LCAxLikgKiBzaGFkb3dCbHVySG9yaXpvbnRhbCgpOworICAgICAgICAgICAgfQorICAgICAgICAp
OwogCi0gICAgbV92ZXJ0ZXhBdHRyaWIgPSBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKHBy
b2dyYW1JRCwgImFfdmVydGV4Iik7Ci0gICAgbV90ZXhDb29yZEF0dHJpYiA9IG1fY29udGV4dC0+
Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiYV90ZXhDb29yZCIpOwotICAgIG1fdGV4dHVy
ZVVuaWZvcm1Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1J
RCwgInVfdGV4dHVyZSIpOwotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpHUkFZU0NBTEU6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgotICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6SFVFX1JPVEFURToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgotICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpDT05UUkFTVDoKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAg
bV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9u
KHByb2dyYW1JRCwgInVfYW1vdW50Iik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpCTFVSOgotICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5yYWRpdXMg
PSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2JsdXJSYWRpdXMi
KTsKLSAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLmJsdXIuZ2F1c3NpYW5LZXJuZWwgPSBtX2Nv
bnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2dhdXNzaWFuS2VybmVsIik7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoK
LSAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzID0gbV9jb250ZXh0
LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dCbHVyUmFkaXVzIik7Ci0g
ICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3NpYW5LZXJuZWwgPSBtX2NvbnRl
eHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2dhdXNzaWFuS2VybmVsIik7Ci0g
ICAgICAgIGlmICghcGFzcykKLSAgICAgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cu
b2Zmc2V0ID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFk
b3dPZmZzZXQiKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQg
dGhlIGNvbG9yIGFuZCB0aGUgY29udGVudCB0ZXh0dXJlIGluIHRoZSBzZWNvbmQgcGFzcywgdGhl
IGZpcnN0IHBhc3MgaXMgb25seSBhIGhvcml6b250YWwgYWxwaGEgYmx1ci4KLSAgICAgICAgICAg
IG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29sb3IgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1M
b2NhdGlvbihwcm9ncmFtSUQsICJ1X3NoYWRvd0NvbG9yIik7Ci0gICAgICAgICAgICBtX3VuaWZv
cm1Mb2NhdGlvbnMuc2hhZG93LmNvbnRlbnRUZXh0dXJlID0gbV9jb250ZXh0LT5nZXRVbmlmb3Jt
TG9jYXRpb24ocHJvZ3JhbUlELCAidV9jb250ZW50VGV4dHVyZSIpOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBtX2lk
ID0gcHJvZ3JhbUlEOwotICAgIG1fdmVydGV4U2hhZGVyID0gdmVydGV4U2hhZGVyOwotICAgIG1f
ZnJhZ21lbnRTaGFkZXIgPSBmcmFnbWVudFNoYWRlcjsKLX0KKyAgICAvLyBTZWNvbmQgcGFzczog
dmVydGljYWwgYWxwaGEgYmx1ciBhbmQgY29tcG9zaXRlIHdpdGggb3JpZ2luLgorICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRvd0ZpbHRlcjIgPQorICAgICAgICBCTFVSX0NPTlNU
QU5UUworICAgICAgICBTVFJJTkdJRlkoCisgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBm
bG9hdDsKKyAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOworICAgICAg
ICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfYmx1clJhZGl1czsKKyAgICAgICAgICAgIHVuaWZv
cm0gbG93cCB2ZWM0IHVfc2hhZG93Q29sb3I7CisgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIy
RCBzX3NhbXBsZXI7CisgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX2NvbnRlbnRUZXh0
dXJlOworICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFO
X0tFUk5FTF9IQUxGX1dJRFRIXTsKIAotUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+
IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKLXsK
LSAgICBSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBwcm9ncmFtID0gYWRvcHRSZWYobmV3
IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbShjb250ZXh0LCB0eXBlLCBwYXNzKSk7Ci0gICAgaWYgKCFw
cm9ncmFtLT5tX2lkKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGxvd3AgZmxvYXQg
c2FtcGxlQWxwaGEoZmxvYXQgcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2ZWMy
IGNvb3JkID0gdl90ZXhDb29yZCArIHZlYzIoMC4sIHIgKiB1X2JsdXJSYWRpdXMpOworICAgICAg
ICAgICAgICAgIHJldHVybiB0ZXh0dXJlMkQoc19zYW1wbGVyLCBjb29yZCkuYSAqIGZsb2F0KGNv
b3JkLnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAx
Lik7CisgICAgICAgICAgICB9CiAKLSAgICByZXR1cm4gcHJvZ3JhbTsKLX0KKyAgICAgICAgICAg
IGxvd3AgZmxvYXQgc2hhZG93Qmx1clZlcnRpY2FsKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBmbG9hdCB0b3RhbCA9IHNhbXBsZUFscGhhKDAuKSAqIHVfZ2F1c3NpYW5LZXJuZWxb
MF07CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxf
SEFMRl9XSURUSDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFs
cGhhKGZsb2F0KGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtp
XTsKKyAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoLTEgKiBp
KSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07CisgICAgICAg
ICAgICAgICAgfQogCi1zdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNzKGZsb2F0IHgpCi17Ci0gICAg
cmV0dXJuIGV4cCgtKHggKiB4KSAvIDIuKTsKLX0KKyAgICAgICAgICAgICAgICByZXR1cm4gdG90
YWw7CisgICAgICAgICAgICB9CiAKLXN0YXRpYyBmbG9hdCogZ2F1c3NpYW5LZXJuZWwoKQotewot
ICAgIHN0YXRpYyBib29sIHByZXBhcmVkID0gZmFsc2U7Ci0gICAgc3RhdGljIGZsb2F0IGtlcm5l
bFtHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSF0gPSB7MCwgfTsKKyAgICAgICAgICAgIGxvd3Ag
dmVjNCBzb3VyY2VPdmVyKGxvd3AgdmVjNCBzb3VyY2UsIGxvd3AgdmVjNCBkZXN0aW5hdGlvbikK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBDb21wb3NpdGUgdGhlIHNoYWRvdyB3
aXRoIHRoZSBvcmlnaW5hbCB0ZXh0dXJlLgorICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2Ug
KyBkZXN0aW5hdGlvbiAqICgxLiAtIHNvdXJjZS5hKTsKKyAgICAgICAgICAgIH0KIAotICAgIGlm
IChwcmVwYXJlZCkKLSAgICAgICAgcmV0dXJuIGtlcm5lbDsKKyAgICAgICAgICAgIHZvaWQgbWFp
bih2b2lkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHNv
dXJjZU92ZXIodGV4dHVyZTJEKHNfY29udGVudFRleHR1cmUsIHZfdGV4Q29vcmQpLCBzaGFkb3dC
bHVyVmVydGljYWwoKSAqIHVfc2hhZG93Q29sb3IpOworICAgICAgICAgICAgfQorICAgICAgICAp
OwogCi0gICAga2VybmVsWzBdID0gZ2F1c3MoMCk7Ci0gICAgZmxvYXQgc3VtID0ga2VybmVsWzBd
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURU
SDsgKytpKSB7Ci0gICAgICAgIGtlcm5lbFtpXSA9IGdhdXNzKGkgKiBHQVVTU0lBTl9LRVJORUxf
U1RFUCk7Ci0gICAgICAgIHN1bSArPSAyICoga2VybmVsW2ldOworICAgIGlmIChzcGVjcy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgc3BlY3MucmVzaXplKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpMYXN0RmlsdGVyKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OkRlZmF1bHRdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhTaW1wbGUsIGZyYWdtZW50U2ltcGxlKTsKKyAg
ICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNvbGlkQ29sb3JdID0gU2hh
ZGVyU3BlYyh2ZXJ0ZXhTb2xpZENvbG9yLCBmcmFnbWVudFNvbGlkQ29sb3IpOworICAgICAgICBz
cGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6UmVjdF0gPSBTaGFkZXJTcGVjKHZlcnRl
eFNpbXBsZSwgZnJhZ21lbnRSZWN0U2ltcGxlKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6Ok1hc2tlZF0gPSBTaGFkZXJTcGVjKHZlcnRleE9wYWNpdHlBbmRNYXNr
LCBmcmFnbWVudE9wYWNpdHlBbmRNYXNrKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6Ok1hc2tlZFJlY3RdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhPcGFjaXR5QW5kTWFz
aywgZnJhZ21lbnRSZWN0T3BhY2l0eUFuZE1hc2spOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6QW50aWFsaWFzZWRdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhTaW1wbGUs
IGZyYWdtZW50QW50aWFsaWFzaW5nTm9NYXNrKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6OkdyYXlzY2FsZUZpbHRlcl0gPSBTaGFkZXJTcGVjKHZlcnRleEZpbHRl
ciwgZnJhZ21lbnRHcmF5c2NhbGVGaWx0ZXIpOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6U2VwaWFGaWx0ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZy
YWdtZW50U2VwaWFGaWx0ZXIpOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6U2F0dXJhdGVGaWx0ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50
U2F0dXJhdGVGaWx0ZXIpOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6SHVlUm90YXRlRmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudEh1
ZVJvdGF0ZUZpbHRlcik7CisgICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpCcmlnaHRuZXNzRmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudEJy
aWdodG5lc3NGaWx0ZXIpOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6Q29udHJhc3RGaWx0ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50Q29u
dHJhc3RGaWx0ZXIpOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6
SW52ZXJ0RmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudEludmVydEZp
bHRlcik7CisgICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5
RmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudE9wYWNpdHlGaWx0ZXIp
OworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Qmx1ckZpbHRlcl0g
PSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRCbHVyRmlsdGVyKTsKKyAgICAgICAg
c3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNoYWRvd0ZpbHRlclBhc3MxXSA9IFNo
YWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudFNoYWRvd0ZpbHRlcjEpOworICAgICAgICBz
cGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2hhZG93RmlsdGVyUGFzczJdID0gU2hh
ZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50U2hhZG93RmlsdGVyMik7CiAgICAgfQogCi0g
ICAgLy8gTm9ybWFsaXplIHRoZSBrZXJuZWwKLSAgICBmbG9hdCBzY2FsZSA9IDEgLyBzdW07Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyAr
K2kpCi0gICAgICAgIGtlcm5lbFtpXSAqPSBzY2FsZTsKLQotICAgIHByZXBhcmVkID0gdHJ1ZTsK
LSAgICByZXR1cm4ga2VybmVsOworICAgIEFTU0VSVChzcGVjcy5zaXplKCkgPiBrZXkpOworICAg
IFNoYWRlclNwZWMmIHNwZWMgPSBzcGVjc1trZXldOworICAgIHZlcnRleFNvdXJjZSA9IHNwZWMu
dmVydGV4U2hhZGVyOworICAgIGZyYWdtZW50U291cmNlID0gc3BlYy5mcmFnbWVudFNoYWRlcjsK
IH0KIAotdm9pZCBTdGFuZGFyZEZpbHRlclByb2dyYW06OnByZXBhcmUoY29uc3QgRmlsdGVyT3Bl
cmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHBhc3MsIGNvbnN0IEludFNpemUmIHNpemUsIEdD
M0R1aW50IGNvbnRlbnRUZXh0dXJlKQorVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIDog
bV9jb250ZXh0KGNvbnRleHQpCiB7Ci0gICAgbV9jb250ZXh0LT51c2VQcm9ncmFtKG1faWQpOwot
ICAgIHN3aXRjaCAob3BlcmF0aW9uLmdldE9wZXJhdGlvblR5cGUoKSkgewotICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElB
OgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKLSAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6SFVFX1JPVEFURToKLSAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWYobV91bmlm
b3JtTG9jYXRpb25zLmFtb3VudCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpCUklHSFRORVNTOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKLSAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAgbV9jb250ZXh0LT51bmlmb3Jt
MWYobV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21w
b25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogewotICAgICAgICBj
b25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmx1ckZp
bHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbik7Ci0gICAgICAgIEZsb2F0U2l6ZSByYWRpdXM7Ci0K
LSAgICAgICAgLy8gQmx1ciBpcyBkb25lIGluIHR3byBwYXNzZXMsIGZpcnN0IGhvcml6b250YWxs
eSBhbmQgdGhlbiB2ZXJ0aWNhbGx5LiBUaGUgc2FtZSBzaGFkZXIgaXMgdXNlZCBmb3IgYm90aC4K
LSAgICAgICAgaWYgKHBhc3MpCi0gICAgICAgICAgICByYWRpdXMuc2V0SGVpZ2h0KGZsb2F0VmFs
dWVGb3JMZW5ndGgoYmx1ci5zdGREZXZpYXRpb24oKSwgc2l6ZS5oZWlnaHQoKSkgLyBzaXplLmhl
aWdodCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmFkaXVzLnNldFdpZHRoKGZsb2F0
VmFsdWVGb3JMZW5ndGgoYmx1ci5zdGREZXZpYXRpb24oKSwgc2l6ZS53aWR0aCgpKSAvIHNpemUu
d2lkdGgoKSk7Ci0KLSAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMmYobV91bmlmb3JtTG9jYXRp
b25zLmJsdXIucmFkaXVzLCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKTsKLSAgICAg
ICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLmdhdXNzaWFu
S2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFE
T1c6IHsKLSAgICAgICAgY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgc2hhZG93ID0g
c3RhdGljX2Nhc3Q8Y29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbik7
Ci0gICAgICAgIHN3aXRjaCAocGFzcykgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAv
LyBGaXJzdCBwYXNzOiB2ZXJ0aWNhbCBhbHBoYSBibHVyLgotICAgICAgICAgICAgbV9jb250ZXh0
LT51bmlmb3JtMmYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5vZmZzZXQsIGZsb2F0KHNoYWRv
dy5sb2NhdGlvbigpLngoKSkgLyBmbG9hdChzaXplLndpZHRoKCkpLCBmbG9hdChzaGFkb3cubG9j
YXRpb24oKS55KCkpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICAgICAgbV9jb250
ZXh0LT51bmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzLCBzaGFk
b3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLndpZHRoKCkpKTsKLSAgICAgICAgICAgIG1f
Y29udGV4dC0+dW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNzaWFuS2Vy
bmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgLy8gU2Vjb25kIHBh
c3M6IHdlIG5lZWQgdGhlIHNoYWRvdyBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBmb3Ig
Y29tcG9zaXRpbmcuCi0gICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihtX3VuaWZvcm1M
b2NhdGlvbnMuc2hhZG93LmJsdXJSYWRpdXMsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0
KHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihtX3Vu
aWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFM
Rl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2
ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKTsKLSAgICAgICAgICAgIG1fY29u
dGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbnRlbnRU
ZXh0dXJlKTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKG1fdW5pZm9ybUxvY2F0
aW9ucy5zaGFkb3cuY29udGVudFRleHR1cmUsIDEpOwotICAgICAgICAgICAgZmxvYXQgciwgZywg
YiwgYTsKLSAgICAgICAgICAgIHNoYWRvdy5jb2xvcigpLmdldFJHQkEociwgZywgYiwgYSk7Ci0g
ICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm00ZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93
LmNvbG9yLCByLCBnLCBiLCBhKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CiB9
CiAKLVBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6Z2V0U2hhZGVyRm9yRmlsdGVyKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgZmlsdGVy
LCB1bnNpZ25lZCBwYXNzKQorVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6On5UZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcigpCiB7Ci0gICAgUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4g
cHJvZ3JhbTsKLSAgICBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSA9IGZpbHRl
ci5nZXRPcGVyYXRpb25UeXBlKCk7Ci0gICAgaW50IGtleSA9IGludCh0eXBlKSB8IChwYXNzIDw8
IDE2KTsKLSAgICBGaWx0ZXJNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9maWx0ZXJNYXAuZmlu
ZChrZXkpOwotICAgIGlmIChpdGVyYXRvciA9PSBtX2ZpbHRlck1hcC5lbmQoKSkgewotICAgICAg
ICBwcm9ncmFtID0gU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpjcmVhdGUobV9jb250ZXh0LCB0eXBl
LCBwYXNzKTsKLSAgICAgICAgaWYgKCFwcm9ncmFtKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICAgICAgbV9maWx0ZXJNYXAuYWRkKGtleSwgcHJvZ3JhbSk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIHByb2dyYW0gPSBpdGVyYXRvci0+dmFsdWU7Ci0KLSAgICByZXR1cm4gcHJvZ3JhbTsKIH0K
IAotdW5zaWduZWQgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFBhc3Nlc1JlcXVpcmVk
Rm9yRmlsdGVyKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgb3BlcmF0aW9uKSBjb25zdAorUGFzc1Jl
ZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6OmdldFNoYWRlclByb2dyYW0oU2hhZGVyS2V5IGtleSkKIHsKLSAgICBzd2l0Y2ggKG9wZXJh
dGlvbi5nZXRPcGVyYXRpb25UeXBlKCkpIHsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JB
WVNDQUxFOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKLSAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6U0FUVVJBVEU6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RB
VEU6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKLSAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6QlJJR0hUTkVTUzoKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6
Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIHJldHVybiAxOwot
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpEUk9QX1NIQURPVzoKLSAgICAgICAgLy8gV2UgdXNlIHR3by1wYXNzZXMgKHZlcnRpY2FsK2hv
cml6b250YWwpIGZvciBibHVyIGFuZCBkcm9wLXNoYWRvdy4KLSAgICAgICAgcmV0dXJuIDI7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtTWFwOjppdGVyYXRvciBpdCA9IG1fcHJvZ3JhbXMuZmluZChrZXkpOworICAg
IGlmIChpdCAhPSBtX3Byb2dyYW1zLmVuZCgpKQorICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwog
CisgICAgU3RyaW5nIHZlcnRleFNoYWRlcjsKKyAgICBTdHJpbmcgZnJhZ21lbnRTaGFkZXI7Cisg
ICAgZ2V0U2hhZGVyU3BlYyhrZXksIHZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIpOworICAg
IFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtOjpjcmVhdGUobV9jb250ZXh0LCB2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50
U2hhZGVyKTsKKyAgICBtX3Byb2dyYW1zLmFkZChrZXksIHByb2dyYW0pOworICAgIHJldHVybiBw
cm9ncmFtOwogfQotCi0jZW5kaWYKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuaAppbmRleCAxZmZiNzEwMGJhZTgyZmJlYTE1OGYxODc0NGIxMTBmYzdk
MDY2NTRlLi40ODcxYWQyYjM2M2M3MTk3MWEzMWZkYWVlM2E1MGQwYzU2OWVkN2MxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaApAQCAtMjEsMjMzICsyMSwxMDMgQEAK
ICNpZm5kZWYgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXJfaAogI2RlZmluZSBUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcl9oCiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYm
IFVTRShURVhUVVJFX01BUFBFUikKLQotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2lmIFVTRShU
RVhUVVJFX01BUFBFUikKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUg
IkludFNpemUuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKLSNpbmNsdWRlICJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgPFN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKENTU19G
SUxURVJTKQotI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIKLSNlbmRpZgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBCaXRtYXBUZXh0dXJlOwotY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI7Cisj
ZGVmaW5lIFRFWE1BUF9ERUNMQVJFX1ZBUklBQkxFKEFjY2Vzc29yLCBOYW1lLCBUeXBlKSBHQzNE
dWludCBBY2Nlc3NvciMjTG9jYXRpb24oKSB7IHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcgbmFt
ZShOYW1lKTsgcmV0dXJuIGdldExvY2F0aW9uKG5hbWUsIFR5cGUpOyB9CisjZGVmaW5lIFRFWE1B
UF9ERUNMQVJFX1VOSUZPUk0oQWNjZXNzb3IpIFRFWE1BUF9ERUNMQVJFX1ZBUklBQkxFKEFjY2Vz
c29yLCAidV8iI0FjY2Vzc29yLCBVbmlmb3JtVmFyaWFibGUpCisjZGVmaW5lIFRFWE1BUF9ERUNM
QVJFX0FUVFJJQlVURShBY2Nlc3NvcikgVEVYTUFQX0RFQ0xBUkVfVkFSSUFCTEUoQWNjZXNzb3Is
ICJhXyIjQWNjZXNzb3IsIEF0dHJpYlZhcmlhYmxlKQorI2RlZmluZSBURVhNQVBfREVDTEFSRV9T
QU1QTEVSKEFjY2Vzc29yKSBURVhNQVBfREVDTEFSRV9WQVJJQUJMRShBY2Nlc3NvciwgInNfIiNB
Y2Nlc3NvciwgVW5pZm9ybVZhcmlhYmxlKQogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbSA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiB7CiBw
dWJsaWM6Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBpZCgpIHsgcmV0dXJuIG1faWQ7IH0KLSAgICBH
QzNEdWludCB2ZXJ0ZXhBdHRyaWIoKSB7IHJldHVybiBtX3ZlcnRleEF0dHJpYjsgfQorICAgIFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbUlEKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IGNyZWF0ZShQ
YXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHZlcnRl
eCwgY29uc3QgU3RyaW5nJiBmcmFnbWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4LCBmcmFnbWVu
dCkpOworICAgIH0KIAotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKEdyYXBoaWNzQ29u
dGV4dDNEKiwgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFn
bWVudFNoYWRlclNvdXJjZSk7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0oKTsKIAotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKGZsb2F0IG9wYWNpdHksIGNvbnN0IEJp
dG1hcFRleHR1cmUqKSB7IH0KLSAgICBHQzNEaW50IG1hdHJpeExvY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXRyaXhMb2NhdGlvbjsgfQotICAgIEdDM0RpbnQgZmxpcExvY2F0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9mbGlwTG9jYXRpb247IH0KLSAgICBHQzNEaW50IHRleHR1cmVTaXplTG9j
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVTaXplTG9jYXRpb247IH0KLSAgICBHQzNE
aW50IHNvdXJjZVRleHR1cmVMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlVGV4dHVy
ZUxvY2F0aW9uOyB9Ci0gICAgR0MzRGludCBtYXNrVGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXNrVGV4dHVyZUxvY2F0aW9uOyB9Ci0gICAgR0MzRGludCBvcGFjaXR5TG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHlMb2NhdGlvbjsgfQotCi0gICAgc3RhdGljIGJv
b2wgaXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihHQzNEaW50IGxvY2F0aW9uKSB7IHJldHVybiBsb2Nh
dGlvbiA+PSAwOyB9Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIGdldFVuaWZvcm1Mb2NhdGlvbihH
QzNEaW50JiB2YXIsIGNvbnN0IGNoYXIqIG5hbWUpOwotICAgIHZvaWQgaW5pdGlhbGl6ZVByb2dy
YW0oKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpIHsgfQotICAgIGNvbnN0IGNoYXIq
IHZlcnRleFNoYWRlclNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGV4U2hhZGVyU291cmNl
LmRhdGEoKTsgfQotICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKCkgY29uc3Qg
eyByZXR1cm4gbV9mcmFnbWVudFNoYWRlclNvdXJjZS5kYXRhKCk7IH0KKyAgICBURVhNQVBfREVD
TEFSRV9BVFRSSUJVVEUodmVydGV4KQorICAgIFRFWE1BUF9ERUNMQVJFX0FUVFJJQlVURSh0ZXhD
b29yZCkKIAotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7Ci0gICAgUGxhdGZvcm0z
RE9iamVjdCBtX2lkOwotICAgIEdDM0R1aW50IG1fdmVydGV4QXR0cmliOwotICAgIFBsYXRmb3Jt
M0RPYmplY3QgbV92ZXJ0ZXhTaGFkZXI7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZyYWdtZW50
U2hhZGVyOwotICAgIEdDM0RpbnQgbV9tYXRyaXhMb2NhdGlvbjsKLSAgICBHQzNEaW50IG1fZmxp
cExvY2F0aW9uOwotICAgIEdDM0RpbnQgbV90ZXh0dXJlU2l6ZUxvY2F0aW9uOwotICAgIEdDM0Rp
bnQgbV9zb3VyY2VUZXh0dXJlTG9jYXRpb247Ci0gICAgR0MzRGludCBtX29wYWNpdHlMb2NhdGlv
bjsKLSAgICBHQzNEaW50IG1fbWFza1RleHR1cmVMb2NhdGlvbjsKLQotcHJpdmF0ZToKLSAgICBD
U3RyaW5nIG1fdmVydGV4U2hhZGVyU291cmNlOwotICAgIENTdHJpbmcgbV9mcmFnbWVudFNoYWRl
clNvdXJjZTsKLX07CisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShtYXRyaXgpCisgICAgVEVY
TUFQX0RFQ0xBUkVfVU5JRk9STShmbGlwKQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0odGV4
dHVyZVNpemUpCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShvcGFjaXR5KQorICAgIFRFWE1B
UF9ERUNMQVJFX1VOSUZPUk0oY29sb3IpCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShleHBh
bmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2UpCisgICAgVEVYTUFQX0RFQ0xBUkVfU0FNUExFUihz
YW1wbGVyKQorICAgIFRFWE1BUF9ERUNMQVJFX1NBTVBMRVIobWFzaykKIAogI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKLWNsYXNzIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gewotcHVibGljOgotICAgIHZpcnR1YWwgflN0YW5k
YXJkRmlsdGVyUHJvZ3JhbSgpOwotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKGNvbnN0IEZpbHRl
ck9wZXJhdGlvbiYsIHVuc2lnbmVkIHBhc3MsIGNvbnN0IEludFNpemUmLCBHQzNEdWludCBjb250
ZW50VGV4dHVyZSk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFt
PiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5
cGUsIHVuc2lnbmVkIHBhc3MpOwotICAgIEdDM0R1aW50IHZlcnRleEF0dHJpYigpIGNvbnN0IHsg
cmV0dXJuIG1fdmVydGV4QXR0cmliOyB9Ci0gICAgR0MzRHVpbnQgdGV4Q29vcmRBdHRyaWIoKSBj
b25zdCB7IHJldHVybiBtX3RleENvb3JkQXR0cmliOyB9Ci0gICAgR0MzRHVpbnQgdGV4dHVyZVVu
aWZvcm0oKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb247IH0KLXByb3Rl
Y3RlZDoKLSAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwotcHJpdmF0ZToKLSAgICBT
dGFuZGFyZEZpbHRlclByb2dyYW0oKTsKLSAgICBTdGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhp
Y3NDb250ZXh0M0QqLCBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIHVuc2lnbmVkIHBh
c3MpOwotICAgIFBsYXRmb3JtM0RPYmplY3QgbV9pZDsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1f
dmVydGV4U2hhZGVyOwotICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mcmFnbWVudFNoYWRlcjsKLSAg
ICBHQzNEdWludCBtX3ZlcnRleEF0dHJpYjsKLSAgICBHQzNEdWludCBtX3RleENvb3JkQXR0cmli
OwotICAgIEdDM0R1aW50IG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlvbjsKLSAgICB1bmlvbiB7Ci0g
ICAgICAgIEdDM0R1aW50IGFtb3VudDsKLQotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAg
R0MzRHVpbnQgcmFkaXVzOwotICAgICAgICAgICAgR0MzRHVpbnQgZ2F1c3NpYW5LZXJuZWw7Ci0g
ICAgICAgIH0gYmx1cjsKLQotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0MzRHVpbnQg
Ymx1clJhZGl1czsKLSAgICAgICAgICAgIEdDM0R1aW50IGNvbG9yOwotICAgICAgICAgICAgR0Mz
RHVpbnQgb2Zmc2V0OwotICAgICAgICAgICAgR0MzRHVpbnQgY29udGVudFRleHR1cmU7Ci0gICAg
ICAgICAgICBHQzNEdWludCBnYXVzc2lhbktlcm5lbDsKLSAgICAgICAgfSBzaGFkb3c7Ci0gICAg
fSBtX3VuaWZvcm1Mb2NhdGlvbnM7Ci19OworICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oYW1v
dW50KQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oZ2F1c3NpYW5LZXJuZWwpCisgICAgVEVY
TUFQX0RFQ0xBUkVfVU5JRk9STShibHVyUmFkaXVzKQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZP
Uk0oc2hhZG93Q29sb3IpCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShzaGFkb3dPZmZzZXQp
CisgICAgVEVYTUFQX0RFQ0xBUkVfU0FNUExFUihjb250ZW50VGV4dHVyZSkKICNlbmRpZgogCi1j
bGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSA6IHB1YmxpYyBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1TaW1wbGUoY29udGV4dCkpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKEdyYXBoaWNzQ29udGV4dDNEKik7Ci1wcml2
YXRlOgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCk7Ci19OwotCi1jbGFz
cyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUgOiBwdWJsaWMgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZT4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoY29udGV4dCkpOwotICAgIH0KLQotcHJvdGVjdGVk
OgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZShHcmFwaGljc0NvbnRl
eHQzRCopOwogcHJpdmF0ZToKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1w
bGUoKTsKLX07Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1h
c2sgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewotcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s+
IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayhj
b250ZXh0KSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1PcGFjaXR5QW5kTWFzayhHcmFwaGljc0NvbnRleHQzRCopOwotcHJpdmF0ZToKLSAgICBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKCk7Ci19OwotCi1jbGFzcyBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayA6IHB1YmxpYyBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s+IGNyZWF0ZShHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soY29udGV4dCkp
OwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVj
dE9wYWNpdHlBbmRNYXNrKEdyYXBoaWNzQ29udGV4dDNEKik7Ci1wcml2YXRlOgotICAgIFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKCk7Ci19OwotCi1jbGFzcyBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IgOiBwdWJsaWMgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcj4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoY29udGV4dCkpOwotICAgIH0KLQotICAgIEdDM0RpbnQg
Y29sb3JMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JMb2NhdGlvbjsgfQotCi1wcm90
ZWN0ZWQ6Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yKEdyYXBoaWNz
Q29udGV4dDNEKik7Ci1wcml2YXRlOgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29s
aWRDb2xvcigpOwotICAgIEdDM0RpbnQgbV9jb2xvckxvY2F0aW9uOwotfTsKLQotY2xhc3MgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2sgOiBwdWJsaWMgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrPiBjcmVhdGUoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrKGNvbnRleHQpKTsK
LSAgICB9Ci0KLSAgICBHQzNEaW50IGV4cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0dXJlQ29vcmRp
bmF0ZXNMb2NhdGlvbigpIHsgcmV0dXJuIG1fZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVD
b3JkaW5hdGVzTG9jYXRpb247IH0KLSAgICBHQzNEaW50IGV4cGFuZGVkUXVhZEVkZ2VzSW5TY3Jl
ZW5TcGFjZUxvY2F0aW9uKCkgeyByZXR1cm4gbV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3Bh
Y2VMb2NhdGlvbjsgfQorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+LCBjb25zdCBTdHJpbmcmIHZlcnRleFNoYWRlclNvdXJjZSwgY29u
c3QgU3RyaW5nJiBmcmFnbWVudFNoYWRlclNvdXJjZSk7CisgICAgUGxhdGZvcm0zRE9iamVjdCBt
X3ZlcnRleFNoYWRlcjsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZnJhZ21lbnRTaGFkZXI7CiAK
LXByb3RlY3RlZDoKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05v
TWFzayhHcmFwaGljc0NvbnRleHQzRCopOwotcHJpdmF0ZToKLSAgICBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzaygpOworICAgIGVudW0gVmFyaWFibGVUeXBlIHsg
VW5pZm9ybVZhcmlhYmxlLCBBdHRyaWJWYXJpYWJsZSB9OworICAgIEdDM0R1aW50IGdldExvY2F0
aW9uKGNvbnN0IEF0b21pY1N0cmluZyYsIFZhcmlhYmxlVHlwZSk7CiAKLSAgICBHQzNEaW50IG1f
ZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb3JkaW5hdGVzTG9jYXRpb247Ci0gICAgR0Mz
RGludCBtX2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uOworICAgIFJlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9p
ZDsKKyAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgR0MzRHVpbnQ+IG1fdmFyaWFibGVzOwogfTsK
IAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgewogcHVibGljOgotICAgIGVudW0g
U2hhZGVyVHlwZSB7Ci0gICAgICAgIEludmFsaWQgPSAwLCAvLyBIYXNoTWFwcyBkbyBub3QgbGlr
ZSAwIGFzIGEga2V5LgotICAgICAgICBTaW1wbGUsCi0gICAgICAgIEFudGlhbGlhc2luZ05vTWFz
aywKLSAgICAgICAgUmVjdFNpbXBsZSwKLSAgICAgICAgT3BhY2l0eUFuZE1hc2ssCi0gICAgICAg
IFJlY3RPcGFjaXR5QW5kTWFzaywKLSAgICAgICAgU29saWRDb2xvcgorICAgIGVudW0gU2hhZGVy
S2V5IHsKKyAgICAgICAgSW52YWxpZCA9IDAsCisgICAgICAgIERlZmF1bHQsCisgICAgICAgIFJl
Y3QsCisgICAgICAgIE1hc2tlZCwKKyAgICAgICAgTWFza2VkUmVjdCwKKyAgICAgICAgU29saWRD
b2xvciwKKyAgICAgICAgQW50aWFsaWFzZWQsCisgICAgICAgIEdyYXlzY2FsZUZpbHRlciwKKyAg
ICAgICAgU2VwaWFGaWx0ZXIsCisgICAgICAgIFNhdHVyYXRlRmlsdGVyLAorICAgICAgICBIdWVS
b3RhdGVGaWx0ZXIsCisgICAgICAgIEJyaWdodG5lc3NGaWx0ZXIsCisgICAgICAgIENvbnRyYXN0
RmlsdGVyLAorICAgICAgICBPcGFjaXR5RmlsdGVyLAorICAgICAgICBJbnZlcnRGaWx0ZXIsCisg
ICAgICAgIEJsdXJGaWx0ZXIsCisgICAgICAgIFNoYWRvd0ZpbHRlclBhc3MxLAorICAgICAgICBT
aGFkb3dGaWx0ZXJQYXNzMiwKKyAgICAgICAgTGFzdEZpbHRlcgogICAgIH07CiAKICAgICBUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpIHsgfQogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyKEdyYXBoaWNzQ29udGV4dDNEKik7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIoKTsKIAotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB1bnNpZ25lZCBnZXRQ
YXNzZXNSZXF1aXJlZEZvckZpbHRlcihjb25zdCBGaWx0ZXJPcGVyYXRpb24mKSBjb25zdDsKLSAg
ICBQYXNzUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gZ2V0U2hhZGVyRm9yRmlsdGVyKGNv
bnN0IEZpbHRlck9wZXJhdGlvbiYsIHVuc2lnbmVkIHBhc3MpOwotI2VuZGlmCi0KLSAgICBQYXNz
UmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBnZXRTaGFkZXJQcm9ncmFtKFNoYWRl
clR5cGUpOwotICAgIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENv
bG9yPiBzb2xpZENvbG9yUHJvZ3JhbSgpOwotICAgIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s+IGFudGlhbGlhc2luZ05vTWFza1Byb2dyYW0o
KTsKKyAgICBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBnZXRTaGFkZXJQ
cm9ncmFtKFNoYWRlcktleSk7CiAKIHByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFNoYWRl
clR5cGUsIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4sIERlZmF1bHRIYXNoPGlu
dD46Okhhc2gsIEhhc2hUcmFpdHM8aW50PiA+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFw
OwotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwIG1fdGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1NYXA7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKLQotI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKLSAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8U3RhbmRh
cmRGaWx0ZXJQcm9ncmFtPiA+IEZpbHRlck1hcDsKLSAgICBGaWx0ZXJNYXAgbV9maWx0ZXJNYXA7
Ci0jZW5kaWYKKyAgICB0eXBlZGVmIEhhc2hNYXA8U2hhZGVyS2V5LCBSZWZQdHI8VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0+LCBEZWZhdWx0SGFzaDxpbnQ+OjpIYXNoLCBIYXNoVHJhaXRzPGlu
dD4gPiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDsKKyAgICBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbU1hcCBtX3Byb2dyYW1zOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
bV9jb250ZXh0OwogfTsKIAogfQotCiAjZW5kaWYKIAogI2VuZGlmIC8vIFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167669</attachid>
            <date>2012-10-08 18:55:10 -0700</date>
            <delta_ts>2012-10-08 19:14:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86048-20121009045410.patch</filename>
            <type>text/plain</type>
            <size>81219</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQzNTJhMTZiYTAzNmU5
ZDMwZjkwNTdjNTkyNDIxZGU0MDE4YWIwNy4uZDNhNGFjZjAxNzVmNjM1NmRiZjE2NTRjMTE3Zjhi
YThkYWM2Y2NjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDEyLTEwLTA4ICBOb2Ft
IFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBbVGV4bWFw
XSBSZWZhY3RvciBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlciB0byBiZSBjbGVhcmVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjA0OAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByZXZpb3VzIGltcGxl
bWVudGF0aW9uIG9mIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIHdhcyB2ZXJ5IHZlcmJvc2Us
IGNhbGxpbmcgZm9yIHRvbworICAgICAgICBtYW55IGNhc3RzIGFuZCBhbWJpZ3VvdXMgb3duZXJz
aGlwLgorICAgICAgICBUaGlzIHJlZmFjdG9yIGRvZXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAg
MS4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gaXMgb25lIGNsYXNzIHdpdGhvdXQgc3ViY2xh
c3Nlcy4KKyAgICAgICAgMi4gVW5pZm9ybS9BdHRyaWJ1dGUgYWNjZXNzb3JzIGFyZSBnZW5lcmF0
ZWQgYnkgc3BlY2lhbCBtYWNyb3MgKFRFWE1BUF9ERUNMQVJFXy4uLikgdGhhdAorICAgICAgICAg
ICBnZW5lcmF0ZSBib3RoIHRoZSBDKysgYWNjZXNzIGZ1bmN0aW9uLCBhcyB3ZWxsIGFzIHRoZSBH
TFNMIG5hbWUgb2YgdGhlIHZhcmlhYmxlLiBUaGlzCisgICAgICAgICAgIGFsbG93cyBhZGRpbmcv
cmVtb3ZpbmcgdmFyaWFibGVzIGZyb20gYSBzaGFkZXIgd2l0aG91dCBhZGRpbmcgYnJvaWxlci1w
bGF0ZSBjb2RlIGxpa2UKKyAgICAgICAgICAgYmVmb3JlLgorCisgICAgICAgIEFmdGVyIHRoaXMg
Y2hhbmdlIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIGhhcyBvbmx5IG9uZSByZXNwb25zaWJp
bGl0eSAtIGRlYWxpbmcgd2l0aAorICAgICAgICBUZXh0dXJlTWFwcGVyR0wncyBidWlsdC1pbiBz
aGFkZXJzIGFuZCB0aGVpciBsaWZlY3ljbGUuIFByZXBhcmluZyBmaWx0ZXJzIGV0Yy4gaXMgZG9u
ZQorICAgICAgICBpbiBUZXh0dXJlTWFwcGVyR0wuCisKKyAgICAgICAgVGhpcyBpcyBhIHJlZmFj
dG9yIHdpdGhvdXQgbmV3IGZ1bmN0aW9uYWxpdHkuIEl0IGhhcyBiZWVuIHZlcmlmaWVkIHRvIG5v
dCBicmVhayBhbnkgZXhpc3RpbmcKKyAgICAgICAgcmVsZXZhbnQgdGVzdC4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckdMOjpkcmF3VGV4dHVyZVJlY3RhbmdsZUFSQik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJHTDo6ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKToKKyAgICAgICAgICAgIFVzZSB0aGUg
TUFDUk8tZ2VuZXJhdGVkIHVuaWZvcm0gYWNjZXNzb3JzLgorCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OmtleUZvckZpbHRlclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0UGFzc2VzUmVxdWlyZWRGb3JGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Z2F1c3MpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2F1c3NpYW5LZXJuZWwpOgorICAgICAgICAoV2ViQ29yZTo6cHJl
cGFyZUZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpk
cmF3RmlsdGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjphcHBseUZp
bHRlcnMpOgorICAgICAgICAgICAgTW92ZSB0aGUgZmlsdGVyIGxvZ2ljIHRvIFRleHR1cmVNYXBw
ZXJHTAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Z2V0TG9jYXRpb24pOgorICAgICAgICAoU2hhZGVy
U3BlYyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkZXJTcGVjOjpTaGFkZXJTcGVjKToKKyAgICAg
ICAgKFdlYkNvcmU6OmdldFNoYWRlclNwZWMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjp+VGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OmdldFNoYWRlclByb2dyYW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6cHJvZ3JhbUlEKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpjb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpjcmVhdGUpOgorICAgICAg
ICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0pOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXIpOgorICAgICAgICAgICAgU2VlIGRlc2NyaXB0aW9uLgorCiAyMDEyLTEwLTA4
ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUG9zdC1yMTMw
MjI2IENsZWFudXA6IENvbW1lbnQgYSBjb21wbGljYXRlZCBpZiBzdGF0ZW1lbnQgYW5kIG1ha2Ug
aXQgYSBoZWxwZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDkxNjliZmIwOWIzNmFlMjhi
NDg3MTY1ZjEzNzBiODNjOTIyMGEwM2IuLjZmMzI5MTg3ZTE5NzQ4MDcxNzczMTBjNGNiOWNmY2Y5
NDg1Y2RmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUg
Ikxlbmd0aEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCIKICNpbmNsdWRlICJUaW1lci5oIgpAQCAt
MjY2LDcgKzI2Nyw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjplbmRQYWludGluZygpCiAKIHZv
aWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYgcXVhZFRvRHJhdywg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0qIHNoYWRlclByb2dyYW0sIEdDM0RlbnVtIGRyYXdpbmdNb2RlLCBib29s
IG5lZWRzQmxlbmRpbmcpCiB7Ci0gICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5h
YmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7CiAg
ICAgbV9jb250ZXh0M0QtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZF
UiwgMCk7CiAKICAgICBjb25zdCBHQzNEZmxvYXQgcXVhZFtdID0gewpAQCAtMjc1LDcgKzI3Niw3
IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYgcXVhZFRv
RHJhdywgY29uc3QgVHJhbnNmb3JtYXRpb25NCiAgICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVj
dE1hcHBlZFRvVW5pdFNxdWFyZS5wMygpLngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVk
VG9Vbml0U3F1YXJlLnAzKCkueSgpLAogICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBw
ZWRUb1VuaXRTcXVhcmUucDQoKS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5p
dFNxdWFyZS5wNCgpLnkoKQogICAgIH07Ci0gICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBv
aW50ZXIoc2hhZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmliKCksIDIsIEdyYXBoaWNzQ29udGV4dDNE
OjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIocXVhZCkpOworICAgIG1fY29udGV4dDNELT52
ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlclByb2dyYW0tPnZlcnRleExvY2F0aW9uKCksIDIsIEdy
YXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIocXVhZCkpOwogCiAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0
YSgpLnByb2plY3Rpb25NYXRyaXgpLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkubXVsdGlwbHko
VHJhbnNmb3JtYXRpb25NYXRyaXgoCiAgICAgICAgICAgICBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFy
Z2V0UmVjdC53aWR0aCgpLCAwLCAwLCAwLApAQCAtMjk3LDcgKzI5OCw3IEBAIHZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYgcXVhZFRvRHJhdywgY29uc3QgVHJh
bnNmb3JtYXRpb25NCiAgICAgICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4
dDNEOjpCTEVORCk7CiAKICAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhkcmF3aW5nTW9kZSwg
MCwgNCk7Ci0gICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQ
cm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKIH0KIAogdm9pZCBU
ZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCB3aWR0
aCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbW9kZWxWaWV3TWF0cml4KQpAQCAtMzA1LDE1ICszMDYsMTIgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCB3aWR0aCwgY29uc3Qg
RmxvYXRSZWMKICAgICBpZiAoY2xpcFN0YWNrKCkuY3VycmVudCgpLnNjaXNzb3JCb3guaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1Tb2xpZENvbG9yPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyLnNvbGlkQ29sb3JQcm9ncmFtKCk7Ci0gICAgbV9jb250ZXh0M0Qt
PnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OlNvbGlkQ29sb3IpOworICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dy
YW1JRCgpKTsKIAotICAgIGZsb2F0IGFscGhhID0gY29sb3IuYWxwaGEoKSAvIDI1NS4wOwotICAg
IG1fY29udGV4dDNELT51bmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLAotICAgICAg
ICAgICAgICAgICAgICAgICAoY29sb3IucmVkKCkgLyAyNTUuMCkgKiBhbHBoYSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgKGNvbG9yLmdyZWVuKCkgLyAyNTUuMCkgKiBhbHBoYSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgKGNvbG9yLmJsdWUoKSAvIDI1NS4wKSAqIGFscGhhLAotICAgICAgICAg
ICAgICAgICAgICAgICBhbHBoYSk7CisgICAgZmxvYXQgciwgZywgYiwgYTsKKyAgICBjb2xvci5n
ZXRSR0JBKHIsIGcsIGIsIGEpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtNGYocHJvZ3JhbS0+
Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICBtX2NvbnRleHQzRC0+bGluZVdpZHRo
KHdpZHRoKTsKIAogICAgIGRyYXdRdWFkKHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgcHJv
Z3JhbS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9PUCwgY29sb3IuaGFzQWxwaGEo
KSk7CkBAIC0zNjgsMjcgKzM2NiwyNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1
cmVSZWN0YW5nbGVBUkIodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbgogewogICAg
IFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbTsKICAgICBpZiAobWFz
a1RleHR1cmUpCi0gICAgICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6UmVjdE9wYWNpdHlBbmRNYXNrKTsKKyAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5z
aGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFt
KFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpNYXNrZWRSZWN0KTsKICAgICBlbHNlCi0gICAg
ICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6UmVjdFNp
bXBsZSk7Ci0gICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7CisgICAg
ICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6UmVjdCk7
CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogCi0g
ICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0
dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3Jh
bS0+dmVydGV4TG9jYXRpb24oKSk7CiAgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKICAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUo
R0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCB0ZXh0dXJlKTsKLSAgICBtX2NvbnRleHQzRC0+dW5p
Zm9ybTFpKHByb2dyYW0tPnNvdXJjZVRleHR1cmVMb2NhdGlvbigpLCAwKTsKKyAgICBtX2NvbnRl
eHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPnNhbXBsZXJMb2NhdGlvbigpLCAwKTsKIAogICAgIG1f
Y29udGV4dDNELT51bmlmb3JtMWYocHJvZ3JhbS0+ZmxpcExvY2F0aW9uKCksICEhKGZsYWdzICYg
U2hvdWxkRmxpcFRleHR1cmUpKTsKICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTJmKHByb2dyYW0t
PnRleHR1cmVTaXplTG9jYXRpb24oKSwgdGV4dHVyZVNpemUud2lkdGgoKSwgdGV4dHVyZVNpemUu
aGVpZ2h0KCkpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYocHJvZ3JhbS0+b3BhY2l0eUxv
Y2F0aW9uKCksIG9wYWNpdHkpOwogCi0gICAgaWYgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
Ojppc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpKSkKLSAg
ICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xZihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSwg
b3BhY2l0eSk7Ci0KLSAgICBpZiAobWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQo
KSAmJiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCkpKSB7CisgICAgaWYgKG1hc2tUZXh0dXJlICYm
IG1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkpIHsKICAgICAgICAgY29uc3QgQml0bWFwVGV4dHVyZUdM
KiBtYXNrVGV4dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMKj4obWFz
a1RleHR1cmUpOwogICAgICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRTEpOwogICAgICAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1hc2tUZXh0dXJlR0wtPmlkKCkpOwotICAgICAg
ICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRpb24oKSwg
MSk7CisgICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+bWFza0xvY2F0aW9u
KCksIDEpOwogICAgICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRTApOwogICAgIH0KIApAQCAtNDA1LDEwICs0MDEsMTAgQEAgdm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBj
b25zdCBJbnRTaXplJgogCiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBw
cm9ncmFtOwogICAgIGlmIChtYXNrVGV4dHVyZSkKLSAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5z
aGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFt
KFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5QW5kTWFzayk7CisgICAgICAgIHBy
b2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIu
Z2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6TWFza2VkKTsKICAg
ICBlbHNlCi0gICAgICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6U2ltcGxlKTsKLSAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgp
KTsKKyAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpEZWZhdWx0KTsKKyAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFt
SUQoKSk7CiAKICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwg
dGV4dHVyZSwgZmxhZ3MsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgbWFz
a1RleHR1cmUpOwogfQpAQCAtNTM2LDggKzUzMiw4IEBAIGJvb2wgVGV4dHVyZU1hcHBlckdMOjpk
cmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3Ms
CiAgICAgcXVhZFRvRWRnZUFycmF5KGV4cGFuZGVkUXVhZEluU2NyZWVuU3BhY2UsIHRhcmdldFF1
YWRFZGdlcyk7CiAgICAgcXVhZFRvRWRnZUFycmF5KGluZmxhdGVRdWFkKHF1YWRJblNjcmVlblNw
YWNlLmJvdW5kaW5nQm94KCksICBpbmZsYXRpb25EaXN0YW5jZSksIHRhcmdldFF1YWRFZGdlcyAr
IDEyKTsKIAotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2lu
Z05vTWFzaz4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlci5hbnRpYWxpYXNpbmdOb01hc2tQcm9ncmFtKCk7Ci0gICAgbV9jb250ZXh0M0Qt
PnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OkFudGlhbGlhc2VkKTsKKyAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9n
cmFtSUQoKSk7CiAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0zZnYocHJvZ3JhbS0+ZXhwYW5kZWRR
dWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb24oKSwgOCwgdGFyZ2V0UXVhZEVkZ2VzKTsKIAog
ICAgIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCB0ZXh0dXJlLCBm
bGFncywgRHJhd1F1YWQob3JpZ2luYWxUYXJnZXRSZWN0LCBleHBhbmRlZFF1YWRJblRleHR1cmVD
b29yZGluYXRlcyksIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgMCAvKiBtYXNrVGV4dHVyZSAq
Lyk7CkBAIC01NDYsMjEgKzU0MiwxOSBAQCBib29sIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1
cmVXaXRoQW50aWFsaWFzaW5nKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLAogCiB2b2lk
IFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCB1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywg
Y29uc3QgRHJhd1F1YWQmIHF1YWRUb0RyYXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
b2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tU
ZXh0dXJlKQogewotICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9n
cmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJp
YkFycmF5KHByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwogICAgIG1fY29udGV4dDNELT5hY3Rp
dmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgbV9jb250ZXh0M0Qt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlKTsKLSAg
ICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPnNvdXJjZVRleHR1cmVMb2NhdGlvbigp
LCAwKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPnNhbXBsZXJMb2NhdGlv
bigpLCAwKTsKIAogICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYocHJvZ3JhbS0+ZmxpcExvY2F0
aW9uKCksICEhKGZsYWdzICYgU2hvdWxkRmxpcFRleHR1cmUpKTsKKyAgICBtX2NvbnRleHQzRC0+
dW5pZm9ybTFmKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpLCBvcGFjaXR5KTsKIAotICAgIGlm
IChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihwcm9n
cmFtLT5vcGFjaXR5TG9jYXRpb24oKSkpCi0gICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYo
cHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkpOwotCi0gICAgaWYgKG1hc2tUZXh0
dXJlICYmIG1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkgJiYgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigp
KSkgeworICAgIGlmIChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpKSB7CiAg
ICAgICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCogbWFza1RleHR1cmVHTCA9IHN0YXRpY19jYXN0
PGNvbnN0IEJpdG1hcFRleHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsKICAgICAgICAgbV9jb250ZXh0
M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKTsKICAgICAgICAg
bV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBt
YXNrVGV4dHVyZUdMLT5pZCgpKTsKLSAgICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9n
cmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCksIDEpOworICAgICAgICBtX2NvbnRleHQzRC0+dW5p
Zm9ybTFpKHByb2dyYW0tPm1hc2tMb2NhdGlvbigpLCAxKTsKICAgICAgICAgbV9jb250ZXh0M0Qt
PmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKICAgICB9CiAKQEAg
LTcxMCwyNyArNzA0LDE3MSBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMo
SW1hZ2UqIGltYWdlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjbwogfQogCiAjaWYgRU5B
QkxFKENTU19GSUxURVJTKQotdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdGaWx0ZXJlZChjb25z
dCBCaXRtYXBUZXh0dXJlJiBzb3VyY2VUZXh0dXJlLCBjb25zdCBCaXRtYXBUZXh0dXJlJiBjb250
ZW50VGV4dHVyZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXIsIGludCBwYXNzKQorCitz
dGF0aWMgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNoYWRlcktleSBrZXlGb3JGaWx0ZXJU
eXBlKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNzKQor
eworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NB
TEU6CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6R3JheXNjYWxl
RmlsdGVyOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKKyAgICAgICAgcmV0dXJu
IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTZXBpYUZpbHRlcjsKKyAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6U0FUVVJBVEU6CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6U2F0dXJhdGVGaWx0ZXI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9S
T1RBVEU6CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6SHVlUm90
YXRlRmlsdGVyOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CisgICAgICAgIHJl
dHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6SW52ZXJ0RmlsdGVyOworICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgorICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6OkJyaWdodG5lc3NGaWx0ZXI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkNPTlRSQVNUOgorICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OkNvbnRyYXN0RmlsdGVyOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgorICAg
ICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wYWNpdHlGaWx0ZXI7Cisg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6Qmx1ckZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
RFJPUF9TSEFET1c6CisgICAgICAgIHJldHVybiBwYXNzID8gVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6OlNoYWRvd0ZpbHRlclBhc3MyIDogVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNo
YWRvd0ZpbHRlclBhc3MxOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkludmFsaWQ7
CisgICAgfQorfQorCitzdGF0aWMgdW5zaWduZWQgZ2V0UGFzc2VzUmVxdWlyZWRGb3JGaWx0ZXIo
RmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKKyAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6U0VQSUE6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgor
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgorICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpJTlZFUlQ6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6Cisg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpPUEFDSVRZOgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6QkxVUjoKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6CisgICAgICAg
IC8vIFdlIHVzZSB0d28tcGFzc2VzICh2ZXJ0aWNhbCtob3Jpem9udGFsKSBmb3IgYmx1ciBhbmQg
ZHJvcC1zaGFkb3cuCisgICAgICAgIHJldHVybiAyOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KK30KKworLy8gQ3JlYXRlIGEgbm9ybWFsIGRpc3RyaWJ1dGlvbiBvZiAy
MSB2YWx1ZXMgYmV0d2VlbiAtMiBhbmQgMi4KK3N0YXRpYyBjb25zdCBpbnQgR2F1c3NpYW5LZXJu
ZWxIYWxmV2lkdGggPSAxMTsKK3N0YXRpYyBjb25zdCBmbG9hdCBHYXVzc2lhbktlcm5lbFN0ZXAg
PSAwLjI7CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgZ2F1c3MoZmxvYXQgeCkKK3sKKyAgICByZXR1
cm4gZXhwKC0oeCAqIHgpIC8gMi4pOworfQorCitzdGF0aWMgZmxvYXQqIGdhdXNzaWFuS2VybmVs
KCkKK3sKKyAgICBzdGF0aWMgYm9vbCBwcmVwYXJlZCA9IGZhbHNlOworICAgIHN0YXRpYyBmbG9h
dCBrZXJuZWxbR2F1c3NpYW5LZXJuZWxIYWxmV2lkdGhdID0gezAsIH07CisKKyAgICBpZiAocHJl
cGFyZWQpCisgICAgICAgIHJldHVybiBrZXJuZWw7CisKKyAgICBrZXJuZWxbMF0gPSBnYXVzcygw
KTsKKyAgICBmbG9hdCBzdW0gPSBrZXJuZWxbMF07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsg
aSA8IEdhdXNzaWFuS2VybmVsSGFsZldpZHRoOyArK2kpIHsKKyAgICAgICAga2VybmVsW2ldID0g
Z2F1c3MoaSAqIEdhdXNzaWFuS2VybmVsU3RlcCk7CisgICAgICAgIHN1bSArPSAyICoga2VybmVs
W2ldOworICAgIH0KKworICAgIC8vIE5vcm1hbGl6ZSB0aGUga2VybmVsLgorICAgIGZsb2F0IHNj
YWxlID0gMSAvIHN1bTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2F1c3NpYW5LZXJu
ZWxIYWxmV2lkdGg7ICsraSkKKyAgICAgICAga2VybmVsW2ldICo9IHNjYWxlOworCisgICAgcHJl
cGFyZWQgPSB0cnVlOworICAgIHJldHVybiBrZXJuZWw7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBh
cmVGaWx0ZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCBjb25z
dCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiwgdW5zaWduZWQgcGFzcywgY29uc3QgSW50U2l6
ZSYgc2l6ZSwgR0MzRHVpbnQgY29udGVudFRleHR1cmUpCit7CisgICAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBjb250ZXh0ID0gcHJvZ3JhbS0+Y29udGV4dCgpOworICAgIGNvbnRleHQtPnVz
ZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOworCisgICAgc3dpdGNoIChvcGVyYXRpb24u
Z2V0T3BlcmF0aW9uVHlwZSgpKSB7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FM
RToKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OlNBVFVSQVRFOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgor
ICAgICAgICBjb250ZXh0LT51bmlmb3JtMWYocHJvZ3JhbS0+YW1vdW50TG9jYXRpb24oKSwgc3Rh
dGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlv
bikuYW1vdW50KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
SU5WRVJUOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgorICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BB
Q0lUWToKKyAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPmFtb3VudExvY2F0aW9u
KCksIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkJMVVI6IHsKKyAgICAgICAgY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiYg
Ymx1ciA9IHN0YXRpY19jYXN0PGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24p
OworICAgICAgICBGbG9hdFNpemUgcmFkaXVzOworCisgICAgICAgIC8vIEJsdXIgaXMgZG9uZSBp
biB0d28gcGFzc2VzLCBmaXJzdCBob3Jpem9udGFsbHkgYW5kIHRoZW4gdmVydGljYWxseS4gVGhl
IHNhbWUgc2hhZGVyIGlzIHVzZWQgZm9yIGJvdGguCisgICAgICAgIGlmIChwYXNzKQorICAgICAg
ICAgICAgcmFkaXVzLnNldEhlaWdodChmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXIuc3RkRGV2aWF0
aW9uKCksIHNpemUuaGVpZ2h0KCkpIC8gc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHJhZGl1cy5zZXRXaWR0aChmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXIuc3RkRGV2
aWF0aW9uKCksIHNpemUud2lkdGgoKSkgLyBzaXplLndpZHRoKCkpOworCisgICAgICAgIGNvbnRl
eHQtPnVuaWZvcm0yZihwcm9ncmFtLT5ibHVyUmFkaXVzTG9jYXRpb24oKSwgcmFkaXVzLndpZHRo
KCksIHJhZGl1cy5oZWlnaHQoKSk7CisgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZnYocHJvZ3Jh
bS0+Z2F1c3NpYW5LZXJuZWxMb2NhdGlvbigpLCBHYXVzc2lhbktlcm5lbEhhbGZXaWR0aCwgZ2F1
c3NpYW5LZXJuZWwoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKKyAgICAgICAgY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9w
ZXJhdGlvbiYgc2hhZG93ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJh
dGlvbiY+KG9wZXJhdGlvbik7CisgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZnYocHJvZ3JhbS0+
Z2F1c3NpYW5LZXJuZWxMb2NhdGlvbigpLCBHYXVzc2lhbktlcm5lbEhhbGZXaWR0aCwgZ2F1c3Np
YW5LZXJuZWwoKSk7CisgICAgICAgIHN3aXRjaCAocGFzcykgeworICAgICAgICBjYXNlIDA6Cisg
ICAgICAgICAgICAvLyBGaXJzdCBwYXNzOiB2ZXJ0aWNhbCBhbHBoYSBibHVyLgorICAgICAgICAg
ICAgY29udGV4dC0+dW5pZm9ybTJmKHByb2dyYW0tPnNoYWRvd09mZnNldExvY2F0aW9uKCksIGZs
b2F0KHNoYWRvdy5sb2NhdGlvbigpLngoKSkgLyBmbG9hdChzaXplLndpZHRoKCkpLCBmbG9hdChz
aGFkb3cubG9jYXRpb24oKS55KCkpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICAg
ICAgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPmJsdXJSYWRpdXNMb2NhdGlvbigpLCBzaGFk
b3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLndpZHRoKCkpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAvLyBTZWNvbmQgcGFzczogd2UgbmVl
ZCB0aGUgc2hhZG93IGNvbG9yIGFuZCB0aGUgY29udGVudCB0ZXh0dXJlIGZvciBjb21wb3NpdGlu
Zy4KKyAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT5ibHVyUmFkaXVzTG9j
YXRpb24oKSwgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOwor
ICAgICAgICAgICAgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRTEpOworICAgICAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIGNvbnRlbnRUZXh0dXJlKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnVu
aWZvcm0xaShwcm9ncmFtLT5jb250ZW50VGV4dHVyZUxvY2F0aW9uKCksIDEpOworICAgICAgICAg
ICAgZmxvYXQgciwgZywgYiwgYTsKKyAgICAgICAgICAgIHNoYWRvdy5jb2xvcigpLmdldFJHQkEo
ciwgZywgYiwgYSk7CisgICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+c2hh
ZG93Q29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3RmlsdGVyZWQoY29uc3Qg
Qml0bWFwVGV4dHVyZSYgc2FtcGxlciwgY29uc3QgQml0bWFwVGV4dHVyZSYgY29udGVudFRleHR1
cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgZmlsdGVyLCBpbnQgcGFzcykKIHsKICAgICAvLyBG
b3Igc3RhbmRhcmQgZmlsdGVycywgd2UgYWx3YXlzIGRyYXcgdGhlIHdob2xlIHRleHR1cmUgd2l0
aG91dCB0cmFuc2Zvcm1hdGlvbnMuCi0gICAgUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4g
cHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5nZXRTaGFkZXJGb3JGaWx0ZXIoZmlsdGVyLCBwYXNzKTsKKyAgICBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6U2hhZGVyS2V5IGtleSA9IGtleUZvckZpbHRlclR5cGUoZmlsdGVyLmdldE9w
ZXJhdGlvblR5cGUoKSwgcGFzcyk7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyLmdldFNoYWRlclByb2dyYW0oa2V5KTsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAKLSAg
ICBwcm9ncmFtLT5wcmVwYXJlKGZpbHRlciwgcGFzcywgc291cmNlVGV4dHVyZS5jb250ZW50U2l6
ZSgpLCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihjb250ZW50VGV4dHVyZSku
aWQoKSk7CisgICAgcHJlcGFyZUZpbHRlclByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgZmlsdGVyLCBw
YXNzLCBzYW1wbGVyLmNvbnRlbnRTaXplKCksIHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1
cmVHTCY+KGNvbnRlbnRUZXh0dXJlKS5pZCgpKTsKIAotICAgIG1fY29udGV4dDNELT5lbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7Ci0gICAgbV9jb250ZXh0
M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3JkQXR0cmliKCkpOwor
ICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhM
b2NhdGlvbigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJv
Z3JhbS0+dGV4Q29vcmRMb2NhdGlvbigpKTsKICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwotICAgIG1fY29udGV4dDNELT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0
bWFwVGV4dHVyZUdMJj4oc291cmNlVGV4dHVyZSkuaWQoKSk7Ci0gICAgbV9jb250ZXh0M0QtPnVu
aWZvcm0xaShwcm9ncmFtLT50ZXh0dXJlVW5pZm9ybSgpLCAwKTsKKyAgICBtX2NvbnRleHQzRC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHN0YXRpY19jYXN0PGNv
bnN0IEJpdG1hcFRleHR1cmVHTCY+KHNhbXBsZXIpLmlkKCkpOworICAgIG1fY29udGV4dDNELT51
bmlmb3JtMWkocHJvZ3JhbS0+c2FtcGxlckxvY2F0aW9uKCksIDApOwogICAgIGNvbnN0IEdDM0Rm
bG9hdCB0YXJnZXRWZXJ0aWNlc1tdID0gey0xLCAtMSwgMSwgLTEsIDEsIDEsIC0xLCAxfTsKICAg
ICBjb25zdCBHQzNEZmxvYXQgc291cmNlVmVydGljZXNbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAw
LCAxfTsKLSAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0
ZXhBdHRyaWIoKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGlu
dHB0cih0YXJnZXRWZXJ0aWNlcykpOwotICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2lu
dGVyKHByb2dyYW0tPnRleENvb3JkQXR0cmliKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIoc291cmNlVmVydGljZXMpKTsKKyAgICBtX2NvbnRleHQz
RC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCAyLCBHcmFw
aGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHRhcmdldFZlcnRpY2Vz
KSk7CisgICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dGV4Q29v
cmRMb2NhdGlvbigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNE
aW50cHRyKHNvdXJjZVZlcnRpY2VzKSk7CiAgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OkJMRU5EKTsKICAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhHcmFwaGlj
c0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCAwLCA0KTsKLSAgICBtX2NvbnRleHQzRC0+ZGlzYWJs
ZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKLSAgICBtX2NvbnRl
eHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3JkQXR0cmliKCkp
OworICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVy
dGV4TG9jYXRpb24oKSk7CisgICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eShwcm9ncmFtLT50ZXhDb29yZExvY2F0aW9uKCkpOwogfQogCiBQYXNzUmVmUHRyPEJpdG1hcFRl
eHR1cmU+IEJpdG1hcFRleHR1cmVHTDo6YXBwbHlGaWx0ZXJzKFRleHR1cmVNYXBwZXIqIHRleHR1
cmVNYXBwZXIsIGNvbnN0IEJpdG1hcFRleHR1cmUmIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQpAQCAtNzQ0LDcgKzg4Miw3IEBAIFBhc3NSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gQml0bWFwVGV4dHVyZUdMOjphcHBseUZpbHRlcnMoVGV4dHVyZU1hcHBlciog
dGV4dHVyZU1hCiAgICAgICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZmlsdGVyID0gZmlsdGVy
cy5hdChpKTsKICAgICAgICAgQVNTRVJUKGZpbHRlcik7CiAKLSAgICAgICAgaW50IG51bVBhc3Nl
cyA9IHRleHR1cmVNYXBwZXJHTC0+ZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmdldFBhc3Nlc1JlcXVpcmVkRm9yRmlsdGVyKCpmaWx0ZXIpOworICAgICAg
ICBpbnQgbnVtUGFzc2VzID0gZ2V0UGFzc2VzUmVxdWlyZWRGb3JGaWx0ZXIoZmlsdGVyLT5nZXRP
cGVyYXRpb25UeXBlKCkpOwogICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG51bVBhc3Nlczsg
KytqKSB7CiAgICAgICAgICAgICB0ZXh0dXJlTWFwcGVyR0wtPmJpbmRTdXJmYWNlKHRhcmdldC5n
ZXQoKSk7CiAgICAgICAgICAgICB0ZXh0dXJlTWFwcGVyR0wtPmRyYXdGaWx0ZXJlZCgoaSB8fCBq
KSA/ICpzb3VyY2UgOiBjb250ZW50VGV4dHVyZSwgY29udGVudFRleHR1cmUsICpmaWx0ZXIsIGop
OwpAQCAtODk1LDEyICsxMDMzLDEyIEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uCiAKICAgICBk
YXRhKCkuaW5pdGlhbGl6ZVN0ZW5jaWwoKTsKIAotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpTaW1wbGUpOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3Jh
bSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRT
aGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpEZWZhdWx0KTsKIAotICAg
IG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOwotICAgIG1fY29udGV4dDNE
LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAg
bV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOworICAgIG1fY29u
dGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigp
KTsKICAgICBjb25zdCBHQzNEZmxvYXQgdW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAw
LCAxfTsKLSAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0
ZXhBdHRyaWIoKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGlu
dHB0cih1bml0UmVjdCkpOworICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHBy
b2dyYW0tPnZlcnRleExvY2F0aW9uKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFs
c2UsIDAsIEdDM0RpbnRwdHIodW5pdFJlY3QpKTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KQog
ICAgICAgICAgICAgLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkKQEAgLTk0NCw3ICsxMDgyLDcg
QEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb24KICAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhH
cmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCAwLCA0KTsKIAogICAgIC8vIENsZWFyIHRo
ZSBzdGF0ZS4KLSAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dy
YW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KHByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwogICAgIG1fY29udGV4dDNELT5zdGVu
Y2lsTWFzaygwKTsKIAogICAgIC8vIEluY3JlYXNlIHN0ZW5jaWxJbmRleCBhbmQgYXBwbHkgc3Rl
bmNpbCB0ZXN0aW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAK
aW5kZXggNWNhOGM5NmJmZTQ1Mjk1MmI0M2I2NDIzODUxYjFmYzgzNWQ3MzlmYi4uOTI3NjNhMzBi
NDA3OGQ3NzAyMDU4NjBlZmM1MzdkY2RjMTZlNTNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXIuY3BwCkBAIC0zMCwyNDcgKzMwLDU3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotI2RlZmluZSBTVFJJTkdJRlkoLi4uKSAjX19WQV9BUkdTX18KLQotc3RhdGlj
IGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2sgPQotICAgIFNU
UklOR0lGWSgKLSAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgIHVuaWZv
cm0gc2FtcGxlcjJEIHNfc291cmNlOwotICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX21hc2s7
Ci0gICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7Ci0gICAgICAgIHZhcnlpbmcg
aGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIg
dl9tYXNrVGV4Q29vcmQ7Ci0gICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQoc19zb3VyY2UsIHZfc291cmNlVGV4
Q29vcmQpOwotICAgICAgICAgICAgbG93cCB2ZWM0IG1hc2tDb2xvciA9IHRleHR1cmUyRChzX21h
c2ssIHZfbWFza1RleENvb3JkKTsKLSAgICAgICAgICAgIGxvd3AgZmxvYXQgZnJhZ21lbnRBbHBo
YSA9IHVfb3BhY2l0eSAqIG1hc2tDb2xvci5hOwotICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0g
dmVjNChjb2xvci5yZ2IgKiBmcmFnbWVudEFscGhhLCBjb2xvci5hICogZnJhZ21lbnRBbHBoYSk7
Ci0gICAgICAgIH0KLSAgICApOwotCi1zdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJT
b3VyY2VSZWN0T3BhY2l0eUFuZE1hc2sgPQotICAgIFNUUklOR0lGWSgKLSAgICAgICAgcHJlY2lz
aW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX3NvdXJj
ZTsKLSAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfbWFzazsKLSAgICAgICAgdW5pZm9y
bSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKLSAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291
cmNlVGV4Q29vcmQ7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X21hc2tUZXhDb29yZDsK
LSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvd3AgdmVj
NCBjb2xvciA9IHRleHR1cmUyRFJlY3Qoc19zb3VyY2UsIHZfc291cmNlVGV4Q29vcmQpOwotICAg
ICAgICAgICAgbG93cCB2ZWM0IG1hc2tDb2xvciA9IHRleHR1cmUyRFJlY3Qoc19tYXNrLCB2X21h
c2tUZXhDb29yZCk7Ci0gICAgICAgICAgICBsb3dwIGZsb2F0IGZyYWdtZW50QWxwaGEgPSB1X29w
YWNpdHkgKiBtYXNrQ29sb3IuYTsKLSAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29s
b3IucmdiICogZnJhZ21lbnRBbHBoYSwgY29sb3IuYSAqIGZyYWdtZW50QWxwaGEpOwotICAgICAg
ICB9Ci0gICAgKTsKLQotc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZU9wYWNp
dHlBbmRNYXNrID0KLSAgICBTVFJJTkdJRlkoCi0gICAgICAgIHVuaWZvcm0gbWF0NCB1X21hdHJp
eDsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfZmxpcDsKLSAgICAgICAgYXR0cmlidXRl
IHZlYzQgYV92ZXJ0ZXg7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENv
b3JkOwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9tYXNrVGV4Q29vcmQ7Ci0gICAgICAg
IHZvaWQgbWFpbih2b2lkKQotICAgICAgICB7Ci0gICAgICAgICAgICB2X3NvdXJjZVRleENvb3Jk
ID0gdmVjMihhX3ZlcnRleC54LCBtaXgoYV92ZXJ0ZXgueSwgMS4gLSBhX3ZlcnRleC55LCB1X2Zs
aXApKTsKLSAgICAgICAgICAgIHZfbWFza1RleENvb3JkID0gdmVjMihhX3ZlcnRleCk7Ci0gICAg
ICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogYV92ZXJ0ZXg7Ci0gICAgICAgIH0KLSAg
ICApOwotCi1zdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUgPQot
ICAgIFNUUklOR0lGWSgKLSAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAg
IHVuaWZvcm0gc2FtcGxlcjJEIHNfc291cmNlOwotICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQg
dV9vcGFjaXR5OwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsK
LSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvd3AgdmVj
NCBjb2xvciA9IHRleHR1cmUyRChzX3NvdXJjZSwgdl9zb3VyY2VUZXhDb29yZCk7Ci0gICAgICAg
ICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIHVfb3BhY2l0eSwgY29sb3IuYSAq
IHVfb3BhY2l0eSk7Ci0gICAgICAgIH0KLSAgICApOwotCi1zdGF0aWMgY29uc3QgY2hhciogZnJh
Z21lbnRTaGFkZXJTb3VyY2VBbnRpYWxpYXNpbmdOb01hc2sgPQotICAgIFNUUklOR0lGWSgKLSAg
ICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJE
IHNfc291cmNlOwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsK
LSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKLSAgICAgICAgdW5pZm9ybSB2
ZWMzIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzhdOwotICAgICAgICB2b2lkIG1h
aW4oKQotICAgICAgICB7Ci0gICAgICAgICAgICB2ZWM0IHNhbXBsZWRDb2xvciA9IHRleHR1cmUy
RChzX3NvdXJjZSwgY2xhbXAodl9zb3VyY2VUZXhDb29yZCwgMC4wLCAxLjApKTsKLSAgICAgICAg
ICAgIHZlYzMgcG9zID0gdmVjMyhnbF9GcmFnQ29vcmQueHksIDEpOwotCi0gICAgICAgICAgICAv
LyBUaGUgZGF0YSBwYXNzZWQgaW4gdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2UgaXMg
bWVyZWx5IHRoZQotICAgICAgICAgICAgLy8gcHJlLXNjYWxlZCBjb2VmZmVjaWVudHMgb2YgdGhl
IGxpbmUgZXF1YXRpb25zIGRlc2NyaWJpbmcgdGhlIGZvdXIgZWRnZXMKLSAgICAgICAgICAgIC8v
IG9mIHRoZSBleHBhbmRlZCBxdWFkIGluIHNjcmVlbiBzcGFjZSBhbmQgdGhlIHJlY3Rhbmd1bGFy
IGJvdW5kaW5nIGJveAotICAgICAgICAgICAgLy8gb2YgdGhlIGV4cGFuZGVkIHF1YWQuCi0gICAg
ICAgICAgICAvLwotICAgICAgICAgICAgLy8gV2UgYXJlIGRvaW5nIGEgc2ltcGxlIGRpc3RhbmNl
IGNhbGN1bGF0aW9uIGhlcmUgYWNjb3JkaW5nIHRvIHRoZSBmb3JtdWxhOgotICAgICAgICAgICAg
Ly8gKEEqcC54ICsgQipwLnkgKyBDKSAvIHNxcnQoQV4yICsgQl4yKSA9IGRpc3RhbmNlIGZyb20g
bGluZSB0byBwCi0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgQSwgQiBhbmQgQyBoYXZlIGFscmVh
ZHkgYmVlbiBzY2FsZWQgYnkgMSAvIHNxcnQoQV4yICsgQl4yKS4KLSAgICAgICAgICAgIGZsb2F0
IGEwID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzBdLCBwb3Mp
LCAwLjAsIDEuMCk7Ci0gICAgICAgICAgICBmbG9hdCBhMSA9IGNsYW1wKGRvdCh1X2V4cGFuZGVk
UXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVsxXSwgcG9zKSwgMC4wLCAxLjApOwotICAgICAgICAgICAg
ZmxvYXQgYTIgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbMl0s
IHBvcyksIDAuMCwgMS4wKTsKLSAgICAgICAgICAgIGZsb2F0IGEzID0gY2xhbXAoZG90KHVfZXhw
YW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzNdLCBwb3MpLCAwLjAsIDEuMCk7Ci0gICAgICAg
ICAgICBmbG9hdCBhNCA9IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFj
ZVs0XSwgcG9zKSwgMC4wLCAxLjApOwotICAgICAgICAgICAgZmxvYXQgYTUgPSBjbGFtcChkb3Qo
dV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNV0sIHBvcyksIDAuMCwgMS4wKTsKLSAg
ICAgICAgICAgIGZsb2F0IGE2ID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVl
blNwYWNlWzZdLCBwb3MpLCAwLjAsIDEuMCk7Ci0gICAgICAgICAgICBmbG9hdCBhNyA9IGNsYW1w
KGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs3XSwgcG9zKSwgMC4wLCAxLjAp
OwotCi0gICAgICAgICAgICAvLyBOb3cgd2Ugd2FudCB0byByZWR1Y2UgdGhlIGFscGhhIHZhbHVl
IG9mIHRoZSBmcmFnbWVudCBpZiBpdCBpcyBjbG9zZSB0byB0aGUKLSAgICAgICAgICAgIC8vIGVk
Z2VzIG9mIHRoZSBleHBhbmRlZCBxdWFkIChvciByZWN0YW5ndWxhciBib3VuZGluZyBib3ggLS0g
d2hpY2ggc2VlbXMgdG8gYmUKLSAgICAgICAgICAgIC8vIGltcG9ydGFudCBmb3IgYmFja2ZhY2lu
ZyBxdWFkcykuIE5vdGUgdGhhdCB3ZSBhcmUgY29tYmluaW5nIHRoZSBjb250cmlidXRpb24KLSAg
ICAgICAgICAgIC8vIGZyb20gdGhlICh0b3AgfHwgYm90dG9tKSBhbmQgKGxlZnQgfHwgcmlnaHQp
IGVkZ2UgYnkgc2ltcGx5IG11bHRpcGx5aW5nLiBUaGlzIGZvbGxvd3MKLSAgICAgICAgICAgIC8v
IHRoZSBhcHByb2FjaCBkZXNjcmliZWQgYXQ6IGh0dHA6Ly9odHRwLmRldmVsb3Blci5udmlkaWEu
Y29tL0dQVUdlbXMyL2dwdWdlbXMyX2NoYXB0ZXIyMi5odG1sLAotICAgICAgICAgICAgLy8gaW4g
dGhpcyBjYXNlIHdpdGhvdXQgdXNpbmcgR2F1c3NpYW4gd2VpZ2h0cy4KLSAgICAgICAgICAgIGds
X0ZyYWdDb2xvciA9IHNhbXBsZWRDb2xvciAqIHVfb3BhY2l0eSAqIG1pbihtaW4oYTAsIGEyKSAq
IG1pbihhMSwgYTMpLCBtaW4oYTQsIGE2KSAqIG1pbihhNSwgYTcpKTsKLSAgICAgICAgfQotICAg
ICk7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RTaW1wbGUg
PQotICAgIFNUUklOR0lGWSgKLSAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAg
ICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX3NvdXJjZTsKLSAgICAgICAgdW5pZm9ybSBsb3dw
IHZlYzIgdV90ZXh0dXJlU2l6ZTsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0
eTsKLSAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAgICAg
IHZvaWQgbWFpbih2b2lkKQotICAgICAgICB7Ci0gICAgICAgICAgICBsb3dwIHZlYzQgY29sb3Ig
PSB0ZXh0dXJlMkRSZWN0KHNfc291cmNlLCB1X3RleHR1cmVTaXplICogdl9zb3VyY2VUZXhDb29y
ZCk7Ci0gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIHVfb3BhY2l0
eSwgY29sb3IuYSAqIHVfb3BhY2l0eSk7Ci0gICAgICAgIH0KLSAgICApOwotCi1zdGF0aWMgY29u
c3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlU2ltcGxlID0KLSAgICBTVFJJTkdJRlkoCi0gICAg
ICAgIHVuaWZvcm0gbWF0NCB1X21hdHJpeDsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVf
ZmxpcDsKLSAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7Ci0gICAgICAgIHZhcnlpbmcg
aGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOwotICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAg
ICAgICAgewotICAgICAgICAgICAgdl9zb3VyY2VUZXhDb29yZCA9IHZlYzIoYV92ZXJ0ZXgueCwg
bWl4KGFfdmVydGV4LnksIDEuIC0gYV92ZXJ0ZXgueSwgdV9mbGlwKSk7Ci0gICAgICAgICAgICBn
bF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogYV92ZXJ0ZXg7Ci0gICAgICAgIH0KLSAgICApOwotCi1z
dGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlU29saWRDb2xvciA9Ci0gICAgU1RS
SU5HSUZZKAotICAgICAgICB1bmlmb3JtIG1hdDQgdV9tYXRyaXg7Ci0gICAgICAgIGF0dHJpYnV0
ZSB2ZWM0IGFfdmVydGV4OwotICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgewotICAg
ICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIGFfdmVydGV4OwotICAgICAgICB9Ci0g
ICAgKTsKLQotCi1zdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VTb2xpZENv
bG9yID0KLSAgICBTVFJJTkdJRlkoCi0gICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0Owot
ICAgICAgICB1bmlmb3JtIHZlYzQgdV9jb2xvcjsKLSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHVfY29sb3I7Ci0gICAgICAgIH0K
LSAgICApOwotCi1QYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xv
cj4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OnNvbGlkQ29sb3JQcm9ncmFtKCkKK1RleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShQYXNzUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHZlcnRleCwgY29u
c3QgU3RyaW5nJiBmcmFnbWVudCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9p
ZCgwKQorICAgICwgbV92ZXJ0ZXhTaGFkZXIoMCkKKyAgICAsIG1fZnJhZ21lbnRTaGFkZXIoMCkK
IHsKLSAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVNvbGlkQ29sb3I+KGdldFNoYWRlclByb2dyYW0oU29saWRDb2xvcikpOwotfQorICAgIG1f
dmVydGV4U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OlZFUlRFWF9TSEFERVIpOworICAgIG1fZnJhZ21lbnRTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0
ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSKTsKKyAgICBtX2NvbnRl
eHQtPnNoYWRlclNvdXJjZShtX3ZlcnRleFNoYWRlciwgdmVydGV4KTsKKyAgICBtX2NvbnRleHQt
PnNoYWRlclNvdXJjZShtX2ZyYWdtZW50U2hhZGVyLCBmcmFnbWVudCk7CisgICAgbV9pZCA9IG1f
Y29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOworICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlciht
X3ZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVyKG1fZnJhZ21lbnRT
aGFkZXIpOworICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKG1faWQsIG1fdmVydGV4U2hhZGVy
KTsKKyAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihtX2lkLCBtX2ZyYWdtZW50U2hhZGVyKTsK
KyAgICBtX2NvbnRleHQtPmxpbmtQcm9ncmFtKG1faWQpOworCisjaWZuZGVmIE5ERUJVRworICAg
IGlmIChtX2NvbnRleHQtPmdldEVycm9yKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9S
KQorICAgICAgICByZXR1cm47CiAKLVBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1BbnRpYWxpYXNpbmdOb01hc2s+IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjphbnRpYWxp
YXNpbmdOb01hc2tQcm9ncmFtKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzaz4oZ2V0U2hhZGVyUHJv
Z3JhbShBbnRpYWxpYXNpbmdOb01hc2spKTsKKyAgICBTdHJpbmcgbG9nID0gbV9jb250ZXh0LT5n
ZXRTaGFkZXJJbmZvTG9nKG1fdmVydGV4U2hhZGVyKTsKKyAgICBwcmludGYoIlZlcnRleCBzaGFk
ZXIgbG9nOiAlc1xuIiwgbG9nLnV0ZjgoKS5kYXRhKCkpOworICAgIGxvZyA9IG1fY29udGV4dC0+
Z2V0U2hhZGVySW5mb0xvZyhtX2ZyYWdtZW50U2hhZGVyKTsKKyAgICBwcmludGYoIkZyYWdtZW50
IHNoYWRlciBsb2c6ICVzXG4iLCBsb2cudXRmOCgpLmRhdGEoKSk7CisgICAgbG9nID0gbV9jb250
ZXh0LT5nZXRQcm9ncmFtSW5mb0xvZyhtX2lkKTsKKyAgICBwcmludGYoIlByb2dyYW0gbG9nOiAl
c1xuIiwgbG9nLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCiB9CiAKLVBhc3NSZWZQdHI8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0+IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFk
ZXJQcm9ncmFtKFNoYWRlclR5cGUgc2hhZGVyVHlwZSkKK0dDM0R1aW50IFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtOjpnZXRMb2NhdGlvbihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFZhcmlh
YmxlVHlwZSB0eXBlKQogewotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4g
cHJvZ3JhbTsKLSAgICBpZiAoc2hhZGVyVHlwZSA9PSBJbnZhbGlkKQotICAgICAgICByZXR1cm4g
cHJvZ3JhbTsKLQotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOjppdGVyYXRvciBp
dCA9IG1fdGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAuZmluZChzaGFkZXJUeXBlKTsKLSAg
ICBpZiAoaXQgIT0gbV90ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcC5lbmQoKSkKKyAgICBI
YXNoTWFwPEF0b21pY1N0cmluZywgR0MzRHVpbnQ+OjppdGVyYXRvciBpdCA9IG1fdmFyaWFibGVz
LmZpbmQobmFtZSk7CisgICAgaWYgKGl0ICE9IG1fdmFyaWFibGVzLmVuZCgpKQogICAgICAgICBy
ZXR1cm4gaXQtPnZhbHVlOwogCi0gICAgc3dpdGNoIChzaGFkZXJUeXBlKSB7Ci0gICAgY2FzZSBT
aW1wbGU6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBs
ZTo6Y3JlYXRlKG1fY29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVjdFNpbXBs
ZToKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBs
ZTo6Y3JlYXRlKG1fY29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQW50aWFsaWFz
aW5nTm9NYXNrOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1B
bnRpYWxpYXNpbmdOb01hc2s6OmNyZWF0ZShtX2NvbnRleHQpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIE9wYWNpdHlBbmRNYXNrOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6Y3JlYXRlKG1fY29udGV4dCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgUmVjdE9wYWNpdHlBbmRNYXNrOgotICAgICAgICBwcm9ncmFtID0gVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OmNyZWF0ZShtX2NvbnRl
eHQpOworICAgIEdDM0R1aW50IGxvY2F0aW9uOworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNh
c2UgVW5pZm9ybVZhcmlhYmxlOgorICAgICAgICBsb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5p
Zm9ybUxvY2F0aW9uKG1faWQsIG5hbWUpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIFNvbGlk
Q29sb3I6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlk
Q29sb3I6OmNyZWF0ZShtX2NvbnRleHQpOworICAgIGNhc2UgQXR0cmliVmFyaWFibGU6CisgICAg
ICAgIGxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihtX2lkLCBuYW1lKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnZhbGlkOgorICAgIGRlZmF1bHQ6CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKICAgICB9Ci0gICAgbV90ZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcC5hZGQoc2hhZGVyVHlwZSwgcHJvZ3JhbSk7Ci0gICAg
cmV0dXJuIHByb2dyYW07Ci19CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgY2hh
ciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSkK
LSAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAgICwgbV9pZCgwKQotICAgICwgbV92ZXJ0ZXhB
dHRyaWIoMCkKLSAgICAsIG1fdmVydGV4U2hhZGVyKDApCi0gICAgLCBtX2ZyYWdtZW50U2hhZGVy
KDApCi0gICAgLCBtX21hdHJpeExvY2F0aW9uKC0xKQotICAgICwgbV9mbGlwTG9jYXRpb24oLTEp
Ci0gICAgLCBtX3RleHR1cmVTaXplTG9jYXRpb24oLTEpCi0gICAgLCBtX3NvdXJjZVRleHR1cmVM
b2NhdGlvbigtMSkKLSAgICAsIG1fb3BhY2l0eUxvY2F0aW9uKC0xKQotICAgICwgbV9tYXNrVGV4
dHVyZUxvY2F0aW9uKC0xKQotICAgICwgbV92ZXJ0ZXhTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVy
U291cmNlKQotICAgICwgbV9mcmFnbWVudFNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlclNvdXJj
ZSkKLXsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aW5pdGlhbGl6ZVBy
b2dyYW0oKQotewotICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVByb2dyYW0gPSB2
ZXJ0ZXhTaGFkZXJTb3VyY2UoKTsKLSAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJj
ZVByb2dyYW0gPSBmcmFnbWVudFNoYWRlclNvdXJjZSgpOwotICAgIFBsYXRmb3JtM0RPYmplY3Qg
dmVydGV4U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OlZFUlRFWF9TSEFERVIpOwotICAgIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIgPSBt
X2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVS
KTsKLSAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIHZlcnRleFNoYWRl
clNvdXJjZVByb2dyYW0pOwotICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKGZyYWdtZW50U2hh
ZGVyLCBmcmFnbWVudFNoYWRlclNvdXJjZVByb2dyYW0pOwotICAgIFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbUlEID0gbV9jb250ZXh0LT5jcmVhdGVQcm9ncmFtKCk7Ci0gICAgbV9jb250ZXh0LT5j
b21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVy
KGZyYWdtZW50U2hhZGVyKTsKLQotICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW1J
RCwgdmVydGV4U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihwcm9ncmFtSUQs
IGZyYWdtZW50U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmxpbmtQcm9ncmFtKHByb2dyYW1JRCk7
Ci0KLSAgICBtX3ZlcnRleEF0dHJpYiA9IG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24ocHJv
Z3JhbUlELCAiYV92ZXJ0ZXgiKTsKLQotICAgIG1faWQgPSBwcm9ncmFtSUQ7Ci0gICAgbV92ZXJ0
ZXhTaGFkZXIgPSB2ZXJ0ZXhTaGFkZXI7Ci0gICAgbV9mcmFnbWVudFNoYWRlciA9IGZyYWdtZW50
U2hhZGVyOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpnZXRVbmlmb3Jt
TG9jYXRpb24oR0MzRGludCAmdmFyaWFibGUsIGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgdmFy
aWFibGUgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX2lkLCBuYW1lKTsKLSAgICBB
U1NFUlQodmFyaWFibGUgPj0gMCk7CisgICAgbV92YXJpYWJsZXMuYWRkKG5hbWUsIGxvY2F0aW9u
KTsKKyAgICByZXR1cm4gbG9jYXRpb247CiB9CiAKIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
Ojp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKQpAQCAtMjg2LDEyMCArOTYsMTkwIEBAIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKQog
ICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFtSUQpOwogfQogCi1UZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUsIGZyYWdtZW50U2hhZGVyU291
cmNlU2ltcGxlKQotewotICAgIGluaXRpYWxpemVQcm9ncmFtKCk7Ci0gICAgZ2V0VW5pZm9ybUxv
Y2F0aW9uKG1fZmxpcExvY2F0aW9uLCAidV9mbGlwIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9u
KG1fbWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbiht
X3NvdXJjZVRleHR1cmVMb2NhdGlvbiwgInNfc291cmNlIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0
aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5Iik7Ci19CitzdHJ1Y3QgU2hhZGVyU3Bl
YyB7CisgICAgU3RyaW5nIHZlcnRleFNoYWRlcjsKKyAgICBTdHJpbmcgZnJhZ21lbnRTaGFkZXI7
CisgICAgU2hhZGVyU3BlYyhjb25zdCBjaGFyKiB2ZXJ0ZXggPSAwLCBjb25zdCBjaGFyKiBmcmFn
bWVudCA9IDApCisgICAgICAgIDogdmVydGV4U2hhZGVyKHZlcnRleCA/IFN0cmluZyhBU0NJSUxp
dGVyYWwodmVydGV4KSkgOiBTdHJpbmcoKSkKKyAgICAgICAgLCBmcmFnbWVudFNoYWRlcihmcmFn
bWVudCA/IFN0cmluZyhBU0NJSUxpdGVyYWwoZnJhZ21lbnQpKSA6IFN0cmluZygpKQorICAgIHsK
KyAgICB9Cit9OwogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OlRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRl
clNvdXJjZVNvbGlkQ29sb3IsIGZyYWdtZW50U2hhZGVyU291cmNlU29saWRDb2xvcikKK3N0YXRp
YyB2b2lkIGdldFNoYWRlclNwZWMoVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNoYWRlcktl
eSBrZXksIFN0cmluZyYgdmVydGV4U291cmNlLCBTdHJpbmcmIGZyYWdtZW50U291cmNlKQogewot
ICAgIGluaXRpYWxpemVQcm9ncmFtKCk7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4
TG9jYXRpb24sICJ1X21hdHJpeCIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX2NvbG9yTG9j
YXRpb24sICJ1X2NvbG9yIik7Ci19CisgICAgc3RhdGljIFZlY3RvcjxTaGFkZXJTcGVjPiBzcGVj
cyA9IFZlY3RvcjxTaGFkZXJTcGVjPigpOworI2RlZmluZSBTVFJJTkdJRlkoLi4uKSAjX19WQV9B
UkdTX18KKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRPcGFjaXR5QW5kTWFzayA9Cisg
ICAgICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0Owor
ICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zYW1wbGVyOworICAgICAgICAgICAgdW5p
Zm9ybSBzYW1wbGVyMkQgc19tYXNrOworICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVf
b3BhY2l0eTsKKyAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3Jk
OworICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfbWFza1RleENvb3JkOworICAgICAg
ICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbG93
cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHNfc2FtcGxlciwgdl9zb3VyY2VUZXhDb29yZCk7Cisg
ICAgICAgICAgICAgICAgbG93cCB2ZWM0IG1hc2tDb2xvciA9IHRleHR1cmUyRChzX21hc2ssIHZf
bWFza1RleENvb3JkKTsKKyAgICAgICAgICAgICAgICBsb3dwIGZsb2F0IGZyYWdtZW50QWxwaGEg
PSB1X29wYWNpdHkgKiBtYXNrQ29sb3IuYTsKKyAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3Ig
PSB2ZWM0KGNvbG9yLnJnYiAqIGZyYWdtZW50QWxwaGEsIGNvbG9yLmEgKiBmcmFnbWVudEFscGhh
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1SZWN0U2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQpCi0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShj
b250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUsIGZyYWdtZW50U2hhZGVyU291cmNlUmVj
dFNpbXBsZSkKLXsKLSAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwotICAgIGdldFVuaWZvcm1Mb2Nh
dGlvbihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRp
b24obV9mbGlwTG9jYXRpb24sICJ1X2ZsaXAiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV90
ZXh0dXJlU2l6ZUxvY2F0aW9uLCAidV90ZXh0dXJlU2l6ZSIpOwotICAgIGdldFVuaWZvcm1Mb2Nh
dGlvbihtX3NvdXJjZVRleHR1cmVMb2NhdGlvbiwgInNfc291cmNlIik7Ci0gICAgZ2V0VW5pZm9y
bUxvY2F0aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5Iik7Ci19CisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIGZyYWdtZW50UmVjdE9wYWNpdHlBbmRNYXNrID0KKyAgICAgICAgU1RSSU5H
SUZZKAorICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisgICAgICAgICAgICB1
bmlmb3JtIHNhbXBsZXIyRFJlY3Qgc19zYW1wbGVyOworICAgICAgICAgICAgdW5pZm9ybSBzYW1w
bGVyMkRSZWN0IHNfbWFzazsKKyAgICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNp
dHk7CisgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKKyAg
ICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X21hc2tUZXhDb29yZDsKKyAgICAgICAgICAg
IHZvaWQgbWFpbih2b2lkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxvd3AgdmVj
NCBjb2xvciA9IHRleHR1cmUyRFJlY3Qoc19zYW1wbGVyLCB2X3NvdXJjZVRleENvb3JkKTsKKyAg
ICAgICAgICAgICAgICBsb3dwIHZlYzQgbWFza0NvbG9yID0gdGV4dHVyZTJEUmVjdChzX21hc2ss
IHZfbWFza1RleENvb3JkKTsKKyAgICAgICAgICAgICAgICBsb3dwIGZsb2F0IGZyYWdtZW50QWxw
aGEgPSB1X29wYWNpdHkgKiBtYXNrQ29sb3IuYTsKKyAgICAgICAgICAgICAgICBnbF9GcmFnQ29s
b3IgPSB2ZWM0KGNvbG9yLnJnYiAqIGZyYWdtZW50QWxwaGEsIGNvbG9yLmEgKiBmcmFnbWVudEFs
cGhhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKIAotVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1PcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5k
TWFzayhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrLCBmcmFn
bWVudFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrKQotewotICAgIGluaXRpYWxpemVQcm9ncmFt
KCk7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIp
OwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX2ZsaXBMb2NhdGlvbiwgInVfZmxpcCIpOwotICAg
IGdldFVuaWZvcm1Mb2NhdGlvbihtX3NvdXJjZVRleHR1cmVMb2NhdGlvbiwgInNfc291cmNlIik7
Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWFza1RleHR1cmVMb2NhdGlvbiwgInNfbWFzayIp
OwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0eSIp
OwotfQorICAgIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhPcGFjaXR5QW5kTWFzayA9CisgICAg
ICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAgIHVuaWZvcm0gbWF0NCB1X21hdHJpeDsKKyAgICAg
ICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X2ZsaXA7CisgICAgICAgICAgICBhdHRyaWJ1dGUg
dmVjNCBhX3ZlcnRleDsKKyAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRl
eENvb3JkOworICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfbWFza1RleENvb3JkOwor
ICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgdl9zb3VyY2VUZXhDb29yZCA9IHZlYzIoYV92ZXJ0ZXgueCwgbWl4KGFfdmVydGV4LnksIDEu
IC0gYV92ZXJ0ZXgueSwgdV9mbGlwKSk7CisgICAgICAgICAgICAgICAgdl9tYXNrVGV4Q29vcmQg
PSB2ZWMyKGFfdmVydGV4KTsKKyAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4
ICogYV92ZXJ0ZXg7CisgICAgICAgICAgICB9CisgICAgICAgICk7CiAKLVRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVJlY3RPcGFjaXR5QW5kTWFzayhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLSAgICA6IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJjZU9wYWNp
dHlBbmRNYXNrLCBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RPcGFjaXR5QW5kTWFzaykKLXsKLSAg
ICBpbml0aWFsaXplUHJvZ3JhbSgpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeExv
Y2F0aW9uLCAidV9tYXRyaXgiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9mbGlwTG9jYXRp
b24sICJ1X2ZsaXAiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9zb3VyY2VUZXh0dXJlTG9j
YXRpb24sICJzX3NvdXJjZSIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hc2tUZXh0dXJl
TG9jYXRpb24sICJzX21hc2siKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9j
YXRpb24sICJ1X29wYWNpdHkiKTsKLX0KKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRT
aW1wbGUgPQorICAgICAgICBTVFJJTkdJRlkoCisgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVt
cCBmbG9hdDsKKyAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc2FtcGxlcjsKKyAgICAg
ICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7CisgICAgICAgICAgICB2YXJ5aW5n
IGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKKyAgICAgICAgICAgIHZvaWQgbWFpbih2b2lk
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1
cmUyRChzX3NhbXBsZXIsIHZfc291cmNlVGV4Q29vcmQpOworICAgICAgICAgICAgICAgIGdsX0Zy
YWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogdV9vcGFjaXR5LCBjb2xvci5hICogdV9vcGFjaXR5
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1BbnRpYWxpYXNpbmdOb01hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFz
aW5nTm9NYXNrKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIDogVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVu
dFNoYWRlclNvdXJjZUFudGlhbGlhc2luZ05vTWFzaykKLXsKLSAgICBpbml0aWFsaXplUHJvZ3Jh
bSgpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgi
KTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9zb3VyY2VUZXh0dXJlTG9jYXRpb24sICJzX3Nv
dXJjZSIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNpdHlMb2NhdGlvbiwgInVfb3Bh
Y2l0eSIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3Jl
ZW5TcGFjZUxvY2F0aW9uLCAidV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2UiKTsKLSAg
ICBnZXRVbmlmb3JtTG9jYXRpb24obV9mbGlwTG9jYXRpb24sICJ1X2ZsaXAiKTsKLX0KKyAgICBz
dGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRBbnRpYWxpYXNpbmdOb01hc2sgPQorICAgICAgICBT
VFJJTkdJRlkoCisgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKKyAgICAgICAg
ICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc2FtcGxlcjsKKyAgICAgICAgICAgIHZhcnlpbmcgaGln
aHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOworICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0
IHVfb3BhY2l0eTsKKyAgICAgICAgICAgIHVuaWZvcm0gdmVjMyB1X2V4cGFuZGVkUXVhZEVkZ2Vz
SW5TY3JlZW5TcGFjZVs4XTsKKyAgICAgICAgICAgIHZvaWQgbWFpbigpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgdmVjNCBzYW1wbGVkQ29sb3IgPSB0ZXh0dXJlMkQoc19zYW1wbGVy
LCBjbGFtcCh2X3NvdXJjZVRleENvb3JkLCAwLjAsIDEuMCkpOworICAgICAgICAgICAgICAgIHZl
YzMgcG9zID0gdmVjMyhnbF9GcmFnQ29vcmQueHksIDEpOworCisgICAgICAgICAgICAgICAgLy8g
VGhlIGRhdGEgcGFzc2VkIGluIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlIGlzIG1l
cmVseSB0aGUKKyAgICAgICAgICAgICAgICAvLyBwcmUtc2NhbGVkIGNvZWZmZWNpZW50cyBvZiB0
aGUgbGluZSBlcXVhdGlvbnMgZGVzY3JpYmluZyB0aGUgZm91ciBlZGdlcworICAgICAgICAgICAg
ICAgIC8vIG9mIHRoZSBleHBhbmRlZCBxdWFkIGluIHNjcmVlbiBzcGFjZSBhbmQgdGhlIHJlY3Rh
bmd1bGFyIGJvdW5kaW5nIGJveAorICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBleHBhbmRlZCBx
dWFkLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gV2UgYXJlIGRvaW5n
IGEgc2ltcGxlIGRpc3RhbmNlIGNhbGN1bGF0aW9uIGhlcmUgYWNjb3JkaW5nIHRvIHRoZSBmb3Jt
dWxhOgorICAgICAgICAgICAgICAgIC8vIChBKnAueCArIEIqcC55ICsgQykgLyBzcXJ0KEFeMiAr
IEJeMikgPSBkaXN0YW5jZSBmcm9tIGxpbmUgdG8gcAorICAgICAgICAgICAgICAgIC8vIE5vdGUg
dGhhdCBBLCBCIGFuZCBDIGhhdmUgYWxyZWFkeSBiZWVuIHNjYWxlZCBieSAxIC8gc3FydChBXjIg
KyBCXjIpLgorICAgICAgICAgICAgICAgIGZsb2F0IGEwID0gY2xhbXAoZG90KHVfZXhwYW5kZWRR
dWFkRWRnZXNJblNjcmVlblNwYWNlWzBdLCBwb3MpLCAwLjAsIDEuMCk7CisgICAgICAgICAgICAg
ICAgZmxvYXQgYTEgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2Vb
MV0sIHBvcyksIDAuMCwgMS4wKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBhMiA9IGNsYW1wKGRv
dCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVsyXSwgcG9zKSwgMC4wLCAxLjApOwor
ICAgICAgICAgICAgICAgIGZsb2F0IGEzID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJ
blNjcmVlblNwYWNlWzNdLCBwb3MpLCAwLjAsIDEuMCk7CisgICAgICAgICAgICAgICAgZmxvYXQg
YTQgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNF0sIHBvcyks
IDAuMCwgMS4wKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBhNSA9IGNsYW1wKGRvdCh1X2V4cGFu
ZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs1XSwgcG9zKSwgMC4wLCAxLjApOworICAgICAgICAg
ICAgICAgIGZsb2F0IGE2ID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNw
YWNlWzZdLCBwb3MpLCAwLjAsIDEuMCk7CisgICAgICAgICAgICAgICAgZmxvYXQgYTcgPSBjbGFt
cChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbN10sIHBvcyksIDAuMCwgMS4w
KTsKKworICAgICAgICAgICAgICAgIC8vIE5vdyB3ZSB3YW50IHRvIHJlZHVjZSB0aGUgYWxwaGEg
dmFsdWUgb2YgdGhlIGZyYWdtZW50IGlmIGl0IGlzIGNsb3NlIHRvIHRoZQorICAgICAgICAgICAg
ICAgIC8vIGVkZ2VzIG9mIHRoZSBleHBhbmRlZCBxdWFkIChvciByZWN0YW5ndWxhciBib3VuZGlu
ZyBib3ggLS0gd2hpY2ggc2VlbXMgdG8gYmUKKyAgICAgICAgICAgICAgICAvLyBpbXBvcnRhbnQg
Zm9yIGJhY2tmYWNpbmcgcXVhZHMpLiBOb3RlIHRoYXQgd2UgYXJlIGNvbWJpbmluZyB0aGUgY29u
dHJpYnV0aW9uCisgICAgICAgICAgICAgICAgLy8gZnJvbSB0aGUgKHRvcCB8fCBib3R0b20pIGFu
ZCAobGVmdCB8fCByaWdodCkgZWRnZSBieSBzaW1wbHkgbXVsdGlwbHlpbmcuIFRoaXMgZm9sbG93
cworICAgICAgICAgICAgICAgIC8vIHRoZSBhcHByb2FjaCBkZXNjcmliZWQgYXQ6IGh0dHA6Ly9o
dHRwLmRldmVsb3Blci5udmlkaWEuY29tL0dQVUdlbXMyL2dwdWdlbXMyX2NoYXB0ZXIyMi5odG1s
LAorICAgICAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB3aXRob3V0IHVzaW5nIEdhdXNzaWFu
IHdlaWdodHMuCisgICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gc2FtcGxlZENvbG9yICog
dV9vcGFjaXR5ICogbWluKG1pbihhMCwgYTIpICogbWluKGExLCBhMyksIG1pbihhNCwgYTYpICog
bWluKGE1LCBhNykpOworICAgICAgICAgICAgfQorICAgICAgICApOwogCi1UZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQpCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKLXsKLX0KKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogZnJhZ21lbnRSZWN0U2ltcGxlID0KKyAgICAgICAgU1RSSU5HSUZZKAorICAg
ICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisgICAgICAgICAgICB1bmlmb3JtIHNh
bXBsZXIyRFJlY3Qgc19zYW1wbGVyOworICAgICAgICAgICAgdW5pZm9ybSBsb3dwIHZlYzIgc19z
YW1wbGVyU2l6ZTsKKyAgICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7Cisg
ICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKKyAgICAgICAg
ICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxvd3Ag
dmVjNCBjb2xvciA9IHRleHR1cmUyRFJlY3Qoc19zYW1wbGVyLCBzX3NhbXBsZXJTaXplICogdl9z
b3VyY2VUZXhDb29yZCk7CisgICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xv
ci5yZ2IgKiB1X29wYWNpdHksIGNvbG9yLmEgKiB1X29wYWNpdHkpOworICAgICAgICAgICAgfQor
ICAgICAgICApOwogCi1UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6flRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyKCkKLXsKLX0KKyAgICBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2ltcGxl
ID0KKyAgICAgICAgU1RSSU5HSUZZKAorICAgICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4
OworICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfZmxpcDsKKyAgICAgICAgICAgIGF0
dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OworICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZf
c291cmNlVGV4Q29vcmQ7CisgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB2X3NvdXJjZVRleENvb3JkID0gdmVjMihhX3ZlcnRleC54LCBt
aXgoYV92ZXJ0ZXgueSwgMS4gLSBhX3ZlcnRleC55LCB1X2ZsaXApKTsKKyAgICAgICAgICAgICAg
ICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogYV92ZXJ0ZXg7CisgICAgICAgICAgICB9CisgICAg
ICAgICk7CiAKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgc3RhdGljIGNvbnN0IGNoYXIq
IHZlcnRleFNvbGlkQ29sb3IgPQorICAgICAgICBTVFJJTkdJRlkoCisgICAgICAgICAgICB1bmlm
b3JtIG1hdDQgdV9tYXRyaXg7CisgICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsK
KyAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiBhX3ZlcnRleDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgKTsKIAotLy8gQ3JlYXRlIGEgbm9ybWFsIGRpc3RyaWJ1dGlvbiBvZiAyMSB2YWx1ZXMg
YmV0d2VlbiAtMiBhbmQgMi4KLSNkZWZpbmUgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEggMTEK
LSNkZWZpbmUgR0FVU1NJQU5fS0VSTkVMX1NURVAgMC4yCiAKLVN0YW5kYXJkRmlsdGVyUHJvZ3Jh
bTo6flN0YW5kYXJkRmlsdGVyUHJvZ3JhbSgpCi17Ci0gICAgbV9jb250ZXh0LT5kZXRhY2hTaGFk
ZXIobV9pZCwgbV92ZXJ0ZXhTaGFkZXIpOwotICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKG1f
dmVydGV4U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihtX2lkLCBtX2ZyYWdt
ZW50U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcihtX2ZyYWdtZW50U2hhZGVy
KTsKLSAgICBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0obV9pZCk7Ci19CisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGZyYWdtZW50U29saWRDb2xvciA9CisgICAgICAgIFNUUklOR0lGWSgKKyAgICAg
ICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OworICAgICAgICAgICAgdW5pZm9ybSB2ZWM0
IHVfY29sb3I7CisgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB1X2NvbG9yOworICAgICAgICAgICAgfQorICAg
ICAgICApOwogCi1TdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBl
IHR5cGUsIHVuc2lnbmVkIHBhc3MpCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1f
aWQoMCkKLXsKLSAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPQotICAgICAgICAg
ICAgU1RSSU5HSUZZKAotICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4Owot
ICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdGV4Q29vcmQ7Ci0gICAgICAgICAgICAg
ICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7Ci0gICAgICAgICAgICAgICAgdm9pZCBt
YWluKHZvaWQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2X3RleENv
b3JkID0gdmVjMihhX3RleENvb3JkKTsKLSAgICAgICAgICAgICAgICAgICAgZ2xfUG9zaXRpb24g
PSBhX3ZlcnRleDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICApOworICAgIHN0YXRp
YyBjb25zdCBjaGFyKiB2ZXJ0ZXhGaWx0ZXIgPQorICAgICAgICBTVFJJTkdJRlkoCisgICAgICAg
ICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKKyAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0
IGFfdGV4Q29vcmQ7CisgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsK
KyAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHZfdGV4Q29vcmQgPSB2ZWMyKGFfdGV4Q29vcmQpOworICAgICAgICAgICAgICAgIGdsX1Bv
c2l0aW9uID0gYV92ZXJ0ZXg7CisgICAgICAgICAgICB9CisgICAgICAgICk7CiAKICNkZWZpbmUg
U1RBTkRBUkRfRklMVEVSKC4uLikgXAogICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7
XG4iXAogICAgICAgICAidmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7XG4iXAogICAgICAg
ICAidW5pZm9ybSBoaWdocCBmbG9hdCB1X2Ftb3VudDtcbiJcCi0gICAgICAgICJ1bmlmb3JtIHNh
bXBsZXIyRCB1X3RleHR1cmU7XG4iXAotICAgICAgICAjX19WQV9BUkdTX18gXAotICAgICAgICAi
dm9pZCBtYWluKHZvaWQpXG4geyBnbF9GcmFnQ29sb3IgPSBzaGFkZSh0ZXh0dXJlMkQodV90ZXh0
dXJlLCB2X3RleENvb3JkKSk7IH0iCisgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBs
ZXI7XG4iI19fVkFfQVJHU19fIFwKKyAgICAgICAgInZvaWQgbWFpbih2b2lkKVxuIHsgZ2xfRnJh
Z0NvbG9yID0gc2hhZGUodGV4dHVyZTJEKHNfc2FtcGxlciwgdl90ZXhDb29yZCkpOyB9IgogCi0g
ICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSAwOwotICAgIHN3aXRjaCAodHlw
ZSkgewotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6Ci0gICAgICAgIGZyYWdt
ZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAorICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBmcmFnbWVudEdyYXlzY2FsZUZpbHRlciA9CisgICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKICAg
ICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgbG93cCBmbG9hdCBhbW91bnQgPSAxLjAgLSB1X2Ftb3VudDsKQEAg
LTQwOSw5ICsyODksOSBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJv
Z3JhbShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRmlsdGVyTwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbG9yLmEpOwogICAgICAgICAgICAgfQogICAgICAgICApOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6Ci0gICAgICAgIGZyYWdt
ZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAorCisgICAgc3RhdGljIGNvbnN0IGNo
YXIqIGZyYWdtZW50U2VwaWFGaWx0ZXIgPQorICAgICAgICBTVEFOREFSRF9GSUxURVIoCiAgICAg
ICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9hbW91bnQ7CkBAIC00
MjEsOSArMzAxLDkgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dy
YW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEZpbHRlck8KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb2xvci5hKTsKICAgICAgICAgICAgIH0KICAgICAgICAgKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgotICAgICAgICBmcmFn
bWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKKworICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBmcmFnbWVudFNhdHVyYXRlRmlsdGVyID0KKyAgICAgICAgU1RBTkRBUkRfRklMVEVSKAog
ICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gdmVjNCgoMC4yMTMgKyAwLjc4NyAqIHVfYW1vdW50
KSAqIGNvbG9yLnIgKyAoMC43MTUgLSAwLjcxNSAqIHVfYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4w
NzIgLSAwLjA3MiAqIHVfYW1vdW50KSAqIGNvbG9yLmIsCkBAIC00MzIsOSArMzEyLDkgQEAgU3Rh
bmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIEZpbHRlck8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5h
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNl
ID0gU1RBTkRBUkRfRklMVEVSKAorCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50SHVl
Um90YXRlRmlsdGVyID0KKyAgICAgICAgU1RBTkRBUkRfRklMVEVSKAogICAgICAgICAgICAgbG93
cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICBoaWdocCBmbG9hdCBwaSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDY7CkBAIC00NDYsNTgg
KzMyNiw2MiBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRmlsdGVyTwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbG9yLmEpOwogICAgICAgICAgICAgfQogICAgICAgICApOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgotICAgICAgICBmcmFnbWVudFNo
YWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBm
cmFnbWVudEludmVydEZpbHRlciA9CisgICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKICAgICAgICAg
ICAgIGxvd3AgZmxvYXQgaW52ZXJ0KGxvd3AgZmxvYXQgbikgeyByZXR1cm4gKDEuMCAtIG4pICog
dV9hbW91bnQgKyBuICogKDEuMCAtIHVfYW1vdW50KTsgfQogICAgICAgICAgICAgbG93cCB2ZWM0
IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdmVjNChpbnZlcnQoY29sb3IuciksIGludmVydChjb2xvci5nKSwgaW52ZXJ0KGNvbG9y
LmIpLCBjb2xvci5hKTsKICAgICAgICAgICAgIH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6Ci0gICAgICAgIGZyYWdtZW50
U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAorCisgICAgc3RhdGljIGNvbnN0IGNoYXIq
IGZyYWdtZW50QnJpZ2h0bmVzc0ZpbHRlciA9CisgICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKICAg
ICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29sb3IucmdiICogKDEuMCArIHVfYW1vdW50
KSwgY29sb3IuYSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKLSAgICAgICAgZnJhZ21lbnRTaGFk
ZXJTb3VyY2UgPSBTVEFOREFSRF9GSUxURVIoCisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJh
Z21lbnRDb250cmFzdEZpbHRlciA9CisgICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKICAgICAgICAg
ICAgIGxvd3AgZmxvYXQgY29udHJhc3QobG93cCBmbG9hdCBuKSB7IHJldHVybiAobiAtIDAuNSkg
KiB1X2Ftb3VudCArIDAuNTsgfQogICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVj
NCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdmVjNChjb250
cmFzdChjb2xvci5yKSwgY29udHJhc3QoY29sb3IuZyksIGNvbnRyYXN0KGNvbG9yLmIpLCBjb2xv
ci5hKTsKICAgICAgICAgICAgIH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNl
ID0gU1RBTkRBUkRfRklMVEVSKAorCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50T3Bh
Y2l0eUZpbHRlciA9CisgICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKICAgICAgICAgICAgIGxvd3Ag
dmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHZlYzQoY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSAqIHVfYW1v
dW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0g
U1RSSU5HSUZZKAorCisjZGVmaW5lIEJMVVJfQ09OU1RBTlRTICIjZGVmaW5lIEdBVVNTSUFOX0tF
Uk5FTF9IQUxGX1dJRFRIIDExXG4jZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9TVEVQIDAuMlxuIgor
CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50Qmx1ckZpbHRlciA9CisgICAgICAgIEJM
VVJfQ09OU1RBTlRTCisgICAgICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAgIC8vIENyZWF0ZSBh
IG5vcm1hbCBkaXN0cmlidXRpb24gb2YgMjEgdmFsdWVzIGJldHdlZW4gLTIgYW5kIDIuCiAgICAg
ICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgICAgIHZhcnlpbmcgaGln
aHAgdmVjMiB2X3RleENvb3JkOwogICAgICAgICAgICAgdW5pZm9ybSBsb3dwIHZlYzIgdV9ibHVy
UmFkaXVzOwotICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlOworICAgICAg
ICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zYW1wbGVyOwogICAgICAgICAgICAgdW5pZm9ybSBm
bG9hdCB1X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsKIAogICAg
ICAgICAgICAgbG93cCB2ZWM0IHNhbXBsZUNvbG9yKGZsb2F0IHJhZGl1cykKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90ZXhDb29yZCArIHJhZGl1cyAqIHVf
Ymx1clJhZGl1czsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHVfdGV4dHVyZSwg
Y29vcmQpICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwg
MS4gJiYgY29vcmQueSA8IDEuKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHNf
c2FtcGxlciwgY29vcmQpICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBj
b29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgdmVjNCBibHVyKCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2ZWM0IHRvdGFs
ID0gc2FtcGxlQ29sb3IoMCkgKiB1X2dhdXNzaWFuS2VybmVsWzBdOworICAgICAgICAgICAgICAg
IHZlYzQgdG90YWwgPSBzYW1wbGVDb2xvcigwLikgKiB1X2dhdXNzaWFuS2VybmVsWzBdOwogICAg
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lE
VEg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVDb2xvcihmbG9h
dChpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07CiAgICAg
ICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUNvbG9yKGZsb2F0KC0xICogaSkgKiBHQVVT
U0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwpAQCAtNTExLDI4MiArMzk1
LDEzMCBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgRmlsdGVyTwogICAgICAgICAgICAgICAgIGdsX0ZyYWdD
b2xvciA9IGJsdXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOgotICAgICAgICBzd2l0Y2gg
KHBhc3MpIHsKLSAgICAgICAgY2FzZSAwOiB7Ci0gICAgICAgICAgICAvLyBGaXJzdCBwYXNzOiBo
b3Jpem9udGFsIGFscGhhIGJsdXIuCi0gICAgICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9
IFNUUklOR0lGWSgKLSAgICAgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSAg
ICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKLSAgICAgICAgICAg
ICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9zaGFkb3dCbHVyUmFkaXVzOwotICAgICAgICAgICAg
ICAgIHVuaWZvcm0gbG93cCB2ZWMyIHVfc2hhZG93T2Zmc2V0OwotICAgICAgICAgICAgICAgIHVu
aWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTsKLSAgICAgICAgICAgICAgICB1bmlmb3JtIGZsb2F0
IHVfZ2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdOwotCi0gICAgICAg
ICAgICAgICAgbG93cCBmbG9hdCBzYW1wbGVBbHBoYShmbG9hdCByYWRpdXMpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90ZXhDb29yZCAtIHVf
c2hhZG93T2Zmc2V0ICsgdmVjMihyYWRpdXMgKiB1X3NoYWRvd0JsdXJSYWRpdXMsIDAuKTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHR1cmUyRCh1X3RleHR1cmUsIGNvb3JkKS5hICog
ZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29v
cmQueSA8IDEuKTsKLSAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBsb3dwIGZs
b2F0IHNoYWRvd0JsdXJIb3Jpem9udGFsKCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGZsb2F0IHRvdGFsID0gc2FtcGxlQWxwaGEoMCkgKiB1X2dhdXNzaWFuS2VybmVs
WzBdOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tF
Uk5FTF9IQUxGX1dJRFRIOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9
IHNhbXBsZUFscGhhKGZsb2F0KGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lh
bktlcm5lbFtpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhh
KGZsb2F0KC0xICogaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVs
W2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRvdGFsOwotICAgICAgICAgICAgICAgIH0KKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21l
bnRTaGFkb3dGaWx0ZXIxID0KKyAgICAgICAgQkxVUl9DT05TVEFOVFMKKyAgICAgICAgU1RSSU5H
SUZZKAorICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisgICAgICAgICAgICB2
YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKKyAgICAgICAgICAgIHVuaWZvcm0gbG93cCBm
bG9hdCB1X2JsdXJSYWRpdXM7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVjMiB1X3NoYWRv
d09mZnNldDsKKyAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc2FtcGxlcjsKKyAgICAg
ICAgICAgIHVuaWZvcm0gZmxvYXQgdV9nYXVzc2lhbktlcm5lbFtHQVVTU0lBTl9LRVJORUxfSEFM
Rl9XSURUSF07CiAKLSAgICAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4sIDEuLCAx
LiwgMS4pICogc2hhZG93Qmx1ckhvcml6b250YWwoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICApOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBsb3dwIGZsb2F0IHNh
bXBsZUFscGhhKGZsb2F0IHJhZGl1cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2
ZWMyIGNvb3JkID0gdl90ZXhDb29yZCAtIHVfc2hhZG93T2Zmc2V0ICsgdmVjMihyYWRpdXMgKiB1
X2JsdXJSYWRpdXMsIDAuKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHNfc2Ft
cGxlciwgY29vcmQpLmEgKiBmbG9hdChjb29yZC54ID4gMC4gJiYgY29vcmQueSA+IDAuICYmIGNv
b3JkLnggPCAxLiAmJiBjb29yZC55IDwgMS4pOwogICAgICAgICAgICAgfQotICAgICAgICBjYXNl
IDE6IHsKLSAgICAgICAgICAgIC8vIFNlY29uZCBwYXNzOiB2ZXJ0aWNhbCBhbHBoYSBibHVyIGFu
ZCBjb21wb3NpdGUgd2l0aCBvcmlnaW4uCi0gICAgICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJj
ZSA9IFNUUklOR0lGWSgKLSAgICAgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsK
LSAgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKLSAgICAgICAg
ICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9zaGFkb3dCbHVyUmFkaXVzOwotICAgICAgICAg
ICAgICAgIHVuaWZvcm0gbG93cCB2ZWM0IHVfc2hhZG93Q29sb3I7Ci0gICAgICAgICAgICAgICAg
dW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlOwotICAgICAgICAgICAgICAgIHVuaWZvcm0gc2Ft
cGxlcjJEIHVfY29udGVudFRleHR1cmU7Ci0gICAgICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1
X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsKLQotICAgICAgICAg
ICAgICAgIGxvd3AgZmxvYXQgc2FtcGxlQWxwaGEoZmxvYXQgcikKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHZlYzIgY29vcmQgPSB2X3RleENvb3JkICsgdmVjMigwLiwg
ciAqIHVfc2hhZG93Qmx1clJhZGl1cyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0
dXJlMkQodV90ZXh0dXJlLCBjb29yZCkuYSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBjb29yZC55
ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgbG93cCBmbG9hdCBzaGFkb3dCbHVyVmVydGljYWwoKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgdG90YWwgPSBzYW1wbGVB
bHBoYSgwKSAqIHVfZ2F1c3NpYW5LZXJuZWxbMF07Ci0gICAgICAgICAgICAgICAgICAgIGZvciAo
aW50IGkgPSAxOyBpIDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7IGkrKykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoaSkgKiBHQVVTU0lB
Tl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwotICAgICAgICAgICAgICAgICAg
ICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoLTEgKiBpKSAqIEdBVVNTSUFOX0tFUk5F
TF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG90YWw7Ci0gICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgbG93cCB2ZWM0IHNvdXJjZU92ZXIobG93cCB2ZWM0IHNvdXJjZSwgbG93
cCB2ZWM0IGRlc3RpbmF0aW9uKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gQ29tcG9zaXRlIHRoZSBzaGFkb3cgd2l0aCB0aGUgb3JpZ2luYWwgdGV4dHVyZS4KLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZSArIGRlc3RpbmF0aW9uICogKDEuIC0gc291
cmNlLmEpOworICAgICAgICAgICAgbG93cCBmbG9hdCBzaGFkb3dCbHVySG9yaXpvbnRhbCgpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmxvYXQgdG90YWwgPSBzYW1wbGVBbHBoYSgw
LikgKiB1X2dhdXNzaWFuS2VybmVsWzBdOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAx
OyBpIDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7IGkrKykgeworICAgICAgICAgICAgICAg
ICAgICB0b3RhbCArPSBzYW1wbGVBbHBoYShmbG9hdChpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQ
KSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07CisgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNh
bXBsZUFscGhhKGZsb2F0KC0xICogaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNz
aWFuS2VybmVsW2ldOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHZvaWQg
bWFpbih2b2lkKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZ2xfRnJh
Z0NvbG9yID0gc291cmNlT3Zlcih0ZXh0dXJlMkQodV9jb250ZW50VGV4dHVyZSwgdl90ZXhDb29y
ZCksIHNoYWRvd0JsdXJWZXJ0aWNhbCgpICogdV9zaGFkb3dDb2xvcik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IHJldHVybiB0b3RhbDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQogCi0gICAgaWYgKCFmcmFn
bWVudFNoYWRlclNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotICAgIFBsYXRmb3JtM0RPYmplY3Qg
dmVydGV4U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OlZFUlRFWF9TSEFERVIpOwotICAgIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIgPSBt
X2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVS
KTsKLSAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIHZlcnRleFNoYWRl
clNvdXJjZSk7Ci0gICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIGZy
YWdtZW50U2hhZGVyU291cmNlKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW1JRCA9IG1f
Y29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOwotICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcih2
ZXJ0ZXhTaGFkZXIpOwotICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRl
cik7Ci0jaWYgIUxPR19ESVNBQkxFRAotICAgIFN0cmluZyBsb2c7Ci0gICAgbV9jb250ZXh0LT5n
ZXRTaGFkZXJJbmZvTG9nKGZyYWdtZW50U2hhZGVyKTsKLSAgICBXVEZMb2coJkxvZ0NvbXBvc2l0
aW5nLCAiJXNcbiIsIGxvZy5hc2NpaSgpLmRhdGEoKSk7Ci0jZW5kaWYKLSAgICBtX2NvbnRleHQt
PmF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIHZlcnRleFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5h
dHRhY2hTaGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5s
aW5rUHJvZ3JhbShwcm9ncmFtSUQpOworICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLiwgMS4sIDEu
LCAxLikgKiBzaGFkb3dCbHVySG9yaXpvbnRhbCgpOworICAgICAgICAgICAgfQorICAgICAgICAp
OwogCi0gICAgbV92ZXJ0ZXhBdHRyaWIgPSBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKHBy
b2dyYW1JRCwgImFfdmVydGV4Iik7Ci0gICAgbV90ZXhDb29yZEF0dHJpYiA9IG1fY29udGV4dC0+
Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiYV90ZXhDb29yZCIpOwotICAgIG1fdGV4dHVy
ZVVuaWZvcm1Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1J
RCwgInVfdGV4dHVyZSIpOwotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpHUkFZU0NBTEU6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgotICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6SFVFX1JPVEFURToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgotICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpDT05UUkFTVDoKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAg
bV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9u
KHByb2dyYW1JRCwgInVfYW1vdW50Iik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpCTFVSOgotICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5yYWRpdXMg
PSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2JsdXJSYWRpdXMi
KTsKLSAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLmJsdXIuZ2F1c3NpYW5LZXJuZWwgPSBtX2Nv
bnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2dhdXNzaWFuS2VybmVsIik7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoK
LSAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzID0gbV9jb250ZXh0
LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dCbHVyUmFkaXVzIik7Ci0g
ICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3NpYW5LZXJuZWwgPSBtX2NvbnRl
eHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2dhdXNzaWFuS2VybmVsIik7Ci0g
ICAgICAgIGlmICghcGFzcykKLSAgICAgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cu
b2Zmc2V0ID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFk
b3dPZmZzZXQiKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQg
dGhlIGNvbG9yIGFuZCB0aGUgY29udGVudCB0ZXh0dXJlIGluIHRoZSBzZWNvbmQgcGFzcywgdGhl
IGZpcnN0IHBhc3MgaXMgb25seSBhIGhvcml6b250YWwgYWxwaGEgYmx1ci4KLSAgICAgICAgICAg
IG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29sb3IgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1M
b2NhdGlvbihwcm9ncmFtSUQsICJ1X3NoYWRvd0NvbG9yIik7Ci0gICAgICAgICAgICBtX3VuaWZv
cm1Mb2NhdGlvbnMuc2hhZG93LmNvbnRlbnRUZXh0dXJlID0gbV9jb250ZXh0LT5nZXRVbmlmb3Jt
TG9jYXRpb24ocHJvZ3JhbUlELCAidV9jb250ZW50VGV4dHVyZSIpOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBtX2lk
ID0gcHJvZ3JhbUlEOwotICAgIG1fdmVydGV4U2hhZGVyID0gdmVydGV4U2hhZGVyOwotICAgIG1f
ZnJhZ21lbnRTaGFkZXIgPSBmcmFnbWVudFNoYWRlcjsKLX0KKyAgICAvLyBTZWNvbmQgcGFzczog
dmVydGljYWwgYWxwaGEgYmx1ciBhbmQgY29tcG9zaXRlIHdpdGggb3JpZ2luLgorICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRvd0ZpbHRlcjIgPQorICAgICAgICBCTFVSX0NPTlNU
QU5UUworICAgICAgICBTVFJJTkdJRlkoCisgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBm
bG9hdDsKKyAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOworICAgICAg
ICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfYmx1clJhZGl1czsKKyAgICAgICAgICAgIHVuaWZv
cm0gbG93cCB2ZWM0IHVfc2hhZG93Q29sb3I7CisgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIy
RCBzX3NhbXBsZXI7CisgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX2NvbnRlbnRUZXh0
dXJlOworICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFO
X0tFUk5FTF9IQUxGX1dJRFRIXTsKIAotUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+
IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKLXsK
LSAgICBSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBwcm9ncmFtID0gYWRvcHRSZWYobmV3
IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbShjb250ZXh0LCB0eXBlLCBwYXNzKSk7Ci0gICAgaWYgKCFw
cm9ncmFtLT5tX2lkKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGxvd3AgZmxvYXQg
c2FtcGxlQWxwaGEoZmxvYXQgcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2ZWMy
IGNvb3JkID0gdl90ZXhDb29yZCArIHZlYzIoMC4sIHIgKiB1X2JsdXJSYWRpdXMpOworICAgICAg
ICAgICAgICAgIHJldHVybiB0ZXh0dXJlMkQoc19zYW1wbGVyLCBjb29yZCkuYSAqIGZsb2F0KGNv
b3JkLnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAx
Lik7CisgICAgICAgICAgICB9CiAKLSAgICByZXR1cm4gcHJvZ3JhbTsKLX0KKyAgICAgICAgICAg
IGxvd3AgZmxvYXQgc2hhZG93Qmx1clZlcnRpY2FsKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBmbG9hdCB0b3RhbCA9IHNhbXBsZUFscGhhKDAuKSAqIHVfZ2F1c3NpYW5LZXJuZWxb
MF07CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxf
SEFMRl9XSURUSDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFs
cGhhKGZsb2F0KGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtp
XTsKKyAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoLTEgKiBp
KSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07CisgICAgICAg
ICAgICAgICAgfQogCi1zdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNzKGZsb2F0IHgpCi17Ci0gICAg
cmV0dXJuIGV4cCgtKHggKiB4KSAvIDIuKTsKLX0KKyAgICAgICAgICAgICAgICByZXR1cm4gdG90
YWw7CisgICAgICAgICAgICB9CiAKLXN0YXRpYyBmbG9hdCogZ2F1c3NpYW5LZXJuZWwoKQotewot
ICAgIHN0YXRpYyBib29sIHByZXBhcmVkID0gZmFsc2U7Ci0gICAgc3RhdGljIGZsb2F0IGtlcm5l
bFtHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSF0gPSB7MCwgfTsKKyAgICAgICAgICAgIGxvd3Ag
dmVjNCBzb3VyY2VPdmVyKGxvd3AgdmVjNCBzb3VyY2UsIGxvd3AgdmVjNCBkZXN0aW5hdGlvbikK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBDb21wb3NpdGUgdGhlIHNoYWRvdyB3
aXRoIHRoZSBvcmlnaW5hbCB0ZXh0dXJlLgorICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2Ug
KyBkZXN0aW5hdGlvbiAqICgxLiAtIHNvdXJjZS5hKTsKKyAgICAgICAgICAgIH0KIAotICAgIGlm
IChwcmVwYXJlZCkKLSAgICAgICAgcmV0dXJuIGtlcm5lbDsKKyAgICAgICAgICAgIHZvaWQgbWFp
bih2b2lkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHNv
dXJjZU92ZXIodGV4dHVyZTJEKHNfY29udGVudFRleHR1cmUsIHZfdGV4Q29vcmQpLCBzaGFkb3dC
bHVyVmVydGljYWwoKSAqIHVfc2hhZG93Q29sb3IpOworICAgICAgICAgICAgfQorICAgICAgICAp
OwogCi0gICAga2VybmVsWzBdID0gZ2F1c3MoMCk7Ci0gICAgZmxvYXQgc3VtID0ga2VybmVsWzBd
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURU
SDsgKytpKSB7Ci0gICAgICAgIGtlcm5lbFtpXSA9IGdhdXNzKGkgKiBHQVVTU0lBTl9LRVJORUxf
U1RFUCk7Ci0gICAgICAgIHN1bSArPSAyICoga2VybmVsW2ldOworICAgIGlmIChzcGVjcy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgc3BlY3MucmVzaXplKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpMYXN0RmlsdGVyKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OkRlZmF1bHRdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhTaW1wbGUsIGZyYWdtZW50U2ltcGxlKTsKKyAg
ICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNvbGlkQ29sb3JdID0gU2hh
ZGVyU3BlYyh2ZXJ0ZXhTb2xpZENvbG9yLCBmcmFnbWVudFNvbGlkQ29sb3IpOworICAgICAgICBz
cGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6UmVjdF0gPSBTaGFkZXJTcGVjKHZlcnRl
eFNpbXBsZSwgZnJhZ21lbnRSZWN0U2ltcGxlKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6Ok1hc2tlZF0gPSBTaGFkZXJTcGVjKHZlcnRleE9wYWNpdHlBbmRNYXNr
LCBmcmFnbWVudE9wYWNpdHlBbmRNYXNrKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6Ok1hc2tlZFJlY3RdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhPcGFjaXR5QW5kTWFz
aywgZnJhZ21lbnRSZWN0T3BhY2l0eUFuZE1hc2spOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6QW50aWFsaWFzZWRdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhTaW1wbGUs
IGZyYWdtZW50QW50aWFsaWFzaW5nTm9NYXNrKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6OkdyYXlzY2FsZUZpbHRlcl0gPSBTaGFkZXJTcGVjKHZlcnRleEZpbHRl
ciwgZnJhZ21lbnRHcmF5c2NhbGVGaWx0ZXIpOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6U2VwaWFGaWx0ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZy
YWdtZW50U2VwaWFGaWx0ZXIpOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6U2F0dXJhdGVGaWx0ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50
U2F0dXJhdGVGaWx0ZXIpOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6SHVlUm90YXRlRmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudEh1
ZVJvdGF0ZUZpbHRlcik7CisgICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpCcmlnaHRuZXNzRmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudEJy
aWdodG5lc3NGaWx0ZXIpOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6Q29udHJhc3RGaWx0ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50Q29u
dHJhc3RGaWx0ZXIpOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6
SW52ZXJ0RmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudEludmVydEZp
bHRlcik7CisgICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5
RmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudE9wYWNpdHlGaWx0ZXIp
OworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Qmx1ckZpbHRlcl0g
PSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRCbHVyRmlsdGVyKTsKKyAgICAgICAg
c3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNoYWRvd0ZpbHRlclBhc3MxXSA9IFNo
YWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudFNoYWRvd0ZpbHRlcjEpOworICAgICAgICBz
cGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2hhZG93RmlsdGVyUGFzczJdID0gU2hh
ZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50U2hhZG93RmlsdGVyMik7CiAgICAgfQogCi0g
ICAgLy8gTm9ybWFsaXplIHRoZSBrZXJuZWwKLSAgICBmbG9hdCBzY2FsZSA9IDEgLyBzdW07Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyAr
K2kpCi0gICAgICAgIGtlcm5lbFtpXSAqPSBzY2FsZTsKLQotICAgIHByZXBhcmVkID0gdHJ1ZTsK
LSAgICByZXR1cm4ga2VybmVsOworICAgIEFTU0VSVChzcGVjcy5zaXplKCkgPiBrZXkpOworICAg
IFNoYWRlclNwZWMmIHNwZWMgPSBzcGVjc1trZXldOworICAgIHZlcnRleFNvdXJjZSA9IHNwZWMu
dmVydGV4U2hhZGVyOworICAgIGZyYWdtZW50U291cmNlID0gc3BlYy5mcmFnbWVudFNoYWRlcjsK
IH0KIAotdm9pZCBTdGFuZGFyZEZpbHRlclByb2dyYW06OnByZXBhcmUoY29uc3QgRmlsdGVyT3Bl
cmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHBhc3MsIGNvbnN0IEludFNpemUmIHNpemUsIEdD
M0R1aW50IGNvbnRlbnRUZXh0dXJlKQorVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIDog
bV9jb250ZXh0KGNvbnRleHQpCiB7Ci0gICAgbV9jb250ZXh0LT51c2VQcm9ncmFtKG1faWQpOwot
ICAgIHN3aXRjaCAob3BlcmF0aW9uLmdldE9wZXJhdGlvblR5cGUoKSkgewotICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElB
OgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKLSAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6SFVFX1JPVEFURToKLSAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWYobV91bmlm
b3JtTG9jYXRpb25zLmFtb3VudCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpCUklHSFRORVNTOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKLSAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAgbV9jb250ZXh0LT51bmlmb3Jt
MWYobV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21w
b25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogewotICAgICAgICBj
b25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmx1ckZp
bHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbik7Ci0gICAgICAgIEZsb2F0U2l6ZSByYWRpdXM7Ci0K
LSAgICAgICAgLy8gQmx1ciBpcyBkb25lIGluIHR3byBwYXNzZXMsIGZpcnN0IGhvcml6b250YWxs
eSBhbmQgdGhlbiB2ZXJ0aWNhbGx5LiBUaGUgc2FtZSBzaGFkZXIgaXMgdXNlZCBmb3IgYm90aC4K
LSAgICAgICAgaWYgKHBhc3MpCi0gICAgICAgICAgICByYWRpdXMuc2V0SGVpZ2h0KGZsb2F0VmFs
dWVGb3JMZW5ndGgoYmx1ci5zdGREZXZpYXRpb24oKSwgc2l6ZS5oZWlnaHQoKSkgLyBzaXplLmhl
aWdodCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmFkaXVzLnNldFdpZHRoKGZsb2F0
VmFsdWVGb3JMZW5ndGgoYmx1ci5zdGREZXZpYXRpb24oKSwgc2l6ZS53aWR0aCgpKSAvIHNpemUu
d2lkdGgoKSk7Ci0KLSAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMmYobV91bmlmb3JtTG9jYXRp
b25zLmJsdXIucmFkaXVzLCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKTsKLSAgICAg
ICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLmdhdXNzaWFu
S2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFE
T1c6IHsKLSAgICAgICAgY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgc2hhZG93ID0g
c3RhdGljX2Nhc3Q8Y29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbik7
Ci0gICAgICAgIHN3aXRjaCAocGFzcykgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAv
LyBGaXJzdCBwYXNzOiB2ZXJ0aWNhbCBhbHBoYSBibHVyLgotICAgICAgICAgICAgbV9jb250ZXh0
LT51bmlmb3JtMmYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5vZmZzZXQsIGZsb2F0KHNoYWRv
dy5sb2NhdGlvbigpLngoKSkgLyBmbG9hdChzaXplLndpZHRoKCkpLCBmbG9hdChzaGFkb3cubG9j
YXRpb24oKS55KCkpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICAgICAgbV9jb250
ZXh0LT51bmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzLCBzaGFk
b3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLndpZHRoKCkpKTsKLSAgICAgICAgICAgIG1f
Y29udGV4dC0+dW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNzaWFuS2Vy
bmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgLy8gU2Vjb25kIHBh
c3M6IHdlIG5lZWQgdGhlIHNoYWRvdyBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBmb3Ig
Y29tcG9zaXRpbmcuCi0gICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihtX3VuaWZvcm1M
b2NhdGlvbnMuc2hhZG93LmJsdXJSYWRpdXMsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0
KHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihtX3Vu
aWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFM
Rl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2
ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKTsKLSAgICAgICAgICAgIG1fY29u
dGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbnRlbnRU
ZXh0dXJlKTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKG1fdW5pZm9ybUxvY2F0
aW9ucy5zaGFkb3cuY29udGVudFRleHR1cmUsIDEpOwotICAgICAgICAgICAgZmxvYXQgciwgZywg
YiwgYTsKLSAgICAgICAgICAgIHNoYWRvdy5jb2xvcigpLmdldFJHQkEociwgZywgYiwgYSk7Ci0g
ICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm00ZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93
LmNvbG9yLCByLCBnLCBiLCBhKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CiB9
CiAKLVBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6Z2V0U2hhZGVyRm9yRmlsdGVyKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgZmlsdGVy
LCB1bnNpZ25lZCBwYXNzKQorVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6On5UZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcigpCiB7Ci0gICAgUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4g
cHJvZ3JhbTsKLSAgICBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSA9IGZpbHRl
ci5nZXRPcGVyYXRpb25UeXBlKCk7Ci0gICAgaW50IGtleSA9IGludCh0eXBlKSB8IChwYXNzIDw8
IDE2KTsKLSAgICBGaWx0ZXJNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9maWx0ZXJNYXAuZmlu
ZChrZXkpOwotICAgIGlmIChpdGVyYXRvciA9PSBtX2ZpbHRlck1hcC5lbmQoKSkgewotICAgICAg
ICBwcm9ncmFtID0gU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpjcmVhdGUobV9jb250ZXh0LCB0eXBl
LCBwYXNzKTsKLSAgICAgICAgaWYgKCFwcm9ncmFtKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICAgICAgbV9maWx0ZXJNYXAuYWRkKGtleSwgcHJvZ3JhbSk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIHByb2dyYW0gPSBpdGVyYXRvci0+dmFsdWU7Ci0KLSAgICByZXR1cm4gcHJvZ3JhbTsKIH0K
IAotdW5zaWduZWQgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFBhc3Nlc1JlcXVpcmVk
Rm9yRmlsdGVyKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgb3BlcmF0aW9uKSBjb25zdAorUGFzc1Jl
ZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6OmdldFNoYWRlclByb2dyYW0oU2hhZGVyS2V5IGtleSkKIHsKLSAgICBzd2l0Y2ggKG9wZXJh
dGlvbi5nZXRPcGVyYXRpb25UeXBlKCkpIHsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JB
WVNDQUxFOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKLSAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6U0FUVVJBVEU6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RB
VEU6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKLSAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6QlJJR0hUTkVTUzoKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6
Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIHJldHVybiAxOwot
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpEUk9QX1NIQURPVzoKLSAgICAgICAgLy8gV2UgdXNlIHR3by1wYXNzZXMgKHZlcnRpY2FsK2hv
cml6b250YWwpIGZvciBibHVyIGFuZCBkcm9wLXNoYWRvdy4KLSAgICAgICAgcmV0dXJuIDI7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtTWFwOjppdGVyYXRvciBpdCA9IG1fcHJvZ3JhbXMuZmluZChrZXkpOworICAg
IGlmIChpdCAhPSBtX3Byb2dyYW1zLmVuZCgpKQorICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwog
CisgICAgU3RyaW5nIHZlcnRleFNoYWRlcjsKKyAgICBTdHJpbmcgZnJhZ21lbnRTaGFkZXI7Cisg
ICAgZ2V0U2hhZGVyU3BlYyhrZXksIHZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIpOworICAg
IFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtOjpjcmVhdGUobV9jb250ZXh0LCB2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50
U2hhZGVyKTsKKyAgICBtX3Byb2dyYW1zLmFkZChrZXksIHByb2dyYW0pOworICAgIHJldHVybiBw
cm9ncmFtOwogfQotCi0jZW5kaWYKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuaAppbmRleCAxZmZiNzEwMGJhZTgyZmJlYTE1OGYxODc0NGIxMTBmYzdk
MDY2NTRlLi5iMWY4ZDYxMDdkMDk2Y2FjMjIzNWEyZmEwNDAwZDgyYjRjZjJjMmY5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaApAQCAtMjEsMjMzICsyMSwxMDIgQEAK
ICNpZm5kZWYgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXJfaAogI2RlZmluZSBUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcl9oCiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYm
IFVTRShURVhUVVJFX01BUFBFUikKLQotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2lmIFVTRShU
RVhUVVJFX01BUFBFUikKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUg
IkludFNpemUuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKLSNpbmNsdWRlICJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotI2luY2x1ZGUgIkZp
bHRlck9wZXJhdGlvbnMuaCIKLSNlbmRpZgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmlu
Z0hhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBCaXRtYXBUZXh0dXJlOwot
Y2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI7CisjZGVmaW5lIFRFWE1BUF9ERUNMQVJF
X1ZBUklBQkxFKEFjY2Vzc29yLCBOYW1lLCBUeXBlKSBHQzNEdWludCBBY2Nlc3NvciMjTG9jYXRp
b24oKSB7IHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcgbmFtZShOYW1lKTsgcmV0dXJuIGdldExv
Y2F0aW9uKG5hbWUsIFR5cGUpOyB9CisjZGVmaW5lIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oQWNj
ZXNzb3IpIFRFWE1BUF9ERUNMQVJFX1ZBUklBQkxFKEFjY2Vzc29yLCAidV8iI0FjY2Vzc29yLCBV
bmlmb3JtVmFyaWFibGUpCisjZGVmaW5lIFRFWE1BUF9ERUNMQVJFX0FUVFJJQlVURShBY2Nlc3Nv
cikgVEVYTUFQX0RFQ0xBUkVfVkFSSUFCTEUoQWNjZXNzb3IsICJhXyIjQWNjZXNzb3IsIEF0dHJp
YlZhcmlhYmxlKQorI2RlZmluZSBURVhNQVBfREVDTEFSRV9TQU1QTEVSKEFjY2Vzc29yKSBURVhN
QVBfREVDTEFSRV9WQVJJQUJMRShBY2Nlc3NvciwgInNfIiNBY2Nlc3NvciwgVW5pZm9ybVZhcmlh
YmxlKQogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiB7CiBwdWJsaWM6Ci0gICAgUGxhdGZvcm0z
RE9iamVjdCBpZCgpIHsgcmV0dXJuIG1faWQ7IH0KLSAgICBHQzNEdWludCB2ZXJ0ZXhBdHRyaWIo
KSB7IHJldHVybiBtX3ZlcnRleEF0dHJpYjsgfQorICAgIFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bUlEKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IGNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHZlcnRleCwgY29uc3QgU3RyaW5nJiBmcmFn
bWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4LCBmcmFnbWVudCkpOworICAgIH0KIAotICAgIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgY2hhciog
dmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSk7CiAg
ICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKTsKIAotICAgIHZpcnR1YWwg
dm9pZCBwcmVwYXJlKGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqKSB7IH0KLSAg
ICBHQzNEaW50IG1hdHJpeExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhMb2NhdGlv
bjsgfQotICAgIEdDM0RpbnQgZmxpcExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mbGlwTG9j
YXRpb247IH0KLSAgICBHQzNEaW50IHRleHR1cmVTaXplTG9jYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3RleHR1cmVTaXplTG9jYXRpb247IH0KLSAgICBHQzNEaW50IHNvdXJjZVRleHR1cmVMb2Nh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlVGV4dHVyZUxvY2F0aW9uOyB9Ci0gICAgR0Mz
RGludCBtYXNrVGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrVGV4dHVyZUxv
Y2F0aW9uOyB9Ci0gICAgR0MzRGludCBvcGFjaXR5TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X29wYWNpdHlMb2NhdGlvbjsgfQotCi0gICAgc3RhdGljIGJvb2wgaXNWYWxpZFVuaWZvcm1Mb2Nh
dGlvbihHQzNEaW50IGxvY2F0aW9uKSB7IHJldHVybiBsb2NhdGlvbiA+PSAwOyB9Ci0KLXByb3Rl
Y3RlZDoKLSAgICB2b2lkIGdldFVuaWZvcm1Mb2NhdGlvbihHQzNEaW50JiB2YXIsIGNvbnN0IGNo
YXIqIG5hbWUpOwotICAgIHZvaWQgaW5pdGlhbGl6ZVByb2dyYW0oKTsKLSAgICB2aXJ0dWFsIHZv
aWQgaW5pdGlhbGl6ZSgpIHsgfQotICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmVydGV4U2hhZGVyU291cmNlLmRhdGEoKTsgfQotICAgIGNvbnN0
IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9mcmFnbWVudFNo
YWRlclNvdXJjZS5kYXRhKCk7IH0KKyAgICBURVhNQVBfREVDTEFSRV9BVFRSSUJVVEUodmVydGV4
KQorICAgIFRFWE1BUF9ERUNMQVJFX0FUVFJJQlVURSh0ZXhDb29yZCkKIAotICAgIEdyYXBoaWNz
Q29udGV4dDNEKiBtX2NvbnRleHQ7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2lkOwotICAgIEdD
M0R1aW50IG1fdmVydGV4QXR0cmliOwotICAgIFBsYXRmb3JtM0RPYmplY3QgbV92ZXJ0ZXhTaGFk
ZXI7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZyYWdtZW50U2hhZGVyOwotICAgIEdDM0RpbnQg
bV9tYXRyaXhMb2NhdGlvbjsKLSAgICBHQzNEaW50IG1fZmxpcExvY2F0aW9uOwotICAgIEdDM0Rp
bnQgbV90ZXh0dXJlU2l6ZUxvY2F0aW9uOwotICAgIEdDM0RpbnQgbV9zb3VyY2VUZXh0dXJlTG9j
YXRpb247Ci0gICAgR0MzRGludCBtX29wYWNpdHlMb2NhdGlvbjsKLSAgICBHQzNEaW50IG1fbWFz
a1RleHR1cmVMb2NhdGlvbjsKLQotcHJpdmF0ZToKLSAgICBDU3RyaW5nIG1fdmVydGV4U2hhZGVy
U291cmNlOwotICAgIENTdHJpbmcgbV9mcmFnbWVudFNoYWRlclNvdXJjZTsKLX07CisgICAgVEVY
TUFQX0RFQ0xBUkVfVU5JRk9STShtYXRyaXgpCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShm
bGlwKQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0odGV4dHVyZVNpemUpCisgICAgVEVYTUFQ
X0RFQ0xBUkVfVU5JRk9STShvcGFjaXR5KQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oY29s
b3IpCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShleHBhbmRlZFF1YWRFZGdlc0luU2NyZWVu
U3BhY2UpCisgICAgVEVYTUFQX0RFQ0xBUkVfU0FNUExFUihzYW1wbGVyKQorICAgIFRFWE1BUF9E
RUNMQVJFX1NBTVBMRVIobWFzaykKIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLWNsYXNzIFN0
YW5kYXJkRmlsdGVyUHJvZ3JhbSA6IHB1YmxpYyBSZWZDb3VudGVkPFN0YW5kYXJkRmlsdGVyUHJv
Z3JhbT4gewotcHVibGljOgotICAgIHZpcnR1YWwgflN0YW5kYXJkRmlsdGVyUHJvZ3JhbSgpOwot
ICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYsIHVuc2lnbmVk
IHBhc3MsIGNvbnN0IEludFNpemUmLCBHQzNEdWludCBjb250ZW50VGV4dHVyZSk7Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBjcmVhdGUoR3JhcGhpY3NDb250
ZXh0M0QqLCBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIHVuc2lnbmVkIHBhc3MpOwot
ICAgIEdDM0R1aW50IHZlcnRleEF0dHJpYigpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGV4QXR0cmli
OyB9Ci0gICAgR0MzRHVpbnQgdGV4Q29vcmRBdHRyaWIoKSBjb25zdCB7IHJldHVybiBtX3RleENv
b3JkQXR0cmliOyB9Ci0gICAgR0MzRHVpbnQgdGV4dHVyZVVuaWZvcm0oKSBjb25zdCB7IHJldHVy
biBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb247IH0KLXByb3RlY3RlZDoKLSAgICBHcmFwaGljc0Nv
bnRleHQzRCogbV9jb250ZXh0OwotcHJpdmF0ZToKLSAgICBTdGFuZGFyZEZpbHRlclByb2dyYW0o
KTsKLSAgICBTdGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqLCBGaWx0ZXJP
cGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIHVuc2lnbmVkIHBhc3MpOwotICAgIFBsYXRmb3JtM0RP
YmplY3QgbV9pZDsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fdmVydGV4U2hhZGVyOwotICAgIFBs
YXRmb3JtM0RPYmplY3QgbV9mcmFnbWVudFNoYWRlcjsKLSAgICBHQzNEdWludCBtX3ZlcnRleEF0
dHJpYjsKLSAgICBHQzNEdWludCBtX3RleENvb3JkQXR0cmliOwotICAgIEdDM0R1aW50IG1fdGV4
dHVyZVVuaWZvcm1Mb2NhdGlvbjsKLSAgICB1bmlvbiB7Ci0gICAgICAgIEdDM0R1aW50IGFtb3Vu
dDsKLQotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0MzRHVpbnQgcmFkaXVzOwotICAg
ICAgICAgICAgR0MzRHVpbnQgZ2F1c3NpYW5LZXJuZWw7Ci0gICAgICAgIH0gYmx1cjsKLQotICAg
ICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0MzRHVpbnQgYmx1clJhZGl1czsKLSAgICAgICAg
ICAgIEdDM0R1aW50IGNvbG9yOwotICAgICAgICAgICAgR0MzRHVpbnQgb2Zmc2V0OwotICAgICAg
ICAgICAgR0MzRHVpbnQgY29udGVudFRleHR1cmU7Ci0gICAgICAgICAgICBHQzNEdWludCBnYXVz
c2lhbktlcm5lbDsKLSAgICAgICAgfSBzaGFkb3c7Ci0gICAgfSBtX3VuaWZvcm1Mb2NhdGlvbnM7
Ci19OworICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oYW1vdW50KQorICAgIFRFWE1BUF9ERUNM
QVJFX1VOSUZPUk0oZ2F1c3NpYW5LZXJuZWwpCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShi
bHVyUmFkaXVzKQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oc2hhZG93Q29sb3IpCisgICAg
VEVYTUFQX0RFQ0xBUkVfVU5JRk9STShzaGFkb3dPZmZzZXQpCisgICAgVEVYTUFQX0RFQ0xBUkVf
U0FNUExFUihjb250ZW50VGV4dHVyZSkKICNlbmRpZgogCi1jbGFzcyBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVNpbXBsZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1T
aW1wbGU+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoY29u
dGV4dCkpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtU2ltcGxlKEdyYXBoaWNzQ29udGV4dDNEKik7Ci1wcml2YXRlOgotICAgIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCk7Ci19OwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVJlY3RTaW1wbGUgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewot
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
UmVjdFNpbXBsZT4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RT
aW1wbGUoY29udGV4dCkpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtUmVjdFNpbXBsZShHcmFwaGljc0NvbnRleHQzRCopOwogcHJpdmF0ZToKLSAg
ICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoKTsKLX07Ci0KLWNsYXNzIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2sgOiBwdWJsaWMgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s+IGNyZWF0ZShHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayhjb250ZXh0KSk7Ci0gICAgfQotCi1w
cm90ZWN0ZWQ6Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayhH
cmFwaGljc0NvbnRleHQzRCopOwotcHJpdmF0ZToKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbU9wYWNpdHlBbmRNYXNrKCk7Ci19OwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVJlY3RPcGFjaXR5QW5kTWFzayA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soY29udGV4dCkpOwotICAgIH0KLQotcHJvdGVjdGVk
OgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKEdyYXBo
aWNzQ29udGV4dDNEKik7Ci1wcml2YXRlOgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
UmVjdE9wYWNpdHlBbmRNYXNrKCk7Ci19OwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVNvbGlkQ29sb3IgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewotcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29s
aWRDb2xvcj4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29s
b3IoY29udGV4dCkpOwotICAgIH0KLQotICAgIEdDM0RpbnQgY29sb3JMb2NhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fY29sb3JMb2NhdGlvbjsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yKEdyYXBoaWNzQ29udGV4dDNEKik7Ci1wcml2YXRl
OgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcigpOwotICAgIEdDM0Rp
bnQgbV9jb2xvckxvY2F0aW9uOwotfTsKLQotY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1BbnRpYWxpYXNpbmdOb01hc2sgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0g
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtQW50aWFsaWFzaW5nTm9NYXNrPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrKGNvbnRleHQpKTsKLSAgICB9Ci0KLSAgICBHQzNEaW50
IGV4cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0dXJlQ29vcmRpbmF0ZXNMb2NhdGlvbigpIHsgcmV0
dXJuIG1fZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb3JkaW5hdGVzTG9jYXRpb247IH0K
LSAgICBHQzNEaW50IGV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uKCkgeyBy
ZXR1cm4gbV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbjsgfQorICAgIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBj
b25zdCBTdHJpbmcmIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgU3RyaW5nJiBmcmFnbWVudFNo
YWRlclNvdXJjZSk7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX3ZlcnRleFNoYWRlcjsKKyAgICBQ
bGF0Zm9ybTNET2JqZWN0IG1fZnJhZ21lbnRTaGFkZXI7CiAKLXByb3RlY3RlZDoKLSAgICBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayhHcmFwaGljc0NvbnRleHQz
RCopOwotcHJpdmF0ZToKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2lu
Z05vTWFzaygpOworICAgIGVudW0gVmFyaWFibGVUeXBlIHsgVW5pZm9ybVZhcmlhYmxlLCBBdHRy
aWJWYXJpYWJsZSB9OworICAgIEdDM0R1aW50IGdldExvY2F0aW9uKGNvbnN0IEF0b21pY1N0cmlu
ZyYsIFZhcmlhYmxlVHlwZSk7CiAKLSAgICBHQzNEaW50IG1fZXhwYW5kZWRRdWFkVmVydGljZXNJ
blRleHR1cmVDb3JkaW5hdGVzTG9jYXRpb247Ci0gICAgR0MzRGludCBtX2V4cGFuZGVkUXVhZEVk
Z2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
bV9jb250ZXh0OworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9pZDsKKyAgICBIYXNoTWFwPEF0b21p
Y1N0cmluZywgR0MzRHVpbnQ+IG1fdmFyaWFibGVzOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIgewogcHVibGljOgotICAgIGVudW0gU2hhZGVyVHlwZSB7Ci0gICAgICAg
IEludmFsaWQgPSAwLCAvLyBIYXNoTWFwcyBkbyBub3QgbGlrZSAwIGFzIGEga2V5LgotICAgICAg
ICBTaW1wbGUsCi0gICAgICAgIEFudGlhbGlhc2luZ05vTWFzaywKLSAgICAgICAgUmVjdFNpbXBs
ZSwKLSAgICAgICAgT3BhY2l0eUFuZE1hc2ssCi0gICAgICAgIFJlY3RPcGFjaXR5QW5kTWFzaywK
LSAgICAgICAgU29saWRDb2xvcgorICAgIGVudW0gU2hhZGVyS2V5IHsKKyAgICAgICAgSW52YWxp
ZCA9IDAsCisgICAgICAgIERlZmF1bHQsCisgICAgICAgIFJlY3QsCisgICAgICAgIE1hc2tlZCwK
KyAgICAgICAgTWFza2VkUmVjdCwKKyAgICAgICAgU29saWRDb2xvciwKKyAgICAgICAgQW50aWFs
aWFzZWQsCisgICAgICAgIEdyYXlzY2FsZUZpbHRlciwKKyAgICAgICAgU2VwaWFGaWx0ZXIsCisg
ICAgICAgIFNhdHVyYXRlRmlsdGVyLAorICAgICAgICBIdWVSb3RhdGVGaWx0ZXIsCisgICAgICAg
IEJyaWdodG5lc3NGaWx0ZXIsCisgICAgICAgIENvbnRyYXN0RmlsdGVyLAorICAgICAgICBPcGFj
aXR5RmlsdGVyLAorICAgICAgICBJbnZlcnRGaWx0ZXIsCisgICAgICAgIEJsdXJGaWx0ZXIsCisg
ICAgICAgIFNoYWRvd0ZpbHRlclBhc3MxLAorICAgICAgICBTaGFkb3dGaWx0ZXJQYXNzMiwKKyAg
ICAgICAgTGFzdEZpbHRlcgogICAgIH07CiAKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cigpIHsgfQogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKEdyYXBoaWNzQ29udGV4dDNE
Kik7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKTsKIAotI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKLSAgICB1bnNpZ25lZCBnZXRQYXNzZXNSZXF1aXJlZEZvckZpbHRl
cihjb25zdCBGaWx0ZXJPcGVyYXRpb24mKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPFN0YW5kYXJk
RmlsdGVyUHJvZ3JhbT4gZ2V0U2hhZGVyRm9yRmlsdGVyKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYs
IHVuc2lnbmVkIHBhc3MpOwotI2VuZGlmCi0KLSAgICBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtPiBnZXRTaGFkZXJQcm9ncmFtKFNoYWRlclR5cGUpOwotICAgIFBhc3NSZWZQ
dHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yPiBzb2xpZENvbG9yUHJvZ3Jh
bSgpOwotICAgIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNp
bmdOb01hc2s+IGFudGlhbGlhc2luZ05vTWFza1Byb2dyYW0oKTsKKyAgICBQYXNzUmVmUHRyPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBnZXRTaGFkZXJQcm9ncmFtKFNoYWRlcktleSk7CiAK
IHByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFNoYWRlclR5cGUsIFJlZlB0cjxUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbT4sIERlZmF1bHRIYXNoPGludD46Okhhc2gsIEhhc2hUcmFpdHM8
aW50PiA+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOwotICAgIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtTWFwIG1fdGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA7Ci0gICAgR3Jh
cGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAg
ICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiA+IEZp
bHRlck1hcDsKLSAgICBGaWx0ZXJNYXAgbV9maWx0ZXJNYXA7Ci0jZW5kaWYKKyAgICB0eXBlZGVm
IEhhc2hNYXA8U2hhZGVyS2V5LCBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+LCBE
ZWZhdWx0SGFzaDxpbnQ+OjpIYXNoLCBIYXNoVHJhaXRzPGludD4gPiBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbU1hcDsKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcCBtX3Byb2dy
YW1zOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwogfTsKIAogfQot
CiAjZW5kaWYKIAogI2VuZGlmIC8vIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167672</attachid>
            <date>2012-10-08 19:14:21 -0700</date>
            <delta_ts>2012-10-16 11:44:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86048-20121009051322.patch</filename>
            <type>text/plain</type>
            <size>81152</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQzNTJhMTZiYTAzNmU5
ZDMwZjkwNTdjNTkyNDIxZGU0MDE4YWIwNy4uZDNhNGFjZjAxNzVmNjM1NmRiZjE2NTRjMTE3Zjhi
YThkYWM2Y2NjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDEyLTEwLTA4ICBOb2Ft
IFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBbVGV4bWFw
XSBSZWZhY3RvciBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlciB0byBiZSBjbGVhcmVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjA0OAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByZXZpb3VzIGltcGxl
bWVudGF0aW9uIG9mIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIHdhcyB2ZXJ5IHZlcmJvc2Us
IGNhbGxpbmcgZm9yIHRvbworICAgICAgICBtYW55IGNhc3RzIGFuZCBhbWJpZ3VvdXMgb3duZXJz
aGlwLgorICAgICAgICBUaGlzIHJlZmFjdG9yIGRvZXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAg
MS4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gaXMgb25lIGNsYXNzIHdpdGhvdXQgc3ViY2xh
c3Nlcy4KKyAgICAgICAgMi4gVW5pZm9ybS9BdHRyaWJ1dGUgYWNjZXNzb3JzIGFyZSBnZW5lcmF0
ZWQgYnkgc3BlY2lhbCBtYWNyb3MgKFRFWE1BUF9ERUNMQVJFXy4uLikgdGhhdAorICAgICAgICAg
ICBnZW5lcmF0ZSBib3RoIHRoZSBDKysgYWNjZXNzIGZ1bmN0aW9uLCBhcyB3ZWxsIGFzIHRoZSBH
TFNMIG5hbWUgb2YgdGhlIHZhcmlhYmxlLiBUaGlzCisgICAgICAgICAgIGFsbG93cyBhZGRpbmcv
cmVtb3ZpbmcgdmFyaWFibGVzIGZyb20gYSBzaGFkZXIgd2l0aG91dCBhZGRpbmcgYnJvaWxlci1w
bGF0ZSBjb2RlIGxpa2UKKyAgICAgICAgICAgYmVmb3JlLgorCisgICAgICAgIEFmdGVyIHRoaXMg
Y2hhbmdlIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIGhhcyBvbmx5IG9uZSByZXNwb25zaWJp
bGl0eSAtIGRlYWxpbmcgd2l0aAorICAgICAgICBUZXh0dXJlTWFwcGVyR0wncyBidWlsdC1pbiBz
aGFkZXJzIGFuZCB0aGVpciBsaWZlY3ljbGUuIFByZXBhcmluZyBmaWx0ZXJzIGV0Yy4gaXMgZG9u
ZQorICAgICAgICBpbiBUZXh0dXJlTWFwcGVyR0wuCisKKyAgICAgICAgVGhpcyBpcyBhIHJlZmFj
dG9yIHdpdGhvdXQgbmV3IGZ1bmN0aW9uYWxpdHkuIEl0IGhhcyBiZWVuIHZlcmlmaWVkIHRvIG5v
dCBicmVhayBhbnkgZXhpc3RpbmcKKyAgICAgICAgcmVsZXZhbnQgdGVzdC4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckdMOjpkcmF3VGV4dHVyZVJlY3RhbmdsZUFSQik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJHTDo6ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKToKKyAgICAgICAgICAgIFVzZSB0aGUg
TUFDUk8tZ2VuZXJhdGVkIHVuaWZvcm0gYWNjZXNzb3JzLgorCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OmtleUZvckZpbHRlclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0UGFzc2VzUmVxdWlyZWRGb3JGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Z2F1c3MpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2F1c3NpYW5LZXJuZWwpOgorICAgICAgICAoV2ViQ29yZTo6cHJl
cGFyZUZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpk
cmF3RmlsdGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjphcHBseUZp
bHRlcnMpOgorICAgICAgICAgICAgTW92ZSB0aGUgZmlsdGVyIGxvZ2ljIHRvIFRleHR1cmVNYXBw
ZXJHTAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Z2V0TG9jYXRpb24pOgorICAgICAgICAoU2hhZGVy
U3BlYyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkZXJTcGVjOjpTaGFkZXJTcGVjKToKKyAgICAg
ICAgKFdlYkNvcmU6OmdldFNoYWRlclNwZWMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjp+VGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OmdldFNoYWRlclByb2dyYW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6cHJvZ3JhbUlEKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpjb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpjcmVhdGUpOgorICAgICAg
ICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0pOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXIpOgorICAgICAgICAgICAgU2VlIGRlc2NyaXB0aW9uLgorCiAyMDEyLTEwLTA4
ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUG9zdC1yMTMw
MjI2IENsZWFudXA6IENvbW1lbnQgYSBjb21wbGljYXRlZCBpZiBzdGF0ZW1lbnQgYW5kIG1ha2Ug
aXQgYSBoZWxwZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDkxNjliZmIwOWIzNmFlMjhi
NDg3MTY1ZjEzNzBiODNjOTIyMGEwM2IuLjZmMzI5MTg3ZTE5NzQ4MDcxNzczMTBjNGNiOWNmY2Y5
NDg1Y2RmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUg
Ikxlbmd0aEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCIKICNpbmNsdWRlICJUaW1lci5oIgpAQCAt
MjY2LDcgKzI2Nyw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjplbmRQYWludGluZygpCiAKIHZv
aWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYgcXVhZFRvRHJhdywg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0qIHNoYWRlclByb2dyYW0sIEdDM0RlbnVtIGRyYXdpbmdNb2RlLCBib29s
IG5lZWRzQmxlbmRpbmcpCiB7Ci0gICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5h
YmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7CiAg
ICAgbV9jb250ZXh0M0QtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZF
UiwgMCk7CiAKICAgICBjb25zdCBHQzNEZmxvYXQgcXVhZFtdID0gewpAQCAtMjc1LDcgKzI3Niw3
IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYgcXVhZFRv
RHJhdywgY29uc3QgVHJhbnNmb3JtYXRpb25NCiAgICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVj
dE1hcHBlZFRvVW5pdFNxdWFyZS5wMygpLngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVk
VG9Vbml0U3F1YXJlLnAzKCkueSgpLAogICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBw
ZWRUb1VuaXRTcXVhcmUucDQoKS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5p
dFNxdWFyZS5wNCgpLnkoKQogICAgIH07Ci0gICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBv
aW50ZXIoc2hhZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmliKCksIDIsIEdyYXBoaWNzQ29udGV4dDNE
OjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIocXVhZCkpOworICAgIG1fY29udGV4dDNELT52
ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlclByb2dyYW0tPnZlcnRleExvY2F0aW9uKCksIDIsIEdy
YXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIocXVhZCkpOwogCiAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0
YSgpLnByb2plY3Rpb25NYXRyaXgpLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkubXVsdGlwbHko
VHJhbnNmb3JtYXRpb25NYXRyaXgoCiAgICAgICAgICAgICBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFy
Z2V0UmVjdC53aWR0aCgpLCAwLCAwLCAwLApAQCAtMjk3LDcgKzI5OCw3IEBAIHZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYgcXVhZFRvRHJhdywgY29uc3QgVHJh
bnNmb3JtYXRpb25NCiAgICAgICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4
dDNEOjpCTEVORCk7CiAKICAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhkcmF3aW5nTW9kZSwg
MCwgNCk7Ci0gICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQ
cm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKIH0KIAogdm9pZCBU
ZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCB3aWR0
aCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbW9kZWxWaWV3TWF0cml4KQpAQCAtMzA1LDE1ICszMDYsMTIgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCB3aWR0aCwgY29uc3Qg
RmxvYXRSZWMKICAgICBpZiAoY2xpcFN0YWNrKCkuY3VycmVudCgpLnNjaXNzb3JCb3guaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1Tb2xpZENvbG9yPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyLnNvbGlkQ29sb3JQcm9ncmFtKCk7Ci0gICAgbV9jb250ZXh0M0Qt
PnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OlNvbGlkQ29sb3IpOworICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dy
YW1JRCgpKTsKIAotICAgIGZsb2F0IGFscGhhID0gY29sb3IuYWxwaGEoKSAvIDI1NS4wOwotICAg
IG1fY29udGV4dDNELT51bmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLAotICAgICAg
ICAgICAgICAgICAgICAgICAoY29sb3IucmVkKCkgLyAyNTUuMCkgKiBhbHBoYSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgKGNvbG9yLmdyZWVuKCkgLyAyNTUuMCkgKiBhbHBoYSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgKGNvbG9yLmJsdWUoKSAvIDI1NS4wKSAqIGFscGhhLAotICAgICAgICAg
ICAgICAgICAgICAgICBhbHBoYSk7CisgICAgZmxvYXQgciwgZywgYiwgYTsKKyAgICBjb2xvci5n
ZXRSR0JBKHIsIGcsIGIsIGEpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtNGYocHJvZ3JhbS0+
Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICBtX2NvbnRleHQzRC0+bGluZVdpZHRo
KHdpZHRoKTsKIAogICAgIGRyYXdRdWFkKHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgcHJv
Z3JhbS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9PUCwgY29sb3IuaGFzQWxwaGEo
KSk7CkBAIC0zNjgsMjcgKzM2NiwyNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1
cmVSZWN0YW5nbGVBUkIodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbgogewogICAg
IFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbTsKICAgICBpZiAobWFz
a1RleHR1cmUpCi0gICAgICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6UmVjdE9wYWNpdHlBbmRNYXNrKTsKKyAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5z
aGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFt
KFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpNYXNrZWRSZWN0KTsKICAgICBlbHNlCi0gICAg
ICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6UmVjdFNp
bXBsZSk7Ci0gICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7CisgICAg
ICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6UmVjdCk7
CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogCi0g
ICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0
dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3Jh
bS0+dmVydGV4TG9jYXRpb24oKSk7CiAgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKICAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUo
R0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCB0ZXh0dXJlKTsKLSAgICBtX2NvbnRleHQzRC0+dW5p
Zm9ybTFpKHByb2dyYW0tPnNvdXJjZVRleHR1cmVMb2NhdGlvbigpLCAwKTsKKyAgICBtX2NvbnRl
eHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPnNhbXBsZXJMb2NhdGlvbigpLCAwKTsKIAogICAgIG1f
Y29udGV4dDNELT51bmlmb3JtMWYocHJvZ3JhbS0+ZmxpcExvY2F0aW9uKCksICEhKGZsYWdzICYg
U2hvdWxkRmxpcFRleHR1cmUpKTsKICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTJmKHByb2dyYW0t
PnRleHR1cmVTaXplTG9jYXRpb24oKSwgdGV4dHVyZVNpemUud2lkdGgoKSwgdGV4dHVyZVNpemUu
aGVpZ2h0KCkpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYocHJvZ3JhbS0+b3BhY2l0eUxv
Y2F0aW9uKCksIG9wYWNpdHkpOwogCi0gICAgaWYgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
Ojppc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpKSkKLSAg
ICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xZihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSwg
b3BhY2l0eSk7Ci0KLSAgICBpZiAobWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQo
KSAmJiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCkpKSB7CisgICAgaWYgKG1hc2tUZXh0dXJlICYm
IG1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkpIHsKICAgICAgICAgY29uc3QgQml0bWFwVGV4dHVyZUdM
KiBtYXNrVGV4dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMKj4obWFz
a1RleHR1cmUpOwogICAgICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRTEpOwogICAgICAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1hc2tUZXh0dXJlR0wtPmlkKCkpOwotICAgICAg
ICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRpb24oKSwg
MSk7CisgICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+bWFza0xvY2F0aW9u
KCksIDEpOwogICAgICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRTApOwogICAgIH0KIApAQCAtNDA1LDEwICs0MDEsMTAgQEAgdm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBj
b25zdCBJbnRTaXplJgogCiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBw
cm9ncmFtOwogICAgIGlmIChtYXNrVGV4dHVyZSkKLSAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5z
aGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFt
KFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5QW5kTWFzayk7CisgICAgICAgIHBy
b2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIu
Z2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6TWFza2VkKTsKICAg
ICBlbHNlCi0gICAgICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6U2ltcGxlKTsKLSAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgp
KTsKKyAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpEZWZhdWx0KTsKKyAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFt
SUQoKSk7CiAKICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwg
dGV4dHVyZSwgZmxhZ3MsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgbWFz
a1RleHR1cmUpOwogfQpAQCAtNTM2LDggKzUzMiw4IEBAIGJvb2wgVGV4dHVyZU1hcHBlckdMOjpk
cmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3Ms
CiAgICAgcXVhZFRvRWRnZUFycmF5KGV4cGFuZGVkUXVhZEluU2NyZWVuU3BhY2UsIHRhcmdldFF1
YWRFZGdlcyk7CiAgICAgcXVhZFRvRWRnZUFycmF5KGluZmxhdGVRdWFkKHF1YWRJblNjcmVlblNw
YWNlLmJvdW5kaW5nQm94KCksICBpbmZsYXRpb25EaXN0YW5jZSksIHRhcmdldFF1YWRFZGdlcyAr
IDEyKTsKIAotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2lu
Z05vTWFzaz4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlci5hbnRpYWxpYXNpbmdOb01hc2tQcm9ncmFtKCk7Ci0gICAgbV9jb250ZXh0M0Qt
PnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OkFudGlhbGlhc2VkKTsKKyAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9n
cmFtSUQoKSk7CiAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0zZnYocHJvZ3JhbS0+ZXhwYW5kZWRR
dWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb24oKSwgOCwgdGFyZ2V0UXVhZEVkZ2VzKTsKIAog
ICAgIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCB0ZXh0dXJlLCBm
bGFncywgRHJhd1F1YWQob3JpZ2luYWxUYXJnZXRSZWN0LCBleHBhbmRlZFF1YWRJblRleHR1cmVD
b29yZGluYXRlcyksIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgMCAvKiBtYXNrVGV4dHVyZSAq
Lyk7CkBAIC01NDYsMjEgKzU0MiwxOSBAQCBib29sIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1
cmVXaXRoQW50aWFsaWFzaW5nKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLAogCiB2b2lk
IFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCB1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywg
Y29uc3QgRHJhd1F1YWQmIHF1YWRUb0RyYXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
b2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tU
ZXh0dXJlKQogewotICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9n
cmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJp
YkFycmF5KHByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwogICAgIG1fY29udGV4dDNELT5hY3Rp
dmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgbV9jb250ZXh0M0Qt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlKTsKLSAg
ICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPnNvdXJjZVRleHR1cmVMb2NhdGlvbigp
LCAwKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPnNhbXBsZXJMb2NhdGlv
bigpLCAwKTsKIAogICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYocHJvZ3JhbS0+ZmxpcExvY2F0
aW9uKCksICEhKGZsYWdzICYgU2hvdWxkRmxpcFRleHR1cmUpKTsKKyAgICBtX2NvbnRleHQzRC0+
dW5pZm9ybTFmKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpLCBvcGFjaXR5KTsKIAotICAgIGlm
IChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihwcm9n
cmFtLT5vcGFjaXR5TG9jYXRpb24oKSkpCi0gICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYo
cHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkpOwotCi0gICAgaWYgKG1hc2tUZXh0
dXJlICYmIG1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkgJiYgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigp
KSkgeworICAgIGlmIChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpKSB7CiAg
ICAgICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCogbWFza1RleHR1cmVHTCA9IHN0YXRpY19jYXN0
PGNvbnN0IEJpdG1hcFRleHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsKICAgICAgICAgbV9jb250ZXh0
M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKTsKICAgICAgICAg
bV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBt
YXNrVGV4dHVyZUdMLT5pZCgpKTsKLSAgICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9n
cmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCksIDEpOworICAgICAgICBtX2NvbnRleHQzRC0+dW5p
Zm9ybTFpKHByb2dyYW0tPm1hc2tMb2NhdGlvbigpLCAxKTsKICAgICAgICAgbV9jb250ZXh0M0Qt
PmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKICAgICB9CiAKQEAg
LTcxMCwyNyArNzA0LDE3MSBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMo
SW1hZ2UqIGltYWdlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjbwogfQogCiAjaWYgRU5B
QkxFKENTU19GSUxURVJTKQotdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdGaWx0ZXJlZChjb25z
dCBCaXRtYXBUZXh0dXJlJiBzb3VyY2VUZXh0dXJlLCBjb25zdCBCaXRtYXBUZXh0dXJlJiBjb250
ZW50VGV4dHVyZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXIsIGludCBwYXNzKQorCitz
dGF0aWMgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNoYWRlcktleSBrZXlGb3JGaWx0ZXJU
eXBlKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNzKQor
eworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NB
TEU6CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6R3JheXNjYWxl
RmlsdGVyOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKKyAgICAgICAgcmV0dXJu
IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTZXBpYUZpbHRlcjsKKyAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6U0FUVVJBVEU6CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6U2F0dXJhdGVGaWx0ZXI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9S
T1RBVEU6CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6SHVlUm90
YXRlRmlsdGVyOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CisgICAgICAgIHJl
dHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6SW52ZXJ0RmlsdGVyOworICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgorICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6OkJyaWdodG5lc3NGaWx0ZXI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkNPTlRSQVNUOgorICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OkNvbnRyYXN0RmlsdGVyOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgorICAg
ICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wYWNpdHlGaWx0ZXI7Cisg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6Qmx1ckZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
RFJPUF9TSEFET1c6CisgICAgICAgIHJldHVybiBwYXNzID8gVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6OlNoYWRvd0ZpbHRlclBhc3MyIDogVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNo
YWRvd0ZpbHRlclBhc3MxOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkludmFsaWQ7
CisgICAgfQorfQorCitzdGF0aWMgdW5zaWduZWQgZ2V0UGFzc2VzUmVxdWlyZWRGb3JGaWx0ZXIo
RmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKKyAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6U0VQSUE6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgor
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgorICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpJTlZFUlQ6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6Cisg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpPUEFDSVRZOgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6QkxVUjoKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6CisgICAgICAg
IC8vIFdlIHVzZSB0d28tcGFzc2VzICh2ZXJ0aWNhbCtob3Jpem9udGFsKSBmb3IgYmx1ciBhbmQg
ZHJvcC1zaGFkb3cuCisgICAgICAgIHJldHVybiAyOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KK30KKworLy8gQ3JlYXRlIGEgbm9ybWFsIGRpc3RyaWJ1dGlvbiBvZiAy
MSB2YWx1ZXMgYmV0d2VlbiAtMiBhbmQgMi4KK3N0YXRpYyBjb25zdCBpbnQgR2F1c3NpYW5LZXJu
ZWxIYWxmV2lkdGggPSAxMTsKK3N0YXRpYyBjb25zdCBmbG9hdCBHYXVzc2lhbktlcm5lbFN0ZXAg
PSAwLjI7CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgZ2F1c3MoZmxvYXQgeCkKK3sKKyAgICByZXR1
cm4gZXhwKC0oeCAqIHgpIC8gMi4pOworfQorCitzdGF0aWMgZmxvYXQqIGdhdXNzaWFuS2VybmVs
KCkKK3sKKyAgICBzdGF0aWMgYm9vbCBwcmVwYXJlZCA9IGZhbHNlOworICAgIHN0YXRpYyBmbG9h
dCBrZXJuZWxbR2F1c3NpYW5LZXJuZWxIYWxmV2lkdGhdID0gezAsIH07CisKKyAgICBpZiAocHJl
cGFyZWQpCisgICAgICAgIHJldHVybiBrZXJuZWw7CisKKyAgICBrZXJuZWxbMF0gPSBnYXVzcygw
KTsKKyAgICBmbG9hdCBzdW0gPSBrZXJuZWxbMF07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsg
aSA8IEdhdXNzaWFuS2VybmVsSGFsZldpZHRoOyArK2kpIHsKKyAgICAgICAga2VybmVsW2ldID0g
Z2F1c3MoaSAqIEdhdXNzaWFuS2VybmVsU3RlcCk7CisgICAgICAgIHN1bSArPSAyICoga2VybmVs
W2ldOworICAgIH0KKworICAgIC8vIE5vcm1hbGl6ZSB0aGUga2VybmVsLgorICAgIGZsb2F0IHNj
YWxlID0gMSAvIHN1bTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2F1c3NpYW5LZXJu
ZWxIYWxmV2lkdGg7ICsraSkKKyAgICAgICAga2VybmVsW2ldICo9IHNjYWxlOworCisgICAgcHJl
cGFyZWQgPSB0cnVlOworICAgIHJldHVybiBrZXJuZWw7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBh
cmVGaWx0ZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCBjb25z
dCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiwgdW5zaWduZWQgcGFzcywgY29uc3QgSW50U2l6
ZSYgc2l6ZSwgR0MzRHVpbnQgY29udGVudFRleHR1cmUpCit7CisgICAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBjb250ZXh0ID0gcHJvZ3JhbS0+Y29udGV4dCgpOworICAgIGNvbnRleHQtPnVz
ZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOworCisgICAgc3dpdGNoIChvcGVyYXRpb24u
Z2V0T3BlcmF0aW9uVHlwZSgpKSB7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FM
RToKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OlNBVFVSQVRFOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgor
ICAgICAgICBjb250ZXh0LT51bmlmb3JtMWYocHJvZ3JhbS0+YW1vdW50TG9jYXRpb24oKSwgc3Rh
dGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlv
bikuYW1vdW50KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
SU5WRVJUOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgorICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BB
Q0lUWToKKyAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPmFtb3VudExvY2F0aW9u
KCksIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkJMVVI6IHsKKyAgICAgICAgY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiYg
Ymx1ciA9IHN0YXRpY19jYXN0PGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24p
OworICAgICAgICBGbG9hdFNpemUgcmFkaXVzOworCisgICAgICAgIC8vIEJsdXIgaXMgZG9uZSBp
biB0d28gcGFzc2VzLCBmaXJzdCBob3Jpem9udGFsbHkgYW5kIHRoZW4gdmVydGljYWxseS4gVGhl
IHNhbWUgc2hhZGVyIGlzIHVzZWQgZm9yIGJvdGguCisgICAgICAgIGlmIChwYXNzKQorICAgICAg
ICAgICAgcmFkaXVzLnNldEhlaWdodChmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXIuc3RkRGV2aWF0
aW9uKCksIHNpemUuaGVpZ2h0KCkpIC8gc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHJhZGl1cy5zZXRXaWR0aChmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXIuc3RkRGV2
aWF0aW9uKCksIHNpemUud2lkdGgoKSkgLyBzaXplLndpZHRoKCkpOworCisgICAgICAgIGNvbnRl
eHQtPnVuaWZvcm0yZihwcm9ncmFtLT5ibHVyUmFkaXVzTG9jYXRpb24oKSwgcmFkaXVzLndpZHRo
KCksIHJhZGl1cy5oZWlnaHQoKSk7CisgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZnYocHJvZ3Jh
bS0+Z2F1c3NpYW5LZXJuZWxMb2NhdGlvbigpLCBHYXVzc2lhbktlcm5lbEhhbGZXaWR0aCwgZ2F1
c3NpYW5LZXJuZWwoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKKyAgICAgICAgY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9w
ZXJhdGlvbiYgc2hhZG93ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJh
dGlvbiY+KG9wZXJhdGlvbik7CisgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZnYocHJvZ3JhbS0+
Z2F1c3NpYW5LZXJuZWxMb2NhdGlvbigpLCBHYXVzc2lhbktlcm5lbEhhbGZXaWR0aCwgZ2F1c3Np
YW5LZXJuZWwoKSk7CisgICAgICAgIHN3aXRjaCAocGFzcykgeworICAgICAgICBjYXNlIDA6Cisg
ICAgICAgICAgICAvLyBGaXJzdCBwYXNzOiB2ZXJ0aWNhbCBhbHBoYSBibHVyLgorICAgICAgICAg
ICAgY29udGV4dC0+dW5pZm9ybTJmKHByb2dyYW0tPnNoYWRvd09mZnNldExvY2F0aW9uKCksIGZs
b2F0KHNoYWRvdy5sb2NhdGlvbigpLngoKSkgLyBmbG9hdChzaXplLndpZHRoKCkpLCBmbG9hdChz
aGFkb3cubG9jYXRpb24oKS55KCkpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICAg
ICAgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPmJsdXJSYWRpdXNMb2NhdGlvbigpLCBzaGFk
b3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLndpZHRoKCkpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAvLyBTZWNvbmQgcGFzczogd2UgbmVl
ZCB0aGUgc2hhZG93IGNvbG9yIGFuZCB0aGUgY29udGVudCB0ZXh0dXJlIGZvciBjb21wb3NpdGlu
Zy4KKyAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT5ibHVyUmFkaXVzTG9j
YXRpb24oKSwgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOwor
ICAgICAgICAgICAgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRTEpOworICAgICAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIGNvbnRlbnRUZXh0dXJlKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnVu
aWZvcm0xaShwcm9ncmFtLT5jb250ZW50VGV4dHVyZUxvY2F0aW9uKCksIDEpOworICAgICAgICAg
ICAgZmxvYXQgciwgZywgYiwgYTsKKyAgICAgICAgICAgIHNoYWRvdy5jb2xvcigpLmdldFJHQkEo
ciwgZywgYiwgYSk7CisgICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+c2hh
ZG93Q29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3RmlsdGVyZWQoY29uc3Qg
Qml0bWFwVGV4dHVyZSYgc2FtcGxlciwgY29uc3QgQml0bWFwVGV4dHVyZSYgY29udGVudFRleHR1
cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgZmlsdGVyLCBpbnQgcGFzcykKIHsKICAgICAvLyBG
b3Igc3RhbmRhcmQgZmlsdGVycywgd2UgYWx3YXlzIGRyYXcgdGhlIHdob2xlIHRleHR1cmUgd2l0
aG91dCB0cmFuc2Zvcm1hdGlvbnMuCi0gICAgUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4g
cHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5nZXRTaGFkZXJGb3JGaWx0ZXIoZmlsdGVyLCBwYXNzKTsKKyAgICBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6U2hhZGVyS2V5IGtleSA9IGtleUZvckZpbHRlclR5cGUoZmlsdGVyLmdldE9w
ZXJhdGlvblR5cGUoKSwgcGFzcyk7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyLmdldFNoYWRlclByb2dyYW0oa2V5KTsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAKLSAg
ICBwcm9ncmFtLT5wcmVwYXJlKGZpbHRlciwgcGFzcywgc291cmNlVGV4dHVyZS5jb250ZW50U2l6
ZSgpLCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihjb250ZW50VGV4dHVyZSku
aWQoKSk7CisgICAgcHJlcGFyZUZpbHRlclByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgZmlsdGVyLCBw
YXNzLCBzYW1wbGVyLmNvbnRlbnRTaXplKCksIHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1
cmVHTCY+KGNvbnRlbnRUZXh0dXJlKS5pZCgpKTsKIAotICAgIG1fY29udGV4dDNELT5lbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7Ci0gICAgbV9jb250ZXh0
M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3JkQXR0cmliKCkpOwor
ICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhM
b2NhdGlvbigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJv
Z3JhbS0+dGV4Q29vcmRMb2NhdGlvbigpKTsKICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwotICAgIG1fY29udGV4dDNELT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0
bWFwVGV4dHVyZUdMJj4oc291cmNlVGV4dHVyZSkuaWQoKSk7Ci0gICAgbV9jb250ZXh0M0QtPnVu
aWZvcm0xaShwcm9ncmFtLT50ZXh0dXJlVW5pZm9ybSgpLCAwKTsKKyAgICBtX2NvbnRleHQzRC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHN0YXRpY19jYXN0PGNv
bnN0IEJpdG1hcFRleHR1cmVHTCY+KHNhbXBsZXIpLmlkKCkpOworICAgIG1fY29udGV4dDNELT51
bmlmb3JtMWkocHJvZ3JhbS0+c2FtcGxlckxvY2F0aW9uKCksIDApOwogICAgIGNvbnN0IEdDM0Rm
bG9hdCB0YXJnZXRWZXJ0aWNlc1tdID0gey0xLCAtMSwgMSwgLTEsIDEsIDEsIC0xLCAxfTsKICAg
ICBjb25zdCBHQzNEZmxvYXQgc291cmNlVmVydGljZXNbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAw
LCAxfTsKLSAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0
ZXhBdHRyaWIoKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGlu
dHB0cih0YXJnZXRWZXJ0aWNlcykpOwotICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2lu
dGVyKHByb2dyYW0tPnRleENvb3JkQXR0cmliKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIoc291cmNlVmVydGljZXMpKTsKKyAgICBtX2NvbnRleHQz
RC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCAyLCBHcmFw
aGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHRhcmdldFZlcnRpY2Vz
KSk7CisgICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dGV4Q29v
cmRMb2NhdGlvbigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNE
aW50cHRyKHNvdXJjZVZlcnRpY2VzKSk7CiAgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OkJMRU5EKTsKICAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhHcmFwaGlj
c0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCAwLCA0KTsKLSAgICBtX2NvbnRleHQzRC0+ZGlzYWJs
ZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKLSAgICBtX2NvbnRl
eHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3JkQXR0cmliKCkp
OworICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVy
dGV4TG9jYXRpb24oKSk7CisgICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eShwcm9ncmFtLT50ZXhDb29yZExvY2F0aW9uKCkpOwogfQogCiBQYXNzUmVmUHRyPEJpdG1hcFRl
eHR1cmU+IEJpdG1hcFRleHR1cmVHTDo6YXBwbHlGaWx0ZXJzKFRleHR1cmVNYXBwZXIqIHRleHR1
cmVNYXBwZXIsIGNvbnN0IEJpdG1hcFRleHR1cmUmIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQpAQCAtNzQ0LDcgKzg4Miw3IEBAIFBhc3NSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gQml0bWFwVGV4dHVyZUdMOjphcHBseUZpbHRlcnMoVGV4dHVyZU1hcHBlciog
dGV4dHVyZU1hCiAgICAgICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZmlsdGVyID0gZmlsdGVy
cy5hdChpKTsKICAgICAgICAgQVNTRVJUKGZpbHRlcik7CiAKLSAgICAgICAgaW50IG51bVBhc3Nl
cyA9IHRleHR1cmVNYXBwZXJHTC0+ZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmdldFBhc3Nlc1JlcXVpcmVkRm9yRmlsdGVyKCpmaWx0ZXIpOworICAgICAg
ICBpbnQgbnVtUGFzc2VzID0gZ2V0UGFzc2VzUmVxdWlyZWRGb3JGaWx0ZXIoZmlsdGVyLT5nZXRP
cGVyYXRpb25UeXBlKCkpOwogICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG51bVBhc3Nlczsg
KytqKSB7CiAgICAgICAgICAgICB0ZXh0dXJlTWFwcGVyR0wtPmJpbmRTdXJmYWNlKHRhcmdldC5n
ZXQoKSk7CiAgICAgICAgICAgICB0ZXh0dXJlTWFwcGVyR0wtPmRyYXdGaWx0ZXJlZCgoaSB8fCBq
KSA/ICpzb3VyY2UgOiBjb250ZW50VGV4dHVyZSwgY29udGVudFRleHR1cmUsICpmaWx0ZXIsIGop
OwpAQCAtODk1LDEyICsxMDMzLDEyIEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uCiAKICAgICBk
YXRhKCkuaW5pdGlhbGl6ZVN0ZW5jaWwoKTsKIAotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpTaW1wbGUpOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3Jh
bSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRT
aGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpEZWZhdWx0KTsKIAotICAg
IG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOwotICAgIG1fY29udGV4dDNE
LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAg
bV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOworICAgIG1fY29u
dGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigp
KTsKICAgICBjb25zdCBHQzNEZmxvYXQgdW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAw
LCAxfTsKLSAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0
ZXhBdHRyaWIoKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGlu
dHB0cih1bml0UmVjdCkpOworICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHBy
b2dyYW0tPnZlcnRleExvY2F0aW9uKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFs
c2UsIDAsIEdDM0RpbnRwdHIodW5pdFJlY3QpKTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KQog
ICAgICAgICAgICAgLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkKQEAgLTk0NCw3ICsxMDgyLDcg
QEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb24KICAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhH
cmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCAwLCA0KTsKIAogICAgIC8vIENsZWFyIHRo
ZSBzdGF0ZS4KLSAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dy
YW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KHByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwogICAgIG1fY29udGV4dDNELT5zdGVu
Y2lsTWFzaygwKTsKIAogICAgIC8vIEluY3JlYXNlIHN0ZW5jaWxJbmRleCBhbmQgYXBwbHkgc3Rl
bmNpbCB0ZXN0aW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAK
aW5kZXggNWNhOGM5NmJmZTQ1Mjk1MmI0M2I2NDIzODUxYjFmYzgzNWQ3MzlmYi4uMWNhNDlkNDQx
YjZjMmVmNzVlODIyMDVmNjBmMTQ2ZmJjNmNjZjBhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXIuY3BwCkBAIC0zMCwyNDcgKzMwLDU0IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotI2RlZmluZSBTVFJJTkdJRlkoLi4uKSAjX19WQV9BUkdTX18KLQotc3RhdGlj
IGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2sgPQotICAgIFNU
UklOR0lGWSgKLSAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgIHVuaWZv
cm0gc2FtcGxlcjJEIHNfc291cmNlOwotICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX21hc2s7
Ci0gICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7Ci0gICAgICAgIHZhcnlpbmcg
aGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIg
dl9tYXNrVGV4Q29vcmQ7Ci0gICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQoc19zb3VyY2UsIHZfc291cmNlVGV4
Q29vcmQpOwotICAgICAgICAgICAgbG93cCB2ZWM0IG1hc2tDb2xvciA9IHRleHR1cmUyRChzX21h
c2ssIHZfbWFza1RleENvb3JkKTsKLSAgICAgICAgICAgIGxvd3AgZmxvYXQgZnJhZ21lbnRBbHBo
YSA9IHVfb3BhY2l0eSAqIG1hc2tDb2xvci5hOwotICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0g
dmVjNChjb2xvci5yZ2IgKiBmcmFnbWVudEFscGhhLCBjb2xvci5hICogZnJhZ21lbnRBbHBoYSk7
Ci0gICAgICAgIH0KLSAgICApOwotCi1zdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJT
b3VyY2VSZWN0T3BhY2l0eUFuZE1hc2sgPQotICAgIFNUUklOR0lGWSgKLSAgICAgICAgcHJlY2lz
aW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX3NvdXJj
ZTsKLSAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfbWFzazsKLSAgICAgICAgdW5pZm9y
bSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKLSAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291
cmNlVGV4Q29vcmQ7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X21hc2tUZXhDb29yZDsK
LSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvd3AgdmVj
NCBjb2xvciA9IHRleHR1cmUyRFJlY3Qoc19zb3VyY2UsIHZfc291cmNlVGV4Q29vcmQpOwotICAg
ICAgICAgICAgbG93cCB2ZWM0IG1hc2tDb2xvciA9IHRleHR1cmUyRFJlY3Qoc19tYXNrLCB2X21h
c2tUZXhDb29yZCk7Ci0gICAgICAgICAgICBsb3dwIGZsb2F0IGZyYWdtZW50QWxwaGEgPSB1X29w
YWNpdHkgKiBtYXNrQ29sb3IuYTsKLSAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29s
b3IucmdiICogZnJhZ21lbnRBbHBoYSwgY29sb3IuYSAqIGZyYWdtZW50QWxwaGEpOwotICAgICAg
ICB9Ci0gICAgKTsKLQotc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZU9wYWNp
dHlBbmRNYXNrID0KLSAgICBTVFJJTkdJRlkoCi0gICAgICAgIHVuaWZvcm0gbWF0NCB1X21hdHJp
eDsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfZmxpcDsKLSAgICAgICAgYXR0cmlidXRl
IHZlYzQgYV92ZXJ0ZXg7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENv
b3JkOwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9tYXNrVGV4Q29vcmQ7Ci0gICAgICAg
IHZvaWQgbWFpbih2b2lkKQotICAgICAgICB7Ci0gICAgICAgICAgICB2X3NvdXJjZVRleENvb3Jk
ID0gdmVjMihhX3ZlcnRleC54LCBtaXgoYV92ZXJ0ZXgueSwgMS4gLSBhX3ZlcnRleC55LCB1X2Zs
aXApKTsKLSAgICAgICAgICAgIHZfbWFza1RleENvb3JkID0gdmVjMihhX3ZlcnRleCk7Ci0gICAg
ICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogYV92ZXJ0ZXg7Ci0gICAgICAgIH0KLSAg
ICApOwotCi1zdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUgPQot
ICAgIFNUUklOR0lGWSgKLSAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAg
IHVuaWZvcm0gc2FtcGxlcjJEIHNfc291cmNlOwotICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQg
dV9vcGFjaXR5OwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsK
LSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvd3AgdmVj
NCBjb2xvciA9IHRleHR1cmUyRChzX3NvdXJjZSwgdl9zb3VyY2VUZXhDb29yZCk7Ci0gICAgICAg
ICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIHVfb3BhY2l0eSwgY29sb3IuYSAq
IHVfb3BhY2l0eSk7Ci0gICAgICAgIH0KLSAgICApOwotCi1zdGF0aWMgY29uc3QgY2hhciogZnJh
Z21lbnRTaGFkZXJTb3VyY2VBbnRpYWxpYXNpbmdOb01hc2sgPQotICAgIFNUUklOR0lGWSgKLSAg
ICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJE
IHNfc291cmNlOwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsK
LSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKLSAgICAgICAgdW5pZm9ybSB2
ZWMzIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzhdOwotICAgICAgICB2b2lkIG1h
aW4oKQotICAgICAgICB7Ci0gICAgICAgICAgICB2ZWM0IHNhbXBsZWRDb2xvciA9IHRleHR1cmUy
RChzX3NvdXJjZSwgY2xhbXAodl9zb3VyY2VUZXhDb29yZCwgMC4wLCAxLjApKTsKLSAgICAgICAg
ICAgIHZlYzMgcG9zID0gdmVjMyhnbF9GcmFnQ29vcmQueHksIDEpOwotCi0gICAgICAgICAgICAv
LyBUaGUgZGF0YSBwYXNzZWQgaW4gdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2UgaXMg
bWVyZWx5IHRoZQotICAgICAgICAgICAgLy8gcHJlLXNjYWxlZCBjb2VmZmVjaWVudHMgb2YgdGhl
IGxpbmUgZXF1YXRpb25zIGRlc2NyaWJpbmcgdGhlIGZvdXIgZWRnZXMKLSAgICAgICAgICAgIC8v
IG9mIHRoZSBleHBhbmRlZCBxdWFkIGluIHNjcmVlbiBzcGFjZSBhbmQgdGhlIHJlY3Rhbmd1bGFy
IGJvdW5kaW5nIGJveAotICAgICAgICAgICAgLy8gb2YgdGhlIGV4cGFuZGVkIHF1YWQuCi0gICAg
ICAgICAgICAvLwotICAgICAgICAgICAgLy8gV2UgYXJlIGRvaW5nIGEgc2ltcGxlIGRpc3RhbmNl
IGNhbGN1bGF0aW9uIGhlcmUgYWNjb3JkaW5nIHRvIHRoZSBmb3JtdWxhOgotICAgICAgICAgICAg
Ly8gKEEqcC54ICsgQipwLnkgKyBDKSAvIHNxcnQoQV4yICsgQl4yKSA9IGRpc3RhbmNlIGZyb20g
bGluZSB0byBwCi0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgQSwgQiBhbmQgQyBoYXZlIGFscmVh
ZHkgYmVlbiBzY2FsZWQgYnkgMSAvIHNxcnQoQV4yICsgQl4yKS4KLSAgICAgICAgICAgIGZsb2F0
IGEwID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzBdLCBwb3Mp
LCAwLjAsIDEuMCk7Ci0gICAgICAgICAgICBmbG9hdCBhMSA9IGNsYW1wKGRvdCh1X2V4cGFuZGVk
UXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVsxXSwgcG9zKSwgMC4wLCAxLjApOwotICAgICAgICAgICAg
ZmxvYXQgYTIgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbMl0s
IHBvcyksIDAuMCwgMS4wKTsKLSAgICAgICAgICAgIGZsb2F0IGEzID0gY2xhbXAoZG90KHVfZXhw
YW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzNdLCBwb3MpLCAwLjAsIDEuMCk7Ci0gICAgICAg
ICAgICBmbG9hdCBhNCA9IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFj
ZVs0XSwgcG9zKSwgMC4wLCAxLjApOwotICAgICAgICAgICAgZmxvYXQgYTUgPSBjbGFtcChkb3Qo
dV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNV0sIHBvcyksIDAuMCwgMS4wKTsKLSAg
ICAgICAgICAgIGZsb2F0IGE2ID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVl
blNwYWNlWzZdLCBwb3MpLCAwLjAsIDEuMCk7Ci0gICAgICAgICAgICBmbG9hdCBhNyA9IGNsYW1w
KGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs3XSwgcG9zKSwgMC4wLCAxLjAp
OwotCi0gICAgICAgICAgICAvLyBOb3cgd2Ugd2FudCB0byByZWR1Y2UgdGhlIGFscGhhIHZhbHVl
IG9mIHRoZSBmcmFnbWVudCBpZiBpdCBpcyBjbG9zZSB0byB0aGUKLSAgICAgICAgICAgIC8vIGVk
Z2VzIG9mIHRoZSBleHBhbmRlZCBxdWFkIChvciByZWN0YW5ndWxhciBib3VuZGluZyBib3ggLS0g
d2hpY2ggc2VlbXMgdG8gYmUKLSAgICAgICAgICAgIC8vIGltcG9ydGFudCBmb3IgYmFja2ZhY2lu
ZyBxdWFkcykuIE5vdGUgdGhhdCB3ZSBhcmUgY29tYmluaW5nIHRoZSBjb250cmlidXRpb24KLSAg
ICAgICAgICAgIC8vIGZyb20gdGhlICh0b3AgfHwgYm90dG9tKSBhbmQgKGxlZnQgfHwgcmlnaHQp
IGVkZ2UgYnkgc2ltcGx5IG11bHRpcGx5aW5nLiBUaGlzIGZvbGxvd3MKLSAgICAgICAgICAgIC8v
IHRoZSBhcHByb2FjaCBkZXNjcmliZWQgYXQ6IGh0dHA6Ly9odHRwLmRldmVsb3Blci5udmlkaWEu
Y29tL0dQVUdlbXMyL2dwdWdlbXMyX2NoYXB0ZXIyMi5odG1sLAotICAgICAgICAgICAgLy8gaW4g
dGhpcyBjYXNlIHdpdGhvdXQgdXNpbmcgR2F1c3NpYW4gd2VpZ2h0cy4KLSAgICAgICAgICAgIGds
X0ZyYWdDb2xvciA9IHNhbXBsZWRDb2xvciAqIHVfb3BhY2l0eSAqIG1pbihtaW4oYTAsIGEyKSAq
IG1pbihhMSwgYTMpLCBtaW4oYTQsIGE2KSAqIG1pbihhNSwgYTcpKTsKLSAgICAgICAgfQotICAg
ICk7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RTaW1wbGUg
PQotICAgIFNUUklOR0lGWSgKLSAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAg
ICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX3NvdXJjZTsKLSAgICAgICAgdW5pZm9ybSBsb3dw
IHZlYzIgdV90ZXh0dXJlU2l6ZTsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0
eTsKLSAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAgICAg
IHZvaWQgbWFpbih2b2lkKQotICAgICAgICB7Ci0gICAgICAgICAgICBsb3dwIHZlYzQgY29sb3Ig
PSB0ZXh0dXJlMkRSZWN0KHNfc291cmNlLCB1X3RleHR1cmVTaXplICogdl9zb3VyY2VUZXhDb29y
ZCk7Ci0gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIHVfb3BhY2l0
eSwgY29sb3IuYSAqIHVfb3BhY2l0eSk7Ci0gICAgICAgIH0KLSAgICApOwotCi1zdGF0aWMgY29u
c3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlU2ltcGxlID0KLSAgICBTVFJJTkdJRlkoCi0gICAg
ICAgIHVuaWZvcm0gbWF0NCB1X21hdHJpeDsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVf
ZmxpcDsKLSAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7Ci0gICAgICAgIHZhcnlpbmcg
aGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOwotICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAg
ICAgICAgewotICAgICAgICAgICAgdl9zb3VyY2VUZXhDb29yZCA9IHZlYzIoYV92ZXJ0ZXgueCwg
bWl4KGFfdmVydGV4LnksIDEuIC0gYV92ZXJ0ZXgueSwgdV9mbGlwKSk7Ci0gICAgICAgICAgICBn
bF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogYV92ZXJ0ZXg7Ci0gICAgICAgIH0KLSAgICApOwotCi1z
dGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlU29saWRDb2xvciA9Ci0gICAgU1RS
SU5HSUZZKAotICAgICAgICB1bmlmb3JtIG1hdDQgdV9tYXRyaXg7Ci0gICAgICAgIGF0dHJpYnV0
ZSB2ZWM0IGFfdmVydGV4OwotICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgewotICAg
ICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIGFfdmVydGV4OwotICAgICAgICB9Ci0g
ICAgKTsKLQotCi1zdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VTb2xpZENv
bG9yID0KLSAgICBTVFJJTkdJRlkoCi0gICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0Owot
ICAgICAgICB1bmlmb3JtIHZlYzQgdV9jb2xvcjsKLSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHVfY29sb3I7Ci0gICAgICAgIH0K
LSAgICApOwotCi1QYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xv
cj4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OnNvbGlkQ29sb3JQcm9ncmFtKCkKK1RleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShQYXNzUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHZlcnRleCwgY29u
c3QgU3RyaW5nJiBmcmFnbWVudCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQogewotICAgIHJl
dHVybiBzdGF0aWNfcG9pbnRlcl9jYXN0PFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRD
b2xvcj4oZ2V0U2hhZGVyUHJvZ3JhbShTb2xpZENvbG9yKSk7Ci19CisgICAgbV92ZXJ0ZXhTaGFk
ZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NI
QURFUik7CisgICAgbV9mcmFnbWVudFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpOworICAgIG1fY29udGV4dC0+c2hhZGVy
U291cmNlKG1fdmVydGV4U2hhZGVyLCB2ZXJ0ZXgpOworICAgIG1fY29udGV4dC0+c2hhZGVyU291
cmNlKG1fZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50KTsKKyAgICBtX2lkID0gbV9jb250ZXh0LT5j
cmVhdGVQcm9ncmFtKCk7CisgICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVyKG1fdmVydGV4U2hh
ZGVyKTsKKyAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7Cisg
ICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIobV9pZCwgbV92ZXJ0ZXhTaGFkZXIpOworICAgIG1f
Y29udGV4dC0+YXR0YWNoU2hhZGVyKG1faWQsIG1fZnJhZ21lbnRTaGFkZXIpOworICAgIG1fY29u
dGV4dC0+bGlua1Byb2dyYW0obV9pZCk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgaWYgKG1fY29u
dGV4dC0+Z2V0RXJyb3IoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpCisgICAgICAg
IHJldHVybjsKIAotUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlh
c2luZ05vTWFzaz4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmFudGlhbGlhc2luZ05vTWFz
a1Byb2dyYW0oKQotewotICAgIHJldHVybiBzdGF0aWNfcG9pbnRlcl9jYXN0PFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrPihnZXRTaGFkZXJQcm9ncmFtKEFudGlh
bGlhc2luZ05vTWFzaykpOworICAgIFN0cmluZyBsb2cgPSBtX2NvbnRleHQtPmdldFNoYWRlcklu
Zm9Mb2cobV92ZXJ0ZXhTaGFkZXIpOworICAgIHByaW50ZigiVmVydGV4IHNoYWRlciBsb2c6ICVz
XG4iLCBsb2cudXRmOCgpLmRhdGEoKSk7CisgICAgbG9nID0gbV9jb250ZXh0LT5nZXRTaGFkZXJJ
bmZvTG9nKG1fZnJhZ21lbnRTaGFkZXIpOworICAgIHByaW50ZigiRnJhZ21lbnQgc2hhZGVyIGxv
ZzogJXNcbiIsIGxvZy51dGY4KCkuZGF0YSgpKTsKKyAgICBsb2cgPSBtX2NvbnRleHQtPmdldFBy
b2dyYW1JbmZvTG9nKG1faWQpOworICAgIHByaW50ZigiUHJvZ3JhbSBsb2c6ICVzXG4iLCBsb2cu
dXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKIH0KIAotUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlclByb2dyYW0o
U2hhZGVyVHlwZSBzaGFkZXJUeXBlKQorR0MzRHVpbnQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OmdldExvY2F0aW9uKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgVmFyaWFibGVUeXBlIHR5
cGUpCiB7Ci0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtOwot
ICAgIGlmIChzaGFkZXJUeXBlID09IEludmFsaWQpCi0gICAgICAgIHJldHVybiBwcm9ncmFtOwot
Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA6Oml0ZXJhdG9yIGl0ID0gbV90ZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcC5maW5kKHNoYWRlclR5cGUpOwotICAgIGlmIChpdCAh
PSBtX3RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwLmVuZCgpKQorICAgIEhhc2hNYXA8QXRv
bWljU3RyaW5nLCBHQzNEdWludD46Oml0ZXJhdG9yIGl0ID0gbV92YXJpYWJsZXMuZmluZChuYW1l
KTsKKyAgICBpZiAoaXQgIT0gbV92YXJpYWJsZXMuZW5kKCkpCiAgICAgICAgIHJldHVybiBpdC0+
dmFsdWU7CiAKLSAgICBzd2l0Y2ggKHNoYWRlclR5cGUpIHsKLSAgICBjYXNlIFNpbXBsZToKLSAg
ICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpjcmVhdGUo
bV9jb250ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWN0U2ltcGxlOgotICAgICAg
ICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpjcmVhdGUo
bV9jb250ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBbnRpYWxpYXNpbmdOb01hc2s6
Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2lu
Z05vTWFzazo6Y3JlYXRlKG1fY29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgT3Bh
Y2l0eUFuZE1hc2s6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bU9wYWNpdHlBbmRNYXNrOjpjcmVhdGUobV9jb250ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBSZWN0T3BhY2l0eUFuZE1hc2s6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6Y3JlYXRlKG1fY29udGV4dCk7CisgICAg
R0MzRHVpbnQgbG9jYXRpb247CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBVbmlmb3Jt
VmFyaWFibGU6CisgICAgICAgIGxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRp
b24obV9pZCwgbmFtZSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgU29saWRDb2xvcjoKLSAg
ICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6Y3Jl
YXRlKG1fY29udGV4dCk7CisgICAgY2FzZSBBdHRyaWJWYXJpYWJsZToKKyAgICAgICAgbG9jYXRp
b24gPSBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKG1faWQsIG5hbWUpOwogICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEludmFsaWQ6CisgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBtX3RleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtTWFwLmFkZChzaGFkZXJUeXBlLCBwcm9ncmFtKTsKLSAgICByZXR1cm4gcHJv
Z3JhbTsKLX0KLQotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBjaGFyKiB2ZXJ0ZXhT
aGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKQotICAgIDogbV9j
b250ZXh0KGNvbnRleHQpCi0gICAgLCBtX2lkKDApCi0gICAgLCBtX3ZlcnRleEF0dHJpYigwKQot
ICAgICwgbV92ZXJ0ZXhTaGFkZXIoMCkKLSAgICAsIG1fZnJhZ21lbnRTaGFkZXIoMCkKLSAgICAs
IG1fbWF0cml4TG9jYXRpb24oLTEpCi0gICAgLCBtX2ZsaXBMb2NhdGlvbigtMSkKLSAgICAsIG1f
dGV4dHVyZVNpemVMb2NhdGlvbigtMSkKLSAgICAsIG1fc291cmNlVGV4dHVyZUxvY2F0aW9uKC0x
KQotICAgICwgbV9vcGFjaXR5TG9jYXRpb24oLTEpCi0gICAgLCBtX21hc2tUZXh0dXJlTG9jYXRp
b24oLTEpCi0gICAgLCBtX3ZlcnRleFNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXJTb3VyY2UpCi0g
ICAgLCBtX2ZyYWdtZW50U2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyU291cmNlKQotewotfQot
Ci12b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppbml0aWFsaXplUHJvZ3JhbSgpCi17
Ci0gICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlUHJvZ3JhbSA9IHZlcnRleFNoYWRl
clNvdXJjZSgpOwotICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlUHJvZ3JhbSA9
IGZyYWdtZW50U2hhZGVyU291cmNlKCk7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCB2ZXJ0ZXhTaGFk
ZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NI
QURFUik7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBmcmFnbWVudFNoYWRlciA9IG1fY29udGV4dC0+
Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpOwotICAgIG1f
Y29udGV4dC0+c2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgdmVydGV4U2hhZGVyU291cmNlUHJv
Z3JhbSk7Ci0gICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIGZyYWdt
ZW50U2hhZGVyU291cmNlUHJvZ3JhbSk7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtSUQg
PSBtX2NvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsKLSAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFk
ZXIodmVydGV4U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIoZnJhZ21lbnRT
aGFkZXIpOwotCi0gICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2ZXJ0ZXhT
aGFkZXIpOwotICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgZnJhZ21lbnRT
aGFkZXIpOwotICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0ocHJvZ3JhbUlEKTsKLQotICAgIG1f
dmVydGV4QXR0cmliID0gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJh
X3ZlcnRleCIpOwotCi0gICAgbV9pZCA9IHByb2dyYW1JRDsKLSAgICBtX3ZlcnRleFNoYWRlciA9
IHZlcnRleFNoYWRlcjsKLSAgICBtX2ZyYWdtZW50U2hhZGVyID0gZnJhZ21lbnRTaGFkZXI7Ci19
CiAKLXZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmdldFVuaWZvcm1Mb2NhdGlvbihH
QzNEaW50ICZ2YXJpYWJsZSwgY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICB2YXJpYWJsZSA9IG1f
Y29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1faWQsIG5hbWUpOwotICAgIEFTU0VSVCh2YXJp
YWJsZSA+PSAwKTsKKyAgICBtX3ZhcmlhYmxlcy5hZGQobmFtZSwgbG9jYXRpb24pOworICAgIHJl
dHVybiBsb2NhdGlvbjsKIH0KIAogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06On5UZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbSgpCkBAIC0yODYsMTIwICs5MywxOTAgQEAgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW06On5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpCiAgICAgbV9jb250
ZXh0LT5kZWxldGVQcm9ncmFtKHByb2dyYW1JRCk7CiB9CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtU2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZShHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRl
eHQsIHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUp
Ci17Ci0gICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9m
bGlwTG9jYXRpb24sICJ1X2ZsaXAiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhM
b2NhdGlvbiwgInVfbWF0cml4Iik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNlVGV4
dHVyZUxvY2F0aW9uLCAic19zb3VyY2UiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFj
aXR5TG9jYXRpb24sICJ1X29wYWNpdHkiKTsKLX0KK3N0cnVjdCBTaGFkZXJTcGVjIHsKKyAgICBT
dHJpbmcgdmVydGV4U2hhZGVyOworICAgIFN0cmluZyBmcmFnbWVudFNoYWRlcjsKKyAgICBTaGFk
ZXJTcGVjKGNvbnN0IGNoYXIqIHZlcnRleCA9IDAsIGNvbnN0IGNoYXIqIGZyYWdtZW50ID0gMCkK
KyAgICAgICAgOiB2ZXJ0ZXhTaGFkZXIodmVydGV4ID8gU3RyaW5nKEFTQ0lJTGl0ZXJhbCh2ZXJ0
ZXgpKSA6IFN0cmluZygpKQorICAgICAgICAsIGZyYWdtZW50U2hhZGVyKGZyYWdtZW50ID8gU3Ry
aW5nKEFTQ0lJTGl0ZXJhbChmcmFnbWVudCkpIDogU3RyaW5nKCkpCisgICAgeworICAgIH0KK307
CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1Tb2xpZENvbG9yKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIDog
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlU29s
aWRDb2xvciwgZnJhZ21lbnRTaGFkZXJTb3VyY2VTb2xpZENvbG9yKQorc3RhdGljIHZvaWQgZ2V0
U2hhZGVyU3BlYyhUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2hhZGVyS2V5IGtleSwgU3Ry
aW5nJiB2ZXJ0ZXhTb3VyY2UsIFN0cmluZyYgZnJhZ21lbnRTb3VyY2UpCiB7Ci0gICAgaW5pdGlh
bGl6ZVByb2dyYW0oKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwg
InVfbWF0cml4Iik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fY29sb3JMb2NhdGlvbiwgInVf
Y29sb3IiKTsKLX0KKyAgICBzdGF0aWMgVmVjdG9yPFNoYWRlclNwZWM+IHNwZWNzID0gVmVjdG9y
PFNoYWRlclNwZWM+KCk7CisjZGVmaW5lIFNUUklOR0lGWSguLi4pICNfX1ZBX0FSR1NfXworICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudE9wYWNpdHlBbmRNYXNrID0KKyAgICAgICAgU1RS
SU5HSUZZKAorICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisgICAgICAgICAg
ICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBsZXI7CisgICAgICAgICAgICB1bmlmb3JtIHNhbXBs
ZXIyRCBzX21hc2s7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5Owor
ICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CisgICAgICAg
ICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9tYXNrVGV4Q29vcmQ7CisgICAgICAgICAgICB2b2lk
IG1haW4odm9pZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsb3dwIHZlYzQgY29s
b3IgPSB0ZXh0dXJlMkQoc19zYW1wbGVyLCB2X3NvdXJjZVRleENvb3JkKTsKKyAgICAgICAgICAg
ICAgICBsb3dwIHZlYzQgbWFza0NvbG9yID0gdGV4dHVyZTJEKHNfbWFzaywgdl9tYXNrVGV4Q29v
cmQpOworICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgZnJhZ21lbnRBbHBoYSA9IHVfb3BhY2l0
eSAqIG1hc2tDb2xvci5hOworICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29s
b3IucmdiICogZnJhZ21lbnRBbHBoYSwgY29sb3IuYSAqIGZyYWdtZW50QWxwaGEpOworICAgICAg
ICAgICAgfQorICAgICAgICApOwogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1w
bGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZShHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZl
cnRleFNoYWRlclNvdXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0U2ltcGxlKQot
ewotICAgIGluaXRpYWxpemVQcm9ncmFtKCk7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0
cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX2ZsaXBM
b2NhdGlvbiwgInVfZmxpcCIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX3RleHR1cmVTaXpl
TG9jYXRpb24sICJ1X3RleHR1cmVTaXplIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291
cmNlVGV4dHVyZUxvY2F0aW9uLCAic19zb3VyY2UiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24o
bV9vcGFjaXR5TG9jYXRpb24sICJ1X29wYWNpdHkiKTsKLX0KKyAgICBzdGF0aWMgY29uc3QgY2hh
ciogZnJhZ21lbnRSZWN0T3BhY2l0eUFuZE1hc2sgPQorICAgICAgICBTVFJJTkdJRlkoCisgICAg
ICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKKyAgICAgICAgICAgIHVuaWZvcm0gc2Ft
cGxlcjJEUmVjdCBzX3NhbXBsZXI7CisgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRFJlY3Qg
c19tYXNrOworICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKKyAgICAg
ICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOworICAgICAgICAgICAg
dmFyeWluZyBoaWdocCB2ZWMyIHZfbWFza1RleENvb3JkOworICAgICAgICAgICAgdm9pZCBtYWlu
KHZvaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0g
dGV4dHVyZTJEUmVjdChzX3NhbXBsZXIsIHZfc291cmNlVGV4Q29vcmQpOworICAgICAgICAgICAg
ICAgIGxvd3AgdmVjNCBtYXNrQ29sb3IgPSB0ZXh0dXJlMkRSZWN0KHNfbWFzaywgdl9tYXNrVGV4
Q29vcmQpOworICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgZnJhZ21lbnRBbHBoYSA9IHVfb3Bh
Y2l0eSAqIG1hc2tDb2xvci5hOworICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQo
Y29sb3IucmdiICogZnJhZ21lbnRBbHBoYSwgY29sb3IuYSAqIGZyYWdtZW50QWxwaGEpOworICAg
ICAgICAgICAgfQorICAgICAgICApOwogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNp
dHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0o
Y29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50U2hhZGVy
U291cmNlT3BhY2l0eUFuZE1hc2spCi17Ci0gICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKLSAgICBn
ZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7Ci0gICAgZ2V0
VW5pZm9ybUxvY2F0aW9uKG1fZmxpcExvY2F0aW9uLCAidV9mbGlwIik7Ci0gICAgZ2V0VW5pZm9y
bUxvY2F0aW9uKG1fc291cmNlVGV4dHVyZUxvY2F0aW9uLCAic19zb3VyY2UiKTsKLSAgICBnZXRV
bmlmb3JtTG9jYXRpb24obV9tYXNrVGV4dHVyZUxvY2F0aW9uLCAic19tYXNrIik7Ci0gICAgZ2V0
VW5pZm9ybUxvY2F0aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5Iik7Ci19CisgICAg
c3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleE9wYWNpdHlBbmRNYXNrID0KKyAgICAgICAgU1RSSU5H
SUZZKAorICAgICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OworICAgICAgICAgICAgdW5p
Zm9ybSBsb3dwIGZsb2F0IHVfZmxpcDsKKyAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVy
dGV4OworICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7Cisg
ICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9tYXNrVGV4Q29vcmQ7CisgICAgICAgICAg
ICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2X3NvdXJj
ZVRleENvb3JkID0gdmVjMihhX3ZlcnRleC54LCBtaXgoYV92ZXJ0ZXgueSwgMS4gLSBhX3ZlcnRl
eC55LCB1X2ZsaXApKTsKKyAgICAgICAgICAgICAgICB2X21hc2tUZXhDb29yZCA9IHZlYzIoYV92
ZXJ0ZXgpOworICAgICAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiBhX3ZlcnRl
eDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1SZWN0T3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNp
dHlBbmRNYXNrKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIDogVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2ss
IGZyYWdtZW50U2hhZGVyU291cmNlUmVjdE9wYWNpdHlBbmRNYXNrKQotewotICAgIGluaXRpYWxp
emVQcm9ncmFtKCk7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJ1
X21hdHJpeCIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX2ZsaXBMb2NhdGlvbiwgInVfZmxp
cCIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX3NvdXJjZVRleHR1cmVMb2NhdGlvbiwgInNf
c291cmNlIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWFza1RleHR1cmVMb2NhdGlvbiwg
InNfbWFzayIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNpdHlMb2NhdGlvbiwgInVf
b3BhY2l0eSIpOwotfQorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNpbXBsZSA9Cisg
ICAgICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0Owor
ICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zYW1wbGVyOworICAgICAgICAgICAgdW5p
Zm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKKyAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVj
MiB2X3NvdXJjZVRleENvb3JkOworICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHNfc2Ft
cGxlciwgdl9zb3VyY2VUZXhDb29yZCk7CisgICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0g
dmVjNChjb2xvci5yZ2IgKiB1X29wYWNpdHksIGNvbG9yLmEgKiB1X29wYWNpdHkpOworICAgICAg
ICAgICAgfQorICAgICAgICApOwogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlh
c2luZ05vTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2so
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUsIGZyYWdtZW50U2hhZGVyU291
cmNlQW50aWFsaWFzaW5nTm9NYXNrKQotewotICAgIGluaXRpYWxpemVQcm9ncmFtKCk7Ci0gICAg
Z2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwotICAgIGdl
dFVuaWZvcm1Mb2NhdGlvbihtX3NvdXJjZVRleHR1cmVMb2NhdGlvbiwgInNfc291cmNlIik7Ci0g
ICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5Iik7Ci0g
ICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9j
YXRpb24sICJ1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZSIpOwotICAgIGdldFVuaWZv
cm1Mb2NhdGlvbihtX2ZsaXBMb2NhdGlvbiwgInVfZmxpcCIpOwotfQorICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBmcmFnbWVudEFudGlhbGlhc2luZ05vTWFzayA9CisgICAgICAgIFNUUklOR0lGWSgK
KyAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OworICAgICAgICAgICAgdW5pZm9y
bSBzYW1wbGVyMkQgc19zYW1wbGVyOworICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZf
c291cmNlVGV4Q29vcmQ7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5
OworICAgICAgICAgICAgdW5pZm9ybSB2ZWMzIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNw
YWNlWzhdOworICAgICAgICAgICAgdm9pZCBtYWluKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICB2ZWM0IHNhbXBsZWRDb2xvciA9IHRleHR1cmUyRChzX3NhbXBsZXIsIGNsYW1wKHZf
c291cmNlVGV4Q29vcmQsIDAuMCwgMS4wKSk7CisgICAgICAgICAgICAgICAgdmVjMyBwb3MgPSB2
ZWMzKGdsX0ZyYWdDb29yZC54eSwgMSk7CisKKyAgICAgICAgICAgICAgICAvLyBUaGUgZGF0YSBw
YXNzZWQgaW4gdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2UgaXMgbWVyZWx5IHRoZQor
ICAgICAgICAgICAgICAgIC8vIHByZS1zY2FsZWQgY29lZmZlY2llbnRzIG9mIHRoZSBsaW5lIGVx
dWF0aW9ucyBkZXNjcmliaW5nIHRoZSBmb3VyIGVkZ2VzCisgICAgICAgICAgICAgICAgLy8gb2Yg
dGhlIGV4cGFuZGVkIHF1YWQgaW4gc2NyZWVuIHNwYWNlIGFuZCB0aGUgcmVjdGFuZ3VsYXIgYm91
bmRpbmcgYm94CisgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGV4cGFuZGVkIHF1YWQuCisgICAg
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBXZSBhcmUgZG9pbmcgYSBzaW1wbGUg
ZGlzdGFuY2UgY2FsY3VsYXRpb24gaGVyZSBhY2NvcmRpbmcgdG8gdGhlIGZvcm11bGE6CisgICAg
ICAgICAgICAgICAgLy8gKEEqcC54ICsgQipwLnkgKyBDKSAvIHNxcnQoQV4yICsgQl4yKSA9IGRp
c3RhbmNlIGZyb20gbGluZSB0byBwCisgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IEEsIEIg
YW5kIEMgaGF2ZSBhbHJlYWR5IGJlZW4gc2NhbGVkIGJ5IDEgLyBzcXJ0KEFeMiArIEJeMikuCisg
ICAgICAgICAgICAgICAgZmxvYXQgYTAgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0lu
U2NyZWVuU3BhY2VbMF0sIHBvcyksIDAuMCwgMS4wKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBh
MSA9IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVsxXSwgcG9zKSwg
MC4wLCAxLjApOworICAgICAgICAgICAgICAgIGZsb2F0IGEyID0gY2xhbXAoZG90KHVfZXhwYW5k
ZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzJdLCBwb3MpLCAwLjAsIDEuMCk7CisgICAgICAgICAg
ICAgICAgZmxvYXQgYTMgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3Bh
Y2VbM10sIHBvcyksIDAuMCwgMS4wKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBhNCA9IGNsYW1w
KGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs0XSwgcG9zKSwgMC4wLCAxLjAp
OworICAgICAgICAgICAgICAgIGZsb2F0IGE1ID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRn
ZXNJblNjcmVlblNwYWNlWzVdLCBwb3MpLCAwLjAsIDEuMCk7CisgICAgICAgICAgICAgICAgZmxv
YXQgYTYgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNl0sIHBv
cyksIDAuMCwgMS4wKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBhNyA9IGNsYW1wKGRvdCh1X2V4
cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs3XSwgcG9zKSwgMC4wLCAxLjApOworCisgICAg
ICAgICAgICAgICAgLy8gTm93IHdlIHdhbnQgdG8gcmVkdWNlIHRoZSBhbHBoYSB2YWx1ZSBvZiB0
aGUgZnJhZ21lbnQgaWYgaXQgaXMgY2xvc2UgdG8gdGhlCisgICAgICAgICAgICAgICAgLy8gZWRn
ZXMgb2YgdGhlIGV4cGFuZGVkIHF1YWQgKG9yIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGJveCAtLSB3
aGljaCBzZWVtcyB0byBiZQorICAgICAgICAgICAgICAgIC8vIGltcG9ydGFudCBmb3IgYmFja2Zh
Y2luZyBxdWFkcykuIE5vdGUgdGhhdCB3ZSBhcmUgY29tYmluaW5nIHRoZSBjb250cmlidXRpb24K
KyAgICAgICAgICAgICAgICAvLyBmcm9tIHRoZSAodG9wIHx8IGJvdHRvbSkgYW5kIChsZWZ0IHx8
IHJpZ2h0KSBlZGdlIGJ5IHNpbXBseSBtdWx0aXBseWluZy4gVGhpcyBmb2xsb3dzCisgICAgICAg
ICAgICAgICAgLy8gdGhlIGFwcHJvYWNoIGRlc2NyaWJlZCBhdDogaHR0cDovL2h0dHAuZGV2ZWxv
cGVyLm52aWRpYS5jb20vR1BVR2VtczIvZ3B1Z2VtczJfY2hhcHRlcjIyLmh0bWwsCisgICAgICAg
ICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdpdGhvdXQgdXNpbmcgR2F1c3NpYW4gd2VpZ2h0cy4K
KyAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSBzYW1wbGVkQ29sb3IgKiB1X29wYWNpdHkg
KiBtaW4obWluKGEwLCBhMikgKiBtaW4oYTEsIGEzKSwgbWluKGE0LCBhNikgKiBtaW4oYTUsIGE3
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICk7CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCkKLSAgICA6IG1fY29udGV4dChjb250ZXh0KQotewotfQorICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBmcmFnbWVudFJlY3RTaW1wbGUgPQorICAgICAgICBTVFJJTkdJRlkoCisgICAgICAgICAgICBw
cmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKKyAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVj
dCBzX3NhbXBsZXI7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVjMiBzX3NhbXBsZXJTaXpl
OworICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKKyAgICAgICAgICAg
IHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOworICAgICAgICAgICAgdm9pZCBt
YWluKHZvaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9y
ID0gdGV4dHVyZTJEUmVjdChzX3NhbXBsZXIsIHNfc2FtcGxlclNpemUgKiB2X3NvdXJjZVRleENv
b3JkKTsKKyAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIHVf
b3BhY2l0eSwgY29sb3IuYSAqIHVfb3BhY2l0eSk7CisgICAgICAgICAgICB9CisgICAgICAgICk7
CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjp+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXIoKQotewotfQorICAgIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaW1wbGUgPQorICAgICAg
ICBTVFJJTkdJRlkoCisgICAgICAgICAgICB1bmlmb3JtIG1hdDQgdV9tYXRyaXg7CisgICAgICAg
ICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9mbGlwOworICAgICAgICAgICAgYXR0cmlidXRlIHZl
YzQgYV92ZXJ0ZXg7CisgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhD
b29yZDsKKyAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHZfc291cmNlVGV4Q29vcmQgPSB2ZWMyKGFfdmVydGV4LngsIG1peChhX3ZlcnRl
eC55LCAxLiAtIGFfdmVydGV4LnksIHVfZmxpcCkpOworICAgICAgICAgICAgICAgIGdsX1Bvc2l0
aW9uID0gdV9tYXRyaXggKiBhX3ZlcnRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKIAot
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U29s
aWRDb2xvciA9CisgICAgICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAgIHVuaWZvcm0gbWF0NCB1
X21hdHJpeDsKKyAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OworICAgICAgICAg
ICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2xfUG9z
aXRpb24gPSB1X21hdHJpeCAqIGFfdmVydGV4OworICAgICAgICAgICAgfQorICAgICAgICApOwog
Ci0vLyBDcmVhdGUgYSBub3JtYWwgZGlzdHJpYnV0aW9uIG9mIDIxIHZhbHVlcyBiZXR3ZWVuIC0y
IGFuZCAyLgotI2RlZmluZSBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCAxMQotI2RlZmluZSBH
QVVTU0lBTl9LRVJORUxfU1RFUCAwLjIKIAotU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp+U3RhbmRh
cmRGaWx0ZXJQcm9ncmFtKCkKLXsKLSAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihtX2lkLCBt
X3ZlcnRleFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIobV92ZXJ0ZXhTaGFk
ZXIpOwotICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKG1faWQsIG1fZnJhZ21lbnRTaGFkZXIp
OwotICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIG1f
Y29udGV4dC0+ZGVsZXRlUHJvZ3JhbShtX2lkKTsKLX0KKyAgICBzdGF0aWMgY29uc3QgY2hhciog
ZnJhZ21lbnRTb2xpZENvbG9yID0KKyAgICAgICAgU1RSSU5HSUZZKAorICAgICAgICAgICAgcHJl
Y2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisgICAgICAgICAgICB1bmlmb3JtIHZlYzQgdV9jb2xvcjsK
KyAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGdsX0ZyYWdDb2xvciA9IHVfY29sb3I7CisgICAgICAgICAgICB9CisgICAgICAgICk7CiAK
LVN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0LCBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5z
aWduZWQgcGFzcykKLSAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAgICwgbV9pZCgwKQotewot
ICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSA9Ci0gICAgICAgICAgICBTVFJJTkdJ
RlkoCi0gICAgICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7Ci0gICAgICAgICAg
ICAgICAgYXR0cmlidXRlIHZlYzQgYV90ZXhDb29yZDsKLSAgICAgICAgICAgICAgICB2YXJ5aW5n
IGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKLSAgICAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZfdGV4Q29vcmQgPSB2ZWMy
KGFfdGV4Q29vcmQpOwotICAgICAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IGFfdmVydGV4
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICk7CisgICAgc3RhdGljIGNvbnN0IGNo
YXIqIHZlcnRleEZpbHRlciA9CisgICAgICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAgIGF0dHJp
YnV0ZSB2ZWM0IGFfdmVydGV4OworICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV90ZXhDb29y
ZDsKKyAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOworICAgICAgICAg
ICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdl90ZXhD
b29yZCA9IHZlYzIoYV90ZXhDb29yZCk7CisgICAgICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSBh
X3ZlcnRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKIAogI2RlZmluZSBTVEFOREFSRF9G
SUxURVIoLi4uKSBcCiAgICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiJcCiAgICAg
ICAgICJ2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDtcbiJcCiAgICAgICAgICJ1bmlmb3Jt
IGhpZ2hwIGZsb2F0IHVfYW1vdW50O1xuIlwKLSAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIHVf
dGV4dHVyZTtcbiJcCi0gICAgICAgICNfX1ZBX0FSR1NfXyBcCi0gICAgICAgICJ2b2lkIG1haW4o
dm9pZClcbiB7IGdsX0ZyYWdDb2xvciA9IHNoYWRlKHRleHR1cmUyRCh1X3RleHR1cmUsIHZfdGV4
Q29vcmQpKTsgfSIKKyAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIHNfc2FtcGxlcjtcbiIjX19W
QV9BUkdTX18gXAorICAgICAgICAidm9pZCBtYWluKHZvaWQpXG4geyBnbF9GcmFnQ29sb3IgPSBz
aGFkZSh0ZXh0dXJlMkQoc19zYW1wbGVyLCB2X3RleENvb3JkKSk7IH0iCiAKLSAgICBjb25zdCBj
aGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSA9IDA7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKLSAgICAgICAgZnJhZ21lbnRTaGFkZXJT
b3VyY2UgPSBTVEFOREFSRF9GSUxURVIoCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50
R3JheXNjYWxlRmlsdGVyID0KKyAgICAgICAgU1RBTkRBUkRfRklMVEVSKAogICAgICAgICAgICAg
bG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICBsb3dwIGZsb2F0IGFtb3VudCA9IDEuMCAtIHVfYW1vdW50OwpAQCAtNDA5LDkgKzI4
Niw5IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0LCBGaWx0ZXJPCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29sb3IuYSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKLSAgICAgICAgZnJhZ21lbnRTaGFkZXJT
b3VyY2UgPSBTVEFOREFSRF9GSUxURVIoCisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21l
bnRTZXBpYUZpbHRlciA9CisgICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKICAgICAgICAgICAgIGxv
d3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgbG93cCBmbG9hdCBhbW91bnQgPSAxLjAgLSB1X2Ftb3VudDsKQEAgLTQyMSw5ICsyOTgs
OSBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwgRmlsdGVyTwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbG9yLmEpOwogICAgICAgICAgICAgfQogICAgICAgICApOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVy
U291cmNlID0gU1RBTkRBUkRfRklMVEVSKAorCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdt
ZW50U2F0dXJhdGVGaWx0ZXIgPQorICAgICAgICBTVEFOREFSRF9GSUxURVIoCiAgICAgICAgICAg
ICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHJldHVybiB2ZWM0KCgwLjIxMyArIDAuNzg3ICogdV9hbW91bnQpICogY29sb3Iu
ciArICgwLjcxNSAtIDAuNzE1ICogdV9hbW91bnQpICogY29sb3IuZyArICgwLjA3MiAtIDAuMDcy
ICogdV9hbW91bnQpICogY29sb3IuYiwKQEAgLTQzMiw5ICszMDksOSBAQCBTdGFuZGFyZEZpbHRl
clByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCwgRmlsdGVyTwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLmEpOwogICAgICAg
ICAgICAgfQogICAgICAgICApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6SFVFX1JPVEFURToKLSAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVEFOREFS
RF9GSUxURVIoCisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRIdWVSb3RhdGVGaWx0
ZXIgPQorICAgICAgICBTVEFOREFSRF9GSUxURVIoCiAgICAgICAgICAgICBsb3dwIHZlYzQgc2hh
ZGUobG93cCB2ZWM0IGNvbG9yKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGhpZ2hw
IGZsb2F0IHBpID0gMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjsKQEAgLTQ0Niw1OCArMzIzLDYyIEBA
IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0LCBGaWx0ZXJPCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29s
b3IuYSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNl
ID0gU1RBTkRBUkRfRklMVEVSKAorCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50SW52
ZXJ0RmlsdGVyID0KKyAgICAgICAgU1RBTkRBUkRfRklMVEVSKAogICAgICAgICAgICAgbG93cCBm
bG9hdCBpbnZlcnQobG93cCBmbG9hdCBuKSB7IHJldHVybiAoMS4wIC0gbikgKiB1X2Ftb3VudCAr
IG4gKiAoMS4wIC0gdV9hbW91bnQpOyB9CiAgICAgICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93
cCB2ZWM0IGNvbG9yKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0
KGludmVydChjb2xvci5yKSwgaW52ZXJ0KGNvbG9yLmcpLCBpbnZlcnQoY29sb3IuYiksIGNvbG9y
LmEpOwogICAgICAgICAgICAgfQogICAgICAgICApOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKLSAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3Vy
Y2UgPSBTVEFOREFSRF9GSUxURVIoCisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRC
cmlnaHRuZXNzRmlsdGVyID0KKyAgICAgICAgU1RBTkRBUkRfRklMVEVSKAogICAgICAgICAgICAg
bG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gdmVjNChjb2xvci5yZ2IgKiAoMS4wICsgdV9hbW91bnQpLCBjb2xvci5h
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgotICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9
IFNUQU5EQVJEX0ZJTFRFUigKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudENvbnRy
YXN0RmlsdGVyID0KKyAgICAgICAgU1RBTkRBUkRfRklMVEVSKAogICAgICAgICAgICAgbG93cCBm
bG9hdCBjb250cmFzdChsb3dwIGZsb2F0IG4pIHsgcmV0dXJuIChuIC0gMC41KSAqIHVfYW1vdW50
ICsgMC41OyB9CiAgICAgICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0KGNvbnRyYXN0KGNvbG9y
LnIpLCBjb250cmFzdChjb2xvci5nKSwgY29udHJhc3QoY29sb3IuYiksIGNvbG9yLmEpOwogICAg
ICAgICAgICAgfQogICAgICAgICApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVEFOREFS
RF9GSUxURVIoCisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRPcGFjaXR5RmlsdGVy
ID0KKyAgICAgICAgU1RBTkRBUkRfRklMVEVSKAogICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRl
KGxvd3AgdmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4g
dmVjNChjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hICogdV9hbW91bnQpOwogICAg
ICAgICAgICAgfQogICAgICAgICApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6QkxVUjoKLSAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVFJJTkdJRlko
CisKKyNkZWZpbmUgQkxVUl9DT05TVEFOVFMgIiNkZWZpbmUgR0FVU1NJQU5fS0VSTkVMX0hBTEZf
V0lEVEggMTFcbiNkZWZpbmUgR0FVU1NJQU5fS0VSTkVMX1NURVAgMC4yXG4iCisKKyAgICBzdGF0
aWMgY29uc3QgY2hhciogZnJhZ21lbnRCbHVyRmlsdGVyID0KKyAgICAgICAgQkxVUl9DT05TVEFO
VFMKKyAgICAgICAgU1RSSU5HSUZZKAorICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbm9ybWFsIGRp
c3RyaWJ1dGlvbiBvZiAyMSB2YWx1ZXMgYmV0d2VlbiAtMiBhbmQgMi4KICAgICAgICAgICAgIHBy
ZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZf
dGV4Q29vcmQ7CiAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVjMiB1X2JsdXJSYWRpdXM7Ci0g
ICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7CisgICAgICAgICAgICB1bmlm
b3JtIHNhbXBsZXIyRCBzX3NhbXBsZXI7CiAgICAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZ2F1
c3NpYW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdOwogCiAgICAgICAgICAgICBs
b3dwIHZlYzQgc2FtcGxlQ29sb3IoZmxvYXQgcmFkaXVzKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHZlYzIgY29vcmQgPSB2X3RleENvb3JkICsgcmFkaXVzICogdV9ibHVyUmFkaXVz
OwotICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlMkQodV90ZXh0dXJlLCBjb29yZCkgKiBm
bG9hdChjb29yZC54ID4gMC4gJiYgY29vcmQueSA+IDAuICYmIGNvb3JkLnggPCAxLiAmJiBjb29y
ZC55IDwgMS4pOworICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlMkQoc19zYW1wbGVyLCBj
b29yZCkgKiBmbG9hdChjb29yZC54ID4gMC4gJiYgY29vcmQueSA+IDAuICYmIGNvb3JkLnggPCAx
LiAmJiBjb29yZC55IDwgMS4pOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB2ZWM0IGJs
dXIoKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZlYzQgdG90YWwgPSBzYW1wbGVD
b2xvcigwKSAqIHVfZ2F1c3NpYW5LZXJuZWxbMF07CisgICAgICAgICAgICAgICAgdmVjNCB0b3Rh
bCA9IHNhbXBsZUNvbG9yKDAuKSAqIHVfZ2F1c3NpYW5LZXJuZWxbMF07CiAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgaSsrKSB7
CiAgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUNvbG9yKGZsb2F0KGkpICogR0FV
U1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKICAgICAgICAgICAgICAg
ICAgICAgdG90YWwgKz0gc2FtcGxlQ29sb3IoZmxvYXQoLTEgKiBpKSAqIEdBVVNTSUFOX0tFUk5F
TF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07CkBAIC01MTEsMjgyICszOTIsMTMwIEBAIFN0
YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0LCBGaWx0ZXJPCiAgICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gYmx1
cigpOwogICAgICAgICAgICAgfQogICAgICAgICApOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6Ci0gICAgICAgIHN3aXRjaCAocGFzcykgewot
ICAgICAgICBjYXNlIDA6IHsKLSAgICAgICAgICAgIC8vIEZpcnN0IHBhc3M6IGhvcml6b250YWwg
YWxwaGEgYmx1ci4KLSAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RSSU5HSUZZ
KAotICAgICAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwotICAgICAgICAgICAg
ICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOwotICAgICAgICAgICAgICAgIHVuaWZv
cm0gbG93cCBmbG9hdCB1X3NoYWRvd0JsdXJSYWRpdXM7Ci0gICAgICAgICAgICAgICAgdW5pZm9y
bSBsb3dwIHZlYzIgdV9zaGFkb3dPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgdW5pZm9ybSBzYW1w
bGVyMkQgdV90ZXh0dXJlOwotICAgICAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9nYXVzc2lh
bktlcm5lbFtHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSF07Ci0KLSAgICAgICAgICAgICAgICBs
b3dwIGZsb2F0IHNhbXBsZUFscGhhKGZsb2F0IHJhZGl1cykKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHZlYzIgY29vcmQgPSB2X3RleENvb3JkIC0gdV9zaGFkb3dPZmZz
ZXQgKyB2ZWMyKHJhZGl1cyAqIHVfc2hhZG93Qmx1clJhZGl1cywgMC4pOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHVfdGV4dHVyZSwgY29vcmQpLmEgKiBmbG9hdChjb29y
ZC54ID4gMC4gJiYgY29vcmQueSA+IDAuICYmIGNvb3JkLnggPCAxLiAmJiBjb29yZC55IDwgMS4p
OwotICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgc2hhZG93
Qmx1ckhvcml6b250YWwoKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ZmxvYXQgdG90YWwgPSBzYW1wbGVBbHBoYSgwKSAqIHVfZ2F1c3NpYW5LZXJuZWxbMF07Ci0gICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZf
V0lEVEg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxw
aGEoZmxvYXQoaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ld
OwotICAgICAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoLTEg
KiBpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG90YWw7Ci0g
ICAgICAgICAgICAgICAgfQorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRvd0Zp
bHRlcjEgPQorICAgICAgICBCTFVSX0NPTlNUQU5UUworICAgICAgICBTVFJJTkdJRlkoCisgICAg
ICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKKyAgICAgICAgICAgIHZhcnlpbmcgaGln
aHAgdmVjMiB2X3RleENvb3JkOworICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfYmx1
clJhZGl1czsKKyAgICAgICAgICAgIHVuaWZvcm0gbG93cCB2ZWMyIHVfc2hhZG93T2Zmc2V0Owor
ICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zYW1wbGVyOworICAgICAgICAgICAgdW5p
Zm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsK
IAotICAgICAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLiwgMS4sIDEuLCAxLikgKiBz
aGFkb3dCbHVySG9yaXpvbnRhbCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICk7
Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGxvd3AgZmxvYXQgc2FtcGxlQWxwaGEo
ZmxvYXQgcmFkaXVzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZlYzIgY29vcmQg
PSB2X3RleENvb3JkIC0gdV9zaGFkb3dPZmZzZXQgKyB2ZWMyKHJhZGl1cyAqIHVfYmx1clJhZGl1
cywgMC4pOworICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlMkQoc19zYW1wbGVyLCBjb29y
ZCkuYSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEu
ICYmIGNvb3JkLnkgPCAxLik7CiAgICAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTogewotICAg
ICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHZlcnRpY2FsIGFscGhhIGJsdXIgYW5kIGNvbXBvc2l0
ZSB3aXRoIG9yaWdpbi4KLSAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RSSU5H
SUZZKAotICAgICAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwotICAgICAgICAg
ICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOwotICAgICAgICAgICAgICAgIHVu
aWZvcm0gbG93cCBmbG9hdCB1X3NoYWRvd0JsdXJSYWRpdXM7Ci0gICAgICAgICAgICAgICAgdW5p
Zm9ybSBsb3dwIHZlYzQgdV9zaGFkb3dDb2xvcjsKLSAgICAgICAgICAgICAgICB1bmlmb3JtIHNh
bXBsZXIyRCB1X3RleHR1cmU7Ci0gICAgICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdV9j
b250ZW50VGV4dHVyZTsKLSAgICAgICAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZ2F1c3NpYW5L
ZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdOwotCi0gICAgICAgICAgICAgICAgbG93
cCBmbG9hdCBzYW1wbGVBbHBoYShmbG9hdCByKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgdmVjMiBjb29yZCA9IHZfdGV4Q29vcmQgKyB2ZWMyKDAuLCByICogdV9zaGFk
b3dCbHVyUmFkaXVzKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHR1cmUyRCh1X3Rl
eHR1cmUsIGNvb3JkKS5hICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBj
b29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBsb3dwIGZsb2F0IHNoYWRvd0JsdXJWZXJ0aWNhbCgpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBmbG9hdCB0b3RhbCA9IHNhbXBsZUFscGhhKDApICog
dV9nYXVzc2lhbktlcm5lbFswXTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7
IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB0b3RhbCArPSBzYW1wbGVBbHBoYShmbG9hdChpKSAqIEdBVVNTSUFOX0tFUk5FTF9T
VEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b3Rh
bCArPSBzYW1wbGVBbHBoYShmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICog
dV9nYXVzc2lhbktlcm5lbFtpXTsKLSAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0b3RhbDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBsb3dwIHZlYzQgc291cmNlT3Zlcihsb3dwIHZlYzQgc291cmNlLCBsb3dwIHZlYzQgZGVz
dGluYXRpb24pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBDb21w
b3NpdGUgdGhlIHNoYWRvdyB3aXRoIHRoZSBvcmlnaW5hbCB0ZXh0dXJlLgotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gc291cmNlICsgZGVzdGluYXRpb24gKiAoMS4gLSBzb3VyY2UuYSk7Cisg
ICAgICAgICAgICBsb3dwIGZsb2F0IHNoYWRvd0JsdXJIb3Jpem9udGFsKCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBmbG9hdCB0b3RhbCA9IHNhbXBsZUFscGhhKDAuKSAqIHVfZ2F1
c3NpYW5LZXJuZWxbMF07CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBHQVVT
U0lBTl9LRVJORUxfSEFMRl9XSURUSDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRvdGFs
ICs9IHNhbXBsZUFscGhhKGZsb2F0KGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVz
c2lhbktlcm5lbFtpXTsKKyAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGEo
ZmxvYXQoLTEgKiBpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxb
aV07CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSBz
b3VyY2VPdmVyKHRleHR1cmUyRCh1X2NvbnRlbnRUZXh0dXJlLCB2X3RleENvb3JkKSwgc2hhZG93
Qmx1clZlcnRpY2FsKCkgKiB1X3NoYWRvd0NvbG9yKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICApOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRv
dGFsOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICBk
ZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CiAKLSAgICBpZiAoIWZyYWdtZW50U2hhZGVy
U291cmNlKQotICAgICAgICByZXR1cm47Ci0gICAgUGxhdGZvcm0zRE9iamVjdCB2ZXJ0ZXhTaGFk
ZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NI
QURFUik7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBmcmFnbWVudFNoYWRlciA9IG1fY29udGV4dC0+
Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpOwotICAgIG1f
Y29udGV4dC0+c2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgdmVydGV4U2hhZGVyU291cmNlKTsK
LSAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgZnJhZ21lbnRTaGFk
ZXJTb3VyY2UpOwotICAgIFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbUlEID0gbV9jb250ZXh0LT5j
cmVhdGVQcm9ncmFtKCk7Ci0gICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVyKHZlcnRleFNoYWRl
cik7Ci0gICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKLSNpZiAh
TE9HX0RJU0FCTEVECi0gICAgU3RyaW5nIGxvZzsKLSAgICBtX2NvbnRleHQtPmdldFNoYWRlcklu
Zm9Mb2coZnJhZ21lbnRTaGFkZXIpOwotICAgIFdURkxvZygmTG9nQ29tcG9zaXRpbmcsICIlc1xu
IiwgbG9nLmFzY2lpKCkuZGF0YSgpKTsKLSNlbmRpZgotICAgIG1fY29udGV4dC0+YXR0YWNoU2hh
ZGVyKHByb2dyYW1JRCwgdmVydGV4U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRl
cihwcm9ncmFtSUQsIGZyYWdtZW50U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmxpbmtQcm9ncmFt
KHByb2dyYW1JRCk7CisgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuLCAxLiwgMS4sIDEuKSAqIHNo
YWRvd0JsdXJIb3Jpem9udGFsKCk7CisgICAgICAgICAgICB9CisgICAgICAgICk7CiAKLSAgICBt
X3ZlcnRleEF0dHJpYiA9IG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAi
YV92ZXJ0ZXgiKTsKLSAgICBtX3RleENvb3JkQXR0cmliID0gbV9jb250ZXh0LT5nZXRBdHRyaWJM
b2NhdGlvbihwcm9ncmFtSUQsICJhX3RleENvb3JkIik7Ci0gICAgbV90ZXh0dXJlVW5pZm9ybUxv
Y2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV90ZXh0
dXJlIik7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdS
QVlTQ0FMRToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6Ci0gICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OlNBVFVSQVRFOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9U
QVRFOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6Ci0gICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkJSSUdIVE5FU1M6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNU
OgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgotICAgICAgICBtX3VuaWZvcm1M
b2NhdGlvbnMuYW1vdW50ID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlE
LCAidV9hbW91bnQiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkJMVVI6Ci0gICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLnJhZGl1cyA9IG1fY29udGV4
dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfYmx1clJhZGl1cyIpOwotICAgICAg
ICBtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5nYXVzc2lhbktlcm5lbCA9IG1fY29udGV4dC0+Z2V0
VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfZ2F1c3NpYW5LZXJuZWwiKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOgotICAgICAgICBt
X3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmJsdXJSYWRpdXMgPSBtX2NvbnRleHQtPmdldFVuaWZv
cm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X3NoYWRvd0JsdXJSYWRpdXMiKTsKLSAgICAgICAgbV91
bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5nYXVzc2lhbktlcm5lbCA9IG1fY29udGV4dC0+Z2V0VW5p
Zm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfZ2F1c3NpYW5LZXJuZWwiKTsKLSAgICAgICAgaWYg
KCFwYXNzKQotICAgICAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5vZmZzZXQgPSBt
X2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X3NoYWRvd09mZnNldCIp
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0aGUgY29sb3Ig
YW5kIHRoZSBjb250ZW50IHRleHR1cmUgaW4gdGhlIHNlY29uZCBwYXNzLCB0aGUgZmlyc3QgcGFz
cyBpcyBvbmx5IGEgaG9yaXpvbnRhbCBhbHBoYSBibHVyLgotICAgICAgICAgICAgbV91bmlmb3Jt
TG9jYXRpb25zLnNoYWRvdy5jb2xvciA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW1JRCwgInVfc2hhZG93Q29sb3IiKTsKLSAgICAgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9u
cy5zaGFkb3cuY29udGVudFRleHR1cmUgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtSUQsICJ1X2NvbnRlbnRUZXh0dXJlIik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIG1faWQgPSBwcm9ncmFt
SUQ7Ci0gICAgbV92ZXJ0ZXhTaGFkZXIgPSB2ZXJ0ZXhTaGFkZXI7Ci0gICAgbV9mcmFnbWVudFNo
YWRlciA9IGZyYWdtZW50U2hhZGVyOwotfQorICAgIC8vIFNlY29uZCBwYXNzOiB2ZXJ0aWNhbCBh
bHBoYSBibHVyIGFuZCBjb21wb3NpdGUgd2l0aCBvcmlnaW4uCisgICAgc3RhdGljIGNvbnN0IGNo
YXIqIGZyYWdtZW50U2hhZG93RmlsdGVyMiA9CisgICAgICAgIEJMVVJfQ09OU1RBTlRTCisgICAg
ICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OworICAg
ICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7CisgICAgICAgICAgICB1bmlm
b3JtIGxvd3AgZmxvYXQgdV9ibHVyUmFkaXVzOworICAgICAgICAgICAgdW5pZm9ybSBsb3dwIHZl
YzQgdV9zaGFkb3dDb2xvcjsKKyAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc2FtcGxl
cjsKKyAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfY29udGVudFRleHR1cmU7CisgICAg
ICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZ2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hB
TEZfV0lEVEhdOwogCi1QYXNzUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gU3RhbmRhcmRG
aWx0ZXJQcm9ncmFtOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEZpbHRlck9w
ZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNzKQotewotICAgIFJlZlB0
cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IHByb2dyYW0gPSBhZG9wdFJlZihuZXcgU3RhbmRhcmRG
aWx0ZXJQcm9ncmFtKGNvbnRleHQsIHR5cGUsIHBhc3MpKTsKLSAgICBpZiAoIXByb2dyYW0tPm1f
aWQpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgbG93cCBmbG9hdCBzYW1wbGVBbHBo
YShmbG9hdCByKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZlYzIgY29vcmQgPSB2
X3RleENvb3JkICsgdmVjMigwLiwgciAqIHVfYmx1clJhZGl1cyk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRleHR1cmUyRChzX3NhbXBsZXIsIGNvb3JkKS5hICogZmxvYXQoY29vcmQueCA+IDAu
ICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKKyAgICAg
ICAgICAgIH0KIAotICAgIHJldHVybiBwcm9ncmFtOwotfQorICAgICAgICAgICAgbG93cCBmbG9h
dCBzaGFkb3dCbHVyVmVydGljYWwoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZs
b2F0IHRvdGFsID0gc2FtcGxlQWxwaGEoMC4pICogdV9nYXVzc2lhbktlcm5lbFswXTsKKyAgICAg
ICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRI
OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQo
aSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOworICAgICAg
ICAgICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVBbHBoYShmbG9hdCgtMSAqIGkpICogR0FVU1NJ
QU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKKyAgICAgICAgICAgICAgICB9
CiAKLXN0YXRpYyBpbmxpbmUgZmxvYXQgZ2F1c3MoZmxvYXQgeCkKLXsKLSAgICByZXR1cm4gZXhw
KC0oeCAqIHgpIC8gMi4pOwotfQorICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbDsKKyAgICAg
ICAgICAgIH0KIAotc3RhdGljIGZsb2F0KiBnYXVzc2lhbktlcm5lbCgpCi17Ci0gICAgc3RhdGlj
IGJvb2wgcHJlcGFyZWQgPSBmYWxzZTsKLSAgICBzdGF0aWMgZmxvYXQga2VybmVsW0dBVVNTSUFO
X0tFUk5FTF9IQUxGX1dJRFRIXSA9IHswLCB9OworICAgICAgICAgICAgbG93cCB2ZWM0IHNvdXJj
ZU92ZXIobG93cCB2ZWM0IHNvdXJjZSwgbG93cCB2ZWM0IGRlc3RpbmF0aW9uKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIC8vIENvbXBvc2l0ZSB0aGUgc2hhZG93IHdpdGggdGhlIG9y
aWdpbmFsIHRleHR1cmUuCisgICAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZSArIGRlc3RpbmF0
aW9uICogKDEuIC0gc291cmNlLmEpOworICAgICAgICAgICAgfQogCi0gICAgaWYgKHByZXBhcmVk
KQotICAgICAgICByZXR1cm4ga2VybmVsOworICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gc291cmNlT3Zlcih0
ZXh0dXJlMkQoc19jb250ZW50VGV4dHVyZSwgdl90ZXhDb29yZCksIHNoYWRvd0JsdXJWZXJ0aWNh
bCgpICogdV9zaGFkb3dDb2xvcik7CisgICAgICAgICAgICB9CisgICAgICAgICk7CiAKLSAgICBr
ZXJuZWxbMF0gPSBnYXVzcygwKTsKLSAgICBmbG9hdCBzdW0gPSBrZXJuZWxbMF07Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyArK2kpIHsK
LSAgICAgICAga2VybmVsW2ldID0gZ2F1c3MoaSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKTsKLSAg
ICAgICAgc3VtICs9IDIgKiBrZXJuZWxbaV07CisgICAgaWYgKHNwZWNzLmlzRW1wdHkoKSkgewor
ICAgICAgICBzcGVjcy5yZXNpemUoVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Okxhc3RGaWx0
ZXIpOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6RGVmYXVsdF0g
PSBTaGFkZXJTcGVjKHZlcnRleFNpbXBsZSwgZnJhZ21lbnRTaW1wbGUpOworICAgICAgICBzcGVj
c1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U29saWRDb2xvcl0gPSBTaGFkZXJTcGVjKHZl
cnRleFNvbGlkQ29sb3IsIGZyYWdtZW50U29saWRDb2xvcik7CisgICAgICAgIHNwZWNzW1RleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpSZWN0XSA9IFNoYWRlclNwZWModmVydGV4U2ltcGxlLCBm
cmFnbWVudFJlY3RTaW1wbGUpOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6TWFza2VkXSA9IFNoYWRlclNwZWModmVydGV4T3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50
T3BhY2l0eUFuZE1hc2spOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6TWFza2VkUmVjdF0gPSBTaGFkZXJTcGVjKHZlcnRleE9wYWNpdHlBbmRNYXNrLCBmcmFnbWVu
dFJlY3RPcGFjaXR5QW5kTWFzayk7CisgICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyOjpBbnRpYWxpYXNlZF0gPSBTaGFkZXJTcGVjKHZlcnRleFNpbXBsZSwgZnJhZ21lbnRB
bnRpYWxpYXNpbmdOb01hc2spOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6R3JheXNjYWxlRmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVu
dEdyYXlzY2FsZUZpbHRlcik7CisgICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpTZXBpYUZpbHRlcl0gPSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRTZXBp
YUZpbHRlcik7CisgICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTYXR1
cmF0ZUZpbHRlcl0gPSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRTYXR1cmF0ZUZp
bHRlcik7CisgICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpIdWVSb3Rh
dGVGaWx0ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50SHVlUm90YXRlRmls
dGVyKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkJyaWdodG5l
c3NGaWx0ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50QnJpZ2h0bmVzc0Zp
bHRlcik7CisgICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpDb250cmFz
dEZpbHRlcl0gPSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRDb250cmFzdEZpbHRl
cik7CisgICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpJbnZlcnRGaWx0
ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50SW52ZXJ0RmlsdGVyKTsKKyAg
ICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wYWNpdHlGaWx0ZXJdID0g
U2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50T3BhY2l0eUZpbHRlcik7CisgICAgICAg
IHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpCbHVyRmlsdGVyXSA9IFNoYWRlclNw
ZWModmVydGV4RmlsdGVyLCBmcmFnbWVudEJsdXJGaWx0ZXIpOworICAgICAgICBzcGVjc1tUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2hhZG93RmlsdGVyUGFzczFdID0gU2hhZGVyU3BlYyh2
ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50U2hhZG93RmlsdGVyMSk7CisgICAgICAgIHNwZWNzW1RleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaGFkb3dGaWx0ZXJQYXNzMl0gPSBTaGFkZXJTcGVjKHZl
cnRleEZpbHRlciwgZnJhZ21lbnRTaGFkb3dGaWx0ZXIyKTsKICAgICB9CiAKLSAgICAvLyBOb3Jt
YWxpemUgdGhlIGtlcm5lbAotICAgIGZsb2F0IHNjYWxlID0gMSAvIHN1bTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7ICsraSkKLSAgICAg
ICAga2VybmVsW2ldICo9IHNjYWxlOwotCi0gICAgcHJlcGFyZWQgPSB0cnVlOwotICAgIHJldHVy
biBrZXJuZWw7CisgICAgQVNTRVJUKHNwZWNzLnNpemUoKSA+IGtleSk7CisgICAgU2hhZGVyU3Bl
YyYgc3BlYyA9IHNwZWNzW2tleV07CisgICAgdmVydGV4U291cmNlID0gc3BlYy52ZXJ0ZXhTaGFk
ZXI7CisgICAgZnJhZ21lbnRTb3VyY2UgPSBzcGVjLmZyYWdtZW50U2hhZGVyOwogfQogCi12b2lk
IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6cHJlcGFyZShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9w
ZXJhdGlvbiwgdW5zaWduZWQgcGFzcywgY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRHVpbnQgY29u
dGVudFRleHR1cmUpCitUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBtX2NvbnRleHQo
Y29udGV4dCkKIHsKLSAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0obV9pZCk7Ci0gICAgc3dpdGNo
IChvcGVyYXRpb24uZ2V0T3BlcmF0aW9uVHlwZSgpKSB7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkdSQVlTQ0FMRToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6Ci0gICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpI
VUVfUk9UQVRFOgotICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlv
bnMuYW1vdW50LCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0
aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpJTlZFUlQ6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5F
U1M6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgotICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpPUEFDSVRZOgotICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihtX3VuaWZv
cm1Mb2NhdGlvbnMuYW1vdW50LCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5z
ZmVyRmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7Ci0gICAgICAgIGNvbnN0IEJsdXJG
aWx0ZXJPcGVyYXRpb24mIGJsdXIgPSBzdGF0aWNfY2FzdDxjb25zdCBCbHVyRmlsdGVyT3BlcmF0
aW9uJj4ob3BlcmF0aW9uKTsKLSAgICAgICAgRmxvYXRTaXplIHJhZGl1czsKLQotICAgICAgICAv
LyBCbHVyIGlzIGRvbmUgaW4gdHdvIHBhc3NlcywgZmlyc3QgaG9yaXpvbnRhbGx5IGFuZCB0aGVu
IHZlcnRpY2FsbHkuIFRoZSBzYW1lIHNoYWRlciBpcyB1c2VkIGZvciBib3RoLgotICAgICAgICBp
ZiAocGFzcykKLSAgICAgICAgICAgIHJhZGl1cy5zZXRIZWlnaHQoZmxvYXRWYWx1ZUZvckxlbmd0
aChibHVyLnN0ZERldmlhdGlvbigpLCBzaXplLmhlaWdodCgpKSAvIHNpemUuaGVpZ2h0KCkpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICByYWRpdXMuc2V0V2lkdGgoZmxvYXRWYWx1ZUZvckxl
bmd0aChibHVyLnN0ZERldmlhdGlvbigpLCBzaXplLndpZHRoKCkpIC8gc2l6ZS53aWR0aCgpKTsK
LQotICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5y
YWRpdXMsIHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpOwotICAgICAgICBtX2NvbnRl
eHQtPnVuaWZvcm0xZnYobV91bmlmb3JtTG9jYXRpb25zLmJsdXIuZ2F1c3NpYW5LZXJuZWwsIEdB
VVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5lbCgpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzogewotICAg
ICAgICBjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBzaGFkb3cgPSBzdGF0aWNfY2Fz
dDxjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKTsKLSAgICAgICAg
c3dpdGNoIChwYXNzKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIC8vIEZpcnN0IHBh
c3M6IHZlcnRpY2FsIGFscGhhIGJsdXIuCi0gICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0y
ZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93Lm9mZnNldCwgZmxvYXQoc2hhZG93LmxvY2F0aW9u
KCkueCgpKSAvIGZsb2F0KHNpemUud2lkdGgoKSksIGZsb2F0KHNoYWRvdy5sb2NhdGlvbigpLnko
KSkgLyBmbG9hdChzaXplLmhlaWdodCgpKSk7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZv
cm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmJsdXJSYWRpdXMsIHNoYWRvdy5zdGREZXZp
YXRpb24oKSAvIGZsb2F0KHNpemUud2lkdGgoKSkpOwotICAgICAgICAgICAgbV9jb250ZXh0LT51
bmlmb3JtMWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3NpYW5LZXJuZWwsIEdBVVNT
SUFOX0tFUk5FTF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5lbCgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAvLyBTZWNvbmQgcGFzczogd2UgbmVl
ZCB0aGUgc2hhZG93IGNvbG9yIGFuZCB0aGUgY29udGVudCB0ZXh0dXJlIGZvciBjb21wb3NpdGlu
Zy4KLSAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5z
aGFkb3cuYmx1clJhZGl1cywgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS5oZWln
aHQoKSkpOwotICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KG1fdW5pZm9ybUxvY2F0
aW9ucy5zaGFkb3cuZ2F1c3NpYW5LZXJuZWwsIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRILCBn
YXVzc2lhbktlcm5lbCgpKTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpOwotICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgY29udGVudFRleHR1cmUpOwot
ICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWkobV91bmlmb3JtTG9jYXRpb25zLnNoYWRv
dy5jb250ZW50VGV4dHVyZSwgMSk7Ci0gICAgICAgICAgICBmbG9hdCByLCBnLCBiLCBhOwotICAg
ICAgICAgICAgc2hhZG93LmNvbG9yKCkuZ2V0UkdCQShyLCBnLCBiLCBhKTsKLSAgICAgICAgICAg
IG1fY29udGV4dC0+dW5pZm9ybTRmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29sb3IsIHIs
IGcsIGIsIGEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KIH0KIAotUGFzc1Jl
ZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpn
ZXRTaGFkZXJGb3JGaWx0ZXIoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXIsIHVuc2lnbmVk
IHBhc3MpCitUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6flRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyKCkKIHsKLSAgICBSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBwcm9ncmFtOwot
ICAgIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlID0gZmlsdGVyLmdldE9wZXJh
dGlvblR5cGUoKTsKLSAgICBpbnQga2V5ID0gaW50KHR5cGUpIHwgKHBhc3MgPDwgMTYpOwotICAg
IEZpbHRlck1hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2ZpbHRlck1hcC5maW5kKGtleSk7Ci0g
ICAgaWYgKGl0ZXJhdG9yID09IG1fZmlsdGVyTWFwLmVuZCgpKSB7Ci0gICAgICAgIHByb2dyYW0g
PSBTdGFuZGFyZEZpbHRlclByb2dyYW06OmNyZWF0ZShtX2NvbnRleHQsIHR5cGUsIHBhc3MpOwot
ICAgICAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBt
X2ZpbHRlck1hcC5hZGQoa2V5LCBwcm9ncmFtKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcHJvZ3Jh
bSA9IGl0ZXJhdG9yLT52YWx1ZTsKLQotICAgIHJldHVybiBwcm9ncmFtOwogfQogCi11bnNpZ25l
ZCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0UGFzc2VzUmVxdWlyZWRGb3JGaWx0ZXIo
Y29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24pIGNvbnN0CitQYXNzUmVmUHRyPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hh
ZGVyUHJvZ3JhbShTaGFkZXJLZXkga2V5KQogewotICAgIHN3aXRjaCAob3BlcmF0aW9uLmdldE9w
ZXJhdGlvblR5cGUoKSkgewotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6Ci0g
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpTQVRVUkFURToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKLSAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpC
UklHSFRORVNTOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKLSAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkJMVVI6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hB
RE9XOgotICAgICAgICAvLyBXZSB1c2UgdHdvLXBhc3NlcyAodmVydGljYWwraG9yaXpvbnRhbCkg
Zm9yIGJsdXIgYW5kIGRyb3Atc2hhZG93LgotICAgICAgICByZXR1cm4gMjsKLSAgICBkZWZhdWx0
OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1NYXA6Oml0ZXJhdG9yIGl0ID0gbV9wcm9ncmFtcy5maW5kKGtleSk7CisgICAgaWYgKGl0ICE9
IG1fcHJvZ3JhbXMuZW5kKCkpCisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKKyAgICBTdHJp
bmcgdmVydGV4U2hhZGVyOworICAgIFN0cmluZyBmcmFnbWVudFNoYWRlcjsKKyAgICBnZXRTaGFk
ZXJTcGVjKGtleSwgdmVydGV4U2hhZGVyLCBmcmFnbWVudFNoYWRlcik7CisgICAgUmVmUHRyPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW06OmNyZWF0ZShtX2NvbnRleHQsIHZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIpOwor
ICAgIG1fcHJvZ3JhbXMuYWRkKGtleSwgcHJvZ3JhbSk7CisgICAgcmV0dXJuIHByb2dyYW07CiB9
Ci0KLSNlbmRpZgogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlci5oCmluZGV4IDFmZmI3MTAwYmFlODJmYmVhMTU4ZjE4NzQ0YjExMGZjN2QwNjY1NGUuLmIx
ZjhkNjEwN2QwOTZjYWMyMjM1YTJmYTA0MDBkODJiNGNmMmMyZjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCkBAIC0yMSwyMzMgKzIxLDEwMiBAQAogI2lmbmRlZiBU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcl9oCiAjZGVmaW5lIFRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyX2gKIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRV
UkVfTUFQUEVSKQotCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5o
IgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9u
TWF0cml4LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0jaW5jbHVkZSAiRmlsdGVyT3BlcmF0
aW9ucy5oIgotI2VuZGlmCisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSGFzaC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEJpdG1hcFRleHR1cmU7Ci1jbGFzcyBUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjsKKyNkZWZpbmUgVEVYTUFQX0RFQ0xBUkVfVkFSSUFCTEUo
QWNjZXNzb3IsIE5hbWUsIFR5cGUpIEdDM0R1aW50IEFjY2Vzc29yIyNMb2NhdGlvbigpIHsgc3Rh
dGljIGNvbnN0IEF0b21pY1N0cmluZyBuYW1lKE5hbWUpOyByZXR1cm4gZ2V0TG9jYXRpb24obmFt
ZSwgVHlwZSk7IH0KKyNkZWZpbmUgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShBY2Nlc3NvcikgVEVY
TUFQX0RFQ0xBUkVfVkFSSUFCTEUoQWNjZXNzb3IsICJ1XyIjQWNjZXNzb3IsIFVuaWZvcm1WYXJp
YWJsZSkKKyNkZWZpbmUgVEVYTUFQX0RFQ0xBUkVfQVRUUklCVVRFKEFjY2Vzc29yKSBURVhNQVBf
REVDTEFSRV9WQVJJQUJMRShBY2Nlc3NvciwgImFfIiNBY2Nlc3NvciwgQXR0cmliVmFyaWFibGUp
CisjZGVmaW5lIFRFWE1BUF9ERUNMQVJFX1NBTVBMRVIoQWNjZXNzb3IpIFRFWE1BUF9ERUNMQVJF
X1ZBUklBQkxFKEFjY2Vzc29yLCAic18iI0FjY2Vzc29yLCBVbmlmb3JtVmFyaWFibGUpCiAKIGNs
YXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIDogcHVibGljIFJlZkNvdW50ZWQ8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0+IHsKIHB1YmxpYzoKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGlk
KCkgeyByZXR1cm4gbV9pZDsgfQotICAgIEdDM0R1aW50IHZlcnRleEF0dHJpYigpIHsgcmV0dXJu
IG1fdmVydGV4QXR0cmliOyB9CisgICAgUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtSUQoKSBjb25z
dCB7IHJldHVybiBtX2lkOyB9CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKSB7IHJl
dHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbT4gY3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNv
bnRleHQsIGNvbnN0IFN0cmluZyYgdmVydGV4LCBjb25zdCBTdHJpbmcmIGZyYWdtZW50KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bShjb250ZXh0LCB2ZXJ0ZXgsIGZyYWdtZW50KSk7CisgICAgfQogCi0gICAgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFk
ZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKTsKICAgICB2aXJ0dWFs
IH5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpOwogCi0gICAgdmlydHVhbCB2b2lkIHByZXBh
cmUoZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSopIHsgfQotICAgIEdDM0RpbnQg
bWF0cml4TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hdHJpeExvY2F0aW9uOyB9Ci0gICAg
R0MzRGludCBmbGlwTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZsaXBMb2NhdGlvbjsgfQot
ICAgIEdDM0RpbnQgdGV4dHVyZVNpemVMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVy
ZVNpemVMb2NhdGlvbjsgfQotICAgIEdDM0RpbnQgc291cmNlVGV4dHVyZUxvY2F0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9zb3VyY2VUZXh0dXJlTG9jYXRpb247IH0KLSAgICBHQzNEaW50IG1hc2tU
ZXh0dXJlTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hc2tUZXh0dXJlTG9jYXRpb247IH0K
LSAgICBHQzNEaW50IG9wYWNpdHlMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eUxv
Y2F0aW9uOyB9Ci0KLSAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKEdDM0Rp
bnQgbG9jYXRpb24pIHsgcmV0dXJuIGxvY2F0aW9uID49IDA7IH0KLQotcHJvdGVjdGVkOgotICAg
IHZvaWQgZ2V0VW5pZm9ybUxvY2F0aW9uKEdDM0RpbnQmIHZhciwgY29uc3QgY2hhciogbmFtZSk7
Ci0gICAgdm9pZCBpbml0aWFsaXplUHJvZ3JhbSgpOwotICAgIHZpcnR1YWwgdm9pZCBpbml0aWFs
aXplKCkgeyB9Ci0gICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlKCkgY29uc3QgeyBy
ZXR1cm4gbV92ZXJ0ZXhTaGFkZXJTb3VyY2UuZGF0YSgpOyB9Ci0gICAgY29uc3QgY2hhciogZnJh
Z21lbnRTaGFkZXJTb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2ZyYWdtZW50U2hhZGVyU291cmNl
LmRhdGEoKTsgfQorICAgIFRFWE1BUF9ERUNMQVJFX0FUVFJJQlVURSh2ZXJ0ZXgpCisgICAgVEVY
TUFQX0RFQ0xBUkVfQVRUUklCVVRFKHRleENvb3JkKQogCi0gICAgR3JhcGhpY3NDb250ZXh0M0Qq
IG1fY29udGV4dDsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1faWQ7Ci0gICAgR0MzRHVpbnQgbV92
ZXJ0ZXhBdHRyaWI7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX3ZlcnRleFNoYWRlcjsKLSAgICBQ
bGF0Zm9ybTNET2JqZWN0IG1fZnJhZ21lbnRTaGFkZXI7Ci0gICAgR0MzRGludCBtX21hdHJpeExv
Y2F0aW9uOwotICAgIEdDM0RpbnQgbV9mbGlwTG9jYXRpb247Ci0gICAgR0MzRGludCBtX3RleHR1
cmVTaXplTG9jYXRpb247Ci0gICAgR0MzRGludCBtX3NvdXJjZVRleHR1cmVMb2NhdGlvbjsKLSAg
ICBHQzNEaW50IG1fb3BhY2l0eUxvY2F0aW9uOwotICAgIEdDM0RpbnQgbV9tYXNrVGV4dHVyZUxv
Y2F0aW9uOwotCi1wcml2YXRlOgotICAgIENTdHJpbmcgbV92ZXJ0ZXhTaGFkZXJTb3VyY2U7Ci0g
ICAgQ1N0cmluZyBtX2ZyYWdtZW50U2hhZGVyU291cmNlOwotfTsKKyAgICBURVhNQVBfREVDTEFS
RV9VTklGT1JNKG1hdHJpeCkKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKGZsaXApCisgICAg
VEVYTUFQX0RFQ0xBUkVfVU5JRk9STSh0ZXh0dXJlU2l6ZSkKKyAgICBURVhNQVBfREVDTEFSRV9V
TklGT1JNKG9wYWNpdHkpCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShjb2xvcikKKyAgICBU
RVhNQVBfREVDTEFSRV9VTklGT1JNKGV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZSkKKyAg
ICBURVhNQVBfREVDTEFSRV9TQU1QTEVSKHNhbXBsZXIpCisgICAgVEVYTUFQX0RFQ0xBUkVfU0FN
UExFUihtYXNrKQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQotY2xhc3MgU3RhbmRhcmRGaWx0
ZXJQcm9ncmFtIDogcHVibGljIFJlZkNvdW50ZWQ8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiB7Ci1w
dWJsaWM6Ci0gICAgdmlydHVhbCB+U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKCk7Ci0gICAgdmlydHVh
bCB2b2lkIHByZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiwgdW5zaWduZWQgcGFzcywgY29u
c3QgSW50U2l6ZSYsIEdDM0R1aW50IGNvbnRlbnRUZXh0dXJlKTsKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCosIEZp
bHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgcGFzcyk7Ci0gICAgR0MzRHVp
bnQgdmVydGV4QXR0cmliKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhBdHRyaWI7IH0KLSAgICBH
QzNEdWludCB0ZXhDb29yZEF0dHJpYigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4Q29vcmRBdHRyaWI7
IH0KLSAgICBHQzNEdWludCB0ZXh0dXJlVW5pZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVy
ZVVuaWZvcm1Mb2NhdGlvbjsgfQotcHJvdGVjdGVkOgotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBt
X2NvbnRleHQ7Ci1wcml2YXRlOgotICAgIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbSgpOwotICAgIFN0
YW5kYXJkRmlsdGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCosIEZpbHRlck9wZXJhdGlvbjo6
T3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgcGFzcyk7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2lk
OwotICAgIFBsYXRmb3JtM0RPYmplY3QgbV92ZXJ0ZXhTaGFkZXI7Ci0gICAgUGxhdGZvcm0zRE9i
amVjdCBtX2ZyYWdtZW50U2hhZGVyOwotICAgIEdDM0R1aW50IG1fdmVydGV4QXR0cmliOwotICAg
IEdDM0R1aW50IG1fdGV4Q29vcmRBdHRyaWI7Ci0gICAgR0MzRHVpbnQgbV90ZXh0dXJlVW5pZm9y
bUxvY2F0aW9uOwotICAgIHVuaW9uIHsKLSAgICAgICAgR0MzRHVpbnQgYW1vdW50OwotCi0gICAg
ICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBHQzNEdWludCByYWRpdXM7Ci0gICAgICAgICAgICBH
QzNEdWludCBnYXVzc2lhbktlcm5lbDsKLSAgICAgICAgfSBibHVyOwotCi0gICAgICAgIHN0cnVj
dCB7Ci0gICAgICAgICAgICBHQzNEdWludCBibHVyUmFkaXVzOwotICAgICAgICAgICAgR0MzRHVp
bnQgY29sb3I7Ci0gICAgICAgICAgICBHQzNEdWludCBvZmZzZXQ7Ci0gICAgICAgICAgICBHQzNE
dWludCBjb250ZW50VGV4dHVyZTsKLSAgICAgICAgICAgIEdDM0R1aW50IGdhdXNzaWFuS2VybmVs
OwotICAgICAgICB9IHNoYWRvdzsKLSAgICB9IG1fdW5pZm9ybUxvY2F0aW9uczsKLX07CisgICAg
VEVYTUFQX0RFQ0xBUkVfVU5JRk9STShhbW91bnQpCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9S
TShnYXVzc2lhbktlcm5lbCkKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKGJsdXJSYWRpdXMp
CisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShzaGFkb3dDb2xvcikKKyAgICBURVhNQVBfREVD
TEFSRV9VTklGT1JNKHNoYWRvd09mZnNldCkKKyAgICBURVhNQVBfREVDTEFSRV9TQU1QTEVSKGNv
bnRlbnRUZXh0dXJlKQogI2VuZGlmCiAKLWNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
U2ltcGxlIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZT4gY3Jl
YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZShjb250ZXh0KSk7Ci0g
ICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUo
R3JhcGhpY3NDb250ZXh0M0QqKTsKLXByaXZhdGU6Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1TaW1wbGUoKTsKLX07Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVj
dFNpbXBsZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxl
PiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZShjb250
ZXh0KSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1SZWN0U2ltcGxlKEdyYXBoaWNzQ29udGV4dDNEKik7CiBwcml2YXRlOgotICAgIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSgpOwotfTsKLQotY2xhc3MgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaz4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKGNvbnRleHQpKTsKLSAgICB9Ci0KLXByb3RlY3RlZDoK
LSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKEdyYXBoaWNzQ29u
dGV4dDNEKik7Ci1wcml2YXRlOgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0
eUFuZE1hc2soKTsKLX07Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9w
YWNpdHlBbmRNYXNrIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RP
cGFjaXR5QW5kTWFzaz4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJl
Y3RPcGFjaXR5QW5kTWFzayhjb250ZXh0KSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soR3JhcGhpY3NDb250ZXh0
M0QqKTsKLXByaXZhdGU6Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0
eUFuZE1hc2soKTsKLX07Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRD
b2xvciA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yPiBj
cmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcihjb250ZXh0
KSk7Ci0gICAgfQotCi0gICAgR0MzRGludCBjb2xvckxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9jb2xvckxvY2F0aW9uOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNvbGlkQ29sb3IoR3JhcGhpY3NDb250ZXh0M0QqKTsKLXByaXZhdGU6Ci0gICAgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yKCk7Ci0gICAgR0MzRGludCBtX2NvbG9y
TG9jYXRpb247Ci19OwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlh
c2luZ05vTWFzayA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxp
YXNpbmdOb01hc2s+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRp
YWxpYXNpbmdOb01hc2soY29udGV4dCkpOwotICAgIH0KLQotICAgIEdDM0RpbnQgZXhwYW5kZWRR
dWFkVmVydGljZXNJblRleHR1cmVDb29yZGluYXRlc0xvY2F0aW9uKCkgeyByZXR1cm4gbV9leHBh
bmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNvcmRpbmF0ZXNMb2NhdGlvbjsgfQotICAgIEdDM0Rp
bnQgZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb24oKSB7IHJldHVybiBtX2V4
cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uOyB9CisgICAgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIGNvbnN0IFN0cmlu
ZyYgdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBTdHJpbmcmIGZyYWdtZW50U2hhZGVyU291cmNl
KTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fdmVydGV4U2hhZGVyOworICAgIFBsYXRmb3JtM0RP
YmplY3QgbV9mcmFnbWVudFNoYWRlcjsKIAotcHJvdGVjdGVkOgotICAgIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrKEdyYXBoaWNzQ29udGV4dDNEKik7Ci1wcml2
YXRlOgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrKCk7
CisgICAgZW51bSBWYXJpYWJsZVR5cGUgeyBVbmlmb3JtVmFyaWFibGUsIEF0dHJpYlZhcmlhYmxl
IH07CisgICAgR0MzRHVpbnQgZ2V0TG9jYXRpb24oY29uc3QgQXRvbWljU3RyaW5nJiwgVmFyaWFi
bGVUeXBlKTsKIAotICAgIEdDM0RpbnQgbV9leHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNv
cmRpbmF0ZXNMb2NhdGlvbjsKLSAgICBHQzNEaW50IG1fZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVl
blNwYWNlTG9jYXRpb247CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7
CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2lkOworICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBH
QzNEdWludD4gbV92YXJpYWJsZXM7CiB9OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlciB7CiBwdWJsaWM6Ci0gICAgZW51bSBTaGFkZXJUeXBlIHsKLSAgICAgICAgSW52YWxpZCA9
IDAsIC8vIEhhc2hNYXBzIGRvIG5vdCBsaWtlIDAgYXMgYSBrZXkuCi0gICAgICAgIFNpbXBsZSwK
LSAgICAgICAgQW50aWFsaWFzaW5nTm9NYXNrLAotICAgICAgICBSZWN0U2ltcGxlLAotICAgICAg
ICBPcGFjaXR5QW5kTWFzaywKLSAgICAgICAgUmVjdE9wYWNpdHlBbmRNYXNrLAotICAgICAgICBT
b2xpZENvbG9yCisgICAgZW51bSBTaGFkZXJLZXkgeworICAgICAgICBJbnZhbGlkID0gMCwKKyAg
ICAgICAgRGVmYXVsdCwKKyAgICAgICAgUmVjdCwKKyAgICAgICAgTWFza2VkLAorICAgICAgICBN
YXNrZWRSZWN0LAorICAgICAgICBTb2xpZENvbG9yLAorICAgICAgICBBbnRpYWxpYXNlZCwKKyAg
ICAgICAgR3JheXNjYWxlRmlsdGVyLAorICAgICAgICBTZXBpYUZpbHRlciwKKyAgICAgICAgU2F0
dXJhdGVGaWx0ZXIsCisgICAgICAgIEh1ZVJvdGF0ZUZpbHRlciwKKyAgICAgICAgQnJpZ2h0bmVz
c0ZpbHRlciwKKyAgICAgICAgQ29udHJhc3RGaWx0ZXIsCisgICAgICAgIE9wYWNpdHlGaWx0ZXIs
CisgICAgICAgIEludmVydEZpbHRlciwKKyAgICAgICAgQmx1ckZpbHRlciwKKyAgICAgICAgU2hh
ZG93RmlsdGVyUGFzczEsCisgICAgICAgIFNoYWRvd0ZpbHRlclBhc3MyLAorICAgICAgICBMYXN0
RmlsdGVyCiAgICAgfTsKIAogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCkgeyB9CiAg
ICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoR3JhcGhpY3NDb250ZXh0M0QqKTsKICAgICB2
aXJ0dWFsIH5UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpOwogCi0jaWYgRU5BQkxFKENTU19G
SUxURVJTKQotICAgIHVuc2lnbmVkIGdldFBhc3Nlc1JlcXVpcmVkRm9yRmlsdGVyKGNvbnN0IEZp
bHRlck9wZXJhdGlvbiYpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9n
cmFtPiBnZXRTaGFkZXJGb3JGaWx0ZXIoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiwgdW5zaWduZWQg
cGFzcyk7Ci0jZW5kaWYKLQotICAgIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0+IGdldFNoYWRlclByb2dyYW0oU2hhZGVyVHlwZSk7Ci0gICAgUGFzc1JlZlB0cjxUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I+IHNvbGlkQ29sb3JQcm9ncmFtKCk7Ci0gICAg
UGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzaz4g
YW50aWFsaWFzaW5nTm9NYXNrUHJvZ3JhbSgpOworICAgIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0+IGdldFNoYWRlclByb2dyYW0oU2hhZGVyS2V5KTsKIAogcHJpdmF0ZToK
LSAgICB0eXBlZGVmIEhhc2hNYXA8U2hhZGVyVHlwZSwgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtPiwgRGVmYXVsdEhhc2g8aW50Pjo6SGFzaCwgSGFzaFRyYWl0czxpbnQ+ID4gVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA7Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1NYXAgbV90ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDsKLSAgICBHcmFwaGljc0NvbnRl
eHQzRCogbV9jb250ZXh0OwotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHR5cGVkZWYg
SGFzaE1hcDxpbnQsIFJlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+ID4gRmlsdGVyTWFwOwot
ICAgIEZpbHRlck1hcCBtX2ZpbHRlck1hcDsKLSNlbmRpZgorICAgIHR5cGVkZWYgSGFzaE1hcDxT
aGFkZXJLZXksIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4sIERlZmF1bHRIYXNo
PGludD46Okhhc2gsIEhhc2hUcmFpdHM8aW50PiA+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
TWFwOworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwIG1fcHJvZ3JhbXM7CisgICAg
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CiB9OwogCiB9Ci0KICNlbmRpZgog
CiAjZW5kaWYgLy8gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXJfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168989</attachid>
            <date>2012-10-16 11:44:42 -0700</date>
            <delta_ts>2012-10-16 12:13:49 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-86048-20121016114330.patch</filename>
            <type>text/plain</type>
            <size>81412</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxNDc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjg5ZGZmYmNjZmExOWJi
NjYwYjhlMGU5MTA1ZTg1NWRkYzhhM2NlMi4uYTc4OWFmNjBiNGJlZWQ2NTYxMjMxZGJlNzVlOTcz
NWM0OGJiODdkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDEyLTEwLTE2ICBOb2Ft
IFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBbVGV4bWFw
XSBSZWZhY3RvciBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlciB0byBiZSBjbGVhcmVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjA0OAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KKworICAgICAgICBQcmV2aW91cyBpbXBs
ZW1lbnRhdGlvbiBvZiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlciB3YXMgdmVyeSB2ZXJib3Nl
LCBjYWxsaW5nIGZvciB0b28KKyAgICAgICAgbWFueSBjYXN0cyBhbmQgYW1iaWd1b3VzIG93bmVy
c2hpcC4KKyAgICAgICAgVGhpcyByZWZhY3RvciBkb2VzIHRoZSBmb2xsb3dpbmc6CisgICAgICAg
IDEuIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIGlzIG9uZSBjbGFzcyB3aXRob3V0IHN1YmNs
YXNzZXMuCisgICAgICAgIDIuIFVuaWZvcm0vQXR0cmlidXRlIGFjY2Vzc29ycyBhcmUgZ2VuZXJh
dGVkIGJ5IHNwZWNpYWwgbWFjcm9zIChURVhNQVBfREVDTEFSRV8uLi4pIHRoYXQKKyAgICAgICAg
ICAgZ2VuZXJhdGUgYm90aCB0aGUgQysrIGFjY2VzcyBmdW5jdGlvbiwgYXMgd2VsbCBhcyB0aGUg
R0xTTCBuYW1lIG9mIHRoZSB2YXJpYWJsZS4gVGhpcworICAgICAgICAgICBhbGxvd3MgYWRkaW5n
L3JlbW92aW5nIHZhcmlhYmxlcyBmcm9tIGEgc2hhZGVyIHdpdGhvdXQgYWRkaW5nIGJyb2lsZXIt
cGxhdGUgY29kZSBsaWtlCisgICAgICAgICAgIGJlZm9yZS4KKworICAgICAgICBBZnRlciB0aGlz
IGNoYW5nZSBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlciBoYXMgb25seSBvbmUgcmVzcG9uc2li
aWxpdHkgLSBkZWFsaW5nIHdpdGgKKyAgICAgICAgVGV4dHVyZU1hcHBlckdMJ3MgYnVpbHQtaW4g
c2hhZGVycyBhbmQgdGhlaXIgbGlmZWN5Y2xlLiBQcmVwYXJpbmcgZmlsdGVycyBldGMuIGlzIGRv
bmUKKyAgICAgICAgaW4gVGV4dHVyZU1hcHBlckdMLgorCisgICAgICAgIFRoaXMgaXMgYSByZWZh
Y3RvciB3aXRob3V0IG5ldyBmdW5jdGlvbmFsaXR5LiBJdCBoYXMgYmVlbiB2ZXJpZmllZCB0byBu
b3QgYnJlYWsgYW55IGV4aXN0aW5nCisgICAgICAgIHJlbGV2YW50IHRlc3QuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJHTDo6ZHJhd1RleHR1cmVSZWN0YW5nbGVBUkIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyR0w6OmRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcCk6CisgICAgICAgICAgICBVc2UgdGhl
IE1BQ1JPLWdlbmVyYXRlZCB1bmlmb3JtIGFjY2Vzc29ycy4KKworICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjprZXlGb3JGaWx0ZXJUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OmdldFBhc3Nlc1JlcXVpcmVkRm9yRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmdhdXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OmdhdXNzaWFuS2VybmVsKToKKyAgICAgICAgKFdlYkNvcmU6OnBy
ZXBhcmVGaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6
ZHJhd0ZpbHRlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6YXBwbHlG
aWx0ZXJzKToKKyAgICAgICAgICAgIE1vdmUgdGhlIGZpbHRlciBsb2dpYyB0byBUZXh0dXJlTWFw
cGVyR0wKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmdldExvY2F0aW9uKToKKyAgICAgICAgKFNoYWRl
clNwZWMpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZGVyU3BlYzo6U2hhZGVyU3BlYyk6CisgICAg
ICAgIChXZWJDb3JlOjpnZXRTaGFkZXJTcGVjKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcik6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6flRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpnZXRTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OnByb2dyYW1JRCk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKToKKyAgICAg
ICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyKToKKyAgICAgICAgICAgIFNlZSBkZXNjcmlwdGlvbi4KKwogMjAxMi0xMC0x
NiAgQWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQGRpZ2lhLmNvbT4KIAogICAg
ICAgICBbUXRdIEltcGxlbWVudCBmYXN0Qm91bmRpbmdQYXRoL2JvdW5kaW5nUGF0aCBkaXN0aW5j
dGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKaW5kZXggZTUyODk0NzNiNWY1MWE2MzAwYmM1MTZh
NjM1ZTU5NGY0OGEzOTcwNy4uOTRlNDQ5MzQ1OTk2NTM2OGU2NWRmOGM4NGI2ZjkwMjM1YWJkNDNl
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJHTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiTGVuZ3Ro
RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCkBAIC0yNjYsNyAr
MjY3LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmVuZFBhaW50aW5nKCkKIAogdm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmRyYXdRdWFkKGNvbnN0IERyYXdRdWFkJiBxdWFkVG9EcmF3LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbSogc2hhZGVyUHJvZ3JhbSwgR0MzRGVudW0gZHJhd2luZ01vZGUsIGJvb2wgbmVlZHNC
bGVuZGluZykKIHsKLSAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hh
ZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKICAgICBtX2Nv
bnRleHQzRC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAwKTsK
IAogICAgIGNvbnN0IEdDM0RmbG9hdCBxdWFkW10gPSB7CkBAIC0yNzUsNyArMjc2LDcgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdRdWFkKGNvbnN0IERyYXdRdWFkJiBxdWFkVG9EcmF3LCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk0KICAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVk
VG9Vbml0U3F1YXJlLnAzKCkueCgpLCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRT
cXVhcmUucDMoKS55KCksCiAgICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5p
dFNxdWFyZS5wNCgpLngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJl
LnA0KCkueSgpCiAgICAgfTsKLSAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihz
aGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FU
LCBmYWxzZSwgMCwgR0MzRGludHB0cihxdWFkKSk7CisgICAgbV9jb250ZXh0M0QtPnZlcnRleEF0
dHJpYlBvaW50ZXIoc2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSwgMiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cihxdWFkKSk7CiAKICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChkYXRhKCkucHJv
amVjdGlvbk1hdHJpeCkubXVsdGlwbHkobW9kZWxWaWV3TWF0cml4KS5tdWx0aXBseShUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgKICAgICAgICAgICAgIHF1YWRUb0RyYXcub3JpZ2luYWxUYXJnZXRSZWN0
LndpZHRoKCksIDAsIDAsIDAsCkBAIC0yOTcsNyArMjk4LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVy
R0w6OmRyYXdRdWFkKGNvbnN0IERyYXdRdWFkJiBxdWFkVG9EcmF3LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk0KICAgICAgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJM
RU5EKTsKIAogICAgIG1fY29udGV4dDNELT5kcmF3QXJyYXlzKGRyYXdpbmdNb2RlLCAwLCA0KTsK
LSAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0t
PnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KHNoYWRlclByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwogfQogCiB2b2lkIFRleHR1cmVN
YXBwZXJHTDo6ZHJhd0JvcmRlcihjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHdpZHRoLCBjb25z
dCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2Rl
bFZpZXdNYXRyaXgpCkBAIC0zMDUsMTUgKzMwNiwxMiBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6
ZHJhd0JvcmRlcihjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHdpZHRoLCBjb25zdCBGbG9hdFJl
YwogICAgIGlmIChjbGlwU3RhY2soKS5jdXJyZW50KCkuc2Npc3NvckJveC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNv
bGlkQ29sb3I+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXIuc29saWRDb2xvclByb2dyYW0oKTsKLSAgICBtX2NvbnRleHQzRC0+dXNlUHJv
Z3JhbShwcm9ncmFtLT5pZCgpKTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U29saWRD
b2xvcik7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkp
OwogCi0gICAgZmxvYXQgYWxwaGEgPSBjb2xvci5hbHBoYSgpIC8gMjU1LjA7Ci0gICAgbV9jb250
ZXh0M0QtPnVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxvY2F0aW9uKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgIChjb2xvci5yZWQoKSAvIDI1NS4wKSAqIGFscGhhLAotICAgICAgICAgICAgICAg
ICAgICAgICAoY29sb3IuZ3JlZW4oKSAvIDI1NS4wKSAqIGFscGhhLAotICAgICAgICAgICAgICAg
ICAgICAgICAoY29sb3IuYmx1ZSgpIC8gMjU1LjApICogYWxwaGEsCi0gICAgICAgICAgICAgICAg
ICAgICAgIGFscGhhKTsKKyAgICBmbG9hdCByLCBnLCBiLCBhOworICAgIGNvbG9yLmdldFJHQkEo
ciwgZywgYiwgYSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxv
Y2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgIG1fY29udGV4dDNELT5saW5lV2lkdGgod2lkdGgp
OwogCiAgICAgZHJhd1F1YWQodGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLmdl
dCgpLCBHcmFwaGljc0NvbnRleHQzRDo6TElORV9MT09QLCBjb2xvci5oYXNBbHBoYSgpKTsKQEAg
LTM2OCwyNyArMzY2LDI1IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVJlY3Rh
bmdsZUFSQih1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uCiB7CiAgICAgUmVmUHRy
PFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtOwogICAgIGlmIChtYXNrVGV4dHVy
ZSkKLSAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpSZWN0T3BhY2l0eUFuZE1hc2spOworICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdM
RGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXI6Ok1hc2tlZFJlY3QpOwogICAgIGVsc2UKLSAgICAgICAgcHJv
Z3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5n
ZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpSZWN0U2ltcGxlKTsK
LSAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKTsKKyAgICAgICAgcHJv
Z3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5n
ZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpSZWN0KTsKKyAgICBt
X2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CiAKLSAgICBtX2Nv
bnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkp
OworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0
ZXhMb2NhdGlvbigpKTsKICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRTApOwogICAgIG1fY29udGV4dDNELT5iaW5kVGV4dHVyZShHTF9URVhU
VVJFX1JFQ1RBTkdMRV9BUkIsIHRleHR1cmUpOwotICAgIG1fY29udGV4dDNELT51bmlmb3JtMWko
cHJvZ3JhbS0+c291cmNlVGV4dHVyZUxvY2F0aW9uKCksIDApOworICAgIG1fY29udGV4dDNELT51
bmlmb3JtMWkocHJvZ3JhbS0+c2FtcGxlckxvY2F0aW9uKCksIDApOwogCiAgICAgbV9jb250ZXh0
M0QtPnVuaWZvcm0xZihwcm9ncmFtLT5mbGlwTG9jYXRpb24oKSwgISEoZmxhZ3MgJiBTaG91bGRG
bGlwVGV4dHVyZSkpOwogICAgIG1fY29udGV4dDNELT51bmlmb3JtMmYocHJvZ3JhbS0+dGV4dHVy
ZVNpemVMb2NhdGlvbigpLCB0ZXh0dXJlU2l6ZS53aWR0aCgpLCB0ZXh0dXJlU2l6ZS5oZWlnaHQo
KSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xZihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24o
KSwgb3BhY2l0eSk7CiAKLSAgICBpZiAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFs
aWRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCkpKQotICAgICAgICBt
X2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpLCBvcGFjaXR5
KTsKLQotICAgIGlmIChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpICYmIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0t
Pm1hc2tUZXh0dXJlTG9jYXRpb24oKSkpIHsKKyAgICBpZiAobWFza1RleHR1cmUgJiYgbWFza1Rl
eHR1cmUtPmlzVmFsaWQoKSkgewogICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wqIG1hc2tU
ZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wqPihtYXNrVGV4dHVy
ZSk7CiAgICAgICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFMSk7CiAgICAgICAgIG1fY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgbWFza1RleHR1cmVHTC0+aWQoKSk7Ci0gICAgICAgIG1fY29u
dGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpLCAxKTsKKyAg
ICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5tYXNrTG9jYXRpb24oKSwgMSk7
CiAgICAgICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFMCk7CiAgICAgfQogCkBAIC00MDUsMTAgKzQwMSwxMCBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJHTDo6ZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IElu
dFNpemUmCiAKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW07
CiAgICAgaWYgKG1hc2tUZXh0dXJlKQotICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdM
RGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wYWNpdHlBbmRNYXNrKTsKKyAgICAgICAgcHJvZ3JhbSA9
IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFk
ZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpNYXNrZWQpOwogICAgIGVsc2UK
LSAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpT
aW1wbGUpOwotICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOworICAg
ICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkRlZmF1
bHQpOworICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsK
IAogICAgIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCB0ZXh0dXJl
LCBmbGFncywgdGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5LCBtYXNrVGV4dHVy
ZSk7CiB9CkBAIC01MzYsOCArNTMyLDggQEAgYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0
dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywKICAgICBx
dWFkVG9FZGdlQXJyYXkoZXhwYW5kZWRRdWFkSW5TY3JlZW5TcGFjZSwgdGFyZ2V0UXVhZEVkZ2Vz
KTsKICAgICBxdWFkVG9FZGdlQXJyYXkoaW5mbGF0ZVF1YWQocXVhZEluU2NyZWVuU3BhY2UuYm91
bmRpbmdCb3goKSwgIGluZmxhdGlvbkRpc3RhbmNlKSwgdGFyZ2V0UXVhZEVkZ2VzICsgMTIpOwog
Ci0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNr
PiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLmFudGlhbGlhc2luZ05vTWFza1Byb2dyYW0oKTsKLSAgICBtX2NvbnRleHQzRC0+dXNlUHJv
Z3JhbShwcm9ncmFtLT5pZCgpKTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QW50aWFs
aWFzZWQpOworICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgp
KTsKICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTNmdihwcm9ncmFtLT5leHBhbmRlZFF1YWRFZGdl
c0luU2NyZWVuU3BhY2VMb2NhdGlvbigpLCA4LCB0YXJnZXRRdWFkRWRnZXMpOwogCiAgICAgZHJh
d1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKHByb2dyYW0uZ2V0KCksIHRleHR1cmUsIGZsYWdzLCBE
cmF3UXVhZChvcmlnaW5hbFRhcmdldFJlY3QsIGV4cGFuZGVkUXVhZEluVGV4dHVyZUNvb3JkaW5h
dGVzKSwgbW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5LCAwIC8qIG1hc2tUZXh0dXJlICovKTsKQEAg
LTU0NiwyMSArNTQyLDE5IEBAIGJvb2wgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhB
bnRpYWxpYXNpbmcodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsCiAKIHZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0qIHByb2dyYW0sIHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBE
cmF3UXVhZCYgcXVhZFRvRHJhdywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmll
d01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUp
CiB7Ci0gICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZl
cnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXko
cHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7CiAgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKICAgICBtX2NvbnRleHQzRC0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmUpOwotICAgIG1fY29u
dGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+c291cmNlVGV4dHVyZUxvY2F0aW9uKCksIDApOwor
ICAgIG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+c2FtcGxlckxvY2F0aW9uKCksIDAp
OwogCiAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xZihwcm9ncmFtLT5mbGlwTG9jYXRpb24oKSwg
ISEoZmxhZ3MgJiBTaG91bGRGbGlwVGV4dHVyZSkpOworICAgIG1fY29udGV4dDNELT51bmlmb3Jt
MWYocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkpOwogCi0gICAgaWYgKFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0tPm9w
YWNpdHlMb2NhdGlvbigpKSkKLSAgICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xZihwcm9ncmFt
LT5vcGFjaXR5TG9jYXRpb24oKSwgb3BhY2l0eSk7Ci0KLSAgICBpZiAobWFza1RleHR1cmUgJiYg
bWFza1RleHR1cmUtPmlzVmFsaWQoKSAmJiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aXNW
YWxpZFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCkpKSB7Cisg
ICAgaWYgKG1hc2tUZXh0dXJlICYmIG1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkpIHsKICAgICAgICAg
Y29uc3QgQml0bWFwVGV4dHVyZUdMKiBtYXNrVGV4dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
Qml0bWFwVGV4dHVyZUdMKj4obWFza1RleHR1cmUpOwogICAgICAgICBtX2NvbnRleHQzRC0+YWN0
aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpOwogICAgICAgICBtX2NvbnRl
eHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1hc2tUZXh0
dXJlR0wtPmlkKCkpOwotICAgICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPm1h
c2tUZXh0dXJlTG9jYXRpb24oKSwgMSk7CisgICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWko
cHJvZ3JhbS0+bWFza0xvY2F0aW9uKCksIDEpOwogICAgICAgICBtX2NvbnRleHQzRC0+YWN0aXZl
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwogICAgIH0KIApAQCAtNzEwLDI3
ICs3MDQsMTcxIEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhJbWFnZSog
aW1hZ2UsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvCiB9CiAKICNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCi12b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0ZpbHRlcmVkKGNvbnN0IEJpdG1h
cFRleHR1cmUmIHNvdXJjZVRleHR1cmUsIGNvbnN0IEJpdG1hcFRleHR1cmUmIGNvbnRlbnRUZXh0
dXJlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIGZpbHRlciwgaW50IHBhc3MpCisKK3N0YXRpYyBU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2hhZGVyS2V5IGtleUZvckZpbHRlclR5cGUoRmls
dGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUsIHVuc2lnbmVkIHBhc3MpCit7CisgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKKyAg
ICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpHcmF5c2NhbGVGaWx0ZXI7
CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgorICAgICAgICByZXR1cm4gVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXI6OlNlcGlhRmlsdGVyOworICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpTQVRVUkFURToKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpTYXR1cmF0ZUZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToK
KyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpIdWVSb3RhdGVGaWx0
ZXI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKKyAgICAgICAgcmV0dXJuIFRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpJbnZlcnRGaWx0ZXI7CisgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkJSSUdIVE5FU1M6CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6QnJpZ2h0bmVzc0ZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09O
VFJBU1Q6CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Q29udHJh
c3RGaWx0ZXI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6CisgICAgICAgIHJl
dHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3BhY2l0eUZpbHRlcjsKKyAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyOjpCbHVyRmlsdGVyOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NI
QURPVzoKKyAgICAgICAgcmV0dXJuIHBhc3MgPyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6
U2hhZG93RmlsdGVyUGFzczIgOiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2hhZG93Rmls
dGVyUGFzczE7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6SW52YWxpZDsKKyAgICB9
Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBnZXRQYXNzZXNSZXF1aXJlZEZvckZpbHRlcihGaWx0ZXJP
cGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpTRVBJQToKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6CisgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OklOVkVSVDoKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKKyAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9Q
QUNJVFk6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVS
OgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKKyAgICAgICAgLy8gV2Ug
dXNlIHR3by1wYXNzZXMgKHZlcnRpY2FsK2hvcml6b250YWwpIGZvciBibHVyIGFuZCBkcm9wLXNo
YWRvdy4KKyAgICAgICAgcmV0dXJuIDI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorfQorCisvLyBDcmVhdGUgYSBub3JtYWwgZGlzdHJpYnV0aW9uIG9mIDIxIHZhbHVl
cyBiZXR3ZWVuIC0yIGFuZCAyLgorc3RhdGljIGNvbnN0IGludCBHYXVzc2lhbktlcm5lbEhhbGZX
aWR0aCA9IDExOworc3RhdGljIGNvbnN0IGZsb2F0IEdhdXNzaWFuS2VybmVsU3RlcCA9IDAuMjsK
Kworc3RhdGljIGlubGluZSBmbG9hdCBnYXVzcyhmbG9hdCB4KQoreworICAgIHJldHVybiBleHAo
LSh4ICogeCkgLyAyLik7Cit9CisKK3N0YXRpYyBmbG9hdCogZ2F1c3NpYW5LZXJuZWwoKQorewor
ICAgIHN0YXRpYyBib29sIHByZXBhcmVkID0gZmFsc2U7CisgICAgc3RhdGljIGZsb2F0IGtlcm5l
bFtHYXVzc2lhbktlcm5lbEhhbGZXaWR0aF0gPSB7MCwgfTsKKworICAgIGlmIChwcmVwYXJlZCkK
KyAgICAgICAgcmV0dXJuIGtlcm5lbDsKKworICAgIGtlcm5lbFswXSA9IGdhdXNzKDApOworICAg
IGZsb2F0IHN1bSA9IGtlcm5lbFswXTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgR2F1
c3NpYW5LZXJuZWxIYWxmV2lkdGg7ICsraSkgeworICAgICAgICBrZXJuZWxbaV0gPSBnYXVzcyhp
ICogR2F1c3NpYW5LZXJuZWxTdGVwKTsKKyAgICAgICAgc3VtICs9IDIgKiBrZXJuZWxbaV07Cisg
ICAgfQorCisgICAgLy8gTm9ybWFsaXplIHRoZSBrZXJuZWwuCisgICAgZmxvYXQgc2NhbGUgPSAx
IC8gc3VtOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHYXVzc2lhbktlcm5lbEhhbGZX
aWR0aDsgKytpKQorICAgICAgICBrZXJuZWxbaV0gKj0gc2NhbGU7CisKKyAgICBwcmVwYXJlZCA9
IHRydWU7CisgICAgcmV0dXJuIGtlcm5lbDsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZUZpbHRl
clByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qIHByb2dyYW0sIGNvbnN0IEZpbHRl
ck9wZXJhdGlvbiYgb3BlcmF0aW9uLCB1bnNpZ25lZCBwYXNzLCBjb25zdCBJbnRTaXplJiBzaXpl
LCBHQzNEdWludCBjb250ZW50VGV4dHVyZSkKK3sKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQgPSBwcm9ncmFtLT5jb250ZXh0KCk7CisgICAgY29udGV4dC0+dXNlUHJvZ3Jh
bShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CisKKyAgICBzd2l0Y2ggKG9wZXJhdGlvbi5nZXRPcGVy
YXRpb25UeXBlKCkpIHsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgorICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
U0FUVVJBVEU6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6CisgICAgICAg
IGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT5hbW91bnRMb2NhdGlvbigpLCBzdGF0aWNfY2Fz
dDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91
bnQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6
CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6CisgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkNPTlRSQVNUOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgor
ICAgICAgICBjb250ZXh0LT51bmlmb3JtMWYocHJvZ3JhbS0+YW1vdW50TG9jYXRpb24oKSwgc3Rh
dGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiY+KG9w
ZXJhdGlvbikuYW1vdW50KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6QkxVUjogeworICAgICAgICBjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyID0g
c3RhdGljX2Nhc3Q8Y29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbik7CisgICAg
ICAgIEZsb2F0U2l6ZSByYWRpdXM7CisKKyAgICAgICAgLy8gQmx1ciBpcyBkb25lIGluIHR3byBw
YXNzZXMsIGZpcnN0IGhvcml6b250YWxseSBhbmQgdGhlbiB2ZXJ0aWNhbGx5LiBUaGUgc2FtZSBz
aGFkZXIgaXMgdXNlZCBmb3IgYm90aC4KKyAgICAgICAgaWYgKHBhc3MpCisgICAgICAgICAgICBy
YWRpdXMuc2V0SGVpZ2h0KGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ci5zdGREZXZpYXRpb24oKSwg
c2l6ZS5oZWlnaHQoKSkgLyBzaXplLmhlaWdodCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmFkaXVzLnNldFdpZHRoKGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ci5zdGREZXZpYXRpb24o
KSwgc2l6ZS53aWR0aCgpKSAvIHNpemUud2lkdGgoKSk7CisKKyAgICAgICAgY29udGV4dC0+dW5p
Zm9ybTJmKHByb2dyYW0tPmJsdXJSYWRpdXNMb2NhdGlvbigpLCByYWRpdXMud2lkdGgoKSwgcmFk
aXVzLmhlaWdodCgpKTsKKyAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmdihwcm9ncmFtLT5nYXVz
c2lhbktlcm5lbExvY2F0aW9uKCksIEdhdXNzaWFuS2VybmVsSGFsZldpZHRoLCBnYXVzc2lhbktl
cm5lbCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpEUk9QX1NIQURPVzogeworICAgICAgICBjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9u
JiBzaGFkb3cgPSBzdGF0aWNfY2FzdDxjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJj4o
b3BlcmF0aW9uKTsKKyAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmdihwcm9ncmFtLT5nYXVzc2lh
bktlcm5lbExvY2F0aW9uKCksIEdhdXNzaWFuS2VybmVsSGFsZldpZHRoLCBnYXVzc2lhbktlcm5l
bCgpKTsKKyAgICAgICAgc3dpdGNoIChwYXNzKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAg
ICAgIC8vIEZpcnN0IHBhc3M6IHZlcnRpY2FsIGFscGhhIGJsdXIuCisgICAgICAgICAgICBjb250
ZXh0LT51bmlmb3JtMmYocHJvZ3JhbS0+c2hhZG93T2Zmc2V0TG9jYXRpb24oKSwgZmxvYXQoc2hh
ZG93LmxvY2F0aW9uKCkueCgpKSAvIGZsb2F0KHNpemUud2lkdGgoKSksIGZsb2F0KHNoYWRvdy5s
b2NhdGlvbigpLnkoKSkgLyBmbG9hdChzaXplLmhlaWdodCgpKSk7CisgICAgICAgICAgICBjb250
ZXh0LT51bmlmb3JtMWYocHJvZ3JhbS0+Ymx1clJhZGl1c0xvY2F0aW9uKCksIHNoYWRvdy5zdGRE
ZXZpYXRpb24oKSAvIGZsb2F0KHNpemUud2lkdGgoKSkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIC8vIFNlY29uZCBwYXNzOiB3ZSBuZWVkIHRoZSBz
aGFkb3cgY29sb3IgYW5kIHRoZSBjb250ZW50IHRleHR1cmUgZm9yIGNvbXBvc2l0aW5nLgorICAg
ICAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPmJsdXJSYWRpdXNMb2NhdGlvbigp
LCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLmhlaWdodCgpKSk7CisgICAgICAg
ICAgICBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSk7
CisgICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgY29udGVudFRleHR1cmUpOworICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTFp
KHByb2dyYW0tPmNvbnRlbnRUZXh0dXJlTG9jYXRpb24oKSwgMSk7CisgICAgICAgICAgICBmbG9h
dCByLCBnLCBiLCBhOworICAgICAgICAgICAgc2hhZG93LmNvbG9yKCkuZ2V0UkdCQShyLCBnLCBi
LCBhKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm00Zihwcm9ncmFtLT5zaGFkb3dDb2xv
ckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKwordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdGaWx0ZXJlZChjb25zdCBCaXRtYXBU
ZXh0dXJlJiBzYW1wbGVyLCBjb25zdCBCaXRtYXBUZXh0dXJlJiBjb250ZW50VGV4dHVyZSwgY29u
c3QgRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXIsIGludCBwYXNzKQogewogICAgIC8vIEZvciBzdGFu
ZGFyZCBmaWx0ZXJzLCB3ZSBhbHdheXMgZHJhdyB0aGUgd2hvbGUgdGV4dHVyZSB3aXRob3V0IHRy
YW5zZm9ybWF0aW9ucy4KLSAgICBSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBwcm9ncmFt
ID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNo
YWRlckZvckZpbHRlcihmaWx0ZXIsIHBhc3MpOworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpTaGFkZXJLZXkga2V5ID0ga2V5Rm9yRmlsdGVyVHlwZShmaWx0ZXIuZ2V0T3BlcmF0aW9u
VHlwZSgpLCBwYXNzKTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHBy
b2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIu
Z2V0U2hhZGVyUHJvZ3JhbShrZXkpOwogICAgIEFTU0VSVChwcm9ncmFtKTsKIAotICAgIHByb2dy
YW0tPnByZXBhcmUoZmlsdGVyLCBwYXNzLCBzb3VyY2VUZXh0dXJlLmNvbnRlbnRTaXplKCksIHN0
YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KGNvbnRlbnRUZXh0dXJlKS5pZCgpKTsK
KyAgICBwcmVwYXJlRmlsdGVyUHJvZ3JhbShwcm9ncmFtLmdldCgpLCBmaWx0ZXIsIHBhc3MsIHNh
bXBsZXIuY29udGVudFNpemUoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4o
Y29udGVudFRleHR1cmUpLmlkKCkpOwogCi0gICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKLSAgICBtX2NvbnRleHQzRC0+ZW5h
YmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIoKSk7CisgICAgbV9j
b250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleExvY2F0aW9u
KCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT50
ZXhDb29yZExvY2F0aW9uKCkpOwogICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFMCk7Ci0gICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0
dXJlR0wmPihzb3VyY2VUZXh0dXJlKS5pZCgpKTsKLSAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFp
KHByb2dyYW0tPnRleHR1cmVVbmlmb3JtKCksIDApOworICAgIG1fY29udGV4dDNELT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0
bWFwVGV4dHVyZUdMJj4oc2FtcGxlcikuaWQoKSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0x
aShwcm9ncmFtLT5zYW1wbGVyTG9jYXRpb24oKSwgMCk7CiAgICAgY29uc3QgR0MzRGZsb2F0IHRh
cmdldFZlcnRpY2VzW10gPSB7LTEsIC0xLCAxLCAtMSwgMSwgMSwgLTEsIDF9OwogICAgIGNvbnN0
IEdDM0RmbG9hdCBzb3VyY2VWZXJ0aWNlc1tdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9Owot
ICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleEF0dHJp
YigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHRh
cmdldFZlcnRpY2VzKSk7Ci0gICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJv
Z3JhbS0+dGV4Q29vcmRBdHRyaWIoKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxz
ZSwgMCwgR0MzRGludHB0cihzb3VyY2VWZXJ0aWNlcykpOworICAgIG1fY29udGV4dDNELT52ZXJ0
ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleExvY2F0aW9uKCksIDIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIodGFyZ2V0VmVydGljZXMpKTsKKyAg
ICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT50ZXhDb29yZExvY2F0
aW9uKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIo
c291cmNlVmVydGljZXMpKTsKICAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6QkxFTkQpOwogICAgIG1fY29udGV4dDNELT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4
dDNEOjpUUklBTkdMRV9GQU4sIDAsIDQpOwotICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOwotICAgIG1fY29udGV4dDNELT5k
aXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIoKSk7CisgICAg
bV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhMb2Nh
dGlvbigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dy
YW0tPnRleENvb3JkTG9jYXRpb24oKSk7CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4g
Qml0bWFwVGV4dHVyZUdMOjphcHBseUZpbHRlcnMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBl
ciwgY29uc3QgQml0bWFwVGV4dHVyZSYgY29udGVudFRleHR1cmUsIGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIGZpbHRlcnMpCkBAIC03NDQsNyArODgyLDcgQEAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0
dXJlPiBCaXRtYXBUZXh0dXJlR0w6OmFwcGx5RmlsdGVycyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJl
TWEKICAgICAgICAgY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBmaWx0ZXIgPSBmaWx0ZXJzLmF0KGkp
OwogICAgICAgICBBU1NFUlQoZmlsdGVyKTsKIAotICAgICAgICBpbnQgbnVtUGFzc2VzID0gdGV4
dHVyZU1hcHBlckdMLT5kYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuZ2V0UGFzc2VzUmVxdWlyZWRGb3JGaWx0ZXIoKmZpbHRlcik7CisgICAgICAgIGludCBu
dW1QYXNzZXMgPSBnZXRQYXNzZXNSZXF1aXJlZEZvckZpbHRlcihmaWx0ZXItPmdldE9wZXJhdGlv
blR5cGUoKSk7CiAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtUGFzc2VzOyArK2opIHsK
ICAgICAgICAgICAgIHRleHR1cmVNYXBwZXJHTC0+YmluZFN1cmZhY2UodGFyZ2V0LmdldCgpKTsK
ICAgICAgICAgICAgIHRleHR1cmVNYXBwZXJHTC0+ZHJhd0ZpbHRlcmVkKChpIHx8IGopID8gKnNv
dXJjZSA6IGNvbnRlbnRUZXh0dXJlLCBjb250ZW50VGV4dHVyZSwgKmZpbHRlciwgaik7CkBAIC04
OTUsMTIgKzEwMzMsMTIgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb24KIAogICAgIGRhdGEoKS5p
bml0aWFsaXplU3RlbmNpbCgpOwogCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNpbXBs
ZSk7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0
YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclBy
b2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkRlZmF1bHQpOwogCi0gICAgbV9jb250
ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7Ci0gICAgbV9jb250ZXh0M0QtPmVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRl
eHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CisgICAgbV9jb250ZXh0M0Qt
PmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwogICAg
IGNvbnN0IEdDM0RmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9Owot
ICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleEF0dHJp
YigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHVu
aXRSZWN0KSk7CisgICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+
dmVydGV4TG9jYXRpb24oKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwg
R0MzRGludHB0cih1bml0UmVjdCkpOwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4
ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpCiAgICAgICAg
ICAgICAubXVsdGlwbHkobW9kZWxWaWV3TWF0cml4KQpAQCAtOTQ0LDcgKzEwODIsNyBAQCB2b2lk
IFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
b2RlbFZpZXdNYXRyaXgsIGNvbgogICAgIG1fY29udGV4dDNELT5kcmF3QXJyYXlzKEdyYXBoaWNz
Q29udGV4dDNEOjpUUklBTkdMRV9GQU4sIDAsIDQpOwogCiAgICAgLy8gQ2xlYXIgdGhlIHN0YXRl
LgotICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVy
dGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXko
cHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7CiAgICAgbV9jb250ZXh0M0QtPnN0ZW5jaWxNYXNr
KDApOwogCiAgICAgLy8gSW5jcmVhc2Ugc3RlbmNpbEluZGV4IGFuZCBhcHBseSBzdGVuY2lsIHRl
c3RpbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAppbmRleCA1
Y2E4Yzk2YmZlNDUyOTUyYjQzYjY0MjM4NTFiMWZjODM1ZDczOWZiLi42MmQyMzFmMDQzNWZlNjMw
NmY2MGJiYmQ2MjVhNDE5ZWUyOTA1NzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlci5jcHAKQEAgLTI4LDI0OSArMjgsNjkgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgi
CiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCiAKKyNkZWZpbmUgU1RSSU5HSUZZKC4uLikg
I19fVkFfQVJHU19fCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2RlZmluZSBTVFJJTkdJRlko
Li4uKSAjX19WQV9BUkdTX18KIAotc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291
cmNlT3BhY2l0eUFuZE1hc2sgPQotICAgIFNUUklOR0lGWSgKLSAgICAgICAgcHJlY2lzaW9uIG1l
ZGl1bXAgZmxvYXQ7Ci0gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc291cmNlOwotICAgICAg
ICB1bmlmb3JtIHNhbXBsZXIyRCBzX21hc2s7Ci0gICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1
X29wYWNpdHk7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOwot
ICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9tYXNrVGV4Q29vcmQ7Ci0gICAgICAgIHZvaWQg
bWFpbih2b2lkKQotICAgICAgICB7Ci0gICAgICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0
dXJlMkQoc19zb3VyY2UsIHZfc291cmNlVGV4Q29vcmQpOwotICAgICAgICAgICAgbG93cCB2ZWM0
IG1hc2tDb2xvciA9IHRleHR1cmUyRChzX21hc2ssIHZfbWFza1RleENvb3JkKTsKLSAgICAgICAg
ICAgIGxvd3AgZmxvYXQgZnJhZ21lbnRBbHBoYSA9IHVfb3BhY2l0eSAqIG1hc2tDb2xvci5hOwot
ICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBmcmFnbWVudEFscGhh
LCBjb2xvci5hICogZnJhZ21lbnRBbHBoYSk7Ci0gICAgICAgIH0KLSAgICApOwotCi1zdGF0aWMg
Y29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0T3BhY2l0eUFuZE1hc2sgPQotICAg
IFNUUklOR0lGWSgKLSAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgIHVu
aWZvcm0gc2FtcGxlcjJEUmVjdCBzX3NvdXJjZTsKLSAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRS
ZWN0IHNfbWFzazsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKLSAgICAg
ICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAgICAgIHZhcnlpbmcg
aGlnaHAgdmVjMiB2X21hc2tUZXhDb29yZDsKLSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRFJlY3Qoc19zb3Vy
Y2UsIHZfc291cmNlVGV4Q29vcmQpOwotICAgICAgICAgICAgbG93cCB2ZWM0IG1hc2tDb2xvciA9
IHRleHR1cmUyRFJlY3Qoc19tYXNrLCB2X21hc2tUZXhDb29yZCk7Ci0gICAgICAgICAgICBsb3dw
IGZsb2F0IGZyYWdtZW50QWxwaGEgPSB1X29wYWNpdHkgKiBtYXNrQ29sb3IuYTsKLSAgICAgICAg
ICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogZnJhZ21lbnRBbHBoYSwgY29sb3Iu
YSAqIGZyYWdtZW50QWxwaGEpOwotICAgICAgICB9Ci0gICAgKTsKLQotc3RhdGljIGNvbnN0IGNo
YXIqIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrID0KLSAgICBTVFJJTkdJRlkoCi0g
ICAgICAgIHVuaWZvcm0gbWF0NCB1X21hdHJpeDsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0
IHVfZmxpcDsKLSAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7Ci0gICAgICAgIHZhcnlp
bmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZl
YzIgdl9tYXNrVGV4Q29vcmQ7Ci0gICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICB7Ci0g
ICAgICAgICAgICB2X3NvdXJjZVRleENvb3JkID0gdmVjMihhX3ZlcnRleC54LCBtaXgoYV92ZXJ0
ZXgueSwgMS4gLSBhX3ZlcnRleC55LCB1X2ZsaXApKTsKLSAgICAgICAgICAgIHZfbWFza1RleENv
b3JkID0gdmVjMihhX3ZlcnRleCk7Ci0gICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4
ICogYV92ZXJ0ZXg7Ci0gICAgICAgIH0KLSAgICApOwotCi1zdGF0aWMgY29uc3QgY2hhciogZnJh
Z21lbnRTaGFkZXJTb3VyY2VTaW1wbGUgPQotICAgIFNUUklOR0lGWSgKLSAgICAgICAgcHJlY2lz
aW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc291cmNlOwot
ICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OwotICAgICAgICB2YXJ5aW5nIGhp
Z2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKLSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRChzX3NvdXJjZSwg
dl9zb3VyY2VUZXhDb29yZCk7Ci0gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9y
LnJnYiAqIHVfb3BhY2l0eSwgY29sb3IuYSAqIHVfb3BhY2l0eSk7Ci0gICAgICAgIH0KLSAgICAp
OwotCi1zdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VBbnRpYWxpYXNpbmdO
b01hc2sgPQotICAgIFNUUklOR0lGWSgKLSAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7
Ci0gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc291cmNlOwotICAgICAgICB2YXJ5aW5nIGhp
Z2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVf
b3BhY2l0eTsKLSAgICAgICAgdW5pZm9ybSB2ZWMzIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVl
blNwYWNlWzhdOwotICAgICAgICB2b2lkIG1haW4oKQotICAgICAgICB7Ci0gICAgICAgICAgICB2
ZWM0IHNhbXBsZWRDb2xvciA9IHRleHR1cmUyRChzX3NvdXJjZSwgY2xhbXAodl9zb3VyY2VUZXhD
b29yZCwgMC4wLCAxLjApKTsKLSAgICAgICAgICAgIHZlYzMgcG9zID0gdmVjMyhnbF9GcmFnQ29v
cmQueHksIDEpOwotCi0gICAgICAgICAgICAvLyBUaGUgZGF0YSBwYXNzZWQgaW4gdV9leHBhbmRl
ZFF1YWRFZGdlc0luU2NyZWVuU3BhY2UgaXMgbWVyZWx5IHRoZQotICAgICAgICAgICAgLy8gcHJl
LXNjYWxlZCBjb2VmZmVjaWVudHMgb2YgdGhlIGxpbmUgZXF1YXRpb25zIGRlc2NyaWJpbmcgdGhl
IGZvdXIgZWRnZXMKLSAgICAgICAgICAgIC8vIG9mIHRoZSBleHBhbmRlZCBxdWFkIGluIHNjcmVl
biBzcGFjZSBhbmQgdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGJveAotICAgICAgICAgICAgLy8g
b2YgdGhlIGV4cGFuZGVkIHF1YWQuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gV2Ug
YXJlIGRvaW5nIGEgc2ltcGxlIGRpc3RhbmNlIGNhbGN1bGF0aW9uIGhlcmUgYWNjb3JkaW5nIHRv
IHRoZSBmb3JtdWxhOgotICAgICAgICAgICAgLy8gKEEqcC54ICsgQipwLnkgKyBDKSAvIHNxcnQo
QV4yICsgQl4yKSA9IGRpc3RhbmNlIGZyb20gbGluZSB0byBwCi0gICAgICAgICAgICAvLyBOb3Rl
IHRoYXQgQSwgQiBhbmQgQyBoYXZlIGFscmVhZHkgYmVlbiBzY2FsZWQgYnkgMSAvIHNxcnQoQV4y
ICsgQl4yKS4KLSAgICAgICAgICAgIGZsb2F0IGEwID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFk
RWRnZXNJblNjcmVlblNwYWNlWzBdLCBwb3MpLCAwLjAsIDEuMCk7Ci0gICAgICAgICAgICBmbG9h
dCBhMSA9IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVsxXSwgcG9z
KSwgMC4wLCAxLjApOwotICAgICAgICAgICAgZmxvYXQgYTIgPSBjbGFtcChkb3QodV9leHBhbmRl
ZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbMl0sIHBvcyksIDAuMCwgMS4wKTsKLSAgICAgICAgICAg
IGZsb2F0IGEzID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzNd
LCBwb3MpLCAwLjAsIDEuMCk7Ci0gICAgICAgICAgICBmbG9hdCBhNCA9IGNsYW1wKGRvdCh1X2V4
cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs0XSwgcG9zKSwgMC4wLCAxLjApOwotICAgICAg
ICAgICAgZmxvYXQgYTUgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3Bh
Y2VbNV0sIHBvcyksIDAuMCwgMS4wKTsKLSAgICAgICAgICAgIGZsb2F0IGE2ID0gY2xhbXAoZG90
KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzZdLCBwb3MpLCAwLjAsIDEuMCk7Ci0g
ICAgICAgICAgICBmbG9hdCBhNyA9IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3Jl
ZW5TcGFjZVs3XSwgcG9zKSwgMC4wLCAxLjApOwotCi0gICAgICAgICAgICAvLyBOb3cgd2Ugd2Fu
dCB0byByZWR1Y2UgdGhlIGFscGhhIHZhbHVlIG9mIHRoZSBmcmFnbWVudCBpZiBpdCBpcyBjbG9z
ZSB0byB0aGUKLSAgICAgICAgICAgIC8vIGVkZ2VzIG9mIHRoZSBleHBhbmRlZCBxdWFkIChvciBy
ZWN0YW5ndWxhciBib3VuZGluZyBib3ggLS0gd2hpY2ggc2VlbXMgdG8gYmUKLSAgICAgICAgICAg
IC8vIGltcG9ydGFudCBmb3IgYmFja2ZhY2luZyBxdWFkcykuIE5vdGUgdGhhdCB3ZSBhcmUgY29t
YmluaW5nIHRoZSBjb250cmlidXRpb24KLSAgICAgICAgICAgIC8vIGZyb20gdGhlICh0b3AgfHwg
Ym90dG9tKSBhbmQgKGxlZnQgfHwgcmlnaHQpIGVkZ2UgYnkgc2ltcGx5IG11bHRpcGx5aW5nLiBU
aGlzIGZvbGxvd3MKLSAgICAgICAgICAgIC8vIHRoZSBhcHByb2FjaCBkZXNjcmliZWQgYXQ6IGh0
dHA6Ly9odHRwLmRldmVsb3Blci5udmlkaWEuY29tL0dQVUdlbXMyL2dwdWdlbXMyX2NoYXB0ZXIy
Mi5odG1sLAotICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdpdGhvdXQgdXNpbmcgR2F1c3Np
YW4gd2VpZ2h0cy4KLSAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHNhbXBsZWRDb2xvciAqIHVf
b3BhY2l0eSAqIG1pbihtaW4oYTAsIGEyKSAqIG1pbihhMSwgYTMpLCBtaW4oYTQsIGE2KSAqIG1p
bihhNSwgYTcpKTsKLSAgICAgICAgfQotICAgICk7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBmcmFn
bWVudFNoYWRlclNvdXJjZVJlY3RTaW1wbGUgPQotICAgIFNUUklOR0lGWSgKLSAgICAgICAgcHJl
Y2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX3Nv
dXJjZTsKLSAgICAgICAgdW5pZm9ybSBsb3dwIHZlYzIgdV90ZXh0dXJlU2l6ZTsKLSAgICAgICAg
dW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKLSAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMy
IHZfc291cmNlVGV4Q29vcmQ7Ci0gICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkRSZWN0KHNfc291cmNlLCB1X3Rl
eHR1cmVTaXplICogdl9zb3VyY2VUZXhDb29yZCk7Ci0gICAgICAgICAgICBnbF9GcmFnQ29sb3Ig
PSB2ZWM0KGNvbG9yLnJnYiAqIHVfb3BhY2l0eSwgY29sb3IuYSAqIHVfb3BhY2l0eSk7Ci0gICAg
ICAgIH0KLSAgICApOwotCi1zdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlU2lt
cGxlID0KLSAgICBTVFJJTkdJRlkoCi0gICAgICAgIHVuaWZvcm0gbWF0NCB1X21hdHJpeDsKLSAg
ICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfZmxpcDsKLSAgICAgICAgYXR0cmlidXRlIHZlYzQg
YV92ZXJ0ZXg7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOwot
ICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgewotICAgICAgICAgICAgdl9zb3VyY2VU
ZXhDb29yZCA9IHZlYzIoYV92ZXJ0ZXgueCwgbWl4KGFfdmVydGV4LnksIDEuIC0gYV92ZXJ0ZXgu
eSwgdV9mbGlwKSk7Ci0gICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogYV92ZXJ0
ZXg7Ci0gICAgICAgIH0KLSAgICApOwotCi1zdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVy
U291cmNlU29saWRDb2xvciA9Ci0gICAgU1RSSU5HSUZZKAotICAgICAgICB1bmlmb3JtIG1hdDQg
dV9tYXRyaXg7Ci0gICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwotICAgICAgICB2b2lk
IG1haW4odm9pZCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X21hdHJp
eCAqIGFfdmVydGV4OwotICAgICAgICB9Ci0gICAgKTsKLQotCi1zdGF0aWMgY29uc3QgY2hhciog
ZnJhZ21lbnRTaGFkZXJTb3VyY2VTb2xpZENvbG9yID0KLSAgICBTVFJJTkdJRlkoCi0gICAgICAg
IHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwotICAgICAgICB1bmlmb3JtIHZlYzQgdV9jb2xvcjsK
LSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsX0ZyYWdD
b2xvciA9IHVfY29sb3I7Ci0gICAgICAgIH0KLSAgICApOwotCi1QYXNzUmVmUHRyPFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcj4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OnNvbGlkQ29sb3JQcm9ncmFtKCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb21wb3NpdGluZ0xvZ0Vu
YWJsZWQoKQogewotICAgIHJldHVybiBzdGF0aWNfcG9pbnRlcl9jYXN0PFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU29saWRDb2xvcj4oZ2V0U2hhZGVyUHJvZ3JhbShTb2xpZENvbG9yKSk7Cisj
aWYgIUxPR19ESVNBQkxFRAorICAgIHJldHVybiBMb2dDb21wb3NpdGluZy5zdGF0ZSA9PSBXVEZM
b2dDaGFubmVsT247CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCi1QYXNz
UmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrPiBUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6YW50aWFsaWFzaW5nTm9NYXNrUHJvZ3JhbSgpCitUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oUGFzc1Jl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwgY29uc3QgU3RyaW5nJiB2ZXJ0ZXgsIGNv
bnN0IFN0cmluZyYgZnJhZ21lbnQpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKIHsKLSAgICBy
ZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlh
bGlhc2luZ05vTWFzaz4oZ2V0U2hhZGVyUHJvZ3JhbShBbnRpYWxpYXNpbmdOb01hc2spKTsKKyAg
ICBtX3ZlcnRleFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4
dDNEOjpWRVJURVhfU0hBREVSKTsKKyAgICBtX2ZyYWdtZW50U2hhZGVyID0gbV9jb250ZXh0LT5j
cmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUik7CisgICAgbV9j
b250ZXh0LT5zaGFkZXJTb3VyY2UobV92ZXJ0ZXhTaGFkZXIsIHZlcnRleCk7CisgICAgbV9jb250
ZXh0LT5zaGFkZXJTb3VyY2UobV9mcmFnbWVudFNoYWRlciwgZnJhZ21lbnQpOworICAgIG1faWQg
PSBtX2NvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsKKyAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFk
ZXIobV92ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihtX2ZyYWdt
ZW50U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihtX2lkLCBtX3ZlcnRleFNo
YWRlcik7CisgICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIobV9pZCwgbV9mcmFnbWVudFNoYWRl
cik7CisgICAgbV9jb250ZXh0LT5saW5rUHJvZ3JhbShtX2lkKTsKKworICAgIGlmICghY29tcG9z
aXRpbmdMb2dFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NvbnRleHQt
PmdldEVycm9yKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQorICAgICAgICByZXR1
cm47CisKKyAgICBTdHJpbmcgbG9nID0gbV9jb250ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKG1fdmVy
dGV4U2hhZGVyKTsKKyAgICBMT0coQ29tcG9zaXRpbmcsICJWZXJ0ZXggc2hhZGVyIGxvZzogJXNc
biIsIGxvZy51dGY4KCkuZGF0YSgpKTsKKyAgICBsb2cgPSBtX2NvbnRleHQtPmdldFNoYWRlcklu
Zm9Mb2cobV9mcmFnbWVudFNoYWRlcik7CisgICAgTE9HKENvbXBvc2l0aW5nLCAiRnJhZ21lbnQg
c2hhZGVyIGxvZzogJXNcbiIsIGxvZy51dGY4KCkuZGF0YSgpKTsKKyAgICBsb2cgPSBtX2NvbnRl
eHQtPmdldFByb2dyYW1JbmZvTG9nKG1faWQpOworICAgIExPRyhDb21wb3NpdGluZywgIlByb2dy
YW0gbG9nOiAlc1xuIiwgbG9nLnV0ZjgoKS5kYXRhKCkpOwogfQogCi1QYXNzUmVmUHRyPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hh
ZGVyUHJvZ3JhbShTaGFkZXJUeXBlIHNoYWRlclR5cGUpCitHQzNEdWludCBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6Z2V0TG9jYXRpb24oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBWYXJp
YWJsZVR5cGUgdHlwZSkKIHsKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+
IHByb2dyYW07Ci0gICAgaWYgKHNoYWRlclR5cGUgPT0gSW52YWxpZCkKLSAgICAgICAgcmV0dXJu
IHByb2dyYW07Ci0KLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwLmZpbmQoc2hhZGVyVHlwZSk7Ci0g
ICAgaWYgKGl0ICE9IG1fdGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAuZW5kKCkpCisgICAg
SGFzaE1hcDxBdG9taWNTdHJpbmcsIEdDM0R1aW50Pjo6aXRlcmF0b3IgaXQgPSBtX3ZhcmlhYmxl
cy5maW5kKG5hbWUpOworICAgIGlmIChpdCAhPSBtX3ZhcmlhYmxlcy5lbmQoKSkKICAgICAgICAg
cmV0dXJuIGl0LT52YWx1ZTsKIAotICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkgewotICAgIGNhc2Ug
U2ltcGxlOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1w
bGU6OmNyZWF0ZShtX2NvbnRleHQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJlY3RTaW1w
bGU6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1w
bGU6OmNyZWF0ZShtX2NvbnRleHQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFudGlhbGlh
c2luZ05vTWFzazoKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
QW50aWFsaWFzaW5nTm9NYXNrOjpjcmVhdGUobV9jb250ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBPcGFjaXR5QW5kTWFzazoKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OmNyZWF0ZShtX2NvbnRleHQpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFJlY3RPcGFjaXR5QW5kTWFzazoKLSAgICAgICAgcHJvZ3JhbSA9IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpjcmVhdGUobV9jb250
ZXh0KTsKKyAgICBHQzNEdWludCBsb2NhdGlvbjsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBj
YXNlIFVuaWZvcm1WYXJpYWJsZToKKyAgICAgICAgbG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVu
aWZvcm1Mb2NhdGlvbihtX2lkLCBuYW1lKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTb2xp
ZENvbG9yOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xp
ZENvbG9yOjpjcmVhdGUobV9jb250ZXh0KTsKKyAgICBjYXNlIEF0dHJpYlZhcmlhYmxlOgorICAg
ICAgICBsb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24obV9pZCwgbmFtZSk7
CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW52YWxpZDoKKyAgICBkZWZhdWx0OgogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIG1fdGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAuYWRkKHNoYWRlclR5cGUsIHByb2dyYW0pOwotICAg
IHJldHVybiBwcm9ncmFtOwotfQotCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IGNo
YXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2Up
Ci0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1faWQoMCkKLSAgICAsIG1fdmVydGV4
QXR0cmliKDApCi0gICAgLCBtX3ZlcnRleFNoYWRlcigwKQotICAgICwgbV9mcmFnbWVudFNoYWRl
cigwKQotICAgICwgbV9tYXRyaXhMb2NhdGlvbigtMSkKLSAgICAsIG1fZmxpcExvY2F0aW9uKC0x
KQotICAgICwgbV90ZXh0dXJlU2l6ZUxvY2F0aW9uKC0xKQotICAgICwgbV9zb3VyY2VUZXh0dXJl
TG9jYXRpb24oLTEpCi0gICAgLCBtX29wYWNpdHlMb2NhdGlvbigtMSkKLSAgICAsIG1fbWFza1Rl
eHR1cmVMb2NhdGlvbigtMSkKLSAgICAsIG1fdmVydGV4U2hhZGVyU291cmNlKHZlcnRleFNoYWRl
clNvdXJjZSkKLSAgICAsIG1fZnJhZ21lbnRTaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXJTb3Vy
Y2UpCi17Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmluaXRpYWxpemVQ
cm9ncmFtKCkKLXsKLSAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VQcm9ncmFtID0g
dmVydGV4U2hhZGVyU291cmNlKCk7Ci0gICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3Vy
Y2VQcm9ncmFtID0gZnJhZ21lbnRTaGFkZXJTb3VyY2UoKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0
IHZlcnRleFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNE
OjpWRVJURVhfU0hBREVSKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGZyYWdtZW50U2hhZGVyID0g
bV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURF
Uik7Ci0gICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCB2ZXJ0ZXhTaGFk
ZXJTb3VyY2VQcm9ncmFtKTsKLSAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZShmcmFnbWVudFNo
YWRlciwgZnJhZ21lbnRTaGFkZXJTb3VyY2VQcm9ncmFtKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW1JRCA9IG1fY29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOwotICAgIG1fY29udGV4dC0+
Y29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRl
cihmcmFnbWVudFNoYWRlcik7Ci0KLSAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihwcm9ncmFt
SUQsIHZlcnRleFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIocHJvZ3JhbUlE
LCBmcmFnbWVudFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5saW5rUHJvZ3JhbShwcm9ncmFtSUQp
OwotCi0gICAgbV92ZXJ0ZXhBdHRyaWIgPSBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKHBy
b2dyYW1JRCwgImFfdmVydGV4Iik7Ci0KLSAgICBtX2lkID0gcHJvZ3JhbUlEOwotICAgIG1fdmVy
dGV4U2hhZGVyID0gdmVydGV4U2hhZGVyOwotICAgIG1fZnJhZ21lbnRTaGFkZXIgPSBmcmFnbWVu
dFNoYWRlcjsKLX0KIAotdm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Z2V0VW5pZm9y
bUxvY2F0aW9uKEdDM0RpbnQgJnZhcmlhYmxlLCBjb25zdCBjaGFyKiBuYW1lKQotewotICAgIHZh
cmlhYmxlID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9pZCwgbmFtZSk7Ci0gICAg
QVNTRVJUKHZhcmlhYmxlID49IDApOworICAgIG1fdmFyaWFibGVzLmFkZChuYW1lLCBsb2NhdGlv
bik7CisgICAgcmV0dXJuIGxvY2F0aW9uOwogfQogCiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bTo6flRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCkKQEAgLTI4NiwxMjAgKzEwNiwxODkgQEAg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06On5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgp
CiAgICAgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKHByb2dyYW1JRCk7CiB9CiAKLVRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBs
ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJT
b3VyY2VTaW1wbGUpCi17Ci0gICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKLSAgICBnZXRVbmlmb3Jt
TG9jYXRpb24obV9mbGlwTG9jYXRpb24sICJ1X2ZsaXAiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRp
b24obV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9u
KG1fc291cmNlVGV4dHVyZUxvY2F0aW9uLCAic19zb3VyY2UiKTsKLSAgICBnZXRVbmlmb3JtTG9j
YXRpb24obV9vcGFjaXR5TG9jYXRpb24sICJ1X29wYWNpdHkiKTsKLX0KK3N0cnVjdCBTaGFkZXJT
cGVjIHsKKyAgICBTdHJpbmcgdmVydGV4U2hhZGVyOworICAgIFN0cmluZyBmcmFnbWVudFNoYWRl
cjsKKyAgICBTaGFkZXJTcGVjKGNvbnN0IGNoYXIqIHZlcnRleCA9IDAsIGNvbnN0IGNoYXIqIGZy
YWdtZW50ID0gMCkKKyAgICAgICAgOiB2ZXJ0ZXhTaGFkZXIodmVydGV4ID8gU3RyaW5nKEFTQ0lJ
TGl0ZXJhbCh2ZXJ0ZXgpKSA6IFN0cmluZygpKQorICAgICAgICAsIGZyYWdtZW50U2hhZGVyKGZy
YWdtZW50ID8gU3RyaW5nKEFTQ0lJTGl0ZXJhbChmcmFnbWVudCkpIDogU3RyaW5nKCkpCisgICAg
eworICAgIH0KK307CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0KQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hh
ZGVyU291cmNlU29saWRDb2xvciwgZnJhZ21lbnRTaGFkZXJTb3VyY2VTb2xpZENvbG9yKQorc3Rh
dGljIHZvaWQgZ2V0U2hhZGVyU3BlYyhUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2hhZGVy
S2V5IGtleSwgU3RyaW5nJiB2ZXJ0ZXhTb3VyY2UsIFN0cmluZyYgZnJhZ21lbnRTb3VyY2UpCiB7
Ci0gICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRy
aXhMb2NhdGlvbiwgInVfbWF0cml4Iik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fY29sb3JM
b2NhdGlvbiwgInVfY29sb3IiKTsKLX0KKyAgICBzdGF0aWMgVmVjdG9yPFNoYWRlclNwZWM+IHNw
ZWNzID0gVmVjdG9yPFNoYWRlclNwZWM+KCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdt
ZW50T3BhY2l0eUFuZE1hc2sgPQorICAgICAgICBTVFJJTkdJRlkoCisgICAgICAgICAgICBwcmVj
aXNpb24gbWVkaXVtcCBmbG9hdDsKKyAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc2Ft
cGxlcjsKKyAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfbWFzazsKKyAgICAgICAgICAg
IHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7CisgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hw
IHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKKyAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2
X21hc2tUZXhDb29yZDsKKyAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRChzX3NhbXBsZXIs
IHZfc291cmNlVGV4Q29vcmQpOworICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBtYXNrQ29sb3Ig
PSB0ZXh0dXJlMkQoc19tYXNrLCB2X21hc2tUZXhDb29yZCk7CisgICAgICAgICAgICAgICAgbG93
cCBmbG9hdCBmcmFnbWVudEFscGhhID0gdV9vcGFjaXR5ICogbWFza0NvbG9yLmE7CisgICAgICAg
ICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBmcmFnbWVudEFscGhhLCBj
b2xvci5hICogZnJhZ21lbnRBbHBoYSk7CisgICAgICAgICAgICB9CisgICAgICAgICk7CiAKLVRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1SZWN0U2ltcGxlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIDogVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBm
cmFnbWVudFNoYWRlclNvdXJjZVJlY3RTaW1wbGUpCi17Ci0gICAgaW5pdGlhbGl6ZVByb2dyYW0o
KTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7
Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fZmxpcExvY2F0aW9uLCAidV9mbGlwIik7Ci0gICAg
Z2V0VW5pZm9ybUxvY2F0aW9uKG1fdGV4dHVyZVNpemVMb2NhdGlvbiwgInVfdGV4dHVyZVNpemUi
KTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9zb3VyY2VUZXh0dXJlTG9jYXRpb24sICJzX3Nv
dXJjZSIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNpdHlMb2NhdGlvbiwgInVfb3Bh
Y2l0eSIpOwotfQorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFJlY3RPcGFjaXR5QW5k
TWFzayA9CisgICAgICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1w
IGZsb2F0OworICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfc2FtcGxlcjsKKyAg
ICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX21hc2s7CisgICAgICAgICAgICB1bmlm
b3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OworICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMy
IHZfc291cmNlVGV4Q29vcmQ7CisgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9tYXNr
VGV4Q29vcmQ7CisgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkRSZWN0KHNfc2FtcGxlciwg
dl9zb3VyY2VUZXhDb29yZCk7CisgICAgICAgICAgICAgICAgbG93cCB2ZWM0IG1hc2tDb2xvciA9
IHRleHR1cmUyRFJlY3Qoc19tYXNrLCB2X21hc2tUZXhDb29yZCk7CisgICAgICAgICAgICAgICAg
bG93cCBmbG9hdCBmcmFnbWVudEFscGhhID0gdV9vcGFjaXR5ICogbWFza0NvbG9yLmE7CisgICAg
ICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBmcmFnbWVudEFscGhh
LCBjb2xvci5hICogZnJhZ21lbnRBbHBoYSk7CisgICAgICAgICAgICB9CisgICAgICAgICk7CiAK
LVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi0g
ICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3Vy
Y2VPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzaykKLXsK
LSAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJp
eExvY2F0aW9uLCAidV9tYXRyaXgiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9mbGlwTG9j
YXRpb24sICJ1X2ZsaXAiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9zb3VyY2VUZXh0dXJl
TG9jYXRpb24sICJzX3NvdXJjZSIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hc2tUZXh0
dXJlTG9jYXRpb24sICJzX21hc2siKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5
TG9jYXRpb24sICJ1X29wYWNpdHkiKTsKLX0KKyAgICBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4
T3BhY2l0eUFuZE1hc2sgPQorICAgICAgICBTVFJJTkdJRlkoCisgICAgICAgICAgICB1bmlmb3Jt
IG1hdDQgdV9tYXRyaXg7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9mbGlwOwor
ICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CisgICAgICAgICAgICB2YXJ5aW5n
IGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKKyAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAg
dmVjMiB2X21hc2tUZXhDb29yZDsKKyAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHZfc291cmNlVGV4Q29vcmQgPSB2ZWMyKGFfdmVydGV4
LngsIG1peChhX3ZlcnRleC55LCAxLiAtIGFfdmVydGV4LnksIHVfZmxpcCkpOworICAgICAgICAg
ICAgICAgIHZfbWFza1RleENvb3JkID0gdmVjMihhX3ZlcnRleCk7CisgICAgICAgICAgICAgICAg
Z2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIGFfdmVydGV4OworICAgICAgICAgICAgfQorICAgICAg
ICApOwogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQpCi0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2
ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0
T3BhY2l0eUFuZE1hc2spCi17Ci0gICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKLSAgICBnZXRVbmlm
b3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7Ci0gICAgZ2V0VW5pZm9y
bUxvY2F0aW9uKG1fZmxpcExvY2F0aW9uLCAidV9mbGlwIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0
aW9uKG1fc291cmNlVGV4dHVyZUxvY2F0aW9uLCAic19zb3VyY2UiKTsKLSAgICBnZXRVbmlmb3Jt
TG9jYXRpb24obV9tYXNrVGV4dHVyZUxvY2F0aW9uLCAic19tYXNrIik7Ci0gICAgZ2V0VW5pZm9y
bUxvY2F0aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5Iik7Ci19CisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIGZyYWdtZW50U2ltcGxlID0KKyAgICAgICAgU1RSSU5HSUZZKAorICAgICAg
ICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisgICAgICAgICAgICB1bmlmb3JtIHNhbXBs
ZXIyRCBzX3NhbXBsZXI7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5
OworICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CisgICAg
ICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBs
b3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQoc19zYW1wbGVyLCB2X3NvdXJjZVRleENvb3JkKTsK
KyAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIHVfb3BhY2l0
eSwgY29sb3IuYSAqIHVfb3BhY2l0eSk7CisgICAgICAgICAgICB9CisgICAgICAgICk7CiAKLVRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrOjpUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayhHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRl
clNvdXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VBbnRpYWxpYXNpbmdOb01hc2spCi17
Ci0gICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRy
aXhMb2NhdGlvbiwgInVfbWF0cml4Iik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNl
VGV4dHVyZUxvY2F0aW9uLCAic19zb3VyY2UiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9v
cGFjaXR5TG9jYXRpb24sICJ1X29wYWNpdHkiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9l
eHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbiwgInVfZXhwYW5kZWRRdWFkRWRn
ZXNJblNjcmVlblNwYWNlIik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fZmxpcExvY2F0aW9u
LCAidV9mbGlwIik7Ci19CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50QW50aWFsaWFz
aW5nTm9NYXNrID0KKyAgICAgICAgU1RSSU5HSUZZKAorICAgICAgICAgICAgcHJlY2lzaW9uIG1l
ZGl1bXAgZmxvYXQ7CisgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBsZXI7Cisg
ICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKKyAgICAgICAg
ICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7CisgICAgICAgICAgICB1bmlmb3JtIHZl
YzMgdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbOF07CisgICAgICAgICAgICB2b2lk
IG1haW4oKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZlYzQgc2FtcGxlZENvbG9y
ID0gdGV4dHVyZTJEKHNfc2FtcGxlciwgY2xhbXAodl9zb3VyY2VUZXhDb29yZCwgMC4wLCAxLjAp
KTsKKyAgICAgICAgICAgICAgICB2ZWMzIHBvcyA9IHZlYzMoZ2xfRnJhZ0Nvb3JkLnh5LCAxKTsK
KworICAgICAgICAgICAgICAgIC8vIFRoZSBkYXRhIHBhc3NlZCBpbiB1X2V4cGFuZGVkUXVhZEVk
Z2VzSW5TY3JlZW5TcGFjZSBpcyBtZXJlbHkgdGhlCisgICAgICAgICAgICAgICAgLy8gcHJlLXNj
YWxlZCBjb2VmZmVjaWVudHMgb2YgdGhlIGxpbmUgZXF1YXRpb25zIGRlc2NyaWJpbmcgdGhlIGZv
dXIgZWRnZXMKKyAgICAgICAgICAgICAgICAvLyBvZiB0aGUgZXhwYW5kZWQgcXVhZCBpbiBzY3Jl
ZW4gc3BhY2UgYW5kIHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBib3gKKyAgICAgICAgICAgICAg
ICAvLyBvZiB0aGUgZXhwYW5kZWQgcXVhZC4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAg
ICAgICAgIC8vIFdlIGFyZSBkb2luZyBhIHNpbXBsZSBkaXN0YW5jZSBjYWxjdWxhdGlvbiBoZXJl
IGFjY29yZGluZyB0byB0aGUgZm9ybXVsYToKKyAgICAgICAgICAgICAgICAvLyAoQSpwLnggKyBC
KnAueSArIEMpIC8gc3FydChBXjIgKyBCXjIpID0gZGlzdGFuY2UgZnJvbSBsaW5lIHRvIHAKKyAg
ICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgQSwgQiBhbmQgQyBoYXZlIGFscmVhZHkgYmVlbiBz
Y2FsZWQgYnkgMSAvIHNxcnQoQV4yICsgQl4yKS4KKyAgICAgICAgICAgICAgICBmbG9hdCBhMCA9
IGNsYW1wKGRvdCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVswXSwgcG9zKSwgMC4w
LCAxLjApOworICAgICAgICAgICAgICAgIGZsb2F0IGExID0gY2xhbXAoZG90KHVfZXhwYW5kZWRR
dWFkRWRnZXNJblNjcmVlblNwYWNlWzFdLCBwb3MpLCAwLjAsIDEuMCk7CisgICAgICAgICAgICAg
ICAgZmxvYXQgYTIgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2Vb
Ml0sIHBvcyksIDAuMCwgMS4wKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBhMyA9IGNsYW1wKGRv
dCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVszXSwgcG9zKSwgMC4wLCAxLjApOwor
ICAgICAgICAgICAgICAgIGZsb2F0IGE0ID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJ
blNjcmVlblNwYWNlWzRdLCBwb3MpLCAwLjAsIDEuMCk7CisgICAgICAgICAgICAgICAgZmxvYXQg
YTUgPSBjbGFtcChkb3QodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNV0sIHBvcyks
IDAuMCwgMS4wKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBhNiA9IGNsYW1wKGRvdCh1X2V4cGFu
ZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs2XSwgcG9zKSwgMC4wLCAxLjApOworICAgICAgICAg
ICAgICAgIGZsb2F0IGE3ID0gY2xhbXAoZG90KHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNw
YWNlWzddLCBwb3MpLCAwLjAsIDEuMCk7CisKKyAgICAgICAgICAgICAgICAvLyBOb3cgd2Ugd2Fu
dCB0byByZWR1Y2UgdGhlIGFscGhhIHZhbHVlIG9mIHRoZSBmcmFnbWVudCBpZiBpdCBpcyBjbG9z
ZSB0byB0aGUKKyAgICAgICAgICAgICAgICAvLyBlZGdlcyBvZiB0aGUgZXhwYW5kZWQgcXVhZCAo
b3IgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYm94IC0tIHdoaWNoIHNlZW1zIHRvIGJlCisgICAgICAg
ICAgICAgICAgLy8gaW1wb3J0YW50IGZvciBiYWNrZmFjaW5nIHF1YWRzKS4gTm90ZSB0aGF0IHdl
IGFyZSBjb21iaW5pbmcgdGhlIGNvbnRyaWJ1dGlvbgorICAgICAgICAgICAgICAgIC8vIGZyb20g
dGhlICh0b3AgfHwgYm90dG9tKSBhbmQgKGxlZnQgfHwgcmlnaHQpIGVkZ2UgYnkgc2ltcGx5IG11
bHRpcGx5aW5nLiBUaGlzIGZvbGxvd3MKKyAgICAgICAgICAgICAgICAvLyB0aGUgYXBwcm9hY2gg
ZGVzY3JpYmVkIGF0OiBodHRwOi8vaHR0cC5kZXZlbG9wZXIubnZpZGlhLmNvbS9HUFVHZW1zMi9n
cHVnZW1zMl9jaGFwdGVyMjIuaHRtbCwKKyAgICAgICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ug
d2l0aG91dCB1c2luZyBHYXVzc2lhbiB3ZWlnaHRzLgorICAgICAgICAgICAgICAgIGdsX0ZyYWdD
b2xvciA9IHNhbXBsZWRDb2xvciAqIHVfb3BhY2l0eSAqIG1pbihtaW4oYTAsIGEyKSAqIG1pbihh
MSwgYTMpLCBtaW4oYTQsIGE2KSAqIG1pbihhNSwgYTcpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgKTsKIAotVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIDogbV9jb250ZXh0KGNvbnRl
eHQpCi17Ci19CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50UmVjdFNpbXBsZSA9Cisg
ICAgICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0Owor
ICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfc2FtcGxlcjsKKyAgICAgICAgICAg
IHVuaWZvcm0gbG93cCB2ZWMyIHNfc2FtcGxlclNpemU7CisgICAgICAgICAgICB1bmlmb3JtIGxv
d3AgZmxvYXQgdV9vcGFjaXR5OworICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291
cmNlVGV4Q29vcmQ7CisgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkRSZWN0KHNfc2FtcGxl
ciwgc19zYW1wbGVyU2l6ZSAqIHZfc291cmNlVGV4Q29vcmQpOworICAgICAgICAgICAgICAgIGds
X0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogdV9vcGFjaXR5LCBjb2xvci5hICogdV9vcGFj
aXR5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKIAotVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6On5UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpCi17Ci19CisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIHZlcnRleFNpbXBsZSA9CisgICAgICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAg
IHVuaWZvcm0gbWF0NCB1X21hdHJpeDsKKyAgICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1
X2ZsaXA7CisgICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKKyAgICAgICAgICAg
IHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOworICAgICAgICAgICAgdm9pZCBt
YWluKHZvaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdl9zb3VyY2VUZXhDb29y
ZCA9IHZlYzIoYV92ZXJ0ZXgueCwgbWl4KGFfdmVydGV4LnksIDEuIC0gYV92ZXJ0ZXgueSwgdV9m
bGlwKSk7CisgICAgICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIGFfdmVydGV4
OworICAgICAgICAgICAgfQorICAgICAgICApOwogCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQor
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTb2xpZENvbG9yID0KKyAgICAgICAgU1RSSU5H
SUZZKAorICAgICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OworICAgICAgICAgICAgYXR0
cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CisgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogYV92ZXJ0
ZXg7CisgICAgICAgICAgICB9CisgICAgICAgICk7CiAKLS8vIENyZWF0ZSBhIG5vcm1hbCBkaXN0
cmlidXRpb24gb2YgMjEgdmFsdWVzIGJldHdlZW4gLTIgYW5kIDIuCi0jZGVmaW5lIEdBVVNTSUFO
X0tFUk5FTF9IQUxGX1dJRFRIIDExCi0jZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9TVEVQIDAuMgog
Ci1TdGFuZGFyZEZpbHRlclByb2dyYW06On5TdGFuZGFyZEZpbHRlclByb2dyYW0oKQotewotICAg
IG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKG1faWQsIG1fdmVydGV4U2hhZGVyKTsKLSAgICBtX2Nv
bnRleHQtPmRlbGV0ZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5kZXRh
Y2hTaGFkZXIobV9pZCwgbV9mcmFnbWVudFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5kZWxldGVT
aGFkZXIobV9mcmFnbWVudFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKG1f
aWQpOwotfQorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNvbGlkQ29sb3IgPQorICAg
ICAgICBTVFJJTkdJRlkoCisgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKKyAg
ICAgICAgICAgIHVuaWZvcm0gdmVjNCB1X2NvbG9yOworICAgICAgICAgICAgdm9pZCBtYWluKHZv
aWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdV9jb2xv
cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKIAotU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpT
dGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEZpbHRlck9w
ZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNzKQotICAgIDogbV9jb250
ZXh0KGNvbnRleHQpCi0gICAgLCBtX2lkKDApCi17Ci0gICAgY29uc3QgY2hhciogdmVydGV4U2hh
ZGVyU291cmNlID0KLSAgICAgICAgICAgIFNUUklOR0lGWSgKLSAgICAgICAgICAgICAgICBhdHRy
aWJ1dGUgdmVjNCBhX3ZlcnRleDsKLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3Rl
eENvb3JkOwotICAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOwot
ICAgICAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgdl90ZXhDb29yZCA9IHZlYzIoYV90ZXhDb29yZCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGdsX1Bvc2l0aW9uID0gYV92ZXJ0ZXg7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4RmlsdGVyID0KKyAgICAg
ICAgU1RSSU5HSUZZKAorICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CisgICAg
ICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3RleENvb3JkOworICAgICAgICAgICAgdmFyeWluZyBo
aWdocCB2ZWMyIHZfdGV4Q29vcmQ7CisgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICB2X3RleENvb3JkID0gdmVjMihhX3RleENvb3JkKTsK
KyAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IGFfdmVydGV4OworICAgICAgICAgICAgfQor
ICAgICAgICApOwogCiAjZGVmaW5lIFNUQU5EQVJEX0ZJTFRFUiguLi4pIFwKICAgICAgICAgInBy
ZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuIlwKICAgICAgICAgInZhcnlpbmcgaGlnaHAgdmVjMiB2
X3RleENvb3JkO1xuIlwKICAgICAgICAgInVuaWZvcm0gaGlnaHAgZmxvYXQgdV9hbW91bnQ7XG4i
XAotICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlO1xuIlwKLSAgICAgICAgI19f
VkFfQVJHU19fIFwKLSAgICAgICAgInZvaWQgbWFpbih2b2lkKVxuIHsgZ2xfRnJhZ0NvbG9yID0g
c2hhZGUodGV4dHVyZTJEKHVfdGV4dHVyZSwgdl90ZXhDb29yZCkpOyB9IgorICAgICAgICAidW5p
Zm9ybSBzYW1wbGVyMkQgc19zYW1wbGVyO1xuIiNfX1ZBX0FSR1NfXyBcCisgICAgICAgICJ2b2lk
IG1haW4odm9pZClcbiB7IGdsX0ZyYWdDb2xvciA9IHNoYWRlKHRleHR1cmUyRChzX3NhbXBsZXIs
IHZfdGV4Q29vcmQpKTsgfSIKIAotICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNl
ID0gMDsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JB
WVNDQUxFOgotICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigK
KyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRHcmF5c2NhbGVGaWx0ZXIgPQorICAgICAg
ICBTVEFOREFSRF9GSUxURVIoCiAgICAgICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0
IGNvbG9yKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgYW1vdW50
ID0gMS4wIC0gdV9hbW91bnQ7CkBAIC00MDksOSArMjk4LDkgQEAgU3RhbmRhcmRGaWx0ZXJQcm9n
cmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEZp
bHRlck8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5hKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OlNFUElBOgotICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigK
KworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNlcGlhRmlsdGVyID0KKyAgICAgICAg
U1RBTkRBUkRfRklMVEVSKAogICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBj
b2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBsb3dwIGZsb2F0IGFtb3VudCA9
IDEuMCAtIHVfYW1vdW50OwpAQCAtNDIxLDkgKzMxMCw5IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3Jh
bTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBGaWx0
ZXJPCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IuYSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpT
QVRVUkFURToKLSAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVEFOREFSRF9GSUxURVIo
CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTYXR1cmF0ZUZpbHRlciA9CisgICAg
ICAgIFNUQU5EQVJEX0ZJTFRFUigKICAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZl
YzQgY29sb3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoKDAu
MjEzICsgMC43ODcgKiB1X2Ftb3VudCkgKiBjb2xvci5yICsgKDAuNzE1IC0gMC43MTUgKiB1X2Ft
b3VudCkgKiBjb2xvci5nICsgKDAuMDcyIC0gMC4wNzIgKiB1X2Ftb3VudCkgKiBjb2xvci5iLApA
QCAtNDMyLDkgKzMyMSw5IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQ
cm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBGaWx0ZXJPCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29sb3IuYSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgotICAgICAg
ICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKKworICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBmcmFnbWVudEh1ZVJvdGF0ZUZpbHRlciA9CisgICAgICAgIFNUQU5EQVJEX0ZJ
TFRFUigKICAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgaGlnaHAgZmxvYXQgcGkgPSAzLjE0MTU5MjY1MzU4
OTc5MzIzODQ2OwpAQCAtNDQ2LDU4ICszMzUsNjIgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpT
dGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEZpbHRlck8K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5hKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVS
VDoKLSAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVEFOREFSRF9GSUxURVIoCisKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRJbnZlcnRGaWx0ZXIgPQorICAgICAgICBTVEFO
REFSRF9GSUxURVIoCiAgICAgICAgICAgICBsb3dwIGZsb2F0IGludmVydChsb3dwIGZsb2F0IG4p
IHsgcmV0dXJuICgxLjAgLSBuKSAqIHVfYW1vdW50ICsgbiAqICgxLjAgLSB1X2Ftb3VudCk7IH0K
ICAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoaW52ZXJ0KGNvbG9yLnIpLCBpbnZlcnQo
Y29sb3IuZyksIGludmVydChjb2xvci5iKSwgY29sb3IuYSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRO
RVNTOgotICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKKwor
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudEJyaWdodG5lc3NGaWx0ZXIgPQorICAgICAg
ICBTVEFOREFSRF9GSUxURVIoCiAgICAgICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0
IGNvbG9yKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0KGNvbG9y
LnJnYiAqICgxLjAgKyB1X2Ftb3VudCksIGNvbG9yLmEpOwogICAgICAgICAgICAgfQogICAgICAg
ICApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6
Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAorCisgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50Q29udHJhc3RGaWx0ZXIgPQorICAgICAgICBTVEFO
REFSRF9GSUxURVIoCiAgICAgICAgICAgICBsb3dwIGZsb2F0IGNvbnRyYXN0KGxvd3AgZmxvYXQg
bikgeyByZXR1cm4gKG4gLSAwLjUpICogdV9hbW91bnQgKyAwLjU7IH0KICAgICAgICAgICAgIGxv
d3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHZlYzQoY29udHJhc3QoY29sb3IuciksIGNvbnRyYXN0KGNvbG9yLmcpLCBj
b250cmFzdChjb2xvci5iKSwgY29sb3IuYSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgotICAgICAg
ICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKKworICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBmcmFnbWVudE9wYWNpdHlGaWx0ZXIgPQorICAgICAgICBTVEFOREFSRF9GSUxU
RVIoCiAgICAgICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0KGNvbG9yLnIsIGNvbG9yLmcsIGNv
bG9yLmIsIGNvbG9yLmEgKiB1X2Ftb3VudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgotICAgICAgICBm
cmFnbWVudFNoYWRlclNvdXJjZSA9IFNUUklOR0lGWSgKKworI2RlZmluZSBCTFVSX0NPTlNUQU5U
UyAiI2RlZmluZSBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCAxMVxuI2RlZmluZSBHQVVTU0lB
Tl9LRVJORUxfU1RFUCAwLjJcbiIKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudEJs
dXJGaWx0ZXIgPQorICAgICAgICBCTFVSX0NPTlNUQU5UUworICAgICAgICBTVFJJTkdJRlkoCisg
ICAgICAgICAgICAvLyBDcmVhdGUgYSBub3JtYWwgZGlzdHJpYnV0aW9uIG9mIDIxIHZhbHVlcyBi
ZXR3ZWVuIC0yIGFuZCAyLgogICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAg
ICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKICAgICAgICAgICAgIHVu
aWZvcm0gbG93cCB2ZWMyIHVfYmx1clJhZGl1czsKLSAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxl
cjJEIHVfdGV4dHVyZTsKKyAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc2FtcGxlcjsK
ICAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9nYXVzc2lhbktlcm5lbFtHQVVTU0lBTl9LRVJO
RUxfSEFMRl9XSURUSF07CiAKICAgICAgICAgICAgIGxvd3AgdmVjNCBzYW1wbGVDb2xvcihmbG9h
dCByYWRpdXMpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdmVjMiBjb29yZCA9IHZf
dGV4Q29vcmQgKyByYWRpdXMgKiB1X2JsdXJSYWRpdXM7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRleHR1cmUyRCh1X3RleHR1cmUsIGNvb3JkKSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBjb29y
ZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRleHR1cmUyRChzX3NhbXBsZXIsIGNvb3JkKSAqIGZsb2F0KGNvb3JkLnggPiAw
LiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIHZlYzQgYmx1cigpCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgdmVjNCB0b3RhbCA9IHNhbXBsZUNvbG9yKDApICogdV9nYXVzc2lhbktlcm5l
bFswXTsKKyAgICAgICAgICAgICAgICB2ZWM0IHRvdGFsID0gc2FtcGxlQ29sb3IoMC4pICogdV9n
YXVzc2lhbktlcm5lbFswXTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IEdB
VVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgdG90
YWwgKz0gc2FtcGxlQ29sb3IoZmxvYXQoaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dh
dXNzaWFuS2VybmVsW2ldOwogICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVDb2xv
cihmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5l
bFtpXTsKQEAgLTUxMSwyODIgKzQwNCwxMzAgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFu
ZGFyZEZpbHRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEZpbHRlck8KICAg
ICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSBibHVyKCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NI
QURPVzoKLSAgICAgICAgc3dpdGNoIChwYXNzKSB7Ci0gICAgICAgIGNhc2UgMDogewotICAgICAg
ICAgICAgLy8gRmlyc3QgcGFzczogaG9yaXpvbnRhbCBhbHBoYSBibHVyLgotICAgICAgICAgICAg
ZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVFJJTkdJRlkoCi0gICAgICAgICAgICAgICAgcHJlY2lz
aW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZf
dGV4Q29vcmQ7Ci0gICAgICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfc2hhZG93Qmx1
clJhZGl1czsKLSAgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVjMiB1X3NoYWRvd09mZnNl
dDsKLSAgICAgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7Ci0gICAgICAg
ICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFOX0tFUk5FTF9I
QUxGX1dJRFRIXTsKLQotICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgc2FtcGxlQWxwaGEoZmxv
YXQgcmFkaXVzKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmVjMiBj
b29yZCA9IHZfdGV4Q29vcmQgLSB1X3NoYWRvd09mZnNldCArIHZlYzIocmFkaXVzICogdV9zaGFk
b3dCbHVyUmFkaXVzLCAwLik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlMkQo
dV90ZXh0dXJlLCBjb29yZCkuYSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBjb29yZC55ID4gMC4g
JiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7Ci0gICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgbG93cCBmbG9hdCBzaGFkb3dCbHVySG9yaXpvbnRhbCgpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBmbG9hdCB0b3RhbCA9IHNhbXBsZUFscGhh
KDApICogdV9nYXVzc2lhbktlcm5lbFswXTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgaSsrKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVBbHBoYShmbG9hdChpKSAqIEdBVVNTSUFOX0tF
Uk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB0b3RhbCArPSBzYW1wbGVBbHBoYShmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5fS0VSTkVMX1NU
RVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbDsKLSAgICAgICAgICAgICAgICB9CisgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZG93RmlsdGVyMSA9CisgICAgICAgIEJMVVJfQ09O
U1RBTlRTCisgICAgICAgIFNUUklOR0lGWSgKKyAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1w
IGZsb2F0OworICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7CisgICAg
ICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9ibHVyUmFkaXVzOworICAgICAgICAgICAgdW5p
Zm9ybSBsb3dwIHZlYzIgdV9zaGFkb3dPZmZzZXQ7CisgICAgICAgICAgICB1bmlmb3JtIHNhbXBs
ZXIyRCBzX3NhbXBsZXI7CisgICAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZ2F1c3NpYW5LZXJu
ZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdOwogCi0gICAgICAgICAgICAgICAgdm9pZCBt
YWluKHZvaWQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBnbF9GcmFn
Q29sb3IgPSB2ZWM0KDEuLCAxLiwgMS4sIDEuKSAqIHNoYWRvd0JsdXJIb3Jpem9udGFsKCk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgbG93cCBmbG9hdCBzYW1wbGVBbHBoYShmbG9hdCByYWRpdXMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgdmVjMiBjb29yZCA9IHZfdGV4Q29vcmQgLSB1X3NoYWRvd09m
ZnNldCArIHZlYzIocmFkaXVzICogdV9ibHVyUmFkaXVzLCAwLik7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRleHR1cmUyRChzX3NhbXBsZXIsIGNvb3JkKS5hICogZmxvYXQoY29vcmQueCA+IDAu
ICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgY2FzZSAxOiB7Ci0gICAgICAgICAgICAvLyBTZWNvbmQgcGFzczog
dmVydGljYWwgYWxwaGEgYmx1ciBhbmQgY29tcG9zaXRlIHdpdGggb3JpZ2luLgotICAgICAgICAg
ICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVFJJTkdJRlkoCi0gICAgICAgICAgICAgICAgcHJl
Y2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMy
IHZfdGV4Q29vcmQ7Ci0gICAgICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfc2hhZG93
Qmx1clJhZGl1czsKLSAgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVjNCB1X3NoYWRvd0Nv
bG9yOwotICAgICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTsKLSAgICAg
ICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1X2NvbnRlbnRUZXh0dXJlOwotICAgICAgICAg
ICAgICAgIHVuaWZvcm0gZmxvYXQgdV9nYXVzc2lhbktlcm5lbFtHQVVTU0lBTl9LRVJORUxfSEFM
Rl9XSURUSF07Ci0KLSAgICAgICAgICAgICAgICBsb3dwIGZsb2F0IHNhbXBsZUFscGhhKGZsb2F0
IHIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2ZWMyIGNvb3JkID0g
dl90ZXhDb29yZCArIHZlYzIoMC4sIHIgKiB1X3NoYWRvd0JsdXJSYWRpdXMpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHVfdGV4dHVyZSwgY29vcmQpLmEgKiBmbG9hdChj
b29yZC54ID4gMC4gJiYgY29vcmQueSA+IDAuICYmIGNvb3JkLnggPCAxLiAmJiBjb29yZC55IDwg
MS4pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgc2hh
ZG93Qmx1clZlcnRpY2FsKCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IGZsb2F0IHRvdGFsID0gc2FtcGxlQWxwaGEoMCkgKiB1X2dhdXNzaWFuS2VybmVsWzBdOwotICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxG
X1dJRFRIOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFs
cGhhKGZsb2F0KGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtp
XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhhKGZsb2F0KC0x
ICogaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwotICAg
ICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBzb3VyY2VPdmVy
KGxvd3AgdmVjNCBzb3VyY2UsIGxvd3AgdmVjNCBkZXN0aW5hdGlvbikKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIENvbXBvc2l0ZSB0aGUgc2hhZG93IHdpdGggdGhl
IG9yaWdpbmFsIHRleHR1cmUuCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2UgKyBk
ZXN0aW5hdGlvbiAqICgxLiAtIHNvdXJjZS5hKTsKKyAgICAgICAgICAgIGxvd3AgZmxvYXQgc2hh
ZG93Qmx1ckhvcml6b250YWwoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZsb2F0
IHRvdGFsID0gc2FtcGxlQWxwaGEoMC4pICogdV9nYXVzc2lhbktlcm5lbFswXTsKKyAgICAgICAg
ICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBp
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoaSkg
KiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOworICAgICAgICAg
ICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVBbHBoYShmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5f
S0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHNvdXJjZU92ZXIodGV4dHVyZTJEKHVfY29u
dGVudFRleHR1cmUsIHZfdGV4Q29vcmQpLCBzaGFkb3dCbHVyVmVydGljYWwoKSAqIHVfc2hhZG93
Q29sb3IpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG90YWw7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KIAotICAgIGlmICghZnJhZ21lbnRTaGFkZXJTb3VyY2UpCi0gICAgICAgIHJldHVybjsK
LSAgICBQbGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hh
ZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKTsKLSAgICBQbGF0Zm9ybTNET2Jq
ZWN0IGZyYWdtZW50U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUik7Ci0gICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UodmVy
dGV4U2hhZGVyLCB2ZXJ0ZXhTaGFkZXJTb3VyY2UpOwotICAgIG1fY29udGV4dC0+c2hhZGVyU291
cmNlKGZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNoYWRlclNvdXJjZSk7Ci0gICAgUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtSUQgPSBtX2NvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsKLSAgICBtX2Nv
bnRleHQtPmNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmNvbXBp
bGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOwotI2lmICFMT0dfRElTQUJMRUQKLSAgICBTdHJpbmcg
bG9nOwotICAgIG1fY29udGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhmcmFnbWVudFNoYWRlcik7Ci0g
ICAgV1RGTG9nKCZMb2dDb21wb3NpdGluZywgIiVzXG4iLCBsb2cuYXNjaWkoKS5kYXRhKCkpOwot
I2VuZGlmCi0gICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2ZXJ0ZXhTaGFk
ZXIpOwotICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgZnJhZ21lbnRTaGFk
ZXIpOwotICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0ocHJvZ3JhbUlEKTsKKyAgICAgICAgICAg
IHZvaWQgbWFpbih2b2lkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdsX0ZyYWdD
b2xvciA9IHZlYzQoMS4sIDEuLCAxLiwgMS4pICogc2hhZG93Qmx1ckhvcml6b250YWwoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgKTsKIAotICAgIG1fdmVydGV4QXR0cmliID0gbV9jb250ZXh0
LT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3ZlcnRleCIpOwotICAgIG1fdGV4Q29v
cmRBdHRyaWIgPSBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgImFfdGV4
Q29vcmQiKTsKLSAgICBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVu
aWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X3RleHR1cmUiKTsKLSAgICBzd2l0Y2ggKHR5cGUp
IHsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgotICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpTRVBJQToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6Ci0g
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6Ci0gICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OklOVkVSVDoKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKLSAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246Ok9QQUNJVFk6Ci0gICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQgPSBtX2NvbnRl
eHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2Ftb3VudCIpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKLSAgICAgICAgbV91bmlmb3Jt
TG9jYXRpb25zLmJsdXIucmFkaXVzID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJv
Z3JhbUlELCAidV9ibHVyUmFkaXVzIik7Ci0gICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVy
LmdhdXNzaWFuS2VybmVsID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlE
LCAidV9nYXVzc2lhbktlcm5lbCIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6RFJPUF9TSEFET1c6Ci0gICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cu
Ymx1clJhZGl1cyA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVf
c2hhZG93Qmx1clJhZGl1cyIpOwotICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93Lmdh
dXNzaWFuS2VybmVsID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAi
dV9nYXVzc2lhbktlcm5lbCIpOwotICAgICAgICBpZiAoIXBhc3MpCi0gICAgICAgICAgICBtX3Vu
aWZvcm1Mb2NhdGlvbnMuc2hhZG93Lm9mZnNldCA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0
aW9uKHByb2dyYW1JRCwgInVfc2hhZG93T2Zmc2V0Iik7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgLy8gV2Ugb25seSBuZWVkIHRoZSBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBp
biB0aGUgc2Vjb25kIHBhc3MsIHRoZSBmaXJzdCBwYXNzIGlzIG9ubHkgYSBob3Jpem9udGFsIGFs
cGhhIGJsdXIuCi0gICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbG9yID0g
bV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dDb2xvciIp
OwotICAgICAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb250ZW50VGV4dHVyZSA9
IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfY29udGVudFRleHR1
cmUiKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgbV9pZCA9IHByb2dyYW1JRDsKLSAgICBtX3ZlcnRleFNoYWRlciA9
IHZlcnRleFNoYWRlcjsKLSAgICBtX2ZyYWdtZW50U2hhZGVyID0gZnJhZ21lbnRTaGFkZXI7Ci19
CisgICAgLy8gU2Vjb25kIHBhc3M6IHZlcnRpY2FsIGFscGhhIGJsdXIgYW5kIGNvbXBvc2l0ZSB3
aXRoIG9yaWdpbi4KKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkb3dGaWx0ZXIy
ID0KKyAgICAgICAgQkxVUl9DT05TVEFOVFMKKyAgICAgICAgU1RSSU5HSUZZKAorICAgICAgICAg
ICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZl
YzIgdl90ZXhDb29yZDsKKyAgICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X2JsdXJSYWRp
dXM7CisgICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVjNCB1X3NoYWRvd0NvbG9yOworICAgICAg
ICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zYW1wbGVyOworICAgICAgICAgICAgdW5pZm9ybSBz
YW1wbGVyMkQgc19jb250ZW50VGV4dHVyZTsKKyAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9n
YXVzc2lhbktlcm5lbFtHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSF07CiAKLVBhc3NSZWZQdHI8
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBTdGFuZGFyZEZpbHRlclByb2dyYW06OmNyZWF0ZShHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5
cGUsIHVuc2lnbmVkIHBhc3MpCi17Ci0gICAgUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4g
cHJvZ3JhbSA9IGFkb3B0UmVmKG5ldyBTdGFuZGFyZEZpbHRlclByb2dyYW0oY29udGV4dCwgdHlw
ZSwgcGFzcykpOwotICAgIGlmICghcHJvZ3JhbS0+bV9pZCkKLSAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgICAgICBsb3dwIGZsb2F0IHNhbXBsZUFscGhhKGZsb2F0IHIpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgdmVjMiBjb29yZCA9IHZfdGV4Q29vcmQgKyB2ZWMyKDAuLCByICog
dV9ibHVyUmFkaXVzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHNfc2FtcGxl
ciwgY29vcmQpLmEgKiBmbG9hdChjb29yZC54ID4gMC4gJiYgY29vcmQueSA+IDAuICYmIGNvb3Jk
LnggPCAxLiAmJiBjb29yZC55IDwgMS4pOworICAgICAgICAgICAgfQogCi0gICAgcmV0dXJuIHBy
b2dyYW07Ci19CisgICAgICAgICAgICBsb3dwIGZsb2F0IHNoYWRvd0JsdXJWZXJ0aWNhbCgpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmxvYXQgdG90YWwgPSBzYW1wbGVBbHBoYSgw
LikgKiB1X2dhdXNzaWFuS2VybmVsWzBdOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAx
OyBpIDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7IGkrKykgeworICAgICAgICAgICAgICAg
ICAgICB0b3RhbCArPSBzYW1wbGVBbHBoYShmbG9hdChpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQ
KSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07CisgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNh
bXBsZUFscGhhKGZsb2F0KC0xICogaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNz
aWFuS2VybmVsW2ldOworICAgICAgICAgICAgICAgIH0KIAotc3RhdGljIGlubGluZSBmbG9hdCBn
YXVzcyhmbG9hdCB4KQotewotICAgIHJldHVybiBleHAoLSh4ICogeCkgLyAyLik7Ci19CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRvdGFsOworICAgICAgICAgICAgfQogCi1zdGF0aWMgZmxvYXQq
IGdhdXNzaWFuS2VybmVsKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBwcmVwYXJlZCA9IGZhbHNlOwot
ICAgIHN0YXRpYyBmbG9hdCBrZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdID0gezAs
IH07CisgICAgICAgICAgICBsb3dwIHZlYzQgc291cmNlT3Zlcihsb3dwIHZlYzQgc291cmNlLCBs
b3dwIHZlYzQgZGVzdGluYXRpb24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8g
Q29tcG9zaXRlIHRoZSBzaGFkb3cgd2l0aCB0aGUgb3JpZ2luYWwgdGV4dHVyZS4KKyAgICAgICAg
ICAgICAgICByZXR1cm4gc291cmNlICsgZGVzdGluYXRpb24gKiAoMS4gLSBzb3VyY2UuYSk7Cisg
ICAgICAgICAgICB9CiAKLSAgICBpZiAocHJlcGFyZWQpCi0gICAgICAgIHJldHVybiBrZXJuZWw7
CisgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBnbF9GcmFnQ29sb3IgPSBzb3VyY2VPdmVyKHRleHR1cmUyRChzX2NvbnRlbnRUZXh0dXJl
LCB2X3RleENvb3JkKSwgc2hhZG93Qmx1clZlcnRpY2FsKCkgKiB1X3NoYWRvd0NvbG9yKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgKTsKIAotICAgIGtlcm5lbFswXSA9IGdhdXNzKDApOwotICAg
IGZsb2F0IHN1bSA9IGtlcm5lbFswXTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgR0FV
U1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7ICsraSkgewotICAgICAgICBrZXJuZWxbaV0gPSBnYXVz
cyhpICogR0FVU1NJQU5fS0VSTkVMX1NURVApOwotICAgICAgICBzdW0gKz0gMiAqIGtlcm5lbFtp
XTsKKyAgICBpZiAoc3BlY3MuaXNFbXB0eSgpKSB7CisgICAgICAgIHNwZWNzLnJlc2l6ZShUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6TGFzdEZpbHRlcik7CisgICAgICAgIHNwZWNzW1RleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpEZWZhdWx0XSA9IFNoYWRlclNwZWModmVydGV4U2ltcGxl
LCBmcmFnbWVudFNpbXBsZSk7CisgICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpTb2xpZENvbG9yXSA9IFNoYWRlclNwZWModmVydGV4U29saWRDb2xvciwgZnJhZ21lbnRT
b2xpZENvbG9yKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJl
Y3RdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhTaW1wbGUsIGZyYWdtZW50UmVjdFNpbXBsZSk7CisgICAg
ICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpNYXNrZWRdID0gU2hhZGVyU3Bl
Yyh2ZXJ0ZXhPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRPcGFjaXR5QW5kTWFzayk7CisgICAgICAg
IHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpNYXNrZWRSZWN0XSA9IFNoYWRlclNw
ZWModmVydGV4T3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50UmVjdE9wYWNpdHlBbmRNYXNrKTsKKyAg
ICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkFudGlhbGlhc2VkXSA9IFNo
YWRlclNwZWModmVydGV4U2ltcGxlLCBmcmFnbWVudEFudGlhbGlhc2luZ05vTWFzayk7CisgICAg
ICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpHcmF5c2NhbGVGaWx0ZXJdID0g
U2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50R3JheXNjYWxlRmlsdGVyKTsKKyAgICAg
ICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNlcGlhRmlsdGVyXSA9IFNoYWRl
clNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudFNlcGlhRmlsdGVyKTsKKyAgICAgICAgc3BlY3Nb
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNhdHVyYXRlRmlsdGVyXSA9IFNoYWRlclNwZWMo
dmVydGV4RmlsdGVyLCBmcmFnbWVudFNhdHVyYXRlRmlsdGVyKTsKKyAgICAgICAgc3BlY3NbVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Okh1ZVJvdGF0ZUZpbHRlcl0gPSBTaGFkZXJTcGVjKHZl
cnRleEZpbHRlciwgZnJhZ21lbnRIdWVSb3RhdGVGaWx0ZXIpOworICAgICAgICBzcGVjc1tUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QnJpZ2h0bmVzc0ZpbHRlcl0gPSBTaGFkZXJTcGVjKHZl
cnRleEZpbHRlciwgZnJhZ21lbnRCcmlnaHRuZXNzRmlsdGVyKTsKKyAgICAgICAgc3BlY3NbVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkNvbnRyYXN0RmlsdGVyXSA9IFNoYWRlclNwZWModmVy
dGV4RmlsdGVyLCBmcmFnbWVudENvbnRyYXN0RmlsdGVyKTsKKyAgICAgICAgc3BlY3NbVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXI6OkludmVydEZpbHRlcl0gPSBTaGFkZXJTcGVjKHZlcnRleEZp
bHRlciwgZnJhZ21lbnRJbnZlcnRGaWx0ZXIpOworICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6T3BhY2l0eUZpbHRlcl0gPSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwg
ZnJhZ21lbnRPcGFjaXR5RmlsdGVyKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OkJsdXJGaWx0ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50
Qmx1ckZpbHRlcik7CisgICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpT
aGFkb3dGaWx0ZXJQYXNzMV0gPSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRTaGFk
b3dGaWx0ZXIxKTsKKyAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNo
YWRvd0ZpbHRlclBhc3MyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudFNoYWRv
d0ZpbHRlcjIpOwogICAgIH0KIAotICAgIC8vIE5vcm1hbGl6ZSB0aGUga2VybmVsCi0gICAgZmxv
YXQgc2NhbGUgPSAxIC8gc3VtOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHQVVTU0lB
Tl9LRVJORUxfSEFMRl9XSURUSDsgKytpKQotICAgICAgICBrZXJuZWxbaV0gKj0gc2NhbGU7Ci0K
LSAgICBwcmVwYXJlZCA9IHRydWU7Ci0gICAgcmV0dXJuIGtlcm5lbDsKKyAgICBBU1NFUlQoc3Bl
Y3Muc2l6ZSgpID4ga2V5KTsKKyAgICBTaGFkZXJTcGVjJiBzcGVjID0gc3BlY3Nba2V5XTsKKyAg
ICB2ZXJ0ZXhTb3VyY2UgPSBzcGVjLnZlcnRleFNoYWRlcjsKKyAgICBmcmFnbWVudFNvdXJjZSA9
IHNwZWMuZnJhZ21lbnRTaGFkZXI7CiB9CiAKLXZvaWQgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpw
cmVwYXJlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgb3BlcmF0aW9uLCB1bnNpZ25lZCBwYXNzLCBj
b25zdCBJbnRTaXplJiBzaXplLCBHQzNEdWludCBjb250ZW50VGV4dHVyZSkKK1RleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcihHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQogewotICAgIG1fY29udGV4
dC0+dXNlUHJvZ3JhbShtX2lkKTsKLSAgICBzd2l0Y2ggKG9wZXJhdGlvbi5nZXRPcGVyYXRpb25U
eXBlKCkpIHsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgotICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJB
VEU6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6Ci0gICAgICAgIG1fY29u
dGV4dC0+dW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQsIHN0YXRpY19jYXN0PGNv
bnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKLSAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKLSAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6Q09OVFJBU1Q6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAg
ICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQsIHN0YXRp
Y19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mPihvcGVy
YXRpb24pLmFtb3VudCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkJMVVI6IHsKLSAgICAgICAgY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1ciA9IHN0
YXRpY19jYXN0PGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pOwotICAgICAg
ICBGbG9hdFNpemUgcmFkaXVzOwotCi0gICAgICAgIC8vIEJsdXIgaXMgZG9uZSBpbiB0d28gcGFz
c2VzLCBmaXJzdCBob3Jpem9udGFsbHkgYW5kIHRoZW4gdmVydGljYWxseS4gVGhlIHNhbWUgc2hh
ZGVyIGlzIHVzZWQgZm9yIGJvdGguCi0gICAgICAgIGlmIChwYXNzKQotICAgICAgICAgICAgcmFk
aXVzLnNldEhlaWdodChmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXIuc3RkRGV2aWF0aW9uKCksIHNp
emUuaGVpZ2h0KCkpIC8gc2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJhZGl1cy5zZXRXaWR0aChmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXIuc3RkRGV2aWF0aW9uKCks
IHNpemUud2lkdGgoKSkgLyBzaXplLndpZHRoKCkpOwotCi0gICAgICAgIG1fY29udGV4dC0+dW5p
Zm9ybTJmKG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLnJhZGl1cywgcmFkaXVzLndpZHRoKCksIHJh
ZGl1cy5oZWlnaHQoKSk7Ci0gICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihtX3VuaWZvcm1M
b2NhdGlvbnMuYmx1ci5nYXVzc2lhbktlcm5lbCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgs
IGdhdXNzaWFuS2VybmVsKCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7Ci0gICAgICAgIGNvbnN0IERyb3BTaGFkb3dGaWx0
ZXJPcGVyYXRpb24mIHNoYWRvdyA9IHN0YXRpY19jYXN0PGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJP
cGVyYXRpb24mPihvcGVyYXRpb24pOwotICAgICAgICBzd2l0Y2ggKHBhc3MpIHsKLSAgICAgICAg
Y2FzZSAwOgotICAgICAgICAgICAgLy8gRmlyc3QgcGFzczogdmVydGljYWwgYWxwaGEgYmx1ci4K
LSAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFk
b3cub2Zmc2V0LCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS54KCkpIC8gZmxvYXQoc2l6ZS53aWR0
aCgpKSwgZmxvYXQoc2hhZG93LmxvY2F0aW9uKCkueSgpKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkp
KTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5z
aGFkb3cuYmx1clJhZGl1cywgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS53aWR0
aCgpKSk7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobV91bmlmb3JtTG9jYXRp
b25zLnNoYWRvdy5nYXVzc2lhbktlcm5lbCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdh
dXNzaWFuS2VybmVsKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMToKLSAg
ICAgICAgICAgIC8vIFNlY29uZCBwYXNzOiB3ZSBuZWVkIHRoZSBzaGFkb3cgY29sb3IgYW5kIHRo
ZSBjb250ZW50IHRleHR1cmUgZm9yIGNvbXBvc2l0aW5nLgotICAgICAgICAgICAgbV9jb250ZXh0
LT51bmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzLCBzaGFkb3cu
c3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLmhlaWdodCgpKSk7Ci0gICAgICAgICAgICBtX2Nv
bnRleHQtPnVuaWZvcm0xZnYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5nYXVzc2lhbktlcm5l
bCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOwotICAgICAg
ICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
MSk7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBjb250ZW50VGV4dHVyZSk7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnVu
aWZvcm0xaShtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbnRlbnRUZXh0dXJlLCAxKTsKLSAg
ICAgICAgICAgIGZsb2F0IHIsIGcsIGIsIGE7Ci0gICAgICAgICAgICBzaGFkb3cuY29sb3IoKS5n
ZXRSR0JBKHIsIGcsIGIsIGEpOwotICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtNGYobV91
bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb2xvciwgciwgZywgYiwgYSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQogfQogCi1QYXNzUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3Jh
bT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlckZvckZpbHRlcihjb25zdCBG
aWx0ZXJPcGVyYXRpb24mIGZpbHRlciwgdW5zaWduZWQgcGFzcykKK1RleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyOjp+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKQogewotICAgIFJlZlB0cjxT
dGFuZGFyZEZpbHRlclByb2dyYW0+IHByb2dyYW07Ci0gICAgRmlsdGVyT3BlcmF0aW9uOjpPcGVy
YXRpb25UeXBlIHR5cGUgPSBmaWx0ZXIuZ2V0T3BlcmF0aW9uVHlwZSgpOwotICAgIGludCBrZXkg
PSBpbnQodHlwZSkgfCAocGFzcyA8PCAxNik7Ci0gICAgRmlsdGVyTWFwOjppdGVyYXRvciBpdGVy
YXRvciA9IG1fZmlsdGVyTWFwLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3IgPT0gbV9maWx0
ZXJNYXAuZW5kKCkpIHsKLSAgICAgICAgcHJvZ3JhbSA9IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6
Y3JlYXRlKG1fY29udGV4dCwgdHlwZSwgcGFzcyk7Ci0gICAgICAgIGlmICghcHJvZ3JhbSkKLSAg
ICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIG1fZmlsdGVyTWFwLmFkZChrZXksIHByb2dy
YW0pOwotICAgIH0gZWxzZQotICAgICAgICBwcm9ncmFtID0gaXRlcmF0b3ItPnZhbHVlOwotCi0g
ICAgcmV0dXJuIHByb2dyYW07CiB9CiAKLXVuc2lnbmVkIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpnZXRQYXNzZXNSZXF1aXJlZEZvckZpbHRlcihjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9w
ZXJhdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IFRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9ncmFtKFNoYWRlcktleSBrZXkp
CiB7Ci0gICAgc3dpdGNoIChvcGVyYXRpb24uZ2V0T3BlcmF0aW9uVHlwZSgpKSB7Ci0gICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
U0VQSUE6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgotICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZF
UlQ6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6Ci0gICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkNPTlRSQVNUOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZ
OgotICAgICAgICByZXR1cm4gMTsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKLSAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6Ci0gICAgICAgIC8vIFdlIHVzZSB0
d28tcGFzc2VzICh2ZXJ0aWNhbCtob3Jpem9udGFsKSBmb3IgYmx1ciBhbmQgZHJvcC1zaGFkb3cu
Ci0gICAgICAgIHJldHVybiAyOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDo6aXRlcmF0b3IgaXQgPSBtX3By
b2dyYW1zLmZpbmQoa2V5KTsKKyAgICBpZiAoaXQgIT0gbV9wcm9ncmFtcy5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuIGl0LT52YWx1ZTsKIAorICAgIFN0cmluZyB2ZXJ0ZXhTaGFkZXI7CisgICAgU3Ry
aW5nIGZyYWdtZW50U2hhZGVyOworICAgIGdldFNoYWRlclNwZWMoa2V5LCB2ZXJ0ZXhTaGFkZXIs
IGZyYWdtZW50U2hhZGVyKTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+
IHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKG1fY29udGV4dCwg
dmVydGV4U2hhZGVyLCBmcmFnbWVudFNoYWRlcik7CisgICAgbV9wcm9ncmFtcy5hZGQoa2V5LCBw
cm9ncmFtKTsKKyAgICByZXR1cm4gcHJvZ3JhbTsKIH0KLQotI2VuZGlmCiB9OwogCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKaW5kZXggMWZmYjcxMDBiYWU4
MmZiZWExNThmMTg3NDRiMTEwZmM3ZDA2NjU0ZS4uYjFmOGQ2MTA3ZDA5NmNhYzIyMzVhMmZhMDQw
MGQ4MmI0Y2YyYzJmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgK
QEAgLTIxLDIzMyArMjEsMTAyIEBACiAjaWZuZGVmIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
X2gKICNkZWZpbmUgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXJfaAogCi0jaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0KLSNpbmNsdWRlICJG
bG9hdFF1YWQuaCIKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ckdMLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykKLSNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCi0jZW5kaWYKKyNpbmNsdWRl
IDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgQml0bWFwVGV4dHVyZTsKLWNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOwor
I2RlZmluZSBURVhNQVBfREVDTEFSRV9WQVJJQUJMRShBY2Nlc3NvciwgTmFtZSwgVHlwZSkgR0Mz
RHVpbnQgQWNjZXNzb3IjI0xvY2F0aW9uKCkgeyBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nIG5h
bWUoTmFtZSk7IHJldHVybiBnZXRMb2NhdGlvbihuYW1lLCBUeXBlKTsgfQorI2RlZmluZSBURVhN
QVBfREVDTEFSRV9VTklGT1JNKEFjY2Vzc29yKSBURVhNQVBfREVDTEFSRV9WQVJJQUJMRShBY2Nl
c3NvciwgInVfIiNBY2Nlc3NvciwgVW5pZm9ybVZhcmlhYmxlKQorI2RlZmluZSBURVhNQVBfREVD
TEFSRV9BVFRSSUJVVEUoQWNjZXNzb3IpIFRFWE1BUF9ERUNMQVJFX1ZBUklBQkxFKEFjY2Vzc29y
LCAiYV8iI0FjY2Vzc29yLCBBdHRyaWJWYXJpYWJsZSkKKyNkZWZpbmUgVEVYTUFQX0RFQ0xBUkVf
U0FNUExFUihBY2Nlc3NvcikgVEVYTUFQX0RFQ0xBUkVfVkFSSUFCTEUoQWNjZXNzb3IsICJzXyIj
QWNjZXNzb3IsIFVuaWZvcm1WYXJpYWJsZSkKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gewog
cHVibGljOgotICAgIFBsYXRmb3JtM0RPYmplY3QgaWQoKSB7IHJldHVybiBtX2lkOyB9Ci0gICAg
R0MzRHVpbnQgdmVydGV4QXR0cmliKCkgeyByZXR1cm4gbV92ZXJ0ZXhBdHRyaWI7IH0KKyAgICBQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW1JRCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKyAgICBH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBjcmVhdGUo
UGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwgY29uc3QgU3RyaW5nJiB2ZXJ0
ZXgsIGNvbnN0IFN0cmluZyYgZnJhZ21lbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleCwgZnJhZ21l
bnQpKTsKKyAgICB9CiAKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShHcmFwaGljc0Nv
bnRleHQzRCosIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJh
Z21lbnRTaGFkZXJTb3VyY2UpOwogICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShmbG9hdCBvcGFjaXR5LCBjb25zdCBC
aXRtYXBUZXh0dXJlKikgeyB9Ci0gICAgR0MzRGludCBtYXRyaXhMb2NhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fbWF0cml4TG9jYXRpb247IH0KLSAgICBHQzNEaW50IGZsaXBMb2NhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fZmxpcExvY2F0aW9uOyB9Ci0gICAgR0MzRGludCB0ZXh0dXJlU2l6ZUxv
Y2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlU2l6ZUxvY2F0aW9uOyB9Ci0gICAgR0Mz
RGludCBzb3VyY2VUZXh0dXJlTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVRleHR1
cmVMb2NhdGlvbjsgfQotICAgIEdDM0RpbnQgbWFza1RleHR1cmVMb2NhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fbWFza1RleHR1cmVMb2NhdGlvbjsgfQotICAgIEdDM0RpbnQgb3BhY2l0eUxvY2F0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5TG9jYXRpb247IH0KLQotICAgIHN0YXRpYyBi
b29sIGlzVmFsaWRVbmlmb3JtTG9jYXRpb24oR0MzRGludCBsb2NhdGlvbikgeyByZXR1cm4gbG9j
YXRpb24gPj0gMDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBnZXRVbmlmb3JtTG9jYXRpb24o
R0MzRGludCYgdmFyLCBjb25zdCBjaGFyKiBuYW1lKTsKLSAgICB2b2lkIGluaXRpYWxpemVQcm9n
cmFtKCk7Ci0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoKSB7IH0KLSAgICBjb25zdCBjaGFy
KiB2ZXJ0ZXhTaGFkZXJTb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRleFNoYWRlclNvdXJj
ZS5kYXRhKCk7IH0KLSAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZnJhZ21lbnRTaGFkZXJTb3VyY2UuZGF0YSgpOyB9CisgICAgVEVYTUFQX0RF
Q0xBUkVfQVRUUklCVVRFKHZlcnRleCkKKyAgICBURVhNQVBfREVDTEFSRV9BVFRSSUJVVEUodGV4
Q29vcmQpCiAKLSAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwotICAgIFBsYXRmb3Jt
M0RPYmplY3QgbV9pZDsKLSAgICBHQzNEdWludCBtX3ZlcnRleEF0dHJpYjsKLSAgICBQbGF0Zm9y
bTNET2JqZWN0IG1fdmVydGV4U2hhZGVyOwotICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mcmFnbWVu
dFNoYWRlcjsKLSAgICBHQzNEaW50IG1fbWF0cml4TG9jYXRpb247Ci0gICAgR0MzRGludCBtX2Zs
aXBMb2NhdGlvbjsKLSAgICBHQzNEaW50IG1fdGV4dHVyZVNpemVMb2NhdGlvbjsKLSAgICBHQzNE
aW50IG1fc291cmNlVGV4dHVyZUxvY2F0aW9uOwotICAgIEdDM0RpbnQgbV9vcGFjaXR5TG9jYXRp
b247Ci0gICAgR0MzRGludCBtX21hc2tUZXh0dXJlTG9jYXRpb247Ci0KLXByaXZhdGU6Ci0gICAg
Q1N0cmluZyBtX3ZlcnRleFNoYWRlclNvdXJjZTsKLSAgICBDU3RyaW5nIG1fZnJhZ21lbnRTaGFk
ZXJTb3VyY2U7Ci19OworICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0obWF0cml4KQorICAgIFRF
WE1BUF9ERUNMQVJFX1VOSUZPUk0oZmxpcCkKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKHRl
eHR1cmVTaXplKQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0ob3BhY2l0eSkKKyAgICBURVhN
QVBfREVDTEFSRV9VTklGT1JNKGNvbG9yKQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oZXhw
YW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlKQorICAgIFRFWE1BUF9ERUNMQVJFX1NBTVBMRVIo
c2FtcGxlcikKKyAgICBURVhNQVBfREVDTEFSRV9TQU1QTEVSKG1hc2spCiAKICNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCi1jbGFzcyBTdGFuZGFyZEZpbHRlclByb2dyYW0gOiBwdWJsaWMgUmVmQ291
bnRlZDxTdGFuZGFyZEZpbHRlclByb2dyYW0+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5TdGFu
ZGFyZEZpbHRlclByb2dyYW0oKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShjb25zdCBGaWx0
ZXJPcGVyYXRpb24mLCB1bnNpZ25lZCBwYXNzLCBjb25zdCBJbnRTaXplJiwgR0MzRHVpbnQgY29u
dGVudFRleHR1cmUpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3Jh
bT4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25U
eXBlLCB1bnNpZ25lZCBwYXNzKTsKLSAgICBHQzNEdWludCB2ZXJ0ZXhBdHRyaWIoKSBjb25zdCB7
IHJldHVybiBtX3ZlcnRleEF0dHJpYjsgfQotICAgIEdDM0R1aW50IHRleENvb3JkQXR0cmliKCkg
Y29uc3QgeyByZXR1cm4gbV90ZXhDb29yZEF0dHJpYjsgfQotICAgIEdDM0R1aW50IHRleHR1cmVV
bmlmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uOyB9Ci1wcm90
ZWN0ZWQ6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKLXByaXZhdGU6Ci0gICAg
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKCk7Ci0gICAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEdyYXBo
aWNzQ29udGV4dDNEKiwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlLCB1bnNpZ25lZCBw
YXNzKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1faWQ7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBt
X3ZlcnRleFNoYWRlcjsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZnJhZ21lbnRTaGFkZXI7Ci0g
ICAgR0MzRHVpbnQgbV92ZXJ0ZXhBdHRyaWI7Ci0gICAgR0MzRHVpbnQgbV90ZXhDb29yZEF0dHJp
YjsKLSAgICBHQzNEdWludCBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb247Ci0gICAgdW5pb24gewot
ICAgICAgICBHQzNEdWludCBhbW91bnQ7Ci0KLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAg
IEdDM0R1aW50IHJhZGl1czsKLSAgICAgICAgICAgIEdDM0R1aW50IGdhdXNzaWFuS2VybmVsOwot
ICAgICAgICB9IGJsdXI7Ci0KLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIEdDM0R1aW50
IGJsdXJSYWRpdXM7Ci0gICAgICAgICAgICBHQzNEdWludCBjb2xvcjsKLSAgICAgICAgICAgIEdD
M0R1aW50IG9mZnNldDsKLSAgICAgICAgICAgIEdDM0R1aW50IGNvbnRlbnRUZXh0dXJlOwotICAg
ICAgICAgICAgR0MzRHVpbnQgZ2F1c3NpYW5LZXJuZWw7Ci0gICAgICAgIH0gc2hhZG93OwotICAg
IH0gbV91bmlmb3JtTG9jYXRpb25zOwotfTsKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKGFt
b3VudCkKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKGdhdXNzaWFuS2VybmVsKQorICAgIFRF
WE1BUF9ERUNMQVJFX1VOSUZPUk0oYmx1clJhZGl1cykKKyAgICBURVhNQVBfREVDTEFSRV9VTklG
T1JNKHNoYWRvd0NvbG9yKQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oc2hhZG93T2Zmc2V0
KQorICAgIFRFWE1BUF9ERUNMQVJFX1NBTVBMRVIoY29udGVudFRleHR1cmUpCiAjZW5kaWYKIAot
Y2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUgOiBwdWJsaWMgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU2ltcGxlKGNvbnRleHQpKTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZShHcmFwaGljc0NvbnRleHQzRCopOwotcHJp
dmF0ZToKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgpOwotfTsKLQotY2xh
c3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlIDogcHVibGljIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlKGNvbnRleHQpKTsKLSAgICB9Ci0KLXByb3RlY3Rl
ZDoKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoR3JhcGhpY3NDb250
ZXh0M0QqKTsKIHByaXZhdGU6Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2lt
cGxlKCk7Ci19OwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRN
YXNrIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNr
PiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2so
Y29udGV4dCkpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtT3BhY2l0eUFuZE1hc2soR3JhcGhpY3NDb250ZXh0M0QqKTsKLXByaXZhdGU6Ci0gICAg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpOwotfTsKLQotY2xhc3Mg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2sgOiBwdWJsaWMgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrPiBjcmVhdGUoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKGNvbnRleHQp
KTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJl
Y3RPcGFjaXR5QW5kTWFzayhHcmFwaGljc0NvbnRleHQzRCopOwotcHJpdmF0ZToKLSAgICBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaygpOwotfTsKLQotY2xhc3Mg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yIDogcHVibGljIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1Tb2xpZENvbG9yKGNvbnRleHQpKTsKLSAgICB9Ci0KLSAgICBHQzNEaW50
IGNvbG9yTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbG9yTG9jYXRpb247IH0KLQotcHJv
dGVjdGVkOgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcihHcmFwaGlj
c0NvbnRleHQzRCopOwotcHJpdmF0ZToKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNv
bGlkQ29sb3IoKTsKLSAgICBHQzNEaW50IG1fY29sb3JMb2NhdGlvbjsKLX07Ci0KLWNsYXNzIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrIDogcHVibGljIFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzaz4gY3JlYXRlKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayhjb250ZXh0KSk7
Ci0gICAgfQotCi0gICAgR0MzRGludCBleHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNvb3Jk
aW5hdGVzTG9jYXRpb24oKSB7IHJldHVybiBtX2V4cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0dXJl
Q29yZGluYXRlc0xvY2F0aW9uOyB9Ci0gICAgR0MzRGludCBleHBhbmRlZFF1YWRFZGdlc0luU2Ny
ZWVuU3BhY2VMb2NhdGlvbigpIHsgcmV0dXJuIG1fZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNw
YWNlTG9jYXRpb247IH0KKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShQYXNzUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiwgY29uc3QgU3RyaW5nJiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNv
bnN0IFN0cmluZyYgZnJhZ21lbnRTaGFkZXJTb3VyY2UpOworICAgIFBsYXRmb3JtM0RPYmplY3Qg
bV92ZXJ0ZXhTaGFkZXI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZyYWdtZW50U2hhZGVyOwog
Ci1wcm90ZWN0ZWQ6Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdO
b01hc2soR3JhcGhpY3NDb250ZXh0M0QqKTsKLXByaXZhdGU6Ci0gICAgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2soKTsKKyAgICBlbnVtIFZhcmlhYmxlVHlwZSB7
IFVuaWZvcm1WYXJpYWJsZSwgQXR0cmliVmFyaWFibGUgfTsKKyAgICBHQzNEdWludCBnZXRMb2Nh
dGlvbihjb25zdCBBdG9taWNTdHJpbmcmLCBWYXJpYWJsZVR5cGUpOwogCi0gICAgR0MzRGludCBt
X2V4cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0dXJlQ29yZGluYXRlc0xvY2F0aW9uOwotICAgIEdD
M0RpbnQgbV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbjsKKyAgICBSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1f
aWQ7CisgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIEdDM0R1aW50PiBtX3ZhcmlhYmxlczsKIH07
CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIHsKIHB1YmxpYzoKLSAgICBlbnVt
IFNoYWRlclR5cGUgewotICAgICAgICBJbnZhbGlkID0gMCwgLy8gSGFzaE1hcHMgZG8gbm90IGxp
a2UgMCBhcyBhIGtleS4KLSAgICAgICAgU2ltcGxlLAotICAgICAgICBBbnRpYWxpYXNpbmdOb01h
c2ssCi0gICAgICAgIFJlY3RTaW1wbGUsCi0gICAgICAgIE9wYWNpdHlBbmRNYXNrLAotICAgICAg
ICBSZWN0T3BhY2l0eUFuZE1hc2ssCi0gICAgICAgIFNvbGlkQ29sb3IKKyAgICBlbnVtIFNoYWRl
cktleSB7CisgICAgICAgIEludmFsaWQgPSAwLAorICAgICAgICBEZWZhdWx0LAorICAgICAgICBS
ZWN0LAorICAgICAgICBNYXNrZWQsCisgICAgICAgIE1hc2tlZFJlY3QsCisgICAgICAgIFNvbGlk
Q29sb3IsCisgICAgICAgIEFudGlhbGlhc2VkLAorICAgICAgICBHcmF5c2NhbGVGaWx0ZXIsCisg
ICAgICAgIFNlcGlhRmlsdGVyLAorICAgICAgICBTYXR1cmF0ZUZpbHRlciwKKyAgICAgICAgSHVl
Um90YXRlRmlsdGVyLAorICAgICAgICBCcmlnaHRuZXNzRmlsdGVyLAorICAgICAgICBDb250cmFz
dEZpbHRlciwKKyAgICAgICAgT3BhY2l0eUZpbHRlciwKKyAgICAgICAgSW52ZXJ0RmlsdGVyLAor
ICAgICAgICBCbHVyRmlsdGVyLAorICAgICAgICBTaGFkb3dGaWx0ZXJQYXNzMSwKKyAgICAgICAg
U2hhZG93RmlsdGVyUGFzczIsCisgICAgICAgIExhc3RGaWx0ZXIKICAgICB9OwogCiAgICAgVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKSB7IH0KICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcihHcmFwaGljc0NvbnRleHQzRCopOwogICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyKCk7CiAKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdW5zaWduZWQgZ2V0
UGFzc2VzUmVxdWlyZWRGb3JGaWx0ZXIoY29uc3QgRmlsdGVyT3BlcmF0aW9uJikgY29uc3Q7Ci0g
ICAgUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IGdldFNoYWRlckZvckZpbHRlcihj
b25zdCBGaWx0ZXJPcGVyYXRpb24mLCB1bnNpZ25lZCBwYXNzKTsKLSNlbmRpZgotCi0gICAgUGFz
c1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gZ2V0U2hhZGVyUHJvZ3JhbShTaGFk
ZXJUeXBlKTsKLSAgICBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRD
b2xvcj4gc29saWRDb2xvclByb2dyYW0oKTsKLSAgICBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrPiBhbnRpYWxpYXNpbmdOb01hc2tQcm9ncmFt
KCk7CisgICAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gZ2V0U2hhZGVy
UHJvZ3JhbShTaGFkZXJLZXkpOwogCiBwcml2YXRlOgotICAgIHR5cGVkZWYgSGFzaE1hcDxTaGFk
ZXJUeXBlLCBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+LCBEZWZhdWx0SGFzaDxp
bnQ+OjpIYXNoLCBIYXNoVHJhaXRzPGludD4gPiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1h
cDsKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcCBtX3RleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtTWFwOwotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7Ci0KLSNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPFN0YW5k
YXJkRmlsdGVyUHJvZ3JhbT4gPiBGaWx0ZXJNYXA7Ci0gICAgRmlsdGVyTWFwIG1fZmlsdGVyTWFw
OwotI2VuZGlmCisgICAgdHlwZWRlZiBIYXNoTWFwPFNoYWRlcktleSwgUmVmUHRyPFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtPiwgRGVmYXVsdEhhc2g8aW50Pjo6SGFzaCwgSGFzaFRyYWl0czxp
bnQ+ID4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA7CisgICAgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1NYXAgbV9wcm9ncmFtczsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IG1fY29udGV4dDsKIH07CiAKIH0KLQogI2VuZGlmCiAKICNlbmRpZiAvLyBUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcl9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>