<?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>105377</bug_id>
          
          <creation_ts>2012-12-18 18:42:38 -0800</creation_ts>
          <short_desc>[Texmap] Edge antialiasing in TextureMapper could be done with less per-pixel calls</short_desc>
          <delta_ts>2012-12-28 21:24:47 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>104815</dependson>
          <blocked>105809</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Noam Rosenthal">noam</assigned_to>
          <cc>dongseong.hwang</cc>
    
    <cc>kangil.han</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ostap73</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>794263</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-18 18:42:38 -0800</bug_when>
    <thetext>[Texmap] Edge antialiasing in TextureMapper could be done with less per-pixel calls</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794338</commentid>
    <comment_count>1</comment_count>
      <attachid>180089</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-18 21:41:07 -0800</bug_when>
    <thetext>Created attachment 180089
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794427</commentid>
    <comment_count>2</comment_count>
      <attachid>180089</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-12-19 00:58:51 -0800</bug_when>
    <thetext>Comment on attachment 180089
Patch

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

&gt; Source/WebCore/ChangeLog:19
&gt; +        It is very difficult to test performance gain; However, the following is apparent:
&gt; +        * The matrix multiplications and inversions done before in the quad inflation code were
&gt; +          always visible in instruments/valgrind and they are now gone.
&gt; +        * We now perform a single smoothstep() command per pixel instead of 8 clamp(dot()) commands.
&gt; +        * It should now be possible to antialias individual edges.
&gt; +

sounds good, why is this not up for review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794593</commentid>
    <comment_count>3</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-19 05:59:49 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 180089 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=180089&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:19
&gt; &gt; +        It is very difficult to test performance gain; However, the following is apparent:
&gt; &gt; +        * The matrix multiplications and inversions done before in the quad inflation code were
&gt; &gt; +          always visible in instruments/valgrind and they are now gone.
&gt; &gt; +        * We now perform a single smoothstep() command per pixel instead of 8 clamp(dot()) commands.
&gt; &gt; +        * It should now be possible to antialias individual edges.
&gt; &gt; +
&gt; 
&gt; sounds good, why is this not up for review?

I wanted to chat with Martin Robinson on IRC about this first. But comments are welcome at any point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794616</commentid>
    <comment_count>4</comment_count>
      <attachid>180154</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-19 06:20:25 -0800</bug_when>
    <thetext>Created attachment 180154
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794621</commentid>
    <comment_count>5</comment_count>
      <attachid>180155</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-19 06:22:30 -0800</bug_when>
    <thetext>Created attachment 180155
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797680</commentid>
    <comment_count>6</comment_count>
      <attachid>180824</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-27 14:58:13 -0800</bug_when>
    <thetext>Created attachment 180824
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797681</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-27 15:01:45 -0800</bug_when>
    <thetext>Attachment 180824 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.cpp:125:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 5 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>797682</commentid>
    <comment_count>8</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-27 15:02:55 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Attachment 180824 [details] did not pass style-queue:
&gt; 
&gt; 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
&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:125:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
&gt; Total errors found: 1 in 5 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

This false positive was already reported.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797684</commentid>
    <comment_count>9</comment_count>
      <attachid>180824</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-12-27 15:09:46 -0800</bug_when>
    <thetext>Comment on attachment 180824
Patch

Attachment 180824 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/15545586</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797686</commentid>
    <comment_count>10</comment_count>
      <attachid>180824</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-12-27 15:14:29 -0800</bug_when>
    <thetext>Comment on attachment 180824
Patch

Attachment 180824 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/15545589</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797687</commentid>
    <comment_count>11</comment_count>
      <attachid>180824</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-12-27 15:17:02 -0800</bug_when>
    <thetext>Comment on attachment 180824
Patch

Attachment 180824 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/15543633</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797688</commentid>
    <comment_count>12</comment_count>
      <attachid>180825</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-27 15:18:00 -0800</bug_when>
    <thetext>Created attachment 180825
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797689</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-27 15:20:36 -0800</bug_when>
    <thetext>Attachment 180825 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.cpp:125:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 5 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>797817</commentid>
    <comment_count>14</comment_count>
      <attachid>180825</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-12-28 01:31:17 -0800</bug_when>
    <thetext>Comment on attachment 180825
Patch

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

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:143
&gt;      RefPtr&lt;SharedGLData&gt; m_sharedGLData;
&gt;      RefPtr&lt;BitmapTexture&gt; currentSurface;
&gt; +    HashMap&lt;const void*, Platform3DObject&gt; vbos;

some have m_ some dont, confusing

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:-425
&gt; -    m_context3D-&gt;useProgram(program-&gt;programID());
&gt; -

Should you describe why this is not needed anymore

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:449
&gt; +#define SIDE_TRIANGLE(x1, y1, x2, y2) x1, y1, x1, y1, x2, y2, x2, y2, Center, Center, (x1 + x2) / 2, (y1 + y2) / 2

SIDE_TRIANGLE_DATA ?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:476
&gt; +    TransformationMatrix matrix =
&gt; +        TransformationMatrix(modelViewMatrix)
&gt; +            .multiply(TransformationMatrix::rectToRect(FloatRect(0, 0, 1, 1), rect));

why not keep as two lines?

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:125
&gt;&gt; +        uniform mat4 u_modelViewMatrix;
&gt; 
&gt; Code inside a namespace should not be indented.  [whitespace/indent] [4]

Seems you should report this bug

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:136
&gt; +        vec4 toScreenSpace(vec2 pos) { return vec4(pos, 0., 1.) * u_modelViewMatrix; }

toDeviceSpace?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:140
&gt; +        void applyAntialias(inout vec2 position)

ApplyAntialiasing ?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:359
&gt; +    shaderBuilder.append(\
&gt; +        (options &amp; TextureMapperShaderManager::Applier) \
&gt; +            ? ENABLE_APPLIER(Applier) \
&gt; +            : DISABLE_APPLIER(Applier))

why not just one line?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797819</commentid>
    <comment_count>15</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-28 01:34:22 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; toDeviceSpace?
It&apos;s really toViewportSpace, does that sound ok?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797822</commentid>
    <comment_count>16</comment_count>
      <attachid>180825</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-28 01:44:10 -0800</bug_when>
    <thetext>Comment on attachment 180825
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:-425
&gt;&gt; -
&gt; 
&gt; Should you describe why this is not needed anymore

Will add a function comment in the Changelog.

&gt;&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:125
&gt;&gt;&gt; +        uniform mat4 u_modelViewMatrix;
&gt;&gt; 
&gt;&gt; Code inside a namespace should not be indented.  [whitespace/indent] [4]
&gt; 
&gt; Seems you should report this bug

Already have... Getting tired of putting a reference to it everytime it appears</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797826</commentid>
    <comment_count>17</comment_count>
      <attachid>180857</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-28 01:50:51 -0800</bug_when>
    <thetext>Created attachment 180857
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797828</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-28 01:52:53 -0800</bug_when>
    <thetext>Attachment 180857 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.cpp:125:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 5 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>797832</commentid>
    <comment_count>19</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-28 02:00:58 -0800</bug_when>
    <thetext>Thanks Kenneth, Martin has promised to look at this tomorrow but if he doesn&apos;t I&apos;ll land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797948</commentid>
    <comment_count>20</comment_count>
      <attachid>180857</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-12-28 11:32:30 -0800</bug_when>
    <thetext>Comment on attachment 180857
Patch

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

Looks good to me, with a couple small suggestions.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:448
&gt; +    const GC3Dfloat Left = 0;
&gt; +    const GC3Dfloat Top = 0;
&gt; +    const GC3Dfloat Right = 1;
&gt; +    const GC3Dfloat Bottom = 1;
&gt; +    const GC3Dfloat Center = 0.5;

Style nit: Left should be left and so on.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:449
&gt; +#define SIDE_TRIANGLE_DATA(x1, y1, x2, y2) x1, y1, x1, y1, x2, y2, x2, y2, Center, Center, (x1 + x2) / 2, (y1 + y2) / 2

I think a comment here explaining that each point is followed by a control point would make this a lot clearer.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:168
&gt; +            position = center + (position - center) * inflationRatio;

So center + (position - center) here ensures that the center point is never expanded? Nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798013</commentid>
    <comment_count>21</comment_count>
      <attachid>180904</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-28 18:19:32 -0800</bug_when>
    <thetext>Created attachment 180904
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798014</commentid>
    <comment_count>22</comment_count>
      <attachid>180905</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-28 18:20:20 -0800</bug_when>
    <thetext>Created attachment 180905
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798015</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-28 18:21:51 -0800</bug_when>
    <thetext>Attachment 180905 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.cpp:125:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 5 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>798016</commentid>
    <comment_count>24</comment_count>
      <attachid>180906</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-28 18:24:35 -0800</bug_when>
    <thetext>Created attachment 180906
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798023</commentid>
    <comment_count>25</comment_count>
      <attachid>180906</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-28 19:06:46 -0800</bug_when>
    <thetext>Comment on attachment 180906
Patch for landing

Clearing flags on attachment: 180906

Committed r138555: &lt;http://trac.webkit.org/changeset/138555&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798024</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-28 19:06:52 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798041</commentid>
    <comment_count>27</comment_count>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-12-28 21:13:33 -0800</bug_when>
    <thetext>After this patch, below assertion failure has been reproduced in EFL WK2.

ASSERTION FAILED: GLCompileSuccess == GL_TRUE
WebKit/Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp(479) : void WebCore::GraphicsContext3D::compileShader(Platform3DObject)
1   0x7f955c1d2c45 WebCore::GraphicsContext3D::compileShader(unsigned int)
2   0x7f955c1e5748 WebCore::TextureMapperShaderProgram::TextureMapperShaderProgram(WTF::PassRefPtr&lt;WebCore::GraphicsContext3D&gt;, WTF::String const&amp;, WTF::String const&amp;)
3   0x7f955c1e6667 WebCore::TextureMapperShaderProgram::create(WTF::PassRefPtr&lt;WebCore::GraphicsContext3D&gt;, WTF::String const&amp;, WTF::String const&amp;)
4   0x7f955c1e6537 WebCore::TextureMapperShaderManager::getShaderProgram(unsigned int)
5   0x7f955c1dd597 WebCore::TextureMapperGL::drawTexture(unsigned int, int, WebCore::IntSize const&amp;, WebCore::FloatRect const&amp;, WebCore::TransformationMatrix const&amp;, float, WebCore::BitmapTexture const*, unsigned int)
6   0x7f955c1dd443 WebCore::TextureMapperGL::drawTexture(WebCore::BitmapTexture const&amp;, WebCore::FloatRect const&amp;, WebCore::TransformationMatrix const&amp;, float, WebCore::BitmapTexture const*, unsigned int)
7   0x7f955b7542f0 WebCore::TextureMapperTile::paint(WebCore::TextureMapper*, WebCore::TransformationMatrix const&amp;, float, WebCore::BitmapTexture*, unsigned int)
8   0x7f955f7ff40a WebKit::CoordinatedBackingStore::paintTilesToTextureMapper(WTF::Vector&lt;WebCore::TextureMapperTile*, 0ul&gt;&amp;, WebCore::TextureMapper*, WebCore::TransformationMatrix const&amp;, float, WebCore::BitmapTexture*, WebCore::FloatRect const&amp;)
9   0x7f955f7ff998 WebKit::CoordinatedBackingStore::paintToTextureMapper(WebCore::TextureMapper*, WebCore::FloatRect const&amp;, WebCore::TransformationMatrix const&amp;, float, WebCore::BitmapTexture*)
10  0x7f955b757b36 WebCore::TextureMapperLayer::paintSelf(WebCore::TextureMapperPaintOptions const&amp;)
11  0x7f955b757d37 WebCore::TextureMapperLayer::paintSelfAndChildren(WebCore::TextureMapperPaintOptions const&amp;)
12  0x7f955b758679 WebCore::TextureMapperLayer::paintSelfAndChildrenWithReplica(WebCore::TextureMapperPaintOptions const&amp;)
13  0x7f955b7587ab WebCore::TextureMapperLayer::paintRecursive(WebCore::TextureMapperPaintOptions const&amp;)
14  0x7f955b757ea3 WebCore::TextureMapperLayer::paintSelfAndChildren(WebCore::TextureMapperPaintOptions const&amp;)
15  0x7f955b758679 WebCore::TextureMapperLayer::paintSelfAndChildrenWithReplica(WebCore::TextureMapperPaintOptions const&amp;)
16  0x7f955b7587ab WebCore::TextureMapperLayer::paintRecursive(WebCore::TextureMapperPaintOptions const&amp;)
17  0x7f955b757ea3 WebCore::TextureMapperLayer::paintSelfAndChildren(WebCore::TextureMapperPaintOptions const&amp;)
18  0x7f955b758679 WebCore::TextureMapperLayer::paintSelfAndChildrenWithReplica(WebCore::TextureMapperPaintOptions const&amp;)
19  0x7f955b7587ab WebCore::TextureMapperLayer::paintRecursive(WebCore::TextureMapperPaintOptions const&amp;)
20  0x7f955b7576cd WebCore::TextureMapperLayer::paint()
21  0x7f955f80dc45 WebKit::LayerTreeRenderer::paintToCurrentGLContext(WebCore::TransformationMatrix const&amp;, float, WebCore::FloatRect const&amp;, unsigned int)
22  0x7f955f9565c9 EwkViewImpl::displayTimerFired(WebCore::Timer&lt;EwkViewImpl&gt;*)
23  0x7f955f95dc4c WebCore::Timer&lt;EwkViewImpl&gt;::fired()
24  0x7f955b6a8732 WebCore::ThreadTimers::sharedTimerFiredInternal()
25  0x7f955b6a8653 WebCore::ThreadTimers::sharedTimerFired()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798045</commentid>
    <comment_count>28</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-28 21:19:02 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; After this patch, below assertion failure has been reproduced in EFL WK2.
&gt; 
&gt; ASSERTION FAILED: GLCompileSuccess == GL_TRUE
&gt; WebKit/Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp(479) : void WebCore::GraphicsContext3D::compileShader(Platform3DObject)
&gt; 1   0x7f955c1d2c45 WebCore::GraphicsContext3D::compileShader(unsigned int)
&gt; 2   0x7f955c1e5748 WebCore::TextureMapperShaderProgram::TextureMapperShaderProgram(WTF::PassRefPtr&lt;WebCore::GraphicsContext3D&gt;, WTF::String const&amp;, WTF::String const&amp;)
&gt; 3   0x7f955c1e6667 WebCore::TextureMapperShaderProgram::create(WTF::PassRefPtr&lt;WebCore::GraphicsContext3D&gt;, WTF::String const&amp;, WTF::String const&amp;)
&gt; 4   0x7f955c1e6537 WebCore::TextureMapperShaderManager::getShaderProgram(unsigned int)
&gt; 5   0x7f955c1dd597 WebCore::TextureMapperGL::drawTexture(unsigned int, int, WebCore::IntSize const&amp;, WebCore::FloatRect const&amp;, WebCore::TransformationMatrix const&amp;, float, WebCore::BitmapTexture const*, unsigned int)
&gt; 6   0x7f955c1dd443 WebCore::TextureMapperGL::drawTexture(WebCore::BitmapTexture const&amp;, WebCore::FloatRect const&amp;, WebCore::TransformationMatrix const&amp;, float, WebCore::BitmapTexture const*, unsigned int)
&gt; 7   0x7f955b7542f0 WebCore::TextureMapperTile::paint(WebCore::TextureMapper*, WebCore::TransformationMatrix const&amp;, float, WebCore::BitmapTexture*, unsigned int)
&gt; 8   0x7f955f7ff40a WebKit::CoordinatedBackingStore::paintTilesToTextureMapper(WTF::Vector&lt;WebCore::TextureMapperTile*, 0ul&gt;&amp;, WebCore::TextureMapper*, WebCore::TransformationMatrix const&amp;, float, WebCore::BitmapTexture*, WebCore::FloatRect const&amp;)
&gt; 9   0x7f955f7ff998 WebKit::CoordinatedBackingStore::paintToTextureMapper(WebCore::TextureMapper*, WebCore::FloatRect const&amp;, WebCore::TransformationMatrix const&amp;, float, WebCore::BitmapTexture*)
&gt; 10  0x7f955b757b36 WebCore::TextureMapperLayer::paintSelf(WebCore::TextureMapperPaintOptions const&amp;)
&gt; 11  0x7f955b757d37 WebCore::TextureMapperLayer::paintSelfAndChildren(WebCore::TextureMapperPaintOptions const&amp;)
&gt; 12  0x7f955b758679 WebCore::TextureMapperLayer::paintSelfAndChildrenWithReplica(WebCore::TextureMapperPaintOptions const&amp;)
&gt; 13  0x7f955b7587ab WebCore::TextureMapperLayer::paintRecursive(WebCore::TextureMapperPaintOptions const&amp;)
&gt; 14  0x7f955b757ea3 WebCore::TextureMapperLayer::paintSelfAndChildren(WebCore::TextureMapperPaintOptions const&amp;)
&gt; 15  0x7f955b758679 WebCore::TextureMapperLayer::paintSelfAndChildrenWithReplica(WebCore::TextureMapperPaintOptions const&amp;)
&gt; 16  0x7f955b7587ab WebCore::TextureMapperLayer::paintRecursive(WebCore::TextureMapperPaintOptions const&amp;)
&gt; 17  0x7f955b757ea3 WebCore::TextureMapperLayer::paintSelfAndChildren(WebCore::TextureMapperPaintOptions const&amp;)
&gt; 18  0x7f955b758679 WebCore::TextureMapperLayer::paintSelfAndChildrenWithReplica(WebCore::TextureMapperPaintOptions const&amp;)
&gt; 19  0x7f955b7587ab WebCore::TextureMapperLayer::paintRecursive(WebCore::TextureMapperPaintOptions const&amp;)
&gt; 20  0x7f955b7576cd WebCore::TextureMapperLayer::paint()
&gt; 21  0x7f955f80dc45 WebKit::LayerTreeRenderer::paintToCurrentGLContext(WebCore::TransformationMatrix const&amp;, float, WebCore::FloatRect const&amp;, unsigned int)
&gt; 22  0x7f955f9565c9 EwkViewImpl::displayTimerFired(WebCore::Timer&lt;EwkViewImpl&gt;*)
&gt; 23  0x7f955f95dc4c WebCore::Timer&lt;EwkViewImpl&gt;::fired()
&gt; 24  0x7f955b6a8732 WebCore::ThreadTimers::sharedTimerFiredInternal()
&gt; 25  0x7f955b6a8653 WebCore::ThreadTimers::sharedTimerFired()

I&apos;ll get it fixed - please don&apos;t roll out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798048</commentid>
    <comment_count>29</comment_count>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-12-28 21:24:00 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; I&apos;ll get it fixed - please don&apos;t roll out.

ok. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798049</commentid>
    <comment_count>30</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-28 21:24:47 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; (In reply to comment #28)
&gt; &gt; I&apos;ll get it fixed - please don&apos;t roll out.
&gt; 
&gt; ok. :)

Created bug https://bugs.webkit.org/show_bug.cgi?id=105848</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180089</attachid>
            <date>2012-12-18 21:41:07 -0800</date>
            <delta_ts>2012-12-19 06:20:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105377-20121218213827.patch</filename>
            <type>text/plain</type>
            <size>39462</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjk2YTBiODA3ZTIwZTMy
NjBmNzQxZmQ5ZTgxMzUwZWYzZDZiZmRmZS4uNGIxYWY3ZDU4MDA4MjYwM2FlZWFkOTBiMmZkZDQ1
MzY3ZmMxNThkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTEyLTE4ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1RleG1hcF0gRWRnZSBh
bnRpYWxpYXNpbmcgaW4gVGV4dHVyZU1hcHBlciBjb3VsZCBiZSBkb25lIHdpdGggbGVzcyBwZXIt
cGl4ZWwgY2FsbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwNTM3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEluc3RlYWQgb2YgcGFzc2luZyA4IHF1YWQgZWRnZSBjb2VmZmljaWVudHMgYXMgdW5pZm9y
bXMgYW5kIGFuYWx5emUgdGhlIGRpc3RhbmNlIGluIHRoZQorICAgICAgICBmcmFnbWVudCBzaGFk
ZXIsIHdlIHJlbmRlciB0aGUgYW50aWFsaWFzZWQgcXVhZCBhcyA0IGVkZ2UgdHJpYW5nbGVzLCB3
aGljaCBvcmlnaW5hdGUgaW4gdGhlCisgICAgICAgIGNlbnRlciBvZiB0aGUgcXVhZC4gCisKKyAg
ICAgICAgVGhlIHZlcnRleCBzaGFkZXIgZXhwYW5kcyB0aGUgcXVhZCBiYXNlZCBvbiB0aGUgc2Ny
ZWVuIHRyYW5zZm9ybSwgYW5kIGFwcGxpZXMgYSB2YWx1ZSB0byBlYWNoIHZlcnRleCB0byBiZSBp
bnRlcnBvbGF0ZWQgYnkgdGhlIEdQVS4gCisKKyAgICAgICAgSXQgaXMgdmVyeSBkaWZmaWN1bHQg
dG8gdGVzdCBwZXJmb3JtYW5jZSBnYWluOyBIb3dldmVyLCB0aGUgZm9sbG93aW5nIGlzIGFwcGFy
ZW50OgorICAgICAgICAqIFRoZSBtYXRyaXggbXVsdGlwbGljYXRpb25zIGFuZCBpbnZlcnNpb25z
IGRvbmUgYmVmb3JlIGluIHRoZSBxdWFkIGluZmxhdGlvbiBjb2RlIHdlcmUKKyAgICAgICAgICBh
bHdheXMgdmlzaWJsZSBpbiBpbnN0cnVtZW50cy92YWxncmluZCBhbmQgdGhleSBhcmUgbm93IGdv
bmUuCisgICAgICAgICogV2Ugbm93IHBlcmZvcm0gYSBzaW5nbGUgc21vb3Roc3RlcCgpIGNvbW1h
bmQgcGVyIHBpeGVsIGluc3RlYWQgb2YgOCBjbGFtcChkb3QoKSkgY29tbWFuZHMuCisgICAgICAg
ICogSXQgc2hvdWxkIG5vdyBiZSBwb3NzaWJsZSB0byBhbnRpYWxpYXMgaW5kaXZpZHVhbCBlZGdl
cy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpnZXRTdGF0aWNWQk8pOgorICAgICAgICAgICAgQ2Fj
aGUgdGhlIHVuaXQtcmVjdCBhbmQgZWRnZS10cmlhbmdsZSB2ZXJ0ZXggZGF0YSBpbiBhIFZCTy4K
KworICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6flRleHR1cmVNYXBwZXJH
TERhdGEpOgorICAgICAgICAgICAgQ2xlYXIgdGhlIGNhY2hlZCBWQk9zIHVwb24gZGVzdHJ1Y3Rp
b24uCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlkQ29sb3IpOgorICAg
ICAgICAgICAgVXNlIHRoZSBuZXcgc2lnbmF0dXJlICJkcmF3IiBpbnN0ZWFkIG9mICJkcmF3UXVh
ZCIuCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0VkZ2VUcmlhbmds
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VW5pdFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3KToKKyAgICAgICAgICAgIFJl
bW92ZWQgRHJhd1F1YWQsIGluc3RlYWQgZHJhdyBlaXRoZXIgYSB1bml0IHJlY3Qgb3IgZWRnZSB0
cmlhbmdsZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlw
KToKKyAgICAgICAgICAgIFVzZSB0aGUgbmV3IHNldE1hdHJpeCBmdW5jdGlvbi4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaDoKKyAgICAgICAg
ICAgIEFkZGVkIGEgcGFpbnQgZmxhZyBmb3IgYW50aWFsaWFzaW5nLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpzZXRNYXRyaXgpOgor
ICAgICAgICAgICAgU2luY2Ugd2Ugbm93IHNldCB0aGUgbWF0cml4IGluIG11bHRpcGxlIGxvY2F0
aW9ucywgYWRkZWQgYSBjb252ZW5pZW5jZSAKKyAgICAgICAgICAgIGZ1bmN0aW9uIGZvciBtYXRy
aXggdW5pZm9ybS4KKworICAgICAgICAoV2ViQ29yZTo6Z2V0U2hhZGVyU3BlYyk6CisgICAgICAg
ICAgICBVcGRhdGUgdGhlIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVyIHRvIGFjY291bnQgZm9y
IHRoZSBuZXcgYW50aWFsaWFzaW5nCisgICAgICAgICAgICBtZWNoYW5pc20uCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmg6Cisg
ICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisKIDIwMTItMTItMTIgIE5vJ2Ft
IFJvc2VudGhhbCAgPG5vYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbVGV4bWFwXSBJbnN0ZWFk
IG9mIGhhdmluZyBtdWx0aXBsZSBzaGFkZXJzIHNvdXJjZXMgd2l0aCBsb3RzIG9mIGR1cGxpY2F0
aW9uLCB3ZSBzaG91bGQgaGF2ZSBvbmUgc2hhZGVyIHNvdXJjZSB3aXRoIE1BQ1JPIHZhcmlhbnRz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDkxYjRhZTI5YWVlOTcwOTczOGNmYzlkMjVhNDBj
YzBlMGNiMDJmODAuLmY2MjAzNGQ2ZTRkZjI5NmFjZWEzOWYzY2E5ZjdmMjFhZjZiYTk4MWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0xMjUsNiArMTI1LDkgQEAgcHVibGljOgogICAgICAg
ICAsIG1fc2hhcmVkR0xEYXRhKFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6Y3Vy
cmVudFNoYXJlZEdMRGF0YSh0aGlzLT5jb250ZXh0KSkKICAgICB7IH0KIAorICAgIH5UZXh0dXJl
TWFwcGVyR0xEYXRhKCk7CisgICAgUGxhdGZvcm0zRE9iamVjdCBnZXRTdGF0aWNWQk8oR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIsIGNvbnN0IHZvaWQqIGRhdGEpOworCiAgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQ7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcHJvamVjdGlv
bk1hdHJpeDsKICAgICBUZXh0dXJlTWFwcGVyOjpQYWludEZsYWdzIFBhaW50RmxhZ3M7CkBAIC0x
MzcsOCArMTQwLDI5IEBAIHB1YmxpYzoKICAgICBHQzNEaW50IHByZXZpb3VzU2Npc3Nvcls0XTsK
ICAgICBSZWZQdHI8U2hhcmVkR0xEYXRhPiBtX3NoYXJlZEdMRGF0YTsKICAgICBSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gY3VycmVudFN1cmZhY2U7CisgICAgSGFzaE1hcDxjb25zdCB2b2lkKiwgUGxh
dGZvcm0zRE9iamVjdD4gdmJvczsKIH07CiAKK1BsYXRmb3JtM0RPYmplY3QgVGV4dHVyZU1hcHBl
ckdMRGF0YTo6Z2V0U3RhdGljVkJPKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUs
IGNvbnN0IHZvaWQqIGRhdGEpCit7CisgICAgSGFzaE1hcDxjb25zdCB2b2lkKiwgUGxhdGZvcm0z
RE9iamVjdD46Oml0ZXJhdG9yIGl0ID0gdmJvcy5maW5kKGRhdGEpOworICAgIGlmIChpdCAhPSB2
Ym9zLmVuZCgpKQorICAgICAgICByZXR1cm4gaXQtPnZhbHVlOworCisgICAgUGxhdGZvcm0zRE9i
amVjdCB2Ym8gPSBjb250ZXh0LT5jcmVhdGVCdWZmZXIoKTsKKyAgICBjb250ZXh0LT5iaW5kQnVm
ZmVyKHRhcmdldCwgdmJvKTsKKyAgICBjb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwg
ZGF0YSwgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKKyAgICB2Ym9zLmFkZChkYXRh
LCB2Ym8pOworICAgIHJldHVybiB2Ym87Cit9CisKK1RleHR1cmVNYXBwZXJHTERhdGE6On5UZXh0
dXJlTWFwcGVyR0xEYXRhKCkKK3sKKyAgICBIYXNoTWFwPGNvbnN0IHZvaWQqLCBQbGF0Zm9ybTNE
T2JqZWN0Pjo6aXRlcmF0b3IgZW5kID0gdmJvcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hNYXA8Y29u
c3Qgdm9pZCosIFBsYXRmb3JtM0RPYmplY3Q+OjppdGVyYXRvciBpdCA9IHZib3MuYmVnaW4oKTsg
aXQgIT0gdmJvcy5lbmQoKTsgKytpdCkKKyAgICAgICAgY29udGV4dC0+ZGVsZXRlQnVmZmVyKGl0
LT52YWx1ZSk7Cit9CisKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2s6OmluaXQoY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBjbGlwU3RhY2suY2xlYXIoKTsKQEAgLTI2OSw0MiAr
MjkzLDYgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmVuZFBhaW50aW5nKCkKICNlbmRpZgogfQog
Ci12b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmIHF1YWRUb0Ry
YXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtKiBzaGFkZXJQcm9ncmFtLCBHQzNEZW51bSBkcmF3aW5nTW9kZSwg
RmxhZ3MgZmxhZ3MpCi17Ci0gICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KHNoYWRlclByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwotICAgIG1fY29udGV4dDNELT5iaW5k
QnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDApOwotCi0gICAgY29uc3Qg
R0MzRGZsb2F0IHF1YWRbXSA9IHsKLSAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVk
VG9Vbml0U3F1YXJlLnAxKCkueCgpLCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRT
cXVhcmUucDEoKS55KCksCi0gICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5p
dFNxdWFyZS5wMigpLngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJl
LnAyKCkueSgpLAotICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVh
cmUucDMoKS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMygp
LnkoKSwKLSAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnA0
KCkueCgpLCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDQoKS55KCkK
LSAgICB9OwotICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlclByb2dy
YW0tPnZlcnRleExvY2F0aW9uKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2Us
IDAsIEdDM0RpbnRwdHIocXVhZCkpOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4
ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpLm11bHRpcGx5
KG1vZGVsVmlld01hdHJpeCkubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgoCi0gICAgICAg
ICAgICBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFyZ2V0UmVjdC53aWR0aCgpLCAwLCAwLCAwLAotICAg
ICAgICAgICAgMCwgcXVhZFRvRHJhdy5vcmlnaW5hbFRhcmdldFJlY3QuaGVpZ2h0KCksIDAsIDAs
Ci0gICAgICAgICAgICAwLCAwLCAxLCAwLAotICAgICAgICAgICAgcXVhZFRvRHJhdy5vcmlnaW5h
bFRhcmdldFJlY3QueCgpLCBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFyZ2V0UmVjdC55KCksIDAsIDEp
KTsKLSAgICBHQzNEZmxvYXQgbTRbXSA9IHsKLSAgICAgICAgbWF0cml4Lm0xMSgpLCBtYXRyaXgu
bTEyKCksIG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAotICAgICAgICBtYXRyaXgubTIxKCks
IG1hdHJpeC5tMjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCi0gICAgICAgIG1hdHJp
eC5tMzEoKSwgbWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQoKSwKLSAgICAg
ICAgbWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0cml4Lm00NCgp
Ci0gICAgfTsKLSAgICBtX2NvbnRleHQzRC0+dW5pZm9ybU1hdHJpeDRmdihzaGFkZXJQcm9ncmFt
LT5tYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgbTQpOwotCi0gICAgaWYgKGZsYWdzICYgU2hv
dWxkQmxlbmQpIHsKLSAgICAgICAgbV9jb250ZXh0M0QtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRl
eHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7Ci0gICAg
ICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJM
RU5EKTsKLQotICAgIG1fY29udGV4dDNELT5kcmF3QXJyYXlzKGRyYXdpbmdNb2RlLCAwLCA0KTsK
LSAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0t
PnZlcnRleExvY2F0aW9uKCkpOwotfQotCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRl
cihjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHdpZHRoLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgpCiB7CiAg
ICAgaWYgKGNsaXBTdGFjaygpLmN1cnJlbnQoKS5zY2lzc29yQm94LmlzRW1wdHkoKSkKQEAgLTMx
OCw3ICszMDYsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcihjb25zdCBDb2xv
ciYgY29sb3IsIGZsb2F0IHdpZHRoLCBjb25zdCBGbG9hdFJlYwogICAgIG1fY29udGV4dDNELT51
bmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICBtX2Nv
bnRleHQzRC0+bGluZVdpZHRoKHdpZHRoKTsKIAotICAgIGRyYXdRdWFkKHRhcmdldFJlY3QsIG1v
ZGVsVmlld01hdHJpeCwgcHJvZ3JhbS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9P
UCwgY29sb3IuaGFzQWxwaGEoKSA/IFNob3VsZEJsZW5kIDogMCk7CisgICAgZHJhdyh0YXJnZXRS
ZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0uZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpM
SU5FX0xPT1AsIGNvbG9yLmhhc0FscGhhKCkgPyBTaG91bGRCbGVuZCA6IDApOwogfQogCiB2b2lk
IFRleHR1cmVNYXBwZXJHTDo6ZHJhd1JlcGFpbnRDb3VudGVyKGludCB2YWx1ZSwgaW50IHBvaW50
U2l6ZSwgY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtb2RlbFZpZXdNYXRyaXgpCkBAIC00MDYsMTAgKzM5NCw5IEBAIHZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpkcmF3VGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEZsYWdzIGZs
YWdzLCBjb25zdCBJCiB7CiAgICAgYm9vbCB1c2VSZWN0ID0gZmxhZ3MgJiBTaG91bGRVc2VBUkJU
ZXh0dXJlUmVjdDsKICAgICBib29sIG1hc2tlZCA9ICEhbWFza1RleHR1cmU7Ci0gICAgYm9vbCBu
ZWVkc0FudGlhbGlhc2luZyA9IG1fZW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nICYmICFt
b2RlbFZpZXdNYXRyaXguaXNJbnRlZ2VyVHJhbnNsYXRpb24oKTsKLQotICAgIGlmICghdXNlUmVj
dCAmJiBuZWVkc0FudGlhbGlhc2luZyAmJiBkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodGV4
dHVyZSwgZmxhZ3MsIHRleHR1cmVTaXplLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9w
YWNpdHksIG1hc2tUZXh0dXJlLCBleHBvc2VkRWRnZXMpKQotICAgICAgICByZXR1cm47CisgICAg
Ym9vbCB1c2VBbnRpYWxpYXNpbmcgPSBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZwor
ICAgICAgICAmJiBleHBvc2VkRWRnZXMgPT0gQWxsRWRnZXMKKyAgICAgICAgJiYgIW1vZGVsVmll
d01hdHJpeC5tYXBRdWFkKHRhcmdldFJlY3QpLmlzUmVjdGlsaW5lYXIoKTsKIAogICAgIFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcHRpb25zIG9wdGlvbnMgPSBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6VGV4dHVyZTsKICAgICBpZiAobWFza2VkKQpAQCAtNDE4LDE2MyArNDA1LDk2
IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRl
eHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJCiAgICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OlJlY3Q7CiAgICAgaWYgKG9wYWNpdHkgPCAxKQogICAgICAgICBv
cHRpb25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5OworICAgIGlmICh1
c2VBbnRpYWxpYXNpbmcpIHsKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6QW50aWFsaWFzOworICAgICAgICBmbGFncyB8PSBTaG91bGRBbnRpYWxpYXM7Cisg
ICAgfQorCisgICAgaWYgKG1hc2tlZCB8fCB1c2VBbnRpYWxpYXNpbmcgfHwgb3BhY2l0eSA8IDEp
CisgICAgICAgIGZsYWdzIHw9IFNob3VsZEJsZW5kOwogCiAgICAgUmVmUHRyPFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtOwogICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xE
YXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25z
KTsKLSAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7Ci0K
ICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgdGV4dHVyZSwg
ZmxhZ3MsIHRleHR1cmVTaXplLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHks
IG1hc2tUZXh0dXJlKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9y
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJp
eCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpT
b2xpZENvbG9yKTsKKyAgICBGbGFncyBmbGFncyA9IDA7CisgICAgVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6Ok9wdGlvbnMgb3B0aW9ucyA9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpT
b2xpZENvbG9yOworICAgIGlmICghbWF0cml4Lm1hcFF1YWQocmVjdCkuaXNSZWN0aWxpbmVhcigp
KSB7CisgICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkFudGlh
bGlhczsKKyAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQgfCBTaG91bGRBbnRpYWxpYXM7Cisg
ICAgfQorCisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0g
ZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRl
clByb2dyYW0ob3B0aW9ucyk7CiAgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+
cHJvZ3JhbUlEKCkpOwogCiAgICAgZmxvYXQgciwgZywgYiwgYTsKICAgICBjb2xvci5nZXRSR0JB
KHIsIGcsIGIsIGEpOwogICAgIG1fY29udGV4dDNELT51bmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JM
b2NhdGlvbigpLCByLCBnLCBiLCBhKTsKKyAgICBpZiAoYSA8IDEpCisgICAgICAgIGZsYWdzIHw9
IFNob3VsZEJsZW5kOwogCi0gICAgZHJhd1F1YWQocmVjdCwgbWF0cml4LCBwcm9ncmFtLmdldCgp
LCBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCBhIDwgMSA/IFNob3VsZEJsZW5kIDog
MCk7Ci19Ci0KLXN0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2aWV3cG9ydE1hdHJpeChHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dDNEKQotewotICAgIEdDM0RpbnQgdmlld3BvcnRbNF07Ci0g
ICAgY29udGV4dDNELT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQsIHZp
ZXdwb3J0KTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKLSAgICBtYXRyaXgu
dHJhbnNsYXRlM2Qodmlld3BvcnRbMF0sIHZpZXdwb3J0WzFdLCAwKTsKLSAgICBtYXRyaXguc2Nh
bGUzZCh2aWV3cG9ydFsyXSwgdmlld3BvcnRbM10sIDApOwotCi0gICAgLy8gTWFwIHgsIHkgYW5k
IHogdG8gdW5pdCBzcXVhcmUgZnJvbSBPcGVuR0wgbm9ybWFsaXplZCBkZXZpY2UKLSAgICAvLyBj
b29yZGluYXRlcyB3aGljaCBhcmUgLTEgdG8gMSBvbiBldmVyeSBheGlzLgotICAgIG1hdHJpeC50
cmFuc2xhdGUzZCgwLjUsIDAuNSwgMC41KTsKLSAgICBtYXRyaXguc2NhbGUzZCgwLjUsIDAuNSwg
MC41KTsKLQotICAgIHJldHVybiBtYXRyaXg7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjYWxlTGluZUVx
dWF0aW9uQ29lZmZlY2llbnRzVG9PcHRpbWl6ZURpc3RhbmNlQ2FsY3VsYXRpb24oZmxvYXQqIGNv
ZWZmZWNpZW50cykKLXsKLSAgICAvLyBJbiB0aGUgZnJhZ21lbnQgc2hhZGVyIHdlIHdhbnQgdG8g
Y2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBmcm9tIHRoaXMKLSAgICAvLyBsaW5lIHRvIGEgcG9pbnQg
KHApLCB3aGljaCBpcyBnaXZlbiBieSB0aGUgZm9ybXVsYToKLSAgICAvLyAoQSpwLnggKyBCKnAu
eSArIEMpIC8gc3FydCAoYV4yICsgYl4yKQotICAgIC8vIFdlIGNhbiBkbyBhIHNtYWxsIGFtb3Vu
dCBvZiBwcmVjYWxjdWxhdGlvbiBoZXJlIHRvIHJlZHVjZSB0aGUKLSAgICAvLyBhbW91bnQgb2Yg
bWF0aCBpbiB0aGUgc2hhZGVyIGJ5IHNjYWxpbmcgdGhlIGNvZWZmZWNpZW50cyBub3cuCi0gICAg
ZmxvYXQgc2NhbGUgPSAxLjAgLyBGbG9hdFBvaW50KGNvZWZmZWNpZW50c1swXSwgY29lZmZlY2ll
bnRzWzFdKS5sZW5ndGgoKTsKLSAgICBjb2VmZmVjaWVudHNbMF0gPSBjb2VmZmVjaWVudHNbMF0g
KiBzY2FsZTsKLSAgICBjb2VmZmVjaWVudHNbMV0gPSBjb2VmZmVjaWVudHNbMV0gKiBzY2FsZTsK
LSAgICBjb2VmZmVjaWVudHNbMl0gPSBjb2VmZmVjaWVudHNbMl0gKiBzY2FsZTsKLX0KLQotc3Rh
dGljIHZvaWQgZ2V0U3RhbmRhcmRFcXVhdGlvbkNvZWZmZWNpZW50c0ZvckxpbmUoY29uc3QgRmxv
YXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCogY29lZmZlY2llbnRzKQot
ewotICAgIC8vIEdpdmVuIHR3byBwb2ludHMsIHRoZSBzdGFuZGFyZCBlcXVhdGlvbiBvZiBhIGxp
bmUgKEF4ICsgQnkgKyBDID0gMCkKLSAgICAvLyBjYW4gYmUgY2FsY3VsYXRlZCB2aWEgdGhlIGZv
cm11bGE6Ci0gICAgLy8gKHAxLnkg4oCTIHAyLnkpeCArIChwMS54IOKAkyBwMi54KXkgKyAoKHAx
LngqcDIueSkg4oCTIChwMi54KnAxLnkpKSA9IDAKLSAgICBjb2VmZmVjaWVudHNbMF0gPSBwMS55
KCkgLSBwMi55KCk7Ci0gICAgY29lZmZlY2llbnRzWzFdID0gcDIueCgpIC0gcDEueCgpOwotICAg
IGNvZWZmZWNpZW50c1syXSA9IHAxLngoKSAqIHAyLnkoKSAtIHAyLngoKSAqIHAxLnkoKTsKLSAg
ICBzY2FsZUxpbmVFcXVhdGlvbkNvZWZmZWNpZW50c1RvT3B0aW1pemVEaXN0YW5jZUNhbGN1bGF0
aW9uKGNvZWZmZWNpZW50cyk7CisgICAgZHJhdyhyZWN0LCBtYXRyaXgsIHByb2dyYW0uZ2V0KCks
IEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIGZsYWdzKTsKIH0KIAotc3RhdGljIHZv
aWQgcXVhZFRvRWRnZUFycmF5KGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgZmxvYXQqIGVkZ2VBcnJh
eSkKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3RWRnZVRyaWFuZ2xlcyhUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbSogcHJvZ3JhbSkKIHsKLSAgICBpZiAocXVhZC5pc0NvdW50ZXJjbG9ja3dp
c2UoKSkgewotICAgICAgICBnZXRTdGFuZGFyZEVxdWF0aW9uQ29lZmZlY2llbnRzRm9yTGluZShx
dWFkLnA0KCksIHF1YWQucDMoKSwgZWRnZUFycmF5KTsKLSAgICAgICAgZ2V0U3RhbmRhcmRFcXVh
dGlvbkNvZWZmZWNpZW50c0ZvckxpbmUocXVhZC5wMygpLCBxdWFkLnAyKCksIGVkZ2VBcnJheSAr
IDMpOwotICAgICAgICBnZXRTdGFuZGFyZEVxdWF0aW9uQ29lZmZlY2llbnRzRm9yTGluZShxdWFk
LnAyKCksIHF1YWQucDEoKSwgZWRnZUFycmF5ICsgNik7Ci0gICAgICAgIGdldFN0YW5kYXJkRXF1
YXRpb25Db2VmZmVjaWVudHNGb3JMaW5lKHF1YWQucDEoKSwgcXVhZC5wNCgpLCBlZGdlQXJyYXkg
KyA5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBnZXRTdGFuZGFyZEVxdWF0aW9uQ29l
ZmZlY2llbnRzRm9yTGluZShxdWFkLnA0KCksIHF1YWQucDEoKSwgZWRnZUFycmF5KTsKLSAgICBn
ZXRTdGFuZGFyZEVxdWF0aW9uQ29lZmZlY2llbnRzRm9yTGluZShxdWFkLnAxKCksIHF1YWQucDIo
KSwgZWRnZUFycmF5ICsgMyk7Ci0gICAgZ2V0U3RhbmRhcmRFcXVhdGlvbkNvZWZmZWNpZW50c0Zv
ckxpbmUocXVhZC5wMigpLCBxdWFkLnAzKCksIGVkZ2VBcnJheSArIDYpOwotICAgIGdldFN0YW5k
YXJkRXF1YXRpb25Db2VmZmVjaWVudHNGb3JMaW5lKHF1YWQucDMoKSwgcXVhZC5wNCgpLCBlZGdl
QXJyYXkgKyA5KTsKKyAgICBjb25zdCBHQzNEZmxvYXQgTGVmdCA9IDA7CisgICAgY29uc3QgR0Mz
RGZsb2F0IFRvcCA9IDA7CisgICAgY29uc3QgR0MzRGZsb2F0IFJpZ2h0ID0gMTsKKyAgICBjb25z
dCBHQzNEZmxvYXQgQm90dG9tID0gMTsKKyAgICBjb25zdCBHQzNEZmxvYXQgQ2VudGVyID0gMC41
OworI2RlZmluZSBTSURFX1RSSUFOR0xFKHgxLHkxLHgyLHkyKSB4MSwgeTEsIHgxLCB5MSwgeDIs
IHkyLCB4MiwgeTIsIENlbnRlciwgQ2VudGVyLCAoeDEgKyB4MikgLyAyLCAoeTEgKyB5MikgLyAy
CisgICAgc3RhdGljIGNvbnN0IEdDM0RmbG9hdCB1bml0UmVjdFNpZGVUcmlhbmdsZXNbXSA9IHsK
KyAgICAgICAgU0lERV9UUklBTkdMRShMZWZ0LCBUb3AsIFJpZ2h0LCBUb3ApLAorICAgICAgICBT
SURFX1RSSUFOR0xFKExlZnQsIFRvcCwgTGVmdCwgQm90dG9tKSwKKyAgICAgICAgU0lERV9UUklB
TkdMRShSaWdodCwgVG9wLCBSaWdodCwgQm90dG9tKSwKKyAgICAgICAgU0lERV9UUklBTkdMRShM
ZWZ0LCBCb3R0b20sIFJpZ2h0LCBCb3R0b20pCisgICAgfTsKKyN1bmRlZiBTSURFX1RSSUFOR0xF
CisgICAgUGxhdGZvcm0zRE9iamVjdCB2Ym8gPSBkYXRhKCkuZ2V0U3RhdGljVkJPKEdyYXBoaWNz
Q29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHNpemVvZihHQzNEZmxvYXQpICogNDgsIHVuaXRSZWN0
U2lkZVRyaWFuZ2xlcyk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgdmJvKTsKKyAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmli
UG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhHcmFwaGlj
c0NvbnRleHQzRDo6VFJJQU5HTEVTLCAwLCAxMik7CiB9CiAKLXN0YXRpYyBGbG9hdFNpemUgc2Nh
bGVkVmVjdG9yRGlmZmVyZW5jZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MiwgZmxvYXQgc2NhbGUpCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1Vu
aXRSZWN0KFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCBHQzNEZW51bSBkcmF3
aW5nTW9kZSkKIHsKLSAgICBGbG9hdFNpemUgdmVjdG9yID0gcG9pbnQxIC0gcG9pbnQyOwotICAg
IGlmICh2ZWN0b3IuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkpCi0gICAgICAgIHZlY3Rvci5zY2Fs
ZSgxLjAgLyB2ZWN0b3IuZGlhZ29uYWxMZW5ndGgoKSk7Ci0KLSAgICB2ZWN0b3Iuc2NhbGUoc2Nh
bGUpOwotICAgIHJldHVybiB2ZWN0b3I7CisgICAgc3RhdGljIGNvbnN0IEdDM0RmbG9hdCB1bml0
UmVjdFtdID0geyAwLCAwLCAxLCAwLCAxLCAxLCAwLCAxIH07CisgICAgUGxhdGZvcm0zRE9iamVj
dCB2Ym8gPSBkYXRhKCkuZ2V0U3RhdGljVkJPKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZG
RVIsIHNpemVvZihHQzNEZmxvYXQpICogOCwgdW5pdFJlY3QpOworICAgIG1fY29udGV4dDNELT5i
aW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHZibyk7CisgICAgbV9j
b250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSwg
MiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgbV9jb250ZXh0
M0QtPmRyYXdBcnJheXMoZHJhd2luZ01vZGUsIDAsIDQpOwogfQogCi1zdGF0aWMgRmxvYXRRdWFk
IGluZmxhdGVRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgZmxvYXQgZGlzdGFuY2UpCit2b2lk
IFRleHR1cmVNYXBwZXJHTDo6ZHJhdyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtKiBzaGFkZXJQcm9ncmFtLCBHQzNEZW51bSBkcmF3aW5nTW9kZSwgRmxhZ3MgZmxhZ3MpCiB7
Ci0gICAgRmxvYXRRdWFkIGV4cGFuZGVkUXVhZCA9IHF1YWQ7Ci0gICAgZXhwYW5kZWRRdWFkLnNl
dFAxKGV4cGFuZGVkUXVhZC5wMSgpICsgc2NhbGVkVmVjdG9yRGlmZmVyZW5jZShxdWFkLnAxKCks
IHF1YWQucDIoKSwgZGlzdGFuY2UpKTsKLSAgICBleHBhbmRlZFF1YWQuc2V0UDQoZXhwYW5kZWRR
dWFkLnA0KCkgKyBzY2FsZWRWZWN0b3JEaWZmZXJlbmNlKHF1YWQucDQoKSwgcXVhZC5wMygpLCBk
aXN0YW5jZSkpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9CisgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4KG1vZGVsVmlld01hdHJpeCkKKyAgICAgICAgICAgIC5tdWx0aXBs
eShUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVjdChGbG9hdFJlY3QoMCwgMCwgMSwgMSks
IHJlY3QpKTsKIAotICAgIGV4cGFuZGVkUXVhZC5zZXRQMShleHBhbmRlZFF1YWQucDEoKSArIHNj
YWxlZFZlY3RvckRpZmZlcmVuY2UocXVhZC5wMSgpLCBxdWFkLnA0KCksIGRpc3RhbmNlKSk7Ci0g
ICAgZXhwYW5kZWRRdWFkLnNldFAyKGV4cGFuZGVkUXVhZC5wMigpICsgc2NhbGVkVmVjdG9yRGlm
ZmVyZW5jZShxdWFkLnAyKCksIHF1YWQucDMoKSwgZGlzdGFuY2UpKTsKKyAgICBtX2NvbnRleHQz
RC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRpb24o
KSk7CisgICAgc2hhZGVyUHJvZ3JhbS0+c2V0TWF0cml4KHNoYWRlclByb2dyYW0tPm1vZGVsVmll
d01hdHJpeExvY2F0aW9uKCksIG1hdHJpeCk7CisgICAgc2hhZGVyUHJvZ3JhbS0+c2V0TWF0cml4
KHNoYWRlclByb2dyYW0tPnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpLCBkYXRhKCkucHJvamVj
dGlvbk1hdHJpeCk7CiAKLSAgICBleHBhbmRlZFF1YWQuc2V0UDIoZXhwYW5kZWRRdWFkLnAyKCkg
KyBzY2FsZWRWZWN0b3JEaWZmZXJlbmNlKHF1YWQucDIoKSwgcXVhZC5wMSgpLCBkaXN0YW5jZSkp
OwotICAgIGV4cGFuZGVkUXVhZC5zZXRQMyhleHBhbmRlZFF1YWQucDMoKSArIHNjYWxlZFZlY3Rv
ckRpZmZlcmVuY2UocXVhZC5wMygpLCBxdWFkLnA0KCksIGRpc3RhbmNlKSk7CisgICAgaWYgKGZs
YWdzICYgU2hvdWxkQmxlbmQpIHsKKyAgICAgICAgbV9jb250ZXh0M0QtPmJsZW5kRnVuYyhHcmFw
aGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBI
QSk7CisgICAgICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5E
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250
ZXh0M0Q6OkJMRU5EKTsKIAotICAgIGV4cGFuZGVkUXVhZC5zZXRQMyhleHBhbmRlZFF1YWQucDMo
KSArIHNjYWxlZFZlY3RvckRpZmZlcmVuY2UocXVhZC5wMygpLCBxdWFkLnAyKCksIGRpc3RhbmNl
KSk7Ci0gICAgZXhwYW5kZWRRdWFkLnNldFA0KGV4cGFuZGVkUXVhZC5wNCgpICsgc2NhbGVkVmVj
dG9yRGlmZmVyZW5jZShxdWFkLnA0KCksIHF1YWQucDEoKSwgZGlzdGFuY2UpKTsKKyAgICBpZiAo
ZmxhZ3MgJiBTaG91bGRBbnRpYWxpYXMpCisgICAgICAgIGRyYXdFZGdlVHJpYW5nbGVzKHNoYWRl
clByb2dyYW0pOworICAgIGVsc2UKKyAgICAgICAgZHJhd1VuaXRSZWN0KHNoYWRlclByb2dyYW0s
IGRyYXdpbmdNb2RlKTsKIAotICAgIHJldHVybiBleHBhbmRlZFF1YWQ7CisgICAgbV9jb250ZXh0
M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlv
bigpKTsKIH0KLQotYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlV2l0aEFudGlhbGlh
c2luZyh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYgc2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiBvcmlnaW5hbFRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1
cmUqIG1hc2tUZXh0dXJlLCB1bnNpZ25lZCBleHBvc2VkRWRnZXMpCit2b2lkIFRleHR1cmVNYXBw
ZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtKiBwcm9ncmFtLCB1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6
ZSYgc2l6ZSwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBt
YXNrVGV4dHVyZSkKIHsKLSAgICAvLyBUaGUgYW50aWFsaWFzaW5nIHBhdGggZG9lcyBub3Qgc3Vw
cG9ydCBtYXNrIHRleHR1cmVzIGF0IHRoZSBtb21lbnQuCi0gICAgaWYgKG1hc2tUZXh0dXJlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGb3Igbm93IHdlIHB1bnQgb24gcmVuZGVy
aW5nIHRpbGVkIGxheWVycyB3aXRoIGFudGlhbGlhc2luZy4gSXQncyBxdWl0ZSBoYXJkCi0gICAg
Ly8gdG8gcmVuZGVyIHRoZW0gd2l0aG91dCBzZWFtcy4KLSAgICBpZiAoZXhwb3NlZEVkZ2VzICE9
IEFsbEVkZ2VzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBUaGUgZ29hbCBoZXJl
IGlzIHJlbmRlciBhIHNsaWdodGx5IGxhcmdlciAoMC43NSBwaXhlbHMgaW4gc2NyZWVuIHNwYWNl
KSBxdWFkIGFuZCB0bwotICAgIC8vIGdyYWR1YWxseSB0YXBlciBvZmYgdGhlIGFscGhhIHZhbHVl
cyB0byBkbyBhIHNpbXBsZSB2ZXJzaW9uIG9mIGVkZ2UgZGlzdGFuY2UKLSAgICAvLyBhbnRpYWxp
YXNpbmcuIE5vdGUgaGVyZSB0aGF0IHdlIGFyZSBhbHNvIGluY2x1ZGluZyB0aGUgdmlld3BvcnQg
bWF0cml4ICh3aGljaAotICAgIC8vIHRyYW5zbGF0ZXMgZnJvbSBub3JtYWxpemVkIGRldmljZSBj
b29yZGluYXRlcyB0byBzY3JlZW4gY29vcmRpbmF0ZXMpLCBiZWNhdXNlIHRoZXNlCi0gICAgLy8g
dmFsdWVzIGFyZSBjb25zdW1lZCBpbiB0aGUgZnJhZ21lbnQgc2hhZGVyLCB3aGljaCB3b3JrcyBp
biBzY3JlZW4gY29vcmRpbmF0ZXMuCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0gPSB2aWV3cG9ydE1hdHJpeChtX2NvbnRleHQzRC5nZXQoKSkubXVsdGlwbHko
VHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpKS5tdWx0aXBseSht
b2RlbFZpZXdNYXRyaXgpLnRvMmRUcmFuc2Zvcm0oKTsKLSAgICBpZiAoIXNjcmVlblNwYWNlVHJh
bnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRmxvYXRR
dWFkIHF1YWRJblNjcmVlblNwYWNlID0gc2NyZWVuU3BhY2VUcmFuc2Zvcm0ubWFwUXVhZChvcmln
aW5hbFRhcmdldFJlY3QpOwotCi0gICAgY29uc3QgZmxvYXQgaW5mbGF0aW9uRGlzdGFuY2UgPSAw
Ljc1OwotICAgIEZsb2F0UXVhZCBleHBhbmRlZFF1YWRJblNjcmVlblNwYWNlID0gaW5mbGF0ZVF1
YWQocXVhZEluU2NyZWVuU3BhY2UsIGluZmxhdGlvbkRpc3RhbmNlKTsKLQotICAgIC8vIEluIHRo
ZSBub24tYW50aWFsaWFzZWQgY2FzZSB0aGUgdmVydGljZXMgcGFzc2VkIGFyZSB0aGUgdW5pdCBy
ZWN0YW5nbGUgYW5kIGRvdWJsZQotICAgIC8vIGFzIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzICgw
LDAgMSwwLCAxLDEgYW5kIDAsMSkuIEhlcmUgd2UgbWFwIHRoZSBleHBhbmRlZCBxdWFkCi0gICAg
Ly8gY29vcmRpbmF0ZXMgaW4gc2NyZWVuIHNwYWNlIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHJlY3Qn
cyB0ZXh0dXJlIGNvb3JkaW5hdGVzLgotICAgIC8vIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2Ygc2xp
Z2h0bHkgaW5jcmVhc2luZyB0aGUgc2l6ZSBvZiB0aGUgb3JpZ2luYWwgcXVhZCdzIGdlb21ldHJ5
Ci0gICAgLy8gaW4gdGhlIHZlcnRleCBzaGFkZXIuCi0gICAgRmxvYXRRdWFkIGV4cGFuZGVkUXVh
ZEluVGV4dHVyZUNvb3JkaW5hdGVzID0gc2NyZWVuU3BhY2VUcmFuc2Zvcm0uaW52ZXJzZSgpLm1h
cFF1YWQoZXhwYW5kZWRRdWFkSW5TY3JlZW5TcGFjZSk7Ci0gICAgZXhwYW5kZWRRdWFkSW5UZXh0
dXJlQ29vcmRpbmF0ZXMubW92ZSgtb3JpZ2luYWxUYXJnZXRSZWN0LngoKSwgLW9yaWdpbmFsVGFy
Z2V0UmVjdC55KCkpOwotICAgIGV4cGFuZGVkUXVhZEluVGV4dHVyZUNvb3JkaW5hdGVzLnNjYWxl
KDEgLyBvcmlnaW5hbFRhcmdldFJlY3Qud2lkdGgoKSwgMSAvIG9yaWdpbmFsVGFyZ2V0UmVjdC5o
ZWlnaHQoKSk7Ci0KLSAgICAvLyBXZSBwcmVwYXJlIGJvdGggdGhlIGV4cGFuZGVkIHF1YWQgZm9y
IHRoZSBmcmFnbWVudCBzaGFkZXIgYXMgd2VsbCBhcyB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcK
LSAgICAvLyBib3ggb2YgdGhhdCBxdWFkLCBhcyB0aGF0IHNlZW1zIG5lY2Vzc2FyeSB0byBwcm9w
ZXJseSBhbnRpYWxpYXMgYmFja2ZhY2luZyBxdWFkcy4KLSAgICBmbG9hdCB0YXJnZXRRdWFkRWRn
ZXNbMjRdOwotICAgIHF1YWRUb0VkZ2VBcnJheShleHBhbmRlZFF1YWRJblNjcmVlblNwYWNlLCB0
YXJnZXRRdWFkRWRnZXMpOwotICAgIHF1YWRUb0VkZ2VBcnJheShpbmZsYXRlUXVhZChxdWFkSW5T
Y3JlZW5TcGFjZS5ib3VuZGluZ0JveCgpLCAgaW5mbGF0aW9uRGlzdGFuY2UpLCB0YXJnZXRRdWFk
RWRnZXMgKyAxMik7Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlvbnMgb3B0
aW9ucyA9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpBbnRpYWxpYXMgfCBUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZTsKLSAgICBpZiAob3BhY2l0eSA8IDEpCi0gICAgICAg
IG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wYWNpdHk7Ci0KLSAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVk
R0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShvcHRp
b25zKTsKICAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7
Ci0gICAgbV9jb250ZXh0M0QtPnVuaWZvcm0zZnYocHJvZ3JhbS0+ZXhwYW5kZWRRdWFkRWRnZXNJ
blNjcmVlblNwYWNlTG9jYXRpb24oKSwgOCwgdGFyZ2V0UXVhZEVkZ2VzKTsKLQotICAgIGRyYXdU
ZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCB0ZXh0dXJlLCBmbGFncywgc2l6
ZSwgRHJhd1F1YWQob3JpZ2luYWxUYXJnZXRSZWN0LCBleHBhbmRlZFF1YWRJblRleHR1cmVDb29y
ZGluYXRlcyksIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgMCAvKiBtYXNrVGV4dHVyZSAqLyk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVy
ZWRRdWFkV2l0aFByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qIHByb2dyYW0sIHVp
bnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBE
cmF3UXVhZCYgcXVhZFRvRHJhdywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmll
d01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUp
Ci17Ci0gICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZl
cnRleExvY2F0aW9uKCkpOwogICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgR0MzRGVudW0gdGFyZ2V0ID0gZmxhZ3MgJiBTaG91
bGRVc2VBUkJUZXh0dXJlUmVjdCA/IEdDM0RlbnVtKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNU
QU5HTEVfQVJCKSA6IEdDM0RlbnVtKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKTsKICAg
ICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKQEAgLTU5Niw3ICs1
MTYsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFt
KFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcgogICAgIGlmIChvcGFjaXR5IDwgMSB8fCBt
YXNrVGV4dHVyZSkKICAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CiAKLSAgICBkcmF3UXVh
ZChxdWFkVG9EcmF3LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNE
OjpUUklBTkdMRV9GQU4sIGZsYWdzKTsKKyAgICBkcmF3KHJlY3QsIG1vZGVsVmlld01hdHJpeCwg
cHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgZmxhZ3MpOwogfQogCiBC
aXRtYXBUZXh0dXJlR0w6OkJpdG1hcFRleHR1cmVHTChUZXh0dXJlTWFwcGVyR0wqIHRleHR1cmVN
YXBwZXIpCkBAIC0xMTcwLDI2ICsxMDkwLDE0IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdp
bkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uCiAg
ICAgY29uc3QgR0MzRGZsb2F0IHVuaXRSZWN0W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07
CiAgICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4TG9j
YXRpb24oKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0
cih1bml0UmVjdCkpOwogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNm
b3JtYXRpb25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpCi0gICAgICAgICAgICAubXVs
dGlwbHkobW9kZWxWaWV3TWF0cml4KQorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9
CisgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtb2RlbFZpZXdNYXRyaXgpCiAgICAg
ICAgICAgICAubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgodGFyZ2V0UmVjdC53aWR0aCgp
LCAwLCAwLCAwLAogICAgICAgICAgICAgICAgIDAsIHRhcmdldFJlY3QuaGVpZ2h0KCksIDAsIDAs
CiAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwKICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0
LngoKSwgdGFyZ2V0UmVjdC55KCksIDAsIDEpKTsKIAotICAgIGNvbnN0IEdDM0RmbG9hdCBtNFtd
ID0gewotICAgICAgICBtYXRyaXgubTExKCksIG1hdHJpeC5tMTIoKSwgbWF0cml4Lm0xMygpLCBt
YXRyaXgubTE0KCksCi0gICAgICAgIG1hdHJpeC5tMjEoKSwgbWF0cml4Lm0yMigpLCBtYXRyaXgu
bTIzKCksIG1hdHJpeC5tMjQoKSwKLSAgICAgICAgbWF0cml4Lm0zMSgpLCBtYXRyaXgubTMyKCks
IG1hdHJpeC5tMzMoKSwgbWF0cml4Lm0zNCgpLAotICAgICAgICBtYXRyaXgubTQxKCksIG1hdHJp
eC5tNDIoKSwgbWF0cml4Lm00MygpLCBtYXRyaXgubTQ0KCkKLSAgICB9OwotCi0gICAgY29uc3Qg
R0MzRGZsb2F0IG00YWxsW10gPSB7Ci0gICAgICAgIDIsIDAsIDAsIDAsCi0gICAgICAgIDAsIDIs
IDAsIDAsCi0gICAgICAgIDAsIDAsIDEsIDAsCi0gICAgICAgIC0xLCAtMSwgMCwgMQotICAgIH07
CisgICAgc3RhdGljIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGZ1bGxQcm9qZWN0aW9uTWF0
cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoRmxvYXRSZWN0KDAsIDAsIDEs
IDEpLCBGbG9hdFJlY3QoLTEsIC0xLCAyLCAyKSk7CiAKICAgICBpbnQmIHN0ZW5jaWxJbmRleCA9
IGNsaXBTdGFjaygpLmN1cnJlbnQoKS5zdGVuY2lsSW5kZXg7CiAKQEAgLTEyMDIsMTMgKzExMTAs
MTUgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb24KICAgICBtX2NvbnRleHQzRC0+c3RlbmNpbE1h
c2soMHhmZiAmIH4oc3RlbmNpbEluZGV4IC0gMSkpOwogCiAgICAgLy8gRmlyc3QgY2xlYXIgdGhl
IGVudGlyZSBidWZmZXIgYXQgdGhlIGN1cnJlbnQgaW5kZXguCi0gICAgbV9jb250ZXh0M0QtPnVu
aWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+bWF0cml4TG9jYXRpb24oKSwgMSwgZmFsc2UsIGNvbnN0
X2Nhc3Q8R0MzRGZsb2F0Kj4obTRhbGwpKTsKKyAgICBwcm9ncmFtLT5zZXRNYXRyaXgocHJvZ3Jh
bS0+cHJvamVjdGlvbk1hdHJpeExvY2F0aW9uKCksIGZ1bGxQcm9qZWN0aW9uTWF0cml4KTsKKyAg
ICBwcm9ncmFtLT5zZXRNYXRyaXgocHJvZ3JhbS0+bW9kZWxWaWV3TWF0cml4TG9jYXRpb24oKSwg
VHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7CiAgICAgbV9jb250ZXh0M0QtPnN0ZW5jaWxPcChHcmFw
aGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29u
dGV4dDNEOjpaRVJPKTsKICAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRl
eHQzRDo6VFJJQU5HTEVfRkFOLCAwLCA0KTsKIAogICAgIC8vIE5vdyBhcHBseSB0aGUgY3VycmVu
dCBpbmRleCB0byB0aGUgbmV3IHF1YWQuCiAgICAgbV9jb250ZXh0M0QtPnN0ZW5jaWxPcChHcmFw
aGljc0NvbnRleHQzRDo6UkVQTEFDRSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFUExBQ0UsIEdyYXBo
aWNzQ29udGV4dDNEOjpSRVBMQUNFKTsKLSAgICBtX2NvbnRleHQzRC0+dW5pZm9ybU1hdHJpeDRm
dihwcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgY29uc3RfY2FzdDxHQzNEZmxv
YXQqPihtNCkpOworICAgIHByb2dyYW0tPnNldE1hdHJpeChwcm9ncmFtLT5wcm9qZWN0aW9uTWF0
cml4TG9jYXRpb24oKSwgZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpOworICAgIHByb2dyYW0tPnNl
dE1hdHJpeChwcm9ncmFtLT5tb2RlbFZpZXdNYXRyaXhMb2NhdGlvbigpLCBtYXRyaXgpOwogICAg
IG1fY29udGV4dDNELT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4s
IDAsIDQpOwogCiAgICAgLy8gQ2xlYXIgdGhlIHN0YXRlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCmluZGV4
IDU5ZGIzZDM5NzljMGQxMGJlNDE0ODE1ZTc4MjMxNWRmMDdjMzVhMTYuLmFhMTMzMTJmYWFmY2Ez
MWZkZjFkMWM0MTRkMzVjMjdjYWM4MDJjYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKQEAgLTQ0LDcg
KzQ0LDggQEAgcHVibGljOgogICAgIGVudW0gRmxhZyB7CiAgICAgICAgIFNob3VsZEJsZW5kID0g
MHgwMSwKICAgICAgICAgU2hvdWxkRmxpcFRleHR1cmUgPSAweDAyLAotICAgICAgICBTaG91bGRV
c2VBUkJUZXh0dXJlUmVjdCA9IDB4MDQKKyAgICAgICAgU2hvdWxkVXNlQVJCVGV4dHVyZVJlY3Qg
PSAweDA0LAorICAgICAgICBTaG91bGRBbnRpYWxpYXMgPSAweDA4CiAgICAgfTsKIAogICAgIHR5
cGVkZWYgaW50IEZsYWdzOwpAQCAtOTgsMjIgKzk5LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIFZl
Y3RvcjxDbGlwU3RhdGU+IGNsaXBTdGFjazsKICAgICB9OwogCi0gICAgc3RydWN0IERyYXdRdWFk
IHsKLSAgICAgICAgRHJhd1F1YWQoY29uc3QgRmxvYXRSZWN0JiBvcmlnaW5hbFRhcmdldFJlY3Qs
IGNvbnN0IEZsb2F0UXVhZCYgdGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZSA9IEZsb2F0UmVj
dChGbG9hdFBvaW50KCksIEZsb2F0U2l6ZSgxLCAxKSkpCi0gICAgICAgICAgICA6IG9yaWdpbmFs
VGFyZ2V0UmVjdChvcmlnaW5hbFRhcmdldFJlY3QpCi0gICAgICAgICAgICAsIHRhcmdldFJlY3RN
YXBwZWRUb1VuaXRTcXVhcmUodGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZSkKLSAgICAgICAg
ewotICAgICAgICB9Ci0KLSAgICAgICAgRmxvYXRSZWN0IG9yaWdpbmFsVGFyZ2V0UmVjdDsKLSAg
ICAgICAgRmxvYXRRdWFkIHRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmU7Ci0gICAgfTsKLQog
ICAgIFRleHR1cmVNYXBwZXJHTCgpOwogCi0gICAgYm9vbCBkcmF3VGV4dHVyZVdpdGhBbnRpYWxp
YXNpbmcodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MsIGNvbnN0IEludFNpemUmLCBjb25zdCBGbG9h
dFJlY3QmIG9yaWdpbmFsVGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1v
ZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1Rl
eHR1cmUsIHVuc2lnbmVkIGV4cG9zZWRFZGdlcyk7Ci0gICAgdm9pZCBkcmF3VGV4dHVyZWRRdWFk
V2l0aFByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qLCB1aW50MzJfdCB0ZXh0dXJl
LCBGbGFncywgY29uc3QgSW50U2l6ZSYsIGNvbnN0IERyYXdRdWFkJiwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFw
VGV4dHVyZSogbWFza1RleHR1cmUpOwotICAgIHZvaWQgZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQm
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbSosIEdDM0RlbnVtIGRyYXdpbmdNb2RlLCBGbGFncyk7CisgICAgdm9p
ZCBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0q
LCB1aW50MzJfdCB0ZXh0dXJlLCBGbGFncywgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9w
YWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKKyAgICB2b2lkIGRyYXco
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01h
dHJpeCwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qLCBHQzNEZW51bSBkcmF3aW5nTW9kZSwg
RmxhZ3MpOworCisgICAgdm9pZCBkcmF3VW5pdFJlY3QoVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0qLCBHQzNEZW51bSBkcmF3aW5nTW9kZSk7CisgICAgdm9pZCBkcmF3RWRnZVRyaWFuZ2xlcyhU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSopOwogCiAgICAgYm9vbCBiZWdpblNjaXNzb3JDbGlw
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9p
ZCBiaW5kRGVmYXVsdFN1cmZhY2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuY3BwCmluZGV4IGY2ZGRhZTNiN2U2MDFiNDk5MmYzMGZhYmRhZmI1NWM1NTZiZDY0ZGUu
LmU0ODg5YmQ1ZWVkOGQzYTdjZTMwYjc1NGM2NWUxYWFhNGNlNmVjZjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcApAQCAtNjksNiArNjksMTggQEAgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKFBhc3NSZWZQ
dHI8R3JhcGhpY3NDb250ZXgKICAgICBMT0coQ29tcG9zaXRpbmcsICJQcm9ncmFtIGxvZzogJXNc
biIsIGxvZy51dGY4KCkuZGF0YSgpKTsKIH0KIAordm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbTo6c2V0TWF0cml4KEdDM0R1aW50IGxvY2F0aW9uLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbWF0cml4KQoreworICAgIEdDM0RmbG9hdCBtYXRyaXhBc0Zsb2F0c1tdID0geworICAg
ICAgICBtYXRyaXgubTExKCksIG1hdHJpeC5tMTIoKSwgbWF0cml4Lm0xMygpLCBtYXRyaXgubTE0
KCksCisgICAgICAgIG1hdHJpeC5tMjEoKSwgbWF0cml4Lm0yMigpLCBtYXRyaXgubTIzKCksIG1h
dHJpeC5tMjQoKSwKKyAgICAgICAgbWF0cml4Lm0zMSgpLCBtYXRyaXgubTMyKCksIG1hdHJpeC5t
MzMoKSwgbWF0cml4Lm0zNCgpLAorICAgICAgICBtYXRyaXgubTQxKCksIG1hdHJpeC5tNDIoKSwg
bWF0cml4Lm00MygpLCBtYXRyaXgubTQ0KCkKKyAgICB9OworCisgICAgbV9jb250ZXh0LT51bmlm
b3JtTWF0cml4NGZ2KGxvY2F0aW9uLCAxLCBmYWxzZSwgbWF0cml4QXNGbG9hdHMpOworfQorCiBH
QzNEdWludCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Z2V0TG9jYXRpb24oY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lLCBWYXJpYWJsZVR5cGUgdHlwZSkKIHsKICAgICBIYXNoTWFwPEF0b21p
Y1N0cmluZywgR0MzRHVpbnQ+OjppdGVyYXRvciBpdCA9IG1fdmFyaWFibGVzLmZpbmQobmFtZSk7
CkBAIC0xMDUsMzIgKzExNyw2NiBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6flRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCkKICAgICBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0ocHJv
Z3JhbUlEKTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSA9Cisj
ZGVmaW5lIEdMU0xfRElSRUNUSVZFKC4uLikgIiMiI19fVkFfQVJHU19fIlxuIgorc3RhdGljIGNv
bnN0IGNoYXIqIHZlcnRleFRlbXBsYXRlID0KICAgICBTVFJJTkdJRlkoCi0gICAgICAgIHVuaWZv
cm0gbWF0NCB1X21hdHJpeDsKKyAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CisgICAg
ICAgIHVuaWZvcm0gbWF0NCB1X21vZGVsVmlld01hdHJpeDsKKyAgICAgICAgdW5pZm9ybSBtYXQ0
IHVfcHJvamVjdGlvbk1hdHJpeDsKICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2ZsaXA7CiAgICAg
ICAgIHVuaWZvcm0gdmVjMiB1X3RleHR1cmVTaXplOwotICAgICAgICBhdHRyaWJ1dGUgdmVjNCBh
X3ZlcnRleDsKKwogICAgICAgICB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsKICAgICAgICAgdmFy
eWluZyB2ZWMyIHZfbWFza1RleENvb3JkOworICAgICAgICB2YXJ5aW5nIGZsb2F0IHZfYW50aWFs
aWFzOworCisgICAgICAgIHZvaWQgbm9vcCh2ZWMyKSB7IH0KKworICAgICAgICB2ZWM0IHRvU2Ny
ZWVuU3BhY2UodmVjMiBwb3MpIHsgcmV0dXJuIHZlYzQocG9zLCAwLiwgMS4pICogdV9tb2RlbFZp
ZXdNYXRyaXg7IH0KKworICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJlbGllcyBvbiB0aGUgYXNz
dW1wdGlvbiB0aGF0IHdlIGdldCBlZGdlIHRyaWFuZ2xlcyB3aXRoIGNvbnRyb2wgcG9pbnRzLAor
ICAgICAgICAvLyBhIGNvbnRyb2wgcG9pbnQgYmVpbmcgdGhlIG5lYXJlc3QgcG9pbnQgdG8gdGhl
IGNvb3JkaW5hdGUgdGhhdCBpcyBvbiB0aGUgZWRnZS4KKyAgICAgICAgdm9pZCBhcHBseUFudGlh
bGlhcyhpbm91dCB2ZWMyIHBvc2l0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBXZSBj
b3VudCBvbiB0aGUgZmFjdCB0aGF0IHF1YWQgcGFzc2VkIGluIGlzIGFsd2F5cyBhIHVuaXQgcmVj
dCwKKyAgICAgICAgICAgIC8vIGFuZCB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IGFwcGxpZXMg
dGhlIHJlYWwgcmVjdC4KKyAgICAgICAgICAgIGNvbnN0IHZlYzIgY2VudGVyID0gdmVjMigwLjUs
IDAuNSk7CisgICAgICAgICAgICBjb25zdCBmbG9hdCBhbnRpYWxpYXNJbmZsYXRpb25EaXN0YW5j
ZSA9IDEuOworCisgICAgICAgICAgICAvLyBXZSBwYXNzIHRoZSBjb250cm9sIHBvaW50IGFzIHRo
ZSB6dyBjb29yZGluYXRlcyBvZiB0aGUgdmVydGV4LgorICAgICAgICAgICAgLy8gVGhlIGNvbnRy
b2wgcG9pbnQgaXMgdGhlIHBvaW50IG9uIHRoZSBlZGdlIGNsb3Nlc3QgdG8gdGhlIGN1cnJlbnQg
cG9zaXRpb24uCisgICAgICAgICAgICAvLyBUaGUgY29udHJvbCBwb2ludCBpcyB1c2VkIHRvIGNv
bXB1dGUgdGhlIGFudGlhbGlhcyB2YWx1ZS4KKyAgICAgICAgICAgIHZlYzIgY29udHJvbFBvaW50
ID0gYV92ZXJ0ZXguenc7CisKKyAgICAgICAgICAgIC8vIEZpcnN0IHdlIGNhbGN1bGF0ZSB0aGUg
ZGlzdGFuY2UgaW4gc2NyZWVuIHNwYWNlLgorICAgICAgICAgICAgdmVjNCBjZW50ZXJJblNjcmVl
bkNvb3JkaW5hdGVzID0gdG9TY3JlZW5TcGFjZShjZW50ZXIpOworICAgICAgICAgICAgdmVjNCBj
b250cm9sUG9pbnRJblNjcmVlbkNvb3JkaW5hdGVzID0gdG9TY3JlZW5TcGFjZShjb250cm9sUG9p
bnQpOworICAgICAgICAgICAgZmxvYXQgc2NyZWVuU3BhY2VEaXN0YW5jZSA9IGRpc3RhbmNlKGNl
bnRlckluU2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnRyb2xQb2ludEluU2NyZWVuQ29vcmRpbmF0ZXMp
OworCisgICAgICAgICAgICAvLyBXZSBhZGQgdGhlIGluZmxhdGlvbiBkaXN0YW5jZSB0byB0aGUg
Y29tcHV0ZWQgZGlzdGFuY2UsIGFuZCBjb21wdXRlIHRoZSByYXRpby4KKyAgICAgICAgICAgIGZs
b2F0IGluZmxhdGlvblJhdGlvID0gKHNjcmVlblNwYWNlRGlzdGFuY2UgKyBhbnRpYWxpYXNJbmZs
YXRpb25EaXN0YW5jZSkgLyBzY3JlZW5TcGFjZURpc3RhbmNlOworCisgICAgICAgICAgICAvLyB2
X2FudGlhbGlhcyBuZWVkcyB0byBiZSAwIGZvciB0aGUgb3V0ZXIgZWRnZSBhbmQgMS4gZm9yIHRo
ZSBpbm5lciBlZGdlLgorICAgICAgICAgICAgLy8gU2luY2UgdGhlIGNvbnRyb2xQb2ludCBpcyBl
cXVhbCB0byB0aGUgcG9zaXRpb24gaW4gdGhlIGVkZ2UgdmVydGljZXMsIHRoZSB2YWx1ZSBpcyBh
bHdheXMgMCBmb3IgdGhvc2UuCisgICAgICAgICAgICAvLyBGb3IgdGhlIGNlbnRlciBwb2ludCwg
dGhlIGRpc3RhbmNlIGlzIGFsd2F5cyAwLjUsIHNvIHdlIG5vcm1hbGl6ZSB0byAxLiBieSBtdWx0
aXBseWluZyBieSAyLgorICAgICAgICAgICAgLy8gQnkgbXVsdHBseWluZyBieSBpbmZsYXRpb25S
YXRpbyBhbmQgZGl2aWRpbmcgYnkgKGluZmxhdGlvblJhdGlvIC0gMSksCisgICAgICAgICAgICAv
LyBXZSBtYWtlIHN1cmUgdGhhdCB0aGUgdmFyeWluZyBpbnRlcnBvbGF0ZXMgYmV0d2VlbiAwIChv
dXRlciBlZGdlKSwgMSAoaW5uZXIgZWRnZSkgYW5kIG4gPiAxIChjZW50ZXIpLgorICAgICAgICAg
ICAgdl9hbnRpYWxpYXMgPSBkaXN0YW5jZShjb250cm9sUG9pbnQsIHBvc2l0aW9uKSAqIDIuICog
aW5mbGF0aW9uUmF0aW8gLyAoaW5mbGF0aW9uUmF0aW8gLSAxLik7CisKKyAgICAgICAgICAgIC8v
IE5vdyBpbmZsYXRlIHRoZSBhY3R1YWwgcG9zaXRpb24uCisgICAgICAgICAgICBwb3NpdGlvbiA9
IGNlbnRlciArIChwb3NpdGlvbiAtIGNlbnRlcikgKiBpbmZsYXRpb25SYXRpbzsKKyAgICAgICAg
fQogCiAgICAgICAgIHZvaWQgbWFpbih2b2lkKQogICAgICAgICB7Ci0gICAgICAgICAgICB2ZWM0
IHBvc2l0aW9uID0gYV92ZXJ0ZXg7CisgICAgICAgICAgICB2ZWMyIHBvc2l0aW9uID0gYV92ZXJ0
ZXgueHk7CisgICAgICAgICAgICBhcHBseUFudGlhbGlhc0lmTmVlZGVkKHBvc2l0aW9uKTsKICAg
ICAgICAgICAgIHZfdGV4Q29vcmQgPSB2ZWMyKHBvc2l0aW9uLngsIG1peChwb3NpdGlvbi55LCAx
LiAtIHBvc2l0aW9uLnksIHVfZmxpcCkpICogdV90ZXh0dXJlU2l6ZTsKLSAgICAgICAgICAgIHZf
bWFza1RleENvb3JkID0gdmVjMihwb3NpdGlvbik7Ci0gICAgICAgICAgICBnbF9Qb3NpdGlvbiA9
IHVfbWF0cml4ICogYV92ZXJ0ZXg7CisgICAgICAgICAgICB2X21hc2tUZXhDb29yZCA9IHBvc2l0
aW9uOworICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X3Byb2plY3Rpb25NYXRyaXggKiB1X21v
ZGVsVmlld01hdHJpeCAqIHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgICAgICAgIH0KICAgICAp
OwogCi0jZGVmaW5lIEdMU0xfRElSRUNUSVZFKC4uLikgIiMiI19fVkFfQVJHU19fIlxuIgotI2Rl
ZmluZSBERUZJTkVfQVBQTElFUihOYW1lKSBcCi0gICAgIiNpZmRlZiBFTkFCTEVfIiNOYW1lIlxu
IiBcCi0gICAgIiNkZWZpbmUgYXBwbHkiI05hbWUiSWZOZWVkZWQgYXBwbHkiI05hbWUiXG4iXAot
ICAgICIjZWxzZVxuIlwKLSAgICAiI2RlZmluZSBhcHBseSIjTmFtZSJJZk5lZWRlZCBub29wXG4i
XAotICAgICIjZW5kaWZcbiIKLQogI2RlZmluZSBSRUNUX1RFWFRVUkVfRElSRUNUSVZFIFwKICAg
ICBHTFNMX0RJUkVDVElWRShpZmRlZiBFTkFCTEVfUmVjdCkgXAogICAgICAgICBHTFNMX0RJUkVD
VElWRShkZWZpbmUgU2FtcGxlclR5cGUgc2FtcGxlcjJEUmVjdCkgXApAQCAtMTQwLDI5ICsxODYs
MTQgQEAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSA9CiAgICAgICAgIEdM
U0xfRElSRUNUSVZFKGRlZmluZSBTYW1wbGVyRnVuY3Rpb24gdGV4dHVyZTJEKSBcCiAgICAgR0xT
TF9ESVJFQ1RJVkUoZW5kaWYpCiAKLSNkZWZpbmUgRU5BQkxFX0FQUExJRVIoTmFtZSkgIiNkZWZp
bmUgRU5BQkxFXyIjTmFtZSJcbiIKKyNkZWZpbmUgRU5BQkxFX0FQUExJRVIoTmFtZSkgIiNkZWZp
bmUgRU5BQkxFXyIjTmFtZSJcbiNkZWZpbmUgYXBwbHkiI05hbWUiSWZOZWVkZWQgYXBwbHkiI05h
bWUiXG4iCisjZGVmaW5lIERJU0FCTEVfQVBQTElFUihOYW1lKSAiI2RlZmluZSBhcHBseSIjTmFt
ZSJJZk5lZWRlZCBub29wXG4iCiAjZGVmaW5lIEJMVVJfQ09OU1RBTlRTIFwKICAgICBHTFNMX0RJ
UkVDVElWRShkZWZpbmUgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEggMTEpIFwKICAgICBHTFNM
X0RJUkVDVElWRShkZWZpbmUgR0FVU1NJQU5fS0VSTkVMX1NURVAgMC4yKQogCiAKIHN0YXRpYyBj
b25zdCBjaGFyKiBmcmFnbWVudFRlbXBsYXRlID0KLSAgICBERUZJTkVfQVBQTElFUihUZXh0dXJl
KQotICAgIERFRklORV9BUFBMSUVSKFNvbGlkQ29sb3IpCi0gICAgREVGSU5FX0FQUExJRVIoT3Bh
Y2l0eSkKLSAgICBERUZJTkVfQVBQTElFUihNYXNrKQotICAgIERFRklORV9BUFBMSUVSKEFudGlh
bGlhcykKLSAgICBERUZJTkVfQVBQTElFUihHcmF5c2NhbGVGaWx0ZXIpCi0gICAgREVGSU5FX0FQ
UExJRVIoU2VwaWFGaWx0ZXIpCi0gICAgREVGSU5FX0FQUExJRVIoU2F0dXJhdGVGaWx0ZXIpCi0g
ICAgREVGSU5FX0FQUExJRVIoSHVlUm90YXRlRmlsdGVyKQotICAgIERFRklORV9BUFBMSUVSKElu
dmVydEZpbHRlcikKLSAgICBERUZJTkVfQVBQTElFUihCcmlnaHRuZXNzRmlsdGVyKQotICAgIERF
RklORV9BUFBMSUVSKENvbnRyYXN0RmlsdGVyKQotICAgIERFRklORV9BUFBMSUVSKE9wYWNpdHlG
aWx0ZXIpCi0gICAgREVGSU5FX0FQUExJRVIoQmx1ckZpbHRlcikKLSAgICBERUZJTkVfQVBQTElF
UihBbHBoYUJsdXIpCi0gICAgREVGSU5FX0FQUExJRVIoQ29udGVudFRleHR1cmUpCiAgICAgUkVD
VF9URVhUVVJFX0RJUkVDVElWRQogICAgIEJMVVJfQ09OU1RBTlRTCiAgICAgU1RSSU5HSUZZKApA
QCAtMTcxLDkgKzIwMiw5IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFRlbXBsYXRlID0K
ICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19tYXNrOwogICAgICAgICB1bmlmb3JtIHNhbXBs
ZXIyRCBzX2NvbnRlbnRUZXh0dXJlOwogICAgICAgICB1bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTsK
KyAgICAgICAgdmFyeWluZyBmbG9hdCB2X2FudGlhbGlhczsKICAgICAgICAgdmFyeWluZyB2ZWMy
IHZfdGV4Q29vcmQ7CiAgICAgICAgIHZhcnlpbmcgdmVjMiB2X21hc2tUZXhDb29yZDsKLSAgICAg
ICAgdW5pZm9ybSB2ZWMzIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzhdOwogICAg
ICAgICB1bmlmb3JtIGZsb2F0IHVfZmlsdGVyQW1vdW50OwogICAgICAgICB1bmlmb3JtIHZlYzIg
dV9ibHVyUmFkaXVzOwogICAgICAgICB1bmlmb3JtIHZlYzIgdV9zaGFkb3dPZmZzZXQ7CkBAIC0x
ODIsNDcgKzIxMyw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFRlbXBsYXRlID0KIAog
ICAgICAgICB2b2lkIG5vb3AodmVjNCkgeyB9CiAKLSAgICAgICAgLy8gVGhlIGRhdGEgcGFzc2Vk
IGluIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlIGlzIG1lcmVseSB0aGUKLSAgICAg
ICAgLy8gcHJlLXNjYWxlZCBjb2VmZmVjaWVudHMgb2YgdGhlIGxpbmUgZXF1YXRpb25zIGRlc2Ny
aWJpbmcgdGhlIGZvdXIgZWRnZXMKLSAgICAgICAgLy8gb2YgdGhlIGV4cGFuZGVkIHF1YWQgaW4g
c2NyZWVuIHNwYWNlIGFuZCB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYm94Ci0gICAgICAgIC8v
IG9mIHRoZSBleHBhbmRlZCBxdWFkLgotICAgICAgICAvLwotICAgICAgICBmbG9hdCBub3JtYWxp
emVkRGlzdGFuY2UodmVjMyBlZGdlQ29lZmZpY2llbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IC8vIFdlIGFyZSBkb2luZyBhIHNpbXBsZSBkaXN0YW5jZSBjYWxjdWxhdGlvbiBoZXJlIGFjY29y
ZGluZyB0byB0aGUgZm9ybXVsYToKLSAgICAgICAgICAgIC8vIChBKnAueCArIEIqcC55ICsgQykg
LyBzcXJ0KEFeMiArIEJeMikgPSBkaXN0YW5jZSBmcm9tIGxpbmUgdG8gcAotICAgICAgICAgICAg
Ly8gTm90ZSB0aGF0IEEsIEIgYW5kIEMgaGF2ZSBhbHJlYWR5IGJlZW4gc2NhbGVkIGJ5IDEgLyBz
cXJ0KEFeMiArIEJeMikuCi0gICAgICAgICAgICByZXR1cm4gY2xhbXAoZG90KGVkZ2VDb2VmZmlj
aWVudCwgdmVjMyhnbF9GcmFnQ29vcmQueHksIDEuKSksIDAuLCAxLik7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmbG9hdCBhbnRpYWxpYXNRdWFkKHZlYzMgY29lZmZpY2llbnQxLCB2ZWMzIGNvZWZm
aWNpZW50MiwgdmVjMyBjb2VmZmljaWVudDMsIHZlYzMgY29lZmZpY2llbnQ0KQotICAgICAgICB7
Ci0gICAgICAgICAgICAvLyBOb3cgd2Ugd2FudCB0byByZWR1Y2UgdGhlIGFscGhhIHZhbHVlIG9m
IHRoZSBmcmFnbWVudCBpZiBpdCBpcyBjbG9zZSB0byB0aGUKLSAgICAgICAgICAgIC8vIGVkZ2Vz
IG9mIHRoZSBleHBhbmRlZCBxdWFkIChvciByZWN0YW5ndWxhciBib3VuZGluZyBib3ggLS0gd2hp
Y2ggc2VlbXMgdG8gYmUKLSAgICAgICAgICAgIC8vIGltcG9ydGFudCBmb3IgYmFja2ZhY2luZyBx
dWFkcykuIE5vdGUgdGhhdCB3ZSBhcmUgY29tYmluaW5nIHRoZSBjb250cmlidXRpb24KLSAgICAg
ICAgICAgIC8vIGZyb20gdGhlICh0b3AgfHwgYm90dG9tKSBhbmQgKGxlZnQgfHwgcmlnaHQpIGVk
Z2UgYnkgc2ltcGx5IG11bHRpcGx5aW5nLiBUaGlzIGZvbGxvd3MKLSAgICAgICAgICAgIC8vIHRo
ZSBhcHByb2FjaCBkZXNjcmliZWQgYXQ6IGh0dHA6Ly9odHRwLmRldmVsb3Blci5udmlkaWEuY29t
L0dQVUdlbXMyL2dwdWdlbXMyX2NoYXB0ZXIyMi5odG1sLAotICAgICAgICAgICAgLy8gaW4gdGhp
cyBjYXNlIHdpdGhvdXQgdXNpbmcgR2F1c3NpYW4gd2VpZ2h0cy4KLSAgICAgICAgICAgIHJldHVy
biBtaW4obm9ybWFsaXplZERpc3RhbmNlKGNvZWZmaWNpZW50MSksIG5vcm1hbGl6ZWREaXN0YW5j
ZShjb2VmZmljaWVudDIpKQotICAgICAgICAgICAgICAgICogbWluKG5vcm1hbGl6ZWREaXN0YW5j
ZShjb2VmZmljaWVudDMpLCBub3JtYWxpemVkRGlzdGFuY2UoY29lZmZpY2llbnQ0KSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBmbG9hdCBhbnRpYWxpYXMoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBmbG9hdCBhbnRpYWxpYXNWYWx1ZUZvclF1YWQgPSAKLSAgICAgICAgICAgICAgICBhbnRpYWxp
YXNRdWFkKHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzBdLAotICAgICAgICAgICAg
ICAgICAgICB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVsxXSwKLSAgICAgICAgICAg
ICAgICAgICAgdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbMl0sCi0gICAgICAgICAg
ICAgICAgICAgIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzNdKTsKLQotICAgICAg
ICAgICAgZmxvYXQgYW50aWFsaWFzVmFsdWVGb3JCb3VuZGluZ1JlY3QgPSAKLSAgICAgICAgICAg
ICAgICBhbnRpYWxpYXNRdWFkKHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzRdLAot
ICAgICAgICAgICAgICAgICAgICB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs1XSwK
LSAgICAgICAgICAgICAgICAgICAgdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNl0s
Ci0gICAgICAgICAgICAgICAgICAgIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzdd
KTsKLQotICAgICAgICAgICAgcmV0dXJuIG1pbihhbnRpYWxpYXNWYWx1ZUZvclF1YWQsIGFudGlh
bGlhc1ZhbHVlRm9yQm91bmRpbmdSZWN0KTsgICAgICAgICAgIAotICAgICAgICB9CisgICAgICAg
IGZsb2F0IGFudGlhbGlhcygpIHsgcmV0dXJuIHNtb290aHN0ZXAodl9hbnRpYWxpYXMsIDAuLCAx
Lik7IH0KIAogICAgICAgICB2b2lkIGFwcGx5VGV4dHVyZShpbm91dCB2ZWM0IGNvbG9yKSB7IGNv
bG9yID0gU2FtcGxlckZ1bmN0aW9uKHNfc2FtcGxlciwgdl90ZXhDb29yZCk7IH0KICAgICAgICAg
dm9pZCBhcHBseU9wYWNpdHkoaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xvciAqPSB1X29wYWNpdHk7
IH0KQEAgLTMzMCwxMCArMzIxLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50VGVtcGxh
dGUgPQogICAgICAgICAgICAgY29sb3IgPSBzb3VyY2VPdmVyKGNvbnRlbnRDb2xvciwgY29sb3Ip
OwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBhcHBseVNvbGlkQ29sb3IoaW5vdXQgdmVjNCBj
b2xvcikKLSAgICAgICAgewotICAgICAgICAgICAgY29sb3IgKj0gdV9jb2xvcjsKLSAgICAgICAg
fQorICAgICAgICB2b2lkIGFwcGx5U29saWRDb2xvcihpbm91dCB2ZWM0IGNvbG9yKSB7IGNvbG9y
ICo9IHVfY29sb3I7IH0KIAogICAgICAgICB2b2lkIG1haW4odm9pZCkKICAgICAgICAgewpAQCAt
MzYxLDMzICszNDksMzcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50VGVtcGxhdGUgPQog
CiBzdGF0aWMgdm9pZCBnZXRTaGFkZXJTcGVjKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpP
cHRpb25zIG9wdGlvbnMsIFN0cmluZyYgdmVydGV4U291cmNlLCBTdHJpbmcmIGZyYWdtZW50U291
cmNlKQogewotICAgIFN0cmluZ0J1aWxkZXIgZnJhZ21lbnRCdWlsZGVyOworCisgICAgU3RyaW5n
QnVpbGRlciBzaGFkZXJCdWlsZGVyOwogI2RlZmluZSBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMo
QXBwbGllcikgXAotICAgIGlmIChvcHRpb25zICYgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OkFwcGxpZXIpIFwKLSAgICAgICAgZnJhZ21lbnRCdWlsZGVyLmFwcGVuZChFTkFCTEVfQVBQTElF
UihBcHBsaWVyKSk7Ci0KLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoTWF0cml4KQotICAg
IFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhUZXh0dXJlKQotICAgIFNFVF9BUFBMSUVSX0ZST01f
T1BUSU9OUyhSZWN0KQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhTb2xpZENvbG9yKQot
ICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhPcGFjaXR5KQotICAgIFNFVF9BUFBMSUVSX0ZS
T01fT1BUSU9OUyhNYXNrKQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhBbnRpYWxpYXMp
Ci0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEdyYXlzY2FsZUZpbHRlcikKLSAgICBTRVRf
QVBQTElFUl9GUk9NX09QVElPTlMoU2VwaWFGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9P
UFRJT05TKFNhdHVyYXRlRmlsdGVyKQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhIdWVS
b3RhdGVGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEJyaWdodG5lc3NGaWx0
ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKENvbnRyYXN0RmlsdGVyKQotICAgIFNF
VF9BUFBMSUVSX0ZST01fT1BUSU9OUyhJbnZlcnRGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJP
TV9PUFRJT05TKE9wYWNpdHlGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEJs
dXJGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEFscGhhQmx1cikKLSAgICBT
RVRfQVBQTElFUl9GUk9NX09QVElPTlMoQ29udGVudFRleHR1cmUpCi0KLSAgICBmcmFnbWVudEJ1
aWxkZXIuYXBwZW5kKGZyYWdtZW50VGVtcGxhdGUpOwotICAgIHZlcnRleFNvdXJjZSA9IHZlcnRl
eFNoYWRlclNvdXJjZTsKLSAgICBmcmFnbWVudFNvdXJjZSA9IGZyYWdtZW50QnVpbGRlci50b1N0
cmluZygpOworICAgICAgICBzaGFkZXJCdWlsZGVyLmFwcGVuZChcCisgICAgICAgICAgICAob3B0
aW9ucyAmIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpBcHBsaWVyKSBcCisgICAgICAgICAg
ICAgICAgPyBFTkFCTEVfQVBQTElFUihBcHBsaWVyKSBcCisgICAgICAgICAgICAgICAgOiBESVNB
QkxFX0FQUExJRVIoQXBwbGllcikpCisKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoVGV4
dHVyZSk7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFJlY3QpOworICAgIFNFVF9BUFBM
SUVSX0ZST01fT1BUSU9OUyhTb2xpZENvbG9yKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElP
TlMoT3BhY2l0eSk7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKE1hc2spOworICAgIFNF
VF9BUFBMSUVSX0ZST01fT1BUSU9OUyhBbnRpYWxpYXMpOworICAgIFNFVF9BUFBMSUVSX0ZST01f
T1BUSU9OUyhHcmF5c2NhbGVGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhT
ZXBpYUZpbHRlcik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFNhdHVyYXRlRmlsdGVy
KTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoSHVlUm90YXRlRmlsdGVyKTsKKyAgICBT
RVRfQVBQTElFUl9GUk9NX09QVElPTlMoQnJpZ2h0bmVzc0ZpbHRlcik7CisgICAgU0VUX0FQUExJ
RVJfRlJPTV9PUFRJT05TKENvbnRyYXN0RmlsdGVyKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09Q
VElPTlMoSW52ZXJ0RmlsdGVyKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoT3BhY2l0
eUZpbHRlcik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEJsdXJGaWx0ZXIpOworICAg
IFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhBbHBoYUJsdXIpOworICAgIFNFVF9BUFBMSUVSX0ZS
T01fT1BUSU9OUyhDb250ZW50VGV4dHVyZSk7CisgICAgU3RyaW5nQnVpbGRlciB2ZXJ0ZXhCdWls
ZGVyOworICAgIHZlcnRleEJ1aWxkZXIuYXBwZW5kKHNoYWRlckJ1aWxkZXIudG9TdHJpbmcoKSk7
CisgICAgdmVydGV4QnVpbGRlci5hcHBlbmQodmVydGV4VGVtcGxhdGUpOworICAgIHNoYWRlckJ1
aWxkZXIuYXBwZW5kKGZyYWdtZW50VGVtcGxhdGUpOworICAgIHZlcnRleFNvdXJjZSA9IHZlcnRl
eEJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICBmcmFnbWVudFNvdXJjZSA9IHNoYWRlckJ1aWxkZXIu
dG9TdHJpbmcoKTsKIH0KIAogVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaAppbmRleCA2MDdlZDQ3YTUzMzA2NDFkM2U5MjgyZTNk
MTNmYzZhMTViYzUwOGYzLi43MzIxZmM1YzlkOTE2ZjQyOTY5MDYyN2EzNThlNTgyMmI4ZjVlYTRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaApAQCAtNDcsOSArNDcs
OSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKTsK
IAogICAgIFRFWE1BUF9ERUNMQVJFX0FUVFJJQlVURSh2ZXJ0ZXgpCi0gICAgVEVYTUFQX0RFQ0xB
UkVfQVRUUklCVVRFKHRleENvb3JkKQogCi0gICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShtYXRy
aXgpCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShtb2RlbFZpZXdNYXRyaXgpCisgICAgVEVY
TUFQX0RFQ0xBUkVfVU5JRk9STShwcm9qZWN0aW9uTWF0cml4KQogICAgIFRFWE1BUF9ERUNMQVJF
X1VOSUZPUk0oZmxpcCkKICAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKHRleHR1cmVTaXplKQog
ICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0ob3BhY2l0eSkKQEAgLTY2LDYgKzY2LDggQEAgcHVi
bGljOgogICAgIFRFWE1BUF9ERUNMQVJFX1NBTVBMRVIoY29udGVudFRleHR1cmUpCiAjZW5kaWYK
IAorICAgIHZvaWQgc2V0TWF0cml4KEdDM0R1aW50LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYpOworCiBwcml2YXRlOgogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKFBhc3NSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBjb25zdCBTdHJpbmcmIHZlcnRleFNoYWRlclNvdXJjZSwg
Y29uc3QgU3RyaW5nJiBmcmFnbWVudFNoYWRlclNvdXJjZSk7CiAgICAgUGxhdGZvcm0zRE9iamVj
dCBtX3ZlcnRleFNoYWRlcjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180154</attachid>
            <date>2012-12-19 06:20:25 -0800</date>
            <delta_ts>2012-12-19 06:22:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105377-20121219061742.patch</filename>
            <type>text/plain</type>
            <size>39554</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDIwYWViZjM5OWJlYzIx
MTc4YjRkOTAxMDBlMTllZDBjOWU5YWI0Ny4uNmMzZDYzNjdmMzNkNGI2MmJjNWI3MjFiODc1OTgx
N2VkZTZlYmVlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTEyLTE4ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1RleG1hcF0gRWRnZSBh
bnRpYWxpYXNpbmcgaW4gVGV4dHVyZU1hcHBlciBjb3VsZCBiZSBkb25lIHdpdGggbGVzcyBwZXIt
cGl4ZWwgY2FsbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwNTM3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEluc3RlYWQgb2YgcGFzc2luZyA4IHF1YWQgZWRnZSBjb2VmZmljaWVudHMgYXMgdW5pZm9y
bXMgYW5kIGFuYWx5emUgdGhlIGRpc3RhbmNlIGluIHRoZQorICAgICAgICBmcmFnbWVudCBzaGFk
ZXIsIHdlIHJlbmRlciB0aGUgYW50aWFsaWFzZWQgcXVhZCBhcyA0IGVkZ2UgdHJpYW5nbGVzLCB3
aGljaCBvcmlnaW5hdGUgaW4gdGhlCisgICAgICAgIGNlbnRlciBvZiB0aGUgcXVhZC4gCisKKyAg
ICAgICAgVGhlIHZlcnRleCBzaGFkZXIgZXhwYW5kcyB0aGUgcXVhZCBiYXNlZCBvbiB0aGUgc2Ny
ZWVuIHRyYW5zZm9ybSwgYW5kIGFwcGxpZXMgYSB2YWx1ZSB0byBlYWNoIHZlcnRleCB0byBiZSBp
bnRlcnBvbGF0ZWQgYnkgdGhlIEdQVS4gCisKKyAgICAgICAgSXQgaXMgdmVyeSBkaWZmaWN1bHQg
dG8gdGVzdCBwZXJmb3JtYW5jZSBnYWluOyBIb3dldmVyLCB0aGUgZm9sbG93aW5nIGlzIGFwcGFy
ZW50OgorICAgICAgICAqIFRoZSBtYXRyaXggbXVsdGlwbGljYXRpb25zIGFuZCBpbnZlcnNpb25z
IGRvbmUgYmVmb3JlIGluIHRoZSBxdWFkIGluZmxhdGlvbiBjb2RlIHdlcmUKKyAgICAgICAgICBh
bHdheXMgdmlzaWJsZSBpbiBpbnN0cnVtZW50cy92YWxncmluZCBhbmQgdGhleSBhcmUgbm93IGdv
bmUuCisgICAgICAgICogV2Ugbm93IHBlcmZvcm0gYSBzaW5nbGUgc21vb3Roc3RlcCgpIGNvbW1h
bmQgcGVyIHBpeGVsIGluc3RlYWQgb2YgOCBjbGFtcChkb3QoKSkgY29tbWFuZHMuCisgICAgICAg
ICogSXQgc2hvdWxkIG5vdyBiZSBwb3NzaWJsZSB0byBhbnRpYWxpYXMgaW5kaXZpZHVhbCBlZGdl
cy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpnZXRTdGF0aWNWQk8pOgorICAgICAgICAgICAgQ2Fj
aGUgdGhlIHVuaXQtcmVjdCBhbmQgZWRnZS10cmlhbmdsZSB2ZXJ0ZXggZGF0YSBpbiBhIFZCTy4K
KworICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6flRleHR1cmVNYXBwZXJH
TERhdGEpOgorICAgICAgICAgICAgQ2xlYXIgdGhlIGNhY2hlZCBWQk9zIHVwb24gZGVzdHJ1Y3Rp
b24uCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlkQ29sb3IpOgorICAg
ICAgICAgICAgVXNlIHRoZSBuZXcgc2lnbmF0dXJlICJkcmF3IiBpbnN0ZWFkIG9mICJkcmF3UXVh
ZCIuCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0VkZ2VUcmlhbmds
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VW5pdFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3KToKKyAgICAgICAgICAgIFJl
bW92ZWQgRHJhd1F1YWQsIGluc3RlYWQgZHJhdyBlaXRoZXIgYSB1bml0IHJlY3Qgb3IgZWRnZSB0
cmlhbmdsZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlw
KToKKyAgICAgICAgICAgIFVzZSB0aGUgbmV3IHNldE1hdHJpeCBmdW5jdGlvbi4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaDoKKyAgICAgICAg
ICAgIEFkZGVkIGEgcGFpbnQgZmxhZyBmb3IgYW50aWFsaWFzaW5nLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpzZXRNYXRyaXgpOgor
ICAgICAgICAgICAgU2luY2Ugd2Ugbm93IHNldCB0aGUgbWF0cml4IGluIG11bHRpcGxlIGxvY2F0
aW9ucywgYWRkZWQgYSBjb252ZW5pZW5jZSAKKyAgICAgICAgICAgIGZ1bmN0aW9uIGZvciBtYXRy
aXggdW5pZm9ybS4KKworICAgICAgICAoV2ViQ29yZTo6Z2V0U2hhZGVyU3BlYyk6CisgICAgICAg
ICAgICBVcGRhdGUgdGhlIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVyIHRvIGFjY291bnQgZm9y
IHRoZSBuZXcgYW50aWFsaWFzaW5nCisgICAgICAgICAgICBtZWNoYW5pc20uCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmg6Cisg
ICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisKIDIwMTItMTItMTIgIE5vJ2Ft
IFJvc2VudGhhbCAgPG5vYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbVGV4bWFwXSBJbnN0ZWFk
IG9mIGhhdmluZyBtdWx0aXBsZSBzaGFkZXJzIHNvdXJjZXMgd2l0aCBsb3RzIG9mIGR1cGxpY2F0
aW9uLCB3ZSBzaG91bGQgaGF2ZSBvbmUgc2hhZGVyIHNvdXJjZSB3aXRoIE1BQ1JPIHZhcmlhbnRz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDkxYjRhZTI5YWVlOTcwOTczOGNmYzlkMjVhNDBj
YzBlMGNiMDJmODAuLmRhMGU2ODQ4YzZmNjU1OWMyOGRlYjc1ZTEwZDkyYjE4OTA0ZjgyYmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0xMjUsNiArMTI1LDkgQEAgcHVibGljOgogICAgICAg
ICAsIG1fc2hhcmVkR0xEYXRhKFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6Y3Vy
cmVudFNoYXJlZEdMRGF0YSh0aGlzLT5jb250ZXh0KSkKICAgICB7IH0KIAorICAgIH5UZXh0dXJl
TWFwcGVyR0xEYXRhKCk7CisgICAgUGxhdGZvcm0zRE9iamVjdCBnZXRTdGF0aWNWQk8oR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIsIGNvbnN0IHZvaWQqIGRhdGEpOworCiAgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQ7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcHJvamVjdGlv
bk1hdHJpeDsKICAgICBUZXh0dXJlTWFwcGVyOjpQYWludEZsYWdzIFBhaW50RmxhZ3M7CkBAIC0x
MzcsOCArMTQwLDI5IEBAIHB1YmxpYzoKICAgICBHQzNEaW50IHByZXZpb3VzU2Npc3Nvcls0XTsK
ICAgICBSZWZQdHI8U2hhcmVkR0xEYXRhPiBtX3NoYXJlZEdMRGF0YTsKICAgICBSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gY3VycmVudFN1cmZhY2U7CisgICAgSGFzaE1hcDxjb25zdCB2b2lkKiwgUGxh
dGZvcm0zRE9iamVjdD4gdmJvczsKIH07CiAKK1BsYXRmb3JtM0RPYmplY3QgVGV4dHVyZU1hcHBl
ckdMRGF0YTo6Z2V0U3RhdGljVkJPKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUs
IGNvbnN0IHZvaWQqIGRhdGEpCit7CisgICAgSGFzaE1hcDxjb25zdCB2b2lkKiwgUGxhdGZvcm0z
RE9iamVjdD46Oml0ZXJhdG9yIGl0ID0gdmJvcy5maW5kKGRhdGEpOworICAgIGlmIChpdCAhPSB2
Ym9zLmVuZCgpKQorICAgICAgICByZXR1cm4gaXQtPnZhbHVlOworCisgICAgUGxhdGZvcm0zRE9i
amVjdCB2Ym8gPSBjb250ZXh0LT5jcmVhdGVCdWZmZXIoKTsKKyAgICBjb250ZXh0LT5iaW5kQnVm
ZmVyKHRhcmdldCwgdmJvKTsKKyAgICBjb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwg
ZGF0YSwgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKKyAgICB2Ym9zLmFkZChkYXRh
LCB2Ym8pOworICAgIHJldHVybiB2Ym87Cit9CisKK1RleHR1cmVNYXBwZXJHTERhdGE6On5UZXh0
dXJlTWFwcGVyR0xEYXRhKCkKK3sKKyAgICBIYXNoTWFwPGNvbnN0IHZvaWQqLCBQbGF0Zm9ybTNE
T2JqZWN0Pjo6aXRlcmF0b3IgZW5kID0gdmJvcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hNYXA8Y29u
c3Qgdm9pZCosIFBsYXRmb3JtM0RPYmplY3Q+OjppdGVyYXRvciBpdCA9IHZib3MuYmVnaW4oKTsg
aXQgIT0gdmJvcy5lbmQoKTsgKytpdCkKKyAgICAgICAgY29udGV4dC0+ZGVsZXRlQnVmZmVyKGl0
LT52YWx1ZSk7Cit9CisKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2s6OmluaXQoY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBjbGlwU3RhY2suY2xlYXIoKTsKQEAgLTI2OSw0MiAr
MjkzLDYgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmVuZFBhaW50aW5nKCkKICNlbmRpZgogfQog
Ci12b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmIHF1YWRUb0Ry
YXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtKiBzaGFkZXJQcm9ncmFtLCBHQzNEZW51bSBkcmF3aW5nTW9kZSwg
RmxhZ3MgZmxhZ3MpCi17Ci0gICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KHNoYWRlclByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwotICAgIG1fY29udGV4dDNELT5iaW5k
QnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDApOwotCi0gICAgY29uc3Qg
R0MzRGZsb2F0IHF1YWRbXSA9IHsKLSAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVk
VG9Vbml0U3F1YXJlLnAxKCkueCgpLCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRT
cXVhcmUucDEoKS55KCksCi0gICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5p
dFNxdWFyZS5wMigpLngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJl
LnAyKCkueSgpLAotICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVh
cmUucDMoKS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMygp
LnkoKSwKLSAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnA0
KCkueCgpLCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDQoKS55KCkK
LSAgICB9OwotICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlclByb2dy
YW0tPnZlcnRleExvY2F0aW9uKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2Us
IDAsIEdDM0RpbnRwdHIocXVhZCkpOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4
ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpLm11bHRpcGx5
KG1vZGVsVmlld01hdHJpeCkubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgoCi0gICAgICAg
ICAgICBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFyZ2V0UmVjdC53aWR0aCgpLCAwLCAwLCAwLAotICAg
ICAgICAgICAgMCwgcXVhZFRvRHJhdy5vcmlnaW5hbFRhcmdldFJlY3QuaGVpZ2h0KCksIDAsIDAs
Ci0gICAgICAgICAgICAwLCAwLCAxLCAwLAotICAgICAgICAgICAgcXVhZFRvRHJhdy5vcmlnaW5h
bFRhcmdldFJlY3QueCgpLCBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFyZ2V0UmVjdC55KCksIDAsIDEp
KTsKLSAgICBHQzNEZmxvYXQgbTRbXSA9IHsKLSAgICAgICAgbWF0cml4Lm0xMSgpLCBtYXRyaXgu
bTEyKCksIG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAotICAgICAgICBtYXRyaXgubTIxKCks
IG1hdHJpeC5tMjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCi0gICAgICAgIG1hdHJp
eC5tMzEoKSwgbWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQoKSwKLSAgICAg
ICAgbWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0cml4Lm00NCgp
Ci0gICAgfTsKLSAgICBtX2NvbnRleHQzRC0+dW5pZm9ybU1hdHJpeDRmdihzaGFkZXJQcm9ncmFt
LT5tYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgbTQpOwotCi0gICAgaWYgKGZsYWdzICYgU2hv
dWxkQmxlbmQpIHsKLSAgICAgICAgbV9jb250ZXh0M0QtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRl
eHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7Ci0gICAg
ICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJM
RU5EKTsKLQotICAgIG1fY29udGV4dDNELT5kcmF3QXJyYXlzKGRyYXdpbmdNb2RlLCAwLCA0KTsK
LSAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0t
PnZlcnRleExvY2F0aW9uKCkpOwotfQotCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRl
cihjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHdpZHRoLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgpCiB7CiAg
ICAgaWYgKGNsaXBTdGFjaygpLmN1cnJlbnQoKS5zY2lzc29yQm94LmlzRW1wdHkoKSkKQEAgLTMx
OCw3ICszMDYsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcihjb25zdCBDb2xv
ciYgY29sb3IsIGZsb2F0IHdpZHRoLCBjb25zdCBGbG9hdFJlYwogICAgIG1fY29udGV4dDNELT51
bmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICBtX2Nv
bnRleHQzRC0+bGluZVdpZHRoKHdpZHRoKTsKIAotICAgIGRyYXdRdWFkKHRhcmdldFJlY3QsIG1v
ZGVsVmlld01hdHJpeCwgcHJvZ3JhbS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9P
UCwgY29sb3IuaGFzQWxwaGEoKSA/IFNob3VsZEJsZW5kIDogMCk7CisgICAgZHJhdyh0YXJnZXRS
ZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0uZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpM
SU5FX0xPT1AsIGNvbG9yLmhhc0FscGhhKCkgPyBTaG91bGRCbGVuZCA6IDApOwogfQogCiB2b2lk
IFRleHR1cmVNYXBwZXJHTDo6ZHJhd1JlcGFpbnRDb3VudGVyKGludCB2YWx1ZSwgaW50IHBvaW50
U2l6ZSwgY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtb2RlbFZpZXdNYXRyaXgpCkBAIC00MDYsMTAgKzM5NCw5IEBAIHZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpkcmF3VGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEZsYWdzIGZs
YWdzLCBjb25zdCBJCiB7CiAgICAgYm9vbCB1c2VSZWN0ID0gZmxhZ3MgJiBTaG91bGRVc2VBUkJU
ZXh0dXJlUmVjdDsKICAgICBib29sIG1hc2tlZCA9ICEhbWFza1RleHR1cmU7Ci0gICAgYm9vbCBu
ZWVkc0FudGlhbGlhc2luZyA9IG1fZW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nICYmICFt
b2RlbFZpZXdNYXRyaXguaXNJbnRlZ2VyVHJhbnNsYXRpb24oKTsKLQotICAgIGlmICghdXNlUmVj
dCAmJiBuZWVkc0FudGlhbGlhc2luZyAmJiBkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodGV4
dHVyZSwgZmxhZ3MsIHRleHR1cmVTaXplLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9w
YWNpdHksIG1hc2tUZXh0dXJlLCBleHBvc2VkRWRnZXMpKQotICAgICAgICByZXR1cm47CisgICAg
Ym9vbCB1c2VBbnRpYWxpYXNpbmcgPSBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZwor
ICAgICAgICAmJiBleHBvc2VkRWRnZXMgPT0gQWxsRWRnZXMKKyAgICAgICAgJiYgIW1vZGVsVmll
d01hdHJpeC5tYXBRdWFkKHRhcmdldFJlY3QpLmlzUmVjdGlsaW5lYXIoKTsKIAogICAgIFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcHRpb25zIG9wdGlvbnMgPSBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6VGV4dHVyZTsKICAgICBpZiAobWFza2VkKQpAQCAtNDE4LDE2MyArNDA1LDk2
IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRl
eHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJCiAgICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OlJlY3Q7CiAgICAgaWYgKG9wYWNpdHkgPCAxKQogICAgICAgICBv
cHRpb25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5OworICAgIGlmICh1
c2VBbnRpYWxpYXNpbmcpIHsKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6QW50aWFsaWFzOworICAgICAgICBmbGFncyB8PSBTaG91bGRBbnRpYWxpYXM7Cisg
ICAgfQorCisgICAgaWYgKG1hc2tlZCB8fCB1c2VBbnRpYWxpYXNpbmcgfHwgb3BhY2l0eSA8IDEp
CisgICAgICAgIGZsYWdzIHw9IFNob3VsZEJsZW5kOwogCiAgICAgUmVmUHRyPFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtOwogICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xE
YXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25z
KTsKLSAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7Ci0K
ICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgdGV4dHVyZSwg
ZmxhZ3MsIHRleHR1cmVTaXplLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHks
IG1hc2tUZXh0dXJlKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9y
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJp
eCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpT
b2xpZENvbG9yKTsKKyAgICBGbGFncyBmbGFncyA9IDA7CisgICAgVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6Ok9wdGlvbnMgb3B0aW9ucyA9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpT
b2xpZENvbG9yOworICAgIGlmICghbWF0cml4Lm1hcFF1YWQocmVjdCkuaXNSZWN0aWxpbmVhcigp
KSB7CisgICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkFudGlh
bGlhczsKKyAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQgfCBTaG91bGRBbnRpYWxpYXM7Cisg
ICAgfQorCisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0g
ZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRl
clByb2dyYW0ob3B0aW9ucyk7CiAgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+
cHJvZ3JhbUlEKCkpOwogCiAgICAgZmxvYXQgciwgZywgYiwgYTsKICAgICBjb2xvci5nZXRSR0JB
KHIsIGcsIGIsIGEpOwogICAgIG1fY29udGV4dDNELT51bmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JM
b2NhdGlvbigpLCByLCBnLCBiLCBhKTsKKyAgICBpZiAoYSA8IDEpCisgICAgICAgIGZsYWdzIHw9
IFNob3VsZEJsZW5kOwogCi0gICAgZHJhd1F1YWQocmVjdCwgbWF0cml4LCBwcm9ncmFtLmdldCgp
LCBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCBhIDwgMSA/IFNob3VsZEJsZW5kIDog
MCk7Ci19Ci0KLXN0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2aWV3cG9ydE1hdHJpeChHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dDNEKQotewotICAgIEdDM0RpbnQgdmlld3BvcnRbNF07Ci0g
ICAgY29udGV4dDNELT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQsIHZp
ZXdwb3J0KTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKLSAgICBtYXRyaXgu
dHJhbnNsYXRlM2Qodmlld3BvcnRbMF0sIHZpZXdwb3J0WzFdLCAwKTsKLSAgICBtYXRyaXguc2Nh
bGUzZCh2aWV3cG9ydFsyXSwgdmlld3BvcnRbM10sIDApOwotCi0gICAgLy8gTWFwIHgsIHkgYW5k
IHogdG8gdW5pdCBzcXVhcmUgZnJvbSBPcGVuR0wgbm9ybWFsaXplZCBkZXZpY2UKLSAgICAvLyBj
b29yZGluYXRlcyB3aGljaCBhcmUgLTEgdG8gMSBvbiBldmVyeSBheGlzLgotICAgIG1hdHJpeC50
cmFuc2xhdGUzZCgwLjUsIDAuNSwgMC41KTsKLSAgICBtYXRyaXguc2NhbGUzZCgwLjUsIDAuNSwg
MC41KTsKLQotICAgIHJldHVybiBtYXRyaXg7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjYWxlTGluZUVx
dWF0aW9uQ29lZmZlY2llbnRzVG9PcHRpbWl6ZURpc3RhbmNlQ2FsY3VsYXRpb24oZmxvYXQqIGNv
ZWZmZWNpZW50cykKLXsKLSAgICAvLyBJbiB0aGUgZnJhZ21lbnQgc2hhZGVyIHdlIHdhbnQgdG8g
Y2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBmcm9tIHRoaXMKLSAgICAvLyBsaW5lIHRvIGEgcG9pbnQg
KHApLCB3aGljaCBpcyBnaXZlbiBieSB0aGUgZm9ybXVsYToKLSAgICAvLyAoQSpwLnggKyBCKnAu
eSArIEMpIC8gc3FydCAoYV4yICsgYl4yKQotICAgIC8vIFdlIGNhbiBkbyBhIHNtYWxsIGFtb3Vu
dCBvZiBwcmVjYWxjdWxhdGlvbiBoZXJlIHRvIHJlZHVjZSB0aGUKLSAgICAvLyBhbW91bnQgb2Yg
bWF0aCBpbiB0aGUgc2hhZGVyIGJ5IHNjYWxpbmcgdGhlIGNvZWZmZWNpZW50cyBub3cuCi0gICAg
ZmxvYXQgc2NhbGUgPSAxLjAgLyBGbG9hdFBvaW50KGNvZWZmZWNpZW50c1swXSwgY29lZmZlY2ll
bnRzWzFdKS5sZW5ndGgoKTsKLSAgICBjb2VmZmVjaWVudHNbMF0gPSBjb2VmZmVjaWVudHNbMF0g
KiBzY2FsZTsKLSAgICBjb2VmZmVjaWVudHNbMV0gPSBjb2VmZmVjaWVudHNbMV0gKiBzY2FsZTsK
LSAgICBjb2VmZmVjaWVudHNbMl0gPSBjb2VmZmVjaWVudHNbMl0gKiBzY2FsZTsKLX0KLQotc3Rh
dGljIHZvaWQgZ2V0U3RhbmRhcmRFcXVhdGlvbkNvZWZmZWNpZW50c0ZvckxpbmUoY29uc3QgRmxv
YXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCogY29lZmZlY2llbnRzKQot
ewotICAgIC8vIEdpdmVuIHR3byBwb2ludHMsIHRoZSBzdGFuZGFyZCBlcXVhdGlvbiBvZiBhIGxp
bmUgKEF4ICsgQnkgKyBDID0gMCkKLSAgICAvLyBjYW4gYmUgY2FsY3VsYXRlZCB2aWEgdGhlIGZv
cm11bGE6Ci0gICAgLy8gKHAxLnkg4oCTIHAyLnkpeCArIChwMS54IOKAkyBwMi54KXkgKyAoKHAx
LngqcDIueSkg4oCTIChwMi54KnAxLnkpKSA9IDAKLSAgICBjb2VmZmVjaWVudHNbMF0gPSBwMS55
KCkgLSBwMi55KCk7Ci0gICAgY29lZmZlY2llbnRzWzFdID0gcDIueCgpIC0gcDEueCgpOwotICAg
IGNvZWZmZWNpZW50c1syXSA9IHAxLngoKSAqIHAyLnkoKSAtIHAyLngoKSAqIHAxLnkoKTsKLSAg
ICBzY2FsZUxpbmVFcXVhdGlvbkNvZWZmZWNpZW50c1RvT3B0aW1pemVEaXN0YW5jZUNhbGN1bGF0
aW9uKGNvZWZmZWNpZW50cyk7CisgICAgZHJhdyhyZWN0LCBtYXRyaXgsIHByb2dyYW0uZ2V0KCks
IEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIGZsYWdzKTsKIH0KIAotc3RhdGljIHZv
aWQgcXVhZFRvRWRnZUFycmF5KGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgZmxvYXQqIGVkZ2VBcnJh
eSkKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3RWRnZVRyaWFuZ2xlcyhUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbSogcHJvZ3JhbSkKIHsKLSAgICBpZiAocXVhZC5pc0NvdW50ZXJjbG9ja3dp
c2UoKSkgewotICAgICAgICBnZXRTdGFuZGFyZEVxdWF0aW9uQ29lZmZlY2llbnRzRm9yTGluZShx
dWFkLnA0KCksIHF1YWQucDMoKSwgZWRnZUFycmF5KTsKLSAgICAgICAgZ2V0U3RhbmRhcmRFcXVh
dGlvbkNvZWZmZWNpZW50c0ZvckxpbmUocXVhZC5wMygpLCBxdWFkLnAyKCksIGVkZ2VBcnJheSAr
IDMpOwotICAgICAgICBnZXRTdGFuZGFyZEVxdWF0aW9uQ29lZmZlY2llbnRzRm9yTGluZShxdWFk
LnAyKCksIHF1YWQucDEoKSwgZWRnZUFycmF5ICsgNik7Ci0gICAgICAgIGdldFN0YW5kYXJkRXF1
YXRpb25Db2VmZmVjaWVudHNGb3JMaW5lKHF1YWQucDEoKSwgcXVhZC5wNCgpLCBlZGdlQXJyYXkg
KyA5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBnZXRTdGFuZGFyZEVxdWF0aW9uQ29l
ZmZlY2llbnRzRm9yTGluZShxdWFkLnA0KCksIHF1YWQucDEoKSwgZWRnZUFycmF5KTsKLSAgICBn
ZXRTdGFuZGFyZEVxdWF0aW9uQ29lZmZlY2llbnRzRm9yTGluZShxdWFkLnAxKCksIHF1YWQucDIo
KSwgZWRnZUFycmF5ICsgMyk7Ci0gICAgZ2V0U3RhbmRhcmRFcXVhdGlvbkNvZWZmZWNpZW50c0Zv
ckxpbmUocXVhZC5wMigpLCBxdWFkLnAzKCksIGVkZ2VBcnJheSArIDYpOwotICAgIGdldFN0YW5k
YXJkRXF1YXRpb25Db2VmZmVjaWVudHNGb3JMaW5lKHF1YWQucDMoKSwgcXVhZC5wNCgpLCBlZGdl
QXJyYXkgKyA5KTsKKyAgICBjb25zdCBHQzNEZmxvYXQgTGVmdCA9IDA7CisgICAgY29uc3QgR0Mz
RGZsb2F0IFRvcCA9IDA7CisgICAgY29uc3QgR0MzRGZsb2F0IFJpZ2h0ID0gMTsKKyAgICBjb25z
dCBHQzNEZmxvYXQgQm90dG9tID0gMTsKKyAgICBjb25zdCBHQzNEZmxvYXQgQ2VudGVyID0gMC41
OworI2RlZmluZSBTSURFX1RSSUFOR0xFKHgxLCB5MSwgeDIsIHkyKSB4MSwgeTEsIHgxLCB5MSwg
eDIsIHkyLCB4MiwgeTIsIENlbnRlciwgQ2VudGVyLCAoeDEgKyB4MikgLyAyLCAoeTEgKyB5Mikg
LyAyCisgICAgc3RhdGljIGNvbnN0IEdDM0RmbG9hdCB1bml0UmVjdFNpZGVUcmlhbmdsZXNbXSA9
IHsKKyAgICAgICAgU0lERV9UUklBTkdMRShMZWZ0LCBUb3AsIFJpZ2h0LCBUb3ApLAorICAgICAg
ICBTSURFX1RSSUFOR0xFKExlZnQsIFRvcCwgTGVmdCwgQm90dG9tKSwKKyAgICAgICAgU0lERV9U
UklBTkdMRShSaWdodCwgVG9wLCBSaWdodCwgQm90dG9tKSwKKyAgICAgICAgU0lERV9UUklBTkdM
RShMZWZ0LCBCb3R0b20sIFJpZ2h0LCBCb3R0b20pCisgICAgfTsKKyN1bmRlZiBTSURFX1RSSUFO
R0xFCisgICAgUGxhdGZvcm0zRE9iamVjdCB2Ym8gPSBkYXRhKCkuZ2V0U3RhdGljVkJPKEdyYXBo
aWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHNpemVvZihHQzNEZmxvYXQpICogNDgsIHVuaXRS
ZWN0U2lkZVRyaWFuZ2xlcyk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRCdWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgdmJvKTsKKyAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0
cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCA0LCBHcmFwaGljc0NvbnRleHQz
RDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhHcmFw
aGljc0NvbnRleHQzRDo6VFJJQU5HTEVTLCAwLCAxMik7CiB9CiAKLXN0YXRpYyBGbG9hdFNpemUg
c2NhbGVkVmVjdG9yRGlmZmVyZW5jZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50MiwgZmxvYXQgc2NhbGUpCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJh
d1VuaXRSZWN0KFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCBHQzNEZW51bSBk
cmF3aW5nTW9kZSkKIHsKLSAgICBGbG9hdFNpemUgdmVjdG9yID0gcG9pbnQxIC0gcG9pbnQyOwot
ICAgIGlmICh2ZWN0b3IuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkpCi0gICAgICAgIHZlY3Rvci5z
Y2FsZSgxLjAgLyB2ZWN0b3IuZGlhZ29uYWxMZW5ndGgoKSk7Ci0KLSAgICB2ZWN0b3Iuc2NhbGUo
c2NhbGUpOwotICAgIHJldHVybiB2ZWN0b3I7CisgICAgc3RhdGljIGNvbnN0IEdDM0RmbG9hdCB1
bml0UmVjdFtdID0geyAwLCAwLCAxLCAwLCAxLCAxLCAwLCAxIH07CisgICAgUGxhdGZvcm0zRE9i
amVjdCB2Ym8gPSBkYXRhKCkuZ2V0U3RhdGljVkJPKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9C
VUZGRVIsIHNpemVvZihHQzNEZmxvYXQpICogOCwgdW5pdFJlY3QpOworICAgIG1fY29udGV4dDNE
LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHZibyk7CisgICAg
bV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4TG9jYXRpb24o
KSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgbV9jb250
ZXh0M0QtPmRyYXdBcnJheXMoZHJhd2luZ01vZGUsIDAsIDQpOwogfQogCi1zdGF0aWMgRmxvYXRR
dWFkIGluZmxhdGVRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgZmxvYXQgZGlzdGFuY2UpCit2
b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhdyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtKiBzaGFkZXJQcm9ncmFtLCBHQzNEZW51bSBkcmF3aW5nTW9kZSwgRmxhZ3MgZmxhZ3Mp
CiB7Ci0gICAgRmxvYXRRdWFkIGV4cGFuZGVkUXVhZCA9IHF1YWQ7Ci0gICAgZXhwYW5kZWRRdWFk
LnNldFAxKGV4cGFuZGVkUXVhZC5wMSgpICsgc2NhbGVkVmVjdG9yRGlmZmVyZW5jZShxdWFkLnAx
KCksIHF1YWQucDIoKSwgZGlzdGFuY2UpKTsKLSAgICBleHBhbmRlZFF1YWQuc2V0UDQoZXhwYW5k
ZWRRdWFkLnA0KCkgKyBzY2FsZWRWZWN0b3JEaWZmZXJlbmNlKHF1YWQucDQoKSwgcXVhZC5wMygp
LCBkaXN0YW5jZSkpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9CisgICAgICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4KG1vZGVsVmlld01hdHJpeCkKKyAgICAgICAgICAgIC5tdWx0
aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVjdChGbG9hdFJlY3QoMCwgMCwgMSwg
MSksIHJlY3QpKTsKIAotICAgIGV4cGFuZGVkUXVhZC5zZXRQMShleHBhbmRlZFF1YWQucDEoKSAr
IHNjYWxlZFZlY3RvckRpZmZlcmVuY2UocXVhZC5wMSgpLCBxdWFkLnA0KCksIGRpc3RhbmNlKSk7
Ci0gICAgZXhwYW5kZWRRdWFkLnNldFAyKGV4cGFuZGVkUXVhZC5wMigpICsgc2NhbGVkVmVjdG9y
RGlmZmVyZW5jZShxdWFkLnAyKCksIHF1YWQucDMoKSwgZGlzdGFuY2UpKTsKKyAgICBtX2NvbnRl
eHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRp
b24oKSk7CisgICAgc2hhZGVyUHJvZ3JhbS0+c2V0TWF0cml4KHNoYWRlclByb2dyYW0tPm1vZGVs
Vmlld01hdHJpeExvY2F0aW9uKCksIG1hdHJpeCk7CisgICAgc2hhZGVyUHJvZ3JhbS0+c2V0TWF0
cml4KHNoYWRlclByb2dyYW0tPnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpLCBkYXRhKCkucHJv
amVjdGlvbk1hdHJpeCk7CiAKLSAgICBleHBhbmRlZFF1YWQuc2V0UDIoZXhwYW5kZWRRdWFkLnAy
KCkgKyBzY2FsZWRWZWN0b3JEaWZmZXJlbmNlKHF1YWQucDIoKSwgcXVhZC5wMSgpLCBkaXN0YW5j
ZSkpOwotICAgIGV4cGFuZGVkUXVhZC5zZXRQMyhleHBhbmRlZFF1YWQucDMoKSArIHNjYWxlZFZl
Y3RvckRpZmZlcmVuY2UocXVhZC5wMygpLCBxdWFkLnA0KCksIGRpc3RhbmNlKSk7CisgICAgaWYg
KGZsYWdzICYgU2hvdWxkQmxlbmQpIHsKKyAgICAgICAgbV9jb250ZXh0M0QtPmJsZW5kRnVuYyhH
cmFwaGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19B
TFBIQSk7CisgICAgICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJM
RU5EKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OkJMRU5EKTsKIAotICAgIGV4cGFuZGVkUXVhZC5zZXRQMyhleHBhbmRlZFF1YWQu
cDMoKSArIHNjYWxlZFZlY3RvckRpZmZlcmVuY2UocXVhZC5wMygpLCBxdWFkLnAyKCksIGRpc3Rh
bmNlKSk7Ci0gICAgZXhwYW5kZWRRdWFkLnNldFA0KGV4cGFuZGVkUXVhZC5wNCgpICsgc2NhbGVk
VmVjdG9yRGlmZmVyZW5jZShxdWFkLnA0KCksIHF1YWQucDEoKSwgZGlzdGFuY2UpKTsKKyAgICBp
ZiAoZmxhZ3MgJiBTaG91bGRBbnRpYWxpYXMpCisgICAgICAgIGRyYXdFZGdlVHJpYW5nbGVzKHNo
YWRlclByb2dyYW0pOworICAgIGVsc2UKKyAgICAgICAgZHJhd1VuaXRSZWN0KHNoYWRlclByb2dy
YW0sIGRyYXdpbmdNb2RlKTsKIAotICAgIHJldHVybiBleHBhbmRlZFF1YWQ7CisgICAgbV9jb250
ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2Nh
dGlvbigpKTsKIH0KLQotYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlV2l0aEFudGlh
bGlhc2luZyh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYgc2l6
ZSwgY29uc3QgRmxvYXRSZWN0JiBvcmlnaW5hbFRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRl
eHR1cmUqIG1hc2tUZXh0dXJlLCB1bnNpZ25lZCBleHBvc2VkRWRnZXMpCit2b2lkIFRleHR1cmVN
YXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtKiBwcm9ncmFtLCB1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50
U2l6ZSYgc2l6ZSwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJl
KiBtYXNrVGV4dHVyZSkKIHsKLSAgICAvLyBUaGUgYW50aWFsaWFzaW5nIHBhdGggZG9lcyBub3Qg
c3VwcG9ydCBtYXNrIHRleHR1cmVzIGF0IHRoZSBtb21lbnQuCi0gICAgaWYgKG1hc2tUZXh0dXJl
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGb3Igbm93IHdlIHB1bnQgb24gcmVu
ZGVyaW5nIHRpbGVkIGxheWVycyB3aXRoIGFudGlhbGlhc2luZy4gSXQncyBxdWl0ZSBoYXJkCi0g
ICAgLy8gdG8gcmVuZGVyIHRoZW0gd2l0aG91dCBzZWFtcy4KLSAgICBpZiAoZXhwb3NlZEVkZ2Vz
ICE9IEFsbEVkZ2VzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBUaGUgZ29hbCBo
ZXJlIGlzIHJlbmRlciBhIHNsaWdodGx5IGxhcmdlciAoMC43NSBwaXhlbHMgaW4gc2NyZWVuIHNw
YWNlKSBxdWFkIGFuZCB0bwotICAgIC8vIGdyYWR1YWxseSB0YXBlciBvZmYgdGhlIGFscGhhIHZh
bHVlcyB0byBkbyBhIHNpbXBsZSB2ZXJzaW9uIG9mIGVkZ2UgZGlzdGFuY2UKLSAgICAvLyBhbnRp
YWxpYXNpbmcuIE5vdGUgaGVyZSB0aGF0IHdlIGFyZSBhbHNvIGluY2x1ZGluZyB0aGUgdmlld3Bv
cnQgbWF0cml4ICh3aGljaAotICAgIC8vIHRyYW5zbGF0ZXMgZnJvbSBub3JtYWxpemVkIGRldmlj
ZSBjb29yZGluYXRlcyB0byBzY3JlZW4gY29vcmRpbmF0ZXMpLCBiZWNhdXNlIHRoZXNlCi0gICAg
Ly8gdmFsdWVzIGFyZSBjb25zdW1lZCBpbiB0aGUgZnJhZ21lbnQgc2hhZGVyLCB3aGljaCB3b3Jr
cyBpbiBzY3JlZW4gY29vcmRpbmF0ZXMuCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2NyZWVu
U3BhY2VUcmFuc2Zvcm0gPSB2aWV3cG9ydE1hdHJpeChtX2NvbnRleHQzRC5nZXQoKSkubXVsdGlw
bHkoVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpKS5tdWx0aXBs
eShtb2RlbFZpZXdNYXRyaXgpLnRvMmRUcmFuc2Zvcm0oKTsKLSAgICBpZiAoIXNjcmVlblNwYWNl
VHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRmxv
YXRRdWFkIHF1YWRJblNjcmVlblNwYWNlID0gc2NyZWVuU3BhY2VUcmFuc2Zvcm0ubWFwUXVhZChv
cmlnaW5hbFRhcmdldFJlY3QpOwotCi0gICAgY29uc3QgZmxvYXQgaW5mbGF0aW9uRGlzdGFuY2Ug
PSAwLjc1OwotICAgIEZsb2F0UXVhZCBleHBhbmRlZFF1YWRJblNjcmVlblNwYWNlID0gaW5mbGF0
ZVF1YWQocXVhZEluU2NyZWVuU3BhY2UsIGluZmxhdGlvbkRpc3RhbmNlKTsKLQotICAgIC8vIElu
IHRoZSBub24tYW50aWFsaWFzZWQgY2FzZSB0aGUgdmVydGljZXMgcGFzc2VkIGFyZSB0aGUgdW5p
dCByZWN0YW5nbGUgYW5kIGRvdWJsZQotICAgIC8vIGFzIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVz
ICgwLDAgMSwwLCAxLDEgYW5kIDAsMSkuIEhlcmUgd2UgbWFwIHRoZSBleHBhbmRlZCBxdWFkCi0g
ICAgLy8gY29vcmRpbmF0ZXMgaW4gc2NyZWVuIHNwYWNlIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHJl
Y3QncyB0ZXh0dXJlIGNvb3JkaW5hdGVzLgotICAgIC8vIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2Yg
c2xpZ2h0bHkgaW5jcmVhc2luZyB0aGUgc2l6ZSBvZiB0aGUgb3JpZ2luYWwgcXVhZCdzIGdlb21l
dHJ5Ci0gICAgLy8gaW4gdGhlIHZlcnRleCBzaGFkZXIuCi0gICAgRmxvYXRRdWFkIGV4cGFuZGVk
UXVhZEluVGV4dHVyZUNvb3JkaW5hdGVzID0gc2NyZWVuU3BhY2VUcmFuc2Zvcm0uaW52ZXJzZSgp
Lm1hcFF1YWQoZXhwYW5kZWRRdWFkSW5TY3JlZW5TcGFjZSk7Ci0gICAgZXhwYW5kZWRRdWFkSW5U
ZXh0dXJlQ29vcmRpbmF0ZXMubW92ZSgtb3JpZ2luYWxUYXJnZXRSZWN0LngoKSwgLW9yaWdpbmFs
VGFyZ2V0UmVjdC55KCkpOwotICAgIGV4cGFuZGVkUXVhZEluVGV4dHVyZUNvb3JkaW5hdGVzLnNj
YWxlKDEgLyBvcmlnaW5hbFRhcmdldFJlY3Qud2lkdGgoKSwgMSAvIG9yaWdpbmFsVGFyZ2V0UmVj
dC5oZWlnaHQoKSk7Ci0KLSAgICAvLyBXZSBwcmVwYXJlIGJvdGggdGhlIGV4cGFuZGVkIHF1YWQg
Zm9yIHRoZSBmcmFnbWVudCBzaGFkZXIgYXMgd2VsbCBhcyB0aGUgcmVjdGFuZ3VsYXIgYm91bmRp
bmcKLSAgICAvLyBib3ggb2YgdGhhdCBxdWFkLCBhcyB0aGF0IHNlZW1zIG5lY2Vzc2FyeSB0byBw
cm9wZXJseSBhbnRpYWxpYXMgYmFja2ZhY2luZyBxdWFkcy4KLSAgICBmbG9hdCB0YXJnZXRRdWFk
RWRnZXNbMjRdOwotICAgIHF1YWRUb0VkZ2VBcnJheShleHBhbmRlZFF1YWRJblNjcmVlblNwYWNl
LCB0YXJnZXRRdWFkRWRnZXMpOwotICAgIHF1YWRUb0VkZ2VBcnJheShpbmZsYXRlUXVhZChxdWFk
SW5TY3JlZW5TcGFjZS5ib3VuZGluZ0JveCgpLCAgaW5mbGF0aW9uRGlzdGFuY2UpLCB0YXJnZXRR
dWFkRWRnZXMgKyAxMik7Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlvbnMg
b3B0aW9ucyA9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpBbnRpYWxpYXMgfCBUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZTsKLSAgICBpZiAob3BhY2l0eSA8IDEpCi0gICAg
ICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wYWNpdHk7Ci0KLSAg
ICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hh
cmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShv
cHRpb25zKTsKICAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQo
KSk7Ci0gICAgbV9jb250ZXh0M0QtPnVuaWZvcm0zZnYocHJvZ3JhbS0+ZXhwYW5kZWRRdWFkRWRn
ZXNJblNjcmVlblNwYWNlTG9jYXRpb24oKSwgOCwgdGFyZ2V0UXVhZEVkZ2VzKTsKLQotICAgIGRy
YXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCB0ZXh0dXJlLCBmbGFncywg
c2l6ZSwgRHJhd1F1YWQob3JpZ2luYWxUYXJnZXRSZWN0LCBleHBhbmRlZFF1YWRJblRleHR1cmVD
b29yZGluYXRlcyksIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgMCAvKiBtYXNrVGV4dHVyZSAq
Lyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4
dHVyZWRRdWFkV2l0aFByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qIHByb2dyYW0s
IHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJbnRTaXplJiBzaXplLCBjb25z
dCBEcmF3UXVhZCYgcXVhZFRvRHJhdywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVs
Vmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1
cmUpCi17Ci0gICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0t
PnZlcnRleExvY2F0aW9uKCkpOwogICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgR0MzRGVudW0gdGFyZ2V0ID0gZmxhZ3MgJiBT
aG91bGRVc2VBUkJUZXh0dXJlUmVjdCA/IEdDM0RlbnVtKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9S
RUNUQU5HTEVfQVJCKSA6IEdDM0RlbnVtKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKTsK
ICAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKQEAgLTU5Niw3
ICs1MTYsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9n
cmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcgogICAgIGlmIChvcGFjaXR5IDwgMSB8
fCBtYXNrVGV4dHVyZSkKICAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CiAKLSAgICBkcmF3
UXVhZChxdWFkVG9EcmF3LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0sIEdyYXBoaWNzQ29udGV4
dDNEOjpUUklBTkdMRV9GQU4sIGZsYWdzKTsKKyAgICBkcmF3KHJlY3QsIG1vZGVsVmlld01hdHJp
eCwgcHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgZmxhZ3MpOwogfQog
CiBCaXRtYXBUZXh0dXJlR0w6OkJpdG1hcFRleHR1cmVHTChUZXh0dXJlTWFwcGVyR0wqIHRleHR1
cmVNYXBwZXIpCkBAIC0xMTcwLDI2ICsxMDkwLDExIEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpi
ZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29u
CiAgICAgY29uc3QgR0MzRGZsb2F0IHVuaXRSZWN0W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwg
MX07CiAgICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4
TG9jYXRpb24oKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGlu
dHB0cih1bml0UmVjdCkpOwogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJh
bnNmb3JtYXRpb25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpCi0gICAgICAgICAgICAu
bXVsdGlwbHkobW9kZWxWaWV3TWF0cml4KQotICAgICAgICAgICAgLm11bHRpcGx5KFRyYW5zZm9y
bWF0aW9uTWF0cml4KHRhcmdldFJlY3Qud2lkdGgoKSwgMCwgMCwgMCwKLSAgICAgICAgICAgICAg
ICAwLCB0YXJnZXRSZWN0LmhlaWdodCgpLCAwLCAwLAotICAgICAgICAgICAgICAgIDAsIDAsIDEs
IDAsCi0gICAgICAgICAgICAgICAgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCAwLCAx
KSk7Ci0KLSAgICBjb25zdCBHQzNEZmxvYXQgbTRbXSA9IHsKLSAgICAgICAgbWF0cml4Lm0xMSgp
LCBtYXRyaXgubTEyKCksIG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAotICAgICAgICBtYXRy
aXgubTIxKCksIG1hdHJpeC5tMjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCi0gICAg
ICAgIG1hdHJpeC5tMzEoKSwgbWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQo
KSwKLSAgICAgICAgbWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0
cml4Lm00NCgpCi0gICAgfTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPQorICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtb2RlbFZpZXdNYXRyaXgpCisgICAgICAgICAgICAu
bXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoRmxvYXRSZWN0KDAsIDAs
IDEsIDEpLCB0YXJnZXRSZWN0KSk7CiAKLSAgICBjb25zdCBHQzNEZmxvYXQgbTRhbGxbXSA9IHsK
LSAgICAgICAgMiwgMCwgMCwgMCwKLSAgICAgICAgMCwgMiwgMCwgMCwKLSAgICAgICAgMCwgMCwg
MSwgMCwKLSAgICAgICAgLTEsIC0xLCAwLCAxCi0gICAgfTsKKyAgICBzdGF0aWMgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXggZnVsbFByb2plY3Rpb25NYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6cmVjdFRvUmVjdChGbG9hdFJlY3QoMCwgMCwgMSwgMSksIEZsb2F0UmVjdCgtMSwgLTEs
IDIsIDIpKTsKIAogICAgIGludCYgc3RlbmNpbEluZGV4ID0gY2xpcFN0YWNrKCkuY3VycmVudCgp
LnN0ZW5jaWxJbmRleDsKIApAQCAtMTIwMiwxMyArMTEwNywxNSBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRy
aXgsIGNvbgogICAgIG1fY29udGV4dDNELT5zdGVuY2lsTWFzaygweGZmICYgfihzdGVuY2lsSW5k
ZXggLSAxKSk7CiAKICAgICAvLyBGaXJzdCBjbGVhciB0aGUgZW50aXJlIGJ1ZmZlciBhdCB0aGUg
Y3VycmVudCBpbmRleC4KLSAgICBtX2NvbnRleHQzRC0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFt
LT5tYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgY29uc3RfY2FzdDxHQzNEZmxvYXQqPihtNGFs
bCkpOworICAgIHByb2dyYW0tPnNldE1hdHJpeChwcm9ncmFtLT5wcm9qZWN0aW9uTWF0cml4TG9j
YXRpb24oKSwgZnVsbFByb2plY3Rpb25NYXRyaXgpOworICAgIHByb2dyYW0tPnNldE1hdHJpeChw
cm9ncmFtLT5tb2RlbFZpZXdNYXRyaXhMb2NhdGlvbigpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
KTsKICAgICBtX2NvbnRleHQzRC0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPLCBH
cmFwaGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8pOwogICAgIG1f
Y29udGV4dDNELT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIDAs
IDQpOwogCiAgICAgLy8gTm93IGFwcGx5IHRoZSBjdXJyZW50IGluZGV4IHRvIHRoZSBuZXcgcXVh
ZC4KICAgICBtX2NvbnRleHQzRC0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpSRVBMQUNF
LCBHcmFwaGljc0NvbnRleHQzRDo6UkVQTEFDRSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFUExBQ0Up
OwotICAgIG1fY29udGV4dDNELT51bmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0
aW9uKCksIDEsIGZhbHNlLCBjb25zdF9jYXN0PEdDM0RmbG9hdCo+KG00KSk7CisgICAgcHJvZ3Jh
bS0+c2V0TWF0cml4KHByb2dyYW0tPnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpLCBkYXRhKCku
cHJvamVjdGlvbk1hdHJpeCk7CisgICAgcHJvZ3JhbS0+c2V0TWF0cml4KHByb2dyYW0tPm1vZGVs
Vmlld01hdHJpeExvY2F0aW9uKCksIG1hdHJpeCk7CiAgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJh
eXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgNCk7CiAKICAgICAvLyBDbGVh
ciB0aGUgc3RhdGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKaW5kZXggNTlkYjNkMzk3OWMwZDEwYmU0MTQ4
MTVlNzgyMzE1ZGYwN2MzNWExNi4uYWExMzMxMmZhYWZjYTMxZmRmMWQxYzQxNGQzNWMyN2NhYzgw
MmNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaApAQCAtNDQsNyArNDQsOCBAQCBwdWJsaWM6CiAgICAg
ZW51bSBGbGFnIHsKICAgICAgICAgU2hvdWxkQmxlbmQgPSAweDAxLAogICAgICAgICBTaG91bGRG
bGlwVGV4dHVyZSA9IDB4MDIsCi0gICAgICAgIFNob3VsZFVzZUFSQlRleHR1cmVSZWN0ID0gMHgw
NAorICAgICAgICBTaG91bGRVc2VBUkJUZXh0dXJlUmVjdCA9IDB4MDQsCisgICAgICAgIFNob3Vs
ZEFudGlhbGlhcyA9IDB4MDgKICAgICB9OwogCiAgICAgdHlwZWRlZiBpbnQgRmxhZ3M7CkBAIC05
OCwyMiArOTksMTMgQEAgcHJpdmF0ZToKICAgICAgICAgVmVjdG9yPENsaXBTdGF0ZT4gY2xpcFN0
YWNrOwogICAgIH07CiAKLSAgICBzdHJ1Y3QgRHJhd1F1YWQgewotICAgICAgICBEcmF3UXVhZChj
b25zdCBGbG9hdFJlY3QmIG9yaWdpbmFsVGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRRdWFkJiB0YXJn
ZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgRmxvYXRT
aXplKDEsIDEpKSkKLSAgICAgICAgICAgIDogb3JpZ2luYWxUYXJnZXRSZWN0KG9yaWdpbmFsVGFy
Z2V0UmVjdCkKLSAgICAgICAgICAgICwgdGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZSh0YXJn
ZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAg
ICBGbG9hdFJlY3Qgb3JpZ2luYWxUYXJnZXRSZWN0OwotICAgICAgICBGbG9hdFF1YWQgdGFyZ2V0
UmVjdE1hcHBlZFRvVW5pdFNxdWFyZTsKLSAgICB9OwotCiAgICAgVGV4dHVyZU1hcHBlckdMKCk7
CiAKLSAgICBib29sIGRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJl
LCBGbGFncywgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYgb3JpZ2luYWxUYXJnZXRS
ZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBv
cGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3Nl
ZEVkZ2VzKTsKLSAgICB2b2lkIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbSosIHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBJbnRTaXpl
JiwgY29uc3QgRHJhd1F1YWQmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3
TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7
Ci0gICAgdm9pZCBkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiwgR0Mz
RGVudW0gZHJhd2luZ01vZGUsIEZsYWdzKTsKKyAgICB2b2lkIGRyYXdUZXh0dXJlZFF1YWRXaXRo
UHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSosIHVpbnQzMl90IHRleHR1cmUsIEZs
YWdzLCBjb25zdCBJbnRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4
dHVyZSogbWFza1RleHR1cmUpOworICAgIHZvaWQgZHJhdyhjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbSosIEdDM0RlbnVtIGRyYXdpbmdNb2RlLCBGbGFncyk7CisKKyAgICB2b2lkIGRy
YXdVbml0UmVjdChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSosIEdDM0RlbnVtIGRyYXdpbmdN
b2RlKTsKKyAgICB2b2lkIGRyYXdFZGdlVHJpYW5nbGVzKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtKik7CiAKICAgICBib29sIGJlZ2luU2Npc3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIGJpbmREZWZhdWx0U3VyZmFjZSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKaW5kZXggZjRkY2Zm
ZWFkZjBmY2VlNGRkYmY4YWQ3ZDJkNTUxNTk4MTQxNWRlNi4uZTljNzk2MDRlY2JjNWFmMmUxYzhk
NjQ0ZTRiOGVjZmI0ZjAwM2U2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuY3BwCkBAIC03MCw2ICs3MCwxOCBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleAogICAg
IExPRyhDb21wb3NpdGluZywgIlByb2dyYW0gbG9nOiAlc1xuIiwgbG9nLnV0ZjgoKS5kYXRhKCkp
OwogfQogCit2b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpzZXRNYXRyaXgoR0MzRHVp
bnQgbG9jYXRpb24sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCit7CisgICAg
R0MzRGZsb2F0IG1hdHJpeEFzRmxvYXRzW10gPSB7CisgICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0
cml4Lm0xMigpLCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQoKSwKKyAgICAgICAgbWF0cml4Lm0y
MSgpLCBtYXRyaXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgpLAorICAgICAgICBt
YXRyaXgubTMxKCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCksCisg
ICAgICAgIG1hdHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5t
NDQoKQorICAgIH07CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24s
IDEsIGZhbHNlLCBtYXRyaXhBc0Zsb2F0cyk7Cit9CisKIEdDM0R1aW50IFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtOjpnZXRMb2NhdGlvbihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFZhcmlh
YmxlVHlwZSB0eXBlKQogewogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBHQzNEdWludD46Oml0
ZXJhdG9yIGl0ID0gbV92YXJpYWJsZXMuZmluZChuYW1lKTsKQEAgLTEwNiwzMiArMTE4LDY2IEBA
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0o
KQogICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFtSUQpOwogfQogCi1zdGF0aWMg
Y29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlID0KKyNkZWZpbmUgR0xTTF9ESVJFQ1RJVkUo
Li4uKSAiIyIjX19WQV9BUkdTX18iXG4iCitzdGF0aWMgY29uc3QgY2hhciogdmVydGV4VGVtcGxh
dGUgPQogICAgIFNUUklOR0lGWSgKLSAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OworICAg
ICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKKyAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbW9k
ZWxWaWV3TWF0cml4OworICAgICAgICB1bmlmb3JtIG1hdDQgdV9wcm9qZWN0aW9uTWF0cml4Owog
ICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZmxpcDsKICAgICAgICAgdW5pZm9ybSB2ZWMyIHVfdGV4
dHVyZVNpemU7Ci0gICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OworCiAgICAgICAgIHZh
cnlpbmcgdmVjMiB2X3RleENvb3JkOwogICAgICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29v
cmQ7CisgICAgICAgIHZhcnlpbmcgZmxvYXQgdl9hbnRpYWxpYXM7CisKKyAgICAgICAgdm9pZCBu
b29wKHZlYzIpIHsgfQorCisgICAgICAgIHZlYzQgdG9TY3JlZW5TcGFjZSh2ZWMyIHBvcykgeyBy
ZXR1cm4gdmVjNChwb3MsIDAuLCAxLikgKiB1X21vZGVsVmlld01hdHJpeDsgfQorCisgICAgICAg
IC8vIFRoaXMgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgd2UgZ2V0IGVk
Z2UgdHJpYW5nbGVzIHdpdGggY29udHJvbCBwb2ludHMsCisgICAgICAgIC8vIGEgY29udHJvbCBw
b2ludCBiZWluZyB0aGUgbmVhcmVzdCBwb2ludCB0byB0aGUgY29vcmRpbmF0ZSB0aGF0IGlzIG9u
IHRoZSBlZGdlLgorICAgICAgICB2b2lkIGFwcGx5QW50aWFsaWFzKGlub3V0IHZlYzIgcG9zaXRp
b24pCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdlIGNvdW50IG9uIHRoZSBmYWN0IHRoYXQg
cXVhZCBwYXNzZWQgaW4gaXMgYWx3YXlzIGEgdW5pdCByZWN0LAorICAgICAgICAgICAgLy8gYW5k
IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggYXBwbGllcyB0aGUgcmVhbCByZWN0LgorICAgICAg
ICAgICAgY29uc3QgdmVjMiBjZW50ZXIgPSB2ZWMyKDAuNSwgMC41KTsKKyAgICAgICAgICAgIGNv
bnN0IGZsb2F0IGFudGlhbGlhc0luZmxhdGlvbkRpc3RhbmNlID0gMS47CisKKyAgICAgICAgICAg
IC8vIFdlIHBhc3MgdGhlIGNvbnRyb2wgcG9pbnQgYXMgdGhlIHp3IGNvb3JkaW5hdGVzIG9mIHRo
ZSB2ZXJ0ZXguCisgICAgICAgICAgICAvLyBUaGUgY29udHJvbCBwb2ludCBpcyB0aGUgcG9pbnQg
b24gdGhlIGVkZ2UgY2xvc2VzdCB0byB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAgICAgICAgICAg
IC8vIFRoZSBjb250cm9sIHBvaW50IGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgYW50aWFsaWFzIHZh
bHVlLgorICAgICAgICAgICAgdmVjMiBjb250cm9sUG9pbnQgPSBhX3ZlcnRleC56dzsKKworICAg
ICAgICAgICAgLy8gRmlyc3Qgd2UgY2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBpbiBzY3JlZW4gc3Bh
Y2UuCisgICAgICAgICAgICB2ZWM0IGNlbnRlckluU2NyZWVuQ29vcmRpbmF0ZXMgPSB0b1NjcmVl
blNwYWNlKGNlbnRlcik7CisgICAgICAgICAgICB2ZWM0IGNvbnRyb2xQb2ludEluU2NyZWVuQ29v
cmRpbmF0ZXMgPSB0b1NjcmVlblNwYWNlKGNvbnRyb2xQb2ludCk7CisgICAgICAgICAgICBmbG9h
dCBzY3JlZW5TcGFjZURpc3RhbmNlID0gZGlzdGFuY2UoY2VudGVySW5TY3JlZW5Db29yZGluYXRl
cywgY29udHJvbFBvaW50SW5TY3JlZW5Db29yZGluYXRlcyk7CisKKyAgICAgICAgICAgIC8vIFdl
IGFkZCB0aGUgaW5mbGF0aW9uIGRpc3RhbmNlIHRvIHRoZSBjb21wdXRlZCBkaXN0YW5jZSwgYW5k
IGNvbXB1dGUgdGhlIHJhdGlvLgorICAgICAgICAgICAgZmxvYXQgaW5mbGF0aW9uUmF0aW8gPSAo
c2NyZWVuU3BhY2VEaXN0YW5jZSArIGFudGlhbGlhc0luZmxhdGlvbkRpc3RhbmNlKSAvIHNjcmVl
blNwYWNlRGlzdGFuY2U7CisKKyAgICAgICAgICAgIC8vIHZfYW50aWFsaWFzIG5lZWRzIHRvIGJl
IDAgZm9yIHRoZSBvdXRlciBlZGdlIGFuZCAxLiBmb3IgdGhlIGlubmVyIGVkZ2UuCisgICAgICAg
ICAgICAvLyBTaW5jZSB0aGUgY29udHJvbFBvaW50IGlzIGVxdWFsIHRvIHRoZSBwb3NpdGlvbiBp
biB0aGUgZWRnZSB2ZXJ0aWNlcywgdGhlIHZhbHVlIGlzIGFsd2F5cyAwIGZvciB0aG9zZS4KKyAg
ICAgICAgICAgIC8vIEZvciB0aGUgY2VudGVyIHBvaW50LCB0aGUgZGlzdGFuY2UgaXMgYWx3YXlz
IDAuNSwgc28gd2Ugbm9ybWFsaXplIHRvIDEuIGJ5IG11bHRpcGx5aW5nIGJ5IDIuCisgICAgICAg
ICAgICAvLyBCeSBtdWx0cGx5aW5nIGJ5IGluZmxhdGlvblJhdGlvIGFuZCBkaXZpZGluZyBieSAo
aW5mbGF0aW9uUmF0aW8gLSAxKSwKKyAgICAgICAgICAgIC8vIFdlIG1ha2Ugc3VyZSB0aGF0IHRo
ZSB2YXJ5aW5nIGludGVycG9sYXRlcyBiZXR3ZWVuIDAgKG91dGVyIGVkZ2UpLCAxIChpbm5lciBl
ZGdlKSBhbmQgbiA+IDEgKGNlbnRlcikuCisgICAgICAgICAgICB2X2FudGlhbGlhcyA9IGRpc3Rh
bmNlKGNvbnRyb2xQb2ludCwgcG9zaXRpb24pICogMi4gKiBpbmZsYXRpb25SYXRpbyAvIChpbmZs
YXRpb25SYXRpbyAtIDEuKTsKKworICAgICAgICAgICAgLy8gTm93IGluZmxhdGUgdGhlIGFjdHVh
bCBwb3NpdGlvbi4KKyAgICAgICAgICAgIHBvc2l0aW9uID0gY2VudGVyICsgKHBvc2l0aW9uIC0g
Y2VudGVyKSAqIGluZmxhdGlvblJhdGlvOworICAgICAgICB9CiAKICAgICAgICAgdm9pZCBtYWlu
KHZvaWQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZlYzQgcG9zaXRpb24gPSBhX3ZlcnRleDsK
KyAgICAgICAgICAgIHZlYzIgcG9zaXRpb24gPSBhX3ZlcnRleC54eTsKKyAgICAgICAgICAgIGFw
cGx5QW50aWFsaWFzSWZOZWVkZWQocG9zaXRpb24pOwogICAgICAgICAgICAgdl90ZXhDb29yZCA9
IHZlYzIocG9zaXRpb24ueCwgbWl4KHBvc2l0aW9uLnksIDEuIC0gcG9zaXRpb24ueSwgdV9mbGlw
KSkgKiB1X3RleHR1cmVTaXplOwotICAgICAgICAgICAgdl9tYXNrVGV4Q29vcmQgPSB2ZWMyKHBv
c2l0aW9uKTsKLSAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiBhX3ZlcnRleDsK
KyAgICAgICAgICAgIHZfbWFza1RleENvb3JkID0gcG9zaXRpb247CisgICAgICAgICAgICBnbF9Q
b3NpdGlvbiA9IHVfcHJvamVjdGlvbk1hdHJpeCAqIHVfbW9kZWxWaWV3TWF0cml4ICogdmVjNChw
b3NpdGlvbiwgMC4sIDEuKTsKICAgICAgICAgfQogICAgICk7CiAKLSNkZWZpbmUgR0xTTF9ESVJF
Q1RJVkUoLi4uKSAiIyIjX19WQV9BUkdTX18iXG4iCi0jZGVmaW5lIERFRklORV9BUFBMSUVSKE5h
bWUpIFwKLSAgICAiI2lmZGVmIEVOQUJMRV8iI05hbWUiXG4iIFwKLSAgICAiI2RlZmluZSBhcHBs
eSIjTmFtZSJJZk5lZWRlZCBhcHBseSIjTmFtZSJcbiJcCi0gICAgIiNlbHNlXG4iXAotICAgICIj
ZGVmaW5lIGFwcGx5IiNOYW1lIklmTmVlZGVkIG5vb3BcbiJcCi0gICAgIiNlbmRpZlxuIgotCiAj
ZGVmaW5lIFJFQ1RfVEVYVFVSRV9ESVJFQ1RJVkUgXAogICAgIEdMU0xfRElSRUNUSVZFKGlmZGVm
IEVOQUJMRV9SZWN0KSBcCiAgICAgICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBTYW1wbGVyVHlw
ZSBzYW1wbGVyMkRSZWN0KSBcCkBAIC0xNDEsMjkgKzE4NywxNCBAQCBzdGF0aWMgY29uc3QgY2hh
ciogdmVydGV4U2hhZGVyU291cmNlID0KICAgICAgICAgR0xTTF9ESVJFQ1RJVkUoZGVmaW5lIFNh
bXBsZXJGdW5jdGlvbiB0ZXh0dXJlMkQpIFwKICAgICBHTFNMX0RJUkVDVElWRShlbmRpZikKIAot
I2RlZmluZSBFTkFCTEVfQVBQTElFUihOYW1lKSAiI2RlZmluZSBFTkFCTEVfIiNOYW1lIlxuIgor
I2RlZmluZSBFTkFCTEVfQVBQTElFUihOYW1lKSAiI2RlZmluZSBFTkFCTEVfIiNOYW1lIlxuI2Rl
ZmluZSBhcHBseSIjTmFtZSJJZk5lZWRlZCBhcHBseSIjTmFtZSJcbiIKKyNkZWZpbmUgRElTQUJM
RV9BUFBMSUVSKE5hbWUpICIjZGVmaW5lIGFwcGx5IiNOYW1lIklmTmVlZGVkIG5vb3BcbiIKICNk
ZWZpbmUgQkxVUl9DT05TVEFOVFMgXAogICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBHQVVTU0lB
Tl9LRVJORUxfSEFMRl9XSURUSCAxMSkgXAogICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBHQVVT
U0lBTl9LRVJORUxfU1RFUCAwLjIpCiAKIAogc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50VGVt
cGxhdGUgPQotICAgIERFRklORV9BUFBMSUVSKFRleHR1cmUpCi0gICAgREVGSU5FX0FQUExJRVIo
U29saWRDb2xvcikKLSAgICBERUZJTkVfQVBQTElFUihPcGFjaXR5KQotICAgIERFRklORV9BUFBM
SUVSKE1hc2spCi0gICAgREVGSU5FX0FQUExJRVIoQW50aWFsaWFzKQotICAgIERFRklORV9BUFBM
SUVSKEdyYXlzY2FsZUZpbHRlcikKLSAgICBERUZJTkVfQVBQTElFUihTZXBpYUZpbHRlcikKLSAg
ICBERUZJTkVfQVBQTElFUihTYXR1cmF0ZUZpbHRlcikKLSAgICBERUZJTkVfQVBQTElFUihIdWVS
b3RhdGVGaWx0ZXIpCi0gICAgREVGSU5FX0FQUExJRVIoSW52ZXJ0RmlsdGVyKQotICAgIERFRklO
RV9BUFBMSUVSKEJyaWdodG5lc3NGaWx0ZXIpCi0gICAgREVGSU5FX0FQUExJRVIoQ29udHJhc3RG
aWx0ZXIpCi0gICAgREVGSU5FX0FQUExJRVIoT3BhY2l0eUZpbHRlcikKLSAgICBERUZJTkVfQVBQ
TElFUihCbHVyRmlsdGVyKQotICAgIERFRklORV9BUFBMSUVSKEFscGhhQmx1cikKLSAgICBERUZJ
TkVfQVBQTElFUihDb250ZW50VGV4dHVyZSkKICAgICBSRUNUX1RFWFRVUkVfRElSRUNUSVZFCiAg
ICAgQkxVUl9DT05TVEFOVFMKICAgICBTVFJJTkdJRlkoCkBAIC0xNzIsOSArMjAzLDkgQEAgc3Rh
dGljIGNvbnN0IGNoYXIqIGZyYWdtZW50VGVtcGxhdGUgPQogICAgICAgICB1bmlmb3JtIHNhbXBs
ZXIyRCBzX21hc2s7CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfY29udGVudFRleHR1cmU7
CiAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5OworICAgICAgICB2YXJ5aW5nIGZsb2F0
IHZfYW50aWFsaWFzOwogICAgICAgICB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsKICAgICAgICAg
dmFyeWluZyB2ZWMyIHZfbWFza1RleENvb3JkOwotICAgICAgICB1bmlmb3JtIHZlYzMgdV9leHBh
bmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbOF07CiAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9m
aWx0ZXJBbW91bnQ7CiAgICAgICAgIHVuaWZvcm0gdmVjMiB1X2JsdXJSYWRpdXM7CiAgICAgICAg
IHVuaWZvcm0gdmVjMiB1X3NoYWRvd09mZnNldDsKQEAgLTE4Myw0NyArMjE0LDcgQEAgc3RhdGlj
IGNvbnN0IGNoYXIqIGZyYWdtZW50VGVtcGxhdGUgPQogCiAgICAgICAgIHZvaWQgbm9vcCh2ZWM0
KSB7IH0KIAotICAgICAgICAvLyBUaGUgZGF0YSBwYXNzZWQgaW4gdV9leHBhbmRlZFF1YWRFZGdl
c0luU2NyZWVuU3BhY2UgaXMgbWVyZWx5IHRoZQotICAgICAgICAvLyBwcmUtc2NhbGVkIGNvZWZm
ZWNpZW50cyBvZiB0aGUgbGluZSBlcXVhdGlvbnMgZGVzY3JpYmluZyB0aGUgZm91ciBlZGdlcwot
ICAgICAgICAvLyBvZiB0aGUgZXhwYW5kZWQgcXVhZCBpbiBzY3JlZW4gc3BhY2UgYW5kIHRoZSBy
ZWN0YW5ndWxhciBib3VuZGluZyBib3gKLSAgICAgICAgLy8gb2YgdGhlIGV4cGFuZGVkIHF1YWQu
Ci0gICAgICAgIC8vCi0gICAgICAgIGZsb2F0IG5vcm1hbGl6ZWREaXN0YW5jZSh2ZWMzIGVkZ2VD
b2VmZmljaWVudCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gV2UgYXJlIGRvaW5nIGEgc2lt
cGxlIGRpc3RhbmNlIGNhbGN1bGF0aW9uIGhlcmUgYWNjb3JkaW5nIHRvIHRoZSBmb3JtdWxhOgot
ICAgICAgICAgICAgLy8gKEEqcC54ICsgQipwLnkgKyBDKSAvIHNxcnQoQV4yICsgQl4yKSA9IGRp
c3RhbmNlIGZyb20gbGluZSB0byBwCi0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgQSwgQiBhbmQg
QyBoYXZlIGFscmVhZHkgYmVlbiBzY2FsZWQgYnkgMSAvIHNxcnQoQV4yICsgQl4yKS4KLSAgICAg
ICAgICAgIHJldHVybiBjbGFtcChkb3QoZWRnZUNvZWZmaWNpZW50LCB2ZWMzKGdsX0ZyYWdDb29y
ZC54eSwgMS4pKSwgMC4sIDEuKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0IGFudGlhbGlh
c1F1YWQodmVjMyBjb2VmZmljaWVudDEsIHZlYzMgY29lZmZpY2llbnQyLCB2ZWMzIGNvZWZmaWNp
ZW50MywgdmVjMyBjb2VmZmljaWVudDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE5vdyB3
ZSB3YW50IHRvIHJlZHVjZSB0aGUgYWxwaGEgdmFsdWUgb2YgdGhlIGZyYWdtZW50IGlmIGl0IGlz
IGNsb3NlIHRvIHRoZQotICAgICAgICAgICAgLy8gZWRnZXMgb2YgdGhlIGV4cGFuZGVkIHF1YWQg
KG9yIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGJveCAtLSB3aGljaCBzZWVtcyB0byBiZQotICAgICAg
ICAgICAgLy8gaW1wb3J0YW50IGZvciBiYWNrZmFjaW5nIHF1YWRzKS4gTm90ZSB0aGF0IHdlIGFy
ZSBjb21iaW5pbmcgdGhlIGNvbnRyaWJ1dGlvbgotICAgICAgICAgICAgLy8gZnJvbSB0aGUgKHRv
cCB8fCBib3R0b20pIGFuZCAobGVmdCB8fCByaWdodCkgZWRnZSBieSBzaW1wbHkgbXVsdGlwbHlp
bmcuIFRoaXMgZm9sbG93cwotICAgICAgICAgICAgLy8gdGhlIGFwcHJvYWNoIGRlc2NyaWJlZCBh
dDogaHR0cDovL2h0dHAuZGV2ZWxvcGVyLm52aWRpYS5jb20vR1BVR2VtczIvZ3B1Z2VtczJfY2hh
cHRlcjIyLmh0bWwsCi0gICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2l0aG91dCB1c2luZyBH
YXVzc2lhbiB3ZWlnaHRzLgotICAgICAgICAgICAgcmV0dXJuIG1pbihub3JtYWxpemVkRGlzdGFu
Y2UoY29lZmZpY2llbnQxKSwgbm9ybWFsaXplZERpc3RhbmNlKGNvZWZmaWNpZW50MikpCi0gICAg
ICAgICAgICAgICAgKiBtaW4obm9ybWFsaXplZERpc3RhbmNlKGNvZWZmaWNpZW50MyksIG5vcm1h
bGl6ZWREaXN0YW5jZShjb2VmZmljaWVudDQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0
IGFudGlhbGlhcygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZsb2F0IGFudGlhbGlhc1ZhbHVl
Rm9yUXVhZCA9IAotICAgICAgICAgICAgICAgIGFudGlhbGlhc1F1YWQodV9leHBhbmRlZFF1YWRF
ZGdlc0luU2NyZWVuU3BhY2VbMF0sCi0gICAgICAgICAgICAgICAgICAgIHVfZXhwYW5kZWRRdWFk
RWRnZXNJblNjcmVlblNwYWNlWzFdLAotICAgICAgICAgICAgICAgICAgICB1X2V4cGFuZGVkUXVh
ZEVkZ2VzSW5TY3JlZW5TcGFjZVsyXSwKLSAgICAgICAgICAgICAgICAgICAgdV9leHBhbmRlZFF1
YWRFZGdlc0luU2NyZWVuU3BhY2VbM10pOwotCi0gICAgICAgICAgICBmbG9hdCBhbnRpYWxpYXNW
YWx1ZUZvckJvdW5kaW5nUmVjdCA9IAotICAgICAgICAgICAgICAgIGFudGlhbGlhc1F1YWQodV9l
eHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNF0sCi0gICAgICAgICAgICAgICAgICAgIHVf
ZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzVdLAotICAgICAgICAgICAgICAgICAgICB1
X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs2XSwKLSAgICAgICAgICAgICAgICAgICAg
dV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbN10pOwotCi0gICAgICAgICAgICByZXR1
cm4gbWluKGFudGlhbGlhc1ZhbHVlRm9yUXVhZCwgYW50aWFsaWFzVmFsdWVGb3JCb3VuZGluZ1Jl
Y3QpOyAgICAgICAgICAgCi0gICAgICAgIH0KKyAgICAgICAgZmxvYXQgYW50aWFsaWFzKCkgeyBy
ZXR1cm4gc21vb3Roc3RlcCh2X2FudGlhbGlhcywgMC4sIDEuKTsgfQogCiAgICAgICAgIHZvaWQg
YXBwbHlUZXh0dXJlKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgPSBTYW1wbGVyRnVuY3Rpb24o
c19zYW1wbGVyLCB2X3RleENvb3JkKTsgfQogICAgICAgICB2b2lkIGFwcGx5T3BhY2l0eShpbm91
dCB2ZWM0IGNvbG9yKSB7IGNvbG9yICo9IHVfb3BhY2l0eTsgfQpAQCAtMzMxLDEwICszMjIsNyBA
QCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZSA9CiAgICAgICAgICAgICBjb2xv
ciA9IHNvdXJjZU92ZXIoY29udGVudENvbG9yLCBjb2xvcik7CiAgICAgICAgIH0KIAotICAgICAg
ICB2b2lkIGFwcGx5U29saWRDb2xvcihpbm91dCB2ZWM0IGNvbG9yKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBjb2xvciAqPSB1X2NvbG9yOwotICAgICAgICB9CisgICAgICAgIHZvaWQgYXBwbHlT
b2xpZENvbG9yKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgKj0gdV9jb2xvcjsgfQogCiAgICAg
ICAgIHZvaWQgbWFpbih2b2lkKQogICAgICAgICB7CkBAIC0zNjIsMzMgKzM1MCwzNyBAQCBzdGF0
aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZSA9CiAKIHN0YXRpYyB2b2lkIGdldFNoYWRl
clNwZWMoVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlvbnMgb3B0aW9ucywgU3RyaW5n
JiB2ZXJ0ZXhTb3VyY2UsIFN0cmluZyYgZnJhZ21lbnRTb3VyY2UpCiB7Ci0gICAgU3RyaW5nQnVp
bGRlciBmcmFnbWVudEJ1aWxkZXI7CisKKyAgICBTdHJpbmdCdWlsZGVyIHNoYWRlckJ1aWxkZXI7
CiAjZGVmaW5lIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhBcHBsaWVyKSBcCi0gICAgaWYgKG9w
dGlvbnMgJiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QXBwbGllcikgXAotICAgICAgICBm
cmFnbWVudEJ1aWxkZXIuYXBwZW5kKEVOQUJMRV9BUFBMSUVSKEFwcGxpZXIpKTsKLQotICAgIFNF
VF9BUFBMSUVSX0ZST01fT1BUSU9OUyhNYXRyaXgpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJ
T05TKFRleHR1cmUpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFJlY3QpCi0gICAgU0VU
X0FQUExJRVJfRlJPTV9PUFRJT05TKFNvbGlkQ29sb3IpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9P
UFRJT05TKE9wYWNpdHkpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKE1hc2spCi0gICAg
U0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEFudGlhbGlhcykKLSAgICBTRVRfQVBQTElFUl9GUk9N
X09QVElPTlMoR3JheXNjYWxlRmlsdGVyKQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhT
ZXBpYUZpbHRlcikKLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoU2F0dXJhdGVGaWx0ZXIp
Ci0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEh1ZVJvdGF0ZUZpbHRlcikKLSAgICBTRVRf
QVBQTElFUl9GUk9NX09QVElPTlMoQnJpZ2h0bmVzc0ZpbHRlcikKLSAgICBTRVRfQVBQTElFUl9G
Uk9NX09QVElPTlMoQ29udHJhc3RGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05T
KEludmVydEZpbHRlcikKLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoT3BhY2l0eUZpbHRl
cikKLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQmx1ckZpbHRlcikKLSAgICBTRVRfQVBQ
TElFUl9GUk9NX09QVElPTlMoQWxwaGFCbHVyKQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9O
UyhDb250ZW50VGV4dHVyZSkKLQotICAgIGZyYWdtZW50QnVpbGRlci5hcHBlbmQoZnJhZ21lbnRU
ZW1wbGF0ZSk7Ci0gICAgdmVydGV4U291cmNlID0gdmVydGV4U2hhZGVyU291cmNlOwotICAgIGZy
YWdtZW50U291cmNlID0gZnJhZ21lbnRCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIHNoYWRl
ckJ1aWxkZXIuYXBwZW5kKFwKKyAgICAgICAgICAgIChvcHRpb25zICYgVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OkFwcGxpZXIpIFwKKyAgICAgICAgICAgICAgICA/IEVOQUJMRV9BUFBMSUVS
KEFwcGxpZXIpIFwKKyAgICAgICAgICAgICAgICA6IERJU0FCTEVfQVBQTElFUihBcHBsaWVyKSkK
KworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhUZXh0dXJlKTsKKyAgICBTRVRfQVBQTElF
Ul9GUk9NX09QVElPTlMoUmVjdCk7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFNvbGlk
Q29sb3IpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhPcGFjaXR5KTsKKyAgICBTRVRf
QVBQTElFUl9GUk9NX09QVElPTlMoTWFzayk7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05T
KEFudGlhbGlhcyk7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEdyYXlzY2FsZUZpbHRl
cik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFNlcGlhRmlsdGVyKTsKKyAgICBTRVRf
QVBQTElFUl9GUk9NX09QVElPTlMoU2F0dXJhdGVGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZS
T01fT1BUSU9OUyhIdWVSb3RhdGVGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9O
UyhCcmlnaHRuZXNzRmlsdGVyKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQ29udHJh
c3RGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhJbnZlcnRGaWx0ZXIpOwor
ICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhPcGFjaXR5RmlsdGVyKTsKKyAgICBTRVRfQVBQ
TElFUl9GUk9NX09QVElPTlMoQmx1ckZpbHRlcik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJ
T05TKEFscGhhQmx1cik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKENvbnRlbnRUZXh0
dXJlKTsKKyAgICBTdHJpbmdCdWlsZGVyIHZlcnRleEJ1aWxkZXI7CisgICAgdmVydGV4QnVpbGRl
ci5hcHBlbmQoc2hhZGVyQnVpbGRlci50b1N0cmluZygpKTsKKyAgICB2ZXJ0ZXhCdWlsZGVyLmFw
cGVuZCh2ZXJ0ZXhUZW1wbGF0ZSk7CisgICAgc2hhZGVyQnVpbGRlci5hcHBlbmQoZnJhZ21lbnRU
ZW1wbGF0ZSk7CisgICAgdmVydGV4U291cmNlID0gdmVydGV4QnVpbGRlci50b1N0cmluZygpOwor
ICAgIGZyYWdtZW50U291cmNlID0gc2hhZGVyQnVpbGRlci50b1N0cmluZygpOwogfQogCiBUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5oCmluZGV4IDYwN2VkNDdhNTMzMDY0MWQzZTkyODJlM2QxM2ZjNmExNWJjNTA4ZjMuLjczMjFm
YzVjOWQ5MTZmNDI5NjkwNjI3YTM1OGU1ODIyYjhmNWVhNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlci5oCkBAIC00Nyw5ICs0Nyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpOwogCiAgICAgVEVYTUFQX0RFQ0xBUkVf
QVRUUklCVVRFKHZlcnRleCkKLSAgICBURVhNQVBfREVDTEFSRV9BVFRSSUJVVEUodGV4Q29vcmQp
CiAKLSAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKG1hdHJpeCkKKyAgICBURVhNQVBfREVDTEFS
RV9VTklGT1JNKG1vZGVsVmlld01hdHJpeCkKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKHBy
b2plY3Rpb25NYXRyaXgpCiAgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShmbGlwKQogICAgIFRF
WE1BUF9ERUNMQVJFX1VOSUZPUk0odGV4dHVyZVNpemUpCiAgICAgVEVYTUFQX0RFQ0xBUkVfVU5J
Rk9STShvcGFjaXR5KQpAQCAtNjYsNiArNjYsOCBAQCBwdWJsaWM6CiAgICAgVEVYTUFQX0RFQ0xB
UkVfU0FNUExFUihjb250ZW50VGV4dHVyZSkKICNlbmRpZgogCisgICAgdm9pZCBzZXRNYXRyaXgo
R0MzRHVpbnQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisKIHByaXZhdGU6CiAgICAg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4s
IGNvbnN0IFN0cmluZyYgdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBTdHJpbmcmIGZyYWdtZW50
U2hhZGVyU291cmNlKTsKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fdmVydGV4U2hhZGVyOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180155</attachid>
            <date>2012-12-19 06:22:30 -0800</date>
            <delta_ts>2012-12-27 14:58:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105377-20121219061948.patch</filename>
            <type>text/plain</type>
            <size>39554</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDIwYWViZjM5OWJlYzIx
MTc4YjRkOTAxMDBlMTllZDBjOWU5YWI0Ny4uOGEwMDA1ODBkZTBhNDg4YTAwMzk0ZjgyMGUzMWUx
NmM0Y2M5YjgwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTEyLTE4ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1RleG1hcF0gRWRnZSBh
bnRpYWxpYXNpbmcgaW4gVGV4dHVyZU1hcHBlciBjb3VsZCBiZSBkb25lIHdpdGggbGVzcyBwZXIt
cGl4ZWwgY2FsbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwNTM3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEluc3RlYWQgb2YgcGFzc2luZyA4IHF1YWQgZWRnZSBjb2VmZmljaWVudHMgYXMgdW5pZm9y
bXMgYW5kIGFuYWx5emUgdGhlIGRpc3RhbmNlIGluIHRoZQorICAgICAgICBmcmFnbWVudCBzaGFk
ZXIsIHdlIHJlbmRlciB0aGUgYW50aWFsaWFzZWQgcXVhZCBhcyA0IGVkZ2UgdHJpYW5nbGVzLCB3
aGljaCBvcmlnaW5hdGUgaW4gdGhlCisgICAgICAgIGNlbnRlciBvZiB0aGUgcXVhZC4gCisKKyAg
ICAgICAgVGhlIHZlcnRleCBzaGFkZXIgZXhwYW5kcyB0aGUgcXVhZCBiYXNlZCBvbiB0aGUgc2Ny
ZWVuIHRyYW5zZm9ybSwgYW5kIGFwcGxpZXMgYSB2YWx1ZSB0byBlYWNoIHZlcnRleCB0byBiZSBp
bnRlcnBvbGF0ZWQgYnkgdGhlIEdQVS4gCisKKyAgICAgICAgSXQgaXMgdmVyeSBkaWZmaWN1bHQg
dG8gdGVzdCBwZXJmb3JtYW5jZSBnYWluOyBIb3dldmVyLCB0aGUgZm9sbG93aW5nIGlzIGFwcGFy
ZW50OgorICAgICAgICAtIFRoZSBtYXRyaXggbXVsdGlwbGljYXRpb25zIGFuZCBpbnZlcnNpb25z
IGRvbmUgYmVmb3JlIGluIHRoZSBxdWFkIGluZmxhdGlvbiBjb2RlIHdlcmUKKyAgICAgICAgICBh
bHdheXMgdmlzaWJsZSBpbiBpbnN0cnVtZW50cy92YWxncmluZCBhbmQgdGhleSBhcmUgbm93IGdv
bmUuCisgICAgICAgIC0gV2Ugbm93IHBlcmZvcm0gYSBzaW5nbGUgc21vb3Roc3RlcCgpIGNvbW1h
bmQgcGVyIHBpeGVsIGluc3RlYWQgb2YgOCBjbGFtcChkb3QoKSkgY29tbWFuZHMuCisgICAgICAg
IC0gSXQgc2hvdWxkIG5vdyBiZSBwb3NzaWJsZSB0byBhbnRpYWxpYXMgaW5kaXZpZHVhbCBlZGdl
cy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpnZXRTdGF0aWNWQk8pOgorICAgICAgICAgICAgQ2Fj
aGUgdGhlIHVuaXQtcmVjdCBhbmQgZWRnZS10cmlhbmdsZSB2ZXJ0ZXggZGF0YSBpbiBhIFZCTy4K
KworICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6flRleHR1cmVNYXBwZXJH
TERhdGEpOgorICAgICAgICAgICAgQ2xlYXIgdGhlIGNhY2hlZCBWQk9zIHVwb24gZGVzdHJ1Y3Rp
b24uCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlkQ29sb3IpOgorICAg
ICAgICAgICAgVXNlIHRoZSBuZXcgc2lnbmF0dXJlICJkcmF3IiBpbnN0ZWFkIG9mICJkcmF3UXVh
ZCIuCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0VkZ2VUcmlhbmds
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VW5pdFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3KToKKyAgICAgICAgICAgIFJl
bW92ZWQgRHJhd1F1YWQsIGluc3RlYWQgZHJhdyBlaXRoZXIgYSB1bml0IHJlY3Qgb3IgZWRnZSB0
cmlhbmdsZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlw
KToKKyAgICAgICAgICAgIFVzZSB0aGUgbmV3IHNldE1hdHJpeCBmdW5jdGlvbi4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaDoKKyAgICAgICAg
ICAgIEFkZGVkIGEgcGFpbnQgZmxhZyBmb3IgYW50aWFsaWFzaW5nLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpzZXRNYXRyaXgpOgor
ICAgICAgICAgICAgU2luY2Ugd2Ugbm93IHNldCB0aGUgbWF0cml4IGluIG11bHRpcGxlIGxvY2F0
aW9ucywgYWRkZWQgYSBjb252ZW5pZW5jZSAKKyAgICAgICAgICAgIGZ1bmN0aW9uIGZvciBtYXRy
aXggdW5pZm9ybS4KKworICAgICAgICAoV2ViQ29yZTo6Z2V0U2hhZGVyU3BlYyk6CisgICAgICAg
ICAgICBVcGRhdGUgdGhlIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVyIHRvIGFjY291bnQgZm9y
IHRoZSBuZXcgYW50aWFsaWFzaW5nCisgICAgICAgICAgICBtZWNoYW5pc20uCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmg6Cisg
ICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisKIDIwMTItMTItMTIgIE5vJ2Ft
IFJvc2VudGhhbCAgPG5vYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbVGV4bWFwXSBJbnN0ZWFk
IG9mIGhhdmluZyBtdWx0aXBsZSBzaGFkZXJzIHNvdXJjZXMgd2l0aCBsb3RzIG9mIGR1cGxpY2F0
aW9uLCB3ZSBzaG91bGQgaGF2ZSBvbmUgc2hhZGVyIHNvdXJjZSB3aXRoIE1BQ1JPIHZhcmlhbnRz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDkxYjRhZTI5YWVlOTcwOTczOGNmYzlkMjVhNDBj
YzBlMGNiMDJmODAuLmRhMGU2ODQ4YzZmNjU1OWMyOGRlYjc1ZTEwZDkyYjE4OTA0ZjgyYmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0xMjUsNiArMTI1LDkgQEAgcHVibGljOgogICAgICAg
ICAsIG1fc2hhcmVkR0xEYXRhKFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6Y3Vy
cmVudFNoYXJlZEdMRGF0YSh0aGlzLT5jb250ZXh0KSkKICAgICB7IH0KIAorICAgIH5UZXh0dXJl
TWFwcGVyR0xEYXRhKCk7CisgICAgUGxhdGZvcm0zRE9iamVjdCBnZXRTdGF0aWNWQk8oR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIsIGNvbnN0IHZvaWQqIGRhdGEpOworCiAgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQ7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcHJvamVjdGlv
bk1hdHJpeDsKICAgICBUZXh0dXJlTWFwcGVyOjpQYWludEZsYWdzIFBhaW50RmxhZ3M7CkBAIC0x
MzcsOCArMTQwLDI5IEBAIHB1YmxpYzoKICAgICBHQzNEaW50IHByZXZpb3VzU2Npc3Nvcls0XTsK
ICAgICBSZWZQdHI8U2hhcmVkR0xEYXRhPiBtX3NoYXJlZEdMRGF0YTsKICAgICBSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gY3VycmVudFN1cmZhY2U7CisgICAgSGFzaE1hcDxjb25zdCB2b2lkKiwgUGxh
dGZvcm0zRE9iamVjdD4gdmJvczsKIH07CiAKK1BsYXRmb3JtM0RPYmplY3QgVGV4dHVyZU1hcHBl
ckdMRGF0YTo6Z2V0U3RhdGljVkJPKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUs
IGNvbnN0IHZvaWQqIGRhdGEpCit7CisgICAgSGFzaE1hcDxjb25zdCB2b2lkKiwgUGxhdGZvcm0z
RE9iamVjdD46Oml0ZXJhdG9yIGl0ID0gdmJvcy5maW5kKGRhdGEpOworICAgIGlmIChpdCAhPSB2
Ym9zLmVuZCgpKQorICAgICAgICByZXR1cm4gaXQtPnZhbHVlOworCisgICAgUGxhdGZvcm0zRE9i
amVjdCB2Ym8gPSBjb250ZXh0LT5jcmVhdGVCdWZmZXIoKTsKKyAgICBjb250ZXh0LT5iaW5kQnVm
ZmVyKHRhcmdldCwgdmJvKTsKKyAgICBjb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwg
ZGF0YSwgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKKyAgICB2Ym9zLmFkZChkYXRh
LCB2Ym8pOworICAgIHJldHVybiB2Ym87Cit9CisKK1RleHR1cmVNYXBwZXJHTERhdGE6On5UZXh0
dXJlTWFwcGVyR0xEYXRhKCkKK3sKKyAgICBIYXNoTWFwPGNvbnN0IHZvaWQqLCBQbGF0Zm9ybTNE
T2JqZWN0Pjo6aXRlcmF0b3IgZW5kID0gdmJvcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hNYXA8Y29u
c3Qgdm9pZCosIFBsYXRmb3JtM0RPYmplY3Q+OjppdGVyYXRvciBpdCA9IHZib3MuYmVnaW4oKTsg
aXQgIT0gdmJvcy5lbmQoKTsgKytpdCkKKyAgICAgICAgY29udGV4dC0+ZGVsZXRlQnVmZmVyKGl0
LT52YWx1ZSk7Cit9CisKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2s6OmluaXQoY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBjbGlwU3RhY2suY2xlYXIoKTsKQEAgLTI2OSw0MiAr
MjkzLDYgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmVuZFBhaW50aW5nKCkKICNlbmRpZgogfQog
Ci12b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmIHF1YWRUb0Ry
YXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtKiBzaGFkZXJQcm9ncmFtLCBHQzNEZW51bSBkcmF3aW5nTW9kZSwg
RmxhZ3MgZmxhZ3MpCi17Ci0gICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KHNoYWRlclByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwotICAgIG1fY29udGV4dDNELT5iaW5k
QnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDApOwotCi0gICAgY29uc3Qg
R0MzRGZsb2F0IHF1YWRbXSA9IHsKLSAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVk
VG9Vbml0U3F1YXJlLnAxKCkueCgpLCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRT
cXVhcmUucDEoKS55KCksCi0gICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5p
dFNxdWFyZS5wMigpLngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJl
LnAyKCkueSgpLAotICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVh
cmUucDMoKS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMygp
LnkoKSwKLSAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnA0
KCkueCgpLCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDQoKS55KCkK
LSAgICB9OwotICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlclByb2dy
YW0tPnZlcnRleExvY2F0aW9uKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2Us
IDAsIEdDM0RpbnRwdHIocXVhZCkpOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4
ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpLm11bHRpcGx5
KG1vZGVsVmlld01hdHJpeCkubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgoCi0gICAgICAg
ICAgICBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFyZ2V0UmVjdC53aWR0aCgpLCAwLCAwLCAwLAotICAg
ICAgICAgICAgMCwgcXVhZFRvRHJhdy5vcmlnaW5hbFRhcmdldFJlY3QuaGVpZ2h0KCksIDAsIDAs
Ci0gICAgICAgICAgICAwLCAwLCAxLCAwLAotICAgICAgICAgICAgcXVhZFRvRHJhdy5vcmlnaW5h
bFRhcmdldFJlY3QueCgpLCBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFyZ2V0UmVjdC55KCksIDAsIDEp
KTsKLSAgICBHQzNEZmxvYXQgbTRbXSA9IHsKLSAgICAgICAgbWF0cml4Lm0xMSgpLCBtYXRyaXgu
bTEyKCksIG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAotICAgICAgICBtYXRyaXgubTIxKCks
IG1hdHJpeC5tMjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCi0gICAgICAgIG1hdHJp
eC5tMzEoKSwgbWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQoKSwKLSAgICAg
ICAgbWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0cml4Lm00NCgp
Ci0gICAgfTsKLSAgICBtX2NvbnRleHQzRC0+dW5pZm9ybU1hdHJpeDRmdihzaGFkZXJQcm9ncmFt
LT5tYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgbTQpOwotCi0gICAgaWYgKGZsYWdzICYgU2hv
dWxkQmxlbmQpIHsKLSAgICAgICAgbV9jb250ZXh0M0QtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRl
eHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7Ci0gICAg
ICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJM
RU5EKTsKLQotICAgIG1fY29udGV4dDNELT5kcmF3QXJyYXlzKGRyYXdpbmdNb2RlLCAwLCA0KTsK
LSAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0t
PnZlcnRleExvY2F0aW9uKCkpOwotfQotCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRl
cihjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHdpZHRoLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgpCiB7CiAg
ICAgaWYgKGNsaXBTdGFjaygpLmN1cnJlbnQoKS5zY2lzc29yQm94LmlzRW1wdHkoKSkKQEAgLTMx
OCw3ICszMDYsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcihjb25zdCBDb2xv
ciYgY29sb3IsIGZsb2F0IHdpZHRoLCBjb25zdCBGbG9hdFJlYwogICAgIG1fY29udGV4dDNELT51
bmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICBtX2Nv
bnRleHQzRC0+bGluZVdpZHRoKHdpZHRoKTsKIAotICAgIGRyYXdRdWFkKHRhcmdldFJlY3QsIG1v
ZGVsVmlld01hdHJpeCwgcHJvZ3JhbS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9P
UCwgY29sb3IuaGFzQWxwaGEoKSA/IFNob3VsZEJsZW5kIDogMCk7CisgICAgZHJhdyh0YXJnZXRS
ZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0uZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpM
SU5FX0xPT1AsIGNvbG9yLmhhc0FscGhhKCkgPyBTaG91bGRCbGVuZCA6IDApOwogfQogCiB2b2lk
IFRleHR1cmVNYXBwZXJHTDo6ZHJhd1JlcGFpbnRDb3VudGVyKGludCB2YWx1ZSwgaW50IHBvaW50
U2l6ZSwgY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtb2RlbFZpZXdNYXRyaXgpCkBAIC00MDYsMTAgKzM5NCw5IEBAIHZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpkcmF3VGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEZsYWdzIGZs
YWdzLCBjb25zdCBJCiB7CiAgICAgYm9vbCB1c2VSZWN0ID0gZmxhZ3MgJiBTaG91bGRVc2VBUkJU
ZXh0dXJlUmVjdDsKICAgICBib29sIG1hc2tlZCA9ICEhbWFza1RleHR1cmU7Ci0gICAgYm9vbCBu
ZWVkc0FudGlhbGlhc2luZyA9IG1fZW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nICYmICFt
b2RlbFZpZXdNYXRyaXguaXNJbnRlZ2VyVHJhbnNsYXRpb24oKTsKLQotICAgIGlmICghdXNlUmVj
dCAmJiBuZWVkc0FudGlhbGlhc2luZyAmJiBkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodGV4
dHVyZSwgZmxhZ3MsIHRleHR1cmVTaXplLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9w
YWNpdHksIG1hc2tUZXh0dXJlLCBleHBvc2VkRWRnZXMpKQotICAgICAgICByZXR1cm47CisgICAg
Ym9vbCB1c2VBbnRpYWxpYXNpbmcgPSBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZwor
ICAgICAgICAmJiBleHBvc2VkRWRnZXMgPT0gQWxsRWRnZXMKKyAgICAgICAgJiYgIW1vZGVsVmll
d01hdHJpeC5tYXBRdWFkKHRhcmdldFJlY3QpLmlzUmVjdGlsaW5lYXIoKTsKIAogICAgIFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcHRpb25zIG9wdGlvbnMgPSBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6VGV4dHVyZTsKICAgICBpZiAobWFza2VkKQpAQCAtNDE4LDE2MyArNDA1LDk2
IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRl
eHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJCiAgICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OlJlY3Q7CiAgICAgaWYgKG9wYWNpdHkgPCAxKQogICAgICAgICBv
cHRpb25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5OworICAgIGlmICh1
c2VBbnRpYWxpYXNpbmcpIHsKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6QW50aWFsaWFzOworICAgICAgICBmbGFncyB8PSBTaG91bGRBbnRpYWxpYXM7Cisg
ICAgfQorCisgICAgaWYgKG1hc2tlZCB8fCB1c2VBbnRpYWxpYXNpbmcgfHwgb3BhY2l0eSA8IDEp
CisgICAgICAgIGZsYWdzIHw9IFNob3VsZEJsZW5kOwogCiAgICAgUmVmUHRyPFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtOwogICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xE
YXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25z
KTsKLSAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7Ci0K
ICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgdGV4dHVyZSwg
ZmxhZ3MsIHRleHR1cmVTaXplLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHks
IG1hc2tUZXh0dXJlKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9y
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJp
eCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpT
b2xpZENvbG9yKTsKKyAgICBGbGFncyBmbGFncyA9IDA7CisgICAgVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6Ok9wdGlvbnMgb3B0aW9ucyA9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpT
b2xpZENvbG9yOworICAgIGlmICghbWF0cml4Lm1hcFF1YWQocmVjdCkuaXNSZWN0aWxpbmVhcigp
KSB7CisgICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkFudGlh
bGlhczsKKyAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQgfCBTaG91bGRBbnRpYWxpYXM7Cisg
ICAgfQorCisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0g
ZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRl
clByb2dyYW0ob3B0aW9ucyk7CiAgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+
cHJvZ3JhbUlEKCkpOwogCiAgICAgZmxvYXQgciwgZywgYiwgYTsKICAgICBjb2xvci5nZXRSR0JB
KHIsIGcsIGIsIGEpOwogICAgIG1fY29udGV4dDNELT51bmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JM
b2NhdGlvbigpLCByLCBnLCBiLCBhKTsKKyAgICBpZiAoYSA8IDEpCisgICAgICAgIGZsYWdzIHw9
IFNob3VsZEJsZW5kOwogCi0gICAgZHJhd1F1YWQocmVjdCwgbWF0cml4LCBwcm9ncmFtLmdldCgp
LCBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCBhIDwgMSA/IFNob3VsZEJsZW5kIDog
MCk7Ci19Ci0KLXN0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2aWV3cG9ydE1hdHJpeChHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dDNEKQotewotICAgIEdDM0RpbnQgdmlld3BvcnRbNF07Ci0g
ICAgY29udGV4dDNELT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQsIHZp
ZXdwb3J0KTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKLSAgICBtYXRyaXgu
dHJhbnNsYXRlM2Qodmlld3BvcnRbMF0sIHZpZXdwb3J0WzFdLCAwKTsKLSAgICBtYXRyaXguc2Nh
bGUzZCh2aWV3cG9ydFsyXSwgdmlld3BvcnRbM10sIDApOwotCi0gICAgLy8gTWFwIHgsIHkgYW5k
IHogdG8gdW5pdCBzcXVhcmUgZnJvbSBPcGVuR0wgbm9ybWFsaXplZCBkZXZpY2UKLSAgICAvLyBj
b29yZGluYXRlcyB3aGljaCBhcmUgLTEgdG8gMSBvbiBldmVyeSBheGlzLgotICAgIG1hdHJpeC50
cmFuc2xhdGUzZCgwLjUsIDAuNSwgMC41KTsKLSAgICBtYXRyaXguc2NhbGUzZCgwLjUsIDAuNSwg
MC41KTsKLQotICAgIHJldHVybiBtYXRyaXg7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjYWxlTGluZUVx
dWF0aW9uQ29lZmZlY2llbnRzVG9PcHRpbWl6ZURpc3RhbmNlQ2FsY3VsYXRpb24oZmxvYXQqIGNv
ZWZmZWNpZW50cykKLXsKLSAgICAvLyBJbiB0aGUgZnJhZ21lbnQgc2hhZGVyIHdlIHdhbnQgdG8g
Y2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBmcm9tIHRoaXMKLSAgICAvLyBsaW5lIHRvIGEgcG9pbnQg
KHApLCB3aGljaCBpcyBnaXZlbiBieSB0aGUgZm9ybXVsYToKLSAgICAvLyAoQSpwLnggKyBCKnAu
eSArIEMpIC8gc3FydCAoYV4yICsgYl4yKQotICAgIC8vIFdlIGNhbiBkbyBhIHNtYWxsIGFtb3Vu
dCBvZiBwcmVjYWxjdWxhdGlvbiBoZXJlIHRvIHJlZHVjZSB0aGUKLSAgICAvLyBhbW91bnQgb2Yg
bWF0aCBpbiB0aGUgc2hhZGVyIGJ5IHNjYWxpbmcgdGhlIGNvZWZmZWNpZW50cyBub3cuCi0gICAg
ZmxvYXQgc2NhbGUgPSAxLjAgLyBGbG9hdFBvaW50KGNvZWZmZWNpZW50c1swXSwgY29lZmZlY2ll
bnRzWzFdKS5sZW5ndGgoKTsKLSAgICBjb2VmZmVjaWVudHNbMF0gPSBjb2VmZmVjaWVudHNbMF0g
KiBzY2FsZTsKLSAgICBjb2VmZmVjaWVudHNbMV0gPSBjb2VmZmVjaWVudHNbMV0gKiBzY2FsZTsK
LSAgICBjb2VmZmVjaWVudHNbMl0gPSBjb2VmZmVjaWVudHNbMl0gKiBzY2FsZTsKLX0KLQotc3Rh
dGljIHZvaWQgZ2V0U3RhbmRhcmRFcXVhdGlvbkNvZWZmZWNpZW50c0ZvckxpbmUoY29uc3QgRmxv
YXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCogY29lZmZlY2llbnRzKQot
ewotICAgIC8vIEdpdmVuIHR3byBwb2ludHMsIHRoZSBzdGFuZGFyZCBlcXVhdGlvbiBvZiBhIGxp
bmUgKEF4ICsgQnkgKyBDID0gMCkKLSAgICAvLyBjYW4gYmUgY2FsY3VsYXRlZCB2aWEgdGhlIGZv
cm11bGE6Ci0gICAgLy8gKHAxLnkg4oCTIHAyLnkpeCArIChwMS54IOKAkyBwMi54KXkgKyAoKHAx
LngqcDIueSkg4oCTIChwMi54KnAxLnkpKSA9IDAKLSAgICBjb2VmZmVjaWVudHNbMF0gPSBwMS55
KCkgLSBwMi55KCk7Ci0gICAgY29lZmZlY2llbnRzWzFdID0gcDIueCgpIC0gcDEueCgpOwotICAg
IGNvZWZmZWNpZW50c1syXSA9IHAxLngoKSAqIHAyLnkoKSAtIHAyLngoKSAqIHAxLnkoKTsKLSAg
ICBzY2FsZUxpbmVFcXVhdGlvbkNvZWZmZWNpZW50c1RvT3B0aW1pemVEaXN0YW5jZUNhbGN1bGF0
aW9uKGNvZWZmZWNpZW50cyk7CisgICAgZHJhdyhyZWN0LCBtYXRyaXgsIHByb2dyYW0uZ2V0KCks
IEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIGZsYWdzKTsKIH0KIAotc3RhdGljIHZv
aWQgcXVhZFRvRWRnZUFycmF5KGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgZmxvYXQqIGVkZ2VBcnJh
eSkKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3RWRnZVRyaWFuZ2xlcyhUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbSogcHJvZ3JhbSkKIHsKLSAgICBpZiAocXVhZC5pc0NvdW50ZXJjbG9ja3dp
c2UoKSkgewotICAgICAgICBnZXRTdGFuZGFyZEVxdWF0aW9uQ29lZmZlY2llbnRzRm9yTGluZShx
dWFkLnA0KCksIHF1YWQucDMoKSwgZWRnZUFycmF5KTsKLSAgICAgICAgZ2V0U3RhbmRhcmRFcXVh
dGlvbkNvZWZmZWNpZW50c0ZvckxpbmUocXVhZC5wMygpLCBxdWFkLnAyKCksIGVkZ2VBcnJheSAr
IDMpOwotICAgICAgICBnZXRTdGFuZGFyZEVxdWF0aW9uQ29lZmZlY2llbnRzRm9yTGluZShxdWFk
LnAyKCksIHF1YWQucDEoKSwgZWRnZUFycmF5ICsgNik7Ci0gICAgICAgIGdldFN0YW5kYXJkRXF1
YXRpb25Db2VmZmVjaWVudHNGb3JMaW5lKHF1YWQucDEoKSwgcXVhZC5wNCgpLCBlZGdlQXJyYXkg
KyA5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBnZXRTdGFuZGFyZEVxdWF0aW9uQ29l
ZmZlY2llbnRzRm9yTGluZShxdWFkLnA0KCksIHF1YWQucDEoKSwgZWRnZUFycmF5KTsKLSAgICBn
ZXRTdGFuZGFyZEVxdWF0aW9uQ29lZmZlY2llbnRzRm9yTGluZShxdWFkLnAxKCksIHF1YWQucDIo
KSwgZWRnZUFycmF5ICsgMyk7Ci0gICAgZ2V0U3RhbmRhcmRFcXVhdGlvbkNvZWZmZWNpZW50c0Zv
ckxpbmUocXVhZC5wMigpLCBxdWFkLnAzKCksIGVkZ2VBcnJheSArIDYpOwotICAgIGdldFN0YW5k
YXJkRXF1YXRpb25Db2VmZmVjaWVudHNGb3JMaW5lKHF1YWQucDMoKSwgcXVhZC5wNCgpLCBlZGdl
QXJyYXkgKyA5KTsKKyAgICBjb25zdCBHQzNEZmxvYXQgTGVmdCA9IDA7CisgICAgY29uc3QgR0Mz
RGZsb2F0IFRvcCA9IDA7CisgICAgY29uc3QgR0MzRGZsb2F0IFJpZ2h0ID0gMTsKKyAgICBjb25z
dCBHQzNEZmxvYXQgQm90dG9tID0gMTsKKyAgICBjb25zdCBHQzNEZmxvYXQgQ2VudGVyID0gMC41
OworI2RlZmluZSBTSURFX1RSSUFOR0xFKHgxLCB5MSwgeDIsIHkyKSB4MSwgeTEsIHgxLCB5MSwg
eDIsIHkyLCB4MiwgeTIsIENlbnRlciwgQ2VudGVyLCAoeDEgKyB4MikgLyAyLCAoeTEgKyB5Mikg
LyAyCisgICAgc3RhdGljIGNvbnN0IEdDM0RmbG9hdCB1bml0UmVjdFNpZGVUcmlhbmdsZXNbXSA9
IHsKKyAgICAgICAgU0lERV9UUklBTkdMRShMZWZ0LCBUb3AsIFJpZ2h0LCBUb3ApLAorICAgICAg
ICBTSURFX1RSSUFOR0xFKExlZnQsIFRvcCwgTGVmdCwgQm90dG9tKSwKKyAgICAgICAgU0lERV9U
UklBTkdMRShSaWdodCwgVG9wLCBSaWdodCwgQm90dG9tKSwKKyAgICAgICAgU0lERV9UUklBTkdM
RShMZWZ0LCBCb3R0b20sIFJpZ2h0LCBCb3R0b20pCisgICAgfTsKKyN1bmRlZiBTSURFX1RSSUFO
R0xFCisgICAgUGxhdGZvcm0zRE9iamVjdCB2Ym8gPSBkYXRhKCkuZ2V0U3RhdGljVkJPKEdyYXBo
aWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHNpemVvZihHQzNEZmxvYXQpICogNDgsIHVuaXRS
ZWN0U2lkZVRyaWFuZ2xlcyk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRCdWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgdmJvKTsKKyAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0
cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCA0LCBHcmFwaGljc0NvbnRleHQz
RDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhHcmFw
aGljc0NvbnRleHQzRDo6VFJJQU5HTEVTLCAwLCAxMik7CiB9CiAKLXN0YXRpYyBGbG9hdFNpemUg
c2NhbGVkVmVjdG9yRGlmZmVyZW5jZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50MiwgZmxvYXQgc2NhbGUpCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJh
d1VuaXRSZWN0KFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCBHQzNEZW51bSBk
cmF3aW5nTW9kZSkKIHsKLSAgICBGbG9hdFNpemUgdmVjdG9yID0gcG9pbnQxIC0gcG9pbnQyOwot
ICAgIGlmICh2ZWN0b3IuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkpCi0gICAgICAgIHZlY3Rvci5z
Y2FsZSgxLjAgLyB2ZWN0b3IuZGlhZ29uYWxMZW5ndGgoKSk7Ci0KLSAgICB2ZWN0b3Iuc2NhbGUo
c2NhbGUpOwotICAgIHJldHVybiB2ZWN0b3I7CisgICAgc3RhdGljIGNvbnN0IEdDM0RmbG9hdCB1
bml0UmVjdFtdID0geyAwLCAwLCAxLCAwLCAxLCAxLCAwLCAxIH07CisgICAgUGxhdGZvcm0zRE9i
amVjdCB2Ym8gPSBkYXRhKCkuZ2V0U3RhdGljVkJPKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9C
VUZGRVIsIHNpemVvZihHQzNEZmxvYXQpICogOCwgdW5pdFJlY3QpOworICAgIG1fY29udGV4dDNE
LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHZibyk7CisgICAg
bV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4TG9jYXRpb24o
KSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgbV9jb250
ZXh0M0QtPmRyYXdBcnJheXMoZHJhd2luZ01vZGUsIDAsIDQpOwogfQogCi1zdGF0aWMgRmxvYXRR
dWFkIGluZmxhdGVRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgZmxvYXQgZGlzdGFuY2UpCit2
b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhdyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtKiBzaGFkZXJQcm9ncmFtLCBHQzNEZW51bSBkcmF3aW5nTW9kZSwgRmxhZ3MgZmxhZ3Mp
CiB7Ci0gICAgRmxvYXRRdWFkIGV4cGFuZGVkUXVhZCA9IHF1YWQ7Ci0gICAgZXhwYW5kZWRRdWFk
LnNldFAxKGV4cGFuZGVkUXVhZC5wMSgpICsgc2NhbGVkVmVjdG9yRGlmZmVyZW5jZShxdWFkLnAx
KCksIHF1YWQucDIoKSwgZGlzdGFuY2UpKTsKLSAgICBleHBhbmRlZFF1YWQuc2V0UDQoZXhwYW5k
ZWRRdWFkLnA0KCkgKyBzY2FsZWRWZWN0b3JEaWZmZXJlbmNlKHF1YWQucDQoKSwgcXVhZC5wMygp
LCBkaXN0YW5jZSkpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9CisgICAgICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4KG1vZGVsVmlld01hdHJpeCkKKyAgICAgICAgICAgIC5tdWx0
aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVjdChGbG9hdFJlY3QoMCwgMCwgMSwg
MSksIHJlY3QpKTsKIAotICAgIGV4cGFuZGVkUXVhZC5zZXRQMShleHBhbmRlZFF1YWQucDEoKSAr
IHNjYWxlZFZlY3RvckRpZmZlcmVuY2UocXVhZC5wMSgpLCBxdWFkLnA0KCksIGRpc3RhbmNlKSk7
Ci0gICAgZXhwYW5kZWRRdWFkLnNldFAyKGV4cGFuZGVkUXVhZC5wMigpICsgc2NhbGVkVmVjdG9y
RGlmZmVyZW5jZShxdWFkLnAyKCksIHF1YWQucDMoKSwgZGlzdGFuY2UpKTsKKyAgICBtX2NvbnRl
eHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRp
b24oKSk7CisgICAgc2hhZGVyUHJvZ3JhbS0+c2V0TWF0cml4KHNoYWRlclByb2dyYW0tPm1vZGVs
Vmlld01hdHJpeExvY2F0aW9uKCksIG1hdHJpeCk7CisgICAgc2hhZGVyUHJvZ3JhbS0+c2V0TWF0
cml4KHNoYWRlclByb2dyYW0tPnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpLCBkYXRhKCkucHJv
amVjdGlvbk1hdHJpeCk7CiAKLSAgICBleHBhbmRlZFF1YWQuc2V0UDIoZXhwYW5kZWRRdWFkLnAy
KCkgKyBzY2FsZWRWZWN0b3JEaWZmZXJlbmNlKHF1YWQucDIoKSwgcXVhZC5wMSgpLCBkaXN0YW5j
ZSkpOwotICAgIGV4cGFuZGVkUXVhZC5zZXRQMyhleHBhbmRlZFF1YWQucDMoKSArIHNjYWxlZFZl
Y3RvckRpZmZlcmVuY2UocXVhZC5wMygpLCBxdWFkLnA0KCksIGRpc3RhbmNlKSk7CisgICAgaWYg
KGZsYWdzICYgU2hvdWxkQmxlbmQpIHsKKyAgICAgICAgbV9jb250ZXh0M0QtPmJsZW5kRnVuYyhH
cmFwaGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19B
TFBIQSk7CisgICAgICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJM
RU5EKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OkJMRU5EKTsKIAotICAgIGV4cGFuZGVkUXVhZC5zZXRQMyhleHBhbmRlZFF1YWQu
cDMoKSArIHNjYWxlZFZlY3RvckRpZmZlcmVuY2UocXVhZC5wMygpLCBxdWFkLnAyKCksIGRpc3Rh
bmNlKSk7Ci0gICAgZXhwYW5kZWRRdWFkLnNldFA0KGV4cGFuZGVkUXVhZC5wNCgpICsgc2NhbGVk
VmVjdG9yRGlmZmVyZW5jZShxdWFkLnA0KCksIHF1YWQucDEoKSwgZGlzdGFuY2UpKTsKKyAgICBp
ZiAoZmxhZ3MgJiBTaG91bGRBbnRpYWxpYXMpCisgICAgICAgIGRyYXdFZGdlVHJpYW5nbGVzKHNo
YWRlclByb2dyYW0pOworICAgIGVsc2UKKyAgICAgICAgZHJhd1VuaXRSZWN0KHNoYWRlclByb2dy
YW0sIGRyYXdpbmdNb2RlKTsKIAotICAgIHJldHVybiBleHBhbmRlZFF1YWQ7CisgICAgbV9jb250
ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2Nh
dGlvbigpKTsKIH0KLQotYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlV2l0aEFudGlh
bGlhc2luZyh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYgc2l6
ZSwgY29uc3QgRmxvYXRSZWN0JiBvcmlnaW5hbFRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRl
eHR1cmUqIG1hc2tUZXh0dXJlLCB1bnNpZ25lZCBleHBvc2VkRWRnZXMpCit2b2lkIFRleHR1cmVN
YXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtKiBwcm9ncmFtLCB1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50
U2l6ZSYgc2l6ZSwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJl
KiBtYXNrVGV4dHVyZSkKIHsKLSAgICAvLyBUaGUgYW50aWFsaWFzaW5nIHBhdGggZG9lcyBub3Qg
c3VwcG9ydCBtYXNrIHRleHR1cmVzIGF0IHRoZSBtb21lbnQuCi0gICAgaWYgKG1hc2tUZXh0dXJl
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGb3Igbm93IHdlIHB1bnQgb24gcmVu
ZGVyaW5nIHRpbGVkIGxheWVycyB3aXRoIGFudGlhbGlhc2luZy4gSXQncyBxdWl0ZSBoYXJkCi0g
ICAgLy8gdG8gcmVuZGVyIHRoZW0gd2l0aG91dCBzZWFtcy4KLSAgICBpZiAoZXhwb3NlZEVkZ2Vz
ICE9IEFsbEVkZ2VzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBUaGUgZ29hbCBo
ZXJlIGlzIHJlbmRlciBhIHNsaWdodGx5IGxhcmdlciAoMC43NSBwaXhlbHMgaW4gc2NyZWVuIHNw
YWNlKSBxdWFkIGFuZCB0bwotICAgIC8vIGdyYWR1YWxseSB0YXBlciBvZmYgdGhlIGFscGhhIHZh
bHVlcyB0byBkbyBhIHNpbXBsZSB2ZXJzaW9uIG9mIGVkZ2UgZGlzdGFuY2UKLSAgICAvLyBhbnRp
YWxpYXNpbmcuIE5vdGUgaGVyZSB0aGF0IHdlIGFyZSBhbHNvIGluY2x1ZGluZyB0aGUgdmlld3Bv
cnQgbWF0cml4ICh3aGljaAotICAgIC8vIHRyYW5zbGF0ZXMgZnJvbSBub3JtYWxpemVkIGRldmlj
ZSBjb29yZGluYXRlcyB0byBzY3JlZW4gY29vcmRpbmF0ZXMpLCBiZWNhdXNlIHRoZXNlCi0gICAg
Ly8gdmFsdWVzIGFyZSBjb25zdW1lZCBpbiB0aGUgZnJhZ21lbnQgc2hhZGVyLCB3aGljaCB3b3Jr
cyBpbiBzY3JlZW4gY29vcmRpbmF0ZXMuCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2NyZWVu
U3BhY2VUcmFuc2Zvcm0gPSB2aWV3cG9ydE1hdHJpeChtX2NvbnRleHQzRC5nZXQoKSkubXVsdGlw
bHkoVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpKS5tdWx0aXBs
eShtb2RlbFZpZXdNYXRyaXgpLnRvMmRUcmFuc2Zvcm0oKTsKLSAgICBpZiAoIXNjcmVlblNwYWNl
VHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRmxv
YXRRdWFkIHF1YWRJblNjcmVlblNwYWNlID0gc2NyZWVuU3BhY2VUcmFuc2Zvcm0ubWFwUXVhZChv
cmlnaW5hbFRhcmdldFJlY3QpOwotCi0gICAgY29uc3QgZmxvYXQgaW5mbGF0aW9uRGlzdGFuY2Ug
PSAwLjc1OwotICAgIEZsb2F0UXVhZCBleHBhbmRlZFF1YWRJblNjcmVlblNwYWNlID0gaW5mbGF0
ZVF1YWQocXVhZEluU2NyZWVuU3BhY2UsIGluZmxhdGlvbkRpc3RhbmNlKTsKLQotICAgIC8vIElu
IHRoZSBub24tYW50aWFsaWFzZWQgY2FzZSB0aGUgdmVydGljZXMgcGFzc2VkIGFyZSB0aGUgdW5p
dCByZWN0YW5nbGUgYW5kIGRvdWJsZQotICAgIC8vIGFzIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVz
ICgwLDAgMSwwLCAxLDEgYW5kIDAsMSkuIEhlcmUgd2UgbWFwIHRoZSBleHBhbmRlZCBxdWFkCi0g
ICAgLy8gY29vcmRpbmF0ZXMgaW4gc2NyZWVuIHNwYWNlIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHJl
Y3QncyB0ZXh0dXJlIGNvb3JkaW5hdGVzLgotICAgIC8vIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2Yg
c2xpZ2h0bHkgaW5jcmVhc2luZyB0aGUgc2l6ZSBvZiB0aGUgb3JpZ2luYWwgcXVhZCdzIGdlb21l
dHJ5Ci0gICAgLy8gaW4gdGhlIHZlcnRleCBzaGFkZXIuCi0gICAgRmxvYXRRdWFkIGV4cGFuZGVk
UXVhZEluVGV4dHVyZUNvb3JkaW5hdGVzID0gc2NyZWVuU3BhY2VUcmFuc2Zvcm0uaW52ZXJzZSgp
Lm1hcFF1YWQoZXhwYW5kZWRRdWFkSW5TY3JlZW5TcGFjZSk7Ci0gICAgZXhwYW5kZWRRdWFkSW5U
ZXh0dXJlQ29vcmRpbmF0ZXMubW92ZSgtb3JpZ2luYWxUYXJnZXRSZWN0LngoKSwgLW9yaWdpbmFs
VGFyZ2V0UmVjdC55KCkpOwotICAgIGV4cGFuZGVkUXVhZEluVGV4dHVyZUNvb3JkaW5hdGVzLnNj
YWxlKDEgLyBvcmlnaW5hbFRhcmdldFJlY3Qud2lkdGgoKSwgMSAvIG9yaWdpbmFsVGFyZ2V0UmVj
dC5oZWlnaHQoKSk7Ci0KLSAgICAvLyBXZSBwcmVwYXJlIGJvdGggdGhlIGV4cGFuZGVkIHF1YWQg
Zm9yIHRoZSBmcmFnbWVudCBzaGFkZXIgYXMgd2VsbCBhcyB0aGUgcmVjdGFuZ3VsYXIgYm91bmRp
bmcKLSAgICAvLyBib3ggb2YgdGhhdCBxdWFkLCBhcyB0aGF0IHNlZW1zIG5lY2Vzc2FyeSB0byBw
cm9wZXJseSBhbnRpYWxpYXMgYmFja2ZhY2luZyBxdWFkcy4KLSAgICBmbG9hdCB0YXJnZXRRdWFk
RWRnZXNbMjRdOwotICAgIHF1YWRUb0VkZ2VBcnJheShleHBhbmRlZFF1YWRJblNjcmVlblNwYWNl
LCB0YXJnZXRRdWFkRWRnZXMpOwotICAgIHF1YWRUb0VkZ2VBcnJheShpbmZsYXRlUXVhZChxdWFk
SW5TY3JlZW5TcGFjZS5ib3VuZGluZ0JveCgpLCAgaW5mbGF0aW9uRGlzdGFuY2UpLCB0YXJnZXRR
dWFkRWRnZXMgKyAxMik7Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlvbnMg
b3B0aW9ucyA9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpBbnRpYWxpYXMgfCBUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZTsKLSAgICBpZiAob3BhY2l0eSA8IDEpCi0gICAg
ICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wYWNpdHk7Ci0KLSAg
ICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hh
cmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShv
cHRpb25zKTsKICAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQo
KSk7Ci0gICAgbV9jb250ZXh0M0QtPnVuaWZvcm0zZnYocHJvZ3JhbS0+ZXhwYW5kZWRRdWFkRWRn
ZXNJblNjcmVlblNwYWNlTG9jYXRpb24oKSwgOCwgdGFyZ2V0UXVhZEVkZ2VzKTsKLQotICAgIGRy
YXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCB0ZXh0dXJlLCBmbGFncywg
c2l6ZSwgRHJhd1F1YWQob3JpZ2luYWxUYXJnZXRSZWN0LCBleHBhbmRlZFF1YWRJblRleHR1cmVD
b29yZGluYXRlcyksIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgMCAvKiBtYXNrVGV4dHVyZSAq
Lyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4
dHVyZWRRdWFkV2l0aFByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qIHByb2dyYW0s
IHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJbnRTaXplJiBzaXplLCBjb25z
dCBEcmF3UXVhZCYgcXVhZFRvRHJhdywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVs
Vmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1
cmUpCi17Ci0gICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0t
PnZlcnRleExvY2F0aW9uKCkpOwogICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgR0MzRGVudW0gdGFyZ2V0ID0gZmxhZ3MgJiBT
aG91bGRVc2VBUkJUZXh0dXJlUmVjdCA/IEdDM0RlbnVtKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9S
RUNUQU5HTEVfQVJCKSA6IEdDM0RlbnVtKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKTsK
ICAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKQEAgLTU5Niw3
ICs1MTYsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9n
cmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcgogICAgIGlmIChvcGFjaXR5IDwgMSB8
fCBtYXNrVGV4dHVyZSkKICAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CiAKLSAgICBkcmF3
UXVhZChxdWFkVG9EcmF3LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0sIEdyYXBoaWNzQ29udGV4
dDNEOjpUUklBTkdMRV9GQU4sIGZsYWdzKTsKKyAgICBkcmF3KHJlY3QsIG1vZGVsVmlld01hdHJp
eCwgcHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgZmxhZ3MpOwogfQog
CiBCaXRtYXBUZXh0dXJlR0w6OkJpdG1hcFRleHR1cmVHTChUZXh0dXJlTWFwcGVyR0wqIHRleHR1
cmVNYXBwZXIpCkBAIC0xMTcwLDI2ICsxMDkwLDExIEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpi
ZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29u
CiAgICAgY29uc3QgR0MzRGZsb2F0IHVuaXRSZWN0W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwg
MX07CiAgICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4
TG9jYXRpb24oKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGlu
dHB0cih1bml0UmVjdCkpOwogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJh
bnNmb3JtYXRpb25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpCi0gICAgICAgICAgICAu
bXVsdGlwbHkobW9kZWxWaWV3TWF0cml4KQotICAgICAgICAgICAgLm11bHRpcGx5KFRyYW5zZm9y
bWF0aW9uTWF0cml4KHRhcmdldFJlY3Qud2lkdGgoKSwgMCwgMCwgMCwKLSAgICAgICAgICAgICAg
ICAwLCB0YXJnZXRSZWN0LmhlaWdodCgpLCAwLCAwLAotICAgICAgICAgICAgICAgIDAsIDAsIDEs
IDAsCi0gICAgICAgICAgICAgICAgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCAwLCAx
KSk7Ci0KLSAgICBjb25zdCBHQzNEZmxvYXQgbTRbXSA9IHsKLSAgICAgICAgbWF0cml4Lm0xMSgp
LCBtYXRyaXgubTEyKCksIG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAotICAgICAgICBtYXRy
aXgubTIxKCksIG1hdHJpeC5tMjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCi0gICAg
ICAgIG1hdHJpeC5tMzEoKSwgbWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQo
KSwKLSAgICAgICAgbWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0
cml4Lm00NCgpCi0gICAgfTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPQorICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtb2RlbFZpZXdNYXRyaXgpCisgICAgICAgICAgICAu
bXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoRmxvYXRSZWN0KDAsIDAs
IDEsIDEpLCB0YXJnZXRSZWN0KSk7CiAKLSAgICBjb25zdCBHQzNEZmxvYXQgbTRhbGxbXSA9IHsK
LSAgICAgICAgMiwgMCwgMCwgMCwKLSAgICAgICAgMCwgMiwgMCwgMCwKLSAgICAgICAgMCwgMCwg
MSwgMCwKLSAgICAgICAgLTEsIC0xLCAwLCAxCi0gICAgfTsKKyAgICBzdGF0aWMgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXggZnVsbFByb2plY3Rpb25NYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6cmVjdFRvUmVjdChGbG9hdFJlY3QoMCwgMCwgMSwgMSksIEZsb2F0UmVjdCgtMSwgLTEs
IDIsIDIpKTsKIAogICAgIGludCYgc3RlbmNpbEluZGV4ID0gY2xpcFN0YWNrKCkuY3VycmVudCgp
LnN0ZW5jaWxJbmRleDsKIApAQCAtMTIwMiwxMyArMTEwNywxNSBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRy
aXgsIGNvbgogICAgIG1fY29udGV4dDNELT5zdGVuY2lsTWFzaygweGZmICYgfihzdGVuY2lsSW5k
ZXggLSAxKSk7CiAKICAgICAvLyBGaXJzdCBjbGVhciB0aGUgZW50aXJlIGJ1ZmZlciBhdCB0aGUg
Y3VycmVudCBpbmRleC4KLSAgICBtX2NvbnRleHQzRC0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFt
LT5tYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgY29uc3RfY2FzdDxHQzNEZmxvYXQqPihtNGFs
bCkpOworICAgIHByb2dyYW0tPnNldE1hdHJpeChwcm9ncmFtLT5wcm9qZWN0aW9uTWF0cml4TG9j
YXRpb24oKSwgZnVsbFByb2plY3Rpb25NYXRyaXgpOworICAgIHByb2dyYW0tPnNldE1hdHJpeChw
cm9ncmFtLT5tb2RlbFZpZXdNYXRyaXhMb2NhdGlvbigpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
KTsKICAgICBtX2NvbnRleHQzRC0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPLCBH
cmFwaGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8pOwogICAgIG1f
Y29udGV4dDNELT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIDAs
IDQpOwogCiAgICAgLy8gTm93IGFwcGx5IHRoZSBjdXJyZW50IGluZGV4IHRvIHRoZSBuZXcgcXVh
ZC4KICAgICBtX2NvbnRleHQzRC0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpSRVBMQUNF
LCBHcmFwaGljc0NvbnRleHQzRDo6UkVQTEFDRSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFUExBQ0Up
OwotICAgIG1fY29udGV4dDNELT51bmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0
aW9uKCksIDEsIGZhbHNlLCBjb25zdF9jYXN0PEdDM0RmbG9hdCo+KG00KSk7CisgICAgcHJvZ3Jh
bS0+c2V0TWF0cml4KHByb2dyYW0tPnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpLCBkYXRhKCku
cHJvamVjdGlvbk1hdHJpeCk7CisgICAgcHJvZ3JhbS0+c2V0TWF0cml4KHByb2dyYW0tPm1vZGVs
Vmlld01hdHJpeExvY2F0aW9uKCksIG1hdHJpeCk7CiAgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJh
eXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgNCk7CiAKICAgICAvLyBDbGVh
ciB0aGUgc3RhdGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKaW5kZXggNTlkYjNkMzk3OWMwZDEwYmU0MTQ4
MTVlNzgyMzE1ZGYwN2MzNWExNi4uYWExMzMxMmZhYWZjYTMxZmRmMWQxYzQxNGQzNWMyN2NhYzgw
MmNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaApAQCAtNDQsNyArNDQsOCBAQCBwdWJsaWM6CiAgICAg
ZW51bSBGbGFnIHsKICAgICAgICAgU2hvdWxkQmxlbmQgPSAweDAxLAogICAgICAgICBTaG91bGRG
bGlwVGV4dHVyZSA9IDB4MDIsCi0gICAgICAgIFNob3VsZFVzZUFSQlRleHR1cmVSZWN0ID0gMHgw
NAorICAgICAgICBTaG91bGRVc2VBUkJUZXh0dXJlUmVjdCA9IDB4MDQsCisgICAgICAgIFNob3Vs
ZEFudGlhbGlhcyA9IDB4MDgKICAgICB9OwogCiAgICAgdHlwZWRlZiBpbnQgRmxhZ3M7CkBAIC05
OCwyMiArOTksMTMgQEAgcHJpdmF0ZToKICAgICAgICAgVmVjdG9yPENsaXBTdGF0ZT4gY2xpcFN0
YWNrOwogICAgIH07CiAKLSAgICBzdHJ1Y3QgRHJhd1F1YWQgewotICAgICAgICBEcmF3UXVhZChj
b25zdCBGbG9hdFJlY3QmIG9yaWdpbmFsVGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRRdWFkJiB0YXJn
ZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgRmxvYXRT
aXplKDEsIDEpKSkKLSAgICAgICAgICAgIDogb3JpZ2luYWxUYXJnZXRSZWN0KG9yaWdpbmFsVGFy
Z2V0UmVjdCkKLSAgICAgICAgICAgICwgdGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZSh0YXJn
ZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAg
ICBGbG9hdFJlY3Qgb3JpZ2luYWxUYXJnZXRSZWN0OwotICAgICAgICBGbG9hdFF1YWQgdGFyZ2V0
UmVjdE1hcHBlZFRvVW5pdFNxdWFyZTsKLSAgICB9OwotCiAgICAgVGV4dHVyZU1hcHBlckdMKCk7
CiAKLSAgICBib29sIGRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJl
LCBGbGFncywgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYgb3JpZ2luYWxUYXJnZXRS
ZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBv
cGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3Nl
ZEVkZ2VzKTsKLSAgICB2b2lkIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbSosIHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBJbnRTaXpl
JiwgY29uc3QgRHJhd1F1YWQmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3
TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7
Ci0gICAgdm9pZCBkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiwgR0Mz
RGVudW0gZHJhd2luZ01vZGUsIEZsYWdzKTsKKyAgICB2b2lkIGRyYXdUZXh0dXJlZFF1YWRXaXRo
UHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSosIHVpbnQzMl90IHRleHR1cmUsIEZs
YWdzLCBjb25zdCBJbnRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4
dHVyZSogbWFza1RleHR1cmUpOworICAgIHZvaWQgZHJhdyhjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbSosIEdDM0RlbnVtIGRyYXdpbmdNb2RlLCBGbGFncyk7CisKKyAgICB2b2lkIGRy
YXdVbml0UmVjdChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSosIEdDM0RlbnVtIGRyYXdpbmdN
b2RlKTsKKyAgICB2b2lkIGRyYXdFZGdlVHJpYW5nbGVzKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtKik7CiAKICAgICBib29sIGJlZ2luU2Npc3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIGJpbmREZWZhdWx0U3VyZmFjZSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKaW5kZXggZjRkY2Zm
ZWFkZjBmY2VlNGRkYmY4YWQ3ZDJkNTUxNTk4MTQxNWRlNi4uZTljNzk2MDRlY2JjNWFmMmUxYzhk
NjQ0ZTRiOGVjZmI0ZjAwM2U2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuY3BwCkBAIC03MCw2ICs3MCwxOCBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleAogICAg
IExPRyhDb21wb3NpdGluZywgIlByb2dyYW0gbG9nOiAlc1xuIiwgbG9nLnV0ZjgoKS5kYXRhKCkp
OwogfQogCit2b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpzZXRNYXRyaXgoR0MzRHVp
bnQgbG9jYXRpb24sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCit7CisgICAg
R0MzRGZsb2F0IG1hdHJpeEFzRmxvYXRzW10gPSB7CisgICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0
cml4Lm0xMigpLCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQoKSwKKyAgICAgICAgbWF0cml4Lm0y
MSgpLCBtYXRyaXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgpLAorICAgICAgICBt
YXRyaXgubTMxKCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCksCisg
ICAgICAgIG1hdHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5t
NDQoKQorICAgIH07CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24s
IDEsIGZhbHNlLCBtYXRyaXhBc0Zsb2F0cyk7Cit9CisKIEdDM0R1aW50IFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtOjpnZXRMb2NhdGlvbihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFZhcmlh
YmxlVHlwZSB0eXBlKQogewogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBHQzNEdWludD46Oml0
ZXJhdG9yIGl0ID0gbV92YXJpYWJsZXMuZmluZChuYW1lKTsKQEAgLTEwNiwzMiArMTE4LDY2IEBA
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0o
KQogICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFtSUQpOwogfQogCi1zdGF0aWMg
Y29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlID0KKyNkZWZpbmUgR0xTTF9ESVJFQ1RJVkUo
Li4uKSAiIyIjX19WQV9BUkdTX18iXG4iCitzdGF0aWMgY29uc3QgY2hhciogdmVydGV4VGVtcGxh
dGUgPQogICAgIFNUUklOR0lGWSgKLSAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OworICAg
ICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKKyAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbW9k
ZWxWaWV3TWF0cml4OworICAgICAgICB1bmlmb3JtIG1hdDQgdV9wcm9qZWN0aW9uTWF0cml4Owog
ICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZmxpcDsKICAgICAgICAgdW5pZm9ybSB2ZWMyIHVfdGV4
dHVyZVNpemU7Ci0gICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OworCiAgICAgICAgIHZh
cnlpbmcgdmVjMiB2X3RleENvb3JkOwogICAgICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29v
cmQ7CisgICAgICAgIHZhcnlpbmcgZmxvYXQgdl9hbnRpYWxpYXM7CisKKyAgICAgICAgdm9pZCBu
b29wKHZlYzIpIHsgfQorCisgICAgICAgIHZlYzQgdG9TY3JlZW5TcGFjZSh2ZWMyIHBvcykgeyBy
ZXR1cm4gdmVjNChwb3MsIDAuLCAxLikgKiB1X21vZGVsVmlld01hdHJpeDsgfQorCisgICAgICAg
IC8vIFRoaXMgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgd2UgZ2V0IGVk
Z2UgdHJpYW5nbGVzIHdpdGggY29udHJvbCBwb2ludHMsCisgICAgICAgIC8vIGEgY29udHJvbCBw
b2ludCBiZWluZyB0aGUgbmVhcmVzdCBwb2ludCB0byB0aGUgY29vcmRpbmF0ZSB0aGF0IGlzIG9u
IHRoZSBlZGdlLgorICAgICAgICB2b2lkIGFwcGx5QW50aWFsaWFzKGlub3V0IHZlYzIgcG9zaXRp
b24pCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdlIGNvdW50IG9uIHRoZSBmYWN0IHRoYXQg
cXVhZCBwYXNzZWQgaW4gaXMgYWx3YXlzIGEgdW5pdCByZWN0LAorICAgICAgICAgICAgLy8gYW5k
IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggYXBwbGllcyB0aGUgcmVhbCByZWN0LgorICAgICAg
ICAgICAgY29uc3QgdmVjMiBjZW50ZXIgPSB2ZWMyKDAuNSwgMC41KTsKKyAgICAgICAgICAgIGNv
bnN0IGZsb2F0IGFudGlhbGlhc0luZmxhdGlvbkRpc3RhbmNlID0gMS47CisKKyAgICAgICAgICAg
IC8vIFdlIHBhc3MgdGhlIGNvbnRyb2wgcG9pbnQgYXMgdGhlIHp3IGNvb3JkaW5hdGVzIG9mIHRo
ZSB2ZXJ0ZXguCisgICAgICAgICAgICAvLyBUaGUgY29udHJvbCBwb2ludCBpcyB0aGUgcG9pbnQg
b24gdGhlIGVkZ2UgY2xvc2VzdCB0byB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAgICAgICAgICAg
IC8vIFRoZSBjb250cm9sIHBvaW50IGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgYW50aWFsaWFzIHZh
bHVlLgorICAgICAgICAgICAgdmVjMiBjb250cm9sUG9pbnQgPSBhX3ZlcnRleC56dzsKKworICAg
ICAgICAgICAgLy8gRmlyc3Qgd2UgY2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBpbiBzY3JlZW4gc3Bh
Y2UuCisgICAgICAgICAgICB2ZWM0IGNlbnRlckluU2NyZWVuQ29vcmRpbmF0ZXMgPSB0b1NjcmVl
blNwYWNlKGNlbnRlcik7CisgICAgICAgICAgICB2ZWM0IGNvbnRyb2xQb2ludEluU2NyZWVuQ29v
cmRpbmF0ZXMgPSB0b1NjcmVlblNwYWNlKGNvbnRyb2xQb2ludCk7CisgICAgICAgICAgICBmbG9h
dCBzY3JlZW5TcGFjZURpc3RhbmNlID0gZGlzdGFuY2UoY2VudGVySW5TY3JlZW5Db29yZGluYXRl
cywgY29udHJvbFBvaW50SW5TY3JlZW5Db29yZGluYXRlcyk7CisKKyAgICAgICAgICAgIC8vIFdl
IGFkZCB0aGUgaW5mbGF0aW9uIGRpc3RhbmNlIHRvIHRoZSBjb21wdXRlZCBkaXN0YW5jZSwgYW5k
IGNvbXB1dGUgdGhlIHJhdGlvLgorICAgICAgICAgICAgZmxvYXQgaW5mbGF0aW9uUmF0aW8gPSAo
c2NyZWVuU3BhY2VEaXN0YW5jZSArIGFudGlhbGlhc0luZmxhdGlvbkRpc3RhbmNlKSAvIHNjcmVl
blNwYWNlRGlzdGFuY2U7CisKKyAgICAgICAgICAgIC8vIHZfYW50aWFsaWFzIG5lZWRzIHRvIGJl
IDAgZm9yIHRoZSBvdXRlciBlZGdlIGFuZCAxLiBmb3IgdGhlIGlubmVyIGVkZ2UuCisgICAgICAg
ICAgICAvLyBTaW5jZSB0aGUgY29udHJvbFBvaW50IGlzIGVxdWFsIHRvIHRoZSBwb3NpdGlvbiBp
biB0aGUgZWRnZSB2ZXJ0aWNlcywgdGhlIHZhbHVlIGlzIGFsd2F5cyAwIGZvciB0aG9zZS4KKyAg
ICAgICAgICAgIC8vIEZvciB0aGUgY2VudGVyIHBvaW50LCB0aGUgZGlzdGFuY2UgaXMgYWx3YXlz
IDAuNSwgc28gd2Ugbm9ybWFsaXplIHRvIDEuIGJ5IG11bHRpcGx5aW5nIGJ5IDIuCisgICAgICAg
ICAgICAvLyBCeSBtdWx0cGx5aW5nIGJ5IGluZmxhdGlvblJhdGlvIGFuZCBkaXZpZGluZyBieSAo
aW5mbGF0aW9uUmF0aW8gLSAxKSwKKyAgICAgICAgICAgIC8vIFdlIG1ha2Ugc3VyZSB0aGF0IHRo
ZSB2YXJ5aW5nIGludGVycG9sYXRlcyBiZXR3ZWVuIDAgKG91dGVyIGVkZ2UpLCAxIChpbm5lciBl
ZGdlKSBhbmQgbiA+IDEgKGNlbnRlcikuCisgICAgICAgICAgICB2X2FudGlhbGlhcyA9IGRpc3Rh
bmNlKGNvbnRyb2xQb2ludCwgcG9zaXRpb24pICogMi4gKiBpbmZsYXRpb25SYXRpbyAvIChpbmZs
YXRpb25SYXRpbyAtIDEuKTsKKworICAgICAgICAgICAgLy8gTm93IGluZmxhdGUgdGhlIGFjdHVh
bCBwb3NpdGlvbi4KKyAgICAgICAgICAgIHBvc2l0aW9uID0gY2VudGVyICsgKHBvc2l0aW9uIC0g
Y2VudGVyKSAqIGluZmxhdGlvblJhdGlvOworICAgICAgICB9CiAKICAgICAgICAgdm9pZCBtYWlu
KHZvaWQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZlYzQgcG9zaXRpb24gPSBhX3ZlcnRleDsK
KyAgICAgICAgICAgIHZlYzIgcG9zaXRpb24gPSBhX3ZlcnRleC54eTsKKyAgICAgICAgICAgIGFw
cGx5QW50aWFsaWFzSWZOZWVkZWQocG9zaXRpb24pOwogICAgICAgICAgICAgdl90ZXhDb29yZCA9
IHZlYzIocG9zaXRpb24ueCwgbWl4KHBvc2l0aW9uLnksIDEuIC0gcG9zaXRpb24ueSwgdV9mbGlw
KSkgKiB1X3RleHR1cmVTaXplOwotICAgICAgICAgICAgdl9tYXNrVGV4Q29vcmQgPSB2ZWMyKHBv
c2l0aW9uKTsKLSAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiBhX3ZlcnRleDsK
KyAgICAgICAgICAgIHZfbWFza1RleENvb3JkID0gcG9zaXRpb247CisgICAgICAgICAgICBnbF9Q
b3NpdGlvbiA9IHVfcHJvamVjdGlvbk1hdHJpeCAqIHVfbW9kZWxWaWV3TWF0cml4ICogdmVjNChw
b3NpdGlvbiwgMC4sIDEuKTsKICAgICAgICAgfQogICAgICk7CiAKLSNkZWZpbmUgR0xTTF9ESVJF
Q1RJVkUoLi4uKSAiIyIjX19WQV9BUkdTX18iXG4iCi0jZGVmaW5lIERFRklORV9BUFBMSUVSKE5h
bWUpIFwKLSAgICAiI2lmZGVmIEVOQUJMRV8iI05hbWUiXG4iIFwKLSAgICAiI2RlZmluZSBhcHBs
eSIjTmFtZSJJZk5lZWRlZCBhcHBseSIjTmFtZSJcbiJcCi0gICAgIiNlbHNlXG4iXAotICAgICIj
ZGVmaW5lIGFwcGx5IiNOYW1lIklmTmVlZGVkIG5vb3BcbiJcCi0gICAgIiNlbmRpZlxuIgotCiAj
ZGVmaW5lIFJFQ1RfVEVYVFVSRV9ESVJFQ1RJVkUgXAogICAgIEdMU0xfRElSRUNUSVZFKGlmZGVm
IEVOQUJMRV9SZWN0KSBcCiAgICAgICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBTYW1wbGVyVHlw
ZSBzYW1wbGVyMkRSZWN0KSBcCkBAIC0xNDEsMjkgKzE4NywxNCBAQCBzdGF0aWMgY29uc3QgY2hh
ciogdmVydGV4U2hhZGVyU291cmNlID0KICAgICAgICAgR0xTTF9ESVJFQ1RJVkUoZGVmaW5lIFNh
bXBsZXJGdW5jdGlvbiB0ZXh0dXJlMkQpIFwKICAgICBHTFNMX0RJUkVDVElWRShlbmRpZikKIAot
I2RlZmluZSBFTkFCTEVfQVBQTElFUihOYW1lKSAiI2RlZmluZSBFTkFCTEVfIiNOYW1lIlxuIgor
I2RlZmluZSBFTkFCTEVfQVBQTElFUihOYW1lKSAiI2RlZmluZSBFTkFCTEVfIiNOYW1lIlxuI2Rl
ZmluZSBhcHBseSIjTmFtZSJJZk5lZWRlZCBhcHBseSIjTmFtZSJcbiIKKyNkZWZpbmUgRElTQUJM
RV9BUFBMSUVSKE5hbWUpICIjZGVmaW5lIGFwcGx5IiNOYW1lIklmTmVlZGVkIG5vb3BcbiIKICNk
ZWZpbmUgQkxVUl9DT05TVEFOVFMgXAogICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBHQVVTU0lB
Tl9LRVJORUxfSEFMRl9XSURUSCAxMSkgXAogICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBHQVVT
U0lBTl9LRVJORUxfU1RFUCAwLjIpCiAKIAogc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50VGVt
cGxhdGUgPQotICAgIERFRklORV9BUFBMSUVSKFRleHR1cmUpCi0gICAgREVGSU5FX0FQUExJRVIo
U29saWRDb2xvcikKLSAgICBERUZJTkVfQVBQTElFUihPcGFjaXR5KQotICAgIERFRklORV9BUFBM
SUVSKE1hc2spCi0gICAgREVGSU5FX0FQUExJRVIoQW50aWFsaWFzKQotICAgIERFRklORV9BUFBM
SUVSKEdyYXlzY2FsZUZpbHRlcikKLSAgICBERUZJTkVfQVBQTElFUihTZXBpYUZpbHRlcikKLSAg
ICBERUZJTkVfQVBQTElFUihTYXR1cmF0ZUZpbHRlcikKLSAgICBERUZJTkVfQVBQTElFUihIdWVS
b3RhdGVGaWx0ZXIpCi0gICAgREVGSU5FX0FQUExJRVIoSW52ZXJ0RmlsdGVyKQotICAgIERFRklO
RV9BUFBMSUVSKEJyaWdodG5lc3NGaWx0ZXIpCi0gICAgREVGSU5FX0FQUExJRVIoQ29udHJhc3RG
aWx0ZXIpCi0gICAgREVGSU5FX0FQUExJRVIoT3BhY2l0eUZpbHRlcikKLSAgICBERUZJTkVfQVBQ
TElFUihCbHVyRmlsdGVyKQotICAgIERFRklORV9BUFBMSUVSKEFscGhhQmx1cikKLSAgICBERUZJ
TkVfQVBQTElFUihDb250ZW50VGV4dHVyZSkKICAgICBSRUNUX1RFWFRVUkVfRElSRUNUSVZFCiAg
ICAgQkxVUl9DT05TVEFOVFMKICAgICBTVFJJTkdJRlkoCkBAIC0xNzIsOSArMjAzLDkgQEAgc3Rh
dGljIGNvbnN0IGNoYXIqIGZyYWdtZW50VGVtcGxhdGUgPQogICAgICAgICB1bmlmb3JtIHNhbXBs
ZXIyRCBzX21hc2s7CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfY29udGVudFRleHR1cmU7
CiAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5OworICAgICAgICB2YXJ5aW5nIGZsb2F0
IHZfYW50aWFsaWFzOwogICAgICAgICB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsKICAgICAgICAg
dmFyeWluZyB2ZWMyIHZfbWFza1RleENvb3JkOwotICAgICAgICB1bmlmb3JtIHZlYzMgdV9leHBh
bmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbOF07CiAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9m
aWx0ZXJBbW91bnQ7CiAgICAgICAgIHVuaWZvcm0gdmVjMiB1X2JsdXJSYWRpdXM7CiAgICAgICAg
IHVuaWZvcm0gdmVjMiB1X3NoYWRvd09mZnNldDsKQEAgLTE4Myw0NyArMjE0LDcgQEAgc3RhdGlj
IGNvbnN0IGNoYXIqIGZyYWdtZW50VGVtcGxhdGUgPQogCiAgICAgICAgIHZvaWQgbm9vcCh2ZWM0
KSB7IH0KIAotICAgICAgICAvLyBUaGUgZGF0YSBwYXNzZWQgaW4gdV9leHBhbmRlZFF1YWRFZGdl
c0luU2NyZWVuU3BhY2UgaXMgbWVyZWx5IHRoZQotICAgICAgICAvLyBwcmUtc2NhbGVkIGNvZWZm
ZWNpZW50cyBvZiB0aGUgbGluZSBlcXVhdGlvbnMgZGVzY3JpYmluZyB0aGUgZm91ciBlZGdlcwot
ICAgICAgICAvLyBvZiB0aGUgZXhwYW5kZWQgcXVhZCBpbiBzY3JlZW4gc3BhY2UgYW5kIHRoZSBy
ZWN0YW5ndWxhciBib3VuZGluZyBib3gKLSAgICAgICAgLy8gb2YgdGhlIGV4cGFuZGVkIHF1YWQu
Ci0gICAgICAgIC8vCi0gICAgICAgIGZsb2F0IG5vcm1hbGl6ZWREaXN0YW5jZSh2ZWMzIGVkZ2VD
b2VmZmljaWVudCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gV2UgYXJlIGRvaW5nIGEgc2lt
cGxlIGRpc3RhbmNlIGNhbGN1bGF0aW9uIGhlcmUgYWNjb3JkaW5nIHRvIHRoZSBmb3JtdWxhOgot
ICAgICAgICAgICAgLy8gKEEqcC54ICsgQipwLnkgKyBDKSAvIHNxcnQoQV4yICsgQl4yKSA9IGRp
c3RhbmNlIGZyb20gbGluZSB0byBwCi0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgQSwgQiBhbmQg
QyBoYXZlIGFscmVhZHkgYmVlbiBzY2FsZWQgYnkgMSAvIHNxcnQoQV4yICsgQl4yKS4KLSAgICAg
ICAgICAgIHJldHVybiBjbGFtcChkb3QoZWRnZUNvZWZmaWNpZW50LCB2ZWMzKGdsX0ZyYWdDb29y
ZC54eSwgMS4pKSwgMC4sIDEuKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0IGFudGlhbGlh
c1F1YWQodmVjMyBjb2VmZmljaWVudDEsIHZlYzMgY29lZmZpY2llbnQyLCB2ZWMzIGNvZWZmaWNp
ZW50MywgdmVjMyBjb2VmZmljaWVudDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE5vdyB3
ZSB3YW50IHRvIHJlZHVjZSB0aGUgYWxwaGEgdmFsdWUgb2YgdGhlIGZyYWdtZW50IGlmIGl0IGlz
IGNsb3NlIHRvIHRoZQotICAgICAgICAgICAgLy8gZWRnZXMgb2YgdGhlIGV4cGFuZGVkIHF1YWQg
KG9yIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGJveCAtLSB3aGljaCBzZWVtcyB0byBiZQotICAgICAg
ICAgICAgLy8gaW1wb3J0YW50IGZvciBiYWNrZmFjaW5nIHF1YWRzKS4gTm90ZSB0aGF0IHdlIGFy
ZSBjb21iaW5pbmcgdGhlIGNvbnRyaWJ1dGlvbgotICAgICAgICAgICAgLy8gZnJvbSB0aGUgKHRv
cCB8fCBib3R0b20pIGFuZCAobGVmdCB8fCByaWdodCkgZWRnZSBieSBzaW1wbHkgbXVsdGlwbHlp
bmcuIFRoaXMgZm9sbG93cwotICAgICAgICAgICAgLy8gdGhlIGFwcHJvYWNoIGRlc2NyaWJlZCBh
dDogaHR0cDovL2h0dHAuZGV2ZWxvcGVyLm52aWRpYS5jb20vR1BVR2VtczIvZ3B1Z2VtczJfY2hh
cHRlcjIyLmh0bWwsCi0gICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2l0aG91dCB1c2luZyBH
YXVzc2lhbiB3ZWlnaHRzLgotICAgICAgICAgICAgcmV0dXJuIG1pbihub3JtYWxpemVkRGlzdGFu
Y2UoY29lZmZpY2llbnQxKSwgbm9ybWFsaXplZERpc3RhbmNlKGNvZWZmaWNpZW50MikpCi0gICAg
ICAgICAgICAgICAgKiBtaW4obm9ybWFsaXplZERpc3RhbmNlKGNvZWZmaWNpZW50MyksIG5vcm1h
bGl6ZWREaXN0YW5jZShjb2VmZmljaWVudDQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0
IGFudGlhbGlhcygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZsb2F0IGFudGlhbGlhc1ZhbHVl
Rm9yUXVhZCA9IAotICAgICAgICAgICAgICAgIGFudGlhbGlhc1F1YWQodV9leHBhbmRlZFF1YWRF
ZGdlc0luU2NyZWVuU3BhY2VbMF0sCi0gICAgICAgICAgICAgICAgICAgIHVfZXhwYW5kZWRRdWFk
RWRnZXNJblNjcmVlblNwYWNlWzFdLAotICAgICAgICAgICAgICAgICAgICB1X2V4cGFuZGVkUXVh
ZEVkZ2VzSW5TY3JlZW5TcGFjZVsyXSwKLSAgICAgICAgICAgICAgICAgICAgdV9leHBhbmRlZFF1
YWRFZGdlc0luU2NyZWVuU3BhY2VbM10pOwotCi0gICAgICAgICAgICBmbG9hdCBhbnRpYWxpYXNW
YWx1ZUZvckJvdW5kaW5nUmVjdCA9IAotICAgICAgICAgICAgICAgIGFudGlhbGlhc1F1YWQodV9l
eHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNF0sCi0gICAgICAgICAgICAgICAgICAgIHVf
ZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzVdLAotICAgICAgICAgICAgICAgICAgICB1
X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs2XSwKLSAgICAgICAgICAgICAgICAgICAg
dV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbN10pOwotCi0gICAgICAgICAgICByZXR1
cm4gbWluKGFudGlhbGlhc1ZhbHVlRm9yUXVhZCwgYW50aWFsaWFzVmFsdWVGb3JCb3VuZGluZ1Jl
Y3QpOyAgICAgICAgICAgCi0gICAgICAgIH0KKyAgICAgICAgZmxvYXQgYW50aWFsaWFzKCkgeyBy
ZXR1cm4gc21vb3Roc3RlcCh2X2FudGlhbGlhcywgMC4sIDEuKTsgfQogCiAgICAgICAgIHZvaWQg
YXBwbHlUZXh0dXJlKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgPSBTYW1wbGVyRnVuY3Rpb24o
c19zYW1wbGVyLCB2X3RleENvb3JkKTsgfQogICAgICAgICB2b2lkIGFwcGx5T3BhY2l0eShpbm91
dCB2ZWM0IGNvbG9yKSB7IGNvbG9yICo9IHVfb3BhY2l0eTsgfQpAQCAtMzMxLDEwICszMjIsNyBA
QCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZSA9CiAgICAgICAgICAgICBjb2xv
ciA9IHNvdXJjZU92ZXIoY29udGVudENvbG9yLCBjb2xvcik7CiAgICAgICAgIH0KIAotICAgICAg
ICB2b2lkIGFwcGx5U29saWRDb2xvcihpbm91dCB2ZWM0IGNvbG9yKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBjb2xvciAqPSB1X2NvbG9yOwotICAgICAgICB9CisgICAgICAgIHZvaWQgYXBwbHlT
b2xpZENvbG9yKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgKj0gdV9jb2xvcjsgfQogCiAgICAg
ICAgIHZvaWQgbWFpbih2b2lkKQogICAgICAgICB7CkBAIC0zNjIsMzMgKzM1MCwzNyBAQCBzdGF0
aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZSA9CiAKIHN0YXRpYyB2b2lkIGdldFNoYWRl
clNwZWMoVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlvbnMgb3B0aW9ucywgU3RyaW5n
JiB2ZXJ0ZXhTb3VyY2UsIFN0cmluZyYgZnJhZ21lbnRTb3VyY2UpCiB7Ci0gICAgU3RyaW5nQnVp
bGRlciBmcmFnbWVudEJ1aWxkZXI7CisKKyAgICBTdHJpbmdCdWlsZGVyIHNoYWRlckJ1aWxkZXI7
CiAjZGVmaW5lIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhBcHBsaWVyKSBcCi0gICAgaWYgKG9w
dGlvbnMgJiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QXBwbGllcikgXAotICAgICAgICBm
cmFnbWVudEJ1aWxkZXIuYXBwZW5kKEVOQUJMRV9BUFBMSUVSKEFwcGxpZXIpKTsKLQotICAgIFNF
VF9BUFBMSUVSX0ZST01fT1BUSU9OUyhNYXRyaXgpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJ
T05TKFRleHR1cmUpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFJlY3QpCi0gICAgU0VU
X0FQUExJRVJfRlJPTV9PUFRJT05TKFNvbGlkQ29sb3IpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9P
UFRJT05TKE9wYWNpdHkpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKE1hc2spCi0gICAg
U0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEFudGlhbGlhcykKLSAgICBTRVRfQVBQTElFUl9GUk9N
X09QVElPTlMoR3JheXNjYWxlRmlsdGVyKQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhT
ZXBpYUZpbHRlcikKLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoU2F0dXJhdGVGaWx0ZXIp
Ci0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEh1ZVJvdGF0ZUZpbHRlcikKLSAgICBTRVRf
QVBQTElFUl9GUk9NX09QVElPTlMoQnJpZ2h0bmVzc0ZpbHRlcikKLSAgICBTRVRfQVBQTElFUl9G
Uk9NX09QVElPTlMoQ29udHJhc3RGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05T
KEludmVydEZpbHRlcikKLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoT3BhY2l0eUZpbHRl
cikKLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQmx1ckZpbHRlcikKLSAgICBTRVRfQVBQ
TElFUl9GUk9NX09QVElPTlMoQWxwaGFCbHVyKQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9O
UyhDb250ZW50VGV4dHVyZSkKLQotICAgIGZyYWdtZW50QnVpbGRlci5hcHBlbmQoZnJhZ21lbnRU
ZW1wbGF0ZSk7Ci0gICAgdmVydGV4U291cmNlID0gdmVydGV4U2hhZGVyU291cmNlOwotICAgIGZy
YWdtZW50U291cmNlID0gZnJhZ21lbnRCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIHNoYWRl
ckJ1aWxkZXIuYXBwZW5kKFwKKyAgICAgICAgICAgIChvcHRpb25zICYgVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OkFwcGxpZXIpIFwKKyAgICAgICAgICAgICAgICA/IEVOQUJMRV9BUFBMSUVS
KEFwcGxpZXIpIFwKKyAgICAgICAgICAgICAgICA6IERJU0FCTEVfQVBQTElFUihBcHBsaWVyKSkK
KworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhUZXh0dXJlKTsKKyAgICBTRVRfQVBQTElF
Ul9GUk9NX09QVElPTlMoUmVjdCk7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFNvbGlk
Q29sb3IpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhPcGFjaXR5KTsKKyAgICBTRVRf
QVBQTElFUl9GUk9NX09QVElPTlMoTWFzayk7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05T
KEFudGlhbGlhcyk7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEdyYXlzY2FsZUZpbHRl
cik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFNlcGlhRmlsdGVyKTsKKyAgICBTRVRf
QVBQTElFUl9GUk9NX09QVElPTlMoU2F0dXJhdGVGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZS
T01fT1BUSU9OUyhIdWVSb3RhdGVGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9O
UyhCcmlnaHRuZXNzRmlsdGVyKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQ29udHJh
c3RGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhJbnZlcnRGaWx0ZXIpOwor
ICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhPcGFjaXR5RmlsdGVyKTsKKyAgICBTRVRfQVBQ
TElFUl9GUk9NX09QVElPTlMoQmx1ckZpbHRlcik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJ
T05TKEFscGhhQmx1cik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKENvbnRlbnRUZXh0
dXJlKTsKKyAgICBTdHJpbmdCdWlsZGVyIHZlcnRleEJ1aWxkZXI7CisgICAgdmVydGV4QnVpbGRl
ci5hcHBlbmQoc2hhZGVyQnVpbGRlci50b1N0cmluZygpKTsKKyAgICB2ZXJ0ZXhCdWlsZGVyLmFw
cGVuZCh2ZXJ0ZXhUZW1wbGF0ZSk7CisgICAgc2hhZGVyQnVpbGRlci5hcHBlbmQoZnJhZ21lbnRU
ZW1wbGF0ZSk7CisgICAgdmVydGV4U291cmNlID0gdmVydGV4QnVpbGRlci50b1N0cmluZygpOwor
ICAgIGZyYWdtZW50U291cmNlID0gc2hhZGVyQnVpbGRlci50b1N0cmluZygpOwogfQogCiBUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5oCmluZGV4IDYwN2VkNDdhNTMzMDY0MWQzZTkyODJlM2QxM2ZjNmExNWJjNTA4ZjMuLjczMjFm
YzVjOWQ5MTZmNDI5NjkwNjI3YTM1OGU1ODIyYjhmNWVhNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlci5oCkBAIC00Nyw5ICs0Nyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpOwogCiAgICAgVEVYTUFQX0RFQ0xBUkVf
QVRUUklCVVRFKHZlcnRleCkKLSAgICBURVhNQVBfREVDTEFSRV9BVFRSSUJVVEUodGV4Q29vcmQp
CiAKLSAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKG1hdHJpeCkKKyAgICBURVhNQVBfREVDTEFS
RV9VTklGT1JNKG1vZGVsVmlld01hdHJpeCkKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKHBy
b2plY3Rpb25NYXRyaXgpCiAgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShmbGlwKQogICAgIFRF
WE1BUF9ERUNMQVJFX1VOSUZPUk0odGV4dHVyZVNpemUpCiAgICAgVEVYTUFQX0RFQ0xBUkVfVU5J
Rk9STShvcGFjaXR5KQpAQCAtNjYsNiArNjYsOCBAQCBwdWJsaWM6CiAgICAgVEVYTUFQX0RFQ0xB
UkVfU0FNUExFUihjb250ZW50VGV4dHVyZSkKICNlbmRpZgogCisgICAgdm9pZCBzZXRNYXRyaXgo
R0MzRHVpbnQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisKIHByaXZhdGU6CiAgICAg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4s
IGNvbnN0IFN0cmluZyYgdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBTdHJpbmcmIGZyYWdtZW50
U2hhZGVyU291cmNlKTsKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fdmVydGV4U2hhZGVyOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180824</attachid>
            <date>2012-12-27 14:58:13 -0800</date>
            <delta_ts>2012-12-27 15:17:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105377-20121227145534.patch</filename>
            <type>text/plain</type>
            <size>39449</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4NTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzIxMWE1MTI0MTdkYTY5
YjRmMzYwOWQyYmQ4NGMwODJjZDJkZTNjMS4uNmQxM2Q2ODEwMWNmODlkZjIzODc0MTFlZDdkNzg4
NjM2NzA4NDc4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTEyLTE4ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1RleG1hcF0gRWRnZSBh
bnRpYWxpYXNpbmcgaW4gVGV4dHVyZU1hcHBlciBjb3VsZCBiZSBkb25lIHdpdGggbGVzcyBwZXIt
cGl4ZWwgY2FsbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwNTM3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEluc3RlYWQgb2YgcGFzc2luZyA4IHF1YWQgZWRnZSBjb2VmZmljaWVudHMgYXMgdW5pZm9y
bXMgYW5kIGFuYWx5emUgdGhlIGRpc3RhbmNlIGluIHRoZQorICAgICAgICBmcmFnbWVudCBzaGFk
ZXIsIHdlIHJlbmRlciB0aGUgYW50aWFsaWFzZWQgcXVhZCBhcyA0IGVkZ2UgdHJpYW5nbGVzLCB3
aGljaCBvcmlnaW5hdGUgaW4gdGhlCisgICAgICAgIGNlbnRlciBvZiB0aGUgcXVhZC4gCisKKyAg
ICAgICAgVGhlIHZlcnRleCBzaGFkZXIgZXhwYW5kcyB0aGUgcXVhZCBiYXNlZCBvbiB0aGUgc2Ny
ZWVuIHRyYW5zZm9ybSwgYW5kIGFwcGxpZXMgYSB2YWx1ZSB0byBlYWNoIHZlcnRleCB0byBiZSBp
bnRlcnBvbGF0ZWQgYnkgdGhlIEdQVS4gCisKKyAgICAgICAgSXQgaXMgdmVyeSBkaWZmaWN1bHQg
dG8gdGVzdCBwZXJmb3JtYW5jZSBnYWluOyBIb3dldmVyLCB0aGUgZm9sbG93aW5nIGlzIGFwcGFy
ZW50OgorICAgICAgICAtIFRoZSBtYXRyaXggbXVsdGlwbGljYXRpb25zIGFuZCBpbnZlcnNpb25z
IGRvbmUgYmVmb3JlIGluIHRoZSBxdWFkIGluZmxhdGlvbiBjb2RlIHdlcmUKKyAgICAgICAgICBh
bHdheXMgdmlzaWJsZSBpbiBpbnN0cnVtZW50cy92YWxncmluZCBhbmQgdGhleSBhcmUgbm93IGdv
bmUuCisgICAgICAgIC0gV2Ugbm93IHBlcmZvcm0gYSBzaW5nbGUgc21vb3Roc3RlcCgpIGNvbW1h
bmQgcGVyIHBpeGVsIGluc3RlYWQgb2YgOCBjbGFtcChkb3QoKSkgY29tbWFuZHMuCisgICAgICAg
IC0gSXQgc2hvdWxkIG5vdyBiZSBwb3NzaWJsZSB0byBhbnRpYWxpYXMgaW5kaXZpZHVhbCBlZGdl
cy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpnZXRTdGF0aWNWQk8pOgorICAgICAgICAgICAgQ2Fj
aGUgdGhlIHVuaXQtcmVjdCBhbmQgZWRnZS10cmlhbmdsZSB2ZXJ0ZXggZGF0YSBpbiBhIFZCTy4K
KworICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6flRleHR1cmVNYXBwZXJH
TERhdGEpOgorICAgICAgICAgICAgQ2xlYXIgdGhlIGNhY2hlZCBWQk9zIHVwb24gZGVzdHJ1Y3Rp
b24uCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlkQ29sb3IpOgorICAg
ICAgICAgICAgVXNlIHRoZSBuZXcgc2lnbmF0dXJlICJkcmF3IiBpbnN0ZWFkIG9mICJkcmF3UXVh
ZCIuCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0VkZ2VUcmlhbmds
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VW5pdFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3KToKKyAgICAgICAgICAgIFJl
bW92ZWQgRHJhd1F1YWQsIGluc3RlYWQgZHJhdyBlaXRoZXIgYSB1bml0IHJlY3Qgb3IgZWRnZSB0
cmlhbmdsZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlw
KToKKyAgICAgICAgICAgIFVzZSB0aGUgbmV3IHNldE1hdHJpeCBmdW5jdGlvbi4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaDoKKyAgICAgICAg
ICAgIEFkZGVkIGEgcGFpbnQgZmxhZyBmb3IgYW50aWFsaWFzaW5nLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpzZXRNYXRyaXgpOgor
ICAgICAgICAgICAgU2luY2Ugd2Ugbm93IHNldCB0aGUgbWF0cml4IGluIG11bHRpcGxlIGxvY2F0
aW9ucywgYWRkZWQgYSBjb252ZW5pZW5jZSAKKyAgICAgICAgICAgIGZ1bmN0aW9uIGZvciBtYXRy
aXggdW5pZm9ybS4KKworICAgICAgICAoV2ViQ29yZTo6Z2V0U2hhZGVyU3BlYyk6CisgICAgICAg
ICAgICBVcGRhdGUgdGhlIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVyIHRvIGFjY291bnQgZm9y
IHRoZSBuZXcgYW50aWFsaWFzaW5nCisgICAgICAgICAgICBtZWNoYW5pc20uCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmg6Cisg
ICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisKIDIwMTItMTItMjcgIEtvbmRh
cGFsbHkgS2FseWFuICA8a2FseWFuLmtvbmRhcGFsbHlAaW50ZWwuY29tPgogCiAgICAgICAgIFtF
RkxdW1dlYkdMXSBJbXBsZW1lbnQgRUdMIHN1cHBvcnQgd2l0aCBHTFguCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuY3BwCmluZGV4IDkxYjRhZTI5YWVlOTcwOTczOGNmYzlkMjVhNDBjYzBlMGNiMDJmODAuLmRh
MGU2ODQ4YzZmNjU1OWMyOGRlYjc1ZTEwZDkyYjE4OTA0ZjgyYmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuY3BwCkBAIC0xMjUsNiArMTI1LDkgQEAgcHVibGljOgogICAgICAgICAsIG1fc2hhcmVkR0xE
YXRhKFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6Y3VycmVudFNoYXJlZEdMRGF0
YSh0aGlzLT5jb250ZXh0KSkKICAgICB7IH0KIAorICAgIH5UZXh0dXJlTWFwcGVyR0xEYXRhKCk7
CisgICAgUGxhdGZvcm0zRE9iamVjdCBnZXRTdGF0aWNWQk8oR0MzRGVudW0gdGFyZ2V0LCBHQzNE
c2l6ZWlwdHIsIGNvbnN0IHZvaWQqIGRhdGEpOworCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQ7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcHJvamVjdGlvbk1hdHJpeDsKICAgICBU
ZXh0dXJlTWFwcGVyOjpQYWludEZsYWdzIFBhaW50RmxhZ3M7CkBAIC0xMzcsOCArMTQwLDI5IEBA
IHB1YmxpYzoKICAgICBHQzNEaW50IHByZXZpb3VzU2Npc3Nvcls0XTsKICAgICBSZWZQdHI8U2hh
cmVkR0xEYXRhPiBtX3NoYXJlZEdMRGF0YTsKICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3Vy
cmVudFN1cmZhY2U7CisgICAgSGFzaE1hcDxjb25zdCB2b2lkKiwgUGxhdGZvcm0zRE9iamVjdD4g
dmJvczsKIH07CiAKK1BsYXRmb3JtM0RPYmplY3QgVGV4dHVyZU1hcHBlckdMRGF0YTo6Z2V0U3Rh
dGljVkJPKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRh
dGEpCit7CisgICAgSGFzaE1hcDxjb25zdCB2b2lkKiwgUGxhdGZvcm0zRE9iamVjdD46Oml0ZXJh
dG9yIGl0ID0gdmJvcy5maW5kKGRhdGEpOworICAgIGlmIChpdCAhPSB2Ym9zLmVuZCgpKQorICAg
ICAgICByZXR1cm4gaXQtPnZhbHVlOworCisgICAgUGxhdGZvcm0zRE9iamVjdCB2Ym8gPSBjb250
ZXh0LT5jcmVhdGVCdWZmZXIoKTsKKyAgICBjb250ZXh0LT5iaW5kQnVmZmVyKHRhcmdldCwgdmJv
KTsKKyAgICBjb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgZGF0YSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKKyAgICB2Ym9zLmFkZChkYXRhLCB2Ym8pOworICAgIHJl
dHVybiB2Ym87Cit9CisKK1RleHR1cmVNYXBwZXJHTERhdGE6On5UZXh0dXJlTWFwcGVyR0xEYXRh
KCkKK3sKKyAgICBIYXNoTWFwPGNvbnN0IHZvaWQqLCBQbGF0Zm9ybTNET2JqZWN0Pjo6aXRlcmF0
b3IgZW5kID0gdmJvcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hNYXA8Y29uc3Qgdm9pZCosIFBsYXRm
b3JtM0RPYmplY3Q+OjppdGVyYXRvciBpdCA9IHZib3MuYmVnaW4oKTsgaXQgIT0gdmJvcy5lbmQo
KTsgKytpdCkKKyAgICAgICAgY29udGV4dC0+ZGVsZXRlQnVmZmVyKGl0LT52YWx1ZSk7Cit9CisK
IHZvaWQgVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2s6OmluaXQoY29uc3QgSW50UmVjdCYgcmVj
dCkKIHsKICAgICBjbGlwU3RhY2suY2xlYXIoKTsKQEAgLTI2OSw0MiArMjkzLDYgQEAgdm9pZCBU
ZXh0dXJlTWFwcGVyR0w6OmVuZFBhaW50aW5nKCkKICNlbmRpZgogfQogCi12b2lkIFRleHR1cmVN
YXBwZXJHTDo6ZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmIHF1YWRUb0RyYXcsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtKiBzaGFkZXJQcm9ncmFtLCBHQzNEZW51bSBkcmF3aW5nTW9kZSwgRmxhZ3MgZmxhZ3MpCi17
Ci0gICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0t
PnZlcnRleExvY2F0aW9uKCkpOwotICAgIG1fY29udGV4dDNELT5iaW5kQnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDApOwotCi0gICAgY29uc3QgR0MzRGZsb2F0IHF1YWRb
XSA9IHsKLSAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAx
KCkueCgpLCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDEoKS55KCks
Ci0gICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMigpLngo
KSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAyKCkueSgpLAotICAg
ICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDMoKS54KCksIHF1
YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMygpLnkoKSwKLSAgICAgICAg
cXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnA0KCkueCgpLCBxdWFkVG9E
cmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDQoKS55KCkKLSAgICB9OwotICAgIG1f
Y29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlclByb2dyYW0tPnZlcnRleExvY2F0
aW9uKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIo
cXVhZCkpOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRp
b25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpLm11bHRpcGx5KG1vZGVsVmlld01hdHJp
eCkubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgoCi0gICAgICAgICAgICBxdWFkVG9EcmF3
Lm9yaWdpbmFsVGFyZ2V0UmVjdC53aWR0aCgpLCAwLCAwLCAwLAotICAgICAgICAgICAgMCwgcXVh
ZFRvRHJhdy5vcmlnaW5hbFRhcmdldFJlY3QuaGVpZ2h0KCksIDAsIDAsCi0gICAgICAgICAgICAw
LCAwLCAxLCAwLAotICAgICAgICAgICAgcXVhZFRvRHJhdy5vcmlnaW5hbFRhcmdldFJlY3QueCgp
LCBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFyZ2V0UmVjdC55KCksIDAsIDEpKTsKLSAgICBHQzNEZmxv
YXQgbTRbXSA9IHsKLSAgICAgICAgbWF0cml4Lm0xMSgpLCBtYXRyaXgubTEyKCksIG1hdHJpeC5t
MTMoKSwgbWF0cml4Lm0xNCgpLAotICAgICAgICBtYXRyaXgubTIxKCksIG1hdHJpeC5tMjIoKSwg
bWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCi0gICAgICAgIG1hdHJpeC5tMzEoKSwgbWF0cml4
Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQoKSwKLSAgICAgICAgbWF0cml4Lm00MSgp
LCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0cml4Lm00NCgpCi0gICAgfTsKLSAgICBt
X2NvbnRleHQzRC0+dW5pZm9ybU1hdHJpeDRmdihzaGFkZXJQcm9ncmFtLT5tYXRyaXhMb2NhdGlv
bigpLCAxLCBmYWxzZSwgbTQpOwotCi0gICAgaWYgKGZsYWdzICYgU2hvdWxkQmxlbmQpIHsKLSAg
ICAgICAgbV9jb250ZXh0M0QtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FLCBHcmFw
aGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7Ci0gICAgICAgIG1fY29udGV4dDNE
LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
bV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLQotICAgIG1f
Y29udGV4dDNELT5kcmF3QXJyYXlzKGRyYXdpbmdNb2RlLCAwLCA0KTsKLSAgICBtX2NvbnRleHQz
RC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZlcnRleExvY2F0aW9u
KCkpOwotfQotCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcihjb25zdCBDb2xvciYg
Y29sb3IsIGZsb2F0IHdpZHRoLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgpCiB7CiAgICAgaWYgKGNsaXBTdGFj
aygpLmN1cnJlbnQoKS5zY2lzc29yQm94LmlzRW1wdHkoKSkKQEAgLTMxOCw3ICszMDYsNyBAQCB2
b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcihjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0
IHdpZHRoLCBjb25zdCBGbG9hdFJlYwogICAgIG1fY29udGV4dDNELT51bmlmb3JtNGYocHJvZ3Jh
bS0+Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICBtX2NvbnRleHQzRC0+bGluZVdp
ZHRoKHdpZHRoKTsKIAotICAgIGRyYXdRdWFkKHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwg
cHJvZ3JhbS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9PUCwgY29sb3IuaGFzQWxw
aGEoKSA/IFNob3VsZEJsZW5kIDogMCk7CisgICAgZHJhdyh0YXJnZXRSZWN0LCBtb2RlbFZpZXdN
YXRyaXgsIHByb2dyYW0uZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1AsIGNvbG9y
Lmhhc0FscGhhKCkgPyBTaG91bGRCbGVuZCA6IDApOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJH
TDo6ZHJhd1JlcGFpbnRDb3VudGVyKGludCB2YWx1ZSwgaW50IHBvaW50U2l6ZSwgY29uc3QgRmxv
YXRQb2ludCYgdGFyZ2V0UG9pbnQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZp
ZXdNYXRyaXgpCkBAIC00MDYsMTAgKzM5NCw5IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3
VGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJCiB7
CiAgICAgYm9vbCB1c2VSZWN0ID0gZmxhZ3MgJiBTaG91bGRVc2VBUkJUZXh0dXJlUmVjdDsKICAg
ICBib29sIG1hc2tlZCA9ICEhbWFza1RleHR1cmU7Ci0gICAgYm9vbCBuZWVkc0FudGlhbGlhc2lu
ZyA9IG1fZW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nICYmICFtb2RlbFZpZXdNYXRyaXgu
aXNJbnRlZ2VyVHJhbnNsYXRpb24oKTsKLQotICAgIGlmICghdXNlUmVjdCAmJiBuZWVkc0FudGlh
bGlhc2luZyAmJiBkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodGV4dHVyZSwgZmxhZ3MsIHRl
eHR1cmVTaXplLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIG1hc2tUZXh0
dXJlLCBleHBvc2VkRWRnZXMpKQotICAgICAgICByZXR1cm47CisgICAgYm9vbCB1c2VBbnRpYWxp
YXNpbmcgPSBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZworICAgICAgICAmJiBleHBv
c2VkRWRnZXMgPT0gQWxsRWRnZXMKKyAgICAgICAgJiYgIW1vZGVsVmlld01hdHJpeC5tYXBRdWFk
KHRhcmdldFJlY3QpLmlzUmVjdGlsaW5lYXIoKTsKIAogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyOjpPcHRpb25zIG9wdGlvbnMgPSBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4
dHVyZTsKICAgICBpZiAobWFza2VkKQpAQCAtNDE4LDE2MyArNDA1LDk2IEBAIHZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpkcmF3VGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEZsYWdzIGZs
YWdzLCBjb25zdCBJCiAgICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6OlJlY3Q7CiAgICAgaWYgKG9wYWNpdHkgPCAxKQogICAgICAgICBvcHRpb25zIHw9IFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5OworICAgIGlmICh1c2VBbnRpYWxpYXNpbmcp
IHsKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QW50aWFs
aWFzOworICAgICAgICBmbGFncyB8PSBTaG91bGRBbnRpYWxpYXM7CisgICAgfQorCisgICAgaWYg
KG1hc2tlZCB8fCB1c2VBbnRpYWxpYXNpbmcgfHwgb3BhY2l0eSA8IDEpCisgICAgICAgIGZsYWdz
IHw9IFNob3VsZEJsZW5kOwogCiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
PiBwcm9ncmFtOwogICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsKLSAgICBtX2NvbnRl
eHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7Ci0KICAgICBkcmF3VGV4dHVy
ZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgdGV4dHVyZSwgZmxhZ3MsIHRleHR1cmVT
aXplLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIG1hc2tUZXh0dXJlKTsK
IH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgY29uc3QgQ29sb3Im
IGNvbG9yKQogewotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3Jh
bSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRT
aGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTb2xpZENvbG9yKTsKKyAg
ICBGbGFncyBmbGFncyA9IDA7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlv
bnMgb3B0aW9ucyA9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTb2xpZENvbG9yOworICAg
IGlmICghbWF0cml4Lm1hcFF1YWQocmVjdCkuaXNSZWN0aWxpbmVhcigpKSB7CisgICAgICAgIG9w
dGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkFudGlhbGlhczsKKyAgICAgICAg
ZmxhZ3MgfD0gU2hvdWxkQmxlbmQgfCBTaG91bGRBbnRpYWxpYXM7CisgICAgfQorCisgICAgUmVm
UHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdM
RGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0ob3B0aW9u
cyk7CiAgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwog
CiAgICAgZmxvYXQgciwgZywgYiwgYTsKICAgICBjb2xvci5nZXRSR0JBKHIsIGcsIGIsIGEpOwog
ICAgIG1fY29udGV4dDNELT51bmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLCByLCBn
LCBiLCBhKTsKKyAgICBpZiAoYSA8IDEpCisgICAgICAgIGZsYWdzIHw9IFNob3VsZEJsZW5kOwog
Ci0gICAgZHJhd1F1YWQocmVjdCwgbWF0cml4LCBwcm9ncmFtLmdldCgpLCBHcmFwaGljc0NvbnRl
eHQzRDo6VFJJQU5HTEVfRkFOLCBhIDwgMSA/IFNob3VsZEJsZW5kIDogMCk7Ci19Ci0KLXN0YXRp
YyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2aWV3cG9ydE1hdHJpeChHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dDNEKQotewotICAgIEdDM0RpbnQgdmlld3BvcnRbNF07Ci0gICAgY29udGV4dDNELT5n
ZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQsIHZpZXdwb3J0KTsKLQotICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKLSAgICBtYXRyaXgudHJhbnNsYXRlM2Qodmll
d3BvcnRbMF0sIHZpZXdwb3J0WzFdLCAwKTsKLSAgICBtYXRyaXguc2NhbGUzZCh2aWV3cG9ydFsy
XSwgdmlld3BvcnRbM10sIDApOwotCi0gICAgLy8gTWFwIHgsIHkgYW5kIHogdG8gdW5pdCBzcXVh
cmUgZnJvbSBPcGVuR0wgbm9ybWFsaXplZCBkZXZpY2UKLSAgICAvLyBjb29yZGluYXRlcyB3aGlj
aCBhcmUgLTEgdG8gMSBvbiBldmVyeSBheGlzLgotICAgIG1hdHJpeC50cmFuc2xhdGUzZCgwLjUs
IDAuNSwgMC41KTsKLSAgICBtYXRyaXguc2NhbGUzZCgwLjUsIDAuNSwgMC41KTsKLQotICAgIHJl
dHVybiBtYXRyaXg7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjYWxlTGluZUVxdWF0aW9uQ29lZmZlY2ll
bnRzVG9PcHRpbWl6ZURpc3RhbmNlQ2FsY3VsYXRpb24oZmxvYXQqIGNvZWZmZWNpZW50cykKLXsK
LSAgICAvLyBJbiB0aGUgZnJhZ21lbnQgc2hhZGVyIHdlIHdhbnQgdG8gY2FsY3VsYXRlIHRoZSBk
aXN0YW5jZSBmcm9tIHRoaXMKLSAgICAvLyBsaW5lIHRvIGEgcG9pbnQgKHApLCB3aGljaCBpcyBn
aXZlbiBieSB0aGUgZm9ybXVsYToKLSAgICAvLyAoQSpwLnggKyBCKnAueSArIEMpIC8gc3FydCAo
YV4yICsgYl4yKQotICAgIC8vIFdlIGNhbiBkbyBhIHNtYWxsIGFtb3VudCBvZiBwcmVjYWxjdWxh
dGlvbiBoZXJlIHRvIHJlZHVjZSB0aGUKLSAgICAvLyBhbW91bnQgb2YgbWF0aCBpbiB0aGUgc2hh
ZGVyIGJ5IHNjYWxpbmcgdGhlIGNvZWZmZWNpZW50cyBub3cuCi0gICAgZmxvYXQgc2NhbGUgPSAx
LjAgLyBGbG9hdFBvaW50KGNvZWZmZWNpZW50c1swXSwgY29lZmZlY2llbnRzWzFdKS5sZW5ndGgo
KTsKLSAgICBjb2VmZmVjaWVudHNbMF0gPSBjb2VmZmVjaWVudHNbMF0gKiBzY2FsZTsKLSAgICBj
b2VmZmVjaWVudHNbMV0gPSBjb2VmZmVjaWVudHNbMV0gKiBzY2FsZTsKLSAgICBjb2VmZmVjaWVu
dHNbMl0gPSBjb2VmZmVjaWVudHNbMl0gKiBzY2FsZTsKLX0KLQotc3RhdGljIHZvaWQgZ2V0U3Rh
bmRhcmRFcXVhdGlvbkNvZWZmZWNpZW50c0ZvckxpbmUoY29uc3QgRmxvYXRQb2ludCYgcDEsIGNv
bnN0IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCogY29lZmZlY2llbnRzKQotewotICAgIC8vIEdpdmVu
IHR3byBwb2ludHMsIHRoZSBzdGFuZGFyZCBlcXVhdGlvbiBvZiBhIGxpbmUgKEF4ICsgQnkgKyBD
ID0gMCkKLSAgICAvLyBjYW4gYmUgY2FsY3VsYXRlZCB2aWEgdGhlIGZvcm11bGE6Ci0gICAgLy8g
KHAxLnkg4oCTIHAyLnkpeCArIChwMS54IOKAkyBwMi54KXkgKyAoKHAxLngqcDIueSkg4oCTIChw
Mi54KnAxLnkpKSA9IDAKLSAgICBjb2VmZmVjaWVudHNbMF0gPSBwMS55KCkgLSBwMi55KCk7Ci0g
ICAgY29lZmZlY2llbnRzWzFdID0gcDIueCgpIC0gcDEueCgpOwotICAgIGNvZWZmZWNpZW50c1sy
XSA9IHAxLngoKSAqIHAyLnkoKSAtIHAyLngoKSAqIHAxLnkoKTsKLSAgICBzY2FsZUxpbmVFcXVh
dGlvbkNvZWZmZWNpZW50c1RvT3B0aW1pemVEaXN0YW5jZUNhbGN1bGF0aW9uKGNvZWZmZWNpZW50
cyk7CisgICAgZHJhdyhyZWN0LCBtYXRyaXgsIHByb2dyYW0uZ2V0KCksIEdyYXBoaWNzQ29udGV4
dDNEOjpUUklBTkdMRV9GQU4sIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgcXVhZFRvRWRnZUFy
cmF5KGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgZmxvYXQqIGVkZ2VBcnJheSkKK3ZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpkcmF3RWRnZVRyaWFuZ2xlcyhUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSog
cHJvZ3JhbSkKIHsKLSAgICBpZiAocXVhZC5pc0NvdW50ZXJjbG9ja3dpc2UoKSkgewotICAgICAg
ICBnZXRTdGFuZGFyZEVxdWF0aW9uQ29lZmZlY2llbnRzRm9yTGluZShxdWFkLnA0KCksIHF1YWQu
cDMoKSwgZWRnZUFycmF5KTsKLSAgICAgICAgZ2V0U3RhbmRhcmRFcXVhdGlvbkNvZWZmZWNpZW50
c0ZvckxpbmUocXVhZC5wMygpLCBxdWFkLnAyKCksIGVkZ2VBcnJheSArIDMpOwotICAgICAgICBn
ZXRTdGFuZGFyZEVxdWF0aW9uQ29lZmZlY2llbnRzRm9yTGluZShxdWFkLnAyKCksIHF1YWQucDEo
KSwgZWRnZUFycmF5ICsgNik7Ci0gICAgICAgIGdldFN0YW5kYXJkRXF1YXRpb25Db2VmZmVjaWVu
dHNGb3JMaW5lKHF1YWQucDEoKSwgcXVhZC5wNCgpLCBlZGdlQXJyYXkgKyA5KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBnZXRTdGFuZGFyZEVxdWF0aW9uQ29lZmZlY2llbnRzRm9yTGlu
ZShxdWFkLnA0KCksIHF1YWQucDEoKSwgZWRnZUFycmF5KTsKLSAgICBnZXRTdGFuZGFyZEVxdWF0
aW9uQ29lZmZlY2llbnRzRm9yTGluZShxdWFkLnAxKCksIHF1YWQucDIoKSwgZWRnZUFycmF5ICsg
Myk7Ci0gICAgZ2V0U3RhbmRhcmRFcXVhdGlvbkNvZWZmZWNpZW50c0ZvckxpbmUocXVhZC5wMigp
LCBxdWFkLnAzKCksIGVkZ2VBcnJheSArIDYpOwotICAgIGdldFN0YW5kYXJkRXF1YXRpb25Db2Vm
ZmVjaWVudHNGb3JMaW5lKHF1YWQucDMoKSwgcXVhZC5wNCgpLCBlZGdlQXJyYXkgKyA5KTsKKyAg
ICBjb25zdCBHQzNEZmxvYXQgTGVmdCA9IDA7CisgICAgY29uc3QgR0MzRGZsb2F0IFRvcCA9IDA7
CisgICAgY29uc3QgR0MzRGZsb2F0IFJpZ2h0ID0gMTsKKyAgICBjb25zdCBHQzNEZmxvYXQgQm90
dG9tID0gMTsKKyAgICBjb25zdCBHQzNEZmxvYXQgQ2VudGVyID0gMC41OworI2RlZmluZSBTSURF
X1RSSUFOR0xFKHgxLCB5MSwgeDIsIHkyKSB4MSwgeTEsIHgxLCB5MSwgeDIsIHkyLCB4MiwgeTIs
IENlbnRlciwgQ2VudGVyLCAoeDEgKyB4MikgLyAyLCAoeTEgKyB5MikgLyAyCisgICAgc3RhdGlj
IGNvbnN0IEdDM0RmbG9hdCB1bml0UmVjdFNpZGVUcmlhbmdsZXNbXSA9IHsKKyAgICAgICAgU0lE
RV9UUklBTkdMRShMZWZ0LCBUb3AsIFJpZ2h0LCBUb3ApLAorICAgICAgICBTSURFX1RSSUFOR0xF
KExlZnQsIFRvcCwgTGVmdCwgQm90dG9tKSwKKyAgICAgICAgU0lERV9UUklBTkdMRShSaWdodCwg
VG9wLCBSaWdodCwgQm90dG9tKSwKKyAgICAgICAgU0lERV9UUklBTkdMRShMZWZ0LCBCb3R0b20s
IFJpZ2h0LCBCb3R0b20pCisgICAgfTsKKyN1bmRlZiBTSURFX1RSSUFOR0xFCisgICAgUGxhdGZv
cm0zRE9iamVjdCB2Ym8gPSBkYXRhKCkuZ2V0U3RhdGljVkJPKEdyYXBoaWNzQ29udGV4dDNEOjpB
UlJBWV9CVUZGRVIsIHNpemVvZihHQzNEZmxvYXQpICogNDgsIHVuaXRSZWN0U2lkZVRyaWFuZ2xl
cyk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZ
X0JVRkZFUiwgdmJvKTsKKyAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9n
cmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNl
LCAwLCAwKTsKKyAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6
VFJJQU5HTEVTLCAwLCAxMik7CiB9CiAKLXN0YXRpYyBGbG9hdFNpemUgc2NhbGVkVmVjdG9yRGlm
ZmVyZW5jZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
MiwgZmxvYXQgc2NhbGUpCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1VuaXRSZWN0KFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCBHQzNEZW51bSBkcmF3aW5nTW9kZSkKIHsK
LSAgICBGbG9hdFNpemUgdmVjdG9yID0gcG9pbnQxIC0gcG9pbnQyOwotICAgIGlmICh2ZWN0b3Iu
ZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkpCi0gICAgICAgIHZlY3Rvci5zY2FsZSgxLjAgLyB2ZWN0
b3IuZGlhZ29uYWxMZW5ndGgoKSk7Ci0KLSAgICB2ZWN0b3Iuc2NhbGUoc2NhbGUpOwotICAgIHJl
dHVybiB2ZWN0b3I7CisgICAgc3RhdGljIGNvbnN0IEdDM0RmbG9hdCB1bml0UmVjdFtdID0geyAw
LCAwLCAxLCAwLCAxLCAxLCAwLCAxIH07CisgICAgUGxhdGZvcm0zRE9iamVjdCB2Ym8gPSBkYXRh
KCkuZ2V0U3RhdGljVkJPKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHNpemVvZihH
QzNEZmxvYXQpICogOCwgdW5pdFJlY3QpOworICAgIG1fY29udGV4dDNELT5iaW5kQnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHZibyk7CisgICAgbV9jb250ZXh0M0QtPnZl
cnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSwgMiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJh
eXMoZHJhd2luZ01vZGUsIDAsIDQpOwogfQogCi1zdGF0aWMgRmxvYXRRdWFkIGluZmxhdGVRdWFk
KGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgZmxvYXQgZGlzdGFuY2UpCit2b2lkIFRleHR1cmVNYXBw
ZXJHTDo6ZHJhdyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBzaGFkZXJQ
cm9ncmFtLCBHQzNEZW51bSBkcmF3aW5nTW9kZSwgRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgRmxvYXRR
dWFkIGV4cGFuZGVkUXVhZCA9IHF1YWQ7Ci0gICAgZXhwYW5kZWRRdWFkLnNldFAxKGV4cGFuZGVk
UXVhZC5wMSgpICsgc2NhbGVkVmVjdG9yRGlmZmVyZW5jZShxdWFkLnAxKCksIHF1YWQucDIoKSwg
ZGlzdGFuY2UpKTsKLSAgICBleHBhbmRlZFF1YWQuc2V0UDQoZXhwYW5kZWRRdWFkLnA0KCkgKyBz
Y2FsZWRWZWN0b3JEaWZmZXJlbmNlKHF1YWQucDQoKSwgcXVhZC5wMygpLCBkaXN0YW5jZSkpOwor
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9CisgICAgICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4KG1vZGVsVmlld01hdHJpeCkKKyAgICAgICAgICAgIC5tdWx0aXBseShUcmFuc2Zvcm1h
dGlvbk1hdHJpeDo6cmVjdFRvUmVjdChGbG9hdFJlY3QoMCwgMCwgMSwgMSksIHJlY3QpKTsKIAot
ICAgIGV4cGFuZGVkUXVhZC5zZXRQMShleHBhbmRlZFF1YWQucDEoKSArIHNjYWxlZFZlY3RvckRp
ZmZlcmVuY2UocXVhZC5wMSgpLCBxdWFkLnA0KCksIGRpc3RhbmNlKSk7Ci0gICAgZXhwYW5kZWRR
dWFkLnNldFAyKGV4cGFuZGVkUXVhZC5wMigpICsgc2NhbGVkVmVjdG9yRGlmZmVyZW5jZShxdWFk
LnAyKCksIHF1YWQucDMoKSwgZGlzdGFuY2UpKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7CisgICAgc2hh
ZGVyUHJvZ3JhbS0+c2V0TWF0cml4KHNoYWRlclByb2dyYW0tPm1vZGVsVmlld01hdHJpeExvY2F0
aW9uKCksIG1hdHJpeCk7CisgICAgc2hhZGVyUHJvZ3JhbS0+c2V0TWF0cml4KHNoYWRlclByb2dy
YW0tPnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpLCBkYXRhKCkucHJvamVjdGlvbk1hdHJpeCk7
CiAKLSAgICBleHBhbmRlZFF1YWQuc2V0UDIoZXhwYW5kZWRRdWFkLnAyKCkgKyBzY2FsZWRWZWN0
b3JEaWZmZXJlbmNlKHF1YWQucDIoKSwgcXVhZC5wMSgpLCBkaXN0YW5jZSkpOwotICAgIGV4cGFu
ZGVkUXVhZC5zZXRQMyhleHBhbmRlZFF1YWQucDMoKSArIHNjYWxlZFZlY3RvckRpZmZlcmVuY2Uo
cXVhZC5wMygpLCBxdWFkLnA0KCksIGRpc3RhbmNlKSk7CisgICAgaWYgKGZsYWdzICYgU2hvdWxk
QmxlbmQpIHsKKyAgICAgICAgbV9jb250ZXh0M0QtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQz
RDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7CisgICAgICAg
IG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5E
KTsKIAotICAgIGV4cGFuZGVkUXVhZC5zZXRQMyhleHBhbmRlZFF1YWQucDMoKSArIHNjYWxlZFZl
Y3RvckRpZmZlcmVuY2UocXVhZC5wMygpLCBxdWFkLnAyKCksIGRpc3RhbmNlKSk7Ci0gICAgZXhw
YW5kZWRRdWFkLnNldFA0KGV4cGFuZGVkUXVhZC5wNCgpICsgc2NhbGVkVmVjdG9yRGlmZmVyZW5j
ZShxdWFkLnA0KCksIHF1YWQucDEoKSwgZGlzdGFuY2UpKTsKKyAgICBpZiAoZmxhZ3MgJiBTaG91
bGRBbnRpYWxpYXMpCisgICAgICAgIGRyYXdFZGdlVHJpYW5nbGVzKHNoYWRlclByb2dyYW0pOwor
ICAgIGVsc2UKKyAgICAgICAgZHJhd1VuaXRSZWN0KHNoYWRlclByb2dyYW0sIGRyYXdpbmdNb2Rl
KTsKIAotICAgIHJldHVybiBleHBhbmRlZFF1YWQ7CisgICAgbV9jb250ZXh0M0QtPmRpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKIH0KLQot
Ym9vbCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJf
dCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBvcmlnaW5hbFRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2Rl
bFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0
dXJlLCB1bnNpZ25lZCBleHBvc2VkRWRnZXMpCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1Rl
eHR1cmVkUXVhZFdpdGhQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFt
LCB1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3
TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkK
IHsKLSAgICAvLyBUaGUgYW50aWFsaWFzaW5nIHBhdGggZG9lcyBub3Qgc3VwcG9ydCBtYXNrIHRl
eHR1cmVzIGF0IHRoZSBtb21lbnQuCi0gICAgaWYgKG1hc2tUZXh0dXJlKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAvLyBGb3Igbm93IHdlIHB1bnQgb24gcmVuZGVyaW5nIHRpbGVkIGxh
eWVycyB3aXRoIGFudGlhbGlhc2luZy4gSXQncyBxdWl0ZSBoYXJkCi0gICAgLy8gdG8gcmVuZGVy
IHRoZW0gd2l0aG91dCBzZWFtcy4KLSAgICBpZiAoZXhwb3NlZEVkZ2VzICE9IEFsbEVkZ2VzKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBUaGUgZ29hbCBoZXJlIGlzIHJlbmRlciBh
IHNsaWdodGx5IGxhcmdlciAoMC43NSBwaXhlbHMgaW4gc2NyZWVuIHNwYWNlKSBxdWFkIGFuZCB0
bwotICAgIC8vIGdyYWR1YWxseSB0YXBlciBvZmYgdGhlIGFscGhhIHZhbHVlcyB0byBkbyBhIHNp
bXBsZSB2ZXJzaW9uIG9mIGVkZ2UgZGlzdGFuY2UKLSAgICAvLyBhbnRpYWxpYXNpbmcuIE5vdGUg
aGVyZSB0aGF0IHdlIGFyZSBhbHNvIGluY2x1ZGluZyB0aGUgdmlld3BvcnQgbWF0cml4ICh3aGlj
aAotICAgIC8vIHRyYW5zbGF0ZXMgZnJvbSBub3JtYWxpemVkIGRldmljZSBjb29yZGluYXRlcyB0
byBzY3JlZW4gY29vcmRpbmF0ZXMpLCBiZWNhdXNlIHRoZXNlCi0gICAgLy8gdmFsdWVzIGFyZSBj
b25zdW1lZCBpbiB0aGUgZnJhZ21lbnQgc2hhZGVyLCB3aGljaCB3b3JrcyBpbiBzY3JlZW4gY29v
cmRpbmF0ZXMuCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2NyZWVuU3BhY2VUcmFuc2Zvcm0g
PSB2aWV3cG9ydE1hdHJpeChtX2NvbnRleHQzRC5nZXQoKSkubXVsdGlwbHkoVHJhbnNmb3JtYXRp
b25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpKS5tdWx0aXBseShtb2RlbFZpZXdNYXRy
aXgpLnRvMmRUcmFuc2Zvcm0oKTsKLSAgICBpZiAoIXNjcmVlblNwYWNlVHJhbnNmb3JtLmlzSW52
ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRmxvYXRRdWFkIHF1YWRJblNj
cmVlblNwYWNlID0gc2NyZWVuU3BhY2VUcmFuc2Zvcm0ubWFwUXVhZChvcmlnaW5hbFRhcmdldFJl
Y3QpOwotCi0gICAgY29uc3QgZmxvYXQgaW5mbGF0aW9uRGlzdGFuY2UgPSAwLjc1OwotICAgIEZs
b2F0UXVhZCBleHBhbmRlZFF1YWRJblNjcmVlblNwYWNlID0gaW5mbGF0ZVF1YWQocXVhZEluU2Ny
ZWVuU3BhY2UsIGluZmxhdGlvbkRpc3RhbmNlKTsKLQotICAgIC8vIEluIHRoZSBub24tYW50aWFs
aWFzZWQgY2FzZSB0aGUgdmVydGljZXMgcGFzc2VkIGFyZSB0aGUgdW5pdCByZWN0YW5nbGUgYW5k
IGRvdWJsZQotICAgIC8vIGFzIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzICgwLDAgMSwwLCAxLDEg
YW5kIDAsMSkuIEhlcmUgd2UgbWFwIHRoZSBleHBhbmRlZCBxdWFkCi0gICAgLy8gY29vcmRpbmF0
ZXMgaW4gc2NyZWVuIHNwYWNlIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHJlY3QncyB0ZXh0dXJlIGNv
b3JkaW5hdGVzLgotICAgIC8vIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2Ygc2xpZ2h0bHkgaW5jcmVh
c2luZyB0aGUgc2l6ZSBvZiB0aGUgb3JpZ2luYWwgcXVhZCdzIGdlb21ldHJ5Ci0gICAgLy8gaW4g
dGhlIHZlcnRleCBzaGFkZXIuCi0gICAgRmxvYXRRdWFkIGV4cGFuZGVkUXVhZEluVGV4dHVyZUNv
b3JkaW5hdGVzID0gc2NyZWVuU3BhY2VUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFF1YWQoZXhwYW5k
ZWRRdWFkSW5TY3JlZW5TcGFjZSk7Ci0gICAgZXhwYW5kZWRRdWFkSW5UZXh0dXJlQ29vcmRpbmF0
ZXMubW92ZSgtb3JpZ2luYWxUYXJnZXRSZWN0LngoKSwgLW9yaWdpbmFsVGFyZ2V0UmVjdC55KCkp
OwotICAgIGV4cGFuZGVkUXVhZEluVGV4dHVyZUNvb3JkaW5hdGVzLnNjYWxlKDEgLyBvcmlnaW5h
bFRhcmdldFJlY3Qud2lkdGgoKSwgMSAvIG9yaWdpbmFsVGFyZ2V0UmVjdC5oZWlnaHQoKSk7Ci0K
LSAgICAvLyBXZSBwcmVwYXJlIGJvdGggdGhlIGV4cGFuZGVkIHF1YWQgZm9yIHRoZSBmcmFnbWVu
dCBzaGFkZXIgYXMgd2VsbCBhcyB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcKLSAgICAvLyBib3gg
b2YgdGhhdCBxdWFkLCBhcyB0aGF0IHNlZW1zIG5lY2Vzc2FyeSB0byBwcm9wZXJseSBhbnRpYWxp
YXMgYmFja2ZhY2luZyBxdWFkcy4KLSAgICBmbG9hdCB0YXJnZXRRdWFkRWRnZXNbMjRdOwotICAg
IHF1YWRUb0VkZ2VBcnJheShleHBhbmRlZFF1YWRJblNjcmVlblNwYWNlLCB0YXJnZXRRdWFkRWRn
ZXMpOwotICAgIHF1YWRUb0VkZ2VBcnJheShpbmZsYXRlUXVhZChxdWFkSW5TY3JlZW5TcGFjZS5i
b3VuZGluZ0JveCgpLCAgaW5mbGF0aW9uRGlzdGFuY2UpLCB0YXJnZXRRdWFkRWRnZXMgKyAxMik7
Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlvbnMgb3B0aW9ucyA9IFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpBbnRpYWxpYXMgfCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6VGV4dHVyZTsKLSAgICBpZiAob3BhY2l0eSA8IDEpCi0gICAgICAgIG9wdGlvbnMgfD0g
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wYWNpdHk7Ci0KLSAgICBSZWZQdHI8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsKICAgICBt
X2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7Ci0gICAgbV9jb250
ZXh0M0QtPnVuaWZvcm0zZnYocHJvZ3JhbS0+ZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNl
TG9jYXRpb24oKSwgOCwgdGFyZ2V0UXVhZEVkZ2VzKTsKLQotICAgIGRyYXdUZXh0dXJlZFF1YWRX
aXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCB0ZXh0dXJlLCBmbGFncywgc2l6ZSwgRHJhd1F1YWQo
b3JpZ2luYWxUYXJnZXRSZWN0LCBleHBhbmRlZFF1YWRJblRleHR1cmVDb29yZGluYXRlcyksIG1v
ZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgMCAvKiBtYXNrVGV4dHVyZSAqLyk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZWRRdWFkV2l0aFBy
b2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qIHByb2dyYW0sIHVpbnQzMl90IHRleHR1
cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBEcmF3UXVhZCYgcXVh
ZFRvRHJhdywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxv
YXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCi17Ci0gICAgbV9j
b250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleExvY2F0aW9u
KCkpOwogICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFMCk7CiAgICAgR0MzRGVudW0gdGFyZ2V0ID0gZmxhZ3MgJiBTaG91bGRVc2VBUkJUZXh0
dXJlUmVjdCA/IEdDM0RlbnVtKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCKSA6
IEdDM0RlbnVtKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKTsKICAgICBtX2NvbnRleHQz
RC0+YmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKQEAgLTU5Niw3ICs1MTYsNyBAQCB2b2lk
IFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtKiBwcgogICAgIGlmIChvcGFjaXR5IDwgMSB8fCBtYXNrVGV4dHVyZSkK
ICAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CiAKLSAgICBkcmF3UXVhZChxdWFkVG9EcmF3
LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9G
QU4sIGZsYWdzKTsKKyAgICBkcmF3KHJlY3QsIG1vZGVsVmlld01hdHJpeCwgcHJvZ3JhbSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgZmxhZ3MpOwogfQogCiBCaXRtYXBUZXh0dXJl
R0w6OkJpdG1hcFRleHR1cmVHTChUZXh0dXJlTWFwcGVyR0wqIHRleHR1cmVNYXBwZXIpCkBAIC0x
MTcwLDI2ICsxMDkwLDExIEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uCiAgICAgY29uc3QgR0Mz
RGZsb2F0IHVuaXRSZWN0W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07CiAgICAgbV9jb250
ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSwgMiwg
R3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cih1bml0UmVjdCkp
OwogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRy
aXgoZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpCi0gICAgICAgICAgICAubXVsdGlwbHkobW9kZWxW
aWV3TWF0cml4KQotICAgICAgICAgICAgLm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4KHRh
cmdldFJlY3Qud2lkdGgoKSwgMCwgMCwgMCwKLSAgICAgICAgICAgICAgICAwLCB0YXJnZXRSZWN0
LmhlaWdodCgpLCAwLCAwLAotICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCi0gICAgICAgICAg
ICAgICAgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCAwLCAxKSk7Ci0KLSAgICBjb25z
dCBHQzNEZmxvYXQgbTRbXSA9IHsKLSAgICAgICAgbWF0cml4Lm0xMSgpLCBtYXRyaXgubTEyKCks
IG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAotICAgICAgICBtYXRyaXgubTIxKCksIG1hdHJp
eC5tMjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCi0gICAgICAgIG1hdHJpeC5tMzEo
KSwgbWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQoKSwKLSAgICAgICAgbWF0
cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0cml4Lm00NCgpCi0gICAg
fTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPQorICAgICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeChtb2RlbFZpZXdNYXRyaXgpCisgICAgICAgICAgICAubXVsdGlwbHkoVHJhbnNm
b3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoRmxvYXRSZWN0KDAsIDAsIDEsIDEpLCB0YXJnZXRS
ZWN0KSk7CiAKLSAgICBjb25zdCBHQzNEZmxvYXQgbTRhbGxbXSA9IHsKLSAgICAgICAgMiwgMCwg
MCwgMCwKLSAgICAgICAgMCwgMiwgMCwgMCwKLSAgICAgICAgMCwgMCwgMSwgMCwKLSAgICAgICAg
LTEsIC0xLCAwLCAxCi0gICAgfTsKKyAgICBzdGF0aWMgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXggZnVsbFByb2plY3Rpb25NYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVj
dChGbG9hdFJlY3QoMCwgMCwgMSwgMSksIEZsb2F0UmVjdCgtMSwgLTEsIDIsIDIpKTsKIAogICAg
IGludCYgc3RlbmNpbEluZGV4ID0gY2xpcFN0YWNrKCkuY3VycmVudCgpLnN0ZW5jaWxJbmRleDsK
IApAQCAtMTIwMiwxMyArMTEwNywxNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlw
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgogICAgIG1f
Y29udGV4dDNELT5zdGVuY2lsTWFzaygweGZmICYgfihzdGVuY2lsSW5kZXggLSAxKSk7CiAKICAg
ICAvLyBGaXJzdCBjbGVhciB0aGUgZW50aXJlIGJ1ZmZlciBhdCB0aGUgY3VycmVudCBpbmRleC4K
LSAgICBtX2NvbnRleHQzRC0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT5tYXRyaXhMb2NhdGlv
bigpLCAxLCBmYWxzZSwgY29uc3RfY2FzdDxHQzNEZmxvYXQqPihtNGFsbCkpOworICAgIHByb2dy
YW0tPnNldE1hdHJpeChwcm9ncmFtLT5wcm9qZWN0aW9uTWF0cml4TG9jYXRpb24oKSwgZnVsbFBy
b2plY3Rpb25NYXRyaXgpOworICAgIHByb2dyYW0tPnNldE1hdHJpeChwcm9ncmFtLT5tb2RlbFZp
ZXdNYXRyaXhMb2NhdGlvbigpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKICAgICBtX2NvbnRl
eHQzRC0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQz
RDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8pOwogICAgIG1fY29udGV4dDNELT5kcmF3
QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIDAsIDQpOwogCiAgICAgLy8g
Tm93IGFwcGx5IHRoZSBjdXJyZW50IGluZGV4IHRvIHRoZSBuZXcgcXVhZC4KICAgICBtX2NvbnRl
eHQzRC0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpSRVBMQUNFLCBHcmFwaGljc0NvbnRl
eHQzRDo6UkVQTEFDRSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFUExBQ0UpOwotICAgIG1fY29udGV4
dDNELT51bmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIGZhbHNl
LCBjb25zdF9jYXN0PEdDM0RmbG9hdCo+KG00KSk7CisgICAgcHJvZ3JhbS0+c2V0TWF0cml4KHBy
b2dyYW0tPnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpLCBkYXRhKCkucHJvamVjdGlvbk1hdHJp
eCk7CisgICAgcHJvZ3JhbS0+c2V0TWF0cml4KHByb2dyYW0tPm1vZGVsVmlld01hdHJpeExvY2F0
aW9uKCksIG1hdHJpeCk7CiAgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250
ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgNCk7CiAKICAgICAvLyBDbGVhciB0aGUgc3RhdGUuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmgKaW5kZXggNTlkYjNkMzk3OWMwZDEwYmU0MTQ4MTVlNzgyMzE1ZGYwN2Mz
NWExNi4uYWExMzMxMmZhYWZjYTMxZmRmMWQxYzQxNGQzNWMyN2NhYzgwMmNhMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
TC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0wuaApAQCAtNDQsNyArNDQsOCBAQCBwdWJsaWM6CiAgICAgZW51bSBGbGFnIHsKICAg
ICAgICAgU2hvdWxkQmxlbmQgPSAweDAxLAogICAgICAgICBTaG91bGRGbGlwVGV4dHVyZSA9IDB4
MDIsCi0gICAgICAgIFNob3VsZFVzZUFSQlRleHR1cmVSZWN0ID0gMHgwNAorICAgICAgICBTaG91
bGRVc2VBUkJUZXh0dXJlUmVjdCA9IDB4MDQsCisgICAgICAgIFNob3VsZEFudGlhbGlhcyA9IDB4
MDgKICAgICB9OwogCiAgICAgdHlwZWRlZiBpbnQgRmxhZ3M7CkBAIC05OCwyMiArOTksMTMgQEAg
cHJpdmF0ZToKICAgICAgICAgVmVjdG9yPENsaXBTdGF0ZT4gY2xpcFN0YWNrOwogICAgIH07CiAK
LSAgICBzdHJ1Y3QgRHJhd1F1YWQgewotICAgICAgICBEcmF3UXVhZChjb25zdCBGbG9hdFJlY3Qm
IG9yaWdpbmFsVGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRRdWFkJiB0YXJnZXRSZWN0TWFwcGVkVG9V
bml0U3F1YXJlID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgRmxvYXRTaXplKDEsIDEpKSkKLSAg
ICAgICAgICAgIDogb3JpZ2luYWxUYXJnZXRSZWN0KG9yaWdpbmFsVGFyZ2V0UmVjdCkKLSAgICAg
ICAgICAgICwgdGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZSh0YXJnZXRSZWN0TWFwcGVkVG9V
bml0U3F1YXJlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBGbG9hdFJlY3Qgb3Jp
Z2luYWxUYXJnZXRSZWN0OwotICAgICAgICBGbG9hdFF1YWQgdGFyZ2V0UmVjdE1hcHBlZFRvVW5p
dFNxdWFyZTsKLSAgICB9OwotCiAgICAgVGV4dHVyZU1hcHBlckdMKCk7CiAKLSAgICBib29sIGRy
YXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncywgY29uc3Qg
SW50U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYgb3JpZ2luYWxUYXJnZXRSZWN0LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBC
aXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzKTsKLSAgICB2
b2lkIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bSosIHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBJbnRTaXplJiwgY29uc3QgRHJhd1F1
YWQmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBv
cGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7Ci0gICAgdm9pZCBkcmF3
UXVhZChjb25zdCBEcmF3UXVhZCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZp
ZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiwgR0MzRGVudW0gZHJhd2luZ01v
ZGUsIEZsYWdzKTsKKyAgICB2b2lkIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbSosIHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBJbnRT
aXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVs
Vmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1
cmUpOworICAgIHZvaWQgZHJhdyhjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSosIEdD
M0RlbnVtIGRyYXdpbmdNb2RlLCBGbGFncyk7CisKKyAgICB2b2lkIGRyYXdVbml0UmVjdChUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSosIEdDM0RlbnVtIGRyYXdpbmdNb2RlKTsKKyAgICB2b2lk
IGRyYXdFZGdlVHJpYW5nbGVzKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKik7CiAKICAgICBi
b29sIGJlZ2luU2Npc3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBG
bG9hdFJlY3QmKTsKICAgICB2b2lkIGJpbmREZWZhdWx0U3VyZmFjZSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKaW5kZXggMmQ4NmJmODU5ZGE4NjE3ZmM0ODc5
ZjJkNzE3NTkyMjhhYTFjMDQzZi4uMjhiMzNiNGUyYjFiZWFlNzE0MzZjOGRiM2NjMDUwMjUxMDE3
ZjdjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCkBAIC03
MCw2ICs3MCwxOCBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleAogICAgIExPRyhDb21wb3NpdGlu
ZywgIlByb2dyYW0gbG9nOiAlc1xuIiwgbG9nLnV0ZjgoKS5kYXRhKCkpOwogfQogCit2b2lkIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpzZXRNYXRyaXgoR0MzRHVpbnQgbG9jYXRpb24sIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCit7CisgICAgR0MzRGZsb2F0IG1hdHJp
eEFzRmxvYXRzW10gPSB7CisgICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0xMigpLCBtYXRy
aXgubTEzKCksIG1hdHJpeC5tMTQoKSwKKyAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRyaXgubTIy
KCksIG1hdHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgpLAorICAgICAgICBtYXRyaXgubTMxKCksIG1h
dHJpeC5tMzIoKSwgbWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCksCisgICAgICAgIG1hdHJpeC5t
NDEoKSwgbWF0cml4Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5tNDQoKQorICAgIH07CisK
KyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIDEsIGZhbHNlLCBtYXRy
aXhBc0Zsb2F0cyk7Cit9CisKIEdDM0R1aW50IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpn
ZXRMb2NhdGlvbihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFZhcmlhYmxlVHlwZSB0eXBlKQog
ewogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBHQzNEdWludD46Oml0ZXJhdG9yIGl0ID0gbV92
YXJpYWJsZXMuZmluZChuYW1lKTsKQEAgLTEwNiwzMiArMTE4LDY2IEBAIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKQogICAgIG1fY29udGV4
dC0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFtSUQpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciogdmVy
dGV4U2hhZGVyU291cmNlID0KKyNkZWZpbmUgR0xTTF9ESVJFQ1RJVkUoLi4uKSAiIyIjX19WQV9B
UkdTX18iXG4iCitzdGF0aWMgY29uc3QgY2hhciogdmVydGV4VGVtcGxhdGUgPQogICAgIFNUUklO
R0lGWSgKLSAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OworICAgICAgICBhdHRyaWJ1dGUg
dmVjNCBhX3ZlcnRleDsKKyAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbW9kZWxWaWV3TWF0cml4Owor
ICAgICAgICB1bmlmb3JtIG1hdDQgdV9wcm9qZWN0aW9uTWF0cml4OwogICAgICAgICB1bmlmb3Jt
IGZsb2F0IHVfZmxpcDsKICAgICAgICAgdW5pZm9ybSB2ZWMyIHVfdGV4dHVyZVNpemU7Ci0gICAg
ICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OworCiAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3Rl
eENvb3JkOwogICAgICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7CisgICAgICAgIHZh
cnlpbmcgZmxvYXQgdl9hbnRpYWxpYXM7CisKKyAgICAgICAgdm9pZCBub29wKHZlYzIpIHsgfQor
CisgICAgICAgIHZlYzQgdG9TY3JlZW5TcGFjZSh2ZWMyIHBvcykgeyByZXR1cm4gdmVjNChwb3Ms
IDAuLCAxLikgKiB1X21vZGVsVmlld01hdHJpeDsgfQorCisgICAgICAgIC8vIFRoaXMgZnVuY3Rp
b24gcmVsaWVzIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgd2UgZ2V0IGVkZ2UgdHJpYW5nbGVzIHdp
dGggY29udHJvbCBwb2ludHMsCisgICAgICAgIC8vIGEgY29udHJvbCBwb2ludCBiZWluZyB0aGUg
bmVhcmVzdCBwb2ludCB0byB0aGUgY29vcmRpbmF0ZSB0aGF0IGlzIG9uIHRoZSBlZGdlLgorICAg
ICAgICB2b2lkIGFwcGx5QW50aWFsaWFzKGlub3V0IHZlYzIgcG9zaXRpb24pCisgICAgICAgIHsK
KyAgICAgICAgICAgIC8vIFdlIGNvdW50IG9uIHRoZSBmYWN0IHRoYXQgcXVhZCBwYXNzZWQgaW4g
aXMgYWx3YXlzIGEgdW5pdCByZWN0LAorICAgICAgICAgICAgLy8gYW5kIHRoZSB0cmFuc2Zvcm1h
dGlvbiBtYXRyaXggYXBwbGllcyB0aGUgcmVhbCByZWN0LgorICAgICAgICAgICAgY29uc3QgdmVj
MiBjZW50ZXIgPSB2ZWMyKDAuNSwgMC41KTsKKyAgICAgICAgICAgIGNvbnN0IGZsb2F0IGFudGlh
bGlhc0luZmxhdGlvbkRpc3RhbmNlID0gMS47CisKKyAgICAgICAgICAgIC8vIFdlIHBhc3MgdGhl
IGNvbnRyb2wgcG9pbnQgYXMgdGhlIHp3IGNvb3JkaW5hdGVzIG9mIHRoZSB2ZXJ0ZXguCisgICAg
ICAgICAgICAvLyBUaGUgY29udHJvbCBwb2ludCBpcyB0aGUgcG9pbnQgb24gdGhlIGVkZ2UgY2xv
c2VzdCB0byB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAgICAgICAgICAgIC8vIFRoZSBjb250cm9s
IHBvaW50IGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgYW50aWFsaWFzIHZhbHVlLgorICAgICAgICAg
ICAgdmVjMiBjb250cm9sUG9pbnQgPSBhX3ZlcnRleC56dzsKKworICAgICAgICAgICAgLy8gRmly
c3Qgd2UgY2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBpbiBzY3JlZW4gc3BhY2UuCisgICAgICAgICAg
ICB2ZWM0IGNlbnRlckluU2NyZWVuQ29vcmRpbmF0ZXMgPSB0b1NjcmVlblNwYWNlKGNlbnRlcik7
CisgICAgICAgICAgICB2ZWM0IGNvbnRyb2xQb2ludEluU2NyZWVuQ29vcmRpbmF0ZXMgPSB0b1Nj
cmVlblNwYWNlKGNvbnRyb2xQb2ludCk7CisgICAgICAgICAgICBmbG9hdCBzY3JlZW5TcGFjZURp
c3RhbmNlID0gZGlzdGFuY2UoY2VudGVySW5TY3JlZW5Db29yZGluYXRlcywgY29udHJvbFBvaW50
SW5TY3JlZW5Db29yZGluYXRlcyk7CisKKyAgICAgICAgICAgIC8vIFdlIGFkZCB0aGUgaW5mbGF0
aW9uIGRpc3RhbmNlIHRvIHRoZSBjb21wdXRlZCBkaXN0YW5jZSwgYW5kIGNvbXB1dGUgdGhlIHJh
dGlvLgorICAgICAgICAgICAgZmxvYXQgaW5mbGF0aW9uUmF0aW8gPSAoc2NyZWVuU3BhY2VEaXN0
YW5jZSArIGFudGlhbGlhc0luZmxhdGlvbkRpc3RhbmNlKSAvIHNjcmVlblNwYWNlRGlzdGFuY2U7
CisKKyAgICAgICAgICAgIC8vIHZfYW50aWFsaWFzIG5lZWRzIHRvIGJlIDAgZm9yIHRoZSBvdXRl
ciBlZGdlIGFuZCAxLiBmb3IgdGhlIGlubmVyIGVkZ2UuCisgICAgICAgICAgICAvLyBTaW5jZSB0
aGUgY29udHJvbFBvaW50IGlzIGVxdWFsIHRvIHRoZSBwb3NpdGlvbiBpbiB0aGUgZWRnZSB2ZXJ0
aWNlcywgdGhlIHZhbHVlIGlzIGFsd2F5cyAwIGZvciB0aG9zZS4KKyAgICAgICAgICAgIC8vIEZv
ciB0aGUgY2VudGVyIHBvaW50LCB0aGUgZGlzdGFuY2UgaXMgYWx3YXlzIDAuNSwgc28gd2Ugbm9y
bWFsaXplIHRvIDEuIGJ5IG11bHRpcGx5aW5nIGJ5IDIuCisgICAgICAgICAgICAvLyBCeSBtdWx0
cGx5aW5nIGJ5IGluZmxhdGlvblJhdGlvIGFuZCBkaXZpZGluZyBieSAoaW5mbGF0aW9uUmF0aW8g
LSAxKSwKKyAgICAgICAgICAgIC8vIFdlIG1ha2Ugc3VyZSB0aGF0IHRoZSB2YXJ5aW5nIGludGVy
cG9sYXRlcyBiZXR3ZWVuIDAgKG91dGVyIGVkZ2UpLCAxIChpbm5lciBlZGdlKSBhbmQgbiA+IDEg
KGNlbnRlcikuCisgICAgICAgICAgICB2X2FudGlhbGlhcyA9IGRpc3RhbmNlKGNvbnRyb2xQb2lu
dCwgcG9zaXRpb24pICogMi4gKiBpbmZsYXRpb25SYXRpbyAvIChpbmZsYXRpb25SYXRpbyAtIDEu
KTsKKworICAgICAgICAgICAgLy8gTm93IGluZmxhdGUgdGhlIGFjdHVhbCBwb3NpdGlvbi4KKyAg
ICAgICAgICAgIHBvc2l0aW9uID0gY2VudGVyICsgKHBvc2l0aW9uIC0gY2VudGVyKSAqIGluZmxh
dGlvblJhdGlvOworICAgICAgICB9CiAKICAgICAgICAgdm9pZCBtYWluKHZvaWQpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHZlYzQgcG9zaXRpb24gPSBhX3ZlcnRleDsKKyAgICAgICAgICAgIHZl
YzIgcG9zaXRpb24gPSBhX3ZlcnRleC54eTsKKyAgICAgICAgICAgIGFwcGx5QW50aWFsaWFzSWZO
ZWVkZWQocG9zaXRpb24pOwogICAgICAgICAgICAgdl90ZXhDb29yZCA9IHZlYzIocG9zaXRpb24u
eCwgbWl4KHBvc2l0aW9uLnksIDEuIC0gcG9zaXRpb24ueSwgdV9mbGlwKSkgKiB1X3RleHR1cmVT
aXplOwotICAgICAgICAgICAgdl9tYXNrVGV4Q29vcmQgPSB2ZWMyKHBvc2l0aW9uKTsKLSAgICAg
ICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiBhX3ZlcnRleDsKKyAgICAgICAgICAgIHZf
bWFza1RleENvb3JkID0gcG9zaXRpb247CisgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfcHJv
amVjdGlvbk1hdHJpeCAqIHVfbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMC4sIDEu
KTsKICAgICAgICAgfQogICAgICk7CiAKLSNkZWZpbmUgR0xTTF9ESVJFQ1RJVkUoLi4uKSAiIyIj
X19WQV9BUkdTX18iXG4iCi0jZGVmaW5lIERFRklORV9BUFBMSUVSKE5hbWUpIFwKLSAgICAiI2lm
ZGVmIEVOQUJMRV8iI05hbWUiXG4iIFwKLSAgICAiI2RlZmluZSBhcHBseSIjTmFtZSJJZk5lZWRl
ZCBhcHBseSIjTmFtZSJcbiJcCi0gICAgIiNlbHNlXG4iXAotICAgICIjZGVmaW5lIGFwcGx5IiNO
YW1lIklmTmVlZGVkIG5vb3BcbiJcCi0gICAgIiNlbmRpZlxuIgotCiAjZGVmaW5lIFJFQ1RfVEVY
VFVSRV9ESVJFQ1RJVkUgXAogICAgIEdMU0xfRElSRUNUSVZFKGlmZGVmIEVOQUJMRV9SZWN0KSBc
CiAgICAgICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBTYW1wbGVyVHlwZSBzYW1wbGVyMkRSZWN0
KSBcCkBAIC0xNDEsMjkgKzE4NywxNCBAQCBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVy
U291cmNlID0KICAgICAgICAgR0xTTF9ESVJFQ1RJVkUoZGVmaW5lIFNhbXBsZXJGdW5jdGlvbiB0
ZXh0dXJlMkQpIFwKICAgICBHTFNMX0RJUkVDVElWRShlbmRpZikKIAotI2RlZmluZSBFTkFCTEVf
QVBQTElFUihOYW1lKSAiI2RlZmluZSBFTkFCTEVfIiNOYW1lIlxuIgorI2RlZmluZSBFTkFCTEVf
QVBQTElFUihOYW1lKSAiI2RlZmluZSBFTkFCTEVfIiNOYW1lIlxuI2RlZmluZSBhcHBseSIjTmFt
ZSJJZk5lZWRlZCBhcHBseSIjTmFtZSJcbiIKKyNkZWZpbmUgRElTQUJMRV9BUFBMSUVSKE5hbWUp
ICIjZGVmaW5lIGFwcGx5IiNOYW1lIklmTmVlZGVkIG5vb3BcbiIKICNkZWZpbmUgQkxVUl9DT05T
VEFOVFMgXAogICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBHQVVTU0lBTl9LRVJORUxfSEFMRl9X
SURUSCAxMSkgXAogICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBHQVVTU0lBTl9LRVJORUxfU1RF
UCAwLjIpCiAKIAogc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50VGVtcGxhdGUgPQotICAgIERF
RklORV9BUFBMSUVSKFRleHR1cmUpCi0gICAgREVGSU5FX0FQUExJRVIoU29saWRDb2xvcikKLSAg
ICBERUZJTkVfQVBQTElFUihPcGFjaXR5KQotICAgIERFRklORV9BUFBMSUVSKE1hc2spCi0gICAg
REVGSU5FX0FQUExJRVIoQW50aWFsaWFzKQotICAgIERFRklORV9BUFBMSUVSKEdyYXlzY2FsZUZp
bHRlcikKLSAgICBERUZJTkVfQVBQTElFUihTZXBpYUZpbHRlcikKLSAgICBERUZJTkVfQVBQTElF
UihTYXR1cmF0ZUZpbHRlcikKLSAgICBERUZJTkVfQVBQTElFUihIdWVSb3RhdGVGaWx0ZXIpCi0g
ICAgREVGSU5FX0FQUExJRVIoSW52ZXJ0RmlsdGVyKQotICAgIERFRklORV9BUFBMSUVSKEJyaWdo
dG5lc3NGaWx0ZXIpCi0gICAgREVGSU5FX0FQUExJRVIoQ29udHJhc3RGaWx0ZXIpCi0gICAgREVG
SU5FX0FQUExJRVIoT3BhY2l0eUZpbHRlcikKLSAgICBERUZJTkVfQVBQTElFUihCbHVyRmlsdGVy
KQotICAgIERFRklORV9BUFBMSUVSKEFscGhhQmx1cikKLSAgICBERUZJTkVfQVBQTElFUihDb250
ZW50VGV4dHVyZSkKICAgICBSRUNUX1RFWFRVUkVfRElSRUNUSVZFCiAgICAgQkxVUl9DT05TVEFO
VFMKICAgICBTVFJJTkdJRlkoCkBAIC0xNzIsOSArMjAzLDkgQEAgc3RhdGljIGNvbnN0IGNoYXIq
IGZyYWdtZW50VGVtcGxhdGUgPQogICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX21hc2s7CiAg
ICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfY29udGVudFRleHR1cmU7CiAgICAgICAgIHVuaWZv
cm0gZmxvYXQgdV9vcGFjaXR5OworICAgICAgICB2YXJ5aW5nIGZsb2F0IHZfYW50aWFsaWFzOwog
ICAgICAgICB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsKICAgICAgICAgdmFyeWluZyB2ZWMyIHZf
bWFza1RleENvb3JkOwotICAgICAgICB1bmlmb3JtIHZlYzMgdV9leHBhbmRlZFF1YWRFZGdlc0lu
U2NyZWVuU3BhY2VbOF07CiAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9maWx0ZXJBbW91bnQ7CiAg
ICAgICAgIHVuaWZvcm0gdmVjMiB1X2JsdXJSYWRpdXM7CiAgICAgICAgIHVuaWZvcm0gdmVjMiB1
X3NoYWRvd09mZnNldDsKQEAgLTE4Myw0NyArMjE0LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZy
YWdtZW50VGVtcGxhdGUgPQogCiAgICAgICAgIHZvaWQgbm9vcChpbm91dCB2ZWM0IGR1bW15UGFy
YW1ldGVyKSB7IH0KIAotICAgICAgICAvLyBUaGUgZGF0YSBwYXNzZWQgaW4gdV9leHBhbmRlZFF1
YWRFZGdlc0luU2NyZWVuU3BhY2UgaXMgbWVyZWx5IHRoZQotICAgICAgICAvLyBwcmUtc2NhbGVk
IGNvZWZmZWNpZW50cyBvZiB0aGUgbGluZSBlcXVhdGlvbnMgZGVzY3JpYmluZyB0aGUgZm91ciBl
ZGdlcwotICAgICAgICAvLyBvZiB0aGUgZXhwYW5kZWQgcXVhZCBpbiBzY3JlZW4gc3BhY2UgYW5k
IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBib3gKLSAgICAgICAgLy8gb2YgdGhlIGV4cGFuZGVk
IHF1YWQuCi0gICAgICAgIC8vCi0gICAgICAgIGZsb2F0IG5vcm1hbGl6ZWREaXN0YW5jZSh2ZWMz
IGVkZ2VDb2VmZmljaWVudCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gV2UgYXJlIGRvaW5n
IGEgc2ltcGxlIGRpc3RhbmNlIGNhbGN1bGF0aW9uIGhlcmUgYWNjb3JkaW5nIHRvIHRoZSBmb3Jt
dWxhOgotICAgICAgICAgICAgLy8gKEEqcC54ICsgQipwLnkgKyBDKSAvIHNxcnQoQV4yICsgQl4y
KSA9IGRpc3RhbmNlIGZyb20gbGluZSB0byBwCi0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgQSwg
QiBhbmQgQyBoYXZlIGFscmVhZHkgYmVlbiBzY2FsZWQgYnkgMSAvIHNxcnQoQV4yICsgQl4yKS4K
LSAgICAgICAgICAgIHJldHVybiBjbGFtcChkb3QoZWRnZUNvZWZmaWNpZW50LCB2ZWMzKGdsX0Zy
YWdDb29yZC54eSwgMS4pKSwgMC4sIDEuKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0IGFu
dGlhbGlhc1F1YWQodmVjMyBjb2VmZmljaWVudDEsIHZlYzMgY29lZmZpY2llbnQyLCB2ZWMzIGNv
ZWZmaWNpZW50MywgdmVjMyBjb2VmZmljaWVudDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8v
IE5vdyB3ZSB3YW50IHRvIHJlZHVjZSB0aGUgYWxwaGEgdmFsdWUgb2YgdGhlIGZyYWdtZW50IGlm
IGl0IGlzIGNsb3NlIHRvIHRoZQotICAgICAgICAgICAgLy8gZWRnZXMgb2YgdGhlIGV4cGFuZGVk
IHF1YWQgKG9yIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGJveCAtLSB3aGljaCBzZWVtcyB0byBiZQot
ICAgICAgICAgICAgLy8gaW1wb3J0YW50IGZvciBiYWNrZmFjaW5nIHF1YWRzKS4gTm90ZSB0aGF0
IHdlIGFyZSBjb21iaW5pbmcgdGhlIGNvbnRyaWJ1dGlvbgotICAgICAgICAgICAgLy8gZnJvbSB0
aGUgKHRvcCB8fCBib3R0b20pIGFuZCAobGVmdCB8fCByaWdodCkgZWRnZSBieSBzaW1wbHkgbXVs
dGlwbHlpbmcuIFRoaXMgZm9sbG93cwotICAgICAgICAgICAgLy8gdGhlIGFwcHJvYWNoIGRlc2Ny
aWJlZCBhdDogaHR0cDovL2h0dHAuZGV2ZWxvcGVyLm52aWRpYS5jb20vR1BVR2VtczIvZ3B1Z2Vt
czJfY2hhcHRlcjIyLmh0bWwsCi0gICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2l0aG91dCB1
c2luZyBHYXVzc2lhbiB3ZWlnaHRzLgotICAgICAgICAgICAgcmV0dXJuIG1pbihub3JtYWxpemVk
RGlzdGFuY2UoY29lZmZpY2llbnQxKSwgbm9ybWFsaXplZERpc3RhbmNlKGNvZWZmaWNpZW50Mikp
Ci0gICAgICAgICAgICAgICAgKiBtaW4obm9ybWFsaXplZERpc3RhbmNlKGNvZWZmaWNpZW50Myks
IG5vcm1hbGl6ZWREaXN0YW5jZShjb2VmZmljaWVudDQpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGZsb2F0IGFudGlhbGlhcygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZsb2F0IGFudGlhbGlh
c1ZhbHVlRm9yUXVhZCA9IAotICAgICAgICAgICAgICAgIGFudGlhbGlhc1F1YWQodV9leHBhbmRl
ZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbMF0sCi0gICAgICAgICAgICAgICAgICAgIHVfZXhwYW5k
ZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzFdLAotICAgICAgICAgICAgICAgICAgICB1X2V4cGFu
ZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVsyXSwKLSAgICAgICAgICAgICAgICAgICAgdV9leHBh
bmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbM10pOwotCi0gICAgICAgICAgICBmbG9hdCBhbnRp
YWxpYXNWYWx1ZUZvckJvdW5kaW5nUmVjdCA9IAotICAgICAgICAgICAgICAgIGFudGlhbGlhc1F1
YWQodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNF0sCi0gICAgICAgICAgICAgICAg
ICAgIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzVdLAotICAgICAgICAgICAgICAg
ICAgICB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs2XSwKLSAgICAgICAgICAgICAg
ICAgICAgdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbN10pOwotCi0gICAgICAgICAg
ICByZXR1cm4gbWluKGFudGlhbGlhc1ZhbHVlRm9yUXVhZCwgYW50aWFsaWFzVmFsdWVGb3JCb3Vu
ZGluZ1JlY3QpOyAgICAgICAgICAgCi0gICAgICAgIH0KKyAgICAgICAgZmxvYXQgYW50aWFsaWFz
KCkgeyByZXR1cm4gc21vb3Roc3RlcCh2X2FudGlhbGlhcywgMC4sIDEuKTsgfQogCiAgICAgICAg
IHZvaWQgYXBwbHlUZXh0dXJlKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgPSBTYW1wbGVyRnVu
Y3Rpb24oc19zYW1wbGVyLCB2X3RleENvb3JkKTsgfQogICAgICAgICB2b2lkIGFwcGx5T3BhY2l0
eShpbm91dCB2ZWM0IGNvbG9yKSB7IGNvbG9yICo9IHVfb3BhY2l0eTsgfQpAQCAtMzMxLDEwICsz
MjIsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZSA9CiAgICAgICAgICAg
ICBjb2xvciA9IHNvdXJjZU92ZXIoY29udGVudENvbG9yLCBjb2xvcik7CiAgICAgICAgIH0KIAot
ICAgICAgICB2b2lkIGFwcGx5U29saWRDb2xvcihpbm91dCB2ZWM0IGNvbG9yKQotICAgICAgICB7
Ci0gICAgICAgICAgICBjb2xvciAqPSB1X2NvbG9yOwotICAgICAgICB9CisgICAgICAgIHZvaWQg
YXBwbHlTb2xpZENvbG9yKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgKj0gdV9jb2xvcjsgfQog
CiAgICAgICAgIHZvaWQgbWFpbih2b2lkKQogICAgICAgICB7CkBAIC0zNjIsMzIgKzM1MCwzNyBA
QCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZSA9CiAKIHN0YXRpYyB2b2lkIGdl
dFNoYWRlclNwZWMoVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlvbnMgb3B0aW9ucywg
U3RyaW5nJiB2ZXJ0ZXhTb3VyY2UsIFN0cmluZyYgZnJhZ21lbnRTb3VyY2UpCiB7Ci0gICAgU3Ry
aW5nQnVpbGRlciBmcmFnbWVudEJ1aWxkZXI7CisKKyAgICBTdHJpbmdCdWlsZGVyIHNoYWRlckJ1
aWxkZXI7CiAjZGVmaW5lIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhBcHBsaWVyKSBcCi0gICAg
aWYgKG9wdGlvbnMgJiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QXBwbGllcikgXAotICAg
ICAgICBmcmFnbWVudEJ1aWxkZXIuYXBwZW5kKEVOQUJMRV9BUFBMSUVSKEFwcGxpZXIpKTsKLQot
ICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhUZXh0dXJlKQotICAgIFNFVF9BUFBMSUVSX0ZS
T01fT1BUSU9OUyhSZWN0KQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhTb2xpZENvbG9y
KQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhPcGFjaXR5KQotICAgIFNFVF9BUFBMSUVS
X0ZST01fT1BUSU9OUyhNYXNrKQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhBbnRpYWxp
YXMpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEdyYXlzY2FsZUZpbHRlcikKLSAgICBT
RVRfQVBQTElFUl9GUk9NX09QVElPTlMoU2VwaWFGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJP
TV9PUFRJT05TKFNhdHVyYXRlRmlsdGVyKQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhI
dWVSb3RhdGVGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEJyaWdodG5lc3NG
aWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKENvbnRyYXN0RmlsdGVyKQotICAg
IFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhJbnZlcnRGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJf
RlJPTV9PUFRJT05TKE9wYWNpdHlGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05T
KEJsdXJGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEFscGhhQmx1cikKLSAg
ICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQ29udGVudFRleHR1cmUpCi0KLSAgICBmcmFnbWVu
dEJ1aWxkZXIuYXBwZW5kKGZyYWdtZW50VGVtcGxhdGUpOwotICAgIHZlcnRleFNvdXJjZSA9IHZl
cnRleFNoYWRlclNvdXJjZTsKLSAgICBmcmFnbWVudFNvdXJjZSA9IGZyYWdtZW50QnVpbGRlci50
b1N0cmluZygpOworICAgIHNoYWRlckJ1aWxkZXIuYXBwZW5kKFwKKyAgICAgICAgKG9wdGlvbnMg
JiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QXBwbGllcikgXAorICAgICAgICAgICAgPyBF
TkFCTEVfQVBQTElFUihBcHBsaWVyKSBcCisgICAgICAgICAgICA6IERJU0FCTEVfQVBQTElFUihB
cHBsaWVyKSkKKworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhUZXh0dXJlKTsKKyAgICBT
RVRfQVBQTElFUl9GUk9NX09QVElPTlMoUmVjdCk7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJ
T05TKFNvbGlkQ29sb3IpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhPcGFjaXR5KTsK
KyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoTWFzayk7CisgICAgU0VUX0FQUExJRVJfRlJP
TV9PUFRJT05TKEFudGlhbGlhcyk7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEdyYXlz
Y2FsZUZpbHRlcik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFNlcGlhRmlsdGVyKTsK
KyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoU2F0dXJhdGVGaWx0ZXIpOworICAgIFNFVF9B
UFBMSUVSX0ZST01fT1BUSU9OUyhIdWVSb3RhdGVGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZS
T01fT1BUSU9OUyhCcmlnaHRuZXNzRmlsdGVyKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElP
TlMoQ29udHJhc3RGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhJbnZlcnRG
aWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhPcGFjaXR5RmlsdGVyKTsKKyAg
ICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQmx1ckZpbHRlcik7CisgICAgU0VUX0FQUExJRVJf
RlJPTV9PUFRJT05TKEFscGhhQmx1cik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKENv
bnRlbnRUZXh0dXJlKTsKKyAgICBTdHJpbmdCdWlsZGVyIHZlcnRleEJ1aWxkZXI7CisgICAgdmVy
dGV4QnVpbGRlci5hcHBlbmQoc2hhZGVyQnVpbGRlci50b1N0cmluZygpKTsKKyAgICB2ZXJ0ZXhC
dWlsZGVyLmFwcGVuZCh2ZXJ0ZXhUZW1wbGF0ZSk7CisgICAgc2hhZGVyQnVpbGRlci5hcHBlbmQo
ZnJhZ21lbnRUZW1wbGF0ZSk7CisgICAgdmVydGV4U291cmNlID0gdmVydGV4QnVpbGRlci50b1N0
cmluZygpOworICAgIGZyYWdtZW50U291cmNlID0gc2hhZGVyQnVpbGRlci50b1N0cmluZygpOwog
fQogCiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlci5oCmluZGV4IGIzODIyYzRkOWU2OWJhZDRlOTFmOWQ5M2Q5ZWQ3MDg1NTI2MzI3
OTUuLjU2NWQxMWNlOTcwNmZmOGU4YjBjOWFmMTg0ODU2NTNiOTUxM2VlNDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCkBAIC00Nyw5ICs0Nyw5IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpOwogCiAgICAgVEVYTUFQ
X0RFQ0xBUkVfQVRUUklCVVRFKHZlcnRleCkKLSAgICBURVhNQVBfREVDTEFSRV9BVFRSSUJVVEUo
dGV4Q29vcmQpCiAKLSAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKG1hdHJpeCkKKyAgICBURVhN
QVBfREVDTEFSRV9VTklGT1JNKG1vZGVsVmlld01hdHJpeCkKKyAgICBURVhNQVBfREVDTEFSRV9V
TklGT1JNKHByb2plY3Rpb25NYXRyaXgpCiAgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShmbGlw
KQogICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0odGV4dHVyZVNpemUpCiAgICAgVEVYTUFQX0RF
Q0xBUkVfVU5JRk9STShvcGFjaXR5KQpAQCAtNjYsNiArNjYsOCBAQCBwdWJsaWM6CiAgICAgVEVY
TUFQX0RFQ0xBUkVfU0FNUExFUihjb250ZW50VGV4dHVyZSkKICNlbmRpZgogCisgICAgdm9pZCBz
ZXRNYXRyaXgoR0MzRHVpbnQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisKIHByaXZh
dGU6CiAgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4sIGNvbnN0IFN0cmluZyYgdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBTdHJpbmcm
IGZyYWdtZW50U2hhZGVyU291cmNlKTsKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fdmVydGV4U2hh
ZGVyOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180825</attachid>
            <date>2012-12-27 15:18:00 -0800</date>
            <delta_ts>2012-12-28 01:50:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105377-20121227151521.patch</filename>
            <type>text/plain</type>
            <size>39455</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4NTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzIxMWE1MTI0MTdkYTY5
YjRmMzYwOWQyYmQ4NGMwODJjZDJkZTNjMS4uNmQxM2Q2ODEwMWNmODlkZjIzODc0MTFlZDdkNzg4
NjM2NzA4NDc4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTEyLTE4ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1RleG1hcF0gRWRnZSBh
bnRpYWxpYXNpbmcgaW4gVGV4dHVyZU1hcHBlciBjb3VsZCBiZSBkb25lIHdpdGggbGVzcyBwZXIt
cGl4ZWwgY2FsbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwNTM3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEluc3RlYWQgb2YgcGFzc2luZyA4IHF1YWQgZWRnZSBjb2VmZmljaWVudHMgYXMgdW5pZm9y
bXMgYW5kIGFuYWx5emUgdGhlIGRpc3RhbmNlIGluIHRoZQorICAgICAgICBmcmFnbWVudCBzaGFk
ZXIsIHdlIHJlbmRlciB0aGUgYW50aWFsaWFzZWQgcXVhZCBhcyA0IGVkZ2UgdHJpYW5nbGVzLCB3
aGljaCBvcmlnaW5hdGUgaW4gdGhlCisgICAgICAgIGNlbnRlciBvZiB0aGUgcXVhZC4gCisKKyAg
ICAgICAgVGhlIHZlcnRleCBzaGFkZXIgZXhwYW5kcyB0aGUgcXVhZCBiYXNlZCBvbiB0aGUgc2Ny
ZWVuIHRyYW5zZm9ybSwgYW5kIGFwcGxpZXMgYSB2YWx1ZSB0byBlYWNoIHZlcnRleCB0byBiZSBp
bnRlcnBvbGF0ZWQgYnkgdGhlIEdQVS4gCisKKyAgICAgICAgSXQgaXMgdmVyeSBkaWZmaWN1bHQg
dG8gdGVzdCBwZXJmb3JtYW5jZSBnYWluOyBIb3dldmVyLCB0aGUgZm9sbG93aW5nIGlzIGFwcGFy
ZW50OgorICAgICAgICAtIFRoZSBtYXRyaXggbXVsdGlwbGljYXRpb25zIGFuZCBpbnZlcnNpb25z
IGRvbmUgYmVmb3JlIGluIHRoZSBxdWFkIGluZmxhdGlvbiBjb2RlIHdlcmUKKyAgICAgICAgICBh
bHdheXMgdmlzaWJsZSBpbiBpbnN0cnVtZW50cy92YWxncmluZCBhbmQgdGhleSBhcmUgbm93IGdv
bmUuCisgICAgICAgIC0gV2Ugbm93IHBlcmZvcm0gYSBzaW5nbGUgc21vb3Roc3RlcCgpIGNvbW1h
bmQgcGVyIHBpeGVsIGluc3RlYWQgb2YgOCBjbGFtcChkb3QoKSkgY29tbWFuZHMuCisgICAgICAg
IC0gSXQgc2hvdWxkIG5vdyBiZSBwb3NzaWJsZSB0byBhbnRpYWxpYXMgaW5kaXZpZHVhbCBlZGdl
cy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpnZXRTdGF0aWNWQk8pOgorICAgICAgICAgICAgQ2Fj
aGUgdGhlIHVuaXQtcmVjdCBhbmQgZWRnZS10cmlhbmdsZSB2ZXJ0ZXggZGF0YSBpbiBhIFZCTy4K
KworICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6flRleHR1cmVNYXBwZXJH
TERhdGEpOgorICAgICAgICAgICAgQ2xlYXIgdGhlIGNhY2hlZCBWQk9zIHVwb24gZGVzdHJ1Y3Rp
b24uCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlkQ29sb3IpOgorICAg
ICAgICAgICAgVXNlIHRoZSBuZXcgc2lnbmF0dXJlICJkcmF3IiBpbnN0ZWFkIG9mICJkcmF3UXVh
ZCIuCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0VkZ2VUcmlhbmds
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VW5pdFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3KToKKyAgICAgICAgICAgIFJl
bW92ZWQgRHJhd1F1YWQsIGluc3RlYWQgZHJhdyBlaXRoZXIgYSB1bml0IHJlY3Qgb3IgZWRnZSB0
cmlhbmdsZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlw
KToKKyAgICAgICAgICAgIFVzZSB0aGUgbmV3IHNldE1hdHJpeCBmdW5jdGlvbi4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaDoKKyAgICAgICAg
ICAgIEFkZGVkIGEgcGFpbnQgZmxhZyBmb3IgYW50aWFsaWFzaW5nLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpzZXRNYXRyaXgpOgor
ICAgICAgICAgICAgU2luY2Ugd2Ugbm93IHNldCB0aGUgbWF0cml4IGluIG11bHRpcGxlIGxvY2F0
aW9ucywgYWRkZWQgYSBjb252ZW5pZW5jZSAKKyAgICAgICAgICAgIGZ1bmN0aW9uIGZvciBtYXRy
aXggdW5pZm9ybS4KKworICAgICAgICAoV2ViQ29yZTo6Z2V0U2hhZGVyU3BlYyk6CisgICAgICAg
ICAgICBVcGRhdGUgdGhlIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVyIHRvIGFjY291bnQgZm9y
IHRoZSBuZXcgYW50aWFsaWFzaW5nCisgICAgICAgICAgICBtZWNoYW5pc20uCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmg6Cisg
ICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisKIDIwMTItMTItMjcgIEtvbmRh
cGFsbHkgS2FseWFuICA8a2FseWFuLmtvbmRhcGFsbHlAaW50ZWwuY29tPgogCiAgICAgICAgIFtF
RkxdW1dlYkdMXSBJbXBsZW1lbnQgRUdMIHN1cHBvcnQgd2l0aCBHTFguCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuY3BwCmluZGV4IDkxYjRhZTI5YWVlOTcwOTczOGNmYzlkMjVhNDBjYzBlMGNiMDJmODAuLmZl
NWQ1NTIwNThkMjdmM2ViMmNhYTZhYTVjODVlN2JiOGNhM2JiMjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuY3BwCkBAIC0xMjUsNiArMTI1LDkgQEAgcHVibGljOgogICAgICAgICAsIG1fc2hhcmVkR0xE
YXRhKFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6Y3VycmVudFNoYXJlZEdMRGF0
YSh0aGlzLT5jb250ZXh0KSkKICAgICB7IH0KIAorICAgIH5UZXh0dXJlTWFwcGVyR0xEYXRhKCk7
CisgICAgUGxhdGZvcm0zRE9iamVjdCBnZXRTdGF0aWNWQk8oR0MzRGVudW0gdGFyZ2V0LCBHQzNE
c2l6ZWlwdHIsIGNvbnN0IHZvaWQqIGRhdGEpOworCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQ7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcHJvamVjdGlvbk1hdHJpeDsKICAgICBU
ZXh0dXJlTWFwcGVyOjpQYWludEZsYWdzIFBhaW50RmxhZ3M7CkBAIC0xMzcsOCArMTQwLDI5IEBA
IHB1YmxpYzoKICAgICBHQzNEaW50IHByZXZpb3VzU2Npc3Nvcls0XTsKICAgICBSZWZQdHI8U2hh
cmVkR0xEYXRhPiBtX3NoYXJlZEdMRGF0YTsKICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3Vy
cmVudFN1cmZhY2U7CisgICAgSGFzaE1hcDxjb25zdCB2b2lkKiwgUGxhdGZvcm0zRE9iamVjdD4g
dmJvczsKIH07CiAKK1BsYXRmb3JtM0RPYmplY3QgVGV4dHVyZU1hcHBlckdMRGF0YTo6Z2V0U3Rh
dGljVkJPKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRh
dGEpCit7CisgICAgSGFzaE1hcDxjb25zdCB2b2lkKiwgUGxhdGZvcm0zRE9iamVjdD46Oml0ZXJh
dG9yIGl0ID0gdmJvcy5maW5kKGRhdGEpOworICAgIGlmIChpdCAhPSB2Ym9zLmVuZCgpKQorICAg
ICAgICByZXR1cm4gaXQtPnZhbHVlOworCisgICAgUGxhdGZvcm0zRE9iamVjdCB2Ym8gPSBjb250
ZXh0LT5jcmVhdGVCdWZmZXIoKTsKKyAgICBjb250ZXh0LT5iaW5kQnVmZmVyKHRhcmdldCwgdmJv
KTsKKyAgICBjb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgZGF0YSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKKyAgICB2Ym9zLmFkZChkYXRhLCB2Ym8pOworICAgIHJl
dHVybiB2Ym87Cit9CisKK1RleHR1cmVNYXBwZXJHTERhdGE6On5UZXh0dXJlTWFwcGVyR0xEYXRh
KCkKK3sKKyAgICBIYXNoTWFwPGNvbnN0IHZvaWQqLCBQbGF0Zm9ybTNET2JqZWN0Pjo6aXRlcmF0
b3IgZW5kID0gdmJvcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hNYXA8Y29uc3Qgdm9pZCosIFBsYXRm
b3JtM0RPYmplY3Q+OjppdGVyYXRvciBpdCA9IHZib3MuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQorICAgICAgICBjb250ZXh0LT5kZWxldGVCdWZmZXIoaXQtPnZhbHVlKTsKK30KKwogdm9pZCBU
ZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjazo6aW5pdChjb25zdCBJbnRSZWN0JiByZWN0KQogewog
ICAgIGNsaXBTdGFjay5jbGVhcigpOwpAQCAtMjY5LDQyICsyOTMsNiBAQCB2b2lkIFRleHR1cmVN
YXBwZXJHTDo6ZW5kUGFpbnRpbmcoKQogI2VuZGlmCiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlckdM
OjpkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYgcXVhZFRvRHJhdywgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qIHNo
YWRlclByb2dyYW0sIEdDM0RlbnVtIGRyYXdpbmdNb2RlLCBGbGFncyBmbGFncykKLXsKLSAgICBt
X2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4
TG9jYXRpb24oKSk7Ci0gICAgbV9jb250ZXh0M0QtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkFSUkFZX0JVRkZFUiwgMCk7Ci0KLSAgICBjb25zdCBHQzNEZmxvYXQgcXVhZFtdID0gewot
ICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDEoKS54KCks
IHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMSgpLnkoKSwKLSAgICAg
ICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAyKCkueCgpLCBxdWFk
VG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDIoKS55KCksCi0gICAgICAgIHF1
YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMygpLngoKSwgcXVhZFRvRHJh
dy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAzKCkueSgpLAotICAgICAgICBxdWFkVG9E
cmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDQoKS54KCksIHF1YWRUb0RyYXcudGFy
Z2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wNCgpLnkoKQotICAgIH07Ci0gICAgbV9jb250ZXh0
M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSwg
MiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cihxdWFkKSk7
Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJp
eChkYXRhKCkucHJvamVjdGlvbk1hdHJpeCkubXVsdGlwbHkobW9kZWxWaWV3TWF0cml4KS5tdWx0
aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgKLSAgICAgICAgICAgIHF1YWRUb0RyYXcub3JpZ2lu
YWxUYXJnZXRSZWN0LndpZHRoKCksIDAsIDAsIDAsCi0gICAgICAgICAgICAwLCBxdWFkVG9EcmF3
Lm9yaWdpbmFsVGFyZ2V0UmVjdC5oZWlnaHQoKSwgMCwgMCwKLSAgICAgICAgICAgIDAsIDAsIDEs
IDAsCi0gICAgICAgICAgICBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFyZ2V0UmVjdC54KCksIHF1YWRU
b0RyYXcub3JpZ2luYWxUYXJnZXRSZWN0LnkoKSwgMCwgMSkpOwotICAgIEdDM0RmbG9hdCBtNFtd
ID0gewotICAgICAgICBtYXRyaXgubTExKCksIG1hdHJpeC5tMTIoKSwgbWF0cml4Lm0xMygpLCBt
YXRyaXgubTE0KCksCi0gICAgICAgIG1hdHJpeC5tMjEoKSwgbWF0cml4Lm0yMigpLCBtYXRyaXgu
bTIzKCksIG1hdHJpeC5tMjQoKSwKLSAgICAgICAgbWF0cml4Lm0zMSgpLCBtYXRyaXgubTMyKCks
IG1hdHJpeC5tMzMoKSwgbWF0cml4Lm0zNCgpLAotICAgICAgICBtYXRyaXgubTQxKCksIG1hdHJp
eC5tNDIoKSwgbWF0cml4Lm00MygpLCBtYXRyaXgubTQ0KCkKLSAgICB9OwotICAgIG1fY29udGV4
dDNELT51bmlmb3JtTWF0cml4NGZ2KHNoYWRlclByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEs
IGZhbHNlLCBtNCk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBTaG91bGRCbGVuZCkgewotICAgICAgICBt
X2NvbnRleHQzRC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29u
dGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsKLSAgICAgICAgbV9jb250ZXh0M0QtPmVuYWJs
ZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgIH0gZWxzZQotICAgICAgICBtX2NvbnRl
eHQzRC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotCi0gICAgbV9jb250ZXh0
M0QtPmRyYXdBcnJheXMoZHJhd2luZ01vZGUsIDAsIDQpOwotICAgIG1fY29udGV4dDNELT5kaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7Ci19
Ci0KIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNvbnN0IENvbG9yJiBjb2xvciwg
ZmxvYXQgd2lkdGgsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCkKIHsKICAgICBpZiAoY2xpcFN0YWNrKCkuY3Vy
cmVudCgpLnNjaXNzb3JCb3guaXNFbXB0eSgpKQpAQCAtMzE4LDcgKzMwNiw3IEBAIHZvaWQgVGV4
dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgd2lkdGgs
IGNvbnN0IEZsb2F0UmVjCiAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm00Zihwcm9ncmFtLT5jb2xv
ckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgIG1fY29udGV4dDNELT5saW5lV2lkdGgod2lk
dGgpOwogCi0gICAgZHJhd1F1YWQodGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFt
LmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6TElORV9MT09QLCBjb2xvci5oYXNBbHBoYSgpID8g
U2hvdWxkQmxlbmQgOiAwKTsKKyAgICBkcmF3KHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwg
cHJvZ3JhbS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9PUCwgY29sb3IuaGFzQWxw
aGEoKSA/IFNob3VsZEJsZW5kIDogMCk7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3
UmVwYWludENvdW50ZXIoaW50IHZhbHVlLCBpbnQgcG9pbnRTaXplLCBjb25zdCBGbG9hdFBvaW50
JiB0YXJnZXRQb2ludCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJp
eCkKQEAgLTQwNiwxNzUgKzM5NCwxMDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0
dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEkKIHsKICAg
ICBib29sIHVzZVJlY3QgPSBmbGFncyAmIFNob3VsZFVzZUFSQlRleHR1cmVSZWN0OwogICAgIGJv
b2wgbWFza2VkID0gISFtYXNrVGV4dHVyZTsKLSAgICBib29sIG5lZWRzQW50aWFsaWFzaW5nID0g
bV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcgJiYgIW1vZGVsVmlld01hdHJpeC5pc0lu
dGVnZXJUcmFuc2xhdGlvbigpOwotCi0gICAgaWYgKCF1c2VSZWN0ICYmIG5lZWRzQW50aWFsaWFz
aW5nICYmIGRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh0ZXh0dXJlLCBmbGFncywgdGV4dHVy
ZVNpemUsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgbWFza1RleHR1cmUs
IGV4cG9zZWRFZGdlcykpCi0gICAgICAgIHJldHVybjsKKyAgICBib29sIHVzZUFudGlhbGlhc2lu
ZyA9IG1fZW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nCisgICAgICAgICYmIGV4cG9zZWRF
ZGdlcyA9PSBBbGxFZGdlcworICAgICAgICAmJiAhbW9kZWxWaWV3TWF0cml4Lm1hcFF1YWQodGFy
Z2V0UmVjdCkuaXNSZWN0aWxpbmVhcigpOwogCiAgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6Ok9wdGlvbnMgb3B0aW9ucyA9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJl
OwogICAgIGlmIChtYXNrZWQpCiAgICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6Ok1hc2s7Ci0gICAgaWYgKGZsYWdzICYgU2hvdWxkVXNlQVJCVGV4dHVyZVJlY3Qp
CisgICAgaWYgKHVzZVJlY3QpCiAgICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OlJlY3Q7CiAgICAgaWYgKG9wYWNpdHkgPCAxKQogICAgICAgICBvcHRpb25zIHw9
IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5OworICAgIGlmICh1c2VBbnRpYWxp
YXNpbmcpIHsKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6
QW50aWFsaWFzOworICAgICAgICBmbGFncyB8PSBTaG91bGRBbnRpYWxpYXM7CisgICAgfQorCisg
ICAgaWYgKG1hc2tlZCB8fCB1c2VBbnRpYWxpYXNpbmcgfHwgb3BhY2l0eSA8IDEpCisgICAgICAg
IGZsYWdzIHw9IFNob3VsZEJsZW5kOwogCiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtPiBwcm9ncmFtOwogICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsKLSAgICBt
X2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7Ci0KICAgICBkcmF3
VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgdGV4dHVyZSwgZmxhZ3MsIHRl
eHR1cmVTaXplLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIG1hc2tUZXh0
dXJlKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQogewotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4g
cHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTb2xpZENvbG9y
KTsKKyAgICBGbGFncyBmbGFncyA9IDA7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
Ok9wdGlvbnMgb3B0aW9ucyA9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTb2xpZENvbG9y
OworICAgIGlmICghbWF0cml4Lm1hcFF1YWQocmVjdCkuaXNSZWN0aWxpbmVhcigpKSB7CisgICAg
ICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkFudGlhbGlhczsKKyAg
ICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQgfCBTaG91bGRBbnRpYWxpYXM7CisgICAgfQorCisg
ICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNo
YXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0o
b3B0aW9ucyk7CiAgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlE
KCkpOwogCiAgICAgZmxvYXQgciwgZywgYiwgYTsKICAgICBjb2xvci5nZXRSR0JBKHIsIGcsIGIs
IGEpOwogICAgIG1fY29udGV4dDNELT51bmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigp
LCByLCBnLCBiLCBhKTsKKyAgICBpZiAoYSA8IDEpCisgICAgICAgIGZsYWdzIHw9IFNob3VsZEJs
ZW5kOwogCi0gICAgZHJhd1F1YWQocmVjdCwgbWF0cml4LCBwcm9ncmFtLmdldCgpLCBHcmFwaGlj
c0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCBhIDwgMSA/IFNob3VsZEJsZW5kIDogMCk7Ci19Ci0K
LXN0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2aWV3cG9ydE1hdHJpeChHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dDNEKQotewotICAgIEdDM0RpbnQgdmlld3BvcnRbNF07Ci0gICAgY29udGV4
dDNELT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQsIHZpZXdwb3J0KTsK
LQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKLSAgICBtYXRyaXgudHJhbnNsYXRl
M2Qodmlld3BvcnRbMF0sIHZpZXdwb3J0WzFdLCAwKTsKLSAgICBtYXRyaXguc2NhbGUzZCh2aWV3
cG9ydFsyXSwgdmlld3BvcnRbM10sIDApOwotCi0gICAgLy8gTWFwIHgsIHkgYW5kIHogdG8gdW5p
dCBzcXVhcmUgZnJvbSBPcGVuR0wgbm9ybWFsaXplZCBkZXZpY2UKLSAgICAvLyBjb29yZGluYXRl
cyB3aGljaCBhcmUgLTEgdG8gMSBvbiBldmVyeSBheGlzLgotICAgIG1hdHJpeC50cmFuc2xhdGUz
ZCgwLjUsIDAuNSwgMC41KTsKLSAgICBtYXRyaXguc2NhbGUzZCgwLjUsIDAuNSwgMC41KTsKLQot
ICAgIHJldHVybiBtYXRyaXg7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjYWxlTGluZUVxdWF0aW9uQ29l
ZmZlY2llbnRzVG9PcHRpbWl6ZURpc3RhbmNlQ2FsY3VsYXRpb24oZmxvYXQqIGNvZWZmZWNpZW50
cykKLXsKLSAgICAvLyBJbiB0aGUgZnJhZ21lbnQgc2hhZGVyIHdlIHdhbnQgdG8gY2FsY3VsYXRl
IHRoZSBkaXN0YW5jZSBmcm9tIHRoaXMKLSAgICAvLyBsaW5lIHRvIGEgcG9pbnQgKHApLCB3aGlj
aCBpcyBnaXZlbiBieSB0aGUgZm9ybXVsYToKLSAgICAvLyAoQSpwLnggKyBCKnAueSArIEMpIC8g
c3FydCAoYV4yICsgYl4yKQotICAgIC8vIFdlIGNhbiBkbyBhIHNtYWxsIGFtb3VudCBvZiBwcmVj
YWxjdWxhdGlvbiBoZXJlIHRvIHJlZHVjZSB0aGUKLSAgICAvLyBhbW91bnQgb2YgbWF0aCBpbiB0
aGUgc2hhZGVyIGJ5IHNjYWxpbmcgdGhlIGNvZWZmZWNpZW50cyBub3cuCi0gICAgZmxvYXQgc2Nh
bGUgPSAxLjAgLyBGbG9hdFBvaW50KGNvZWZmZWNpZW50c1swXSwgY29lZmZlY2llbnRzWzFdKS5s
ZW5ndGgoKTsKLSAgICBjb2VmZmVjaWVudHNbMF0gPSBjb2VmZmVjaWVudHNbMF0gKiBzY2FsZTsK
LSAgICBjb2VmZmVjaWVudHNbMV0gPSBjb2VmZmVjaWVudHNbMV0gKiBzY2FsZTsKLSAgICBjb2Vm
ZmVjaWVudHNbMl0gPSBjb2VmZmVjaWVudHNbMl0gKiBzY2FsZTsKLX0KLQotc3RhdGljIHZvaWQg
Z2V0U3RhbmRhcmRFcXVhdGlvbkNvZWZmZWNpZW50c0ZvckxpbmUoY29uc3QgRmxvYXRQb2ludCYg
cDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCogY29lZmZlY2llbnRzKQotewotICAgIC8v
IEdpdmVuIHR3byBwb2ludHMsIHRoZSBzdGFuZGFyZCBlcXVhdGlvbiBvZiBhIGxpbmUgKEF4ICsg
QnkgKyBDID0gMCkKLSAgICAvLyBjYW4gYmUgY2FsY3VsYXRlZCB2aWEgdGhlIGZvcm11bGE6Ci0g
ICAgLy8gKHAxLnkg4oCTIHAyLnkpeCArIChwMS54IOKAkyBwMi54KXkgKyAoKHAxLngqcDIueSkg
4oCTIChwMi54KnAxLnkpKSA9IDAKLSAgICBjb2VmZmVjaWVudHNbMF0gPSBwMS55KCkgLSBwMi55
KCk7Ci0gICAgY29lZmZlY2llbnRzWzFdID0gcDIueCgpIC0gcDEueCgpOwotICAgIGNvZWZmZWNp
ZW50c1syXSA9IHAxLngoKSAqIHAyLnkoKSAtIHAyLngoKSAqIHAxLnkoKTsKLSAgICBzY2FsZUxp
bmVFcXVhdGlvbkNvZWZmZWNpZW50c1RvT3B0aW1pemVEaXN0YW5jZUNhbGN1bGF0aW9uKGNvZWZm
ZWNpZW50cyk7CisgICAgZHJhdyhyZWN0LCBtYXRyaXgsIHByb2dyYW0uZ2V0KCksIEdyYXBoaWNz
Q29udGV4dDNEOjpUUklBTkdMRV9GQU4sIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgcXVhZFRv
RWRnZUFycmF5KGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgZmxvYXQqIGVkZ2VBcnJheSkKK3ZvaWQg
VGV4dHVyZU1hcHBlckdMOjpkcmF3RWRnZVRyaWFuZ2xlcyhUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbSogcHJvZ3JhbSkKIHsKLSAgICBpZiAocXVhZC5pc0NvdW50ZXJjbG9ja3dpc2UoKSkgewot
ICAgICAgICBnZXRTdGFuZGFyZEVxdWF0aW9uQ29lZmZlY2llbnRzRm9yTGluZShxdWFkLnA0KCks
IHF1YWQucDMoKSwgZWRnZUFycmF5KTsKLSAgICAgICAgZ2V0U3RhbmRhcmRFcXVhdGlvbkNvZWZm
ZWNpZW50c0ZvckxpbmUocXVhZC5wMygpLCBxdWFkLnAyKCksIGVkZ2VBcnJheSArIDMpOwotICAg
ICAgICBnZXRTdGFuZGFyZEVxdWF0aW9uQ29lZmZlY2llbnRzRm9yTGluZShxdWFkLnAyKCksIHF1
YWQucDEoKSwgZWRnZUFycmF5ICsgNik7Ci0gICAgICAgIGdldFN0YW5kYXJkRXF1YXRpb25Db2Vm
ZmVjaWVudHNGb3JMaW5lKHF1YWQucDEoKSwgcXVhZC5wNCgpLCBlZGdlQXJyYXkgKyA5KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBnZXRTdGFuZGFyZEVxdWF0aW9uQ29lZmZlY2llbnRz
Rm9yTGluZShxdWFkLnA0KCksIHF1YWQucDEoKSwgZWRnZUFycmF5KTsKLSAgICBnZXRTdGFuZGFy
ZEVxdWF0aW9uQ29lZmZlY2llbnRzRm9yTGluZShxdWFkLnAxKCksIHF1YWQucDIoKSwgZWRnZUFy
cmF5ICsgMyk7Ci0gICAgZ2V0U3RhbmRhcmRFcXVhdGlvbkNvZWZmZWNpZW50c0ZvckxpbmUocXVh
ZC5wMigpLCBxdWFkLnAzKCksIGVkZ2VBcnJheSArIDYpOwotICAgIGdldFN0YW5kYXJkRXF1YXRp
b25Db2VmZmVjaWVudHNGb3JMaW5lKHF1YWQucDMoKSwgcXVhZC5wNCgpLCBlZGdlQXJyYXkgKyA5
KTsKKyAgICBjb25zdCBHQzNEZmxvYXQgTGVmdCA9IDA7CisgICAgY29uc3QgR0MzRGZsb2F0IFRv
cCA9IDA7CisgICAgY29uc3QgR0MzRGZsb2F0IFJpZ2h0ID0gMTsKKyAgICBjb25zdCBHQzNEZmxv
YXQgQm90dG9tID0gMTsKKyAgICBjb25zdCBHQzNEZmxvYXQgQ2VudGVyID0gMC41OworI2RlZmlu
ZSBTSURFX1RSSUFOR0xFKHgxLCB5MSwgeDIsIHkyKSB4MSwgeTEsIHgxLCB5MSwgeDIsIHkyLCB4
MiwgeTIsIENlbnRlciwgQ2VudGVyLCAoeDEgKyB4MikgLyAyLCAoeTEgKyB5MikgLyAyCisgICAg
c3RhdGljIGNvbnN0IEdDM0RmbG9hdCB1bml0UmVjdFNpZGVUcmlhbmdsZXNbXSA9IHsKKyAgICAg
ICAgU0lERV9UUklBTkdMRShMZWZ0LCBUb3AsIFJpZ2h0LCBUb3ApLAorICAgICAgICBTSURFX1RS
SUFOR0xFKExlZnQsIFRvcCwgTGVmdCwgQm90dG9tKSwKKyAgICAgICAgU0lERV9UUklBTkdMRShS
aWdodCwgVG9wLCBSaWdodCwgQm90dG9tKSwKKyAgICAgICAgU0lERV9UUklBTkdMRShMZWZ0LCBC
b3R0b20sIFJpZ2h0LCBCb3R0b20pCisgICAgfTsKKyN1bmRlZiBTSURFX1RSSUFOR0xFCisgICAg
UGxhdGZvcm0zRE9iamVjdCB2Ym8gPSBkYXRhKCkuZ2V0U3RhdGljVkJPKEdyYXBoaWNzQ29udGV4
dDNEOjpBUlJBWV9CVUZGRVIsIHNpemVvZihHQzNEZmxvYXQpICogNDgsIHVuaXRSZWN0U2lkZVRy
aWFuZ2xlcyk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkFSUkFZX0JVRkZFUiwgdmJvKTsKKyAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRl
cihwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQs
IGZhbHNlLCAwLCAwKTsKKyAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRl
eHQzRDo6VFJJQU5HTEVTLCAwLCAxMik7CiB9CiAKLXN0YXRpYyBGbG9hdFNpemUgc2NhbGVkVmVj
dG9yRGlmZmVyZW5jZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50MiwgZmxvYXQgc2NhbGUpCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1VuaXRSZWN0
KFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCBHQzNEZW51bSBkcmF3aW5nTW9k
ZSkKIHsKLSAgICBGbG9hdFNpemUgdmVjdG9yID0gcG9pbnQxIC0gcG9pbnQyOwotICAgIGlmICh2
ZWN0b3IuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkpCi0gICAgICAgIHZlY3Rvci5zY2FsZSgxLjAg
LyB2ZWN0b3IuZGlhZ29uYWxMZW5ndGgoKSk7Ci0KLSAgICB2ZWN0b3Iuc2NhbGUoc2NhbGUpOwot
ICAgIHJldHVybiB2ZWN0b3I7CisgICAgc3RhdGljIGNvbnN0IEdDM0RmbG9hdCB1bml0UmVjdFtd
ID0geyAwLCAwLCAxLCAwLCAxLCAxLCAwLCAxIH07CisgICAgUGxhdGZvcm0zRE9iamVjdCB2Ym8g
PSBkYXRhKCkuZ2V0U3RhdGljVkJPKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHNp
emVvZihHQzNEZmxvYXQpICogOCwgdW5pdFJlY3QpOworICAgIG1fY29udGV4dDNELT5iaW5kQnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHZibyk7CisgICAgbV9jb250ZXh0
M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSwgMiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgbV9jb250ZXh0M0QtPmRy
YXdBcnJheXMoZHJhd2luZ01vZGUsIDAsIDQpOwogfQogCi1zdGF0aWMgRmxvYXRRdWFkIGluZmxh
dGVRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgZmxvYXQgZGlzdGFuY2UpCit2b2lkIFRleHR1
cmVNYXBwZXJHTDo6ZHJhdyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBz
aGFkZXJQcm9ncmFtLCBHQzNEZW51bSBkcmF3aW5nTW9kZSwgRmxhZ3MgZmxhZ3MpCiB7Ci0gICAg
RmxvYXRRdWFkIGV4cGFuZGVkUXVhZCA9IHF1YWQ7Ci0gICAgZXhwYW5kZWRRdWFkLnNldFAxKGV4
cGFuZGVkUXVhZC5wMSgpICsgc2NhbGVkVmVjdG9yRGlmZmVyZW5jZShxdWFkLnAxKCksIHF1YWQu
cDIoKSwgZGlzdGFuY2UpKTsKLSAgICBleHBhbmRlZFF1YWQuc2V0UDQoZXhwYW5kZWRRdWFkLnA0
KCkgKyBzY2FsZWRWZWN0b3JEaWZmZXJlbmNlKHF1YWQucDQoKSwgcXVhZC5wMygpLCBkaXN0YW5j
ZSkpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9CisgICAgICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4KG1vZGVsVmlld01hdHJpeCkKKyAgICAgICAgICAgIC5tdWx0aXBseShUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVjdChGbG9hdFJlY3QoMCwgMCwgMSwgMSksIHJlY3Qp
KTsKIAotICAgIGV4cGFuZGVkUXVhZC5zZXRQMShleHBhbmRlZFF1YWQucDEoKSArIHNjYWxlZFZl
Y3RvckRpZmZlcmVuY2UocXVhZC5wMSgpLCBxdWFkLnA0KCksIGRpc3RhbmNlKSk7Ci0gICAgZXhw
YW5kZWRRdWFkLnNldFAyKGV4cGFuZGVkUXVhZC5wMigpICsgc2NhbGVkVmVjdG9yRGlmZmVyZW5j
ZShxdWFkLnAyKCksIHF1YWQucDMoKSwgZGlzdGFuY2UpKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5h
YmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7Cisg
ICAgc2hhZGVyUHJvZ3JhbS0+c2V0TWF0cml4KHNoYWRlclByb2dyYW0tPm1vZGVsVmlld01hdHJp
eExvY2F0aW9uKCksIG1hdHJpeCk7CisgICAgc2hhZGVyUHJvZ3JhbS0+c2V0TWF0cml4KHNoYWRl
clByb2dyYW0tPnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpLCBkYXRhKCkucHJvamVjdGlvbk1h
dHJpeCk7CiAKLSAgICBleHBhbmRlZFF1YWQuc2V0UDIoZXhwYW5kZWRRdWFkLnAyKCkgKyBzY2Fs
ZWRWZWN0b3JEaWZmZXJlbmNlKHF1YWQucDIoKSwgcXVhZC5wMSgpLCBkaXN0YW5jZSkpOwotICAg
IGV4cGFuZGVkUXVhZC5zZXRQMyhleHBhbmRlZFF1YWQucDMoKSArIHNjYWxlZFZlY3RvckRpZmZl
cmVuY2UocXVhZC5wMygpLCBxdWFkLnA0KCksIGRpc3RhbmNlKSk7CisgICAgaWYgKGZsYWdzICYg
U2hvdWxkQmxlbmQpIHsKKyAgICAgICAgbV9jb250ZXh0M0QtPmJsZW5kRnVuYyhHcmFwaGljc0Nv
bnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7Cisg
ICAgICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OkJMRU5EKTsKIAotICAgIGV4cGFuZGVkUXVhZC5zZXRQMyhleHBhbmRlZFF1YWQucDMoKSArIHNj
YWxlZFZlY3RvckRpZmZlcmVuY2UocXVhZC5wMygpLCBxdWFkLnAyKCksIGRpc3RhbmNlKSk7Ci0g
ICAgZXhwYW5kZWRRdWFkLnNldFA0KGV4cGFuZGVkUXVhZC5wNCgpICsgc2NhbGVkVmVjdG9yRGlm
ZmVyZW5jZShxdWFkLnA0KCksIHF1YWQucDEoKSwgZGlzdGFuY2UpKTsKKyAgICBpZiAoZmxhZ3Mg
JiBTaG91bGRBbnRpYWxpYXMpCisgICAgICAgIGRyYXdFZGdlVHJpYW5nbGVzKHNoYWRlclByb2dy
YW0pOworICAgIGVsc2UKKyAgICAgICAgZHJhd1VuaXRSZWN0KHNoYWRlclByb2dyYW0sIGRyYXdp
bmdNb2RlKTsKIAotICAgIHJldHVybiBleHBhbmRlZFF1YWQ7CisgICAgbV9jb250ZXh0M0QtPmRp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsK
IH0KLQotYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1
aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3Qg
RmxvYXRSZWN0JiBvcmlnaW5hbFRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1h
c2tUZXh0dXJlLCB1bnNpZ25lZCBleHBvc2VkRWRnZXMpCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6
ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBw
cm9ncmFtLCB1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYgc2l6
ZSwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9k
ZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4
dHVyZSkKIHsKLSAgICAvLyBUaGUgYW50aWFsaWFzaW5nIHBhdGggZG9lcyBub3Qgc3VwcG9ydCBt
YXNrIHRleHR1cmVzIGF0IHRoZSBtb21lbnQuCi0gICAgaWYgKG1hc2tUZXh0dXJlKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGb3Igbm93IHdlIHB1bnQgb24gcmVuZGVyaW5nIHRp
bGVkIGxheWVycyB3aXRoIGFudGlhbGlhc2luZy4gSXQncyBxdWl0ZSBoYXJkCi0gICAgLy8gdG8g
cmVuZGVyIHRoZW0gd2l0aG91dCBzZWFtcy4KLSAgICBpZiAoZXhwb3NlZEVkZ2VzICE9IEFsbEVk
Z2VzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBUaGUgZ29hbCBoZXJlIGlzIHJl
bmRlciBhIHNsaWdodGx5IGxhcmdlciAoMC43NSBwaXhlbHMgaW4gc2NyZWVuIHNwYWNlKSBxdWFk
IGFuZCB0bwotICAgIC8vIGdyYWR1YWxseSB0YXBlciBvZmYgdGhlIGFscGhhIHZhbHVlcyB0byBk
byBhIHNpbXBsZSB2ZXJzaW9uIG9mIGVkZ2UgZGlzdGFuY2UKLSAgICAvLyBhbnRpYWxpYXNpbmcu
IE5vdGUgaGVyZSB0aGF0IHdlIGFyZSBhbHNvIGluY2x1ZGluZyB0aGUgdmlld3BvcnQgbWF0cml4
ICh3aGljaAotICAgIC8vIHRyYW5zbGF0ZXMgZnJvbSBub3JtYWxpemVkIGRldmljZSBjb29yZGlu
YXRlcyB0byBzY3JlZW4gY29vcmRpbmF0ZXMpLCBiZWNhdXNlIHRoZXNlCi0gICAgLy8gdmFsdWVz
IGFyZSBjb25zdW1lZCBpbiB0aGUgZnJhZ21lbnQgc2hhZGVyLCB3aGljaCB3b3JrcyBpbiBzY3Jl
ZW4gY29vcmRpbmF0ZXMuCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2NyZWVuU3BhY2VUcmFu
c2Zvcm0gPSB2aWV3cG9ydE1hdHJpeChtX2NvbnRleHQzRC5nZXQoKSkubXVsdGlwbHkoVHJhbnNm
b3JtYXRpb25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpKS5tdWx0aXBseShtb2RlbFZp
ZXdNYXRyaXgpLnRvMmRUcmFuc2Zvcm0oKTsKLSAgICBpZiAoIXNjcmVlblNwYWNlVHJhbnNmb3Jt
LmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRmxvYXRRdWFkIHF1
YWRJblNjcmVlblNwYWNlID0gc2NyZWVuU3BhY2VUcmFuc2Zvcm0ubWFwUXVhZChvcmlnaW5hbFRh
cmdldFJlY3QpOwotCi0gICAgY29uc3QgZmxvYXQgaW5mbGF0aW9uRGlzdGFuY2UgPSAwLjc1Owot
ICAgIEZsb2F0UXVhZCBleHBhbmRlZFF1YWRJblNjcmVlblNwYWNlID0gaW5mbGF0ZVF1YWQocXVh
ZEluU2NyZWVuU3BhY2UsIGluZmxhdGlvbkRpc3RhbmNlKTsKLQotICAgIC8vIEluIHRoZSBub24t
YW50aWFsaWFzZWQgY2FzZSB0aGUgdmVydGljZXMgcGFzc2VkIGFyZSB0aGUgdW5pdCByZWN0YW5n
bGUgYW5kIGRvdWJsZQotICAgIC8vIGFzIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzICgwLDAgMSww
LCAxLDEgYW5kIDAsMSkuIEhlcmUgd2UgbWFwIHRoZSBleHBhbmRlZCBxdWFkCi0gICAgLy8gY29v
cmRpbmF0ZXMgaW4gc2NyZWVuIHNwYWNlIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHJlY3QncyB0ZXh0
dXJlIGNvb3JkaW5hdGVzLgotICAgIC8vIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2Ygc2xpZ2h0bHkg
aW5jcmVhc2luZyB0aGUgc2l6ZSBvZiB0aGUgb3JpZ2luYWwgcXVhZCdzIGdlb21ldHJ5Ci0gICAg
Ly8gaW4gdGhlIHZlcnRleCBzaGFkZXIuCi0gICAgRmxvYXRRdWFkIGV4cGFuZGVkUXVhZEluVGV4
dHVyZUNvb3JkaW5hdGVzID0gc2NyZWVuU3BhY2VUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFF1YWQo
ZXhwYW5kZWRRdWFkSW5TY3JlZW5TcGFjZSk7Ci0gICAgZXhwYW5kZWRRdWFkSW5UZXh0dXJlQ29v
cmRpbmF0ZXMubW92ZSgtb3JpZ2luYWxUYXJnZXRSZWN0LngoKSwgLW9yaWdpbmFsVGFyZ2V0UmVj
dC55KCkpOwotICAgIGV4cGFuZGVkUXVhZEluVGV4dHVyZUNvb3JkaW5hdGVzLnNjYWxlKDEgLyBv
cmlnaW5hbFRhcmdldFJlY3Qud2lkdGgoKSwgMSAvIG9yaWdpbmFsVGFyZ2V0UmVjdC5oZWlnaHQo
KSk7Ci0KLSAgICAvLyBXZSBwcmVwYXJlIGJvdGggdGhlIGV4cGFuZGVkIHF1YWQgZm9yIHRoZSBm
cmFnbWVudCBzaGFkZXIgYXMgd2VsbCBhcyB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcKLSAgICAv
LyBib3ggb2YgdGhhdCBxdWFkLCBhcyB0aGF0IHNlZW1zIG5lY2Vzc2FyeSB0byBwcm9wZXJseSBh
bnRpYWxpYXMgYmFja2ZhY2luZyBxdWFkcy4KLSAgICBmbG9hdCB0YXJnZXRRdWFkRWRnZXNbMjRd
OwotICAgIHF1YWRUb0VkZ2VBcnJheShleHBhbmRlZFF1YWRJblNjcmVlblNwYWNlLCB0YXJnZXRR
dWFkRWRnZXMpOwotICAgIHF1YWRUb0VkZ2VBcnJheShpbmZsYXRlUXVhZChxdWFkSW5TY3JlZW5T
cGFjZS5ib3VuZGluZ0JveCgpLCAgaW5mbGF0aW9uRGlzdGFuY2UpLCB0YXJnZXRRdWFkRWRnZXMg
KyAxMik7Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlvbnMgb3B0aW9ucyA9
IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpBbnRpYWxpYXMgfCBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6VGV4dHVyZTsKLSAgICBpZiAob3BhY2l0eSA8IDEpCi0gICAgICAgIG9wdGlv
bnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wYWNpdHk7Ci0KLSAgICBSZWZQdHI8
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRh
KCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsK
ICAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7Ci0gICAg
bV9jb250ZXh0M0QtPnVuaWZvcm0zZnYocHJvZ3JhbS0+ZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVl
blNwYWNlTG9jYXRpb24oKSwgOCwgdGFyZ2V0UXVhZEVkZ2VzKTsKLQotICAgIGRyYXdUZXh0dXJl
ZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCB0ZXh0dXJlLCBmbGFncywgc2l6ZSwgRHJh
d1F1YWQob3JpZ2luYWxUYXJnZXRSZWN0LCBleHBhbmRlZFF1YWRJblRleHR1cmVDb29yZGluYXRl
cyksIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgMCAvKiBtYXNrVGV4dHVyZSAqLyk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZWRRdWFk
V2l0aFByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qIHByb2dyYW0sIHVpbnQzMl90
IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBEcmF3UXVh
ZCYgcXVhZFRvRHJhdywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJp
eCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCi17Ci0g
ICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleExv
Y2F0aW9uKCkpOwogICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFMCk7CiAgICAgR0MzRGVudW0gdGFyZ2V0ID0gZmxhZ3MgJiBTaG91bGRVc2VB
UkJUZXh0dXJlUmVjdCA/IEdDM0RlbnVtKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVf
QVJCKSA6IEdDM0RlbnVtKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKTsKICAgICBtX2Nv
bnRleHQzRC0+YmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKQEAgLTU5Niw3ICs1MTYsNyBA
QCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcgogICAgIGlmIChvcGFjaXR5IDwgMSB8fCBtYXNrVGV4
dHVyZSkKICAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CiAKLSAgICBkcmF3UXVhZChxdWFk
VG9EcmF3LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNEOjpUUklB
TkdMRV9GQU4sIGZsYWdzKTsKKyAgICBkcmF3KHJlY3QsIG1vZGVsVmlld01hdHJpeCwgcHJvZ3Jh
bSwgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgZmxhZ3MpOwogfQogCiBCaXRtYXBU
ZXh0dXJlR0w6OkJpdG1hcFRleHR1cmVHTChUZXh0dXJlTWFwcGVyR0wqIHRleHR1cmVNYXBwZXIp
CkBAIC0xMTcwLDI2ICsxMDkwLDExIEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uCiAgICAgY29u
c3QgR0MzRGZsb2F0IHVuaXRSZWN0W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07CiAgICAg
bV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4TG9jYXRpb24o
KSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cih1bml0
UmVjdCkpOwogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRp
b25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpCi0gICAgICAgICAgICAubXVsdGlwbHko
bW9kZWxWaWV3TWF0cml4KQotICAgICAgICAgICAgLm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0
cml4KHRhcmdldFJlY3Qud2lkdGgoKSwgMCwgMCwgMCwKLSAgICAgICAgICAgICAgICAwLCB0YXJn
ZXRSZWN0LmhlaWdodCgpLCAwLCAwLAotICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCi0gICAg
ICAgICAgICAgICAgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCAwLCAxKSk7Ci0KLSAg
ICBjb25zdCBHQzNEZmxvYXQgbTRbXSA9IHsKLSAgICAgICAgbWF0cml4Lm0xMSgpLCBtYXRyaXgu
bTEyKCksIG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAotICAgICAgICBtYXRyaXgubTIxKCks
IG1hdHJpeC5tMjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCi0gICAgICAgIG1hdHJp
eC5tMzEoKSwgbWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQoKSwKLSAgICAg
ICAgbWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0cml4Lm00NCgp
Ci0gICAgfTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPQorICAgICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeChtb2RlbFZpZXdNYXRyaXgpCisgICAgICAgICAgICAubXVsdGlwbHko
VHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoRmxvYXRSZWN0KDAsIDAsIDEsIDEpLCB0
YXJnZXRSZWN0KSk7CiAKLSAgICBjb25zdCBHQzNEZmxvYXQgbTRhbGxbXSA9IHsKLSAgICAgICAg
MiwgMCwgMCwgMCwKLSAgICAgICAgMCwgMiwgMCwgMCwKLSAgICAgICAgMCwgMCwgMSwgMCwKLSAg
ICAgICAgLTEsIC0xLCAwLCAxCi0gICAgfTsKKyAgICBzdGF0aWMgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXggZnVsbFByb2plY3Rpb25NYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVj
dFRvUmVjdChGbG9hdFJlY3QoMCwgMCwgMSwgMSksIEZsb2F0UmVjdCgtMSwgLTEsIDIsIDIpKTsK
IAogICAgIGludCYgc3RlbmNpbEluZGV4ID0gY2xpcFN0YWNrKCkuY3VycmVudCgpLnN0ZW5jaWxJ
bmRleDsKIApAQCAtMTIwMiwxMyArMTEwNywxNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVn
aW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgog
ICAgIG1fY29udGV4dDNELT5zdGVuY2lsTWFzaygweGZmICYgfihzdGVuY2lsSW5kZXggLSAxKSk7
CiAKICAgICAvLyBGaXJzdCBjbGVhciB0aGUgZW50aXJlIGJ1ZmZlciBhdCB0aGUgY3VycmVudCBp
bmRleC4KLSAgICBtX2NvbnRleHQzRC0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT5tYXRyaXhM
b2NhdGlvbigpLCAxLCBmYWxzZSwgY29uc3RfY2FzdDxHQzNEZmxvYXQqPihtNGFsbCkpOworICAg
IHByb2dyYW0tPnNldE1hdHJpeChwcm9ncmFtLT5wcm9qZWN0aW9uTWF0cml4TG9jYXRpb24oKSwg
ZnVsbFByb2plY3Rpb25NYXRyaXgpOworICAgIHByb2dyYW0tPnNldE1hdHJpeChwcm9ncmFtLT5t
b2RlbFZpZXdNYXRyaXhMb2NhdGlvbigpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKICAgICBt
X2NvbnRleHQzRC0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0Nv
bnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8pOwogICAgIG1fY29udGV4dDNE
LT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIDAsIDQpOwogCiAg
ICAgLy8gTm93IGFwcGx5IHRoZSBjdXJyZW50IGluZGV4IHRvIHRoZSBuZXcgcXVhZC4KICAgICBt
X2NvbnRleHQzRC0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpSRVBMQUNFLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkVQTEFDRSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFUExBQ0UpOwotICAgIG1f
Y29udGV4dDNELT51bmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEs
IGZhbHNlLCBjb25zdF9jYXN0PEdDM0RmbG9hdCo+KG00KSk7CisgICAgcHJvZ3JhbS0+c2V0TWF0
cml4KHByb2dyYW0tPnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpLCBkYXRhKCkucHJvamVjdGlv
bk1hdHJpeCk7CisgICAgcHJvZ3JhbS0+c2V0TWF0cml4KHByb2dyYW0tPm1vZGVsVmlld01hdHJp
eExvY2F0aW9uKCksIG1hdHJpeCk7CiAgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgNCk7CiAKICAgICAvLyBDbGVhciB0aGUgc3Rh
dGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckdMLmgKaW5kZXggNTlkYjNkMzk3OWMwZDEwYmU0MTQ4MTVlNzgyMzE1
ZGYwN2MzNWExNi4uYWExMzMxMmZhYWZjYTMxZmRmMWQxYzQxNGQzNWMyN2NhYzgwMmNhMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJHTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyR0wuaApAQCAtNDQsNyArNDQsOCBAQCBwdWJsaWM6CiAgICAgZW51bSBGbGFn
IHsKICAgICAgICAgU2hvdWxkQmxlbmQgPSAweDAxLAogICAgICAgICBTaG91bGRGbGlwVGV4dHVy
ZSA9IDB4MDIsCi0gICAgICAgIFNob3VsZFVzZUFSQlRleHR1cmVSZWN0ID0gMHgwNAorICAgICAg
ICBTaG91bGRVc2VBUkJUZXh0dXJlUmVjdCA9IDB4MDQsCisgICAgICAgIFNob3VsZEFudGlhbGlh
cyA9IDB4MDgKICAgICB9OwogCiAgICAgdHlwZWRlZiBpbnQgRmxhZ3M7CkBAIC05OCwyMiArOTks
MTMgQEAgcHJpdmF0ZToKICAgICAgICAgVmVjdG9yPENsaXBTdGF0ZT4gY2xpcFN0YWNrOwogICAg
IH07CiAKLSAgICBzdHJ1Y3QgRHJhd1F1YWQgewotICAgICAgICBEcmF3UXVhZChjb25zdCBGbG9h
dFJlY3QmIG9yaWdpbmFsVGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRRdWFkJiB0YXJnZXRSZWN0TWFw
cGVkVG9Vbml0U3F1YXJlID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgRmxvYXRTaXplKDEsIDEp
KSkKLSAgICAgICAgICAgIDogb3JpZ2luYWxUYXJnZXRSZWN0KG9yaWdpbmFsVGFyZ2V0UmVjdCkK
LSAgICAgICAgICAgICwgdGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZSh0YXJnZXRSZWN0TWFw
cGVkVG9Vbml0U3F1YXJlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBGbG9hdFJl
Y3Qgb3JpZ2luYWxUYXJnZXRSZWN0OwotICAgICAgICBGbG9hdFF1YWQgdGFyZ2V0UmVjdE1hcHBl
ZFRvVW5pdFNxdWFyZTsKLSAgICB9OwotCiAgICAgVGV4dHVyZU1hcHBlckdMKCk7CiAKLSAgICBi
b29sIGRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncywg
Y29uc3QgSW50U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYgb3JpZ2luYWxUYXJnZXRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBj
b25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzKTsK
LSAgICB2b2lkIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbSosIHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBJbnRTaXplJiwgY29uc3Qg
RHJhd1F1YWQmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBm
bG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7Ci0gICAgdm9p
ZCBkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
b2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiwgR0MzRGVudW0gZHJh
d2luZ01vZGUsIEZsYWdzKTsKKyAgICB2b2lkIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSosIHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25z
dCBJbnRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFz
a1RleHR1cmUpOworICAgIHZvaWQgZHJhdyhjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bSosIEdDM0RlbnVtIGRyYXdpbmdNb2RlLCBGbGFncyk7CisKKyAgICB2b2lkIGRyYXdVbml0UmVj
dChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSosIEdDM0RlbnVtIGRyYXdpbmdNb2RlKTsKKyAg
ICB2b2lkIGRyYXdFZGdlVHJpYW5nbGVzKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKik7CiAK
ICAgICBib29sIGJlZ2luU2Npc3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBj
b25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIGJpbmREZWZhdWx0U3VyZmFjZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKaW5kZXggMmQ4NmJmODU5ZGE4NjE3
ZmM0ODc5ZjJkNzE3NTkyMjhhYTFjMDQzZi4uMjhiMzNiNGUyYjFiZWFlNzE0MzZjOGRiM2NjMDUw
MjUxMDE3ZjdjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3Bw
CkBAIC03MCw2ICs3MCwxOCBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleAogICAgIExPRyhDb21w
b3NpdGluZywgIlByb2dyYW0gbG9nOiAlc1xuIiwgbG9nLnV0ZjgoKS5kYXRhKCkpOwogfQogCit2
b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpzZXRNYXRyaXgoR0MzRHVpbnQgbG9jYXRp
b24sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCit7CisgICAgR0MzRGZsb2F0
IG1hdHJpeEFzRmxvYXRzW10gPSB7CisgICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0xMigp
LCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQoKSwKKyAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRy
aXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgpLAorICAgICAgICBtYXRyaXgubTMx
KCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCksCisgICAgICAgIG1h
dHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5tNDQoKQorICAg
IH07CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIDEsIGZhbHNl
LCBtYXRyaXhBc0Zsb2F0cyk7Cit9CisKIEdDM0R1aW50IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtOjpnZXRMb2NhdGlvbihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFZhcmlhYmxlVHlwZSB0
eXBlKQogewogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBHQzNEdWludD46Oml0ZXJhdG9yIGl0
ID0gbV92YXJpYWJsZXMuZmluZChuYW1lKTsKQEAgLTEwNiwzMiArMTE4LDY2IEBAIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKQogICAgIG1f
Y29udGV4dC0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFtSUQpOwogfQogCi1zdGF0aWMgY29uc3QgY2hh
ciogdmVydGV4U2hhZGVyU291cmNlID0KKyNkZWZpbmUgR0xTTF9ESVJFQ1RJVkUoLi4uKSAiIyIj
X19WQV9BUkdTX18iXG4iCitzdGF0aWMgY29uc3QgY2hhciogdmVydGV4VGVtcGxhdGUgPQogICAg
IFNUUklOR0lGWSgKLSAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OworICAgICAgICBhdHRy
aWJ1dGUgdmVjNCBhX3ZlcnRleDsKKyAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbW9kZWxWaWV3TWF0
cml4OworICAgICAgICB1bmlmb3JtIG1hdDQgdV9wcm9qZWN0aW9uTWF0cml4OwogICAgICAgICB1
bmlmb3JtIGZsb2F0IHVfZmxpcDsKICAgICAgICAgdW5pZm9ybSB2ZWMyIHVfdGV4dHVyZVNpemU7
Ci0gICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OworCiAgICAgICAgIHZhcnlpbmcgdmVj
MiB2X3RleENvb3JkOwogICAgICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7CisgICAg
ICAgIHZhcnlpbmcgZmxvYXQgdl9hbnRpYWxpYXM7CisKKyAgICAgICAgdm9pZCBub29wKHZlYzIp
IHsgfQorCisgICAgICAgIHZlYzQgdG9TY3JlZW5TcGFjZSh2ZWMyIHBvcykgeyByZXR1cm4gdmVj
NChwb3MsIDAuLCAxLikgKiB1X21vZGVsVmlld01hdHJpeDsgfQorCisgICAgICAgIC8vIFRoaXMg
ZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgd2UgZ2V0IGVkZ2UgdHJpYW5n
bGVzIHdpdGggY29udHJvbCBwb2ludHMsCisgICAgICAgIC8vIGEgY29udHJvbCBwb2ludCBiZWlu
ZyB0aGUgbmVhcmVzdCBwb2ludCB0byB0aGUgY29vcmRpbmF0ZSB0aGF0IGlzIG9uIHRoZSBlZGdl
LgorICAgICAgICB2b2lkIGFwcGx5QW50aWFsaWFzKGlub3V0IHZlYzIgcG9zaXRpb24pCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIFdlIGNvdW50IG9uIHRoZSBmYWN0IHRoYXQgcXVhZCBwYXNz
ZWQgaW4gaXMgYWx3YXlzIGEgdW5pdCByZWN0LAorICAgICAgICAgICAgLy8gYW5kIHRoZSB0cmFu
c2Zvcm1hdGlvbiBtYXRyaXggYXBwbGllcyB0aGUgcmVhbCByZWN0LgorICAgICAgICAgICAgY29u
c3QgdmVjMiBjZW50ZXIgPSB2ZWMyKDAuNSwgMC41KTsKKyAgICAgICAgICAgIGNvbnN0IGZsb2F0
IGFudGlhbGlhc0luZmxhdGlvbkRpc3RhbmNlID0gMS47CisKKyAgICAgICAgICAgIC8vIFdlIHBh
c3MgdGhlIGNvbnRyb2wgcG9pbnQgYXMgdGhlIHp3IGNvb3JkaW5hdGVzIG9mIHRoZSB2ZXJ0ZXgu
CisgICAgICAgICAgICAvLyBUaGUgY29udHJvbCBwb2ludCBpcyB0aGUgcG9pbnQgb24gdGhlIGVk
Z2UgY2xvc2VzdCB0byB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAgICAgICAgICAgIC8vIFRoZSBj
b250cm9sIHBvaW50IGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgYW50aWFsaWFzIHZhbHVlLgorICAg
ICAgICAgICAgdmVjMiBjb250cm9sUG9pbnQgPSBhX3ZlcnRleC56dzsKKworICAgICAgICAgICAg
Ly8gRmlyc3Qgd2UgY2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBpbiBzY3JlZW4gc3BhY2UuCisgICAg
ICAgICAgICB2ZWM0IGNlbnRlckluU2NyZWVuQ29vcmRpbmF0ZXMgPSB0b1NjcmVlblNwYWNlKGNl
bnRlcik7CisgICAgICAgICAgICB2ZWM0IGNvbnRyb2xQb2ludEluU2NyZWVuQ29vcmRpbmF0ZXMg
PSB0b1NjcmVlblNwYWNlKGNvbnRyb2xQb2ludCk7CisgICAgICAgICAgICBmbG9hdCBzY3JlZW5T
cGFjZURpc3RhbmNlID0gZGlzdGFuY2UoY2VudGVySW5TY3JlZW5Db29yZGluYXRlcywgY29udHJv
bFBvaW50SW5TY3JlZW5Db29yZGluYXRlcyk7CisKKyAgICAgICAgICAgIC8vIFdlIGFkZCB0aGUg
aW5mbGF0aW9uIGRpc3RhbmNlIHRvIHRoZSBjb21wdXRlZCBkaXN0YW5jZSwgYW5kIGNvbXB1dGUg
dGhlIHJhdGlvLgorICAgICAgICAgICAgZmxvYXQgaW5mbGF0aW9uUmF0aW8gPSAoc2NyZWVuU3Bh
Y2VEaXN0YW5jZSArIGFudGlhbGlhc0luZmxhdGlvbkRpc3RhbmNlKSAvIHNjcmVlblNwYWNlRGlz
dGFuY2U7CisKKyAgICAgICAgICAgIC8vIHZfYW50aWFsaWFzIG5lZWRzIHRvIGJlIDAgZm9yIHRo
ZSBvdXRlciBlZGdlIGFuZCAxLiBmb3IgdGhlIGlubmVyIGVkZ2UuCisgICAgICAgICAgICAvLyBT
aW5jZSB0aGUgY29udHJvbFBvaW50IGlzIGVxdWFsIHRvIHRoZSBwb3NpdGlvbiBpbiB0aGUgZWRn
ZSB2ZXJ0aWNlcywgdGhlIHZhbHVlIGlzIGFsd2F5cyAwIGZvciB0aG9zZS4KKyAgICAgICAgICAg
IC8vIEZvciB0aGUgY2VudGVyIHBvaW50LCB0aGUgZGlzdGFuY2UgaXMgYWx3YXlzIDAuNSwgc28g
d2Ugbm9ybWFsaXplIHRvIDEuIGJ5IG11bHRpcGx5aW5nIGJ5IDIuCisgICAgICAgICAgICAvLyBC
eSBtdWx0cGx5aW5nIGJ5IGluZmxhdGlvblJhdGlvIGFuZCBkaXZpZGluZyBieSAoaW5mbGF0aW9u
UmF0aW8gLSAxKSwKKyAgICAgICAgICAgIC8vIFdlIG1ha2Ugc3VyZSB0aGF0IHRoZSB2YXJ5aW5n
IGludGVycG9sYXRlcyBiZXR3ZWVuIDAgKG91dGVyIGVkZ2UpLCAxIChpbm5lciBlZGdlKSBhbmQg
biA+IDEgKGNlbnRlcikuCisgICAgICAgICAgICB2X2FudGlhbGlhcyA9IGRpc3RhbmNlKGNvbnRy
b2xQb2ludCwgcG9zaXRpb24pICogMi4gKiBpbmZsYXRpb25SYXRpbyAvIChpbmZsYXRpb25SYXRp
byAtIDEuKTsKKworICAgICAgICAgICAgLy8gTm93IGluZmxhdGUgdGhlIGFjdHVhbCBwb3NpdGlv
bi4KKyAgICAgICAgICAgIHBvc2l0aW9uID0gY2VudGVyICsgKHBvc2l0aW9uIC0gY2VudGVyKSAq
IGluZmxhdGlvblJhdGlvOworICAgICAgICB9CiAKICAgICAgICAgdm9pZCBtYWluKHZvaWQpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHZlYzQgcG9zaXRpb24gPSBhX3ZlcnRleDsKKyAgICAgICAg
ICAgIHZlYzIgcG9zaXRpb24gPSBhX3ZlcnRleC54eTsKKyAgICAgICAgICAgIGFwcGx5QW50aWFs
aWFzSWZOZWVkZWQocG9zaXRpb24pOwogICAgICAgICAgICAgdl90ZXhDb29yZCA9IHZlYzIocG9z
aXRpb24ueCwgbWl4KHBvc2l0aW9uLnksIDEuIC0gcG9zaXRpb24ueSwgdV9mbGlwKSkgKiB1X3Rl
eHR1cmVTaXplOwotICAgICAgICAgICAgdl9tYXNrVGV4Q29vcmQgPSB2ZWMyKHBvc2l0aW9uKTsK
LSAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiBhX3ZlcnRleDsKKyAgICAgICAg
ICAgIHZfbWFza1RleENvb3JkID0gcG9zaXRpb247CisgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9
IHVfcHJvamVjdGlvbk1hdHJpeCAqIHVfbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwg
MC4sIDEuKTsKICAgICAgICAgfQogICAgICk7CiAKLSNkZWZpbmUgR0xTTF9ESVJFQ1RJVkUoLi4u
KSAiIyIjX19WQV9BUkdTX18iXG4iCi0jZGVmaW5lIERFRklORV9BUFBMSUVSKE5hbWUpIFwKLSAg
ICAiI2lmZGVmIEVOQUJMRV8iI05hbWUiXG4iIFwKLSAgICAiI2RlZmluZSBhcHBseSIjTmFtZSJJ
Zk5lZWRlZCBhcHBseSIjTmFtZSJcbiJcCi0gICAgIiNlbHNlXG4iXAotICAgICIjZGVmaW5lIGFw
cGx5IiNOYW1lIklmTmVlZGVkIG5vb3BcbiJcCi0gICAgIiNlbmRpZlxuIgotCiAjZGVmaW5lIFJF
Q1RfVEVYVFVSRV9ESVJFQ1RJVkUgXAogICAgIEdMU0xfRElSRUNUSVZFKGlmZGVmIEVOQUJMRV9S
ZWN0KSBcCiAgICAgICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBTYW1wbGVyVHlwZSBzYW1wbGVy
MkRSZWN0KSBcCkBAIC0xNDEsMjkgKzE4NywxNCBAQCBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4
U2hhZGVyU291cmNlID0KICAgICAgICAgR0xTTF9ESVJFQ1RJVkUoZGVmaW5lIFNhbXBsZXJGdW5j
dGlvbiB0ZXh0dXJlMkQpIFwKICAgICBHTFNMX0RJUkVDVElWRShlbmRpZikKIAotI2RlZmluZSBF
TkFCTEVfQVBQTElFUihOYW1lKSAiI2RlZmluZSBFTkFCTEVfIiNOYW1lIlxuIgorI2RlZmluZSBF
TkFCTEVfQVBQTElFUihOYW1lKSAiI2RlZmluZSBFTkFCTEVfIiNOYW1lIlxuI2RlZmluZSBhcHBs
eSIjTmFtZSJJZk5lZWRlZCBhcHBseSIjTmFtZSJcbiIKKyNkZWZpbmUgRElTQUJMRV9BUFBMSUVS
KE5hbWUpICIjZGVmaW5lIGFwcGx5IiNOYW1lIklmTmVlZGVkIG5vb3BcbiIKICNkZWZpbmUgQkxV
Ul9DT05TVEFOVFMgXAogICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBHQVVTU0lBTl9LRVJORUxf
SEFMRl9XSURUSCAxMSkgXAogICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBHQVVTU0lBTl9LRVJO
RUxfU1RFUCAwLjIpCiAKIAogc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50VGVtcGxhdGUgPQot
ICAgIERFRklORV9BUFBMSUVSKFRleHR1cmUpCi0gICAgREVGSU5FX0FQUExJRVIoU29saWRDb2xv
cikKLSAgICBERUZJTkVfQVBQTElFUihPcGFjaXR5KQotICAgIERFRklORV9BUFBMSUVSKE1hc2sp
Ci0gICAgREVGSU5FX0FQUExJRVIoQW50aWFsaWFzKQotICAgIERFRklORV9BUFBMSUVSKEdyYXlz
Y2FsZUZpbHRlcikKLSAgICBERUZJTkVfQVBQTElFUihTZXBpYUZpbHRlcikKLSAgICBERUZJTkVf
QVBQTElFUihTYXR1cmF0ZUZpbHRlcikKLSAgICBERUZJTkVfQVBQTElFUihIdWVSb3RhdGVGaWx0
ZXIpCi0gICAgREVGSU5FX0FQUExJRVIoSW52ZXJ0RmlsdGVyKQotICAgIERFRklORV9BUFBMSUVS
KEJyaWdodG5lc3NGaWx0ZXIpCi0gICAgREVGSU5FX0FQUExJRVIoQ29udHJhc3RGaWx0ZXIpCi0g
ICAgREVGSU5FX0FQUExJRVIoT3BhY2l0eUZpbHRlcikKLSAgICBERUZJTkVfQVBQTElFUihCbHVy
RmlsdGVyKQotICAgIERFRklORV9BUFBMSUVSKEFscGhhQmx1cikKLSAgICBERUZJTkVfQVBQTElF
UihDb250ZW50VGV4dHVyZSkKICAgICBSRUNUX1RFWFRVUkVfRElSRUNUSVZFCiAgICAgQkxVUl9D
T05TVEFOVFMKICAgICBTVFJJTkdJRlkoCkBAIC0xNzIsOSArMjAzLDkgQEAgc3RhdGljIGNvbnN0
IGNoYXIqIGZyYWdtZW50VGVtcGxhdGUgPQogICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX21h
c2s7CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfY29udGVudFRleHR1cmU7CiAgICAgICAg
IHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5OworICAgICAgICB2YXJ5aW5nIGZsb2F0IHZfYW50aWFs
aWFzOwogICAgICAgICB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsKICAgICAgICAgdmFyeWluZyB2
ZWMyIHZfbWFza1RleENvb3JkOwotICAgICAgICB1bmlmb3JtIHZlYzMgdV9leHBhbmRlZFF1YWRF
ZGdlc0luU2NyZWVuU3BhY2VbOF07CiAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9maWx0ZXJBbW91
bnQ7CiAgICAgICAgIHVuaWZvcm0gdmVjMiB1X2JsdXJSYWRpdXM7CiAgICAgICAgIHVuaWZvcm0g
dmVjMiB1X3NoYWRvd09mZnNldDsKQEAgLTE4Myw0NyArMjE0LDcgQEAgc3RhdGljIGNvbnN0IGNo
YXIqIGZyYWdtZW50VGVtcGxhdGUgPQogCiAgICAgICAgIHZvaWQgbm9vcChpbm91dCB2ZWM0IGR1
bW15UGFyYW1ldGVyKSB7IH0KIAotICAgICAgICAvLyBUaGUgZGF0YSBwYXNzZWQgaW4gdV9leHBh
bmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2UgaXMgbWVyZWx5IHRoZQotICAgICAgICAvLyBwcmUt
c2NhbGVkIGNvZWZmZWNpZW50cyBvZiB0aGUgbGluZSBlcXVhdGlvbnMgZGVzY3JpYmluZyB0aGUg
Zm91ciBlZGdlcwotICAgICAgICAvLyBvZiB0aGUgZXhwYW5kZWQgcXVhZCBpbiBzY3JlZW4gc3Bh
Y2UgYW5kIHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBib3gKLSAgICAgICAgLy8gb2YgdGhlIGV4
cGFuZGVkIHF1YWQuCi0gICAgICAgIC8vCi0gICAgICAgIGZsb2F0IG5vcm1hbGl6ZWREaXN0YW5j
ZSh2ZWMzIGVkZ2VDb2VmZmljaWVudCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gV2UgYXJl
IGRvaW5nIGEgc2ltcGxlIGRpc3RhbmNlIGNhbGN1bGF0aW9uIGhlcmUgYWNjb3JkaW5nIHRvIHRo
ZSBmb3JtdWxhOgotICAgICAgICAgICAgLy8gKEEqcC54ICsgQipwLnkgKyBDKSAvIHNxcnQoQV4y
ICsgQl4yKSA9IGRpc3RhbmNlIGZyb20gbGluZSB0byBwCi0gICAgICAgICAgICAvLyBOb3RlIHRo
YXQgQSwgQiBhbmQgQyBoYXZlIGFscmVhZHkgYmVlbiBzY2FsZWQgYnkgMSAvIHNxcnQoQV4yICsg
Ql4yKS4KLSAgICAgICAgICAgIHJldHVybiBjbGFtcChkb3QoZWRnZUNvZWZmaWNpZW50LCB2ZWMz
KGdsX0ZyYWdDb29yZC54eSwgMS4pKSwgMC4sIDEuKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZs
b2F0IGFudGlhbGlhc1F1YWQodmVjMyBjb2VmZmljaWVudDEsIHZlYzMgY29lZmZpY2llbnQyLCB2
ZWMzIGNvZWZmaWNpZW50MywgdmVjMyBjb2VmZmljaWVudDQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIC8vIE5vdyB3ZSB3YW50IHRvIHJlZHVjZSB0aGUgYWxwaGEgdmFsdWUgb2YgdGhlIGZyYWdt
ZW50IGlmIGl0IGlzIGNsb3NlIHRvIHRoZQotICAgICAgICAgICAgLy8gZWRnZXMgb2YgdGhlIGV4
cGFuZGVkIHF1YWQgKG9yIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGJveCAtLSB3aGljaCBzZWVtcyB0
byBiZQotICAgICAgICAgICAgLy8gaW1wb3J0YW50IGZvciBiYWNrZmFjaW5nIHF1YWRzKS4gTm90
ZSB0aGF0IHdlIGFyZSBjb21iaW5pbmcgdGhlIGNvbnRyaWJ1dGlvbgotICAgICAgICAgICAgLy8g
ZnJvbSB0aGUgKHRvcCB8fCBib3R0b20pIGFuZCAobGVmdCB8fCByaWdodCkgZWRnZSBieSBzaW1w
bHkgbXVsdGlwbHlpbmcuIFRoaXMgZm9sbG93cwotICAgICAgICAgICAgLy8gdGhlIGFwcHJvYWNo
IGRlc2NyaWJlZCBhdDogaHR0cDovL2h0dHAuZGV2ZWxvcGVyLm52aWRpYS5jb20vR1BVR2VtczIv
Z3B1Z2VtczJfY2hhcHRlcjIyLmh0bWwsCi0gICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2l0
aG91dCB1c2luZyBHYXVzc2lhbiB3ZWlnaHRzLgotICAgICAgICAgICAgcmV0dXJuIG1pbihub3Jt
YWxpemVkRGlzdGFuY2UoY29lZmZpY2llbnQxKSwgbm9ybWFsaXplZERpc3RhbmNlKGNvZWZmaWNp
ZW50MikpCi0gICAgICAgICAgICAgICAgKiBtaW4obm9ybWFsaXplZERpc3RhbmNlKGNvZWZmaWNp
ZW50MyksIG5vcm1hbGl6ZWREaXN0YW5jZShjb2VmZmljaWVudDQpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGZsb2F0IGFudGlhbGlhcygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZsb2F0IGFu
dGlhbGlhc1ZhbHVlRm9yUXVhZCA9IAotICAgICAgICAgICAgICAgIGFudGlhbGlhc1F1YWQodV9l
eHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbMF0sCi0gICAgICAgICAgICAgICAgICAgIHVf
ZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzFdLAotICAgICAgICAgICAgICAgICAgICB1
X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVsyXSwKLSAgICAgICAgICAgICAgICAgICAg
dV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbM10pOwotCi0gICAgICAgICAgICBmbG9h
dCBhbnRpYWxpYXNWYWx1ZUZvckJvdW5kaW5nUmVjdCA9IAotICAgICAgICAgICAgICAgIGFudGlh
bGlhc1F1YWQodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNF0sCi0gICAgICAgICAg
ICAgICAgICAgIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzVdLAotICAgICAgICAg
ICAgICAgICAgICB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs2XSwKLSAgICAgICAg
ICAgICAgICAgICAgdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbN10pOwotCi0gICAg
ICAgICAgICByZXR1cm4gbWluKGFudGlhbGlhc1ZhbHVlRm9yUXVhZCwgYW50aWFsaWFzVmFsdWVG
b3JCb3VuZGluZ1JlY3QpOyAgICAgICAgICAgCi0gICAgICAgIH0KKyAgICAgICAgZmxvYXQgYW50
aWFsaWFzKCkgeyByZXR1cm4gc21vb3Roc3RlcCh2X2FudGlhbGlhcywgMC4sIDEuKTsgfQogCiAg
ICAgICAgIHZvaWQgYXBwbHlUZXh0dXJlKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgPSBTYW1w
bGVyRnVuY3Rpb24oc19zYW1wbGVyLCB2X3RleENvb3JkKTsgfQogICAgICAgICB2b2lkIGFwcGx5
T3BhY2l0eShpbm91dCB2ZWM0IGNvbG9yKSB7IGNvbG9yICo9IHVfb3BhY2l0eTsgfQpAQCAtMzMx
LDEwICszMjIsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZSA9CiAgICAg
ICAgICAgICBjb2xvciA9IHNvdXJjZU92ZXIoY29udGVudENvbG9yLCBjb2xvcik7CiAgICAgICAg
IH0KIAotICAgICAgICB2b2lkIGFwcGx5U29saWRDb2xvcihpbm91dCB2ZWM0IGNvbG9yKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBjb2xvciAqPSB1X2NvbG9yOwotICAgICAgICB9CisgICAgICAg
IHZvaWQgYXBwbHlTb2xpZENvbG9yKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgKj0gdV9jb2xv
cjsgfQogCiAgICAgICAgIHZvaWQgbWFpbih2b2lkKQogICAgICAgICB7CkBAIC0zNjIsMzIgKzM1
MCwzNyBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZSA9CiAKIHN0YXRpYyB2
b2lkIGdldFNoYWRlclNwZWMoVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlvbnMgb3B0
aW9ucywgU3RyaW5nJiB2ZXJ0ZXhTb3VyY2UsIFN0cmluZyYgZnJhZ21lbnRTb3VyY2UpCiB7Ci0g
ICAgU3RyaW5nQnVpbGRlciBmcmFnbWVudEJ1aWxkZXI7CisKKyAgICBTdHJpbmdCdWlsZGVyIHNo
YWRlckJ1aWxkZXI7CiAjZGVmaW5lIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhBcHBsaWVyKSBc
Ci0gICAgaWYgKG9wdGlvbnMgJiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QXBwbGllcikg
XAotICAgICAgICBmcmFnbWVudEJ1aWxkZXIuYXBwZW5kKEVOQUJMRV9BUFBMSUVSKEFwcGxpZXIp
KTsKLQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhUZXh0dXJlKQotICAgIFNFVF9BUFBM
SUVSX0ZST01fT1BUSU9OUyhSZWN0KQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhTb2xp
ZENvbG9yKQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhPcGFjaXR5KQotICAgIFNFVF9B
UFBMSUVSX0ZST01fT1BUSU9OUyhNYXNrKQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhB
bnRpYWxpYXMpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEdyYXlzY2FsZUZpbHRlcikK
LSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoU2VwaWFGaWx0ZXIpCi0gICAgU0VUX0FQUExJ
RVJfRlJPTV9PUFRJT05TKFNhdHVyYXRlRmlsdGVyKQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BU
SU9OUyhIdWVSb3RhdGVGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEJyaWdo
dG5lc3NGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKENvbnRyYXN0RmlsdGVy
KQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhJbnZlcnRGaWx0ZXIpCi0gICAgU0VUX0FQ
UExJRVJfRlJPTV9PUFRJT05TKE9wYWNpdHlGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9P
UFRJT05TKEJsdXJGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEFscGhhQmx1
cikKLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQ29udGVudFRleHR1cmUpCi0KLSAgICBm
cmFnbWVudEJ1aWxkZXIuYXBwZW5kKGZyYWdtZW50VGVtcGxhdGUpOwotICAgIHZlcnRleFNvdXJj
ZSA9IHZlcnRleFNoYWRlclNvdXJjZTsKLSAgICBmcmFnbWVudFNvdXJjZSA9IGZyYWdtZW50QnVp
bGRlci50b1N0cmluZygpOworICAgIHNoYWRlckJ1aWxkZXIuYXBwZW5kKFwKKyAgICAgICAgKG9w
dGlvbnMgJiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QXBwbGllcikgXAorICAgICAgICAg
ICAgPyBFTkFCTEVfQVBQTElFUihBcHBsaWVyKSBcCisgICAgICAgICAgICA6IERJU0FCTEVfQVBQ
TElFUihBcHBsaWVyKSkKKworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhUZXh0dXJlKTsK
KyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoUmVjdCk7CisgICAgU0VUX0FQUExJRVJfRlJP
TV9PUFRJT05TKFNvbGlkQ29sb3IpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhPcGFj
aXR5KTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoTWFzayk7CisgICAgU0VUX0FQUExJ
RVJfRlJPTV9PUFRJT05TKEFudGlhbGlhcyk7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05T
KEdyYXlzY2FsZUZpbHRlcik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFNlcGlhRmls
dGVyKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoU2F0dXJhdGVGaWx0ZXIpOworICAg
IFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhIdWVSb3RhdGVGaWx0ZXIpOworICAgIFNFVF9BUFBM
SUVSX0ZST01fT1BUSU9OUyhCcmlnaHRuZXNzRmlsdGVyKTsKKyAgICBTRVRfQVBQTElFUl9GUk9N
X09QVElPTlMoQ29udHJhc3RGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhJ
bnZlcnRGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhPcGFjaXR5RmlsdGVy
KTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQmx1ckZpbHRlcik7CisgICAgU0VUX0FQ
UExJRVJfRlJPTV9PUFRJT05TKEFscGhhQmx1cik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJ
T05TKENvbnRlbnRUZXh0dXJlKTsKKyAgICBTdHJpbmdCdWlsZGVyIHZlcnRleEJ1aWxkZXI7Cisg
ICAgdmVydGV4QnVpbGRlci5hcHBlbmQoc2hhZGVyQnVpbGRlci50b1N0cmluZygpKTsKKyAgICB2
ZXJ0ZXhCdWlsZGVyLmFwcGVuZCh2ZXJ0ZXhUZW1wbGF0ZSk7CisgICAgc2hhZGVyQnVpbGRlci5h
cHBlbmQoZnJhZ21lbnRUZW1wbGF0ZSk7CisgICAgdmVydGV4U291cmNlID0gdmVydGV4QnVpbGRl
ci50b1N0cmluZygpOworICAgIGZyYWdtZW50U291cmNlID0gc2hhZGVyQnVpbGRlci50b1N0cmlu
ZygpOwogfQogCiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlci5oCmluZGV4IGIzODIyYzRkOWU2OWJhZDRlOTFmOWQ5M2Q5ZWQ3MDg1
NTI2MzI3OTUuLjU2NWQxMWNlOTcwNmZmOGU4YjBjOWFmMTg0ODU2NTNiOTUxM2VlNDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCkBAIC00Nyw5ICs0Nyw5IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpOwogCiAgICAg
VEVYTUFQX0RFQ0xBUkVfQVRUUklCVVRFKHZlcnRleCkKLSAgICBURVhNQVBfREVDTEFSRV9BVFRS
SUJVVEUodGV4Q29vcmQpCiAKLSAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKG1hdHJpeCkKKyAg
ICBURVhNQVBfREVDTEFSRV9VTklGT1JNKG1vZGVsVmlld01hdHJpeCkKKyAgICBURVhNQVBfREVD
TEFSRV9VTklGT1JNKHByb2plY3Rpb25NYXRyaXgpCiAgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9S
TShmbGlwKQogICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0odGV4dHVyZVNpemUpCiAgICAgVEVY
TUFQX0RFQ0xBUkVfVU5JRk9STShvcGFjaXR5KQpAQCAtNjYsNiArNjYsOCBAQCBwdWJsaWM6CiAg
ICAgVEVYTUFQX0RFQ0xBUkVfU0FNUExFUihjb250ZW50VGV4dHVyZSkKICNlbmRpZgogCisgICAg
dm9pZCBzZXRNYXRyaXgoR0MzRHVpbnQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisK
IHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oUGFzc1JlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4sIGNvbnN0IFN0cmluZyYgdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBT
dHJpbmcmIGZyYWdtZW50U2hhZGVyU291cmNlKTsKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fdmVy
dGV4U2hhZGVyOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180857</attachid>
            <date>2012-12-28 01:50:51 -0800</date>
            <delta_ts>2012-12-28 18:19:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105377-20121228014804.patch</filename>
            <type>text/plain</type>
            <size>41012</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4NTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzIxMWE1MTI0MTdkYTY5
YjRmMzYwOWQyYmQ4NGMwODJjZDJkZTNjMS4uYmMwZjhhYzk2OWE0MDJiYWRiNjVkOGU2OTliZjcy
ODgyYzBjZjY2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTEyLTE4ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1RleG1hcF0gRWRnZSBh
bnRpYWxpYXNpbmcgaW4gVGV4dHVyZU1hcHBlciBjb3VsZCBiZSBkb25lIHdpdGggbGVzcyBwZXIt
cGl4ZWwgY2FsbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwNTM3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEluc3RlYWQgb2YgcGFzc2luZyA4IHF1YWQgZWRnZSBjb2VmZmljaWVudHMgYXMgdW5pZm9y
bXMgYW5kIGFuYWx5emUgdGhlIGRpc3RhbmNlIGluIHRoZQorICAgICAgICBmcmFnbWVudCBzaGFk
ZXIsIHdlIHJlbmRlciB0aGUgYW50aWFsaWFzZWQgcXVhZCBhcyA0IGVkZ2UgdHJpYW5nbGVzLCB3
aGljaCBvcmlnaW5hdGUgaW4gdGhlCisgICAgICAgIGNlbnRlciBvZiB0aGUgcXVhZC4gCisKKyAg
ICAgICAgVGhlIHZlcnRleCBzaGFkZXIgZXhwYW5kcyB0aGUgcXVhZCBiYXNlZCBvbiB0aGUgc2Ny
ZWVuIHRyYW5zZm9ybSwgYW5kIGFwcGxpZXMgYSB2YWx1ZSB0byBlYWNoIHZlcnRleCB0byBiZSBp
bnRlcnBvbGF0ZWQgYnkgdGhlIEdQVS4gCisKKyAgICAgICAgSXQgaXMgdmVyeSBkaWZmaWN1bHQg
dG8gdGVzdCBwZXJmb3JtYW5jZSBnYWluOyBIb3dldmVyLCB0aGUgZm9sbG93aW5nIGlzIGFwcGFy
ZW50OgorICAgICAgICAtIFRoZSBtYXRyaXggbXVsdGlwbGljYXRpb25zIGFuZCBpbnZlcnNpb25z
IGRvbmUgYmVmb3JlIGluIHRoZSBxdWFkIGluZmxhdGlvbiBjb2RlIHdlcmUKKyAgICAgICAgICBh
bHdheXMgdmlzaWJsZSBpbiBpbnN0cnVtZW50cy92YWxncmluZCBhbmQgdGhleSBhcmUgbm93IGdv
bmUuCisgICAgICAgIC0gV2Ugbm93IHBlcmZvcm0gYSBzaW5nbGUgc21vb3Roc3RlcCgpIGNvbW1h
bmQgcGVyIHBpeGVsIGluc3RlYWQgb2YgOCBjbGFtcChkb3QoKSkgY29tbWFuZHMuCisgICAgICAg
IC0gSXQgc2hvdWxkIG5vdyBiZSBwb3NzaWJsZSB0byBhbnRpYWxpYXMgaW5kaXZpZHVhbCBlZGdl
cy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpnZXRTdGF0aWNWQk8pOgorICAgICAgICAgICAgQ2Fj
aGUgdGhlIHVuaXQtcmVjdCBhbmQgZWRnZS10cmlhbmdsZSB2ZXJ0ZXggZGF0YSBpbiBhIFZCTy4K
KworICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6flRleHR1cmVNYXBwZXJH
TERhdGEpOgorICAgICAgICAgICAgQ2xlYXIgdGhlIGNhY2hlZCBWQk9zIHVwb24gZGVzdHJ1Y3Rp
b24uCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAg
ICAgIFJlbW92ZWQgY2FsbCB0byB1c2VQcm9ncmFtLCBzaW5jZSBpdCdzIGFscmVhZHkgY2FsbGVk
IGluIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbS4KKworICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0pOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcik6CisgICAgICAgICAgICBVc2Ug
dGhlIG5ldyBzaWduYXR1cmUgImRyYXciIGluc3RlYWQgb2YgImRyYXdRdWFkIi4KKworICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3RWRnZVRyaWFuZ2xlcyk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdVbml0UmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXcpOgorICAgICAgICAgICAgUmVtb3ZlZCBEcmF3UXVh
ZCwgaW5zdGVhZCBkcmF3IGVpdGhlciBhIHVuaXQgcmVjdCBvciBlZGdlIHRyaWFuZ2xlcy4KKwor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXApOgorICAgICAgICAg
ICAgVXNlIHRoZSBuZXcgc2V0TWF0cml4IGZ1bmN0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oOgorICAgICAgICAgICAgQWRkZWQgYSBw
YWludCBmbGFnIGZvciBhbnRpYWxpYXNpbmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OnNldE1hdHJpeCk6CisgICAgICAgICAgICBT
aW5jZSB3ZSBub3cgc2V0IHRoZSBtYXRyaXggaW4gbXVsdGlwbGUgbG9jYXRpb25zLCBhZGRlZCBh
IGNvbnZlbmllbmNlIAorICAgICAgICAgICAgZnVuY3Rpb24gZm9yIG1hdHJpeCB1bmlmb3JtLgor
CisgICAgICAgIChXZWJDb3JlOjpnZXRTaGFkZXJTcGVjKToKKyAgICAgICAgICAgIFVwZGF0ZSB0
aGUgdmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXIgdG8gYWNjb3VudCBmb3IgdGhlIG5ldyBhbnRp
YWxpYXNpbmcKKyAgICAgICAgICAgIG1lY2hhbmlzbS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaDoKKyAgICAgICAgKFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtKToKKwogMjAxMi0xMi0yNyAgS29uZGFwYWxseSBLYWx5YW4g
IDxrYWx5YW4ua29uZGFwYWxseUBpbnRlbC5jb20+CiAKICAgICAgICAgW0VGTF1bV2ViR0xdIElt
cGxlbWVudCBFR0wgc3VwcG9ydCB3aXRoIEdMWC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKaW5kZXgg
OTFiNGFlMjlhZWU5NzA5NzM4Y2ZjOWQyNWE0MGNjMGUwY2IwMmY4MC4uNWZmODI3OTc5ZWE1ZjYy
MGRlMjExNzY3Yzg3ZjAyODFkODcyZjVlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTEw
OSw3ICsxMDksNyBAQCBwdWJsaWM6CiAKICAgICBTaGFyZWRHTERhdGEmIHNoYXJlZEdMRGF0YSgp
IGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gKm1fc2hhcmVkR0xEYXRhOworICAgICAgICBy
ZXR1cm4gKnNoYXJlZERhdGE7CiAgICAgfQogCiAgICAgdm9pZCBpbml0aWFsaXplU3RlbmNpbCgp
OwpAQCAtMTIyLDkgKzEyMiwxMiBAQCBwdWJsaWM6CiAgICAgICAgICwgZGlkTW9kaWZ5U3RlbmNp
bChmYWxzZSkKICAgICAgICAgLCBwcmV2aW91c1NjaXNzb3JTdGF0ZSgwKQogICAgICAgICAsIHBy
ZXZpb3VzRGVwdGhTdGF0ZSgwKQotICAgICAgICAsIG1fc2hhcmVkR0xEYXRhKFRleHR1cmVNYXBw
ZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6Y3VycmVudFNoYXJlZEdMRGF0YSh0aGlzLT5jb250ZXh0
KSkKKyAgICAgICAgLCBzaGFyZWREYXRhKFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0
YTo6Y3VycmVudFNoYXJlZEdMRGF0YSh0aGlzLT5jb250ZXh0KSkKICAgICB7IH0KIAorICAgIH5U
ZXh0dXJlTWFwcGVyR0xEYXRhKCk7CisgICAgUGxhdGZvcm0zRE9iamVjdCBnZXRTdGF0aWNWQk8o
R0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIsIGNvbnN0IHZvaWQqIGRhdGEpOworCiAgICAg
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQ7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcHJv
amVjdGlvbk1hdHJpeDsKICAgICBUZXh0dXJlTWFwcGVyOjpQYWludEZsYWdzIFBhaW50RmxhZ3M7
CkBAIC0xMzUsMTAgKzEzOCwzMSBAQCBwdWJsaWM6CiAgICAgR0MzRGludCBwcmV2aW91c0RlcHRo
U3RhdGU7CiAgICAgR0MzRGludCB2aWV3cG9ydFs0XTsKICAgICBHQzNEaW50IHByZXZpb3VzU2Np
c3Nvcls0XTsKLSAgICBSZWZQdHI8U2hhcmVkR0xEYXRhPiBtX3NoYXJlZEdMRGF0YTsKKyAgICBS
ZWZQdHI8U2hhcmVkR0xEYXRhPiBzaGFyZWREYXRhOwogICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJl
PiBjdXJyZW50U3VyZmFjZTsKKyAgICBIYXNoTWFwPGNvbnN0IHZvaWQqLCBQbGF0Zm9ybTNET2Jq
ZWN0PiB2Ym9zOwogfTsKIAorUGxhdGZvcm0zRE9iamVjdCBUZXh0dXJlTWFwcGVyR0xEYXRhOjpn
ZXRTdGF0aWNWQk8oR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9p
ZCogZGF0YSkKK3sKKyAgICBIYXNoTWFwPGNvbnN0IHZvaWQqLCBQbGF0Zm9ybTNET2JqZWN0Pjo6
aXRlcmF0b3IgaXQgPSB2Ym9zLmZpbmQoZGF0YSk7CisgICAgaWYgKGl0ICE9IHZib3MuZW5kKCkp
CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IHZibyA9
IGNvbnRleHQtPmNyZWF0ZUJ1ZmZlcigpOworICAgIGNvbnRleHQtPmJpbmRCdWZmZXIodGFyZ2V0
LCB2Ym8pOworICAgIGNvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCBHcmFw
aGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOworICAgIHZib3MuYWRkKGRhdGEsIHZibyk7Cisg
ICAgcmV0dXJuIHZibzsKK30KKworVGV4dHVyZU1hcHBlckdMRGF0YTo6flRleHR1cmVNYXBwZXJH
TERhdGEoKQoreworICAgIEhhc2hNYXA8Y29uc3Qgdm9pZCosIFBsYXRmb3JtM0RPYmplY3Q+Ojpp
dGVyYXRvciBlbmQgPSB2Ym9zLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxjb25zdCB2b2lkKiwg
UGxhdGZvcm0zRE9iamVjdD46Oml0ZXJhdG9yIGl0ID0gdmJvcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCisgICAgICAgIGNvbnRleHQtPmRlbGV0ZUJ1ZmZlcihpdC0+dmFsdWUpOworfQorCiB2
b2lkIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjppbml0KGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7CiAgICAgY2xpcFN0YWNrLmNsZWFyKCk7CkBAIC0yNjksNDIgKzI5Myw2IEBAIHZvaWQgVGV4
dHVyZU1hcHBlckdMOjplbmRQYWludGluZygpCiAjZW5kaWYKIH0KIAotdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmRyYXdRdWFkKGNvbnN0IERyYXdRdWFkJiBxdWFkVG9EcmF3LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bSogc2hhZGVyUHJvZ3JhbSwgR0MzRGVudW0gZHJhd2luZ01vZGUsIEZsYWdzIGZsYWdzKQotewot
ICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52
ZXJ0ZXhMb2NhdGlvbigpKTsKLSAgICBtX2NvbnRleHQzRC0+YmluZEJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6QVJSQVlfQlVGRkVSLCAwKTsKLQotICAgIGNvbnN0IEdDM0RmbG9hdCBxdWFkW10g
PSB7Ci0gICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMSgp
LngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAxKCkueSgpLAot
ICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDIoKS54KCks
IHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMigpLnkoKSwKLSAgICAg
ICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAzKCkueCgpLCBxdWFk
VG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDMoKS55KCksCi0gICAgICAgIHF1
YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wNCgpLngoKSwgcXVhZFRvRHJh
dy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnA0KCkueSgpCi0gICAgfTsKLSAgICBtX2Nv
bnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlv
bigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHF1
YWQpKTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9u
TWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KS5tdWx0aXBseShtb2RlbFZpZXdNYXRyaXgp
Lm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4KAotICAgICAgICAgICAgcXVhZFRvRHJhdy5v
cmlnaW5hbFRhcmdldFJlY3Qud2lkdGgoKSwgMCwgMCwgMCwKLSAgICAgICAgICAgIDAsIHF1YWRU
b0RyYXcub3JpZ2luYWxUYXJnZXRSZWN0LmhlaWdodCgpLCAwLCAwLAotICAgICAgICAgICAgMCwg
MCwgMSwgMCwKLSAgICAgICAgICAgIHF1YWRUb0RyYXcub3JpZ2luYWxUYXJnZXRSZWN0LngoKSwg
cXVhZFRvRHJhdy5vcmlnaW5hbFRhcmdldFJlY3QueSgpLCAwLCAxKSk7Ci0gICAgR0MzRGZsb2F0
IG00W10gPSB7Ci0gICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0xMigpLCBtYXRyaXgubTEz
KCksIG1hdHJpeC5tMTQoKSwKLSAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRyaXgubTIyKCksIG1h
dHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgpLAotICAgICAgICBtYXRyaXgubTMxKCksIG1hdHJpeC5t
MzIoKSwgbWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCksCi0gICAgICAgIG1hdHJpeC5tNDEoKSwg
bWF0cml4Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5tNDQoKQotICAgIH07Ci0gICAgbV9j
b250ZXh0M0QtPnVuaWZvcm1NYXRyaXg0ZnYoc2hhZGVyUHJvZ3JhbS0+bWF0cml4TG9jYXRpb24o
KSwgMSwgZmFsc2UsIG00KTsKLQotICAgIGlmIChmbGFncyAmIFNob3VsZEJsZW5kKSB7Ci0gICAg
ICAgIG1fY29udGV4dDNELT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhp
Y3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOwotICAgICAgICBtX2NvbnRleHQzRC0+
ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1f
Y29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0KLSAgICBtX2Nv
bnRleHQzRC0+ZHJhd0FycmF5cyhkcmF3aW5nTW9kZSwgMCwgNCk7Ci0gICAgbV9jb250ZXh0M0Qt
PmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigp
KTsKLX0KLQogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3ImIGNv
bG9yLCBmbG9hdCB3aWR0aCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4KQogewogICAgIGlmIChjbGlwU3RhY2so
KS5jdXJyZW50KCkuc2Npc3NvckJveC5pc0VtcHR5KCkpCkBAIC0zMTgsNyArMzA2LDcgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCB3
aWR0aCwgY29uc3QgRmxvYXRSZWMKICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTRmKHByb2dyYW0t
PmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgbV9jb250ZXh0M0QtPmxpbmVXaWR0
aCh3aWR0aCk7CiAKLSAgICBkcmF3UXVhZCh0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHBy
b2dyYW0uZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1AsIGNvbG9yLmhhc0FscGhh
KCkgPyBTaG91bGRCbGVuZCA6IDApOworICAgIGRyYXcodGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0
cml4LCBwcm9ncmFtLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6TElORV9MT09QLCBjb2xvci5o
YXNBbHBoYSgpID8gU2hvdWxkQmxlbmQgOiAwKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6
OmRyYXdSZXBhaW50Q291bnRlcihpbnQgdmFsdWUsIGludCBwb2ludFNpemUsIGNvbnN0IEZsb2F0
UG9pbnQmIHRhcmdldFBvaW50LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3
TWF0cml4KQpAQCAtNDA2LDE3NSArMzk0LDEwNiBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJh
d1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSQog
ewogICAgIGJvb2wgdXNlUmVjdCA9IGZsYWdzICYgU2hvdWxkVXNlQVJCVGV4dHVyZVJlY3Q7CiAg
ICAgYm9vbCBtYXNrZWQgPSAhIW1hc2tUZXh0dXJlOwotICAgIGJvb2wgbmVlZHNBbnRpYWxpYXNp
bmcgPSBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyAmJiAhbW9kZWxWaWV3TWF0cml4
LmlzSW50ZWdlclRyYW5zbGF0aW9uKCk7Ci0KLSAgICBpZiAoIXVzZVJlY3QgJiYgbmVlZHNBbnRp
YWxpYXNpbmcgJiYgZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHRleHR1cmUsIGZsYWdzLCB0
ZXh0dXJlU2l6ZSwgdGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5LCBtYXNrVGV4
dHVyZSwgZXhwb3NlZEVkZ2VzKSkKLSAgICAgICAgcmV0dXJuOworICAgIGJvb2wgdXNlQW50aWFs
aWFzaW5nID0gbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcKKyAgICAgICAgJiYgZXhw
b3NlZEVkZ2VzID09IEFsbEVkZ2VzCisgICAgICAgICYmICFtb2RlbFZpZXdNYXRyaXgubWFwUXVh
ZCh0YXJnZXRSZWN0KS5pc1JlY3RpbGluZWFyKCk7CiAKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6T3B0aW9ucyBvcHRpb25zID0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRl
eHR1cmU7CiAgICAgaWYgKG1hc2tlZCkKICAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6TWFzazsKLSAgICBpZiAoZmxhZ3MgJiBTaG91bGRVc2VBUkJUZXh0dXJl
UmVjdCkKKyAgICBpZiAodXNlUmVjdCkKICAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6UmVjdDsKICAgICBpZiAob3BhY2l0eSA8IDEpCiAgICAgICAgIG9wdGlv
bnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wYWNpdHk7CisgICAgaWYgKHVzZUFu
dGlhbGlhc2luZykgeworICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpBbnRpYWxpYXNpbmc7CisgICAgICAgIGZsYWdzIHw9IFNob3VsZEFudGlhbGlhczsKKyAg
ICB9CisKKyAgICBpZiAobWFza2VkIHx8IHVzZUFudGlhbGlhc2luZyB8fCBvcGFjaXR5IDwgMSkK
KyAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CiAKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0+IHByb2dyYW07CiAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERh
dGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMp
OwotICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKLQog
ICAgIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCB0ZXh0dXJlLCBm
bGFncywgdGV4dHVyZVNpemUsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwg
bWFza1RleHR1cmUpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlkQ29sb3Io
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4
LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNv
bGlkQ29sb3IpOworICAgIEZsYWdzIGZsYWdzID0gMDsKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6T3B0aW9ucyBvcHRpb25zID0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNv
bGlkQ29sb3I7CisgICAgaWYgKCFtYXRyaXgubWFwUXVhZChyZWN0KS5pc1JlY3RpbGluZWFyKCkp
IHsKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QW50aWFs
aWFzaW5nOworICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZCB8IFNob3VsZEFudGlhbGlhczsK
KyAgICB9CisKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0g
PSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hh
ZGVyUHJvZ3JhbShvcHRpb25zKTsKICAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFt
LT5wcm9ncmFtSUQoKSk7CiAKICAgICBmbG9hdCByLCBnLCBiLCBhOwogICAgIGNvbG9yLmdldFJH
QkEociwgZywgYiwgYSk7CiAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm00Zihwcm9ncmFtLT5jb2xv
ckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOworICAgIGlmIChhIDwgMSkKKyAgICAgICAgZmxhZ3Mg
fD0gU2hvdWxkQmxlbmQ7CiAKLSAgICBkcmF3UXVhZChyZWN0LCBtYXRyaXgsIHByb2dyYW0uZ2V0
KCksIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIGEgPCAxID8gU2hvdWxkQmxlbmQg
OiAwKTsKLX0KLQotc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZpZXdwb3J0TWF0cml4KEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QpCi17Ci0gICAgR0MzRGludCB2aWV3cG9ydFs0XTsK
LSAgICBjb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpWSUVXUE9SVCwg
dmlld3BvcnQpOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwotICAgIG1hdHJp
eC50cmFuc2xhdGUzZCh2aWV3cG9ydFswXSwgdmlld3BvcnRbMV0sIDApOwotICAgIG1hdHJpeC5z
Y2FsZTNkKHZpZXdwb3J0WzJdLCB2aWV3cG9ydFszXSwgMCk7Ci0KLSAgICAvLyBNYXAgeCwgeSBh
bmQgeiB0byB1bml0IHNxdWFyZSBmcm9tIE9wZW5HTCBub3JtYWxpemVkIGRldmljZQotICAgIC8v
IGNvb3JkaW5hdGVzIHdoaWNoIGFyZSAtMSB0byAxIG9uIGV2ZXJ5IGF4aXMuCi0gICAgbWF0cml4
LnRyYW5zbGF0ZTNkKDAuNSwgMC41LCAwLjUpOwotICAgIG1hdHJpeC5zY2FsZTNkKDAuNSwgMC41
LCAwLjUpOwotCi0gICAgcmV0dXJuIG1hdHJpeDsKLX0KLQotc3RhdGljIHZvaWQgc2NhbGVMaW5l
RXF1YXRpb25Db2VmZmVjaWVudHNUb09wdGltaXplRGlzdGFuY2VDYWxjdWxhdGlvbihmbG9hdCog
Y29lZmZlY2llbnRzKQotewotICAgIC8vIEluIHRoZSBmcmFnbWVudCBzaGFkZXIgd2Ugd2FudCB0
byBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGZyb20gdGhpcwotICAgIC8vIGxpbmUgdG8gYSBwb2lu
dCAocCksIHdoaWNoIGlzIGdpdmVuIGJ5IHRoZSBmb3JtdWxhOgotICAgIC8vIChBKnAueCArIEIq
cC55ICsgQykgLyBzcXJ0IChhXjIgKyBiXjIpCi0gICAgLy8gV2UgY2FuIGRvIGEgc21hbGwgYW1v
dW50IG9mIHByZWNhbGN1bGF0aW9uIGhlcmUgdG8gcmVkdWNlIHRoZQotICAgIC8vIGFtb3VudCBv
ZiBtYXRoIGluIHRoZSBzaGFkZXIgYnkgc2NhbGluZyB0aGUgY29lZmZlY2llbnRzIG5vdy4KLSAg
ICBmbG9hdCBzY2FsZSA9IDEuMCAvIEZsb2F0UG9pbnQoY29lZmZlY2llbnRzWzBdLCBjb2VmZmVj
aWVudHNbMV0pLmxlbmd0aCgpOwotICAgIGNvZWZmZWNpZW50c1swXSA9IGNvZWZmZWNpZW50c1sw
XSAqIHNjYWxlOwotICAgIGNvZWZmZWNpZW50c1sxXSA9IGNvZWZmZWNpZW50c1sxXSAqIHNjYWxl
OwotICAgIGNvZWZmZWNpZW50c1syXSA9IGNvZWZmZWNpZW50c1syXSAqIHNjYWxlOwotfQotCi1z
dGF0aWMgdm9pZCBnZXRTdGFuZGFyZEVxdWF0aW9uQ29lZmZlY2llbnRzRm9yTGluZShjb25zdCBG
bG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGZsb2F0KiBjb2VmZmVjaWVudHMp
Ci17Ci0gICAgLy8gR2l2ZW4gdHdvIHBvaW50cywgdGhlIHN0YW5kYXJkIGVxdWF0aW9uIG9mIGEg
bGluZSAoQXggKyBCeSArIEMgPSAwKQotICAgIC8vIGNhbiBiZSBjYWxjdWxhdGVkIHZpYSB0aGUg
Zm9ybXVsYToKLSAgICAvLyAocDEueSDigJMgcDIueSl4ICsgKHAxLngg4oCTIHAyLngpeSArICgo
cDEueCpwMi55KSDigJMgKHAyLngqcDEueSkpID0gMAotICAgIGNvZWZmZWNpZW50c1swXSA9IHAx
LnkoKSAtIHAyLnkoKTsKLSAgICBjb2VmZmVjaWVudHNbMV0gPSBwMi54KCkgLSBwMS54KCk7Ci0g
ICAgY29lZmZlY2llbnRzWzJdID0gcDEueCgpICogcDIueSgpIC0gcDIueCgpICogcDEueSgpOwot
ICAgIHNjYWxlTGluZUVxdWF0aW9uQ29lZmZlY2llbnRzVG9PcHRpbWl6ZURpc3RhbmNlQ2FsY3Vs
YXRpb24oY29lZmZlY2llbnRzKTsKKyAgICBkcmF3KHJlY3QsIG1hdHJpeCwgcHJvZ3JhbS5nZXQo
KSwgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgZmxhZ3MpOwogfQogCi1zdGF0aWMg
dm9pZCBxdWFkVG9FZGdlQXJyYXkoY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBmbG9hdCogZWRnZUFy
cmF5KQordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdFZGdlVHJpYW5nbGVzKFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtKQogewotICAgIGlmIChxdWFkLmlzQ291bnRlcmNsb2Nr
d2lzZSgpKSB7Ci0gICAgICAgIGdldFN0YW5kYXJkRXF1YXRpb25Db2VmZmVjaWVudHNGb3JMaW5l
KHF1YWQucDQoKSwgcXVhZC5wMygpLCBlZGdlQXJyYXkpOwotICAgICAgICBnZXRTdGFuZGFyZEVx
dWF0aW9uQ29lZmZlY2llbnRzRm9yTGluZShxdWFkLnAzKCksIHF1YWQucDIoKSwgZWRnZUFycmF5
ICsgMyk7Ci0gICAgICAgIGdldFN0YW5kYXJkRXF1YXRpb25Db2VmZmVjaWVudHNGb3JMaW5lKHF1
YWQucDIoKSwgcXVhZC5wMSgpLCBlZGdlQXJyYXkgKyA2KTsKLSAgICAgICAgZ2V0U3RhbmRhcmRF
cXVhdGlvbkNvZWZmZWNpZW50c0ZvckxpbmUocXVhZC5wMSgpLCBxdWFkLnA0KCksIGVkZ2VBcnJh
eSArIDkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGdldFN0YW5kYXJkRXF1YXRpb25D
b2VmZmVjaWVudHNGb3JMaW5lKHF1YWQucDQoKSwgcXVhZC5wMSgpLCBlZGdlQXJyYXkpOwotICAg
IGdldFN0YW5kYXJkRXF1YXRpb25Db2VmZmVjaWVudHNGb3JMaW5lKHF1YWQucDEoKSwgcXVhZC5w
MigpLCBlZGdlQXJyYXkgKyAzKTsKLSAgICBnZXRTdGFuZGFyZEVxdWF0aW9uQ29lZmZlY2llbnRz
Rm9yTGluZShxdWFkLnAyKCksIHF1YWQucDMoKSwgZWRnZUFycmF5ICsgNik7Ci0gICAgZ2V0U3Rh
bmRhcmRFcXVhdGlvbkNvZWZmZWNpZW50c0ZvckxpbmUocXVhZC5wMygpLCBxdWFkLnA0KCksIGVk
Z2VBcnJheSArIDkpOworICAgIGNvbnN0IEdDM0RmbG9hdCBMZWZ0ID0gMDsKKyAgICBjb25zdCBH
QzNEZmxvYXQgVG9wID0gMDsKKyAgICBjb25zdCBHQzNEZmxvYXQgUmlnaHQgPSAxOworICAgIGNv
bnN0IEdDM0RmbG9hdCBCb3R0b20gPSAxOworICAgIGNvbnN0IEdDM0RmbG9hdCBDZW50ZXIgPSAw
LjU7CisjZGVmaW5lIFNJREVfVFJJQU5HTEVfREFUQSh4MSwgeTEsIHgyLCB5MikgeDEsIHkxLCB4
MSwgeTEsIHgyLCB5MiwgeDIsIHkyLCBDZW50ZXIsIENlbnRlciwgKHgxICsgeDIpIC8gMiwgKHkx
ICsgeTIpIC8gMgorICAgIHN0YXRpYyBjb25zdCBHQzNEZmxvYXQgdW5pdFJlY3RTaWRlVHJpYW5n
bGVzW10gPSB7CisgICAgICAgIFNJREVfVFJJQU5HTEVfREFUQShMZWZ0LCBUb3AsIFJpZ2h0LCBU
b3ApLAorICAgICAgICBTSURFX1RSSUFOR0xFX0RBVEEoTGVmdCwgVG9wLCBMZWZ0LCBCb3R0b20p
LAorICAgICAgICBTSURFX1RSSUFOR0xFX0RBVEEoUmlnaHQsIFRvcCwgUmlnaHQsIEJvdHRvbSks
CisgICAgICAgIFNJREVfVFJJQU5HTEVfREFUQShMZWZ0LCBCb3R0b20sIFJpZ2h0LCBCb3R0b20p
CisgICAgfTsKKyN1bmRlZiBTSURFX1RSSUFOR0xFCisgICAgUGxhdGZvcm0zRE9iamVjdCB2Ym8g
PSBkYXRhKCkuZ2V0U3RhdGljVkJPKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHNp
emVvZihHQzNEZmxvYXQpICogNDgsIHVuaXRSZWN0U2lkZVRyaWFuZ2xlcyk7CisgICAgbV9jb250
ZXh0M0QtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgdmJvKTsK
KyAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhMb2Nh
dGlvbigpLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBt
X2NvbnRleHQzRC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTLCAwLCAx
Mik7CiB9CiAKLXN0YXRpYyBGbG9hdFNpemUgc2NhbGVkVmVjdG9yRGlmZmVyZW5jZShjb25zdCBG
bG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MiwgZmxvYXQgc2NhbGUp
Cit2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1VuaXRSZWN0KFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtKiBwcm9ncmFtLCBHQzNEZW51bSBkcmF3aW5nTW9kZSkKIHsKLSAgICBGbG9hdFNpemUg
dmVjdG9yID0gcG9pbnQxIC0gcG9pbnQyOwotICAgIGlmICh2ZWN0b3IuZGlhZ29uYWxMZW5ndGhT
cXVhcmVkKCkpCi0gICAgICAgIHZlY3Rvci5zY2FsZSgxLjAgLyB2ZWN0b3IuZGlhZ29uYWxMZW5n
dGgoKSk7Ci0KLSAgICB2ZWN0b3Iuc2NhbGUoc2NhbGUpOwotICAgIHJldHVybiB2ZWN0b3I7Cisg
ICAgc3RhdGljIGNvbnN0IEdDM0RmbG9hdCB1bml0UmVjdFtdID0geyAwLCAwLCAxLCAwLCAxLCAx
LCAwLCAxIH07CisgICAgUGxhdGZvcm0zRE9iamVjdCB2Ym8gPSBkYXRhKCkuZ2V0U3RhdGljVkJP
KEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHNpemVvZihHQzNEZmxvYXQpICogOCwg
dW5pdFJlY3QpOworICAgIG1fY29udGV4dDNELT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpBUlJBWV9CVUZGRVIsIHZibyk7CisgICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50
ZXIocHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FU
LCBmYWxzZSwgMCwgMCk7CisgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMoZHJhd2luZ01vZGUs
IDAsIDQpOwogfQogCi1zdGF0aWMgRmxvYXRRdWFkIGluZmxhdGVRdWFkKGNvbnN0IEZsb2F0UXVh
ZCYgcXVhZCwgZmxvYXQgZGlzdGFuY2UpCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhdyhjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdN
YXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBzaGFkZXJQcm9ncmFtLCBHQzNEZW51
bSBkcmF3aW5nTW9kZSwgRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgRmxvYXRRdWFkIGV4cGFuZGVkUXVh
ZCA9IHF1YWQ7Ci0gICAgZXhwYW5kZWRRdWFkLnNldFAxKGV4cGFuZGVkUXVhZC5wMSgpICsgc2Nh
bGVkVmVjdG9yRGlmZmVyZW5jZShxdWFkLnAxKCksIHF1YWQucDIoKSwgZGlzdGFuY2UpKTsKLSAg
ICBleHBhbmRlZFF1YWQuc2V0UDQoZXhwYW5kZWRRdWFkLnA0KCkgKyBzY2FsZWRWZWN0b3JEaWZm
ZXJlbmNlKHF1YWQucDQoKSwgcXVhZC5wMygpLCBkaXN0YW5jZSkpOworICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IG1hdHJpeCA9CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KG1vZGVsVmll
d01hdHJpeCkubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoRmxvYXRS
ZWN0KDAsIDAsIDEsIDEpLCByZWN0KSk7CiAKLSAgICBleHBhbmRlZFF1YWQuc2V0UDEoZXhwYW5k
ZWRRdWFkLnAxKCkgKyBzY2FsZWRWZWN0b3JEaWZmZXJlbmNlKHF1YWQucDEoKSwgcXVhZC5wNCgp
LCBkaXN0YW5jZSkpOwotICAgIGV4cGFuZGVkUXVhZC5zZXRQMihleHBhbmRlZFF1YWQucDIoKSAr
IHNjYWxlZFZlY3RvckRpZmZlcmVuY2UocXVhZC5wMigpLCBxdWFkLnAzKCksIGRpc3RhbmNlKSk7
CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0t
PnZlcnRleExvY2F0aW9uKCkpOworICAgIHNoYWRlclByb2dyYW0tPnNldE1hdHJpeChzaGFkZXJQ
cm9ncmFtLT5tb2RlbFZpZXdNYXRyaXhMb2NhdGlvbigpLCBtYXRyaXgpOworICAgIHNoYWRlclBy
b2dyYW0tPnNldE1hdHJpeChzaGFkZXJQcm9ncmFtLT5wcm9qZWN0aW9uTWF0cml4TG9jYXRpb24o
KSwgZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpOwogCi0gICAgZXhwYW5kZWRRdWFkLnNldFAyKGV4
cGFuZGVkUXVhZC5wMigpICsgc2NhbGVkVmVjdG9yRGlmZmVyZW5jZShxdWFkLnAyKCksIHF1YWQu
cDEoKSwgZGlzdGFuY2UpKTsKLSAgICBleHBhbmRlZFF1YWQuc2V0UDMoZXhwYW5kZWRRdWFkLnAz
KCkgKyBzY2FsZWRWZWN0b3JEaWZmZXJlbmNlKHF1YWQucDMoKSwgcXVhZC5wNCgpLCBkaXN0YW5j
ZSkpOworICAgIGlmIChmbGFncyAmIFNob3VsZEJsZW5kKSB7CisgICAgICAgIG1fY29udGV4dDNE
LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9O
RV9NSU5VU19TUkNfQUxQSEEpOworICAgICAgICBtX2NvbnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpCTEVORCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29udGV4dDNELT5kaXNh
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CiAKLSAgICBleHBhbmRlZFF1YWQuc2V0UDMo
ZXhwYW5kZWRRdWFkLnAzKCkgKyBzY2FsZWRWZWN0b3JEaWZmZXJlbmNlKHF1YWQucDMoKSwgcXVh
ZC5wMigpLCBkaXN0YW5jZSkpOwotICAgIGV4cGFuZGVkUXVhZC5zZXRQNChleHBhbmRlZFF1YWQu
cDQoKSArIHNjYWxlZFZlY3RvckRpZmZlcmVuY2UocXVhZC5wNCgpLCBxdWFkLnAxKCksIGRpc3Rh
bmNlKSk7CisgICAgaWYgKGZsYWdzICYgU2hvdWxkQW50aWFsaWFzKQorICAgICAgICBkcmF3RWRn
ZVRyaWFuZ2xlcyhzaGFkZXJQcm9ncmFtKTsKKyAgICBlbHNlCisgICAgICAgIGRyYXdVbml0UmVj
dChzaGFkZXJQcm9ncmFtLCBkcmF3aW5nTW9kZSk7CiAKLSAgICByZXR1cm4gZXhwYW5kZWRRdWFk
OworICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3Jh
bS0+dmVydGV4TG9jYXRpb24oKSk7CiB9Ci0KLWJvb2wgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4
dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0
IEludFNpemUmIHNpemUsIGNvbnN0IEZsb2F0UmVjdCYgb3JpZ2luYWxUYXJnZXRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBj
b25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzKQor
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbSogcHJvZ3JhbSwgdWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxh
Z3MsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3Qg
Qml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCiB7Ci0gICAgLy8gVGhlIGFudGlhbGlhc2luZyBw
YXRoIGRvZXMgbm90IHN1cHBvcnQgbWFzayB0ZXh0dXJlcyBhdCB0aGUgbW9tZW50LgotICAgIGlm
IChtYXNrVGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRm9yIG5vdyB3
ZSBwdW50IG9uIHJlbmRlcmluZyB0aWxlZCBsYXllcnMgd2l0aCBhbnRpYWxpYXNpbmcuIEl0J3Mg
cXVpdGUgaGFyZAotICAgIC8vIHRvIHJlbmRlciB0aGVtIHdpdGhvdXQgc2VhbXMuCi0gICAgaWYg
KGV4cG9zZWRFZGdlcyAhPSBBbGxFZGdlcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Ly8gVGhlIGdvYWwgaGVyZSBpcyByZW5kZXIgYSBzbGlnaHRseSBsYXJnZXIgKDAuNzUgcGl4ZWxz
IGluIHNjcmVlbiBzcGFjZSkgcXVhZCBhbmQgdG8KLSAgICAvLyBncmFkdWFsbHkgdGFwZXIgb2Zm
IHRoZSBhbHBoYSB2YWx1ZXMgdG8gZG8gYSBzaW1wbGUgdmVyc2lvbiBvZiBlZGdlIGRpc3RhbmNl
Ci0gICAgLy8gYW50aWFsaWFzaW5nLiBOb3RlIGhlcmUgdGhhdCB3ZSBhcmUgYWxzbyBpbmNsdWRp
bmcgdGhlIHZpZXdwb3J0IG1hdHJpeCAod2hpY2gKLSAgICAvLyB0cmFuc2xhdGVzIGZyb20gbm9y
bWFsaXplZCBkZXZpY2UgY29vcmRpbmF0ZXMgdG8gc2NyZWVuIGNvb3JkaW5hdGVzKSwgYmVjYXVz
ZSB0aGVzZQotICAgIC8vIHZhbHVlcyBhcmUgY29uc3VtZWQgaW4gdGhlIGZyYWdtZW50IHNoYWRl
ciwgd2hpY2ggd29ya3MgaW4gc2NyZWVuIGNvb3JkaW5hdGVzLgotICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHNjcmVlblNwYWNlVHJhbnNmb3JtID0gdmlld3BvcnRNYXRyaXgobV9jb250ZXh0M0Qu
Z2V0KCkpLm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0
cml4KSkubXVsdGlwbHkobW9kZWxWaWV3TWF0cml4KS50bzJkVHJhbnNmb3JtKCk7Ci0gICAgaWYg
KCFzY3JlZW5TcGFjZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIEZsb2F0UXVhZCBxdWFkSW5TY3JlZW5TcGFjZSA9IHNjcmVlblNwYWNlVHJhbnNm
b3JtLm1hcFF1YWQob3JpZ2luYWxUYXJnZXRSZWN0KTsKLQotICAgIGNvbnN0IGZsb2F0IGluZmxh
dGlvbkRpc3RhbmNlID0gMC43NTsKLSAgICBGbG9hdFF1YWQgZXhwYW5kZWRRdWFkSW5TY3JlZW5T
cGFjZSA9IGluZmxhdGVRdWFkKHF1YWRJblNjcmVlblNwYWNlLCBpbmZsYXRpb25EaXN0YW5jZSk7
Ci0KLSAgICAvLyBJbiB0aGUgbm9uLWFudGlhbGlhc2VkIGNhc2UgdGhlIHZlcnRpY2VzIHBhc3Nl
ZCBhcmUgdGhlIHVuaXQgcmVjdGFuZ2xlIGFuZCBkb3VibGUKLSAgICAvLyBhcyB0aGUgdGV4dHVy
ZSBjb29yZGluYXRlcyAoMCwwIDEsMCwgMSwxIGFuZCAwLDEpLiBIZXJlIHdlIG1hcCB0aGUgZXhw
YW5kZWQgcXVhZAotICAgIC8vIGNvb3JkaW5hdGVzIGluIHNjcmVlbiBzcGFjZSBiYWNrIHRvIHRo
ZSBvcmlnaW5hbCByZWN0J3MgdGV4dHVyZSBjb29yZGluYXRlcy4KLSAgICAvLyBUaGlzIGhhcyB0
aGUgZWZmZWN0IG9mIHNsaWdodGx5IGluY3JlYXNpbmcgdGhlIHNpemUgb2YgdGhlIG9yaWdpbmFs
IHF1YWQncyBnZW9tZXRyeQotICAgIC8vIGluIHRoZSB2ZXJ0ZXggc2hhZGVyLgotICAgIEZsb2F0
UXVhZCBleHBhbmRlZFF1YWRJblRleHR1cmVDb29yZGluYXRlcyA9IHNjcmVlblNwYWNlVHJhbnNm
b3JtLmludmVyc2UoKS5tYXBRdWFkKGV4cGFuZGVkUXVhZEluU2NyZWVuU3BhY2UpOwotICAgIGV4
cGFuZGVkUXVhZEluVGV4dHVyZUNvb3JkaW5hdGVzLm1vdmUoLW9yaWdpbmFsVGFyZ2V0UmVjdC54
KCksIC1vcmlnaW5hbFRhcmdldFJlY3QueSgpKTsKLSAgICBleHBhbmRlZFF1YWRJblRleHR1cmVD
b29yZGluYXRlcy5zY2FsZSgxIC8gb3JpZ2luYWxUYXJnZXRSZWN0LndpZHRoKCksIDEgLyBvcmln
aW5hbFRhcmdldFJlY3QuaGVpZ2h0KCkpOwotCi0gICAgLy8gV2UgcHJlcGFyZSBib3RoIHRoZSBl
eHBhbmRlZCBxdWFkIGZvciB0aGUgZnJhZ21lbnQgc2hhZGVyIGFzIHdlbGwgYXMgdGhlIHJlY3Rh
bmd1bGFyIGJvdW5kaW5nCi0gICAgLy8gYm94IG9mIHRoYXQgcXVhZCwgYXMgdGhhdCBzZWVtcyBu
ZWNlc3NhcnkgdG8gcHJvcGVybHkgYW50aWFsaWFzIGJhY2tmYWNpbmcgcXVhZHMuCi0gICAgZmxv
YXQgdGFyZ2V0UXVhZEVkZ2VzWzI0XTsKLSAgICBxdWFkVG9FZGdlQXJyYXkoZXhwYW5kZWRRdWFk
SW5TY3JlZW5TcGFjZSwgdGFyZ2V0UXVhZEVkZ2VzKTsKLSAgICBxdWFkVG9FZGdlQXJyYXkoaW5m
bGF0ZVF1YWQocXVhZEluU2NyZWVuU3BhY2UuYm91bmRpbmdCb3goKSwgIGluZmxhdGlvbkRpc3Rh
bmNlKSwgdGFyZ2V0UXVhZEVkZ2VzICsgMTIpOwotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpPcHRpb25zIG9wdGlvbnMgPSBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QW50aWFs
aWFzIHwgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmU7Ci0gICAgaWYgKG9wYWNp
dHkgPCAxKQotICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpP
cGFjaXR5OwotCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFt
ID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNo
YWRlclByb2dyYW0ob3B0aW9ucyk7CiAgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3Jh
bS0+cHJvZ3JhbUlEKCkpOwotICAgIG1fY29udGV4dDNELT51bmlmb3JtM2Z2KHByb2dyYW0tPmV4
cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uKCksIDgsIHRhcmdldFF1YWRFZGdl
cyk7Ci0KLSAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgdGV4
dHVyZSwgZmxhZ3MsIHNpemUsIERyYXdRdWFkKG9yaWdpbmFsVGFyZ2V0UmVjdCwgZXhwYW5kZWRR
dWFkSW5UZXh0dXJlQ29vcmRpbmF0ZXMpLCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIDAgLyog
bWFza1RleHR1cmUgKi8pOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFRleHR1cmVNYXBw
ZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtKiBwcm9ncmFtLCB1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6
ZSYgc2l6ZSwgY29uc3QgRHJhd1F1YWQmIHF1YWRUb0RyYXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1
cmUqIG1hc2tUZXh0dXJlKQotewotICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheShwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKICAgICBtX2NvbnRleHQzRC0+YWN0aXZl
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwogICAgIEdDM0RlbnVtIHRhcmdl
dCA9IGZsYWdzICYgU2hvdWxkVXNlQVJCVGV4dHVyZVJlY3QgPyBHQzNEZW51bShFeHRlbnNpb25z
M0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQikgOiBHQzNEZW51bShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCk7CiAgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVy
ZSk7CkBAIC01OTYsNyArNTE1LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJl
ZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSogcHIKICAgICBpZiAo
b3BhY2l0eSA8IDEgfHwgbWFza1RleHR1cmUpCiAgICAgICAgIGZsYWdzIHw9IFNob3VsZEJsZW5k
OwogCi0gICAgZHJhd1F1YWQocXVhZFRvRHJhdywgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLCBH
cmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCBmbGFncyk7CisgICAgZHJhdyhyZWN0LCBt
b2RlbFZpZXdNYXRyaXgsIHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4s
IGZsYWdzKTsKIH0KIAogQml0bWFwVGV4dHVyZUdMOjpCaXRtYXBUZXh0dXJlR0woVGV4dHVyZU1h
cHBlckdMKiB0ZXh0dXJlTWFwcGVyKQpAQCAtMTE3MCwyNiArMTA4OSwxMCBAQCB2b2lkIFRleHR1
cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZp
ZXdNYXRyaXgsIGNvbgogICAgIGNvbnN0IEdDM0RmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEs
IDAsIDEsIDEsIDAsIDF9OwogICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHBy
b2dyYW0tPnZlcnRleExvY2F0aW9uKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFs
c2UsIDAsIEdDM0RpbnRwdHIodW5pdFJlY3QpKTsKIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KQot
ICAgICAgICAgICAgLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkKLSAgICAgICAgICAgIC5tdWx0
aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeCh0YXJnZXRSZWN0LndpZHRoKCksIDAsIDAsIDAsCi0g
ICAgICAgICAgICAgICAgMCwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgMCwgMCwKLSAgICAgICAgICAg
ICAgICAwLCAwLCAxLCAwLAotICAgICAgICAgICAgICAgIHRhcmdldFJlY3QueCgpLCB0YXJnZXRS
ZWN0LnkoKSwgMCwgMSkpOwotCi0gICAgY29uc3QgR0MzRGZsb2F0IG00W10gPSB7Ci0gICAgICAg
IG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0xMigpLCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQoKSwK
LSAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRyaXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0cml4
Lm0yNCgpLAotICAgICAgICBtYXRyaXgubTMxKCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0zMygp
LCBtYXRyaXgubTM0KCksCi0gICAgICAgIG1hdHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBtYXRy
aXgubTQzKCksIG1hdHJpeC5tNDQoKQotICAgIH07CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgobW9kZWxWaWV3TWF0cml4KQorICAgICAgICAu
bXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoRmxvYXRSZWN0KDAsIDAs
IDEsIDEpLCB0YXJnZXRSZWN0KSk7CiAKLSAgICBjb25zdCBHQzNEZmxvYXQgbTRhbGxbXSA9IHsK
LSAgICAgICAgMiwgMCwgMCwgMCwKLSAgICAgICAgMCwgMiwgMCwgMCwKLSAgICAgICAgMCwgMCwg
MSwgMCwKLSAgICAgICAgLTEsIC0xLCAwLCAxCi0gICAgfTsKKyAgICBzdGF0aWMgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXggZnVsbFByb2plY3Rpb25NYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6cmVjdFRvUmVjdChGbG9hdFJlY3QoMCwgMCwgMSwgMSksIEZsb2F0UmVjdCgtMSwgLTEs
IDIsIDIpKTsKIAogICAgIGludCYgc3RlbmNpbEluZGV4ID0gY2xpcFN0YWNrKCkuY3VycmVudCgp
LnN0ZW5jaWxJbmRleDsKIApAQCAtMTIwMiwxMyArMTEwNSwxNSBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRy
aXgsIGNvbgogICAgIG1fY29udGV4dDNELT5zdGVuY2lsTWFzaygweGZmICYgfihzdGVuY2lsSW5k
ZXggLSAxKSk7CiAKICAgICAvLyBGaXJzdCBjbGVhciB0aGUgZW50aXJlIGJ1ZmZlciBhdCB0aGUg
Y3VycmVudCBpbmRleC4KLSAgICBtX2NvbnRleHQzRC0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFt
LT5tYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgY29uc3RfY2FzdDxHQzNEZmxvYXQqPihtNGFs
bCkpOworICAgIHByb2dyYW0tPnNldE1hdHJpeChwcm9ncmFtLT5wcm9qZWN0aW9uTWF0cml4TG9j
YXRpb24oKSwgZnVsbFByb2plY3Rpb25NYXRyaXgpOworICAgIHByb2dyYW0tPnNldE1hdHJpeChw
cm9ncmFtLT5tb2RlbFZpZXdNYXRyaXhMb2NhdGlvbigpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
KTsKICAgICBtX2NvbnRleHQzRC0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPLCBH
cmFwaGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8pOwogICAgIG1f
Y29udGV4dDNELT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIDAs
IDQpOwogCiAgICAgLy8gTm93IGFwcGx5IHRoZSBjdXJyZW50IGluZGV4IHRvIHRoZSBuZXcgcXVh
ZC4KICAgICBtX2NvbnRleHQzRC0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpSRVBMQUNF
LCBHcmFwaGljc0NvbnRleHQzRDo6UkVQTEFDRSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFUExBQ0Up
OwotICAgIG1fY29udGV4dDNELT51bmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0
aW9uKCksIDEsIGZhbHNlLCBjb25zdF9jYXN0PEdDM0RmbG9hdCo+KG00KSk7CisgICAgcHJvZ3Jh
bS0+c2V0TWF0cml4KHByb2dyYW0tPnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpLCBkYXRhKCku
cHJvamVjdGlvbk1hdHJpeCk7CisgICAgcHJvZ3JhbS0+c2V0TWF0cml4KHByb2dyYW0tPm1vZGVs
Vmlld01hdHJpeExvY2F0aW9uKCksIG1hdHJpeCk7CiAgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJh
eXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgNCk7CiAKICAgICAvLyBDbGVh
ciB0aGUgc3RhdGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKaW5kZXggNTlkYjNkMzk3OWMwZDEwYmU0MTQ4
MTVlNzgyMzE1ZGYwN2MzNWExNi4uYWExMzMxMmZhYWZjYTMxZmRmMWQxYzQxNGQzNWMyN2NhYzgw
MmNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaApAQCAtNDQsNyArNDQsOCBAQCBwdWJsaWM6CiAgICAg
ZW51bSBGbGFnIHsKICAgICAgICAgU2hvdWxkQmxlbmQgPSAweDAxLAogICAgICAgICBTaG91bGRG
bGlwVGV4dHVyZSA9IDB4MDIsCi0gICAgICAgIFNob3VsZFVzZUFSQlRleHR1cmVSZWN0ID0gMHgw
NAorICAgICAgICBTaG91bGRVc2VBUkJUZXh0dXJlUmVjdCA9IDB4MDQsCisgICAgICAgIFNob3Vs
ZEFudGlhbGlhcyA9IDB4MDgKICAgICB9OwogCiAgICAgdHlwZWRlZiBpbnQgRmxhZ3M7CkBAIC05
OCwyMiArOTksMTMgQEAgcHJpdmF0ZToKICAgICAgICAgVmVjdG9yPENsaXBTdGF0ZT4gY2xpcFN0
YWNrOwogICAgIH07CiAKLSAgICBzdHJ1Y3QgRHJhd1F1YWQgewotICAgICAgICBEcmF3UXVhZChj
b25zdCBGbG9hdFJlY3QmIG9yaWdpbmFsVGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRRdWFkJiB0YXJn
ZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgRmxvYXRT
aXplKDEsIDEpKSkKLSAgICAgICAgICAgIDogb3JpZ2luYWxUYXJnZXRSZWN0KG9yaWdpbmFsVGFy
Z2V0UmVjdCkKLSAgICAgICAgICAgICwgdGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZSh0YXJn
ZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAg
ICBGbG9hdFJlY3Qgb3JpZ2luYWxUYXJnZXRSZWN0OwotICAgICAgICBGbG9hdFF1YWQgdGFyZ2V0
UmVjdE1hcHBlZFRvVW5pdFNxdWFyZTsKLSAgICB9OwotCiAgICAgVGV4dHVyZU1hcHBlckdMKCk7
CiAKLSAgICBib29sIGRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJl
LCBGbGFncywgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYgb3JpZ2luYWxUYXJnZXRS
ZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBv
cGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3Nl
ZEVkZ2VzKTsKLSAgICB2b2lkIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbSosIHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBJbnRTaXpl
JiwgY29uc3QgRHJhd1F1YWQmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3
TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7
Ci0gICAgdm9pZCBkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiwgR0Mz
RGVudW0gZHJhd2luZ01vZGUsIEZsYWdzKTsKKyAgICB2b2lkIGRyYXdUZXh0dXJlZFF1YWRXaXRo
UHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSosIHVpbnQzMl90IHRleHR1cmUsIEZs
YWdzLCBjb25zdCBJbnRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4
dHVyZSogbWFza1RleHR1cmUpOworICAgIHZvaWQgZHJhdyhjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbSosIEdDM0RlbnVtIGRyYXdpbmdNb2RlLCBGbGFncyk7CisKKyAgICB2b2lkIGRy
YXdVbml0UmVjdChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSosIEdDM0RlbnVtIGRyYXdpbmdN
b2RlKTsKKyAgICB2b2lkIGRyYXdFZGdlVHJpYW5nbGVzKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtKik7CiAKICAgICBib29sIGJlZ2luU2Npc3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIGJpbmREZWZhdWx0U3VyZmFjZSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKaW5kZXggMmQ4NmJm
ODU5ZGE4NjE3ZmM0ODc5ZjJkNzE3NTkyMjhhYTFjMDQzZi4uODZiZjQ5Mzc0MjYzMTVkZGRjYTdm
ZTVhZjNmYzMzMTlhMDgyMWRhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuY3BwCkBAIC03MCw2ICs3MCwxOCBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleAogICAg
IExPRyhDb21wb3NpdGluZywgIlByb2dyYW0gbG9nOiAlc1xuIiwgbG9nLnV0ZjgoKS5kYXRhKCkp
OwogfQogCit2b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpzZXRNYXRyaXgoR0MzRHVp
bnQgbG9jYXRpb24sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCit7CisgICAg
R0MzRGZsb2F0IG1hdHJpeEFzRmxvYXRzW10gPSB7CisgICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0
cml4Lm0xMigpLCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQoKSwKKyAgICAgICAgbWF0cml4Lm0y
MSgpLCBtYXRyaXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgpLAorICAgICAgICBt
YXRyaXgubTMxKCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCksCisg
ICAgICAgIG1hdHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5t
NDQoKQorICAgIH07CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24s
IDEsIGZhbHNlLCBtYXRyaXhBc0Zsb2F0cyk7Cit9CisKIEdDM0R1aW50IFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtOjpnZXRMb2NhdGlvbihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFZhcmlh
YmxlVHlwZSB0eXBlKQogewogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBHQzNEdWludD46Oml0
ZXJhdG9yIGl0ID0gbV92YXJpYWJsZXMuZmluZChuYW1lKTsKQEAgLTEwNiwzMiArMTE4LDY2IEBA
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0o
KQogICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFtSUQpOwogfQogCi1zdGF0aWMg
Y29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlID0KKyNkZWZpbmUgR0xTTF9ESVJFQ1RJVkUo
Li4uKSAiIyIjX19WQV9BUkdTX18iXG4iCitzdGF0aWMgY29uc3QgY2hhciogdmVydGV4VGVtcGxh
dGUgPQogICAgIFNUUklOR0lGWSgKLSAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OworICAg
ICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKKyAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbW9k
ZWxWaWV3TWF0cml4OworICAgICAgICB1bmlmb3JtIG1hdDQgdV9wcm9qZWN0aW9uTWF0cml4Owog
ICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZmxpcDsKICAgICAgICAgdW5pZm9ybSB2ZWMyIHVfdGV4
dHVyZVNpemU7Ci0gICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OworCiAgICAgICAgIHZh
cnlpbmcgdmVjMiB2X3RleENvb3JkOwogICAgICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29v
cmQ7CisgICAgICAgIHZhcnlpbmcgZmxvYXQgdl9hbnRpYWxpYXM7CisKKyAgICAgICAgdm9pZCBu
b29wKHZlYzIpIHsgfQorCisgICAgICAgIHZlYzQgdG9WaWV3cG9ydFNwYWNlKHZlYzIgcG9zKSB7
IHJldHVybiB2ZWM0KHBvcywgMC4sIDEuKSAqIHVfbW9kZWxWaWV3TWF0cml4OyB9CisKKyAgICAg
ICAgLy8gVGhpcyBmdW5jdGlvbiByZWxpZXMgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB3ZSBnZXQg
ZWRnZSB0cmlhbmdsZXMgd2l0aCBjb250cm9sIHBvaW50cywKKyAgICAgICAgLy8gYSBjb250cm9s
IHBvaW50IGJlaW5nIHRoZSBuZWFyZXN0IHBvaW50IHRvIHRoZSBjb29yZGluYXRlIHRoYXQgaXMg
b24gdGhlIGVkZ2UuCisgICAgICAgIHZvaWQgYXBwbHlBbnRpYWxpYXNpbmcoaW5vdXQgdmVjMiBw
b3NpdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2UgY291bnQgb24gdGhlIGZhY3Qg
dGhhdCBxdWFkIHBhc3NlZCBpbiBpcyBhbHdheXMgYSB1bml0IHJlY3QsCisgICAgICAgICAgICAv
LyBhbmQgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBhcHBsaWVzIHRoZSByZWFsIHJlY3QuCisg
ICAgICAgICAgICBjb25zdCB2ZWMyIGNlbnRlciA9IHZlYzIoMC41LCAwLjUpOworICAgICAgICAg
ICAgY29uc3QgZmxvYXQgYW50aWFsaWFzSW5mbGF0aW9uRGlzdGFuY2UgPSAxLjsKKworICAgICAg
ICAgICAgLy8gV2UgcGFzcyB0aGUgY29udHJvbCBwb2ludCBhcyB0aGUgencgY29vcmRpbmF0ZXMg
b2YgdGhlIHZlcnRleC4KKyAgICAgICAgICAgIC8vIFRoZSBjb250cm9sIHBvaW50IGlzIHRoZSBw
b2ludCBvbiB0aGUgZWRnZSBjbG9zZXN0IHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICAgICAg
ICAgICAgLy8gVGhlIGNvbnRyb2wgcG9pbnQgaXMgdXNlZCB0byBjb21wdXRlIHRoZSBhbnRpYWxp
YXMgdmFsdWUuCisgICAgICAgICAgICB2ZWMyIGNvbnRyb2xQb2ludCA9IGFfdmVydGV4Lnp3Owor
CisgICAgICAgICAgICAvLyBGaXJzdCB3ZSBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGluIHZpZXdw
b3J0IHNwYWNlLgorICAgICAgICAgICAgdmVjNCBjZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMg
PSB0b1ZpZXdwb3J0U3BhY2UoY2VudGVyKTsKKyAgICAgICAgICAgIHZlYzQgY29udHJvbFBvaW50
SW5WaWV3cG9ydENvb3JkaW5hdGVzID0gdG9WaWV3cG9ydFNwYWNlKGNvbnRyb2xQb2ludCk7Cisg
ICAgICAgICAgICBmbG9hdCB2aWV3cG9ydFNwYWNlRGlzdGFuY2UgPSBkaXN0YW5jZShjZW50ZXJJ
blZpZXdwb3J0Q29vcmRpbmF0ZXMsIGNvbnRyb2xQb2ludEluVmlld3BvcnRDb29yZGluYXRlcyk7
CisKKyAgICAgICAgICAgIC8vIFdlIGFkZCB0aGUgaW5mbGF0aW9uIGRpc3RhbmNlIHRvIHRoZSBj
b21wdXRlZCBkaXN0YW5jZSwgYW5kIGNvbXB1dGUgdGhlIHJhdGlvLgorICAgICAgICAgICAgZmxv
YXQgaW5mbGF0aW9uUmF0aW8gPSAodmlld3BvcnRTcGFjZURpc3RhbmNlICsgYW50aWFsaWFzSW5m
bGF0aW9uRGlzdGFuY2UpIC8gdmlld3BvcnRTcGFjZURpc3RhbmNlOworCisgICAgICAgICAgICAv
LyB2X2FudGlhbGlhcyBuZWVkcyB0byBiZSAwIGZvciB0aGUgb3V0ZXIgZWRnZSBhbmQgMS4gZm9y
IHRoZSBpbm5lciBlZGdlLgorICAgICAgICAgICAgLy8gU2luY2UgdGhlIGNvbnRyb2xQb2ludCBp
cyBlcXVhbCB0byB0aGUgcG9zaXRpb24gaW4gdGhlIGVkZ2UgdmVydGljZXMsIHRoZSB2YWx1ZSBp
cyBhbHdheXMgMCBmb3IgdGhvc2UuCisgICAgICAgICAgICAvLyBGb3IgdGhlIGNlbnRlciBwb2lu
dCwgdGhlIGRpc3RhbmNlIGlzIGFsd2F5cyAwLjUsIHNvIHdlIG5vcm1hbGl6ZSB0byAxLiBieSBt
dWx0aXBseWluZyBieSAyLgorICAgICAgICAgICAgLy8gQnkgbXVsdHBseWluZyBieSBpbmZsYXRp
b25SYXRpbyBhbmQgZGl2aWRpbmcgYnkgKGluZmxhdGlvblJhdGlvIC0gMSksCisgICAgICAgICAg
ICAvLyBXZSBtYWtlIHN1cmUgdGhhdCB0aGUgdmFyeWluZyBpbnRlcnBvbGF0ZXMgYmV0d2VlbiAw
IChvdXRlciBlZGdlKSwgMSAoaW5uZXIgZWRnZSkgYW5kIG4gPiAxIChjZW50ZXIpLgorICAgICAg
ICAgICAgdl9hbnRpYWxpYXMgPSBkaXN0YW5jZShjb250cm9sUG9pbnQsIHBvc2l0aW9uKSAqIDIu
ICogaW5mbGF0aW9uUmF0aW8gLyAoaW5mbGF0aW9uUmF0aW8gLSAxLik7CisKKyAgICAgICAgICAg
IC8vIE5vdyBpbmZsYXRlIHRoZSBhY3R1YWwgcG9zaXRpb24uCisgICAgICAgICAgICBwb3NpdGlv
biA9IGNlbnRlciArIChwb3NpdGlvbiAtIGNlbnRlcikgKiBpbmZsYXRpb25SYXRpbzsKKyAgICAg
ICAgfQogCiAgICAgICAgIHZvaWQgbWFpbih2b2lkKQogICAgICAgICB7Ci0gICAgICAgICAgICB2
ZWM0IHBvc2l0aW9uID0gYV92ZXJ0ZXg7CisgICAgICAgICAgICB2ZWMyIHBvc2l0aW9uID0gYV92
ZXJ0ZXgueHk7CisgICAgICAgICAgICBhcHBseUFudGlhbGlhc2luZ0lmTmVlZGVkKHBvc2l0aW9u
KTsKICAgICAgICAgICAgIHZfdGV4Q29vcmQgPSB2ZWMyKHBvc2l0aW9uLngsIG1peChwb3NpdGlv
bi55LCAxLiAtIHBvc2l0aW9uLnksIHVfZmxpcCkpICogdV90ZXh0dXJlU2l6ZTsKLSAgICAgICAg
ICAgIHZfbWFza1RleENvb3JkID0gdmVjMihwb3NpdGlvbik7Ci0gICAgICAgICAgICBnbF9Qb3Np
dGlvbiA9IHVfbWF0cml4ICogYV92ZXJ0ZXg7CisgICAgICAgICAgICB2X21hc2tUZXhDb29yZCA9
IHBvc2l0aW9uOworICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X3Byb2plY3Rpb25NYXRyaXgg
KiB1X21vZGVsVmlld01hdHJpeCAqIHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgICAgICAgIH0K
ICAgICApOwogCi0jZGVmaW5lIEdMU0xfRElSRUNUSVZFKC4uLikgIiMiI19fVkFfQVJHU19fIlxu
IgotI2RlZmluZSBERUZJTkVfQVBQTElFUihOYW1lKSBcCi0gICAgIiNpZmRlZiBFTkFCTEVfIiNO
YW1lIlxuIiBcCi0gICAgIiNkZWZpbmUgYXBwbHkiI05hbWUiSWZOZWVkZWQgYXBwbHkiI05hbWUi
XG4iXAotICAgICIjZWxzZVxuIlwKLSAgICAiI2RlZmluZSBhcHBseSIjTmFtZSJJZk5lZWRlZCBu
b29wXG4iXAotICAgICIjZW5kaWZcbiIKLQogI2RlZmluZSBSRUNUX1RFWFRVUkVfRElSRUNUSVZF
IFwKICAgICBHTFNMX0RJUkVDVElWRShpZmRlZiBFTkFCTEVfUmVjdCkgXAogICAgICAgICBHTFNM
X0RJUkVDVElWRShkZWZpbmUgU2FtcGxlclR5cGUgc2FtcGxlcjJEUmVjdCkgXApAQCAtMTQxLDI5
ICsxODcsMTQgQEAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSA9CiAgICAg
ICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBTYW1wbGVyRnVuY3Rpb24gdGV4dHVyZTJEKSBcCiAg
ICAgR0xTTF9ESVJFQ1RJVkUoZW5kaWYpCiAKLSNkZWZpbmUgRU5BQkxFX0FQUExJRVIoTmFtZSkg
IiNkZWZpbmUgRU5BQkxFXyIjTmFtZSJcbiIKKyNkZWZpbmUgRU5BQkxFX0FQUExJRVIoTmFtZSkg
IiNkZWZpbmUgRU5BQkxFXyIjTmFtZSJcbiNkZWZpbmUgYXBwbHkiI05hbWUiSWZOZWVkZWQgYXBw
bHkiI05hbWUiXG4iCisjZGVmaW5lIERJU0FCTEVfQVBQTElFUihOYW1lKSAiI2RlZmluZSBhcHBs
eSIjTmFtZSJJZk5lZWRlZCBub29wXG4iCiAjZGVmaW5lIEJMVVJfQ09OU1RBTlRTIFwKICAgICBH
TFNMX0RJUkVDVElWRShkZWZpbmUgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEggMTEpIFwKICAg
ICBHTFNMX0RJUkVDVElWRShkZWZpbmUgR0FVU1NJQU5fS0VSTkVMX1NURVAgMC4yKQogCiAKIHN0
YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFRlbXBsYXRlID0KLSAgICBERUZJTkVfQVBQTElFUihU
ZXh0dXJlKQotICAgIERFRklORV9BUFBMSUVSKFNvbGlkQ29sb3IpCi0gICAgREVGSU5FX0FQUExJ
RVIoT3BhY2l0eSkKLSAgICBERUZJTkVfQVBQTElFUihNYXNrKQotICAgIERFRklORV9BUFBMSUVS
KEFudGlhbGlhcykKLSAgICBERUZJTkVfQVBQTElFUihHcmF5c2NhbGVGaWx0ZXIpCi0gICAgREVG
SU5FX0FQUExJRVIoU2VwaWFGaWx0ZXIpCi0gICAgREVGSU5FX0FQUExJRVIoU2F0dXJhdGVGaWx0
ZXIpCi0gICAgREVGSU5FX0FQUExJRVIoSHVlUm90YXRlRmlsdGVyKQotICAgIERFRklORV9BUFBM
SUVSKEludmVydEZpbHRlcikKLSAgICBERUZJTkVfQVBQTElFUihCcmlnaHRuZXNzRmlsdGVyKQot
ICAgIERFRklORV9BUFBMSUVSKENvbnRyYXN0RmlsdGVyKQotICAgIERFRklORV9BUFBMSUVSKE9w
YWNpdHlGaWx0ZXIpCi0gICAgREVGSU5FX0FQUExJRVIoQmx1ckZpbHRlcikKLSAgICBERUZJTkVf
QVBQTElFUihBbHBoYUJsdXIpCi0gICAgREVGSU5FX0FQUExJRVIoQ29udGVudFRleHR1cmUpCiAg
ICAgUkVDVF9URVhUVVJFX0RJUkVDVElWRQogICAgIEJMVVJfQ09OU1RBTlRTCiAgICAgU1RSSU5H
SUZZKApAQCAtMTcyLDkgKzIwMyw5IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFRlbXBs
YXRlID0KICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19tYXNrOwogICAgICAgICB1bmlmb3Jt
IHNhbXBsZXIyRCBzX2NvbnRlbnRUZXh0dXJlOwogICAgICAgICB1bmlmb3JtIGZsb2F0IHVfb3Bh
Y2l0eTsKKyAgICAgICAgdmFyeWluZyBmbG9hdCB2X2FudGlhbGlhczsKICAgICAgICAgdmFyeWlu
ZyB2ZWMyIHZfdGV4Q29vcmQ7CiAgICAgICAgIHZhcnlpbmcgdmVjMiB2X21hc2tUZXhDb29yZDsK
LSAgICAgICAgdW5pZm9ybSB2ZWMzIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzhd
OwogICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZmlsdGVyQW1vdW50OwogICAgICAgICB1bmlmb3Jt
IHZlYzIgdV9ibHVyUmFkaXVzOwogICAgICAgICB1bmlmb3JtIHZlYzIgdV9zaGFkb3dPZmZzZXQ7
CkBAIC0xODMsNTEgKzIxNCwxMSBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0
ZSA9CiAKICAgICAgICAgdm9pZCBub29wKGlub3V0IHZlYzQgZHVtbXlQYXJhbWV0ZXIpIHsgfQog
Ci0gICAgICAgIC8vIFRoZSBkYXRhIHBhc3NlZCBpbiB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3Jl
ZW5TcGFjZSBpcyBtZXJlbHkgdGhlCi0gICAgICAgIC8vIHByZS1zY2FsZWQgY29lZmZlY2llbnRz
IG9mIHRoZSBsaW5lIGVxdWF0aW9ucyBkZXNjcmliaW5nIHRoZSBmb3VyIGVkZ2VzCi0gICAgICAg
IC8vIG9mIHRoZSBleHBhbmRlZCBxdWFkIGluIHNjcmVlbiBzcGFjZSBhbmQgdGhlIHJlY3Rhbmd1
bGFyIGJvdW5kaW5nIGJveAotICAgICAgICAvLyBvZiB0aGUgZXhwYW5kZWQgcXVhZC4KLSAgICAg
ICAgLy8KLSAgICAgICAgZmxvYXQgbm9ybWFsaXplZERpc3RhbmNlKHZlYzMgZWRnZUNvZWZmaWNp
ZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBXZSBhcmUgZG9pbmcgYSBzaW1wbGUgZGlz
dGFuY2UgY2FsY3VsYXRpb24gaGVyZSBhY2NvcmRpbmcgdG8gdGhlIGZvcm11bGE6Ci0gICAgICAg
ICAgICAvLyAoQSpwLnggKyBCKnAueSArIEMpIC8gc3FydChBXjIgKyBCXjIpID0gZGlzdGFuY2Ug
ZnJvbSBsaW5lIHRvIHAKLSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBBLCBCIGFuZCBDIGhhdmUg
YWxyZWFkeSBiZWVuIHNjYWxlZCBieSAxIC8gc3FydChBXjIgKyBCXjIpLgotICAgICAgICAgICAg
cmV0dXJuIGNsYW1wKGRvdChlZGdlQ29lZmZpY2llbnQsIHZlYzMoZ2xfRnJhZ0Nvb3JkLnh5LCAx
LikpLCAwLiwgMS4pOwotICAgICAgICB9Ci0KLSAgICAgICAgZmxvYXQgYW50aWFsaWFzUXVhZCh2
ZWMzIGNvZWZmaWNpZW50MSwgdmVjMyBjb2VmZmljaWVudDIsIHZlYzMgY29lZmZpY2llbnQzLCB2
ZWMzIGNvZWZmaWNpZW50NCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gTm93IHdlIHdhbnQg
dG8gcmVkdWNlIHRoZSBhbHBoYSB2YWx1ZSBvZiB0aGUgZnJhZ21lbnQgaWYgaXQgaXMgY2xvc2Ug
dG8gdGhlCi0gICAgICAgICAgICAvLyBlZGdlcyBvZiB0aGUgZXhwYW5kZWQgcXVhZCAob3IgcmVj
dGFuZ3VsYXIgYm91bmRpbmcgYm94IC0tIHdoaWNoIHNlZW1zIHRvIGJlCi0gICAgICAgICAgICAv
LyBpbXBvcnRhbnQgZm9yIGJhY2tmYWNpbmcgcXVhZHMpLiBOb3RlIHRoYXQgd2UgYXJlIGNvbWJp
bmluZyB0aGUgY29udHJpYnV0aW9uCi0gICAgICAgICAgICAvLyBmcm9tIHRoZSAodG9wIHx8IGJv
dHRvbSkgYW5kIChsZWZ0IHx8IHJpZ2h0KSBlZGdlIGJ5IHNpbXBseSBtdWx0aXBseWluZy4gVGhp
cyBmb2xsb3dzCi0gICAgICAgICAgICAvLyB0aGUgYXBwcm9hY2ggZGVzY3JpYmVkIGF0OiBodHRw
Oi8vaHR0cC5kZXZlbG9wZXIubnZpZGlhLmNvbS9HUFVHZW1zMi9ncHVnZW1zMl9jaGFwdGVyMjIu
aHRtbCwKLSAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB3aXRob3V0IHVzaW5nIEdhdXNzaWFu
IHdlaWdodHMuCi0gICAgICAgICAgICByZXR1cm4gbWluKG5vcm1hbGl6ZWREaXN0YW5jZShjb2Vm
ZmljaWVudDEpLCBub3JtYWxpemVkRGlzdGFuY2UoY29lZmZpY2llbnQyKSkKLSAgICAgICAgICAg
ICAgICAqIG1pbihub3JtYWxpemVkRGlzdGFuY2UoY29lZmZpY2llbnQzKSwgbm9ybWFsaXplZERp
c3RhbmNlKGNvZWZmaWNpZW50NCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZmxvYXQgYW50aWFs
aWFzKCkKLSAgICAgICAgewotICAgICAgICAgICAgZmxvYXQgYW50aWFsaWFzVmFsdWVGb3JRdWFk
ID0gCi0gICAgICAgICAgICAgICAgYW50aWFsaWFzUXVhZCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5T
Y3JlZW5TcGFjZVswXSwKLSAgICAgICAgICAgICAgICAgICAgdV9leHBhbmRlZFF1YWRFZGdlc0lu
U2NyZWVuU3BhY2VbMV0sCi0gICAgICAgICAgICAgICAgICAgIHVfZXhwYW5kZWRRdWFkRWRnZXNJ
blNjcmVlblNwYWNlWzJdLAotICAgICAgICAgICAgICAgICAgICB1X2V4cGFuZGVkUXVhZEVkZ2Vz
SW5TY3JlZW5TcGFjZVszXSk7Ci0KLSAgICAgICAgICAgIGZsb2F0IGFudGlhbGlhc1ZhbHVlRm9y
Qm91bmRpbmdSZWN0ID0gCi0gICAgICAgICAgICAgICAgYW50aWFsaWFzUXVhZCh1X2V4cGFuZGVk
UXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs0XSwKLSAgICAgICAgICAgICAgICAgICAgdV9leHBhbmRl
ZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNV0sCi0gICAgICAgICAgICAgICAgICAgIHVfZXhwYW5k
ZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzZdLAotICAgICAgICAgICAgICAgICAgICB1X2V4cGFu
ZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs3XSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBtaW4o
YW50aWFsaWFzVmFsdWVGb3JRdWFkLCBhbnRpYWxpYXNWYWx1ZUZvckJvdW5kaW5nUmVjdCk7ICAg
ICAgICAgICAKLSAgICAgICAgfQorICAgICAgICBmbG9hdCBhbnRpYWxpYXMoKSB7IHJldHVybiBz
bW9vdGhzdGVwKHZfYW50aWFsaWFzLCAwLiwgMS4pOyB9CiAKICAgICAgICAgdm9pZCBhcHBseVRl
eHR1cmUoaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xvciA9IFNhbXBsZXJGdW5jdGlvbihzX3NhbXBs
ZXIsIHZfdGV4Q29vcmQpOyB9CiAgICAgICAgIHZvaWQgYXBwbHlPcGFjaXR5KGlub3V0IHZlYzQg
Y29sb3IpIHsgY29sb3IgKj0gdV9vcGFjaXR5OyB9Ci0gICAgICAgIHZvaWQgYXBwbHlBbnRpYWxp
YXMoaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xvciAqPSBhbnRpYWxpYXMoKTsgfQorICAgICAgICB2
b2lkIGFwcGx5QW50aWFsaWFzaW5nKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgKj0gYW50aWFs
aWFzKCk7IH0KICAgICAgICAgdm9pZCBhcHBseU1hc2soaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xv
ciAqPSB0ZXh0dXJlMkQoc19tYXNrLCB2X21hc2tUZXhDb29yZCkuYTsgfQogCiAgICAgICAgIHZv
aWQgYXBwbHlHcmF5c2NhbGVGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKQEAgLTMzMSwxNyArMzIy
LDE0IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFRlbXBsYXRlID0KICAgICAgICAgICAg
IGNvbG9yID0gc291cmNlT3Zlcihjb250ZW50Q29sb3IsIGNvbG9yKTsKICAgICAgICAgfQogCi0g
ICAgICAgIHZvaWQgYXBwbHlTb2xpZENvbG9yKGlub3V0IHZlYzQgY29sb3IpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGNvbG9yICo9IHVfY29sb3I7Ci0gICAgICAgIH0KKyAgICAgICAgdm9pZCBh
cHBseVNvbGlkQ29sb3IoaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xvciAqPSB1X2NvbG9yOyB9CiAK
ICAgICAgICAgdm9pZCBtYWluKHZvaWQpCiAgICAgICAgIHsKICAgICAgICAgICAgIHZlYzQgY29s
b3IgPSB2ZWM0KDEuLCAxLiwgMS4sIDEuKTsKICAgICAgICAgICAgIGFwcGx5VGV4dHVyZUlmTmVl
ZGVkKGNvbG9yKTsKICAgICAgICAgICAgIGFwcGx5U29saWRDb2xvcklmTmVlZGVkKGNvbG9yKTsK
LSAgICAgICAgICAgIGFwcGx5QW50aWFsaWFzSWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAg
YXBwbHlBbnRpYWxpYXNpbmdJZk5lZWRlZChjb2xvcik7CiAgICAgICAgICAgICBhcHBseU1hc2tJ
Zk5lZWRlZChjb2xvcik7CiAgICAgICAgICAgICBhcHBseU9wYWNpdHlJZk5lZWRlZChjb2xvcik7
CiAgICAgICAgICAgICBhcHBseUdyYXlzY2FsZUZpbHRlcklmTmVlZGVkKGNvbG9yKTsKQEAgLTM2
MiwzMiArMzUwLDM1IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFRlbXBsYXRlID0KIAog
c3RhdGljIHZvaWQgZ2V0U2hhZGVyU3BlYyhUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3B0
aW9ucyBvcHRpb25zLCBTdHJpbmcmIHZlcnRleFNvdXJjZSwgU3RyaW5nJiBmcmFnbWVudFNvdXJj
ZSkKIHsKLSAgICBTdHJpbmdCdWlsZGVyIGZyYWdtZW50QnVpbGRlcjsKKworICAgIFN0cmluZ0J1
aWxkZXIgc2hhZGVyQnVpbGRlcjsKICNkZWZpbmUgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEFw
cGxpZXIpIFwKLSAgICBpZiAob3B0aW9ucyAmIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpB
cHBsaWVyKSBcCi0gICAgICAgIGZyYWdtZW50QnVpbGRlci5hcHBlbmQoRU5BQkxFX0FQUExJRVIo
QXBwbGllcikpOwotCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFRleHR1cmUpCi0gICAg
U0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFJlY3QpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJ
T05TKFNvbGlkQ29sb3IpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKE9wYWNpdHkpCi0g
ICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKE1hc2spCi0gICAgU0VUX0FQUExJRVJfRlJPTV9P
UFRJT05TKEFudGlhbGlhcykKLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoR3JheXNjYWxl
RmlsdGVyKQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhTZXBpYUZpbHRlcikKLSAgICBT
RVRfQVBQTElFUl9GUk9NX09QVElPTlMoU2F0dXJhdGVGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJf
RlJPTV9PUFRJT05TKEh1ZVJvdGF0ZUZpbHRlcikKLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElP
TlMoQnJpZ2h0bmVzc0ZpbHRlcikKLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQ29udHJh
c3RGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEludmVydEZpbHRlcikKLSAg
ICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoT3BhY2l0eUZpbHRlcikKLSAgICBTRVRfQVBQTElF
Ul9GUk9NX09QVElPTlMoQmx1ckZpbHRlcikKLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMo
QWxwaGFCbHVyKQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhDb250ZW50VGV4dHVyZSkK
LQotICAgIGZyYWdtZW50QnVpbGRlci5hcHBlbmQoZnJhZ21lbnRUZW1wbGF0ZSk7Ci0gICAgdmVy
dGV4U291cmNlID0gdmVydGV4U2hhZGVyU291cmNlOwotICAgIGZyYWdtZW50U291cmNlID0gZnJh
Z21lbnRCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgc2hhZGVyQnVpbGRlci5hcHBlbmQoXAorICAg
ICAgICAob3B0aW9ucyAmIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpBcHBsaWVyKSA/IEVO
QUJMRV9BUFBMSUVSKEFwcGxpZXIpIDogRElTQUJMRV9BUFBMSUVSKEFwcGxpZXIpKQorCisgICAg
U0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFRleHR1cmUpOworICAgIFNFVF9BUFBMSUVSX0ZST01f
T1BUSU9OUyhSZWN0KTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoU29saWRDb2xvcik7
CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKE9wYWNpdHkpOworICAgIFNFVF9BUFBMSUVS
X0ZST01fT1BUSU9OUyhNYXNrKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQW50aWFs
aWFzaW5nKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoR3JheXNjYWxlRmlsdGVyKTsK
KyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoU2VwaWFGaWx0ZXIpOworICAgIFNFVF9BUFBM
SUVSX0ZST01fT1BUSU9OUyhTYXR1cmF0ZUZpbHRlcik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9P
UFRJT05TKEh1ZVJvdGF0ZUZpbHRlcik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEJy
aWdodG5lc3NGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhDb250cmFzdEZp
bHRlcik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEludmVydEZpbHRlcik7CisgICAg
U0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKE9wYWNpdHlGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVS
X0ZST01fT1BUSU9OUyhCbHVyRmlsdGVyKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMo
QWxwaGFCbHVyKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQ29udGVudFRleHR1cmUp
OworICAgIFN0cmluZ0J1aWxkZXIgdmVydGV4QnVpbGRlcjsKKyAgICB2ZXJ0ZXhCdWlsZGVyLmFw
cGVuZChzaGFkZXJCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIHZlcnRleEJ1aWxkZXIuYXBwZW5k
KHZlcnRleFRlbXBsYXRlKTsKKyAgICBzaGFkZXJCdWlsZGVyLmFwcGVuZChmcmFnbWVudFRlbXBs
YXRlKTsKKyAgICB2ZXJ0ZXhTb3VyY2UgPSB2ZXJ0ZXhCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAg
ZnJhZ21lbnRTb3VyY2UgPSBzaGFkZXJCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKIFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcihHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgK
aW5kZXggYjM4MjJjNGQ5ZTY5YmFkNGU5MWY5ZDkzZDllZDcwODU1MjYzMjc5NS4uM2Y1YWU2OGEx
ZTRlNTczMjRjMDM1ODg2Y2UzYThjYTJhMTRlNzhiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyLmgKQEAgLTQ3LDkgKzQ3LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
flRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCk7CiAKICAgICBURVhNQVBfREVDTEFSRV9BVFRS
SUJVVEUodmVydGV4KQotICAgIFRFWE1BUF9ERUNMQVJFX0FUVFJJQlVURSh0ZXhDb29yZCkKIAot
ICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0obWF0cml4KQorICAgIFRFWE1BUF9ERUNMQVJFX1VO
SUZPUk0obW9kZWxWaWV3TWF0cml4KQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0ocHJvamVj
dGlvbk1hdHJpeCkKICAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKGZsaXApCiAgICAgVEVYTUFQ
X0RFQ0xBUkVfVU5JRk9STSh0ZXh0dXJlU2l6ZSkKICAgICBURVhNQVBfREVDTEFSRV9VTklGT1JN
KG9wYWNpdHkpCkBAIC02Niw2ICs2Niw4IEBAIHB1YmxpYzoKICAgICBURVhNQVBfREVDTEFSRV9T
QU1QTEVSKGNvbnRlbnRUZXh0dXJlKQogI2VuZGlmCiAKKyAgICB2b2lkIHNldE1hdHJpeChHQzNE
dWludCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKwogcHJpdmF0ZToKICAgICBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgY29u
c3QgU3RyaW5nJiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IFN0cmluZyYgZnJhZ21lbnRTaGFk
ZXJTb3VyY2UpOwogICAgIFBsYXRmb3JtM0RPYmplY3QgbV92ZXJ0ZXhTaGFkZXI7CkBAIC04Nyw3
ICs4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgU29saWRDb2xvciAgICAgICA9IDFMIDw8IDIsCiAg
ICAgICAgIE9wYWNpdHkgICAgICAgICAgPSAxTCA8PCAzLAogICAgICAgICBNYXNrICAgICAgICAg
ICAgID0gMUwgPDwgNCwKLSAgICAgICAgQW50aWFsaWFzICAgICAgICA9IDFMIDw8IDUsCisgICAg
ICAgIEFudGlhbGlhc2luZyAgICAgPSAxTCA8PCA1LAogICAgICAgICBHcmF5c2NhbGVGaWx0ZXIg
ID0gMUwgPDwgNiwKICAgICAgICAgU2VwaWFGaWx0ZXIgICAgICA9IDFMIDw8IDcsCiAgICAgICAg
IFNhdHVyYXRlRmlsdGVyICAgPSAxTCA8PCA4LAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180904</attachid>
            <date>2012-12-28 18:19:32 -0800</date>
            <delta_ts>2012-12-28 18:20:16 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-105377-20121228181645.patch</filename>
            <type>text/plain</type>
            <size>41343</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4NTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzIxMWE1MTI0MTdkYTY5
YjRmMzYwOWQyYmQ4NGMwODJjZDJkZTNjMS4uYmMwZjhhYzk2OWE0MDJiYWRiNjVkOGU2OTliZjcy
ODgyYzBjZjY2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTEyLTE4ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1RleG1hcF0gRWRnZSBh
bnRpYWxpYXNpbmcgaW4gVGV4dHVyZU1hcHBlciBjb3VsZCBiZSBkb25lIHdpdGggbGVzcyBwZXIt
cGl4ZWwgY2FsbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwNTM3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEluc3RlYWQgb2YgcGFzc2luZyA4IHF1YWQgZWRnZSBjb2VmZmljaWVudHMgYXMgdW5pZm9y
bXMgYW5kIGFuYWx5emUgdGhlIGRpc3RhbmNlIGluIHRoZQorICAgICAgICBmcmFnbWVudCBzaGFk
ZXIsIHdlIHJlbmRlciB0aGUgYW50aWFsaWFzZWQgcXVhZCBhcyA0IGVkZ2UgdHJpYW5nbGVzLCB3
aGljaCBvcmlnaW5hdGUgaW4gdGhlCisgICAgICAgIGNlbnRlciBvZiB0aGUgcXVhZC4gCisKKyAg
ICAgICAgVGhlIHZlcnRleCBzaGFkZXIgZXhwYW5kcyB0aGUgcXVhZCBiYXNlZCBvbiB0aGUgc2Ny
ZWVuIHRyYW5zZm9ybSwgYW5kIGFwcGxpZXMgYSB2YWx1ZSB0byBlYWNoIHZlcnRleCB0byBiZSBp
bnRlcnBvbGF0ZWQgYnkgdGhlIEdQVS4gCisKKyAgICAgICAgSXQgaXMgdmVyeSBkaWZmaWN1bHQg
dG8gdGVzdCBwZXJmb3JtYW5jZSBnYWluOyBIb3dldmVyLCB0aGUgZm9sbG93aW5nIGlzIGFwcGFy
ZW50OgorICAgICAgICAtIFRoZSBtYXRyaXggbXVsdGlwbGljYXRpb25zIGFuZCBpbnZlcnNpb25z
IGRvbmUgYmVmb3JlIGluIHRoZSBxdWFkIGluZmxhdGlvbiBjb2RlIHdlcmUKKyAgICAgICAgICBh
bHdheXMgdmlzaWJsZSBpbiBpbnN0cnVtZW50cy92YWxncmluZCBhbmQgdGhleSBhcmUgbm93IGdv
bmUuCisgICAgICAgIC0gV2Ugbm93IHBlcmZvcm0gYSBzaW5nbGUgc21vb3Roc3RlcCgpIGNvbW1h
bmQgcGVyIHBpeGVsIGluc3RlYWQgb2YgOCBjbGFtcChkb3QoKSkgY29tbWFuZHMuCisgICAgICAg
IC0gSXQgc2hvdWxkIG5vdyBiZSBwb3NzaWJsZSB0byBhbnRpYWxpYXMgaW5kaXZpZHVhbCBlZGdl
cy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpnZXRTdGF0aWNWQk8pOgorICAgICAgICAgICAgQ2Fj
aGUgdGhlIHVuaXQtcmVjdCBhbmQgZWRnZS10cmlhbmdsZSB2ZXJ0ZXggZGF0YSBpbiBhIFZCTy4K
KworICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6flRleHR1cmVNYXBwZXJH
TERhdGEpOgorICAgICAgICAgICAgQ2xlYXIgdGhlIGNhY2hlZCBWQk9zIHVwb24gZGVzdHJ1Y3Rp
b24uCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAg
ICAgIFJlbW92ZWQgY2FsbCB0byB1c2VQcm9ncmFtLCBzaW5jZSBpdCdzIGFscmVhZHkgY2FsbGVk
IGluIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbS4KKworICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0pOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcik6CisgICAgICAgICAgICBVc2Ug
dGhlIG5ldyBzaWduYXR1cmUgImRyYXciIGluc3RlYWQgb2YgImRyYXdRdWFkIi4KKworICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3RWRnZVRyaWFuZ2xlcyk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdVbml0UmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXcpOgorICAgICAgICAgICAgUmVtb3ZlZCBEcmF3UXVh
ZCwgaW5zdGVhZCBkcmF3IGVpdGhlciBhIHVuaXQgcmVjdCBvciBlZGdlIHRyaWFuZ2xlcy4KKwor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXApOgorICAgICAgICAg
ICAgVXNlIHRoZSBuZXcgc2V0TWF0cml4IGZ1bmN0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oOgorICAgICAgICAgICAgQWRkZWQgYSBw
YWludCBmbGFnIGZvciBhbnRpYWxpYXNpbmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OnNldE1hdHJpeCk6CisgICAgICAgICAgICBT
aW5jZSB3ZSBub3cgc2V0IHRoZSBtYXRyaXggaW4gbXVsdGlwbGUgbG9jYXRpb25zLCBhZGRlZCBh
IGNvbnZlbmllbmNlIAorICAgICAgICAgICAgZnVuY3Rpb24gZm9yIG1hdHJpeCB1bmlmb3JtLgor
CisgICAgICAgIChXZWJDb3JlOjpnZXRTaGFkZXJTcGVjKToKKyAgICAgICAgICAgIFVwZGF0ZSB0
aGUgdmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXIgdG8gYWNjb3VudCBmb3IgdGhlIG5ldyBhbnRp
YWxpYXNpbmcKKyAgICAgICAgICAgIG1lY2hhbmlzbS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaDoKKyAgICAgICAgKFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtKToKKwogMjAxMi0xMi0yNyAgS29uZGFwYWxseSBLYWx5YW4g
IDxrYWx5YW4ua29uZGFwYWxseUBpbnRlbC5jb20+CiAKICAgICAgICAgW0VGTF1bV2ViR0xdIElt
cGxlbWVudCBFR0wgc3VwcG9ydCB3aXRoIEdMWC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKaW5kZXgg
OTFiNGFlMjlhZWU5NzA5NzM4Y2ZjOWQyNWE0MGNjMGUwY2IwMmY4MC4uMThjMmM0ODc0MWEyNTE2
Mjk0ZjUzZmRlMDkxMzc0YjhjODVlZDVlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTEw
OSw3ICsxMDksNyBAQCBwdWJsaWM6CiAKICAgICBTaGFyZWRHTERhdGEmIHNoYXJlZEdMRGF0YSgp
IGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gKm1fc2hhcmVkR0xEYXRhOworICAgICAgICBy
ZXR1cm4gKnNoYXJlZERhdGE7CiAgICAgfQogCiAgICAgdm9pZCBpbml0aWFsaXplU3RlbmNpbCgp
OwpAQCAtMTIyLDkgKzEyMiwxMiBAQCBwdWJsaWM6CiAgICAgICAgICwgZGlkTW9kaWZ5U3RlbmNp
bChmYWxzZSkKICAgICAgICAgLCBwcmV2aW91c1NjaXNzb3JTdGF0ZSgwKQogICAgICAgICAsIHBy
ZXZpb3VzRGVwdGhTdGF0ZSgwKQotICAgICAgICAsIG1fc2hhcmVkR0xEYXRhKFRleHR1cmVNYXBw
ZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6Y3VycmVudFNoYXJlZEdMRGF0YSh0aGlzLT5jb250ZXh0
KSkKKyAgICAgICAgLCBzaGFyZWREYXRhKFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0
YTo6Y3VycmVudFNoYXJlZEdMRGF0YSh0aGlzLT5jb250ZXh0KSkKICAgICB7IH0KIAorICAgIH5U
ZXh0dXJlTWFwcGVyR0xEYXRhKCk7CisgICAgUGxhdGZvcm0zRE9iamVjdCBnZXRTdGF0aWNWQk8o
R0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIsIGNvbnN0IHZvaWQqIGRhdGEpOworCiAgICAg
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQ7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcHJv
amVjdGlvbk1hdHJpeDsKICAgICBUZXh0dXJlTWFwcGVyOjpQYWludEZsYWdzIFBhaW50RmxhZ3M7
CkBAIC0xMzUsMTAgKzEzOCwzMSBAQCBwdWJsaWM6CiAgICAgR0MzRGludCBwcmV2aW91c0RlcHRo
U3RhdGU7CiAgICAgR0MzRGludCB2aWV3cG9ydFs0XTsKICAgICBHQzNEaW50IHByZXZpb3VzU2Np
c3Nvcls0XTsKLSAgICBSZWZQdHI8U2hhcmVkR0xEYXRhPiBtX3NoYXJlZEdMRGF0YTsKKyAgICBS
ZWZQdHI8U2hhcmVkR0xEYXRhPiBzaGFyZWREYXRhOwogICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJl
PiBjdXJyZW50U3VyZmFjZTsKKyAgICBIYXNoTWFwPGNvbnN0IHZvaWQqLCBQbGF0Zm9ybTNET2Jq
ZWN0PiB2Ym9zOwogfTsKIAorUGxhdGZvcm0zRE9iamVjdCBUZXh0dXJlTWFwcGVyR0xEYXRhOjpn
ZXRTdGF0aWNWQk8oR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9p
ZCogZGF0YSkKK3sKKyAgICBIYXNoTWFwPGNvbnN0IHZvaWQqLCBQbGF0Zm9ybTNET2JqZWN0Pjo6
aXRlcmF0b3IgaXQgPSB2Ym9zLmZpbmQoZGF0YSk7CisgICAgaWYgKGl0ICE9IHZib3MuZW5kKCkp
CisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IHZibyA9
IGNvbnRleHQtPmNyZWF0ZUJ1ZmZlcigpOworICAgIGNvbnRleHQtPmJpbmRCdWZmZXIodGFyZ2V0
LCB2Ym8pOworICAgIGNvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCBHcmFw
aGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOworICAgIHZib3MuYWRkKGRhdGEsIHZibyk7Cisg
ICAgcmV0dXJuIHZibzsKK30KKworVGV4dHVyZU1hcHBlckdMRGF0YTo6flRleHR1cmVNYXBwZXJH
TERhdGEoKQoreworICAgIEhhc2hNYXA8Y29uc3Qgdm9pZCosIFBsYXRmb3JtM0RPYmplY3Q+Ojpp
dGVyYXRvciBlbmQgPSB2Ym9zLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxjb25zdCB2b2lkKiwg
UGxhdGZvcm0zRE9iamVjdD46Oml0ZXJhdG9yIGl0ID0gdmJvcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCisgICAgICAgIGNvbnRleHQtPmRlbGV0ZUJ1ZmZlcihpdC0+dmFsdWUpOworfQorCiB2
b2lkIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjppbml0KGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7CiAgICAgY2xpcFN0YWNrLmNsZWFyKCk7CkBAIC0yNjksNDIgKzI5Myw2IEBAIHZvaWQgVGV4
dHVyZU1hcHBlckdMOjplbmRQYWludGluZygpCiAjZW5kaWYKIH0KIAotdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmRyYXdRdWFkKGNvbnN0IERyYXdRdWFkJiBxdWFkVG9EcmF3LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bSogc2hhZGVyUHJvZ3JhbSwgR0MzRGVudW0gZHJhd2luZ01vZGUsIEZsYWdzIGZsYWdzKQotewot
ICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52
ZXJ0ZXhMb2NhdGlvbigpKTsKLSAgICBtX2NvbnRleHQzRC0+YmluZEJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6QVJSQVlfQlVGRkVSLCAwKTsKLQotICAgIGNvbnN0IEdDM0RmbG9hdCBxdWFkW10g
PSB7Ci0gICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMSgp
LngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAxKCkueSgpLAot
ICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDIoKS54KCks
IHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMigpLnkoKSwKLSAgICAg
ICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAzKCkueCgpLCBxdWFk
VG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDMoKS55KCksCi0gICAgICAgIHF1
YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wNCgpLngoKSwgcXVhZFRvRHJh
dy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnA0KCkueSgpCi0gICAgfTsKLSAgICBtX2Nv
bnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlv
bigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHF1
YWQpKTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9u
TWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KS5tdWx0aXBseShtb2RlbFZpZXdNYXRyaXgp
Lm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4KAotICAgICAgICAgICAgcXVhZFRvRHJhdy5v
cmlnaW5hbFRhcmdldFJlY3Qud2lkdGgoKSwgMCwgMCwgMCwKLSAgICAgICAgICAgIDAsIHF1YWRU
b0RyYXcub3JpZ2luYWxUYXJnZXRSZWN0LmhlaWdodCgpLCAwLCAwLAotICAgICAgICAgICAgMCwg
MCwgMSwgMCwKLSAgICAgICAgICAgIHF1YWRUb0RyYXcub3JpZ2luYWxUYXJnZXRSZWN0LngoKSwg
cXVhZFRvRHJhdy5vcmlnaW5hbFRhcmdldFJlY3QueSgpLCAwLCAxKSk7Ci0gICAgR0MzRGZsb2F0
IG00W10gPSB7Ci0gICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0xMigpLCBtYXRyaXgubTEz
KCksIG1hdHJpeC5tMTQoKSwKLSAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRyaXgubTIyKCksIG1h
dHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgpLAotICAgICAgICBtYXRyaXgubTMxKCksIG1hdHJpeC5t
MzIoKSwgbWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCksCi0gICAgICAgIG1hdHJpeC5tNDEoKSwg
bWF0cml4Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5tNDQoKQotICAgIH07Ci0gICAgbV9j
b250ZXh0M0QtPnVuaWZvcm1NYXRyaXg0ZnYoc2hhZGVyUHJvZ3JhbS0+bWF0cml4TG9jYXRpb24o
KSwgMSwgZmFsc2UsIG00KTsKLQotICAgIGlmIChmbGFncyAmIFNob3VsZEJsZW5kKSB7Ci0gICAg
ICAgIG1fY29udGV4dDNELT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhp
Y3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOwotICAgICAgICBtX2NvbnRleHQzRC0+
ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1f
Y29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0KLSAgICBtX2Nv
bnRleHQzRC0+ZHJhd0FycmF5cyhkcmF3aW5nTW9kZSwgMCwgNCk7Ci0gICAgbV9jb250ZXh0M0Qt
PmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigp
KTsKLX0KLQogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3ImIGNv
bG9yLCBmbG9hdCB3aWR0aCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4KQogewogICAgIGlmIChjbGlwU3RhY2so
KS5jdXJyZW50KCkuc2Npc3NvckJveC5pc0VtcHR5KCkpCkBAIC0zMTgsNyArMzA2LDcgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCB3
aWR0aCwgY29uc3QgRmxvYXRSZWMKICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTRmKHByb2dyYW0t
PmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgbV9jb250ZXh0M0QtPmxpbmVXaWR0
aCh3aWR0aCk7CiAKLSAgICBkcmF3UXVhZCh0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHBy
b2dyYW0uZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1AsIGNvbG9yLmhhc0FscGhh
KCkgPyBTaG91bGRCbGVuZCA6IDApOworICAgIGRyYXcodGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0
cml4LCBwcm9ncmFtLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6TElORV9MT09QLCBjb2xvci5o
YXNBbHBoYSgpID8gU2hvdWxkQmxlbmQgOiAwKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6
OmRyYXdSZXBhaW50Q291bnRlcihpbnQgdmFsdWUsIGludCBwb2ludFNpemUsIGNvbnN0IEZsb2F0
UG9pbnQmIHRhcmdldFBvaW50LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3
TWF0cml4KQpAQCAtNDA2LDE3NSArMzk0LDExMiBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJh
d1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSQog
ewogICAgIGJvb2wgdXNlUmVjdCA9IGZsYWdzICYgU2hvdWxkVXNlQVJCVGV4dHVyZVJlY3Q7CiAg
ICAgYm9vbCBtYXNrZWQgPSAhIW1hc2tUZXh0dXJlOwotICAgIGJvb2wgbmVlZHNBbnRpYWxpYXNp
bmcgPSBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyAmJiAhbW9kZWxWaWV3TWF0cml4
LmlzSW50ZWdlclRyYW5zbGF0aW9uKCk7Ci0KLSAgICBpZiAoIXVzZVJlY3QgJiYgbmVlZHNBbnRp
YWxpYXNpbmcgJiYgZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHRleHR1cmUsIGZsYWdzLCB0
ZXh0dXJlU2l6ZSwgdGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5LCBtYXNrVGV4
dHVyZSwgZXhwb3NlZEVkZ2VzKSkKLSAgICAgICAgcmV0dXJuOworICAgIGJvb2wgdXNlQW50aWFs
aWFzaW5nID0gbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcKKyAgICAgICAgJiYgZXhw
b3NlZEVkZ2VzID09IEFsbEVkZ2VzCisgICAgICAgICYmICFtb2RlbFZpZXdNYXRyaXgubWFwUXVh
ZCh0YXJnZXRSZWN0KS5pc1JlY3RpbGluZWFyKCk7CiAKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6T3B0aW9ucyBvcHRpb25zID0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRl
eHR1cmU7CiAgICAgaWYgKG1hc2tlZCkKICAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6TWFzazsKLSAgICBpZiAoZmxhZ3MgJiBTaG91bGRVc2VBUkJUZXh0dXJl
UmVjdCkKKyAgICBpZiAodXNlUmVjdCkKICAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6UmVjdDsKICAgICBpZiAob3BhY2l0eSA8IDEpCiAgICAgICAgIG9wdGlv
bnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wYWNpdHk7CisgICAgaWYgKHVzZUFu
dGlhbGlhc2luZykgeworICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpBbnRpYWxpYXNpbmc7CisgICAgICAgIGZsYWdzIHw9IFNob3VsZEFudGlhbGlhczsKKyAg
ICB9CisKKyAgICBpZiAobWFza2VkIHx8IHVzZUFudGlhbGlhc2luZyB8fCBvcGFjaXR5IDwgMSkK
KyAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CiAKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0+IHByb2dyYW07CiAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERh
dGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMp
OwotICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKLQog
ICAgIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCB0ZXh0dXJlLCBm
bGFncywgdGV4dHVyZVNpemUsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwg
bWFza1RleHR1cmUpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlkQ29sb3Io
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4
LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNv
bGlkQ29sb3IpOworICAgIEZsYWdzIGZsYWdzID0gMDsKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6T3B0aW9ucyBvcHRpb25zID0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNv
bGlkQ29sb3I7CisgICAgaWYgKCFtYXRyaXgubWFwUXVhZChyZWN0KS5pc1JlY3RpbGluZWFyKCkp
IHsKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QW50aWFs
aWFzaW5nOworICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZCB8IFNob3VsZEFudGlhbGlhczsK
KyAgICB9CisKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0g
PSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hh
ZGVyUHJvZ3JhbShvcHRpb25zKTsKICAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFt
LT5wcm9ncmFtSUQoKSk7CiAKICAgICBmbG9hdCByLCBnLCBiLCBhOwogICAgIGNvbG9yLmdldFJH
QkEociwgZywgYiwgYSk7CiAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm00Zihwcm9ncmFtLT5jb2xv
ckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOworICAgIGlmIChhIDwgMSkKKyAgICAgICAgZmxhZ3Mg
fD0gU2hvdWxkQmxlbmQ7CiAKLSAgICBkcmF3UXVhZChyZWN0LCBtYXRyaXgsIHByb2dyYW0uZ2V0
KCksIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIGEgPCAxID8gU2hvdWxkQmxlbmQg
OiAwKTsKLX0KLQotc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZpZXdwb3J0TWF0cml4KEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QpCi17Ci0gICAgR0MzRGludCB2aWV3cG9ydFs0XTsK
LSAgICBjb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpWSUVXUE9SVCwg
dmlld3BvcnQpOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwotICAgIG1hdHJp
eC50cmFuc2xhdGUzZCh2aWV3cG9ydFswXSwgdmlld3BvcnRbMV0sIDApOwotICAgIG1hdHJpeC5z
Y2FsZTNkKHZpZXdwb3J0WzJdLCB2aWV3cG9ydFszXSwgMCk7Ci0KLSAgICAvLyBNYXAgeCwgeSBh
bmQgeiB0byB1bml0IHNxdWFyZSBmcm9tIE9wZW5HTCBub3JtYWxpemVkIGRldmljZQotICAgIC8v
IGNvb3JkaW5hdGVzIHdoaWNoIGFyZSAtMSB0byAxIG9uIGV2ZXJ5IGF4aXMuCi0gICAgbWF0cml4
LnRyYW5zbGF0ZTNkKDAuNSwgMC41LCAwLjUpOwotICAgIG1hdHJpeC5zY2FsZTNkKDAuNSwgMC41
LCAwLjUpOwotCi0gICAgcmV0dXJuIG1hdHJpeDsKLX0KLQotc3RhdGljIHZvaWQgc2NhbGVMaW5l
RXF1YXRpb25Db2VmZmVjaWVudHNUb09wdGltaXplRGlzdGFuY2VDYWxjdWxhdGlvbihmbG9hdCog
Y29lZmZlY2llbnRzKQotewotICAgIC8vIEluIHRoZSBmcmFnbWVudCBzaGFkZXIgd2Ugd2FudCB0
byBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGZyb20gdGhpcwotICAgIC8vIGxpbmUgdG8gYSBwb2lu
dCAocCksIHdoaWNoIGlzIGdpdmVuIGJ5IHRoZSBmb3JtdWxhOgotICAgIC8vIChBKnAueCArIEIq
cC55ICsgQykgLyBzcXJ0IChhXjIgKyBiXjIpCi0gICAgLy8gV2UgY2FuIGRvIGEgc21hbGwgYW1v
dW50IG9mIHByZWNhbGN1bGF0aW9uIGhlcmUgdG8gcmVkdWNlIHRoZQotICAgIC8vIGFtb3VudCBv
ZiBtYXRoIGluIHRoZSBzaGFkZXIgYnkgc2NhbGluZyB0aGUgY29lZmZlY2llbnRzIG5vdy4KLSAg
ICBmbG9hdCBzY2FsZSA9IDEuMCAvIEZsb2F0UG9pbnQoY29lZmZlY2llbnRzWzBdLCBjb2VmZmVj
aWVudHNbMV0pLmxlbmd0aCgpOwotICAgIGNvZWZmZWNpZW50c1swXSA9IGNvZWZmZWNpZW50c1sw
XSAqIHNjYWxlOwotICAgIGNvZWZmZWNpZW50c1sxXSA9IGNvZWZmZWNpZW50c1sxXSAqIHNjYWxl
OwotICAgIGNvZWZmZWNpZW50c1syXSA9IGNvZWZmZWNpZW50c1syXSAqIHNjYWxlOwotfQotCi1z
dGF0aWMgdm9pZCBnZXRTdGFuZGFyZEVxdWF0aW9uQ29lZmZlY2llbnRzRm9yTGluZShjb25zdCBG
bG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGZsb2F0KiBjb2VmZmVjaWVudHMp
Ci17Ci0gICAgLy8gR2l2ZW4gdHdvIHBvaW50cywgdGhlIHN0YW5kYXJkIGVxdWF0aW9uIG9mIGEg
bGluZSAoQXggKyBCeSArIEMgPSAwKQotICAgIC8vIGNhbiBiZSBjYWxjdWxhdGVkIHZpYSB0aGUg
Zm9ybXVsYToKLSAgICAvLyAocDEueSDigJMgcDIueSl4ICsgKHAxLngg4oCTIHAyLngpeSArICgo
cDEueCpwMi55KSDigJMgKHAyLngqcDEueSkpID0gMAotICAgIGNvZWZmZWNpZW50c1swXSA9IHAx
LnkoKSAtIHAyLnkoKTsKLSAgICBjb2VmZmVjaWVudHNbMV0gPSBwMi54KCkgLSBwMS54KCk7Ci0g
ICAgY29lZmZlY2llbnRzWzJdID0gcDEueCgpICogcDIueSgpIC0gcDIueCgpICogcDEueSgpOwot
ICAgIHNjYWxlTGluZUVxdWF0aW9uQ29lZmZlY2llbnRzVG9PcHRpbWl6ZURpc3RhbmNlQ2FsY3Vs
YXRpb24oY29lZmZlY2llbnRzKTsKKyAgICBkcmF3KHJlY3QsIG1hdHJpeCwgcHJvZ3JhbS5nZXQo
KSwgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgZmxhZ3MpOwogfQogCi1zdGF0aWMg
dm9pZCBxdWFkVG9FZGdlQXJyYXkoY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBmbG9hdCogZWRnZUFy
cmF5KQordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdFZGdlVHJpYW5nbGVzKFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtKQogewotICAgIGlmIChxdWFkLmlzQ291bnRlcmNsb2Nr
d2lzZSgpKSB7Ci0gICAgICAgIGdldFN0YW5kYXJkRXF1YXRpb25Db2VmZmVjaWVudHNGb3JMaW5l
KHF1YWQucDQoKSwgcXVhZC5wMygpLCBlZGdlQXJyYXkpOwotICAgICAgICBnZXRTdGFuZGFyZEVx
dWF0aW9uQ29lZmZlY2llbnRzRm9yTGluZShxdWFkLnAzKCksIHF1YWQucDIoKSwgZWRnZUFycmF5
ICsgMyk7Ci0gICAgICAgIGdldFN0YW5kYXJkRXF1YXRpb25Db2VmZmVjaWVudHNGb3JMaW5lKHF1
YWQucDIoKSwgcXVhZC5wMSgpLCBlZGdlQXJyYXkgKyA2KTsKLSAgICAgICAgZ2V0U3RhbmRhcmRF
cXVhdGlvbkNvZWZmZWNpZW50c0ZvckxpbmUocXVhZC5wMSgpLCBxdWFkLnA0KCksIGVkZ2VBcnJh
eSArIDkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGdldFN0YW5kYXJkRXF1YXRpb25D
b2VmZmVjaWVudHNGb3JMaW5lKHF1YWQucDQoKSwgcXVhZC5wMSgpLCBlZGdlQXJyYXkpOwotICAg
IGdldFN0YW5kYXJkRXF1YXRpb25Db2VmZmVjaWVudHNGb3JMaW5lKHF1YWQucDEoKSwgcXVhZC5w
MigpLCBlZGdlQXJyYXkgKyAzKTsKLSAgICBnZXRTdGFuZGFyZEVxdWF0aW9uQ29lZmZlY2llbnRz
Rm9yTGluZShxdWFkLnAyKCksIHF1YWQucDMoKSwgZWRnZUFycmF5ICsgNik7Ci0gICAgZ2V0U3Rh
bmRhcmRFcXVhdGlvbkNvZWZmZWNpZW50c0ZvckxpbmUocXVhZC5wMygpLCBxdWFkLnA0KCksIGVk
Z2VBcnJheSArIDkpOworICAgIGNvbnN0IEdDM0RmbG9hdCBsZWZ0ID0gMDsKKyAgICBjb25zdCBH
QzNEZmxvYXQgdG9wID0gMDsKKyAgICBjb25zdCBHQzNEZmxvYXQgcmlnaHQgPSAxOworICAgIGNv
bnN0IEdDM0RmbG9hdCBib3R0b20gPSAxOworICAgIGNvbnN0IEdDM0RmbG9hdCBjZW50ZXIgPSAw
LjU7CisvLyBFYWNoIHRyaWFuZ2xlIGNvbnNpc3RzIG9mIHR3byBlZGdlIHBvaW50cywgZWFjaCBv
bmUgd2l0aCB0aGUgencgdmFsdWVzIGVxdWFsIHRvIHh5LAorLy8gYW5kIHRoZSBjZW50ZXIgcG9p
bnQsIHdpdGggdGhlIHp3IGNvb3JkaW5hdGVzIGVxdWFsIHRvIHRoZSBjZW50ZXIgb2YgdGhlIGVk
Z2UgcG9pbnRzLgorI2RlZmluZSBTSURFX1RSSUFOR0xFX0RBVEEoeDEsIHkxLCB4MiwgeTIpIFwK
KyAgICB4MSwgeTEsIHgxLCB5MSwgXAorICAgIHgyLCB5MiwgeDIsIHkyLCBcCisgICAgY2VudGVy
LCBjZW50ZXIsICh4MSArIHgyKSAvIDIsICh5MSArIHkyKSAvIDIKKworICAgIHN0YXRpYyBjb25z
dCBHQzNEZmxvYXQgdW5pdFJlY3RTaWRlVHJpYW5nbGVzW10gPSB7CisgICAgICAgIFNJREVfVFJJ
QU5HTEVfREFUQShsZWZ0LCB0b3AsIHJpZ2h0LCB0b3ApLAorICAgICAgICBTSURFX1RSSUFOR0xF
X0RBVEEobGVmdCwgdG9wLCBsZWZ0LCBib3R0b20pLAorICAgICAgICBTSURFX1RSSUFOR0xFX0RB
VEEocmlnaHQsIHRvcCwgcmlnaHQsIGJvdHRvbSksCisgICAgICAgIFNJREVfVFJJQU5HTEVfREFU
QShsZWZ0LCBib3R0b20sIHJpZ2h0LCBib3R0b20pCisgICAgfTsKKyN1bmRlZiBTSURFX1RSSUFO
R0xFCisgICAgUGxhdGZvcm0zRE9iamVjdCB2Ym8gPSBkYXRhKCkuZ2V0U3RhdGljVkJPKEdyYXBo
aWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHNpemVvZihHQzNEZmxvYXQpICogNDgsIHVuaXRS
ZWN0U2lkZVRyaWFuZ2xlcyk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRCdWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgdmJvKTsKKyAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0
cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCA0LCBHcmFwaGljc0NvbnRleHQz
RDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhHcmFw
aGljc0NvbnRleHQzRDo6VFJJQU5HTEVTLCAwLCAxMik7CiB9CiAKLXN0YXRpYyBGbG9hdFNpemUg
c2NhbGVkVmVjdG9yRGlmZmVyZW5jZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50MiwgZmxvYXQgc2NhbGUpCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJh
d1VuaXRSZWN0KFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCBHQzNEZW51bSBk
cmF3aW5nTW9kZSkKIHsKLSAgICBGbG9hdFNpemUgdmVjdG9yID0gcG9pbnQxIC0gcG9pbnQyOwot
ICAgIGlmICh2ZWN0b3IuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkpCi0gICAgICAgIHZlY3Rvci5z
Y2FsZSgxLjAgLyB2ZWN0b3IuZGlhZ29uYWxMZW5ndGgoKSk7Ci0KLSAgICB2ZWN0b3Iuc2NhbGUo
c2NhbGUpOwotICAgIHJldHVybiB2ZWN0b3I7CisgICAgc3RhdGljIGNvbnN0IEdDM0RmbG9hdCB1
bml0UmVjdFtdID0geyAwLCAwLCAxLCAwLCAxLCAxLCAwLCAxIH07CisgICAgUGxhdGZvcm0zRE9i
amVjdCB2Ym8gPSBkYXRhKCkuZ2V0U3RhdGljVkJPKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9C
VUZGRVIsIHNpemVvZihHQzNEZmxvYXQpICogOCwgdW5pdFJlY3QpOworICAgIG1fY29udGV4dDNE
LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHZibyk7CisgICAg
bV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4TG9jYXRpb24o
KSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgbV9jb250
ZXh0M0QtPmRyYXdBcnJheXMoZHJhd2luZ01vZGUsIDAsIDQpOwogfQogCi1zdGF0aWMgRmxvYXRR
dWFkIGluZmxhdGVRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgZmxvYXQgZGlzdGFuY2UpCit2
b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhdyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtKiBzaGFkZXJQcm9ncmFtLCBHQzNEZW51bSBkcmF3aW5nTW9kZSwgRmxhZ3MgZmxhZ3Mp
CiB7Ci0gICAgRmxvYXRRdWFkIGV4cGFuZGVkUXVhZCA9IHF1YWQ7Ci0gICAgZXhwYW5kZWRRdWFk
LnNldFAxKGV4cGFuZGVkUXVhZC5wMSgpICsgc2NhbGVkVmVjdG9yRGlmZmVyZW5jZShxdWFkLnAx
KCksIHF1YWQucDIoKSwgZGlzdGFuY2UpKTsKLSAgICBleHBhbmRlZFF1YWQuc2V0UDQoZXhwYW5k
ZWRRdWFkLnA0KCkgKyBzY2FsZWRWZWN0b3JEaWZmZXJlbmNlKHF1YWQucDQoKSwgcXVhZC5wMygp
LCBkaXN0YW5jZSkpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9CisgICAgICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4KG1vZGVsVmlld01hdHJpeCkubXVsdGlwbHkoVHJhbnNmb3Jt
YXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoRmxvYXRSZWN0KDAsIDAsIDEsIDEpLCByZWN0KSk7CiAK
LSAgICBleHBhbmRlZFF1YWQuc2V0UDEoZXhwYW5kZWRRdWFkLnAxKCkgKyBzY2FsZWRWZWN0b3JE
aWZmZXJlbmNlKHF1YWQucDEoKSwgcXVhZC5wNCgpLCBkaXN0YW5jZSkpOwotICAgIGV4cGFuZGVk
UXVhZC5zZXRQMihleHBhbmRlZFF1YWQucDIoKSArIHNjYWxlZFZlY3RvckRpZmZlcmVuY2UocXVh
ZC5wMigpLCBxdWFkLnAzKCksIGRpc3RhbmNlKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZl
cnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOworICAgIHNo
YWRlclByb2dyYW0tPnNldE1hdHJpeChzaGFkZXJQcm9ncmFtLT5tb2RlbFZpZXdNYXRyaXhMb2Nh
dGlvbigpLCBtYXRyaXgpOworICAgIHNoYWRlclByb2dyYW0tPnNldE1hdHJpeChzaGFkZXJQcm9n
cmFtLT5wcm9qZWN0aW9uTWF0cml4TG9jYXRpb24oKSwgZGF0YSgpLnByb2plY3Rpb25NYXRyaXgp
OwogCi0gICAgZXhwYW5kZWRRdWFkLnNldFAyKGV4cGFuZGVkUXVhZC5wMigpICsgc2NhbGVkVmVj
dG9yRGlmZmVyZW5jZShxdWFkLnAyKCksIHF1YWQucDEoKSwgZGlzdGFuY2UpKTsKLSAgICBleHBh
bmRlZFF1YWQuc2V0UDMoZXhwYW5kZWRRdWFkLnAzKCkgKyBzY2FsZWRWZWN0b3JEaWZmZXJlbmNl
KHF1YWQucDMoKSwgcXVhZC5wNCgpLCBkaXN0YW5jZSkpOworICAgIGlmIChmbGFncyAmIFNob3Vs
ZEJsZW5kKSB7CisgICAgICAgIG1fY29udGV4dDNELT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0
M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOworICAgICAg
ICBtX2NvbnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgfSBl
bHNlCisgICAgICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVO
RCk7CiAKLSAgICBleHBhbmRlZFF1YWQuc2V0UDMoZXhwYW5kZWRRdWFkLnAzKCkgKyBzY2FsZWRW
ZWN0b3JEaWZmZXJlbmNlKHF1YWQucDMoKSwgcXVhZC5wMigpLCBkaXN0YW5jZSkpOwotICAgIGV4
cGFuZGVkUXVhZC5zZXRQNChleHBhbmRlZFF1YWQucDQoKSArIHNjYWxlZFZlY3RvckRpZmZlcmVu
Y2UocXVhZC5wNCgpLCBxdWFkLnAxKCksIGRpc3RhbmNlKSk7CisgICAgaWYgKGZsYWdzICYgU2hv
dWxkQW50aWFsaWFzKQorICAgICAgICBkcmF3RWRnZVRyaWFuZ2xlcyhzaGFkZXJQcm9ncmFtKTsK
KyAgICBlbHNlCisgICAgICAgIGRyYXdVbml0UmVjdChzaGFkZXJQcm9ncmFtLCBkcmF3aW5nTW9k
ZSk7CiAKLSAgICByZXR1cm4gZXhwYW5kZWRRdWFkOworICAgIG1fY29udGV4dDNELT5kaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7CiB9Ci0K
LWJvb2wgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMy
X3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgb3JpZ2luYWxUYXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9k
ZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4
dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzKQordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdU
ZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSogcHJvZ3Jh
bSwgdWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmIHNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmll
d01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUp
CiB7Ci0gICAgLy8gVGhlIGFudGlhbGlhc2luZyBwYXRoIGRvZXMgbm90IHN1cHBvcnQgbWFzayB0
ZXh0dXJlcyBhdCB0aGUgbW9tZW50LgotICAgIGlmIChtYXNrVGV4dHVyZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgLy8gRm9yIG5vdyB3ZSBwdW50IG9uIHJlbmRlcmluZyB0aWxlZCBs
YXllcnMgd2l0aCBhbnRpYWxpYXNpbmcuIEl0J3MgcXVpdGUgaGFyZAotICAgIC8vIHRvIHJlbmRl
ciB0aGVtIHdpdGhvdXQgc2VhbXMuCi0gICAgaWYgKGV4cG9zZWRFZGdlcyAhPSBBbGxFZGdlcykK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVGhlIGdvYWwgaGVyZSBpcyByZW5kZXIg
YSBzbGlnaHRseSBsYXJnZXIgKDAuNzUgcGl4ZWxzIGluIHNjcmVlbiBzcGFjZSkgcXVhZCBhbmQg
dG8KLSAgICAvLyBncmFkdWFsbHkgdGFwZXIgb2ZmIHRoZSBhbHBoYSB2YWx1ZXMgdG8gZG8gYSBz
aW1wbGUgdmVyc2lvbiBvZiBlZGdlIGRpc3RhbmNlCi0gICAgLy8gYW50aWFsaWFzaW5nLiBOb3Rl
IGhlcmUgdGhhdCB3ZSBhcmUgYWxzbyBpbmNsdWRpbmcgdGhlIHZpZXdwb3J0IG1hdHJpeCAod2hp
Y2gKLSAgICAvLyB0cmFuc2xhdGVzIGZyb20gbm9ybWFsaXplZCBkZXZpY2UgY29vcmRpbmF0ZXMg
dG8gc2NyZWVuIGNvb3JkaW5hdGVzKSwgYmVjYXVzZSB0aGVzZQotICAgIC8vIHZhbHVlcyBhcmUg
Y29uc3VtZWQgaW4gdGhlIGZyYWdtZW50IHNoYWRlciwgd2hpY2ggd29ya3MgaW4gc2NyZWVuIGNv
b3JkaW5hdGVzLgotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcmVlblNwYWNlVHJhbnNmb3Jt
ID0gdmlld3BvcnRNYXRyaXgobV9jb250ZXh0M0QuZ2V0KCkpLm11bHRpcGx5KFRyYW5zZm9ybWF0
aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KSkubXVsdGlwbHkobW9kZWxWaWV3TWF0
cml4KS50bzJkVHJhbnNmb3JtKCk7Ci0gICAgaWYgKCFzY3JlZW5TcGFjZVRyYW5zZm9ybS5pc0lu
dmVydGlibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEZsb2F0UXVhZCBxdWFkSW5T
Y3JlZW5TcGFjZSA9IHNjcmVlblNwYWNlVHJhbnNmb3JtLm1hcFF1YWQob3JpZ2luYWxUYXJnZXRS
ZWN0KTsKLQotICAgIGNvbnN0IGZsb2F0IGluZmxhdGlvbkRpc3RhbmNlID0gMC43NTsKLSAgICBG
bG9hdFF1YWQgZXhwYW5kZWRRdWFkSW5TY3JlZW5TcGFjZSA9IGluZmxhdGVRdWFkKHF1YWRJblNj
cmVlblNwYWNlLCBpbmZsYXRpb25EaXN0YW5jZSk7Ci0KLSAgICAvLyBJbiB0aGUgbm9uLWFudGlh
bGlhc2VkIGNhc2UgdGhlIHZlcnRpY2VzIHBhc3NlZCBhcmUgdGhlIHVuaXQgcmVjdGFuZ2xlIGFu
ZCBkb3VibGUKLSAgICAvLyBhcyB0aGUgdGV4dHVyZSBjb29yZGluYXRlcyAoMCwwIDEsMCwgMSwx
IGFuZCAwLDEpLiBIZXJlIHdlIG1hcCB0aGUgZXhwYW5kZWQgcXVhZAotICAgIC8vIGNvb3JkaW5h
dGVzIGluIHNjcmVlbiBzcGFjZSBiYWNrIHRvIHRoZSBvcmlnaW5hbCByZWN0J3MgdGV4dHVyZSBj
b29yZGluYXRlcy4KLSAgICAvLyBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mIHNsaWdodGx5IGluY3Jl
YXNpbmcgdGhlIHNpemUgb2YgdGhlIG9yaWdpbmFsIHF1YWQncyBnZW9tZXRyeQotICAgIC8vIGlu
IHRoZSB2ZXJ0ZXggc2hhZGVyLgotICAgIEZsb2F0UXVhZCBleHBhbmRlZFF1YWRJblRleHR1cmVD
b29yZGluYXRlcyA9IHNjcmVlblNwYWNlVHJhbnNmb3JtLmludmVyc2UoKS5tYXBRdWFkKGV4cGFu
ZGVkUXVhZEluU2NyZWVuU3BhY2UpOwotICAgIGV4cGFuZGVkUXVhZEluVGV4dHVyZUNvb3JkaW5h
dGVzLm1vdmUoLW9yaWdpbmFsVGFyZ2V0UmVjdC54KCksIC1vcmlnaW5hbFRhcmdldFJlY3QueSgp
KTsKLSAgICBleHBhbmRlZFF1YWRJblRleHR1cmVDb29yZGluYXRlcy5zY2FsZSgxIC8gb3JpZ2lu
YWxUYXJnZXRSZWN0LndpZHRoKCksIDEgLyBvcmlnaW5hbFRhcmdldFJlY3QuaGVpZ2h0KCkpOwot
Ci0gICAgLy8gV2UgcHJlcGFyZSBib3RoIHRoZSBleHBhbmRlZCBxdWFkIGZvciB0aGUgZnJhZ21l
bnQgc2hhZGVyIGFzIHdlbGwgYXMgdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nCi0gICAgLy8gYm94
IG9mIHRoYXQgcXVhZCwgYXMgdGhhdCBzZWVtcyBuZWNlc3NhcnkgdG8gcHJvcGVybHkgYW50aWFs
aWFzIGJhY2tmYWNpbmcgcXVhZHMuCi0gICAgZmxvYXQgdGFyZ2V0UXVhZEVkZ2VzWzI0XTsKLSAg
ICBxdWFkVG9FZGdlQXJyYXkoZXhwYW5kZWRRdWFkSW5TY3JlZW5TcGFjZSwgdGFyZ2V0UXVhZEVk
Z2VzKTsKLSAgICBxdWFkVG9FZGdlQXJyYXkoaW5mbGF0ZVF1YWQocXVhZEluU2NyZWVuU3BhY2Uu
Ym91bmRpbmdCb3goKSwgIGluZmxhdGlvbkRpc3RhbmNlKSwgdGFyZ2V0UXVhZEVkZ2VzICsgMTIp
OwotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcHRpb25zIG9wdGlvbnMgPSBUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QW50aWFsaWFzIHwgVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6OlRleHR1cmU7Ci0gICAgaWYgKG9wYWNpdHkgPCAxKQotICAgICAgICBvcHRpb25zIHw9
IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5OwotCi0gICAgUmVmUHRyPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0ob3B0aW9ucyk7CiAgICAg
bV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwotICAgIG1fY29u
dGV4dDNELT51bmlmb3JtM2Z2KHByb2dyYW0tPmV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFj
ZUxvY2F0aW9uKCksIDgsIHRhcmdldFF1YWRFZGdlcyk7Ci0KLSAgICBkcmF3VGV4dHVyZWRRdWFk
V2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgdGV4dHVyZSwgZmxhZ3MsIHNpemUsIERyYXdRdWFk
KG9yaWdpbmFsVGFyZ2V0UmVjdCwgZXhwYW5kZWRRdWFkSW5UZXh0dXJlQ29vcmRpbmF0ZXMpLCBt
b2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIDAgLyogbWFza1RleHR1cmUgKi8pOwotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQ
cm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCB1aW50MzJfdCB0ZXh0
dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgRHJhd1F1YWQmIHF1
YWRUb0RyYXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZs
b2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKQotewotICAgIG1f
Y29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlv
bigpKTsKICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRTApOwogICAgIEdDM0RlbnVtIHRhcmdldCA9IGZsYWdzICYgU2hvdWxkVXNlQVJCVGV4
dHVyZVJlY3QgPyBHQzNEZW51bShFeHRlbnNpb25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQikg
OiBHQzNEZW51bShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCk7CiAgICAgbV9jb250ZXh0
M0QtPmJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7CkBAIC01OTYsNyArNTIxLDcgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbSogcHIKICAgICBpZiAob3BhY2l0eSA8IDEgfHwgbWFza1RleHR1cmUp
CiAgICAgICAgIGZsYWdzIHw9IFNob3VsZEJsZW5kOwogCi0gICAgZHJhd1F1YWQocXVhZFRvRHJh
dywgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLCBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVf
RkFOLCBmbGFncyk7CisgICAgZHJhdyhyZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0sIEdy
YXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIGZsYWdzKTsKIH0KIAogQml0bWFwVGV4dHVy
ZUdMOjpCaXRtYXBUZXh0dXJlR0woVGV4dHVyZU1hcHBlckdMKiB0ZXh0dXJlTWFwcGVyKQpAQCAt
MTE3MCwyNiArMTA5NSwxMCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgogICAgIGNvbnN0IEdD
M0RmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9OwogICAgIG1fY29u
dGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleExvY2F0aW9uKCksIDIs
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIodW5pdFJlY3Qp
KTsKIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0
cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KQotICAgICAgICAgICAgLm11bHRpcGx5KG1vZGVs
Vmlld01hdHJpeCkKLSAgICAgICAgICAgIC5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeCh0
YXJnZXRSZWN0LndpZHRoKCksIDAsIDAsIDAsCi0gICAgICAgICAgICAgICAgMCwgdGFyZ2V0UmVj
dC5oZWlnaHQoKSwgMCwgMCwKLSAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLAotICAgICAgICAg
ICAgICAgIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgMCwgMSkpOwotCi0gICAgY29u
c3QgR0MzRGZsb2F0IG00W10gPSB7Ci0gICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0xMigp
LCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQoKSwKLSAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRy
aXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgpLAotICAgICAgICBtYXRyaXgubTMx
KCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCksCi0gICAgICAgIG1h
dHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5tNDQoKQotICAg
IH07CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRy
aXgobW9kZWxWaWV3TWF0cml4KQorICAgICAgICAubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRy
aXg6OnJlY3RUb1JlY3QoRmxvYXRSZWN0KDAsIDAsIDEsIDEpLCB0YXJnZXRSZWN0KSk7CiAKLSAg
ICBjb25zdCBHQzNEZmxvYXQgbTRhbGxbXSA9IHsKLSAgICAgICAgMiwgMCwgMCwgMCwKLSAgICAg
ICAgMCwgMiwgMCwgMCwKLSAgICAgICAgMCwgMCwgMSwgMCwKLSAgICAgICAgLTEsIC0xLCAwLCAx
Ci0gICAgfTsKKyAgICBzdGF0aWMgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggZnVsbFByb2pl
Y3Rpb25NYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVjdChGbG9hdFJlY3Qo
MCwgMCwgMSwgMSksIEZsb2F0UmVjdCgtMSwgLTEsIDIsIDIpKTsKIAogICAgIGludCYgc3RlbmNp
bEluZGV4ID0gY2xpcFN0YWNrKCkuY3VycmVudCgpLnN0ZW5jaWxJbmRleDsKIApAQCAtMTIwMiwx
MyArMTExMSwxNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgogICAgIG1fY29udGV4dDNELT5z
dGVuY2lsTWFzaygweGZmICYgfihzdGVuY2lsSW5kZXggLSAxKSk7CiAKICAgICAvLyBGaXJzdCBj
bGVhciB0aGUgZW50aXJlIGJ1ZmZlciBhdCB0aGUgY3VycmVudCBpbmRleC4KLSAgICBtX2NvbnRl
eHQzRC0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxz
ZSwgY29uc3RfY2FzdDxHQzNEZmxvYXQqPihtNGFsbCkpOworICAgIHByb2dyYW0tPnNldE1hdHJp
eChwcm9ncmFtLT5wcm9qZWN0aW9uTWF0cml4TG9jYXRpb24oKSwgZnVsbFByb2plY3Rpb25NYXRy
aXgpOworICAgIHByb2dyYW0tPnNldE1hdHJpeChwcm9ncmFtLT5tb2RlbFZpZXdNYXRyaXhMb2Nh
dGlvbigpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKICAgICBtX2NvbnRleHQzRC0+c3RlbmNp
bE9wKEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQzRDo6WkVSTywgR3Jh
cGhpY3NDb250ZXh0M0Q6OlpFUk8pOwogICAgIG1fY29udGV4dDNELT5kcmF3QXJyYXlzKEdyYXBo
aWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIDAsIDQpOwogCiAgICAgLy8gTm93IGFwcGx5IHRo
ZSBjdXJyZW50IGluZGV4IHRvIHRoZSBuZXcgcXVhZC4KICAgICBtX2NvbnRleHQzRC0+c3RlbmNp
bE9wKEdyYXBoaWNzQ29udGV4dDNEOjpSRVBMQUNFLCBHcmFwaGljc0NvbnRleHQzRDo6UkVQTEFD
RSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFUExBQ0UpOwotICAgIG1fY29udGV4dDNELT51bmlmb3Jt
TWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIGZhbHNlLCBjb25zdF9jYXN0
PEdDM0RmbG9hdCo+KG00KSk7CisgICAgcHJvZ3JhbS0+c2V0TWF0cml4KHByb2dyYW0tPnByb2pl
Y3Rpb25NYXRyaXhMb2NhdGlvbigpLCBkYXRhKCkucHJvamVjdGlvbk1hdHJpeCk7CisgICAgcHJv
Z3JhbS0+c2V0TWF0cml4KHByb2dyYW0tPm1vZGVsVmlld01hdHJpeExvY2F0aW9uKCksIG1hdHJp
eCk7CiAgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFO
R0xFX0ZBTiwgMCwgNCk7CiAKICAgICAvLyBDbGVhciB0aGUgc3RhdGUuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdM
LmgKaW5kZXggNTlkYjNkMzk3OWMwZDEwYmU0MTQ4MTVlNzgyMzE1ZGYwN2MzNWExNi4uYWExMzMx
MmZhYWZjYTMxZmRmMWQxYzQxNGQzNWMyN2NhYzgwMmNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaApA
QCAtNDQsNyArNDQsOCBAQCBwdWJsaWM6CiAgICAgZW51bSBGbGFnIHsKICAgICAgICAgU2hvdWxk
QmxlbmQgPSAweDAxLAogICAgICAgICBTaG91bGRGbGlwVGV4dHVyZSA9IDB4MDIsCi0gICAgICAg
IFNob3VsZFVzZUFSQlRleHR1cmVSZWN0ID0gMHgwNAorICAgICAgICBTaG91bGRVc2VBUkJUZXh0
dXJlUmVjdCA9IDB4MDQsCisgICAgICAgIFNob3VsZEFudGlhbGlhcyA9IDB4MDgKICAgICB9Owog
CiAgICAgdHlwZWRlZiBpbnQgRmxhZ3M7CkBAIC05OCwyMiArOTksMTMgQEAgcHJpdmF0ZToKICAg
ICAgICAgVmVjdG9yPENsaXBTdGF0ZT4gY2xpcFN0YWNrOwogICAgIH07CiAKLSAgICBzdHJ1Y3Qg
RHJhd1F1YWQgewotICAgICAgICBEcmF3UXVhZChjb25zdCBGbG9hdFJlY3QmIG9yaWdpbmFsVGFy
Z2V0UmVjdCwgY29uc3QgRmxvYXRRdWFkJiB0YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlID0g
RmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgRmxvYXRTaXplKDEsIDEpKSkKLSAgICAgICAgICAgIDog
b3JpZ2luYWxUYXJnZXRSZWN0KG9yaWdpbmFsVGFyZ2V0UmVjdCkKLSAgICAgICAgICAgICwgdGFy
Z2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZSh0YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlKQot
ICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBGbG9hdFJlY3Qgb3JpZ2luYWxUYXJnZXRS
ZWN0OwotICAgICAgICBGbG9hdFF1YWQgdGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZTsKLSAg
ICB9OwotCiAgICAgVGV4dHVyZU1hcHBlckdMKCk7CiAKLSAgICBib29sIGRyYXdUZXh0dXJlV2l0
aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncywgY29uc3QgSW50U2l6ZSYsIGNv
bnN0IEZsb2F0UmVjdCYgb3JpZ2luYWxUYXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJl
KiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzKTsKLSAgICB2b2lkIGRyYXdUZXh0
dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSosIHVpbnQzMl90
IHRleHR1cmUsIEZsYWdzLCBjb25zdCBJbnRTaXplJiwgY29uc3QgRHJhd1F1YWQmLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25z
dCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7Ci0gICAgdm9pZCBkcmF3UXVhZChjb25zdCBE
cmF3UXVhZCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiwgR0MzRGVudW0gZHJhd2luZ01vZGUsIEZsYWdzKTsK
KyAgICB2b2lkIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbSosIHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBJbnRTaXplJiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwg
ZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpOworICAgIHZv
aWQgZHJhdyhjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9k
ZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSosIEdDM0RlbnVtIGRyYXdp
bmdNb2RlLCBGbGFncyk7CisKKyAgICB2b2lkIGRyYXdVbml0UmVjdChUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbSosIEdDM0RlbnVtIGRyYXdpbmdNb2RlKTsKKyAgICB2b2lkIGRyYXdFZGdlVHJp
YW5nbGVzKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKik7CiAKICAgICBib29sIGJlZ2luU2Np
c3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKTsK
ICAgICB2b2lkIGJpbmREZWZhdWx0U3VyZmFjZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlci5jcHAKaW5kZXggMmQ4NmJmODU5ZGE4NjE3ZmM0ODc5ZjJkNzE3NTkyMjhh
YTFjMDQzZi4uMTg1NWJlYjZlMDI4ZmQ0ZGQwNmE4YWFmMjU4ZGE1MDk2MzZjOGVjYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCkBAIC03MCw2ICs3MCwxOCBA
QCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0o
UGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleAogICAgIExPRyhDb21wb3NpdGluZywgIlByb2dyYW0g
bG9nOiAlc1xuIiwgbG9nLnV0ZjgoKS5kYXRhKCkpOwogfQogCit2b2lkIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtOjpzZXRNYXRyaXgoR0MzRHVpbnQgbG9jYXRpb24sIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtYXRyaXgpCit7CisgICAgR0MzRGZsb2F0IG1hdHJpeEFzRmxvYXRzW10g
PSB7CisgICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0xMigpLCBtYXRyaXgubTEzKCksIG1h
dHJpeC5tMTQoKSwKKyAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRyaXgubTIyKCksIG1hdHJpeC5t
MjMoKSwgbWF0cml4Lm0yNCgpLAorICAgICAgICBtYXRyaXgubTMxKCksIG1hdHJpeC5tMzIoKSwg
bWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCksCisgICAgICAgIG1hdHJpeC5tNDEoKSwgbWF0cml4
Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5tNDQoKQorICAgIH07CisKKyAgICBtX2NvbnRl
eHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIDEsIGZhbHNlLCBtYXRyaXhBc0Zsb2F0cyk7
Cit9CisKIEdDM0R1aW50IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpnZXRMb2NhdGlvbihj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFZhcmlhYmxlVHlwZSB0eXBlKQogewogICAgIEhhc2hN
YXA8QXRvbWljU3RyaW5nLCBHQzNEdWludD46Oml0ZXJhdG9yIGl0ID0gbV92YXJpYWJsZXMuZmlu
ZChuYW1lKTsKQEAgLTEwNiwzMiArMTE4LDY3IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
Ojp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKQogICAgIG1fY29udGV4dC0+ZGVsZXRlUHJv
Z3JhbShwcm9ncmFtSUQpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291
cmNlID0KKyNkZWZpbmUgR0xTTF9ESVJFQ1RJVkUoLi4uKSAiIyIjX19WQV9BUkdTX18iXG4iCitz
dGF0aWMgY29uc3QgY2hhciogdmVydGV4VGVtcGxhdGUgPQogICAgIFNUUklOR0lGWSgKLSAgICAg
ICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OworICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRl
eDsKKyAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbW9kZWxWaWV3TWF0cml4OworICAgICAgICB1bmlm
b3JtIG1hdDQgdV9wcm9qZWN0aW9uTWF0cml4OwogICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZmxp
cDsKICAgICAgICAgdW5pZm9ybSB2ZWMyIHVfdGV4dHVyZVNpemU7Ci0gICAgICAgIGF0dHJpYnV0
ZSB2ZWM0IGFfdmVydGV4OworCiAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOwogICAg
ICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7CisgICAgICAgIHZhcnlpbmcgZmxvYXQg
dl9hbnRpYWxpYXM7CisKKyAgICAgICAgdm9pZCBub29wKHZlYzIpIHsgfQorCisgICAgICAgIHZl
YzQgdG9WaWV3cG9ydFNwYWNlKHZlYzIgcG9zKSB7IHJldHVybiB2ZWM0KHBvcywgMC4sIDEuKSAq
IHVfbW9kZWxWaWV3TWF0cml4OyB9CisKKyAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiByZWxpZXMg
b24gdGhlIGFzc3VtcHRpb24gdGhhdCB3ZSBnZXQgZWRnZSB0cmlhbmdsZXMgd2l0aCBjb250cm9s
IHBvaW50cywKKyAgICAgICAgLy8gYSBjb250cm9sIHBvaW50IGJlaW5nIHRoZSBuZWFyZXN0IHBv
aW50IHRvIHRoZSBjb29yZGluYXRlIHRoYXQgaXMgb24gdGhlIGVkZ2UuCisgICAgICAgIHZvaWQg
YXBwbHlBbnRpYWxpYXNpbmcoaW5vdXQgdmVjMiBwb3NpdGlvbikKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gV2UgY291bnQgb24gdGhlIGZhY3QgdGhhdCBxdWFkIHBhc3NlZCBpbiBpcyBhbHdh
eXMgYSB1bml0IHJlY3QsCisgICAgICAgICAgICAvLyBhbmQgdGhlIHRyYW5zZm9ybWF0aW9uIG1h
dHJpeCBhcHBsaWVzIHRoZSByZWFsIHJlY3QuCisgICAgICAgICAgICBjb25zdCB2ZWMyIGNlbnRl
ciA9IHZlYzIoMC41LCAwLjUpOworICAgICAgICAgICAgY29uc3QgZmxvYXQgYW50aWFsaWFzSW5m
bGF0aW9uRGlzdGFuY2UgPSAxLjsKKworICAgICAgICAgICAgLy8gV2UgcGFzcyB0aGUgY29udHJv
bCBwb2ludCBhcyB0aGUgencgY29vcmRpbmF0ZXMgb2YgdGhlIHZlcnRleC4KKyAgICAgICAgICAg
IC8vIFRoZSBjb250cm9sIHBvaW50IGlzIHRoZSBwb2ludCBvbiB0aGUgZWRnZSBjbG9zZXN0IHRv
IHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICAgICAgICAgICAgLy8gVGhlIGNvbnRyb2wgcG9pbnQg
aXMgdXNlZCB0byBjb21wdXRlIHRoZSBhbnRpYWxpYXMgdmFsdWUuCisgICAgICAgICAgICB2ZWMy
IGNvbnRyb2xQb2ludCA9IGFfdmVydGV4Lnp3OworCisgICAgICAgICAgICAvLyBGaXJzdCB3ZSBj
YWxjdWxhdGUgdGhlIGRpc3RhbmNlIGluIHZpZXdwb3J0IHNwYWNlLgorICAgICAgICAgICAgdmVj
NCBjZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSB0b1ZpZXdwb3J0U3BhY2UoY2VudGVyKTsK
KyAgICAgICAgICAgIHZlYzQgY29udHJvbFBvaW50SW5WaWV3cG9ydENvb3JkaW5hdGVzID0gdG9W
aWV3cG9ydFNwYWNlKGNvbnRyb2xQb2ludCk7CisgICAgICAgICAgICBmbG9hdCB2aWV3cG9ydFNw
YWNlRGlzdGFuY2UgPSBkaXN0YW5jZShjZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMsIGNvbnRy
b2xQb2ludEluVmlld3BvcnRDb29yZGluYXRlcyk7CisKKyAgICAgICAgICAgIC8vIFdlIGFkZCB0
aGUgaW5mbGF0aW9uIGRpc3RhbmNlIHRvIHRoZSBjb21wdXRlZCBkaXN0YW5jZSwgYW5kIGNvbXB1
dGUgdGhlIHJhdGlvLgorICAgICAgICAgICAgZmxvYXQgaW5mbGF0aW9uUmF0aW8gPSAodmlld3Bv
cnRTcGFjZURpc3RhbmNlICsgYW50aWFsaWFzSW5mbGF0aW9uRGlzdGFuY2UpIC8gdmlld3BvcnRT
cGFjZURpc3RhbmNlOworCisgICAgICAgICAgICAvLyB2X2FudGlhbGlhcyBuZWVkcyB0byBiZSAw
IGZvciB0aGUgb3V0ZXIgZWRnZSBhbmQgMS4gZm9yIHRoZSBpbm5lciBlZGdlLgorICAgICAgICAg
ICAgLy8gU2luY2UgdGhlIGNvbnRyb2xQb2ludCBpcyBlcXVhbCB0byB0aGUgcG9zaXRpb24gaW4g
dGhlIGVkZ2UgdmVydGljZXMsIHRoZSB2YWx1ZSBpcyBhbHdheXMgMCBmb3IgdGhvc2UuCisgICAg
ICAgICAgICAvLyBGb3IgdGhlIGNlbnRlciBwb2ludCwgdGhlIGRpc3RhbmNlIGlzIGFsd2F5cyAw
LjUsIHNvIHdlIG5vcm1hbGl6ZSB0byAxLiBieSBtdWx0aXBseWluZyBieSAyLgorICAgICAgICAg
ICAgLy8gQnkgbXVsdHBseWluZyBieSBpbmZsYXRpb25SYXRpbyBhbmQgZGl2aWRpbmcgYnkgKGlu
ZmxhdGlvblJhdGlvIC0gMSksCisgICAgICAgICAgICAvLyBXZSBtYWtlIHN1cmUgdGhhdCB0aGUg
dmFyeWluZyBpbnRlcnBvbGF0ZXMgYmV0d2VlbiAwIChvdXRlciBlZGdlKSwgMSAoaW5uZXIgZWRn
ZSkgYW5kIG4gPiAxIChjZW50ZXIpLgorICAgICAgICAgICAgdl9hbnRpYWxpYXMgPSBkaXN0YW5j
ZShjb250cm9sUG9pbnQsIHBvc2l0aW9uKSAqIDIuICogaW5mbGF0aW9uUmF0aW8gLyAoaW5mbGF0
aW9uUmF0aW8gLSAxLik7CisKKyAgICAgICAgICAgIC8vIE5vdyBpbmZsYXRlIHRoZSBhY3R1YWwg
cG9zaXRpb24uIEJ5IHVzaW5nIHRoaXMgZm9ybXVsYSBpbnN0ZWFkIG9mIGluZmxhdGluZyBwb3Np
dGlvbiBkaXJlY3RseSwKKyAgICAgICAgICAgIC8vIHdlIGVuc3VyZSB0aGF0IHRoZSBjZW50ZXIg
dmVydGV4IGlzIG5ldmVyIGluZmxhdGVkLgorICAgICAgICAgICAgcG9zaXRpb24gPSBjZW50ZXIg
KyAocG9zaXRpb24gLSBjZW50ZXIpICogaW5mbGF0aW9uUmF0aW87CisgICAgICAgIH0KIAogICAg
ICAgICB2b2lkIG1haW4odm9pZCkKICAgICAgICAgewotICAgICAgICAgICAgdmVjNCBwb3NpdGlv
biA9IGFfdmVydGV4OworICAgICAgICAgICAgdmVjMiBwb3NpdGlvbiA9IGFfdmVydGV4Lnh5Owor
ICAgICAgICAgICAgYXBwbHlBbnRpYWxpYXNpbmdJZk5lZWRlZChwb3NpdGlvbik7CiAgICAgICAg
ICAgICB2X3RleENvb3JkID0gdmVjMihwb3NpdGlvbi54LCBtaXgocG9zaXRpb24ueSwgMS4gLSBw
b3NpdGlvbi55LCB1X2ZsaXApKSAqIHVfdGV4dHVyZVNpemU7Ci0gICAgICAgICAgICB2X21hc2tU
ZXhDb29yZCA9IHZlYzIocG9zaXRpb24pOwotICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X21h
dHJpeCAqIGFfdmVydGV4OworICAgICAgICAgICAgdl9tYXNrVGV4Q29vcmQgPSBwb3NpdGlvbjsK
KyAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdV9wcm9qZWN0aW9uTWF0cml4ICogdV9tb2RlbFZp
ZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogICAgICAgICB9CiAgICAgKTsKIAot
I2RlZmluZSBHTFNMX0RJUkVDVElWRSguLi4pICIjIiNfX1ZBX0FSR1NfXyJcbiIKLSNkZWZpbmUg
REVGSU5FX0FQUExJRVIoTmFtZSkgXAotICAgICIjaWZkZWYgRU5BQkxFXyIjTmFtZSJcbiIgXAot
ICAgICIjZGVmaW5lIGFwcGx5IiNOYW1lIklmTmVlZGVkIGFwcGx5IiNOYW1lIlxuIlwKLSAgICAi
I2Vsc2VcbiJcCi0gICAgIiNkZWZpbmUgYXBwbHkiI05hbWUiSWZOZWVkZWQgbm9vcFxuIlwKLSAg
ICAiI2VuZGlmXG4iCi0KICNkZWZpbmUgUkVDVF9URVhUVVJFX0RJUkVDVElWRSBcCiAgICAgR0xT
TF9ESVJFQ1RJVkUoaWZkZWYgRU5BQkxFX1JlY3QpIFwKICAgICAgICAgR0xTTF9ESVJFQ1RJVkUo
ZGVmaW5lIFNhbXBsZXJUeXBlIHNhbXBsZXIyRFJlY3QpIFwKQEAgLTE0MSwyOSArMTg4LDE0IEBA
IHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPQogICAgICAgICBHTFNMX0RJ
UkVDVElWRShkZWZpbmUgU2FtcGxlckZ1bmN0aW9uIHRleHR1cmUyRCkgXAogICAgIEdMU0xfRElS
RUNUSVZFKGVuZGlmKQogCi0jZGVmaW5lIEVOQUJMRV9BUFBMSUVSKE5hbWUpICIjZGVmaW5lIEVO
QUJMRV8iI05hbWUiXG4iCisjZGVmaW5lIEVOQUJMRV9BUFBMSUVSKE5hbWUpICIjZGVmaW5lIEVO
QUJMRV8iI05hbWUiXG4jZGVmaW5lIGFwcGx5IiNOYW1lIklmTmVlZGVkIGFwcGx5IiNOYW1lIlxu
IgorI2RlZmluZSBESVNBQkxFX0FQUExJRVIoTmFtZSkgIiNkZWZpbmUgYXBwbHkiI05hbWUiSWZO
ZWVkZWQgbm9vcFxuIgogI2RlZmluZSBCTFVSX0NPTlNUQU5UUyBcCiAgICAgR0xTTF9ESVJFQ1RJ
VkUoZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIIDExKSBcCiAgICAgR0xTTF9ESVJF
Q1RJVkUoZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9TVEVQIDAuMikKIAogCiBzdGF0aWMgY29uc3Qg
Y2hhciogZnJhZ21lbnRUZW1wbGF0ZSA9Ci0gICAgREVGSU5FX0FQUExJRVIoVGV4dHVyZSkKLSAg
ICBERUZJTkVfQVBQTElFUihTb2xpZENvbG9yKQotICAgIERFRklORV9BUFBMSUVSKE9wYWNpdHkp
Ci0gICAgREVGSU5FX0FQUExJRVIoTWFzaykKLSAgICBERUZJTkVfQVBQTElFUihBbnRpYWxpYXMp
Ci0gICAgREVGSU5FX0FQUExJRVIoR3JheXNjYWxlRmlsdGVyKQotICAgIERFRklORV9BUFBMSUVS
KFNlcGlhRmlsdGVyKQotICAgIERFRklORV9BUFBMSUVSKFNhdHVyYXRlRmlsdGVyKQotICAgIERF
RklORV9BUFBMSUVSKEh1ZVJvdGF0ZUZpbHRlcikKLSAgICBERUZJTkVfQVBQTElFUihJbnZlcnRG
aWx0ZXIpCi0gICAgREVGSU5FX0FQUExJRVIoQnJpZ2h0bmVzc0ZpbHRlcikKLSAgICBERUZJTkVf
QVBQTElFUihDb250cmFzdEZpbHRlcikKLSAgICBERUZJTkVfQVBQTElFUihPcGFjaXR5RmlsdGVy
KQotICAgIERFRklORV9BUFBMSUVSKEJsdXJGaWx0ZXIpCi0gICAgREVGSU5FX0FQUExJRVIoQWxw
aGFCbHVyKQotICAgIERFRklORV9BUFBMSUVSKENvbnRlbnRUZXh0dXJlKQogICAgIFJFQ1RfVEVY
VFVSRV9ESVJFQ1RJVkUKICAgICBCTFVSX0NPTlNUQU5UUwogICAgIFNUUklOR0lGWSgKQEAgLTE3
Miw5ICsyMDQsOSBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZSA9CiAgICAg
ICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfbWFzazsKICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQg
c19jb250ZW50VGV4dHVyZTsKICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7CisgICAg
ICAgIHZhcnlpbmcgZmxvYXQgdl9hbnRpYWxpYXM7CiAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3Rl
eENvb3JkOwogICAgICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7Ci0gICAgICAgIHVu
aWZvcm0gdmVjMyB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs4XTsKICAgICAgICAg
dW5pZm9ybSBmbG9hdCB1X2ZpbHRlckFtb3VudDsKICAgICAgICAgdW5pZm9ybSB2ZWMyIHVfYmx1
clJhZGl1czsKICAgICAgICAgdW5pZm9ybSB2ZWMyIHVfc2hhZG93T2Zmc2V0OwpAQCAtMTgzLDUx
ICsyMTUsMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50VGVtcGxhdGUgPQogCiAgICAg
ICAgIHZvaWQgbm9vcChpbm91dCB2ZWM0IGR1bW15UGFyYW1ldGVyKSB7IH0KIAotICAgICAgICAv
LyBUaGUgZGF0YSBwYXNzZWQgaW4gdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2UgaXMg
bWVyZWx5IHRoZQotICAgICAgICAvLyBwcmUtc2NhbGVkIGNvZWZmZWNpZW50cyBvZiB0aGUgbGlu
ZSBlcXVhdGlvbnMgZGVzY3JpYmluZyB0aGUgZm91ciBlZGdlcwotICAgICAgICAvLyBvZiB0aGUg
ZXhwYW5kZWQgcXVhZCBpbiBzY3JlZW4gc3BhY2UgYW5kIHRoZSByZWN0YW5ndWxhciBib3VuZGlu
ZyBib3gKLSAgICAgICAgLy8gb2YgdGhlIGV4cGFuZGVkIHF1YWQuCi0gICAgICAgIC8vCi0gICAg
ICAgIGZsb2F0IG5vcm1hbGl6ZWREaXN0YW5jZSh2ZWMzIGVkZ2VDb2VmZmljaWVudCkKLSAgICAg
ICAgewotICAgICAgICAgICAgLy8gV2UgYXJlIGRvaW5nIGEgc2ltcGxlIGRpc3RhbmNlIGNhbGN1
bGF0aW9uIGhlcmUgYWNjb3JkaW5nIHRvIHRoZSBmb3JtdWxhOgotICAgICAgICAgICAgLy8gKEEq
cC54ICsgQipwLnkgKyBDKSAvIHNxcnQoQV4yICsgQl4yKSA9IGRpc3RhbmNlIGZyb20gbGluZSB0
byBwCi0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgQSwgQiBhbmQgQyBoYXZlIGFscmVhZHkgYmVl
biBzY2FsZWQgYnkgMSAvIHNxcnQoQV4yICsgQl4yKS4KLSAgICAgICAgICAgIHJldHVybiBjbGFt
cChkb3QoZWRnZUNvZWZmaWNpZW50LCB2ZWMzKGdsX0ZyYWdDb29yZC54eSwgMS4pKSwgMC4sIDEu
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0IGFudGlhbGlhc1F1YWQodmVjMyBjb2VmZmlj
aWVudDEsIHZlYzMgY29lZmZpY2llbnQyLCB2ZWMzIGNvZWZmaWNpZW50MywgdmVjMyBjb2VmZmlj
aWVudDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE5vdyB3ZSB3YW50IHRvIHJlZHVjZSB0
aGUgYWxwaGEgdmFsdWUgb2YgdGhlIGZyYWdtZW50IGlmIGl0IGlzIGNsb3NlIHRvIHRoZQotICAg
ICAgICAgICAgLy8gZWRnZXMgb2YgdGhlIGV4cGFuZGVkIHF1YWQgKG9yIHJlY3Rhbmd1bGFyIGJv
dW5kaW5nIGJveCAtLSB3aGljaCBzZWVtcyB0byBiZQotICAgICAgICAgICAgLy8gaW1wb3J0YW50
IGZvciBiYWNrZmFjaW5nIHF1YWRzKS4gTm90ZSB0aGF0IHdlIGFyZSBjb21iaW5pbmcgdGhlIGNv
bnRyaWJ1dGlvbgotICAgICAgICAgICAgLy8gZnJvbSB0aGUgKHRvcCB8fCBib3R0b20pIGFuZCAo
bGVmdCB8fCByaWdodCkgZWRnZSBieSBzaW1wbHkgbXVsdGlwbHlpbmcuIFRoaXMgZm9sbG93cwot
ICAgICAgICAgICAgLy8gdGhlIGFwcHJvYWNoIGRlc2NyaWJlZCBhdDogaHR0cDovL2h0dHAuZGV2
ZWxvcGVyLm52aWRpYS5jb20vR1BVR2VtczIvZ3B1Z2VtczJfY2hhcHRlcjIyLmh0bWwsCi0gICAg
ICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2l0aG91dCB1c2luZyBHYXVzc2lhbiB3ZWlnaHRzLgot
ICAgICAgICAgICAgcmV0dXJuIG1pbihub3JtYWxpemVkRGlzdGFuY2UoY29lZmZpY2llbnQxKSwg
bm9ybWFsaXplZERpc3RhbmNlKGNvZWZmaWNpZW50MikpCi0gICAgICAgICAgICAgICAgKiBtaW4o
bm9ybWFsaXplZERpc3RhbmNlKGNvZWZmaWNpZW50MyksIG5vcm1hbGl6ZWREaXN0YW5jZShjb2Vm
ZmljaWVudDQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0IGFudGlhbGlhcygpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGZsb2F0IGFudGlhbGlhc1ZhbHVlRm9yUXVhZCA9IAotICAgICAg
ICAgICAgICAgIGFudGlhbGlhc1F1YWQodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2Vb
MF0sCi0gICAgICAgICAgICAgICAgICAgIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNl
WzFdLAotICAgICAgICAgICAgICAgICAgICB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFj
ZVsyXSwKLSAgICAgICAgICAgICAgICAgICAgdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3Bh
Y2VbM10pOwotCi0gICAgICAgICAgICBmbG9hdCBhbnRpYWxpYXNWYWx1ZUZvckJvdW5kaW5nUmVj
dCA9IAotICAgICAgICAgICAgICAgIGFudGlhbGlhc1F1YWQodV9leHBhbmRlZFF1YWRFZGdlc0lu
U2NyZWVuU3BhY2VbNF0sCi0gICAgICAgICAgICAgICAgICAgIHVfZXhwYW5kZWRRdWFkRWRnZXNJ
blNjcmVlblNwYWNlWzVdLAotICAgICAgICAgICAgICAgICAgICB1X2V4cGFuZGVkUXVhZEVkZ2Vz
SW5TY3JlZW5TcGFjZVs2XSwKLSAgICAgICAgICAgICAgICAgICAgdV9leHBhbmRlZFF1YWRFZGdl
c0luU2NyZWVuU3BhY2VbN10pOwotCi0gICAgICAgICAgICByZXR1cm4gbWluKGFudGlhbGlhc1Zh
bHVlRm9yUXVhZCwgYW50aWFsaWFzVmFsdWVGb3JCb3VuZGluZ1JlY3QpOyAgICAgICAgICAgCi0g
ICAgICAgIH0KKyAgICAgICAgZmxvYXQgYW50aWFsaWFzKCkgeyByZXR1cm4gc21vb3Roc3RlcCh2
X2FudGlhbGlhcywgMC4sIDEuKTsgfQogCiAgICAgICAgIHZvaWQgYXBwbHlUZXh0dXJlKGlub3V0
IHZlYzQgY29sb3IpIHsgY29sb3IgPSBTYW1wbGVyRnVuY3Rpb24oc19zYW1wbGVyLCB2X3RleENv
b3JkKTsgfQogICAgICAgICB2b2lkIGFwcGx5T3BhY2l0eShpbm91dCB2ZWM0IGNvbG9yKSB7IGNv
bG9yICo9IHVfb3BhY2l0eTsgfQotICAgICAgICB2b2lkIGFwcGx5QW50aWFsaWFzKGlub3V0IHZl
YzQgY29sb3IpIHsgY29sb3IgKj0gYW50aWFsaWFzKCk7IH0KKyAgICAgICAgdm9pZCBhcHBseUFu
dGlhbGlhc2luZyhpbm91dCB2ZWM0IGNvbG9yKSB7IGNvbG9yICo9IGFudGlhbGlhcygpOyB9CiAg
ICAgICAgIHZvaWQgYXBwbHlNYXNrKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgKj0gdGV4dHVy
ZTJEKHNfbWFzaywgdl9tYXNrVGV4Q29vcmQpLmE7IH0KIAogICAgICAgICB2b2lkIGFwcGx5R3Jh
eXNjYWxlRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCkBAIC0zMzEsMTcgKzMyMywxNCBAQCBzdGF0
aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZSA9CiAgICAgICAgICAgICBjb2xvciA9IHNv
dXJjZU92ZXIoY29udGVudENvbG9yLCBjb2xvcik7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lk
IGFwcGx5U29saWRDb2xvcihpbm91dCB2ZWM0IGNvbG9yKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBjb2xvciAqPSB1X2NvbG9yOwotICAgICAgICB9CisgICAgICAgIHZvaWQgYXBwbHlTb2xpZENv
bG9yKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgKj0gdV9jb2xvcjsgfQogCiAgICAgICAgIHZv
aWQgbWFpbih2b2lkKQogICAgICAgICB7CiAgICAgICAgICAgICB2ZWM0IGNvbG9yID0gdmVjNCgx
LiwgMS4sIDEuLCAxLik7CiAgICAgICAgICAgICBhcHBseVRleHR1cmVJZk5lZWRlZChjb2xvcik7
CiAgICAgICAgICAgICBhcHBseVNvbGlkQ29sb3JJZk5lZWRlZChjb2xvcik7Ci0gICAgICAgICAg
ICBhcHBseUFudGlhbGlhc0lmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5QW50aWFs
aWFzaW5nSWZOZWVkZWQoY29sb3IpOwogICAgICAgICAgICAgYXBwbHlNYXNrSWZOZWVkZWQoY29s
b3IpOwogICAgICAgICAgICAgYXBwbHlPcGFjaXR5SWZOZWVkZWQoY29sb3IpOwogICAgICAgICAg
ICAgYXBwbHlHcmF5c2NhbGVGaWx0ZXJJZk5lZWRlZChjb2xvcik7CkBAIC0zNjIsMzIgKzM1MSwz
NSBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZSA9CiAKIHN0YXRpYyB2b2lk
IGdldFNoYWRlclNwZWMoVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlvbnMgb3B0aW9u
cywgU3RyaW5nJiB2ZXJ0ZXhTb3VyY2UsIFN0cmluZyYgZnJhZ21lbnRTb3VyY2UpCiB7Ci0gICAg
U3RyaW5nQnVpbGRlciBmcmFnbWVudEJ1aWxkZXI7CisKKyAgICBTdHJpbmdCdWlsZGVyIHNoYWRl
ckJ1aWxkZXI7CiAjZGVmaW5lIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhBcHBsaWVyKSBcCi0g
ICAgaWYgKG9wdGlvbnMgJiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QXBwbGllcikgXAot
ICAgICAgICBmcmFnbWVudEJ1aWxkZXIuYXBwZW5kKEVOQUJMRV9BUFBMSUVSKEFwcGxpZXIpKTsK
LQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhUZXh0dXJlKQotICAgIFNFVF9BUFBMSUVS
X0ZST01fT1BUSU9OUyhSZWN0KQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhTb2xpZENv
bG9yKQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhPcGFjaXR5KQotICAgIFNFVF9BUFBM
SUVSX0ZST01fT1BUSU9OUyhNYXNrKQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhBbnRp
YWxpYXMpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEdyYXlzY2FsZUZpbHRlcikKLSAg
ICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoU2VwaWFGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJf
RlJPTV9PUFRJT05TKFNhdHVyYXRlRmlsdGVyKQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9O
UyhIdWVSb3RhdGVGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEJyaWdodG5l
c3NGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKENvbnRyYXN0RmlsdGVyKQot
ICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhJbnZlcnRGaWx0ZXIpCi0gICAgU0VUX0FQUExJ
RVJfRlJPTV9PUFRJT05TKE9wYWNpdHlGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJ
T05TKEJsdXJGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEFscGhhQmx1cikK
LSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQ29udGVudFRleHR1cmUpCi0KLSAgICBmcmFn
bWVudEJ1aWxkZXIuYXBwZW5kKGZyYWdtZW50VGVtcGxhdGUpOwotICAgIHZlcnRleFNvdXJjZSA9
IHZlcnRleFNoYWRlclNvdXJjZTsKLSAgICBmcmFnbWVudFNvdXJjZSA9IGZyYWdtZW50QnVpbGRl
ci50b1N0cmluZygpOworICAgIHNoYWRlckJ1aWxkZXIuYXBwZW5kKFwKKyAgICAgICAgKG9wdGlv
bnMgJiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QXBwbGllcikgPyBFTkFCTEVfQVBQTElF
UihBcHBsaWVyKSA6IERJU0FCTEVfQVBQTElFUihBcHBsaWVyKSkKKworICAgIFNFVF9BUFBMSUVS
X0ZST01fT1BUSU9OUyhUZXh0dXJlKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoUmVj
dCk7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFNvbGlkQ29sb3IpOworICAgIFNFVF9B
UFBMSUVSX0ZST01fT1BUSU9OUyhPcGFjaXR5KTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElP
TlMoTWFzayk7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEFudGlhbGlhc2luZyk7Cisg
ICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEdyYXlzY2FsZUZpbHRlcik7CisgICAgU0VUX0FQ
UExJRVJfRlJPTV9PUFRJT05TKFNlcGlhRmlsdGVyKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09Q
VElPTlMoU2F0dXJhdGVGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhIdWVS
b3RhdGVGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhCcmlnaHRuZXNzRmls
dGVyKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQ29udHJhc3RGaWx0ZXIpOworICAg
IFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhJbnZlcnRGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVS
X0ZST01fT1BUSU9OUyhPcGFjaXR5RmlsdGVyKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElP
TlMoQmx1ckZpbHRlcik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEFscGhhQmx1cik7
CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKENvbnRlbnRUZXh0dXJlKTsKKyAgICBTdHJp
bmdCdWlsZGVyIHZlcnRleEJ1aWxkZXI7CisgICAgdmVydGV4QnVpbGRlci5hcHBlbmQoc2hhZGVy
QnVpbGRlci50b1N0cmluZygpKTsKKyAgICB2ZXJ0ZXhCdWlsZGVyLmFwcGVuZCh2ZXJ0ZXhUZW1w
bGF0ZSk7CisgICAgc2hhZGVyQnVpbGRlci5hcHBlbmQoZnJhZ21lbnRUZW1wbGF0ZSk7CisgICAg
dmVydGV4U291cmNlID0gdmVydGV4QnVpbGRlci50b1N0cmluZygpOworICAgIGZyYWdtZW50U291
cmNlID0gc2hhZGVyQnVpbGRlci50b1N0cmluZygpOwogfQogCiBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCmluZGV4IGIzODIy
YzRkOWU2OWJhZDRlOTFmOWQ5M2Q5ZWQ3MDg1NTI2MzI3OTUuLjNmNWFlNjhhMWU0ZTU3MzI0YzAz
NTg4NmNlM2E4Y2EyYTE0ZTc4YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlci5oCkBAIC00Nyw5ICs0Nyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbSgpOwogCiAgICAgVEVYTUFQX0RFQ0xBUkVfQVRUUklCVVRFKHZlcnRl
eCkKLSAgICBURVhNQVBfREVDTEFSRV9BVFRSSUJVVEUodGV4Q29vcmQpCiAKLSAgICBURVhNQVBf
REVDTEFSRV9VTklGT1JNKG1hdHJpeCkKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKG1vZGVs
Vmlld01hdHJpeCkKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKHByb2plY3Rpb25NYXRyaXgp
CiAgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShmbGlwKQogICAgIFRFWE1BUF9ERUNMQVJFX1VO
SUZPUk0odGV4dHVyZVNpemUpCiAgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShvcGFjaXR5KQpA
QCAtNjYsNiArNjYsOCBAQCBwdWJsaWM6CiAgICAgVEVYTUFQX0RFQ0xBUkVfU0FNUExFUihjb250
ZW50VGV4dHVyZSkKICNlbmRpZgogCisgICAgdm9pZCBzZXRNYXRyaXgoR0MzRHVpbnQsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisKIHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIGNvbnN0IFN0cmluZyYg
dmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBTdHJpbmcmIGZyYWdtZW50U2hhZGVyU291cmNlKTsK
ICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fdmVydGV4U2hhZGVyOwpAQCAtODcsNyArODksNyBAQCBw
dWJsaWM6CiAgICAgICAgIFNvbGlkQ29sb3IgICAgICAgPSAxTCA8PCAyLAogICAgICAgICBPcGFj
aXR5ICAgICAgICAgID0gMUwgPDwgMywKICAgICAgICAgTWFzayAgICAgICAgICAgICA9IDFMIDw8
IDQsCi0gICAgICAgIEFudGlhbGlhcyAgICAgICAgPSAxTCA8PCA1LAorICAgICAgICBBbnRpYWxp
YXNpbmcgICAgID0gMUwgPDwgNSwKICAgICAgICAgR3JheXNjYWxlRmlsdGVyICA9IDFMIDw8IDYs
CiAgICAgICAgIFNlcGlhRmlsdGVyICAgICAgPSAxTCA8PCA3LAogICAgICAgICBTYXR1cmF0ZUZp
bHRlciAgID0gMUwgPDwgOCwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180905</attachid>
            <date>2012-12-28 18:20:20 -0800</date>
            <delta_ts>2012-12-28 18:24:31 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-105377-20121228181733.patch</filename>
            <type>text/plain</type>
            <size>41355</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4NTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzIxMWE1MTI0MTdkYTY5
YjRmMzYwOWQyYmQ4NGMwODJjZDJkZTNjMS4uZjg5YTViMjFiZGE0NzU3YWJkN2FlZDI4N2Y3OGZh
YjQwMDE5MjE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTEyLTE4ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1RleG1hcF0gRWRnZSBh
bnRpYWxpYXNpbmcgaW4gVGV4dHVyZU1hcHBlciBjb3VsZCBiZSBkb25lIHdpdGggbGVzcyBwZXIt
cGl4ZWwgY2FsbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwNTM3NworCisgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFu
c2VuLgorCisgICAgICAgIEluc3RlYWQgb2YgcGFzc2luZyA4IHF1YWQgZWRnZSBjb2VmZmljaWVu
dHMgYXMgdW5pZm9ybXMgYW5kIGFuYWx5emUgdGhlIGRpc3RhbmNlIGluIHRoZQorICAgICAgICBm
cmFnbWVudCBzaGFkZXIsIHdlIHJlbmRlciB0aGUgYW50aWFsaWFzZWQgcXVhZCBhcyA0IGVkZ2Ug
dHJpYW5nbGVzLCB3aGljaCBvcmlnaW5hdGUgaW4gdGhlCisgICAgICAgIGNlbnRlciBvZiB0aGUg
cXVhZC4gCisKKyAgICAgICAgVGhlIHZlcnRleCBzaGFkZXIgZXhwYW5kcyB0aGUgcXVhZCBiYXNl
ZCBvbiB0aGUgc2NyZWVuIHRyYW5zZm9ybSwgYW5kIGFwcGxpZXMgYSB2YWx1ZSB0byBlYWNoIHZl
cnRleCB0byBiZSBpbnRlcnBvbGF0ZWQgYnkgdGhlIEdQVS4gCisKKyAgICAgICAgSXQgaXMgdmVy
eSBkaWZmaWN1bHQgdG8gdGVzdCBwZXJmb3JtYW5jZSBnYWluOyBIb3dldmVyLCB0aGUgZm9sbG93
aW5nIGlzIGFwcGFyZW50OgorICAgICAgICAtIFRoZSBtYXRyaXggbXVsdGlwbGljYXRpb25zIGFu
ZCBpbnZlcnNpb25zIGRvbmUgYmVmb3JlIGluIHRoZSBxdWFkIGluZmxhdGlvbiBjb2RlIHdlcmUK
KyAgICAgICAgICBhbHdheXMgdmlzaWJsZSBpbiBpbnN0cnVtZW50cy92YWxncmluZCBhbmQgdGhl
eSBhcmUgbm93IGdvbmUuCisgICAgICAgIC0gV2Ugbm93IHBlcmZvcm0gYSBzaW5nbGUgc21vb3Ro
c3RlcCgpIGNvbW1hbmQgcGVyIHBpeGVsIGluc3RlYWQgb2YgOCBjbGFtcChkb3QoKSkgY29tbWFu
ZHMuCisgICAgICAgIC0gSXQgc2hvdWxkIG5vdyBiZSBwb3NzaWJsZSB0byBhbnRpYWxpYXMgaW5k
aXZpZHVhbCBlZGdlcy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpnZXRTdGF0aWNWQk8pOgorICAg
ICAgICAgICAgQ2FjaGUgdGhlIHVuaXQtcmVjdCBhbmQgZWRnZS10cmlhbmdsZSB2ZXJ0ZXggZGF0
YSBpbiBhIFZCTy4KKworICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6flRl
eHR1cmVNYXBwZXJHTERhdGEpOgorICAgICAgICAgICAgQ2xlYXIgdGhlIGNhY2hlZCBWQk9zIHVw
b24gZGVzdHJ1Y3Rpb24uCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJh
d0JvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJl
KToKKyAgICAgICAgICAgIFJlbW92ZWQgY2FsbCB0byB1c2VQcm9ncmFtLCBzaW5jZSBpdCdzIGFs
cmVhZHkgY2FsbGVkIGluIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbS4KKworICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcik6CisgICAg
ICAgICAgICBVc2UgdGhlIG5ldyBzaWduYXR1cmUgImRyYXciIGluc3RlYWQgb2YgImRyYXdRdWFk
Ii4KKworICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3RWRnZVRyaWFuZ2xl
cyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdVbml0UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXcpOgorICAgICAgICAgICAgUmVt
b3ZlZCBEcmF3UXVhZCwgaW5zdGVhZCBkcmF3IGVpdGhlciBhIHVuaXQgcmVjdCBvciBlZGdlIHRy
aWFuZ2xlcy4KKworICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAp
OgorICAgICAgICAgICAgVXNlIHRoZSBuZXcgc2V0TWF0cml4IGZ1bmN0aW9uLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oOgorICAgICAgICAg
ICAgQWRkZWQgYSBwYWludCBmbGFnIGZvciBhbnRpYWxpYXNpbmcuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OnNldE1hdHJpeCk6Cisg
ICAgICAgICAgICBTaW5jZSB3ZSBub3cgc2V0IHRoZSBtYXRyaXggaW4gbXVsdGlwbGUgbG9jYXRp
b25zLCBhZGRlZCBhIGNvbnZlbmllbmNlIAorICAgICAgICAgICAgZnVuY3Rpb24gZm9yIG1hdHJp
eCB1bmlmb3JtLgorCisgICAgICAgIChXZWJDb3JlOjpnZXRTaGFkZXJTcGVjKToKKyAgICAgICAg
ICAgIFVwZGF0ZSB0aGUgdmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXIgdG8gYWNjb3VudCBmb3Ig
dGhlIG5ldyBhbnRpYWxpYXNpbmcKKyAgICAgICAgICAgIG1lY2hhbmlzbS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaDoKKyAg
ICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKToKKwogMjAxMi0xMi0yNyAgS29uZGFw
YWxseSBLYWx5YW4gIDxrYWx5YW4ua29uZGFwYWxseUBpbnRlbC5jb20+CiAKICAgICAgICAgW0VG
TF1bV2ViR0xdIEltcGxlbWVudCBFR0wgc3VwcG9ydCB3aXRoIEdMWC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
TC5jcHAKaW5kZXggOTFiNGFlMjlhZWU5NzA5NzM4Y2ZjOWQyNWE0MGNjMGUwY2IwMmY4MC4uMThj
MmM0ODc0MWEyNTE2Mjk0ZjUzZmRlMDkxMzc0YjhjODVlZDVlNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
TC5jcHAKQEAgLTEwOSw3ICsxMDksNyBAQCBwdWJsaWM6CiAKICAgICBTaGFyZWRHTERhdGEmIHNo
YXJlZEdMRGF0YSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gKm1fc2hhcmVkR0xEYXRh
OworICAgICAgICByZXR1cm4gKnNoYXJlZERhdGE7CiAgICAgfQogCiAgICAgdm9pZCBpbml0aWFs
aXplU3RlbmNpbCgpOwpAQCAtMTIyLDkgKzEyMiwxMiBAQCBwdWJsaWM6CiAgICAgICAgICwgZGlk
TW9kaWZ5U3RlbmNpbChmYWxzZSkKICAgICAgICAgLCBwcmV2aW91c1NjaXNzb3JTdGF0ZSgwKQog
ICAgICAgICAsIHByZXZpb3VzRGVwdGhTdGF0ZSgwKQotICAgICAgICAsIG1fc2hhcmVkR0xEYXRh
KFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6Y3VycmVudFNoYXJlZEdMRGF0YSh0
aGlzLT5jb250ZXh0KSkKKyAgICAgICAgLCBzaGFyZWREYXRhKFRleHR1cmVNYXBwZXJHTERhdGE6
OlNoYXJlZEdMRGF0YTo6Y3VycmVudFNoYXJlZEdMRGF0YSh0aGlzLT5jb250ZXh0KSkKICAgICB7
IH0KIAorICAgIH5UZXh0dXJlTWFwcGVyR0xEYXRhKCk7CisgICAgUGxhdGZvcm0zRE9iamVjdCBn
ZXRTdGF0aWNWQk8oR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIsIGNvbnN0IHZvaWQqIGRh
dGEpOworCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQ7CiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggcHJvamVjdGlvbk1hdHJpeDsKICAgICBUZXh0dXJlTWFwcGVyOjpQYWludEZsYWdz
IFBhaW50RmxhZ3M7CkBAIC0xMzUsMTAgKzEzOCwzMSBAQCBwdWJsaWM6CiAgICAgR0MzRGludCBw
cmV2aW91c0RlcHRoU3RhdGU7CiAgICAgR0MzRGludCB2aWV3cG9ydFs0XTsKICAgICBHQzNEaW50
IHByZXZpb3VzU2Npc3Nvcls0XTsKLSAgICBSZWZQdHI8U2hhcmVkR0xEYXRhPiBtX3NoYXJlZEdM
RGF0YTsKKyAgICBSZWZQdHI8U2hhcmVkR0xEYXRhPiBzaGFyZWREYXRhOwogICAgIFJlZlB0cjxC
aXRtYXBUZXh0dXJlPiBjdXJyZW50U3VyZmFjZTsKKyAgICBIYXNoTWFwPGNvbnN0IHZvaWQqLCBQ
bGF0Zm9ybTNET2JqZWN0PiB2Ym9zOwogfTsKIAorUGxhdGZvcm0zRE9iamVjdCBUZXh0dXJlTWFw
cGVyR0xEYXRhOjpnZXRTdGF0aWNWQk8oR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6
ZSwgY29uc3Qgdm9pZCogZGF0YSkKK3sKKyAgICBIYXNoTWFwPGNvbnN0IHZvaWQqLCBQbGF0Zm9y
bTNET2JqZWN0Pjo6aXRlcmF0b3IgaXQgPSB2Ym9zLmZpbmQoZGF0YSk7CisgICAgaWYgKGl0ICE9
IHZib3MuZW5kKCkpCisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CisKKyAgICBQbGF0Zm9ybTNE
T2JqZWN0IHZibyA9IGNvbnRleHQtPmNyZWF0ZUJ1ZmZlcigpOworICAgIGNvbnRleHQtPmJpbmRC
dWZmZXIodGFyZ2V0LCB2Ym8pOworICAgIGNvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0LCBzaXpl
LCBkYXRhLCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOworICAgIHZib3MuYWRkKGRh
dGEsIHZibyk7CisgICAgcmV0dXJuIHZibzsKK30KKworVGV4dHVyZU1hcHBlckdMRGF0YTo6flRl
eHR1cmVNYXBwZXJHTERhdGEoKQoreworICAgIEhhc2hNYXA8Y29uc3Qgdm9pZCosIFBsYXRmb3Jt
M0RPYmplY3Q+OjppdGVyYXRvciBlbmQgPSB2Ym9zLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxj
b25zdCB2b2lkKiwgUGxhdGZvcm0zRE9iamVjdD46Oml0ZXJhdG9yIGl0ID0gdmJvcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGNvbnRleHQtPmRlbGV0ZUJ1ZmZlcihpdC0+dmFs
dWUpOworfQorCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjppbml0KGNvbnN0IElu
dFJlY3QmIHJlY3QpCiB7CiAgICAgY2xpcFN0YWNrLmNsZWFyKCk7CkBAIC0yNjksNDIgKzI5Myw2
IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjplbmRQYWludGluZygpCiAjZW5kaWYKIH0KIAotdm9p
ZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdRdWFkKGNvbnN0IERyYXdRdWFkJiBxdWFkVG9EcmF3LCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbSogc2hhZGVyUHJvZ3JhbSwgR0MzRGVudW0gZHJhd2luZ01vZGUsIEZsYWdz
IGZsYWdzKQotewotICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFk
ZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKLSAgICBtX2NvbnRleHQzRC0+YmluZEJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAwKTsKLQotICAgIGNvbnN0IEdDM0Rm
bG9hdCBxdWFkW10gPSB7Ci0gICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5p
dFNxdWFyZS5wMSgpLngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJl
LnAxKCkueSgpLAotICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVh
cmUucDIoKS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMigp
LnkoKSwKLSAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAz
KCkueCgpLCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDMoKS55KCks
Ci0gICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wNCgpLngo
KSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnA0KCkueSgpCi0gICAg
fTsKLSAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXJQcm9ncmFtLT52
ZXJ0ZXhMb2NhdGlvbigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBH
QzNEaW50cHRyKHF1YWQpKTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRy
YW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KS5tdWx0aXBseShtb2Rl
bFZpZXdNYXRyaXgpLm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4KAotICAgICAgICAgICAg
cXVhZFRvRHJhdy5vcmlnaW5hbFRhcmdldFJlY3Qud2lkdGgoKSwgMCwgMCwgMCwKLSAgICAgICAg
ICAgIDAsIHF1YWRUb0RyYXcub3JpZ2luYWxUYXJnZXRSZWN0LmhlaWdodCgpLCAwLCAwLAotICAg
ICAgICAgICAgMCwgMCwgMSwgMCwKLSAgICAgICAgICAgIHF1YWRUb0RyYXcub3JpZ2luYWxUYXJn
ZXRSZWN0LngoKSwgcXVhZFRvRHJhdy5vcmlnaW5hbFRhcmdldFJlY3QueSgpLCAwLCAxKSk7Ci0g
ICAgR0MzRGZsb2F0IG00W10gPSB7Ci0gICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0xMigp
LCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQoKSwKLSAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRy
aXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgpLAotICAgICAgICBtYXRyaXgubTMx
KCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCksCi0gICAgICAgIG1h
dHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5tNDQoKQotICAg
IH07Ci0gICAgbV9jb250ZXh0M0QtPnVuaWZvcm1NYXRyaXg0ZnYoc2hhZGVyUHJvZ3JhbS0+bWF0
cml4TG9jYXRpb24oKSwgMSwgZmFsc2UsIG00KTsKLQotICAgIGlmIChmbGFncyAmIFNob3VsZEJs
ZW5kKSB7Ci0gICAgICAgIG1fY29udGV4dDNELT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6
Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOwotICAgICAgICBt
X2NvbnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7
Ci0KLSAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhkcmF3aW5nTW9kZSwgMCwgNCk7Ci0gICAg
bV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0
ZXhMb2NhdGlvbigpKTsKLX0KLQogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29u
c3QgQ29sb3ImIGNvbG9yLCBmbG9hdCB3aWR0aCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4KQogewogICAgIGlm
IChjbGlwU3RhY2soKS5jdXJyZW50KCkuc2Npc3NvckJveC5pc0VtcHR5KCkpCkBAIC0zMTgsNyAr
MzA2LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3ImIGNv
bG9yLCBmbG9hdCB3aWR0aCwgY29uc3QgRmxvYXRSZWMKICAgICBtX2NvbnRleHQzRC0+dW5pZm9y
bTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgbV9jb250ZXh0
M0QtPmxpbmVXaWR0aCh3aWR0aCk7CiAKLSAgICBkcmF3UXVhZCh0YXJnZXRSZWN0LCBtb2RlbFZp
ZXdNYXRyaXgsIHByb2dyYW0uZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1AsIGNv
bG9yLmhhc0FscGhhKCkgPyBTaG91bGRCbGVuZCA6IDApOworICAgIGRyYXcodGFyZ2V0UmVjdCwg
bW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6TElORV9M
T09QLCBjb2xvci5oYXNBbHBoYSgpID8gU2hvdWxkQmxlbmQgOiAwKTsKIH0KIAogdm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmRyYXdSZXBhaW50Q291bnRlcihpbnQgdmFsdWUsIGludCBwb2ludFNpemUs
IGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbW9kZWxWaWV3TWF0cml4KQpAQCAtNDA2LDE3NSArMzk0LDExMiBAQCB2b2lkIFRleHR1cmVN
YXBwZXJHTDo6ZHJhd1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBGbGFncyBmbGFn
cywgY29uc3QgSQogewogICAgIGJvb2wgdXNlUmVjdCA9IGZsYWdzICYgU2hvdWxkVXNlQVJCVGV4
dHVyZVJlY3Q7CiAgICAgYm9vbCBtYXNrZWQgPSAhIW1hc2tUZXh0dXJlOwotICAgIGJvb2wgbmVl
ZHNBbnRpYWxpYXNpbmcgPSBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyAmJiAhbW9k
ZWxWaWV3TWF0cml4LmlzSW50ZWdlclRyYW5zbGF0aW9uKCk7Ci0KLSAgICBpZiAoIXVzZVJlY3Qg
JiYgbmVlZHNBbnRpYWxpYXNpbmcgJiYgZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHRleHR1
cmUsIGZsYWdzLCB0ZXh0dXJlU2l6ZSwgdGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBvcGFj
aXR5LCBtYXNrVGV4dHVyZSwgZXhwb3NlZEVkZ2VzKSkKLSAgICAgICAgcmV0dXJuOworICAgIGJv
b2wgdXNlQW50aWFsaWFzaW5nID0gbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcKKyAg
ICAgICAgJiYgZXhwb3NlZEVkZ2VzID09IEFsbEVkZ2VzCisgICAgICAgICYmICFtb2RlbFZpZXdN
YXRyaXgubWFwUXVhZCh0YXJnZXRSZWN0KS5pc1JlY3RpbGluZWFyKCk7CiAKICAgICBUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6T3B0aW9ucyBvcHRpb25zID0gVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OlRleHR1cmU7CiAgICAgaWYgKG1hc2tlZCkKICAgICAgICAgb3B0aW9ucyB8PSBU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6TWFzazsKLSAgICBpZiAoZmxhZ3MgJiBTaG91bGRV
c2VBUkJUZXh0dXJlUmVjdCkKKyAgICBpZiAodXNlUmVjdCkKICAgICAgICAgb3B0aW9ucyB8PSBU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6UmVjdDsKICAgICBpZiAob3BhY2l0eSA8IDEpCiAg
ICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wYWNpdHk7Cisg
ICAgaWYgKHVzZUFudGlhbGlhc2luZykgeworICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpBbnRpYWxpYXNpbmc7CisgICAgICAgIGZsYWdzIHw9IFNob3VsZEFu
dGlhbGlhczsKKyAgICB9CisKKyAgICBpZiAobWFza2VkIHx8IHVzZUFudGlhbGlhc2luZyB8fCBv
cGFjaXR5IDwgMSkKKyAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CiAKICAgICBSZWZQdHI8
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW07CiAgICAgcHJvZ3JhbSA9IGRhdGEo
KS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9n
cmFtKG9wdGlvbnMpOwotICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dy
YW1JRCgpKTsKLQogICAgIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgp
LCB0ZXh0dXJlLCBmbGFncywgdGV4dHVyZVNpemUsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJp
eCwgb3BhY2l0eSwgbWFza1RleHR1cmUpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJh
d1NvbGlkQ29sb3IoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbWF0cml4LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgUmVmUHRyPFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OlNvbGlkQ29sb3IpOworICAgIEZsYWdzIGZsYWdzID0gMDsKKyAgICBUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6T3B0aW9ucyBvcHRpb25zID0gVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OlNvbGlkQ29sb3I7CisgICAgaWYgKCFtYXRyaXgubWFwUXVhZChyZWN0KS5pc1Jl
Y3RpbGluZWFyKCkpIHsKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6QW50aWFsaWFzaW5nOworICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZCB8IFNob3Vs
ZEFudGlhbGlhczsKKyAgICB9CisKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsKICAgICBtX2NvbnRleHQzRC0+dXNlUHJv
Z3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CiAKICAgICBmbG9hdCByLCBnLCBiLCBhOwogICAg
IGNvbG9yLmdldFJHQkEociwgZywgYiwgYSk7CiAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm00Zihw
cm9ncmFtLT5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOworICAgIGlmIChhIDwgMSkKKyAg
ICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CiAKLSAgICBkcmF3UXVhZChyZWN0LCBtYXRyaXgs
IHByb2dyYW0uZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIGEgPCAxID8g
U2hvdWxkQmxlbmQgOiAwKTsKLX0KLQotc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZpZXdw
b3J0TWF0cml4KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QpCi17Ci0gICAgR0MzRGludCB2
aWV3cG9ydFs0XTsKLSAgICBjb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNE
OjpWSUVXUE9SVCwgdmlld3BvcnQpOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4
OwotICAgIG1hdHJpeC50cmFuc2xhdGUzZCh2aWV3cG9ydFswXSwgdmlld3BvcnRbMV0sIDApOwot
ICAgIG1hdHJpeC5zY2FsZTNkKHZpZXdwb3J0WzJdLCB2aWV3cG9ydFszXSwgMCk7Ci0KLSAgICAv
LyBNYXAgeCwgeSBhbmQgeiB0byB1bml0IHNxdWFyZSBmcm9tIE9wZW5HTCBub3JtYWxpemVkIGRl
dmljZQotICAgIC8vIGNvb3JkaW5hdGVzIHdoaWNoIGFyZSAtMSB0byAxIG9uIGV2ZXJ5IGF4aXMu
Ci0gICAgbWF0cml4LnRyYW5zbGF0ZTNkKDAuNSwgMC41LCAwLjUpOwotICAgIG1hdHJpeC5zY2Fs
ZTNkKDAuNSwgMC41LCAwLjUpOwotCi0gICAgcmV0dXJuIG1hdHJpeDsKLX0KLQotc3RhdGljIHZv
aWQgc2NhbGVMaW5lRXF1YXRpb25Db2VmZmVjaWVudHNUb09wdGltaXplRGlzdGFuY2VDYWxjdWxh
dGlvbihmbG9hdCogY29lZmZlY2llbnRzKQotewotICAgIC8vIEluIHRoZSBmcmFnbWVudCBzaGFk
ZXIgd2Ugd2FudCB0byBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGZyb20gdGhpcwotICAgIC8vIGxp
bmUgdG8gYSBwb2ludCAocCksIHdoaWNoIGlzIGdpdmVuIGJ5IHRoZSBmb3JtdWxhOgotICAgIC8v
IChBKnAueCArIEIqcC55ICsgQykgLyBzcXJ0IChhXjIgKyBiXjIpCi0gICAgLy8gV2UgY2FuIGRv
IGEgc21hbGwgYW1vdW50IG9mIHByZWNhbGN1bGF0aW9uIGhlcmUgdG8gcmVkdWNlIHRoZQotICAg
IC8vIGFtb3VudCBvZiBtYXRoIGluIHRoZSBzaGFkZXIgYnkgc2NhbGluZyB0aGUgY29lZmZlY2ll
bnRzIG5vdy4KLSAgICBmbG9hdCBzY2FsZSA9IDEuMCAvIEZsb2F0UG9pbnQoY29lZmZlY2llbnRz
WzBdLCBjb2VmZmVjaWVudHNbMV0pLmxlbmd0aCgpOwotICAgIGNvZWZmZWNpZW50c1swXSA9IGNv
ZWZmZWNpZW50c1swXSAqIHNjYWxlOwotICAgIGNvZWZmZWNpZW50c1sxXSA9IGNvZWZmZWNpZW50
c1sxXSAqIHNjYWxlOwotICAgIGNvZWZmZWNpZW50c1syXSA9IGNvZWZmZWNpZW50c1syXSAqIHNj
YWxlOwotfQotCi1zdGF0aWMgdm9pZCBnZXRTdGFuZGFyZEVxdWF0aW9uQ29lZmZlY2llbnRzRm9y
TGluZShjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGZsb2F0KiBj
b2VmZmVjaWVudHMpCi17Ci0gICAgLy8gR2l2ZW4gdHdvIHBvaW50cywgdGhlIHN0YW5kYXJkIGVx
dWF0aW9uIG9mIGEgbGluZSAoQXggKyBCeSArIEMgPSAwKQotICAgIC8vIGNhbiBiZSBjYWxjdWxh
dGVkIHZpYSB0aGUgZm9ybXVsYToKLSAgICAvLyAocDEueSDigJMgcDIueSl4ICsgKHAxLngg4oCT
IHAyLngpeSArICgocDEueCpwMi55KSDigJMgKHAyLngqcDEueSkpID0gMAotICAgIGNvZWZmZWNp
ZW50c1swXSA9IHAxLnkoKSAtIHAyLnkoKTsKLSAgICBjb2VmZmVjaWVudHNbMV0gPSBwMi54KCkg
LSBwMS54KCk7Ci0gICAgY29lZmZlY2llbnRzWzJdID0gcDEueCgpICogcDIueSgpIC0gcDIueCgp
ICogcDEueSgpOwotICAgIHNjYWxlTGluZUVxdWF0aW9uQ29lZmZlY2llbnRzVG9PcHRpbWl6ZURp
c3RhbmNlQ2FsY3VsYXRpb24oY29lZmZlY2llbnRzKTsKKyAgICBkcmF3KHJlY3QsIG1hdHJpeCwg
cHJvZ3JhbS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgZmxhZ3MpOwog
fQogCi1zdGF0aWMgdm9pZCBxdWFkVG9FZGdlQXJyYXkoY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBm
bG9hdCogZWRnZUFycmF5KQordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdFZGdlVHJpYW5nbGVz
KFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtKQogewotICAgIGlmIChxdWFkLmlz
Q291bnRlcmNsb2Nrd2lzZSgpKSB7Ci0gICAgICAgIGdldFN0YW5kYXJkRXF1YXRpb25Db2VmZmVj
aWVudHNGb3JMaW5lKHF1YWQucDQoKSwgcXVhZC5wMygpLCBlZGdlQXJyYXkpOwotICAgICAgICBn
ZXRTdGFuZGFyZEVxdWF0aW9uQ29lZmZlY2llbnRzRm9yTGluZShxdWFkLnAzKCksIHF1YWQucDIo
KSwgZWRnZUFycmF5ICsgMyk7Ci0gICAgICAgIGdldFN0YW5kYXJkRXF1YXRpb25Db2VmZmVjaWVu
dHNGb3JMaW5lKHF1YWQucDIoKSwgcXVhZC5wMSgpLCBlZGdlQXJyYXkgKyA2KTsKLSAgICAgICAg
Z2V0U3RhbmRhcmRFcXVhdGlvbkNvZWZmZWNpZW50c0ZvckxpbmUocXVhZC5wMSgpLCBxdWFkLnA0
KCksIGVkZ2VBcnJheSArIDkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGdldFN0YW5k
YXJkRXF1YXRpb25Db2VmZmVjaWVudHNGb3JMaW5lKHF1YWQucDQoKSwgcXVhZC5wMSgpLCBlZGdl
QXJyYXkpOwotICAgIGdldFN0YW5kYXJkRXF1YXRpb25Db2VmZmVjaWVudHNGb3JMaW5lKHF1YWQu
cDEoKSwgcXVhZC5wMigpLCBlZGdlQXJyYXkgKyAzKTsKLSAgICBnZXRTdGFuZGFyZEVxdWF0aW9u
Q29lZmZlY2llbnRzRm9yTGluZShxdWFkLnAyKCksIHF1YWQucDMoKSwgZWRnZUFycmF5ICsgNik7
Ci0gICAgZ2V0U3RhbmRhcmRFcXVhdGlvbkNvZWZmZWNpZW50c0ZvckxpbmUocXVhZC5wMygpLCBx
dWFkLnA0KCksIGVkZ2VBcnJheSArIDkpOworICAgIGNvbnN0IEdDM0RmbG9hdCBsZWZ0ID0gMDsK
KyAgICBjb25zdCBHQzNEZmxvYXQgdG9wID0gMDsKKyAgICBjb25zdCBHQzNEZmxvYXQgcmlnaHQg
PSAxOworICAgIGNvbnN0IEdDM0RmbG9hdCBib3R0b20gPSAxOworICAgIGNvbnN0IEdDM0RmbG9h
dCBjZW50ZXIgPSAwLjU7CisvLyBFYWNoIHRyaWFuZ2xlIGNvbnNpc3RzIG9mIHR3byBlZGdlIHBv
aW50cywgZWFjaCBvbmUgd2l0aCB0aGUgencgdmFsdWVzIGVxdWFsIHRvIHh5LAorLy8gYW5kIHRo
ZSBjZW50ZXIgcG9pbnQsIHdpdGggdGhlIHp3IGNvb3JkaW5hdGVzIGVxdWFsIHRvIHRoZSBjZW50
ZXIgb2YgdGhlIGVkZ2UgcG9pbnRzLgorI2RlZmluZSBTSURFX1RSSUFOR0xFX0RBVEEoeDEsIHkx
LCB4MiwgeTIpIFwKKyAgICB4MSwgeTEsIHgxLCB5MSwgXAorICAgIHgyLCB5MiwgeDIsIHkyLCBc
CisgICAgY2VudGVyLCBjZW50ZXIsICh4MSArIHgyKSAvIDIsICh5MSArIHkyKSAvIDIKKworICAg
IHN0YXRpYyBjb25zdCBHQzNEZmxvYXQgdW5pdFJlY3RTaWRlVHJpYW5nbGVzW10gPSB7CisgICAg
ICAgIFNJREVfVFJJQU5HTEVfREFUQShsZWZ0LCB0b3AsIHJpZ2h0LCB0b3ApLAorICAgICAgICBT
SURFX1RSSUFOR0xFX0RBVEEobGVmdCwgdG9wLCBsZWZ0LCBib3R0b20pLAorICAgICAgICBTSURF
X1RSSUFOR0xFX0RBVEEocmlnaHQsIHRvcCwgcmlnaHQsIGJvdHRvbSksCisgICAgICAgIFNJREVf
VFJJQU5HTEVfREFUQShsZWZ0LCBib3R0b20sIHJpZ2h0LCBib3R0b20pCisgICAgfTsKKyN1bmRl
ZiBTSURFX1RSSUFOR0xFCisgICAgUGxhdGZvcm0zRE9iamVjdCB2Ym8gPSBkYXRhKCkuZ2V0U3Rh
dGljVkJPKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHNpemVvZihHQzNEZmxvYXQp
ICogNDgsIHVuaXRSZWN0U2lkZVRyaWFuZ2xlcyk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRCdWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgdmJvKTsKKyAgICBtX2NvbnRleHQz
RC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCA0LCBHcmFw
aGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBtX2NvbnRleHQzRC0+ZHJh
d0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTLCAwLCAxMik7CiB9CiAKLXN0YXRp
YyBGbG9hdFNpemUgc2NhbGVkVmVjdG9yRGlmZmVyZW5jZShjb25zdCBGbG9hdFBvaW50JiBwb2lu
dDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MiwgZmxvYXQgc2NhbGUpCit2b2lkIFRleHR1cmVN
YXBwZXJHTDo6ZHJhd1VuaXRSZWN0KFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFt
LCBHQzNEZW51bSBkcmF3aW5nTW9kZSkKIHsKLSAgICBGbG9hdFNpemUgdmVjdG9yID0gcG9pbnQx
IC0gcG9pbnQyOwotICAgIGlmICh2ZWN0b3IuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkpCi0gICAg
ICAgIHZlY3Rvci5zY2FsZSgxLjAgLyB2ZWN0b3IuZGlhZ29uYWxMZW5ndGgoKSk7Ci0KLSAgICB2
ZWN0b3Iuc2NhbGUoc2NhbGUpOwotICAgIHJldHVybiB2ZWN0b3I7CisgICAgc3RhdGljIGNvbnN0
IEdDM0RmbG9hdCB1bml0UmVjdFtdID0geyAwLCAwLCAxLCAwLCAxLCAxLCAwLCAxIH07CisgICAg
UGxhdGZvcm0zRE9iamVjdCB2Ym8gPSBkYXRhKCkuZ2V0U3RhdGljVkJPKEdyYXBoaWNzQ29udGV4
dDNEOjpBUlJBWV9CVUZGRVIsIHNpemVvZihHQzNEZmxvYXQpICogOCwgdW5pdFJlY3QpOworICAg
IG1fY29udGV4dDNELT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIs
IHZibyk7CisgICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVy
dGV4TG9jYXRpb24oKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7
CisgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMoZHJhd2luZ01vZGUsIDAsIDQpOwogfQogCi1z
dGF0aWMgRmxvYXRRdWFkIGluZmxhdGVRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgZmxvYXQg
ZGlzdGFuY2UpCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhdyhjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtKiBzaGFkZXJQcm9ncmFtLCBHQzNEZW51bSBkcmF3aW5nTW9kZSwg
RmxhZ3MgZmxhZ3MpCiB7Ci0gICAgRmxvYXRRdWFkIGV4cGFuZGVkUXVhZCA9IHF1YWQ7Ci0gICAg
ZXhwYW5kZWRRdWFkLnNldFAxKGV4cGFuZGVkUXVhZC5wMSgpICsgc2NhbGVkVmVjdG9yRGlmZmVy
ZW5jZShxdWFkLnAxKCksIHF1YWQucDIoKSwgZGlzdGFuY2UpKTsKLSAgICBleHBhbmRlZFF1YWQu
c2V0UDQoZXhwYW5kZWRRdWFkLnA0KCkgKyBzY2FsZWRWZWN0b3JEaWZmZXJlbmNlKHF1YWQucDQo
KSwgcXVhZC5wMygpLCBkaXN0YW5jZSkpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJp
eCA9CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KG1vZGVsVmlld01hdHJpeCkubXVsdGlw
bHkoVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoRmxvYXRSZWN0KDAsIDAsIDEsIDEp
LCByZWN0KSk7CiAKLSAgICBleHBhbmRlZFF1YWQuc2V0UDEoZXhwYW5kZWRRdWFkLnAxKCkgKyBz
Y2FsZWRWZWN0b3JEaWZmZXJlbmNlKHF1YWQucDEoKSwgcXVhZC5wNCgpLCBkaXN0YW5jZSkpOwot
ICAgIGV4cGFuZGVkUXVhZC5zZXRQMihleHBhbmRlZFF1YWQucDIoKSArIHNjYWxlZFZlY3RvckRp
ZmZlcmVuY2UocXVhZC5wMigpLCBxdWFkLnAzKCksIGRpc3RhbmNlKSk7CisgICAgbV9jb250ZXh0
M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZlcnRleExvY2F0aW9u
KCkpOworICAgIHNoYWRlclByb2dyYW0tPnNldE1hdHJpeChzaGFkZXJQcm9ncmFtLT5tb2RlbFZp
ZXdNYXRyaXhMb2NhdGlvbigpLCBtYXRyaXgpOworICAgIHNoYWRlclByb2dyYW0tPnNldE1hdHJp
eChzaGFkZXJQcm9ncmFtLT5wcm9qZWN0aW9uTWF0cml4TG9jYXRpb24oKSwgZGF0YSgpLnByb2pl
Y3Rpb25NYXRyaXgpOwogCi0gICAgZXhwYW5kZWRRdWFkLnNldFAyKGV4cGFuZGVkUXVhZC5wMigp
ICsgc2NhbGVkVmVjdG9yRGlmZmVyZW5jZShxdWFkLnAyKCksIHF1YWQucDEoKSwgZGlzdGFuY2Up
KTsKLSAgICBleHBhbmRlZFF1YWQuc2V0UDMoZXhwYW5kZWRRdWFkLnAzKCkgKyBzY2FsZWRWZWN0
b3JEaWZmZXJlbmNlKHF1YWQucDMoKSwgcXVhZC5wNCgpLCBkaXN0YW5jZSkpOworICAgIGlmIChm
bGFncyAmIFNob3VsZEJsZW5kKSB7CisgICAgICAgIG1fY29udGV4dDNELT5ibGVuZEZ1bmMoR3Jh
cGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQ
SEEpOworICAgICAgICBtX2NvbnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVO
RCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpCTEVORCk7CiAKLSAgICBleHBhbmRlZFF1YWQuc2V0UDMoZXhwYW5kZWRRdWFkLnAz
KCkgKyBzY2FsZWRWZWN0b3JEaWZmZXJlbmNlKHF1YWQucDMoKSwgcXVhZC5wMigpLCBkaXN0YW5j
ZSkpOwotICAgIGV4cGFuZGVkUXVhZC5zZXRQNChleHBhbmRlZFF1YWQucDQoKSArIHNjYWxlZFZl
Y3RvckRpZmZlcmVuY2UocXVhZC5wNCgpLCBxdWFkLnAxKCksIGRpc3RhbmNlKSk7CisgICAgaWYg
KGZsYWdzICYgU2hvdWxkQW50aWFsaWFzKQorICAgICAgICBkcmF3RWRnZVRyaWFuZ2xlcyhzaGFk
ZXJQcm9ncmFtKTsKKyAgICBlbHNlCisgICAgICAgIGRyYXdVbml0UmVjdChzaGFkZXJQcm9ncmFt
LCBkcmF3aW5nTW9kZSk7CiAKLSAgICByZXR1cm4gZXhwYW5kZWRRdWFkOworICAgIG1fY29udGV4
dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRp
b24oKSk7CiB9Ci0KLWJvb2wgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxp
YXNpbmcodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmIHNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgb3JpZ2luYWxUYXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0
dXJlKiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzKQordm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbSogcHJvZ3JhbSwgdWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNp
emUmIHNpemUsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSog
bWFza1RleHR1cmUpCiB7Ci0gICAgLy8gVGhlIGFudGlhbGlhc2luZyBwYXRoIGRvZXMgbm90IHN1
cHBvcnQgbWFzayB0ZXh0dXJlcyBhdCB0aGUgbW9tZW50LgotICAgIGlmIChtYXNrVGV4dHVyZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRm9yIG5vdyB3ZSBwdW50IG9uIHJlbmRl
cmluZyB0aWxlZCBsYXllcnMgd2l0aCBhbnRpYWxpYXNpbmcuIEl0J3MgcXVpdGUgaGFyZAotICAg
IC8vIHRvIHJlbmRlciB0aGVtIHdpdGhvdXQgc2VhbXMuCi0gICAgaWYgKGV4cG9zZWRFZGdlcyAh
PSBBbGxFZGdlcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVGhlIGdvYWwgaGVy
ZSBpcyByZW5kZXIgYSBzbGlnaHRseSBsYXJnZXIgKDAuNzUgcGl4ZWxzIGluIHNjcmVlbiBzcGFj
ZSkgcXVhZCBhbmQgdG8KLSAgICAvLyBncmFkdWFsbHkgdGFwZXIgb2ZmIHRoZSBhbHBoYSB2YWx1
ZXMgdG8gZG8gYSBzaW1wbGUgdmVyc2lvbiBvZiBlZGdlIGRpc3RhbmNlCi0gICAgLy8gYW50aWFs
aWFzaW5nLiBOb3RlIGhlcmUgdGhhdCB3ZSBhcmUgYWxzbyBpbmNsdWRpbmcgdGhlIHZpZXdwb3J0
IG1hdHJpeCAod2hpY2gKLSAgICAvLyB0cmFuc2xhdGVzIGZyb20gbm9ybWFsaXplZCBkZXZpY2Ug
Y29vcmRpbmF0ZXMgdG8gc2NyZWVuIGNvb3JkaW5hdGVzKSwgYmVjYXVzZSB0aGVzZQotICAgIC8v
IHZhbHVlcyBhcmUgY29uc3VtZWQgaW4gdGhlIGZyYWdtZW50IHNoYWRlciwgd2hpY2ggd29ya3Mg
aW4gc2NyZWVuIGNvb3JkaW5hdGVzLgotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcmVlblNw
YWNlVHJhbnNmb3JtID0gdmlld3BvcnRNYXRyaXgobV9jb250ZXh0M0QuZ2V0KCkpLm11bHRpcGx5
KFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KSkubXVsdGlwbHko
bW9kZWxWaWV3TWF0cml4KS50bzJkVHJhbnNmb3JtKCk7Ci0gICAgaWYgKCFzY3JlZW5TcGFjZVRy
YW5zZm9ybS5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEZsb2F0
UXVhZCBxdWFkSW5TY3JlZW5TcGFjZSA9IHNjcmVlblNwYWNlVHJhbnNmb3JtLm1hcFF1YWQob3Jp
Z2luYWxUYXJnZXRSZWN0KTsKLQotICAgIGNvbnN0IGZsb2F0IGluZmxhdGlvbkRpc3RhbmNlID0g
MC43NTsKLSAgICBGbG9hdFF1YWQgZXhwYW5kZWRRdWFkSW5TY3JlZW5TcGFjZSA9IGluZmxhdGVR
dWFkKHF1YWRJblNjcmVlblNwYWNlLCBpbmZsYXRpb25EaXN0YW5jZSk7Ci0KLSAgICAvLyBJbiB0
aGUgbm9uLWFudGlhbGlhc2VkIGNhc2UgdGhlIHZlcnRpY2VzIHBhc3NlZCBhcmUgdGhlIHVuaXQg
cmVjdGFuZ2xlIGFuZCBkb3VibGUKLSAgICAvLyBhcyB0aGUgdGV4dHVyZSBjb29yZGluYXRlcyAo
MCwwIDEsMCwgMSwxIGFuZCAwLDEpLiBIZXJlIHdlIG1hcCB0aGUgZXhwYW5kZWQgcXVhZAotICAg
IC8vIGNvb3JkaW5hdGVzIGluIHNjcmVlbiBzcGFjZSBiYWNrIHRvIHRoZSBvcmlnaW5hbCByZWN0
J3MgdGV4dHVyZSBjb29yZGluYXRlcy4KLSAgICAvLyBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mIHNs
aWdodGx5IGluY3JlYXNpbmcgdGhlIHNpemUgb2YgdGhlIG9yaWdpbmFsIHF1YWQncyBnZW9tZXRy
eQotICAgIC8vIGluIHRoZSB2ZXJ0ZXggc2hhZGVyLgotICAgIEZsb2F0UXVhZCBleHBhbmRlZFF1
YWRJblRleHR1cmVDb29yZGluYXRlcyA9IHNjcmVlblNwYWNlVHJhbnNmb3JtLmludmVyc2UoKS5t
YXBRdWFkKGV4cGFuZGVkUXVhZEluU2NyZWVuU3BhY2UpOwotICAgIGV4cGFuZGVkUXVhZEluVGV4
dHVyZUNvb3JkaW5hdGVzLm1vdmUoLW9yaWdpbmFsVGFyZ2V0UmVjdC54KCksIC1vcmlnaW5hbFRh
cmdldFJlY3QueSgpKTsKLSAgICBleHBhbmRlZFF1YWRJblRleHR1cmVDb29yZGluYXRlcy5zY2Fs
ZSgxIC8gb3JpZ2luYWxUYXJnZXRSZWN0LndpZHRoKCksIDEgLyBvcmlnaW5hbFRhcmdldFJlY3Qu
aGVpZ2h0KCkpOwotCi0gICAgLy8gV2UgcHJlcGFyZSBib3RoIHRoZSBleHBhbmRlZCBxdWFkIGZv
ciB0aGUgZnJhZ21lbnQgc2hhZGVyIGFzIHdlbGwgYXMgdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5n
Ci0gICAgLy8gYm94IG9mIHRoYXQgcXVhZCwgYXMgdGhhdCBzZWVtcyBuZWNlc3NhcnkgdG8gcHJv
cGVybHkgYW50aWFsaWFzIGJhY2tmYWNpbmcgcXVhZHMuCi0gICAgZmxvYXQgdGFyZ2V0UXVhZEVk
Z2VzWzI0XTsKLSAgICBxdWFkVG9FZGdlQXJyYXkoZXhwYW5kZWRRdWFkSW5TY3JlZW5TcGFjZSwg
dGFyZ2V0UXVhZEVkZ2VzKTsKLSAgICBxdWFkVG9FZGdlQXJyYXkoaW5mbGF0ZVF1YWQocXVhZElu
U2NyZWVuU3BhY2UuYm91bmRpbmdCb3goKSwgIGluZmxhdGlvbkRpc3RhbmNlKSwgdGFyZ2V0UXVh
ZEVkZ2VzICsgMTIpOwotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcHRpb25zIG9w
dGlvbnMgPSBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QW50aWFsaWFzIHwgVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmU7Ci0gICAgaWYgKG9wYWNpdHkgPCAxKQotICAgICAg
ICBvcHRpb25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5OwotCi0gICAg
UmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJl
ZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0ob3B0
aW9ucyk7CiAgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkp
OwotICAgIG1fY29udGV4dDNELT51bmlmb3JtM2Z2KHByb2dyYW0tPmV4cGFuZGVkUXVhZEVkZ2Vz
SW5TY3JlZW5TcGFjZUxvY2F0aW9uKCksIDgsIHRhcmdldFF1YWRFZGdlcyk7Ci0KLSAgICBkcmF3
VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgdGV4dHVyZSwgZmxhZ3MsIHNp
emUsIERyYXdRdWFkKG9yaWdpbmFsVGFyZ2V0UmVjdCwgZXhwYW5kZWRRdWFkSW5UZXh0dXJlQ29v
cmRpbmF0ZXMpLCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIDAgLyogbWFza1RleHR1cmUgKi8p
OwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1
cmVkUXVhZFdpdGhQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCB1
aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3Qg
RHJhd1F1YWQmIHF1YWRUb0RyYXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZp
ZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJl
KQotewotICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52
ZXJ0ZXhMb2NhdGlvbigpKTsKICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRTApOwogICAgIEdDM0RlbnVtIHRhcmdldCA9IGZsYWdzICYgU2hv
dWxkVXNlQVJCVGV4dHVyZVJlY3QgPyBHQzNEZW51bShFeHRlbnNpb25zM0Q6OlRFWFRVUkVfUkVD
VEFOR0xFX0FSQikgOiBHQzNEZW51bShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCk7CiAg
ICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7CkBAIC01OTYsNyAr
NTIxLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3Jh
bShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSogcHIKICAgICBpZiAob3BhY2l0eSA8IDEgfHwg
bWFza1RleHR1cmUpCiAgICAgICAgIGZsYWdzIHw9IFNob3VsZEJsZW5kOwogCi0gICAgZHJhd1F1
YWQocXVhZFRvRHJhdywgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLCBHcmFwaGljc0NvbnRleHQz
RDo6VFJJQU5HTEVfRkFOLCBmbGFncyk7CisgICAgZHJhdyhyZWN0LCBtb2RlbFZpZXdNYXRyaXgs
IHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIGZsYWdzKTsKIH0KIAog
Qml0bWFwVGV4dHVyZUdMOjpCaXRtYXBUZXh0dXJlR0woVGV4dHVyZU1hcHBlckdMKiB0ZXh0dXJl
TWFwcGVyKQpAQCAtMTE3MCwyNiArMTA5NSwxMCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVn
aW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgog
ICAgIGNvbnN0IEdDM0RmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9
OwogICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleExv
Y2F0aW9uKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRw
dHIodW5pdFJlY3QpKTsKIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5z
Zm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KQotICAgICAgICAgICAgLm11
bHRpcGx5KG1vZGVsVmlld01hdHJpeCkKLSAgICAgICAgICAgIC5tdWx0aXBseShUcmFuc2Zvcm1h
dGlvbk1hdHJpeCh0YXJnZXRSZWN0LndpZHRoKCksIDAsIDAsIDAsCi0gICAgICAgICAgICAgICAg
MCwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgMCwgMCwKLSAgICAgICAgICAgICAgICAwLCAwLCAxLCAw
LAotICAgICAgICAgICAgICAgIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgMCwgMSkp
OwotCi0gICAgY29uc3QgR0MzRGZsb2F0IG00W10gPSB7Ci0gICAgICAgIG1hdHJpeC5tMTEoKSwg
bWF0cml4Lm0xMigpLCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQoKSwKLSAgICAgICAgbWF0cml4
Lm0yMSgpLCBtYXRyaXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgpLAotICAgICAg
ICBtYXRyaXgubTMxKCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCks
Ci0gICAgICAgIG1hdHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJp
eC5tNDQoKQotICAgIH07CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNm
b3JtYXRpb25NYXRyaXgobW9kZWxWaWV3TWF0cml4KQorICAgICAgICAubXVsdGlwbHkoVHJhbnNm
b3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoRmxvYXRSZWN0KDAsIDAsIDEsIDEpLCB0YXJnZXRS
ZWN0KSk7CiAKLSAgICBjb25zdCBHQzNEZmxvYXQgbTRhbGxbXSA9IHsKLSAgICAgICAgMiwgMCwg
MCwgMCwKLSAgICAgICAgMCwgMiwgMCwgMCwKLSAgICAgICAgMCwgMCwgMSwgMCwKLSAgICAgICAg
LTEsIC0xLCAwLCAxCi0gICAgfTsKKyAgICBzdGF0aWMgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXggZnVsbFByb2plY3Rpb25NYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVj
dChGbG9hdFJlY3QoMCwgMCwgMSwgMSksIEZsb2F0UmVjdCgtMSwgLTEsIDIsIDIpKTsKIAogICAg
IGludCYgc3RlbmNpbEluZGV4ID0gY2xpcFN0YWNrKCkuY3VycmVudCgpLnN0ZW5jaWxJbmRleDsK
IApAQCAtMTIwMiwxMyArMTExMSwxNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlw
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgogICAgIG1f
Y29udGV4dDNELT5zdGVuY2lsTWFzaygweGZmICYgfihzdGVuY2lsSW5kZXggLSAxKSk7CiAKICAg
ICAvLyBGaXJzdCBjbGVhciB0aGUgZW50aXJlIGJ1ZmZlciBhdCB0aGUgY3VycmVudCBpbmRleC4K
LSAgICBtX2NvbnRleHQzRC0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT5tYXRyaXhMb2NhdGlv
bigpLCAxLCBmYWxzZSwgY29uc3RfY2FzdDxHQzNEZmxvYXQqPihtNGFsbCkpOworICAgIHByb2dy
YW0tPnNldE1hdHJpeChwcm9ncmFtLT5wcm9qZWN0aW9uTWF0cml4TG9jYXRpb24oKSwgZnVsbFBy
b2plY3Rpb25NYXRyaXgpOworICAgIHByb2dyYW0tPnNldE1hdHJpeChwcm9ncmFtLT5tb2RlbFZp
ZXdNYXRyaXhMb2NhdGlvbigpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKICAgICBtX2NvbnRl
eHQzRC0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQz
RDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8pOwogICAgIG1fY29udGV4dDNELT5kcmF3
QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIDAsIDQpOwogCiAgICAgLy8g
Tm93IGFwcGx5IHRoZSBjdXJyZW50IGluZGV4IHRvIHRoZSBuZXcgcXVhZC4KICAgICBtX2NvbnRl
eHQzRC0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpSRVBMQUNFLCBHcmFwaGljc0NvbnRl
eHQzRDo6UkVQTEFDRSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFUExBQ0UpOwotICAgIG1fY29udGV4
dDNELT51bmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIGZhbHNl
LCBjb25zdF9jYXN0PEdDM0RmbG9hdCo+KG00KSk7CisgICAgcHJvZ3JhbS0+c2V0TWF0cml4KHBy
b2dyYW0tPnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpLCBkYXRhKCkucHJvamVjdGlvbk1hdHJp
eCk7CisgICAgcHJvZ3JhbS0+c2V0TWF0cml4KHByb2dyYW0tPm1vZGVsVmlld01hdHJpeExvY2F0
aW9uKCksIG1hdHJpeCk7CiAgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250
ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgNCk7CiAKICAgICAvLyBDbGVhciB0aGUgc3RhdGUuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmgKaW5kZXggNTlkYjNkMzk3OWMwZDEwYmU0MTQ4MTVlNzgyMzE1ZGYwN2Mz
NWExNi4uYWExMzMxMmZhYWZjYTMxZmRmMWQxYzQxNGQzNWMyN2NhYzgwMmNhMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
TC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0wuaApAQCAtNDQsNyArNDQsOCBAQCBwdWJsaWM6CiAgICAgZW51bSBGbGFnIHsKICAg
ICAgICAgU2hvdWxkQmxlbmQgPSAweDAxLAogICAgICAgICBTaG91bGRGbGlwVGV4dHVyZSA9IDB4
MDIsCi0gICAgICAgIFNob3VsZFVzZUFSQlRleHR1cmVSZWN0ID0gMHgwNAorICAgICAgICBTaG91
bGRVc2VBUkJUZXh0dXJlUmVjdCA9IDB4MDQsCisgICAgICAgIFNob3VsZEFudGlhbGlhcyA9IDB4
MDgKICAgICB9OwogCiAgICAgdHlwZWRlZiBpbnQgRmxhZ3M7CkBAIC05OCwyMiArOTksMTMgQEAg
cHJpdmF0ZToKICAgICAgICAgVmVjdG9yPENsaXBTdGF0ZT4gY2xpcFN0YWNrOwogICAgIH07CiAK
LSAgICBzdHJ1Y3QgRHJhd1F1YWQgewotICAgICAgICBEcmF3UXVhZChjb25zdCBGbG9hdFJlY3Qm
IG9yaWdpbmFsVGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRRdWFkJiB0YXJnZXRSZWN0TWFwcGVkVG9V
bml0U3F1YXJlID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgRmxvYXRTaXplKDEsIDEpKSkKLSAg
ICAgICAgICAgIDogb3JpZ2luYWxUYXJnZXRSZWN0KG9yaWdpbmFsVGFyZ2V0UmVjdCkKLSAgICAg
ICAgICAgICwgdGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZSh0YXJnZXRSZWN0TWFwcGVkVG9V
bml0U3F1YXJlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBGbG9hdFJlY3Qgb3Jp
Z2luYWxUYXJnZXRSZWN0OwotICAgICAgICBGbG9hdFF1YWQgdGFyZ2V0UmVjdE1hcHBlZFRvVW5p
dFNxdWFyZTsKLSAgICB9OwotCiAgICAgVGV4dHVyZU1hcHBlckdMKCk7CiAKLSAgICBib29sIGRy
YXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncywgY29uc3Qg
SW50U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYgb3JpZ2luYWxUYXJnZXRSZWN0LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBC
aXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzKTsKLSAgICB2
b2lkIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bSosIHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBJbnRTaXplJiwgY29uc3QgRHJhd1F1
YWQmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBv
cGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7Ci0gICAgdm9pZCBkcmF3
UXVhZChjb25zdCBEcmF3UXVhZCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZp
ZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiwgR0MzRGVudW0gZHJhd2luZ01v
ZGUsIEZsYWdzKTsKKyAgICB2b2lkIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbSosIHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBJbnRT
aXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVs
Vmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1
cmUpOworICAgIHZvaWQgZHJhdyhjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSosIEdD
M0RlbnVtIGRyYXdpbmdNb2RlLCBGbGFncyk7CisKKyAgICB2b2lkIGRyYXdVbml0UmVjdChUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSosIEdDM0RlbnVtIGRyYXdpbmdNb2RlKTsKKyAgICB2b2lk
IGRyYXdFZGdlVHJpYW5nbGVzKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKik7CiAKICAgICBi
b29sIGJlZ2luU2Npc3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBG
bG9hdFJlY3QmKTsKICAgICB2b2lkIGJpbmREZWZhdWx0U3VyZmFjZSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKaW5kZXggMmQ4NmJmODU5ZGE4NjE3ZmM0ODc5
ZjJkNzE3NTkyMjhhYTFjMDQzZi4uMTg1NWJlYjZlMDI4ZmQ0ZGQwNmE4YWFmMjU4ZGE1MDk2MzZj
OGVjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCkBAIC03
MCw2ICs3MCwxOCBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleAogICAgIExPRyhDb21wb3NpdGlu
ZywgIlByb2dyYW0gbG9nOiAlc1xuIiwgbG9nLnV0ZjgoKS5kYXRhKCkpOwogfQogCit2b2lkIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpzZXRNYXRyaXgoR0MzRHVpbnQgbG9jYXRpb24sIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCit7CisgICAgR0MzRGZsb2F0IG1hdHJp
eEFzRmxvYXRzW10gPSB7CisgICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0xMigpLCBtYXRy
aXgubTEzKCksIG1hdHJpeC5tMTQoKSwKKyAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRyaXgubTIy
KCksIG1hdHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgpLAorICAgICAgICBtYXRyaXgubTMxKCksIG1h
dHJpeC5tMzIoKSwgbWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCksCisgICAgICAgIG1hdHJpeC5t
NDEoKSwgbWF0cml4Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5tNDQoKQorICAgIH07CisK
KyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIDEsIGZhbHNlLCBtYXRy
aXhBc0Zsb2F0cyk7Cit9CisKIEdDM0R1aW50IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpn
ZXRMb2NhdGlvbihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFZhcmlhYmxlVHlwZSB0eXBlKQog
ewogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBHQzNEdWludD46Oml0ZXJhdG9yIGl0ID0gbV92
YXJpYWJsZXMuZmluZChuYW1lKTsKQEAgLTEwNiwzMiArMTE4LDY3IEBAIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKQogICAgIG1fY29udGV4
dC0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFtSUQpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciogdmVy
dGV4U2hhZGVyU291cmNlID0KKyNkZWZpbmUgR0xTTF9ESVJFQ1RJVkUoLi4uKSAiIyIjX19WQV9B
UkdTX18iXG4iCitzdGF0aWMgY29uc3QgY2hhciogdmVydGV4VGVtcGxhdGUgPQogICAgIFNUUklO
R0lGWSgKLSAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OworICAgICAgICBhdHRyaWJ1dGUg
dmVjNCBhX3ZlcnRleDsKKyAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbW9kZWxWaWV3TWF0cml4Owor
ICAgICAgICB1bmlmb3JtIG1hdDQgdV9wcm9qZWN0aW9uTWF0cml4OwogICAgICAgICB1bmlmb3Jt
IGZsb2F0IHVfZmxpcDsKICAgICAgICAgdW5pZm9ybSB2ZWMyIHVfdGV4dHVyZVNpemU7Ci0gICAg
ICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OworCiAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3Rl
eENvb3JkOwogICAgICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7CisgICAgICAgIHZh
cnlpbmcgZmxvYXQgdl9hbnRpYWxpYXM7CisKKyAgICAgICAgdm9pZCBub29wKHZlYzIpIHsgfQor
CisgICAgICAgIHZlYzQgdG9WaWV3cG9ydFNwYWNlKHZlYzIgcG9zKSB7IHJldHVybiB2ZWM0KHBv
cywgMC4sIDEuKSAqIHVfbW9kZWxWaWV3TWF0cml4OyB9CisKKyAgICAgICAgLy8gVGhpcyBmdW5j
dGlvbiByZWxpZXMgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB3ZSBnZXQgZWRnZSB0cmlhbmdsZXMg
d2l0aCBjb250cm9sIHBvaW50cywKKyAgICAgICAgLy8gYSBjb250cm9sIHBvaW50IGJlaW5nIHRo
ZSBuZWFyZXN0IHBvaW50IHRvIHRoZSBjb29yZGluYXRlIHRoYXQgaXMgb24gdGhlIGVkZ2UuCisg
ICAgICAgIHZvaWQgYXBwbHlBbnRpYWxpYXNpbmcoaW5vdXQgdmVjMiBwb3NpdGlvbikKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gV2UgY291bnQgb24gdGhlIGZhY3QgdGhhdCBxdWFkIHBhc3Nl
ZCBpbiBpcyBhbHdheXMgYSB1bml0IHJlY3QsCisgICAgICAgICAgICAvLyBhbmQgdGhlIHRyYW5z
Zm9ybWF0aW9uIG1hdHJpeCBhcHBsaWVzIHRoZSByZWFsIHJlY3QuCisgICAgICAgICAgICBjb25z
dCB2ZWMyIGNlbnRlciA9IHZlYzIoMC41LCAwLjUpOworICAgICAgICAgICAgY29uc3QgZmxvYXQg
YW50aWFsaWFzSW5mbGF0aW9uRGlzdGFuY2UgPSAxLjsKKworICAgICAgICAgICAgLy8gV2UgcGFz
cyB0aGUgY29udHJvbCBwb2ludCBhcyB0aGUgencgY29vcmRpbmF0ZXMgb2YgdGhlIHZlcnRleC4K
KyAgICAgICAgICAgIC8vIFRoZSBjb250cm9sIHBvaW50IGlzIHRoZSBwb2ludCBvbiB0aGUgZWRn
ZSBjbG9zZXN0IHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICAgICAgICAgICAgLy8gVGhlIGNv
bnRyb2wgcG9pbnQgaXMgdXNlZCB0byBjb21wdXRlIHRoZSBhbnRpYWxpYXMgdmFsdWUuCisgICAg
ICAgICAgICB2ZWMyIGNvbnRyb2xQb2ludCA9IGFfdmVydGV4Lnp3OworCisgICAgICAgICAgICAv
LyBGaXJzdCB3ZSBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGluIHZpZXdwb3J0IHNwYWNlLgorICAg
ICAgICAgICAgdmVjNCBjZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSB0b1ZpZXdwb3J0U3Bh
Y2UoY2VudGVyKTsKKyAgICAgICAgICAgIHZlYzQgY29udHJvbFBvaW50SW5WaWV3cG9ydENvb3Jk
aW5hdGVzID0gdG9WaWV3cG9ydFNwYWNlKGNvbnRyb2xQb2ludCk7CisgICAgICAgICAgICBmbG9h
dCB2aWV3cG9ydFNwYWNlRGlzdGFuY2UgPSBkaXN0YW5jZShjZW50ZXJJblZpZXdwb3J0Q29vcmRp
bmF0ZXMsIGNvbnRyb2xQb2ludEluVmlld3BvcnRDb29yZGluYXRlcyk7CisKKyAgICAgICAgICAg
IC8vIFdlIGFkZCB0aGUgaW5mbGF0aW9uIGRpc3RhbmNlIHRvIHRoZSBjb21wdXRlZCBkaXN0YW5j
ZSwgYW5kIGNvbXB1dGUgdGhlIHJhdGlvLgorICAgICAgICAgICAgZmxvYXQgaW5mbGF0aW9uUmF0
aW8gPSAodmlld3BvcnRTcGFjZURpc3RhbmNlICsgYW50aWFsaWFzSW5mbGF0aW9uRGlzdGFuY2Up
IC8gdmlld3BvcnRTcGFjZURpc3RhbmNlOworCisgICAgICAgICAgICAvLyB2X2FudGlhbGlhcyBu
ZWVkcyB0byBiZSAwIGZvciB0aGUgb3V0ZXIgZWRnZSBhbmQgMS4gZm9yIHRoZSBpbm5lciBlZGdl
LgorICAgICAgICAgICAgLy8gU2luY2UgdGhlIGNvbnRyb2xQb2ludCBpcyBlcXVhbCB0byB0aGUg
cG9zaXRpb24gaW4gdGhlIGVkZ2UgdmVydGljZXMsIHRoZSB2YWx1ZSBpcyBhbHdheXMgMCBmb3Ig
dGhvc2UuCisgICAgICAgICAgICAvLyBGb3IgdGhlIGNlbnRlciBwb2ludCwgdGhlIGRpc3RhbmNl
IGlzIGFsd2F5cyAwLjUsIHNvIHdlIG5vcm1hbGl6ZSB0byAxLiBieSBtdWx0aXBseWluZyBieSAy
LgorICAgICAgICAgICAgLy8gQnkgbXVsdHBseWluZyBieSBpbmZsYXRpb25SYXRpbyBhbmQgZGl2
aWRpbmcgYnkgKGluZmxhdGlvblJhdGlvIC0gMSksCisgICAgICAgICAgICAvLyBXZSBtYWtlIHN1
cmUgdGhhdCB0aGUgdmFyeWluZyBpbnRlcnBvbGF0ZXMgYmV0d2VlbiAwIChvdXRlciBlZGdlKSwg
MSAoaW5uZXIgZWRnZSkgYW5kIG4gPiAxIChjZW50ZXIpLgorICAgICAgICAgICAgdl9hbnRpYWxp
YXMgPSBkaXN0YW5jZShjb250cm9sUG9pbnQsIHBvc2l0aW9uKSAqIDIuICogaW5mbGF0aW9uUmF0
aW8gLyAoaW5mbGF0aW9uUmF0aW8gLSAxLik7CisKKyAgICAgICAgICAgIC8vIE5vdyBpbmZsYXRl
IHRoZSBhY3R1YWwgcG9zaXRpb24uIEJ5IHVzaW5nIHRoaXMgZm9ybXVsYSBpbnN0ZWFkIG9mIGlu
ZmxhdGluZyBwb3NpdGlvbiBkaXJlY3RseSwKKyAgICAgICAgICAgIC8vIHdlIGVuc3VyZSB0aGF0
IHRoZSBjZW50ZXIgdmVydGV4IGlzIG5ldmVyIGluZmxhdGVkLgorICAgICAgICAgICAgcG9zaXRp
b24gPSBjZW50ZXIgKyAocG9zaXRpb24gLSBjZW50ZXIpICogaW5mbGF0aW9uUmF0aW87CisgICAg
ICAgIH0KIAogICAgICAgICB2b2lkIG1haW4odm9pZCkKICAgICAgICAgewotICAgICAgICAgICAg
dmVjNCBwb3NpdGlvbiA9IGFfdmVydGV4OworICAgICAgICAgICAgdmVjMiBwb3NpdGlvbiA9IGFf
dmVydGV4Lnh5OworICAgICAgICAgICAgYXBwbHlBbnRpYWxpYXNpbmdJZk5lZWRlZChwb3NpdGlv
bik7CiAgICAgICAgICAgICB2X3RleENvb3JkID0gdmVjMihwb3NpdGlvbi54LCBtaXgocG9zaXRp
b24ueSwgMS4gLSBwb3NpdGlvbi55LCB1X2ZsaXApKSAqIHVfdGV4dHVyZVNpemU7Ci0gICAgICAg
ICAgICB2X21hc2tUZXhDb29yZCA9IHZlYzIocG9zaXRpb24pOwotICAgICAgICAgICAgZ2xfUG9z
aXRpb24gPSB1X21hdHJpeCAqIGFfdmVydGV4OworICAgICAgICAgICAgdl9tYXNrVGV4Q29vcmQg
PSBwb3NpdGlvbjsKKyAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdV9wcm9qZWN0aW9uTWF0cml4
ICogdV9tb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogICAgICAgICB9
CiAgICAgKTsKIAotI2RlZmluZSBHTFNMX0RJUkVDVElWRSguLi4pICIjIiNfX1ZBX0FSR1NfXyJc
biIKLSNkZWZpbmUgREVGSU5FX0FQUExJRVIoTmFtZSkgXAotICAgICIjaWZkZWYgRU5BQkxFXyIj
TmFtZSJcbiIgXAotICAgICIjZGVmaW5lIGFwcGx5IiNOYW1lIklmTmVlZGVkIGFwcGx5IiNOYW1l
IlxuIlwKLSAgICAiI2Vsc2VcbiJcCi0gICAgIiNkZWZpbmUgYXBwbHkiI05hbWUiSWZOZWVkZWQg
bm9vcFxuIlwKLSAgICAiI2VuZGlmXG4iCi0KICNkZWZpbmUgUkVDVF9URVhUVVJFX0RJUkVDVElW
RSBcCiAgICAgR0xTTF9ESVJFQ1RJVkUoaWZkZWYgRU5BQkxFX1JlY3QpIFwKICAgICAgICAgR0xT
TF9ESVJFQ1RJVkUoZGVmaW5lIFNhbXBsZXJUeXBlIHNhbXBsZXIyRFJlY3QpIFwKQEAgLTE0MSwy
OSArMTg4LDE0IEBAIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPQogICAg
ICAgICBHTFNMX0RJUkVDVElWRShkZWZpbmUgU2FtcGxlckZ1bmN0aW9uIHRleHR1cmUyRCkgXAog
ICAgIEdMU0xfRElSRUNUSVZFKGVuZGlmKQogCi0jZGVmaW5lIEVOQUJMRV9BUFBMSUVSKE5hbWUp
ICIjZGVmaW5lIEVOQUJMRV8iI05hbWUiXG4iCisjZGVmaW5lIEVOQUJMRV9BUFBMSUVSKE5hbWUp
ICIjZGVmaW5lIEVOQUJMRV8iI05hbWUiXG4jZGVmaW5lIGFwcGx5IiNOYW1lIklmTmVlZGVkIGFw
cGx5IiNOYW1lIlxuIgorI2RlZmluZSBESVNBQkxFX0FQUExJRVIoTmFtZSkgIiNkZWZpbmUgYXBw
bHkiI05hbWUiSWZOZWVkZWQgbm9vcFxuIgogI2RlZmluZSBCTFVSX0NPTlNUQU5UUyBcCiAgICAg
R0xTTF9ESVJFQ1RJVkUoZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIIDExKSBcCiAg
ICAgR0xTTF9ESVJFQ1RJVkUoZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9TVEVQIDAuMikKIAogCiBz
dGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZSA9Ci0gICAgREVGSU5FX0FQUExJRVIo
VGV4dHVyZSkKLSAgICBERUZJTkVfQVBQTElFUihTb2xpZENvbG9yKQotICAgIERFRklORV9BUFBM
SUVSKE9wYWNpdHkpCi0gICAgREVGSU5FX0FQUExJRVIoTWFzaykKLSAgICBERUZJTkVfQVBQTElF
UihBbnRpYWxpYXMpCi0gICAgREVGSU5FX0FQUExJRVIoR3JheXNjYWxlRmlsdGVyKQotICAgIERF
RklORV9BUFBMSUVSKFNlcGlhRmlsdGVyKQotICAgIERFRklORV9BUFBMSUVSKFNhdHVyYXRlRmls
dGVyKQotICAgIERFRklORV9BUFBMSUVSKEh1ZVJvdGF0ZUZpbHRlcikKLSAgICBERUZJTkVfQVBQ
TElFUihJbnZlcnRGaWx0ZXIpCi0gICAgREVGSU5FX0FQUExJRVIoQnJpZ2h0bmVzc0ZpbHRlcikK
LSAgICBERUZJTkVfQVBQTElFUihDb250cmFzdEZpbHRlcikKLSAgICBERUZJTkVfQVBQTElFUihP
cGFjaXR5RmlsdGVyKQotICAgIERFRklORV9BUFBMSUVSKEJsdXJGaWx0ZXIpCi0gICAgREVGSU5F
X0FQUExJRVIoQWxwaGFCbHVyKQotICAgIERFRklORV9BUFBMSUVSKENvbnRlbnRUZXh0dXJlKQog
ICAgIFJFQ1RfVEVYVFVSRV9ESVJFQ1RJVkUKICAgICBCTFVSX0NPTlNUQU5UUwogICAgIFNUUklO
R0lGWSgKQEAgLTE3Miw5ICsyMDQsOSBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1w
bGF0ZSA9CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfbWFzazsKICAgICAgICAgdW5pZm9y
bSBzYW1wbGVyMkQgc19jb250ZW50VGV4dHVyZTsKICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X29w
YWNpdHk7CisgICAgICAgIHZhcnlpbmcgZmxvYXQgdl9hbnRpYWxpYXM7CiAgICAgICAgIHZhcnlp
bmcgdmVjMiB2X3RleENvb3JkOwogICAgICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7
Ci0gICAgICAgIHVuaWZvcm0gdmVjMyB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs4
XTsKICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2ZpbHRlckFtb3VudDsKICAgICAgICAgdW5pZm9y
bSB2ZWMyIHVfYmx1clJhZGl1czsKICAgICAgICAgdW5pZm9ybSB2ZWMyIHVfc2hhZG93T2Zmc2V0
OwpAQCAtMTgzLDUxICsyMTUsMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50VGVtcGxh
dGUgPQogCiAgICAgICAgIHZvaWQgbm9vcChpbm91dCB2ZWM0IGR1bW15UGFyYW1ldGVyKSB7IH0K
IAotICAgICAgICAvLyBUaGUgZGF0YSBwYXNzZWQgaW4gdV9leHBhbmRlZFF1YWRFZGdlc0luU2Ny
ZWVuU3BhY2UgaXMgbWVyZWx5IHRoZQotICAgICAgICAvLyBwcmUtc2NhbGVkIGNvZWZmZWNpZW50
cyBvZiB0aGUgbGluZSBlcXVhdGlvbnMgZGVzY3JpYmluZyB0aGUgZm91ciBlZGdlcwotICAgICAg
ICAvLyBvZiB0aGUgZXhwYW5kZWQgcXVhZCBpbiBzY3JlZW4gc3BhY2UgYW5kIHRoZSByZWN0YW5n
dWxhciBib3VuZGluZyBib3gKLSAgICAgICAgLy8gb2YgdGhlIGV4cGFuZGVkIHF1YWQuCi0gICAg
ICAgIC8vCi0gICAgICAgIGZsb2F0IG5vcm1hbGl6ZWREaXN0YW5jZSh2ZWMzIGVkZ2VDb2VmZmlj
aWVudCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gV2UgYXJlIGRvaW5nIGEgc2ltcGxlIGRp
c3RhbmNlIGNhbGN1bGF0aW9uIGhlcmUgYWNjb3JkaW5nIHRvIHRoZSBmb3JtdWxhOgotICAgICAg
ICAgICAgLy8gKEEqcC54ICsgQipwLnkgKyBDKSAvIHNxcnQoQV4yICsgQl4yKSA9IGRpc3RhbmNl
IGZyb20gbGluZSB0byBwCi0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgQSwgQiBhbmQgQyBoYXZl
IGFscmVhZHkgYmVlbiBzY2FsZWQgYnkgMSAvIHNxcnQoQV4yICsgQl4yKS4KLSAgICAgICAgICAg
IHJldHVybiBjbGFtcChkb3QoZWRnZUNvZWZmaWNpZW50LCB2ZWMzKGdsX0ZyYWdDb29yZC54eSwg
MS4pKSwgMC4sIDEuKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0IGFudGlhbGlhc1F1YWQo
dmVjMyBjb2VmZmljaWVudDEsIHZlYzMgY29lZmZpY2llbnQyLCB2ZWMzIGNvZWZmaWNpZW50Mywg
dmVjMyBjb2VmZmljaWVudDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE5vdyB3ZSB3YW50
IHRvIHJlZHVjZSB0aGUgYWxwaGEgdmFsdWUgb2YgdGhlIGZyYWdtZW50IGlmIGl0IGlzIGNsb3Nl
IHRvIHRoZQotICAgICAgICAgICAgLy8gZWRnZXMgb2YgdGhlIGV4cGFuZGVkIHF1YWQgKG9yIHJl
Y3Rhbmd1bGFyIGJvdW5kaW5nIGJveCAtLSB3aGljaCBzZWVtcyB0byBiZQotICAgICAgICAgICAg
Ly8gaW1wb3J0YW50IGZvciBiYWNrZmFjaW5nIHF1YWRzKS4gTm90ZSB0aGF0IHdlIGFyZSBjb21i
aW5pbmcgdGhlIGNvbnRyaWJ1dGlvbgotICAgICAgICAgICAgLy8gZnJvbSB0aGUgKHRvcCB8fCBi
b3R0b20pIGFuZCAobGVmdCB8fCByaWdodCkgZWRnZSBieSBzaW1wbHkgbXVsdGlwbHlpbmcuIFRo
aXMgZm9sbG93cwotICAgICAgICAgICAgLy8gdGhlIGFwcHJvYWNoIGRlc2NyaWJlZCBhdDogaHR0
cDovL2h0dHAuZGV2ZWxvcGVyLm52aWRpYS5jb20vR1BVR2VtczIvZ3B1Z2VtczJfY2hhcHRlcjIy
Lmh0bWwsCi0gICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2l0aG91dCB1c2luZyBHYXVzc2lh
biB3ZWlnaHRzLgotICAgICAgICAgICAgcmV0dXJuIG1pbihub3JtYWxpemVkRGlzdGFuY2UoY29l
ZmZpY2llbnQxKSwgbm9ybWFsaXplZERpc3RhbmNlKGNvZWZmaWNpZW50MikpCi0gICAgICAgICAg
ICAgICAgKiBtaW4obm9ybWFsaXplZERpc3RhbmNlKGNvZWZmaWNpZW50MyksIG5vcm1hbGl6ZWRE
aXN0YW5jZShjb2VmZmljaWVudDQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0IGFudGlh
bGlhcygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZsb2F0IGFudGlhbGlhc1ZhbHVlRm9yUXVh
ZCA9IAotICAgICAgICAgICAgICAgIGFudGlhbGlhc1F1YWQodV9leHBhbmRlZFF1YWRFZGdlc0lu
U2NyZWVuU3BhY2VbMF0sCi0gICAgICAgICAgICAgICAgICAgIHVfZXhwYW5kZWRRdWFkRWRnZXNJ
blNjcmVlblNwYWNlWzFdLAotICAgICAgICAgICAgICAgICAgICB1X2V4cGFuZGVkUXVhZEVkZ2Vz
SW5TY3JlZW5TcGFjZVsyXSwKLSAgICAgICAgICAgICAgICAgICAgdV9leHBhbmRlZFF1YWRFZGdl
c0luU2NyZWVuU3BhY2VbM10pOwotCi0gICAgICAgICAgICBmbG9hdCBhbnRpYWxpYXNWYWx1ZUZv
ckJvdW5kaW5nUmVjdCA9IAotICAgICAgICAgICAgICAgIGFudGlhbGlhc1F1YWQodV9leHBhbmRl
ZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNF0sCi0gICAgICAgICAgICAgICAgICAgIHVfZXhwYW5k
ZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzVdLAotICAgICAgICAgICAgICAgICAgICB1X2V4cGFu
ZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs2XSwKLSAgICAgICAgICAgICAgICAgICAgdV9leHBh
bmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbN10pOwotCi0gICAgICAgICAgICByZXR1cm4gbWlu
KGFudGlhbGlhc1ZhbHVlRm9yUXVhZCwgYW50aWFsaWFzVmFsdWVGb3JCb3VuZGluZ1JlY3QpOyAg
ICAgICAgICAgCi0gICAgICAgIH0KKyAgICAgICAgZmxvYXQgYW50aWFsaWFzKCkgeyByZXR1cm4g
c21vb3Roc3RlcCh2X2FudGlhbGlhcywgMC4sIDEuKTsgfQogCiAgICAgICAgIHZvaWQgYXBwbHlU
ZXh0dXJlKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgPSBTYW1wbGVyRnVuY3Rpb24oc19zYW1w
bGVyLCB2X3RleENvb3JkKTsgfQogICAgICAgICB2b2lkIGFwcGx5T3BhY2l0eShpbm91dCB2ZWM0
IGNvbG9yKSB7IGNvbG9yICo9IHVfb3BhY2l0eTsgfQotICAgICAgICB2b2lkIGFwcGx5QW50aWFs
aWFzKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgKj0gYW50aWFsaWFzKCk7IH0KKyAgICAgICAg
dm9pZCBhcHBseUFudGlhbGlhc2luZyhpbm91dCB2ZWM0IGNvbG9yKSB7IGNvbG9yICo9IGFudGlh
bGlhcygpOyB9CiAgICAgICAgIHZvaWQgYXBwbHlNYXNrKGlub3V0IHZlYzQgY29sb3IpIHsgY29s
b3IgKj0gdGV4dHVyZTJEKHNfbWFzaywgdl9tYXNrVGV4Q29vcmQpLmE7IH0KIAogICAgICAgICB2
b2lkIGFwcGx5R3JheXNjYWxlRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCkBAIC0zMzEsMTcgKzMy
MywxNCBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZSA9CiAgICAgICAgICAg
ICBjb2xvciA9IHNvdXJjZU92ZXIoY29udGVudENvbG9yLCBjb2xvcik7CiAgICAgICAgIH0KIAot
ICAgICAgICB2b2lkIGFwcGx5U29saWRDb2xvcihpbm91dCB2ZWM0IGNvbG9yKQotICAgICAgICB7
Ci0gICAgICAgICAgICBjb2xvciAqPSB1X2NvbG9yOwotICAgICAgICB9CisgICAgICAgIHZvaWQg
YXBwbHlTb2xpZENvbG9yKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgKj0gdV9jb2xvcjsgfQog
CiAgICAgICAgIHZvaWQgbWFpbih2b2lkKQogICAgICAgICB7CiAgICAgICAgICAgICB2ZWM0IGNv
bG9yID0gdmVjNCgxLiwgMS4sIDEuLCAxLik7CiAgICAgICAgICAgICBhcHBseVRleHR1cmVJZk5l
ZWRlZChjb2xvcik7CiAgICAgICAgICAgICBhcHBseVNvbGlkQ29sb3JJZk5lZWRlZChjb2xvcik7
Ci0gICAgICAgICAgICBhcHBseUFudGlhbGlhc0lmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAg
IGFwcGx5QW50aWFsaWFzaW5nSWZOZWVkZWQoY29sb3IpOwogICAgICAgICAgICAgYXBwbHlNYXNr
SWZOZWVkZWQoY29sb3IpOwogICAgICAgICAgICAgYXBwbHlPcGFjaXR5SWZOZWVkZWQoY29sb3Ip
OwogICAgICAgICAgICAgYXBwbHlHcmF5c2NhbGVGaWx0ZXJJZk5lZWRlZChjb2xvcik7CkBAIC0z
NjIsMzIgKzM1MSwzNSBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZSA9CiAK
IHN0YXRpYyB2b2lkIGdldFNoYWRlclNwZWMoVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9w
dGlvbnMgb3B0aW9ucywgU3RyaW5nJiB2ZXJ0ZXhTb3VyY2UsIFN0cmluZyYgZnJhZ21lbnRTb3Vy
Y2UpCiB7Ci0gICAgU3RyaW5nQnVpbGRlciBmcmFnbWVudEJ1aWxkZXI7CisKKyAgICBTdHJpbmdC
dWlsZGVyIHNoYWRlckJ1aWxkZXI7CiAjZGVmaW5lIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhB
cHBsaWVyKSBcCi0gICAgaWYgKG9wdGlvbnMgJiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6
QXBwbGllcikgXAotICAgICAgICBmcmFnbWVudEJ1aWxkZXIuYXBwZW5kKEVOQUJMRV9BUFBMSUVS
KEFwcGxpZXIpKTsKLQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhUZXh0dXJlKQotICAg
IFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhSZWN0KQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BU
SU9OUyhTb2xpZENvbG9yKQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhPcGFjaXR5KQot
ICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhNYXNrKQotICAgIFNFVF9BUFBMSUVSX0ZST01f
T1BUSU9OUyhBbnRpYWxpYXMpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEdyYXlzY2Fs
ZUZpbHRlcikKLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoU2VwaWFGaWx0ZXIpCi0gICAg
U0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFNhdHVyYXRlRmlsdGVyKQotICAgIFNFVF9BUFBMSUVS
X0ZST01fT1BUSU9OUyhIdWVSb3RhdGVGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJ
T05TKEJyaWdodG5lc3NGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKENvbnRy
YXN0RmlsdGVyKQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhJbnZlcnRGaWx0ZXIpCi0g
ICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKE9wYWNpdHlGaWx0ZXIpCi0gICAgU0VUX0FQUExJ
RVJfRlJPTV9PUFRJT05TKEJsdXJGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05T
KEFscGhhQmx1cikKLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQ29udGVudFRleHR1cmUp
Ci0KLSAgICBmcmFnbWVudEJ1aWxkZXIuYXBwZW5kKGZyYWdtZW50VGVtcGxhdGUpOwotICAgIHZl
cnRleFNvdXJjZSA9IHZlcnRleFNoYWRlclNvdXJjZTsKLSAgICBmcmFnbWVudFNvdXJjZSA9IGZy
YWdtZW50QnVpbGRlci50b1N0cmluZygpOworICAgIHNoYWRlckJ1aWxkZXIuYXBwZW5kKFwKKyAg
ICAgICAgKG9wdGlvbnMgJiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QXBwbGllcikgPyBF
TkFCTEVfQVBQTElFUihBcHBsaWVyKSA6IERJU0FCTEVfQVBQTElFUihBcHBsaWVyKSkKKworICAg
IFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhUZXh0dXJlKTsKKyAgICBTRVRfQVBQTElFUl9GUk9N
X09QVElPTlMoUmVjdCk7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFNvbGlkQ29sb3Ip
OworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhPcGFjaXR5KTsKKyAgICBTRVRfQVBQTElF
Ul9GUk9NX09QVElPTlMoTWFzayk7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEFudGlh
bGlhc2luZyk7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEdyYXlzY2FsZUZpbHRlcik7
CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFNlcGlhRmlsdGVyKTsKKyAgICBTRVRfQVBQ
TElFUl9GUk9NX09QVElPTlMoU2F0dXJhdGVGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZST01f
T1BUSU9OUyhIdWVSb3RhdGVGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhC
cmlnaHRuZXNzRmlsdGVyKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQ29udHJhc3RG
aWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhJbnZlcnRGaWx0ZXIpOworICAg
IFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhPcGFjaXR5RmlsdGVyKTsKKyAgICBTRVRfQVBQTElF
Ul9GUk9NX09QVElPTlMoQmx1ckZpbHRlcik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05T
KEFscGhhQmx1cik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKENvbnRlbnRUZXh0dXJl
KTsKKyAgICBTdHJpbmdCdWlsZGVyIHZlcnRleEJ1aWxkZXI7CisgICAgdmVydGV4QnVpbGRlci5h
cHBlbmQoc2hhZGVyQnVpbGRlci50b1N0cmluZygpKTsKKyAgICB2ZXJ0ZXhCdWlsZGVyLmFwcGVu
ZCh2ZXJ0ZXhUZW1wbGF0ZSk7CisgICAgc2hhZGVyQnVpbGRlci5hcHBlbmQoZnJhZ21lbnRUZW1w
bGF0ZSk7CisgICAgdmVydGV4U291cmNlID0gdmVydGV4QnVpbGRlci50b1N0cmluZygpOworICAg
IGZyYWdtZW50U291cmNlID0gc2hhZGVyQnVpbGRlci50b1N0cmluZygpOwogfQogCiBUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5o
CmluZGV4IGIzODIyYzRkOWU2OWJhZDRlOTFmOWQ5M2Q5ZWQ3MDg1NTI2MzI3OTUuLjNmNWFlNjhh
MWU0ZTU3MzI0YzAzNTg4NmNlM2E4Y2EyYTE0ZTc4YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlci5oCkBAIC00Nyw5ICs0Nyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpOwogCiAgICAgVEVYTUFQX0RFQ0xBUkVfQVRU
UklCVVRFKHZlcnRleCkKLSAgICBURVhNQVBfREVDTEFSRV9BVFRSSUJVVEUodGV4Q29vcmQpCiAK
LSAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKG1hdHJpeCkKKyAgICBURVhNQVBfREVDTEFSRV9V
TklGT1JNKG1vZGVsVmlld01hdHJpeCkKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKHByb2pl
Y3Rpb25NYXRyaXgpCiAgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShmbGlwKQogICAgIFRFWE1B
UF9ERUNMQVJFX1VOSUZPUk0odGV4dHVyZVNpemUpCiAgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9S
TShvcGFjaXR5KQpAQCAtNjYsNiArNjYsOCBAQCBwdWJsaWM6CiAgICAgVEVYTUFQX0RFQ0xBUkVf
U0FNUExFUihjb250ZW50VGV4dHVyZSkKICNlbmRpZgogCisgICAgdm9pZCBzZXRNYXRyaXgoR0Mz
RHVpbnQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisKIHByaXZhdGU6CiAgICAgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIGNv
bnN0IFN0cmluZyYgdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBTdHJpbmcmIGZyYWdtZW50U2hh
ZGVyU291cmNlKTsKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fdmVydGV4U2hhZGVyOwpAQCAtODcs
NyArODksNyBAQCBwdWJsaWM6CiAgICAgICAgIFNvbGlkQ29sb3IgICAgICAgPSAxTCA8PCAyLAog
ICAgICAgICBPcGFjaXR5ICAgICAgICAgID0gMUwgPDwgMywKICAgICAgICAgTWFzayAgICAgICAg
ICAgICA9IDFMIDw8IDQsCi0gICAgICAgIEFudGlhbGlhcyAgICAgICAgPSAxTCA8PCA1LAorICAg
ICAgICBBbnRpYWxpYXNpbmcgICAgID0gMUwgPDwgNSwKICAgICAgICAgR3JheXNjYWxlRmlsdGVy
ICA9IDFMIDw8IDYsCiAgICAgICAgIFNlcGlhRmlsdGVyICAgICAgPSAxTCA8PCA3LAogICAgICAg
ICBTYXR1cmF0ZUZpbHRlciAgID0gMUwgPDwgOCwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180906</attachid>
            <date>2012-12-28 18:24:35 -0800</date>
            <delta_ts>2012-12-28 19:06:46 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-105377-20121228182148.patch</filename>
            <type>text/plain</type>
            <size>41349</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4NTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzIxMWE1MTI0MTdkYTY5
YjRmMzYwOWQyYmQ4NGMwODJjZDJkZTNjMS4uZjg5YTViMjFiZGE0NzU3YWJkN2FlZDI4N2Y3OGZh
YjQwMDE5MjE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTEyLTE4ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1RleG1hcF0gRWRnZSBh
bnRpYWxpYXNpbmcgaW4gVGV4dHVyZU1hcHBlciBjb3VsZCBiZSBkb25lIHdpdGggbGVzcyBwZXIt
cGl4ZWwgY2FsbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwNTM3NworCisgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFu
c2VuLgorCisgICAgICAgIEluc3RlYWQgb2YgcGFzc2luZyA4IHF1YWQgZWRnZSBjb2VmZmljaWVu
dHMgYXMgdW5pZm9ybXMgYW5kIGFuYWx5emUgdGhlIGRpc3RhbmNlIGluIHRoZQorICAgICAgICBm
cmFnbWVudCBzaGFkZXIsIHdlIHJlbmRlciB0aGUgYW50aWFsaWFzZWQgcXVhZCBhcyA0IGVkZ2Ug
dHJpYW5nbGVzLCB3aGljaCBvcmlnaW5hdGUgaW4gdGhlCisgICAgICAgIGNlbnRlciBvZiB0aGUg
cXVhZC4gCisKKyAgICAgICAgVGhlIHZlcnRleCBzaGFkZXIgZXhwYW5kcyB0aGUgcXVhZCBiYXNl
ZCBvbiB0aGUgc2NyZWVuIHRyYW5zZm9ybSwgYW5kIGFwcGxpZXMgYSB2YWx1ZSB0byBlYWNoIHZl
cnRleCB0byBiZSBpbnRlcnBvbGF0ZWQgYnkgdGhlIEdQVS4gCisKKyAgICAgICAgSXQgaXMgdmVy
eSBkaWZmaWN1bHQgdG8gdGVzdCBwZXJmb3JtYW5jZSBnYWluOyBIb3dldmVyLCB0aGUgZm9sbG93
aW5nIGlzIGFwcGFyZW50OgorICAgICAgICAtIFRoZSBtYXRyaXggbXVsdGlwbGljYXRpb25zIGFu
ZCBpbnZlcnNpb25zIGRvbmUgYmVmb3JlIGluIHRoZSBxdWFkIGluZmxhdGlvbiBjb2RlIHdlcmUK
KyAgICAgICAgICBhbHdheXMgdmlzaWJsZSBpbiBpbnN0cnVtZW50cy92YWxncmluZCBhbmQgdGhl
eSBhcmUgbm93IGdvbmUuCisgICAgICAgIC0gV2Ugbm93IHBlcmZvcm0gYSBzaW5nbGUgc21vb3Ro
c3RlcCgpIGNvbW1hbmQgcGVyIHBpeGVsIGluc3RlYWQgb2YgOCBjbGFtcChkb3QoKSkgY29tbWFu
ZHMuCisgICAgICAgIC0gSXQgc2hvdWxkIG5vdyBiZSBwb3NzaWJsZSB0byBhbnRpYWxpYXMgaW5k
aXZpZHVhbCBlZGdlcy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpnZXRTdGF0aWNWQk8pOgorICAg
ICAgICAgICAgQ2FjaGUgdGhlIHVuaXQtcmVjdCBhbmQgZWRnZS10cmlhbmdsZSB2ZXJ0ZXggZGF0
YSBpbiBhIFZCTy4KKworICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6flRl
eHR1cmVNYXBwZXJHTERhdGEpOgorICAgICAgICAgICAgQ2xlYXIgdGhlIGNhY2hlZCBWQk9zIHVw
b24gZGVzdHJ1Y3Rpb24uCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJh
d0JvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJl
KToKKyAgICAgICAgICAgIFJlbW92ZWQgY2FsbCB0byB1c2VQcm9ncmFtLCBzaW5jZSBpdCdzIGFs
cmVhZHkgY2FsbGVkIGluIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbS4KKworICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcik6CisgICAg
ICAgICAgICBVc2UgdGhlIG5ldyBzaWduYXR1cmUgImRyYXciIGluc3RlYWQgb2YgImRyYXdRdWFk
Ii4KKworICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3RWRnZVRyaWFuZ2xl
cyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdVbml0UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXcpOgorICAgICAgICAgICAgUmVt
b3ZlZCBEcmF3UXVhZCwgaW5zdGVhZCBkcmF3IGVpdGhlciBhIHVuaXQgcmVjdCBvciBlZGdlIHRy
aWFuZ2xlcy4KKworICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAp
OgorICAgICAgICAgICAgVXNlIHRoZSBuZXcgc2V0TWF0cml4IGZ1bmN0aW9uLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oOgorICAgICAgICAg
ICAgQWRkZWQgYSBwYWludCBmbGFnIGZvciBhbnRpYWxpYXNpbmcuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OnNldE1hdHJpeCk6Cisg
ICAgICAgICAgICBTaW5jZSB3ZSBub3cgc2V0IHRoZSBtYXRyaXggaW4gbXVsdGlwbGUgbG9jYXRp
b25zLCBhZGRlZCBhIGNvbnZlbmllbmNlIAorICAgICAgICAgICAgZnVuY3Rpb24gZm9yIG1hdHJp
eCB1bmlmb3JtLgorCisgICAgICAgIChXZWJDb3JlOjpnZXRTaGFkZXJTcGVjKToKKyAgICAgICAg
ICAgIFVwZGF0ZSB0aGUgdmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXIgdG8gYWNjb3VudCBmb3Ig
dGhlIG5ldyBhbnRpYWxpYXNpbmcKKyAgICAgICAgICAgIG1lY2hhbmlzbS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaDoKKyAg
ICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKToKKwogMjAxMi0xMi0yNyAgS29uZGFw
YWxseSBLYWx5YW4gIDxrYWx5YW4ua29uZGFwYWxseUBpbnRlbC5jb20+CiAKICAgICAgICAgW0VG
TF1bV2ViR0xdIEltcGxlbWVudCBFR0wgc3VwcG9ydCB3aXRoIEdMWC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
TC5jcHAKaW5kZXggOTFiNGFlMjlhZWU5NzA5NzM4Y2ZjOWQyNWE0MGNjMGUwY2IwMmY4MC4uNzk2
OTdmN2E5YmJhNjEyMTE5NjhmOTM1ZDE0YzRjYzY1ZGUzYzBjMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
TC5jcHAKQEAgLTEwOSw3ICsxMDksNyBAQCBwdWJsaWM6CiAKICAgICBTaGFyZWRHTERhdGEmIHNo
YXJlZEdMRGF0YSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gKm1fc2hhcmVkR0xEYXRh
OworICAgICAgICByZXR1cm4gKnNoYXJlZERhdGE7CiAgICAgfQogCiAgICAgdm9pZCBpbml0aWFs
aXplU3RlbmNpbCgpOwpAQCAtMTIyLDkgKzEyMiwxMiBAQCBwdWJsaWM6CiAgICAgICAgICwgZGlk
TW9kaWZ5U3RlbmNpbChmYWxzZSkKICAgICAgICAgLCBwcmV2aW91c1NjaXNzb3JTdGF0ZSgwKQog
ICAgICAgICAsIHByZXZpb3VzRGVwdGhTdGF0ZSgwKQotICAgICAgICAsIG1fc2hhcmVkR0xEYXRh
KFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6Y3VycmVudFNoYXJlZEdMRGF0YSh0
aGlzLT5jb250ZXh0KSkKKyAgICAgICAgLCBzaGFyZWREYXRhKFRleHR1cmVNYXBwZXJHTERhdGE6
OlNoYXJlZEdMRGF0YTo6Y3VycmVudFNoYXJlZEdMRGF0YSh0aGlzLT5jb250ZXh0KSkKICAgICB7
IH0KIAorICAgIH5UZXh0dXJlTWFwcGVyR0xEYXRhKCk7CisgICAgUGxhdGZvcm0zRE9iamVjdCBn
ZXRTdGF0aWNWQk8oR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIsIGNvbnN0IHZvaWQqIGRh
dGEpOworCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQ7CiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggcHJvamVjdGlvbk1hdHJpeDsKICAgICBUZXh0dXJlTWFwcGVyOjpQYWludEZsYWdz
IFBhaW50RmxhZ3M7CkBAIC0xMzUsMTAgKzEzOCwzMSBAQCBwdWJsaWM6CiAgICAgR0MzRGludCBw
cmV2aW91c0RlcHRoU3RhdGU7CiAgICAgR0MzRGludCB2aWV3cG9ydFs0XTsKICAgICBHQzNEaW50
IHByZXZpb3VzU2Npc3Nvcls0XTsKLSAgICBSZWZQdHI8U2hhcmVkR0xEYXRhPiBtX3NoYXJlZEdM
RGF0YTsKKyAgICBSZWZQdHI8U2hhcmVkR0xEYXRhPiBzaGFyZWREYXRhOwogICAgIFJlZlB0cjxC
aXRtYXBUZXh0dXJlPiBjdXJyZW50U3VyZmFjZTsKKyAgICBIYXNoTWFwPGNvbnN0IHZvaWQqLCBQ
bGF0Zm9ybTNET2JqZWN0PiB2Ym9zOwogfTsKIAorUGxhdGZvcm0zRE9iamVjdCBUZXh0dXJlTWFw
cGVyR0xEYXRhOjpnZXRTdGF0aWNWQk8oR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6
ZSwgY29uc3Qgdm9pZCogZGF0YSkKK3sKKyAgICBIYXNoTWFwPGNvbnN0IHZvaWQqLCBQbGF0Zm9y
bTNET2JqZWN0Pjo6aXRlcmF0b3IgaXQgPSB2Ym9zLmZpbmQoZGF0YSk7CisgICAgaWYgKGl0ICE9
IHZib3MuZW5kKCkpCisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CisKKyAgICBQbGF0Zm9ybTNE
T2JqZWN0IHZibyA9IGNvbnRleHQtPmNyZWF0ZUJ1ZmZlcigpOworICAgIGNvbnRleHQtPmJpbmRC
dWZmZXIodGFyZ2V0LCB2Ym8pOworICAgIGNvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0LCBzaXpl
LCBkYXRhLCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOworICAgIHZib3MuYWRkKGRh
dGEsIHZibyk7CisgICAgcmV0dXJuIHZibzsKK30KKworVGV4dHVyZU1hcHBlckdMRGF0YTo6flRl
eHR1cmVNYXBwZXJHTERhdGEoKQoreworICAgIEhhc2hNYXA8Y29uc3Qgdm9pZCosIFBsYXRmb3Jt
M0RPYmplY3Q+OjppdGVyYXRvciBlbmQgPSB2Ym9zLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxj
b25zdCB2b2lkKiwgUGxhdGZvcm0zRE9iamVjdD46Oml0ZXJhdG9yIGl0ID0gdmJvcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGNvbnRleHQtPmRlbGV0ZUJ1ZmZlcihpdC0+dmFs
dWUpOworfQorCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjppbml0KGNvbnN0IElu
dFJlY3QmIHJlY3QpCiB7CiAgICAgY2xpcFN0YWNrLmNsZWFyKCk7CkBAIC0yNjksNDIgKzI5Myw2
IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjplbmRQYWludGluZygpCiAjZW5kaWYKIH0KIAotdm9p
ZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdRdWFkKGNvbnN0IERyYXdRdWFkJiBxdWFkVG9EcmF3LCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbSogc2hhZGVyUHJvZ3JhbSwgR0MzRGVudW0gZHJhd2luZ01vZGUsIEZsYWdz
IGZsYWdzKQotewotICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFk
ZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKLSAgICBtX2NvbnRleHQzRC0+YmluZEJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAwKTsKLQotICAgIGNvbnN0IEdDM0Rm
bG9hdCBxdWFkW10gPSB7Ci0gICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5p
dFNxdWFyZS5wMSgpLngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJl
LnAxKCkueSgpLAotICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVh
cmUucDIoKS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMigp
LnkoKSwKLSAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAz
KCkueCgpLCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDMoKS55KCks
Ci0gICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wNCgpLngo
KSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnA0KCkueSgpCi0gICAg
fTsKLSAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXJQcm9ncmFtLT52
ZXJ0ZXhMb2NhdGlvbigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBH
QzNEaW50cHRyKHF1YWQpKTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRy
YW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KS5tdWx0aXBseShtb2Rl
bFZpZXdNYXRyaXgpLm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4KAotICAgICAgICAgICAg
cXVhZFRvRHJhdy5vcmlnaW5hbFRhcmdldFJlY3Qud2lkdGgoKSwgMCwgMCwgMCwKLSAgICAgICAg
ICAgIDAsIHF1YWRUb0RyYXcub3JpZ2luYWxUYXJnZXRSZWN0LmhlaWdodCgpLCAwLCAwLAotICAg
ICAgICAgICAgMCwgMCwgMSwgMCwKLSAgICAgICAgICAgIHF1YWRUb0RyYXcub3JpZ2luYWxUYXJn
ZXRSZWN0LngoKSwgcXVhZFRvRHJhdy5vcmlnaW5hbFRhcmdldFJlY3QueSgpLCAwLCAxKSk7Ci0g
ICAgR0MzRGZsb2F0IG00W10gPSB7Ci0gICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0xMigp
LCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQoKSwKLSAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRy
aXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgpLAotICAgICAgICBtYXRyaXgubTMx
KCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCksCi0gICAgICAgIG1h
dHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5tNDQoKQotICAg
IH07Ci0gICAgbV9jb250ZXh0M0QtPnVuaWZvcm1NYXRyaXg0ZnYoc2hhZGVyUHJvZ3JhbS0+bWF0
cml4TG9jYXRpb24oKSwgMSwgZmFsc2UsIG00KTsKLQotICAgIGlmIChmbGFncyAmIFNob3VsZEJs
ZW5kKSB7Ci0gICAgICAgIG1fY29udGV4dDNELT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6
Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOwotICAgICAgICBt
X2NvbnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7
Ci0KLSAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhkcmF3aW5nTW9kZSwgMCwgNCk7Ci0gICAg
bV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0
ZXhMb2NhdGlvbigpKTsKLX0KLQogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29u
c3QgQ29sb3ImIGNvbG9yLCBmbG9hdCB3aWR0aCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4KQogewogICAgIGlm
IChjbGlwU3RhY2soKS5jdXJyZW50KCkuc2Npc3NvckJveC5pc0VtcHR5KCkpCkBAIC0zMTgsNyAr
MzA2LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3ImIGNv
bG9yLCBmbG9hdCB3aWR0aCwgY29uc3QgRmxvYXRSZWMKICAgICBtX2NvbnRleHQzRC0+dW5pZm9y
bTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgbV9jb250ZXh0
M0QtPmxpbmVXaWR0aCh3aWR0aCk7CiAKLSAgICBkcmF3UXVhZCh0YXJnZXRSZWN0LCBtb2RlbFZp
ZXdNYXRyaXgsIHByb2dyYW0uZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1AsIGNv
bG9yLmhhc0FscGhhKCkgPyBTaG91bGRCbGVuZCA6IDApOworICAgIGRyYXcodGFyZ2V0UmVjdCwg
bW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6TElORV9M
T09QLCBjb2xvci5oYXNBbHBoYSgpID8gU2hvdWxkQmxlbmQgOiAwKTsKIH0KIAogdm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmRyYXdSZXBhaW50Q291bnRlcihpbnQgdmFsdWUsIGludCBwb2ludFNpemUs
IGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbW9kZWxWaWV3TWF0cml4KQpAQCAtNDA2LDE3NSArMzk0LDExNCBAQCB2b2lkIFRleHR1cmVN
YXBwZXJHTDo6ZHJhd1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBGbGFncyBmbGFn
cywgY29uc3QgSQogewogICAgIGJvb2wgdXNlUmVjdCA9IGZsYWdzICYgU2hvdWxkVXNlQVJCVGV4
dHVyZVJlY3Q7CiAgICAgYm9vbCBtYXNrZWQgPSAhIW1hc2tUZXh0dXJlOwotICAgIGJvb2wgbmVl
ZHNBbnRpYWxpYXNpbmcgPSBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyAmJiAhbW9k
ZWxWaWV3TWF0cml4LmlzSW50ZWdlclRyYW5zbGF0aW9uKCk7Ci0KLSAgICBpZiAoIXVzZVJlY3Qg
JiYgbmVlZHNBbnRpYWxpYXNpbmcgJiYgZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHRleHR1
cmUsIGZsYWdzLCB0ZXh0dXJlU2l6ZSwgdGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBvcGFj
aXR5LCBtYXNrVGV4dHVyZSwgZXhwb3NlZEVkZ2VzKSkKLSAgICAgICAgcmV0dXJuOworICAgIGJv
b2wgdXNlQW50aWFsaWFzaW5nID0gbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcKKyAg
ICAgICAgJiYgZXhwb3NlZEVkZ2VzID09IEFsbEVkZ2VzCisgICAgICAgICYmICFtb2RlbFZpZXdN
YXRyaXgubWFwUXVhZCh0YXJnZXRSZWN0KS5pc1JlY3RpbGluZWFyKCk7CiAKICAgICBUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6T3B0aW9ucyBvcHRpb25zID0gVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OlRleHR1cmU7CiAgICAgaWYgKG1hc2tlZCkKICAgICAgICAgb3B0aW9ucyB8PSBU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6TWFzazsKLSAgICBpZiAoZmxhZ3MgJiBTaG91bGRV
c2VBUkJUZXh0dXJlUmVjdCkKKyAgICBpZiAodXNlUmVjdCkKICAgICAgICAgb3B0aW9ucyB8PSBU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6UmVjdDsKICAgICBpZiAob3BhY2l0eSA8IDEpCiAg
ICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wYWNpdHk7Cisg
ICAgaWYgKHVzZUFudGlhbGlhc2luZykgeworICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpBbnRpYWxpYXNpbmc7CisgICAgICAgIGZsYWdzIHw9IFNob3VsZEFu
dGlhbGlhczsKKyAgICB9CisKKyAgICBpZiAobWFza2VkIHx8IHVzZUFudGlhbGlhc2luZyB8fCBv
cGFjaXR5IDwgMSkKKyAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CiAKICAgICBSZWZQdHI8
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW07CiAgICAgcHJvZ3JhbSA9IGRhdGEo
KS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9n
cmFtKG9wdGlvbnMpOwotICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dy
YW1JRCgpKTsKLQogICAgIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgp
LCB0ZXh0dXJlLCBmbGFncywgdGV4dHVyZVNpemUsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJp
eCwgb3BhY2l0eSwgbWFza1RleHR1cmUpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJh
d1NvbGlkQ29sb3IoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbWF0cml4LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgUmVmUHRyPFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OlNvbGlkQ29sb3IpOworICAgIEZsYWdzIGZsYWdzID0gMDsKKyAgICBUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6T3B0aW9ucyBvcHRpb25zID0gVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OlNvbGlkQ29sb3I7CisgICAgaWYgKCFtYXRyaXgubWFwUXVhZChyZWN0KS5pc1Jl
Y3RpbGluZWFyKCkpIHsKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6QW50aWFsaWFzaW5nOworICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZCB8IFNob3Vs
ZEFudGlhbGlhczsKKyAgICB9CisKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsKICAgICBtX2NvbnRleHQzRC0+dXNlUHJv
Z3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CiAKICAgICBmbG9hdCByLCBnLCBiLCBhOwogICAg
IGNvbG9yLmdldFJHQkEociwgZywgYiwgYSk7CiAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm00Zihw
cm9ncmFtLT5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOworICAgIGlmIChhIDwgMSkKKyAg
ICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CiAKLSAgICBkcmF3UXVhZChyZWN0LCBtYXRyaXgs
IHByb2dyYW0uZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIGEgPCAxID8g
U2hvdWxkQmxlbmQgOiAwKTsKLX0KLQotc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZpZXdw
b3J0TWF0cml4KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QpCi17Ci0gICAgR0MzRGludCB2
aWV3cG9ydFs0XTsKLSAgICBjb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNE
OjpWSUVXUE9SVCwgdmlld3BvcnQpOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4
OwotICAgIG1hdHJpeC50cmFuc2xhdGUzZCh2aWV3cG9ydFswXSwgdmlld3BvcnRbMV0sIDApOwot
ICAgIG1hdHJpeC5zY2FsZTNkKHZpZXdwb3J0WzJdLCB2aWV3cG9ydFszXSwgMCk7Ci0KLSAgICAv
LyBNYXAgeCwgeSBhbmQgeiB0byB1bml0IHNxdWFyZSBmcm9tIE9wZW5HTCBub3JtYWxpemVkIGRl
dmljZQotICAgIC8vIGNvb3JkaW5hdGVzIHdoaWNoIGFyZSAtMSB0byAxIG9uIGV2ZXJ5IGF4aXMu
Ci0gICAgbWF0cml4LnRyYW5zbGF0ZTNkKDAuNSwgMC41LCAwLjUpOwotICAgIG1hdHJpeC5zY2Fs
ZTNkKDAuNSwgMC41LCAwLjUpOwotCi0gICAgcmV0dXJuIG1hdHJpeDsKLX0KLQotc3RhdGljIHZv
aWQgc2NhbGVMaW5lRXF1YXRpb25Db2VmZmVjaWVudHNUb09wdGltaXplRGlzdGFuY2VDYWxjdWxh
dGlvbihmbG9hdCogY29lZmZlY2llbnRzKQotewotICAgIC8vIEluIHRoZSBmcmFnbWVudCBzaGFk
ZXIgd2Ugd2FudCB0byBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGZyb20gdGhpcwotICAgIC8vIGxp
bmUgdG8gYSBwb2ludCAocCksIHdoaWNoIGlzIGdpdmVuIGJ5IHRoZSBmb3JtdWxhOgotICAgIC8v
IChBKnAueCArIEIqcC55ICsgQykgLyBzcXJ0IChhXjIgKyBiXjIpCi0gICAgLy8gV2UgY2FuIGRv
IGEgc21hbGwgYW1vdW50IG9mIHByZWNhbGN1bGF0aW9uIGhlcmUgdG8gcmVkdWNlIHRoZQotICAg
IC8vIGFtb3VudCBvZiBtYXRoIGluIHRoZSBzaGFkZXIgYnkgc2NhbGluZyB0aGUgY29lZmZlY2ll
bnRzIG5vdy4KLSAgICBmbG9hdCBzY2FsZSA9IDEuMCAvIEZsb2F0UG9pbnQoY29lZmZlY2llbnRz
WzBdLCBjb2VmZmVjaWVudHNbMV0pLmxlbmd0aCgpOwotICAgIGNvZWZmZWNpZW50c1swXSA9IGNv
ZWZmZWNpZW50c1swXSAqIHNjYWxlOwotICAgIGNvZWZmZWNpZW50c1sxXSA9IGNvZWZmZWNpZW50
c1sxXSAqIHNjYWxlOwotICAgIGNvZWZmZWNpZW50c1syXSA9IGNvZWZmZWNpZW50c1syXSAqIHNj
YWxlOworICAgIGRyYXcocmVjdCwgbWF0cml4LCBwcm9ncmFtLmdldCgpLCBHcmFwaGljc0NvbnRl
eHQzRDo6VFJJQU5HTEVfRkFOLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldFN0YW5kYXJk
RXF1YXRpb25Db2VmZmVjaWVudHNGb3JMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBG
bG9hdFBvaW50JiBwMiwgZmxvYXQqIGNvZWZmZWNpZW50cykKK3ZvaWQgVGV4dHVyZU1hcHBlckdM
OjpkcmF3RWRnZVRyaWFuZ2xlcyhUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSogcHJvZ3JhbSkK
IHsKLSAgICAvLyBHaXZlbiB0d28gcG9pbnRzLCB0aGUgc3RhbmRhcmQgZXF1YXRpb24gb2YgYSBs
aW5lIChBeCArIEJ5ICsgQyA9IDApCi0gICAgLy8gY2FuIGJlIGNhbGN1bGF0ZWQgdmlhIHRoZSBm
b3JtdWxhOgotICAgIC8vIChwMS55IOKAkyBwMi55KXggKyAocDEueCDigJMgcDIueCl5ICsgKChw
MS54KnAyLnkpIOKAkyAocDIueCpwMS55KSkgPSAwCi0gICAgY29lZmZlY2llbnRzWzBdID0gcDEu
eSgpIC0gcDIueSgpOwotICAgIGNvZWZmZWNpZW50c1sxXSA9IHAyLngoKSAtIHAxLngoKTsKLSAg
ICBjb2VmZmVjaWVudHNbMl0gPSBwMS54KCkgKiBwMi55KCkgLSBwMi54KCkgKiBwMS55KCk7Ci0g
ICAgc2NhbGVMaW5lRXF1YXRpb25Db2VmZmVjaWVudHNUb09wdGltaXplRGlzdGFuY2VDYWxjdWxh
dGlvbihjb2VmZmVjaWVudHMpOwotfQorICAgIGNvbnN0IEdDM0RmbG9hdCBsZWZ0ID0gMDsKKyAg
ICBjb25zdCBHQzNEZmxvYXQgdG9wID0gMDsKKyAgICBjb25zdCBHQzNEZmxvYXQgcmlnaHQgPSAx
OworICAgIGNvbnN0IEdDM0RmbG9hdCBib3R0b20gPSAxOworICAgIGNvbnN0IEdDM0RmbG9hdCBj
ZW50ZXIgPSAwLjU7CisKKy8vIEVhY2ggNGQgdHJpYW5nbGUgY29uc2lzdHMgb2YgYSBjZW50ZXIg
cG9pbnQgYW5kIHR3byBlZGdlIHBvaW50cywgd2hlcmUgdGhlIHp3IGNvb3JkaW5hdGVzCisvLyBv
ZiBlYWNoIHZlcnRleCBlcXVhbHMgdGhlIG5lYXJlc3QgcG9pbnQgdG8gdGhlIHZlcnRleCBvbiB0
aGUgZWRnZS4KKyNkZWZpbmUgU0lERV9UUklBTkdMRV9EQVRBKHgxLCB5MSwgeDIsIHkyKSBcCisg
ICAgeDEsIHkxLCB4MSwgeTEsIFwKKyAgICB4MiwgeTIsIHgyLCB5MiwgXAorICAgIGNlbnRlciwg
Y2VudGVyLCAoeDEgKyB4MikgLyAyLCAoeTEgKyB5MikgLyAyCisKKyAgICBzdGF0aWMgY29uc3Qg
R0MzRGZsb2F0IHVuaXRSZWN0U2lkZVRyaWFuZ2xlc1tdID0geworICAgICAgICBTSURFX1RSSUFO
R0xFX0RBVEEobGVmdCwgdG9wLCByaWdodCwgdG9wKSwKKyAgICAgICAgU0lERV9UUklBTkdMRV9E
QVRBKGxlZnQsIHRvcCwgbGVmdCwgYm90dG9tKSwKKyAgICAgICAgU0lERV9UUklBTkdMRV9EQVRB
KHJpZ2h0LCB0b3AsIHJpZ2h0LCBib3R0b20pLAorICAgICAgICBTSURFX1RSSUFOR0xFX0RBVEEo
bGVmdCwgYm90dG9tLCByaWdodCwgYm90dG9tKQorICAgIH07CisjdW5kZWYgU0lERV9UUklBTkdM
RV9EQVRBCiAKLXN0YXRpYyB2b2lkIHF1YWRUb0VkZ2VBcnJheShjb25zdCBGbG9hdFF1YWQmIHF1
YWQsIGZsb2F0KiBlZGdlQXJyYXkpCi17Ci0gICAgaWYgKHF1YWQuaXNDb3VudGVyY2xvY2t3aXNl
KCkpIHsKLSAgICAgICAgZ2V0U3RhbmRhcmRFcXVhdGlvbkNvZWZmZWNpZW50c0ZvckxpbmUocXVh
ZC5wNCgpLCBxdWFkLnAzKCksIGVkZ2VBcnJheSk7Ci0gICAgICAgIGdldFN0YW5kYXJkRXF1YXRp
b25Db2VmZmVjaWVudHNGb3JMaW5lKHF1YWQucDMoKSwgcXVhZC5wMigpLCBlZGdlQXJyYXkgKyAz
KTsKLSAgICAgICAgZ2V0U3RhbmRhcmRFcXVhdGlvbkNvZWZmZWNpZW50c0ZvckxpbmUocXVhZC5w
MigpLCBxdWFkLnAxKCksIGVkZ2VBcnJheSArIDYpOwotICAgICAgICBnZXRTdGFuZGFyZEVxdWF0
aW9uQ29lZmZlY2llbnRzRm9yTGluZShxdWFkLnAxKCksIHF1YWQucDQoKSwgZWRnZUFycmF5ICsg
OSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZ2V0U3RhbmRhcmRFcXVhdGlvbkNvZWZm
ZWNpZW50c0ZvckxpbmUocXVhZC5wNCgpLCBxdWFkLnAxKCksIGVkZ2VBcnJheSk7Ci0gICAgZ2V0
U3RhbmRhcmRFcXVhdGlvbkNvZWZmZWNpZW50c0ZvckxpbmUocXVhZC5wMSgpLCBxdWFkLnAyKCks
IGVkZ2VBcnJheSArIDMpOwotICAgIGdldFN0YW5kYXJkRXF1YXRpb25Db2VmZmVjaWVudHNGb3JM
aW5lKHF1YWQucDIoKSwgcXVhZC5wMygpLCBlZGdlQXJyYXkgKyA2KTsKLSAgICBnZXRTdGFuZGFy
ZEVxdWF0aW9uQ29lZmZlY2llbnRzRm9yTGluZShxdWFkLnAzKCksIHF1YWQucDQoKSwgZWRnZUFy
cmF5ICsgOSk7CisgICAgUGxhdGZvcm0zRE9iamVjdCB2Ym8gPSBkYXRhKCkuZ2V0U3RhdGljVkJP
KEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHNpemVvZihHQzNEZmxvYXQpICogNDgs
IHVuaXRSZWN0U2lkZVRyaWFuZ2xlcyk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRCdWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgdmJvKTsKKyAgICBtX2NvbnRleHQzRC0+dmVy
dGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCA0LCBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5
cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTLCAwLCAxMik7CiB9CiAKLXN0YXRpYyBGbG9h
dFNpemUgc2NhbGVkVmVjdG9yRGlmZmVyZW5jZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50MiwgZmxvYXQgc2NhbGUpCit2b2lkIFRleHR1cmVNYXBwZXJH
TDo6ZHJhd1VuaXRSZWN0KFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCBHQzNE
ZW51bSBkcmF3aW5nTW9kZSkKIHsKLSAgICBGbG9hdFNpemUgdmVjdG9yID0gcG9pbnQxIC0gcG9p
bnQyOwotICAgIGlmICh2ZWN0b3IuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkpCi0gICAgICAgIHZl
Y3Rvci5zY2FsZSgxLjAgLyB2ZWN0b3IuZGlhZ29uYWxMZW5ndGgoKSk7Ci0KLSAgICB2ZWN0b3Iu
c2NhbGUoc2NhbGUpOwotICAgIHJldHVybiB2ZWN0b3I7CisgICAgc3RhdGljIGNvbnN0IEdDM0Rm
bG9hdCB1bml0UmVjdFtdID0geyAwLCAwLCAxLCAwLCAxLCAxLCAwLCAxIH07CisgICAgUGxhdGZv
cm0zRE9iamVjdCB2Ym8gPSBkYXRhKCkuZ2V0U3RhdGljVkJPKEdyYXBoaWNzQ29udGV4dDNEOjpB
UlJBWV9CVUZGRVIsIHNpemVvZihHQzNEZmxvYXQpICogOCwgdW5pdFJlY3QpOworICAgIG1fY29u
dGV4dDNELT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHZibyk7
CisgICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4TG9j
YXRpb24oKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAg
bV9jb250ZXh0M0QtPmRyYXdBcnJheXMoZHJhd2luZ01vZGUsIDAsIDQpOwogfQogCi1zdGF0aWMg
RmxvYXRRdWFkIGluZmxhdGVRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgZmxvYXQgZGlzdGFu
Y2UpCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhdyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtKiBzaGFkZXJQcm9ncmFtLCBHQzNEZW51bSBkcmF3aW5nTW9kZSwgRmxhZ3Mg
ZmxhZ3MpCiB7Ci0gICAgRmxvYXRRdWFkIGV4cGFuZGVkUXVhZCA9IHF1YWQ7Ci0gICAgZXhwYW5k
ZWRRdWFkLnNldFAxKGV4cGFuZGVkUXVhZC5wMSgpICsgc2NhbGVkVmVjdG9yRGlmZmVyZW5jZShx
dWFkLnAxKCksIHF1YWQucDIoKSwgZGlzdGFuY2UpKTsKLSAgICBleHBhbmRlZFF1YWQuc2V0UDQo
ZXhwYW5kZWRRdWFkLnA0KCkgKyBzY2FsZWRWZWN0b3JEaWZmZXJlbmNlKHF1YWQucDQoKSwgcXVh
ZC5wMygpLCBkaXN0YW5jZSkpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9Cisg
ICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KG1vZGVsVmlld01hdHJpeCkubXVsdGlwbHkoVHJh
bnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoRmxvYXRSZWN0KDAsIDAsIDEsIDEpLCByZWN0
KSk7CiAKLSAgICBleHBhbmRlZFF1YWQuc2V0UDEoZXhwYW5kZWRRdWFkLnAxKCkgKyBzY2FsZWRW
ZWN0b3JEaWZmZXJlbmNlKHF1YWQucDEoKSwgcXVhZC5wNCgpLCBkaXN0YW5jZSkpOwotICAgIGV4
cGFuZGVkUXVhZC5zZXRQMihleHBhbmRlZFF1YWQucDIoKSArIHNjYWxlZFZlY3RvckRpZmZlcmVu
Y2UocXVhZC5wMigpLCBxdWFkLnAzKCksIGRpc3RhbmNlKSk7CisgICAgbV9jb250ZXh0M0QtPmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwor
ICAgIHNoYWRlclByb2dyYW0tPnNldE1hdHJpeChzaGFkZXJQcm9ncmFtLT5tb2RlbFZpZXdNYXRy
aXhMb2NhdGlvbigpLCBtYXRyaXgpOworICAgIHNoYWRlclByb2dyYW0tPnNldE1hdHJpeChzaGFk
ZXJQcm9ncmFtLT5wcm9qZWN0aW9uTWF0cml4TG9jYXRpb24oKSwgZGF0YSgpLnByb2plY3Rpb25N
YXRyaXgpOwogCi0gICAgZXhwYW5kZWRRdWFkLnNldFAyKGV4cGFuZGVkUXVhZC5wMigpICsgc2Nh
bGVkVmVjdG9yRGlmZmVyZW5jZShxdWFkLnAyKCksIHF1YWQucDEoKSwgZGlzdGFuY2UpKTsKLSAg
ICBleHBhbmRlZFF1YWQuc2V0UDMoZXhwYW5kZWRRdWFkLnAzKCkgKyBzY2FsZWRWZWN0b3JEaWZm
ZXJlbmNlKHF1YWQucDMoKSwgcXVhZC5wNCgpLCBkaXN0YW5jZSkpOworICAgIGlmIChmbGFncyAm
IFNob3VsZEJsZW5kKSB7CisgICAgICAgIG1fY29udGV4dDNELT5ibGVuZEZ1bmMoR3JhcGhpY3ND
b250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOwor
ICAgICAgICBtX2NvbnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Cisg
ICAgfSBlbHNlCisgICAgICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNE
OjpCTEVORCk7CiAKLSAgICBleHBhbmRlZFF1YWQuc2V0UDMoZXhwYW5kZWRRdWFkLnAzKCkgKyBz
Y2FsZWRWZWN0b3JEaWZmZXJlbmNlKHF1YWQucDMoKSwgcXVhZC5wMigpLCBkaXN0YW5jZSkpOwot
ICAgIGV4cGFuZGVkUXVhZC5zZXRQNChleHBhbmRlZFF1YWQucDQoKSArIHNjYWxlZFZlY3RvckRp
ZmZlcmVuY2UocXVhZC5wNCgpLCBxdWFkLnAxKCksIGRpc3RhbmNlKSk7CisgICAgaWYgKGZsYWdz
ICYgU2hvdWxkQW50aWFsaWFzKQorICAgICAgICBkcmF3RWRnZVRyaWFuZ2xlcyhzaGFkZXJQcm9n
cmFtKTsKKyAgICBlbHNlCisgICAgICAgIGRyYXdVbml0UmVjdChzaGFkZXJQcm9ncmFtLCBkcmF3
aW5nTW9kZSk7CiAKLSAgICByZXR1cm4gZXhwYW5kZWRRdWFkOworICAgIG1fY29udGV4dDNELT5k
aXNhYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7
CiB9Ci0KLWJvb2wgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmco
dWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgb3JpZ2luYWxUYXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBt
YXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzKQordm9pZCBUZXh0dXJlTWFwcGVyR0w6
OmRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSog
cHJvZ3JhbSwgdWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmIHNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1v
ZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1Rl
eHR1cmUpCiB7Ci0gICAgLy8gVGhlIGFudGlhbGlhc2luZyBwYXRoIGRvZXMgbm90IHN1cHBvcnQg
bWFzayB0ZXh0dXJlcyBhdCB0aGUgbW9tZW50LgotICAgIGlmIChtYXNrVGV4dHVyZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRm9yIG5vdyB3ZSBwdW50IG9uIHJlbmRlcmluZyB0
aWxlZCBsYXllcnMgd2l0aCBhbnRpYWxpYXNpbmcuIEl0J3MgcXVpdGUgaGFyZAotICAgIC8vIHRv
IHJlbmRlciB0aGVtIHdpdGhvdXQgc2VhbXMuCi0gICAgaWYgKGV4cG9zZWRFZGdlcyAhPSBBbGxF
ZGdlcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVGhlIGdvYWwgaGVyZSBpcyBy
ZW5kZXIgYSBzbGlnaHRseSBsYXJnZXIgKDAuNzUgcGl4ZWxzIGluIHNjcmVlbiBzcGFjZSkgcXVh
ZCBhbmQgdG8KLSAgICAvLyBncmFkdWFsbHkgdGFwZXIgb2ZmIHRoZSBhbHBoYSB2YWx1ZXMgdG8g
ZG8gYSBzaW1wbGUgdmVyc2lvbiBvZiBlZGdlIGRpc3RhbmNlCi0gICAgLy8gYW50aWFsaWFzaW5n
LiBOb3RlIGhlcmUgdGhhdCB3ZSBhcmUgYWxzbyBpbmNsdWRpbmcgdGhlIHZpZXdwb3J0IG1hdHJp
eCAod2hpY2gKLSAgICAvLyB0cmFuc2xhdGVzIGZyb20gbm9ybWFsaXplZCBkZXZpY2UgY29vcmRp
bmF0ZXMgdG8gc2NyZWVuIGNvb3JkaW5hdGVzKSwgYmVjYXVzZSB0aGVzZQotICAgIC8vIHZhbHVl
cyBhcmUgY29uc3VtZWQgaW4gdGhlIGZyYWdtZW50IHNoYWRlciwgd2hpY2ggd29ya3MgaW4gc2Ny
ZWVuIGNvb3JkaW5hdGVzLgotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcmVlblNwYWNlVHJh
bnNmb3JtID0gdmlld3BvcnRNYXRyaXgobV9jb250ZXh0M0QuZ2V0KCkpLm11bHRpcGx5KFRyYW5z
Zm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KSkubXVsdGlwbHkobW9kZWxW
aWV3TWF0cml4KS50bzJkVHJhbnNmb3JtKCk7Ci0gICAgaWYgKCFzY3JlZW5TcGFjZVRyYW5zZm9y
bS5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEZsb2F0UXVhZCBx
dWFkSW5TY3JlZW5TcGFjZSA9IHNjcmVlblNwYWNlVHJhbnNmb3JtLm1hcFF1YWQob3JpZ2luYWxU
YXJnZXRSZWN0KTsKLQotICAgIGNvbnN0IGZsb2F0IGluZmxhdGlvbkRpc3RhbmNlID0gMC43NTsK
LSAgICBGbG9hdFF1YWQgZXhwYW5kZWRRdWFkSW5TY3JlZW5TcGFjZSA9IGluZmxhdGVRdWFkKHF1
YWRJblNjcmVlblNwYWNlLCBpbmZsYXRpb25EaXN0YW5jZSk7Ci0KLSAgICAvLyBJbiB0aGUgbm9u
LWFudGlhbGlhc2VkIGNhc2UgdGhlIHZlcnRpY2VzIHBhc3NlZCBhcmUgdGhlIHVuaXQgcmVjdGFu
Z2xlIGFuZCBkb3VibGUKLSAgICAvLyBhcyB0aGUgdGV4dHVyZSBjb29yZGluYXRlcyAoMCwwIDEs
MCwgMSwxIGFuZCAwLDEpLiBIZXJlIHdlIG1hcCB0aGUgZXhwYW5kZWQgcXVhZAotICAgIC8vIGNv
b3JkaW5hdGVzIGluIHNjcmVlbiBzcGFjZSBiYWNrIHRvIHRoZSBvcmlnaW5hbCByZWN0J3MgdGV4
dHVyZSBjb29yZGluYXRlcy4KLSAgICAvLyBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mIHNsaWdodGx5
IGluY3JlYXNpbmcgdGhlIHNpemUgb2YgdGhlIG9yaWdpbmFsIHF1YWQncyBnZW9tZXRyeQotICAg
IC8vIGluIHRoZSB2ZXJ0ZXggc2hhZGVyLgotICAgIEZsb2F0UXVhZCBleHBhbmRlZFF1YWRJblRl
eHR1cmVDb29yZGluYXRlcyA9IHNjcmVlblNwYWNlVHJhbnNmb3JtLmludmVyc2UoKS5tYXBRdWFk
KGV4cGFuZGVkUXVhZEluU2NyZWVuU3BhY2UpOwotICAgIGV4cGFuZGVkUXVhZEluVGV4dHVyZUNv
b3JkaW5hdGVzLm1vdmUoLW9yaWdpbmFsVGFyZ2V0UmVjdC54KCksIC1vcmlnaW5hbFRhcmdldFJl
Y3QueSgpKTsKLSAgICBleHBhbmRlZFF1YWRJblRleHR1cmVDb29yZGluYXRlcy5zY2FsZSgxIC8g
b3JpZ2luYWxUYXJnZXRSZWN0LndpZHRoKCksIDEgLyBvcmlnaW5hbFRhcmdldFJlY3QuaGVpZ2h0
KCkpOwotCi0gICAgLy8gV2UgcHJlcGFyZSBib3RoIHRoZSBleHBhbmRlZCBxdWFkIGZvciB0aGUg
ZnJhZ21lbnQgc2hhZGVyIGFzIHdlbGwgYXMgdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nCi0gICAg
Ly8gYm94IG9mIHRoYXQgcXVhZCwgYXMgdGhhdCBzZWVtcyBuZWNlc3NhcnkgdG8gcHJvcGVybHkg
YW50aWFsaWFzIGJhY2tmYWNpbmcgcXVhZHMuCi0gICAgZmxvYXQgdGFyZ2V0UXVhZEVkZ2VzWzI0
XTsKLSAgICBxdWFkVG9FZGdlQXJyYXkoZXhwYW5kZWRRdWFkSW5TY3JlZW5TcGFjZSwgdGFyZ2V0
UXVhZEVkZ2VzKTsKLSAgICBxdWFkVG9FZGdlQXJyYXkoaW5mbGF0ZVF1YWQocXVhZEluU2NyZWVu
U3BhY2UuYm91bmRpbmdCb3goKSwgIGluZmxhdGlvbkRpc3RhbmNlKSwgdGFyZ2V0UXVhZEVkZ2Vz
ICsgMTIpOwotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcHRpb25zIG9wdGlvbnMg
PSBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QW50aWFsaWFzIHwgVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OlRleHR1cmU7Ci0gICAgaWYgKG9wYWNpdHkgPCAxKQotICAgICAgICBvcHRp
b25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5OwotCi0gICAgUmVmUHRy
PFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0
YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0ob3B0aW9ucyk7
CiAgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwotICAg
IG1fY29udGV4dDNELT51bmlmb3JtM2Z2KHByb2dyYW0tPmV4cGFuZGVkUXVhZEVkZ2VzSW5TY3Jl
ZW5TcGFjZUxvY2F0aW9uKCksIDgsIHRhcmdldFF1YWRFZGdlcyk7Ci0KLSAgICBkcmF3VGV4dHVy
ZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgdGV4dHVyZSwgZmxhZ3MsIHNpemUsIERy
YXdRdWFkKG9yaWdpbmFsVGFyZ2V0UmVjdCwgZXhwYW5kZWRRdWFkSW5UZXh0dXJlQ29vcmRpbmF0
ZXMpLCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIDAgLyogbWFza1RleHR1cmUgKi8pOwotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVh
ZFdpdGhQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCB1aW50MzJf
dCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgRHJhd1F1
YWQmIHF1YWRUb0RyYXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRy
aXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKQotewot
ICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhM
b2NhdGlvbigpKTsKICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRTApOwogICAgIEdDM0RlbnVtIHRhcmdldCA9IGZsYWdzICYgU2hvdWxkVXNl
QVJCVGV4dHVyZVJlY3QgPyBHQzNEZW51bShFeHRlbnNpb25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xF
X0FSQikgOiBHQzNEZW51bShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCk7CiAgICAgbV9j
b250ZXh0M0QtPmJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7CkBAIC01OTYsNyArNTIzLDcg
QEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSogcHIKICAgICBpZiAob3BhY2l0eSA8IDEgfHwgbWFza1Rl
eHR1cmUpCiAgICAgICAgIGZsYWdzIHw9IFNob3VsZEJsZW5kOwogCi0gICAgZHJhd1F1YWQocXVh
ZFRvRHJhdywgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLCBHcmFwaGljc0NvbnRleHQzRDo6VFJJ
QU5HTEVfRkFOLCBmbGFncyk7CisgICAgZHJhdyhyZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dy
YW0sIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIGZsYWdzKTsKIH0KIAogQml0bWFw
VGV4dHVyZUdMOjpCaXRtYXBUZXh0dXJlR0woVGV4dHVyZU1hcHBlckdMKiB0ZXh0dXJlTWFwcGVy
KQpAQCAtMTE3MCwyNiArMTA5NywxMCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlw
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgogICAgIGNv
bnN0IEdDM0RmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9OwogICAg
IG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleExvY2F0aW9u
KCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIodW5p
dFJlY3QpKTsKIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0
aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KQotICAgICAgICAgICAgLm11bHRpcGx5
KG1vZGVsVmlld01hdHJpeCkKLSAgICAgICAgICAgIC5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1h
dHJpeCh0YXJnZXRSZWN0LndpZHRoKCksIDAsIDAsIDAsCi0gICAgICAgICAgICAgICAgMCwgdGFy
Z2V0UmVjdC5oZWlnaHQoKSwgMCwgMCwKLSAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLAotICAg
ICAgICAgICAgICAgIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgMCwgMSkpOwotCi0g
ICAgY29uc3QgR0MzRGZsb2F0IG00W10gPSB7Ci0gICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0cml4
Lm0xMigpLCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQoKSwKLSAgICAgICAgbWF0cml4Lm0yMSgp
LCBtYXRyaXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgpLAotICAgICAgICBtYXRy
aXgubTMxKCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCksCi0gICAg
ICAgIG1hdHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5tNDQo
KQotICAgIH07CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRp
b25NYXRyaXgobW9kZWxWaWV3TWF0cml4KQorICAgICAgICAubXVsdGlwbHkoVHJhbnNmb3JtYXRp
b25NYXRyaXg6OnJlY3RUb1JlY3QoRmxvYXRSZWN0KDAsIDAsIDEsIDEpLCB0YXJnZXRSZWN0KSk7
CiAKLSAgICBjb25zdCBHQzNEZmxvYXQgbTRhbGxbXSA9IHsKLSAgICAgICAgMiwgMCwgMCwgMCwK
LSAgICAgICAgMCwgMiwgMCwgMCwKLSAgICAgICAgMCwgMCwgMSwgMCwKLSAgICAgICAgLTEsIC0x
LCAwLCAxCi0gICAgfTsKKyAgICBzdGF0aWMgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggZnVs
bFByb2plY3Rpb25NYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVjdChGbG9h
dFJlY3QoMCwgMCwgMSwgMSksIEZsb2F0UmVjdCgtMSwgLTEsIDIsIDIpKTsKIAogICAgIGludCYg
c3RlbmNpbEluZGV4ID0gY2xpcFN0YWNrKCkuY3VycmVudCgpLnN0ZW5jaWxJbmRleDsKIApAQCAt
MTIwMiwxMyArMTExMywxNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgogICAgIG1fY29udGV4
dDNELT5zdGVuY2lsTWFzaygweGZmICYgfihzdGVuY2lsSW5kZXggLSAxKSk7CiAKICAgICAvLyBG
aXJzdCBjbGVhciB0aGUgZW50aXJlIGJ1ZmZlciBhdCB0aGUgY3VycmVudCBpbmRleC4KLSAgICBt
X2NvbnRleHQzRC0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAx
LCBmYWxzZSwgY29uc3RfY2FzdDxHQzNEZmxvYXQqPihtNGFsbCkpOworICAgIHByb2dyYW0tPnNl
dE1hdHJpeChwcm9ncmFtLT5wcm9qZWN0aW9uTWF0cml4TG9jYXRpb24oKSwgZnVsbFByb2plY3Rp
b25NYXRyaXgpOworICAgIHByb2dyYW0tPnNldE1hdHJpeChwcm9ncmFtLT5tb2RlbFZpZXdNYXRy
aXhMb2NhdGlvbigpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKICAgICBtX2NvbnRleHQzRC0+
c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQzRDo6WkVS
TywgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8pOwogICAgIG1fY29udGV4dDNELT5kcmF3QXJyYXlz
KEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIDAsIDQpOwogCiAgICAgLy8gTm93IGFw
cGx5IHRoZSBjdXJyZW50IGluZGV4IHRvIHRoZSBuZXcgcXVhZC4KICAgICBtX2NvbnRleHQzRC0+
c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpSRVBMQUNFLCBHcmFwaGljc0NvbnRleHQzRDo6
UkVQTEFDRSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFUExBQ0UpOwotICAgIG1fY29udGV4dDNELT51
bmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIGZhbHNlLCBjb25z
dF9jYXN0PEdDM0RmbG9hdCo+KG00KSk7CisgICAgcHJvZ3JhbS0+c2V0TWF0cml4KHByb2dyYW0t
PnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpLCBkYXRhKCkucHJvamVjdGlvbk1hdHJpeCk7Cisg
ICAgcHJvZ3JhbS0+c2V0TWF0cml4KHByb2dyYW0tPm1vZGVsVmlld01hdHJpeExvY2F0aW9uKCks
IG1hdHJpeCk7CiAgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6
OlRSSUFOR0xFX0ZBTiwgMCwgNCk7CiAKICAgICAvLyBDbGVhciB0aGUgc3RhdGUuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckdMLmgKaW5kZXggNTlkYjNkMzk3OWMwZDEwYmU0MTQ4MTVlNzgyMzE1ZGYwN2MzNWExNi4u
YWExMzMxMmZhYWZjYTMxZmRmMWQxYzQxNGQzNWMyN2NhYzgwMmNhMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuaApAQCAtNDQsNyArNDQsOCBAQCBwdWJsaWM6CiAgICAgZW51bSBGbGFnIHsKICAgICAgICAg
U2hvdWxkQmxlbmQgPSAweDAxLAogICAgICAgICBTaG91bGRGbGlwVGV4dHVyZSA9IDB4MDIsCi0g
ICAgICAgIFNob3VsZFVzZUFSQlRleHR1cmVSZWN0ID0gMHgwNAorICAgICAgICBTaG91bGRVc2VB
UkJUZXh0dXJlUmVjdCA9IDB4MDQsCisgICAgICAgIFNob3VsZEFudGlhbGlhcyA9IDB4MDgKICAg
ICB9OwogCiAgICAgdHlwZWRlZiBpbnQgRmxhZ3M7CkBAIC05OCwyMiArOTksMTMgQEAgcHJpdmF0
ZToKICAgICAgICAgVmVjdG9yPENsaXBTdGF0ZT4gY2xpcFN0YWNrOwogICAgIH07CiAKLSAgICBz
dHJ1Y3QgRHJhd1F1YWQgewotICAgICAgICBEcmF3UXVhZChjb25zdCBGbG9hdFJlY3QmIG9yaWdp
bmFsVGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRRdWFkJiB0YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1
YXJlID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgRmxvYXRTaXplKDEsIDEpKSkKLSAgICAgICAg
ICAgIDogb3JpZ2luYWxUYXJnZXRSZWN0KG9yaWdpbmFsVGFyZ2V0UmVjdCkKLSAgICAgICAgICAg
ICwgdGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZSh0YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1
YXJlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBGbG9hdFJlY3Qgb3JpZ2luYWxU
YXJnZXRSZWN0OwotICAgICAgICBGbG9hdFF1YWQgdGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFy
ZTsKLSAgICB9OwotCiAgICAgVGV4dHVyZU1hcHBlckdMKCk7CiAKLSAgICBib29sIGRyYXdUZXh0
dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncywgY29uc3QgSW50U2l6
ZSYsIGNvbnN0IEZsb2F0UmVjdCYgb3JpZ2luYWxUYXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBU
ZXh0dXJlKiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzKTsKLSAgICB2b2lkIGRy
YXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSosIHVp
bnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBJbnRTaXplJiwgY29uc3QgRHJhd1F1YWQmLCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5
LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7Ci0gICAgdm9pZCBkcmF3UXVhZChj
b25zdCBEcmF3UXVhZCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRy
aXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiwgR0MzRGVudW0gZHJhd2luZ01vZGUsIEZs
YWdzKTsKKyAgICB2b2lkIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbSosIHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBJbnRTaXplJiwg
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01h
dHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpOwor
ICAgIHZvaWQgZHJhdyhjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSosIEdDM0RlbnVt
IGRyYXdpbmdNb2RlLCBGbGFncyk7CisKKyAgICB2b2lkIGRyYXdVbml0UmVjdChUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbSosIEdDM0RlbnVtIGRyYXdpbmdNb2RlKTsKKyAgICB2b2lkIGRyYXdF
ZGdlVHJpYW5nbGVzKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKik7CiAKICAgICBib29sIGJl
Z2luU2Npc3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJl
Y3QmKTsKICAgICB2b2lkIGJpbmREZWZhdWx0U3VyZmFjZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKaW5kZXggMmQ4NmJmODU5ZGE4NjE3ZmM0ODc5ZjJkNzE3
NTkyMjhhYTFjMDQzZi4uMTg1NWJlYjZlMDI4ZmQ0ZGQwNmE4YWFmMjU4ZGE1MDk2MzZjOGVjYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCkBAIC03MCw2ICs3
MCwxOCBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleAogICAgIExPRyhDb21wb3NpdGluZywgIlBy
b2dyYW0gbG9nOiAlc1xuIiwgbG9nLnV0ZjgoKS5kYXRhKCkpOwogfQogCit2b2lkIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtOjpzZXRNYXRyaXgoR0MzRHVpbnQgbG9jYXRpb24sIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCit7CisgICAgR0MzRGZsb2F0IG1hdHJpeEFzRmxv
YXRzW10gPSB7CisgICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0xMigpLCBtYXRyaXgubTEz
KCksIG1hdHJpeC5tMTQoKSwKKyAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRyaXgubTIyKCksIG1h
dHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgpLAorICAgICAgICBtYXRyaXgubTMxKCksIG1hdHJpeC5t
MzIoKSwgbWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCksCisgICAgICAgIG1hdHJpeC5tNDEoKSwg
bWF0cml4Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5tNDQoKQorICAgIH07CisKKyAgICBt
X2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIDEsIGZhbHNlLCBtYXRyaXhBc0Zs
b2F0cyk7Cit9CisKIEdDM0R1aW50IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpnZXRMb2Nh
dGlvbihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFZhcmlhYmxlVHlwZSB0eXBlKQogewogICAg
IEhhc2hNYXA8QXRvbWljU3RyaW5nLCBHQzNEdWludD46Oml0ZXJhdG9yIGl0ID0gbV92YXJpYWJs
ZXMuZmluZChuYW1lKTsKQEAgLTEwNiwzMiArMTE4LDY3IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKQogICAgIG1fY29udGV4dC0+ZGVs
ZXRlUHJvZ3JhbShwcm9ncmFtSUQpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hh
ZGVyU291cmNlID0KKyNkZWZpbmUgR0xTTF9ESVJFQ1RJVkUoLi4uKSAiIyIjX19WQV9BUkdTX18i
XG4iCitzdGF0aWMgY29uc3QgY2hhciogdmVydGV4VGVtcGxhdGUgPQogICAgIFNUUklOR0lGWSgK
LSAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OworICAgICAgICBhdHRyaWJ1dGUgdmVjNCBh
X3ZlcnRleDsKKyAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbW9kZWxWaWV3TWF0cml4OworICAgICAg
ICB1bmlmb3JtIG1hdDQgdV9wcm9qZWN0aW9uTWF0cml4OwogICAgICAgICB1bmlmb3JtIGZsb2F0
IHVfZmxpcDsKICAgICAgICAgdW5pZm9ybSB2ZWMyIHVfdGV4dHVyZVNpemU7Ci0gICAgICAgIGF0
dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OworCiAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENvb3Jk
OwogICAgICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7CisgICAgICAgIHZhcnlpbmcg
ZmxvYXQgdl9hbnRpYWxpYXM7CisKKyAgICAgICAgdm9pZCBub29wKHZlYzIpIHsgfQorCisgICAg
ICAgIHZlYzQgdG9WaWV3cG9ydFNwYWNlKHZlYzIgcG9zKSB7IHJldHVybiB2ZWM0KHBvcywgMC4s
IDEuKSAqIHVfbW9kZWxWaWV3TWF0cml4OyB9CisKKyAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBy
ZWxpZXMgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB3ZSBnZXQgZWRnZSB0cmlhbmdsZXMgd2l0aCBj
b250cm9sIHBvaW50cywKKyAgICAgICAgLy8gYSBjb250cm9sIHBvaW50IGJlaW5nIHRoZSBuZWFy
ZXN0IHBvaW50IHRvIHRoZSBjb29yZGluYXRlIHRoYXQgaXMgb24gdGhlIGVkZ2UuCisgICAgICAg
IHZvaWQgYXBwbHlBbnRpYWxpYXNpbmcoaW5vdXQgdmVjMiBwb3NpdGlvbikKKyAgICAgICAgewor
ICAgICAgICAgICAgLy8gV2UgY291bnQgb24gdGhlIGZhY3QgdGhhdCBxdWFkIHBhc3NlZCBpbiBp
cyBhbHdheXMgYSB1bml0IHJlY3QsCisgICAgICAgICAgICAvLyBhbmQgdGhlIHRyYW5zZm9ybWF0
aW9uIG1hdHJpeCBhcHBsaWVzIHRoZSByZWFsIHJlY3QuCisgICAgICAgICAgICBjb25zdCB2ZWMy
IGNlbnRlciA9IHZlYzIoMC41LCAwLjUpOworICAgICAgICAgICAgY29uc3QgZmxvYXQgYW50aWFs
aWFzSW5mbGF0aW9uRGlzdGFuY2UgPSAxLjsKKworICAgICAgICAgICAgLy8gV2UgcGFzcyB0aGUg
Y29udHJvbCBwb2ludCBhcyB0aGUgencgY29vcmRpbmF0ZXMgb2YgdGhlIHZlcnRleC4KKyAgICAg
ICAgICAgIC8vIFRoZSBjb250cm9sIHBvaW50IGlzIHRoZSBwb2ludCBvbiB0aGUgZWRnZSBjbG9z
ZXN0IHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICAgICAgICAgICAgLy8gVGhlIGNvbnRyb2wg
cG9pbnQgaXMgdXNlZCB0byBjb21wdXRlIHRoZSBhbnRpYWxpYXMgdmFsdWUuCisgICAgICAgICAg
ICB2ZWMyIGNvbnRyb2xQb2ludCA9IGFfdmVydGV4Lnp3OworCisgICAgICAgICAgICAvLyBGaXJz
dCB3ZSBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGluIHZpZXdwb3J0IHNwYWNlLgorICAgICAgICAg
ICAgdmVjNCBjZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSB0b1ZpZXdwb3J0U3BhY2UoY2Vu
dGVyKTsKKyAgICAgICAgICAgIHZlYzQgY29udHJvbFBvaW50SW5WaWV3cG9ydENvb3JkaW5hdGVz
ID0gdG9WaWV3cG9ydFNwYWNlKGNvbnRyb2xQb2ludCk7CisgICAgICAgICAgICBmbG9hdCB2aWV3
cG9ydFNwYWNlRGlzdGFuY2UgPSBkaXN0YW5jZShjZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMs
IGNvbnRyb2xQb2ludEluVmlld3BvcnRDb29yZGluYXRlcyk7CisKKyAgICAgICAgICAgIC8vIFdl
IGFkZCB0aGUgaW5mbGF0aW9uIGRpc3RhbmNlIHRvIHRoZSBjb21wdXRlZCBkaXN0YW5jZSwgYW5k
IGNvbXB1dGUgdGhlIHJhdGlvLgorICAgICAgICAgICAgZmxvYXQgaW5mbGF0aW9uUmF0aW8gPSAo
dmlld3BvcnRTcGFjZURpc3RhbmNlICsgYW50aWFsaWFzSW5mbGF0aW9uRGlzdGFuY2UpIC8gdmll
d3BvcnRTcGFjZURpc3RhbmNlOworCisgICAgICAgICAgICAvLyB2X2FudGlhbGlhcyBuZWVkcyB0
byBiZSAwIGZvciB0aGUgb3V0ZXIgZWRnZSBhbmQgMS4gZm9yIHRoZSBpbm5lciBlZGdlLgorICAg
ICAgICAgICAgLy8gU2luY2UgdGhlIGNvbnRyb2xQb2ludCBpcyBlcXVhbCB0byB0aGUgcG9zaXRp
b24gaW4gdGhlIGVkZ2UgdmVydGljZXMsIHRoZSB2YWx1ZSBpcyBhbHdheXMgMCBmb3IgdGhvc2Uu
CisgICAgICAgICAgICAvLyBGb3IgdGhlIGNlbnRlciBwb2ludCwgdGhlIGRpc3RhbmNlIGlzIGFs
d2F5cyAwLjUsIHNvIHdlIG5vcm1hbGl6ZSB0byAxLiBieSBtdWx0aXBseWluZyBieSAyLgorICAg
ICAgICAgICAgLy8gQnkgbXVsdHBseWluZyBieSBpbmZsYXRpb25SYXRpbyBhbmQgZGl2aWRpbmcg
YnkgKGluZmxhdGlvblJhdGlvIC0gMSksCisgICAgICAgICAgICAvLyBXZSBtYWtlIHN1cmUgdGhh
dCB0aGUgdmFyeWluZyBpbnRlcnBvbGF0ZXMgYmV0d2VlbiAwIChvdXRlciBlZGdlKSwgMSAoaW5u
ZXIgZWRnZSkgYW5kIG4gPiAxIChjZW50ZXIpLgorICAgICAgICAgICAgdl9hbnRpYWxpYXMgPSBk
aXN0YW5jZShjb250cm9sUG9pbnQsIHBvc2l0aW9uKSAqIDIuICogaW5mbGF0aW9uUmF0aW8gLyAo
aW5mbGF0aW9uUmF0aW8gLSAxLik7CisKKyAgICAgICAgICAgIC8vIE5vdyBpbmZsYXRlIHRoZSBh
Y3R1YWwgcG9zaXRpb24uIEJ5IHVzaW5nIHRoaXMgZm9ybXVsYSBpbnN0ZWFkIG9mIGluZmxhdGlu
ZyBwb3NpdGlvbiBkaXJlY3RseSwKKyAgICAgICAgICAgIC8vIHdlIGVuc3VyZSB0aGF0IHRoZSBj
ZW50ZXIgdmVydGV4IGlzIG5ldmVyIGluZmxhdGVkLgorICAgICAgICAgICAgcG9zaXRpb24gPSBj
ZW50ZXIgKyAocG9zaXRpb24gLSBjZW50ZXIpICogaW5mbGF0aW9uUmF0aW87CisgICAgICAgIH0K
IAogICAgICAgICB2b2lkIG1haW4odm9pZCkKICAgICAgICAgewotICAgICAgICAgICAgdmVjNCBw
b3NpdGlvbiA9IGFfdmVydGV4OworICAgICAgICAgICAgdmVjMiBwb3NpdGlvbiA9IGFfdmVydGV4
Lnh5OworICAgICAgICAgICAgYXBwbHlBbnRpYWxpYXNpbmdJZk5lZWRlZChwb3NpdGlvbik7CiAg
ICAgICAgICAgICB2X3RleENvb3JkID0gdmVjMihwb3NpdGlvbi54LCBtaXgocG9zaXRpb24ueSwg
MS4gLSBwb3NpdGlvbi55LCB1X2ZsaXApKSAqIHVfdGV4dHVyZVNpemU7Ci0gICAgICAgICAgICB2
X21hc2tUZXhDb29yZCA9IHZlYzIocG9zaXRpb24pOwotICAgICAgICAgICAgZ2xfUG9zaXRpb24g
PSB1X21hdHJpeCAqIGFfdmVydGV4OworICAgICAgICAgICAgdl9tYXNrVGV4Q29vcmQgPSBwb3Np
dGlvbjsKKyAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdV9wcm9qZWN0aW9uTWF0cml4ICogdV9t
b2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogICAgICAgICB9CiAgICAg
KTsKIAotI2RlZmluZSBHTFNMX0RJUkVDVElWRSguLi4pICIjIiNfX1ZBX0FSR1NfXyJcbiIKLSNk
ZWZpbmUgREVGSU5FX0FQUExJRVIoTmFtZSkgXAotICAgICIjaWZkZWYgRU5BQkxFXyIjTmFtZSJc
biIgXAotICAgICIjZGVmaW5lIGFwcGx5IiNOYW1lIklmTmVlZGVkIGFwcGx5IiNOYW1lIlxuIlwK
LSAgICAiI2Vsc2VcbiJcCi0gICAgIiNkZWZpbmUgYXBwbHkiI05hbWUiSWZOZWVkZWQgbm9vcFxu
IlwKLSAgICAiI2VuZGlmXG4iCi0KICNkZWZpbmUgUkVDVF9URVhUVVJFX0RJUkVDVElWRSBcCiAg
ICAgR0xTTF9ESVJFQ1RJVkUoaWZkZWYgRU5BQkxFX1JlY3QpIFwKICAgICAgICAgR0xTTF9ESVJF
Q1RJVkUoZGVmaW5lIFNhbXBsZXJUeXBlIHNhbXBsZXIyRFJlY3QpIFwKQEAgLTE0MSwyOSArMTg4
LDE0IEBAIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPQogICAgICAgICBH
TFNMX0RJUkVDVElWRShkZWZpbmUgU2FtcGxlckZ1bmN0aW9uIHRleHR1cmUyRCkgXAogICAgIEdM
U0xfRElSRUNUSVZFKGVuZGlmKQogCi0jZGVmaW5lIEVOQUJMRV9BUFBMSUVSKE5hbWUpICIjZGVm
aW5lIEVOQUJMRV8iI05hbWUiXG4iCisjZGVmaW5lIEVOQUJMRV9BUFBMSUVSKE5hbWUpICIjZGVm
aW5lIEVOQUJMRV8iI05hbWUiXG4jZGVmaW5lIGFwcGx5IiNOYW1lIklmTmVlZGVkIGFwcGx5IiNO
YW1lIlxuIgorI2RlZmluZSBESVNBQkxFX0FQUExJRVIoTmFtZSkgIiNkZWZpbmUgYXBwbHkiI05h
bWUiSWZOZWVkZWQgbm9vcFxuIgogI2RlZmluZSBCTFVSX0NPTlNUQU5UUyBcCiAgICAgR0xTTF9E
SVJFQ1RJVkUoZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIIDExKSBcCiAgICAgR0xT
TF9ESVJFQ1RJVkUoZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9TVEVQIDAuMikKIAogCiBzdGF0aWMg
Y29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZSA9Ci0gICAgREVGSU5FX0FQUExJRVIoVGV4dHVy
ZSkKLSAgICBERUZJTkVfQVBQTElFUihTb2xpZENvbG9yKQotICAgIERFRklORV9BUFBMSUVSKE9w
YWNpdHkpCi0gICAgREVGSU5FX0FQUExJRVIoTWFzaykKLSAgICBERUZJTkVfQVBQTElFUihBbnRp
YWxpYXMpCi0gICAgREVGSU5FX0FQUExJRVIoR3JheXNjYWxlRmlsdGVyKQotICAgIERFRklORV9B
UFBMSUVSKFNlcGlhRmlsdGVyKQotICAgIERFRklORV9BUFBMSUVSKFNhdHVyYXRlRmlsdGVyKQot
ICAgIERFRklORV9BUFBMSUVSKEh1ZVJvdGF0ZUZpbHRlcikKLSAgICBERUZJTkVfQVBQTElFUihJ
bnZlcnRGaWx0ZXIpCi0gICAgREVGSU5FX0FQUExJRVIoQnJpZ2h0bmVzc0ZpbHRlcikKLSAgICBE
RUZJTkVfQVBQTElFUihDb250cmFzdEZpbHRlcikKLSAgICBERUZJTkVfQVBQTElFUihPcGFjaXR5
RmlsdGVyKQotICAgIERFRklORV9BUFBMSUVSKEJsdXJGaWx0ZXIpCi0gICAgREVGSU5FX0FQUExJ
RVIoQWxwaGFCbHVyKQotICAgIERFRklORV9BUFBMSUVSKENvbnRlbnRUZXh0dXJlKQogICAgIFJF
Q1RfVEVYVFVSRV9ESVJFQ1RJVkUKICAgICBCTFVSX0NPTlNUQU5UUwogICAgIFNUUklOR0lGWSgK
QEAgLTE3Miw5ICsyMDQsOSBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZSA9
CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfbWFzazsKICAgICAgICAgdW5pZm9ybSBzYW1w
bGVyMkQgc19jb250ZW50VGV4dHVyZTsKICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7
CisgICAgICAgIHZhcnlpbmcgZmxvYXQgdl9hbnRpYWxpYXM7CiAgICAgICAgIHZhcnlpbmcgdmVj
MiB2X3RleENvb3JkOwogICAgICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7Ci0gICAg
ICAgIHVuaWZvcm0gdmVjMyB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs4XTsKICAg
ICAgICAgdW5pZm9ybSBmbG9hdCB1X2ZpbHRlckFtb3VudDsKICAgICAgICAgdW5pZm9ybSB2ZWMy
IHVfYmx1clJhZGl1czsKICAgICAgICAgdW5pZm9ybSB2ZWMyIHVfc2hhZG93T2Zmc2V0OwpAQCAt
MTgzLDUxICsyMTUsMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50VGVtcGxhdGUgPQog
CiAgICAgICAgIHZvaWQgbm9vcChpbm91dCB2ZWM0IGR1bW15UGFyYW1ldGVyKSB7IH0KIAotICAg
ICAgICAvLyBUaGUgZGF0YSBwYXNzZWQgaW4gdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3Bh
Y2UgaXMgbWVyZWx5IHRoZQotICAgICAgICAvLyBwcmUtc2NhbGVkIGNvZWZmZWNpZW50cyBvZiB0
aGUgbGluZSBlcXVhdGlvbnMgZGVzY3JpYmluZyB0aGUgZm91ciBlZGdlcwotICAgICAgICAvLyBv
ZiB0aGUgZXhwYW5kZWQgcXVhZCBpbiBzY3JlZW4gc3BhY2UgYW5kIHRoZSByZWN0YW5ndWxhciBi
b3VuZGluZyBib3gKLSAgICAgICAgLy8gb2YgdGhlIGV4cGFuZGVkIHF1YWQuCi0gICAgICAgIC8v
Ci0gICAgICAgIGZsb2F0IG5vcm1hbGl6ZWREaXN0YW5jZSh2ZWMzIGVkZ2VDb2VmZmljaWVudCkK
LSAgICAgICAgewotICAgICAgICAgICAgLy8gV2UgYXJlIGRvaW5nIGEgc2ltcGxlIGRpc3RhbmNl
IGNhbGN1bGF0aW9uIGhlcmUgYWNjb3JkaW5nIHRvIHRoZSBmb3JtdWxhOgotICAgICAgICAgICAg
Ly8gKEEqcC54ICsgQipwLnkgKyBDKSAvIHNxcnQoQV4yICsgQl4yKSA9IGRpc3RhbmNlIGZyb20g
bGluZSB0byBwCi0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgQSwgQiBhbmQgQyBoYXZlIGFscmVh
ZHkgYmVlbiBzY2FsZWQgYnkgMSAvIHNxcnQoQV4yICsgQl4yKS4KLSAgICAgICAgICAgIHJldHVy
biBjbGFtcChkb3QoZWRnZUNvZWZmaWNpZW50LCB2ZWMzKGdsX0ZyYWdDb29yZC54eSwgMS4pKSwg
MC4sIDEuKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0IGFudGlhbGlhc1F1YWQodmVjMyBj
b2VmZmljaWVudDEsIHZlYzMgY29lZmZpY2llbnQyLCB2ZWMzIGNvZWZmaWNpZW50MywgdmVjMyBj
b2VmZmljaWVudDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE5vdyB3ZSB3YW50IHRvIHJl
ZHVjZSB0aGUgYWxwaGEgdmFsdWUgb2YgdGhlIGZyYWdtZW50IGlmIGl0IGlzIGNsb3NlIHRvIHRo
ZQotICAgICAgICAgICAgLy8gZWRnZXMgb2YgdGhlIGV4cGFuZGVkIHF1YWQgKG9yIHJlY3Rhbmd1
bGFyIGJvdW5kaW5nIGJveCAtLSB3aGljaCBzZWVtcyB0byBiZQotICAgICAgICAgICAgLy8gaW1w
b3J0YW50IGZvciBiYWNrZmFjaW5nIHF1YWRzKS4gTm90ZSB0aGF0IHdlIGFyZSBjb21iaW5pbmcg
dGhlIGNvbnRyaWJ1dGlvbgotICAgICAgICAgICAgLy8gZnJvbSB0aGUgKHRvcCB8fCBib3R0b20p
IGFuZCAobGVmdCB8fCByaWdodCkgZWRnZSBieSBzaW1wbHkgbXVsdGlwbHlpbmcuIFRoaXMgZm9s
bG93cwotICAgICAgICAgICAgLy8gdGhlIGFwcHJvYWNoIGRlc2NyaWJlZCBhdDogaHR0cDovL2h0
dHAuZGV2ZWxvcGVyLm52aWRpYS5jb20vR1BVR2VtczIvZ3B1Z2VtczJfY2hhcHRlcjIyLmh0bWws
Ci0gICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2l0aG91dCB1c2luZyBHYXVzc2lhbiB3ZWln
aHRzLgotICAgICAgICAgICAgcmV0dXJuIG1pbihub3JtYWxpemVkRGlzdGFuY2UoY29lZmZpY2ll
bnQxKSwgbm9ybWFsaXplZERpc3RhbmNlKGNvZWZmaWNpZW50MikpCi0gICAgICAgICAgICAgICAg
KiBtaW4obm9ybWFsaXplZERpc3RhbmNlKGNvZWZmaWNpZW50MyksIG5vcm1hbGl6ZWREaXN0YW5j
ZShjb2VmZmljaWVudDQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0IGFudGlhbGlhcygp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZsb2F0IGFudGlhbGlhc1ZhbHVlRm9yUXVhZCA9IAot
ICAgICAgICAgICAgICAgIGFudGlhbGlhc1F1YWQodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVu
U3BhY2VbMF0sCi0gICAgICAgICAgICAgICAgICAgIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVl
blNwYWNlWzFdLAotICAgICAgICAgICAgICAgICAgICB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3Jl
ZW5TcGFjZVsyXSwKLSAgICAgICAgICAgICAgICAgICAgdV9leHBhbmRlZFF1YWRFZGdlc0luU2Ny
ZWVuU3BhY2VbM10pOwotCi0gICAgICAgICAgICBmbG9hdCBhbnRpYWxpYXNWYWx1ZUZvckJvdW5k
aW5nUmVjdCA9IAotICAgICAgICAgICAgICAgIGFudGlhbGlhc1F1YWQodV9leHBhbmRlZFF1YWRF
ZGdlc0luU2NyZWVuU3BhY2VbNF0sCi0gICAgICAgICAgICAgICAgICAgIHVfZXhwYW5kZWRRdWFk
RWRnZXNJblNjcmVlblNwYWNlWzVdLAotICAgICAgICAgICAgICAgICAgICB1X2V4cGFuZGVkUXVh
ZEVkZ2VzSW5TY3JlZW5TcGFjZVs2XSwKLSAgICAgICAgICAgICAgICAgICAgdV9leHBhbmRlZFF1
YWRFZGdlc0luU2NyZWVuU3BhY2VbN10pOwotCi0gICAgICAgICAgICByZXR1cm4gbWluKGFudGlh
bGlhc1ZhbHVlRm9yUXVhZCwgYW50aWFsaWFzVmFsdWVGb3JCb3VuZGluZ1JlY3QpOyAgICAgICAg
ICAgCi0gICAgICAgIH0KKyAgICAgICAgZmxvYXQgYW50aWFsaWFzKCkgeyByZXR1cm4gc21vb3Ro
c3RlcCh2X2FudGlhbGlhcywgMC4sIDEuKTsgfQogCiAgICAgICAgIHZvaWQgYXBwbHlUZXh0dXJl
KGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgPSBTYW1wbGVyRnVuY3Rpb24oc19zYW1wbGVyLCB2
X3RleENvb3JkKTsgfQogICAgICAgICB2b2lkIGFwcGx5T3BhY2l0eShpbm91dCB2ZWM0IGNvbG9y
KSB7IGNvbG9yICo9IHVfb3BhY2l0eTsgfQotICAgICAgICB2b2lkIGFwcGx5QW50aWFsaWFzKGlu
b3V0IHZlYzQgY29sb3IpIHsgY29sb3IgKj0gYW50aWFsaWFzKCk7IH0KKyAgICAgICAgdm9pZCBh
cHBseUFudGlhbGlhc2luZyhpbm91dCB2ZWM0IGNvbG9yKSB7IGNvbG9yICo9IGFudGlhbGlhcygp
OyB9CiAgICAgICAgIHZvaWQgYXBwbHlNYXNrKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgKj0g
dGV4dHVyZTJEKHNfbWFzaywgdl9tYXNrVGV4Q29vcmQpLmE7IH0KIAogICAgICAgICB2b2lkIGFw
cGx5R3JheXNjYWxlRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCkBAIC0zMzEsMTcgKzMyMywxNCBA
QCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZSA9CiAgICAgICAgICAgICBjb2xv
ciA9IHNvdXJjZU92ZXIoY29udGVudENvbG9yLCBjb2xvcik7CiAgICAgICAgIH0KIAotICAgICAg
ICB2b2lkIGFwcGx5U29saWRDb2xvcihpbm91dCB2ZWM0IGNvbG9yKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBjb2xvciAqPSB1X2NvbG9yOwotICAgICAgICB9CisgICAgICAgIHZvaWQgYXBwbHlT
b2xpZENvbG9yKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgKj0gdV9jb2xvcjsgfQogCiAgICAg
ICAgIHZvaWQgbWFpbih2b2lkKQogICAgICAgICB7CiAgICAgICAgICAgICB2ZWM0IGNvbG9yID0g
dmVjNCgxLiwgMS4sIDEuLCAxLik7CiAgICAgICAgICAgICBhcHBseVRleHR1cmVJZk5lZWRlZChj
b2xvcik7CiAgICAgICAgICAgICBhcHBseVNvbGlkQ29sb3JJZk5lZWRlZChjb2xvcik7Ci0gICAg
ICAgICAgICBhcHBseUFudGlhbGlhc0lmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5
QW50aWFsaWFzaW5nSWZOZWVkZWQoY29sb3IpOwogICAgICAgICAgICAgYXBwbHlNYXNrSWZOZWVk
ZWQoY29sb3IpOwogICAgICAgICAgICAgYXBwbHlPcGFjaXR5SWZOZWVkZWQoY29sb3IpOwogICAg
ICAgICAgICAgYXBwbHlHcmF5c2NhbGVGaWx0ZXJJZk5lZWRlZChjb2xvcik7CkBAIC0zNjIsMzIg
KzM1MSwzNSBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZSA9CiAKIHN0YXRp
YyB2b2lkIGdldFNoYWRlclNwZWMoVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlvbnMg
b3B0aW9ucywgU3RyaW5nJiB2ZXJ0ZXhTb3VyY2UsIFN0cmluZyYgZnJhZ21lbnRTb3VyY2UpCiB7
Ci0gICAgU3RyaW5nQnVpbGRlciBmcmFnbWVudEJ1aWxkZXI7CisKKyAgICBTdHJpbmdCdWlsZGVy
IHNoYWRlckJ1aWxkZXI7CiAjZGVmaW5lIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhBcHBsaWVy
KSBcCi0gICAgaWYgKG9wdGlvbnMgJiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QXBwbGll
cikgXAotICAgICAgICBmcmFnbWVudEJ1aWxkZXIuYXBwZW5kKEVOQUJMRV9BUFBMSUVSKEFwcGxp
ZXIpKTsKLQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhUZXh0dXJlKQotICAgIFNFVF9B
UFBMSUVSX0ZST01fT1BUSU9OUyhSZWN0KQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhT
b2xpZENvbG9yKQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhPcGFjaXR5KQotICAgIFNF
VF9BUFBMSUVSX0ZST01fT1BUSU9OUyhNYXNrKQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9O
UyhBbnRpYWxpYXMpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEdyYXlzY2FsZUZpbHRl
cikKLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoU2VwaWFGaWx0ZXIpCi0gICAgU0VUX0FQ
UExJRVJfRlJPTV9PUFRJT05TKFNhdHVyYXRlRmlsdGVyKQotICAgIFNFVF9BUFBMSUVSX0ZST01f
T1BUSU9OUyhIdWVSb3RhdGVGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEJy
aWdodG5lc3NGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKENvbnRyYXN0Rmls
dGVyKQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhJbnZlcnRGaWx0ZXIpCi0gICAgU0VU
X0FQUExJRVJfRlJPTV9PUFRJT05TKE9wYWNpdHlGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJP
TV9PUFRJT05TKEJsdXJGaWx0ZXIpCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEFscGhh
Qmx1cikKLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQ29udGVudFRleHR1cmUpCi0KLSAg
ICBmcmFnbWVudEJ1aWxkZXIuYXBwZW5kKGZyYWdtZW50VGVtcGxhdGUpOwotICAgIHZlcnRleFNv
dXJjZSA9IHZlcnRleFNoYWRlclNvdXJjZTsKLSAgICBmcmFnbWVudFNvdXJjZSA9IGZyYWdtZW50
QnVpbGRlci50b1N0cmluZygpOworICAgIHNoYWRlckJ1aWxkZXIuYXBwZW5kKFwKKyAgICAgICAg
KG9wdGlvbnMgJiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QXBwbGllcikgPyBFTkFCTEVf
QVBQTElFUihBcHBsaWVyKSA6IERJU0FCTEVfQVBQTElFUihBcHBsaWVyKSkKKworICAgIFNFVF9B
UFBMSUVSX0ZST01fT1BUSU9OUyhUZXh0dXJlKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElP
TlMoUmVjdCk7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFNvbGlkQ29sb3IpOworICAg
IFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhPcGFjaXR5KTsKKyAgICBTRVRfQVBQTElFUl9GUk9N
X09QVElPTlMoTWFzayk7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEFudGlhbGlhc2lu
Zyk7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEdyYXlzY2FsZUZpbHRlcik7CisgICAg
U0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFNlcGlhRmlsdGVyKTsKKyAgICBTRVRfQVBQTElFUl9G
Uk9NX09QVElPTlMoU2F0dXJhdGVGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9O
UyhIdWVSb3RhdGVGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhCcmlnaHRu
ZXNzRmlsdGVyKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQ29udHJhc3RGaWx0ZXIp
OworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhJbnZlcnRGaWx0ZXIpOworICAgIFNFVF9B
UFBMSUVSX0ZST01fT1BUSU9OUyhPcGFjaXR5RmlsdGVyKTsKKyAgICBTRVRfQVBQTElFUl9GUk9N
X09QVElPTlMoQmx1ckZpbHRlcik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEFscGhh
Qmx1cik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKENvbnRlbnRUZXh0dXJlKTsKKyAg
ICBTdHJpbmdCdWlsZGVyIHZlcnRleEJ1aWxkZXI7CisgICAgdmVydGV4QnVpbGRlci5hcHBlbmQo
c2hhZGVyQnVpbGRlci50b1N0cmluZygpKTsKKyAgICB2ZXJ0ZXhCdWlsZGVyLmFwcGVuZCh2ZXJ0
ZXhUZW1wbGF0ZSk7CisgICAgc2hhZGVyQnVpbGRlci5hcHBlbmQoZnJhZ21lbnRUZW1wbGF0ZSk7
CisgICAgdmVydGV4U291cmNlID0gdmVydGV4QnVpbGRlci50b1N0cmluZygpOworICAgIGZyYWdt
ZW50U291cmNlID0gc2hhZGVyQnVpbGRlci50b1N0cmluZygpOwogfQogCiBUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCmluZGV4
IGIzODIyYzRkOWU2OWJhZDRlOTFmOWQ5M2Q5ZWQ3MDg1NTI2MzI3OTUuLjNmNWFlNjhhMWU0ZTU3
MzI0YzAzNTg4NmNlM2E4Y2EyYTE0ZTc4YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlci5oCkBAIC00Nyw5ICs0Nyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5UZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpOwogCiAgICAgVEVYTUFQX0RFQ0xBUkVfQVRUUklCVVRF
KHZlcnRleCkKLSAgICBURVhNQVBfREVDTEFSRV9BVFRSSUJVVEUodGV4Q29vcmQpCiAKLSAgICBU
RVhNQVBfREVDTEFSRV9VTklGT1JNKG1hdHJpeCkKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JN
KG1vZGVsVmlld01hdHJpeCkKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKHByb2plY3Rpb25N
YXRyaXgpCiAgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShmbGlwKQogICAgIFRFWE1BUF9ERUNM
QVJFX1VOSUZPUk0odGV4dHVyZVNpemUpCiAgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShvcGFj
aXR5KQpAQCAtNjYsNiArNjYsOCBAQCBwdWJsaWM6CiAgICAgVEVYTUFQX0RFQ0xBUkVfU0FNUExF
Uihjb250ZW50VGV4dHVyZSkKICNlbmRpZgogCisgICAgdm9pZCBzZXRNYXRyaXgoR0MzRHVpbnQs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisKIHByaXZhdGU6CiAgICAgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIGNvbnN0IFN0
cmluZyYgdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBTdHJpbmcmIGZyYWdtZW50U2hhZGVyU291
cmNlKTsKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fdmVydGV4U2hhZGVyOwpAQCAtODcsNyArODks
NyBAQCBwdWJsaWM6CiAgICAgICAgIFNvbGlkQ29sb3IgICAgICAgPSAxTCA8PCAyLAogICAgICAg
ICBPcGFjaXR5ICAgICAgICAgID0gMUwgPDwgMywKICAgICAgICAgTWFzayAgICAgICAgICAgICA9
IDFMIDw8IDQsCi0gICAgICAgIEFudGlhbGlhcyAgICAgICAgPSAxTCA8PCA1LAorICAgICAgICBB
bnRpYWxpYXNpbmcgICAgID0gMUwgPDwgNSwKICAgICAgICAgR3JheXNjYWxlRmlsdGVyICA9IDFM
IDw8IDYsCiAgICAgICAgIFNlcGlhRmlsdGVyICAgICAgPSAxTCA8PCA3LAogICAgICAgICBTYXR1
cmF0ZUZpbHRlciAgID0gMUwgPDwgOCwK
</data>

          </attachment>
      

    </bug>

</bugzilla>